URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Submission Tags: phishing malicious Search All
Submission: On September 13 via api from US

Summary

This website contacted 95 IPs in 8 countries across 70 domains to perform 314 HTTP transactions. The main IP is 178.19.72.10, located in Germany and belongs to HGCOMP-ASN, DE. The main domain is www.giga.de.
TLS certificate: Issued by RapidSSL RSA CA 2018 on July 18th 2018. Valid for: 2 years.
This is the only time www.giga.de was scanned on urlscan.io!

urlscan.io Verdict: No classification

Domain & IP information

IP Address AS Autonomous System
15 178.19.72.10 29551 (HGCOMP-ASN)
1 151.101.14.217 54113 (FASTLY)
1 91.215.100.39 43407 (INFONLINE-AS)
1 46.253.113.178 29551 (HGCOMP-ASN)
9 178.19.70.100 29551 (HGCOMP-ASN)
15 2a00:1450:400... 15169 (GOOGLE)
3 188.40.16.106 24940 (HETZNER-AS)
1 2 161.156.66.178 36351 (SOFTLAYER)
2 2a03:2880:f12... 32934 (FACEBOOK)
1 2600:9000:205... 16509 (AMAZON-02)
14 2a00:1450:400... 15169 (GOOGLE)
4 143.204.211.231 16509 (AMAZON-02)
6 107.178.241.34 15169 (GOOGLE)
1 193.46.63.75 43407 (INFONLINE-AS)
2 3 91.215.103.65 43407 (INFONLINE-AS)
6 109.71.25.30 29551 (HGCOMP-ASN)
3 178.19.72.20 29551 (HGCOMP-ASN)
2 6 104.109.82.87 20940 (AKAMAI-ASN1)
1 143.204.214.51 16509 (AMAZON-02)
1 2.18.233.67 16625 (AKAMAI-AS)
1 2 80.82.201.88 48173 (UNBELIEVA...)
1 18.195.39.206 16509 (AMAZON-02)
1 2a00:1450:400... 15169 (GOOGLE)
3 2a00:1450:400... 15169 (GOOGLE)
1 2600:9000:20b... 16509 (AMAZON-02)
1 14 72.251.249.9 29791 (VOXEL-DOT...)
3 2606:4700:20:... 13335 (CLOUDFLAR...)
1 2a00:1450:400... 15169 (GOOGLE)
1 16 216.58.206.2 15169 (GOOGLE)
10 136.243.5.11 24940 (HETZNER-AS)
1 2a00:1450:400... 15169 (GOOGLE)
1 178.19.65.130 29551 (HGCOMP-ASN)
1 2.18.234.21 16625 (AKAMAI-AS)
4 6 152.199.21.32 15133 (EDGECAST)
4 4 152.199.22.24 15133 (EDGECAST)
3 69.173.144.142 26667 (RUBICONPR...)
1 185.64.189.112 62713 (AS-PUBMATIC)
1 3 34.95.120.147 15169 (GOOGLE)
2 5 37.252.173.27 29990 (ASN-APPNEXUS)
3 37.157.6.253 198622 (ADFORM)
1 2 52.94.218.7 16509 (AMAZON-02)
1 2a00:1450:400... 15169 (GOOGLE)
4 17 151.101.14.2 54113 (FASTLY)
1 2a00:1450:400... 15169 (GOOGLE)
6 2.18.234.72 16625 (AKAMAI-AS)
2 5 23.43.115.95 20940 (AKAMAI-ASN1)
2 151.101.113.194 54113 (FASTLY)
2 52.219.73.107 16509 (AMAZON-02)
1 2001:4de0:ac1... 20446 (HIGHWINDS3)
3 143.204.214.42 16509 (AMAZON-02)
1 2a02:26f0:6c0... 20940 (AKAMAI-ASN1)
7 185.22.221.117 60955 (WAVECON)
1 104.111.246.233 16625 (AKAMAI-AS)
2 62.168.44.126 5588 (GTSCE GTS...)
5 151.101.114.49 54113 (FASTLY)
2 2 18.196.130.47 16509 (AMAZON-02)
1 69.173.144.165 26667 (RUBICONPR...)
1 1 40.113.136.100 8075 (MICROSOFT...)
2 2 172.217.22.2 15169 (GOOGLE)
2 2 52.49.153.216 16509 (AMAZON-02)
1 1 35.162.160.88 16509 (AMAZON-02)
1 192.132.33.46 18568 (BIDTELLECT)
1 130.211.13.252 15169 (GOOGLE)
3 3 18.185.176.108 16509 (AMAZON-02)
1 1 193.0.160.128 54312 (ROCKETFUEL)
2 6 34.247.144.106 16509 (AMAZON-02)
1 104.16.88.26 13335 (CLOUDFLAR...)
1 18.194.251.73 16509 (AMAZON-02)
2 4 18.195.251.148 16509 (AMAZON-02)
1 2 143.204.214.111 16509 (AMAZON-02)
1 104.18.100.194 13335 (CLOUDFLAR...)
1 52.51.225.28 16509 (AMAZON-02)
6 2600:9000:205... 16509 (AMAZON-02)
2 2 172.217.21.198 15169 (GOOGLE)
1 85.14.248.91 24961 (MYLOC-AS)
7 208.100.17.186 32748 (STEADFAST)
8 151.101.114.2 54113 (FASTLY)
1 2a00:1450:400... 15169 (GOOGLE)
4 151.101.14.49 54113 (FASTLY)
3 46.4.116.20 24940 (HETZNER-AS)
3 69.16.175.10 20446 (HIGHWINDS3)
1 62.168.44.125 5588 (GTSCE GTS...)
11 2.18.232.7 16625 (AKAMAI-AS)
1 144.76.115.247 24940 (HETZNER-AS)
1 54.235.243.56 14618 (AMAZON-AES)
1 54.243.114.159 14618 (AMAZON-AES)
1 208.100.17.184 32748 (STEADFAST)
2 2a02:26f0:6c0... 20940 (AKAMAI-ASN1)
19 2a02:26f0:6c0... 20940 (AKAMAI-ASN1)
1 2 104.108.39.228 16625 (AKAMAI-AS)
1 3 89.163.159.109 24961 (MYLOC-AS)
1 194.213.222.29 5588 (GTSCE GTS...)
4 52.208.73.164 16509 (AMAZON-02)
1 54.93.224.155 16509 (AMAZON-02)
1 2600:9000:205... 16509 (AMAZON-02)
1 89.163.159.120 24961 (MYLOC-AS)
1 34.250.43.132 16509 (AMAZON-02)
1 108.128.71.27 16509 (AMAZON-02)
1 2a00:1450:400... 15169 (GOOGLE)
1 1 104.111.241.32 16625 (AKAMAI-AS)
1 151.101.113.108 54113 (FASTLY)
1 104.111.230.142 16625 (AKAMAI-AS)
1 2.18.233.180 16625 (AKAMAI-AS)
1 2600:9000:205... 16509 (AMAZON-02)
314 95
Apex Domain
Subdomains
Transfer
35 taboola.com
cdn.taboola.com
trc.taboola.com
15.taboola.com
match.taboola.com
cds.taboola.com
vidstat.taboola.com
imprammp.taboola.com
convammp.taboola.com
568 KB
33 giga.de
www.giga.de
static.giga.de
crops.giga.de
videos.giga.de
ssl.3.damoh.giga.de
ssl.1.damoh.giga.de
534 KB
30 teads.tv
a.teads.tv
t.teads.tv
s8t.teads.tv
sync.teads.tv
188 KB
23 doubleclick.net
googleads.g.doubleclick.net
securepubads.g.doubleclick.net
cm.g.doubleclick.net
ad.doubleclick.net
211 KB
14 lijit.com
ap.lijit.com
gslbeacon.lijit.com
vap3ams1.lijit.com
ce.lijit.com
34 KB
14 google-analytics.com
www.google-analytics.com
46 KB
10 meetrics.net
lb59.s400.meetrics.net
3 KB
9 tynt.com
cdn.tynt.com
ic.tynt.com
de.tynt.com
5 KB
9 nativendo.de
d.nativendo.de
c.nativendo.de
t.nativendo.de
39 KB
9 s-onetag.com
get.s-onetag.com
beacon.s-onetag.com
dfp-gateway.s-onetag.com
onetag-geo.s-onetag.com
26 KB
8 googletagservices.com
www.googletagservices.com
193 KB
7 oadts.com
media.oadts.com
122 KB
7 scorecardresearch.com
sb.scorecardresearch.com
4 KB
7 m6r.eu
tracking.m6r.eu
cdn.m6r.eu
3 KB
6 ml314.com
ml314.com
15 KB
6 adscale.de
native.adscale.de
js.adscale.de
ih.adscale.de
12 KB
6 adnxs.com
ib.adnxs.com
acdn.adnxs.com
5 KB
6 adtech.de
adserver.adtech.de
1 KB
6 amazon-adsystem.com
c.amazon-adsystem.com
aax-eu.amazon-adsystem.com
26 KB
6 googlesyndication.com
pagead2.googlesyndication.com
tpc.googlesyndication.com Failed
199 KB
5 cliipa.com
static.cliipa.com
bis.cliipa.com
server.cliipa.com
inventory.cliipa.com
131 KB
5 rubiconproject.com
fastlane.rubiconproject.com
pixel.rubiconproject.com
eus.rubiconproject.com
5 KB
5 ioam.de
script.ioam.de
irqs.ioam.de
de.ioam.de
14 KB
4 xplosion.de
ups.xplosion.de
uss.xplosion.de
6 KB
4 theadex.com
dmp.theadex.com
api.theadex.com
xpl.theadex.com
28 KB
4 eyeota.net
ps.eyeota.net
2 KB
4 ibillboard.com
video-adserver.ibillboard.com
tracker-adserver.ibillboard.com
bbcdn-bbnaut.ibillboard.com
3 KB
4 advertising.com
adserver-eu.adtech.advertising.com
1 KB
4 stroeermediabrands.de
js.stroeermediabrands.de
gocp.stroeermediabrands.de
84 KB
3 bidswitch.net
x.bidswitch.net
1 KB
3 svonm.com
hgc-cf-cache-1.svonm.com
61 KB
3 adform.net
adx.adform.net
track.adform.net
405 B
3 openx.net
yieldlove-d.openx.net
eu-u.openx.net
5 KB
3 giga-abs.de
go.giga-abs.de
2 KB
2 adrtx.net
cdn.adrtx.net
adstax-match.adrtx.net
848 B
2 consensu.org
cmp.teads.mgr.consensu.org
2 company-target.com
segments.company-target.com
1 KB
2 adsrvr.org
match.adsrvr.org
892 B
2 mfadsrvr.com
rtb.mfadsrvr.com
1 KB
2 amazonaws.com
s3.eu-central-1.amazonaws.com
1 KB
2 fastly.net
confiant-integrations.global.ssl.fastly.net
25 KB
2 pubmatic.com
hbopenbid.pubmatic.com
ads.pubmatic.com
113 B
2 googleapis.com
imasdk.googleapis.com
ajax.googleapis.com
116 KB
2 google.com
adservice.google.com
apis.google.com
18 KB
2 google.de
adservice.google.de
346 B
2 nuggad.net
si.nuggad.net
adscale.nuggad.net
2 KB
2 facebook.com
www.facebook.com
524 B
2 vgwort.de
ssl-econa.met.vgwort.de
733 B
1 bluekai.com
tags.bluekai.com
860 B
1 emetriq.de
cdn.emetriq.de
2 KB
1 mookie1.com
de-gmtdmp.mookie1.com
673 B
1 gstatic.com
csi.gstatic.com
200 B
1 exactag.com
m.exactag.com
655 B
1 weborama.com
dx.bigsea.weborama.com
61 B
1 adsymptotic.com
p.adsymptotic.com
339 B
1 sharethis.com
pd.sharethis.com
170 B
1 rfihub.com
p.rfihub.com
707 B
1 bttrack.com
bttrack.com
380 B
1 storygize.net
www.storygize.net
450 B
1 powerlinks.com
px.powerlinks.com
402 B
1 stroeerdigitalmedia.de
cdn.stroeerdigitalmedia.de
343 B
1 bootstrapcdn.com
maxcdn.bootstrapcdn.com
10 KB
1 giga-video.de
files.giga-video.de
30 KB
1 casalemedia.com
as-sec.casalemedia.com
900 B
1 dkuim.de
dkuim.de
151 KB
1 googletagmanager.com
www.googletagmanager.com
130 B
1 dunkirkinception.com
www.dunkirkinception.com
449 B
1 mxcdn.net
s400.mxcdn.net
48 KB
1 yieldlove.com
cdn-a.yieldlove.com
84 KB
1 speedcurve.com
cdn.speedcurve.com
7 KB
314 70
Domain Requested by
19 s8t.teads.tv www.giga.de
16 securepubads.g.doubleclick.net 1 redirects www.googletagservices.com
securepubads.g.doubleclick.net
www.giga.de
15 www.giga.de www.giga.de
14 www.google-analytics.com www.giga.de
www.google-analytics.com
11 trc.taboola.com 4 redirects cdn.taboola.com
www.giga.de
10 lb59.s400.meetrics.net www.giga.de
8 vidstat.taboola.com confiant-integrations.global.ssl.fastly.net
vidstat.taboola.com
8 ap.lijit.com get.s-onetag.com
ap.lijit.com
www.giga.de
8 www.googletagservices.com js.stroeermediabrands.de
pagead2.googlesyndication.com
securepubads.g.doubleclick.net
static.cliipa.com
7 ic.tynt.com www.giga.de
7 media.oadts.com www.giga.de
media.oadts.com
7 sb.scorecardresearch.com 3 redirects cdn.taboola.com
www.giga.de
7 static.giga.de www.giga.de
6 t.teads.tv www.giga.de
6 dfp-gateway.s-onetag.com get.s-onetag.com
6 ml314.com 2 redirects www.giga.de
ml314.com
6 cdn.taboola.com www.giga.de
cdn.taboola.com
6 adserver.adtech.de 4 redirects www.giga.de
6 tracking.m6r.eu 2 redirects www.giga.de
cdn.m6r.eu
media.oadts.com
6 videos.giga.de www.giga.de
videos.giga.de
text
5 ib.adnxs.com 2 redirects cdn-a.yieldlove.com
www.giga.de
5 pagead2.googlesyndication.com www.giga.de
pagead2.googlesyndication.com
4 a.teads.tv www.giga.de
confiant-integrations.global.ssl.fastly.net
a.teads.tv
4 ps.eyeota.net 2 redirects www.giga.de
4 match.taboola.com www.giga.de
4 adserver-eu.adtech.advertising.com 4 redirects
4 c.amazon-adsystem.com www.giga.de
c.amazon-adsystem.com
3 convammp.taboola.com
3 ssl.3.damoh.giga.de text
3 ih.adscale.de js.adscale.de
www.giga.de
3 t.nativendo.de confiant-integrations.global.ssl.fastly.net
3 x.bidswitch.net 3 redirects
3 hgc-cf-cache-1.svonm.com videos.giga.de
text
3 fastlane.rubiconproject.com cdn-a.yieldlove.com
3 c.nativendo.de d.nativendo.de
c.nativendo.de
www.giga.de
3 googleads.g.doubleclick.net pagead2.googlesyndication.com
3 go.giga-abs.de www.giga.de
3 de.ioam.de 2 redirects www.giga.de
3 d.nativendo.de www.giga.de
c.nativendo.de
confiant-integrations.global.ssl.fastly.net
3 gocp.stroeermediabrands.de www.giga.de
gocp.stroeermediabrands.de
2 eu-u.openx.net 1 redirects cdn-a.yieldlove.com
2 uss.xplosion.de www.giga.de
2 ups.xplosion.de confiant-integrations.global.ssl.fastly.net
cdn.emetriq.de
2 dmp.theadex.com confiant-integrations.global.ssl.fastly.net
2 cmp.teads.mgr.consensu.org confiant-integrations.global.ssl.fastly.net
2 static.cliipa.com securepubads.g.doubleclick.net
static.cliipa.com
2 track.adform.net confiant-integrations.global.ssl.fastly.net
2 ad.doubleclick.net 2 redirects
2 segments.company-target.com 1 redirects www.giga.de
2 ce.lijit.com www.giga.de
2 js.adscale.de confiant-integrations.global.ssl.fastly.net
2 match.adsrvr.org 2 redirects
2 cm.g.doubleclick.net 2 redirects
2 rtb.mfadsrvr.com 2 redirects
2 vap3ams1.lijit.com www.giga.de
2 gslbeacon.lijit.com 1 redirects ap.lijit.com
2 video-adserver.ibillboard.com media.oadts.com
2 s3.eu-central-1.amazonaws.com videos.giga.de
text
2 confiant-integrations.global.ssl.fastly.net cdn-a.yieldlove.com
confiant-integrations.global.ssl.fastly.net
2 aax-eu.amazon-adsystem.com 1 redirects c.amazon-adsystem.com
2 adservice.google.de pagead2.googlesyndication.com
www.googletagservices.com
2 www.facebook.com www.giga.de
2 ssl-econa.met.vgwort.de 1 redirects www.giga.de
1 onetag-geo.s-onetag.com beacon.s-onetag.com
1 ads.pubmatic.com cdn-a.yieldlove.com
1 eus.rubiconproject.com cdn-a.yieldlove.com
1 acdn.adnxs.com cdn-a.yieldlove.com
1 tags.bluekai.com 1 redirects
1 adstax-match.adrtx.net confiant-integrations.global.ssl.fastly.net
1 xpl.theadex.com 1 redirects
1 cdn.adrtx.net www.giga.de
1 api.theadex.com bbcdn-bbnaut.ibillboard.com
1 cdn.emetriq.de ups.xplosion.de
1 inventory.cliipa.com
1 de-gmtdmp.mookie1.com
1 bbcdn-bbnaut.ibillboard.com confiant-integrations.global.ssl.fastly.net
1 sync.teads.tv confiant-integrations.global.ssl.fastly.net
1 de.tynt.com cdn.tynt.com
1 server.cliipa.com static.cliipa.com
1 bis.cliipa.com static.cliipa.com
1 ssl.1.damoh.giga.de text
1 tracker-adserver.ibillboard.com www.giga.de
1 imprammp.taboola.com confiant-integrations.global.ssl.fastly.net
1 adscale.nuggad.net 1 redirects
1 csi.gstatic.com securepubads.g.doubleclick.net
1 m.exactag.com www.giga.de
1 dx.bigsea.weborama.com www.giga.de
1 p.adsymptotic.com www.giga.de
1 pd.sharethis.com www.giga.de
1 cdn.tynt.com confiant-integrations.global.ssl.fastly.net
1 p.rfihub.com 1 redirects
1 cds.taboola.com www.giga.de
1 bttrack.com www.giga.de
1 www.storygize.net 1 redirects
1 px.powerlinks.com 1 redirects
1 pixel.rubiconproject.com www.giga.de
1 15.taboola.com confiant-integrations.global.ssl.fastly.net
1 native.adscale.de c.nativendo.de
1 cdn.stroeerdigitalmedia.de www.giga.de
1 maxcdn.bootstrapcdn.com www.giga.de
1 cdn.m6r.eu js.stroeermediabrands.de
1 files.giga-video.de securepubads.g.doubleclick.net
1 tpc.googlesyndication.com securepubads.g.doubleclick.net
1 ajax.googleapis.com www.giga.de
1 apis.google.com www.giga.de
1 adx.adform.net cdn-a.yieldlove.com
1 yieldlove-d.openx.net cdn-a.yieldlove.com
1 hbopenbid.pubmatic.com cdn-a.yieldlove.com
1 as-sec.casalemedia.com cdn-a.yieldlove.com
1 dkuim.de www.giga.de
1 www.googletagmanager.com www.giga.de
1 imasdk.googleapis.com videos.giga.de
1 beacon.s-onetag.com get.s-onetag.com
1 adservice.google.com pagead2.googlesyndication.com
1 www.dunkirkinception.com www.giga.de
1 si.nuggad.net js.stroeermediabrands.de
1 s400.mxcdn.net js.stroeermediabrands.de
1 cdn-a.yieldlove.com js.stroeermediabrands.de
1 irqs.ioam.de script.ioam.de
1 get.s-onetag.com www.giga.de
1 crops.giga.de www.giga.de
1 js.stroeermediabrands.de www.giga.de
1 script.ioam.de www.giga.de
1 cdn.speedcurve.com www.giga.de
314 124
Subject Issuer Validity Valid
*.giga.de
RapidSSL RSA CA 2018
2018-07-18 -
2020-05-02
2 years crt.sh
a3.shared.global.fastly.net
GlobalSign CloudSSL CA - SHA256 - G3
2019-09-11 -
2020-09-10
a year crt.sh
*.ioam.de
COMODO RSA Organization Validation Secure Server CA
2017-12-22 -
2020-12-21
3 years crt.sh
*.stroeermediabrands.de
RapidSSL RSA CA 2018
2018-09-06 -
2020-12-05
2 years crt.sh
*.g.doubleclick.net
GTS CA 1O1
2019-08-23 -
2019-11-21
3 months crt.sh
*.met.vgwort.de
Thawte RSA CA 2018
2018-05-22 -
2020-03-25
2 years crt.sh
*.facebook.com
DigiCert SHA2 High Assurance Server CA
2019-08-24 -
2019-10-19
2 months crt.sh
*.s-onetag.com
Amazon
2019-06-25 -
2020-07-25
a year crt.sh
*.google-analytics.com
GTS CA 1O1
2019-08-23 -
2019-11-21
3 months crt.sh
c.amazon-adsystem.com
Amazon
2018-12-18 -
2019-11-21
a year crt.sh
*.nativendo.de
Thawte TLS RSA CA G1
2019-04-30 -
2021-05-29
2 years crt.sh
*.giga-abs.de
RapidSSL RSA CA 2018
2018-07-18 -
2020-09-04
2 years crt.sh
cat.adscale.de
DigiCert SHA2 Secure Server CA
2019-07-29 -
2020-10-27
a year crt.sh
cdn-a.yieldlove.com
Amazon
2018-10-11 -
2019-11-11
a year crt.sh
*.mxcdn.net
DigiCert SHA2 Secure Server CA
2018-09-27 -
2019-11-26
a year crt.sh
*.nuggad.net
Gandi Standard SSL CA 2
2018-01-12 -
2020-01-16
2 years crt.sh
www.dunkirkinception.com
Amazon
2019-05-22 -
2020-06-22
a year crt.sh
*.google.com
GTS CA 1O1
2019-08-23 -
2019-11-21
3 months crt.sh
*.lijit.com
Go Daddy Secure Certificate Authority - G2
2019-03-11 -
2020-05-10
a year crt.sh
ssl379338.cloudflaressl.com
COMODO ECC Domain Validation Secure Server CA 2
2019-05-06 -
2019-11-12
6 months crt.sh
*.googleapis.com
GTS CA 1O1
2019-08-23 -
2019-11-21
3 months crt.sh

COMODO RSA Domain Validation Secure Server CA
2016-12-08 -
2019-12-08
3 years crt.sh
*.dkuim.de
RapidSSL RSA CA 2018
2018-07-18 -
2020-05-03
2 years crt.sh
san.casalemedia.com
GeoTrust RSA CA 2018
2019-07-17 -
2020-03-09
8 months crt.sh
*.adtech.de
GeoTrust RSA CA 2018
2019-08-07 -
2021-08-07
2 years crt.sh
*.rubiconproject.com
DigiCert SHA2 Secure Server CA
2019-01-10 -
2021-01-14
2 years crt.sh
*.pubmatic.com
Sectigo RSA Organization Validation Secure Server CA
2019-02-22 -
2021-02-21
2 years crt.sh
*.openx.net
GeoTrust RSA CA 2018
2018-01-04 -
2020-07-09
3 years crt.sh
*.adnxs.com
DigiCert ECC Secure Server CA
2019-01-23 -
2021-03-08
2 years crt.sh
track.adform.net
DigiCert SHA2 Secure Server CA
2018-02-02 -
2019-10-02
2 years crt.sh
aax-eu.amazon-adsystem.com
Amazon
2018-12-12 -
2019-12-10
a year crt.sh
*.apis.google.com
GTS CA 1O1
2019-08-23 -
2019-11-21
3 months crt.sh
f2.shared.global.fastly.net
GlobalSign CloudSSL CA - SHA256 - G3
2019-07-30 -
2020-07-25
a year crt.sh
*.giga-video.de
RapidSSL RSA CA 2018
2018-07-18 -
2020-01-01
a year crt.sh
*.scorecardresearch.com
COMODO RSA Organization Validation Secure Server CA
2018-11-28 -
2019-12-26
a year crt.sh
*.freetls.global.fastly.net
GlobalSign CloudSSL CA - SHA256 - G3
2019-01-02 -
2020-01-03
a year crt.sh
*.s3.eu-central-1.amazonaws.com
DigiCert Baltimore CA-2 G2
2018-11-08 -
2019-11-06
a year crt.sh
*.bootstrapcdn.com
COMODO RSA Domain Validation Secure Server CA
2018-10-03 -
2019-10-12
a year crt.sh
hgc-cf-cache-1.svonm.com
Amazon
2019-08-19 -
2020-09-19
a year crt.sh
cdn.stroeerdigitalgroup.de
DigiCert ECC Secure Server CA
2018-12-04 -
2020-03-04
a year crt.sh
*.oadts.com
RapidSSL TLS RSA CA G1
2018-05-02 -
2020-06-30
2 years crt.sh
*.adscale.de
DigiCert SHA2 Secure Server CA
2019-02-19 -
2020-05-20
a year crt.sh
*.ibillboard.com
Thawte RSA CA 2018
2018-05-21 -
2020-06-21
2 years crt.sh
g2.shared.global.fastly.net
GlobalSign CloudSSL CA - SHA256 - G3
2019-05-03 -
2019-11-19
7 months crt.sh
*.bttrack.com
Sectigo RSA Domain Validation Secure Server CA
2019-03-19 -
2021-04-13
2 years crt.sh
*.taboola.com
DigiCert ECC Secure Server CA
2019-09-03 -
2020-09-10
a year crt.sh
*.ml314.com
Amazon
2019-03-16 -
2020-04-16
a year crt.sh
*.tynt.com
COMODO RSA Domain Validation Secure Server CA
2014-10-14 -
2019-10-13
5 years crt.sh
*.sharethis.com
Go Daddy Secure Certificate Authority - G2
2017-09-26 -
2020-09-29
3 years crt.sh
*.eyeota.net
Let's Encrypt Authority X3
2019-07-11 -
2019-10-09
3 months crt.sh
*.company-target.com
Go Daddy Secure Certificate Authority - G2
2019-06-19 -
2021-08-18
2 years crt.sh
ssl919748.cloudflaressl.com
COMODO ECC Domain Validation Secure Server CA 2
2019-06-17 -
2019-12-24
6 months crt.sh
*.bigsea.weborama.com
Go Daddy Secure Certificate Authority - G2
2018-10-24 -
2019-11-16
a year crt.sh
*.exactag.com
COMODO RSA Organization Validation Secure Server CA
2017-11-16 -
2020-02-14
2 years crt.sh
ssl.1.damoh.giga.de
Let's Encrypt Authority X3
2019-09-04 -
2019-12-03
3 months crt.sh
*.cliipa.com
COMODO RSA Domain Validation Secure Server CA
2018-11-19 -
2019-11-19
a year crt.sh
teads.tv
Let's Encrypt Authority X3
2019-08-22 -
2019-11-20
3 months crt.sh
teads.mgr.consensu.org
Let's Encrypt Authority X3
2019-07-15 -
2019-10-13
3 months crt.sh
s8t.teads.tv
DigiCert ECC Secure Server CA
2018-05-23 -
2019-11-21
a year crt.sh
*.theadex.com
GeoTrust RSA CA 2018
2018-02-16 -
2019-10-19
2 years crt.sh
*.xplosion.de
Thawte RSA CA 2018
2018-12-10 -
2020-02-08
a year crt.sh
*.mookie1.com
DigiCert SHA2 Secure Server CA
2019-02-07 -
2020-03-22
a year crt.sh
*.emetriq.de
RapidSSL TLS RSA CA G1
2018-01-08 -
2020-03-08
2 years crt.sh
*.adrtx.net
GeoTrust TLS RSA CA G1
2018-09-05 -
2020-11-03
2 years crt.sh
tpc.googlesyndication.com
GTS CA 1O1
2019-08-23 -
2019-11-21
3 months crt.sh
cdn.adnxs.com
GlobalSign CloudSSL CA - SHA256 - G3
2019-05-16 -
2020-05-16
a year crt.sh

This page contains 34 frames:

Primary Page: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Frame ID: 6AD89641B4833280487A32B5111DE425
Requests: 203 HTTP requests in this frame

Frame: https://videos.giga.de/embed/176875?autoplay=0
Frame ID: 43642102EBD5C67A59106DAA3194ABC6
Requests: 19 HTTP requests in this frame

Frame: https://tracking.m6r.eu/pixel/iframe?pixelId=f407193e-e112-43a2-a5e6-af92d82a6269&theme=GIGA%20Software&checkcookies=true
Frame ID: 82953AFF9589CFA8536045FA2E08A115
Requests: 1 HTTP requests in this frame

Frame: https://pagead2.googlesyndication.com/pagead/js/r20190911/r20190131/show_ads_impl.js
Frame ID: 962727C15F99F1DF446A1BCB3B07ACDE
Requests: 1 HTTP requests in this frame

Frame: https://googleads.g.doubleclick.net/pagead/html/r20190911/r20190131/zrt_lookup.html
Frame ID: F5F015FE9B3E4F05EA26356C75D8A0DE
Requests: 1 HTTP requests in this frame

Frame: https://ap.lijit.com/www/delivery/fpi.js?z=600632&width=320&height=50&iv=sf
Frame ID: C71BA95B21DFA8D172FBE86FC666FBCE
Requests: 21 HTTP requests in this frame

Frame: https://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-3939813287030084&output=html&h=60&slotname=3875064957&adk=2210344608&adf=1301661270&w=468&lmt=1568363831&guci=1.2.0.0.2.2.0.0&format=468x60&url=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&flash=0&wgl=1&adsid=NT&dt=1568363830972&bpp=11&bdt=220&fdt=174&idt=174&shv=r20190911&cbv=r20190131&saldr=aa&abxe=1&correlator=415042108830&frm=20&pv=2&ga_vid=130780938.1568363831&ga_sid=1568363831&ga_hid=152266267&ga_fc=0&iag=0&icsg=52079358880&dssz=56&mdo=0&mso=0&u_tz=120&u_his=2&u_java=0&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_nplug=0&u_nmime=0&adx=318&ady=446&biw=1585&bih=1200&scr_x=0&scr_y=0&oid=3&rx=0&eae=0&fc=912&brdim=0%2C0%2C0%2C0%2C1600%2C0%2C1600%2C1200%2C1600%2C1200&vis=1&rsz=%7C%7CeE%7C&abl=CS&pfx=0&fu=16&bc=31&osw_key=2707494302&ifi=1&uci=1.41pk08angu7o&fsb=1&xpc=oKXc4IRjQl&p=https%3A//www.giga.de&dtd=188
Frame ID: 33CCC88FC93A286BC89E0CC1F27DA450
Requests: 1 HTTP requests in this frame

Frame: https://aax-eu.amazon-adsystem.com/s/iu3?cm3ppd=1&d=dtb-pub&csif=t&dl=ox&dcc=t
Frame ID: 4EB5F3ABF4A0308C1E686AD041959D4F
Requests: 1 HTTP requests in this frame

Frame: https://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-3939813287030084&output=html&adk=1812271804&adf=3025194257&lmt=1568363831&plat=1%3A32776%2C2%3A16809992%2C8%3A32776%2C9%3A32776%2C16%3A8388608%2C30%3A1081344&guci=1.2.0.0.2.2.0.0&format=0x0&url=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ea=0&flash=0&pra=7&wgl=1&adsid=NT&dt=1568363830983&bpp=4&bdt=231&fdt=278&idt=278&shv=r20190911&cbv=r20190131&saldr=aa&abxe=1&prev_fmts=468x60&nras=1&correlator=415042108830&frm=20&pv=1&ga_vid=130780938.1568363831&ga_sid=1568363831&ga_hid=152266267&ga_fc=0&iag=0&icsg=833269741600&dssz=60&mdo=0&mso=0&u_tz=120&u_his=2&u_java=0&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_nplug=0&u_nmime=0&adx=0&ady=0&biw=1585&bih=1200&scr_x=0&scr_y=0&oid=3&rx=0&eae=2&fc=912&brdim=0%2C0%2C0%2C0%2C1600%2C0%2C1600%2C1200%2C1600%2C1200&vis=1&rsz=%7C%7Cs%7C&abl=NS&fu=16&bc=31&osw_key=4077977667&ifi=1&uci=1.vj96d81kc41j&fsb=1&dtd=283
Frame ID: 948F4BD62E6369DF6251BBFAAB47EE63
Requests: 1 HTTP requests in this frame

Frame: https://cdn.stroeerdigitalmedia.de/Ads/defaultImage.gif
Frame ID: 58C01521F5FEA35F387E3C3D442BB38F
Requests: 1 HTTP requests in this frame

Frame: https://securepubads.g.doubleclick.net/pcs/view?xai=AKAOjsu0-0F3BN77BclM-dgBivrGn8VfsLa45KMLeKaTocXzeMdiAbJsaJONuise0l973XG2SfwTW_HugilBQZP08mAbj8NOYeHYZbJ7mP-xOvqGltb7hi7aLiMDxHzOO-aIpB9_Iisq-9NrjGycJszbx7rljqeJcL8Si3Wk5mBO749mIGXy4EaM6H0aVH4ffaTZWWi8oJvRcM_QAPXDOoJa26Rk7DOOt15MLrYDRIhjM97gi2OMaO7pCHe3jQVm1vWyl3F6A4hV_z4s1syF8MmNukguzQ&sig=Cg0ArKJSzCHu-smAMtB3EAE&urlfix=1&adurl=
Frame ID: 4E2102426B80582FA76CB7D272EBD953
Requests: 14 HTTP requests in this frame

Frame: https://gslbeacon.lijit.com/beacon?viewId=m_600632_45532139e81c4e8bbf3679b772028ca8&rand=3656&informer=13166301&type=fpads&loc=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&v=1.2&dnr=1
Frame ID: 1826C8E932F7E67DB7AB8B968E299AA6
Requests: 1 HTTP requests in this frame

Frame: https://trc.taboola.com/sg/mediaforcebidder-network/1/rtb-h?taboola_hm=a242b424-6ec4-4b30-a6db-5d104f9a81fd
Frame ID: EB20CF377E21E9577123E0404B5DF562
Requests: 11 HTTP requests in this frame

Frame: https://securepubads.g.doubleclick.net/pcs/view?xai=AKAOjsuLN_hB3MAKThT_zPniRCpWqEE_xLEgWWwPdQBDTLV4G2eyQliH0JX0zYTGnEL8hSAegc_ebc1hll6S6HrI0rxgZRlZPZai0n-qrXt47Sflkw8ICmZ9_XnCWxPNI6pA0D-TCMjmG3zu8Np_glZizFScNCTgQq24Rdbi9lxWMaozSeJUqoBJRBTlj4lM-6Jec_P0q_s7KHJnUG9-xa9YCu2C5ctbKADaqVz0aYKNk2IQc5JNg6OFxSn__5BZtF2qboMidqgBbltlpXWNOF4xobvqJ8-OiiXb6gcHlh6lQGRz&sig=Cg0ArKJSzA5PFw_-0a9BEAE&urlfix=1&adurl=
Frame ID: 9AB976E80AF1B5C3069ED6973EBE5E40
Requests: 4 HTTP requests in this frame

Frame: https://securepubads.g.doubleclick.net/pcs/view?xai=AKAOjss-p4pQQPWcnyYazM4X423gtr9mj8CCbUt72xjNt70m7K8aYnOfHY3ov4KulNSIRe-APEt0wEHogUtqE8MkmIUjdc1sJpzg0LWXclciKYapBCoYMfvxUGv9aziSveLkS1evyxqK_zbxjoAgafyeSS2K58OSo2whviXTWvq640IIBMf0qex6XrnK2cT1abDZi90bFnv_3wdFjFfyg2bH3O9j8v0r1_Hczt2KF5btMt3E5gyd2bMQO7_3UqgUs76ObJQw_CAjA-zh4WBbccTQgoMG_nX1YNjt9ICnWmebQdHu&sig=Cg0ArKJSzIQThFpJfCSbEAE&urlfix=1&adurl=
Frame ID: 105C8427109CFD8E7B4EFC5F32BBAFE6
Requests: 2 HTTP requests in this frame

Frame: https://track.adform.net/adfscript/?bn=31959167;click=https://adclick.g.doubleclick.net/pcs/click?xai=AKAOjssxxd0ex9VU2nZiXVECw1tCaIjvpsIooU8yEzCg4O3ywMIEVj93V9owmVvewRpEljHbvTzecbD89fZm60iH0pZHz8d7y-sZQcazSRfb76DkU8GKRKc_YfARUr_Udp7uGiaU1DDeuMYwndtC1OT6gxmlMFk8_HUsJG-HB9kl0CY_vLkHwkPWujTAjaFlb5BPMp5brDYh9hhDlSaYWDz04Yl8yUHwIQ-gCloSDObmCsUV242ixwM436EP4AWprpwcU278MPzeMug6iMw0lQ&sig=Cg0ArKJSzMNrY3nvtLkIEAE&urlfix=1&adurl=;cpjs=2;ord=2100500192
Frame ID: 51DE089275E2EDD9FFF588DC7EA05E7B
Requests: 1 HTTP requests in this frame

Frame: https://track.adform.net/adfscript/?bn=31959168;click=https://adclick.g.doubleclick.net/pcs/click?xai=AKAOjssxxd0ex9VU2nZiXVECw1tCaIjvpsIooU8yEzCg4O3ywMIEVj93V9owmVvewRpEljHbvTzecbD89fZm60iH0pZHz8d7y-sZQcazSRfb76DkU8GKRKc_YfARUr_Udp7uGiaU1DDeuMYwndtC1OT6gxmlMFk8_HUsJG-HB9kl0CY_vLkHwkPWujTAjaFlb5BPMp5brDYh9hhDlSaYWDz04Yl8yUHwIQ-gCloSDObmCsUV242ixwM436EP4AWprpwcU278MPzeMug6iMw0lQ&sig=Cg0ArKJSzMNrY3nvtLkIEAE&urlfix=1&adurl=;cpjs=2;ord=2100500192
Frame ID: 7B9BEE7809098D24385866229ECA61D9
Requests: 1 HTTP requests in this frame

Frame: https://ih.adscale.de/map?format=display&ssl=1
Frame ID: BE47BCCB78FAD6E14E602663598E391B
Requests: 1 HTTP requests in this frame

Frame: https://ih.adscale.de/nuggad?/nu/0/pre/0/sid/YmJiY2Mw/uu/ed160f316afc4733814b3e362d2e2c6e/ts/1568363832263/v/2/hid/413/ssl/1/ws/https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F/nvars/d1=1&d9=1&d8=2&d7=1&d2=4&d12=2&d11=0&d4=4&c5=9&c6=9&c7=9&c8=9&d3=5&d10=4
Frame ID: 3E74E079E5BBBF077487F0EFE38D3BD0
Requests: 1 HTTP requests in this frame

Frame: https://imprammp.taboola.com/st?cipid=8045671&ttype=0&cirid=18978EFCED89549259181089311&cicmp=1657475&cijs=1&dast=V7EXECFgPCRy_OC6aURATCRy_OC6aURAUAAAAGBvQHGzFc7oYrGodFIi5Xo-VkNdwMJrPVYDHZTCHEWC6TQS2QsMx-30FBOT09ZpdBxnKZDGqBrGly-d3whabT4XPd63W_313n9DnsIpdf97I4DIfPX_BwHh5mv-hpOHz-gofz8DC7xX6f0-7W_N06l9H0eavuJrfm7xb7XZ7TW2m0vMV-n9PuFlz-FrPL7fLLAQAAAOABQKmwH-IHEAAgAgAAAEACAAAAgCKg4t9C4AIAAAAAA6AA60cDAIqD4Vx368tudLg-L7s_AAAeAkAAAAYUSAAGcJpKACpyDk4AAAAAAAAAAFj-____YwD0iM9kADKUBm8MegAefAAehAAAALKGGtENrdkvlhWIChKLGAEAAABAMrV5HE3qhMqiCgCAIN0K4AoAIKAthVj8LEt3UOItDAAAgGBsgR4Wv9_ssGv8bpcBAAAAAAAAAJj9n_2jCRGNuaUFsRTwqv0CAgCs_QICALCpGwDAWwBc0BG0YjBYnUFMNqPdZHYAAAAAd_____96IDcbOYajxXC2cMwWG9duOTHsRp6Zw7gZjUwW2257wHA9TxFGjWl9I8Iy-30HBeX09JhdBhnLZTKoBbKmyeU3iA8ahuVkEMxvwhaj1WSyWQ5ny8VkMBwNR6P9CdxogBM0HA4Wu8Fit1gMJ4vJaLAcLFAgBhOckOFoM1mNdqvdZDmcjEazzWSDFK1azUabwXA1m8x2u9VwMFyORkjRmsVsMlnMRsvdZrCcjAbDyXCIMLFZGEcLj2-t2KwmbtFmtFtLXIOZW2SYuEyWmXPlcMzWotfHdNqNRg6Lb4uCAUp7EVykE83p8ne5LG_N2-LWOX0Oi1iiOVmkE9ll35uNHMPRYjhbOGaLjWu3nBh2I8_MYdyMRiaLbbdvbBbG0cLjWys2q4lbtBnt1hLXYOYWGSYuk2XmXDkcs7Xo9TGddqORw-LbN1az4Wa2GW4W-8ZqNtzMNsPNYt-hM3xXn7NRedMqPDKhwzXuNmVOg8JlsHh_EtNi2p0dPL_f0alSXTTGhuybUJgNHoNBEUsEp4t0InoZTxexRPK0SCfC1WYwWk5so91qOfPYLB7bbDZzzowzl2s43A1XFrFEabpIJ3rdy-IwHD5_wcN5eJj9oqfh8PkLHs7Dw-wW-31Ou1vzd-tcRtPnrbqb3Jq_W-x3eU5vpdHyFvt9TrtbcPlbzC63y6L-Y0OMRnPdbK4YLOeawSoBAAAAAAAAACxhzrwJAAAAwGkgi8VgslguAIQY6y7Bp1TIoxP4W3HjxxBzuvxdLstb87a4dU6fw8oAEjsF!&excid=22&tst=1&docw=0
Frame ID: 4F46CC30E427B72B762742AED23B1425
Requests: 1 HTTP requests in this frame

Frame: https://securepubads.g.doubleclick.net/pcs/view?xai=AKAOjsvRGxKhtDi0q35rWFDPKJ3s_Q_8l6MbON39w2IFMaQ0YEqH3kSzsl5fQRiguB0FixoDhQWwime89SAWe4-sICccPCRR_iHNlu_Ux9-Y4f5pWff7Xn40cj3Rt6ZPt7dR6-_PowjrEZP1Q5yOVEdaEXlJkxlZ9tRRpusPDi9GG7cWREVaC5yFJZRz6ZQT8KdMPcp5G6Z9WL_X5W2H0wWPbgZQUiuYBs-cK-vanCMzFxUmLCzQ9Zd1o3XS5gSA0fJEXwqRXg1hrgW31F3eipWfn1csIASKM-alyKT6nec7&sig=Cg0ArKJSzEFWLaUcJx5QEAE&urlfix=1&adurl=
Frame ID: 9BA975D1EC6BE72BFDA207F14F49FE31
Requests: 13 HTTP requests in this frame

Frame: data://truncated
Frame ID: 766CCCBA78FD1ED112A49B9876BB9CD2
Requests: 1 HTTP requests in this frame

Frame: https://cmp.teads.mgr.consensu.org/index.html
Frame ID: 528E43B5997F7BF955BAB654A95AFB0D
Requests: 1 HTTP requests in this frame

Frame: https://cmp.teads.mgr.consensu.org/index.html
Frame ID: 4722838A6B3F4020F08C8EFC8870A064
Requests: 1 HTTP requests in this frame

Frame: https://sync.teads.tv/iframe?pid=76332&userId=704d2c23-de86-47b8-b354-e7e1f3d0f420&gdprIab={%22status%22:21,%22consent%22:%22%22,%22reason%22:210}&env=js-web&1568363832590
Frame ID: D12B9466C9C0740AF039CB3BCF6FCFAB
Requests: 1 HTTP requests in this frame

Frame: https://ap.lijit.com/beacon?informer=13413818&gdpr_consent=
Frame ID: CF436ADD590F6FA43C37E3EE8AF14B13
Requests: 1 HTTP requests in this frame

Frame: https://www.googletagservices.com/tag/js/gpt.js
Frame ID: 1F1F6A3C6C26EE8AE254ED1CB25E904F
Requests: 7 HTTP requests in this frame

Frame: https://uss.xplosion.de/usersync?sid=65966&fpid=4203766813119717598
Frame ID: BB4EACCC8953D06395B5204983124D56
Requests: 1 HTTP requests in this frame

Frame: https://adstax-match.adrtx.net/activation?receiverId=adaud
Frame ID: A38B9B1CCA1D17A7E91639D1C7E61F5C
Requests: 1 HTTP requests in this frame

Frame: https://tpc.googlesyndication.com/safeframe/1-0-35/html/container.html?n=2
Frame ID: 17DCE52FF8A9F3CF82E8FEB71B5934A9
Requests: 1 HTTP requests in this frame

Frame: https://eu-u.openx.net/w/1.0/pd?cc=1&plm=6&ph=2671f27c-3f24-410f-8105-4de0c801f2a9&gdpr=1
Frame ID: 096F22E4FC7F02D299626986E98B9AE0
Requests: 1 HTTP requests in this frame

Frame: https://acdn.adnxs.com/ib/static/usersync/v3/async_usersync.html
Frame ID: 522C3B7E5FBBF85BE51E5361D6351C45
Requests: 1 HTTP requests in this frame

Frame: https://eus.rubiconproject.com/usync.html
Frame ID: DF0CCB8C7DA2B2FFF491B7DA0CF0E6D8
Requests: 1 HTTP requests in this frame

Frame: https://ads.pubmatic.com/AdServer/js/showad.js
Frame ID: 1993F0387A794C34DB616B93B4F6C23B
Requests: 1 HTTP requests in this frame

Screenshot


Detected technologies

Overall confidence: 100%
Detected patterns
  • headers server /nginx(?:\/([\d.]+))?/i

Overall confidence: 100%
Detected patterns
  • script /google-analytics\.com\/(?:ga|urchin|analytics)\.js/i

Overall confidence: 100%
Detected patterns
  • html /<iframe[^>]* (?:id="comscore"|scr=[^>]+comscore)|\.scorecardresearch\.com\/beacon\.js|COMSCORE\.beacon/i
  • script /\.scorecardresearch\.com\/beacon\.js|COMSCORE\.beacon/i

Page Statistics

314
Requests

98 %
HTTPS

20 %
IPv6

70
Domains

124
Subdomains

95
IPs

8
Countries

3063 kB
Transfer

9525 kB
Size

0
Cookies

Redirected requests

There were HTTP redirect chains for the following requests:

Request Chain 18
  • https://ssl-econa.met.vgwort.de/na/aed5432c7f5c4a7c8eccb40d68e02ce1 HTTP 302
  • https://ssl-econa.met.vgwort.de/blank.gif
Request Chain 26
  • https://de.ioam.de/tx.io?st=giga&cp=software_content&sv=in&sc=yes&pt=CP&ps=lin&er=N22&rf=&r2=&ur=www.giga.de&xy=1600x1200x24&lo=DE%2Fn.a.&cb=000c&i2=000cfc637ad275a515d7b5536&ep=1593875152&vr=415&id=sxnjyl&i3=000cfc637ad275a515d7b5536%3A1594543030812%3A1568363830812%3A.giga.de%3A1%3Agiga%3Asoftware_content%3Anoevent%3A1568363830812&n1=3&dntt=0&lt=1568363830814&ev=&cs=yjvkye&mo=0 HTTP 302
  • https://de.ioam.de/tx.io?st=giga&cp=software_content&sv=in&sc=yes&pt=CP&ps=lin&er=N22&rf=&r2=&ur=www.giga.de&xy=1600x1200x24&lo=DE%2Fn.a.&cb=000c&i2=000cfc637ad275a515d7b5536&ep=1593875152&vr=415&id=sxnjyl&i3=000cfc637ad275a515d7b5536%3A1594543030812%3A1568363830812%3A.giga.de%3A1%3Agiga%3Asoftware_content%3Anoevent%3A1568363830812&n1=3&dntt=0&lt=1568363830814&ev=&cs=yjvkye&mo=0&sr=71 HTTP 302
  • https://de.ioam.de/blank.gif
Request Chain 33
  • https://tracking.m6r.eu/pixel/iframe?pixelId=f407193e-e112-43a2-a5e6-af92d82a6269&theme=GIGA+Software HTTP 302
  • https://tracking.m6r.eu/pixel/iframe?pixelId=f407193e-e112-43a2-a5e6-af92d82a6269&theme=GIGA%20Software&checkcookies=true
Request Chain 38
  • https://tracking.m6r.eu/sync/dmp HTTP 302
  • https://tracking.m6r.eu/sync/dmp?checkcookies=true
Request Chain 69
  • https://adserver.adtech.de/pubapi/3.0/4538.1/6658212/0/0/ADTECH;v=2;cmd=bid;cors=yes;alias=giga.de_d_300x250_1;misc=1568363831211; HTTP 302
  • https://adserver.adtech.de/pubapi/3.0/4538.1/6658212/0/0/ADTECH;cfp=1;rndc=1568363831;v=2;cmd=bid;cors=yes;alias=giga.de_d_300x250_1;misc=1568363831211 HTTP 302
  • https://adserver-eu.adtech.advertising.com/pubapi/3.0/4538.1/6658212/0/0/ADTECH;rdhost=adserver.adtech.de;cfp=1;rndc=1568363831;v=2;cmd=bid;cors=yes;alias=giga.de_d_300x250_1;misc=1568363831211 HTTP 302
  • https://adserver-eu.adtech.advertising.com/pubapi/3.0/4538.1/6658212/0/0/ADTECH;rdhost=adserver.adtech.de;cfp=2;rndc=1568363831;v=2;cmd=bid;cors=yes;alias=giga.de_d_300x250_1;misc=1568363831211 HTTP 302
  • https://adserver.adtech.de/pubapi/3.0/4538.1/6658212/0/0/ADTECH;apid=1Aae0df374-d601-11e9-b84b-0252ef7879ac;cfp=1;rndc=1568363830;v=2;cmd=bid;cors=yes;alias=giga.de_d_300x250_1;misc=1568363831211
Request Chain 70
  • https://adserver.adtech.de/pubapi/3.0/4538.1/6669693/0/0/ADTECH;v=2;cmd=bid;cors=yes;alias=giga.de_d_970x250_2;misc=1568363831211; HTTP 302
  • https://adserver.adtech.de/pubapi/3.0/4538.1/6669693/0/0/ADTECH;cfp=1;rndc=1568363831;v=2;cmd=bid;cors=yes;alias=giga.de_d_970x250_2;misc=1568363831211 HTTP 302
  • https://adserver-eu.adtech.advertising.com/pubapi/3.0/4538.1/6669693/0/0/ADTECH;rdhost=adserver.adtech.de;cfp=1;rndc=1568363831;v=2;cmd=bid;cors=yes;alias=giga.de_d_970x250_2;misc=1568363831211 HTTP 302
  • https://adserver-eu.adtech.advertising.com/pubapi/3.0/4538.1/6669693/0/0/ADTECH;rdhost=adserver.adtech.de;cfp=2;rndc=1568363831;v=2;cmd=bid;cors=yes;alias=giga.de_d_970x250_2;misc=1568363831211 HTTP 302
  • https://adserver.adtech.de/pubapi/3.0/4538.1/6669693/0/0/ADTECH;apid=1Aae0e400e-d601-11e9-ae0d-02599a0636ac;cfp=1;rndc=1568363830;v=2;cmd=bid;cors=yes;alias=giga.de_d_970x250_2;misc=1568363831211
Request Chain 79
  • https://aax-eu.amazon-adsystem.com/s/iu3?cm3ppd=1&d=dtb-pub&csif=t&dl=ox HTTP 302
  • https://aax-eu.amazon-adsystem.com/s/iu3?cm3ppd=1&d=dtb-pub&csif=t&dl=ox&dcc=t
Request Chain 117
  • https://sb.scorecardresearch.com/b?c1=7&c2=13739933&c3=20121515121&ns__t=1568363831657&ns_c=UTF-8&cv=3.1&c8=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&c7=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&c9= HTTP 302
  • https://sb.scorecardresearch.com/b2?c1=7&c2=13739933&c3=20121515121&ns__t=1568363831657&ns_c=UTF-8&cv=3.1&c8=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&c7=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&c9=
Request Chain 120
  • https://securepubads.g.doubleclick.net/pcs/view?xai=AKAOjssYUb_Erddm4NYiFQwIo7812fseyADUZ2QP3GAk75_Ao1WDVaps-1cfvajhya2tEarzJIH9bvdnCx1PAM-MxxAb19jHBX-tRSguI9DEuX05Yw5cAOxJuGDFoO_rgvKGXIeT5UQt8IiVHZ2NTTRNRyxRdXqc4C9C_y2Teuoy8VAwp9uunKkb51dufil4xd1T3VKN-FZFKT6DXQJI9I9pAnn09pPwZsWxtc1M0F7fFPOTQM695bClcVpDzd5Jl02UEhLcxBAwG5T6SZ489EUdJw&sig=Cg0ArKJSzCNulBf5QxDyEAE&urlfix=1&adurl=//cdn.stroeerdigitalmedia.de/Ads/defaultImage.gif HTTP 302
  • https://cdn.stroeerdigitalmedia.de/Ads/defaultImage.gif
Request Chain 136
  • https://gslbeacon.lijit.com/beacon?viewId=m_600632_45532139e81c4e8bbf3679b772028ca8&rand=3656&informer=13166301&type=fpads&loc=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&v=1.2 HTTP 302
  • https://gslbeacon.lijit.com/beacon?viewId=m_600632_45532139e81c4e8bbf3679b772028ca8&rand=3656&informer=13166301&type=fpads&loc=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&v=1.2&dnr=1
Request Chain 144
  • https://rtb.mfadsrvr.com/sync?ssp=taboola HTTP 302
  • https://rtb.mfadsrvr.com/ul_cb/sync?ssp=taboola HTTP 302
  • https://trc.taboola.com/sg/mediaforcebidder-network/1/rtb-h?taboola_hm=a242b424-6ec4-4b30-a6db-5d104f9a81fd
Request Chain 146
  • https://px.powerlinks.com/user/identify?sourceId=d4a7a706-ab0f-11e8-a038-127202fb7690&rurl=https%3A%2F%2Ftrc.taboola.com%2Fsg%2Fpowerlinksdsp-network%2F1%2Frtb-h%2F%3Ftaboola_hm%3D%24%7BUSER%7D HTTP 302
  • https://trc.taboola.com/sg/powerlinksdsp-network/1/rtb-h/?taboola_hm=MBIlj3p6qopdM6kzsrkZXIMqEESosvsUNnSznO5-oF8%3D
Request Chain 148
  • https://cm.g.doubleclick.net/pixel?google_nid=taboola_dbm&google_cm&google_sc HTTP 302
  • https://cm.g.doubleclick.net/pixel?google_nid=taboola_dbm&google_cm=&google_sc=&google_tc= HTTP 302
  • https://trc.taboola.com/sg/google-network/1/rtb-h/?taboola_hm=CAESEOPJBbXA--_rbEDfJ43vtXg&google_cver=1 HTTP 302
  • https://match.taboola.com/sg/google-network/1/rtb-h?taboola_hm=CAESEOPJBbXA--_rbEDfJ43vtXg&tbid=83b66293-abea-4be0-96bf-a51edb5f6755-tuct474dab8&query=taboola_hm%3DCAESEOPJBbXA--_rbEDfJ43vtXg%26google_cver%3D1
Request Chain 150
  • https://match.adsrvr.org/track/cmf/generic?ttd_pid=054f32o&ttd_tpi=1 HTTP 302
  • https://match.adsrvr.org/track/cmb/generic?ttd_pid=054f32o&ttd_tpi=1 HTTP 302
  • https://trc.taboola.com/sg/thetradedesk-network/1/rtb-h/?taboola_hm=266276d3-c8d0-4a3c-bc9a-e7e3b0f242a0 HTTP 302
  • https://match.taboola.com/sg/thetradedesk-network/1/rtb-h?taboola_hm=266276d3-c8d0-4a3c-bc9a-e7e3b0f242a0&tbid=ee1d4616-c4d6-4f77-9c55-be9d1d78be2b-tuct474dab8&query=taboola_hm%3D266276d3-c8d0-4a3c-bc9a-e7e3b0f242a0
Request Chain 151
  • https://www.storygize.net/ccm/4b560cdd-91f9-422b-adb7-e9dff26bc3ad?u=13a84ac7-135b-4347-b50f-d0bed2f9ea16-tuct474dab7 HTTP 302
  • https://trc.taboola.com/sg/storygize-network/1/rtb-h?taboola_hm=a9e221a7-adc3-4401-b6f0-ac7bbb25e2d4 HTTP 302
  • https://match.taboola.com/sg/storygize-network/1/rtb-h?taboola_hm=a9e221a7-adc3-4401-b6f0-ac7bbb25e2d4&tbid=ee1d4616-c4d6-4f77-9c55-be9d1d78be2b-tuct474dab8&query=taboola_hm%3Da9e221a7-adc3-4401-b6f0-ac7bbb25e2d4
Request Chain 154
  • https://x.bidswitch.net/sync?ssp=taboola HTTP 302
  • https://x.bidswitch.net/ul_cb/sync?ssp=taboola HTTP 302
  • https://p.rfihub.com/cm?in=1&pub=20513&ssp=taboola HTTP 302
  • https://x.bidswitch.net/sync?dsp_id=119&user_id=1870471592723090393&expires=30&ssp=taboola HTTP 302
  • https://trc.taboola.com/sg/bidswitch-network/1/rtb-h/?taboola_hm=78033ce9-fc17-471d-b267-a892a027f645 HTTP 302
  • https://match.taboola.com/sg/bidswitch-network/1/rtb-h?taboola_hm=78033ce9-fc17-471d-b267-a892a027f645&tbid=ee1d4616-c4d6-4f77-9c55-be9d1d78be2b-tuct474dab8&query=taboola_hm%3D78033ce9-fc17-471d-b267-a892a027f645
Request Chain 169
  • https://segments.company-target.com/log?vendor=sovrn&user_id= HTTP 303
  • https://segments.company-target.com/validateCookie?vendor=sovrn&user_id=&verifyHash=4daa1f715e78758d91db6ee0d56237b94dc0407
Request Chain 178
  • https://ad.doubleclick.net/ddm/ad/N32804.1918787SEEDINGALLIANCE/B23123253.254901498;sz=1x1;ord=1568363831;dc_lat=;dc_rdid=;tag_for_child_directed_treatment=;tfua= HTTP 302
  • https://ad.doubleclick.net/ddm/ad/N32804.1918787SEEDINGALLIANCE/B23123253.254901498;dc_pre=CNn948iyzeQCFQ6R3godBg8FdQ;sz=1x1;ord=1568363831;dc_lat=;dc_rdid=;tag_for_child_directed_treatment=;tfua= HTTP 302
  • https://m.exactag.com/ai.aspx?extProvId=8&extPu=64752-dcm&extLi=23123253&extCr=117572826&extPm=254901498
Request Chain 203
  • https://adscale.nuggad.net/bk?nuggn=1660240041&nuggsid=1029839715&nuggrid=http%3A%2F%2Fwww.giga.de&nuggl=https%3A%2F%2Fih.adscale.de%2Fnuggad%3F%2Fnu%2F0%2Fpre%2F0%2Fsid%2FYmJiY2Mw%2Fuu%2Fed160f316afc4733814b3e362d2e2c6e%2Fts%2F1568363832263%2Fv%2F2%2Fhid%2F413%2Fssl%2F1%2Fws%2Fhttps%253A%252F%252Fwww.giga.de%252Fwebapps%252Fpaypal%252Ftipps%252Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%252F%2Fnvars%2FNUGGVARS HTTP 302
  • https://ih.adscale.de/nuggad?/nu/0/pre/0/sid/YmJiY2Mw/uu/ed160f316afc4733814b3e362d2e2c6e/ts/1568363832263/v/2/hid/413/ssl/1/ws/https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F/nvars/d1=1&d9=1&d8=2&d7=1&d2=4&d12=2&d11=0&d4=4&c5=9&c6=9&c7=9&c8=9&d3=5&d10=4
Request Chain 226
  • https://sb.scorecardresearch.com/p?c1=2&c2=17198971&ns_ap_sv=2.1511.10&ns_type=hidden&ns_st_it=a&ns_st_sv=4.0.0&ns_st_ad=1&ns_st_sq=1&ns_st_id=1568363832519&ns_st_ec=1&ns_st_cn=1&ns_st_ev=play&ns_st_ct=va00&ns_st_cl=0&ns_st_pt=0&c3=*null&c4=*null&c6=*null&ns_ts=15891680&cs_ucfr=1 HTTP 302
  • https://sb.scorecardresearch.com/p2?c1=2&c2=17198971&ns_ap_sv=2.1511.10&ns_type=hidden&ns_st_it=a&ns_st_sv=4.0.0&ns_st_ad=1&ns_st_sq=1&ns_st_id=1568363832519&ns_st_ec=1&ns_st_cn=1&ns_st_ev=play&ns_st_ct=va00&ns_st_cl=0&ns_st_pt=0&c3=*null&c4=*null&c6=*null&ns_ts=15891680&cs_ucfr=1
Request Chain 233
  • https://sb.scorecardresearch.com/p?c1=2&c2=17198971&ns_ap_sv=2.1511.10&ns_type=hidden&ns_st_it=a&ns_st_sv=4.0.0&ns_st_ad=1&ns_st_sq=1&ns_st_id=1568363832536&ns_st_ec=1&ns_st_cn=1&ns_st_ev=play&ns_st_ct=va00&ns_st_cl=0&ns_st_pt=0&c3=*null&c4=*null&c6=*null&ns_ts=04536766&cs_ucfr=1 HTTP 302
  • https://sb.scorecardresearch.com/p2?c1=2&c2=17198971&ns_ap_sv=2.1511.10&ns_type=hidden&ns_st_it=a&ns_st_sv=4.0.0&ns_st_ad=1&ns_st_sq=1&ns_st_id=1568363832536&ns_st_ec=1&ns_st_cn=1&ns_st_ev=play&ns_st_ct=va00&ns_st_cl=0&ns_st_pt=0&c3=*null&c4=*null&c6=*null&ns_ts=04536766&cs_ucfr=1
Request Chain 301
  • https://xpl.theadex.com/d/327/i/2.gif?axd_pid=22&axd_fuid=BSaCEiBCBsJsBsRCWDUkWsfABifABSfABSfABiUABifABfrr&cb=https%3A%2F%2Fuss.xplosion.de%2Fusersync%3Fsid%3D65966%26fpid%3D%7B%7BUUID%7D%7D HTTP 307
  • https://uss.xplosion.de/usersync?sid=65966&fpid=4203766813119717598
Request Chain 307
  • https://ib.adnxs.com/getuid?https://ml314.com/csync.ashx%3Ffp=$UID%26person_id=5978151496988943630%26eid=2 HTTP 302
  • https://ib.adnxs.com/bounce?%2Fgetuid%3Fhttps%3A%2F%2Fml314.com%2Fcsync.ashx%253Ffp%3D%24UID%2526person_id%3D5978151496988943630%2526eid%3D2 HTTP 302
  • https://ml314.com/csync.ashx?fp=8048907583063875128&person_id=5978151496988943630&eid=2
Request Chain 308
  • https://tags.bluekai.com/site/20486?limit=0&id=5978151496988943630&redir=https://ml314.com/csync.ashx%3Ffp=$_BK_UUID%26person_id=5978151496988943630%26eid=50056 HTTP 302
  • https://ml314.com/csync.ashx?fp=Ide%2BmQ999992OU%2B5&person_id=5978151496988943630&eid=50056
Request Chain 309
  • https://ps.eyeota.net/pixel?pid=r8hrb20&t=gif HTTP 302
  • https://ps.eyeota.net/pixel/bounce/?pid=r8hrb20&t=gif HTTP 302
  • https://ml314.com/utsync.ashx?eid=50052&et=0&fp=2edf3diw4sFa-EpthQA_PlYOpHokFe418YvxiU-KZPj0&gdpr=1&gdpr_consent=&return=https%3A%2F%2Fps.eyeota.net%2Fmatch%3Fbid%3Dr8hrb20%26uid%3Dnil HTTP 302
  • https://ml314.com/csync.ashx?fp=2edf3diw4sFa-EpthQA_PlYOpHokFe418YvxiU-KZPj0&person_id=5978151496988943630&eid=50052&return=https%3a%2f%2fps.eyeota.net%2fmatch%3fbid%3dr8hrb20%26uid%3dnil HTTP 302
  • https://ps.eyeota.net/match?bid=r8hrb20&uid=nil
Request Chain 311
  • https://eu-u.openx.net/w/1.0/pd?plm=6&ph=2671f27c-3f24-410f-8105-4de0c801f2a9&gdpr=1 HTTP 302
  • https://eu-u.openx.net/w/1.0/pd?cc=1&plm=6&ph=2671f27c-3f24-410f-8105-4de0c801f2a9&gdpr=1

314 HTTP transactions

Resource
Path
Size
x-fer
Type
MIME-Type
Primary Request /
www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
141 KB
52 KB
Document
General
Full URL
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.72.10 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx /
Resource Hash
aab674e9d8db3a0e62eab505f85284fa5c757e31cf0d56f6017a48e2e28ea30a

Request headers

:method
GET
:authority
www.giga.de
:scheme
https
:path
/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
pragma
no-cache
cache-control
no-cache
upgrade-insecure-requests
1
user-agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
sec-fetch-mode
navigate
sec-fetch-user
?1
accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
sec-fetch-site
none
accept-encoding
gzip, deflate, br
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
navigate
Sec-Fetch-User
?1

Response headers

status
200
server
nginx
content-type
text/html; charset=UTF-8
vary
Accept-Encoding
date
Fri, 13 Sep 2019 08:37:10 GMT
x-page-speed
1.13.35.2-0
cache-control
max-age=0, no-cache
content-encoding
gzip
source-sans-pro-v11-latin-700.woff2
www.giga.de/static-local/dist/assets/fonts/source-sans-pro/
15 KB
15 KB
Font
General
Full URL
https://www.giga.de/static-local/dist/assets/fonts/source-sans-pro/source-sans-pro-v11-latin-700.woff2
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.72.10 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx /
Resource Hash
c09055f0d3ce5ac45f886c935226d1e4cb0f7488525e9f8b298f26fc0171e5a8

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Origin
https://www.giga.de
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:10 GMT
last-modified
Wed, 11 Sep 2019 09:32:44 GMT
server
nginx
accept-language
bytes
etag
"5d78bf3c-3c78"
status
200
access-control-allow-methods
GET
content-type
application/octet-stream
access-control-allow-origin
*
cache-control
max-age=31536000, s-maxage=10
content-length
15480
expires
Sat, 12 Sep 2020 08:37:10 GMT
source-sans-pro-v11-latin-600.woff2
www.giga.de/static-local/dist/assets/fonts/source-sans-pro/
15 KB
16 KB
Font
General
Full URL
https://www.giga.de/static-local/dist/assets/fonts/source-sans-pro/source-sans-pro-v11-latin-600.woff2
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.72.10 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx /
Resource Hash
d8381e66783011957eabadb622d7899061bf93e78fff38ebfe00ab743d6c8e60

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Origin
https://www.giga.de
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:10 GMT
last-modified
Wed, 11 Sep 2019 09:32:44 GMT
server
nginx
accept-language
bytes
etag
"5d78bf3c-3da8"
status
200
access-control-allow-methods
GET
content-type
application/octet-stream
access-control-allow-origin
*
cache-control
max-age=31536000, s-maxage=10
content-length
15784
expires
Sat, 12 Sep 2020 08:37:10 GMT
source-sans-pro-v11-latin-regular.woff2
www.giga.de/static-local/dist/assets/fonts/source-sans-pro/
16 KB
16 KB
Font
General
Full URL
https://www.giga.de/static-local/dist/assets/fonts/source-sans-pro/source-sans-pro-v11-latin-regular.woff2
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.72.10 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx /
Resource Hash
cb992eae898417162c48b37712991d9ad8053c4a64fce51aff195edc69dc35f2

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Origin
https://www.giga.de
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:10 GMT
last-modified
Wed, 11 Sep 2019 09:32:44 GMT
server
nginx
accept-language
bytes
etag
"5d78bf3c-3e24"
status
200
access-control-allow-methods
GET
content-type
application/octet-stream
access-control-allow-origin
*
cache-control
max-age=31536000, s-maxage=10
content-length
15908
expires
Sat, 12 Sep 2020 08:37:10 GMT
lux.js
cdn.speedcurve.com/js/
19 KB
7 KB
Script
General
Full URL
https://cdn.speedcurve.com/js/lux.js?id=131387135
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.14.217 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
Apache /
Resource Hash
8b703b9f986241e1202672cb854dfa0c5d18d18d762ed927cc9f0ecbad7addfe
Security Headers
Name Value
Strict-Transport-Security max-age=15768000

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

strict-transport-security
max-age=15768000
content-encoding
gzip
age
45114
x-cache
HIT
status
200
content-length
6462
x-served-by
cache-fra19133-FRA
access-control-allow-origin
*
last-modified
Thu, 12 Sep 2019 20:05:16 GMT
server
Apache
x-timer
S1568363831.766874,VS0,VE0
date
Fri, 13 Sep 2019 08:37:10 GMT
vary
Accept-Encoding
content-type
application/javascript; charset=utf-8
via
1.1 varnish
expires
Fri, 13 Sep 2019 20:05:16 GMT
cache-control
max-age=86400
accept-ranges
bytes
timing-allow-origin
*
x-cache-hits
2724
pre-173ae7134f.js
www.giga.de/static-local/dist/assets/js/
59 KB
19 KB
Script
General
Full URL
https://www.giga.de/static-local/dist/assets/js/pre-173ae7134f.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.72.10 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx /
Resource Hash
63714e830757475f0137c03822188430715e636f0f465e75c9d5b4dd03bf9457

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Wed, 11 Sep 2019 09:34:15 GMT
content-encoding
gzip
x-original-content-length
60608
server
nginx
status
200
etag
W/"5d78bf3e-ecc0"
vary
Accept-Encoding
access-control-allow-methods
GET
content-type
text/javascript
access-control-allow-origin
*
cache-control
max-age=31536000
content-length
19338
expires
Thu, 10 Sep 2020 09:34:15 GMT
main-desktop-5871470d6d.css
www.giga.de/static-local/dist/assets/css/
356 KB
49 KB
Stylesheet
General
Full URL
https://www.giga.de/static-local/dist/assets/css/main-desktop-5871470d6d.css
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.72.10 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx /
Resource Hash
18fb2b55cf8f17a3ecffab0fe2223921a6ccba4bffd6ed33a03ef3bf619a9148

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Tue, 10 Sep 2019 11:09:51 GMT
content-encoding
gzip
x-original-content-length
364814
server
nginx
status
200
etag
W/"5d778426-5910e"
vary
Accept-Encoding
access-control-allow-methods
GET
content-type
text/css
access-control-allow-origin
*
cache-control
max-age=31536000
content-length
50114
expires
Wed, 09 Sep 2020 11:09:51 GMT
iam.js
script.ioam.de/
34 KB
11 KB
Script
General
Full URL
https://script.ioam.de/iam.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
91.215.100.39 , Germany, ASN43407 (INFONLINE-AS, NL),
Reverse DNS
script4.ioam.de
Software
nginx / BLACKBIRD-SRC v0.10 000c
Resource Hash
6e56afb2fb736ea4a16ba443214ab2795a3cd76ffe5cc84827bdf7ceb26d67f7

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:10 GMT
Content-Encoding
gzip
Last-Modified
Fri, 13 Sep 2019 08:37:10 GMT
Server
nginx
X-Powered-By
BLACKBIRD-SRC v0.10 000c
Vary
Accept-Encoding
P3P
policyref=https://script.ioam.de/p3p.xml, CP=NOI DSP NID PSAa OUR NOR UNI COM NAV
Cache-Control
private, max-age=7200, pre-check=7200
Transfer-Encoding
chunked
Connection
keep-alive
Content-Type
application/javascript
Expires
Fri, 13 Sep 2019 10:37:10 GMT
metaTag.min.f1bbc04dfb148c8496847212fb317059.js
js.stroeermediabrands.de/
257 KB
62 KB
Script
General
Full URL
https://js.stroeermediabrands.de/metaTag.min.f1bbc04dfb148c8496847212fb317059.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
46.253.113.178 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx/1.14.1 /
Resource Hash
bd3bc3097edbb84fffd054526645ecc935588d441f13e4612871ceab14d3740c

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:10 GMT
content-encoding
gzip
last-modified
Thu, 12 Sep 2019 12:39:02 GMT
server
nginx/1.14.1
vary
Accept-Encoding
content-type
application/javascript
status
200
cache-control
max-age=31536000, public immutable max-age=31536000
expires
Sat, 12 Sep 2020 08:37:10 GMT
2501-rcm40x40.jpg
static.giga.de/wp-content/uploads/2015/05/
796 B
1 KB
Image
General
Full URL
https://static.giga.de/wp-content/uploads/2015/05/2501-rcm40x40.jpg
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.70.100 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx/1.10.3 /
Resource Hash
aad43962cf32b81533449a96ca4937f1399e018c07822a86450a2ba0a5d7794a
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Tue, 20 Aug 2019 14:38:47 GMT
x-content-type-options
nosniff
age
2051903
filer-source
ca7b44b53d5a66e850355c11821198c504e518f8f12b295bd9c54d22bb538e08
x-cache
HIT
status
200
accept-language
bytes
content-length
796
x-xss-protection
1; mode=block
last-modified
Tue, 20 Aug 2019 14:38:47 GMT
server
nginx/1.10.3
filer-attr
W1s0MCw0MF0sInNodXR0bGUtdjEiLFsiRlJBLTEiXSxbIkZSQi0xIl1d
content-type
image/jpeg
access-control-allow-origin
*
access-control-expose-headers
Content-Length
cache-control
public, max-age=2592000, no-transform
expires
Thu, 19 Sep 2019 14:38:47 GMT
adsbygoogle.js
pagead2.googlesyndication.com/pagead/js/
96 KB
35 KB
Script
General
Full URL
https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:824::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
cafe /
Resource Hash
9bd30b1e43178f3f44cea73f2c0a38523a0f68d791c37f9a152fa15f56dd302f
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:10 GMT
content-encoding
gzip
x-content-type-options
nosniff
p3p
policyref="https://www.googleadservices.com/pagead/p3p.xml", CP="NOI DEV PSA PSD IVA IVD OTP OUR OTR IND OTC"
status
200
content-disposition
attachment; filename="f.txt"
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
content-length
35377
x-xss-protection
0
server
cafe
etag
2293532946380698549
vary
Accept-Encoding
content-type
text/javascript; charset=UTF-8
cache-control
private, max-age=3600
timing-allow-origin
*
expires
Fri, 13 Sep 2019 08:37:10 GMT
paypal-login-deutsch-rcm960x0.jpg
static.giga.de/wp-content/uploads/2015/07/
18 KB
19 KB
Image
General
Full URL
https://static.giga.de/wp-content/uploads/2015/07/paypal-login-deutsch-rcm960x0.jpg
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.70.100 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx/1.10.3 /
Resource Hash
f94e032d892cd03ec8d2e87a139d5598ff586ffd4ddccd14d0cef518730c0821
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Mon, 09 Sep 2019 04:05:34 GMT
x-content-type-options
nosniff
age
361896
filer-source
3dc62a8e18f9b6ceb94ecf895297d72ce0545c5156c00f0fa8e434dc55d3102e
x-cache
HIT
status
200
accept-language
bytes
content-length
18921
x-xss-protection
1; mode=block
last-modified
Sat, 07 Sep 2019 12:36:06 GMT
server
nginx/1.10.3
filer-attr
W1s4OTAsNDg1XSwic2h1dHRsZS12MSIsWyJGUkEtMSJdLFsiRlJCLTEiXV0=
content-type
image/jpeg
access-control-allow-origin
*
access-control-expose-headers
Content-Length
cache-control
public, max-age=2592000, no-transform
expires
Mon, 07 Oct 2019 12:36:06 GMT
2845a21346beaba2f3d1db455b_YyAxODk1eDYzNysxMisxNzACcmUgNjI1IDIxMAMwZDI1MTZhMmRiNQ==.jpg
crops.giga.de/0a/ad/ab/
16 KB
17 KB
Image
General
Full URL
https://crops.giga.de/0a/ad/ab/2845a21346beaba2f3d1db455b_YyAxODk1eDYzNysxMisxNzACcmUgNjI1IDIxMAMwZDI1MTZhMmRiNQ==.jpg
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.70.100 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx/1.10.3 /
Resource Hash
a0611e486e87faf678d732cede5f2b94c26550f87a9e8baf6393ac3e8f96268b
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Mon, 26 Aug 2019 05:47:53 GMT
x-content-type-options
nosniff
age
1565358
filer-source
833cb36a650161e736193aec5c3891398d2fa56a03e872ecb4014e0c343af106
x-cache
HIT
status
200
accept-language
bytes
content-length
16480
x-xss-protection
1; mode=block
last-modified
Mon, 26 Aug 2019 05:47:53 GMT
server
nginx/1.10.3
filer-attr
W1s2MjUsMjEwXSwic3RpLXYzIixbIkZSQS0xIl0sWyJGUkItMSJdXQ==
content-type
image/jpeg
access-control-allow-origin
*
access-control-expose-headers
Content-Length
cache-control
public, max-age=2592000, no-transform
expires
Wed, 25 Sep 2019 05:47:53 GMT
PayPal-Login-Page-rcm464x0.jpg
static.giga.de/wp-content/uploads/2015/07/
21 KB
21 KB
Image
General
Full URL
https://static.giga.de/wp-content/uploads/2015/07/PayPal-Login-Page-rcm464x0.jpg
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.70.100 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx/1.10.3 /
Resource Hash
2f58ccf14355919dfa5815bebd82d775161bdf2707480201bd8b2334778c0412
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Mon, 09 Sep 2019 04:05:34 GMT
x-content-type-options
nosniff
age
361896
filer-source
7154c03f1279d42875baf477c69c8abd717043148b5dba0c147151812277507b
x-cache
HIT
status
200
accept-language
bytes
content-length
21316
x-xss-protection
1; mode=block
last-modified
Mon, 09 Sep 2019 04:05:34 GMT
server
nginx/1.10.3
filer-attr
W1s0MTUsNTczXSwic2h1dHRsZS12MSIsWyJGUkEtMSJdLFsiRlJCLTEiXV0=
content-type
image/jpeg
access-control-allow-origin
*
access-control-expose-headers
Content-Length
cache-control
public, max-age=2592000, no-transform
expires
Wed, 09 Oct 2019 04:05:34 GMT
AnyDesk-Artikelbild-rcm200x113.jpg
static.giga.de/wp-content/uploads/2017/10/
6 KB
6 KB
Image
General
Full URL
https://static.giga.de/wp-content/uploads/2017/10/AnyDesk-Artikelbild-rcm200x113.jpg
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.70.100 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx/1.10.3 /
Resource Hash
38306a61050b744f5681bff474aebdff051ae5682ddb4e84b414b56abd4c2ee2
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Mon, 09 Sep 2019 03:17:23 GMT
x-content-type-options
nosniff
age
364787
filer-source
8c10d8aa6c61a8c4b1ebd14376a9274e115f35c19daef6084c846c65100d8330
x-cache
HIT
status
200
accept-language
bytes
content-length
5911
x-xss-protection
1; mode=block
last-modified
Mon, 26 Aug 2019 14:54:46 GMT
server
nginx/1.10.3
filer-attr
W1syMDAsMTEzXSwic2h1dHRsZS12MiIsWyJGUkEtMSJdLFsiRlJCLTEiXV0=
content-type
image/jpeg
access-control-allow-origin
*
access-control-expose-headers
Content-Length
cache-control
public, max-age=2592000, no-transform
expires
Wed, 25 Sep 2019 14:54:46 GMT
FreeFileSync-rcm200x113.jpg
static.giga.de/wp-content/uploads/2018/03/
7 KB
8 KB
Image
General
Full URL
https://static.giga.de/wp-content/uploads/2018/03/FreeFileSync-rcm200x113.jpg
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.70.100 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx/1.10.3 /
Resource Hash
c7e6b1dcc86227fc39b041454dbe6fbbab2efee73f711d5c9e9e420f605d9415
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Thu, 12 Sep 2019 08:05:53 GMT
x-content-type-options
nosniff
age
88278
filer-source
a0c806e3e1a8b0651708778746d7341bad416964dab740a642a1f80c27775141
x-cache
HIT
status
200
accept-language
bytes
content-length
7476
x-xss-protection
1; mode=block
last-modified
Fri, 16 Aug 2019 19:21:19 GMT
server
nginx/1.10.3
filer-attr
W1syMDAsMTEzXSwic2h1dHRsZS12MiIsWyJGUkEtMSJdLFsiRlJCLTEiXV0=
content-type
image/jpeg
access-control-allow-origin
*
access-control-expose-headers
Content-Length
cache-control
public, max-age=2592000, no-transform
expires
Sun, 15 Sep 2019 19:21:19 GMT
CrystalDiskInfo-Artikelbild-1-rcm200x113.jpg
static.giga.de/wp-content/uploads/2018/08/
7 KB
8 KB
Image
General
Full URL
https://static.giga.de/wp-content/uploads/2018/08/CrystalDiskInfo-Artikelbild-1-rcm200x113.jpg
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.70.100 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx/1.10.3 /
Resource Hash
d6cbd7921bed348f24d7aed7d9b3c0f1b63c160b79a120a67bd03a9e9fba0dd1
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Mon, 09 Sep 2019 05:53:41 GMT
x-content-type-options
nosniff
age
355409
filer-source
5b851bf7d6a7031d567f1e5ccf3558bcb72603e21ef3992a7fbd0915ebc083ee
x-cache
HIT
status
200
accept-language
bytes
content-length
7470
x-xss-protection
1; mode=block
last-modified
Wed, 14 Aug 2019 15:45:21 GMT
server
nginx/1.10.3
filer-attr
W1syMDAsMTEzXSwic2h1dHRsZS12MiIsWyJGUkEtMSJdLFsiRlJCLTEiXV0=
content-type
image/jpeg
access-control-allow-origin
*
access-control-expose-headers
Content-Length
cache-control
public, max-age=2592000, no-transform
expires
Fri, 13 Sep 2019 15:45:21 GMT
Siri-Geld-verschicken-PayPal-rcm235x129.jpg
static.giga.de/wp-content/uploads/2016/11/
6 KB
6 KB
Image
General
Full URL
https://static.giga.de/wp-content/uploads/2016/11/Siri-Geld-verschicken-PayPal-rcm235x129.jpg
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.70.100 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx/1.10.3 /
Resource Hash
40447fb0b243730fcdc6a8a094cf9d400ce1ec01e89ab80e15142ce294f49fa8
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Mon, 09 Sep 2019 04:05:35 GMT
x-content-type-options
nosniff
age
361895
filer-source
8fa6d82067b578ca8e6bb273bed34f9d123e3ee778a1db1a4f9ea350b5447154
x-cache
HIT
status
200
accept-language
bytes
content-length
5657
x-xss-protection
1; mode=block
last-modified
Mon, 09 Sep 2019 04:05:35 GMT
server
nginx/1.10.3
filer-attr
W1syMzUsMTI5XSwic2h1dHRsZS12MSIsWyJGUkEtMSJdLFsiRlJCLTEiXV0=
content-type
image/jpeg
access-control-allow-origin
*
access-control-expose-headers
Content-Length
cache-control
public, max-age=2592000, no-transform
expires
Wed, 09 Oct 2019 04:05:35 GMT
trackcp.js
gocp.stroeermediabrands.de/
27 KB
10 KB
Script
General
Full URL
https://gocp.stroeermediabrands.de/trackcp.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
188.40.16.106 , Germany, ASN24940 (HETZNER-AS, DE),
Reverse DNS
static.106.16.40.188.clients.your-server.de
Software
/
Resource Hash
ed12abebf74d61e8a6846dd87861bbe0c58355d207ef453eabd28a82e0519496

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:10 GMT
Content-Encoding
gzip
Last-Modified
Mon, 26 Aug 2019 12:30:08 GMT
ETag
"5d63d0d0-6cb8"
Transfer-Encoding
chunked
Content-Type
application/javascript
Cache-Control
max-age=86400, max-age=31536000, public
X-Machine
hn87 gocp env
Accept-Ranges
bytes
Expires
Sat, 14 Sep 2019 08:37:10 GMT
blank.gif
ssl-econa.met.vgwort.de/
Redirect Chain
  • https://ssl-econa.met.vgwort.de/na/aed5432c7f5c4a7c8eccb40d68e02ce1
  • https://ssl-econa.met.vgwort.de/blank.gif
43 B
310 B
Image
General
Full URL
https://ssl-econa.met.vgwort.de/blank.gif
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
161.156.66.178 , United States, ASN36351 (SOFTLAYER - SoftLayer Technologies Inc., US),
Reverse DNS
b2.42.9ca1.ip4.static.sl-reverse.com
Software
s2.50.19 /
Resource Hash
cf4724b2f736ed1a0ae6bc28f1ead963d9cd2c1fd87b6ef32e7799fc1c5c8bda

Request headers

Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Access-Control-Allow-Origin
*
Date
Fri, 13 Sep 2019 08:37:10 GMT
Last-Modified
Mon, 28 Sep 1970 06:00:00 GMT
Server
s2.50.19
Connection
keep-alive
Content-Length
43
Content-Type
image/gif

Redirect headers

Date
Fri, 13 Sep 2019 08:37:10 GMT
Last-Modified
Fri, 13 Sep 2019 08:37:10 GMT
Server
s2.50.19
Access-Control-Allow-Origin
*
Transfer-Encoding
chunked
Content-Type
text/html
Location
/blank.gif
Cache-Control
max-age=0, no-cache, must-revalidate, proxy-revalidate
Connection
keep-alive
Expires
Tue, 22 Aug 2000 15:05:01 GMT
tr
www.facebook.com/
44 B
323 B
Image
General
Full URL
https://www.facebook.com/tr?id=1773162896260346&ev=PageView&noscript=1
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a03:2880:f12d:83:face:b00c:0:25de , Ireland, ASN32934 (FACEBOOK - Facebook, Inc., US),
Reverse DNS
Software
proxygen-bolt /
Resource Hash
10d8d42d73a02ddb877101e72fbfa15a0ec820224d97cedee4cf92d571be5caa
Security Headers
Name Value
Strict-Transport-Security max-age=31536000; includeSubDomains

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:10 GMT
last-modified
Fri, 21 Dec 2012 00:00:01 GMT
server
proxygen-bolt
strict-transport-security
max-age=31536000; includeSubDomains
content-type
image/gif
status
200
cache-control
no-cache, must-revalidate, max-age=0
content-length
44
expires
Fri, 13 Sep 2019 08:37:10 GMT
tr
www.facebook.com/
44 B
201 B
Image
General
Full URL
https://www.facebook.com/tr?id=1773162896260346&ev=ViewContent
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a03:2880:f12d:83:face:b00c:0:25de , Ireland, ASN32934 (FACEBOOK - Facebook, Inc., US),
Reverse DNS
Software
proxygen-bolt /
Resource Hash
10d8d42d73a02ddb877101e72fbfa15a0ec820224d97cedee4cf92d571be5caa
Security Headers
Name Value
Strict-Transport-Security max-age=31536000; includeSubDomains

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:10 GMT
last-modified
Fri, 21 Dec 2012 00:00:01 GMT
server
proxygen-bolt
strict-transport-security
max-age=31536000; includeSubDomains
content-type
image/gif
status
200
cache-control
no-cache, must-revalidate, max-age=0
content-length
44
expires
Fri, 13 Sep 2019 08:37:10 GMT
tag.min.js
get.s-onetag.com/1400a607-dbd1-49d7-9171-69ce05c71f5e/
70 KB
16 KB
Script
General
Full URL
https://get.s-onetag.com/1400a607-dbd1-49d7-9171-69ce05c71f5e/tag.min.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
2600:9000:2057:4600:1f:287:d20a:ce1 , United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
02a7b0524c2c00da3b4d41595a90ff9ebdd1662955c3919e412ca07ce79f118e

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

x-amz-version-id
hOsyJE0qOnWEl7X3M.i76385dbqabo0x
content-encoding
gzip
last-modified
Tue, 03 Sep 2019 17:36:55 GMT
server
AmazonS3
age
2954
date
Fri, 13 Sep 2019 07:50:04 GMT
vary
Accept-Encoding
x-cache
Hit from cloudfront
content-type
text/javascript
status
200
cache-control
max-age=3600
x-amz-cf-pop
FRA6-C1
x-amz-cf-id
iSyMH9YNQglmy8sJlvaVfRgmfr5xL9dUgpz7egDIoNU6xjj4s5EpdQ==
via
1.1 21da0a66bafe2c8de8be4a4d8039346b.cloudfront.net (CloudFront)
analytics.js
www.google-analytics.com/
43 KB
17 KB
Script
General
Full URL
https://www.google-analytics.com/analytics.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/static-local/dist/assets/js/pre-173ae7134f.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:825::200e Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Golfe2 /
Resource Hash
dbb67c620eaabf6679a314db18d3ae43037aef71ab27422e6feec08ee987cc0a
Security Headers
Name Value
Strict-Transport-Security max-age=10886400; includeSubDomains; preload
X-Content-Type-Options nosniff

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

strict-transport-security
max-age=10886400; includeSubDomains; preload
content-encoding
gzip
x-content-type-options
nosniff
last-modified
Mon, 19 Aug 2019 17:22:41 GMT
server
Golfe2
age
6817
date
Fri, 13 Sep 2019 06:43:33 GMT
vary
Accept-Encoding
content-type
text/javascript
status
200
cache-control
public, max-age=7200
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
17803
expires
Fri, 13 Sep 2019 08:43:33 GMT
apstag.js
c.amazon-adsystem.com/aax2/
75 KB
22 KB
Script
General
Full URL
https://c.amazon-adsystem.com/aax2/apstag.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/static-local/dist/assets/js/pre-173ae7134f.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
143.204.211.231 Seattle, United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
server-143-204-211-231.fra53.r.cloudfront.net
Software
Server /
Resource Hash
429e8f62ea6700f952db60ed9f95d5c6b4791a4d8cd2877424c8f17a1793a184

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Wed, 11 Sep 2019 20:14:12 GMT
content-encoding
gzip
server
Server
age
44577
etag
ddd9d5f81cde70f506947a629eb2805e
x-cache
Hit from cloudfront
content-type
application/javascript
status
200
cache-control
public, max-age=86400
x-amz-cf-pop
FRA53-C1
accept-ranges
bytes
timing-allow-origin
*
x-amz-cf-id
1trrl8NwNcsQebzWGvMtH_QSuN6q6pN0wsrSkEao_XKoClWlgGLKJw==
via
1.1 3f6fbf009bb5cf969f92ba2e59576614.cloudfront.net (CloudFront)
init
d.nativendo.de/cds/delivery/
991 B
918 B
Script
General
Full URL
https://d.nativendo.de/cds/delivery/init
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
107.178.241.34 , United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
34.241.178.107.bc.googleusercontent.com
Software
Apache /
Resource Hash
ba78228683af43e25c31f85ad078af375af1cab55f5b897af66556565e9b178c

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:10 GMT
content-encoding
gzip
last-modified
Fri, 13 Sep 2019 08:37:10 GMT
server
Apache
vary
Accept-Encoding
p3p
CP="This is not a p3p policy."
status
200
cache-control
no-transform, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
content-type
text/javascript; charset=utf8
alt-svc
clear
content-length
516
via
1.1 google
expires
Sat, 26 Jul 1997 05:00:00 GMT
identitystatus
irqs.ioam.de/
25 B
203 B
XHR
General
Full URL
https://irqs.ioam.de/identitystatus?offerIdentifier=giga&siteIdentifier=software_content&sampleType=in&pixelType=CP&isFadeoutFlash=true&isFadeoutFrame=true&isFadeoutForm=true&positionTop=10&positionLeft=100&zIndex=1100000&c=0.35431883175537715
Requested by
Host: script.ioam.de
URL: https://script.ioam.de/iam.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
193.46.63.75 Alfter, Germany, ASN43407 (INFONLINE-AS, NL),
Reverse DNS
irqs.ioam.de
Software
nginx /
Resource Hash
9efa53ec1a261a8576a66a71befaf9d03c1a108aac36271f4599b87597b8a71e
Security Headers
Name Value
Strict-Transport-Security max-age=15768000

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:10 GMT
server
nginx
status
200
vary
Origin
content-type
application/vnd.api+json
access-control-allow-origin
https://www.giga.de
access-control-allow-credentials
true
strict-transport-security
max-age=15768000
blank.gif
de.ioam.de/
Redirect Chain
  • https://de.ioam.de/tx.io?st=giga&cp=software_content&sv=in&sc=yes&pt=CP&ps=lin&er=N22&rf=&r2=&ur=www.giga.de&xy=1600x1200x24&lo=DE%2Fn.a.&cb=000c&i2=000cfc637ad275a515d7b5536&ep=1593875152&vr=415&i...
  • https://de.ioam.de/tx.io?st=giga&cp=software_content&sv=in&sc=yes&pt=CP&ps=lin&er=N22&rf=&r2=&ur=www.giga.de&xy=1600x1200x24&lo=DE%2Fn.a.&cb=000c&i2=000cfc637ad275a515d7b5536&ep=1593875152&vr=415&i...
  • https://de.ioam.de/blank.gif
43 B
651 B
Image
General
Full URL
https://de.ioam.de/blank.gif
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
91.215.103.65 , Germany, ASN43407 (INFONLINE-AS, NL),
Reverse DNS
de3.ioam.de
Software
nginx /
Resource Hash
cf4724b2f736ed1a0ae6bc28f1ead963d9cd2c1fd87b6ef32e7799fc1c5c8bda

Request headers

Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:11 GMT
Last-Modified
Mon, 28 Sep 1970 06:00:00 GMT
Server
nginx
Access-Control-Allow-Methods
GET, POST, OPTIONS
P3P
policyref=https://script.ioam.de/p3p.xml, CP=NOI DSP NID PSAa OUR NOR UNI COM NAV
Access-Control-Allow-Origin
*
Cache-Control
max-age=86400
Access-Control-Allow-Credentials
true
Connection
keep-alive
Content-Type
image/gif
Access-Control-Allow-Headers
DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Cookies
Content-Length
43
Expires
Sat, 14 Sep 2019 08:37:11 GMT

Redirect headers

Date
Fri, 13 Sep 2019 08:37:10 GMT
Access-Control-Allow-Origin
*
X-Powered-By
BLACKBIRD-RCV v1.05.0 0029
Transfer-Encoding
chunked
P3P
policyref=https://script.ioam.de/p3p.xml, CP=NOI DSP NID PSAa OUR NOR UNI COM NAV
Connection
keep-alive
Pragma
no-cache
Last-Modified
Fri, 13 Sep 2019 08:37:10 GMT
Server
nginx
Access-Control-Allow-Methods
GET, POST, OPTIONS
Content-Type
text/html
Location
/blank.gif
Cache-Control
no-store, no-cache, must-revalidate
Access-Control-Allow-Credentials
true
Access-Control-Allow-Headers
DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Cookies
Expires
Thu, 13 Sep 2018 08:37:10 GMT
fontello.woff2
www.giga.de/static-local/dist/assets/fonts/fontello/
9 KB
10 KB
Font
General
Full URL
https://www.giga.de/static-local/dist/assets/fonts/fontello/fontello.woff2?62585758
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.72.10 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx /
Resource Hash
1b35bd23206a199b500fdb41aa9dd3ddedb9cbfdd2f1b1da79c5a3f916e737e5

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/static-local/dist/assets/css/main-desktop-5871470d6d.css
Origin
https://www.giga.de
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:10 GMT
last-modified
Wed, 11 Sep 2019 09:32:44 GMT
server
nginx
accept-language
bytes
etag
"5d78bf3c-25d8"
status
200
access-control-allow-methods
GET
content-type
application/octet-stream
access-control-allow-origin
*
cache-control
max-age=31536000, s-maxage=10
content-length
9688
expires
Sat, 12 Sep 2020 08:37:10 GMT
176875
videos.giga.de/embed/ Frame 4364
9 KB
3 KB
Document
General
Full URL
https://videos.giga.de/embed/176875?autoplay=0
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
109.71.25.30 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx/1.14.1 /
Resource Hash
35637b2df493cc121a7ffc815aa9fadf81ae3f0199e524af5ebe73c7f254e3b7

Request headers

:method
GET
:authority
videos.giga.de
:scheme
https
:path
/embed/176875?autoplay=0
pragma
no-cache
cache-control
no-cache
upgrade-insecure-requests
1
user-agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
sec-fetch-mode
nested-navigate
accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
sec-fetch-site
same-site
referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
accept-encoding
gzip, deflate, br
cookie
pc=1; ioam2018=000cfc637ad275a515d7b5536:1594543030812:1568363830812:.giga.de:2:giga:software_content:noevent:1568363830812:rtp2c5
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

status
200
server
nginx/1.14.1
date
Fri, 13 Sep 2019 08:37:10 GMT
content-type
text/html;charset=UTF-8
link
<https://videos.giga.de/embed/176875>; rel="canonical"
content-encoding
gzip
aps_csm.js
c.amazon-adsystem.com/bao-csm/aps-comm/
6 KB
3 KB
XHR
General
Full URL
https://c.amazon-adsystem.com/bao-csm/aps-comm/aps_csm.js
Requested by
Host: c.amazon-adsystem.com
URL: https://c.amazon-adsystem.com/aax2/apstag.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
143.204.211.231 Seattle, United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
server-143-204-211-231.fra53.r.cloudfront.net
Software
AmazonS3 /
Resource Hash
6d6f482982f8f1a1814e279ff50df4ccc301533ca9655e4d080d6b90ec69d69e

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Thu, 12 Sep 2019 20:14:16 GMT
content-encoding
gzip
vary
Origin
age
44575
x-cache
Hit from cloudfront
status
200
access-control-allow-origin
*
last-modified
Fri, 24 Aug 2018 07:13:51 GMT
server
AmazonS3
access-control-max-age
3000
access-control-allow-methods
GET
content-type
application/javascript
via
1.1 16dc09493f48bbc1fd2cdd6e175a94f7.cloudfront.net (CloudFront)
cache-control
public, max-age=86400
x-amz-cf-pop
FRA53-C1
x-amz-cf-id
F9Tjp0XvOzdaPbdnsPnGEDuGxC4Me23DWfz1Ew5Oq_d3ci0N0YlFtA==
bg-teaser.png
www.giga.de/wp-content/themes/project/assets/img/teaser/
647 B
865 B
Image
General
Full URL
https://www.giga.de/wp-content/themes/project/assets/img/teaser/bg-teaser.png
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.72.10 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx /
Resource Hash
265de6b562fdaf225b6713104b74342ffe97177ac67505d9e799e3acfa56352b

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/static-local/dist/assets/css/main-desktop-5871470d6d.css
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Thu, 28 Mar 2019 00:02:44 GMT
server
nginx
accept-language
bytes
etag
"5c9a42da-287"
status
200
access-control-allow-methods
GET
content-type
image/png
access-control-allow-origin
*
cache-control
max-age=31536000
content-length
647
expires
Fri, 27 Mar 2020 00:02:44 GMT
js
www.google-analytics.com/gtm/
85 KB
28 KB
Script
General
Full URL
https://www.google-analytics.com/gtm/js?id=GTM-KRW4T6J&t=gt1&cid=130780938.1568363831&aip=true
Requested by
Host: www.google-analytics.com
URL: https://www.google-analytics.com/analytics.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:825::200e Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Google Tag Manager /
Resource Hash
a7a3688d3c99ee687cf6ea9a621434b4dacfd08d50a14a646ffd0c9d472b46c5
Security Headers
Name Value
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:10 GMT
content-encoding
br
server
Google Tag Manager
access-control-allow-headers
Cache-Control
status
200
vary
Accept-Encoding
content-type
application/javascript; charset=UTF-8
access-control-allow-origin
http://www.googletagmanager.com
cache-control
private, max-age=900
access-control-allow-credentials
true
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
28249
x-xss-protection
0
expires
Fri, 13 Sep 2019 08:37:10 GMT
z.js
go.giga-abs.de/
1 KB
1 KB
Script
General
Full URL
https://go.giga-abs.de/z.js?0.3505313714111349
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.0
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.72.20 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
X/1.0 /
Resource Hash
df9a8ea808eab2cfe30957bbf9979a1c2b892c6a074c2a848661aa4cf89c6416
Security Headers
Name Value
X-Content-Type-Options nosniff

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:10 GMT
X-Content-Type-Options
nosniff
Last-Modified
Fri, 13 Sep 2019 08:37:10 GMT
Server
X/1.0
Content-Type
text/javascript
Cache-Control
max-age=86400, public
Connection
keep-alive
Content-Length
1040
Expires
Sat, 14 Sep 2019 08:37:04 GMT
Cookie set iframe
tracking.m6r.eu/pixel/ Frame 8295
Redirect Chain
  • https://tracking.m6r.eu/pixel/iframe?pixelId=f407193e-e112-43a2-a5e6-af92d82a6269&theme=GIGA+Software
  • https://tracking.m6r.eu/pixel/iframe?pixelId=f407193e-e112-43a2-a5e6-af92d82a6269&theme=GIGA%20Software&checkcookies=true
0
0
Document
General
Full URL
https://tracking.m6r.eu/pixel/iframe?pixelId=f407193e-e112-43a2-a5e6-af92d82a6269&theme=GIGA%20Software&checkcookies=true
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
104.109.82.87 , Netherlands, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
a104-109-82-87.deploy.static.akamaitechnologies.com
Software
nginx /
Resource Hash

Request headers

Host
tracking.m6r.eu
Connection
keep-alive
Pragma
no-cache
Cache-Control
no-cache
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site
cross-site
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Accept-Encoding
gzip, deflate, br
Cookie
test=true
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

Server
nginx
Content-Type
text/html; charset=utf-8
P3P
CP="NOI CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT"
Cache-Control
no-cache
Content-Encoding
gzip
Date
Fri, 13 Sep 2019 08:37:10 GMT
Content-Length
1577
Connection
keep-alive
Vary
Accept-Encoding
Set-Cookie
id=562f6e0592a50266d82bbdd8627b2056; Max-Age=7776000; Domain=m6r.eu; Path=/; Expires=Thu, 12 Dec 2019 08:37:10 GMT

Redirect headers

Server
nginx
Content-Type
text/html; charset=utf-8
Content-Length
302
Location
https://tracking.m6r.eu/pixel/iframe?pixelId=f407193e-e112-43a2-a5e6-af92d82a6269&theme=GIGA%20Software&checkcookies=true
Date
Fri, 13 Sep 2019 08:37:10 GMT
Connection
keep-alive
Set-Cookie
test=true; Max-Age=3600; Domain=m6r.eu; Path=/; Expires=Fri, 13 Sep 2019 09:37:10 GMT
gpt.js
www.googletagservices.com/tag/js/
40 KB
13 KB
Script
General
Full URL
https://www.googletagservices.com/tag/js/gpt.js
Requested by
Host: js.stroeermediabrands.de
URL: https://js.stroeermediabrands.de/metaTag.min.f1bbc04dfb148c8496847212fb317059.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:824::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
sffe /
Resource Hash
e1ba287125c479a4febea7faddf96e9c99c7f6f54aaea9e1780852cf8af9611c
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:10 GMT
content-encoding
gzip
x-content-type-options
nosniff
server
sffe
etag
"277 / 613 of 1000 / last-modified: 1568323759"
vary
Accept-Encoding
content-type
text/javascript
status
200
cache-control
private, max-age=900, stale-while-revalidate=3600
timing-allow-origin
*
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
content-length
12745
x-xss-protection
0
expires
Fri, 13 Sep 2019 08:37:10 GMT
bid
c.amazon-adsystem.com/e/dtb/
122 B
505 B
XHR
General
Full URL
https://c.amazon-adsystem.com/e/dtb/bid?src=3301&u=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&pid=9143160348451568363830852&cb=3482161168721568363830955&ws=1600x1200&v=7.36.00&t=1000&slots=%5B%7B%22sd%22%3A%22banner-1%22%2C%22s%22%3A%5B%22728x90%22%5D%2C%22sn%22%3A%22banner%22%7D%2C%7B%22sd%22%3A%22sky-2%22%2C%22s%22%3A%5B%22160x600%22%2C%22300x600%22%5D%2C%22sn%22%3A%22sky%22%7D%2C%7B%22sd%22%3A%22rectangle-4%22%2C%22s%22%3A%5B%22300x250%22%5D%2C%22sn%22%3A%22rectangle%22%7D%5D&pj=%7B%22apse%22%3A%7B%22chunkRequests%22%3Afalse%2C%22shouldCFRoute%22%3Atrue%2C%22shouldSampleLatency%22%3Afalse%7D%7D&cfgv=0&gdprl=%7B%22status%22%3A%22no-cmp%22%7D
Requested by
Host: c.amazon-adsystem.com
URL: https://c.amazon-adsystem.com/aax2/apstag.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
143.204.211.231 Seattle, United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
server-143-204-211-231.fra53.r.cloudfront.net
Software
Server /
Resource Hash
3320fb56f2fec9e760965a2ac7eb6bc6914270c6b7440cfcd0b652bbbab6d46c

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
content-encoding
gzip
server
Server
x-amz-cf-pop
FRA53-C1
status
200
vary
Accept-Encoding,User-Agent
x-cache
Miss from cloudfront
content-type
text/javascript;charset=UTF-8
access-control-allow-origin
https://www.giga.de
access-control-allow-credentials
true
timing-allow-origin
*
content-length
131
via
1.1 3f6fbf009bb5cf969f92ba2e59576614.cloudfront.net (CloudFront)
x-amz-cf-id
H0tyRvvdA39QbgcdrKpTAnPv_1t7UEa0p_gHYMOSPEVCZy2N00mMyA==
yieldlove-bidder-stroeer.js
cdn-a.yieldlove.com/
269 KB
84 KB
Script
General
Full URL
https://cdn-a.yieldlove.com/yieldlove-bidder-stroeer.js?giga.de
Requested by
Host: js.stroeermediabrands.de
URL: https://js.stroeermediabrands.de/metaTag.min.f1bbc04dfb148c8496847212fb317059.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
143.204.214.51 Seattle, United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
server-143-204-214-51.fra53.r.cloudfront.net
Software
/ Express
Resource Hash
61b9ac1203852340a156ea847aaf93c33ce3c1d6bfc2c55eb4b0f0716598eb48

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 06:09:42 GMT
content-encoding
gzip
age
8849
status
200
x-powered-by
Express
vary
Accept-Encoding
x-cache
Hit from cloudfront
content-type
application/javascript; charset=utf-8
access-control-allow-origin
*
cache-control
public, max-age=10800
x-amz-cf-pop
FRA53-C1
x-amz-cf-id
NK31OyEd7YSEz1p6OBx9EAE4eg_NZd5aLwsu5xkDLnMXJYCQ5tV0GQ==
via
1.1 8d31bbd9d6638cdacab37047b8045da4.cloudfront.net (CloudFront)
mtrcs_679600.js
s400.mxcdn.net/bb-mx/serve/
124 KB
48 KB
Script
General
Full URL
https://s400.mxcdn.net/bb-mx/serve/mtrcs_679600.js
Requested by
Host: js.stroeermediabrands.de
URL: https://js.stroeermediabrands.de/metaTag.min.f1bbc04dfb148c8496847212fb317059.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.233.67 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-233-67.deploy.static.akamaitechnologies.com
Software
nginx /
Resource Hash
359159fe456a7b4879303b756d2880d20df5c922f040fa5866727c27b4858e5c

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:10 GMT
Content-Encoding
gzip
Server
nginx
Vary
Accept-Encoding
P3P
policyref="/w3c/p3p.xml", CP="NON DSP CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa OUR IND UNI COM NAV STA"
Cache-Control
public, max-age=7200
Connection
keep-alive
Content-Type
text/javascript
Content-Length
49094
Expires
Fri, 13 Sep 2019 10:37:10 GMT
dmp
tracking.m6r.eu/sync/
Redirect Chain
  • https://tracking.m6r.eu/sync/dmp
  • https://tracking.m6r.eu/sync/dmp?checkcookies=true
97 B
597 B
XHR
General
Full URL
https://tracking.m6r.eu/sync/dmp?checkcookies=true
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
104.109.82.87 , Netherlands, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
a104-109-82-87.deploy.static.akamaitechnologies.com
Software
nginx /
Resource Hash
480d2b8dc3750386bed19ba9e1e09a5ffe76493fac1d7fc77bc048f175b27a23

Request headers

Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Encoding
gzip
Server
nginx
Vary
Accept-Encoding
P3P
CP="NOI CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT"
Access-Control-Allow-Origin
https://www.giga.de
Access-Control-Allow-Credentials
true
Connection
keep-alive
Content-Type
application/json; charset=utf-8
Content-Length
106

Redirect headers

Date
Fri, 13 Sep 2019 08:37:10 GMT
Server
nginx
Access-Control-Allow-Origin
https://www.giga.de
Content-Type
text/plain; charset=utf-8
Location
https://tracking.m6r.eu/sync/dmp?checkcookies=true
Access-Control-Allow-Credentials
true
Connection
keep-alive
Content-Length
72
rc
si.nuggad.net/
2 KB
1 KB
Script
General
Full URL
https://si.nuggad.net/rc?nuggn=571289945&nuggsid=947908416&nuggtg=&nuggrid=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F
Requested by
Host: js.stroeermediabrands.de
URL: https://js.stroeermediabrands.de/metaTag.min.f1bbc04dfb148c8496847212fb317059.js
Protocol
HTTP/1.1
Security
TLS 1.2, RSA, AES_128_CBC
Server
80.82.201.88 Berlin, Germany, ASN48173 (UNBELIEVABLE-AS, DE),
Reverse DNS
pbtgx-nuggad.unbelievable-machine.net
Software
Apache /
Resource Hash
6f76f02fcac9bd9bc624d98a2b8f5235f21ca512b97bce59f207794583ce68cd

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Encoding
gzip
Server
Apache
Vary
Accept-Encoding
P3P
CP="NOI DSP COR NID ADMa OTPa OUR NOR"
Status
200 OK
Cache-Control
no-store,no-cache
Connection
close
Content-Type
text/javascript
Keep-Alive
timeout=3, max=500
Content-Length
614
Expires
Wed, 18 Feb 2009 11:53:30 GMT
ad-loading.gif
www.dunkirkinception.com/detect/
138 B
449 B
Image
General
Full URL
https://www.dunkirkinception.com/detect/ad-loading.gif?p=imagez/
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
18.195.39.206 Frankfurt am Main, Germany, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
ec2-18-195-39-206.eu-central-1.compute.amazonaws.com
Software
/ TSAdServer
Resource Hash
3fafca44c304f7b6eab7180819c3732b59e55eac85e21e595cb75869498952e0

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Origin
https://www.giga.de
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:11 GMT
X-Powered-By
TSAdServer
ETag
W/"8a-xCUrsesxo1R78C+3IVSYWrZ8l2A"
Content-Type
image/png
Access-Control-Allow-Origin
*
Cache-Control
no-cache, no-store, must-revalidate
Connection
keep-alive
X-Robots-Tag
noindex, nofollow
Content-Length
138
integrator.js
adservice.google.de/adsid/
109 B
171 B
Script
General
Full URL
https://adservice.google.de/adsid/integrator.js?domain=www.giga.de
Requested by
Host: pagead2.googlesyndication.com
URL: https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:824::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
cafe /
Resource Hash
0482a98d09daebc18a0d2e1ed8f748da5b0179e61223ed541101df1f4699f073
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

timing-allow-origin
*
date
Fri, 13 Sep 2019 08:37:10 GMT
content-encoding
gzip
x-content-type-options
nosniff
server
cafe
p3p
CP="This is not a P3P policy! See http://support.google.com/accounts/answer/151657 for more info."
status
200
cache-control
private, no-cache, no-store
content-disposition
attachment; filename="f.txt"
content-type
application/javascript; charset=UTF-8
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
content-length
104
x-xss-protection
0
integrator.js
adservice.google.com/adsid/
109 B
171 B
Script
General
Full URL
https://adservice.google.com/adsid/integrator.js?domain=www.giga.de
Requested by
Host: pagead2.googlesyndication.com
URL: https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:818::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
cafe /
Resource Hash
0482a98d09daebc18a0d2e1ed8f748da5b0179e61223ed541101df1f4699f073
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

timing-allow-origin
*
date
Fri, 13 Sep 2019 08:37:10 GMT
content-encoding
gzip
x-content-type-options
nosniff
server
cafe
p3p
CP="This is not a P3P policy! See http://support.google.com/accounts/answer/151657 for more info."
status
200
cache-control
private, no-cache, no-store
content-disposition
attachment; filename="f.txt"
content-type
application/javascript; charset=UTF-8
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
content-length
104
x-xss-protection
0
show_ads_impl.js
pagead2.googlesyndication.com/pagead/js/r20190911/r20190131/
222 KB
82 KB
Script
General
Full URL
https://pagead2.googlesyndication.com/pagead/js/r20190911/r20190131/show_ads_impl.js
Requested by
Host: pagead2.googlesyndication.com
URL: https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:824::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
cafe /
Resource Hash
794fe0486515f44881ce168acf0fb4ba478b6971fe3448ae96176f50075fadca
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:10 GMT
content-encoding
gzip
x-content-type-options
nosniff
p3p
policyref="https://www.googleadservices.com/pagead/p3p.xml", CP="NOI DEV PSA PSD IVA IVD OTP OUR OTR IND OTC"
status
200
content-disposition
attachment; filename="f.txt"
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
content-length
84018
x-xss-protection
0
server
cafe
etag
7346031692830552506
vary
Accept-Encoding
content-type
text/javascript; charset=UTF-8
cache-control
private, max-age=1209600
timing-allow-origin
*
expires
Fri, 13 Sep 2019 08:37:10 GMT
show_ads_impl.js
pagead2.googlesyndication.com/pagead/js/r20190911/r20190131/ Frame 9627
222 KB
82 KB
Script
General
Full URL
https://pagead2.googlesyndication.com/pagead/js/r20190911/r20190131/show_ads_impl.js
Requested by
Host: pagead2.googlesyndication.com
URL: https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:824::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
cafe /
Resource Hash
794fe0486515f44881ce168acf0fb4ba478b6971fe3448ae96176f50075fadca
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:10 GMT
content-encoding
gzip
x-content-type-options
nosniff
p3p
policyref="https://www.googleadservices.com/pagead/p3p.xml", CP="NOI DEV PSA PSD IVA IVD OTP OUR OTR IND OTC"
status
200
content-disposition
attachment; filename="f.txt"
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
content-length
84018
x-xss-protection
0
server
cafe
etag
7346031692830552506
vary
Accept-Encoding
content-type
text/javascript; charset=UTF-8
cache-control
private, max-age=1209600
timing-allow-origin
*
expires
Fri, 13 Sep 2019 08:37:10 GMT
zrt_lookup.html
googleads.g.doubleclick.net/pagead/html/r20190911/r20190131/ Frame F5F0
0
0
Document
General
Full URL
https://googleads.g.doubleclick.net/pagead/html/r20190911/r20190131/zrt_lookup.html
Requested by
Host: pagead2.googlesyndication.com
URL: https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:816::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
cafe /
Resource Hash
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

:method
GET
:authority
googleads.g.doubleclick.net
:scheme
https
:path
/pagead/html/r20190911/r20190131/zrt_lookup.html
pragma
no-cache
cache-control
no-cache
upgrade-insecure-requests
1
user-agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
sec-fetch-mode
nested-navigate
accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
sec-fetch-site
cross-site
referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
accept-encoding
gzip, deflate, br
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

status
200
p3p
policyref="https://googleads.g.doubleclick.net/pagead/gcn_p3p_.xml", CP="CURa ADMa DEVa TAIo PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
timing-allow-origin
*
vary
Accept-Encoding
date
Thu, 12 Sep 2019 14:02:12 GMT
expires
Thu, 26 Sep 2019 14:02:12 GMT
content-type
text/html; charset=UTF-8
etag
14866779439905550351
x-content-type-options
nosniff
content-encoding
gzip
server
cafe
content-length
7273
x-xss-protection
0
cache-control
public, max-age=1209600
age
66898
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
post-4c71d5d921.js
www.giga.de/static-local/dist/assets/js/bundle/
7 KB
3 KB
Script
General
Full URL
https://www.giga.de/static-local/dist/assets/js/bundle/post-4c71d5d921.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/static-local/dist/assets/js/pre-173ae7134f.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.72.10 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx /
Resource Hash
0baa1b7da945fc3334d5683c8502c3da91529a8a35afaf0e591be34633adf609

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Tue, 20 Aug 2019 13:13:56 GMT
content-encoding
gzip
x-original-content-length
7084
server
nginx
status
200
etag
W/"5d5bf1bf-1bac"
vary
Accept-Encoding
access-control-allow-methods
GET
content-type
text/javascript
access-control-allow-origin
*
cache-control
max-age=31536000
content-length
2684
expires
Wed, 19 Aug 2020 13:13:56 GMT
giga-6b59f15322.js
www.giga.de/static-local/dist/assets/js/bundle/
31 KB
12 KB
Script
General
Full URL
https://www.giga.de/static-local/dist/assets/js/bundle/giga-6b59f15322.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/static-local/dist/assets/js/pre-173ae7134f.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.72.10 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx /
Resource Hash
f6c88d72ddbc86769c79cd60c2fbffac3679934dca3c2173dc8f919bcbbbfd64

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Tue, 09 Jul 2019 13:23:25 GMT
content-encoding
gzip
x-original-content-length
31346
server
nginx
status
200
etag
W/"5d2494e5-7a72"
vary
Accept-Encoding
access-control-allow-methods
GET
content-type
text/javascript
access-control-allow-origin
*
cache-control
max-age=31536000
content-length
11745
expires
Wed, 08 Jul 2020 13:23:25 GMT
smb-phone-plan-ef34ebe4f8.js
www.giga.de/static-local/dist/assets/js/vendor/@smb/phone-plan/
53 KB
18 KB
Script
General
Full URL
https://www.giga.de/static-local/dist/assets/js/vendor/@smb/phone-plan/smb-phone-plan-ef34ebe4f8.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/static-local/dist/assets/js/pre-173ae7134f.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.72.10 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx /
Resource Hash
2b62326a6aafef471d4775604603e2404453f26c5c29d9f97f946227d23f4544

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Wed, 11 Sep 2019 09:34:16 GMT
content-encoding
gzip
x-original-content-length
54000
server
nginx
status
200
etag
W/"5d78bf3c-d2f0"
vary
Accept-Encoding
access-control-allow-methods
GET
content-type
text/javascript
access-control-allow-origin
*
cache-control
max-age=31536000
content-length
18237
expires
Thu, 10 Sep 2020 09:34:16 GMT
beacon.min.js
beacon.s-onetag.com/
18 KB
6 KB
Script
General
Full URL
https://beacon.s-onetag.com/beacon.min.js
Requested by
Host: get.s-onetag.com
URL: https://get.s-onetag.com/1400a607-dbd1-49d7-9171-69ce05c71f5e/tag.min.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
2600:9000:20bb:5200:5:9a4c:9b00:93a1 , United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
662fa6bcdf71d8f92e29010d3e2e270e0071e5d19b1d14ce205654a78aa0a7a9

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

x-amz-version-id
dQ2IPgbwW_sArXQW0CBb3eN5W57SqoQ0
content-encoding
gzip
last-modified
Thu, 04 Apr 2019 09:35:05 GMT
server
AmazonS3
age
2172
date
Fri, 13 Sep 2019 08:01:00 GMT
vary
Accept-Encoding
x-cache
Hit from cloudfront
content-type
application/javascript
status
200
cache-control
max-age=3600
x-amz-cf-pop
FRA56
x-amz-cf-id
bEcVwZHBM57U3NPGSgw6fjO_FLTK3uNC7nC1DQDK22XNdAtH59x_VQ==
via
1.1 9f4017bef2e790d377578f1a7821f0ea.cloudfront.net (CloudFront)
fpi.js
ap.lijit.com/www/delivery/ Frame C71B
5 KB
3 KB
Script
General
Full URL
https://ap.lijit.com/www/delivery/fpi.js?z=600632&width=320&height=50&iv=sf
Requested by
Host: get.s-onetag.com
URL: https://get.s-onetag.com/1400a607-dbd1-49d7-9171-69ce05c71f5e/tag.min.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
72.251.249.9 Amsterdam, Netherlands, ASN29791 (VOXEL-DOT-NET - Internap Corporation, US),
Reverse DNS
Software
nginx /
Resource Hash
1d620a0f7dc002fca2d94bf2da586b9198b9fa94a3b53e9eeb069833081f119d

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Encoding
gzip
Server
nginx
ETag
W/"5d018e18-1534"
Vary
Accept-Encoding
Content-Type
text/javascript
Cache-Control
private, no-cache, no-store, must-revalidate, max-age=0
Transfer-Encoding
chunked
X-Sovrn-Pod
ap3ams1
Expires
Thu, 01 Jan 1970 00:00:01 GMT
article-rating-7143c629e5.js
www.giga.de/static-local/dist/assets/js/components/
306 B
534 B
Script
General
Full URL
https://www.giga.de/static-local/dist/assets/js/components/article-rating-7143c629e5.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/static-local/dist/assets/js/pre-173ae7134f.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.72.10 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx /
Resource Hash
0dbbaa3c57cc19372d94124069c8c05ed2fc89f0f8c5755f6cf2e4d46e61c603

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Thu, 28 Mar 2019 00:02:44 GMT
content-encoding
gzip
x-original-content-length
306
server
nginx
accept-language
bytes
status
200
etag
"5c9a4313-132"
vary
Accept-Encoding
access-control-allow-methods
GET
content-type
text/javascript
access-control-allow-origin
*
cache-control
max-age=31536000
content-length
234
expires
Fri, 27 Mar 2020 00:02:44 GMT
loader.js
c.nativendo.de/cdn/asset/js/
52 KB
17 KB
Script
General
Full URL
https://c.nativendo.de/cdn/asset/js/loader.js?v=1159
Requested by
Host: d.nativendo.de
URL: https://d.nativendo.de/cds/delivery/init
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2606:4700:20::6819:ad0d , United States, ASN13335 (CLOUDFLARENET - Cloudflare, Inc., US),
Reverse DNS
Software
cloudflare /
Resource Hash
20d9df1102585ece75fec7d91e5e34837cbe41fa16e0d7f29eab5142affd592f

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
via
1.1 google
cf-cache-status
HIT
age
236226
cf-polished
origSize=53181
status
200
content-encoding
br
alt-svc
clear
cf-bgj
minify
server
cloudflare
expect-ct
max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
vary
Accept-Encoding
content-type
application/javascript
cache-control
public, max-age=31536000
cf-ray
5158cc3839188c62-VIE
expires
Sat, 12 Sep 2020 08:37:11 GMT
videojs-02e1d46d.min.js
videos.giga.de/dist/js/embed/bundle/ Frame 4364
618 KB
206 KB
Script
General
Full URL
https://videos.giga.de/dist/js/embed/bundle/videojs-02e1d46d.min.js
Requested by
Host: videos.giga.de
URL: https://videos.giga.de/embed/176875?autoplay=0
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
109.71.25.30 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx/1.14.1 /
Resource Hash
5aeb54f6727af87431148b611f64c2d9608b22f49b71cd313f5e023b0f6ee642

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://videos.giga.de/embed/176875?autoplay=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
content-encoding
gzip
last-modified
Tue, 27 Aug 2019 09:58:54 GMT
server
nginx/1.14.1
etag
W/"5d64fede-9a957"
content-type
application/javascript
status
200
cache-control
max-age=315360000
expires
Thu, 31 Dec 2037 23:55:55 GMT
ima3.js
imasdk.googleapis.com/js/sdkloader/ Frame 4364
256 KB
87 KB
Script
General
Full URL
https://imasdk.googleapis.com/js/sdkloader/ima3.js
Requested by
Host: videos.giga.de
URL: https://videos.giga.de/embed/176875?autoplay=0
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:81a::200a Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
sffe /
Resource Hash
3756a2fb0bf85ff623355016a9fd82f089296029a7a6836049d30d3bc8a1dd56
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://videos.giga.de/embed/176875?autoplay=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
content-encoding
gzip
x-content-type-options
nosniff
server
sffe
vary
Accept-Encoding
content-type
text/javascript
status
200
cache-control
private, max-age=900, stale-while-revalidate=3600
accept-ranges
bytes
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
88468
x-xss-protection
0
expires
Fri, 13 Sep 2019 08:37:11 GMT
pubads_impl_2019091201.js
securepubads.g.doubleclick.net/gpt/
157 KB
58 KB
Script
General
Full URL
https://securepubads.g.doubleclick.net/gpt/pubads_impl_2019091201.js
Requested by
Host: www.googletagservices.com
URL: https://www.googletagservices.com/tag/js/gpt.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
216.58.206.2 Mountain View, United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
fra16s20-in-f2.1e100.net
Software
sffe /
Resource Hash
511c23178d504d371d22fb6899174f448db32523e9cacd2860306a2b3b8cc1f5
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
content-encoding
gzip
x-content-type-options
nosniff
last-modified
Thu, 12 Sep 2019 13:06:13 GMT
server
sffe
vary
Accept-Encoding
content-type
text/javascript
status
200
cache-control
private, immutable, max-age=31536000
accept-ranges
bytes
timing-allow-origin
*
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
58953
x-xss-protection
0
expires
Fri, 13 Sep 2019 08:37:11 GMT
submit
lb59.s400.meetrics.net/bb-mx/
43 B
291 B
Image
General
Full URL
https://lb59.s400.meetrics.net/bb-mx/submit?/J1/wBHAAA/whFfBo0F0wFz6BvvA33F3uBnpFnhFukElvB3lFihFwwFzvBwhF5wFhsFv0EpwFwzFvwEh5FwhFstBsvFnpFutBzvFtnEloF0zFt1EukFtzEvtBsvFlzF0tBpoFytBsvFnpFutBwyFviFslFtlFvBEfpyF+k2FmywAx5AtwA3tAx2AtxA16A14At2A35A2wAwtAyuAxxAytA5mEw0AxzAj0BL2wFBLl1FC/2xFMCylFx1FlzF0mF1sFszFjyFllFugBm1FssFzjFylFluFluFhiFslFkgB3pFukFv3Ff3FliFrpF0yFlxF1lFz0FhuFptFh0FpvFumFyhFtlFg3EpuFkvF3fF3lFirFp0FjhFujFlsFhuFptFh0FpvFumFyhFtlFg3EpuFkvF3fF3lFirFp0Fz0FvyFhnFlpFumFvgBjzFzfF3lFirFp0FOprFw6lCOqwFw6lClqwF23A52AwwALkmFBTkzFsFAAAAAAAZwSxSBPAAAAAAAAAOAAAAGAAAAAAAZwSxSBBRksFAQtjFVZm9SA
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
136.243.5.11 , Germany, ASN24940 (HETZNER-AS, DE),
Reverse DNS
h232.meetrics.de
Software
nginx /
Resource Hash
548f2d6f4d0d820c6c5ffbeffcbd7f0e73193e2932eefe542accc84762deec87

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Server
nginx
Content-Type
image/gif
Cache-control
no-cache,no-store,must-revalidate
Connection
keep-alive
Content-Length
43
Expires
Fri, 13 Sep 2019 08:37:10 GMT
data
lb59.s400.meetrics.net/
43 B
308 B
Image
General
Full URL
https://lb59.s400.meetrics.net/data?/J1/wCIAAATkzFARksFAQtjFVpJNSA
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
136.243.5.11 , Germany, ASN24940 (HETZNER-AS, DE),
Reverse DNS
h232.meetrics.de
Software
nginx /
Resource Hash
548f2d6f4d0d820c6c5ffbeffcbd7f0e73193e2932eefe542accc84762deec87

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Server
nginx
Transfer-Encoding
chunked
Content-Type
image/gif
Cache-control
no-cache,no-store,must-revalidate
Connection
keep-alive
Expires
Fri, 13-Sep-19 08:37:10 GMT
o.gif
go.giga-abs.de/
35 B
355 B
Image
General
Full URL
https://go.giga-abs.de/o.gif?__ir=&__is=1600_1200_24&__iu=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&__id=1568363831067&__it=-120&__ic=727391&__iq=d60947d71dc6b8363d958031bdb4812c&__ig=1
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.0
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.72.20 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
X/1.0 /
Resource Hash
2d865c4f2d21f06c2c74d99850d1a387bc4b2f42add0b96c6297d039b884d46f

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Last-Modified
Sat, 05 Sep 2009 08:36:16 GMT
Server
X/1.0
Content-Type
image/gif
Cache-Control
private, no-cache, no-store, proxy-revalidate, no-transform
Connection
keep-alive
Content-Length
35
Expires
Fri, 07 Sep 2012 08:36:16 GMT
videojs-f50f7a8d.css
videos.giga.de/dist/css/ Frame 4364
53 KB
15 KB
Stylesheet
General
Full URL
https://videos.giga.de/dist/css/videojs-f50f7a8d.css
Requested by
Host: videos.giga.de
URL: https://videos.giga.de/embed/176875?autoplay=0
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
109.71.25.30 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx/1.14.1 /
Resource Hash
c82374d4dce9d17bd18331dfb61f597894994e818486faefac7b1ada908c6813

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://videos.giga.de/embed/176875?autoplay=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
content-encoding
gzip
last-modified
Tue, 27 Aug 2019 09:58:54 GMT
server
nginx/1.14.1
etag
W/"5d64fede-d280"
content-type
text/css
status
200
cache-control
max-age=315360000
expires
Thu, 31 Dec 2037 23:55:55 GMT
play_button.svg
videos.giga.de/image/ Frame 4364
1015 B
1 KB
Image
General
Full URL
https://videos.giga.de/image/play_button.svg
Requested by
Host: videos.giga.de
URL: https://videos.giga.de/embed/176875?autoplay=0
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
109.71.25.30 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx/1.14.1 /
Resource Hash
d7a4d52f0d11ac4b648bd9199feae31ea441cd3cf0677529a4d2f0d20b7a5913

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://videos.giga.de/embed/176875?autoplay=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
last-modified
Thu, 04 Jul 2019 08:23:54 GMT
server
nginx/1.14.1
etag
"5d1db79a-3f7"
content-type
image/svg+xml
status
200
cache-control
max-age=7776000
accept-ranges
bytes
content-length
1015
expires
Thu, 12 Dec 2019 08:37:11 GMT
a
www.googletagmanager.com/
0
130 B
Image
General
Full URL
https://www.googletagmanager.com/a?id=GTM-KRW4T6J&cv=46&t=ol&g=209&p=ga&l=201&q=117&f=27&e=173&i=35&d=114&c=245&sr=0.050000&ps=0.02079243646442408&cb=1498951813
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:819::2008 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Google Tag Manager /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Security Headers
Name Value
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:11 GMT
server
Google Tag Manager
vary
*
content-type
image/gif
status
204
cache-control
no-cache, no-store, must-revalidate
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
0
x-xss-protection
0
expires
Fri, 01 Jan 1990 00:00:00 GMT
collect
www.google-analytics.com/r/
35 B
101 B
Image
General
Full URL
https://www.google-analytics.com/r/collect?v=1&_v=j79&aip=1&a=152266267&t=pageview&_s=1&dl=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ul=en-us&de=UTF-8&dt=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&sd=24-bit&sr=1600x1200&vp=1585x1200&je=0&_u=6GBAAEADQ~&jid=1818219464&gjid=1624740779&cid=130780938.1568363831&tid=UA-204785-4&_gid=55287414.1568363831&_r=1&cd1=Robert%20Schanze&cd5=2016-09-22T12%3A00%3A41%2B02%3A00&cg1=Howtos%2FTipps&cg2=2857946&cg3=09-2016&cd2=software&cd6=evergreen&cd8=website&cd3=2174540&cd15=website&cd17=not%20logged%20in&cd24=default&cd37=office-business%2C%20private-firmen-finanzen-office-business&cd42=legacy&z=451195333
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:825::200e Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Golfe2 /
Resource Hash
8337212354871836e6763a41e615916c89bac5b3f1f0adf60ba43c7c806e1015
Security Headers
Name Value
X-Content-Type-Options nosniff

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:11 GMT
x-content-type-options
nosniff
last-modified
Sun, 17 May 1998 03:00:00 GMT
server
Golfe2
status
200
content-type
image/gif
access-control-allow-origin
*
cache-control
no-cache, no-store, must-revalidate
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
35
expires
Fri, 01 Jan 1990 00:00:00 GMT
collect
www.google-analytics.com/
35 B
99 B
Image
General
Full URL
https://www.google-analytics.com/collect?v=1&_v=j79&aip=1&a=152266267&t=event&ni=1&_s=2&dl=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ul=en-us&de=UTF-8&dt=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&sd=24-bit&sr=1600x1200&vp=1585x1200&je=0&ec=Image%20Gallery&ea=embed&el=4282584&_u=6GBAAEADQ~&jid=&gjid=&cid=130780938.1568363831&tid=UA-204785-4&_gid=55287414.1568363831&cd1=Robert%20Schanze&cd5=2016-09-22T12%3A00%3A41%2B02%3A00&cg1=Howtos%2FTipps&cg2=2857946&cg3=09-2016&cd2=software&cd6=evergreen&cd8=website&cd3=2174540&cd15=website&cd17=not%20logged%20in&cd24=default&cd37=office-business%2C%20private-firmen-finanzen-office-business&cd42=legacy&cd21=auto&cm17=1&cd18=4282584&z=1519997322
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:825::200e Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Golfe2 /
Resource Hash
8337212354871836e6763a41e615916c89bac5b3f1f0adf60ba43c7c806e1015
Security Headers
Name Value
X-Content-Type-Options nosniff

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 23 Aug 2019 03:53:29 GMT
x-content-type-options
nosniff
last-modified
Sun, 17 May 1998 03:00:00 GMT
server
Golfe2
age
1831422
status
200
content-type
image/gif
access-control-allow-origin
*
cache-control
no-cache, no-store, must-revalidate
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
35
expires
Mon, 01 Jan 1990 00:00:00 GMT
ads
googleads.g.doubleclick.net/pagead/ Frame 33CC
0
0
Document
General
Full URL
https://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-3939813287030084&output=html&h=60&slotname=3875064957&adk=2210344608&adf=1301661270&w=468&lmt=1568363831&guci=1.2.0.0.2.2.0.0&format=468x60&url=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&flash=0&wgl=1&adsid=NT&dt=1568363830972&bpp=11&bdt=220&fdt=174&idt=174&shv=r20190911&cbv=r20190131&saldr=aa&abxe=1&correlator=415042108830&frm=20&pv=2&ga_vid=130780938.1568363831&ga_sid=1568363831&ga_hid=152266267&ga_fc=0&iag=0&icsg=52079358880&dssz=56&mdo=0&mso=0&u_tz=120&u_his=2&u_java=0&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_nplug=0&u_nmime=0&adx=318&ady=446&biw=1585&bih=1200&scr_x=0&scr_y=0&oid=3&rx=0&eae=0&fc=912&brdim=0%2C0%2C0%2C0%2C1600%2C0%2C1600%2C1200%2C1600%2C1200&vis=1&rsz=%7C%7CeE%7C&abl=CS&pfx=0&fu=16&bc=31&osw_key=2707494302&ifi=1&uci=1.41pk08angu7o&fsb=1&xpc=oKXc4IRjQl&p=https%3A//www.giga.de&dtd=188
Requested by
Host: pagead2.googlesyndication.com
URL: https://pagead2.googlesyndication.com/pagead/js/r20190911/r20190131/show_ads_impl.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:816::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
cafe /
Resource Hash
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

:method
GET
:authority
googleads.g.doubleclick.net
:scheme
https
:path
/pagead/ads?client=ca-pub-3939813287030084&output=html&h=60&slotname=3875064957&adk=2210344608&adf=1301661270&w=468&lmt=1568363831&guci=1.2.0.0.2.2.0.0&format=468x60&url=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&flash=0&wgl=1&adsid=NT&dt=1568363830972&bpp=11&bdt=220&fdt=174&idt=174&shv=r20190911&cbv=r20190131&saldr=aa&abxe=1&correlator=415042108830&frm=20&pv=2&ga_vid=130780938.1568363831&ga_sid=1568363831&ga_hid=152266267&ga_fc=0&iag=0&icsg=52079358880&dssz=56&mdo=0&mso=0&u_tz=120&u_his=2&u_java=0&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_nplug=0&u_nmime=0&adx=318&ady=446&biw=1585&bih=1200&scr_x=0&scr_y=0&oid=3&rx=0&eae=0&fc=912&brdim=0%2C0%2C0%2C0%2C1600%2C0%2C1600%2C1200%2C1600%2C1200&vis=1&rsz=%7C%7CeE%7C&abl=CS&pfx=0&fu=16&bc=31&osw_key=2707494302&ifi=1&uci=1.41pk08angu7o&fsb=1&xpc=oKXc4IRjQl&p=https%3A//www.giga.de&dtd=188
pragma
no-cache
cache-control
no-cache
upgrade-insecure-requests
1
user-agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
sec-fetch-mode
nested-navigate
accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
sec-fetch-site
cross-site
referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
accept-encoding
gzip, deflate, br
cookie
IDE=AHWqTUk7n4suaCyO-QanZD-Sg6FmAwqJX4PVa4t25XJT33IWjCcu_fn6UEwwZkkt
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

status
200
p3p
policyref="https://googleads.g.doubleclick.net/pagead/gcn_p3p_.xml", CP="CURa ADMa DEVa TAIo PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
timing-allow-origin
*
content-type
text/html; charset=UTF-8
x-content-type-options
nosniff
content-encoding
br
date
Fri, 13 Sep 2019 08:37:11 GMT
server
cafe
content-length
20793
x-xss-protection
0
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
osd.js
www.googletagservices.com/activeview/js/current/
76 KB
28 KB
Script
General
Full URL
https://www.googletagservices.com/activeview/js/current/osd.js?cb=%2Fr20100101
Requested by
Host: pagead2.googlesyndication.com
URL: https://pagead2.googlesyndication.com/pagead/js/r20190911/r20190131/show_ads_impl.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:824::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
sffe /
Resource Hash
52b9e38359d28b25df0896fd56c1fe0e2dfa20e178baab3822213b49a5cdec97
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
content-encoding
gzip
x-content-type-options
nosniff
server
sffe
etag
"1568027754411643"
vary
Accept-Encoding
content-type
text/javascript
status
200
cache-control
private, max-age=3000
accept-ranges
bytes
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
content-length
28408
x-xss-protection
0
expires
Fri, 13 Sep 2019 08:37:11 GMT
dkuim.js
dkuim.de/api/js/2/
465 KB
151 KB
Script
General
Full URL
https://dkuim.de/api/js/2/dkuim.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/static-local/dist/assets/js/pre-173ae7134f.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.65.130 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx /
Resource Hash
73032accf72bdc46460f8cf7395082094db4444d5e41e7e9b2a2617b38b88847

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Encoding
gzip
Last-Modified
Tue, 11 Dec 2018 15:40:09 GMT
Server
nginx
ETag
W/"5c0fda59-74548"
Transfer-Encoding
chunked
Content-Type
application/javascript
bid
c.amazon-adsystem.com/e/dtb/
122 B
503 B
XHR
General
Full URL
https://c.amazon-adsystem.com/e/dtb/bid?src=3301&u=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&pid=9143160348451568363830852&cb=3010321037781568363831202&ws=1600x1200&v=7.36.00&t=1000&slots=%5B%7B%22sd%22%3A%22banner%22%2C%22s%22%3A%5B%22970x250%22%2C%22970x90%22%2C%22800x250%22%2C%22728x90%22%5D%7D%2C%7B%22sd%22%3A%22sky%22%2C%22s%22%3A%5B%22300x600%22%2C%22160x600%22%2C%22200x600%22%2C%22120x600%22%5D%7D%2C%7B%22sd%22%3A%22rectangle%22%2C%22s%22%3A%5B%22300x250%22%5D%7D%5D&pj=%7B%22apse%22%3A%7B%22chunkRequests%22%3Afalse%2C%22shouldCFRoute%22%3Atrue%2C%22shouldSampleLatency%22%3Afalse%7D%7D&cfgv=0&gdprl=%7B%22status%22%3A%22no-cmp%22%7D
Requested by
Host: c.amazon-adsystem.com
URL: https://c.amazon-adsystem.com/aax2/apstag.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
143.204.211.231 Seattle, United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
server-143-204-211-231.fra53.r.cloudfront.net
Software
Server /
Resource Hash
bd18a6f807406f321e7ee81e8e4e19890ebc33df1cd136d46b22d894f0144f6e

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
content-encoding
gzip
server
Server
x-amz-cf-pop
FRA53-C1
status
200
vary
Accept-Encoding,User-Agent
x-cache
Miss from cloudfront
content-type
text/javascript;charset=UTF-8
access-control-allow-origin
https://www.giga.de
access-control-allow-credentials
true
timing-allow-origin
*
content-length
130
via
1.1 3f6fbf009bb5cf969f92ba2e59576614.cloudfront.net (CloudFront)
x-amz-cf-id
_m4c4YM5ush2ByiWs8btNY79cZzXD1bDROydo6p_-HuFJmJ9zmAz2w==
cygnus
as-sec.casalemedia.com/
24 B
900 B
XHR
General
Full URL
https://as-sec.casalemedia.com/cygnus?s=254711&v=7.2&r=%7B%22id%22%3A%2212d554f2258211%22%2C%22imp%22%3A%5B%7B%22id%22%3A%2221eed34d97d9e6%22%2C%22banner%22%3A%7B%22w%22%3A300%2C%22h%22%3A250%2C%22topframe%22%3A1%7D%2C%22ext%22%3A%7B%22siteID%22%3A%22254711%22%2C%22sid%22%3A%221%22%7D%7D%5D%2C%22site%22%3A%7B%22page%22%3A%22https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F%22%7D%2C%22ext%22%3A%7B%22source%22%3A%22prebid%22%7D%7D&ac=j&sd=1&
Requested by
Host: cdn-a.yieldlove.com
URL: https://cdn-a.yieldlove.com/yieldlove-bidder-stroeer.js?giga.de
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.234.21 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-234-21.deploy.static.akamaitechnologies.com
Software
Apache /
Resource Hash
a2c366aa8391d21ebef20168baf46a06dda027007d0745cf85741d7318295654

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-Type
text/plain

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Encoding
gzip
Server
Apache
Vary
Accept-Encoding
P3P
policyref="/w3c/p3p.xml", CP="NOI DSP COR DEVa TAIa OUR BUS UNI"
Access-Control-Allow-Origin
https://www.giga.de
Cache-Control
max-age=0, no-cache, no-store
Access-Control-Allow-Credentials
true
Connection
keep-alive
Content-Type
application/json
Content-Length
44
Expires
Fri, 13 Sep 2019 08:37:11 GMT
ADTECH;apid=1Aae0df374-d601-11e9-b84b-0252ef7879ac;cfp=1;rndc=1568363830;v=2;cmd=bid;cors=yes;alias=giga.de_d_300x250_1;misc=1568363831211
adserver.adtech.de/pubapi/3.0/4538.1/6658212/0/0/
Redirect Chain
  • https://adserver.adtech.de/pubapi/3.0/4538.1/6658212/0/0/ADTECH;v=2;cmd=bid;cors=yes;alias=giga.de_d_300x250_1;misc=1568363831211;
  • https://adserver.adtech.de/pubapi/3.0/4538.1/6658212/0/0/ADTECH;cfp=1;rndc=1568363831;v=2;cmd=bid;cors=yes;alias=giga.de_d_300x250_1;misc=1568363831211
  • https://adserver-eu.adtech.advertising.com/pubapi/3.0/4538.1/6658212/0/0/ADTECH;rdhost=adserver.adtech.de;cfp=1;rndc=1568363831;v=2;cmd=bid;cors=yes;alias=giga.de_d_300x250_1;misc=1568363831211
  • https://adserver-eu.adtech.advertising.com/pubapi/3.0/4538.1/6658212/0/0/ADTECH;rdhost=adserver.adtech.de;cfp=2;rndc=1568363831;v=2;cmd=bid;cors=yes;alias=giga.de_d_300x250_1;misc=1568363831211
  • https://adserver.adtech.de/pubapi/3.0/4538.1/6658212/0/0/ADTECH;apid=1Aae0df374-d601-11e9-b84b-0252ef7879ac;cfp=1;rndc=1568363830;v=2;cmd=bid;cors=yes;alias=giga.de_d_300x250_1;misc=1568363831211
47 B
267 B
XHR
General
Full URL
https://adserver.adtech.de/pubapi/3.0/4538.1/6658212/0/0/ADTECH;apid=1Aae0df374-d601-11e9-b84b-0252ef7879ac;cfp=1;rndc=1568363830;v=2;cmd=bid;cors=yes;alias=giga.de_d_300x250_1;misc=1568363831211
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_256_GCM
Server
152.199.21.32 , United States, ASN15133 (EDGECAST - MCI Communications Services, Inc. d/b/a Verizon Business, US),
Reverse DNS
Software
Adtech Adserver /
Resource Hash
662831879bdbc4f42424d6f14598e0b8e9a5fe8712514ee52143f3b1ae0d4b27

Request headers

Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:11 GMT
server
Adtech Adserver
status
200
access-control-allow-methods
POST,GET,HEAD,OPTIONS
p3p
CP="NOI DSP DEVa OUR BUS UNI COM NAV INT"
access-control-allow-origin
null
cache-control
no-store, no-cache
access-control-allow-credentials
true
content-type
application/json
content-length
47
expires
Mon, 15 Jun 1998 00:00:00 GMT

Redirect headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:11 GMT
server
nginx
status
302
location
https://adserver.adtech.de/pubapi/3.0/4538.1/6658212/0/0/ADTECH;apid=1Aae0df374-d601-11e9-b84b-0252ef7879ac;cfp=1;rndc=1568363830;v=2;cmd=bid;cors=yes;alias=giga.de_d_300x250_1;misc=1568363831211
access-control-allow-methods
POST,GET,HEAD,OPTIONS
p3p
CP="NOI DSP DEVa OUR BUS UNI COM NAV INT"
access-control-allow-origin
null
cache-control
no-store, no-cache
access-control-allow-credentials
true
content-length
0
expires
Mon, 15 Jun 1998 00:00:00 GMT
ADTECH;apid=1Aae0e400e-d601-11e9-ae0d-02599a0636ac;cfp=1;rndc=1568363830;v=2;cmd=bid;cors=yes;alias=giga.de_d_970x250_2;misc=1568363831211
adserver.adtech.de/pubapi/3.0/4538.1/6669693/0/0/
Redirect Chain
  • https://adserver.adtech.de/pubapi/3.0/4538.1/6669693/0/0/ADTECH;v=2;cmd=bid;cors=yes;alias=giga.de_d_970x250_2;misc=1568363831211;
  • https://adserver.adtech.de/pubapi/3.0/4538.1/6669693/0/0/ADTECH;cfp=1;rndc=1568363831;v=2;cmd=bid;cors=yes;alias=giga.de_d_970x250_2;misc=1568363831211
  • https://adserver-eu.adtech.advertising.com/pubapi/3.0/4538.1/6669693/0/0/ADTECH;rdhost=adserver.adtech.de;cfp=1;rndc=1568363831;v=2;cmd=bid;cors=yes;alias=giga.de_d_970x250_2;misc=1568363831211
  • https://adserver-eu.adtech.advertising.com/pubapi/3.0/4538.1/6669693/0/0/ADTECH;rdhost=adserver.adtech.de;cfp=2;rndc=1568363831;v=2;cmd=bid;cors=yes;alias=giga.de_d_970x250_2;misc=1568363831211
  • https://adserver.adtech.de/pubapi/3.0/4538.1/6669693/0/0/ADTECH;apid=1Aae0e400e-d601-11e9-ae0d-02599a0636ac;cfp=1;rndc=1568363830;v=2;cmd=bid;cors=yes;alias=giga.de_d_970x250_2;misc=1568363831211
48 B
241 B
XHR
General
Full URL
https://adserver.adtech.de/pubapi/3.0/4538.1/6669693/0/0/ADTECH;apid=1Aae0e400e-d601-11e9-ae0d-02599a0636ac;cfp=1;rndc=1568363830;v=2;cmd=bid;cors=yes;alias=giga.de_d_970x250_2;misc=1568363831211
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_256_GCM
Server
152.199.21.32 , United States, ASN15133 (EDGECAST - MCI Communications Services, Inc. d/b/a Verizon Business, US),
Reverse DNS
Software
Adtech Adserver /
Resource Hash
3b23054f385ff046b52da49f09543ca2a464820efb8f01a8cbbf0d999eaa4460

Request headers

Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:11 GMT
server
Adtech Adserver
status
200
access-control-allow-methods
POST,GET,HEAD,OPTIONS
p3p
CP="NOI DSP DEVa OUR BUS UNI COM NAV INT"
access-control-allow-origin
null
cache-control
no-store, no-cache
access-control-allow-credentials
true
content-type
application/json
content-length
48
expires
Mon, 15 Jun 1998 00:00:00 GMT

Redirect headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:11 GMT
server
nginx
status
302
location
https://adserver.adtech.de/pubapi/3.0/4538.1/6669693/0/0/ADTECH;apid=1Aae0e400e-d601-11e9-ae0d-02599a0636ac;cfp=1;rndc=1568363830;v=2;cmd=bid;cors=yes;alias=giga.de_d_970x250_2;misc=1568363831211
access-control-allow-methods
POST,GET,HEAD,OPTIONS
p3p
CP="NOI DSP DEVa OUR BUS UNI COM NAV INT"
access-control-allow-origin
null
cache-control
no-store, no-cache
access-control-allow-credentials
true
content-length
0
expires
Mon, 15 Jun 1998 00:00:00 GMT
fastlane.json
fastlane.rubiconproject.com/a/api/
240 B
2 KB
XHR
General
Full URL
https://fastlane.rubiconproject.com/a/api/fastlane.json?account_id=16728&site_id=156224&zone_id=750960&size_id=15&p_pos=unknown&rf=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&tk_flint=pbjs_lite_v2.24.0&x_source.tid=1f6e2c9c-5e78-438b-9c1d-6f12845f4a0d&p_screen_res=1600x1200&rp_floor=0.01&rp_secure=1&slots=1&rand=0.47580945317707557
Requested by
Host: cdn-a.yieldlove.com
URL: https://cdn-a.yieldlove.com/yieldlove-bidder-stroeer.js?giga.de
Protocol
HTTP/1.1
Security
TLS 1.2, RSA, AES_128_GCM
Server
69.173.144.142 Frankfurt am Main, Germany, ASN26667 (RUBICONPROJECT - The Rubicon Project, Inc., US),
Reverse DNS
Software
RAS 2.4 /
Resource Hash
e3636151f0d2d72818ea36045a5c802a701eeb257644465d2a4ad70a6305c939

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-Type
text/plain

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Server
RAS 2.4
Vary
Accept-Encoding
P3P
CP="NOI CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT"
Access-Control-Allow-Origin
https://www.giga.de
Cache-Control
no-cache, no-store, max-age=0, must-revalidate
Access-Control-Allow-Credentials
true
Connection
Keep-Alive
Content-Type
application/json
Keep-Alive
timeout=5, max=179
Content-Length
240
Expires
Wed, 17 Sep 1975 21:32:10 GMT
fastlane.json
fastlane.rubiconproject.com/a/api/
241 B
2 KB
XHR
General
Full URL
https://fastlane.rubiconproject.com/a/api/fastlane.json?account_id=16728&site_id=156224&zone_id=1266838&size_id=9&alt_size_ids=8%2C10%2C126&p_pos=unknown&rf=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&tk_flint=pbjs_lite_v2.24.0&x_source.tid=318ac019-0135-4751-86a7-1ce5ac26d0b0&p_screen_res=1600x1200&rp_floor=0.01&rp_secure=1&slots=1&rand=0.36526899813146785
Requested by
Host: cdn-a.yieldlove.com
URL: https://cdn-a.yieldlove.com/yieldlove-bidder-stroeer.js?giga.de
Protocol
HTTP/1.1
Security
TLS 1.2, RSA, AES_128_GCM
Server
69.173.144.142 Frankfurt am Main, Germany, ASN26667 (RUBICONPROJECT - The Rubicon Project, Inc., US),
Reverse DNS
Software
RAS 2.4 /
Resource Hash
ae71e7fca9bdcd8f67f80101dfb15e325b9f38c43e46de5c28b268268c8feced

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-Type
text/plain

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Server
RAS 2.4
Vary
Accept-Encoding
P3P
CP="NOI CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT"
Access-Control-Allow-Origin
https://www.giga.de
Cache-Control
no-cache, no-store, max-age=0, must-revalidate
Access-Control-Allow-Credentials
true
Connection
Keep-Alive
Content-Type
application/json
Keep-Alive
timeout=5, max=198
Content-Length
241
Expires
Wed, 17 Sep 1975 21:32:10 GMT
fastlane.json
fastlane.rubiconproject.com/a/api/
241 B
2 KB
XHR
General
Full URL
https://fastlane.rubiconproject.com/a/api/fastlane.json?account_id=16728&site_id=156224&zone_id=1408756&size_id=2&alt_size_ids=55%2C57%2C125&p_pos=unknown&rf=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&tk_flint=pbjs_lite_v2.24.0&x_source.tid=dbb92e08-4259-47b7-b7d3-24f67730f69d&p_screen_res=1600x1200&rp_floor=0.01&rp_secure=1&slots=1&rand=0.8570532794895258
Requested by
Host: cdn-a.yieldlove.com
URL: https://cdn-a.yieldlove.com/yieldlove-bidder-stroeer.js?giga.de
Protocol
HTTP/1.1
Security
TLS 1.2, RSA, AES_128_GCM
Server
69.173.144.142 Frankfurt am Main, Germany, ASN26667 (RUBICONPROJECT - The Rubicon Project, Inc., US),
Reverse DNS
Software
RAS 2.4 /
Resource Hash
1cffe994afb339e309c26d549a5672bc88ebb4d0b3389f970be98bf6049f08ed

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-Type
text/plain

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Server
RAS 2.4
Vary
Accept-Encoding
P3P
CP="NOI CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT"
Access-Control-Allow-Origin
https://www.giga.de
Cache-Control
no-cache, no-store, max-age=0, must-revalidate
Access-Control-Allow-Credentials
true
Connection
Keep-Alive
Content-Type
application/json
Keep-Alive
timeout=5, max=467
Content-Length
241
Expires
Wed, 17 Sep 1975 21:32:10 GMT
translator
hbopenbid.pubmatic.com/
0
113 B
XHR
General
Full URL
https://hbopenbid.pubmatic.com/translator?source=prebid-client
Requested by
Host: cdn-a.yieldlove.com
URL: https://cdn-a.yieldlove.com/yieldlove-bidder-stroeer.js?giga.de
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
185.64.189.112 , United Kingdom, ASN62713 (AS-PUBMATIC - PubMatic, Inc., US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-Type
text/plain

Response headers

status
204
date
Fri, 13 Sep 2019 08:37:11 GMT
cache-control
no-cache, no-store, must-revalidate
access-control-allow-credentials
true
access-control-allow-origin
https://www.giga.de
arj
yieldlove-d.openx.net/w/1.0/
4 KB
5 KB
XHR
General
Full URL
https://yieldlove-d.openx.net/w/1.0/arj?ju=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&jr=&ch=UTF-8&res=1600x1200x24&ifr=false&tz=-120&tws=1600x1200&be=1&bc=hb_pb_2.1.7&dddid=1f6e2c9c-5e78-438b-9c1d-6f12845f4a0d%2C318ac019-0135-4751-86a7-1ce5ac26d0b0%2Cdbb92e08-4259-47b7-b7d3-24f67730f69d&nocache=1568363831216&aus=300x250%7C300x600%2C160x600%2C200x600%2C120x600%7C970x250%2C970x90%2C800x250%2C728x90&divIds=rectangle%2Csky%2Cbanner&auid=539390940%2C540714782%2C540847469&
Requested by
Host: cdn-a.yieldlove.com
URL: https://cdn-a.yieldlove.com/yieldlove-bidder-stroeer.js?giga.de
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
34.95.120.147 , United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
147.120.95.34.bc.googleusercontent.com
Software
OXGW/16.161.0 /
Resource Hash
92f513cad9ff11510e5454cba0bc05fa7a90cacd8b39f9fb0fd7838605559be5

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-Type
text/plain

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:11 GMT
via
1.1 google
server
OXGW/16.161.0
status
200
vary
Accept
p3p
CP="CUR ADM OUR NOR STA NID"
access-control-allow-origin
https://www.giga.de
cache-control
private, max-age=0, no-cache
access-control-allow-credentials
true
content-type
application/json
alt-svc
clear
content-length
4413
expires
Mon, 26 Jul 1997 05:00:00 GMT
prebid
ib.adnxs.com/ut/v3/
1 KB
2 KB
XHR
General
Full URL
https://ib.adnxs.com/ut/v3/prebid
Requested by
Host: cdn-a.yieldlove.com
URL: https://cdn-a.yieldlove.com/yieldlove-bidder-stroeer.js?giga.de
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_ECDSA, AES_128_GCM
Server
37.252.173.27 , Ascension Island, ASN29990 (ASN-APPNEXUS - AppNexus, Inc, US),
Reverse DNS
539.bm-nginx-loadbalancer.mgmt.fra1.adnexus.net
Software
nginx/1.13.4 /
Resource Hash
0cd5de0454fa0c99b9f91a54e6768882973d31ff6f28871f09a882c35f69f74c
Security Headers
Name Value
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-Type
text/plain

Response headers

Date
Fri, 13 Sep 2019 08:37:13 GMT
Content-Encoding
gzip
Transfer-Encoding
chunked
P3P
policyref="http://cdn.adnxs.com/w3c/policy/p3p.xml", CP="NOI DSP COR ADM PSAo PSDo OURo SAMo UNRo OTRo BUS COM NAV DEM STA PRE"
Connection
keep-alive
X-Proxy-Origin
144.76.109.30; 144.76.109.30; 539.bm-nginx-loadbalancer.mgmt.fra1; *.adnxs.com; 37.252.172.239:80
X-XSS-Protection
0
Pragma
no-cache
AN-X-Request-Uuid
95fd6367-712d-4d02-bb6e-3f3415d02822
Server
nginx/1.13.4
Vary
Accept-Encoding
Content-Type
application/json; charset=utf-8
Access-Control-Allow-Origin
https://www.giga.de
Cache-Control
no-store, no-cache, private
Access-Control-Allow-Credentials
true
Expires
Sat, 15 Nov 2008 16:00:00 GMT
/
adx.adform.net/adx/
10 B
405 B
XHR
General
Full URL
https://adx.adform.net/adx/?rp=4&bWlkPTY2NjQ0MyZ0cmFuc2FjdGlvbklkPTFmNmUyYzljLTVlNzgtNDM4Yi05YzFkLTZmMTI4NDVmNGEwZA%3D%3D&bWlkPTcwNjE1MSZ0cmFuc2FjdGlvbklkPWRiYjkyZTA4LTQyNTktNDdiNy1iN2QzLTI0ZjY3NzMwZjY5ZA%3D%3D&pt=gross&stid=a7fc88b5-3fff-4b40-a390-7776267ec22d&fd=1
Requested by
Host: cdn-a.yieldlove.com
URL: https://cdn-a.yieldlove.com/yieldlove-bidder-stroeer.js?giga.de
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
37.157.6.253 , Denmark, ASN198622 (ADFORM, DK),
Reverse DNS
s1.adform.net
Software
nginx /
Resource Hash
78f4a3114e3738eab1ffd31cbd3611435034197ecc40456f3ed43f82af4393d3

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-Type
text/plain

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:11 GMT
server
nginx
status
200
access-control-max-age
86400
access-control-allow-methods
GET, POST
p3p
CP="NOI DSP COR NID CURa ADMa DEVa TAIa PSAa PSDa OUR LEG NAV INT"
access-control-allow-origin
https://www.giga.de
cache-control
no-cache, no-store, must-revalidate, no-transform
access-control-allow-credentials
true
content-type
application/json; charset=utf-8
access-control-allow-headers
Content-Type, Cache-Control, Accept-Encoding, X-Requested-With
content-length
10
expires
-1
lOyU-OCKINPe2.gif
www.giga.de/imagez/adbanner2/
71 B
474 B
Image
General
Full URL
https://www.giga.de/imagez/adbanner2/lOyU-OCKINPe2.gif
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.72.10 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx / TSAdServer
Resource Hash
790407d643dfe21ecd773a44007cde3980d7a5eabd829ad1f06c2738b72fd1a2

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
server
nginx
x-powered-by
TSAdServer
etag
W/"47-ZTbJFDBdJipLHHeF7Zqsus3A1Hc"
content-type
image/png
status
200
cache-control
no-cache, no-store, must-revalidate, no-cache="set-cookie"
x-robots-tag
noindex, nofollow
content-length
71
Cookie set iu3
aax-eu.amazon-adsystem.com/s/ Frame 4EB5
Redirect Chain
  • https://aax-eu.amazon-adsystem.com/s/iu3?cm3ppd=1&d=dtb-pub&csif=t&dl=ox
  • https://aax-eu.amazon-adsystem.com/s/iu3?cm3ppd=1&d=dtb-pub&csif=t&dl=ox&dcc=t
0
0
Document
General
Full URL
https://aax-eu.amazon-adsystem.com/s/iu3?cm3ppd=1&d=dtb-pub&csif=t&dl=ox&dcc=t
Requested by
Host: c.amazon-adsystem.com
URL: https://c.amazon-adsystem.com/aax2/apstag.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
52.94.218.7 Dublin, Ireland, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
Software
Server /
Resource Hash

Request headers

Host
aax-eu.amazon-adsystem.com
Connection
keep-alive
Pragma
no-cache
Cache-Control
no-cache
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site
cross-site
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Accept-Encoding
gzip, deflate, br
Cookie
ad-id=A0d0V9O5gUoMiznClrdGOJ8|t
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

Server
Server
Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Type
text/html;charset=ISO-8859-1
Content-Length
181
Connection
keep-alive
Cache-Control
max-age=0, no-cache, no-store, private, must-revalidate, s-maxage=0
Pragma
no-cache
Expires
Thu, 01 Jan 1970 00:00:00 GMT
p3p
policyref="https://www.amazon.com/w3c/p3p.xml", CP="PSAo PSDo OUR SAM OTR DSP COR"
Set-Cookie
ad-id=A0d0V9O5gUoMiznClrdGOJ8; Domain=.amazon-adsystem.com; Expires=Wed, 01-Apr-2020 08:37:11 GMT; Path=/; HttpOnly ad-privacy=0; Domain=.amazon-adsystem.com; Expires=Wed, 01-Apr-2020 08:37:11 GMT; Path=/; HttpOnly
Vary
Accept-Encoding,User-Agent
Content-Encoding
gzip

Redirect headers

Server
Server
Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Length
0
Connection
keep-alive
Cache-Control
max-age=0, no-cache, no-store, private, must-revalidate, s-maxage=0
Pragma
no-cache
Expires
Thu, 01 Jan 1970 00:00:00 GMT
p3p
policyref="https://www.amazon.com/w3c/p3p.xml", CP="PSAo PSDo OUR SAM OTR DSP COR"
Location
https://aax-eu.amazon-adsystem.com/s/iu3?cm3ppd=1&d=dtb-pub&csif=t&dl=ox&dcc=t
Set-Cookie
ad-id=A0d0V9O5gUoMiznClrdGOJ8|t; Domain=.amazon-adsystem.com; Expires=Wed, 01-Apr-2020 08:37:11 GMT; Path=/; HttpOnly
Vary
User-Agent
platform.js
apis.google.com/js/
43 KB
17 KB
Script
General
Full URL
https://apis.google.com/js/platform.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/static-local/dist/assets/js/pre-173ae7134f.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:815::200e Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
ESF /
Resource Hash
1a560979c35508f894818e1f68012f0a56d6a6001c5dfb73ffeda325fcbafbeb
Security Headers
Name Value
Strict-Transport-Security max-age=31536000
X-Content-Type-Options nosniff
X-Frame-Options SAMEORIGIN
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
content-encoding
gzip
x-content-type-options
nosniff
content-security-policy-report-only
script-src 'report-sample' 'nonce-67CF3gDZ65lA4btCwIs3MA' 'unsafe-inline' 'strict-dynamic' https: http: 'unsafe-eval';object-src 'none';base-uri 'self';report-uri /_/cspreport
p3p
CP="This is not a P3P policy! See g.co/p3phelp for more info."
status
200
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
x-xss-protection
0
x-ua-compatible
IE=edge, chrome=1
server
ESF
x-frame-options
SAMEORIGIN
etag
"ce8f41226b511978bd0b369f1ffcc6fc"
strict-transport-security
max-age=31536000
content-type
application/javascript; charset=utf-8
access-control-allow-origin
*
cache-control
private, max-age=1800, stale-while-revalidate=1800
timing-allow-origin
*
expires
Fri, 13 Sep 2019 08:37:11 GMT
loader.js
cdn.taboola.com/libtrc/stroeer-smb-giga/
113 KB
22 KB
Script
General
Full URL
https://cdn.taboola.com/libtrc/stroeer-smb-giga/loader.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/static-local/dist/assets/js/bundle/post-4c71d5d921.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.14.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
7600c92bf8d83aff07aa53256b691bb54818eaa7762c83afa7e43323df0b492a

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

x-amz-version-id
O7fFZPG7KuPva68AduJ5b5ER.eZqSwQq
content-encoding
gzip
etag
"9f8850ae063b479ae9fafd0a78494644"
age
103
x-cache
HIT
status
200
content-length
22070
x-amz-id-2
ELpFDzNu6tH7tYabC17TQ1kiLc6+R9kmkwotiAibc6PXQnwSVdUdfo60SSrOe56kIMJjUUwhNUs=
x-served-by
cache-fra19120-FRA
last-modified
Wed, 11 Sep 2019 14:21:15 GMT
server
AmazonS3
x-timer
S1568363831.262191,VS0,VE0
date
Fri, 13 Sep 2019 08:37:11 GMT
vary
Accept-Encoding
x-amz-request-id
C551BB1220A6EA76
via
1.1 varnish
cache-control
private,max-age=14401
accept-ranges
bytes
content-type
application/javascript; charset=utf-8
abp
12
x-cache-hits
5
collect
www.google-analytics.com/
35 B
93 B
Image
General
Full URL
https://www.google-analytics.com/collect?v=1&_v=j79&aip=1&a=152266267&t=event&ni=1&_s=3&dl=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ul=en-us&de=UTF-8&dt=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&sd=24-bit&sr=1600x1200&vp=1585x1200&je=0&ec=Affiliate&ea=embed&el=deutsche%20Paypal-Webseite&_u=6GBAAEADQ~&jid=&gjid=&cid=130780938.1568363831&tid=UA-204785-4&_gid=55287414.1568363831&cd1=Robert%20Schanze&cd5=2016-09-22T12%3A00%3A41%2B02%3A00&cg1=Howtos%2FTipps&cg2=2857946&cg3=09-2016&cd2=software&cd6=evergreen&cd8=website&cd3=2174540&cd15=website&cd17=not%20logged%20in&cd24=default&cd37=office-business%2C%20private-firmen-finanzen-office-business&cd42=legacy&cd39=Text-link&cd40=https%3A%2F%2Fwww.paypal.com%2Fde%2Fcgi-bin%2Fwebscr%3Fcmd%3D_login-run&cd41=Content%201&cm75=1&z=874416392
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:825::200e Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Golfe2 /
Resource Hash
8337212354871836e6763a41e615916c89bac5b3f1f0adf60ba43c7c806e1015
Security Headers
Name Value
X-Content-Type-Options nosniff

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 23 Aug 2019 03:53:29 GMT
x-content-type-options
nosniff
last-modified
Sun, 17 May 1998 03:00:00 GMT
server
Golfe2
age
1831422
status
200
content-type
image/gif
access-control-allow-origin
*
cache-control
no-cache, no-store, must-revalidate
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
35
expires
Mon, 01 Jan 1990 00:00:00 GMT
collect
www.google-analytics.com/
35 B
93 B
Image
General
Full URL
https://www.google-analytics.com/collect?v=1&_v=j79&aip=1&a=152266267&t=event&ni=1&_s=4&dl=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ul=en-us&de=UTF-8&dt=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&sd=24-bit&sr=1600x1200&vp=1585x1200&je=0&ec=Affiliate&ea=embed&el=Paypal-Login-Seite&_u=6GBAAEADQ~&jid=&gjid=&cid=130780938.1568363831&tid=UA-204785-4&_gid=55287414.1568363831&cd1=Robert%20Schanze&cd5=2016-09-22T12%3A00%3A41%2B02%3A00&cg1=Howtos%2FTipps&cg2=2857946&cg3=09-2016&cd2=software&cd6=evergreen&cd8=website&cd3=2174540&cd15=website&cd17=not%20logged%20in&cd24=default&cd37=office-business%2C%20private-firmen-finanzen-office-business&cd42=legacy&cd39=Text-link&cd40=https%3A%2F%2Fwww.paypal.com%2Fde%2Fcgi-bin%2Fwebscr%3Fcmd%3D_login-run&cd41=Content%202&cm75=1&z=525889190
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:825::200e Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Golfe2 /
Resource Hash
8337212354871836e6763a41e615916c89bac5b3f1f0adf60ba43c7c806e1015
Security Headers
Name Value
X-Content-Type-Options nosniff

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 23 Aug 2019 03:53:29 GMT
x-content-type-options
nosniff
last-modified
Sun, 17 May 1998 03:00:00 GMT
server
Golfe2
age
1831422
status
200
content-type
image/gif
access-control-allow-origin
*
cache-control
no-cache, no-store, must-revalidate
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
35
expires
Mon, 01 Jan 1990 00:00:00 GMT
collect
www.google-analytics.com/
35 B
93 B
Image
General
Full URL
https://www.google-analytics.com/collect?v=1&_v=j79&aip=1&a=152266267&t=event&ni=1&_s=5&dl=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ul=en-us&de=UTF-8&dt=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&sd=24-bit&sr=1600x1200&vp=1585x1200&je=0&ec=Affiliate&ea=embed&el=Login-Seite&_u=6GBAAEADQ~&jid=&gjid=&cid=130780938.1568363831&tid=UA-204785-4&_gid=55287414.1568363831&cd1=Robert%20Schanze&cd5=2016-09-22T12%3A00%3A41%2B02%3A00&cg1=Howtos%2FTipps&cg2=2857946&cg3=09-2016&cd2=software&cd6=evergreen&cd8=website&cd3=2174540&cd15=website&cd17=not%20logged%20in&cd24=default&cd37=office-business%2C%20private-firmen-finanzen-office-business&cd42=legacy&cd39=Text-link&cd40=https%3A%2F%2Fwww.paypal.com%2Fsignin%2F%3Fcountry.x%3Dde%26locale.x%3Dde_de&cd41=Content%203&cm75=1&z=1549785715
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:825::200e Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Golfe2 /
Resource Hash
8337212354871836e6763a41e615916c89bac5b3f1f0adf60ba43c7c806e1015
Security Headers
Name Value
X-Content-Type-Options nosniff

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 23 Aug 2019 03:53:29 GMT
x-content-type-options
nosniff
last-modified
Sun, 17 May 1998 03:00:00 GMT
server
Golfe2
age
1831422
status
200
content-type
image/gif
access-control-allow-origin
*
cache-control
no-cache, no-store, must-revalidate
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
35
expires
Mon, 01 Jan 1990 00:00:00 GMT
collect
www.google-analytics.com/
35 B
93 B
Image
General
Full URL
https://www.google-analytics.com/collect?v=1&_v=j79&aip=1&a=152266267&t=event&ni=1&_s=6&dl=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ul=en-us&de=UTF-8&dt=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&sd=24-bit&sr=1600x1200&vp=1585x1200&je=0&ec=Affiliate&ea=embed&el=Hier%20loggt%20ihr%20euch%20in%20Paypal%20ein.&_u=6GBAAEADQ~&jid=&gjid=&cid=130780938.1568363831&tid=UA-204785-4&_gid=55287414.1568363831&cd1=Robert%20Schanze&cd5=2016-09-22T12%3A00%3A41%2B02%3A00&cg1=Howtos%2FTipps&cg2=2857946&cg3=09-2016&cd2=software&cd6=evergreen&cd8=website&cd3=2174540&cd15=website&cd17=not%20logged%20in&cd24=default&cd37=office-business%2C%20private-firmen-finanzen-office-business&cd42=legacy&cd39=Image&cd40=https%3A%2F%2Fwww.paypal.com%2Fsignin%2F%3Fcountry.x%3Dde%26locale.x%3Dde_de&cd41=Content%204&cm75=1&z=1177503448
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:825::200e Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Golfe2 /
Resource Hash
8337212354871836e6763a41e615916c89bac5b3f1f0adf60ba43c7c806e1015
Security Headers
Name Value
X-Content-Type-Options nosniff

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 23 Aug 2019 03:53:29 GMT
x-content-type-options
nosniff
last-modified
Sun, 17 May 1998 03:00:00 GMT
server
Golfe2
age
1831422
status
200
content-type
image/gif
access-control-allow-origin
*
cache-control
no-cache, no-store, must-revalidate
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
35
expires
Mon, 01 Jan 1990 00:00:00 GMT
collect
www.google-analytics.com/
35 B
93 B
Image
General
Full URL
https://www.google-analytics.com/collect?v=1&_v=j79&aip=1&a=152266267&t=event&ni=1&_s=7&dl=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ul=en-us&de=UTF-8&dt=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&sd=24-bit&sr=1600x1200&vp=1585x1200&je=0&ec=Affiliate&ea=embed&el=Paypal%20(Android)%20downloaden%20*&_u=6GBAAEADQ~&jid=&gjid=&cid=130780938.1568363831&tid=UA-204785-4&_gid=55287414.1568363831&cd1=Robert%20Schanze&cd5=2016-09-22T12%3A00%3A41%2B02%3A00&cg1=Howtos%2FTipps&cg2=2857946&cg3=09-2016&cd2=software&cd6=evergreen&cd8=website&cd3=2174540&cd15=website&cd17=not%20logged%20in&cd24=default&cd37=office-business%2C%20private-firmen-finanzen-office-business&cd42=legacy&cd39=Button&cd40=https%3A%2F%2Fwww.giga.de%2Fgo%2Fixmy&cd41=Content%205&cm75=1&z=1794271327
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:825::200e Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Golfe2 /
Resource Hash
8337212354871836e6763a41e615916c89bac5b3f1f0adf60ba43c7c806e1015
Security Headers
Name Value
X-Content-Type-Options nosniff

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 23 Aug 2019 03:53:29 GMT
x-content-type-options
nosniff
last-modified
Sun, 17 May 1998 03:00:00 GMT
server
Golfe2
age
1831422
status
200
content-type
image/gif
access-control-allow-origin
*
cache-control
no-cache, no-store, must-revalidate
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
35
expires
Mon, 01 Jan 1990 00:00:00 GMT
collect
www.google-analytics.com/
35 B
93 B
Image
General
Full URL
https://www.google-analytics.com/collect?v=1&_v=j79&aip=1&a=152266267&t=event&ni=1&_s=8&dl=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ul=en-us&de=UTF-8&dt=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&sd=24-bit&sr=1600x1200&vp=1585x1200&je=0&ec=Affiliate&ea=embed&el=Paypal%20(iOS)%20downloaden%20*&_u=6GBAAEADQ~&jid=&gjid=&cid=130780938.1568363831&tid=UA-204785-4&_gid=55287414.1568363831&cd1=Robert%20Schanze&cd5=2016-09-22T12%3A00%3A41%2B02%3A00&cg1=Howtos%2FTipps&cg2=2857946&cg3=09-2016&cd2=software&cd6=evergreen&cd8=website&cd3=2174540&cd15=website&cd17=not%20logged%20in&cd24=default&cd37=office-business%2C%20private-firmen-finanzen-office-business&cd42=legacy&cd39=Button&cd40=https%3A%2F%2Fwww.giga.de%2Fgo%2Fixmz&cd41=Content%206&cm75=1&z=2085867066
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:825::200e Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Golfe2 /
Resource Hash
8337212354871836e6763a41e615916c89bac5b3f1f0adf60ba43c7c806e1015
Security Headers
Name Value
X-Content-Type-Options nosniff

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 23 Aug 2019 03:53:29 GMT
x-content-type-options
nosniff
last-modified
Sun, 17 May 1998 03:00:00 GMT
server
Golfe2
age
1831422
status
200
content-type
image/gif
access-control-allow-origin
*
cache-control
no-cache, no-store, must-revalidate
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
35
expires
Mon, 01 Jan 1990 00:00:00 GMT
collect
www.google-analytics.com/
35 B
93 B
Image
General
Full URL
https://www.google-analytics.com/collect?v=1&_v=j79&aip=1&a=152266267&t=event&ni=1&_s=9&dl=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ul=en-us&de=UTF-8&dt=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&sd=24-bit&sr=1600x1200&vp=1585x1200&je=0&ec=Affiliate&ea=embed&el=Paypal%20(Windows%20Phone)%20downloaden%20*&_u=6GBAAEADQ~&jid=&gjid=&cid=130780938.1568363831&tid=UA-204785-4&_gid=55287414.1568363831&cd1=Robert%20Schanze&cd5=2016-09-22T12%3A00%3A41%2B02%3A00&cg1=Howtos%2FTipps&cg2=2857946&cg3=09-2016&cd2=software&cd6=evergreen&cd8=website&cd3=2174540&cd15=website&cd17=not%20logged%20in&cd24=default&cd37=office-business%2C%20private-firmen-finanzen-office-business&cd42=legacy&cd39=Button&cd40=https%3A%2F%2Fwww.giga.de%2Fgo%2Fixn0&cd41=Content%207&cm75=1&z=1179138585
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:825::200e Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Golfe2 /
Resource Hash
8337212354871836e6763a41e615916c89bac5b3f1f0adf60ba43c7c806e1015
Security Headers
Name Value
X-Content-Type-Options nosniff

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 23 Aug 2019 03:53:29 GMT
x-content-type-options
nosniff
last-modified
Sun, 17 May 1998 03:00:00 GMT
server
Golfe2
age
1831422
status
200
content-type
image/gif
access-control-allow-origin
*
cache-control
no-cache, no-store, must-revalidate
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
35
expires
Mon, 01 Jan 1990 00:00:00 GMT
ads
googleads.g.doubleclick.net/pagead/ Frame 948F
0
0
Document
General
Full URL
https://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-3939813287030084&output=html&adk=1812271804&adf=3025194257&lmt=1568363831&plat=1%3A32776%2C2%3A16809992%2C8%3A32776%2C9%3A32776%2C16%3A8388608%2C30%3A1081344&guci=1.2.0.0.2.2.0.0&format=0x0&url=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ea=0&flash=0&pra=7&wgl=1&adsid=NT&dt=1568363830983&bpp=4&bdt=231&fdt=278&idt=278&shv=r20190911&cbv=r20190131&saldr=aa&abxe=1&prev_fmts=468x60&nras=1&correlator=415042108830&frm=20&pv=1&ga_vid=130780938.1568363831&ga_sid=1568363831&ga_hid=152266267&ga_fc=0&iag=0&icsg=833269741600&dssz=60&mdo=0&mso=0&u_tz=120&u_his=2&u_java=0&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_nplug=0&u_nmime=0&adx=0&ady=0&biw=1585&bih=1200&scr_x=0&scr_y=0&oid=3&rx=0&eae=2&fc=912&brdim=0%2C0%2C0%2C0%2C1600%2C0%2C1600%2C1200%2C1600%2C1200&vis=1&rsz=%7C%7Cs%7C&abl=NS&fu=16&bc=31&osw_key=4077977667&ifi=1&uci=1.vj96d81kc41j&fsb=1&dtd=283
Requested by
Host: pagead2.googlesyndication.com
URL: https://pagead2.googlesyndication.com/pagead/js/r20190911/r20190131/show_ads_impl.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:816::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
cafe /
Resource Hash
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

:method
GET
:authority
googleads.g.doubleclick.net
:scheme
https
:path
/pagead/ads?client=ca-pub-3939813287030084&output=html&adk=1812271804&adf=3025194257&lmt=1568363831&plat=1%3A32776%2C2%3A16809992%2C8%3A32776%2C9%3A32776%2C16%3A8388608%2C30%3A1081344&guci=1.2.0.0.2.2.0.0&format=0x0&url=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ea=0&flash=0&pra=7&wgl=1&adsid=NT&dt=1568363830983&bpp=4&bdt=231&fdt=278&idt=278&shv=r20190911&cbv=r20190131&saldr=aa&abxe=1&prev_fmts=468x60&nras=1&correlator=415042108830&frm=20&pv=1&ga_vid=130780938.1568363831&ga_sid=1568363831&ga_hid=152266267&ga_fc=0&iag=0&icsg=833269741600&dssz=60&mdo=0&mso=0&u_tz=120&u_his=2&u_java=0&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_nplug=0&u_nmime=0&adx=0&ady=0&biw=1585&bih=1200&scr_x=0&scr_y=0&oid=3&rx=0&eae=2&fc=912&brdim=0%2C0%2C0%2C0%2C1600%2C0%2C1600%2C1200%2C1600%2C1200&vis=1&rsz=%7C%7Cs%7C&abl=NS&fu=16&bc=31&osw_key=4077977667&ifi=1&uci=1.vj96d81kc41j&fsb=1&dtd=283
pragma
no-cache
cache-control
no-cache
upgrade-insecure-requests
1
user-agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
sec-fetch-mode
nested-navigate
accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
sec-fetch-site
cross-site
referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
accept-encoding
gzip, deflate, br
cookie
IDE=AHWqTUk7n4suaCyO-QanZD-Sg6FmAwqJX4PVa4t25XJT33IWjCcu_fn6UEwwZkkt
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

status
200
p3p
policyref="https://googleads.g.doubleclick.net/pagead/gcn_p3p_.xml", CP="CURa ADMa DEVa TAIo PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
timing-allow-origin
*
content-type
text/html; charset=UTF-8
x-content-type-options
nosniff
date
Fri, 13 Sep 2019 08:37:11 GMT
server
cafe
content-length
0
x-xss-protection
0
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
jquery.min.js
ajax.googleapis.com/ajax/libs/jquery/3.2.1/
85 KB
30 KB
Script
General
Full URL
https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/static-local/dist/assets/js/pre-173ae7134f.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:815::200a Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
sffe /
Resource Hash
87083882cc6015984eb0411a99d3981817f5dc5c90ba24f0940420c5548d82de
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Mon, 26 Aug 2019 08:21:25 GMT
content-encoding
gzip
x-content-type-options
nosniff
age
1556146
status
200
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
30306
x-xss-protection
0
last-modified
Fri, 24 Mar 2017 20:55:54 GMT
server
sffe
vary
Accept-Encoding
content-type
text/javascript; charset=UTF-8
access-control-allow-origin
*
cache-control
public, max-age=31536000, stale-while-revalidate=2592000
accept-ranges
bytes
timing-allow-origin
*
expires
Tue, 25 Aug 2020 08:21:25 GMT
sync
ap.lijit.com/ Frame C71B
49 KB
16 KB
Script
General
Full URL
https://ap.lijit.com/sync
Requested by
Host: ap.lijit.com
URL: https://ap.lijit.com/www/delivery/fpi.js?z=600632&width=320&height=50&iv=sf
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
72.251.249.9 Amsterdam, Netherlands, ASN29791 (VOXEL-DOT-NET - Internap Corporation, US),
Reverse DNS
Software
nginx /
Resource Hash
c959d175ccf2a5f270b3ec797d22c21c2fb414e5ddb0c4e7d18cf8e7c3e13e14

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Encoding
gzip
Last-Modified
Wed, 12 Jun 2019 23:43:09 GMT
Server
nginx
ETag
W/"5d018e0d-c373"
Vary
Accept-Encoding
Content-Type
text/javascript
Cache-Control
max-age=86400, must-revalidate
Transfer-Encoding
chunked
X-Sovrn-Pod
ap3ams1
Expires
Sat, 14 Sep 2019 08:37:11 GMT
collect
www.google-analytics.com/
35 B
93 B
Image
General
Full URL
https://www.google-analytics.com/collect?v=1&_v=j79&aip=1&a=152266267&t=event&ni=1&_s=10&dl=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ul=en-us&de=UTF-8&dt=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&sd=24-bit&sr=1600x1200&vp=1585x1200&je=0&ec=Affiliate&ea=visible&el=deutsche%20Paypal-Webseite&_u=6GBAAEADQ~&jid=&gjid=&cid=130780938.1568363831&tid=UA-204785-4&_gid=55287414.1568363831&cd1=Robert%20Schanze&cd5=2016-09-22T12%3A00%3A41%2B02%3A00&cg1=Howtos%2FTipps&cg2=2857946&cg3=09-2016&cd2=software&cd6=evergreen&cd8=website&cd3=2174540&cd15=website&cd17=not%20logged%20in&cd24=default&cd37=office-business%2C%20private-firmen-finanzen-office-business&cd42=legacy&cd39=Text-link&cd40=https%3A%2F%2Fwww.paypal.com%2Fde%2Fcgi-bin%2Fwebscr%3Fcmd%3D_login-run&cd41=Content%201&cm76=1&z=1100301642
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:825::200e Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Golfe2 /
Resource Hash
8337212354871836e6763a41e615916c89bac5b3f1f0adf60ba43c7c806e1015
Security Headers
Name Value
X-Content-Type-Options nosniff

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 23 Aug 2019 03:53:29 GMT
x-content-type-options
nosniff
last-modified
Sun, 17 May 1998 03:00:00 GMT
server
Golfe2
age
1831422
status
200
content-type
image/gif
access-control-allow-origin
*
cache-control
no-cache, no-store, must-revalidate
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
35
expires
Mon, 01 Jan 1990 00:00:00 GMT
smb-article-rating-f9506c2d61.min.js
www.giga.de/static-local/dist/assets/js/vendor/smb-article-rating/
18 KB
6 KB
Script
General
Full URL
https://www.giga.de/static-local/dist/assets/js/vendor/smb-article-rating/smb-article-rating-f9506c2d61.min.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/static-local/dist/assets/js/pre-173ae7134f.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.72.10 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx /
Resource Hash
8123470f5549b50c979d1251dd4b27dc0c0db2cd15ad8f68c54858cc2ae57504

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Mon, 20 May 2019 10:18:52 GMT
content-encoding
gzip
x-original-content-length
17937
server
nginx
status
200
etag
W/"5ce27eb5-4611"
vary
Accept-Encoding
access-control-allow-methods
GET
content-type
text/javascript
access-control-allow-origin
*
cache-control
max-age=31536000
content-length
6108
expires
Tue, 19 May 2020 10:18:52 GMT
ads
securepubads.g.doubleclick.net/gampad/
11 KB
5 KB
XHR
General
Full URL
https://securepubads.g.doubleclick.net/gampad/ads?gdfp_req=1&pvsid=413171460903080&correlator=635864758811418&output=ldjh&callback=googletag.impl.pubads.callbackProxy1&impl=fif&adsid=NT&eid=21064601%2C21063635%2C21063964%2C21064439&vrg=2019091201&guci=1.2.0.0.2.2.0.0&plat=1%3A32776%2C2%3A16809992%2C8%3A134250504&sc=1&sfv=1-0-35&ecs=20190913&iu=4444%2Fgiga.de_sd%2Fsoftware_artikel&sz=800x450%7C580x500%7C580x360%7C42x31&scp=as%3Dposterad%26adslot%3Dposterad%26pc%3D1%26af%3Dptad%2Cintxspt&eri=1&cust_params=tagm%3Dmt%26viewportWidth%3D1581-1680%26viewportHeight%3D1153-1200%26tagtype%3Dasync%26smb-source%3Ddirect%26smb-imp%3D1%26smb-channel%3Dsoftware%26smb-platform%3D%26smb-content%3DHowtos%252FTipps%26smb-search%3Dfalse%26smb-social%3Dfalse%26smb-test%3D8%26smb-hour%3D10%26yt%3D0%26adset%3Dbrsl%26flash%3Dno%26mbrid%3D562f6e0592a50266d82bbdd8627b2056%26mbrseg%3Dff6482ed%252Cb3838f1f%252C78315b65%26keywords%3D%26mbrStatus%3Dcalled-idfound&cookie_enabled=1&bc=31&abxe=1&lmt=1568363831&dt=1568363831323&dlt=1568363830752&idt=551&frm=20&biw=1585&bih=1200&oid=3&adx=-12245933&ady=-12245933&adk=3541345729&uci=1&ifi=2&u_tz=120&u_his=2&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_sd=1&flash=0&url=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&dssz=62&icsg=13332315865312&std=0&vis=1&dmc=8&scr_x=0&scr_y=0&psz=625x0&msz=800x450&ga_vid=130780938.1568363831&ga_sid=1568363831&ga_hid=152266267&fws=128&ohw=0
Requested by
Host: securepubads.g.doubleclick.net
URL: https://securepubads.g.doubleclick.net/gpt/pubads_impl_2019091201.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
216.58.206.2 Mountain View, United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
fra16s20-in-f2.1e100.net
Software
cafe /
Resource Hash
2dcadfbf3cb2289d13410e259b221f9f7815d2877ef8a4fb271ac5accd6edde2
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
content-encoding
br
x-content-type-options
nosniff
google-mediationgroup-id
-2
p3p
policyref="https://googleads.g.doubleclick.net/pagead/gcn_p3p_.xml", CP="CURa ADMa DEVa TAIo PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
status
200
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
4626
x-xss-protection
0
google-lineitem-id
5002100619
pragma
no-cache
server
cafe
google-mediationtag-id
-2
google-creative-id
138265057624
content-type
text/plain; charset=UTF-8
access-control-allow-origin
https://www.giga.de
cache-control
no-cache, must-revalidate
access-control-allow-credentials
true
timing-allow-origin
*
expires
Fri, 01 Jan 1990 00:00:00 GMT
pubads_impl_rendering_2019091201.js
securepubads.g.doubleclick.net/gpt/
62 KB
24 KB
Script
General
Full URL
https://securepubads.g.doubleclick.net/gpt/pubads_impl_rendering_2019091201.js
Requested by
Host: securepubads.g.doubleclick.net
URL: https://securepubads.g.doubleclick.net/gpt/pubads_impl_2019091201.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
216.58.206.2 Mountain View, United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
fra16s20-in-f2.1e100.net
Software
sffe /
Resource Hash
7c92ffc225aed56f82019862b155c8d84902352620250d029bbf653a3d7eab61
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
content-encoding
gzip
x-content-type-options
nosniff
last-modified
Thu, 12 Sep 2019 13:06:13 GMT
server
sffe
vary
Accept-Encoding
content-type
text/javascript
status
200
cache-control
private, immutable, max-age=31536000
accept-ranges
bytes
timing-allow-origin
*
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
24116
x-xss-protection
0
expires
Fri, 13 Sep 2019 08:37:11 GMT
container.html
tpc.googlesyndication.com/safeframe/1-0-35/html/
0
0

ads
securepubads.g.doubleclick.net/gampad/
3 KB
2 KB
XHR
General
Full URL
https://securepubads.g.doubleclick.net/gampad/ads?gdfp_req=1&pvsid=413171460903080&correlator=635864758811418&output=ldjh&callback=googletag.impl.pubads.callbackProxy2&impl=fif&adsid=NT&eid=21064601%2C21063635%2C21063964%2C21064439&vrg=2019091201&guci=1.2.0.0.2.2.0.0&plat=1%3A32776%2C2%3A16809992%2C8%3A134250504&sc=1&sfv=1-0-35&ecs=20190913&iu=4444%2Fgiga.de_sd%2Fsoftware_artikel&sz=1x1&ists=1&scp=as%3Dout-of-page%26adslot%3Dout-of-page%26pc%3D1&eri=1&cust_params=tagm%3Dmt%26viewportWidth%3D1581-1680%26viewportHeight%3D1153-1200%26tagtype%3Dasync%26smb-source%3Ddirect%26smb-imp%3D1%26smb-channel%3Dsoftware%26smb-platform%3D%26smb-content%3DHowtos%252FTipps%26smb-search%3Dfalse%26smb-social%3Dfalse%26smb-test%3D8%26smb-hour%3D10%26yt%3D0%26adset%3Dbrsl%26flash%3Dno%26mbrid%3D562f6e0592a50266d82bbdd8627b2056%26mbrseg%3Dff6482ed%252Cb3838f1f%252C78315b65%26keywords%3D%26mbrStatus%3Dcalled-idfound&cookie_enabled=1&bc=31&abxe=1&lmt=1568363831&dt=1568363831336&dlt=1568363830752&idt=551&frm=20&biw=1585&bih=1200&oid=3&adx=-12245933&ady=-12245933&adk=2858038163&uci=2&ifi=3&u_tz=120&u_his=2&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_sd=1&flash=0&url=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&dssz=63&icsg=13332315865312&std=0&vis=1&dmc=8&scr_x=0&scr_y=0&psz=0x-1&msz=1x-1&ga_vid=130780938.1568363831&ga_sid=1568363831&ga_hid=152266267&fws=640&ohw=0
Requested by
Host: securepubads.g.doubleclick.net
URL: https://securepubads.g.doubleclick.net/gpt/pubads_impl_2019091201.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
216.58.206.2 Mountain View, United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
fra16s20-in-f2.1e100.net
Software
cafe /
Resource Hash
732b00bf442b9e5abd0da8f00874bcf39e8d24487e44754cbcae0a5cd3d0a1fc
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
content-encoding
br
x-content-type-options
nosniff
google-mediationgroup-id
-2
p3p
policyref="https://googleads.g.doubleclick.net/pagead/gcn_p3p_.xml", CP="CURa ADMa DEVa TAIo PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
status
200
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
1756
x-xss-protection
0
google-lineitem-id
4482388292
pragma
no-cache
server
cafe
google-mediationtag-id
-2
google-creative-id
138216245372
content-type
text/plain; charset=UTF-8
access-control-allow-origin
https://www.giga.de
cache-control
no-cache, must-revalidate
access-control-allow-credentials
true
timing-allow-origin
*
expires
Fri, 01 Jan 1990 00:00:00 GMT
145a0649de4fb235240e99e26c_ciA2NTADN2QxYTRlYjUwOTY=.jpg
files.giga-video.de/75/ed/96/ Frame 4364
30 KB
30 KB
Image
General
Full URL
https://files.giga-video.de/75/ed/96/145a0649de4fb235240e99e26c_ciA2NTADN2QxYTRlYjUwOTY=.jpg
Requested by
Host: securepubads.g.doubleclick.net
URL: https://securepubads.g.doubleclick.net/gpt/pubads_impl_2019091201.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.70.100 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx/1.10.3 /
Resource Hash
00dbbd574387178311a123fd5add4544605ba593ce9a2b711e6937555255fafd
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 1; mode=block

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://videos.giga.de/embed/176875?autoplay=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Mon, 09 Sep 2019 04:01:55 GMT
x-content-type-options
nosniff
age
362116
filer-source
ce88ec61ef2b0ae3c6dce1f364e04b3dccdbf411589c67a9af3271f22f2780da
x-cache
HIT
status
200
accept-language
bytes
content-length
30682
x-xss-protection
1; mode=block
last-modified
Sat, 24 Aug 2019 05:59:04 GMT
server
nginx/1.10.3
filer-attr
W1s2NTAsMzY2XSwic3RpLXYzIixbIkZSQS0xIl0sWyJGUkItMSJdXQ==
content-type
image/jpeg
access-control-allow-origin
*
access-control-expose-headers
Content-Length
cache-control
public, max-age=2592000, no-transform
expires
Mon, 23 Sep 2019 05:59:04 GMT
ads
securepubads.g.doubleclick.net/gampad/
15 KB
5 KB
XHR
General
Full URL
https://securepubads.g.doubleclick.net/gampad/ads?gdfp_req=1&pvsid=413171460903080&correlator=635864758811418&output=ldjh&callback=googletag.impl.pubads.callbackProxy3&impl=fif&adsid=NT&eid=21064601%2C21063635%2C21063964%2C21064439&vrg=2019091201&guci=1.2.0.0.2.2.0.0&plat=1%3A32776%2C2%3A16809992%2C8%3A134250504&sc=1&sfv=1-0-35&ecs=20190913&iu=4444%2Fgiga.de_sd%2Fsoftware_artikel&sz=20x10%7C30x10%7C40x10%7C80x10%7C848x90%7C968x90%7C770x250%7C800x250%7C970x250%7C1000x150%7C728x90%7C468x60%7C728x180&scp=as%3Dbanner%26adslot%3Dbanner%26pc%3D1%26amznp%3D2%26amznsz%3D0x0%26yieldlove_reload%3Dpid%253A20918.reload%253Afalse%26yieldlove_reloads%3D0%26yieldlove_reloaded%3Dfalse%26yieldlove_scenario%3Ddefault%26yieldlove_scenario_pid%3Dpid%253A20918.default%26yieldlove_meta%3Dpid%253A20918.sb%253Af%26yieldlove_pid%3D20918%26yieldlove_hb_sucbid%3Dfalse%26hb_unit%3Dbanner%26af%3Df2x1%2Cf3x1%2Cf4x1%2Cf8x1%2Cwp%2Cfirepl%2Cbb%2Cvidwa%2Cfufrad%2Cfloor&eri=1&cust_params=tagm%3Dmt%26viewportWidth%3D1581-1680%26viewportHeight%3D1153-1200%26tagtype%3Dasync%26smb-source%3Ddirect%26smb-imp%3D1%26smb-channel%3Dsoftware%26smb-platform%3D%26smb-content%3DHowtos%252FTipps%26smb-search%3Dfalse%26smb-social%3Dfalse%26smb-test%3D8%26smb-hour%3D10%26yt%3D0%26adset%3Dbrsl%26flash%3Dno%26mbrid%3D562f6e0592a50266d82bbdd8627b2056%26mbrseg%3Dff6482ed%252Cb3838f1f%252C78315b65%26keywords%3D%26mbrStatus%3Dcalled-idfound&cookie_enabled=1&bc=31&abxe=1&lmt=1568363831&dt=1568363831381&dlt=1568363830752&idt=551&frm=20&biw=1585&bih=1200&oid=3&adx=-12245933&ady=-12245933&adk=1797203554&uci=3&ifi=4&u_tz=120&u_his=2&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_sd=1&flash=0&url=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&dssz=63&icsg=13332315865312&std=0&vis=1&dmc=8&scr_x=0&scr_y=0&psz=1000x0&msz=20x10&ga_vid=130780938.1568363831&ga_sid=1568363831&ga_hid=152266267&fws=128&ohw=0
Requested by
Host: securepubads.g.doubleclick.net
URL: https://securepubads.g.doubleclick.net/gpt/pubads_impl_2019091201.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
216.58.206.2 Mountain View, United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
fra16s20-in-f2.1e100.net
Software
cafe /
Resource Hash
1f6485f6195ee62977b95b9c83be099fccd1d96b49fe2c745feb18e0e47b7021
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
content-encoding
br
x-content-type-options
nosniff
google-mediationgroup-id
-2
p3p
policyref="https://googleads.g.doubleclick.net/pagead/gcn_p3p_.xml", CP="CURa ADMa DEVa TAIo PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
status
200
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
4824
x-xss-protection
0
google-lineitem-id
5136574783
pragma
no-cache
server
cafe
google-mediationtag-id
-2
google-creative-id
138284811686
content-type
text/plain; charset=UTF-8
access-control-allow-origin
https://www.giga.de
cache-control
no-cache, must-revalidate
access-control-allow-credentials
true
timing-allow-origin
*
expires
Fri, 01 Jan 1990 00:00:00 GMT
ads
securepubads.g.doubleclick.net/gampad/
10 KB
5 KB
XHR
General
Full URL
https://securepubads.g.doubleclick.net/gampad/ads?gdfp_req=1&pvsid=413171460903080&correlator=635864758811418&output=ldjh&callback=googletag.impl.pubads.callbackProxy4&impl=fif&adsid=NT&eid=21064601%2C21063635%2C21063964%2C21064439&vrg=2019091201&guci=1.2.0.0.2.2.0.0&plat=1%3A32776%2C2%3A16809992%2C8%3A134250504&sc=1&sfv=1-0-35&ecs=20190913&iu=4444%2Fgiga.de_sd%2Fsoftware_artikel&sz=10x40%7C10x30%7C10x20%7C10x22%7C500x600%7C770x200%7C120x600%7C160x600%7C200x600%7C300x600&scp=as%3Dsky%26adslot%3Dsky%26rfree%3D200-299%26pc%3D1%26amznp%3D2%26amznsz%3D0x0%26yieldlove_reload%3Dpid%253A19051.reload%253Afalse%26yieldlove_reloads%3D0%26yieldlove_reloaded%3Dfalse%26yieldlove_scenario%3Ddefault%26yieldlove_scenario_pid%3Dpid%253A19051.default%26yieldlove_meta%3Dpid%253A19051.sb%253Af%26yieldlove_pid%3D19051%26yieldlove_hb_sucbid%3Dfalse%26hb_unit%3Dsky%26af%3Df1x4%2Cf1x3%2Cf1x2%2Cds%2Csky%2Chpad%2Cband&eri=1&cust_params=tagm%3Dmt%26viewportWidth%3D1581-1680%26viewportHeight%3D1153-1200%26tagtype%3Dasync%26smb-source%3Ddirect%26smb-imp%3D1%26smb-channel%3Dsoftware%26smb-platform%3D%26smb-content%3DHowtos%252FTipps%26smb-search%3Dfalse%26smb-social%3Dfalse%26smb-test%3D8%26smb-hour%3D10%26yt%3D0%26adset%3Dbrsl%26flash%3Dno%26mbrid%3D562f6e0592a50266d82bbdd8627b2056%26mbrseg%3Dff6482ed%252Cb3838f1f%252C78315b65%26keywords%3D%26mbrStatus%3Dcalled-idfound&cookie_enabled=1&bc=31&abxe=1&lmt=1568363831&dt=1568363831390&dlt=1568363830752&idt=551&frm=20&biw=1585&bih=1200&oid=3&adx=-12245933&ady=-12245933&adk=1819065434&uci=4&ifi=5&u_tz=120&u_his=2&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_sd=1&flash=0&url=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&dssz=63&icsg=13332315865312&std=0&vis=1&dmc=8&scr_x=0&scr_y=0&psz=0x0&msz=10x40&ga_vid=130780938.1568363831&ga_sid=1568363831&ga_hid=152266267&fws=128&ohw=0
Requested by
Host: securepubads.g.doubleclick.net
URL: https://securepubads.g.doubleclick.net/gpt/pubads_impl_2019091201.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
216.58.206.2 Mountain View, United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
fra16s20-in-f2.1e100.net
Software
cafe /
Resource Hash
6839c2ac75e498a7b30b54255cd82ed3c5ccc05725820a91054365be0b388a5d
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
content-encoding
br
x-content-type-options
nosniff
google-mediationgroup-id
-2
p3p
policyref="https://googleads.g.doubleclick.net/pagead/gcn_p3p_.xml", CP="CURa ADMa DEVa TAIo PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
status
200
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
4552
x-xss-protection
0
google-lineitem-id
5136574783
pragma
no-cache
server
cafe
google-mediationtag-id
-2
google-creative-id
138285141073
content-type
text/plain; charset=UTF-8
access-control-allow-origin
https://www.giga.de
cache-control
no-cache, must-revalidate
access-control-allow-credentials
true
timing-allow-origin
*
expires
Fri, 01 Jan 1990 00:00:00 GMT
ads
securepubads.g.doubleclick.net/gampad/
7 KB
3 KB
XHR
General
Full URL
https://securepubads.g.doubleclick.net/gampad/ads?gdfp_req=1&pvsid=413171460903080&correlator=635864758811418&output=ldjh&callback=googletag.impl.pubads.callbackProxy5&impl=fif&adsid=NT&eid=21064601%2C21063635%2C21063964%2C21064439&vrg=2019091201&guci=1.2.0.0.2.2.0.0&plat=1%3A32776%2C2%3A16809992%2C8%3A134250504&sc=1&sfv=1-0-35&ecs=20190913&iu=4444%2Fgiga.de_sd%2Fsoftware_artikel&sz=10x20%7C10x10%7C300x250&scp=as%3Drectangle%26adslot%3Drectangle%26pc%3D1%26amznp%3D2%26amznsz%3D0x0%26yieldlove_reload%3Dpid%253A9501.reload%253Afalse%26yieldlove_reloads%3D0%26yieldlove_reloaded%3Dfalse%26yieldlove_scenario%3Ddefault%26yieldlove_scenario_pid%3Dpid%253A9501.default%26yieldlove_meta%3Dpid%253A9501.sb%253Af%26yieldlove_pid%3D9501%26yieldlove_hb_sucbid%3Dfalse%26hb_unit%3Drectangle%26af%3Df1x2%2Cf1x1%2Cmrec&eri=1&cust_params=tagm%3Dmt%26viewportWidth%3D1581-1680%26viewportHeight%3D1153-1200%26tagtype%3Dasync%26smb-source%3Ddirect%26smb-imp%3D1%26smb-channel%3Dsoftware%26smb-platform%3D%26smb-content%3DHowtos%252FTipps%26smb-search%3Dfalse%26smb-social%3Dfalse%26smb-test%3D8%26smb-hour%3D10%26yt%3D0%26adset%3Dbrsl%26flash%3Dno%26mbrid%3D562f6e0592a50266d82bbdd8627b2056%26mbrseg%3Dff6482ed%252Cb3838f1f%252C78315b65%26keywords%3D%26mbrStatus%3Dcalled-idfound&cookie_enabled=1&bc=31&abxe=1&lmt=1568363831&dt=1568363831397&dlt=1568363830752&idt=551&frm=20&biw=1585&bih=1200&oid=3&adx=-12245933&ady=-12245933&adk=3179048887&uci=5&ifi=6&u_tz=120&u_his=2&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_sd=1&flash=0&url=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&dssz=63&icsg=13332315865312&std=0&vis=1&dmc=8&scr_x=0&scr_y=0&psz=300x0&msz=10x20&ga_vid=130780938.1568363831&ga_sid=1568363831&ga_hid=152266267&fws=128&ohw=0
Requested by
Host: securepubads.g.doubleclick.net
URL: https://securepubads.g.doubleclick.net/gpt/pubads_impl_2019091201.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
216.58.206.2 Mountain View, United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
fra16s20-in-f2.1e100.net
Software
cafe /
Resource Hash
856ec2798ca96e3fccd580167bf40b38a4addaf33d838d7387faa4f60f1e7e42
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
content-encoding
br
x-content-type-options
nosniff
google-mediationgroup-id
-2
p3p
policyref="https://googleads.g.doubleclick.net/pagead/gcn_p3p_.xml", CP="CURa ADMa DEVa TAIo PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
status
200
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
3223
x-xss-protection
0
google-lineitem-id
5005878418
pragma
no-cache
server
cafe
google-mediationtag-id
-2
google-creative-id
138265003623
content-type
text/plain; charset=UTF-8
access-control-allow-origin
https://www.giga.de
cache-control
no-cache, must-revalidate
access-control-allow-credentials
true
timing-allow-origin
*
expires
Fri, 01 Jan 1990 00:00:00 GMT
api
cdn.m6r.eu/sync/
1 KB
1 KB
Script
General
Full URL
https://cdn.m6r.eu/sync/api
Requested by
Host: js.stroeermediabrands.de
URL: https://js.stroeermediabrands.de/metaTag.min.f1bbc04dfb148c8496847212fb317059.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.234.72 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-234-72.deploy.static.akamaitechnologies.com
Software
nginx /
Resource Hash
12eab7ed9516d8d3da05af9f6af5f31f280da236929d76b0a135cf7cce47ea82

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Encoding
gzip
Last-Modified
Wed, 11 Sep 2019 16:42:57 GMT
Server
nginx
Vary
Accept-Encoding
P3P
CP="NOI CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT"
Cache-Control
max-age=86400
Connection
keep-alive
Content-Type
application/javascript; charset=utf-8
Content-Length
654
Expires
Sat, 14 Sep 2019 08:37:11 GMT
nativendo.css
c.nativendo.de/cdn/asset/css/
5 KB
1 KB
Stylesheet
General
Full URL
https://c.nativendo.de/cdn/asset/css/nativendo.css?v=1159
Requested by
Host: c.nativendo.de
URL: https://c.nativendo.de/cdn/asset/js/loader.js?v=1159
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2606:4700:20::6819:ad0d , United States, ASN13335 (CLOUDFLARENET - Cloudflare, Inc., US),
Reverse DNS
Software
cloudflare /
Resource Hash
8eb1b12b01dcfd0e7d7a431cb5daf50292db75a75516bed8758ba55a2c9de2f0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
via
1.1 google
cf-cache-status
HIT
age
236226
cf-polished
origSize=5959
status
200
content-encoding
br
alt-svc
clear
cf-bgj
minify
server
cloudflare
expect-ct
max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
vary
Accept-Encoding
content-type
text/css;charset=UTF-8
cache-control
public, max-age=31536000
cf-ray
5158cc3a5a838c62-VIE
expires
Sat, 12 Sep 2020 08:37:11 GMT
impl.20190911-24-RELEASE.js
cdn.taboola.com/libtrc/
393 KB
111 KB
Script
General
Full URL
https://cdn.taboola.com/libtrc/impl.20190911-24-RELEASE.js
Requested by
Host: cdn.taboola.com
URL: https://cdn.taboola.com/libtrc/stroeer-smb-giga/loader.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.14.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
079c6baf748d3b543bd11d58558f93c92619dfc023b34b66a1c3648a4f01feee

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

x-amz-version-id
Blzyav7I7Fqr90naydKIw6WeS8AJ8pk2
content-encoding
gzip
etag
"46435c29fa55e5bb182a8089f8899af1"
age
116
x-cache
HIT
status
200
x-amz-replication-status
COMPLETED
content-length
113770
x-amz-id-2
FELoEKgaI/DrtIDrmVjST3PIPcoUFhciEGdu/rHoHou0MDpgtmL4Ttd8JmZIRzxAIZmtMmi1cm0=
x-served-by
cache-fra19120-FRA
last-modified
Wed, 11 Sep 2019 13:41:59 GMT
server
AmazonS3
x-timer
S1568363831.452228,VS0,VE0
date
Fri, 13 Sep 2019 08:37:11 GMT
vary
Accept-Encoding
x-amz-request-id
7C1E695CC51D6438
via
1.1 varnish
cache-control
private,max-age=31536000
accept-ranges
bytes
content-type
application/javascript; charset=utf-8
abp
16
x-cache-hits
627
beacon.js
sb.scorecardresearch.com/
1 KB
1 KB
Script
General
Full URL
https://sb.scorecardresearch.com/beacon.js
Requested by
Host: cdn.taboola.com
URL: https://cdn.taboola.com/libtrc/stroeer-smb-giga/loader.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
23.43.115.95 , Netherlands, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
a23-43-115-95.deploy.static.akamaitechnologies.com
Software
/
Resource Hash
d0fd74148f4cbe78bd0e6328dc5ce5955f0a0ecdb1eb2919da4a7e596ac65912

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Encoding
gzip
Vary
Accept-Encoding
Content-Type
application/x-javascript
Cache-Control
private, no-transform, max-age=86400
Connection
keep-alive
Content-Length
901
Expires
Sat, 14 Sep 2019 08:37:11 GMT
collect
www.google-analytics.com/
35 B
93 B
Image
General
Full URL
https://www.google-analytics.com/collect?v=1&_v=j79&aip=1&a=152266267&t=event&ni=1&_s=11&dl=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ul=en-us&de=UTF-8&dt=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&sd=24-bit&sr=1600x1200&vp=1585x1200&je=0&ec=JWVideoPlayer&ea=PlayerAvailable&el=176875%20--%20so-funktioniert-paypal-hd.mp4%5Bvideojs%2F7.6.0%5D%5BUser%20Click2Play%5D&_u=6GBAAEADQ~&jid=&gjid=&cid=130780938.1568363831&tid=UA-204785-4&_gid=55287414.1568363831&cd1=Robert%20Schanze&cd5=2016-09-22T12%3A00%3A41%2B02%3A00&cg1=Howtos%2FTipps&cg2=2857946&cg3=09-2016&cd2=software&cd6=evergreen&cd8=website&cd3=2174540&cd15=website&cd17=not%20logged%20in&cd24=default&cd37=office-business%2C%20private-firmen-finanzen-office-business&cd42=legacy&cd9=201406&cd11=176875&cd12=PRESS&cd13=62&cd14=false&cd19=User%20Click2Play&cd38=videojs%2F7.6.0&cd44=1&cm1=1&z=922144103
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:825::200e Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Golfe2 /
Resource Hash
8337212354871836e6763a41e615916c89bac5b3f1f0adf60ba43c7c806e1015
Security Headers
Name Value
X-Content-Type-Options nosniff

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 23 Aug 2019 03:53:29 GMT
x-content-type-options
nosniff
last-modified
Sun, 17 May 1998 03:00:00 GMT
server
Golfe2
age
1831422
status
200
content-type
image/gif
access-control-allow-origin
*
cache-control
no-cache, no-store, must-revalidate
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
35
expires
Mon, 01 Jan 1990 00:00:00 GMT
config.js
confiant-integrations.global.ssl.fastly.net/2DPge-WVhZFIVEVo0laRH9eF5JI/gpt_and_prebid/
59 KB
15 KB
Script
General
Full URL
https://confiant-integrations.global.ssl.fastly.net/2DPge-WVhZFIVEVo0laRH9eF5JI/gpt_and_prebid/config.js
Requested by
Host: cdn-a.yieldlove.com
URL: https://cdn-a.yieldlove.com/yieldlove-bidder-stroeer.js?giga.de
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.113.194 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
e7d01a791944bac943f828259d192e75e8f52a3285b91b28151af60575801b93

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Encoding
gzip
Age
715
X-Cache
HIT
Connection
keep-alive
Content-Length
14603
x-amz-id-2
Wr5N7OOMP17npcZTIrQ/VDNePVzEi3MD2lKNQg6mRARg27vOTL2gLHDJne9QT1bxoMg5PTIAiYc=
X-Served-By
cache-hhn4056-HHN
Last-Modified
Fri, 13 Sep 2019 08:20:49 GMT
Server
AmazonS3
X-Timer
S1568363831.493523,VS0,VE0
ETag
"7f8e95491a55f95d589adf904ffda9ca"
x-amz-request-id
BDD373BCB7B295A3
Via
1.1 varnish
Cache-Control
public, max-age=900, stale-while-revalidate=3600
Accept-Ranges
bytes
Content-Type
text/javascript
X-Cache-Hits
1608
0c396880-928c-4285-be2c-b006b66cf32f
https://videos.giga.de/ Frame 4364
31 B
0
Other
General
Full URL
blob:https://videos.giga.de/0c396880-928c-4285-be2c-b006b66cf32f
Requested by
Host: videos.giga.de
URL: https://videos.giga.de/dist/js/embed/bundle/videojs-02e1d46d.min.js
Protocol
BLOB
Security
, ,
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
7725538fe2f71147bffeba7452b434c826aef9009666cb4360c605d0b2a91d1d

Request headers

Sec-Fetch-Mode
same-origin
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Content-Length
31
Content-Type
application/javascript
global_config.json
s3.eu-central-1.amazonaws.com/homad-global-configs-eu-fra.schneevonmorgen.com/ Frame 4364
53 B
642 B
XHR
General
Full URL
https://s3.eu-central-1.amazonaws.com/homad-global-configs-eu-fra.schneevonmorgen.com/global_config.json
Requested by
Host: videos.giga.de
URL: https://videos.giga.de/dist/js/embed/bundle/videojs-02e1d46d.min.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
52.219.73.107 Frankfurt am Main, Germany, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
s3.eu-central-1.amazonaws.com
Software
AmazonS3 /
Resource Hash
f1379a9c047773af19ec6c4f9a465e0147cbabc785342c01110b43304179196a

Request headers

Sec-Fetch-Mode
cors
Referer
https://videos.giga.de/embed/176875?autoplay=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:12 GMT
Last-Modified
Fri, 13 Sep 2019 04:34:56 GMT
Server
AmazonS3
x-amz-request-id
6736DD1E3837CD51
ETag
"3f42d83ce95b1a6eea170c73c8842d09"
Vary
Origin, Access-Control-Request-Headers, Access-Control-Request-Method
Access-Control-Allow-Methods
GET, POST
Content-Type
application/json
Access-Control-Allow-Origin
*
Access-Control-Max-Age
3000
Cache-Control
no-cache, no-store
Accept-Ranges
bytes
Content-Length
53
x-amz-id-2
RgiQ74AtpuexeAGNIyvCOIQJTJQdJjhZRuzdUsnLLXoP8AzEPq9pxnjZjRZCY9OOLnuSdHAvSTY=
Expires
0
giga-ssl.json
videos.giga.de/homad/ Frame 4364
265 B
436 B
XHR
General
Full URL
https://videos.giga.de/homad/giga-ssl.json
Requested by
Host: videos.giga.de
URL: https://videos.giga.de/dist/js/embed/bundle/videojs-02e1d46d.min.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
109.71.25.30 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx/1.14.1 /
Resource Hash
cddc04822e3d360c8d4ce7041294700199c5c9e3395ae7c21a311a112ae0526f

Request headers

Sec-Fetch-Mode
cors
Referer
https://videos.giga.de/embed/176875?autoplay=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
content-encoding
gzip
last-modified
Thu, 04 Jul 2019 08:23:54 GMT
server
nginx/1.14.1
etag
W/"5d1db79a-109"
status
200
access-control-allow-methods
GET
content-type
application/json
access-control-allow-origin
*
cache-control
max-age=900
access-control-allow-headers
accept, content-type
expires
Fri, 13 Sep 2019 08:52:11 GMT
bootstrap.min.js
maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/
36 KB
10 KB
Script
General
Full URL
https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/static-local/dist/assets/js/pre-173ae7134f.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2001:4de0:ac19::1:b:2a , Netherlands, ASN20446 (HIGHWINDS3 - Highwinds Network Group, Inc., US),
Reverse DNS
Software
/
Resource Hash
53964478a7c634e8dad34ecc303dd8048d00dce4993906de1bacf67f663486ef

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
content-encoding
gzip
last-modified
Wed, 12 Dec 2018 18:33:51 GMT
status
200
etag
"1544639631"
vary
Accept-Encoding
x-cache
HIT
content-type
text/javascript; charset=utf-8
access-control-allow-origin
*
cache-control
public, max-age=31536000
x-hello-human
Say hello back! @getBootstrapCDN on Twitter
accept-ranges
bytes
timing-allow-origin
*
content-length
9832
config.json
hgc-cf-cache-1.svonm.com/www.giga.de/ Frame 4364
653 B
1 KB
XHR
General
Full URL
https://hgc-cf-cache-1.svonm.com/www.giga.de/config.json
Requested by
Host: videos.giga.de
URL: https://videos.giga.de/dist/js/embed/bundle/videojs-02e1d46d.min.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
143.204.214.42 Seattle, United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
server-143-204-214-42.fra53.r.cloudfront.net
Software
AmazonS3 /
Resource Hash
5ee5cb1d210bab87efd0825369e6bcbbdf3f9fcc0d1fbf227b0bc670e8a8d3dd

Request headers

Sec-Fetch-Mode
cors
Referer
https://videos.giga.de/embed/176875?autoplay=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:36:24 GMT
Via
1.1 c714e4f593454d65f62cf3fecf756a4c.cloudfront.net (CloudFront)
Vary
Origin,Access-Control-Request-Headers,Access-Control-Request-Method
Age
47
X-Cache
Hit from cloudfront
Connection
keep-alive
Content-Length
653
Last-Modified
Thu, 12 Sep 2019 07:31:47 GMT
Server
AmazonS3
ETag
"063da71572f57793ea4125f50b418f84"
Access-Control-Max-Age
3000
Access-Control-Allow-Methods
GET, POST
Content-Type
application/json
Access-Control-Allow-Origin
*
Cache-Control
no-cache, no-store
X-Amz-Cf-Pop
FRA53-C1
Accept-Ranges
bytes
X-Amz-Cf-Id
9uVn5pTjbCOCcjdexCRr6TeDqSshEcjNLUsoZnRWWlwF98SICVLNoA==
Expires
0
adcfg
ap.lijit.com/ Frame C71B
158 B
566 B
Script
General
Full URL
https://ap.lijit.com/adcfg?zoneid=600632&tid=b527f9939df74a688cd97c9d6a890120173c0d6e&mode=1&dmn=www.giga.de
Requested by
Host: ap.lijit.com
URL: https://ap.lijit.com/sync
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
72.251.249.9 Amsterdam, Netherlands, ASN29791 (VOXEL-DOT-NET - Internap Corporation, US),
Reverse DNS
Software
nginx /
Resource Hash
71744bddd5fc4b7b5f6cab2b154593e133c6746d22dad0315b09aa31f183941f

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Encoding
gzip
Server
nginx
Transfer-Encoding
chunked
Vary
Accept-Encoding
Access-Control-Allow-Methods
GET, POST, DELETE, PUT
Content-Type
application/x-javascript
Access-Control-Allow-Origin
*
Access-Control-Allow-Credentials
true
X-Sovrn-Pod
ap3ams1
Access-Control-Allow-Headers
X-Requested-With, Content-Type
container
tracking.m6r.eu/pixel/
0
376 B
Script
General
Full URL
https://tracking.m6r.eu/pixel/container?pixelId=eaa843f7-840a-4a36-8fdd-3b79df0d4fa0&n2=3&n3=1&n4=3&n5=3&n6=2&n7=1&n8=1&n9=3&n10=2&n11=1&n12=1&n17=4&n18=2&n20=2&n21=4&n22=4&n39=4&n43=4&n44=3&n46=4&n47=4&n48=4&n55=4&n57=4&n60=3&n67=1&n70=5&n71=1&n75=0&n76=1&n77=0&n78=0&n79=1&n80=0&n81=0&n82=0&n83=0&n84=0&n85=0&n86=0&n87=0&n88=1&n117=4&n118=3&n119=6&n120=2&n121=1&n122=1&n123=2&n127=0&n128=1&n133=1&n95=1&n96=1&n135=9&n15=1&n66=1&n89=1&n90=1&n91=1&n92=3&n93=4&n94=2&n97=1&n98=1&n101=1&n104=1&n106=1&n108=1&n114=1&n115=1&n124=1&n125=1&n126=1&n139=1&n148=1&n149=1&n154=1&n155=1&n156=1&n158=1&n159=1&n161=1
Requested by
Host: cdn.m6r.eu
URL: https://cdn.m6r.eu/sync/api
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
104.109.82.87 , Netherlands, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
a104-109-82-87.deploy.static.akamaitechnologies.com
Software
nginx /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:11 GMT
Cache-Control
no-cache
Server
nginx
Connection
keep-alive
Content-Type
text/javascript; charset=utf-8
Content-Length
0
P3P
CP="NOI CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT"
wrap.js
confiant-integrations.global.ssl.fastly.net/prebid/201908291025/
25 KB
10 KB
Script
General
Full URL
https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/2DPge-WVhZFIVEVo0laRH9eF5JI/gpt_and_prebid/config.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.113.194 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
92f5fdb2be157bac1c050ae74fdd9269b35c817ea16931ae9998c2dc27bfd0c4

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Encoding
gzip
Age
372
X-Cache
HIT
Connection
keep-alive
Content-Length
9685
x-amz-id-2
qFo4bFDDAlPtT79h62YuH69Yz5eAcwrFANAxX2ydeRf5KoLbMU/oi/XJ9u72nt0ZbVYsaTgjRDY=
X-Served-By
cache-hhn4082-HHN
Last-Modified
Thu, 05 Sep 2019 08:57:02 GMT
Server
AmazonS3
X-Timer
S1568363832.592959,VS0,VE0
ETag
"7f7e66db4764de508e8dad93ad2d0d27"
x-amz-request-id
4816F98F98D8DD1E
Via
1.1 varnish
Cache-Control
public, max-age=31536000
Accept-Ranges
bytes
Content-Type
application/javascript; charset=utf-8
X-Cache-Hits
558
json
trc.taboola.com/stroeer-smb-giga/trc/3/
16 KB
7 KB
Script
General
Full URL
https://trc.taboola.com/stroeer-smb-giga/trc/3/json?tim=10%3A37%3A11.655&lti=deflated&data=%7B%22id%22%3A73%2C%22ii%22%3A%22%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%22%2C%22it%22%3A%22text%22%2C%22sd%22%3Anull%2C%22ui%22%3Anull%2C%22uifp%22%3Anull%2C%22vi%22%3A1568363831603%2C%22cv%22%3A%2220190911-24-RELEASE%22%2C%22uiv%22%3A%22default%22%2C%22u%22%3A%22https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F%22%2C%22bv%22%3A%220%22%2C%22ul%22%3A%5B%22en-US%22%5D%2C%22cmps%22%3A3%2C%22btv%22%3A%220%22%2C%22cos%22%3A%224g%22%2C%22bad%22%3A-1%2C%22sw%22%3A1600%2C%22sh%22%3A1200%2C%22bw%22%3A1600%2C%22sde%22%3A%221.000%22%2C%22bh%22%3A1200%2C%22dw%22%3A1585%2C%22dh%22%3A5187%2C%22r%22%3A%5B%7B%22li%22%3A%22rbox-t2m%22%2C%22s%22%3A9%2C%22uim%22%3A%22alternating-thumbnails-a%3Aabp%3D0%22%2C%22uip%22%3A%22Below%20Article%20Feed%20-%20Video%22%2C%22orig_uip%22%3A%22Below%20Article%20Feed%20-%20Video%22%2C%22cd%22%3A3738.296875%2C%22mw%22%3A625%7D%5D%2C%22cb%22%3A%22TRC.callbacks.recommendations_1%22%2C%22lt%22%3A%22deflated%22%7D
Requested by
Host: cdn.taboola.com
URL: https://cdn.taboola.com/libtrc/impl.20190911-24-RELEASE.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.14.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
nginx /
Resource Hash
442d9d314760bead3211eaafcb93d6ee3fba274c2f2db3f736cb7198a57e287d

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
content-encoding
gzip
server
nginx
x-timer
S1568363832.659192,VS0,VE184
status
200
x-served-by
cache-fra19120-FRA
vary
Accept-Encoding
x-cache
MISS
p3p
policyref="http://trc.taboola.com/p3p.xml", CP="NOI DSP COR LAW NID CURa ADMa DEVa PSAa PSDa OUR BUS IND UNI COM NAV INT DEM"
access-control-allow-origin
*
access-control-allow-credentials
true
accept-ranges
bytes
content-type
application/javascript; charset=utf-8
via
1.1 varnish
x-cache-hits
0
b2
sb.scorecardresearch.com/
Redirect Chain
  • https://sb.scorecardresearch.com/b?c1=7&c2=13739933&c3=20121515121&ns__t=1568363831657&ns_c=UTF-8&cv=3.1&c8=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&c7=https%3A%2F%2Fwww.giga.de%2Fwebapps%...
  • https://sb.scorecardresearch.com/b2?c1=7&c2=13739933&c3=20121515121&ns__t=1568363831657&ns_c=UTF-8&cv=3.1&c8=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&c7=https%3A%2F%2Fwww.giga.de%2Fwebapps...
0
248 B
Image
General
Full URL
https://sb.scorecardresearch.com/b2?c1=7&c2=13739933&c3=20121515121&ns__t=1568363831657&ns_c=UTF-8&cv=3.1&c8=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&c7=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&c9=
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
23.43.115.95 , Netherlands, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
a23-43-115-95.deploy.static.akamaitechnologies.com
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Cache-Control
private, no-cache, no-cache=Set-Cookie, no-store, proxy-revalidate
Connection
keep-alive
Content-Length
0
Expires
Mon, 01 Jan 1990 00:00:00 GMT

Redirect headers

Location
https://sb.scorecardresearch.com/b2?c1=7&c2=13739933&c3=20121515121&ns__t=1568363831657&ns_c=UTF-8&cv=3.1&c8=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&c7=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&c9=
Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Cache-Control
private, no-cache, no-cache=Set-Cookie, no-store, proxy-revalidate
Connection
keep-alive
Content-Length
0
Expires
Mon, 01 Jan 1990 00:00:00 GMT
/
d.nativendo.de/cds/delivery/get/
8 KB
2 KB
Script
General
Full URL
https://d.nativendo.de/cds/delivery/get/?url=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&
Requested by
Host: c.nativendo.de
URL: https://c.nativendo.de/cdn/asset/js/loader.js?v=1159
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
107.178.241.34 , United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
34.241.178.107.bc.googleusercontent.com
Software
Apache /
Resource Hash
a9b30bb4dd7c1d5d8083571fc9ec8fa25918c980a3682c42325b58e939d31a6d

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:11 GMT
content-encoding
gzip
last-modified
Fri, 13 Sep 2019 08:37:11 GMT
server
Apache
vary
Accept-Encoding
p3p
CP="This is not a p3p policy."
status
200
cache-control
no-transform, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
content-type
text/javascript; charset=utf8
alt-svc
clear
content-length
1917
via
1.1 google
expires
Sat, 26 Jul 1997 05:00:00 GMT
hd-main.js
hgc-cf-cache-1.svonm.com/ Frame 4364
202 KB
59 KB
XHR
General
Full URL
https://hgc-cf-cache-1.svonm.com/hd-main.js?cache=OcpeDmXUsk
Requested by
Host: videos.giga.de
URL: https://videos.giga.de/dist/js/embed/bundle/videojs-02e1d46d.min.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
143.204.214.42 Seattle, United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
server-143-204-214-42.fra53.r.cloudfront.net
Software
AmazonS3 /
Resource Hash
f7f62a0b73e1aa131796590006b45b4275f3f0b8b2c31c7ca387efafc1c11328

Request headers

Sec-Fetch-Mode
cors
Referer
https://videos.giga.de/embed/176875?autoplay=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:36:23 GMT
Content-Encoding
gzip
Vary
Origin,Access-Control-Request-Headers,Access-Control-Request-Method
Age
64
Transfer-Encoding
chunked
X-Cache
Hit from cloudfront
Connection
keep-alive
Access-Control-Allow-Origin
*
Last-Modified
Wed, 11 Sep 2019 13:35:07 GMT
Server
AmazonS3
Access-Control-Max-Age
3000
Access-Control-Allow-Methods
GET, POST
Content-Type
application/javascript
Via
1.1 c714e4f593454d65f62cf3fecf756a4c.cloudfront.net (CloudFront)
Cache-Control
no-cache
X-Amz-Cf-Pop
FRA53-C1
X-Amz-Cf-Id
RNVHRuZu8XULwbd0ejlJj5ZN-kliuQQMJMdGRLoEuUGQd87t2aZclg==
defaultImage.gif
cdn.stroeerdigitalmedia.de/Ads/ Frame 58C0
Redirect Chain
  • https://securepubads.g.doubleclick.net/pcs/view?xai=AKAOjssYUb_Erddm4NYiFQwIo7812fseyADUZ2QP3GAk75_Ao1WDVaps-1cfvajhya2tEarzJIH9bvdnCx1PAM-MxxAb19jHBX-tRSguI9DEuX05Yw5cAOxJuGDFoO_rgvKGXIeT5UQt8IiVH...
  • https://cdn.stroeerdigitalmedia.de/Ads/defaultImage.gif
49 B
343 B
Image
General
Full URL
https://cdn.stroeerdigitalmedia.de/Ads/defaultImage.gif
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:2bc::5f76 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
Apache /
Resource Hash
0e6f831bb3dbd78ef661b62aa1f6b4606bb13426d5a9378d061aa20354f24499

Request headers

Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
last-modified
Wed, 29 Nov 2006 13:15:04 GMT
server
Apache
status
200
etag
"3260aadd174a1ebd50d0bd967c8fadea:1494950026"
access-control-max-age
86400
access-control-allow-methods
GET,HEAD
content-type
image/gif
access-control-allow-origin
*
cache-control
max-age=575028
access-control-allow-credentials
false
accept-ranges
bytes
access-control-allow-headers
*
content-length
49
expires
Fri, 20 Sep 2019 00:20:59 GMT

Redirect headers

timing-allow-origin
*
date
Fri, 13 Sep 2019 08:37:11 GMT
x-content-type-options
nosniff
server
cafe
status
302
location
//cdn.stroeerdigitalmedia.de/Ads/defaultImage.gif
p3p
policyref="https://googleads.g.doubleclick.net/pagead/gcn_p3p_.xml", CP="CURa ADMa DEVa TAIo PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
access-control-allow-origin
*
cache-control
private
content-type
text/html; charset=UTF-8
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
0
x-xss-protection
0
view
securepubads.g.doubleclick.net/pcs/ Frame 4E21
0
58 B
Fetch
General
Full URL
https://securepubads.g.doubleclick.net/pcs/view?xai=AKAOjsu0-0F3BN77BclM-dgBivrGn8VfsLa45KMLeKaTocXzeMdiAbJsaJONuise0l973XG2SfwTW_HugilBQZP08mAbj8NOYeHYZbJ7mP-xOvqGltb7hi7aLiMDxHzOO-aIpB9_Iisq-9NrjGycJszbx7rljqeJcL8Si3Wk5mBO749mIGXy4EaM6H0aVH4ffaTZWWi8oJvRcM_QAPXDOoJa26Rk7DOOt15MLrYDRIhjM97gi2OMaO7pCHe3jQVm1vWyl3F6A4hV_z4s1syF8MmNukguzQ&sig=Cg0ArKJSzCHu-smAMtB3EAE&urlfix=1&adurl=
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
216.58.206.2 Mountain View, United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
fra16s20-in-f2.1e100.net
Software
cafe /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

timing-allow-origin
*
date
Fri, 13 Sep 2019 08:37:11 GMT
x-content-type-options
nosniff
server
cafe
status
200
p3p
policyref="https://googleads.g.doubleclick.net/pagead/gcn_p3p_.xml", CP="CURa ADMa DEVa TAIo PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
access-control-allow-origin
*
cache-control
private
content-type
image/gif
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
0
x-xss-protection
0
video.php
media.oadts.com/www/delivery/ Frame 4E21
108 KB
108 KB
Script
General
Full URL
https://media.oadts.com/www/delivery/video.php?dt=inline&mw=300&sm=1&tm=0&vp=1
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, CHACHA20_POLY1305
Server
185.22.221.117 , Germany, ASN60955 (WAVECON, DE),
Reverse DNS
wv-gw1.wavecloud.de
Software
lighttpd/1.4.45 /
Resource Hash
6c7ed2d548e889f2bd271cc326596ba4ad529474c3881bf3fcbc39d8d3213706

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Cache-Control
private, max-age=0, no-cache
Server
lighttpd/1.4.45
Content-type
text/javascript; charset=UTF-8
Content-Length
110249
Expires
Mon, 26 Jul 1997 05:00:00 GMT
osd_listener.js
www.googletagservices.com/activeview/js/current/ Frame 4E21
75 KB
28 KB
Script
General
Full URL
https://www.googletagservices.com/activeview/js/current/osd_listener.js?cache=r20110914
Requested by
Host: securepubads.g.doubleclick.net
URL: https://securepubads.g.doubleclick.net/gpt/pubads_impl_rendering_2019091201.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:824::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
sffe /
Resource Hash
c1f4b48cf64b1d62f7ac56e47f4654cc28d949cdb83d9a0fa7be561c498b20d7
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:11 GMT
content-encoding
gzip
x-content-type-options
nosniff
server
sffe
etag
"1568027754411643"
vary
Accept-Encoding
content-type
text/javascript
status
200
cache-control
private, max-age=3000
accept-ranges
bytes
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
content-length
28564
x-xss-protection
0
expires
Fri, 13 Sep 2019 08:37:11 GMT
gen_204
pagead2.googlesyndication.com/pagead/
0
49 B
Image
General
Full URL
https://pagead2.googlesyndication.com/pagead/gen_204?id=gpt_sz&r=800x450%7C580x500%7C580x360%7C42x31&w=800&h=450
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:824::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
cafe /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:11 GMT
x-content-type-options
nosniff
server
cafe
timing-allow-origin
*
p3p
policyref="https://www.googleadservices.com/pagead/p3p.xml", CP="NOI DEV PSA PSD IVA IVD OTP OUR OTR IND OTC"
status
204
cache-control
no-cache, must-revalidate
content-type
image/gif
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
content-length
0
x-xss-protection
0
expires
Fri, 01 Jan 1990 00:00:00 GMT
addelivery
ap.lijit.com/ Frame C71B
4 KB
2 KB
Script
General
Full URL
https://ap.lijit.com/addelivery?zoneid=600632&tid=m_600632_45532139e81c4e8bbf3679b772028ca8&cb=30159233&mode=1&flv=0.0.0&ifr=true&od=www.giga.de&time=08%3A37%3A11&fd=1&be=sf&loc=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&orig_loc=http%3A%2F%2Fhttps%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&abf=true&dpz=false&cv=7a34ad2&dop=0&ndw=1&spif=true&btid=m_600632_45532139e81c4e8bbf3679b772028ca8&iv=sf
Requested by
Host: ap.lijit.com
URL: https://ap.lijit.com/sync
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
72.251.249.9 Amsterdam, Netherlands, ASN29791 (VOXEL-DOT-NET - Internap Corporation, US),
Reverse DNS
Software
nginx /
Resource Hash
5d34aed5d72936e2857c26ca39adaf36b913d9459e489d9b1450036fa34b04cc

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Encoding
gzip
Server
nginx
Transfer-Encoding
chunked
Vary
Accept-Encoding
Access-Control-Allow-Methods
GET, POST, DELETE, PUT
Content-Type
application/x-javascript
Access-Control-Allow-Origin
*
Access-Control-Allow-Credentials
true
X-Sovrn-Pod
ap3ams1
Access-Control-Allow-Headers
X-Requested-With, Content-Type
truncated
/ Frame 4364
202 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
f7f62a0b73e1aa131796590006b45b4275f3f0b8b2c31c7ca387efafc1c11328

Request headers

User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Content-Type
text/javascript
sovrn_standalone_beacon.js
ap.lijit.com/www/sovrn_beacon_standalone/ Frame C71B
4 KB
2 KB
Script
General
Full URL
https://ap.lijit.com/www/sovrn_beacon_standalone/sovrn_standalone_beacon.js?iid=13413818
Requested by
Host: ap.lijit.com
URL: https://ap.lijit.com/sync
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
72.251.249.9 Amsterdam, Netherlands, ASN29791 (VOXEL-DOT-NET - Internap Corporation, US),
Reverse DNS
Software
nginx /
Resource Hash
5f7c7709d592c7e19dc12152d7adce8a117f08af40a2facd69c19b495c9a1047

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Encoding
gzip
Last-Modified
Tue, 08 Jan 2019 18:24:08 GMT
Server
nginx
ETag
W/"5c34eac8-fb6"
Vary
Accept-Encoding
Access-Control-Allow-Methods
GET
Content-Type
text/javascript
Cache-Control
max-age=604800, must-revalidate
Transfer-Encoding
chunked
X-Sovrn-Pod
ap3ams1
Access-Control-Allow-Headers
DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type
Access-Control-Allow-Credentials
true
Expires
Fri, 20 Sep 2019 08:37:11 GMT
le.php
media.oadts.com/www/delivery/ Frame 4E21
43 B
400 B
Image
General
Full URL
https://media.oadts.com/www/delivery/le.php?zoneid=5074&bannerid=0&eventId=9&cb=55526213289
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, CHACHA20_POLY1305
Server
185.22.221.117 , Germany, ASN60955 (WAVECON, DE),
Reverse DNS
wv-gw1.wavecloud.de
Software
lighttpd/1.4.45 /
Resource Hash
4e0705327480ad2323cb03d9c450ffcae4a98bf3a5382fa0c7882145ed620e49

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Server
lighttpd/1.4.45
P3P
CP="CUR ADM OUR NOR STA NID"
Cache-Control
private, max-age=0, no-cache
Content-Type
image/gif
Content-Length
43
Expires
Mon, 26 Jul 1997 05:00:00 GMT
le.php
media.oadts.com/www/delivery/ Frame 4E21
43 B
400 B
Image
General
Full URL
https://media.oadts.com/www/delivery/le.php?zoneid=5074&bannerid=0&eventId=10&cb=59354604290
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, CHACHA20_POLY1305
Server
185.22.221.117 , Germany, ASN60955 (WAVECON, DE),
Reverse DNS
wv-gw1.wavecloud.de
Software
lighttpd/1.4.45 /
Resource Hash
4e0705327480ad2323cb03d9c450ffcae4a98bf3a5382fa0c7882145ed620e49

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Server
lighttpd/1.4.45
P3P
CP="CUR ADM OUR NOR STA NID"
Cache-Control
private, max-age=0, no-cache
Content-Type
image/gif
Content-Length
43
Expires
Mon, 26 Jul 1997 05:00:00 GMT
le.php
media.oadts.com/www/delivery/ Frame 4E21
43 B
400 B
Image
General
Full URL
https://media.oadts.com/www/delivery/le.php?zoneid=5074&bannerid=0&eventId=11&cb=27082077996
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, CHACHA20_POLY1305
Server
185.22.221.117 , Germany, ASN60955 (WAVECON, DE),
Reverse DNS
wv-gw1.wavecloud.de
Software
lighttpd/1.4.45 /
Resource Hash
4e0705327480ad2323cb03d9c450ffcae4a98bf3a5382fa0c7882145ed620e49

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Server
lighttpd/1.4.45
P3P
CP="CUR ADM OUR NOR STA NID"
Cache-Control
private, max-age=0, no-cache
Content-Type
image/gif
Content-Length
43
Expires
Mon, 26 Jul 1997 05:00:00 GMT
native
native.adscale.de/
157 B
603 B
XHR
General
Full URL
https://native.adscale.de/native
Requested by
Host: c.nativendo.de
URL: https://c.nativendo.de/cdn/asset/js/loader.js?v=1159
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
104.111.246.233 , Netherlands, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a104-111-246-233.deploy.static.akamaitechnologies.com
Software
/
Resource Hash
4e0e01b4aba79882fffcde76d931987fcaf38e709bc88be1d586295d43bea739

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-Type
text/plain;charset=UTF-8

Response headers

Date
Fri, 13 Sep 2019 08:37:11 GMT
P3P
CP=NOI PSA OUR
Content-Type
application/json
Access-Control-Allow-Origin
https://www.giga.de
Cache-Control
no-cache
Access-Control-Allow-Credentials
true
Connection
keep-alive
X-Robots-Tag
none
Content-Length
157
avc.php
media.oadts.com/www/delivery/ Frame 4E21
12 KB
12 KB
XHR
General
Full URL
https://media.oadts.com/www/delivery/avc.php?zoneid=5074&pw=100%25&ph=100%25&msgId=atg495290235&startmuted=1&cb=0.873889164616702&loc=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&autostart=1
Requested by
Host: media.oadts.com
URL: https://media.oadts.com/www/delivery/video.php?dt=inline&mw=300&sm=1&tm=0&vp=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, CHACHA20_POLY1305
Server
185.22.221.117 , Germany, ASN60955 (WAVECON, DE),
Reverse DNS
wv-gw1.wavecloud.de
Software
lighttpd/1.4.45 /
Resource Hash
06bb0cf1f50c80214da364e7d78896cafcb1299643cee50320173985b0c81668

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Server
lighttpd/1.4.45
Access-Control-Max-Age
86400
P3P
CP="CUR ADM OUR NOR STA NID"
Access-Control-Allow-Origin
https://www.giga.de
Cache-Control
private, max-age=0, no-cache
Access-Control-Allow-Credentials
true
Content-type
application/json
Content-Length
11803
Expires
Mon, 26 Jul 1997 05:00:00 GMT
le.php
media.oadts.com/www/delivery/ Frame 4E21
43 B
307 B
Image
General
Full URL
https://media.oadts.com/www/delivery/le.php?zoneid=5074&bannerid=0&eventId=12&cb=33238669644
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, CHACHA20_POLY1305
Server
185.22.221.117 , Germany, ASN60955 (WAVECON, DE),
Reverse DNS
wv-gw1.wavecloud.de
Software
lighttpd/1.4.45 /
Resource Hash
4e0705327480ad2323cb03d9c450ffcae4a98bf3a5382fa0c7882145ed620e49

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Server
lighttpd/1.4.45
P3P
CP="CUR ADM OUR NOR STA NID"
Cache-Control
private, max-age=0, no-cache
Content-Type
image/gif
Content-Length
43
Expires
Mon, 26 Jul 1997 05:00:00 GMT
getAd
video-adserver.ibillboard.com/ Frame 4E21
1 KB
1 KB
XHR
General
Full URL
https://video-adserver.ibillboard.com/getAd?tagid=346a3f1b-2167-4e54-8af3-4a8d2910a189&bust=6b2231e7ae&ref=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F
Requested by
Host: media.oadts.com
URL: https://media.oadts.com/www/delivery/video.php?dt=inline&mw=300&sm=1&tm=0&vp=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
62.168.44.126 Velke Prilepy, Czech Republic, ASN5588 (GTSCE GTS Central Europe / Antel Germany, CZ),
Reverse DNS
bbnaut2.bbelements.com
Software
ibillboard /
Resource Hash
3fe01ed3233e7c570a8c116f864cfc8743e8374a2a611f8f72582204976a67e9

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Server
ibillboard
Vary
*
Content-Type
text/xml
Access-Control-Allow-Origin
https://www.giga.de
Cache-Control
private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
Access-Control-Allow-Credentials
true
Connection
keep-alive
Content-Length
1033
Expires
Tue, 01 Jan 1991 00:00:00 GMT
le.php
media.oadts.com/www/delivery/ Frame 4E21
43 B
400 B
Image
General
Full URL
https://media.oadts.com/www/delivery/le.php?zoneid=5074&bannerid=23481&eventId=21&plr=3&cb=0.2716835061607694&loc=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2Fhttps%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&dur=0
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, CHACHA20_POLY1305
Server
185.22.221.117 , Germany, ASN60955 (WAVECON, DE),
Reverse DNS
wv-gw1.wavecloud.de
Software
lighttpd/1.4.45 /
Resource Hash
4e0705327480ad2323cb03d9c450ffcae4a98bf3a5382fa0c7882145ed620e49

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Server
lighttpd/1.4.45
P3P
CP="CUR ADM OUR NOR STA NID"
Cache-Control
private, max-age=0, no-cache
Content-Type
image/gif
Content-Length
43
Expires
Mon, 26 Jul 1997 05:00:00 GMT
Cookie set beacon
gslbeacon.lijit.com/ Frame 1826
Redirect Chain
  • https://gslbeacon.lijit.com/beacon?viewId=m_600632_45532139e81c4e8bbf3679b772028ca8&rand=3656&informer=13166301&type=fpads&loc=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so...
  • https://gslbeacon.lijit.com/beacon?viewId=m_600632_45532139e81c4e8bbf3679b772028ca8&rand=3656&informer=13166301&type=fpads&loc=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so...
0
0
Document
General
Full URL
https://gslbeacon.lijit.com/beacon?viewId=m_600632_45532139e81c4e8bbf3679b772028ca8&rand=3656&informer=13166301&type=fpads&loc=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&v=1.2&dnr=1
Requested by
Host: ap.lijit.com
URL: https://ap.lijit.com/sync
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
72.251.249.9 Amsterdam, Netherlands, ASN29791 (VOXEL-DOT-NET - Internap Corporation, US),
Reverse DNS
Software
nginx / raptor
Resource Hash

Request headers

Host
gslbeacon.lijit.com
Connection
keep-alive
Pragma
no-cache
Cache-Control
no-cache
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site
cross-site
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Accept-Encoding
gzip, deflate, br
Cookie
ctag=211:1568450231|423:1568450231|234:1568450231|203:1568450231|205:1568450231; ljt_reader=e3f8950ceaf08e44bb016892
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

Server
nginx
Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Type
text/html;charset=utf-8
Transfer-Encoding
chunked
Vary
Accept-Encoding
X-Application-Context
application:prod:9080
Set-Cookie
tpro=eJxNUMtuhDAM%2FBefI%2BTw2i2%2F0b1VVRQFA5FCggJUqlb8e52wi3qb8UzGnjwhbBNF6J7gNjsTdChgDr0yYffbya75D8XVBg8dlAXCISDSQDFaP36SjmZ6UJxX6L6%2BBSwxDNZRyrXehDkjiagWt7MFi%2FImoELV4pu0qFjP7C4AVZWxvPMaE5yjMUdcEItawBh1r1YzZWcjwAd%2FSg2%2FGsn3Z7OBZu2ywJ4Lpvu1OVP1btKMF7%2B%2BAwuUAvQQlZ4zY0mvVvtMOGay65Jxmw6crOsj%2BZTlQ05n%2Fy%2FlpnXJDn2eL%2B%2BqqtOw4vZKlu80yeSWW%2FC8UfXHy9P8%2B7DmOI4%2FvRJ50A%3D%3D;Path=/;Domain=.lijit.com;Expires=Sat, 12-Sep-2020 08:37:11 GMT;Max-Age=31536000 ljtrtb_refresh=false;Path=/;Domain=.lijit.com;Expires=Tue, 17-Sep-2019 08:37:11 GMT;Max-Age=345600 ljtrtbexp=eJxdkEEOwCAIBP%2FiuQdQQOjXmv7dpD0xxzHurOszdNzqUb6XLb3G7BjReXXcSLsITlSQgFBRWFWJGw6GIdGQMKZhITbM35fmMj%2FemIw%2Bg9%2Fgs8KfIO%2FcJ%2F1F7wGnaE9Q;Path=/;Domain=.lijit.com;Expires=Sat, 12-Sep-2020 08:37:11 GMT;Max-Age=31536000
Expires
Fri, 20 Mar 2009 00:00:00 GMT
Cache-Control
private, no-cache, no-store, must-revalidate, proxy-revalidate, max-age=0, s-maxage=0
Pragma
no-cache
P3P
CP="CUR ADM OUR NOR STA NID"
X-Powered-By
raptor
Content-Encoding
gzip
X-Sovrn-Pod
ap3ams1

Redirect headers

Server
nginx
Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Length
0
X-Application-Context
application:prod:9080
Set-Cookie
ljt_reader=e3f8950ceaf08e44bb016892;Path=/;Domain=.lijit.com;Expires=Sat, 12-Sep-2020 08:37:11 GMT;Max-Age=31536000
Expires
Fri, 20 Mar 2009 00:00:00 GMT
Cache-Control
private, no-cache, no-store, must-revalidate, proxy-revalidate, max-age=0, s-maxage=0
Pragma
no-cache
P3P
CP="CUR ADM OUR NOR STA NID"
Location
https://gslbeacon.lijit.com/beacon?viewId=m_600632_45532139e81c4e8bbf3679b772028ca8&rand=3656&informer=13166301&type=fpads&loc=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&v=1.2&dnr=1
X-Powered-By
raptor
X-Sovrn-Pod
ap3ams1
containertag
ap.lijit.com/ Frame C71B
56 KB
7 KB
Script
General
Full URL
https://ap.lijit.com/containertag?containerId=18&zoneId=600632&v=2
Requested by
Host: ap.lijit.com
URL: https://ap.lijit.com/sync
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
72.251.249.9 Amsterdam, Netherlands, ASN29791 (VOXEL-DOT-NET - Internap Corporation, US),
Reverse DNS
Software
nginx / raptor
Resource Hash
32c3ca88ea47d1c7ea1a1f688cae7b1fda20642254b79332055b8f74bb53d475

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Encoding
gzip
Server
nginx
X-Powered-By
raptor
Vary
Accept-Encoding
P3P
CP="CUR ADM OUR NOR STA NID"
Cache-Control
private, no-cache, no-store, must-revalidate, proxy-revalidate, max-age=0, s-maxage=0
Transfer-Encoding
chunked
X-Sovrn-Pod
ap3ams1
Content-Type
text/html;charset=utf-8
X-Application-Context
application:prod:9080
Expires
Fri, 20 Mar 2009 00:00:00 GMT
impression
vap3ams1.lijit.com/addelivery/ Frame C71B
43 B
564 B
Image
General
Full URL
https://vap3ams1.lijit.com/addelivery/impression?bannerid=214932&campaignid=232&cb=30159233&tid=m_600632_45532139e81c4e8bbf3679b772028ca8&zoneid=600632&cids=232&bids=214932&tss=1
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
72.251.249.9 Amsterdam, Netherlands, ASN29791 (VOXEL-DOT-NET - Internap Corporation, US),
Reverse DNS
Software
nginx /
Resource Hash
b1442e85b03bdcaf66dc58c7abb98745dd2687d86350be9a298a1d9382ac849b

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Server
nginx
Access-Control-Allow-Methods
GET, POST, DELETE, PUT
P3P
CP="CUR ADM OUR NOR STA NID"
Access-Control-Allow-Origin
*
Cache-Control
private, no-cache, no-store, must-revalidate, proxy-revalidate, max-age=0, s-maxage=0
Access-Control-Allow-Credentials
true
X-Sovrn-Pod
ap3ams1
Content-Type
image/gif
Access-Control-Allow-Headers
X-Requested-With, Content-Type
Content-Length
43
Expires
Fri, 20 Mar 2009 00:00:00 GMT
fp
vap3ams1.lijit.com/data/ Frame C71B
43 B
207 B
Image
General
Full URL
https://vap3ams1.lijit.com/data/fp?tid=m_600632_45532139e81c4e8bbf3679b772028ca8&zoneid=600632&starttime=1568363831555&adcfg=4&adcfg_response=133&addelivery=136&addelivery_response=234&lgfired=318&beacon=321&container=323&EOL=324&ctstart=321&elapsed_ms=324
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
72.251.249.9 Amsterdam, Netherlands, ASN29791 (VOXEL-DOT-NET - Internap Corporation, US),
Reverse DNS
Software
nginx / podlogging
Resource Hash
b1442e85b03bdcaf66dc58c7abb98745dd2687d86350be9a298a1d9382ac849b

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:11 GMT
Server
nginx
X-Sovrn-Pod
ap3ams1
X-Powered-By
podlogging
Content-Length
43
Content-Type
image/gif
tb
15.taboola.com/
30 KB
30 KB
Script
General
Full URL
https://15.taboola.com/tb?oid=15&pubnm=stroeer-smb-giga&unitType=244&tbloc=&pageType=text&pstn=Below%20Article%20Feed%20-%20Video&uuip=Feed%20-%20Below%20Article%20Feed%20-%20Video&cisrf=&cirf=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&encoded=1&uid=13a84ac7-135b-4347-b50f-d0bed2f9ea16-tuct474dab7&variant=-100|123472&callback=TRC.videoTagCallbacks.videoCallback1&cb=1568363831888&tagid=&cntry=DE&platform=1&sesid=76d184186a161c579b07d3fa834ddb67&itemid=/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme&viewid=1568363831603&geolat=&geoing=&deviceifa=&appid=&sd=v2_76d184186a161c579b07d3fa834ddb67_13a84ac7-135b-4347-b50f-d0bed2f9ea16-tuct474dab7_1568363831_1568363831_CNawjgYQrMVBGLPCk87SLSABKAEwODib4wlAgooQSJjEF1Cl7BBYAGAA&ri=853049b64759fcfbc666f9f8fe58878e&appname=&cdb=&gdprApplies=&rid=&sii=333075201540415599
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.114.49 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
nginx/1.13.12 /
Resource Hash
ab0acc5efcec79c1da64382dc76b4e651051fcf34aef688d8cd2a7d34eb19f08

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:12 GMT
via
1.1 varnish
server
nginx/1.13.12
x-timer
S1568363832.900060,VS0,VE321
machineid
1417
x-cache
MISS
content-type
text/html;charset=ISO-8859-1
status
200
expires
Sat, 26 Jul 1997 05:00:00 GMT
cache-control
no-cache,must-revalidate,no-store,max-age=0,s-maxage=0
x-cache-hits
0
accept-ranges
bytes
x-served-by
cache-hhn4060-HHN
feed-card-placeholder.20190911-24-RELEASE.es6.js
cdn.taboola.com/libtrc/
5 KB
2 KB
Script
General
Full URL
https://cdn.taboola.com/libtrc/feed-card-placeholder.20190911-24-RELEASE.es6.js
Requested by
Host: cdn.taboola.com
URL: https://cdn.taboola.com/libtrc/stroeer-smb-giga/loader.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.14.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
58e1df23acbfa4f51cd1040a1fb1a85ff9ba6366467bf024174f6192efcb2afc

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

x-amz-version-id
tUa8GSC2HjFPg0TwGz88FiVMLzoAbxC3
content-encoding
gzip
etag
"4933a2ef93655b93050e7ce125194b74"
age
54
x-cache
HIT
status
200
x-amz-replication-status
COMPLETED
content-length
1290
x-amz-id-2
mUAnKiAyIftCpSXEDI4Q2WjBf4abB7xbQEShT1g4KMONm1azu0ia5jwEFeRHeiADOKPQFCmR6dk=
x-served-by
cache-fra19120-FRA
last-modified
Wed, 11 Sep 2019 13:42:19 GMT
server
AmazonS3
x-timer
S1568363832.893209,VS0,VE0
date
Fri, 13 Sep 2019 08:37:11 GMT
vary
Accept-Encoding
x-amz-request-id
6C9E51D22222120A
via
1.1 varnish
cache-control
private,max-age=14400
accept-ranges
bytes
content-type
application/javascript; charset=utf-8
abp
16
x-cache-hits
135
f89e1763-220d-4e09-ba69-9e040548fb7a.svg
cdn.taboola.com/static/f8/
4 KB
2 KB
Image
General
Full URL
https://cdn.taboola.com/static/f8/f89e1763-220d-4e09-ba69-9e040548fb7a.svg
Requested by
Host: cdn.taboola.com
URL: https://cdn.taboola.com/libtrc/impl.20190911-24-RELEASE.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.14.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
39b076e4bb4fab9b8a142499cf6155f8c128464974691a04de7e764f71b72618

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

x-amz-version-id
cMrDKn.emLmm9kiiOOF64ulDT4DRy6LK
content-encoding
gzip
etag
"b8b410e4b18d45aa2f3d9bc09cd335fb"
age
110
via
1.1 varnish
x-cache
HIT
status
200
x-amz-replication-status
COMPLETED
content-length
1758
x-amz-id-2
jvOSZ/pvYbbg+VNOKGWGEcP27x0d1oSka6Vh67caoyL1DXUEh82vNeaN+5ZhEZGStse+MTvzqBY=
x-served-by
cache-fra19120-FRA
last-modified
Wed, 07 Feb 2018 11:15:52 GMT
server
AmazonS3
x-timer
S1568363832.895747,VS0,VE0
date
Fri, 13 Sep 2019 08:37:11 GMT
vary
Accept-Encoding
access-control-allow-methods
GET
x-amz-request-id
290F68BD355FFAA8
access-control-allow-origin
*
cache-control
private,max-age=31536000
accept-ranges
bytes
content-type
image/svg+xml
access-control-allow-headers
*
abp
16
x-cache-hits
178
userx.20190911-24-RELEASE.es6.js
cdn.taboola.com/libtrc/
22 KB
8 KB
Script
General
Full URL
https://cdn.taboola.com/libtrc/userx.20190911-24-RELEASE.es6.js
Requested by
Host: cdn.taboola.com
URL: https://cdn.taboola.com/libtrc/stroeer-smb-giga/loader.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.14.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
3240c7e00ccd21fbdd141f58cb238c68bb59180a35dfb79df8bbe57e0d13b0fc

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

x-amz-version-id
FIROvmzvTvRsNpeDMFHG0FOuavH8QxIQ
content-encoding
gzip
etag
"0a4a3b57760282f54d71c05d1bf0b50c"
age
30
x-cache
HIT
status
200
x-amz-replication-status
COMPLETED
content-length
7736
x-amz-id-2
yDR7Y3B2Knt1GTJLMSo52LwJ7WyVEqT6Eai9tN56ENx7PNbL3YxobMtsH20UPRlb7Rh2/iohktg=
x-served-by
cache-fra19120-FRA
last-modified
Wed, 11 Sep 2019 13:42:26 GMT
server
AmazonS3
x-timer
S1568363832.906899,VS0,VE0
date
Fri, 13 Sep 2019 08:37:11 GMT
vary
Accept-Encoding
x-amz-request-id
959E15B6D31AB4AE
via
1.1 varnish
cache-control
private,max-age=14400
accept-ranges
bytes
content-type
application/javascript; charset=utf-8
abp
16
x-cache-hits
69
rtb-h
trc.taboola.com/sg/mediaforcebidder-network/1/ Frame EB20
Redirect Chain
  • https://rtb.mfadsrvr.com/sync?ssp=taboola
  • https://rtb.mfadsrvr.com/ul_cb/sync?ssp=taboola
  • https://trc.taboola.com/sg/mediaforcebidder-network/1/rtb-h?taboola_hm=a242b424-6ec4-4b30-a6db-5d104f9a81fd
0
168 B
Image
General
Full URL
https://trc.taboola.com/sg/mediaforcebidder-network/1/rtb-h?taboola_hm=a242b424-6ec4-4b30-a6db-5d104f9a81fd
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.14.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
nginx /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
via
1.1 varnish
server
nginx
x-timer
S1568363832.061739,VS0,VE8
x-cache
MISS
status
204
x-cache-hits
0
accept-ranges
bytes
x-served-by
cache-fra19120-FRA

Redirect headers

Location
//trc.taboola.com/sg/mediaforcebidder-network/1/rtb-h?taboola_hm=a242b424-6ec4-4b30-a6db-5d104f9a81fd
Date
Fri, 13 Sep 2019 08:37:11 GMT
Cache-Control
no-cache, no-store, must-revalidate
Connection
keep-alive
Content-Length
0
P3P
CP="NOI DSP COR NID CURa ADMa DEVa PSAa PSDa OUR BUS COM INT OTC PUR STA"
sync.php
pixel.rubiconproject.com/exchange/ Frame EB20
0
239 B
Image
General
Full URL
https://pixel.rubiconproject.com/exchange/sync.php?p=16698
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, RSA, AES_256_GCM
Server
69.173.144.165 Frankfurt am Main, Germany, ASN26667 (RUBICONPROJECT - The Rubicon Project, Inc., US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Expires
0
Cache-Control
no-cache,no-store,must-revalidate
P3P
CP="NOI CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT"
X-RPHost
6f9fd0201ed801884e5299d5aabca094
Content-Type
image/gif
/
trc.taboola.com/sg/powerlinksdsp-network/1/rtb-h/ Frame EB20
Redirect Chain
  • https://px.powerlinks.com/user/identify?sourceId=d4a7a706-ab0f-11e8-a038-127202fb7690&rurl=https%3A%2F%2Ftrc.taboola.com%2Fsg%2Fpowerlinksdsp-network%2F1%2Frtb-h%2F%3Ftaboola_hm%3D%24%7BUSER%7D
  • https://trc.taboola.com/sg/powerlinksdsp-network/1/rtb-h/?taboola_hm=MBIlj3p6qopdM6kzsrkZXIMqEESosvsUNnSznO5-oF8%3D
45 B
222 B
Image
General
Full URL
https://trc.taboola.com/sg/powerlinksdsp-network/1/rtb-h/?taboola_hm=MBIlj3p6qopdM6kzsrkZXIMqEESosvsUNnSznO5-oF8%3D
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.14.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
nginx /
Resource Hash
dc111a70984a9eda00752b06277113029ef288f1125c31eff2477413e15e8aa4

Request headers

User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
via
1.1 varnish
server
nginx
x-timer
S1568363832.061773,VS0,VE9
x-cache
MISS
status
200
x-cache-hits
0
accept-ranges
bytes
x-served-by
cache-fra19120-FRA

Redirect headers

Location
https://trc.taboola.com/sg/powerlinksdsp-network/1/rtb-h/?taboola_hm=MBIlj3p6qopdM6kzsrkZXIMqEESosvsUNnSznO5-oF8%3D
Date
Fri, 13 Sep 2019 08:37:11 GMT
Server
nginx
Connection
close
Etag
"MBIlj3p6qopdM6kzsrkZXIMqEESosvsUNnSznO5-oF8="
Content-Length
0
getuidnb
ib.adnxs.com/ Frame EB20
43 B
691 B
Image
General
Full URL
https://ib.adnxs.com/getuidnb?https://trc.taboola.com/sg/appnexus-network/1/rtb-h/?taboola_hm=$UID
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_ECDSA, AES_128_GCM
Server
37.252.173.27 , Ascension Island, ASN29990 (ASN-APPNEXUS - AppNexus, Inc, US),
Reverse DNS
539.bm-nginx-loadbalancer.mgmt.fra1.adnexus.net
Software
nginx/1.13.4 /
Resource Hash
4b5b6b15c6255109e06720cce42a06d3aead8b7874423d9c52cb0303212c25ef
Security Headers
Name Value
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:13 GMT
X-Proxy-Origin
144.76.109.30; 144.76.109.30; 539.bm-nginx-loadbalancer.mgmt.fra1; *.adnxs.com; 37.252.172.133:80
AN-X-Request-Uuid
ee14c585-4356-4383-a655-34c48e6fba38
Server
nginx/1.13.4
P3P
policyref="http://cdn.adnxs.com/w3c/policy/p3p.xml", CP="NOI DSP COR ADM PSAo PSDo OURo SAMo UNRo OTRo BUS COM NAV DEM STA PRE"
Access-Control-Allow-Origin
*
Cache-Control
no-store, no-cache, private
Access-Control-Allow-Credentials
true
Connection
keep-alive
Content-Type
image/gif
Content-Length
43
X-XSS-Protection
0
Expires
Sat, 15 Nov 2008 16:00:00 GMT
rtb-h
match.taboola.com/sg/google-network/1/ Frame EB20
Redirect Chain
  • https://cm.g.doubleclick.net/pixel?google_nid=taboola_dbm&google_cm&google_sc
  • https://cm.g.doubleclick.net/pixel?google_nid=taboola_dbm&google_cm=&google_sc=&google_tc=
  • https://trc.taboola.com/sg/google-network/1/rtb-h/?taboola_hm=CAESEOPJBbXA--_rbEDfJ43vtXg&google_cver=1
  • https://match.taboola.com/sg/google-network/1/rtb-h?taboola_hm=CAESEOPJBbXA--_rbEDfJ43vtXg&tbid=83b66293-abea-4be0-96bf-a51edb5f6755-tuct474dab8&query=taboola_hm%3DCAESEOPJBbXA--_rbEDfJ43vtXg%26goo...
0
76 B
Image
General
Full URL
https://match.taboola.com/sg/google-network/1/rtb-h?taboola_hm=CAESEOPJBbXA--_rbEDfJ43vtXg&tbid=83b66293-abea-4be0-96bf-a51edb5f6755-tuct474dab8&query=taboola_hm%3DCAESEOPJBbXA--_rbEDfJ43vtXg%26google_cver%3D1
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.114.49 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
nginx/1.13.12 /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
via
1.1 varnish
server
nginx/1.13.12
x-timer
S1568363832.102269,VS0,VE8
x-cache
MISS
status
200
x-cache-hits
0
accept-ranges
bytes
content-length
0
x-served-by
cache-hhn4060-HHN

Redirect headers

date
Fri, 13 Sep 2019 08:37:12 GMT
via
1.1 varnish
server
nginx
x-timer
S1568363832.061780,VS0,VE9
x-served-by
cache-fra19120-FRA
status
302
x-cache
MISS
location
https://match.taboola.com/sg/google-network/1/rtb-h?taboola_hm=CAESEOPJBbXA--_rbEDfJ43vtXg&tbid=83b66293-abea-4be0-96bf-a51edb5f6755-tuct474dab8&query=taboola_hm%3DCAESEOPJBbXA--_rbEDfJ43vtXg%26google_cver%3D1
accept-ranges
bytes
content-length
0
x-cache-hits
0
getuidnb
ib.adnxs.com/ Frame EB20
43 B
691 B
Image
General
Full URL
https://ib.adnxs.com/getuidnb?https://trc.taboola.com/sg/nca-appnexus-network/1/rtb-h/?taboola_hm=$UID
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_ECDSA, AES_128_GCM
Server
37.252.173.27 , Ascension Island, ASN29990 (ASN-APPNEXUS - AppNexus, Inc, US),
Reverse DNS
539.bm-nginx-loadbalancer.mgmt.fra1.adnexus.net
Software
nginx/1.13.4 /
Resource Hash
4b5b6b15c6255109e06720cce42a06d3aead8b7874423d9c52cb0303212c25ef
Security Headers
Name Value
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:13 GMT
X-Proxy-Origin
144.76.109.30; 144.76.109.30; 539.bm-nginx-loadbalancer.mgmt.fra1; *.adnxs.com; 37.252.172.244:80
AN-X-Request-Uuid
07d9f867-d0fd-4301-ac08-48c9dbd65b0e
Server
nginx/1.13.4
P3P
policyref="http://cdn.adnxs.com/w3c/policy/p3p.xml", CP="NOI DSP COR ADM PSAo PSDo OURo SAMo UNRo OTRo BUS COM NAV DEM STA PRE"
Access-Control-Allow-Origin
*
Cache-Control
no-store, no-cache, private
Access-Control-Allow-Credentials
true
Connection
keep-alive
Content-Type
image/gif
Content-Length
43
X-XSS-Protection
0
Expires
Sat, 15 Nov 2008 16:00:00 GMT
rtb-h
match.taboola.com/sg/thetradedesk-network/1/ Frame EB20
Redirect Chain
  • https://match.adsrvr.org/track/cmf/generic?ttd_pid=054f32o&ttd_tpi=1
  • https://match.adsrvr.org/track/cmb/generic?ttd_pid=054f32o&ttd_tpi=1
  • https://trc.taboola.com/sg/thetradedesk-network/1/rtb-h/?taboola_hm=266276d3-c8d0-4a3c-bc9a-e7e3b0f242a0
  • https://match.taboola.com/sg/thetradedesk-network/1/rtb-h?taboola_hm=266276d3-c8d0-4a3c-bc9a-e7e3b0f242a0&tbid=ee1d4616-c4d6-4f77-9c55-be9d1d78be2b-tuct474dab8&query=taboola_hm%3D266276d3-c8d0-4a3c...
0
52 B
Image
General
Full URL
https://match.taboola.com/sg/thetradedesk-network/1/rtb-h?taboola_hm=266276d3-c8d0-4a3c-bc9a-e7e3b0f242a0&tbid=ee1d4616-c4d6-4f77-9c55-be9d1d78be2b-tuct474dab8&query=taboola_hm%3D266276d3-c8d0-4a3c-bc9a-e7e3b0f242a0
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.114.49 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
nginx/1.13.12 /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
via
1.1 varnish
server
nginx/1.13.12
x-timer
S1568363832.213599,VS0,VE8
x-cache
MISS
status
200
x-cache-hits
0
accept-ranges
bytes
content-length
0
x-served-by
cache-hhn4060-HHN

Redirect headers

date
Fri, 13 Sep 2019 08:37:12 GMT
via
1.1 varnish
server
nginx
x-timer
S1568363832.187539,VS0,VE9
x-served-by
cache-fra19120-FRA
status
302
x-cache
MISS
location
https://match.taboola.com/sg/thetradedesk-network/1/rtb-h?taboola_hm=266276d3-c8d0-4a3c-bc9a-e7e3b0f242a0&tbid=ee1d4616-c4d6-4f77-9c55-be9d1d78be2b-tuct474dab8&query=taboola_hm%3D266276d3-c8d0-4a3c-bc9a-e7e3b0f242a0
accept-ranges
bytes
content-length
0
x-cache-hits
0
rtb-h
match.taboola.com/sg/storygize-network/1/ Frame EB20
Redirect Chain
  • https://www.storygize.net/ccm/4b560cdd-91f9-422b-adb7-e9dff26bc3ad?u=13a84ac7-135b-4347-b50f-d0bed2f9ea16-tuct474dab7
  • https://trc.taboola.com/sg/storygize-network/1/rtb-h?taboola_hm=a9e221a7-adc3-4401-b6f0-ac7bbb25e2d4
  • https://match.taboola.com/sg/storygize-network/1/rtb-h?taboola_hm=a9e221a7-adc3-4401-b6f0-ac7bbb25e2d4&tbid=ee1d4616-c4d6-4f77-9c55-be9d1d78be2b-tuct474dab8&query=taboola_hm%3Da9e221a7-adc3-4401-b6...
0
52 B
Image
General
Full URL
https://match.taboola.com/sg/storygize-network/1/rtb-h?taboola_hm=a9e221a7-adc3-4401-b6f0-ac7bbb25e2d4&tbid=ee1d4616-c4d6-4f77-9c55-be9d1d78be2b-tuct474dab8&query=taboola_hm%3Da9e221a7-adc3-4401-b6f0-ac7bbb25e2d4
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.114.49 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
nginx/1.13.12 /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
via
1.1 varnish
server
nginx/1.13.12
x-timer
S1568363832.188247,VS0,VE8
x-cache
MISS
status
200
x-cache-hits
0
accept-ranges
bytes
content-length
0
x-served-by
cache-hhn4060-HHN

Redirect headers

date
Fri, 13 Sep 2019 08:37:12 GMT
via
1.1 varnish
server
nginx
x-timer
S1568363832.109006,VS0,VE9
x-served-by
cache-fra19120-FRA
status
302
x-cache
MISS
location
https://match.taboola.com/sg/storygize-network/1/rtb-h?taboola_hm=a9e221a7-adc3-4401-b6f0-ac7bbb25e2d4&tbid=ee1d4616-c4d6-4f77-9c55-be9d1d78be2b-tuct474dab8&query=taboola_hm%3Da9e221a7-adc3-4401-b6f0-ac7bbb25e2d4
accept-ranges
bytes
content-length
0
x-cache-hits
0
cookiesync
bttrack.com/pixel/ Frame EB20
35 B
380 B
Image
General
Full URL
https://bttrack.com/pixel/cookiesync?source=14b8c562-d12b-418b-b680-ad517d5839ec
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, RSA, AES_128_GCM
Server
192.132.33.46 , United States, ASN18568 (BIDTELLECT - Bidtellect Inc., US),
Reverse DNS
46.bidtellect.com
Software
Microsoft-IIS/8.5 /
Resource Hash
6adc3d4c1056996e4e8b765a62604c78b1f867cceb3b15d0b9bedb7c4857f992

Request headers

Sec-Fetch-Mode
no-cors
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

X-ServerName
Track001-dc3
Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:12 GMT
X-AspNetMvc-Version
5.2
Server
Microsoft-IIS/8.5
X-AspNet-Version
4.0.30319
P3P
CP="CAO DSP COR ADMo DEVo PSAo PSDo HISo IVAo IVDo OUR IND OTC"
Cache-Control
private,no-cache
Content-Type
image/gif
Content-Length
35
Expires
-1
/
cds.taboola.com/ Frame EB20
0
292 B
Image
General
Full URL
https://cds.taboola.com/?uid=13a84ac7-135b-4347-b50f-d0bed2f9ea16-tuct474dab7&_r=2443246
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
130.211.13.252 Mountain View, United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
252.13.211.130.bc.googleusercontent.com
Software
nginx/1.12.2 /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:12 GMT
Via
1.1 varnish
Server
nginx/1.12.2
X-Timer
S1568363832.206811,VS0,VE67
X-Served-By
cache-bwi5029-BWI
X-Cache
MISS
x-envoy-upstream-service-time
0
Connection
close
Accept-Ranges
bytes
Content-Length
0
X-Cache-Hits
0
rtb-h
match.taboola.com/sg/bidswitch-network/1/ Frame EB20
Redirect Chain
  • https://x.bidswitch.net/sync?ssp=taboola
  • https://x.bidswitch.net/ul_cb/sync?ssp=taboola
  • https://p.rfihub.com/cm?in=1&pub=20513&ssp=taboola
  • https://x.bidswitch.net/sync?dsp_id=119&user_id=1870471592723090393&expires=30&ssp=taboola
  • https://trc.taboola.com/sg/bidswitch-network/1/rtb-h/?taboola_hm=78033ce9-fc17-471d-b267-a892a027f645
  • https://match.taboola.com/sg/bidswitch-network/1/rtb-h?taboola_hm=78033ce9-fc17-471d-b267-a892a027f645&tbid=ee1d4616-c4d6-4f77-9c55-be9d1d78be2b-tuct474dab8&query=taboola_hm%3D78033ce9-fc17-471d-b2...
0
52 B
Image
General
Full URL
https://match.taboola.com/sg/bidswitch-network/1/rtb-h?taboola_hm=78033ce9-fc17-471d-b267-a892a027f645&tbid=ee1d4616-c4d6-4f77-9c55-be9d1d78be2b-tuct474dab8&query=taboola_hm%3D78033ce9-fc17-471d-b267-a892a027f645
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.114.49 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
nginx/1.13.12 /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
via
1.1 varnish
server
nginx/1.13.12
x-timer
S1568363832.326402,VS0,VE8
x-cache
MISS
status
200
x-cache-hits
0
accept-ranges
bytes
content-length
0
x-served-by
cache-hhn4060-HHN

Redirect headers

date
Fri, 13 Sep 2019 08:37:12 GMT
via
1.1 varnish
server
nginx
x-timer
S1568363832.305534,VS0,VE9
x-served-by
cache-fra19120-FRA
status
302
x-cache
MISS
location
https://match.taboola.com/sg/bidswitch-network/1/rtb-h?taboola_hm=78033ce9-fc17-471d-b267-a892a027f645&tbid=ee1d4616-c4d6-4f77-9c55-be9d1d78be2b-tuct474dab8&query=taboola_hm%3D78033ce9-fc17-471d-b267-a892a027f645
accept-ranges
bytes
content-length
0
x-cache-hits
0
collect
www.google-analytics.com/r/
35 B
101 B
Image
General
Full URL
https://www.google-analytics.com/r/collect?v=1&_v=j79&aip=1&a=152266267&t=event&ni=1&_s=12&dl=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ul=en-us&de=UTF-8&dt=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&sd=24-bit&sr=1600x1200&vp=1585x1200&je=0&ec=Taboola&ea=embed&el=Below%20Article%20Feed%20-%20Video%20%7C%20Card%201&_u=6GBAAEADQ~&jid=669481070&gjid=1484335192&cid=130780938.1568363831&tid=UA-204785-4&_gid=55287414.1568363831&_r=1&cd1=Robert%20Schanze&cd5=2016-09-22T12%3A00%3A41%2B02%3A00&cg1=Howtos%2FTipps&cg2=2857946&cg3=09-2016&cd2=software&cd6=evergreen&cd8=website&cd3=2174540&cd15=website&cd17=not%20logged%20in&cd24=default&cd37=office-business%2C%20private-firmen-finanzen-office-business&cd42=legacy&cm73=1&cm13=1&z=107811752
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:825::200e Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Golfe2 /
Resource Hash
8337212354871836e6763a41e615916c89bac5b3f1f0adf60ba43c7c806e1015
Security Headers
Name Value
X-Content-Type-Options nosniff

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:11 GMT
x-content-type-options
nosniff
last-modified
Sun, 17 May 1998 03:00:00 GMT
server
Golfe2
status
200
content-type
image/gif
access-control-allow-origin
*
cache-control
no-cache, no-store, must-revalidate
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
35
expires
Fri, 01 Jan 1990 00:00:00 GMT
data
lb59.s400.meetrics.net/
43 B
308 B
Image
General
Full URL
https://lb59.s400.meetrics.net/data?/J1/wDjNAAKktFLkqFFlqwF23A52AwwA/k0FGEmvFytFh0FjvFklF9iEsvFjrFlyFmhEk2F9yA42A35A13A1mAjwFpkF9kElzFr0FvwFmhEwhF90A04AyzA44Ay5AymAjpFk9BxzA4yAx2Ay0A1zA3yAmzEp6Fl9Bx4ExmAzpF0lF9nEpnFhuBklFfzFkmBwsFhjFl9BzvFm0F3hFylFmhEwiF9vE10FtvEmtBwhFnlFmhEwjF90A04AyzA44Ay5AymAhwFk9B00A4yAz4A4yA5yAmhEwlF9lAyGE00A00AlyAGnFpnFhuBklFfzFklByGEzvFm0F3hFylFfhFy0FprFlsFlyAGvF10FtvEmtBwhFnlFmhEkjF9kEpyFljF0mBttFvkFl9BklFmhF1sF0mBjiF9xA12A4zA2zA4zAx4AyyALlnFBUkzFYBP9LAAAAAAABAgdAPCAAFAAAgdTA5iAPAAAAAAAAABA5iAZBAAOA55A55A85B55A58E55A55AGAxyAw4AzyArA5iASksFSFjAAAAAAAAAAAAEAAAAgdAAAAAAAHAklFzrF0vFwBFIAzvFm0F3hFylFKAnpFnhFukElfFzkFDAx4ExBEMAxzA4yAx2Ay0A1zA3yAGAkpFylFj0FAAAAIAy4A23A51A31AKA00A4yAz4A4yA5yALAv1F0tBvmFtwEhnFlBFKA00A4yAz4A4yA5yAKA00A4yAz4A4yA5yA1AlyAG0B00A0lAyGEnpFnhFukElfFzkFlyAGzFvmF03FhyFlfFhyF0pFrlFslByGEv1F0tBvmFtwEhnFlBFdAAAAAAAAAAAAFAAAA5iAAAAAHAisFvjFrlFyBFAAAAAAAAAAAAAAAAQtjFH/gCUA
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
136.243.5.11 , Germany, ASN24940 (HETZNER-AS, DE),
Reverse DNS
h232.meetrics.de
Software
nginx /
Resource Hash
548f2d6f4d0d820c6c5ffbeffcbd7f0e73193e2932eefe542accc84762deec87

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
Server
nginx
Transfer-Encoding
chunked
Content-Type
image/gif
Cache-control
no-cache,no-store,must-revalidate
Connection
keep-alive
Expires
Fri, 13-Sep-19 08:37:10 GMT
available
trc.taboola.com/stroeer-smb-giga/log/3/
0
250 B
XHR
General
Full URL
https://trc.taboola.com/stroeer-smb-giga/log/3/available?tvi2=852&route=AM%3AAM%3AV&lti=deflated
Requested by
Host: cdn.taboola.com
URL: https://cdn.taboola.com/libtrc/impl.20190911-24-RELEASE.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.14.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
nginx /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-Type
application/x-www-form-urlencoded

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:11 GMT
via
1.1 varnish
server
nginx
x-timer
S1568363832.944600,VS0,VE9
x-served-by
cache-fra19120-FRA
status
204
x-cache
MISS
p3p
policyref="http://trc.taboola.com/p3p.xml", CP="NOI DSP COR LAW NID CURa ADMa DEVa PSAa PSDa OUR BUS IND UNI COM NAV INT DEM"
access-control-allow-origin
https://www.giga.de
cache-control
no-cache
access-control-allow-credentials
true
accept-ranges
bytes
content-type
image/gif
x-cache-hits
0
available
trc.taboola.com/stroeer-smb-giga/log/3/
0
80 B
XHR
General
Full URL
https://trc.taboola.com/stroeer-smb-giga/log/3/available?tvi2=852&route=AM%3AAM%3AV&lti=deflated
Requested by
Host: cdn.taboola.com
URL: https://cdn.taboola.com/libtrc/impl.20190911-24-RELEASE.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.14.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
nginx /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-Type
application/x-www-form-urlencoded

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:11 GMT
via
1.1 varnish
server
nginx
x-timer
S1568363832.945589,VS0,VE9
x-served-by
cache-fra19120-FRA
status
204
x-cache
MISS
p3p
policyref="http://trc.taboola.com/p3p.xml", CP="NOI DSP COR LAW NID CURa ADMa DEVa PSAa PSDa OUR BUS IND UNI COM NAV INT DEM"
access-control-allow-origin
https://www.giga.de
cache-control
no-cache
access-control-allow-credentials
true
accept-ranges
bytes
content-type
image/gif
x-cache-hits
0
available
trc.taboola.com/stroeer-smb-giga/log/3/
0
55 B
XHR
General
Full URL
https://trc.taboola.com/stroeer-smb-giga/log/3/available?tvi2=852&route=AM%3AAM%3AV&lti=deflated
Requested by
Host: cdn.taboola.com
URL: https://cdn.taboola.com/libtrc/impl.20190911-24-RELEASE.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.14.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
nginx /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-Type
application/x-www-form-urlencoded

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:11 GMT
via
1.1 varnish
server
nginx
x-timer
S1568363832.946777,VS0,VE9
x-served-by
cache-fra19120-FRA
status
204
x-cache
MISS
p3p
policyref="http://trc.taboola.com/p3p.xml", CP="NOI DSP COR LAW NID CURa ADMa DEVa PSAa PSDa OUR BUS IND UNI COM NAV INT DEM"
access-control-allow-origin
https://www.giga.de
cache-control
no-cache
access-control-allow-credentials
true
accept-ranges
bytes
content-type
image/gif
x-cache-hits
0
available
trc.taboola.com/stroeer-smb-giga/log/3/
0
54 B
XHR
General
Full URL
https://trc.taboola.com/stroeer-smb-giga/log/3/available?tvi2=852&route=AM%3AAM%3AV&lti=deflated
Requested by
Host: cdn.taboola.com
URL: https://cdn.taboola.com/libtrc/impl.20190911-24-RELEASE.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.14.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
nginx /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-Type
application/x-www-form-urlencoded

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:11 GMT
via
1.1 varnish
server
nginx
x-timer
S1568363832.952517,VS0,VE9
x-served-by
cache-fra19120-FRA
status
204
x-cache
MISS
p3p
policyref="http://trc.taboola.com/p3p.xml", CP="NOI DSP COR LAW NID CURa ADMa DEVa PSAa PSDa OUR BUS IND UNI COM NAV INT DEM"
access-control-allow-origin
https://www.giga.de
cache-control
no-cache
access-control-allow-credentials
true
accept-ranges
bytes
content-type
image/gif
x-cache-hits
0
userconnect.js
js.adscale.de/
13 KB
5 KB
Script
General
Full URL
https://js.adscale.de/userconnect.js
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.234.72 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-234-72.deploy.static.akamaitechnologies.com
Software
AmazonS3 /
Resource Hash
43a795a6f470126a6e79eca19330eab92301736e1d85d78d5e3db5956fd85630

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

x-amz-version-id
QigX3ZX5MGiAmAJwYlP84.EpHqCiK9Yx
Content-Encoding
gzip
Last-Modified
Thu, 05 Sep 2019 23:46:39 GMT
Server
AmazonS3
x-amz-request-id
31BE18F60EE95BB3
ETag
"5378ec64224df70177fba5bf02e1eb95"
Vary
Accept-Encoding
Content-Type
text/javascript
Cache-Control
max-age=300
Date
Fri, 13 Sep 2019 08:37:11 GMT
Connection
keep-alive
Accept-Ranges
bytes
Content-Length
4106
x-amz-id-2
IdaVAl1604pfq6JwXhPQZmq7SpSyJoUJfwVVhRXUnMBWynW8rBQqVfzyqc7y5KqDybLXGD8qdIs=
0
d.nativendo.de/cds/delivery/render/54g3euww/182yo/5ik1s/7p9ts/
4 KB
1 KB
Script
General
Full URL
https://d.nativendo.de/cds/delivery/render/54g3euww/182yo/5ik1s/7p9ts/0
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
107.178.241.34 , United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
34.241.178.107.bc.googleusercontent.com
Software
Apache /
Resource Hash
6cbed10dafbec73cfc50203d43d95a933c1471ebac77cd2c7b05ba5bb16a296f

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:11 GMT
content-encoding
gzip
last-modified
Fri, 13 Sep 2019 08:37:11 GMT
server
Apache
vary
Accept-Encoding
content-type
text/javascript; charset=utf8
status
200
cache-control
no-transform, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
alt-svc
clear
content-length
1443
via
1.1 google
expires
Sat, 26 Jul 1997 05:00:00 GMT
b1f3c352-b1b2-43e0-a354-c70ab8fe3440
t.nativendo.de/cds/tracking/event/
0
171 B
Script
General
Full URL
https://t.nativendo.de/cds/tracking/event/b1f3c352-b1b2-43e0-a354-c70ab8fe3440?aid=182yo&floor=YjFmM2MzNTItYjFiMi00MxrgQCH4EWyCLJyTvA&cpm=&dsp=1&t[0]=rtb%2Fauction&t[1]=rtb%2Frequest&ar=0&url=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ts=1568363832
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
107.178.241.34 , United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
34.241.178.107.bc.googleusercontent.com
Software
Apache /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:11 GMT
via
1.1 google
last-modified
Fri, 13 Sep 2019 08:37:11 GMT
server
Apache
p3p
CP="This is not a p3p policy."
status
200
cache-control
no-transform, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
content-type
text/javascript; charset=utf8
alt-svc
clear
content-length
0
expires
Sat, 26 Jul 1997 05:00:00 GMT
tag.aspx
ml314.com/ Frame C71B
26 KB
12 KB
Script
General
Full URL
https://ml314.com/tag.aspx?138
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
34.247.144.106 Dublin, Ireland, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
ec2-34-247-144-106.eu-west-1.compute.amazonaws.com
Software
Microsoft-IIS/10.0 / ASP.NET
Resource Hash
390a28be2ca4bcea5b71fe050295281a1a8fc99175690cdd62de378190400acb

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:11 GMT
Content-Encoding
gzip
Last-Modified
Fri, 13 Sep 2019 06:04:22 GMT
Server
Microsoft-IIS/10.0
X-AspNet-Version
4.0.30319
X-Powered-By
ASP.NET
Vary
Accept-Encoding
Content-Type
application/javascript; charset=utf-8
Cache-Control
public, max-age=77230
Connection
keep-alive
Content-Length
11933
Expires
Sat, 14 Sep 2019 06:04:22 GMT
ids.js
cdn.tynt.com/
10 KB
4 KB
Script
General
Full URL
https://cdn.tynt.com/ids.js
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
104.16.88.26 , United States, ASN13335 (CLOUDFLARENET - Cloudflare, Inc., US),
Reverse DNS
Software
cloudflare /
Resource Hash
044855d5075e966e6f7a57b588d1e4ca643d7a0620f8f47e57a5d26b8a4459cb

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
content-encoding
gzip
cf-cache-status
HIT
last-modified
Thu, 12 Sep 2019 17:54:53 GMT
server
cloudflare
age
52850
etag
W/"5d7a866d-26f8"
expect-ct
max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
vary
Accept-Encoding
content-type
application/javascript
status
200
cache-control
public, max-age=259200
cf-ray
5158cc3e8864e007-FRA
expires
Mon, 16 Sep 2019 08:37:12 GMT
sovrn
pd.sharethis.com/pd/ Frame C71B
0
170 B
Script
General
Full URL
https://pd.sharethis.com/pd/sovrn
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
18.194.251.73 Frankfurt am Main, Germany, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
ec2-18-194-251-73.eu-central-1.compute.amazonaws.com
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:12 GMT
Connection
keep-alive
X-Robots-Tag
noindex, nofollow
Content-Length
0
Content-Type
application/javascript
pixel
ps.eyeota.net/ Frame C71B
0
141 B
Script
General
Full URL
https://ps.eyeota.net/pixel?pid=51md42u&t=ajs&uid=
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
18.195.251.148 Frankfurt am Main, Germany, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
ec2-18-195-251-148.eu-central-1.compute.amazonaws.com
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:12 GMT
Cache-control
private
Content-Length
0
merge
ce.lijit.com/ Frame C71B
0
403 B
Image
General
Full URL
https://ce.lijit.com/merge?pid=5176&3pid=1
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
72.251.249.9 Amsterdam, Netherlands, ASN29791 (VOXEL-DOT-NET - Internap Corporation, US),
Reverse DNS
Software
nginx / raptor
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:12 GMT
Server
nginx
X-Powered-By
raptor
P3P
CP="CUR ADM OUR NOR STA NID"
Cache-Control
private, no-cache, no-store, must-revalidate, proxy-revalidate, max-age=0, s-maxage=0
X-Sovrn-Pod
ap3ams1
Content-Type
text/html;charset=utf-8
X-Application-Context
application:prod:9080
Expires
Fri, 20 Mar 2009 00:00:00 GMT
validateCookie
segments.company-target.com/ Frame C71B
Redirect Chain
  • https://segments.company-target.com/log?vendor=sovrn&user_id=
  • https://segments.company-target.com/validateCookie?vendor=sovrn&user_id=&verifyHash=4daa1f715e78758d91db6ee0d56237b94dc0407
26 B
390 B
Image
General
Full URL
https://segments.company-target.com/validateCookie?vendor=sovrn&user_id=&verifyHash=4daa1f715e78758d91db6ee0d56237b94dc0407
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
143.204.214.111 Seattle, United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
server-143-204-214-111.fra53.r.cloudfront.net
Software
/
Resource Hash
3b7b8a4b411ddf8db9bacc2f3aabf406f8e4c0c087829b336ca331c40adfdff1

Request headers

Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:12 GMT
Via
1.1 c714e4f593454d65f62cf3fecf756a4c.cloudfront.net (CloudFront)
X-Amz-Cf-Pop
FRA53-C1
Vary
Origin
X-Cache
Miss from cloudfront
Content-Type
image/gif
Connection
keep-alive
trace-id
a21202c8544db12f
Content-Length
26
X-Amz-Cf-Id
x0udnATGMzJ57h4iqz1JZO_PyaZ8CVOx5aY1yOLwrmk9b9IRURRyUA==

Redirect headers

Date
Fri, 13 Sep 2019 08:37:12 GMT
Via
1.1 c714e4f593454d65f62cf3fecf756a4c.cloudfront.net (CloudFront)
X-Amz-Cf-Pop
FRA53-C1
Vary
Origin
X-Cache
Miss from cloudfront
Location
/validateCookie?vendor=sovrn&user_id=&verifyHash=4daa1f715e78758d91db6ee0d56237b94dc0407
Connection
keep-alive
trace-id
bfecd35ce561d940
Content-Length
0
X-Amz-Cf-Id
B_kkDhcwfugIVygGG49Z5wjMusPch7bDep9NbjKsYjAC1O7iTob9EQ==
/
p.adsymptotic.com/d/px/ Frame C71B
43 B
339 B
Image
General
Full URL
https://p.adsymptotic.com/d/px/?_pid=15697&_psign=0a885fb568701ac53478d88866a10345&_pu&_puuid=&_redirect=https%3A%2F%2Fce.lijit.com%2Fmerge%3Fpid%3D5014%263pid%3D${UUID}&_rand=928527
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
104.18.100.194 , United States, ASN13335 (CLOUDFLARENET - Cloudflare, Inc., US),
Reverse DNS
Software
cloudflare /
Resource Hash
cf4724b2f736ed1a0ae6bc28f1ead963d9cd2c1fd87b6ef32e7799fc1c5c8bda

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
last-modified
Mon, 28 Sep 1970 06:00:00 GMT
server
cloudflare
expect-ct
max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
content-type
image/gif
status
200
cf-ray
5158cc3f3e229704-FRA
content-length
43
collect
dx.bigsea.weborama.com/ Frame C71B
61 B
61 B
Image
General
Full URL
https://dx.bigsea.weborama.com/collect?dsp_id=5
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
52.51.225.28 Dublin, Ireland, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
ec2-52-51-225-28.eu-west-1.compute.amazonaws.com
Software
nginx /
Resource Hash
dc7e04c832ffdf83f88939ad31570584f01e2bb63b91e5daf004f43e0ebe7b91

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:12 GMT
Last-Modified
Fri, 13 Sep 2019 08:37:12 GMT
Server
nginx
P3P
CP="NOI DSP COR CURa DEVa PSAa OUR STP UNI DEM"
Access-Control-Allow-Origin
*
Cache-Control
no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0
Connection
keep-alive
Content-Length
61
Expires
Tue, 03 Jul 2001 06:00:00 GMT
ct
ap.lijit.com/data/ Frame C71B
43 B
207 B
Image
General
Full URL
https://ap.lijit.com/data/ct?tid=m_600632_45532139e81c4e8bbf3679b772028ca8&zoneid=600632&cid=18&geo=DE&all_tags=130%2C133%2C134%2C138%2C151%2C174%2C185%2C203%2C205%2C206%2C211%2C234%2C239%2C241%2C248%2C265%2C277%2C309%2C331%2C332%2C333%2C334%2C335%2C336%2C369%2C380%2C381%2C383%2C388%2C396%2C413%2C415%2C417%2C420%2C421%2C423%2C429%2C444%2C450%2C454%2C455%2C460%2C466%2C472&tss=77%2C78%2C79%2C80%2C80%2C81%2C82%2C102&fired_tags=138%2C151%2C234%2C265%2C309%2C369%2C388%2C421&count=8&status=8%2C8%2C8%2C1%2C1%2C8%2C8%2C8%2C8%2C8%2C8%2C1%2C8%2C8%2C8%2C1%2C8%2C1%2C8%2C8%2C8%2C8%2C8%2C8%2C1%2C8%2C8%2C8%2C1%2C8%2C8%2C8%2C8%2C8%2C1%2C8%2C8%2C8%2C8%2C8%2C8%2C8%2C8%2C8&elapsed_ms=105
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
72.251.249.9 Amsterdam, Netherlands, ASN29791 (VOXEL-DOT-NET - Internap Corporation, US),
Reverse DNS
Software
nginx / podlogging
Resource Hash
b1442e85b03bdcaf66dc58c7abb98745dd2687d86350be9a298a1d9382ac849b

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:12 GMT
Server
nginx
X-Sovrn-Pod
ap3ams1
X-Powered-By
podlogging
Content-Length
43
Content-Type
image/gif
f539211219b796ffbb49949997c764f0.png
cdn.taboola.com/libtrc/static/thumbnails/
254 B
704 B
Image
General
Full URL
https://cdn.taboola.com/libtrc/static/thumbnails/f539211219b796ffbb49949997c764f0.png
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.14.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
f68019eb4b4e5933301d4ee75969e0cb94ed8333bf514630fa749eb9c3e483c9

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

x-amz-version-id
hL.cyLD7Q4TL5ceY.7JQwF9m5IYI8mkC
via
1.1 varnish
etag
"dfa7b52c86e56bd67fa4002f6ed19854"
age
17128
x-cache
HIT
status
200
x-amz-replication-status
COMPLETED
content-length
254
x-amz-id-2
Vjnfq2okxpLEG/cBVxSfv3DOOCGN7KTpixt29L7DwUhoZL6eRlgDSODZqhfatrYL58q01gaLKf4=
x-served-by
cache-fra19120-FRA
last-modified
Wed, 24 Jun 2015 07:14:11 GMT
server
AmazonS3
x-amz-meta-s3cmd-attrs
uid:0/gname:root/uname:root/gid:0/mode:33188/mtime:1377415166/atime:1435052450/md5:dfa7b52c86e56bd67fa4002f6ed19854/ctime:1422381567
x-timer
S1568363832.202436,VS0,VE0
date
Fri, 13 Sep 2019 08:37:12 GMT
x-amz-request-id
F6D91014AAA6CDC4
cache-control
private,max-age=31536000
accept-ranges
bytes
content-type
image/png
abp
75
x-cache-hits
18852
vast
tracking.m6r.eu/sync/ Frame 4E21
490 B
735 B
XHR
General
Full URL
https://tracking.m6r.eu/sync/vast?checkcookies=true&ibbId=&slotId=346a3f1b-2167-4e54-8af3-4a8d2910a189&target=https%3A%2F%2Fvideo-adserver.ibillboard.com%2FgetAd%3Ftagid%3D346a3f1b-2167-4e54-8af3-4a8d2910a189%26bust%3D6b2231e7ae%26ref%3Dhttps%253A%252F%252Fwww.giga.de%252Fwebapps%252Fpaypal%252Ftipps%252Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%252F%26ngresponse%3Dtrue%26nu%3D%24%24DMP_SEGMENTS_NUGGAD%24%24%26impid%3Da9145aca-d802-42e7-b0df-0dd4b93c7189
Requested by
Host: media.oadts.com
URL: https://media.oadts.com/www/delivery/video.php?dt=inline&mw=300&sm=1&tm=0&vp=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
104.109.82.87 , Netherlands, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
a104-109-82-87.deploy.static.akamaitechnologies.com
Software
nginx /
Resource Hash
375d0a37ed1af4a9783323fa1f3760dbdb5a61eea7a349875e317ba2978d4706

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Access-Control-Allow-Origin
https://www.giga.de
Date
Fri, 13 Sep 2019 08:37:12 GMT
Access-Control-Allow-Credentials
true
Server
nginx
Connection
keep-alive
Content-Length
490
Content-Type
text/xml; charset=utf-8
5002100619
dfp-gateway.s-onetag.com/1/4444/
109 B
576 B
XHR
General
Full URL
https://dfp-gateway.s-onetag.com/1/4444/5002100619
Requested by
Host: get.s-onetag.com
URL: https://get.s-onetag.com/1400a607-dbd1-49d7-9171-69ce05c71f5e/tag.min.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
2600:9000:2057:1a00:a:52eb:a100:93a1 , United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
Software
/
Resource Hash
3b1011d0eada4c1977bc4c2d1036d1d4618c4361e870bcd81057e60fd5771d9b

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:11:34 GMT
via
1.1 e0064d0a2437e206ed082e1fa1cdae61.cloudfront.net (CloudFront), 1.1 87b272b7d9b97f38da15c91c833c3292.cloudfront.net (CloudFront)
age
1538
x-amzn-requestid
19ec8caa-64a6-4315-a6c7-96e08668167f
status
200
x-cache
Hit from cloudfront
content-type
application/json
access-control-allow-origin
*
cache-control
max-age=3600, public
x-amzn-trace-id
Root=1-5d7b4f36-57960350b50cf7d080183280;Sampled=0
x-amz-cf-pop
FRA53-C1, FRA6-C1
x-amz-apigw-id
f8lQjF68SK4Fvsw=
content-length
109
x-amz-cf-id
ZFYz1VZFHtqU4G1wGMNPZM_04V_QIvtBcYOxkKpqXAgNSYOtH26z3g==
4482388292
dfp-gateway.s-onetag.com/1/4444/
111 B
578 B
XHR
General
Full URL
https://dfp-gateway.s-onetag.com/1/4444/4482388292
Requested by
Host: get.s-onetag.com
URL: https://get.s-onetag.com/1400a607-dbd1-49d7-9171-69ce05c71f5e/tag.min.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
2600:9000:2057:1a00:a:52eb:a100:93a1 , United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
Software
/
Resource Hash
3e82f5310fe957108f5b1f2c3c701763f296b335802dbc630704331974feb40c

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:17:12 GMT
via
1.1 71dbd5706c5b0c7b733248e1171f2d4f.cloudfront.net (CloudFront), 1.1 87b272b7d9b97f38da15c91c833c3292.cloudfront.net (CloudFront)
age
1200
x-amzn-requestid
2cd8f51b-d66d-4348-8a50-2eb0e96524fc
status
200
x-cache
Hit from cloudfront
content-type
application/json
access-control-allow-origin
*
cache-control
max-age=3600, public
x-amzn-trace-id
Root=1-5d7b5088-cd7656a0ad5c5d0955425f5a;Sampled=0
x-amz-cf-pop
FRA2-C2, FRA6-C1
x-amz-apigw-id
f8mFQFk0yK4FvZg=
content-length
111
x-amz-cf-id
VHW3M-gNgdxnBMMYgQJ5oqh36spNCUDbcRH1Yu4X5yG3dSWmlpxaFA==
497d60b6-19f9-4364-826a-4980dffcc58e.jpg
c.nativendo.de/cdn/asset/media/crt/47756/2/3/
15 KB
15 KB
Image
General
Full URL
https://c.nativendo.de/cdn/asset/media/crt/47756/2/3/497d60b6-19f9-4364-826a-4980dffcc58e.jpg?v=1567609566&width=350
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2606:4700:20::6819:ad0d , United States, ASN13335 (CLOUDFLARENET - Cloudflare, Inc., US),
Reverse DNS
Software
cloudflare /
Resource Hash
599d6aec60d8329438a61c79ff5070d78c6836c74ef88e94d3afd96afca6d3d8

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
via
1.1 google
cf-cache-status
HIT
age
154373
cf-polished
origFmt=jpeg, origSize=17994
status
200
content-disposition
inline; filename="497d60b6-19f9-4364-826a-4980dffcc58e.webp"
alt-svc
clear
content-length
15374
cf-bgj
imgq:100
server
cloudflare
expect-ct
max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
vary
Accept
content-type
image/webp
cache-control
public, max-age=31536000
accept-ranges
bytes
cf-ray
5158cc3f5d838c62-VIE
expires
Sat, 12 Sep 2020 08:37:12 GMT
ai.aspx
m.exactag.com/
Redirect Chain
  • https://ad.doubleclick.net/ddm/ad/N32804.1918787SEEDINGALLIANCE/B23123253.254901498;sz=1x1;ord=1568363831;dc_lat=;dc_rdid=;tag_for_child_directed_treatment=;tfua=?
  • https://ad.doubleclick.net/ddm/ad/N32804.1918787SEEDINGALLIANCE/B23123253.254901498;dc_pre=CNn948iyzeQCFQ6R3godBg8FdQ;sz=1x1;ord=1568363831;dc_lat=;dc_rdid=;tag_for_child_directed_treatment=;tfua=?
  • https://m.exactag.com/ai.aspx?extProvId=8&extPu=64752-dcm&extLi=23123253&extCr=117572826&extPm=254901498
43 B
655 B
Image
General
Full URL
https://m.exactag.com/ai.aspx?extProvId=8&extPu=64752-dcm&extLi=23123253&extCr=117572826&extPm=254901498
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
85.14.248.91 Bottrop, Germany, ASN24961 (MYLOC-AS, DE),
Reverse DNS
Software
Microsoft-IIS/8.5 / ASP.NET
Resource Hash
afe0dcfca292a0fae8bce08a48c14d3e59c9d82c6052ab6d48a22ecc6c48f277

Request headers

Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:11 GMT
X-ET-Code
0
Server
Microsoft-IIS/8.5
X-AspNet-Version
4.0.30319
X-Powered-By
ASP.NET
P3P
policyref="https://m.exactag.com/w3c/p3p.xml", CP="NOI NID STP STA CUR OUR"
Cache-Control
private
Last-Modified
Fr, 13 Sep 2019 08:37:12 GMT
X-ET-Camp
1692
Connection
close
Content-Type
image/gif
Content-Length
43
Expires
Mon, 26 Jul 1997 05:00:00 GMT

Redirect headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:12 GMT
x-content-type-options
nosniff
server
cafe
p3p
policyref="https://googleads.g.doubleclick.net/pagead/gcn_p3p_.xml", CP="CURa ADMa DEVa TAIo PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
status
302
content-type
text/html; charset=UTF-8
location
https://m.exactag.com/ai.aspx?extProvId=8&extPu=64752-dcm&extLi=23123253&extCr=117572826&extPm=254901498
cache-control
no-cache, must-revalidate
timing-allow-origin
*
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
0
x-xss-protection
0
expires
Fri, 01 Jan 1990 00:00:00 GMT
view
securepubads.g.doubleclick.net/pcs/ Frame 9AB9
0
61 B
Fetch
General
Full URL
https://securepubads.g.doubleclick.net/pcs/view?xai=AKAOjsuLN_hB3MAKThT_zPniRCpWqEE_xLEgWWwPdQBDTLV4G2eyQliH0JX0zYTGnEL8hSAegc_ebc1hll6S6HrI0rxgZRlZPZai0n-qrXt47Sflkw8ICmZ9_XnCWxPNI6pA0D-TCMjmG3zu8Np_glZizFScNCTgQq24Rdbi9lxWMaozSeJUqoBJRBTlj4lM-6Jec_P0q_s7KHJnUG9-xa9YCu2C5ctbKADaqVz0aYKNk2IQc5JNg6OFxSn__5BZtF2qboMidqgBbltlpXWNOF4xobvqJ8-OiiXb6gcHlh6lQGRz&sig=Cg0ArKJSzA5PFw_-0a9BEAE&urlfix=1&adurl=
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
216.58.206.2 Mountain View, United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
fra16s20-in-f2.1e100.net
Software
cafe /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

timing-allow-origin
*
date
Fri, 13 Sep 2019 08:37:12 GMT
x-content-type-options
nosniff
server
cafe
status
200
p3p
policyref="https://googleads.g.doubleclick.net/pagead/gcn_p3p_.xml", CP="CURa ADMa DEVa TAIo PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
access-control-allow-origin
*
cache-control
private
content-type
image/gif
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
0
x-xss-protection
0
osd_listener.js
www.googletagservices.com/activeview/js/current/ Frame 9AB9
75 KB
28 KB
Script
General
Full URL
https://www.googletagservices.com/activeview/js/current/osd_listener.js?cache=r20110914
Requested by
Host: securepubads.g.doubleclick.net
URL: https://securepubads.g.doubleclick.net/gpt/pubads_impl_rendering_2019091201.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:824::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
sffe /
Resource Hash
c1f4b48cf64b1d62f7ac56e47f4654cc28d949cdb83d9a0fa7be561c498b20d7
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
content-encoding
gzip
x-content-type-options
nosniff
server
sffe
etag
"1568027754411643"
vary
Accept-Encoding
content-type
text/javascript
status
200
cache-control
private, max-age=3000
accept-ranges
bytes
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
content-length
28564
x-xss-protection
0
expires
Fri, 13 Sep 2019 08:37:12 GMT
5136574783
dfp-gateway.s-onetag.com/1/4444/
114 B
579 B
XHR
General
Full URL
https://dfp-gateway.s-onetag.com/1/4444/5136574783
Requested by
Host: get.s-onetag.com
URL: https://get.s-onetag.com/1400a607-dbd1-49d7-9171-69ce05c71f5e/tag.min.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
2600:9000:2057:1a00:a:52eb:a100:93a1 , United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
Software
/
Resource Hash
3ddb12be58c8d1e4f15ed6bd23266bbcb098846570ef8fcfd819be9af32ea25c

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:08:56 GMT
via
1.1 87b272b7d9b97f38da15c91c833c3292.cloudfront.net (CloudFront), 1.1 87b272b7d9b97f38da15c91c833c3292.cloudfront.net (CloudFront)
age
1696
x-amzn-requestid
6acdc32c-0aa4-42a3-a429-218adeaa2c77
status
200
x-cache
Hit from cloudfront
content-type
application/json
access-control-allow-origin
*
cache-control
max-age=3600, public
x-amzn-trace-id
Root=1-5d7b4e98-2a846ab87ce6ca70c56151ae;Sampled=0
x-amz-cf-pop
FRA6-C1, FRA6-C1
x-amz-apigw-id
f8k31Gt0yK4Fj_Q=
content-length
114
x-amz-cf-id
_zB_MNbpkwRJM9vx-aS-NFiI1a92-9aUCzj5hFA0KXMSxDVAZtHFmg==
view
securepubads.g.doubleclick.net/pcs/ Frame 105C
0
61 B
Fetch
General
Full URL
https://securepubads.g.doubleclick.net/pcs/view?xai=AKAOjss-p4pQQPWcnyYazM4X423gtr9mj8CCbUt72xjNt70m7K8aYnOfHY3ov4KulNSIRe-APEt0wEHogUtqE8MkmIUjdc1sJpzg0LWXclciKYapBCoYMfvxUGv9aziSveLkS1evyxqK_zbxjoAgafyeSS2K58OSo2whviXTWvq640IIBMf0qex6XrnK2cT1abDZi90bFnv_3wdFjFfyg2bH3O9j8v0r1_Hczt2KF5btMt3E5gyd2bMQO7_3UqgUs76ObJQw_CAjA-zh4WBbccTQgoMG_nX1YNjt9ICnWmebQdHu&sig=Cg0ArKJSzIQThFpJfCSbEAE&urlfix=1&adurl=
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
216.58.206.2 Mountain View, United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
fra16s20-in-f2.1e100.net
Software
cafe /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

timing-allow-origin
*
date
Fri, 13 Sep 2019 08:37:12 GMT
x-content-type-options
nosniff
server
cafe
status
200
p3p
policyref="https://googleads.g.doubleclick.net/pagead/gcn_p3p_.xml", CP="CURa ADMa DEVa TAIo PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
access-control-allow-origin
*
cache-control
private
content-type
image/gif
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
0
x-xss-protection
0
/
track.adform.net/adfscript/ Frame 51DE
0
0
Document
General
Full URL
https://track.adform.net/adfscript/?bn=31959167;click=https://adclick.g.doubleclick.net/pcs/click?xai=AKAOjssxxd0ex9VU2nZiXVECw1tCaIjvpsIooU8yEzCg4O3ywMIEVj93V9owmVvewRpEljHbvTzecbD89fZm60iH0pZHz8d7y-sZQcazSRfb76DkU8GKRKc_YfARUr_Udp7uGiaU1DDeuMYwndtC1OT6gxmlMFk8_HUsJG-HB9kl0CY_vLkHwkPWujTAjaFlb5BPMp5brDYh9hhDlSaYWDz04Yl8yUHwIQ-gCloSDObmCsUV242ixwM436EP4AWprpwcU278MPzeMug6iMw0lQ&sig=Cg0ArKJSzMNrY3nvtLkIEAE&urlfix=1&adurl=;cpjs=2;ord=2100500192
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
37.157.6.253 , Denmark, ASN198622 (ADFORM, DK),
Reverse DNS
s1.adform.net
Software
nginx /
Resource Hash

Request headers

:method
GET
:authority
track.adform.net
:scheme
https
:path
/adfscript/?bn=31959167;click=https://adclick.g.doubleclick.net/pcs/click?xai=AKAOjssxxd0ex9VU2nZiXVECw1tCaIjvpsIooU8yEzCg4O3ywMIEVj93V9owmVvewRpEljHbvTzecbD89fZm60iH0pZHz8d7y-sZQcazSRfb76DkU8GKRKc_YfARUr_Udp7uGiaU1DDeuMYwndtC1OT6gxmlMFk8_HUsJG-HB9kl0CY_vLkHwkPWujTAjaFlb5BPMp5brDYh9hhDlSaYWDz04Yl8yUHwIQ-gCloSDObmCsUV242ixwM436EP4AWprpwcU278MPzeMug6iMw0lQ&sig=Cg0ArKJSzMNrY3nvtLkIEAE&urlfix=1&adurl=;cpjs=2;ord=2100500192
pragma
no-cache
cache-control
no-cache
upgrade-insecure-requests
1
user-agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
sec-fetch-mode
nested-navigate
accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
sec-fetch-site
cross-site
referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
accept-encoding
gzip, deflate, br
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

status
200
server
nginx
date
Fri, 13 Sep 2019 08:37:12 GMT
content-type
text/html; charset=utf-8
cache-control
no-cache, no-store, must-revalidate, no-transform
pragma
no-cache
content-encoding
gzip
expires
-1
vary
Accept-Encoding
access-control-allow-origin
*
set-cookie
C=1; expires=Sun, 13-Oct-2019 08:37:12 GMT; path=/ adtrc=1; domain=adform.net; expires=Fri, 20-Sep-2019 08:37:12 GMT; path=/
p3p
CP="NOI DSP COR NID CURa ADMa DEVa TAIa PSAa PSDa OUR LEG NAV INT"
/
track.adform.net/adfscript/ Frame 7B9B
0
0
Document
General
Full URL
https://track.adform.net/adfscript/?bn=31959168;click=https://adclick.g.doubleclick.net/pcs/click?xai=AKAOjssxxd0ex9VU2nZiXVECw1tCaIjvpsIooU8yEzCg4O3ywMIEVj93V9owmVvewRpEljHbvTzecbD89fZm60iH0pZHz8d7y-sZQcazSRfb76DkU8GKRKc_YfARUr_Udp7uGiaU1DDeuMYwndtC1OT6gxmlMFk8_HUsJG-HB9kl0CY_vLkHwkPWujTAjaFlb5BPMp5brDYh9hhDlSaYWDz04Yl8yUHwIQ-gCloSDObmCsUV242ixwM436EP4AWprpwcU278MPzeMug6iMw0lQ&sig=Cg0ArKJSzMNrY3nvtLkIEAE&urlfix=1&adurl=;cpjs=2;ord=2100500192
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
37.157.6.253 , Denmark, ASN198622 (ADFORM, DK),
Reverse DNS
s1.adform.net
Software
nginx /
Resource Hash

Request headers

:method
GET
:authority
track.adform.net
:scheme
https
:path
/adfscript/?bn=31959168;click=https://adclick.g.doubleclick.net/pcs/click?xai=AKAOjssxxd0ex9VU2nZiXVECw1tCaIjvpsIooU8yEzCg4O3ywMIEVj93V9owmVvewRpEljHbvTzecbD89fZm60iH0pZHz8d7y-sZQcazSRfb76DkU8GKRKc_YfARUr_Udp7uGiaU1DDeuMYwndtC1OT6gxmlMFk8_HUsJG-HB9kl0CY_vLkHwkPWujTAjaFlb5BPMp5brDYh9hhDlSaYWDz04Yl8yUHwIQ-gCloSDObmCsUV242ixwM436EP4AWprpwcU278MPzeMug6iMw0lQ&sig=Cg0ArKJSzMNrY3nvtLkIEAE&urlfix=1&adurl=;cpjs=2;ord=2100500192
pragma
no-cache
cache-control
no-cache
upgrade-insecure-requests
1
user-agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
sec-fetch-mode
nested-navigate
accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
sec-fetch-site
cross-site
referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
accept-encoding
gzip, deflate, br
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

status
200
server
nginx
date
Fri, 13 Sep 2019 08:37:12 GMT
content-type
text/html; charset=utf-8
cache-control
no-cache, no-store, must-revalidate, no-transform
pragma
no-cache
content-encoding
gzip
expires
-1
vary
Accept-Encoding
access-control-allow-origin
*
set-cookie
C=1; expires=Sun, 13-Oct-2019 08:37:12 GMT; path=/ adtrc=1; domain=adform.net; expires=Fri, 20-Sep-2019 08:37:12 GMT; path=/
p3p
CP="NOI DSP COR NID CURa ADMa DEVa TAIa PSAa PSDa OUR LEG NAV INT"
osd_listener.js
www.googletagservices.com/activeview/js/current/ Frame 105C
75 KB
28 KB
Script
General
Full URL
https://www.googletagservices.com/activeview/js/current/osd_listener.js?cache=r20110914
Requested by
Host: securepubads.g.doubleclick.net
URL: https://securepubads.g.doubleclick.net/gpt/pubads_impl_rendering_2019091201.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:824::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
sffe /
Resource Hash
c1f4b48cf64b1d62f7ac56e47f4654cc28d949cdb83d9a0fa7be561c498b20d7
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
content-encoding
gzip
x-content-type-options
nosniff
server
sffe
etag
"1568027754411643"
vary
Accept-Encoding
content-type
text/javascript
status
200
cache-control
private, max-age=3000
accept-ranges
bytes
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
content-length
28564
x-xss-protection
0
expires
Fri, 13 Sep 2019 08:37:12 GMT
userconnect
ih.adscale.de/
546 B
927 B
Script
General
Full URL
https://ih.adscale.de/userconnect?ssl=1&sid=192243&cbfn=stroeerCoreConnect&ts=1568363832090&umd=false
Requested by
Host: js.adscale.de
URL: https://js.adscale.de/userconnect.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.234.72 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-234-72.deploy.static.akamaitechnologies.com
Software
Apache-Coyote/1.1 /
Resource Hash
3ec820f43f2c15f54966331d9209c9b39e506c4cbea0725110302d1a33111e12

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:12 GMT
Server
Apache-Coyote/1.1
Content-Type
application/javascript
Cache-Control
max-age=0, no-cache, no-store
Connection
keep-alive
Content-Length
546
Expires
Fri, 13 Sep 2019 08:37:12 GMT
b1f3c352-b1b2-43e0-a354-c70ab8fe3440
t.nativendo.de/cds/tracking/event/
0
192 B
Script
General
Full URL
https://t.nativendo.de/cds/tracking/event/b1f3c352-b1b2-43e0-a354-c70ab8fe3440?noc=54g3euww&aid=182yo&cid=5ik1s&cti=7p9ts&imp=19&t=ad%2Fview&ar=0&url=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ts=1568363832
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
107.178.241.34 , United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
34.241.178.107.bc.googleusercontent.com
Software
Apache /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:12 GMT
via
1.1 google
last-modified
Fri, 13 Sep 2019 08:37:12 GMT
server
Apache
p3p
CP="This is not a p3p policy."
status
200
cache-control
no-transform, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
content-type
text/javascript; charset=utf8
alt-svc
clear
content-length
0
expires
Sat, 26 Jul 1997 05:00:00 GMT
p
ic.tynt.com/b/
0
294 B
Image
General
Full URL
https://ic.tynt.com/b/p?id=s!sovrn&lm=0&ts=1568363832155&dn=IDS&iso=0&img=https%3A%2F%2Fstatic.giga.de%2Fwp-content%2Fuploads%2F2015%2F07%2Fpaypal-login-rcm1200x627u.jpg&t=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&cu=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
208.100.17.186 Chicago, United States, ASN32748 (STEADFAST - Steadfast, US),
Reverse DNS
ip186.208-100-17.static.steadfastdns.net
Software
nginx/1.14.0 /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

status
204
date
Fri, 13 Sep 2019 08:37:12 GMT
server
nginx/1.14.0
p3p
policyref="/w3c/p3p.xml", CP="CUR ADM OUR NOR STA NID", CP=NOI DSP COR NID PSA PSD OUR IND UNI COM NAV INT DEM STA
data
lb59.s400.meetrics.net/
43 B
308 B
Image
General
Full URL
https://lb59.s400.meetrics.net/data?/J1/wEYRAA/k0FMImvFytFh0FjvFklF9iEsvFjrFlyFmhEk2F9yA42A35A13A1mAjwFpkF9kElzFr0FvwFmhEwhF90A04AyzA44Ay5AymAjpFk9BxzA4yAx2Ay0A1zA3yAmzEp6Fl9Bx4ExmAzpF0lF9nEpnFhuBklFfzFkmBwsFhjFl9BzvFm0F3hFylFmhEwiF9vE10FtvEmtBwhFnlFmhEwjF90A04AyzA44Ay5AymAhwFk9B00A4yAz4A4yA5yAmhEwlF9lAyGE00A00AlyAGnFpnFhuBklFfzFklByGEzvFm0F3hFylFfhFy0FprFlsFlyAGvF10FtvEmtBwhFnlFmhEkjF9kEpyFljF0mBttFvkFl9BklFmhF1sF0mBjiF9xA12A4zA2zA4zAx4AyyAmvFytFh0FjvFklF9iEsvFjrFlyFmhEk2F9xAw1A00A5xA21A1mAjwFpkF9kElzFr0FvwFmhEwhF91AwwAyxAwwA2xA5mAjpFk9BxzA4yA21Aw1A32Ay0AmzEp6Fl9B4wAw4E01AwmAzpF0lF9nEpnFhuBklFfzFkmBwsFhjFl9BzvFm0F3hFylFmhEwiF9wEvzF0lFyhFkmBhwFj9B1wAwyAxwAw2Ax5AmhEwkF91AwwAyxAwwA2xA5mAhwFl9BlyAG0B00A0lAyGEnpFnhFukElfFzkFlyAGzFvmF03FhyFlfFhyF0pFrlFslByGEwvFz0FlyFhkFmhEkjF9kEpyFljF0mBttFvkFl9BklFmhF1sF0mBjiF9xA12A4zA2zA4zAx5Ay1ALlnFCUkzFFCPjBAAAAAAABn2RAPDAAFAAn2RThRjAPAAA/EAAKABhRjAZBAAOA55A55A85B55A58E55A55AFA3zAxyA3BErhRjAPuCAAAAAAAPA5iAPAAAAAAAAAIA5iAPAAA/EAAKAHhRjASksFPFjAAAAAAAAAAAAEAAAn2RAAAAAAAHAklFzrF0vFwBFIAzvFm0F3hFylFKAnpFnhFukElfFzkFHA4wAw4E01AwBEMAxzA4yA21Aw1A32Ay0AGAkpFylFj0FAAAAKAxwA10A05Ax2A11AKA1wAwyAxwAw2Ax5AIAwvFz0FlyFhkFKA1wAwyAxwAw2Ax5AKA1wAwyAxwAw2Ax5AyAlyAG0B00A0lAyGEnpFnhFukElfFzkFlyAGzFvmF03FhyFlfFhyF0pFrlFslByGEwvFz0FlyFhkFd/EAAKAxJAAAAFAAAhRjAAAAAHAisFvjFrlFyBFAAAAAAAAAAAAAAAAQtjFRLURWA
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
136.243.5.11 , Germany, ASN24940 (HETZNER-AS, DE),
Reverse DNS
h232.meetrics.de
Software
nginx /
Resource Hash
548f2d6f4d0d820c6c5ffbeffcbd7f0e73193e2932eefe542accc84762deec87

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:12 GMT
Server
nginx
Transfer-Encoding
chunked
Content-Type
image/gif
Cache-control
no-cache,no-store,must-revalidate
Connection
keep-alive
Expires
Fri, 13-Sep-19 08:37:11 GMT
getAd
video-adserver.ibillboard.com/ Frame 4E21
48 B
567 B
XHR
General
Full URL
https://video-adserver.ibillboard.com/getAd?tagid=346a3f1b-2167-4e54-8af3-4a8d2910a189&bust=6b2231e7ae&ref=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ngresponse=true&nu=n4%3D2%26n3%3D1&impid=a9145aca-d802-42e7-b0df-0dd4b93c7189
Requested by
Host: media.oadts.com
URL: https://media.oadts.com/www/delivery/video.php?dt=inline&mw=300&sm=1&tm=0&vp=1
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
62.168.44.126 Velke Prilepy, Czech Republic, ASN5588 (GTSCE GTS Central Europe / Antel Germany, CZ),
Reverse DNS
bbnaut2.bbelements.com
Software
ibillboard /
Resource Hash
c86b97039dee366847426e8ecac1d0dcdb158aea76b2d00a74eb479b05a2a5cb

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:12 GMT
Server
ibillboard
Vary
*
Content-Type
text/xml
Access-Control-Allow-Origin
https://www.giga.de
Cache-Control
private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
Access-Control-Allow-Credentials
true
Connection
keep-alive
Content-Length
48
Expires
Tue, 01 Jan 1991 00:00:00 GMT
rum.js
securepubads.g.doubleclick.net/pagead/js/ Frame 9AB9
49 KB
19 KB
Script
General
Full URL
https://securepubads.g.doubleclick.net/pagead/js/rum.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
216.58.206.2 Mountain View, United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
fra16s20-in-f2.1e100.net
Software
cafe /
Resource Hash
9b404c617f947b58e4c257e9d622512567b05283f1ce4894b11273982c534f71
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:10:15 GMT
content-encoding
gzip
x-content-type-options
nosniff
age
1617
p3p
policyref="https://googleads.g.doubleclick.net/pagead/gcn_p3p_.xml", CP="CURa ADMa DEVa TAIo PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
status
200
content-disposition
attachment; filename="f.txt"
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
19002
x-xss-protection
0
server
cafe
etag
16639907700459338416
vary
Accept-Encoding
content-type
text/javascript; charset=UTF-8
cache-control
public, max-age=3600
timing-allow-origin
*
expires
Fri, 13 Sep 2019 09:10:15 GMT
data
lb59.s400.meetrics.net/
43 B
308 B
Image
General
Full URL
https://lb59.s400.meetrics.net/data?/J1/wF0RAA/k0FGMmvFytFh0FjvFklF9iEsvFjrFlyFmhEk2F9yA42A35A13A1mAjwFpkF9kElzFr0FvwFmhEwhF90A04AyzA44Ay5AymAjpFk9BxzA4yAx2Ay0A1zA3yAmzEp6Fl9Bx4ExmAzpF0lF9nEpnFhuBklFfzFkmBwsFhjFl9BzvFm0F3hFylFmhEwiF9vE10FtvEmtBwhFnlFmhEwjF90A04AyzA44Ay5AymAhwFk9B00A4yAz4A4yA5yAmhEwlF9lAyGE00A00AlyAGnFpnFhuBklFfzFklByGEzvFm0F3hFylFfhFy0FprFlsFlyAGvF10FtvEmtBwhFnlFmhEkjF9kEpyFljF0mBttFvkFl9BklFmhF1sF0mBjiF9xA12A4zA2zA4zAx4AyyAmvFytFh0FjvFklF9iEsvFjrFlyFmhEk2F9xAw1A00A5xA21A1mAjwFpkF9kElzFr0FvwFmhEwhF91AwwAyxAwwA2xA5mAjpFk9BxzA4yA21Aw1A32Ay0AmzEp6Fl9B4wAw4E01AwmAzpF0lF9nEpnFhuBklFfzFkmBwsFhjFl9BzvFm0F3hFylFmhEwiF9wEvzF0lFyhFkmBhwFj9B1wAwyAxwAw2Ax5AmhEwkF91AwwAyxAwwA2xA5mAhwFl9BlyAG0B00A0lAyGEnpFnhFukElfFzkFlyAGzFvmF03FhyFlfFhyF0pFrlFslByGEwvFz0FlyFhkFmhEkjF9kEpyFljF0mBttFvkFl9BklFmhF1sF0mBjiF9xA12A4zA2zA4zAx5Ay1AmvFytFh0FjvFklF9iEsvFjrFlyFmhEk2F90Az2Ay5Ax3A1mAjwFpkF9kElzFr0FvwFmhEwhF91AxzA21A30A34AzmAjpFk9BxzA4yA41Ax0AxwA3zAmzEp6Fl9BxyAw4E2wAwmAzpF0lF9nEpnFhuBklFfzFkmBwsFhjFl9BzvFm0F3hFylFmhEwiF9zEr5FmhEwjF91AxzA21A30A34AzmAhwFk9B1xAz2A13A03A4zAmhEwlF9lAyGE00A00AlyAGnFpnFhuBklFfzFklByGEzvFm0F3hFylFfhFy0FprFlsFlyAGzFr5FmhEkjF9kEpyFljF0mBttFvkFl9BklFmhF1sF0mBjiF9xA12A4zA2zA4zAyxA25ALlnFDUkzFYBPDBAAAAAAABCXOAPBAAFAACXOTZyOAPAAAAAAAAABZyOAZAAAOA55A55A85B55A58E55A55AFA14A4xA4BErZyOASksFAFjAAAAAAAAAAAAEAAACXOAAAAAAAHAklFzrF0vFwBFIAzvFm0F3hFylFKAnpFnhFukElfFzkFHAxyAw4E2wAwBEMAxzA4yA41Ax0AxwA3zAGAkpFylFj0FAAAAIA0zA2yA5xA31AKA1xAz2A13A03A4zADAzrF5BFKA1xAz2A13A03A4zAKA1xAz2A13A03A4zAtAlyAG0B00A0lAyGEnpFnhFukElfFzkFlyAGzFvmF03FhyFlfFhyF0pFrlFslByGEzrF5BFdAAAAAAAAAAAAFAAAZyOAAAAAHAisFvjFrlFyBFAAAAAAAAAAAAAAAAQtjFxOAfYA
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
136.243.5.11 , Germany, ASN24940 (HETZNER-AS, DE),
Reverse DNS
h232.meetrics.de
Software
nginx /
Resource Hash
548f2d6f4d0d820c6c5ffbeffcbd7f0e73193e2932eefe542accc84762deec87

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:12 GMT
Server
nginx
Transfer-Encoding
chunked
Content-Type
image/gif
Cache-control
no-cache,no-store,must-revalidate
Connection
keep-alive
Expires
Fri, 13-Sep-19 08:37:11 GMT
data
lb59.s400.meetrics.net/
43 B
308 B
Image
General
Full URL
https://lb59.s400.meetrics.net/data?/J1/wG0RAA/k0FHQmvFytFh0FjvFklF9iEsvFjrFlyFmhEk2F9yA42A35A13A1mAjwFpkF9kElzFr0FvwFmhEwhF90A04AyzA44Ay5AymAjpFk9BxzA4yAx2Ay0A1zA3yAmzEp6Fl9Bx4ExmAzpF0lF9nEpnFhuBklFfzFkmBwsFhjFl9BzvFm0F3hFylFmhEwiF9vE10FtvEmtBwhFnlFmhEwjF90A04AyzA44Ay5AymAhwFk9B00A4yAz4A4yA5yAmhEwlF9lAyGE00A00AlyAGnFpnFhuBklFfzFklByGEzvFm0F3hFylFfhFy0FprFlsFlyAGvF10FtvEmtBwhFnlFmhEkjF9kEpyFljF0mBttFvkFl9BklFmhF1sF0mBjiF9xA12A4zA2zA4zAx4AyyAmvFytFh0FjvFklF9iEsvFjrFlyFmhEk2F9xAw1A00A5xA21A1mAjwFpkF9kElzFr0FvwFmhEwhF91AwwAyxAwwA2xA5mAjpFk9BxzA4yA21Aw1A32Ay0AmzEp6Fl9B4wAw4E01AwmAzpF0lF9nEpnFhuBklFfzFkmBwsFhjFl9BzvFm0F3hFylFmhEwiF9wEvzF0lFyhFkmBhwFj9B1wAwyAxwAw2Ax5AmhEwkF91AwwAyxAwwA2xA5mAhwFl9BlyAG0B00A0lAyGEnpFnhFukElfFzkFlyAGzFvmF03FhyFlfFhyF0pFrlFslByGEwvFz0FlyFhkFmhEkjF9kEpyFljF0mBttFvkFl9BklFmhF1sF0mBjiF9xA12A4zA2zA4zAx5Ay1AmvFytFh0FjvFklF9iEsvFjrFlyFmhEk2F90Az2Ay5Ax3A1mAjwFpkF9kElzFr0FvwFmhEwhF91AxzA21A30A34AzmAjpFk9BxzA4yA41Ax0AxwA3zAmzEp6Fl9BxyAw4E2wAwmAzpF0lF9nEpnFhuBklFfzFkmBwsFhjFl9BzvFm0F3hFylFmhEwiF9zEr5FmhEwjF91AxzA21A30A34AzmAhwFk9B1xAz2A13A03A4zAmhEwlF9lAyGE00A00AlyAGnFpnFhuBklFfzFklByGEzvFm0F3hFylFfhFy0FprFlsFlyAGzFr5FmhEkjF9kEpyFljF0mBttFvkFl9BklFmhF1sF0mBjiF9xA12A4zA2zA4zAyxA25AmvFytFh0FjvFklF9XEhsFswFhwFlyFmhEk2F90Az2Ay5Ax3A1mAjwFpkF9kElzFr0FvwFmhEwhF91AxzA21A30A34AzmAjpFk9BxzA4yA40A4xAx2A42AmzEp6Fl9B3yA44E5wAmzEp0Fl9BnpFnhFukElfFzkFmwEshFjlF9zEvmF03FhyFlmBhwFi9BihFuuFlyFmhEwjF91AxzA21A30A34AzmAhwFk9B1xAz2A13A03A4zAmhEwlF9lAyGE00A00AlyAGnFpnFhuBklFfzFklByGEzvFm0F3hFylFfhFy0FprFlsFlyAGiFhuFulFymBhkFj9BkpFylFj0FmtEtvFklF9kElmFh1Fs0FmjEi9Bx1A24Az2Az4AzyAx5A3BELlnFETkzFARksFAQtjF+DQkYA
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
136.243.5.11 , Germany, ASN24940 (HETZNER-AS, DE),
Reverse DNS
h232.meetrics.de
Software
nginx /
Resource Hash
548f2d6f4d0d820c6c5ffbeffcbd7f0e73193e2932eefe542accc84762deec87

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:12 GMT
Server
nginx
Transfer-Encoding
chunked
Content-Type
image/gif
Cache-control
no-cache,no-store,must-revalidate
Connection
keep-alive
Expires
Fri, 13-Sep-19 08:37:11 GMT
data
lb59.s400.meetrics.net/
43 B
308 B
Image
General
Full URL
https://lb59.s400.meetrics.net/data?/J1/wH2RAAUkzFnBPbAAAAAAAABMqoAPBAAFAAMqoTapFAPAAAFAAMqoTBQCAPBAA1IASCABapFAZAAAOA55A55A85B55A58E55A55AGAx2A21A0wArapFASksFjPjAAAAAAAAAAAAEAAAMqoAAAAAAAHAklFzrF0vFwBFIAzvFm0F3hFylFKAnpFnhFukElfFzkFGA3yA44E5wAMAxzA4yA40A4xAx2A42AGAkpFylFj0FAAAAIA0zA2yA5xA31AKA1xAz2A13A03A4zAGAihFuuFlyFKA1xAz2A13A03A4zAKA1xAz2A13A03A4zAwAlyAG0B00A0lAyGEnpFnhFukElfFzkFlyAGzFvmF03FhyFlfFhyF0pFrlFslByGEihFuuFlyFd1IASCAYLAaBAFAAAapFAAA+Go0F0wFz6BvvA0yFhjFruBhkFmvFytFuuEl0FvhEkmFzjFypFw0Fv/AiuF9zAx5A15Ax2A37AjsFpjFr9Bo0F0wFz6BvvAhkFjsFpjFruBnuBkvF1iFslFjsFpjFruBulF0vBwjFzvBjsFpjFr/B4hFp9BBLFBPFqzFz4F4kFwlE45BWVFyuEapFYWFFDF3xB0DFhJFq2FwzFJvFvVF45EF6FDnF0PEz5E3NFJFFWqF5zAW5Bv3FtWF2lF3SFwFFsqFIiF2UF6lFjiFE4B5mEatF2wApIFwwEaIF64Bk3B5tBzaFRjFh6FTSFmiF32AErFV4BHLFSLFjfFZmFBSFVyFfVFkwF31EHpFhVFxEEElF1NFZ3FukF0DFxPEU2Bn4FtsFNGFr4BfIFVzFKHFtIEC5BrsFwDEZfF2MFrIF3rFQXF1qFUBFqhFGsFi1BCQFNwF1iEyEFZoF5oEoEFsTFhZFXEF6wB0ZEs4B5VFI3FJRFtnEDsFvTFEPFitFDzFVWFy0AypE43FN0Bz2AFQF0BEXwFywF3jFVyB34ANQF6lFN1Fn2BpNF3wBsRFmzEpnF9DEnwBByFLKFT6FNOFyZFzuE20FMrFJFFBFFm1EysFmpF49BxmAhkF1yFs9B7jEwqFz9By7AvyFk9ByxAwwA1wAwxA5yAJAXhFssFwhFwlFyBFAAAAAAAAAAAAAAAAQtjF4bERVA
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
136.243.5.11 , Germany, ASN24940 (HETZNER-AS, DE),
Reverse DNS
h232.meetrics.de
Software
nginx /
Resource Hash
548f2d6f4d0d820c6c5ffbeffcbd7f0e73193e2932eefe542accc84762deec87

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:12 GMT
Server
nginx
Transfer-Encoding
chunked
Content-Type
image/gif
Cache-control
no-cache,no-store,must-revalidate
Connection
keep-alive
Expires
Fri, 13-Sep-19 08:37:11 GMT
b1f3c352-b1b2-43e0-a354-c70ab8fe3440
t.nativendo.de/cds/tracking/event/
0
169 B
Script
General
Full URL
https://t.nativendo.de/cds/tracking/event/b1f3c352-b1b2-43e0-a354-c70ab8fe3440?aid=182yo&t=data%2Finventory&ar=0&url=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ts=1568363832
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
107.178.241.34 , United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
34.241.178.107.bc.googleusercontent.com
Software
Apache /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:12 GMT
via
1.1 google
last-modified
Fri, 13 Sep 2019 08:37:12 GMT
server
Apache
p3p
CP="This is not a p3p policy."
status
200
cache-control
no-transform, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
content-type
text/javascript; charset=utf8
alt-svc
clear
content-length
0
expires
Sat, 26 Jul 1997 05:00:00 GMT
global_config.json
s3.eu-central-1.amazonaws.com/homad-global-configs-eu-fra.schneevonmorgen.com/ Frame 4364
53 B
642 B
XHR
General
Full URL
https://s3.eu-central-1.amazonaws.com/homad-global-configs-eu-fra.schneevonmorgen.com/global_config.json?cache=5907392741
Requested by
Host: text
URL: data:text/javascript;base64,dmFyIE9oamF1ZGlwQWxpZWNhaUo9T2hqYXVkaXBBbGllY2FpSnx8e307CihmdW5jdGlvbihjKXtmdW5jdGlvbiBjYSgpe3guUmV8fCh4LlJlPTApO3guUmUrKzt3aW5kb3cudmlkZW9wa2dJbnRlcmZhY2UhPXgudmlkZW9wa2dJbnRlcmZhY2UmJih3aW5kb3cudmlkZW9wa2dJbnRlcmZhY2U9eC52aWRlb3BrZ0ludGVyZmFjZSk7MTA+eC5SZSYmd2luZG93LnNldFRpbWVvdXQoY2EsNTAwKX1mdW5jdGlvbiB6KCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIseik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIseik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIseik7ZGE9ITA7Zm9yKHZhciBjPTA7YzxDLmxlbmd0aDtjKyspQ1tjXS5sb2FkKCk7CmZvcihjPTA7YzxDLmxlbmd0aDtjKyspe3ZhciBiPUNbY10ucGxheSgpO2lmKHZvaWQgMCE9PWIpYi50aGVuKGZ1bmN0aW9uKCl7fSlbImNhdGNoIl0oZnVuY3Rpb24oKXt9KX1LJiYoSygpLEs9ITEpfWZ1bmN0aW9uIGVhKCl7dmFyIGM9d2luZG93Lk9PO2N8fChjPXdpbmRvdy5qT09QbGF5ZXJfMCk7cmV0dXJuIGN9ZnVuY3Rpb24gZmEoKXtpZihtKXttLnBhdXNlQnV0dG9ufHwobS5wYXVzZUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1sZWZ0OiA2cHg7cGFkZGluZy1ib3R0b206IDZweDsiIG9uZXJyb3I9InRoaXMuc3JjPVwnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9wYXVzZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlF6UTVOelUxTjBRMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UXpRNU56VTFOMFUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBETkRrM05UVTNRalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERORGszTlRVM1F6WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BnSG5DckVBQUFGMFNVUkJWSGphN0ptOWlvTkFFTWZqM1JVVzhTTWFQd2hhMjRjSTFsWldlWUxZK1FTV2dwVytnNCtVSm04UnRVMU1pbURsTGJjZ3dTUEhRY0xlempGVHpRNHkrOXZoUHlQTENrbVN6S0RaeCtsMGdnZDlQcC9oUWQ5dU4zalF3ekFnTkF0N213RTBsQWRDWXlOaXBSRWFOWTJWUm1pUTBOdnROZ3hEU1pLcXFqb2NEbU44dFZydGRqdlA4OXEyemZPY0krak5abE9XSmZVSlh4UkYxK3VWTG91aThIMmYrazNUa0NQeE1qM2lPQjU5V1pZSjkzaUFrWmpZdmYvM2xTYXFtRVJvMmtkeExxQW5TWVl2K3lITzQvUjRCTTFYcFJsRDQyLzhGeFhGUmtSTmc5UTB5SkdIallqeXdPbUJqZmlmRzdHdTYvdmw4WGlrYVlreitld2wyNzJUMjlIeldmYjcvWHE5ZGwyMzY3b3N5OGlTeGkrWEN3RU5na0FVUlJKTTA3VHYrK2UzRXh6SHdVWkU2RWVhbnMvbjRLQUYyN1lSbWdtMFpWbndvRTNUaEFkdEdBWTg2T1Z5aWRCTW9IVmRod2V0YVJvODZNVmlBUTlhVlZXRVpnS3RLQW84NkpmY1hGaERmMy9MNGQ4K0JSZ0ErUk5XU3hQaVI0d0FBQUFBU1VWT1JLNUNZSUk9Ii8+Jyk7Cm0ucGxheUJ1dHRvbnx8KG0ucGxheUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1sZWZ0OiA2cHg7cGFkZGluZy1ib3R0b206IDZweDsiIG9uZXJyb3I9InRoaXMuc3JjPVwnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9wbGF5MTgxMDAyLnBuZ1wnIiBzcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRHdBQUFBOENBSUFBQUMxbms0bEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeWhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVOaTFqTURZM0lEYzVMakUxTnpjME55d2dNakF4TlM4d015OHpNQzB5TXpvME1EbzBNaUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01UVWdLRTFoWTJsdWRHOXphQ2tpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2UXpRNU56VTFOemsyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZRelE1TnpVMU4wRTJOVVV3TVRGRk5UazVSamhCTTBNelEwVXhOMFUwUkRnaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcERORGszTlRVM056WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwRE5EazNOVFUzT0RZMVJUQXhNVVUxT1RsR09FRXpRek5EUlRFM1JUUkVPQ0l2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHZWa0dJa0FBQUhaU1VSQlZIamE3Smd4aXNKUUVJWjFYYkJSbXdoaURpQjZnVTB0cEJJRUM0dUFoVTBNQkZ2RlhxMFZQRUNDVm9MYWVnR0xpS1dGSGlDa2pyR3hqTE11aUd6QTNlVWx6L2ZZK2FzUW5QQmwvT2RsWnVLcXFzWjQwN3ZydXZ4Qm4wNG4vcUF2bHd0LzBMN3ZJelFOdmNVNEZOb0RvYkVRTWRNSWpaN0dUSDhxa2N2bFNPTFQ2WFM5WHQvdjkxVHQ0Wk9wV3ExMnU5MzVmSjVLcFh4YUlvV0dUTU9yRjR2RjlYcGRLQlQ0Z0w2WFJDYVRXU3dXalVhREJuUzRidXYxZW9QQjRDdjk3SG82K01SYXJXWVlSajZmNThBZWp3S0xMNWZMY3JrY0VYUWltODJTL0ZNZk53WHZKNVBKU3FVQ0Y3dmRqamw3UFA4MnRkdnR5V1FTK21rWStXZGNsdVhwZEFxR1lib1FneXFWU3NBTkJScWFwd1ZCSVBTMEpFay8vZ3dzRGltSG8zQ3oyZkNSNmJ1YXplWnNOaU8zT08zV1ZMcnB4YTNwbjhMUDU3T3U2K1NISUwxKytuQTRBTEhqT0s4ZkFuNFpicHJtY0Rqa1puSUJTMEFMdFZxdEdCcTNub2VESlRxZHp2RjQ1R2F3aFo1SlVaVFFpU08wUjcvZmh3YVYwV2s4R0c3YnRxWnBZQXh1VmdpV1piVmFMU2crcHZjZWorR2owV2c4SHROWTFvVHlGTS96VkZYZGJyZVVsaldFUXlnTTRkREJBWEdrSnY2bXVDaUt1TXREYUZ6MUlqUkNZeUZpcGhFYW9iRVFFZm9mUVY4RkdBQkdFSjRVNUZJZnp3QUFBQUJKUlU1RXJrSmdnZz09Ii8+Jyk7Cm0ubXV0ZUJ1dHRvbnx8KG0ubXV0ZUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1yaWdodDogNnB4O3BhZGRpbmctYm90dG9tOiA2cHg7IiBvbmVycm9yPSJ0aGlzLnNyYz1cJ2h0dHBzOi8vaG1kYXNzdHMuc2NobmVldm9ubW9yZ2VuLmNvbS9pbWcvbXV0ZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlEwWkNNRGMwUWpBMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UTBaQ01EYzBRakUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBETkRrM05UVTNSalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERORGszTlRVNE1EWTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1ByV2YzOGNBQUFKVVNVUkJWSGphN0ptL2p3RkJGTWU1dTNKUmM5UkVmZndCTGxHaW9ISTZqV3Y5QVZSWGllZ0ZDWTJ3Q2pyMDRoL2dMOUQ3MFlocTc1dWRaQ0xyZHRuZDJjM04zYnhpOHF6ZE41OTU3L3RtN2ZLV3kyVVBiL2F5MysvNWd6NGNEdnhCbjg5bi9xQVZSUkhRYnRpVGgwTVQ4aERRb2hGRnBnVzAwRFI3YUlXcDFldDF4WGxqQmkxSjBuQTR6R1F5TGtDejBiVFA1MnUzMjlGb0ZMNExUY0lBT2hRS3RWcXRXQ3hHUGpLQlJzVXd6bVl6UjZDUjNXNjM2L2Y3NlJFN0FiUFpMTWJwZElxd3lBSWM5cnZITGJFMSsxQU56cHRxY0dqZEdPOGVxS0FzeTdmRWowY29Gb3VWU2dVT1lZWHpxaHF0bGVsR1JLVnl1WnpCY3BQSjVJL0g3OHFqVkNwaEhBd0dpVVFDSFl6ek1WSkVqV05PMDFpeEhwYXg2UVdrcktsVUNrNi8zNmVzbWd0dkhSUHlzQ1pRVFpCUDFlQzhxL1lJNGwxNU9IVWIvMUtOcU1oYXhWejl3VVFDUWwyUHA5T3NQSFNoN2NqamVyVHB1SnBwSmduV2JjUS85YmhsVXg2T1pwcExlVGlWNmNWaWdUczhaNDNZNi9YSXg4bGtRZzZlVGlleWpOK2JhV3I0VVVVZEFtMkJYZ3V0Ti9kdXQxdXYxM3JmWXRaNFBHNXFNY3ZsVXJNTVRCRU9oMW51SHJKcUJsYzJHbzE4UG0raFJKRDd0WVB6UVcrY2UyYWFybGFybTgybVZxdFoxdFY4UHI5MmNPSHhlSFM4RVR1ZERxWnBOcHMybTRIU2o4ZGpFbUc3M1VJNVR1MGVtSVp3QndJQis4K0lsSDYxV2htRThscHJCWTJoS1VlakVlR09SQ0o4dkdHQ3VBdUZ3clVpK1hqREJPNTBPbzNSQldodk1CaGtXRGpzWExoM09DMlBaMG1TR0lhN1hDN2lWYS80SjBCQS93OW8wWWdDV2tDTFJoVHlFTkRNN1Z1QUFRQndvdnZJdjA5WTZnQUFBQUJKUlU1RXJrSmdnZz09Ii8+Jyk7Cm0udW5tdXRlQnV0dG9ufHwobS51bm11dGVCdXR0b249JzxpbWcgc3R5bGU9Im1heC13aWR0aDogMjVweDttYXgtaGVpZ2h0OiAyNXB4O3BhZGRpbmctcmlnaHQ6IDZweDtwYWRkaW5nLWJvdHRvbTogNnB4OyIgb25lcnJvcj0idGhpcy5zcmM9XCdodHRwczovL2htZGFzc3RzLnNjaG5lZXZvbm1vcmdlbi5jb20vaW1nL3VubXV0ZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlEwWkNNRGMwUWpRMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UTBaQ01EYzBRalUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBEUmtJd056UkNNalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERSa0l3TnpSQ016WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BpL2RxR3dBQUFTRlNVUkJWSGphN0psTFRCTkJHTWUzaUVpbDcyNUxhMHVRaTYyUEF4b0RIUEhDelpaRXFpYVFRQTJKd3NGWHZHaE1DSGZmSmlZRzFDWWVSRUUweElQdEJZN1lFeWFDK0VLSUVCTXI3VzRWaW9qV2IzZXRXYnF6MjA1WjFFMzJPMndtT3pQZi9QYWIvenhYMDk3ZVRpak5paE9KaFBLZ0tZcFNIblFxbFZJZWREcWRWcUgvaGhVUkNqUlZIaXEwT2hEVlNLdlFxcWIvZmFUUHpNM3RvK2t0eTh0Zk5tdzQ1UEY4TENuaDUzWjNkM2QxZGVWMHNpMlZhbzdGd0kvK3g0OVhXdTFoandjdjBta2NxNmNvYUF5SW9TYTBkM2xxU3JleXdtWHBkTHErdmo2Zno1ZlR5YmJGeGQ0M2IzenhPSGdBUDU1VWF2LzhQQllHSmpSTjg3L1lzN1RVOC9ZdGNBTnhUMCtQaHcxWVRtS29vdi81ays5bmZ6eU9oWUVuRHk0MmZQTXVMZlcrZTBjTUQzdTlYdTZOaEVNSWF1L1VsR0UxTWJJVzlCZzhoNGFHWkpESERac3RXVlFrNVBZZU8wWmtUa0FTTWI0bFFuelhhdVhLK0ZpREJIU2EzKzhYbFFmV0NJQkJjNlNxU3NoTlBIOU8xTmNUNGljM2lQSHQ5KytSeE9kZExsZG5aMHRMQzZUM3NzWUVJdE52TWtRYWJMSzBOTGgxcXdRM01zWml4SS85L3NjbUU4Y0tKVjJzL1pFS3RxYWhkeG9iRzhXKzlVc3NabWh1SmxhUFM0NGJ4aVhNaHZ6QmVtZDZHa21jdkhadFMyMXRPaGpVNi9WL0VMTVNlUE0wZkhGTlRZMlVWa1pHbU5BS3VPOXMydFJXV2NseGc5eERNek5JNG5OT1oyTnRMWjlNSW9FaGp4d0NyNjVtdUkzR3JOZmJ2MzBEVUlnMzZGaU1PTnJSOFNoVFVScGFob0dZUDNkMDgrWkhpUVJhRlZldkVtMXRhOXA3RkJqbVhOeU12ck9VdzlwWmgyT3lyaTVQVlJTeUlxNlZXMkRQT2pvR0RZYjBtbTNOa2M2Ym0xRkZhMnVlQVY1UFRXZHhYN2tpbG5uZFlubkp6aFh5N0tkbGtBZG5ZMlBFeVpOaW1hMFU1WXJGOGc5d2dackdKaGJPMlR5RGFjUU5DL1hZbUN6UW9vc0xCbmN1NHQ5RzA5czdPNzFPcDNEWmswaXN6NVFYQ2hHN2QrY216c1Q3eWR6Y2ptajBuMFlhaUlOQjlLbU1KT0Y1NGZObkJQcUpFOFRSbzFnNnlkNTdpUEhNenM2T2pvNkt4c3hnWUFJbVR2eFFwK1BTU082Nm16Y1BrQ1EwNFhhNzVUellEckFtVnEzcDY5Y0w4L05vWXF0MW9LeU1ZTjF5Q1dSSitKakk0T0J0blE0QWdON0FManI1UnJxQWV3K0dPQjVIWk1EaUVncjFRKy96ZlBhWGxkRWFEWEFiQlEwMTNMc1h0bGpnU0J3T2h6bEVtaDBiaFc5TlJZa1hGaTZLRWNPaVdGMmRQbjQ4S3llczFYNncyKzkvK2lUa0JsZndhb0NGWnI2d3Y1OWpuWmlZQU9XSXNXbXdWQlZZV0xpRS9JV1hJWVprUlVVRnN1Nk81ZVVIc1pnUnhYSGFiSVlPV2RVSkRRM3dqRVFpTXR3d0JSWVhFZk92Um5ONnp4NjZxa3E2N2tSSnlVR2JEUXJuNHpiQ21qeG5SR0dUOENaQWtnOWV2dzRFQW54RkltMTg0MFlvakhTeWpwYzFUMHRMc3hwcklrbEFZWURHeDZGUDRTbnRBUW8zQ2JqQkxSYUd4dWwwWWlua01rVWRZditYdmlndVBtVXlBVVRXL0oxTUpuTTYyZm45Ty9qWnRiSUM2ZnRhTGZqQll0QTRIQTdGM1pvcUU3cTh2Rng1MEhhN1hYblFOcHROZWRBa3U0ZFVvZGNmMm1xMUtnL2FZckVvRDlwc05pc1Ayb1M1aEtyUWhVSWI4N2c0L08rZ1lWK21QR2p1ZjRleTdKY0FBd0Rhbk9MSU8vcGdrQUFBQUFCSlJVNUVya0pnZ2c9PSIvPicpOwptLnNraXBhYmxlQnV0dG9ufHwobS5za2lwYWJsZUJ1dHRvbj0nPGRpdiBzdHlsZT0ib3BhY2l0eTogMC43O21pbi1oZWlnaHQ6IDI1cHg7bWF4LWhlaWdodDogMjVweDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2Rpc3BsYXk6IGlubGluZS1ibG9jaztsaW5lLWhlaWdodDogMjVweDtwYWRkaW5nLWxlZnQ6IDZweDttYXJnaW4tcmlnaHQ6IDZweDtwYWRkaW5nLXJpZ2h0OiA2cHg7Ym9yZGVyOiAjRkZGRkZGO2JhY2tncm91bmQtY29sb3I6YmxhY2s7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ij5Ta2lwIEFkIGluIFt0aW1lXXM8ZGl2PicpO20uc2tpcEJ1dHRvbnx8KG0uc2tpcEJ1dHRvbj0nPGRpdiBzdHlsZT0ibWluLWhlaWdodDogMjVweDttYXgtaGVpZ2h0OiAyNXB4O29wYWNpdHk6IDAuNjttYXJnaW4tcmlnaHQ6IDZweDtwYWRkaW5nLWxlZnQ6IDZweDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2Rpc3BsYXk6IGlubGluZS1ibG9jaztsaW5lLWhlaWdodDogMjVweDtiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14OyI+U2tpcCBBZDxpbWcgc3R5bGU9Im1heC13aWR0aDogMzBweDtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246IG1pZGRsZTsiIG9uZXJyb3I9XCdodHRwczovL2htZGFzc3RzLnNjaG5lZXZvbm1vcmdlbi5jb20vaW1nL3NraXAxODEwMDIucG5nXCcgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQVlBQUFBNi9ObHlBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQTNCcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1UTTRJRGM1TGpFMU9UZ3lOQ3dnTWpBeE5pOHdPUzh4TkMwd01Ub3dPVG93TVNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3VFUwOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXRiUzhpSUhodGJHNXpPbk4wVW1WbVBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZjMVI1Y0dVdlVtVnpiM1Z5WTJWU1pXWWpJaUI0Yld4dWN6cDRiWEE5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM4aUlIaHRjRTFOT2s5eWFXZHBibUZzUkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwRk9UWkRRalZHTUVSR01USXhNVVUyT0RReFFVVkJOME5HTVVNeU9Ua3hOU0lnZUcxd1RVMDZSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBGUmpjM09VRkdNRVJHUkRVeE1VVTJPRU0xT1VFNFFrSkdSamRHTmtRM05pSWdlRzF3VFUwNlNXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEZSamMzT1VGRlJrUkdSRFV4TVVVMk9FTTFPVUU0UWtKR1JqZEdOa1EzTmlJZ2VHMXdPa055WldGMGIzSlViMjlzUFNKQlpHOWlaU0JRYUc5MGIzTm9iM0FnUTBNZ01qQXhOeUFvVFdGamFXNTBiM05vS1NJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5KdmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09tUXpZemsxTkRCbUxUVmxZVE10TkRsbE5DMWhOR1V5TFdRMk1qUXlOVGN6Wm1VNVlTSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcEZPVFpEUWpWR01FUkdNVEl4TVVVMk9EUXhRVVZCTjBOR01VTXlPVGt4TlNJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BtNlhOVDRBQUFKcVNVUkJWSGphWXZ6Ly96L0RTQUpNRENNTWpIcDQxTU9qSGg3MThLaUhSejA4NnVGUkQ0OTZlTlREb3g0ZTlmQ29oN0VCbHNIbUlFTkR3d0JzNHVmUG45OUFGUXRBQXdEVXhqWTJOakZkWFYwcjlmWDEvVWpWQzlXREFzZ3hCeGVtU1pMMkJZTFMwdEt3RlN0V3JBUjZQZ3JrWUZJaWdCaXhRWldIZVhsNWVVQzBob1lHeDdadDI1YXFBWUdlbnA0UGtSNytSNHpZb1BJd2Nvenc4ZkV4ckY2OXVqc2FDSFIxZFgwR09vYnBWbWlWbDVkSHFLdXJhMWhaV2ZFY08zWnN4WWdvcFFNQ0FneUF5WHkrbTVzYnp6TWd1SExseXJiaGtxUnhPaENVcjllc1dUUGJFUWkwdGJXOWhrV2hSUWlBOHZYa3laTkxzckt5TXJXMHREeUdWYUdGRDJSblovdE1talJwc3BtWldjaXdLN1J3QVJjWEZ4VnBhZW1GZ1lHQk1qZUFZRVMwcFRVMU5ia1dMbHpZRHl6VS9HbWRwRmxvbEtUL2taT3YyOXZiTTRDRm1zYXdLN1R3Z2ZqNGVJY2hWMmlOdVA0d0pVbncwNmRQRENNbVNWKzdkdTBic0tNVlA2eGFXcmpBL1Buejk0RzZsVStBWUZqSE1DZ0pBL3ZPVTVxQjRPN2R1L3VHYXJWRWRCSXVLU2twdm43OStvMzc5KzhmR05ZdExXQUg0a3hUVTFQanBVdVh0Z3piN2lFTUFEMjZhTjY4ZVhNZlBIaHdpTjdkUTdxMnRCNC9mc3lRbHBhV0NVeksxeDQrZkhob1dJOTRIRDkrL0ZrcUVBQUxxVStQSGowNlFrcGdEYmxDcTYrdmIxMC9FQUJqK0FnNUJkNlFpZUdQSHo4eXBLU2tsSjRBQW1JOE8yU2JsbGV2WHIyeVk4ZU9HKzd1N3VIQXBIeU1GTS9TT2tuVFpPYUJFaXdsSldXRlB2TUFGYU9LK1lOdWJna1VtMEFQV3RMS2ZNYlJ4YVdqSGg3MThLaUhSejA4NnVGUkQ0OTZlTlREb3g0ZTlmQ29oMGM5UE9waEJnYUFBQU1BR21DMHBlSmNHRUlBQUFBQVNVVk9SSzVDWUlJPSIvPjwvZGl2PicpOwppZihtLnNpZGVsb2Fkcyl7dmFyIGM9ZnVuY3Rpb24oKXt9O20uc2lkZWxvYWRzLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5hbGlhczsiZnVuY3Rpb24iPT09dHlwZW9mIGImJihiPWIoKSk7YT1hLnVybDsiZnVuY3Rpb24iPT09dHlwZW9mIGEmJihhPWEoKSk7ZS5ZYShhLGIsW10sYyxjLGwpfSl9bC5sKG0uZ2xvYmFsQ29uZmlnLG0uY2xpZW50Q29uZmlnLG0ucHJlY2hlY2tlZCxtLm9uUmVhZHksbS5vbkZhaWx1cmUsbSk7ZG9jdW1lbnQuaGRfcmVhZHk9ITA7dmFyIGI9bS5zdGFydFBsYXllcjtiJiYiZnVuY3Rpb24iPT09dHlwZW9mIGImJmIoKX1lbHNlIGtjKGZhLDUwKX1mdW5jdGlvbiByKGMsYil7aWYoZS5jbyllLnRyYWNrKCJzdGF0c19oZF9ieXBhc3MiLCIiLCEwKTtlbHNlIGlmKG0mJmwpeyhtLmFkVGFnfHxtLnByZXJvbGxBZFRhZykmJmMucGF1c2UoKTtlLnYoay5mZCxjLnUoKSk7aWYoYy5nZXRDdXJyZW50VGltZSl7dmFyIGE9Yy5nZXRDdXJyZW50VGltZSgpO2EmJgplLnRyYWNrKCJhY3RpdmF0ZWRBdCIsYSl9Yj9sLkthPSEwOmUudHJhY2soInN0YXRzX2hkX2FiZCIsIiIsITApO2E9bmV3IGdhO2EuZmYoYyk7YS5CdChsKTthLkF0KG0pO2EubXQoKTthLmcoKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cihjLGIpfS5iaW5kKHRoaXMpLDUwKX1mdW5jdGlvbiBoYShjLGIpe2MucGF1c2UoKTtpZihsLkdiLmxlbmd0aCl7dmFyIGE9bC5HYi5zaGlmdCgpO2lmKCJhZGNhbGwiPT1hLnR5cGUpe3ZhciBoO2g9ZS5IdCh7IltMT0FEU0NSSVBUXSI6ZS5iYSgxMCksIltVVElMU10iOmUuYmEoMTApLCJbQ0FMTEJBQ0tdIjplLmJhKDEwKX0pO3dpbmRvd1toWyJbTE9BRFNDUklQVF0iXV09ZS5maC5iaW5kKGUpO3dpbmRvd1toWyJbVVRJTFNdIl1dPWw7Zm9yKHdpbmRvd1toWyJbQ0FMTEJBQ0tdIl1dPWZ1bmN0aW9uKGEpe2Zvcih2YXIgaCBpbiBhKW1baF09YVtoXTtyKGMsYil9O2g9YS5zY3JpcHRzLnNoaWZ0KCk7KWUuZmgoaCxmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJzaWRlbG9hZCBzdWNjZXNzIil9LApmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJzaWRlbG9hZCBmYWlsZWQiKX0sbCl9ZWxzZSByKGMsYil9ZWxzZSByKGMsYil9Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTXM9dGhpcy5hWzFdO3RoaXMuWGs9dGhpcy5hWzFdO3RoaXMuZ2o9dGhpcy5hWzddO3RoaXMuRW09dGhpcy5hWzNdO3RoaXMubmo9dGhpcy5hWzEwXTt0aGlzLkRuPXRoaXMuYVszXTt0aGlzLmZrPXRoaXMuYVsxXTt0aGlzLk9zPXRoaXMuYVsxXTt0aGlzLkl1PXRoaXMuYVs4XTt0aGlzLlZxPXRoaXMuYVs0XTt0aGlzLmo9dGhpcy5hWzNdfWMuY3Q9YjtiLnByb3RvdHlwZT17THM6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5Nczp0aGlzLldrKGEpfSxXazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuWGs6dGhpcy5maihhKX0sZmo6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLmdqOnRoaXMuRG0oYSl9LApEbTpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuRW06dGhpcy5taihhKX0sbWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLm5qOnRoaXMuQ24oYSl9LENuOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5Ebjp0aGlzLmVrKGEpfSxlazpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuZms6dGhpcy5OcyhhKX0sTnM6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLk9zOnRoaXMuSHUoYSl9LEh1OmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5JdTp0aGlzLlVxKGEpfSxVcTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuVnE6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBpYT1jLmN0fHxpYSxsYz1uZXcgaWEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1sYy5Mcyg0KTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5jbz0KITE7dGhpcy5TYT0ic2V0dXAiO3RoaXMuS2M9W107dGhpcy5qZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLllzLmJpbmQodGhpcykpO3RoaXMua2I9e307dGhpcy5OZz17fTt0aGlzLmNmPSExfWMuJGo9YjtiLnByb3RvdHlwZT17YnU6ZnVuY3Rpb24oKXt2YXIgYT0iIixiO2ZvcihiIGluIHRoaXMua2IpdGhpcy5rYi5oYXNPd25Qcm9wZXJ0eShiKSYmKGErPWIrdGhpcy5rYltiXSsiXyIpO3JldHVybiBhfSx6YzpmdW5jdGlvbigpe3RoaXMuY2Z8fCh0aGlzLmNmPWUuYmEoMTApKTtyZXR1cm4gdGhpcy5jZn0sbGI6ZnVuY3Rpb24oYSl7dGhpcy5rYlthXXx8KHRoaXMua2JbYV09MCk7dGhpcy5rYlthXSs9MTs1PHRoaXMua2JbYV0mJiF0aGlzLk5nW2FdJiYodGhpcy5OZ1thXT0hMCwibmV3QmlnQWRJZCI9PWEmJnRoaXMudHJhY2soInN0YXRzX2hkX2NoZWNrdHJhY2tzIix0aGlzLmJ1KCksITApKX0samU6ZnVuY3Rpb24oKXt0aGlzLmFhPXt1cmxzOnt9LApob21hZFVybHM6e30sb3JpZ2luYWxVcmxzOnt9LHNjcmlwdHM6e30sZXZlbnRsaXN0ZW5lcjpbXSxnZW5lcmFsRXZlbnRsaXN0ZW5lcjpbXSxpRnJhbWVzOltdLGlGcmFtZU9uTG9hZEhhbmRsZXI6e30saUZyYW1lVXJsOiIiLHRyYWNlOltdLHN0YWNrOltdLGVycm1zZzpbXX19LGpuOmZ1bmN0aW9uKGEpe3RoaXMuYWEuZXJybXNnLnB1c2goYSl9LHBvc3RNZXNzYWdlOmZ1bmN0aW9uKGEsYil7dHJ5e2EuY29udGVudFdpbmRvdyYmKGE9YS5jb250ZW50V2luZG93KX1jYXRjaChkKXt9YSYmYS5wb3N0TWVzc2FnZSYmYS5wb3N0TWVzc2FnZShiLCIqIil9LG1hOmZ1bmN0aW9uKGEsYixkKXt0aGlzLnBvc3RNZXNzYWdlKGEse3R5cGU6InZwYWlkIixldmVudDpiLGRhdGE6ZH0pfSxZczpmdW5jdGlvbihhKXthJiZhLmRhdGEmJmEuZGF0YS50eXBlJiYidnBhaWQiPT1hLmRhdGEudHlwZSYmdGhpcy5YcyhhLmRhdGEpfSxYczpmdW5jdGlvbihhKXtpZih0aGlzLmFhJiZ0aGlzLmFhLmV2ZW50bGlzdGVuZXIpZm9yKHZhciBiPQp0aGlzLmFhLmV2ZW50bGlzdGVuZXIubGVuZ3RoLGQ9MDtkPGI7ZCsrKXRoaXMuYWEmJnRoaXMuYWEuZXZlbnRsaXN0ZW5lciYmdGhpcy5hYS5ldmVudGxpc3RlbmVyW2RdJiZhLmV2ZW50PT10aGlzLmFhLmV2ZW50bGlzdGVuZXJbZF0ubmFtZSYmdGhpcy5hYS5ldmVudGxpc3RlbmVyW2RdLmNiKGEpfSxiZTpmdW5jdGlvbihhLGIpe3RoaXMuYWEuZXZlbnRsaXN0ZW5lci5wdXNoKHtuYW1lOmEsY2I6Yn0pfSxsZzpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmdxKGEpLGQ9ITE7aWYoYilyZXR1cm4gdGhpcy5laChhLCJQT1NUIix7aG9tYWRfcmVzb2x2ZV9oYXNoOmJ9LGZ1bmN0aW9uKGEpe3RyeXtkPUpTT04ucGFyc2UoYS5yZXNwb25zZVRleHQpLnVybH1jYXRjaChiKXtjb25zb2xlLmxvZygid3RmIixiKX19LGZ1bmN0aW9uKCl7fSwhMCwhMCksZH0sZ3E6ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IFJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPyhbdy4tXSopOj8uKihbMC05XSspPy8/KFthLWYwLTldezQwfSkvPyQiLAoiZyIpO2lmKChiPWIuZXhlYyhhKSkmJihiWzJdfHxiWzVdKSl7aWYoYlsyXSlyZXR1cm4gYlsyXTtpZihiWzVdKXJldHVybiBiWzVdfWVsc2UgaWYoYj1uZXcgUmVnRXhwKCJeKGh0dHBzPyk6Ly8oW3cuLV0qKTo/LiooWzAtOV0rKT8vPyhbYS1mMC05XXs0MH0pLz8kIiwiZyIpLChiPWIuZXhlYyhhKSkmJmJbNF0pcmV0dXJuIGJbNF07cmV0dXJuITF9LGduOmZ1bmN0aW9uKGEsYil7aWYoYiYmISgwPnRoaXMubGEoYSkuaG9zdC5pbmRleE9mKCJkYW1vaCIpKSl7aWYoYT09Yil7aWYoZS5RcChhKSlyZXR1cm47KGI9dGhpcy5sZyhhKSl8fChiPWEpfTA9PT1iLmluZGV4T2YoIi8vIikmJihiPSJodHRwczoiK2IpO3RoaXMuYWEudXJsc1thXT1iO3RoaXMuYWEudXJsc1tiXT1hO3RoaXMuYWEuaG9tYWRVcmxzW2FdPWI7dGhpcy5hYS5vcmlnaW5hbFVybHNbYl09YX19LFFwOmZ1bmN0aW9uKGEpe3ZhciBiPSExO3RoaXMuYWEuaG9tYWRVcmxzW2FdJiYoYj10aGlzLmFhLmhvbWFkVXJsc1thXSk7CnJldHVybiBifSx0ZzpmdW5jdGlvbihhKXt2YXIgYj0hMTt0aGlzLmFhLm9yaWdpbmFsVXJscyYmdGhpcy5hYS5vcmlnaW5hbFVybHNbYV0mJihiPXRoaXMuYWEub3JpZ2luYWxVcmxzW2FdKTtyZXR1cm4gYn0sZWI6ZnVuY3Rpb24oYSxiKXtifHwoYj0iIik7dGhpcy50cmFjaygic3RhdHNfdnBhaWRfIithLGIsITApfSxwcjpmdW5jdGlvbihhKXtyZXR1cm4iYWJvdXQ6YmxhbmsiPT1hfHwiYWJvdXQ6c2VsZiI9PWF8fCIiPT1hfSx0ZTpmdW5jdGlvbihhKXtpZighYXx8Im9iamVjdCIhPT10eXBlb2YgYSlyZXR1cm4gMDt2YXIgYj0wLGQ9IiI7Zm9yKGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiZiKys7cmV0dXJuIGJ9LENnOmZ1bmN0aW9uKGEsYil7dmFyIGQ9YVtiXTtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBkP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGQpOiJmdW5jdGlvbiI9PT10eXBlb2YgZD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChkKCkpOiJvYmplY3QiPT09dHlwZW9mIGQ/CmQ6bnVsbH0sSGg6ZnVuY3Rpb24oYSl7Zm9yKDthIT1kb2N1bWVudC5ib2R5JiZudWxsIT1hOylhPWEucGFyZW50RWxlbWVudDtyZXR1cm4gYT09ZG9jdW1lbnQuYm9keT8hMDohMX0sV2c6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiYiZnVuY3Rpb24iPT09dHlwZW9mIGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PyhhPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpPzA8PWEudG9wJiYwPD1hLmxlZnQmJmEuYm90dG9tPD0od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSYmYS5yaWdodDw9KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpOiExOiExfSxCZTpmdW5jdGlvbihhLGIpe3ZhciBkPTAsZj0wLG49MCxjPTAsZT0hMTtpZighYXx8IWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0fHwiZnVuY3Rpb24iIT09dHlwZW9mIGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXJldHVybiExOwp2YXIgZz1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFnKXJldHVybiExO249Zy5oZWlnaHQqZy53aWR0aDtkPWcud2lkdGg7Zj1nLmhlaWdodDswPmcudG9wJiYoZis9Zy50b3ApO2cuYm90dG9tPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpJiYoZi09Zy5ib3R0b20tKHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpOzA+Zy5sZWZ0JiYoZCs9Zy5sZWZ0KTtnLnJpZ2h0Pih3aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKSYmKGQtPWcucmlnaHQtKHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpKTswPmYmJihmPTApOzA+ZCYmKGQ9MCk7MDxuJiYoYz0xMDAvbipkKmYpO2M+PWImJihlPSEwKTtyZXR1cm4gZX0sQ2U6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5CZShhLmVsLAphLnBlcmNlbnQpO2Euc3RhcnRUaW1lfHwoYS5zdGFydFRpbWU9KG5ldyBEYXRlKS5nZXRUaW1lKCkpO2lmKGIpe2lmKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWEuc3RhcnRUaW1lPj1hLnRpbWVNUyl7YS5jYigpO3JldHVybn19ZWxzZSBhLnN0YXJ0VGltZT0hMTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuQ2UoYSl9LmJpbmQodGhpcyksMTAwKX0sRWI6ZnVuY3Rpb24oYSl7YT1hJiYibnVtYmVyIj09PXR5cGVvZiBhP01hdGguYWJzKGEpOjEwO3JldHVybiBNYXRoLnJvdW5kKE1hdGgucG93KDEwLGEpKiguODk5OTk5OTk5Kk1hdGgucmFuZG9tKCkrLjEpKX0sYmE6ZnVuY3Rpb24oYSl7YT1hJiYibnVtYmVyIj09PXR5cGVvZiBhJiYwPGE/TWF0aC5yb3VuZChhKToxMDtmb3IodmFyIGI9IiIsZD0wO2Q8YTtkKyspYis9U3RyaW5nLmZyb21DaGFyQ29kZSgoLjU+TWF0aC5yYW5kb20oKT82NTo5NykrTWF0aC5mbG9vcigyNipNYXRoLnJhbmRvbSgpKSk7cmV0dXJuIGJ9LHZlOmZ1bmN0aW9uKGEpe3ZhciBiPQowLGQsZjtpZigwPT09YS5sZW5ndGgpcmV0dXJuIGI7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKylmPWEuY2hhckNvZGVBdChkKSxiPShiPDw1KS1iK2YsYnw9MDtyZXR1cm4gYn0sRWg6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2YXIgaD0iIixkLGY7Zm9yKGQ9NzswPD1kO2QtLSlmPWE+Pj40KmQmMTUsaCs9Zi50b1N0cmluZygxNik7cmV0dXJuIGh9ZnVuY3Rpb24gZChhLGIpe3JldHVybiBhPDxifGE+Pj4zMi1ifXZhciBmLG4sYz1BcnJheSg4MCksZT0xNzMyNTg0MTkzLGc9NDAyMzIzMzQxNyxrPTI1NjIzODMxMDIsTD0yNzE3MzM4NzgsbD0zMjg1Mzc3NTIwLHAsbSx0LEIscjthPWEmJiJzdHJpbmciPT09dHlwZW9mIGE/YToiIjtwPWEubGVuZ3RoO3ZhciBxPVtdO2ZvcihmPTA7ZjxwLTM7Zis9NCluPWEuY2hhckNvZGVBdChmKTw8MjR8YS5jaGFyQ29kZUF0KGYrMSk8PDE2fGEuY2hhckNvZGVBdChmKzIpPDw4fGEuY2hhckNvZGVBdChmKzMpLHEucHVzaChuKTtzd2l0Y2gocCUKNCl7Y2FzZSAwOmY9MjE0NzQ4MzY0ODticmVhaztjYXNlIDE6Zj1hLmNoYXJDb2RlQXQocC0xKTw8MjR8ODM4ODYwODticmVhaztjYXNlIDI6Zj1hLmNoYXJDb2RlQXQocC0yKTw8MjR8YS5jaGFyQ29kZUF0KHAtMSk8PDE2fDMyNzY4O2JyZWFrO2Nhc2UgMzpmPWEuY2hhckNvZGVBdChwLTMpPDwyNHxhLmNoYXJDb2RlQXQocC0yKTw8MTZ8YS5jaGFyQ29kZUF0KHAtMSk8PDh8MTI4fWZvcihxLnB1c2goZik7MTQhPXEubGVuZ3RoJTE2OylxLnB1c2goMCk7cS5wdXNoKHA+Pj4yOSk7cS5wdXNoKHA8PDMmNDI5NDk2NzI5NSk7Zm9yKGE9MDthPHEubGVuZ3RoO2ErPTE2KXtmb3IoZj0wOzE2PmY7ZisrKWNbZl09cVthK2ZdO2ZvcihmPTE2Ozc5Pj1mO2YrKyljW2ZdPWQoY1tmLTNdXmNbZi04XV5jW2YtMTRdXmNbZi0xNl0sMSk7bj1lO3A9ZzttPWs7dD1MO0I9bDtmb3IoZj0wOzE5Pj1mO2YrKylyPWQobiw1KSsocCZtfH5wJnQpK0IrY1tmXSsxNTE4NTAwMjQ5JjQyOTQ5NjcyOTUsQj10LAp0PW0sbT1kKHAsMzApLHA9bixuPXI7Zm9yKGY9MjA7Mzk+PWY7ZisrKXI9ZChuLDUpKyhwXm1edCkrQitjW2ZdKzE4NTk3NzUzOTMmNDI5NDk2NzI5NSxCPXQsdD1tLG09ZChwLDMwKSxwPW4sbj1yO2ZvcihmPTQwOzU5Pj1mO2YrKylyPWQobiw1KSsocCZtfHAmdHxtJnQpK0IrY1tmXSsyNDAwOTU5NzA4JjQyOTQ5NjcyOTUsQj10LHQ9bSxtPWQocCwzMCkscD1uLG49cjtmb3IoZj02MDs3OT49ZjtmKyspcj1kKG4sNSkrKHBebV50KStCK2NbZl0rMzM5NTQ2OTc4MiY0Mjk0OTY3Mjk1LEI9dCx0PW0sbT1kKHAsMzApLHA9bixuPXI7ZT1lK24mNDI5NDk2NzI5NTtnPWcrcCY0Mjk0OTY3Mjk1O2s9ayttJjQyOTQ5NjcyOTU7TD1MK3QmNDI5NDk2NzI5NTtsPWwrQiY0Mjk0OTY3Mjk1fXJldHVybihiKGUpK2IoZykrYihrKStiKEwpK2IobCkpLnRvTG93ZXJDYXNlKCl9LHZiOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iIixkLGYsbixjLGUsZyxrPTA7azxhLmxlbmd0aDspZD1hLmNoYXJDb2RlQXQoaysrKSwKZj1hLmNoYXJDb2RlQXQoaysrKSxuPWEuY2hhckNvZGVBdChrKyspLGM9ZD4+MixkPShkJjMpPDw0fGY+PjQsZT0oZiYxNSk8PDJ8bj4+NixnPW4mNjMsaXNOYU4oZik/ZT1nPTY0OmlzTmFOKG4pJiYoZz02NCksYj1iKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGMpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGQpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGUpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGcpO3JldHVybiBifSxtcjpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudmVuZG9yJiYtMTxuYXZpZ2F0b3IudmVuZG9yLmluZGV4T2YoIkFwcGxlIil9LAp1YzpmdW5jdGlvbigpe3ZhciBhPXt9LGI9ITEsZD0hMSxmPSExLG49ITEsYz0hMSxlPSExLGc9ITEsaz0hMSxtPSExLGw9ITE7dHJ5e2I9Y2hlY2tGb3JQaGFudG9tSlMoKX1jYXRjaChwKXt9dHJ5ey9cYkhlYWRsZXNzQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJihkPSEwKX1jYXRjaChyKXt9dHJ5e2Y9d2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoIndlYmRyaXZlciIpfHxuYXZpZ2F0b3IuTmI/ITA6ITF9Y2F0Y2godCl7fXRyeXtuPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk9wZXJhIiksYz0tMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94IiksZT0tMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJTYWZhcmkiKSxnPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk1TSUUiKSxtPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkNocm9tZSIpLGs9IWcmJiEhd2luZG93LlN0eWxlTWVkaWEsCmw9KG18fG4pJiYhIXdpbmRvdy5DU1N9Y2F0Y2gocSl7fWEuaXNQaGFudG9tSlM9YjthLmlzQ2hyb21lSGVhZGxlc3M9ZDthLmlzRmlyZWZveEhlYWRsZXNzPWY7YS5pc09wZXJhPW47YS5pc0ZpcmVmb3g9YzthLmlzU2FmYXJpPWU7YS5pc0lFPWc7YS5pc0VkZ2U9azthLmlzQ2hyb21lPW07YS5pc0JsaW5rPWw7cmV0dXJuIGF9LGFxOmZ1bmN0aW9uKCl7dmFyIGE9IlUiLGI9dGhpcy51YygpO2IuaXNQaGFudG9tSlM/YT0iSFAiOmIuaXNDaHJvbWVIZWFkbGVzcz9hPSJIQyI6Yi5pc0ZpcmVmb3hIZWFkbGVzcz9hPSJIRiI6KGIuaXNCbGluayYmKGE9IkIiKSxiLmlzT3BlcmEmJihhPSJPIiksYi5pc0ZpcmVmb3gmJihhPSJGIiksYi5pc1NhZmFyaSYmKGE9IlMiKSxiLmlzSUUmJihhPSJJIiksYi5pc0VkZ2UmJihhPSJFIiksYi5pc0Nocm9tZSYmKGE9IkMiKSk7cmV0dXJuIGF9LFRhOmZ1bmN0aW9uKCl7dmFyIGE9e1NpOmZ1bmN0aW9uKCl7cmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSl9LApjajpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9CbGFja0JlcnJ5L2kpfSxQcTpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpfSxqbDpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9PcGVyYSBNaW5pL2kpfSxJbTpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9JRU1vYmlsZS9pKX0sTW46ZnVuY3Rpb24oKXtyZXR1cm4gYS5TaSgpfHxhLmNqKCl8fGEuUHEoKXx8YS5qbCgpfHxhLkltKCl9fTtyZXR1cm4gYS5NbigpfSxsYTpmdW5jdGlvbihhKXt2YXIgYj0ic291cmNlIHByb3RvY29sIGF1dGhvcml0eSB1c2VySW5mbyB1c2VyIHBhc3N3b3JkIGhvc3QgcG9ydCByZWxhdGl2ZSBwYXRoIGRpcmVjdG9yeSBmaWxlIHF1ZXJ5IGFuY2hvciIuc3BsaXQoIiAiKTthPS9eKD86KD8hW146QF0rOlteOkBcL10qQCkoW146XC8/Iy5dKyk6KT8oPzpcL1wvKT8oKD86KChbXjpAXSopKD86OihbXjpAXSopKT8pP0ApPyhbXjpcLz8jXSopKD86OihcZCopKT8pKCgoXC8oPzpbXj8jXSg/IVtePyNcL10qXC5bXj8jXC8uXSsoPzpbPyNdfCQpKSkqXC8/KT8oW14/I1wvXSopKSg/Olw/KFteI10qKSk/KD86IyguKikpPykvLmV4ZWMoYSk7CmZvcih2YXIgZD17fSxmPTE0O2YtLTspZFtiW2ZdXT1hW2ZdfHwiIjtkLnF1ZXJ5S2V5PXt9O2RbYlsxMl1dLnJlcGxhY2UoLyg/Ol58JikoW14mPV0qKT0/KFteJl0qKS9nLGZ1bmN0aW9uKGEsYixoKXtiJiYoZC5xdWVyeUtleVtiXT1oKX0pO3JldHVybiBkfSx1bmlxdWU6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXt9LGQ9W10sZj0wLG49YS5sZW5ndGg7ZjxuOysrZiliLmhhc093blByb3BlcnR5KGFbZl0pfHwoZC5wdXNoKGFbZl0pLGJbYVtmXV09MSk7cmV0dXJuIGR9LFNiOmZ1bmN0aW9uKGEpe2E9dGhpcy5sYShhKS5ob3N0LnNwbGl0KCIuIik7dmFyIGI9IiI7YVthLmxlbmd0aC0yXSYmKGIrPWFbYS5sZW5ndGgtMl0rIi4iKTthW2EubGVuZ3RoLTFdJiYoYis9YVthLmxlbmd0aC0xXSk7cmV0dXJuIGJ9LEJhOmZ1bmN0aW9uKGEpe3ZhciBiPSIiLGQ9ITE7d2luZG93JiZ3aW5kb3cubG9jYXRpb24mJndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSYmKGI9d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKTsKYiYmLTE8Yi5pbmRleE9mKGEpJiYoZD0hMCk7cmV0dXJuIGR9LHFxOmZ1bmN0aW9uKCl7dmFyIGE9IiIsYj0iIixkPSIiO3RyeXthPXdpbmRvdy5sb2NhdGlvbi5ob3N0LGI9d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLHdpbmRvdyE9d2luZG93LnRvcCYmKGE9d2luZG93LnRvcC5sb2NhdGlvbi5ob3N0LGI9d2luZG93LnRvcC5sb2NhdGlvbi5wYXRobmFtZSl9Y2F0Y2goZil7ZG9jdW1lbnQucmVmZXJyZXImJihkPXRoaXMubGEoZG9jdW1lbnQucmVmZXJyZXIpLGE9ZC5ob3N0LGI9ZC5wYXRoKX1yZXR1cm4gYStifSxVbzpmdW5jdGlvbihhLGIpe2Zvcih2YXIgZD1bXSxmPVtdLG49MDtuPGIubGVuZ3RoO24rKylkW2Jbbl1dPSEwO2ZvcihuPTA7bjxhLmxlbmd0aDtuKyspZFthW25dXXx8Zi5wdXNoKGFbbl0pO3JldHVybiBmfSxXdDpmdW5jdGlvbihhLGIpe3ZhciBkPS0xLGY9IiI7dHJ5ezA8YS5pbmRleE9mKCIlIikmJjA8Yj8oZj1hLnNwbGl0KCIlIiksZD1iLzEwMCpmKTooZD1hLnNwbGl0KCI6IiksCmQ9MzYwMCorZFswXSs2MCorZFsxXSsgK2RbMl0sZD1NYXRoLnJvdW5kKGQpKX1jYXRjaChuKXtkPS0xfXJldHVybiBpc05hTihkKT8tMTpkfSx5ZzpmdW5jdGlvbihhKXthPU1hdGgucm91bmQoYSk7dmFyIGI9Ii0tOi0tIjswPD1hJiYoYT1NYXRoLmZsb29yKGEpLGI9TWF0aC5mbG9vcihhLzYwKSxiPXRoaXMuVmgoYikrIjoiK3RoaXMuVmgoTWF0aC5mbG9vcihhLTYwKmIpKSk7cmV0dXJuIGJ9LFZoOmZ1bmN0aW9uKGEpe3JldHVybiAxMD5hPyIwIithLnRvU3RyaW5nKCk6YS50b1N0cmluZygpfSxlZjpmdW5jdGlvbihhKXt0aGlzLlNhPWF9LHZnOmZ1bmN0aW9uKGEsYixkKXt2YXIgZjtkLnN0YXRlPXRoaXMuU2E7dGhpcy5XZihkKTsiZnVuY3Rpb24iPT09dHlwZW9mIHdpbmRvdy5DdXN0b21FdmVudD9mPW5ldyBDdXN0b21FdmVudChiLHtkZXRhaWw6ZH0pOihmPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpLGYuaW5pdEN1c3RvbUV2ZW50KGIsITEsITEsZCkpOwphLmRpc3BhdGNoRXZlbnQoZil9LHdjOmZ1bmN0aW9uKGEsYixkKXtifHwoYj0iaGRFdmVudCIpO2R8fChkPXdpbmRvdyk7dGhpcy52ZyhkLGIsYSl9LHY6ZnVuY3Rpb24oYSxiLGQsZixuLGMsZyl7dmFyIEE9YTtkJiZiJiYoYj1rLlhhKGIsZCkpO2ImJihBPWsuWGEoYSxiKSk7ZiYmKEE9ay5YYShBLGYpKTtuJiYoQT1rLlhhKEEsbikpO2MmJihBPWsuWGEoQSxjKSk7ZyYmKEE9ay5YYShBLGMpKTtlLndjKEEpfSwkczpmdW5jdGlvbihhKXt2YXIgYj17fTtpZighYS5jb2RlKXJldHVybiExO2lmKGEuc3BlY2lhbF90cmFjayliPWE7ZWxzZSBpZighKGEuY29kZSYmMTAwNTw9YS5jb2RlJiYxMDI5Pj1hLmNvZGUpfHwxMDIzPT1hLmNvZGV8fDEwMTg9PWEuY29kZSlyZXR1cm47dHJ5e2phJiYoYi5zZXNzaW9uX2lkPWphKTtiLmFkc2Vzc2lvbl9pZD1hLmFkc2Vzc2lvbl9pZD9hLmFkc2Vzc2lvbl9pZDoiZXBvbiI7YS5ob21hZEltcHJlc3Npb25BZElkJiYoYi5hZF9pZD1hLmhvbWFkSW1wcmVzc2lvbkFkSWQpOwpiLmV2ZW50PWEuY29kZTtiLnNpdGVfaHJlZj10aGlzLnFxKCk7aWYoYS5zdGF0ZSlzd2l0Y2goYS5zdGF0ZSl7Y2FzZSAicHJlcm9sbCI6Yi5wb3NpdGlvbj0xO2JyZWFrO2Nhc2UgIm1pZHJvbGwiOmIucG9zaXRpb249MjticmVhaztjYXNlICJwb3N0cm9sbCI6Yi5wb3NpdGlvbj0zO2JyZWFrO2RlZmF1bHQ6Yi5wb3NpdGlvbj0wfWEudmlkZW9fZHVyYXRpb24mJihiLnZpZGVvX2R1cmF0aW9uPWEudmlkZW9fZHVyYXRpb24pfWNhdGNoKGQpe31yZXR1cm4gYn0sV2Y6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy4kcyhhKTtpZihiKWlmKCFsfHwhbC5YKXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5XZihiKX0uYmluZCh0aGlzKSw1MDApO2Vsc2UgaWYobC5pc0VuYWJsZWQpe2lmKCJvYmplY3QiPT10eXBlb2YgYil0cnl7Yj1KU09OLnN0cmluZ2lmeShiKX1jYXRjaChkKXtiPWIudG9TdHJpbmc/Yi50b1N0cmluZygpOiIifWImJmIudHJpbSYmKGI9Yi50cmltKCkpO2E9bC5EZCgpOwpsLnphKGEsITApO2E9bC56YShhLCEwKTthLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0iIjthLmRhdGEuaG9tYWRfYXQ9YjtsLkxhKGEsZnVuY3Rpb24oKXt9KX19LHRyYWNrOmZ1bmN0aW9uKGEsYixkKXtpZihkKWlmKCFsfHwhbC5YKXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50cmFjayhhLGIsZCl9LmJpbmQodGhpcyksNTAwKTtlbHNlIGlmKGwuaXNFbmFibGVkKXthJiZhLnRyaW0mJihhPWEudHJpbSgpKTtiJiZiLnRyaW0mJihiPWIudHJpbSgpKTt2YXIgZj1hK2I7dGhpcy5NY3x8KHRoaXMuTWM9e30pO3RoaXMuTWNbZl18fCh0aGlzLk1jW2ZdPTApO3RoaXMuTWNbZl0rKzsxMDx0aGlzLk1jW2ZdfHwoZj1sLkRkKCkrIj9ob21hZF90cmFja19rZXk9IitlbmNvZGVVUklDb21wb25lbnQoYSkrIiZob21hZF90cmFja192YWx1ZT0iK2VuY29kZVVSSUNvbXBvbmVudChiKSxsLnphKGYsITApLGY9bC56YShmLCEwKSxmLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0KIiIsZi5kYXRhLmhvbWFkX3RyYWNrX2tleT0iKiIrZW5jb2RlVVJJQ29tcG9uZW50KGEpKyIqIixmLmRhdGEuaG9tYWRfdHJhY2tfdmFsdWU9IioiK2VuY29kZVVSSUNvbXBvbmVudChiKSsiKiIsbC5MYShmLGZ1bmN0aW9uKGQpe3ZhciBmPSExO2Q9ZC5yZXNwb25zZVRleHQ7dHJ5e2Q9SlNPTi5wYXJzZShkKSxkPWQuZGF0YSxkWzBdPT1lbmNvZGVVUklDb21wb25lbnQoYSkmJihmPSEwKSxkWzFdJiZkWzFdIT1lbmNvZGVVUklDb21wb25lbnQoYikmJihmPSExKX1jYXRjaChjKXt9Znx8dGhpcy50cmFjaygic3RhdHNfaGRfdHJhY2tjaGVjayIsKGRbMF0/ZFswXToiIikrKGRbMV0/ZFsxXToiIiksITApfS5iaW5kKHRoaXMpKSl9fSxKZTpmdW5jdGlvbigpe2wmJmwuWD9sLmlzRW5hYmxlZCYmbC5xbygpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5KZSgpfS5iaW5kKHRoaXMpLDUwMCl9LHJlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEmJiJvYmplY3QiPT10eXBlb2YgYSYmCmEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYikubGVuZ3RoP3RoaXMuaWIoYS5nZXRFbGVtZW50c0J5VGFnTmFtZShiKVswXSk6IiJ9LHVlOmZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLmNoaWxkTm9kZXMmJmEuY2hpbGROb2Rlc1swXT9hLmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlOiIifSxpYjpmdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLnFkKGEpOiIifSxxZDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnVlKGEpO2ImJihiPWIudHJpbSgpKTshYiYmYS50ZXh0Q29udGVudCYmKGI9YS50ZXh0Q29udGVudCxiPWIudHJpbSgpKTtyZXR1cm4gYn0sJGY6ZnVuY3Rpb24oYSxiLGQsZil7ZD0hMTtpZihiLkVlKGEpfHx0aGlzLnByKGEpfHwwPD1hLmluZGV4T2YoImRhdGE6aW1hZ2UiKSlyZXR1cm4gYTt3aW5kb3cuc2FuZGJveCYmd2luZG93LnNhbmRib3guYmYmJndpbmRvdy5zYW5kYm94LmJmWyJTdHJpbmcucHJvdG90eXBlLmluZGV4T2YiXSYmKDA8PXNhbmRib3guYmZbIlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiJdLmJpbmQoYSkoImVycm9yIil8fApzYW5kYm94LmJmWyJTdHJpbmcucHJvdG90eXBlLmluZGV4T2YiXS5iaW5kKGEpKCJFcnJvciIpKTtpZih0aGlzLnRnKGEpKXJldHVybiB0aGlzLnRnKGEpO3ZhciBuPXtob21hZF91cmxfcHJlZml4X2FsaWFzOiJ2cGFpZCJ9O24uaG9tYWRfdXJsX3N1ZmZpeD1hO24uaG9tYWRfdXJsX3N1ZmZpeF9iYXNlNjQ9dGhpcy52YihhKTtuLmhvbWFkX3JldHVybl9vbmx5X3VybF9hbmRfaGFzaD0idHJ1ZSI7bi5ob21hZF9oYXNoX2d1ZXNzZWQ9InRydWUiO2YmJmYucG9zdCYmKG5bIlgtSG9tYWQtUG9zdCJdPSJ0cnVlIik7ZCYmKG4uaG9tYWRfaW50cm9zcGVjdD0iaWZyYW1lIik7bi5ob21hZF92cGFpZF9jb21wYXRpYmxlPSJ0cnVlIjtuLmhvbWFkX3ZwYWlkX2N0eD0idHJ1ZSI7ZiYmZi5vbmx5VVJMJiYobi5ob21hZF9yZXBsYWNlX3VybHNfaW5fdGFncz0iTWVkaWFGaWxlIik7dmFyIGM9ITE7ZD0hMTtkPXRoaXMuWWEoYSxiLkphLG4sZnVuY3Rpb24oYSl7Yz1hLnJlc3BvbnNlVGV4dH0sCmZ1bmN0aW9uKCl7fSxiLCEwKTt0cnl7Y3x8KGM9ZCksYz1KU09OLnBhcnNlKGMpfWNhdGNoKGUpe2M9ITF9Yy51cmwmJmMuaGFzaCYmKGM9Yi51ZCgpLnJlcGxhY2UoIltoYXNoXSIsYy5oYXNoKSk7dGhpcy5nbihjLGEpO3JldHVybiBjfSxZYTpmdW5jdGlvbihhLGIsZCxmLG4sYyxlLGcpe3ZhciBrPWN8fGw7Yz0hMDtnJiYoYz0hMSk7aWYoayYmay5YKWlmKGsuaXNFbmFibGVkKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSl0cnl7YT1hKCl9Y2F0Y2gobSl7bihtKX1pZigic3RyaW5nIiE9dHlwZW9mIGEpbigpO2Vsc2V7ay56YShhLGMpO2M9ay56YShhLGMpO2MuZGF0YS5ob21hZF91cmxfcHJlZml4X2FsaWFzPWI7Yy5kYXRhLmhvbWFkX2hhc2hfZ3Vlc3NlZD0idHJ1ZSI7Zm9yKHZhciByIGluIGQpYy5kYXRhW3JdPWRbcl07cmV0dXJuIGsuTGEoYyxmLG4sIiIsIiIsZSl9fWVsc2UgbigpO2Vsc2Ugd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLllhKGEsYixkLGYsbiwKayxlLGcpfS5iaW5kKHRoaXMpLDUwMCl9LGVoOmZ1bmN0aW9uKGEsYixkLGYsYyxlLGcpe3ZhciBrPSEwO2cmJihrPSExKTtpZigic3RyaW5nIiE9dHlwZW9mIGQpe2c9ZDtkPSIiO2Zvcih2YXIgbSBpbiBnKWQrPSImIittKyI9IitlbmNvZGVVUklDb21wb25lbnQoZ1ttXSk7ZD1kLnN1YnN0cigxKX12YXIgbD1uZXcgWE1MSHR0cFJlcXVlc3Q7bC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshZnx8NCE9bC5yZWFkeVN0YXRlfHwyMDAhPWwuc3RhdHVzJiYyMDEhPWwuc3RhdHVzfHxmKGwpO2MmJjQ9PWwucmVhZHlTdGF0ZSYmMjAwIT1sLnN0YXR1cyYmMjAxIT1sLnN0YXR1cyYmYyhsKX07dHJ5e2wub3BlbihiLGEsayksbC53aXRoQ3JlZGVudGlhbHM9ZSwwPGQubGVuZ3RoJiZsLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpLGwuc2VuZChkKX1jYXRjaChyKXtjJiZjKCl9cmV0dXJuIGx9LEtyOmZ1bmN0aW9uKGEsCmIsZCl7dGhpcy5laChhLCJHRVQiLCIiLGZ1bmN0aW9uKGEpe2E9YS5yZXNwb25zZVRleHQ7aWYodGhpcy5LYylmb3IodmFyIGMgaW4gdGhpcy5LYylhPWEuc3BsaXQoYykuam9pbih0aGlzLktjW2NdKTtjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2MudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtjLnNyYz0iZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIrZS52YihhKTtkJiYoYy5vbmVycm9yPWQpO2RvY3VtZW50LmhlYWQuZmlyc3RDaGlsZD9kb2N1bWVudC5oZWFkLmluc2VydEJlZm9yZShjLGRvY3VtZW50LmhlYWQuZmlyc3RDaGlsZCk6ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChjKTtiJiZzZXRUaW1lb3V0KGIsMCl9LmJpbmQodGhpcyksZCl9LGZoOmZ1bmN0aW9uKGEsYixkLGYpe3ZhciBjPXtob21hZF91cmxfcHJlZml4X2FsaWFzOiJ2cGFpZCJ9O2MuaG9tYWRfdXJsX3N1ZmZpeD1hO2MuaG9tYWRfdXJsX3N1ZmZpeF9iYXNlNjQ9dGhpcy52YihhKTtjLmhvbWFkX3JldHVybl9vbmx5X3VybF9hbmRfaGFzaD0KInRydWUiO2MuaG9tYWRfaGFzaF9ndWVzc2VkPSJ0cnVlIjt0aGlzLllhKGEsZi5KYSxjLGZ1bmN0aW9uKGEpe2E9YS5yZXNwb25zZVRleHQ7dHJ5e2E9SlNPTi5wYXJzZShhKX1jYXRjaChjKXthPSExfXRoaXMuS3IoZi51ZCgpLnJlcGxhY2UoIltoYXNoXSIsYS5oYXNoKSxiLGQpfS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7fSxmLCEwKX0sSHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuS2M9YX0sRXY6ZnVuY3Rpb24oYSxiLGQsZixjKXt0aGlzLllhKGEsZCx7fSxmdW5jdGlvbihhKXt0cnl7dmFyIGQ9SlNPTi5wYXJzZShhLnJlc3BvbnNlVGV4dCk7ZFswXSYmKGQ9ZFswXSk7ZD9kLmlkPyhiPWIucmVwbGFjZSgiW2lkXSIsZC5pZCksYj1iLnJlcGxhY2UoIltwcmljZV0iLGQucHJpY2UpLGI9Yi5yZXBsYWNlKCJbYWR2ZXJ0aXNlcl0iLGQuYWR2ZXJ0aXNlciksYj1iLnJlcGxhY2UoIltjdXJsXSIsZC5jdXJsKSxiPWIucmVwbGFjZSgiW2Zvcm1hdF0iLGQuZm9ybWF0KSxiPWIucmVwbGFjZSgiW3NyY10iLApkLnNyYyksYj1iLnJlcGxhY2UoIltwcmljZXJhbmdlXSIsZC5wcmljZXJhbmdlKSxiPWIucmVwbGFjZSgiW3BpZF0iLGQucGlkKSxiPWIucmVwbGFjZSgiW3ByaW9dIixkLnByaW8pLGI9Yi5yZXBsYWNlKCJbZGlkXSIsZC5kaWQpLGMoe3BsYWNlaG9sZGVyOmIsbWFjcm86Zn0pKTpjKHtwbGFjZWhvbGRlcjoiIixtYWNybzpmfSk6Yyh7cGxhY2Vob2xkZXI6IiIsbWFjcm86Zn0pfWNhdGNoKGUpe2Moe3BsYWNlaG9sZGVyOiIiLG1hY3JvOmZ9KX19LGZ1bmN0aW9uKCl7Yyh7cGxhY2Vob2xkZXI6IiIsbWFjcm86Zn0pfSl9LFBuOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0hMTshYjspe3ZhciBkPWEubGFzdEluZGV4T2YoIkVOQ09ERSgiKTswPmQ/Yj0hMDooZD1hLnN1YnN0cmluZyhkKzcsYS5pbmRleE9mKCIpIixkKSksYT1hLnJlcGxhY2UoIkVOQ09ERSgiK2QrIikiLGVuY29kZVVSSUNvbXBvbmVudChkKSkpfXJldHVybiBhfSxrcjpmdW5jdGlvbihhLGIpe3ZhciBkPSExO2lmKGIpZm9yKHZhciBmPQowO2Y8Yi5sZW5ndGg7ZisrKWlmKGJbZl09PWEpe2Q9ITA7YnJlYWt9cmV0dXJuIGR9fX0pKGMpO3ZhciBSPWMuJGp8fFI7bmV3IFI7dmFyIGU9bmV3IFI7KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoYSl7dGhpcy5kYXRhPWF8fHt9fWMuWmo9YjtiLlhhPWZ1bmN0aW9uKGEsYil7dmFyIGQ9e30sZjtmb3IoZiBpbiBiKWRbZl09YltmXTtmb3IoZiBpbiBhKWRbZl09YVtmXTtyZXR1cm4gZH07Yi5Rcz17Y29kZToiMTAwMCIsdHlwZToicGVuYWx0eSIsbWVzc2FnZToiIixuYW1lOiJwZW5hbHR5In07Yi5kcz17Y29kZToiMTAwMSIsdHlwZToibWVkaWFlcnJvciIsbWVzc2FnZToiIixuYW1lOiJhZEVycm9yIn07Yi5udj17Y29kZToiMTAwMiIsdHlwZToidnBhaWQiLG1lc3NhZ2U6IiIsbmFtZToidnBhaWQifTtiLnlwPXtjb2RlOiIxMDAzIix0eXBlOiJlbXB0eVZhc3QiLG1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IueHY9e2NvZGU6IjEwMDQiLHR5cGU6Im1hbGZvcm1hdHRlZFhNTCIsCm1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IuVWY9e2NvZGU6IjEwMDUiLHR5cGU6ImFkU3RhcnQiLG1lc3NhZ2U6IiIsbmFtZToiYWRTdGFydCJ9O2IuTmY9e2NvZGU6IjEwMDYiLHR5cGU6ImFkRmlyc3RRdWFydGlsZSIsbWVzc2FnZToiIixuYW1lOiJhZEZpcnN0UXVhcnRpbGUifTtiLlJmPXtjb2RlOiIxMDA3Iix0eXBlOiJhZE1pZFBvaW50IixtZXNzYWdlOiIiLG5hbWU6ImFkTWlkUG9pbnQifTtiLlZmPXtjb2RlOiIxMDA4Iix0eXBlOiJhZFRoaXJkUXVhcnRpbGUiLG1lc3NhZ2U6IiIsbmFtZToiYWRUaGlyZFF1YXJ0aWxlIn07Yi4kbT17Y29kZToiMTAwOSIsdHlwZToiYWRDb21wbGV0ZSIsbWVzc2FnZToiIixuYW1lOiJhZENvbXBsZXRlIn07Yi5QZj17Y29kZToiMTAxMCIsdHlwZToiYWRJbXByZXNzaW9uc0NhbGxlZCIsbWVzc2FnZToiIixuYW1lOiJhZEltcHJlc3Npb24ifTtiLlV1PXtjb2RlOiIxMDExIix0eXBlOiJ2YXN0TG9hZGluZ0ZhaWxlZCIsbWVzc2FnZToiIiwKbmFtZToiYWRFcnJvciJ9O2IuY3M9e2NvZGU6IjEwMTIiLHR5cGU6Im5vQ3JlYXRpdmUiLG1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IuenA9e2NvZGU6IjEwMTMiLHR5cGU6ImVtcHR5VmFzdEZyb21Ib21hZFNlcnZlckV2ZW50IixtZXNzYWdlOiIiLG5hbWU6ImFkRXJyb3IifTtiLnV2PXtjb2RlOiIxMDE0Iix0eXBlOiJ3cmFwcGVyTGltaXRSZWFjaGVkIixtZXNzYWdlOiIiLG5hbWU6ImFkRXJyb3IifTtiLmlnPXtjb2RlOiIxMDE1Iix0eXBlOiJjbGlja3Rocm91Z2giLG1lc3NhZ2U6IiIsbmFtZToiYWRDbGljayJ9O2IuUG89e2NvZGU6IjEwMTYiLHR5cGU6ImNvbnRpbnVlQ29udGVudCIsbWVzc2FnZToiIixuYW1lOiJjb250aW51ZUNvbnRlbnQifTtiLmdkPXtjb2RlOiIxMDE3Iix0eXBlOiJjb250ZW50UGxheWVyUGxheSIsbWVzc2FnZToiIixuYW1lOiJjb250ZW50UGxheWVyUGxheSJ9O2IuZmQ9e2NvZGU6IjEwMTgiLHR5cGU6ImNvbnRlbnRQbGF5ZXJQYXVzZSIsbWVzc2FnZToiIiwKbmFtZToiY29udGVudFBsYXllclBhdXNlIn07Yi5UZj17Y29kZToiMTAxOSIsdHlwZToiYWRTa2lwcGVkIixtZXNzYWdlOiIiLG5hbWU6ImFkU2tpcHBlZCJ9O2IuYm49e2NvZGU6IjEwMjAiLHR5cGU6ImFkUmVxdWVzdCIsbWVzc2FnZToiIixuYW1lOiJhZFJlcXVlc3QifTtiLlVjPXtjb2RlOiIxMDIxIix0eXBlOiJhZFBsYXkiLG1lc3NhZ2U6IiIsbmFtZToiYWRQbGF5In07Yi5ZZD17Y29kZToiMTAyMiIsdHlwZToiYWRQYXVzZSIsbWVzc2FnZToiIixuYW1lOiJhZFBhdXNlIn07Yi4kZD17Y29kZToiMTAyMyIsdHlwZToiYWRUaW1lIixtZXNzYWdlOiIiLG5hbWU6ImFkVGltZSJ9O2IuYW49e2NvZGU6IjEwMjQiLHR5cGU6ImFkTWV0YSIsbWVzc2FnZToiIixuYW1lOiJhZE1ldGEifTtiLmJpPXtjb2RlOiIxMDI1Iix0eXBlOiJ2aWV3YWJsZSIsbWVzc2FnZToiIixuYW1lOiJ2aWV3YWJsZSJ9O2IuZnM9e2NvZGU6IjEwMjYiLHR5cGU6Im5vdFZpZXdhYmxlIixtZXNzYWdlOiIiLG5hbWU6Im5vdFZpZXdhYmxlIn07CmIueGQ9e2NvZGU6IjEwMjciLHR5cGU6Im11dGUiLG1lc3NhZ2U6IiIsbmFtZToibXV0ZSJ9O2IudGY9e2NvZGU6IjEwMjgiLHR5cGU6InVubXV0ZSIsbWVzc2FnZToiIixuYW1lOiJ1bm11dGUifTtiLmpnPXtjb2RlOiIxMDI5Iix0eXBlOiJjb250ZW50UGxheWVyTXV0ZWQiLG1lc3NhZ2U6IiIsbmFtZToiY29udGVudFBsYXllck11dGVkIn07Yi5tdj17Y29kZToiMTAzMCIsdHlwZToidnBhaWRlcnJvciIsbWVzc2FnZToiIixuYW1lOiJhZEVycm9yIn07Yi5SdT17Y29kZToiOTAwMSIsdHlwZToidmFyaWFibGVEZWxldGVkRXZlbnQiLG1lc3NhZ2U6IiIsbmFtZToidmFyaWFibGVEZWxldGVkRXZlbnQifTtiLmVzPXtjb2RlOiI5MDAyIix0eXBlOiJub1ZhcmlhYmxlU2V0dGluZ0V2ZW50IixtZXNzYWdlOiIiLG5hbWU6Im5vVmFyaWFibGVTZXR0aW5nRXZlbnQifTtiLnByb3RvdHlwZT17Z2V0RXJyb3JDb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3JDb2RlfX19KShjKTt2YXIgaz0KYy5aanx8aztjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5odT10aGlzLmFbMl07dGhpcy5Iaz10aGlzLmFbMV07dGhpcy5LdT10aGlzLmFbOF07dGhpcy5QcD10aGlzLmFbN107dGhpcy5FaT10aGlzLmFbNF07dGhpcy5Gaj10aGlzLmFbMV07dGhpcy52dT10aGlzLmFbNF07dGhpcy5vbD10aGlzLmFbNV07dGhpcy5Mbz10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs2XX1jLkFsPWI7Yi5wcm90b3R5cGU9e2d1OmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5odTp0aGlzLkdrKGEpfSxHazpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuSGs6dGhpcy5KdShhKX0sSnU6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLkt1OnRoaXMuT3AoYSl9LE9wOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5QcDp0aGlzLkRpKGEpfSxEaTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuRWk6CnRoaXMuRWooYSl9LEVqOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5Gajp0aGlzLnV1KGEpfSx1dTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMudnU6dGhpcy5ubChhKX0sbmw6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLm9sOnRoaXMuS28oYSl9LEtvOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5Mbzp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmo6YX19fSkoYyk7dmFyIGthPWMuQWx8fGthLG1jPW5ldyBrYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPW1jLmd1KDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7fWMuYWs9YjtiLnByb3RvdHlwZT17dmU6ZnVuY3Rpb24oYSl7dmFyIGI9MCxkLGYsYztpZigwPT1hLmxlbmd0aClyZXR1cm4gYjtkPTA7Zm9yKGM9YS5sZW5ndGg7ZDxjO2QrKylmPWEuY2hhckNvZGVBdChkKSwKYj0oYjw8NSktYitmLGJ8PTA7cmV0dXJuIE1hdGguYWJzKGIpfSxqYTpmdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKERhdGUubm93KCkvMUUzLzM2MDAvMjQpK25hdmlnYXRvci5hcHBDb2RlTmFtZStuYXZpZ2F0b3IuYXBwTmFtZStuYXZpZ2F0b3IuYXBwVmVyc2lvbituYXZpZ2F0b3IudXNlckFnZW50K25hdmlnYXRvci5wbGF0Zm9ybSsobmF2aWdhdG9yLmxhbmd1YWdlfHxuYXZpZ2F0b3IuRHx8IngiKX0sa3E6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yb3VuZChEYXRlLm5vdygpLzFFMy8zNjAwKStuYXZpZ2F0b3IuYXBwQ29kZU5hbWUrbmF2aWdhdG9yLmFwcE5hbWUrbmF2aWdhdG9yLmFwcFZlcnNpb24rbmF2aWdhdG9yLnVzZXJBZ2VudCtuYXZpZ2F0b3IucGxhdGZvcm0rKG5hdmlnYXRvci5sYW5ndWFnZXx8bmF2aWdhdG9yLkR8fCJ4IikrKG5ldyBEYXRlKS50b1RpbWVTdHJpbmcoKS5zdWJzdHIoLTEyKX0sb2Q6ZnVuY3Rpb24oYSl7YT1wYXJzZUludChhKTtpZig2NTw9CmEmJjkwPj1hfHw5Nzw9YSYmMTIyPj1hKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGEpO2lmKDA+PWEpcmV0dXJuIiI7aWYoNjU+YSlyZXR1cm4gdGhpcy5vZChhKzY1KTtpZig5MDxhKXJldHVybiB0aGlzLm9kKE1hdGgucm91bmQoYS8yKSl9LHJldmVyc2U6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGQ9YS5sZW5ndGgtMSxiPSIiOzA8PWQ7Yis9YVtkLS1dKTtyZXR1cm4gYn0saWE6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy52ZSh0aGlzLmphKCkrIiIpLGE9KGErIiIrdGhpcy5yZXZlcnNlKGErIiIpKS5tYXRjaCgvLnsxLDJ9L2cpLGI9IiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWIrPXRoaXMub2QoYVtkXSk7MD09Yi5sZW5ndGgmJihiPSJ6b3JrIik7cmV0dXJuIGJ9LGZyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWEoKSsiMiJ9LFRnOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMudmUodGhpcy5rcSgpKyIiKSxhPShhKyIiK3RoaXMucmV2ZXJzZShhKyIiKSkubWF0Y2goLy57MSwyfS9nKSwKYj0iIixkPTA7ZDxhLmxlbmd0aDtkKyspYis9dGhpcy5vZChhW2RdKTswPT1iLmxlbmd0aCYmKGI9InpvcmsiKTtyZXR1cm4gYn19fSkoYyk7dmFyIEo9Yy5ha3x8SjtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5kbT10aGlzLmFbOV07dGhpcy5xdj10aGlzLmFbMl07dGhpcy5tbz10aGlzLmFbMV07dGhpcy5QdT10aGlzLmFbNl07dGhpcy5DaT10aGlzLmFbNl07dGhpcy5xbj10aGlzLmFbN107dGhpcy53az10aGlzLmFbM107dGhpcy5qPXRoaXMuYVszXX1jLlNvPWI7Yi5wcm90b3R5cGU9e2NtOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5kbTp0aGlzLnB2KGEpfSxwdjpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMucXY6dGhpcy5sbyhhKX0sbG86ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLm1vOnRoaXMuT3UoYSl9LE91OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhPwp0aGlzLlB1OnRoaXMuQmkoYSl9LEJpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5DaTp0aGlzLnBuKGEpfSxwbjpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMucW46dGhpcy52ayhhKX0sdms6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLndrOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuajphfX19KShjKTt2YXIgbGE9Yy5Tb3x8bGEsbmM9bmV3IGxhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9bmMuY20oNCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe312YXIgYT0veHl6Ly50ZXN0KGZ1bmN0aW9uKCl7eHl6fSk/L1xiX3N1cGVyXGIvOi8uKi87Yi5leHRlbmQ9ZnVuY3Rpb24oaCl7dmFyIGQ9dGhpcy5wcm90b3R5cGUsZj1PYmplY3QuY3JlYXRlKGQpLGM7Zm9yKGMgaW4gaClmW2NdPSJmdW5jdGlvbiI9PT0KdHlwZW9mIGhbY10mJiJmdW5jdGlvbiI9PXR5cGVvZiBkW2NdJiZhLnRlc3QoaFtjXSk/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD10aGlzLm07dGhpcy5tPWRbYV07dmFyIGY9Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5tPWg7cmV0dXJuIGZ9fShjLGhbY10pOmhbY107aD0iZnVuY3Rpb24iPT09dHlwZW9mIGYubD9mLmhhc093blByb3BlcnR5KCJpbml0Iik/Zi5sOmZ1bmN0aW9uKCl7ZC5sLmFwcGx5KHRoaXMsYXJndW1lbnRzKX06ZnVuY3Rpb24oKXt9O2gucHJvdG90eXBlPWY7Zi5jb25zdHJ1Y3Rvcj1oO2guZXh0ZW5kPWIuZXh0ZW5kO3JldHVybiBofTtjLmlqPWJ9KShjKTt2YXIgTT1jLmlqfHxNO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnVzPXRoaXMuYVs4XTt0aGlzLkFvPXRoaXMuYVsyXTt0aGlzLmlpPXRoaXMuYVs3XTt0aGlzLkJuPQp0aGlzLmFbNV07dGhpcy5UdD10aGlzLmFbOV07dGhpcy5zcz10aGlzLmFbNV07dGhpcy5XdT10aGlzLmFbOF07dGhpcy5qPXRoaXMuYVsxXX1jLlNrPWI7Yi5wcm90b3R5cGU9e3RzOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy51czp0aGlzLnpvKGEpfSx6bzpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuQW86dGhpcy5oaShhKX0saGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5paTp0aGlzLkFuKGEpfSxBbjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuQm46dGhpcy5TdChhKX0sU3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlR0OnRoaXMucnMoYSl9LHJzOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5zczp0aGlzLlZ1KGEpfSxWdTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuV3U6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBtYT1jLlNrfHxtYSxvYz1uZXcgbWEoMSxuZXcgRGF0ZSwKMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9b2MudHMoNCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7Yy5zbD1NLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLk1hPXt9O3RoaXMuSz1udWxsO3RoaXMuR2M9MTAwO3RoaXMuRmI9MDt0aGlzLlVhPTE1MDt0aGlzLkhiPTA7dGhpcy5DdChiKX0sZzpmdW5jdGlvbigpe30sUjpmdW5jdGlvbigpe3RoaXMuRmI8PXRoaXMuVWE/KHRoaXMuRmIrKyx0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuZy5iaW5kKHRoaXMpLHRoaXMuR2MpKTowPnRoaXMuVWEmJih0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuZy5iaW5kKHRoaXMpLHRoaXMuR2MpKX0sb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GYj50aGlzLlVhPyEwOiExfSxhZjpmdW5jdGlvbigpe3RoaXMuRmI9MH0sTzpmdW5jdGlvbigpe3JldHVybiJlbXB0eSJ9LEN0OmZ1bmN0aW9uKGIpe3RoaXMuSz0KYn0saXE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LfSxQOmZ1bmN0aW9uKGIpe2UudHJhY2soInN0YXRzX3BsYXllciIsYi5PKCksITApO3RoaXMuTWFbYi5qYSgpXT1iO04mJk4uYWgmJk4uYXUoYil9LCR2OmZ1bmN0aW9uKCl7cmV0dXJuIGUudGUodGhpcy5NYSl9LE46ZnVuY3Rpb24oYil7dmFyIGE9Yi52aWRlb1RhZyxoO2ZvcihoIGluIHRoaXMuTWEpaWYoYT09dGhpcy5NYVtoXS52aWRlb1RhZylyZXR1cm4hMDtyZXR1cm4gdGhpcy5NYVtiLmphKCldPyEwOiExfSxscjpmdW5jdGlvbihiKXtiPWIuSWEoKTtmb3IodmFyIGEgaW4gdGhpcy5NYSlpZihiLmlkPT10aGlzLk1hW2FdLklhKCkuaWQpcmV0dXJuITA7cmV0dXJuITF9LHB3OmZ1bmN0aW9uKGIpe3RoaXMuTWFbYi5pZF09bnVsbH19KX0pKGMpO3ZhciBxPWMuc2x8fHE7KGZ1bmN0aW9uKGMpe2MudWw9TS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy52aWRlb1RhZz10aGlzLmNvbnRhaW5lcj10aGlzLmlkPW51bGw7dGhpcy5HYz0KMTA7dGhpcy5GYj0wO3RoaXMuVWE9NTA7dGhpcy5WPW51bGw7dGhpcy5xYT0hMTt0aGlzLnBsYXllcj1iO3RoaXMuemI9IiI7dGhpcy5uZz0hMTt0aGlzLlMoKX0sTzpmdW5jdGlvbigpe3JldHVybiJlbXB0eSJ9LHU6ZnVuY3Rpb24oKXt2YXIgYj17fSxhPXRoaXMudmlkZW9UYWcsaD10aGlzLklhKCksZD10aGlzLmdldFJhd1BsYXllcigpO2lmKGIudmlkZW9UYWc9YSliLnZpZGVvVGFnSWQ9YS5pZDtpZihiLmNvbnRhaW5lcj1oKWIuY29udGFpbmVySWQ9aC5pZDtkJiYoYi5wbGF5ZXI9ZCk7cmV0dXJuIGJ9LFM6ZnVuY3Rpb24oKXt9LE5hOmZ1bmN0aW9uKCl7fSxLdDpmdW5jdGlvbihiKXt0aGlzLlY9Yn0sYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5WfSxGdDpmdW5jdGlvbihiKXt0aGlzLk1lPWJ9LFp2OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTWV9LExlOmZ1bmN0aW9uKCl7fSxSOmZ1bmN0aW9uKCl7dGhpcy5GYjw9dGhpcy5VYSYmKHRoaXMuRmIrKyx3aW5kb3cuc2V0VGltZW91dCh0aGlzLlMuYmluZCh0aGlzKSwKdGhpcy5HYykpfSxpc0Z1bGxzY3JlZW46ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0cnl7aWYoZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4pZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKVsiY2F0Y2giXShmdW5jdGlvbigpe30pO2Vsc2UgaWYoZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4pZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4oKTtlbHNlIGlmKGRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4pZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpO2Vsc2UgaWYoZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbilkb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuKCk7ZWxzZSByZXR1cm4hMX1jYXRjaChiKXt9fSxCZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLklhKCl9LHBhdXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGxheWVyLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXIucGxheSgpfSxqYTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfSwKRmQ6ZnVuY3Rpb24oYil7dGhpcy5pZD1ifSxydzpmdW5jdGlvbigpe30sWjpmdW5jdGlvbihiKXtpZighYilyZXR1cm4hMTt0aGlzLnZpZGVvVGFnPWI7dGhpcy5GcSgpfHx0aGlzLmNuKCk7dGhpcy5GZCh0aGlzLnZpZGVvVGFnLmdldEF0dHJpYnV0ZSgiaWQiKSl9LGJ3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW9UYWd9LGNuOmZ1bmN0aW9uKCl7dGhpcy52aWRlb1RhZy5zZXRBdHRyaWJ1dGUoImlkIixlLmJhKDEwKSl9LEZxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW9UYWcuZ2V0QXR0cmlidXRlKCJpZCIpPyEwOiExfSxZOmZ1bmN0aW9uKGIpe3RoaXMuY29udGFpbmVyPWJ9LElhOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLmNvbnRhaW5lcj90aGlzLmNvbnRhaW5lcigpOnRoaXMuY29udGFpbmVyfSxnZXRSYXdQbGF5ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXJ9LEFlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LGlzUGxheWluZzpmdW5jdGlvbigpe3JldHVybiEwfSwKZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnO3JldHVybiBiJiZiLmN1cnJlbnRUaW1lP2IuY3VycmVudFRpbWU6MH0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnO3JldHVybiBiJiZiLmR1cmF0aW9uP2IuZHVyYXRpb246MH0sVmE6ZnVuY3Rpb24oKXtyZXR1cm4hMX0saXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xYX0scGE6ZnVuY3Rpb24oKXt0aGlzLnFhPSEwfSxIYzpmdW5jdGlvbigpe3ZhciBiPW07cmV0dXJuIGImJmIucnVuSW5zaWRlQ29udGFpbmVyPyEwOiExfSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGImJmIubXV0ZWQ/Yi5tdXRlZDohMX0sR2U6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sQ2g6ZnVuY3Rpb24oYil7dGhpcy56Yj1ifSxZdjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnpifSx5aDpmdW5jdGlvbigpe3RoaXMuemI9bnVsbH0sZHc6ZnVuY3Rpb24oKXt2YXIgYj0hMTt0aGlzLnpiJiYKKGI9ITApO3JldHVybiBifSxsdzpmdW5jdGlvbigpe3RoaXMubmd8fCh0aGlzLm5nPSEwKX0scWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sVnY6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPXRoaXMudmlkZW9UYWc7YSYmYS5nZXRBdHRyaWJ1dGUoImlkIikmJihiPWEuZ2V0QXR0cmlidXRlKCJpZCIpKTtyZXR1cm4gYn19KX0pKGMpO3ZhciB1PWMudWx8fHU7KGZ1bmN0aW9uKGMpe2Mubmk9TS5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLks9dGhpcy5wbGF5ZXI9IiI7dGhpcy5KZj0iMSI7dGhpcy5LZj0iMiI7dGhpcy5XbT0iMyI7dGhpcy5QYz0wO3RoaXMuaWg9MzA7dGhpcy5MYj1bXTt0aGlzLmZiPVtdO3RoaXMuaWM9e2V4dGVybmFsOjEsbm9mcmFtZXdvcms6MixhZGVycm9yOjMsY29udGVudHBsYXk6NCxub0Fkc01hbmFnZXI6NSx1bmtub3duOjZ9O3RoaXMuWGY9dGhpcy5ZaD0hMTt0aGlzLnN0YXR1cz10aGlzLlBjO3RoaXMuaWQ9ZS5iYSgxMCk7dGhpcy5mZihiKTt0aGlzLkR0KGEpfSwKZzpmdW5jdGlvbigpe30sdGE6ZnVuY3Rpb24oKXt0aGlzLllofHwodGhpcy5ZaD0hMCxlLkplKCkpfSxQZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuTygpO1MmJlMuVWImJiFuYSYmKG5hPSEwLGUudHJhY2soInBvc3NpYmxlRG91YmxlQWQiLCIxMDRfIitiKSl9LGJyOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKSxhPW5ldyBKO3dpbmRvd1thLmlhKCldfHwod2luZG93W2EuaWEoKV09e30pO3dpbmRvd1thLmlhKCldW2IuamEoKV18fCh3aW5kb3dbYS5pYSgpXVtiLmphKCldPXt9LHdpbmRvd1thLmlhKCldW2IuamEoKV0uaW5pdGlhdG9yPWUuemMoKSk7d2luZG93W2EuaWEoKV1bYi5qYSgpXVtlLnpjKCldP3dpbmRvd1thLmlhKCldW2IuamEoKV1bZS56YygpXSsrOndpbmRvd1thLmlhKCldW2IuamEoKV1bZS56YygpXT0xfSxpcjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCksYT0hMCxoPW5ldyBKO3dpbmRvd1toLmlhKCldJiZ3aW5kb3dbaC5pYSgpXVtiLmphKCldJiYKd2luZG93W2guaWEoKV1bYi5qYSgpXS5pbml0aWF0b3IhPWUuemMoKSYmKHRoaXMuZ2YoKSxhPSExKTtyZXR1cm4gYX0sSTpmdW5jdGlvbihiLGEpe3ZhciBoPSEwO2ImJihoPSExKTtpZighdGhpcy51YSgpKXt0aGlzLmJyKCk7aWYoIXRoaXMuaXIoKSl7ZS50cmFjaygic3RhdHNfaGRfZG91YmxlTWFpbiIsIiIsITApO3RoaXMuZ2YoKTtyZXR1cm59dGhpcy5nZigpO3RoaXMuSyh0aGlzLmdldFBsYXllcigpLGgpO3RoaXMuUmgoKTt0aGlzLlhmPSEwO2EmJiJmdW5jdGlvbiI9PXR5cGVvZiBhJiZhKCk7cmV0dXJuITB9cmV0dXJuITF9LG86ZnVuY3Rpb24oYixhKXt0aGlzLnVhKCl8fCh0aGlzLkxiLnB1c2goYiksdGhpcy5mYi5wdXNoKHtyZWFzb246YixkZXRhaWw6YX0pKX0sUmg6ZnVuY3Rpb24oKXt2YXIgYj0idW5rbm93biIsYT1bXTt0aGlzLkxiJiYwPHRoaXMuTGIubGVuZ3RoJiYodGhpcy5MYj1lLnVuaXF1ZSh0aGlzLkxiKSxlLnRyYWNrKCJhY3RpdmF0ZWRCeSIsdGhpcy5MYi5qb2luKCIsIikpKTsKaWYodGhpcy5mYil7Zm9yKHZhciBoPTA7aDx0aGlzLmZiLmxlbmd0aDtoKyspdGhpcy5pY1t0aGlzLmZiW2hdLnJlYXNvbl09PXRoaXMuaWNbYl0mJmEucHVzaCh0aGlzLmZiW2hdLmRldGFpbCksdGhpcy5pY1t0aGlzLmZiW2hdLnJlYXNvbl08dGhpcy5pY1tiXSYmKGE9W10sYS5wdXNoKHRoaXMuZmJbaF0uZGV0YWlsKSxiPXRoaXMuZmJbaF0ucmVhc29uKTt0aGlzLmljW2JdfHwoYj0idW5rbm93biIsYT1bXSk7MDxhLmxlbmd0aCYmKGg9ZS51bmlxdWUoYSksYj1iKyItIitoLmpvaW4oIi0iKSk7ZS50cmFjaygic3RhdHNfaGRfYWN0aXZhdGVkIixiLCEwLGEpfX0sY3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5YZn0sdzpmdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMuSmZ9LGdmOmZ1bmN0aW9uKCl7dGhpcy5zdGF0dXM9dGhpcy5LZn0sSXQ6ZnVuY3Rpb24oKXt0aGlzLnN0YXR1cz10aGlzLldtfSxyYTpmdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMuUGN9LE9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT0KdGhpcy5KZn0sTXY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0dXM9PXRoaXMuS2Z9LHVhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdHVzIT10aGlzLlBjfSxmZjpmdW5jdGlvbihiKXt0aGlzLnBsYXllcj1ifSxnZXRQbGF5ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXJ9LER0OmZ1bmN0aW9uKGIpe3RoaXMuSz1ifSxpcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLkt9LE5yOmZ1bmN0aW9uKCl7fX0pfSkoYyk7dmFyIHY9Yy5uaXx8djtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5Qcj10aGlzLmFbOV07dGhpcy5CcT10aGlzLmFbNV07dGhpcy50cj10aGlzLmFbMl07dGhpcy5QaT10aGlzLmFbN107dGhpcy5Ubj10aGlzLmFbNl07dGhpcy5VbT10aGlzLmFbNV07dGhpcy5LbD10aGlzLmFbOF07dGhpcy5qPXRoaXMuYVs0XX1jLkVuPWI7Yi5wcm90b3R5cGU9e09yOmZ1bmN0aW9uKGEpe3JldHVybiA5PAphP3RoaXMuUHI6dGhpcy5BcShhKX0sQXE6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkJxOnRoaXMuc3IoYSl9LHNyOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy50cjp0aGlzLk9pKGEpfSxPaTpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuUGk6dGhpcy5TbihhKX0sU246ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLlRuOnRoaXMuVG0oYSl9LFRtOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5VbTp0aGlzLkpsKGEpfSxKbDpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuS2w6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBvYT1jLkVufHxvYSxwYz1uZXcgb2EoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1wYy5Pcig0KTsoZnVuY3Rpb24oYyl7Yy5Paj11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb0NvbnRhaW5lcjt0aGlzLlkoYik7Yj10aGlzLmdldFJhd1BsYXllcigpLnZpZGVvO3RoaXMuWihiKTt0aGlzLmlzUGxheWluZz0hMTtiLmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5pc1BsYXlpbmc9ITB9LmJpbmQodGhpcykpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheSgpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkV4cFBsYXllciJ9fSl9KShjKTt2YXIgcGE9Yy5Panx8cGE7KGZ1bmN0aW9uKGMpe2MuUGo9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCksYT1iLk52O2E/YS5uYT9hLm5hLmFkZEV2ZW50TGlzdGVuZXIoImFkRXJyb3IiLGZ1bmN0aW9uKGEpe3ZhciBiPQohMSxmPSIiO2EuZ2V0RXJyb3ImJihiPWEuZ2V0RXJyb3IoKSk7Ynx8YS5kZXRhaWwuZ2V0RXJyb3ImJihiPWEuZGV0YWlsLmdldEVycm9yKCkpO2IuZ2V0RXJyb3JDb2RlJiYoZis9Yi5nZXRFcnJvckNvZGUoKSk7Yi5nZXRNZXNzYWdlJiYoZis9Yi5nZXRNZXNzYWdlKCkpO2YuaW5kZXhPZiYmKDA8PWYuaW5kZXhPZigiMTAwOSIpfHwwPD1mLmluZGV4T2YoIjMwMyIpfHwwPD1mLmluZGV4T2YoIjQwMyIpKT8odGhpcy53KCksdGhpcy50YSgpKToodGhpcy5vKCJhZGVycm9yIiksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZygpfS5iaW5kKHRoaXMpLDEwMCk6Yi5fYWRDb25maWcuYWRzRGlzYWJsZWR8fCh0aGlzLm8oImZyYW1ld29yayIpLHRoaXMucygpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nP3RoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcyksCjEwKX19KX0pKGMpO3ZhciBxYT1jLlBqfHxxYTsoZnVuY3Rpb24oYyl7Yy5Raj1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZih3aW5kb3cucGxheWVyTWFuYWdlciYmd2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycyYmd2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycygpWzBdKXt2YXIgYj1uZXcgcGEod2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycygpWzBdKTt0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBxYShiLHRoaXMuSykpLmcoKSl9dGhpcy5SKCl9fSl9KShjKTt2YXIgcmE9Yy5Ranx8cmE7KG5ldyByYShyKSkuZygpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnR0PXRoaXMuYVs4XTt0aGlzLmJtPXRoaXMuYVs3XTt0aGlzLkJqPXRoaXMuYVs1XTt0aGlzLmhvPXRoaXMuYVsyXTt0aGlzLmhtPQp0aGlzLmFbMV07dGhpcy5Sbj10aGlzLmFbM107dGhpcy5saj10aGlzLmFbNl07dGhpcy5pcD10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVs3XX1jLkJzPWI7Yi5wcm90b3R5cGU9e3N0OmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy50dDp0aGlzLmFtKGEpfSxhbTpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuYm06dGhpcy5BaihhKX0sQWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkJqOnRoaXMuZm8oYSl9LGZvOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5obzp0aGlzLmdtKGEpfSxnbTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuaG06dGhpcy5RbihhKX0sUW46ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLlJuOnRoaXMua2ooYSl9LGtqOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5sajp0aGlzLmhwKGEpfSxocDpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuaXA6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpOwp2YXIgc2E9Yy5Cc3x8c2EscWM9bmV3IHNhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9cWMuc3QoNCk7KGZ1bmN0aW9uKGMpe2MucWs9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dGhpcy5WYj0hMTt0aGlzLnNnKCk7dGhpcy51ZygpO3RoaXMuT289ITF9LHNnOmZ1bmN0aW9uKCl7dGhpcy5WYj0hMTt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnBsYXllci5pZCk7Ynx8KHRoaXMuVmI9ITApO2lmKCJPQkpFQ1QiPT1iLm5vZGVOYW1lfHwiVklERU8iPT1iLm5vZGVOYW1lKWI9Yi5wYXJlbnROb2RlO3RoaXMuWShiKX0sdWc6ZnVuY3Rpb24oKXtpZighdGhpcy5WYil7dmFyIGI9dGhpcy5JYSgpLGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXTthfHwoYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7CmF8fCh0aGlzLlZiPSEwKTt0aGlzLlooYSl9fSxOYTpmdW5jdGlvbigpe3ZhciBiPXRoaXMucGxheWVyO2lmKG0ucG9zdHJvbGxVc2VDb21wbGV0ZUV2ZW50KWIuX2V2ZW50cy5iZWZvcmVDb21wbGV0ZS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OnRoaXMucGxheWVyLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy5WJiYoMCx0aGlzLlYpKCl9LmJpbmQodGhpcyl9KTtlbHNlIGlmKGIuX2V2ZW50cyYmYi5fZXZlbnRzLnRpbWUmJmIuX2V2ZW50cy50aW1lLnB1c2goe2NvbnRleHQ6bnVsbCxjdHg6dGhpcy5wbGF5ZXIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7YS5kdXJhdGlvbiYmYS5wb3NpdGlvbiYmMT5hLmR1cmF0aW9uLWEucG9zaXRpb24mJnRoaXMuViYmKDAsdGhpcy5WKSgpfS5iaW5kKHRoaXMpfSksYi5vblRpbWUpYi5vblRpbWUoZnVuY3Rpb24oYSl7YS5kdXJhdGlvbiYmYS5wb3NpdGlvbiYmMT5hLmR1cmF0aW9uLWEucG9zaXRpb24mJnRoaXMuViYmKDAsdGhpcy5WKSgpfS5iaW5kKHRoaXMpKX0sCkxlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRFcnJvciYmYi5fZXZlbnRzLmFkRXJyb3IucHVzaCh7Y29udGV4dDpudWxsLGN0eDpiLGNhbGxiYWNrOmZ1bmN0aW9uKGEpe3RoaXMuSGQoYSl9LmJpbmQodGhpcyl9KTtpZihiLm9uQWRFcnJvciliLm9uQWRFcnJvcihmdW5jdGlvbihhKXt0aGlzLkhkKGEpfS5iaW5kKHRoaXMpKX0sSGQ6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5wbGF5ZXI7YS5nZXRQb3NpdGlvbigpO2EuZ2V0UG9zaXRpb24oKTthLmdldER1cmF0aW9uKCk7YS5nZXRQb3NpdGlvbigpO2EuZ2V0RHVyYXRpb24oKTthLmdldFBvc2l0aW9uKCk7Im1pZCI9PWIuYWRwb3NpdGlvbiYmYS5nZXRQb3NpdGlvbiYmMzA8YS5nZXRQb3NpdGlvbigpJiYzMDxhLmdldER1cmF0aW9uKCktYS5nZXRQb3NpdGlvbigpJiZ0aGlzLk1lJiYoMCx0aGlzLk1lKSgpfSxwbGF5OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7aWYoIWIuZ2V0U3RhdGV8fAoicGxheWluZyIhPWIuZ2V0U3RhdGUoKXx8dGhpcy52aWRlb1RhZy5wYXVzZWQpcmV0dXJuIHRoaXMucGxheWVyLnBsYXkoKX0scGF1c2U6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnBsYXllcjtyZXR1cm4gYi5nZXRTdGF0ZSYmInBhdXNlZCI9PWIuZ2V0U3RhdGUoKT8icGF1c2VkIjp0aGlzLnBsYXllci5wYXVzZSghMCl9LFZhOmZ1bmN0aW9uKCl7cmV0dXJuInBhdXNlZCI9PXRoaXMucGF1c2UoKT8hMTohMH0sTzpmdW5jdGlvbigpe3JldHVybiJKV1BsYXllciJ9LGV4aXRGdWxsc2NyZWVuOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7Yi5nZXRGdWxsc2NyZWVuJiZiLmdldEZ1bGxzY3JlZW4oKSYmYi5zZXRGdWxsc2NyZWVuKCl9LHZhOmZ1bmN0aW9uKCl7dmFyIGI9ITEsYT10aGlzLnBsYXllcjthLmdldE11dGUmJmEuZ2V0TXV0ZSgpJiYoYj0hMCk7cmV0dXJuIGJ9LHFlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXIsYT0hMTtiLmdldFZvbHVtZSYmYi5nZXRWb2x1bWUoKSYmCihhPWIuZ2V0Vm9sdW1lKCkpO3JldHVybiBhfX0pfSkoYyk7dmFyIHRhPWMucWt8fHRhOyhmdW5jdGlvbihjKXtjLnBrPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LFM6ZnVuY3Rpb24oKXt9LHJhOmZ1bmN0aW9uKCl7dGhpcy5zdGF0dXM9dGhpcy5QYzt0aGlzLmlzUGxheWluZz10aGlzLlJjPSExO3RoaXMuWmQ9MTt0aGlzLlNjPVtdO3RoaXMudGI9ITF9LGc6ZnVuY3Rpb24oKXt0aGlzLmlzUGxheWluZz10aGlzLlJjPSExO3RoaXMuWmQ9MTt0aGlzLlNjPVtdO3RoaXMudGI9ITE7dGhpcy5nZXRQbGF5ZXIoKTt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpLGE9e307Yi5nZXRDb25maWcmJihhPWIuZ2V0Q29uZmlnKCksYS5hZHZlcnRpc2luZz8oYS5hZHZlcnRpc2luZy5zY2hlZHVsZSYmKGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzP2EuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzLnRhZyYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5hZHMudGFnLmxlbmd0aCYmCih0aGlzLlpkPWEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzLnRhZy5sZW5ndGgsdGhpcy50Yj0hMCk6KGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUucHJlcm9sbCYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5wcmVyb2xsLnRhZyYmKHRoaXMudGI9ITApLGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRicmVha3ByZSYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5hZGJyZWFrcHJlLnRhZyYmKHRoaXMudGI9ITApKSksYS5hZHZlcnRpc2luZy50YWcmJih0aGlzLnRiPSEwKSk6dGhpcy53KCJubyBhZHZlcnRpc2luZyBjb25maWd1cmVkIGZvciBwbGF5ZXIiKSk7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRDb21wbGV0ZSYmYi5fZXZlbnRzLmFkQ29tcGxldGUucHVzaCh7Y29udGV4dDpudWxsLGN0eDpiLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy53KCJhZENvbXBsZXRlIik7dGhpcy5SYz0hMH0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkQ2xpY2smJmIuX2V2ZW50cy5hZENsaWNrLnB1c2goe2NvbnRleHQ6bnVsbCwKY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkQ2xpY2siKX0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkSW1wcmVzc2lvbiYmYi5fZXZlbnRzLmFkSW1wcmVzc2lvbi5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkSW1wcmVzc2lvbiIpO3RoaXMuUGUoKX0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkTWV0YSYmYi5fZXZlbnRzLmFkTWV0YS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkTWV0YSIpfS5iaW5kKHRoaXMpfSk7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRTa2lwcGVkJiZiLl9ldmVudHMuYWRTa2lwcGVkLnB1c2goe2NvbnRleHQ6bnVsbCxjdHg6YixjYWxsYmFjazpmdW5jdGlvbigpe3RoaXMudygiYWRTa2lwcGVkIil9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5hZFRpbWUmJmIuX2V2ZW50cy5hZFRpbWUucHVzaCh7Y29udGV4dDpudWxsLApjdHg6YixjYWxsYmFjazpmdW5jdGlvbigpe3RoaXMudygiYWRUaW1lIil9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5hZEVycm9yJiZiLl9ldmVudHMuYWRFcnJvci5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7dGhpcy5vbkFkRXJyb3IoYSl9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy50aW1lJiZiLl9ldmVudHMudGltZS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7dGhpcy5pc1BsYXlpbmc9ITA7YS5kdXJhdGlvbj50aGlzLmloJiYhdGhpcy51YSgpJiYodGhpcy50Yj8odGhpcy5vKCJjb250ZW50cGxheU5vQWRzIiwiIiksdGhpcy5zKCkpOih0aGlzLm8oImNvbnRlbnRwbGF5VGltZSIsMUUzKk1hdGgucm91bmQoYS5kdXJhdGlvbi8xRTMpKSx0aGlzLnMoITApKSl9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5wbGF5bGlzdEl0ZW0mJmIuX2V2ZW50cy5wbGF5bGlzdEl0ZW0ucHVzaCh7Y29udGV4dDpudWxsLApjdHg6dGhpcy5wbGF5ZXIsY2FsbGJhY2s6ZnVuY3Rpb24oKXtpZih0aGlzLnVhKCkmJih0aGlzLnJhKCksdGhpcy5nZXRQbGF5ZXIoKS5Pbz0hMCxtLnNraXBBZE9uQ29udGV4dENoYW5nZSkpe3ZhciBhPXRoaXMuZ2V0UGxheWVyKCkuemI7YSYmKGEuemQoKSxhLmhkKCkpfX0uYmluZCh0aGlzKX0pO2lmKGIub25BZENvbXBsZXRlKWIub25BZENvbXBsZXRlKGZ1bmN0aW9uKCl7dGhpcy53KCJvbkFkQ29tcGxldGUiKTt0aGlzLlJjPSEwfS5iaW5kKHRoaXMpKTtpZihiLm9uQWRJbXByZXNzaW9uKWIub25BZEltcHJlc3Npb24oZnVuY3Rpb24oKXt0aGlzLncoIm9uQWRJbXByZXNzaW9uIik7dGhpcy5QZSgpfS5iaW5kKHRoaXMpKTtpZihiLm9uQWRQbGF5KWIub25BZFBsYXkoZnVuY3Rpb24oKXt0aGlzLncoIm9uQWRQbGF5Iil9LmJpbmQodGhpcykpO2lmKGIub25BZFRpbWUpYi5vbkFkVGltZShmdW5jdGlvbigpe3RoaXMudygib25BZFRpbWUiKX0uYmluZCh0aGlzKSk7aWYoYi5vbkFkRXJyb3IpYi5vbkFkRXJyb3IoZnVuY3Rpb24oYSl7dGhpcy5vbkFkRXJyb3IoYSl9LmJpbmQodGhpcykpOwppZihiLm9uVGltZSliLm9uVGltZShmdW5jdGlvbihhKXt0aGlzLmlzUGxheWluZz0hMDthLmR1cmF0aW9uPnRoaXMuaWgmJiF0aGlzLnVhKCkmJih0aGlzLnRiPyh0aGlzLm8oImNvbnRlbnRwbGF5Tm9BZHMiLCIiKSx0aGlzLnMoKSk6KHRoaXMubygiY29udGVudHBsYXlUaW1lIiwxRTMqTWF0aC5yb3VuZChhLmR1cmF0aW9uLzFFMykpLHRoaXMucyghMCkpKX0uYmluZCh0aGlzKSl9LG9uQWRFcnJvcjpmdW5jdGlvbihiKXt2YXIgYT1iLnRhZzstMT09dGhpcy5TYy5pbmRleE9mKGEpJiZ0aGlzLlNjLnB1c2goYSk7IjEwMSI9PWIuY29kZXx8IjEwMDEiPT1iLmNvZGU/KHRoaXMudygpLHRoaXMudGEoKSk6OTAwPT1iLmNvZGUmJjA8Yi5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigiZW1wdHkiKT90aGlzLncoImVtcHR5Iik6MzAzPT1iLmNvZGUmJjA8Yi5tZXNzYWdlLmluZGV4T2YoIk5vIEFkcyBWQVNUIHJlc3BvbnNlIGFmdGVyIG9uZSBvciBtb3JlIFdyYXBwZXJzIik/dGhpcy53KCJlbXB0eSIpOgoodGhpcy5vKCJhZGVycm9yIixiLmNvZGUpLHRoaXMuU2MubGVuZ3RoPj10aGlzLlpkJiZ0aGlzLnMoKSl9LE5yOmZ1bmN0aW9uKGIpe3RoaXMubSgiSlc6ICIrYi50eXBlKX0sczpmdW5jdGlvbihiKXtiP3RoaXMubmU/dGhpcy5uZSsrOnRoaXMubmU9MTp0aGlzLm1lP3RoaXMubWUrKzp0aGlzLm1lPTE7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKTtlLkhoKGEudmlkZW9UYWcpP2EuVmI/dGhpcy53KCJwbGF5ZXIgaXMgaW52YWxkIik6dGhpcy5SY3x8dGhpcy5pc1BsYXlpbmc/KHRoaXMubWU+dGhpcy5uZSYmKGI9ITEpLHRoaXMuSShiKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoYil9LmJpbmQodGhpcyksNTApOihhLnNnKCksYS51ZygpLGEuVmJ8fHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDIwKSl9fSl9KShjKTt2YXIgdWE9Yy5wa3x8dWE7KGZ1bmN0aW9uKGMpe2Mucms9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSwKZzpmdW5jdGlvbigpe3ZhciBiPWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZik7aWYoIllXUnBkR2x2Ymk1clpXbHVaWFpwWkdWdmQyVnlZblZ1WnoweCIhPXRoaXMuZXEoKXx8IWIuYXV0aG9yaXR5fHwhYi5hdXRob3JpdHl8fCJ3d3cuc3BpZWdlbC5kZSIhPWIuYXV0aG9yaXR5JiYicXMyLnByZXZpZXcuc3BpZWdlbC5kZSIhPWIuYXV0aG9yaXR5JiYicHJldmlldy5zcGllZ2VsLmRlIiE9Yi5hdXRob3JpdHkmJiJwcm9kLnNwaWVnZWwuZGUiIT1iLmF1dGhvcml0eSl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiandwbGF5ZXIiKTtpZighd2luZG93Lmp3cGxheWVyfHwhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoandwbGF5ZXIoKS5pZCl8fCJBIiE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoandwbGF5ZXIoKS5pZCkubm9kZU5hbWUpaWYod2luZG93Lmp3cGxheWVyJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZChqd3BsYXllcigpLmlkKXx8aCYmaCgpLmlkKXtiPQpbXTtpZigxPGEubGVuZ3RoKWZvcihoPTA7aDxhLmxlbmd0aDtoKyspYi5wdXNoKGFbaF0uZ2V0QXR0cmlidXRlKCJpZCIpKTtlbHNlIGIucHVzaChqd3BsYXllcigpLmlkKTtqd3BsYXllcigpO2ZvcihhPTA7YTxiLmxlbmd0aDthKyspe3ZhciBoPW5ldyB0YSh3aW5kb3cuandwbGF5ZXIoYlthXSkpO3RoaXMuTihoKXx8dGhpcy5scihoKXx8KHRoaXMuUChoKSxoPW5ldyB1YShoLHRoaXMuSyksaC5TKCksaC5nKCkpfX10aGlzLlIoKX19LFh2OmZ1bmN0aW9uKCl7cmV0dXJuIllXUnBkR2x2Ymk1clpXbHVaWFpwWkdWdmQyVnlZblZ1WnoweCJ9LGVxOmZ1bmN0aW9uKCl7dmFyIGI9ZS5sYShkb2N1bWVudC5sb2NhdGlvbi5ocmVmKTtyZXR1cm4gZS52YihiLmFuY2hvcil9fSl9KShjKTt2YXIgdmE9Yy5ya3x8dmEsd2E9bmV3IHZhKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLkRyPQp0aGlzLmFbM107dGhpcy5Qaz10aGlzLmFbOF07dGhpcy5zbT10aGlzLmFbMV07dGhpcy5ObD10aGlzLmFbOV07dGhpcy5qPXRoaXMuYVsxMF19Yy5pbz1iO2IucHJvdG90eXBlPXtDcjpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuRHI6dGhpcy5PayhhKX0sT2s6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLlBrOnRoaXMucm0oYSl9LHJtOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5zbTp0aGlzLk1sKGEpfSxNbDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuTmw6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciB4YT1jLmlvfHx4YSxyYz1uZXcgeGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1yYy5Dcig0KTsoZnVuY3Rpb24oYyl7Yy54bT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtpZihiKXt2YXIgYT1iLmVsXzthfHwoYT1iLmVsKCkpO2E/KHRoaXMuWShhKSwoYj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdKXx8KGI9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pLGI/dGhpcy5aKGIpOnRoaXMucGEoKSk6dGhpcy5wYSgpfWVsc2UgdGhpcy5wYSgpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuInZpZGVvanMifSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkub24oInRpbWV1cGRhdGUiLGZ1bmN0aW9uKGIpe3RoaXMuTWQoYil9LmJpbmQodGhpcykpfSxNZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT1iLmN1cnJlbnRUaW1lKCksYj1iLmR1cmF0aW9uKCk7YSYmMDxhJiZiJiYwPGImJmE+PWItMiYmdGhpcy5WJiZ0aGlzLlYoKX0sQWU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnLmdldEF0dHJpYnV0ZSgiZGF0YS14LXNldHVwIik7CmlmKGIpdHJ5e3ZhciBhPUpTT04ucGFyc2UoYik7aWYoYS5oYXNPd25Qcm9wZXJ0eSgieC1hdXRvcGxheSIpJiYhYVsieC1hdXRvcGxheSJdKXJldHVybiExfWNhdGNoKGgpe31iPXRoaXMuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIuYXV0b3BsYXkmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmF1dG9wbGF5P2IuYXV0b3BsYXkoKTohMX0sdmE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXIubXV0ZWQmJnRoaXMucGxheWVyLm11dGVkKCl9LFZhOmZ1bmN0aW9uKCl7dGhpcy5wYXVzZSgpO3JldHVybiEwfSxpc1BsYXlpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wYXVzZWQoKT8hMTohMH0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLGE9Yi5pc0Z1bGxzY3JlZW47aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpdHJ5e2E9YSgpfWNhdGNoKGgpe2E9ITF9YSYmYi5leGl0RnVsbHNjcmVlbigpfSxjdXJyZW50VGltZTpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLmdldFJhd1BsYXllcigpO2lmKGIuY3VycmVudFRpbWUpcmV0dXJuIGIuY3VycmVudFRpbWUoKX19KX0pKGMpO3ZhciB5YT1jLnhtfHx5YTsoZnVuY3Rpb24oYyl7Yy53bT12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dGhpcy5UPXRoaXMuVHx8ITE7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKTt0aGlzLmRhPXRoaXMuQmM9dGhpcy5BYT10aGlzLlljPSExO3RoaXMudmg9ZS5FYigxMCk7dGhpcy5YaD0hMDt0aGlzLm5jPXRoaXMuUWc9ITE7dGhpcy5icyhiLmdldFJhd1BsYXllcigpKXx8KHRoaXMubGgoKSx0aGlzLm5vKCksdGhpcy5vYigpKX0sYnM6ZnVuY3Rpb24oYil7cmV0dXJuIGUuQmEoInQtb25saW5lLmRlIik/ITE9PT1iLm9wdGlvbnNfLmFkUHJlcm9sbDohMX0sbnc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2NvbnNvbGUuaW5mbyh0aGlzLmdldFBsYXllcigpLmphKCksIjsiLCJ3aW5kb3cuaW1hOiIsCiI7Iix3aW5kb3cuaW1hLCI7Iix0eXBlb2Ygd2luZG93LmltYSwiOyIsInBsYXllci5hZHM6IiwiOyIsYi5XLCI7Iix0eXBlb2YgYi5XLCI7IiwicGxheWVyLmFkcy5zdGF0ZToiLCI7IixiLlc/Yi5XLnN0YXRlOiJ1bmRlZmluZWRYIiwiOyIsYi5XP3R5cGVvZiBiLlcuc3RhdGU6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYToiLCI7IixiLmltYSwiOyIsdHlwZW9mIGIuaW1hLCI7IiwicGxheWVyLmltYTM6IiwiOyIsYi5KLCI7Iix0eXBlb2YgYi5KLCI7IiwicGxheWVyLmltYS5hZGRFdmVudExpc3RlbmVyOiIsIjsiLGIuaW1hP2IuaW1hLmFkZEV2ZW50TGlzdGVuZXI6InVuZGVmaW5lZFgiLCI7IixiLmltYT90eXBlb2YgYi5pbWEuYWRkRXZlbnRMaXN0ZW5lcjoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5hZGRFdmVudExpc3RlbmVyOiIsIjsiLGIuSj9iLkouYWRkRXZlbnRMaXN0ZW5lcjoidW5kZWZpbmVkWCIsIjsiLGIuSj90eXBlb2YgYi5KLmFkZEV2ZW50TGlzdGVuZXI6CiJ1bmRlZmluZWRYIiwiOyIsInBsYXllci5pbWEuZ2V0QWRzTWFuYWdlcjoiLCI7IixiLmltYT9iLmltYS5HYToidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5HYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5nZXRBZHNNYW5hZ2VyOiIsIjsiLGIuSj9iLkouR2E6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5HYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmdldEFkc01hbmFnZXIoKToiLCI7IixiLmltYSYmYi5pbWEuR2E/Yi5pbWEuR2EoKToidW5kZWZpbmVkWCIsIjsiLGIuaW1hJiZiLmltYS5HYT90eXBlb2YgYi5pbWEuR2EoKToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5nZXRBZHNNYW5hZ2VyKCk6IiwiOyIsYi5KJiZiLkouR2E/Yi5KLkdhKCk6InVuZGVmaW5lZFgiLCI7IixiLkomJmIuSi5HYT90eXBlb2YgYi5KLkdhKCk6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYS5fYWRzTG9hZGVyOiIsIjsiLGIuaW1hP2IuaW1hLldkOgoidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5XZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5fYWRzTG9hZGVyOiIsIjsiLGIuSj9iLkouV2Q6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5XZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLl9hZHNNYW5hZ2VyOiIsIjsiLGIuaW1hP2IuaW1hLlhkOiJ1bmRlZmluZWRYIiwiOyIsYi5pbWE/dHlwZW9mIGIuaW1hLlhkOiJ1bmRlZmluZWRYIiwiOyIsInBsYXllci5pbWEzLl9hZHNNYW5hZ2VyOiIsIjsiLGIuSj9iLkouWGQ6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5YZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmFkc0xvYWRlcjoiLCI7IixiLmltYT9iLmltYS5uYToidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5uYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5hZHNMb2FkZXI6IiwiOyIsYi5KP2IuSi5uYToidW5kZWZpbmVkWCIsIjsiLGIuSj8KdHlwZW9mIGIuSi5uYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmFkc01hbmFnZXI6IiwiOyIsYi5pbWE/Yi5pbWEuY2U6InVuZGVmaW5lZFgiLCI7IixiLmltYT90eXBlb2YgYi5pbWEuY2U6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYTMuYWRzTWFuYWdlcjoiLCI7IixiLko/Yi5KLmNlOiJ1bmRlZmluZWRYIiwiOyIsYi5KP3R5cGVvZiBiLkouY2U6InVuZGVmaW5lZFgiLCI7IiwiRE9ORSIsdGhpcy52aCl9LHdiOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtiLmltYTMmJih0aGlzLmltYT1iLmltYTMpO2lmKGIuaW1hKXt0aGlzLmltYT1iLmltYTt0cnl7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuaW1hJiZ0aGlzLnBsYXllci5nZXRSYXdQbGF5ZXIoKS5hY3RpdmVQbHVnaW5zXyYmMT09dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyKCkuYWN0aXZlUGx1Z2luc18uaW1hJiYodGhpcy5pbWE9dGhpcy5pbWEoKSx0aGlzLmltYS5jb250cm9sbGVyJiYKKHRoaXMuaW1hPXRoaXMuaW1hLmNvbnRyb2xsZXIpKX1jYXRjaChhKXt9fXJldHVybiB0aGlzLmltYX0sUmI6ZnVuY3Rpb24oKXtpZighdGhpcy5uYSl7dmFyIGI9dGhpcy53YigpO2ImJihiLmFkc0xvYWRlciYmKHRoaXMubmE9Yi5hZHNMb2FkZXIpLGIuX2Fkc0xvYWRlciYmKHRoaXMubmE9Yi5fYWRzTG9hZGVyKSxiLmdldEFkc0xvYWRlciYmKHRoaXMubmE9Yi5nZXRBZHNMb2FkZXIpLGIuY29udHJvbGxlciYmYi5jb250cm9sbGVyLnNka0ltcGwmJmIuY29udHJvbGxlci5zZGtJbXBsLmFkc0xvYWRlciYmKHRoaXMubmE9Yi5jb250cm9sbGVyLnNka0ltcGwuYWRzTG9hZGVyKSl9cmV0dXJuIHRoaXMubmF9LEVnOmZ1bmN0aW9uKCl7aWYoIXRoaXMuQmMpe3ZhciBiPXRoaXMud2IoKTtiJiYoYi5hZHNNYW5hZ2VyJiYodGhpcy5CYz1iLmFkc01hbmFnZXIpLGIuZ2V0QWRzTWFuYWdlciYmKHRoaXMuQmM9Yi5nZXRBZHNNYW5hZ2VyKCkpKX1yZXR1cm4gdGhpcy5CY30sanI6ZnVuY3Rpb24oKXtpZighdGhpcy5QZyl7dmFyIGI9CnRoaXMud2IoKSxhPXRoaXMuaHIoKTt3aW5kb3cuaW1hJiZiJiYoYi5fYWRzTG9hZGVyfHxiLmFkc0xvYWRlcnx8YSkmJih0aGlzLlBnPSEwKX1yZXR1cm4gdGhpcy5QZ30saHI6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyF0aGlzLlljJiZiLmFkcyYmKGIuYWRzLnN0YXRlfHxiLmFkcy5fc3RhdGUpJiYodGhpcy5ZYz0hMCk7cmV0dXJuIHRoaXMuWWN9LG9iOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5SYigpO2lmKGIpe3ZhciBhPSJhZEVycm9yIixoPSJhZHNNYW5hZ2VyTG9hZGVkIixkPSJsb2ciO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SJiYoYT1nb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SKTt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkc01hbmFnZXJMb2FkZWRFdmVudCYmCmdvb2dsZS5pbWEuQWRzTWFuYWdlckxvYWRlZEV2ZW50LlR5cGUmJmdvb2dsZS5pbWEuQWRzTWFuYWdlckxvYWRlZEV2ZW50LlR5cGUuQURTX01BTkFHRVJfTE9BREVEJiYoaD1nb29nbGUuaW1hLkFkc01hbmFnZXJMb2FkZWRFdmVudC5UeXBlLkFEU19NQU5BR0VSX0xPQURFRCk7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYoZD1nb29nbGUuaW1hLkFkRXZlbnQuVHlwZS5MT0cpOyJmdW5jdGlvbiIhPT10eXBlb2YgYi5hZGRFdmVudExpc3RlbmVyP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKTooYi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKGgsZnVuY3Rpb24oKXt0aGlzLmp0KCl9LmJpbmQodGhpcykpLApiLmFkZEV2ZW50TGlzdGVuZXIoZCxmdW5jdGlvbihhKXt0aGlzLmdhKGEsITApO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKTt0aGlzLmZhKCEwKX0uYmluZCh0aGlzKSkpfWVsc2UgdGhpcy51YSgpfHx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMub2IoKX0uYmluZCh0aGlzKSwyMCl9LGp0OmZ1bmN0aW9uKCl7dGhpcy5uYz0hMDt2YXIgYj10aGlzLkVnKCk7aWYoYnx8dGhpcy51YSgpKXt2YXIgYT0iYWRFcnJvciIsaD0ibG9nIjt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudCYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYKKGg9Z29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HKTtiLmFkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihhKXt0aGlzLmdhKGEpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoaCxmdW5jdGlvbihhKXt0aGlzLmdhKGEsITApO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKTt0aGlzLmZhKCEwKX0uYmluZCh0aGlzKSk7dmFyIGQ9IiI7ZS5UYSgpJiYoZD0iTV8iKTtiLmFkZEV2ZW50TGlzdGVuZXIoInN0YXJ0IixmdW5jdGlvbigpe2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrInN0YXJ0IiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiZmlyc3RxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrImZpc3RxdWFydGlsZSIsIiIsITApfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoIm1pZHBvaW50IixmdW5jdGlvbigpe3RoaXMub2M9CiEwO2lmKGUuQmEoImNoaXAuZGUiKSl7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtlLnRyYWNrKCJzdGF0c19jdXN0XyIrZCsibWlkcG9pbnQiLCIiLCEwKTtlLnRyYWNrKCJzdGF0c19jdXN0X2RvdWJsZXBsYXkiLCFhLnBhdXNlZCgpLCEwKX19LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigidGhpcmRxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrInRoaXJkcXVhcnRpbGUiLCIiLCEwKX0uYmluZCh0aGlzKSk7Yi5hZGRFdmVudExpc3RlbmVyKCJjb21wbGV0ZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrImNvbXBsZXRlIiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiaW1wcmVzc2lvbiIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iKwpkKyJpbXByZXNzaW9uIiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiYWxsQWRzQ29tcGxldGVkIixmdW5jdGlvbigpe3RoaXMub2N8fCh0aGlzLm8oImFkZXJyb3IiLCJub2FkZXZlbnQiKSx0aGlzLmZhKCksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKX0sV3Y6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyF0aGlzLmtnJiZiLmFkcyYmKHRoaXMua2c9Yi5hZHMpO3JldHVybiB0aGlzLmtnfSxubzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7Yi5vbigiYWRzZXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuZ2EoYSk7dGhpcy5mYSgpO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKX0uYmluZCh0aGlzKSk7Yi5vbigiYWR0cmlnZ2VyIixmdW5jdGlvbigpe3RoaXMucmEoKTt0aGlzLmZhKCEwKTsKdGhpcy5vKCJ0cmlnZ2VyIiwiSE9NQUQiKX0uYmluZCh0aGlzKSk7Yi5vbigiaW1hM2Vycm9yIixmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZmEoKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCl9LmJpbmQodGhpcykpO2Iub24oImltYTNhZGVycm9yIixmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZmEoKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCl9LmJpbmQodGhpcykpO2Iub24oImltYTMtYWQtZXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuZ2EoYSk7dGhpcy5mYSgpO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKX0uYmluZCh0aGlzKSk7Yi5vbigiYWRzLWZpcnN0LXF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygpO3RoaXMuUGUoKX0uYmluZCh0aGlzKSl9LGxkOmZ1bmN0aW9uKCl7dmFyIGI9ITE7dHJ5e2lmKGhvbWFkVXRpbHMmJmhvbWFkVXRpbHMuWClob21hZFV0aWxzLkthJiYoYj0hMCk7ZWxzZXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubGQoKX0uYmluZCh0aGlzKSwKNTApO3JldHVybn19Y2F0Y2goYSl7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmxkKCl9LmJpbmQodGhpcyksNTApO3JldHVybn1iJiYoKGI9dGhpcy5FZygpKSYmYi5kZXN0cm95P2IuZGVzdHJveSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5sZCgpfS5iaW5kKHRoaXMpLDUwKSl9LGxoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKTtpZihiLmlzUGxheWluZygpJiYwPGIuY3VycmVudFRpbWUoKSlpZih0aGlzLmpyKCkpe3ZhciBhPXRoaXMud2IoKSxoPXRoaXMuUmIoKTthJiZoJiYodGhpcy53YigpLHRoaXMuUmIoKSx0aGlzLm5jfHx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubmM/dGhpcy53KCk6KHRoaXMuZmEoITApLHRoaXMubygibm9BZHNNYW5hZ2VyIiwiYWRzTWFuYWdlciIpKX0uYmluZCh0aGlzKSwyRTMpKTt0aGlzLndiKCl9ZWxzZSB0aGlzLlFnP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGE9CnRoaXMud2IoKSxiPXRoaXMuUmIoKTthJiYhYj8odGhpcy5vKCJub2ZyYW1ld29yayIsIklNQV9BRFNMT0FERVIiKSx0aGlzLmZhKCkpOih0aGlzLmZhKCEwKSx0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIikpfS5iaW5kKHRoaXMpLDEwMCk6dGhpcy5RZz0hMDtiLmlzUGxheWluZygpJiYxMDxiLmN1cnJlbnRUaW1lKCl8fHRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmxoKCl9LmJpbmQodGhpcyksNTApfSxnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGg9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpaD0hMDtofHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGg9ITApOyJudW1iZXIiPT10eXBlb2YgYSYmKGIuVD1hLGIubygiYWRlcnJvciIsYSkpfXJldHVybiBofWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTsKaWYoYi5nZXRFcnJvciYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0RXJyb3Ipe3ZhciBoPWIuZ2V0RXJyb3IoKTtpZihoLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGguZ2V0RXJyb3JDb2RlJiZhKGguZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTtyZXR1cm59fWZvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkmJmJbZF0mJmJbZF0uYWRFcnJvciYmYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJmEoYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7YnJlYWt9fSxvbzpmdW5jdGlvbigpe3RoaXMucmN8fCh0aGlzLnJjPSJ1bmtub3duIik7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZihiLmFkcyl7aWYodGhpcy5yYyE9Yi5hZHMuc3RhdGUmJih0aGlzLnJjPWIuYWRzLnN0YXRlKSwiYWQtcGxheWJhY2siPT0KdGhpcy5yYyl7dGhpcy53KCJhZC1wbGF5YmFjayIpO3JldHVybn19ZWxzZSB0aGlzLnJjPSJuby1hZHMiO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vbygpfS5iaW5kKHRoaXMpLDEwKX0sdmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYX0sRGE6ZnVuY3Rpb24oKXswPD1lLlNiKGRvY3VtZW50LmxvY2F0aW9uKS5pbmRleE9mKCJzdGVybi5kZSIpJiYxMDA5PT10aGlzLlQ/KHRoaXMuZGE9ITAsdGhpcy5zKCEwKSk6KHRoaXMuZGE9ITAsdGhpcy53KCJlbXB0eSB2YXN0IikpfSxmYTpmdW5jdGlvbihiKXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZGE/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwMCl9LHM6ZnVuY3Rpb24oYil7dGhpcy51YSgpfHwoYnx8KHRoaXMuWGg9ITEpLHRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCkub24oInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5JKHRoaXMuWGgsZnVuY3Rpb24oKXt0aGlzLmxkKCl9LmJpbmQodGhpcykpfS5iaW5kKHRoaXMpKSl9LAp0bzpmdW5jdGlvbigpe3RoaXMuZXd8fCgxMDx0aGlzLiR1Pyh0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGFhemEiKSx3aW5kb3cuc2V0VGltZW91dCh0aGlzLmZhLmJpbmQodGhpcyksNTAwKSk6KHRoaXMuJHUrKyx0aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpLnZwRXZlbnQ/dGhpcy5udCgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50bygpfS5iaW5kKHRoaXMpLDUwKSkpfSxudDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7aWYoYi52cEV2ZW50JiYhdGhpcy5hdil7dGhpcy5hdj0hMDt2YXIgYT0iIjtiLnZwRXZlbnQucmFuZG9tVGVzdCYmKGE9IiIpO2IudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZHMtZXJyb3IiK2EsZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiLCJ2cDphZHMtZXJyb3IiKTt3aW5kb3cuc2V0VGltZW91dCh0aGlzLmZhLmJpbmQodGhpcyksNTAwKX0uYmluZCh0aGlzKSk7CmIudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZC1lcnJvciIrYSxmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsInZwOmFkLWVycm9yIik7d2luZG93LnNldFRpbWVvdXQodGhpcy5mYS5iaW5kKHRoaXMpLDUwMCl9LmJpbmQodGhpcykpO2IudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZC1yZWFkeSIrYSxmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLnZwRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcigidnA6YWQtZW5kZWQiK2EsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yi52cEV2ZW50LmFkZEV2ZW50TGlzdGVuZXIoInZwOmFkc2xvdC1jb21wbGV0ZSIrYSxmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLnZwRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcigidnA6YWRzLXJlYWR5IithLGZ1bmN0aW9uKCl7dGhpcy53KCl9LmJpbmQodGhpcykpfX19KX0pKGMpO3ZhciB6YT1jLndtfHx6YTsoZnVuY3Rpb24oYyl7Yy55bT1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApnOmZ1bmN0aW9uKCl7aWYoIXdpbmRvdy5kZW1vUGxheWVyKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaWZyYW1lIiksYTthPXRoaXMuSWgod2luZG93KTtmb3IodmFyIGg9MDtoPGIubGVuZ3RoO2grKyl0cnl7YT1hfHx0aGlzLkloKGJbaF0pfWNhdGNoKGQpe310aGlzLlIoKX19LEloOmZ1bmN0aW9uKGIpe3ZhciBhPVtdO2IudmlkZW9qcyYmYi52aWRlb2pzLmdldFBsYXllcnM/YT1iLnZpZGVvanMuZ2V0UGxheWVycygpOmIudmlkZW9qcyYmYi52aWRlb2pzLnBsYXllcnMmJihhPWIudmlkZW9qcy5wbGF5ZXJzKTtpZigwPGUudGUoYSkpe2I9YTtmb3IodmFyIGggaW4gYiliLmhhc093blByb3BlcnR5KGgpJiYoYT1uZXcgeWEoYltoXSksYS5xYXx8dGhpcy5OKGEpfHwhMT09PWEuZ2V0UmF3UGxheWVyKCkuaXNSZWFkeV98fCh0aGlzLlAoYSksKG5ldyB6YShhLHRoaXMuSykpLmcoKSkpO3JldHVybiEwfXJldHVybiExfSxSOmZ1bmN0aW9uKCl7dGhpcy5IYj0Kd2luZG93LnNldFRpbWVvdXQodGhpcy5nLmJpbmQodGhpcyksdGhpcy5HYyl9fSl9KShjKTt2YXIgQWE9Yy55bXx8QWEsQmE9bmV3IEFhKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnlxPXRoaXMuYVs0XTt0aGlzLiRvPXRoaXMuYVs1XTt0aGlzLnRuPXRoaXMuYVsxMF07dGhpcy5rcD10aGlzLmFbMV07dGhpcy5Kbz10aGlzLmFbNl07dGhpcy5Gcz10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVsxXX1jLlFyPWI7Yi5wcm90b3R5cGU9e3hxOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy55cTp0aGlzLlpvKGEpfSxabzpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuJG86dGhpcy5zbihhKX0sc246ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy50bjp0aGlzLmpwKGEpfSxqcDpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMua3A6dGhpcy5JbyhhKX0sSW86ZnVuY3Rpb24oYSl7cmV0dXJuIDU8CmE/dGhpcy5Kbzp0aGlzLkVzKGEpfSxFczpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuRnM6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBDYT1jLlFyfHxDYSxzYz1uZXcgQ2EoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1zYy54cSg0KTsoZnVuY3Rpb24oYyl7Yy5sbD11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt0aGlzLlNlPTA7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPWIucGxheWVyQ29udGFpbmVyO2lmKCFhJiYoYi5wbGF5ZXJJbnN0YW5jZSYmYi5wbGF5ZXJJbnN0YW5jZS5pZCYmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYi5wbGF5ZXJJbnN0YW5jZS5pZCkpJiYoYT1iLnBhcmVudE5vZGUpLCFhKSl7dGhpcy5wYSgpO3JldHVybn10aGlzLlkoYSk7CihiPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pfHwoYj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7Yj90aGlzLlooYik6dGhpcy5wYSgpfSxWczpmdW5jdGlvbihiKXt2YXIgYT10aGlzLnpiLGg9dGhpcy5qYSgpLGQ9IiI7Yi5tZW1vJiYoZD1iLm1lbW8udmlkZW9pZCk7ZCYmYSYmYS5VYiYmKDA8PWguaW5kZXhPZihkKXx8YS56ZCgpKX0scGF1c2U6ZnVuY3Rpb24oYil7Ynx8KHRoaXMuU2U9MCk7Yj10aGlzLmdldFJhd1BsYXllcigpO2IucGxheWVySW5zdGFuY2UmJmIucGxheWVySW5zdGFuY2UucGF1c2U/KHdpbmRvdy5wb3N0TWVzc2FnZSgiaG9tYWRwYXVzZSIsIioiKSxiLnBsYXllckluc3RhbmNlLnBhdXNlKCkpOndpbmRvdy5vdlZpZGVvJiZ3aW5kb3cub3ZWaWRlby5zdG9wUGxheWJhY2smJih3aW5kb3cucG9zdE1lc3NhZ2UoImhvbWFkcGF1c2UiLCIqIiksd2luZG93Lm92VmlkZW8uc3RvcFBsYXliYWNrKCkpfSxWYTpmdW5jdGlvbigpe3RoaXMuU2UrKzsKaWYoMTA8dGhpcy5TZSlyZXR1cm4hMTt0aGlzLnBhdXNlKCJwYXVzZVJlcGVhdE9uQWREZWxpdmVyeSIpO3JldHVybiEwfSxwbGF5OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtiLnBsYXllckluc3RhbmNlJiZiLnBsYXllckluc3RhbmNlLnBsYXk/KHdpbmRvdy5wb3N0TWVzc2FnZSgiaG9tYWRwbGF5IiwiKiIpLGIucGxheWVySW5zdGFuY2UucGxheSgpKTp3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8ucmVzdW1lUGxheWJhY2smJih3aW5kb3cucG9zdE1lc3NhZ2UoImhvbWFkcGxheSIsIioiKSx3aW5kb3cub3ZWaWRlby5yZXN1bWVQbGF5YmFjaygpKX0saXNQbGF5aW5nOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4hMT09PWIucGxheWVySW5zdGFuY2UucGF1c2VkPyEwOiEwPT09Yi5wbGF5ZXJJbnN0YW5jZS5wYXVzZWQ/ITE6Yi5pc1BsYXlpbmd9LGdldEN1cnJlbnRUaW1lOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTsKaWYoYi5wbGF5ZXJJbnN0YW5jZSYmYi5wbGF5ZXJJbnN0YW5jZS5jdXJyZW50VGltZSlyZXR1cm4gYi5wbGF5ZXJJbnN0YW5jZS5jdXJyZW50VGltZTtpZih3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8uZ2V0Q3VycmVudFRpbWUpcmV0dXJuIHdpbmRvdy5vdlZpZGVvLmdldEN1cnJlbnRUaW1lKCl9LGdldER1cmF0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtpZihiLnBsYXllckluc3RhbmNlJiZiLnBsYXllckluc3RhbmNlLmR1cmF0aW9uKXJldHVybiBiLnBsYXllckluc3RhbmNlLmR1cmF0aW9uO2lmKHdpbmRvdy5vdlZpZGVvJiZ3aW5kb3cub3ZWaWRlby5nZXREdXJhdGlvbilyZXR1cm4gd2luZG93Lm92VmlkZW8uZ2V0RHVyYXRpb24oKX0sTzpmdW5jdGlvbigpe3JldHVybiJPdlZpZGVvIn0sTmE6ZnVuY3Rpb24oKXt9LE1kOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0UmF3UGxheWVyKCk7dGhpcy5nZXRDdXJyZW50VGltZSgpPmImJihiPXRoaXMuZ2V0Q3VycmVudFRpbWUoKSk7CnZhciBhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiZ0aGlzLlYmJnRoaXMuVigpfX0pfSkoYyk7dmFyIERhPWMubGx8fERhOyhmdW5jdGlvbihjKXtjLmtsPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LEFhOmZ1bmN0aW9uKCl7aWYoIXRoaXMucGUpaWYodGhpcy5BYnx8KHRoaXMuQWI9MCksdGhpcy5nZXRQbGF5ZXIoKS5pc1BsYXlpbmcoKSYmdGhpcy5BYisrLDE1PHRoaXMuQWIpdGhpcy5vKCJub2ZyYW1ld29yayIsIklNQSIpLHRoaXMucyghMCk7ZWxzZXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2lmKGIuYWR2ZXJ0aXNpbmcpaWYoYj1iLmFkdmVydGlzaW5nLmFkc0xvYWRlcil7dGhpcy5wZT0hMDt2YXIgYT0iYWRFcnJvciI7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUuQURfRVJST1ImJgooYT1nb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SKTtiLmFkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZGF8fCh0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5BYSgpfS5iaW5kKHRoaXMpLDEwKTtlbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5BYSgpfS5iaW5kKHRoaXMpLDEwKX19LHZkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF9LGdhOmZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGEoYSxiKXt2YXIgaD0hMTtpZihhKXtpZigxMDA5PT1hfHwzMDM9PWF8fDQwMz09YSloPSEwO2h8fCFhLmluZGV4T2Z8fC0xPT09YS5pbmRleE9mKCIxMDA5IikmJi0xPT09YS5pbmRleE9mKCIzMDMiKSYmLTE9PT1hLmluZGV4T2YoIjQwMyIpfHwoaD0hMCk7Im51bWJlciI9PXR5cGVvZiBhJiYoYi5UPWEsYi5vKCJhZGVycm9yIiwKYSkpfXJldHVybiBofWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTtpZihiLmdldEVycm9yJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5nZXRFcnJvcil7dmFyIGg9Yi5nZXRFcnJvcigpO2lmKGguZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgaC5nZXRFcnJvckNvZGUmJmEoaC5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO3JldHVybn19Zm9yKHZhciBkIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSYmYltkXSYmYltkXS5hZEVycm9yJiZiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmYShiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTticmVha319LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpO3RoaXMuVD10aGlzLlR8fCExO3RoaXMuQWEoKTt2YXIgYT13aW5kb3cub3ZWaWRlbzthfHwoYT13aW5kb3cub3YudmlkZW8uUGxheWVyKTsKYSYmYS5yZWdpc3RlckV2ZW50JiYhdGhpcy5IcD8oYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuT25fUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX0FERVJST1IsZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCk7dGhpcy5zKCl9LmJpbmQodGhpcykpLHRoaXMuSHA9ITAsYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX1NUT1BQRUQsZnVuY3Rpb24oYSl7Yi5WcyhhKX0uYmluZCh0aGlzKSkpOmIuaXNQbGF5aW5nKCl8fHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksMTAwKX0sczpmdW5jdGlvbihiKXt0aGlzLkkoYil9fSl9KShjKTsKdmFyIEVhPWMua2x8fEVhOyhmdW5jdGlvbihjKXtjLm1sPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMuVWE9MTUwMDt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1bXTt3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8uc3luY2hyb25pemVyJiZ3aW5kb3cub3ZWaWRlby5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllciYmMDx3aW5kb3cub3ZWaWRlby5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllci5sZW5ndGgmJihiPXdpbmRvdy5vdlZpZGVvLnN5bmNocm9uaXplci5yZWdpc3RlcmVkUGxheWVyKTt3aW5kb3cub3YmJndpbmRvdy5vdi52aWRlbyYmd2luZG93Lm92LnZpZGVvLlBsYXllciYmd2luZG93Lm92LnZpZGVvLlBsYXllci5zeW5jaHJvbml6ZXImJndpbmRvdy5vdi52aWRlby5QbGF5ZXIuc3luY2hyb25pemVyLnJlZ2lzdGVyZWRQbGF5ZXImJjA8d2luZG93Lm92LnZpZGVvLlBsYXllci5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllci5sZW5ndGgmJgooYj13aW5kb3cub3YudmlkZW8uUGxheWVyLnN5bmNocm9uaXplci5yZWdpc3RlcmVkUGxheWVyKTtpZigwPGIubGVuZ3RoKWZvcih2YXIgYT0wO2E8Yi5sZW5ndGg7YSsrKXt2YXIgaD1uZXcgRGEoYlthXSk7aC5xYXx8dGhpcy5OKGgpfHwodGhpcy5QKGgpLChuZXcgRWEoaCx0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIEZhPWMubWx8fEZhLEdhPW5ldyBGYShyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5NaT10aGlzLmFbOF07dGhpcy5idD10aGlzLmFbN107dGhpcy52bj10aGlzLmFbN107dGhpcy5XaT10aGlzLmFbNV07dGhpcy5Daz10aGlzLmFbNF07dGhpcy5qPXRoaXMuYVs3XX1jLkp2PWI7Yi5wcm90b3R5cGU9e0xpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5NaTp0aGlzLmF0KGEpfSxhdDpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuYnQ6CnRoaXMudW4oYSl9LHVuOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy52bjp0aGlzLlZpKGEpfSxWaTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuV2k6dGhpcy5CayhhKX0sQms6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLkNrOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuajphfX19KShjKTt2YXIgSGE9Yy5Kdnx8SGEsdGM9bmV3IEhhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9dGMuTGkoNCk7KGZ1bmN0aW9uKGMpe2Mubms9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPWUuQ2coYiwiZWxlbWVudElEIik7dGhpcy5xaD1iLnBvc2l0aW9uaW5nO3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2guc3R5bGUud2lkdGg9CmIud2lkdGg7aC5zdHlsZS5taW5XaWR0aD1iLndpZHRoO2guc3R5bGUubWF4V2lkdGg9Yi53aWR0aDtoLnN0eWxlLmhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1pbkhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1heEhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1hcmdpbkxlZnQ9ImF1dG8iO2guc3R5bGUubWFyZ2luUmlnaHQ9ImF1dG8iOyJiZWZvcmUiPT10aGlzLnFoP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaCxhKToiYWZ0ZXIiPT10aGlzLnFoP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaCxhLm5leHRTaWJsaW5nKTphLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGgsYSk7dGhpcy5ZKGgpO3RoaXMuWihoKTt0aGlzLm5kPWh9LHBhdXNlOmZ1bmN0aW9uKCl7fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5uZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMubmQpfSx2YTpmdW5jdGlvbigpe3JldHVybiEwfSxzbzpmdW5jdGlvbigpe2UuV2codGhpcy5uZCk7ZS5CZSh0aGlzLm5kKTsKd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnNvKCl9LmJpbmQodGhpcyksNTApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuImlucmVhZCJ9LEdlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSl9KShjKTt2YXIgSWE9Yy5ua3x8SWE7KGZ1bmN0aW9uKGMpe2MubWs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMubygiZXh0ZXJuYWwiKTt0aGlzLkkoITApfX0pfSkoYyk7dmFyIEphPWMubWt8fEphOyhmdW5jdGlvbihjKXtjLm9rPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMuVWE9MTUwMDt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtJiZtLmlucmVhZCl7dmFyIGI9bS5pbnJlYWQsYT1lLkNnKGIsImVsZW1lbnRJRCIpO2UuV2coYSkmJihiPW5ldyBJYShiKSx0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBKYShiLHRoaXMuSykpLmcoKSkpO3RoaXMuSGI9d2luZG93LnNldFRpbWVvdXQodGhpcy5nLmJpbmQodGhpcyksCjEwMCl9ZWxzZSB0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksMTAwKX19KX0pKGMpO3ZhciBLYT1jLm9rfHxLYSxMYT1uZXcgS2Eocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMudnQ9dGhpcy5hWzVdO3RoaXMuTmo9dGhpcy5hWzJdO3RoaXMuSXY9dGhpcy5hWzRdO3RoaXMudXA9dGhpcy5hWzddO3RoaXMuS249dGhpcy5hWzhdO3RoaXMuQXM9dGhpcy5hWzRdO3RoaXMuWHA9dGhpcy5hWzNdO3RoaXMuS209dGhpcy5hWzRdO3RoaXMuU3M9dGhpcy5hWzVdO3RoaXMuWG89dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbNF19Yy5oaj1iO2IucHJvdG90eXBlPXt1dDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMudnQ6dGhpcy5NaihhKX0sTWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLk5qOnRoaXMuSHYoYSl9LEh2OmZ1bmN0aW9uKGEpe3JldHVybiA5PAphP3RoaXMuSXY6dGhpcy50cChhKX0sdHA6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnVwOnRoaXMuSm4oYSl9LEpuOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Lbjp0aGlzLnpzKGEpfSx6czpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuQXM6dGhpcy5XcChhKX0sV3A6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLlhwOnRoaXMuSm0oYSl9LEptOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuS206dGhpcy5ScyhhKX0sUnM6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlNzOnRoaXMuV28oYSl9LFdvOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5Ybzp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLmo6YX19fSkoYyk7dmFyIE1hPWMuaGp8fE1hLHVjPW5ldyBNYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPQp1Yy51dCg0KTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEpe3RoaXMudXJsPWE7dGhpcy5tZXRob2Q9IkdFVCI7dGhpcy5kYXRhPXt9fWMuYms9YjtiLnByb3RvdHlwZT17c2V0RGF0YTpmdW5jdGlvbihhKXt0aGlzLmRhdGE9YX0sRXQ6ZnVuY3Rpb24oYSl7dGhpcy5tZXRob2Q9YX0sYXBwZW5kRGF0YTpmdW5jdGlvbihhLGIpe3RoaXMuZGF0YVthXT1ifSxkbjpmdW5jdGlvbihhKXt0cnl7dGhpcy5hcHBlbmREYXRhKCJob21hZF9tYWNyb3MiLEpTT04uc3RyaW5naWZ5KGEpKX1jYXRjaChiKXt9fX19KShjKTt2YXIgeT1jLmJrfHx5OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsaCxkLGYpe3RoaXMuYmI9YTt0aGlzLnhnPXRoaXMuZ2k9ITE7dGhpcy5taD1kO3RoaXMuSmg9ITE7InN0cmluZyI9PT10eXBlb2YgYSYmKHRoaXMuYmI9bmV3IHkoYSkpO3ZhciBjPXRoaXMucWI9bmV3IFhNTEh0dHBSZXF1ZXN0O2Mub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWh8fAo0IT1jLnJlYWR5U3RhdGV8fDIwMCE9Yy5zdGF0dXMmJjIwMSE9Yy5zdGF0dXN8fGgoYyk7aWYoZCYmND09Yy5yZWFkeVN0YXRlJiYyMDAhPWMuc3RhdHVzJiYyMDEhPWMuc3RhdHVzKWQoYyk7ZWxzZSBpZig0PT1jLnJlYWR5U3RhdGUmJjA9PWMuc3RhdHVzJiZsJiZsLkZlKHRoaXMuYmIudXJsKSYmbC5OZCl7dmFyIGU9bmV3IHkoYS51cmwpO2UuRXQoIlBPU1QiKTtlLnNldERhdGEoe2hvbWFkX3Bpbmc6InRydWUifSk7KG5ldyBiKGUsZnVuY3Rpb24oYSl7dmFyIGI9ITE7dHJ5e2I9SlNPTi5wYXJzZShhLnJlc3BvbnNlVGV4dCl9Y2F0Y2goaCl7Yj0hMX1iJiZiLnBpbmcmJiJwb25nIj09Yi5waW5nJiYoYj0hMCk7Ynx8bC5rYSgicmVxdWVzdF9mYWlsZWRfbm9wb25nICIpfSxmdW5jdGlvbigpe2wua2EoInJlcXVlc3RfZmFpbGVkIil9KSkubG9hZCgpfWYmJjQhPWMucmVhZHlTdGF0ZSYmZihjKX0uYmluZCh0aGlzKX1jLmNrPWI7Yi5wcm90b3R5cGU9e2xvYWQ6ZnVuY3Rpb24oKXt2YXIgYT0KdGhpcy5iYi5kYXRhO2lmKCJzdHJpbmciIT10eXBlb2YgYSl7dmFyIGI9YSxhPSIiLGQ7Zm9yKGQgaW4gYilhKz0iJiIrZCsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGJbZF0pO2E9YS5zdWJzdHIoMSl9dGhpcy54ZyYmKGErPSImaG9tYWRfZm9sbG93X3JlZGlyZWN0cz10cnVlIik7dHJ5e3RoaXMuSmg/dGhpcy5xYi5vcGVuKHRoaXMuYmIubWV0aG9kLHRoaXMuYmIudXJsLCExKTp0aGlzLnFiLm9wZW4odGhpcy5iYi5tZXRob2QsdGhpcy5iYi51cmwsITApLHRoaXMuZ2l8fCh0aGlzLnFiLndpdGhDcmVkZW50aWFscz0hMCksMDxhLmxlbmd0aCYmdGhpcy5xYi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSxhWyJYLUhvbWFkLVBvc3QiXSYmdGhpcy5xYi5zZXRSZXF1ZXN0SGVhZGVyKCJYLUhvbWFkLVBvc3QiLCJ0cnVlIiksdGhpcy5xYi5zZW5kKGEpfWNhdGNoKGYpe2wmJmwuRmUodGhpcy5iYi51cmwpP2wuTmQ/Cmwua2EoInJlcXVlc3RfZmFpbGVkIik6ZS50cmFjaygiY2hlY2siLCJyZXF1ZXN0X2ZhaWxlZCIsITApOmwuRmUodGhpcy5iYi51cmwpLHRoaXMubWgmJnRoaXMubWgoKX1yZXR1cm4gdGhpcy5xYn19fSkoYyk7dmFyIE5hPWMuY2t8fE5hOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5LYT0hMTt0aGlzLnFjPSIiO3RoaXMuZWU9dGhpcy5wYz10aGlzLnViPW51bGw7dGhpcy5Wbz10aGlzLkdiPXRoaXMuZGg9ITE7dGhpcy5KYT0iIjt0aGlzLllnPSExO3RoaXMuRmE9dGhpcy5yZD0iIjt0aGlzLlVnPXRoaXMuWD10aGlzLmlzRW5hYmxlZD10aGlzLlplPSExO3RoaXMuQ2E9W107dGhpcy5LZz10aGlzLlpiPSIiO3RoaXMubGU9ITE7dGhpcy5wZj0wO3RoaXMuRWY9InN2bXBsYXllci5hZHZlcnRpc2luZy5IT01BRF9WRVJJRklFRCI7dGhpcy5DZj0ic3ZtcGxheWVyLmFkdmVydGlzaW5nLkhPTUFEX0JMT0NLRUQiO3RoaXMuS2I9InN2bXBsYXllci5hZHZlcnRpc2luZy5IT01BRF9OT0JMT0NLRVIiOwp0aGlzLmhjPSJzdm1wbGF5ZXIuYWR2ZXJ0aXNpbmcuSE9NQURfQURCTE9DS0VSIjt0aGlzLkRmPSJzdm1wbGF5ZXIuYWR2ZXJ0aXNpbmcuSE9NQURfQ09PS0lFQkxPQ0tFUiI7dGhpcy5hYz0iIjt0aGlzLmJjPVtdO3RoaXMuY2M9W107dGhpcy5MZD1bXTt0aGlzLiRiPSIiO3RoaXMucWY9MDt0aGlzLnZpZGVvcGxhemE9e307dGhpcy5BYz0hMTt0aGlzLnVvPXRoaXMuT2Q9bnVsbDt0aGlzLkZoPXRoaXMuTmM9dGhpcy5wZz10aGlzLnVmPXRoaXMuTmQ9dGhpcy5nZT10aGlzLlFjPSExO3RoaXMuZ2I9e2dsb2JhbDohMSxjbGllbnQ6ITEsY3VzdG9tZXI6ITF9O3RoaXMudGQ9MDt0aGlzLk1nPSExO3RoaXMuTGc9MUUzO3RoaXMuJGM9ITE7dGhpcy5QYT0xRTM7dGhpcy5NZj0iIn1jLmRrPWI7Yi5wcm90b3R5cGU9e2dldENvbmZpZzpmdW5jdGlvbigpe3JldHVybntpc0FjdGl2ZTp0aGlzLkthLGFkdGFncGFyYW1ldGVyOnRoaXMucWMsYWR0YWdtb2RpZmllcjp0aGlzLnViLGFkdGFnbW9kaWZpZXJBZHY6dGhpcy5wYywKYWR0YWdyZWdleDp0aGlzLmVlLGJpdHJhdGU6dGhpcy5QYSxqc3BvcHVwczp0aGlzLmRoLHNpZGVsb2Fkczp0aGlzLkdiLGRpc2FibGV0ZXN0czp0aGlzLlZvLGhvbWFkQWxpYXM6dGhpcy5KYSxpc0luaXRpYWxpemVkOnRoaXMuWWcsZ2xvYmFsQ29uZmlnOnRoaXMucmQsY2xpZW50Q29uZmlnOnRoaXMuRmEsaXNFbmFibGVkOnRoaXMuaXNFbmFibGVkLGlzVmVyaWZpZWQ6dGhpcy5YLGlzQmxvY2tlZDp0aGlzLlVnLHNlcnZlcjp0aGlzLkNhLHN2bUNvbmZpZzp0aGlzLlpiLGhvbWFkQWRwYXRoOnRoaXMuS2csZGlzYWJsZUNvb2tpZVRlc3Q6dGhpcy5sZSx0ZXN0Q29va2llQXR0ZW1wdHM6dGhpcy5wZixIT01BRF9WRVJJRklFRDp0aGlzLkVmLEhPTUFEX0JMT0NLRUQ6dGhpcy5DZixIT01BRF9OT0JMT0NLRVI6dGhpcy5LYixIT01BRF9BREJMT0NLRVI6dGhpcy5oYyxIT01BRF9DT09LSUVCTE9DS0VSOnRoaXMuRGYsdGVzdEhpZGU6dGhpcy5hYyx0ZXN0VGFnczp0aGlzLmJjLHRlc3RUYWdzSlM6dGhpcy5jYywKdGVzdFRhZ3NYSFI6dGhpcy5MZCx0ZXN0Q29va2llOnRoaXMuJGIsdGhyb3R0bGU6dGhpcy5xZix2aWRlb3BsYXphOnRoaXMudmlkZW9wbGF6YSxob21hZFRlc3RlZDp0aGlzLkFjLGNoZWNrZWRIb21hZFN0YXR1c0NhbGxiYWNrOnRoaXMudW8sYWRCbG9ja2VyRGV0ZWN0ZWQ6dGhpcy5RYyxibG9ja2VkV2FzQ2FsbGVkOnRoaXMuZ2UsdXNlU3RyaWN0Q2hlY2tzOnRoaXMuTmQsdXNlU3RyaWN0Q29uZmlnQ2hlY2tzOnRoaXMudWYsY29uZmlnRmFpbHVyZXM6dGhpcy5nYixzaXRlQ29uZmlnOnRoaXMuYWIsc2VydmVySWQ6dGhpcy5CaCxlbmFibGVRdWFydGlsZVRyYWNraW5nOnRoaXMudmMsdnBhaWQ6dGhpcy5OYyxza2lwQWxsb3dlZDp0aGlzLkZoLHZtYXBzOnRoaXMuY2ksYWx0ZXJuYXRlX2NsaWNrdGhyb3VnaDp0aGlzLiRjLGFkRmFsbGJhY2tVUkw6dGhpcy5NZn19LERxOmZ1bmN0aW9uKCl7dmFyIGE9ITEsYjtmb3IoYiBpbiB0aGlzLmdiKSJib29sZWFuIj09dHlwZW9mIHRoaXMuZ2JbYl0mJgoxPT10aGlzLmdiW2JdJiYoYT0hMCk7cmV0dXJuIGF9LGRmOmZ1bmN0aW9uKGEpe3RoaXMuZ2JbYV09ITB9LGZxOmZ1bmN0aW9uKCl7dmFyIGE9W10sYjtmb3IoYiBpbiB0aGlzLmdiKSJib29sZWFuIj09dHlwZW9mIHRoaXMuZ2JbYl0mJjE9PXRoaXMuZ2JbYl0mJmEucHVzaChiKTtyZXR1cm4gYX0sS2Q6ZnVuY3Rpb24oYSl7YT1hfHwiIjtpZigic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIGE7YT1hLnJlcGxhY2UoIlt0aW1lXSIsTWF0aC5yb3VuZCgobmV3IERhdGUpLmdldFRpbWUoKS8xRTMpKTthPWEucmVwbGFjZSgiW3RpbWVNU10iLChuZXcgRGF0ZSkuZ2V0VGltZSgpKTthPWEucmVwbGFjZSgiW3RpbWVzdGFtcF0iLChuZXcgRGF0ZSkuZ2V0VGltZSgpKTthPWEucmVwbGFjZSgiW3JhbmRvbV0iLHRoaXMuRWIoMTApLnRvU3RyaW5nKCkpO2E9YS5yZXBsYWNlKCJbZG9jdW1lbnRVUkxdIixkb2N1bWVudC5VUkwpO2E9YS5yZXBsYWNlKCJbZG9jdW1lbnRCYXNlVVJJXSIsZG9jdW1lbnQuYmFzZVVSSSk7CnJldHVybiBhPWUuUG4oYSl9LHphOmZ1bmN0aW9uKGEsYixkKXt2YXIgZj0iIixjPSIiLGU9IiIsZz0iIjtpZighdGhpcy5LYSYmIWIpcmV0dXJuIG5ldyB5KGEpO2Y9dGhpcy5FZShhKTtjPXRoaXMubGEoYSk7Zj8odGhpcy5DYygpP2U9YTplPWMucHJvdG9jb2wrIjovLyIrYy5hdXRob3JpdHkrIi8iLGc9Yy5wYXRoLnN1YnN0cigxKSk6KGU9dGhpcy5EZCgpLGc9Yy5wYXRoLnN1YnN0cigxKSsoYy5xdWVyeT8iPyIrYy5xdWVyeToiIikpO2QmJih0aGlzLnFjfHx0aGlzLnVifHx0aGlzLnBjfHx0aGlzLmVlKSYmKGc9dGhpcy5XcihnKSk7YT1uZXcgeShlKTthLnVybD1lO2U9IiI7ZT1mP2MuaG9zdC5zcGxpdCgiLiIpLnNsaWNlKDEpLmpvaW4oIi0iKTp0aGlzLmhxKGMuaG9zdCk7YS5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9ZTthLmRhdGEuaG9tYWRfdXJsX3N1ZmZpeD1nO2EuZGF0YS5ob21hZF91cmxfc3VmZml4X2Jhc2U2ND10aGlzLnZiKGcpO2EubWV0aG9kPSJQT1NUIjsKcmV0dXJuIGF9LEVlOmZ1bmN0aW9uKGEpe3ZhciBiPSExLGQ9bmV3IFJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPyhbdy4tXSopOj8uKihbMC05XSspPy8/KFthLWYwLTldezQwfSkvPyQiLCJnIik7KGQ9ZC5leGVjKGEpKSYmKGRbMl18fGRbNV0pP2I9ITA6dGhpcy5DYygpJiYoZD1uZXcgUmVnRXhwKCJeKGh0dHBzPyk6Ly8oW3cuLV0qKTo/LiooWzAtOV0rKT8vKFthLWYwLTldezQwfSkvPyQiLCJnIiksKGQ9ZC5leGVjKGEpKSYmZFs0XSYmKGI9ITApKTtyZXR1cm4gYn0sQ2M6ZnVuY3Rpb24oKXt2YXIgYT0hMSxiPSIiO3RoaXMuQ2EmJnRoaXMuQ2EubGVuZ3RoJiYwPHRoaXMuQ2EubGVuZ3RoJiYoYj10aGlzLkNhWzBdLGI9Yi5yZXBsYWNlKCJodHRwczovLyIsIiIpLGI9Yi5yZXBsYWNlKCJodHRwOi8vIiwiIiksYj1iLnJlcGxhY2UoIi8vIiwiIiksYT0oYT1iLnNwbGl0KCIuIikpJiZhWzBdJiYiW2hhc2hdIj09YVswXT8hMTohMCk7cmV0dXJuIGF9LEZlOmZ1bmN0aW9uKGEpe3ZhciBiPQohMSxkPVJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPy4qIiwiZyIpLmV4ZWMoYSk7ZCYmKGRbMl18fGRbNV0pP2I9ITA6Yj10aGlzLkVlKGEpO3JldHVybiBifSxocTpmdW5jdGlvbihhKXt2YXIgYj0iIixkPSIiO2lmKCJzdHJpbmciPT09dHlwZW9mIHRoaXMuSmEmJjA8dGhpcy5KYS5sZW5ndGgpcmV0dXJuIHRoaXMuSmE7Zm9yKGQgaW4gdGhpcy5KYSlpZihiPXRoaXMuSmFbZF0sYi5oYXNPd25Qcm9wZXJ0eSgidXJsIikmJmIudXJsPT09YSlyZXR1cm4gYi5TdjtyZXR1cm4ibm9uZSJ9LHVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2FbdGhpcy5CaF19LERkOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy51ZCgpLGI9dGhpcy5FaCgobmV3IERhdGUpLmdldFRpbWUoKSsiIiksZD0iMWFiY2RmIi5zcGxpdCgiIik7cmV0dXJuIGEucmVwbGFjZSgiW2hhc2hdIixiLnNsaWNlKDAsLTEpKyIiK2RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmQubGVuZ3RoKV0pfSxqaDpmdW5jdGlvbihhLApiLGQpe2E9ITE7Yj0iIjtpZihkLmV2YWwpdHJ5e2I9ZXZhbCgiKCIrZC5ldmFsKyIpKCkiKX1jYXRjaChmKXthPSEwfWVsc2UgYT0hMDthJiYiS0VFUCIhPT1kLmZhbGxiYWNrJiYoYj1kLmZhbGxiYWNrKTtyZXR1cm4gYn0sVnI6ZnVuY3Rpb24oYSxiKXt2YXIgZD1lLmxhKGEpLGY9IiIsZj0iIixjO2ZvcihjIGluIGIpe2lmKGJbY10uc3VidmFsdWVzKXtmb3IodmFyIGc9ZGVjb2RlVVJJQ29tcG9uZW50KGQucXVlcnlLZXlbY10pLnNwbGl0KCImIiksZj17fSxIPTA7SDxnLmxlbmd0aDtIKyspe3ZhciBrPWdbSF0uc3BsaXQoIj0iKTtmW2tbMF1dPWtbMV19Zm9yKHZhciBsIGluIGJbY10uc3VidmFsdWVzKWZbbF09dGhpcy5qaChmW2xdLGwsYltjXS5zdWJ2YWx1ZXNbbF0pO2c9W107Zm9yKGwgaW4gZilnLnB1c2gobCsiPSIrZltsXSk7Zj1nPWVuY29kZVVSSUNvbXBvbmVudChnLmpvaW4oIiYiKSl9ZWxzZSBmPXRoaXMuamgoZC5xdWVyeUtleVtjXSxjLGJbY10pO2QucXVlcnlLZXlbY109CmZ9bD1bXTtmb3IoYyBpbiBkLnF1ZXJ5S2V5KWwucHVzaChjKyI9IitkLnF1ZXJ5S2V5W2NdKTtyZXR1cm4gZj1kLmhvc3QrZC5wYXRoKyI/IitsLmpvaW4oIiYiKX0sV3I6ZnVuY3Rpb24oYSl7dGhpcy5xYyYmKGErPXRoaXMucWMpO2lmKHRoaXMudWIpZm9yKHZhciBiIGluIHRoaXMudWIpdGhpcy51Yi5oYXNPd25Qcm9wZXJ0eShiKSYmKGE9YS5yZXBsYWNlKGIsdGhpcy51YltiXSkpO3RoaXMucGMmJihhPXRoaXMuVnIoYSx0aGlzLnBjKSk7cmV0dXJuIGF9LGw6ZnVuY3Rpb24oYSxiLGQsZixjLGUpe2w9dGhpczt0aGlzLllnPSEwO3RoaXMucmQ9YTt0aGlzLkZhPWI7dGhpcy5aZT1kO3RoaXMuT2Q9Zjt0aGlzLnNjPWM7dGhpcy5hYj1lfHx7fTt0aGlzLkpyKCk7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLkZhKXRoaXMuSHIoKTtlbHNlIGlmKCJvYmplY3QiIT09dHlwZW9mIHRoaXMuRmEpdHJ5e3RoaXMuRmE9YigpLHRoaXMuZGQoKX1jYXRjaChnKXt0aGlzLmthKCJub0NsaWVudENvbmZpZyIpfX0sCm5iOmZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7dHJ5e2I9bmV3IEV2ZW50KGEpfWNhdGNoKGQpe2I9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksYi5pbml0RXZlbnQoImN1c3RvbSIsITAsITEpfXJldHVybiBifSxKcjpmdW5jdGlvbigpe3RoaXMuTGEobmV3IHkodGhpcy5yZCt0aGlzLmFlKCJnbG9iYWwiKSksdGhpcy56cS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7dGhpcy5kZigiZ2xvYmFsIik7Im9iamVjdCI9PXR5cGVvZiBfY2xpZW50Q29uZmlnJiZ0aGlzLmRkKCl9LmJpbmQodGhpcyksITApfSxIcjpmdW5jdGlvbigpe3RoaXMuTGEobmV3IHkodGhpcy5GYSt0aGlzLmFlKCJjbGllbnQiLC0xIT10aGlzLkZhLmluZGV4T2YoIj8iKSkpLHRoaXMuZGQuYmluZCh0aGlzKSxmdW5jdGlvbigpe3RoaXMuZGYoImNsaWVudCIpO3RoaXMua2EoImNsaWVudENvbmZpZ0NvdWxkTm90QmVMb2FkZWQiKX0uYmluZCh0aGlzKSwhMCl9LGFlOmZ1bmN0aW9uKGEsYil7dmFyIGQ7ZD0oYj8iJiI6CiI/IikrKCJjYWNoZT0iK3RoaXMuRWIoKSk7dGhpcy5hYiYmdGhpcy5hYi5ub0NsaWVudENvbmZpZ0NhY2hlQnVzdGVyJiYiY2xpZW50Ij09YSYmKGQ9IiIpO3RoaXMuYWImJnRoaXMuYWIubm9DYWNoZUJ1c3RlciYmKGQ9IiIpO3JldHVybiBkfSxrYTpmdW5jdGlvbihhKXtpZighdGhpcy5nZSl7dGhpcy5nZT0hMDt2YXIgYj1mdW5jdGlvbigpe2Zvcih2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSxiPTA7YjxhLmxlbmd0aDtiKyspe2lmKGFbYl0mJmFbYl0ucGF1c2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBhW2JdLnBhdXNlKXRyeXthW2JdLnBhdXNlKCl9Y2F0Y2goaCl7fWFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKX1hPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKTtmb3IoYj0wO2I8YS5sZW5ndGg7YisrKWFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTthPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInZpZGVvLXdyYXBwZXIiKTsKZm9yKGI9MDtiPGEubGVuZ3RoO2IrKylhW2JdJiZhW2JdLnBhcmVudE5vZGUmJmFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTthPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInZpZGVvcGxheWVyIik7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKylhW2JdJiZhW2JdLnBhcmVudE5vZGUmJmFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTtpZih3aW5kb3cuc2VsZiE9d2luZG93LnRvcClmb3IoYT13aW5kb3cuZG9jdW1lbnQ7YS5oYXNDaGlsZE5vZGVzKCk7KWEucmVtb3ZlQ2hpbGQoYS5sYXN0Q2hpbGQpfTsiNHBsYXllcnMuZGUiPT1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpJiYodGhpcy5zYz0hMSk7dGhpcy5zYyYmImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLnNjP3RoaXMuc2MoKTooYigpLHdpbmRvdy5zZXRJbnRlcnZhbChiLDUwMCkpO3RoaXMuWD10aGlzLlVnPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLkNmKSk7CnRoaXMuSWIoKTtlLndjKGsuUXMpOyhiPWUuU2IodGhpcy51ZCgpKSl8fChiPWUuU2IoZG9jdW1lbnQubG9jYXRpb24uaHJlZikpO2F8fChhPSJ1bmtvd24iKTtlLnRyYWNrKCJzdGF0c19oZF9wZW5hbHR5IixhLCEwKX19LHpxOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLlgpe3ZhciBiPXt9O3RyeXtiPUpTT04ucGFyc2UoYS5yZXNwb25zZVRleHQpfWNhdGNoKGQpe2IuZW5hYmxlZD0iZmFsc2UifXRoaXMuaXNFbmFibGVkPXRoaXMuZGMoYi5lbmFibGVkKTt0aGlzLlg9IXRoaXMuaXNFbmFibGVkO3RoaXMuaXNFbmFibGVkPyJvYmplY3QiIT10eXBlb2YgdGhpcy5GYXx8dGhpcy5aYnx8dGhpcy5KYXx8dGhpcy5kZCgpOih0aGlzLkthPXRoaXMuaXNFbmFibGVkPSExLHRoaXMuWD0hMCxkb2N1bWVudC5kaXNwYXRjaEV2ZW50KHRoaXMubmIodGhpcy5LYikpLHRoaXMuSWIoKSl9fSxkZDpmdW5jdGlvbihhKXt2YXIgYj0hMTthJiYoYj1hLnJlc3BvbnNlVGV4dCk7YT17fTtpZihiKXRyeXthPQpKU09OLnBhcnNlKGIpfWNhdGNoKGQpe2E9dGhpcy5GYX1lbHNlIGE9dGhpcy5GYTt0aGlzLmlzRW5hYmxlZD10aGlzLmRjKGEuZW5hYmxlZCk7dGhpcy5YPSF0aGlzLmlzRW5hYmxlZDt0aGlzLkNhPWEuc2VydmVyfHxbXTtmb3IoYj0wO2I8dGhpcy5DYS5sZW5ndGg7YisrKXRoaXMuQ2FbYl09dGhpcy5DYVtiXS5yZXBsYWNlKCJkYW1vaC53aWtpYS5jb20iLCJkYW1vaC53aWtpYS5jb20uc3Zvbm0tYWxpYXMuY29tIik7dGhpcy5aYj1hLmNvbmZpZ3x8IiI7dGhpcy5KYT1hLmFsaWFzfHxudWxsO3RoaXMuS2c9YS5hZHBhdGh8fCIiO3RoaXMubGU9YS5kaXNhYmxlY29va2lldGVzdHx8ITE7dGhpcy5CaD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqdGhpcy5DYS5sZW5ndGgpO3RoaXMuaXNFbmFibGVkJiZ0aGlzLlpiJiZ0aGlzLkphJiZ0aGlzLkNhLmxlbmd0aD90aGlzLkRjKCExKToodGhpcy5LYT10aGlzLmlzRW5hYmxlZD0hMSx0aGlzLlg9ITAsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh0aGlzLm5iKHRoaXMuS2IpKSwKdGhpcy5JYigpKX0sRGM6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWCl7dmFyIGI9e307aWYoYSl7dmFyIGI9bmV3IHkodGhpcy5EZCgpKSxkPXRoaXMubGEodGhpcy5aYik7Yi5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9InMzaG9tYWRnbG9iYWxjb25maWdzIjtiLmRhdGEuaG9tYWRfdXJsX3N1ZmZpeD1kLnBhdGguc3Vic3RyKDEpLnJlcGxhY2UoImhvbWFkLWdsb2JhbC1jb25maWdzLnNjaG5lZXZvbm1vcmdlbi5jb20vIiwiIik7Yi5tZXRob2Q9IlBPU1QifWVsc2UgYj1uZXcgeSh0aGlzLlpiK3RoaXMuYWUoImN1c3RvbWVyIikpO3RoaXMuTGEoYix0aGlzLmR1LmJpbmQodGhpcyksZnVuY3Rpb24oKXt0aGlzLmRmKCJjdXN0b21lciIpO2E/dGhpcy5MbD90aGlzLmthKCJub1NWTUNvbmZpZyIpOih0aGlzLkxsPSEwLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5EYyghMCl9LmJpbmQodGhpcyksMTAwKSk6dGhpcy5EYyghMCl9LmJpbmQodGhpcyksITApfX0sZHU6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWCl7YT0KYS5yZXNwb25zZVRleHQ7dmFyIGI9e307dHJ5e2I9SlNPTi5wYXJzZShhKX1jYXRjaChkKXtpZighdGhpcy5BYyYmdGhpcy5pc0VuYWJsZWQpe3RoaXMuQWM9ITA7dGhpcy5EYyghMCk7cmV0dXJufX10aGlzLk5kPXRoaXMuZGMoYi5zdHJpY3QpO3RoaXMudWY9dGhpcy5kYyhiLnN0cmljdF9jb25maWdfZW5hYmxlZCk7dGhpcy5wZz1iLmR1cmF0aW9uX2NoZWNrX3BlbmFsdHlfZGlzYWJsZWR8fCExO3RoaXMudmM9dGhpcy5kYyhiLmVuYWJsZVF1YXJ0aWxlVHJhY2tpbmcpO3RoaXMuaXNFbmFibGVkPXRoaXMuZGMoYi5lbmFibGVkKTt0aGlzLmFjPWIudGVzdGhpZGV8fCIiO3RoaXMuY2M9Yi50ZXN0YWR0YWdzanN8fGIudGVzdGFkdGFnc3x8W107dGhpcy5MZD1iLnRlc3RhZHRhZ3N4aHJ8fFtdO3RoaXMucWM9Yi5hZHRhZ3BhcmFtZXRlcnx8IiI7dGhpcy51Yj1iLmFkdGFnbW9kaWZpZXJ8fG51bGw7dGhpcy5wYz1iLmFkdGFnbW9kaWZpZXJfYWR2fHxudWxsO3RoaXMuZWU9Yi5hZHRhZ3JlZ2V4fHwKbnVsbDt0aGlzLmRoPWIuanNwb3B1cHN8fCExO3RoaXMuR2I9Yi5zaWRlbG9hZHN8fCExO3RoaXMuTmM9Yi52cGFpZHx8ITE7dGhpcy5hYi52cGFpZD10aGlzLk5jO3RoaXMuRmg9Yi5za2lwYWxsb3dlZHx8ITE7dGhpcy5hZD1iLmNhcHRpb25fZHVyYXRpb258fCExO3RoaXMuY2k9Yi52bWFwc3x8IiI7dGhpcy4kYz1iLmFsdGVybmF0ZV9jbGlja3Rocm91Z2h8fCExO3RoaXMuUGE9Yi5iaXRyYXRlfHwxRTM7dGhpcy5NZj1iLmFkX2ZhbGxiYWNrX1VSTHx8IiI7dGhpcy4kYj1iLnRlc3QzcmRwYXJ0eWNvb2tpZSYmYi50ZXN0M3JkcGFydHljb29raWUgaW5zdGFuY2VvZiBBcnJheT90aGlzLnBxKGIudGVzdDNyZHBhcnR5Y29va2llKTpiLnRlc3QzcmRwYXJ0eWNvb2tpZXx8IiI7dGhpcy5sZSYmKHRoaXMuJGI9bnVsbCk7dGhpcy5xZj1iLnRocm90dGxlfHwwO3RoaXMudmlkZW9wbGF6YT1iLnZpZGVvcGxhemF8fHt9OyF0aGlzLkFjJiZ0aGlzLmlzRW5hYmxlZD8odGhpcy5BYz0hMCx0aGlzLkRjKCEwKSk6CnRoaXMuaXNFbmFibGVkJiYhdGhpcy55dSgpJiYodGhpcy5hY3x8dGhpcy5jY3x8dGhpcy5iY3x8dGhpcy4kYnx8dGhpcy5MZCk/dGhpcy5aZT8odGhpcy5LYT10aGlzLlg9ITAsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh0aGlzLm5iKHRoaXMuS2IpKSx0aGlzLmllKCksdGhpcy5JYigpKTp0aGlzLmx1KCk6KHRoaXMuaXNFbmFibGVkPSExLHRoaXMubXUoKSl9fSxsdTpmdW5jdGlvbigpe3RoaXMua3UoKTt0aGlzLm51KCl9LG51OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4idmFyIGV2dCA9IHt9O2lmICh0eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7ZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KCciK2ErIicpO30gZWxzZSB7ZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7ZXZ0LmluaXRDdXN0b21FdmVudCgnIithKyInLCBmYWxzZSwgZmFsc2UsIHt9KTt9d2luZG93LnBhcmVudC5kb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2dCk7In0KdmFyIGI9ImlubGluZWV2YWxkYXRhIixkPTA7dHJ5e3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2Yud2lkdGg9MTtmLmhlaWdodD0xO2Yuc3R5bGUuZGlzcGxheT0ibm9uZSI7Zi5zcmM9ImFib3V0OmJsYW5rIjt2YXIgYz1lLmJhKDEwKSxnPWUuYmEoMTApLEg9ZS5iYSgxMCk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihjLGZ1bmN0aW9uKCl7ZCsrO2I9Yi5yZXBsYWNlKCJkYXRhIiwiIil9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGcsZnVuY3Rpb24oKXtkKys7Yj1iLnJlcGxhY2UoImV2YWwiLCIiKX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoSCxmdW5jdGlvbigpe2QrKztiPWIucmVwbGFjZSgiaW5saW5lIiwiIil9KTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYpO2YuY29udGVudFdpbmRvdy5kb2N1bWVudC53cml0ZShhdG9iKCJQR2gwYld3K1BHaGxZV1ErUEhOamNtbHdkQ0IwZVhCbFBTSjBaWGgwTDJwaGRtRnpZM0pwY0hRaVBnPT0iKSsKYShIKSthdG9iKCJQQzl6WTNKcGNIUStQSE5qY21sd2RDQjBlWEJsUFNKMFpYaDBMMnBoZG1GelkzSnBjSFFpUG1WMllXd29JZz09IikrYShnKSthdG9iKCJJaWs4TDNOamNtbHdkRDQ4YzJOeWFYQjBJSFI1Y0dVOUluUmxlSFF2YW1GMllYTmpjbWx3ZENJZ2MzSmpQU0prWVhSaE9uUmxlSFF2YW1GMllYTmpjbWx3ZER0aVlYTmxOalFzIikrZS52YihhKGMpKSthdG9iKCJJajQ4TDNOamNtbHdkRDQ4TDJobFlXUStQR0p2WkhrK1BDOWliMlI1UGp3dmFIUnRiRDQ9IikpfWNhdGNoKGspe313aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGYpfWNhdGNoKGEpe31pZigzIT1kKXt2YXIgYz1lLnVjKCk7aWYoKGMuaXNDaHJvbWV8fGMuaXNGaXJlZm94KSYmIWMuaXNFZGdlJiYhZS5UYSgpKXtpZih0aGlzLmFiJiZ0aGlzLmFiLnBsYXllciYmdGhpcy5hYi5wbGF5ZXIubGVuZ3RoKXtlLnRyYWNrKCJzdGF0c19oZF9jc3BfaGRwIixiLCEwKTsKcmV0dXJufXRoaXMua2EoImNzcF8iK2IpfWUudHJhY2soInN0YXRzX2hkX2NzcCIsYiwhMCl9fS5iaW5kKHRoaXMpLDFFMyl9LG11OmZ1bmN0aW9uKCl7dGhpcy5YPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLktiKSk7dGhpcy5JYigpfSxMYzpmdW5jdGlvbihhKXt0aGlzLlFjPSEwO3RoaXMuWHx8KHRoaXMuWD10aGlzLkthPSEwLGRvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYihhKSksdGhpcy5JYigpLHRoaXMuaWUoKSl9LGt1OmZ1bmN0aW9uKCl7aWYodGhpcy5hYyl7dmFyIGE9ZS51YygpO2lmKChhLmlzQ2hyb21lfHxhLmlzRmlyZWZveCkmJnRoaXMuYmgoKSl0aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZEhpZGUoKSBzdGV2ZSBpcyBhbGl2ZSIpO2Vsc2V7YT0hMTt0cnl7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yi5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLmFjKTtiLnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuYWMpOwpiLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJ3aWR0aDoxcHg7aGVpZ2h0OjFweDttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4O2JhY2tncm91bmQtY29sb3I6I2ZmMDAwMCIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYik7dmFyIGQ9MD09PWIub2Zmc2V0V2lkdGh8fDA9PT1iLm9mZnNldEhlaWdodDtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGIpO2E9ZH1jYXRjaChmKXt9YT90aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZEhpZGUoKSBhZCBlbGVtZW50IHdhcyBoaWRkZW4iKTp0aGlzLk5oKCl9fWVsc2UgdGhpcy5OaCgpfSxNaDpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXtmPWQuc2hpZnQoKS5yZXBsYWNlKCJbcmFuZG9tXSIsdGhpcy5FYigpKTt0aGlzLnF1KGYsMDxkLmxlbmd0aD9hLmJpbmQodGhpcyk6dGhpcy5tZi5iaW5kKHRoaXMpLGIuYmluZCh0aGlzKSl9ZnVuY3Rpb24gYigpe3RoaXMuTGModGhpcy5oYywibiBIb21hZFV0aWwudGVzdEFkQ2FsbCgpIGFkIGNhbGwgdG8gJyIrCmYrIicgd2FzIGJsb2NrZWQiKX1pZigodGhpcy5iYz10aGlzLkxkKSYmdGhpcy5iYy5sZW5ndGgpe3ZhciBkPXRoaXMuYmMuc2xpY2UoKSxmPSIiO2EuYmluZCh0aGlzKSgpfWVsc2UgdGhpcy5tZigpfSxxdTpmdW5jdGlvbihhLGIsZCl7ZnVuY3Rpb24gZigpe2MoKSYmYigpfWZ1bmN0aW9uIGMoKXtyZXR1cm4gZT8od2luZG93LmNsZWFyVGltZW91dChlKSwhMCk6ITF9dmFyIGU9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtmKCl9LDNFMyk7dGhpcy5MYShuZXcgeShhKSxmLGZ1bmN0aW9uKCl7YygpJiZkKCl9KX0sTmg6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7Zj1kLnNoaWZ0KCkucmVwbGFjZSgiW3JhbmRvbV0iLHRoaXMuRWIoKSk7dGhpcy5ydShmLDA8ZC5sZW5ndGg/YS5iaW5kKHRoaXMpOnRoaXMuTWguYmluZCh0aGlzKSxiLmJpbmQodGhpcykpfWZ1bmN0aW9uIGIoKXt0aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZENhbGxKUygpIGFkIGNhbGwgdG8gJyIrCmYrIicgd2FzIGJsb2NrZWQiKX1pZih0aGlzLmNjJiZ0aGlzLmNjLmxlbmd0aCl7dmFyIGQ9dGhpcy5jYy5zbGljZSgpLGY7YS5iaW5kKHRoaXMpKCl9ZWxzZSB0aGlzLk1oKCl9LHJ1OmZ1bmN0aW9uKGEsYixkKXtmdW5jdGlvbiBmKCl7ZSgpJiZiKCl9ZnVuY3Rpb24gYygpe2UoKSYmZCgpfWZ1bmN0aW9uIGUoKXtyZXR1cm4gZz8od2luZG93LmNsZWFyVGltZW91dChnKSwhMCk6ITF9dmFyIGc9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtmKCl9LDNFMyk7dHJ5e3dpbmRvdy5vbmVycm9yPWZ1bmN0aW9uKGIsZCl7ZD09YSYmZSgpJiZjKCl9O3ZhciBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoayk7ay5zZXRBdHRyaWJ1dGUoImFzeW5jIiwiYXN5bmMiKTtrLnNldEF0dHJpYnV0ZSgiZGVmZXIiLCJkZWZlciIpO2sub25sb2FkPWY7ay5vbmVycm9yPWM7ay5zcmM9YTtrLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwKYyl9Y2F0Y2gobCl7ZigpfX0sbWY6ZnVuY3Rpb24oKXt0aGlzLiRiPyh0aGlzLnBmKyssdGhpcy5MYShuZXcgeSh0aGlzLiRiKSx0aGlzLmp1LmJpbmQodGhpcyksZnVuY3Rpb24oKXt0aGlzLm5mKCJDQ0MiKX0uYmluZCh0aGlzKSkpOnRoaXMuS2goKX0sbmY6ZnVuY3Rpb24oYSl7dGhpcy5MYyh0aGlzLkRmLCJuIEhvbWFkVXRpbC50ZXN0M3JkUGFydHlDb29raWUoKSBjYW5ub3Qgc2V0IDNyZCBwYXJ0eSBjb29raWUgIithKX0sanU6ZnVuY3Rpb24oYSl7YT1hLnJlc3BvbnNlVGV4dDt2YXIgYj0hMTt0cnl7Yj1KU09OLnBhcnNlKGEpfWNhdGNoKGQpe31iJiZiLnN0YXR1cz8idHJpZ2dlci1zZXQiPT1iLnN0YXR1cz8zPnRoaXMucGY/dGhpcy5tZigpOnRoaXMubmYoIkJCQiIpOiJhbHJlYWR5LXNldCI9PWIuc3RhdHVzJiZ0aGlzLktoKCk6dGhpcy5uZigiQUFBIil9LEtoOmZ1bmN0aW9uKCl7dGhpcy5YPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLktiKSk7CnRoaXMuSWIoKTt0aGlzLmllKCl9LGJoOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PWFkZEV2ZW50TGlzdGVuZXIudG9TdHJpbmcoKS5pbmRleE9mKCJuYXRpdmUgY29kZSIpJiYtMT09YWRkRXZlbnRMaXN0ZW5lci50b1N0cmluZygpLmluZGV4T2YoImFkZEV2ZW50TGlzdGVuZXIiKX0sSWI6ZnVuY3Rpb24oKXt2YXIgYT0iMCIsYj0iMCI7dHJ5e2UuVGEoKSYmKGE9IjEiKX1jYXRjaChkKXthPTJ9dGhpcy5RYyYmKGI9IjEiKTtlLnRyYWNrKCJzdGF0c19oZF9tb2JpbGVfYWIiLGErIiIrYiwhMCk7IjEiPT09YiYmKGUuQmEoInQtb25saW5lLmRlIil8fGUuQmEoImdpZ2EuZGUiKXx8ZS5CYSgid2VsdC5kZSIpKSYmZS50cmFjaygic3RhdHNfaGRfYWJfaXNTdGV2ZSIsdGhpcy5iaCgpLCEwKTtkb2N1bWVudC5kaXNwYXRjaEV2ZW50KHRoaXMubmIodGhpcy5FZikpO3RoaXMuT2QmJiJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5PZCYmdGhpcy5PZCgpfSxybzpmdW5jdGlvbigpe2lmKHRoaXMudWYmJgp0aGlzLkRxKCkpe3ZhciBhPXRoaXMuZnEoKTthJiZhLmpvaW4mJmUudHJhY2soImNvbmZpZ19mYWlsZWQiLGEuam9pbigiXyIpLCEwKX19LFJoOmZ1bmN0aW9uKGEpe2F8fChhPSIiKTtpZigic3RyaW5nIiE9PXR5cGVvZiBhKXRyeXthPWEudG9TdHJpbmcoKX1jYXRjaChiKXthPSJjb3VsZF9ub3RfY29udmVydF90b19zdHJpbmcifWE9YS50cmltKCk7ZS50cmFjaygic3RhdHNfaGRfYWN0aXZhdGVkIixhLCEwKX0sTGE6ZnVuY3Rpb24oYSxiLGQsZixjLGcpe3RoaXMudGR8fCh0aGlzLnRkPTApO3RoaXMudGQrKzt0aGlzLnRkPnRoaXMuTGcmJiF0aGlzLk1nJiYodGhpcy5NZz0hMCxlLnRyYWNrKCJzdGF0c19oZF9yZXF1ZXN0Y291bnQiLHRoaXMuTGcsITApKTthPW5ldyBOYShhLGIsZCk7ZiYmKGEuZ2k9ITApO2MmJmUubXIoKSYmKGEueGc9ITApO2cmJihhLkpoPSEwKTtyZXR1cm4gYS5sb2FkKCl9LGVnOmZ1bmN0aW9uKCl7ZS5UYSgpfHxlLllhKCJodHRwOi8vZDM3OTk2NGF5bWV4MnguY2xvdWRmcm9udC5uZXQvY2hlY2sueG1sP2VtcHR5PXRydWUiLAoiaG9tYWRzdGF0aWN2YXN0Iix7aG9tYWRfaGFzaF9ndWVzc2VkOiJ0cnVlIn0sZnVuY3Rpb24oYSl7dmFyIGI9bnVsbCxkPW51bGwsZj0iIjt0cnl7KGI9YS5yZXNwb25zZVhNTCl8fChiPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEucmVzcG9uc2VUZXh0LCJ0ZXh0L3htbCIpKSxkPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkIilbMF19Y2F0Y2goYyl7dGhpcy5rYSgibWVkaWFmaWxlX25veG1sIik7cmV0dXJufWlmKGQpaWYoYT1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJNZWRpYUZpbGUiKSlpZihhWzBdJiYoYT1hWzBdKSxhKXtmPWEmJmEuY2hpbGROb2RlcyYmYS5jaGlsZE5vZGVzWzBdP2EuY2hpbGROb2Rlc1swXS5ub2RlVmFsdWU6IiI7dGhpcy5DYygpfHwoYT10aGlzLmxhKGYpLGY9YS5wcm90b2NvbCsiOi8vIithLmhvc3QpO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7ZS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXtlLm5ldHdvcmtTdGF0ZT09CmUuTkVUV09SS19OT19TT1VSQ0UmJnRoaXMua2EoIm1lZGlhZmlsZSIpfS5iaW5kKHRoaXMpKTtlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNvdXJjZSIpKTtlLnNldEF0dHJpYnV0ZSgic3JjIixmKX1lbHNlIHRoaXMua2EoIm1lZGlhZmlsZV9ub21lZGlhIik7ZWxzZSB0aGlzLmthKCJtZWRpYWZpbGVfbm9tZWRpYSIpO2Vsc2UgdGhpcy5rYSgibWVkaWFmaWxlX25vYWQiKX0uYmluZCh0aGlzKSxmdW5jdGlvbigpe3RoaXMua2EoIm1lZGlhZmlsZV94bWxyZXF1ZXN0Iil9LmJpbmQodGhpcyksdGhpcyl9LGl1OmZ1bmN0aW9uKCl7cmV0dXJuImFsbCI9PT10aGlzLmNpfSxxbzpmdW5jdGlvbigpe3RoaXMuemEoImh0dHA6Ly9kMzc5OTY0YXltZXgyeC5jbG91ZGZyb250Lm5ldC9jaGVjay54bWw/ZW1wdHk9dHJ1ZSIsITApO3ZhciBhPXRoaXMuemEoImh0dHA6Ly9kMzc5OTY0YXltZXgyeC5jbG91ZGZyb250Lm5ldC9jaGVjay54bWw/ZW1wdHk9dHJ1ZSIsITApOwphLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0iaG9tYWRzdGF0aWN2YXN0IjthLmRhdGEuaG9tYWRfaGFzaF9ndWVzc2VkPSJ0cnVlIjt0aGlzLkxhKGEsdGhpcy5UdS5iaW5kKHRoaXMpLHRoaXMuU3UuYmluZCh0aGlzKSl9LFR1OmZ1bmN0aW9uKGEpe3ZhciBiPW51bGwsZD1udWxsO3RyeXsoYj1hLnJlc3BvbnNlWE1MKXx8KGI9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYS5yZXNwb25zZVRleHQsInRleHQveG1sIikpLGQ9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWQiKVswXX1jYXRjaChmKXtyZXR1cm59ZHx8dGhpcy5BcCgpfSxTdTpmdW5jdGlvbigpe30sQXA6ZnVuY3Rpb24oKXtlLndjKGsuenApO2UudHJhY2soImZhaWwtaW5pdCIsIjEwMSIpO3RoaXMua2EoInZhc3RmaWxlTWFuaXB1bGF0aW9uIil9LGllOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0VuYWJsZWQmJnRoaXMuR2IubGVuZ3RoKWZvcih2YXIgYT0wO2E8dGhpcy5HYi5sZW5ndGg7YSsrKXt2YXIgYj0KdGhpcy5HYlthXTsicmVxdWVzdCI9PWIudHlwZSYmZS5ZYShiLnVybCxiLmFsaWFzLG51bGwsZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7fSx0aGlzKTtpZigiZXZhbCI9PWIudHlwZSl7dmFyIGQ9bmV3IEo7d2luZG93W2QuaWEoKV09dGhpcztlLllhKGIudXJsLGIuYWxpYXMsbnVsbCxmdW5jdGlvbihhKXtpZihhLnJlc3BvbnNlVGV4dCl0cnl7ZXZhbChhLnJlc3BvbnNlVGV4dCl9Y2F0Y2goYil7fX0sZnVuY3Rpb24oKXt9LHRoaXMpfX19LHl1OmZ1bmN0aW9uKCl7cmV0dXJuIDEwMCpNYXRoLnJhbmRvbSgpPHRoaXMucWZ9LHBxOmZ1bmN0aW9uKGEpe3JldHVybiBhW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSphLmxlbmd0aCldfSxFYjpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnBvdygxMCxhfHwxMCkqKC44OTk5OTk5OTkqTWF0aC5yYW5kb20oKSsuMSkpfSxiYTpmdW5jdGlvbihhKXthPWF8fDEwO2Zvcih2YXIgYj0iIixkPTA7ZDxhO2QrKyliKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCguNT4KTWF0aC5yYW5kb20oKT82NTo5NykrTWF0aC5mbG9vcigyNipNYXRoLnJhbmRvbSgpKSk7cmV0dXJuIGJ9LGRjOmZ1bmN0aW9uKGEpe3JldHVybiJUcnVlIj09YXx8InRydWUiPT1hfHwxPT1hfHwiMSI9PWF8fDE9PWF9LHZiOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iIixkLGYsYyxlLGcsayxsPTA7bDxhLmxlbmd0aDspZD1hLmNoYXJDb2RlQXQobCsrKSxmPWEuY2hhckNvZGVBdChsKyspLGM9YS5jaGFyQ29kZUF0KGwrKyksZT1kPj4yLGQ9KGQmMyk8PDR8Zj4+NCxnPShmJjE1KTw8MnxjPj42LGs9YyY2Myxpc05hTihmKT9nPWs9NjQ6aXNOYU4oYykmJihrPTY0KSxiPWIrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZSkrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZCkrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZykrCiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGspO3JldHVybiBifSxsYTpmdW5jdGlvbihhKXt2YXIgYj0ic291cmNlIHByb3RvY29sIGF1dGhvcml0eSB1c2VySW5mbyB1c2VyIHBhc3N3b3JkIGhvc3QgcG9ydCByZWxhdGl2ZSBwYXRoIGRpcmVjdG9yeSBmaWxlIHF1ZXJ5IGFuY2hvciIuc3BsaXQoIiAiKTthPS9eKD86KD8hW146QF0rOlteOkBcL10qQCkoW146XC8/Iy5dKyk6KT8oPzpcL1wvKT8oKD86KChbXjpAXSopKD86OihbXjpAXSopKT8pP0ApPyhbXjpcLz8jXSopKD86OihcZCopKT8pKCgoXC8oPzpbXj8jXSg/IVtePyNcL10qXC5bXj8jXC8uXSsoPzpbPyNdfCQpKSkqXC8/KT8oW14/I1wvXSopKSg/Olw/KFteI10qKSk/KD86IyguKikpPykvLmV4ZWMoYSk7Zm9yKHZhciBkPXt9LGY9MTQ7Zi0tOylkW2JbZl1dPWFbZl18fCIiO2QucXVlcnlLZXk9e307ZFtiWzEyXV0ucmVwbGFjZSgvKD86XnwmKShbXiY9XSopPT8oW14mXSopL2csCmZ1bmN0aW9uKGEsYixoKXtiJiYoZC5xdWVyeUtleVtiXT1oKX0pO3JldHVybiBkfSxFaDpmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEpe3ZhciBkPSIiLGgsYztmb3IoaD03OzA8PWg7aC0tKWM9YT4+PjQqaCYxNSxkKz1jLnRvU3RyaW5nKDE2KTtyZXR1cm4gZH1mdW5jdGlvbiBkKGEsYil7cmV0dXJuIGE8PGJ8YT4+PjMyLWJ9dmFyIGYsYyxlPUFycmF5KDgwKSxnPTE3MzI1ODQxOTMsaz00MDIzMjMzNDE3LGw9MjU2MjM4MzEwMixtPTI3MTczMzg3OCxyPTMyODUzNzc1MjAscCxxLHQsdSx2O3A9YS5sZW5ndGg7dmFyIHc9W107Zm9yKGY9MDtmPHAtMztmKz00KWM9YS5jaGFyQ29kZUF0KGYpPDwyNHxhLmNoYXJDb2RlQXQoZisxKTw8MTZ8YS5jaGFyQ29kZUF0KGYrMik8PDh8YS5jaGFyQ29kZUF0KGYrMyksdy5wdXNoKGMpO3N3aXRjaChwJTQpe2Nhc2UgMDpmPTIxNDc0ODM2NDg7YnJlYWs7Y2FzZSAxOmY9YS5jaGFyQ29kZUF0KHAtMSk8PDI0fDgzODg2MDg7YnJlYWs7Y2FzZSAyOmY9CmEuY2hhckNvZGVBdChwLTIpPDwyNHxhLmNoYXJDb2RlQXQocC0xKTw8MTZ8MzI3Njg7YnJlYWs7Y2FzZSAzOmY9YS5jaGFyQ29kZUF0KHAtMyk8PDI0fGEuY2hhckNvZGVBdChwLTIpPDwxNnxhLmNoYXJDb2RlQXQocC0xKTw8OHwxMjh9Zm9yKHcucHVzaChmKTsxNCE9dy5sZW5ndGglMTY7KXcucHVzaCgwKTt3LnB1c2gocD4+PjI5KTt3LnB1c2gocDw8MyY0Mjk0OTY3Mjk1KTtmb3IoYT0wO2E8dy5sZW5ndGg7YSs9MTYpe2ZvcihmPTA7MTY+ZjtmKyspZVtmXT13W2ErZl07Zm9yKGY9MTY7Nzk+PWY7ZisrKWVbZl09ZChlW2YtM11eZVtmLThdXmVbZi0xNF1eZVtmLTE2XSwxKTtjPWc7cD1rO3E9bDt0PW07dT1yO2ZvcihmPTA7MTk+PWY7ZisrKXY9ZChjLDUpKyhwJnF8fnAmdCkrdStlW2ZdKzE1MTg1MDAyNDkmNDI5NDk2NzI5NSx1PXQsdD1xLHE9ZChwLDMwKSxwPWMsYz12O2ZvcihmPTIwOzM5Pj1mO2YrKyl2PWQoYyw1KSsocF5xXnQpK3UrZVtmXSsxODU5Nzc1MzkzJjQyOTQ5NjcyOTUsCnU9dCx0PXEscT1kKHAsMzApLHA9YyxjPXY7Zm9yKGY9NDA7NTk+PWY7ZisrKXY9ZChjLDUpKyhwJnF8cCZ0fHEmdCkrdStlW2ZdKzI0MDA5NTk3MDgmNDI5NDk2NzI5NSx1PXQsdD1xLHE9ZChwLDMwKSxwPWMsYz12O2ZvcihmPTYwOzc5Pj1mO2YrKyl2PWQoYyw1KSsocF5xXnQpK3UrZVtmXSszMzk1NDY5NzgyJjQyOTQ5NjcyOTUsdT10LHQ9cSxxPWQocCwzMCkscD1jLGM9djtnPWcrYyY0Mjk0OTY3Mjk1O2s9aytwJjQyOTQ5NjcyOTU7bD1sK3EmNDI5NDk2NzI5NTttPW0rdCY0Mjk0OTY3Mjk1O3I9cit1JjQyOTQ5NjcyOTV9cmV0dXJuKGIoZykrYihrKStiKGwpK2IobSkrYihyKSkudG9Mb3dlckNhc2UoKX19fSkoYyk7dmFyIE9hPWMuZGt8fE9hLGw9bmV3IE9hO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLlB0PXRoaXMuYVs5XTt0aGlzLk5rPXRoaXMuYVszXTt0aGlzLmZ1PQp0aGlzLmFbM107dGhpcy5qPXRoaXMuYVs1XX1jLmxuPWI7Yi5wcm90b3R5cGU9e090OmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5QdDp0aGlzLk1rKGEpfSxNazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTms6dGhpcy5ldShhKX0sZXU6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5mdTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmo6YX19fSkoYyk7dmFyIFBhPWMubG58fFBhLHZjPW5ldyBQYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXZjLk90KDQpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoYSxiLGQpe3RoaXMuYj1hO2EuZi5PP3RoaXMuWmE9YS5mLk8oKTp0aGlzLlphPSIiO2EuZi5TZyYmYS5mLlNnKHtwYXVzZTp0aGlzLnpkLmJpbmQodGhpcykscmVzdW1lOnRoaXMuemguYmluZCh0aGlzKSwKbXV0ZTp0aGlzLk5lLmJpbmQodGhpcyksdW5tdXRlOnRoaXMuTHUuYmluZCh0aGlzKX0pO3RoaXMuY29udGFpbmVyPXRoaXMuYi5oYjt0aGlzLnBsYXllcj10aGlzLmIuZjt0aGlzLlBiPXRoaXMuWmM9ITE7dGhpcy5Mbj0xRTM7dGhpcy5lYT1udWxsO3RoaXMuTD1iO3RoaXMueWE9e307dGhpcy52aWRlbz17fTt0aGlzLkpkPXt9O2UubGIoIm5ld0JpZ0FkSWQiKTt0aGlzLmJvPWUuYmEoMTApO3RoaXMuamY9MDt0aGlzLlhjPSJXZXJidW5nIC0gW3RpbWVdIjtkJiZkLmFkbWVzc2FnZSYmKHRoaXMuWGM9ZC5hZG1lc3NhZ2UsImZ1bmN0aW9uIj09dHlwZW9mIGQuYWRtZXNzYWdlJiYoKGE9dGhpcy5iLmYpJiZ0aGlzLmIuZi51JiYoYT10aGlzLmIuZi51KCkpLHRoaXMuWGM9ZC5hZG1lc3NhZ2UoYSkpKTtkJiYidHJ1ZSI9PVN0cmluZyhkLmFkanVzdEFkVm9sdW1lVG9Db250ZW50UGxheWVyKSYmKHRoaXMua249ZC5hZGp1c3RBZFZvbHVtZVRvQ29udGVudFBsYXllcik7dGhpcy5RZT10aGlzLklkPQohMTt0aGlzLmdoPWQmJmQubWF4V3JhcHBlckRlcHRoP3BhcnNlSW50KGQubWF4V3JhcHBlckRlcHRoKToxNTt0aGlzLmM9e307dGhpcy5WYz0hMTt0aGlzLlVoPS0xO3RoaXMuY29udHJvbHM9dGhpcy5jYXB0aW9uPXRoaXMuVWI9ITE7dGhpcy5Rbz1lLmJhKDEwKTt0aGlzLkRiPWUuYmEoMTApO3RoaXMuQmI9ZS5iYSgxMCk7dGhpcy5HaD1lLmJhKDEwKTt0aGlzLmNvbmY9e307dGhpcy50Yz10aGlzLkNiPSExO3RoaXMub2U9bnVsbDt0aGlzLlJkPXRoaXMuSmI9dGhpcy56ZT10aGlzLlZlPXRoaXMua2U9dGhpcy5qZD10aGlzLmxmPXRoaXMucGI9dGhpcy5nYz10aGlzLm9oPXRoaXMueGM9dGhpcy56dT10aGlzLnNiPSExO3RoaXMubGM9W107dGhpcy5lYz17fTt0aGlzLnJmPSExO3RoaXMuV2I9e307dGhpcy5Hcz0yMDA7dGhpcy5BZj10aGlzLmZpPXRoaXMuZmU9dGhpcy5ZZT0hMX1jLllqPWI7Yi5wcm90b3R5cGU9e3p0OmZ1bmN0aW9uKGEpe3RoaXMuY29uZj1hfSxIYTpmdW5jdGlvbihhKXt2YXIgYj0KdGhpcy5jb25mW2FdO3RoaXMuY29uZlt0aGlzLlphXSYmdGhpcy5jb25mW3RoaXMuWmFdW2FdJiYoYj10aGlzLmNvbmZbdGhpcy5aYV1bYV0pO3JldHVybiBifSxTaDpmdW5jdGlvbigpeyJwcmVyb2xsIj09ZS5TYSYmZS50cmFjaygic3RhdHNfaGRfYWN0aXZlIiwiIiwhMCk7dGhpcy5MLlFjP2UudHJhY2soImFkY2FsbCIsIjEiKTplLnRyYWNrKCJhZGNhbGwiLCIwIik7ZS50cmFjaygic3RhdHNfaGRfYWRfY2FsbCIsIiIsITApO2UudihrLmJuLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LEllOmZ1bmN0aW9uKGEsYixkLGMpe3RoaXMuc2I9ZDt2YXIgbj0hMTtjJiZjLmhvbWFkX3JlcGxhY2VfdXJsc19pbl90YWdzJiYobj0hMCk7aWYodGhpcy5MLlgpdGhpcy5qZisrLGUubGIoIm5ld1NtYWxsQWRJZCIpLHRoaXMuTC5ybygpLGM9bC5nZXRDb25maWcoKSx0aGlzLkwuS2EmJnRoaXMuTC5pc0VuYWJsZWQ/KHRoaXMuU2goKSxuZXcgVCh0aGlzLGEsdGhpcy5naCwKe2ZpcnN0Q2FsbDohMCx1c2VBZFRhZ1BhcmFtZXRlcjohMCxrZWVwVVJMOmIsYml0cmF0ZTpjLlBhLGVtcHR5OiJyZXNwb25zZS5lbXB0eSI9PWEsdnBhaWQ6dGhpcy5MLk5jLGhvbWFkX3JlcGxhY2VfdXJsc19pbl90YWdzOm4sY29udGVudFZpZGVvOntkdXJhdGlvbjp0aGlzLmIuZi5nZXREdXJhdGlvbigpLGN1cnJlbnRUaW1lOnRoaXMuYi5mLmdldEN1cnJlbnRUaW1lKCl9fSkpOmI/KHRoaXMuU2goKSxuZXcgVCh0aGlzLGEsdGhpcy5naCx7Zmlyc3RDYWxsOiEwLHZwYWlkOnRoaXMuTC5OYyx1c2VBZFRhZ1BhcmFtZXRlcjohMCxiaXRyYXRlOmMuUGEsa2VlcFVSTDohMCxob21hZF9yZXBsYWNlX3VybHNfaW5fdGFnczpuLGNvbnRlbnRWaWRlbzp7ZHVyYXRpb246dGhpcy5iLmYuZ2V0RHVyYXRpb24oKSxjdXJyZW50VGltZTp0aGlzLmIuZi5nZXRDdXJyZW50VGltZSgpfX0pKTp0aGlzLlFhKCk7ZWxzZXt2YXIgZz10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtnLkllKGEsYixkKX0sCjUwKX19LFRlOmZ1bmN0aW9uKGEpe2EuV2EmJmUudHJhY2soInN0YXRzX2hkX3dyYXBwZXJzYyIsImFkIiwhMCk7InNwaWVnZWwuZGUiIT1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpfHx0aGlzLlFlfHwic3ZtcHJldmlldyIhPWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZikuYW5jaG9yPyh0aGlzLlJkPXRoaXMuSmI9dGhpcy54Yz0hMSx0aGlzLmM9YSx0aGlzLkx0KHRoaXMuYyksdGhpcy5IZyhhKSx0aGlzLmxjPXRoaXMuemcoYSksdGhpcy5lYz17fSx0aGlzLnJmPSExLHRoaXMuSG8oKSk6dGhpcy5oZCgpfSxIZzpmdW5jdGlvbihhKXthJiYoYS5vcmlnaW4mJihhPWEub3JpZ2luKSxhLnBhcmVudCYmYS5wYXJlbnQgaW5zdGFuY2VvZiBiJiYodGhpcy5KZD10aGlzLnNxKGEpKSx0aGlzLkhnKGEucGFyZW50KSl9LHpnOmZ1bmN0aW9uKGEpe3ZhciBjPVtdO2EmJihhLm9yaWdpbiYmKGE9YS5vcmlnaW4pLCFhfHwhYS5wYXJlbnR8fGEucGFyZW50IGluc3RhbmNlb2YgYnx8KGM9CnRoaXMuemcoYS5wYXJlbnQpKSxjLnB1c2godGhpcy4kcChhKSkpO3JldHVybiBjfSwkcDpmdW5jdGlvbihhKXt2YXIgYj0iIixkPVtdO2lmKGEmJmEuVSYmYS5VLmdldEF0dHJpYnV0ZSl7Yj1hLlUuZ2V0QXR0cmlidXRlKCJpZCIpO2E9YS5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJDcmVhdGl2ZSIpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWQucHVzaChhW2NdLmdldEF0dHJpYnV0ZSgiaWQiKSk7MT09ZC5sZW5ndGgmJihkPWRbMF0pfXJldHVybnthZElEOmIsY3JlYXRpdmVJRDpkfX0sc3E6ZnVuY3Rpb24oYSl7dmFyIGI9W10sZD1bXSxjPVtdLGU9W10sZz0iIjtpZihhLlUpe2I9YS5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJbXByZXNzaW9uIik7Yz1hLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkNyZWF0aXZlIik7YS5VLmdldEF0dHJpYnV0ZSgiaWQiKSYmKGc9YS5VLmdldEF0dHJpYnV0ZSgiaWQiKSxlLnB1c2goZykpO2EuVS5nZXRBdHRyaWJ1dGUoImFkSUQiKSYmKGc9CmEuVS5nZXRBdHRyaWJ1dGUoImFkSUQiKSxlLnB1c2goZykpO2Zvcih2YXIgaz0wO2s8Yy5sZW5ndGg7aysrKWNba10uZ2V0QXR0cmlidXRlKCJpZCIpJiYoZz1jW2tdLmdldEF0dHJpYnV0ZSgiaWQiKSxlLnB1c2goZykpLGNba10uZ2V0QXR0cmlidXRlKCJhZElEIikmJihnPWNba10uZ2V0QXR0cmlidXRlKCJhZElEIiksZS5wdXNoKGcpKTtmb3Ioaz0wO2s8Yi5sZW5ndGg7aysrKWQucHVzaChhLmliKGJba10pKX1yZXR1cm57aW1wcmVzc2lvbnM6ZCxhZElkczplLGFkSWQ6Z319LG9hOmZ1bmN0aW9uKGEpe2EuV2EmJmUudHJhY2soInN0YXRzX2hkX3dyYXBwZXJzYyIsIm5vYWQiLCEwKTt2YXIgYj0wLGQ9InN0YXRzX2hkX2FkX2Vycm9yIjthJiYoYS5lcnJvciYmYS5lcnJvci5kZXRhaWwmJmEuZXJyb3IuZGV0YWlsLmNvZGUmJihiPWEuZXJyb3IuZGV0YWlsLmNvZGUpLGEubWQmJmEubWQuZXJyb3ImJmEubWQuZXJyb3IuY29kZSYmKGI9YS5tZC5lcnJvci5jb2RlKSk7c3dpdGNoKGEuZXJyb3IuY29kZSl7Y2FzZSB3Lk9jLmNvZGU6Yj09CkYuVWQuY29kZT9lLnYoay5udix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpOihlLkplKCksYj09Ri5IZi5jb2RlJiZlLnYoay5jcyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKTtlLnYoay55cCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2VtcHR5IjticmVhaztjYXNlIHcuRmYuY29kZTplLnYoay5VdSx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2Vycm9yX3Zhc3Rsb2FkZmFpbGVkIjticmVhaztjYXNlIHcuSWYuY29kZTplLnRyYWNrKCJ3cmFwcGVybGltaXQiLCIxMDYiKTtlLnYoay51dix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2Vycm9yX3dyYXBwZXJsaW1pdCI7YnJlYWs7Y2FzZSB3LlZkLmNvZGU6ZS52KGsueHYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLAp0aGlzLkIoKSx0aGlzLkMoKSk7ZD0ic3RhdHNfaGRfYWRfZXJyb3JfeG1scGFyc2UiO2JyZWFrO2Nhc2Ugdy5UZC5jb2RlOmUudihrLmRzLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSksZS50cmFjaygibm9tZWRpYSIsIjEwMiIpLGQ9InN0YXRzX2hkX2FkX2Vycm9yX25vbWVkaWEiLHRoaXMudGN8fChlLnRyYWNrKCJub21lZGlhX25vZmxhc2giLCIxMDUiKSxkPSJzdGF0c19oZF9hZF9lcnJvcl9ub21lZGlhbm9mbGFzaCIpfSJzdGF0c19oZF9hZF9lcnJvciI9PWQmJmEuZXJyb3ImJmEuZXJyb3IueGEmJihkKz0iXyIrYS5lcnJvci54YSk7ZS50cmFjayhkLCIiLCEwKTt0aGlzLlFiKGEpO3RoaXMuUWEoKX0sUWI6ZnVuY3Rpb24oYSl7dmFyIGI9OTAwO2EmJmEuZXJyb3ImJmEuZXJyb3IuY29kZSYmKGI9YS5lcnJvci5jb2RlLDkwMTxiJiYoYj05MDApKTtmb3IoYj17IltFUlJPUkNPREVdIjpifTthLk9hLmxlbmd0aDspdHJ5e3ZhciBkPWEuT2EucG9wKCk7CnRoaXMuSGUoZC51cmwsZC50eXBlLGIpfWNhdGNoKGMpe319LEx0OmZ1bmN0aW9uKGEpe3RoaXMua2U9dGhpcy56ZT10aGlzLlZlPSExO3RoaXMueWE9dGhpcy5iLkc7dmFyIGI9OTk5OTt0aGlzLmNvbmYuekluZGV4JiYoYj10aGlzLmNvbmYuekluZGV4LTEpO3RoaXMueWEuekluZGV4PWI7Yj10aGlzLmIuRjt0cnl7dmFyIGQ9dGhpcy5iLmYuZ2V0UmF3UGxheWVyKCk7aWYoZCYmZC5lbnZ2YXJzKXRyeXtiPWQuZW52dmFycygpLnZpZGVvU2xvdCx0aGlzLlllPSEwfWNhdGNoKGMpe319Y2F0Y2goZSl7fWIub3c9ImF1dG8iO3RoaXMuY29uZlsidmlkZW8uc3R5bGUucG9zaXRpb24iXSYmKGIuc3R5bGUucG9zaXRpb249dGhpcy5jb25mWyJ2aWRlby5zdHlsZS5wb3NpdGlvbiJdKTt0aGlzLmNvbmZbInZpZGVvLnN0eWxlIl0mJihiLnN0eWxlPXRoaXMuY29uZlsidmlkZW8uc3R5bGUiXSk7aWYodGhpcy5jb25mWyJ2aWRlby5hdHRyaWJ1dGVzIl0pZm9yKHZhciBnIGluIHRoaXMuY29uZlsidmlkZW8uYXR0cmlidXRlcyJdKXRoaXMuY29uZlsidmlkZW8uYXR0cmlidXRlcyJdLmhhc093blByb3BlcnR5KGcpJiYKYi5zZXRBdHRyaWJ1dGUoZyx0aGlzLmNvbmZbInZpZGVvLmF0dHJpYnV0ZXMiXVtnXSk7dGhpcy5rbiYmdGhpcy5wbGF5ZXIucWUoKSYmKGIudm9sdW1lPXRoaXMucGxheWVyLnFlKCkvMTAwKTtmb3IoO2IuZmlyc3RDaGlsZDspYi5yZW1vdmVDaGlsZChiLmZpcnN0Q2hpbGQpO2ZvcihkPTA7ZDxhLk0ubGVuZ3RoO2QrKyliLmNhblBsYXlUeXBlKGEuTVtkXS50eXBlKSYmdGhpcy5lbihiLGEuTVtkXS51cmwrIiIsYS5NW2RdLnR5cGUpO3RoaXMuWWUmJmIubG9hZCgpO2lmKHRoaXMuT2goYikpe3RoaXMuaG4oYik7YT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdP2Euc3R5bGU9dGhpcy5jb25mWyJpbm5lcldhcnBwZXIuc3R5bGUiXTooYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUud2lkdGg9IjEwMCUiLGEuc3R5bGUuaGVpZ2h0PSIxMDAlIik7dGhpcy5lYT10aGlzLnlhLmFwcGVuZENoaWxkKGEpO3RyeXt0aGlzLlllPwp0aGlzLnZpZGVvPWI6dGhpcy52aWRlbz10aGlzLmVhLmFwcGVuZENoaWxkKGIpfWNhdGNoKGspe3RoaXMudmlkZW89Yn19ZWxzZSB0aGlzLmMuTW8oKT8oYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdP2Euc3R5bGU9dGhpcy5jb25mWyJpbm5lcldhcnBwZXIuc3R5bGUiXTphLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGhpcy5lYT10aGlzLnlhLmFwcGVuZENoaWxkKGEpLHRoaXMudmlkZW89dGhpcy5lYS5hcHBlbmRDaGlsZChiKSx0aGlzLkp0KCkpOnRoaXMuRGUoKT90aGlzLkRoKCk6dGhpcy5jLm9yaWdpbi5xZyh3LlRkKX0sSnQ6ZnVuY3Rpb24oKXt0aGlzLnBiPXRoaXMuZ2M9ITE7dGhpcy5iLmYudmEmJnRoaXMuYi5mLnZhKCkmJihlLnYoay5qZyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMucGI9ITApO2UuamUoKTt0aGlzLmMmJnRoaXMuYy5vcmlnaW4mJnRoaXMuYy5vcmlnaW4uc2EmJgplLmpuKHRoaXMuYy5vcmlnaW4uc2EpO2UuZWIoInNldFVwVnBhaWQiKTt2YXIgYT10aGlzLmIuRjt0aGlzLmIuRj1DLnBvcCgpO2EucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcy5iLkYsYSk7dGhpcy5iLnBoKCk7dGhpcy5iLkpjKCk7Zm9yKGE9dGhpcy5iLkc7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7YS5wYXJlbnR8fHRoaXMuYi5KYygpO3RoaXMuZWE9dGhpcy55YT10aGlzLmIuRzt0aGlzLndmKCJ2cGFpZCIpO2lmKHRoaXMucGIpe2lmKGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYikpYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbjt0aGlzLnRyYWNrKCJtdXRlIiwhMCk7ZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJjb250ZW50IiwhMCk7ZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKX10aGlzLkg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7dGhpcy5ILnNldEF0dHJpYnV0ZSgid2lkdGgiLAoiMTAwJSIpO3RoaXMuSC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjEwMCUiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJzY3JvbGxpbmciLCJubyIpO3RoaXMuSC5zZXRBdHRyaWJ1dGUoImFsbG93IiwiYXV0b3BsYXkiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJkZWxlZ2F0ZXN0aWNreXVzZXJhY3RpdmF0aW9uIiwibWVkaWEiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJzdHlsZSIsImJvcmRlcjogMCBub25lO291dGxpbmU6IG5vbmU7Iik7dGhpcy5iLkcuYXBwZW5kQ2hpbGQodGhpcy5IKTt0aGlzLkgub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGE9ITE7dGhpcy5iLmYudmEmJnRoaXMuYi5mLnZhKCkmJihhPSEwKTt2YXIgYj10aGlzLmMudXEoKSxjPXRoaXMuYy5BLk9yaWdpbmFsQWRQYXJhbWV0ZXJzLGc9e2hvbWFkOkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobC5nZXRDb25maWcoKSkpLHZwYWlkOnt1cmw6Yi51cmwsdmlld21vZGU6Im5vcm1hbCIsZGVzaXJlZEJpdHJhdGU6Yi5kZXNpcmVkQml0cmF0ZXx8CmIuYml0cmF0ZXx8NDAwLGFkUGFyYW1ldGVyczpjLGNyZWF0aXZlRGF0YTp7QWRQYXJhbWV0ZXJzOmN9LGNvbnRlbnRwbGF5ZXI6e3dpZHRoOnBhcnNlSW50KHRoaXMuYi5HLnN0eWxlLndpZHRoKSxoZWlnaHQ6cGFyc2VJbnQodGhpcy5iLkcuc3R5bGUuaGVpZ2h0KX19LGNvbnRlbnRQbGF5ZXI6e211dGVkOmF9fTtlLm1hKHRoaXMuSCwiY29uZmlnIixnKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDEwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwiY29uZmlnIixnKX0uYmluZCh0aGlzKSwyMDApO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksNTAwKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDcwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwKImNvbmZpZyIsZyl9LmJpbmQodGhpcyksMUUzKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDEyMDApO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksMTUwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwiY29uZmlnIixnKX0uYmluZCh0aGlzKSwyRTMpO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksNUUzKX0uYmluZCh0aGlzKTthPWUuJGYoImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9ob21hZC1nbG9iYWwtY29uZmlncy5zY2huZWV2b25tb3JnZW4uY29tL2lmcmFtZS5odG1sIix0aGlzLkwpO3RoaXMuSC5zcmM9YTtlLmJlKCJ2cGFpZGV2ZW50IixmdW5jdGlvbihhKXsiQWRTaXplQ2hhbmdlIiE9YS5kYXRhLm5hbWUmJiJBZFJlbWFpbmluZ1RpbWVDaGFuZ2UiIT0KWyJkYXRhIl0ubmFtZSYmdGhpcy5iLlRiKCEwKTtpZihhJiZhLmRhdGEmJmEuZGF0YS5uYW1lKXt0aGlzLmxjPWEuZGF0YS5vcmlnaW5hbGV2ZW50LmFkSURzOyJBZEVycm9yIj09YS5kYXRhLm5hbWUmJnRoaXMuYnYoYSk7aWYoIkFkSW1wcmVzc2lvbiI9PWEuZGF0YS5uYW1lJiYodGhpcy5jdigpLHRoaXMuYi5UYighMCksIXRoaXMuSmIpKXt2YXIgYj0yRTMsYz01MDt0aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uJiYodGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi5wZXJjZW50JiYoYz10aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnBlcmNlbnQpLHRoaXMuY29uZi52aWV3YWJsZUltcHJlc3Npb24udGltZU1TJiYoYj10aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnRpbWVNUykpO3RoaXMuSmI9e2VsOnRoaXMuSCxjYjpmdW5jdGlvbigpe3RoaXMuUmQ9ITA7ZS52KGsuYmksdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt0aGlzLnRyYWNrKCJ2aWV3YWJsZSIpfS5iaW5kKHRoaXMpLAp0aW1lTVM6YixwZXJjZW50OmMsc3RhcnRUaW1lOiExfTtlLkNlKHRoaXMuSmIpfSJBZFN0YXJ0ZWQiPT1hLmRhdGEubmFtZSYmKHRoaXMuYi5UYighMCksdGhpcy5ndigpKTsiQWRWaWRlb1N0YXJ0Ij09YS5kYXRhLm5hbWUmJih0aGlzLmIuVGIoITApLHRoaXMua3YoKSk7IkFkVmlkZW9GaXJzdFF1YXJ0aWxlIj09YS5kYXRhLm5hbWUmJnRoaXMuaXYoKTsiQWRWaWRlb01pZHBvaW50Ij09YS5kYXRhLm5hbWUmJnRoaXMuanYoKTsiQWRWaWRlb1RoaXJkUXVhcnRpbGUiPT1hLmRhdGEubmFtZSYmdGhpcy5sdigpOyJBZFZpZGVvQ29tcGxldGUiPT1hLmRhdGEubmFtZSYmdGhpcy5odigpOyJBZFN0b3BwZWQiPT1hLmRhdGEubmFtZSYmdGhpcy5kaSgpO2lmKCJBZENsaWNrVGhydSI9PWEuZGF0YS5uYW1lKXt2YXIgZz1hLmRhdGEuY2xpY2tUaHJ1VGFyZ2V0O2d8fChnPXRoaXMuYy5PYik7aWYoIWcpcmV0dXJuO3RoaXMudHJhY2soImNsaWNrdHJhY2tpbmciKTtlLnYoay5pZyx0aGlzLmMuQSwKdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPSJfdG9wIjt0cnl7dGhpcy5MLiRjJiYoYT0iX2JsYW5rIik7dmFyIGI9d2luZG93Lm9wZW4oIiIsYSk7Yi5kb2N1bWVudC5ib2R5LmlubmVySFRNTD0iPGRpdj48L2Rpdj4iO2IuZG9jdW1lbnQubG9jYXRpb24uaHJlZj1nfWNhdGNoKGQpe3dpbmRvdy5vcGVuKGcsYSl9fS5iaW5kKHRoaXMpLDUwMCl9IkFkU2tpcHBlZCI9PWEuZGF0YS5uYW1lJiZ0aGlzLmZ2KCk7IkFkUmVtYWluaW5nVGltZUNoYW5nZSI9PWEuZGF0YS5uYW1lJiZlLnYoay4kZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpOyJBZFBhdXNlZCI9PWEuZGF0YS5uYW1lJiZ0aGlzLmR2KCk7IkFkUGxheWluZyI9PWEuZGF0YS5uYW1lJiYodGhpcy5maSYmKHRoaXMuQWY9ITEsdGhpcy5ZYigpKSx0aGlzLmV2KCkpOyJBZFZvbHVtZUNoYW5nZSI9PWEuZGF0YS5uYW1lJiYoYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkJiKSwKMD09YS5kYXRhLm9yaWdpbmFsZXZlbnQudm9sdW1lPyh0aGlzLnBiPSEwLGImJihiLmlubmVySFRNTD10aGlzLmNvbmYudW5tdXRlQnV0dG9uKSx0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJ1c2VyIiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSk6KHRoaXMucGI9ITEsYiYmKGIuaW5uZXJIVE1MPXRoaXMuY29uZi5tdXRlQnV0dG9uKSx0aGlzLnRyYWNrKCJ1bm11dGUiLCEwKSxlLnRyYWNrKCJzdGF0c19oZF91bm11dGVkIiwidXNlciIsITApLGUudihrLnRmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpLGUudihrLiRkLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpfX0uYmluZCh0aGlzKSk7ZS5iZSgidnBhaWRjb250aW51ZWNvbnRlbnQiLGZ1bmN0aW9uKCl7dGhpcy5RYSgpfS5iaW5kKHRoaXMpKTtlLmJlKCJ2cGFpZGVycm9zIixmdW5jdGlvbigpe3RoaXMuUWEoKX0uYmluZCh0aGlzKSk7CnRoaXMuYi5ZZihmdW5jdGlvbihhKXtlLm1hKHRoaXMuSCwicmVzaXplIixhKX0uYmluZCh0aGlzKSl9LGR2OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy50cmFjaygicGF1c2UiKTtlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2EmJihhLmlubmVySFRNTD10aGlzLmNvbmYucGxheUJ1dHRvbik7dGhpcy5nYz0hMH0sZXY6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRiKTthJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uKTt0aGlzLnRyYWNrKCJyZXN1bWUiLCEwKTtlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuZ2M9ITF9LGd2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygiY3JlYXRpdmVWaWV3Iik7ZS52KGsuVWYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKX0sCmZ2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygic2tpcCIpO2UudihrLlRmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LGN2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygiaW1wcmVzc2lvbiIpO2UuZWIoImltcHJlc3Npb24iKTtlLnYoay5QZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxrdjpmdW5jdGlvbigpe3RoaXMudHJhY2soInN0YXJ0Iik7ZS5lYigic3RhcnQiKTtlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxpdjpmdW5jdGlvbigpe3RoaXMudHJhY2soImZpcnN0UXVhcnRpbGUiKTt0aGlzLnhjPSEwO2UuZWIoImZpcnN0UXVhcnRpbGUiKTtlLnYoay5OZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxqdjpmdW5jdGlvbigpe3RoaXMudHJhY2soIm1pZHBvaW50Iik7ZS5lYigibWlkcG9pbnQiKTtlLnYoay5SZix0aGlzLmMuQSx0aGlzLmIuZi51KCksCnRoaXMuQigpLHRoaXMuQygpKX0sbHY6ZnVuY3Rpb24oKXt0aGlzLnRyYWNrKCJ0aGlyZFF1YXJ0aWxlIik7ZS5lYigidGhpcmRRdWFydGlsZSIpO2UudihrLlZmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LGh2OmZ1bmN0aW9uKCl7dGhpcy5QZCgpO2UuZWIoImNvbXBsZXRlIil9LGRpOmZ1bmN0aW9uKGEpe2lmKHRoaXMuSCYmdGhpcy5ILnBhcmVudE5vZGUmJnRoaXMuSC5wYXJlbnROb2RlLnBhcmVudE5vZGUpe2UuZWIoImFkc3RvcHBlZCIpO3ZhciBiPXRoaXMuSC5wYXJlbnROb2RlO3RoaXMuSC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuSCk7Yi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpO2UuamUoKTt0aGlzLkg9ITE7dGhpcy5RYShhKX19LGJ2OmZ1bmN0aW9uKGEpe3ZhciBiPWEubWVzc2FnZXx8IiIsZD0vXGQrL2csYz1bXTshYiYmYS5kYXRhJiZhLmRhdGEub3JpZ2luYWxldmVudCYmYS5kYXRhLm9yaWdpbmFsZXZlbnQubXNnJiYoYj0KYS5kYXRhLm9yaWdpbmFsZXZlbnQubXNnLChjPWIubWF0Y2goZCkpP2Muam9pbiYmKGI9Yy5qb2luKCItIikpOmI9Yi5zdWJzdHJpbmcoMCwyMCkpO2UudHJhY2soInN0YXRzX3ZwX2Vycm9yaGFuZGxlciIsYiwhMCk7ZS5lYigiZXJyIixiKTtlLnYoay5tdix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuZGkoITApfSxlbjpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoYSxiKXtpZihiLkthJiZiLmlzRW5hYmxlZCYmIWIuQ2MoKSl7dmFyIGQ9Yi5sYShhKTtyZXR1cm4gZC5wcm90b2NvbCsiOi8vIitkLmhvc3R9cmV0dXJuIGF9aWYoYS5hcHBlbmRDaGlsZCl7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic291cmNlIik7Yy5zcmM9ZChiLHRoaXMuTCk7Yy5vbmVycm9yPXRoaXMuWXUuYmluZCh0aGlzKTthLmFwcGVuZENoaWxkKGMpfWVsc2UgYS5zZXRBdHRyaWJ1dGUoInNyYyIsZChiLHRoaXMuTCkpfSxPaDpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRFbGVtZW50c0J5VGFnTmFtZT8KMDxhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzb3VyY2UiKS5sZW5ndGg6ITB9LGhuOmZ1bmN0aW9uKGEpe2EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZHN0YXJ0Iix0aGlzLmFpLmJpbmQodGhpcykpO2EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkbWV0YWRhdGEiLHRoaXMueGYuYmluZCh0aGlzKSk7YS5hZGRFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIix0aGlzLnlmLmJpbmQodGhpcykpO2EuYWRkRXZlbnRMaXN0ZW5lcigiZW5kZWQiLHRoaXMuUGQuYmluZCh0aGlzKSk7YS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5RZC5iaW5kKHRoaXMpKX0sRWQ6ZnVuY3Rpb24oYSl7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2Fkc3RhcnQiLHRoaXMuYWkuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsdGhpcy54Zi5iaW5kKHRoaXMpKTthLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLHRoaXMueWYuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlbmRlZCIsCnRoaXMuUGQuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5RZC5iaW5kKHRoaXMpKX0sYWk6ZnVuY3Rpb24oYSl7dGhpcy5QYnx8KHRoaXMudmlkZW8uY29udHJvbHM9ITEsd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLlBifHx0aGlzLnhmKGEpfS5iaW5kKHRoaXMpLHRoaXMuTG4pKX0seGY6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWmMmJnRoaXMuT2godGhpcy52aWRlbykmJiF0aGlzLkNiJiYhdGhpcy5QYil7dGhpcy5aYz0hMDt0cnl7aWYoIWUuVGEoKSYmYS50YXJnZXQmJjU+PWEudGFyZ2V0LmR1cmF0aW9uJiY1PE1hdGguYWJzKHRoaXMuYy5kdXJhdGlvbi1hLnRhcmdldC5kdXJhdGlvbikpe3RoaXMuQ2J8fCh0aGlzLkNiPSEwLHRoaXMuRWQodGhpcy52aWRlbyksZS50cmFjaygic3RhdHNfaGRfbm9vcHZpZGVvIiwiIiwhMCksdGhpcy5MLnBnfHx0aGlzLkwua2EoInZpZGVvLW5vb3AiKSk7dGhpcy5RYSgpO3JldHVybn19Y2F0Y2goYil7ZS50cmFjaygic3RhdHNfaGRfbm9vcHZpZGVvX2ZhaWwiLAoiIiwhMCl9dGhpcy5YdSgpO3RoaXMudmlkZW8uY29udHJvbHM9ITE7dGhpcy5iLkpjKCk7dGhpcy5aaCgpO3RoaXMud2YoKTt0aGlzLmFnKCk7dGhpcy5iLnBoKCk7dGhpcy52aWRlby5wbGF5JiZ0aGlzLmtmKCl9fSxrZjpmdW5jdGlvbigpe2lmKCF0aGlzLmpkKWlmKHRoaXMuY29uZi5wcmVBZElmcmFtZVVybCl7dmFyIGE9dGhpcy5jb25mLnByZUFkSWZyYW1lVXJsOyJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoYT1hKGUuU2EpKTtpZigic3RyaW5nIj09dHlwZW9mIGEmJmEpe3RoaXMuc2Q9W107Zm9yKHZhciBiPXRoaXMuYi5HLGQ9MDtkPGIuY2hpbGRyZW4ubGVuZ3RoO2QrKyl0aGlzLnNkLnB1c2goYi5jaGlsZHJlbltkXSksYi5jaGlsZHJlbltkXS5zdHlsZS5kaXNwbGF5PSJub25lIjtkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9KTtkLnNldEF0dHJpYnV0ZSgic3JjIiwKYSk7ZC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Quc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7ZC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAwIG5vbmU7b3V0bGluZTogbm9uZTsiKTtiLmFwcGVuZENoaWxkKGQpO3ZhciBjPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihhKXtpZigiY29udGludWUiPT1hLmRhdGEpe3RoaXMuVGMoKTthPU1hdGgucm91bmQoKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWMpLzFFMyk7dmFyIGI9IiI7MTxhJiYoYj0iZ3QxIik7NTxhJiYoYj0iZ3Q1Iik7MTA8YSYmKGI9Imd0MTAiKTsyMDxhJiYoYj0iZ3QyMCIpO2UudHJhY2soInN0YXRzX2hkX3ByZUlmcmFtZUNsb3NlZCIsYiwhMCl9fS5iaW5kKHRoaXMpKTtlLnRyYWNrKCJzdGF0c19oZF9wcmVJZnJhbWVPcGVuZWQiLCIiLCEwKX1lbHNlIHRoaXMuVGMoKX1lbHNlIHRoaXMuVGMoKX0sVGM6ZnVuY3Rpb24oYSl7aWYodGhpcy5zZClmb3IodmFyIGI9CjA7Yjx0aGlzLnNkLmxlbmd0aDtiKyspdGhpcy5zZFtiXS5zdHlsZS5kaXNwbGF5PSJibG9jayI7aWYoKGI9dGhpcy52aWRlby5wbGF5KCkpJiZiWyJjYXRjaCJdKWJbImNhdGNoIl0oZnVuY3Rpb24oYil7dGhpcy5qZHx8KGE/KCJzdHJpbmciIT10eXBlb2YgYiYmYiYmYi5tZXNzYWdlJiYoYj1iLm1lc3NhZ2UpLHRoaXMuUWEoKSxlLnRyYWNrKCJzdGF0c19oZF9wbGF5UHJvbWlzZUZhaWxlZCIsYiwhMCkpOih0aGlzLk5lKCEwKSx0aGlzLlRjKCEwKSkpfS5iaW5kKHRoaXMpKTtiLnRoZW4oZnVuY3Rpb24oKXt0aGlzLnplJiZlLnRyYWNrKCJzdGF0c19oZF9wbGF5UHJvbWlzZVJlc29sdmVkQWZ0ZXJJbXByZXNzaW9uIiwiIiwhMCk7dGhpcy5WZT0hMH0uYmluZCh0aGlzKSk7ZGE/KHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLlhiLmJpbmQodGhpcykpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuWGIuYmluZCh0aGlzKSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLAp0aGlzLlhiLmJpbmQodGhpcykpKTpLPWZ1bmN0aW9uKCl7dGhpcy5WY3x8KHRoaXMudmlkZW8ubG9hZCgpLHRoaXMua2YoKSl9LmJpbmQodGhpcyk7dGhpcy5zZSgpLkNoKHRoaXMpfSxQZDpmdW5jdGlvbigpe3RoaXMuTC52YyYmIXRoaXMuQ2ImJmUudHJhY2soInF1YXJ0aWxlIiwiY29tcGxldGUiLCEwKTt0aGlzLnRyYWNrKCJjb21wbGV0ZSIpO2UudihrLiRtLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSk7dGhpcy5RYSgpfSxRYTpmdW5jdGlvbihhKXtpZighdGhpcy5rZSlpZih0aGlzLmtlPSEwLHRoaXMuUmR8fChlLnYoay5mcyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMudHJhY2soIm5vdHZpZXdhYmxlIikpLHRoaXMuYy5yYnx8dGhpcy5jLmpjKXtlLmxiKCJuZXdTbWFsbEFkSWQiKTt0aGlzLmpmKys7dGhpcy5QYj10aGlzLlpjPSExO3RyeXt0aGlzLkVkKHRoaXMudmlkZW8pfWNhdGNoKGIpe310cnl7dGhpcy5lYS5yZW1vdmVDaGlsZCh0aGlzLnZpZGVvKX1jYXRjaChkKXt9dHJ5e3RoaXMueWEucmVtb3ZlQ2hpbGQodGhpcy5lYSl9Y2F0Y2goYyl7fXRoaXMuY2FwdGlvbj0KdGhpcy5jb250cm9scz1udWxsO3RoaXMuSWQ9ITE7dHJ5e3RoaXMuYi5XaCgpfWNhdGNoKGcpe310aGlzLmxmPSEwO3RoaXMuYi53ZSgpO3RoaXMuVWI9ITE7dGhpcy5zZSgpLnloKCk7dGhpcy5jLnJiJiZ0aGlzLmMub3JpZ2luLk9lKCk7dGhpcy5jLmpjJiYoYT90aGlzLmMub3JpZ2luLmtoKCk6dGhpcy5oZCgpKX1lbHNlIHRoaXMuaGQoKX0sWXU6ZnVuY3Rpb24oYSl7YS50YXJnZXQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChhLnRhcmdldCk7dGhpcy52aWRlby5uZXR3b3JrU3RhdGUmJnRoaXMudmlkZW8ubmV0d29ya1N0YXRlPT10aGlzLnZpZGVvLk5FVFdPUktfTk9fU09VUkNFJiYodGhpcy5FZCh0aGlzLnZpZGVvKSx0aGlzLkRlKCk/dGhpcy5EaCgpOnRoaXMuUWQoYSkpfSxRZDpmdW5jdGlvbihhKXt0aGlzLlBiPSEwO2EmJmEudGFyZ2V0JiZhLnRhcmdldC5lcnJvciYmYS50YXJnZXQuZXJyb3IuY29kZXx8dGhpcy52aWRlby5uZXR3b3JrU3RhdGU9PXRoaXMudmlkZW8uTkVUV09SS19OT19TT1VSQ0UmJgoodGhpcy5EZSgpP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50Y3x8dGhpcy5MLmVnKCl9LmJpbmQodGhpcyksMUUzKTp0aGlzLkwuZWcoKSk7dGhpcy5jLm9yaWdpbi5xZyh3LlRkKX0seWY6ZnVuY3Rpb24oKXtpZih0aGlzLnp1KXRoaXMuUWEoKTtlbHNle3RoaXMuVWI9ITA7dGhpcy5iLmYuVmEmJiF0aGlzLmxmJiZ0aGlzLmIuZi5WYSgpJiZlLnYoay5mZCx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3ZhciBhPU1hdGguZmxvb3IodGhpcy52aWRlby5jdXJyZW50VGltZSk7dGhpcy5DdShhKTtpZighdGhpcy5KYil7dmFyIGI9MkUzLGQ9NTA7dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbiYmKHRoaXMuY29uZi52aWV3YWJsZUltcHJlc3Npb24ucGVyY2VudCYmKGQ9dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi5wZXJjZW50KSx0aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnRpbWVNUyYmKGI9dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi50aW1lTVMpKTsKdGhpcy5KYj17ZWw6dGhpcy52aWRlbyxjYjpmdW5jdGlvbigpe3RoaXMuUmQ9ITA7ZS52KGsuYmksdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt0aGlzLnRyYWNrKCJ2aWV3YWJsZSIpfS5iaW5kKHRoaXMpLHRpbWVNUzpiLHBlcmNlbnQ6ZCxzdGFydFRpbWU6ITF9O2UuQ2UodGhpcy5KYil9ZD0iIjt0aGlzLmMuaGYmJihiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuR2gpKSYmKGQ9dGhpcy5jLmhmLWEsMDxkP2Q9dGhpcy5jb25mLnNraXBhYmxlQnV0dG9uLnJlcGxhY2UoIlt0aW1lXSIsZCk6KGQ9dGhpcy5jb25mLnNraXBCdXR0b24ucmVwbGFjZSgiW3RpbWVdIixkKSx0aGlzLklkfHwodGhpcy5JZD0hMCxiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3RoaXMudHJhY2soInNraXAiKTtlLnYoay5UZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuYy5yYj8odGhpcy5QYj10aGlzLlpjPSExLAp0aGlzLkVkKHRoaXMudmlkZW8pLHRoaXMuZWEucmVtb3ZlQ2hpbGQodGhpcy52aWRlbyksdGhpcy55YS5yZW1vdmVDaGlsZCh0aGlzLmVhKSx0aGlzLmNhcHRpb249dGhpcy5jb250cm9scz1udWxsLHRoaXMuSWQ9ITEsdGhpcy5iLldoKCksdGhpcy5jLm9yaWdpbi5PZSgpKTp0aGlzLlFhKCl9LmJpbmQodGhpcykpKSksYi5pbm5lckhUTUw9ZCk7dGhpcy5jYXB0aW9uJiYodGhpcy5jYXB0aW9uLmlubmVySFRNTD10aGlzLlhjLnJlcGxhY2UoIlt0aW1lXSIsZS55Zyh0aGlzLmMuZHVyYXRpb24tYSkpKTt0aGlzLlZjPSEwO3RoaXMudmlkZW8uY29udHJvbHM9ITF9fSxEaDpmdW5jdGlvbigpe3RoaXMudGM9ITA7dGhpcy55YT10aGlzLmIuRzt0aGlzLnlhLmlubmVySFRNTD0iIjt2YXIgYT05OTk5O3RoaXMuY29uZi56SW5kZXgmJihhPXRoaXMuY29uZi56SW5kZXgtMSk7dGhpcy55YS56SW5kZXg9YTthPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9iamVjdCIpO2Euc2V0QXR0cmlidXRlKCJkYXRhIiwKImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9ob21hZC1nbG9iYWwtY29uZmlncy5zY2huZWV2b25tb3JnZW4uY29tL2hvbWFkanNmbGFzaGRpc3BsYXkuc3dmIik7YS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Euc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7YS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpO2Euc2V0QXR0cmlidXRlKCJpZCIsImRpc3BtYWluIik7YS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJkaXNwbWFpbiIpO2Euc2V0QXR0cmlidXRlKCJzdHlsZSIsInZpc2liaWxpdHk6IHZpc2libGUiKTthLnNldEF0dHJpYnV0ZSgiRmxhc2hWYXJzIiwiZGF0YT0iK3RoaXMubnEoKSk7YS5pbm5lckhUTUw9JzxwYXJhbSBuYW1lPSJhbGxvd3NjcmlwdGFjY2VzcyIgdmFsdWU9ImFsd2F5cyI+PHBhcmFtIG5hbWU9ImFsbG93RnVsbFNjcmVlbiIgdmFsdWU9InRydWUiPjxwYXJhbSBuYW1lPSJiZ0NvbG9yIiB2YWx1ZT0iIzAwMDAwMCI+PHBhcmFtIG5hbWU9Im9wYXF1ZSIgdmFsdWU9ImRpcmVjdCI+JzsKdGhpcy5iLkY9YTt2YXIgYj10aGlzLmIuRixkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RoaXMuY29uZlsiaW5uZXJXYXJwcGVyLnN0eWxlIl0/ZC5zdHlsZT10aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdOmQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIjt0aGlzLmVhPXRoaXMueWEuYXBwZW5kQ2hpbGQoZCk7dGhpcy5iLkpjKCk7dGhpcy52aWRlbz10aGlzLmVhLmFwcGVuZENoaWxkKGIpO2I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO2Iuc3R5bGUudG9wPSIwcHgiO2Iuc3R5bGUud2lkdGg9dGhpcy55YS5vZmZzZXRXaWR0aCsicHgiO2Iuc3R5bGUuaGVpZ2h0PXRoaXMueWEub2Zmc2V0SGVpZ2h0KyJweCI7Yi5zdHlsZS5jdXJzb3I9InBvaW50ZXIiO2Iub25jbGljaz10aGlzLiRoLmJpbmQodGhpcyk7dGhpcy5lYS5hcHBlbmRDaGlsZChiKTt0aGlzLlpoKCk7dGhpcy53ZigpO3RoaXMub2U9c2V0SW50ZXJ2YWwodGhpcy5wby5iaW5kKHRoaXMpLAoxMDApO3JldHVybiBhfSxucTpmdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxiPXt9LGQ9MDtkPHRoaXMuYy5NLmxlbmd0aDtkKyspe3ZhciBjPWI9dGhpcy5jLk1bZF0sZTtlPWIudXJsO3ZhciBnPXRoaXMuTDtnLkthJiZnLmlzRW5hYmxlZCYmIWcuQ2MoKSYmKGU9Zy5sYShlKSxlPWUucHJvdG9jb2wrIjovLyIrZS5ob3N0KTtjLnVybD1lO2EucHVzaChiKX1yZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHttZWRpYWZpbGVzOmF9KSl9LHBvOmZ1bmN0aW9uKCl7dHJ5e3ZhciBhPXRoaXMudmlkZW8uZ2V0Rmxhc2hEaXNwbGF5U3RhdHVzKCk7dGhpcy52aWRlby5wYXVzZWQ9YS5wYXVzZWQ7YS50aW1lPj10aGlzLmMuZHVyYXRpb24/KGNsZWFySW50ZXJ2YWwodGhpcy5vZSksdGhpcy5QZCgpKTooMDxhLnRpbWUmJih0aGlzLnZpZGVvLmN1cnJlbnRUaW1lPWEudGltZSx0aGlzLnlmKCkpLCJlcnJvciI9PWEuc3RhdHVzJiYoY2xlYXJJbnRlcnZhbCh0aGlzLm9lKSwKdGhpcy5RZCgpKSx0aGlzLnZpZGVvLm11dGVkP3RoaXMudmlkZW8ubXV0ZSgpOnRoaXMudmlkZW8udW5tdXRlKCkpfWNhdGNoKGIpe319LFRoOmZ1bmN0aW9uKCl7dGhpcy5vaHx8KHRoaXMub2g9ITAsdGhpcy54Y3x8ZS50cmFjaygic3RhdHNfaGRfY2xvc2VkQmVmb3JlMXN0UXVhcnRpbGUiLCIiLCEwKSl9LEN1OmZ1bmN0aW9uKGEpe2UudihrLiRkLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSk7YT09dGhpcy5VaHx8dGhpcy5DYnx8KDA9PWEmJih0aGlzLnNiJiYod2luZG93LmNsZWFyVGltZW91dCh0aGlzLnNiKSx0aGlzLnNiPSExKSx0aGlzLlZlfHwoZS50cmFjaygic3RhdHNfaGRfaW1wcmVzc2lvbldpdGhPdXRSZXNvbHZlZFByb21pc2UiLCIiLCEwKSx0aGlzLnplPSEwKSx0aGlzLnRyYWNrKCJpbXByZXNzaW9uIiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsZnVuY3Rpb24oKXt0aGlzLlRoKCl9LmJpbmQodGhpcykpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLApmdW5jdGlvbigpe3RoaXMuVGgoKX0uYmluZCh0aGlzKSksdGhpcy50YyYmZS50cmFjaygic3RhdHNfaGRfYWRfaW1wcmVzc2lvbl9mbGFzaCIsIiIsITApLHRoaXMuQ2J8fGUudHJhY2soInN0YXRzX2hkX2FkX2ltcHJlc3Npb24iLCIiLCEwKSxlLlRhKCkmJmUudHJhY2soInN0YXRzX2hkX2FkX2ltcHJlc3Npb25fbW9iaWxlIiwiIiwhMCksdGhpcy50cmFjaygiY3JlYXRpdmVWaWV3IiksdGhpcy50cmFjaygic3RhcnQiKSxlLnYoay5QZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLGUudihrLlVmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSksdGhpcy50YyYmZS50cmFjaygicGxheWVkV2l0aEZsYXNoIiwiMTAzIikpLGE9PU1hdGguZmxvb3IodGhpcy5jLmR1cmF0aW9uLzQpJiYodGhpcy5MLnZjJiYoZS50cmFjaygicXVhcnRpbGUiLCJmaXJzdFF1YXJ0aWxlIiwhMCksdGhpcy54Yz0hMCksdGhpcy50cmFjaygiZmlyc3RRdWFydGlsZSIpLAplLnYoay5OZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKSxhPT1NYXRoLmZsb29yKHRoaXMuYy5kdXJhdGlvbi8yKSYmKHRoaXMuTC52YyYmZS50cmFjaygicXVhcnRpbGUiLCJtaWRwb2ludCIsITApLHRoaXMudHJhY2soIm1pZHBvaW50IiksZS52KGsuUmYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSksYT09TWF0aC5mbG9vcigzKnRoaXMuYy5kdXJhdGlvbi80KSYmKHRoaXMuTC52YyYmZS50cmFjaygicXVhcnRpbGUiLCJ0aGlyZFF1YXJ0aWxlIiwhMCksdGhpcy50cmFjaygidGhpcmRRdWFydGlsZSIpLGUudihrLlZmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpLHRoaXMuVWg9YSl9LHRyYWNrOmZ1bmN0aW9uKGEsYil7aWYoIXRoaXMuQ2Ipe3RyeXtpZih0aGlzLmVjW2FdPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHRoaXMuZWMuaW1wcmVzc2lvbiYmdGhpcy5lYy5jb21wbGV0ZSYmIXRoaXMucmYpe3RoaXMucmY9CiEwO3ZhciBkPXRoaXMuZWMuY29tcGxldGUtdGhpcy5lYy5pbXByZXNzaW9uLGM9InN0YXRzX2hkX3RpbWVkaWZmIjt0aGlzLkgmJihjKz0idnBhaWQiKTs1RTM+ZCYmKDEwPmQmJihkPTEwKSwwPmQmJihkPSJuZWdhdGl2ZSIpLGUudHJhY2soYyxkLCEwKSl9fWNhdGNoKGcpe31pZigibXV0ZSI9PWF8fCJ1bm11dGUiPT1hfHwicGF1c2UiPT1hfHwicmVzdW1lIj09YSl7aWYodGhpc1thKyJIYXNCZWVuVHJhY2tlZCJdKXJldHVybjt0aGlzW2ErIkhhc0JlZW5UcmFja2VkIl09ITB9ZD1bXTt0cnl7ZD10aGlzLnRxKHRoaXMuYy5PYSxhKX1jYXRjaChsKXtkPVtdfWZvcig7ZC5sZW5ndGg7KXRyeXt2YXIgbT1kLnBvcCgpOyJpbXByZXNzaW9uIj09YSYmKHRoaXMuZmU9ITApOyJpbXByZXNzaW9uIj09YSYmdGhpcy5KZC5pbXByZXNzaW9ucyYmZS5rcihtLnVybCx0aGlzLkpkLmltcHJlc3Npb25zKT90aGlzLkhlKG0udXJsLG0udHlwZSx7fSxmdW5jdGlvbihhKXt0cnl7dmFyIGI9YS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1VcmwiKTsKZS52KGsuYW4sdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHthZElkOnRoaXMuSmQuYWRJZCxpbXByZXNzaW9uVVJMOmJ9LHRoaXMuQygpKX1jYXRjaChkKXt9fS5iaW5kKHRoaXMpKTp0aGlzLkhlKG0udXJsLG0udHlwZSl9Y2F0Y2gocSl7fWlmKCFiKXRyeXt0aGlzLmMuT2E9dGhpcy5Ubyh0aGlzLmMuT2EsYSl9Y2F0Y2gocil7fX19LEhlOmZ1bmN0aW9uKGEsYixkLGMsZSl7YSYmInN0cmluZyI9PXR5cGVvZiBhJiZhLmxlbmd0aCYmKGI9dGhpcy5MLnphKGEpLGQmJmIuZG4oZCksY3x8KGM9dGhpcy5vZyksZXx8KGU9dGhpcy5vZyksdGhpcy5mbihhKSx0aGlzLkwuTGEoYixmdW5jdGlvbigpe3RoaXMueGgoYSk7YygpfS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7dGhpcy54aChhKTtlKCl9LmJpbmQodGhpcyksITEsITApKX0sZm46ZnVuY3Rpb24oYSl7dGhpcy5XYlthXT0ib3BlbiJ9LHhoOmZ1bmN0aW9uKGEpe3RoaXMuV2JbYV09ImNsb3NlZCJ9LEhvOmZ1bmN0aW9uKCl7dGhpcy5XYj0Ke319LCR0OmZ1bmN0aW9uKCl7dmFyIGE9MCxiO2ZvcihiIGluIHRoaXMuV2IpdGhpcy5XYi5oYXNPd25Qcm9wZXJ0eShiKSYmIm9wZW4iPT10aGlzLldiW2JdJiZhKys7cmV0dXJuIGF9LHRxOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhLnR5cGU9PWJ9KX0sVG86ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEudHlwZSE9PWJ9KX0sWHU6ZnVuY3Rpb24oKXt0aGlzLnZpZGVvLnN0eWxlJiYodGhpcy52aWRlby5zdHlsZS5jdXJzb3I9InBvaW50ZXIiLHRoaXMudmlkZW8ub25jbGljaz10aGlzLiRoLmJpbmQodGhpcykpfSwkaDpmdW5jdGlvbigpe2UuVGEoKSYmIm5vbmUiPT09dGhpcy5jb250cm9scy5zdHlsZS5kaXNwbGF5P3RoaXMuWWIoKTp0aGlzLmMuT2ImJihlLnYoay5pZyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMudHJhY2soImNsaWNrdHJhY2tpbmciKSwKIXRoaXMueGMmJmUuVGEoKSYmZS50cmFjaygic3RhdHNfaGRfY2xpY2t0aHJvdWdoQmVmb3JlMXN0UXVhcnRpbGUiLGUuYXEoKSwhMCksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT0iX3RvcCI7dGhpcy5MLiRjJiYoYT0iX2JsYW5rIik7dHJ5e3ZhciBiPXdpbmRvdy5vcGVuKCIiLGEpO2IuZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9IjxkaXY+PC9kaXY+IjtiLmRvY3VtZW50LmxvY2F0aW9uLmhyZWY9dGhpcy5jLk9ifWNhdGNoKGQpe3dpbmRvdy5vcGVuKHRoaXMuYy5PYixhKX19LmJpbmQodGhpcyksNTAwKSl9LFpoOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY2FwdGlvbil7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5jb25mWyJjYXB0aW9uLnN0eWxlIl0/YS5zdHlsZT10aGlzLmNvbmZbImNhcHRpb24uc3R5bGUiXTooYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUud2lkdGg9IjEwMCUiLGEuc3R5bGUuYmFja2dyb3VuZD0ibGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLDAsMCwwLjA1KSAwJSxyZ2JhKDAsMCwwLDAuMjUpIDEwMCUpIiwKYS5zdHlsZS5wYWRkaW5nPSIycHgiLGEuc3R5bGUuZm9udEZhbWlseT0iQXJpYWwsIFZlcmRhbmEiLGEuc3R5bGUuZm9udFNpemU9IjlweCIsYS5zdHlsZS5jb2xvcj0iI2ZmZmZmZiIsYS5zdHlsZS50ZXh0QWxpZ249ImNlbnRlciIsYS5zdHlsZS5ib3R0b209IjBweCIsYS5zdHlsZS5ib3hTaXppbmc9ImJvcmRlci1ib3giKTthLmlubmVySFRNTD10aGlzLlhjLnJlcGxhY2UoIlt0aW1lXSIsZS55ZygwKSk7dmFyIGI9dGhpcy5jb25mWyJjYXB0aW9uLmR1cmF0aW9uIl07dGhpcy5MLmFkJiYoYj10aGlzLkwuYWQpO2ImJndpbmRvdy5zZXRUaW1lb3V0KHRoaXMueGIuYmluZCh0aGlzKSwxRTMqYik7dGhpcy5jYXB0aW9uPXRoaXMuZWEuYXBwZW5kQ2hpbGQoYSl9fSx4YjpmdW5jdGlvbigpeyh0aGlzLmNvbmZbImNhcHRpb24uZHVyYXRpb24iXXx8dGhpcy5MLmFkKSYmdGhpcy5jYXB0aW9uJiZ0aGlzLmNhcHRpb24uc3R5bGUmJih0aGlzLmNhcHRpb24uc3R5bGUuZGlzcGxheT0ibm9uZSIpfSwKR2Q6ZnVuY3Rpb24oKXsodGhpcy5jb25mWyJjYXB0aW9uLmR1cmF0aW9uIl18fHRoaXMuTC5hZCkmJnRoaXMuY2FwdGlvbiYmdGhpcy5jYXB0aW9uLnN0eWxlJiYodGhpcy5jYXB0aW9uLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9LHdmOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmNvbnRyb2xzKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuaWQ9dGhpcy5Rbzt0aGlzLmNvbmZbImNvbnRyb2xzLnN0eWxlIl0/ZC5zdHlsZT10aGlzLmNvbmZbImNvbnRyb2xzLnN0eWxlIl06KGQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixkLnN0eWxlLndpZHRoPSIxMDAlIixkLnN0eWxlLmZvbnRGYW1pbHk9IkFyaWFsLCBWZXJkYW5hIixkLnN0eWxlLmNvbG9yPSIjZmZmZmZmIixkLnN0eWxlLnRleHRBbGlnbj0iY2VudGVyIixkLnN0eWxlLmJvdHRvbT0iMHB4IixkLnN0eWxlLnpJbmRleD0iMTAwMDAiKTtkLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsCmZ1bmN0aW9uKCl7dGhpcy5ZYigpO3RoaXMuR2QoKX0uYmluZCh0aGlzKSk7ZC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt0aGlzLnliKCk7dGhpcy54YigpfS5iaW5kKHRoaXMpKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbInBsYXlQYXVzZS5zdHlsZSJdP2Muc3R5bGU9dGhpcy5jb25mWyJwbGF5UGF1c2Uuc3R5bGUiXTooYy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZmxvYXQ6bGVmdCIpLGMuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixjLnN0eWxlWyJmbG9hdCJdPSJsZWZ0IixjLnN0eWxlLmN1cnNvcj0icG9pbnRlciIpO2MuaWQ9dGhpcy5EYjtjLmlubmVySFRNTD10aGlzLmNvbmYucGF1c2VCdXR0b247InZwYWlkIj09YT8oYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5RaC5iaW5kKHRoaXMpKSxiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLlFoLmJpbmQodGhpcykpKTooYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsCnRoaXMuUGguYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5QaC5iaW5kKHRoaXMpKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7dGhpcy5ZYigpO3RoaXMuR2QoKX0uYmluZCh0aGlzKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt0aGlzLnliKCk7dGhpcy54YigpfS5iaW5kKHRoaXMpKTt2YXIgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbIm11dGUuc3R5bGUiXT9nLnN0eWxlPXRoaXMuY29uZlsibXV0ZS5zdHlsZSJdOihnLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJmbG9hdDpyaWdodCIpLGcuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixnLnN0eWxlWyJmbG9hdCJdPSJyaWdodCIsZy5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTtnLmlkPXRoaXMuQmI7Zy5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b247InZwYWlkIj09YT9nLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwKdGhpcy5CdS5iaW5kKHRoaXMpKTpnLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLkF1LmJpbmQodGhpcykpO2cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe3RoaXMuWWIoKTt0aGlzLkdkKCl9LmJpbmQodGhpcykpO2cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7dGhpcy55YigpO3RoaXMueGIoKX0uYmluZCh0aGlzKSk7dmFyIGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5jb25mWyJza2lwLnN0eWxlIl0/bC5zdHlsZT10aGlzLmNvbmZbInNraXAuc3R5bGUiXToobC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwicG9zaXRpb246YWJzb2x1dGU7dG9wOi01MHB4O3JpZ2h0OjBweCIpLGwuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixsLnN0eWxlLnRvcD0iLTUwcHgiLGwuc3R5bGUucmlnaHQ9IjBweCIsbC5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTtsLmlkPXRoaXMuR2g7bC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLApmdW5jdGlvbigpe3ZhciBhPWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpO2EmJmFbMF0mJihhWzBdLnN0eWxlLm9wYWNpdHk9MSl9KTtsLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IixmdW5jdGlvbigpe3ZhciBhPWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpO2EmJmFbMF0mJihhWzBdLnN0eWxlLm9wYWNpdHk9LjYpfSk7bC5pbm5lckhUTUw9IiI7ZC5hcHBlbmRDaGlsZChjKTt0aGlzLmMuaGYmJmQuYXBwZW5kQ2hpbGQobCk7ZC5hcHBlbmRDaGlsZChnKTtkLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2UuVGEoKXx8KHRoaXMuZWEuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe3RoaXMuWWIoKTt0aGlzLkdkKCl9LmJpbmQodGhpcykpLHRoaXMuZWEuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7dGhpcy55YigpO3RoaXMueGIoKX0uYmluZCh0aGlzKSkpO3RoaXMuY29udHJvbHM9dGhpcy5lYS5hcHBlbmRDaGlsZChkKTsKdGhpcy5jb25mWyJyZXN1bWVDb250cm9sLnN0eWxlIl0/Yi5zdHlsZT10aGlzLmNvbmZbInJlc3VtZUNvbnRyb2wuc3R5bGUiXTooYi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGIuc3R5bGUud2lkdGg9IjEwMCUiLGIuc3R5bGUuZm9udEZhbWlseT0iQXJpYWwsIFZlcmRhbmEiLGIuc3R5bGUuY29sb3I9IiNmZmZmZmYiLGIuc3R5bGUudGV4dEFsaWduPSJjZW50ZXIiLGIuc3R5bGUuYm90dG9tPSIwcHgiLGIuc3R5bGUuekluZGV4PSIxMDAwMCIsYi5zdHlsZS5kaXNwbGF5PSJub25lIixkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpLGQub25lcnJvcj1mdW5jdGlvbigpe3RoaXMud2EmJih0aGlzLndhLnN0eWxlLmJhY2tncm91bmQ9InVybCgnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9iaWdwbGF5MTkwNjA2LnBuZycpIG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIil9LmJpbmQodGhpcyksZC5zcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSGdBQUFCNENBWUFBQUE1WkRiU0FBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeWhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVOaTFqTVRRMUlEYzVMakUyTXpRNU9Td2dNakF4T0M4d09DOHhNeTB4TmpvME1Eb3lNaUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01Ua2dLRTFoWTJsdWRHOXphQ2tpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2T0Rnd01VWTVOa1kzUmpsQ01URkZPVGt3UmpnNVJUZ3pSRFU0T0RRME1qVWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZPRGd3TVVZNU56QTNSamxDTVRGRk9Ua3dSamc1UlRnelJEVTRPRFEwTWpVaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzRPREF4UmprMlJEZEdPVUl4TVVVNU9UQkdPRGxGT0RORU5UZzRORFF5TlNJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvNE9EQXhSamsyUlRkR09VSXhNVVU1T1RCR09EbEZPRE5FTlRnNE5EUXlOU0l2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHZWN29SSUFBQXlyU1VSQlZIamE3RjBKYkZUWEZiMkRiY0JBS1FHTXpXNldRRnBTS2lyV1FnZ3BVSUhiaEpLMHFnMUdrQWdvUXFsRTFRcXpTRWhJN0dEUzRyS0pGZ3pZMkdyQllJc0NqVkFOaENXaHhSVENXb1BManNHQU1hRUdZd3k5NTgzNzFqRE1qR2ZHZitiL1AvOGQ2V2p3T0JuL2Q4KzhlOSs5YjNQMDd0MmI5SVRENGZENXM3ZjNkRUEwZjI0YmZ1M0tiTXVNWStMbk41ak5tQTBsWHpDcm1OWE1TbVk1OHk2empIbWJXZkx5NVV2OC9GenZCK1RQcmZNOVQvOU52WXhDMXNWYlRIdzdCekM3NDk5c0hJamF0SjZmK3o4cDl0Zk1ZdVpYek5QTUMxWTBrcFVFUnE4Y3hoekJITXpzR2FLLzAxUXkwZTM5aTh3anpQM01BN0szSzRIcmlRVG0rOHlmTWQ5anhocjRMRDBsUDJFK1lSWXk4NWtGekZLekd0QmgwaGljeEp6QS9JRFp4T1Jmd2tvcGNoYnpiMmFMd1ExTVpDajB6c25NSW1tb1pBdUlTL0laOGF5NzViTlBOdGpUbUU1Z0dHTW1ScS9NRGN3K0ZoNzQ5WkZ0S0pGdGlyVzd3SjlLWXl5VjhUWlNrQ0RiVkNMYmFEdUJrNlE3eTRnd1lUMEpuU0hibW1TSFVUUWFuTTREaVhGa0wvU1I0NHB0ek4rR2M5UWR6aDQ4aVhtT2FUZHhYVEZPMm1CU0pBbjhMZVpXNWlaeWxnM3RqamVrTGJaSzIxamFSUTltZDV6TnI1MlZycThobGZtT2ZEMXN4Ujc4Sy9uZ1NsenZnRzIra0xheWxNQ2ZNZGNwL2Z6R09ta3pTd2k4blRsRGFSWXdaa2pibVRZR1J6SDNjOHdkcHJRS0doK1JjNlpxT0xQR1REMFlFK25IeURtZHAxQS92Q3R0MlZDWEhsemYyUXVIdzRHZWkzblN2a29iM2RCUDJuUWc2MU5qZEE4dVZPS0dCSDJsYlEyTndYbjhEWHRIYVJFeXdMWjV6QStONk1HL1o0NVZHb1FjWTZXdGd4djV0bW5USnBpNGkyVXJpNVR0dzRhQnpKdnNMWXZDNGFLL3ozL296OHJtWVFjV0VweGduZ3lsaThiUS9lL0sxb1poYjZEcFU2QUNZejR6WHRuWk1NUkxEVUlpY0FvNUt5MEt4dUlqcVlXdUFuK2J1Vm5aMWpUWUxEWFJUV0I4WUl5eXEya1E0MitIODBkZzdDZ1lvMnhxT295UjJ0UmI0STFHdGlJcUtvb2VQWHBFang4L3BnWU5HaWhaQTlRbUtpNHV6dGZ2c2RJZzFjZ1dWRlZWVWRldVhlbjU4K2RVWEZ4TUxWcTBFRUxydmNYRG9taEJ6aFdhSjRMcHdaZ2xXbVowQzY1ZXZVb1RKMDZrL1B4OEdqVnFGRjI2ZElsdTNib2xSQTdSUG1PcllRblRFWXpBdjJFMk4vcnBhMnBxcUtLaWdoSVRFeWt2TDQrMmJ0MUszYnAxbzNQbnp0SERodytGQzFlOTJQc0tHbTh1R3NKam9YWmpvNS8rd1lNSE5HTEVDQm80Y0tENHVWZXZYcFNhbWtyTm1qV2preWRQMHVYTGw4Vy9HelpzU0M5ZXZMQ3J5RERPY3VaTGYzdnd4LzdtV1VZZ05qYVcwdExTcUxDd2tLWk9uVXJsNWVYQ2RTTXUyM1FnQnEwbUJlS2kwNnpRcXM2ZE85UHExYXRwOSs3ZE5IcjBhTkdiYlJ5ZjAvd1ZlQ2p6VFN1MWJOQ2dRYlJqeHc3YXVIR2ppTTluejU2MVkzeCtVMnIzcXNCd2EyNzgxTU43aHRKZmpCOC9uZzRkT2tSTGxpd1I0cDQ1YzRhZVBuMWFtMWJaZ0s5cDU5NkRNV3EyOUNxTnhvMGIwOHlaTStuZ3dZTTBiZG8wdW52M3JwM2k4MWozek1lOXhUOG5heCt0VkF1a1ZXdldyS0c5ZS9mUzhPSERSWkhFQnZFNVdtcm8xVVVubTlYOUJJc2hRNGFJUWRqbXpadHI0ek5HM1ZwdmprQTNuZUxOUldOYjQvQkkvV29qUGg4NWNvUVdMRmhBMGRIUlFtZ3RQa2NZM3BQRmo5ZGM5SS9KWEtmdTZBNFVRK2JPblNzR1l0T25UNmQ3OSs2SitJd0NTUVFKSGVYYVVkMEZ0Z1VRbjVFLzc5bXpKMUx6NTFHZUJIN1hicFVCeE9kZHUzWlJWbGFXbUxHS29QcjJqOXdGeGdtdDNjaW1TRTVPcHNPSEQ5T2lSWXNvSmlhR3pwOC9MNllwTGV5MmEvWFVXakNBYkE3VXQyZlBuaTN5NXlsVHBvajRYRkpTWXVYOGVZQ3J3RDhnaGRyNHZHN2RPcEZhalJ3NTBzcnh1WTlySHZ5MldmTTZvNllBaHc0ZFNnVUZCYUsrcmNWbkxYKzJTRDc4dHBZSDQydlpVL1ZkejVnd1lZS0l6NHNYTHhhREx3aU4rR3lCZ1JnMGRVRGdkc3lPU2tyZjhYbldyRmtpUG1QK3VheXN6QXIxYldqYURpNDZrUmx0ZHBkakJxRFV1WDc5ZXRxM2IxOXRmZnZtelp1MXNkbGtOb09taVZvUFZnZ3dmMGFSWk11V0xXSlFkdUhDQlpFL203QTN0OE1UeFNuSmdnUFdoaDAvZnB6bXo1OHY2dHNRMm1UeE9RNEN0MVJTQlk5R2pSclJ2SG56UkgwYjg4OWFmZHNrOGJrbFluQXJGWHQxS0IxeEtyVjI3VnJodXJFSzFDVHh1UlcrWXMxVlA5UTNmNGJJMmRuWllsQjI4ZUpGSSt2YnpTRndJeVdML2hnM2JweVlmMTY0Y0tHb2J5TStQM3YyTE54Q040TEFhbHRvaU5Da1NST2FNMmVPS0pSTW5qeFp2SWRGQm1GRURBUitvYVFJTFpCS2JkaXdRU3cydUgvL3Z0aU9FeTVna1ZhVmtpQzBRSy9GQW9QdDI3Zlg3bzRNRTZvaDhETWxRZWlRbTV0THk1Y3ZwNktpSXNLWlpLMWF0UkpiWWNPRUtwU3pucGpkU0ZiY0M2eE5VR0JFM2JScFUrclJvNGRvUjNWMWRUZ2Y0eHYwNEllcW4rbUhhOWV1MGRLbFM4VXkzY3JLU3BFZm84cGwwTFJuQlFRdVU3TFVIMGlCVnF4WUlZb2ROMjdjb0E0ZE9naGlRR1hndHRaN0VQaU9rcWQrd0tiMDlQUjBPblhxRkxWdTNWcTRZNGdhenRHeUY1UWlCdDlTRWdVZloxSEl3UFFoY3Q3dTNidUw5MDBncklaYjZNRlh5SGxmZmJTU3pEOWN1WEpGREtBd1hZZ1VxRXVYTGtiR1dXK0FwbGNoNmsyTURjaTUxRktoamppN2N1VktXclZxRmQyK2ZWdkVXUFJjZytPc04xeUh0bHJHL1I4bG4yOWc4Z0RuaEdCcExZUkduTVZVb1luY3NUc3VJc1BVTHVVNFN5N2JIVlFlN0RtZnhkNWp4Rms4VHhpTEZjRUNtdGJHM1JPcWo3NEtuTStseGRrblQ1NkllcklKNDZ3dm5IQVYrQ3NscVJNWU5DSE9vbmFNQmUvdDI3YzNjNXoxaGVPdUFwZXcyN2xNTnQ2ZkJHemJ0azFVb1U2ZlBrMHRXN1lVN2hpaVdzQWR1NlBFNFhCY0ZnSzd4TGVEZGhYNDZOR2pJcDlGbk1YQUNTc3hZQmNURDZEcXdnRk5WOWZjOTNQbUozWVM5dnIxNnlMT2J0cTBTYmhtbkx0bHNUanJEWjlyLzNEdHdYZ1RYMW5UN2NuUWV4UU5sN3RzMlRMS3lNaWcwdEpTU2toSUVETStKaWt2MWhjMXJnSzd6anlYa3c1WHFaa2RPVGs1MUxkdlg3RzZBcU5qdUdPa1B4QTJRbzRvTHBSYXZ1YWlnVnptaUVnVTFyVnVqRVZ3S0MrS3I3djFleXg1MEpDOENmeFhjdDVHSFRGMWFlU3pPRmtuTXpOVHVPWk9uVHBGU3B6MUdIMmtobDRGZnNUY3lmeUYxVnVxemMraWJuem56cDNhT0d2QmZEWVE3Sklha3FjWXJPR1BWbThsNnNiOSt2VVRjUmFqWTljNEcrSEljSC9Ea3lzK3hDd21pNTA0Q3h3N2RreTRZK1N6aUxOWUxtUHhmRFlRRkV2dDZoUVlXTXI4azFWYWhuVlFPQ0ZIcXh0SGVKejFCby8zYTNpNzRqMlRtVTRtUHZVZHdGWk5iWDRXK1d4OGZEeTFiZHMyVXZMWlFGREIzT1RwRncxOEpNc0xUSjBMNU9aUy8vNzl4ZFlRYmZWaWhPV3pnV0MrMU14dmdZSFAzRWRrUnNIVjFXSkRWMUpTRXFXa3BJZ0R5NURQWW1MQVpqM1dGVmoyN1BXR2NGLzVMaXcyVStiRmhxSmp4NDVpTkR4anhneHhyQkVXaitNOUc4WlpUNWhGSG01YjBlREFnS1FPL0plWmFOVFR3LzNpVGdaczJzS3NENjRCd2pVNk51NnhycmhhbHpiK0NJenpoLzloVkF2UVN6R0FBakNJUW85VjE5clZBb2VPK3B3LzhHZWJHejRnMzZnV29MeUl4ZVNnVFFkUTNwQlBma3dPK2J1UGNTS3pXdG5VTklBV2svenlnSDcyaUFvcDhqWmxXMU5nRXZtNWFUQ1FuY2c1ekR4bFc4T1JGMGhIQzNTcmVRcXB6V3BHNG83VXdQOUJhb0IvNEJtNzlOSDhXcVJzYlFpU0hBNUhRQ2N5UkRWdkh2QXhXY2hac0NQeGZXWHZzR0lxT2EvOHBWQUxUTElINDU2bGdjcnVZY0VmbUl1QytSL3JjOXdMYnAzZXFXd2ZjdXdrSHpkOGgxSmc0RVBtRjBxRGtPR3d0REVaSlRDQVV1YS9sQmE2QTV2SGh0WDNRL1FRR0ZYL3djeC9LazEwQTJ6NVEvSXl4eHR1Z1VYNnhCeEV6djFOQ3ZYRFFXbExYUTZvQzNZVTdRbWNJci9NNU5mdk1uc3BuWUxDWDVnLzVWeFh0eG1WVUJ5YStFdHlydWRTQ0F6cDBuYTZJbFNuWXY1T0p1WUsvbUdxdEpudUNPVVdsUTNzc3I4bTUxNlp6a3BEajhDS2pHUjJ5VitHNmcrRStseGJQUGozbU5sS3k5ZVFMVzN6WlNqL1NEZ09MdjZHbWNyOG1GeTJOZG9ZNWRJV3FkSTJaSFdCTldUSzBYV09qY1hOa1RiSUROY2YxRE5OOGdlUE9TN3ZJR2ZsNnp2TXRqWVI5dDlNWE5xd2hPUHRZL2RmdWw5YnErYzF0a2JkM0lScEw5eFovR3R5VGo5R0trcGxHL3RRRUZOOVZoWllBN2FxNG1TZnRBZ1R1bFMycVJzWnZCM1hnUU0xOVlMN0FqNVBDL3A4TFBLTDVkK041OWZwOGh0dlJaeGtybVVYbThXdkhxOUs4T1IrUSttaXpTU3c2KzkrSWtlWkh6Q2JtRnpVU21ZQk0wdHp3NzRFVWdLL2lnUXA4aGh5VGt2R21rUlU5RTV0UTBDQmUzaFJBdnN2c0NzdzRoNUd6bE9BTUQwWjdtdnBjVHp2RWVaKzVnSG03VUJFVkFKVHdBZWV2Y1hzVGM1MVlUaExIMVdoTmpxNGRMamN1MHlVV1MrUnM5SjBtbm5CYjZNcWdYVVIyQjNSVXVDdXNyZmo0dXQ0Wmd0bU0zSmV3cW5kMDRpdEg3anhEVGtwZGdoZ3ZYR1o3SlVsVXVDZ1R5QTFrOEQvRjJBQUU4YkJqOGQ0ZEM0QUFBQUFTVVZPUks1Q1lJST0iLApiLnN0eWxlLmJhY2tncm91bmQ9InVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFIZ0FBQUI0Q0FZQUFBQTVaRGJTQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5aHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU5pMWpNVFExSURjNUxqRTJNelE1T1N3Z01qQXhPQzh3T0M4eE15MHhOam8wTURveU1pQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTkRJREl3TVRrZ0tFMWhZMmx1ZEc5emFDa2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZPRGd3TVVZNU5rWTNSamxDTVRGRk9Ua3dSamc1UlRnelJEVTRPRFEwTWpVaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk9EZ3dNVVk1TnpBM1JqbENNVEZGT1Rrd1JqZzVSVGd6UkRVNE9EUTBNalVpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvNE9EQXhSamsyUkRkR09VSXhNVVU1T1RCR09EbEZPRE5FTlRnNE5EUXlOU0lnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG80T0RBeFJqazJSVGRHT1VJeE1VVTVPVEJHT0RsRk9ETkVOVGc0TkRReU5TSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QdlY3b1JJQUFBeXJTVVJCVkhqYTdGMEpiRlRYRmIyRGJjQkFLUUdNelc2V1FGcFNLaXJXUWdncFVJSGJoSkswcWcxR2tBZ29RcWxFMVFxelNFaEk3R0RTNHJLSkZnelkyR3JCWUlzQ2pWQU5oQ1doeFJUQ1dvUExqc0dBTWFFR1l3eTk1ODM3MWpETWpHZkdmK2IvUC84ZDZXandPQm4vZDgrOGU5KzliM1AwN3QyYjlJVEQ0ZkQ1czdmM2RFQTBmMjRiZnUzS2JNdU1ZK0xuTjVqTm1BMGxYekNybU5YTVNtWTU4eTZ6akhtYldmTHk1VXY4L0Z6dkIrVFByZk05VC85TnZZeEMxc1ZiVEh3N0J6Qzc0OTlzSElqYXRKNmYrejhwOXRmTVl1Wlh6TlBNQzFZMGtwVUVScThjeGh6QkhNenNHYUsvMDFReTBlMzlpOHdqelAzTUE3SzNLNEhyaVFUbSs4eWZNZDlqeGhyNExEMGxQMkUrWVJZeTg1a0Z6Rkt6R3RCaDBoaWN4SnpBL0lEWnhPUmZ3a29wY2hiemIyYUx3UTFNWkNqMHpzbk1JbW1vWkF1SVMvSVo4YXk3NWJOUE50alRtRTVnR0dNbVJxL01EY3crRmg3NDlaRnRLSkZ0aXJXN3dKOUtZeXlWOFRaU2tDRGJWQ0xiYUR1Qms2UTd5NGd3WVQwSm5TSGJtbVNIVVRRYW5NNERpWEZrTC9TUjQ0cHR6TitHYzlRZHpoNDhpWG1PYVRkeFhURk8ybUJTSkFuOExlWlc1aVp5bGczdGpqZWtMYlpLMjFqYVJROW1kNXpOcjUyVnJxOGhsZm1PZkQxc3hSNzhLL25nU2x6dmdHMitrTGF5bE1DZk1kY3AvZnpHT21relN3aThuVGxEYVJZd1pramJtVFlHUnpIM2M4d2RwclFLR2grUmM2WnFPTFBHVEQwWUUrbkh5RG1kcDFBL3ZDdHQyVkNYSGx6ZjJRdUh3NEdlaTNuU3Zrb2IzZEJQMm5RZzYxTmpkQTh1Vk9LR0JIMmxiUTJOd1huOERYdEhhUkV5d0xaNXpBK042TUcvWjQ1VkdvUWNZNld0Z3h2NXRtblRKcGk0aTJVcmk1VHR3NGFCekp2c0xZdkM0YUsvejMvb3o4cm1ZUWNXRXB4Z25neWxpOGJRL2UvSzFvWmhiNkRwVTZBQ1l6NHpYdG5aTU1STERVSWljQW81S3kwS3h1SWpxWVd1QW4rYnVWbloxalRZTERYUlRXQjhZSXl5cTJrUTQyK0g4MGRnN0NnWW8yeHFPb3lSMnRSYjRJMUd0aUlxS29vZVBYcEVqeDgvcGdZTkdpaFpBOVFtS2k0dXp0ZnZzZElnMWNnV1ZGVlZVZGV1WGVuNTgrZFVYRnhNTFZxMEVFTHJ2Y1hEb21oQnpoV2FKNExwd1pnbFdtWjBDNjVldlVvVEowNmsvUHg4R2pWcUZGMjZkSWx1M2JvbFJBN1JQbU9yWVFuVEVZekF2MkUyTi9ycGEycHFxS0tpZ2hJVEV5a3ZMNCsyYnQxSzNicDFvM1BuenRIRGh3K0ZDMWU5MlBzS0dtOHVHc0pqb1haam81Lyt3WU1ITkdMRUNCbzRjS0Q0dVZldlhwU2Fta3JObWpXamt5ZFAwdVhMbDhXL0d6WnNTQzlldkxDcnlERE9jdVpMZjN2d3gvN21XVVlnTmphVzB0TFNxTEN3a0taT25Vcmw1ZVhDZFNNdTIzUWdCcTBtQmVLaTA2elFxczZkTzlQcTFhdHA5KzdkTkhyMGFOR2JiUnlmMC93VmVDanpUU3UxYk5DZ1FiUmp4dzdhdUhHamlNOW56NTYxWTN4K1UycjNxc0J3YTI3ODFNTjdodEpmakI4L25nNGRPa1JMbGl3UjRwNDVjNGFlUG4xYW0xYlpnSzlwNTk2RE1XcTI5Q3FOeG8wYjA4eVpNK25nd1lNMGJkbzB1bnYzcnAzaTgxajN6TWU5eFQ4bmF4K3RWQXVrVld2V3JLRzllL2ZTOE9IRFJaSEVCdkU1V21ybzFVVW5tOVg5QklzaFE0YUlRZGptelp0cjR6TkczVnB2amtBM25lTE5SV05iNC9CSS9Xb2pQaDg1Y29RV0xGaEEwZEhSUW1ndFBrY1kzcFBGajlkYzlJL0pYS2Z1NkE0VVErYk9uU3NHWXRPblQ2ZDc5KzZKK0l3Q1NRUUpIZVhhVWQwRnRnVVFuNUUvNzltekoxTHo1MUdlQkg3WGJwVUJ4T2RkdTNaUlZsYVdtTEdLb1ByMmo5d0Z4Z210M2NpbVNFNU9wc09IRDlPaVJZc29KaWFHenA4L0w2WXBMZXkyYS9YVVdqQ0FiQTdVdDJmUG5pM3k1eWxUcG9qNFhGSlNZdVg4ZVlDcndEOGdoZHI0dkc3ZE9wRmFqUnc1MHNyeHVZOXJIdnkyV2ZNNm82WUFodzRkU2dVRkJhSytyY1ZuTFgrMlNENzh0cFlINDJ2WlUvVmR6NWd3WVlLSXo0c1hMeGFETHdpTitHeUJnUmcwZFVEZ2RzeU9Ta3JmOFhuV3JGa2lQbVArdWF5c3pBcjFiV2phRGk0NmtSbHRkcGRqQnFEVXVYNzlldHEzYjE5dGZmdm16WnUxc2Rsa05vT21pVm9QVmdnd2YwYVJaTXVXTFdKUWR1SENCWkUvbTdBM3Q4TVR4U25KZ2dQV2hoMC9mcHptejU4djZ0c1EybVR4T1E0Q3QxUlNCWTlHalJyUnZIbnpSSDBiODg5YWZkc2s4YmtsWW5BckZYdDFLQjF4S3JWMjdWcmh1ckVLMUNUeHVSVytZczFWUDlRM2Y0YkkyZG5aWWxCMjhlSkZJK3ZielNGd0l5V0wvaGczYnB5WWYxNjRjS0dvYnlNK1AzdjJMTnhDTjRMQWFsdG9pTkNrU1JPYU0yZU9LSlJNbmp4WnZJZEZCbUZFREFSK29hUUlMWkJLYmRpd1FTdzJ1SC8vdnRpT0V5NWdrVmFWa2lDMFFLL0ZBb1B0MjdmWDdvNE1FNm9oOERNbFFlaVFtNXRMeTVjdnA2S2lJc0taWksxYXRSSmJZY09FS3BTem5wamRTRmJjQzZ4TlVHQkUzYlJwVStyUm80ZG9SM1YxZFRnZjR4djA0SWVxbittSGE5ZXUwZEtsUzhVeTNjcktTcEVmbzhwbDBMUm5CUVF1VTdMVUgwaUJWcXhZSVlvZE4yN2NvQTRkT2doaVFHWGd0dFo3RVBpT2txZCt3S2IwOVBSME9uWHFGTFZ1M1ZxNFk0Z2F6dEd5RjVRaUJ0OVNFZ1VmWjFISXdQUWhjdDd1M2J1TDkwMGdySVpiNk1GWHlIbGZmYlNTekQ5Y3VYSkZES0F3WFlnVXFFdVhMa2JHV1crQXBsY2g2azJNRGNpNTFGS2hqamk3Y3VWS1dyVnFGZDIrZlZ2RVdQUmNnK09zTjF5SHRsckcvUjhsbjI5ZzhnRG5oR0JwTFlSR25NVlVvWW5jc1RzdUlzUFVMdVU0U3k3YkhWUWU3RG1meGQ1anhGazhUeGlMRmNFQ210YkczUk9xajc0S25NK2x4ZGtuVDU2SWVySUo0Nnd2bkhBVitDc2xxUk1ZTkNIT29uYU1CZS90MjdjM2M1ejFoZU91QXBldzI3bE1OdDZmQkd6YnRrMVVvVTZmUGswdFc3WVU3aGlpV3NBZHU2UEU0WEJjRmdLN3hMZURkaFg0Nk5HaklwOUZuTVhBQ1NzeFlCY1RENkRxd2dGTlY5ZmM5M1BtSjNZUzl2cjE2eUxPYnRxMFNiaG1uTHRsc1RqckRaOXIvM0R0d1hnVFgxblQ3Y25RZXhRTmw3dHMyVExLeU1pZzB0SlNTa2hJRURNK0ppa3YxaGMxcmdLN3pqeVhrdzVYcVprZE9UazUxTGR2WDdHNkFxTmp1R09rUHhBMlFvNG9McFJhdnVhaWdWem1pRWdVMXJWdWpFVndLQytLcjd2MWV5eDUwSkM4Q2Z4WGN0NUdIVEYxYWVTek9Ga25Nek5UdU9aT25UcEZTcHoxR0gya2hsNEZmc1RjeWZ5RjFWdXF6YytpYm56bnpwM2FPR3ZCZkRZUTdKSWFrcWNZck9HUFZtOGw2c2I5K3ZVVGNSYWpZOWM0RytISWNIL0RreXMreEN3bWk1MDRDeHc3ZGt5NFkrU3ppTE5ZTG1QeGZEWVFGRXZ0NmhRWVdNcjhrMVZhaG5WUU9DRkhxeHRIZUp6MUJvLzNhM2k3NGoyVG1VNG1QdlVkd0ZaTmJYNFcrV3g4ZkR5MWJkczJVdkxaUUZEQjNPVHBGdzE4Sk1zTFRKMEw1T1pTLy83OXhkWVFiZlZpaE9XemdXQysxTXh2Z1lIUDNFZGtSc0hWMVdKRFYxSlNFcVdrcElnRHk1RFBZbUxBWmozV0ZWajI3UFdHY0YvNUxpdzJVK2JGaHFKang0NWlORHhqeGd4eHJCRVdqK005RzhaWlQ1aEZIbTViMGVEQWdLUU8vSmVaYU5UVHcvM2lUZ1pzMnNLc0Q2NEJ3alU2TnU2eHJyaGFsemIrQ0l6emgvOWhWQXZRU3pHQUFqQ0lRbzlWMTlyVkFvZU8rcHcvOEdlYkd6NGczNmdXb0x5SXhlU2dUUWRRM3BCUGZrd08rYnVQY1NLeld0blVOSUFXay96eWdINzJpQW9wOGpabFcxTmdFdm01YVRDUW5jZzV6RHhsVzhPUkYwaEhDM1NyZVFxcHpXcEc0bzdVd1A5QmFvQi80Qm03OU5IOFdxUnNiUWlTSEE1SFFDY3lSRFZ2SHZBeFdjaFpzQ1B4ZldYdnNHSXFPYS84cFZBTFRMSUg0NTZsZ2NydVljRWZtSXVDK1IvcmM5d0xicDNlcVd3ZmN1d2tIemQ4aDFKZzRFUG1GMHFEa09Hd3RERVpKVENBVXVhL2xCYTZBNXZIaHRYM1EvUVFHRlgvd2N4L0trMTBBMno1US9JeXh4dHVnVVg2eEJ4RXp2MU5DdlhEUVdsTFhRNm9DM1lVN1FtY0lyL001TmZ2TW5zcG5ZTENYNWcvNVZ4WHR4bVZVQnlhK0V0eXJ1ZFNDQXpwMG5hNklsU25ZdjVPSnVZSy9tR3F0Sm51Q09VV2xRM3NzcjhtNTE2WnprcERqOENLakdSMnlWK0c2ZytFK2x4YlBQajNtTmxLeTllUUxXM3paU2ovU0RnT0x2NkdtY3I4bUZ5Mk5kb1k1ZElXcWRJMlpIV0JOV1RLMFhXT2pjWE5rVGJJRE5jZjFETk44Z2VQT1M3dklHZmw2enZNdGpZUjl0OU1YTnF3aE9QdFkvZGZ1bDlicStjMXRrYmQzSVJwTDl4Wi9HdHlUajlHS2twbEcvdFFFRk45VmhaWUE3YXE0bVNmdEFnVHVsUzJxUnNadkIzWGdRTTE5WUw3QWo1UEMvcDhMUEtMNWQrTjU5ZnA4aHR2Ulp4a3JtVVhtOFd2SHE5SzhPUitRK21pelNTdzYrOStJa2VaSHpDYm1GelVTbVlCTTB0enc3NEVVZ0svaWdRcDhoaHlUa3ZHbWtSVTlFNXRRMENCZTNoUkF2c3ZzQ3N3NGg1R3psT0FNRDBaN212cGNUenZFZVorNWdIbTdVQkVWQUpUd0FlZXZjWHNUYzUxWVRoTEgxV2hOanE0ZExqY3UweVVXUytSczlKMG1ubkJiNk1xZ1hVUjJCM1JVdUN1c3JmajR1dDRaZ3RtTTNKZXdxbmQwNGl0SDdqeERUa3BkZ2hndlhHWjdKVWxVdUNnVHlBMWs4RC9GMkFBRThiQmo4ZDRkQzRBQUFBQVNVVk9SSzVDWUlJPScpIG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIiwKYi5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTt0aGlzLndhPXRoaXMuZWEuYXBwZW5kQ2hpbGQoYik7dGhpcy5iLllmKGZ1bmN0aW9uKGEpe3RoaXMud2Euc3R5bGUuaGVpZ2h0PWEuaGVpZ2h0KyJweCJ9LmJpbmQodGhpcykpOyJ2cGFpZCIhPWEmJnRoaXMuYi5mLnZhJiZ0aGlzLmIuZi52YSgpJiYoZS52KGsuamcsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSx0aGlzLk5lKCkpO3RoaXMueWIoKX19LHliOmZ1bmN0aW9uKCl7dGhpcy5jb250cm9scy5zdHlsZS5kaXNwbGF5PSJub25lIn0sWWI6ZnVuY3Rpb24oKXt0aGlzLndhJiYiYmxvY2siPT10aGlzLndhLnN0eWxlLmRpc3BsYXl8fHRoaXMuQWZ8fCh0aGlzLmNvbnRyb2xzLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9LFBoOmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy5iLkYucGF1c2VkPyh0aGlzLmIuRi5wbGF5KCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uLAp0aGlzLnRyYWNrKCJyZXN1bWUiLCEwKSxlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSk6KHRoaXMuYi5GLnBhdXNlKCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24sdGhpcy50cmFjaygicGF1c2UiLCEwKSxlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnliKCksdGhpcy54YigpKSl9LFFoOmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy5nYz8oZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJwbGF5IiksdGhpcy53YSYmKHRoaXMud2Euc3R5bGUuZGlzcGxheT0ibm9uZSIpLGEmJihhLmlubmVySFRNTD10aGlzLmNvbmYucGF1c2VCdXR0b24pLHRoaXMuZ2M9ITEpOihlLm1hKHRoaXMuSCwiY29udHJvbCIsCiJwYXVzZSIpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnliKCksdGhpcy54YigpKSxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24pLHRoaXMuZ2M9ITApfSx6ZDpmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRGIpO3RoaXMuYi5GLnBhdXNlZHx8KHRoaXMuYi5GLnBhdXNlKCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24sdGhpcy50cmFjaygicGF1c2UiLCEwKSxlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKX0semg6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRiKTt0aGlzLmIuRi5wYXVzZWQmJih0aGlzLmIuRi5wbGF5KCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uLHRoaXMudHJhY2soInJlc3VtZSIsITApLGUudihrLlVjLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSwKdGhpcy5DKCkpKX0sQXU6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkJiKTt0aGlzLmIuRi5tdXRlZD8odGhpcy5iLkYubXV0ZWQ9ITEsYS5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b24sdGhpcy50cmFjaygidW5tdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfdW5tdXRlZCIsInVzZXIiLCEwKSxlLnYoay50Zix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKToodGhpcy5iLkYubXV0ZWQ9ITAsYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJ1c2VyIiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSl9LEJ1OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYik7dGhpcy5wYj8oZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJ1bm11dGUiKSwKdGhpcy5wYj0hMSxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b24pKTooZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJtdXRlIiksdGhpcy5wYj0hMCxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbikpfSxOZTpmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuQmIpO3RoaXMuYi5GLm11dGVkfHwodGhpcy5iLkYubXV0ZWQ9ITAsYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJjb250ZW50IiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSl9LEx1OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYik7dGhpcy5iLkYubXV0ZWQmJih0aGlzLmIuRi5tdXRlZD0hMSxhLmlubmVySFRNTD10aGlzLmNvbmYubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJ1bm11dGUiLAohMCksZS50cmFjaygic3RhdHNfaGRfdW5tdXRlZCIsImNvbnRlbnQiLCEwKSxlLnYoay50Zix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKX0sWGI6ZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5YYik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5YYik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuWGIpO3RoaXMuamR8fHRoaXMuVmN8fCh0aGlzLnZpZGVvLmxvYWQoKSx0aGlzLmtmKCkpfSxoZDpmdW5jdGlvbigpe3ZhciBhPSExLGI9bC5nZXRDb25maWcoKTsic3ZtcHJldmlldyI9PWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZikuYW5jaG9yJiYoYT0hMCxiLmFkRmFsbGJhY2tVUkx8fChiLmFkRmFsbGJhY2tVUkw9Imh0dHBzOi8vaGdjLWNmLWNhY2hlLTEuc3Zvbm0uY29tL3dlbGVjdC54bWwiKSk7ZS51YygpO2lmKChhfHwhdGhpcy5mZSYmCmIuYWRGYWxsYmFja1VSTCkmJiF0aGlzLlFlKXRoaXMuUWU9dGhpcy5maT10aGlzLkFmPSEwLGUudHJhY2soInN0YXRzX3d0X3N0YXJ0IiwiIiwhMCksdGhpcy5mZT0hMCxhPWUuJGYoYi5hZEZhbGxiYWNrVVJMLHRoaXMuTCwhMSx7b25seVVSTDohMH0pLHRoaXMuSWUoYSwhMCwhMSx7aG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3M6ITB9KTtlbHNlIGlmKHRoaXMuamQ9ITAsdGhpcy5zYiYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5zYiksdGhpcy5zYj0hMSksKCJwcmVyb2xsIj09ZS5TYSYmdGhpcy5WY3x8InBvc3Ryb2xsIj09ZS5TYSkmJnRoaXMuY29uZi5wb3N0QWRJZnJhbWVVcmwpaWYoYT10aGlzLmNvbmYucG9zdEFkSWZyYW1lVXJsLCJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoYT1hKGUuU2EpKSwic3RyaW5nIj09dHlwZW9mIGEmJmEpe2ZvcihiPXRoaXMuYi5HO2IuZmlyc3RDaGlsZDspYi5yZW1vdmVDaGlsZChiLmZpcnN0Q2hpbGQpO2IucGFyZW50fHx0aGlzLmIuSmMoKTsKdmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Yy5zZXRBdHRyaWJ1dGUoInNyYyIsYSk7Yy5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Muc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7Yy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAwIG5vbmU7b3V0bGluZTogbm9uZTsiKTtiLmFwcGVuZENoaWxkKGMpO3ZhciBmPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihhKXtpZigiY29udGludWUiPT1hLmRhdGEpe3RoaXMua2QoKTthPU1hdGgucm91bmQoKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWYpLzFFMyk7dmFyIGI9IiI7MTxhJiYoYj0iZ3QxIik7NTxhJiYoYj0iZ3Q1Iik7MTA8YSYmKGI9Imd0MTAiKTsyMDxhJiYoYj0iZ3QyMCIpO2UudHJhY2soInN0YXRzX2hkX3Bvc3RJZnJhbWVDbG9zZWQiLGIsITApfX0uYmluZCh0aGlzKSk7ZS50cmFjaygic3RhdHNfaGRfcG9zdElmcmFtZU9wZW5lZCIsCiIiLCEwKX1lbHNlIHRoaXMua2QoKTtlbHNlIHRoaXMua2QoKX0sa2Q6ZnVuY3Rpb24oYSl7dGhpcy4kdCgpJiYhYT93aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMua2QoITApfS5iaW5kKHRoaXMpLHRoaXMuR3MpOih0aGlzLmxmPSEwLHRoaXMuYi53ZSgpLHRoaXMuYi5wdCgpLHRoaXMuVWI9ITEsZS52KGsuUG8sdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSx0aGlzLnNlKCkueWgoKSl9LHNlOmZ1bmN0aW9uKCl7dmFyIGE9bnVsbDt0aGlzLmImJnRoaXMuYi5mJiYoYT10aGlzLmIuZik7cmV0dXJuIGF9LERlOmZ1bmN0aW9uKCl7dmFyIGE9ITE7dHJ5e25ldyBBY3RpdmVYT2JqZWN0KCJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFzaCIpJiYoYT0hMCl9Y2F0Y2goYil7bmF2aWdhdG9yLm1pbWVUeXBlcyYmdm9pZCAwIT1uYXZpZ2F0b3IubWltZVR5cGVzWyJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCJdJiZuYXZpZ2F0b3IubWltZVR5cGVzWyJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCJdLmVuYWJsZWRQbHVnaW4mJgooYT0hMCl9cmV0dXJuIGF9LGFnOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5IYSgibWluVmlzIik7YSYmKGUuQmUodGhpcy52aWRlbyxhKT90aGlzLnpoKCk6dGhpcy56ZCgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5hZygpfS5iaW5kKHRoaXMpLDEwMCkpfSxCOmZ1bmN0aW9uKCl7dmFyIGE9e307dGhpcy5jJiYoYS5jbGlja3Rocm91Z2g9dGhpcy5jLk9iLGEuZHVyYXRpb249dGhpcy5jLmR1cmF0aW9uLGEuYWRQb2Q9dGhpcy5jLnJiLHRoaXMudmlkZW8mJnRoaXMudmlkZW8uY3VycmVudFRpbWUmJihhLmN1cnJlbnRUaW1lPXRoaXMudmlkZW8uY3VycmVudFRpbWUpLHRoaXMubGMmJjA8dGhpcy5sYy5sZW5ndGgmJihhLmFkSWRzPXRoaXMubGMpKTt0aGlzLnZpZGVvJiZ0aGlzLnZpZGVvLmR1cmF0aW9uJiYoYS52aWRlb19kdXJhdGlvbj10aGlzLnZpZGVvLmR1cmF0aW9uKTtyZXR1cm4gYX0sQzpmdW5jdGlvbigpe3ZhciBhPXt9O2EuYWRzZXNzaW9uX2lkPXRoaXMuYm8rCiItIit0aGlzLmpmO3RoaXMuYyYmdGhpcy5jLkRnJiYoYS5ob21hZEltcHJlc3Npb25BZElkPXRoaXMuYy5EZygpKTtyZXR1cm4gYX0sb2c6ZnVuY3Rpb24oKXt9fX0pKHRoaXMpO3ZhciBRYT1jLllqfHxRYTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy55cz10aGlzLmFbMV07dGhpcy5HcD10aGlzLmFbNV07dGhpcy5qPXRoaXMuYVs4XX1jLk5pPWI7Yi5wcm90b3R5cGU9e3hzOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy55czp0aGlzLkZwKGEpfSxGcDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuR3A6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuajphfX19KShjKTt2YXIgUmE9Yy5OaXx8UmEsd2M9bmV3IFJhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwKIlooVFREWlRSUiIpO3dpbmRvdy5EPXdjLnhzKDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsYixjLGQpe3RoaXMub3B0aW9ucz1kfHx7fTtoPWM7dGhpcy5wYXJlbnQ9YTt0aGlzLnVybD1iO3RoaXMuRWE9bnVsbDt0aGlzLlc9W107dGhpcy5VPW51bGw7dGhpcy5rYz10aGlzLm1jPSExO3RoaXMuc2E9IiI7dGhpcy56Zj0hMTtkJiZkLmVtcHR5P3RoaXMuTXIoJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+PFZBU1QgdmVyc2lvbj0iMy4wIj48L1ZBU1Q+Jyk6dGhpcy5sb2FkKCl9dmFyIGE9MCxoLGQ9W107Yy52bT1iO2IucHJvdG90eXBlPXtsb2FkOmZ1bmN0aW9uKCl7dmFyIGE9ZS51YygpLGI7Yj1lLmxhKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpO3ZhciBjPSIiO2IucXVlcnlLZXkmJihjPWIucXVlcnlLZXkuaHZwKTtjJiYodGhpcy5vcHRpb25zLnZwYWlkPSEwKTtiPXRoaXMub3B0aW9ucy5rZWVwVVJMP25ldyB5KHRoaXMudXJsKTpsLnphKGwuS2QodGhpcy51cmwpLAohMSx0aGlzLm9wdGlvbnMudXNlQWRUYWdQYXJhbWV0ZXIpO2lmKHRoaXMub3B0aW9ucy52cGFpZCYmIWUuVGEoKSYmKGEuaXNDaHJvbWV8fGEuaXNGaXJlZm94KSYmIWEuaXNFZGdlfHxjKXthPWUubGcodGhpcy51cmwpO2F8fChhPXRoaXMudXJsKTtpZigwPD1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoIm1hcnRoYXN0ZXdhcnQiKSYmdGhpcy5vcHRpb25zLkFkU3lzdGVtJiYiR0RGUCI9PXRoaXMub3B0aW9ucy5BZFN5c3RlbXx8ImFwcHNwb3QiPT1jfHwwPGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZigiZmFuZG9tLmNvbSIpJiYwPGEuaW5kZXhPZigicHViYWRzLmcuZG91YmxlY2xpY2submV0LyIpKTA8YS5pbmRleE9mKCJnb29nbGVhZHMuZy5kb3VibGVjbGljay5uZXQvcGFnZWFkL2FkcyIpfHwiYXBwc3BvdCI9PWN8fDA8ZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKCJmYW5kb20uY29tIikmJjA8YS5pbmRleE9mKCJwdWJhZHMuZy5kb3VibGVjbGljay5uZXQvIik/Cih0aGlzLnVybD0iaHR0cHM6Ly9pbWEzdnBhaWQuYXBwc3BvdC5jb20vP2FkVGFnVXJsPSIrZW5jb2RlVVJJQ29tcG9uZW50KGwuS2QoYSkpKyImdHlwZT1qcyIsYj1sLnphKGwuS2QodGhpcy51cmwpLCExLHRoaXMub3B0aW9ucy51c2VBZFRhZ1BhcmFtZXRlciksYi5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9ImNvbWFwcHNwb3RpbWEzdnBhaWQiKTpiPWwuemEobC5LZChhKSwhMSx0aGlzLm9wdGlvbnMudXNlQWRUYWdQYXJhbWV0ZXIpO2IuZGF0YS5ob21hZF92cGFpZF9jb21wYXRpYmxlPSJ0cnVlIjt0aGlzLm9wdGlvbnMuaG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3MmJihiLmRhdGEuaG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3M9Ik1lZGlhZmlsZSIpfWwuTGEoYix0aGlzLkxyLmJpbmQodGhpcyksdGhpcy5Jci5iaW5kKHRoaXMpKX0sQWc6ZnVuY3Rpb24oKXt2YXIgYT0wPHRoaXMuRWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6VkFTVEFkRGF0YSIpLmxlbmd0aD8KW106W10uc2xpY2UuY2FsbCh0aGlzLkVhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJBZCIpKTsiUGxheWxpc3QiPT10aGlzLkVhLmZpcnN0Q2hpbGQubm9kZU5hbWUmJmEuZm9yRWFjaChmdW5jdGlvbihhLGIsYyl7aWYoMT09YS5jaGlsZE5vZGVzLmxlbmd0aClpZihhLnBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09ZS5TYSl0cnl7dmFyIGQ9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoJzxBZCBzZXF1ZW5jZT0iJysoYisxKSsnIj48V3JhcHBlcj48VkFTVEFkVGFnVVJJPjwhW0NEQVRBWycrYS50ZXh0Q29udGVudC50cmltKCkrIl1dXHgzZTwvVkFTVEFkVGFnVVJJPjwvV3JhcHBlcj48L0FkPiIsInRleHQveG1sIik7Y1tiXT1kLmZpcnN0Q2hpbGR9Y2F0Y2goZil7Y1tiXT17fX1lbHNlIGMuc3BsaWNlKGIsMSl9KTt2YXIgYj1bXS5zbGljZS5jYWxsKHRoaXMuRWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6QWRCcmVhayIpKTswPj1iLmxlbmd0aCYmCihiPVtdLnNsaWNlLmNhbGwodGhpcy5FYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWRCcmVhayIpKSk7dmFyIGM9W107Yi5mb3JFYWNoKGZ1bmN0aW9uKGEsYixkKXtpZigic3RhcnQiPT1hLmdldEF0dHJpYnV0ZSgidGltZU9mZnNldCIpJiYicHJlcm9sbCI9PWUuU2F8fCJlbmQiPT1hLmdldEF0dHJpYnV0ZSgidGltZU9mZnNldCIpJiYicG9zdHJvbGwiPT1lLlNhfHx0aGlzLm9yKGEuZ2V0QXR0cmlidXRlKCJ0aW1lT2Zmc2V0IikpfHxsLml1KCkpdHJ5e3ZhciBmPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6QWRUYWdVUkkiKTswPj1mLmxlbmd0aCYmKGY9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWRUYWdVUkkiKSk7dmFyIGg9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoJzxBZCBzZXF1ZW5jZT0iJysoYisxKSsnIj48V3JhcHBlcj48VkFTVEFkVGFnVVJJPjwhW0NEQVRBWycrZlswXS50ZXh0Q29udGVudC50cmltKCkrIl1dXHgzZTwvVkFTVEFkVGFnVVJJPjwvV3JhcHBlcj48L0FkPiIsCiJ0ZXh0L3htbCIpO2RbYl09aC5maXJzdENoaWxkO2MucHVzaChoKX1jYXRjaChnKXtmb3IoYT1bXS5zbGljZS5jYWxsKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkIikpLGI9MDtiPGEubGVuZ3RoO2IrKyljLnB1c2goYVtiXSl9fS5iaW5kKHRoaXMpKTthPWEuY29uY2F0KGMpO3JldHVybiBhPWEuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgic2VxdWVuY2UiKT9OdW1iZXIoYS5nZXRBdHRyaWJ1dGUoInNlcXVlbmNlIikpPE51bWJlcihiLmdldEF0dHJpYnV0ZSgic2VxdWVuY2UiKSk/LTE6MTowfSl9LG9yOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMub3B0aW9ucy5jb250ZW50VmlkZW8sYz10aGlzLm9wdGlvbnMudGltZU9mZnNldERlbHRhfHwxMCxkPTA7aWYoIShhJiZiJiZiLmR1cmF0aW9uJiZiLmN1cnJlbnRUaW1lKSlyZXR1cm4hMTswPD1hLmluZGV4T2YoIiUiKT9kPWIuZHVyYXRpb24vMTAwKnBhcnNlSW50KGEpOjA8PWEuaW5kZXhPZigiOiIpJiYKKDA8PWEuaW5kZXhPZigiLiIpJiYoYT1hLnN1YnN0cmluZygwLGEuaW5kZXhPZigiLiIpKSksYT1hLnNwbGl0KCI6IiksYT1hLnJldmVyc2UoKSxkPXBhcnNlSW50KGFbMF0pKzYwKnBhcnNlSW50KGFbMV0pKzM2MDAqcGFyc2VJbnQoYVsyXSkpO3JldHVybiBkJiZNYXRoLmFicyhkLXBhcnNlSW50KGIuY3VycmVudFRpbWUpKTw9Yz8hMDohMX0sTHI6ZnVuY3Rpb24oYSl7dGhpcy5mdChhKTt0cnl7dGhpcy5FYT1hLnJlc3BvbnNlWE1MLHRoaXMuRWF8fCh0aGlzLkVhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEucmVzcG9uc2VUZXh0LCJ0ZXh0L3htbCIpKX1jYXRjaChiKXt0aGlzLm9hKHRoaXMuUmEody5WZCkpfXRoaXMuVz10aGlzLkFnKCk7dGhpcy5tYz10aGlzLm9mKCk7dGhpcy5rYz10aGlzLkxoKCk7dGhpcy5XLmxlbmd0aD90aGlzLkZjKCk6dGhpcy5vYSh0aGlzLlJhKHcuT2Mse2Vycm9yOnRoaXMuemY/Ri5VZDpGLkdmfSkpfSxNcjpmdW5jdGlvbihhKXt0cnl7dGhpcy5FYXx8Cih0aGlzLkVhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEsInRleHQveG1sIikpfWNhdGNoKGIpe3RoaXMub2EodGhpcy5SYSh3LlZkKSl9dGhpcy5XPXRoaXMuQWcoKTt0aGlzLm1jPXRoaXMub2YoKTt0aGlzLmtjPXRoaXMuTGgoKTt0aGlzLlcubGVuZ3RoP3RoaXMuRmMoKTp0aGlzLm9hKHRoaXMuUmEody5PYyx7ZXJyb3I6dGhpcy56Zj9GLlVkOkYuR2Z9KSl9LElyOmZ1bmN0aW9uKCl7dGhpcy5vYSh0aGlzLlJhKHcuRmYse2RlcHRoOmF9KSl9LEZjOmZ1bmN0aW9uKCl7dGhpcy5VPXRoaXMuVy5zaGlmdCgpO3RoaXMucXIoKT90aGlzLnN1KCk/KGErKyxuZXcgYih0aGlzLHRoaXMuSWcoKSxoLHtBZFN5c3RlbTp0aGlzLlpwKCksdnBhaWQ6dGhpcy5vcHRpb25zLnZwYWlkfSkpOnRoaXMub2EodGhpcy5SYSh3LklmKSk6KGE9MCx0aGlzLlF1KCkmJnRoaXMuVGUodGhpcy5SbygpKSl9LE9lOmZ1bmN0aW9uKCl7dGhpcy5tYz8odGhpcy5tYz0xPHRoaXMuVy5sZW5ndGgsCnRoaXMuVy5sZW5ndGgmJnRoaXMuRmMoKSk6dGhpcy5wYXJlbnQuT2UoKX0sa2g6ZnVuY3Rpb24oKXt0aGlzLmtjPyh0aGlzLmtjPTE8dGhpcy5XLmxlbmd0aCx0aGlzLlcubGVuZ3RoJiZ0aGlzLkZjKCkpOnRoaXMucGFyZW50LmtoKCl9LFF1OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHUoKT90aGlzLm91KCk/ITA6KC0xIT10aGlzLnljKCk/dGhpcy5vYSh0aGlzLlJhKHcuQmYpKTp0aGlzLm9hKHRoaXMuUmEody5qaikpLCExKToodGhpcy5vYSh0aGlzLlJhKHcuT2MsRi5IZikpLCExKX0sVGU6ZnVuY3Rpb24oYSl7dGhpcy5zYXx8KHRoaXMuc2E9IiIpO2EuT2E9YS5PYS5jb25jYXQodGhpcy5LZSgpKTthLnJiPWEucmI/YS5yYjp0aGlzLm1jO2EuamM9YS5qYz9hLmpjOnRoaXMua2M7YS5XYT1hLldhP2EuV2E6LTEhPXRoaXMuc2EuaW5kZXhPZigic21hcnRjbGlwLm5ldCIpJiYhdGhpcy5vcHRpb25zLndnO3RoaXMucGFyZW50LlRlKGEpfSxSbzpmdW5jdGlvbigpe3ZhciBhPW5ldyBTYTsKdGhpcy5zYXx8KHRoaXMuc2E9IiIpO2EuZHVyYXRpb249dGhpcy55YygpO2EuTT10aGlzLkZnKCk7YS5PYj10aGlzLmJxKCk7YS5vcmlnaW49dGhpczthLkE9dGhpcy5ZcCgpO2EuaGY9dGhpcy5ycShhLmR1cmF0aW9uKTthLldhPWEuV2E/YS5XYTotMSE9dGhpcy5zYS5pbmRleE9mKCJzbWFydGNsaXAubmV0IikmJiF0aGlzLm9wdGlvbnMud2c7cmV0dXJuIGF9LG9hOmZ1bmN0aW9uKGIpe3RoaXMuc2F8fCh0aGlzLnNhPSIiKTtiLldhPWIuV2E/Yi5XYTotMSE9dGhpcy5zYS5pbmRleE9mKCJzbWFydGNsaXAubmV0IikmJiF0aGlzLm9wdGlvbnMud2c7dGhpcy5VJiYoYi5PYT1iLmVycm9yLmNvZGUhPXcuQmYuY29kZT9iLk9hLmNvbmNhdCh0aGlzLmNxKCkpOmIuT2EuY29uY2F0KHRoaXMubHEoKSkpO3RoaXMuVy5sZW5ndGg/KHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5RYiYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucGFyZW50LlFiJiZ0aGlzLnBhcmVudC5RYihiKSxhPTAsdGhpcy5GYygpKToKKHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5vYSYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucGFyZW50Lm9hJiZ0aGlzLnBhcmVudC5vYShiKSxhPTApfSxRYjpmdW5jdGlvbihhKXt0aGlzLnBhcmVudC5RYihhKX0scWc6ZnVuY3Rpb24oYSxiKXt0aGlzLm9hKHRoaXMuUmEoYSxiKSl9LFJhOmZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IFRhKGEsYik7Yy5vcmlnaW49dGhpcztyZXR1cm4gY30sc3U6ZnVuY3Rpb24oKXtyZXR1cm4gYTxofSxwdTpmdW5jdGlvbigpe3JldHVybiAwPHRoaXMuRmcoKS5sZW5ndGh9LG91OmZ1bmN0aW9uKCl7cmV0dXJuIDE8dGhpcy55YygpfSxvZjpmdW5jdGlvbigpe3JldHVybiAxPHRoaXMuVy5maWx0ZXIoZnVuY3Rpb24oYSl7dmFyIGI9ITE7YS5nZXRBdHRyaWJ1dGUmJihiPTA8TnVtYmVyKGEuZ2V0QXR0cmlidXRlKCJzZXF1ZW5jZSIpKSk7cmV0dXJuIGJ9KS5sZW5ndGh9LExoOmZ1bmN0aW9uKCl7dmFyIGE9ITE7dGhpcy5XJiYyPD10aGlzLlcubGVuZ3RoJiYKIXRoaXMub2YoKSYmKGE9ITApO3JldHVybiBhfSxmdDpmdW5jdGlvbihhKXt0aGlzLnNhPSJVTktOT1dOIjt0cnl7ZC5wdXNoKHRoaXMuc2E9YS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1VcmwiKSl9Y2F0Y2goYil7dGhpcy5zYT0iVU5LTk9XTiJ9dHJ5e3RoaXMuemY9YS5nZXRSZXNwb25zZUhlYWRlciYmYS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1WcGFpZC1JZ25vcmVkIil9Y2F0Y2goYyl7fX0scXI6ZnVuY3Rpb24oKXtyZXR1cm4gMDx0aGlzLklnKCkubGVuZ3RofSxJZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlKHRoaXMuVSwiVkFTVEFkVGFnVVJJIil9LFpwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmUodGhpcy5VLCJBZFN5c3RlbSIpfSxLZTpmdW5jdGlvbigpe2Zvcih2YXIgYT0iSW1wcmVzc2lvbiBUcmFja2luZyBDbGlja1RyYWNraW5nIEVycm9yIFZpZXdhYmxlIE5vdFZpZXdhYmxlIHZpZXdhYmxlX2ltcHJlc3Npb24gbWVhc3VyYWJsZV9pbXByZXNzaW9uIi5zcGxpdCgiICIpLApiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtbXS5zbGljZS5jYWxsKHRoaXMuVS5nZXRFbGVtZW50c0J5VGFnTmFtZShkKSkuZm9yRWFjaChmdW5jdGlvbihhKXtpZihhJiYhdGhpcy5WZyhhKSl7dmFyIGM9YS5nZXRBdHRyaWJ1dGUoImV2ZW50Iil8fGQudG9Mb3dlckNhc2UoKTtiLnB1c2goe3R5cGU6Yyx1cmw6dGhpcy5pYihhKX0pfX0uYmluZCh0aGlzKSl9cmV0dXJuIGJ9LFZnOmZ1bmN0aW9uKGEpe3JldHVybiBhPyJDb21wYW5pb24iPT1hLm5vZGVOYW1lPyEwOnRoaXMuVmcoYS5wYXJlbnROb2RlKTohMX0sbHE6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLktlKCk7cmV0dXJuIGE9YS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuImltcHJlc3Npb24iPT1hLnR5cGV9KX0sY3E6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLktlKCk7cmV0dXJuIGE9YS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuImVycm9yIj09YS50eXBlfSl9LGJxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWIodGhpcy5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJDbGlja1Rocm91Z2giKVswXSl9LApGZzpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIk1lZGlhRmlsZSIpLGI9W10sYz0wO2M8YS5sZW5ndGg7YysrKWIucHVzaCh7aWQ6YVtjXS5nZXRBdHRyaWJ1dGUoImlkIiksdHlwZTphW2NdLmdldEF0dHJpYnV0ZSgidHlwZSIpLFBhOmFbY10uZ2V0QXR0cmlidXRlKCJiaXRyYXRlIiksd2lkdGg6YVtjXS5nZXRBdHRyaWJ1dGUoIndpZHRoIiksaGVpZ2h0OmFbY10uZ2V0QXR0cmlidXRlKCJoZWlnaHQiKSxUdjphW2NdLmdldEF0dHJpYnV0ZSgiZGVsaXZlcnkiKSx1cmw6dGhpcy5pYihhW2NdKX0pO3ZhciBkPXRoaXMub3B0aW9ucy5QYXx8MUUzO3RyeXt2YXIgaD1iLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4tMSE9YS50eXBlLmluZGV4T2YoIm1wNCIpfSkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBNYXRoLmFicyhkLWEuUGEpLU1hdGguYWJzKGQtYi5QYSl9KSxlPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybi0xPT1hLnR5cGUuaW5kZXhPZigibXA0Iil9KS5zb3J0KGZ1bmN0aW9uKGEsCmIpe3JldHVybiBNYXRoLmFicyhkLWEuUGEpLU1hdGguYWJzKGQtYi5QYSl9KSxiPWguY29uY2F0KGUpfWNhdGNoKGcpe31yZXR1cm4gYn0sWXA6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImFkUGFyYW1ldGVycyIpO2EmJjAhPWEubGVuZ3RofHwoYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkUGFyYW1ldGVycyIpKTtmb3IodmFyIGI9IiIsYz0hMSxkPVtdLGI9ITEsaD0iIixlPVtdLGc9IiIsZz0wO2c8YS5sZW5ndGg7ZysrKXtoPWI9dGhpcy5xZChhW2ddKTt0cnl7Yz1KU09OLnBhcnNlKGIpfWNhdGNoKGspe2M9Yn1kLnB1c2goYyk7ZS5wdXNoKGgpfTE8YS5sZW5ndGg/KGI9ZCxnPWgpOihiPWMsZz1lKTtyZXR1cm57QWRQYXJhbWV0ZXJzOmIsT3JpZ2luYWxBZFBhcmFtZXRlcnM6Zy50b1N0cmluZygpfX0seWM6ZnVuY3Rpb24oKXt2YXIgYTt0cnl7cmV0dXJuIGE9dGhpcy5pYih0aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkR1cmF0aW9uIilbMF0pLAphPWEuc3BsaXQoIjoiKSxhPTM2MDAqK2FbMF0rNjAqK2FbMV0rICthWzJdLGlzTmFOKGEpPy0xOmF9Y2F0Y2goYil7cmV0dXJuLTF9fSxycTpmdW5jdGlvbihhKXt2YXIgYj0hMSxjPSExLGQ9ITE7dHJ5e2M9dGhpcy5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJMaW5lYXIiKVswXSxkPWMuZ2V0QXR0cmlidXRlKCJza2lwb2Zmc2V0IiksYj1lLld0KGQsYSksMD5iJiYoYj0hMSl9Y2F0Y2goaCl7Yj0hMX1yZXR1cm4gYn0scmU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZhLmdldEVsZW1lbnRzQnlUYWdOYW1lKGIpLmxlbmd0aD90aGlzLmliKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYilbMF0pOiIifSx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5jaGlsZE5vZGVzJiZhLmNoaWxkTm9kZXNbMF0/YS5jaGlsZE5vZGVzWzBdLm5vZGVWYWx1ZToiIn0saWI6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5xZChhKToiIn0scWQ6ZnVuY3Rpb24oYSl7dmFyIGI9CnRoaXMudWUoYSk7YiYmKGI9Yi50cmltKCkpOyFiJiZhLnRleHRDb250ZW50JiYoYj1hLnRleHRDb250ZW50LGI9Yi50cmltKCkpO3JldHVybiBifX19KShjKTt2YXIgVD1jLnZtfHxUO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLiRyPXRoaXMuYVs1XTt0aGlzLnBpPXRoaXMuYVszXTt0aGlzLkNvPXRoaXMuYVs2XTt0aGlzLmVqPXRoaXMuYVsxXTt0aGlzLm5uPXRoaXMuYVs2XTt0aGlzLnFsPXRoaXMuYVs4XTt0aGlzLktpPXRoaXMuYVsxXTt0aGlzLkFpPXRoaXMuYVs4XTt0aGlzLmo9dGhpcy5hWzddfWMuTnE9YjtiLnByb3RvdHlwZT17WnI6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLiRyOnRoaXMub2koYSl9LG9pOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5waTp0aGlzLkJvKGEpfSxCbzpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuQ286dGhpcy5kaihhKX0sCmRqOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5lajp0aGlzLm1uKGEpfSxtbjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMubm46dGhpcy5wbChhKX0scGw6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLnFsOnRoaXMuSmkoYSl9LEppOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5LaTp0aGlzLnppKGEpfSx6aTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuQWk6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBVYT1jLk5xfHxVYSx4Yz1uZXcgVWEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD14Yy5acig0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuZHVyYXRpb249MDt0aGlzLk9hPVtdO3RoaXMuTT1bXTt0aGlzLk9iPSIiO3RoaXMuQT10aGlzLmpjPXRoaXMucmI9ITE7dGhpcy54ZT0KdGhpcy5vcmlnaW49bnVsbDt0aGlzLnllPSIifWMucmw9YjtiLnByb3RvdHlwZT17TW86ZnVuY3Rpb24oKXtmb3IodmFyIGE9ITEsYj0wO2I8dGhpcy5NLmxlbmd0aDtiKyspaWYoMDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24vZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC9lY21hc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQvamF2YXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJ0ZXh0L2pzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC94LWVjbWFzY3JpcHQiKXx8CjA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1qYXZhc2NyaXB0IikpYT0hMDtyZXR1cm4gYX0sanE6ZnVuY3Rpb24oKXtpZighdGhpcy54ZSYmdGhpcy5vcmlnaW4mJnRoaXMub3JpZ2luLkVhKXt2YXIgYT10aGlzLm9yaWdpbi5FYTtpZihhLmdldEVsZW1lbnRzQnlUYWdOYW1lKWZvcih2YXIgYT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJbXByZXNzaW9uIiksYj0iIixjPTA7YzxhLmxlbmd0aDtjKyspKGI9YVtjXS5nZXRBdHRyaWJ1dGUoImlkIikpJiYwPD1iLmluZGV4T2YoIkhPTUFEIikmJih0aGlzLnhlPWFbY10pfXJldHVybiB0aGlzLnhlfSxEZzpmdW5jdGlvbigpe2lmKHRoaXMueWUpcmV0dXJuIHRoaXMueWU7dmFyIGE9IiI7KGE9dGhpcy5qcSgpKSYmYS5nZXRBdHRyaWJ1dGU/KGE9YS5nZXRBdHRyaWJ1dGUoImlkIiksYT1hLnJlcGxhY2UoIkhPTUFEXyIsIiIpLChhPWEucmVwbGFjZSgiSE9NQUQiLCIiKSl8fChhPSJlbXB0eSIpKTphPSJub19pbXBfbm9kZSI7CnJldHVybiB0aGlzLnllPWF9LHVxOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPSExLGI9MDtiPHRoaXMuTS5sZW5ndGg7YisrKWlmKDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24vamF2YXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQvZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJ0ZXh0L2phdmFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC9qc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1lY21hc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1qYXZhc2NyaXB0IikpYT0KdGhpcy5NW2JdO3JldHVybiBhfX19KShjKTt2YXIgU2E9Yy5ybHx8U2E7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMudW09dGhpcy5hWzldO3RoaXMuSHE9dGhpcy5hWzZdO3RoaXMucXA9dGhpcy5hWzddO3RoaXMubXM9dGhpcy5hWzldO3RoaXMuYWw9dGhpcy5hWzRdO3RoaXMuVnA9dGhpcy5hWzEwXTt0aGlzLmVyPXRoaXMuYVs2XTt0aGlzLmo9dGhpcy5hWzVdfWMucmo9YjtiLnByb3RvdHlwZT17dG06ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnVtOnRoaXMuR3EoYSl9LEdxOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5IcTp0aGlzLnBwKGEpfSxwcDpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMucXA6dGhpcy5scyhhKX0sbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLm1zOnRoaXMuJGsoYSl9LCRrOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5hbDoKdGhpcy5VcChhKX0sVXA6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLlZwOnRoaXMuZHIoYSl9LGRyOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5lcjp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLmo6YX19fSkoYyk7dmFyIFZhPWMucmp8fFZhLHljPW5ldyBWYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXljLnRtKDQpO3ZhciB3PXtWZDp7dHlwZToiZXJyb3IiLGNvZGU6MTAwLG1lc3NhZ2U6IlhNTCBwYXJzaW5nIGVycm9yIix4YToiWE1MX1BBUlNFX0VSUk9SIn0samo6e3R5cGU6ImVycm9yIixjb2RlOjIwMixtZXNzYWdlOiJWaWRlbyBwbGF5ZXIgZXhwZWN0aW5nIGRpZmZlcmVudCBkdXJhdGlvbi4iLHhhOiJEVVJBVElPTl9FUlJPUiJ9LE9jOnt0eXBlOiJlcnJvciIsY29kZTozMDMsbWVzc2FnZToiTm8gYWRzIFZBU1QgcmVzcG9uc2UgYWZ0ZXIgb25lIG9yIG1vcmUgV3JhcHBlcnMuIEFsc28gaW5jbHVkZXMgbnVtYmVyIG9mIGVtcHR5IFZBU1QgcmVzcG9uc2VzIGZyb20gZmFsbGJhY2suIiwKeGE6IkVNUFRZX1ZBU1QifSxJZjp7dHlwZToiY3JpdGljYWwiLGNvZGU6MzAyLG1lc3NhZ2U6IldyYXBwZXIgbGltaXQgcmVhY2hlZCwgYXMgZGVmaW5lZCBieSB0aGUgdmlkZW8gcGxheWVyLiBUb28gbWFueSBXcmFwcGVyIHJlc3BvbnNlcyBoYXZlIGJlZW4gcmVjZWl2ZWQgd2l0aCBubyBJbkxpbmUgcmVzcG9uc2UuIix4YToiV1JBUFBFUl9MSU1JVF9SRUFDSEVEIn0sRmY6e3R5cGU6ImVycm9yIixjb2RlOjMwMSxtZXNzYWdlOiJUaW1lb3V0IG9mIFZBU1QgVVJJIHByb3ZpZGVkIGluIFdyYXBwZXIgZWxlbWVudCwgb3Igb2YgVkFTVCBVUkkgcHJvdmlkZWQgaW4gYSBzdWJzZXF1ZW50IFdyYXBwZXIgZWxlbWVudC4gSW5jbHVkZXMgcmVxdWVzdCBlcnJvcnMgc3VjaCBhcyBpbnZhbGlkIFVSSSwgdW5yZWFjaGFibGUgb3IgcmVxdWVzdCB0aW1lb3V0IGZvciBVUkksIGFuZCBzZWN1cml0eSBvciBvdGhlciBleGNlcHRpb25zIHJlbGF0ZWQgdG8gcmVxdWVzdGluZyBhIFZBU1QgVVJJLiIsCnhhOiJMT0FEX0VSUk9SIn0sVGQ6e3R5cGU6ImVycm9yIixjb2RlOjQwMyxtZXNzYWdlOiJDb3VsZCBub3QgZmluZCBNZWRpYUZpbGUgdGhhdCBpcyBzdXBwb3J0ZWQgYnkgdGhpcyB2aWRlbyBwbGF5ZXIsIGJhc2VkIG9uIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBNZWRpYUZpbGUgZWxlbWVudC4iLHhhOiJOT19QTEFZQUJMRV9TT1VSQ0VTIn0sS3Y6e3R5cGU6ImVycm9yIixjb2RlOjQwNSxtZXNzYWdlOiJQcm9ibGVtIGRpc3BsYXlpbmcgTWVkaWFGaWxlLiIseGE6Ik1FRElBRklMRV9FUlJPUiJ9LEJmOnt0eXBlOiJlcnJvciIsY29kZTo5OTksbWVzc2FnZToiMSBzZWMgZHVtbXkgYWQiLHhhOiJEVU1NWV9BRCJ9fSxGPXtHZjp7dHlwZToiZXJyb3IiLGNvZGU6MzAzMSxtZXNzYWdlOiJubyBhZHMiLHhhOiJOT19BRFMifSxIZjp7dHlwZToiZXJyb3IiLGNvZGU6MzAzMixtZXNzYWdlOiJubyBtZWRpYWZpbGVzIHNwZWNpZmllZCIseGE6Ik5PX01FRElBRklMRVMifSxMdjp7dHlwZToiZXJyb3IiLApjb2RlOjMwMzMsbWVzc2FnZToibm8gcGxheWFibGUgbWVkaWFmaWxlcyIseGE6Ik5PX1BMQVlBQkxFX01FRElBRklMRVMifSxVZDp7dHlwZToiZXJyb3IiLGNvZGU6MzAzNCxtZXNzYWdlOiJ2cGFpZCBpZ25vcmVkIix4YToiVlBBSURfSUdOT1JFRCJ9fTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5vcz10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs0XX1jLnJuPWI7Yi5wcm90b3R5cGU9e25zOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5vczp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLmo6YX19fSkoYyk7dmFyIFdhPWMucm58fFdhLHpjPW5ldyBXYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXpjLm5zKDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsCmIpe3RoaXMuZXJyb3I9YTt0aGlzLm1kPWI7dGhpcy5PYT1bXTt0aGlzLm9yaWdpbj1udWxsfWMuTGo9YjtiLnByb3RvdHlwZT17fX0pKGMpO3ZhciBUYT1jLkxqfHxUYTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5DbT10aGlzLmFbMV07dGhpcy5YcT10aGlzLmFbOV07dGhpcy5Pbj10aGlzLmFbNl07dGhpcy5TcD10aGlzLmFbNV07dGhpcy5Baz10aGlzLmFbOV07dGhpcy5SdD10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVs3XX1jLmNyPWI7Yi5wcm90b3R5cGU9e0JtOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuQ206dGhpcy5XcShhKX0sV3E6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLlhxOnRoaXMuTm4oYSl9LE5uOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Pbjp0aGlzLlJwKGEpfSxScDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuU3A6dGhpcy56ayhhKX0sCnprOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5Bazp0aGlzLlF0KGEpfSxRdDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuUnQ6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBYYT1jLmNyfHxYYSxBYz1uZXcgWGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1BYy5CbSg0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYihhLGIpe3RoaXMuY29uZj1ifHx7fTt0aGlzLmY9YTt0aGlzLmhiPWEuQmcoKTt0aGlzLkc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5HLmlkPWUuYmEoMTApO3RoaXMuRj1DLnBvcCgpO3RoaXMuRnx8KGUudHJhY2soInN0YXRzX2hkX25vVmlkZW9UYWdMZWZ0IiwiIiwhMCksdGhpcy5GPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIiksdGhpcy5GLmlkPQoiYWRYZGlzcGxheSIsdGhpcy5GLnN0eWxlLmRpc3BsYXk9ImJsb2NrIik7dGhpcy5EPXt9O3RoaXMuWmY9ITE7dGhpcy5OYj1bXX1jLnFqPWI7Yi5wcm90b3R5cGU9e1RwOmZ1bmN0aW9uKGEpe3ZhciBiPXt9LGM9ITEsZT0wLGI9MCxnPXt9O2EuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiYoYj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9ImZpeGVkIixlPWIubGVmdCxiPWIudG9wKTtnPXt4OmUseTpifTtnLnBvc2l0aW9uPWM7cmV0dXJuIGd9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuY29uZi51c2VCb3VuZGluZ0NsaWVudFJlY3QpcmV0dXJuIHRoaXMuVHAoYSk7Zm9yKHZhciBiPTAsYz0wLGU9ITEsZz10aGlzLk9xKGEpLGs9e307YTspYis9YS5vZmZzZXRMZWZ0K2EuY2xpZW50TGVmdCxjKz1hLm9mZnNldFRvcCthLmNsaWVudFRvcCxhPWEub2Zmc2V0UGFyZW50O2cmJihhPXZvaWQgMCE9PXdpbmRvdy5wYWdlWU9mZnNldD93aW5kb3cucGFnZVlPZmZzZXQ6KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8CmRvY3VtZW50LmJvZHkucGFyZW50Tm9kZXx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wLGIrPXZvaWQgMCE9PXdpbmRvdy5wYWdlWE9mZnNldD93aW5kb3cucGFnZVhPZmZzZXQ6KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlfHxkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0LGMrPWEsdGhpcy5jb25mLnBvc2l0aW9uSWZGaXhlZCYmKGU9dGhpcy5jb25mLnBvc2l0aW9uSWZGaXhlZCkpO2s9e3g6Yix5OmN9O2UmJihrLnBvc2l0aW9uPWUpO3JldHVybiBrfSxjdTpmdW5jdGlvbigpe3RoaXMuWmY9ITB9LFdoOmZ1bmN0aW9uKCl7dGhpcy5GPUMucG9wKCk7dGhpcy5GfHwoZS50cmFjaygic3RhdHNfaGRfbm9WaWRlb1RhZ0xlZnQiLCIiLCEwKSx0aGlzLkY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmlkZW8iKSx0aGlzLkYuaWQ9ImFkWGRpc3BsYXkiLHRoaXMuRi5zdHlsZS5kaXNwbGF5PSJibG9jayIpfSxwaDpmdW5jdGlvbigpe3RoaXMuZi5wYXVzZSgpOwplLnYoay5mZCx0aGlzLmYudSgpKX0scHQ6ZnVuY3Rpb24oKXt0aGlzLlpmfHwodGhpcy5mLnBsYXkoKSxlLnYoay5nZCx0aGlzLmYudSgpKSl9LEpjOmZ1bmN0aW9uKCl7dmFyIGE9MjE0NzQ4MzY0Nzt0aGlzLmNvbmYuekluZGV4JiYoYT10aGlzLmNvbmYuekluZGV4KTt0aGlzLmYucGF1c2UoKTt0aGlzLkcuc3R5bGUuekluZGV4PWE7dGhpcy5HLnN0eWxlLm1hcmdpbkxlZnQ9ImF1dG8iO3RoaXMuRy5zdHlsZS5tYXJnaW5SaWdodD0iYXV0byI7dGhpcy5HLnN0eWxlLmJhY2tncm91bmRDb2xvcj0iIzAwMDAwMCI7dGhpcy5HLnN0eWxlLmJveFNpemluZz10aGlzLmhiLnN0eWxlLmJveFNpemluZzt0aGlzLkcuc3R5bGUud2lkdGg9dGhpcy5oYi5vZmZzZXRXaWR0aCswKyJweCI7dGhpcy5HLnN0eWxlLmhlaWdodD10aGlzLmhiLm9mZnNldEhlaWdodCswKyJweCI7dGhpcy5GLnN0eWxlLndpZHRoPXRoaXMuaGIub2Zmc2V0V2lkdGgrMCsicHgiO3RoaXMuRi5zdHlsZS5oZWlnaHQ9dGhpcy5oYi5vZmZzZXRIZWlnaHQrCjArInB4Ijt0aGlzLmdldFBvc2l0aW9uKHRoaXMuaGIpO3RoaXMuZi5IYyYmdGhpcy5mLkhjKCk/dGhpcy5mLkJnKCkuYXBwZW5kQ2hpbGQodGhpcy5HKTpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuRyk7d2luZG93LnNldFRpbWVvdXQodGhpcy5UYi5iaW5kKHRoaXMpLDEwKX0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0aGlzLmYuZXhpdEZ1bGxzY3JlZW4oKX0sT3E6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlLGM9ITE7YTspe2lmKGEuc3R5bGUmJigiZml4ZWQiPT1hLnN0eWxlLnBvc2l0aW9ufHxiJiYiZml4ZWQiPT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS5wb3NpdGlvbikpe2M9ITA7YnJlYWt9YT1hLnBhcmVudE5vZGV9cmV0dXJuIGN9LE1wOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0UG9zaXRpb24oYSk7Yi5wb3NpdGlvbj9iLnBvc2l0aW9uPWIucG9zaXRpb246Yi5wb3NpdGlvbj0iYWJzb2x1dGUiO2Iud2lkdGg9CmEub2Zmc2V0V2lkdGg7Yi5oZWlnaHQ9YS5vZmZzZXRIZWlnaHQ7cmV0dXJuIGJ9LFRiOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuTXAodGhpcy5oYik7aWYoYi54IT10aGlzLkQueHx8Yi55IT10aGlzLkQueXx8Yi5wb3NpdGlvbiE9dGhpcy5ELnBvc2l0aW9ufHxiLndpZHRoIT10aGlzLkQud2lkdGh8fGIuaGVpZ2h0IT10aGlzLkQuaGVpZ2h0fHxhKXtpZigwPHRoaXMuRC53aWR0aCYmMDx0aGlzLkQuaGVpZ2h0JiYwPT1iLndpZHRoJiYwPT1iLmhlaWdodCl7dGhpcy53ZSgpO3JldHVybn10aGlzLkQ9Yjt0aGlzLmYuSGMoKT8odGhpcy5HLnN0eWxlLmxlZnQ9IjBweCIsdGhpcy5HLnN0eWxlLnRvcD0iMHB4Iik6KHRoaXMuRy5zdHlsZS5sZWZ0PWIueCsicHgiLHRoaXMuRy5zdHlsZS50b3A9Yi55KyJweCIpO3RoaXMuRy5zdHlsZS53aWR0aD1iLndpZHRoKyJweCI7dGhpcy5HLnN0eWxlLmhlaWdodD1iLmhlaWdodCsicHgiO3RoaXMuRy5zdHlsZS5wb3NpdGlvbj1iLnBvc2l0aW9uOwp0aGlzLkYuc3R5bGUud2lkdGg9Yi53aWR0aCsicHgiO3RoaXMuRi5zdHlsZS5oZWlnaHQ9Yi5oZWlnaHQrInB4Ijtmb3IoYT0wO2E8dGhpcy5OYi5sZW5ndGg7YSsrKXRoaXMuTmJbYV0oe3dpZHRoOmIud2lkdGgsaGVpZ2h0OmIuaGVpZ2h0fSl9ZS5IaCh0aGlzLkcpJiZ3aW5kb3cuc2V0VGltZW91dCh0aGlzLlRiLmJpbmQodGhpcyksMTApfSxZZjpmdW5jdGlvbihhKXt0aGlzLk5ifHwodGhpcy5OYj1bXSk7ImZ1bmN0aW9uIj09dHlwZW9mIGEmJnRoaXMuTmIucHVzaChhKX0sd2U6ZnVuY3Rpb24oKXt0aGlzLkcmJnRoaXMuRy5wYXJlbnROb2RlJiZ0aGlzLkcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCYmdGhpcy5HLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5HKTt0aGlzLkYmJnRoaXMuRi5wYXVzZSYmdGhpcy5GLnBhdXNlKCl9fX0pKGMpO2Zvcih2YXIgWWE9Yy5xanx8WWEsQz1bXSxaYT0wOzEwMD5aYTtaYSsrKXt2YXIgTz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpOwpPLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjtPLmlkPWUuYmEoMTApO08uY29udHJvbHM9ITA7Qy5wdXNoKE8pfXZhciBLPSExLGRhPSExO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIseik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIseik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHopO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIseik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuc3A9dGhpcy5hWzhdO3RoaXMubXA9dGhpcy5hWzRdO3RoaXMuYXI9dGhpcy5hWzJdO3RoaXMuVXM9dGhpcy5hWzhdO3RoaXMueW89dGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbNV19Yy5ZbD1iO2IucHJvdG90eXBlPXtycDpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLnNwOnRoaXMubHAoYSl9LGxwOmZ1bmN0aW9uKGEpe3JldHVybiAzPAphP3RoaXMubXA6dGhpcy4kcShhKX0sJHE6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLmFyOnRoaXMuVHMoYSl9LFRzOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5Vczp0aGlzLnhvKGEpfSx4bzpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMueW86dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciAkYT1jLllsfHwkYSxCYz1uZXcgJGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1CYy5ycCg0KTsoZnVuY3Rpb24oYyl7Yy5mbD11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLmVsZW1lbnRJZCxhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGIpO2F8fChiPXRoaXMuZ2V0UmF3UGxheWVyKCkuZ2V0RWxlbWVudElkKCksCmE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYikpO3RoaXMuWShhKTt0aGlzLkZkKGIpO3RoaXMubWcoKX0sRmQ6ZnVuY3Rpb24oYil7dGhpcy5pZHx8KHRoaXMuaWQ9Yil9LG1nOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5JYSgpLGE9dGhpcy52aWRlb1RhZzthfHwoKGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXSl8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdKSxhP3RoaXMuWihhKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubWcoKX0uYmluZCh0aGlzKSwxMDApKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBsYXkoKX0sVmE6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpO2IuaXNQbGF5aW5nJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5pc1BsYXlpbmcmJmIuaXNQbGF5aW5nKCkmJnRoaXMucGF1c2UoKX0sCkFlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4gYi5wYXJhbWV0ZXJzJiYhMT09PWIucGFyYW1ldGVycy5hdXRvcGxheT8hMTohMH0sTzpmdW5jdGlvbigpe3JldHVybiJPb3lhbGEifSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGI/Yi5tdXRlZDohMH0sdTpmdW5jdGlvbigpe3ZhciBiPXt9LGE9dGhpcy52aWRlb1RhZyxjPXRoaXMuSWEoKTtpZihiLnZpZGVvVGFnPWEpYi52aWRlb1RhZ0lkPWEuaWQ7aWYoYi5jb250YWluZXI9YyliLmNvbnRhaW5lcklkPWMuaWQ7Yi5wbGF5ZXI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4gYn19KX0pKGMpO3ZhciBhYj1jLmZsfHxhYjsoZnVuY3Rpb24oYyl7Yy5kbD12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9ZWEoKTt0aGlzLk1iPXRoaXMuTWJ8fCExO3RoaXMuUWY9dGhpcy5TZj10aGlzLlJnPXRoaXMuZGE9dGhpcy5zZj0KITE7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5BRFNfRVJST1IsImV4YW1wbGUiLGZ1bmN0aW9uKGEsYil7dGhpcy5JcChhLGIpfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5BRFNfUExBWUVELCJleGFtcGxlIixmdW5jdGlvbigpe3RoaXMuc2Y9ITA7dGhpcy5SZyYmdGhpcy5oZygpfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5QTEFZSU5HLCJleGFtcGxlIixmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFBsYXllcigpLnpiO2EmJmEuVWImJnRoaXMuZ2V0UGxheWVyKCkucGF1c2UoKX0uYmluZCh0aGlzKSwxMDApfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5JTklUSUFMX1BMQVksImV4YW1wbGUiLGZ1bmN0aW9uKCl7dGhpcy5jZCgpO3RoaXMuUmc9ITA7dGhpcy5oZygpfS5iaW5kKHRoaXMpKTt0aGlzLmNnKCl9LApoZzpmdW5jdGlvbigpe2lmKCF0aGlzLk1iKXt0aGlzLmNkKCk7aWYoIXRoaXMuc2YmJiF0aGlzLmNkKCkpcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCksITA7dGhpcy5zZiYmdGhpcy5RZiYmIXRoaXMuU2YmJndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCl9fSxjZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuR2coImFkTWFuYWdlckNvbnRyb2xsZXIiKTtyZXR1cm4gYiYmYi5hZE1hbmFnZXJzJiZiLmFkTWFuYWdlcnNbImdvb2dsZS1pbWEtYWRzLW1hbmFnZXIiXX0sR2c6ZnVuY3Rpb24oYil7Zm9yKHZhciBhPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCksYz0wO2M8YS5tb2R1bGVzLmxlbmd0aDtjKyspe3ZhciBkPWEubW9kdWxlc1tjXTtpZihkLm5hbWU9PT1iKXJldHVybiBkLmluc3RhbmNlfX0sY2c6ZnVuY3Rpb24oKXtpZih0aGlzLmNkKCkpe3ZhciBiPXRoaXMuR2coImFkTWFuYWdlckNvbnRyb2xsZXIiKS5hZE1hbmFnZXJzWyJnb29nbGUtaW1hLWFkcy1tYW5hZ2VyIl07CnRoaXMuU2Y9MDxiLmdldEN1cnJlbnRUaW1lKCk7dGhpcy5RZj1iLlJ2fXRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmNnKCl9LmJpbmQodGhpcyksMTAwKX0sVXY6ZnVuY3Rpb24oYil7cmV0dXJuIGIuaXNBZFBsYXlpbmcmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmlzQWRQbGF5aW5nP2IuZ3coKTohMX0seWM6ZnVuY3Rpb24oYil7cmV0dXJuIGIuZ2V0QWREdXJhdGlvbiYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0QWREdXJhdGlvbj9iLnljKCk6LTF9LG1xOmZ1bmN0aW9uKGIpe3JldHVybiBiLmlzUGxheWluZyYmImZ1bmN0aW9uIj09dHlwZW9mIGIuaXNQbGF5aW5nP2IuaXNQbGF5aW5nKCk6LTF9LElwOmZ1bmN0aW9uKGIsYSl7dGhpcy5NYj1hLm1hdGNoKC9cZCsvKT9wYXJzZUludChhLm1hdGNoKC9cZCsvKVswXSk6MDsxMDA5PT10aGlzLk1ifHwzMDI9PXRoaXMuTWI/dGhpcy5kYT0hMDp0aGlzLm8oImFkZXJyb3IiLHRoaXMuTWIpO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLAoxMDApfSxlZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCk7dGhpcy5kYT8odGhpcy53KCksdGhpcy50YSgpKTpiLkFlKCk/KHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDJFMykpOnRoaXMubXEoYik/KHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDJFMykpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCl9fSl9KShjKTt2YXIgYmI9Yy5kbHx8YmI7KGZ1bmN0aW9uKGMpe2MuZ2w9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxucjpmdW5jdGlvbigpe3dpbmRvdy5PTy52bC5YbS5WbT93aW5kb3cuT08udmwuWG0uVm0uUHYoZnVuY3Rpb24oKXt9KTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubnIoKX0sMTAwKX0sZzpmdW5jdGlvbigpe3RoaXMuVWE9MTUwMDt2YXIgYj0KZWEoKTtpZihiJiZiLl9faW50ZXJuYWwmJmIuX19pbnRlcm5hbC5wbGF5ZXJzJiYwPGUudGUoYi5fX2ludGVybmFsLnBsYXllcnMpKWZvcih2YXIgYSBpbiBiLl9faW50ZXJuYWwucGxheWVycylpZihiLl9faW50ZXJuYWwucGxheWVycy5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGM9bmV3IGFiKGIuX19pbnRlcm5hbC5wbGF5ZXJzW2FdKTt0aGlzLk4oYyl8fCh0aGlzLlAoYyksKG5ldyBiYihjLHRoaXMuSykpLmcoKSl9dGhpcy5SKCl9fSl9KShjKTt2YXIgY2I9Yy5nbHx8Y2IsZGI9bmV3IGNiKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnlyPXRoaXMuYVszXTt0aGlzLlJrPXRoaXMuYVsyXTt0aGlzLkRqPXRoaXMuYVs2XTt0aGlzLnl0PXRoaXMuYVs5XTt0aGlzLm9tPXRoaXMuYVsxXTt0aGlzLkJ2PXRoaXMuYVs5XTt0aGlzLmhrPXRoaXMuYVs3XTt0aGlzLmNsPXRoaXMuYVs1XTsKdGhpcy5BbT10aGlzLmFbN107dGhpcy5qPXRoaXMuYVs5XX1jLnJyPWI7Yi5wcm90b3R5cGU9e3hyOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy55cjp0aGlzLlFrKGEpfSxRazpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuUms6dGhpcy5DaihhKX0sQ2o6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLkRqOnRoaXMueHQoYSl9LHh0OmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy55dDp0aGlzLm5tKGEpfSxubTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMub206dGhpcy5BdihhKX0sQXY6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLkJ2OnRoaXMuZ2soYSl9LGdrOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5oazp0aGlzLmJsKGEpfSxibDpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuY2w6dGhpcy56bShhKX0sem06ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5BbTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5qOgphfX19KShjKTt2YXIgZWI9Yy5ycnx8ZWIsQ2M9bmV3IGViKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9Q2MueHIoNCk7KGZ1bmN0aW9uKGMpe2MuYWo9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dGhpcy5xYT0hMTt0aGlzLkpnKCl9LEpnOmZ1bmN0aW9uKCl7dmFyIGI9ITEsYT0hMTt0aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5nZXRGaWd1cmUmJihiPXRoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLmdldEZpZ3VyZSgpKTtifHwoYj10aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5lbGVtZW50KTt0aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5nZXRWaWRlb0VsZW1lbnQmJihhPXRoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLmdldFZpZGVvRWxlbWVudCgpKTtiJiYhYSYmKGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXSk7CmImJmE/KHRoaXMuWShiKSx0aGlzLlooYSkpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5KZygpfS5iaW5kKHRoaXMpLDEwMCl9LHBhdXNlOmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLnBsYXkoKX0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIuZ2V0Q3VycmVudFRpbWUoKX0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIuZ2V0RHVyYXRpb24oKX0sTmE6ZnVuY3Rpb24oKXt0aGlzLnRoKCl9LHRoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRDdXJyZW50VGltZSgpOzE+dGhpcy5nZXREdXJhdGlvbigpLWI/dGhpcy5WJiYoMCx0aGlzLlYpKCk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnRoKCl9LmJpbmQodGhpcyksMTAwKX0sCk86ZnVuY3Rpb24oKXtyZXR1cm4iQml0bW92aW4ifX0pfSkoYyk7dmFyIGZiPWMuYWp8fGZiOyhmdW5jdGlvbihjKXtjLiRpPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LGRnOmZ1bmN0aW9uKGIpe3ZhciBhPWIuY29kZSxjPWIubWVzc2FnZTtiLmRhdGEmJihhPWIuZGF0YS5jb2RlLGM9Yi5kYXRhLm1lc3NhZ2UpOzEyMDUhPWEmJig5MDA9PWEmJjA8Yy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImVtcHR5Iik/KHRoaXMudygiZW1wdHkiKSx0aGlzLnRhKCkpOjEwMDk9PWF8fDMwMz09YXx8NDAzPT1hP3RoaXMudGEoKTp0aGlzLnMoKSl9LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2lmKGIuYWRFcnJvckV2ZW50cylmb3IodmFyIGE9MDthPGIuYWRFcnJvckV2ZW50cy5sZW5ndGg7YSsrKXRoaXMuZGcoYi5hZEVycm9yRXZlbnRzKTtiLnBsYXllci5vbigiYWRlcnJvciIsZnVuY3Rpb24oYSl7dGhpcy5kZyhhKX0uYmluZCh0aGlzKSk7CmIucGxheWVyLm9uKCJhZHF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygiYWRxdWFydGlsZSIpfS5iaW5kKHRoaXMpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCkucGxheWVyLmlzUGxheWluZygpP3RoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcyksMTApfX0pfSkoYyk7dmFyIGdiPWMuJGl8fGdiOyhmdW5jdGlvbihjKXtjLmJqPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sd2g6ZnVuY3Rpb24oYil7Yj1uZXcgZmIoYik7Yi5xYT90aGlzLlIoKTp0aGlzLk4oYil8fChiLkZkKE1hdGguY2VpbCgxRTEwKk1hdGgucmFuZG9tKCkpKSx0aGlzLlAoYiksKG5ldyBnYihiLHRoaXMuSykpLmcoKSl9LGc6ZnVuY3Rpb24oKXt0aGlzLkpwfHwodGhpcy5KcD0hMCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzdm06cGxheWVyaW5zdGFuY2UiLGZ1bmN0aW9uKGEpe3RoaXMud2goYS5kZXRhaWwpfS5iaW5kKHRoaXMpKSk7CmlmKHdpbmRvdy5fX3NjaG5lZVZvbk1vcmdlbiYmd2luZG93Ll9fc2NobmVlVm9uTW9yZ2VuLnZpZGVvUGxheWVySW5zdGFuY2VzKWZvcih2YXIgYj0wO2I8d2luZG93Ll9fc2NobmVlVm9uTW9yZ2VuLnZpZGVvUGxheWVySW5zdGFuY2VzLmxlbmd0aDtiKyspdGhpcy53aCh3aW5kb3cuX19zY2huZWVWb25Nb3JnZW4udmlkZW9QbGF5ZXJJbnN0YW5jZXNbYl0pO3RoaXMuUigpfX0pfSkoYyk7dmFyIGhiPWMuYmp8fGhiLFU9bmV3IGhiKHIpO1UuZygpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnJ0PXRoaXMuYVs0XTt0aGlzLmlsPXRoaXMuYVs5XTt0aGlzLmV0PXRoaXMuYVs4XTt0aGlzLkpxPXRoaXMuYVs1XTt0aGlzLkFyPXRoaXMuYVsxMF07dGhpcy5xbT10aGlzLmFbMl07dGhpcy5qaz10aGlzLmFbNF07dGhpcy53cT10aGlzLmFbOV07dGhpcy5VaT10aGlzLmFbNF07dGhpcy5Ecz0KdGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbOF19Yy5Jaj1iO2IucHJvdG90eXBlPXtxdDpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMucnQ6dGhpcy5obChhKX0saGw6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmlsOnRoaXMuZHQoYSl9LGR0OmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5ldDp0aGlzLklxKGEpfSxJcTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuSnE6dGhpcy56cihhKX0senI6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLkFyOnRoaXMucG0oYSl9LHBtOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5xbTp0aGlzLmlrKGEpfSxpazpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuams6dGhpcy52cShhKX0sdnE6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLndxOnRoaXMuVGkoYSl9LFRpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuVWk6dGhpcy5DcyhhKX0sQ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLkRzOnRoaXMuaShhKX0sCmk6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLmo6YX19fSkoYyk7dmFyIGliPWMuSWp8fGliLERjPW5ldyBpYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPURjLnF0KDQpOyhmdW5jdGlvbihjKXtjLlVsPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0UmF3UGxheWVyKCkpO3RoaXMuWShiKTtpZihiKXt2YXIgYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdO2F8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdKTt0aGlzLlooYSl9ZWxzZSB3aW5kb3cuc2V0VGltZW91dCh0aGlzLlMuYmluZCh0aGlzKSwxMDApfSxwYXVzZTpmdW5jdGlvbigpe3RyeXt0Zm1zdWl0ZSgiIyIrdGhpcy5nZXRSYXdQbGF5ZXIoKSkudGZtdmlkZW8oInBhdXNlIil9Y2F0Y2goYil7fX0sCnBsYXk6ZnVuY3Rpb24oKXt0cnl7dGZtc3VpdGUoIiMiK3RoaXMuZ2V0UmF3UGxheWVyKCkpLnRmbXZpZGVvKCJyZXN1bWUiKX1jYXRjaChiKXt0Zm1zdWl0ZSgiIyIrdGhpcy5nZXRSYXdQbGF5ZXIoKSkudGZtdmlkZW8oInBsYXkiKX19LEhjOmZ1bmN0aW9uKCl7dmFyIGI9bTtyZXR1cm4gYiYmYi5ydW5JbnNpZGVDb250YWluZXI/ITA6ITF9LE86ZnVuY3Rpb24oKXtyZXR1cm4iVEZNc3VpdGUifX0pfSkoYyk7dmFyIFY9Yy5VbHx8VjsoZnVuY3Rpb24oYyl7Yy5UbD12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTt4LldjKCIjIitiLCJvbkFkc01hbmFnZXJMb2FkZWQiLGZ1bmN0aW9uKCl7d2luZG93LnNldFRpbWVvdXQodGhpcy53LmJpbmQodGhpcyksMjAwKX0uYmluZCh0aGlzKSk7eC5XYygiIyIrYiwib2JqZWN0IixmdW5jdGlvbihhKXt0aGlzLmhzKGEpfS5iaW5kKHRoaXMpKTsKeC5XYygiIyIrYiwiYWRzTG9hZGVyRmFpbGVkIixmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsImFkc0xvYWRlckZhaWxlZCIpO3RoaXMuSSgpfS5iaW5kKHRoaXMpKTt4LldjKCIjIitiLCJyZXF1ZXN0QWRzRmFpbGVkIixmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsInJlcXVlc3RBZHNGYWlsZWQiKTt0aGlzLkkoKX0uYmluZCh0aGlzKSk7eC5DcSgpfSxoczpmdW5jdGlvbihiKXt2YXIgYT0iIixjO2ZvcihjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSl7YT1pc05hTihiW2NdKT8hMTpiW2NdO2lmKDEwMDk9PWJbY118fDEwMDE9PWJbY118fDMwMz09YltjXXx8NDAzPT1iW2NdKXt0aGlzLncoKTt0aGlzLnRhKCk7cmV0dXJufWZvcih2YXIgZCBpbiBiW2NdKWlmKGJbY10uaGFzT3duUHJvcGVydHkoZCkmJihhPWlzTmFOKGJbY11bZF0pPyExOmJbY11bZF0sMTAwOT09YltjXVtkXXx8MTAwMT09YltjXVtkXXx8MzAzPT1iW2NdW2RdfHw0MDM9PWJbY11bZF0pKXt0aGlzLncoKTsKdGhpcy50YSgpO3JldHVybn19dGhpcy5vKCJhZGVycm9yIixhKTt0aGlzLkkoKX19KX0pKGMpO3ZhciBXPWMuVGx8fFc7KGZ1bmN0aW9uKGMpe2MuVmw9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93LnRmbXN1aXRlKXtmb3IodmFyIGI9W10sYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSxjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10pO2E9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10pO3RoaXMueWQmJihiPWUuVW8oYix0aGlzLnlkKSk7Zm9yKGE9MDthPGIubGVuZ3RoO2ErKyl7dmFyIGQ9YlthXS5pZC5yZXBsYWNlKCJjb250ZW50RWxlbWVudCIsIiIpLGQ9bmV3IFYoZCk7aWYoIXRoaXMuTihkKSl7dGhpcy5QKGQpO3ZhciBmPW5ldyBXKGQsdGhpcy5LKTtmLmcoKX19Zm9yKGE9MDthPGIubGVuZ3RoO2ErKylmb3IoYz0KYlthXTtjLnBhcmVudEVsZW1lbnQ7KXt2YXIgYz1jLnBhcmVudEVsZW1lbnQsZz1jLmdldEF0dHJpYnV0ZSgiaWQiKTtpZihnKXRyeXt0Zm1zdWl0ZSgiIyIrZykudGZtdmlkZW8oInJlc3VtZSIpLHRoaXMueWR8fCh0aGlzLnlkPVtdKSx0aGlzLnlkLnB1c2goYlthXSksZD1uZXcgVihnKSx0aGlzLk4oZCl8fCh0aGlzLlAoZCksZj1uZXcgVyhkLHRoaXMuSyksZi5nKCkpfWNhdGNoKGspe319fXRoaXMuUigpfSxXYzpmdW5jdGlvbihiLGEsYyl7dGhpcy5jYXx8KHRoaXMuY2E9e30pO3RoaXMuY2FbYl18fCh0aGlzLmNhW2JdPXt9KTt0aGlzLmNhW2JdW2FdfHwodGhpcy5jYVtiXVthXT1bXSk7dGhpcy5jYVtiXVthXS5wdXNoKGMpfSx0dTpmdW5jdGlvbihiKXt2YXIgYT1iLnNQbGF5ZXJTZWxlY3RvcjtpZihiKWlmKCF0aGlzLmNhfHx0aGlzLmNhJiYhdGhpcy5jYVthXSl0aGlzLkVjfHwodGhpcy5FYz1bXSksdGhpcy5FYy5wdXNoKGIpLHRoaXMub3QoKSYmKHRoaXMuYWYoKSx0aGlzLmcoKSk7CmVsc2V7dmFyIGM9Im9iamVjdCI7InN0cmluZyI9PT10eXBlb2YgYi5vRXZlbnRUeXBlJiYoYz1iLm9FdmVudFR5cGUpO2lmKHRoaXMuY2FbYV1bY10mJjA8dGhpcy5jYVthXVtjXS5sZW5ndGgpZm9yKHZhciBkPTA7ZDx0aGlzLmNhW2FdW2NdLmxlbmd0aDtkKyspdGhpcy5jYVthXVtjXVtkXShiKX19LENxOmZ1bmN0aW9uKCl7aWYodGhpcy5FYylmb3IodmFyIGI9MDtiPHRoaXMuRWMubGVuZ3RoO2IrKyl7dmFyIGE9dGhpcy5FY1tiXSxjPWEuc1BsYXllclNlbGVjdG9yLGQ9Im9iamVjdCI7InN0cmluZyI9PT10eXBlb2YgYS5vRXZlbnRUeXBlJiYoZD1hLm9FdmVudFR5cGUpO2lmKHRoaXMuY2FbY11bZF0mJjA8dGhpcy5jYVtjXVtkXS5sZW5ndGgpZm9yKHZhciBlPTA7ZTx0aGlzLmNhW2NdW2RdLmxlbmd0aDtlKyspdGhpcy5jYVtjXVtkXVtlXShhKX19LHZpZGVvcGtnSW50ZXJmYWNlOmZ1bmN0aW9uKGIpeyJhdXRvUmVzaXplQ2FsbGJhY2tCZWZvcmUiIT1iLm9FdmVudFR5cGUuaCYmCiJhdXRvUmVzaXplQ2FsbGJhY2tBZnRlciIhPWIub0V2ZW50VHlwZS5oJiZ4LnR1KGIpfX0pfSkoYyk7dmFyIGpiPWMuVmx8fGpiLHg9bmV3IGpiKHIpO2NhKCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTGs9dGhpcy5hWzFdO3RoaXMuRXA9dGhpcy5hWzZdO3RoaXMuaj10aGlzLmFbNV19Yy5lbz1iO2IucHJvdG90eXBlPXtLazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTGs6dGhpcy5EcChhKX0sRHA6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLkVwOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuajphfX19KShjKTt2YXIga2I9Yy5lb3x8a2IsRWM9bmV3IGtiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9RWMuS2soNCk7CihmdW5jdGlvbihjKXtjLlhpPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubXV0ZWQ9ITE7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSYXdQbGF5ZXIoKSk7dGhpcy5ZKGIpO3ZhciBhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07YXx8KGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO3RoaXMuWihhKX0scGF1c2U6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5wYXVzZSgpfSl9LHBsYXk6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5wbGF5KCl9KX0sVmE6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5pc1BsYXlpbmcoKSYmCmIucGF1c2UoKX0pfSx2YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm11dGVkfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkJpbGRNZWRpYVBsYXllciJ9fSl9KShjKTt2YXIgbGI9Yy5YaXx8bGI7KGZ1bmN0aW9uKGMpe2MuWWk9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7JCgiIyIrYikuZGF0YSgibWVkaWFwbGF5ZXIiKS50aGVuKGZ1bmN0aW9uKGEpe3RoaXMucGxheWVyLm11dGVkPWEuZGF0YS5tdXRlZDthLm9uKCJlcnJvciIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIkVycm9yIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7YS5vbigidGltZXVwZGF0ZSIsZnVuY3Rpb24oKXtpZighYS5pc1BsYXlpbmd8fGEuaXNQbGF5aW5nKCkpYS5pc0FkJiZhLmlzQWQoKT90aGlzLncoKTphLmRhdGEmJmEuZGF0YS5hZHMmJmEuZGF0YS5hZHMudmFzdCYmYS5kYXRhLmFkcy52YXN0LnNyY2VzPwoodGhpcy5vKCJub0FkIiwicGxheWVkIiksdGhpcy5JKCkpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vKCJub0FkIiwicGxheWVkIik7dGhpcy5JKCEwKX0uYmluZCh0aGlzKSwyNTApfS5iaW5kKHRoaXMpKTthLm9uKCJwYXVzZSIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIndhaXRpbmciLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKTthLm9uKCJhZEVycm9yIixmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKTthLm9uKCJBZEVycm9yIixmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKTthLm9uKCJBZExvYWRlZCIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIkFkU3RhcnRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7YS5vbigiQWRWaWRlb1N0YXJ0IixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTthLm9uKCJBZFBsYXlpbmciLGZ1bmN0aW9uKCl7dGhpcy53KCl9LmJpbmQodGhpcykpO2Eub24oIkFkVmlkZW9GaXJzdFF1YXJ0aWxlIiwKZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7YS5vbigiQWRWaWRlb01pZHBvaW50IixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTthLm9uKCJBZFZpZGVvVGhpcmRRdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSl9LmJpbmQodGhpcykpfX0pfSkoYyk7dmFyIG1iPWMuWWl8fG1iOyhmdW5jdGlvbihjKXtjLlppPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm1lZGlhcGxheWVyIik7aWYod2luZG93LmRlJiZ3aW5kb3cuZGUuYmlsZCYmd2luZG93LmRlLmJpbGQubWVkaWFwbGF5ZXImJmImJjA8Yi5sZW5ndGgpZm9yKHZhciBhIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGM9YlthXSxkPSIiO3RyeXtkPWMuZ2V0QXR0cmlidXRlKCJpZCIpfWNhdGNoKGUpe2Q9Yy5pZH1pZihkJiYkKCIjIitkKS5kYXRhKCJtZWRpYXBsYXllciIpKXRyeXt2YXIgZz0KbmV3IGxiKGQpO3RoaXMuTihnKXx8KHRoaXMuUChnKSwobmV3IG1iKGcsdGhpcy5LKSkuZygpKX1jYXRjaChrKXt9fXRoaXMuUigpfSxOOmZ1bmN0aW9uKGIpe3ZhciBhPWIuZ2V0UmF3UGxheWVyKCk7JCgiIyIrYSk7Zm9yKHZhciBjIGluIHRoaXMuTWEpaWYoYT09dGhpcy5NYVtjXS5nZXRSYXdQbGF5ZXIoKSlyZXR1cm4hMDtyZXR1cm4gdGhpcy5NYVtiLmphKCldPyEwOiExfX0pfSkoYyk7dmFyIG5iPWMuWml8fG5iLG9iPW5ldyBuYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5Fbz10aGlzLmFbNF07dGhpcy50dj10aGlzLmFbMV07dGhpcy5mbT10aGlzLmFbNl07dGhpcy5vcD10aGlzLmFbM107dGhpcy5qPXRoaXMuYVsyXX1jLndyPWI7Yi5wcm90b3R5cGU9e0RvOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Fbzp0aGlzLnN2KGEpfSxzdjpmdW5jdGlvbihhKXtyZXR1cm4gMTwKYT90aGlzLnR2OnRoaXMuZW0oYSl9LGVtOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5mbTp0aGlzLm5wKGEpfSxucDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMub3A6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBwYj1jLndyfHxwYixGYz1uZXcgcGIoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1GYy5Ebyg0KTsoZnVuY3Rpb24oYyl7Yy5Vaz11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPSExO3RoaXMuZ2V0UmF3UGxheWVyKCkuZW52dmFycyYmdGhpcy5nZXRSYXdQbGF5ZXIoKS5lbnZ2YXJzKCk7dGhpcy5nZXRSYXdQbGF5ZXIoKS5jb250YWluZXJJRCYmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSYXdQbGF5ZXIoKS5jb250YWluZXJJRCkpOwpiJiYoYT1iKTt0aGlzLlkoYik7dGhpcy5aKGEpO3RoaXMuaHQodGhpcy5nZXRSYXdQbGF5ZXIoKSxiKTt0aGlzLmdldFJhd1BsYXllcigpfSxwYXVzZTpmdW5jdGlvbigpe30scGxheTpmdW5jdGlvbigpe30saHQ6ZnVuY3Rpb24oYixhKXtiJiZiLnBhdXNlRXZlbnQmJmEuYWRkRXZlbnRMaXN0ZW5lcihiLnBhdXNlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiZ0aGlzLmhhLnBhdXNlJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5wYXVzZSYmdGhpcy5oYS5wYXVzZSgpfS5iaW5kKHRoaXMpKTtiJiZiLnJlc3VtZUV2ZW50JiZhLmFkZEV2ZW50TGlzdGVuZXIoYi5yZXN1bWVFdmVudCxmdW5jdGlvbigpe3RoaXMuaGEmJnRoaXMuaGEucmVzdW1lJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5yZXN1bWUmJnRoaXMuaGEucmVzdW1lKCl9LmJpbmQodGhpcykpO2ImJmIubXV0ZUV2ZW50JiZhLmFkZEV2ZW50TGlzdGVuZXIoYi5tdXRlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiYKdGhpcy5oYS5tdXRlJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5tdXRlJiZ0aGlzLmhhLm11dGUoKX0uYmluZCh0aGlzKSk7YiYmYi51bm11dGVFdmVudCYmYS5hZGRFdmVudExpc3RlbmVyKGIudW5tdXRlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiZ0aGlzLmhhLnVubXV0ZSYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuaGEudW5tdXRlJiZ0aGlzLmhhLnVubXV0ZSgpfS5iaW5kKHRoaXMpKX0sU2c6ZnVuY3Rpb24oYil7dGhpcy5oYT1ifSxPOmZ1bmN0aW9uKCl7cmV0dXJuIk9ubHlIT01BRCJ9fSl9KShjKTt2YXIgcWI9Yy5Va3x8cWI7KGZ1bmN0aW9uKGMpe2MuVGs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKTt0aGlzLmVpPSExfSxnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKSxhPXRoaXMuZ2V0UGxheWVyKCk7Yi5hdXRvc3RhcnQmJiF0aGlzLmVpJiYodGhpcy5JKCksdGhpcy5laT0hMCx0aGlzLnJhKCkpOwphLklhKCkuYWRkRXZlbnRMaXN0ZW5lcihiLnBsYXlFdmVudCxmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKX19KX0pKGMpO3ZhciByYj1jLlRrfHxyYjsoZnVuY3Rpb24oYyl7Yy5Waz1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtKXtpZihtLnBsYXllcil7dmFyIGI9bS5wbGF5ZXI7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGIpdHJ5e2I9YigpfWNhdGNoKGEpe2UudHJhY2soIm9ubHlIT01BRENvbmZGYWlsZWQiLCIiLCEwKX1mb3IodmFyIGM9ITEsZD0wO2Q8Yi5sZW5ndGg7ZCsrKWM9bmV3IHFiKGJbZF0pLHRoaXMuTihjKXx8KHRoaXMuUChjKSwobmV3IHJiKGMsdGhpcy5LKSkuZygpKX19ZWxzZSB0aGlzLlIoKX19KX0pKGMpO3ZhciBzYj1jLlZrfHxzYixYPW5ldyBzYihyKTtYLmcoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CnRoaXMueGw9dGhpcy5hWzddO3RoaXMuemo9dGhpcy5hWzNdO3RoaXMud289dGhpcy5hWzddO3RoaXMueWk9dGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbNV19Yy5Ccj1iO2IucHJvdG90eXBlPXt3bDpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMueGw6dGhpcy55aihhKX0seWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnpqOnRoaXMudm8oYSl9LHZvOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMud286dGhpcy54aShhKX0seGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLnlpOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuajphfX19KShjKTt2YXIgdGI9Yy5Ccnx8dGIsR2M9bmV3IHRiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9R2Mud2woNCk7KGZ1bmN0aW9uKGMpe2MuR209dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSwKUzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCkucGFyZW50Tm9kZTt0aGlzLlkoYik7Yj10aGlzLmdldFJhd1BsYXllcigpO3RoaXMuWihiKTt0aGlzLmlzUGxheWluZz0hMTtiLmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5pc1BsYXlpbmc9ITB9LmJpbmQodGhpcykpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheSgpfSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGI/Yi5tdXRlZDohMH0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5jdXJyZW50VGltZX0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5kdXJhdGlvbn0sTmE6ZnVuY3Rpb24oKXswPHRoaXMuZ2V0RHVyYXRpb24oKSYmMDx0aGlzLmdldEN1cnJlbnRUaW1lKCkmJgoxLjU+dGhpcy5nZXREdXJhdGlvbigpLXRoaXMuZ2V0Q3VycmVudFRpbWUoKSYmdGhpcy5WPygwLHRoaXMuVikoKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuTmEoKX0uYmluZCh0aGlzKSw0MDApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIldGdjQifX0pfSkoYyk7dmFyIHViPWMuR218fHViOyhmdW5jdGlvbihjKXtjLkZtPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LFJiOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKSxiPWIuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIuaW1hQWRzTG9hZGVyfSxndDpmdW5jdGlvbihiKXtiLmFkZEV2ZW50TGlzdGVuZXIoZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUixmdW5jdGlvbihhKXthPWEuZ2V0RXJyb3IoKTthLmdldEVycm9yQ29kZSgpO3RoaXMuJGF8fCh0aGlzLiRhPVtdKTt0aGlzLiRhLnB1c2goYS5nZXRFcnJvckNvZGUoKSk7MTAwOT09YS5nZXRFcnJvckNvZGUoKXx8CjMwMz09YS5nZXRFcnJvckNvZGUoKXx8NDAzPT1hLmdldEVycm9yQ29kZSgpP3RoaXMudGEoKTp0aGlzLm8oImFkZXJyb3IiLGEuZ2V0RXJyb3JDb2RlKCkpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkc01hbmFnZXJMb2FkZWQiLGZ1bmN0aW9uKCl7dGhpcy5uYz0hMDt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yi5hZGRFdmVudExpc3RlbmVyKCJsb2ciLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKX0sZzpmdW5jdGlvbigpe3RoaXMucygpO3RoaXMuZ2V0UGxheWVyKCk7dGhpcy5BYT90aGlzLmd0KHRoaXMuQWEpOih0aGlzLkFhPXRoaXMuUmIoKSx3aW5kb3cuc2V0VGltZW91dCh0aGlzLmcuYmluZCh0aGlzKSwxMDApKX0sczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCk7aWYoYi5pc1BsYXlpbmcmJjE8Yi5nZXRDdXJyZW50VGltZSgpKXtpZighdGhpcy5BYSl7dGhpcy5JKCk7cmV0dXJufWlmKCF0aGlzLm5jKXt0aGlzLkkoKTtyZXR1cm59Yj0hMDtpZih0aGlzLiRhJiYKdGhpcy4kYS5sZW5ndGgmJjE8dGhpcy4kYS5sZW5ndGgpZm9yKHZhciBhPTA7YTx0aGlzLiRhLmxlbmd0aC0xO2ErKykxMDA5IT10aGlzLiRhW2FdJiYzMDMhPXRoaXMuJGFbYV0mJjQwMyE9dGhpcy4kYVthXSYmKGI9ITEpO2lmKGIpdGhpcy53KCJlbXB0eSIpLHRoaXMudGEoKTtlbHNle3RoaXMuSSgpO3JldHVybn19d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoKX0uYmluZCh0aGlzKSw1MDApfX0pfSkoYyk7dmFyIHZiPWMuRm18fHZiOyhmdW5jdGlvbihjKXtjLkhtPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe3RoaXMuVWE9LTE7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIik7aWYod2luZG93LndmdjRfaHRtbDVfcGxheWVyJiYwPGIubGVuZ3RoKWZvcih2YXIgYSBpbiBiKXt2YXIgYz1uZXcgdWIoYi5pdGVtKGEpKTt0aGlzLk4oYyl8fC0xPT1jLmlkLnNlYXJjaCgidmlkZW9fIil8fCh0aGlzLlAoYyksCihuZXcgdmIoYyx0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIHdiPWMuSG18fHdiLHhiPW5ldyB3YihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5McT10aGlzLmFbN107dGhpcy5Vcj10aGlzLmFbMl07dGhpcy5Hbz10aGlzLmFbNl07dGhpcy52cj10aGlzLmFbOV07dGhpcy5Edj10aGlzLmFbM107dGhpcy56bj10aGlzLmFbMV07dGhpcy5xcz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbN119Yy5Qcz1iO2IucHJvdG90eXBlPXtLcTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuTHE6dGhpcy5UcihhKX0sVHI6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLlVyOnRoaXMuRm8oYSl9LEZvOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5Hbzp0aGlzLnVyKGEpfSx1cjpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMudnI6dGhpcy5DdihhKX0sQ3Y6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8CmE/dGhpcy5Edjp0aGlzLnluKGEpfSx5bjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuem46dGhpcy5wcyhhKX0scHM6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLnFzOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLmo6YX19fSkoYyk7dmFyIHliPWMuUHN8fHliLEhjPW5ldyB5YigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPUhjLktxKDQpOyhmdW5jdGlvbihjKXtjLkhsPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm10di1wbGF5ZXItY29udGFpbmVyIilbMF07dGhpcy5ZKGIpO3RoaXMuWihiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdKTt0aGlzLlVlPSExfSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCk7CndpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpe3RoaXMuV3MoKX0uYmluZCh0aGlzKSw1MDApfSxXczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UG9zaXRpb24oKSxhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiZ0aGlzLlYmJnRoaXMuVigpfSxnZXREdXJhdGlvbjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT0wO2IucGxheWJhY2suZ2V0RHVyYXRpb24mJihhPWIucGxheWJhY2suZ2V0RHVyYXRpb24oKSk7cmV0dXJuIGF9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPTA7Yi5wbGF5YmFjay5nZXRQb3NpdGlvbiYmKGE9Yi5wbGF5YmFjay5nZXRQb3NpdGlvbigpKTtyZXR1cm4gYX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBsYXliYWNrLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLlVlJiZ3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLlVlKTsKdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5YmFjay5wbGF5KCl9LGlzUGxheWluZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIucGxheWJhY2smJmIucGxheWJhY2suZ2V0UGxheVN0YXRlPyhiLnBsYXliYWNrLmdldFBsYXlTdGF0ZSgpLCJwbGF5aW5nIj09Yi5wbGF5YmFjay5nZXRQbGF5U3RhdGUoKSk6ITF9LFp0OmZ1bmN0aW9uKCl7dGhpcy5VZT13aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt0aGlzLnBhdXNlKCl9LmJpbmQodGhpcyksMTApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIlJvY2tlcnkifX0pfSkoYyk7dmFyIHpiPWMuSGx8fHpiOyhmdW5jdGlvbihjKXtjLkdsPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSk7dGhpcy5mYz0wfSxnOmZ1bmN0aW9uKCl7dGhpcy5Tcj0xMDt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO3RoaXMuZmN8fCh0aGlzLmZjPTAsYi5hZGRFdmVudExpc3RlbmVyKCJhZEVycm9yIiwKZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiKTt0aGlzLnMoKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXt9KSk7d2luZG93LnZpZGVvcGxhemE/KHdpbmRvdy52aWRlb3BsYXphLmJ1aWxkRGF0ZXx8KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpLHdpbmRvdy52aWRlb3BsYXphLmNvcmU/KHdpbmRvdy52aWRlb3BsYXphLmNvcmUuQWRDYWxsTW9kdWxlfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5UcmFja2VyfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5tb2RlbHx8KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpLHdpbmRvdy52aWRlb3BsYXphLmNvcmUucGFyc2V8fCh0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGF6YSIpLAp0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5yZXF1ZXN0fHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSkpOih0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGF6YSIpLHRoaXMucygpKSx3aW5kb3cudmlkZW9wbGF6YS52ZXJzaW9uTnVtYmVyfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSkpOih0aGlzLmZjfHx0aGlzLmZjKyssdGhpcy5mYzw9dGhpcy5Tcj8odGhpcy5mYysrLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksNTAwKSk6KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nKCk/KHRoaXMuZ2V0UGxheWVyKCkuWnQoKSx0aGlzLkkoKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoKX0uYmluZCh0aGlzKSwxMDApfX0pfSkoYyk7CnZhciBBYj1jLkdsfHxBYjsoZnVuY3Rpb24oYyl7Yy5JbD1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJtdHYtcGxheWVyLWNvbnRhaW5lciIpLGE9ITE7YiYmYlswXSYmKGE9YlswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSkmJmFbMF0mJndpbmRvdy5wbGF5ZXJBcGkmJndpbmRvdy5wbGF5ZXJBcGkucGxheWJhY2smJmImJihiPW5ldyB6Yih3aW5kb3cucGxheWVyQXBpKSx0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBBYihiLHRoaXMuSykpLmcoKSkpO3RoaXMuUigpfX0pfSkoYyk7dmFyIEJiPWMuSWx8fEJiLENiPW5ldyBCYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5GbD10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbOF19Yy52cD1iO2IucHJvdG90eXBlPQp7RWw6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkZsOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuajphfX19KShjKTt2YXIgRGI9Yy52cHx8RGIsSWM9bmV3IERiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9SWMuRWwoNCk7KGZ1bmN0aW9uKGMpe2MuQ2w9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS5wYXJlbnROb2RlLnBhcmVudE5vZGU7dGhpcy5ZKGIpO2I9dGhpcy5nZXRSYXdQbGF5ZXIoKTt0aGlzLlooYik7dGhpcy5pc1BsYXlpbmc9ITE7Yi5hZGRFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIixmdW5jdGlvbigpe3RoaXMuaXNQbGF5aW5nPSEwfS5iaW5kKHRoaXMpKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlKCl9LApwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5KCl9LGdldEN1cnJlbnRUaW1lOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPSIiO2IuY3VycmVudFRpbWUmJihhPWIuY3VycmVudFRpbWUpO3JldHVybiBhfSxnZXREdXJhdGlvbjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT0wO2IuZHVyYXRpb24mJihhPWIuZHVyYXRpb24pO3JldHVybiBhfSxOYTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0Q3VycmVudFRpbWUoKSxhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiZhJiYxPmEtYj90aGlzLlYoKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuTmEoKX0uYmluZCh0aGlzKSwyMDApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIlJhZGlhbnRNUCJ9fSl9KShjKTt2YXIgRWI9Yy5DbHx8RWI7KGZ1bmN0aW9uKGMpe2MuQmw9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLmdldFBsYXllcigpLklhKCksYT10aGlzLmdldFBsYXllcigpLnZpZGVvVGFnO2EmJmEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZHN0YXJ0IixmdW5jdGlvbigpe3RoaXMucmEoKTt0aGlzLmdldFBsYXllcigpLmlzUGxheWluZz0hMX0uYmluZCh0aGlzKSk7dGhpcy5nZXRQbGF5ZXIoKTtiLmFkZEV2ZW50TGlzdGVuZXIoInBsYXlpbmciLGZ1bmN0aW9uKCl7dGhpcy5ObygpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkbG9hZGVkIixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkc3RhcnRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yj10aGlzLnBkKCk7MDxiLmdldEN1cnJlbnRUaW1lKCk/dGhpcy5HcigpOnRoaXMuZ2coKTtiLmF1dG9wbGF5JiZ3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuT2YoKXx8KHRoaXMubygiY29udGVudHBsYXkiKSx0aGlzLnMoITApKX0uYmluZCh0aGlzKSwKMUUzKX0sTm86ZnVuY3Rpb24oKXt0aGlzLk9mKCl8fHRoaXMucyghMCl9LEdyOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wZCgpOyFiLm5hJiZiLlcmJmIuT3YmJmIuUXYmJih0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIiksdGhpcy5zKCkpfSxnZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMucGQoKTtiLmFkc0xvYWRlcj9iLmFkc0xvYWRlci5hZGRFdmVudExpc3RlbmVyKGdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUuQURfRVJST1IsZnVuY3Rpb24oYSl7dmFyIGI7YTp7YT1hLmdldEVycm9yKCk7Zm9yKGIgaW4gYSlpZigibnVtYmVyIj09dHlwZW9mIGFbYl0pe2I9YVtiXTticmVhayBhfWI9dm9pZCAwfTEwMDk9PWJ8fDMwMz09Ynx8NDAzPT1iPyh0aGlzLncoKSx0aGlzLnRhKCkpOih0aGlzLm8oImFkZXJyb3IiLGIpLHRoaXMucygpKX0uYmluZCh0aGlzKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmdnKCl9LmJpbmQodGhpcyksMTAwKX0scGQ6ZnVuY3Rpb24oKXtpZighdGhpcy5uaClmb3IodmFyIGI9Cm0ucGxheWVyYXBpKCksYT10aGlzLmdldFBsYXllcigpLklhKCkuaWQsYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10uaWQ9PWEmJih0aGlzLm5oPWJbY10pO3JldHVybiB0aGlzLm5ofSxodzpmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuaW1hPyFpbWEudmlkZW8uY2xpZW50LmpzVGFnJiYhaW1hLnZpZGVvLmNsaWVudC50YWdnZWQmJiFpbWEudmlkZW8uY2xpZW50LmdldEVEYXRhOiExfSxzOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nP2I/dGhpcy5wZCgpLmFkc0xvYWRlcj90aGlzLkkoITApOnRoaXMuSSgpOnRoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwKX19KX0pKGMpO3ZhciBGYj1jLkJsfHxGYjsoZnVuY3Rpb24oYyl7Yy5EbD1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtJiZtLnBsYXllcmFwaSl7dmFyIGI9bS5wbGF5ZXJhcGkoKTtpZihiLmxlbmd0aCl7Zm9yKHZhciBhPQowO2E8Yi5sZW5ndGg7YSsrKXt2YXIgYz1uZXcgRWIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYlthXS5pZCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pO3RoaXMuTihjKXx8KHRoaXMuUChjKSwobmV3IEZiKGMsdGhpcy5LKSkuZygpKX1yZXR1cm59fXRoaXMuUigpfX0pfSkoYyk7dmFyIEdiPWMuRGx8fEdiLEhiPW5ldyBHYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5lcD10aGlzLmFbMV07dGhpcy51aT10aGlzLmFbMTBdO3RoaXMuSWk9dGhpcy5hWzZdO3RoaXMud3M9dGhpcy5hWzddO3RoaXMueG49dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbMl19Yy5RbD1iO2IucHJvdG90eXBlPXtjcDpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLmVwOnRoaXMudGkoYSl9LHRpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy51aTp0aGlzLkhpKGEpfSxIaTpmdW5jdGlvbihhKXtyZXR1cm4gMTA8CmE/dGhpcy5JaTp0aGlzLnZzKGEpfSx2czpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMud3M6dGhpcy53bihhKX0sd246ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLnhuOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuajphfX19KShjKTt2YXIgSWI9Yy5RbHx8SWIsSmM9bmV3IEliKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9SmMuY3AoNCk7KGZ1bmN0aW9uKGMpe2MuRWs9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5wbGF5ZXIuaWQpO0cmJihiPWIuZmlyc3RDaGlsZCk7aWYoYil7dGhpcy5ZKGIpO2lmKGIudGFnTmFtZSl7dmFyIGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXTthfHwoYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7CmF8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImVtYmVkIilbMF0pfWE/dGhpcy5aKGEpOnRoaXMucGEoKX1lbHNlIHRoaXMucGEoKX0sZnc6ZnVuY3Rpb24oKXt2YXIgYj0hMTswPD1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpLmluZGV4T2YoInNwaWVnZWwuZGUiKSYmKGI9ITApO3JldHVybiBifSxwYXVzZTpmdW5jdGlvbigpe2lmKEcpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7d2luZG93Ll9wbGF5LmNvbnRyb2wuaW50ZXJhY3QucGF1c2UoYi5pZCl9ZWxzZSB3aW5kb3cuX3BsYXkuYWRkb25zLnN2bS5zZW5kQ29tbWFuZCgicGF1c2UiKX0scGxheTpmdW5jdGlvbigpe2lmKEcpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7d2luZG93Ll9wbGF5LmNvbnRyb2wuaW50ZXJhY3QucGxheShiLmlkKX1lbHNlIHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLnNlbmRDb21tYW5kKCJwbGF5Iil9LFZhOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy52aWRlb1RhZztyZXR1cm4gYiYmIWIucGF1c2VkPwoodGhpcy5wYXVzZSgpLCEwKTohMX0sTzpmdW5jdGlvbigpe3JldHVybiJuZXh0In0sSGM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSWE6ZnVuY3Rpb24oKXt2YXIgYjtHPyhiPXRoaXMuZ2V0UmF3UGxheWVyKCksYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChiLmlkKS5maXJzdENoaWxkKTpiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLmdldFBsYXllckNvbnRhaW5lcigpKTtiIT10aGlzLmNvbnRhaW5lciYmKHRoaXMuY29udGFpbmVyPWIpO3JldHVybiB0aGlzLmNvbnRhaW5lcn19KX0pKGMpO3ZhciBZPWMuRWt8fFk7KGZ1bmN0aW9uKGMpe2MuRGs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMuV2U9IiI7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtiJiYodGhpcy5XZT1iLmlkKTtHP3dpbmRvdy5fcGxheS5jb25maWcuYWRkQWRkb25MaXN0ZW5lcihmdW5jdGlvbihhKXt2YXIgYj0KYS5wbGF5ZXJDb250YWluZXI7YiYmdGhpcy5XZSYmYiE9dGhpcy5XZXx8ImFkZXJyb3IiIT1hLmV2ZW50fHxlLkJhKCJ0ZWxlNS5kZSIpJiYicG9zdHJvbGwiPT1hLmFkVHlwZXx8KGEuYWRVUkwmJihtLmFkVGFnPWEuYWRVUkwpLHRoaXMubygiYWRlcnJvciIsYS5rdyksdGhpcy5JKCksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnJhKCl9LmJpbmQodGhpcyksMTAwKSl9LmJpbmQodGhpcyksInN2bSIpOndpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLnNldExpc3RlbmVyKGZ1bmN0aW9uKGEpeyJhZGVycm9yIj09YSYmKHRoaXMubygiYWRlcnJvciIpLHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDEwMCkpfS5iaW5kKHRoaXMpKX19KX0pKGMpO3ZhciBaPWMuRGt8fFo7KGZ1bmN0aW9uKGMpe2MuRms9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93Ll9wbGF5JiYKd2luZG93Ll9wbGF5LmFkZG9ucyYmd2luZG93Ll9wbGF5LmFkZG9ucy5zdm0pe0c9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLmdldFBsYXllckNvbnRhaW5lcj8hMTohMDt2YXIgYjtpZihHKWZvcih2YXIgYT13aW5kb3cuX3BsYXkuY29udHJvbC5nZXRJbnN0YW5jZXMoKSxjPWEubGVuZ3RoLGQ9MDtkPGM7ZCsrKXtpZihiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFbZF0pKWI9bmV3IFkoYiksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFooYix0aGlzLkspLGIuZygpKX1lbHNlIGlmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQod2luZG93Ll9wbGF5LmFkZG9ucy5zdm0uZ2V0UGxheWVyQ29udGFpbmVyKCkpKWI9bmV3IFkoYiksYi5xYT90aGlzLmFmKCk6dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFooYix0aGlzLkspLGIuZygpKX10aGlzLlIoKX19KX0pKGMpO3ZhciBHLEpiPWMuRmt8fEpiLEtiPW5ldyBKYihoYSk7Yz1jfHwKe307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnhwPXRoaXMuYVs1XTt0aGlzLlFtPXRoaXMuYVs3XTt0aGlzLlNtPXRoaXMuYVs0XTt0aGlzLnNpPXRoaXMuYVs5XTt0aGlzLnZqPXRoaXMuYVs4XTt0aGlzLlhsPXRoaXMuYVs5XTt0aGlzLkV1PXRoaXMuYVsxMF07dGhpcy5ZdD10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs0XX1jLllvPWI7Yi5wcm90b3R5cGU9e3dwOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy54cDp0aGlzLlBtKGEpfSxQbTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuUW06dGhpcy5SbShhKX0sUm06ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5TbTp0aGlzLnJpKGEpfSxyaTpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuc2k6dGhpcy51aihhKX0sdWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLnZqOnRoaXMuV2woYSl9LFdsOmZ1bmN0aW9uKGEpe3JldHVybiA1PAphP3RoaXMuWGw6dGhpcy5EdShhKX0sRHU6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLkV1OnRoaXMuWHQoYSl9LFh0OmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5ZdDp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLmo6YX19fSkoYyk7dmFyIExiPWMuWW98fExiLEtjPW5ldyBMYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPUtjLndwKDQpOyhmdW5jdGlvbihjKXtjLk5tPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpO2lmKGImJmJbMF0pe2Zvcih2YXIgYT1iPWJbMF07YSYmYS5wYXJlbnROb2RlOyl7aWYoIkJPRFkiPT1hLnBhcmVudE5vZGUubm9kZU5hbWUpe2E9YS5wYXJlbnROb2RlO2JyZWFrfWE9YS5wYXJlbnROb2RlfXRoaXMuWihiKTsKdGhpcy5ZKGEpO3RoaXMuU2Q9ITE7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhkRXZlbnQiLGZ1bmN0aW9uKGEpe2lmKGEuZGV0YWlsKXtpZigiY29udGVudFBsYXllclBsYXkiPT1hLmRldGFpbC5uYW1lKXRyeXt3aW5kb3cuREw4X29uQWRDb21wbGV0ZWQoKSx0aGlzLlNkPSExfWNhdGNoKGIpe31pZigiYWRSZXF1ZXN0Ij09YS5kZXRhaWwubmFtZSl0cnl7dGhpcy5TZHx8KHRoaXMuU2Q9ITAsd2luZG93LkRMOF9vbkFkU3RhcnRlZCgpKX1jYXRjaChjKXt9fX0uYmluZCh0aGlzKSl9ZWxzZSB0aGlzLnBhKCl9LHBhdXNlOmZ1bmN0aW9uKCl7dHJ5e3dpbmRvdy5ETDhfb25Db250ZW50UGF1c2VSZXF1ZXN0ZWQoKX1jYXRjaChiKXt0aGlzLnZpZGVvVGFnLnBhdXNlKCl9fSxwbGF5OmZ1bmN0aW9uKCl7dHJ5e3dpbmRvdy5ETDhfb25Db250ZW50UmVzdW1lUmVxdWVzdGVkKCl9Y2F0Y2goYil7dGhpcy52aWRlb1RhZy5wbGF5KCl9fSxWYTpmdW5jdGlvbigpe2lmKCF0aGlzLnZpZGVvVGFnLnBhdXNlZClyZXR1cm4gdGhpcy5wYXVzZSgpLAohMH0sTzpmdW5jdGlvbigpe3JldHVybiJ4eW1hdGljIn19KX0pKGMpO3ZhciBNYj1jLk5tfHxNYjsoZnVuY3Rpb24oYyl7Yy5NbT12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxpdDpmdW5jdGlvbihiKXtiJiZiLmFkZEV2ZW50TGlzdGVuZXImJihiLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBsZXRlIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJpbXByZXNzaW9uIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJmaXJzdHF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJtaWRwb2ludCIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigidGhpcmRxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigiYWRzTWFuYWdlckxvYWRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigiYWRzRXJyb3IiLApmdW5jdGlvbihhKXt0aGlzLmJkKGEpfS5iaW5kKHRoaXMpKSxiLmFkZEV2ZW50TGlzdGVuZXIoImFkRXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuYmQoYSl9LmJpbmQodGhpcykpKTtiJiZiLmFkZEFkRXJyb3JMaXN0ZW5lciYmYi5hZGRBZEVycm9yTGlzdGVuZXIoZnVuY3Rpb24oYSl7dGhpcy5iZChhKX0uYmluZCh0aGlzKSl9LGJkOmZ1bmN0aW9uKGIpe3ZhciBhPXt9O2IuZ2V0RXJyb3ImJihiLmdldEVycm9yKCksYT1iLmdldEVycm9yKCkpO2EuZ2V0RXJyb3JDb2RlPyhhLmdldEVycm9yQ29kZSgpLHRoaXMubygiYWRlcnJvciIsYS5nZXRFcnJvckNvZGUoKSksMTAwOT09YS5nZXRFcnJvckNvZGUoKXx8MzAzPT1hLmdldEVycm9yQ29kZSgpfHw0MDM9PWEuZ2V0RXJyb3JDb2RlKCk/dGhpcy53KCk6dGhpcy5JKCkpOih0aGlzLm8oIm5vZnJhbWV3b3JrIiksdGhpcy5JKCkpfSxMZjpmdW5jdGlvbigpe2lmKHdpbmRvdy5fX2RsOF9hZEVycm9yRXZlbnRCdWNrZXQpZm9yKHZhciBiPTA7YjwKd2luZG93Ll9fZGw4X2FkRXJyb3JFdmVudEJ1Y2tldC5sZW5ndGg7YisrKXRoaXMuYmQod2luZG93Ll9fZGw4X2FkRXJyb3JFdmVudEJ1Y2tldFtiXSk7dGhpcy51YSgpfHx3aW5kb3cuc2V0VGltZW91dCh0aGlzLkxmLmJpbmQodGhpcyksMTAwKX0sZzpmdW5jdGlvbigpe3dpbmRvdy5fX2RsOF9hZHNMb2FkZXImJnRoaXMuaXQod2luZG93Ll9fZGw4X2Fkc0xvYWRlcik7dGhpcy5MZigpfX0pfSkoYyk7dmFyIE5iPWMuTW18fE5iOyhmdW5jdGlvbihjKXtjLk9tPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe2lmKHdpbmRvdy5ETDhfR0xPQkFMUyl7dmFyIGI9bmV3IE1iKHdpbmRvdy5ETDhfR0xPQkFMUyk7Yi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLChuZXcgTmIoYix0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIE9iPWMuT218fE9iLFBiPW5ldyBPYihoYSk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT0KQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLkZyPXRoaXMuYVsyXTt0aGlzLklzPXRoaXMuYVs4XTt0aGlzLlhuPXRoaXMuYVsxXTt0aGlzLlVqPXRoaXMuYVszXTt0aGlzLlpxPXRoaXMuYVs5XTt0aGlzLmo9dGhpcy5hWzZdfWMuRm49YjtiLnByb3RvdHlwZT17RXI6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLkZyOnRoaXMuSHMoYSl9LEhzOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5Jczp0aGlzLlduKGEpfSxXbjpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuWG46dGhpcy5UaihhKX0sVGo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlVqOnRoaXMuWXEoYSl9LFlxOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5acTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLmo6YX19fSkoYyk7dmFyIFFiPWMuRm58fFFiLExjPW5ldyBRYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLAoibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1MYy5Fcig0KTsoZnVuY3Rpb24oYyl7Yy5qbT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt0aGlzLnJoPSExO3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7aWYoYi52aWRlb01vZGVsKXt2YXIgYT1iLnZpZGVvTW9kZWwuZ2V0KCJwbGF5ZXJFbGVtZW50Iik7aWYoYSl7dGhpcy5ZKGEpO3ZhciBjPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07Y3x8KGM9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO2M/KHRoaXMuWihjKSxiLnZpZGVvTW9kZWwub2JzZXJ2ZSgicG9zaXRpb24iLGZ1bmN0aW9uKGEpe3RoaXMuYXM9YX0uYmluZCh0aGlzKSksYi52aWRlb01vZGVsLm9ic2VydmUoImR1cmF0aW9uIixmdW5jdGlvbihhKXt0aGlzLmR1cmF0aW9uPWF9LmJpbmQodGhpcykpKTp0aGlzLnBhKCl9ZWxzZSB0aGlzLnBhKCl9ZWxzZSB0aGlzLnBhKCl9LApxdzpmdW5jdGlvbigpe30sdmE6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLGE9MTtyZXR1cm4gYi52aWRlb01vZGVsJiZiLnZpZGVvTW9kZWwuZ2V0JiYoYT1iLnZpZGVvTW9kZWwuZ2V0KCJ2b2x1bWUiKSwwPGEpPyExOiEwfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkudmlkZW9Nb2RlbC5wYXVzZSgpfSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb01vZGVsLnBsYXkoKX0sVmE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb01vZGVsLmdldCgiaXNQYXVzZWQiKT8hMToodGhpcy5wYXVzZSgpLCEwKX0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc30sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kdXJhdGlvbn0sTzpmdW5jdGlvbigpe3JldHVybiJ0djIifSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkudmlkZW9Nb2RlbC5vYnNlcnZlKCJwb3NpdGlvbiIsCmZ1bmN0aW9uKGIpe3RoaXMuTWQoYil9LmJpbmQodGhpcykpfSxNZDpmdW5jdGlvbihiKXt0aGlzLmdldFJhd1BsYXllcigpO3RoaXMuZ2V0Q3VycmVudFRpbWUoKT5iJiYoYj10aGlzLmdldEN1cnJlbnRUaW1lKCkpO3ZhciBhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiYhdGhpcy5yaCYmKHRoaXMucmg9ITAsdGhpcy5WJiZ0aGlzLlYoKSl9fSl9KShjKTt2YXIgUD1jLmptfHxQOyhmdW5jdGlvbihjKXtjLmltPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LEFhOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZighdGhpcy5wZSlpZih0aGlzLkFifHwodGhpcy5BYj0wKSx0aGlzLkFiKyssMTU8dGhpcy5BYil7aWYod2luZG93LmltYSYmd2luZG93LmltYS5jb21tb24mJndpbmRvdy5pbWEuSW1hU2RrU2V0dGluZ3MmJndpbmRvdy5pbWEuY29tbW9uLmdldFZpZGVvTWV0YWRhdGEmJndpbmRvdy5pbWEuY29tbW9uLnRyaWdnZXJNZWFzdXJhYmxlRXZlbnQpcmV0dXJuIHdpbmRvdy5jYW5SdW5BZHM/CnRoaXMuSXQoKTp0aGlzLnMoITApLCEwO3RoaXMubygibm9mcmFtZXdvcmsiLCJJTUEiKTtiLnZpZGVvTW9kZWwuZ2V0KCJhZFRhZ1VybCIpP3RoaXMucygpOnRoaXMucyghMCl9ZWxzZSBpZihiPWIudmlkZW9Nb2RlbC5nZXQoImFkc0xvYWRlciIpKXt0aGlzLnBlPSEwO3ZhciBhPSJhZEVycm9yIjt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudCYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7Yi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhKTt0aGlzLmRhfHwodGhpcy5vKCJhZGVycm9yIix0aGlzLlQpLHRoaXMucygpKX0uYmluZCh0aGlzKSl9ZWxzZSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuQWEoKX0uYmluZCh0aGlzKSwxMCl9LHZkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF9LApnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYz0hMDtjfHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGM9ITApOyJudW1iZXIiPT10eXBlb2YgYT8oYi5UPWEsYi5vKCJhZGVycm9yIixhKSk6Yi5vKCJhZGVycm9yIil9cmV0dXJuIGN9Yi5vcmlnaW5hbEV2ZW50JiYoYj1iLm9yaWdpbmFsRXZlbnQpO2lmKGIuZ2V0RXJyb3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmdldEVycm9yKXt2YXIgYz1iLmdldEVycm9yKCk7aWYoYy5nZXRFcnJvckNvZGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLmdldEVycm9yQ29kZSYmYShjLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7cmV0dXJufX1mb3IodmFyIGQgaW4gYilpZihiLmhhc093blByb3BlcnR5KGQpJiZiW2RdJiZiW2RdLmFkRXJyb3ImJmJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJgoiZnVuY3Rpb24iPT10eXBlb2YgYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmYShiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTticmVha319LGc6ZnVuY3Rpb24oKXt0aGlzLlQ9dGhpcy5UfHwhMTt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO3RoaXMuQWEoKTtiLnZpZGVvTW9kZWwub2JzZXJ2ZSgicGxheVN0YXRlIixmdW5jdGlvbihhKXsicGxheWluZyI9PWEmJih0aGlzLmlzUGxheWluZz0hMCl9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJwbGF5TW9kZSIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJjdXJyZW50QWRTZWdtZW50IixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7Yi52aWRlb01vZGVsLm9ic2VydmUoImlzQWRzUGxheWluZyIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9yIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7CmIudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9ycyIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9yc1giLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKTtiLnZpZGVvTW9kZWwub2JzZXJ2ZSgiTk9OX0VWRU5UIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSl9LHM6ZnVuY3Rpb24oYil7dGhpcy5pc1BsYXlpbmc/dGhpcy5JKGIpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwKX19KX0pKGMpO3ZhciBRPWMuaW18fFE7KGZ1bmN0aW9uKGMpe2Mua209cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpO3RoaXMuVWE9LTF9LGc6ZnVuY3Rpb24oKXtpZih3aW5kb3cuaW5zZXJ0ZWRQbGF5ZXIpe3ZhciBiPW5ldyBQKHdpbmRvdy5pbnNlcnRlZFBsYXllcik7Yi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKX1pZih3aW5kb3cuVFYyUGxheWVycyYmCndpbmRvdy5UVjJQbGF5ZXJzLmxlbmd0aClmb3IodmFyIGE9MDthPHdpbmRvdy5UVjJQbGF5ZXJzLmxlbmd0aDthKyspYj1uZXcgUCh3aW5kb3cuVFYyUGxheWVyc1thXSksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKTtlbHNlIGlmKHdpbmRvdy5UVjJQbGF5ZXJzKWZvcihhIGluIHdpbmRvdy5UVjJQbGF5ZXJzKXdpbmRvdy5UVjJQbGF5ZXJzLmhhc093blByb3BlcnR5KGEpJiZ3aW5kb3cuVFYyUGxheWVyc1thXS52aWRlb01vZGVsJiYoYj1uZXcgUCh3aW5kb3cuVFYyUGxheWVyc1thXSksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKSk7dGhpcy5hZigpO3RoaXMuUigpfX0pfSkoYyk7dmFyIFJiPWMua218fFJiLFNiPW5ldyBSYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy56bD0KdGhpcy5hWzFdO3RoaXMuVHE9dGhpcy5hWzRdO3RoaXMuS3M9dGhpcy5hWzFdO3RoaXMuTHA9dGhpcy5hWzddO3RoaXMuaj10aGlzLmFbNl19Yy5MbT1iO2IucHJvdG90eXBlPXt5bDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuemw6dGhpcy5TcShhKX0sU3E6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlRxOnRoaXMuSnMoYSl9LEpzOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Lczp0aGlzLktwKGEpfSxLcDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuTHA6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBUYj1jLkxtfHxUYixNYz1uZXcgVGIoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1NYy55bCg0KTsoZnVuY3Rpb24oYyl7Yy50az11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXJDb250YWluZXI7dGhpcy5ZKGIpO3ZhciBhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07YXx8KGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO3RoaXMuWihhKTthJiZ0aGlzLlkoYS5wYXJlbnROb2RlKX0sTzpmdW5jdGlvbigpe3JldHVybiJsYW9sYTEifSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5hcGkucGxheSgpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkuYXBpLnBhdXNlKCl9fSl9KShjKTt2YXIgYWE9Yy50a3x8YWE7KGZ1bmN0aW9uKGMpe2Muc2s9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMuT2c9MDt0aGlzLlQ9dGhpcy5UfHwhMTt0aGlzLmdldFBsYXllcigpO3RoaXMuZGE9dGhpcy5CYz10aGlzLkFhPXRoaXMuWWM9ITE7dGhpcy52aD1lLkViKDEwKTsKdGhpcy5YZygpfSxYZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7aWYoYi5zdWJQbGF5ZXImJmIuc3ViUGxheWVyLmFkc0ludGVyZmFjZSYmYi5zdWJQbGF5ZXIuYWRzSW50ZXJmYWNlLmFkc0xvYWRlcilyZXR1cm4gdGhpcy5uYT1iLnN1YlBsYXllci5hZHNJbnRlcmZhY2UuYWRzTG9hZGVyLHRoaXMub2IoKSwhMDt0aGlzLk9nKys7aWYoMTA8dGhpcy5PZyl0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIiksd2luZG93LmltYSYmd2luZG93LmltYS5jb21tb24mJndpbmRvdy5pbWEuSW1hU2RrU2V0dGluZ3M/dGhpcy5zKCEwKTp0aGlzLnMoKTtlbHNlIHJldHVybiB3aW5kb3cuc2V0VGltZW91dCh0aGlzLlhnLmJpbmQodGhpcyksMTAwKSwhMX0sb2I6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm5hO2lmKGIpe3ZhciBhPSJhZEVycm9yIixjPSJsb2ciO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiYKZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYoYz1nb29nbGUuaW1hLkFkRXZlbnQuVHlwZS5MT0cpOyJmdW5jdGlvbiIhPT10eXBlb2YgYi5hZGRFdmVudExpc3RlbmVyP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKTooYi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKGMsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCk7dGhpcy5mYSghMCl9LmJpbmQodGhpcykpKX1lbHNlIHRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLm9iKCl9LmJpbmQodGhpcyksCjIwKX0sZ2E6ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYShhLGIpe3ZhciBjPSExO2lmKGEpe2lmKDEwMDk9PWF8fDMwMz09YXx8NDAzPT1hKWM9ITA7Y3x8IWEuaW5kZXhPZnx8LTE9PT1hLmluZGV4T2YoIjEwMDkiKSYmLTE9PT1hLmluZGV4T2YoIjMwMyIpJiYtMT09PWEuaW5kZXhPZigiNDAzIil8fChjPSEwKTsibnVtYmVyIj09dHlwZW9mIGEmJihiLlQ9YSxiLm8oImFkZXJyb3IiLGEpKX1yZXR1cm4gY31iLm9yaWdpbmFsRXZlbnQmJihiPWIub3JpZ2luYWxFdmVudCk7aWYoYi5nZXRFcnJvciYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0RXJyb3Ipe3ZhciBjPWIuZ2V0RXJyb3IoKTtpZihjLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuZ2V0RXJyb3JDb2RlJiZhKGMuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTtyZXR1cm59fWZvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkmJmJbZF0mJmJbZF0uYWRFcnJvciYmYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmCiJmdW5jdGlvbiI9PXR5cGVvZiBiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlJiZhKGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO2JyZWFrfX0sdmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYX0sRGE6ZnVuY3Rpb24oKXt0aGlzLmRhPSEwfSxmYTpmdW5jdGlvbihiKXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZGE/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwMCl9LHM6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTthLmFwaS5wbGF5ZWQmJmEuYXBpLnBsYXllZCgpP3RoaXMuSShiKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMucyhiKX0uYmluZCh0aGlzKSwxMCl9fSl9KShjKTt2YXIgYmE9Yy5za3x8YmE7KGZ1bmN0aW9uKGMpe2MudWs9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9ITE7CmlmKHdpbmRvdy5sMVBsYXllckluc3RhbmNlJiZ3aW5kb3cubDFQbGF5ZXJJbnN0YW5jZS5sZW5ndGgmJjA8d2luZG93LmwxUGxheWVySW5zdGFuY2UubGVuZ3RoKWZvcih2YXIgYT0wO2E8d2luZG93LmwxUGxheWVySW5zdGFuY2UubGVuZ3RoO2ErKyliPW5ldyBhYSh3aW5kb3cubDFQbGF5ZXJJbnN0YW5jZVswXSksdGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IGJhKGIsdGhpcy5LKSxiLmcoKSk7ZWxzZSB3aW5kb3cucGxheWVyJiZ3aW5kb3cucGxheWVyLmFwaSYmd2luZG93LnBsYXllci5sMVBsYXllciYmKGI9bmV3IGFhKHdpbmRvdy5wbGF5ZXIpLHRoaXMuTihiKXx8KHRoaXMuUChiKSxiPW5ldyBiYShiLHRoaXMuSyksYi5nKCkpKTt0aGlzLlIoKX19KX0pKGMpO3ZhciBVYj1jLnVrfHxVYixWYj1uZXcgVWIocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTnU9dGhpcy5hWzJdOwp0aGlzLmtzPXRoaXMuYVs5XTt0aGlzLmJwPXRoaXMuYVsxXTt0aGlzLnd2PXRoaXMuYVsxMF07dGhpcy5Kaz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbM119Yy5Hbj1iO2IucHJvdG90eXBlPXtNdTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuTnU6dGhpcy5qcyhhKX0sanM6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5rczp0aGlzLmFwKGEpfSxhcDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuYnA6dGhpcy52dihhKX0sdnY6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnd2OnRoaXMuSWsoYSl9LElrOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5Kazp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLmo6YX19fSkoYyk7dmFyIFdiPWMuR258fFdiLE5jPW5ldyBXYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPQpOYy5NdSg0KTsoZnVuY3Rpb24oYyl7Yy5Xaj11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPSExO3RyeXtiPXRoaXMuZ2V0UmF3UGxheWVyKClbMF0ucGFyZW50Tm9kZSxhPXRoaXMuZ2V0UmF3UGxheWVyKClbMF19Y2F0Y2goYyl7fWImJmE/KHRoaXMuWShiKSx0aGlzLlooYSksdGhpcy5nZXRSYXdQbGF5ZXIoKSk6dGhpcy5wYSgpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkuY3NzKCJkaXNwbGF5Iiwibm9uZSIpfSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5jc3MoImRpc3BsYXkiLCJibG9jayIpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkdBTlZpZGVvIn19KX0pKGMpO3ZhciBYYj1jLldqfHxYYjsoZnVuY3Rpb24oYyl7Yy5Waj12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dGhpcy5mZygpfSxmZzpmdW5jdGlvbihiKXt3aW5kb3cuR0FOX1ZpZGVvfHwKKGI/KHRoaXMubygibm9mcmFtZXdvcmsiLCJJTUEiKSx0aGlzLkkoKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmZnKCEwKX0uYmluZCh0aGlzKSwxMDApKX19KX0pKGMpO3ZhciBZYj1jLlZqfHxZYjsoZnVuY3Rpb24oYyl7Yy5Yaj1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2FtZSIpO2lmKGImJiJESVYiPT1iLm5vZGVOYW1lJiZ3aW5kb3cudmlkZW9hZF9nYW5fc3RhcnQmJndpbmRvdy4kJiZ3aW5kb3cuJCgiZGl2I2dhbWUiKSl7Yj1uZXcgWGIod2luZG93LiQoImRpdiNnYW1lIikpO2lmKGIucWEpe3RoaXMuUigpO3JldHVybn1pZighdGhpcy5OKGIpKXt0aGlzLlAoYik7KG5ldyBZYihiLHRoaXMuSykpLmcoKTt0aGlzLlIoKTtyZXR1cm59fXRoaXMuUigpfX0pfSkoYyk7dmFyIFpiPWMuWGp8fFpiLCRiPW5ldyBaYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPQpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMueGo9dGhpcy5hWzldO3RoaXMuYW89dGhpcy5hWzNdO3RoaXMuR3Y9dGhpcy5hWzVdO3RoaXMuaj10aGlzLmFbNV19Yy5NcT1iO2IucHJvdG90eXBlPXt3ajpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMueGo6dGhpcy4kbihhKX0sJG46ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmFvOnRoaXMuRnYoYSl9LEZ2OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuR3Y6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBhYz1jLk1xfHxhYyxPYz1uZXcgYWMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1PYy53aig0KTsoZnVuY3Rpb24oYyl7Yy5raT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0KdGhpcy5nZXRSYXdQbGF5ZXIoKS5nZXRXcmFwcGVyKCk7Yj8odGhpcy5ZKGIpLChiPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pP3RoaXMuWihiKTp0aGlzLnBhKCkpOnRoaXMucGEoKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlVmlkZW8oKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheVZpZGVvKCl9LE86ZnVuY3Rpb24oKXtyZXR1cm4iQVYifX0pfSkoYyk7dmFyIGJjPWMua2l8fGJjOyhmdW5jdGlvbihjKXtjLmppPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2Iub24oImFkRXJyb3IiLGZ1bmN0aW9uKCl7d2luZG93LnNldFRpbWVvdXQodGhpcy5zLmJpbmQodGhpcyksMTAwKX0uYmluZCh0aGlzKSk7Yi5vbigiYWRGcmFtZXdvcmtOb3RBdmFpbGFibGUiLGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcykpOwp0aGlzLmhlKCk7dGhpcy5iZygpfSxnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYz0hMDtjfHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGM9ITApOyJudW1iZXIiPT10eXBlb2YgYSYmKGIuVD1hLGIubygiYWRlcnJvciIsYSkpfXJldHVybiBjfWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTtpZihiLmdldEVycm9yJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5nZXRFcnJvcil7dmFyIGM9Yi5nZXRFcnJvcigpO2lmKGMuZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5nZXRFcnJvckNvZGUmJmEoYy5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO3JldHVybn19Zm9yKHZhciBkIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSYmYltkXSYmYltkXS5hZEVycm9yJiYKYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJmEoYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7YnJlYWt9fSx2ZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhfSxEYTpmdW5jdGlvbigpe3RoaXMuZGE9ITA7dGhpcy53KCJlbXB0eSB2YXN0Iil9LGJnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZihiLmdldFNlbGVjdGVkQWRIYW5kbGVyKWlmKChiPWIuZ2V0U2VsZWN0ZWRBZEhhbmRsZXIoKSkmJmIuYWRzTG9hZGVyKWZvcih2YXIgYT0wO2E8Yi5hZHNMb2FkZXIubGVuZ3RoO2ErKyl7dmFyIGM9ImFkRXJyb3IiO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SJiYKKGM9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7Yi5hZHNMb2FkZXJbYV0uYWRkRXZlbnRMaXN0ZW5lcihjLGZ1bmN0aW9uKGEpe2EuZ2V0RXJyb3ImJihhPWEuZ2V0RXJyb3IoKSk7dmFyIGI9ITE7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYj0hMDtpZighYilmb3IodmFyIGMgaW4gYSl7aWYoYVtjXSYmYVtjXS5pbmRleE9mJiYoLTEhPWFbY10uaW5kZXhPZigiMTAwOSIpfHwtMSE9YVtjXS5pbmRleE9mKCIzMDMiKXx8LTEhPWFbY10uaW5kZXhPZigiNDAzIikpKXtiPSEwO2JyZWFrfWlmKGFbY10mJigxMDA5PT1hW2NdfHwzMDM9PWFbY118fDQwMz09YVtjXSkpe2I9ITA7YnJlYWt9fWI/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKCl9LmJpbmQodGhpcykpfWVsc2Ugd2luZG93LnNldFRpbWVvdXQodGhpcy5iZy5iaW5kKHRoaXMpLDUwKTtlbHNlIHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuaGUuYmluZCh0aGlzKSwxMDApfSxoZTpmdW5jdGlvbigpe2lmKCF0aGlzLnVhKCkpe3ZhciBiPQp0aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyJwbGF5aW5nIj09Yi5nZXRQbGF5U3RhdGUoKT9iLmdldEFkSW5mbygpPyh3aW5kb3cuc2V0VGltZW91dCh0aGlzLnJhLmJpbmQodGhpcyksMTApLHRoaXMudygpKTpiLl9wbGF5ZXJPcHRpb25zJiZiLl9wbGF5ZXJPcHRpb25zLnBsYXlBZHZlcnRpc2VtZW50c3x8Yi5fYWRSZWdpc3RlcmVkP3RoaXMucygpOnRoaXMucyghMCk6d2luZG93LnNldFRpbWVvdXQodGhpcy5oZS5iaW5kKHRoaXMpLDEwMCl9fSxzOmZ1bmN0aW9uKGIpe3dpbmRvdy5zZXRUaW1lb3V0KHRoaXMucmEuYmluZCh0aGlzKSwxRTQpO3RoaXMuSShiKX19KX0pKGMpO3ZhciBjYz1jLmppfHxjYzsoZnVuY3Rpb24oYyl7Yy5saT1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFhhOmZ1bmN0aW9uKGIpe2I9bmV3IGJjKGIpO2IucWE/dGhpcy5SKCk6dGhpcy5OKGIpfHwodGhpcy5QKGIpLChuZXcgY2MoYix0aGlzLkspKS5nKCkpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93LnNyYXZ2cGxQbGF5ZXJJbnN0YW5jZXMpZm9yKHZhciBiPQowO2I8d2luZG93LnNyYXZ2cGxQbGF5ZXJJbnN0YW5jZXMubGVuZ3RoO2IrKyl0aGlzLlhhKHdpbmRvdy5zcmF2dnBsUGxheWVySW5zdGFuY2VzW2JdKTtlbHNlIHdpbmRvdy5zZXR1cFBsYXllckVsZW1lbnQ/dGhpcy5YYSh3aW5kb3cuc2V0dXBQbGF5ZXJFbGVtZW50KTp0aGlzLlIoKX19KX0pKGMpO3ZhciBkYz1jLmxpfHxkYyxlYz1uZXcgZGMocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuSW49dGhpcy5hWzNdO3RoaXMuU2o9dGhpcy5hWzJdO3RoaXMuVm49dGhpcy5hWzldO3RoaXMud2k9dGhpcy5hWzRdO3RoaXMuUmk9dGhpcy5hWzNdO3RoaXMubW09dGhpcy5hWzZdO3RoaXMuJGw9dGhpcy5hWzFdO3RoaXMua289dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbM119Yy5ncz1iO2IucHJvdG90eXBlPXtIbjpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuSW46dGhpcy5SaihhKX0sClJqOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuU2o6dGhpcy5VbihhKX0sVW46ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlZuOnRoaXMudmkoYSl9LHZpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy53aTp0aGlzLlFpKGEpfSxRaTpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMuUmk6dGhpcy5sbShhKX0sbG06ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLm1tOnRoaXMuWmwoYSl9LFpsOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy4kbDp0aGlzLmpvKGEpfSxqbzpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMua286dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBmYz1jLmdzfHxmYyxQYz1uZXcgZmMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1QYy5Ibig0KTtjPWN8fHt9OwooZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuWmc9dGhpcy5haD10aGlzLiRnPSExO3RoaXMuQWQ9W107dGhpcy4kZT17R0FOVmlkZW86InVuZGVmaW5lZCI9PT10eXBlb2YgJGI/bnVsbDokYixsYW9sYTFQbGF5ZXI6InVuZGVmaW5lZCI9PT10eXBlb2YgVmI/bnVsbDpWYixWaWRlb0pTOiJ1bmRlZmluZWQiPT09dHlwZW9mIEJhP251bGw6QmEsYml0bW92aW46InVuZGVmaW5lZCI9PT10eXBlb2YgVT9udWxsOlUsb3ZWaWRlbzoidW5kZWZpbmVkIj09PXR5cGVvZiBHYT9udWxsOkdhLFJhZGlhbnRNUDoidW5kZWZpbmVkIj09PXR5cGVvZiBIYj9udWxsOkhiLGp3OiJ1bmRlZmluZWQiPT09dHlwZW9mIHdhP251bGw6d2EsdHYyOiJ1bmRlZmluZWQiPT09dHlwZW9mIFNiP251bGw6U2IsdGZtc3VpdGVQbGF5ZXI6InVuZGVmaW5lZCI9PT10eXBlb2YgeD9udWxsOngsbmV4dFBsYXllcjoidW5kZWZpbmVkIj09PXR5cGVvZiBLYj9udWxsOktiLHh5bWF0aWNQbGF5ZXI6InVuZGVmaW5lZCI9PT0KdHlwZW9mIFBiP251bGw6UGIsYmlsZE1lZGlhUGxheWVyOiJ1bmRlZmluZWQiPT09dHlwZW9mIG9iP251bGw6b2IsT295YWxhOiJ1bmRlZmluZWQiPT09dHlwZW9mIGRiP251bGw6ZGIsUm9ja2VyeToidW5kZWZpbmVkIj09PXR5cGVvZiBDYj9udWxsOkNiLGluUmVhZDoidW5kZWZpbmVkIj09PXR5cGVvZiBMYT9udWxsOkxhLHdmdjQ6InVuZGVmaW5lZCI9PT10eXBlb2YgeGI/bnVsbDp4YixBVlBsYXllckRldGVjdGlvbjoidW5kZWZpbmVkIj09PXR5cGVvZiBlYz9udWxsOmVjLE9ubHlIT01BRDoidW5kZWZpbmVkIj09PXR5cGVvZiBYP251bGw6WH19Yy50bD1iO2IucHJvdG90eXBlPXtnOmZ1bmN0aW9uKCl7dmFyIGE9W10sYT1hLmxlbmd0aD90aGlzLm9xKGEpOltdLGI7dGhpcy5haD0hMDtpZihhLmxlbmd0aCl7dGhpcy4kZz0hMDtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyliPWFbY10sdGhpcy5BaChiKX1lbHNlIGZvcihjIGluIHRoaXMuJGUpe2lmKHRoaXMuWmcpYnJlYWs7CmI9dGhpcy4kZVtjXTt0aGlzLnZmKGIpJiYodGhpcy5BZC5wdXNoKGIpLHRoaXMuQWgoYikpfX0sdmY6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEgaW5zdGFuY2VvZiBxPyEwOiExfSxvcTpmdW5jdGlvbihhKXt2YXIgYj1bXSxjO2lmKCFhfHwhYS5sZW5ndGgpcmV0dXJuIGI7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspYz1hW2VdLGM9dGhpcy4kZVtjXSx0aGlzLnZmKGMpJiZiLnB1c2goYyk7cmV0dXJuIGJ9LEFoOmZ1bmN0aW9uKGEpe3RoaXMudmYoYSkmJmEuZygpfSxhdTpmdW5jdGlvbihhKXtpZihhJiZhIGluc3RhbmNlb2YgdSYmIXRoaXMuJGcpZm9yKHRoaXMuWmc9ITAsYT0wO2E8dGhpcy5BZC5sZW5ndGg7YSsrKXRoaXMuQWRbYV0uSGImJndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5BZFthXS5IYil9fX0pKGMpO3ZhciBnYz1jLnRsfHxnYyxOPW5ldyBnYztOLmcoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CnRoaXMueHU9dGhpcy5hWzZdO3RoaXMuS2o9dGhpcy5hWzZdO3RoaXMuWm09dGhpcy5hWzFdO3RoaXMuR2k9dGhpcy5hWzEwXTt0aGlzLkd1PXRoaXMuYVsyXTt0aGlzLllyPXRoaXMuYVs1XTt0aGlzLlJxPXRoaXMuYVsxMF07dGhpcy5qPXRoaXMuYVsyXX1jLlp1PWI7Yi5wcm90b3R5cGU9e3d1OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMueHU6dGhpcy5KaihhKX0sSmo6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLktqOnRoaXMuWW0oYSl9LFltOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5abTp0aGlzLkZpKGEpfSxGaTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuR2k6dGhpcy5GdShhKX0sRnU6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLkd1OnRoaXMuWHIoYSl9LFhyOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuWXI6dGhpcy5RcShhKX0sUXE6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlJxOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMjwKYT90aGlzLmo6YX19fSkoYyk7dmFyIGhjPWMuWnV8fGhjLFFjPW5ldyBoYygxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPVFjLnd1KDQpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oYyl7aWYoYy5lcnJvciBpbnN0YW5jZW9mIFJlZmVyZW5jZUVycm9yKXt2YXIgYj1jLmZpbGVuYW1lP2MuZmlsZW5hbWU6IiI7aWYoLTEhPWIuaW5kZXhPZigiaG9tYWQiKXx8LTEhPWIuaW5kZXhPZigiaGQtbWFpbiIpKWI9Yy5tZXNzYWdlP2MubWVzc2FnZToiIixjPWMuZXJyb3Iuc3RhY2s/Yy5lcnJvci5zdGFjazoiIiwtMSE9Yi5pbmRleE9mKCJpcyBub3QgZGVmaW5lZCIpPyhjPWIuc3Vic3RyaW5nKGIuaW5kZXhPZigiOiIpKzEsYi5pbmRleE9mKCJpcyBub3QiKS0xKSxlLndjKGsuUnUpLGUudHJhY2soInN0YXRzX2hkX3ZhcmRlbGV0ZWQiLGMsCiEwKSk6LTEhPWMuaW5kZXhPZigic2V0QCIpJiYoZS53YyhrLmVzKSxlLnRyYWNrKCJzdGF0c19oZF92YXJub3RzZXQiLCIiLCEwKSl9fSk7dmFyIEU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7RS53aWR0aD0xO0UuaGVpZ2h0PTE7RS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJwbXRtdnMiKTtFLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoRSk7dmFyIFJjPUUuY29udGVudFdpbmRvdy5zZXRJbnRlcnZhbC5iaW5kKHdpbmRvdyksa2M9RS5jb250ZW50V2luZG93LnNldFRpbWVvdXQuYmluZCh3aW5kb3cpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoRSk7dmFyIEk9bmV3IEosbT0hMTtJLmlhKCk7SS5UZygpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKEkuaWEoKSxmdW5jdGlvbihjKXttfHwobT1jLmRldGFpbCl9LCExKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihJLlRnKCksZnVuY3Rpb24oYyl7bXx8KG09Yy5kZXRhaWwpfSwhMSk7CkkuaWEoKTt2YXIgU2M9UmMoZnVuY3Rpb24oKXtlLnZnKHdpbmRvdyxJLmZyKCkse2lkOlNjfSl9LDUwMCksamE9ZS5iYSgxMCk7ZmEoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy50aj10aGlzLmFbNF07dGhpcy56dj10aGlzLmFbMl07dGhpcy5waj10aGlzLmFbOF07dGhpcy5DcD10aGlzLmFbOF07dGhpcy5aaz10aGlzLmFbNl07dGhpcy5QbD10aGlzLmFbM107dGhpcy5Iaj10aGlzLmFbN107dGhpcy5saz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbM119Yy5ydj1iO2IucHJvdG90eXBlPXtzajpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMudGo6dGhpcy55dihhKX0seXY6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLnp2OnRoaXMub2ooYSl9LG9qOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5wajp0aGlzLkJwKGEpfSxCcDpmdW5jdGlvbihhKXtyZXR1cm4gMjwKYT90aGlzLkNwOnRoaXMuWWsoYSl9LFlrOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5aazp0aGlzLk9sKGEpfSxPbDpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuUGw6dGhpcy5HaihhKX0sR2o6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5Iajp0aGlzLmtrKGEpfSxrazpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMubGs6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBpYz1jLnJ2fHxpYyxUYz1uZXcgaWMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1UYy5zaig0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuc2g9dGhpcy5jb25mPXRoaXMuamI9dGhpcy5wbGF5ZXI9bnVsbDt0aGlzLndkPTA7dGhpcy5aYT0iIjt0aGlzLkJkPVtdO3RoaXMuQ2Q9MDt0aGlzLnVoPSExO3RoaXMuWGU9CltdO2UubGIoIm5ld0FkZGVsaXZlcnkiKX1jLm1pPWI7Yi5wcm90b3R5cGU9e0d0OmZ1bmN0aW9uKGEpe3RoaXMuc2g9YX0sZmY6ZnVuY3Rpb24oYSl7dGhpcy5wbGF5ZXI9YTt0aGlzLlphPXRoaXMucGxheWVyLk8oKX0sZ2V0UGxheWVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGxheWVyfSxCdDpmdW5jdGlvbihhKXt0aGlzLmpiPWF9LEF0OmZ1bmN0aW9uKGEpe3RoaXMuY29uZj1hfSxIYTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNvbmZbYV07dGhpcy5jb25mW3RoaXMuWmFdJiZ0aGlzLmNvbmZbdGhpcy5aYV1bYV0mJihiPXRoaXMuY29uZlt0aGlzLlphXVthXSk7cmV0dXJuIGJ9LEljOmZ1bmN0aW9uKGEsYil7ZS5CYSgid2VsdC5kZSIpJiZlLllhKCJodHRwczovL2Fzdi5udWdnYWQubmV0L2JrP251Z2duPTE1Njk5MDUxMDImbnVnZ3NpZD0xOTgyMjE3NTUwJm51Z2dyaWQ9IitlbmNvZGVVUklDb21wb25lbnQobG9jYXRpb24uaHJlZikrIiZudWdnbD1odHRwcyUzQSUyRiUyRnd3MjUxLnNtYXJ0YWRzZXJ2ZXIuY29tJTJGdHJhY2slMkZjb21wLmFzcCUzRmtleXdvcmQlM0ROVUdHVkFSUyUyNnNpdGUlM0Q4NTE0NSIsCiJuZXRudWdnYWRhc3YiLHt9LGZ1bmN0aW9uKCl7fSxmdW5jdGlvbigpe30sdGhpcy5qYik7dmFyIGM9ITEsZj0hMTtpZih0aGlzLmdyKCkpdGhpcy5qYi5sKHRoaXMuamIucmQsdGhpcy5qYi5GYSx0aGlzLmpiLlplLGZ1bmN0aW9uKCl7dGhpcy5JYyhhLGIpfS5iaW5kKHRoaXMpLHRoaXMuamIuc2MpO2Vsc2UgaWYodGhpcy5FcSgpKXRoaXMud3QoZnVuY3Rpb24oKXt0aGlzLkljKGEsYil9LmJpbmQodGhpcykpO2Vsc2V7dGhpcy5wbGF5ZXIucGF1c2UoKTtlLnYoay5mZCx0aGlzLnBsYXllci51KCkpO3ZhciBnPXRoaXMuY29uZixsPW5ldyBZYSh0aGlzLmdldFBsYXllcigpLGcpO2ImJmwuY3UoKTtsLmV4aXRGdWxsc2NyZWVuKCk7ZS5sYigibmV3SG9tYWREaXNwbGF5Iik7Uz1sPW5ldyBRYShsLHRoaXMuamIsZyk7bC56dCh0aGlzLmNvbmYpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYSl7dmFyIG09ITE7dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyJiYobT10aGlzLnBsYXllci5nZXRSYXdQbGF5ZXIoKSk7CmE9YShtKX0oYT10aGlzLlJyKGEpKXx8ZS50cmFjaygic3RhdHNfaGRfbm9BZFRhZyIsInNob3ciLCEwKTsiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5wbGF5ZXIuR2UmJihjPXRoaXMucGxheWVyLkdlKCkpO2cuYWRTdGFydFRpbWVvdXQmJihmPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7fSxnLmFkU3RhcnRUaW1lb3V0fHw1RTQpKTtsLkllKGEsYyxmKTt0aGlzLnBsYXllci5DaChsKX19LGdyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IERhdGUsYj0wO2lmKHRoaXMud2QpcmV0dXJuIGI9YS5nZXRUaW1lKCktdGhpcy53ZC5nZXRUaW1lKCksdGhpcy53ZD1hLDNFNTxiPyEwOiExO3RoaXMud2Q9YTtyZXR1cm4hMX0sVnQ6ZnVuY3Rpb24oKXtlLmxiKCJwcmVyb2xsIik7ZS5lZigicHJlcm9sbCIpO3ZhciBhPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgicHJlcm9sbEFkVGFnIikmJihhPXRoaXMuSGEoInByZXJvbGxBZFRhZyIpKTsoYT10aGlzLnJnKGEpKT90aGlzLkljKGEpOihlLnRyYWNrKCJzdGF0c19oZF9ub0FkVGFnIiwKInByZSIsITApLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXIucGxheSgpfS5iaW5kKHRoaXMpLDApLGUudihrLmdkLHRoaXMucGxheWVyLnUoKSkpfSxVdDpmdW5jdGlvbihhKXtpZighdGhpcy5zaCl7ZS5lZigicG9zdHJvbGwiKTtlLmxiKCJwb3N0cm9sbCIpO3RoaXMuR3QoITApO3ZhciBiPXRoaXMuY29uZixjPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgicG9zdHJvbGxBZFRhZyIpJiYoYz10aGlzLkhhKCJwb3N0cm9sbEFkVGFnIikpOyhjPXRoaXMucmcoYykpP3RoaXMuSWMoYyxiLnBvc3Ryb2xsVXNlQ29tcGxldGVFdmVudD8hMDphKTooZS50cmFjaygic3RhdHNfaGRfbm9BZFRhZyIsInBvc3QiLCEwKSx0aGlzLnBsYXllci5wbGF5KCksZS52KGsuZ2QsdGhpcy5wbGF5ZXIudSgpKSl9fSxyZzpmdW5jdGlvbihhKXtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGEpe3ZhciBiPSExO3RoaXMucGxheWVyLmdldFJhd1BsYXllciYmKGI9dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyKCkpOwphPWEoYil9cmV0dXJuIGF9LGx0OmZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXIuS3QodGhpcy5VdC5iaW5kKHRoaXMpKTt0aGlzLnBsYXllci5OYSgpfSxIZDpmdW5jdGlvbihhKXtlLmxiKCJtaWRyb2xsIik7ZS5lZigibWlkcm9sbCIpO2lmKCF0aGlzLmhoKXt0aGlzLmhoPSEwO3ZhciBiPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgibWlkcm9sbEFkVGFnIikmJihiPXRoaXMuSGEoIm1pZHJvbGxBZFRhZyIpKTtiPyh0aGlzLkljKGIsYSksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmhoPSExfS5iaW5kKHRoaXMpLDFFMykpOihlLnRyYWNrKCJzdGF0c19oZF9ub0FkVGFnIiwibWlkIiwhMCksdGhpcy5wbGF5ZXIucGxheSgpLGUudihrLmdkLHRoaXMucGxheWVyLnUoKSkpfX0sa3Q6ZnVuY3Rpb24oKXt0aGlzLnBsYXllci5GdCh0aGlzLkhkLmJpbmQodGhpcykpO3RoaXMucGxheWVyLkxlKCl9LGc6ZnVuY3Rpb24oKXt0aGlzLlZ0KCk7dGhpcy5wbGF5ZXIuTGUmJnRoaXMua3QoKTsKdGhpcy5sdCgpfSxtdDpmdW5jdGlvbigpe3ZhciBhPVtdO2lmKHRoaXMuY29uZi55aWVsZGxhYil7dGhpcy5jb25mLnlpZWxkbGFiWzBdP2E9dGhpcy5jb25mLnlpZWxkbGFiOmFbMF09dGhpcy5jb25mLnlpZWxkbGFiO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKShmdW5jdGlvbihhLGIsYyxnKXt0aGlzLkJkLnB1c2goeyJmdW5jdGlvbiI6ZnVuY3Rpb24oZSl7dGhpcy5FdihhLGIsYyxnLGUpfS5iaW5kKGUpfSl9KS5jYWxsKHRoaXMsYVtiXS51cmwsYVtiXS5wbGFjZWhvbGRlcixhW2JdLmFsaWFzLGFbYl0ubWFjcm8pfXRoaXMuQ2Q9dGhpcy5CZC5sZW5ndGh9LEVxOmZ1bmN0aW9uKCl7dmFyIGE9ITE7MDx0aGlzLkNkJiYoYT0hMCk7cmV0dXJuIGF9LHd0OmZ1bmN0aW9uKGEpe3RoaXMudWg9YTtmb3IoYT0wO2E8dGhpcy5CZC5sZW5ndGg7YSsrKXRoaXMuQmRbYV1bImZ1bmN0aW9uIl0odGhpcy5acy5iaW5kKHRoaXMpKX0sWnM6ZnVuY3Rpb24oYSl7dGhpcy5DZC0tO2EmJnRoaXMuWGUucHVzaChhKTsKMD49dGhpcy5DZCYmdGhpcy51aCgpfSxScjpmdW5jdGlvbihhKXtmb3IodmFyIGI9IiIsYz0wO2M8dGhpcy5YZS5sZW5ndGg7YysrKWI9dGhpcy5YZVtjXSxhPWEucmVwbGFjZShiLm1hY3JvLGIucGxhY2Vob2xkZXIpO3JldHVybiBhfX19KShjKTt2YXIgZ2E9Yy5taXx8Z2EsUz0hMSxuYT0hMTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy55az10aGlzLmFbN107dGhpcy5TbD10aGlzLmFbNF07dGhpcy5ncD10aGlzLmFbMTBdO3RoaXMuWm49dGhpcy5hWzNdO3RoaXMuTnQ9dGhpcy5hWzFdO3RoaXMuaj10aGlzLmFbN119Yy5OcD1iO2IucHJvdG90eXBlPXt4azpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLnlrOnRoaXMuUmwoYSl9LFJsOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5TbDp0aGlzLmZwKGEpfSxmcDpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuZ3A6CnRoaXMuWW4oYSl9LFluOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5abjp0aGlzLk10KGEpfSxNdDpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTnQ6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuajphfX19KShjKTt2YXIgamM9Yy5OcHx8amMsVWM9bmV3IGpjKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9VWMueGsoNCl9KS5jYWxsKE9oamF1ZGlwQWxpZWNhaUosT2hqYXVkaXBBbGllY2FpSik7Cg==
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
52.219.73.107 Frankfurt am Main, Germany, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
s3.eu-central-1.amazonaws.com
Software
AmazonS3 /
Resource Hash
f1379a9c047773af19ec6c4f9a465e0147cbabc785342c01110b43304179196a

Request headers

Sec-Fetch-Mode
cors
Referer
https://videos.giga.de/embed/176875?autoplay=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:13 GMT
Last-Modified
Fri, 13 Sep 2019 04:34:56 GMT
Server
AmazonS3
x-amz-request-id
E9E064E05020F514
ETag
"3f42d83ce95b1a6eea170c73c8842d09"
Vary
Origin, Access-Control-Request-Headers, Access-Control-Request-Method
Access-Control-Allow-Methods
GET, POST
Content-Type
application/json
Access-Control-Allow-Origin
*
Access-Control-Max-Age
3000
Cache-Control
no-cache, no-store
Accept-Ranges
bytes
Content-Length
53
x-amz-id-2
up+yaQU/y+FdCpVVnrJVCU4PVFocPe/ZkZmJ8kDQmIl90GEvkNGXb7dTTAzD1abJuJyUW7c85mE=
Expires
0
giga-ssl.json
videos.giga.de/homad/ Frame 4364
265 B
436 B
XHR
General
Full URL
https://videos.giga.de/homad/giga-ssl.json?cache=1167050809
Requested by
Host: text
URL: data:text/javascript;base64,dmFyIE9oamF1ZGlwQWxpZWNhaUo9T2hqYXVkaXBBbGllY2FpSnx8e307CihmdW5jdGlvbihjKXtmdW5jdGlvbiBjYSgpe3guUmV8fCh4LlJlPTApO3guUmUrKzt3aW5kb3cudmlkZW9wa2dJbnRlcmZhY2UhPXgudmlkZW9wa2dJbnRlcmZhY2UmJih3aW5kb3cudmlkZW9wa2dJbnRlcmZhY2U9eC52aWRlb3BrZ0ludGVyZmFjZSk7MTA+eC5SZSYmd2luZG93LnNldFRpbWVvdXQoY2EsNTAwKX1mdW5jdGlvbiB6KCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIseik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIseik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIseik7ZGE9ITA7Zm9yKHZhciBjPTA7YzxDLmxlbmd0aDtjKyspQ1tjXS5sb2FkKCk7CmZvcihjPTA7YzxDLmxlbmd0aDtjKyspe3ZhciBiPUNbY10ucGxheSgpO2lmKHZvaWQgMCE9PWIpYi50aGVuKGZ1bmN0aW9uKCl7fSlbImNhdGNoIl0oZnVuY3Rpb24oKXt9KX1LJiYoSygpLEs9ITEpfWZ1bmN0aW9uIGVhKCl7dmFyIGM9d2luZG93Lk9PO2N8fChjPXdpbmRvdy5qT09QbGF5ZXJfMCk7cmV0dXJuIGN9ZnVuY3Rpb24gZmEoKXtpZihtKXttLnBhdXNlQnV0dG9ufHwobS5wYXVzZUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1sZWZ0OiA2cHg7cGFkZGluZy1ib3R0b206IDZweDsiIG9uZXJyb3I9InRoaXMuc3JjPVwnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9wYXVzZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlF6UTVOelUxTjBRMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UXpRNU56VTFOMFUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBETkRrM05UVTNRalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERORGszTlRVM1F6WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BnSG5DckVBQUFGMFNVUkJWSGphN0ptOWlvTkFFTWZqM1JVVzhTTWFQd2hhMjRjSTFsWldlWUxZK1FTV2dwVytnNCtVSm04UnRVMU1pbURsTGJjZ3dTUEhRY0xlempGVHpRNHkrOXZoUHlQTENrbVN6S0RaeCtsMGdnZDlQcC9oUWQ5dU4zalF3ekFnTkF0N213RTBsQWRDWXlOaXBSRWFOWTJWUm1pUTBOdnROZ3hEU1pLcXFqb2NEbU44dFZydGRqdlA4OXEyemZPY0krak5abE9XSmZVSlh4UkYxK3VWTG91aThIMmYrazNUa0NQeE1qM2lPQjU5V1pZSjkzaUFrWmpZdmYvM2xTYXFtRVJvMmtkeExxQW5TWVl2K3lITzQvUjRCTTFYcFJsRDQyLzhGeFhGUmtSTmc5UTB5SkdIallqeXdPbUJqZmlmRzdHdTYvdmw4WGlrYVlreitld2wyNzJUMjlIeldmYjcvWHE5ZGwyMzY3b3N5OGlTeGkrWEN3RU5na0FVUlJKTTA3VHYrK2UzRXh6SHdVWkU2RWVhbnMvbjRLQUYyN1lSbWdtMFpWbndvRTNUaEFkdEdBWTg2T1Z5aWRCTW9IVmRod2V0YVJvODZNVmlBUTlhVlZXRVpnS3RLQW84NkpmY1hGaERmMy9MNGQ4K0JSZ0ErUk5XU3hQaVI0d0FBQUFBU1VWT1JLNUNZSUk9Ii8+Jyk7Cm0ucGxheUJ1dHRvbnx8KG0ucGxheUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1sZWZ0OiA2cHg7cGFkZGluZy1ib3R0b206IDZweDsiIG9uZXJyb3I9InRoaXMuc3JjPVwnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9wbGF5MTgxMDAyLnBuZ1wnIiBzcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRHdBQUFBOENBSUFBQUMxbms0bEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeWhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVOaTFqTURZM0lEYzVMakUxTnpjME55d2dNakF4TlM4d015OHpNQzB5TXpvME1EbzBNaUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01UVWdLRTFoWTJsdWRHOXphQ2tpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2UXpRNU56VTFOemsyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZRelE1TnpVMU4wRTJOVVV3TVRGRk5UazVSamhCTTBNelEwVXhOMFUwUkRnaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcERORGszTlRVM056WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwRE5EazNOVFUzT0RZMVJUQXhNVVUxT1RsR09FRXpRek5EUlRFM1JUUkVPQ0l2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHZWa0dJa0FBQUhaU1VSQlZIamE3Smd4aXNKUUVJWjFYYkJSbXdoaURpQjZnVTB0cEJJRUM0dUFoVTBNQkZ2RlhxMFZQRUNDVm9MYWVnR0xpS1dGSGlDa2pyR3hqTE11aUd6QTNlVWx6L2ZZK2FzUW5QQmwvT2RsWnVLcXFzWjQwN3ZydXZ4Qm4wNG4vcUF2bHd0LzBMN3ZJelFOdmNVNEZOb0RvYkVRTWRNSWpaN0dUSDhxa2N2bFNPTFQ2WFM5WHQvdjkxVHQ0Wk9wV3ExMnU5MzVmSjVLcFh4YUlvV0dUTU9yRjR2RjlYcGRLQlQ0Z0w2WFJDYVRXU3dXalVhREJuUzRidXYxZW9QQjRDdjk3SG82K01SYXJXWVlSajZmNThBZWp3S0xMNWZMY3JrY0VYUWltODJTL0ZNZk53WHZKNVBKU3FVQ0Y3dmRqamw3UFA4MnRkdnR5V1FTK21rWStXZGNsdVhwZEFxR1lib1FneXFWU3NBTkJScWFwd1ZCSVBTMEpFay8vZ3dzRGltSG8zQ3oyZkNSNmJ1YXplWnNOaU8zT08zV1ZMcnB4YTNwbjhMUDU3T3U2K1NISUwxKytuQTRBTEhqT0s4ZkFuNFpicHJtY0Rqa1puSUJTMEFMdFZxdEdCcTNub2VESlRxZHp2RjQ1R2F3aFo1SlVaVFFpU08wUjcvZmh3YVYwV2s4R0c3YnRxWnBZQXh1VmdpV1piVmFMU2crcHZjZWorR2owV2c4SHROWTFvVHlGTS96VkZYZGJyZVVsaldFUXlnTTRkREJBWEdrSnY2bXVDaUt1TXREYUZ6MUlqUkNZeUZpcGhFYW9iRVFFZm9mUVY4RkdBQkdFSjRVNUZJZnp3QUFBQUJKUlU1RXJrSmdnZz09Ii8+Jyk7Cm0ubXV0ZUJ1dHRvbnx8KG0ubXV0ZUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1yaWdodDogNnB4O3BhZGRpbmctYm90dG9tOiA2cHg7IiBvbmVycm9yPSJ0aGlzLnNyYz1cJ2h0dHBzOi8vaG1kYXNzdHMuc2NobmVldm9ubW9yZ2VuLmNvbS9pbWcvbXV0ZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlEwWkNNRGMwUWpBMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UTBaQ01EYzBRakUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBETkRrM05UVTNSalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERORGszTlRVNE1EWTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1ByV2YzOGNBQUFKVVNVUkJWSGphN0ptL2p3RkJGTWU1dTNKUmM5UkVmZndCTGxHaW9ISTZqV3Y5QVZSWGllZ0ZDWTJ3Q2pyMDRoL2dMOUQ3MFlocTc1dWRaQ0xyZHRuZDJjM04zYnhpOHF6ZE41OTU3L3RtN2ZLV3kyVVBiL2F5MysvNWd6NGNEdnhCbjg5bi9xQVZSUkhRYnRpVGgwTVQ4aERRb2hGRnBnVzAwRFI3YUlXcDFldDF4WGxqQmkxSjBuQTR6R1F5TGtDejBiVFA1MnUzMjlGb0ZMNExUY0lBT2hRS3RWcXRXQ3hHUGpLQlJzVXd6bVl6UjZDUjNXNjM2L2Y3NlJFN0FiUFpMTWJwZElxd3lBSWM5cnZITGJFMSsxQU56cHRxY0dqZEdPOGVxS0FzeTdmRWowY29Gb3VWU2dVT1lZWHpxaHF0bGVsR1JLVnl1WnpCY3BQSjVJL0g3OHFqVkNwaEhBd0dpVVFDSFl6ek1WSkVqV05PMDFpeEhwYXg2UVdrcktsVUNrNi8zNmVzbWd0dkhSUHlzQ1pRVFpCUDFlQzhxL1lJNGwxNU9IVWIvMUtOcU1oYXhWejl3VVFDUWwyUHA5T3NQSFNoN2NqamVyVHB1SnBwSmduV2JjUS85YmhsVXg2T1pwcExlVGlWNmNWaWdUczhaNDNZNi9YSXg4bGtRZzZlVGlleWpOK2JhV3I0VVVVZEFtMkJYZ3V0Ti9kdXQxdXYxM3JmWXRaNFBHNXFNY3ZsVXJNTVRCRU9oMW51SHJKcUJsYzJHbzE4UG0raFJKRDd0WVB6UVcrY2UyYWFybGFybTgybVZxdFoxdFY4UHI5MmNPSHhlSFM4RVR1ZERxWnBOcHMybTRIU2o4ZGpFbUc3M1VJNVR1MGVtSVp3QndJQis4K0lsSDYxV2htRThscHJCWTJoS1VlakVlR09SQ0o4dkdHQ3VBdUZ3clVpK1hqREJPNTBPbzNSQldodk1CaGtXRGpzWExoM09DMlBaMG1TR0lhN1hDN2lWYS80SjBCQS93OW8wWWdDV2tDTFJoVHlFTkRNN1Z1QUFRQndvdnZJdjA5WTZnQUFBQUJKUlU1RXJrSmdnZz09Ii8+Jyk7Cm0udW5tdXRlQnV0dG9ufHwobS51bm11dGVCdXR0b249JzxpbWcgc3R5bGU9Im1heC13aWR0aDogMjVweDttYXgtaGVpZ2h0OiAyNXB4O3BhZGRpbmctcmlnaHQ6IDZweDtwYWRkaW5nLWJvdHRvbTogNnB4OyIgb25lcnJvcj0idGhpcy5zcmM9XCdodHRwczovL2htZGFzc3RzLnNjaG5lZXZvbm1vcmdlbi5jb20vaW1nL3VubXV0ZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlEwWkNNRGMwUWpRMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UTBaQ01EYzBRalUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBEUmtJd056UkNNalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERSa0l3TnpSQ016WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BpL2RxR3dBQUFTRlNVUkJWSGphN0psTFRCTkJHTWUzaUVpbDcyNUxhMHVRaTYyUEF4b0RIUEhDelpaRXFpYVFRQTJKd3NGWHZHaE1DSGZmSmlZRzFDWWVSRUUweElQdEJZN1lFeWFDK0VLSUVCTXI3VzRWaW9qV2IzZXRXYnF6MjA1WjFFMzJPMndtT3pQZi9QYWIvenhYMDk3ZVRpak5paE9KaFBLZ0tZcFNIblFxbFZJZWREcWRWcUgvaGhVUkNqUlZIaXEwT2hEVlNLdlFxcWIvZmFUUHpNM3RvK2t0eTh0Zk5tdzQ1UEY4TENuaDUzWjNkM2QxZGVWMHNpMlZhbzdGd0kvK3g0OVhXdTFoandjdjBta2NxNmNvYUF5SW9TYTBkM2xxU3JleXdtWHBkTHErdmo2Zno1ZlR5YmJGeGQ0M2IzenhPSGdBUDU1VWF2LzhQQllHSmpSTjg3L1lzN1RVOC9ZdGNBTnhUMCtQaHcxWVRtS29vdi81ays5bmZ6eU9oWUVuRHk0MmZQTXVMZlcrZTBjTUQzdTlYdTZOaEVNSWF1L1VsR0UxTWJJVzlCZzhoNGFHWkpESERac3RXVlFrNVBZZU8wWmtUa0FTTWI0bFFuelhhdVhLK0ZpREJIU2EzKzhYbFFmV0NJQkJjNlNxU3NoTlBIOU8xTmNUNGljM2lQSHQ5KytSeE9kZExsZG5aMHRMQzZUM3NzWUVJdE52TWtRYWJMSzBOTGgxcXdRM01zWml4SS85L3NjbUU4Y0tKVjJzL1pFS3RxYWhkeG9iRzhXKzlVc3NabWh1SmxhUFM0NGJ4aVhNaHZ6QmVtZDZHa21jdkhadFMyMXRPaGpVNi9WL0VMTVNlUE0wZkhGTlRZMlVWa1pHbU5BS3VPOXMydFJXV2NseGc5eERNek5JNG5OT1oyTnRMWjlNSW9FaGp4d0NyNjVtdUkzR3JOZmJ2MzBEVUlnMzZGaU1PTnJSOFNoVFVScGFob0dZUDNkMDgrWkhpUVJhRlZldkVtMXRhOXA3RkJqbVhOeU12ck9VdzlwWmgyT3lyaTVQVlJTeUlxNlZXMkRQT2pvR0RZYjBtbTNOa2M2Ym0xRkZhMnVlQVY1UFRXZHhYN2tpbG5uZFlubkp6aFh5N0tkbGtBZG5ZMlBFeVpOaW1hMFU1WXJGOGc5d2dackdKaGJPMlR5RGFjUU5DL1hZbUN6UW9vc0xCbmN1NHQ5RzA5czdPNzFPcDNEWmswaXN6NVFYQ2hHN2QrY216c1Q3eWR6Y2ptajBuMFlhaUlOQjlLbU1KT0Y1NGZObkJQcUpFOFRSbzFnNnlkNTdpUEhNenM2T2pvNkt4c3hnWUFJbVR2eFFwK1BTU082Nm16Y1BrQ1EwNFhhNzVUellEckFtVnEzcDY5Y0w4L05vWXF0MW9LeU1ZTjF5Q1dSSitKakk0T0J0blE0QWdON0FManI1UnJxQWV3K0dPQjVIWk1EaUVncjFRKy96ZlBhWGxkRWFEWEFiQlEwMTNMc1h0bGpnU0J3T2h6bEVtaDBiaFc5TlJZa1hGaTZLRWNPaVdGMmRQbjQ4S3llczFYNncyKzkvK2lUa0JsZndhb0NGWnI2d3Y1OWpuWmlZQU9XSXNXbXdWQlZZV0xpRS9JV1hJWVprUlVVRnN1Nk81ZVVIc1pnUnhYSGFiSVlPV2RVSkRRM3dqRVFpTXR3d0JSWVhFZk92Um5ONnp4NjZxa3E2N2tSSnlVR2JEUXJuNHpiQ21qeG5SR0dUOENaQWtnOWV2dzRFQW54RkltMTg0MFlvakhTeWpwYzFUMHRMc3hwcklrbEFZWURHeDZGUDRTbnRBUW8zQ2JqQkxSYUd4dWwwWWlua01rVWRZditYdmlndVBtVXlBVVRXL0oxTUpuTTYyZm45Ty9qWnRiSUM2ZnRhTGZqQll0QTRIQTdGM1pvcUU3cTh2Rng1MEhhN1hYblFOcHROZWRBa3U0ZFVvZGNmMm1xMUtnL2FZckVvRDlwc05pc1Ayb1M1aEtyUWhVSWI4N2c0L08rZ1lWK21QR2p1ZjRleTdKY0FBd0Rhbk9MSU8vcGdrQUFBQUFCSlJVNUVya0pnZ2c9PSIvPicpOwptLnNraXBhYmxlQnV0dG9ufHwobS5za2lwYWJsZUJ1dHRvbj0nPGRpdiBzdHlsZT0ib3BhY2l0eTogMC43O21pbi1oZWlnaHQ6IDI1cHg7bWF4LWhlaWdodDogMjVweDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2Rpc3BsYXk6IGlubGluZS1ibG9jaztsaW5lLWhlaWdodDogMjVweDtwYWRkaW5nLWxlZnQ6IDZweDttYXJnaW4tcmlnaHQ6IDZweDtwYWRkaW5nLXJpZ2h0OiA2cHg7Ym9yZGVyOiAjRkZGRkZGO2JhY2tncm91bmQtY29sb3I6YmxhY2s7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ij5Ta2lwIEFkIGluIFt0aW1lXXM8ZGl2PicpO20uc2tpcEJ1dHRvbnx8KG0uc2tpcEJ1dHRvbj0nPGRpdiBzdHlsZT0ibWluLWhlaWdodDogMjVweDttYXgtaGVpZ2h0OiAyNXB4O29wYWNpdHk6IDAuNjttYXJnaW4tcmlnaHQ6IDZweDtwYWRkaW5nLWxlZnQ6IDZweDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2Rpc3BsYXk6IGlubGluZS1ibG9jaztsaW5lLWhlaWdodDogMjVweDtiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14OyI+U2tpcCBBZDxpbWcgc3R5bGU9Im1heC13aWR0aDogMzBweDtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246IG1pZGRsZTsiIG9uZXJyb3I9XCdodHRwczovL2htZGFzc3RzLnNjaG5lZXZvbm1vcmdlbi5jb20vaW1nL3NraXAxODEwMDIucG5nXCcgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQVlBQUFBNi9ObHlBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQTNCcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1UTTRJRGM1TGpFMU9UZ3lOQ3dnTWpBeE5pOHdPUzh4TkMwd01Ub3dPVG93TVNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3VFUwOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXRiUzhpSUhodGJHNXpPbk4wVW1WbVBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZjMVI1Y0dVdlVtVnpiM1Z5WTJWU1pXWWpJaUI0Yld4dWN6cDRiWEE5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM4aUlIaHRjRTFOT2s5eWFXZHBibUZzUkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwRk9UWkRRalZHTUVSR01USXhNVVUyT0RReFFVVkJOME5HTVVNeU9Ua3hOU0lnZUcxd1RVMDZSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBGUmpjM09VRkdNRVJHUkRVeE1VVTJPRU0xT1VFNFFrSkdSamRHTmtRM05pSWdlRzF3VFUwNlNXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEZSamMzT1VGRlJrUkdSRFV4TVVVMk9FTTFPVUU0UWtKR1JqZEdOa1EzTmlJZ2VHMXdPa055WldGMGIzSlViMjlzUFNKQlpHOWlaU0JRYUc5MGIzTm9iM0FnUTBNZ01qQXhOeUFvVFdGamFXNTBiM05vS1NJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5KdmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09tUXpZemsxTkRCbUxUVmxZVE10TkRsbE5DMWhOR1V5TFdRMk1qUXlOVGN6Wm1VNVlTSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcEZPVFpEUWpWR01FUkdNVEl4TVVVMk9EUXhRVVZCTjBOR01VTXlPVGt4TlNJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BtNlhOVDRBQUFKcVNVUkJWSGphWXZ6Ly96L0RTQUpNRENNTWpIcDQxTU9qSGg3MThLaUhSejA4NnVGUkQ0OTZlTlREb3g0ZTlmQ29oN0VCbHNIbUlFTkR3d0JzNHVmUG45OUFGUXRBQXdEVXhqWTJOakZkWFYwcjlmWDEvVWpWQzlXREFzZ3hCeGVtU1pMMkJZTFMwdEt3RlN0V3JBUjZQZ3JrWUZJaWdCaXhRWldIZVhsNWVVQzBob1lHeDdadDI1YXFBWUdlbnA0UGtSNytSNHpZb1BJd2Nvenc4ZkV4ckY2OXVqc2FDSFIxZFgwR09vYnBWbWlWbDVkSHFLdXJhMWhaV2ZFY08zWnN4WWdvcFFNQ0FneUF5WHkrbTVzYnp6TWd1SExseXJiaGtxUnhPaENVcjllc1dUUGJFUWkwdGJXOWhrV2hSUWlBOHZYa3laTkxzckt5TXJXMHREeUdWYUdGRDJSblovdE1talJwc3BtWldjaXdLN1J3QVJjWEZ4VnBhZW1GZ1lHQk1qZUFZRVMwcFRVMU5ia1dMbHpZRHl6VS9HbWRwRmxvbEtUL2taT3YyOXZiTTRDRm1zYXdLN1R3Z2ZqNGVJY2hWMmlOdVA0d0pVbncwNmRQRENNbVNWKzdkdTBic0tNVlA2eGFXcmpBL1Buejk0RzZsVStBWUZqSE1DZ0pBL3ZPVTVxQjRPN2R1L3VHYXJWRWRCSXVLU2twdm43OStvMzc5KzhmR05ZdExXQUg0a3hUVTFQanBVdVh0Z3piN2lFTUFEMjZhTjY4ZVhNZlBIaHdpTjdkUTdxMnRCNC9mc3lRbHBhV0NVeksxeDQrZkhob1dJOTRIRDkrL0ZrcUVBQUxxVStQSGowNlFrcGdEYmxDcTYrdmIxMC9FQUJqK0FnNUJkNlFpZUdQSHo4eXBLU2tsSjRBQW1JOE8yU2JsbGV2WHIyeVk4ZU9HKzd1N3VIQXBIeU1GTS9TT2tuVFpPYUJFaXdsSldXRlB2TUFGYU9LK1lOdWJna1VtMEFQV3RMS2ZNYlJ4YVdqSGg3MThLaUhSejA4NnVGUkQ0OTZlTlREb3g0ZTlmQ29oMGM5UE9waEJnYUFBQU1BR21DMHBlSmNHRUlBQUFBQVNVVk9SSzVDWUlJPSIvPjwvZGl2PicpOwppZihtLnNpZGVsb2Fkcyl7dmFyIGM9ZnVuY3Rpb24oKXt9O20uc2lkZWxvYWRzLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5hbGlhczsiZnVuY3Rpb24iPT09dHlwZW9mIGImJihiPWIoKSk7YT1hLnVybDsiZnVuY3Rpb24iPT09dHlwZW9mIGEmJihhPWEoKSk7ZS5ZYShhLGIsW10sYyxjLGwpfSl9bC5sKG0uZ2xvYmFsQ29uZmlnLG0uY2xpZW50Q29uZmlnLG0ucHJlY2hlY2tlZCxtLm9uUmVhZHksbS5vbkZhaWx1cmUsbSk7ZG9jdW1lbnQuaGRfcmVhZHk9ITA7dmFyIGI9bS5zdGFydFBsYXllcjtiJiYiZnVuY3Rpb24iPT09dHlwZW9mIGImJmIoKX1lbHNlIGtjKGZhLDUwKX1mdW5jdGlvbiByKGMsYil7aWYoZS5jbyllLnRyYWNrKCJzdGF0c19oZF9ieXBhc3MiLCIiLCEwKTtlbHNlIGlmKG0mJmwpeyhtLmFkVGFnfHxtLnByZXJvbGxBZFRhZykmJmMucGF1c2UoKTtlLnYoay5mZCxjLnUoKSk7aWYoYy5nZXRDdXJyZW50VGltZSl7dmFyIGE9Yy5nZXRDdXJyZW50VGltZSgpO2EmJgplLnRyYWNrKCJhY3RpdmF0ZWRBdCIsYSl9Yj9sLkthPSEwOmUudHJhY2soInN0YXRzX2hkX2FiZCIsIiIsITApO2E9bmV3IGdhO2EuZmYoYyk7YS5CdChsKTthLkF0KG0pO2EubXQoKTthLmcoKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cihjLGIpfS5iaW5kKHRoaXMpLDUwKX1mdW5jdGlvbiBoYShjLGIpe2MucGF1c2UoKTtpZihsLkdiLmxlbmd0aCl7dmFyIGE9bC5HYi5zaGlmdCgpO2lmKCJhZGNhbGwiPT1hLnR5cGUpe3ZhciBoO2g9ZS5IdCh7IltMT0FEU0NSSVBUXSI6ZS5iYSgxMCksIltVVElMU10iOmUuYmEoMTApLCJbQ0FMTEJBQ0tdIjplLmJhKDEwKX0pO3dpbmRvd1toWyJbTE9BRFNDUklQVF0iXV09ZS5maC5iaW5kKGUpO3dpbmRvd1toWyJbVVRJTFNdIl1dPWw7Zm9yKHdpbmRvd1toWyJbQ0FMTEJBQ0tdIl1dPWZ1bmN0aW9uKGEpe2Zvcih2YXIgaCBpbiBhKW1baF09YVtoXTtyKGMsYil9O2g9YS5zY3JpcHRzLnNoaWZ0KCk7KWUuZmgoaCxmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJzaWRlbG9hZCBzdWNjZXNzIil9LApmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJzaWRlbG9hZCBmYWlsZWQiKX0sbCl9ZWxzZSByKGMsYil9ZWxzZSByKGMsYil9Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTXM9dGhpcy5hWzFdO3RoaXMuWGs9dGhpcy5hWzFdO3RoaXMuZ2o9dGhpcy5hWzddO3RoaXMuRW09dGhpcy5hWzNdO3RoaXMubmo9dGhpcy5hWzEwXTt0aGlzLkRuPXRoaXMuYVszXTt0aGlzLmZrPXRoaXMuYVsxXTt0aGlzLk9zPXRoaXMuYVsxXTt0aGlzLkl1PXRoaXMuYVs4XTt0aGlzLlZxPXRoaXMuYVs0XTt0aGlzLmo9dGhpcy5hWzNdfWMuY3Q9YjtiLnByb3RvdHlwZT17THM6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5Nczp0aGlzLldrKGEpfSxXazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuWGs6dGhpcy5maihhKX0sZmo6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLmdqOnRoaXMuRG0oYSl9LApEbTpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuRW06dGhpcy5taihhKX0sbWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLm5qOnRoaXMuQ24oYSl9LENuOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5Ebjp0aGlzLmVrKGEpfSxlazpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuZms6dGhpcy5OcyhhKX0sTnM6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLk9zOnRoaXMuSHUoYSl9LEh1OmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5JdTp0aGlzLlVxKGEpfSxVcTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuVnE6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBpYT1jLmN0fHxpYSxsYz1uZXcgaWEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1sYy5Mcyg0KTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5jbz0KITE7dGhpcy5TYT0ic2V0dXAiO3RoaXMuS2M9W107dGhpcy5qZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLllzLmJpbmQodGhpcykpO3RoaXMua2I9e307dGhpcy5OZz17fTt0aGlzLmNmPSExfWMuJGo9YjtiLnByb3RvdHlwZT17YnU6ZnVuY3Rpb24oKXt2YXIgYT0iIixiO2ZvcihiIGluIHRoaXMua2IpdGhpcy5rYi5oYXNPd25Qcm9wZXJ0eShiKSYmKGErPWIrdGhpcy5rYltiXSsiXyIpO3JldHVybiBhfSx6YzpmdW5jdGlvbigpe3RoaXMuY2Z8fCh0aGlzLmNmPWUuYmEoMTApKTtyZXR1cm4gdGhpcy5jZn0sbGI6ZnVuY3Rpb24oYSl7dGhpcy5rYlthXXx8KHRoaXMua2JbYV09MCk7dGhpcy5rYlthXSs9MTs1PHRoaXMua2JbYV0mJiF0aGlzLk5nW2FdJiYodGhpcy5OZ1thXT0hMCwibmV3QmlnQWRJZCI9PWEmJnRoaXMudHJhY2soInN0YXRzX2hkX2NoZWNrdHJhY2tzIix0aGlzLmJ1KCksITApKX0samU6ZnVuY3Rpb24oKXt0aGlzLmFhPXt1cmxzOnt9LApob21hZFVybHM6e30sb3JpZ2luYWxVcmxzOnt9LHNjcmlwdHM6e30sZXZlbnRsaXN0ZW5lcjpbXSxnZW5lcmFsRXZlbnRsaXN0ZW5lcjpbXSxpRnJhbWVzOltdLGlGcmFtZU9uTG9hZEhhbmRsZXI6e30saUZyYW1lVXJsOiIiLHRyYWNlOltdLHN0YWNrOltdLGVycm1zZzpbXX19LGpuOmZ1bmN0aW9uKGEpe3RoaXMuYWEuZXJybXNnLnB1c2goYSl9LHBvc3RNZXNzYWdlOmZ1bmN0aW9uKGEsYil7dHJ5e2EuY29udGVudFdpbmRvdyYmKGE9YS5jb250ZW50V2luZG93KX1jYXRjaChkKXt9YSYmYS5wb3N0TWVzc2FnZSYmYS5wb3N0TWVzc2FnZShiLCIqIil9LG1hOmZ1bmN0aW9uKGEsYixkKXt0aGlzLnBvc3RNZXNzYWdlKGEse3R5cGU6InZwYWlkIixldmVudDpiLGRhdGE6ZH0pfSxZczpmdW5jdGlvbihhKXthJiZhLmRhdGEmJmEuZGF0YS50eXBlJiYidnBhaWQiPT1hLmRhdGEudHlwZSYmdGhpcy5YcyhhLmRhdGEpfSxYczpmdW5jdGlvbihhKXtpZih0aGlzLmFhJiZ0aGlzLmFhLmV2ZW50bGlzdGVuZXIpZm9yKHZhciBiPQp0aGlzLmFhLmV2ZW50bGlzdGVuZXIubGVuZ3RoLGQ9MDtkPGI7ZCsrKXRoaXMuYWEmJnRoaXMuYWEuZXZlbnRsaXN0ZW5lciYmdGhpcy5hYS5ldmVudGxpc3RlbmVyW2RdJiZhLmV2ZW50PT10aGlzLmFhLmV2ZW50bGlzdGVuZXJbZF0ubmFtZSYmdGhpcy5hYS5ldmVudGxpc3RlbmVyW2RdLmNiKGEpfSxiZTpmdW5jdGlvbihhLGIpe3RoaXMuYWEuZXZlbnRsaXN0ZW5lci5wdXNoKHtuYW1lOmEsY2I6Yn0pfSxsZzpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmdxKGEpLGQ9ITE7aWYoYilyZXR1cm4gdGhpcy5laChhLCJQT1NUIix7aG9tYWRfcmVzb2x2ZV9oYXNoOmJ9LGZ1bmN0aW9uKGEpe3RyeXtkPUpTT04ucGFyc2UoYS5yZXNwb25zZVRleHQpLnVybH1jYXRjaChiKXtjb25zb2xlLmxvZygid3RmIixiKX19LGZ1bmN0aW9uKCl7fSwhMCwhMCksZH0sZ3E6ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IFJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPyhbdy4tXSopOj8uKihbMC05XSspPy8/KFthLWYwLTldezQwfSkvPyQiLAoiZyIpO2lmKChiPWIuZXhlYyhhKSkmJihiWzJdfHxiWzVdKSl7aWYoYlsyXSlyZXR1cm4gYlsyXTtpZihiWzVdKXJldHVybiBiWzVdfWVsc2UgaWYoYj1uZXcgUmVnRXhwKCJeKGh0dHBzPyk6Ly8oW3cuLV0qKTo/LiooWzAtOV0rKT8vPyhbYS1mMC05XXs0MH0pLz8kIiwiZyIpLChiPWIuZXhlYyhhKSkmJmJbNF0pcmV0dXJuIGJbNF07cmV0dXJuITF9LGduOmZ1bmN0aW9uKGEsYil7aWYoYiYmISgwPnRoaXMubGEoYSkuaG9zdC5pbmRleE9mKCJkYW1vaCIpKSl7aWYoYT09Yil7aWYoZS5RcChhKSlyZXR1cm47KGI9dGhpcy5sZyhhKSl8fChiPWEpfTA9PT1iLmluZGV4T2YoIi8vIikmJihiPSJodHRwczoiK2IpO3RoaXMuYWEudXJsc1thXT1iO3RoaXMuYWEudXJsc1tiXT1hO3RoaXMuYWEuaG9tYWRVcmxzW2FdPWI7dGhpcy5hYS5vcmlnaW5hbFVybHNbYl09YX19LFFwOmZ1bmN0aW9uKGEpe3ZhciBiPSExO3RoaXMuYWEuaG9tYWRVcmxzW2FdJiYoYj10aGlzLmFhLmhvbWFkVXJsc1thXSk7CnJldHVybiBifSx0ZzpmdW5jdGlvbihhKXt2YXIgYj0hMTt0aGlzLmFhLm9yaWdpbmFsVXJscyYmdGhpcy5hYS5vcmlnaW5hbFVybHNbYV0mJihiPXRoaXMuYWEub3JpZ2luYWxVcmxzW2FdKTtyZXR1cm4gYn0sZWI6ZnVuY3Rpb24oYSxiKXtifHwoYj0iIik7dGhpcy50cmFjaygic3RhdHNfdnBhaWRfIithLGIsITApfSxwcjpmdW5jdGlvbihhKXtyZXR1cm4iYWJvdXQ6YmxhbmsiPT1hfHwiYWJvdXQ6c2VsZiI9PWF8fCIiPT1hfSx0ZTpmdW5jdGlvbihhKXtpZighYXx8Im9iamVjdCIhPT10eXBlb2YgYSlyZXR1cm4gMDt2YXIgYj0wLGQ9IiI7Zm9yKGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiZiKys7cmV0dXJuIGJ9LENnOmZ1bmN0aW9uKGEsYil7dmFyIGQ9YVtiXTtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBkP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGQpOiJmdW5jdGlvbiI9PT10eXBlb2YgZD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChkKCkpOiJvYmplY3QiPT09dHlwZW9mIGQ/CmQ6bnVsbH0sSGg6ZnVuY3Rpb24oYSl7Zm9yKDthIT1kb2N1bWVudC5ib2R5JiZudWxsIT1hOylhPWEucGFyZW50RWxlbWVudDtyZXR1cm4gYT09ZG9jdW1lbnQuYm9keT8hMDohMX0sV2c6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiYiZnVuY3Rpb24iPT09dHlwZW9mIGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PyhhPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpPzA8PWEudG9wJiYwPD1hLmxlZnQmJmEuYm90dG9tPD0od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSYmYS5yaWdodDw9KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpOiExOiExfSxCZTpmdW5jdGlvbihhLGIpe3ZhciBkPTAsZj0wLG49MCxjPTAsZT0hMTtpZighYXx8IWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0fHwiZnVuY3Rpb24iIT09dHlwZW9mIGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXJldHVybiExOwp2YXIgZz1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFnKXJldHVybiExO249Zy5oZWlnaHQqZy53aWR0aDtkPWcud2lkdGg7Zj1nLmhlaWdodDswPmcudG9wJiYoZis9Zy50b3ApO2cuYm90dG9tPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpJiYoZi09Zy5ib3R0b20tKHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpOzA+Zy5sZWZ0JiYoZCs9Zy5sZWZ0KTtnLnJpZ2h0Pih3aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKSYmKGQtPWcucmlnaHQtKHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpKTswPmYmJihmPTApOzA+ZCYmKGQ9MCk7MDxuJiYoYz0xMDAvbipkKmYpO2M+PWImJihlPSEwKTtyZXR1cm4gZX0sQ2U6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5CZShhLmVsLAphLnBlcmNlbnQpO2Euc3RhcnRUaW1lfHwoYS5zdGFydFRpbWU9KG5ldyBEYXRlKS5nZXRUaW1lKCkpO2lmKGIpe2lmKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWEuc3RhcnRUaW1lPj1hLnRpbWVNUyl7YS5jYigpO3JldHVybn19ZWxzZSBhLnN0YXJ0VGltZT0hMTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuQ2UoYSl9LmJpbmQodGhpcyksMTAwKX0sRWI6ZnVuY3Rpb24oYSl7YT1hJiYibnVtYmVyIj09PXR5cGVvZiBhP01hdGguYWJzKGEpOjEwO3JldHVybiBNYXRoLnJvdW5kKE1hdGgucG93KDEwLGEpKiguODk5OTk5OTk5Kk1hdGgucmFuZG9tKCkrLjEpKX0sYmE6ZnVuY3Rpb24oYSl7YT1hJiYibnVtYmVyIj09PXR5cGVvZiBhJiYwPGE/TWF0aC5yb3VuZChhKToxMDtmb3IodmFyIGI9IiIsZD0wO2Q8YTtkKyspYis9U3RyaW5nLmZyb21DaGFyQ29kZSgoLjU+TWF0aC5yYW5kb20oKT82NTo5NykrTWF0aC5mbG9vcigyNipNYXRoLnJhbmRvbSgpKSk7cmV0dXJuIGJ9LHZlOmZ1bmN0aW9uKGEpe3ZhciBiPQowLGQsZjtpZigwPT09YS5sZW5ndGgpcmV0dXJuIGI7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKylmPWEuY2hhckNvZGVBdChkKSxiPShiPDw1KS1iK2YsYnw9MDtyZXR1cm4gYn0sRWg6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2YXIgaD0iIixkLGY7Zm9yKGQ9NzswPD1kO2QtLSlmPWE+Pj40KmQmMTUsaCs9Zi50b1N0cmluZygxNik7cmV0dXJuIGh9ZnVuY3Rpb24gZChhLGIpe3JldHVybiBhPDxifGE+Pj4zMi1ifXZhciBmLG4sYz1BcnJheSg4MCksZT0xNzMyNTg0MTkzLGc9NDAyMzIzMzQxNyxrPTI1NjIzODMxMDIsTD0yNzE3MzM4NzgsbD0zMjg1Mzc3NTIwLHAsbSx0LEIscjthPWEmJiJzdHJpbmciPT09dHlwZW9mIGE/YToiIjtwPWEubGVuZ3RoO3ZhciBxPVtdO2ZvcihmPTA7ZjxwLTM7Zis9NCluPWEuY2hhckNvZGVBdChmKTw8MjR8YS5jaGFyQ29kZUF0KGYrMSk8PDE2fGEuY2hhckNvZGVBdChmKzIpPDw4fGEuY2hhckNvZGVBdChmKzMpLHEucHVzaChuKTtzd2l0Y2gocCUKNCl7Y2FzZSAwOmY9MjE0NzQ4MzY0ODticmVhaztjYXNlIDE6Zj1hLmNoYXJDb2RlQXQocC0xKTw8MjR8ODM4ODYwODticmVhaztjYXNlIDI6Zj1hLmNoYXJDb2RlQXQocC0yKTw8MjR8YS5jaGFyQ29kZUF0KHAtMSk8PDE2fDMyNzY4O2JyZWFrO2Nhc2UgMzpmPWEuY2hhckNvZGVBdChwLTMpPDwyNHxhLmNoYXJDb2RlQXQocC0yKTw8MTZ8YS5jaGFyQ29kZUF0KHAtMSk8PDh8MTI4fWZvcihxLnB1c2goZik7MTQhPXEubGVuZ3RoJTE2OylxLnB1c2goMCk7cS5wdXNoKHA+Pj4yOSk7cS5wdXNoKHA8PDMmNDI5NDk2NzI5NSk7Zm9yKGE9MDthPHEubGVuZ3RoO2ErPTE2KXtmb3IoZj0wOzE2PmY7ZisrKWNbZl09cVthK2ZdO2ZvcihmPTE2Ozc5Pj1mO2YrKyljW2ZdPWQoY1tmLTNdXmNbZi04XV5jW2YtMTRdXmNbZi0xNl0sMSk7bj1lO3A9ZzttPWs7dD1MO0I9bDtmb3IoZj0wOzE5Pj1mO2YrKylyPWQobiw1KSsocCZtfH5wJnQpK0IrY1tmXSsxNTE4NTAwMjQ5JjQyOTQ5NjcyOTUsQj10LAp0PW0sbT1kKHAsMzApLHA9bixuPXI7Zm9yKGY9MjA7Mzk+PWY7ZisrKXI9ZChuLDUpKyhwXm1edCkrQitjW2ZdKzE4NTk3NzUzOTMmNDI5NDk2NzI5NSxCPXQsdD1tLG09ZChwLDMwKSxwPW4sbj1yO2ZvcihmPTQwOzU5Pj1mO2YrKylyPWQobiw1KSsocCZtfHAmdHxtJnQpK0IrY1tmXSsyNDAwOTU5NzA4JjQyOTQ5NjcyOTUsQj10LHQ9bSxtPWQocCwzMCkscD1uLG49cjtmb3IoZj02MDs3OT49ZjtmKyspcj1kKG4sNSkrKHBebV50KStCK2NbZl0rMzM5NTQ2OTc4MiY0Mjk0OTY3Mjk1LEI9dCx0PW0sbT1kKHAsMzApLHA9bixuPXI7ZT1lK24mNDI5NDk2NzI5NTtnPWcrcCY0Mjk0OTY3Mjk1O2s9ayttJjQyOTQ5NjcyOTU7TD1MK3QmNDI5NDk2NzI5NTtsPWwrQiY0Mjk0OTY3Mjk1fXJldHVybihiKGUpK2IoZykrYihrKStiKEwpK2IobCkpLnRvTG93ZXJDYXNlKCl9LHZiOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iIixkLGYsbixjLGUsZyxrPTA7azxhLmxlbmd0aDspZD1hLmNoYXJDb2RlQXQoaysrKSwKZj1hLmNoYXJDb2RlQXQoaysrKSxuPWEuY2hhckNvZGVBdChrKyspLGM9ZD4+MixkPShkJjMpPDw0fGY+PjQsZT0oZiYxNSk8PDJ8bj4+NixnPW4mNjMsaXNOYU4oZik/ZT1nPTY0OmlzTmFOKG4pJiYoZz02NCksYj1iKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGMpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGQpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGUpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGcpO3JldHVybiBifSxtcjpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudmVuZG9yJiYtMTxuYXZpZ2F0b3IudmVuZG9yLmluZGV4T2YoIkFwcGxlIil9LAp1YzpmdW5jdGlvbigpe3ZhciBhPXt9LGI9ITEsZD0hMSxmPSExLG49ITEsYz0hMSxlPSExLGc9ITEsaz0hMSxtPSExLGw9ITE7dHJ5e2I9Y2hlY2tGb3JQaGFudG9tSlMoKX1jYXRjaChwKXt9dHJ5ey9cYkhlYWRsZXNzQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJihkPSEwKX1jYXRjaChyKXt9dHJ5e2Y9d2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoIndlYmRyaXZlciIpfHxuYXZpZ2F0b3IuTmI/ITA6ITF9Y2F0Y2godCl7fXRyeXtuPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk9wZXJhIiksYz0tMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94IiksZT0tMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJTYWZhcmkiKSxnPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk1TSUUiKSxtPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkNocm9tZSIpLGs9IWcmJiEhd2luZG93LlN0eWxlTWVkaWEsCmw9KG18fG4pJiYhIXdpbmRvdy5DU1N9Y2F0Y2gocSl7fWEuaXNQaGFudG9tSlM9YjthLmlzQ2hyb21lSGVhZGxlc3M9ZDthLmlzRmlyZWZveEhlYWRsZXNzPWY7YS5pc09wZXJhPW47YS5pc0ZpcmVmb3g9YzthLmlzU2FmYXJpPWU7YS5pc0lFPWc7YS5pc0VkZ2U9azthLmlzQ2hyb21lPW07YS5pc0JsaW5rPWw7cmV0dXJuIGF9LGFxOmZ1bmN0aW9uKCl7dmFyIGE9IlUiLGI9dGhpcy51YygpO2IuaXNQaGFudG9tSlM/YT0iSFAiOmIuaXNDaHJvbWVIZWFkbGVzcz9hPSJIQyI6Yi5pc0ZpcmVmb3hIZWFkbGVzcz9hPSJIRiI6KGIuaXNCbGluayYmKGE9IkIiKSxiLmlzT3BlcmEmJihhPSJPIiksYi5pc0ZpcmVmb3gmJihhPSJGIiksYi5pc1NhZmFyaSYmKGE9IlMiKSxiLmlzSUUmJihhPSJJIiksYi5pc0VkZ2UmJihhPSJFIiksYi5pc0Nocm9tZSYmKGE9IkMiKSk7cmV0dXJuIGF9LFRhOmZ1bmN0aW9uKCl7dmFyIGE9e1NpOmZ1bmN0aW9uKCl7cmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSl9LApjajpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9CbGFja0JlcnJ5L2kpfSxQcTpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpfSxqbDpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9PcGVyYSBNaW5pL2kpfSxJbTpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9JRU1vYmlsZS9pKX0sTW46ZnVuY3Rpb24oKXtyZXR1cm4gYS5TaSgpfHxhLmNqKCl8fGEuUHEoKXx8YS5qbCgpfHxhLkltKCl9fTtyZXR1cm4gYS5NbigpfSxsYTpmdW5jdGlvbihhKXt2YXIgYj0ic291cmNlIHByb3RvY29sIGF1dGhvcml0eSB1c2VySW5mbyB1c2VyIHBhc3N3b3JkIGhvc3QgcG9ydCByZWxhdGl2ZSBwYXRoIGRpcmVjdG9yeSBmaWxlIHF1ZXJ5IGFuY2hvciIuc3BsaXQoIiAiKTthPS9eKD86KD8hW146QF0rOlteOkBcL10qQCkoW146XC8/Iy5dKyk6KT8oPzpcL1wvKT8oKD86KChbXjpAXSopKD86OihbXjpAXSopKT8pP0ApPyhbXjpcLz8jXSopKD86OihcZCopKT8pKCgoXC8oPzpbXj8jXSg/IVtePyNcL10qXC5bXj8jXC8uXSsoPzpbPyNdfCQpKSkqXC8/KT8oW14/I1wvXSopKSg/Olw/KFteI10qKSk/KD86IyguKikpPykvLmV4ZWMoYSk7CmZvcih2YXIgZD17fSxmPTE0O2YtLTspZFtiW2ZdXT1hW2ZdfHwiIjtkLnF1ZXJ5S2V5PXt9O2RbYlsxMl1dLnJlcGxhY2UoLyg/Ol58JikoW14mPV0qKT0/KFteJl0qKS9nLGZ1bmN0aW9uKGEsYixoKXtiJiYoZC5xdWVyeUtleVtiXT1oKX0pO3JldHVybiBkfSx1bmlxdWU6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXt9LGQ9W10sZj0wLG49YS5sZW5ndGg7ZjxuOysrZiliLmhhc093blByb3BlcnR5KGFbZl0pfHwoZC5wdXNoKGFbZl0pLGJbYVtmXV09MSk7cmV0dXJuIGR9LFNiOmZ1bmN0aW9uKGEpe2E9dGhpcy5sYShhKS5ob3N0LnNwbGl0KCIuIik7dmFyIGI9IiI7YVthLmxlbmd0aC0yXSYmKGIrPWFbYS5sZW5ndGgtMl0rIi4iKTthW2EubGVuZ3RoLTFdJiYoYis9YVthLmxlbmd0aC0xXSk7cmV0dXJuIGJ9LEJhOmZ1bmN0aW9uKGEpe3ZhciBiPSIiLGQ9ITE7d2luZG93JiZ3aW5kb3cubG9jYXRpb24mJndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSYmKGI9d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKTsKYiYmLTE8Yi5pbmRleE9mKGEpJiYoZD0hMCk7cmV0dXJuIGR9LHFxOmZ1bmN0aW9uKCl7dmFyIGE9IiIsYj0iIixkPSIiO3RyeXthPXdpbmRvdy5sb2NhdGlvbi5ob3N0LGI9d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLHdpbmRvdyE9d2luZG93LnRvcCYmKGE9d2luZG93LnRvcC5sb2NhdGlvbi5ob3N0LGI9d2luZG93LnRvcC5sb2NhdGlvbi5wYXRobmFtZSl9Y2F0Y2goZil7ZG9jdW1lbnQucmVmZXJyZXImJihkPXRoaXMubGEoZG9jdW1lbnQucmVmZXJyZXIpLGE9ZC5ob3N0LGI9ZC5wYXRoKX1yZXR1cm4gYStifSxVbzpmdW5jdGlvbihhLGIpe2Zvcih2YXIgZD1bXSxmPVtdLG49MDtuPGIubGVuZ3RoO24rKylkW2Jbbl1dPSEwO2ZvcihuPTA7bjxhLmxlbmd0aDtuKyspZFthW25dXXx8Zi5wdXNoKGFbbl0pO3JldHVybiBmfSxXdDpmdW5jdGlvbihhLGIpe3ZhciBkPS0xLGY9IiI7dHJ5ezA8YS5pbmRleE9mKCIlIikmJjA8Yj8oZj1hLnNwbGl0KCIlIiksZD1iLzEwMCpmKTooZD1hLnNwbGl0KCI6IiksCmQ9MzYwMCorZFswXSs2MCorZFsxXSsgK2RbMl0sZD1NYXRoLnJvdW5kKGQpKX1jYXRjaChuKXtkPS0xfXJldHVybiBpc05hTihkKT8tMTpkfSx5ZzpmdW5jdGlvbihhKXthPU1hdGgucm91bmQoYSk7dmFyIGI9Ii0tOi0tIjswPD1hJiYoYT1NYXRoLmZsb29yKGEpLGI9TWF0aC5mbG9vcihhLzYwKSxiPXRoaXMuVmgoYikrIjoiK3RoaXMuVmgoTWF0aC5mbG9vcihhLTYwKmIpKSk7cmV0dXJuIGJ9LFZoOmZ1bmN0aW9uKGEpe3JldHVybiAxMD5hPyIwIithLnRvU3RyaW5nKCk6YS50b1N0cmluZygpfSxlZjpmdW5jdGlvbihhKXt0aGlzLlNhPWF9LHZnOmZ1bmN0aW9uKGEsYixkKXt2YXIgZjtkLnN0YXRlPXRoaXMuU2E7dGhpcy5XZihkKTsiZnVuY3Rpb24iPT09dHlwZW9mIHdpbmRvdy5DdXN0b21FdmVudD9mPW5ldyBDdXN0b21FdmVudChiLHtkZXRhaWw6ZH0pOihmPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpLGYuaW5pdEN1c3RvbUV2ZW50KGIsITEsITEsZCkpOwphLmRpc3BhdGNoRXZlbnQoZil9LHdjOmZ1bmN0aW9uKGEsYixkKXtifHwoYj0iaGRFdmVudCIpO2R8fChkPXdpbmRvdyk7dGhpcy52ZyhkLGIsYSl9LHY6ZnVuY3Rpb24oYSxiLGQsZixuLGMsZyl7dmFyIEE9YTtkJiZiJiYoYj1rLlhhKGIsZCkpO2ImJihBPWsuWGEoYSxiKSk7ZiYmKEE9ay5YYShBLGYpKTtuJiYoQT1rLlhhKEEsbikpO2MmJihBPWsuWGEoQSxjKSk7ZyYmKEE9ay5YYShBLGMpKTtlLndjKEEpfSwkczpmdW5jdGlvbihhKXt2YXIgYj17fTtpZighYS5jb2RlKXJldHVybiExO2lmKGEuc3BlY2lhbF90cmFjayliPWE7ZWxzZSBpZighKGEuY29kZSYmMTAwNTw9YS5jb2RlJiYxMDI5Pj1hLmNvZGUpfHwxMDIzPT1hLmNvZGV8fDEwMTg9PWEuY29kZSlyZXR1cm47dHJ5e2phJiYoYi5zZXNzaW9uX2lkPWphKTtiLmFkc2Vzc2lvbl9pZD1hLmFkc2Vzc2lvbl9pZD9hLmFkc2Vzc2lvbl9pZDoiZXBvbiI7YS5ob21hZEltcHJlc3Npb25BZElkJiYoYi5hZF9pZD1hLmhvbWFkSW1wcmVzc2lvbkFkSWQpOwpiLmV2ZW50PWEuY29kZTtiLnNpdGVfaHJlZj10aGlzLnFxKCk7aWYoYS5zdGF0ZSlzd2l0Y2goYS5zdGF0ZSl7Y2FzZSAicHJlcm9sbCI6Yi5wb3NpdGlvbj0xO2JyZWFrO2Nhc2UgIm1pZHJvbGwiOmIucG9zaXRpb249MjticmVhaztjYXNlICJwb3N0cm9sbCI6Yi5wb3NpdGlvbj0zO2JyZWFrO2RlZmF1bHQ6Yi5wb3NpdGlvbj0wfWEudmlkZW9fZHVyYXRpb24mJihiLnZpZGVvX2R1cmF0aW9uPWEudmlkZW9fZHVyYXRpb24pfWNhdGNoKGQpe31yZXR1cm4gYn0sV2Y6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy4kcyhhKTtpZihiKWlmKCFsfHwhbC5YKXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5XZihiKX0uYmluZCh0aGlzKSw1MDApO2Vsc2UgaWYobC5pc0VuYWJsZWQpe2lmKCJvYmplY3QiPT10eXBlb2YgYil0cnl7Yj1KU09OLnN0cmluZ2lmeShiKX1jYXRjaChkKXtiPWIudG9TdHJpbmc/Yi50b1N0cmluZygpOiIifWImJmIudHJpbSYmKGI9Yi50cmltKCkpO2E9bC5EZCgpOwpsLnphKGEsITApO2E9bC56YShhLCEwKTthLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0iIjthLmRhdGEuaG9tYWRfYXQ9YjtsLkxhKGEsZnVuY3Rpb24oKXt9KX19LHRyYWNrOmZ1bmN0aW9uKGEsYixkKXtpZihkKWlmKCFsfHwhbC5YKXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50cmFjayhhLGIsZCl9LmJpbmQodGhpcyksNTAwKTtlbHNlIGlmKGwuaXNFbmFibGVkKXthJiZhLnRyaW0mJihhPWEudHJpbSgpKTtiJiZiLnRyaW0mJihiPWIudHJpbSgpKTt2YXIgZj1hK2I7dGhpcy5NY3x8KHRoaXMuTWM9e30pO3RoaXMuTWNbZl18fCh0aGlzLk1jW2ZdPTApO3RoaXMuTWNbZl0rKzsxMDx0aGlzLk1jW2ZdfHwoZj1sLkRkKCkrIj9ob21hZF90cmFja19rZXk9IitlbmNvZGVVUklDb21wb25lbnQoYSkrIiZob21hZF90cmFja192YWx1ZT0iK2VuY29kZVVSSUNvbXBvbmVudChiKSxsLnphKGYsITApLGY9bC56YShmLCEwKSxmLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0KIiIsZi5kYXRhLmhvbWFkX3RyYWNrX2tleT0iKiIrZW5jb2RlVVJJQ29tcG9uZW50KGEpKyIqIixmLmRhdGEuaG9tYWRfdHJhY2tfdmFsdWU9IioiK2VuY29kZVVSSUNvbXBvbmVudChiKSsiKiIsbC5MYShmLGZ1bmN0aW9uKGQpe3ZhciBmPSExO2Q9ZC5yZXNwb25zZVRleHQ7dHJ5e2Q9SlNPTi5wYXJzZShkKSxkPWQuZGF0YSxkWzBdPT1lbmNvZGVVUklDb21wb25lbnQoYSkmJihmPSEwKSxkWzFdJiZkWzFdIT1lbmNvZGVVUklDb21wb25lbnQoYikmJihmPSExKX1jYXRjaChjKXt9Znx8dGhpcy50cmFjaygic3RhdHNfaGRfdHJhY2tjaGVjayIsKGRbMF0/ZFswXToiIikrKGRbMV0/ZFsxXToiIiksITApfS5iaW5kKHRoaXMpKSl9fSxKZTpmdW5jdGlvbigpe2wmJmwuWD9sLmlzRW5hYmxlZCYmbC5xbygpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5KZSgpfS5iaW5kKHRoaXMpLDUwMCl9LHJlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEmJiJvYmplY3QiPT10eXBlb2YgYSYmCmEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYikubGVuZ3RoP3RoaXMuaWIoYS5nZXRFbGVtZW50c0J5VGFnTmFtZShiKVswXSk6IiJ9LHVlOmZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLmNoaWxkTm9kZXMmJmEuY2hpbGROb2Rlc1swXT9hLmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlOiIifSxpYjpmdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLnFkKGEpOiIifSxxZDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnVlKGEpO2ImJihiPWIudHJpbSgpKTshYiYmYS50ZXh0Q29udGVudCYmKGI9YS50ZXh0Q29udGVudCxiPWIudHJpbSgpKTtyZXR1cm4gYn0sJGY6ZnVuY3Rpb24oYSxiLGQsZil7ZD0hMTtpZihiLkVlKGEpfHx0aGlzLnByKGEpfHwwPD1hLmluZGV4T2YoImRhdGE6aW1hZ2UiKSlyZXR1cm4gYTt3aW5kb3cuc2FuZGJveCYmd2luZG93LnNhbmRib3guYmYmJndpbmRvdy5zYW5kYm94LmJmWyJTdHJpbmcucHJvdG90eXBlLmluZGV4T2YiXSYmKDA8PXNhbmRib3guYmZbIlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiJdLmJpbmQoYSkoImVycm9yIil8fApzYW5kYm94LmJmWyJTdHJpbmcucHJvdG90eXBlLmluZGV4T2YiXS5iaW5kKGEpKCJFcnJvciIpKTtpZih0aGlzLnRnKGEpKXJldHVybiB0aGlzLnRnKGEpO3ZhciBuPXtob21hZF91cmxfcHJlZml4X2FsaWFzOiJ2cGFpZCJ9O24uaG9tYWRfdXJsX3N1ZmZpeD1hO24uaG9tYWRfdXJsX3N1ZmZpeF9iYXNlNjQ9dGhpcy52YihhKTtuLmhvbWFkX3JldHVybl9vbmx5X3VybF9hbmRfaGFzaD0idHJ1ZSI7bi5ob21hZF9oYXNoX2d1ZXNzZWQ9InRydWUiO2YmJmYucG9zdCYmKG5bIlgtSG9tYWQtUG9zdCJdPSJ0cnVlIik7ZCYmKG4uaG9tYWRfaW50cm9zcGVjdD0iaWZyYW1lIik7bi5ob21hZF92cGFpZF9jb21wYXRpYmxlPSJ0cnVlIjtuLmhvbWFkX3ZwYWlkX2N0eD0idHJ1ZSI7ZiYmZi5vbmx5VVJMJiYobi5ob21hZF9yZXBsYWNlX3VybHNfaW5fdGFncz0iTWVkaWFGaWxlIik7dmFyIGM9ITE7ZD0hMTtkPXRoaXMuWWEoYSxiLkphLG4sZnVuY3Rpb24oYSl7Yz1hLnJlc3BvbnNlVGV4dH0sCmZ1bmN0aW9uKCl7fSxiLCEwKTt0cnl7Y3x8KGM9ZCksYz1KU09OLnBhcnNlKGMpfWNhdGNoKGUpe2M9ITF9Yy51cmwmJmMuaGFzaCYmKGM9Yi51ZCgpLnJlcGxhY2UoIltoYXNoXSIsYy5oYXNoKSk7dGhpcy5nbihjLGEpO3JldHVybiBjfSxZYTpmdW5jdGlvbihhLGIsZCxmLG4sYyxlLGcpe3ZhciBrPWN8fGw7Yz0hMDtnJiYoYz0hMSk7aWYoayYmay5YKWlmKGsuaXNFbmFibGVkKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSl0cnl7YT1hKCl9Y2F0Y2gobSl7bihtKX1pZigic3RyaW5nIiE9dHlwZW9mIGEpbigpO2Vsc2V7ay56YShhLGMpO2M9ay56YShhLGMpO2MuZGF0YS5ob21hZF91cmxfcHJlZml4X2FsaWFzPWI7Yy5kYXRhLmhvbWFkX2hhc2hfZ3Vlc3NlZD0idHJ1ZSI7Zm9yKHZhciByIGluIGQpYy5kYXRhW3JdPWRbcl07cmV0dXJuIGsuTGEoYyxmLG4sIiIsIiIsZSl9fWVsc2UgbigpO2Vsc2Ugd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLllhKGEsYixkLGYsbiwKayxlLGcpfS5iaW5kKHRoaXMpLDUwMCl9LGVoOmZ1bmN0aW9uKGEsYixkLGYsYyxlLGcpe3ZhciBrPSEwO2cmJihrPSExKTtpZigic3RyaW5nIiE9dHlwZW9mIGQpe2c9ZDtkPSIiO2Zvcih2YXIgbSBpbiBnKWQrPSImIittKyI9IitlbmNvZGVVUklDb21wb25lbnQoZ1ttXSk7ZD1kLnN1YnN0cigxKX12YXIgbD1uZXcgWE1MSHR0cFJlcXVlc3Q7bC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshZnx8NCE9bC5yZWFkeVN0YXRlfHwyMDAhPWwuc3RhdHVzJiYyMDEhPWwuc3RhdHVzfHxmKGwpO2MmJjQ9PWwucmVhZHlTdGF0ZSYmMjAwIT1sLnN0YXR1cyYmMjAxIT1sLnN0YXR1cyYmYyhsKX07dHJ5e2wub3BlbihiLGEsayksbC53aXRoQ3JlZGVudGlhbHM9ZSwwPGQubGVuZ3RoJiZsLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpLGwuc2VuZChkKX1jYXRjaChyKXtjJiZjKCl9cmV0dXJuIGx9LEtyOmZ1bmN0aW9uKGEsCmIsZCl7dGhpcy5laChhLCJHRVQiLCIiLGZ1bmN0aW9uKGEpe2E9YS5yZXNwb25zZVRleHQ7aWYodGhpcy5LYylmb3IodmFyIGMgaW4gdGhpcy5LYylhPWEuc3BsaXQoYykuam9pbih0aGlzLktjW2NdKTtjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2MudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtjLnNyYz0iZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIrZS52YihhKTtkJiYoYy5vbmVycm9yPWQpO2RvY3VtZW50LmhlYWQuZmlyc3RDaGlsZD9kb2N1bWVudC5oZWFkLmluc2VydEJlZm9yZShjLGRvY3VtZW50LmhlYWQuZmlyc3RDaGlsZCk6ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChjKTtiJiZzZXRUaW1lb3V0KGIsMCl9LmJpbmQodGhpcyksZCl9LGZoOmZ1bmN0aW9uKGEsYixkLGYpe3ZhciBjPXtob21hZF91cmxfcHJlZml4X2FsaWFzOiJ2cGFpZCJ9O2MuaG9tYWRfdXJsX3N1ZmZpeD1hO2MuaG9tYWRfdXJsX3N1ZmZpeF9iYXNlNjQ9dGhpcy52YihhKTtjLmhvbWFkX3JldHVybl9vbmx5X3VybF9hbmRfaGFzaD0KInRydWUiO2MuaG9tYWRfaGFzaF9ndWVzc2VkPSJ0cnVlIjt0aGlzLllhKGEsZi5KYSxjLGZ1bmN0aW9uKGEpe2E9YS5yZXNwb25zZVRleHQ7dHJ5e2E9SlNPTi5wYXJzZShhKX1jYXRjaChjKXthPSExfXRoaXMuS3IoZi51ZCgpLnJlcGxhY2UoIltoYXNoXSIsYS5oYXNoKSxiLGQpfS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7fSxmLCEwKX0sSHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuS2M9YX0sRXY6ZnVuY3Rpb24oYSxiLGQsZixjKXt0aGlzLllhKGEsZCx7fSxmdW5jdGlvbihhKXt0cnl7dmFyIGQ9SlNPTi5wYXJzZShhLnJlc3BvbnNlVGV4dCk7ZFswXSYmKGQ9ZFswXSk7ZD9kLmlkPyhiPWIucmVwbGFjZSgiW2lkXSIsZC5pZCksYj1iLnJlcGxhY2UoIltwcmljZV0iLGQucHJpY2UpLGI9Yi5yZXBsYWNlKCJbYWR2ZXJ0aXNlcl0iLGQuYWR2ZXJ0aXNlciksYj1iLnJlcGxhY2UoIltjdXJsXSIsZC5jdXJsKSxiPWIucmVwbGFjZSgiW2Zvcm1hdF0iLGQuZm9ybWF0KSxiPWIucmVwbGFjZSgiW3NyY10iLApkLnNyYyksYj1iLnJlcGxhY2UoIltwcmljZXJhbmdlXSIsZC5wcmljZXJhbmdlKSxiPWIucmVwbGFjZSgiW3BpZF0iLGQucGlkKSxiPWIucmVwbGFjZSgiW3ByaW9dIixkLnByaW8pLGI9Yi5yZXBsYWNlKCJbZGlkXSIsZC5kaWQpLGMoe3BsYWNlaG9sZGVyOmIsbWFjcm86Zn0pKTpjKHtwbGFjZWhvbGRlcjoiIixtYWNybzpmfSk6Yyh7cGxhY2Vob2xkZXI6IiIsbWFjcm86Zn0pfWNhdGNoKGUpe2Moe3BsYWNlaG9sZGVyOiIiLG1hY3JvOmZ9KX19LGZ1bmN0aW9uKCl7Yyh7cGxhY2Vob2xkZXI6IiIsbWFjcm86Zn0pfSl9LFBuOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0hMTshYjspe3ZhciBkPWEubGFzdEluZGV4T2YoIkVOQ09ERSgiKTswPmQ/Yj0hMDooZD1hLnN1YnN0cmluZyhkKzcsYS5pbmRleE9mKCIpIixkKSksYT1hLnJlcGxhY2UoIkVOQ09ERSgiK2QrIikiLGVuY29kZVVSSUNvbXBvbmVudChkKSkpfXJldHVybiBhfSxrcjpmdW5jdGlvbihhLGIpe3ZhciBkPSExO2lmKGIpZm9yKHZhciBmPQowO2Y8Yi5sZW5ndGg7ZisrKWlmKGJbZl09PWEpe2Q9ITA7YnJlYWt9cmV0dXJuIGR9fX0pKGMpO3ZhciBSPWMuJGp8fFI7bmV3IFI7dmFyIGU9bmV3IFI7KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoYSl7dGhpcy5kYXRhPWF8fHt9fWMuWmo9YjtiLlhhPWZ1bmN0aW9uKGEsYil7dmFyIGQ9e30sZjtmb3IoZiBpbiBiKWRbZl09YltmXTtmb3IoZiBpbiBhKWRbZl09YVtmXTtyZXR1cm4gZH07Yi5Rcz17Y29kZToiMTAwMCIsdHlwZToicGVuYWx0eSIsbWVzc2FnZToiIixuYW1lOiJwZW5hbHR5In07Yi5kcz17Y29kZToiMTAwMSIsdHlwZToibWVkaWFlcnJvciIsbWVzc2FnZToiIixuYW1lOiJhZEVycm9yIn07Yi5udj17Y29kZToiMTAwMiIsdHlwZToidnBhaWQiLG1lc3NhZ2U6IiIsbmFtZToidnBhaWQifTtiLnlwPXtjb2RlOiIxMDAzIix0eXBlOiJlbXB0eVZhc3QiLG1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IueHY9e2NvZGU6IjEwMDQiLHR5cGU6Im1hbGZvcm1hdHRlZFhNTCIsCm1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IuVWY9e2NvZGU6IjEwMDUiLHR5cGU6ImFkU3RhcnQiLG1lc3NhZ2U6IiIsbmFtZToiYWRTdGFydCJ9O2IuTmY9e2NvZGU6IjEwMDYiLHR5cGU6ImFkRmlyc3RRdWFydGlsZSIsbWVzc2FnZToiIixuYW1lOiJhZEZpcnN0UXVhcnRpbGUifTtiLlJmPXtjb2RlOiIxMDA3Iix0eXBlOiJhZE1pZFBvaW50IixtZXNzYWdlOiIiLG5hbWU6ImFkTWlkUG9pbnQifTtiLlZmPXtjb2RlOiIxMDA4Iix0eXBlOiJhZFRoaXJkUXVhcnRpbGUiLG1lc3NhZ2U6IiIsbmFtZToiYWRUaGlyZFF1YXJ0aWxlIn07Yi4kbT17Y29kZToiMTAwOSIsdHlwZToiYWRDb21wbGV0ZSIsbWVzc2FnZToiIixuYW1lOiJhZENvbXBsZXRlIn07Yi5QZj17Y29kZToiMTAxMCIsdHlwZToiYWRJbXByZXNzaW9uc0NhbGxlZCIsbWVzc2FnZToiIixuYW1lOiJhZEltcHJlc3Npb24ifTtiLlV1PXtjb2RlOiIxMDExIix0eXBlOiJ2YXN0TG9hZGluZ0ZhaWxlZCIsbWVzc2FnZToiIiwKbmFtZToiYWRFcnJvciJ9O2IuY3M9e2NvZGU6IjEwMTIiLHR5cGU6Im5vQ3JlYXRpdmUiLG1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IuenA9e2NvZGU6IjEwMTMiLHR5cGU6ImVtcHR5VmFzdEZyb21Ib21hZFNlcnZlckV2ZW50IixtZXNzYWdlOiIiLG5hbWU6ImFkRXJyb3IifTtiLnV2PXtjb2RlOiIxMDE0Iix0eXBlOiJ3cmFwcGVyTGltaXRSZWFjaGVkIixtZXNzYWdlOiIiLG5hbWU6ImFkRXJyb3IifTtiLmlnPXtjb2RlOiIxMDE1Iix0eXBlOiJjbGlja3Rocm91Z2giLG1lc3NhZ2U6IiIsbmFtZToiYWRDbGljayJ9O2IuUG89e2NvZGU6IjEwMTYiLHR5cGU6ImNvbnRpbnVlQ29udGVudCIsbWVzc2FnZToiIixuYW1lOiJjb250aW51ZUNvbnRlbnQifTtiLmdkPXtjb2RlOiIxMDE3Iix0eXBlOiJjb250ZW50UGxheWVyUGxheSIsbWVzc2FnZToiIixuYW1lOiJjb250ZW50UGxheWVyUGxheSJ9O2IuZmQ9e2NvZGU6IjEwMTgiLHR5cGU6ImNvbnRlbnRQbGF5ZXJQYXVzZSIsbWVzc2FnZToiIiwKbmFtZToiY29udGVudFBsYXllclBhdXNlIn07Yi5UZj17Y29kZToiMTAxOSIsdHlwZToiYWRTa2lwcGVkIixtZXNzYWdlOiIiLG5hbWU6ImFkU2tpcHBlZCJ9O2IuYm49e2NvZGU6IjEwMjAiLHR5cGU6ImFkUmVxdWVzdCIsbWVzc2FnZToiIixuYW1lOiJhZFJlcXVlc3QifTtiLlVjPXtjb2RlOiIxMDIxIix0eXBlOiJhZFBsYXkiLG1lc3NhZ2U6IiIsbmFtZToiYWRQbGF5In07Yi5ZZD17Y29kZToiMTAyMiIsdHlwZToiYWRQYXVzZSIsbWVzc2FnZToiIixuYW1lOiJhZFBhdXNlIn07Yi4kZD17Y29kZToiMTAyMyIsdHlwZToiYWRUaW1lIixtZXNzYWdlOiIiLG5hbWU6ImFkVGltZSJ9O2IuYW49e2NvZGU6IjEwMjQiLHR5cGU6ImFkTWV0YSIsbWVzc2FnZToiIixuYW1lOiJhZE1ldGEifTtiLmJpPXtjb2RlOiIxMDI1Iix0eXBlOiJ2aWV3YWJsZSIsbWVzc2FnZToiIixuYW1lOiJ2aWV3YWJsZSJ9O2IuZnM9e2NvZGU6IjEwMjYiLHR5cGU6Im5vdFZpZXdhYmxlIixtZXNzYWdlOiIiLG5hbWU6Im5vdFZpZXdhYmxlIn07CmIueGQ9e2NvZGU6IjEwMjciLHR5cGU6Im11dGUiLG1lc3NhZ2U6IiIsbmFtZToibXV0ZSJ9O2IudGY9e2NvZGU6IjEwMjgiLHR5cGU6InVubXV0ZSIsbWVzc2FnZToiIixuYW1lOiJ1bm11dGUifTtiLmpnPXtjb2RlOiIxMDI5Iix0eXBlOiJjb250ZW50UGxheWVyTXV0ZWQiLG1lc3NhZ2U6IiIsbmFtZToiY29udGVudFBsYXllck11dGVkIn07Yi5tdj17Y29kZToiMTAzMCIsdHlwZToidnBhaWRlcnJvciIsbWVzc2FnZToiIixuYW1lOiJhZEVycm9yIn07Yi5SdT17Y29kZToiOTAwMSIsdHlwZToidmFyaWFibGVEZWxldGVkRXZlbnQiLG1lc3NhZ2U6IiIsbmFtZToidmFyaWFibGVEZWxldGVkRXZlbnQifTtiLmVzPXtjb2RlOiI5MDAyIix0eXBlOiJub1ZhcmlhYmxlU2V0dGluZ0V2ZW50IixtZXNzYWdlOiIiLG5hbWU6Im5vVmFyaWFibGVTZXR0aW5nRXZlbnQifTtiLnByb3RvdHlwZT17Z2V0RXJyb3JDb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3JDb2RlfX19KShjKTt2YXIgaz0KYy5aanx8aztjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5odT10aGlzLmFbMl07dGhpcy5Iaz10aGlzLmFbMV07dGhpcy5LdT10aGlzLmFbOF07dGhpcy5QcD10aGlzLmFbN107dGhpcy5FaT10aGlzLmFbNF07dGhpcy5Gaj10aGlzLmFbMV07dGhpcy52dT10aGlzLmFbNF07dGhpcy5vbD10aGlzLmFbNV07dGhpcy5Mbz10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs2XX1jLkFsPWI7Yi5wcm90b3R5cGU9e2d1OmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5odTp0aGlzLkdrKGEpfSxHazpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuSGs6dGhpcy5KdShhKX0sSnU6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLkt1OnRoaXMuT3AoYSl9LE9wOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5QcDp0aGlzLkRpKGEpfSxEaTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuRWk6CnRoaXMuRWooYSl9LEVqOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5Gajp0aGlzLnV1KGEpfSx1dTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMudnU6dGhpcy5ubChhKX0sbmw6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLm9sOnRoaXMuS28oYSl9LEtvOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5Mbzp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmo6YX19fSkoYyk7dmFyIGthPWMuQWx8fGthLG1jPW5ldyBrYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPW1jLmd1KDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7fWMuYWs9YjtiLnByb3RvdHlwZT17dmU6ZnVuY3Rpb24oYSl7dmFyIGI9MCxkLGYsYztpZigwPT1hLmxlbmd0aClyZXR1cm4gYjtkPTA7Zm9yKGM9YS5sZW5ndGg7ZDxjO2QrKylmPWEuY2hhckNvZGVBdChkKSwKYj0oYjw8NSktYitmLGJ8PTA7cmV0dXJuIE1hdGguYWJzKGIpfSxqYTpmdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKERhdGUubm93KCkvMUUzLzM2MDAvMjQpK25hdmlnYXRvci5hcHBDb2RlTmFtZStuYXZpZ2F0b3IuYXBwTmFtZStuYXZpZ2F0b3IuYXBwVmVyc2lvbituYXZpZ2F0b3IudXNlckFnZW50K25hdmlnYXRvci5wbGF0Zm9ybSsobmF2aWdhdG9yLmxhbmd1YWdlfHxuYXZpZ2F0b3IuRHx8IngiKX0sa3E6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yb3VuZChEYXRlLm5vdygpLzFFMy8zNjAwKStuYXZpZ2F0b3IuYXBwQ29kZU5hbWUrbmF2aWdhdG9yLmFwcE5hbWUrbmF2aWdhdG9yLmFwcFZlcnNpb24rbmF2aWdhdG9yLnVzZXJBZ2VudCtuYXZpZ2F0b3IucGxhdGZvcm0rKG5hdmlnYXRvci5sYW5ndWFnZXx8bmF2aWdhdG9yLkR8fCJ4IikrKG5ldyBEYXRlKS50b1RpbWVTdHJpbmcoKS5zdWJzdHIoLTEyKX0sb2Q6ZnVuY3Rpb24oYSl7YT1wYXJzZUludChhKTtpZig2NTw9CmEmJjkwPj1hfHw5Nzw9YSYmMTIyPj1hKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGEpO2lmKDA+PWEpcmV0dXJuIiI7aWYoNjU+YSlyZXR1cm4gdGhpcy5vZChhKzY1KTtpZig5MDxhKXJldHVybiB0aGlzLm9kKE1hdGgucm91bmQoYS8yKSl9LHJldmVyc2U6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGQ9YS5sZW5ndGgtMSxiPSIiOzA8PWQ7Yis9YVtkLS1dKTtyZXR1cm4gYn0saWE6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy52ZSh0aGlzLmphKCkrIiIpLGE9KGErIiIrdGhpcy5yZXZlcnNlKGErIiIpKS5tYXRjaCgvLnsxLDJ9L2cpLGI9IiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWIrPXRoaXMub2QoYVtkXSk7MD09Yi5sZW5ndGgmJihiPSJ6b3JrIik7cmV0dXJuIGJ9LGZyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWEoKSsiMiJ9LFRnOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMudmUodGhpcy5rcSgpKyIiKSxhPShhKyIiK3RoaXMucmV2ZXJzZShhKyIiKSkubWF0Y2goLy57MSwyfS9nKSwKYj0iIixkPTA7ZDxhLmxlbmd0aDtkKyspYis9dGhpcy5vZChhW2RdKTswPT1iLmxlbmd0aCYmKGI9InpvcmsiKTtyZXR1cm4gYn19fSkoYyk7dmFyIEo9Yy5ha3x8SjtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5kbT10aGlzLmFbOV07dGhpcy5xdj10aGlzLmFbMl07dGhpcy5tbz10aGlzLmFbMV07dGhpcy5QdT10aGlzLmFbNl07dGhpcy5DaT10aGlzLmFbNl07dGhpcy5xbj10aGlzLmFbN107dGhpcy53az10aGlzLmFbM107dGhpcy5qPXRoaXMuYVszXX1jLlNvPWI7Yi5wcm90b3R5cGU9e2NtOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5kbTp0aGlzLnB2KGEpfSxwdjpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMucXY6dGhpcy5sbyhhKX0sbG86ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLm1vOnRoaXMuT3UoYSl9LE91OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhPwp0aGlzLlB1OnRoaXMuQmkoYSl9LEJpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5DaTp0aGlzLnBuKGEpfSxwbjpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMucW46dGhpcy52ayhhKX0sdms6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLndrOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuajphfX19KShjKTt2YXIgbGE9Yy5Tb3x8bGEsbmM9bmV3IGxhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9bmMuY20oNCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe312YXIgYT0veHl6Ly50ZXN0KGZ1bmN0aW9uKCl7eHl6fSk/L1xiX3N1cGVyXGIvOi8uKi87Yi5leHRlbmQ9ZnVuY3Rpb24oaCl7dmFyIGQ9dGhpcy5wcm90b3R5cGUsZj1PYmplY3QuY3JlYXRlKGQpLGM7Zm9yKGMgaW4gaClmW2NdPSJmdW5jdGlvbiI9PT0KdHlwZW9mIGhbY10mJiJmdW5jdGlvbiI9PXR5cGVvZiBkW2NdJiZhLnRlc3QoaFtjXSk/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD10aGlzLm07dGhpcy5tPWRbYV07dmFyIGY9Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5tPWg7cmV0dXJuIGZ9fShjLGhbY10pOmhbY107aD0iZnVuY3Rpb24iPT09dHlwZW9mIGYubD9mLmhhc093blByb3BlcnR5KCJpbml0Iik/Zi5sOmZ1bmN0aW9uKCl7ZC5sLmFwcGx5KHRoaXMsYXJndW1lbnRzKX06ZnVuY3Rpb24oKXt9O2gucHJvdG90eXBlPWY7Zi5jb25zdHJ1Y3Rvcj1oO2guZXh0ZW5kPWIuZXh0ZW5kO3JldHVybiBofTtjLmlqPWJ9KShjKTt2YXIgTT1jLmlqfHxNO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnVzPXRoaXMuYVs4XTt0aGlzLkFvPXRoaXMuYVsyXTt0aGlzLmlpPXRoaXMuYVs3XTt0aGlzLkJuPQp0aGlzLmFbNV07dGhpcy5UdD10aGlzLmFbOV07dGhpcy5zcz10aGlzLmFbNV07dGhpcy5XdT10aGlzLmFbOF07dGhpcy5qPXRoaXMuYVsxXX1jLlNrPWI7Yi5wcm90b3R5cGU9e3RzOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy51czp0aGlzLnpvKGEpfSx6bzpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuQW86dGhpcy5oaShhKX0saGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5paTp0aGlzLkFuKGEpfSxBbjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuQm46dGhpcy5TdChhKX0sU3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlR0OnRoaXMucnMoYSl9LHJzOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5zczp0aGlzLlZ1KGEpfSxWdTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuV3U6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBtYT1jLlNrfHxtYSxvYz1uZXcgbWEoMSxuZXcgRGF0ZSwKMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9b2MudHMoNCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7Yy5zbD1NLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLk1hPXt9O3RoaXMuSz1udWxsO3RoaXMuR2M9MTAwO3RoaXMuRmI9MDt0aGlzLlVhPTE1MDt0aGlzLkhiPTA7dGhpcy5DdChiKX0sZzpmdW5jdGlvbigpe30sUjpmdW5jdGlvbigpe3RoaXMuRmI8PXRoaXMuVWE/KHRoaXMuRmIrKyx0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuZy5iaW5kKHRoaXMpLHRoaXMuR2MpKTowPnRoaXMuVWEmJih0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuZy5iaW5kKHRoaXMpLHRoaXMuR2MpKX0sb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GYj50aGlzLlVhPyEwOiExfSxhZjpmdW5jdGlvbigpe3RoaXMuRmI9MH0sTzpmdW5jdGlvbigpe3JldHVybiJlbXB0eSJ9LEN0OmZ1bmN0aW9uKGIpe3RoaXMuSz0KYn0saXE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LfSxQOmZ1bmN0aW9uKGIpe2UudHJhY2soInN0YXRzX3BsYXllciIsYi5PKCksITApO3RoaXMuTWFbYi5qYSgpXT1iO04mJk4uYWgmJk4uYXUoYil9LCR2OmZ1bmN0aW9uKCl7cmV0dXJuIGUudGUodGhpcy5NYSl9LE46ZnVuY3Rpb24oYil7dmFyIGE9Yi52aWRlb1RhZyxoO2ZvcihoIGluIHRoaXMuTWEpaWYoYT09dGhpcy5NYVtoXS52aWRlb1RhZylyZXR1cm4hMDtyZXR1cm4gdGhpcy5NYVtiLmphKCldPyEwOiExfSxscjpmdW5jdGlvbihiKXtiPWIuSWEoKTtmb3IodmFyIGEgaW4gdGhpcy5NYSlpZihiLmlkPT10aGlzLk1hW2FdLklhKCkuaWQpcmV0dXJuITA7cmV0dXJuITF9LHB3OmZ1bmN0aW9uKGIpe3RoaXMuTWFbYi5pZF09bnVsbH19KX0pKGMpO3ZhciBxPWMuc2x8fHE7KGZ1bmN0aW9uKGMpe2MudWw9TS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy52aWRlb1RhZz10aGlzLmNvbnRhaW5lcj10aGlzLmlkPW51bGw7dGhpcy5HYz0KMTA7dGhpcy5GYj0wO3RoaXMuVWE9NTA7dGhpcy5WPW51bGw7dGhpcy5xYT0hMTt0aGlzLnBsYXllcj1iO3RoaXMuemI9IiI7dGhpcy5uZz0hMTt0aGlzLlMoKX0sTzpmdW5jdGlvbigpe3JldHVybiJlbXB0eSJ9LHU6ZnVuY3Rpb24oKXt2YXIgYj17fSxhPXRoaXMudmlkZW9UYWcsaD10aGlzLklhKCksZD10aGlzLmdldFJhd1BsYXllcigpO2lmKGIudmlkZW9UYWc9YSliLnZpZGVvVGFnSWQ9YS5pZDtpZihiLmNvbnRhaW5lcj1oKWIuY29udGFpbmVySWQ9aC5pZDtkJiYoYi5wbGF5ZXI9ZCk7cmV0dXJuIGJ9LFM6ZnVuY3Rpb24oKXt9LE5hOmZ1bmN0aW9uKCl7fSxLdDpmdW5jdGlvbihiKXt0aGlzLlY9Yn0sYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5WfSxGdDpmdW5jdGlvbihiKXt0aGlzLk1lPWJ9LFp2OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTWV9LExlOmZ1bmN0aW9uKCl7fSxSOmZ1bmN0aW9uKCl7dGhpcy5GYjw9dGhpcy5VYSYmKHRoaXMuRmIrKyx3aW5kb3cuc2V0VGltZW91dCh0aGlzLlMuYmluZCh0aGlzKSwKdGhpcy5HYykpfSxpc0Z1bGxzY3JlZW46ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0cnl7aWYoZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4pZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKVsiY2F0Y2giXShmdW5jdGlvbigpe30pO2Vsc2UgaWYoZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4pZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4oKTtlbHNlIGlmKGRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4pZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpO2Vsc2UgaWYoZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbilkb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuKCk7ZWxzZSByZXR1cm4hMX1jYXRjaChiKXt9fSxCZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLklhKCl9LHBhdXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGxheWVyLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXIucGxheSgpfSxqYTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfSwKRmQ6ZnVuY3Rpb24oYil7dGhpcy5pZD1ifSxydzpmdW5jdGlvbigpe30sWjpmdW5jdGlvbihiKXtpZighYilyZXR1cm4hMTt0aGlzLnZpZGVvVGFnPWI7dGhpcy5GcSgpfHx0aGlzLmNuKCk7dGhpcy5GZCh0aGlzLnZpZGVvVGFnLmdldEF0dHJpYnV0ZSgiaWQiKSl9LGJ3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW9UYWd9LGNuOmZ1bmN0aW9uKCl7dGhpcy52aWRlb1RhZy5zZXRBdHRyaWJ1dGUoImlkIixlLmJhKDEwKSl9LEZxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW9UYWcuZ2V0QXR0cmlidXRlKCJpZCIpPyEwOiExfSxZOmZ1bmN0aW9uKGIpe3RoaXMuY29udGFpbmVyPWJ9LElhOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLmNvbnRhaW5lcj90aGlzLmNvbnRhaW5lcigpOnRoaXMuY29udGFpbmVyfSxnZXRSYXdQbGF5ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXJ9LEFlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LGlzUGxheWluZzpmdW5jdGlvbigpe3JldHVybiEwfSwKZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnO3JldHVybiBiJiZiLmN1cnJlbnRUaW1lP2IuY3VycmVudFRpbWU6MH0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnO3JldHVybiBiJiZiLmR1cmF0aW9uP2IuZHVyYXRpb246MH0sVmE6ZnVuY3Rpb24oKXtyZXR1cm4hMX0saXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xYX0scGE6ZnVuY3Rpb24oKXt0aGlzLnFhPSEwfSxIYzpmdW5jdGlvbigpe3ZhciBiPW07cmV0dXJuIGImJmIucnVuSW5zaWRlQ29udGFpbmVyPyEwOiExfSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGImJmIubXV0ZWQ/Yi5tdXRlZDohMX0sR2U6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sQ2g6ZnVuY3Rpb24oYil7dGhpcy56Yj1ifSxZdjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnpifSx5aDpmdW5jdGlvbigpe3RoaXMuemI9bnVsbH0sZHc6ZnVuY3Rpb24oKXt2YXIgYj0hMTt0aGlzLnpiJiYKKGI9ITApO3JldHVybiBifSxsdzpmdW5jdGlvbigpe3RoaXMubmd8fCh0aGlzLm5nPSEwKX0scWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sVnY6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPXRoaXMudmlkZW9UYWc7YSYmYS5nZXRBdHRyaWJ1dGUoImlkIikmJihiPWEuZ2V0QXR0cmlidXRlKCJpZCIpKTtyZXR1cm4gYn19KX0pKGMpO3ZhciB1PWMudWx8fHU7KGZ1bmN0aW9uKGMpe2Mubmk9TS5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLks9dGhpcy5wbGF5ZXI9IiI7dGhpcy5KZj0iMSI7dGhpcy5LZj0iMiI7dGhpcy5XbT0iMyI7dGhpcy5QYz0wO3RoaXMuaWg9MzA7dGhpcy5MYj1bXTt0aGlzLmZiPVtdO3RoaXMuaWM9e2V4dGVybmFsOjEsbm9mcmFtZXdvcms6MixhZGVycm9yOjMsY29udGVudHBsYXk6NCxub0Fkc01hbmFnZXI6NSx1bmtub3duOjZ9O3RoaXMuWGY9dGhpcy5ZaD0hMTt0aGlzLnN0YXR1cz10aGlzLlBjO3RoaXMuaWQ9ZS5iYSgxMCk7dGhpcy5mZihiKTt0aGlzLkR0KGEpfSwKZzpmdW5jdGlvbigpe30sdGE6ZnVuY3Rpb24oKXt0aGlzLllofHwodGhpcy5ZaD0hMCxlLkplKCkpfSxQZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuTygpO1MmJlMuVWImJiFuYSYmKG5hPSEwLGUudHJhY2soInBvc3NpYmxlRG91YmxlQWQiLCIxMDRfIitiKSl9LGJyOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKSxhPW5ldyBKO3dpbmRvd1thLmlhKCldfHwod2luZG93W2EuaWEoKV09e30pO3dpbmRvd1thLmlhKCldW2IuamEoKV18fCh3aW5kb3dbYS5pYSgpXVtiLmphKCldPXt9LHdpbmRvd1thLmlhKCldW2IuamEoKV0uaW5pdGlhdG9yPWUuemMoKSk7d2luZG93W2EuaWEoKV1bYi5qYSgpXVtlLnpjKCldP3dpbmRvd1thLmlhKCldW2IuamEoKV1bZS56YygpXSsrOndpbmRvd1thLmlhKCldW2IuamEoKV1bZS56YygpXT0xfSxpcjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCksYT0hMCxoPW5ldyBKO3dpbmRvd1toLmlhKCldJiZ3aW5kb3dbaC5pYSgpXVtiLmphKCldJiYKd2luZG93W2guaWEoKV1bYi5qYSgpXS5pbml0aWF0b3IhPWUuemMoKSYmKHRoaXMuZ2YoKSxhPSExKTtyZXR1cm4gYX0sSTpmdW5jdGlvbihiLGEpe3ZhciBoPSEwO2ImJihoPSExKTtpZighdGhpcy51YSgpKXt0aGlzLmJyKCk7aWYoIXRoaXMuaXIoKSl7ZS50cmFjaygic3RhdHNfaGRfZG91YmxlTWFpbiIsIiIsITApO3RoaXMuZ2YoKTtyZXR1cm59dGhpcy5nZigpO3RoaXMuSyh0aGlzLmdldFBsYXllcigpLGgpO3RoaXMuUmgoKTt0aGlzLlhmPSEwO2EmJiJmdW5jdGlvbiI9PXR5cGVvZiBhJiZhKCk7cmV0dXJuITB9cmV0dXJuITF9LG86ZnVuY3Rpb24oYixhKXt0aGlzLnVhKCl8fCh0aGlzLkxiLnB1c2goYiksdGhpcy5mYi5wdXNoKHtyZWFzb246YixkZXRhaWw6YX0pKX0sUmg6ZnVuY3Rpb24oKXt2YXIgYj0idW5rbm93biIsYT1bXTt0aGlzLkxiJiYwPHRoaXMuTGIubGVuZ3RoJiYodGhpcy5MYj1lLnVuaXF1ZSh0aGlzLkxiKSxlLnRyYWNrKCJhY3RpdmF0ZWRCeSIsdGhpcy5MYi5qb2luKCIsIikpKTsKaWYodGhpcy5mYil7Zm9yKHZhciBoPTA7aDx0aGlzLmZiLmxlbmd0aDtoKyspdGhpcy5pY1t0aGlzLmZiW2hdLnJlYXNvbl09PXRoaXMuaWNbYl0mJmEucHVzaCh0aGlzLmZiW2hdLmRldGFpbCksdGhpcy5pY1t0aGlzLmZiW2hdLnJlYXNvbl08dGhpcy5pY1tiXSYmKGE9W10sYS5wdXNoKHRoaXMuZmJbaF0uZGV0YWlsKSxiPXRoaXMuZmJbaF0ucmVhc29uKTt0aGlzLmljW2JdfHwoYj0idW5rbm93biIsYT1bXSk7MDxhLmxlbmd0aCYmKGg9ZS51bmlxdWUoYSksYj1iKyItIitoLmpvaW4oIi0iKSk7ZS50cmFjaygic3RhdHNfaGRfYWN0aXZhdGVkIixiLCEwLGEpfX0sY3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5YZn0sdzpmdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMuSmZ9LGdmOmZ1bmN0aW9uKCl7dGhpcy5zdGF0dXM9dGhpcy5LZn0sSXQ6ZnVuY3Rpb24oKXt0aGlzLnN0YXR1cz10aGlzLldtfSxyYTpmdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMuUGN9LE9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT0KdGhpcy5KZn0sTXY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0dXM9PXRoaXMuS2Z9LHVhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdHVzIT10aGlzLlBjfSxmZjpmdW5jdGlvbihiKXt0aGlzLnBsYXllcj1ifSxnZXRQbGF5ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXJ9LER0OmZ1bmN0aW9uKGIpe3RoaXMuSz1ifSxpcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLkt9LE5yOmZ1bmN0aW9uKCl7fX0pfSkoYyk7dmFyIHY9Yy5uaXx8djtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5Qcj10aGlzLmFbOV07dGhpcy5CcT10aGlzLmFbNV07dGhpcy50cj10aGlzLmFbMl07dGhpcy5QaT10aGlzLmFbN107dGhpcy5Ubj10aGlzLmFbNl07dGhpcy5VbT10aGlzLmFbNV07dGhpcy5LbD10aGlzLmFbOF07dGhpcy5qPXRoaXMuYVs0XX1jLkVuPWI7Yi5wcm90b3R5cGU9e09yOmZ1bmN0aW9uKGEpe3JldHVybiA5PAphP3RoaXMuUHI6dGhpcy5BcShhKX0sQXE6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkJxOnRoaXMuc3IoYSl9LHNyOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy50cjp0aGlzLk9pKGEpfSxPaTpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuUGk6dGhpcy5TbihhKX0sU246ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLlRuOnRoaXMuVG0oYSl9LFRtOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5VbTp0aGlzLkpsKGEpfSxKbDpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuS2w6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBvYT1jLkVufHxvYSxwYz1uZXcgb2EoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1wYy5Pcig0KTsoZnVuY3Rpb24oYyl7Yy5Paj11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb0NvbnRhaW5lcjt0aGlzLlkoYik7Yj10aGlzLmdldFJhd1BsYXllcigpLnZpZGVvO3RoaXMuWihiKTt0aGlzLmlzUGxheWluZz0hMTtiLmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5pc1BsYXlpbmc9ITB9LmJpbmQodGhpcykpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheSgpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkV4cFBsYXllciJ9fSl9KShjKTt2YXIgcGE9Yy5Panx8cGE7KGZ1bmN0aW9uKGMpe2MuUGo9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCksYT1iLk52O2E/YS5uYT9hLm5hLmFkZEV2ZW50TGlzdGVuZXIoImFkRXJyb3IiLGZ1bmN0aW9uKGEpe3ZhciBiPQohMSxmPSIiO2EuZ2V0RXJyb3ImJihiPWEuZ2V0RXJyb3IoKSk7Ynx8YS5kZXRhaWwuZ2V0RXJyb3ImJihiPWEuZGV0YWlsLmdldEVycm9yKCkpO2IuZ2V0RXJyb3JDb2RlJiYoZis9Yi5nZXRFcnJvckNvZGUoKSk7Yi5nZXRNZXNzYWdlJiYoZis9Yi5nZXRNZXNzYWdlKCkpO2YuaW5kZXhPZiYmKDA8PWYuaW5kZXhPZigiMTAwOSIpfHwwPD1mLmluZGV4T2YoIjMwMyIpfHwwPD1mLmluZGV4T2YoIjQwMyIpKT8odGhpcy53KCksdGhpcy50YSgpKToodGhpcy5vKCJhZGVycm9yIiksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZygpfS5iaW5kKHRoaXMpLDEwMCk6Yi5fYWRDb25maWcuYWRzRGlzYWJsZWR8fCh0aGlzLm8oImZyYW1ld29yayIpLHRoaXMucygpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nP3RoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcyksCjEwKX19KX0pKGMpO3ZhciBxYT1jLlBqfHxxYTsoZnVuY3Rpb24oYyl7Yy5Raj1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZih3aW5kb3cucGxheWVyTWFuYWdlciYmd2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycyYmd2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycygpWzBdKXt2YXIgYj1uZXcgcGEod2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycygpWzBdKTt0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBxYShiLHRoaXMuSykpLmcoKSl9dGhpcy5SKCl9fSl9KShjKTt2YXIgcmE9Yy5Ranx8cmE7KG5ldyByYShyKSkuZygpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnR0PXRoaXMuYVs4XTt0aGlzLmJtPXRoaXMuYVs3XTt0aGlzLkJqPXRoaXMuYVs1XTt0aGlzLmhvPXRoaXMuYVsyXTt0aGlzLmhtPQp0aGlzLmFbMV07dGhpcy5Sbj10aGlzLmFbM107dGhpcy5saj10aGlzLmFbNl07dGhpcy5pcD10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVs3XX1jLkJzPWI7Yi5wcm90b3R5cGU9e3N0OmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy50dDp0aGlzLmFtKGEpfSxhbTpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuYm06dGhpcy5BaihhKX0sQWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkJqOnRoaXMuZm8oYSl9LGZvOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5obzp0aGlzLmdtKGEpfSxnbTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuaG06dGhpcy5RbihhKX0sUW46ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLlJuOnRoaXMua2ooYSl9LGtqOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5sajp0aGlzLmhwKGEpfSxocDpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuaXA6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpOwp2YXIgc2E9Yy5Cc3x8c2EscWM9bmV3IHNhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9cWMuc3QoNCk7KGZ1bmN0aW9uKGMpe2MucWs9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dGhpcy5WYj0hMTt0aGlzLnNnKCk7dGhpcy51ZygpO3RoaXMuT289ITF9LHNnOmZ1bmN0aW9uKCl7dGhpcy5WYj0hMTt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnBsYXllci5pZCk7Ynx8KHRoaXMuVmI9ITApO2lmKCJPQkpFQ1QiPT1iLm5vZGVOYW1lfHwiVklERU8iPT1iLm5vZGVOYW1lKWI9Yi5wYXJlbnROb2RlO3RoaXMuWShiKX0sdWc6ZnVuY3Rpb24oKXtpZighdGhpcy5WYil7dmFyIGI9dGhpcy5JYSgpLGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXTthfHwoYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7CmF8fCh0aGlzLlZiPSEwKTt0aGlzLlooYSl9fSxOYTpmdW5jdGlvbigpe3ZhciBiPXRoaXMucGxheWVyO2lmKG0ucG9zdHJvbGxVc2VDb21wbGV0ZUV2ZW50KWIuX2V2ZW50cy5iZWZvcmVDb21wbGV0ZS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OnRoaXMucGxheWVyLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy5WJiYoMCx0aGlzLlYpKCl9LmJpbmQodGhpcyl9KTtlbHNlIGlmKGIuX2V2ZW50cyYmYi5fZXZlbnRzLnRpbWUmJmIuX2V2ZW50cy50aW1lLnB1c2goe2NvbnRleHQ6bnVsbCxjdHg6dGhpcy5wbGF5ZXIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7YS5kdXJhdGlvbiYmYS5wb3NpdGlvbiYmMT5hLmR1cmF0aW9uLWEucG9zaXRpb24mJnRoaXMuViYmKDAsdGhpcy5WKSgpfS5iaW5kKHRoaXMpfSksYi5vblRpbWUpYi5vblRpbWUoZnVuY3Rpb24oYSl7YS5kdXJhdGlvbiYmYS5wb3NpdGlvbiYmMT5hLmR1cmF0aW9uLWEucG9zaXRpb24mJnRoaXMuViYmKDAsdGhpcy5WKSgpfS5iaW5kKHRoaXMpKX0sCkxlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRFcnJvciYmYi5fZXZlbnRzLmFkRXJyb3IucHVzaCh7Y29udGV4dDpudWxsLGN0eDpiLGNhbGxiYWNrOmZ1bmN0aW9uKGEpe3RoaXMuSGQoYSl9LmJpbmQodGhpcyl9KTtpZihiLm9uQWRFcnJvciliLm9uQWRFcnJvcihmdW5jdGlvbihhKXt0aGlzLkhkKGEpfS5iaW5kKHRoaXMpKX0sSGQ6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5wbGF5ZXI7YS5nZXRQb3NpdGlvbigpO2EuZ2V0UG9zaXRpb24oKTthLmdldER1cmF0aW9uKCk7YS5nZXRQb3NpdGlvbigpO2EuZ2V0RHVyYXRpb24oKTthLmdldFBvc2l0aW9uKCk7Im1pZCI9PWIuYWRwb3NpdGlvbiYmYS5nZXRQb3NpdGlvbiYmMzA8YS5nZXRQb3NpdGlvbigpJiYzMDxhLmdldER1cmF0aW9uKCktYS5nZXRQb3NpdGlvbigpJiZ0aGlzLk1lJiYoMCx0aGlzLk1lKSgpfSxwbGF5OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7aWYoIWIuZ2V0U3RhdGV8fAoicGxheWluZyIhPWIuZ2V0U3RhdGUoKXx8dGhpcy52aWRlb1RhZy5wYXVzZWQpcmV0dXJuIHRoaXMucGxheWVyLnBsYXkoKX0scGF1c2U6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnBsYXllcjtyZXR1cm4gYi5nZXRTdGF0ZSYmInBhdXNlZCI9PWIuZ2V0U3RhdGUoKT8icGF1c2VkIjp0aGlzLnBsYXllci5wYXVzZSghMCl9LFZhOmZ1bmN0aW9uKCl7cmV0dXJuInBhdXNlZCI9PXRoaXMucGF1c2UoKT8hMTohMH0sTzpmdW5jdGlvbigpe3JldHVybiJKV1BsYXllciJ9LGV4aXRGdWxsc2NyZWVuOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7Yi5nZXRGdWxsc2NyZWVuJiZiLmdldEZ1bGxzY3JlZW4oKSYmYi5zZXRGdWxsc2NyZWVuKCl9LHZhOmZ1bmN0aW9uKCl7dmFyIGI9ITEsYT10aGlzLnBsYXllcjthLmdldE11dGUmJmEuZ2V0TXV0ZSgpJiYoYj0hMCk7cmV0dXJuIGJ9LHFlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXIsYT0hMTtiLmdldFZvbHVtZSYmYi5nZXRWb2x1bWUoKSYmCihhPWIuZ2V0Vm9sdW1lKCkpO3JldHVybiBhfX0pfSkoYyk7dmFyIHRhPWMucWt8fHRhOyhmdW5jdGlvbihjKXtjLnBrPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LFM6ZnVuY3Rpb24oKXt9LHJhOmZ1bmN0aW9uKCl7dGhpcy5zdGF0dXM9dGhpcy5QYzt0aGlzLmlzUGxheWluZz10aGlzLlJjPSExO3RoaXMuWmQ9MTt0aGlzLlNjPVtdO3RoaXMudGI9ITF9LGc6ZnVuY3Rpb24oKXt0aGlzLmlzUGxheWluZz10aGlzLlJjPSExO3RoaXMuWmQ9MTt0aGlzLlNjPVtdO3RoaXMudGI9ITE7dGhpcy5nZXRQbGF5ZXIoKTt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpLGE9e307Yi5nZXRDb25maWcmJihhPWIuZ2V0Q29uZmlnKCksYS5hZHZlcnRpc2luZz8oYS5hZHZlcnRpc2luZy5zY2hlZHVsZSYmKGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzP2EuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzLnRhZyYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5hZHMudGFnLmxlbmd0aCYmCih0aGlzLlpkPWEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzLnRhZy5sZW5ndGgsdGhpcy50Yj0hMCk6KGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUucHJlcm9sbCYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5wcmVyb2xsLnRhZyYmKHRoaXMudGI9ITApLGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRicmVha3ByZSYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5hZGJyZWFrcHJlLnRhZyYmKHRoaXMudGI9ITApKSksYS5hZHZlcnRpc2luZy50YWcmJih0aGlzLnRiPSEwKSk6dGhpcy53KCJubyBhZHZlcnRpc2luZyBjb25maWd1cmVkIGZvciBwbGF5ZXIiKSk7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRDb21wbGV0ZSYmYi5fZXZlbnRzLmFkQ29tcGxldGUucHVzaCh7Y29udGV4dDpudWxsLGN0eDpiLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy53KCJhZENvbXBsZXRlIik7dGhpcy5SYz0hMH0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkQ2xpY2smJmIuX2V2ZW50cy5hZENsaWNrLnB1c2goe2NvbnRleHQ6bnVsbCwKY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkQ2xpY2siKX0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkSW1wcmVzc2lvbiYmYi5fZXZlbnRzLmFkSW1wcmVzc2lvbi5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkSW1wcmVzc2lvbiIpO3RoaXMuUGUoKX0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkTWV0YSYmYi5fZXZlbnRzLmFkTWV0YS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkTWV0YSIpfS5iaW5kKHRoaXMpfSk7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRTa2lwcGVkJiZiLl9ldmVudHMuYWRTa2lwcGVkLnB1c2goe2NvbnRleHQ6bnVsbCxjdHg6YixjYWxsYmFjazpmdW5jdGlvbigpe3RoaXMudygiYWRTa2lwcGVkIil9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5hZFRpbWUmJmIuX2V2ZW50cy5hZFRpbWUucHVzaCh7Y29udGV4dDpudWxsLApjdHg6YixjYWxsYmFjazpmdW5jdGlvbigpe3RoaXMudygiYWRUaW1lIil9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5hZEVycm9yJiZiLl9ldmVudHMuYWRFcnJvci5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7dGhpcy5vbkFkRXJyb3IoYSl9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy50aW1lJiZiLl9ldmVudHMudGltZS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7dGhpcy5pc1BsYXlpbmc9ITA7YS5kdXJhdGlvbj50aGlzLmloJiYhdGhpcy51YSgpJiYodGhpcy50Yj8odGhpcy5vKCJjb250ZW50cGxheU5vQWRzIiwiIiksdGhpcy5zKCkpOih0aGlzLm8oImNvbnRlbnRwbGF5VGltZSIsMUUzKk1hdGgucm91bmQoYS5kdXJhdGlvbi8xRTMpKSx0aGlzLnMoITApKSl9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5wbGF5bGlzdEl0ZW0mJmIuX2V2ZW50cy5wbGF5bGlzdEl0ZW0ucHVzaCh7Y29udGV4dDpudWxsLApjdHg6dGhpcy5wbGF5ZXIsY2FsbGJhY2s6ZnVuY3Rpb24oKXtpZih0aGlzLnVhKCkmJih0aGlzLnJhKCksdGhpcy5nZXRQbGF5ZXIoKS5Pbz0hMCxtLnNraXBBZE9uQ29udGV4dENoYW5nZSkpe3ZhciBhPXRoaXMuZ2V0UGxheWVyKCkuemI7YSYmKGEuemQoKSxhLmhkKCkpfX0uYmluZCh0aGlzKX0pO2lmKGIub25BZENvbXBsZXRlKWIub25BZENvbXBsZXRlKGZ1bmN0aW9uKCl7dGhpcy53KCJvbkFkQ29tcGxldGUiKTt0aGlzLlJjPSEwfS5iaW5kKHRoaXMpKTtpZihiLm9uQWRJbXByZXNzaW9uKWIub25BZEltcHJlc3Npb24oZnVuY3Rpb24oKXt0aGlzLncoIm9uQWRJbXByZXNzaW9uIik7dGhpcy5QZSgpfS5iaW5kKHRoaXMpKTtpZihiLm9uQWRQbGF5KWIub25BZFBsYXkoZnVuY3Rpb24oKXt0aGlzLncoIm9uQWRQbGF5Iil9LmJpbmQodGhpcykpO2lmKGIub25BZFRpbWUpYi5vbkFkVGltZShmdW5jdGlvbigpe3RoaXMudygib25BZFRpbWUiKX0uYmluZCh0aGlzKSk7aWYoYi5vbkFkRXJyb3IpYi5vbkFkRXJyb3IoZnVuY3Rpb24oYSl7dGhpcy5vbkFkRXJyb3IoYSl9LmJpbmQodGhpcykpOwppZihiLm9uVGltZSliLm9uVGltZShmdW5jdGlvbihhKXt0aGlzLmlzUGxheWluZz0hMDthLmR1cmF0aW9uPnRoaXMuaWgmJiF0aGlzLnVhKCkmJih0aGlzLnRiPyh0aGlzLm8oImNvbnRlbnRwbGF5Tm9BZHMiLCIiKSx0aGlzLnMoKSk6KHRoaXMubygiY29udGVudHBsYXlUaW1lIiwxRTMqTWF0aC5yb3VuZChhLmR1cmF0aW9uLzFFMykpLHRoaXMucyghMCkpKX0uYmluZCh0aGlzKSl9LG9uQWRFcnJvcjpmdW5jdGlvbihiKXt2YXIgYT1iLnRhZzstMT09dGhpcy5TYy5pbmRleE9mKGEpJiZ0aGlzLlNjLnB1c2goYSk7IjEwMSI9PWIuY29kZXx8IjEwMDEiPT1iLmNvZGU/KHRoaXMudygpLHRoaXMudGEoKSk6OTAwPT1iLmNvZGUmJjA8Yi5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigiZW1wdHkiKT90aGlzLncoImVtcHR5Iik6MzAzPT1iLmNvZGUmJjA8Yi5tZXNzYWdlLmluZGV4T2YoIk5vIEFkcyBWQVNUIHJlc3BvbnNlIGFmdGVyIG9uZSBvciBtb3JlIFdyYXBwZXJzIik/dGhpcy53KCJlbXB0eSIpOgoodGhpcy5vKCJhZGVycm9yIixiLmNvZGUpLHRoaXMuU2MubGVuZ3RoPj10aGlzLlpkJiZ0aGlzLnMoKSl9LE5yOmZ1bmN0aW9uKGIpe3RoaXMubSgiSlc6ICIrYi50eXBlKX0sczpmdW5jdGlvbihiKXtiP3RoaXMubmU/dGhpcy5uZSsrOnRoaXMubmU9MTp0aGlzLm1lP3RoaXMubWUrKzp0aGlzLm1lPTE7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKTtlLkhoKGEudmlkZW9UYWcpP2EuVmI/dGhpcy53KCJwbGF5ZXIgaXMgaW52YWxkIik6dGhpcy5SY3x8dGhpcy5pc1BsYXlpbmc/KHRoaXMubWU+dGhpcy5uZSYmKGI9ITEpLHRoaXMuSShiKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoYil9LmJpbmQodGhpcyksNTApOihhLnNnKCksYS51ZygpLGEuVmJ8fHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDIwKSl9fSl9KShjKTt2YXIgdWE9Yy5wa3x8dWE7KGZ1bmN0aW9uKGMpe2Mucms9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSwKZzpmdW5jdGlvbigpe3ZhciBiPWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZik7aWYoIllXUnBkR2x2Ymk1clpXbHVaWFpwWkdWdmQyVnlZblZ1WnoweCIhPXRoaXMuZXEoKXx8IWIuYXV0aG9yaXR5fHwhYi5hdXRob3JpdHl8fCJ3d3cuc3BpZWdlbC5kZSIhPWIuYXV0aG9yaXR5JiYicXMyLnByZXZpZXcuc3BpZWdlbC5kZSIhPWIuYXV0aG9yaXR5JiYicHJldmlldy5zcGllZ2VsLmRlIiE9Yi5hdXRob3JpdHkmJiJwcm9kLnNwaWVnZWwuZGUiIT1iLmF1dGhvcml0eSl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiandwbGF5ZXIiKTtpZighd2luZG93Lmp3cGxheWVyfHwhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoandwbGF5ZXIoKS5pZCl8fCJBIiE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoandwbGF5ZXIoKS5pZCkubm9kZU5hbWUpaWYod2luZG93Lmp3cGxheWVyJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZChqd3BsYXllcigpLmlkKXx8aCYmaCgpLmlkKXtiPQpbXTtpZigxPGEubGVuZ3RoKWZvcihoPTA7aDxhLmxlbmd0aDtoKyspYi5wdXNoKGFbaF0uZ2V0QXR0cmlidXRlKCJpZCIpKTtlbHNlIGIucHVzaChqd3BsYXllcigpLmlkKTtqd3BsYXllcigpO2ZvcihhPTA7YTxiLmxlbmd0aDthKyspe3ZhciBoPW5ldyB0YSh3aW5kb3cuandwbGF5ZXIoYlthXSkpO3RoaXMuTihoKXx8dGhpcy5scihoKXx8KHRoaXMuUChoKSxoPW5ldyB1YShoLHRoaXMuSyksaC5TKCksaC5nKCkpfX10aGlzLlIoKX19LFh2OmZ1bmN0aW9uKCl7cmV0dXJuIllXUnBkR2x2Ymk1clpXbHVaWFpwWkdWdmQyVnlZblZ1WnoweCJ9LGVxOmZ1bmN0aW9uKCl7dmFyIGI9ZS5sYShkb2N1bWVudC5sb2NhdGlvbi5ocmVmKTtyZXR1cm4gZS52YihiLmFuY2hvcil9fSl9KShjKTt2YXIgdmE9Yy5ya3x8dmEsd2E9bmV3IHZhKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLkRyPQp0aGlzLmFbM107dGhpcy5Qaz10aGlzLmFbOF07dGhpcy5zbT10aGlzLmFbMV07dGhpcy5ObD10aGlzLmFbOV07dGhpcy5qPXRoaXMuYVsxMF19Yy5pbz1iO2IucHJvdG90eXBlPXtDcjpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuRHI6dGhpcy5PayhhKX0sT2s6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLlBrOnRoaXMucm0oYSl9LHJtOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5zbTp0aGlzLk1sKGEpfSxNbDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuTmw6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciB4YT1jLmlvfHx4YSxyYz1uZXcgeGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1yYy5Dcig0KTsoZnVuY3Rpb24oYyl7Yy54bT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtpZihiKXt2YXIgYT1iLmVsXzthfHwoYT1iLmVsKCkpO2E/KHRoaXMuWShhKSwoYj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdKXx8KGI9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pLGI/dGhpcy5aKGIpOnRoaXMucGEoKSk6dGhpcy5wYSgpfWVsc2UgdGhpcy5wYSgpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuInZpZGVvanMifSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkub24oInRpbWV1cGRhdGUiLGZ1bmN0aW9uKGIpe3RoaXMuTWQoYil9LmJpbmQodGhpcykpfSxNZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT1iLmN1cnJlbnRUaW1lKCksYj1iLmR1cmF0aW9uKCk7YSYmMDxhJiZiJiYwPGImJmE+PWItMiYmdGhpcy5WJiZ0aGlzLlYoKX0sQWU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnLmdldEF0dHJpYnV0ZSgiZGF0YS14LXNldHVwIik7CmlmKGIpdHJ5e3ZhciBhPUpTT04ucGFyc2UoYik7aWYoYS5oYXNPd25Qcm9wZXJ0eSgieC1hdXRvcGxheSIpJiYhYVsieC1hdXRvcGxheSJdKXJldHVybiExfWNhdGNoKGgpe31iPXRoaXMuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIuYXV0b3BsYXkmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmF1dG9wbGF5P2IuYXV0b3BsYXkoKTohMX0sdmE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXIubXV0ZWQmJnRoaXMucGxheWVyLm11dGVkKCl9LFZhOmZ1bmN0aW9uKCl7dGhpcy5wYXVzZSgpO3JldHVybiEwfSxpc1BsYXlpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wYXVzZWQoKT8hMTohMH0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLGE9Yi5pc0Z1bGxzY3JlZW47aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpdHJ5e2E9YSgpfWNhdGNoKGgpe2E9ITF9YSYmYi5leGl0RnVsbHNjcmVlbigpfSxjdXJyZW50VGltZTpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLmdldFJhd1BsYXllcigpO2lmKGIuY3VycmVudFRpbWUpcmV0dXJuIGIuY3VycmVudFRpbWUoKX19KX0pKGMpO3ZhciB5YT1jLnhtfHx5YTsoZnVuY3Rpb24oYyl7Yy53bT12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dGhpcy5UPXRoaXMuVHx8ITE7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKTt0aGlzLmRhPXRoaXMuQmM9dGhpcy5BYT10aGlzLlljPSExO3RoaXMudmg9ZS5FYigxMCk7dGhpcy5YaD0hMDt0aGlzLm5jPXRoaXMuUWc9ITE7dGhpcy5icyhiLmdldFJhd1BsYXllcigpKXx8KHRoaXMubGgoKSx0aGlzLm5vKCksdGhpcy5vYigpKX0sYnM6ZnVuY3Rpb24oYil7cmV0dXJuIGUuQmEoInQtb25saW5lLmRlIik/ITE9PT1iLm9wdGlvbnNfLmFkUHJlcm9sbDohMX0sbnc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2NvbnNvbGUuaW5mbyh0aGlzLmdldFBsYXllcigpLmphKCksIjsiLCJ3aW5kb3cuaW1hOiIsCiI7Iix3aW5kb3cuaW1hLCI7Iix0eXBlb2Ygd2luZG93LmltYSwiOyIsInBsYXllci5hZHM6IiwiOyIsYi5XLCI7Iix0eXBlb2YgYi5XLCI7IiwicGxheWVyLmFkcy5zdGF0ZToiLCI7IixiLlc/Yi5XLnN0YXRlOiJ1bmRlZmluZWRYIiwiOyIsYi5XP3R5cGVvZiBiLlcuc3RhdGU6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYToiLCI7IixiLmltYSwiOyIsdHlwZW9mIGIuaW1hLCI7IiwicGxheWVyLmltYTM6IiwiOyIsYi5KLCI7Iix0eXBlb2YgYi5KLCI7IiwicGxheWVyLmltYS5hZGRFdmVudExpc3RlbmVyOiIsIjsiLGIuaW1hP2IuaW1hLmFkZEV2ZW50TGlzdGVuZXI6InVuZGVmaW5lZFgiLCI7IixiLmltYT90eXBlb2YgYi5pbWEuYWRkRXZlbnRMaXN0ZW5lcjoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5hZGRFdmVudExpc3RlbmVyOiIsIjsiLGIuSj9iLkouYWRkRXZlbnRMaXN0ZW5lcjoidW5kZWZpbmVkWCIsIjsiLGIuSj90eXBlb2YgYi5KLmFkZEV2ZW50TGlzdGVuZXI6CiJ1bmRlZmluZWRYIiwiOyIsInBsYXllci5pbWEuZ2V0QWRzTWFuYWdlcjoiLCI7IixiLmltYT9iLmltYS5HYToidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5HYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5nZXRBZHNNYW5hZ2VyOiIsIjsiLGIuSj9iLkouR2E6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5HYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmdldEFkc01hbmFnZXIoKToiLCI7IixiLmltYSYmYi5pbWEuR2E/Yi5pbWEuR2EoKToidW5kZWZpbmVkWCIsIjsiLGIuaW1hJiZiLmltYS5HYT90eXBlb2YgYi5pbWEuR2EoKToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5nZXRBZHNNYW5hZ2VyKCk6IiwiOyIsYi5KJiZiLkouR2E/Yi5KLkdhKCk6InVuZGVmaW5lZFgiLCI7IixiLkomJmIuSi5HYT90eXBlb2YgYi5KLkdhKCk6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYS5fYWRzTG9hZGVyOiIsIjsiLGIuaW1hP2IuaW1hLldkOgoidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5XZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5fYWRzTG9hZGVyOiIsIjsiLGIuSj9iLkouV2Q6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5XZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLl9hZHNNYW5hZ2VyOiIsIjsiLGIuaW1hP2IuaW1hLlhkOiJ1bmRlZmluZWRYIiwiOyIsYi5pbWE/dHlwZW9mIGIuaW1hLlhkOiJ1bmRlZmluZWRYIiwiOyIsInBsYXllci5pbWEzLl9hZHNNYW5hZ2VyOiIsIjsiLGIuSj9iLkouWGQ6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5YZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmFkc0xvYWRlcjoiLCI7IixiLmltYT9iLmltYS5uYToidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5uYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5hZHNMb2FkZXI6IiwiOyIsYi5KP2IuSi5uYToidW5kZWZpbmVkWCIsIjsiLGIuSj8KdHlwZW9mIGIuSi5uYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmFkc01hbmFnZXI6IiwiOyIsYi5pbWE/Yi5pbWEuY2U6InVuZGVmaW5lZFgiLCI7IixiLmltYT90eXBlb2YgYi5pbWEuY2U6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYTMuYWRzTWFuYWdlcjoiLCI7IixiLko/Yi5KLmNlOiJ1bmRlZmluZWRYIiwiOyIsYi5KP3R5cGVvZiBiLkouY2U6InVuZGVmaW5lZFgiLCI7IiwiRE9ORSIsdGhpcy52aCl9LHdiOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtiLmltYTMmJih0aGlzLmltYT1iLmltYTMpO2lmKGIuaW1hKXt0aGlzLmltYT1iLmltYTt0cnl7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuaW1hJiZ0aGlzLnBsYXllci5nZXRSYXdQbGF5ZXIoKS5hY3RpdmVQbHVnaW5zXyYmMT09dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyKCkuYWN0aXZlUGx1Z2luc18uaW1hJiYodGhpcy5pbWE9dGhpcy5pbWEoKSx0aGlzLmltYS5jb250cm9sbGVyJiYKKHRoaXMuaW1hPXRoaXMuaW1hLmNvbnRyb2xsZXIpKX1jYXRjaChhKXt9fXJldHVybiB0aGlzLmltYX0sUmI6ZnVuY3Rpb24oKXtpZighdGhpcy5uYSl7dmFyIGI9dGhpcy53YigpO2ImJihiLmFkc0xvYWRlciYmKHRoaXMubmE9Yi5hZHNMb2FkZXIpLGIuX2Fkc0xvYWRlciYmKHRoaXMubmE9Yi5fYWRzTG9hZGVyKSxiLmdldEFkc0xvYWRlciYmKHRoaXMubmE9Yi5nZXRBZHNMb2FkZXIpLGIuY29udHJvbGxlciYmYi5jb250cm9sbGVyLnNka0ltcGwmJmIuY29udHJvbGxlci5zZGtJbXBsLmFkc0xvYWRlciYmKHRoaXMubmE9Yi5jb250cm9sbGVyLnNka0ltcGwuYWRzTG9hZGVyKSl9cmV0dXJuIHRoaXMubmF9LEVnOmZ1bmN0aW9uKCl7aWYoIXRoaXMuQmMpe3ZhciBiPXRoaXMud2IoKTtiJiYoYi5hZHNNYW5hZ2VyJiYodGhpcy5CYz1iLmFkc01hbmFnZXIpLGIuZ2V0QWRzTWFuYWdlciYmKHRoaXMuQmM9Yi5nZXRBZHNNYW5hZ2VyKCkpKX1yZXR1cm4gdGhpcy5CY30sanI6ZnVuY3Rpb24oKXtpZighdGhpcy5QZyl7dmFyIGI9CnRoaXMud2IoKSxhPXRoaXMuaHIoKTt3aW5kb3cuaW1hJiZiJiYoYi5fYWRzTG9hZGVyfHxiLmFkc0xvYWRlcnx8YSkmJih0aGlzLlBnPSEwKX1yZXR1cm4gdGhpcy5QZ30saHI6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyF0aGlzLlljJiZiLmFkcyYmKGIuYWRzLnN0YXRlfHxiLmFkcy5fc3RhdGUpJiYodGhpcy5ZYz0hMCk7cmV0dXJuIHRoaXMuWWN9LG9iOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5SYigpO2lmKGIpe3ZhciBhPSJhZEVycm9yIixoPSJhZHNNYW5hZ2VyTG9hZGVkIixkPSJsb2ciO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SJiYoYT1nb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SKTt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkc01hbmFnZXJMb2FkZWRFdmVudCYmCmdvb2dsZS5pbWEuQWRzTWFuYWdlckxvYWRlZEV2ZW50LlR5cGUmJmdvb2dsZS5pbWEuQWRzTWFuYWdlckxvYWRlZEV2ZW50LlR5cGUuQURTX01BTkFHRVJfTE9BREVEJiYoaD1nb29nbGUuaW1hLkFkc01hbmFnZXJMb2FkZWRFdmVudC5UeXBlLkFEU19NQU5BR0VSX0xPQURFRCk7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYoZD1nb29nbGUuaW1hLkFkRXZlbnQuVHlwZS5MT0cpOyJmdW5jdGlvbiIhPT10eXBlb2YgYi5hZGRFdmVudExpc3RlbmVyP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKTooYi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKGgsZnVuY3Rpb24oKXt0aGlzLmp0KCl9LmJpbmQodGhpcykpLApiLmFkZEV2ZW50TGlzdGVuZXIoZCxmdW5jdGlvbihhKXt0aGlzLmdhKGEsITApO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKTt0aGlzLmZhKCEwKX0uYmluZCh0aGlzKSkpfWVsc2UgdGhpcy51YSgpfHx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMub2IoKX0uYmluZCh0aGlzKSwyMCl9LGp0OmZ1bmN0aW9uKCl7dGhpcy5uYz0hMDt2YXIgYj10aGlzLkVnKCk7aWYoYnx8dGhpcy51YSgpKXt2YXIgYT0iYWRFcnJvciIsaD0ibG9nIjt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudCYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYKKGg9Z29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HKTtiLmFkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihhKXt0aGlzLmdhKGEpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoaCxmdW5jdGlvbihhKXt0aGlzLmdhKGEsITApO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKTt0aGlzLmZhKCEwKX0uYmluZCh0aGlzKSk7dmFyIGQ9IiI7ZS5UYSgpJiYoZD0iTV8iKTtiLmFkZEV2ZW50TGlzdGVuZXIoInN0YXJ0IixmdW5jdGlvbigpe2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrInN0YXJ0IiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiZmlyc3RxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrImZpc3RxdWFydGlsZSIsIiIsITApfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoIm1pZHBvaW50IixmdW5jdGlvbigpe3RoaXMub2M9CiEwO2lmKGUuQmEoImNoaXAuZGUiKSl7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtlLnRyYWNrKCJzdGF0c19jdXN0XyIrZCsibWlkcG9pbnQiLCIiLCEwKTtlLnRyYWNrKCJzdGF0c19jdXN0X2RvdWJsZXBsYXkiLCFhLnBhdXNlZCgpLCEwKX19LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigidGhpcmRxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrInRoaXJkcXVhcnRpbGUiLCIiLCEwKX0uYmluZCh0aGlzKSk7Yi5hZGRFdmVudExpc3RlbmVyKCJjb21wbGV0ZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrImNvbXBsZXRlIiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiaW1wcmVzc2lvbiIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iKwpkKyJpbXByZXNzaW9uIiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiYWxsQWRzQ29tcGxldGVkIixmdW5jdGlvbigpe3RoaXMub2N8fCh0aGlzLm8oImFkZXJyb3IiLCJub2FkZXZlbnQiKSx0aGlzLmZhKCksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKX0sV3Y6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyF0aGlzLmtnJiZiLmFkcyYmKHRoaXMua2c9Yi5hZHMpO3JldHVybiB0aGlzLmtnfSxubzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7Yi5vbigiYWRzZXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuZ2EoYSk7dGhpcy5mYSgpO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKX0uYmluZCh0aGlzKSk7Yi5vbigiYWR0cmlnZ2VyIixmdW5jdGlvbigpe3RoaXMucmEoKTt0aGlzLmZhKCEwKTsKdGhpcy5vKCJ0cmlnZ2VyIiwiSE9NQUQiKX0uYmluZCh0aGlzKSk7Yi5vbigiaW1hM2Vycm9yIixmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZmEoKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCl9LmJpbmQodGhpcykpO2Iub24oImltYTNhZGVycm9yIixmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZmEoKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCl9LmJpbmQodGhpcykpO2Iub24oImltYTMtYWQtZXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuZ2EoYSk7dGhpcy5mYSgpO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKX0uYmluZCh0aGlzKSk7Yi5vbigiYWRzLWZpcnN0LXF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygpO3RoaXMuUGUoKX0uYmluZCh0aGlzKSl9LGxkOmZ1bmN0aW9uKCl7dmFyIGI9ITE7dHJ5e2lmKGhvbWFkVXRpbHMmJmhvbWFkVXRpbHMuWClob21hZFV0aWxzLkthJiYoYj0hMCk7ZWxzZXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubGQoKX0uYmluZCh0aGlzKSwKNTApO3JldHVybn19Y2F0Y2goYSl7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmxkKCl9LmJpbmQodGhpcyksNTApO3JldHVybn1iJiYoKGI9dGhpcy5FZygpKSYmYi5kZXN0cm95P2IuZGVzdHJveSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5sZCgpfS5iaW5kKHRoaXMpLDUwKSl9LGxoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKTtpZihiLmlzUGxheWluZygpJiYwPGIuY3VycmVudFRpbWUoKSlpZih0aGlzLmpyKCkpe3ZhciBhPXRoaXMud2IoKSxoPXRoaXMuUmIoKTthJiZoJiYodGhpcy53YigpLHRoaXMuUmIoKSx0aGlzLm5jfHx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubmM/dGhpcy53KCk6KHRoaXMuZmEoITApLHRoaXMubygibm9BZHNNYW5hZ2VyIiwiYWRzTWFuYWdlciIpKX0uYmluZCh0aGlzKSwyRTMpKTt0aGlzLndiKCl9ZWxzZSB0aGlzLlFnP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGE9CnRoaXMud2IoKSxiPXRoaXMuUmIoKTthJiYhYj8odGhpcy5vKCJub2ZyYW1ld29yayIsIklNQV9BRFNMT0FERVIiKSx0aGlzLmZhKCkpOih0aGlzLmZhKCEwKSx0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIikpfS5iaW5kKHRoaXMpLDEwMCk6dGhpcy5RZz0hMDtiLmlzUGxheWluZygpJiYxMDxiLmN1cnJlbnRUaW1lKCl8fHRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmxoKCl9LmJpbmQodGhpcyksNTApfSxnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGg9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpaD0hMDtofHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGg9ITApOyJudW1iZXIiPT10eXBlb2YgYSYmKGIuVD1hLGIubygiYWRlcnJvciIsYSkpfXJldHVybiBofWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTsKaWYoYi5nZXRFcnJvciYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0RXJyb3Ipe3ZhciBoPWIuZ2V0RXJyb3IoKTtpZihoLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGguZ2V0RXJyb3JDb2RlJiZhKGguZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTtyZXR1cm59fWZvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkmJmJbZF0mJmJbZF0uYWRFcnJvciYmYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJmEoYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7YnJlYWt9fSxvbzpmdW5jdGlvbigpe3RoaXMucmN8fCh0aGlzLnJjPSJ1bmtub3duIik7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZihiLmFkcyl7aWYodGhpcy5yYyE9Yi5hZHMuc3RhdGUmJih0aGlzLnJjPWIuYWRzLnN0YXRlKSwiYWQtcGxheWJhY2siPT0KdGhpcy5yYyl7dGhpcy53KCJhZC1wbGF5YmFjayIpO3JldHVybn19ZWxzZSB0aGlzLnJjPSJuby1hZHMiO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vbygpfS5iaW5kKHRoaXMpLDEwKX0sdmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYX0sRGE6ZnVuY3Rpb24oKXswPD1lLlNiKGRvY3VtZW50LmxvY2F0aW9uKS5pbmRleE9mKCJzdGVybi5kZSIpJiYxMDA5PT10aGlzLlQ/KHRoaXMuZGE9ITAsdGhpcy5zKCEwKSk6KHRoaXMuZGE9ITAsdGhpcy53KCJlbXB0eSB2YXN0IikpfSxmYTpmdW5jdGlvbihiKXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZGE/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwMCl9LHM6ZnVuY3Rpb24oYil7dGhpcy51YSgpfHwoYnx8KHRoaXMuWGg9ITEpLHRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCkub24oInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5JKHRoaXMuWGgsZnVuY3Rpb24oKXt0aGlzLmxkKCl9LmJpbmQodGhpcykpfS5iaW5kKHRoaXMpKSl9LAp0bzpmdW5jdGlvbigpe3RoaXMuZXd8fCgxMDx0aGlzLiR1Pyh0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGFhemEiKSx3aW5kb3cuc2V0VGltZW91dCh0aGlzLmZhLmJpbmQodGhpcyksNTAwKSk6KHRoaXMuJHUrKyx0aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpLnZwRXZlbnQ/dGhpcy5udCgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50bygpfS5iaW5kKHRoaXMpLDUwKSkpfSxudDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7aWYoYi52cEV2ZW50JiYhdGhpcy5hdil7dGhpcy5hdj0hMDt2YXIgYT0iIjtiLnZwRXZlbnQucmFuZG9tVGVzdCYmKGE9IiIpO2IudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZHMtZXJyb3IiK2EsZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiLCJ2cDphZHMtZXJyb3IiKTt3aW5kb3cuc2V0VGltZW91dCh0aGlzLmZhLmJpbmQodGhpcyksNTAwKX0uYmluZCh0aGlzKSk7CmIudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZC1lcnJvciIrYSxmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsInZwOmFkLWVycm9yIik7d2luZG93LnNldFRpbWVvdXQodGhpcy5mYS5iaW5kKHRoaXMpLDUwMCl9LmJpbmQodGhpcykpO2IudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZC1yZWFkeSIrYSxmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLnZwRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcigidnA6YWQtZW5kZWQiK2EsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yi52cEV2ZW50LmFkZEV2ZW50TGlzdGVuZXIoInZwOmFkc2xvdC1jb21wbGV0ZSIrYSxmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLnZwRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcigidnA6YWRzLXJlYWR5IithLGZ1bmN0aW9uKCl7dGhpcy53KCl9LmJpbmQodGhpcykpfX19KX0pKGMpO3ZhciB6YT1jLndtfHx6YTsoZnVuY3Rpb24oYyl7Yy55bT1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApnOmZ1bmN0aW9uKCl7aWYoIXdpbmRvdy5kZW1vUGxheWVyKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaWZyYW1lIiksYTthPXRoaXMuSWgod2luZG93KTtmb3IodmFyIGg9MDtoPGIubGVuZ3RoO2grKyl0cnl7YT1hfHx0aGlzLkloKGJbaF0pfWNhdGNoKGQpe310aGlzLlIoKX19LEloOmZ1bmN0aW9uKGIpe3ZhciBhPVtdO2IudmlkZW9qcyYmYi52aWRlb2pzLmdldFBsYXllcnM/YT1iLnZpZGVvanMuZ2V0UGxheWVycygpOmIudmlkZW9qcyYmYi52aWRlb2pzLnBsYXllcnMmJihhPWIudmlkZW9qcy5wbGF5ZXJzKTtpZigwPGUudGUoYSkpe2I9YTtmb3IodmFyIGggaW4gYiliLmhhc093blByb3BlcnR5KGgpJiYoYT1uZXcgeWEoYltoXSksYS5xYXx8dGhpcy5OKGEpfHwhMT09PWEuZ2V0UmF3UGxheWVyKCkuaXNSZWFkeV98fCh0aGlzLlAoYSksKG5ldyB6YShhLHRoaXMuSykpLmcoKSkpO3JldHVybiEwfXJldHVybiExfSxSOmZ1bmN0aW9uKCl7dGhpcy5IYj0Kd2luZG93LnNldFRpbWVvdXQodGhpcy5nLmJpbmQodGhpcyksdGhpcy5HYyl9fSl9KShjKTt2YXIgQWE9Yy55bXx8QWEsQmE9bmV3IEFhKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnlxPXRoaXMuYVs0XTt0aGlzLiRvPXRoaXMuYVs1XTt0aGlzLnRuPXRoaXMuYVsxMF07dGhpcy5rcD10aGlzLmFbMV07dGhpcy5Kbz10aGlzLmFbNl07dGhpcy5Gcz10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVsxXX1jLlFyPWI7Yi5wcm90b3R5cGU9e3hxOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy55cTp0aGlzLlpvKGEpfSxabzpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuJG86dGhpcy5zbihhKX0sc246ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy50bjp0aGlzLmpwKGEpfSxqcDpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMua3A6dGhpcy5JbyhhKX0sSW86ZnVuY3Rpb24oYSl7cmV0dXJuIDU8CmE/dGhpcy5Kbzp0aGlzLkVzKGEpfSxFczpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuRnM6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBDYT1jLlFyfHxDYSxzYz1uZXcgQ2EoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1zYy54cSg0KTsoZnVuY3Rpb24oYyl7Yy5sbD11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt0aGlzLlNlPTA7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPWIucGxheWVyQ29udGFpbmVyO2lmKCFhJiYoYi5wbGF5ZXJJbnN0YW5jZSYmYi5wbGF5ZXJJbnN0YW5jZS5pZCYmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYi5wbGF5ZXJJbnN0YW5jZS5pZCkpJiYoYT1iLnBhcmVudE5vZGUpLCFhKSl7dGhpcy5wYSgpO3JldHVybn10aGlzLlkoYSk7CihiPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pfHwoYj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7Yj90aGlzLlooYik6dGhpcy5wYSgpfSxWczpmdW5jdGlvbihiKXt2YXIgYT10aGlzLnpiLGg9dGhpcy5qYSgpLGQ9IiI7Yi5tZW1vJiYoZD1iLm1lbW8udmlkZW9pZCk7ZCYmYSYmYS5VYiYmKDA8PWguaW5kZXhPZihkKXx8YS56ZCgpKX0scGF1c2U6ZnVuY3Rpb24oYil7Ynx8KHRoaXMuU2U9MCk7Yj10aGlzLmdldFJhd1BsYXllcigpO2IucGxheWVySW5zdGFuY2UmJmIucGxheWVySW5zdGFuY2UucGF1c2U/KHdpbmRvdy5wb3N0TWVzc2FnZSgiaG9tYWRwYXVzZSIsIioiKSxiLnBsYXllckluc3RhbmNlLnBhdXNlKCkpOndpbmRvdy5vdlZpZGVvJiZ3aW5kb3cub3ZWaWRlby5zdG9wUGxheWJhY2smJih3aW5kb3cucG9zdE1lc3NhZ2UoImhvbWFkcGF1c2UiLCIqIiksd2luZG93Lm92VmlkZW8uc3RvcFBsYXliYWNrKCkpfSxWYTpmdW5jdGlvbigpe3RoaXMuU2UrKzsKaWYoMTA8dGhpcy5TZSlyZXR1cm4hMTt0aGlzLnBhdXNlKCJwYXVzZVJlcGVhdE9uQWREZWxpdmVyeSIpO3JldHVybiEwfSxwbGF5OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtiLnBsYXllckluc3RhbmNlJiZiLnBsYXllckluc3RhbmNlLnBsYXk/KHdpbmRvdy5wb3N0TWVzc2FnZSgiaG9tYWRwbGF5IiwiKiIpLGIucGxheWVySW5zdGFuY2UucGxheSgpKTp3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8ucmVzdW1lUGxheWJhY2smJih3aW5kb3cucG9zdE1lc3NhZ2UoImhvbWFkcGxheSIsIioiKSx3aW5kb3cub3ZWaWRlby5yZXN1bWVQbGF5YmFjaygpKX0saXNQbGF5aW5nOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4hMT09PWIucGxheWVySW5zdGFuY2UucGF1c2VkPyEwOiEwPT09Yi5wbGF5ZXJJbnN0YW5jZS5wYXVzZWQ/ITE6Yi5pc1BsYXlpbmd9LGdldEN1cnJlbnRUaW1lOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTsKaWYoYi5wbGF5ZXJJbnN0YW5jZSYmYi5wbGF5ZXJJbnN0YW5jZS5jdXJyZW50VGltZSlyZXR1cm4gYi5wbGF5ZXJJbnN0YW5jZS5jdXJyZW50VGltZTtpZih3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8uZ2V0Q3VycmVudFRpbWUpcmV0dXJuIHdpbmRvdy5vdlZpZGVvLmdldEN1cnJlbnRUaW1lKCl9LGdldER1cmF0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtpZihiLnBsYXllckluc3RhbmNlJiZiLnBsYXllckluc3RhbmNlLmR1cmF0aW9uKXJldHVybiBiLnBsYXllckluc3RhbmNlLmR1cmF0aW9uO2lmKHdpbmRvdy5vdlZpZGVvJiZ3aW5kb3cub3ZWaWRlby5nZXREdXJhdGlvbilyZXR1cm4gd2luZG93Lm92VmlkZW8uZ2V0RHVyYXRpb24oKX0sTzpmdW5jdGlvbigpe3JldHVybiJPdlZpZGVvIn0sTmE6ZnVuY3Rpb24oKXt9LE1kOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0UmF3UGxheWVyKCk7dGhpcy5nZXRDdXJyZW50VGltZSgpPmImJihiPXRoaXMuZ2V0Q3VycmVudFRpbWUoKSk7CnZhciBhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiZ0aGlzLlYmJnRoaXMuVigpfX0pfSkoYyk7dmFyIERhPWMubGx8fERhOyhmdW5jdGlvbihjKXtjLmtsPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LEFhOmZ1bmN0aW9uKCl7aWYoIXRoaXMucGUpaWYodGhpcy5BYnx8KHRoaXMuQWI9MCksdGhpcy5nZXRQbGF5ZXIoKS5pc1BsYXlpbmcoKSYmdGhpcy5BYisrLDE1PHRoaXMuQWIpdGhpcy5vKCJub2ZyYW1ld29yayIsIklNQSIpLHRoaXMucyghMCk7ZWxzZXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2lmKGIuYWR2ZXJ0aXNpbmcpaWYoYj1iLmFkdmVydGlzaW5nLmFkc0xvYWRlcil7dGhpcy5wZT0hMDt2YXIgYT0iYWRFcnJvciI7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUuQURfRVJST1ImJgooYT1nb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SKTtiLmFkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZGF8fCh0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5BYSgpfS5iaW5kKHRoaXMpLDEwKTtlbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5BYSgpfS5iaW5kKHRoaXMpLDEwKX19LHZkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF9LGdhOmZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGEoYSxiKXt2YXIgaD0hMTtpZihhKXtpZigxMDA5PT1hfHwzMDM9PWF8fDQwMz09YSloPSEwO2h8fCFhLmluZGV4T2Z8fC0xPT09YS5pbmRleE9mKCIxMDA5IikmJi0xPT09YS5pbmRleE9mKCIzMDMiKSYmLTE9PT1hLmluZGV4T2YoIjQwMyIpfHwoaD0hMCk7Im51bWJlciI9PXR5cGVvZiBhJiYoYi5UPWEsYi5vKCJhZGVycm9yIiwKYSkpfXJldHVybiBofWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTtpZihiLmdldEVycm9yJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5nZXRFcnJvcil7dmFyIGg9Yi5nZXRFcnJvcigpO2lmKGguZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgaC5nZXRFcnJvckNvZGUmJmEoaC5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO3JldHVybn19Zm9yKHZhciBkIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSYmYltkXSYmYltkXS5hZEVycm9yJiZiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmYShiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTticmVha319LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpO3RoaXMuVD10aGlzLlR8fCExO3RoaXMuQWEoKTt2YXIgYT13aW5kb3cub3ZWaWRlbzthfHwoYT13aW5kb3cub3YudmlkZW8uUGxheWVyKTsKYSYmYS5yZWdpc3RlckV2ZW50JiYhdGhpcy5IcD8oYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuT25fUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX0FERVJST1IsZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCk7dGhpcy5zKCl9LmJpbmQodGhpcykpLHRoaXMuSHA9ITAsYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX1NUT1BQRUQsZnVuY3Rpb24oYSl7Yi5WcyhhKX0uYmluZCh0aGlzKSkpOmIuaXNQbGF5aW5nKCl8fHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksMTAwKX0sczpmdW5jdGlvbihiKXt0aGlzLkkoYil9fSl9KShjKTsKdmFyIEVhPWMua2x8fEVhOyhmdW5jdGlvbihjKXtjLm1sPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMuVWE9MTUwMDt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1bXTt3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8uc3luY2hyb25pemVyJiZ3aW5kb3cub3ZWaWRlby5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllciYmMDx3aW5kb3cub3ZWaWRlby5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllci5sZW5ndGgmJihiPXdpbmRvdy5vdlZpZGVvLnN5bmNocm9uaXplci5yZWdpc3RlcmVkUGxheWVyKTt3aW5kb3cub3YmJndpbmRvdy5vdi52aWRlbyYmd2luZG93Lm92LnZpZGVvLlBsYXllciYmd2luZG93Lm92LnZpZGVvLlBsYXllci5zeW5jaHJvbml6ZXImJndpbmRvdy5vdi52aWRlby5QbGF5ZXIuc3luY2hyb25pemVyLnJlZ2lzdGVyZWRQbGF5ZXImJjA8d2luZG93Lm92LnZpZGVvLlBsYXllci5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllci5sZW5ndGgmJgooYj13aW5kb3cub3YudmlkZW8uUGxheWVyLnN5bmNocm9uaXplci5yZWdpc3RlcmVkUGxheWVyKTtpZigwPGIubGVuZ3RoKWZvcih2YXIgYT0wO2E8Yi5sZW5ndGg7YSsrKXt2YXIgaD1uZXcgRGEoYlthXSk7aC5xYXx8dGhpcy5OKGgpfHwodGhpcy5QKGgpLChuZXcgRWEoaCx0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIEZhPWMubWx8fEZhLEdhPW5ldyBGYShyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5NaT10aGlzLmFbOF07dGhpcy5idD10aGlzLmFbN107dGhpcy52bj10aGlzLmFbN107dGhpcy5XaT10aGlzLmFbNV07dGhpcy5Daz10aGlzLmFbNF07dGhpcy5qPXRoaXMuYVs3XX1jLkp2PWI7Yi5wcm90b3R5cGU9e0xpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5NaTp0aGlzLmF0KGEpfSxhdDpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuYnQ6CnRoaXMudW4oYSl9LHVuOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy52bjp0aGlzLlZpKGEpfSxWaTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuV2k6dGhpcy5CayhhKX0sQms6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLkNrOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuajphfX19KShjKTt2YXIgSGE9Yy5Kdnx8SGEsdGM9bmV3IEhhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9dGMuTGkoNCk7KGZ1bmN0aW9uKGMpe2Mubms9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPWUuQ2coYiwiZWxlbWVudElEIik7dGhpcy5xaD1iLnBvc2l0aW9uaW5nO3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2guc3R5bGUud2lkdGg9CmIud2lkdGg7aC5zdHlsZS5taW5XaWR0aD1iLndpZHRoO2guc3R5bGUubWF4V2lkdGg9Yi53aWR0aDtoLnN0eWxlLmhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1pbkhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1heEhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1hcmdpbkxlZnQ9ImF1dG8iO2guc3R5bGUubWFyZ2luUmlnaHQ9ImF1dG8iOyJiZWZvcmUiPT10aGlzLnFoP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaCxhKToiYWZ0ZXIiPT10aGlzLnFoP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaCxhLm5leHRTaWJsaW5nKTphLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGgsYSk7dGhpcy5ZKGgpO3RoaXMuWihoKTt0aGlzLm5kPWh9LHBhdXNlOmZ1bmN0aW9uKCl7fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5uZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMubmQpfSx2YTpmdW5jdGlvbigpe3JldHVybiEwfSxzbzpmdW5jdGlvbigpe2UuV2codGhpcy5uZCk7ZS5CZSh0aGlzLm5kKTsKd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnNvKCl9LmJpbmQodGhpcyksNTApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuImlucmVhZCJ9LEdlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSl9KShjKTt2YXIgSWE9Yy5ua3x8SWE7KGZ1bmN0aW9uKGMpe2MubWs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMubygiZXh0ZXJuYWwiKTt0aGlzLkkoITApfX0pfSkoYyk7dmFyIEphPWMubWt8fEphOyhmdW5jdGlvbihjKXtjLm9rPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMuVWE9MTUwMDt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtJiZtLmlucmVhZCl7dmFyIGI9bS5pbnJlYWQsYT1lLkNnKGIsImVsZW1lbnRJRCIpO2UuV2coYSkmJihiPW5ldyBJYShiKSx0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBKYShiLHRoaXMuSykpLmcoKSkpO3RoaXMuSGI9d2luZG93LnNldFRpbWVvdXQodGhpcy5nLmJpbmQodGhpcyksCjEwMCl9ZWxzZSB0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksMTAwKX19KX0pKGMpO3ZhciBLYT1jLm9rfHxLYSxMYT1uZXcgS2Eocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMudnQ9dGhpcy5hWzVdO3RoaXMuTmo9dGhpcy5hWzJdO3RoaXMuSXY9dGhpcy5hWzRdO3RoaXMudXA9dGhpcy5hWzddO3RoaXMuS249dGhpcy5hWzhdO3RoaXMuQXM9dGhpcy5hWzRdO3RoaXMuWHA9dGhpcy5hWzNdO3RoaXMuS209dGhpcy5hWzRdO3RoaXMuU3M9dGhpcy5hWzVdO3RoaXMuWG89dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbNF19Yy5oaj1iO2IucHJvdG90eXBlPXt1dDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMudnQ6dGhpcy5NaihhKX0sTWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLk5qOnRoaXMuSHYoYSl9LEh2OmZ1bmN0aW9uKGEpe3JldHVybiA5PAphP3RoaXMuSXY6dGhpcy50cChhKX0sdHA6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnVwOnRoaXMuSm4oYSl9LEpuOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Lbjp0aGlzLnpzKGEpfSx6czpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuQXM6dGhpcy5XcChhKX0sV3A6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLlhwOnRoaXMuSm0oYSl9LEptOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuS206dGhpcy5ScyhhKX0sUnM6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlNzOnRoaXMuV28oYSl9LFdvOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5Ybzp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLmo6YX19fSkoYyk7dmFyIE1hPWMuaGp8fE1hLHVjPW5ldyBNYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPQp1Yy51dCg0KTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEpe3RoaXMudXJsPWE7dGhpcy5tZXRob2Q9IkdFVCI7dGhpcy5kYXRhPXt9fWMuYms9YjtiLnByb3RvdHlwZT17c2V0RGF0YTpmdW5jdGlvbihhKXt0aGlzLmRhdGE9YX0sRXQ6ZnVuY3Rpb24oYSl7dGhpcy5tZXRob2Q9YX0sYXBwZW5kRGF0YTpmdW5jdGlvbihhLGIpe3RoaXMuZGF0YVthXT1ifSxkbjpmdW5jdGlvbihhKXt0cnl7dGhpcy5hcHBlbmREYXRhKCJob21hZF9tYWNyb3MiLEpTT04uc3RyaW5naWZ5KGEpKX1jYXRjaChiKXt9fX19KShjKTt2YXIgeT1jLmJrfHx5OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsaCxkLGYpe3RoaXMuYmI9YTt0aGlzLnhnPXRoaXMuZ2k9ITE7dGhpcy5taD1kO3RoaXMuSmg9ITE7InN0cmluZyI9PT10eXBlb2YgYSYmKHRoaXMuYmI9bmV3IHkoYSkpO3ZhciBjPXRoaXMucWI9bmV3IFhNTEh0dHBSZXF1ZXN0O2Mub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWh8fAo0IT1jLnJlYWR5U3RhdGV8fDIwMCE9Yy5zdGF0dXMmJjIwMSE9Yy5zdGF0dXN8fGgoYyk7aWYoZCYmND09Yy5yZWFkeVN0YXRlJiYyMDAhPWMuc3RhdHVzJiYyMDEhPWMuc3RhdHVzKWQoYyk7ZWxzZSBpZig0PT1jLnJlYWR5U3RhdGUmJjA9PWMuc3RhdHVzJiZsJiZsLkZlKHRoaXMuYmIudXJsKSYmbC5OZCl7dmFyIGU9bmV3IHkoYS51cmwpO2UuRXQoIlBPU1QiKTtlLnNldERhdGEoe2hvbWFkX3Bpbmc6InRydWUifSk7KG5ldyBiKGUsZnVuY3Rpb24oYSl7dmFyIGI9ITE7dHJ5e2I9SlNPTi5wYXJzZShhLnJlc3BvbnNlVGV4dCl9Y2F0Y2goaCl7Yj0hMX1iJiZiLnBpbmcmJiJwb25nIj09Yi5waW5nJiYoYj0hMCk7Ynx8bC5rYSgicmVxdWVzdF9mYWlsZWRfbm9wb25nICIpfSxmdW5jdGlvbigpe2wua2EoInJlcXVlc3RfZmFpbGVkIil9KSkubG9hZCgpfWYmJjQhPWMucmVhZHlTdGF0ZSYmZihjKX0uYmluZCh0aGlzKX1jLmNrPWI7Yi5wcm90b3R5cGU9e2xvYWQ6ZnVuY3Rpb24oKXt2YXIgYT0KdGhpcy5iYi5kYXRhO2lmKCJzdHJpbmciIT10eXBlb2YgYSl7dmFyIGI9YSxhPSIiLGQ7Zm9yKGQgaW4gYilhKz0iJiIrZCsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGJbZF0pO2E9YS5zdWJzdHIoMSl9dGhpcy54ZyYmKGErPSImaG9tYWRfZm9sbG93X3JlZGlyZWN0cz10cnVlIik7dHJ5e3RoaXMuSmg/dGhpcy5xYi5vcGVuKHRoaXMuYmIubWV0aG9kLHRoaXMuYmIudXJsLCExKTp0aGlzLnFiLm9wZW4odGhpcy5iYi5tZXRob2QsdGhpcy5iYi51cmwsITApLHRoaXMuZ2l8fCh0aGlzLnFiLndpdGhDcmVkZW50aWFscz0hMCksMDxhLmxlbmd0aCYmdGhpcy5xYi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSxhWyJYLUhvbWFkLVBvc3QiXSYmdGhpcy5xYi5zZXRSZXF1ZXN0SGVhZGVyKCJYLUhvbWFkLVBvc3QiLCJ0cnVlIiksdGhpcy5xYi5zZW5kKGEpfWNhdGNoKGYpe2wmJmwuRmUodGhpcy5iYi51cmwpP2wuTmQ/Cmwua2EoInJlcXVlc3RfZmFpbGVkIik6ZS50cmFjaygiY2hlY2siLCJyZXF1ZXN0X2ZhaWxlZCIsITApOmwuRmUodGhpcy5iYi51cmwpLHRoaXMubWgmJnRoaXMubWgoKX1yZXR1cm4gdGhpcy5xYn19fSkoYyk7dmFyIE5hPWMuY2t8fE5hOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5LYT0hMTt0aGlzLnFjPSIiO3RoaXMuZWU9dGhpcy5wYz10aGlzLnViPW51bGw7dGhpcy5Wbz10aGlzLkdiPXRoaXMuZGg9ITE7dGhpcy5KYT0iIjt0aGlzLllnPSExO3RoaXMuRmE9dGhpcy5yZD0iIjt0aGlzLlVnPXRoaXMuWD10aGlzLmlzRW5hYmxlZD10aGlzLlplPSExO3RoaXMuQ2E9W107dGhpcy5LZz10aGlzLlpiPSIiO3RoaXMubGU9ITE7dGhpcy5wZj0wO3RoaXMuRWY9InN2bXBsYXllci5hZHZlcnRpc2luZy5IT01BRF9WRVJJRklFRCI7dGhpcy5DZj0ic3ZtcGxheWVyLmFkdmVydGlzaW5nLkhPTUFEX0JMT0NLRUQiO3RoaXMuS2I9InN2bXBsYXllci5hZHZlcnRpc2luZy5IT01BRF9OT0JMT0NLRVIiOwp0aGlzLmhjPSJzdm1wbGF5ZXIuYWR2ZXJ0aXNpbmcuSE9NQURfQURCTE9DS0VSIjt0aGlzLkRmPSJzdm1wbGF5ZXIuYWR2ZXJ0aXNpbmcuSE9NQURfQ09PS0lFQkxPQ0tFUiI7dGhpcy5hYz0iIjt0aGlzLmJjPVtdO3RoaXMuY2M9W107dGhpcy5MZD1bXTt0aGlzLiRiPSIiO3RoaXMucWY9MDt0aGlzLnZpZGVvcGxhemE9e307dGhpcy5BYz0hMTt0aGlzLnVvPXRoaXMuT2Q9bnVsbDt0aGlzLkZoPXRoaXMuTmM9dGhpcy5wZz10aGlzLnVmPXRoaXMuTmQ9dGhpcy5nZT10aGlzLlFjPSExO3RoaXMuZ2I9e2dsb2JhbDohMSxjbGllbnQ6ITEsY3VzdG9tZXI6ITF9O3RoaXMudGQ9MDt0aGlzLk1nPSExO3RoaXMuTGc9MUUzO3RoaXMuJGM9ITE7dGhpcy5QYT0xRTM7dGhpcy5NZj0iIn1jLmRrPWI7Yi5wcm90b3R5cGU9e2dldENvbmZpZzpmdW5jdGlvbigpe3JldHVybntpc0FjdGl2ZTp0aGlzLkthLGFkdGFncGFyYW1ldGVyOnRoaXMucWMsYWR0YWdtb2RpZmllcjp0aGlzLnViLGFkdGFnbW9kaWZpZXJBZHY6dGhpcy5wYywKYWR0YWdyZWdleDp0aGlzLmVlLGJpdHJhdGU6dGhpcy5QYSxqc3BvcHVwczp0aGlzLmRoLHNpZGVsb2Fkczp0aGlzLkdiLGRpc2FibGV0ZXN0czp0aGlzLlZvLGhvbWFkQWxpYXM6dGhpcy5KYSxpc0luaXRpYWxpemVkOnRoaXMuWWcsZ2xvYmFsQ29uZmlnOnRoaXMucmQsY2xpZW50Q29uZmlnOnRoaXMuRmEsaXNFbmFibGVkOnRoaXMuaXNFbmFibGVkLGlzVmVyaWZpZWQ6dGhpcy5YLGlzQmxvY2tlZDp0aGlzLlVnLHNlcnZlcjp0aGlzLkNhLHN2bUNvbmZpZzp0aGlzLlpiLGhvbWFkQWRwYXRoOnRoaXMuS2csZGlzYWJsZUNvb2tpZVRlc3Q6dGhpcy5sZSx0ZXN0Q29va2llQXR0ZW1wdHM6dGhpcy5wZixIT01BRF9WRVJJRklFRDp0aGlzLkVmLEhPTUFEX0JMT0NLRUQ6dGhpcy5DZixIT01BRF9OT0JMT0NLRVI6dGhpcy5LYixIT01BRF9BREJMT0NLRVI6dGhpcy5oYyxIT01BRF9DT09LSUVCTE9DS0VSOnRoaXMuRGYsdGVzdEhpZGU6dGhpcy5hYyx0ZXN0VGFnczp0aGlzLmJjLHRlc3RUYWdzSlM6dGhpcy5jYywKdGVzdFRhZ3NYSFI6dGhpcy5MZCx0ZXN0Q29va2llOnRoaXMuJGIsdGhyb3R0bGU6dGhpcy5xZix2aWRlb3BsYXphOnRoaXMudmlkZW9wbGF6YSxob21hZFRlc3RlZDp0aGlzLkFjLGNoZWNrZWRIb21hZFN0YXR1c0NhbGxiYWNrOnRoaXMudW8sYWRCbG9ja2VyRGV0ZWN0ZWQ6dGhpcy5RYyxibG9ja2VkV2FzQ2FsbGVkOnRoaXMuZ2UsdXNlU3RyaWN0Q2hlY2tzOnRoaXMuTmQsdXNlU3RyaWN0Q29uZmlnQ2hlY2tzOnRoaXMudWYsY29uZmlnRmFpbHVyZXM6dGhpcy5nYixzaXRlQ29uZmlnOnRoaXMuYWIsc2VydmVySWQ6dGhpcy5CaCxlbmFibGVRdWFydGlsZVRyYWNraW5nOnRoaXMudmMsdnBhaWQ6dGhpcy5OYyxza2lwQWxsb3dlZDp0aGlzLkZoLHZtYXBzOnRoaXMuY2ksYWx0ZXJuYXRlX2NsaWNrdGhyb3VnaDp0aGlzLiRjLGFkRmFsbGJhY2tVUkw6dGhpcy5NZn19LERxOmZ1bmN0aW9uKCl7dmFyIGE9ITEsYjtmb3IoYiBpbiB0aGlzLmdiKSJib29sZWFuIj09dHlwZW9mIHRoaXMuZ2JbYl0mJgoxPT10aGlzLmdiW2JdJiYoYT0hMCk7cmV0dXJuIGF9LGRmOmZ1bmN0aW9uKGEpe3RoaXMuZ2JbYV09ITB9LGZxOmZ1bmN0aW9uKCl7dmFyIGE9W10sYjtmb3IoYiBpbiB0aGlzLmdiKSJib29sZWFuIj09dHlwZW9mIHRoaXMuZ2JbYl0mJjE9PXRoaXMuZ2JbYl0mJmEucHVzaChiKTtyZXR1cm4gYX0sS2Q6ZnVuY3Rpb24oYSl7YT1hfHwiIjtpZigic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIGE7YT1hLnJlcGxhY2UoIlt0aW1lXSIsTWF0aC5yb3VuZCgobmV3IERhdGUpLmdldFRpbWUoKS8xRTMpKTthPWEucmVwbGFjZSgiW3RpbWVNU10iLChuZXcgRGF0ZSkuZ2V0VGltZSgpKTthPWEucmVwbGFjZSgiW3RpbWVzdGFtcF0iLChuZXcgRGF0ZSkuZ2V0VGltZSgpKTthPWEucmVwbGFjZSgiW3JhbmRvbV0iLHRoaXMuRWIoMTApLnRvU3RyaW5nKCkpO2E9YS5yZXBsYWNlKCJbZG9jdW1lbnRVUkxdIixkb2N1bWVudC5VUkwpO2E9YS5yZXBsYWNlKCJbZG9jdW1lbnRCYXNlVVJJXSIsZG9jdW1lbnQuYmFzZVVSSSk7CnJldHVybiBhPWUuUG4oYSl9LHphOmZ1bmN0aW9uKGEsYixkKXt2YXIgZj0iIixjPSIiLGU9IiIsZz0iIjtpZighdGhpcy5LYSYmIWIpcmV0dXJuIG5ldyB5KGEpO2Y9dGhpcy5FZShhKTtjPXRoaXMubGEoYSk7Zj8odGhpcy5DYygpP2U9YTplPWMucHJvdG9jb2wrIjovLyIrYy5hdXRob3JpdHkrIi8iLGc9Yy5wYXRoLnN1YnN0cigxKSk6KGU9dGhpcy5EZCgpLGc9Yy5wYXRoLnN1YnN0cigxKSsoYy5xdWVyeT8iPyIrYy5xdWVyeToiIikpO2QmJih0aGlzLnFjfHx0aGlzLnVifHx0aGlzLnBjfHx0aGlzLmVlKSYmKGc9dGhpcy5XcihnKSk7YT1uZXcgeShlKTthLnVybD1lO2U9IiI7ZT1mP2MuaG9zdC5zcGxpdCgiLiIpLnNsaWNlKDEpLmpvaW4oIi0iKTp0aGlzLmhxKGMuaG9zdCk7YS5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9ZTthLmRhdGEuaG9tYWRfdXJsX3N1ZmZpeD1nO2EuZGF0YS5ob21hZF91cmxfc3VmZml4X2Jhc2U2ND10aGlzLnZiKGcpO2EubWV0aG9kPSJQT1NUIjsKcmV0dXJuIGF9LEVlOmZ1bmN0aW9uKGEpe3ZhciBiPSExLGQ9bmV3IFJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPyhbdy4tXSopOj8uKihbMC05XSspPy8/KFthLWYwLTldezQwfSkvPyQiLCJnIik7KGQ9ZC5leGVjKGEpKSYmKGRbMl18fGRbNV0pP2I9ITA6dGhpcy5DYygpJiYoZD1uZXcgUmVnRXhwKCJeKGh0dHBzPyk6Ly8oW3cuLV0qKTo/LiooWzAtOV0rKT8vKFthLWYwLTldezQwfSkvPyQiLCJnIiksKGQ9ZC5leGVjKGEpKSYmZFs0XSYmKGI9ITApKTtyZXR1cm4gYn0sQ2M6ZnVuY3Rpb24oKXt2YXIgYT0hMSxiPSIiO3RoaXMuQ2EmJnRoaXMuQ2EubGVuZ3RoJiYwPHRoaXMuQ2EubGVuZ3RoJiYoYj10aGlzLkNhWzBdLGI9Yi5yZXBsYWNlKCJodHRwczovLyIsIiIpLGI9Yi5yZXBsYWNlKCJodHRwOi8vIiwiIiksYj1iLnJlcGxhY2UoIi8vIiwiIiksYT0oYT1iLnNwbGl0KCIuIikpJiZhWzBdJiYiW2hhc2hdIj09YVswXT8hMTohMCk7cmV0dXJuIGF9LEZlOmZ1bmN0aW9uKGEpe3ZhciBiPQohMSxkPVJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPy4qIiwiZyIpLmV4ZWMoYSk7ZCYmKGRbMl18fGRbNV0pP2I9ITA6Yj10aGlzLkVlKGEpO3JldHVybiBifSxocTpmdW5jdGlvbihhKXt2YXIgYj0iIixkPSIiO2lmKCJzdHJpbmciPT09dHlwZW9mIHRoaXMuSmEmJjA8dGhpcy5KYS5sZW5ndGgpcmV0dXJuIHRoaXMuSmE7Zm9yKGQgaW4gdGhpcy5KYSlpZihiPXRoaXMuSmFbZF0sYi5oYXNPd25Qcm9wZXJ0eSgidXJsIikmJmIudXJsPT09YSlyZXR1cm4gYi5TdjtyZXR1cm4ibm9uZSJ9LHVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2FbdGhpcy5CaF19LERkOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy51ZCgpLGI9dGhpcy5FaCgobmV3IERhdGUpLmdldFRpbWUoKSsiIiksZD0iMWFiY2RmIi5zcGxpdCgiIik7cmV0dXJuIGEucmVwbGFjZSgiW2hhc2hdIixiLnNsaWNlKDAsLTEpKyIiK2RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmQubGVuZ3RoKV0pfSxqaDpmdW5jdGlvbihhLApiLGQpe2E9ITE7Yj0iIjtpZihkLmV2YWwpdHJ5e2I9ZXZhbCgiKCIrZC5ldmFsKyIpKCkiKX1jYXRjaChmKXthPSEwfWVsc2UgYT0hMDthJiYiS0VFUCIhPT1kLmZhbGxiYWNrJiYoYj1kLmZhbGxiYWNrKTtyZXR1cm4gYn0sVnI6ZnVuY3Rpb24oYSxiKXt2YXIgZD1lLmxhKGEpLGY9IiIsZj0iIixjO2ZvcihjIGluIGIpe2lmKGJbY10uc3VidmFsdWVzKXtmb3IodmFyIGc9ZGVjb2RlVVJJQ29tcG9uZW50KGQucXVlcnlLZXlbY10pLnNwbGl0KCImIiksZj17fSxIPTA7SDxnLmxlbmd0aDtIKyspe3ZhciBrPWdbSF0uc3BsaXQoIj0iKTtmW2tbMF1dPWtbMV19Zm9yKHZhciBsIGluIGJbY10uc3VidmFsdWVzKWZbbF09dGhpcy5qaChmW2xdLGwsYltjXS5zdWJ2YWx1ZXNbbF0pO2c9W107Zm9yKGwgaW4gZilnLnB1c2gobCsiPSIrZltsXSk7Zj1nPWVuY29kZVVSSUNvbXBvbmVudChnLmpvaW4oIiYiKSl9ZWxzZSBmPXRoaXMuamgoZC5xdWVyeUtleVtjXSxjLGJbY10pO2QucXVlcnlLZXlbY109CmZ9bD1bXTtmb3IoYyBpbiBkLnF1ZXJ5S2V5KWwucHVzaChjKyI9IitkLnF1ZXJ5S2V5W2NdKTtyZXR1cm4gZj1kLmhvc3QrZC5wYXRoKyI/IitsLmpvaW4oIiYiKX0sV3I6ZnVuY3Rpb24oYSl7dGhpcy5xYyYmKGErPXRoaXMucWMpO2lmKHRoaXMudWIpZm9yKHZhciBiIGluIHRoaXMudWIpdGhpcy51Yi5oYXNPd25Qcm9wZXJ0eShiKSYmKGE9YS5yZXBsYWNlKGIsdGhpcy51YltiXSkpO3RoaXMucGMmJihhPXRoaXMuVnIoYSx0aGlzLnBjKSk7cmV0dXJuIGF9LGw6ZnVuY3Rpb24oYSxiLGQsZixjLGUpe2w9dGhpczt0aGlzLllnPSEwO3RoaXMucmQ9YTt0aGlzLkZhPWI7dGhpcy5aZT1kO3RoaXMuT2Q9Zjt0aGlzLnNjPWM7dGhpcy5hYj1lfHx7fTt0aGlzLkpyKCk7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLkZhKXRoaXMuSHIoKTtlbHNlIGlmKCJvYmplY3QiIT09dHlwZW9mIHRoaXMuRmEpdHJ5e3RoaXMuRmE9YigpLHRoaXMuZGQoKX1jYXRjaChnKXt0aGlzLmthKCJub0NsaWVudENvbmZpZyIpfX0sCm5iOmZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7dHJ5e2I9bmV3IEV2ZW50KGEpfWNhdGNoKGQpe2I9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksYi5pbml0RXZlbnQoImN1c3RvbSIsITAsITEpfXJldHVybiBifSxKcjpmdW5jdGlvbigpe3RoaXMuTGEobmV3IHkodGhpcy5yZCt0aGlzLmFlKCJnbG9iYWwiKSksdGhpcy56cS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7dGhpcy5kZigiZ2xvYmFsIik7Im9iamVjdCI9PXR5cGVvZiBfY2xpZW50Q29uZmlnJiZ0aGlzLmRkKCl9LmJpbmQodGhpcyksITApfSxIcjpmdW5jdGlvbigpe3RoaXMuTGEobmV3IHkodGhpcy5GYSt0aGlzLmFlKCJjbGllbnQiLC0xIT10aGlzLkZhLmluZGV4T2YoIj8iKSkpLHRoaXMuZGQuYmluZCh0aGlzKSxmdW5jdGlvbigpe3RoaXMuZGYoImNsaWVudCIpO3RoaXMua2EoImNsaWVudENvbmZpZ0NvdWxkTm90QmVMb2FkZWQiKX0uYmluZCh0aGlzKSwhMCl9LGFlOmZ1bmN0aW9uKGEsYil7dmFyIGQ7ZD0oYj8iJiI6CiI/IikrKCJjYWNoZT0iK3RoaXMuRWIoKSk7dGhpcy5hYiYmdGhpcy5hYi5ub0NsaWVudENvbmZpZ0NhY2hlQnVzdGVyJiYiY2xpZW50Ij09YSYmKGQ9IiIpO3RoaXMuYWImJnRoaXMuYWIubm9DYWNoZUJ1c3RlciYmKGQ9IiIpO3JldHVybiBkfSxrYTpmdW5jdGlvbihhKXtpZighdGhpcy5nZSl7dGhpcy5nZT0hMDt2YXIgYj1mdW5jdGlvbigpe2Zvcih2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSxiPTA7YjxhLmxlbmd0aDtiKyspe2lmKGFbYl0mJmFbYl0ucGF1c2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBhW2JdLnBhdXNlKXRyeXthW2JdLnBhdXNlKCl9Y2F0Y2goaCl7fWFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKX1hPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKTtmb3IoYj0wO2I8YS5sZW5ndGg7YisrKWFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTthPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInZpZGVvLXdyYXBwZXIiKTsKZm9yKGI9MDtiPGEubGVuZ3RoO2IrKylhW2JdJiZhW2JdLnBhcmVudE5vZGUmJmFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTthPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInZpZGVvcGxheWVyIik7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKylhW2JdJiZhW2JdLnBhcmVudE5vZGUmJmFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTtpZih3aW5kb3cuc2VsZiE9d2luZG93LnRvcClmb3IoYT13aW5kb3cuZG9jdW1lbnQ7YS5oYXNDaGlsZE5vZGVzKCk7KWEucmVtb3ZlQ2hpbGQoYS5sYXN0Q2hpbGQpfTsiNHBsYXllcnMuZGUiPT1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpJiYodGhpcy5zYz0hMSk7dGhpcy5zYyYmImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLnNjP3RoaXMuc2MoKTooYigpLHdpbmRvdy5zZXRJbnRlcnZhbChiLDUwMCkpO3RoaXMuWD10aGlzLlVnPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLkNmKSk7CnRoaXMuSWIoKTtlLndjKGsuUXMpOyhiPWUuU2IodGhpcy51ZCgpKSl8fChiPWUuU2IoZG9jdW1lbnQubG9jYXRpb24uaHJlZikpO2F8fChhPSJ1bmtvd24iKTtlLnRyYWNrKCJzdGF0c19oZF9wZW5hbHR5IixhLCEwKX19LHpxOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLlgpe3ZhciBiPXt9O3RyeXtiPUpTT04ucGFyc2UoYS5yZXNwb25zZVRleHQpfWNhdGNoKGQpe2IuZW5hYmxlZD0iZmFsc2UifXRoaXMuaXNFbmFibGVkPXRoaXMuZGMoYi5lbmFibGVkKTt0aGlzLlg9IXRoaXMuaXNFbmFibGVkO3RoaXMuaXNFbmFibGVkPyJvYmplY3QiIT10eXBlb2YgdGhpcy5GYXx8dGhpcy5aYnx8dGhpcy5KYXx8dGhpcy5kZCgpOih0aGlzLkthPXRoaXMuaXNFbmFibGVkPSExLHRoaXMuWD0hMCxkb2N1bWVudC5kaXNwYXRjaEV2ZW50KHRoaXMubmIodGhpcy5LYikpLHRoaXMuSWIoKSl9fSxkZDpmdW5jdGlvbihhKXt2YXIgYj0hMTthJiYoYj1hLnJlc3BvbnNlVGV4dCk7YT17fTtpZihiKXRyeXthPQpKU09OLnBhcnNlKGIpfWNhdGNoKGQpe2E9dGhpcy5GYX1lbHNlIGE9dGhpcy5GYTt0aGlzLmlzRW5hYmxlZD10aGlzLmRjKGEuZW5hYmxlZCk7dGhpcy5YPSF0aGlzLmlzRW5hYmxlZDt0aGlzLkNhPWEuc2VydmVyfHxbXTtmb3IoYj0wO2I8dGhpcy5DYS5sZW5ndGg7YisrKXRoaXMuQ2FbYl09dGhpcy5DYVtiXS5yZXBsYWNlKCJkYW1vaC53aWtpYS5jb20iLCJkYW1vaC53aWtpYS5jb20uc3Zvbm0tYWxpYXMuY29tIik7dGhpcy5aYj1hLmNvbmZpZ3x8IiI7dGhpcy5KYT1hLmFsaWFzfHxudWxsO3RoaXMuS2c9YS5hZHBhdGh8fCIiO3RoaXMubGU9YS5kaXNhYmxlY29va2lldGVzdHx8ITE7dGhpcy5CaD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqdGhpcy5DYS5sZW5ndGgpO3RoaXMuaXNFbmFibGVkJiZ0aGlzLlpiJiZ0aGlzLkphJiZ0aGlzLkNhLmxlbmd0aD90aGlzLkRjKCExKToodGhpcy5LYT10aGlzLmlzRW5hYmxlZD0hMSx0aGlzLlg9ITAsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh0aGlzLm5iKHRoaXMuS2IpKSwKdGhpcy5JYigpKX0sRGM6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWCl7dmFyIGI9e307aWYoYSl7dmFyIGI9bmV3IHkodGhpcy5EZCgpKSxkPXRoaXMubGEodGhpcy5aYik7Yi5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9InMzaG9tYWRnbG9iYWxjb25maWdzIjtiLmRhdGEuaG9tYWRfdXJsX3N1ZmZpeD1kLnBhdGguc3Vic3RyKDEpLnJlcGxhY2UoImhvbWFkLWdsb2JhbC1jb25maWdzLnNjaG5lZXZvbm1vcmdlbi5jb20vIiwiIik7Yi5tZXRob2Q9IlBPU1QifWVsc2UgYj1uZXcgeSh0aGlzLlpiK3RoaXMuYWUoImN1c3RvbWVyIikpO3RoaXMuTGEoYix0aGlzLmR1LmJpbmQodGhpcyksZnVuY3Rpb24oKXt0aGlzLmRmKCJjdXN0b21lciIpO2E/dGhpcy5MbD90aGlzLmthKCJub1NWTUNvbmZpZyIpOih0aGlzLkxsPSEwLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5EYyghMCl9LmJpbmQodGhpcyksMTAwKSk6dGhpcy5EYyghMCl9LmJpbmQodGhpcyksITApfX0sZHU6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWCl7YT0KYS5yZXNwb25zZVRleHQ7dmFyIGI9e307dHJ5e2I9SlNPTi5wYXJzZShhKX1jYXRjaChkKXtpZighdGhpcy5BYyYmdGhpcy5pc0VuYWJsZWQpe3RoaXMuQWM9ITA7dGhpcy5EYyghMCk7cmV0dXJufX10aGlzLk5kPXRoaXMuZGMoYi5zdHJpY3QpO3RoaXMudWY9dGhpcy5kYyhiLnN0cmljdF9jb25maWdfZW5hYmxlZCk7dGhpcy5wZz1iLmR1cmF0aW9uX2NoZWNrX3BlbmFsdHlfZGlzYWJsZWR8fCExO3RoaXMudmM9dGhpcy5kYyhiLmVuYWJsZVF1YXJ0aWxlVHJhY2tpbmcpO3RoaXMuaXNFbmFibGVkPXRoaXMuZGMoYi5lbmFibGVkKTt0aGlzLmFjPWIudGVzdGhpZGV8fCIiO3RoaXMuY2M9Yi50ZXN0YWR0YWdzanN8fGIudGVzdGFkdGFnc3x8W107dGhpcy5MZD1iLnRlc3RhZHRhZ3N4aHJ8fFtdO3RoaXMucWM9Yi5hZHRhZ3BhcmFtZXRlcnx8IiI7dGhpcy51Yj1iLmFkdGFnbW9kaWZpZXJ8fG51bGw7dGhpcy5wYz1iLmFkdGFnbW9kaWZpZXJfYWR2fHxudWxsO3RoaXMuZWU9Yi5hZHRhZ3JlZ2V4fHwKbnVsbDt0aGlzLmRoPWIuanNwb3B1cHN8fCExO3RoaXMuR2I9Yi5zaWRlbG9hZHN8fCExO3RoaXMuTmM9Yi52cGFpZHx8ITE7dGhpcy5hYi52cGFpZD10aGlzLk5jO3RoaXMuRmg9Yi5za2lwYWxsb3dlZHx8ITE7dGhpcy5hZD1iLmNhcHRpb25fZHVyYXRpb258fCExO3RoaXMuY2k9Yi52bWFwc3x8IiI7dGhpcy4kYz1iLmFsdGVybmF0ZV9jbGlja3Rocm91Z2h8fCExO3RoaXMuUGE9Yi5iaXRyYXRlfHwxRTM7dGhpcy5NZj1iLmFkX2ZhbGxiYWNrX1VSTHx8IiI7dGhpcy4kYj1iLnRlc3QzcmRwYXJ0eWNvb2tpZSYmYi50ZXN0M3JkcGFydHljb29raWUgaW5zdGFuY2VvZiBBcnJheT90aGlzLnBxKGIudGVzdDNyZHBhcnR5Y29va2llKTpiLnRlc3QzcmRwYXJ0eWNvb2tpZXx8IiI7dGhpcy5sZSYmKHRoaXMuJGI9bnVsbCk7dGhpcy5xZj1iLnRocm90dGxlfHwwO3RoaXMudmlkZW9wbGF6YT1iLnZpZGVvcGxhemF8fHt9OyF0aGlzLkFjJiZ0aGlzLmlzRW5hYmxlZD8odGhpcy5BYz0hMCx0aGlzLkRjKCEwKSk6CnRoaXMuaXNFbmFibGVkJiYhdGhpcy55dSgpJiYodGhpcy5hY3x8dGhpcy5jY3x8dGhpcy5iY3x8dGhpcy4kYnx8dGhpcy5MZCk/dGhpcy5aZT8odGhpcy5LYT10aGlzLlg9ITAsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh0aGlzLm5iKHRoaXMuS2IpKSx0aGlzLmllKCksdGhpcy5JYigpKTp0aGlzLmx1KCk6KHRoaXMuaXNFbmFibGVkPSExLHRoaXMubXUoKSl9fSxsdTpmdW5jdGlvbigpe3RoaXMua3UoKTt0aGlzLm51KCl9LG51OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4idmFyIGV2dCA9IHt9O2lmICh0eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7ZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KCciK2ErIicpO30gZWxzZSB7ZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7ZXZ0LmluaXRDdXN0b21FdmVudCgnIithKyInLCBmYWxzZSwgZmFsc2UsIHt9KTt9d2luZG93LnBhcmVudC5kb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2dCk7In0KdmFyIGI9ImlubGluZWV2YWxkYXRhIixkPTA7dHJ5e3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2Yud2lkdGg9MTtmLmhlaWdodD0xO2Yuc3R5bGUuZGlzcGxheT0ibm9uZSI7Zi5zcmM9ImFib3V0OmJsYW5rIjt2YXIgYz1lLmJhKDEwKSxnPWUuYmEoMTApLEg9ZS5iYSgxMCk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihjLGZ1bmN0aW9uKCl7ZCsrO2I9Yi5yZXBsYWNlKCJkYXRhIiwiIil9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGcsZnVuY3Rpb24oKXtkKys7Yj1iLnJlcGxhY2UoImV2YWwiLCIiKX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoSCxmdW5jdGlvbigpe2QrKztiPWIucmVwbGFjZSgiaW5saW5lIiwiIil9KTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYpO2YuY29udGVudFdpbmRvdy5kb2N1bWVudC53cml0ZShhdG9iKCJQR2gwYld3K1BHaGxZV1ErUEhOamNtbHdkQ0IwZVhCbFBTSjBaWGgwTDJwaGRtRnpZM0pwY0hRaVBnPT0iKSsKYShIKSthdG9iKCJQQzl6WTNKcGNIUStQSE5qY21sd2RDQjBlWEJsUFNKMFpYaDBMMnBoZG1GelkzSnBjSFFpUG1WMllXd29JZz09IikrYShnKSthdG9iKCJJaWs4TDNOamNtbHdkRDQ4YzJOeWFYQjBJSFI1Y0dVOUluUmxlSFF2YW1GMllYTmpjbWx3ZENJZ2MzSmpQU0prWVhSaE9uUmxlSFF2YW1GMllYTmpjbWx3ZER0aVlYTmxOalFzIikrZS52YihhKGMpKSthdG9iKCJJajQ4TDNOamNtbHdkRDQ4TDJobFlXUStQR0p2WkhrK1BDOWliMlI1UGp3dmFIUnRiRDQ9IikpfWNhdGNoKGspe313aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGYpfWNhdGNoKGEpe31pZigzIT1kKXt2YXIgYz1lLnVjKCk7aWYoKGMuaXNDaHJvbWV8fGMuaXNGaXJlZm94KSYmIWMuaXNFZGdlJiYhZS5UYSgpKXtpZih0aGlzLmFiJiZ0aGlzLmFiLnBsYXllciYmdGhpcy5hYi5wbGF5ZXIubGVuZ3RoKXtlLnRyYWNrKCJzdGF0c19oZF9jc3BfaGRwIixiLCEwKTsKcmV0dXJufXRoaXMua2EoImNzcF8iK2IpfWUudHJhY2soInN0YXRzX2hkX2NzcCIsYiwhMCl9fS5iaW5kKHRoaXMpLDFFMyl9LG11OmZ1bmN0aW9uKCl7dGhpcy5YPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLktiKSk7dGhpcy5JYigpfSxMYzpmdW5jdGlvbihhKXt0aGlzLlFjPSEwO3RoaXMuWHx8KHRoaXMuWD10aGlzLkthPSEwLGRvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYihhKSksdGhpcy5JYigpLHRoaXMuaWUoKSl9LGt1OmZ1bmN0aW9uKCl7aWYodGhpcy5hYyl7dmFyIGE9ZS51YygpO2lmKChhLmlzQ2hyb21lfHxhLmlzRmlyZWZveCkmJnRoaXMuYmgoKSl0aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZEhpZGUoKSBzdGV2ZSBpcyBhbGl2ZSIpO2Vsc2V7YT0hMTt0cnl7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yi5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLmFjKTtiLnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuYWMpOwpiLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJ3aWR0aDoxcHg7aGVpZ2h0OjFweDttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4O2JhY2tncm91bmQtY29sb3I6I2ZmMDAwMCIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYik7dmFyIGQ9MD09PWIub2Zmc2V0V2lkdGh8fDA9PT1iLm9mZnNldEhlaWdodDtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGIpO2E9ZH1jYXRjaChmKXt9YT90aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZEhpZGUoKSBhZCBlbGVtZW50IHdhcyBoaWRkZW4iKTp0aGlzLk5oKCl9fWVsc2UgdGhpcy5OaCgpfSxNaDpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXtmPWQuc2hpZnQoKS5yZXBsYWNlKCJbcmFuZG9tXSIsdGhpcy5FYigpKTt0aGlzLnF1KGYsMDxkLmxlbmd0aD9hLmJpbmQodGhpcyk6dGhpcy5tZi5iaW5kKHRoaXMpLGIuYmluZCh0aGlzKSl9ZnVuY3Rpb24gYigpe3RoaXMuTGModGhpcy5oYywibiBIb21hZFV0aWwudGVzdEFkQ2FsbCgpIGFkIGNhbGwgdG8gJyIrCmYrIicgd2FzIGJsb2NrZWQiKX1pZigodGhpcy5iYz10aGlzLkxkKSYmdGhpcy5iYy5sZW5ndGgpe3ZhciBkPXRoaXMuYmMuc2xpY2UoKSxmPSIiO2EuYmluZCh0aGlzKSgpfWVsc2UgdGhpcy5tZigpfSxxdTpmdW5jdGlvbihhLGIsZCl7ZnVuY3Rpb24gZigpe2MoKSYmYigpfWZ1bmN0aW9uIGMoKXtyZXR1cm4gZT8od2luZG93LmNsZWFyVGltZW91dChlKSwhMCk6ITF9dmFyIGU9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtmKCl9LDNFMyk7dGhpcy5MYShuZXcgeShhKSxmLGZ1bmN0aW9uKCl7YygpJiZkKCl9KX0sTmg6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7Zj1kLnNoaWZ0KCkucmVwbGFjZSgiW3JhbmRvbV0iLHRoaXMuRWIoKSk7dGhpcy5ydShmLDA8ZC5sZW5ndGg/YS5iaW5kKHRoaXMpOnRoaXMuTWguYmluZCh0aGlzKSxiLmJpbmQodGhpcykpfWZ1bmN0aW9uIGIoKXt0aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZENhbGxKUygpIGFkIGNhbGwgdG8gJyIrCmYrIicgd2FzIGJsb2NrZWQiKX1pZih0aGlzLmNjJiZ0aGlzLmNjLmxlbmd0aCl7dmFyIGQ9dGhpcy5jYy5zbGljZSgpLGY7YS5iaW5kKHRoaXMpKCl9ZWxzZSB0aGlzLk1oKCl9LHJ1OmZ1bmN0aW9uKGEsYixkKXtmdW5jdGlvbiBmKCl7ZSgpJiZiKCl9ZnVuY3Rpb24gYygpe2UoKSYmZCgpfWZ1bmN0aW9uIGUoKXtyZXR1cm4gZz8od2luZG93LmNsZWFyVGltZW91dChnKSwhMCk6ITF9dmFyIGc9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtmKCl9LDNFMyk7dHJ5e3dpbmRvdy5vbmVycm9yPWZ1bmN0aW9uKGIsZCl7ZD09YSYmZSgpJiZjKCl9O3ZhciBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoayk7ay5zZXRBdHRyaWJ1dGUoImFzeW5jIiwiYXN5bmMiKTtrLnNldEF0dHJpYnV0ZSgiZGVmZXIiLCJkZWZlciIpO2sub25sb2FkPWY7ay5vbmVycm9yPWM7ay5zcmM9YTtrLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwKYyl9Y2F0Y2gobCl7ZigpfX0sbWY6ZnVuY3Rpb24oKXt0aGlzLiRiPyh0aGlzLnBmKyssdGhpcy5MYShuZXcgeSh0aGlzLiRiKSx0aGlzLmp1LmJpbmQodGhpcyksZnVuY3Rpb24oKXt0aGlzLm5mKCJDQ0MiKX0uYmluZCh0aGlzKSkpOnRoaXMuS2goKX0sbmY6ZnVuY3Rpb24oYSl7dGhpcy5MYyh0aGlzLkRmLCJuIEhvbWFkVXRpbC50ZXN0M3JkUGFydHlDb29raWUoKSBjYW5ub3Qgc2V0IDNyZCBwYXJ0eSBjb29raWUgIithKX0sanU6ZnVuY3Rpb24oYSl7YT1hLnJlc3BvbnNlVGV4dDt2YXIgYj0hMTt0cnl7Yj1KU09OLnBhcnNlKGEpfWNhdGNoKGQpe31iJiZiLnN0YXR1cz8idHJpZ2dlci1zZXQiPT1iLnN0YXR1cz8zPnRoaXMucGY/dGhpcy5tZigpOnRoaXMubmYoIkJCQiIpOiJhbHJlYWR5LXNldCI9PWIuc3RhdHVzJiZ0aGlzLktoKCk6dGhpcy5uZigiQUFBIil9LEtoOmZ1bmN0aW9uKCl7dGhpcy5YPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLktiKSk7CnRoaXMuSWIoKTt0aGlzLmllKCl9LGJoOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PWFkZEV2ZW50TGlzdGVuZXIudG9TdHJpbmcoKS5pbmRleE9mKCJuYXRpdmUgY29kZSIpJiYtMT09YWRkRXZlbnRMaXN0ZW5lci50b1N0cmluZygpLmluZGV4T2YoImFkZEV2ZW50TGlzdGVuZXIiKX0sSWI6ZnVuY3Rpb24oKXt2YXIgYT0iMCIsYj0iMCI7dHJ5e2UuVGEoKSYmKGE9IjEiKX1jYXRjaChkKXthPTJ9dGhpcy5RYyYmKGI9IjEiKTtlLnRyYWNrKCJzdGF0c19oZF9tb2JpbGVfYWIiLGErIiIrYiwhMCk7IjEiPT09YiYmKGUuQmEoInQtb25saW5lLmRlIil8fGUuQmEoImdpZ2EuZGUiKXx8ZS5CYSgid2VsdC5kZSIpKSYmZS50cmFjaygic3RhdHNfaGRfYWJfaXNTdGV2ZSIsdGhpcy5iaCgpLCEwKTtkb2N1bWVudC5kaXNwYXRjaEV2ZW50KHRoaXMubmIodGhpcy5FZikpO3RoaXMuT2QmJiJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5PZCYmdGhpcy5PZCgpfSxybzpmdW5jdGlvbigpe2lmKHRoaXMudWYmJgp0aGlzLkRxKCkpe3ZhciBhPXRoaXMuZnEoKTthJiZhLmpvaW4mJmUudHJhY2soImNvbmZpZ19mYWlsZWQiLGEuam9pbigiXyIpLCEwKX19LFJoOmZ1bmN0aW9uKGEpe2F8fChhPSIiKTtpZigic3RyaW5nIiE9PXR5cGVvZiBhKXRyeXthPWEudG9TdHJpbmcoKX1jYXRjaChiKXthPSJjb3VsZF9ub3RfY29udmVydF90b19zdHJpbmcifWE9YS50cmltKCk7ZS50cmFjaygic3RhdHNfaGRfYWN0aXZhdGVkIixhLCEwKX0sTGE6ZnVuY3Rpb24oYSxiLGQsZixjLGcpe3RoaXMudGR8fCh0aGlzLnRkPTApO3RoaXMudGQrKzt0aGlzLnRkPnRoaXMuTGcmJiF0aGlzLk1nJiYodGhpcy5NZz0hMCxlLnRyYWNrKCJzdGF0c19oZF9yZXF1ZXN0Y291bnQiLHRoaXMuTGcsITApKTthPW5ldyBOYShhLGIsZCk7ZiYmKGEuZ2k9ITApO2MmJmUubXIoKSYmKGEueGc9ITApO2cmJihhLkpoPSEwKTtyZXR1cm4gYS5sb2FkKCl9LGVnOmZ1bmN0aW9uKCl7ZS5UYSgpfHxlLllhKCJodHRwOi8vZDM3OTk2NGF5bWV4MnguY2xvdWRmcm9udC5uZXQvY2hlY2sueG1sP2VtcHR5PXRydWUiLAoiaG9tYWRzdGF0aWN2YXN0Iix7aG9tYWRfaGFzaF9ndWVzc2VkOiJ0cnVlIn0sZnVuY3Rpb24oYSl7dmFyIGI9bnVsbCxkPW51bGwsZj0iIjt0cnl7KGI9YS5yZXNwb25zZVhNTCl8fChiPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEucmVzcG9uc2VUZXh0LCJ0ZXh0L3htbCIpKSxkPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkIilbMF19Y2F0Y2goYyl7dGhpcy5rYSgibWVkaWFmaWxlX25veG1sIik7cmV0dXJufWlmKGQpaWYoYT1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJNZWRpYUZpbGUiKSlpZihhWzBdJiYoYT1hWzBdKSxhKXtmPWEmJmEuY2hpbGROb2RlcyYmYS5jaGlsZE5vZGVzWzBdP2EuY2hpbGROb2Rlc1swXS5ub2RlVmFsdWU6IiI7dGhpcy5DYygpfHwoYT10aGlzLmxhKGYpLGY9YS5wcm90b2NvbCsiOi8vIithLmhvc3QpO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7ZS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXtlLm5ldHdvcmtTdGF0ZT09CmUuTkVUV09SS19OT19TT1VSQ0UmJnRoaXMua2EoIm1lZGlhZmlsZSIpfS5iaW5kKHRoaXMpKTtlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNvdXJjZSIpKTtlLnNldEF0dHJpYnV0ZSgic3JjIixmKX1lbHNlIHRoaXMua2EoIm1lZGlhZmlsZV9ub21lZGlhIik7ZWxzZSB0aGlzLmthKCJtZWRpYWZpbGVfbm9tZWRpYSIpO2Vsc2UgdGhpcy5rYSgibWVkaWFmaWxlX25vYWQiKX0uYmluZCh0aGlzKSxmdW5jdGlvbigpe3RoaXMua2EoIm1lZGlhZmlsZV94bWxyZXF1ZXN0Iil9LmJpbmQodGhpcyksdGhpcyl9LGl1OmZ1bmN0aW9uKCl7cmV0dXJuImFsbCI9PT10aGlzLmNpfSxxbzpmdW5jdGlvbigpe3RoaXMuemEoImh0dHA6Ly9kMzc5OTY0YXltZXgyeC5jbG91ZGZyb250Lm5ldC9jaGVjay54bWw/ZW1wdHk9dHJ1ZSIsITApO3ZhciBhPXRoaXMuemEoImh0dHA6Ly9kMzc5OTY0YXltZXgyeC5jbG91ZGZyb250Lm5ldC9jaGVjay54bWw/ZW1wdHk9dHJ1ZSIsITApOwphLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0iaG9tYWRzdGF0aWN2YXN0IjthLmRhdGEuaG9tYWRfaGFzaF9ndWVzc2VkPSJ0cnVlIjt0aGlzLkxhKGEsdGhpcy5UdS5iaW5kKHRoaXMpLHRoaXMuU3UuYmluZCh0aGlzKSl9LFR1OmZ1bmN0aW9uKGEpe3ZhciBiPW51bGwsZD1udWxsO3RyeXsoYj1hLnJlc3BvbnNlWE1MKXx8KGI9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYS5yZXNwb25zZVRleHQsInRleHQveG1sIikpLGQ9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWQiKVswXX1jYXRjaChmKXtyZXR1cm59ZHx8dGhpcy5BcCgpfSxTdTpmdW5jdGlvbigpe30sQXA6ZnVuY3Rpb24oKXtlLndjKGsuenApO2UudHJhY2soImZhaWwtaW5pdCIsIjEwMSIpO3RoaXMua2EoInZhc3RmaWxlTWFuaXB1bGF0aW9uIil9LGllOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0VuYWJsZWQmJnRoaXMuR2IubGVuZ3RoKWZvcih2YXIgYT0wO2E8dGhpcy5HYi5sZW5ndGg7YSsrKXt2YXIgYj0KdGhpcy5HYlthXTsicmVxdWVzdCI9PWIudHlwZSYmZS5ZYShiLnVybCxiLmFsaWFzLG51bGwsZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7fSx0aGlzKTtpZigiZXZhbCI9PWIudHlwZSl7dmFyIGQ9bmV3IEo7d2luZG93W2QuaWEoKV09dGhpcztlLllhKGIudXJsLGIuYWxpYXMsbnVsbCxmdW5jdGlvbihhKXtpZihhLnJlc3BvbnNlVGV4dCl0cnl7ZXZhbChhLnJlc3BvbnNlVGV4dCl9Y2F0Y2goYil7fX0sZnVuY3Rpb24oKXt9LHRoaXMpfX19LHl1OmZ1bmN0aW9uKCl7cmV0dXJuIDEwMCpNYXRoLnJhbmRvbSgpPHRoaXMucWZ9LHBxOmZ1bmN0aW9uKGEpe3JldHVybiBhW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSphLmxlbmd0aCldfSxFYjpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnBvdygxMCxhfHwxMCkqKC44OTk5OTk5OTkqTWF0aC5yYW5kb20oKSsuMSkpfSxiYTpmdW5jdGlvbihhKXthPWF8fDEwO2Zvcih2YXIgYj0iIixkPTA7ZDxhO2QrKyliKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCguNT4KTWF0aC5yYW5kb20oKT82NTo5NykrTWF0aC5mbG9vcigyNipNYXRoLnJhbmRvbSgpKSk7cmV0dXJuIGJ9LGRjOmZ1bmN0aW9uKGEpe3JldHVybiJUcnVlIj09YXx8InRydWUiPT1hfHwxPT1hfHwiMSI9PWF8fDE9PWF9LHZiOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iIixkLGYsYyxlLGcsayxsPTA7bDxhLmxlbmd0aDspZD1hLmNoYXJDb2RlQXQobCsrKSxmPWEuY2hhckNvZGVBdChsKyspLGM9YS5jaGFyQ29kZUF0KGwrKyksZT1kPj4yLGQ9KGQmMyk8PDR8Zj4+NCxnPShmJjE1KTw8MnxjPj42LGs9YyY2Myxpc05hTihmKT9nPWs9NjQ6aXNOYU4oYykmJihrPTY0KSxiPWIrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZSkrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZCkrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZykrCiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGspO3JldHVybiBifSxsYTpmdW5jdGlvbihhKXt2YXIgYj0ic291cmNlIHByb3RvY29sIGF1dGhvcml0eSB1c2VySW5mbyB1c2VyIHBhc3N3b3JkIGhvc3QgcG9ydCByZWxhdGl2ZSBwYXRoIGRpcmVjdG9yeSBmaWxlIHF1ZXJ5IGFuY2hvciIuc3BsaXQoIiAiKTthPS9eKD86KD8hW146QF0rOlteOkBcL10qQCkoW146XC8/Iy5dKyk6KT8oPzpcL1wvKT8oKD86KChbXjpAXSopKD86OihbXjpAXSopKT8pP0ApPyhbXjpcLz8jXSopKD86OihcZCopKT8pKCgoXC8oPzpbXj8jXSg/IVtePyNcL10qXC5bXj8jXC8uXSsoPzpbPyNdfCQpKSkqXC8/KT8oW14/I1wvXSopKSg/Olw/KFteI10qKSk/KD86IyguKikpPykvLmV4ZWMoYSk7Zm9yKHZhciBkPXt9LGY9MTQ7Zi0tOylkW2JbZl1dPWFbZl18fCIiO2QucXVlcnlLZXk9e307ZFtiWzEyXV0ucmVwbGFjZSgvKD86XnwmKShbXiY9XSopPT8oW14mXSopL2csCmZ1bmN0aW9uKGEsYixoKXtiJiYoZC5xdWVyeUtleVtiXT1oKX0pO3JldHVybiBkfSxFaDpmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEpe3ZhciBkPSIiLGgsYztmb3IoaD03OzA8PWg7aC0tKWM9YT4+PjQqaCYxNSxkKz1jLnRvU3RyaW5nKDE2KTtyZXR1cm4gZH1mdW5jdGlvbiBkKGEsYil7cmV0dXJuIGE8PGJ8YT4+PjMyLWJ9dmFyIGYsYyxlPUFycmF5KDgwKSxnPTE3MzI1ODQxOTMsaz00MDIzMjMzNDE3LGw9MjU2MjM4MzEwMixtPTI3MTczMzg3OCxyPTMyODUzNzc1MjAscCxxLHQsdSx2O3A9YS5sZW5ndGg7dmFyIHc9W107Zm9yKGY9MDtmPHAtMztmKz00KWM9YS5jaGFyQ29kZUF0KGYpPDwyNHxhLmNoYXJDb2RlQXQoZisxKTw8MTZ8YS5jaGFyQ29kZUF0KGYrMik8PDh8YS5jaGFyQ29kZUF0KGYrMyksdy5wdXNoKGMpO3N3aXRjaChwJTQpe2Nhc2UgMDpmPTIxNDc0ODM2NDg7YnJlYWs7Y2FzZSAxOmY9YS5jaGFyQ29kZUF0KHAtMSk8PDI0fDgzODg2MDg7YnJlYWs7Y2FzZSAyOmY9CmEuY2hhckNvZGVBdChwLTIpPDwyNHxhLmNoYXJDb2RlQXQocC0xKTw8MTZ8MzI3Njg7YnJlYWs7Y2FzZSAzOmY9YS5jaGFyQ29kZUF0KHAtMyk8PDI0fGEuY2hhckNvZGVBdChwLTIpPDwxNnxhLmNoYXJDb2RlQXQocC0xKTw8OHwxMjh9Zm9yKHcucHVzaChmKTsxNCE9dy5sZW5ndGglMTY7KXcucHVzaCgwKTt3LnB1c2gocD4+PjI5KTt3LnB1c2gocDw8MyY0Mjk0OTY3Mjk1KTtmb3IoYT0wO2E8dy5sZW5ndGg7YSs9MTYpe2ZvcihmPTA7MTY+ZjtmKyspZVtmXT13W2ErZl07Zm9yKGY9MTY7Nzk+PWY7ZisrKWVbZl09ZChlW2YtM11eZVtmLThdXmVbZi0xNF1eZVtmLTE2XSwxKTtjPWc7cD1rO3E9bDt0PW07dT1yO2ZvcihmPTA7MTk+PWY7ZisrKXY9ZChjLDUpKyhwJnF8fnAmdCkrdStlW2ZdKzE1MTg1MDAyNDkmNDI5NDk2NzI5NSx1PXQsdD1xLHE9ZChwLDMwKSxwPWMsYz12O2ZvcihmPTIwOzM5Pj1mO2YrKyl2PWQoYyw1KSsocF5xXnQpK3UrZVtmXSsxODU5Nzc1MzkzJjQyOTQ5NjcyOTUsCnU9dCx0PXEscT1kKHAsMzApLHA9YyxjPXY7Zm9yKGY9NDA7NTk+PWY7ZisrKXY9ZChjLDUpKyhwJnF8cCZ0fHEmdCkrdStlW2ZdKzI0MDA5NTk3MDgmNDI5NDk2NzI5NSx1PXQsdD1xLHE9ZChwLDMwKSxwPWMsYz12O2ZvcihmPTYwOzc5Pj1mO2YrKyl2PWQoYyw1KSsocF5xXnQpK3UrZVtmXSszMzk1NDY5NzgyJjQyOTQ5NjcyOTUsdT10LHQ9cSxxPWQocCwzMCkscD1jLGM9djtnPWcrYyY0Mjk0OTY3Mjk1O2s9aytwJjQyOTQ5NjcyOTU7bD1sK3EmNDI5NDk2NzI5NTttPW0rdCY0Mjk0OTY3Mjk1O3I9cit1JjQyOTQ5NjcyOTV9cmV0dXJuKGIoZykrYihrKStiKGwpK2IobSkrYihyKSkudG9Mb3dlckNhc2UoKX19fSkoYyk7dmFyIE9hPWMuZGt8fE9hLGw9bmV3IE9hO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLlB0PXRoaXMuYVs5XTt0aGlzLk5rPXRoaXMuYVszXTt0aGlzLmZ1PQp0aGlzLmFbM107dGhpcy5qPXRoaXMuYVs1XX1jLmxuPWI7Yi5wcm90b3R5cGU9e090OmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5QdDp0aGlzLk1rKGEpfSxNazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTms6dGhpcy5ldShhKX0sZXU6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5mdTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmo6YX19fSkoYyk7dmFyIFBhPWMubG58fFBhLHZjPW5ldyBQYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXZjLk90KDQpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoYSxiLGQpe3RoaXMuYj1hO2EuZi5PP3RoaXMuWmE9YS5mLk8oKTp0aGlzLlphPSIiO2EuZi5TZyYmYS5mLlNnKHtwYXVzZTp0aGlzLnpkLmJpbmQodGhpcykscmVzdW1lOnRoaXMuemguYmluZCh0aGlzKSwKbXV0ZTp0aGlzLk5lLmJpbmQodGhpcyksdW5tdXRlOnRoaXMuTHUuYmluZCh0aGlzKX0pO3RoaXMuY29udGFpbmVyPXRoaXMuYi5oYjt0aGlzLnBsYXllcj10aGlzLmIuZjt0aGlzLlBiPXRoaXMuWmM9ITE7dGhpcy5Mbj0xRTM7dGhpcy5lYT1udWxsO3RoaXMuTD1iO3RoaXMueWE9e307dGhpcy52aWRlbz17fTt0aGlzLkpkPXt9O2UubGIoIm5ld0JpZ0FkSWQiKTt0aGlzLmJvPWUuYmEoMTApO3RoaXMuamY9MDt0aGlzLlhjPSJXZXJidW5nIC0gW3RpbWVdIjtkJiZkLmFkbWVzc2FnZSYmKHRoaXMuWGM9ZC5hZG1lc3NhZ2UsImZ1bmN0aW9uIj09dHlwZW9mIGQuYWRtZXNzYWdlJiYoKGE9dGhpcy5iLmYpJiZ0aGlzLmIuZi51JiYoYT10aGlzLmIuZi51KCkpLHRoaXMuWGM9ZC5hZG1lc3NhZ2UoYSkpKTtkJiYidHJ1ZSI9PVN0cmluZyhkLmFkanVzdEFkVm9sdW1lVG9Db250ZW50UGxheWVyKSYmKHRoaXMua249ZC5hZGp1c3RBZFZvbHVtZVRvQ29udGVudFBsYXllcik7dGhpcy5RZT10aGlzLklkPQohMTt0aGlzLmdoPWQmJmQubWF4V3JhcHBlckRlcHRoP3BhcnNlSW50KGQubWF4V3JhcHBlckRlcHRoKToxNTt0aGlzLmM9e307dGhpcy5WYz0hMTt0aGlzLlVoPS0xO3RoaXMuY29udHJvbHM9dGhpcy5jYXB0aW9uPXRoaXMuVWI9ITE7dGhpcy5Rbz1lLmJhKDEwKTt0aGlzLkRiPWUuYmEoMTApO3RoaXMuQmI9ZS5iYSgxMCk7dGhpcy5HaD1lLmJhKDEwKTt0aGlzLmNvbmY9e307dGhpcy50Yz10aGlzLkNiPSExO3RoaXMub2U9bnVsbDt0aGlzLlJkPXRoaXMuSmI9dGhpcy56ZT10aGlzLlZlPXRoaXMua2U9dGhpcy5qZD10aGlzLmxmPXRoaXMucGI9dGhpcy5nYz10aGlzLm9oPXRoaXMueGM9dGhpcy56dT10aGlzLnNiPSExO3RoaXMubGM9W107dGhpcy5lYz17fTt0aGlzLnJmPSExO3RoaXMuV2I9e307dGhpcy5Hcz0yMDA7dGhpcy5BZj10aGlzLmZpPXRoaXMuZmU9dGhpcy5ZZT0hMX1jLllqPWI7Yi5wcm90b3R5cGU9e3p0OmZ1bmN0aW9uKGEpe3RoaXMuY29uZj1hfSxIYTpmdW5jdGlvbihhKXt2YXIgYj0KdGhpcy5jb25mW2FdO3RoaXMuY29uZlt0aGlzLlphXSYmdGhpcy5jb25mW3RoaXMuWmFdW2FdJiYoYj10aGlzLmNvbmZbdGhpcy5aYV1bYV0pO3JldHVybiBifSxTaDpmdW5jdGlvbigpeyJwcmVyb2xsIj09ZS5TYSYmZS50cmFjaygic3RhdHNfaGRfYWN0aXZlIiwiIiwhMCk7dGhpcy5MLlFjP2UudHJhY2soImFkY2FsbCIsIjEiKTplLnRyYWNrKCJhZGNhbGwiLCIwIik7ZS50cmFjaygic3RhdHNfaGRfYWRfY2FsbCIsIiIsITApO2UudihrLmJuLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LEllOmZ1bmN0aW9uKGEsYixkLGMpe3RoaXMuc2I9ZDt2YXIgbj0hMTtjJiZjLmhvbWFkX3JlcGxhY2VfdXJsc19pbl90YWdzJiYobj0hMCk7aWYodGhpcy5MLlgpdGhpcy5qZisrLGUubGIoIm5ld1NtYWxsQWRJZCIpLHRoaXMuTC5ybygpLGM9bC5nZXRDb25maWcoKSx0aGlzLkwuS2EmJnRoaXMuTC5pc0VuYWJsZWQ/KHRoaXMuU2goKSxuZXcgVCh0aGlzLGEsdGhpcy5naCwKe2ZpcnN0Q2FsbDohMCx1c2VBZFRhZ1BhcmFtZXRlcjohMCxrZWVwVVJMOmIsYml0cmF0ZTpjLlBhLGVtcHR5OiJyZXNwb25zZS5lbXB0eSI9PWEsdnBhaWQ6dGhpcy5MLk5jLGhvbWFkX3JlcGxhY2VfdXJsc19pbl90YWdzOm4sY29udGVudFZpZGVvOntkdXJhdGlvbjp0aGlzLmIuZi5nZXREdXJhdGlvbigpLGN1cnJlbnRUaW1lOnRoaXMuYi5mLmdldEN1cnJlbnRUaW1lKCl9fSkpOmI/KHRoaXMuU2goKSxuZXcgVCh0aGlzLGEsdGhpcy5naCx7Zmlyc3RDYWxsOiEwLHZwYWlkOnRoaXMuTC5OYyx1c2VBZFRhZ1BhcmFtZXRlcjohMCxiaXRyYXRlOmMuUGEsa2VlcFVSTDohMCxob21hZF9yZXBsYWNlX3VybHNfaW5fdGFnczpuLGNvbnRlbnRWaWRlbzp7ZHVyYXRpb246dGhpcy5iLmYuZ2V0RHVyYXRpb24oKSxjdXJyZW50VGltZTp0aGlzLmIuZi5nZXRDdXJyZW50VGltZSgpfX0pKTp0aGlzLlFhKCk7ZWxzZXt2YXIgZz10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtnLkllKGEsYixkKX0sCjUwKX19LFRlOmZ1bmN0aW9uKGEpe2EuV2EmJmUudHJhY2soInN0YXRzX2hkX3dyYXBwZXJzYyIsImFkIiwhMCk7InNwaWVnZWwuZGUiIT1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpfHx0aGlzLlFlfHwic3ZtcHJldmlldyIhPWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZikuYW5jaG9yPyh0aGlzLlJkPXRoaXMuSmI9dGhpcy54Yz0hMSx0aGlzLmM9YSx0aGlzLkx0KHRoaXMuYyksdGhpcy5IZyhhKSx0aGlzLmxjPXRoaXMuemcoYSksdGhpcy5lYz17fSx0aGlzLnJmPSExLHRoaXMuSG8oKSk6dGhpcy5oZCgpfSxIZzpmdW5jdGlvbihhKXthJiYoYS5vcmlnaW4mJihhPWEub3JpZ2luKSxhLnBhcmVudCYmYS5wYXJlbnQgaW5zdGFuY2VvZiBiJiYodGhpcy5KZD10aGlzLnNxKGEpKSx0aGlzLkhnKGEucGFyZW50KSl9LHpnOmZ1bmN0aW9uKGEpe3ZhciBjPVtdO2EmJihhLm9yaWdpbiYmKGE9YS5vcmlnaW4pLCFhfHwhYS5wYXJlbnR8fGEucGFyZW50IGluc3RhbmNlb2YgYnx8KGM9CnRoaXMuemcoYS5wYXJlbnQpKSxjLnB1c2godGhpcy4kcChhKSkpO3JldHVybiBjfSwkcDpmdW5jdGlvbihhKXt2YXIgYj0iIixkPVtdO2lmKGEmJmEuVSYmYS5VLmdldEF0dHJpYnV0ZSl7Yj1hLlUuZ2V0QXR0cmlidXRlKCJpZCIpO2E9YS5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJDcmVhdGl2ZSIpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWQucHVzaChhW2NdLmdldEF0dHJpYnV0ZSgiaWQiKSk7MT09ZC5sZW5ndGgmJihkPWRbMF0pfXJldHVybnthZElEOmIsY3JlYXRpdmVJRDpkfX0sc3E6ZnVuY3Rpb24oYSl7dmFyIGI9W10sZD1bXSxjPVtdLGU9W10sZz0iIjtpZihhLlUpe2I9YS5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJbXByZXNzaW9uIik7Yz1hLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkNyZWF0aXZlIik7YS5VLmdldEF0dHJpYnV0ZSgiaWQiKSYmKGc9YS5VLmdldEF0dHJpYnV0ZSgiaWQiKSxlLnB1c2goZykpO2EuVS5nZXRBdHRyaWJ1dGUoImFkSUQiKSYmKGc9CmEuVS5nZXRBdHRyaWJ1dGUoImFkSUQiKSxlLnB1c2goZykpO2Zvcih2YXIgaz0wO2s8Yy5sZW5ndGg7aysrKWNba10uZ2V0QXR0cmlidXRlKCJpZCIpJiYoZz1jW2tdLmdldEF0dHJpYnV0ZSgiaWQiKSxlLnB1c2goZykpLGNba10uZ2V0QXR0cmlidXRlKCJhZElEIikmJihnPWNba10uZ2V0QXR0cmlidXRlKCJhZElEIiksZS5wdXNoKGcpKTtmb3Ioaz0wO2s8Yi5sZW5ndGg7aysrKWQucHVzaChhLmliKGJba10pKX1yZXR1cm57aW1wcmVzc2lvbnM6ZCxhZElkczplLGFkSWQ6Z319LG9hOmZ1bmN0aW9uKGEpe2EuV2EmJmUudHJhY2soInN0YXRzX2hkX3dyYXBwZXJzYyIsIm5vYWQiLCEwKTt2YXIgYj0wLGQ9InN0YXRzX2hkX2FkX2Vycm9yIjthJiYoYS5lcnJvciYmYS5lcnJvci5kZXRhaWwmJmEuZXJyb3IuZGV0YWlsLmNvZGUmJihiPWEuZXJyb3IuZGV0YWlsLmNvZGUpLGEubWQmJmEubWQuZXJyb3ImJmEubWQuZXJyb3IuY29kZSYmKGI9YS5tZC5lcnJvci5jb2RlKSk7c3dpdGNoKGEuZXJyb3IuY29kZSl7Y2FzZSB3Lk9jLmNvZGU6Yj09CkYuVWQuY29kZT9lLnYoay5udix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpOihlLkplKCksYj09Ri5IZi5jb2RlJiZlLnYoay5jcyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKTtlLnYoay55cCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2VtcHR5IjticmVhaztjYXNlIHcuRmYuY29kZTplLnYoay5VdSx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2Vycm9yX3Zhc3Rsb2FkZmFpbGVkIjticmVhaztjYXNlIHcuSWYuY29kZTplLnRyYWNrKCJ3cmFwcGVybGltaXQiLCIxMDYiKTtlLnYoay51dix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2Vycm9yX3dyYXBwZXJsaW1pdCI7YnJlYWs7Y2FzZSB3LlZkLmNvZGU6ZS52KGsueHYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLAp0aGlzLkIoKSx0aGlzLkMoKSk7ZD0ic3RhdHNfaGRfYWRfZXJyb3JfeG1scGFyc2UiO2JyZWFrO2Nhc2Ugdy5UZC5jb2RlOmUudihrLmRzLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSksZS50cmFjaygibm9tZWRpYSIsIjEwMiIpLGQ9InN0YXRzX2hkX2FkX2Vycm9yX25vbWVkaWEiLHRoaXMudGN8fChlLnRyYWNrKCJub21lZGlhX25vZmxhc2giLCIxMDUiKSxkPSJzdGF0c19oZF9hZF9lcnJvcl9ub21lZGlhbm9mbGFzaCIpfSJzdGF0c19oZF9hZF9lcnJvciI9PWQmJmEuZXJyb3ImJmEuZXJyb3IueGEmJihkKz0iXyIrYS5lcnJvci54YSk7ZS50cmFjayhkLCIiLCEwKTt0aGlzLlFiKGEpO3RoaXMuUWEoKX0sUWI6ZnVuY3Rpb24oYSl7dmFyIGI9OTAwO2EmJmEuZXJyb3ImJmEuZXJyb3IuY29kZSYmKGI9YS5lcnJvci5jb2RlLDkwMTxiJiYoYj05MDApKTtmb3IoYj17IltFUlJPUkNPREVdIjpifTthLk9hLmxlbmd0aDspdHJ5e3ZhciBkPWEuT2EucG9wKCk7CnRoaXMuSGUoZC51cmwsZC50eXBlLGIpfWNhdGNoKGMpe319LEx0OmZ1bmN0aW9uKGEpe3RoaXMua2U9dGhpcy56ZT10aGlzLlZlPSExO3RoaXMueWE9dGhpcy5iLkc7dmFyIGI9OTk5OTt0aGlzLmNvbmYuekluZGV4JiYoYj10aGlzLmNvbmYuekluZGV4LTEpO3RoaXMueWEuekluZGV4PWI7Yj10aGlzLmIuRjt0cnl7dmFyIGQ9dGhpcy5iLmYuZ2V0UmF3UGxheWVyKCk7aWYoZCYmZC5lbnZ2YXJzKXRyeXtiPWQuZW52dmFycygpLnZpZGVvU2xvdCx0aGlzLlllPSEwfWNhdGNoKGMpe319Y2F0Y2goZSl7fWIub3c9ImF1dG8iO3RoaXMuY29uZlsidmlkZW8uc3R5bGUucG9zaXRpb24iXSYmKGIuc3R5bGUucG9zaXRpb249dGhpcy5jb25mWyJ2aWRlby5zdHlsZS5wb3NpdGlvbiJdKTt0aGlzLmNvbmZbInZpZGVvLnN0eWxlIl0mJihiLnN0eWxlPXRoaXMuY29uZlsidmlkZW8uc3R5bGUiXSk7aWYodGhpcy5jb25mWyJ2aWRlby5hdHRyaWJ1dGVzIl0pZm9yKHZhciBnIGluIHRoaXMuY29uZlsidmlkZW8uYXR0cmlidXRlcyJdKXRoaXMuY29uZlsidmlkZW8uYXR0cmlidXRlcyJdLmhhc093blByb3BlcnR5KGcpJiYKYi5zZXRBdHRyaWJ1dGUoZyx0aGlzLmNvbmZbInZpZGVvLmF0dHJpYnV0ZXMiXVtnXSk7dGhpcy5rbiYmdGhpcy5wbGF5ZXIucWUoKSYmKGIudm9sdW1lPXRoaXMucGxheWVyLnFlKCkvMTAwKTtmb3IoO2IuZmlyc3RDaGlsZDspYi5yZW1vdmVDaGlsZChiLmZpcnN0Q2hpbGQpO2ZvcihkPTA7ZDxhLk0ubGVuZ3RoO2QrKyliLmNhblBsYXlUeXBlKGEuTVtkXS50eXBlKSYmdGhpcy5lbihiLGEuTVtkXS51cmwrIiIsYS5NW2RdLnR5cGUpO3RoaXMuWWUmJmIubG9hZCgpO2lmKHRoaXMuT2goYikpe3RoaXMuaG4oYik7YT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdP2Euc3R5bGU9dGhpcy5jb25mWyJpbm5lcldhcnBwZXIuc3R5bGUiXTooYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUud2lkdGg9IjEwMCUiLGEuc3R5bGUuaGVpZ2h0PSIxMDAlIik7dGhpcy5lYT10aGlzLnlhLmFwcGVuZENoaWxkKGEpO3RyeXt0aGlzLlllPwp0aGlzLnZpZGVvPWI6dGhpcy52aWRlbz10aGlzLmVhLmFwcGVuZENoaWxkKGIpfWNhdGNoKGspe3RoaXMudmlkZW89Yn19ZWxzZSB0aGlzLmMuTW8oKT8oYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdP2Euc3R5bGU9dGhpcy5jb25mWyJpbm5lcldhcnBwZXIuc3R5bGUiXTphLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGhpcy5lYT10aGlzLnlhLmFwcGVuZENoaWxkKGEpLHRoaXMudmlkZW89dGhpcy5lYS5hcHBlbmRDaGlsZChiKSx0aGlzLkp0KCkpOnRoaXMuRGUoKT90aGlzLkRoKCk6dGhpcy5jLm9yaWdpbi5xZyh3LlRkKX0sSnQ6ZnVuY3Rpb24oKXt0aGlzLnBiPXRoaXMuZ2M9ITE7dGhpcy5iLmYudmEmJnRoaXMuYi5mLnZhKCkmJihlLnYoay5qZyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMucGI9ITApO2UuamUoKTt0aGlzLmMmJnRoaXMuYy5vcmlnaW4mJnRoaXMuYy5vcmlnaW4uc2EmJgplLmpuKHRoaXMuYy5vcmlnaW4uc2EpO2UuZWIoInNldFVwVnBhaWQiKTt2YXIgYT10aGlzLmIuRjt0aGlzLmIuRj1DLnBvcCgpO2EucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcy5iLkYsYSk7dGhpcy5iLnBoKCk7dGhpcy5iLkpjKCk7Zm9yKGE9dGhpcy5iLkc7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7YS5wYXJlbnR8fHRoaXMuYi5KYygpO3RoaXMuZWE9dGhpcy55YT10aGlzLmIuRzt0aGlzLndmKCJ2cGFpZCIpO2lmKHRoaXMucGIpe2lmKGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYikpYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbjt0aGlzLnRyYWNrKCJtdXRlIiwhMCk7ZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJjb250ZW50IiwhMCk7ZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKX10aGlzLkg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7dGhpcy5ILnNldEF0dHJpYnV0ZSgid2lkdGgiLAoiMTAwJSIpO3RoaXMuSC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjEwMCUiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJzY3JvbGxpbmciLCJubyIpO3RoaXMuSC5zZXRBdHRyaWJ1dGUoImFsbG93IiwiYXV0b3BsYXkiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJkZWxlZ2F0ZXN0aWNreXVzZXJhY3RpdmF0aW9uIiwibWVkaWEiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJzdHlsZSIsImJvcmRlcjogMCBub25lO291dGxpbmU6IG5vbmU7Iik7dGhpcy5iLkcuYXBwZW5kQ2hpbGQodGhpcy5IKTt0aGlzLkgub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGE9ITE7dGhpcy5iLmYudmEmJnRoaXMuYi5mLnZhKCkmJihhPSEwKTt2YXIgYj10aGlzLmMudXEoKSxjPXRoaXMuYy5BLk9yaWdpbmFsQWRQYXJhbWV0ZXJzLGc9e2hvbWFkOkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobC5nZXRDb25maWcoKSkpLHZwYWlkOnt1cmw6Yi51cmwsdmlld21vZGU6Im5vcm1hbCIsZGVzaXJlZEJpdHJhdGU6Yi5kZXNpcmVkQml0cmF0ZXx8CmIuYml0cmF0ZXx8NDAwLGFkUGFyYW1ldGVyczpjLGNyZWF0aXZlRGF0YTp7QWRQYXJhbWV0ZXJzOmN9LGNvbnRlbnRwbGF5ZXI6e3dpZHRoOnBhcnNlSW50KHRoaXMuYi5HLnN0eWxlLndpZHRoKSxoZWlnaHQ6cGFyc2VJbnQodGhpcy5iLkcuc3R5bGUuaGVpZ2h0KX19LGNvbnRlbnRQbGF5ZXI6e211dGVkOmF9fTtlLm1hKHRoaXMuSCwiY29uZmlnIixnKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDEwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwiY29uZmlnIixnKX0uYmluZCh0aGlzKSwyMDApO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksNTAwKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDcwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwKImNvbmZpZyIsZyl9LmJpbmQodGhpcyksMUUzKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDEyMDApO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksMTUwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwiY29uZmlnIixnKX0uYmluZCh0aGlzKSwyRTMpO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksNUUzKX0uYmluZCh0aGlzKTthPWUuJGYoImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9ob21hZC1nbG9iYWwtY29uZmlncy5zY2huZWV2b25tb3JnZW4uY29tL2lmcmFtZS5odG1sIix0aGlzLkwpO3RoaXMuSC5zcmM9YTtlLmJlKCJ2cGFpZGV2ZW50IixmdW5jdGlvbihhKXsiQWRTaXplQ2hhbmdlIiE9YS5kYXRhLm5hbWUmJiJBZFJlbWFpbmluZ1RpbWVDaGFuZ2UiIT0KWyJkYXRhIl0ubmFtZSYmdGhpcy5iLlRiKCEwKTtpZihhJiZhLmRhdGEmJmEuZGF0YS5uYW1lKXt0aGlzLmxjPWEuZGF0YS5vcmlnaW5hbGV2ZW50LmFkSURzOyJBZEVycm9yIj09YS5kYXRhLm5hbWUmJnRoaXMuYnYoYSk7aWYoIkFkSW1wcmVzc2lvbiI9PWEuZGF0YS5uYW1lJiYodGhpcy5jdigpLHRoaXMuYi5UYighMCksIXRoaXMuSmIpKXt2YXIgYj0yRTMsYz01MDt0aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uJiYodGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi5wZXJjZW50JiYoYz10aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnBlcmNlbnQpLHRoaXMuY29uZi52aWV3YWJsZUltcHJlc3Npb24udGltZU1TJiYoYj10aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnRpbWVNUykpO3RoaXMuSmI9e2VsOnRoaXMuSCxjYjpmdW5jdGlvbigpe3RoaXMuUmQ9ITA7ZS52KGsuYmksdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt0aGlzLnRyYWNrKCJ2aWV3YWJsZSIpfS5iaW5kKHRoaXMpLAp0aW1lTVM6YixwZXJjZW50OmMsc3RhcnRUaW1lOiExfTtlLkNlKHRoaXMuSmIpfSJBZFN0YXJ0ZWQiPT1hLmRhdGEubmFtZSYmKHRoaXMuYi5UYighMCksdGhpcy5ndigpKTsiQWRWaWRlb1N0YXJ0Ij09YS5kYXRhLm5hbWUmJih0aGlzLmIuVGIoITApLHRoaXMua3YoKSk7IkFkVmlkZW9GaXJzdFF1YXJ0aWxlIj09YS5kYXRhLm5hbWUmJnRoaXMuaXYoKTsiQWRWaWRlb01pZHBvaW50Ij09YS5kYXRhLm5hbWUmJnRoaXMuanYoKTsiQWRWaWRlb1RoaXJkUXVhcnRpbGUiPT1hLmRhdGEubmFtZSYmdGhpcy5sdigpOyJBZFZpZGVvQ29tcGxldGUiPT1hLmRhdGEubmFtZSYmdGhpcy5odigpOyJBZFN0b3BwZWQiPT1hLmRhdGEubmFtZSYmdGhpcy5kaSgpO2lmKCJBZENsaWNrVGhydSI9PWEuZGF0YS5uYW1lKXt2YXIgZz1hLmRhdGEuY2xpY2tUaHJ1VGFyZ2V0O2d8fChnPXRoaXMuYy5PYik7aWYoIWcpcmV0dXJuO3RoaXMudHJhY2soImNsaWNrdHJhY2tpbmciKTtlLnYoay5pZyx0aGlzLmMuQSwKdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPSJfdG9wIjt0cnl7dGhpcy5MLiRjJiYoYT0iX2JsYW5rIik7dmFyIGI9d2luZG93Lm9wZW4oIiIsYSk7Yi5kb2N1bWVudC5ib2R5LmlubmVySFRNTD0iPGRpdj48L2Rpdj4iO2IuZG9jdW1lbnQubG9jYXRpb24uaHJlZj1nfWNhdGNoKGQpe3dpbmRvdy5vcGVuKGcsYSl9fS5iaW5kKHRoaXMpLDUwMCl9IkFkU2tpcHBlZCI9PWEuZGF0YS5uYW1lJiZ0aGlzLmZ2KCk7IkFkUmVtYWluaW5nVGltZUNoYW5nZSI9PWEuZGF0YS5uYW1lJiZlLnYoay4kZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpOyJBZFBhdXNlZCI9PWEuZGF0YS5uYW1lJiZ0aGlzLmR2KCk7IkFkUGxheWluZyI9PWEuZGF0YS5uYW1lJiYodGhpcy5maSYmKHRoaXMuQWY9ITEsdGhpcy5ZYigpKSx0aGlzLmV2KCkpOyJBZFZvbHVtZUNoYW5nZSI9PWEuZGF0YS5uYW1lJiYoYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkJiKSwKMD09YS5kYXRhLm9yaWdpbmFsZXZlbnQudm9sdW1lPyh0aGlzLnBiPSEwLGImJihiLmlubmVySFRNTD10aGlzLmNvbmYudW5tdXRlQnV0dG9uKSx0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJ1c2VyIiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSk6KHRoaXMucGI9ITEsYiYmKGIuaW5uZXJIVE1MPXRoaXMuY29uZi5tdXRlQnV0dG9uKSx0aGlzLnRyYWNrKCJ1bm11dGUiLCEwKSxlLnRyYWNrKCJzdGF0c19oZF91bm11dGVkIiwidXNlciIsITApLGUudihrLnRmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpLGUudihrLiRkLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpfX0uYmluZCh0aGlzKSk7ZS5iZSgidnBhaWRjb250aW51ZWNvbnRlbnQiLGZ1bmN0aW9uKCl7dGhpcy5RYSgpfS5iaW5kKHRoaXMpKTtlLmJlKCJ2cGFpZGVycm9zIixmdW5jdGlvbigpe3RoaXMuUWEoKX0uYmluZCh0aGlzKSk7CnRoaXMuYi5ZZihmdW5jdGlvbihhKXtlLm1hKHRoaXMuSCwicmVzaXplIixhKX0uYmluZCh0aGlzKSl9LGR2OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy50cmFjaygicGF1c2UiKTtlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2EmJihhLmlubmVySFRNTD10aGlzLmNvbmYucGxheUJ1dHRvbik7dGhpcy5nYz0hMH0sZXY6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRiKTthJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uKTt0aGlzLnRyYWNrKCJyZXN1bWUiLCEwKTtlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuZ2M9ITF9LGd2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygiY3JlYXRpdmVWaWV3Iik7ZS52KGsuVWYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKX0sCmZ2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygic2tpcCIpO2UudihrLlRmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LGN2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygiaW1wcmVzc2lvbiIpO2UuZWIoImltcHJlc3Npb24iKTtlLnYoay5QZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxrdjpmdW5jdGlvbigpe3RoaXMudHJhY2soInN0YXJ0Iik7ZS5lYigic3RhcnQiKTtlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxpdjpmdW5jdGlvbigpe3RoaXMudHJhY2soImZpcnN0UXVhcnRpbGUiKTt0aGlzLnhjPSEwO2UuZWIoImZpcnN0UXVhcnRpbGUiKTtlLnYoay5OZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxqdjpmdW5jdGlvbigpe3RoaXMudHJhY2soIm1pZHBvaW50Iik7ZS5lYigibWlkcG9pbnQiKTtlLnYoay5SZix0aGlzLmMuQSx0aGlzLmIuZi51KCksCnRoaXMuQigpLHRoaXMuQygpKX0sbHY6ZnVuY3Rpb24oKXt0aGlzLnRyYWNrKCJ0aGlyZFF1YXJ0aWxlIik7ZS5lYigidGhpcmRRdWFydGlsZSIpO2UudihrLlZmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LGh2OmZ1bmN0aW9uKCl7dGhpcy5QZCgpO2UuZWIoImNvbXBsZXRlIil9LGRpOmZ1bmN0aW9uKGEpe2lmKHRoaXMuSCYmdGhpcy5ILnBhcmVudE5vZGUmJnRoaXMuSC5wYXJlbnROb2RlLnBhcmVudE5vZGUpe2UuZWIoImFkc3RvcHBlZCIpO3ZhciBiPXRoaXMuSC5wYXJlbnROb2RlO3RoaXMuSC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuSCk7Yi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpO2UuamUoKTt0aGlzLkg9ITE7dGhpcy5RYShhKX19LGJ2OmZ1bmN0aW9uKGEpe3ZhciBiPWEubWVzc2FnZXx8IiIsZD0vXGQrL2csYz1bXTshYiYmYS5kYXRhJiZhLmRhdGEub3JpZ2luYWxldmVudCYmYS5kYXRhLm9yaWdpbmFsZXZlbnQubXNnJiYoYj0KYS5kYXRhLm9yaWdpbmFsZXZlbnQubXNnLChjPWIubWF0Y2goZCkpP2Muam9pbiYmKGI9Yy5qb2luKCItIikpOmI9Yi5zdWJzdHJpbmcoMCwyMCkpO2UudHJhY2soInN0YXRzX3ZwX2Vycm9yaGFuZGxlciIsYiwhMCk7ZS5lYigiZXJyIixiKTtlLnYoay5tdix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuZGkoITApfSxlbjpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoYSxiKXtpZihiLkthJiZiLmlzRW5hYmxlZCYmIWIuQ2MoKSl7dmFyIGQ9Yi5sYShhKTtyZXR1cm4gZC5wcm90b2NvbCsiOi8vIitkLmhvc3R9cmV0dXJuIGF9aWYoYS5hcHBlbmRDaGlsZCl7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic291cmNlIik7Yy5zcmM9ZChiLHRoaXMuTCk7Yy5vbmVycm9yPXRoaXMuWXUuYmluZCh0aGlzKTthLmFwcGVuZENoaWxkKGMpfWVsc2UgYS5zZXRBdHRyaWJ1dGUoInNyYyIsZChiLHRoaXMuTCkpfSxPaDpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRFbGVtZW50c0J5VGFnTmFtZT8KMDxhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzb3VyY2UiKS5sZW5ndGg6ITB9LGhuOmZ1bmN0aW9uKGEpe2EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZHN0YXJ0Iix0aGlzLmFpLmJpbmQodGhpcykpO2EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkbWV0YWRhdGEiLHRoaXMueGYuYmluZCh0aGlzKSk7YS5hZGRFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIix0aGlzLnlmLmJpbmQodGhpcykpO2EuYWRkRXZlbnRMaXN0ZW5lcigiZW5kZWQiLHRoaXMuUGQuYmluZCh0aGlzKSk7YS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5RZC5iaW5kKHRoaXMpKX0sRWQ6ZnVuY3Rpb24oYSl7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2Fkc3RhcnQiLHRoaXMuYWkuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsdGhpcy54Zi5iaW5kKHRoaXMpKTthLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLHRoaXMueWYuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlbmRlZCIsCnRoaXMuUGQuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5RZC5iaW5kKHRoaXMpKX0sYWk6ZnVuY3Rpb24oYSl7dGhpcy5QYnx8KHRoaXMudmlkZW8uY29udHJvbHM9ITEsd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLlBifHx0aGlzLnhmKGEpfS5iaW5kKHRoaXMpLHRoaXMuTG4pKX0seGY6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWmMmJnRoaXMuT2godGhpcy52aWRlbykmJiF0aGlzLkNiJiYhdGhpcy5QYil7dGhpcy5aYz0hMDt0cnl7aWYoIWUuVGEoKSYmYS50YXJnZXQmJjU+PWEudGFyZ2V0LmR1cmF0aW9uJiY1PE1hdGguYWJzKHRoaXMuYy5kdXJhdGlvbi1hLnRhcmdldC5kdXJhdGlvbikpe3RoaXMuQ2J8fCh0aGlzLkNiPSEwLHRoaXMuRWQodGhpcy52aWRlbyksZS50cmFjaygic3RhdHNfaGRfbm9vcHZpZGVvIiwiIiwhMCksdGhpcy5MLnBnfHx0aGlzLkwua2EoInZpZGVvLW5vb3AiKSk7dGhpcy5RYSgpO3JldHVybn19Y2F0Y2goYil7ZS50cmFjaygic3RhdHNfaGRfbm9vcHZpZGVvX2ZhaWwiLAoiIiwhMCl9dGhpcy5YdSgpO3RoaXMudmlkZW8uY29udHJvbHM9ITE7dGhpcy5iLkpjKCk7dGhpcy5aaCgpO3RoaXMud2YoKTt0aGlzLmFnKCk7dGhpcy5iLnBoKCk7dGhpcy52aWRlby5wbGF5JiZ0aGlzLmtmKCl9fSxrZjpmdW5jdGlvbigpe2lmKCF0aGlzLmpkKWlmKHRoaXMuY29uZi5wcmVBZElmcmFtZVVybCl7dmFyIGE9dGhpcy5jb25mLnByZUFkSWZyYW1lVXJsOyJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoYT1hKGUuU2EpKTtpZigic3RyaW5nIj09dHlwZW9mIGEmJmEpe3RoaXMuc2Q9W107Zm9yKHZhciBiPXRoaXMuYi5HLGQ9MDtkPGIuY2hpbGRyZW4ubGVuZ3RoO2QrKyl0aGlzLnNkLnB1c2goYi5jaGlsZHJlbltkXSksYi5jaGlsZHJlbltkXS5zdHlsZS5kaXNwbGF5PSJub25lIjtkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9KTtkLnNldEF0dHJpYnV0ZSgic3JjIiwKYSk7ZC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Quc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7ZC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAwIG5vbmU7b3V0bGluZTogbm9uZTsiKTtiLmFwcGVuZENoaWxkKGQpO3ZhciBjPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihhKXtpZigiY29udGludWUiPT1hLmRhdGEpe3RoaXMuVGMoKTthPU1hdGgucm91bmQoKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWMpLzFFMyk7dmFyIGI9IiI7MTxhJiYoYj0iZ3QxIik7NTxhJiYoYj0iZ3Q1Iik7MTA8YSYmKGI9Imd0MTAiKTsyMDxhJiYoYj0iZ3QyMCIpO2UudHJhY2soInN0YXRzX2hkX3ByZUlmcmFtZUNsb3NlZCIsYiwhMCl9fS5iaW5kKHRoaXMpKTtlLnRyYWNrKCJzdGF0c19oZF9wcmVJZnJhbWVPcGVuZWQiLCIiLCEwKX1lbHNlIHRoaXMuVGMoKX1lbHNlIHRoaXMuVGMoKX0sVGM6ZnVuY3Rpb24oYSl7aWYodGhpcy5zZClmb3IodmFyIGI9CjA7Yjx0aGlzLnNkLmxlbmd0aDtiKyspdGhpcy5zZFtiXS5zdHlsZS5kaXNwbGF5PSJibG9jayI7aWYoKGI9dGhpcy52aWRlby5wbGF5KCkpJiZiWyJjYXRjaCJdKWJbImNhdGNoIl0oZnVuY3Rpb24oYil7dGhpcy5qZHx8KGE/KCJzdHJpbmciIT10eXBlb2YgYiYmYiYmYi5tZXNzYWdlJiYoYj1iLm1lc3NhZ2UpLHRoaXMuUWEoKSxlLnRyYWNrKCJzdGF0c19oZF9wbGF5UHJvbWlzZUZhaWxlZCIsYiwhMCkpOih0aGlzLk5lKCEwKSx0aGlzLlRjKCEwKSkpfS5iaW5kKHRoaXMpKTtiLnRoZW4oZnVuY3Rpb24oKXt0aGlzLnplJiZlLnRyYWNrKCJzdGF0c19oZF9wbGF5UHJvbWlzZVJlc29sdmVkQWZ0ZXJJbXByZXNzaW9uIiwiIiwhMCk7dGhpcy5WZT0hMH0uYmluZCh0aGlzKSk7ZGE/KHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLlhiLmJpbmQodGhpcykpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuWGIuYmluZCh0aGlzKSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLAp0aGlzLlhiLmJpbmQodGhpcykpKTpLPWZ1bmN0aW9uKCl7dGhpcy5WY3x8KHRoaXMudmlkZW8ubG9hZCgpLHRoaXMua2YoKSl9LmJpbmQodGhpcyk7dGhpcy5zZSgpLkNoKHRoaXMpfSxQZDpmdW5jdGlvbigpe3RoaXMuTC52YyYmIXRoaXMuQ2ImJmUudHJhY2soInF1YXJ0aWxlIiwiY29tcGxldGUiLCEwKTt0aGlzLnRyYWNrKCJjb21wbGV0ZSIpO2UudihrLiRtLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSk7dGhpcy5RYSgpfSxRYTpmdW5jdGlvbihhKXtpZighdGhpcy5rZSlpZih0aGlzLmtlPSEwLHRoaXMuUmR8fChlLnYoay5mcyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMudHJhY2soIm5vdHZpZXdhYmxlIikpLHRoaXMuYy5yYnx8dGhpcy5jLmpjKXtlLmxiKCJuZXdTbWFsbEFkSWQiKTt0aGlzLmpmKys7dGhpcy5QYj10aGlzLlpjPSExO3RyeXt0aGlzLkVkKHRoaXMudmlkZW8pfWNhdGNoKGIpe310cnl7dGhpcy5lYS5yZW1vdmVDaGlsZCh0aGlzLnZpZGVvKX1jYXRjaChkKXt9dHJ5e3RoaXMueWEucmVtb3ZlQ2hpbGQodGhpcy5lYSl9Y2F0Y2goYyl7fXRoaXMuY2FwdGlvbj0KdGhpcy5jb250cm9scz1udWxsO3RoaXMuSWQ9ITE7dHJ5e3RoaXMuYi5XaCgpfWNhdGNoKGcpe310aGlzLmxmPSEwO3RoaXMuYi53ZSgpO3RoaXMuVWI9ITE7dGhpcy5zZSgpLnloKCk7dGhpcy5jLnJiJiZ0aGlzLmMub3JpZ2luLk9lKCk7dGhpcy5jLmpjJiYoYT90aGlzLmMub3JpZ2luLmtoKCk6dGhpcy5oZCgpKX1lbHNlIHRoaXMuaGQoKX0sWXU6ZnVuY3Rpb24oYSl7YS50YXJnZXQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChhLnRhcmdldCk7dGhpcy52aWRlby5uZXR3b3JrU3RhdGUmJnRoaXMudmlkZW8ubmV0d29ya1N0YXRlPT10aGlzLnZpZGVvLk5FVFdPUktfTk9fU09VUkNFJiYodGhpcy5FZCh0aGlzLnZpZGVvKSx0aGlzLkRlKCk/dGhpcy5EaCgpOnRoaXMuUWQoYSkpfSxRZDpmdW5jdGlvbihhKXt0aGlzLlBiPSEwO2EmJmEudGFyZ2V0JiZhLnRhcmdldC5lcnJvciYmYS50YXJnZXQuZXJyb3IuY29kZXx8dGhpcy52aWRlby5uZXR3b3JrU3RhdGU9PXRoaXMudmlkZW8uTkVUV09SS19OT19TT1VSQ0UmJgoodGhpcy5EZSgpP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50Y3x8dGhpcy5MLmVnKCl9LmJpbmQodGhpcyksMUUzKTp0aGlzLkwuZWcoKSk7dGhpcy5jLm9yaWdpbi5xZyh3LlRkKX0seWY6ZnVuY3Rpb24oKXtpZih0aGlzLnp1KXRoaXMuUWEoKTtlbHNle3RoaXMuVWI9ITA7dGhpcy5iLmYuVmEmJiF0aGlzLmxmJiZ0aGlzLmIuZi5WYSgpJiZlLnYoay5mZCx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3ZhciBhPU1hdGguZmxvb3IodGhpcy52aWRlby5jdXJyZW50VGltZSk7dGhpcy5DdShhKTtpZighdGhpcy5KYil7dmFyIGI9MkUzLGQ9NTA7dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbiYmKHRoaXMuY29uZi52aWV3YWJsZUltcHJlc3Npb24ucGVyY2VudCYmKGQ9dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi5wZXJjZW50KSx0aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnRpbWVNUyYmKGI9dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi50aW1lTVMpKTsKdGhpcy5KYj17ZWw6dGhpcy52aWRlbyxjYjpmdW5jdGlvbigpe3RoaXMuUmQ9ITA7ZS52KGsuYmksdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt0aGlzLnRyYWNrKCJ2aWV3YWJsZSIpfS5iaW5kKHRoaXMpLHRpbWVNUzpiLHBlcmNlbnQ6ZCxzdGFydFRpbWU6ITF9O2UuQ2UodGhpcy5KYil9ZD0iIjt0aGlzLmMuaGYmJihiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuR2gpKSYmKGQ9dGhpcy5jLmhmLWEsMDxkP2Q9dGhpcy5jb25mLnNraXBhYmxlQnV0dG9uLnJlcGxhY2UoIlt0aW1lXSIsZCk6KGQ9dGhpcy5jb25mLnNraXBCdXR0b24ucmVwbGFjZSgiW3RpbWVdIixkKSx0aGlzLklkfHwodGhpcy5JZD0hMCxiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3RoaXMudHJhY2soInNraXAiKTtlLnYoay5UZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuYy5yYj8odGhpcy5QYj10aGlzLlpjPSExLAp0aGlzLkVkKHRoaXMudmlkZW8pLHRoaXMuZWEucmVtb3ZlQ2hpbGQodGhpcy52aWRlbyksdGhpcy55YS5yZW1vdmVDaGlsZCh0aGlzLmVhKSx0aGlzLmNhcHRpb249dGhpcy5jb250cm9scz1udWxsLHRoaXMuSWQ9ITEsdGhpcy5iLldoKCksdGhpcy5jLm9yaWdpbi5PZSgpKTp0aGlzLlFhKCl9LmJpbmQodGhpcykpKSksYi5pbm5lckhUTUw9ZCk7dGhpcy5jYXB0aW9uJiYodGhpcy5jYXB0aW9uLmlubmVySFRNTD10aGlzLlhjLnJlcGxhY2UoIlt0aW1lXSIsZS55Zyh0aGlzLmMuZHVyYXRpb24tYSkpKTt0aGlzLlZjPSEwO3RoaXMudmlkZW8uY29udHJvbHM9ITF9fSxEaDpmdW5jdGlvbigpe3RoaXMudGM9ITA7dGhpcy55YT10aGlzLmIuRzt0aGlzLnlhLmlubmVySFRNTD0iIjt2YXIgYT05OTk5O3RoaXMuY29uZi56SW5kZXgmJihhPXRoaXMuY29uZi56SW5kZXgtMSk7dGhpcy55YS56SW5kZXg9YTthPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9iamVjdCIpO2Euc2V0QXR0cmlidXRlKCJkYXRhIiwKImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9ob21hZC1nbG9iYWwtY29uZmlncy5zY2huZWV2b25tb3JnZW4uY29tL2hvbWFkanNmbGFzaGRpc3BsYXkuc3dmIik7YS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Euc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7YS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpO2Euc2V0QXR0cmlidXRlKCJpZCIsImRpc3BtYWluIik7YS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJkaXNwbWFpbiIpO2Euc2V0QXR0cmlidXRlKCJzdHlsZSIsInZpc2liaWxpdHk6IHZpc2libGUiKTthLnNldEF0dHJpYnV0ZSgiRmxhc2hWYXJzIiwiZGF0YT0iK3RoaXMubnEoKSk7YS5pbm5lckhUTUw9JzxwYXJhbSBuYW1lPSJhbGxvd3NjcmlwdGFjY2VzcyIgdmFsdWU9ImFsd2F5cyI+PHBhcmFtIG5hbWU9ImFsbG93RnVsbFNjcmVlbiIgdmFsdWU9InRydWUiPjxwYXJhbSBuYW1lPSJiZ0NvbG9yIiB2YWx1ZT0iIzAwMDAwMCI+PHBhcmFtIG5hbWU9Im9wYXF1ZSIgdmFsdWU9ImRpcmVjdCI+JzsKdGhpcy5iLkY9YTt2YXIgYj10aGlzLmIuRixkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RoaXMuY29uZlsiaW5uZXJXYXJwcGVyLnN0eWxlIl0/ZC5zdHlsZT10aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdOmQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIjt0aGlzLmVhPXRoaXMueWEuYXBwZW5kQ2hpbGQoZCk7dGhpcy5iLkpjKCk7dGhpcy52aWRlbz10aGlzLmVhLmFwcGVuZENoaWxkKGIpO2I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO2Iuc3R5bGUudG9wPSIwcHgiO2Iuc3R5bGUud2lkdGg9dGhpcy55YS5vZmZzZXRXaWR0aCsicHgiO2Iuc3R5bGUuaGVpZ2h0PXRoaXMueWEub2Zmc2V0SGVpZ2h0KyJweCI7Yi5zdHlsZS5jdXJzb3I9InBvaW50ZXIiO2Iub25jbGljaz10aGlzLiRoLmJpbmQodGhpcyk7dGhpcy5lYS5hcHBlbmRDaGlsZChiKTt0aGlzLlpoKCk7dGhpcy53ZigpO3RoaXMub2U9c2V0SW50ZXJ2YWwodGhpcy5wby5iaW5kKHRoaXMpLAoxMDApO3JldHVybiBhfSxucTpmdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxiPXt9LGQ9MDtkPHRoaXMuYy5NLmxlbmd0aDtkKyspe3ZhciBjPWI9dGhpcy5jLk1bZF0sZTtlPWIudXJsO3ZhciBnPXRoaXMuTDtnLkthJiZnLmlzRW5hYmxlZCYmIWcuQ2MoKSYmKGU9Zy5sYShlKSxlPWUucHJvdG9jb2wrIjovLyIrZS5ob3N0KTtjLnVybD1lO2EucHVzaChiKX1yZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHttZWRpYWZpbGVzOmF9KSl9LHBvOmZ1bmN0aW9uKCl7dHJ5e3ZhciBhPXRoaXMudmlkZW8uZ2V0Rmxhc2hEaXNwbGF5U3RhdHVzKCk7dGhpcy52aWRlby5wYXVzZWQ9YS5wYXVzZWQ7YS50aW1lPj10aGlzLmMuZHVyYXRpb24/KGNsZWFySW50ZXJ2YWwodGhpcy5vZSksdGhpcy5QZCgpKTooMDxhLnRpbWUmJih0aGlzLnZpZGVvLmN1cnJlbnRUaW1lPWEudGltZSx0aGlzLnlmKCkpLCJlcnJvciI9PWEuc3RhdHVzJiYoY2xlYXJJbnRlcnZhbCh0aGlzLm9lKSwKdGhpcy5RZCgpKSx0aGlzLnZpZGVvLm11dGVkP3RoaXMudmlkZW8ubXV0ZSgpOnRoaXMudmlkZW8udW5tdXRlKCkpfWNhdGNoKGIpe319LFRoOmZ1bmN0aW9uKCl7dGhpcy5vaHx8KHRoaXMub2g9ITAsdGhpcy54Y3x8ZS50cmFjaygic3RhdHNfaGRfY2xvc2VkQmVmb3JlMXN0UXVhcnRpbGUiLCIiLCEwKSl9LEN1OmZ1bmN0aW9uKGEpe2UudihrLiRkLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSk7YT09dGhpcy5VaHx8dGhpcy5DYnx8KDA9PWEmJih0aGlzLnNiJiYod2luZG93LmNsZWFyVGltZW91dCh0aGlzLnNiKSx0aGlzLnNiPSExKSx0aGlzLlZlfHwoZS50cmFjaygic3RhdHNfaGRfaW1wcmVzc2lvbldpdGhPdXRSZXNvbHZlZFByb21pc2UiLCIiLCEwKSx0aGlzLnplPSEwKSx0aGlzLnRyYWNrKCJpbXByZXNzaW9uIiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsZnVuY3Rpb24oKXt0aGlzLlRoKCl9LmJpbmQodGhpcykpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLApmdW5jdGlvbigpe3RoaXMuVGgoKX0uYmluZCh0aGlzKSksdGhpcy50YyYmZS50cmFjaygic3RhdHNfaGRfYWRfaW1wcmVzc2lvbl9mbGFzaCIsIiIsITApLHRoaXMuQ2J8fGUudHJhY2soInN0YXRzX2hkX2FkX2ltcHJlc3Npb24iLCIiLCEwKSxlLlRhKCkmJmUudHJhY2soInN0YXRzX2hkX2FkX2ltcHJlc3Npb25fbW9iaWxlIiwiIiwhMCksdGhpcy50cmFjaygiY3JlYXRpdmVWaWV3IiksdGhpcy50cmFjaygic3RhcnQiKSxlLnYoay5QZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLGUudihrLlVmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSksdGhpcy50YyYmZS50cmFjaygicGxheWVkV2l0aEZsYXNoIiwiMTAzIikpLGE9PU1hdGguZmxvb3IodGhpcy5jLmR1cmF0aW9uLzQpJiYodGhpcy5MLnZjJiYoZS50cmFjaygicXVhcnRpbGUiLCJmaXJzdFF1YXJ0aWxlIiwhMCksdGhpcy54Yz0hMCksdGhpcy50cmFjaygiZmlyc3RRdWFydGlsZSIpLAplLnYoay5OZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKSxhPT1NYXRoLmZsb29yKHRoaXMuYy5kdXJhdGlvbi8yKSYmKHRoaXMuTC52YyYmZS50cmFjaygicXVhcnRpbGUiLCJtaWRwb2ludCIsITApLHRoaXMudHJhY2soIm1pZHBvaW50IiksZS52KGsuUmYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSksYT09TWF0aC5mbG9vcigzKnRoaXMuYy5kdXJhdGlvbi80KSYmKHRoaXMuTC52YyYmZS50cmFjaygicXVhcnRpbGUiLCJ0aGlyZFF1YXJ0aWxlIiwhMCksdGhpcy50cmFjaygidGhpcmRRdWFydGlsZSIpLGUudihrLlZmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpLHRoaXMuVWg9YSl9LHRyYWNrOmZ1bmN0aW9uKGEsYil7aWYoIXRoaXMuQ2Ipe3RyeXtpZih0aGlzLmVjW2FdPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHRoaXMuZWMuaW1wcmVzc2lvbiYmdGhpcy5lYy5jb21wbGV0ZSYmIXRoaXMucmYpe3RoaXMucmY9CiEwO3ZhciBkPXRoaXMuZWMuY29tcGxldGUtdGhpcy5lYy5pbXByZXNzaW9uLGM9InN0YXRzX2hkX3RpbWVkaWZmIjt0aGlzLkgmJihjKz0idnBhaWQiKTs1RTM+ZCYmKDEwPmQmJihkPTEwKSwwPmQmJihkPSJuZWdhdGl2ZSIpLGUudHJhY2soYyxkLCEwKSl9fWNhdGNoKGcpe31pZigibXV0ZSI9PWF8fCJ1bm11dGUiPT1hfHwicGF1c2UiPT1hfHwicmVzdW1lIj09YSl7aWYodGhpc1thKyJIYXNCZWVuVHJhY2tlZCJdKXJldHVybjt0aGlzW2ErIkhhc0JlZW5UcmFja2VkIl09ITB9ZD1bXTt0cnl7ZD10aGlzLnRxKHRoaXMuYy5PYSxhKX1jYXRjaChsKXtkPVtdfWZvcig7ZC5sZW5ndGg7KXRyeXt2YXIgbT1kLnBvcCgpOyJpbXByZXNzaW9uIj09YSYmKHRoaXMuZmU9ITApOyJpbXByZXNzaW9uIj09YSYmdGhpcy5KZC5pbXByZXNzaW9ucyYmZS5rcihtLnVybCx0aGlzLkpkLmltcHJlc3Npb25zKT90aGlzLkhlKG0udXJsLG0udHlwZSx7fSxmdW5jdGlvbihhKXt0cnl7dmFyIGI9YS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1VcmwiKTsKZS52KGsuYW4sdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHthZElkOnRoaXMuSmQuYWRJZCxpbXByZXNzaW9uVVJMOmJ9LHRoaXMuQygpKX1jYXRjaChkKXt9fS5iaW5kKHRoaXMpKTp0aGlzLkhlKG0udXJsLG0udHlwZSl9Y2F0Y2gocSl7fWlmKCFiKXRyeXt0aGlzLmMuT2E9dGhpcy5Ubyh0aGlzLmMuT2EsYSl9Y2F0Y2gocil7fX19LEhlOmZ1bmN0aW9uKGEsYixkLGMsZSl7YSYmInN0cmluZyI9PXR5cGVvZiBhJiZhLmxlbmd0aCYmKGI9dGhpcy5MLnphKGEpLGQmJmIuZG4oZCksY3x8KGM9dGhpcy5vZyksZXx8KGU9dGhpcy5vZyksdGhpcy5mbihhKSx0aGlzLkwuTGEoYixmdW5jdGlvbigpe3RoaXMueGgoYSk7YygpfS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7dGhpcy54aChhKTtlKCl9LmJpbmQodGhpcyksITEsITApKX0sZm46ZnVuY3Rpb24oYSl7dGhpcy5XYlthXT0ib3BlbiJ9LHhoOmZ1bmN0aW9uKGEpe3RoaXMuV2JbYV09ImNsb3NlZCJ9LEhvOmZ1bmN0aW9uKCl7dGhpcy5XYj0Ke319LCR0OmZ1bmN0aW9uKCl7dmFyIGE9MCxiO2ZvcihiIGluIHRoaXMuV2IpdGhpcy5XYi5oYXNPd25Qcm9wZXJ0eShiKSYmIm9wZW4iPT10aGlzLldiW2JdJiZhKys7cmV0dXJuIGF9LHRxOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhLnR5cGU9PWJ9KX0sVG86ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEudHlwZSE9PWJ9KX0sWHU6ZnVuY3Rpb24oKXt0aGlzLnZpZGVvLnN0eWxlJiYodGhpcy52aWRlby5zdHlsZS5jdXJzb3I9InBvaW50ZXIiLHRoaXMudmlkZW8ub25jbGljaz10aGlzLiRoLmJpbmQodGhpcykpfSwkaDpmdW5jdGlvbigpe2UuVGEoKSYmIm5vbmUiPT09dGhpcy5jb250cm9scy5zdHlsZS5kaXNwbGF5P3RoaXMuWWIoKTp0aGlzLmMuT2ImJihlLnYoay5pZyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMudHJhY2soImNsaWNrdHJhY2tpbmciKSwKIXRoaXMueGMmJmUuVGEoKSYmZS50cmFjaygic3RhdHNfaGRfY2xpY2t0aHJvdWdoQmVmb3JlMXN0UXVhcnRpbGUiLGUuYXEoKSwhMCksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT0iX3RvcCI7dGhpcy5MLiRjJiYoYT0iX2JsYW5rIik7dHJ5e3ZhciBiPXdpbmRvdy5vcGVuKCIiLGEpO2IuZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9IjxkaXY+PC9kaXY+IjtiLmRvY3VtZW50LmxvY2F0aW9uLmhyZWY9dGhpcy5jLk9ifWNhdGNoKGQpe3dpbmRvdy5vcGVuKHRoaXMuYy5PYixhKX19LmJpbmQodGhpcyksNTAwKSl9LFpoOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY2FwdGlvbil7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5jb25mWyJjYXB0aW9uLnN0eWxlIl0/YS5zdHlsZT10aGlzLmNvbmZbImNhcHRpb24uc3R5bGUiXTooYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUud2lkdGg9IjEwMCUiLGEuc3R5bGUuYmFja2dyb3VuZD0ibGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLDAsMCwwLjA1KSAwJSxyZ2JhKDAsMCwwLDAuMjUpIDEwMCUpIiwKYS5zdHlsZS5wYWRkaW5nPSIycHgiLGEuc3R5bGUuZm9udEZhbWlseT0iQXJpYWwsIFZlcmRhbmEiLGEuc3R5bGUuZm9udFNpemU9IjlweCIsYS5zdHlsZS5jb2xvcj0iI2ZmZmZmZiIsYS5zdHlsZS50ZXh0QWxpZ249ImNlbnRlciIsYS5zdHlsZS5ib3R0b209IjBweCIsYS5zdHlsZS5ib3hTaXppbmc9ImJvcmRlci1ib3giKTthLmlubmVySFRNTD10aGlzLlhjLnJlcGxhY2UoIlt0aW1lXSIsZS55ZygwKSk7dmFyIGI9dGhpcy5jb25mWyJjYXB0aW9uLmR1cmF0aW9uIl07dGhpcy5MLmFkJiYoYj10aGlzLkwuYWQpO2ImJndpbmRvdy5zZXRUaW1lb3V0KHRoaXMueGIuYmluZCh0aGlzKSwxRTMqYik7dGhpcy5jYXB0aW9uPXRoaXMuZWEuYXBwZW5kQ2hpbGQoYSl9fSx4YjpmdW5jdGlvbigpeyh0aGlzLmNvbmZbImNhcHRpb24uZHVyYXRpb24iXXx8dGhpcy5MLmFkKSYmdGhpcy5jYXB0aW9uJiZ0aGlzLmNhcHRpb24uc3R5bGUmJih0aGlzLmNhcHRpb24uc3R5bGUuZGlzcGxheT0ibm9uZSIpfSwKR2Q6ZnVuY3Rpb24oKXsodGhpcy5jb25mWyJjYXB0aW9uLmR1cmF0aW9uIl18fHRoaXMuTC5hZCkmJnRoaXMuY2FwdGlvbiYmdGhpcy5jYXB0aW9uLnN0eWxlJiYodGhpcy5jYXB0aW9uLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9LHdmOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmNvbnRyb2xzKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuaWQ9dGhpcy5Rbzt0aGlzLmNvbmZbImNvbnRyb2xzLnN0eWxlIl0/ZC5zdHlsZT10aGlzLmNvbmZbImNvbnRyb2xzLnN0eWxlIl06KGQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixkLnN0eWxlLndpZHRoPSIxMDAlIixkLnN0eWxlLmZvbnRGYW1pbHk9IkFyaWFsLCBWZXJkYW5hIixkLnN0eWxlLmNvbG9yPSIjZmZmZmZmIixkLnN0eWxlLnRleHRBbGlnbj0iY2VudGVyIixkLnN0eWxlLmJvdHRvbT0iMHB4IixkLnN0eWxlLnpJbmRleD0iMTAwMDAiKTtkLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsCmZ1bmN0aW9uKCl7dGhpcy5ZYigpO3RoaXMuR2QoKX0uYmluZCh0aGlzKSk7ZC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt0aGlzLnliKCk7dGhpcy54YigpfS5iaW5kKHRoaXMpKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbInBsYXlQYXVzZS5zdHlsZSJdP2Muc3R5bGU9dGhpcy5jb25mWyJwbGF5UGF1c2Uuc3R5bGUiXTooYy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZmxvYXQ6bGVmdCIpLGMuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixjLnN0eWxlWyJmbG9hdCJdPSJsZWZ0IixjLnN0eWxlLmN1cnNvcj0icG9pbnRlciIpO2MuaWQ9dGhpcy5EYjtjLmlubmVySFRNTD10aGlzLmNvbmYucGF1c2VCdXR0b247InZwYWlkIj09YT8oYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5RaC5iaW5kKHRoaXMpKSxiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLlFoLmJpbmQodGhpcykpKTooYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsCnRoaXMuUGguYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5QaC5iaW5kKHRoaXMpKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7dGhpcy5ZYigpO3RoaXMuR2QoKX0uYmluZCh0aGlzKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt0aGlzLnliKCk7dGhpcy54YigpfS5iaW5kKHRoaXMpKTt2YXIgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbIm11dGUuc3R5bGUiXT9nLnN0eWxlPXRoaXMuY29uZlsibXV0ZS5zdHlsZSJdOihnLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJmbG9hdDpyaWdodCIpLGcuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixnLnN0eWxlWyJmbG9hdCJdPSJyaWdodCIsZy5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTtnLmlkPXRoaXMuQmI7Zy5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b247InZwYWlkIj09YT9nLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwKdGhpcy5CdS5iaW5kKHRoaXMpKTpnLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLkF1LmJpbmQodGhpcykpO2cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe3RoaXMuWWIoKTt0aGlzLkdkKCl9LmJpbmQodGhpcykpO2cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7dGhpcy55YigpO3RoaXMueGIoKX0uYmluZCh0aGlzKSk7dmFyIGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5jb25mWyJza2lwLnN0eWxlIl0/bC5zdHlsZT10aGlzLmNvbmZbInNraXAuc3R5bGUiXToobC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwicG9zaXRpb246YWJzb2x1dGU7dG9wOi01MHB4O3JpZ2h0OjBweCIpLGwuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixsLnN0eWxlLnRvcD0iLTUwcHgiLGwuc3R5bGUucmlnaHQ9IjBweCIsbC5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTtsLmlkPXRoaXMuR2g7bC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLApmdW5jdGlvbigpe3ZhciBhPWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpO2EmJmFbMF0mJihhWzBdLnN0eWxlLm9wYWNpdHk9MSl9KTtsLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IixmdW5jdGlvbigpe3ZhciBhPWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpO2EmJmFbMF0mJihhWzBdLnN0eWxlLm9wYWNpdHk9LjYpfSk7bC5pbm5lckhUTUw9IiI7ZC5hcHBlbmRDaGlsZChjKTt0aGlzLmMuaGYmJmQuYXBwZW5kQ2hpbGQobCk7ZC5hcHBlbmRDaGlsZChnKTtkLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2UuVGEoKXx8KHRoaXMuZWEuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe3RoaXMuWWIoKTt0aGlzLkdkKCl9LmJpbmQodGhpcykpLHRoaXMuZWEuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7dGhpcy55YigpO3RoaXMueGIoKX0uYmluZCh0aGlzKSkpO3RoaXMuY29udHJvbHM9dGhpcy5lYS5hcHBlbmRDaGlsZChkKTsKdGhpcy5jb25mWyJyZXN1bWVDb250cm9sLnN0eWxlIl0/Yi5zdHlsZT10aGlzLmNvbmZbInJlc3VtZUNvbnRyb2wuc3R5bGUiXTooYi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGIuc3R5bGUud2lkdGg9IjEwMCUiLGIuc3R5bGUuZm9udEZhbWlseT0iQXJpYWwsIFZlcmRhbmEiLGIuc3R5bGUuY29sb3I9IiNmZmZmZmYiLGIuc3R5bGUudGV4dEFsaWduPSJjZW50ZXIiLGIuc3R5bGUuYm90dG9tPSIwcHgiLGIuc3R5bGUuekluZGV4PSIxMDAwMCIsYi5zdHlsZS5kaXNwbGF5PSJub25lIixkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpLGQub25lcnJvcj1mdW5jdGlvbigpe3RoaXMud2EmJih0aGlzLndhLnN0eWxlLmJhY2tncm91bmQ9InVybCgnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9iaWdwbGF5MTkwNjA2LnBuZycpIG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIil9LmJpbmQodGhpcyksZC5zcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSGdBQUFCNENBWUFBQUE1WkRiU0FBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeWhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVOaTFqTVRRMUlEYzVMakUyTXpRNU9Td2dNakF4T0M4d09DOHhNeTB4TmpvME1Eb3lNaUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01Ua2dLRTFoWTJsdWRHOXphQ2tpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2T0Rnd01VWTVOa1kzUmpsQ01URkZPVGt3UmpnNVJUZ3pSRFU0T0RRME1qVWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZPRGd3TVVZNU56QTNSamxDTVRGRk9Ua3dSamc1UlRnelJEVTRPRFEwTWpVaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzRPREF4UmprMlJEZEdPVUl4TVVVNU9UQkdPRGxGT0RORU5UZzRORFF5TlNJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvNE9EQXhSamsyUlRkR09VSXhNVVU1T1RCR09EbEZPRE5FTlRnNE5EUXlOU0l2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHZWN29SSUFBQXlyU1VSQlZIamE3RjBKYkZUWEZiMkRiY0JBS1FHTXpXNldRRnBTS2lyV1FnZ3BVSUhiaEpLMHFnMUdrQWdvUXFsRTFRcXpTRWhJN0dEUzRyS0pGZ3pZMkdyQllJc0NqVkFOaENXaHhSVENXb1BManNHQU1hRUdZd3k5NTgzNzFqRE1qR2ZHZitiL1AvOGQ2V2p3T0JuL2Q4KzhlOSs5YjNQMDd0MmI5SVRENGZENXM3ZjNkRUEwZjI0YmZ1M0tiTXVNWStMbk41ak5tQTBsWHpDcm1OWE1TbVk1OHk2empIbWJXZkx5NVV2OC9GenZCK1RQcmZNOVQvOU52WXhDMXNWYlRIdzdCekM3NDk5c0hJamF0SjZmK3o4cDl0Zk1ZdVpYek5QTUMxWTBrcFVFUnE4Y3hoekJITXpzR2FLLzAxUXkwZTM5aTh3anpQM01BN0szSzRIcmlRVG0rOHlmTWQ5anhocjRMRDBsUDJFK1lSWXk4NWtGekZLekd0QmgwaGljeEp6QS9JRFp4T1Jmd2tvcGNoYnpiMmFMd1ExTVpDajB6c25NSW1tb1pBdUlTL0laOGF5NzViTlBOdGpUbUU1Z0dHTW1ScS9NRGN3K0ZoNzQ5WkZ0S0pGdGlyVzd3SjlLWXl5VjhUWlNrQ0RiVkNMYmFEdUJrNlE3eTRnd1lUMEpuU0hibW1TSFVUUWFuTTREaVhGa0wvU1I0NHB0ek4rR2M5UWR6aDQ4aVhtT2FUZHhYVEZPMm1CU0pBbjhMZVpXNWlaeWxnM3RqamVrTGJaSzIxamFSUTltZDV6TnI1MlZycThobGZtT2ZEMXN4Ujc4Sy9uZ1NsenZnRzIra0xheWxNQ2ZNZGNwL2Z6R09ta3pTd2k4blRsRGFSWXdaa2pibVRZR1J6SDNjOHdkcHJRS0doK1JjNlpxT0xQR1REMFlFK25IeURtZHAxQS92Q3R0MlZDWEhsemYyUXVIdzRHZWkzblN2a29iM2RCUDJuUWc2MU5qZEE4dVZPS0dCSDJsYlEyTndYbjhEWHRIYVJFeXdMWjV6QStONk1HL1o0NVZHb1FjWTZXdGd4djV0bW5USnBpNGkyVXJpNVR0dzRhQnpKdnNMWXZDNGFLL3ozL296OHJtWVFjV0VweGduZ3lsaThiUS9lL0sxb1poYjZEcFU2QUNZejR6WHRuWk1NUkxEVUlpY0FvNUt5MEt4dUlqcVlXdUFuK2J1Vm5aMWpUWUxEWFJUV0I4WUl5eXEya1E0MitIODBkZzdDZ1lvMnhxT295UjJ0UmI0STFHdGlJcUtvb2VQWHBFang4L3BnWU5HaWhaQTlRbUtpNHV6dGZ2c2RJZzFjZ1dWRlZWVWRldVhlbjU4K2RVWEZ4TUxWcTBFRUxydmNYRG9taEJ6aFdhSjRMcHdaZ2xXbVowQzY1ZXZVb1RKMDZrL1B4OEdqVnFGRjI2ZElsdTNib2xSQTdSUG1PcllRblRFWXpBdjJFMk4vcnBhMnBxcUtLaWdoSVRFeWt2TDQrMmJ0MUszYnAxbzNQbnp0SERodytGQzFlOTJQc0tHbTh1R3NKam9YWmpvNS8rd1lNSE5HTEVDQm80Y0tENHVWZXZYcFNhbWtyTm1qV2preWRQMHVYTGw4Vy9HelpzU0M5ZXZMQ3J5RERPY3VaTGYzdnd4LzdtV1VZZ05qYVcwdExTcUxDd2tLWk9uVXJsNWVYQ2RTTXUyM1FnQnEwbUJlS2kwNnpRcXM2ZE85UHExYXRwOSs3ZE5IcjBhTkdiYlJ5ZjAvd1ZlQ2p6VFN1MWJOQ2dRYlJqeHc3YXVIR2ppTTluejU2MVkzeCtVMnIzcXNCd2EyNzgxTU43aHRKZmpCOC9uZzRkT2tSTGxpd1I0cDQ1YzRhZVBuMWFtMWJaZ0s5cDU5NkRNV3EyOUNxTnhvMGIwOHlaTStuZ3dZTTBiZG8wdW52M3JwM2k4MWozek1lOXhUOG5heCt0VkF1a1ZXdldyS0c5ZS9mUzhPSERSWkhFQnZFNVdtcm8xVVVubTlYOUJJc2hRNGFJUWRqbXpadHI0ek5HM1ZwdmprQTNuZUxOUldOYjQvQkkvV29qUGg4NWNvUVdMRmhBMGRIUlFtZ3RQa2NZM3BQRmo5ZGM5SS9KWEtmdTZBNFVRK2JPblNzR1l0T25UNmQ3OSs2SitJd0NTUVFKSGVYYVVkMEZ0Z1VRbjVFLzc5bXpKMUx6NTFHZUJIN1hicFVCeE9kZHUzWlJWbGFXbUxHS29QcjJqOXdGeGdtdDNjaW1TRTVPcHNPSEQ5T2lSWXNvSmlhR3pwOC9MNllwTGV5MmEvWFVXakNBYkE3VXQyZlBuaTN5NXlsVHBvajRYRkpTWXVYOGVZQ3J3RDhnaGRyNHZHN2RPcEZhalJ3NTBzcnh1WTlySHZ5MldmTTZvNllBaHc0ZFNnVUZCYUsrcmNWbkxYKzJTRDc4dHBZSDQydlpVL1ZkejVnd1lZS0l6NHNYTHhhREx3aU4rR3lCZ1JnMGRVRGdkc3lPU2tyZjhYbldyRmtpUG1QK3VheXN6QXIxYldqYURpNDZrUmx0ZHBkakJxRFV1WDc5ZXRxM2IxOXRmZnZtelp1MXNkbGtOb09taVZvUFZnZ3dmMGFSWk11V0xXSlFkdUhDQlpFL203QTN0OE1UeFNuSmdnUFdoaDAvZnB6bXo1OHY2dHNRMm1UeE9RNEN0MVJTQlk5R2pSclJ2SG56UkgwYjg4OWFmZHNrOGJrbFluQXJGWHQxS0IxeEtyVjI3VnJodXJFSzFDVHh1UlcrWXMxVlA5UTNmNGJJMmRuWllsQjI4ZUpGSSt2YnpTRndJeVdML2hnM2JweVlmMTY0Y0tHb2J5TStQM3YyTE54Q040TEFhbHRvaU5Da1NST2FNMmVPS0pSTW5qeFp2SWRGQm1GRURBUitvYVFJTFpCS2JkaXdRU3cydUgvL3Z0aU9FeTVna1ZhVmtpQzBRSy9GQW9QdDI3Zlg3bzRNRTZvaDhETWxRZWlRbTV0THk1Y3ZwNktpSXNLWlpLMWF0UkpiWWNPRUtwU3pucGpkU0ZiY0M2eE5VR0JFM2JScFUrclJvNGRvUjNWMWRUZ2Y0eHYwNEllcW4rbUhhOWV1MGRLbFM4VXkzY3JLU3BFZm84cGwwTFJuQlFRdVU3TFVIMGlCVnF4WUlZb2ROMjdjb0E0ZE9naGlRR1hndHRaN0VQaU9rcWQrd0tiMDlQUjBPblhxRkxWdTNWcTRZNGdhenRHeUY1UWlCdDlTRWdVZloxSEl3UFFoY3Q3dTNidUw5MDBncklaYjZNRlh5SGxmZmJTU3pEOWN1WEpGREtBd1hZZ1VxRXVYTGtiR1dXK0FwbGNoNmsyTURjaTUxRktoamppN2N1VktXclZxRmQyK2ZWdkVXUFJjZytPc04xeUh0bHJHL1I4bG4yOWc4Z0RuaEdCcExZUkduTVZVb1luY3NUc3VJc1BVTHVVNFN5N2JIVlFlN0RtZnhkNWp4Rms4VHhpTEZjRUNtdGJHM1JPcWo3NEtuTStseGRrblQ1NkllcklKNDZ3dm5IQVYrQ3NscVJNWU5DSE9vbmFNQmUvdDI3YzNjNXoxaGVPdUFwZXcyN2xNTnQ2ZkJHemJ0azFVb1U2ZlBrMHRXN1lVN2hpaVdzQWR1NlBFNFhCY0ZnSzd4TGVEZGhYNDZOR2pJcDlGbk1YQUNTc3hZQmNURDZEcXdnRk5WOWZjOTNQbUozWVM5dnIxNnlMT2J0cTBTYmhtbkx0bHNUanJEWjlyLzNEdHdYZ1RYMW5UN2NuUWV4UU5sN3RzMlRMS3lNaWcwdEpTU2toSUVETStKaWt2MWhjMXJnSzd6anlYa3c1WHFaa2RPVGs1MUxkdlg3RzZBcU5qdUdPa1B4QTJRbzRvTHBSYXZ1YWlnVnptaUVnVTFyVnVqRVZ3S0MrS3I3djFleXg1MEpDOENmeFhjdDVHSFRGMWFlU3pPRmtuTXpOVHVPWk9uVHBGU3B6MUdIMmtobDRGZnNUY3lmeUYxVnVxemMraWJuem56cDNhT0d2QmZEWVE3Sklha3FjWXJPR1BWbThsNnNiOSt2VVRjUmFqWTljNEcrSEljSC9Ea3lzK3hDd21pNTA0Q3h3N2RreTRZK1N6aUxOWUxtUHhmRFlRRkV2dDZoUVlXTXI4azFWYWhuVlFPQ0ZIcXh0SGVKejFCby8zYTNpNzRqMlRtVTRtUHZVZHdGWk5iWDRXK1d4OGZEeTFiZHMyVXZMWlFGREIzT1RwRncxOEpNc0xUSjBMNU9aUy8vNzl4ZFlRYmZWaWhPV3pnV0MrMU14dmdZSFAzRWRrUnNIVjFXSkRWMUpTRXFXa3BJZ0R5NURQWW1MQVpqM1dGVmoyN1BXR2NGLzVMaXcyVStiRmhxSmp4NDVpTkR4anhneHhyQkVXaitNOUc4WlpUNWhGSG01YjBlREFnS1FPL0plWmFOVFR3LzNpVGdaczJzS3NENjRCd2pVNk51NnhycmhhbHpiK0NJenpoLzloVkF2UVN6R0FBakNJUW85VjE5clZBb2VPK3B3LzhHZWJHejRnMzZnV29MeUl4ZVNnVFFkUTNwQlBma3dPK2J1UGNTS3pXdG5VTklBV2svenlnSDcyaUFvcDhqWmxXMU5nRXZtNWFUQ1FuY2c1ekR4bFc4T1JGMGhIQzNTcmVRcXB6V3BHNG83VXdQOUJhb0IvNEJtNzlOSDhXcVJzYlFpU0hBNUhRQ2N5UkRWdkh2QXhXY2hac0NQeGZXWHZzR0lxT2EvOHBWQUxUTElINDU2bGdjcnVZY0VmbUl1QytSL3JjOXdMYnAzZXFXd2ZjdXdrSHpkOGgxSmc0RVBtRjBxRGtPR3d0REVaSlRDQVV1YS9sQmE2QTV2SGh0WDNRL1FRR0ZYL3djeC9LazEwQTJ6NVEvSXl4eHR1Z1VYNnhCeEV6djFOQ3ZYRFFXbExYUTZvQzNZVTdRbWNJci9NNU5mdk1uc3BuWUxDWDVnLzVWeFh0eG1WVUJ5YStFdHlydWRTQ0F6cDBuYTZJbFNuWXY1T0p1WUsvbUdxdEpudUNPVVdsUTNzc3I4bTUxNlp6a3BEajhDS2pHUjJ5VitHNmcrRStseGJQUGozbU5sS3k5ZVFMVzN6WlNqL1NEZ09MdjZHbWNyOG1GeTJOZG9ZNWRJV3FkSTJaSFdCTldUSzBYV09qY1hOa1RiSUROY2YxRE5OOGdlUE9TN3ZJR2ZsNnp2TXRqWVI5dDlNWE5xd2hPUHRZL2RmdWw5YnErYzF0a2JkM0lScEw5eFovR3R5VGo5R0trcGxHL3RRRUZOOVZoWllBN2FxNG1TZnRBZ1R1bFMycVJzWnZCM1hnUU0xOVlMN0FqNVBDL3A4TFBLTDVkK041OWZwOGh0dlJaeGtybVVYbThXdkhxOUs4T1IrUSttaXpTU3c2KzkrSWtlWkh6Q2JtRnpVU21ZQk0wdHp3NzRFVWdLL2lnUXA4aGh5VGt2R21rUlU5RTV0UTBDQmUzaFJBdnN2c0NzdzRoNUd6bE9BTUQwWjdtdnBjVHp2RWVaKzVnSG03VUJFVkFKVHdBZWV2Y1hzVGM1MVlUaExIMVdoTmpxNGRMamN1MHlVV1MrUnM5SjBtbm5CYjZNcWdYVVIyQjNSVXVDdXNyZmo0dXQ0Wmd0bU0zSmV3cW5kMDRpdEg3anhEVGtwZGdoZ3ZYR1o3SlVsVXVDZ1R5QTFrOEQvRjJBQUU4YkJqOGQ0ZEM0QUFBQUFTVVZPUks1Q1lJST0iLApiLnN0eWxlLmJhY2tncm91bmQ9InVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFIZ0FBQUI0Q0FZQUFBQTVaRGJTQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5aHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU5pMWpNVFExSURjNUxqRTJNelE1T1N3Z01qQXhPQzh3T0M4eE15MHhOam8wTURveU1pQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTkRJREl3TVRrZ0tFMWhZMmx1ZEc5emFDa2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZPRGd3TVVZNU5rWTNSamxDTVRGRk9Ua3dSamc1UlRnelJEVTRPRFEwTWpVaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk9EZ3dNVVk1TnpBM1JqbENNVEZGT1Rrd1JqZzVSVGd6UkRVNE9EUTBNalVpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvNE9EQXhSamsyUkRkR09VSXhNVVU1T1RCR09EbEZPRE5FTlRnNE5EUXlOU0lnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG80T0RBeFJqazJSVGRHT1VJeE1VVTVPVEJHT0RsRk9ETkVOVGc0TkRReU5TSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QdlY3b1JJQUFBeXJTVVJCVkhqYTdGMEpiRlRYRmIyRGJjQkFLUUdNelc2V1FGcFNLaXJXUWdncFVJSGJoSkswcWcxR2tBZ29RcWxFMVFxelNFaEk3R0RTNHJLSkZnelkyR3JCWUlzQ2pWQU5oQ1doeFJUQ1dvUExqc0dBTWFFR1l3eTk1ODM3MWpETWpHZkdmK2IvUC84ZDZXandPQm4vZDgrOGU5KzliM1AwN3QyYjlJVEQ0ZkQ1czdmM2RFQTBmMjRiZnUzS2JNdU1ZK0xuTjVqTm1BMGxYekNybU5YTVNtWTU4eTZ6akhtYldmTHk1VXY4L0Z6dkIrVFByZk05VC85TnZZeEMxc1ZiVEh3N0J6Qzc0OTlzSElqYXRKNmYrejhwOXRmTVl1Wlh6TlBNQzFZMGtwVUVScThjeGh6QkhNenNHYUsvMDFReTBlMzlpOHdqelAzTUE3SzNLNEhyaVFUbSs4eWZNZDlqeGhyNExEMGxQMkUrWVJZeTg1a0Z6Rkt6R3RCaDBoaWN4SnpBL0lEWnhPUmZ3a29wY2hiemIyYUx3UTFNWkNqMHpzbk1JbW1vWkF1SVMvSVo4YXk3NWJOUE50alRtRTVnR0dNbVJxL01EY3crRmg3NDlaRnRLSkZ0aXJXN3dKOUtZeXlWOFRaU2tDRGJWQ0xiYUR1Qms2UTd5NGd3WVQwSm5TSGJtbVNIVVRRYW5NNERpWEZrTC9TUjQ0cHR6TitHYzlRZHpoNDhpWG1PYVRkeFhURk8ybUJTSkFuOExlWlc1aVp5bGczdGpqZWtMYlpLMjFqYVJROW1kNXpOcjUyVnJxOGhsZm1PZkQxc3hSNzhLL25nU2x6dmdHMitrTGF5bE1DZk1kY3AvZnpHT21relN3aThuVGxEYVJZd1pramJtVFlHUnpIM2M4d2RwclFLR2grUmM2WnFPTFBHVEQwWUUrbkh5RG1kcDFBL3ZDdHQyVkNYSGx6ZjJRdUh3NEdlaTNuU3Zrb2IzZEJQMm5RZzYxTmpkQTh1Vk9LR0JIMmxiUTJOd1huOERYdEhhUkV5d0xaNXpBK042TUcvWjQ1VkdvUWNZNld0Z3h2NXRtblRKcGk0aTJVcmk1VHR3NGFCekp2c0xZdkM0YUsvejMvb3o4cm1ZUWNXRXB4Z25neWxpOGJRL2UvSzFvWmhiNkRwVTZBQ1l6NHpYdG5aTU1STERVSWljQW81S3kwS3h1SWpxWVd1QW4rYnVWbloxalRZTERYUlRXQjhZSXl5cTJrUTQyK0g4MGRnN0NnWW8yeHFPb3lSMnRSYjRJMUd0aUlxS29vZVBYcEVqeDgvcGdZTkdpaFpBOVFtS2k0dXp0ZnZzZElnMWNnV1ZGVlZVZGV1WGVuNTgrZFVYRnhNTFZxMEVFTHJ2Y1hEb21oQnpoV2FKNExwd1pnbFdtWjBDNjVldlVvVEowNmsvUHg4R2pWcUZGMjZkSWx1M2JvbFJBN1JQbU9yWVFuVEVZekF2MkUyTi9ycGEycHFxS0tpZ2hJVEV5a3ZMNCsyYnQxSzNicDFvM1BuenRIRGh3K0ZDMWU5MlBzS0dtOHVHc0pqb1haam81Lyt3WU1ITkdMRUNCbzRjS0Q0dVZldlhwU2Fta3JObWpXamt5ZFAwdVhMbDhXL0d6WnNTQzlldkxDcnlERE9jdVpMZjN2d3gvN21XVVlnTmphVzB0TFNxTEN3a0taT25Vcmw1ZVhDZFNNdTIzUWdCcTBtQmVLaTA2elFxczZkTzlQcTFhdHA5KzdkTkhyMGFOR2JiUnlmMC93VmVDanpUU3UxYk5DZ1FiUmp4dzdhdUhHamlNOW56NTYxWTN4K1UycjNxc0J3YTI3ODFNTjdodEpmakI4L25nNGRPa1JMbGl3UjRwNDVjNGFlUG4xYW0xYlpnSzlwNTk2RE1XcTI5Q3FOeG8wYjA4eVpNK25nd1lNMGJkbzB1bnYzcnAzaTgxajN6TWU5eFQ4bmF4K3RWQXVrVld2V3JLRzllL2ZTOE9IRFJaSEVCdkU1V21ybzFVVW5tOVg5QklzaFE0YUlRZGptelp0cjR6TkczVnB2amtBM25lTE5SV05iNC9CSS9Xb2pQaDg1Y29RV0xGaEEwZEhSUW1ndFBrY1kzcFBGajlkYzlJL0pYS2Z1NkE0VVErYk9uU3NHWXRPblQ2ZDc5KzZKK0l3Q1NRUUpIZVhhVWQwRnRnVVFuNUUvNzltekoxTHo1MUdlQkg3WGJwVUJ4T2RkdTNaUlZsYVdtTEdLb1ByMmo5d0Z4Z210M2NpbVNFNU9wc09IRDlPaVJZc29KaWFHenA4L0w2WXBMZXkyYS9YVVdqQ0FiQTdVdDJmUG5pM3k1eWxUcG9qNFhGSlNZdVg4ZVlDcndEOGdoZHI0dkc3ZE9wRmFqUnc1MHNyeHVZOXJIdnkyV2ZNNm82WUFodzRkU2dVRkJhSytyY1ZuTFgrMlNENzh0cFlINDJ2WlUvVmR6NWd3WVlLSXo0c1hMeGFETHdpTitHeUJnUmcwZFVEZ2RzeU9Ta3JmOFhuV3JGa2lQbVArdWF5c3pBcjFiV2phRGk0NmtSbHRkcGRqQnFEVXVYNzlldHEzYjE5dGZmdm16WnUxc2Rsa05vT21pVm9QVmdnd2YwYVJaTXVXTFdKUWR1SENCWkUvbTdBM3Q4TVR4U25KZ2dQV2hoMC9mcHptejU4djZ0c1EybVR4T1E0Q3QxUlNCWTlHalJyUnZIbnpSSDBiODg5YWZkc2s4YmtsWW5BckZYdDFLQjF4S3JWMjdWcmh1ckVLMUNUeHVSVytZczFWUDlRM2Y0YkkyZG5aWWxCMjhlSkZJK3ZielNGd0l5V0wvaGczYnB5WWYxNjRjS0dvYnlNK1AzdjJMTnhDTjRMQWFsdG9pTkNrU1JPYU0yZU9LSlJNbmp4WnZJZEZCbUZFREFSK29hUUlMWkJLYmRpd1FTdzJ1SC8vdnRpT0V5NWdrVmFWa2lDMFFLL0ZBb1B0MjdmWDdvNE1FNm9oOERNbFFlaVFtNXRMeTVjdnA2S2lJc0taWksxYXRSSmJZY09FS3BTem5wamRTRmJjQzZ4TlVHQkUzYlJwVStyUm80ZG9SM1YxZFRnZjR4djA0SWVxbittSGE5ZXUwZEtsUzhVeTNjcktTcEVmbzhwbDBMUm5CUVF1VTdMVUgwaUJWcXhZSVlvZE4yN2NvQTRkT2doaVFHWGd0dFo3RVBpT2txZCt3S2IwOVBSME9uWHFGTFZ1M1ZxNFk0Z2F6dEd5RjVRaUJ0OVNFZ1VmWjFISXdQUWhjdDd1M2J1TDkwMGdySVpiNk1GWHlIbGZmYlNTekQ5Y3VYSkZES0F3WFlnVXFFdVhMa2JHV1crQXBsY2g2azJNRGNpNTFGS2hqamk3Y3VWS1dyVnFGZDIrZlZ2RVdQUmNnK09zTjF5SHRsckcvUjhsbjI5ZzhnRG5oR0JwTFlSR25NVlVvWW5jc1RzdUlzUFVMdVU0U3k3YkhWUWU3RG1meGQ1anhGazhUeGlMRmNFQ210YkczUk9xajc0S25NK2x4ZGtuVDU2SWVySUo0Nnd2bkhBVitDc2xxUk1ZTkNIT29uYU1CZS90MjdjM2M1ejFoZU91QXBldzI3bE1OdDZmQkd6YnRrMVVvVTZmUGswdFc3WVU3aGlpV3NBZHU2UEU0WEJjRmdLN3hMZURkaFg0Nk5HaklwOUZuTVhBQ1NzeFlCY1RENkRxd2dGTlY5ZmM5M1BtSjNZUzl2cjE2eUxPYnRxMFNiaG1uTHRsc1RqckRaOXIvM0R0d1hnVFgxblQ3Y25RZXhRTmw3dHMyVExLeU1pZzB0SlNTa2hJRURNK0ppa3YxaGMxcmdLN3pqeVhrdzVYcVprZE9UazUxTGR2WDdHNkFxTmp1R09rUHhBMlFvNG9McFJhdnVhaWdWem1pRWdVMXJWdWpFVndLQytLcjd2MWV5eDUwSkM4Q2Z4WGN0NUdIVEYxYWVTek9Ga25Nek5UdU9aT25UcEZTcHoxR0gya2hsNEZmc1RjeWZ5RjFWdXF6YytpYm56bnpwM2FPR3ZCZkRZUTdKSWFrcWNZck9HUFZtOGw2c2I5K3ZVVGNSYWpZOWM0RytISWNIL0RreXMreEN3bWk1MDRDeHc3ZGt5NFkrU3ppTE5ZTG1QeGZEWVFGRXZ0NmhRWVdNcjhrMVZhaG5WUU9DRkhxeHRIZUp6MUJvLzNhM2k3NGoyVG1VNG1QdlVkd0ZaTmJYNFcrV3g4ZkR5MWJkczJVdkxaUUZEQjNPVHBGdzE4Sk1zTFRKMEw1T1pTLy83OXhkWVFiZlZpaE9XemdXQysxTXh2Z1lIUDNFZGtSc0hWMVdKRFYxSlNFcVdrcElnRHk1RFBZbUxBWmozV0ZWajI3UFdHY0YvNUxpdzJVK2JGaHFKang0NWlORHhqeGd4eHJCRVdqK005RzhaWlQ1aEZIbTViMGVEQWdLUU8vSmVaYU5UVHcvM2lUZ1pzMnNLc0Q2NEJ3alU2TnU2eHJyaGFsemIrQ0l6emgvOWhWQXZRU3pHQUFqQ0lRbzlWMTlyVkFvZU8rcHcvOEdlYkd6NGczNmdXb0x5SXhlU2dUUWRRM3BCUGZrd08rYnVQY1NLeld0blVOSUFXay96eWdINzJpQW9wOGpabFcxTmdFdm01YVRDUW5jZzV6RHhsVzhPUkYwaEhDM1NyZVFxcHpXcEc0bzdVd1A5QmFvQi80Qm03OU5IOFdxUnNiUWlTSEE1SFFDY3lSRFZ2SHZBeFdjaFpzQ1B4ZldYdnNHSXFPYS84cFZBTFRMSUg0NTZsZ2NydVljRWZtSXVDK1IvcmM5d0xicDNlcVd3ZmN1d2tIemQ4aDFKZzRFUG1GMHFEa09Hd3RERVpKVENBVXVhL2xCYTZBNXZIaHRYM1EvUVFHRlgvd2N4L0trMTBBMno1US9JeXh4dHVnVVg2eEJ4RXp2MU5DdlhEUVdsTFhRNm9DM1lVN1FtY0lyL001TmZ2TW5zcG5ZTENYNWcvNVZ4WHR4bVZVQnlhK0V0eXJ1ZFNDQXpwMG5hNklsU25ZdjVPSnVZSy9tR3F0Sm51Q09VV2xRM3NzcjhtNTE2WnprcERqOENLakdSMnlWK0c2ZytFK2x4YlBQajNtTmxLeTllUUxXM3paU2ovU0RnT0x2NkdtY3I4bUZ5Mk5kb1k1ZElXcWRJMlpIV0JOV1RLMFhXT2pjWE5rVGJJRE5jZjFETk44Z2VQT1M3dklHZmw2enZNdGpZUjl0OU1YTnF3aE9QdFkvZGZ1bDlicStjMXRrYmQzSVJwTDl4Wi9HdHlUajlHS2twbEcvdFFFRk45VmhaWUE3YXE0bVNmdEFnVHVsUzJxUnNadkIzWGdRTTE5WUw3QWo1UEMvcDhMUEtMNWQrTjU5ZnA4aHR2Ulp4a3JtVVhtOFd2SHE5SzhPUitRK21pelNTdzYrOStJa2VaSHpDYm1GelVTbVlCTTB0enc3NEVVZ0svaWdRcDhoaHlUa3ZHbWtSVTlFNXRRMENCZTNoUkF2c3ZzQ3N3NGg1R3psT0FNRDBaN212cGNUenZFZVorNWdIbTdVQkVWQUpUd0FlZXZjWHNUYzUxWVRoTEgxV2hOanE0ZExqY3UweVVXUytSczlKMG1ubkJiNk1xZ1hVUjJCM1JVdUN1c3JmajR1dDRaZ3RtTTNKZXdxbmQwNGl0SDdqeERUa3BkZ2hndlhHWjdKVWxVdUNnVHlBMWs4RC9GMkFBRThiQmo4ZDRkQzRBQUFBQVNVVk9SSzVDWUlJPScpIG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIiwKYi5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTt0aGlzLndhPXRoaXMuZWEuYXBwZW5kQ2hpbGQoYik7dGhpcy5iLllmKGZ1bmN0aW9uKGEpe3RoaXMud2Euc3R5bGUuaGVpZ2h0PWEuaGVpZ2h0KyJweCJ9LmJpbmQodGhpcykpOyJ2cGFpZCIhPWEmJnRoaXMuYi5mLnZhJiZ0aGlzLmIuZi52YSgpJiYoZS52KGsuamcsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSx0aGlzLk5lKCkpO3RoaXMueWIoKX19LHliOmZ1bmN0aW9uKCl7dGhpcy5jb250cm9scy5zdHlsZS5kaXNwbGF5PSJub25lIn0sWWI6ZnVuY3Rpb24oKXt0aGlzLndhJiYiYmxvY2siPT10aGlzLndhLnN0eWxlLmRpc3BsYXl8fHRoaXMuQWZ8fCh0aGlzLmNvbnRyb2xzLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9LFBoOmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy5iLkYucGF1c2VkPyh0aGlzLmIuRi5wbGF5KCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uLAp0aGlzLnRyYWNrKCJyZXN1bWUiLCEwKSxlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSk6KHRoaXMuYi5GLnBhdXNlKCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24sdGhpcy50cmFjaygicGF1c2UiLCEwKSxlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnliKCksdGhpcy54YigpKSl9LFFoOmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy5nYz8oZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJwbGF5IiksdGhpcy53YSYmKHRoaXMud2Euc3R5bGUuZGlzcGxheT0ibm9uZSIpLGEmJihhLmlubmVySFRNTD10aGlzLmNvbmYucGF1c2VCdXR0b24pLHRoaXMuZ2M9ITEpOihlLm1hKHRoaXMuSCwiY29udHJvbCIsCiJwYXVzZSIpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnliKCksdGhpcy54YigpKSxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24pLHRoaXMuZ2M9ITApfSx6ZDpmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRGIpO3RoaXMuYi5GLnBhdXNlZHx8KHRoaXMuYi5GLnBhdXNlKCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24sdGhpcy50cmFjaygicGF1c2UiLCEwKSxlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKX0semg6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRiKTt0aGlzLmIuRi5wYXVzZWQmJih0aGlzLmIuRi5wbGF5KCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uLHRoaXMudHJhY2soInJlc3VtZSIsITApLGUudihrLlVjLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSwKdGhpcy5DKCkpKX0sQXU6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkJiKTt0aGlzLmIuRi5tdXRlZD8odGhpcy5iLkYubXV0ZWQ9ITEsYS5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b24sdGhpcy50cmFjaygidW5tdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfdW5tdXRlZCIsInVzZXIiLCEwKSxlLnYoay50Zix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKToodGhpcy5iLkYubXV0ZWQ9ITAsYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJ1c2VyIiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSl9LEJ1OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYik7dGhpcy5wYj8oZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJ1bm11dGUiKSwKdGhpcy5wYj0hMSxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b24pKTooZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJtdXRlIiksdGhpcy5wYj0hMCxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbikpfSxOZTpmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuQmIpO3RoaXMuYi5GLm11dGVkfHwodGhpcy5iLkYubXV0ZWQ9ITAsYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJjb250ZW50IiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSl9LEx1OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYik7dGhpcy5iLkYubXV0ZWQmJih0aGlzLmIuRi5tdXRlZD0hMSxhLmlubmVySFRNTD10aGlzLmNvbmYubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJ1bm11dGUiLAohMCksZS50cmFjaygic3RhdHNfaGRfdW5tdXRlZCIsImNvbnRlbnQiLCEwKSxlLnYoay50Zix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKX0sWGI6ZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5YYik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5YYik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuWGIpO3RoaXMuamR8fHRoaXMuVmN8fCh0aGlzLnZpZGVvLmxvYWQoKSx0aGlzLmtmKCkpfSxoZDpmdW5jdGlvbigpe3ZhciBhPSExLGI9bC5nZXRDb25maWcoKTsic3ZtcHJldmlldyI9PWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZikuYW5jaG9yJiYoYT0hMCxiLmFkRmFsbGJhY2tVUkx8fChiLmFkRmFsbGJhY2tVUkw9Imh0dHBzOi8vaGdjLWNmLWNhY2hlLTEuc3Zvbm0uY29tL3dlbGVjdC54bWwiKSk7ZS51YygpO2lmKChhfHwhdGhpcy5mZSYmCmIuYWRGYWxsYmFja1VSTCkmJiF0aGlzLlFlKXRoaXMuUWU9dGhpcy5maT10aGlzLkFmPSEwLGUudHJhY2soInN0YXRzX3d0X3N0YXJ0IiwiIiwhMCksdGhpcy5mZT0hMCxhPWUuJGYoYi5hZEZhbGxiYWNrVVJMLHRoaXMuTCwhMSx7b25seVVSTDohMH0pLHRoaXMuSWUoYSwhMCwhMSx7aG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3M6ITB9KTtlbHNlIGlmKHRoaXMuamQ9ITAsdGhpcy5zYiYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5zYiksdGhpcy5zYj0hMSksKCJwcmVyb2xsIj09ZS5TYSYmdGhpcy5WY3x8InBvc3Ryb2xsIj09ZS5TYSkmJnRoaXMuY29uZi5wb3N0QWRJZnJhbWVVcmwpaWYoYT10aGlzLmNvbmYucG9zdEFkSWZyYW1lVXJsLCJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoYT1hKGUuU2EpKSwic3RyaW5nIj09dHlwZW9mIGEmJmEpe2ZvcihiPXRoaXMuYi5HO2IuZmlyc3RDaGlsZDspYi5yZW1vdmVDaGlsZChiLmZpcnN0Q2hpbGQpO2IucGFyZW50fHx0aGlzLmIuSmMoKTsKdmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Yy5zZXRBdHRyaWJ1dGUoInNyYyIsYSk7Yy5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Muc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7Yy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAwIG5vbmU7b3V0bGluZTogbm9uZTsiKTtiLmFwcGVuZENoaWxkKGMpO3ZhciBmPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihhKXtpZigiY29udGludWUiPT1hLmRhdGEpe3RoaXMua2QoKTthPU1hdGgucm91bmQoKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWYpLzFFMyk7dmFyIGI9IiI7MTxhJiYoYj0iZ3QxIik7NTxhJiYoYj0iZ3Q1Iik7MTA8YSYmKGI9Imd0MTAiKTsyMDxhJiYoYj0iZ3QyMCIpO2UudHJhY2soInN0YXRzX2hkX3Bvc3RJZnJhbWVDbG9zZWQiLGIsITApfX0uYmluZCh0aGlzKSk7ZS50cmFjaygic3RhdHNfaGRfcG9zdElmcmFtZU9wZW5lZCIsCiIiLCEwKX1lbHNlIHRoaXMua2QoKTtlbHNlIHRoaXMua2QoKX0sa2Q6ZnVuY3Rpb24oYSl7dGhpcy4kdCgpJiYhYT93aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMua2QoITApfS5iaW5kKHRoaXMpLHRoaXMuR3MpOih0aGlzLmxmPSEwLHRoaXMuYi53ZSgpLHRoaXMuYi5wdCgpLHRoaXMuVWI9ITEsZS52KGsuUG8sdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSx0aGlzLnNlKCkueWgoKSl9LHNlOmZ1bmN0aW9uKCl7dmFyIGE9bnVsbDt0aGlzLmImJnRoaXMuYi5mJiYoYT10aGlzLmIuZik7cmV0dXJuIGF9LERlOmZ1bmN0aW9uKCl7dmFyIGE9ITE7dHJ5e25ldyBBY3RpdmVYT2JqZWN0KCJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFzaCIpJiYoYT0hMCl9Y2F0Y2goYil7bmF2aWdhdG9yLm1pbWVUeXBlcyYmdm9pZCAwIT1uYXZpZ2F0b3IubWltZVR5cGVzWyJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCJdJiZuYXZpZ2F0b3IubWltZVR5cGVzWyJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCJdLmVuYWJsZWRQbHVnaW4mJgooYT0hMCl9cmV0dXJuIGF9LGFnOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5IYSgibWluVmlzIik7YSYmKGUuQmUodGhpcy52aWRlbyxhKT90aGlzLnpoKCk6dGhpcy56ZCgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5hZygpfS5iaW5kKHRoaXMpLDEwMCkpfSxCOmZ1bmN0aW9uKCl7dmFyIGE9e307dGhpcy5jJiYoYS5jbGlja3Rocm91Z2g9dGhpcy5jLk9iLGEuZHVyYXRpb249dGhpcy5jLmR1cmF0aW9uLGEuYWRQb2Q9dGhpcy5jLnJiLHRoaXMudmlkZW8mJnRoaXMudmlkZW8uY3VycmVudFRpbWUmJihhLmN1cnJlbnRUaW1lPXRoaXMudmlkZW8uY3VycmVudFRpbWUpLHRoaXMubGMmJjA8dGhpcy5sYy5sZW5ndGgmJihhLmFkSWRzPXRoaXMubGMpKTt0aGlzLnZpZGVvJiZ0aGlzLnZpZGVvLmR1cmF0aW9uJiYoYS52aWRlb19kdXJhdGlvbj10aGlzLnZpZGVvLmR1cmF0aW9uKTtyZXR1cm4gYX0sQzpmdW5jdGlvbigpe3ZhciBhPXt9O2EuYWRzZXNzaW9uX2lkPXRoaXMuYm8rCiItIit0aGlzLmpmO3RoaXMuYyYmdGhpcy5jLkRnJiYoYS5ob21hZEltcHJlc3Npb25BZElkPXRoaXMuYy5EZygpKTtyZXR1cm4gYX0sb2c6ZnVuY3Rpb24oKXt9fX0pKHRoaXMpO3ZhciBRYT1jLllqfHxRYTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy55cz10aGlzLmFbMV07dGhpcy5HcD10aGlzLmFbNV07dGhpcy5qPXRoaXMuYVs4XX1jLk5pPWI7Yi5wcm90b3R5cGU9e3hzOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy55czp0aGlzLkZwKGEpfSxGcDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuR3A6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuajphfX19KShjKTt2YXIgUmE9Yy5OaXx8UmEsd2M9bmV3IFJhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwKIlooVFREWlRSUiIpO3dpbmRvdy5EPXdjLnhzKDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsYixjLGQpe3RoaXMub3B0aW9ucz1kfHx7fTtoPWM7dGhpcy5wYXJlbnQ9YTt0aGlzLnVybD1iO3RoaXMuRWE9bnVsbDt0aGlzLlc9W107dGhpcy5VPW51bGw7dGhpcy5rYz10aGlzLm1jPSExO3RoaXMuc2E9IiI7dGhpcy56Zj0hMTtkJiZkLmVtcHR5P3RoaXMuTXIoJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+PFZBU1QgdmVyc2lvbj0iMy4wIj48L1ZBU1Q+Jyk6dGhpcy5sb2FkKCl9dmFyIGE9MCxoLGQ9W107Yy52bT1iO2IucHJvdG90eXBlPXtsb2FkOmZ1bmN0aW9uKCl7dmFyIGE9ZS51YygpLGI7Yj1lLmxhKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpO3ZhciBjPSIiO2IucXVlcnlLZXkmJihjPWIucXVlcnlLZXkuaHZwKTtjJiYodGhpcy5vcHRpb25zLnZwYWlkPSEwKTtiPXRoaXMub3B0aW9ucy5rZWVwVVJMP25ldyB5KHRoaXMudXJsKTpsLnphKGwuS2QodGhpcy51cmwpLAohMSx0aGlzLm9wdGlvbnMudXNlQWRUYWdQYXJhbWV0ZXIpO2lmKHRoaXMub3B0aW9ucy52cGFpZCYmIWUuVGEoKSYmKGEuaXNDaHJvbWV8fGEuaXNGaXJlZm94KSYmIWEuaXNFZGdlfHxjKXthPWUubGcodGhpcy51cmwpO2F8fChhPXRoaXMudXJsKTtpZigwPD1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoIm1hcnRoYXN0ZXdhcnQiKSYmdGhpcy5vcHRpb25zLkFkU3lzdGVtJiYiR0RGUCI9PXRoaXMub3B0aW9ucy5BZFN5c3RlbXx8ImFwcHNwb3QiPT1jfHwwPGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZigiZmFuZG9tLmNvbSIpJiYwPGEuaW5kZXhPZigicHViYWRzLmcuZG91YmxlY2xpY2submV0LyIpKTA8YS5pbmRleE9mKCJnb29nbGVhZHMuZy5kb3VibGVjbGljay5uZXQvcGFnZWFkL2FkcyIpfHwiYXBwc3BvdCI9PWN8fDA8ZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKCJmYW5kb20uY29tIikmJjA8YS5pbmRleE9mKCJwdWJhZHMuZy5kb3VibGVjbGljay5uZXQvIik/Cih0aGlzLnVybD0iaHR0cHM6Ly9pbWEzdnBhaWQuYXBwc3BvdC5jb20vP2FkVGFnVXJsPSIrZW5jb2RlVVJJQ29tcG9uZW50KGwuS2QoYSkpKyImdHlwZT1qcyIsYj1sLnphKGwuS2QodGhpcy51cmwpLCExLHRoaXMub3B0aW9ucy51c2VBZFRhZ1BhcmFtZXRlciksYi5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9ImNvbWFwcHNwb3RpbWEzdnBhaWQiKTpiPWwuemEobC5LZChhKSwhMSx0aGlzLm9wdGlvbnMudXNlQWRUYWdQYXJhbWV0ZXIpO2IuZGF0YS5ob21hZF92cGFpZF9jb21wYXRpYmxlPSJ0cnVlIjt0aGlzLm9wdGlvbnMuaG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3MmJihiLmRhdGEuaG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3M9Ik1lZGlhZmlsZSIpfWwuTGEoYix0aGlzLkxyLmJpbmQodGhpcyksdGhpcy5Jci5iaW5kKHRoaXMpKX0sQWc6ZnVuY3Rpb24oKXt2YXIgYT0wPHRoaXMuRWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6VkFTVEFkRGF0YSIpLmxlbmd0aD8KW106W10uc2xpY2UuY2FsbCh0aGlzLkVhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJBZCIpKTsiUGxheWxpc3QiPT10aGlzLkVhLmZpcnN0Q2hpbGQubm9kZU5hbWUmJmEuZm9yRWFjaChmdW5jdGlvbihhLGIsYyl7aWYoMT09YS5jaGlsZE5vZGVzLmxlbmd0aClpZihhLnBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09ZS5TYSl0cnl7dmFyIGQ9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoJzxBZCBzZXF1ZW5jZT0iJysoYisxKSsnIj48V3JhcHBlcj48VkFTVEFkVGFnVVJJPjwhW0NEQVRBWycrYS50ZXh0Q29udGVudC50cmltKCkrIl1dXHgzZTwvVkFTVEFkVGFnVVJJPjwvV3JhcHBlcj48L0FkPiIsInRleHQveG1sIik7Y1tiXT1kLmZpcnN0Q2hpbGR9Y2F0Y2goZil7Y1tiXT17fX1lbHNlIGMuc3BsaWNlKGIsMSl9KTt2YXIgYj1bXS5zbGljZS5jYWxsKHRoaXMuRWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6QWRCcmVhayIpKTswPj1iLmxlbmd0aCYmCihiPVtdLnNsaWNlLmNhbGwodGhpcy5FYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWRCcmVhayIpKSk7dmFyIGM9W107Yi5mb3JFYWNoKGZ1bmN0aW9uKGEsYixkKXtpZigic3RhcnQiPT1hLmdldEF0dHJpYnV0ZSgidGltZU9mZnNldCIpJiYicHJlcm9sbCI9PWUuU2F8fCJlbmQiPT1hLmdldEF0dHJpYnV0ZSgidGltZU9mZnNldCIpJiYicG9zdHJvbGwiPT1lLlNhfHx0aGlzLm9yKGEuZ2V0QXR0cmlidXRlKCJ0aW1lT2Zmc2V0IikpfHxsLml1KCkpdHJ5e3ZhciBmPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6QWRUYWdVUkkiKTswPj1mLmxlbmd0aCYmKGY9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWRUYWdVUkkiKSk7dmFyIGg9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoJzxBZCBzZXF1ZW5jZT0iJysoYisxKSsnIj48V3JhcHBlcj48VkFTVEFkVGFnVVJJPjwhW0NEQVRBWycrZlswXS50ZXh0Q29udGVudC50cmltKCkrIl1dXHgzZTwvVkFTVEFkVGFnVVJJPjwvV3JhcHBlcj48L0FkPiIsCiJ0ZXh0L3htbCIpO2RbYl09aC5maXJzdENoaWxkO2MucHVzaChoKX1jYXRjaChnKXtmb3IoYT1bXS5zbGljZS5jYWxsKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkIikpLGI9MDtiPGEubGVuZ3RoO2IrKyljLnB1c2goYVtiXSl9fS5iaW5kKHRoaXMpKTthPWEuY29uY2F0KGMpO3JldHVybiBhPWEuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgic2VxdWVuY2UiKT9OdW1iZXIoYS5nZXRBdHRyaWJ1dGUoInNlcXVlbmNlIikpPE51bWJlcihiLmdldEF0dHJpYnV0ZSgic2VxdWVuY2UiKSk/LTE6MTowfSl9LG9yOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMub3B0aW9ucy5jb250ZW50VmlkZW8sYz10aGlzLm9wdGlvbnMudGltZU9mZnNldERlbHRhfHwxMCxkPTA7aWYoIShhJiZiJiZiLmR1cmF0aW9uJiZiLmN1cnJlbnRUaW1lKSlyZXR1cm4hMTswPD1hLmluZGV4T2YoIiUiKT9kPWIuZHVyYXRpb24vMTAwKnBhcnNlSW50KGEpOjA8PWEuaW5kZXhPZigiOiIpJiYKKDA8PWEuaW5kZXhPZigiLiIpJiYoYT1hLnN1YnN0cmluZygwLGEuaW5kZXhPZigiLiIpKSksYT1hLnNwbGl0KCI6IiksYT1hLnJldmVyc2UoKSxkPXBhcnNlSW50KGFbMF0pKzYwKnBhcnNlSW50KGFbMV0pKzM2MDAqcGFyc2VJbnQoYVsyXSkpO3JldHVybiBkJiZNYXRoLmFicyhkLXBhcnNlSW50KGIuY3VycmVudFRpbWUpKTw9Yz8hMDohMX0sTHI6ZnVuY3Rpb24oYSl7dGhpcy5mdChhKTt0cnl7dGhpcy5FYT1hLnJlc3BvbnNlWE1MLHRoaXMuRWF8fCh0aGlzLkVhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEucmVzcG9uc2VUZXh0LCJ0ZXh0L3htbCIpKX1jYXRjaChiKXt0aGlzLm9hKHRoaXMuUmEody5WZCkpfXRoaXMuVz10aGlzLkFnKCk7dGhpcy5tYz10aGlzLm9mKCk7dGhpcy5rYz10aGlzLkxoKCk7dGhpcy5XLmxlbmd0aD90aGlzLkZjKCk6dGhpcy5vYSh0aGlzLlJhKHcuT2Mse2Vycm9yOnRoaXMuemY/Ri5VZDpGLkdmfSkpfSxNcjpmdW5jdGlvbihhKXt0cnl7dGhpcy5FYXx8Cih0aGlzLkVhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEsInRleHQveG1sIikpfWNhdGNoKGIpe3RoaXMub2EodGhpcy5SYSh3LlZkKSl9dGhpcy5XPXRoaXMuQWcoKTt0aGlzLm1jPXRoaXMub2YoKTt0aGlzLmtjPXRoaXMuTGgoKTt0aGlzLlcubGVuZ3RoP3RoaXMuRmMoKTp0aGlzLm9hKHRoaXMuUmEody5PYyx7ZXJyb3I6dGhpcy56Zj9GLlVkOkYuR2Z9KSl9LElyOmZ1bmN0aW9uKCl7dGhpcy5vYSh0aGlzLlJhKHcuRmYse2RlcHRoOmF9KSl9LEZjOmZ1bmN0aW9uKCl7dGhpcy5VPXRoaXMuVy5zaGlmdCgpO3RoaXMucXIoKT90aGlzLnN1KCk/KGErKyxuZXcgYih0aGlzLHRoaXMuSWcoKSxoLHtBZFN5c3RlbTp0aGlzLlpwKCksdnBhaWQ6dGhpcy5vcHRpb25zLnZwYWlkfSkpOnRoaXMub2EodGhpcy5SYSh3LklmKSk6KGE9MCx0aGlzLlF1KCkmJnRoaXMuVGUodGhpcy5SbygpKSl9LE9lOmZ1bmN0aW9uKCl7dGhpcy5tYz8odGhpcy5tYz0xPHRoaXMuVy5sZW5ndGgsCnRoaXMuVy5sZW5ndGgmJnRoaXMuRmMoKSk6dGhpcy5wYXJlbnQuT2UoKX0sa2g6ZnVuY3Rpb24oKXt0aGlzLmtjPyh0aGlzLmtjPTE8dGhpcy5XLmxlbmd0aCx0aGlzLlcubGVuZ3RoJiZ0aGlzLkZjKCkpOnRoaXMucGFyZW50LmtoKCl9LFF1OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHUoKT90aGlzLm91KCk/ITA6KC0xIT10aGlzLnljKCk/dGhpcy5vYSh0aGlzLlJhKHcuQmYpKTp0aGlzLm9hKHRoaXMuUmEody5qaikpLCExKToodGhpcy5vYSh0aGlzLlJhKHcuT2MsRi5IZikpLCExKX0sVGU6ZnVuY3Rpb24oYSl7dGhpcy5zYXx8KHRoaXMuc2E9IiIpO2EuT2E9YS5PYS5jb25jYXQodGhpcy5LZSgpKTthLnJiPWEucmI/YS5yYjp0aGlzLm1jO2EuamM9YS5qYz9hLmpjOnRoaXMua2M7YS5XYT1hLldhP2EuV2E6LTEhPXRoaXMuc2EuaW5kZXhPZigic21hcnRjbGlwLm5ldCIpJiYhdGhpcy5vcHRpb25zLndnO3RoaXMucGFyZW50LlRlKGEpfSxSbzpmdW5jdGlvbigpe3ZhciBhPW5ldyBTYTsKdGhpcy5zYXx8KHRoaXMuc2E9IiIpO2EuZHVyYXRpb249dGhpcy55YygpO2EuTT10aGlzLkZnKCk7YS5PYj10aGlzLmJxKCk7YS5vcmlnaW49dGhpczthLkE9dGhpcy5ZcCgpO2EuaGY9dGhpcy5ycShhLmR1cmF0aW9uKTthLldhPWEuV2E/YS5XYTotMSE9dGhpcy5zYS5pbmRleE9mKCJzbWFydGNsaXAubmV0IikmJiF0aGlzLm9wdGlvbnMud2c7cmV0dXJuIGF9LG9hOmZ1bmN0aW9uKGIpe3RoaXMuc2F8fCh0aGlzLnNhPSIiKTtiLldhPWIuV2E/Yi5XYTotMSE9dGhpcy5zYS5pbmRleE9mKCJzbWFydGNsaXAubmV0IikmJiF0aGlzLm9wdGlvbnMud2c7dGhpcy5VJiYoYi5PYT1iLmVycm9yLmNvZGUhPXcuQmYuY29kZT9iLk9hLmNvbmNhdCh0aGlzLmNxKCkpOmIuT2EuY29uY2F0KHRoaXMubHEoKSkpO3RoaXMuVy5sZW5ndGg/KHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5RYiYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucGFyZW50LlFiJiZ0aGlzLnBhcmVudC5RYihiKSxhPTAsdGhpcy5GYygpKToKKHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5vYSYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucGFyZW50Lm9hJiZ0aGlzLnBhcmVudC5vYShiKSxhPTApfSxRYjpmdW5jdGlvbihhKXt0aGlzLnBhcmVudC5RYihhKX0scWc6ZnVuY3Rpb24oYSxiKXt0aGlzLm9hKHRoaXMuUmEoYSxiKSl9LFJhOmZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IFRhKGEsYik7Yy5vcmlnaW49dGhpcztyZXR1cm4gY30sc3U6ZnVuY3Rpb24oKXtyZXR1cm4gYTxofSxwdTpmdW5jdGlvbigpe3JldHVybiAwPHRoaXMuRmcoKS5sZW5ndGh9LG91OmZ1bmN0aW9uKCl7cmV0dXJuIDE8dGhpcy55YygpfSxvZjpmdW5jdGlvbigpe3JldHVybiAxPHRoaXMuVy5maWx0ZXIoZnVuY3Rpb24oYSl7dmFyIGI9ITE7YS5nZXRBdHRyaWJ1dGUmJihiPTA8TnVtYmVyKGEuZ2V0QXR0cmlidXRlKCJzZXF1ZW5jZSIpKSk7cmV0dXJuIGJ9KS5sZW5ndGh9LExoOmZ1bmN0aW9uKCl7dmFyIGE9ITE7dGhpcy5XJiYyPD10aGlzLlcubGVuZ3RoJiYKIXRoaXMub2YoKSYmKGE9ITApO3JldHVybiBhfSxmdDpmdW5jdGlvbihhKXt0aGlzLnNhPSJVTktOT1dOIjt0cnl7ZC5wdXNoKHRoaXMuc2E9YS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1VcmwiKSl9Y2F0Y2goYil7dGhpcy5zYT0iVU5LTk9XTiJ9dHJ5e3RoaXMuemY9YS5nZXRSZXNwb25zZUhlYWRlciYmYS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1WcGFpZC1JZ25vcmVkIil9Y2F0Y2goYyl7fX0scXI6ZnVuY3Rpb24oKXtyZXR1cm4gMDx0aGlzLklnKCkubGVuZ3RofSxJZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlKHRoaXMuVSwiVkFTVEFkVGFnVVJJIil9LFpwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmUodGhpcy5VLCJBZFN5c3RlbSIpfSxLZTpmdW5jdGlvbigpe2Zvcih2YXIgYT0iSW1wcmVzc2lvbiBUcmFja2luZyBDbGlja1RyYWNraW5nIEVycm9yIFZpZXdhYmxlIE5vdFZpZXdhYmxlIHZpZXdhYmxlX2ltcHJlc3Npb24gbWVhc3VyYWJsZV9pbXByZXNzaW9uIi5zcGxpdCgiICIpLApiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtbXS5zbGljZS5jYWxsKHRoaXMuVS5nZXRFbGVtZW50c0J5VGFnTmFtZShkKSkuZm9yRWFjaChmdW5jdGlvbihhKXtpZihhJiYhdGhpcy5WZyhhKSl7dmFyIGM9YS5nZXRBdHRyaWJ1dGUoImV2ZW50Iil8fGQudG9Mb3dlckNhc2UoKTtiLnB1c2goe3R5cGU6Yyx1cmw6dGhpcy5pYihhKX0pfX0uYmluZCh0aGlzKSl9cmV0dXJuIGJ9LFZnOmZ1bmN0aW9uKGEpe3JldHVybiBhPyJDb21wYW5pb24iPT1hLm5vZGVOYW1lPyEwOnRoaXMuVmcoYS5wYXJlbnROb2RlKTohMX0sbHE6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLktlKCk7cmV0dXJuIGE9YS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuImltcHJlc3Npb24iPT1hLnR5cGV9KX0sY3E6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLktlKCk7cmV0dXJuIGE9YS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuImVycm9yIj09YS50eXBlfSl9LGJxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWIodGhpcy5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJDbGlja1Rocm91Z2giKVswXSl9LApGZzpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIk1lZGlhRmlsZSIpLGI9W10sYz0wO2M8YS5sZW5ndGg7YysrKWIucHVzaCh7aWQ6YVtjXS5nZXRBdHRyaWJ1dGUoImlkIiksdHlwZTphW2NdLmdldEF0dHJpYnV0ZSgidHlwZSIpLFBhOmFbY10uZ2V0QXR0cmlidXRlKCJiaXRyYXRlIiksd2lkdGg6YVtjXS5nZXRBdHRyaWJ1dGUoIndpZHRoIiksaGVpZ2h0OmFbY10uZ2V0QXR0cmlidXRlKCJoZWlnaHQiKSxUdjphW2NdLmdldEF0dHJpYnV0ZSgiZGVsaXZlcnkiKSx1cmw6dGhpcy5pYihhW2NdKX0pO3ZhciBkPXRoaXMub3B0aW9ucy5QYXx8MUUzO3RyeXt2YXIgaD1iLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4tMSE9YS50eXBlLmluZGV4T2YoIm1wNCIpfSkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBNYXRoLmFicyhkLWEuUGEpLU1hdGguYWJzKGQtYi5QYSl9KSxlPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybi0xPT1hLnR5cGUuaW5kZXhPZigibXA0Iil9KS5zb3J0KGZ1bmN0aW9uKGEsCmIpe3JldHVybiBNYXRoLmFicyhkLWEuUGEpLU1hdGguYWJzKGQtYi5QYSl9KSxiPWguY29uY2F0KGUpfWNhdGNoKGcpe31yZXR1cm4gYn0sWXA6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImFkUGFyYW1ldGVycyIpO2EmJjAhPWEubGVuZ3RofHwoYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkUGFyYW1ldGVycyIpKTtmb3IodmFyIGI9IiIsYz0hMSxkPVtdLGI9ITEsaD0iIixlPVtdLGc9IiIsZz0wO2c8YS5sZW5ndGg7ZysrKXtoPWI9dGhpcy5xZChhW2ddKTt0cnl7Yz1KU09OLnBhcnNlKGIpfWNhdGNoKGspe2M9Yn1kLnB1c2goYyk7ZS5wdXNoKGgpfTE8YS5sZW5ndGg/KGI9ZCxnPWgpOihiPWMsZz1lKTtyZXR1cm57QWRQYXJhbWV0ZXJzOmIsT3JpZ2luYWxBZFBhcmFtZXRlcnM6Zy50b1N0cmluZygpfX0seWM6ZnVuY3Rpb24oKXt2YXIgYTt0cnl7cmV0dXJuIGE9dGhpcy5pYih0aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkR1cmF0aW9uIilbMF0pLAphPWEuc3BsaXQoIjoiKSxhPTM2MDAqK2FbMF0rNjAqK2FbMV0rICthWzJdLGlzTmFOKGEpPy0xOmF9Y2F0Y2goYil7cmV0dXJuLTF9fSxycTpmdW5jdGlvbihhKXt2YXIgYj0hMSxjPSExLGQ9ITE7dHJ5e2M9dGhpcy5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJMaW5lYXIiKVswXSxkPWMuZ2V0QXR0cmlidXRlKCJza2lwb2Zmc2V0IiksYj1lLld0KGQsYSksMD5iJiYoYj0hMSl9Y2F0Y2goaCl7Yj0hMX1yZXR1cm4gYn0scmU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZhLmdldEVsZW1lbnRzQnlUYWdOYW1lKGIpLmxlbmd0aD90aGlzLmliKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYilbMF0pOiIifSx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5jaGlsZE5vZGVzJiZhLmNoaWxkTm9kZXNbMF0/YS5jaGlsZE5vZGVzWzBdLm5vZGVWYWx1ZToiIn0saWI6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5xZChhKToiIn0scWQ6ZnVuY3Rpb24oYSl7dmFyIGI9CnRoaXMudWUoYSk7YiYmKGI9Yi50cmltKCkpOyFiJiZhLnRleHRDb250ZW50JiYoYj1hLnRleHRDb250ZW50LGI9Yi50cmltKCkpO3JldHVybiBifX19KShjKTt2YXIgVD1jLnZtfHxUO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLiRyPXRoaXMuYVs1XTt0aGlzLnBpPXRoaXMuYVszXTt0aGlzLkNvPXRoaXMuYVs2XTt0aGlzLmVqPXRoaXMuYVsxXTt0aGlzLm5uPXRoaXMuYVs2XTt0aGlzLnFsPXRoaXMuYVs4XTt0aGlzLktpPXRoaXMuYVsxXTt0aGlzLkFpPXRoaXMuYVs4XTt0aGlzLmo9dGhpcy5hWzddfWMuTnE9YjtiLnByb3RvdHlwZT17WnI6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLiRyOnRoaXMub2koYSl9LG9pOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5waTp0aGlzLkJvKGEpfSxCbzpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuQ286dGhpcy5kaihhKX0sCmRqOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5lajp0aGlzLm1uKGEpfSxtbjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMubm46dGhpcy5wbChhKX0scGw6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLnFsOnRoaXMuSmkoYSl9LEppOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5LaTp0aGlzLnppKGEpfSx6aTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuQWk6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBVYT1jLk5xfHxVYSx4Yz1uZXcgVWEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD14Yy5acig0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuZHVyYXRpb249MDt0aGlzLk9hPVtdO3RoaXMuTT1bXTt0aGlzLk9iPSIiO3RoaXMuQT10aGlzLmpjPXRoaXMucmI9ITE7dGhpcy54ZT0KdGhpcy5vcmlnaW49bnVsbDt0aGlzLnllPSIifWMucmw9YjtiLnByb3RvdHlwZT17TW86ZnVuY3Rpb24oKXtmb3IodmFyIGE9ITEsYj0wO2I8dGhpcy5NLmxlbmd0aDtiKyspaWYoMDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24vZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC9lY21hc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQvamF2YXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJ0ZXh0L2pzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC94LWVjbWFzY3JpcHQiKXx8CjA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1qYXZhc2NyaXB0IikpYT0hMDtyZXR1cm4gYX0sanE6ZnVuY3Rpb24oKXtpZighdGhpcy54ZSYmdGhpcy5vcmlnaW4mJnRoaXMub3JpZ2luLkVhKXt2YXIgYT10aGlzLm9yaWdpbi5FYTtpZihhLmdldEVsZW1lbnRzQnlUYWdOYW1lKWZvcih2YXIgYT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJbXByZXNzaW9uIiksYj0iIixjPTA7YzxhLmxlbmd0aDtjKyspKGI9YVtjXS5nZXRBdHRyaWJ1dGUoImlkIikpJiYwPD1iLmluZGV4T2YoIkhPTUFEIikmJih0aGlzLnhlPWFbY10pfXJldHVybiB0aGlzLnhlfSxEZzpmdW5jdGlvbigpe2lmKHRoaXMueWUpcmV0dXJuIHRoaXMueWU7dmFyIGE9IiI7KGE9dGhpcy5qcSgpKSYmYS5nZXRBdHRyaWJ1dGU/KGE9YS5nZXRBdHRyaWJ1dGUoImlkIiksYT1hLnJlcGxhY2UoIkhPTUFEXyIsIiIpLChhPWEucmVwbGFjZSgiSE9NQUQiLCIiKSl8fChhPSJlbXB0eSIpKTphPSJub19pbXBfbm9kZSI7CnJldHVybiB0aGlzLnllPWF9LHVxOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPSExLGI9MDtiPHRoaXMuTS5sZW5ndGg7YisrKWlmKDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24vamF2YXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQvZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJ0ZXh0L2phdmFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC9qc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1lY21hc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1qYXZhc2NyaXB0IikpYT0KdGhpcy5NW2JdO3JldHVybiBhfX19KShjKTt2YXIgU2E9Yy5ybHx8U2E7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMudW09dGhpcy5hWzldO3RoaXMuSHE9dGhpcy5hWzZdO3RoaXMucXA9dGhpcy5hWzddO3RoaXMubXM9dGhpcy5hWzldO3RoaXMuYWw9dGhpcy5hWzRdO3RoaXMuVnA9dGhpcy5hWzEwXTt0aGlzLmVyPXRoaXMuYVs2XTt0aGlzLmo9dGhpcy5hWzVdfWMucmo9YjtiLnByb3RvdHlwZT17dG06ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnVtOnRoaXMuR3EoYSl9LEdxOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5IcTp0aGlzLnBwKGEpfSxwcDpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMucXA6dGhpcy5scyhhKX0sbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLm1zOnRoaXMuJGsoYSl9LCRrOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5hbDoKdGhpcy5VcChhKX0sVXA6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLlZwOnRoaXMuZHIoYSl9LGRyOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5lcjp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLmo6YX19fSkoYyk7dmFyIFZhPWMucmp8fFZhLHljPW5ldyBWYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXljLnRtKDQpO3ZhciB3PXtWZDp7dHlwZToiZXJyb3IiLGNvZGU6MTAwLG1lc3NhZ2U6IlhNTCBwYXJzaW5nIGVycm9yIix4YToiWE1MX1BBUlNFX0VSUk9SIn0samo6e3R5cGU6ImVycm9yIixjb2RlOjIwMixtZXNzYWdlOiJWaWRlbyBwbGF5ZXIgZXhwZWN0aW5nIGRpZmZlcmVudCBkdXJhdGlvbi4iLHhhOiJEVVJBVElPTl9FUlJPUiJ9LE9jOnt0eXBlOiJlcnJvciIsY29kZTozMDMsbWVzc2FnZToiTm8gYWRzIFZBU1QgcmVzcG9uc2UgYWZ0ZXIgb25lIG9yIG1vcmUgV3JhcHBlcnMuIEFsc28gaW5jbHVkZXMgbnVtYmVyIG9mIGVtcHR5IFZBU1QgcmVzcG9uc2VzIGZyb20gZmFsbGJhY2suIiwKeGE6IkVNUFRZX1ZBU1QifSxJZjp7dHlwZToiY3JpdGljYWwiLGNvZGU6MzAyLG1lc3NhZ2U6IldyYXBwZXIgbGltaXQgcmVhY2hlZCwgYXMgZGVmaW5lZCBieSB0aGUgdmlkZW8gcGxheWVyLiBUb28gbWFueSBXcmFwcGVyIHJlc3BvbnNlcyBoYXZlIGJlZW4gcmVjZWl2ZWQgd2l0aCBubyBJbkxpbmUgcmVzcG9uc2UuIix4YToiV1JBUFBFUl9MSU1JVF9SRUFDSEVEIn0sRmY6e3R5cGU6ImVycm9yIixjb2RlOjMwMSxtZXNzYWdlOiJUaW1lb3V0IG9mIFZBU1QgVVJJIHByb3ZpZGVkIGluIFdyYXBwZXIgZWxlbWVudCwgb3Igb2YgVkFTVCBVUkkgcHJvdmlkZWQgaW4gYSBzdWJzZXF1ZW50IFdyYXBwZXIgZWxlbWVudC4gSW5jbHVkZXMgcmVxdWVzdCBlcnJvcnMgc3VjaCBhcyBpbnZhbGlkIFVSSSwgdW5yZWFjaGFibGUgb3IgcmVxdWVzdCB0aW1lb3V0IGZvciBVUkksIGFuZCBzZWN1cml0eSBvciBvdGhlciBleGNlcHRpb25zIHJlbGF0ZWQgdG8gcmVxdWVzdGluZyBhIFZBU1QgVVJJLiIsCnhhOiJMT0FEX0VSUk9SIn0sVGQ6e3R5cGU6ImVycm9yIixjb2RlOjQwMyxtZXNzYWdlOiJDb3VsZCBub3QgZmluZCBNZWRpYUZpbGUgdGhhdCBpcyBzdXBwb3J0ZWQgYnkgdGhpcyB2aWRlbyBwbGF5ZXIsIGJhc2VkIG9uIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBNZWRpYUZpbGUgZWxlbWVudC4iLHhhOiJOT19QTEFZQUJMRV9TT1VSQ0VTIn0sS3Y6e3R5cGU6ImVycm9yIixjb2RlOjQwNSxtZXNzYWdlOiJQcm9ibGVtIGRpc3BsYXlpbmcgTWVkaWFGaWxlLiIseGE6Ik1FRElBRklMRV9FUlJPUiJ9LEJmOnt0eXBlOiJlcnJvciIsY29kZTo5OTksbWVzc2FnZToiMSBzZWMgZHVtbXkgYWQiLHhhOiJEVU1NWV9BRCJ9fSxGPXtHZjp7dHlwZToiZXJyb3IiLGNvZGU6MzAzMSxtZXNzYWdlOiJubyBhZHMiLHhhOiJOT19BRFMifSxIZjp7dHlwZToiZXJyb3IiLGNvZGU6MzAzMixtZXNzYWdlOiJubyBtZWRpYWZpbGVzIHNwZWNpZmllZCIseGE6Ik5PX01FRElBRklMRVMifSxMdjp7dHlwZToiZXJyb3IiLApjb2RlOjMwMzMsbWVzc2FnZToibm8gcGxheWFibGUgbWVkaWFmaWxlcyIseGE6Ik5PX1BMQVlBQkxFX01FRElBRklMRVMifSxVZDp7dHlwZToiZXJyb3IiLGNvZGU6MzAzNCxtZXNzYWdlOiJ2cGFpZCBpZ25vcmVkIix4YToiVlBBSURfSUdOT1JFRCJ9fTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5vcz10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs0XX1jLnJuPWI7Yi5wcm90b3R5cGU9e25zOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5vczp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLmo6YX19fSkoYyk7dmFyIFdhPWMucm58fFdhLHpjPW5ldyBXYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXpjLm5zKDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsCmIpe3RoaXMuZXJyb3I9YTt0aGlzLm1kPWI7dGhpcy5PYT1bXTt0aGlzLm9yaWdpbj1udWxsfWMuTGo9YjtiLnByb3RvdHlwZT17fX0pKGMpO3ZhciBUYT1jLkxqfHxUYTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5DbT10aGlzLmFbMV07dGhpcy5YcT10aGlzLmFbOV07dGhpcy5Pbj10aGlzLmFbNl07dGhpcy5TcD10aGlzLmFbNV07dGhpcy5Baz10aGlzLmFbOV07dGhpcy5SdD10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVs3XX1jLmNyPWI7Yi5wcm90b3R5cGU9e0JtOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuQ206dGhpcy5XcShhKX0sV3E6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLlhxOnRoaXMuTm4oYSl9LE5uOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Pbjp0aGlzLlJwKGEpfSxScDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuU3A6dGhpcy56ayhhKX0sCnprOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5Bazp0aGlzLlF0KGEpfSxRdDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuUnQ6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBYYT1jLmNyfHxYYSxBYz1uZXcgWGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1BYy5CbSg0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYihhLGIpe3RoaXMuY29uZj1ifHx7fTt0aGlzLmY9YTt0aGlzLmhiPWEuQmcoKTt0aGlzLkc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5HLmlkPWUuYmEoMTApO3RoaXMuRj1DLnBvcCgpO3RoaXMuRnx8KGUudHJhY2soInN0YXRzX2hkX25vVmlkZW9UYWdMZWZ0IiwiIiwhMCksdGhpcy5GPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIiksdGhpcy5GLmlkPQoiYWRYZGlzcGxheSIsdGhpcy5GLnN0eWxlLmRpc3BsYXk9ImJsb2NrIik7dGhpcy5EPXt9O3RoaXMuWmY9ITE7dGhpcy5OYj1bXX1jLnFqPWI7Yi5wcm90b3R5cGU9e1RwOmZ1bmN0aW9uKGEpe3ZhciBiPXt9LGM9ITEsZT0wLGI9MCxnPXt9O2EuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiYoYj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9ImZpeGVkIixlPWIubGVmdCxiPWIudG9wKTtnPXt4OmUseTpifTtnLnBvc2l0aW9uPWM7cmV0dXJuIGd9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuY29uZi51c2VCb3VuZGluZ0NsaWVudFJlY3QpcmV0dXJuIHRoaXMuVHAoYSk7Zm9yKHZhciBiPTAsYz0wLGU9ITEsZz10aGlzLk9xKGEpLGs9e307YTspYis9YS5vZmZzZXRMZWZ0K2EuY2xpZW50TGVmdCxjKz1hLm9mZnNldFRvcCthLmNsaWVudFRvcCxhPWEub2Zmc2V0UGFyZW50O2cmJihhPXZvaWQgMCE9PXdpbmRvdy5wYWdlWU9mZnNldD93aW5kb3cucGFnZVlPZmZzZXQ6KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8CmRvY3VtZW50LmJvZHkucGFyZW50Tm9kZXx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wLGIrPXZvaWQgMCE9PXdpbmRvdy5wYWdlWE9mZnNldD93aW5kb3cucGFnZVhPZmZzZXQ6KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlfHxkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0LGMrPWEsdGhpcy5jb25mLnBvc2l0aW9uSWZGaXhlZCYmKGU9dGhpcy5jb25mLnBvc2l0aW9uSWZGaXhlZCkpO2s9e3g6Yix5OmN9O2UmJihrLnBvc2l0aW9uPWUpO3JldHVybiBrfSxjdTpmdW5jdGlvbigpe3RoaXMuWmY9ITB9LFdoOmZ1bmN0aW9uKCl7dGhpcy5GPUMucG9wKCk7dGhpcy5GfHwoZS50cmFjaygic3RhdHNfaGRfbm9WaWRlb1RhZ0xlZnQiLCIiLCEwKSx0aGlzLkY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmlkZW8iKSx0aGlzLkYuaWQ9ImFkWGRpc3BsYXkiLHRoaXMuRi5zdHlsZS5kaXNwbGF5PSJibG9jayIpfSxwaDpmdW5jdGlvbigpe3RoaXMuZi5wYXVzZSgpOwplLnYoay5mZCx0aGlzLmYudSgpKX0scHQ6ZnVuY3Rpb24oKXt0aGlzLlpmfHwodGhpcy5mLnBsYXkoKSxlLnYoay5nZCx0aGlzLmYudSgpKSl9LEpjOmZ1bmN0aW9uKCl7dmFyIGE9MjE0NzQ4MzY0Nzt0aGlzLmNvbmYuekluZGV4JiYoYT10aGlzLmNvbmYuekluZGV4KTt0aGlzLmYucGF1c2UoKTt0aGlzLkcuc3R5bGUuekluZGV4PWE7dGhpcy5HLnN0eWxlLm1hcmdpbkxlZnQ9ImF1dG8iO3RoaXMuRy5zdHlsZS5tYXJnaW5SaWdodD0iYXV0byI7dGhpcy5HLnN0eWxlLmJhY2tncm91bmRDb2xvcj0iIzAwMDAwMCI7dGhpcy5HLnN0eWxlLmJveFNpemluZz10aGlzLmhiLnN0eWxlLmJveFNpemluZzt0aGlzLkcuc3R5bGUud2lkdGg9dGhpcy5oYi5vZmZzZXRXaWR0aCswKyJweCI7dGhpcy5HLnN0eWxlLmhlaWdodD10aGlzLmhiLm9mZnNldEhlaWdodCswKyJweCI7dGhpcy5GLnN0eWxlLndpZHRoPXRoaXMuaGIub2Zmc2V0V2lkdGgrMCsicHgiO3RoaXMuRi5zdHlsZS5oZWlnaHQ9dGhpcy5oYi5vZmZzZXRIZWlnaHQrCjArInB4Ijt0aGlzLmdldFBvc2l0aW9uKHRoaXMuaGIpO3RoaXMuZi5IYyYmdGhpcy5mLkhjKCk/dGhpcy5mLkJnKCkuYXBwZW5kQ2hpbGQodGhpcy5HKTpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuRyk7d2luZG93LnNldFRpbWVvdXQodGhpcy5UYi5iaW5kKHRoaXMpLDEwKX0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0aGlzLmYuZXhpdEZ1bGxzY3JlZW4oKX0sT3E6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlLGM9ITE7YTspe2lmKGEuc3R5bGUmJigiZml4ZWQiPT1hLnN0eWxlLnBvc2l0aW9ufHxiJiYiZml4ZWQiPT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS5wb3NpdGlvbikpe2M9ITA7YnJlYWt9YT1hLnBhcmVudE5vZGV9cmV0dXJuIGN9LE1wOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0UG9zaXRpb24oYSk7Yi5wb3NpdGlvbj9iLnBvc2l0aW9uPWIucG9zaXRpb246Yi5wb3NpdGlvbj0iYWJzb2x1dGUiO2Iud2lkdGg9CmEub2Zmc2V0V2lkdGg7Yi5oZWlnaHQ9YS5vZmZzZXRIZWlnaHQ7cmV0dXJuIGJ9LFRiOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuTXAodGhpcy5oYik7aWYoYi54IT10aGlzLkQueHx8Yi55IT10aGlzLkQueXx8Yi5wb3NpdGlvbiE9dGhpcy5ELnBvc2l0aW9ufHxiLndpZHRoIT10aGlzLkQud2lkdGh8fGIuaGVpZ2h0IT10aGlzLkQuaGVpZ2h0fHxhKXtpZigwPHRoaXMuRC53aWR0aCYmMDx0aGlzLkQuaGVpZ2h0JiYwPT1iLndpZHRoJiYwPT1iLmhlaWdodCl7dGhpcy53ZSgpO3JldHVybn10aGlzLkQ9Yjt0aGlzLmYuSGMoKT8odGhpcy5HLnN0eWxlLmxlZnQ9IjBweCIsdGhpcy5HLnN0eWxlLnRvcD0iMHB4Iik6KHRoaXMuRy5zdHlsZS5sZWZ0PWIueCsicHgiLHRoaXMuRy5zdHlsZS50b3A9Yi55KyJweCIpO3RoaXMuRy5zdHlsZS53aWR0aD1iLndpZHRoKyJweCI7dGhpcy5HLnN0eWxlLmhlaWdodD1iLmhlaWdodCsicHgiO3RoaXMuRy5zdHlsZS5wb3NpdGlvbj1iLnBvc2l0aW9uOwp0aGlzLkYuc3R5bGUud2lkdGg9Yi53aWR0aCsicHgiO3RoaXMuRi5zdHlsZS5oZWlnaHQ9Yi5oZWlnaHQrInB4Ijtmb3IoYT0wO2E8dGhpcy5OYi5sZW5ndGg7YSsrKXRoaXMuTmJbYV0oe3dpZHRoOmIud2lkdGgsaGVpZ2h0OmIuaGVpZ2h0fSl9ZS5IaCh0aGlzLkcpJiZ3aW5kb3cuc2V0VGltZW91dCh0aGlzLlRiLmJpbmQodGhpcyksMTApfSxZZjpmdW5jdGlvbihhKXt0aGlzLk5ifHwodGhpcy5OYj1bXSk7ImZ1bmN0aW9uIj09dHlwZW9mIGEmJnRoaXMuTmIucHVzaChhKX0sd2U6ZnVuY3Rpb24oKXt0aGlzLkcmJnRoaXMuRy5wYXJlbnROb2RlJiZ0aGlzLkcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCYmdGhpcy5HLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5HKTt0aGlzLkYmJnRoaXMuRi5wYXVzZSYmdGhpcy5GLnBhdXNlKCl9fX0pKGMpO2Zvcih2YXIgWWE9Yy5xanx8WWEsQz1bXSxaYT0wOzEwMD5aYTtaYSsrKXt2YXIgTz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpOwpPLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjtPLmlkPWUuYmEoMTApO08uY29udHJvbHM9ITA7Qy5wdXNoKE8pfXZhciBLPSExLGRhPSExO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIseik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIseik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHopO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIseik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuc3A9dGhpcy5hWzhdO3RoaXMubXA9dGhpcy5hWzRdO3RoaXMuYXI9dGhpcy5hWzJdO3RoaXMuVXM9dGhpcy5hWzhdO3RoaXMueW89dGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbNV19Yy5ZbD1iO2IucHJvdG90eXBlPXtycDpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLnNwOnRoaXMubHAoYSl9LGxwOmZ1bmN0aW9uKGEpe3JldHVybiAzPAphP3RoaXMubXA6dGhpcy4kcShhKX0sJHE6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLmFyOnRoaXMuVHMoYSl9LFRzOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5Vczp0aGlzLnhvKGEpfSx4bzpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMueW86dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciAkYT1jLllsfHwkYSxCYz1uZXcgJGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1CYy5ycCg0KTsoZnVuY3Rpb24oYyl7Yy5mbD11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLmVsZW1lbnRJZCxhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGIpO2F8fChiPXRoaXMuZ2V0UmF3UGxheWVyKCkuZ2V0RWxlbWVudElkKCksCmE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYikpO3RoaXMuWShhKTt0aGlzLkZkKGIpO3RoaXMubWcoKX0sRmQ6ZnVuY3Rpb24oYil7dGhpcy5pZHx8KHRoaXMuaWQ9Yil9LG1nOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5JYSgpLGE9dGhpcy52aWRlb1RhZzthfHwoKGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXSl8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdKSxhP3RoaXMuWihhKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubWcoKX0uYmluZCh0aGlzKSwxMDApKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBsYXkoKX0sVmE6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpO2IuaXNQbGF5aW5nJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5pc1BsYXlpbmcmJmIuaXNQbGF5aW5nKCkmJnRoaXMucGF1c2UoKX0sCkFlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4gYi5wYXJhbWV0ZXJzJiYhMT09PWIucGFyYW1ldGVycy5hdXRvcGxheT8hMTohMH0sTzpmdW5jdGlvbigpe3JldHVybiJPb3lhbGEifSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGI/Yi5tdXRlZDohMH0sdTpmdW5jdGlvbigpe3ZhciBiPXt9LGE9dGhpcy52aWRlb1RhZyxjPXRoaXMuSWEoKTtpZihiLnZpZGVvVGFnPWEpYi52aWRlb1RhZ0lkPWEuaWQ7aWYoYi5jb250YWluZXI9YyliLmNvbnRhaW5lcklkPWMuaWQ7Yi5wbGF5ZXI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4gYn19KX0pKGMpO3ZhciBhYj1jLmZsfHxhYjsoZnVuY3Rpb24oYyl7Yy5kbD12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9ZWEoKTt0aGlzLk1iPXRoaXMuTWJ8fCExO3RoaXMuUWY9dGhpcy5TZj10aGlzLlJnPXRoaXMuZGE9dGhpcy5zZj0KITE7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5BRFNfRVJST1IsImV4YW1wbGUiLGZ1bmN0aW9uKGEsYil7dGhpcy5JcChhLGIpfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5BRFNfUExBWUVELCJleGFtcGxlIixmdW5jdGlvbigpe3RoaXMuc2Y9ITA7dGhpcy5SZyYmdGhpcy5oZygpfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5QTEFZSU5HLCJleGFtcGxlIixmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFBsYXllcigpLnpiO2EmJmEuVWImJnRoaXMuZ2V0UGxheWVyKCkucGF1c2UoKX0uYmluZCh0aGlzKSwxMDApfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5JTklUSUFMX1BMQVksImV4YW1wbGUiLGZ1bmN0aW9uKCl7dGhpcy5jZCgpO3RoaXMuUmc9ITA7dGhpcy5oZygpfS5iaW5kKHRoaXMpKTt0aGlzLmNnKCl9LApoZzpmdW5jdGlvbigpe2lmKCF0aGlzLk1iKXt0aGlzLmNkKCk7aWYoIXRoaXMuc2YmJiF0aGlzLmNkKCkpcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCksITA7dGhpcy5zZiYmdGhpcy5RZiYmIXRoaXMuU2YmJndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCl9fSxjZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuR2coImFkTWFuYWdlckNvbnRyb2xsZXIiKTtyZXR1cm4gYiYmYi5hZE1hbmFnZXJzJiZiLmFkTWFuYWdlcnNbImdvb2dsZS1pbWEtYWRzLW1hbmFnZXIiXX0sR2c6ZnVuY3Rpb24oYil7Zm9yKHZhciBhPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCksYz0wO2M8YS5tb2R1bGVzLmxlbmd0aDtjKyspe3ZhciBkPWEubW9kdWxlc1tjXTtpZihkLm5hbWU9PT1iKXJldHVybiBkLmluc3RhbmNlfX0sY2c6ZnVuY3Rpb24oKXtpZih0aGlzLmNkKCkpe3ZhciBiPXRoaXMuR2coImFkTWFuYWdlckNvbnRyb2xsZXIiKS5hZE1hbmFnZXJzWyJnb29nbGUtaW1hLWFkcy1tYW5hZ2VyIl07CnRoaXMuU2Y9MDxiLmdldEN1cnJlbnRUaW1lKCk7dGhpcy5RZj1iLlJ2fXRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmNnKCl9LmJpbmQodGhpcyksMTAwKX0sVXY6ZnVuY3Rpb24oYil7cmV0dXJuIGIuaXNBZFBsYXlpbmcmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmlzQWRQbGF5aW5nP2IuZ3coKTohMX0seWM6ZnVuY3Rpb24oYil7cmV0dXJuIGIuZ2V0QWREdXJhdGlvbiYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0QWREdXJhdGlvbj9iLnljKCk6LTF9LG1xOmZ1bmN0aW9uKGIpe3JldHVybiBiLmlzUGxheWluZyYmImZ1bmN0aW9uIj09dHlwZW9mIGIuaXNQbGF5aW5nP2IuaXNQbGF5aW5nKCk6LTF9LElwOmZ1bmN0aW9uKGIsYSl7dGhpcy5NYj1hLm1hdGNoKC9cZCsvKT9wYXJzZUludChhLm1hdGNoKC9cZCsvKVswXSk6MDsxMDA5PT10aGlzLk1ifHwzMDI9PXRoaXMuTWI/dGhpcy5kYT0hMDp0aGlzLm8oImFkZXJyb3IiLHRoaXMuTWIpO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLAoxMDApfSxlZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCk7dGhpcy5kYT8odGhpcy53KCksdGhpcy50YSgpKTpiLkFlKCk/KHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDJFMykpOnRoaXMubXEoYik/KHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDJFMykpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCl9fSl9KShjKTt2YXIgYmI9Yy5kbHx8YmI7KGZ1bmN0aW9uKGMpe2MuZ2w9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxucjpmdW5jdGlvbigpe3dpbmRvdy5PTy52bC5YbS5WbT93aW5kb3cuT08udmwuWG0uVm0uUHYoZnVuY3Rpb24oKXt9KTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubnIoKX0sMTAwKX0sZzpmdW5jdGlvbigpe3RoaXMuVWE9MTUwMDt2YXIgYj0KZWEoKTtpZihiJiZiLl9faW50ZXJuYWwmJmIuX19pbnRlcm5hbC5wbGF5ZXJzJiYwPGUudGUoYi5fX2ludGVybmFsLnBsYXllcnMpKWZvcih2YXIgYSBpbiBiLl9faW50ZXJuYWwucGxheWVycylpZihiLl9faW50ZXJuYWwucGxheWVycy5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGM9bmV3IGFiKGIuX19pbnRlcm5hbC5wbGF5ZXJzW2FdKTt0aGlzLk4oYyl8fCh0aGlzLlAoYyksKG5ldyBiYihjLHRoaXMuSykpLmcoKSl9dGhpcy5SKCl9fSl9KShjKTt2YXIgY2I9Yy5nbHx8Y2IsZGI9bmV3IGNiKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnlyPXRoaXMuYVszXTt0aGlzLlJrPXRoaXMuYVsyXTt0aGlzLkRqPXRoaXMuYVs2XTt0aGlzLnl0PXRoaXMuYVs5XTt0aGlzLm9tPXRoaXMuYVsxXTt0aGlzLkJ2PXRoaXMuYVs5XTt0aGlzLmhrPXRoaXMuYVs3XTt0aGlzLmNsPXRoaXMuYVs1XTsKdGhpcy5BbT10aGlzLmFbN107dGhpcy5qPXRoaXMuYVs5XX1jLnJyPWI7Yi5wcm90b3R5cGU9e3hyOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy55cjp0aGlzLlFrKGEpfSxRazpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuUms6dGhpcy5DaihhKX0sQ2o6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLkRqOnRoaXMueHQoYSl9LHh0OmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy55dDp0aGlzLm5tKGEpfSxubTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMub206dGhpcy5BdihhKX0sQXY6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLkJ2OnRoaXMuZ2soYSl9LGdrOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5oazp0aGlzLmJsKGEpfSxibDpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuY2w6dGhpcy56bShhKX0sem06ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5BbTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5qOgphfX19KShjKTt2YXIgZWI9Yy5ycnx8ZWIsQ2M9bmV3IGViKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9Q2MueHIoNCk7KGZ1bmN0aW9uKGMpe2MuYWo9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dGhpcy5xYT0hMTt0aGlzLkpnKCl9LEpnOmZ1bmN0aW9uKCl7dmFyIGI9ITEsYT0hMTt0aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5nZXRGaWd1cmUmJihiPXRoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLmdldEZpZ3VyZSgpKTtifHwoYj10aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5lbGVtZW50KTt0aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5nZXRWaWRlb0VsZW1lbnQmJihhPXRoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLmdldFZpZGVvRWxlbWVudCgpKTtiJiYhYSYmKGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXSk7CmImJmE/KHRoaXMuWShiKSx0aGlzLlooYSkpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5KZygpfS5iaW5kKHRoaXMpLDEwMCl9LHBhdXNlOmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLnBsYXkoKX0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIuZ2V0Q3VycmVudFRpbWUoKX0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIuZ2V0RHVyYXRpb24oKX0sTmE6ZnVuY3Rpb24oKXt0aGlzLnRoKCl9LHRoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRDdXJyZW50VGltZSgpOzE+dGhpcy5nZXREdXJhdGlvbigpLWI/dGhpcy5WJiYoMCx0aGlzLlYpKCk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnRoKCl9LmJpbmQodGhpcyksMTAwKX0sCk86ZnVuY3Rpb24oKXtyZXR1cm4iQml0bW92aW4ifX0pfSkoYyk7dmFyIGZiPWMuYWp8fGZiOyhmdW5jdGlvbihjKXtjLiRpPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LGRnOmZ1bmN0aW9uKGIpe3ZhciBhPWIuY29kZSxjPWIubWVzc2FnZTtiLmRhdGEmJihhPWIuZGF0YS5jb2RlLGM9Yi5kYXRhLm1lc3NhZ2UpOzEyMDUhPWEmJig5MDA9PWEmJjA8Yy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImVtcHR5Iik/KHRoaXMudygiZW1wdHkiKSx0aGlzLnRhKCkpOjEwMDk9PWF8fDMwMz09YXx8NDAzPT1hP3RoaXMudGEoKTp0aGlzLnMoKSl9LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2lmKGIuYWRFcnJvckV2ZW50cylmb3IodmFyIGE9MDthPGIuYWRFcnJvckV2ZW50cy5sZW5ndGg7YSsrKXRoaXMuZGcoYi5hZEVycm9yRXZlbnRzKTtiLnBsYXllci5vbigiYWRlcnJvciIsZnVuY3Rpb24oYSl7dGhpcy5kZyhhKX0uYmluZCh0aGlzKSk7CmIucGxheWVyLm9uKCJhZHF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygiYWRxdWFydGlsZSIpfS5iaW5kKHRoaXMpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCkucGxheWVyLmlzUGxheWluZygpP3RoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcyksMTApfX0pfSkoYyk7dmFyIGdiPWMuJGl8fGdiOyhmdW5jdGlvbihjKXtjLmJqPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sd2g6ZnVuY3Rpb24oYil7Yj1uZXcgZmIoYik7Yi5xYT90aGlzLlIoKTp0aGlzLk4oYil8fChiLkZkKE1hdGguY2VpbCgxRTEwKk1hdGgucmFuZG9tKCkpKSx0aGlzLlAoYiksKG5ldyBnYihiLHRoaXMuSykpLmcoKSl9LGc6ZnVuY3Rpb24oKXt0aGlzLkpwfHwodGhpcy5KcD0hMCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzdm06cGxheWVyaW5zdGFuY2UiLGZ1bmN0aW9uKGEpe3RoaXMud2goYS5kZXRhaWwpfS5iaW5kKHRoaXMpKSk7CmlmKHdpbmRvdy5fX3NjaG5lZVZvbk1vcmdlbiYmd2luZG93Ll9fc2NobmVlVm9uTW9yZ2VuLnZpZGVvUGxheWVySW5zdGFuY2VzKWZvcih2YXIgYj0wO2I8d2luZG93Ll9fc2NobmVlVm9uTW9yZ2VuLnZpZGVvUGxheWVySW5zdGFuY2VzLmxlbmd0aDtiKyspdGhpcy53aCh3aW5kb3cuX19zY2huZWVWb25Nb3JnZW4udmlkZW9QbGF5ZXJJbnN0YW5jZXNbYl0pO3RoaXMuUigpfX0pfSkoYyk7dmFyIGhiPWMuYmp8fGhiLFU9bmV3IGhiKHIpO1UuZygpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnJ0PXRoaXMuYVs0XTt0aGlzLmlsPXRoaXMuYVs5XTt0aGlzLmV0PXRoaXMuYVs4XTt0aGlzLkpxPXRoaXMuYVs1XTt0aGlzLkFyPXRoaXMuYVsxMF07dGhpcy5xbT10aGlzLmFbMl07dGhpcy5qaz10aGlzLmFbNF07dGhpcy53cT10aGlzLmFbOV07dGhpcy5VaT10aGlzLmFbNF07dGhpcy5Ecz0KdGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbOF19Yy5Jaj1iO2IucHJvdG90eXBlPXtxdDpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMucnQ6dGhpcy5obChhKX0saGw6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmlsOnRoaXMuZHQoYSl9LGR0OmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5ldDp0aGlzLklxKGEpfSxJcTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuSnE6dGhpcy56cihhKX0senI6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLkFyOnRoaXMucG0oYSl9LHBtOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5xbTp0aGlzLmlrKGEpfSxpazpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuams6dGhpcy52cShhKX0sdnE6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLndxOnRoaXMuVGkoYSl9LFRpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuVWk6dGhpcy5DcyhhKX0sQ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLkRzOnRoaXMuaShhKX0sCmk6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLmo6YX19fSkoYyk7dmFyIGliPWMuSWp8fGliLERjPW5ldyBpYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPURjLnF0KDQpOyhmdW5jdGlvbihjKXtjLlVsPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0UmF3UGxheWVyKCkpO3RoaXMuWShiKTtpZihiKXt2YXIgYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdO2F8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdKTt0aGlzLlooYSl9ZWxzZSB3aW5kb3cuc2V0VGltZW91dCh0aGlzLlMuYmluZCh0aGlzKSwxMDApfSxwYXVzZTpmdW5jdGlvbigpe3RyeXt0Zm1zdWl0ZSgiIyIrdGhpcy5nZXRSYXdQbGF5ZXIoKSkudGZtdmlkZW8oInBhdXNlIil9Y2F0Y2goYil7fX0sCnBsYXk6ZnVuY3Rpb24oKXt0cnl7dGZtc3VpdGUoIiMiK3RoaXMuZ2V0UmF3UGxheWVyKCkpLnRmbXZpZGVvKCJyZXN1bWUiKX1jYXRjaChiKXt0Zm1zdWl0ZSgiIyIrdGhpcy5nZXRSYXdQbGF5ZXIoKSkudGZtdmlkZW8oInBsYXkiKX19LEhjOmZ1bmN0aW9uKCl7dmFyIGI9bTtyZXR1cm4gYiYmYi5ydW5JbnNpZGVDb250YWluZXI/ITA6ITF9LE86ZnVuY3Rpb24oKXtyZXR1cm4iVEZNc3VpdGUifX0pfSkoYyk7dmFyIFY9Yy5VbHx8VjsoZnVuY3Rpb24oYyl7Yy5UbD12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTt4LldjKCIjIitiLCJvbkFkc01hbmFnZXJMb2FkZWQiLGZ1bmN0aW9uKCl7d2luZG93LnNldFRpbWVvdXQodGhpcy53LmJpbmQodGhpcyksMjAwKX0uYmluZCh0aGlzKSk7eC5XYygiIyIrYiwib2JqZWN0IixmdW5jdGlvbihhKXt0aGlzLmhzKGEpfS5iaW5kKHRoaXMpKTsKeC5XYygiIyIrYiwiYWRzTG9hZGVyRmFpbGVkIixmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsImFkc0xvYWRlckZhaWxlZCIpO3RoaXMuSSgpfS5iaW5kKHRoaXMpKTt4LldjKCIjIitiLCJyZXF1ZXN0QWRzRmFpbGVkIixmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsInJlcXVlc3RBZHNGYWlsZWQiKTt0aGlzLkkoKX0uYmluZCh0aGlzKSk7eC5DcSgpfSxoczpmdW5jdGlvbihiKXt2YXIgYT0iIixjO2ZvcihjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSl7YT1pc05hTihiW2NdKT8hMTpiW2NdO2lmKDEwMDk9PWJbY118fDEwMDE9PWJbY118fDMwMz09YltjXXx8NDAzPT1iW2NdKXt0aGlzLncoKTt0aGlzLnRhKCk7cmV0dXJufWZvcih2YXIgZCBpbiBiW2NdKWlmKGJbY10uaGFzT3duUHJvcGVydHkoZCkmJihhPWlzTmFOKGJbY11bZF0pPyExOmJbY11bZF0sMTAwOT09YltjXVtkXXx8MTAwMT09YltjXVtkXXx8MzAzPT1iW2NdW2RdfHw0MDM9PWJbY11bZF0pKXt0aGlzLncoKTsKdGhpcy50YSgpO3JldHVybn19dGhpcy5vKCJhZGVycm9yIixhKTt0aGlzLkkoKX19KX0pKGMpO3ZhciBXPWMuVGx8fFc7KGZ1bmN0aW9uKGMpe2MuVmw9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93LnRmbXN1aXRlKXtmb3IodmFyIGI9W10sYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSxjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10pO2E9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10pO3RoaXMueWQmJihiPWUuVW8oYix0aGlzLnlkKSk7Zm9yKGE9MDthPGIubGVuZ3RoO2ErKyl7dmFyIGQ9YlthXS5pZC5yZXBsYWNlKCJjb250ZW50RWxlbWVudCIsIiIpLGQ9bmV3IFYoZCk7aWYoIXRoaXMuTihkKSl7dGhpcy5QKGQpO3ZhciBmPW5ldyBXKGQsdGhpcy5LKTtmLmcoKX19Zm9yKGE9MDthPGIubGVuZ3RoO2ErKylmb3IoYz0KYlthXTtjLnBhcmVudEVsZW1lbnQ7KXt2YXIgYz1jLnBhcmVudEVsZW1lbnQsZz1jLmdldEF0dHJpYnV0ZSgiaWQiKTtpZihnKXRyeXt0Zm1zdWl0ZSgiIyIrZykudGZtdmlkZW8oInJlc3VtZSIpLHRoaXMueWR8fCh0aGlzLnlkPVtdKSx0aGlzLnlkLnB1c2goYlthXSksZD1uZXcgVihnKSx0aGlzLk4oZCl8fCh0aGlzLlAoZCksZj1uZXcgVyhkLHRoaXMuSyksZi5nKCkpfWNhdGNoKGspe319fXRoaXMuUigpfSxXYzpmdW5jdGlvbihiLGEsYyl7dGhpcy5jYXx8KHRoaXMuY2E9e30pO3RoaXMuY2FbYl18fCh0aGlzLmNhW2JdPXt9KTt0aGlzLmNhW2JdW2FdfHwodGhpcy5jYVtiXVthXT1bXSk7dGhpcy5jYVtiXVthXS5wdXNoKGMpfSx0dTpmdW5jdGlvbihiKXt2YXIgYT1iLnNQbGF5ZXJTZWxlY3RvcjtpZihiKWlmKCF0aGlzLmNhfHx0aGlzLmNhJiYhdGhpcy5jYVthXSl0aGlzLkVjfHwodGhpcy5FYz1bXSksdGhpcy5FYy5wdXNoKGIpLHRoaXMub3QoKSYmKHRoaXMuYWYoKSx0aGlzLmcoKSk7CmVsc2V7dmFyIGM9Im9iamVjdCI7InN0cmluZyI9PT10eXBlb2YgYi5vRXZlbnRUeXBlJiYoYz1iLm9FdmVudFR5cGUpO2lmKHRoaXMuY2FbYV1bY10mJjA8dGhpcy5jYVthXVtjXS5sZW5ndGgpZm9yKHZhciBkPTA7ZDx0aGlzLmNhW2FdW2NdLmxlbmd0aDtkKyspdGhpcy5jYVthXVtjXVtkXShiKX19LENxOmZ1bmN0aW9uKCl7aWYodGhpcy5FYylmb3IodmFyIGI9MDtiPHRoaXMuRWMubGVuZ3RoO2IrKyl7dmFyIGE9dGhpcy5FY1tiXSxjPWEuc1BsYXllclNlbGVjdG9yLGQ9Im9iamVjdCI7InN0cmluZyI9PT10eXBlb2YgYS5vRXZlbnRUeXBlJiYoZD1hLm9FdmVudFR5cGUpO2lmKHRoaXMuY2FbY11bZF0mJjA8dGhpcy5jYVtjXVtkXS5sZW5ndGgpZm9yKHZhciBlPTA7ZTx0aGlzLmNhW2NdW2RdLmxlbmd0aDtlKyspdGhpcy5jYVtjXVtkXVtlXShhKX19LHZpZGVvcGtnSW50ZXJmYWNlOmZ1bmN0aW9uKGIpeyJhdXRvUmVzaXplQ2FsbGJhY2tCZWZvcmUiIT1iLm9FdmVudFR5cGUuaCYmCiJhdXRvUmVzaXplQ2FsbGJhY2tBZnRlciIhPWIub0V2ZW50VHlwZS5oJiZ4LnR1KGIpfX0pfSkoYyk7dmFyIGpiPWMuVmx8fGpiLHg9bmV3IGpiKHIpO2NhKCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTGs9dGhpcy5hWzFdO3RoaXMuRXA9dGhpcy5hWzZdO3RoaXMuaj10aGlzLmFbNV19Yy5lbz1iO2IucHJvdG90eXBlPXtLazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTGs6dGhpcy5EcChhKX0sRHA6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLkVwOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuajphfX19KShjKTt2YXIga2I9Yy5lb3x8a2IsRWM9bmV3IGtiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9RWMuS2soNCk7CihmdW5jdGlvbihjKXtjLlhpPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubXV0ZWQ9ITE7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSYXdQbGF5ZXIoKSk7dGhpcy5ZKGIpO3ZhciBhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07YXx8KGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO3RoaXMuWihhKX0scGF1c2U6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5wYXVzZSgpfSl9LHBsYXk6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5wbGF5KCl9KX0sVmE6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5pc1BsYXlpbmcoKSYmCmIucGF1c2UoKX0pfSx2YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm11dGVkfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkJpbGRNZWRpYVBsYXllciJ9fSl9KShjKTt2YXIgbGI9Yy5YaXx8bGI7KGZ1bmN0aW9uKGMpe2MuWWk9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7JCgiIyIrYikuZGF0YSgibWVkaWFwbGF5ZXIiKS50aGVuKGZ1bmN0aW9uKGEpe3RoaXMucGxheWVyLm11dGVkPWEuZGF0YS5tdXRlZDthLm9uKCJlcnJvciIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIkVycm9yIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7YS5vbigidGltZXVwZGF0ZSIsZnVuY3Rpb24oKXtpZighYS5pc1BsYXlpbmd8fGEuaXNQbGF5aW5nKCkpYS5pc0FkJiZhLmlzQWQoKT90aGlzLncoKTphLmRhdGEmJmEuZGF0YS5hZHMmJmEuZGF0YS5hZHMudmFzdCYmYS5kYXRhLmFkcy52YXN0LnNyY2VzPwoodGhpcy5vKCJub0FkIiwicGxheWVkIiksdGhpcy5JKCkpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vKCJub0FkIiwicGxheWVkIik7dGhpcy5JKCEwKX0uYmluZCh0aGlzKSwyNTApfS5iaW5kKHRoaXMpKTthLm9uKCJwYXVzZSIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIndhaXRpbmciLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKTthLm9uKCJhZEVycm9yIixmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKTthLm9uKCJBZEVycm9yIixmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKTthLm9uKCJBZExvYWRlZCIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIkFkU3RhcnRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7YS5vbigiQWRWaWRlb1N0YXJ0IixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTthLm9uKCJBZFBsYXlpbmciLGZ1bmN0aW9uKCl7dGhpcy53KCl9LmJpbmQodGhpcykpO2Eub24oIkFkVmlkZW9GaXJzdFF1YXJ0aWxlIiwKZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7YS5vbigiQWRWaWRlb01pZHBvaW50IixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTthLm9uKCJBZFZpZGVvVGhpcmRRdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSl9LmJpbmQodGhpcykpfX0pfSkoYyk7dmFyIG1iPWMuWWl8fG1iOyhmdW5jdGlvbihjKXtjLlppPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm1lZGlhcGxheWVyIik7aWYod2luZG93LmRlJiZ3aW5kb3cuZGUuYmlsZCYmd2luZG93LmRlLmJpbGQubWVkaWFwbGF5ZXImJmImJjA8Yi5sZW5ndGgpZm9yKHZhciBhIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGM9YlthXSxkPSIiO3RyeXtkPWMuZ2V0QXR0cmlidXRlKCJpZCIpfWNhdGNoKGUpe2Q9Yy5pZH1pZihkJiYkKCIjIitkKS5kYXRhKCJtZWRpYXBsYXllciIpKXRyeXt2YXIgZz0KbmV3IGxiKGQpO3RoaXMuTihnKXx8KHRoaXMuUChnKSwobmV3IG1iKGcsdGhpcy5LKSkuZygpKX1jYXRjaChrKXt9fXRoaXMuUigpfSxOOmZ1bmN0aW9uKGIpe3ZhciBhPWIuZ2V0UmF3UGxheWVyKCk7JCgiIyIrYSk7Zm9yKHZhciBjIGluIHRoaXMuTWEpaWYoYT09dGhpcy5NYVtjXS5nZXRSYXdQbGF5ZXIoKSlyZXR1cm4hMDtyZXR1cm4gdGhpcy5NYVtiLmphKCldPyEwOiExfX0pfSkoYyk7dmFyIG5iPWMuWml8fG5iLG9iPW5ldyBuYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5Fbz10aGlzLmFbNF07dGhpcy50dj10aGlzLmFbMV07dGhpcy5mbT10aGlzLmFbNl07dGhpcy5vcD10aGlzLmFbM107dGhpcy5qPXRoaXMuYVsyXX1jLndyPWI7Yi5wcm90b3R5cGU9e0RvOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Fbzp0aGlzLnN2KGEpfSxzdjpmdW5jdGlvbihhKXtyZXR1cm4gMTwKYT90aGlzLnR2OnRoaXMuZW0oYSl9LGVtOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5mbTp0aGlzLm5wKGEpfSxucDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMub3A6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBwYj1jLndyfHxwYixGYz1uZXcgcGIoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1GYy5Ebyg0KTsoZnVuY3Rpb24oYyl7Yy5Vaz11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPSExO3RoaXMuZ2V0UmF3UGxheWVyKCkuZW52dmFycyYmdGhpcy5nZXRSYXdQbGF5ZXIoKS5lbnZ2YXJzKCk7dGhpcy5nZXRSYXdQbGF5ZXIoKS5jb250YWluZXJJRCYmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSYXdQbGF5ZXIoKS5jb250YWluZXJJRCkpOwpiJiYoYT1iKTt0aGlzLlkoYik7dGhpcy5aKGEpO3RoaXMuaHQodGhpcy5nZXRSYXdQbGF5ZXIoKSxiKTt0aGlzLmdldFJhd1BsYXllcigpfSxwYXVzZTpmdW5jdGlvbigpe30scGxheTpmdW5jdGlvbigpe30saHQ6ZnVuY3Rpb24oYixhKXtiJiZiLnBhdXNlRXZlbnQmJmEuYWRkRXZlbnRMaXN0ZW5lcihiLnBhdXNlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiZ0aGlzLmhhLnBhdXNlJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5wYXVzZSYmdGhpcy5oYS5wYXVzZSgpfS5iaW5kKHRoaXMpKTtiJiZiLnJlc3VtZUV2ZW50JiZhLmFkZEV2ZW50TGlzdGVuZXIoYi5yZXN1bWVFdmVudCxmdW5jdGlvbigpe3RoaXMuaGEmJnRoaXMuaGEucmVzdW1lJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5yZXN1bWUmJnRoaXMuaGEucmVzdW1lKCl9LmJpbmQodGhpcykpO2ImJmIubXV0ZUV2ZW50JiZhLmFkZEV2ZW50TGlzdGVuZXIoYi5tdXRlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiYKdGhpcy5oYS5tdXRlJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5tdXRlJiZ0aGlzLmhhLm11dGUoKX0uYmluZCh0aGlzKSk7YiYmYi51bm11dGVFdmVudCYmYS5hZGRFdmVudExpc3RlbmVyKGIudW5tdXRlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiZ0aGlzLmhhLnVubXV0ZSYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuaGEudW5tdXRlJiZ0aGlzLmhhLnVubXV0ZSgpfS5iaW5kKHRoaXMpKX0sU2c6ZnVuY3Rpb24oYil7dGhpcy5oYT1ifSxPOmZ1bmN0aW9uKCl7cmV0dXJuIk9ubHlIT01BRCJ9fSl9KShjKTt2YXIgcWI9Yy5Va3x8cWI7KGZ1bmN0aW9uKGMpe2MuVGs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKTt0aGlzLmVpPSExfSxnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKSxhPXRoaXMuZ2V0UGxheWVyKCk7Yi5hdXRvc3RhcnQmJiF0aGlzLmVpJiYodGhpcy5JKCksdGhpcy5laT0hMCx0aGlzLnJhKCkpOwphLklhKCkuYWRkRXZlbnRMaXN0ZW5lcihiLnBsYXlFdmVudCxmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKX19KX0pKGMpO3ZhciByYj1jLlRrfHxyYjsoZnVuY3Rpb24oYyl7Yy5Waz1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtKXtpZihtLnBsYXllcil7dmFyIGI9bS5wbGF5ZXI7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGIpdHJ5e2I9YigpfWNhdGNoKGEpe2UudHJhY2soIm9ubHlIT01BRENvbmZGYWlsZWQiLCIiLCEwKX1mb3IodmFyIGM9ITEsZD0wO2Q8Yi5sZW5ndGg7ZCsrKWM9bmV3IHFiKGJbZF0pLHRoaXMuTihjKXx8KHRoaXMuUChjKSwobmV3IHJiKGMsdGhpcy5LKSkuZygpKX19ZWxzZSB0aGlzLlIoKX19KX0pKGMpO3ZhciBzYj1jLlZrfHxzYixYPW5ldyBzYihyKTtYLmcoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CnRoaXMueGw9dGhpcy5hWzddO3RoaXMuemo9dGhpcy5hWzNdO3RoaXMud289dGhpcy5hWzddO3RoaXMueWk9dGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbNV19Yy5Ccj1iO2IucHJvdG90eXBlPXt3bDpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMueGw6dGhpcy55aihhKX0seWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnpqOnRoaXMudm8oYSl9LHZvOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMud286dGhpcy54aShhKX0seGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLnlpOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuajphfX19KShjKTt2YXIgdGI9Yy5Ccnx8dGIsR2M9bmV3IHRiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9R2Mud2woNCk7KGZ1bmN0aW9uKGMpe2MuR209dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSwKUzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCkucGFyZW50Tm9kZTt0aGlzLlkoYik7Yj10aGlzLmdldFJhd1BsYXllcigpO3RoaXMuWihiKTt0aGlzLmlzUGxheWluZz0hMTtiLmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5pc1BsYXlpbmc9ITB9LmJpbmQodGhpcykpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheSgpfSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGI/Yi5tdXRlZDohMH0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5jdXJyZW50VGltZX0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5kdXJhdGlvbn0sTmE6ZnVuY3Rpb24oKXswPHRoaXMuZ2V0RHVyYXRpb24oKSYmMDx0aGlzLmdldEN1cnJlbnRUaW1lKCkmJgoxLjU+dGhpcy5nZXREdXJhdGlvbigpLXRoaXMuZ2V0Q3VycmVudFRpbWUoKSYmdGhpcy5WPygwLHRoaXMuVikoKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuTmEoKX0uYmluZCh0aGlzKSw0MDApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIldGdjQifX0pfSkoYyk7dmFyIHViPWMuR218fHViOyhmdW5jdGlvbihjKXtjLkZtPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LFJiOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKSxiPWIuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIuaW1hQWRzTG9hZGVyfSxndDpmdW5jdGlvbihiKXtiLmFkZEV2ZW50TGlzdGVuZXIoZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUixmdW5jdGlvbihhKXthPWEuZ2V0RXJyb3IoKTthLmdldEVycm9yQ29kZSgpO3RoaXMuJGF8fCh0aGlzLiRhPVtdKTt0aGlzLiRhLnB1c2goYS5nZXRFcnJvckNvZGUoKSk7MTAwOT09YS5nZXRFcnJvckNvZGUoKXx8CjMwMz09YS5nZXRFcnJvckNvZGUoKXx8NDAzPT1hLmdldEVycm9yQ29kZSgpP3RoaXMudGEoKTp0aGlzLm8oImFkZXJyb3IiLGEuZ2V0RXJyb3JDb2RlKCkpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkc01hbmFnZXJMb2FkZWQiLGZ1bmN0aW9uKCl7dGhpcy5uYz0hMDt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yi5hZGRFdmVudExpc3RlbmVyKCJsb2ciLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKX0sZzpmdW5jdGlvbigpe3RoaXMucygpO3RoaXMuZ2V0UGxheWVyKCk7dGhpcy5BYT90aGlzLmd0KHRoaXMuQWEpOih0aGlzLkFhPXRoaXMuUmIoKSx3aW5kb3cuc2V0VGltZW91dCh0aGlzLmcuYmluZCh0aGlzKSwxMDApKX0sczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCk7aWYoYi5pc1BsYXlpbmcmJjE8Yi5nZXRDdXJyZW50VGltZSgpKXtpZighdGhpcy5BYSl7dGhpcy5JKCk7cmV0dXJufWlmKCF0aGlzLm5jKXt0aGlzLkkoKTtyZXR1cm59Yj0hMDtpZih0aGlzLiRhJiYKdGhpcy4kYS5sZW5ndGgmJjE8dGhpcy4kYS5sZW5ndGgpZm9yKHZhciBhPTA7YTx0aGlzLiRhLmxlbmd0aC0xO2ErKykxMDA5IT10aGlzLiRhW2FdJiYzMDMhPXRoaXMuJGFbYV0mJjQwMyE9dGhpcy4kYVthXSYmKGI9ITEpO2lmKGIpdGhpcy53KCJlbXB0eSIpLHRoaXMudGEoKTtlbHNle3RoaXMuSSgpO3JldHVybn19d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoKX0uYmluZCh0aGlzKSw1MDApfX0pfSkoYyk7dmFyIHZiPWMuRm18fHZiOyhmdW5jdGlvbihjKXtjLkhtPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe3RoaXMuVWE9LTE7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIik7aWYod2luZG93LndmdjRfaHRtbDVfcGxheWVyJiYwPGIubGVuZ3RoKWZvcih2YXIgYSBpbiBiKXt2YXIgYz1uZXcgdWIoYi5pdGVtKGEpKTt0aGlzLk4oYyl8fC0xPT1jLmlkLnNlYXJjaCgidmlkZW9fIil8fCh0aGlzLlAoYyksCihuZXcgdmIoYyx0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIHdiPWMuSG18fHdiLHhiPW5ldyB3YihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5McT10aGlzLmFbN107dGhpcy5Vcj10aGlzLmFbMl07dGhpcy5Hbz10aGlzLmFbNl07dGhpcy52cj10aGlzLmFbOV07dGhpcy5Edj10aGlzLmFbM107dGhpcy56bj10aGlzLmFbMV07dGhpcy5xcz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbN119Yy5Qcz1iO2IucHJvdG90eXBlPXtLcTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuTHE6dGhpcy5UcihhKX0sVHI6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLlVyOnRoaXMuRm8oYSl9LEZvOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5Hbzp0aGlzLnVyKGEpfSx1cjpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMudnI6dGhpcy5DdihhKX0sQ3Y6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8CmE/dGhpcy5Edjp0aGlzLnluKGEpfSx5bjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuem46dGhpcy5wcyhhKX0scHM6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLnFzOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLmo6YX19fSkoYyk7dmFyIHliPWMuUHN8fHliLEhjPW5ldyB5YigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPUhjLktxKDQpOyhmdW5jdGlvbihjKXtjLkhsPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm10di1wbGF5ZXItY29udGFpbmVyIilbMF07dGhpcy5ZKGIpO3RoaXMuWihiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdKTt0aGlzLlVlPSExfSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCk7CndpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpe3RoaXMuV3MoKX0uYmluZCh0aGlzKSw1MDApfSxXczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UG9zaXRpb24oKSxhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiZ0aGlzLlYmJnRoaXMuVigpfSxnZXREdXJhdGlvbjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT0wO2IucGxheWJhY2suZ2V0RHVyYXRpb24mJihhPWIucGxheWJhY2suZ2V0RHVyYXRpb24oKSk7cmV0dXJuIGF9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPTA7Yi5wbGF5YmFjay5nZXRQb3NpdGlvbiYmKGE9Yi5wbGF5YmFjay5nZXRQb3NpdGlvbigpKTtyZXR1cm4gYX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBsYXliYWNrLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLlVlJiZ3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLlVlKTsKdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5YmFjay5wbGF5KCl9LGlzUGxheWluZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIucGxheWJhY2smJmIucGxheWJhY2suZ2V0UGxheVN0YXRlPyhiLnBsYXliYWNrLmdldFBsYXlTdGF0ZSgpLCJwbGF5aW5nIj09Yi5wbGF5YmFjay5nZXRQbGF5U3RhdGUoKSk6ITF9LFp0OmZ1bmN0aW9uKCl7dGhpcy5VZT13aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt0aGlzLnBhdXNlKCl9LmJpbmQodGhpcyksMTApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIlJvY2tlcnkifX0pfSkoYyk7dmFyIHpiPWMuSGx8fHpiOyhmdW5jdGlvbihjKXtjLkdsPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSk7dGhpcy5mYz0wfSxnOmZ1bmN0aW9uKCl7dGhpcy5Tcj0xMDt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO3RoaXMuZmN8fCh0aGlzLmZjPTAsYi5hZGRFdmVudExpc3RlbmVyKCJhZEVycm9yIiwKZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiKTt0aGlzLnMoKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXt9KSk7d2luZG93LnZpZGVvcGxhemE/KHdpbmRvdy52aWRlb3BsYXphLmJ1aWxkRGF0ZXx8KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpLHdpbmRvdy52aWRlb3BsYXphLmNvcmU/KHdpbmRvdy52aWRlb3BsYXphLmNvcmUuQWRDYWxsTW9kdWxlfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5UcmFja2VyfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5tb2RlbHx8KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpLHdpbmRvdy52aWRlb3BsYXphLmNvcmUucGFyc2V8fCh0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGF6YSIpLAp0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5yZXF1ZXN0fHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSkpOih0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGF6YSIpLHRoaXMucygpKSx3aW5kb3cudmlkZW9wbGF6YS52ZXJzaW9uTnVtYmVyfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSkpOih0aGlzLmZjfHx0aGlzLmZjKyssdGhpcy5mYzw9dGhpcy5Tcj8odGhpcy5mYysrLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksNTAwKSk6KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nKCk/KHRoaXMuZ2V0UGxheWVyKCkuWnQoKSx0aGlzLkkoKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoKX0uYmluZCh0aGlzKSwxMDApfX0pfSkoYyk7CnZhciBBYj1jLkdsfHxBYjsoZnVuY3Rpb24oYyl7Yy5JbD1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJtdHYtcGxheWVyLWNvbnRhaW5lciIpLGE9ITE7YiYmYlswXSYmKGE9YlswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSkmJmFbMF0mJndpbmRvdy5wbGF5ZXJBcGkmJndpbmRvdy5wbGF5ZXJBcGkucGxheWJhY2smJmImJihiPW5ldyB6Yih3aW5kb3cucGxheWVyQXBpKSx0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBBYihiLHRoaXMuSykpLmcoKSkpO3RoaXMuUigpfX0pfSkoYyk7dmFyIEJiPWMuSWx8fEJiLENiPW5ldyBCYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5GbD10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbOF19Yy52cD1iO2IucHJvdG90eXBlPQp7RWw6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkZsOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuajphfX19KShjKTt2YXIgRGI9Yy52cHx8RGIsSWM9bmV3IERiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9SWMuRWwoNCk7KGZ1bmN0aW9uKGMpe2MuQ2w9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS5wYXJlbnROb2RlLnBhcmVudE5vZGU7dGhpcy5ZKGIpO2I9dGhpcy5nZXRSYXdQbGF5ZXIoKTt0aGlzLlooYik7dGhpcy5pc1BsYXlpbmc9ITE7Yi5hZGRFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIixmdW5jdGlvbigpe3RoaXMuaXNQbGF5aW5nPSEwfS5iaW5kKHRoaXMpKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlKCl9LApwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5KCl9LGdldEN1cnJlbnRUaW1lOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPSIiO2IuY3VycmVudFRpbWUmJihhPWIuY3VycmVudFRpbWUpO3JldHVybiBhfSxnZXREdXJhdGlvbjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT0wO2IuZHVyYXRpb24mJihhPWIuZHVyYXRpb24pO3JldHVybiBhfSxOYTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0Q3VycmVudFRpbWUoKSxhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiZhJiYxPmEtYj90aGlzLlYoKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuTmEoKX0uYmluZCh0aGlzKSwyMDApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIlJhZGlhbnRNUCJ9fSl9KShjKTt2YXIgRWI9Yy5DbHx8RWI7KGZ1bmN0aW9uKGMpe2MuQmw9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLmdldFBsYXllcigpLklhKCksYT10aGlzLmdldFBsYXllcigpLnZpZGVvVGFnO2EmJmEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZHN0YXJ0IixmdW5jdGlvbigpe3RoaXMucmEoKTt0aGlzLmdldFBsYXllcigpLmlzUGxheWluZz0hMX0uYmluZCh0aGlzKSk7dGhpcy5nZXRQbGF5ZXIoKTtiLmFkZEV2ZW50TGlzdGVuZXIoInBsYXlpbmciLGZ1bmN0aW9uKCl7dGhpcy5ObygpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkbG9hZGVkIixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkc3RhcnRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yj10aGlzLnBkKCk7MDxiLmdldEN1cnJlbnRUaW1lKCk/dGhpcy5HcigpOnRoaXMuZ2coKTtiLmF1dG9wbGF5JiZ3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuT2YoKXx8KHRoaXMubygiY29udGVudHBsYXkiKSx0aGlzLnMoITApKX0uYmluZCh0aGlzKSwKMUUzKX0sTm86ZnVuY3Rpb24oKXt0aGlzLk9mKCl8fHRoaXMucyghMCl9LEdyOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wZCgpOyFiLm5hJiZiLlcmJmIuT3YmJmIuUXYmJih0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIiksdGhpcy5zKCkpfSxnZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMucGQoKTtiLmFkc0xvYWRlcj9iLmFkc0xvYWRlci5hZGRFdmVudExpc3RlbmVyKGdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUuQURfRVJST1IsZnVuY3Rpb24oYSl7dmFyIGI7YTp7YT1hLmdldEVycm9yKCk7Zm9yKGIgaW4gYSlpZigibnVtYmVyIj09dHlwZW9mIGFbYl0pe2I9YVtiXTticmVhayBhfWI9dm9pZCAwfTEwMDk9PWJ8fDMwMz09Ynx8NDAzPT1iPyh0aGlzLncoKSx0aGlzLnRhKCkpOih0aGlzLm8oImFkZXJyb3IiLGIpLHRoaXMucygpKX0uYmluZCh0aGlzKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmdnKCl9LmJpbmQodGhpcyksMTAwKX0scGQ6ZnVuY3Rpb24oKXtpZighdGhpcy5uaClmb3IodmFyIGI9Cm0ucGxheWVyYXBpKCksYT10aGlzLmdldFBsYXllcigpLklhKCkuaWQsYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10uaWQ9PWEmJih0aGlzLm5oPWJbY10pO3JldHVybiB0aGlzLm5ofSxodzpmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuaW1hPyFpbWEudmlkZW8uY2xpZW50LmpzVGFnJiYhaW1hLnZpZGVvLmNsaWVudC50YWdnZWQmJiFpbWEudmlkZW8uY2xpZW50LmdldEVEYXRhOiExfSxzOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nP2I/dGhpcy5wZCgpLmFkc0xvYWRlcj90aGlzLkkoITApOnRoaXMuSSgpOnRoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwKX19KX0pKGMpO3ZhciBGYj1jLkJsfHxGYjsoZnVuY3Rpb24oYyl7Yy5EbD1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtJiZtLnBsYXllcmFwaSl7dmFyIGI9bS5wbGF5ZXJhcGkoKTtpZihiLmxlbmd0aCl7Zm9yKHZhciBhPQowO2E8Yi5sZW5ndGg7YSsrKXt2YXIgYz1uZXcgRWIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYlthXS5pZCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pO3RoaXMuTihjKXx8KHRoaXMuUChjKSwobmV3IEZiKGMsdGhpcy5LKSkuZygpKX1yZXR1cm59fXRoaXMuUigpfX0pfSkoYyk7dmFyIEdiPWMuRGx8fEdiLEhiPW5ldyBHYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5lcD10aGlzLmFbMV07dGhpcy51aT10aGlzLmFbMTBdO3RoaXMuSWk9dGhpcy5hWzZdO3RoaXMud3M9dGhpcy5hWzddO3RoaXMueG49dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbMl19Yy5RbD1iO2IucHJvdG90eXBlPXtjcDpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLmVwOnRoaXMudGkoYSl9LHRpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy51aTp0aGlzLkhpKGEpfSxIaTpmdW5jdGlvbihhKXtyZXR1cm4gMTA8CmE/dGhpcy5JaTp0aGlzLnZzKGEpfSx2czpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMud3M6dGhpcy53bihhKX0sd246ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLnhuOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuajphfX19KShjKTt2YXIgSWI9Yy5RbHx8SWIsSmM9bmV3IEliKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9SmMuY3AoNCk7KGZ1bmN0aW9uKGMpe2MuRWs9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5wbGF5ZXIuaWQpO0cmJihiPWIuZmlyc3RDaGlsZCk7aWYoYil7dGhpcy5ZKGIpO2lmKGIudGFnTmFtZSl7dmFyIGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXTthfHwoYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7CmF8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImVtYmVkIilbMF0pfWE/dGhpcy5aKGEpOnRoaXMucGEoKX1lbHNlIHRoaXMucGEoKX0sZnc6ZnVuY3Rpb24oKXt2YXIgYj0hMTswPD1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpLmluZGV4T2YoInNwaWVnZWwuZGUiKSYmKGI9ITApO3JldHVybiBifSxwYXVzZTpmdW5jdGlvbigpe2lmKEcpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7d2luZG93Ll9wbGF5LmNvbnRyb2wuaW50ZXJhY3QucGF1c2UoYi5pZCl9ZWxzZSB3aW5kb3cuX3BsYXkuYWRkb25zLnN2bS5zZW5kQ29tbWFuZCgicGF1c2UiKX0scGxheTpmdW5jdGlvbigpe2lmKEcpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7d2luZG93Ll9wbGF5LmNvbnRyb2wuaW50ZXJhY3QucGxheShiLmlkKX1lbHNlIHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLnNlbmRDb21tYW5kKCJwbGF5Iil9LFZhOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy52aWRlb1RhZztyZXR1cm4gYiYmIWIucGF1c2VkPwoodGhpcy5wYXVzZSgpLCEwKTohMX0sTzpmdW5jdGlvbigpe3JldHVybiJuZXh0In0sSGM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSWE6ZnVuY3Rpb24oKXt2YXIgYjtHPyhiPXRoaXMuZ2V0UmF3UGxheWVyKCksYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChiLmlkKS5maXJzdENoaWxkKTpiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLmdldFBsYXllckNvbnRhaW5lcigpKTtiIT10aGlzLmNvbnRhaW5lciYmKHRoaXMuY29udGFpbmVyPWIpO3JldHVybiB0aGlzLmNvbnRhaW5lcn19KX0pKGMpO3ZhciBZPWMuRWt8fFk7KGZ1bmN0aW9uKGMpe2MuRGs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMuV2U9IiI7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtiJiYodGhpcy5XZT1iLmlkKTtHP3dpbmRvdy5fcGxheS5jb25maWcuYWRkQWRkb25MaXN0ZW5lcihmdW5jdGlvbihhKXt2YXIgYj0KYS5wbGF5ZXJDb250YWluZXI7YiYmdGhpcy5XZSYmYiE9dGhpcy5XZXx8ImFkZXJyb3IiIT1hLmV2ZW50fHxlLkJhKCJ0ZWxlNS5kZSIpJiYicG9zdHJvbGwiPT1hLmFkVHlwZXx8KGEuYWRVUkwmJihtLmFkVGFnPWEuYWRVUkwpLHRoaXMubygiYWRlcnJvciIsYS5rdyksdGhpcy5JKCksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnJhKCl9LmJpbmQodGhpcyksMTAwKSl9LmJpbmQodGhpcyksInN2bSIpOndpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLnNldExpc3RlbmVyKGZ1bmN0aW9uKGEpeyJhZGVycm9yIj09YSYmKHRoaXMubygiYWRlcnJvciIpLHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDEwMCkpfS5iaW5kKHRoaXMpKX19KX0pKGMpO3ZhciBaPWMuRGt8fFo7KGZ1bmN0aW9uKGMpe2MuRms9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93Ll9wbGF5JiYKd2luZG93Ll9wbGF5LmFkZG9ucyYmd2luZG93Ll9wbGF5LmFkZG9ucy5zdm0pe0c9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLmdldFBsYXllckNvbnRhaW5lcj8hMTohMDt2YXIgYjtpZihHKWZvcih2YXIgYT13aW5kb3cuX3BsYXkuY29udHJvbC5nZXRJbnN0YW5jZXMoKSxjPWEubGVuZ3RoLGQ9MDtkPGM7ZCsrKXtpZihiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFbZF0pKWI9bmV3IFkoYiksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFooYix0aGlzLkspLGIuZygpKX1lbHNlIGlmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQod2luZG93Ll9wbGF5LmFkZG9ucy5zdm0uZ2V0UGxheWVyQ29udGFpbmVyKCkpKWI9bmV3IFkoYiksYi5xYT90aGlzLmFmKCk6dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFooYix0aGlzLkspLGIuZygpKX10aGlzLlIoKX19KX0pKGMpO3ZhciBHLEpiPWMuRmt8fEpiLEtiPW5ldyBKYihoYSk7Yz1jfHwKe307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnhwPXRoaXMuYVs1XTt0aGlzLlFtPXRoaXMuYVs3XTt0aGlzLlNtPXRoaXMuYVs0XTt0aGlzLnNpPXRoaXMuYVs5XTt0aGlzLnZqPXRoaXMuYVs4XTt0aGlzLlhsPXRoaXMuYVs5XTt0aGlzLkV1PXRoaXMuYVsxMF07dGhpcy5ZdD10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs0XX1jLllvPWI7Yi5wcm90b3R5cGU9e3dwOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy54cDp0aGlzLlBtKGEpfSxQbTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuUW06dGhpcy5SbShhKX0sUm06ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5TbTp0aGlzLnJpKGEpfSxyaTpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuc2k6dGhpcy51aihhKX0sdWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLnZqOnRoaXMuV2woYSl9LFdsOmZ1bmN0aW9uKGEpe3JldHVybiA1PAphP3RoaXMuWGw6dGhpcy5EdShhKX0sRHU6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLkV1OnRoaXMuWHQoYSl9LFh0OmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5ZdDp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLmo6YX19fSkoYyk7dmFyIExiPWMuWW98fExiLEtjPW5ldyBMYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPUtjLndwKDQpOyhmdW5jdGlvbihjKXtjLk5tPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpO2lmKGImJmJbMF0pe2Zvcih2YXIgYT1iPWJbMF07YSYmYS5wYXJlbnROb2RlOyl7aWYoIkJPRFkiPT1hLnBhcmVudE5vZGUubm9kZU5hbWUpe2E9YS5wYXJlbnROb2RlO2JyZWFrfWE9YS5wYXJlbnROb2RlfXRoaXMuWihiKTsKdGhpcy5ZKGEpO3RoaXMuU2Q9ITE7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhkRXZlbnQiLGZ1bmN0aW9uKGEpe2lmKGEuZGV0YWlsKXtpZigiY29udGVudFBsYXllclBsYXkiPT1hLmRldGFpbC5uYW1lKXRyeXt3aW5kb3cuREw4X29uQWRDb21wbGV0ZWQoKSx0aGlzLlNkPSExfWNhdGNoKGIpe31pZigiYWRSZXF1ZXN0Ij09YS5kZXRhaWwubmFtZSl0cnl7dGhpcy5TZHx8KHRoaXMuU2Q9ITAsd2luZG93LkRMOF9vbkFkU3RhcnRlZCgpKX1jYXRjaChjKXt9fX0uYmluZCh0aGlzKSl9ZWxzZSB0aGlzLnBhKCl9LHBhdXNlOmZ1bmN0aW9uKCl7dHJ5e3dpbmRvdy5ETDhfb25Db250ZW50UGF1c2VSZXF1ZXN0ZWQoKX1jYXRjaChiKXt0aGlzLnZpZGVvVGFnLnBhdXNlKCl9fSxwbGF5OmZ1bmN0aW9uKCl7dHJ5e3dpbmRvdy5ETDhfb25Db250ZW50UmVzdW1lUmVxdWVzdGVkKCl9Y2F0Y2goYil7dGhpcy52aWRlb1RhZy5wbGF5KCl9fSxWYTpmdW5jdGlvbigpe2lmKCF0aGlzLnZpZGVvVGFnLnBhdXNlZClyZXR1cm4gdGhpcy5wYXVzZSgpLAohMH0sTzpmdW5jdGlvbigpe3JldHVybiJ4eW1hdGljIn19KX0pKGMpO3ZhciBNYj1jLk5tfHxNYjsoZnVuY3Rpb24oYyl7Yy5NbT12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxpdDpmdW5jdGlvbihiKXtiJiZiLmFkZEV2ZW50TGlzdGVuZXImJihiLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBsZXRlIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJpbXByZXNzaW9uIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJmaXJzdHF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJtaWRwb2ludCIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigidGhpcmRxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigiYWRzTWFuYWdlckxvYWRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigiYWRzRXJyb3IiLApmdW5jdGlvbihhKXt0aGlzLmJkKGEpfS5iaW5kKHRoaXMpKSxiLmFkZEV2ZW50TGlzdGVuZXIoImFkRXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuYmQoYSl9LmJpbmQodGhpcykpKTtiJiZiLmFkZEFkRXJyb3JMaXN0ZW5lciYmYi5hZGRBZEVycm9yTGlzdGVuZXIoZnVuY3Rpb24oYSl7dGhpcy5iZChhKX0uYmluZCh0aGlzKSl9LGJkOmZ1bmN0aW9uKGIpe3ZhciBhPXt9O2IuZ2V0RXJyb3ImJihiLmdldEVycm9yKCksYT1iLmdldEVycm9yKCkpO2EuZ2V0RXJyb3JDb2RlPyhhLmdldEVycm9yQ29kZSgpLHRoaXMubygiYWRlcnJvciIsYS5nZXRFcnJvckNvZGUoKSksMTAwOT09YS5nZXRFcnJvckNvZGUoKXx8MzAzPT1hLmdldEVycm9yQ29kZSgpfHw0MDM9PWEuZ2V0RXJyb3JDb2RlKCk/dGhpcy53KCk6dGhpcy5JKCkpOih0aGlzLm8oIm5vZnJhbWV3b3JrIiksdGhpcy5JKCkpfSxMZjpmdW5jdGlvbigpe2lmKHdpbmRvdy5fX2RsOF9hZEVycm9yRXZlbnRCdWNrZXQpZm9yKHZhciBiPTA7YjwKd2luZG93Ll9fZGw4X2FkRXJyb3JFdmVudEJ1Y2tldC5sZW5ndGg7YisrKXRoaXMuYmQod2luZG93Ll9fZGw4X2FkRXJyb3JFdmVudEJ1Y2tldFtiXSk7dGhpcy51YSgpfHx3aW5kb3cuc2V0VGltZW91dCh0aGlzLkxmLmJpbmQodGhpcyksMTAwKX0sZzpmdW5jdGlvbigpe3dpbmRvdy5fX2RsOF9hZHNMb2FkZXImJnRoaXMuaXQod2luZG93Ll9fZGw4X2Fkc0xvYWRlcik7dGhpcy5MZigpfX0pfSkoYyk7dmFyIE5iPWMuTW18fE5iOyhmdW5jdGlvbihjKXtjLk9tPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe2lmKHdpbmRvdy5ETDhfR0xPQkFMUyl7dmFyIGI9bmV3IE1iKHdpbmRvdy5ETDhfR0xPQkFMUyk7Yi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLChuZXcgTmIoYix0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIE9iPWMuT218fE9iLFBiPW5ldyBPYihoYSk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT0KQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLkZyPXRoaXMuYVsyXTt0aGlzLklzPXRoaXMuYVs4XTt0aGlzLlhuPXRoaXMuYVsxXTt0aGlzLlVqPXRoaXMuYVszXTt0aGlzLlpxPXRoaXMuYVs5XTt0aGlzLmo9dGhpcy5hWzZdfWMuRm49YjtiLnByb3RvdHlwZT17RXI6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLkZyOnRoaXMuSHMoYSl9LEhzOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5Jczp0aGlzLlduKGEpfSxXbjpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuWG46dGhpcy5UaihhKX0sVGo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlVqOnRoaXMuWXEoYSl9LFlxOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5acTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLmo6YX19fSkoYyk7dmFyIFFiPWMuRm58fFFiLExjPW5ldyBRYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLAoibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1MYy5Fcig0KTsoZnVuY3Rpb24oYyl7Yy5qbT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt0aGlzLnJoPSExO3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7aWYoYi52aWRlb01vZGVsKXt2YXIgYT1iLnZpZGVvTW9kZWwuZ2V0KCJwbGF5ZXJFbGVtZW50Iik7aWYoYSl7dGhpcy5ZKGEpO3ZhciBjPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07Y3x8KGM9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO2M/KHRoaXMuWihjKSxiLnZpZGVvTW9kZWwub2JzZXJ2ZSgicG9zaXRpb24iLGZ1bmN0aW9uKGEpe3RoaXMuYXM9YX0uYmluZCh0aGlzKSksYi52aWRlb01vZGVsLm9ic2VydmUoImR1cmF0aW9uIixmdW5jdGlvbihhKXt0aGlzLmR1cmF0aW9uPWF9LmJpbmQodGhpcykpKTp0aGlzLnBhKCl9ZWxzZSB0aGlzLnBhKCl9ZWxzZSB0aGlzLnBhKCl9LApxdzpmdW5jdGlvbigpe30sdmE6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLGE9MTtyZXR1cm4gYi52aWRlb01vZGVsJiZiLnZpZGVvTW9kZWwuZ2V0JiYoYT1iLnZpZGVvTW9kZWwuZ2V0KCJ2b2x1bWUiKSwwPGEpPyExOiEwfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkudmlkZW9Nb2RlbC5wYXVzZSgpfSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb01vZGVsLnBsYXkoKX0sVmE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb01vZGVsLmdldCgiaXNQYXVzZWQiKT8hMToodGhpcy5wYXVzZSgpLCEwKX0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc30sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kdXJhdGlvbn0sTzpmdW5jdGlvbigpe3JldHVybiJ0djIifSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkudmlkZW9Nb2RlbC5vYnNlcnZlKCJwb3NpdGlvbiIsCmZ1bmN0aW9uKGIpe3RoaXMuTWQoYil9LmJpbmQodGhpcykpfSxNZDpmdW5jdGlvbihiKXt0aGlzLmdldFJhd1BsYXllcigpO3RoaXMuZ2V0Q3VycmVudFRpbWUoKT5iJiYoYj10aGlzLmdldEN1cnJlbnRUaW1lKCkpO3ZhciBhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiYhdGhpcy5yaCYmKHRoaXMucmg9ITAsdGhpcy5WJiZ0aGlzLlYoKSl9fSl9KShjKTt2YXIgUD1jLmptfHxQOyhmdW5jdGlvbihjKXtjLmltPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LEFhOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZighdGhpcy5wZSlpZih0aGlzLkFifHwodGhpcy5BYj0wKSx0aGlzLkFiKyssMTU8dGhpcy5BYil7aWYod2luZG93LmltYSYmd2luZG93LmltYS5jb21tb24mJndpbmRvdy5pbWEuSW1hU2RrU2V0dGluZ3MmJndpbmRvdy5pbWEuY29tbW9uLmdldFZpZGVvTWV0YWRhdGEmJndpbmRvdy5pbWEuY29tbW9uLnRyaWdnZXJNZWFzdXJhYmxlRXZlbnQpcmV0dXJuIHdpbmRvdy5jYW5SdW5BZHM/CnRoaXMuSXQoKTp0aGlzLnMoITApLCEwO3RoaXMubygibm9mcmFtZXdvcmsiLCJJTUEiKTtiLnZpZGVvTW9kZWwuZ2V0KCJhZFRhZ1VybCIpP3RoaXMucygpOnRoaXMucyghMCl9ZWxzZSBpZihiPWIudmlkZW9Nb2RlbC5nZXQoImFkc0xvYWRlciIpKXt0aGlzLnBlPSEwO3ZhciBhPSJhZEVycm9yIjt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudCYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7Yi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhKTt0aGlzLmRhfHwodGhpcy5vKCJhZGVycm9yIix0aGlzLlQpLHRoaXMucygpKX0uYmluZCh0aGlzKSl9ZWxzZSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuQWEoKX0uYmluZCh0aGlzKSwxMCl9LHZkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF9LApnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYz0hMDtjfHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGM9ITApOyJudW1iZXIiPT10eXBlb2YgYT8oYi5UPWEsYi5vKCJhZGVycm9yIixhKSk6Yi5vKCJhZGVycm9yIil9cmV0dXJuIGN9Yi5vcmlnaW5hbEV2ZW50JiYoYj1iLm9yaWdpbmFsRXZlbnQpO2lmKGIuZ2V0RXJyb3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmdldEVycm9yKXt2YXIgYz1iLmdldEVycm9yKCk7aWYoYy5nZXRFcnJvckNvZGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLmdldEVycm9yQ29kZSYmYShjLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7cmV0dXJufX1mb3IodmFyIGQgaW4gYilpZihiLmhhc093blByb3BlcnR5KGQpJiZiW2RdJiZiW2RdLmFkRXJyb3ImJmJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJgoiZnVuY3Rpb24iPT10eXBlb2YgYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmYShiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTticmVha319LGc6ZnVuY3Rpb24oKXt0aGlzLlQ9dGhpcy5UfHwhMTt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO3RoaXMuQWEoKTtiLnZpZGVvTW9kZWwub2JzZXJ2ZSgicGxheVN0YXRlIixmdW5jdGlvbihhKXsicGxheWluZyI9PWEmJih0aGlzLmlzUGxheWluZz0hMCl9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJwbGF5TW9kZSIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJjdXJyZW50QWRTZWdtZW50IixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7Yi52aWRlb01vZGVsLm9ic2VydmUoImlzQWRzUGxheWluZyIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9yIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7CmIudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9ycyIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9yc1giLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKTtiLnZpZGVvTW9kZWwub2JzZXJ2ZSgiTk9OX0VWRU5UIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSl9LHM6ZnVuY3Rpb24oYil7dGhpcy5pc1BsYXlpbmc/dGhpcy5JKGIpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwKX19KX0pKGMpO3ZhciBRPWMuaW18fFE7KGZ1bmN0aW9uKGMpe2Mua209cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpO3RoaXMuVWE9LTF9LGc6ZnVuY3Rpb24oKXtpZih3aW5kb3cuaW5zZXJ0ZWRQbGF5ZXIpe3ZhciBiPW5ldyBQKHdpbmRvdy5pbnNlcnRlZFBsYXllcik7Yi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKX1pZih3aW5kb3cuVFYyUGxheWVycyYmCndpbmRvdy5UVjJQbGF5ZXJzLmxlbmd0aClmb3IodmFyIGE9MDthPHdpbmRvdy5UVjJQbGF5ZXJzLmxlbmd0aDthKyspYj1uZXcgUCh3aW5kb3cuVFYyUGxheWVyc1thXSksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKTtlbHNlIGlmKHdpbmRvdy5UVjJQbGF5ZXJzKWZvcihhIGluIHdpbmRvdy5UVjJQbGF5ZXJzKXdpbmRvdy5UVjJQbGF5ZXJzLmhhc093blByb3BlcnR5KGEpJiZ3aW5kb3cuVFYyUGxheWVyc1thXS52aWRlb01vZGVsJiYoYj1uZXcgUCh3aW5kb3cuVFYyUGxheWVyc1thXSksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKSk7dGhpcy5hZigpO3RoaXMuUigpfX0pfSkoYyk7dmFyIFJiPWMua218fFJiLFNiPW5ldyBSYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy56bD0KdGhpcy5hWzFdO3RoaXMuVHE9dGhpcy5hWzRdO3RoaXMuS3M9dGhpcy5hWzFdO3RoaXMuTHA9dGhpcy5hWzddO3RoaXMuaj10aGlzLmFbNl19Yy5MbT1iO2IucHJvdG90eXBlPXt5bDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuemw6dGhpcy5TcShhKX0sU3E6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlRxOnRoaXMuSnMoYSl9LEpzOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Lczp0aGlzLktwKGEpfSxLcDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuTHA6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBUYj1jLkxtfHxUYixNYz1uZXcgVGIoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1NYy55bCg0KTsoZnVuY3Rpb24oYyl7Yy50az11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXJDb250YWluZXI7dGhpcy5ZKGIpO3ZhciBhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07YXx8KGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO3RoaXMuWihhKTthJiZ0aGlzLlkoYS5wYXJlbnROb2RlKX0sTzpmdW5jdGlvbigpe3JldHVybiJsYW9sYTEifSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5hcGkucGxheSgpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkuYXBpLnBhdXNlKCl9fSl9KShjKTt2YXIgYWE9Yy50a3x8YWE7KGZ1bmN0aW9uKGMpe2Muc2s9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMuT2c9MDt0aGlzLlQ9dGhpcy5UfHwhMTt0aGlzLmdldFBsYXllcigpO3RoaXMuZGE9dGhpcy5CYz10aGlzLkFhPXRoaXMuWWM9ITE7dGhpcy52aD1lLkViKDEwKTsKdGhpcy5YZygpfSxYZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7aWYoYi5zdWJQbGF5ZXImJmIuc3ViUGxheWVyLmFkc0ludGVyZmFjZSYmYi5zdWJQbGF5ZXIuYWRzSW50ZXJmYWNlLmFkc0xvYWRlcilyZXR1cm4gdGhpcy5uYT1iLnN1YlBsYXllci5hZHNJbnRlcmZhY2UuYWRzTG9hZGVyLHRoaXMub2IoKSwhMDt0aGlzLk9nKys7aWYoMTA8dGhpcy5PZyl0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIiksd2luZG93LmltYSYmd2luZG93LmltYS5jb21tb24mJndpbmRvdy5pbWEuSW1hU2RrU2V0dGluZ3M/dGhpcy5zKCEwKTp0aGlzLnMoKTtlbHNlIHJldHVybiB3aW5kb3cuc2V0VGltZW91dCh0aGlzLlhnLmJpbmQodGhpcyksMTAwKSwhMX0sb2I6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm5hO2lmKGIpe3ZhciBhPSJhZEVycm9yIixjPSJsb2ciO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiYKZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYoYz1nb29nbGUuaW1hLkFkRXZlbnQuVHlwZS5MT0cpOyJmdW5jdGlvbiIhPT10eXBlb2YgYi5hZGRFdmVudExpc3RlbmVyP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKTooYi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKGMsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCk7dGhpcy5mYSghMCl9LmJpbmQodGhpcykpKX1lbHNlIHRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLm9iKCl9LmJpbmQodGhpcyksCjIwKX0sZ2E6ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYShhLGIpe3ZhciBjPSExO2lmKGEpe2lmKDEwMDk9PWF8fDMwMz09YXx8NDAzPT1hKWM9ITA7Y3x8IWEuaW5kZXhPZnx8LTE9PT1hLmluZGV4T2YoIjEwMDkiKSYmLTE9PT1hLmluZGV4T2YoIjMwMyIpJiYtMT09PWEuaW5kZXhPZigiNDAzIil8fChjPSEwKTsibnVtYmVyIj09dHlwZW9mIGEmJihiLlQ9YSxiLm8oImFkZXJyb3IiLGEpKX1yZXR1cm4gY31iLm9yaWdpbmFsRXZlbnQmJihiPWIub3JpZ2luYWxFdmVudCk7aWYoYi5nZXRFcnJvciYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0RXJyb3Ipe3ZhciBjPWIuZ2V0RXJyb3IoKTtpZihjLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuZ2V0RXJyb3JDb2RlJiZhKGMuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTtyZXR1cm59fWZvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkmJmJbZF0mJmJbZF0uYWRFcnJvciYmYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmCiJmdW5jdGlvbiI9PXR5cGVvZiBiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlJiZhKGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO2JyZWFrfX0sdmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYX0sRGE6ZnVuY3Rpb24oKXt0aGlzLmRhPSEwfSxmYTpmdW5jdGlvbihiKXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZGE/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwMCl9LHM6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTthLmFwaS5wbGF5ZWQmJmEuYXBpLnBsYXllZCgpP3RoaXMuSShiKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMucyhiKX0uYmluZCh0aGlzKSwxMCl9fSl9KShjKTt2YXIgYmE9Yy5za3x8YmE7KGZ1bmN0aW9uKGMpe2MudWs9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9ITE7CmlmKHdpbmRvdy5sMVBsYXllckluc3RhbmNlJiZ3aW5kb3cubDFQbGF5ZXJJbnN0YW5jZS5sZW5ndGgmJjA8d2luZG93LmwxUGxheWVySW5zdGFuY2UubGVuZ3RoKWZvcih2YXIgYT0wO2E8d2luZG93LmwxUGxheWVySW5zdGFuY2UubGVuZ3RoO2ErKyliPW5ldyBhYSh3aW5kb3cubDFQbGF5ZXJJbnN0YW5jZVswXSksdGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IGJhKGIsdGhpcy5LKSxiLmcoKSk7ZWxzZSB3aW5kb3cucGxheWVyJiZ3aW5kb3cucGxheWVyLmFwaSYmd2luZG93LnBsYXllci5sMVBsYXllciYmKGI9bmV3IGFhKHdpbmRvdy5wbGF5ZXIpLHRoaXMuTihiKXx8KHRoaXMuUChiKSxiPW5ldyBiYShiLHRoaXMuSyksYi5nKCkpKTt0aGlzLlIoKX19KX0pKGMpO3ZhciBVYj1jLnVrfHxVYixWYj1uZXcgVWIocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTnU9dGhpcy5hWzJdOwp0aGlzLmtzPXRoaXMuYVs5XTt0aGlzLmJwPXRoaXMuYVsxXTt0aGlzLnd2PXRoaXMuYVsxMF07dGhpcy5Kaz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbM119Yy5Hbj1iO2IucHJvdG90eXBlPXtNdTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuTnU6dGhpcy5qcyhhKX0sanM6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5rczp0aGlzLmFwKGEpfSxhcDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuYnA6dGhpcy52dihhKX0sdnY6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnd2OnRoaXMuSWsoYSl9LElrOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5Kazp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLmo6YX19fSkoYyk7dmFyIFdiPWMuR258fFdiLE5jPW5ldyBXYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPQpOYy5NdSg0KTsoZnVuY3Rpb24oYyl7Yy5Xaj11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPSExO3RyeXtiPXRoaXMuZ2V0UmF3UGxheWVyKClbMF0ucGFyZW50Tm9kZSxhPXRoaXMuZ2V0UmF3UGxheWVyKClbMF19Y2F0Y2goYyl7fWImJmE/KHRoaXMuWShiKSx0aGlzLlooYSksdGhpcy5nZXRSYXdQbGF5ZXIoKSk6dGhpcy5wYSgpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkuY3NzKCJkaXNwbGF5Iiwibm9uZSIpfSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5jc3MoImRpc3BsYXkiLCJibG9jayIpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkdBTlZpZGVvIn19KX0pKGMpO3ZhciBYYj1jLldqfHxYYjsoZnVuY3Rpb24oYyl7Yy5Waj12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dGhpcy5mZygpfSxmZzpmdW5jdGlvbihiKXt3aW5kb3cuR0FOX1ZpZGVvfHwKKGI/KHRoaXMubygibm9mcmFtZXdvcmsiLCJJTUEiKSx0aGlzLkkoKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmZnKCEwKX0uYmluZCh0aGlzKSwxMDApKX19KX0pKGMpO3ZhciBZYj1jLlZqfHxZYjsoZnVuY3Rpb24oYyl7Yy5Yaj1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2FtZSIpO2lmKGImJiJESVYiPT1iLm5vZGVOYW1lJiZ3aW5kb3cudmlkZW9hZF9nYW5fc3RhcnQmJndpbmRvdy4kJiZ3aW5kb3cuJCgiZGl2I2dhbWUiKSl7Yj1uZXcgWGIod2luZG93LiQoImRpdiNnYW1lIikpO2lmKGIucWEpe3RoaXMuUigpO3JldHVybn1pZighdGhpcy5OKGIpKXt0aGlzLlAoYik7KG5ldyBZYihiLHRoaXMuSykpLmcoKTt0aGlzLlIoKTtyZXR1cm59fXRoaXMuUigpfX0pfSkoYyk7dmFyIFpiPWMuWGp8fFpiLCRiPW5ldyBaYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPQpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMueGo9dGhpcy5hWzldO3RoaXMuYW89dGhpcy5hWzNdO3RoaXMuR3Y9dGhpcy5hWzVdO3RoaXMuaj10aGlzLmFbNV19Yy5NcT1iO2IucHJvdG90eXBlPXt3ajpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMueGo6dGhpcy4kbihhKX0sJG46ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmFvOnRoaXMuRnYoYSl9LEZ2OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuR3Y6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBhYz1jLk1xfHxhYyxPYz1uZXcgYWMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1PYy53aig0KTsoZnVuY3Rpb24oYyl7Yy5raT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0KdGhpcy5nZXRSYXdQbGF5ZXIoKS5nZXRXcmFwcGVyKCk7Yj8odGhpcy5ZKGIpLChiPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pP3RoaXMuWihiKTp0aGlzLnBhKCkpOnRoaXMucGEoKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlVmlkZW8oKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheVZpZGVvKCl9LE86ZnVuY3Rpb24oKXtyZXR1cm4iQVYifX0pfSkoYyk7dmFyIGJjPWMua2l8fGJjOyhmdW5jdGlvbihjKXtjLmppPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2Iub24oImFkRXJyb3IiLGZ1bmN0aW9uKCl7d2luZG93LnNldFRpbWVvdXQodGhpcy5zLmJpbmQodGhpcyksMTAwKX0uYmluZCh0aGlzKSk7Yi5vbigiYWRGcmFtZXdvcmtOb3RBdmFpbGFibGUiLGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcykpOwp0aGlzLmhlKCk7dGhpcy5iZygpfSxnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYz0hMDtjfHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGM9ITApOyJudW1iZXIiPT10eXBlb2YgYSYmKGIuVD1hLGIubygiYWRlcnJvciIsYSkpfXJldHVybiBjfWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTtpZihiLmdldEVycm9yJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5nZXRFcnJvcil7dmFyIGM9Yi5nZXRFcnJvcigpO2lmKGMuZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5nZXRFcnJvckNvZGUmJmEoYy5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO3JldHVybn19Zm9yKHZhciBkIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSYmYltkXSYmYltkXS5hZEVycm9yJiYKYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJmEoYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7YnJlYWt9fSx2ZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhfSxEYTpmdW5jdGlvbigpe3RoaXMuZGE9ITA7dGhpcy53KCJlbXB0eSB2YXN0Iil9LGJnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZihiLmdldFNlbGVjdGVkQWRIYW5kbGVyKWlmKChiPWIuZ2V0U2VsZWN0ZWRBZEhhbmRsZXIoKSkmJmIuYWRzTG9hZGVyKWZvcih2YXIgYT0wO2E8Yi5hZHNMb2FkZXIubGVuZ3RoO2ErKyl7dmFyIGM9ImFkRXJyb3IiO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SJiYKKGM9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7Yi5hZHNMb2FkZXJbYV0uYWRkRXZlbnRMaXN0ZW5lcihjLGZ1bmN0aW9uKGEpe2EuZ2V0RXJyb3ImJihhPWEuZ2V0RXJyb3IoKSk7dmFyIGI9ITE7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYj0hMDtpZighYilmb3IodmFyIGMgaW4gYSl7aWYoYVtjXSYmYVtjXS5pbmRleE9mJiYoLTEhPWFbY10uaW5kZXhPZigiMTAwOSIpfHwtMSE9YVtjXS5pbmRleE9mKCIzMDMiKXx8LTEhPWFbY10uaW5kZXhPZigiNDAzIikpKXtiPSEwO2JyZWFrfWlmKGFbY10mJigxMDA5PT1hW2NdfHwzMDM9PWFbY118fDQwMz09YVtjXSkpe2I9ITA7YnJlYWt9fWI/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKCl9LmJpbmQodGhpcykpfWVsc2Ugd2luZG93LnNldFRpbWVvdXQodGhpcy5iZy5iaW5kKHRoaXMpLDUwKTtlbHNlIHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuaGUuYmluZCh0aGlzKSwxMDApfSxoZTpmdW5jdGlvbigpe2lmKCF0aGlzLnVhKCkpe3ZhciBiPQp0aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyJwbGF5aW5nIj09Yi5nZXRQbGF5U3RhdGUoKT9iLmdldEFkSW5mbygpPyh3aW5kb3cuc2V0VGltZW91dCh0aGlzLnJhLmJpbmQodGhpcyksMTApLHRoaXMudygpKTpiLl9wbGF5ZXJPcHRpb25zJiZiLl9wbGF5ZXJPcHRpb25zLnBsYXlBZHZlcnRpc2VtZW50c3x8Yi5fYWRSZWdpc3RlcmVkP3RoaXMucygpOnRoaXMucyghMCk6d2luZG93LnNldFRpbWVvdXQodGhpcy5oZS5iaW5kKHRoaXMpLDEwMCl9fSxzOmZ1bmN0aW9uKGIpe3dpbmRvdy5zZXRUaW1lb3V0KHRoaXMucmEuYmluZCh0aGlzKSwxRTQpO3RoaXMuSShiKX19KX0pKGMpO3ZhciBjYz1jLmppfHxjYzsoZnVuY3Rpb24oYyl7Yy5saT1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFhhOmZ1bmN0aW9uKGIpe2I9bmV3IGJjKGIpO2IucWE/dGhpcy5SKCk6dGhpcy5OKGIpfHwodGhpcy5QKGIpLChuZXcgY2MoYix0aGlzLkspKS5nKCkpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93LnNyYXZ2cGxQbGF5ZXJJbnN0YW5jZXMpZm9yKHZhciBiPQowO2I8d2luZG93LnNyYXZ2cGxQbGF5ZXJJbnN0YW5jZXMubGVuZ3RoO2IrKyl0aGlzLlhhKHdpbmRvdy5zcmF2dnBsUGxheWVySW5zdGFuY2VzW2JdKTtlbHNlIHdpbmRvdy5zZXR1cFBsYXllckVsZW1lbnQ/dGhpcy5YYSh3aW5kb3cuc2V0dXBQbGF5ZXJFbGVtZW50KTp0aGlzLlIoKX19KX0pKGMpO3ZhciBkYz1jLmxpfHxkYyxlYz1uZXcgZGMocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuSW49dGhpcy5hWzNdO3RoaXMuU2o9dGhpcy5hWzJdO3RoaXMuVm49dGhpcy5hWzldO3RoaXMud2k9dGhpcy5hWzRdO3RoaXMuUmk9dGhpcy5hWzNdO3RoaXMubW09dGhpcy5hWzZdO3RoaXMuJGw9dGhpcy5hWzFdO3RoaXMua289dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbM119Yy5ncz1iO2IucHJvdG90eXBlPXtIbjpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuSW46dGhpcy5SaihhKX0sClJqOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuU2o6dGhpcy5VbihhKX0sVW46ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlZuOnRoaXMudmkoYSl9LHZpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy53aTp0aGlzLlFpKGEpfSxRaTpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMuUmk6dGhpcy5sbShhKX0sbG06ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLm1tOnRoaXMuWmwoYSl9LFpsOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy4kbDp0aGlzLmpvKGEpfSxqbzpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMua286dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBmYz1jLmdzfHxmYyxQYz1uZXcgZmMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1QYy5Ibig0KTtjPWN8fHt9OwooZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuWmc9dGhpcy5haD10aGlzLiRnPSExO3RoaXMuQWQ9W107dGhpcy4kZT17R0FOVmlkZW86InVuZGVmaW5lZCI9PT10eXBlb2YgJGI/bnVsbDokYixsYW9sYTFQbGF5ZXI6InVuZGVmaW5lZCI9PT10eXBlb2YgVmI/bnVsbDpWYixWaWRlb0pTOiJ1bmRlZmluZWQiPT09dHlwZW9mIEJhP251bGw6QmEsYml0bW92aW46InVuZGVmaW5lZCI9PT10eXBlb2YgVT9udWxsOlUsb3ZWaWRlbzoidW5kZWZpbmVkIj09PXR5cGVvZiBHYT9udWxsOkdhLFJhZGlhbnRNUDoidW5kZWZpbmVkIj09PXR5cGVvZiBIYj9udWxsOkhiLGp3OiJ1bmRlZmluZWQiPT09dHlwZW9mIHdhP251bGw6d2EsdHYyOiJ1bmRlZmluZWQiPT09dHlwZW9mIFNiP251bGw6U2IsdGZtc3VpdGVQbGF5ZXI6InVuZGVmaW5lZCI9PT10eXBlb2YgeD9udWxsOngsbmV4dFBsYXllcjoidW5kZWZpbmVkIj09PXR5cGVvZiBLYj9udWxsOktiLHh5bWF0aWNQbGF5ZXI6InVuZGVmaW5lZCI9PT0KdHlwZW9mIFBiP251bGw6UGIsYmlsZE1lZGlhUGxheWVyOiJ1bmRlZmluZWQiPT09dHlwZW9mIG9iP251bGw6b2IsT295YWxhOiJ1bmRlZmluZWQiPT09dHlwZW9mIGRiP251bGw6ZGIsUm9ja2VyeToidW5kZWZpbmVkIj09PXR5cGVvZiBDYj9udWxsOkNiLGluUmVhZDoidW5kZWZpbmVkIj09PXR5cGVvZiBMYT9udWxsOkxhLHdmdjQ6InVuZGVmaW5lZCI9PT10eXBlb2YgeGI/bnVsbDp4YixBVlBsYXllckRldGVjdGlvbjoidW5kZWZpbmVkIj09PXR5cGVvZiBlYz9udWxsOmVjLE9ubHlIT01BRDoidW5kZWZpbmVkIj09PXR5cGVvZiBYP251bGw6WH19Yy50bD1iO2IucHJvdG90eXBlPXtnOmZ1bmN0aW9uKCl7dmFyIGE9W10sYT1hLmxlbmd0aD90aGlzLm9xKGEpOltdLGI7dGhpcy5haD0hMDtpZihhLmxlbmd0aCl7dGhpcy4kZz0hMDtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyliPWFbY10sdGhpcy5BaChiKX1lbHNlIGZvcihjIGluIHRoaXMuJGUpe2lmKHRoaXMuWmcpYnJlYWs7CmI9dGhpcy4kZVtjXTt0aGlzLnZmKGIpJiYodGhpcy5BZC5wdXNoKGIpLHRoaXMuQWgoYikpfX0sdmY6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEgaW5zdGFuY2VvZiBxPyEwOiExfSxvcTpmdW5jdGlvbihhKXt2YXIgYj1bXSxjO2lmKCFhfHwhYS5sZW5ndGgpcmV0dXJuIGI7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspYz1hW2VdLGM9dGhpcy4kZVtjXSx0aGlzLnZmKGMpJiZiLnB1c2goYyk7cmV0dXJuIGJ9LEFoOmZ1bmN0aW9uKGEpe3RoaXMudmYoYSkmJmEuZygpfSxhdTpmdW5jdGlvbihhKXtpZihhJiZhIGluc3RhbmNlb2YgdSYmIXRoaXMuJGcpZm9yKHRoaXMuWmc9ITAsYT0wO2E8dGhpcy5BZC5sZW5ndGg7YSsrKXRoaXMuQWRbYV0uSGImJndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5BZFthXS5IYil9fX0pKGMpO3ZhciBnYz1jLnRsfHxnYyxOPW5ldyBnYztOLmcoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CnRoaXMueHU9dGhpcy5hWzZdO3RoaXMuS2o9dGhpcy5hWzZdO3RoaXMuWm09dGhpcy5hWzFdO3RoaXMuR2k9dGhpcy5hWzEwXTt0aGlzLkd1PXRoaXMuYVsyXTt0aGlzLllyPXRoaXMuYVs1XTt0aGlzLlJxPXRoaXMuYVsxMF07dGhpcy5qPXRoaXMuYVsyXX1jLlp1PWI7Yi5wcm90b3R5cGU9e3d1OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMueHU6dGhpcy5KaihhKX0sSmo6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLktqOnRoaXMuWW0oYSl9LFltOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5abTp0aGlzLkZpKGEpfSxGaTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuR2k6dGhpcy5GdShhKX0sRnU6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLkd1OnRoaXMuWHIoYSl9LFhyOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuWXI6dGhpcy5RcShhKX0sUXE6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlJxOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMjwKYT90aGlzLmo6YX19fSkoYyk7dmFyIGhjPWMuWnV8fGhjLFFjPW5ldyBoYygxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPVFjLnd1KDQpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oYyl7aWYoYy5lcnJvciBpbnN0YW5jZW9mIFJlZmVyZW5jZUVycm9yKXt2YXIgYj1jLmZpbGVuYW1lP2MuZmlsZW5hbWU6IiI7aWYoLTEhPWIuaW5kZXhPZigiaG9tYWQiKXx8LTEhPWIuaW5kZXhPZigiaGQtbWFpbiIpKWI9Yy5tZXNzYWdlP2MubWVzc2FnZToiIixjPWMuZXJyb3Iuc3RhY2s/Yy5lcnJvci5zdGFjazoiIiwtMSE9Yi5pbmRleE9mKCJpcyBub3QgZGVmaW5lZCIpPyhjPWIuc3Vic3RyaW5nKGIuaW5kZXhPZigiOiIpKzEsYi5pbmRleE9mKCJpcyBub3QiKS0xKSxlLndjKGsuUnUpLGUudHJhY2soInN0YXRzX2hkX3ZhcmRlbGV0ZWQiLGMsCiEwKSk6LTEhPWMuaW5kZXhPZigic2V0QCIpJiYoZS53YyhrLmVzKSxlLnRyYWNrKCJzdGF0c19oZF92YXJub3RzZXQiLCIiLCEwKSl9fSk7dmFyIEU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7RS53aWR0aD0xO0UuaGVpZ2h0PTE7RS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJwbXRtdnMiKTtFLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoRSk7dmFyIFJjPUUuY29udGVudFdpbmRvdy5zZXRJbnRlcnZhbC5iaW5kKHdpbmRvdyksa2M9RS5jb250ZW50V2luZG93LnNldFRpbWVvdXQuYmluZCh3aW5kb3cpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoRSk7dmFyIEk9bmV3IEosbT0hMTtJLmlhKCk7SS5UZygpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKEkuaWEoKSxmdW5jdGlvbihjKXttfHwobT1jLmRldGFpbCl9LCExKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihJLlRnKCksZnVuY3Rpb24oYyl7bXx8KG09Yy5kZXRhaWwpfSwhMSk7CkkuaWEoKTt2YXIgU2M9UmMoZnVuY3Rpb24oKXtlLnZnKHdpbmRvdyxJLmZyKCkse2lkOlNjfSl9LDUwMCksamE9ZS5iYSgxMCk7ZmEoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy50aj10aGlzLmFbNF07dGhpcy56dj10aGlzLmFbMl07dGhpcy5waj10aGlzLmFbOF07dGhpcy5DcD10aGlzLmFbOF07dGhpcy5aaz10aGlzLmFbNl07dGhpcy5QbD10aGlzLmFbM107dGhpcy5Iaj10aGlzLmFbN107dGhpcy5saz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbM119Yy5ydj1iO2IucHJvdG90eXBlPXtzajpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMudGo6dGhpcy55dihhKX0seXY6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLnp2OnRoaXMub2ooYSl9LG9qOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5wajp0aGlzLkJwKGEpfSxCcDpmdW5jdGlvbihhKXtyZXR1cm4gMjwKYT90aGlzLkNwOnRoaXMuWWsoYSl9LFlrOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5aazp0aGlzLk9sKGEpfSxPbDpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuUGw6dGhpcy5HaihhKX0sR2o6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5Iajp0aGlzLmtrKGEpfSxrazpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMubGs6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBpYz1jLnJ2fHxpYyxUYz1uZXcgaWMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1UYy5zaig0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuc2g9dGhpcy5jb25mPXRoaXMuamI9dGhpcy5wbGF5ZXI9bnVsbDt0aGlzLndkPTA7dGhpcy5aYT0iIjt0aGlzLkJkPVtdO3RoaXMuQ2Q9MDt0aGlzLnVoPSExO3RoaXMuWGU9CltdO2UubGIoIm5ld0FkZGVsaXZlcnkiKX1jLm1pPWI7Yi5wcm90b3R5cGU9e0d0OmZ1bmN0aW9uKGEpe3RoaXMuc2g9YX0sZmY6ZnVuY3Rpb24oYSl7dGhpcy5wbGF5ZXI9YTt0aGlzLlphPXRoaXMucGxheWVyLk8oKX0sZ2V0UGxheWVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGxheWVyfSxCdDpmdW5jdGlvbihhKXt0aGlzLmpiPWF9LEF0OmZ1bmN0aW9uKGEpe3RoaXMuY29uZj1hfSxIYTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNvbmZbYV07dGhpcy5jb25mW3RoaXMuWmFdJiZ0aGlzLmNvbmZbdGhpcy5aYV1bYV0mJihiPXRoaXMuY29uZlt0aGlzLlphXVthXSk7cmV0dXJuIGJ9LEljOmZ1bmN0aW9uKGEsYil7ZS5CYSgid2VsdC5kZSIpJiZlLllhKCJodHRwczovL2Fzdi5udWdnYWQubmV0L2JrP251Z2duPTE1Njk5MDUxMDImbnVnZ3NpZD0xOTgyMjE3NTUwJm51Z2dyaWQ9IitlbmNvZGVVUklDb21wb25lbnQobG9jYXRpb24uaHJlZikrIiZudWdnbD1odHRwcyUzQSUyRiUyRnd3MjUxLnNtYXJ0YWRzZXJ2ZXIuY29tJTJGdHJhY2slMkZjb21wLmFzcCUzRmtleXdvcmQlM0ROVUdHVkFSUyUyNnNpdGUlM0Q4NTE0NSIsCiJuZXRudWdnYWRhc3YiLHt9LGZ1bmN0aW9uKCl7fSxmdW5jdGlvbigpe30sdGhpcy5qYik7dmFyIGM9ITEsZj0hMTtpZih0aGlzLmdyKCkpdGhpcy5qYi5sKHRoaXMuamIucmQsdGhpcy5qYi5GYSx0aGlzLmpiLlplLGZ1bmN0aW9uKCl7dGhpcy5JYyhhLGIpfS5iaW5kKHRoaXMpLHRoaXMuamIuc2MpO2Vsc2UgaWYodGhpcy5FcSgpKXRoaXMud3QoZnVuY3Rpb24oKXt0aGlzLkljKGEsYil9LmJpbmQodGhpcykpO2Vsc2V7dGhpcy5wbGF5ZXIucGF1c2UoKTtlLnYoay5mZCx0aGlzLnBsYXllci51KCkpO3ZhciBnPXRoaXMuY29uZixsPW5ldyBZYSh0aGlzLmdldFBsYXllcigpLGcpO2ImJmwuY3UoKTtsLmV4aXRGdWxsc2NyZWVuKCk7ZS5sYigibmV3SG9tYWREaXNwbGF5Iik7Uz1sPW5ldyBRYShsLHRoaXMuamIsZyk7bC56dCh0aGlzLmNvbmYpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYSl7dmFyIG09ITE7dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyJiYobT10aGlzLnBsYXllci5nZXRSYXdQbGF5ZXIoKSk7CmE9YShtKX0oYT10aGlzLlJyKGEpKXx8ZS50cmFjaygic3RhdHNfaGRfbm9BZFRhZyIsInNob3ciLCEwKTsiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5wbGF5ZXIuR2UmJihjPXRoaXMucGxheWVyLkdlKCkpO2cuYWRTdGFydFRpbWVvdXQmJihmPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7fSxnLmFkU3RhcnRUaW1lb3V0fHw1RTQpKTtsLkllKGEsYyxmKTt0aGlzLnBsYXllci5DaChsKX19LGdyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IERhdGUsYj0wO2lmKHRoaXMud2QpcmV0dXJuIGI9YS5nZXRUaW1lKCktdGhpcy53ZC5nZXRUaW1lKCksdGhpcy53ZD1hLDNFNTxiPyEwOiExO3RoaXMud2Q9YTtyZXR1cm4hMX0sVnQ6ZnVuY3Rpb24oKXtlLmxiKCJwcmVyb2xsIik7ZS5lZigicHJlcm9sbCIpO3ZhciBhPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgicHJlcm9sbEFkVGFnIikmJihhPXRoaXMuSGEoInByZXJvbGxBZFRhZyIpKTsoYT10aGlzLnJnKGEpKT90aGlzLkljKGEpOihlLnRyYWNrKCJzdGF0c19oZF9ub0FkVGFnIiwKInByZSIsITApLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXIucGxheSgpfS5iaW5kKHRoaXMpLDApLGUudihrLmdkLHRoaXMucGxheWVyLnUoKSkpfSxVdDpmdW5jdGlvbihhKXtpZighdGhpcy5zaCl7ZS5lZigicG9zdHJvbGwiKTtlLmxiKCJwb3N0cm9sbCIpO3RoaXMuR3QoITApO3ZhciBiPXRoaXMuY29uZixjPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgicG9zdHJvbGxBZFRhZyIpJiYoYz10aGlzLkhhKCJwb3N0cm9sbEFkVGFnIikpOyhjPXRoaXMucmcoYykpP3RoaXMuSWMoYyxiLnBvc3Ryb2xsVXNlQ29tcGxldGVFdmVudD8hMDphKTooZS50cmFjaygic3RhdHNfaGRfbm9BZFRhZyIsInBvc3QiLCEwKSx0aGlzLnBsYXllci5wbGF5KCksZS52KGsuZ2QsdGhpcy5wbGF5ZXIudSgpKSl9fSxyZzpmdW5jdGlvbihhKXtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGEpe3ZhciBiPSExO3RoaXMucGxheWVyLmdldFJhd1BsYXllciYmKGI9dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyKCkpOwphPWEoYil9cmV0dXJuIGF9LGx0OmZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXIuS3QodGhpcy5VdC5iaW5kKHRoaXMpKTt0aGlzLnBsYXllci5OYSgpfSxIZDpmdW5jdGlvbihhKXtlLmxiKCJtaWRyb2xsIik7ZS5lZigibWlkcm9sbCIpO2lmKCF0aGlzLmhoKXt0aGlzLmhoPSEwO3ZhciBiPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgibWlkcm9sbEFkVGFnIikmJihiPXRoaXMuSGEoIm1pZHJvbGxBZFRhZyIpKTtiPyh0aGlzLkljKGIsYSksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmhoPSExfS5iaW5kKHRoaXMpLDFFMykpOihlLnRyYWNrKCJzdGF0c19oZF9ub0FkVGFnIiwibWlkIiwhMCksdGhpcy5wbGF5ZXIucGxheSgpLGUudihrLmdkLHRoaXMucGxheWVyLnUoKSkpfX0sa3Q6ZnVuY3Rpb24oKXt0aGlzLnBsYXllci5GdCh0aGlzLkhkLmJpbmQodGhpcykpO3RoaXMucGxheWVyLkxlKCl9LGc6ZnVuY3Rpb24oKXt0aGlzLlZ0KCk7dGhpcy5wbGF5ZXIuTGUmJnRoaXMua3QoKTsKdGhpcy5sdCgpfSxtdDpmdW5jdGlvbigpe3ZhciBhPVtdO2lmKHRoaXMuY29uZi55aWVsZGxhYil7dGhpcy5jb25mLnlpZWxkbGFiWzBdP2E9dGhpcy5jb25mLnlpZWxkbGFiOmFbMF09dGhpcy5jb25mLnlpZWxkbGFiO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKShmdW5jdGlvbihhLGIsYyxnKXt0aGlzLkJkLnB1c2goeyJmdW5jdGlvbiI6ZnVuY3Rpb24oZSl7dGhpcy5FdihhLGIsYyxnLGUpfS5iaW5kKGUpfSl9KS5jYWxsKHRoaXMsYVtiXS51cmwsYVtiXS5wbGFjZWhvbGRlcixhW2JdLmFsaWFzLGFbYl0ubWFjcm8pfXRoaXMuQ2Q9dGhpcy5CZC5sZW5ndGh9LEVxOmZ1bmN0aW9uKCl7dmFyIGE9ITE7MDx0aGlzLkNkJiYoYT0hMCk7cmV0dXJuIGF9LHd0OmZ1bmN0aW9uKGEpe3RoaXMudWg9YTtmb3IoYT0wO2E8dGhpcy5CZC5sZW5ndGg7YSsrKXRoaXMuQmRbYV1bImZ1bmN0aW9uIl0odGhpcy5acy5iaW5kKHRoaXMpKX0sWnM6ZnVuY3Rpb24oYSl7dGhpcy5DZC0tO2EmJnRoaXMuWGUucHVzaChhKTsKMD49dGhpcy5DZCYmdGhpcy51aCgpfSxScjpmdW5jdGlvbihhKXtmb3IodmFyIGI9IiIsYz0wO2M8dGhpcy5YZS5sZW5ndGg7YysrKWI9dGhpcy5YZVtjXSxhPWEucmVwbGFjZShiLm1hY3JvLGIucGxhY2Vob2xkZXIpO3JldHVybiBhfX19KShjKTt2YXIgZ2E9Yy5taXx8Z2EsUz0hMSxuYT0hMTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy55az10aGlzLmFbN107dGhpcy5TbD10aGlzLmFbNF07dGhpcy5ncD10aGlzLmFbMTBdO3RoaXMuWm49dGhpcy5hWzNdO3RoaXMuTnQ9dGhpcy5hWzFdO3RoaXMuaj10aGlzLmFbN119Yy5OcD1iO2IucHJvdG90eXBlPXt4azpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLnlrOnRoaXMuUmwoYSl9LFJsOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5TbDp0aGlzLmZwKGEpfSxmcDpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuZ3A6CnRoaXMuWW4oYSl9LFluOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5abjp0aGlzLk10KGEpfSxNdDpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTnQ6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuajphfX19KShjKTt2YXIgamM9Yy5OcHx8amMsVWM9bmV3IGpjKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9VWMueGsoNCl9KS5jYWxsKE9oamF1ZGlwQWxpZWNhaUosT2hqYXVkaXBBbGllY2FpSik7Cg==
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
109.71.25.30 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx/1.14.1 /
Resource Hash
cddc04822e3d360c8d4ce7041294700199c5c9e3395ae7c21a311a112ae0526f

Request headers

Sec-Fetch-Mode
cors
Referer
https://videos.giga.de/embed/176875?autoplay=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
content-encoding
gzip
last-modified
Thu, 04 Jul 2019 08:23:54 GMT
server
nginx/1.14.1
etag
W/"5d1db79a-109"
status
200
access-control-allow-methods
GET
content-type
application/json
access-control-allow-origin
*
cache-control
max-age=900
access-control-allow-headers
accept, content-type
expires
Fri, 13 Sep 2019 08:52:12 GMT
5136574783
dfp-gateway.s-onetag.com/1/4444/
114 B
579 B
XHR
General
Full URL
https://dfp-gateway.s-onetag.com/1/4444/5136574783
Requested by
Host: get.s-onetag.com
URL: https://get.s-onetag.com/1400a607-dbd1-49d7-9171-69ce05c71f5e/tag.min.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
2600:9000:2057:1a00:a:52eb:a100:93a1 , United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
Software
/
Resource Hash
3ddb12be58c8d1e4f15ed6bd23266bbcb098846570ef8fcfd819be9af32ea25c

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:08:56 GMT
via
1.1 87b272b7d9b97f38da15c91c833c3292.cloudfront.net (CloudFront), 1.1 87b272b7d9b97f38da15c91c833c3292.cloudfront.net (CloudFront)
age
1696
x-amzn-requestid
6acdc32c-0aa4-42a3-a429-218adeaa2c77
status
200
x-cache
Hit from cloudfront
content-type
application/json
access-control-allow-origin
*
cache-control
max-age=3600, public
x-amzn-trace-id
Root=1-5d7b4e98-2a846ab87ce6ca70c56151ae;Sampled=0
x-amz-cf-pop
FRA6-C1, FRA6-C1
x-amz-apigw-id
f8k31Gt0yK4Fj_Q=
content-length
114
x-amz-cf-id
rXVbuISDzTJT-gCbn6MlPPBGT5HXi7Ha8A6iSPfj49-o5_pB7gokag==
creative_js.js
vidstat.taboola.com/vpaid/units/14_12_0/creatives/
4 KB
2 KB
Script
General
Full URL
https://vidstat.taboola.com/vpaid/units/14_12_0/creatives/creative_js.js
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.114.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
10eba73b3641332bde05fa8d6223e7017ac5207673602247c35f358ea89e3092

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
via
1.1 c90147ea5199ff7ce77981c8da4247c4.cloudfront.net (CloudFront), 1.1 varnish
age
519577
x-amz-meta-mtime
1499351521
x-cache
Hit from cloudfront, HIT
status
200
x-amz-meta-mode
33188
content-encoding
gzip
content-length
1827
x-served-by
cache-hhn4058-HHN
last-modified
Wed, 06 Sep 2017 08:46:00 GMT
server
AmazonS3
x-timer
S1568363832.283073,VS0,VE0
etag
"0df6cb700db4e2c8b3b7dcb734e91cb0"
x-amz-meta-uid
0
vary
Accept-Encoding
x-amz-meta-gid
0
cache-control
public, max-age=2592000
x-amz-cf-pop
FRA53-C1
accept-ranges
bytes
content-type
application/javascript
x-amz-cf-id
7gUcLzi9Khb5x-2SymG6R2mlKzrS3XKJ2sLgDHJDdcYZJ_oPKcTwKw==
x-cache-hits
1053440
config.json
hgc-cf-cache-1.svonm.com/www.giga.de/ Frame 4364
653 B
1 KB
XHR
General
Full URL
https://hgc-cf-cache-1.svonm.com/www.giga.de/config.json?cache=1808062474
Requested by
Host: text
URL: data:text/javascript;base64,dmFyIE9oamF1ZGlwQWxpZWNhaUo9T2hqYXVkaXBBbGllY2FpSnx8e307CihmdW5jdGlvbihjKXtmdW5jdGlvbiBjYSgpe3guUmV8fCh4LlJlPTApO3guUmUrKzt3aW5kb3cudmlkZW9wa2dJbnRlcmZhY2UhPXgudmlkZW9wa2dJbnRlcmZhY2UmJih3aW5kb3cudmlkZW9wa2dJbnRlcmZhY2U9eC52aWRlb3BrZ0ludGVyZmFjZSk7MTA+eC5SZSYmd2luZG93LnNldFRpbWVvdXQoY2EsNTAwKX1mdW5jdGlvbiB6KCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIseik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIseik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIseik7ZGE9ITA7Zm9yKHZhciBjPTA7YzxDLmxlbmd0aDtjKyspQ1tjXS5sb2FkKCk7CmZvcihjPTA7YzxDLmxlbmd0aDtjKyspe3ZhciBiPUNbY10ucGxheSgpO2lmKHZvaWQgMCE9PWIpYi50aGVuKGZ1bmN0aW9uKCl7fSlbImNhdGNoIl0oZnVuY3Rpb24oKXt9KX1LJiYoSygpLEs9ITEpfWZ1bmN0aW9uIGVhKCl7dmFyIGM9d2luZG93Lk9PO2N8fChjPXdpbmRvdy5qT09QbGF5ZXJfMCk7cmV0dXJuIGN9ZnVuY3Rpb24gZmEoKXtpZihtKXttLnBhdXNlQnV0dG9ufHwobS5wYXVzZUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1sZWZ0OiA2cHg7cGFkZGluZy1ib3R0b206IDZweDsiIG9uZXJyb3I9InRoaXMuc3JjPVwnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9wYXVzZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlF6UTVOelUxTjBRMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UXpRNU56VTFOMFUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBETkRrM05UVTNRalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERORGszTlRVM1F6WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BnSG5DckVBQUFGMFNVUkJWSGphN0ptOWlvTkFFTWZqM1JVVzhTTWFQd2hhMjRjSTFsWldlWUxZK1FTV2dwVytnNCtVSm04UnRVMU1pbURsTGJjZ3dTUEhRY0xlempGVHpRNHkrOXZoUHlQTENrbVN6S0RaeCtsMGdnZDlQcC9oUWQ5dU4zalF3ekFnTkF0N213RTBsQWRDWXlOaXBSRWFOWTJWUm1pUTBOdnROZ3hEU1pLcXFqb2NEbU44dFZydGRqdlA4OXEyemZPY0krak5abE9XSmZVSlh4UkYxK3VWTG91aThIMmYrazNUa0NQeE1qM2lPQjU5V1pZSjkzaUFrWmpZdmYvM2xTYXFtRVJvMmtkeExxQW5TWVl2K3lITzQvUjRCTTFYcFJsRDQyLzhGeFhGUmtSTmc5UTB5SkdIallqeXdPbUJqZmlmRzdHdTYvdmw4WGlrYVlreitld2wyNzJUMjlIeldmYjcvWHE5ZGwyMzY3b3N5OGlTeGkrWEN3RU5na0FVUlJKTTA3VHYrK2UzRXh6SHdVWkU2RWVhbnMvbjRLQUYyN1lSbWdtMFpWbndvRTNUaEFkdEdBWTg2T1Z5aWRCTW9IVmRod2V0YVJvODZNVmlBUTlhVlZXRVpnS3RLQW84NkpmY1hGaERmMy9MNGQ4K0JSZ0ErUk5XU3hQaVI0d0FBQUFBU1VWT1JLNUNZSUk9Ii8+Jyk7Cm0ucGxheUJ1dHRvbnx8KG0ucGxheUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1sZWZ0OiA2cHg7cGFkZGluZy1ib3R0b206IDZweDsiIG9uZXJyb3I9InRoaXMuc3JjPVwnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9wbGF5MTgxMDAyLnBuZ1wnIiBzcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRHdBQUFBOENBSUFBQUMxbms0bEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeWhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVOaTFqTURZM0lEYzVMakUxTnpjME55d2dNakF4TlM4d015OHpNQzB5TXpvME1EbzBNaUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01UVWdLRTFoWTJsdWRHOXphQ2tpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2UXpRNU56VTFOemsyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZRelE1TnpVMU4wRTJOVVV3TVRGRk5UazVSamhCTTBNelEwVXhOMFUwUkRnaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcERORGszTlRVM056WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwRE5EazNOVFUzT0RZMVJUQXhNVVUxT1RsR09FRXpRek5EUlRFM1JUUkVPQ0l2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHZWa0dJa0FBQUhaU1VSQlZIamE3Smd4aXNKUUVJWjFYYkJSbXdoaURpQjZnVTB0cEJJRUM0dUFoVTBNQkZ2RlhxMFZQRUNDVm9MYWVnR0xpS1dGSGlDa2pyR3hqTE11aUd6QTNlVWx6L2ZZK2FzUW5QQmwvT2RsWnVLcXFzWjQwN3ZydXZ4Qm4wNG4vcUF2bHd0LzBMN3ZJelFOdmNVNEZOb0RvYkVRTWRNSWpaN0dUSDhxa2N2bFNPTFQ2WFM5WHQvdjkxVHQ0Wk9wV3ExMnU5MzVmSjVLcFh4YUlvV0dUTU9yRjR2RjlYcGRLQlQ0Z0w2WFJDYVRXU3dXalVhREJuUzRidXYxZW9QQjRDdjk3SG82K01SYXJXWVlSajZmNThBZWp3S0xMNWZMY3JrY0VYUWltODJTL0ZNZk53WHZKNVBKU3FVQ0Y3dmRqamw3UFA4MnRkdnR5V1FTK21rWStXZGNsdVhwZEFxR1lib1FneXFWU3NBTkJScWFwd1ZCSVBTMEpFay8vZ3dzRGltSG8zQ3oyZkNSNmJ1YXplWnNOaU8zT08zV1ZMcnB4YTNwbjhMUDU3T3U2K1NISUwxKytuQTRBTEhqT0s4ZkFuNFpicHJtY0Rqa1puSUJTMEFMdFZxdEdCcTNub2VESlRxZHp2RjQ1R2F3aFo1SlVaVFFpU08wUjcvZmh3YVYwV2s4R0c3YnRxWnBZQXh1VmdpV1piVmFMU2crcHZjZWorR2owV2c4SHROWTFvVHlGTS96VkZYZGJyZVVsaldFUXlnTTRkREJBWEdrSnY2bXVDaUt1TXREYUZ6MUlqUkNZeUZpcGhFYW9iRVFFZm9mUVY4RkdBQkdFSjRVNUZJZnp3QUFBQUJKUlU1RXJrSmdnZz09Ii8+Jyk7Cm0ubXV0ZUJ1dHRvbnx8KG0ubXV0ZUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1yaWdodDogNnB4O3BhZGRpbmctYm90dG9tOiA2cHg7IiBvbmVycm9yPSJ0aGlzLnNyYz1cJ2h0dHBzOi8vaG1kYXNzdHMuc2NobmVldm9ubW9yZ2VuLmNvbS9pbWcvbXV0ZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlEwWkNNRGMwUWpBMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UTBaQ01EYzBRakUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBETkRrM05UVTNSalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERORGszTlRVNE1EWTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1ByV2YzOGNBQUFKVVNVUkJWSGphN0ptL2p3RkJGTWU1dTNKUmM5UkVmZndCTGxHaW9ISTZqV3Y5QVZSWGllZ0ZDWTJ3Q2pyMDRoL2dMOUQ3MFlocTc1dWRaQ0xyZHRuZDJjM04zYnhpOHF6ZE41OTU3L3RtN2ZLV3kyVVBiL2F5MysvNWd6NGNEdnhCbjg5bi9xQVZSUkhRYnRpVGgwTVQ4aERRb2hGRnBnVzAwRFI3YUlXcDFldDF4WGxqQmkxSjBuQTR6R1F5TGtDejBiVFA1MnUzMjlGb0ZMNExUY0lBT2hRS3RWcXRXQ3hHUGpLQlJzVXd6bVl6UjZDUjNXNjM2L2Y3NlJFN0FiUFpMTWJwZElxd3lBSWM5cnZITGJFMSsxQU56cHRxY0dqZEdPOGVxS0FzeTdmRWowY29Gb3VWU2dVT1lZWHpxaHF0bGVsR1JLVnl1WnpCY3BQSjVJL0g3OHFqVkNwaEhBd0dpVVFDSFl6ek1WSkVqV05PMDFpeEhwYXg2UVdrcktsVUNrNi8zNmVzbWd0dkhSUHlzQ1pRVFpCUDFlQzhxL1lJNGwxNU9IVWIvMUtOcU1oYXhWejl3VVFDUWwyUHA5T3NQSFNoN2NqamVyVHB1SnBwSmduV2JjUS85YmhsVXg2T1pwcExlVGlWNmNWaWdUczhaNDNZNi9YSXg4bGtRZzZlVGlleWpOK2JhV3I0VVVVZEFtMkJYZ3V0Ti9kdXQxdXYxM3JmWXRaNFBHNXFNY3ZsVXJNTVRCRU9oMW51SHJKcUJsYzJHbzE4UG0raFJKRDd0WVB6UVcrY2UyYWFybGFybTgybVZxdFoxdFY4UHI5MmNPSHhlSFM4RVR1ZERxWnBOcHMybTRIU2o4ZGpFbUc3M1VJNVR1MGVtSVp3QndJQis4K0lsSDYxV2htRThscHJCWTJoS1VlakVlR09SQ0o4dkdHQ3VBdUZ3clVpK1hqREJPNTBPbzNSQldodk1CaGtXRGpzWExoM09DMlBaMG1TR0lhN1hDN2lWYS80SjBCQS93OW8wWWdDV2tDTFJoVHlFTkRNN1Z1QUFRQndvdnZJdjA5WTZnQUFBQUJKUlU1RXJrSmdnZz09Ii8+Jyk7Cm0udW5tdXRlQnV0dG9ufHwobS51bm11dGVCdXR0b249JzxpbWcgc3R5bGU9Im1heC13aWR0aDogMjVweDttYXgtaGVpZ2h0OiAyNXB4O3BhZGRpbmctcmlnaHQ6IDZweDtwYWRkaW5nLWJvdHRvbTogNnB4OyIgb25lcnJvcj0idGhpcy5zcmM9XCdodHRwczovL2htZGFzc3RzLnNjaG5lZXZvbm1vcmdlbi5jb20vaW1nL3VubXV0ZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlEwWkNNRGMwUWpRMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UTBaQ01EYzBRalUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBEUmtJd056UkNNalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERSa0l3TnpSQ016WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BpL2RxR3dBQUFTRlNVUkJWSGphN0psTFRCTkJHTWUzaUVpbDcyNUxhMHVRaTYyUEF4b0RIUEhDelpaRXFpYVFRQTJKd3NGWHZHaE1DSGZmSmlZRzFDWWVSRUUweElQdEJZN1lFeWFDK0VLSUVCTXI3VzRWaW9qV2IzZXRXYnF6MjA1WjFFMzJPMndtT3pQZi9QYWIvenhYMDk3ZVRpak5paE9KaFBLZ0tZcFNIblFxbFZJZWREcWRWcUgvaGhVUkNqUlZIaXEwT2hEVlNLdlFxcWIvZmFUUHpNM3RvK2t0eTh0Zk5tdzQ1UEY4TENuaDUzWjNkM2QxZGVWMHNpMlZhbzdGd0kvK3g0OVhXdTFoandjdjBta2NxNmNvYUF5SW9TYTBkM2xxU3JleXdtWHBkTHErdmo2Zno1ZlR5YmJGeGQ0M2IzenhPSGdBUDU1VWF2LzhQQllHSmpSTjg3L1lzN1RVOC9ZdGNBTnhUMCtQaHcxWVRtS29vdi81ays5bmZ6eU9oWUVuRHk0MmZQTXVMZlcrZTBjTUQzdTlYdTZOaEVNSWF1L1VsR0UxTWJJVzlCZzhoNGFHWkpESERac3RXVlFrNVBZZU8wWmtUa0FTTWI0bFFuelhhdVhLK0ZpREJIU2EzKzhYbFFmV0NJQkJjNlNxU3NoTlBIOU8xTmNUNGljM2lQSHQ5KytSeE9kZExsZG5aMHRMQzZUM3NzWUVJdE52TWtRYWJMSzBOTGgxcXdRM01zWml4SS85L3NjbUU4Y0tKVjJzL1pFS3RxYWhkeG9iRzhXKzlVc3NabWh1SmxhUFM0NGJ4aVhNaHZ6QmVtZDZHa21jdkhadFMyMXRPaGpVNi9WL0VMTVNlUE0wZkhGTlRZMlVWa1pHbU5BS3VPOXMydFJXV2NseGc5eERNek5JNG5OT1oyTnRMWjlNSW9FaGp4d0NyNjVtdUkzR3JOZmJ2MzBEVUlnMzZGaU1PTnJSOFNoVFVScGFob0dZUDNkMDgrWkhpUVJhRlZldkVtMXRhOXA3RkJqbVhOeU12ck9VdzlwWmgyT3lyaTVQVlJTeUlxNlZXMkRQT2pvR0RZYjBtbTNOa2M2Ym0xRkZhMnVlQVY1UFRXZHhYN2tpbG5uZFlubkp6aFh5N0tkbGtBZG5ZMlBFeVpOaW1hMFU1WXJGOGc5d2dackdKaGJPMlR5RGFjUU5DL1hZbUN6UW9vc0xCbmN1NHQ5RzA5czdPNzFPcDNEWmswaXN6NVFYQ2hHN2QrY216c1Q3eWR6Y2ptajBuMFlhaUlOQjlLbU1KT0Y1NGZObkJQcUpFOFRSbzFnNnlkNTdpUEhNenM2T2pvNkt4c3hnWUFJbVR2eFFwK1BTU082Nm16Y1BrQ1EwNFhhNzVUellEckFtVnEzcDY5Y0w4L05vWXF0MW9LeU1ZTjF5Q1dSSitKakk0T0J0blE0QWdON0FManI1UnJxQWV3K0dPQjVIWk1EaUVncjFRKy96ZlBhWGxkRWFEWEFiQlEwMTNMc1h0bGpnU0J3T2h6bEVtaDBiaFc5TlJZa1hGaTZLRWNPaVdGMmRQbjQ4S3llczFYNncyKzkvK2lUa0JsZndhb0NGWnI2d3Y1OWpuWmlZQU9XSXNXbXdWQlZZV0xpRS9JV1hJWVprUlVVRnN1Nk81ZVVIc1pnUnhYSGFiSVlPV2RVSkRRM3dqRVFpTXR3d0JSWVhFZk92Um5ONnp4NjZxa3E2N2tSSnlVR2JEUXJuNHpiQ21qeG5SR0dUOENaQWtnOWV2dzRFQW54RkltMTg0MFlvakhTeWpwYzFUMHRMc3hwcklrbEFZWURHeDZGUDRTbnRBUW8zQ2JqQkxSYUd4dWwwWWlua01rVWRZditYdmlndVBtVXlBVVRXL0oxTUpuTTYyZm45Ty9qWnRiSUM2ZnRhTGZqQll0QTRIQTdGM1pvcUU3cTh2Rng1MEhhN1hYblFOcHROZWRBa3U0ZFVvZGNmMm1xMUtnL2FZckVvRDlwc05pc1Ayb1M1aEtyUWhVSWI4N2c0L08rZ1lWK21QR2p1ZjRleTdKY0FBd0Rhbk9MSU8vcGdrQUFBQUFCSlJVNUVya0pnZ2c9PSIvPicpOwptLnNraXBhYmxlQnV0dG9ufHwobS5za2lwYWJsZUJ1dHRvbj0nPGRpdiBzdHlsZT0ib3BhY2l0eTogMC43O21pbi1oZWlnaHQ6IDI1cHg7bWF4LWhlaWdodDogMjVweDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2Rpc3BsYXk6IGlubGluZS1ibG9jaztsaW5lLWhlaWdodDogMjVweDtwYWRkaW5nLWxlZnQ6IDZweDttYXJnaW4tcmlnaHQ6IDZweDtwYWRkaW5nLXJpZ2h0OiA2cHg7Ym9yZGVyOiAjRkZGRkZGO2JhY2tncm91bmQtY29sb3I6YmxhY2s7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ij5Ta2lwIEFkIGluIFt0aW1lXXM8ZGl2PicpO20uc2tpcEJ1dHRvbnx8KG0uc2tpcEJ1dHRvbj0nPGRpdiBzdHlsZT0ibWluLWhlaWdodDogMjVweDttYXgtaGVpZ2h0OiAyNXB4O29wYWNpdHk6IDAuNjttYXJnaW4tcmlnaHQ6IDZweDtwYWRkaW5nLWxlZnQ6IDZweDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2Rpc3BsYXk6IGlubGluZS1ibG9jaztsaW5lLWhlaWdodDogMjVweDtiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14OyI+U2tpcCBBZDxpbWcgc3R5bGU9Im1heC13aWR0aDogMzBweDtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246IG1pZGRsZTsiIG9uZXJyb3I9XCdodHRwczovL2htZGFzc3RzLnNjaG5lZXZvbm1vcmdlbi5jb20vaW1nL3NraXAxODEwMDIucG5nXCcgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQVlBQUFBNi9ObHlBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQTNCcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1UTTRJRGM1TGpFMU9UZ3lOQ3dnTWpBeE5pOHdPUzh4TkMwd01Ub3dPVG93TVNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3VFUwOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXRiUzhpSUhodGJHNXpPbk4wVW1WbVBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZjMVI1Y0dVdlVtVnpiM1Z5WTJWU1pXWWpJaUI0Yld4dWN6cDRiWEE5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM4aUlIaHRjRTFOT2s5eWFXZHBibUZzUkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwRk9UWkRRalZHTUVSR01USXhNVVUyT0RReFFVVkJOME5HTVVNeU9Ua3hOU0lnZUcxd1RVMDZSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBGUmpjM09VRkdNRVJHUkRVeE1VVTJPRU0xT1VFNFFrSkdSamRHTmtRM05pSWdlRzF3VFUwNlNXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEZSamMzT1VGRlJrUkdSRFV4TVVVMk9FTTFPVUU0UWtKR1JqZEdOa1EzTmlJZ2VHMXdPa055WldGMGIzSlViMjlzUFNKQlpHOWlaU0JRYUc5MGIzTm9iM0FnUTBNZ01qQXhOeUFvVFdGamFXNTBiM05vS1NJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5KdmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09tUXpZemsxTkRCbUxUVmxZVE10TkRsbE5DMWhOR1V5TFdRMk1qUXlOVGN6Wm1VNVlTSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcEZPVFpEUWpWR01FUkdNVEl4TVVVMk9EUXhRVVZCTjBOR01VTXlPVGt4TlNJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BtNlhOVDRBQUFKcVNVUkJWSGphWXZ6Ly96L0RTQUpNRENNTWpIcDQxTU9qSGg3MThLaUhSejA4NnVGUkQ0OTZlTlREb3g0ZTlmQ29oN0VCbHNIbUlFTkR3d0JzNHVmUG45OUFGUXRBQXdEVXhqWTJOakZkWFYwcjlmWDEvVWpWQzlXREFzZ3hCeGVtU1pMMkJZTFMwdEt3RlN0V3JBUjZQZ3JrWUZJaWdCaXhRWldIZVhsNWVVQzBob1lHeDdadDI1YXFBWUdlbnA0UGtSNytSNHpZb1BJd2Nvenc4ZkV4ckY2OXVqc2FDSFIxZFgwR09vYnBWbWlWbDVkSHFLdXJhMWhaV2ZFY08zWnN4WWdvcFFNQ0FneUF5WHkrbTVzYnp6TWd1SExseXJiaGtxUnhPaENVcjllc1dUUGJFUWkwdGJXOWhrV2hSUWlBOHZYa3laTkxzckt5TXJXMHREeUdWYUdGRDJSblovdE1talJwc3BtWldjaXdLN1J3QVJjWEZ4VnBhZW1GZ1lHQk1qZUFZRVMwcFRVMU5ia1dMbHpZRHl6VS9HbWRwRmxvbEtUL2taT3YyOXZiTTRDRm1zYXdLN1R3Z2ZqNGVJY2hWMmlOdVA0d0pVbncwNmRQRENNbVNWKzdkdTBic0tNVlA2eGFXcmpBL1Buejk0RzZsVStBWUZqSE1DZ0pBL3ZPVTVxQjRPN2R1L3VHYXJWRWRCSXVLU2twdm43OStvMzc5KzhmR05ZdExXQUg0a3hUVTFQanBVdVh0Z3piN2lFTUFEMjZhTjY4ZVhNZlBIaHdpTjdkUTdxMnRCNC9mc3lRbHBhV0NVeksxeDQrZkhob1dJOTRIRDkrL0ZrcUVBQUxxVStQSGowNlFrcGdEYmxDcTYrdmIxMC9FQUJqK0FnNUJkNlFpZUdQSHo4eXBLU2tsSjRBQW1JOE8yU2JsbGV2WHIyeVk4ZU9HKzd1N3VIQXBIeU1GTS9TT2tuVFpPYUJFaXdsSldXRlB2TUFGYU9LK1lOdWJna1VtMEFQV3RMS2ZNYlJ4YVdqSGg3MThLaUhSejA4NnVGUkQ0OTZlTlREb3g0ZTlmQ29oMGM5UE9waEJnYUFBQU1BR21DMHBlSmNHRUlBQUFBQVNVVk9SSzVDWUlJPSIvPjwvZGl2PicpOwppZihtLnNpZGVsb2Fkcyl7dmFyIGM9ZnVuY3Rpb24oKXt9O20uc2lkZWxvYWRzLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5hbGlhczsiZnVuY3Rpb24iPT09dHlwZW9mIGImJihiPWIoKSk7YT1hLnVybDsiZnVuY3Rpb24iPT09dHlwZW9mIGEmJihhPWEoKSk7ZS5ZYShhLGIsW10sYyxjLGwpfSl9bC5sKG0uZ2xvYmFsQ29uZmlnLG0uY2xpZW50Q29uZmlnLG0ucHJlY2hlY2tlZCxtLm9uUmVhZHksbS5vbkZhaWx1cmUsbSk7ZG9jdW1lbnQuaGRfcmVhZHk9ITA7dmFyIGI9bS5zdGFydFBsYXllcjtiJiYiZnVuY3Rpb24iPT09dHlwZW9mIGImJmIoKX1lbHNlIGtjKGZhLDUwKX1mdW5jdGlvbiByKGMsYil7aWYoZS5jbyllLnRyYWNrKCJzdGF0c19oZF9ieXBhc3MiLCIiLCEwKTtlbHNlIGlmKG0mJmwpeyhtLmFkVGFnfHxtLnByZXJvbGxBZFRhZykmJmMucGF1c2UoKTtlLnYoay5mZCxjLnUoKSk7aWYoYy5nZXRDdXJyZW50VGltZSl7dmFyIGE9Yy5nZXRDdXJyZW50VGltZSgpO2EmJgplLnRyYWNrKCJhY3RpdmF0ZWRBdCIsYSl9Yj9sLkthPSEwOmUudHJhY2soInN0YXRzX2hkX2FiZCIsIiIsITApO2E9bmV3IGdhO2EuZmYoYyk7YS5CdChsKTthLkF0KG0pO2EubXQoKTthLmcoKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cihjLGIpfS5iaW5kKHRoaXMpLDUwKX1mdW5jdGlvbiBoYShjLGIpe2MucGF1c2UoKTtpZihsLkdiLmxlbmd0aCl7dmFyIGE9bC5HYi5zaGlmdCgpO2lmKCJhZGNhbGwiPT1hLnR5cGUpe3ZhciBoO2g9ZS5IdCh7IltMT0FEU0NSSVBUXSI6ZS5iYSgxMCksIltVVElMU10iOmUuYmEoMTApLCJbQ0FMTEJBQ0tdIjplLmJhKDEwKX0pO3dpbmRvd1toWyJbTE9BRFNDUklQVF0iXV09ZS5maC5iaW5kKGUpO3dpbmRvd1toWyJbVVRJTFNdIl1dPWw7Zm9yKHdpbmRvd1toWyJbQ0FMTEJBQ0tdIl1dPWZ1bmN0aW9uKGEpe2Zvcih2YXIgaCBpbiBhKW1baF09YVtoXTtyKGMsYil9O2g9YS5zY3JpcHRzLnNoaWZ0KCk7KWUuZmgoaCxmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJzaWRlbG9hZCBzdWNjZXNzIil9LApmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJzaWRlbG9hZCBmYWlsZWQiKX0sbCl9ZWxzZSByKGMsYil9ZWxzZSByKGMsYil9Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTXM9dGhpcy5hWzFdO3RoaXMuWGs9dGhpcy5hWzFdO3RoaXMuZ2o9dGhpcy5hWzddO3RoaXMuRW09dGhpcy5hWzNdO3RoaXMubmo9dGhpcy5hWzEwXTt0aGlzLkRuPXRoaXMuYVszXTt0aGlzLmZrPXRoaXMuYVsxXTt0aGlzLk9zPXRoaXMuYVsxXTt0aGlzLkl1PXRoaXMuYVs4XTt0aGlzLlZxPXRoaXMuYVs0XTt0aGlzLmo9dGhpcy5hWzNdfWMuY3Q9YjtiLnByb3RvdHlwZT17THM6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5Nczp0aGlzLldrKGEpfSxXazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuWGs6dGhpcy5maihhKX0sZmo6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLmdqOnRoaXMuRG0oYSl9LApEbTpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuRW06dGhpcy5taihhKX0sbWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLm5qOnRoaXMuQ24oYSl9LENuOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5Ebjp0aGlzLmVrKGEpfSxlazpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuZms6dGhpcy5OcyhhKX0sTnM6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLk9zOnRoaXMuSHUoYSl9LEh1OmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5JdTp0aGlzLlVxKGEpfSxVcTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuVnE6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBpYT1jLmN0fHxpYSxsYz1uZXcgaWEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1sYy5Mcyg0KTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5jbz0KITE7dGhpcy5TYT0ic2V0dXAiO3RoaXMuS2M9W107dGhpcy5qZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLllzLmJpbmQodGhpcykpO3RoaXMua2I9e307dGhpcy5OZz17fTt0aGlzLmNmPSExfWMuJGo9YjtiLnByb3RvdHlwZT17YnU6ZnVuY3Rpb24oKXt2YXIgYT0iIixiO2ZvcihiIGluIHRoaXMua2IpdGhpcy5rYi5oYXNPd25Qcm9wZXJ0eShiKSYmKGErPWIrdGhpcy5rYltiXSsiXyIpO3JldHVybiBhfSx6YzpmdW5jdGlvbigpe3RoaXMuY2Z8fCh0aGlzLmNmPWUuYmEoMTApKTtyZXR1cm4gdGhpcy5jZn0sbGI6ZnVuY3Rpb24oYSl7dGhpcy5rYlthXXx8KHRoaXMua2JbYV09MCk7dGhpcy5rYlthXSs9MTs1PHRoaXMua2JbYV0mJiF0aGlzLk5nW2FdJiYodGhpcy5OZ1thXT0hMCwibmV3QmlnQWRJZCI9PWEmJnRoaXMudHJhY2soInN0YXRzX2hkX2NoZWNrdHJhY2tzIix0aGlzLmJ1KCksITApKX0samU6ZnVuY3Rpb24oKXt0aGlzLmFhPXt1cmxzOnt9LApob21hZFVybHM6e30sb3JpZ2luYWxVcmxzOnt9LHNjcmlwdHM6e30sZXZlbnRsaXN0ZW5lcjpbXSxnZW5lcmFsRXZlbnRsaXN0ZW5lcjpbXSxpRnJhbWVzOltdLGlGcmFtZU9uTG9hZEhhbmRsZXI6e30saUZyYW1lVXJsOiIiLHRyYWNlOltdLHN0YWNrOltdLGVycm1zZzpbXX19LGpuOmZ1bmN0aW9uKGEpe3RoaXMuYWEuZXJybXNnLnB1c2goYSl9LHBvc3RNZXNzYWdlOmZ1bmN0aW9uKGEsYil7dHJ5e2EuY29udGVudFdpbmRvdyYmKGE9YS5jb250ZW50V2luZG93KX1jYXRjaChkKXt9YSYmYS5wb3N0TWVzc2FnZSYmYS5wb3N0TWVzc2FnZShiLCIqIil9LG1hOmZ1bmN0aW9uKGEsYixkKXt0aGlzLnBvc3RNZXNzYWdlKGEse3R5cGU6InZwYWlkIixldmVudDpiLGRhdGE6ZH0pfSxZczpmdW5jdGlvbihhKXthJiZhLmRhdGEmJmEuZGF0YS50eXBlJiYidnBhaWQiPT1hLmRhdGEudHlwZSYmdGhpcy5YcyhhLmRhdGEpfSxYczpmdW5jdGlvbihhKXtpZih0aGlzLmFhJiZ0aGlzLmFhLmV2ZW50bGlzdGVuZXIpZm9yKHZhciBiPQp0aGlzLmFhLmV2ZW50bGlzdGVuZXIubGVuZ3RoLGQ9MDtkPGI7ZCsrKXRoaXMuYWEmJnRoaXMuYWEuZXZlbnRsaXN0ZW5lciYmdGhpcy5hYS5ldmVudGxpc3RlbmVyW2RdJiZhLmV2ZW50PT10aGlzLmFhLmV2ZW50bGlzdGVuZXJbZF0ubmFtZSYmdGhpcy5hYS5ldmVudGxpc3RlbmVyW2RdLmNiKGEpfSxiZTpmdW5jdGlvbihhLGIpe3RoaXMuYWEuZXZlbnRsaXN0ZW5lci5wdXNoKHtuYW1lOmEsY2I6Yn0pfSxsZzpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmdxKGEpLGQ9ITE7aWYoYilyZXR1cm4gdGhpcy5laChhLCJQT1NUIix7aG9tYWRfcmVzb2x2ZV9oYXNoOmJ9LGZ1bmN0aW9uKGEpe3RyeXtkPUpTT04ucGFyc2UoYS5yZXNwb25zZVRleHQpLnVybH1jYXRjaChiKXtjb25zb2xlLmxvZygid3RmIixiKX19LGZ1bmN0aW9uKCl7fSwhMCwhMCksZH0sZ3E6ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IFJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPyhbdy4tXSopOj8uKihbMC05XSspPy8/KFthLWYwLTldezQwfSkvPyQiLAoiZyIpO2lmKChiPWIuZXhlYyhhKSkmJihiWzJdfHxiWzVdKSl7aWYoYlsyXSlyZXR1cm4gYlsyXTtpZihiWzVdKXJldHVybiBiWzVdfWVsc2UgaWYoYj1uZXcgUmVnRXhwKCJeKGh0dHBzPyk6Ly8oW3cuLV0qKTo/LiooWzAtOV0rKT8vPyhbYS1mMC05XXs0MH0pLz8kIiwiZyIpLChiPWIuZXhlYyhhKSkmJmJbNF0pcmV0dXJuIGJbNF07cmV0dXJuITF9LGduOmZ1bmN0aW9uKGEsYil7aWYoYiYmISgwPnRoaXMubGEoYSkuaG9zdC5pbmRleE9mKCJkYW1vaCIpKSl7aWYoYT09Yil7aWYoZS5RcChhKSlyZXR1cm47KGI9dGhpcy5sZyhhKSl8fChiPWEpfTA9PT1iLmluZGV4T2YoIi8vIikmJihiPSJodHRwczoiK2IpO3RoaXMuYWEudXJsc1thXT1iO3RoaXMuYWEudXJsc1tiXT1hO3RoaXMuYWEuaG9tYWRVcmxzW2FdPWI7dGhpcy5hYS5vcmlnaW5hbFVybHNbYl09YX19LFFwOmZ1bmN0aW9uKGEpe3ZhciBiPSExO3RoaXMuYWEuaG9tYWRVcmxzW2FdJiYoYj10aGlzLmFhLmhvbWFkVXJsc1thXSk7CnJldHVybiBifSx0ZzpmdW5jdGlvbihhKXt2YXIgYj0hMTt0aGlzLmFhLm9yaWdpbmFsVXJscyYmdGhpcy5hYS5vcmlnaW5hbFVybHNbYV0mJihiPXRoaXMuYWEub3JpZ2luYWxVcmxzW2FdKTtyZXR1cm4gYn0sZWI6ZnVuY3Rpb24oYSxiKXtifHwoYj0iIik7dGhpcy50cmFjaygic3RhdHNfdnBhaWRfIithLGIsITApfSxwcjpmdW5jdGlvbihhKXtyZXR1cm4iYWJvdXQ6YmxhbmsiPT1hfHwiYWJvdXQ6c2VsZiI9PWF8fCIiPT1hfSx0ZTpmdW5jdGlvbihhKXtpZighYXx8Im9iamVjdCIhPT10eXBlb2YgYSlyZXR1cm4gMDt2YXIgYj0wLGQ9IiI7Zm9yKGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiZiKys7cmV0dXJuIGJ9LENnOmZ1bmN0aW9uKGEsYil7dmFyIGQ9YVtiXTtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBkP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGQpOiJmdW5jdGlvbiI9PT10eXBlb2YgZD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChkKCkpOiJvYmplY3QiPT09dHlwZW9mIGQ/CmQ6bnVsbH0sSGg6ZnVuY3Rpb24oYSl7Zm9yKDthIT1kb2N1bWVudC5ib2R5JiZudWxsIT1hOylhPWEucGFyZW50RWxlbWVudDtyZXR1cm4gYT09ZG9jdW1lbnQuYm9keT8hMDohMX0sV2c6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiYiZnVuY3Rpb24iPT09dHlwZW9mIGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PyhhPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpPzA8PWEudG9wJiYwPD1hLmxlZnQmJmEuYm90dG9tPD0od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSYmYS5yaWdodDw9KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpOiExOiExfSxCZTpmdW5jdGlvbihhLGIpe3ZhciBkPTAsZj0wLG49MCxjPTAsZT0hMTtpZighYXx8IWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0fHwiZnVuY3Rpb24iIT09dHlwZW9mIGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXJldHVybiExOwp2YXIgZz1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFnKXJldHVybiExO249Zy5oZWlnaHQqZy53aWR0aDtkPWcud2lkdGg7Zj1nLmhlaWdodDswPmcudG9wJiYoZis9Zy50b3ApO2cuYm90dG9tPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpJiYoZi09Zy5ib3R0b20tKHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpOzA+Zy5sZWZ0JiYoZCs9Zy5sZWZ0KTtnLnJpZ2h0Pih3aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKSYmKGQtPWcucmlnaHQtKHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpKTswPmYmJihmPTApOzA+ZCYmKGQ9MCk7MDxuJiYoYz0xMDAvbipkKmYpO2M+PWImJihlPSEwKTtyZXR1cm4gZX0sQ2U6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5CZShhLmVsLAphLnBlcmNlbnQpO2Euc3RhcnRUaW1lfHwoYS5zdGFydFRpbWU9KG5ldyBEYXRlKS5nZXRUaW1lKCkpO2lmKGIpe2lmKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWEuc3RhcnRUaW1lPj1hLnRpbWVNUyl7YS5jYigpO3JldHVybn19ZWxzZSBhLnN0YXJ0VGltZT0hMTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuQ2UoYSl9LmJpbmQodGhpcyksMTAwKX0sRWI6ZnVuY3Rpb24oYSl7YT1hJiYibnVtYmVyIj09PXR5cGVvZiBhP01hdGguYWJzKGEpOjEwO3JldHVybiBNYXRoLnJvdW5kKE1hdGgucG93KDEwLGEpKiguODk5OTk5OTk5Kk1hdGgucmFuZG9tKCkrLjEpKX0sYmE6ZnVuY3Rpb24oYSl7YT1hJiYibnVtYmVyIj09PXR5cGVvZiBhJiYwPGE/TWF0aC5yb3VuZChhKToxMDtmb3IodmFyIGI9IiIsZD0wO2Q8YTtkKyspYis9U3RyaW5nLmZyb21DaGFyQ29kZSgoLjU+TWF0aC5yYW5kb20oKT82NTo5NykrTWF0aC5mbG9vcigyNipNYXRoLnJhbmRvbSgpKSk7cmV0dXJuIGJ9LHZlOmZ1bmN0aW9uKGEpe3ZhciBiPQowLGQsZjtpZigwPT09YS5sZW5ndGgpcmV0dXJuIGI7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKylmPWEuY2hhckNvZGVBdChkKSxiPShiPDw1KS1iK2YsYnw9MDtyZXR1cm4gYn0sRWg6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2YXIgaD0iIixkLGY7Zm9yKGQ9NzswPD1kO2QtLSlmPWE+Pj40KmQmMTUsaCs9Zi50b1N0cmluZygxNik7cmV0dXJuIGh9ZnVuY3Rpb24gZChhLGIpe3JldHVybiBhPDxifGE+Pj4zMi1ifXZhciBmLG4sYz1BcnJheSg4MCksZT0xNzMyNTg0MTkzLGc9NDAyMzIzMzQxNyxrPTI1NjIzODMxMDIsTD0yNzE3MzM4NzgsbD0zMjg1Mzc3NTIwLHAsbSx0LEIscjthPWEmJiJzdHJpbmciPT09dHlwZW9mIGE/YToiIjtwPWEubGVuZ3RoO3ZhciBxPVtdO2ZvcihmPTA7ZjxwLTM7Zis9NCluPWEuY2hhckNvZGVBdChmKTw8MjR8YS5jaGFyQ29kZUF0KGYrMSk8PDE2fGEuY2hhckNvZGVBdChmKzIpPDw4fGEuY2hhckNvZGVBdChmKzMpLHEucHVzaChuKTtzd2l0Y2gocCUKNCl7Y2FzZSAwOmY9MjE0NzQ4MzY0ODticmVhaztjYXNlIDE6Zj1hLmNoYXJDb2RlQXQocC0xKTw8MjR8ODM4ODYwODticmVhaztjYXNlIDI6Zj1hLmNoYXJDb2RlQXQocC0yKTw8MjR8YS5jaGFyQ29kZUF0KHAtMSk8PDE2fDMyNzY4O2JyZWFrO2Nhc2UgMzpmPWEuY2hhckNvZGVBdChwLTMpPDwyNHxhLmNoYXJDb2RlQXQocC0yKTw8MTZ8YS5jaGFyQ29kZUF0KHAtMSk8PDh8MTI4fWZvcihxLnB1c2goZik7MTQhPXEubGVuZ3RoJTE2OylxLnB1c2goMCk7cS5wdXNoKHA+Pj4yOSk7cS5wdXNoKHA8PDMmNDI5NDk2NzI5NSk7Zm9yKGE9MDthPHEubGVuZ3RoO2ErPTE2KXtmb3IoZj0wOzE2PmY7ZisrKWNbZl09cVthK2ZdO2ZvcihmPTE2Ozc5Pj1mO2YrKyljW2ZdPWQoY1tmLTNdXmNbZi04XV5jW2YtMTRdXmNbZi0xNl0sMSk7bj1lO3A9ZzttPWs7dD1MO0I9bDtmb3IoZj0wOzE5Pj1mO2YrKylyPWQobiw1KSsocCZtfH5wJnQpK0IrY1tmXSsxNTE4NTAwMjQ5JjQyOTQ5NjcyOTUsQj10LAp0PW0sbT1kKHAsMzApLHA9bixuPXI7Zm9yKGY9MjA7Mzk+PWY7ZisrKXI9ZChuLDUpKyhwXm1edCkrQitjW2ZdKzE4NTk3NzUzOTMmNDI5NDk2NzI5NSxCPXQsdD1tLG09ZChwLDMwKSxwPW4sbj1yO2ZvcihmPTQwOzU5Pj1mO2YrKylyPWQobiw1KSsocCZtfHAmdHxtJnQpK0IrY1tmXSsyNDAwOTU5NzA4JjQyOTQ5NjcyOTUsQj10LHQ9bSxtPWQocCwzMCkscD1uLG49cjtmb3IoZj02MDs3OT49ZjtmKyspcj1kKG4sNSkrKHBebV50KStCK2NbZl0rMzM5NTQ2OTc4MiY0Mjk0OTY3Mjk1LEI9dCx0PW0sbT1kKHAsMzApLHA9bixuPXI7ZT1lK24mNDI5NDk2NzI5NTtnPWcrcCY0Mjk0OTY3Mjk1O2s9ayttJjQyOTQ5NjcyOTU7TD1MK3QmNDI5NDk2NzI5NTtsPWwrQiY0Mjk0OTY3Mjk1fXJldHVybihiKGUpK2IoZykrYihrKStiKEwpK2IobCkpLnRvTG93ZXJDYXNlKCl9LHZiOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iIixkLGYsbixjLGUsZyxrPTA7azxhLmxlbmd0aDspZD1hLmNoYXJDb2RlQXQoaysrKSwKZj1hLmNoYXJDb2RlQXQoaysrKSxuPWEuY2hhckNvZGVBdChrKyspLGM9ZD4+MixkPShkJjMpPDw0fGY+PjQsZT0oZiYxNSk8PDJ8bj4+NixnPW4mNjMsaXNOYU4oZik/ZT1nPTY0OmlzTmFOKG4pJiYoZz02NCksYj1iKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGMpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGQpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGUpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGcpO3JldHVybiBifSxtcjpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudmVuZG9yJiYtMTxuYXZpZ2F0b3IudmVuZG9yLmluZGV4T2YoIkFwcGxlIil9LAp1YzpmdW5jdGlvbigpe3ZhciBhPXt9LGI9ITEsZD0hMSxmPSExLG49ITEsYz0hMSxlPSExLGc9ITEsaz0hMSxtPSExLGw9ITE7dHJ5e2I9Y2hlY2tGb3JQaGFudG9tSlMoKX1jYXRjaChwKXt9dHJ5ey9cYkhlYWRsZXNzQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJihkPSEwKX1jYXRjaChyKXt9dHJ5e2Y9d2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoIndlYmRyaXZlciIpfHxuYXZpZ2F0b3IuTmI/ITA6ITF9Y2F0Y2godCl7fXRyeXtuPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk9wZXJhIiksYz0tMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94IiksZT0tMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJTYWZhcmkiKSxnPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk1TSUUiKSxtPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkNocm9tZSIpLGs9IWcmJiEhd2luZG93LlN0eWxlTWVkaWEsCmw9KG18fG4pJiYhIXdpbmRvdy5DU1N9Y2F0Y2gocSl7fWEuaXNQaGFudG9tSlM9YjthLmlzQ2hyb21lSGVhZGxlc3M9ZDthLmlzRmlyZWZveEhlYWRsZXNzPWY7YS5pc09wZXJhPW47YS5pc0ZpcmVmb3g9YzthLmlzU2FmYXJpPWU7YS5pc0lFPWc7YS5pc0VkZ2U9azthLmlzQ2hyb21lPW07YS5pc0JsaW5rPWw7cmV0dXJuIGF9LGFxOmZ1bmN0aW9uKCl7dmFyIGE9IlUiLGI9dGhpcy51YygpO2IuaXNQaGFudG9tSlM/YT0iSFAiOmIuaXNDaHJvbWVIZWFkbGVzcz9hPSJIQyI6Yi5pc0ZpcmVmb3hIZWFkbGVzcz9hPSJIRiI6KGIuaXNCbGluayYmKGE9IkIiKSxiLmlzT3BlcmEmJihhPSJPIiksYi5pc0ZpcmVmb3gmJihhPSJGIiksYi5pc1NhZmFyaSYmKGE9IlMiKSxiLmlzSUUmJihhPSJJIiksYi5pc0VkZ2UmJihhPSJFIiksYi5pc0Nocm9tZSYmKGE9IkMiKSk7cmV0dXJuIGF9LFRhOmZ1bmN0aW9uKCl7dmFyIGE9e1NpOmZ1bmN0aW9uKCl7cmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSl9LApjajpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9CbGFja0JlcnJ5L2kpfSxQcTpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpfSxqbDpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9PcGVyYSBNaW5pL2kpfSxJbTpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9JRU1vYmlsZS9pKX0sTW46ZnVuY3Rpb24oKXtyZXR1cm4gYS5TaSgpfHxhLmNqKCl8fGEuUHEoKXx8YS5qbCgpfHxhLkltKCl9fTtyZXR1cm4gYS5NbigpfSxsYTpmdW5jdGlvbihhKXt2YXIgYj0ic291cmNlIHByb3RvY29sIGF1dGhvcml0eSB1c2VySW5mbyB1c2VyIHBhc3N3b3JkIGhvc3QgcG9ydCByZWxhdGl2ZSBwYXRoIGRpcmVjdG9yeSBmaWxlIHF1ZXJ5IGFuY2hvciIuc3BsaXQoIiAiKTthPS9eKD86KD8hW146QF0rOlteOkBcL10qQCkoW146XC8/Iy5dKyk6KT8oPzpcL1wvKT8oKD86KChbXjpAXSopKD86OihbXjpAXSopKT8pP0ApPyhbXjpcLz8jXSopKD86OihcZCopKT8pKCgoXC8oPzpbXj8jXSg/IVtePyNcL10qXC5bXj8jXC8uXSsoPzpbPyNdfCQpKSkqXC8/KT8oW14/I1wvXSopKSg/Olw/KFteI10qKSk/KD86IyguKikpPykvLmV4ZWMoYSk7CmZvcih2YXIgZD17fSxmPTE0O2YtLTspZFtiW2ZdXT1hW2ZdfHwiIjtkLnF1ZXJ5S2V5PXt9O2RbYlsxMl1dLnJlcGxhY2UoLyg/Ol58JikoW14mPV0qKT0/KFteJl0qKS9nLGZ1bmN0aW9uKGEsYixoKXtiJiYoZC5xdWVyeUtleVtiXT1oKX0pO3JldHVybiBkfSx1bmlxdWU6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXt9LGQ9W10sZj0wLG49YS5sZW5ndGg7ZjxuOysrZiliLmhhc093blByb3BlcnR5KGFbZl0pfHwoZC5wdXNoKGFbZl0pLGJbYVtmXV09MSk7cmV0dXJuIGR9LFNiOmZ1bmN0aW9uKGEpe2E9dGhpcy5sYShhKS5ob3N0LnNwbGl0KCIuIik7dmFyIGI9IiI7YVthLmxlbmd0aC0yXSYmKGIrPWFbYS5sZW5ndGgtMl0rIi4iKTthW2EubGVuZ3RoLTFdJiYoYis9YVthLmxlbmd0aC0xXSk7cmV0dXJuIGJ9LEJhOmZ1bmN0aW9uKGEpe3ZhciBiPSIiLGQ9ITE7d2luZG93JiZ3aW5kb3cubG9jYXRpb24mJndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSYmKGI9d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKTsKYiYmLTE8Yi5pbmRleE9mKGEpJiYoZD0hMCk7cmV0dXJuIGR9LHFxOmZ1bmN0aW9uKCl7dmFyIGE9IiIsYj0iIixkPSIiO3RyeXthPXdpbmRvdy5sb2NhdGlvbi5ob3N0LGI9d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLHdpbmRvdyE9d2luZG93LnRvcCYmKGE9d2luZG93LnRvcC5sb2NhdGlvbi5ob3N0LGI9d2luZG93LnRvcC5sb2NhdGlvbi5wYXRobmFtZSl9Y2F0Y2goZil7ZG9jdW1lbnQucmVmZXJyZXImJihkPXRoaXMubGEoZG9jdW1lbnQucmVmZXJyZXIpLGE9ZC5ob3N0LGI9ZC5wYXRoKX1yZXR1cm4gYStifSxVbzpmdW5jdGlvbihhLGIpe2Zvcih2YXIgZD1bXSxmPVtdLG49MDtuPGIubGVuZ3RoO24rKylkW2Jbbl1dPSEwO2ZvcihuPTA7bjxhLmxlbmd0aDtuKyspZFthW25dXXx8Zi5wdXNoKGFbbl0pO3JldHVybiBmfSxXdDpmdW5jdGlvbihhLGIpe3ZhciBkPS0xLGY9IiI7dHJ5ezA8YS5pbmRleE9mKCIlIikmJjA8Yj8oZj1hLnNwbGl0KCIlIiksZD1iLzEwMCpmKTooZD1hLnNwbGl0KCI6IiksCmQ9MzYwMCorZFswXSs2MCorZFsxXSsgK2RbMl0sZD1NYXRoLnJvdW5kKGQpKX1jYXRjaChuKXtkPS0xfXJldHVybiBpc05hTihkKT8tMTpkfSx5ZzpmdW5jdGlvbihhKXthPU1hdGgucm91bmQoYSk7dmFyIGI9Ii0tOi0tIjswPD1hJiYoYT1NYXRoLmZsb29yKGEpLGI9TWF0aC5mbG9vcihhLzYwKSxiPXRoaXMuVmgoYikrIjoiK3RoaXMuVmgoTWF0aC5mbG9vcihhLTYwKmIpKSk7cmV0dXJuIGJ9LFZoOmZ1bmN0aW9uKGEpe3JldHVybiAxMD5hPyIwIithLnRvU3RyaW5nKCk6YS50b1N0cmluZygpfSxlZjpmdW5jdGlvbihhKXt0aGlzLlNhPWF9LHZnOmZ1bmN0aW9uKGEsYixkKXt2YXIgZjtkLnN0YXRlPXRoaXMuU2E7dGhpcy5XZihkKTsiZnVuY3Rpb24iPT09dHlwZW9mIHdpbmRvdy5DdXN0b21FdmVudD9mPW5ldyBDdXN0b21FdmVudChiLHtkZXRhaWw6ZH0pOihmPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpLGYuaW5pdEN1c3RvbUV2ZW50KGIsITEsITEsZCkpOwphLmRpc3BhdGNoRXZlbnQoZil9LHdjOmZ1bmN0aW9uKGEsYixkKXtifHwoYj0iaGRFdmVudCIpO2R8fChkPXdpbmRvdyk7dGhpcy52ZyhkLGIsYSl9LHY6ZnVuY3Rpb24oYSxiLGQsZixuLGMsZyl7dmFyIEE9YTtkJiZiJiYoYj1rLlhhKGIsZCkpO2ImJihBPWsuWGEoYSxiKSk7ZiYmKEE9ay5YYShBLGYpKTtuJiYoQT1rLlhhKEEsbikpO2MmJihBPWsuWGEoQSxjKSk7ZyYmKEE9ay5YYShBLGMpKTtlLndjKEEpfSwkczpmdW5jdGlvbihhKXt2YXIgYj17fTtpZighYS5jb2RlKXJldHVybiExO2lmKGEuc3BlY2lhbF90cmFjayliPWE7ZWxzZSBpZighKGEuY29kZSYmMTAwNTw9YS5jb2RlJiYxMDI5Pj1hLmNvZGUpfHwxMDIzPT1hLmNvZGV8fDEwMTg9PWEuY29kZSlyZXR1cm47dHJ5e2phJiYoYi5zZXNzaW9uX2lkPWphKTtiLmFkc2Vzc2lvbl9pZD1hLmFkc2Vzc2lvbl9pZD9hLmFkc2Vzc2lvbl9pZDoiZXBvbiI7YS5ob21hZEltcHJlc3Npb25BZElkJiYoYi5hZF9pZD1hLmhvbWFkSW1wcmVzc2lvbkFkSWQpOwpiLmV2ZW50PWEuY29kZTtiLnNpdGVfaHJlZj10aGlzLnFxKCk7aWYoYS5zdGF0ZSlzd2l0Y2goYS5zdGF0ZSl7Y2FzZSAicHJlcm9sbCI6Yi5wb3NpdGlvbj0xO2JyZWFrO2Nhc2UgIm1pZHJvbGwiOmIucG9zaXRpb249MjticmVhaztjYXNlICJwb3N0cm9sbCI6Yi5wb3NpdGlvbj0zO2JyZWFrO2RlZmF1bHQ6Yi5wb3NpdGlvbj0wfWEudmlkZW9fZHVyYXRpb24mJihiLnZpZGVvX2R1cmF0aW9uPWEudmlkZW9fZHVyYXRpb24pfWNhdGNoKGQpe31yZXR1cm4gYn0sV2Y6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy4kcyhhKTtpZihiKWlmKCFsfHwhbC5YKXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5XZihiKX0uYmluZCh0aGlzKSw1MDApO2Vsc2UgaWYobC5pc0VuYWJsZWQpe2lmKCJvYmplY3QiPT10eXBlb2YgYil0cnl7Yj1KU09OLnN0cmluZ2lmeShiKX1jYXRjaChkKXtiPWIudG9TdHJpbmc/Yi50b1N0cmluZygpOiIifWImJmIudHJpbSYmKGI9Yi50cmltKCkpO2E9bC5EZCgpOwpsLnphKGEsITApO2E9bC56YShhLCEwKTthLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0iIjthLmRhdGEuaG9tYWRfYXQ9YjtsLkxhKGEsZnVuY3Rpb24oKXt9KX19LHRyYWNrOmZ1bmN0aW9uKGEsYixkKXtpZihkKWlmKCFsfHwhbC5YKXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50cmFjayhhLGIsZCl9LmJpbmQodGhpcyksNTAwKTtlbHNlIGlmKGwuaXNFbmFibGVkKXthJiZhLnRyaW0mJihhPWEudHJpbSgpKTtiJiZiLnRyaW0mJihiPWIudHJpbSgpKTt2YXIgZj1hK2I7dGhpcy5NY3x8KHRoaXMuTWM9e30pO3RoaXMuTWNbZl18fCh0aGlzLk1jW2ZdPTApO3RoaXMuTWNbZl0rKzsxMDx0aGlzLk1jW2ZdfHwoZj1sLkRkKCkrIj9ob21hZF90cmFja19rZXk9IitlbmNvZGVVUklDb21wb25lbnQoYSkrIiZob21hZF90cmFja192YWx1ZT0iK2VuY29kZVVSSUNvbXBvbmVudChiKSxsLnphKGYsITApLGY9bC56YShmLCEwKSxmLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0KIiIsZi5kYXRhLmhvbWFkX3RyYWNrX2tleT0iKiIrZW5jb2RlVVJJQ29tcG9uZW50KGEpKyIqIixmLmRhdGEuaG9tYWRfdHJhY2tfdmFsdWU9IioiK2VuY29kZVVSSUNvbXBvbmVudChiKSsiKiIsbC5MYShmLGZ1bmN0aW9uKGQpe3ZhciBmPSExO2Q9ZC5yZXNwb25zZVRleHQ7dHJ5e2Q9SlNPTi5wYXJzZShkKSxkPWQuZGF0YSxkWzBdPT1lbmNvZGVVUklDb21wb25lbnQoYSkmJihmPSEwKSxkWzFdJiZkWzFdIT1lbmNvZGVVUklDb21wb25lbnQoYikmJihmPSExKX1jYXRjaChjKXt9Znx8dGhpcy50cmFjaygic3RhdHNfaGRfdHJhY2tjaGVjayIsKGRbMF0/ZFswXToiIikrKGRbMV0/ZFsxXToiIiksITApfS5iaW5kKHRoaXMpKSl9fSxKZTpmdW5jdGlvbigpe2wmJmwuWD9sLmlzRW5hYmxlZCYmbC5xbygpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5KZSgpfS5iaW5kKHRoaXMpLDUwMCl9LHJlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEmJiJvYmplY3QiPT10eXBlb2YgYSYmCmEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYikubGVuZ3RoP3RoaXMuaWIoYS5nZXRFbGVtZW50c0J5VGFnTmFtZShiKVswXSk6IiJ9LHVlOmZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLmNoaWxkTm9kZXMmJmEuY2hpbGROb2Rlc1swXT9hLmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlOiIifSxpYjpmdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLnFkKGEpOiIifSxxZDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnVlKGEpO2ImJihiPWIudHJpbSgpKTshYiYmYS50ZXh0Q29udGVudCYmKGI9YS50ZXh0Q29udGVudCxiPWIudHJpbSgpKTtyZXR1cm4gYn0sJGY6ZnVuY3Rpb24oYSxiLGQsZil7ZD0hMTtpZihiLkVlKGEpfHx0aGlzLnByKGEpfHwwPD1hLmluZGV4T2YoImRhdGE6aW1hZ2UiKSlyZXR1cm4gYTt3aW5kb3cuc2FuZGJveCYmd2luZG93LnNhbmRib3guYmYmJndpbmRvdy5zYW5kYm94LmJmWyJTdHJpbmcucHJvdG90eXBlLmluZGV4T2YiXSYmKDA8PXNhbmRib3guYmZbIlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiJdLmJpbmQoYSkoImVycm9yIil8fApzYW5kYm94LmJmWyJTdHJpbmcucHJvdG90eXBlLmluZGV4T2YiXS5iaW5kKGEpKCJFcnJvciIpKTtpZih0aGlzLnRnKGEpKXJldHVybiB0aGlzLnRnKGEpO3ZhciBuPXtob21hZF91cmxfcHJlZml4X2FsaWFzOiJ2cGFpZCJ9O24uaG9tYWRfdXJsX3N1ZmZpeD1hO24uaG9tYWRfdXJsX3N1ZmZpeF9iYXNlNjQ9dGhpcy52YihhKTtuLmhvbWFkX3JldHVybl9vbmx5X3VybF9hbmRfaGFzaD0idHJ1ZSI7bi5ob21hZF9oYXNoX2d1ZXNzZWQ9InRydWUiO2YmJmYucG9zdCYmKG5bIlgtSG9tYWQtUG9zdCJdPSJ0cnVlIik7ZCYmKG4uaG9tYWRfaW50cm9zcGVjdD0iaWZyYW1lIik7bi5ob21hZF92cGFpZF9jb21wYXRpYmxlPSJ0cnVlIjtuLmhvbWFkX3ZwYWlkX2N0eD0idHJ1ZSI7ZiYmZi5vbmx5VVJMJiYobi5ob21hZF9yZXBsYWNlX3VybHNfaW5fdGFncz0iTWVkaWFGaWxlIik7dmFyIGM9ITE7ZD0hMTtkPXRoaXMuWWEoYSxiLkphLG4sZnVuY3Rpb24oYSl7Yz1hLnJlc3BvbnNlVGV4dH0sCmZ1bmN0aW9uKCl7fSxiLCEwKTt0cnl7Y3x8KGM9ZCksYz1KU09OLnBhcnNlKGMpfWNhdGNoKGUpe2M9ITF9Yy51cmwmJmMuaGFzaCYmKGM9Yi51ZCgpLnJlcGxhY2UoIltoYXNoXSIsYy5oYXNoKSk7dGhpcy5nbihjLGEpO3JldHVybiBjfSxZYTpmdW5jdGlvbihhLGIsZCxmLG4sYyxlLGcpe3ZhciBrPWN8fGw7Yz0hMDtnJiYoYz0hMSk7aWYoayYmay5YKWlmKGsuaXNFbmFibGVkKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSl0cnl7YT1hKCl9Y2F0Y2gobSl7bihtKX1pZigic3RyaW5nIiE9dHlwZW9mIGEpbigpO2Vsc2V7ay56YShhLGMpO2M9ay56YShhLGMpO2MuZGF0YS5ob21hZF91cmxfcHJlZml4X2FsaWFzPWI7Yy5kYXRhLmhvbWFkX2hhc2hfZ3Vlc3NlZD0idHJ1ZSI7Zm9yKHZhciByIGluIGQpYy5kYXRhW3JdPWRbcl07cmV0dXJuIGsuTGEoYyxmLG4sIiIsIiIsZSl9fWVsc2UgbigpO2Vsc2Ugd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLllhKGEsYixkLGYsbiwKayxlLGcpfS5iaW5kKHRoaXMpLDUwMCl9LGVoOmZ1bmN0aW9uKGEsYixkLGYsYyxlLGcpe3ZhciBrPSEwO2cmJihrPSExKTtpZigic3RyaW5nIiE9dHlwZW9mIGQpe2c9ZDtkPSIiO2Zvcih2YXIgbSBpbiBnKWQrPSImIittKyI9IitlbmNvZGVVUklDb21wb25lbnQoZ1ttXSk7ZD1kLnN1YnN0cigxKX12YXIgbD1uZXcgWE1MSHR0cFJlcXVlc3Q7bC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshZnx8NCE9bC5yZWFkeVN0YXRlfHwyMDAhPWwuc3RhdHVzJiYyMDEhPWwuc3RhdHVzfHxmKGwpO2MmJjQ9PWwucmVhZHlTdGF0ZSYmMjAwIT1sLnN0YXR1cyYmMjAxIT1sLnN0YXR1cyYmYyhsKX07dHJ5e2wub3BlbihiLGEsayksbC53aXRoQ3JlZGVudGlhbHM9ZSwwPGQubGVuZ3RoJiZsLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpLGwuc2VuZChkKX1jYXRjaChyKXtjJiZjKCl9cmV0dXJuIGx9LEtyOmZ1bmN0aW9uKGEsCmIsZCl7dGhpcy5laChhLCJHRVQiLCIiLGZ1bmN0aW9uKGEpe2E9YS5yZXNwb25zZVRleHQ7aWYodGhpcy5LYylmb3IodmFyIGMgaW4gdGhpcy5LYylhPWEuc3BsaXQoYykuam9pbih0aGlzLktjW2NdKTtjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2MudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtjLnNyYz0iZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIrZS52YihhKTtkJiYoYy5vbmVycm9yPWQpO2RvY3VtZW50LmhlYWQuZmlyc3RDaGlsZD9kb2N1bWVudC5oZWFkLmluc2VydEJlZm9yZShjLGRvY3VtZW50LmhlYWQuZmlyc3RDaGlsZCk6ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChjKTtiJiZzZXRUaW1lb3V0KGIsMCl9LmJpbmQodGhpcyksZCl9LGZoOmZ1bmN0aW9uKGEsYixkLGYpe3ZhciBjPXtob21hZF91cmxfcHJlZml4X2FsaWFzOiJ2cGFpZCJ9O2MuaG9tYWRfdXJsX3N1ZmZpeD1hO2MuaG9tYWRfdXJsX3N1ZmZpeF9iYXNlNjQ9dGhpcy52YihhKTtjLmhvbWFkX3JldHVybl9vbmx5X3VybF9hbmRfaGFzaD0KInRydWUiO2MuaG9tYWRfaGFzaF9ndWVzc2VkPSJ0cnVlIjt0aGlzLllhKGEsZi5KYSxjLGZ1bmN0aW9uKGEpe2E9YS5yZXNwb25zZVRleHQ7dHJ5e2E9SlNPTi5wYXJzZShhKX1jYXRjaChjKXthPSExfXRoaXMuS3IoZi51ZCgpLnJlcGxhY2UoIltoYXNoXSIsYS5oYXNoKSxiLGQpfS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7fSxmLCEwKX0sSHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuS2M9YX0sRXY6ZnVuY3Rpb24oYSxiLGQsZixjKXt0aGlzLllhKGEsZCx7fSxmdW5jdGlvbihhKXt0cnl7dmFyIGQ9SlNPTi5wYXJzZShhLnJlc3BvbnNlVGV4dCk7ZFswXSYmKGQ9ZFswXSk7ZD9kLmlkPyhiPWIucmVwbGFjZSgiW2lkXSIsZC5pZCksYj1iLnJlcGxhY2UoIltwcmljZV0iLGQucHJpY2UpLGI9Yi5yZXBsYWNlKCJbYWR2ZXJ0aXNlcl0iLGQuYWR2ZXJ0aXNlciksYj1iLnJlcGxhY2UoIltjdXJsXSIsZC5jdXJsKSxiPWIucmVwbGFjZSgiW2Zvcm1hdF0iLGQuZm9ybWF0KSxiPWIucmVwbGFjZSgiW3NyY10iLApkLnNyYyksYj1iLnJlcGxhY2UoIltwcmljZXJhbmdlXSIsZC5wcmljZXJhbmdlKSxiPWIucmVwbGFjZSgiW3BpZF0iLGQucGlkKSxiPWIucmVwbGFjZSgiW3ByaW9dIixkLnByaW8pLGI9Yi5yZXBsYWNlKCJbZGlkXSIsZC5kaWQpLGMoe3BsYWNlaG9sZGVyOmIsbWFjcm86Zn0pKTpjKHtwbGFjZWhvbGRlcjoiIixtYWNybzpmfSk6Yyh7cGxhY2Vob2xkZXI6IiIsbWFjcm86Zn0pfWNhdGNoKGUpe2Moe3BsYWNlaG9sZGVyOiIiLG1hY3JvOmZ9KX19LGZ1bmN0aW9uKCl7Yyh7cGxhY2Vob2xkZXI6IiIsbWFjcm86Zn0pfSl9LFBuOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0hMTshYjspe3ZhciBkPWEubGFzdEluZGV4T2YoIkVOQ09ERSgiKTswPmQ/Yj0hMDooZD1hLnN1YnN0cmluZyhkKzcsYS5pbmRleE9mKCIpIixkKSksYT1hLnJlcGxhY2UoIkVOQ09ERSgiK2QrIikiLGVuY29kZVVSSUNvbXBvbmVudChkKSkpfXJldHVybiBhfSxrcjpmdW5jdGlvbihhLGIpe3ZhciBkPSExO2lmKGIpZm9yKHZhciBmPQowO2Y8Yi5sZW5ndGg7ZisrKWlmKGJbZl09PWEpe2Q9ITA7YnJlYWt9cmV0dXJuIGR9fX0pKGMpO3ZhciBSPWMuJGp8fFI7bmV3IFI7dmFyIGU9bmV3IFI7KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoYSl7dGhpcy5kYXRhPWF8fHt9fWMuWmo9YjtiLlhhPWZ1bmN0aW9uKGEsYil7dmFyIGQ9e30sZjtmb3IoZiBpbiBiKWRbZl09YltmXTtmb3IoZiBpbiBhKWRbZl09YVtmXTtyZXR1cm4gZH07Yi5Rcz17Y29kZToiMTAwMCIsdHlwZToicGVuYWx0eSIsbWVzc2FnZToiIixuYW1lOiJwZW5hbHR5In07Yi5kcz17Y29kZToiMTAwMSIsdHlwZToibWVkaWFlcnJvciIsbWVzc2FnZToiIixuYW1lOiJhZEVycm9yIn07Yi5udj17Y29kZToiMTAwMiIsdHlwZToidnBhaWQiLG1lc3NhZ2U6IiIsbmFtZToidnBhaWQifTtiLnlwPXtjb2RlOiIxMDAzIix0eXBlOiJlbXB0eVZhc3QiLG1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IueHY9e2NvZGU6IjEwMDQiLHR5cGU6Im1hbGZvcm1hdHRlZFhNTCIsCm1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IuVWY9e2NvZGU6IjEwMDUiLHR5cGU6ImFkU3RhcnQiLG1lc3NhZ2U6IiIsbmFtZToiYWRTdGFydCJ9O2IuTmY9e2NvZGU6IjEwMDYiLHR5cGU6ImFkRmlyc3RRdWFydGlsZSIsbWVzc2FnZToiIixuYW1lOiJhZEZpcnN0UXVhcnRpbGUifTtiLlJmPXtjb2RlOiIxMDA3Iix0eXBlOiJhZE1pZFBvaW50IixtZXNzYWdlOiIiLG5hbWU6ImFkTWlkUG9pbnQifTtiLlZmPXtjb2RlOiIxMDA4Iix0eXBlOiJhZFRoaXJkUXVhcnRpbGUiLG1lc3NhZ2U6IiIsbmFtZToiYWRUaGlyZFF1YXJ0aWxlIn07Yi4kbT17Y29kZToiMTAwOSIsdHlwZToiYWRDb21wbGV0ZSIsbWVzc2FnZToiIixuYW1lOiJhZENvbXBsZXRlIn07Yi5QZj17Y29kZToiMTAxMCIsdHlwZToiYWRJbXByZXNzaW9uc0NhbGxlZCIsbWVzc2FnZToiIixuYW1lOiJhZEltcHJlc3Npb24ifTtiLlV1PXtjb2RlOiIxMDExIix0eXBlOiJ2YXN0TG9hZGluZ0ZhaWxlZCIsbWVzc2FnZToiIiwKbmFtZToiYWRFcnJvciJ9O2IuY3M9e2NvZGU6IjEwMTIiLHR5cGU6Im5vQ3JlYXRpdmUiLG1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IuenA9e2NvZGU6IjEwMTMiLHR5cGU6ImVtcHR5VmFzdEZyb21Ib21hZFNlcnZlckV2ZW50IixtZXNzYWdlOiIiLG5hbWU6ImFkRXJyb3IifTtiLnV2PXtjb2RlOiIxMDE0Iix0eXBlOiJ3cmFwcGVyTGltaXRSZWFjaGVkIixtZXNzYWdlOiIiLG5hbWU6ImFkRXJyb3IifTtiLmlnPXtjb2RlOiIxMDE1Iix0eXBlOiJjbGlja3Rocm91Z2giLG1lc3NhZ2U6IiIsbmFtZToiYWRDbGljayJ9O2IuUG89e2NvZGU6IjEwMTYiLHR5cGU6ImNvbnRpbnVlQ29udGVudCIsbWVzc2FnZToiIixuYW1lOiJjb250aW51ZUNvbnRlbnQifTtiLmdkPXtjb2RlOiIxMDE3Iix0eXBlOiJjb250ZW50UGxheWVyUGxheSIsbWVzc2FnZToiIixuYW1lOiJjb250ZW50UGxheWVyUGxheSJ9O2IuZmQ9e2NvZGU6IjEwMTgiLHR5cGU6ImNvbnRlbnRQbGF5ZXJQYXVzZSIsbWVzc2FnZToiIiwKbmFtZToiY29udGVudFBsYXllclBhdXNlIn07Yi5UZj17Y29kZToiMTAxOSIsdHlwZToiYWRTa2lwcGVkIixtZXNzYWdlOiIiLG5hbWU6ImFkU2tpcHBlZCJ9O2IuYm49e2NvZGU6IjEwMjAiLHR5cGU6ImFkUmVxdWVzdCIsbWVzc2FnZToiIixuYW1lOiJhZFJlcXVlc3QifTtiLlVjPXtjb2RlOiIxMDIxIix0eXBlOiJhZFBsYXkiLG1lc3NhZ2U6IiIsbmFtZToiYWRQbGF5In07Yi5ZZD17Y29kZToiMTAyMiIsdHlwZToiYWRQYXVzZSIsbWVzc2FnZToiIixuYW1lOiJhZFBhdXNlIn07Yi4kZD17Y29kZToiMTAyMyIsdHlwZToiYWRUaW1lIixtZXNzYWdlOiIiLG5hbWU6ImFkVGltZSJ9O2IuYW49e2NvZGU6IjEwMjQiLHR5cGU6ImFkTWV0YSIsbWVzc2FnZToiIixuYW1lOiJhZE1ldGEifTtiLmJpPXtjb2RlOiIxMDI1Iix0eXBlOiJ2aWV3YWJsZSIsbWVzc2FnZToiIixuYW1lOiJ2aWV3YWJsZSJ9O2IuZnM9e2NvZGU6IjEwMjYiLHR5cGU6Im5vdFZpZXdhYmxlIixtZXNzYWdlOiIiLG5hbWU6Im5vdFZpZXdhYmxlIn07CmIueGQ9e2NvZGU6IjEwMjciLHR5cGU6Im11dGUiLG1lc3NhZ2U6IiIsbmFtZToibXV0ZSJ9O2IudGY9e2NvZGU6IjEwMjgiLHR5cGU6InVubXV0ZSIsbWVzc2FnZToiIixuYW1lOiJ1bm11dGUifTtiLmpnPXtjb2RlOiIxMDI5Iix0eXBlOiJjb250ZW50UGxheWVyTXV0ZWQiLG1lc3NhZ2U6IiIsbmFtZToiY29udGVudFBsYXllck11dGVkIn07Yi5tdj17Y29kZToiMTAzMCIsdHlwZToidnBhaWRlcnJvciIsbWVzc2FnZToiIixuYW1lOiJhZEVycm9yIn07Yi5SdT17Y29kZToiOTAwMSIsdHlwZToidmFyaWFibGVEZWxldGVkRXZlbnQiLG1lc3NhZ2U6IiIsbmFtZToidmFyaWFibGVEZWxldGVkRXZlbnQifTtiLmVzPXtjb2RlOiI5MDAyIix0eXBlOiJub1ZhcmlhYmxlU2V0dGluZ0V2ZW50IixtZXNzYWdlOiIiLG5hbWU6Im5vVmFyaWFibGVTZXR0aW5nRXZlbnQifTtiLnByb3RvdHlwZT17Z2V0RXJyb3JDb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3JDb2RlfX19KShjKTt2YXIgaz0KYy5aanx8aztjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5odT10aGlzLmFbMl07dGhpcy5Iaz10aGlzLmFbMV07dGhpcy5LdT10aGlzLmFbOF07dGhpcy5QcD10aGlzLmFbN107dGhpcy5FaT10aGlzLmFbNF07dGhpcy5Gaj10aGlzLmFbMV07dGhpcy52dT10aGlzLmFbNF07dGhpcy5vbD10aGlzLmFbNV07dGhpcy5Mbz10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs2XX1jLkFsPWI7Yi5wcm90b3R5cGU9e2d1OmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5odTp0aGlzLkdrKGEpfSxHazpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuSGs6dGhpcy5KdShhKX0sSnU6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLkt1OnRoaXMuT3AoYSl9LE9wOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5QcDp0aGlzLkRpKGEpfSxEaTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuRWk6CnRoaXMuRWooYSl9LEVqOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5Gajp0aGlzLnV1KGEpfSx1dTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMudnU6dGhpcy5ubChhKX0sbmw6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLm9sOnRoaXMuS28oYSl9LEtvOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5Mbzp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmo6YX19fSkoYyk7dmFyIGthPWMuQWx8fGthLG1jPW5ldyBrYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPW1jLmd1KDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7fWMuYWs9YjtiLnByb3RvdHlwZT17dmU6ZnVuY3Rpb24oYSl7dmFyIGI9MCxkLGYsYztpZigwPT1hLmxlbmd0aClyZXR1cm4gYjtkPTA7Zm9yKGM9YS5sZW5ndGg7ZDxjO2QrKylmPWEuY2hhckNvZGVBdChkKSwKYj0oYjw8NSktYitmLGJ8PTA7cmV0dXJuIE1hdGguYWJzKGIpfSxqYTpmdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKERhdGUubm93KCkvMUUzLzM2MDAvMjQpK25hdmlnYXRvci5hcHBDb2RlTmFtZStuYXZpZ2F0b3IuYXBwTmFtZStuYXZpZ2F0b3IuYXBwVmVyc2lvbituYXZpZ2F0b3IudXNlckFnZW50K25hdmlnYXRvci5wbGF0Zm9ybSsobmF2aWdhdG9yLmxhbmd1YWdlfHxuYXZpZ2F0b3IuRHx8IngiKX0sa3E6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yb3VuZChEYXRlLm5vdygpLzFFMy8zNjAwKStuYXZpZ2F0b3IuYXBwQ29kZU5hbWUrbmF2aWdhdG9yLmFwcE5hbWUrbmF2aWdhdG9yLmFwcFZlcnNpb24rbmF2aWdhdG9yLnVzZXJBZ2VudCtuYXZpZ2F0b3IucGxhdGZvcm0rKG5hdmlnYXRvci5sYW5ndWFnZXx8bmF2aWdhdG9yLkR8fCJ4IikrKG5ldyBEYXRlKS50b1RpbWVTdHJpbmcoKS5zdWJzdHIoLTEyKX0sb2Q6ZnVuY3Rpb24oYSl7YT1wYXJzZUludChhKTtpZig2NTw9CmEmJjkwPj1hfHw5Nzw9YSYmMTIyPj1hKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGEpO2lmKDA+PWEpcmV0dXJuIiI7aWYoNjU+YSlyZXR1cm4gdGhpcy5vZChhKzY1KTtpZig5MDxhKXJldHVybiB0aGlzLm9kKE1hdGgucm91bmQoYS8yKSl9LHJldmVyc2U6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGQ9YS5sZW5ndGgtMSxiPSIiOzA8PWQ7Yis9YVtkLS1dKTtyZXR1cm4gYn0saWE6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy52ZSh0aGlzLmphKCkrIiIpLGE9KGErIiIrdGhpcy5yZXZlcnNlKGErIiIpKS5tYXRjaCgvLnsxLDJ9L2cpLGI9IiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWIrPXRoaXMub2QoYVtkXSk7MD09Yi5sZW5ndGgmJihiPSJ6b3JrIik7cmV0dXJuIGJ9LGZyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWEoKSsiMiJ9LFRnOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMudmUodGhpcy5rcSgpKyIiKSxhPShhKyIiK3RoaXMucmV2ZXJzZShhKyIiKSkubWF0Y2goLy57MSwyfS9nKSwKYj0iIixkPTA7ZDxhLmxlbmd0aDtkKyspYis9dGhpcy5vZChhW2RdKTswPT1iLmxlbmd0aCYmKGI9InpvcmsiKTtyZXR1cm4gYn19fSkoYyk7dmFyIEo9Yy5ha3x8SjtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5kbT10aGlzLmFbOV07dGhpcy5xdj10aGlzLmFbMl07dGhpcy5tbz10aGlzLmFbMV07dGhpcy5QdT10aGlzLmFbNl07dGhpcy5DaT10aGlzLmFbNl07dGhpcy5xbj10aGlzLmFbN107dGhpcy53az10aGlzLmFbM107dGhpcy5qPXRoaXMuYVszXX1jLlNvPWI7Yi5wcm90b3R5cGU9e2NtOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5kbTp0aGlzLnB2KGEpfSxwdjpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMucXY6dGhpcy5sbyhhKX0sbG86ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLm1vOnRoaXMuT3UoYSl9LE91OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhPwp0aGlzLlB1OnRoaXMuQmkoYSl9LEJpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5DaTp0aGlzLnBuKGEpfSxwbjpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMucW46dGhpcy52ayhhKX0sdms6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLndrOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuajphfX19KShjKTt2YXIgbGE9Yy5Tb3x8bGEsbmM9bmV3IGxhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9bmMuY20oNCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe312YXIgYT0veHl6Ly50ZXN0KGZ1bmN0aW9uKCl7eHl6fSk/L1xiX3N1cGVyXGIvOi8uKi87Yi5leHRlbmQ9ZnVuY3Rpb24oaCl7dmFyIGQ9dGhpcy5wcm90b3R5cGUsZj1PYmplY3QuY3JlYXRlKGQpLGM7Zm9yKGMgaW4gaClmW2NdPSJmdW5jdGlvbiI9PT0KdHlwZW9mIGhbY10mJiJmdW5jdGlvbiI9PXR5cGVvZiBkW2NdJiZhLnRlc3QoaFtjXSk/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD10aGlzLm07dGhpcy5tPWRbYV07dmFyIGY9Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5tPWg7cmV0dXJuIGZ9fShjLGhbY10pOmhbY107aD0iZnVuY3Rpb24iPT09dHlwZW9mIGYubD9mLmhhc093blByb3BlcnR5KCJpbml0Iik/Zi5sOmZ1bmN0aW9uKCl7ZC5sLmFwcGx5KHRoaXMsYXJndW1lbnRzKX06ZnVuY3Rpb24oKXt9O2gucHJvdG90eXBlPWY7Zi5jb25zdHJ1Y3Rvcj1oO2guZXh0ZW5kPWIuZXh0ZW5kO3JldHVybiBofTtjLmlqPWJ9KShjKTt2YXIgTT1jLmlqfHxNO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnVzPXRoaXMuYVs4XTt0aGlzLkFvPXRoaXMuYVsyXTt0aGlzLmlpPXRoaXMuYVs3XTt0aGlzLkJuPQp0aGlzLmFbNV07dGhpcy5UdD10aGlzLmFbOV07dGhpcy5zcz10aGlzLmFbNV07dGhpcy5XdT10aGlzLmFbOF07dGhpcy5qPXRoaXMuYVsxXX1jLlNrPWI7Yi5wcm90b3R5cGU9e3RzOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy51czp0aGlzLnpvKGEpfSx6bzpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuQW86dGhpcy5oaShhKX0saGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5paTp0aGlzLkFuKGEpfSxBbjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuQm46dGhpcy5TdChhKX0sU3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlR0OnRoaXMucnMoYSl9LHJzOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5zczp0aGlzLlZ1KGEpfSxWdTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuV3U6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBtYT1jLlNrfHxtYSxvYz1uZXcgbWEoMSxuZXcgRGF0ZSwKMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9b2MudHMoNCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7Yy5zbD1NLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLk1hPXt9O3RoaXMuSz1udWxsO3RoaXMuR2M9MTAwO3RoaXMuRmI9MDt0aGlzLlVhPTE1MDt0aGlzLkhiPTA7dGhpcy5DdChiKX0sZzpmdW5jdGlvbigpe30sUjpmdW5jdGlvbigpe3RoaXMuRmI8PXRoaXMuVWE/KHRoaXMuRmIrKyx0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuZy5iaW5kKHRoaXMpLHRoaXMuR2MpKTowPnRoaXMuVWEmJih0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuZy5iaW5kKHRoaXMpLHRoaXMuR2MpKX0sb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GYj50aGlzLlVhPyEwOiExfSxhZjpmdW5jdGlvbigpe3RoaXMuRmI9MH0sTzpmdW5jdGlvbigpe3JldHVybiJlbXB0eSJ9LEN0OmZ1bmN0aW9uKGIpe3RoaXMuSz0KYn0saXE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LfSxQOmZ1bmN0aW9uKGIpe2UudHJhY2soInN0YXRzX3BsYXllciIsYi5PKCksITApO3RoaXMuTWFbYi5qYSgpXT1iO04mJk4uYWgmJk4uYXUoYil9LCR2OmZ1bmN0aW9uKCl7cmV0dXJuIGUudGUodGhpcy5NYSl9LE46ZnVuY3Rpb24oYil7dmFyIGE9Yi52aWRlb1RhZyxoO2ZvcihoIGluIHRoaXMuTWEpaWYoYT09dGhpcy5NYVtoXS52aWRlb1RhZylyZXR1cm4hMDtyZXR1cm4gdGhpcy5NYVtiLmphKCldPyEwOiExfSxscjpmdW5jdGlvbihiKXtiPWIuSWEoKTtmb3IodmFyIGEgaW4gdGhpcy5NYSlpZihiLmlkPT10aGlzLk1hW2FdLklhKCkuaWQpcmV0dXJuITA7cmV0dXJuITF9LHB3OmZ1bmN0aW9uKGIpe3RoaXMuTWFbYi5pZF09bnVsbH19KX0pKGMpO3ZhciBxPWMuc2x8fHE7KGZ1bmN0aW9uKGMpe2MudWw9TS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy52aWRlb1RhZz10aGlzLmNvbnRhaW5lcj10aGlzLmlkPW51bGw7dGhpcy5HYz0KMTA7dGhpcy5GYj0wO3RoaXMuVWE9NTA7dGhpcy5WPW51bGw7dGhpcy5xYT0hMTt0aGlzLnBsYXllcj1iO3RoaXMuemI9IiI7dGhpcy5uZz0hMTt0aGlzLlMoKX0sTzpmdW5jdGlvbigpe3JldHVybiJlbXB0eSJ9LHU6ZnVuY3Rpb24oKXt2YXIgYj17fSxhPXRoaXMudmlkZW9UYWcsaD10aGlzLklhKCksZD10aGlzLmdldFJhd1BsYXllcigpO2lmKGIudmlkZW9UYWc9YSliLnZpZGVvVGFnSWQ9YS5pZDtpZihiLmNvbnRhaW5lcj1oKWIuY29udGFpbmVySWQ9aC5pZDtkJiYoYi5wbGF5ZXI9ZCk7cmV0dXJuIGJ9LFM6ZnVuY3Rpb24oKXt9LE5hOmZ1bmN0aW9uKCl7fSxLdDpmdW5jdGlvbihiKXt0aGlzLlY9Yn0sYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5WfSxGdDpmdW5jdGlvbihiKXt0aGlzLk1lPWJ9LFp2OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTWV9LExlOmZ1bmN0aW9uKCl7fSxSOmZ1bmN0aW9uKCl7dGhpcy5GYjw9dGhpcy5VYSYmKHRoaXMuRmIrKyx3aW5kb3cuc2V0VGltZW91dCh0aGlzLlMuYmluZCh0aGlzKSwKdGhpcy5HYykpfSxpc0Z1bGxzY3JlZW46ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0cnl7aWYoZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4pZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKVsiY2F0Y2giXShmdW5jdGlvbigpe30pO2Vsc2UgaWYoZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4pZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4oKTtlbHNlIGlmKGRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4pZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpO2Vsc2UgaWYoZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbilkb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuKCk7ZWxzZSByZXR1cm4hMX1jYXRjaChiKXt9fSxCZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLklhKCl9LHBhdXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGxheWVyLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXIucGxheSgpfSxqYTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfSwKRmQ6ZnVuY3Rpb24oYil7dGhpcy5pZD1ifSxydzpmdW5jdGlvbigpe30sWjpmdW5jdGlvbihiKXtpZighYilyZXR1cm4hMTt0aGlzLnZpZGVvVGFnPWI7dGhpcy5GcSgpfHx0aGlzLmNuKCk7dGhpcy5GZCh0aGlzLnZpZGVvVGFnLmdldEF0dHJpYnV0ZSgiaWQiKSl9LGJ3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW9UYWd9LGNuOmZ1bmN0aW9uKCl7dGhpcy52aWRlb1RhZy5zZXRBdHRyaWJ1dGUoImlkIixlLmJhKDEwKSl9LEZxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW9UYWcuZ2V0QXR0cmlidXRlKCJpZCIpPyEwOiExfSxZOmZ1bmN0aW9uKGIpe3RoaXMuY29udGFpbmVyPWJ9LElhOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLmNvbnRhaW5lcj90aGlzLmNvbnRhaW5lcigpOnRoaXMuY29udGFpbmVyfSxnZXRSYXdQbGF5ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXJ9LEFlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LGlzUGxheWluZzpmdW5jdGlvbigpe3JldHVybiEwfSwKZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnO3JldHVybiBiJiZiLmN1cnJlbnRUaW1lP2IuY3VycmVudFRpbWU6MH0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnO3JldHVybiBiJiZiLmR1cmF0aW9uP2IuZHVyYXRpb246MH0sVmE6ZnVuY3Rpb24oKXtyZXR1cm4hMX0saXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xYX0scGE6ZnVuY3Rpb24oKXt0aGlzLnFhPSEwfSxIYzpmdW5jdGlvbigpe3ZhciBiPW07cmV0dXJuIGImJmIucnVuSW5zaWRlQ29udGFpbmVyPyEwOiExfSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGImJmIubXV0ZWQ/Yi5tdXRlZDohMX0sR2U6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sQ2g6ZnVuY3Rpb24oYil7dGhpcy56Yj1ifSxZdjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnpifSx5aDpmdW5jdGlvbigpe3RoaXMuemI9bnVsbH0sZHc6ZnVuY3Rpb24oKXt2YXIgYj0hMTt0aGlzLnpiJiYKKGI9ITApO3JldHVybiBifSxsdzpmdW5jdGlvbigpe3RoaXMubmd8fCh0aGlzLm5nPSEwKX0scWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sVnY6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPXRoaXMudmlkZW9UYWc7YSYmYS5nZXRBdHRyaWJ1dGUoImlkIikmJihiPWEuZ2V0QXR0cmlidXRlKCJpZCIpKTtyZXR1cm4gYn19KX0pKGMpO3ZhciB1PWMudWx8fHU7KGZ1bmN0aW9uKGMpe2Mubmk9TS5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLks9dGhpcy5wbGF5ZXI9IiI7dGhpcy5KZj0iMSI7dGhpcy5LZj0iMiI7dGhpcy5XbT0iMyI7dGhpcy5QYz0wO3RoaXMuaWg9MzA7dGhpcy5MYj1bXTt0aGlzLmZiPVtdO3RoaXMuaWM9e2V4dGVybmFsOjEsbm9mcmFtZXdvcms6MixhZGVycm9yOjMsY29udGVudHBsYXk6NCxub0Fkc01hbmFnZXI6NSx1bmtub3duOjZ9O3RoaXMuWGY9dGhpcy5ZaD0hMTt0aGlzLnN0YXR1cz10aGlzLlBjO3RoaXMuaWQ9ZS5iYSgxMCk7dGhpcy5mZihiKTt0aGlzLkR0KGEpfSwKZzpmdW5jdGlvbigpe30sdGE6ZnVuY3Rpb24oKXt0aGlzLllofHwodGhpcy5ZaD0hMCxlLkplKCkpfSxQZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuTygpO1MmJlMuVWImJiFuYSYmKG5hPSEwLGUudHJhY2soInBvc3NpYmxlRG91YmxlQWQiLCIxMDRfIitiKSl9LGJyOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKSxhPW5ldyBKO3dpbmRvd1thLmlhKCldfHwod2luZG93W2EuaWEoKV09e30pO3dpbmRvd1thLmlhKCldW2IuamEoKV18fCh3aW5kb3dbYS5pYSgpXVtiLmphKCldPXt9LHdpbmRvd1thLmlhKCldW2IuamEoKV0uaW5pdGlhdG9yPWUuemMoKSk7d2luZG93W2EuaWEoKV1bYi5qYSgpXVtlLnpjKCldP3dpbmRvd1thLmlhKCldW2IuamEoKV1bZS56YygpXSsrOndpbmRvd1thLmlhKCldW2IuamEoKV1bZS56YygpXT0xfSxpcjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCksYT0hMCxoPW5ldyBKO3dpbmRvd1toLmlhKCldJiZ3aW5kb3dbaC5pYSgpXVtiLmphKCldJiYKd2luZG93W2guaWEoKV1bYi5qYSgpXS5pbml0aWF0b3IhPWUuemMoKSYmKHRoaXMuZ2YoKSxhPSExKTtyZXR1cm4gYX0sSTpmdW5jdGlvbihiLGEpe3ZhciBoPSEwO2ImJihoPSExKTtpZighdGhpcy51YSgpKXt0aGlzLmJyKCk7aWYoIXRoaXMuaXIoKSl7ZS50cmFjaygic3RhdHNfaGRfZG91YmxlTWFpbiIsIiIsITApO3RoaXMuZ2YoKTtyZXR1cm59dGhpcy5nZigpO3RoaXMuSyh0aGlzLmdldFBsYXllcigpLGgpO3RoaXMuUmgoKTt0aGlzLlhmPSEwO2EmJiJmdW5jdGlvbiI9PXR5cGVvZiBhJiZhKCk7cmV0dXJuITB9cmV0dXJuITF9LG86ZnVuY3Rpb24oYixhKXt0aGlzLnVhKCl8fCh0aGlzLkxiLnB1c2goYiksdGhpcy5mYi5wdXNoKHtyZWFzb246YixkZXRhaWw6YX0pKX0sUmg6ZnVuY3Rpb24oKXt2YXIgYj0idW5rbm93biIsYT1bXTt0aGlzLkxiJiYwPHRoaXMuTGIubGVuZ3RoJiYodGhpcy5MYj1lLnVuaXF1ZSh0aGlzLkxiKSxlLnRyYWNrKCJhY3RpdmF0ZWRCeSIsdGhpcy5MYi5qb2luKCIsIikpKTsKaWYodGhpcy5mYil7Zm9yKHZhciBoPTA7aDx0aGlzLmZiLmxlbmd0aDtoKyspdGhpcy5pY1t0aGlzLmZiW2hdLnJlYXNvbl09PXRoaXMuaWNbYl0mJmEucHVzaCh0aGlzLmZiW2hdLmRldGFpbCksdGhpcy5pY1t0aGlzLmZiW2hdLnJlYXNvbl08dGhpcy5pY1tiXSYmKGE9W10sYS5wdXNoKHRoaXMuZmJbaF0uZGV0YWlsKSxiPXRoaXMuZmJbaF0ucmVhc29uKTt0aGlzLmljW2JdfHwoYj0idW5rbm93biIsYT1bXSk7MDxhLmxlbmd0aCYmKGg9ZS51bmlxdWUoYSksYj1iKyItIitoLmpvaW4oIi0iKSk7ZS50cmFjaygic3RhdHNfaGRfYWN0aXZhdGVkIixiLCEwLGEpfX0sY3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5YZn0sdzpmdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMuSmZ9LGdmOmZ1bmN0aW9uKCl7dGhpcy5zdGF0dXM9dGhpcy5LZn0sSXQ6ZnVuY3Rpb24oKXt0aGlzLnN0YXR1cz10aGlzLldtfSxyYTpmdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMuUGN9LE9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT0KdGhpcy5KZn0sTXY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0dXM9PXRoaXMuS2Z9LHVhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdHVzIT10aGlzLlBjfSxmZjpmdW5jdGlvbihiKXt0aGlzLnBsYXllcj1ifSxnZXRQbGF5ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXJ9LER0OmZ1bmN0aW9uKGIpe3RoaXMuSz1ifSxpcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLkt9LE5yOmZ1bmN0aW9uKCl7fX0pfSkoYyk7dmFyIHY9Yy5uaXx8djtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5Qcj10aGlzLmFbOV07dGhpcy5CcT10aGlzLmFbNV07dGhpcy50cj10aGlzLmFbMl07dGhpcy5QaT10aGlzLmFbN107dGhpcy5Ubj10aGlzLmFbNl07dGhpcy5VbT10aGlzLmFbNV07dGhpcy5LbD10aGlzLmFbOF07dGhpcy5qPXRoaXMuYVs0XX1jLkVuPWI7Yi5wcm90b3R5cGU9e09yOmZ1bmN0aW9uKGEpe3JldHVybiA5PAphP3RoaXMuUHI6dGhpcy5BcShhKX0sQXE6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkJxOnRoaXMuc3IoYSl9LHNyOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy50cjp0aGlzLk9pKGEpfSxPaTpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuUGk6dGhpcy5TbihhKX0sU246ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLlRuOnRoaXMuVG0oYSl9LFRtOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5VbTp0aGlzLkpsKGEpfSxKbDpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuS2w6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBvYT1jLkVufHxvYSxwYz1uZXcgb2EoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1wYy5Pcig0KTsoZnVuY3Rpb24oYyl7Yy5Paj11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb0NvbnRhaW5lcjt0aGlzLlkoYik7Yj10aGlzLmdldFJhd1BsYXllcigpLnZpZGVvO3RoaXMuWihiKTt0aGlzLmlzUGxheWluZz0hMTtiLmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5pc1BsYXlpbmc9ITB9LmJpbmQodGhpcykpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheSgpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkV4cFBsYXllciJ9fSl9KShjKTt2YXIgcGE9Yy5Panx8cGE7KGZ1bmN0aW9uKGMpe2MuUGo9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCksYT1iLk52O2E/YS5uYT9hLm5hLmFkZEV2ZW50TGlzdGVuZXIoImFkRXJyb3IiLGZ1bmN0aW9uKGEpe3ZhciBiPQohMSxmPSIiO2EuZ2V0RXJyb3ImJihiPWEuZ2V0RXJyb3IoKSk7Ynx8YS5kZXRhaWwuZ2V0RXJyb3ImJihiPWEuZGV0YWlsLmdldEVycm9yKCkpO2IuZ2V0RXJyb3JDb2RlJiYoZis9Yi5nZXRFcnJvckNvZGUoKSk7Yi5nZXRNZXNzYWdlJiYoZis9Yi5nZXRNZXNzYWdlKCkpO2YuaW5kZXhPZiYmKDA8PWYuaW5kZXhPZigiMTAwOSIpfHwwPD1mLmluZGV4T2YoIjMwMyIpfHwwPD1mLmluZGV4T2YoIjQwMyIpKT8odGhpcy53KCksdGhpcy50YSgpKToodGhpcy5vKCJhZGVycm9yIiksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZygpfS5iaW5kKHRoaXMpLDEwMCk6Yi5fYWRDb25maWcuYWRzRGlzYWJsZWR8fCh0aGlzLm8oImZyYW1ld29yayIpLHRoaXMucygpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nP3RoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcyksCjEwKX19KX0pKGMpO3ZhciBxYT1jLlBqfHxxYTsoZnVuY3Rpb24oYyl7Yy5Raj1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZih3aW5kb3cucGxheWVyTWFuYWdlciYmd2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycyYmd2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycygpWzBdKXt2YXIgYj1uZXcgcGEod2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycygpWzBdKTt0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBxYShiLHRoaXMuSykpLmcoKSl9dGhpcy5SKCl9fSl9KShjKTt2YXIgcmE9Yy5Ranx8cmE7KG5ldyByYShyKSkuZygpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnR0PXRoaXMuYVs4XTt0aGlzLmJtPXRoaXMuYVs3XTt0aGlzLkJqPXRoaXMuYVs1XTt0aGlzLmhvPXRoaXMuYVsyXTt0aGlzLmhtPQp0aGlzLmFbMV07dGhpcy5Sbj10aGlzLmFbM107dGhpcy5saj10aGlzLmFbNl07dGhpcy5pcD10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVs3XX1jLkJzPWI7Yi5wcm90b3R5cGU9e3N0OmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy50dDp0aGlzLmFtKGEpfSxhbTpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuYm06dGhpcy5BaihhKX0sQWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkJqOnRoaXMuZm8oYSl9LGZvOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5obzp0aGlzLmdtKGEpfSxnbTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuaG06dGhpcy5RbihhKX0sUW46ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLlJuOnRoaXMua2ooYSl9LGtqOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5sajp0aGlzLmhwKGEpfSxocDpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuaXA6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpOwp2YXIgc2E9Yy5Cc3x8c2EscWM9bmV3IHNhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9cWMuc3QoNCk7KGZ1bmN0aW9uKGMpe2MucWs9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dGhpcy5WYj0hMTt0aGlzLnNnKCk7dGhpcy51ZygpO3RoaXMuT289ITF9LHNnOmZ1bmN0aW9uKCl7dGhpcy5WYj0hMTt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnBsYXllci5pZCk7Ynx8KHRoaXMuVmI9ITApO2lmKCJPQkpFQ1QiPT1iLm5vZGVOYW1lfHwiVklERU8iPT1iLm5vZGVOYW1lKWI9Yi5wYXJlbnROb2RlO3RoaXMuWShiKX0sdWc6ZnVuY3Rpb24oKXtpZighdGhpcy5WYil7dmFyIGI9dGhpcy5JYSgpLGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXTthfHwoYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7CmF8fCh0aGlzLlZiPSEwKTt0aGlzLlooYSl9fSxOYTpmdW5jdGlvbigpe3ZhciBiPXRoaXMucGxheWVyO2lmKG0ucG9zdHJvbGxVc2VDb21wbGV0ZUV2ZW50KWIuX2V2ZW50cy5iZWZvcmVDb21wbGV0ZS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OnRoaXMucGxheWVyLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy5WJiYoMCx0aGlzLlYpKCl9LmJpbmQodGhpcyl9KTtlbHNlIGlmKGIuX2V2ZW50cyYmYi5fZXZlbnRzLnRpbWUmJmIuX2V2ZW50cy50aW1lLnB1c2goe2NvbnRleHQ6bnVsbCxjdHg6dGhpcy5wbGF5ZXIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7YS5kdXJhdGlvbiYmYS5wb3NpdGlvbiYmMT5hLmR1cmF0aW9uLWEucG9zaXRpb24mJnRoaXMuViYmKDAsdGhpcy5WKSgpfS5iaW5kKHRoaXMpfSksYi5vblRpbWUpYi5vblRpbWUoZnVuY3Rpb24oYSl7YS5kdXJhdGlvbiYmYS5wb3NpdGlvbiYmMT5hLmR1cmF0aW9uLWEucG9zaXRpb24mJnRoaXMuViYmKDAsdGhpcy5WKSgpfS5iaW5kKHRoaXMpKX0sCkxlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRFcnJvciYmYi5fZXZlbnRzLmFkRXJyb3IucHVzaCh7Y29udGV4dDpudWxsLGN0eDpiLGNhbGxiYWNrOmZ1bmN0aW9uKGEpe3RoaXMuSGQoYSl9LmJpbmQodGhpcyl9KTtpZihiLm9uQWRFcnJvciliLm9uQWRFcnJvcihmdW5jdGlvbihhKXt0aGlzLkhkKGEpfS5iaW5kKHRoaXMpKX0sSGQ6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5wbGF5ZXI7YS5nZXRQb3NpdGlvbigpO2EuZ2V0UG9zaXRpb24oKTthLmdldER1cmF0aW9uKCk7YS5nZXRQb3NpdGlvbigpO2EuZ2V0RHVyYXRpb24oKTthLmdldFBvc2l0aW9uKCk7Im1pZCI9PWIuYWRwb3NpdGlvbiYmYS5nZXRQb3NpdGlvbiYmMzA8YS5nZXRQb3NpdGlvbigpJiYzMDxhLmdldER1cmF0aW9uKCktYS5nZXRQb3NpdGlvbigpJiZ0aGlzLk1lJiYoMCx0aGlzLk1lKSgpfSxwbGF5OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7aWYoIWIuZ2V0U3RhdGV8fAoicGxheWluZyIhPWIuZ2V0U3RhdGUoKXx8dGhpcy52aWRlb1RhZy5wYXVzZWQpcmV0dXJuIHRoaXMucGxheWVyLnBsYXkoKX0scGF1c2U6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnBsYXllcjtyZXR1cm4gYi5nZXRTdGF0ZSYmInBhdXNlZCI9PWIuZ2V0U3RhdGUoKT8icGF1c2VkIjp0aGlzLnBsYXllci5wYXVzZSghMCl9LFZhOmZ1bmN0aW9uKCl7cmV0dXJuInBhdXNlZCI9PXRoaXMucGF1c2UoKT8hMTohMH0sTzpmdW5jdGlvbigpe3JldHVybiJKV1BsYXllciJ9LGV4aXRGdWxsc2NyZWVuOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7Yi5nZXRGdWxsc2NyZWVuJiZiLmdldEZ1bGxzY3JlZW4oKSYmYi5zZXRGdWxsc2NyZWVuKCl9LHZhOmZ1bmN0aW9uKCl7dmFyIGI9ITEsYT10aGlzLnBsYXllcjthLmdldE11dGUmJmEuZ2V0TXV0ZSgpJiYoYj0hMCk7cmV0dXJuIGJ9LHFlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXIsYT0hMTtiLmdldFZvbHVtZSYmYi5nZXRWb2x1bWUoKSYmCihhPWIuZ2V0Vm9sdW1lKCkpO3JldHVybiBhfX0pfSkoYyk7dmFyIHRhPWMucWt8fHRhOyhmdW5jdGlvbihjKXtjLnBrPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LFM6ZnVuY3Rpb24oKXt9LHJhOmZ1bmN0aW9uKCl7dGhpcy5zdGF0dXM9dGhpcy5QYzt0aGlzLmlzUGxheWluZz10aGlzLlJjPSExO3RoaXMuWmQ9MTt0aGlzLlNjPVtdO3RoaXMudGI9ITF9LGc6ZnVuY3Rpb24oKXt0aGlzLmlzUGxheWluZz10aGlzLlJjPSExO3RoaXMuWmQ9MTt0aGlzLlNjPVtdO3RoaXMudGI9ITE7dGhpcy5nZXRQbGF5ZXIoKTt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpLGE9e307Yi5nZXRDb25maWcmJihhPWIuZ2V0Q29uZmlnKCksYS5hZHZlcnRpc2luZz8oYS5hZHZlcnRpc2luZy5zY2hlZHVsZSYmKGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzP2EuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzLnRhZyYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5hZHMudGFnLmxlbmd0aCYmCih0aGlzLlpkPWEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzLnRhZy5sZW5ndGgsdGhpcy50Yj0hMCk6KGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUucHJlcm9sbCYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5wcmVyb2xsLnRhZyYmKHRoaXMudGI9ITApLGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRicmVha3ByZSYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5hZGJyZWFrcHJlLnRhZyYmKHRoaXMudGI9ITApKSksYS5hZHZlcnRpc2luZy50YWcmJih0aGlzLnRiPSEwKSk6dGhpcy53KCJubyBhZHZlcnRpc2luZyBjb25maWd1cmVkIGZvciBwbGF5ZXIiKSk7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRDb21wbGV0ZSYmYi5fZXZlbnRzLmFkQ29tcGxldGUucHVzaCh7Y29udGV4dDpudWxsLGN0eDpiLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy53KCJhZENvbXBsZXRlIik7dGhpcy5SYz0hMH0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkQ2xpY2smJmIuX2V2ZW50cy5hZENsaWNrLnB1c2goe2NvbnRleHQ6bnVsbCwKY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkQ2xpY2siKX0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkSW1wcmVzc2lvbiYmYi5fZXZlbnRzLmFkSW1wcmVzc2lvbi5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkSW1wcmVzc2lvbiIpO3RoaXMuUGUoKX0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkTWV0YSYmYi5fZXZlbnRzLmFkTWV0YS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkTWV0YSIpfS5iaW5kKHRoaXMpfSk7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRTa2lwcGVkJiZiLl9ldmVudHMuYWRTa2lwcGVkLnB1c2goe2NvbnRleHQ6bnVsbCxjdHg6YixjYWxsYmFjazpmdW5jdGlvbigpe3RoaXMudygiYWRTa2lwcGVkIil9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5hZFRpbWUmJmIuX2V2ZW50cy5hZFRpbWUucHVzaCh7Y29udGV4dDpudWxsLApjdHg6YixjYWxsYmFjazpmdW5jdGlvbigpe3RoaXMudygiYWRUaW1lIil9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5hZEVycm9yJiZiLl9ldmVudHMuYWRFcnJvci5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7dGhpcy5vbkFkRXJyb3IoYSl9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy50aW1lJiZiLl9ldmVudHMudGltZS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7dGhpcy5pc1BsYXlpbmc9ITA7YS5kdXJhdGlvbj50aGlzLmloJiYhdGhpcy51YSgpJiYodGhpcy50Yj8odGhpcy5vKCJjb250ZW50cGxheU5vQWRzIiwiIiksdGhpcy5zKCkpOih0aGlzLm8oImNvbnRlbnRwbGF5VGltZSIsMUUzKk1hdGgucm91bmQoYS5kdXJhdGlvbi8xRTMpKSx0aGlzLnMoITApKSl9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5wbGF5bGlzdEl0ZW0mJmIuX2V2ZW50cy5wbGF5bGlzdEl0ZW0ucHVzaCh7Y29udGV4dDpudWxsLApjdHg6dGhpcy5wbGF5ZXIsY2FsbGJhY2s6ZnVuY3Rpb24oKXtpZih0aGlzLnVhKCkmJih0aGlzLnJhKCksdGhpcy5nZXRQbGF5ZXIoKS5Pbz0hMCxtLnNraXBBZE9uQ29udGV4dENoYW5nZSkpe3ZhciBhPXRoaXMuZ2V0UGxheWVyKCkuemI7YSYmKGEuemQoKSxhLmhkKCkpfX0uYmluZCh0aGlzKX0pO2lmKGIub25BZENvbXBsZXRlKWIub25BZENvbXBsZXRlKGZ1bmN0aW9uKCl7dGhpcy53KCJvbkFkQ29tcGxldGUiKTt0aGlzLlJjPSEwfS5iaW5kKHRoaXMpKTtpZihiLm9uQWRJbXByZXNzaW9uKWIub25BZEltcHJlc3Npb24oZnVuY3Rpb24oKXt0aGlzLncoIm9uQWRJbXByZXNzaW9uIik7dGhpcy5QZSgpfS5iaW5kKHRoaXMpKTtpZihiLm9uQWRQbGF5KWIub25BZFBsYXkoZnVuY3Rpb24oKXt0aGlzLncoIm9uQWRQbGF5Iil9LmJpbmQodGhpcykpO2lmKGIub25BZFRpbWUpYi5vbkFkVGltZShmdW5jdGlvbigpe3RoaXMudygib25BZFRpbWUiKX0uYmluZCh0aGlzKSk7aWYoYi5vbkFkRXJyb3IpYi5vbkFkRXJyb3IoZnVuY3Rpb24oYSl7dGhpcy5vbkFkRXJyb3IoYSl9LmJpbmQodGhpcykpOwppZihiLm9uVGltZSliLm9uVGltZShmdW5jdGlvbihhKXt0aGlzLmlzUGxheWluZz0hMDthLmR1cmF0aW9uPnRoaXMuaWgmJiF0aGlzLnVhKCkmJih0aGlzLnRiPyh0aGlzLm8oImNvbnRlbnRwbGF5Tm9BZHMiLCIiKSx0aGlzLnMoKSk6KHRoaXMubygiY29udGVudHBsYXlUaW1lIiwxRTMqTWF0aC5yb3VuZChhLmR1cmF0aW9uLzFFMykpLHRoaXMucyghMCkpKX0uYmluZCh0aGlzKSl9LG9uQWRFcnJvcjpmdW5jdGlvbihiKXt2YXIgYT1iLnRhZzstMT09dGhpcy5TYy5pbmRleE9mKGEpJiZ0aGlzLlNjLnB1c2goYSk7IjEwMSI9PWIuY29kZXx8IjEwMDEiPT1iLmNvZGU/KHRoaXMudygpLHRoaXMudGEoKSk6OTAwPT1iLmNvZGUmJjA8Yi5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigiZW1wdHkiKT90aGlzLncoImVtcHR5Iik6MzAzPT1iLmNvZGUmJjA8Yi5tZXNzYWdlLmluZGV4T2YoIk5vIEFkcyBWQVNUIHJlc3BvbnNlIGFmdGVyIG9uZSBvciBtb3JlIFdyYXBwZXJzIik/dGhpcy53KCJlbXB0eSIpOgoodGhpcy5vKCJhZGVycm9yIixiLmNvZGUpLHRoaXMuU2MubGVuZ3RoPj10aGlzLlpkJiZ0aGlzLnMoKSl9LE5yOmZ1bmN0aW9uKGIpe3RoaXMubSgiSlc6ICIrYi50eXBlKX0sczpmdW5jdGlvbihiKXtiP3RoaXMubmU/dGhpcy5uZSsrOnRoaXMubmU9MTp0aGlzLm1lP3RoaXMubWUrKzp0aGlzLm1lPTE7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKTtlLkhoKGEudmlkZW9UYWcpP2EuVmI/dGhpcy53KCJwbGF5ZXIgaXMgaW52YWxkIik6dGhpcy5SY3x8dGhpcy5pc1BsYXlpbmc/KHRoaXMubWU+dGhpcy5uZSYmKGI9ITEpLHRoaXMuSShiKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoYil9LmJpbmQodGhpcyksNTApOihhLnNnKCksYS51ZygpLGEuVmJ8fHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDIwKSl9fSl9KShjKTt2YXIgdWE9Yy5wa3x8dWE7KGZ1bmN0aW9uKGMpe2Mucms9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSwKZzpmdW5jdGlvbigpe3ZhciBiPWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZik7aWYoIllXUnBkR2x2Ymk1clpXbHVaWFpwWkdWdmQyVnlZblZ1WnoweCIhPXRoaXMuZXEoKXx8IWIuYXV0aG9yaXR5fHwhYi5hdXRob3JpdHl8fCJ3d3cuc3BpZWdlbC5kZSIhPWIuYXV0aG9yaXR5JiYicXMyLnByZXZpZXcuc3BpZWdlbC5kZSIhPWIuYXV0aG9yaXR5JiYicHJldmlldy5zcGllZ2VsLmRlIiE9Yi5hdXRob3JpdHkmJiJwcm9kLnNwaWVnZWwuZGUiIT1iLmF1dGhvcml0eSl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiandwbGF5ZXIiKTtpZighd2luZG93Lmp3cGxheWVyfHwhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoandwbGF5ZXIoKS5pZCl8fCJBIiE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoandwbGF5ZXIoKS5pZCkubm9kZU5hbWUpaWYod2luZG93Lmp3cGxheWVyJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZChqd3BsYXllcigpLmlkKXx8aCYmaCgpLmlkKXtiPQpbXTtpZigxPGEubGVuZ3RoKWZvcihoPTA7aDxhLmxlbmd0aDtoKyspYi5wdXNoKGFbaF0uZ2V0QXR0cmlidXRlKCJpZCIpKTtlbHNlIGIucHVzaChqd3BsYXllcigpLmlkKTtqd3BsYXllcigpO2ZvcihhPTA7YTxiLmxlbmd0aDthKyspe3ZhciBoPW5ldyB0YSh3aW5kb3cuandwbGF5ZXIoYlthXSkpO3RoaXMuTihoKXx8dGhpcy5scihoKXx8KHRoaXMuUChoKSxoPW5ldyB1YShoLHRoaXMuSyksaC5TKCksaC5nKCkpfX10aGlzLlIoKX19LFh2OmZ1bmN0aW9uKCl7cmV0dXJuIllXUnBkR2x2Ymk1clpXbHVaWFpwWkdWdmQyVnlZblZ1WnoweCJ9LGVxOmZ1bmN0aW9uKCl7dmFyIGI9ZS5sYShkb2N1bWVudC5sb2NhdGlvbi5ocmVmKTtyZXR1cm4gZS52YihiLmFuY2hvcil9fSl9KShjKTt2YXIgdmE9Yy5ya3x8dmEsd2E9bmV3IHZhKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLkRyPQp0aGlzLmFbM107dGhpcy5Qaz10aGlzLmFbOF07dGhpcy5zbT10aGlzLmFbMV07dGhpcy5ObD10aGlzLmFbOV07dGhpcy5qPXRoaXMuYVsxMF19Yy5pbz1iO2IucHJvdG90eXBlPXtDcjpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuRHI6dGhpcy5PayhhKX0sT2s6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLlBrOnRoaXMucm0oYSl9LHJtOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5zbTp0aGlzLk1sKGEpfSxNbDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuTmw6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciB4YT1jLmlvfHx4YSxyYz1uZXcgeGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1yYy5Dcig0KTsoZnVuY3Rpb24oYyl7Yy54bT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtpZihiKXt2YXIgYT1iLmVsXzthfHwoYT1iLmVsKCkpO2E/KHRoaXMuWShhKSwoYj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdKXx8KGI9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pLGI/dGhpcy5aKGIpOnRoaXMucGEoKSk6dGhpcy5wYSgpfWVsc2UgdGhpcy5wYSgpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuInZpZGVvanMifSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkub24oInRpbWV1cGRhdGUiLGZ1bmN0aW9uKGIpe3RoaXMuTWQoYil9LmJpbmQodGhpcykpfSxNZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT1iLmN1cnJlbnRUaW1lKCksYj1iLmR1cmF0aW9uKCk7YSYmMDxhJiZiJiYwPGImJmE+PWItMiYmdGhpcy5WJiZ0aGlzLlYoKX0sQWU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnLmdldEF0dHJpYnV0ZSgiZGF0YS14LXNldHVwIik7CmlmKGIpdHJ5e3ZhciBhPUpTT04ucGFyc2UoYik7aWYoYS5oYXNPd25Qcm9wZXJ0eSgieC1hdXRvcGxheSIpJiYhYVsieC1hdXRvcGxheSJdKXJldHVybiExfWNhdGNoKGgpe31iPXRoaXMuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIuYXV0b3BsYXkmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmF1dG9wbGF5P2IuYXV0b3BsYXkoKTohMX0sdmE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXIubXV0ZWQmJnRoaXMucGxheWVyLm11dGVkKCl9LFZhOmZ1bmN0aW9uKCl7dGhpcy5wYXVzZSgpO3JldHVybiEwfSxpc1BsYXlpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wYXVzZWQoKT8hMTohMH0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLGE9Yi5pc0Z1bGxzY3JlZW47aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpdHJ5e2E9YSgpfWNhdGNoKGgpe2E9ITF9YSYmYi5leGl0RnVsbHNjcmVlbigpfSxjdXJyZW50VGltZTpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLmdldFJhd1BsYXllcigpO2lmKGIuY3VycmVudFRpbWUpcmV0dXJuIGIuY3VycmVudFRpbWUoKX19KX0pKGMpO3ZhciB5YT1jLnhtfHx5YTsoZnVuY3Rpb24oYyl7Yy53bT12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dGhpcy5UPXRoaXMuVHx8ITE7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKTt0aGlzLmRhPXRoaXMuQmM9dGhpcy5BYT10aGlzLlljPSExO3RoaXMudmg9ZS5FYigxMCk7dGhpcy5YaD0hMDt0aGlzLm5jPXRoaXMuUWc9ITE7dGhpcy5icyhiLmdldFJhd1BsYXllcigpKXx8KHRoaXMubGgoKSx0aGlzLm5vKCksdGhpcy5vYigpKX0sYnM6ZnVuY3Rpb24oYil7cmV0dXJuIGUuQmEoInQtb25saW5lLmRlIik/ITE9PT1iLm9wdGlvbnNfLmFkUHJlcm9sbDohMX0sbnc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2NvbnNvbGUuaW5mbyh0aGlzLmdldFBsYXllcigpLmphKCksIjsiLCJ3aW5kb3cuaW1hOiIsCiI7Iix3aW5kb3cuaW1hLCI7Iix0eXBlb2Ygd2luZG93LmltYSwiOyIsInBsYXllci5hZHM6IiwiOyIsYi5XLCI7Iix0eXBlb2YgYi5XLCI7IiwicGxheWVyLmFkcy5zdGF0ZToiLCI7IixiLlc/Yi5XLnN0YXRlOiJ1bmRlZmluZWRYIiwiOyIsYi5XP3R5cGVvZiBiLlcuc3RhdGU6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYToiLCI7IixiLmltYSwiOyIsdHlwZW9mIGIuaW1hLCI7IiwicGxheWVyLmltYTM6IiwiOyIsYi5KLCI7Iix0eXBlb2YgYi5KLCI7IiwicGxheWVyLmltYS5hZGRFdmVudExpc3RlbmVyOiIsIjsiLGIuaW1hP2IuaW1hLmFkZEV2ZW50TGlzdGVuZXI6InVuZGVmaW5lZFgiLCI7IixiLmltYT90eXBlb2YgYi5pbWEuYWRkRXZlbnRMaXN0ZW5lcjoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5hZGRFdmVudExpc3RlbmVyOiIsIjsiLGIuSj9iLkouYWRkRXZlbnRMaXN0ZW5lcjoidW5kZWZpbmVkWCIsIjsiLGIuSj90eXBlb2YgYi5KLmFkZEV2ZW50TGlzdGVuZXI6CiJ1bmRlZmluZWRYIiwiOyIsInBsYXllci5pbWEuZ2V0QWRzTWFuYWdlcjoiLCI7IixiLmltYT9iLmltYS5HYToidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5HYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5nZXRBZHNNYW5hZ2VyOiIsIjsiLGIuSj9iLkouR2E6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5HYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmdldEFkc01hbmFnZXIoKToiLCI7IixiLmltYSYmYi5pbWEuR2E/Yi5pbWEuR2EoKToidW5kZWZpbmVkWCIsIjsiLGIuaW1hJiZiLmltYS5HYT90eXBlb2YgYi5pbWEuR2EoKToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5nZXRBZHNNYW5hZ2VyKCk6IiwiOyIsYi5KJiZiLkouR2E/Yi5KLkdhKCk6InVuZGVmaW5lZFgiLCI7IixiLkomJmIuSi5HYT90eXBlb2YgYi5KLkdhKCk6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYS5fYWRzTG9hZGVyOiIsIjsiLGIuaW1hP2IuaW1hLldkOgoidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5XZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5fYWRzTG9hZGVyOiIsIjsiLGIuSj9iLkouV2Q6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5XZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLl9hZHNNYW5hZ2VyOiIsIjsiLGIuaW1hP2IuaW1hLlhkOiJ1bmRlZmluZWRYIiwiOyIsYi5pbWE/dHlwZW9mIGIuaW1hLlhkOiJ1bmRlZmluZWRYIiwiOyIsInBsYXllci5pbWEzLl9hZHNNYW5hZ2VyOiIsIjsiLGIuSj9iLkouWGQ6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5YZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmFkc0xvYWRlcjoiLCI7IixiLmltYT9iLmltYS5uYToidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5uYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5hZHNMb2FkZXI6IiwiOyIsYi5KP2IuSi5uYToidW5kZWZpbmVkWCIsIjsiLGIuSj8KdHlwZW9mIGIuSi5uYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmFkc01hbmFnZXI6IiwiOyIsYi5pbWE/Yi5pbWEuY2U6InVuZGVmaW5lZFgiLCI7IixiLmltYT90eXBlb2YgYi5pbWEuY2U6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYTMuYWRzTWFuYWdlcjoiLCI7IixiLko/Yi5KLmNlOiJ1bmRlZmluZWRYIiwiOyIsYi5KP3R5cGVvZiBiLkouY2U6InVuZGVmaW5lZFgiLCI7IiwiRE9ORSIsdGhpcy52aCl9LHdiOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtiLmltYTMmJih0aGlzLmltYT1iLmltYTMpO2lmKGIuaW1hKXt0aGlzLmltYT1iLmltYTt0cnl7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuaW1hJiZ0aGlzLnBsYXllci5nZXRSYXdQbGF5ZXIoKS5hY3RpdmVQbHVnaW5zXyYmMT09dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyKCkuYWN0aXZlUGx1Z2luc18uaW1hJiYodGhpcy5pbWE9dGhpcy5pbWEoKSx0aGlzLmltYS5jb250cm9sbGVyJiYKKHRoaXMuaW1hPXRoaXMuaW1hLmNvbnRyb2xsZXIpKX1jYXRjaChhKXt9fXJldHVybiB0aGlzLmltYX0sUmI6ZnVuY3Rpb24oKXtpZighdGhpcy5uYSl7dmFyIGI9dGhpcy53YigpO2ImJihiLmFkc0xvYWRlciYmKHRoaXMubmE9Yi5hZHNMb2FkZXIpLGIuX2Fkc0xvYWRlciYmKHRoaXMubmE9Yi5fYWRzTG9hZGVyKSxiLmdldEFkc0xvYWRlciYmKHRoaXMubmE9Yi5nZXRBZHNMb2FkZXIpLGIuY29udHJvbGxlciYmYi5jb250cm9sbGVyLnNka0ltcGwmJmIuY29udHJvbGxlci5zZGtJbXBsLmFkc0xvYWRlciYmKHRoaXMubmE9Yi5jb250cm9sbGVyLnNka0ltcGwuYWRzTG9hZGVyKSl9cmV0dXJuIHRoaXMubmF9LEVnOmZ1bmN0aW9uKCl7aWYoIXRoaXMuQmMpe3ZhciBiPXRoaXMud2IoKTtiJiYoYi5hZHNNYW5hZ2VyJiYodGhpcy5CYz1iLmFkc01hbmFnZXIpLGIuZ2V0QWRzTWFuYWdlciYmKHRoaXMuQmM9Yi5nZXRBZHNNYW5hZ2VyKCkpKX1yZXR1cm4gdGhpcy5CY30sanI6ZnVuY3Rpb24oKXtpZighdGhpcy5QZyl7dmFyIGI9CnRoaXMud2IoKSxhPXRoaXMuaHIoKTt3aW5kb3cuaW1hJiZiJiYoYi5fYWRzTG9hZGVyfHxiLmFkc0xvYWRlcnx8YSkmJih0aGlzLlBnPSEwKX1yZXR1cm4gdGhpcy5QZ30saHI6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyF0aGlzLlljJiZiLmFkcyYmKGIuYWRzLnN0YXRlfHxiLmFkcy5fc3RhdGUpJiYodGhpcy5ZYz0hMCk7cmV0dXJuIHRoaXMuWWN9LG9iOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5SYigpO2lmKGIpe3ZhciBhPSJhZEVycm9yIixoPSJhZHNNYW5hZ2VyTG9hZGVkIixkPSJsb2ciO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SJiYoYT1nb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SKTt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkc01hbmFnZXJMb2FkZWRFdmVudCYmCmdvb2dsZS5pbWEuQWRzTWFuYWdlckxvYWRlZEV2ZW50LlR5cGUmJmdvb2dsZS5pbWEuQWRzTWFuYWdlckxvYWRlZEV2ZW50LlR5cGUuQURTX01BTkFHRVJfTE9BREVEJiYoaD1nb29nbGUuaW1hLkFkc01hbmFnZXJMb2FkZWRFdmVudC5UeXBlLkFEU19NQU5BR0VSX0xPQURFRCk7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYoZD1nb29nbGUuaW1hLkFkRXZlbnQuVHlwZS5MT0cpOyJmdW5jdGlvbiIhPT10eXBlb2YgYi5hZGRFdmVudExpc3RlbmVyP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKTooYi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKGgsZnVuY3Rpb24oKXt0aGlzLmp0KCl9LmJpbmQodGhpcykpLApiLmFkZEV2ZW50TGlzdGVuZXIoZCxmdW5jdGlvbihhKXt0aGlzLmdhKGEsITApO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKTt0aGlzLmZhKCEwKX0uYmluZCh0aGlzKSkpfWVsc2UgdGhpcy51YSgpfHx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMub2IoKX0uYmluZCh0aGlzKSwyMCl9LGp0OmZ1bmN0aW9uKCl7dGhpcy5uYz0hMDt2YXIgYj10aGlzLkVnKCk7aWYoYnx8dGhpcy51YSgpKXt2YXIgYT0iYWRFcnJvciIsaD0ibG9nIjt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudCYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYKKGg9Z29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HKTtiLmFkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihhKXt0aGlzLmdhKGEpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoaCxmdW5jdGlvbihhKXt0aGlzLmdhKGEsITApO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKTt0aGlzLmZhKCEwKX0uYmluZCh0aGlzKSk7dmFyIGQ9IiI7ZS5UYSgpJiYoZD0iTV8iKTtiLmFkZEV2ZW50TGlzdGVuZXIoInN0YXJ0IixmdW5jdGlvbigpe2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrInN0YXJ0IiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiZmlyc3RxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrImZpc3RxdWFydGlsZSIsIiIsITApfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoIm1pZHBvaW50IixmdW5jdGlvbigpe3RoaXMub2M9CiEwO2lmKGUuQmEoImNoaXAuZGUiKSl7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtlLnRyYWNrKCJzdGF0c19jdXN0XyIrZCsibWlkcG9pbnQiLCIiLCEwKTtlLnRyYWNrKCJzdGF0c19jdXN0X2RvdWJsZXBsYXkiLCFhLnBhdXNlZCgpLCEwKX19LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigidGhpcmRxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrInRoaXJkcXVhcnRpbGUiLCIiLCEwKX0uYmluZCh0aGlzKSk7Yi5hZGRFdmVudExpc3RlbmVyKCJjb21wbGV0ZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrImNvbXBsZXRlIiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiaW1wcmVzc2lvbiIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iKwpkKyJpbXByZXNzaW9uIiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiYWxsQWRzQ29tcGxldGVkIixmdW5jdGlvbigpe3RoaXMub2N8fCh0aGlzLm8oImFkZXJyb3IiLCJub2FkZXZlbnQiKSx0aGlzLmZhKCksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKX0sV3Y6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyF0aGlzLmtnJiZiLmFkcyYmKHRoaXMua2c9Yi5hZHMpO3JldHVybiB0aGlzLmtnfSxubzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7Yi5vbigiYWRzZXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuZ2EoYSk7dGhpcy5mYSgpO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKX0uYmluZCh0aGlzKSk7Yi5vbigiYWR0cmlnZ2VyIixmdW5jdGlvbigpe3RoaXMucmEoKTt0aGlzLmZhKCEwKTsKdGhpcy5vKCJ0cmlnZ2VyIiwiSE9NQUQiKX0uYmluZCh0aGlzKSk7Yi5vbigiaW1hM2Vycm9yIixmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZmEoKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCl9LmJpbmQodGhpcykpO2Iub24oImltYTNhZGVycm9yIixmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZmEoKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCl9LmJpbmQodGhpcykpO2Iub24oImltYTMtYWQtZXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuZ2EoYSk7dGhpcy5mYSgpO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKX0uYmluZCh0aGlzKSk7Yi5vbigiYWRzLWZpcnN0LXF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygpO3RoaXMuUGUoKX0uYmluZCh0aGlzKSl9LGxkOmZ1bmN0aW9uKCl7dmFyIGI9ITE7dHJ5e2lmKGhvbWFkVXRpbHMmJmhvbWFkVXRpbHMuWClob21hZFV0aWxzLkthJiYoYj0hMCk7ZWxzZXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubGQoKX0uYmluZCh0aGlzKSwKNTApO3JldHVybn19Y2F0Y2goYSl7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmxkKCl9LmJpbmQodGhpcyksNTApO3JldHVybn1iJiYoKGI9dGhpcy5FZygpKSYmYi5kZXN0cm95P2IuZGVzdHJveSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5sZCgpfS5iaW5kKHRoaXMpLDUwKSl9LGxoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKTtpZihiLmlzUGxheWluZygpJiYwPGIuY3VycmVudFRpbWUoKSlpZih0aGlzLmpyKCkpe3ZhciBhPXRoaXMud2IoKSxoPXRoaXMuUmIoKTthJiZoJiYodGhpcy53YigpLHRoaXMuUmIoKSx0aGlzLm5jfHx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubmM/dGhpcy53KCk6KHRoaXMuZmEoITApLHRoaXMubygibm9BZHNNYW5hZ2VyIiwiYWRzTWFuYWdlciIpKX0uYmluZCh0aGlzKSwyRTMpKTt0aGlzLndiKCl9ZWxzZSB0aGlzLlFnP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGE9CnRoaXMud2IoKSxiPXRoaXMuUmIoKTthJiYhYj8odGhpcy5vKCJub2ZyYW1ld29yayIsIklNQV9BRFNMT0FERVIiKSx0aGlzLmZhKCkpOih0aGlzLmZhKCEwKSx0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIikpfS5iaW5kKHRoaXMpLDEwMCk6dGhpcy5RZz0hMDtiLmlzUGxheWluZygpJiYxMDxiLmN1cnJlbnRUaW1lKCl8fHRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmxoKCl9LmJpbmQodGhpcyksNTApfSxnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGg9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpaD0hMDtofHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGg9ITApOyJudW1iZXIiPT10eXBlb2YgYSYmKGIuVD1hLGIubygiYWRlcnJvciIsYSkpfXJldHVybiBofWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTsKaWYoYi5nZXRFcnJvciYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0RXJyb3Ipe3ZhciBoPWIuZ2V0RXJyb3IoKTtpZihoLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGguZ2V0RXJyb3JDb2RlJiZhKGguZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTtyZXR1cm59fWZvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkmJmJbZF0mJmJbZF0uYWRFcnJvciYmYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJmEoYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7YnJlYWt9fSxvbzpmdW5jdGlvbigpe3RoaXMucmN8fCh0aGlzLnJjPSJ1bmtub3duIik7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZihiLmFkcyl7aWYodGhpcy5yYyE9Yi5hZHMuc3RhdGUmJih0aGlzLnJjPWIuYWRzLnN0YXRlKSwiYWQtcGxheWJhY2siPT0KdGhpcy5yYyl7dGhpcy53KCJhZC1wbGF5YmFjayIpO3JldHVybn19ZWxzZSB0aGlzLnJjPSJuby1hZHMiO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vbygpfS5iaW5kKHRoaXMpLDEwKX0sdmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYX0sRGE6ZnVuY3Rpb24oKXswPD1lLlNiKGRvY3VtZW50LmxvY2F0aW9uKS5pbmRleE9mKCJzdGVybi5kZSIpJiYxMDA5PT10aGlzLlQ/KHRoaXMuZGE9ITAsdGhpcy5zKCEwKSk6KHRoaXMuZGE9ITAsdGhpcy53KCJlbXB0eSB2YXN0IikpfSxmYTpmdW5jdGlvbihiKXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZGE/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwMCl9LHM6ZnVuY3Rpb24oYil7dGhpcy51YSgpfHwoYnx8KHRoaXMuWGg9ITEpLHRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCkub24oInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5JKHRoaXMuWGgsZnVuY3Rpb24oKXt0aGlzLmxkKCl9LmJpbmQodGhpcykpfS5iaW5kKHRoaXMpKSl9LAp0bzpmdW5jdGlvbigpe3RoaXMuZXd8fCgxMDx0aGlzLiR1Pyh0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGFhemEiKSx3aW5kb3cuc2V0VGltZW91dCh0aGlzLmZhLmJpbmQodGhpcyksNTAwKSk6KHRoaXMuJHUrKyx0aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpLnZwRXZlbnQ/dGhpcy5udCgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50bygpfS5iaW5kKHRoaXMpLDUwKSkpfSxudDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7aWYoYi52cEV2ZW50JiYhdGhpcy5hdil7dGhpcy5hdj0hMDt2YXIgYT0iIjtiLnZwRXZlbnQucmFuZG9tVGVzdCYmKGE9IiIpO2IudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZHMtZXJyb3IiK2EsZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiLCJ2cDphZHMtZXJyb3IiKTt3aW5kb3cuc2V0VGltZW91dCh0aGlzLmZhLmJpbmQodGhpcyksNTAwKX0uYmluZCh0aGlzKSk7CmIudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZC1lcnJvciIrYSxmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsInZwOmFkLWVycm9yIik7d2luZG93LnNldFRpbWVvdXQodGhpcy5mYS5iaW5kKHRoaXMpLDUwMCl9LmJpbmQodGhpcykpO2IudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZC1yZWFkeSIrYSxmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLnZwRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcigidnA6YWQtZW5kZWQiK2EsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yi52cEV2ZW50LmFkZEV2ZW50TGlzdGVuZXIoInZwOmFkc2xvdC1jb21wbGV0ZSIrYSxmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLnZwRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcigidnA6YWRzLXJlYWR5IithLGZ1bmN0aW9uKCl7dGhpcy53KCl9LmJpbmQodGhpcykpfX19KX0pKGMpO3ZhciB6YT1jLndtfHx6YTsoZnVuY3Rpb24oYyl7Yy55bT1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApnOmZ1bmN0aW9uKCl7aWYoIXdpbmRvdy5kZW1vUGxheWVyKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaWZyYW1lIiksYTthPXRoaXMuSWgod2luZG93KTtmb3IodmFyIGg9MDtoPGIubGVuZ3RoO2grKyl0cnl7YT1hfHx0aGlzLkloKGJbaF0pfWNhdGNoKGQpe310aGlzLlIoKX19LEloOmZ1bmN0aW9uKGIpe3ZhciBhPVtdO2IudmlkZW9qcyYmYi52aWRlb2pzLmdldFBsYXllcnM/YT1iLnZpZGVvanMuZ2V0UGxheWVycygpOmIudmlkZW9qcyYmYi52aWRlb2pzLnBsYXllcnMmJihhPWIudmlkZW9qcy5wbGF5ZXJzKTtpZigwPGUudGUoYSkpe2I9YTtmb3IodmFyIGggaW4gYiliLmhhc093blByb3BlcnR5KGgpJiYoYT1uZXcgeWEoYltoXSksYS5xYXx8dGhpcy5OKGEpfHwhMT09PWEuZ2V0UmF3UGxheWVyKCkuaXNSZWFkeV98fCh0aGlzLlAoYSksKG5ldyB6YShhLHRoaXMuSykpLmcoKSkpO3JldHVybiEwfXJldHVybiExfSxSOmZ1bmN0aW9uKCl7dGhpcy5IYj0Kd2luZG93LnNldFRpbWVvdXQodGhpcy5nLmJpbmQodGhpcyksdGhpcy5HYyl9fSl9KShjKTt2YXIgQWE9Yy55bXx8QWEsQmE9bmV3IEFhKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnlxPXRoaXMuYVs0XTt0aGlzLiRvPXRoaXMuYVs1XTt0aGlzLnRuPXRoaXMuYVsxMF07dGhpcy5rcD10aGlzLmFbMV07dGhpcy5Kbz10aGlzLmFbNl07dGhpcy5Gcz10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVsxXX1jLlFyPWI7Yi5wcm90b3R5cGU9e3hxOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy55cTp0aGlzLlpvKGEpfSxabzpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuJG86dGhpcy5zbihhKX0sc246ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy50bjp0aGlzLmpwKGEpfSxqcDpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMua3A6dGhpcy5JbyhhKX0sSW86ZnVuY3Rpb24oYSl7cmV0dXJuIDU8CmE/dGhpcy5Kbzp0aGlzLkVzKGEpfSxFczpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuRnM6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBDYT1jLlFyfHxDYSxzYz1uZXcgQ2EoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1zYy54cSg0KTsoZnVuY3Rpb24oYyl7Yy5sbD11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt0aGlzLlNlPTA7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPWIucGxheWVyQ29udGFpbmVyO2lmKCFhJiYoYi5wbGF5ZXJJbnN0YW5jZSYmYi5wbGF5ZXJJbnN0YW5jZS5pZCYmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYi5wbGF5ZXJJbnN0YW5jZS5pZCkpJiYoYT1iLnBhcmVudE5vZGUpLCFhKSl7dGhpcy5wYSgpO3JldHVybn10aGlzLlkoYSk7CihiPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pfHwoYj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7Yj90aGlzLlooYik6dGhpcy5wYSgpfSxWczpmdW5jdGlvbihiKXt2YXIgYT10aGlzLnpiLGg9dGhpcy5qYSgpLGQ9IiI7Yi5tZW1vJiYoZD1iLm1lbW8udmlkZW9pZCk7ZCYmYSYmYS5VYiYmKDA8PWguaW5kZXhPZihkKXx8YS56ZCgpKX0scGF1c2U6ZnVuY3Rpb24oYil7Ynx8KHRoaXMuU2U9MCk7Yj10aGlzLmdldFJhd1BsYXllcigpO2IucGxheWVySW5zdGFuY2UmJmIucGxheWVySW5zdGFuY2UucGF1c2U/KHdpbmRvdy5wb3N0TWVzc2FnZSgiaG9tYWRwYXVzZSIsIioiKSxiLnBsYXllckluc3RhbmNlLnBhdXNlKCkpOndpbmRvdy5vdlZpZGVvJiZ3aW5kb3cub3ZWaWRlby5zdG9wUGxheWJhY2smJih3aW5kb3cucG9zdE1lc3NhZ2UoImhvbWFkcGF1c2UiLCIqIiksd2luZG93Lm92VmlkZW8uc3RvcFBsYXliYWNrKCkpfSxWYTpmdW5jdGlvbigpe3RoaXMuU2UrKzsKaWYoMTA8dGhpcy5TZSlyZXR1cm4hMTt0aGlzLnBhdXNlKCJwYXVzZVJlcGVhdE9uQWREZWxpdmVyeSIpO3JldHVybiEwfSxwbGF5OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtiLnBsYXllckluc3RhbmNlJiZiLnBsYXllckluc3RhbmNlLnBsYXk/KHdpbmRvdy5wb3N0TWVzc2FnZSgiaG9tYWRwbGF5IiwiKiIpLGIucGxheWVySW5zdGFuY2UucGxheSgpKTp3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8ucmVzdW1lUGxheWJhY2smJih3aW5kb3cucG9zdE1lc3NhZ2UoImhvbWFkcGxheSIsIioiKSx3aW5kb3cub3ZWaWRlby5yZXN1bWVQbGF5YmFjaygpKX0saXNQbGF5aW5nOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4hMT09PWIucGxheWVySW5zdGFuY2UucGF1c2VkPyEwOiEwPT09Yi5wbGF5ZXJJbnN0YW5jZS5wYXVzZWQ/ITE6Yi5pc1BsYXlpbmd9LGdldEN1cnJlbnRUaW1lOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTsKaWYoYi5wbGF5ZXJJbnN0YW5jZSYmYi5wbGF5ZXJJbnN0YW5jZS5jdXJyZW50VGltZSlyZXR1cm4gYi5wbGF5ZXJJbnN0YW5jZS5jdXJyZW50VGltZTtpZih3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8uZ2V0Q3VycmVudFRpbWUpcmV0dXJuIHdpbmRvdy5vdlZpZGVvLmdldEN1cnJlbnRUaW1lKCl9LGdldER1cmF0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtpZihiLnBsYXllckluc3RhbmNlJiZiLnBsYXllckluc3RhbmNlLmR1cmF0aW9uKXJldHVybiBiLnBsYXllckluc3RhbmNlLmR1cmF0aW9uO2lmKHdpbmRvdy5vdlZpZGVvJiZ3aW5kb3cub3ZWaWRlby5nZXREdXJhdGlvbilyZXR1cm4gd2luZG93Lm92VmlkZW8uZ2V0RHVyYXRpb24oKX0sTzpmdW5jdGlvbigpe3JldHVybiJPdlZpZGVvIn0sTmE6ZnVuY3Rpb24oKXt9LE1kOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0UmF3UGxheWVyKCk7dGhpcy5nZXRDdXJyZW50VGltZSgpPmImJihiPXRoaXMuZ2V0Q3VycmVudFRpbWUoKSk7CnZhciBhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiZ0aGlzLlYmJnRoaXMuVigpfX0pfSkoYyk7dmFyIERhPWMubGx8fERhOyhmdW5jdGlvbihjKXtjLmtsPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LEFhOmZ1bmN0aW9uKCl7aWYoIXRoaXMucGUpaWYodGhpcy5BYnx8KHRoaXMuQWI9MCksdGhpcy5nZXRQbGF5ZXIoKS5pc1BsYXlpbmcoKSYmdGhpcy5BYisrLDE1PHRoaXMuQWIpdGhpcy5vKCJub2ZyYW1ld29yayIsIklNQSIpLHRoaXMucyghMCk7ZWxzZXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2lmKGIuYWR2ZXJ0aXNpbmcpaWYoYj1iLmFkdmVydGlzaW5nLmFkc0xvYWRlcil7dGhpcy5wZT0hMDt2YXIgYT0iYWRFcnJvciI7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUuQURfRVJST1ImJgooYT1nb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SKTtiLmFkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZGF8fCh0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5BYSgpfS5iaW5kKHRoaXMpLDEwKTtlbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5BYSgpfS5iaW5kKHRoaXMpLDEwKX19LHZkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF9LGdhOmZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGEoYSxiKXt2YXIgaD0hMTtpZihhKXtpZigxMDA5PT1hfHwzMDM9PWF8fDQwMz09YSloPSEwO2h8fCFhLmluZGV4T2Z8fC0xPT09YS5pbmRleE9mKCIxMDA5IikmJi0xPT09YS5pbmRleE9mKCIzMDMiKSYmLTE9PT1hLmluZGV4T2YoIjQwMyIpfHwoaD0hMCk7Im51bWJlciI9PXR5cGVvZiBhJiYoYi5UPWEsYi5vKCJhZGVycm9yIiwKYSkpfXJldHVybiBofWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTtpZihiLmdldEVycm9yJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5nZXRFcnJvcil7dmFyIGg9Yi5nZXRFcnJvcigpO2lmKGguZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgaC5nZXRFcnJvckNvZGUmJmEoaC5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO3JldHVybn19Zm9yKHZhciBkIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSYmYltkXSYmYltkXS5hZEVycm9yJiZiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmYShiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTticmVha319LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpO3RoaXMuVD10aGlzLlR8fCExO3RoaXMuQWEoKTt2YXIgYT13aW5kb3cub3ZWaWRlbzthfHwoYT13aW5kb3cub3YudmlkZW8uUGxheWVyKTsKYSYmYS5yZWdpc3RlckV2ZW50JiYhdGhpcy5IcD8oYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuT25fUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX0FERVJST1IsZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCk7dGhpcy5zKCl9LmJpbmQodGhpcykpLHRoaXMuSHA9ITAsYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX1NUT1BQRUQsZnVuY3Rpb24oYSl7Yi5WcyhhKX0uYmluZCh0aGlzKSkpOmIuaXNQbGF5aW5nKCl8fHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksMTAwKX0sczpmdW5jdGlvbihiKXt0aGlzLkkoYil9fSl9KShjKTsKdmFyIEVhPWMua2x8fEVhOyhmdW5jdGlvbihjKXtjLm1sPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMuVWE9MTUwMDt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1bXTt3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8uc3luY2hyb25pemVyJiZ3aW5kb3cub3ZWaWRlby5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllciYmMDx3aW5kb3cub3ZWaWRlby5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllci5sZW5ndGgmJihiPXdpbmRvdy5vdlZpZGVvLnN5bmNocm9uaXplci5yZWdpc3RlcmVkUGxheWVyKTt3aW5kb3cub3YmJndpbmRvdy5vdi52aWRlbyYmd2luZG93Lm92LnZpZGVvLlBsYXllciYmd2luZG93Lm92LnZpZGVvLlBsYXllci5zeW5jaHJvbml6ZXImJndpbmRvdy5vdi52aWRlby5QbGF5ZXIuc3luY2hyb25pemVyLnJlZ2lzdGVyZWRQbGF5ZXImJjA8d2luZG93Lm92LnZpZGVvLlBsYXllci5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllci5sZW5ndGgmJgooYj13aW5kb3cub3YudmlkZW8uUGxheWVyLnN5bmNocm9uaXplci5yZWdpc3RlcmVkUGxheWVyKTtpZigwPGIubGVuZ3RoKWZvcih2YXIgYT0wO2E8Yi5sZW5ndGg7YSsrKXt2YXIgaD1uZXcgRGEoYlthXSk7aC5xYXx8dGhpcy5OKGgpfHwodGhpcy5QKGgpLChuZXcgRWEoaCx0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIEZhPWMubWx8fEZhLEdhPW5ldyBGYShyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5NaT10aGlzLmFbOF07dGhpcy5idD10aGlzLmFbN107dGhpcy52bj10aGlzLmFbN107dGhpcy5XaT10aGlzLmFbNV07dGhpcy5Daz10aGlzLmFbNF07dGhpcy5qPXRoaXMuYVs3XX1jLkp2PWI7Yi5wcm90b3R5cGU9e0xpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5NaTp0aGlzLmF0KGEpfSxhdDpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuYnQ6CnRoaXMudW4oYSl9LHVuOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy52bjp0aGlzLlZpKGEpfSxWaTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuV2k6dGhpcy5CayhhKX0sQms6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLkNrOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuajphfX19KShjKTt2YXIgSGE9Yy5Kdnx8SGEsdGM9bmV3IEhhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9dGMuTGkoNCk7KGZ1bmN0aW9uKGMpe2Mubms9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPWUuQ2coYiwiZWxlbWVudElEIik7dGhpcy5xaD1iLnBvc2l0aW9uaW5nO3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2guc3R5bGUud2lkdGg9CmIud2lkdGg7aC5zdHlsZS5taW5XaWR0aD1iLndpZHRoO2guc3R5bGUubWF4V2lkdGg9Yi53aWR0aDtoLnN0eWxlLmhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1pbkhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1heEhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1hcmdpbkxlZnQ9ImF1dG8iO2guc3R5bGUubWFyZ2luUmlnaHQ9ImF1dG8iOyJiZWZvcmUiPT10aGlzLnFoP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaCxhKToiYWZ0ZXIiPT10aGlzLnFoP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaCxhLm5leHRTaWJsaW5nKTphLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGgsYSk7dGhpcy5ZKGgpO3RoaXMuWihoKTt0aGlzLm5kPWh9LHBhdXNlOmZ1bmN0aW9uKCl7fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5uZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMubmQpfSx2YTpmdW5jdGlvbigpe3JldHVybiEwfSxzbzpmdW5jdGlvbigpe2UuV2codGhpcy5uZCk7ZS5CZSh0aGlzLm5kKTsKd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnNvKCl9LmJpbmQodGhpcyksNTApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuImlucmVhZCJ9LEdlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSl9KShjKTt2YXIgSWE9Yy5ua3x8SWE7KGZ1bmN0aW9uKGMpe2MubWs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMubygiZXh0ZXJuYWwiKTt0aGlzLkkoITApfX0pfSkoYyk7dmFyIEphPWMubWt8fEphOyhmdW5jdGlvbihjKXtjLm9rPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMuVWE9MTUwMDt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtJiZtLmlucmVhZCl7dmFyIGI9bS5pbnJlYWQsYT1lLkNnKGIsImVsZW1lbnRJRCIpO2UuV2coYSkmJihiPW5ldyBJYShiKSx0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBKYShiLHRoaXMuSykpLmcoKSkpO3RoaXMuSGI9d2luZG93LnNldFRpbWVvdXQodGhpcy5nLmJpbmQodGhpcyksCjEwMCl9ZWxzZSB0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksMTAwKX19KX0pKGMpO3ZhciBLYT1jLm9rfHxLYSxMYT1uZXcgS2Eocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMudnQ9dGhpcy5hWzVdO3RoaXMuTmo9dGhpcy5hWzJdO3RoaXMuSXY9dGhpcy5hWzRdO3RoaXMudXA9dGhpcy5hWzddO3RoaXMuS249dGhpcy5hWzhdO3RoaXMuQXM9dGhpcy5hWzRdO3RoaXMuWHA9dGhpcy5hWzNdO3RoaXMuS209dGhpcy5hWzRdO3RoaXMuU3M9dGhpcy5hWzVdO3RoaXMuWG89dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbNF19Yy5oaj1iO2IucHJvdG90eXBlPXt1dDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMudnQ6dGhpcy5NaihhKX0sTWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLk5qOnRoaXMuSHYoYSl9LEh2OmZ1bmN0aW9uKGEpe3JldHVybiA5PAphP3RoaXMuSXY6dGhpcy50cChhKX0sdHA6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnVwOnRoaXMuSm4oYSl9LEpuOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Lbjp0aGlzLnpzKGEpfSx6czpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuQXM6dGhpcy5XcChhKX0sV3A6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLlhwOnRoaXMuSm0oYSl9LEptOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuS206dGhpcy5ScyhhKX0sUnM6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlNzOnRoaXMuV28oYSl9LFdvOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5Ybzp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLmo6YX19fSkoYyk7dmFyIE1hPWMuaGp8fE1hLHVjPW5ldyBNYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPQp1Yy51dCg0KTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEpe3RoaXMudXJsPWE7dGhpcy5tZXRob2Q9IkdFVCI7dGhpcy5kYXRhPXt9fWMuYms9YjtiLnByb3RvdHlwZT17c2V0RGF0YTpmdW5jdGlvbihhKXt0aGlzLmRhdGE9YX0sRXQ6ZnVuY3Rpb24oYSl7dGhpcy5tZXRob2Q9YX0sYXBwZW5kRGF0YTpmdW5jdGlvbihhLGIpe3RoaXMuZGF0YVthXT1ifSxkbjpmdW5jdGlvbihhKXt0cnl7dGhpcy5hcHBlbmREYXRhKCJob21hZF9tYWNyb3MiLEpTT04uc3RyaW5naWZ5KGEpKX1jYXRjaChiKXt9fX19KShjKTt2YXIgeT1jLmJrfHx5OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsaCxkLGYpe3RoaXMuYmI9YTt0aGlzLnhnPXRoaXMuZ2k9ITE7dGhpcy5taD1kO3RoaXMuSmg9ITE7InN0cmluZyI9PT10eXBlb2YgYSYmKHRoaXMuYmI9bmV3IHkoYSkpO3ZhciBjPXRoaXMucWI9bmV3IFhNTEh0dHBSZXF1ZXN0O2Mub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWh8fAo0IT1jLnJlYWR5U3RhdGV8fDIwMCE9Yy5zdGF0dXMmJjIwMSE9Yy5zdGF0dXN8fGgoYyk7aWYoZCYmND09Yy5yZWFkeVN0YXRlJiYyMDAhPWMuc3RhdHVzJiYyMDEhPWMuc3RhdHVzKWQoYyk7ZWxzZSBpZig0PT1jLnJlYWR5U3RhdGUmJjA9PWMuc3RhdHVzJiZsJiZsLkZlKHRoaXMuYmIudXJsKSYmbC5OZCl7dmFyIGU9bmV3IHkoYS51cmwpO2UuRXQoIlBPU1QiKTtlLnNldERhdGEoe2hvbWFkX3Bpbmc6InRydWUifSk7KG5ldyBiKGUsZnVuY3Rpb24oYSl7dmFyIGI9ITE7dHJ5e2I9SlNPTi5wYXJzZShhLnJlc3BvbnNlVGV4dCl9Y2F0Y2goaCl7Yj0hMX1iJiZiLnBpbmcmJiJwb25nIj09Yi5waW5nJiYoYj0hMCk7Ynx8bC5rYSgicmVxdWVzdF9mYWlsZWRfbm9wb25nICIpfSxmdW5jdGlvbigpe2wua2EoInJlcXVlc3RfZmFpbGVkIil9KSkubG9hZCgpfWYmJjQhPWMucmVhZHlTdGF0ZSYmZihjKX0uYmluZCh0aGlzKX1jLmNrPWI7Yi5wcm90b3R5cGU9e2xvYWQ6ZnVuY3Rpb24oKXt2YXIgYT0KdGhpcy5iYi5kYXRhO2lmKCJzdHJpbmciIT10eXBlb2YgYSl7dmFyIGI9YSxhPSIiLGQ7Zm9yKGQgaW4gYilhKz0iJiIrZCsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGJbZF0pO2E9YS5zdWJzdHIoMSl9dGhpcy54ZyYmKGErPSImaG9tYWRfZm9sbG93X3JlZGlyZWN0cz10cnVlIik7dHJ5e3RoaXMuSmg/dGhpcy5xYi5vcGVuKHRoaXMuYmIubWV0aG9kLHRoaXMuYmIudXJsLCExKTp0aGlzLnFiLm9wZW4odGhpcy5iYi5tZXRob2QsdGhpcy5iYi51cmwsITApLHRoaXMuZ2l8fCh0aGlzLnFiLndpdGhDcmVkZW50aWFscz0hMCksMDxhLmxlbmd0aCYmdGhpcy5xYi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSxhWyJYLUhvbWFkLVBvc3QiXSYmdGhpcy5xYi5zZXRSZXF1ZXN0SGVhZGVyKCJYLUhvbWFkLVBvc3QiLCJ0cnVlIiksdGhpcy5xYi5zZW5kKGEpfWNhdGNoKGYpe2wmJmwuRmUodGhpcy5iYi51cmwpP2wuTmQ/Cmwua2EoInJlcXVlc3RfZmFpbGVkIik6ZS50cmFjaygiY2hlY2siLCJyZXF1ZXN0X2ZhaWxlZCIsITApOmwuRmUodGhpcy5iYi51cmwpLHRoaXMubWgmJnRoaXMubWgoKX1yZXR1cm4gdGhpcy5xYn19fSkoYyk7dmFyIE5hPWMuY2t8fE5hOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5LYT0hMTt0aGlzLnFjPSIiO3RoaXMuZWU9dGhpcy5wYz10aGlzLnViPW51bGw7dGhpcy5Wbz10aGlzLkdiPXRoaXMuZGg9ITE7dGhpcy5KYT0iIjt0aGlzLllnPSExO3RoaXMuRmE9dGhpcy5yZD0iIjt0aGlzLlVnPXRoaXMuWD10aGlzLmlzRW5hYmxlZD10aGlzLlplPSExO3RoaXMuQ2E9W107dGhpcy5LZz10aGlzLlpiPSIiO3RoaXMubGU9ITE7dGhpcy5wZj0wO3RoaXMuRWY9InN2bXBsYXllci5hZHZlcnRpc2luZy5IT01BRF9WRVJJRklFRCI7dGhpcy5DZj0ic3ZtcGxheWVyLmFkdmVydGlzaW5nLkhPTUFEX0JMT0NLRUQiO3RoaXMuS2I9InN2bXBsYXllci5hZHZlcnRpc2luZy5IT01BRF9OT0JMT0NLRVIiOwp0aGlzLmhjPSJzdm1wbGF5ZXIuYWR2ZXJ0aXNpbmcuSE9NQURfQURCTE9DS0VSIjt0aGlzLkRmPSJzdm1wbGF5ZXIuYWR2ZXJ0aXNpbmcuSE9NQURfQ09PS0lFQkxPQ0tFUiI7dGhpcy5hYz0iIjt0aGlzLmJjPVtdO3RoaXMuY2M9W107dGhpcy5MZD1bXTt0aGlzLiRiPSIiO3RoaXMucWY9MDt0aGlzLnZpZGVvcGxhemE9e307dGhpcy5BYz0hMTt0aGlzLnVvPXRoaXMuT2Q9bnVsbDt0aGlzLkZoPXRoaXMuTmM9dGhpcy5wZz10aGlzLnVmPXRoaXMuTmQ9dGhpcy5nZT10aGlzLlFjPSExO3RoaXMuZ2I9e2dsb2JhbDohMSxjbGllbnQ6ITEsY3VzdG9tZXI6ITF9O3RoaXMudGQ9MDt0aGlzLk1nPSExO3RoaXMuTGc9MUUzO3RoaXMuJGM9ITE7dGhpcy5QYT0xRTM7dGhpcy5NZj0iIn1jLmRrPWI7Yi5wcm90b3R5cGU9e2dldENvbmZpZzpmdW5jdGlvbigpe3JldHVybntpc0FjdGl2ZTp0aGlzLkthLGFkdGFncGFyYW1ldGVyOnRoaXMucWMsYWR0YWdtb2RpZmllcjp0aGlzLnViLGFkdGFnbW9kaWZpZXJBZHY6dGhpcy5wYywKYWR0YWdyZWdleDp0aGlzLmVlLGJpdHJhdGU6dGhpcy5QYSxqc3BvcHVwczp0aGlzLmRoLHNpZGVsb2Fkczp0aGlzLkdiLGRpc2FibGV0ZXN0czp0aGlzLlZvLGhvbWFkQWxpYXM6dGhpcy5KYSxpc0luaXRpYWxpemVkOnRoaXMuWWcsZ2xvYmFsQ29uZmlnOnRoaXMucmQsY2xpZW50Q29uZmlnOnRoaXMuRmEsaXNFbmFibGVkOnRoaXMuaXNFbmFibGVkLGlzVmVyaWZpZWQ6dGhpcy5YLGlzQmxvY2tlZDp0aGlzLlVnLHNlcnZlcjp0aGlzLkNhLHN2bUNvbmZpZzp0aGlzLlpiLGhvbWFkQWRwYXRoOnRoaXMuS2csZGlzYWJsZUNvb2tpZVRlc3Q6dGhpcy5sZSx0ZXN0Q29va2llQXR0ZW1wdHM6dGhpcy5wZixIT01BRF9WRVJJRklFRDp0aGlzLkVmLEhPTUFEX0JMT0NLRUQ6dGhpcy5DZixIT01BRF9OT0JMT0NLRVI6dGhpcy5LYixIT01BRF9BREJMT0NLRVI6dGhpcy5oYyxIT01BRF9DT09LSUVCTE9DS0VSOnRoaXMuRGYsdGVzdEhpZGU6dGhpcy5hYyx0ZXN0VGFnczp0aGlzLmJjLHRlc3RUYWdzSlM6dGhpcy5jYywKdGVzdFRhZ3NYSFI6dGhpcy5MZCx0ZXN0Q29va2llOnRoaXMuJGIsdGhyb3R0bGU6dGhpcy5xZix2aWRlb3BsYXphOnRoaXMudmlkZW9wbGF6YSxob21hZFRlc3RlZDp0aGlzLkFjLGNoZWNrZWRIb21hZFN0YXR1c0NhbGxiYWNrOnRoaXMudW8sYWRCbG9ja2VyRGV0ZWN0ZWQ6dGhpcy5RYyxibG9ja2VkV2FzQ2FsbGVkOnRoaXMuZ2UsdXNlU3RyaWN0Q2hlY2tzOnRoaXMuTmQsdXNlU3RyaWN0Q29uZmlnQ2hlY2tzOnRoaXMudWYsY29uZmlnRmFpbHVyZXM6dGhpcy5nYixzaXRlQ29uZmlnOnRoaXMuYWIsc2VydmVySWQ6dGhpcy5CaCxlbmFibGVRdWFydGlsZVRyYWNraW5nOnRoaXMudmMsdnBhaWQ6dGhpcy5OYyxza2lwQWxsb3dlZDp0aGlzLkZoLHZtYXBzOnRoaXMuY2ksYWx0ZXJuYXRlX2NsaWNrdGhyb3VnaDp0aGlzLiRjLGFkRmFsbGJhY2tVUkw6dGhpcy5NZn19LERxOmZ1bmN0aW9uKCl7dmFyIGE9ITEsYjtmb3IoYiBpbiB0aGlzLmdiKSJib29sZWFuIj09dHlwZW9mIHRoaXMuZ2JbYl0mJgoxPT10aGlzLmdiW2JdJiYoYT0hMCk7cmV0dXJuIGF9LGRmOmZ1bmN0aW9uKGEpe3RoaXMuZ2JbYV09ITB9LGZxOmZ1bmN0aW9uKCl7dmFyIGE9W10sYjtmb3IoYiBpbiB0aGlzLmdiKSJib29sZWFuIj09dHlwZW9mIHRoaXMuZ2JbYl0mJjE9PXRoaXMuZ2JbYl0mJmEucHVzaChiKTtyZXR1cm4gYX0sS2Q6ZnVuY3Rpb24oYSl7YT1hfHwiIjtpZigic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIGE7YT1hLnJlcGxhY2UoIlt0aW1lXSIsTWF0aC5yb3VuZCgobmV3IERhdGUpLmdldFRpbWUoKS8xRTMpKTthPWEucmVwbGFjZSgiW3RpbWVNU10iLChuZXcgRGF0ZSkuZ2V0VGltZSgpKTthPWEucmVwbGFjZSgiW3RpbWVzdGFtcF0iLChuZXcgRGF0ZSkuZ2V0VGltZSgpKTthPWEucmVwbGFjZSgiW3JhbmRvbV0iLHRoaXMuRWIoMTApLnRvU3RyaW5nKCkpO2E9YS5yZXBsYWNlKCJbZG9jdW1lbnRVUkxdIixkb2N1bWVudC5VUkwpO2E9YS5yZXBsYWNlKCJbZG9jdW1lbnRCYXNlVVJJXSIsZG9jdW1lbnQuYmFzZVVSSSk7CnJldHVybiBhPWUuUG4oYSl9LHphOmZ1bmN0aW9uKGEsYixkKXt2YXIgZj0iIixjPSIiLGU9IiIsZz0iIjtpZighdGhpcy5LYSYmIWIpcmV0dXJuIG5ldyB5KGEpO2Y9dGhpcy5FZShhKTtjPXRoaXMubGEoYSk7Zj8odGhpcy5DYygpP2U9YTplPWMucHJvdG9jb2wrIjovLyIrYy5hdXRob3JpdHkrIi8iLGc9Yy5wYXRoLnN1YnN0cigxKSk6KGU9dGhpcy5EZCgpLGc9Yy5wYXRoLnN1YnN0cigxKSsoYy5xdWVyeT8iPyIrYy5xdWVyeToiIikpO2QmJih0aGlzLnFjfHx0aGlzLnVifHx0aGlzLnBjfHx0aGlzLmVlKSYmKGc9dGhpcy5XcihnKSk7YT1uZXcgeShlKTthLnVybD1lO2U9IiI7ZT1mP2MuaG9zdC5zcGxpdCgiLiIpLnNsaWNlKDEpLmpvaW4oIi0iKTp0aGlzLmhxKGMuaG9zdCk7YS5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9ZTthLmRhdGEuaG9tYWRfdXJsX3N1ZmZpeD1nO2EuZGF0YS5ob21hZF91cmxfc3VmZml4X2Jhc2U2ND10aGlzLnZiKGcpO2EubWV0aG9kPSJQT1NUIjsKcmV0dXJuIGF9LEVlOmZ1bmN0aW9uKGEpe3ZhciBiPSExLGQ9bmV3IFJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPyhbdy4tXSopOj8uKihbMC05XSspPy8/KFthLWYwLTldezQwfSkvPyQiLCJnIik7KGQ9ZC5leGVjKGEpKSYmKGRbMl18fGRbNV0pP2I9ITA6dGhpcy5DYygpJiYoZD1uZXcgUmVnRXhwKCJeKGh0dHBzPyk6Ly8oW3cuLV0qKTo/LiooWzAtOV0rKT8vKFthLWYwLTldezQwfSkvPyQiLCJnIiksKGQ9ZC5leGVjKGEpKSYmZFs0XSYmKGI9ITApKTtyZXR1cm4gYn0sQ2M6ZnVuY3Rpb24oKXt2YXIgYT0hMSxiPSIiO3RoaXMuQ2EmJnRoaXMuQ2EubGVuZ3RoJiYwPHRoaXMuQ2EubGVuZ3RoJiYoYj10aGlzLkNhWzBdLGI9Yi5yZXBsYWNlKCJodHRwczovLyIsIiIpLGI9Yi5yZXBsYWNlKCJodHRwOi8vIiwiIiksYj1iLnJlcGxhY2UoIi8vIiwiIiksYT0oYT1iLnNwbGl0KCIuIikpJiZhWzBdJiYiW2hhc2hdIj09YVswXT8hMTohMCk7cmV0dXJuIGF9LEZlOmZ1bmN0aW9uKGEpe3ZhciBiPQohMSxkPVJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPy4qIiwiZyIpLmV4ZWMoYSk7ZCYmKGRbMl18fGRbNV0pP2I9ITA6Yj10aGlzLkVlKGEpO3JldHVybiBifSxocTpmdW5jdGlvbihhKXt2YXIgYj0iIixkPSIiO2lmKCJzdHJpbmciPT09dHlwZW9mIHRoaXMuSmEmJjA8dGhpcy5KYS5sZW5ndGgpcmV0dXJuIHRoaXMuSmE7Zm9yKGQgaW4gdGhpcy5KYSlpZihiPXRoaXMuSmFbZF0sYi5oYXNPd25Qcm9wZXJ0eSgidXJsIikmJmIudXJsPT09YSlyZXR1cm4gYi5TdjtyZXR1cm4ibm9uZSJ9LHVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2FbdGhpcy5CaF19LERkOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy51ZCgpLGI9dGhpcy5FaCgobmV3IERhdGUpLmdldFRpbWUoKSsiIiksZD0iMWFiY2RmIi5zcGxpdCgiIik7cmV0dXJuIGEucmVwbGFjZSgiW2hhc2hdIixiLnNsaWNlKDAsLTEpKyIiK2RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmQubGVuZ3RoKV0pfSxqaDpmdW5jdGlvbihhLApiLGQpe2E9ITE7Yj0iIjtpZihkLmV2YWwpdHJ5e2I9ZXZhbCgiKCIrZC5ldmFsKyIpKCkiKX1jYXRjaChmKXthPSEwfWVsc2UgYT0hMDthJiYiS0VFUCIhPT1kLmZhbGxiYWNrJiYoYj1kLmZhbGxiYWNrKTtyZXR1cm4gYn0sVnI6ZnVuY3Rpb24oYSxiKXt2YXIgZD1lLmxhKGEpLGY9IiIsZj0iIixjO2ZvcihjIGluIGIpe2lmKGJbY10uc3VidmFsdWVzKXtmb3IodmFyIGc9ZGVjb2RlVVJJQ29tcG9uZW50KGQucXVlcnlLZXlbY10pLnNwbGl0KCImIiksZj17fSxIPTA7SDxnLmxlbmd0aDtIKyspe3ZhciBrPWdbSF0uc3BsaXQoIj0iKTtmW2tbMF1dPWtbMV19Zm9yKHZhciBsIGluIGJbY10uc3VidmFsdWVzKWZbbF09dGhpcy5qaChmW2xdLGwsYltjXS5zdWJ2YWx1ZXNbbF0pO2c9W107Zm9yKGwgaW4gZilnLnB1c2gobCsiPSIrZltsXSk7Zj1nPWVuY29kZVVSSUNvbXBvbmVudChnLmpvaW4oIiYiKSl9ZWxzZSBmPXRoaXMuamgoZC5xdWVyeUtleVtjXSxjLGJbY10pO2QucXVlcnlLZXlbY109CmZ9bD1bXTtmb3IoYyBpbiBkLnF1ZXJ5S2V5KWwucHVzaChjKyI9IitkLnF1ZXJ5S2V5W2NdKTtyZXR1cm4gZj1kLmhvc3QrZC5wYXRoKyI/IitsLmpvaW4oIiYiKX0sV3I6ZnVuY3Rpb24oYSl7dGhpcy5xYyYmKGErPXRoaXMucWMpO2lmKHRoaXMudWIpZm9yKHZhciBiIGluIHRoaXMudWIpdGhpcy51Yi5oYXNPd25Qcm9wZXJ0eShiKSYmKGE9YS5yZXBsYWNlKGIsdGhpcy51YltiXSkpO3RoaXMucGMmJihhPXRoaXMuVnIoYSx0aGlzLnBjKSk7cmV0dXJuIGF9LGw6ZnVuY3Rpb24oYSxiLGQsZixjLGUpe2w9dGhpczt0aGlzLllnPSEwO3RoaXMucmQ9YTt0aGlzLkZhPWI7dGhpcy5aZT1kO3RoaXMuT2Q9Zjt0aGlzLnNjPWM7dGhpcy5hYj1lfHx7fTt0aGlzLkpyKCk7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLkZhKXRoaXMuSHIoKTtlbHNlIGlmKCJvYmplY3QiIT09dHlwZW9mIHRoaXMuRmEpdHJ5e3RoaXMuRmE9YigpLHRoaXMuZGQoKX1jYXRjaChnKXt0aGlzLmthKCJub0NsaWVudENvbmZpZyIpfX0sCm5iOmZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7dHJ5e2I9bmV3IEV2ZW50KGEpfWNhdGNoKGQpe2I9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksYi5pbml0RXZlbnQoImN1c3RvbSIsITAsITEpfXJldHVybiBifSxKcjpmdW5jdGlvbigpe3RoaXMuTGEobmV3IHkodGhpcy5yZCt0aGlzLmFlKCJnbG9iYWwiKSksdGhpcy56cS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7dGhpcy5kZigiZ2xvYmFsIik7Im9iamVjdCI9PXR5cGVvZiBfY2xpZW50Q29uZmlnJiZ0aGlzLmRkKCl9LmJpbmQodGhpcyksITApfSxIcjpmdW5jdGlvbigpe3RoaXMuTGEobmV3IHkodGhpcy5GYSt0aGlzLmFlKCJjbGllbnQiLC0xIT10aGlzLkZhLmluZGV4T2YoIj8iKSkpLHRoaXMuZGQuYmluZCh0aGlzKSxmdW5jdGlvbigpe3RoaXMuZGYoImNsaWVudCIpO3RoaXMua2EoImNsaWVudENvbmZpZ0NvdWxkTm90QmVMb2FkZWQiKX0uYmluZCh0aGlzKSwhMCl9LGFlOmZ1bmN0aW9uKGEsYil7dmFyIGQ7ZD0oYj8iJiI6CiI/IikrKCJjYWNoZT0iK3RoaXMuRWIoKSk7dGhpcy5hYiYmdGhpcy5hYi5ub0NsaWVudENvbmZpZ0NhY2hlQnVzdGVyJiYiY2xpZW50Ij09YSYmKGQ9IiIpO3RoaXMuYWImJnRoaXMuYWIubm9DYWNoZUJ1c3RlciYmKGQ9IiIpO3JldHVybiBkfSxrYTpmdW5jdGlvbihhKXtpZighdGhpcy5nZSl7dGhpcy5nZT0hMDt2YXIgYj1mdW5jdGlvbigpe2Zvcih2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSxiPTA7YjxhLmxlbmd0aDtiKyspe2lmKGFbYl0mJmFbYl0ucGF1c2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBhW2JdLnBhdXNlKXRyeXthW2JdLnBhdXNlKCl9Y2F0Y2goaCl7fWFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKX1hPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKTtmb3IoYj0wO2I8YS5sZW5ndGg7YisrKWFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTthPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInZpZGVvLXdyYXBwZXIiKTsKZm9yKGI9MDtiPGEubGVuZ3RoO2IrKylhW2JdJiZhW2JdLnBhcmVudE5vZGUmJmFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTthPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInZpZGVvcGxheWVyIik7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKylhW2JdJiZhW2JdLnBhcmVudE5vZGUmJmFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTtpZih3aW5kb3cuc2VsZiE9d2luZG93LnRvcClmb3IoYT13aW5kb3cuZG9jdW1lbnQ7YS5oYXNDaGlsZE5vZGVzKCk7KWEucmVtb3ZlQ2hpbGQoYS5sYXN0Q2hpbGQpfTsiNHBsYXllcnMuZGUiPT1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpJiYodGhpcy5zYz0hMSk7dGhpcy5zYyYmImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLnNjP3RoaXMuc2MoKTooYigpLHdpbmRvdy5zZXRJbnRlcnZhbChiLDUwMCkpO3RoaXMuWD10aGlzLlVnPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLkNmKSk7CnRoaXMuSWIoKTtlLndjKGsuUXMpOyhiPWUuU2IodGhpcy51ZCgpKSl8fChiPWUuU2IoZG9jdW1lbnQubG9jYXRpb24uaHJlZikpO2F8fChhPSJ1bmtvd24iKTtlLnRyYWNrKCJzdGF0c19oZF9wZW5hbHR5IixhLCEwKX19LHpxOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLlgpe3ZhciBiPXt9O3RyeXtiPUpTT04ucGFyc2UoYS5yZXNwb25zZVRleHQpfWNhdGNoKGQpe2IuZW5hYmxlZD0iZmFsc2UifXRoaXMuaXNFbmFibGVkPXRoaXMuZGMoYi5lbmFibGVkKTt0aGlzLlg9IXRoaXMuaXNFbmFibGVkO3RoaXMuaXNFbmFibGVkPyJvYmplY3QiIT10eXBlb2YgdGhpcy5GYXx8dGhpcy5aYnx8dGhpcy5KYXx8dGhpcy5kZCgpOih0aGlzLkthPXRoaXMuaXNFbmFibGVkPSExLHRoaXMuWD0hMCxkb2N1bWVudC5kaXNwYXRjaEV2ZW50KHRoaXMubmIodGhpcy5LYikpLHRoaXMuSWIoKSl9fSxkZDpmdW5jdGlvbihhKXt2YXIgYj0hMTthJiYoYj1hLnJlc3BvbnNlVGV4dCk7YT17fTtpZihiKXRyeXthPQpKU09OLnBhcnNlKGIpfWNhdGNoKGQpe2E9dGhpcy5GYX1lbHNlIGE9dGhpcy5GYTt0aGlzLmlzRW5hYmxlZD10aGlzLmRjKGEuZW5hYmxlZCk7dGhpcy5YPSF0aGlzLmlzRW5hYmxlZDt0aGlzLkNhPWEuc2VydmVyfHxbXTtmb3IoYj0wO2I8dGhpcy5DYS5sZW5ndGg7YisrKXRoaXMuQ2FbYl09dGhpcy5DYVtiXS5yZXBsYWNlKCJkYW1vaC53aWtpYS5jb20iLCJkYW1vaC53aWtpYS5jb20uc3Zvbm0tYWxpYXMuY29tIik7dGhpcy5aYj1hLmNvbmZpZ3x8IiI7dGhpcy5KYT1hLmFsaWFzfHxudWxsO3RoaXMuS2c9YS5hZHBhdGh8fCIiO3RoaXMubGU9YS5kaXNhYmxlY29va2lldGVzdHx8ITE7dGhpcy5CaD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqdGhpcy5DYS5sZW5ndGgpO3RoaXMuaXNFbmFibGVkJiZ0aGlzLlpiJiZ0aGlzLkphJiZ0aGlzLkNhLmxlbmd0aD90aGlzLkRjKCExKToodGhpcy5LYT10aGlzLmlzRW5hYmxlZD0hMSx0aGlzLlg9ITAsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh0aGlzLm5iKHRoaXMuS2IpKSwKdGhpcy5JYigpKX0sRGM6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWCl7dmFyIGI9e307aWYoYSl7dmFyIGI9bmV3IHkodGhpcy5EZCgpKSxkPXRoaXMubGEodGhpcy5aYik7Yi5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9InMzaG9tYWRnbG9iYWxjb25maWdzIjtiLmRhdGEuaG9tYWRfdXJsX3N1ZmZpeD1kLnBhdGguc3Vic3RyKDEpLnJlcGxhY2UoImhvbWFkLWdsb2JhbC1jb25maWdzLnNjaG5lZXZvbm1vcmdlbi5jb20vIiwiIik7Yi5tZXRob2Q9IlBPU1QifWVsc2UgYj1uZXcgeSh0aGlzLlpiK3RoaXMuYWUoImN1c3RvbWVyIikpO3RoaXMuTGEoYix0aGlzLmR1LmJpbmQodGhpcyksZnVuY3Rpb24oKXt0aGlzLmRmKCJjdXN0b21lciIpO2E/dGhpcy5MbD90aGlzLmthKCJub1NWTUNvbmZpZyIpOih0aGlzLkxsPSEwLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5EYyghMCl9LmJpbmQodGhpcyksMTAwKSk6dGhpcy5EYyghMCl9LmJpbmQodGhpcyksITApfX0sZHU6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWCl7YT0KYS5yZXNwb25zZVRleHQ7dmFyIGI9e307dHJ5e2I9SlNPTi5wYXJzZShhKX1jYXRjaChkKXtpZighdGhpcy5BYyYmdGhpcy5pc0VuYWJsZWQpe3RoaXMuQWM9ITA7dGhpcy5EYyghMCk7cmV0dXJufX10aGlzLk5kPXRoaXMuZGMoYi5zdHJpY3QpO3RoaXMudWY9dGhpcy5kYyhiLnN0cmljdF9jb25maWdfZW5hYmxlZCk7dGhpcy5wZz1iLmR1cmF0aW9uX2NoZWNrX3BlbmFsdHlfZGlzYWJsZWR8fCExO3RoaXMudmM9dGhpcy5kYyhiLmVuYWJsZVF1YXJ0aWxlVHJhY2tpbmcpO3RoaXMuaXNFbmFibGVkPXRoaXMuZGMoYi5lbmFibGVkKTt0aGlzLmFjPWIudGVzdGhpZGV8fCIiO3RoaXMuY2M9Yi50ZXN0YWR0YWdzanN8fGIudGVzdGFkdGFnc3x8W107dGhpcy5MZD1iLnRlc3RhZHRhZ3N4aHJ8fFtdO3RoaXMucWM9Yi5hZHRhZ3BhcmFtZXRlcnx8IiI7dGhpcy51Yj1iLmFkdGFnbW9kaWZpZXJ8fG51bGw7dGhpcy5wYz1iLmFkdGFnbW9kaWZpZXJfYWR2fHxudWxsO3RoaXMuZWU9Yi5hZHRhZ3JlZ2V4fHwKbnVsbDt0aGlzLmRoPWIuanNwb3B1cHN8fCExO3RoaXMuR2I9Yi5zaWRlbG9hZHN8fCExO3RoaXMuTmM9Yi52cGFpZHx8ITE7dGhpcy5hYi52cGFpZD10aGlzLk5jO3RoaXMuRmg9Yi5za2lwYWxsb3dlZHx8ITE7dGhpcy5hZD1iLmNhcHRpb25fZHVyYXRpb258fCExO3RoaXMuY2k9Yi52bWFwc3x8IiI7dGhpcy4kYz1iLmFsdGVybmF0ZV9jbGlja3Rocm91Z2h8fCExO3RoaXMuUGE9Yi5iaXRyYXRlfHwxRTM7dGhpcy5NZj1iLmFkX2ZhbGxiYWNrX1VSTHx8IiI7dGhpcy4kYj1iLnRlc3QzcmRwYXJ0eWNvb2tpZSYmYi50ZXN0M3JkcGFydHljb29raWUgaW5zdGFuY2VvZiBBcnJheT90aGlzLnBxKGIudGVzdDNyZHBhcnR5Y29va2llKTpiLnRlc3QzcmRwYXJ0eWNvb2tpZXx8IiI7dGhpcy5sZSYmKHRoaXMuJGI9bnVsbCk7dGhpcy5xZj1iLnRocm90dGxlfHwwO3RoaXMudmlkZW9wbGF6YT1iLnZpZGVvcGxhemF8fHt9OyF0aGlzLkFjJiZ0aGlzLmlzRW5hYmxlZD8odGhpcy5BYz0hMCx0aGlzLkRjKCEwKSk6CnRoaXMuaXNFbmFibGVkJiYhdGhpcy55dSgpJiYodGhpcy5hY3x8dGhpcy5jY3x8dGhpcy5iY3x8dGhpcy4kYnx8dGhpcy5MZCk/dGhpcy5aZT8odGhpcy5LYT10aGlzLlg9ITAsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh0aGlzLm5iKHRoaXMuS2IpKSx0aGlzLmllKCksdGhpcy5JYigpKTp0aGlzLmx1KCk6KHRoaXMuaXNFbmFibGVkPSExLHRoaXMubXUoKSl9fSxsdTpmdW5jdGlvbigpe3RoaXMua3UoKTt0aGlzLm51KCl9LG51OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4idmFyIGV2dCA9IHt9O2lmICh0eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7ZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KCciK2ErIicpO30gZWxzZSB7ZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7ZXZ0LmluaXRDdXN0b21FdmVudCgnIithKyInLCBmYWxzZSwgZmFsc2UsIHt9KTt9d2luZG93LnBhcmVudC5kb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2dCk7In0KdmFyIGI9ImlubGluZWV2YWxkYXRhIixkPTA7dHJ5e3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2Yud2lkdGg9MTtmLmhlaWdodD0xO2Yuc3R5bGUuZGlzcGxheT0ibm9uZSI7Zi5zcmM9ImFib3V0OmJsYW5rIjt2YXIgYz1lLmJhKDEwKSxnPWUuYmEoMTApLEg9ZS5iYSgxMCk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihjLGZ1bmN0aW9uKCl7ZCsrO2I9Yi5yZXBsYWNlKCJkYXRhIiwiIil9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGcsZnVuY3Rpb24oKXtkKys7Yj1iLnJlcGxhY2UoImV2YWwiLCIiKX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoSCxmdW5jdGlvbigpe2QrKztiPWIucmVwbGFjZSgiaW5saW5lIiwiIil9KTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYpO2YuY29udGVudFdpbmRvdy5kb2N1bWVudC53cml0ZShhdG9iKCJQR2gwYld3K1BHaGxZV1ErUEhOamNtbHdkQ0IwZVhCbFBTSjBaWGgwTDJwaGRtRnpZM0pwY0hRaVBnPT0iKSsKYShIKSthdG9iKCJQQzl6WTNKcGNIUStQSE5qY21sd2RDQjBlWEJsUFNKMFpYaDBMMnBoZG1GelkzSnBjSFFpUG1WMllXd29JZz09IikrYShnKSthdG9iKCJJaWs4TDNOamNtbHdkRDQ4YzJOeWFYQjBJSFI1Y0dVOUluUmxlSFF2YW1GMllYTmpjbWx3ZENJZ2MzSmpQU0prWVhSaE9uUmxlSFF2YW1GMllYTmpjbWx3ZER0aVlYTmxOalFzIikrZS52YihhKGMpKSthdG9iKCJJajQ4TDNOamNtbHdkRDQ4TDJobFlXUStQR0p2WkhrK1BDOWliMlI1UGp3dmFIUnRiRDQ9IikpfWNhdGNoKGspe313aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGYpfWNhdGNoKGEpe31pZigzIT1kKXt2YXIgYz1lLnVjKCk7aWYoKGMuaXNDaHJvbWV8fGMuaXNGaXJlZm94KSYmIWMuaXNFZGdlJiYhZS5UYSgpKXtpZih0aGlzLmFiJiZ0aGlzLmFiLnBsYXllciYmdGhpcy5hYi5wbGF5ZXIubGVuZ3RoKXtlLnRyYWNrKCJzdGF0c19oZF9jc3BfaGRwIixiLCEwKTsKcmV0dXJufXRoaXMua2EoImNzcF8iK2IpfWUudHJhY2soInN0YXRzX2hkX2NzcCIsYiwhMCl9fS5iaW5kKHRoaXMpLDFFMyl9LG11OmZ1bmN0aW9uKCl7dGhpcy5YPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLktiKSk7dGhpcy5JYigpfSxMYzpmdW5jdGlvbihhKXt0aGlzLlFjPSEwO3RoaXMuWHx8KHRoaXMuWD10aGlzLkthPSEwLGRvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYihhKSksdGhpcy5JYigpLHRoaXMuaWUoKSl9LGt1OmZ1bmN0aW9uKCl7aWYodGhpcy5hYyl7dmFyIGE9ZS51YygpO2lmKChhLmlzQ2hyb21lfHxhLmlzRmlyZWZveCkmJnRoaXMuYmgoKSl0aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZEhpZGUoKSBzdGV2ZSBpcyBhbGl2ZSIpO2Vsc2V7YT0hMTt0cnl7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yi5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLmFjKTtiLnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuYWMpOwpiLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJ3aWR0aDoxcHg7aGVpZ2h0OjFweDttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4O2JhY2tncm91bmQtY29sb3I6I2ZmMDAwMCIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYik7dmFyIGQ9MD09PWIub2Zmc2V0V2lkdGh8fDA9PT1iLm9mZnNldEhlaWdodDtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGIpO2E9ZH1jYXRjaChmKXt9YT90aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZEhpZGUoKSBhZCBlbGVtZW50IHdhcyBoaWRkZW4iKTp0aGlzLk5oKCl9fWVsc2UgdGhpcy5OaCgpfSxNaDpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXtmPWQuc2hpZnQoKS5yZXBsYWNlKCJbcmFuZG9tXSIsdGhpcy5FYigpKTt0aGlzLnF1KGYsMDxkLmxlbmd0aD9hLmJpbmQodGhpcyk6dGhpcy5tZi5iaW5kKHRoaXMpLGIuYmluZCh0aGlzKSl9ZnVuY3Rpb24gYigpe3RoaXMuTGModGhpcy5oYywibiBIb21hZFV0aWwudGVzdEFkQ2FsbCgpIGFkIGNhbGwgdG8gJyIrCmYrIicgd2FzIGJsb2NrZWQiKX1pZigodGhpcy5iYz10aGlzLkxkKSYmdGhpcy5iYy5sZW5ndGgpe3ZhciBkPXRoaXMuYmMuc2xpY2UoKSxmPSIiO2EuYmluZCh0aGlzKSgpfWVsc2UgdGhpcy5tZigpfSxxdTpmdW5jdGlvbihhLGIsZCl7ZnVuY3Rpb24gZigpe2MoKSYmYigpfWZ1bmN0aW9uIGMoKXtyZXR1cm4gZT8od2luZG93LmNsZWFyVGltZW91dChlKSwhMCk6ITF9dmFyIGU9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtmKCl9LDNFMyk7dGhpcy5MYShuZXcgeShhKSxmLGZ1bmN0aW9uKCl7YygpJiZkKCl9KX0sTmg6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7Zj1kLnNoaWZ0KCkucmVwbGFjZSgiW3JhbmRvbV0iLHRoaXMuRWIoKSk7dGhpcy5ydShmLDA8ZC5sZW5ndGg/YS5iaW5kKHRoaXMpOnRoaXMuTWguYmluZCh0aGlzKSxiLmJpbmQodGhpcykpfWZ1bmN0aW9uIGIoKXt0aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZENhbGxKUygpIGFkIGNhbGwgdG8gJyIrCmYrIicgd2FzIGJsb2NrZWQiKX1pZih0aGlzLmNjJiZ0aGlzLmNjLmxlbmd0aCl7dmFyIGQ9dGhpcy5jYy5zbGljZSgpLGY7YS5iaW5kKHRoaXMpKCl9ZWxzZSB0aGlzLk1oKCl9LHJ1OmZ1bmN0aW9uKGEsYixkKXtmdW5jdGlvbiBmKCl7ZSgpJiZiKCl9ZnVuY3Rpb24gYygpe2UoKSYmZCgpfWZ1bmN0aW9uIGUoKXtyZXR1cm4gZz8od2luZG93LmNsZWFyVGltZW91dChnKSwhMCk6ITF9dmFyIGc9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtmKCl9LDNFMyk7dHJ5e3dpbmRvdy5vbmVycm9yPWZ1bmN0aW9uKGIsZCl7ZD09YSYmZSgpJiZjKCl9O3ZhciBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoayk7ay5zZXRBdHRyaWJ1dGUoImFzeW5jIiwiYXN5bmMiKTtrLnNldEF0dHJpYnV0ZSgiZGVmZXIiLCJkZWZlciIpO2sub25sb2FkPWY7ay5vbmVycm9yPWM7ay5zcmM9YTtrLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwKYyl9Y2F0Y2gobCl7ZigpfX0sbWY6ZnVuY3Rpb24oKXt0aGlzLiRiPyh0aGlzLnBmKyssdGhpcy5MYShuZXcgeSh0aGlzLiRiKSx0aGlzLmp1LmJpbmQodGhpcyksZnVuY3Rpb24oKXt0aGlzLm5mKCJDQ0MiKX0uYmluZCh0aGlzKSkpOnRoaXMuS2goKX0sbmY6ZnVuY3Rpb24oYSl7dGhpcy5MYyh0aGlzLkRmLCJuIEhvbWFkVXRpbC50ZXN0M3JkUGFydHlDb29raWUoKSBjYW5ub3Qgc2V0IDNyZCBwYXJ0eSBjb29raWUgIithKX0sanU6ZnVuY3Rpb24oYSl7YT1hLnJlc3BvbnNlVGV4dDt2YXIgYj0hMTt0cnl7Yj1KU09OLnBhcnNlKGEpfWNhdGNoKGQpe31iJiZiLnN0YXR1cz8idHJpZ2dlci1zZXQiPT1iLnN0YXR1cz8zPnRoaXMucGY/dGhpcy5tZigpOnRoaXMubmYoIkJCQiIpOiJhbHJlYWR5LXNldCI9PWIuc3RhdHVzJiZ0aGlzLktoKCk6dGhpcy5uZigiQUFBIil9LEtoOmZ1bmN0aW9uKCl7dGhpcy5YPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLktiKSk7CnRoaXMuSWIoKTt0aGlzLmllKCl9LGJoOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PWFkZEV2ZW50TGlzdGVuZXIudG9TdHJpbmcoKS5pbmRleE9mKCJuYXRpdmUgY29kZSIpJiYtMT09YWRkRXZlbnRMaXN0ZW5lci50b1N0cmluZygpLmluZGV4T2YoImFkZEV2ZW50TGlzdGVuZXIiKX0sSWI6ZnVuY3Rpb24oKXt2YXIgYT0iMCIsYj0iMCI7dHJ5e2UuVGEoKSYmKGE9IjEiKX1jYXRjaChkKXthPTJ9dGhpcy5RYyYmKGI9IjEiKTtlLnRyYWNrKCJzdGF0c19oZF9tb2JpbGVfYWIiLGErIiIrYiwhMCk7IjEiPT09YiYmKGUuQmEoInQtb25saW5lLmRlIil8fGUuQmEoImdpZ2EuZGUiKXx8ZS5CYSgid2VsdC5kZSIpKSYmZS50cmFjaygic3RhdHNfaGRfYWJfaXNTdGV2ZSIsdGhpcy5iaCgpLCEwKTtkb2N1bWVudC5kaXNwYXRjaEV2ZW50KHRoaXMubmIodGhpcy5FZikpO3RoaXMuT2QmJiJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5PZCYmdGhpcy5PZCgpfSxybzpmdW5jdGlvbigpe2lmKHRoaXMudWYmJgp0aGlzLkRxKCkpe3ZhciBhPXRoaXMuZnEoKTthJiZhLmpvaW4mJmUudHJhY2soImNvbmZpZ19mYWlsZWQiLGEuam9pbigiXyIpLCEwKX19LFJoOmZ1bmN0aW9uKGEpe2F8fChhPSIiKTtpZigic3RyaW5nIiE9PXR5cGVvZiBhKXRyeXthPWEudG9TdHJpbmcoKX1jYXRjaChiKXthPSJjb3VsZF9ub3RfY29udmVydF90b19zdHJpbmcifWE9YS50cmltKCk7ZS50cmFjaygic3RhdHNfaGRfYWN0aXZhdGVkIixhLCEwKX0sTGE6ZnVuY3Rpb24oYSxiLGQsZixjLGcpe3RoaXMudGR8fCh0aGlzLnRkPTApO3RoaXMudGQrKzt0aGlzLnRkPnRoaXMuTGcmJiF0aGlzLk1nJiYodGhpcy5NZz0hMCxlLnRyYWNrKCJzdGF0c19oZF9yZXF1ZXN0Y291bnQiLHRoaXMuTGcsITApKTthPW5ldyBOYShhLGIsZCk7ZiYmKGEuZ2k9ITApO2MmJmUubXIoKSYmKGEueGc9ITApO2cmJihhLkpoPSEwKTtyZXR1cm4gYS5sb2FkKCl9LGVnOmZ1bmN0aW9uKCl7ZS5UYSgpfHxlLllhKCJodHRwOi8vZDM3OTk2NGF5bWV4MnguY2xvdWRmcm9udC5uZXQvY2hlY2sueG1sP2VtcHR5PXRydWUiLAoiaG9tYWRzdGF0aWN2YXN0Iix7aG9tYWRfaGFzaF9ndWVzc2VkOiJ0cnVlIn0sZnVuY3Rpb24oYSl7dmFyIGI9bnVsbCxkPW51bGwsZj0iIjt0cnl7KGI9YS5yZXNwb25zZVhNTCl8fChiPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEucmVzcG9uc2VUZXh0LCJ0ZXh0L3htbCIpKSxkPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkIilbMF19Y2F0Y2goYyl7dGhpcy5rYSgibWVkaWFmaWxlX25veG1sIik7cmV0dXJufWlmKGQpaWYoYT1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJNZWRpYUZpbGUiKSlpZihhWzBdJiYoYT1hWzBdKSxhKXtmPWEmJmEuY2hpbGROb2RlcyYmYS5jaGlsZE5vZGVzWzBdP2EuY2hpbGROb2Rlc1swXS5ub2RlVmFsdWU6IiI7dGhpcy5DYygpfHwoYT10aGlzLmxhKGYpLGY9YS5wcm90b2NvbCsiOi8vIithLmhvc3QpO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7ZS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXtlLm5ldHdvcmtTdGF0ZT09CmUuTkVUV09SS19OT19TT1VSQ0UmJnRoaXMua2EoIm1lZGlhZmlsZSIpfS5iaW5kKHRoaXMpKTtlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNvdXJjZSIpKTtlLnNldEF0dHJpYnV0ZSgic3JjIixmKX1lbHNlIHRoaXMua2EoIm1lZGlhZmlsZV9ub21lZGlhIik7ZWxzZSB0aGlzLmthKCJtZWRpYWZpbGVfbm9tZWRpYSIpO2Vsc2UgdGhpcy5rYSgibWVkaWFmaWxlX25vYWQiKX0uYmluZCh0aGlzKSxmdW5jdGlvbigpe3RoaXMua2EoIm1lZGlhZmlsZV94bWxyZXF1ZXN0Iil9LmJpbmQodGhpcyksdGhpcyl9LGl1OmZ1bmN0aW9uKCl7cmV0dXJuImFsbCI9PT10aGlzLmNpfSxxbzpmdW5jdGlvbigpe3RoaXMuemEoImh0dHA6Ly9kMzc5OTY0YXltZXgyeC5jbG91ZGZyb250Lm5ldC9jaGVjay54bWw/ZW1wdHk9dHJ1ZSIsITApO3ZhciBhPXRoaXMuemEoImh0dHA6Ly9kMzc5OTY0YXltZXgyeC5jbG91ZGZyb250Lm5ldC9jaGVjay54bWw/ZW1wdHk9dHJ1ZSIsITApOwphLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0iaG9tYWRzdGF0aWN2YXN0IjthLmRhdGEuaG9tYWRfaGFzaF9ndWVzc2VkPSJ0cnVlIjt0aGlzLkxhKGEsdGhpcy5UdS5iaW5kKHRoaXMpLHRoaXMuU3UuYmluZCh0aGlzKSl9LFR1OmZ1bmN0aW9uKGEpe3ZhciBiPW51bGwsZD1udWxsO3RyeXsoYj1hLnJlc3BvbnNlWE1MKXx8KGI9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYS5yZXNwb25zZVRleHQsInRleHQveG1sIikpLGQ9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWQiKVswXX1jYXRjaChmKXtyZXR1cm59ZHx8dGhpcy5BcCgpfSxTdTpmdW5jdGlvbigpe30sQXA6ZnVuY3Rpb24oKXtlLndjKGsuenApO2UudHJhY2soImZhaWwtaW5pdCIsIjEwMSIpO3RoaXMua2EoInZhc3RmaWxlTWFuaXB1bGF0aW9uIil9LGllOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0VuYWJsZWQmJnRoaXMuR2IubGVuZ3RoKWZvcih2YXIgYT0wO2E8dGhpcy5HYi5sZW5ndGg7YSsrKXt2YXIgYj0KdGhpcy5HYlthXTsicmVxdWVzdCI9PWIudHlwZSYmZS5ZYShiLnVybCxiLmFsaWFzLG51bGwsZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7fSx0aGlzKTtpZigiZXZhbCI9PWIudHlwZSl7dmFyIGQ9bmV3IEo7d2luZG93W2QuaWEoKV09dGhpcztlLllhKGIudXJsLGIuYWxpYXMsbnVsbCxmdW5jdGlvbihhKXtpZihhLnJlc3BvbnNlVGV4dCl0cnl7ZXZhbChhLnJlc3BvbnNlVGV4dCl9Y2F0Y2goYil7fX0sZnVuY3Rpb24oKXt9LHRoaXMpfX19LHl1OmZ1bmN0aW9uKCl7cmV0dXJuIDEwMCpNYXRoLnJhbmRvbSgpPHRoaXMucWZ9LHBxOmZ1bmN0aW9uKGEpe3JldHVybiBhW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSphLmxlbmd0aCldfSxFYjpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnBvdygxMCxhfHwxMCkqKC44OTk5OTk5OTkqTWF0aC5yYW5kb20oKSsuMSkpfSxiYTpmdW5jdGlvbihhKXthPWF8fDEwO2Zvcih2YXIgYj0iIixkPTA7ZDxhO2QrKyliKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCguNT4KTWF0aC5yYW5kb20oKT82NTo5NykrTWF0aC5mbG9vcigyNipNYXRoLnJhbmRvbSgpKSk7cmV0dXJuIGJ9LGRjOmZ1bmN0aW9uKGEpe3JldHVybiJUcnVlIj09YXx8InRydWUiPT1hfHwxPT1hfHwiMSI9PWF8fDE9PWF9LHZiOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iIixkLGYsYyxlLGcsayxsPTA7bDxhLmxlbmd0aDspZD1hLmNoYXJDb2RlQXQobCsrKSxmPWEuY2hhckNvZGVBdChsKyspLGM9YS5jaGFyQ29kZUF0KGwrKyksZT1kPj4yLGQ9KGQmMyk8PDR8Zj4+NCxnPShmJjE1KTw8MnxjPj42LGs9YyY2Myxpc05hTihmKT9nPWs9NjQ6aXNOYU4oYykmJihrPTY0KSxiPWIrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZSkrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZCkrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZykrCiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGspO3JldHVybiBifSxsYTpmdW5jdGlvbihhKXt2YXIgYj0ic291cmNlIHByb3RvY29sIGF1dGhvcml0eSB1c2VySW5mbyB1c2VyIHBhc3N3b3JkIGhvc3QgcG9ydCByZWxhdGl2ZSBwYXRoIGRpcmVjdG9yeSBmaWxlIHF1ZXJ5IGFuY2hvciIuc3BsaXQoIiAiKTthPS9eKD86KD8hW146QF0rOlteOkBcL10qQCkoW146XC8/Iy5dKyk6KT8oPzpcL1wvKT8oKD86KChbXjpAXSopKD86OihbXjpAXSopKT8pP0ApPyhbXjpcLz8jXSopKD86OihcZCopKT8pKCgoXC8oPzpbXj8jXSg/IVtePyNcL10qXC5bXj8jXC8uXSsoPzpbPyNdfCQpKSkqXC8/KT8oW14/I1wvXSopKSg/Olw/KFteI10qKSk/KD86IyguKikpPykvLmV4ZWMoYSk7Zm9yKHZhciBkPXt9LGY9MTQ7Zi0tOylkW2JbZl1dPWFbZl18fCIiO2QucXVlcnlLZXk9e307ZFtiWzEyXV0ucmVwbGFjZSgvKD86XnwmKShbXiY9XSopPT8oW14mXSopL2csCmZ1bmN0aW9uKGEsYixoKXtiJiYoZC5xdWVyeUtleVtiXT1oKX0pO3JldHVybiBkfSxFaDpmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEpe3ZhciBkPSIiLGgsYztmb3IoaD03OzA8PWg7aC0tKWM9YT4+PjQqaCYxNSxkKz1jLnRvU3RyaW5nKDE2KTtyZXR1cm4gZH1mdW5jdGlvbiBkKGEsYil7cmV0dXJuIGE8PGJ8YT4+PjMyLWJ9dmFyIGYsYyxlPUFycmF5KDgwKSxnPTE3MzI1ODQxOTMsaz00MDIzMjMzNDE3LGw9MjU2MjM4MzEwMixtPTI3MTczMzg3OCxyPTMyODUzNzc1MjAscCxxLHQsdSx2O3A9YS5sZW5ndGg7dmFyIHc9W107Zm9yKGY9MDtmPHAtMztmKz00KWM9YS5jaGFyQ29kZUF0KGYpPDwyNHxhLmNoYXJDb2RlQXQoZisxKTw8MTZ8YS5jaGFyQ29kZUF0KGYrMik8PDh8YS5jaGFyQ29kZUF0KGYrMyksdy5wdXNoKGMpO3N3aXRjaChwJTQpe2Nhc2UgMDpmPTIxNDc0ODM2NDg7YnJlYWs7Y2FzZSAxOmY9YS5jaGFyQ29kZUF0KHAtMSk8PDI0fDgzODg2MDg7YnJlYWs7Y2FzZSAyOmY9CmEuY2hhckNvZGVBdChwLTIpPDwyNHxhLmNoYXJDb2RlQXQocC0xKTw8MTZ8MzI3Njg7YnJlYWs7Y2FzZSAzOmY9YS5jaGFyQ29kZUF0KHAtMyk8PDI0fGEuY2hhckNvZGVBdChwLTIpPDwxNnxhLmNoYXJDb2RlQXQocC0xKTw8OHwxMjh9Zm9yKHcucHVzaChmKTsxNCE9dy5sZW5ndGglMTY7KXcucHVzaCgwKTt3LnB1c2gocD4+PjI5KTt3LnB1c2gocDw8MyY0Mjk0OTY3Mjk1KTtmb3IoYT0wO2E8dy5sZW5ndGg7YSs9MTYpe2ZvcihmPTA7MTY+ZjtmKyspZVtmXT13W2ErZl07Zm9yKGY9MTY7Nzk+PWY7ZisrKWVbZl09ZChlW2YtM11eZVtmLThdXmVbZi0xNF1eZVtmLTE2XSwxKTtjPWc7cD1rO3E9bDt0PW07dT1yO2ZvcihmPTA7MTk+PWY7ZisrKXY9ZChjLDUpKyhwJnF8fnAmdCkrdStlW2ZdKzE1MTg1MDAyNDkmNDI5NDk2NzI5NSx1PXQsdD1xLHE9ZChwLDMwKSxwPWMsYz12O2ZvcihmPTIwOzM5Pj1mO2YrKyl2PWQoYyw1KSsocF5xXnQpK3UrZVtmXSsxODU5Nzc1MzkzJjQyOTQ5NjcyOTUsCnU9dCx0PXEscT1kKHAsMzApLHA9YyxjPXY7Zm9yKGY9NDA7NTk+PWY7ZisrKXY9ZChjLDUpKyhwJnF8cCZ0fHEmdCkrdStlW2ZdKzI0MDA5NTk3MDgmNDI5NDk2NzI5NSx1PXQsdD1xLHE9ZChwLDMwKSxwPWMsYz12O2ZvcihmPTYwOzc5Pj1mO2YrKyl2PWQoYyw1KSsocF5xXnQpK3UrZVtmXSszMzk1NDY5NzgyJjQyOTQ5NjcyOTUsdT10LHQ9cSxxPWQocCwzMCkscD1jLGM9djtnPWcrYyY0Mjk0OTY3Mjk1O2s9aytwJjQyOTQ5NjcyOTU7bD1sK3EmNDI5NDk2NzI5NTttPW0rdCY0Mjk0OTY3Mjk1O3I9cit1JjQyOTQ5NjcyOTV9cmV0dXJuKGIoZykrYihrKStiKGwpK2IobSkrYihyKSkudG9Mb3dlckNhc2UoKX19fSkoYyk7dmFyIE9hPWMuZGt8fE9hLGw9bmV3IE9hO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLlB0PXRoaXMuYVs5XTt0aGlzLk5rPXRoaXMuYVszXTt0aGlzLmZ1PQp0aGlzLmFbM107dGhpcy5qPXRoaXMuYVs1XX1jLmxuPWI7Yi5wcm90b3R5cGU9e090OmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5QdDp0aGlzLk1rKGEpfSxNazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTms6dGhpcy5ldShhKX0sZXU6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5mdTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmo6YX19fSkoYyk7dmFyIFBhPWMubG58fFBhLHZjPW5ldyBQYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXZjLk90KDQpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoYSxiLGQpe3RoaXMuYj1hO2EuZi5PP3RoaXMuWmE9YS5mLk8oKTp0aGlzLlphPSIiO2EuZi5TZyYmYS5mLlNnKHtwYXVzZTp0aGlzLnpkLmJpbmQodGhpcykscmVzdW1lOnRoaXMuemguYmluZCh0aGlzKSwKbXV0ZTp0aGlzLk5lLmJpbmQodGhpcyksdW5tdXRlOnRoaXMuTHUuYmluZCh0aGlzKX0pO3RoaXMuY29udGFpbmVyPXRoaXMuYi5oYjt0aGlzLnBsYXllcj10aGlzLmIuZjt0aGlzLlBiPXRoaXMuWmM9ITE7dGhpcy5Mbj0xRTM7dGhpcy5lYT1udWxsO3RoaXMuTD1iO3RoaXMueWE9e307dGhpcy52aWRlbz17fTt0aGlzLkpkPXt9O2UubGIoIm5ld0JpZ0FkSWQiKTt0aGlzLmJvPWUuYmEoMTApO3RoaXMuamY9MDt0aGlzLlhjPSJXZXJidW5nIC0gW3RpbWVdIjtkJiZkLmFkbWVzc2FnZSYmKHRoaXMuWGM9ZC5hZG1lc3NhZ2UsImZ1bmN0aW9uIj09dHlwZW9mIGQuYWRtZXNzYWdlJiYoKGE9dGhpcy5iLmYpJiZ0aGlzLmIuZi51JiYoYT10aGlzLmIuZi51KCkpLHRoaXMuWGM9ZC5hZG1lc3NhZ2UoYSkpKTtkJiYidHJ1ZSI9PVN0cmluZyhkLmFkanVzdEFkVm9sdW1lVG9Db250ZW50UGxheWVyKSYmKHRoaXMua249ZC5hZGp1c3RBZFZvbHVtZVRvQ29udGVudFBsYXllcik7dGhpcy5RZT10aGlzLklkPQohMTt0aGlzLmdoPWQmJmQubWF4V3JhcHBlckRlcHRoP3BhcnNlSW50KGQubWF4V3JhcHBlckRlcHRoKToxNTt0aGlzLmM9e307dGhpcy5WYz0hMTt0aGlzLlVoPS0xO3RoaXMuY29udHJvbHM9dGhpcy5jYXB0aW9uPXRoaXMuVWI9ITE7dGhpcy5Rbz1lLmJhKDEwKTt0aGlzLkRiPWUuYmEoMTApO3RoaXMuQmI9ZS5iYSgxMCk7dGhpcy5HaD1lLmJhKDEwKTt0aGlzLmNvbmY9e307dGhpcy50Yz10aGlzLkNiPSExO3RoaXMub2U9bnVsbDt0aGlzLlJkPXRoaXMuSmI9dGhpcy56ZT10aGlzLlZlPXRoaXMua2U9dGhpcy5qZD10aGlzLmxmPXRoaXMucGI9dGhpcy5nYz10aGlzLm9oPXRoaXMueGM9dGhpcy56dT10aGlzLnNiPSExO3RoaXMubGM9W107dGhpcy5lYz17fTt0aGlzLnJmPSExO3RoaXMuV2I9e307dGhpcy5Hcz0yMDA7dGhpcy5BZj10aGlzLmZpPXRoaXMuZmU9dGhpcy5ZZT0hMX1jLllqPWI7Yi5wcm90b3R5cGU9e3p0OmZ1bmN0aW9uKGEpe3RoaXMuY29uZj1hfSxIYTpmdW5jdGlvbihhKXt2YXIgYj0KdGhpcy5jb25mW2FdO3RoaXMuY29uZlt0aGlzLlphXSYmdGhpcy5jb25mW3RoaXMuWmFdW2FdJiYoYj10aGlzLmNvbmZbdGhpcy5aYV1bYV0pO3JldHVybiBifSxTaDpmdW5jdGlvbigpeyJwcmVyb2xsIj09ZS5TYSYmZS50cmFjaygic3RhdHNfaGRfYWN0aXZlIiwiIiwhMCk7dGhpcy5MLlFjP2UudHJhY2soImFkY2FsbCIsIjEiKTplLnRyYWNrKCJhZGNhbGwiLCIwIik7ZS50cmFjaygic3RhdHNfaGRfYWRfY2FsbCIsIiIsITApO2UudihrLmJuLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LEllOmZ1bmN0aW9uKGEsYixkLGMpe3RoaXMuc2I9ZDt2YXIgbj0hMTtjJiZjLmhvbWFkX3JlcGxhY2VfdXJsc19pbl90YWdzJiYobj0hMCk7aWYodGhpcy5MLlgpdGhpcy5qZisrLGUubGIoIm5ld1NtYWxsQWRJZCIpLHRoaXMuTC5ybygpLGM9bC5nZXRDb25maWcoKSx0aGlzLkwuS2EmJnRoaXMuTC5pc0VuYWJsZWQ/KHRoaXMuU2goKSxuZXcgVCh0aGlzLGEsdGhpcy5naCwKe2ZpcnN0Q2FsbDohMCx1c2VBZFRhZ1BhcmFtZXRlcjohMCxrZWVwVVJMOmIsYml0cmF0ZTpjLlBhLGVtcHR5OiJyZXNwb25zZS5lbXB0eSI9PWEsdnBhaWQ6dGhpcy5MLk5jLGhvbWFkX3JlcGxhY2VfdXJsc19pbl90YWdzOm4sY29udGVudFZpZGVvOntkdXJhdGlvbjp0aGlzLmIuZi5nZXREdXJhdGlvbigpLGN1cnJlbnRUaW1lOnRoaXMuYi5mLmdldEN1cnJlbnRUaW1lKCl9fSkpOmI/KHRoaXMuU2goKSxuZXcgVCh0aGlzLGEsdGhpcy5naCx7Zmlyc3RDYWxsOiEwLHZwYWlkOnRoaXMuTC5OYyx1c2VBZFRhZ1BhcmFtZXRlcjohMCxiaXRyYXRlOmMuUGEsa2VlcFVSTDohMCxob21hZF9yZXBsYWNlX3VybHNfaW5fdGFnczpuLGNvbnRlbnRWaWRlbzp7ZHVyYXRpb246dGhpcy5iLmYuZ2V0RHVyYXRpb24oKSxjdXJyZW50VGltZTp0aGlzLmIuZi5nZXRDdXJyZW50VGltZSgpfX0pKTp0aGlzLlFhKCk7ZWxzZXt2YXIgZz10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtnLkllKGEsYixkKX0sCjUwKX19LFRlOmZ1bmN0aW9uKGEpe2EuV2EmJmUudHJhY2soInN0YXRzX2hkX3dyYXBwZXJzYyIsImFkIiwhMCk7InNwaWVnZWwuZGUiIT1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpfHx0aGlzLlFlfHwic3ZtcHJldmlldyIhPWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZikuYW5jaG9yPyh0aGlzLlJkPXRoaXMuSmI9dGhpcy54Yz0hMSx0aGlzLmM9YSx0aGlzLkx0KHRoaXMuYyksdGhpcy5IZyhhKSx0aGlzLmxjPXRoaXMuemcoYSksdGhpcy5lYz17fSx0aGlzLnJmPSExLHRoaXMuSG8oKSk6dGhpcy5oZCgpfSxIZzpmdW5jdGlvbihhKXthJiYoYS5vcmlnaW4mJihhPWEub3JpZ2luKSxhLnBhcmVudCYmYS5wYXJlbnQgaW5zdGFuY2VvZiBiJiYodGhpcy5KZD10aGlzLnNxKGEpKSx0aGlzLkhnKGEucGFyZW50KSl9LHpnOmZ1bmN0aW9uKGEpe3ZhciBjPVtdO2EmJihhLm9yaWdpbiYmKGE9YS5vcmlnaW4pLCFhfHwhYS5wYXJlbnR8fGEucGFyZW50IGluc3RhbmNlb2YgYnx8KGM9CnRoaXMuemcoYS5wYXJlbnQpKSxjLnB1c2godGhpcy4kcChhKSkpO3JldHVybiBjfSwkcDpmdW5jdGlvbihhKXt2YXIgYj0iIixkPVtdO2lmKGEmJmEuVSYmYS5VLmdldEF0dHJpYnV0ZSl7Yj1hLlUuZ2V0QXR0cmlidXRlKCJpZCIpO2E9YS5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJDcmVhdGl2ZSIpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWQucHVzaChhW2NdLmdldEF0dHJpYnV0ZSgiaWQiKSk7MT09ZC5sZW5ndGgmJihkPWRbMF0pfXJldHVybnthZElEOmIsY3JlYXRpdmVJRDpkfX0sc3E6ZnVuY3Rpb24oYSl7dmFyIGI9W10sZD1bXSxjPVtdLGU9W10sZz0iIjtpZihhLlUpe2I9YS5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJbXByZXNzaW9uIik7Yz1hLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkNyZWF0aXZlIik7YS5VLmdldEF0dHJpYnV0ZSgiaWQiKSYmKGc9YS5VLmdldEF0dHJpYnV0ZSgiaWQiKSxlLnB1c2goZykpO2EuVS5nZXRBdHRyaWJ1dGUoImFkSUQiKSYmKGc9CmEuVS5nZXRBdHRyaWJ1dGUoImFkSUQiKSxlLnB1c2goZykpO2Zvcih2YXIgaz0wO2s8Yy5sZW5ndGg7aysrKWNba10uZ2V0QXR0cmlidXRlKCJpZCIpJiYoZz1jW2tdLmdldEF0dHJpYnV0ZSgiaWQiKSxlLnB1c2goZykpLGNba10uZ2V0QXR0cmlidXRlKCJhZElEIikmJihnPWNba10uZ2V0QXR0cmlidXRlKCJhZElEIiksZS5wdXNoKGcpKTtmb3Ioaz0wO2s8Yi5sZW5ndGg7aysrKWQucHVzaChhLmliKGJba10pKX1yZXR1cm57aW1wcmVzc2lvbnM6ZCxhZElkczplLGFkSWQ6Z319LG9hOmZ1bmN0aW9uKGEpe2EuV2EmJmUudHJhY2soInN0YXRzX2hkX3dyYXBwZXJzYyIsIm5vYWQiLCEwKTt2YXIgYj0wLGQ9InN0YXRzX2hkX2FkX2Vycm9yIjthJiYoYS5lcnJvciYmYS5lcnJvci5kZXRhaWwmJmEuZXJyb3IuZGV0YWlsLmNvZGUmJihiPWEuZXJyb3IuZGV0YWlsLmNvZGUpLGEubWQmJmEubWQuZXJyb3ImJmEubWQuZXJyb3IuY29kZSYmKGI9YS5tZC5lcnJvci5jb2RlKSk7c3dpdGNoKGEuZXJyb3IuY29kZSl7Y2FzZSB3Lk9jLmNvZGU6Yj09CkYuVWQuY29kZT9lLnYoay5udix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpOihlLkplKCksYj09Ri5IZi5jb2RlJiZlLnYoay5jcyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKTtlLnYoay55cCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2VtcHR5IjticmVhaztjYXNlIHcuRmYuY29kZTplLnYoay5VdSx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2Vycm9yX3Zhc3Rsb2FkZmFpbGVkIjticmVhaztjYXNlIHcuSWYuY29kZTplLnRyYWNrKCJ3cmFwcGVybGltaXQiLCIxMDYiKTtlLnYoay51dix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2Vycm9yX3dyYXBwZXJsaW1pdCI7YnJlYWs7Y2FzZSB3LlZkLmNvZGU6ZS52KGsueHYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLAp0aGlzLkIoKSx0aGlzLkMoKSk7ZD0ic3RhdHNfaGRfYWRfZXJyb3JfeG1scGFyc2UiO2JyZWFrO2Nhc2Ugdy5UZC5jb2RlOmUudihrLmRzLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSksZS50cmFjaygibm9tZWRpYSIsIjEwMiIpLGQ9InN0YXRzX2hkX2FkX2Vycm9yX25vbWVkaWEiLHRoaXMudGN8fChlLnRyYWNrKCJub21lZGlhX25vZmxhc2giLCIxMDUiKSxkPSJzdGF0c19oZF9hZF9lcnJvcl9ub21lZGlhbm9mbGFzaCIpfSJzdGF0c19oZF9hZF9lcnJvciI9PWQmJmEuZXJyb3ImJmEuZXJyb3IueGEmJihkKz0iXyIrYS5lcnJvci54YSk7ZS50cmFjayhkLCIiLCEwKTt0aGlzLlFiKGEpO3RoaXMuUWEoKX0sUWI6ZnVuY3Rpb24oYSl7dmFyIGI9OTAwO2EmJmEuZXJyb3ImJmEuZXJyb3IuY29kZSYmKGI9YS5lcnJvci5jb2RlLDkwMTxiJiYoYj05MDApKTtmb3IoYj17IltFUlJPUkNPREVdIjpifTthLk9hLmxlbmd0aDspdHJ5e3ZhciBkPWEuT2EucG9wKCk7CnRoaXMuSGUoZC51cmwsZC50eXBlLGIpfWNhdGNoKGMpe319LEx0OmZ1bmN0aW9uKGEpe3RoaXMua2U9dGhpcy56ZT10aGlzLlZlPSExO3RoaXMueWE9dGhpcy5iLkc7dmFyIGI9OTk5OTt0aGlzLmNvbmYuekluZGV4JiYoYj10aGlzLmNvbmYuekluZGV4LTEpO3RoaXMueWEuekluZGV4PWI7Yj10aGlzLmIuRjt0cnl7dmFyIGQ9dGhpcy5iLmYuZ2V0UmF3UGxheWVyKCk7aWYoZCYmZC5lbnZ2YXJzKXRyeXtiPWQuZW52dmFycygpLnZpZGVvU2xvdCx0aGlzLlllPSEwfWNhdGNoKGMpe319Y2F0Y2goZSl7fWIub3c9ImF1dG8iO3RoaXMuY29uZlsidmlkZW8uc3R5bGUucG9zaXRpb24iXSYmKGIuc3R5bGUucG9zaXRpb249dGhpcy5jb25mWyJ2aWRlby5zdHlsZS5wb3NpdGlvbiJdKTt0aGlzLmNvbmZbInZpZGVvLnN0eWxlIl0mJihiLnN0eWxlPXRoaXMuY29uZlsidmlkZW8uc3R5bGUiXSk7aWYodGhpcy5jb25mWyJ2aWRlby5hdHRyaWJ1dGVzIl0pZm9yKHZhciBnIGluIHRoaXMuY29uZlsidmlkZW8uYXR0cmlidXRlcyJdKXRoaXMuY29uZlsidmlkZW8uYXR0cmlidXRlcyJdLmhhc093blByb3BlcnR5KGcpJiYKYi5zZXRBdHRyaWJ1dGUoZyx0aGlzLmNvbmZbInZpZGVvLmF0dHJpYnV0ZXMiXVtnXSk7dGhpcy5rbiYmdGhpcy5wbGF5ZXIucWUoKSYmKGIudm9sdW1lPXRoaXMucGxheWVyLnFlKCkvMTAwKTtmb3IoO2IuZmlyc3RDaGlsZDspYi5yZW1vdmVDaGlsZChiLmZpcnN0Q2hpbGQpO2ZvcihkPTA7ZDxhLk0ubGVuZ3RoO2QrKyliLmNhblBsYXlUeXBlKGEuTVtkXS50eXBlKSYmdGhpcy5lbihiLGEuTVtkXS51cmwrIiIsYS5NW2RdLnR5cGUpO3RoaXMuWWUmJmIubG9hZCgpO2lmKHRoaXMuT2goYikpe3RoaXMuaG4oYik7YT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdP2Euc3R5bGU9dGhpcy5jb25mWyJpbm5lcldhcnBwZXIuc3R5bGUiXTooYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUud2lkdGg9IjEwMCUiLGEuc3R5bGUuaGVpZ2h0PSIxMDAlIik7dGhpcy5lYT10aGlzLnlhLmFwcGVuZENoaWxkKGEpO3RyeXt0aGlzLlllPwp0aGlzLnZpZGVvPWI6dGhpcy52aWRlbz10aGlzLmVhLmFwcGVuZENoaWxkKGIpfWNhdGNoKGspe3RoaXMudmlkZW89Yn19ZWxzZSB0aGlzLmMuTW8oKT8oYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdP2Euc3R5bGU9dGhpcy5jb25mWyJpbm5lcldhcnBwZXIuc3R5bGUiXTphLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGhpcy5lYT10aGlzLnlhLmFwcGVuZENoaWxkKGEpLHRoaXMudmlkZW89dGhpcy5lYS5hcHBlbmRDaGlsZChiKSx0aGlzLkp0KCkpOnRoaXMuRGUoKT90aGlzLkRoKCk6dGhpcy5jLm9yaWdpbi5xZyh3LlRkKX0sSnQ6ZnVuY3Rpb24oKXt0aGlzLnBiPXRoaXMuZ2M9ITE7dGhpcy5iLmYudmEmJnRoaXMuYi5mLnZhKCkmJihlLnYoay5qZyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMucGI9ITApO2UuamUoKTt0aGlzLmMmJnRoaXMuYy5vcmlnaW4mJnRoaXMuYy5vcmlnaW4uc2EmJgplLmpuKHRoaXMuYy5vcmlnaW4uc2EpO2UuZWIoInNldFVwVnBhaWQiKTt2YXIgYT10aGlzLmIuRjt0aGlzLmIuRj1DLnBvcCgpO2EucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcy5iLkYsYSk7dGhpcy5iLnBoKCk7dGhpcy5iLkpjKCk7Zm9yKGE9dGhpcy5iLkc7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7YS5wYXJlbnR8fHRoaXMuYi5KYygpO3RoaXMuZWE9dGhpcy55YT10aGlzLmIuRzt0aGlzLndmKCJ2cGFpZCIpO2lmKHRoaXMucGIpe2lmKGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYikpYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbjt0aGlzLnRyYWNrKCJtdXRlIiwhMCk7ZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJjb250ZW50IiwhMCk7ZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKX10aGlzLkg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7dGhpcy5ILnNldEF0dHJpYnV0ZSgid2lkdGgiLAoiMTAwJSIpO3RoaXMuSC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjEwMCUiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJzY3JvbGxpbmciLCJubyIpO3RoaXMuSC5zZXRBdHRyaWJ1dGUoImFsbG93IiwiYXV0b3BsYXkiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJkZWxlZ2F0ZXN0aWNreXVzZXJhY3RpdmF0aW9uIiwibWVkaWEiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJzdHlsZSIsImJvcmRlcjogMCBub25lO291dGxpbmU6IG5vbmU7Iik7dGhpcy5iLkcuYXBwZW5kQ2hpbGQodGhpcy5IKTt0aGlzLkgub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGE9ITE7dGhpcy5iLmYudmEmJnRoaXMuYi5mLnZhKCkmJihhPSEwKTt2YXIgYj10aGlzLmMudXEoKSxjPXRoaXMuYy5BLk9yaWdpbmFsQWRQYXJhbWV0ZXJzLGc9e2hvbWFkOkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobC5nZXRDb25maWcoKSkpLHZwYWlkOnt1cmw6Yi51cmwsdmlld21vZGU6Im5vcm1hbCIsZGVzaXJlZEJpdHJhdGU6Yi5kZXNpcmVkQml0cmF0ZXx8CmIuYml0cmF0ZXx8NDAwLGFkUGFyYW1ldGVyczpjLGNyZWF0aXZlRGF0YTp7QWRQYXJhbWV0ZXJzOmN9LGNvbnRlbnRwbGF5ZXI6e3dpZHRoOnBhcnNlSW50KHRoaXMuYi5HLnN0eWxlLndpZHRoKSxoZWlnaHQ6cGFyc2VJbnQodGhpcy5iLkcuc3R5bGUuaGVpZ2h0KX19LGNvbnRlbnRQbGF5ZXI6e211dGVkOmF9fTtlLm1hKHRoaXMuSCwiY29uZmlnIixnKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDEwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwiY29uZmlnIixnKX0uYmluZCh0aGlzKSwyMDApO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksNTAwKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDcwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwKImNvbmZpZyIsZyl9LmJpbmQodGhpcyksMUUzKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDEyMDApO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksMTUwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwiY29uZmlnIixnKX0uYmluZCh0aGlzKSwyRTMpO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksNUUzKX0uYmluZCh0aGlzKTthPWUuJGYoImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9ob21hZC1nbG9iYWwtY29uZmlncy5zY2huZWV2b25tb3JnZW4uY29tL2lmcmFtZS5odG1sIix0aGlzLkwpO3RoaXMuSC5zcmM9YTtlLmJlKCJ2cGFpZGV2ZW50IixmdW5jdGlvbihhKXsiQWRTaXplQ2hhbmdlIiE9YS5kYXRhLm5hbWUmJiJBZFJlbWFpbmluZ1RpbWVDaGFuZ2UiIT0KWyJkYXRhIl0ubmFtZSYmdGhpcy5iLlRiKCEwKTtpZihhJiZhLmRhdGEmJmEuZGF0YS5uYW1lKXt0aGlzLmxjPWEuZGF0YS5vcmlnaW5hbGV2ZW50LmFkSURzOyJBZEVycm9yIj09YS5kYXRhLm5hbWUmJnRoaXMuYnYoYSk7aWYoIkFkSW1wcmVzc2lvbiI9PWEuZGF0YS5uYW1lJiYodGhpcy5jdigpLHRoaXMuYi5UYighMCksIXRoaXMuSmIpKXt2YXIgYj0yRTMsYz01MDt0aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uJiYodGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi5wZXJjZW50JiYoYz10aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnBlcmNlbnQpLHRoaXMuY29uZi52aWV3YWJsZUltcHJlc3Npb24udGltZU1TJiYoYj10aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnRpbWVNUykpO3RoaXMuSmI9e2VsOnRoaXMuSCxjYjpmdW5jdGlvbigpe3RoaXMuUmQ9ITA7ZS52KGsuYmksdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt0aGlzLnRyYWNrKCJ2aWV3YWJsZSIpfS5iaW5kKHRoaXMpLAp0aW1lTVM6YixwZXJjZW50OmMsc3RhcnRUaW1lOiExfTtlLkNlKHRoaXMuSmIpfSJBZFN0YXJ0ZWQiPT1hLmRhdGEubmFtZSYmKHRoaXMuYi5UYighMCksdGhpcy5ndigpKTsiQWRWaWRlb1N0YXJ0Ij09YS5kYXRhLm5hbWUmJih0aGlzLmIuVGIoITApLHRoaXMua3YoKSk7IkFkVmlkZW9GaXJzdFF1YXJ0aWxlIj09YS5kYXRhLm5hbWUmJnRoaXMuaXYoKTsiQWRWaWRlb01pZHBvaW50Ij09YS5kYXRhLm5hbWUmJnRoaXMuanYoKTsiQWRWaWRlb1RoaXJkUXVhcnRpbGUiPT1hLmRhdGEubmFtZSYmdGhpcy5sdigpOyJBZFZpZGVvQ29tcGxldGUiPT1hLmRhdGEubmFtZSYmdGhpcy5odigpOyJBZFN0b3BwZWQiPT1hLmRhdGEubmFtZSYmdGhpcy5kaSgpO2lmKCJBZENsaWNrVGhydSI9PWEuZGF0YS5uYW1lKXt2YXIgZz1hLmRhdGEuY2xpY2tUaHJ1VGFyZ2V0O2d8fChnPXRoaXMuYy5PYik7aWYoIWcpcmV0dXJuO3RoaXMudHJhY2soImNsaWNrdHJhY2tpbmciKTtlLnYoay5pZyx0aGlzLmMuQSwKdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPSJfdG9wIjt0cnl7dGhpcy5MLiRjJiYoYT0iX2JsYW5rIik7dmFyIGI9d2luZG93Lm9wZW4oIiIsYSk7Yi5kb2N1bWVudC5ib2R5LmlubmVySFRNTD0iPGRpdj48L2Rpdj4iO2IuZG9jdW1lbnQubG9jYXRpb24uaHJlZj1nfWNhdGNoKGQpe3dpbmRvdy5vcGVuKGcsYSl9fS5iaW5kKHRoaXMpLDUwMCl9IkFkU2tpcHBlZCI9PWEuZGF0YS5uYW1lJiZ0aGlzLmZ2KCk7IkFkUmVtYWluaW5nVGltZUNoYW5nZSI9PWEuZGF0YS5uYW1lJiZlLnYoay4kZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpOyJBZFBhdXNlZCI9PWEuZGF0YS5uYW1lJiZ0aGlzLmR2KCk7IkFkUGxheWluZyI9PWEuZGF0YS5uYW1lJiYodGhpcy5maSYmKHRoaXMuQWY9ITEsdGhpcy5ZYigpKSx0aGlzLmV2KCkpOyJBZFZvbHVtZUNoYW5nZSI9PWEuZGF0YS5uYW1lJiYoYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkJiKSwKMD09YS5kYXRhLm9yaWdpbmFsZXZlbnQudm9sdW1lPyh0aGlzLnBiPSEwLGImJihiLmlubmVySFRNTD10aGlzLmNvbmYudW5tdXRlQnV0dG9uKSx0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJ1c2VyIiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSk6KHRoaXMucGI9ITEsYiYmKGIuaW5uZXJIVE1MPXRoaXMuY29uZi5tdXRlQnV0dG9uKSx0aGlzLnRyYWNrKCJ1bm11dGUiLCEwKSxlLnRyYWNrKCJzdGF0c19oZF91bm11dGVkIiwidXNlciIsITApLGUudihrLnRmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpLGUudihrLiRkLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpfX0uYmluZCh0aGlzKSk7ZS5iZSgidnBhaWRjb250aW51ZWNvbnRlbnQiLGZ1bmN0aW9uKCl7dGhpcy5RYSgpfS5iaW5kKHRoaXMpKTtlLmJlKCJ2cGFpZGVycm9zIixmdW5jdGlvbigpe3RoaXMuUWEoKX0uYmluZCh0aGlzKSk7CnRoaXMuYi5ZZihmdW5jdGlvbihhKXtlLm1hKHRoaXMuSCwicmVzaXplIixhKX0uYmluZCh0aGlzKSl9LGR2OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy50cmFjaygicGF1c2UiKTtlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2EmJihhLmlubmVySFRNTD10aGlzLmNvbmYucGxheUJ1dHRvbik7dGhpcy5nYz0hMH0sZXY6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRiKTthJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uKTt0aGlzLnRyYWNrKCJyZXN1bWUiLCEwKTtlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuZ2M9ITF9LGd2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygiY3JlYXRpdmVWaWV3Iik7ZS52KGsuVWYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKX0sCmZ2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygic2tpcCIpO2UudihrLlRmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LGN2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygiaW1wcmVzc2lvbiIpO2UuZWIoImltcHJlc3Npb24iKTtlLnYoay5QZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxrdjpmdW5jdGlvbigpe3RoaXMudHJhY2soInN0YXJ0Iik7ZS5lYigic3RhcnQiKTtlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxpdjpmdW5jdGlvbigpe3RoaXMudHJhY2soImZpcnN0UXVhcnRpbGUiKTt0aGlzLnhjPSEwO2UuZWIoImZpcnN0UXVhcnRpbGUiKTtlLnYoay5OZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxqdjpmdW5jdGlvbigpe3RoaXMudHJhY2soIm1pZHBvaW50Iik7ZS5lYigibWlkcG9pbnQiKTtlLnYoay5SZix0aGlzLmMuQSx0aGlzLmIuZi51KCksCnRoaXMuQigpLHRoaXMuQygpKX0sbHY6ZnVuY3Rpb24oKXt0aGlzLnRyYWNrKCJ0aGlyZFF1YXJ0aWxlIik7ZS5lYigidGhpcmRRdWFydGlsZSIpO2UudihrLlZmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LGh2OmZ1bmN0aW9uKCl7dGhpcy5QZCgpO2UuZWIoImNvbXBsZXRlIil9LGRpOmZ1bmN0aW9uKGEpe2lmKHRoaXMuSCYmdGhpcy5ILnBhcmVudE5vZGUmJnRoaXMuSC5wYXJlbnROb2RlLnBhcmVudE5vZGUpe2UuZWIoImFkc3RvcHBlZCIpO3ZhciBiPXRoaXMuSC5wYXJlbnROb2RlO3RoaXMuSC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuSCk7Yi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpO2UuamUoKTt0aGlzLkg9ITE7dGhpcy5RYShhKX19LGJ2OmZ1bmN0aW9uKGEpe3ZhciBiPWEubWVzc2FnZXx8IiIsZD0vXGQrL2csYz1bXTshYiYmYS5kYXRhJiZhLmRhdGEub3JpZ2luYWxldmVudCYmYS5kYXRhLm9yaWdpbmFsZXZlbnQubXNnJiYoYj0KYS5kYXRhLm9yaWdpbmFsZXZlbnQubXNnLChjPWIubWF0Y2goZCkpP2Muam9pbiYmKGI9Yy5qb2luKCItIikpOmI9Yi5zdWJzdHJpbmcoMCwyMCkpO2UudHJhY2soInN0YXRzX3ZwX2Vycm9yaGFuZGxlciIsYiwhMCk7ZS5lYigiZXJyIixiKTtlLnYoay5tdix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuZGkoITApfSxlbjpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoYSxiKXtpZihiLkthJiZiLmlzRW5hYmxlZCYmIWIuQ2MoKSl7dmFyIGQ9Yi5sYShhKTtyZXR1cm4gZC5wcm90b2NvbCsiOi8vIitkLmhvc3R9cmV0dXJuIGF9aWYoYS5hcHBlbmRDaGlsZCl7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic291cmNlIik7Yy5zcmM9ZChiLHRoaXMuTCk7Yy5vbmVycm9yPXRoaXMuWXUuYmluZCh0aGlzKTthLmFwcGVuZENoaWxkKGMpfWVsc2UgYS5zZXRBdHRyaWJ1dGUoInNyYyIsZChiLHRoaXMuTCkpfSxPaDpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRFbGVtZW50c0J5VGFnTmFtZT8KMDxhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzb3VyY2UiKS5sZW5ndGg6ITB9LGhuOmZ1bmN0aW9uKGEpe2EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZHN0YXJ0Iix0aGlzLmFpLmJpbmQodGhpcykpO2EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkbWV0YWRhdGEiLHRoaXMueGYuYmluZCh0aGlzKSk7YS5hZGRFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIix0aGlzLnlmLmJpbmQodGhpcykpO2EuYWRkRXZlbnRMaXN0ZW5lcigiZW5kZWQiLHRoaXMuUGQuYmluZCh0aGlzKSk7YS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5RZC5iaW5kKHRoaXMpKX0sRWQ6ZnVuY3Rpb24oYSl7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2Fkc3RhcnQiLHRoaXMuYWkuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsdGhpcy54Zi5iaW5kKHRoaXMpKTthLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLHRoaXMueWYuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlbmRlZCIsCnRoaXMuUGQuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5RZC5iaW5kKHRoaXMpKX0sYWk6ZnVuY3Rpb24oYSl7dGhpcy5QYnx8KHRoaXMudmlkZW8uY29udHJvbHM9ITEsd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLlBifHx0aGlzLnhmKGEpfS5iaW5kKHRoaXMpLHRoaXMuTG4pKX0seGY6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWmMmJnRoaXMuT2godGhpcy52aWRlbykmJiF0aGlzLkNiJiYhdGhpcy5QYil7dGhpcy5aYz0hMDt0cnl7aWYoIWUuVGEoKSYmYS50YXJnZXQmJjU+PWEudGFyZ2V0LmR1cmF0aW9uJiY1PE1hdGguYWJzKHRoaXMuYy5kdXJhdGlvbi1hLnRhcmdldC5kdXJhdGlvbikpe3RoaXMuQ2J8fCh0aGlzLkNiPSEwLHRoaXMuRWQodGhpcy52aWRlbyksZS50cmFjaygic3RhdHNfaGRfbm9vcHZpZGVvIiwiIiwhMCksdGhpcy5MLnBnfHx0aGlzLkwua2EoInZpZGVvLW5vb3AiKSk7dGhpcy5RYSgpO3JldHVybn19Y2F0Y2goYil7ZS50cmFjaygic3RhdHNfaGRfbm9vcHZpZGVvX2ZhaWwiLAoiIiwhMCl9dGhpcy5YdSgpO3RoaXMudmlkZW8uY29udHJvbHM9ITE7dGhpcy5iLkpjKCk7dGhpcy5aaCgpO3RoaXMud2YoKTt0aGlzLmFnKCk7dGhpcy5iLnBoKCk7dGhpcy52aWRlby5wbGF5JiZ0aGlzLmtmKCl9fSxrZjpmdW5jdGlvbigpe2lmKCF0aGlzLmpkKWlmKHRoaXMuY29uZi5wcmVBZElmcmFtZVVybCl7dmFyIGE9dGhpcy5jb25mLnByZUFkSWZyYW1lVXJsOyJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoYT1hKGUuU2EpKTtpZigic3RyaW5nIj09dHlwZW9mIGEmJmEpe3RoaXMuc2Q9W107Zm9yKHZhciBiPXRoaXMuYi5HLGQ9MDtkPGIuY2hpbGRyZW4ubGVuZ3RoO2QrKyl0aGlzLnNkLnB1c2goYi5jaGlsZHJlbltkXSksYi5jaGlsZHJlbltkXS5zdHlsZS5kaXNwbGF5PSJub25lIjtkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9KTtkLnNldEF0dHJpYnV0ZSgic3JjIiwKYSk7ZC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Quc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7ZC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAwIG5vbmU7b3V0bGluZTogbm9uZTsiKTtiLmFwcGVuZENoaWxkKGQpO3ZhciBjPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihhKXtpZigiY29udGludWUiPT1hLmRhdGEpe3RoaXMuVGMoKTthPU1hdGgucm91bmQoKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWMpLzFFMyk7dmFyIGI9IiI7MTxhJiYoYj0iZ3QxIik7NTxhJiYoYj0iZ3Q1Iik7MTA8YSYmKGI9Imd0MTAiKTsyMDxhJiYoYj0iZ3QyMCIpO2UudHJhY2soInN0YXRzX2hkX3ByZUlmcmFtZUNsb3NlZCIsYiwhMCl9fS5iaW5kKHRoaXMpKTtlLnRyYWNrKCJzdGF0c19oZF9wcmVJZnJhbWVPcGVuZWQiLCIiLCEwKX1lbHNlIHRoaXMuVGMoKX1lbHNlIHRoaXMuVGMoKX0sVGM6ZnVuY3Rpb24oYSl7aWYodGhpcy5zZClmb3IodmFyIGI9CjA7Yjx0aGlzLnNkLmxlbmd0aDtiKyspdGhpcy5zZFtiXS5zdHlsZS5kaXNwbGF5PSJibG9jayI7aWYoKGI9dGhpcy52aWRlby5wbGF5KCkpJiZiWyJjYXRjaCJdKWJbImNhdGNoIl0oZnVuY3Rpb24oYil7dGhpcy5qZHx8KGE/KCJzdHJpbmciIT10eXBlb2YgYiYmYiYmYi5tZXNzYWdlJiYoYj1iLm1lc3NhZ2UpLHRoaXMuUWEoKSxlLnRyYWNrKCJzdGF0c19oZF9wbGF5UHJvbWlzZUZhaWxlZCIsYiwhMCkpOih0aGlzLk5lKCEwKSx0aGlzLlRjKCEwKSkpfS5iaW5kKHRoaXMpKTtiLnRoZW4oZnVuY3Rpb24oKXt0aGlzLnplJiZlLnRyYWNrKCJzdGF0c19oZF9wbGF5UHJvbWlzZVJlc29sdmVkQWZ0ZXJJbXByZXNzaW9uIiwiIiwhMCk7dGhpcy5WZT0hMH0uYmluZCh0aGlzKSk7ZGE/KHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLlhiLmJpbmQodGhpcykpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuWGIuYmluZCh0aGlzKSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLAp0aGlzLlhiLmJpbmQodGhpcykpKTpLPWZ1bmN0aW9uKCl7dGhpcy5WY3x8KHRoaXMudmlkZW8ubG9hZCgpLHRoaXMua2YoKSl9LmJpbmQodGhpcyk7dGhpcy5zZSgpLkNoKHRoaXMpfSxQZDpmdW5jdGlvbigpe3RoaXMuTC52YyYmIXRoaXMuQ2ImJmUudHJhY2soInF1YXJ0aWxlIiwiY29tcGxldGUiLCEwKTt0aGlzLnRyYWNrKCJjb21wbGV0ZSIpO2UudihrLiRtLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSk7dGhpcy5RYSgpfSxRYTpmdW5jdGlvbihhKXtpZighdGhpcy5rZSlpZih0aGlzLmtlPSEwLHRoaXMuUmR8fChlLnYoay5mcyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMudHJhY2soIm5vdHZpZXdhYmxlIikpLHRoaXMuYy5yYnx8dGhpcy5jLmpjKXtlLmxiKCJuZXdTbWFsbEFkSWQiKTt0aGlzLmpmKys7dGhpcy5QYj10aGlzLlpjPSExO3RyeXt0aGlzLkVkKHRoaXMudmlkZW8pfWNhdGNoKGIpe310cnl7dGhpcy5lYS5yZW1vdmVDaGlsZCh0aGlzLnZpZGVvKX1jYXRjaChkKXt9dHJ5e3RoaXMueWEucmVtb3ZlQ2hpbGQodGhpcy5lYSl9Y2F0Y2goYyl7fXRoaXMuY2FwdGlvbj0KdGhpcy5jb250cm9scz1udWxsO3RoaXMuSWQ9ITE7dHJ5e3RoaXMuYi5XaCgpfWNhdGNoKGcpe310aGlzLmxmPSEwO3RoaXMuYi53ZSgpO3RoaXMuVWI9ITE7dGhpcy5zZSgpLnloKCk7dGhpcy5jLnJiJiZ0aGlzLmMub3JpZ2luLk9lKCk7dGhpcy5jLmpjJiYoYT90aGlzLmMub3JpZ2luLmtoKCk6dGhpcy5oZCgpKX1lbHNlIHRoaXMuaGQoKX0sWXU6ZnVuY3Rpb24oYSl7YS50YXJnZXQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChhLnRhcmdldCk7dGhpcy52aWRlby5uZXR3b3JrU3RhdGUmJnRoaXMudmlkZW8ubmV0d29ya1N0YXRlPT10aGlzLnZpZGVvLk5FVFdPUktfTk9fU09VUkNFJiYodGhpcy5FZCh0aGlzLnZpZGVvKSx0aGlzLkRlKCk/dGhpcy5EaCgpOnRoaXMuUWQoYSkpfSxRZDpmdW5jdGlvbihhKXt0aGlzLlBiPSEwO2EmJmEudGFyZ2V0JiZhLnRhcmdldC5lcnJvciYmYS50YXJnZXQuZXJyb3IuY29kZXx8dGhpcy52aWRlby5uZXR3b3JrU3RhdGU9PXRoaXMudmlkZW8uTkVUV09SS19OT19TT1VSQ0UmJgoodGhpcy5EZSgpP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50Y3x8dGhpcy5MLmVnKCl9LmJpbmQodGhpcyksMUUzKTp0aGlzLkwuZWcoKSk7dGhpcy5jLm9yaWdpbi5xZyh3LlRkKX0seWY6ZnVuY3Rpb24oKXtpZih0aGlzLnp1KXRoaXMuUWEoKTtlbHNle3RoaXMuVWI9ITA7dGhpcy5iLmYuVmEmJiF0aGlzLmxmJiZ0aGlzLmIuZi5WYSgpJiZlLnYoay5mZCx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3ZhciBhPU1hdGguZmxvb3IodGhpcy52aWRlby5jdXJyZW50VGltZSk7dGhpcy5DdShhKTtpZighdGhpcy5KYil7dmFyIGI9MkUzLGQ9NTA7dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbiYmKHRoaXMuY29uZi52aWV3YWJsZUltcHJlc3Npb24ucGVyY2VudCYmKGQ9dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi5wZXJjZW50KSx0aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnRpbWVNUyYmKGI9dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi50aW1lTVMpKTsKdGhpcy5KYj17ZWw6dGhpcy52aWRlbyxjYjpmdW5jdGlvbigpe3RoaXMuUmQ9ITA7ZS52KGsuYmksdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt0aGlzLnRyYWNrKCJ2aWV3YWJsZSIpfS5iaW5kKHRoaXMpLHRpbWVNUzpiLHBlcmNlbnQ6ZCxzdGFydFRpbWU6ITF9O2UuQ2UodGhpcy5KYil9ZD0iIjt0aGlzLmMuaGYmJihiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuR2gpKSYmKGQ9dGhpcy5jLmhmLWEsMDxkP2Q9dGhpcy5jb25mLnNraXBhYmxlQnV0dG9uLnJlcGxhY2UoIlt0aW1lXSIsZCk6KGQ9dGhpcy5jb25mLnNraXBCdXR0b24ucmVwbGFjZSgiW3RpbWVdIixkKSx0aGlzLklkfHwodGhpcy5JZD0hMCxiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3RoaXMudHJhY2soInNraXAiKTtlLnYoay5UZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuYy5yYj8odGhpcy5QYj10aGlzLlpjPSExLAp0aGlzLkVkKHRoaXMudmlkZW8pLHRoaXMuZWEucmVtb3ZlQ2hpbGQodGhpcy52aWRlbyksdGhpcy55YS5yZW1vdmVDaGlsZCh0aGlzLmVhKSx0aGlzLmNhcHRpb249dGhpcy5jb250cm9scz1udWxsLHRoaXMuSWQ9ITEsdGhpcy5iLldoKCksdGhpcy5jLm9yaWdpbi5PZSgpKTp0aGlzLlFhKCl9LmJpbmQodGhpcykpKSksYi5pbm5lckhUTUw9ZCk7dGhpcy5jYXB0aW9uJiYodGhpcy5jYXB0aW9uLmlubmVySFRNTD10aGlzLlhjLnJlcGxhY2UoIlt0aW1lXSIsZS55Zyh0aGlzLmMuZHVyYXRpb24tYSkpKTt0aGlzLlZjPSEwO3RoaXMudmlkZW8uY29udHJvbHM9ITF9fSxEaDpmdW5jdGlvbigpe3RoaXMudGM9ITA7dGhpcy55YT10aGlzLmIuRzt0aGlzLnlhLmlubmVySFRNTD0iIjt2YXIgYT05OTk5O3RoaXMuY29uZi56SW5kZXgmJihhPXRoaXMuY29uZi56SW5kZXgtMSk7dGhpcy55YS56SW5kZXg9YTthPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9iamVjdCIpO2Euc2V0QXR0cmlidXRlKCJkYXRhIiwKImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9ob21hZC1nbG9iYWwtY29uZmlncy5zY2huZWV2b25tb3JnZW4uY29tL2hvbWFkanNmbGFzaGRpc3BsYXkuc3dmIik7YS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Euc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7YS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpO2Euc2V0QXR0cmlidXRlKCJpZCIsImRpc3BtYWluIik7YS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJkaXNwbWFpbiIpO2Euc2V0QXR0cmlidXRlKCJzdHlsZSIsInZpc2liaWxpdHk6IHZpc2libGUiKTthLnNldEF0dHJpYnV0ZSgiRmxhc2hWYXJzIiwiZGF0YT0iK3RoaXMubnEoKSk7YS5pbm5lckhUTUw9JzxwYXJhbSBuYW1lPSJhbGxvd3NjcmlwdGFjY2VzcyIgdmFsdWU9ImFsd2F5cyI+PHBhcmFtIG5hbWU9ImFsbG93RnVsbFNjcmVlbiIgdmFsdWU9InRydWUiPjxwYXJhbSBuYW1lPSJiZ0NvbG9yIiB2YWx1ZT0iIzAwMDAwMCI+PHBhcmFtIG5hbWU9Im9wYXF1ZSIgdmFsdWU9ImRpcmVjdCI+JzsKdGhpcy5iLkY9YTt2YXIgYj10aGlzLmIuRixkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RoaXMuY29uZlsiaW5uZXJXYXJwcGVyLnN0eWxlIl0/ZC5zdHlsZT10aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdOmQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIjt0aGlzLmVhPXRoaXMueWEuYXBwZW5kQ2hpbGQoZCk7dGhpcy5iLkpjKCk7dGhpcy52aWRlbz10aGlzLmVhLmFwcGVuZENoaWxkKGIpO2I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO2Iuc3R5bGUudG9wPSIwcHgiO2Iuc3R5bGUud2lkdGg9dGhpcy55YS5vZmZzZXRXaWR0aCsicHgiO2Iuc3R5bGUuaGVpZ2h0PXRoaXMueWEub2Zmc2V0SGVpZ2h0KyJweCI7Yi5zdHlsZS5jdXJzb3I9InBvaW50ZXIiO2Iub25jbGljaz10aGlzLiRoLmJpbmQodGhpcyk7dGhpcy5lYS5hcHBlbmRDaGlsZChiKTt0aGlzLlpoKCk7dGhpcy53ZigpO3RoaXMub2U9c2V0SW50ZXJ2YWwodGhpcy5wby5iaW5kKHRoaXMpLAoxMDApO3JldHVybiBhfSxucTpmdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxiPXt9LGQ9MDtkPHRoaXMuYy5NLmxlbmd0aDtkKyspe3ZhciBjPWI9dGhpcy5jLk1bZF0sZTtlPWIudXJsO3ZhciBnPXRoaXMuTDtnLkthJiZnLmlzRW5hYmxlZCYmIWcuQ2MoKSYmKGU9Zy5sYShlKSxlPWUucHJvdG9jb2wrIjovLyIrZS5ob3N0KTtjLnVybD1lO2EucHVzaChiKX1yZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHttZWRpYWZpbGVzOmF9KSl9LHBvOmZ1bmN0aW9uKCl7dHJ5e3ZhciBhPXRoaXMudmlkZW8uZ2V0Rmxhc2hEaXNwbGF5U3RhdHVzKCk7dGhpcy52aWRlby5wYXVzZWQ9YS5wYXVzZWQ7YS50aW1lPj10aGlzLmMuZHVyYXRpb24/KGNsZWFySW50ZXJ2YWwodGhpcy5vZSksdGhpcy5QZCgpKTooMDxhLnRpbWUmJih0aGlzLnZpZGVvLmN1cnJlbnRUaW1lPWEudGltZSx0aGlzLnlmKCkpLCJlcnJvciI9PWEuc3RhdHVzJiYoY2xlYXJJbnRlcnZhbCh0aGlzLm9lKSwKdGhpcy5RZCgpKSx0aGlzLnZpZGVvLm11dGVkP3RoaXMudmlkZW8ubXV0ZSgpOnRoaXMudmlkZW8udW5tdXRlKCkpfWNhdGNoKGIpe319LFRoOmZ1bmN0aW9uKCl7dGhpcy5vaHx8KHRoaXMub2g9ITAsdGhpcy54Y3x8ZS50cmFjaygic3RhdHNfaGRfY2xvc2VkQmVmb3JlMXN0UXVhcnRpbGUiLCIiLCEwKSl9LEN1OmZ1bmN0aW9uKGEpe2UudihrLiRkLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSk7YT09dGhpcy5VaHx8dGhpcy5DYnx8KDA9PWEmJih0aGlzLnNiJiYod2luZG93LmNsZWFyVGltZW91dCh0aGlzLnNiKSx0aGlzLnNiPSExKSx0aGlzLlZlfHwoZS50cmFjaygic3RhdHNfaGRfaW1wcmVzc2lvbldpdGhPdXRSZXNvbHZlZFByb21pc2UiLCIiLCEwKSx0aGlzLnplPSEwKSx0aGlzLnRyYWNrKCJpbXByZXNzaW9uIiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsZnVuY3Rpb24oKXt0aGlzLlRoKCl9LmJpbmQodGhpcykpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLApmdW5jdGlvbigpe3RoaXMuVGgoKX0uYmluZCh0aGlzKSksdGhpcy50YyYmZS50cmFjaygic3RhdHNfaGRfYWRfaW1wcmVzc2lvbl9mbGFzaCIsIiIsITApLHRoaXMuQ2J8fGUudHJhY2soInN0YXRzX2hkX2FkX2ltcHJlc3Npb24iLCIiLCEwKSxlLlRhKCkmJmUudHJhY2soInN0YXRzX2hkX2FkX2ltcHJlc3Npb25fbW9iaWxlIiwiIiwhMCksdGhpcy50cmFjaygiY3JlYXRpdmVWaWV3IiksdGhpcy50cmFjaygic3RhcnQiKSxlLnYoay5QZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLGUudihrLlVmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSksdGhpcy50YyYmZS50cmFjaygicGxheWVkV2l0aEZsYXNoIiwiMTAzIikpLGE9PU1hdGguZmxvb3IodGhpcy5jLmR1cmF0aW9uLzQpJiYodGhpcy5MLnZjJiYoZS50cmFjaygicXVhcnRpbGUiLCJmaXJzdFF1YXJ0aWxlIiwhMCksdGhpcy54Yz0hMCksdGhpcy50cmFjaygiZmlyc3RRdWFydGlsZSIpLAplLnYoay5OZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKSxhPT1NYXRoLmZsb29yKHRoaXMuYy5kdXJhdGlvbi8yKSYmKHRoaXMuTC52YyYmZS50cmFjaygicXVhcnRpbGUiLCJtaWRwb2ludCIsITApLHRoaXMudHJhY2soIm1pZHBvaW50IiksZS52KGsuUmYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSksYT09TWF0aC5mbG9vcigzKnRoaXMuYy5kdXJhdGlvbi80KSYmKHRoaXMuTC52YyYmZS50cmFjaygicXVhcnRpbGUiLCJ0aGlyZFF1YXJ0aWxlIiwhMCksdGhpcy50cmFjaygidGhpcmRRdWFydGlsZSIpLGUudihrLlZmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpLHRoaXMuVWg9YSl9LHRyYWNrOmZ1bmN0aW9uKGEsYil7aWYoIXRoaXMuQ2Ipe3RyeXtpZih0aGlzLmVjW2FdPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHRoaXMuZWMuaW1wcmVzc2lvbiYmdGhpcy5lYy5jb21wbGV0ZSYmIXRoaXMucmYpe3RoaXMucmY9CiEwO3ZhciBkPXRoaXMuZWMuY29tcGxldGUtdGhpcy5lYy5pbXByZXNzaW9uLGM9InN0YXRzX2hkX3RpbWVkaWZmIjt0aGlzLkgmJihjKz0idnBhaWQiKTs1RTM+ZCYmKDEwPmQmJihkPTEwKSwwPmQmJihkPSJuZWdhdGl2ZSIpLGUudHJhY2soYyxkLCEwKSl9fWNhdGNoKGcpe31pZigibXV0ZSI9PWF8fCJ1bm11dGUiPT1hfHwicGF1c2UiPT1hfHwicmVzdW1lIj09YSl7aWYodGhpc1thKyJIYXNCZWVuVHJhY2tlZCJdKXJldHVybjt0aGlzW2ErIkhhc0JlZW5UcmFja2VkIl09ITB9ZD1bXTt0cnl7ZD10aGlzLnRxKHRoaXMuYy5PYSxhKX1jYXRjaChsKXtkPVtdfWZvcig7ZC5sZW5ndGg7KXRyeXt2YXIgbT1kLnBvcCgpOyJpbXByZXNzaW9uIj09YSYmKHRoaXMuZmU9ITApOyJpbXByZXNzaW9uIj09YSYmdGhpcy5KZC5pbXByZXNzaW9ucyYmZS5rcihtLnVybCx0aGlzLkpkLmltcHJlc3Npb25zKT90aGlzLkhlKG0udXJsLG0udHlwZSx7fSxmdW5jdGlvbihhKXt0cnl7dmFyIGI9YS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1VcmwiKTsKZS52KGsuYW4sdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHthZElkOnRoaXMuSmQuYWRJZCxpbXByZXNzaW9uVVJMOmJ9LHRoaXMuQygpKX1jYXRjaChkKXt9fS5iaW5kKHRoaXMpKTp0aGlzLkhlKG0udXJsLG0udHlwZSl9Y2F0Y2gocSl7fWlmKCFiKXRyeXt0aGlzLmMuT2E9dGhpcy5Ubyh0aGlzLmMuT2EsYSl9Y2F0Y2gocil7fX19LEhlOmZ1bmN0aW9uKGEsYixkLGMsZSl7YSYmInN0cmluZyI9PXR5cGVvZiBhJiZhLmxlbmd0aCYmKGI9dGhpcy5MLnphKGEpLGQmJmIuZG4oZCksY3x8KGM9dGhpcy5vZyksZXx8KGU9dGhpcy5vZyksdGhpcy5mbihhKSx0aGlzLkwuTGEoYixmdW5jdGlvbigpe3RoaXMueGgoYSk7YygpfS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7dGhpcy54aChhKTtlKCl9LmJpbmQodGhpcyksITEsITApKX0sZm46ZnVuY3Rpb24oYSl7dGhpcy5XYlthXT0ib3BlbiJ9LHhoOmZ1bmN0aW9uKGEpe3RoaXMuV2JbYV09ImNsb3NlZCJ9LEhvOmZ1bmN0aW9uKCl7dGhpcy5XYj0Ke319LCR0OmZ1bmN0aW9uKCl7dmFyIGE9MCxiO2ZvcihiIGluIHRoaXMuV2IpdGhpcy5XYi5oYXNPd25Qcm9wZXJ0eShiKSYmIm9wZW4iPT10aGlzLldiW2JdJiZhKys7cmV0dXJuIGF9LHRxOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhLnR5cGU9PWJ9KX0sVG86ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEudHlwZSE9PWJ9KX0sWHU6ZnVuY3Rpb24oKXt0aGlzLnZpZGVvLnN0eWxlJiYodGhpcy52aWRlby5zdHlsZS5jdXJzb3I9InBvaW50ZXIiLHRoaXMudmlkZW8ub25jbGljaz10aGlzLiRoLmJpbmQodGhpcykpfSwkaDpmdW5jdGlvbigpe2UuVGEoKSYmIm5vbmUiPT09dGhpcy5jb250cm9scy5zdHlsZS5kaXNwbGF5P3RoaXMuWWIoKTp0aGlzLmMuT2ImJihlLnYoay5pZyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMudHJhY2soImNsaWNrdHJhY2tpbmciKSwKIXRoaXMueGMmJmUuVGEoKSYmZS50cmFjaygic3RhdHNfaGRfY2xpY2t0aHJvdWdoQmVmb3JlMXN0UXVhcnRpbGUiLGUuYXEoKSwhMCksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT0iX3RvcCI7dGhpcy5MLiRjJiYoYT0iX2JsYW5rIik7dHJ5e3ZhciBiPXdpbmRvdy5vcGVuKCIiLGEpO2IuZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9IjxkaXY+PC9kaXY+IjtiLmRvY3VtZW50LmxvY2F0aW9uLmhyZWY9dGhpcy5jLk9ifWNhdGNoKGQpe3dpbmRvdy5vcGVuKHRoaXMuYy5PYixhKX19LmJpbmQodGhpcyksNTAwKSl9LFpoOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY2FwdGlvbil7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5jb25mWyJjYXB0aW9uLnN0eWxlIl0/YS5zdHlsZT10aGlzLmNvbmZbImNhcHRpb24uc3R5bGUiXTooYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUud2lkdGg9IjEwMCUiLGEuc3R5bGUuYmFja2dyb3VuZD0ibGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLDAsMCwwLjA1KSAwJSxyZ2JhKDAsMCwwLDAuMjUpIDEwMCUpIiwKYS5zdHlsZS5wYWRkaW5nPSIycHgiLGEuc3R5bGUuZm9udEZhbWlseT0iQXJpYWwsIFZlcmRhbmEiLGEuc3R5bGUuZm9udFNpemU9IjlweCIsYS5zdHlsZS5jb2xvcj0iI2ZmZmZmZiIsYS5zdHlsZS50ZXh0QWxpZ249ImNlbnRlciIsYS5zdHlsZS5ib3R0b209IjBweCIsYS5zdHlsZS5ib3hTaXppbmc9ImJvcmRlci1ib3giKTthLmlubmVySFRNTD10aGlzLlhjLnJlcGxhY2UoIlt0aW1lXSIsZS55ZygwKSk7dmFyIGI9dGhpcy5jb25mWyJjYXB0aW9uLmR1cmF0aW9uIl07dGhpcy5MLmFkJiYoYj10aGlzLkwuYWQpO2ImJndpbmRvdy5zZXRUaW1lb3V0KHRoaXMueGIuYmluZCh0aGlzKSwxRTMqYik7dGhpcy5jYXB0aW9uPXRoaXMuZWEuYXBwZW5kQ2hpbGQoYSl9fSx4YjpmdW5jdGlvbigpeyh0aGlzLmNvbmZbImNhcHRpb24uZHVyYXRpb24iXXx8dGhpcy5MLmFkKSYmdGhpcy5jYXB0aW9uJiZ0aGlzLmNhcHRpb24uc3R5bGUmJih0aGlzLmNhcHRpb24uc3R5bGUuZGlzcGxheT0ibm9uZSIpfSwKR2Q6ZnVuY3Rpb24oKXsodGhpcy5jb25mWyJjYXB0aW9uLmR1cmF0aW9uIl18fHRoaXMuTC5hZCkmJnRoaXMuY2FwdGlvbiYmdGhpcy5jYXB0aW9uLnN0eWxlJiYodGhpcy5jYXB0aW9uLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9LHdmOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmNvbnRyb2xzKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuaWQ9dGhpcy5Rbzt0aGlzLmNvbmZbImNvbnRyb2xzLnN0eWxlIl0/ZC5zdHlsZT10aGlzLmNvbmZbImNvbnRyb2xzLnN0eWxlIl06KGQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixkLnN0eWxlLndpZHRoPSIxMDAlIixkLnN0eWxlLmZvbnRGYW1pbHk9IkFyaWFsLCBWZXJkYW5hIixkLnN0eWxlLmNvbG9yPSIjZmZmZmZmIixkLnN0eWxlLnRleHRBbGlnbj0iY2VudGVyIixkLnN0eWxlLmJvdHRvbT0iMHB4IixkLnN0eWxlLnpJbmRleD0iMTAwMDAiKTtkLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsCmZ1bmN0aW9uKCl7dGhpcy5ZYigpO3RoaXMuR2QoKX0uYmluZCh0aGlzKSk7ZC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt0aGlzLnliKCk7dGhpcy54YigpfS5iaW5kKHRoaXMpKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbInBsYXlQYXVzZS5zdHlsZSJdP2Muc3R5bGU9dGhpcy5jb25mWyJwbGF5UGF1c2Uuc3R5bGUiXTooYy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZmxvYXQ6bGVmdCIpLGMuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixjLnN0eWxlWyJmbG9hdCJdPSJsZWZ0IixjLnN0eWxlLmN1cnNvcj0icG9pbnRlciIpO2MuaWQ9dGhpcy5EYjtjLmlubmVySFRNTD10aGlzLmNvbmYucGF1c2VCdXR0b247InZwYWlkIj09YT8oYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5RaC5iaW5kKHRoaXMpKSxiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLlFoLmJpbmQodGhpcykpKTooYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsCnRoaXMuUGguYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5QaC5iaW5kKHRoaXMpKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7dGhpcy5ZYigpO3RoaXMuR2QoKX0uYmluZCh0aGlzKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt0aGlzLnliKCk7dGhpcy54YigpfS5iaW5kKHRoaXMpKTt2YXIgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbIm11dGUuc3R5bGUiXT9nLnN0eWxlPXRoaXMuY29uZlsibXV0ZS5zdHlsZSJdOihnLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJmbG9hdDpyaWdodCIpLGcuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixnLnN0eWxlWyJmbG9hdCJdPSJyaWdodCIsZy5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTtnLmlkPXRoaXMuQmI7Zy5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b247InZwYWlkIj09YT9nLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwKdGhpcy5CdS5iaW5kKHRoaXMpKTpnLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLkF1LmJpbmQodGhpcykpO2cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe3RoaXMuWWIoKTt0aGlzLkdkKCl9LmJpbmQodGhpcykpO2cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7dGhpcy55YigpO3RoaXMueGIoKX0uYmluZCh0aGlzKSk7dmFyIGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5jb25mWyJza2lwLnN0eWxlIl0/bC5zdHlsZT10aGlzLmNvbmZbInNraXAuc3R5bGUiXToobC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwicG9zaXRpb246YWJzb2x1dGU7dG9wOi01MHB4O3JpZ2h0OjBweCIpLGwuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixsLnN0eWxlLnRvcD0iLTUwcHgiLGwuc3R5bGUucmlnaHQ9IjBweCIsbC5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTtsLmlkPXRoaXMuR2g7bC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLApmdW5jdGlvbigpe3ZhciBhPWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpO2EmJmFbMF0mJihhWzBdLnN0eWxlLm9wYWNpdHk9MSl9KTtsLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IixmdW5jdGlvbigpe3ZhciBhPWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpO2EmJmFbMF0mJihhWzBdLnN0eWxlLm9wYWNpdHk9LjYpfSk7bC5pbm5lckhUTUw9IiI7ZC5hcHBlbmRDaGlsZChjKTt0aGlzLmMuaGYmJmQuYXBwZW5kQ2hpbGQobCk7ZC5hcHBlbmRDaGlsZChnKTtkLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2UuVGEoKXx8KHRoaXMuZWEuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe3RoaXMuWWIoKTt0aGlzLkdkKCl9LmJpbmQodGhpcykpLHRoaXMuZWEuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7dGhpcy55YigpO3RoaXMueGIoKX0uYmluZCh0aGlzKSkpO3RoaXMuY29udHJvbHM9dGhpcy5lYS5hcHBlbmRDaGlsZChkKTsKdGhpcy5jb25mWyJyZXN1bWVDb250cm9sLnN0eWxlIl0/Yi5zdHlsZT10aGlzLmNvbmZbInJlc3VtZUNvbnRyb2wuc3R5bGUiXTooYi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGIuc3R5bGUud2lkdGg9IjEwMCUiLGIuc3R5bGUuZm9udEZhbWlseT0iQXJpYWwsIFZlcmRhbmEiLGIuc3R5bGUuY29sb3I9IiNmZmZmZmYiLGIuc3R5bGUudGV4dEFsaWduPSJjZW50ZXIiLGIuc3R5bGUuYm90dG9tPSIwcHgiLGIuc3R5bGUuekluZGV4PSIxMDAwMCIsYi5zdHlsZS5kaXNwbGF5PSJub25lIixkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpLGQub25lcnJvcj1mdW5jdGlvbigpe3RoaXMud2EmJih0aGlzLndhLnN0eWxlLmJhY2tncm91bmQ9InVybCgnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9iaWdwbGF5MTkwNjA2LnBuZycpIG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIil9LmJpbmQodGhpcyksZC5zcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSGdBQUFCNENBWUFBQUE1WkRiU0FBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeWhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVOaTFqTVRRMUlEYzVMakUyTXpRNU9Td2dNakF4T0M4d09DOHhNeTB4TmpvME1Eb3lNaUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01Ua2dLRTFoWTJsdWRHOXphQ2tpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2T0Rnd01VWTVOa1kzUmpsQ01URkZPVGt3UmpnNVJUZ3pSRFU0T0RRME1qVWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZPRGd3TVVZNU56QTNSamxDTVRGRk9Ua3dSamc1UlRnelJEVTRPRFEwTWpVaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzRPREF4UmprMlJEZEdPVUl4TVVVNU9UQkdPRGxGT0RORU5UZzRORFF5TlNJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvNE9EQXhSamsyUlRkR09VSXhNVVU1T1RCR09EbEZPRE5FTlRnNE5EUXlOU0l2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHZWN29SSUFBQXlyU1VSQlZIamE3RjBKYkZUWEZiMkRiY0JBS1FHTXpXNldRRnBTS2lyV1FnZ3BVSUhiaEpLMHFnMUdrQWdvUXFsRTFRcXpTRWhJN0dEUzRyS0pGZ3pZMkdyQllJc0NqVkFOaENXaHhSVENXb1BManNHQU1hRUdZd3k5NTgzNzFqRE1qR2ZHZitiL1AvOGQ2V2p3T0JuL2Q4KzhlOSs5YjNQMDd0MmI5SVRENGZENXM3ZjNkRUEwZjI0YmZ1M0tiTXVNWStMbk41ak5tQTBsWHpDcm1OWE1TbVk1OHk2empIbWJXZkx5NVV2OC9GenZCK1RQcmZNOVQvOU52WXhDMXNWYlRIdzdCekM3NDk5c0hJamF0SjZmK3o4cDl0Zk1ZdVpYek5QTUMxWTBrcFVFUnE4Y3hoekJITXpzR2FLLzAxUXkwZTM5aTh3anpQM01BN0szSzRIcmlRVG0rOHlmTWQ5anhocjRMRDBsUDJFK1lSWXk4NWtGekZLekd0QmgwaGljeEp6QS9JRFp4T1Jmd2tvcGNoYnpiMmFMd1ExTVpDajB6c25NSW1tb1pBdUlTL0laOGF5NzViTlBOdGpUbUU1Z0dHTW1ScS9NRGN3K0ZoNzQ5WkZ0S0pGdGlyVzd3SjlLWXl5VjhUWlNrQ0RiVkNMYmFEdUJrNlE3eTRnd1lUMEpuU0hibW1TSFVUUWFuTTREaVhGa0wvU1I0NHB0ek4rR2M5UWR6aDQ4aVhtT2FUZHhYVEZPMm1CU0pBbjhMZVpXNWlaeWxnM3RqamVrTGJaSzIxamFSUTltZDV6TnI1MlZycThobGZtT2ZEMXN4Ujc4Sy9uZ1NsenZnRzIra0xheWxNQ2ZNZGNwL2Z6R09ta3pTd2k4blRsRGFSWXdaa2pibVRZR1J6SDNjOHdkcHJRS0doK1JjNlpxT0xQR1REMFlFK25IeURtZHAxQS92Q3R0MlZDWEhsemYyUXVIdzRHZWkzblN2a29iM2RCUDJuUWc2MU5qZEE4dVZPS0dCSDJsYlEyTndYbjhEWHRIYVJFeXdMWjV6QStONk1HL1o0NVZHb1FjWTZXdGd4djV0bW5USnBpNGkyVXJpNVR0dzRhQnpKdnNMWXZDNGFLL3ozL296OHJtWVFjV0VweGduZ3lsaThiUS9lL0sxb1poYjZEcFU2QUNZejR6WHRuWk1NUkxEVUlpY0FvNUt5MEt4dUlqcVlXdUFuK2J1Vm5aMWpUWUxEWFJUV0I4WUl5eXEya1E0MitIODBkZzdDZ1lvMnhxT295UjJ0UmI0STFHdGlJcUtvb2VQWHBFang4L3BnWU5HaWhaQTlRbUtpNHV6dGZ2c2RJZzFjZ1dWRlZWVWRldVhlbjU4K2RVWEZ4TUxWcTBFRUxydmNYRG9taEJ6aFdhSjRMcHdaZ2xXbVowQzY1ZXZVb1RKMDZrL1B4OEdqVnFGRjI2ZElsdTNib2xSQTdSUG1PcllRblRFWXpBdjJFMk4vcnBhMnBxcUtLaWdoSVRFeWt2TDQrMmJ0MUszYnAxbzNQbnp0SERodytGQzFlOTJQc0tHbTh1R3NKam9YWmpvNS8rd1lNSE5HTEVDQm80Y0tENHVWZXZYcFNhbWtyTm1qV2preWRQMHVYTGw4Vy9HelpzU0M5ZXZMQ3J5RERPY3VaTGYzdnd4LzdtV1VZZ05qYVcwdExTcUxDd2tLWk9uVXJsNWVYQ2RTTXUyM1FnQnEwbUJlS2kwNnpRcXM2ZE85UHExYXRwOSs3ZE5IcjBhTkdiYlJ5ZjAvd1ZlQ2p6VFN1MWJOQ2dRYlJqeHc3YXVIR2ppTTluejU2MVkzeCtVMnIzcXNCd2EyNzgxTU43aHRKZmpCOC9uZzRkT2tSTGxpd1I0cDQ1YzRhZVBuMWFtMWJaZ0s5cDU5NkRNV3EyOUNxTnhvMGIwOHlaTStuZ3dZTTBiZG8wdW52M3JwM2k4MWozek1lOXhUOG5heCt0VkF1a1ZXdldyS0c5ZS9mUzhPSERSWkhFQnZFNVdtcm8xVVVubTlYOUJJc2hRNGFJUWRqbXpadHI0ek5HM1ZwdmprQTNuZUxOUldOYjQvQkkvV29qUGg4NWNvUVdMRmhBMGRIUlFtZ3RQa2NZM3BQRmo5ZGM5SS9KWEtmdTZBNFVRK2JPblNzR1l0T25UNmQ3OSs2SitJd0NTUVFKSGVYYVVkMEZ0Z1VRbjVFLzc5bXpKMUx6NTFHZUJIN1hicFVCeE9kZHUzWlJWbGFXbUxHS29QcjJqOXdGeGdtdDNjaW1TRTVPcHNPSEQ5T2lSWXNvSmlhR3pwOC9MNllwTGV5MmEvWFVXakNBYkE3VXQyZlBuaTN5NXlsVHBvajRYRkpTWXVYOGVZQ3J3RDhnaGRyNHZHN2RPcEZhalJ3NTBzcnh1WTlySHZ5MldmTTZvNllBaHc0ZFNnVUZCYUsrcmNWbkxYKzJTRDc4dHBZSDQydlpVL1ZkejVnd1lZS0l6NHNYTHhhREx3aU4rR3lCZ1JnMGRVRGdkc3lPU2tyZjhYbldyRmtpUG1QK3VheXN6QXIxYldqYURpNDZrUmx0ZHBkakJxRFV1WDc5ZXRxM2IxOXRmZnZtelp1MXNkbGtOb09taVZvUFZnZ3dmMGFSWk11V0xXSlFkdUhDQlpFL203QTN0OE1UeFNuSmdnUFdoaDAvZnB6bXo1OHY2dHNRMm1UeE9RNEN0MVJTQlk5R2pSclJ2SG56UkgwYjg4OWFmZHNrOGJrbFluQXJGWHQxS0IxeEtyVjI3VnJodXJFSzFDVHh1UlcrWXMxVlA5UTNmNGJJMmRuWllsQjI4ZUpGSSt2YnpTRndJeVdML2hnM2JweVlmMTY0Y0tHb2J5TStQM3YyTE54Q040TEFhbHRvaU5Da1NST2FNMmVPS0pSTW5qeFp2SWRGQm1GRURBUitvYVFJTFpCS2JkaXdRU3cydUgvL3Z0aU9FeTVna1ZhVmtpQzBRSy9GQW9QdDI3Zlg3bzRNRTZvaDhETWxRZWlRbTV0THk1Y3ZwNktpSXNLWlpLMWF0UkpiWWNPRUtwU3pucGpkU0ZiY0M2eE5VR0JFM2JScFUrclJvNGRvUjNWMWRUZ2Y0eHYwNEllcW4rbUhhOWV1MGRLbFM4VXkzY3JLU3BFZm84cGwwTFJuQlFRdVU3TFVIMGlCVnF4WUlZb2ROMjdjb0E0ZE9naGlRR1hndHRaN0VQaU9rcWQrd0tiMDlQUjBPblhxRkxWdTNWcTRZNGdhenRHeUY1UWlCdDlTRWdVZloxSEl3UFFoY3Q3dTNidUw5MDBncklaYjZNRlh5SGxmZmJTU3pEOWN1WEpGREtBd1hZZ1VxRXVYTGtiR1dXK0FwbGNoNmsyTURjaTUxRktoamppN2N1VktXclZxRmQyK2ZWdkVXUFJjZytPc04xeUh0bHJHL1I4bG4yOWc4Z0RuaEdCcExZUkduTVZVb1luY3NUc3VJc1BVTHVVNFN5N2JIVlFlN0RtZnhkNWp4Rms4VHhpTEZjRUNtdGJHM1JPcWo3NEtuTStseGRrblQ1NkllcklKNDZ3dm5IQVYrQ3NscVJNWU5DSE9vbmFNQmUvdDI3YzNjNXoxaGVPdUFwZXcyN2xNTnQ2ZkJHemJ0azFVb1U2ZlBrMHRXN1lVN2hpaVdzQWR1NlBFNFhCY0ZnSzd4TGVEZGhYNDZOR2pJcDlGbk1YQUNTc3hZQmNURDZEcXdnRk5WOWZjOTNQbUozWVM5dnIxNnlMT2J0cTBTYmhtbkx0bHNUanJEWjlyLzNEdHdYZ1RYMW5UN2NuUWV4UU5sN3RzMlRMS3lNaWcwdEpTU2toSUVETStKaWt2MWhjMXJnSzd6anlYa3c1WHFaa2RPVGs1MUxkdlg3RzZBcU5qdUdPa1B4QTJRbzRvTHBSYXZ1YWlnVnptaUVnVTFyVnVqRVZ3S0MrS3I3djFleXg1MEpDOENmeFhjdDVHSFRGMWFlU3pPRmtuTXpOVHVPWk9uVHBGU3B6MUdIMmtobDRGZnNUY3lmeUYxVnVxemMraWJuem56cDNhT0d2QmZEWVE3Sklha3FjWXJPR1BWbThsNnNiOSt2VVRjUmFqWTljNEcrSEljSC9Ea3lzK3hDd21pNTA0Q3h3N2RreTRZK1N6aUxOWUxtUHhmRFlRRkV2dDZoUVlXTXI4azFWYWhuVlFPQ0ZIcXh0SGVKejFCby8zYTNpNzRqMlRtVTRtUHZVZHdGWk5iWDRXK1d4OGZEeTFiZHMyVXZMWlFGREIzT1RwRncxOEpNc0xUSjBMNU9aUy8vNzl4ZFlRYmZWaWhPV3pnV0MrMU14dmdZSFAzRWRrUnNIVjFXSkRWMUpTRXFXa3BJZ0R5NURQWW1MQVpqM1dGVmoyN1BXR2NGLzVMaXcyVStiRmhxSmp4NDVpTkR4anhneHhyQkVXaitNOUc4WlpUNWhGSG01YjBlREFnS1FPL0plWmFOVFR3LzNpVGdaczJzS3NENjRCd2pVNk51NnhycmhhbHpiK0NJenpoLzloVkF2UVN6R0FBakNJUW85VjE5clZBb2VPK3B3LzhHZWJHejRnMzZnV29MeUl4ZVNnVFFkUTNwQlBma3dPK2J1UGNTS3pXdG5VTklBV2svenlnSDcyaUFvcDhqWmxXMU5nRXZtNWFUQ1FuY2c1ekR4bFc4T1JGMGhIQzNTcmVRcXB6V3BHNG83VXdQOUJhb0IvNEJtNzlOSDhXcVJzYlFpU0hBNUhRQ2N5UkRWdkh2QXhXY2hac0NQeGZXWHZzR0lxT2EvOHBWQUxUTElINDU2bGdjcnVZY0VmbUl1QytSL3JjOXdMYnAzZXFXd2ZjdXdrSHpkOGgxSmc0RVBtRjBxRGtPR3d0REVaSlRDQVV1YS9sQmE2QTV2SGh0WDNRL1FRR0ZYL3djeC9LazEwQTJ6NVEvSXl4eHR1Z1VYNnhCeEV6djFOQ3ZYRFFXbExYUTZvQzNZVTdRbWNJci9NNU5mdk1uc3BuWUxDWDVnLzVWeFh0eG1WVUJ5YStFdHlydWRTQ0F6cDBuYTZJbFNuWXY1T0p1WUsvbUdxdEpudUNPVVdsUTNzc3I4bTUxNlp6a3BEajhDS2pHUjJ5VitHNmcrRStseGJQUGozbU5sS3k5ZVFMVzN6WlNqL1NEZ09MdjZHbWNyOG1GeTJOZG9ZNWRJV3FkSTJaSFdCTldUSzBYV09qY1hOa1RiSUROY2YxRE5OOGdlUE9TN3ZJR2ZsNnp2TXRqWVI5dDlNWE5xd2hPUHRZL2RmdWw5YnErYzF0a2JkM0lScEw5eFovR3R5VGo5R0trcGxHL3RRRUZOOVZoWllBN2FxNG1TZnRBZ1R1bFMycVJzWnZCM1hnUU0xOVlMN0FqNVBDL3A4TFBLTDVkK041OWZwOGh0dlJaeGtybVVYbThXdkhxOUs4T1IrUSttaXpTU3c2KzkrSWtlWkh6Q2JtRnpVU21ZQk0wdHp3NzRFVWdLL2lnUXA4aGh5VGt2R21rUlU5RTV0UTBDQmUzaFJBdnN2c0NzdzRoNUd6bE9BTUQwWjdtdnBjVHp2RWVaKzVnSG03VUJFVkFKVHdBZWV2Y1hzVGM1MVlUaExIMVdoTmpxNGRMamN1MHlVV1MrUnM5SjBtbm5CYjZNcWdYVVIyQjNSVXVDdXNyZmo0dXQ0Wmd0bU0zSmV3cW5kMDRpdEg3anhEVGtwZGdoZ3ZYR1o3SlVsVXVDZ1R5QTFrOEQvRjJBQUU4YkJqOGQ0ZEM0QUFBQUFTVVZPUks1Q1lJST0iLApiLnN0eWxlLmJhY2tncm91bmQ9InVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFIZ0FBQUI0Q0FZQUFBQTVaRGJTQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5aHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU5pMWpNVFExSURjNUxqRTJNelE1T1N3Z01qQXhPQzh3T0M4eE15MHhOam8wTURveU1pQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTkRJREl3TVRrZ0tFMWhZMmx1ZEc5emFDa2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZPRGd3TVVZNU5rWTNSamxDTVRGRk9Ua3dSamc1UlRnelJEVTRPRFEwTWpVaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk9EZ3dNVVk1TnpBM1JqbENNVEZGT1Rrd1JqZzVSVGd6UkRVNE9EUTBNalVpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvNE9EQXhSamsyUkRkR09VSXhNVVU1T1RCR09EbEZPRE5FTlRnNE5EUXlOU0lnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG80T0RBeFJqazJSVGRHT1VJeE1VVTVPVEJHT0RsRk9ETkVOVGc0TkRReU5TSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QdlY3b1JJQUFBeXJTVVJCVkhqYTdGMEpiRlRYRmIyRGJjQkFLUUdNelc2V1FGcFNLaXJXUWdncFVJSGJoSkswcWcxR2tBZ29RcWxFMVFxelNFaEk3R0RTNHJLSkZnelkyR3JCWUlzQ2pWQU5oQ1doeFJUQ1dvUExqc0dBTWFFR1l3eTk1ODM3MWpETWpHZkdmK2IvUC84ZDZXandPQm4vZDgrOGU5KzliM1AwN3QyYjlJVEQ0ZkQ1czdmM2RFQTBmMjRiZnUzS2JNdU1ZK0xuTjVqTm1BMGxYekNybU5YTVNtWTU4eTZ6akhtYldmTHk1VXY4L0Z6dkIrVFByZk05VC85TnZZeEMxc1ZiVEh3N0J6Qzc0OTlzSElqYXRKNmYrejhwOXRmTVl1Wlh6TlBNQzFZMGtwVUVScThjeGh6QkhNenNHYUsvMDFReTBlMzlpOHdqelAzTUE3SzNLNEhyaVFUbSs4eWZNZDlqeGhyNExEMGxQMkUrWVJZeTg1a0Z6Rkt6R3RCaDBoaWN4SnpBL0lEWnhPUmZ3a29wY2hiemIyYUx3UTFNWkNqMHpzbk1JbW1vWkF1SVMvSVo4YXk3NWJOUE50alRtRTVnR0dNbVJxL01EY3crRmg3NDlaRnRLSkZ0aXJXN3dKOUtZeXlWOFRaU2tDRGJWQ0xiYUR1Qms2UTd5NGd3WVQwSm5TSGJtbVNIVVRRYW5NNERpWEZrTC9TUjQ0cHR6TitHYzlRZHpoNDhpWG1PYVRkeFhURk8ybUJTSkFuOExlWlc1aVp5bGczdGpqZWtMYlpLMjFqYVJROW1kNXpOcjUyVnJxOGhsZm1PZkQxc3hSNzhLL25nU2x6dmdHMitrTGF5bE1DZk1kY3AvZnpHT21relN3aThuVGxEYVJZd1pramJtVFlHUnpIM2M4d2RwclFLR2grUmM2WnFPTFBHVEQwWUUrbkh5RG1kcDFBL3ZDdHQyVkNYSGx6ZjJRdUh3NEdlaTNuU3Zrb2IzZEJQMm5RZzYxTmpkQTh1Vk9LR0JIMmxiUTJOd1huOERYdEhhUkV5d0xaNXpBK042TUcvWjQ1VkdvUWNZNld0Z3h2NXRtblRKcGk0aTJVcmk1VHR3NGFCekp2c0xZdkM0YUsvejMvb3o4cm1ZUWNXRXB4Z25neWxpOGJRL2UvSzFvWmhiNkRwVTZBQ1l6NHpYdG5aTU1STERVSWljQW81S3kwS3h1SWpxWVd1QW4rYnVWbloxalRZTERYUlRXQjhZSXl5cTJrUTQyK0g4MGRnN0NnWW8yeHFPb3lSMnRSYjRJMUd0aUlxS29vZVBYcEVqeDgvcGdZTkdpaFpBOVFtS2k0dXp0ZnZzZElnMWNnV1ZGVlZVZGV1WGVuNTgrZFVYRnhNTFZxMEVFTHJ2Y1hEb21oQnpoV2FKNExwd1pnbFdtWjBDNjVldlVvVEowNmsvUHg4R2pWcUZGMjZkSWx1M2JvbFJBN1JQbU9yWVFuVEVZekF2MkUyTi9ycGEycHFxS0tpZ2hJVEV5a3ZMNCsyYnQxSzNicDFvM1BuenRIRGh3K0ZDMWU5MlBzS0dtOHVHc0pqb1haam81Lyt3WU1ITkdMRUNCbzRjS0Q0dVZldlhwU2Fta3JObWpXamt5ZFAwdVhMbDhXL0d6WnNTQzlldkxDcnlERE9jdVpMZjN2d3gvN21XVVlnTmphVzB0TFNxTEN3a0taT25Vcmw1ZVhDZFNNdTIzUWdCcTBtQmVLaTA2elFxczZkTzlQcTFhdHA5KzdkTkhyMGFOR2JiUnlmMC93VmVDanpUU3UxYk5DZ1FiUmp4dzdhdUhHamlNOW56NTYxWTN4K1UycjNxc0J3YTI3ODFNTjdodEpmakI4L25nNGRPa1JMbGl3UjRwNDVjNGFlUG4xYW0xYlpnSzlwNTk2RE1XcTI5Q3FOeG8wYjA4eVpNK25nd1lNMGJkbzB1bnYzcnAzaTgxajN6TWU5eFQ4bmF4K3RWQXVrVld2V3JLRzllL2ZTOE9IRFJaSEVCdkU1V21ybzFVVW5tOVg5QklzaFE0YUlRZGptelp0cjR6TkczVnB2amtBM25lTE5SV05iNC9CSS9Xb2pQaDg1Y29RV0xGaEEwZEhSUW1ndFBrY1kzcFBGajlkYzlJL0pYS2Z1NkE0VVErYk9uU3NHWXRPblQ2ZDc5KzZKK0l3Q1NRUUpIZVhhVWQwRnRnVVFuNUUvNzltekoxTHo1MUdlQkg3WGJwVUJ4T2RkdTNaUlZsYVdtTEdLb1ByMmo5d0Z4Z210M2NpbVNFNU9wc09IRDlPaVJZc29KaWFHenA4L0w2WXBMZXkyYS9YVVdqQ0FiQTdVdDJmUG5pM3k1eWxUcG9qNFhGSlNZdVg4ZVlDcndEOGdoZHI0dkc3ZE9wRmFqUnc1MHNyeHVZOXJIdnkyV2ZNNm82WUFodzRkU2dVRkJhSytyY1ZuTFgrMlNENzh0cFlINDJ2WlUvVmR6NWd3WVlLSXo0c1hMeGFETHdpTitHeUJnUmcwZFVEZ2RzeU9Ta3JmOFhuV3JGa2lQbVArdWF5c3pBcjFiV2phRGk0NmtSbHRkcGRqQnFEVXVYNzlldHEzYjE5dGZmdm16WnUxc2Rsa05vT21pVm9QVmdnd2YwYVJaTXVXTFdKUWR1SENCWkUvbTdBM3Q4TVR4U25KZ2dQV2hoMC9mcHptejU4djZ0c1EybVR4T1E0Q3QxUlNCWTlHalJyUnZIbnpSSDBiODg5YWZkc2s4YmtsWW5BckZYdDFLQjF4S3JWMjdWcmh1ckVLMUNUeHVSVytZczFWUDlRM2Y0YkkyZG5aWWxCMjhlSkZJK3ZielNGd0l5V0wvaGczYnB5WWYxNjRjS0dvYnlNK1AzdjJMTnhDTjRMQWFsdG9pTkNrU1JPYU0yZU9LSlJNbmp4WnZJZEZCbUZFREFSK29hUUlMWkJLYmRpd1FTdzJ1SC8vdnRpT0V5NWdrVmFWa2lDMFFLL0ZBb1B0MjdmWDdvNE1FNm9oOERNbFFlaVFtNXRMeTVjdnA2S2lJc0taWksxYXRSSmJZY09FS3BTem5wamRTRmJjQzZ4TlVHQkUzYlJwVStyUm80ZG9SM1YxZFRnZjR4djA0SWVxbittSGE5ZXUwZEtsUzhVeTNjcktTcEVmbzhwbDBMUm5CUVF1VTdMVUgwaUJWcXhZSVlvZE4yN2NvQTRkT2doaVFHWGd0dFo3RVBpT2txZCt3S2IwOVBSME9uWHFGTFZ1M1ZxNFk0Z2F6dEd5RjVRaUJ0OVNFZ1VmWjFISXdQUWhjdDd1M2J1TDkwMGdySVpiNk1GWHlIbGZmYlNTekQ5Y3VYSkZES0F3WFlnVXFFdVhMa2JHV1crQXBsY2g2azJNRGNpNTFGS2hqamk3Y3VWS1dyVnFGZDIrZlZ2RVdQUmNnK09zTjF5SHRsckcvUjhsbjI5ZzhnRG5oR0JwTFlSR25NVlVvWW5jc1RzdUlzUFVMdVU0U3k3YkhWUWU3RG1meGQ1anhGazhUeGlMRmNFQ210YkczUk9xajc0S25NK2x4ZGtuVDU2SWVySUo0Nnd2bkhBVitDc2xxUk1ZTkNIT29uYU1CZS90MjdjM2M1ejFoZU91QXBldzI3bE1OdDZmQkd6YnRrMVVvVTZmUGswdFc3WVU3aGlpV3NBZHU2UEU0WEJjRmdLN3hMZURkaFg0Nk5HaklwOUZuTVhBQ1NzeFlCY1RENkRxd2dGTlY5ZmM5M1BtSjNZUzl2cjE2eUxPYnRxMFNiaG1uTHRsc1RqckRaOXIvM0R0d1hnVFgxblQ3Y25RZXhRTmw3dHMyVExLeU1pZzB0SlNTa2hJRURNK0ppa3YxaGMxcmdLN3pqeVhrdzVYcVprZE9UazUxTGR2WDdHNkFxTmp1R09rUHhBMlFvNG9McFJhdnVhaWdWem1pRWdVMXJWdWpFVndLQytLcjd2MWV5eDUwSkM4Q2Z4WGN0NUdIVEYxYWVTek9Ga25Nek5UdU9aT25UcEZTcHoxR0gya2hsNEZmc1RjeWZ5RjFWdXF6YytpYm56bnpwM2FPR3ZCZkRZUTdKSWFrcWNZck9HUFZtOGw2c2I5K3ZVVGNSYWpZOWM0RytISWNIL0RreXMreEN3bWk1MDRDeHc3ZGt5NFkrU3ppTE5ZTG1QeGZEWVFGRXZ0NmhRWVdNcjhrMVZhaG5WUU9DRkhxeHRIZUp6MUJvLzNhM2k3NGoyVG1VNG1QdlVkd0ZaTmJYNFcrV3g4ZkR5MWJkczJVdkxaUUZEQjNPVHBGdzE4Sk1zTFRKMEw1T1pTLy83OXhkWVFiZlZpaE9XemdXQysxTXh2Z1lIUDNFZGtSc0hWMVdKRFYxSlNFcVdrcElnRHk1RFBZbUxBWmozV0ZWajI3UFdHY0YvNUxpdzJVK2JGaHFKang0NWlORHhqeGd4eHJCRVdqK005RzhaWlQ1aEZIbTViMGVEQWdLUU8vSmVaYU5UVHcvM2lUZ1pzMnNLc0Q2NEJ3alU2TnU2eHJyaGFsemIrQ0l6emgvOWhWQXZRU3pHQUFqQ0lRbzlWMTlyVkFvZU8rcHcvOEdlYkd6NGczNmdXb0x5SXhlU2dUUWRRM3BCUGZrd08rYnVQY1NLeld0blVOSUFXay96eWdINzJpQW9wOGpabFcxTmdFdm01YVRDUW5jZzV6RHhsVzhPUkYwaEhDM1NyZVFxcHpXcEc0bzdVd1A5QmFvQi80Qm03OU5IOFdxUnNiUWlTSEE1SFFDY3lSRFZ2SHZBeFdjaFpzQ1B4ZldYdnNHSXFPYS84cFZBTFRMSUg0NTZsZ2NydVljRWZtSXVDK1IvcmM5d0xicDNlcVd3ZmN1d2tIemQ4aDFKZzRFUG1GMHFEa09Hd3RERVpKVENBVXVhL2xCYTZBNXZIaHRYM1EvUVFHRlgvd2N4L0trMTBBMno1US9JeXh4dHVnVVg2eEJ4RXp2MU5DdlhEUVdsTFhRNm9DM1lVN1FtY0lyL001TmZ2TW5zcG5ZTENYNWcvNVZ4WHR4bVZVQnlhK0V0eXJ1ZFNDQXpwMG5hNklsU25ZdjVPSnVZSy9tR3F0Sm51Q09VV2xRM3NzcjhtNTE2WnprcERqOENLakdSMnlWK0c2ZytFK2x4YlBQajNtTmxLeTllUUxXM3paU2ovU0RnT0x2NkdtY3I4bUZ5Mk5kb1k1ZElXcWRJMlpIV0JOV1RLMFhXT2pjWE5rVGJJRE5jZjFETk44Z2VQT1M3dklHZmw2enZNdGpZUjl0OU1YTnF3aE9QdFkvZGZ1bDlicStjMXRrYmQzSVJwTDl4Wi9HdHlUajlHS2twbEcvdFFFRk45VmhaWUE3YXE0bVNmdEFnVHVsUzJxUnNadkIzWGdRTTE5WUw3QWo1UEMvcDhMUEtMNWQrTjU5ZnA4aHR2Ulp4a3JtVVhtOFd2SHE5SzhPUitRK21pelNTdzYrOStJa2VaSHpDYm1GelVTbVlCTTB0enc3NEVVZ0svaWdRcDhoaHlUa3ZHbWtSVTlFNXRRMENCZTNoUkF2c3ZzQ3N3NGg1R3psT0FNRDBaN212cGNUenZFZVorNWdIbTdVQkVWQUpUd0FlZXZjWHNUYzUxWVRoTEgxV2hOanE0ZExqY3UweVVXUytSczlKMG1ubkJiNk1xZ1hVUjJCM1JVdUN1c3JmajR1dDRaZ3RtTTNKZXdxbmQwNGl0SDdqeERUa3BkZ2hndlhHWjdKVWxVdUNnVHlBMWs4RC9GMkFBRThiQmo4ZDRkQzRBQUFBQVNVVk9SSzVDWUlJPScpIG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIiwKYi5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTt0aGlzLndhPXRoaXMuZWEuYXBwZW5kQ2hpbGQoYik7dGhpcy5iLllmKGZ1bmN0aW9uKGEpe3RoaXMud2Euc3R5bGUuaGVpZ2h0PWEuaGVpZ2h0KyJweCJ9LmJpbmQodGhpcykpOyJ2cGFpZCIhPWEmJnRoaXMuYi5mLnZhJiZ0aGlzLmIuZi52YSgpJiYoZS52KGsuamcsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSx0aGlzLk5lKCkpO3RoaXMueWIoKX19LHliOmZ1bmN0aW9uKCl7dGhpcy5jb250cm9scy5zdHlsZS5kaXNwbGF5PSJub25lIn0sWWI6ZnVuY3Rpb24oKXt0aGlzLndhJiYiYmxvY2siPT10aGlzLndhLnN0eWxlLmRpc3BsYXl8fHRoaXMuQWZ8fCh0aGlzLmNvbnRyb2xzLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9LFBoOmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy5iLkYucGF1c2VkPyh0aGlzLmIuRi5wbGF5KCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uLAp0aGlzLnRyYWNrKCJyZXN1bWUiLCEwKSxlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSk6KHRoaXMuYi5GLnBhdXNlKCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24sdGhpcy50cmFjaygicGF1c2UiLCEwKSxlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnliKCksdGhpcy54YigpKSl9LFFoOmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy5nYz8oZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJwbGF5IiksdGhpcy53YSYmKHRoaXMud2Euc3R5bGUuZGlzcGxheT0ibm9uZSIpLGEmJihhLmlubmVySFRNTD10aGlzLmNvbmYucGF1c2VCdXR0b24pLHRoaXMuZ2M9ITEpOihlLm1hKHRoaXMuSCwiY29udHJvbCIsCiJwYXVzZSIpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnliKCksdGhpcy54YigpKSxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24pLHRoaXMuZ2M9ITApfSx6ZDpmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRGIpO3RoaXMuYi5GLnBhdXNlZHx8KHRoaXMuYi5GLnBhdXNlKCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24sdGhpcy50cmFjaygicGF1c2UiLCEwKSxlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKX0semg6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRiKTt0aGlzLmIuRi5wYXVzZWQmJih0aGlzLmIuRi5wbGF5KCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uLHRoaXMudHJhY2soInJlc3VtZSIsITApLGUudihrLlVjLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSwKdGhpcy5DKCkpKX0sQXU6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkJiKTt0aGlzLmIuRi5tdXRlZD8odGhpcy5iLkYubXV0ZWQ9ITEsYS5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b24sdGhpcy50cmFjaygidW5tdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfdW5tdXRlZCIsInVzZXIiLCEwKSxlLnYoay50Zix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKToodGhpcy5iLkYubXV0ZWQ9ITAsYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJ1c2VyIiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSl9LEJ1OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYik7dGhpcy5wYj8oZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJ1bm11dGUiKSwKdGhpcy5wYj0hMSxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b24pKTooZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJtdXRlIiksdGhpcy5wYj0hMCxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbikpfSxOZTpmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuQmIpO3RoaXMuYi5GLm11dGVkfHwodGhpcy5iLkYubXV0ZWQ9ITAsYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJjb250ZW50IiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSl9LEx1OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYik7dGhpcy5iLkYubXV0ZWQmJih0aGlzLmIuRi5tdXRlZD0hMSxhLmlubmVySFRNTD10aGlzLmNvbmYubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJ1bm11dGUiLAohMCksZS50cmFjaygic3RhdHNfaGRfdW5tdXRlZCIsImNvbnRlbnQiLCEwKSxlLnYoay50Zix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKX0sWGI6ZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5YYik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5YYik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuWGIpO3RoaXMuamR8fHRoaXMuVmN8fCh0aGlzLnZpZGVvLmxvYWQoKSx0aGlzLmtmKCkpfSxoZDpmdW5jdGlvbigpe3ZhciBhPSExLGI9bC5nZXRDb25maWcoKTsic3ZtcHJldmlldyI9PWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZikuYW5jaG9yJiYoYT0hMCxiLmFkRmFsbGJhY2tVUkx8fChiLmFkRmFsbGJhY2tVUkw9Imh0dHBzOi8vaGdjLWNmLWNhY2hlLTEuc3Zvbm0uY29tL3dlbGVjdC54bWwiKSk7ZS51YygpO2lmKChhfHwhdGhpcy5mZSYmCmIuYWRGYWxsYmFja1VSTCkmJiF0aGlzLlFlKXRoaXMuUWU9dGhpcy5maT10aGlzLkFmPSEwLGUudHJhY2soInN0YXRzX3d0X3N0YXJ0IiwiIiwhMCksdGhpcy5mZT0hMCxhPWUuJGYoYi5hZEZhbGxiYWNrVVJMLHRoaXMuTCwhMSx7b25seVVSTDohMH0pLHRoaXMuSWUoYSwhMCwhMSx7aG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3M6ITB9KTtlbHNlIGlmKHRoaXMuamQ9ITAsdGhpcy5zYiYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5zYiksdGhpcy5zYj0hMSksKCJwcmVyb2xsIj09ZS5TYSYmdGhpcy5WY3x8InBvc3Ryb2xsIj09ZS5TYSkmJnRoaXMuY29uZi5wb3N0QWRJZnJhbWVVcmwpaWYoYT10aGlzLmNvbmYucG9zdEFkSWZyYW1lVXJsLCJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoYT1hKGUuU2EpKSwic3RyaW5nIj09dHlwZW9mIGEmJmEpe2ZvcihiPXRoaXMuYi5HO2IuZmlyc3RDaGlsZDspYi5yZW1vdmVDaGlsZChiLmZpcnN0Q2hpbGQpO2IucGFyZW50fHx0aGlzLmIuSmMoKTsKdmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Yy5zZXRBdHRyaWJ1dGUoInNyYyIsYSk7Yy5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Muc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7Yy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAwIG5vbmU7b3V0bGluZTogbm9uZTsiKTtiLmFwcGVuZENoaWxkKGMpO3ZhciBmPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihhKXtpZigiY29udGludWUiPT1hLmRhdGEpe3RoaXMua2QoKTthPU1hdGgucm91bmQoKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWYpLzFFMyk7dmFyIGI9IiI7MTxhJiYoYj0iZ3QxIik7NTxhJiYoYj0iZ3Q1Iik7MTA8YSYmKGI9Imd0MTAiKTsyMDxhJiYoYj0iZ3QyMCIpO2UudHJhY2soInN0YXRzX2hkX3Bvc3RJZnJhbWVDbG9zZWQiLGIsITApfX0uYmluZCh0aGlzKSk7ZS50cmFjaygic3RhdHNfaGRfcG9zdElmcmFtZU9wZW5lZCIsCiIiLCEwKX1lbHNlIHRoaXMua2QoKTtlbHNlIHRoaXMua2QoKX0sa2Q6ZnVuY3Rpb24oYSl7dGhpcy4kdCgpJiYhYT93aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMua2QoITApfS5iaW5kKHRoaXMpLHRoaXMuR3MpOih0aGlzLmxmPSEwLHRoaXMuYi53ZSgpLHRoaXMuYi5wdCgpLHRoaXMuVWI9ITEsZS52KGsuUG8sdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSx0aGlzLnNlKCkueWgoKSl9LHNlOmZ1bmN0aW9uKCl7dmFyIGE9bnVsbDt0aGlzLmImJnRoaXMuYi5mJiYoYT10aGlzLmIuZik7cmV0dXJuIGF9LERlOmZ1bmN0aW9uKCl7dmFyIGE9ITE7dHJ5e25ldyBBY3RpdmVYT2JqZWN0KCJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFzaCIpJiYoYT0hMCl9Y2F0Y2goYil7bmF2aWdhdG9yLm1pbWVUeXBlcyYmdm9pZCAwIT1uYXZpZ2F0b3IubWltZVR5cGVzWyJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCJdJiZuYXZpZ2F0b3IubWltZVR5cGVzWyJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCJdLmVuYWJsZWRQbHVnaW4mJgooYT0hMCl9cmV0dXJuIGF9LGFnOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5IYSgibWluVmlzIik7YSYmKGUuQmUodGhpcy52aWRlbyxhKT90aGlzLnpoKCk6dGhpcy56ZCgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5hZygpfS5iaW5kKHRoaXMpLDEwMCkpfSxCOmZ1bmN0aW9uKCl7dmFyIGE9e307dGhpcy5jJiYoYS5jbGlja3Rocm91Z2g9dGhpcy5jLk9iLGEuZHVyYXRpb249dGhpcy5jLmR1cmF0aW9uLGEuYWRQb2Q9dGhpcy5jLnJiLHRoaXMudmlkZW8mJnRoaXMudmlkZW8uY3VycmVudFRpbWUmJihhLmN1cnJlbnRUaW1lPXRoaXMudmlkZW8uY3VycmVudFRpbWUpLHRoaXMubGMmJjA8dGhpcy5sYy5sZW5ndGgmJihhLmFkSWRzPXRoaXMubGMpKTt0aGlzLnZpZGVvJiZ0aGlzLnZpZGVvLmR1cmF0aW9uJiYoYS52aWRlb19kdXJhdGlvbj10aGlzLnZpZGVvLmR1cmF0aW9uKTtyZXR1cm4gYX0sQzpmdW5jdGlvbigpe3ZhciBhPXt9O2EuYWRzZXNzaW9uX2lkPXRoaXMuYm8rCiItIit0aGlzLmpmO3RoaXMuYyYmdGhpcy5jLkRnJiYoYS5ob21hZEltcHJlc3Npb25BZElkPXRoaXMuYy5EZygpKTtyZXR1cm4gYX0sb2c6ZnVuY3Rpb24oKXt9fX0pKHRoaXMpO3ZhciBRYT1jLllqfHxRYTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy55cz10aGlzLmFbMV07dGhpcy5HcD10aGlzLmFbNV07dGhpcy5qPXRoaXMuYVs4XX1jLk5pPWI7Yi5wcm90b3R5cGU9e3hzOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy55czp0aGlzLkZwKGEpfSxGcDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuR3A6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuajphfX19KShjKTt2YXIgUmE9Yy5OaXx8UmEsd2M9bmV3IFJhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwKIlooVFREWlRSUiIpO3dpbmRvdy5EPXdjLnhzKDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsYixjLGQpe3RoaXMub3B0aW9ucz1kfHx7fTtoPWM7dGhpcy5wYXJlbnQ9YTt0aGlzLnVybD1iO3RoaXMuRWE9bnVsbDt0aGlzLlc9W107dGhpcy5VPW51bGw7dGhpcy5rYz10aGlzLm1jPSExO3RoaXMuc2E9IiI7dGhpcy56Zj0hMTtkJiZkLmVtcHR5P3RoaXMuTXIoJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+PFZBU1QgdmVyc2lvbj0iMy4wIj48L1ZBU1Q+Jyk6dGhpcy5sb2FkKCl9dmFyIGE9MCxoLGQ9W107Yy52bT1iO2IucHJvdG90eXBlPXtsb2FkOmZ1bmN0aW9uKCl7dmFyIGE9ZS51YygpLGI7Yj1lLmxhKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpO3ZhciBjPSIiO2IucXVlcnlLZXkmJihjPWIucXVlcnlLZXkuaHZwKTtjJiYodGhpcy5vcHRpb25zLnZwYWlkPSEwKTtiPXRoaXMub3B0aW9ucy5rZWVwVVJMP25ldyB5KHRoaXMudXJsKTpsLnphKGwuS2QodGhpcy51cmwpLAohMSx0aGlzLm9wdGlvbnMudXNlQWRUYWdQYXJhbWV0ZXIpO2lmKHRoaXMub3B0aW9ucy52cGFpZCYmIWUuVGEoKSYmKGEuaXNDaHJvbWV8fGEuaXNGaXJlZm94KSYmIWEuaXNFZGdlfHxjKXthPWUubGcodGhpcy51cmwpO2F8fChhPXRoaXMudXJsKTtpZigwPD1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoIm1hcnRoYXN0ZXdhcnQiKSYmdGhpcy5vcHRpb25zLkFkU3lzdGVtJiYiR0RGUCI9PXRoaXMub3B0aW9ucy5BZFN5c3RlbXx8ImFwcHNwb3QiPT1jfHwwPGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZigiZmFuZG9tLmNvbSIpJiYwPGEuaW5kZXhPZigicHViYWRzLmcuZG91YmxlY2xpY2submV0LyIpKTA8YS5pbmRleE9mKCJnb29nbGVhZHMuZy5kb3VibGVjbGljay5uZXQvcGFnZWFkL2FkcyIpfHwiYXBwc3BvdCI9PWN8fDA8ZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKCJmYW5kb20uY29tIikmJjA8YS5pbmRleE9mKCJwdWJhZHMuZy5kb3VibGVjbGljay5uZXQvIik/Cih0aGlzLnVybD0iaHR0cHM6Ly9pbWEzdnBhaWQuYXBwc3BvdC5jb20vP2FkVGFnVXJsPSIrZW5jb2RlVVJJQ29tcG9uZW50KGwuS2QoYSkpKyImdHlwZT1qcyIsYj1sLnphKGwuS2QodGhpcy51cmwpLCExLHRoaXMub3B0aW9ucy51c2VBZFRhZ1BhcmFtZXRlciksYi5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9ImNvbWFwcHNwb3RpbWEzdnBhaWQiKTpiPWwuemEobC5LZChhKSwhMSx0aGlzLm9wdGlvbnMudXNlQWRUYWdQYXJhbWV0ZXIpO2IuZGF0YS5ob21hZF92cGFpZF9jb21wYXRpYmxlPSJ0cnVlIjt0aGlzLm9wdGlvbnMuaG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3MmJihiLmRhdGEuaG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3M9Ik1lZGlhZmlsZSIpfWwuTGEoYix0aGlzLkxyLmJpbmQodGhpcyksdGhpcy5Jci5iaW5kKHRoaXMpKX0sQWc6ZnVuY3Rpb24oKXt2YXIgYT0wPHRoaXMuRWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6VkFTVEFkRGF0YSIpLmxlbmd0aD8KW106W10uc2xpY2UuY2FsbCh0aGlzLkVhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJBZCIpKTsiUGxheWxpc3QiPT10aGlzLkVhLmZpcnN0Q2hpbGQubm9kZU5hbWUmJmEuZm9yRWFjaChmdW5jdGlvbihhLGIsYyl7aWYoMT09YS5jaGlsZE5vZGVzLmxlbmd0aClpZihhLnBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09ZS5TYSl0cnl7dmFyIGQ9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoJzxBZCBzZXF1ZW5jZT0iJysoYisxKSsnIj48V3JhcHBlcj48VkFTVEFkVGFnVVJJPjwhW0NEQVRBWycrYS50ZXh0Q29udGVudC50cmltKCkrIl1dXHgzZTwvVkFTVEFkVGFnVVJJPjwvV3JhcHBlcj48L0FkPiIsInRleHQveG1sIik7Y1tiXT1kLmZpcnN0Q2hpbGR9Y2F0Y2goZil7Y1tiXT17fX1lbHNlIGMuc3BsaWNlKGIsMSl9KTt2YXIgYj1bXS5zbGljZS5jYWxsKHRoaXMuRWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6QWRCcmVhayIpKTswPj1iLmxlbmd0aCYmCihiPVtdLnNsaWNlLmNhbGwodGhpcy5FYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWRCcmVhayIpKSk7dmFyIGM9W107Yi5mb3JFYWNoKGZ1bmN0aW9uKGEsYixkKXtpZigic3RhcnQiPT1hLmdldEF0dHJpYnV0ZSgidGltZU9mZnNldCIpJiYicHJlcm9sbCI9PWUuU2F8fCJlbmQiPT1hLmdldEF0dHJpYnV0ZSgidGltZU9mZnNldCIpJiYicG9zdHJvbGwiPT1lLlNhfHx0aGlzLm9yKGEuZ2V0QXR0cmlidXRlKCJ0aW1lT2Zmc2V0IikpfHxsLml1KCkpdHJ5e3ZhciBmPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6QWRUYWdVUkkiKTswPj1mLmxlbmd0aCYmKGY9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWRUYWdVUkkiKSk7dmFyIGg9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoJzxBZCBzZXF1ZW5jZT0iJysoYisxKSsnIj48V3JhcHBlcj48VkFTVEFkVGFnVVJJPjwhW0NEQVRBWycrZlswXS50ZXh0Q29udGVudC50cmltKCkrIl1dXHgzZTwvVkFTVEFkVGFnVVJJPjwvV3JhcHBlcj48L0FkPiIsCiJ0ZXh0L3htbCIpO2RbYl09aC5maXJzdENoaWxkO2MucHVzaChoKX1jYXRjaChnKXtmb3IoYT1bXS5zbGljZS5jYWxsKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkIikpLGI9MDtiPGEubGVuZ3RoO2IrKyljLnB1c2goYVtiXSl9fS5iaW5kKHRoaXMpKTthPWEuY29uY2F0KGMpO3JldHVybiBhPWEuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgic2VxdWVuY2UiKT9OdW1iZXIoYS5nZXRBdHRyaWJ1dGUoInNlcXVlbmNlIikpPE51bWJlcihiLmdldEF0dHJpYnV0ZSgic2VxdWVuY2UiKSk/LTE6MTowfSl9LG9yOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMub3B0aW9ucy5jb250ZW50VmlkZW8sYz10aGlzLm9wdGlvbnMudGltZU9mZnNldERlbHRhfHwxMCxkPTA7aWYoIShhJiZiJiZiLmR1cmF0aW9uJiZiLmN1cnJlbnRUaW1lKSlyZXR1cm4hMTswPD1hLmluZGV4T2YoIiUiKT9kPWIuZHVyYXRpb24vMTAwKnBhcnNlSW50KGEpOjA8PWEuaW5kZXhPZigiOiIpJiYKKDA8PWEuaW5kZXhPZigiLiIpJiYoYT1hLnN1YnN0cmluZygwLGEuaW5kZXhPZigiLiIpKSksYT1hLnNwbGl0KCI6IiksYT1hLnJldmVyc2UoKSxkPXBhcnNlSW50KGFbMF0pKzYwKnBhcnNlSW50KGFbMV0pKzM2MDAqcGFyc2VJbnQoYVsyXSkpO3JldHVybiBkJiZNYXRoLmFicyhkLXBhcnNlSW50KGIuY3VycmVudFRpbWUpKTw9Yz8hMDohMX0sTHI6ZnVuY3Rpb24oYSl7dGhpcy5mdChhKTt0cnl7dGhpcy5FYT1hLnJlc3BvbnNlWE1MLHRoaXMuRWF8fCh0aGlzLkVhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEucmVzcG9uc2VUZXh0LCJ0ZXh0L3htbCIpKX1jYXRjaChiKXt0aGlzLm9hKHRoaXMuUmEody5WZCkpfXRoaXMuVz10aGlzLkFnKCk7dGhpcy5tYz10aGlzLm9mKCk7dGhpcy5rYz10aGlzLkxoKCk7dGhpcy5XLmxlbmd0aD90aGlzLkZjKCk6dGhpcy5vYSh0aGlzLlJhKHcuT2Mse2Vycm9yOnRoaXMuemY/Ri5VZDpGLkdmfSkpfSxNcjpmdW5jdGlvbihhKXt0cnl7dGhpcy5FYXx8Cih0aGlzLkVhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEsInRleHQveG1sIikpfWNhdGNoKGIpe3RoaXMub2EodGhpcy5SYSh3LlZkKSl9dGhpcy5XPXRoaXMuQWcoKTt0aGlzLm1jPXRoaXMub2YoKTt0aGlzLmtjPXRoaXMuTGgoKTt0aGlzLlcubGVuZ3RoP3RoaXMuRmMoKTp0aGlzLm9hKHRoaXMuUmEody5PYyx7ZXJyb3I6dGhpcy56Zj9GLlVkOkYuR2Z9KSl9LElyOmZ1bmN0aW9uKCl7dGhpcy5vYSh0aGlzLlJhKHcuRmYse2RlcHRoOmF9KSl9LEZjOmZ1bmN0aW9uKCl7dGhpcy5VPXRoaXMuVy5zaGlmdCgpO3RoaXMucXIoKT90aGlzLnN1KCk/KGErKyxuZXcgYih0aGlzLHRoaXMuSWcoKSxoLHtBZFN5c3RlbTp0aGlzLlpwKCksdnBhaWQ6dGhpcy5vcHRpb25zLnZwYWlkfSkpOnRoaXMub2EodGhpcy5SYSh3LklmKSk6KGE9MCx0aGlzLlF1KCkmJnRoaXMuVGUodGhpcy5SbygpKSl9LE9lOmZ1bmN0aW9uKCl7dGhpcy5tYz8odGhpcy5tYz0xPHRoaXMuVy5sZW5ndGgsCnRoaXMuVy5sZW5ndGgmJnRoaXMuRmMoKSk6dGhpcy5wYXJlbnQuT2UoKX0sa2g6ZnVuY3Rpb24oKXt0aGlzLmtjPyh0aGlzLmtjPTE8dGhpcy5XLmxlbmd0aCx0aGlzLlcubGVuZ3RoJiZ0aGlzLkZjKCkpOnRoaXMucGFyZW50LmtoKCl9LFF1OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHUoKT90aGlzLm91KCk/ITA6KC0xIT10aGlzLnljKCk/dGhpcy5vYSh0aGlzLlJhKHcuQmYpKTp0aGlzLm9hKHRoaXMuUmEody5qaikpLCExKToodGhpcy5vYSh0aGlzLlJhKHcuT2MsRi5IZikpLCExKX0sVGU6ZnVuY3Rpb24oYSl7dGhpcy5zYXx8KHRoaXMuc2E9IiIpO2EuT2E9YS5PYS5jb25jYXQodGhpcy5LZSgpKTthLnJiPWEucmI/YS5yYjp0aGlzLm1jO2EuamM9YS5qYz9hLmpjOnRoaXMua2M7YS5XYT1hLldhP2EuV2E6LTEhPXRoaXMuc2EuaW5kZXhPZigic21hcnRjbGlwLm5ldCIpJiYhdGhpcy5vcHRpb25zLndnO3RoaXMucGFyZW50LlRlKGEpfSxSbzpmdW5jdGlvbigpe3ZhciBhPW5ldyBTYTsKdGhpcy5zYXx8KHRoaXMuc2E9IiIpO2EuZHVyYXRpb249dGhpcy55YygpO2EuTT10aGlzLkZnKCk7YS5PYj10aGlzLmJxKCk7YS5vcmlnaW49dGhpczthLkE9dGhpcy5ZcCgpO2EuaGY9dGhpcy5ycShhLmR1cmF0aW9uKTthLldhPWEuV2E/YS5XYTotMSE9dGhpcy5zYS5pbmRleE9mKCJzbWFydGNsaXAubmV0IikmJiF0aGlzLm9wdGlvbnMud2c7cmV0dXJuIGF9LG9hOmZ1bmN0aW9uKGIpe3RoaXMuc2F8fCh0aGlzLnNhPSIiKTtiLldhPWIuV2E/Yi5XYTotMSE9dGhpcy5zYS5pbmRleE9mKCJzbWFydGNsaXAubmV0IikmJiF0aGlzLm9wdGlvbnMud2c7dGhpcy5VJiYoYi5PYT1iLmVycm9yLmNvZGUhPXcuQmYuY29kZT9iLk9hLmNvbmNhdCh0aGlzLmNxKCkpOmIuT2EuY29uY2F0KHRoaXMubHEoKSkpO3RoaXMuVy5sZW5ndGg/KHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5RYiYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucGFyZW50LlFiJiZ0aGlzLnBhcmVudC5RYihiKSxhPTAsdGhpcy5GYygpKToKKHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5vYSYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucGFyZW50Lm9hJiZ0aGlzLnBhcmVudC5vYShiKSxhPTApfSxRYjpmdW5jdGlvbihhKXt0aGlzLnBhcmVudC5RYihhKX0scWc6ZnVuY3Rpb24oYSxiKXt0aGlzLm9hKHRoaXMuUmEoYSxiKSl9LFJhOmZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IFRhKGEsYik7Yy5vcmlnaW49dGhpcztyZXR1cm4gY30sc3U6ZnVuY3Rpb24oKXtyZXR1cm4gYTxofSxwdTpmdW5jdGlvbigpe3JldHVybiAwPHRoaXMuRmcoKS5sZW5ndGh9LG91OmZ1bmN0aW9uKCl7cmV0dXJuIDE8dGhpcy55YygpfSxvZjpmdW5jdGlvbigpe3JldHVybiAxPHRoaXMuVy5maWx0ZXIoZnVuY3Rpb24oYSl7dmFyIGI9ITE7YS5nZXRBdHRyaWJ1dGUmJihiPTA8TnVtYmVyKGEuZ2V0QXR0cmlidXRlKCJzZXF1ZW5jZSIpKSk7cmV0dXJuIGJ9KS5sZW5ndGh9LExoOmZ1bmN0aW9uKCl7dmFyIGE9ITE7dGhpcy5XJiYyPD10aGlzLlcubGVuZ3RoJiYKIXRoaXMub2YoKSYmKGE9ITApO3JldHVybiBhfSxmdDpmdW5jdGlvbihhKXt0aGlzLnNhPSJVTktOT1dOIjt0cnl7ZC5wdXNoKHRoaXMuc2E9YS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1VcmwiKSl9Y2F0Y2goYil7dGhpcy5zYT0iVU5LTk9XTiJ9dHJ5e3RoaXMuemY9YS5nZXRSZXNwb25zZUhlYWRlciYmYS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1WcGFpZC1JZ25vcmVkIil9Y2F0Y2goYyl7fX0scXI6ZnVuY3Rpb24oKXtyZXR1cm4gMDx0aGlzLklnKCkubGVuZ3RofSxJZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlKHRoaXMuVSwiVkFTVEFkVGFnVVJJIil9LFpwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmUodGhpcy5VLCJBZFN5c3RlbSIpfSxLZTpmdW5jdGlvbigpe2Zvcih2YXIgYT0iSW1wcmVzc2lvbiBUcmFja2luZyBDbGlja1RyYWNraW5nIEVycm9yIFZpZXdhYmxlIE5vdFZpZXdhYmxlIHZpZXdhYmxlX2ltcHJlc3Npb24gbWVhc3VyYWJsZV9pbXByZXNzaW9uIi5zcGxpdCgiICIpLApiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtbXS5zbGljZS5jYWxsKHRoaXMuVS5nZXRFbGVtZW50c0J5VGFnTmFtZShkKSkuZm9yRWFjaChmdW5jdGlvbihhKXtpZihhJiYhdGhpcy5WZyhhKSl7dmFyIGM9YS5nZXRBdHRyaWJ1dGUoImV2ZW50Iil8fGQudG9Mb3dlckNhc2UoKTtiLnB1c2goe3R5cGU6Yyx1cmw6dGhpcy5pYihhKX0pfX0uYmluZCh0aGlzKSl9cmV0dXJuIGJ9LFZnOmZ1bmN0aW9uKGEpe3JldHVybiBhPyJDb21wYW5pb24iPT1hLm5vZGVOYW1lPyEwOnRoaXMuVmcoYS5wYXJlbnROb2RlKTohMX0sbHE6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLktlKCk7cmV0dXJuIGE9YS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuImltcHJlc3Npb24iPT1hLnR5cGV9KX0sY3E6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLktlKCk7cmV0dXJuIGE9YS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuImVycm9yIj09YS50eXBlfSl9LGJxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWIodGhpcy5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJDbGlja1Rocm91Z2giKVswXSl9LApGZzpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIk1lZGlhRmlsZSIpLGI9W10sYz0wO2M8YS5sZW5ndGg7YysrKWIucHVzaCh7aWQ6YVtjXS5nZXRBdHRyaWJ1dGUoImlkIiksdHlwZTphW2NdLmdldEF0dHJpYnV0ZSgidHlwZSIpLFBhOmFbY10uZ2V0QXR0cmlidXRlKCJiaXRyYXRlIiksd2lkdGg6YVtjXS5nZXRBdHRyaWJ1dGUoIndpZHRoIiksaGVpZ2h0OmFbY10uZ2V0QXR0cmlidXRlKCJoZWlnaHQiKSxUdjphW2NdLmdldEF0dHJpYnV0ZSgiZGVsaXZlcnkiKSx1cmw6dGhpcy5pYihhW2NdKX0pO3ZhciBkPXRoaXMub3B0aW9ucy5QYXx8MUUzO3RyeXt2YXIgaD1iLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4tMSE9YS50eXBlLmluZGV4T2YoIm1wNCIpfSkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBNYXRoLmFicyhkLWEuUGEpLU1hdGguYWJzKGQtYi5QYSl9KSxlPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybi0xPT1hLnR5cGUuaW5kZXhPZigibXA0Iil9KS5zb3J0KGZ1bmN0aW9uKGEsCmIpe3JldHVybiBNYXRoLmFicyhkLWEuUGEpLU1hdGguYWJzKGQtYi5QYSl9KSxiPWguY29uY2F0KGUpfWNhdGNoKGcpe31yZXR1cm4gYn0sWXA6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImFkUGFyYW1ldGVycyIpO2EmJjAhPWEubGVuZ3RofHwoYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkUGFyYW1ldGVycyIpKTtmb3IodmFyIGI9IiIsYz0hMSxkPVtdLGI9ITEsaD0iIixlPVtdLGc9IiIsZz0wO2c8YS5sZW5ndGg7ZysrKXtoPWI9dGhpcy5xZChhW2ddKTt0cnl7Yz1KU09OLnBhcnNlKGIpfWNhdGNoKGspe2M9Yn1kLnB1c2goYyk7ZS5wdXNoKGgpfTE8YS5sZW5ndGg/KGI9ZCxnPWgpOihiPWMsZz1lKTtyZXR1cm57QWRQYXJhbWV0ZXJzOmIsT3JpZ2luYWxBZFBhcmFtZXRlcnM6Zy50b1N0cmluZygpfX0seWM6ZnVuY3Rpb24oKXt2YXIgYTt0cnl7cmV0dXJuIGE9dGhpcy5pYih0aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkR1cmF0aW9uIilbMF0pLAphPWEuc3BsaXQoIjoiKSxhPTM2MDAqK2FbMF0rNjAqK2FbMV0rICthWzJdLGlzTmFOKGEpPy0xOmF9Y2F0Y2goYil7cmV0dXJuLTF9fSxycTpmdW5jdGlvbihhKXt2YXIgYj0hMSxjPSExLGQ9ITE7dHJ5e2M9dGhpcy5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJMaW5lYXIiKVswXSxkPWMuZ2V0QXR0cmlidXRlKCJza2lwb2Zmc2V0IiksYj1lLld0KGQsYSksMD5iJiYoYj0hMSl9Y2F0Y2goaCl7Yj0hMX1yZXR1cm4gYn0scmU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZhLmdldEVsZW1lbnRzQnlUYWdOYW1lKGIpLmxlbmd0aD90aGlzLmliKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYilbMF0pOiIifSx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5jaGlsZE5vZGVzJiZhLmNoaWxkTm9kZXNbMF0/YS5jaGlsZE5vZGVzWzBdLm5vZGVWYWx1ZToiIn0saWI6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5xZChhKToiIn0scWQ6ZnVuY3Rpb24oYSl7dmFyIGI9CnRoaXMudWUoYSk7YiYmKGI9Yi50cmltKCkpOyFiJiZhLnRleHRDb250ZW50JiYoYj1hLnRleHRDb250ZW50LGI9Yi50cmltKCkpO3JldHVybiBifX19KShjKTt2YXIgVD1jLnZtfHxUO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLiRyPXRoaXMuYVs1XTt0aGlzLnBpPXRoaXMuYVszXTt0aGlzLkNvPXRoaXMuYVs2XTt0aGlzLmVqPXRoaXMuYVsxXTt0aGlzLm5uPXRoaXMuYVs2XTt0aGlzLnFsPXRoaXMuYVs4XTt0aGlzLktpPXRoaXMuYVsxXTt0aGlzLkFpPXRoaXMuYVs4XTt0aGlzLmo9dGhpcy5hWzddfWMuTnE9YjtiLnByb3RvdHlwZT17WnI6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLiRyOnRoaXMub2koYSl9LG9pOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5waTp0aGlzLkJvKGEpfSxCbzpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuQ286dGhpcy5kaihhKX0sCmRqOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5lajp0aGlzLm1uKGEpfSxtbjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMubm46dGhpcy5wbChhKX0scGw6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLnFsOnRoaXMuSmkoYSl9LEppOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5LaTp0aGlzLnppKGEpfSx6aTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuQWk6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBVYT1jLk5xfHxVYSx4Yz1uZXcgVWEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD14Yy5acig0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuZHVyYXRpb249MDt0aGlzLk9hPVtdO3RoaXMuTT1bXTt0aGlzLk9iPSIiO3RoaXMuQT10aGlzLmpjPXRoaXMucmI9ITE7dGhpcy54ZT0KdGhpcy5vcmlnaW49bnVsbDt0aGlzLnllPSIifWMucmw9YjtiLnByb3RvdHlwZT17TW86ZnVuY3Rpb24oKXtmb3IodmFyIGE9ITEsYj0wO2I8dGhpcy5NLmxlbmd0aDtiKyspaWYoMDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24vZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC9lY21hc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQvamF2YXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJ0ZXh0L2pzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC94LWVjbWFzY3JpcHQiKXx8CjA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1qYXZhc2NyaXB0IikpYT0hMDtyZXR1cm4gYX0sanE6ZnVuY3Rpb24oKXtpZighdGhpcy54ZSYmdGhpcy5vcmlnaW4mJnRoaXMub3JpZ2luLkVhKXt2YXIgYT10aGlzLm9yaWdpbi5FYTtpZihhLmdldEVsZW1lbnRzQnlUYWdOYW1lKWZvcih2YXIgYT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJbXByZXNzaW9uIiksYj0iIixjPTA7YzxhLmxlbmd0aDtjKyspKGI9YVtjXS5nZXRBdHRyaWJ1dGUoImlkIikpJiYwPD1iLmluZGV4T2YoIkhPTUFEIikmJih0aGlzLnhlPWFbY10pfXJldHVybiB0aGlzLnhlfSxEZzpmdW5jdGlvbigpe2lmKHRoaXMueWUpcmV0dXJuIHRoaXMueWU7dmFyIGE9IiI7KGE9dGhpcy5qcSgpKSYmYS5nZXRBdHRyaWJ1dGU/KGE9YS5nZXRBdHRyaWJ1dGUoImlkIiksYT1hLnJlcGxhY2UoIkhPTUFEXyIsIiIpLChhPWEucmVwbGFjZSgiSE9NQUQiLCIiKSl8fChhPSJlbXB0eSIpKTphPSJub19pbXBfbm9kZSI7CnJldHVybiB0aGlzLnllPWF9LHVxOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPSExLGI9MDtiPHRoaXMuTS5sZW5ndGg7YisrKWlmKDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24vamF2YXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQvZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJ0ZXh0L2phdmFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC9qc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1lY21hc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1qYXZhc2NyaXB0IikpYT0KdGhpcy5NW2JdO3JldHVybiBhfX19KShjKTt2YXIgU2E9Yy5ybHx8U2E7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMudW09dGhpcy5hWzldO3RoaXMuSHE9dGhpcy5hWzZdO3RoaXMucXA9dGhpcy5hWzddO3RoaXMubXM9dGhpcy5hWzldO3RoaXMuYWw9dGhpcy5hWzRdO3RoaXMuVnA9dGhpcy5hWzEwXTt0aGlzLmVyPXRoaXMuYVs2XTt0aGlzLmo9dGhpcy5hWzVdfWMucmo9YjtiLnByb3RvdHlwZT17dG06ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnVtOnRoaXMuR3EoYSl9LEdxOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5IcTp0aGlzLnBwKGEpfSxwcDpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMucXA6dGhpcy5scyhhKX0sbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLm1zOnRoaXMuJGsoYSl9LCRrOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5hbDoKdGhpcy5VcChhKX0sVXA6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLlZwOnRoaXMuZHIoYSl9LGRyOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5lcjp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLmo6YX19fSkoYyk7dmFyIFZhPWMucmp8fFZhLHljPW5ldyBWYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXljLnRtKDQpO3ZhciB3PXtWZDp7dHlwZToiZXJyb3IiLGNvZGU6MTAwLG1lc3NhZ2U6IlhNTCBwYXJzaW5nIGVycm9yIix4YToiWE1MX1BBUlNFX0VSUk9SIn0samo6e3R5cGU6ImVycm9yIixjb2RlOjIwMixtZXNzYWdlOiJWaWRlbyBwbGF5ZXIgZXhwZWN0aW5nIGRpZmZlcmVudCBkdXJhdGlvbi4iLHhhOiJEVVJBVElPTl9FUlJPUiJ9LE9jOnt0eXBlOiJlcnJvciIsY29kZTozMDMsbWVzc2FnZToiTm8gYWRzIFZBU1QgcmVzcG9uc2UgYWZ0ZXIgb25lIG9yIG1vcmUgV3JhcHBlcnMuIEFsc28gaW5jbHVkZXMgbnVtYmVyIG9mIGVtcHR5IFZBU1QgcmVzcG9uc2VzIGZyb20gZmFsbGJhY2suIiwKeGE6IkVNUFRZX1ZBU1QifSxJZjp7dHlwZToiY3JpdGljYWwiLGNvZGU6MzAyLG1lc3NhZ2U6IldyYXBwZXIgbGltaXQgcmVhY2hlZCwgYXMgZGVmaW5lZCBieSB0aGUgdmlkZW8gcGxheWVyLiBUb28gbWFueSBXcmFwcGVyIHJlc3BvbnNlcyBoYXZlIGJlZW4gcmVjZWl2ZWQgd2l0aCBubyBJbkxpbmUgcmVzcG9uc2UuIix4YToiV1JBUFBFUl9MSU1JVF9SRUFDSEVEIn0sRmY6e3R5cGU6ImVycm9yIixjb2RlOjMwMSxtZXNzYWdlOiJUaW1lb3V0IG9mIFZBU1QgVVJJIHByb3ZpZGVkIGluIFdyYXBwZXIgZWxlbWVudCwgb3Igb2YgVkFTVCBVUkkgcHJvdmlkZWQgaW4gYSBzdWJzZXF1ZW50IFdyYXBwZXIgZWxlbWVudC4gSW5jbHVkZXMgcmVxdWVzdCBlcnJvcnMgc3VjaCBhcyBpbnZhbGlkIFVSSSwgdW5yZWFjaGFibGUgb3IgcmVxdWVzdCB0aW1lb3V0IGZvciBVUkksIGFuZCBzZWN1cml0eSBvciBvdGhlciBleGNlcHRpb25zIHJlbGF0ZWQgdG8gcmVxdWVzdGluZyBhIFZBU1QgVVJJLiIsCnhhOiJMT0FEX0VSUk9SIn0sVGQ6e3R5cGU6ImVycm9yIixjb2RlOjQwMyxtZXNzYWdlOiJDb3VsZCBub3QgZmluZCBNZWRpYUZpbGUgdGhhdCBpcyBzdXBwb3J0ZWQgYnkgdGhpcyB2aWRlbyBwbGF5ZXIsIGJhc2VkIG9uIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBNZWRpYUZpbGUgZWxlbWVudC4iLHhhOiJOT19QTEFZQUJMRV9TT1VSQ0VTIn0sS3Y6e3R5cGU6ImVycm9yIixjb2RlOjQwNSxtZXNzYWdlOiJQcm9ibGVtIGRpc3BsYXlpbmcgTWVkaWFGaWxlLiIseGE6Ik1FRElBRklMRV9FUlJPUiJ9LEJmOnt0eXBlOiJlcnJvciIsY29kZTo5OTksbWVzc2FnZToiMSBzZWMgZHVtbXkgYWQiLHhhOiJEVU1NWV9BRCJ9fSxGPXtHZjp7dHlwZToiZXJyb3IiLGNvZGU6MzAzMSxtZXNzYWdlOiJubyBhZHMiLHhhOiJOT19BRFMifSxIZjp7dHlwZToiZXJyb3IiLGNvZGU6MzAzMixtZXNzYWdlOiJubyBtZWRpYWZpbGVzIHNwZWNpZmllZCIseGE6Ik5PX01FRElBRklMRVMifSxMdjp7dHlwZToiZXJyb3IiLApjb2RlOjMwMzMsbWVzc2FnZToibm8gcGxheWFibGUgbWVkaWFmaWxlcyIseGE6Ik5PX1BMQVlBQkxFX01FRElBRklMRVMifSxVZDp7dHlwZToiZXJyb3IiLGNvZGU6MzAzNCxtZXNzYWdlOiJ2cGFpZCBpZ25vcmVkIix4YToiVlBBSURfSUdOT1JFRCJ9fTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5vcz10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs0XX1jLnJuPWI7Yi5wcm90b3R5cGU9e25zOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5vczp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLmo6YX19fSkoYyk7dmFyIFdhPWMucm58fFdhLHpjPW5ldyBXYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXpjLm5zKDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsCmIpe3RoaXMuZXJyb3I9YTt0aGlzLm1kPWI7dGhpcy5PYT1bXTt0aGlzLm9yaWdpbj1udWxsfWMuTGo9YjtiLnByb3RvdHlwZT17fX0pKGMpO3ZhciBUYT1jLkxqfHxUYTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5DbT10aGlzLmFbMV07dGhpcy5YcT10aGlzLmFbOV07dGhpcy5Pbj10aGlzLmFbNl07dGhpcy5TcD10aGlzLmFbNV07dGhpcy5Baz10aGlzLmFbOV07dGhpcy5SdD10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVs3XX1jLmNyPWI7Yi5wcm90b3R5cGU9e0JtOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuQ206dGhpcy5XcShhKX0sV3E6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLlhxOnRoaXMuTm4oYSl9LE5uOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Pbjp0aGlzLlJwKGEpfSxScDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuU3A6dGhpcy56ayhhKX0sCnprOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5Bazp0aGlzLlF0KGEpfSxRdDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuUnQ6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBYYT1jLmNyfHxYYSxBYz1uZXcgWGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1BYy5CbSg0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYihhLGIpe3RoaXMuY29uZj1ifHx7fTt0aGlzLmY9YTt0aGlzLmhiPWEuQmcoKTt0aGlzLkc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5HLmlkPWUuYmEoMTApO3RoaXMuRj1DLnBvcCgpO3RoaXMuRnx8KGUudHJhY2soInN0YXRzX2hkX25vVmlkZW9UYWdMZWZ0IiwiIiwhMCksdGhpcy5GPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIiksdGhpcy5GLmlkPQoiYWRYZGlzcGxheSIsdGhpcy5GLnN0eWxlLmRpc3BsYXk9ImJsb2NrIik7dGhpcy5EPXt9O3RoaXMuWmY9ITE7dGhpcy5OYj1bXX1jLnFqPWI7Yi5wcm90b3R5cGU9e1RwOmZ1bmN0aW9uKGEpe3ZhciBiPXt9LGM9ITEsZT0wLGI9MCxnPXt9O2EuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiYoYj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9ImZpeGVkIixlPWIubGVmdCxiPWIudG9wKTtnPXt4OmUseTpifTtnLnBvc2l0aW9uPWM7cmV0dXJuIGd9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuY29uZi51c2VCb3VuZGluZ0NsaWVudFJlY3QpcmV0dXJuIHRoaXMuVHAoYSk7Zm9yKHZhciBiPTAsYz0wLGU9ITEsZz10aGlzLk9xKGEpLGs9e307YTspYis9YS5vZmZzZXRMZWZ0K2EuY2xpZW50TGVmdCxjKz1hLm9mZnNldFRvcCthLmNsaWVudFRvcCxhPWEub2Zmc2V0UGFyZW50O2cmJihhPXZvaWQgMCE9PXdpbmRvdy5wYWdlWU9mZnNldD93aW5kb3cucGFnZVlPZmZzZXQ6KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8CmRvY3VtZW50LmJvZHkucGFyZW50Tm9kZXx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wLGIrPXZvaWQgMCE9PXdpbmRvdy5wYWdlWE9mZnNldD93aW5kb3cucGFnZVhPZmZzZXQ6KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlfHxkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0LGMrPWEsdGhpcy5jb25mLnBvc2l0aW9uSWZGaXhlZCYmKGU9dGhpcy5jb25mLnBvc2l0aW9uSWZGaXhlZCkpO2s9e3g6Yix5OmN9O2UmJihrLnBvc2l0aW9uPWUpO3JldHVybiBrfSxjdTpmdW5jdGlvbigpe3RoaXMuWmY9ITB9LFdoOmZ1bmN0aW9uKCl7dGhpcy5GPUMucG9wKCk7dGhpcy5GfHwoZS50cmFjaygic3RhdHNfaGRfbm9WaWRlb1RhZ0xlZnQiLCIiLCEwKSx0aGlzLkY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmlkZW8iKSx0aGlzLkYuaWQ9ImFkWGRpc3BsYXkiLHRoaXMuRi5zdHlsZS5kaXNwbGF5PSJibG9jayIpfSxwaDpmdW5jdGlvbigpe3RoaXMuZi5wYXVzZSgpOwplLnYoay5mZCx0aGlzLmYudSgpKX0scHQ6ZnVuY3Rpb24oKXt0aGlzLlpmfHwodGhpcy5mLnBsYXkoKSxlLnYoay5nZCx0aGlzLmYudSgpKSl9LEpjOmZ1bmN0aW9uKCl7dmFyIGE9MjE0NzQ4MzY0Nzt0aGlzLmNvbmYuekluZGV4JiYoYT10aGlzLmNvbmYuekluZGV4KTt0aGlzLmYucGF1c2UoKTt0aGlzLkcuc3R5bGUuekluZGV4PWE7dGhpcy5HLnN0eWxlLm1hcmdpbkxlZnQ9ImF1dG8iO3RoaXMuRy5zdHlsZS5tYXJnaW5SaWdodD0iYXV0byI7dGhpcy5HLnN0eWxlLmJhY2tncm91bmRDb2xvcj0iIzAwMDAwMCI7dGhpcy5HLnN0eWxlLmJveFNpemluZz10aGlzLmhiLnN0eWxlLmJveFNpemluZzt0aGlzLkcuc3R5bGUud2lkdGg9dGhpcy5oYi5vZmZzZXRXaWR0aCswKyJweCI7dGhpcy5HLnN0eWxlLmhlaWdodD10aGlzLmhiLm9mZnNldEhlaWdodCswKyJweCI7dGhpcy5GLnN0eWxlLndpZHRoPXRoaXMuaGIub2Zmc2V0V2lkdGgrMCsicHgiO3RoaXMuRi5zdHlsZS5oZWlnaHQ9dGhpcy5oYi5vZmZzZXRIZWlnaHQrCjArInB4Ijt0aGlzLmdldFBvc2l0aW9uKHRoaXMuaGIpO3RoaXMuZi5IYyYmdGhpcy5mLkhjKCk/dGhpcy5mLkJnKCkuYXBwZW5kQ2hpbGQodGhpcy5HKTpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuRyk7d2luZG93LnNldFRpbWVvdXQodGhpcy5UYi5iaW5kKHRoaXMpLDEwKX0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0aGlzLmYuZXhpdEZ1bGxzY3JlZW4oKX0sT3E6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlLGM9ITE7YTspe2lmKGEuc3R5bGUmJigiZml4ZWQiPT1hLnN0eWxlLnBvc2l0aW9ufHxiJiYiZml4ZWQiPT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS5wb3NpdGlvbikpe2M9ITA7YnJlYWt9YT1hLnBhcmVudE5vZGV9cmV0dXJuIGN9LE1wOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0UG9zaXRpb24oYSk7Yi5wb3NpdGlvbj9iLnBvc2l0aW9uPWIucG9zaXRpb246Yi5wb3NpdGlvbj0iYWJzb2x1dGUiO2Iud2lkdGg9CmEub2Zmc2V0V2lkdGg7Yi5oZWlnaHQ9YS5vZmZzZXRIZWlnaHQ7cmV0dXJuIGJ9LFRiOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuTXAodGhpcy5oYik7aWYoYi54IT10aGlzLkQueHx8Yi55IT10aGlzLkQueXx8Yi5wb3NpdGlvbiE9dGhpcy5ELnBvc2l0aW9ufHxiLndpZHRoIT10aGlzLkQud2lkdGh8fGIuaGVpZ2h0IT10aGlzLkQuaGVpZ2h0fHxhKXtpZigwPHRoaXMuRC53aWR0aCYmMDx0aGlzLkQuaGVpZ2h0JiYwPT1iLndpZHRoJiYwPT1iLmhlaWdodCl7dGhpcy53ZSgpO3JldHVybn10aGlzLkQ9Yjt0aGlzLmYuSGMoKT8odGhpcy5HLnN0eWxlLmxlZnQ9IjBweCIsdGhpcy5HLnN0eWxlLnRvcD0iMHB4Iik6KHRoaXMuRy5zdHlsZS5sZWZ0PWIueCsicHgiLHRoaXMuRy5zdHlsZS50b3A9Yi55KyJweCIpO3RoaXMuRy5zdHlsZS53aWR0aD1iLndpZHRoKyJweCI7dGhpcy5HLnN0eWxlLmhlaWdodD1iLmhlaWdodCsicHgiO3RoaXMuRy5zdHlsZS5wb3NpdGlvbj1iLnBvc2l0aW9uOwp0aGlzLkYuc3R5bGUud2lkdGg9Yi53aWR0aCsicHgiO3RoaXMuRi5zdHlsZS5oZWlnaHQ9Yi5oZWlnaHQrInB4Ijtmb3IoYT0wO2E8dGhpcy5OYi5sZW5ndGg7YSsrKXRoaXMuTmJbYV0oe3dpZHRoOmIud2lkdGgsaGVpZ2h0OmIuaGVpZ2h0fSl9ZS5IaCh0aGlzLkcpJiZ3aW5kb3cuc2V0VGltZW91dCh0aGlzLlRiLmJpbmQodGhpcyksMTApfSxZZjpmdW5jdGlvbihhKXt0aGlzLk5ifHwodGhpcy5OYj1bXSk7ImZ1bmN0aW9uIj09dHlwZW9mIGEmJnRoaXMuTmIucHVzaChhKX0sd2U6ZnVuY3Rpb24oKXt0aGlzLkcmJnRoaXMuRy5wYXJlbnROb2RlJiZ0aGlzLkcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCYmdGhpcy5HLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5HKTt0aGlzLkYmJnRoaXMuRi5wYXVzZSYmdGhpcy5GLnBhdXNlKCl9fX0pKGMpO2Zvcih2YXIgWWE9Yy5xanx8WWEsQz1bXSxaYT0wOzEwMD5aYTtaYSsrKXt2YXIgTz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpOwpPLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjtPLmlkPWUuYmEoMTApO08uY29udHJvbHM9ITA7Qy5wdXNoKE8pfXZhciBLPSExLGRhPSExO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIseik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIseik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHopO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIseik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuc3A9dGhpcy5hWzhdO3RoaXMubXA9dGhpcy5hWzRdO3RoaXMuYXI9dGhpcy5hWzJdO3RoaXMuVXM9dGhpcy5hWzhdO3RoaXMueW89dGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbNV19Yy5ZbD1iO2IucHJvdG90eXBlPXtycDpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLnNwOnRoaXMubHAoYSl9LGxwOmZ1bmN0aW9uKGEpe3JldHVybiAzPAphP3RoaXMubXA6dGhpcy4kcShhKX0sJHE6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLmFyOnRoaXMuVHMoYSl9LFRzOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5Vczp0aGlzLnhvKGEpfSx4bzpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMueW86dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciAkYT1jLllsfHwkYSxCYz1uZXcgJGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1CYy5ycCg0KTsoZnVuY3Rpb24oYyl7Yy5mbD11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLmVsZW1lbnRJZCxhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGIpO2F8fChiPXRoaXMuZ2V0UmF3UGxheWVyKCkuZ2V0RWxlbWVudElkKCksCmE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYikpO3RoaXMuWShhKTt0aGlzLkZkKGIpO3RoaXMubWcoKX0sRmQ6ZnVuY3Rpb24oYil7dGhpcy5pZHx8KHRoaXMuaWQ9Yil9LG1nOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5JYSgpLGE9dGhpcy52aWRlb1RhZzthfHwoKGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXSl8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdKSxhP3RoaXMuWihhKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubWcoKX0uYmluZCh0aGlzKSwxMDApKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBsYXkoKX0sVmE6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpO2IuaXNQbGF5aW5nJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5pc1BsYXlpbmcmJmIuaXNQbGF5aW5nKCkmJnRoaXMucGF1c2UoKX0sCkFlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4gYi5wYXJhbWV0ZXJzJiYhMT09PWIucGFyYW1ldGVycy5hdXRvcGxheT8hMTohMH0sTzpmdW5jdGlvbigpe3JldHVybiJPb3lhbGEifSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGI/Yi5tdXRlZDohMH0sdTpmdW5jdGlvbigpe3ZhciBiPXt9LGE9dGhpcy52aWRlb1RhZyxjPXRoaXMuSWEoKTtpZihiLnZpZGVvVGFnPWEpYi52aWRlb1RhZ0lkPWEuaWQ7aWYoYi5jb250YWluZXI9YyliLmNvbnRhaW5lcklkPWMuaWQ7Yi5wbGF5ZXI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4gYn19KX0pKGMpO3ZhciBhYj1jLmZsfHxhYjsoZnVuY3Rpb24oYyl7Yy5kbD12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9ZWEoKTt0aGlzLk1iPXRoaXMuTWJ8fCExO3RoaXMuUWY9dGhpcy5TZj10aGlzLlJnPXRoaXMuZGE9dGhpcy5zZj0KITE7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5BRFNfRVJST1IsImV4YW1wbGUiLGZ1bmN0aW9uKGEsYil7dGhpcy5JcChhLGIpfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5BRFNfUExBWUVELCJleGFtcGxlIixmdW5jdGlvbigpe3RoaXMuc2Y9ITA7dGhpcy5SZyYmdGhpcy5oZygpfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5QTEFZSU5HLCJleGFtcGxlIixmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFBsYXllcigpLnpiO2EmJmEuVWImJnRoaXMuZ2V0UGxheWVyKCkucGF1c2UoKX0uYmluZCh0aGlzKSwxMDApfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5JTklUSUFMX1BMQVksImV4YW1wbGUiLGZ1bmN0aW9uKCl7dGhpcy5jZCgpO3RoaXMuUmc9ITA7dGhpcy5oZygpfS5iaW5kKHRoaXMpKTt0aGlzLmNnKCl9LApoZzpmdW5jdGlvbigpe2lmKCF0aGlzLk1iKXt0aGlzLmNkKCk7aWYoIXRoaXMuc2YmJiF0aGlzLmNkKCkpcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCksITA7dGhpcy5zZiYmdGhpcy5RZiYmIXRoaXMuU2YmJndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCl9fSxjZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuR2coImFkTWFuYWdlckNvbnRyb2xsZXIiKTtyZXR1cm4gYiYmYi5hZE1hbmFnZXJzJiZiLmFkTWFuYWdlcnNbImdvb2dsZS1pbWEtYWRzLW1hbmFnZXIiXX0sR2c6ZnVuY3Rpb24oYil7Zm9yKHZhciBhPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCksYz0wO2M8YS5tb2R1bGVzLmxlbmd0aDtjKyspe3ZhciBkPWEubW9kdWxlc1tjXTtpZihkLm5hbWU9PT1iKXJldHVybiBkLmluc3RhbmNlfX0sY2c6ZnVuY3Rpb24oKXtpZih0aGlzLmNkKCkpe3ZhciBiPXRoaXMuR2coImFkTWFuYWdlckNvbnRyb2xsZXIiKS5hZE1hbmFnZXJzWyJnb29nbGUtaW1hLWFkcy1tYW5hZ2VyIl07CnRoaXMuU2Y9MDxiLmdldEN1cnJlbnRUaW1lKCk7dGhpcy5RZj1iLlJ2fXRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmNnKCl9LmJpbmQodGhpcyksMTAwKX0sVXY6ZnVuY3Rpb24oYil7cmV0dXJuIGIuaXNBZFBsYXlpbmcmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmlzQWRQbGF5aW5nP2IuZ3coKTohMX0seWM6ZnVuY3Rpb24oYil7cmV0dXJuIGIuZ2V0QWREdXJhdGlvbiYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0QWREdXJhdGlvbj9iLnljKCk6LTF9LG1xOmZ1bmN0aW9uKGIpe3JldHVybiBiLmlzUGxheWluZyYmImZ1bmN0aW9uIj09dHlwZW9mIGIuaXNQbGF5aW5nP2IuaXNQbGF5aW5nKCk6LTF9LElwOmZ1bmN0aW9uKGIsYSl7dGhpcy5NYj1hLm1hdGNoKC9cZCsvKT9wYXJzZUludChhLm1hdGNoKC9cZCsvKVswXSk6MDsxMDA5PT10aGlzLk1ifHwzMDI9PXRoaXMuTWI/dGhpcy5kYT0hMDp0aGlzLm8oImFkZXJyb3IiLHRoaXMuTWIpO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLAoxMDApfSxlZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCk7dGhpcy5kYT8odGhpcy53KCksdGhpcy50YSgpKTpiLkFlKCk/KHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDJFMykpOnRoaXMubXEoYik/KHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDJFMykpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCl9fSl9KShjKTt2YXIgYmI9Yy5kbHx8YmI7KGZ1bmN0aW9uKGMpe2MuZ2w9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxucjpmdW5jdGlvbigpe3dpbmRvdy5PTy52bC5YbS5WbT93aW5kb3cuT08udmwuWG0uVm0uUHYoZnVuY3Rpb24oKXt9KTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubnIoKX0sMTAwKX0sZzpmdW5jdGlvbigpe3RoaXMuVWE9MTUwMDt2YXIgYj0KZWEoKTtpZihiJiZiLl9faW50ZXJuYWwmJmIuX19pbnRlcm5hbC5wbGF5ZXJzJiYwPGUudGUoYi5fX2ludGVybmFsLnBsYXllcnMpKWZvcih2YXIgYSBpbiBiLl9faW50ZXJuYWwucGxheWVycylpZihiLl9faW50ZXJuYWwucGxheWVycy5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGM9bmV3IGFiKGIuX19pbnRlcm5hbC5wbGF5ZXJzW2FdKTt0aGlzLk4oYyl8fCh0aGlzLlAoYyksKG5ldyBiYihjLHRoaXMuSykpLmcoKSl9dGhpcy5SKCl9fSl9KShjKTt2YXIgY2I9Yy5nbHx8Y2IsZGI9bmV3IGNiKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnlyPXRoaXMuYVszXTt0aGlzLlJrPXRoaXMuYVsyXTt0aGlzLkRqPXRoaXMuYVs2XTt0aGlzLnl0PXRoaXMuYVs5XTt0aGlzLm9tPXRoaXMuYVsxXTt0aGlzLkJ2PXRoaXMuYVs5XTt0aGlzLmhrPXRoaXMuYVs3XTt0aGlzLmNsPXRoaXMuYVs1XTsKdGhpcy5BbT10aGlzLmFbN107dGhpcy5qPXRoaXMuYVs5XX1jLnJyPWI7Yi5wcm90b3R5cGU9e3hyOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy55cjp0aGlzLlFrKGEpfSxRazpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuUms6dGhpcy5DaihhKX0sQ2o6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLkRqOnRoaXMueHQoYSl9LHh0OmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy55dDp0aGlzLm5tKGEpfSxubTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMub206dGhpcy5BdihhKX0sQXY6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLkJ2OnRoaXMuZ2soYSl9LGdrOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5oazp0aGlzLmJsKGEpfSxibDpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuY2w6dGhpcy56bShhKX0sem06ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5BbTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5qOgphfX19KShjKTt2YXIgZWI9Yy5ycnx8ZWIsQ2M9bmV3IGViKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9Q2MueHIoNCk7KGZ1bmN0aW9uKGMpe2MuYWo9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dGhpcy5xYT0hMTt0aGlzLkpnKCl9LEpnOmZ1bmN0aW9uKCl7dmFyIGI9ITEsYT0hMTt0aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5nZXRGaWd1cmUmJihiPXRoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLmdldEZpZ3VyZSgpKTtifHwoYj10aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5lbGVtZW50KTt0aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5nZXRWaWRlb0VsZW1lbnQmJihhPXRoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLmdldFZpZGVvRWxlbWVudCgpKTtiJiYhYSYmKGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXSk7CmImJmE/KHRoaXMuWShiKSx0aGlzLlooYSkpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5KZygpfS5iaW5kKHRoaXMpLDEwMCl9LHBhdXNlOmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLnBsYXkoKX0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIuZ2V0Q3VycmVudFRpbWUoKX0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIuZ2V0RHVyYXRpb24oKX0sTmE6ZnVuY3Rpb24oKXt0aGlzLnRoKCl9LHRoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRDdXJyZW50VGltZSgpOzE+dGhpcy5nZXREdXJhdGlvbigpLWI/dGhpcy5WJiYoMCx0aGlzLlYpKCk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnRoKCl9LmJpbmQodGhpcyksMTAwKX0sCk86ZnVuY3Rpb24oKXtyZXR1cm4iQml0bW92aW4ifX0pfSkoYyk7dmFyIGZiPWMuYWp8fGZiOyhmdW5jdGlvbihjKXtjLiRpPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LGRnOmZ1bmN0aW9uKGIpe3ZhciBhPWIuY29kZSxjPWIubWVzc2FnZTtiLmRhdGEmJihhPWIuZGF0YS5jb2RlLGM9Yi5kYXRhLm1lc3NhZ2UpOzEyMDUhPWEmJig5MDA9PWEmJjA8Yy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImVtcHR5Iik/KHRoaXMudygiZW1wdHkiKSx0aGlzLnRhKCkpOjEwMDk9PWF8fDMwMz09YXx8NDAzPT1hP3RoaXMudGEoKTp0aGlzLnMoKSl9LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2lmKGIuYWRFcnJvckV2ZW50cylmb3IodmFyIGE9MDthPGIuYWRFcnJvckV2ZW50cy5sZW5ndGg7YSsrKXRoaXMuZGcoYi5hZEVycm9yRXZlbnRzKTtiLnBsYXllci5vbigiYWRlcnJvciIsZnVuY3Rpb24oYSl7dGhpcy5kZyhhKX0uYmluZCh0aGlzKSk7CmIucGxheWVyLm9uKCJhZHF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygiYWRxdWFydGlsZSIpfS5iaW5kKHRoaXMpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCkucGxheWVyLmlzUGxheWluZygpP3RoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcyksMTApfX0pfSkoYyk7dmFyIGdiPWMuJGl8fGdiOyhmdW5jdGlvbihjKXtjLmJqPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sd2g6ZnVuY3Rpb24oYil7Yj1uZXcgZmIoYik7Yi5xYT90aGlzLlIoKTp0aGlzLk4oYil8fChiLkZkKE1hdGguY2VpbCgxRTEwKk1hdGgucmFuZG9tKCkpKSx0aGlzLlAoYiksKG5ldyBnYihiLHRoaXMuSykpLmcoKSl9LGc6ZnVuY3Rpb24oKXt0aGlzLkpwfHwodGhpcy5KcD0hMCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzdm06cGxheWVyaW5zdGFuY2UiLGZ1bmN0aW9uKGEpe3RoaXMud2goYS5kZXRhaWwpfS5iaW5kKHRoaXMpKSk7CmlmKHdpbmRvdy5fX3NjaG5lZVZvbk1vcmdlbiYmd2luZG93Ll9fc2NobmVlVm9uTW9yZ2VuLnZpZGVvUGxheWVySW5zdGFuY2VzKWZvcih2YXIgYj0wO2I8d2luZG93Ll9fc2NobmVlVm9uTW9yZ2VuLnZpZGVvUGxheWVySW5zdGFuY2VzLmxlbmd0aDtiKyspdGhpcy53aCh3aW5kb3cuX19zY2huZWVWb25Nb3JnZW4udmlkZW9QbGF5ZXJJbnN0YW5jZXNbYl0pO3RoaXMuUigpfX0pfSkoYyk7dmFyIGhiPWMuYmp8fGhiLFU9bmV3IGhiKHIpO1UuZygpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnJ0PXRoaXMuYVs0XTt0aGlzLmlsPXRoaXMuYVs5XTt0aGlzLmV0PXRoaXMuYVs4XTt0aGlzLkpxPXRoaXMuYVs1XTt0aGlzLkFyPXRoaXMuYVsxMF07dGhpcy5xbT10aGlzLmFbMl07dGhpcy5qaz10aGlzLmFbNF07dGhpcy53cT10aGlzLmFbOV07dGhpcy5VaT10aGlzLmFbNF07dGhpcy5Ecz0KdGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbOF19Yy5Jaj1iO2IucHJvdG90eXBlPXtxdDpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMucnQ6dGhpcy5obChhKX0saGw6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmlsOnRoaXMuZHQoYSl9LGR0OmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5ldDp0aGlzLklxKGEpfSxJcTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuSnE6dGhpcy56cihhKX0senI6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLkFyOnRoaXMucG0oYSl9LHBtOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5xbTp0aGlzLmlrKGEpfSxpazpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuams6dGhpcy52cShhKX0sdnE6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLndxOnRoaXMuVGkoYSl9LFRpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuVWk6dGhpcy5DcyhhKX0sQ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLkRzOnRoaXMuaShhKX0sCmk6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLmo6YX19fSkoYyk7dmFyIGliPWMuSWp8fGliLERjPW5ldyBpYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPURjLnF0KDQpOyhmdW5jdGlvbihjKXtjLlVsPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0UmF3UGxheWVyKCkpO3RoaXMuWShiKTtpZihiKXt2YXIgYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdO2F8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdKTt0aGlzLlooYSl9ZWxzZSB3aW5kb3cuc2V0VGltZW91dCh0aGlzLlMuYmluZCh0aGlzKSwxMDApfSxwYXVzZTpmdW5jdGlvbigpe3RyeXt0Zm1zdWl0ZSgiIyIrdGhpcy5nZXRSYXdQbGF5ZXIoKSkudGZtdmlkZW8oInBhdXNlIil9Y2F0Y2goYil7fX0sCnBsYXk6ZnVuY3Rpb24oKXt0cnl7dGZtc3VpdGUoIiMiK3RoaXMuZ2V0UmF3UGxheWVyKCkpLnRmbXZpZGVvKCJyZXN1bWUiKX1jYXRjaChiKXt0Zm1zdWl0ZSgiIyIrdGhpcy5nZXRSYXdQbGF5ZXIoKSkudGZtdmlkZW8oInBsYXkiKX19LEhjOmZ1bmN0aW9uKCl7dmFyIGI9bTtyZXR1cm4gYiYmYi5ydW5JbnNpZGVDb250YWluZXI/ITA6ITF9LE86ZnVuY3Rpb24oKXtyZXR1cm4iVEZNc3VpdGUifX0pfSkoYyk7dmFyIFY9Yy5VbHx8VjsoZnVuY3Rpb24oYyl7Yy5UbD12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTt4LldjKCIjIitiLCJvbkFkc01hbmFnZXJMb2FkZWQiLGZ1bmN0aW9uKCl7d2luZG93LnNldFRpbWVvdXQodGhpcy53LmJpbmQodGhpcyksMjAwKX0uYmluZCh0aGlzKSk7eC5XYygiIyIrYiwib2JqZWN0IixmdW5jdGlvbihhKXt0aGlzLmhzKGEpfS5iaW5kKHRoaXMpKTsKeC5XYygiIyIrYiwiYWRzTG9hZGVyRmFpbGVkIixmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsImFkc0xvYWRlckZhaWxlZCIpO3RoaXMuSSgpfS5iaW5kKHRoaXMpKTt4LldjKCIjIitiLCJyZXF1ZXN0QWRzRmFpbGVkIixmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsInJlcXVlc3RBZHNGYWlsZWQiKTt0aGlzLkkoKX0uYmluZCh0aGlzKSk7eC5DcSgpfSxoczpmdW5jdGlvbihiKXt2YXIgYT0iIixjO2ZvcihjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSl7YT1pc05hTihiW2NdKT8hMTpiW2NdO2lmKDEwMDk9PWJbY118fDEwMDE9PWJbY118fDMwMz09YltjXXx8NDAzPT1iW2NdKXt0aGlzLncoKTt0aGlzLnRhKCk7cmV0dXJufWZvcih2YXIgZCBpbiBiW2NdKWlmKGJbY10uaGFzT3duUHJvcGVydHkoZCkmJihhPWlzTmFOKGJbY11bZF0pPyExOmJbY11bZF0sMTAwOT09YltjXVtkXXx8MTAwMT09YltjXVtkXXx8MzAzPT1iW2NdW2RdfHw0MDM9PWJbY11bZF0pKXt0aGlzLncoKTsKdGhpcy50YSgpO3JldHVybn19dGhpcy5vKCJhZGVycm9yIixhKTt0aGlzLkkoKX19KX0pKGMpO3ZhciBXPWMuVGx8fFc7KGZ1bmN0aW9uKGMpe2MuVmw9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93LnRmbXN1aXRlKXtmb3IodmFyIGI9W10sYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSxjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10pO2E9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10pO3RoaXMueWQmJihiPWUuVW8oYix0aGlzLnlkKSk7Zm9yKGE9MDthPGIubGVuZ3RoO2ErKyl7dmFyIGQ9YlthXS5pZC5yZXBsYWNlKCJjb250ZW50RWxlbWVudCIsIiIpLGQ9bmV3IFYoZCk7aWYoIXRoaXMuTihkKSl7dGhpcy5QKGQpO3ZhciBmPW5ldyBXKGQsdGhpcy5LKTtmLmcoKX19Zm9yKGE9MDthPGIubGVuZ3RoO2ErKylmb3IoYz0KYlthXTtjLnBhcmVudEVsZW1lbnQ7KXt2YXIgYz1jLnBhcmVudEVsZW1lbnQsZz1jLmdldEF0dHJpYnV0ZSgiaWQiKTtpZihnKXRyeXt0Zm1zdWl0ZSgiIyIrZykudGZtdmlkZW8oInJlc3VtZSIpLHRoaXMueWR8fCh0aGlzLnlkPVtdKSx0aGlzLnlkLnB1c2goYlthXSksZD1uZXcgVihnKSx0aGlzLk4oZCl8fCh0aGlzLlAoZCksZj1uZXcgVyhkLHRoaXMuSyksZi5nKCkpfWNhdGNoKGspe319fXRoaXMuUigpfSxXYzpmdW5jdGlvbihiLGEsYyl7dGhpcy5jYXx8KHRoaXMuY2E9e30pO3RoaXMuY2FbYl18fCh0aGlzLmNhW2JdPXt9KTt0aGlzLmNhW2JdW2FdfHwodGhpcy5jYVtiXVthXT1bXSk7dGhpcy5jYVtiXVthXS5wdXNoKGMpfSx0dTpmdW5jdGlvbihiKXt2YXIgYT1iLnNQbGF5ZXJTZWxlY3RvcjtpZihiKWlmKCF0aGlzLmNhfHx0aGlzLmNhJiYhdGhpcy5jYVthXSl0aGlzLkVjfHwodGhpcy5FYz1bXSksdGhpcy5FYy5wdXNoKGIpLHRoaXMub3QoKSYmKHRoaXMuYWYoKSx0aGlzLmcoKSk7CmVsc2V7dmFyIGM9Im9iamVjdCI7InN0cmluZyI9PT10eXBlb2YgYi5vRXZlbnRUeXBlJiYoYz1iLm9FdmVudFR5cGUpO2lmKHRoaXMuY2FbYV1bY10mJjA8dGhpcy5jYVthXVtjXS5sZW5ndGgpZm9yKHZhciBkPTA7ZDx0aGlzLmNhW2FdW2NdLmxlbmd0aDtkKyspdGhpcy5jYVthXVtjXVtkXShiKX19LENxOmZ1bmN0aW9uKCl7aWYodGhpcy5FYylmb3IodmFyIGI9MDtiPHRoaXMuRWMubGVuZ3RoO2IrKyl7dmFyIGE9dGhpcy5FY1tiXSxjPWEuc1BsYXllclNlbGVjdG9yLGQ9Im9iamVjdCI7InN0cmluZyI9PT10eXBlb2YgYS5vRXZlbnRUeXBlJiYoZD1hLm9FdmVudFR5cGUpO2lmKHRoaXMuY2FbY11bZF0mJjA8dGhpcy5jYVtjXVtkXS5sZW5ndGgpZm9yKHZhciBlPTA7ZTx0aGlzLmNhW2NdW2RdLmxlbmd0aDtlKyspdGhpcy5jYVtjXVtkXVtlXShhKX19LHZpZGVvcGtnSW50ZXJmYWNlOmZ1bmN0aW9uKGIpeyJhdXRvUmVzaXplQ2FsbGJhY2tCZWZvcmUiIT1iLm9FdmVudFR5cGUuaCYmCiJhdXRvUmVzaXplQ2FsbGJhY2tBZnRlciIhPWIub0V2ZW50VHlwZS5oJiZ4LnR1KGIpfX0pfSkoYyk7dmFyIGpiPWMuVmx8fGpiLHg9bmV3IGpiKHIpO2NhKCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTGs9dGhpcy5hWzFdO3RoaXMuRXA9dGhpcy5hWzZdO3RoaXMuaj10aGlzLmFbNV19Yy5lbz1iO2IucHJvdG90eXBlPXtLazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTGs6dGhpcy5EcChhKX0sRHA6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLkVwOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuajphfX19KShjKTt2YXIga2I9Yy5lb3x8a2IsRWM9bmV3IGtiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9RWMuS2soNCk7CihmdW5jdGlvbihjKXtjLlhpPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubXV0ZWQ9ITE7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSYXdQbGF5ZXIoKSk7dGhpcy5ZKGIpO3ZhciBhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07YXx8KGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO3RoaXMuWihhKX0scGF1c2U6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5wYXVzZSgpfSl9LHBsYXk6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5wbGF5KCl9KX0sVmE6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5pc1BsYXlpbmcoKSYmCmIucGF1c2UoKX0pfSx2YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm11dGVkfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkJpbGRNZWRpYVBsYXllciJ9fSl9KShjKTt2YXIgbGI9Yy5YaXx8bGI7KGZ1bmN0aW9uKGMpe2MuWWk9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7JCgiIyIrYikuZGF0YSgibWVkaWFwbGF5ZXIiKS50aGVuKGZ1bmN0aW9uKGEpe3RoaXMucGxheWVyLm11dGVkPWEuZGF0YS5tdXRlZDthLm9uKCJlcnJvciIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIkVycm9yIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7YS5vbigidGltZXVwZGF0ZSIsZnVuY3Rpb24oKXtpZighYS5pc1BsYXlpbmd8fGEuaXNQbGF5aW5nKCkpYS5pc0FkJiZhLmlzQWQoKT90aGlzLncoKTphLmRhdGEmJmEuZGF0YS5hZHMmJmEuZGF0YS5hZHMudmFzdCYmYS5kYXRhLmFkcy52YXN0LnNyY2VzPwoodGhpcy5vKCJub0FkIiwicGxheWVkIiksdGhpcy5JKCkpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vKCJub0FkIiwicGxheWVkIik7dGhpcy5JKCEwKX0uYmluZCh0aGlzKSwyNTApfS5iaW5kKHRoaXMpKTthLm9uKCJwYXVzZSIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIndhaXRpbmciLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKTthLm9uKCJhZEVycm9yIixmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKTthLm9uKCJBZEVycm9yIixmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKTthLm9uKCJBZExvYWRlZCIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIkFkU3RhcnRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7YS5vbigiQWRWaWRlb1N0YXJ0IixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTthLm9uKCJBZFBsYXlpbmciLGZ1bmN0aW9uKCl7dGhpcy53KCl9LmJpbmQodGhpcykpO2Eub24oIkFkVmlkZW9GaXJzdFF1YXJ0aWxlIiwKZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7YS5vbigiQWRWaWRlb01pZHBvaW50IixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTthLm9uKCJBZFZpZGVvVGhpcmRRdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSl9LmJpbmQodGhpcykpfX0pfSkoYyk7dmFyIG1iPWMuWWl8fG1iOyhmdW5jdGlvbihjKXtjLlppPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm1lZGlhcGxheWVyIik7aWYod2luZG93LmRlJiZ3aW5kb3cuZGUuYmlsZCYmd2luZG93LmRlLmJpbGQubWVkaWFwbGF5ZXImJmImJjA8Yi5sZW5ndGgpZm9yKHZhciBhIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGM9YlthXSxkPSIiO3RyeXtkPWMuZ2V0QXR0cmlidXRlKCJpZCIpfWNhdGNoKGUpe2Q9Yy5pZH1pZihkJiYkKCIjIitkKS5kYXRhKCJtZWRpYXBsYXllciIpKXRyeXt2YXIgZz0KbmV3IGxiKGQpO3RoaXMuTihnKXx8KHRoaXMuUChnKSwobmV3IG1iKGcsdGhpcy5LKSkuZygpKX1jYXRjaChrKXt9fXRoaXMuUigpfSxOOmZ1bmN0aW9uKGIpe3ZhciBhPWIuZ2V0UmF3UGxheWVyKCk7JCgiIyIrYSk7Zm9yKHZhciBjIGluIHRoaXMuTWEpaWYoYT09dGhpcy5NYVtjXS5nZXRSYXdQbGF5ZXIoKSlyZXR1cm4hMDtyZXR1cm4gdGhpcy5NYVtiLmphKCldPyEwOiExfX0pfSkoYyk7dmFyIG5iPWMuWml8fG5iLG9iPW5ldyBuYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5Fbz10aGlzLmFbNF07dGhpcy50dj10aGlzLmFbMV07dGhpcy5mbT10aGlzLmFbNl07dGhpcy5vcD10aGlzLmFbM107dGhpcy5qPXRoaXMuYVsyXX1jLndyPWI7Yi5wcm90b3R5cGU9e0RvOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Fbzp0aGlzLnN2KGEpfSxzdjpmdW5jdGlvbihhKXtyZXR1cm4gMTwKYT90aGlzLnR2OnRoaXMuZW0oYSl9LGVtOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5mbTp0aGlzLm5wKGEpfSxucDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMub3A6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBwYj1jLndyfHxwYixGYz1uZXcgcGIoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1GYy5Ebyg0KTsoZnVuY3Rpb24oYyl7Yy5Vaz11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPSExO3RoaXMuZ2V0UmF3UGxheWVyKCkuZW52dmFycyYmdGhpcy5nZXRSYXdQbGF5ZXIoKS5lbnZ2YXJzKCk7dGhpcy5nZXRSYXdQbGF5ZXIoKS5jb250YWluZXJJRCYmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSYXdQbGF5ZXIoKS5jb250YWluZXJJRCkpOwpiJiYoYT1iKTt0aGlzLlkoYik7dGhpcy5aKGEpO3RoaXMuaHQodGhpcy5nZXRSYXdQbGF5ZXIoKSxiKTt0aGlzLmdldFJhd1BsYXllcigpfSxwYXVzZTpmdW5jdGlvbigpe30scGxheTpmdW5jdGlvbigpe30saHQ6ZnVuY3Rpb24oYixhKXtiJiZiLnBhdXNlRXZlbnQmJmEuYWRkRXZlbnRMaXN0ZW5lcihiLnBhdXNlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiZ0aGlzLmhhLnBhdXNlJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5wYXVzZSYmdGhpcy5oYS5wYXVzZSgpfS5iaW5kKHRoaXMpKTtiJiZiLnJlc3VtZUV2ZW50JiZhLmFkZEV2ZW50TGlzdGVuZXIoYi5yZXN1bWVFdmVudCxmdW5jdGlvbigpe3RoaXMuaGEmJnRoaXMuaGEucmVzdW1lJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5yZXN1bWUmJnRoaXMuaGEucmVzdW1lKCl9LmJpbmQodGhpcykpO2ImJmIubXV0ZUV2ZW50JiZhLmFkZEV2ZW50TGlzdGVuZXIoYi5tdXRlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiYKdGhpcy5oYS5tdXRlJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5tdXRlJiZ0aGlzLmhhLm11dGUoKX0uYmluZCh0aGlzKSk7YiYmYi51bm11dGVFdmVudCYmYS5hZGRFdmVudExpc3RlbmVyKGIudW5tdXRlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiZ0aGlzLmhhLnVubXV0ZSYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuaGEudW5tdXRlJiZ0aGlzLmhhLnVubXV0ZSgpfS5iaW5kKHRoaXMpKX0sU2c6ZnVuY3Rpb24oYil7dGhpcy5oYT1ifSxPOmZ1bmN0aW9uKCl7cmV0dXJuIk9ubHlIT01BRCJ9fSl9KShjKTt2YXIgcWI9Yy5Va3x8cWI7KGZ1bmN0aW9uKGMpe2MuVGs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKTt0aGlzLmVpPSExfSxnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKSxhPXRoaXMuZ2V0UGxheWVyKCk7Yi5hdXRvc3RhcnQmJiF0aGlzLmVpJiYodGhpcy5JKCksdGhpcy5laT0hMCx0aGlzLnJhKCkpOwphLklhKCkuYWRkRXZlbnRMaXN0ZW5lcihiLnBsYXlFdmVudCxmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKX19KX0pKGMpO3ZhciByYj1jLlRrfHxyYjsoZnVuY3Rpb24oYyl7Yy5Waz1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtKXtpZihtLnBsYXllcil7dmFyIGI9bS5wbGF5ZXI7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGIpdHJ5e2I9YigpfWNhdGNoKGEpe2UudHJhY2soIm9ubHlIT01BRENvbmZGYWlsZWQiLCIiLCEwKX1mb3IodmFyIGM9ITEsZD0wO2Q8Yi5sZW5ndGg7ZCsrKWM9bmV3IHFiKGJbZF0pLHRoaXMuTihjKXx8KHRoaXMuUChjKSwobmV3IHJiKGMsdGhpcy5LKSkuZygpKX19ZWxzZSB0aGlzLlIoKX19KX0pKGMpO3ZhciBzYj1jLlZrfHxzYixYPW5ldyBzYihyKTtYLmcoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CnRoaXMueGw9dGhpcy5hWzddO3RoaXMuemo9dGhpcy5hWzNdO3RoaXMud289dGhpcy5hWzddO3RoaXMueWk9dGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbNV19Yy5Ccj1iO2IucHJvdG90eXBlPXt3bDpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMueGw6dGhpcy55aihhKX0seWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnpqOnRoaXMudm8oYSl9LHZvOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMud286dGhpcy54aShhKX0seGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLnlpOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuajphfX19KShjKTt2YXIgdGI9Yy5Ccnx8dGIsR2M9bmV3IHRiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9R2Mud2woNCk7KGZ1bmN0aW9uKGMpe2MuR209dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSwKUzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCkucGFyZW50Tm9kZTt0aGlzLlkoYik7Yj10aGlzLmdldFJhd1BsYXllcigpO3RoaXMuWihiKTt0aGlzLmlzUGxheWluZz0hMTtiLmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5pc1BsYXlpbmc9ITB9LmJpbmQodGhpcykpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheSgpfSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGI/Yi5tdXRlZDohMH0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5jdXJyZW50VGltZX0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5kdXJhdGlvbn0sTmE6ZnVuY3Rpb24oKXswPHRoaXMuZ2V0RHVyYXRpb24oKSYmMDx0aGlzLmdldEN1cnJlbnRUaW1lKCkmJgoxLjU+dGhpcy5nZXREdXJhdGlvbigpLXRoaXMuZ2V0Q3VycmVudFRpbWUoKSYmdGhpcy5WPygwLHRoaXMuVikoKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuTmEoKX0uYmluZCh0aGlzKSw0MDApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIldGdjQifX0pfSkoYyk7dmFyIHViPWMuR218fHViOyhmdW5jdGlvbihjKXtjLkZtPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LFJiOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKSxiPWIuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIuaW1hQWRzTG9hZGVyfSxndDpmdW5jdGlvbihiKXtiLmFkZEV2ZW50TGlzdGVuZXIoZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUixmdW5jdGlvbihhKXthPWEuZ2V0RXJyb3IoKTthLmdldEVycm9yQ29kZSgpO3RoaXMuJGF8fCh0aGlzLiRhPVtdKTt0aGlzLiRhLnB1c2goYS5nZXRFcnJvckNvZGUoKSk7MTAwOT09YS5nZXRFcnJvckNvZGUoKXx8CjMwMz09YS5nZXRFcnJvckNvZGUoKXx8NDAzPT1hLmdldEVycm9yQ29kZSgpP3RoaXMudGEoKTp0aGlzLm8oImFkZXJyb3IiLGEuZ2V0RXJyb3JDb2RlKCkpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkc01hbmFnZXJMb2FkZWQiLGZ1bmN0aW9uKCl7dGhpcy5uYz0hMDt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yi5hZGRFdmVudExpc3RlbmVyKCJsb2ciLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKX0sZzpmdW5jdGlvbigpe3RoaXMucygpO3RoaXMuZ2V0UGxheWVyKCk7dGhpcy5BYT90aGlzLmd0KHRoaXMuQWEpOih0aGlzLkFhPXRoaXMuUmIoKSx3aW5kb3cuc2V0VGltZW91dCh0aGlzLmcuYmluZCh0aGlzKSwxMDApKX0sczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCk7aWYoYi5pc1BsYXlpbmcmJjE8Yi5nZXRDdXJyZW50VGltZSgpKXtpZighdGhpcy5BYSl7dGhpcy5JKCk7cmV0dXJufWlmKCF0aGlzLm5jKXt0aGlzLkkoKTtyZXR1cm59Yj0hMDtpZih0aGlzLiRhJiYKdGhpcy4kYS5sZW5ndGgmJjE8dGhpcy4kYS5sZW5ndGgpZm9yKHZhciBhPTA7YTx0aGlzLiRhLmxlbmd0aC0xO2ErKykxMDA5IT10aGlzLiRhW2FdJiYzMDMhPXRoaXMuJGFbYV0mJjQwMyE9dGhpcy4kYVthXSYmKGI9ITEpO2lmKGIpdGhpcy53KCJlbXB0eSIpLHRoaXMudGEoKTtlbHNle3RoaXMuSSgpO3JldHVybn19d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoKX0uYmluZCh0aGlzKSw1MDApfX0pfSkoYyk7dmFyIHZiPWMuRm18fHZiOyhmdW5jdGlvbihjKXtjLkhtPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe3RoaXMuVWE9LTE7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIik7aWYod2luZG93LndmdjRfaHRtbDVfcGxheWVyJiYwPGIubGVuZ3RoKWZvcih2YXIgYSBpbiBiKXt2YXIgYz1uZXcgdWIoYi5pdGVtKGEpKTt0aGlzLk4oYyl8fC0xPT1jLmlkLnNlYXJjaCgidmlkZW9fIil8fCh0aGlzLlAoYyksCihuZXcgdmIoYyx0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIHdiPWMuSG18fHdiLHhiPW5ldyB3YihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5McT10aGlzLmFbN107dGhpcy5Vcj10aGlzLmFbMl07dGhpcy5Hbz10aGlzLmFbNl07dGhpcy52cj10aGlzLmFbOV07dGhpcy5Edj10aGlzLmFbM107dGhpcy56bj10aGlzLmFbMV07dGhpcy5xcz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbN119Yy5Qcz1iO2IucHJvdG90eXBlPXtLcTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuTHE6dGhpcy5UcihhKX0sVHI6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLlVyOnRoaXMuRm8oYSl9LEZvOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5Hbzp0aGlzLnVyKGEpfSx1cjpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMudnI6dGhpcy5DdihhKX0sQ3Y6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8CmE/dGhpcy5Edjp0aGlzLnluKGEpfSx5bjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuem46dGhpcy5wcyhhKX0scHM6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLnFzOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLmo6YX19fSkoYyk7dmFyIHliPWMuUHN8fHliLEhjPW5ldyB5YigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPUhjLktxKDQpOyhmdW5jdGlvbihjKXtjLkhsPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm10di1wbGF5ZXItY29udGFpbmVyIilbMF07dGhpcy5ZKGIpO3RoaXMuWihiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdKTt0aGlzLlVlPSExfSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCk7CndpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpe3RoaXMuV3MoKX0uYmluZCh0aGlzKSw1MDApfSxXczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UG9zaXRpb24oKSxhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiZ0aGlzLlYmJnRoaXMuVigpfSxnZXREdXJhdGlvbjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT0wO2IucGxheWJhY2suZ2V0RHVyYXRpb24mJihhPWIucGxheWJhY2suZ2V0RHVyYXRpb24oKSk7cmV0dXJuIGF9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPTA7Yi5wbGF5YmFjay5nZXRQb3NpdGlvbiYmKGE9Yi5wbGF5YmFjay5nZXRQb3NpdGlvbigpKTtyZXR1cm4gYX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBsYXliYWNrLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLlVlJiZ3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLlVlKTsKdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5YmFjay5wbGF5KCl9LGlzUGxheWluZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIucGxheWJhY2smJmIucGxheWJhY2suZ2V0UGxheVN0YXRlPyhiLnBsYXliYWNrLmdldFBsYXlTdGF0ZSgpLCJwbGF5aW5nIj09Yi5wbGF5YmFjay5nZXRQbGF5U3RhdGUoKSk6ITF9LFp0OmZ1bmN0aW9uKCl7dGhpcy5VZT13aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt0aGlzLnBhdXNlKCl9LmJpbmQodGhpcyksMTApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIlJvY2tlcnkifX0pfSkoYyk7dmFyIHpiPWMuSGx8fHpiOyhmdW5jdGlvbihjKXtjLkdsPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSk7dGhpcy5mYz0wfSxnOmZ1bmN0aW9uKCl7dGhpcy5Tcj0xMDt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO3RoaXMuZmN8fCh0aGlzLmZjPTAsYi5hZGRFdmVudExpc3RlbmVyKCJhZEVycm9yIiwKZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiKTt0aGlzLnMoKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXt9KSk7d2luZG93LnZpZGVvcGxhemE/KHdpbmRvdy52aWRlb3BsYXphLmJ1aWxkRGF0ZXx8KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpLHdpbmRvdy52aWRlb3BsYXphLmNvcmU/KHdpbmRvdy52aWRlb3BsYXphLmNvcmUuQWRDYWxsTW9kdWxlfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5UcmFja2VyfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5tb2RlbHx8KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpLHdpbmRvdy52aWRlb3BsYXphLmNvcmUucGFyc2V8fCh0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGF6YSIpLAp0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5yZXF1ZXN0fHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSkpOih0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGF6YSIpLHRoaXMucygpKSx3aW5kb3cudmlkZW9wbGF6YS52ZXJzaW9uTnVtYmVyfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSkpOih0aGlzLmZjfHx0aGlzLmZjKyssdGhpcy5mYzw9dGhpcy5Tcj8odGhpcy5mYysrLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksNTAwKSk6KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nKCk/KHRoaXMuZ2V0UGxheWVyKCkuWnQoKSx0aGlzLkkoKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoKX0uYmluZCh0aGlzKSwxMDApfX0pfSkoYyk7CnZhciBBYj1jLkdsfHxBYjsoZnVuY3Rpb24oYyl7Yy5JbD1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJtdHYtcGxheWVyLWNvbnRhaW5lciIpLGE9ITE7YiYmYlswXSYmKGE9YlswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSkmJmFbMF0mJndpbmRvdy5wbGF5ZXJBcGkmJndpbmRvdy5wbGF5ZXJBcGkucGxheWJhY2smJmImJihiPW5ldyB6Yih3aW5kb3cucGxheWVyQXBpKSx0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBBYihiLHRoaXMuSykpLmcoKSkpO3RoaXMuUigpfX0pfSkoYyk7dmFyIEJiPWMuSWx8fEJiLENiPW5ldyBCYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5GbD10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbOF19Yy52cD1iO2IucHJvdG90eXBlPQp7RWw6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkZsOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuajphfX19KShjKTt2YXIgRGI9Yy52cHx8RGIsSWM9bmV3IERiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9SWMuRWwoNCk7KGZ1bmN0aW9uKGMpe2MuQ2w9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS5wYXJlbnROb2RlLnBhcmVudE5vZGU7dGhpcy5ZKGIpO2I9dGhpcy5nZXRSYXdQbGF5ZXIoKTt0aGlzLlooYik7dGhpcy5pc1BsYXlpbmc9ITE7Yi5hZGRFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIixmdW5jdGlvbigpe3RoaXMuaXNQbGF5aW5nPSEwfS5iaW5kKHRoaXMpKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlKCl9LApwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5KCl9LGdldEN1cnJlbnRUaW1lOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPSIiO2IuY3VycmVudFRpbWUmJihhPWIuY3VycmVudFRpbWUpO3JldHVybiBhfSxnZXREdXJhdGlvbjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT0wO2IuZHVyYXRpb24mJihhPWIuZHVyYXRpb24pO3JldHVybiBhfSxOYTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0Q3VycmVudFRpbWUoKSxhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiZhJiYxPmEtYj90aGlzLlYoKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuTmEoKX0uYmluZCh0aGlzKSwyMDApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIlJhZGlhbnRNUCJ9fSl9KShjKTt2YXIgRWI9Yy5DbHx8RWI7KGZ1bmN0aW9uKGMpe2MuQmw9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLmdldFBsYXllcigpLklhKCksYT10aGlzLmdldFBsYXllcigpLnZpZGVvVGFnO2EmJmEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZHN0YXJ0IixmdW5jdGlvbigpe3RoaXMucmEoKTt0aGlzLmdldFBsYXllcigpLmlzUGxheWluZz0hMX0uYmluZCh0aGlzKSk7dGhpcy5nZXRQbGF5ZXIoKTtiLmFkZEV2ZW50TGlzdGVuZXIoInBsYXlpbmciLGZ1bmN0aW9uKCl7dGhpcy5ObygpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkbG9hZGVkIixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkc3RhcnRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yj10aGlzLnBkKCk7MDxiLmdldEN1cnJlbnRUaW1lKCk/dGhpcy5HcigpOnRoaXMuZ2coKTtiLmF1dG9wbGF5JiZ3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuT2YoKXx8KHRoaXMubygiY29udGVudHBsYXkiKSx0aGlzLnMoITApKX0uYmluZCh0aGlzKSwKMUUzKX0sTm86ZnVuY3Rpb24oKXt0aGlzLk9mKCl8fHRoaXMucyghMCl9LEdyOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wZCgpOyFiLm5hJiZiLlcmJmIuT3YmJmIuUXYmJih0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIiksdGhpcy5zKCkpfSxnZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMucGQoKTtiLmFkc0xvYWRlcj9iLmFkc0xvYWRlci5hZGRFdmVudExpc3RlbmVyKGdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUuQURfRVJST1IsZnVuY3Rpb24oYSl7dmFyIGI7YTp7YT1hLmdldEVycm9yKCk7Zm9yKGIgaW4gYSlpZigibnVtYmVyIj09dHlwZW9mIGFbYl0pe2I9YVtiXTticmVhayBhfWI9dm9pZCAwfTEwMDk9PWJ8fDMwMz09Ynx8NDAzPT1iPyh0aGlzLncoKSx0aGlzLnRhKCkpOih0aGlzLm8oImFkZXJyb3IiLGIpLHRoaXMucygpKX0uYmluZCh0aGlzKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmdnKCl9LmJpbmQodGhpcyksMTAwKX0scGQ6ZnVuY3Rpb24oKXtpZighdGhpcy5uaClmb3IodmFyIGI9Cm0ucGxheWVyYXBpKCksYT10aGlzLmdldFBsYXllcigpLklhKCkuaWQsYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10uaWQ9PWEmJih0aGlzLm5oPWJbY10pO3JldHVybiB0aGlzLm5ofSxodzpmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuaW1hPyFpbWEudmlkZW8uY2xpZW50LmpzVGFnJiYhaW1hLnZpZGVvLmNsaWVudC50YWdnZWQmJiFpbWEudmlkZW8uY2xpZW50LmdldEVEYXRhOiExfSxzOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nP2I/dGhpcy5wZCgpLmFkc0xvYWRlcj90aGlzLkkoITApOnRoaXMuSSgpOnRoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwKX19KX0pKGMpO3ZhciBGYj1jLkJsfHxGYjsoZnVuY3Rpb24oYyl7Yy5EbD1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtJiZtLnBsYXllcmFwaSl7dmFyIGI9bS5wbGF5ZXJhcGkoKTtpZihiLmxlbmd0aCl7Zm9yKHZhciBhPQowO2E8Yi5sZW5ndGg7YSsrKXt2YXIgYz1uZXcgRWIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYlthXS5pZCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pO3RoaXMuTihjKXx8KHRoaXMuUChjKSwobmV3IEZiKGMsdGhpcy5LKSkuZygpKX1yZXR1cm59fXRoaXMuUigpfX0pfSkoYyk7dmFyIEdiPWMuRGx8fEdiLEhiPW5ldyBHYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5lcD10aGlzLmFbMV07dGhpcy51aT10aGlzLmFbMTBdO3RoaXMuSWk9dGhpcy5hWzZdO3RoaXMud3M9dGhpcy5hWzddO3RoaXMueG49dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbMl19Yy5RbD1iO2IucHJvdG90eXBlPXtjcDpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLmVwOnRoaXMudGkoYSl9LHRpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy51aTp0aGlzLkhpKGEpfSxIaTpmdW5jdGlvbihhKXtyZXR1cm4gMTA8CmE/dGhpcy5JaTp0aGlzLnZzKGEpfSx2czpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMud3M6dGhpcy53bihhKX0sd246ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLnhuOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuajphfX19KShjKTt2YXIgSWI9Yy5RbHx8SWIsSmM9bmV3IEliKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9SmMuY3AoNCk7KGZ1bmN0aW9uKGMpe2MuRWs9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5wbGF5ZXIuaWQpO0cmJihiPWIuZmlyc3RDaGlsZCk7aWYoYil7dGhpcy5ZKGIpO2lmKGIudGFnTmFtZSl7dmFyIGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXTthfHwoYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7CmF8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImVtYmVkIilbMF0pfWE/dGhpcy5aKGEpOnRoaXMucGEoKX1lbHNlIHRoaXMucGEoKX0sZnc6ZnVuY3Rpb24oKXt2YXIgYj0hMTswPD1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpLmluZGV4T2YoInNwaWVnZWwuZGUiKSYmKGI9ITApO3JldHVybiBifSxwYXVzZTpmdW5jdGlvbigpe2lmKEcpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7d2luZG93Ll9wbGF5LmNvbnRyb2wuaW50ZXJhY3QucGF1c2UoYi5pZCl9ZWxzZSB3aW5kb3cuX3BsYXkuYWRkb25zLnN2bS5zZW5kQ29tbWFuZCgicGF1c2UiKX0scGxheTpmdW5jdGlvbigpe2lmKEcpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7d2luZG93Ll9wbGF5LmNvbnRyb2wuaW50ZXJhY3QucGxheShiLmlkKX1lbHNlIHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLnNlbmRDb21tYW5kKCJwbGF5Iil9LFZhOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy52aWRlb1RhZztyZXR1cm4gYiYmIWIucGF1c2VkPwoodGhpcy5wYXVzZSgpLCEwKTohMX0sTzpmdW5jdGlvbigpe3JldHVybiJuZXh0In0sSGM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSWE6ZnVuY3Rpb24oKXt2YXIgYjtHPyhiPXRoaXMuZ2V0UmF3UGxheWVyKCksYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChiLmlkKS5maXJzdENoaWxkKTpiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLmdldFBsYXllckNvbnRhaW5lcigpKTtiIT10aGlzLmNvbnRhaW5lciYmKHRoaXMuY29udGFpbmVyPWIpO3JldHVybiB0aGlzLmNvbnRhaW5lcn19KX0pKGMpO3ZhciBZPWMuRWt8fFk7KGZ1bmN0aW9uKGMpe2MuRGs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMuV2U9IiI7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtiJiYodGhpcy5XZT1iLmlkKTtHP3dpbmRvdy5fcGxheS5jb25maWcuYWRkQWRkb25MaXN0ZW5lcihmdW5jdGlvbihhKXt2YXIgYj0KYS5wbGF5ZXJDb250YWluZXI7YiYmdGhpcy5XZSYmYiE9dGhpcy5XZXx8ImFkZXJyb3IiIT1hLmV2ZW50fHxlLkJhKCJ0ZWxlNS5kZSIpJiYicG9zdHJvbGwiPT1hLmFkVHlwZXx8KGEuYWRVUkwmJihtLmFkVGFnPWEuYWRVUkwpLHRoaXMubygiYWRlcnJvciIsYS5rdyksdGhpcy5JKCksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnJhKCl9LmJpbmQodGhpcyksMTAwKSl9LmJpbmQodGhpcyksInN2bSIpOndpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLnNldExpc3RlbmVyKGZ1bmN0aW9uKGEpeyJhZGVycm9yIj09YSYmKHRoaXMubygiYWRlcnJvciIpLHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDEwMCkpfS5iaW5kKHRoaXMpKX19KX0pKGMpO3ZhciBaPWMuRGt8fFo7KGZ1bmN0aW9uKGMpe2MuRms9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93Ll9wbGF5JiYKd2luZG93Ll9wbGF5LmFkZG9ucyYmd2luZG93Ll9wbGF5LmFkZG9ucy5zdm0pe0c9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLmdldFBsYXllckNvbnRhaW5lcj8hMTohMDt2YXIgYjtpZihHKWZvcih2YXIgYT13aW5kb3cuX3BsYXkuY29udHJvbC5nZXRJbnN0YW5jZXMoKSxjPWEubGVuZ3RoLGQ9MDtkPGM7ZCsrKXtpZihiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFbZF0pKWI9bmV3IFkoYiksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFooYix0aGlzLkspLGIuZygpKX1lbHNlIGlmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQod2luZG93Ll9wbGF5LmFkZG9ucy5zdm0uZ2V0UGxheWVyQ29udGFpbmVyKCkpKWI9bmV3IFkoYiksYi5xYT90aGlzLmFmKCk6dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFooYix0aGlzLkspLGIuZygpKX10aGlzLlIoKX19KX0pKGMpO3ZhciBHLEpiPWMuRmt8fEpiLEtiPW5ldyBKYihoYSk7Yz1jfHwKe307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnhwPXRoaXMuYVs1XTt0aGlzLlFtPXRoaXMuYVs3XTt0aGlzLlNtPXRoaXMuYVs0XTt0aGlzLnNpPXRoaXMuYVs5XTt0aGlzLnZqPXRoaXMuYVs4XTt0aGlzLlhsPXRoaXMuYVs5XTt0aGlzLkV1PXRoaXMuYVsxMF07dGhpcy5ZdD10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs0XX1jLllvPWI7Yi5wcm90b3R5cGU9e3dwOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy54cDp0aGlzLlBtKGEpfSxQbTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuUW06dGhpcy5SbShhKX0sUm06ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5TbTp0aGlzLnJpKGEpfSxyaTpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuc2k6dGhpcy51aihhKX0sdWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLnZqOnRoaXMuV2woYSl9LFdsOmZ1bmN0aW9uKGEpe3JldHVybiA1PAphP3RoaXMuWGw6dGhpcy5EdShhKX0sRHU6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLkV1OnRoaXMuWHQoYSl9LFh0OmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5ZdDp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLmo6YX19fSkoYyk7dmFyIExiPWMuWW98fExiLEtjPW5ldyBMYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPUtjLndwKDQpOyhmdW5jdGlvbihjKXtjLk5tPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpO2lmKGImJmJbMF0pe2Zvcih2YXIgYT1iPWJbMF07YSYmYS5wYXJlbnROb2RlOyl7aWYoIkJPRFkiPT1hLnBhcmVudE5vZGUubm9kZU5hbWUpe2E9YS5wYXJlbnROb2RlO2JyZWFrfWE9YS5wYXJlbnROb2RlfXRoaXMuWihiKTsKdGhpcy5ZKGEpO3RoaXMuU2Q9ITE7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhkRXZlbnQiLGZ1bmN0aW9uKGEpe2lmKGEuZGV0YWlsKXtpZigiY29udGVudFBsYXllclBsYXkiPT1hLmRldGFpbC5uYW1lKXRyeXt3aW5kb3cuREw4X29uQWRDb21wbGV0ZWQoKSx0aGlzLlNkPSExfWNhdGNoKGIpe31pZigiYWRSZXF1ZXN0Ij09YS5kZXRhaWwubmFtZSl0cnl7dGhpcy5TZHx8KHRoaXMuU2Q9ITAsd2luZG93LkRMOF9vbkFkU3RhcnRlZCgpKX1jYXRjaChjKXt9fX0uYmluZCh0aGlzKSl9ZWxzZSB0aGlzLnBhKCl9LHBhdXNlOmZ1bmN0aW9uKCl7dHJ5e3dpbmRvdy5ETDhfb25Db250ZW50UGF1c2VSZXF1ZXN0ZWQoKX1jYXRjaChiKXt0aGlzLnZpZGVvVGFnLnBhdXNlKCl9fSxwbGF5OmZ1bmN0aW9uKCl7dHJ5e3dpbmRvdy5ETDhfb25Db250ZW50UmVzdW1lUmVxdWVzdGVkKCl9Y2F0Y2goYil7dGhpcy52aWRlb1RhZy5wbGF5KCl9fSxWYTpmdW5jdGlvbigpe2lmKCF0aGlzLnZpZGVvVGFnLnBhdXNlZClyZXR1cm4gdGhpcy5wYXVzZSgpLAohMH0sTzpmdW5jdGlvbigpe3JldHVybiJ4eW1hdGljIn19KX0pKGMpO3ZhciBNYj1jLk5tfHxNYjsoZnVuY3Rpb24oYyl7Yy5NbT12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxpdDpmdW5jdGlvbihiKXtiJiZiLmFkZEV2ZW50TGlzdGVuZXImJihiLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBsZXRlIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJpbXByZXNzaW9uIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJmaXJzdHF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJtaWRwb2ludCIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigidGhpcmRxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigiYWRzTWFuYWdlckxvYWRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigiYWRzRXJyb3IiLApmdW5jdGlvbihhKXt0aGlzLmJkKGEpfS5iaW5kKHRoaXMpKSxiLmFkZEV2ZW50TGlzdGVuZXIoImFkRXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuYmQoYSl9LmJpbmQodGhpcykpKTtiJiZiLmFkZEFkRXJyb3JMaXN0ZW5lciYmYi5hZGRBZEVycm9yTGlzdGVuZXIoZnVuY3Rpb24oYSl7dGhpcy5iZChhKX0uYmluZCh0aGlzKSl9LGJkOmZ1bmN0aW9uKGIpe3ZhciBhPXt9O2IuZ2V0RXJyb3ImJihiLmdldEVycm9yKCksYT1iLmdldEVycm9yKCkpO2EuZ2V0RXJyb3JDb2RlPyhhLmdldEVycm9yQ29kZSgpLHRoaXMubygiYWRlcnJvciIsYS5nZXRFcnJvckNvZGUoKSksMTAwOT09YS5nZXRFcnJvckNvZGUoKXx8MzAzPT1hLmdldEVycm9yQ29kZSgpfHw0MDM9PWEuZ2V0RXJyb3JDb2RlKCk/dGhpcy53KCk6dGhpcy5JKCkpOih0aGlzLm8oIm5vZnJhbWV3b3JrIiksdGhpcy5JKCkpfSxMZjpmdW5jdGlvbigpe2lmKHdpbmRvdy5fX2RsOF9hZEVycm9yRXZlbnRCdWNrZXQpZm9yKHZhciBiPTA7YjwKd2luZG93Ll9fZGw4X2FkRXJyb3JFdmVudEJ1Y2tldC5sZW5ndGg7YisrKXRoaXMuYmQod2luZG93Ll9fZGw4X2FkRXJyb3JFdmVudEJ1Y2tldFtiXSk7dGhpcy51YSgpfHx3aW5kb3cuc2V0VGltZW91dCh0aGlzLkxmLmJpbmQodGhpcyksMTAwKX0sZzpmdW5jdGlvbigpe3dpbmRvdy5fX2RsOF9hZHNMb2FkZXImJnRoaXMuaXQod2luZG93Ll9fZGw4X2Fkc0xvYWRlcik7dGhpcy5MZigpfX0pfSkoYyk7dmFyIE5iPWMuTW18fE5iOyhmdW5jdGlvbihjKXtjLk9tPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe2lmKHdpbmRvdy5ETDhfR0xPQkFMUyl7dmFyIGI9bmV3IE1iKHdpbmRvdy5ETDhfR0xPQkFMUyk7Yi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLChuZXcgTmIoYix0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIE9iPWMuT218fE9iLFBiPW5ldyBPYihoYSk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT0KQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLkZyPXRoaXMuYVsyXTt0aGlzLklzPXRoaXMuYVs4XTt0aGlzLlhuPXRoaXMuYVsxXTt0aGlzLlVqPXRoaXMuYVszXTt0aGlzLlpxPXRoaXMuYVs5XTt0aGlzLmo9dGhpcy5hWzZdfWMuRm49YjtiLnByb3RvdHlwZT17RXI6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLkZyOnRoaXMuSHMoYSl9LEhzOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5Jczp0aGlzLlduKGEpfSxXbjpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuWG46dGhpcy5UaihhKX0sVGo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlVqOnRoaXMuWXEoYSl9LFlxOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5acTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLmo6YX19fSkoYyk7dmFyIFFiPWMuRm58fFFiLExjPW5ldyBRYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLAoibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1MYy5Fcig0KTsoZnVuY3Rpb24oYyl7Yy5qbT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt0aGlzLnJoPSExO3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7aWYoYi52aWRlb01vZGVsKXt2YXIgYT1iLnZpZGVvTW9kZWwuZ2V0KCJwbGF5ZXJFbGVtZW50Iik7aWYoYSl7dGhpcy5ZKGEpO3ZhciBjPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07Y3x8KGM9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO2M/KHRoaXMuWihjKSxiLnZpZGVvTW9kZWwub2JzZXJ2ZSgicG9zaXRpb24iLGZ1bmN0aW9uKGEpe3RoaXMuYXM9YX0uYmluZCh0aGlzKSksYi52aWRlb01vZGVsLm9ic2VydmUoImR1cmF0aW9uIixmdW5jdGlvbihhKXt0aGlzLmR1cmF0aW9uPWF9LmJpbmQodGhpcykpKTp0aGlzLnBhKCl9ZWxzZSB0aGlzLnBhKCl9ZWxzZSB0aGlzLnBhKCl9LApxdzpmdW5jdGlvbigpe30sdmE6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLGE9MTtyZXR1cm4gYi52aWRlb01vZGVsJiZiLnZpZGVvTW9kZWwuZ2V0JiYoYT1iLnZpZGVvTW9kZWwuZ2V0KCJ2b2x1bWUiKSwwPGEpPyExOiEwfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkudmlkZW9Nb2RlbC5wYXVzZSgpfSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb01vZGVsLnBsYXkoKX0sVmE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb01vZGVsLmdldCgiaXNQYXVzZWQiKT8hMToodGhpcy5wYXVzZSgpLCEwKX0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc30sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kdXJhdGlvbn0sTzpmdW5jdGlvbigpe3JldHVybiJ0djIifSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkudmlkZW9Nb2RlbC5vYnNlcnZlKCJwb3NpdGlvbiIsCmZ1bmN0aW9uKGIpe3RoaXMuTWQoYil9LmJpbmQodGhpcykpfSxNZDpmdW5jdGlvbihiKXt0aGlzLmdldFJhd1BsYXllcigpO3RoaXMuZ2V0Q3VycmVudFRpbWUoKT5iJiYoYj10aGlzLmdldEN1cnJlbnRUaW1lKCkpO3ZhciBhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiYhdGhpcy5yaCYmKHRoaXMucmg9ITAsdGhpcy5WJiZ0aGlzLlYoKSl9fSl9KShjKTt2YXIgUD1jLmptfHxQOyhmdW5jdGlvbihjKXtjLmltPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LEFhOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZighdGhpcy5wZSlpZih0aGlzLkFifHwodGhpcy5BYj0wKSx0aGlzLkFiKyssMTU8dGhpcy5BYil7aWYod2luZG93LmltYSYmd2luZG93LmltYS5jb21tb24mJndpbmRvdy5pbWEuSW1hU2RrU2V0dGluZ3MmJndpbmRvdy5pbWEuY29tbW9uLmdldFZpZGVvTWV0YWRhdGEmJndpbmRvdy5pbWEuY29tbW9uLnRyaWdnZXJNZWFzdXJhYmxlRXZlbnQpcmV0dXJuIHdpbmRvdy5jYW5SdW5BZHM/CnRoaXMuSXQoKTp0aGlzLnMoITApLCEwO3RoaXMubygibm9mcmFtZXdvcmsiLCJJTUEiKTtiLnZpZGVvTW9kZWwuZ2V0KCJhZFRhZ1VybCIpP3RoaXMucygpOnRoaXMucyghMCl9ZWxzZSBpZihiPWIudmlkZW9Nb2RlbC5nZXQoImFkc0xvYWRlciIpKXt0aGlzLnBlPSEwO3ZhciBhPSJhZEVycm9yIjt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudCYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7Yi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhKTt0aGlzLmRhfHwodGhpcy5vKCJhZGVycm9yIix0aGlzLlQpLHRoaXMucygpKX0uYmluZCh0aGlzKSl9ZWxzZSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuQWEoKX0uYmluZCh0aGlzKSwxMCl9LHZkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF9LApnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYz0hMDtjfHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGM9ITApOyJudW1iZXIiPT10eXBlb2YgYT8oYi5UPWEsYi5vKCJhZGVycm9yIixhKSk6Yi5vKCJhZGVycm9yIil9cmV0dXJuIGN9Yi5vcmlnaW5hbEV2ZW50JiYoYj1iLm9yaWdpbmFsRXZlbnQpO2lmKGIuZ2V0RXJyb3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmdldEVycm9yKXt2YXIgYz1iLmdldEVycm9yKCk7aWYoYy5nZXRFcnJvckNvZGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLmdldEVycm9yQ29kZSYmYShjLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7cmV0dXJufX1mb3IodmFyIGQgaW4gYilpZihiLmhhc093blByb3BlcnR5KGQpJiZiW2RdJiZiW2RdLmFkRXJyb3ImJmJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJgoiZnVuY3Rpb24iPT10eXBlb2YgYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmYShiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTticmVha319LGc6ZnVuY3Rpb24oKXt0aGlzLlQ9dGhpcy5UfHwhMTt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO3RoaXMuQWEoKTtiLnZpZGVvTW9kZWwub2JzZXJ2ZSgicGxheVN0YXRlIixmdW5jdGlvbihhKXsicGxheWluZyI9PWEmJih0aGlzLmlzUGxheWluZz0hMCl9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJwbGF5TW9kZSIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJjdXJyZW50QWRTZWdtZW50IixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7Yi52aWRlb01vZGVsLm9ic2VydmUoImlzQWRzUGxheWluZyIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9yIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7CmIudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9ycyIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9yc1giLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKTtiLnZpZGVvTW9kZWwub2JzZXJ2ZSgiTk9OX0VWRU5UIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSl9LHM6ZnVuY3Rpb24oYil7dGhpcy5pc1BsYXlpbmc/dGhpcy5JKGIpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwKX19KX0pKGMpO3ZhciBRPWMuaW18fFE7KGZ1bmN0aW9uKGMpe2Mua209cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpO3RoaXMuVWE9LTF9LGc6ZnVuY3Rpb24oKXtpZih3aW5kb3cuaW5zZXJ0ZWRQbGF5ZXIpe3ZhciBiPW5ldyBQKHdpbmRvdy5pbnNlcnRlZFBsYXllcik7Yi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKX1pZih3aW5kb3cuVFYyUGxheWVycyYmCndpbmRvdy5UVjJQbGF5ZXJzLmxlbmd0aClmb3IodmFyIGE9MDthPHdpbmRvdy5UVjJQbGF5ZXJzLmxlbmd0aDthKyspYj1uZXcgUCh3aW5kb3cuVFYyUGxheWVyc1thXSksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKTtlbHNlIGlmKHdpbmRvdy5UVjJQbGF5ZXJzKWZvcihhIGluIHdpbmRvdy5UVjJQbGF5ZXJzKXdpbmRvdy5UVjJQbGF5ZXJzLmhhc093blByb3BlcnR5KGEpJiZ3aW5kb3cuVFYyUGxheWVyc1thXS52aWRlb01vZGVsJiYoYj1uZXcgUCh3aW5kb3cuVFYyUGxheWVyc1thXSksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKSk7dGhpcy5hZigpO3RoaXMuUigpfX0pfSkoYyk7dmFyIFJiPWMua218fFJiLFNiPW5ldyBSYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy56bD0KdGhpcy5hWzFdO3RoaXMuVHE9dGhpcy5hWzRdO3RoaXMuS3M9dGhpcy5hWzFdO3RoaXMuTHA9dGhpcy5hWzddO3RoaXMuaj10aGlzLmFbNl19Yy5MbT1iO2IucHJvdG90eXBlPXt5bDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuemw6dGhpcy5TcShhKX0sU3E6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlRxOnRoaXMuSnMoYSl9LEpzOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Lczp0aGlzLktwKGEpfSxLcDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuTHA6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBUYj1jLkxtfHxUYixNYz1uZXcgVGIoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1NYy55bCg0KTsoZnVuY3Rpb24oYyl7Yy50az11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXJDb250YWluZXI7dGhpcy5ZKGIpO3ZhciBhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07YXx8KGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO3RoaXMuWihhKTthJiZ0aGlzLlkoYS5wYXJlbnROb2RlKX0sTzpmdW5jdGlvbigpe3JldHVybiJsYW9sYTEifSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5hcGkucGxheSgpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkuYXBpLnBhdXNlKCl9fSl9KShjKTt2YXIgYWE9Yy50a3x8YWE7KGZ1bmN0aW9uKGMpe2Muc2s9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMuT2c9MDt0aGlzLlQ9dGhpcy5UfHwhMTt0aGlzLmdldFBsYXllcigpO3RoaXMuZGE9dGhpcy5CYz10aGlzLkFhPXRoaXMuWWM9ITE7dGhpcy52aD1lLkViKDEwKTsKdGhpcy5YZygpfSxYZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7aWYoYi5zdWJQbGF5ZXImJmIuc3ViUGxheWVyLmFkc0ludGVyZmFjZSYmYi5zdWJQbGF5ZXIuYWRzSW50ZXJmYWNlLmFkc0xvYWRlcilyZXR1cm4gdGhpcy5uYT1iLnN1YlBsYXllci5hZHNJbnRlcmZhY2UuYWRzTG9hZGVyLHRoaXMub2IoKSwhMDt0aGlzLk9nKys7aWYoMTA8dGhpcy5PZyl0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIiksd2luZG93LmltYSYmd2luZG93LmltYS5jb21tb24mJndpbmRvdy5pbWEuSW1hU2RrU2V0dGluZ3M/dGhpcy5zKCEwKTp0aGlzLnMoKTtlbHNlIHJldHVybiB3aW5kb3cuc2V0VGltZW91dCh0aGlzLlhnLmJpbmQodGhpcyksMTAwKSwhMX0sb2I6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm5hO2lmKGIpe3ZhciBhPSJhZEVycm9yIixjPSJsb2ciO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiYKZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYoYz1nb29nbGUuaW1hLkFkRXZlbnQuVHlwZS5MT0cpOyJmdW5jdGlvbiIhPT10eXBlb2YgYi5hZGRFdmVudExpc3RlbmVyP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKTooYi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKGMsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCk7dGhpcy5mYSghMCl9LmJpbmQodGhpcykpKX1lbHNlIHRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLm9iKCl9LmJpbmQodGhpcyksCjIwKX0sZ2E6ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYShhLGIpe3ZhciBjPSExO2lmKGEpe2lmKDEwMDk9PWF8fDMwMz09YXx8NDAzPT1hKWM9ITA7Y3x8IWEuaW5kZXhPZnx8LTE9PT1hLmluZGV4T2YoIjEwMDkiKSYmLTE9PT1hLmluZGV4T2YoIjMwMyIpJiYtMT09PWEuaW5kZXhPZigiNDAzIil8fChjPSEwKTsibnVtYmVyIj09dHlwZW9mIGEmJihiLlQ9YSxiLm8oImFkZXJyb3IiLGEpKX1yZXR1cm4gY31iLm9yaWdpbmFsRXZlbnQmJihiPWIub3JpZ2luYWxFdmVudCk7aWYoYi5nZXRFcnJvciYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0RXJyb3Ipe3ZhciBjPWIuZ2V0RXJyb3IoKTtpZihjLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuZ2V0RXJyb3JDb2RlJiZhKGMuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTtyZXR1cm59fWZvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkmJmJbZF0mJmJbZF0uYWRFcnJvciYmYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmCiJmdW5jdGlvbiI9PXR5cGVvZiBiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlJiZhKGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO2JyZWFrfX0sdmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYX0sRGE6ZnVuY3Rpb24oKXt0aGlzLmRhPSEwfSxmYTpmdW5jdGlvbihiKXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZGE/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwMCl9LHM6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTthLmFwaS5wbGF5ZWQmJmEuYXBpLnBsYXllZCgpP3RoaXMuSShiKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMucyhiKX0uYmluZCh0aGlzKSwxMCl9fSl9KShjKTt2YXIgYmE9Yy5za3x8YmE7KGZ1bmN0aW9uKGMpe2MudWs9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9ITE7CmlmKHdpbmRvdy5sMVBsYXllckluc3RhbmNlJiZ3aW5kb3cubDFQbGF5ZXJJbnN0YW5jZS5sZW5ndGgmJjA8d2luZG93LmwxUGxheWVySW5zdGFuY2UubGVuZ3RoKWZvcih2YXIgYT0wO2E8d2luZG93LmwxUGxheWVySW5zdGFuY2UubGVuZ3RoO2ErKyliPW5ldyBhYSh3aW5kb3cubDFQbGF5ZXJJbnN0YW5jZVswXSksdGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IGJhKGIsdGhpcy5LKSxiLmcoKSk7ZWxzZSB3aW5kb3cucGxheWVyJiZ3aW5kb3cucGxheWVyLmFwaSYmd2luZG93LnBsYXllci5sMVBsYXllciYmKGI9bmV3IGFhKHdpbmRvdy5wbGF5ZXIpLHRoaXMuTihiKXx8KHRoaXMuUChiKSxiPW5ldyBiYShiLHRoaXMuSyksYi5nKCkpKTt0aGlzLlIoKX19KX0pKGMpO3ZhciBVYj1jLnVrfHxVYixWYj1uZXcgVWIocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTnU9dGhpcy5hWzJdOwp0aGlzLmtzPXRoaXMuYVs5XTt0aGlzLmJwPXRoaXMuYVsxXTt0aGlzLnd2PXRoaXMuYVsxMF07dGhpcy5Kaz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbM119Yy5Hbj1iO2IucHJvdG90eXBlPXtNdTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuTnU6dGhpcy5qcyhhKX0sanM6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5rczp0aGlzLmFwKGEpfSxhcDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuYnA6dGhpcy52dihhKX0sdnY6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnd2OnRoaXMuSWsoYSl9LElrOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5Kazp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLmo6YX19fSkoYyk7dmFyIFdiPWMuR258fFdiLE5jPW5ldyBXYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPQpOYy5NdSg0KTsoZnVuY3Rpb24oYyl7Yy5Xaj11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPSExO3RyeXtiPXRoaXMuZ2V0UmF3UGxheWVyKClbMF0ucGFyZW50Tm9kZSxhPXRoaXMuZ2V0UmF3UGxheWVyKClbMF19Y2F0Y2goYyl7fWImJmE/KHRoaXMuWShiKSx0aGlzLlooYSksdGhpcy5nZXRSYXdQbGF5ZXIoKSk6dGhpcy5wYSgpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkuY3NzKCJkaXNwbGF5Iiwibm9uZSIpfSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5jc3MoImRpc3BsYXkiLCJibG9jayIpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkdBTlZpZGVvIn19KX0pKGMpO3ZhciBYYj1jLldqfHxYYjsoZnVuY3Rpb24oYyl7Yy5Waj12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dGhpcy5mZygpfSxmZzpmdW5jdGlvbihiKXt3aW5kb3cuR0FOX1ZpZGVvfHwKKGI/KHRoaXMubygibm9mcmFtZXdvcmsiLCJJTUEiKSx0aGlzLkkoKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmZnKCEwKX0uYmluZCh0aGlzKSwxMDApKX19KX0pKGMpO3ZhciBZYj1jLlZqfHxZYjsoZnVuY3Rpb24oYyl7Yy5Yaj1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2FtZSIpO2lmKGImJiJESVYiPT1iLm5vZGVOYW1lJiZ3aW5kb3cudmlkZW9hZF9nYW5fc3RhcnQmJndpbmRvdy4kJiZ3aW5kb3cuJCgiZGl2I2dhbWUiKSl7Yj1uZXcgWGIod2luZG93LiQoImRpdiNnYW1lIikpO2lmKGIucWEpe3RoaXMuUigpO3JldHVybn1pZighdGhpcy5OKGIpKXt0aGlzLlAoYik7KG5ldyBZYihiLHRoaXMuSykpLmcoKTt0aGlzLlIoKTtyZXR1cm59fXRoaXMuUigpfX0pfSkoYyk7dmFyIFpiPWMuWGp8fFpiLCRiPW5ldyBaYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPQpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMueGo9dGhpcy5hWzldO3RoaXMuYW89dGhpcy5hWzNdO3RoaXMuR3Y9dGhpcy5hWzVdO3RoaXMuaj10aGlzLmFbNV19Yy5NcT1iO2IucHJvdG90eXBlPXt3ajpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMueGo6dGhpcy4kbihhKX0sJG46ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmFvOnRoaXMuRnYoYSl9LEZ2OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuR3Y6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBhYz1jLk1xfHxhYyxPYz1uZXcgYWMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1PYy53aig0KTsoZnVuY3Rpb24oYyl7Yy5raT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0KdGhpcy5nZXRSYXdQbGF5ZXIoKS5nZXRXcmFwcGVyKCk7Yj8odGhpcy5ZKGIpLChiPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pP3RoaXMuWihiKTp0aGlzLnBhKCkpOnRoaXMucGEoKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlVmlkZW8oKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheVZpZGVvKCl9LE86ZnVuY3Rpb24oKXtyZXR1cm4iQVYifX0pfSkoYyk7dmFyIGJjPWMua2l8fGJjOyhmdW5jdGlvbihjKXtjLmppPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2Iub24oImFkRXJyb3IiLGZ1bmN0aW9uKCl7d2luZG93LnNldFRpbWVvdXQodGhpcy5zLmJpbmQodGhpcyksMTAwKX0uYmluZCh0aGlzKSk7Yi5vbigiYWRGcmFtZXdvcmtOb3RBdmFpbGFibGUiLGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcykpOwp0aGlzLmhlKCk7dGhpcy5iZygpfSxnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYz0hMDtjfHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGM9ITApOyJudW1iZXIiPT10eXBlb2YgYSYmKGIuVD1hLGIubygiYWRlcnJvciIsYSkpfXJldHVybiBjfWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTtpZihiLmdldEVycm9yJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5nZXRFcnJvcil7dmFyIGM9Yi5nZXRFcnJvcigpO2lmKGMuZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5nZXRFcnJvckNvZGUmJmEoYy5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO3JldHVybn19Zm9yKHZhciBkIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSYmYltkXSYmYltkXS5hZEVycm9yJiYKYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJmEoYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7YnJlYWt9fSx2ZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhfSxEYTpmdW5jdGlvbigpe3RoaXMuZGE9ITA7dGhpcy53KCJlbXB0eSB2YXN0Iil9LGJnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZihiLmdldFNlbGVjdGVkQWRIYW5kbGVyKWlmKChiPWIuZ2V0U2VsZWN0ZWRBZEhhbmRsZXIoKSkmJmIuYWRzTG9hZGVyKWZvcih2YXIgYT0wO2E8Yi5hZHNMb2FkZXIubGVuZ3RoO2ErKyl7dmFyIGM9ImFkRXJyb3IiO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SJiYKKGM9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7Yi5hZHNMb2FkZXJbYV0uYWRkRXZlbnRMaXN0ZW5lcihjLGZ1bmN0aW9uKGEpe2EuZ2V0RXJyb3ImJihhPWEuZ2V0RXJyb3IoKSk7dmFyIGI9ITE7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYj0hMDtpZighYilmb3IodmFyIGMgaW4gYSl7aWYoYVtjXSYmYVtjXS5pbmRleE9mJiYoLTEhPWFbY10uaW5kZXhPZigiMTAwOSIpfHwtMSE9YVtjXS5pbmRleE9mKCIzMDMiKXx8LTEhPWFbY10uaW5kZXhPZigiNDAzIikpKXtiPSEwO2JyZWFrfWlmKGFbY10mJigxMDA5PT1hW2NdfHwzMDM9PWFbY118fDQwMz09YVtjXSkpe2I9ITA7YnJlYWt9fWI/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKCl9LmJpbmQodGhpcykpfWVsc2Ugd2luZG93LnNldFRpbWVvdXQodGhpcy5iZy5iaW5kKHRoaXMpLDUwKTtlbHNlIHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuaGUuYmluZCh0aGlzKSwxMDApfSxoZTpmdW5jdGlvbigpe2lmKCF0aGlzLnVhKCkpe3ZhciBiPQp0aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyJwbGF5aW5nIj09Yi5nZXRQbGF5U3RhdGUoKT9iLmdldEFkSW5mbygpPyh3aW5kb3cuc2V0VGltZW91dCh0aGlzLnJhLmJpbmQodGhpcyksMTApLHRoaXMudygpKTpiLl9wbGF5ZXJPcHRpb25zJiZiLl9wbGF5ZXJPcHRpb25zLnBsYXlBZHZlcnRpc2VtZW50c3x8Yi5fYWRSZWdpc3RlcmVkP3RoaXMucygpOnRoaXMucyghMCk6d2luZG93LnNldFRpbWVvdXQodGhpcy5oZS5iaW5kKHRoaXMpLDEwMCl9fSxzOmZ1bmN0aW9uKGIpe3dpbmRvdy5zZXRUaW1lb3V0KHRoaXMucmEuYmluZCh0aGlzKSwxRTQpO3RoaXMuSShiKX19KX0pKGMpO3ZhciBjYz1jLmppfHxjYzsoZnVuY3Rpb24oYyl7Yy5saT1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFhhOmZ1bmN0aW9uKGIpe2I9bmV3IGJjKGIpO2IucWE/dGhpcy5SKCk6dGhpcy5OKGIpfHwodGhpcy5QKGIpLChuZXcgY2MoYix0aGlzLkspKS5nKCkpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93LnNyYXZ2cGxQbGF5ZXJJbnN0YW5jZXMpZm9yKHZhciBiPQowO2I8d2luZG93LnNyYXZ2cGxQbGF5ZXJJbnN0YW5jZXMubGVuZ3RoO2IrKyl0aGlzLlhhKHdpbmRvdy5zcmF2dnBsUGxheWVySW5zdGFuY2VzW2JdKTtlbHNlIHdpbmRvdy5zZXR1cFBsYXllckVsZW1lbnQ/dGhpcy5YYSh3aW5kb3cuc2V0dXBQbGF5ZXJFbGVtZW50KTp0aGlzLlIoKX19KX0pKGMpO3ZhciBkYz1jLmxpfHxkYyxlYz1uZXcgZGMocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuSW49dGhpcy5hWzNdO3RoaXMuU2o9dGhpcy5hWzJdO3RoaXMuVm49dGhpcy5hWzldO3RoaXMud2k9dGhpcy5hWzRdO3RoaXMuUmk9dGhpcy5hWzNdO3RoaXMubW09dGhpcy5hWzZdO3RoaXMuJGw9dGhpcy5hWzFdO3RoaXMua289dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbM119Yy5ncz1iO2IucHJvdG90eXBlPXtIbjpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuSW46dGhpcy5SaihhKX0sClJqOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuU2o6dGhpcy5VbihhKX0sVW46ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlZuOnRoaXMudmkoYSl9LHZpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy53aTp0aGlzLlFpKGEpfSxRaTpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMuUmk6dGhpcy5sbShhKX0sbG06ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLm1tOnRoaXMuWmwoYSl9LFpsOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy4kbDp0aGlzLmpvKGEpfSxqbzpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMua286dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBmYz1jLmdzfHxmYyxQYz1uZXcgZmMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1QYy5Ibig0KTtjPWN8fHt9OwooZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuWmc9dGhpcy5haD10aGlzLiRnPSExO3RoaXMuQWQ9W107dGhpcy4kZT17R0FOVmlkZW86InVuZGVmaW5lZCI9PT10eXBlb2YgJGI/bnVsbDokYixsYW9sYTFQbGF5ZXI6InVuZGVmaW5lZCI9PT10eXBlb2YgVmI/bnVsbDpWYixWaWRlb0pTOiJ1bmRlZmluZWQiPT09dHlwZW9mIEJhP251bGw6QmEsYml0bW92aW46InVuZGVmaW5lZCI9PT10eXBlb2YgVT9udWxsOlUsb3ZWaWRlbzoidW5kZWZpbmVkIj09PXR5cGVvZiBHYT9udWxsOkdhLFJhZGlhbnRNUDoidW5kZWZpbmVkIj09PXR5cGVvZiBIYj9udWxsOkhiLGp3OiJ1bmRlZmluZWQiPT09dHlwZW9mIHdhP251bGw6d2EsdHYyOiJ1bmRlZmluZWQiPT09dHlwZW9mIFNiP251bGw6U2IsdGZtc3VpdGVQbGF5ZXI6InVuZGVmaW5lZCI9PT10eXBlb2YgeD9udWxsOngsbmV4dFBsYXllcjoidW5kZWZpbmVkIj09PXR5cGVvZiBLYj9udWxsOktiLHh5bWF0aWNQbGF5ZXI6InVuZGVmaW5lZCI9PT0KdHlwZW9mIFBiP251bGw6UGIsYmlsZE1lZGlhUGxheWVyOiJ1bmRlZmluZWQiPT09dHlwZW9mIG9iP251bGw6b2IsT295YWxhOiJ1bmRlZmluZWQiPT09dHlwZW9mIGRiP251bGw6ZGIsUm9ja2VyeToidW5kZWZpbmVkIj09PXR5cGVvZiBDYj9udWxsOkNiLGluUmVhZDoidW5kZWZpbmVkIj09PXR5cGVvZiBMYT9udWxsOkxhLHdmdjQ6InVuZGVmaW5lZCI9PT10eXBlb2YgeGI/bnVsbDp4YixBVlBsYXllckRldGVjdGlvbjoidW5kZWZpbmVkIj09PXR5cGVvZiBlYz9udWxsOmVjLE9ubHlIT01BRDoidW5kZWZpbmVkIj09PXR5cGVvZiBYP251bGw6WH19Yy50bD1iO2IucHJvdG90eXBlPXtnOmZ1bmN0aW9uKCl7dmFyIGE9W10sYT1hLmxlbmd0aD90aGlzLm9xKGEpOltdLGI7dGhpcy5haD0hMDtpZihhLmxlbmd0aCl7dGhpcy4kZz0hMDtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyliPWFbY10sdGhpcy5BaChiKX1lbHNlIGZvcihjIGluIHRoaXMuJGUpe2lmKHRoaXMuWmcpYnJlYWs7CmI9dGhpcy4kZVtjXTt0aGlzLnZmKGIpJiYodGhpcy5BZC5wdXNoKGIpLHRoaXMuQWgoYikpfX0sdmY6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEgaW5zdGFuY2VvZiBxPyEwOiExfSxvcTpmdW5jdGlvbihhKXt2YXIgYj1bXSxjO2lmKCFhfHwhYS5sZW5ndGgpcmV0dXJuIGI7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspYz1hW2VdLGM9dGhpcy4kZVtjXSx0aGlzLnZmKGMpJiZiLnB1c2goYyk7cmV0dXJuIGJ9LEFoOmZ1bmN0aW9uKGEpe3RoaXMudmYoYSkmJmEuZygpfSxhdTpmdW5jdGlvbihhKXtpZihhJiZhIGluc3RhbmNlb2YgdSYmIXRoaXMuJGcpZm9yKHRoaXMuWmc9ITAsYT0wO2E8dGhpcy5BZC5sZW5ndGg7YSsrKXRoaXMuQWRbYV0uSGImJndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5BZFthXS5IYil9fX0pKGMpO3ZhciBnYz1jLnRsfHxnYyxOPW5ldyBnYztOLmcoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CnRoaXMueHU9dGhpcy5hWzZdO3RoaXMuS2o9dGhpcy5hWzZdO3RoaXMuWm09dGhpcy5hWzFdO3RoaXMuR2k9dGhpcy5hWzEwXTt0aGlzLkd1PXRoaXMuYVsyXTt0aGlzLllyPXRoaXMuYVs1XTt0aGlzLlJxPXRoaXMuYVsxMF07dGhpcy5qPXRoaXMuYVsyXX1jLlp1PWI7Yi5wcm90b3R5cGU9e3d1OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMueHU6dGhpcy5KaihhKX0sSmo6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLktqOnRoaXMuWW0oYSl9LFltOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5abTp0aGlzLkZpKGEpfSxGaTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuR2k6dGhpcy5GdShhKX0sRnU6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLkd1OnRoaXMuWHIoYSl9LFhyOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuWXI6dGhpcy5RcShhKX0sUXE6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlJxOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMjwKYT90aGlzLmo6YX19fSkoYyk7dmFyIGhjPWMuWnV8fGhjLFFjPW5ldyBoYygxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPVFjLnd1KDQpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oYyl7aWYoYy5lcnJvciBpbnN0YW5jZW9mIFJlZmVyZW5jZUVycm9yKXt2YXIgYj1jLmZpbGVuYW1lP2MuZmlsZW5hbWU6IiI7aWYoLTEhPWIuaW5kZXhPZigiaG9tYWQiKXx8LTEhPWIuaW5kZXhPZigiaGQtbWFpbiIpKWI9Yy5tZXNzYWdlP2MubWVzc2FnZToiIixjPWMuZXJyb3Iuc3RhY2s/Yy5lcnJvci5zdGFjazoiIiwtMSE9Yi5pbmRleE9mKCJpcyBub3QgZGVmaW5lZCIpPyhjPWIuc3Vic3RyaW5nKGIuaW5kZXhPZigiOiIpKzEsYi5pbmRleE9mKCJpcyBub3QiKS0xKSxlLndjKGsuUnUpLGUudHJhY2soInN0YXRzX2hkX3ZhcmRlbGV0ZWQiLGMsCiEwKSk6LTEhPWMuaW5kZXhPZigic2V0QCIpJiYoZS53YyhrLmVzKSxlLnRyYWNrKCJzdGF0c19oZF92YXJub3RzZXQiLCIiLCEwKSl9fSk7dmFyIEU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7RS53aWR0aD0xO0UuaGVpZ2h0PTE7RS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJwbXRtdnMiKTtFLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoRSk7dmFyIFJjPUUuY29udGVudFdpbmRvdy5zZXRJbnRlcnZhbC5iaW5kKHdpbmRvdyksa2M9RS5jb250ZW50V2luZG93LnNldFRpbWVvdXQuYmluZCh3aW5kb3cpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoRSk7dmFyIEk9bmV3IEosbT0hMTtJLmlhKCk7SS5UZygpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKEkuaWEoKSxmdW5jdGlvbihjKXttfHwobT1jLmRldGFpbCl9LCExKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihJLlRnKCksZnVuY3Rpb24oYyl7bXx8KG09Yy5kZXRhaWwpfSwhMSk7CkkuaWEoKTt2YXIgU2M9UmMoZnVuY3Rpb24oKXtlLnZnKHdpbmRvdyxJLmZyKCkse2lkOlNjfSl9LDUwMCksamE9ZS5iYSgxMCk7ZmEoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy50aj10aGlzLmFbNF07dGhpcy56dj10aGlzLmFbMl07dGhpcy5waj10aGlzLmFbOF07dGhpcy5DcD10aGlzLmFbOF07dGhpcy5aaz10aGlzLmFbNl07dGhpcy5QbD10aGlzLmFbM107dGhpcy5Iaj10aGlzLmFbN107dGhpcy5saz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbM119Yy5ydj1iO2IucHJvdG90eXBlPXtzajpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMudGo6dGhpcy55dihhKX0seXY6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLnp2OnRoaXMub2ooYSl9LG9qOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5wajp0aGlzLkJwKGEpfSxCcDpmdW5jdGlvbihhKXtyZXR1cm4gMjwKYT90aGlzLkNwOnRoaXMuWWsoYSl9LFlrOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5aazp0aGlzLk9sKGEpfSxPbDpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuUGw6dGhpcy5HaihhKX0sR2o6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5Iajp0aGlzLmtrKGEpfSxrazpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMubGs6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBpYz1jLnJ2fHxpYyxUYz1uZXcgaWMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1UYy5zaig0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuc2g9dGhpcy5jb25mPXRoaXMuamI9dGhpcy5wbGF5ZXI9bnVsbDt0aGlzLndkPTA7dGhpcy5aYT0iIjt0aGlzLkJkPVtdO3RoaXMuQ2Q9MDt0aGlzLnVoPSExO3RoaXMuWGU9CltdO2UubGIoIm5ld0FkZGVsaXZlcnkiKX1jLm1pPWI7Yi5wcm90b3R5cGU9e0d0OmZ1bmN0aW9uKGEpe3RoaXMuc2g9YX0sZmY6ZnVuY3Rpb24oYSl7dGhpcy5wbGF5ZXI9YTt0aGlzLlphPXRoaXMucGxheWVyLk8oKX0sZ2V0UGxheWVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGxheWVyfSxCdDpmdW5jdGlvbihhKXt0aGlzLmpiPWF9LEF0OmZ1bmN0aW9uKGEpe3RoaXMuY29uZj1hfSxIYTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNvbmZbYV07dGhpcy5jb25mW3RoaXMuWmFdJiZ0aGlzLmNvbmZbdGhpcy5aYV1bYV0mJihiPXRoaXMuY29uZlt0aGlzLlphXVthXSk7cmV0dXJuIGJ9LEljOmZ1bmN0aW9uKGEsYil7ZS5CYSgid2VsdC5kZSIpJiZlLllhKCJodHRwczovL2Fzdi5udWdnYWQubmV0L2JrP251Z2duPTE1Njk5MDUxMDImbnVnZ3NpZD0xOTgyMjE3NTUwJm51Z2dyaWQ9IitlbmNvZGVVUklDb21wb25lbnQobG9jYXRpb24uaHJlZikrIiZudWdnbD1odHRwcyUzQSUyRiUyRnd3MjUxLnNtYXJ0YWRzZXJ2ZXIuY29tJTJGdHJhY2slMkZjb21wLmFzcCUzRmtleXdvcmQlM0ROVUdHVkFSUyUyNnNpdGUlM0Q4NTE0NSIsCiJuZXRudWdnYWRhc3YiLHt9LGZ1bmN0aW9uKCl7fSxmdW5jdGlvbigpe30sdGhpcy5qYik7dmFyIGM9ITEsZj0hMTtpZih0aGlzLmdyKCkpdGhpcy5qYi5sKHRoaXMuamIucmQsdGhpcy5qYi5GYSx0aGlzLmpiLlplLGZ1bmN0aW9uKCl7dGhpcy5JYyhhLGIpfS5iaW5kKHRoaXMpLHRoaXMuamIuc2MpO2Vsc2UgaWYodGhpcy5FcSgpKXRoaXMud3QoZnVuY3Rpb24oKXt0aGlzLkljKGEsYil9LmJpbmQodGhpcykpO2Vsc2V7dGhpcy5wbGF5ZXIucGF1c2UoKTtlLnYoay5mZCx0aGlzLnBsYXllci51KCkpO3ZhciBnPXRoaXMuY29uZixsPW5ldyBZYSh0aGlzLmdldFBsYXllcigpLGcpO2ImJmwuY3UoKTtsLmV4aXRGdWxsc2NyZWVuKCk7ZS5sYigibmV3SG9tYWREaXNwbGF5Iik7Uz1sPW5ldyBRYShsLHRoaXMuamIsZyk7bC56dCh0aGlzLmNvbmYpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYSl7dmFyIG09ITE7dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyJiYobT10aGlzLnBsYXllci5nZXRSYXdQbGF5ZXIoKSk7CmE9YShtKX0oYT10aGlzLlJyKGEpKXx8ZS50cmFjaygic3RhdHNfaGRfbm9BZFRhZyIsInNob3ciLCEwKTsiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5wbGF5ZXIuR2UmJihjPXRoaXMucGxheWVyLkdlKCkpO2cuYWRTdGFydFRpbWVvdXQmJihmPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7fSxnLmFkU3RhcnRUaW1lb3V0fHw1RTQpKTtsLkllKGEsYyxmKTt0aGlzLnBsYXllci5DaChsKX19LGdyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IERhdGUsYj0wO2lmKHRoaXMud2QpcmV0dXJuIGI9YS5nZXRUaW1lKCktdGhpcy53ZC5nZXRUaW1lKCksdGhpcy53ZD1hLDNFNTxiPyEwOiExO3RoaXMud2Q9YTtyZXR1cm4hMX0sVnQ6ZnVuY3Rpb24oKXtlLmxiKCJwcmVyb2xsIik7ZS5lZigicHJlcm9sbCIpO3ZhciBhPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgicHJlcm9sbEFkVGFnIikmJihhPXRoaXMuSGEoInByZXJvbGxBZFRhZyIpKTsoYT10aGlzLnJnKGEpKT90aGlzLkljKGEpOihlLnRyYWNrKCJzdGF0c19oZF9ub0FkVGFnIiwKInByZSIsITApLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXIucGxheSgpfS5iaW5kKHRoaXMpLDApLGUudihrLmdkLHRoaXMucGxheWVyLnUoKSkpfSxVdDpmdW5jdGlvbihhKXtpZighdGhpcy5zaCl7ZS5lZigicG9zdHJvbGwiKTtlLmxiKCJwb3N0cm9sbCIpO3RoaXMuR3QoITApO3ZhciBiPXRoaXMuY29uZixjPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgicG9zdHJvbGxBZFRhZyIpJiYoYz10aGlzLkhhKCJwb3N0cm9sbEFkVGFnIikpOyhjPXRoaXMucmcoYykpP3RoaXMuSWMoYyxiLnBvc3Ryb2xsVXNlQ29tcGxldGVFdmVudD8hMDphKTooZS50cmFjaygic3RhdHNfaGRfbm9BZFRhZyIsInBvc3QiLCEwKSx0aGlzLnBsYXllci5wbGF5KCksZS52KGsuZ2QsdGhpcy5wbGF5ZXIudSgpKSl9fSxyZzpmdW5jdGlvbihhKXtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGEpe3ZhciBiPSExO3RoaXMucGxheWVyLmdldFJhd1BsYXllciYmKGI9dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyKCkpOwphPWEoYil9cmV0dXJuIGF9LGx0OmZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXIuS3QodGhpcy5VdC5iaW5kKHRoaXMpKTt0aGlzLnBsYXllci5OYSgpfSxIZDpmdW5jdGlvbihhKXtlLmxiKCJtaWRyb2xsIik7ZS5lZigibWlkcm9sbCIpO2lmKCF0aGlzLmhoKXt0aGlzLmhoPSEwO3ZhciBiPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgibWlkcm9sbEFkVGFnIikmJihiPXRoaXMuSGEoIm1pZHJvbGxBZFRhZyIpKTtiPyh0aGlzLkljKGIsYSksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmhoPSExfS5iaW5kKHRoaXMpLDFFMykpOihlLnRyYWNrKCJzdGF0c19oZF9ub0FkVGFnIiwibWlkIiwhMCksdGhpcy5wbGF5ZXIucGxheSgpLGUudihrLmdkLHRoaXMucGxheWVyLnUoKSkpfX0sa3Q6ZnVuY3Rpb24oKXt0aGlzLnBsYXllci5GdCh0aGlzLkhkLmJpbmQodGhpcykpO3RoaXMucGxheWVyLkxlKCl9LGc6ZnVuY3Rpb24oKXt0aGlzLlZ0KCk7dGhpcy5wbGF5ZXIuTGUmJnRoaXMua3QoKTsKdGhpcy5sdCgpfSxtdDpmdW5jdGlvbigpe3ZhciBhPVtdO2lmKHRoaXMuY29uZi55aWVsZGxhYil7dGhpcy5jb25mLnlpZWxkbGFiWzBdP2E9dGhpcy5jb25mLnlpZWxkbGFiOmFbMF09dGhpcy5jb25mLnlpZWxkbGFiO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKShmdW5jdGlvbihhLGIsYyxnKXt0aGlzLkJkLnB1c2goeyJmdW5jdGlvbiI6ZnVuY3Rpb24oZSl7dGhpcy5FdihhLGIsYyxnLGUpfS5iaW5kKGUpfSl9KS5jYWxsKHRoaXMsYVtiXS51cmwsYVtiXS5wbGFjZWhvbGRlcixhW2JdLmFsaWFzLGFbYl0ubWFjcm8pfXRoaXMuQ2Q9dGhpcy5CZC5sZW5ndGh9LEVxOmZ1bmN0aW9uKCl7dmFyIGE9ITE7MDx0aGlzLkNkJiYoYT0hMCk7cmV0dXJuIGF9LHd0OmZ1bmN0aW9uKGEpe3RoaXMudWg9YTtmb3IoYT0wO2E8dGhpcy5CZC5sZW5ndGg7YSsrKXRoaXMuQmRbYV1bImZ1bmN0aW9uIl0odGhpcy5acy5iaW5kKHRoaXMpKX0sWnM6ZnVuY3Rpb24oYSl7dGhpcy5DZC0tO2EmJnRoaXMuWGUucHVzaChhKTsKMD49dGhpcy5DZCYmdGhpcy51aCgpfSxScjpmdW5jdGlvbihhKXtmb3IodmFyIGI9IiIsYz0wO2M8dGhpcy5YZS5sZW5ndGg7YysrKWI9dGhpcy5YZVtjXSxhPWEucmVwbGFjZShiLm1hY3JvLGIucGxhY2Vob2xkZXIpO3JldHVybiBhfX19KShjKTt2YXIgZ2E9Yy5taXx8Z2EsUz0hMSxuYT0hMTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy55az10aGlzLmFbN107dGhpcy5TbD10aGlzLmFbNF07dGhpcy5ncD10aGlzLmFbMTBdO3RoaXMuWm49dGhpcy5hWzNdO3RoaXMuTnQ9dGhpcy5hWzFdO3RoaXMuaj10aGlzLmFbN119Yy5OcD1iO2IucHJvdG90eXBlPXt4azpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLnlrOnRoaXMuUmwoYSl9LFJsOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5TbDp0aGlzLmZwKGEpfSxmcDpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuZ3A6CnRoaXMuWW4oYSl9LFluOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5abjp0aGlzLk10KGEpfSxNdDpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTnQ6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuajphfX19KShjKTt2YXIgamM9Yy5OcHx8amMsVWM9bmV3IGpjKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9VWMueGsoNCl9KS5jYWxsKE9oamF1ZGlwQWxpZWNhaUosT2hqYXVkaXBBbGllY2FpSik7Cg==
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
143.204.214.42 Seattle, United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
server-143-204-214-42.fra53.r.cloudfront.net
Software
AmazonS3 /
Resource Hash
5ee5cb1d210bab87efd0825369e6bcbbdf3f9fcc0d1fbf227b0bc670e8a8d3dd

Request headers

Sec-Fetch-Mode
cors
Referer
https://videos.giga.de/embed/176875?autoplay=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:12 GMT
Via
1.1 c5c25772c7f14e267596e0f8ce51d9bc.cloudfront.net (CloudFront)
Vary
Origin,Access-Control-Request-Headers,Access-Control-Request-Method
X-Amz-Cf-Pop
FRA53-C1
X-Cache
Hit from cloudfront
Connection
keep-alive
Content-Length
653
Last-Modified
Thu, 12 Sep 2019 07:31:47 GMT
Server
AmazonS3
ETag
"063da71572f57793ea4125f50b418f84"
Access-Control-Max-Age
3000
Access-Control-Allow-Methods
GET, POST
Content-Type
application/json
Access-Control-Allow-Origin
*
Cache-Control
no-cache, no-store
Accept-Ranges
bytes
X-Amz-Cf-Id
XxXRMn-cuf_wvy8svZOliJY-9UmMIYsnRcymDc5ki2THyEv8nIWBUw==
Expires
0
csi
csi.gstatic.com/ Frame 9AB9
0
200 B
Other
General
Full URL
https://csi.gstatic.com/csi?v=2&s=pagead&action=csi_pagead&dmc=8&puid=1~k0hvbxzi&chm=1&e=21060099&ctx=2&gqid=N1V7XejLGJfWgAfH9ZSgAg&qqid=CL79ssiyzeQCFQqR3god6z0Jag&met.4=fb.3~lb.2w~ol.2w~idt.-3g~dt.-ir&met.3=197.2v~123.2u_2~117.2w~118.3i~118.3i~118.3u~118.3v~113.5q_2~112.5p_3&met.1=1.k0hvbxtt~14.0~15.0~16.0~17.0~18.0~19.0~20.2w~21.2w&met.7=CCIQBBgBIAMoAzAWOBNoBHAVeD2wAQG4AQM~CCoQChgBIAMoAzAWOBM~CCgQChgBIH4ofjDFAThHaL4BcMQBePSVAYABupQBiAHRhAOwAQG4AQM
Requested by
Host: securepubads.g.doubleclick.net
URL: https://securepubads.g.doubleclick.net/pagead/js/rum.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4002:807::2003 , Ireland, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Golfe2 /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-Type
text/plain;charset=UTF-8

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:12 GMT
last-modified
Wed, 21 Jan 2004 19:51:30 GMT
server
Golfe2
status
204
content-type
image/gif
access-control-allow-origin
*
cache-control
no-cache, no-store, must-revalidate
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
0
expires
Fri, 01 Jan 1990 00:00:00 GMT
Cookie set map
ih.adscale.de/ Frame BE47
0
0
Document
General
Full URL
https://ih.adscale.de/map?format=display&ssl=1
Requested by
Host: js.adscale.de
URL: https://js.adscale.de/userconnect.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.234.72 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-234-72.deploy.static.akamaitechnologies.com
Software
Apache-Coyote/1.1 /
Resource Hash

Request headers

Host
ih.adscale.de
Connection
keep-alive
Pragma
no-cache
Cache-Control
no-cache
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site
cross-site
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Accept-Encoding
gzip, deflate, br
Cookie
uu=ed160f316afc4733814b3e362d2e2c6e; ng=2#266335189#26139397#41728
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

Server
Apache-Coyote/1.1
Content-Type
text/html;charset=ISO-8859-1
Vary
Accept-Encoding
Content-Encoding
gzip
Expires
Fri, 13 Sep 2019 08:37:12 GMT
Cache-Control
max-age=0, no-cache, no-store
Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:12 GMT
Content-Length
674
Connection
keep-alive
Set-Cookie
tu=4#3579950814#48~562f6e0592a50266d82bbdd8627b2056~435656~0~0#101~~435656~435656~1#38~~435656~435656~1#39~~435656~435656~1#40~~435656~435656~1#72~~435656~435656~1#42~~435656~435656~1#75~~435656~435656~1#63~~435656~435656~1; Max-Age=2592000; Domain=ih.adscale.de; Path=/; Secure; SameSite=None
nuggad
ih.adscale.de/ Frame 3E74
Redirect Chain
  • https://adscale.nuggad.net/bk?nuggn=1660240041&nuggsid=1029839715&nuggrid=http%3A%2F%2Fwww.giga.de&nuggl=https%3A%2F%2Fih.adscale.de%2Fnuggad%3F%2Fnu%2F0%2Fpre%2F0%2Fsid%2FYmJiY2Mw%2Fuu%2Fed160f316...
  • https://ih.adscale.de/nuggad?/nu/0/pre/0/sid/YmJiY2Mw/uu/ed160f316afc4733814b3e362d2e2c6e/ts/1568363832263/v/2/hid/413/ssl/1/ws/https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-s...
49 B
490 B
Image
General
Full URL
https://ih.adscale.de/nuggad?/nu/0/pre/0/sid/YmJiY2Mw/uu/ed160f316afc4733814b3e362d2e2c6e/ts/1568363832263/v/2/hid/413/ssl/1/ws/https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F/nvars/d1=1&d9=1&d8=2&d7=1&d2=4&d12=2&d11=0&d4=4&c5=9&c6=9&c7=9&c8=9&d3=5&d10=4
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.234.72 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-234-72.deploy.static.akamaitechnologies.com
Software
Apache-Coyote/1.1 /
Resource Hash
68986dd8f1ef6b05cbc0a2f532b87ea2f93ebe9ccd06f8265b15044dd1f4ab17

Request headers

User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:12 GMT
Server
Apache-Coyote/1.1
P3P
CP=NOI PSA OUR
Cache-Control
max-age=0, no-cache, no-store
Connection
keep-alive
Content-Type
image/gif
Content-Length
49
Expires
Fri, 13 Sep 2019 08:37:12 GMT

Redirect headers

Date
Fri, 13 Sep 2019 08:37:12 GMT
Server
Apache
Status
302 Found
P3P
CP="NOI DSP COR NID ADMa OTPa OUR NOR"
Location
https://ih.adscale.de/nuggad?/nu/0/pre/0/sid/YmJiY2Mw/uu/ed160f316afc4733814b3e362d2e2c6e/ts/1568363832263/v/2/hid/413/ssl/1/ws/https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F/nvars/d1=1&d9=1&d8=2&d7=1&d2=4&d12=2&d11=0&d4=4&c5=9&c6=9&c7=9&c8=9&d3=5&d10=4
Cache-Control
no-store,no-cache
Transfer-Encoding
chunked
Connection
close
Keep-Alive
timeout=3, max=500
Expires
Wed, 18 Feb 2009 11:53:30 GMT
st
imprammp.taboola.com/ Frame 4F46
0
0
Document
General
Full URL
https://imprammp.taboola.com/st?cipid=8045671&ttype=0&cirid=18978EFCED89549259181089311&cicmp=1657475&cijs=1&dast=V7EXECFgPCRy_OC6aURATCRy_OC6aURAUAAAAGBvQHGzFc7oYrGodFIi5Xo-VkNdwMJrPVYDHZTCHEWC6TQS2QsMx-30FBOT09ZpdBxnKZDGqBrGly-d3whabT4XPd63W_313n9DnsIpdf97I4DIfPX_BwHh5mv-hpOHz-gofz8DC7xX6f0-7W_N06l9H0eavuJrfm7xb7XZ7TW2m0vMV-n9PuFlz-FrPL7fLLAQAAAOABQKmwH-IHEAAgAgAAAEACAAAAgCKg4t9C4AIAAAAAA6AA60cDAIqD4Vx368tudLg-L7s_AAAeAkAAAAYUSAAGcJpKACpyDk4AAAAAAAAAAFj-____YwD0iM9kADKUBm8MegAefAAehAAAALKGGtENrdkvlhWIChKLGAEAAABAMrV5HE3qhMqiCgCAIN0K4AoAIKAthVj8LEt3UOItDAAAgGBsgR4Wv9_ssGv8bpcBAAAAAAAAAJj9n_2jCRGNuaUFsRTwqv0CAgCs_QICALCpGwDAWwBc0BG0YjBYnUFMNqPdZHYAAAAAd_____96IDcbOYajxXC2cMwWG9duOTHsRp6Zw7gZjUwW2257wHA9TxFGjWl9I8Iy-30HBeX09JhdBhnLZTKoBbKmyeU3iA8ahuVkEMxvwhaj1WSyWQ5ny8VkMBwNR6P9CdxogBM0HA4Wu8Fit1gMJ4vJaLAcLFAgBhOckOFoM1mNdqvdZDmcjEazzWSDFK1azUabwXA1m8x2u9VwMFyORkjRmsVsMlnMRsvdZrCcjAbDyXCIMLFZGEcLj2-t2KwmbtFmtFtLXIOZW2SYuEyWmXPlcMzWotfHdNqNRg6Lb4uCAUp7EVykE83p8ne5LG_N2-LWOX0Oi1iiOVmkE9ll35uNHMPRYjhbOGaLjWu3nBh2I8_MYdyMRiaLbbdvbBbG0cLjWys2q4lbtBnt1hLXYOYWGSYuk2XmXDkcs7Xo9TGddqORw-LbN1az4Wa2GW4W-8ZqNtzMNsPNYt-hM3xXn7NRedMqPDKhwzXuNmVOg8JlsHh_EtNi2p0dPL_f0alSXTTGhuybUJgNHoNBEUsEp4t0InoZTxexRPK0SCfC1WYwWk5so91qOfPYLB7bbDZzzowzl2s43A1XFrFEabpIJ3rdy-IwHD5_wcN5eJj9oqfh8PkLHs7Dw-wW-31Ou1vzd-tcRtPnrbqb3Jq_W-x3eU5vpdHyFvt9TrtbcPlbzC63y6L-Y0OMRnPdbK4YLOeawSoBAAAAAAAAACxhzrwJAAAAwGkgi8VgslguAIQY6y7Bp1TIoxP4W3HjxxBzuvxdLstb87a4dU6fw8oAEjsF!&excid=22&tst=1&docw=0
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.14.49 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
nginx/1.13.12 /
Resource Hash

Request headers

:method
GET
:authority
imprammp.taboola.com
:scheme
https
:path
/st?cipid=8045671&ttype=0&cirid=18978EFCED89549259181089311&cicmp=1657475&cijs=1&dast=V7EXECFgPCRy_OC6aURATCRy_OC6aURAUAAAAGBvQHGzFc7oYrGodFIi5Xo-VkNdwMJrPVYDHZTCHEWC6TQS2QsMx-30FBOT09ZpdBxnKZDGqBrGly-d3whabT4XPd63W_313n9DnsIpdf97I4DIfPX_BwHh5mv-hpOHz-gofz8DC7xX6f0-7W_N06l9H0eavuJrfm7xb7XZ7TW2m0vMV-n9PuFlz-FrPL7fLLAQAAAOABQKmwH-IHEAAgAgAAAEACAAAAgCKg4t9C4AIAAAAAA6AA60cDAIqD4Vx368tudLg-L7s_AAAeAkAAAAYUSAAGcJpKACpyDk4AAAAAAAAAAFj-____YwD0iM9kADKUBm8MegAefAAehAAAALKGGtENrdkvlhWIChKLGAEAAABAMrV5HE3qhMqiCgCAIN0K4AoAIKAthVj8LEt3UOItDAAAgGBsgR4Wv9_ssGv8bpcBAAAAAAAAAJj9n_2jCRGNuaUFsRTwqv0CAgCs_QICALCpGwDAWwBc0BG0YjBYnUFMNqPdZHYAAAAAd_____96IDcbOYajxXC2cMwWG9duOTHsRp6Zw7gZjUwW2257wHA9TxFGjWl9I8Iy-30HBeX09JhdBhnLZTKoBbKmyeU3iA8ahuVkEMxvwhaj1WSyWQ5ny8VkMBwNR6P9CdxogBM0HA4Wu8Fit1gMJ4vJaLAcLFAgBhOckOFoM1mNdqvdZDmcjEazzWSDFK1azUabwXA1m8x2u9VwMFyORkjRmsVsMlnMRsvdZrCcjAbDyXCIMLFZGEcLj2-t2KwmbtFmtFtLXIOZW2SYuEyWmXPlcMzWotfHdNqNRg6Lb4uCAUp7EVykE83p8ne5LG_N2-LWOX0Oi1iiOVmkE9ll35uNHMPRYjhbOGaLjWu3nBh2I8_MYdyMRiaLbbdvbBbG0cLjWys2q4lbtBnt1hLXYOYWGSYuk2XmXDkcs7Xo9TGddqORw-LbN1az4Wa2GW4W-8ZqNtzMNsPNYt-hM3xXn7NRedMqPDKhwzXuNmVOg8JlsHh_EtNi2p0dPL_f0alSXTTGhuybUJgNHoNBEUsEp4t0InoZTxexRPK0SCfC1WYwWk5so91qOfPYLB7bbDZzzowzl2s43A1XFrFEabpIJ3rdy-IwHD5_wcN5eJj9oqfh8PkLHs7Dw-wW-31Ou1vzd-tcRtPnrbqb3Jq_W-x3eU5vpdHyFvt9TrtbcPlbzC63y6L-Y0OMRnPdbK4YLOeawSoBAAAAAAAAACxhzrwJAAAAwGkgi8VgslguAIQY6y7Bp1TIoxP4W3HjxxBzuvxdLstb87a4dU6fw8oAEjsF!&excid=22&tst=1&docw=0
pragma
no-cache
cache-control
no-cache
upgrade-insecure-requests
1
user-agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
sec-fetch-mode
nested-navigate
accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
sec-fetch-site
cross-site
referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
accept-encoding
gzip, deflate, br
cookie
t_gid=ee1d4616-c4d6-4f77-9c55-be9d1d78be2b-tuct474dab8
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

status
200
server
nginx/1.13.12
content-type
text/html;charset=ISO-8859-1
accept-ranges
bytes
date
Fri, 13 Sep 2019 08:37:12 GMT
via
1.1 varnish
x-served-by
cache-fra19143-FRA
x-cache
MISS
x-cache-hits
0
x-timer
S1568363832.310058,VS0,VE9
cmTagFEED_MANAGER.js
vidstat.taboola.com/vpaid/units/23_12_2/infra/
756 KB
178 KB
Script
General
Full URL
https://vidstat.taboola.com/vpaid/units/23_12_2/infra/cmTagFEED_MANAGER.js
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.114.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
517e7d1c064ad5ca2f630bcec7317fed6608bfd1a5b53e645a891ecaad58cc7d

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
via
1.1 3f6fbf009bb5cf969f92ba2e59576614.cloudfront.net (CloudFront), 1.1 varnish
age
239033
x-amz-meta-mtime
1568124679
x-cache
Miss from cloudfront, HIT
x-amz-meta-ctime
1568124711
status
200
x-amz-meta-mode
33188
content-encoding
gzip
content-length
182048
x-served-by
cache-hhn4058-HHN
last-modified
Tue, 10 Sep 2019 14:11:53 GMT
server
AmazonS3
x-timer
S1568363832.293467,VS0,VE0
etag
"23425923fd6e4e866ffd24e427f75bc6"
x-amz-meta-uid
0
vary
Accept-Encoding
x-amz-meta-gid
0
cache-control
public, max-age=2592000
x-amz-cf-pop
FRA53-C1
accept-ranges
bytes
content-type
application/javascript
x-amz-cf-id
L5zmTcMmylMWLuMKoFh1KvhuODQqOjTpAMVjk4LFhEXWmLVAWBv9gw==
x-cache-hits
359373
cmOsUnit.css
vidstat.taboola.com/vpaid/units/23_12_2/assets/css/
34 KB
6 KB
Stylesheet
General
Full URL
https://vidstat.taboola.com/vpaid/units/23_12_2/assets/css/cmOsUnit.css
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.114.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
45676a0091b9749d7a5c81a546266569cdbdbfb9bf9e4e6c5c24e5927cf70c21

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
via
1.1 0cbb1ca51bf146be48b40804581e4466.cloudfront.net (CloudFront), 1.1 varnish
age
239034
x-amz-meta-mtime
1568124677
x-cache
Miss from cloudfront, HIT
x-amz-meta-ctime
1568124689
status
200
x-amz-meta-mode
33188
content-encoding
gzip
content-length
6213
x-served-by
cache-hhn4058-HHN
last-modified
Tue, 10 Sep 2019 14:11:31 GMT
server
AmazonS3
x-timer
S1568363832.293398,VS0,VE0
etag
"c540b9e603243834d682572fc8d223c4"
x-amz-meta-uid
0
vary
Accept-Encoding
x-amz-meta-gid
0
cache-control
public, max-age=2592000
x-amz-cf-pop
FRA53-C1
accept-ranges
bytes
content-type
text/css
x-amz-cf-id
bQwigBcjFGMw-E6Ntm5MokPrfVwpyY9Rgp3fYiIx_UEbWjrwsj1r-w==
x-cache-hits
563146
/
ssl.3.damoh.giga.de/70da51037a6be20b76f65ecb8792dcecfe146d7f/ Frame 4364
653 B
1 KB
XHR
General
Full URL
https://ssl.3.damoh.giga.de/70da51037a6be20b76f65ecb8792dcecfe146d7f/
Requested by
Host: text
URL: data:text/javascript;base64,dmFyIE9oamF1ZGlwQWxpZWNhaUo9T2hqYXVkaXBBbGllY2FpSnx8e307CihmdW5jdGlvbihjKXtmdW5jdGlvbiBjYSgpe3guUmV8fCh4LlJlPTApO3guUmUrKzt3aW5kb3cudmlkZW9wa2dJbnRlcmZhY2UhPXgudmlkZW9wa2dJbnRlcmZhY2UmJih3aW5kb3cudmlkZW9wa2dJbnRlcmZhY2U9eC52aWRlb3BrZ0ludGVyZmFjZSk7MTA+eC5SZSYmd2luZG93LnNldFRpbWVvdXQoY2EsNTAwKX1mdW5jdGlvbiB6KCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIseik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIseik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIseik7ZGE9ITA7Zm9yKHZhciBjPTA7YzxDLmxlbmd0aDtjKyspQ1tjXS5sb2FkKCk7CmZvcihjPTA7YzxDLmxlbmd0aDtjKyspe3ZhciBiPUNbY10ucGxheSgpO2lmKHZvaWQgMCE9PWIpYi50aGVuKGZ1bmN0aW9uKCl7fSlbImNhdGNoIl0oZnVuY3Rpb24oKXt9KX1LJiYoSygpLEs9ITEpfWZ1bmN0aW9uIGVhKCl7dmFyIGM9d2luZG93Lk9PO2N8fChjPXdpbmRvdy5qT09QbGF5ZXJfMCk7cmV0dXJuIGN9ZnVuY3Rpb24gZmEoKXtpZihtKXttLnBhdXNlQnV0dG9ufHwobS5wYXVzZUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1sZWZ0OiA2cHg7cGFkZGluZy1ib3R0b206IDZweDsiIG9uZXJyb3I9InRoaXMuc3JjPVwnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9wYXVzZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlF6UTVOelUxTjBRMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UXpRNU56VTFOMFUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBETkRrM05UVTNRalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERORGszTlRVM1F6WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BnSG5DckVBQUFGMFNVUkJWSGphN0ptOWlvTkFFTWZqM1JVVzhTTWFQd2hhMjRjSTFsWldlWUxZK1FTV2dwVytnNCtVSm04UnRVMU1pbURsTGJjZ3dTUEhRY0xlempGVHpRNHkrOXZoUHlQTENrbVN6S0RaeCtsMGdnZDlQcC9oUWQ5dU4zalF3ekFnTkF0N213RTBsQWRDWXlOaXBSRWFOWTJWUm1pUTBOdnROZ3hEU1pLcXFqb2NEbU44dFZydGRqdlA4OXEyemZPY0krak5abE9XSmZVSlh4UkYxK3VWTG91aThIMmYrazNUa0NQeE1qM2lPQjU5V1pZSjkzaUFrWmpZdmYvM2xTYXFtRVJvMmtkeExxQW5TWVl2K3lITzQvUjRCTTFYcFJsRDQyLzhGeFhGUmtSTmc5UTB5SkdIallqeXdPbUJqZmlmRzdHdTYvdmw4WGlrYVlreitld2wyNzJUMjlIeldmYjcvWHE5ZGwyMzY3b3N5OGlTeGkrWEN3RU5na0FVUlJKTTA3VHYrK2UzRXh6SHdVWkU2RWVhbnMvbjRLQUYyN1lSbWdtMFpWbndvRTNUaEFkdEdBWTg2T1Z5aWRCTW9IVmRod2V0YVJvODZNVmlBUTlhVlZXRVpnS3RLQW84NkpmY1hGaERmMy9MNGQ4K0JSZ0ErUk5XU3hQaVI0d0FBQUFBU1VWT1JLNUNZSUk9Ii8+Jyk7Cm0ucGxheUJ1dHRvbnx8KG0ucGxheUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1sZWZ0OiA2cHg7cGFkZGluZy1ib3R0b206IDZweDsiIG9uZXJyb3I9InRoaXMuc3JjPVwnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9wbGF5MTgxMDAyLnBuZ1wnIiBzcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRHdBQUFBOENBSUFBQUMxbms0bEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeWhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVOaTFqTURZM0lEYzVMakUxTnpjME55d2dNakF4TlM4d015OHpNQzB5TXpvME1EbzBNaUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01UVWdLRTFoWTJsdWRHOXphQ2tpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2UXpRNU56VTFOemsyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZRelE1TnpVMU4wRTJOVVV3TVRGRk5UazVSamhCTTBNelEwVXhOMFUwUkRnaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcERORGszTlRVM056WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwRE5EazNOVFUzT0RZMVJUQXhNVVUxT1RsR09FRXpRek5EUlRFM1JUUkVPQ0l2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHZWa0dJa0FBQUhaU1VSQlZIamE3Smd4aXNKUUVJWjFYYkJSbXdoaURpQjZnVTB0cEJJRUM0dUFoVTBNQkZ2RlhxMFZQRUNDVm9MYWVnR0xpS1dGSGlDa2pyR3hqTE11aUd6QTNlVWx6L2ZZK2FzUW5QQmwvT2RsWnVLcXFzWjQwN3ZydXZ4Qm4wNG4vcUF2bHd0LzBMN3ZJelFOdmNVNEZOb0RvYkVRTWRNSWpaN0dUSDhxa2N2bFNPTFQ2WFM5WHQvdjkxVHQ0Wk9wV3ExMnU5MzVmSjVLcFh4YUlvV0dUTU9yRjR2RjlYcGRLQlQ0Z0w2WFJDYVRXU3dXalVhREJuUzRidXYxZW9QQjRDdjk3SG82K01SYXJXWVlSajZmNThBZWp3S0xMNWZMY3JrY0VYUWltODJTL0ZNZk53WHZKNVBKU3FVQ0Y3dmRqamw3UFA4MnRkdnR5V1FTK21rWStXZGNsdVhwZEFxR1lib1FneXFWU3NBTkJScWFwd1ZCSVBTMEpFay8vZ3dzRGltSG8zQ3oyZkNSNmJ1YXplWnNOaU8zT08zV1ZMcnB4YTNwbjhMUDU3T3U2K1NISUwxKytuQTRBTEhqT0s4ZkFuNFpicHJtY0Rqa1puSUJTMEFMdFZxdEdCcTNub2VESlRxZHp2RjQ1R2F3aFo1SlVaVFFpU08wUjcvZmh3YVYwV2s4R0c3YnRxWnBZQXh1VmdpV1piVmFMU2crcHZjZWorR2owV2c4SHROWTFvVHlGTS96VkZYZGJyZVVsaldFUXlnTTRkREJBWEdrSnY2bXVDaUt1TXREYUZ6MUlqUkNZeUZpcGhFYW9iRVFFZm9mUVY4RkdBQkdFSjRVNUZJZnp3QUFBQUJKUlU1RXJrSmdnZz09Ii8+Jyk7Cm0ubXV0ZUJ1dHRvbnx8KG0ubXV0ZUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1yaWdodDogNnB4O3BhZGRpbmctYm90dG9tOiA2cHg7IiBvbmVycm9yPSJ0aGlzLnNyYz1cJ2h0dHBzOi8vaG1kYXNzdHMuc2NobmVldm9ubW9yZ2VuLmNvbS9pbWcvbXV0ZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlEwWkNNRGMwUWpBMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UTBaQ01EYzBRakUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBETkRrM05UVTNSalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERORGszTlRVNE1EWTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1ByV2YzOGNBQUFKVVNVUkJWSGphN0ptL2p3RkJGTWU1dTNKUmM5UkVmZndCTGxHaW9ISTZqV3Y5QVZSWGllZ0ZDWTJ3Q2pyMDRoL2dMOUQ3MFlocTc1dWRaQ0xyZHRuZDJjM04zYnhpOHF6ZE41OTU3L3RtN2ZLV3kyVVBiL2F5MysvNWd6NGNEdnhCbjg5bi9xQVZSUkhRYnRpVGgwTVQ4aERRb2hGRnBnVzAwRFI3YUlXcDFldDF4WGxqQmkxSjBuQTR6R1F5TGtDejBiVFA1MnUzMjlGb0ZMNExUY0lBT2hRS3RWcXRXQ3hHUGpLQlJzVXd6bVl6UjZDUjNXNjM2L2Y3NlJFN0FiUFpMTWJwZElxd3lBSWM5cnZITGJFMSsxQU56cHRxY0dqZEdPOGVxS0FzeTdmRWowY29Gb3VWU2dVT1lZWHpxaHF0bGVsR1JLVnl1WnpCY3BQSjVJL0g3OHFqVkNwaEhBd0dpVVFDSFl6ek1WSkVqV05PMDFpeEhwYXg2UVdrcktsVUNrNi8zNmVzbWd0dkhSUHlzQ1pRVFpCUDFlQzhxL1lJNGwxNU9IVWIvMUtOcU1oYXhWejl3VVFDUWwyUHA5T3NQSFNoN2NqamVyVHB1SnBwSmduV2JjUS85YmhsVXg2T1pwcExlVGlWNmNWaWdUczhaNDNZNi9YSXg4bGtRZzZlVGlleWpOK2JhV3I0VVVVZEFtMkJYZ3V0Ti9kdXQxdXYxM3JmWXRaNFBHNXFNY3ZsVXJNTVRCRU9oMW51SHJKcUJsYzJHbzE4UG0raFJKRDd0WVB6UVcrY2UyYWFybGFybTgybVZxdFoxdFY4UHI5MmNPSHhlSFM4RVR1ZERxWnBOcHMybTRIU2o4ZGpFbUc3M1VJNVR1MGVtSVp3QndJQis4K0lsSDYxV2htRThscHJCWTJoS1VlakVlR09SQ0o4dkdHQ3VBdUZ3clVpK1hqREJPNTBPbzNSQldodk1CaGtXRGpzWExoM09DMlBaMG1TR0lhN1hDN2lWYS80SjBCQS93OW8wWWdDV2tDTFJoVHlFTkRNN1Z1QUFRQndvdnZJdjA5WTZnQUFBQUJKUlU1RXJrSmdnZz09Ii8+Jyk7Cm0udW5tdXRlQnV0dG9ufHwobS51bm11dGVCdXR0b249JzxpbWcgc3R5bGU9Im1heC13aWR0aDogMjVweDttYXgtaGVpZ2h0OiAyNXB4O3BhZGRpbmctcmlnaHQ6IDZweDtwYWRkaW5nLWJvdHRvbTogNnB4OyIgb25lcnJvcj0idGhpcy5zcmM9XCdodHRwczovL2htZGFzc3RzLnNjaG5lZXZvbm1vcmdlbi5jb20vaW1nL3VubXV0ZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlEwWkNNRGMwUWpRMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UTBaQ01EYzBRalUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBEUmtJd056UkNNalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERSa0l3TnpSQ016WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BpL2RxR3dBQUFTRlNVUkJWSGphN0psTFRCTkJHTWUzaUVpbDcyNUxhMHVRaTYyUEF4b0RIUEhDelpaRXFpYVFRQTJKd3NGWHZHaE1DSGZmSmlZRzFDWWVSRUUweElQdEJZN1lFeWFDK0VLSUVCTXI3VzRWaW9qV2IzZXRXYnF6MjA1WjFFMzJPMndtT3pQZi9QYWIvenhYMDk3ZVRpak5paE9KaFBLZ0tZcFNIblFxbFZJZWREcWRWcUgvaGhVUkNqUlZIaXEwT2hEVlNLdlFxcWIvZmFUUHpNM3RvK2t0eTh0Zk5tdzQ1UEY4TENuaDUzWjNkM2QxZGVWMHNpMlZhbzdGd0kvK3g0OVhXdTFoandjdjBta2NxNmNvYUF5SW9TYTBkM2xxU3JleXdtWHBkTHErdmo2Zno1ZlR5YmJGeGQ0M2IzenhPSGdBUDU1VWF2LzhQQllHSmpSTjg3L1lzN1RVOC9ZdGNBTnhUMCtQaHcxWVRtS29vdi81ays5bmZ6eU9oWUVuRHk0MmZQTXVMZlcrZTBjTUQzdTlYdTZOaEVNSWF1L1VsR0UxTWJJVzlCZzhoNGFHWkpESERac3RXVlFrNVBZZU8wWmtUa0FTTWI0bFFuelhhdVhLK0ZpREJIU2EzKzhYbFFmV0NJQkJjNlNxU3NoTlBIOU8xTmNUNGljM2lQSHQ5KytSeE9kZExsZG5aMHRMQzZUM3NzWUVJdE52TWtRYWJMSzBOTGgxcXdRM01zWml4SS85L3NjbUU4Y0tKVjJzL1pFS3RxYWhkeG9iRzhXKzlVc3NabWh1SmxhUFM0NGJ4aVhNaHZ6QmVtZDZHa21jdkhadFMyMXRPaGpVNi9WL0VMTVNlUE0wZkhGTlRZMlVWa1pHbU5BS3VPOXMydFJXV2NseGc5eERNek5JNG5OT1oyTnRMWjlNSW9FaGp4d0NyNjVtdUkzR3JOZmJ2MzBEVUlnMzZGaU1PTnJSOFNoVFVScGFob0dZUDNkMDgrWkhpUVJhRlZldkVtMXRhOXA3RkJqbVhOeU12ck9VdzlwWmgyT3lyaTVQVlJTeUlxNlZXMkRQT2pvR0RZYjBtbTNOa2M2Ym0xRkZhMnVlQVY1UFRXZHhYN2tpbG5uZFlubkp6aFh5N0tkbGtBZG5ZMlBFeVpOaW1hMFU1WXJGOGc5d2dackdKaGJPMlR5RGFjUU5DL1hZbUN6UW9vc0xCbmN1NHQ5RzA5czdPNzFPcDNEWmswaXN6NVFYQ2hHN2QrY216c1Q3eWR6Y2ptajBuMFlhaUlOQjlLbU1KT0Y1NGZObkJQcUpFOFRSbzFnNnlkNTdpUEhNenM2T2pvNkt4c3hnWUFJbVR2eFFwK1BTU082Nm16Y1BrQ1EwNFhhNzVUellEckFtVnEzcDY5Y0w4L05vWXF0MW9LeU1ZTjF5Q1dSSitKakk0T0J0blE0QWdON0FManI1UnJxQWV3K0dPQjVIWk1EaUVncjFRKy96ZlBhWGxkRWFEWEFiQlEwMTNMc1h0bGpnU0J3T2h6bEVtaDBiaFc5TlJZa1hGaTZLRWNPaVdGMmRQbjQ4S3llczFYNncyKzkvK2lUa0JsZndhb0NGWnI2d3Y1OWpuWmlZQU9XSXNXbXdWQlZZV0xpRS9JV1hJWVprUlVVRnN1Nk81ZVVIc1pnUnhYSGFiSVlPV2RVSkRRM3dqRVFpTXR3d0JSWVhFZk92Um5ONnp4NjZxa3E2N2tSSnlVR2JEUXJuNHpiQ21qeG5SR0dUOENaQWtnOWV2dzRFQW54RkltMTg0MFlvakhTeWpwYzFUMHRMc3hwcklrbEFZWURHeDZGUDRTbnRBUW8zQ2JqQkxSYUd4dWwwWWlua01rVWRZditYdmlndVBtVXlBVVRXL0oxTUpuTTYyZm45Ty9qWnRiSUM2ZnRhTGZqQll0QTRIQTdGM1pvcUU3cTh2Rng1MEhhN1hYblFOcHROZWRBa3U0ZFVvZGNmMm1xMUtnL2FZckVvRDlwc05pc1Ayb1M1aEtyUWhVSWI4N2c0L08rZ1lWK21QR2p1ZjRleTdKY0FBd0Rhbk9MSU8vcGdrQUFBQUFCSlJVNUVya0pnZ2c9PSIvPicpOwptLnNraXBhYmxlQnV0dG9ufHwobS5za2lwYWJsZUJ1dHRvbj0nPGRpdiBzdHlsZT0ib3BhY2l0eTogMC43O21pbi1oZWlnaHQ6IDI1cHg7bWF4LWhlaWdodDogMjVweDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2Rpc3BsYXk6IGlubGluZS1ibG9jaztsaW5lLWhlaWdodDogMjVweDtwYWRkaW5nLWxlZnQ6IDZweDttYXJnaW4tcmlnaHQ6IDZweDtwYWRkaW5nLXJpZ2h0OiA2cHg7Ym9yZGVyOiAjRkZGRkZGO2JhY2tncm91bmQtY29sb3I6YmxhY2s7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ij5Ta2lwIEFkIGluIFt0aW1lXXM8ZGl2PicpO20uc2tpcEJ1dHRvbnx8KG0uc2tpcEJ1dHRvbj0nPGRpdiBzdHlsZT0ibWluLWhlaWdodDogMjVweDttYXgtaGVpZ2h0OiAyNXB4O29wYWNpdHk6IDAuNjttYXJnaW4tcmlnaHQ6IDZweDtwYWRkaW5nLWxlZnQ6IDZweDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2Rpc3BsYXk6IGlubGluZS1ibG9jaztsaW5lLWhlaWdodDogMjVweDtiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14OyI+U2tpcCBBZDxpbWcgc3R5bGU9Im1heC13aWR0aDogMzBweDtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246IG1pZGRsZTsiIG9uZXJyb3I9XCdodHRwczovL2htZGFzc3RzLnNjaG5lZXZvbm1vcmdlbi5jb20vaW1nL3NraXAxODEwMDIucG5nXCcgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQVlBQUFBNi9ObHlBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQTNCcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1UTTRJRGM1TGpFMU9UZ3lOQ3dnTWpBeE5pOHdPUzh4TkMwd01Ub3dPVG93TVNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3VFUwOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXRiUzhpSUhodGJHNXpPbk4wVW1WbVBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZjMVI1Y0dVdlVtVnpiM1Z5WTJWU1pXWWpJaUI0Yld4dWN6cDRiWEE5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM4aUlIaHRjRTFOT2s5eWFXZHBibUZzUkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwRk9UWkRRalZHTUVSR01USXhNVVUyT0RReFFVVkJOME5HTVVNeU9Ua3hOU0lnZUcxd1RVMDZSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBGUmpjM09VRkdNRVJHUkRVeE1VVTJPRU0xT1VFNFFrSkdSamRHTmtRM05pSWdlRzF3VFUwNlNXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEZSamMzT1VGRlJrUkdSRFV4TVVVMk9FTTFPVUU0UWtKR1JqZEdOa1EzTmlJZ2VHMXdPa055WldGMGIzSlViMjlzUFNKQlpHOWlaU0JRYUc5MGIzTm9iM0FnUTBNZ01qQXhOeUFvVFdGamFXNTBiM05vS1NJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5KdmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09tUXpZemsxTkRCbUxUVmxZVE10TkRsbE5DMWhOR1V5TFdRMk1qUXlOVGN6Wm1VNVlTSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcEZPVFpEUWpWR01FUkdNVEl4TVVVMk9EUXhRVVZCTjBOR01VTXlPVGt4TlNJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BtNlhOVDRBQUFKcVNVUkJWSGphWXZ6Ly96L0RTQUpNRENNTWpIcDQxTU9qSGg3MThLaUhSejA4NnVGUkQ0OTZlTlREb3g0ZTlmQ29oN0VCbHNIbUlFTkR3d0JzNHVmUG45OUFGUXRBQXdEVXhqWTJOakZkWFYwcjlmWDEvVWpWQzlXREFzZ3hCeGVtU1pMMkJZTFMwdEt3RlN0V3JBUjZQZ3JrWUZJaWdCaXhRWldIZVhsNWVVQzBob1lHeDdadDI1YXFBWUdlbnA0UGtSNytSNHpZb1BJd2Nvenc4ZkV4ckY2OXVqc2FDSFIxZFgwR09vYnBWbWlWbDVkSHFLdXJhMWhaV2ZFY08zWnN4WWdvcFFNQ0FneUF5WHkrbTVzYnp6TWd1SExseXJiaGtxUnhPaENVcjllc1dUUGJFUWkwdGJXOWhrV2hSUWlBOHZYa3laTkxzckt5TXJXMHREeUdWYUdGRDJSblovdE1talJwc3BtWldjaXdLN1J3QVJjWEZ4VnBhZW1GZ1lHQk1qZUFZRVMwcFRVMU5ia1dMbHpZRHl6VS9HbWRwRmxvbEtUL2taT3YyOXZiTTRDRm1zYXdLN1R3Z2ZqNGVJY2hWMmlOdVA0d0pVbncwNmRQRENNbVNWKzdkdTBic0tNVlA2eGFXcmpBL1Buejk0RzZsVStBWUZqSE1DZ0pBL3ZPVTVxQjRPN2R1L3VHYXJWRWRCSXVLU2twdm43OStvMzc5KzhmR05ZdExXQUg0a3hUVTFQanBVdVh0Z3piN2lFTUFEMjZhTjY4ZVhNZlBIaHdpTjdkUTdxMnRCNC9mc3lRbHBhV0NVeksxeDQrZkhob1dJOTRIRDkrL0ZrcUVBQUxxVStQSGowNlFrcGdEYmxDcTYrdmIxMC9FQUJqK0FnNUJkNlFpZUdQSHo4eXBLU2tsSjRBQW1JOE8yU2JsbGV2WHIyeVk4ZU9HKzd1N3VIQXBIeU1GTS9TT2tuVFpPYUJFaXdsSldXRlB2TUFGYU9LK1lOdWJna1VtMEFQV3RMS2ZNYlJ4YVdqSGg3MThLaUhSejA4NnVGUkQ0OTZlTlREb3g0ZTlmQ29oMGM5UE9waEJnYUFBQU1BR21DMHBlSmNHRUlBQUFBQVNVVk9SSzVDWUlJPSIvPjwvZGl2PicpOwppZihtLnNpZGVsb2Fkcyl7dmFyIGM9ZnVuY3Rpb24oKXt9O20uc2lkZWxvYWRzLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5hbGlhczsiZnVuY3Rpb24iPT09dHlwZW9mIGImJihiPWIoKSk7YT1hLnVybDsiZnVuY3Rpb24iPT09dHlwZW9mIGEmJihhPWEoKSk7ZS5ZYShhLGIsW10sYyxjLGwpfSl9bC5sKG0uZ2xvYmFsQ29uZmlnLG0uY2xpZW50Q29uZmlnLG0ucHJlY2hlY2tlZCxtLm9uUmVhZHksbS5vbkZhaWx1cmUsbSk7ZG9jdW1lbnQuaGRfcmVhZHk9ITA7dmFyIGI9bS5zdGFydFBsYXllcjtiJiYiZnVuY3Rpb24iPT09dHlwZW9mIGImJmIoKX1lbHNlIGtjKGZhLDUwKX1mdW5jdGlvbiByKGMsYil7aWYoZS5jbyllLnRyYWNrKCJzdGF0c19oZF9ieXBhc3MiLCIiLCEwKTtlbHNlIGlmKG0mJmwpeyhtLmFkVGFnfHxtLnByZXJvbGxBZFRhZykmJmMucGF1c2UoKTtlLnYoay5mZCxjLnUoKSk7aWYoYy5nZXRDdXJyZW50VGltZSl7dmFyIGE9Yy5nZXRDdXJyZW50VGltZSgpO2EmJgplLnRyYWNrKCJhY3RpdmF0ZWRBdCIsYSl9Yj9sLkthPSEwOmUudHJhY2soInN0YXRzX2hkX2FiZCIsIiIsITApO2E9bmV3IGdhO2EuZmYoYyk7YS5CdChsKTthLkF0KG0pO2EubXQoKTthLmcoKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cihjLGIpfS5iaW5kKHRoaXMpLDUwKX1mdW5jdGlvbiBoYShjLGIpe2MucGF1c2UoKTtpZihsLkdiLmxlbmd0aCl7dmFyIGE9bC5HYi5zaGlmdCgpO2lmKCJhZGNhbGwiPT1hLnR5cGUpe3ZhciBoO2g9ZS5IdCh7IltMT0FEU0NSSVBUXSI6ZS5iYSgxMCksIltVVElMU10iOmUuYmEoMTApLCJbQ0FMTEJBQ0tdIjplLmJhKDEwKX0pO3dpbmRvd1toWyJbTE9BRFNDUklQVF0iXV09ZS5maC5iaW5kKGUpO3dpbmRvd1toWyJbVVRJTFNdIl1dPWw7Zm9yKHdpbmRvd1toWyJbQ0FMTEJBQ0tdIl1dPWZ1bmN0aW9uKGEpe2Zvcih2YXIgaCBpbiBhKW1baF09YVtoXTtyKGMsYil9O2g9YS5zY3JpcHRzLnNoaWZ0KCk7KWUuZmgoaCxmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJzaWRlbG9hZCBzdWNjZXNzIil9LApmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJzaWRlbG9hZCBmYWlsZWQiKX0sbCl9ZWxzZSByKGMsYil9ZWxzZSByKGMsYil9Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTXM9dGhpcy5hWzFdO3RoaXMuWGs9dGhpcy5hWzFdO3RoaXMuZ2o9dGhpcy5hWzddO3RoaXMuRW09dGhpcy5hWzNdO3RoaXMubmo9dGhpcy5hWzEwXTt0aGlzLkRuPXRoaXMuYVszXTt0aGlzLmZrPXRoaXMuYVsxXTt0aGlzLk9zPXRoaXMuYVsxXTt0aGlzLkl1PXRoaXMuYVs4XTt0aGlzLlZxPXRoaXMuYVs0XTt0aGlzLmo9dGhpcy5hWzNdfWMuY3Q9YjtiLnByb3RvdHlwZT17THM6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5Nczp0aGlzLldrKGEpfSxXazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuWGs6dGhpcy5maihhKX0sZmo6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLmdqOnRoaXMuRG0oYSl9LApEbTpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuRW06dGhpcy5taihhKX0sbWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLm5qOnRoaXMuQ24oYSl9LENuOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5Ebjp0aGlzLmVrKGEpfSxlazpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuZms6dGhpcy5OcyhhKX0sTnM6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLk9zOnRoaXMuSHUoYSl9LEh1OmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5JdTp0aGlzLlVxKGEpfSxVcTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuVnE6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBpYT1jLmN0fHxpYSxsYz1uZXcgaWEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1sYy5Mcyg0KTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5jbz0KITE7dGhpcy5TYT0ic2V0dXAiO3RoaXMuS2M9W107dGhpcy5qZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLllzLmJpbmQodGhpcykpO3RoaXMua2I9e307dGhpcy5OZz17fTt0aGlzLmNmPSExfWMuJGo9YjtiLnByb3RvdHlwZT17YnU6ZnVuY3Rpb24oKXt2YXIgYT0iIixiO2ZvcihiIGluIHRoaXMua2IpdGhpcy5rYi5oYXNPd25Qcm9wZXJ0eShiKSYmKGErPWIrdGhpcy5rYltiXSsiXyIpO3JldHVybiBhfSx6YzpmdW5jdGlvbigpe3RoaXMuY2Z8fCh0aGlzLmNmPWUuYmEoMTApKTtyZXR1cm4gdGhpcy5jZn0sbGI6ZnVuY3Rpb24oYSl7dGhpcy5rYlthXXx8KHRoaXMua2JbYV09MCk7dGhpcy5rYlthXSs9MTs1PHRoaXMua2JbYV0mJiF0aGlzLk5nW2FdJiYodGhpcy5OZ1thXT0hMCwibmV3QmlnQWRJZCI9PWEmJnRoaXMudHJhY2soInN0YXRzX2hkX2NoZWNrdHJhY2tzIix0aGlzLmJ1KCksITApKX0samU6ZnVuY3Rpb24oKXt0aGlzLmFhPXt1cmxzOnt9LApob21hZFVybHM6e30sb3JpZ2luYWxVcmxzOnt9LHNjcmlwdHM6e30sZXZlbnRsaXN0ZW5lcjpbXSxnZW5lcmFsRXZlbnRsaXN0ZW5lcjpbXSxpRnJhbWVzOltdLGlGcmFtZU9uTG9hZEhhbmRsZXI6e30saUZyYW1lVXJsOiIiLHRyYWNlOltdLHN0YWNrOltdLGVycm1zZzpbXX19LGpuOmZ1bmN0aW9uKGEpe3RoaXMuYWEuZXJybXNnLnB1c2goYSl9LHBvc3RNZXNzYWdlOmZ1bmN0aW9uKGEsYil7dHJ5e2EuY29udGVudFdpbmRvdyYmKGE9YS5jb250ZW50V2luZG93KX1jYXRjaChkKXt9YSYmYS5wb3N0TWVzc2FnZSYmYS5wb3N0TWVzc2FnZShiLCIqIil9LG1hOmZ1bmN0aW9uKGEsYixkKXt0aGlzLnBvc3RNZXNzYWdlKGEse3R5cGU6InZwYWlkIixldmVudDpiLGRhdGE6ZH0pfSxZczpmdW5jdGlvbihhKXthJiZhLmRhdGEmJmEuZGF0YS50eXBlJiYidnBhaWQiPT1hLmRhdGEudHlwZSYmdGhpcy5YcyhhLmRhdGEpfSxYczpmdW5jdGlvbihhKXtpZih0aGlzLmFhJiZ0aGlzLmFhLmV2ZW50bGlzdGVuZXIpZm9yKHZhciBiPQp0aGlzLmFhLmV2ZW50bGlzdGVuZXIubGVuZ3RoLGQ9MDtkPGI7ZCsrKXRoaXMuYWEmJnRoaXMuYWEuZXZlbnRsaXN0ZW5lciYmdGhpcy5hYS5ldmVudGxpc3RlbmVyW2RdJiZhLmV2ZW50PT10aGlzLmFhLmV2ZW50bGlzdGVuZXJbZF0ubmFtZSYmdGhpcy5hYS5ldmVudGxpc3RlbmVyW2RdLmNiKGEpfSxiZTpmdW5jdGlvbihhLGIpe3RoaXMuYWEuZXZlbnRsaXN0ZW5lci5wdXNoKHtuYW1lOmEsY2I6Yn0pfSxsZzpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmdxKGEpLGQ9ITE7aWYoYilyZXR1cm4gdGhpcy5laChhLCJQT1NUIix7aG9tYWRfcmVzb2x2ZV9oYXNoOmJ9LGZ1bmN0aW9uKGEpe3RyeXtkPUpTT04ucGFyc2UoYS5yZXNwb25zZVRleHQpLnVybH1jYXRjaChiKXtjb25zb2xlLmxvZygid3RmIixiKX19LGZ1bmN0aW9uKCl7fSwhMCwhMCksZH0sZ3E6ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IFJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPyhbdy4tXSopOj8uKihbMC05XSspPy8/KFthLWYwLTldezQwfSkvPyQiLAoiZyIpO2lmKChiPWIuZXhlYyhhKSkmJihiWzJdfHxiWzVdKSl7aWYoYlsyXSlyZXR1cm4gYlsyXTtpZihiWzVdKXJldHVybiBiWzVdfWVsc2UgaWYoYj1uZXcgUmVnRXhwKCJeKGh0dHBzPyk6Ly8oW3cuLV0qKTo/LiooWzAtOV0rKT8vPyhbYS1mMC05XXs0MH0pLz8kIiwiZyIpLChiPWIuZXhlYyhhKSkmJmJbNF0pcmV0dXJuIGJbNF07cmV0dXJuITF9LGduOmZ1bmN0aW9uKGEsYil7aWYoYiYmISgwPnRoaXMubGEoYSkuaG9zdC5pbmRleE9mKCJkYW1vaCIpKSl7aWYoYT09Yil7aWYoZS5RcChhKSlyZXR1cm47KGI9dGhpcy5sZyhhKSl8fChiPWEpfTA9PT1iLmluZGV4T2YoIi8vIikmJihiPSJodHRwczoiK2IpO3RoaXMuYWEudXJsc1thXT1iO3RoaXMuYWEudXJsc1tiXT1hO3RoaXMuYWEuaG9tYWRVcmxzW2FdPWI7dGhpcy5hYS5vcmlnaW5hbFVybHNbYl09YX19LFFwOmZ1bmN0aW9uKGEpe3ZhciBiPSExO3RoaXMuYWEuaG9tYWRVcmxzW2FdJiYoYj10aGlzLmFhLmhvbWFkVXJsc1thXSk7CnJldHVybiBifSx0ZzpmdW5jdGlvbihhKXt2YXIgYj0hMTt0aGlzLmFhLm9yaWdpbmFsVXJscyYmdGhpcy5hYS5vcmlnaW5hbFVybHNbYV0mJihiPXRoaXMuYWEub3JpZ2luYWxVcmxzW2FdKTtyZXR1cm4gYn0sZWI6ZnVuY3Rpb24oYSxiKXtifHwoYj0iIik7dGhpcy50cmFjaygic3RhdHNfdnBhaWRfIithLGIsITApfSxwcjpmdW5jdGlvbihhKXtyZXR1cm4iYWJvdXQ6YmxhbmsiPT1hfHwiYWJvdXQ6c2VsZiI9PWF8fCIiPT1hfSx0ZTpmdW5jdGlvbihhKXtpZighYXx8Im9iamVjdCIhPT10eXBlb2YgYSlyZXR1cm4gMDt2YXIgYj0wLGQ9IiI7Zm9yKGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiZiKys7cmV0dXJuIGJ9LENnOmZ1bmN0aW9uKGEsYil7dmFyIGQ9YVtiXTtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBkP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGQpOiJmdW5jdGlvbiI9PT10eXBlb2YgZD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChkKCkpOiJvYmplY3QiPT09dHlwZW9mIGQ/CmQ6bnVsbH0sSGg6ZnVuY3Rpb24oYSl7Zm9yKDthIT1kb2N1bWVudC5ib2R5JiZudWxsIT1hOylhPWEucGFyZW50RWxlbWVudDtyZXR1cm4gYT09ZG9jdW1lbnQuYm9keT8hMDohMX0sV2c6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiYiZnVuY3Rpb24iPT09dHlwZW9mIGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PyhhPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpPzA8PWEudG9wJiYwPD1hLmxlZnQmJmEuYm90dG9tPD0od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSYmYS5yaWdodDw9KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpOiExOiExfSxCZTpmdW5jdGlvbihhLGIpe3ZhciBkPTAsZj0wLG49MCxjPTAsZT0hMTtpZighYXx8IWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0fHwiZnVuY3Rpb24iIT09dHlwZW9mIGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXJldHVybiExOwp2YXIgZz1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFnKXJldHVybiExO249Zy5oZWlnaHQqZy53aWR0aDtkPWcud2lkdGg7Zj1nLmhlaWdodDswPmcudG9wJiYoZis9Zy50b3ApO2cuYm90dG9tPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpJiYoZi09Zy5ib3R0b20tKHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpOzA+Zy5sZWZ0JiYoZCs9Zy5sZWZ0KTtnLnJpZ2h0Pih3aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKSYmKGQtPWcucmlnaHQtKHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpKTswPmYmJihmPTApOzA+ZCYmKGQ9MCk7MDxuJiYoYz0xMDAvbipkKmYpO2M+PWImJihlPSEwKTtyZXR1cm4gZX0sQ2U6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5CZShhLmVsLAphLnBlcmNlbnQpO2Euc3RhcnRUaW1lfHwoYS5zdGFydFRpbWU9KG5ldyBEYXRlKS5nZXRUaW1lKCkpO2lmKGIpe2lmKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWEuc3RhcnRUaW1lPj1hLnRpbWVNUyl7YS5jYigpO3JldHVybn19ZWxzZSBhLnN0YXJ0VGltZT0hMTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuQ2UoYSl9LmJpbmQodGhpcyksMTAwKX0sRWI6ZnVuY3Rpb24oYSl7YT1hJiYibnVtYmVyIj09PXR5cGVvZiBhP01hdGguYWJzKGEpOjEwO3JldHVybiBNYXRoLnJvdW5kKE1hdGgucG93KDEwLGEpKiguODk5OTk5OTk5Kk1hdGgucmFuZG9tKCkrLjEpKX0sYmE6ZnVuY3Rpb24oYSl7YT1hJiYibnVtYmVyIj09PXR5cGVvZiBhJiYwPGE/TWF0aC5yb3VuZChhKToxMDtmb3IodmFyIGI9IiIsZD0wO2Q8YTtkKyspYis9U3RyaW5nLmZyb21DaGFyQ29kZSgoLjU+TWF0aC5yYW5kb20oKT82NTo5NykrTWF0aC5mbG9vcigyNipNYXRoLnJhbmRvbSgpKSk7cmV0dXJuIGJ9LHZlOmZ1bmN0aW9uKGEpe3ZhciBiPQowLGQsZjtpZigwPT09YS5sZW5ndGgpcmV0dXJuIGI7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKylmPWEuY2hhckNvZGVBdChkKSxiPShiPDw1KS1iK2YsYnw9MDtyZXR1cm4gYn0sRWg6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2YXIgaD0iIixkLGY7Zm9yKGQ9NzswPD1kO2QtLSlmPWE+Pj40KmQmMTUsaCs9Zi50b1N0cmluZygxNik7cmV0dXJuIGh9ZnVuY3Rpb24gZChhLGIpe3JldHVybiBhPDxifGE+Pj4zMi1ifXZhciBmLG4sYz1BcnJheSg4MCksZT0xNzMyNTg0MTkzLGc9NDAyMzIzMzQxNyxrPTI1NjIzODMxMDIsTD0yNzE3MzM4NzgsbD0zMjg1Mzc3NTIwLHAsbSx0LEIscjthPWEmJiJzdHJpbmciPT09dHlwZW9mIGE/YToiIjtwPWEubGVuZ3RoO3ZhciBxPVtdO2ZvcihmPTA7ZjxwLTM7Zis9NCluPWEuY2hhckNvZGVBdChmKTw8MjR8YS5jaGFyQ29kZUF0KGYrMSk8PDE2fGEuY2hhckNvZGVBdChmKzIpPDw4fGEuY2hhckNvZGVBdChmKzMpLHEucHVzaChuKTtzd2l0Y2gocCUKNCl7Y2FzZSAwOmY9MjE0NzQ4MzY0ODticmVhaztjYXNlIDE6Zj1hLmNoYXJDb2RlQXQocC0xKTw8MjR8ODM4ODYwODticmVhaztjYXNlIDI6Zj1hLmNoYXJDb2RlQXQocC0yKTw8MjR8YS5jaGFyQ29kZUF0KHAtMSk8PDE2fDMyNzY4O2JyZWFrO2Nhc2UgMzpmPWEuY2hhckNvZGVBdChwLTMpPDwyNHxhLmNoYXJDb2RlQXQocC0yKTw8MTZ8YS5jaGFyQ29kZUF0KHAtMSk8PDh8MTI4fWZvcihxLnB1c2goZik7MTQhPXEubGVuZ3RoJTE2OylxLnB1c2goMCk7cS5wdXNoKHA+Pj4yOSk7cS5wdXNoKHA8PDMmNDI5NDk2NzI5NSk7Zm9yKGE9MDthPHEubGVuZ3RoO2ErPTE2KXtmb3IoZj0wOzE2PmY7ZisrKWNbZl09cVthK2ZdO2ZvcihmPTE2Ozc5Pj1mO2YrKyljW2ZdPWQoY1tmLTNdXmNbZi04XV5jW2YtMTRdXmNbZi0xNl0sMSk7bj1lO3A9ZzttPWs7dD1MO0I9bDtmb3IoZj0wOzE5Pj1mO2YrKylyPWQobiw1KSsocCZtfH5wJnQpK0IrY1tmXSsxNTE4NTAwMjQ5JjQyOTQ5NjcyOTUsQj10LAp0PW0sbT1kKHAsMzApLHA9bixuPXI7Zm9yKGY9MjA7Mzk+PWY7ZisrKXI9ZChuLDUpKyhwXm1edCkrQitjW2ZdKzE4NTk3NzUzOTMmNDI5NDk2NzI5NSxCPXQsdD1tLG09ZChwLDMwKSxwPW4sbj1yO2ZvcihmPTQwOzU5Pj1mO2YrKylyPWQobiw1KSsocCZtfHAmdHxtJnQpK0IrY1tmXSsyNDAwOTU5NzA4JjQyOTQ5NjcyOTUsQj10LHQ9bSxtPWQocCwzMCkscD1uLG49cjtmb3IoZj02MDs3OT49ZjtmKyspcj1kKG4sNSkrKHBebV50KStCK2NbZl0rMzM5NTQ2OTc4MiY0Mjk0OTY3Mjk1LEI9dCx0PW0sbT1kKHAsMzApLHA9bixuPXI7ZT1lK24mNDI5NDk2NzI5NTtnPWcrcCY0Mjk0OTY3Mjk1O2s9ayttJjQyOTQ5NjcyOTU7TD1MK3QmNDI5NDk2NzI5NTtsPWwrQiY0Mjk0OTY3Mjk1fXJldHVybihiKGUpK2IoZykrYihrKStiKEwpK2IobCkpLnRvTG93ZXJDYXNlKCl9LHZiOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iIixkLGYsbixjLGUsZyxrPTA7azxhLmxlbmd0aDspZD1hLmNoYXJDb2RlQXQoaysrKSwKZj1hLmNoYXJDb2RlQXQoaysrKSxuPWEuY2hhckNvZGVBdChrKyspLGM9ZD4+MixkPShkJjMpPDw0fGY+PjQsZT0oZiYxNSk8PDJ8bj4+NixnPW4mNjMsaXNOYU4oZik/ZT1nPTY0OmlzTmFOKG4pJiYoZz02NCksYj1iKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGMpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGQpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGUpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGcpO3JldHVybiBifSxtcjpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudmVuZG9yJiYtMTxuYXZpZ2F0b3IudmVuZG9yLmluZGV4T2YoIkFwcGxlIil9LAp1YzpmdW5jdGlvbigpe3ZhciBhPXt9LGI9ITEsZD0hMSxmPSExLG49ITEsYz0hMSxlPSExLGc9ITEsaz0hMSxtPSExLGw9ITE7dHJ5e2I9Y2hlY2tGb3JQaGFudG9tSlMoKX1jYXRjaChwKXt9dHJ5ey9cYkhlYWRsZXNzQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJihkPSEwKX1jYXRjaChyKXt9dHJ5e2Y9d2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoIndlYmRyaXZlciIpfHxuYXZpZ2F0b3IuTmI/ITA6ITF9Y2F0Y2godCl7fXRyeXtuPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk9wZXJhIiksYz0tMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94IiksZT0tMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJTYWZhcmkiKSxnPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk1TSUUiKSxtPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkNocm9tZSIpLGs9IWcmJiEhd2luZG93LlN0eWxlTWVkaWEsCmw9KG18fG4pJiYhIXdpbmRvdy5DU1N9Y2F0Y2gocSl7fWEuaXNQaGFudG9tSlM9YjthLmlzQ2hyb21lSGVhZGxlc3M9ZDthLmlzRmlyZWZveEhlYWRsZXNzPWY7YS5pc09wZXJhPW47YS5pc0ZpcmVmb3g9YzthLmlzU2FmYXJpPWU7YS5pc0lFPWc7YS5pc0VkZ2U9azthLmlzQ2hyb21lPW07YS5pc0JsaW5rPWw7cmV0dXJuIGF9LGFxOmZ1bmN0aW9uKCl7dmFyIGE9IlUiLGI9dGhpcy51YygpO2IuaXNQaGFudG9tSlM/YT0iSFAiOmIuaXNDaHJvbWVIZWFkbGVzcz9hPSJIQyI6Yi5pc0ZpcmVmb3hIZWFkbGVzcz9hPSJIRiI6KGIuaXNCbGluayYmKGE9IkIiKSxiLmlzT3BlcmEmJihhPSJPIiksYi5pc0ZpcmVmb3gmJihhPSJGIiksYi5pc1NhZmFyaSYmKGE9IlMiKSxiLmlzSUUmJihhPSJJIiksYi5pc0VkZ2UmJihhPSJFIiksYi5pc0Nocm9tZSYmKGE9IkMiKSk7cmV0dXJuIGF9LFRhOmZ1bmN0aW9uKCl7dmFyIGE9e1NpOmZ1bmN0aW9uKCl7cmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSl9LApjajpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9CbGFja0JlcnJ5L2kpfSxQcTpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpfSxqbDpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9PcGVyYSBNaW5pL2kpfSxJbTpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9JRU1vYmlsZS9pKX0sTW46ZnVuY3Rpb24oKXtyZXR1cm4gYS5TaSgpfHxhLmNqKCl8fGEuUHEoKXx8YS5qbCgpfHxhLkltKCl9fTtyZXR1cm4gYS5NbigpfSxsYTpmdW5jdGlvbihhKXt2YXIgYj0ic291cmNlIHByb3RvY29sIGF1dGhvcml0eSB1c2VySW5mbyB1c2VyIHBhc3N3b3JkIGhvc3QgcG9ydCByZWxhdGl2ZSBwYXRoIGRpcmVjdG9yeSBmaWxlIHF1ZXJ5IGFuY2hvciIuc3BsaXQoIiAiKTthPS9eKD86KD8hW146QF0rOlteOkBcL10qQCkoW146XC8/Iy5dKyk6KT8oPzpcL1wvKT8oKD86KChbXjpAXSopKD86OihbXjpAXSopKT8pP0ApPyhbXjpcLz8jXSopKD86OihcZCopKT8pKCgoXC8oPzpbXj8jXSg/IVtePyNcL10qXC5bXj8jXC8uXSsoPzpbPyNdfCQpKSkqXC8/KT8oW14/I1wvXSopKSg/Olw/KFteI10qKSk/KD86IyguKikpPykvLmV4ZWMoYSk7CmZvcih2YXIgZD17fSxmPTE0O2YtLTspZFtiW2ZdXT1hW2ZdfHwiIjtkLnF1ZXJ5S2V5PXt9O2RbYlsxMl1dLnJlcGxhY2UoLyg/Ol58JikoW14mPV0qKT0/KFteJl0qKS9nLGZ1bmN0aW9uKGEsYixoKXtiJiYoZC5xdWVyeUtleVtiXT1oKX0pO3JldHVybiBkfSx1bmlxdWU6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXt9LGQ9W10sZj0wLG49YS5sZW5ndGg7ZjxuOysrZiliLmhhc093blByb3BlcnR5KGFbZl0pfHwoZC5wdXNoKGFbZl0pLGJbYVtmXV09MSk7cmV0dXJuIGR9LFNiOmZ1bmN0aW9uKGEpe2E9dGhpcy5sYShhKS5ob3N0LnNwbGl0KCIuIik7dmFyIGI9IiI7YVthLmxlbmd0aC0yXSYmKGIrPWFbYS5sZW5ndGgtMl0rIi4iKTthW2EubGVuZ3RoLTFdJiYoYis9YVthLmxlbmd0aC0xXSk7cmV0dXJuIGJ9LEJhOmZ1bmN0aW9uKGEpe3ZhciBiPSIiLGQ9ITE7d2luZG93JiZ3aW5kb3cubG9jYXRpb24mJndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSYmKGI9d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKTsKYiYmLTE8Yi5pbmRleE9mKGEpJiYoZD0hMCk7cmV0dXJuIGR9LHFxOmZ1bmN0aW9uKCl7dmFyIGE9IiIsYj0iIixkPSIiO3RyeXthPXdpbmRvdy5sb2NhdGlvbi5ob3N0LGI9d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLHdpbmRvdyE9d2luZG93LnRvcCYmKGE9d2luZG93LnRvcC5sb2NhdGlvbi5ob3N0LGI9d2luZG93LnRvcC5sb2NhdGlvbi5wYXRobmFtZSl9Y2F0Y2goZil7ZG9jdW1lbnQucmVmZXJyZXImJihkPXRoaXMubGEoZG9jdW1lbnQucmVmZXJyZXIpLGE9ZC5ob3N0LGI9ZC5wYXRoKX1yZXR1cm4gYStifSxVbzpmdW5jdGlvbihhLGIpe2Zvcih2YXIgZD1bXSxmPVtdLG49MDtuPGIubGVuZ3RoO24rKylkW2Jbbl1dPSEwO2ZvcihuPTA7bjxhLmxlbmd0aDtuKyspZFthW25dXXx8Zi5wdXNoKGFbbl0pO3JldHVybiBmfSxXdDpmdW5jdGlvbihhLGIpe3ZhciBkPS0xLGY9IiI7dHJ5ezA8YS5pbmRleE9mKCIlIikmJjA8Yj8oZj1hLnNwbGl0KCIlIiksZD1iLzEwMCpmKTooZD1hLnNwbGl0KCI6IiksCmQ9MzYwMCorZFswXSs2MCorZFsxXSsgK2RbMl0sZD1NYXRoLnJvdW5kKGQpKX1jYXRjaChuKXtkPS0xfXJldHVybiBpc05hTihkKT8tMTpkfSx5ZzpmdW5jdGlvbihhKXthPU1hdGgucm91bmQoYSk7dmFyIGI9Ii0tOi0tIjswPD1hJiYoYT1NYXRoLmZsb29yKGEpLGI9TWF0aC5mbG9vcihhLzYwKSxiPXRoaXMuVmgoYikrIjoiK3RoaXMuVmgoTWF0aC5mbG9vcihhLTYwKmIpKSk7cmV0dXJuIGJ9LFZoOmZ1bmN0aW9uKGEpe3JldHVybiAxMD5hPyIwIithLnRvU3RyaW5nKCk6YS50b1N0cmluZygpfSxlZjpmdW5jdGlvbihhKXt0aGlzLlNhPWF9LHZnOmZ1bmN0aW9uKGEsYixkKXt2YXIgZjtkLnN0YXRlPXRoaXMuU2E7dGhpcy5XZihkKTsiZnVuY3Rpb24iPT09dHlwZW9mIHdpbmRvdy5DdXN0b21FdmVudD9mPW5ldyBDdXN0b21FdmVudChiLHtkZXRhaWw6ZH0pOihmPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpLGYuaW5pdEN1c3RvbUV2ZW50KGIsITEsITEsZCkpOwphLmRpc3BhdGNoRXZlbnQoZil9LHdjOmZ1bmN0aW9uKGEsYixkKXtifHwoYj0iaGRFdmVudCIpO2R8fChkPXdpbmRvdyk7dGhpcy52ZyhkLGIsYSl9LHY6ZnVuY3Rpb24oYSxiLGQsZixuLGMsZyl7dmFyIEE9YTtkJiZiJiYoYj1rLlhhKGIsZCkpO2ImJihBPWsuWGEoYSxiKSk7ZiYmKEE9ay5YYShBLGYpKTtuJiYoQT1rLlhhKEEsbikpO2MmJihBPWsuWGEoQSxjKSk7ZyYmKEE9ay5YYShBLGMpKTtlLndjKEEpfSwkczpmdW5jdGlvbihhKXt2YXIgYj17fTtpZighYS5jb2RlKXJldHVybiExO2lmKGEuc3BlY2lhbF90cmFjayliPWE7ZWxzZSBpZighKGEuY29kZSYmMTAwNTw9YS5jb2RlJiYxMDI5Pj1hLmNvZGUpfHwxMDIzPT1hLmNvZGV8fDEwMTg9PWEuY29kZSlyZXR1cm47dHJ5e2phJiYoYi5zZXNzaW9uX2lkPWphKTtiLmFkc2Vzc2lvbl9pZD1hLmFkc2Vzc2lvbl9pZD9hLmFkc2Vzc2lvbl9pZDoiZXBvbiI7YS5ob21hZEltcHJlc3Npb25BZElkJiYoYi5hZF9pZD1hLmhvbWFkSW1wcmVzc2lvbkFkSWQpOwpiLmV2ZW50PWEuY29kZTtiLnNpdGVfaHJlZj10aGlzLnFxKCk7aWYoYS5zdGF0ZSlzd2l0Y2goYS5zdGF0ZSl7Y2FzZSAicHJlcm9sbCI6Yi5wb3NpdGlvbj0xO2JyZWFrO2Nhc2UgIm1pZHJvbGwiOmIucG9zaXRpb249MjticmVhaztjYXNlICJwb3N0cm9sbCI6Yi5wb3NpdGlvbj0zO2JyZWFrO2RlZmF1bHQ6Yi5wb3NpdGlvbj0wfWEudmlkZW9fZHVyYXRpb24mJihiLnZpZGVvX2R1cmF0aW9uPWEudmlkZW9fZHVyYXRpb24pfWNhdGNoKGQpe31yZXR1cm4gYn0sV2Y6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy4kcyhhKTtpZihiKWlmKCFsfHwhbC5YKXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5XZihiKX0uYmluZCh0aGlzKSw1MDApO2Vsc2UgaWYobC5pc0VuYWJsZWQpe2lmKCJvYmplY3QiPT10eXBlb2YgYil0cnl7Yj1KU09OLnN0cmluZ2lmeShiKX1jYXRjaChkKXtiPWIudG9TdHJpbmc/Yi50b1N0cmluZygpOiIifWImJmIudHJpbSYmKGI9Yi50cmltKCkpO2E9bC5EZCgpOwpsLnphKGEsITApO2E9bC56YShhLCEwKTthLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0iIjthLmRhdGEuaG9tYWRfYXQ9YjtsLkxhKGEsZnVuY3Rpb24oKXt9KX19LHRyYWNrOmZ1bmN0aW9uKGEsYixkKXtpZihkKWlmKCFsfHwhbC5YKXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50cmFjayhhLGIsZCl9LmJpbmQodGhpcyksNTAwKTtlbHNlIGlmKGwuaXNFbmFibGVkKXthJiZhLnRyaW0mJihhPWEudHJpbSgpKTtiJiZiLnRyaW0mJihiPWIudHJpbSgpKTt2YXIgZj1hK2I7dGhpcy5NY3x8KHRoaXMuTWM9e30pO3RoaXMuTWNbZl18fCh0aGlzLk1jW2ZdPTApO3RoaXMuTWNbZl0rKzsxMDx0aGlzLk1jW2ZdfHwoZj1sLkRkKCkrIj9ob21hZF90cmFja19rZXk9IitlbmNvZGVVUklDb21wb25lbnQoYSkrIiZob21hZF90cmFja192YWx1ZT0iK2VuY29kZVVSSUNvbXBvbmVudChiKSxsLnphKGYsITApLGY9bC56YShmLCEwKSxmLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0KIiIsZi5kYXRhLmhvbWFkX3RyYWNrX2tleT0iKiIrZW5jb2RlVVJJQ29tcG9uZW50KGEpKyIqIixmLmRhdGEuaG9tYWRfdHJhY2tfdmFsdWU9IioiK2VuY29kZVVSSUNvbXBvbmVudChiKSsiKiIsbC5MYShmLGZ1bmN0aW9uKGQpe3ZhciBmPSExO2Q9ZC5yZXNwb25zZVRleHQ7dHJ5e2Q9SlNPTi5wYXJzZShkKSxkPWQuZGF0YSxkWzBdPT1lbmNvZGVVUklDb21wb25lbnQoYSkmJihmPSEwKSxkWzFdJiZkWzFdIT1lbmNvZGVVUklDb21wb25lbnQoYikmJihmPSExKX1jYXRjaChjKXt9Znx8dGhpcy50cmFjaygic3RhdHNfaGRfdHJhY2tjaGVjayIsKGRbMF0/ZFswXToiIikrKGRbMV0/ZFsxXToiIiksITApfS5iaW5kKHRoaXMpKSl9fSxKZTpmdW5jdGlvbigpe2wmJmwuWD9sLmlzRW5hYmxlZCYmbC5xbygpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5KZSgpfS5iaW5kKHRoaXMpLDUwMCl9LHJlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEmJiJvYmplY3QiPT10eXBlb2YgYSYmCmEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYikubGVuZ3RoP3RoaXMuaWIoYS5nZXRFbGVtZW50c0J5VGFnTmFtZShiKVswXSk6IiJ9LHVlOmZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLmNoaWxkTm9kZXMmJmEuY2hpbGROb2Rlc1swXT9hLmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlOiIifSxpYjpmdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLnFkKGEpOiIifSxxZDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnVlKGEpO2ImJihiPWIudHJpbSgpKTshYiYmYS50ZXh0Q29udGVudCYmKGI9YS50ZXh0Q29udGVudCxiPWIudHJpbSgpKTtyZXR1cm4gYn0sJGY6ZnVuY3Rpb24oYSxiLGQsZil7ZD0hMTtpZihiLkVlKGEpfHx0aGlzLnByKGEpfHwwPD1hLmluZGV4T2YoImRhdGE6aW1hZ2UiKSlyZXR1cm4gYTt3aW5kb3cuc2FuZGJveCYmd2luZG93LnNhbmRib3guYmYmJndpbmRvdy5zYW5kYm94LmJmWyJTdHJpbmcucHJvdG90eXBlLmluZGV4T2YiXSYmKDA8PXNhbmRib3guYmZbIlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiJdLmJpbmQoYSkoImVycm9yIil8fApzYW5kYm94LmJmWyJTdHJpbmcucHJvdG90eXBlLmluZGV4T2YiXS5iaW5kKGEpKCJFcnJvciIpKTtpZih0aGlzLnRnKGEpKXJldHVybiB0aGlzLnRnKGEpO3ZhciBuPXtob21hZF91cmxfcHJlZml4X2FsaWFzOiJ2cGFpZCJ9O24uaG9tYWRfdXJsX3N1ZmZpeD1hO24uaG9tYWRfdXJsX3N1ZmZpeF9iYXNlNjQ9dGhpcy52YihhKTtuLmhvbWFkX3JldHVybl9vbmx5X3VybF9hbmRfaGFzaD0idHJ1ZSI7bi5ob21hZF9oYXNoX2d1ZXNzZWQ9InRydWUiO2YmJmYucG9zdCYmKG5bIlgtSG9tYWQtUG9zdCJdPSJ0cnVlIik7ZCYmKG4uaG9tYWRfaW50cm9zcGVjdD0iaWZyYW1lIik7bi5ob21hZF92cGFpZF9jb21wYXRpYmxlPSJ0cnVlIjtuLmhvbWFkX3ZwYWlkX2N0eD0idHJ1ZSI7ZiYmZi5vbmx5VVJMJiYobi5ob21hZF9yZXBsYWNlX3VybHNfaW5fdGFncz0iTWVkaWFGaWxlIik7dmFyIGM9ITE7ZD0hMTtkPXRoaXMuWWEoYSxiLkphLG4sZnVuY3Rpb24oYSl7Yz1hLnJlc3BvbnNlVGV4dH0sCmZ1bmN0aW9uKCl7fSxiLCEwKTt0cnl7Y3x8KGM9ZCksYz1KU09OLnBhcnNlKGMpfWNhdGNoKGUpe2M9ITF9Yy51cmwmJmMuaGFzaCYmKGM9Yi51ZCgpLnJlcGxhY2UoIltoYXNoXSIsYy5oYXNoKSk7dGhpcy5nbihjLGEpO3JldHVybiBjfSxZYTpmdW5jdGlvbihhLGIsZCxmLG4sYyxlLGcpe3ZhciBrPWN8fGw7Yz0hMDtnJiYoYz0hMSk7aWYoayYmay5YKWlmKGsuaXNFbmFibGVkKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSl0cnl7YT1hKCl9Y2F0Y2gobSl7bihtKX1pZigic3RyaW5nIiE9dHlwZW9mIGEpbigpO2Vsc2V7ay56YShhLGMpO2M9ay56YShhLGMpO2MuZGF0YS5ob21hZF91cmxfcHJlZml4X2FsaWFzPWI7Yy5kYXRhLmhvbWFkX2hhc2hfZ3Vlc3NlZD0idHJ1ZSI7Zm9yKHZhciByIGluIGQpYy5kYXRhW3JdPWRbcl07cmV0dXJuIGsuTGEoYyxmLG4sIiIsIiIsZSl9fWVsc2UgbigpO2Vsc2Ugd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLllhKGEsYixkLGYsbiwKayxlLGcpfS5iaW5kKHRoaXMpLDUwMCl9LGVoOmZ1bmN0aW9uKGEsYixkLGYsYyxlLGcpe3ZhciBrPSEwO2cmJihrPSExKTtpZigic3RyaW5nIiE9dHlwZW9mIGQpe2c9ZDtkPSIiO2Zvcih2YXIgbSBpbiBnKWQrPSImIittKyI9IitlbmNvZGVVUklDb21wb25lbnQoZ1ttXSk7ZD1kLnN1YnN0cigxKX12YXIgbD1uZXcgWE1MSHR0cFJlcXVlc3Q7bC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshZnx8NCE9bC5yZWFkeVN0YXRlfHwyMDAhPWwuc3RhdHVzJiYyMDEhPWwuc3RhdHVzfHxmKGwpO2MmJjQ9PWwucmVhZHlTdGF0ZSYmMjAwIT1sLnN0YXR1cyYmMjAxIT1sLnN0YXR1cyYmYyhsKX07dHJ5e2wub3BlbihiLGEsayksbC53aXRoQ3JlZGVudGlhbHM9ZSwwPGQubGVuZ3RoJiZsLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpLGwuc2VuZChkKX1jYXRjaChyKXtjJiZjKCl9cmV0dXJuIGx9LEtyOmZ1bmN0aW9uKGEsCmIsZCl7dGhpcy5laChhLCJHRVQiLCIiLGZ1bmN0aW9uKGEpe2E9YS5yZXNwb25zZVRleHQ7aWYodGhpcy5LYylmb3IodmFyIGMgaW4gdGhpcy5LYylhPWEuc3BsaXQoYykuam9pbih0aGlzLktjW2NdKTtjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2MudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtjLnNyYz0iZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIrZS52YihhKTtkJiYoYy5vbmVycm9yPWQpO2RvY3VtZW50LmhlYWQuZmlyc3RDaGlsZD9kb2N1bWVudC5oZWFkLmluc2VydEJlZm9yZShjLGRvY3VtZW50LmhlYWQuZmlyc3RDaGlsZCk6ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChjKTtiJiZzZXRUaW1lb3V0KGIsMCl9LmJpbmQodGhpcyksZCl9LGZoOmZ1bmN0aW9uKGEsYixkLGYpe3ZhciBjPXtob21hZF91cmxfcHJlZml4X2FsaWFzOiJ2cGFpZCJ9O2MuaG9tYWRfdXJsX3N1ZmZpeD1hO2MuaG9tYWRfdXJsX3N1ZmZpeF9iYXNlNjQ9dGhpcy52YihhKTtjLmhvbWFkX3JldHVybl9vbmx5X3VybF9hbmRfaGFzaD0KInRydWUiO2MuaG9tYWRfaGFzaF9ndWVzc2VkPSJ0cnVlIjt0aGlzLllhKGEsZi5KYSxjLGZ1bmN0aW9uKGEpe2E9YS5yZXNwb25zZVRleHQ7dHJ5e2E9SlNPTi5wYXJzZShhKX1jYXRjaChjKXthPSExfXRoaXMuS3IoZi51ZCgpLnJlcGxhY2UoIltoYXNoXSIsYS5oYXNoKSxiLGQpfS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7fSxmLCEwKX0sSHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuS2M9YX0sRXY6ZnVuY3Rpb24oYSxiLGQsZixjKXt0aGlzLllhKGEsZCx7fSxmdW5jdGlvbihhKXt0cnl7dmFyIGQ9SlNPTi5wYXJzZShhLnJlc3BvbnNlVGV4dCk7ZFswXSYmKGQ9ZFswXSk7ZD9kLmlkPyhiPWIucmVwbGFjZSgiW2lkXSIsZC5pZCksYj1iLnJlcGxhY2UoIltwcmljZV0iLGQucHJpY2UpLGI9Yi5yZXBsYWNlKCJbYWR2ZXJ0aXNlcl0iLGQuYWR2ZXJ0aXNlciksYj1iLnJlcGxhY2UoIltjdXJsXSIsZC5jdXJsKSxiPWIucmVwbGFjZSgiW2Zvcm1hdF0iLGQuZm9ybWF0KSxiPWIucmVwbGFjZSgiW3NyY10iLApkLnNyYyksYj1iLnJlcGxhY2UoIltwcmljZXJhbmdlXSIsZC5wcmljZXJhbmdlKSxiPWIucmVwbGFjZSgiW3BpZF0iLGQucGlkKSxiPWIucmVwbGFjZSgiW3ByaW9dIixkLnByaW8pLGI9Yi5yZXBsYWNlKCJbZGlkXSIsZC5kaWQpLGMoe3BsYWNlaG9sZGVyOmIsbWFjcm86Zn0pKTpjKHtwbGFjZWhvbGRlcjoiIixtYWNybzpmfSk6Yyh7cGxhY2Vob2xkZXI6IiIsbWFjcm86Zn0pfWNhdGNoKGUpe2Moe3BsYWNlaG9sZGVyOiIiLG1hY3JvOmZ9KX19LGZ1bmN0aW9uKCl7Yyh7cGxhY2Vob2xkZXI6IiIsbWFjcm86Zn0pfSl9LFBuOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0hMTshYjspe3ZhciBkPWEubGFzdEluZGV4T2YoIkVOQ09ERSgiKTswPmQ/Yj0hMDooZD1hLnN1YnN0cmluZyhkKzcsYS5pbmRleE9mKCIpIixkKSksYT1hLnJlcGxhY2UoIkVOQ09ERSgiK2QrIikiLGVuY29kZVVSSUNvbXBvbmVudChkKSkpfXJldHVybiBhfSxrcjpmdW5jdGlvbihhLGIpe3ZhciBkPSExO2lmKGIpZm9yKHZhciBmPQowO2Y8Yi5sZW5ndGg7ZisrKWlmKGJbZl09PWEpe2Q9ITA7YnJlYWt9cmV0dXJuIGR9fX0pKGMpO3ZhciBSPWMuJGp8fFI7bmV3IFI7dmFyIGU9bmV3IFI7KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoYSl7dGhpcy5kYXRhPWF8fHt9fWMuWmo9YjtiLlhhPWZ1bmN0aW9uKGEsYil7dmFyIGQ9e30sZjtmb3IoZiBpbiBiKWRbZl09YltmXTtmb3IoZiBpbiBhKWRbZl09YVtmXTtyZXR1cm4gZH07Yi5Rcz17Y29kZToiMTAwMCIsdHlwZToicGVuYWx0eSIsbWVzc2FnZToiIixuYW1lOiJwZW5hbHR5In07Yi5kcz17Y29kZToiMTAwMSIsdHlwZToibWVkaWFlcnJvciIsbWVzc2FnZToiIixuYW1lOiJhZEVycm9yIn07Yi5udj17Y29kZToiMTAwMiIsdHlwZToidnBhaWQiLG1lc3NhZ2U6IiIsbmFtZToidnBhaWQifTtiLnlwPXtjb2RlOiIxMDAzIix0eXBlOiJlbXB0eVZhc3QiLG1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IueHY9e2NvZGU6IjEwMDQiLHR5cGU6Im1hbGZvcm1hdHRlZFhNTCIsCm1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IuVWY9e2NvZGU6IjEwMDUiLHR5cGU6ImFkU3RhcnQiLG1lc3NhZ2U6IiIsbmFtZToiYWRTdGFydCJ9O2IuTmY9e2NvZGU6IjEwMDYiLHR5cGU6ImFkRmlyc3RRdWFydGlsZSIsbWVzc2FnZToiIixuYW1lOiJhZEZpcnN0UXVhcnRpbGUifTtiLlJmPXtjb2RlOiIxMDA3Iix0eXBlOiJhZE1pZFBvaW50IixtZXNzYWdlOiIiLG5hbWU6ImFkTWlkUG9pbnQifTtiLlZmPXtjb2RlOiIxMDA4Iix0eXBlOiJhZFRoaXJkUXVhcnRpbGUiLG1lc3NhZ2U6IiIsbmFtZToiYWRUaGlyZFF1YXJ0aWxlIn07Yi4kbT17Y29kZToiMTAwOSIsdHlwZToiYWRDb21wbGV0ZSIsbWVzc2FnZToiIixuYW1lOiJhZENvbXBsZXRlIn07Yi5QZj17Y29kZToiMTAxMCIsdHlwZToiYWRJbXByZXNzaW9uc0NhbGxlZCIsbWVzc2FnZToiIixuYW1lOiJhZEltcHJlc3Npb24ifTtiLlV1PXtjb2RlOiIxMDExIix0eXBlOiJ2YXN0TG9hZGluZ0ZhaWxlZCIsbWVzc2FnZToiIiwKbmFtZToiYWRFcnJvciJ9O2IuY3M9e2NvZGU6IjEwMTIiLHR5cGU6Im5vQ3JlYXRpdmUiLG1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IuenA9e2NvZGU6IjEwMTMiLHR5cGU6ImVtcHR5VmFzdEZyb21Ib21hZFNlcnZlckV2ZW50IixtZXNzYWdlOiIiLG5hbWU6ImFkRXJyb3IifTtiLnV2PXtjb2RlOiIxMDE0Iix0eXBlOiJ3cmFwcGVyTGltaXRSZWFjaGVkIixtZXNzYWdlOiIiLG5hbWU6ImFkRXJyb3IifTtiLmlnPXtjb2RlOiIxMDE1Iix0eXBlOiJjbGlja3Rocm91Z2giLG1lc3NhZ2U6IiIsbmFtZToiYWRDbGljayJ9O2IuUG89e2NvZGU6IjEwMTYiLHR5cGU6ImNvbnRpbnVlQ29udGVudCIsbWVzc2FnZToiIixuYW1lOiJjb250aW51ZUNvbnRlbnQifTtiLmdkPXtjb2RlOiIxMDE3Iix0eXBlOiJjb250ZW50UGxheWVyUGxheSIsbWVzc2FnZToiIixuYW1lOiJjb250ZW50UGxheWVyUGxheSJ9O2IuZmQ9e2NvZGU6IjEwMTgiLHR5cGU6ImNvbnRlbnRQbGF5ZXJQYXVzZSIsbWVzc2FnZToiIiwKbmFtZToiY29udGVudFBsYXllclBhdXNlIn07Yi5UZj17Y29kZToiMTAxOSIsdHlwZToiYWRTa2lwcGVkIixtZXNzYWdlOiIiLG5hbWU6ImFkU2tpcHBlZCJ9O2IuYm49e2NvZGU6IjEwMjAiLHR5cGU6ImFkUmVxdWVzdCIsbWVzc2FnZToiIixuYW1lOiJhZFJlcXVlc3QifTtiLlVjPXtjb2RlOiIxMDIxIix0eXBlOiJhZFBsYXkiLG1lc3NhZ2U6IiIsbmFtZToiYWRQbGF5In07Yi5ZZD17Y29kZToiMTAyMiIsdHlwZToiYWRQYXVzZSIsbWVzc2FnZToiIixuYW1lOiJhZFBhdXNlIn07Yi4kZD17Y29kZToiMTAyMyIsdHlwZToiYWRUaW1lIixtZXNzYWdlOiIiLG5hbWU6ImFkVGltZSJ9O2IuYW49e2NvZGU6IjEwMjQiLHR5cGU6ImFkTWV0YSIsbWVzc2FnZToiIixuYW1lOiJhZE1ldGEifTtiLmJpPXtjb2RlOiIxMDI1Iix0eXBlOiJ2aWV3YWJsZSIsbWVzc2FnZToiIixuYW1lOiJ2aWV3YWJsZSJ9O2IuZnM9e2NvZGU6IjEwMjYiLHR5cGU6Im5vdFZpZXdhYmxlIixtZXNzYWdlOiIiLG5hbWU6Im5vdFZpZXdhYmxlIn07CmIueGQ9e2NvZGU6IjEwMjciLHR5cGU6Im11dGUiLG1lc3NhZ2U6IiIsbmFtZToibXV0ZSJ9O2IudGY9e2NvZGU6IjEwMjgiLHR5cGU6InVubXV0ZSIsbWVzc2FnZToiIixuYW1lOiJ1bm11dGUifTtiLmpnPXtjb2RlOiIxMDI5Iix0eXBlOiJjb250ZW50UGxheWVyTXV0ZWQiLG1lc3NhZ2U6IiIsbmFtZToiY29udGVudFBsYXllck11dGVkIn07Yi5tdj17Y29kZToiMTAzMCIsdHlwZToidnBhaWRlcnJvciIsbWVzc2FnZToiIixuYW1lOiJhZEVycm9yIn07Yi5SdT17Y29kZToiOTAwMSIsdHlwZToidmFyaWFibGVEZWxldGVkRXZlbnQiLG1lc3NhZ2U6IiIsbmFtZToidmFyaWFibGVEZWxldGVkRXZlbnQifTtiLmVzPXtjb2RlOiI5MDAyIix0eXBlOiJub1ZhcmlhYmxlU2V0dGluZ0V2ZW50IixtZXNzYWdlOiIiLG5hbWU6Im5vVmFyaWFibGVTZXR0aW5nRXZlbnQifTtiLnByb3RvdHlwZT17Z2V0RXJyb3JDb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3JDb2RlfX19KShjKTt2YXIgaz0KYy5aanx8aztjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5odT10aGlzLmFbMl07dGhpcy5Iaz10aGlzLmFbMV07dGhpcy5LdT10aGlzLmFbOF07dGhpcy5QcD10aGlzLmFbN107dGhpcy5FaT10aGlzLmFbNF07dGhpcy5Gaj10aGlzLmFbMV07dGhpcy52dT10aGlzLmFbNF07dGhpcy5vbD10aGlzLmFbNV07dGhpcy5Mbz10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs2XX1jLkFsPWI7Yi5wcm90b3R5cGU9e2d1OmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5odTp0aGlzLkdrKGEpfSxHazpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuSGs6dGhpcy5KdShhKX0sSnU6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLkt1OnRoaXMuT3AoYSl9LE9wOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5QcDp0aGlzLkRpKGEpfSxEaTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuRWk6CnRoaXMuRWooYSl9LEVqOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5Gajp0aGlzLnV1KGEpfSx1dTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMudnU6dGhpcy5ubChhKX0sbmw6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLm9sOnRoaXMuS28oYSl9LEtvOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5Mbzp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmo6YX19fSkoYyk7dmFyIGthPWMuQWx8fGthLG1jPW5ldyBrYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPW1jLmd1KDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7fWMuYWs9YjtiLnByb3RvdHlwZT17dmU6ZnVuY3Rpb24oYSl7dmFyIGI9MCxkLGYsYztpZigwPT1hLmxlbmd0aClyZXR1cm4gYjtkPTA7Zm9yKGM9YS5sZW5ndGg7ZDxjO2QrKylmPWEuY2hhckNvZGVBdChkKSwKYj0oYjw8NSktYitmLGJ8PTA7cmV0dXJuIE1hdGguYWJzKGIpfSxqYTpmdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKERhdGUubm93KCkvMUUzLzM2MDAvMjQpK25hdmlnYXRvci5hcHBDb2RlTmFtZStuYXZpZ2F0b3IuYXBwTmFtZStuYXZpZ2F0b3IuYXBwVmVyc2lvbituYXZpZ2F0b3IudXNlckFnZW50K25hdmlnYXRvci5wbGF0Zm9ybSsobmF2aWdhdG9yLmxhbmd1YWdlfHxuYXZpZ2F0b3IuRHx8IngiKX0sa3E6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yb3VuZChEYXRlLm5vdygpLzFFMy8zNjAwKStuYXZpZ2F0b3IuYXBwQ29kZU5hbWUrbmF2aWdhdG9yLmFwcE5hbWUrbmF2aWdhdG9yLmFwcFZlcnNpb24rbmF2aWdhdG9yLnVzZXJBZ2VudCtuYXZpZ2F0b3IucGxhdGZvcm0rKG5hdmlnYXRvci5sYW5ndWFnZXx8bmF2aWdhdG9yLkR8fCJ4IikrKG5ldyBEYXRlKS50b1RpbWVTdHJpbmcoKS5zdWJzdHIoLTEyKX0sb2Q6ZnVuY3Rpb24oYSl7YT1wYXJzZUludChhKTtpZig2NTw9CmEmJjkwPj1hfHw5Nzw9YSYmMTIyPj1hKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGEpO2lmKDA+PWEpcmV0dXJuIiI7aWYoNjU+YSlyZXR1cm4gdGhpcy5vZChhKzY1KTtpZig5MDxhKXJldHVybiB0aGlzLm9kKE1hdGgucm91bmQoYS8yKSl9LHJldmVyc2U6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGQ9YS5sZW5ndGgtMSxiPSIiOzA8PWQ7Yis9YVtkLS1dKTtyZXR1cm4gYn0saWE6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy52ZSh0aGlzLmphKCkrIiIpLGE9KGErIiIrdGhpcy5yZXZlcnNlKGErIiIpKS5tYXRjaCgvLnsxLDJ9L2cpLGI9IiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWIrPXRoaXMub2QoYVtkXSk7MD09Yi5sZW5ndGgmJihiPSJ6b3JrIik7cmV0dXJuIGJ9LGZyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWEoKSsiMiJ9LFRnOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMudmUodGhpcy5rcSgpKyIiKSxhPShhKyIiK3RoaXMucmV2ZXJzZShhKyIiKSkubWF0Y2goLy57MSwyfS9nKSwKYj0iIixkPTA7ZDxhLmxlbmd0aDtkKyspYis9dGhpcy5vZChhW2RdKTswPT1iLmxlbmd0aCYmKGI9InpvcmsiKTtyZXR1cm4gYn19fSkoYyk7dmFyIEo9Yy5ha3x8SjtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5kbT10aGlzLmFbOV07dGhpcy5xdj10aGlzLmFbMl07dGhpcy5tbz10aGlzLmFbMV07dGhpcy5QdT10aGlzLmFbNl07dGhpcy5DaT10aGlzLmFbNl07dGhpcy5xbj10aGlzLmFbN107dGhpcy53az10aGlzLmFbM107dGhpcy5qPXRoaXMuYVszXX1jLlNvPWI7Yi5wcm90b3R5cGU9e2NtOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5kbTp0aGlzLnB2KGEpfSxwdjpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMucXY6dGhpcy5sbyhhKX0sbG86ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLm1vOnRoaXMuT3UoYSl9LE91OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhPwp0aGlzLlB1OnRoaXMuQmkoYSl9LEJpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5DaTp0aGlzLnBuKGEpfSxwbjpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMucW46dGhpcy52ayhhKX0sdms6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLndrOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuajphfX19KShjKTt2YXIgbGE9Yy5Tb3x8bGEsbmM9bmV3IGxhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9bmMuY20oNCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe312YXIgYT0veHl6Ly50ZXN0KGZ1bmN0aW9uKCl7eHl6fSk/L1xiX3N1cGVyXGIvOi8uKi87Yi5leHRlbmQ9ZnVuY3Rpb24oaCl7dmFyIGQ9dGhpcy5wcm90b3R5cGUsZj1PYmplY3QuY3JlYXRlKGQpLGM7Zm9yKGMgaW4gaClmW2NdPSJmdW5jdGlvbiI9PT0KdHlwZW9mIGhbY10mJiJmdW5jdGlvbiI9PXR5cGVvZiBkW2NdJiZhLnRlc3QoaFtjXSk/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD10aGlzLm07dGhpcy5tPWRbYV07dmFyIGY9Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5tPWg7cmV0dXJuIGZ9fShjLGhbY10pOmhbY107aD0iZnVuY3Rpb24iPT09dHlwZW9mIGYubD9mLmhhc093blByb3BlcnR5KCJpbml0Iik/Zi5sOmZ1bmN0aW9uKCl7ZC5sLmFwcGx5KHRoaXMsYXJndW1lbnRzKX06ZnVuY3Rpb24oKXt9O2gucHJvdG90eXBlPWY7Zi5jb25zdHJ1Y3Rvcj1oO2guZXh0ZW5kPWIuZXh0ZW5kO3JldHVybiBofTtjLmlqPWJ9KShjKTt2YXIgTT1jLmlqfHxNO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnVzPXRoaXMuYVs4XTt0aGlzLkFvPXRoaXMuYVsyXTt0aGlzLmlpPXRoaXMuYVs3XTt0aGlzLkJuPQp0aGlzLmFbNV07dGhpcy5UdD10aGlzLmFbOV07dGhpcy5zcz10aGlzLmFbNV07dGhpcy5XdT10aGlzLmFbOF07dGhpcy5qPXRoaXMuYVsxXX1jLlNrPWI7Yi5wcm90b3R5cGU9e3RzOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy51czp0aGlzLnpvKGEpfSx6bzpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuQW86dGhpcy5oaShhKX0saGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5paTp0aGlzLkFuKGEpfSxBbjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuQm46dGhpcy5TdChhKX0sU3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlR0OnRoaXMucnMoYSl9LHJzOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5zczp0aGlzLlZ1KGEpfSxWdTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuV3U6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBtYT1jLlNrfHxtYSxvYz1uZXcgbWEoMSxuZXcgRGF0ZSwKMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9b2MudHMoNCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7Yy5zbD1NLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLk1hPXt9O3RoaXMuSz1udWxsO3RoaXMuR2M9MTAwO3RoaXMuRmI9MDt0aGlzLlVhPTE1MDt0aGlzLkhiPTA7dGhpcy5DdChiKX0sZzpmdW5jdGlvbigpe30sUjpmdW5jdGlvbigpe3RoaXMuRmI8PXRoaXMuVWE/KHRoaXMuRmIrKyx0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuZy5iaW5kKHRoaXMpLHRoaXMuR2MpKTowPnRoaXMuVWEmJih0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuZy5iaW5kKHRoaXMpLHRoaXMuR2MpKX0sb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GYj50aGlzLlVhPyEwOiExfSxhZjpmdW5jdGlvbigpe3RoaXMuRmI9MH0sTzpmdW5jdGlvbigpe3JldHVybiJlbXB0eSJ9LEN0OmZ1bmN0aW9uKGIpe3RoaXMuSz0KYn0saXE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LfSxQOmZ1bmN0aW9uKGIpe2UudHJhY2soInN0YXRzX3BsYXllciIsYi5PKCksITApO3RoaXMuTWFbYi5qYSgpXT1iO04mJk4uYWgmJk4uYXUoYil9LCR2OmZ1bmN0aW9uKCl7cmV0dXJuIGUudGUodGhpcy5NYSl9LE46ZnVuY3Rpb24oYil7dmFyIGE9Yi52aWRlb1RhZyxoO2ZvcihoIGluIHRoaXMuTWEpaWYoYT09dGhpcy5NYVtoXS52aWRlb1RhZylyZXR1cm4hMDtyZXR1cm4gdGhpcy5NYVtiLmphKCldPyEwOiExfSxscjpmdW5jdGlvbihiKXtiPWIuSWEoKTtmb3IodmFyIGEgaW4gdGhpcy5NYSlpZihiLmlkPT10aGlzLk1hW2FdLklhKCkuaWQpcmV0dXJuITA7cmV0dXJuITF9LHB3OmZ1bmN0aW9uKGIpe3RoaXMuTWFbYi5pZF09bnVsbH19KX0pKGMpO3ZhciBxPWMuc2x8fHE7KGZ1bmN0aW9uKGMpe2MudWw9TS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy52aWRlb1RhZz10aGlzLmNvbnRhaW5lcj10aGlzLmlkPW51bGw7dGhpcy5HYz0KMTA7dGhpcy5GYj0wO3RoaXMuVWE9NTA7dGhpcy5WPW51bGw7dGhpcy5xYT0hMTt0aGlzLnBsYXllcj1iO3RoaXMuemI9IiI7dGhpcy5uZz0hMTt0aGlzLlMoKX0sTzpmdW5jdGlvbigpe3JldHVybiJlbXB0eSJ9LHU6ZnVuY3Rpb24oKXt2YXIgYj17fSxhPXRoaXMudmlkZW9UYWcsaD10aGlzLklhKCksZD10aGlzLmdldFJhd1BsYXllcigpO2lmKGIudmlkZW9UYWc9YSliLnZpZGVvVGFnSWQ9YS5pZDtpZihiLmNvbnRhaW5lcj1oKWIuY29udGFpbmVySWQ9aC5pZDtkJiYoYi5wbGF5ZXI9ZCk7cmV0dXJuIGJ9LFM6ZnVuY3Rpb24oKXt9LE5hOmZ1bmN0aW9uKCl7fSxLdDpmdW5jdGlvbihiKXt0aGlzLlY9Yn0sYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5WfSxGdDpmdW5jdGlvbihiKXt0aGlzLk1lPWJ9LFp2OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTWV9LExlOmZ1bmN0aW9uKCl7fSxSOmZ1bmN0aW9uKCl7dGhpcy5GYjw9dGhpcy5VYSYmKHRoaXMuRmIrKyx3aW5kb3cuc2V0VGltZW91dCh0aGlzLlMuYmluZCh0aGlzKSwKdGhpcy5HYykpfSxpc0Z1bGxzY3JlZW46ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0cnl7aWYoZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4pZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKVsiY2F0Y2giXShmdW5jdGlvbigpe30pO2Vsc2UgaWYoZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4pZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4oKTtlbHNlIGlmKGRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4pZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpO2Vsc2UgaWYoZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbilkb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuKCk7ZWxzZSByZXR1cm4hMX1jYXRjaChiKXt9fSxCZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLklhKCl9LHBhdXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGxheWVyLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXIucGxheSgpfSxqYTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfSwKRmQ6ZnVuY3Rpb24oYil7dGhpcy5pZD1ifSxydzpmdW5jdGlvbigpe30sWjpmdW5jdGlvbihiKXtpZighYilyZXR1cm4hMTt0aGlzLnZpZGVvVGFnPWI7dGhpcy5GcSgpfHx0aGlzLmNuKCk7dGhpcy5GZCh0aGlzLnZpZGVvVGFnLmdldEF0dHJpYnV0ZSgiaWQiKSl9LGJ3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW9UYWd9LGNuOmZ1bmN0aW9uKCl7dGhpcy52aWRlb1RhZy5zZXRBdHRyaWJ1dGUoImlkIixlLmJhKDEwKSl9LEZxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW9UYWcuZ2V0QXR0cmlidXRlKCJpZCIpPyEwOiExfSxZOmZ1bmN0aW9uKGIpe3RoaXMuY29udGFpbmVyPWJ9LElhOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLmNvbnRhaW5lcj90aGlzLmNvbnRhaW5lcigpOnRoaXMuY29udGFpbmVyfSxnZXRSYXdQbGF5ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXJ9LEFlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LGlzUGxheWluZzpmdW5jdGlvbigpe3JldHVybiEwfSwKZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnO3JldHVybiBiJiZiLmN1cnJlbnRUaW1lP2IuY3VycmVudFRpbWU6MH0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnO3JldHVybiBiJiZiLmR1cmF0aW9uP2IuZHVyYXRpb246MH0sVmE6ZnVuY3Rpb24oKXtyZXR1cm4hMX0saXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xYX0scGE6ZnVuY3Rpb24oKXt0aGlzLnFhPSEwfSxIYzpmdW5jdGlvbigpe3ZhciBiPW07cmV0dXJuIGImJmIucnVuSW5zaWRlQ29udGFpbmVyPyEwOiExfSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGImJmIubXV0ZWQ/Yi5tdXRlZDohMX0sR2U6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sQ2g6ZnVuY3Rpb24oYil7dGhpcy56Yj1ifSxZdjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnpifSx5aDpmdW5jdGlvbigpe3RoaXMuemI9bnVsbH0sZHc6ZnVuY3Rpb24oKXt2YXIgYj0hMTt0aGlzLnpiJiYKKGI9ITApO3JldHVybiBifSxsdzpmdW5jdGlvbigpe3RoaXMubmd8fCh0aGlzLm5nPSEwKX0scWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sVnY6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPXRoaXMudmlkZW9UYWc7YSYmYS5nZXRBdHRyaWJ1dGUoImlkIikmJihiPWEuZ2V0QXR0cmlidXRlKCJpZCIpKTtyZXR1cm4gYn19KX0pKGMpO3ZhciB1PWMudWx8fHU7KGZ1bmN0aW9uKGMpe2Mubmk9TS5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLks9dGhpcy5wbGF5ZXI9IiI7dGhpcy5KZj0iMSI7dGhpcy5LZj0iMiI7dGhpcy5XbT0iMyI7dGhpcy5QYz0wO3RoaXMuaWg9MzA7dGhpcy5MYj1bXTt0aGlzLmZiPVtdO3RoaXMuaWM9e2V4dGVybmFsOjEsbm9mcmFtZXdvcms6MixhZGVycm9yOjMsY29udGVudHBsYXk6NCxub0Fkc01hbmFnZXI6NSx1bmtub3duOjZ9O3RoaXMuWGY9dGhpcy5ZaD0hMTt0aGlzLnN0YXR1cz10aGlzLlBjO3RoaXMuaWQ9ZS5iYSgxMCk7dGhpcy5mZihiKTt0aGlzLkR0KGEpfSwKZzpmdW5jdGlvbigpe30sdGE6ZnVuY3Rpb24oKXt0aGlzLllofHwodGhpcy5ZaD0hMCxlLkplKCkpfSxQZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuTygpO1MmJlMuVWImJiFuYSYmKG5hPSEwLGUudHJhY2soInBvc3NpYmxlRG91YmxlQWQiLCIxMDRfIitiKSl9LGJyOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKSxhPW5ldyBKO3dpbmRvd1thLmlhKCldfHwod2luZG93W2EuaWEoKV09e30pO3dpbmRvd1thLmlhKCldW2IuamEoKV18fCh3aW5kb3dbYS5pYSgpXVtiLmphKCldPXt9LHdpbmRvd1thLmlhKCldW2IuamEoKV0uaW5pdGlhdG9yPWUuemMoKSk7d2luZG93W2EuaWEoKV1bYi5qYSgpXVtlLnpjKCldP3dpbmRvd1thLmlhKCldW2IuamEoKV1bZS56YygpXSsrOndpbmRvd1thLmlhKCldW2IuamEoKV1bZS56YygpXT0xfSxpcjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCksYT0hMCxoPW5ldyBKO3dpbmRvd1toLmlhKCldJiZ3aW5kb3dbaC5pYSgpXVtiLmphKCldJiYKd2luZG93W2guaWEoKV1bYi5qYSgpXS5pbml0aWF0b3IhPWUuemMoKSYmKHRoaXMuZ2YoKSxhPSExKTtyZXR1cm4gYX0sSTpmdW5jdGlvbihiLGEpe3ZhciBoPSEwO2ImJihoPSExKTtpZighdGhpcy51YSgpKXt0aGlzLmJyKCk7aWYoIXRoaXMuaXIoKSl7ZS50cmFjaygic3RhdHNfaGRfZG91YmxlTWFpbiIsIiIsITApO3RoaXMuZ2YoKTtyZXR1cm59dGhpcy5nZigpO3RoaXMuSyh0aGlzLmdldFBsYXllcigpLGgpO3RoaXMuUmgoKTt0aGlzLlhmPSEwO2EmJiJmdW5jdGlvbiI9PXR5cGVvZiBhJiZhKCk7cmV0dXJuITB9cmV0dXJuITF9LG86ZnVuY3Rpb24oYixhKXt0aGlzLnVhKCl8fCh0aGlzLkxiLnB1c2goYiksdGhpcy5mYi5wdXNoKHtyZWFzb246YixkZXRhaWw6YX0pKX0sUmg6ZnVuY3Rpb24oKXt2YXIgYj0idW5rbm93biIsYT1bXTt0aGlzLkxiJiYwPHRoaXMuTGIubGVuZ3RoJiYodGhpcy5MYj1lLnVuaXF1ZSh0aGlzLkxiKSxlLnRyYWNrKCJhY3RpdmF0ZWRCeSIsdGhpcy5MYi5qb2luKCIsIikpKTsKaWYodGhpcy5mYil7Zm9yKHZhciBoPTA7aDx0aGlzLmZiLmxlbmd0aDtoKyspdGhpcy5pY1t0aGlzLmZiW2hdLnJlYXNvbl09PXRoaXMuaWNbYl0mJmEucHVzaCh0aGlzLmZiW2hdLmRldGFpbCksdGhpcy5pY1t0aGlzLmZiW2hdLnJlYXNvbl08dGhpcy5pY1tiXSYmKGE9W10sYS5wdXNoKHRoaXMuZmJbaF0uZGV0YWlsKSxiPXRoaXMuZmJbaF0ucmVhc29uKTt0aGlzLmljW2JdfHwoYj0idW5rbm93biIsYT1bXSk7MDxhLmxlbmd0aCYmKGg9ZS51bmlxdWUoYSksYj1iKyItIitoLmpvaW4oIi0iKSk7ZS50cmFjaygic3RhdHNfaGRfYWN0aXZhdGVkIixiLCEwLGEpfX0sY3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5YZn0sdzpmdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMuSmZ9LGdmOmZ1bmN0aW9uKCl7dGhpcy5zdGF0dXM9dGhpcy5LZn0sSXQ6ZnVuY3Rpb24oKXt0aGlzLnN0YXR1cz10aGlzLldtfSxyYTpmdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMuUGN9LE9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT0KdGhpcy5KZn0sTXY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0dXM9PXRoaXMuS2Z9LHVhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdHVzIT10aGlzLlBjfSxmZjpmdW5jdGlvbihiKXt0aGlzLnBsYXllcj1ifSxnZXRQbGF5ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXJ9LER0OmZ1bmN0aW9uKGIpe3RoaXMuSz1ifSxpcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLkt9LE5yOmZ1bmN0aW9uKCl7fX0pfSkoYyk7dmFyIHY9Yy5uaXx8djtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5Qcj10aGlzLmFbOV07dGhpcy5CcT10aGlzLmFbNV07dGhpcy50cj10aGlzLmFbMl07dGhpcy5QaT10aGlzLmFbN107dGhpcy5Ubj10aGlzLmFbNl07dGhpcy5VbT10aGlzLmFbNV07dGhpcy5LbD10aGlzLmFbOF07dGhpcy5qPXRoaXMuYVs0XX1jLkVuPWI7Yi5wcm90b3R5cGU9e09yOmZ1bmN0aW9uKGEpe3JldHVybiA5PAphP3RoaXMuUHI6dGhpcy5BcShhKX0sQXE6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkJxOnRoaXMuc3IoYSl9LHNyOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy50cjp0aGlzLk9pKGEpfSxPaTpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuUGk6dGhpcy5TbihhKX0sU246ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLlRuOnRoaXMuVG0oYSl9LFRtOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5VbTp0aGlzLkpsKGEpfSxKbDpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuS2w6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBvYT1jLkVufHxvYSxwYz1uZXcgb2EoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1wYy5Pcig0KTsoZnVuY3Rpb24oYyl7Yy5Paj11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb0NvbnRhaW5lcjt0aGlzLlkoYik7Yj10aGlzLmdldFJhd1BsYXllcigpLnZpZGVvO3RoaXMuWihiKTt0aGlzLmlzUGxheWluZz0hMTtiLmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5pc1BsYXlpbmc9ITB9LmJpbmQodGhpcykpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheSgpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkV4cFBsYXllciJ9fSl9KShjKTt2YXIgcGE9Yy5Panx8cGE7KGZ1bmN0aW9uKGMpe2MuUGo9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCksYT1iLk52O2E/YS5uYT9hLm5hLmFkZEV2ZW50TGlzdGVuZXIoImFkRXJyb3IiLGZ1bmN0aW9uKGEpe3ZhciBiPQohMSxmPSIiO2EuZ2V0RXJyb3ImJihiPWEuZ2V0RXJyb3IoKSk7Ynx8YS5kZXRhaWwuZ2V0RXJyb3ImJihiPWEuZGV0YWlsLmdldEVycm9yKCkpO2IuZ2V0RXJyb3JDb2RlJiYoZis9Yi5nZXRFcnJvckNvZGUoKSk7Yi5nZXRNZXNzYWdlJiYoZis9Yi5nZXRNZXNzYWdlKCkpO2YuaW5kZXhPZiYmKDA8PWYuaW5kZXhPZigiMTAwOSIpfHwwPD1mLmluZGV4T2YoIjMwMyIpfHwwPD1mLmluZGV4T2YoIjQwMyIpKT8odGhpcy53KCksdGhpcy50YSgpKToodGhpcy5vKCJhZGVycm9yIiksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZygpfS5iaW5kKHRoaXMpLDEwMCk6Yi5fYWRDb25maWcuYWRzRGlzYWJsZWR8fCh0aGlzLm8oImZyYW1ld29yayIpLHRoaXMucygpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nP3RoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcyksCjEwKX19KX0pKGMpO3ZhciBxYT1jLlBqfHxxYTsoZnVuY3Rpb24oYyl7Yy5Raj1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZih3aW5kb3cucGxheWVyTWFuYWdlciYmd2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycyYmd2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycygpWzBdKXt2YXIgYj1uZXcgcGEod2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycygpWzBdKTt0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBxYShiLHRoaXMuSykpLmcoKSl9dGhpcy5SKCl9fSl9KShjKTt2YXIgcmE9Yy5Ranx8cmE7KG5ldyByYShyKSkuZygpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnR0PXRoaXMuYVs4XTt0aGlzLmJtPXRoaXMuYVs3XTt0aGlzLkJqPXRoaXMuYVs1XTt0aGlzLmhvPXRoaXMuYVsyXTt0aGlzLmhtPQp0aGlzLmFbMV07dGhpcy5Sbj10aGlzLmFbM107dGhpcy5saj10aGlzLmFbNl07dGhpcy5pcD10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVs3XX1jLkJzPWI7Yi5wcm90b3R5cGU9e3N0OmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy50dDp0aGlzLmFtKGEpfSxhbTpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuYm06dGhpcy5BaihhKX0sQWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkJqOnRoaXMuZm8oYSl9LGZvOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5obzp0aGlzLmdtKGEpfSxnbTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuaG06dGhpcy5RbihhKX0sUW46ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLlJuOnRoaXMua2ooYSl9LGtqOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5sajp0aGlzLmhwKGEpfSxocDpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuaXA6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpOwp2YXIgc2E9Yy5Cc3x8c2EscWM9bmV3IHNhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9cWMuc3QoNCk7KGZ1bmN0aW9uKGMpe2MucWs9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dGhpcy5WYj0hMTt0aGlzLnNnKCk7dGhpcy51ZygpO3RoaXMuT289ITF9LHNnOmZ1bmN0aW9uKCl7dGhpcy5WYj0hMTt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnBsYXllci5pZCk7Ynx8KHRoaXMuVmI9ITApO2lmKCJPQkpFQ1QiPT1iLm5vZGVOYW1lfHwiVklERU8iPT1iLm5vZGVOYW1lKWI9Yi5wYXJlbnROb2RlO3RoaXMuWShiKX0sdWc6ZnVuY3Rpb24oKXtpZighdGhpcy5WYil7dmFyIGI9dGhpcy5JYSgpLGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXTthfHwoYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7CmF8fCh0aGlzLlZiPSEwKTt0aGlzLlooYSl9fSxOYTpmdW5jdGlvbigpe3ZhciBiPXRoaXMucGxheWVyO2lmKG0ucG9zdHJvbGxVc2VDb21wbGV0ZUV2ZW50KWIuX2V2ZW50cy5iZWZvcmVDb21wbGV0ZS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OnRoaXMucGxheWVyLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy5WJiYoMCx0aGlzLlYpKCl9LmJpbmQodGhpcyl9KTtlbHNlIGlmKGIuX2V2ZW50cyYmYi5fZXZlbnRzLnRpbWUmJmIuX2V2ZW50cy50aW1lLnB1c2goe2NvbnRleHQ6bnVsbCxjdHg6dGhpcy5wbGF5ZXIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7YS5kdXJhdGlvbiYmYS5wb3NpdGlvbiYmMT5hLmR1cmF0aW9uLWEucG9zaXRpb24mJnRoaXMuViYmKDAsdGhpcy5WKSgpfS5iaW5kKHRoaXMpfSksYi5vblRpbWUpYi5vblRpbWUoZnVuY3Rpb24oYSl7YS5kdXJhdGlvbiYmYS5wb3NpdGlvbiYmMT5hLmR1cmF0aW9uLWEucG9zaXRpb24mJnRoaXMuViYmKDAsdGhpcy5WKSgpfS5iaW5kKHRoaXMpKX0sCkxlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRFcnJvciYmYi5fZXZlbnRzLmFkRXJyb3IucHVzaCh7Y29udGV4dDpudWxsLGN0eDpiLGNhbGxiYWNrOmZ1bmN0aW9uKGEpe3RoaXMuSGQoYSl9LmJpbmQodGhpcyl9KTtpZihiLm9uQWRFcnJvciliLm9uQWRFcnJvcihmdW5jdGlvbihhKXt0aGlzLkhkKGEpfS5iaW5kKHRoaXMpKX0sSGQ6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5wbGF5ZXI7YS5nZXRQb3NpdGlvbigpO2EuZ2V0UG9zaXRpb24oKTthLmdldER1cmF0aW9uKCk7YS5nZXRQb3NpdGlvbigpO2EuZ2V0RHVyYXRpb24oKTthLmdldFBvc2l0aW9uKCk7Im1pZCI9PWIuYWRwb3NpdGlvbiYmYS5nZXRQb3NpdGlvbiYmMzA8YS5nZXRQb3NpdGlvbigpJiYzMDxhLmdldER1cmF0aW9uKCktYS5nZXRQb3NpdGlvbigpJiZ0aGlzLk1lJiYoMCx0aGlzLk1lKSgpfSxwbGF5OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7aWYoIWIuZ2V0U3RhdGV8fAoicGxheWluZyIhPWIuZ2V0U3RhdGUoKXx8dGhpcy52aWRlb1RhZy5wYXVzZWQpcmV0dXJuIHRoaXMucGxheWVyLnBsYXkoKX0scGF1c2U6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnBsYXllcjtyZXR1cm4gYi5nZXRTdGF0ZSYmInBhdXNlZCI9PWIuZ2V0U3RhdGUoKT8icGF1c2VkIjp0aGlzLnBsYXllci5wYXVzZSghMCl9LFZhOmZ1bmN0aW9uKCl7cmV0dXJuInBhdXNlZCI9PXRoaXMucGF1c2UoKT8hMTohMH0sTzpmdW5jdGlvbigpe3JldHVybiJKV1BsYXllciJ9LGV4aXRGdWxsc2NyZWVuOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7Yi5nZXRGdWxsc2NyZWVuJiZiLmdldEZ1bGxzY3JlZW4oKSYmYi5zZXRGdWxsc2NyZWVuKCl9LHZhOmZ1bmN0aW9uKCl7dmFyIGI9ITEsYT10aGlzLnBsYXllcjthLmdldE11dGUmJmEuZ2V0TXV0ZSgpJiYoYj0hMCk7cmV0dXJuIGJ9LHFlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXIsYT0hMTtiLmdldFZvbHVtZSYmYi5nZXRWb2x1bWUoKSYmCihhPWIuZ2V0Vm9sdW1lKCkpO3JldHVybiBhfX0pfSkoYyk7dmFyIHRhPWMucWt8fHRhOyhmdW5jdGlvbihjKXtjLnBrPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LFM6ZnVuY3Rpb24oKXt9LHJhOmZ1bmN0aW9uKCl7dGhpcy5zdGF0dXM9dGhpcy5QYzt0aGlzLmlzUGxheWluZz10aGlzLlJjPSExO3RoaXMuWmQ9MTt0aGlzLlNjPVtdO3RoaXMudGI9ITF9LGc6ZnVuY3Rpb24oKXt0aGlzLmlzUGxheWluZz10aGlzLlJjPSExO3RoaXMuWmQ9MTt0aGlzLlNjPVtdO3RoaXMudGI9ITE7dGhpcy5nZXRQbGF5ZXIoKTt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpLGE9e307Yi5nZXRDb25maWcmJihhPWIuZ2V0Q29uZmlnKCksYS5hZHZlcnRpc2luZz8oYS5hZHZlcnRpc2luZy5zY2hlZHVsZSYmKGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzP2EuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzLnRhZyYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5hZHMudGFnLmxlbmd0aCYmCih0aGlzLlpkPWEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzLnRhZy5sZW5ndGgsdGhpcy50Yj0hMCk6KGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUucHJlcm9sbCYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5wcmVyb2xsLnRhZyYmKHRoaXMudGI9ITApLGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRicmVha3ByZSYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5hZGJyZWFrcHJlLnRhZyYmKHRoaXMudGI9ITApKSksYS5hZHZlcnRpc2luZy50YWcmJih0aGlzLnRiPSEwKSk6dGhpcy53KCJubyBhZHZlcnRpc2luZyBjb25maWd1cmVkIGZvciBwbGF5ZXIiKSk7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRDb21wbGV0ZSYmYi5fZXZlbnRzLmFkQ29tcGxldGUucHVzaCh7Y29udGV4dDpudWxsLGN0eDpiLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy53KCJhZENvbXBsZXRlIik7dGhpcy5SYz0hMH0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkQ2xpY2smJmIuX2V2ZW50cy5hZENsaWNrLnB1c2goe2NvbnRleHQ6bnVsbCwKY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkQ2xpY2siKX0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkSW1wcmVzc2lvbiYmYi5fZXZlbnRzLmFkSW1wcmVzc2lvbi5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkSW1wcmVzc2lvbiIpO3RoaXMuUGUoKX0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkTWV0YSYmYi5fZXZlbnRzLmFkTWV0YS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkTWV0YSIpfS5iaW5kKHRoaXMpfSk7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRTa2lwcGVkJiZiLl9ldmVudHMuYWRTa2lwcGVkLnB1c2goe2NvbnRleHQ6bnVsbCxjdHg6YixjYWxsYmFjazpmdW5jdGlvbigpe3RoaXMudygiYWRTa2lwcGVkIil9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5hZFRpbWUmJmIuX2V2ZW50cy5hZFRpbWUucHVzaCh7Y29udGV4dDpudWxsLApjdHg6YixjYWxsYmFjazpmdW5jdGlvbigpe3RoaXMudygiYWRUaW1lIil9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5hZEVycm9yJiZiLl9ldmVudHMuYWRFcnJvci5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7dGhpcy5vbkFkRXJyb3IoYSl9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy50aW1lJiZiLl9ldmVudHMudGltZS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7dGhpcy5pc1BsYXlpbmc9ITA7YS5kdXJhdGlvbj50aGlzLmloJiYhdGhpcy51YSgpJiYodGhpcy50Yj8odGhpcy5vKCJjb250ZW50cGxheU5vQWRzIiwiIiksdGhpcy5zKCkpOih0aGlzLm8oImNvbnRlbnRwbGF5VGltZSIsMUUzKk1hdGgucm91bmQoYS5kdXJhdGlvbi8xRTMpKSx0aGlzLnMoITApKSl9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5wbGF5bGlzdEl0ZW0mJmIuX2V2ZW50cy5wbGF5bGlzdEl0ZW0ucHVzaCh7Y29udGV4dDpudWxsLApjdHg6dGhpcy5wbGF5ZXIsY2FsbGJhY2s6ZnVuY3Rpb24oKXtpZih0aGlzLnVhKCkmJih0aGlzLnJhKCksdGhpcy5nZXRQbGF5ZXIoKS5Pbz0hMCxtLnNraXBBZE9uQ29udGV4dENoYW5nZSkpe3ZhciBhPXRoaXMuZ2V0UGxheWVyKCkuemI7YSYmKGEuemQoKSxhLmhkKCkpfX0uYmluZCh0aGlzKX0pO2lmKGIub25BZENvbXBsZXRlKWIub25BZENvbXBsZXRlKGZ1bmN0aW9uKCl7dGhpcy53KCJvbkFkQ29tcGxldGUiKTt0aGlzLlJjPSEwfS5iaW5kKHRoaXMpKTtpZihiLm9uQWRJbXByZXNzaW9uKWIub25BZEltcHJlc3Npb24oZnVuY3Rpb24oKXt0aGlzLncoIm9uQWRJbXByZXNzaW9uIik7dGhpcy5QZSgpfS5iaW5kKHRoaXMpKTtpZihiLm9uQWRQbGF5KWIub25BZFBsYXkoZnVuY3Rpb24oKXt0aGlzLncoIm9uQWRQbGF5Iil9LmJpbmQodGhpcykpO2lmKGIub25BZFRpbWUpYi5vbkFkVGltZShmdW5jdGlvbigpe3RoaXMudygib25BZFRpbWUiKX0uYmluZCh0aGlzKSk7aWYoYi5vbkFkRXJyb3IpYi5vbkFkRXJyb3IoZnVuY3Rpb24oYSl7dGhpcy5vbkFkRXJyb3IoYSl9LmJpbmQodGhpcykpOwppZihiLm9uVGltZSliLm9uVGltZShmdW5jdGlvbihhKXt0aGlzLmlzUGxheWluZz0hMDthLmR1cmF0aW9uPnRoaXMuaWgmJiF0aGlzLnVhKCkmJih0aGlzLnRiPyh0aGlzLm8oImNvbnRlbnRwbGF5Tm9BZHMiLCIiKSx0aGlzLnMoKSk6KHRoaXMubygiY29udGVudHBsYXlUaW1lIiwxRTMqTWF0aC5yb3VuZChhLmR1cmF0aW9uLzFFMykpLHRoaXMucyghMCkpKX0uYmluZCh0aGlzKSl9LG9uQWRFcnJvcjpmdW5jdGlvbihiKXt2YXIgYT1iLnRhZzstMT09dGhpcy5TYy5pbmRleE9mKGEpJiZ0aGlzLlNjLnB1c2goYSk7IjEwMSI9PWIuY29kZXx8IjEwMDEiPT1iLmNvZGU/KHRoaXMudygpLHRoaXMudGEoKSk6OTAwPT1iLmNvZGUmJjA8Yi5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigiZW1wdHkiKT90aGlzLncoImVtcHR5Iik6MzAzPT1iLmNvZGUmJjA8Yi5tZXNzYWdlLmluZGV4T2YoIk5vIEFkcyBWQVNUIHJlc3BvbnNlIGFmdGVyIG9uZSBvciBtb3JlIFdyYXBwZXJzIik/dGhpcy53KCJlbXB0eSIpOgoodGhpcy5vKCJhZGVycm9yIixiLmNvZGUpLHRoaXMuU2MubGVuZ3RoPj10aGlzLlpkJiZ0aGlzLnMoKSl9LE5yOmZ1bmN0aW9uKGIpe3RoaXMubSgiSlc6ICIrYi50eXBlKX0sczpmdW5jdGlvbihiKXtiP3RoaXMubmU/dGhpcy5uZSsrOnRoaXMubmU9MTp0aGlzLm1lP3RoaXMubWUrKzp0aGlzLm1lPTE7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKTtlLkhoKGEudmlkZW9UYWcpP2EuVmI/dGhpcy53KCJwbGF5ZXIgaXMgaW52YWxkIik6dGhpcy5SY3x8dGhpcy5pc1BsYXlpbmc/KHRoaXMubWU+dGhpcy5uZSYmKGI9ITEpLHRoaXMuSShiKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoYil9LmJpbmQodGhpcyksNTApOihhLnNnKCksYS51ZygpLGEuVmJ8fHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDIwKSl9fSl9KShjKTt2YXIgdWE9Yy5wa3x8dWE7KGZ1bmN0aW9uKGMpe2Mucms9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSwKZzpmdW5jdGlvbigpe3ZhciBiPWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZik7aWYoIllXUnBkR2x2Ymk1clpXbHVaWFpwWkdWdmQyVnlZblZ1WnoweCIhPXRoaXMuZXEoKXx8IWIuYXV0aG9yaXR5fHwhYi5hdXRob3JpdHl8fCJ3d3cuc3BpZWdlbC5kZSIhPWIuYXV0aG9yaXR5JiYicXMyLnByZXZpZXcuc3BpZWdlbC5kZSIhPWIuYXV0aG9yaXR5JiYicHJldmlldy5zcGllZ2VsLmRlIiE9Yi5hdXRob3JpdHkmJiJwcm9kLnNwaWVnZWwuZGUiIT1iLmF1dGhvcml0eSl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiandwbGF5ZXIiKTtpZighd2luZG93Lmp3cGxheWVyfHwhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoandwbGF5ZXIoKS5pZCl8fCJBIiE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoandwbGF5ZXIoKS5pZCkubm9kZU5hbWUpaWYod2luZG93Lmp3cGxheWVyJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZChqd3BsYXllcigpLmlkKXx8aCYmaCgpLmlkKXtiPQpbXTtpZigxPGEubGVuZ3RoKWZvcihoPTA7aDxhLmxlbmd0aDtoKyspYi5wdXNoKGFbaF0uZ2V0QXR0cmlidXRlKCJpZCIpKTtlbHNlIGIucHVzaChqd3BsYXllcigpLmlkKTtqd3BsYXllcigpO2ZvcihhPTA7YTxiLmxlbmd0aDthKyspe3ZhciBoPW5ldyB0YSh3aW5kb3cuandwbGF5ZXIoYlthXSkpO3RoaXMuTihoKXx8dGhpcy5scihoKXx8KHRoaXMuUChoKSxoPW5ldyB1YShoLHRoaXMuSyksaC5TKCksaC5nKCkpfX10aGlzLlIoKX19LFh2OmZ1bmN0aW9uKCl7cmV0dXJuIllXUnBkR2x2Ymk1clpXbHVaWFpwWkdWdmQyVnlZblZ1WnoweCJ9LGVxOmZ1bmN0aW9uKCl7dmFyIGI9ZS5sYShkb2N1bWVudC5sb2NhdGlvbi5ocmVmKTtyZXR1cm4gZS52YihiLmFuY2hvcil9fSl9KShjKTt2YXIgdmE9Yy5ya3x8dmEsd2E9bmV3IHZhKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLkRyPQp0aGlzLmFbM107dGhpcy5Qaz10aGlzLmFbOF07dGhpcy5zbT10aGlzLmFbMV07dGhpcy5ObD10aGlzLmFbOV07dGhpcy5qPXRoaXMuYVsxMF19Yy5pbz1iO2IucHJvdG90eXBlPXtDcjpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuRHI6dGhpcy5PayhhKX0sT2s6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLlBrOnRoaXMucm0oYSl9LHJtOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5zbTp0aGlzLk1sKGEpfSxNbDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuTmw6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciB4YT1jLmlvfHx4YSxyYz1uZXcgeGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1yYy5Dcig0KTsoZnVuY3Rpb24oYyl7Yy54bT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtpZihiKXt2YXIgYT1iLmVsXzthfHwoYT1iLmVsKCkpO2E/KHRoaXMuWShhKSwoYj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdKXx8KGI9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pLGI/dGhpcy5aKGIpOnRoaXMucGEoKSk6dGhpcy5wYSgpfWVsc2UgdGhpcy5wYSgpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuInZpZGVvanMifSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkub24oInRpbWV1cGRhdGUiLGZ1bmN0aW9uKGIpe3RoaXMuTWQoYil9LmJpbmQodGhpcykpfSxNZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT1iLmN1cnJlbnRUaW1lKCksYj1iLmR1cmF0aW9uKCk7YSYmMDxhJiZiJiYwPGImJmE+PWItMiYmdGhpcy5WJiZ0aGlzLlYoKX0sQWU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnLmdldEF0dHJpYnV0ZSgiZGF0YS14LXNldHVwIik7CmlmKGIpdHJ5e3ZhciBhPUpTT04ucGFyc2UoYik7aWYoYS5oYXNPd25Qcm9wZXJ0eSgieC1hdXRvcGxheSIpJiYhYVsieC1hdXRvcGxheSJdKXJldHVybiExfWNhdGNoKGgpe31iPXRoaXMuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIuYXV0b3BsYXkmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmF1dG9wbGF5P2IuYXV0b3BsYXkoKTohMX0sdmE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXIubXV0ZWQmJnRoaXMucGxheWVyLm11dGVkKCl9LFZhOmZ1bmN0aW9uKCl7dGhpcy5wYXVzZSgpO3JldHVybiEwfSxpc1BsYXlpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wYXVzZWQoKT8hMTohMH0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLGE9Yi5pc0Z1bGxzY3JlZW47aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpdHJ5e2E9YSgpfWNhdGNoKGgpe2E9ITF9YSYmYi5leGl0RnVsbHNjcmVlbigpfSxjdXJyZW50VGltZTpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLmdldFJhd1BsYXllcigpO2lmKGIuY3VycmVudFRpbWUpcmV0dXJuIGIuY3VycmVudFRpbWUoKX19KX0pKGMpO3ZhciB5YT1jLnhtfHx5YTsoZnVuY3Rpb24oYyl7Yy53bT12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dGhpcy5UPXRoaXMuVHx8ITE7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKTt0aGlzLmRhPXRoaXMuQmM9dGhpcy5BYT10aGlzLlljPSExO3RoaXMudmg9ZS5FYigxMCk7dGhpcy5YaD0hMDt0aGlzLm5jPXRoaXMuUWc9ITE7dGhpcy5icyhiLmdldFJhd1BsYXllcigpKXx8KHRoaXMubGgoKSx0aGlzLm5vKCksdGhpcy5vYigpKX0sYnM6ZnVuY3Rpb24oYil7cmV0dXJuIGUuQmEoInQtb25saW5lLmRlIik/ITE9PT1iLm9wdGlvbnNfLmFkUHJlcm9sbDohMX0sbnc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2NvbnNvbGUuaW5mbyh0aGlzLmdldFBsYXllcigpLmphKCksIjsiLCJ3aW5kb3cuaW1hOiIsCiI7Iix3aW5kb3cuaW1hLCI7Iix0eXBlb2Ygd2luZG93LmltYSwiOyIsInBsYXllci5hZHM6IiwiOyIsYi5XLCI7Iix0eXBlb2YgYi5XLCI7IiwicGxheWVyLmFkcy5zdGF0ZToiLCI7IixiLlc/Yi5XLnN0YXRlOiJ1bmRlZmluZWRYIiwiOyIsYi5XP3R5cGVvZiBiLlcuc3RhdGU6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYToiLCI7IixiLmltYSwiOyIsdHlwZW9mIGIuaW1hLCI7IiwicGxheWVyLmltYTM6IiwiOyIsYi5KLCI7Iix0eXBlb2YgYi5KLCI7IiwicGxheWVyLmltYS5hZGRFdmVudExpc3RlbmVyOiIsIjsiLGIuaW1hP2IuaW1hLmFkZEV2ZW50TGlzdGVuZXI6InVuZGVmaW5lZFgiLCI7IixiLmltYT90eXBlb2YgYi5pbWEuYWRkRXZlbnRMaXN0ZW5lcjoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5hZGRFdmVudExpc3RlbmVyOiIsIjsiLGIuSj9iLkouYWRkRXZlbnRMaXN0ZW5lcjoidW5kZWZpbmVkWCIsIjsiLGIuSj90eXBlb2YgYi5KLmFkZEV2ZW50TGlzdGVuZXI6CiJ1bmRlZmluZWRYIiwiOyIsInBsYXllci5pbWEuZ2V0QWRzTWFuYWdlcjoiLCI7IixiLmltYT9iLmltYS5HYToidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5HYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5nZXRBZHNNYW5hZ2VyOiIsIjsiLGIuSj9iLkouR2E6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5HYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmdldEFkc01hbmFnZXIoKToiLCI7IixiLmltYSYmYi5pbWEuR2E/Yi5pbWEuR2EoKToidW5kZWZpbmVkWCIsIjsiLGIuaW1hJiZiLmltYS5HYT90eXBlb2YgYi5pbWEuR2EoKToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5nZXRBZHNNYW5hZ2VyKCk6IiwiOyIsYi5KJiZiLkouR2E/Yi5KLkdhKCk6InVuZGVmaW5lZFgiLCI7IixiLkomJmIuSi5HYT90eXBlb2YgYi5KLkdhKCk6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYS5fYWRzTG9hZGVyOiIsIjsiLGIuaW1hP2IuaW1hLldkOgoidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5XZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5fYWRzTG9hZGVyOiIsIjsiLGIuSj9iLkouV2Q6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5XZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLl9hZHNNYW5hZ2VyOiIsIjsiLGIuaW1hP2IuaW1hLlhkOiJ1bmRlZmluZWRYIiwiOyIsYi5pbWE/dHlwZW9mIGIuaW1hLlhkOiJ1bmRlZmluZWRYIiwiOyIsInBsYXllci5pbWEzLl9hZHNNYW5hZ2VyOiIsIjsiLGIuSj9iLkouWGQ6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5YZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmFkc0xvYWRlcjoiLCI7IixiLmltYT9iLmltYS5uYToidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5uYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5hZHNMb2FkZXI6IiwiOyIsYi5KP2IuSi5uYToidW5kZWZpbmVkWCIsIjsiLGIuSj8KdHlwZW9mIGIuSi5uYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmFkc01hbmFnZXI6IiwiOyIsYi5pbWE/Yi5pbWEuY2U6InVuZGVmaW5lZFgiLCI7IixiLmltYT90eXBlb2YgYi5pbWEuY2U6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYTMuYWRzTWFuYWdlcjoiLCI7IixiLko/Yi5KLmNlOiJ1bmRlZmluZWRYIiwiOyIsYi5KP3R5cGVvZiBiLkouY2U6InVuZGVmaW5lZFgiLCI7IiwiRE9ORSIsdGhpcy52aCl9LHdiOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtiLmltYTMmJih0aGlzLmltYT1iLmltYTMpO2lmKGIuaW1hKXt0aGlzLmltYT1iLmltYTt0cnl7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuaW1hJiZ0aGlzLnBsYXllci5nZXRSYXdQbGF5ZXIoKS5hY3RpdmVQbHVnaW5zXyYmMT09dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyKCkuYWN0aXZlUGx1Z2luc18uaW1hJiYodGhpcy5pbWE9dGhpcy5pbWEoKSx0aGlzLmltYS5jb250cm9sbGVyJiYKKHRoaXMuaW1hPXRoaXMuaW1hLmNvbnRyb2xsZXIpKX1jYXRjaChhKXt9fXJldHVybiB0aGlzLmltYX0sUmI6ZnVuY3Rpb24oKXtpZighdGhpcy5uYSl7dmFyIGI9dGhpcy53YigpO2ImJihiLmFkc0xvYWRlciYmKHRoaXMubmE9Yi5hZHNMb2FkZXIpLGIuX2Fkc0xvYWRlciYmKHRoaXMubmE9Yi5fYWRzTG9hZGVyKSxiLmdldEFkc0xvYWRlciYmKHRoaXMubmE9Yi5nZXRBZHNMb2FkZXIpLGIuY29udHJvbGxlciYmYi5jb250cm9sbGVyLnNka0ltcGwmJmIuY29udHJvbGxlci5zZGtJbXBsLmFkc0xvYWRlciYmKHRoaXMubmE9Yi5jb250cm9sbGVyLnNka0ltcGwuYWRzTG9hZGVyKSl9cmV0dXJuIHRoaXMubmF9LEVnOmZ1bmN0aW9uKCl7aWYoIXRoaXMuQmMpe3ZhciBiPXRoaXMud2IoKTtiJiYoYi5hZHNNYW5hZ2VyJiYodGhpcy5CYz1iLmFkc01hbmFnZXIpLGIuZ2V0QWRzTWFuYWdlciYmKHRoaXMuQmM9Yi5nZXRBZHNNYW5hZ2VyKCkpKX1yZXR1cm4gdGhpcy5CY30sanI6ZnVuY3Rpb24oKXtpZighdGhpcy5QZyl7dmFyIGI9CnRoaXMud2IoKSxhPXRoaXMuaHIoKTt3aW5kb3cuaW1hJiZiJiYoYi5fYWRzTG9hZGVyfHxiLmFkc0xvYWRlcnx8YSkmJih0aGlzLlBnPSEwKX1yZXR1cm4gdGhpcy5QZ30saHI6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyF0aGlzLlljJiZiLmFkcyYmKGIuYWRzLnN0YXRlfHxiLmFkcy5fc3RhdGUpJiYodGhpcy5ZYz0hMCk7cmV0dXJuIHRoaXMuWWN9LG9iOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5SYigpO2lmKGIpe3ZhciBhPSJhZEVycm9yIixoPSJhZHNNYW5hZ2VyTG9hZGVkIixkPSJsb2ciO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SJiYoYT1nb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SKTt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkc01hbmFnZXJMb2FkZWRFdmVudCYmCmdvb2dsZS5pbWEuQWRzTWFuYWdlckxvYWRlZEV2ZW50LlR5cGUmJmdvb2dsZS5pbWEuQWRzTWFuYWdlckxvYWRlZEV2ZW50LlR5cGUuQURTX01BTkFHRVJfTE9BREVEJiYoaD1nb29nbGUuaW1hLkFkc01hbmFnZXJMb2FkZWRFdmVudC5UeXBlLkFEU19NQU5BR0VSX0xPQURFRCk7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYoZD1nb29nbGUuaW1hLkFkRXZlbnQuVHlwZS5MT0cpOyJmdW5jdGlvbiIhPT10eXBlb2YgYi5hZGRFdmVudExpc3RlbmVyP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKTooYi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKGgsZnVuY3Rpb24oKXt0aGlzLmp0KCl9LmJpbmQodGhpcykpLApiLmFkZEV2ZW50TGlzdGVuZXIoZCxmdW5jdGlvbihhKXt0aGlzLmdhKGEsITApO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKTt0aGlzLmZhKCEwKX0uYmluZCh0aGlzKSkpfWVsc2UgdGhpcy51YSgpfHx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMub2IoKX0uYmluZCh0aGlzKSwyMCl9LGp0OmZ1bmN0aW9uKCl7dGhpcy5uYz0hMDt2YXIgYj10aGlzLkVnKCk7aWYoYnx8dGhpcy51YSgpKXt2YXIgYT0iYWRFcnJvciIsaD0ibG9nIjt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudCYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYKKGg9Z29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HKTtiLmFkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihhKXt0aGlzLmdhKGEpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoaCxmdW5jdGlvbihhKXt0aGlzLmdhKGEsITApO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKTt0aGlzLmZhKCEwKX0uYmluZCh0aGlzKSk7dmFyIGQ9IiI7ZS5UYSgpJiYoZD0iTV8iKTtiLmFkZEV2ZW50TGlzdGVuZXIoInN0YXJ0IixmdW5jdGlvbigpe2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrInN0YXJ0IiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiZmlyc3RxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrImZpc3RxdWFydGlsZSIsIiIsITApfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoIm1pZHBvaW50IixmdW5jdGlvbigpe3RoaXMub2M9CiEwO2lmKGUuQmEoImNoaXAuZGUiKSl7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtlLnRyYWNrKCJzdGF0c19jdXN0XyIrZCsibWlkcG9pbnQiLCIiLCEwKTtlLnRyYWNrKCJzdGF0c19jdXN0X2RvdWJsZXBsYXkiLCFhLnBhdXNlZCgpLCEwKX19LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigidGhpcmRxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrInRoaXJkcXVhcnRpbGUiLCIiLCEwKX0uYmluZCh0aGlzKSk7Yi5hZGRFdmVudExpc3RlbmVyKCJjb21wbGV0ZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrImNvbXBsZXRlIiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiaW1wcmVzc2lvbiIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iKwpkKyJpbXByZXNzaW9uIiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiYWxsQWRzQ29tcGxldGVkIixmdW5jdGlvbigpe3RoaXMub2N8fCh0aGlzLm8oImFkZXJyb3IiLCJub2FkZXZlbnQiKSx0aGlzLmZhKCksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKX0sV3Y6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyF0aGlzLmtnJiZiLmFkcyYmKHRoaXMua2c9Yi5hZHMpO3JldHVybiB0aGlzLmtnfSxubzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7Yi5vbigiYWRzZXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuZ2EoYSk7dGhpcy5mYSgpO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKX0uYmluZCh0aGlzKSk7Yi5vbigiYWR0cmlnZ2VyIixmdW5jdGlvbigpe3RoaXMucmEoKTt0aGlzLmZhKCEwKTsKdGhpcy5vKCJ0cmlnZ2VyIiwiSE9NQUQiKX0uYmluZCh0aGlzKSk7Yi5vbigiaW1hM2Vycm9yIixmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZmEoKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCl9LmJpbmQodGhpcykpO2Iub24oImltYTNhZGVycm9yIixmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZmEoKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCl9LmJpbmQodGhpcykpO2Iub24oImltYTMtYWQtZXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuZ2EoYSk7dGhpcy5mYSgpO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKX0uYmluZCh0aGlzKSk7Yi5vbigiYWRzLWZpcnN0LXF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygpO3RoaXMuUGUoKX0uYmluZCh0aGlzKSl9LGxkOmZ1bmN0aW9uKCl7dmFyIGI9ITE7dHJ5e2lmKGhvbWFkVXRpbHMmJmhvbWFkVXRpbHMuWClob21hZFV0aWxzLkthJiYoYj0hMCk7ZWxzZXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubGQoKX0uYmluZCh0aGlzKSwKNTApO3JldHVybn19Y2F0Y2goYSl7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmxkKCl9LmJpbmQodGhpcyksNTApO3JldHVybn1iJiYoKGI9dGhpcy5FZygpKSYmYi5kZXN0cm95P2IuZGVzdHJveSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5sZCgpfS5iaW5kKHRoaXMpLDUwKSl9LGxoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKTtpZihiLmlzUGxheWluZygpJiYwPGIuY3VycmVudFRpbWUoKSlpZih0aGlzLmpyKCkpe3ZhciBhPXRoaXMud2IoKSxoPXRoaXMuUmIoKTthJiZoJiYodGhpcy53YigpLHRoaXMuUmIoKSx0aGlzLm5jfHx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubmM/dGhpcy53KCk6KHRoaXMuZmEoITApLHRoaXMubygibm9BZHNNYW5hZ2VyIiwiYWRzTWFuYWdlciIpKX0uYmluZCh0aGlzKSwyRTMpKTt0aGlzLndiKCl9ZWxzZSB0aGlzLlFnP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGE9CnRoaXMud2IoKSxiPXRoaXMuUmIoKTthJiYhYj8odGhpcy5vKCJub2ZyYW1ld29yayIsIklNQV9BRFNMT0FERVIiKSx0aGlzLmZhKCkpOih0aGlzLmZhKCEwKSx0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIikpfS5iaW5kKHRoaXMpLDEwMCk6dGhpcy5RZz0hMDtiLmlzUGxheWluZygpJiYxMDxiLmN1cnJlbnRUaW1lKCl8fHRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmxoKCl9LmJpbmQodGhpcyksNTApfSxnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGg9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpaD0hMDtofHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGg9ITApOyJudW1iZXIiPT10eXBlb2YgYSYmKGIuVD1hLGIubygiYWRlcnJvciIsYSkpfXJldHVybiBofWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTsKaWYoYi5nZXRFcnJvciYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0RXJyb3Ipe3ZhciBoPWIuZ2V0RXJyb3IoKTtpZihoLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGguZ2V0RXJyb3JDb2RlJiZhKGguZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTtyZXR1cm59fWZvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkmJmJbZF0mJmJbZF0uYWRFcnJvciYmYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJmEoYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7YnJlYWt9fSxvbzpmdW5jdGlvbigpe3RoaXMucmN8fCh0aGlzLnJjPSJ1bmtub3duIik7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZihiLmFkcyl7aWYodGhpcy5yYyE9Yi5hZHMuc3RhdGUmJih0aGlzLnJjPWIuYWRzLnN0YXRlKSwiYWQtcGxheWJhY2siPT0KdGhpcy5yYyl7dGhpcy53KCJhZC1wbGF5YmFjayIpO3JldHVybn19ZWxzZSB0aGlzLnJjPSJuby1hZHMiO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vbygpfS5iaW5kKHRoaXMpLDEwKX0sdmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYX0sRGE6ZnVuY3Rpb24oKXswPD1lLlNiKGRvY3VtZW50LmxvY2F0aW9uKS5pbmRleE9mKCJzdGVybi5kZSIpJiYxMDA5PT10aGlzLlQ/KHRoaXMuZGE9ITAsdGhpcy5zKCEwKSk6KHRoaXMuZGE9ITAsdGhpcy53KCJlbXB0eSB2YXN0IikpfSxmYTpmdW5jdGlvbihiKXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZGE/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwMCl9LHM6ZnVuY3Rpb24oYil7dGhpcy51YSgpfHwoYnx8KHRoaXMuWGg9ITEpLHRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCkub24oInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5JKHRoaXMuWGgsZnVuY3Rpb24oKXt0aGlzLmxkKCl9LmJpbmQodGhpcykpfS5iaW5kKHRoaXMpKSl9LAp0bzpmdW5jdGlvbigpe3RoaXMuZXd8fCgxMDx0aGlzLiR1Pyh0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGFhemEiKSx3aW5kb3cuc2V0VGltZW91dCh0aGlzLmZhLmJpbmQodGhpcyksNTAwKSk6KHRoaXMuJHUrKyx0aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpLnZwRXZlbnQ/dGhpcy5udCgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50bygpfS5iaW5kKHRoaXMpLDUwKSkpfSxudDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7aWYoYi52cEV2ZW50JiYhdGhpcy5hdil7dGhpcy5hdj0hMDt2YXIgYT0iIjtiLnZwRXZlbnQucmFuZG9tVGVzdCYmKGE9IiIpO2IudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZHMtZXJyb3IiK2EsZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiLCJ2cDphZHMtZXJyb3IiKTt3aW5kb3cuc2V0VGltZW91dCh0aGlzLmZhLmJpbmQodGhpcyksNTAwKX0uYmluZCh0aGlzKSk7CmIudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZC1lcnJvciIrYSxmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsInZwOmFkLWVycm9yIik7d2luZG93LnNldFRpbWVvdXQodGhpcy5mYS5iaW5kKHRoaXMpLDUwMCl9LmJpbmQodGhpcykpO2IudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZC1yZWFkeSIrYSxmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLnZwRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcigidnA6YWQtZW5kZWQiK2EsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yi52cEV2ZW50LmFkZEV2ZW50TGlzdGVuZXIoInZwOmFkc2xvdC1jb21wbGV0ZSIrYSxmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLnZwRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcigidnA6YWRzLXJlYWR5IithLGZ1bmN0aW9uKCl7dGhpcy53KCl9LmJpbmQodGhpcykpfX19KX0pKGMpO3ZhciB6YT1jLndtfHx6YTsoZnVuY3Rpb24oYyl7Yy55bT1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApnOmZ1bmN0aW9uKCl7aWYoIXdpbmRvdy5kZW1vUGxheWVyKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaWZyYW1lIiksYTthPXRoaXMuSWgod2luZG93KTtmb3IodmFyIGg9MDtoPGIubGVuZ3RoO2grKyl0cnl7YT1hfHx0aGlzLkloKGJbaF0pfWNhdGNoKGQpe310aGlzLlIoKX19LEloOmZ1bmN0aW9uKGIpe3ZhciBhPVtdO2IudmlkZW9qcyYmYi52aWRlb2pzLmdldFBsYXllcnM/YT1iLnZpZGVvanMuZ2V0UGxheWVycygpOmIudmlkZW9qcyYmYi52aWRlb2pzLnBsYXllcnMmJihhPWIudmlkZW9qcy5wbGF5ZXJzKTtpZigwPGUudGUoYSkpe2I9YTtmb3IodmFyIGggaW4gYiliLmhhc093blByb3BlcnR5KGgpJiYoYT1uZXcgeWEoYltoXSksYS5xYXx8dGhpcy5OKGEpfHwhMT09PWEuZ2V0UmF3UGxheWVyKCkuaXNSZWFkeV98fCh0aGlzLlAoYSksKG5ldyB6YShhLHRoaXMuSykpLmcoKSkpO3JldHVybiEwfXJldHVybiExfSxSOmZ1bmN0aW9uKCl7dGhpcy5IYj0Kd2luZG93LnNldFRpbWVvdXQodGhpcy5nLmJpbmQodGhpcyksdGhpcy5HYyl9fSl9KShjKTt2YXIgQWE9Yy55bXx8QWEsQmE9bmV3IEFhKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnlxPXRoaXMuYVs0XTt0aGlzLiRvPXRoaXMuYVs1XTt0aGlzLnRuPXRoaXMuYVsxMF07dGhpcy5rcD10aGlzLmFbMV07dGhpcy5Kbz10aGlzLmFbNl07dGhpcy5Gcz10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVsxXX1jLlFyPWI7Yi5wcm90b3R5cGU9e3hxOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy55cTp0aGlzLlpvKGEpfSxabzpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuJG86dGhpcy5zbihhKX0sc246ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy50bjp0aGlzLmpwKGEpfSxqcDpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMua3A6dGhpcy5JbyhhKX0sSW86ZnVuY3Rpb24oYSl7cmV0dXJuIDU8CmE/dGhpcy5Kbzp0aGlzLkVzKGEpfSxFczpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuRnM6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBDYT1jLlFyfHxDYSxzYz1uZXcgQ2EoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1zYy54cSg0KTsoZnVuY3Rpb24oYyl7Yy5sbD11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt0aGlzLlNlPTA7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPWIucGxheWVyQ29udGFpbmVyO2lmKCFhJiYoYi5wbGF5ZXJJbnN0YW5jZSYmYi5wbGF5ZXJJbnN0YW5jZS5pZCYmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYi5wbGF5ZXJJbnN0YW5jZS5pZCkpJiYoYT1iLnBhcmVudE5vZGUpLCFhKSl7dGhpcy5wYSgpO3JldHVybn10aGlzLlkoYSk7CihiPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pfHwoYj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7Yj90aGlzLlooYik6dGhpcy5wYSgpfSxWczpmdW5jdGlvbihiKXt2YXIgYT10aGlzLnpiLGg9dGhpcy5qYSgpLGQ9IiI7Yi5tZW1vJiYoZD1iLm1lbW8udmlkZW9pZCk7ZCYmYSYmYS5VYiYmKDA8PWguaW5kZXhPZihkKXx8YS56ZCgpKX0scGF1c2U6ZnVuY3Rpb24oYil7Ynx8KHRoaXMuU2U9MCk7Yj10aGlzLmdldFJhd1BsYXllcigpO2IucGxheWVySW5zdGFuY2UmJmIucGxheWVySW5zdGFuY2UucGF1c2U/KHdpbmRvdy5wb3N0TWVzc2FnZSgiaG9tYWRwYXVzZSIsIioiKSxiLnBsYXllckluc3RhbmNlLnBhdXNlKCkpOndpbmRvdy5vdlZpZGVvJiZ3aW5kb3cub3ZWaWRlby5zdG9wUGxheWJhY2smJih3aW5kb3cucG9zdE1lc3NhZ2UoImhvbWFkcGF1c2UiLCIqIiksd2luZG93Lm92VmlkZW8uc3RvcFBsYXliYWNrKCkpfSxWYTpmdW5jdGlvbigpe3RoaXMuU2UrKzsKaWYoMTA8dGhpcy5TZSlyZXR1cm4hMTt0aGlzLnBhdXNlKCJwYXVzZVJlcGVhdE9uQWREZWxpdmVyeSIpO3JldHVybiEwfSxwbGF5OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtiLnBsYXllckluc3RhbmNlJiZiLnBsYXllckluc3RhbmNlLnBsYXk/KHdpbmRvdy5wb3N0TWVzc2FnZSgiaG9tYWRwbGF5IiwiKiIpLGIucGxheWVySW5zdGFuY2UucGxheSgpKTp3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8ucmVzdW1lUGxheWJhY2smJih3aW5kb3cucG9zdE1lc3NhZ2UoImhvbWFkcGxheSIsIioiKSx3aW5kb3cub3ZWaWRlby5yZXN1bWVQbGF5YmFjaygpKX0saXNQbGF5aW5nOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4hMT09PWIucGxheWVySW5zdGFuY2UucGF1c2VkPyEwOiEwPT09Yi5wbGF5ZXJJbnN0YW5jZS5wYXVzZWQ/ITE6Yi5pc1BsYXlpbmd9LGdldEN1cnJlbnRUaW1lOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTsKaWYoYi5wbGF5ZXJJbnN0YW5jZSYmYi5wbGF5ZXJJbnN0YW5jZS5jdXJyZW50VGltZSlyZXR1cm4gYi5wbGF5ZXJJbnN0YW5jZS5jdXJyZW50VGltZTtpZih3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8uZ2V0Q3VycmVudFRpbWUpcmV0dXJuIHdpbmRvdy5vdlZpZGVvLmdldEN1cnJlbnRUaW1lKCl9LGdldER1cmF0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtpZihiLnBsYXllckluc3RhbmNlJiZiLnBsYXllckluc3RhbmNlLmR1cmF0aW9uKXJldHVybiBiLnBsYXllckluc3RhbmNlLmR1cmF0aW9uO2lmKHdpbmRvdy5vdlZpZGVvJiZ3aW5kb3cub3ZWaWRlby5nZXREdXJhdGlvbilyZXR1cm4gd2luZG93Lm92VmlkZW8uZ2V0RHVyYXRpb24oKX0sTzpmdW5jdGlvbigpe3JldHVybiJPdlZpZGVvIn0sTmE6ZnVuY3Rpb24oKXt9LE1kOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0UmF3UGxheWVyKCk7dGhpcy5nZXRDdXJyZW50VGltZSgpPmImJihiPXRoaXMuZ2V0Q3VycmVudFRpbWUoKSk7CnZhciBhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiZ0aGlzLlYmJnRoaXMuVigpfX0pfSkoYyk7dmFyIERhPWMubGx8fERhOyhmdW5jdGlvbihjKXtjLmtsPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LEFhOmZ1bmN0aW9uKCl7aWYoIXRoaXMucGUpaWYodGhpcy5BYnx8KHRoaXMuQWI9MCksdGhpcy5nZXRQbGF5ZXIoKS5pc1BsYXlpbmcoKSYmdGhpcy5BYisrLDE1PHRoaXMuQWIpdGhpcy5vKCJub2ZyYW1ld29yayIsIklNQSIpLHRoaXMucyghMCk7ZWxzZXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2lmKGIuYWR2ZXJ0aXNpbmcpaWYoYj1iLmFkdmVydGlzaW5nLmFkc0xvYWRlcil7dGhpcy5wZT0hMDt2YXIgYT0iYWRFcnJvciI7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUuQURfRVJST1ImJgooYT1nb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SKTtiLmFkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZGF8fCh0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5BYSgpfS5iaW5kKHRoaXMpLDEwKTtlbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5BYSgpfS5iaW5kKHRoaXMpLDEwKX19LHZkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF9LGdhOmZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGEoYSxiKXt2YXIgaD0hMTtpZihhKXtpZigxMDA5PT1hfHwzMDM9PWF8fDQwMz09YSloPSEwO2h8fCFhLmluZGV4T2Z8fC0xPT09YS5pbmRleE9mKCIxMDA5IikmJi0xPT09YS5pbmRleE9mKCIzMDMiKSYmLTE9PT1hLmluZGV4T2YoIjQwMyIpfHwoaD0hMCk7Im51bWJlciI9PXR5cGVvZiBhJiYoYi5UPWEsYi5vKCJhZGVycm9yIiwKYSkpfXJldHVybiBofWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTtpZihiLmdldEVycm9yJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5nZXRFcnJvcil7dmFyIGg9Yi5nZXRFcnJvcigpO2lmKGguZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgaC5nZXRFcnJvckNvZGUmJmEoaC5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO3JldHVybn19Zm9yKHZhciBkIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSYmYltkXSYmYltkXS5hZEVycm9yJiZiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmYShiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTticmVha319LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpO3RoaXMuVD10aGlzLlR8fCExO3RoaXMuQWEoKTt2YXIgYT13aW5kb3cub3ZWaWRlbzthfHwoYT13aW5kb3cub3YudmlkZW8uUGxheWVyKTsKYSYmYS5yZWdpc3RlckV2ZW50JiYhdGhpcy5IcD8oYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuT25fUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX0FERVJST1IsZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCk7dGhpcy5zKCl9LmJpbmQodGhpcykpLHRoaXMuSHA9ITAsYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX1NUT1BQRUQsZnVuY3Rpb24oYSl7Yi5WcyhhKX0uYmluZCh0aGlzKSkpOmIuaXNQbGF5aW5nKCl8fHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksMTAwKX0sczpmdW5jdGlvbihiKXt0aGlzLkkoYil9fSl9KShjKTsKdmFyIEVhPWMua2x8fEVhOyhmdW5jdGlvbihjKXtjLm1sPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMuVWE9MTUwMDt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1bXTt3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8uc3luY2hyb25pemVyJiZ3aW5kb3cub3ZWaWRlby5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllciYmMDx3aW5kb3cub3ZWaWRlby5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllci5sZW5ndGgmJihiPXdpbmRvdy5vdlZpZGVvLnN5bmNocm9uaXplci5yZWdpc3RlcmVkUGxheWVyKTt3aW5kb3cub3YmJndpbmRvdy5vdi52aWRlbyYmd2luZG93Lm92LnZpZGVvLlBsYXllciYmd2luZG93Lm92LnZpZGVvLlBsYXllci5zeW5jaHJvbml6ZXImJndpbmRvdy5vdi52aWRlby5QbGF5ZXIuc3luY2hyb25pemVyLnJlZ2lzdGVyZWRQbGF5ZXImJjA8d2luZG93Lm92LnZpZGVvLlBsYXllci5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllci5sZW5ndGgmJgooYj13aW5kb3cub3YudmlkZW8uUGxheWVyLnN5bmNocm9uaXplci5yZWdpc3RlcmVkUGxheWVyKTtpZigwPGIubGVuZ3RoKWZvcih2YXIgYT0wO2E8Yi5sZW5ndGg7YSsrKXt2YXIgaD1uZXcgRGEoYlthXSk7aC5xYXx8dGhpcy5OKGgpfHwodGhpcy5QKGgpLChuZXcgRWEoaCx0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIEZhPWMubWx8fEZhLEdhPW5ldyBGYShyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5NaT10aGlzLmFbOF07dGhpcy5idD10aGlzLmFbN107dGhpcy52bj10aGlzLmFbN107dGhpcy5XaT10aGlzLmFbNV07dGhpcy5Daz10aGlzLmFbNF07dGhpcy5qPXRoaXMuYVs3XX1jLkp2PWI7Yi5wcm90b3R5cGU9e0xpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5NaTp0aGlzLmF0KGEpfSxhdDpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuYnQ6CnRoaXMudW4oYSl9LHVuOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy52bjp0aGlzLlZpKGEpfSxWaTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuV2k6dGhpcy5CayhhKX0sQms6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLkNrOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuajphfX19KShjKTt2YXIgSGE9Yy5Kdnx8SGEsdGM9bmV3IEhhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9dGMuTGkoNCk7KGZ1bmN0aW9uKGMpe2Mubms9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPWUuQ2coYiwiZWxlbWVudElEIik7dGhpcy5xaD1iLnBvc2l0aW9uaW5nO3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2guc3R5bGUud2lkdGg9CmIud2lkdGg7aC5zdHlsZS5taW5XaWR0aD1iLndpZHRoO2guc3R5bGUubWF4V2lkdGg9Yi53aWR0aDtoLnN0eWxlLmhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1pbkhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1heEhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1hcmdpbkxlZnQ9ImF1dG8iO2guc3R5bGUubWFyZ2luUmlnaHQ9ImF1dG8iOyJiZWZvcmUiPT10aGlzLnFoP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaCxhKToiYWZ0ZXIiPT10aGlzLnFoP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaCxhLm5leHRTaWJsaW5nKTphLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGgsYSk7dGhpcy5ZKGgpO3RoaXMuWihoKTt0aGlzLm5kPWh9LHBhdXNlOmZ1bmN0aW9uKCl7fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5uZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMubmQpfSx2YTpmdW5jdGlvbigpe3JldHVybiEwfSxzbzpmdW5jdGlvbigpe2UuV2codGhpcy5uZCk7ZS5CZSh0aGlzLm5kKTsKd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnNvKCl9LmJpbmQodGhpcyksNTApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuImlucmVhZCJ9LEdlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSl9KShjKTt2YXIgSWE9Yy5ua3x8SWE7KGZ1bmN0aW9uKGMpe2MubWs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMubygiZXh0ZXJuYWwiKTt0aGlzLkkoITApfX0pfSkoYyk7dmFyIEphPWMubWt8fEphOyhmdW5jdGlvbihjKXtjLm9rPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMuVWE9MTUwMDt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtJiZtLmlucmVhZCl7dmFyIGI9bS5pbnJlYWQsYT1lLkNnKGIsImVsZW1lbnRJRCIpO2UuV2coYSkmJihiPW5ldyBJYShiKSx0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBKYShiLHRoaXMuSykpLmcoKSkpO3RoaXMuSGI9d2luZG93LnNldFRpbWVvdXQodGhpcy5nLmJpbmQodGhpcyksCjEwMCl9ZWxzZSB0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksMTAwKX19KX0pKGMpO3ZhciBLYT1jLm9rfHxLYSxMYT1uZXcgS2Eocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMudnQ9dGhpcy5hWzVdO3RoaXMuTmo9dGhpcy5hWzJdO3RoaXMuSXY9dGhpcy5hWzRdO3RoaXMudXA9dGhpcy5hWzddO3RoaXMuS249dGhpcy5hWzhdO3RoaXMuQXM9dGhpcy5hWzRdO3RoaXMuWHA9dGhpcy5hWzNdO3RoaXMuS209dGhpcy5hWzRdO3RoaXMuU3M9dGhpcy5hWzVdO3RoaXMuWG89dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbNF19Yy5oaj1iO2IucHJvdG90eXBlPXt1dDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMudnQ6dGhpcy5NaihhKX0sTWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLk5qOnRoaXMuSHYoYSl9LEh2OmZ1bmN0aW9uKGEpe3JldHVybiA5PAphP3RoaXMuSXY6dGhpcy50cChhKX0sdHA6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnVwOnRoaXMuSm4oYSl9LEpuOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Lbjp0aGlzLnpzKGEpfSx6czpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuQXM6dGhpcy5XcChhKX0sV3A6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLlhwOnRoaXMuSm0oYSl9LEptOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuS206dGhpcy5ScyhhKX0sUnM6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlNzOnRoaXMuV28oYSl9LFdvOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5Ybzp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLmo6YX19fSkoYyk7dmFyIE1hPWMuaGp8fE1hLHVjPW5ldyBNYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPQp1Yy51dCg0KTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEpe3RoaXMudXJsPWE7dGhpcy5tZXRob2Q9IkdFVCI7dGhpcy5kYXRhPXt9fWMuYms9YjtiLnByb3RvdHlwZT17c2V0RGF0YTpmdW5jdGlvbihhKXt0aGlzLmRhdGE9YX0sRXQ6ZnVuY3Rpb24oYSl7dGhpcy5tZXRob2Q9YX0sYXBwZW5kRGF0YTpmdW5jdGlvbihhLGIpe3RoaXMuZGF0YVthXT1ifSxkbjpmdW5jdGlvbihhKXt0cnl7dGhpcy5hcHBlbmREYXRhKCJob21hZF9tYWNyb3MiLEpTT04uc3RyaW5naWZ5KGEpKX1jYXRjaChiKXt9fX19KShjKTt2YXIgeT1jLmJrfHx5OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsaCxkLGYpe3RoaXMuYmI9YTt0aGlzLnhnPXRoaXMuZ2k9ITE7dGhpcy5taD1kO3RoaXMuSmg9ITE7InN0cmluZyI9PT10eXBlb2YgYSYmKHRoaXMuYmI9bmV3IHkoYSkpO3ZhciBjPXRoaXMucWI9bmV3IFhNTEh0dHBSZXF1ZXN0O2Mub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWh8fAo0IT1jLnJlYWR5U3RhdGV8fDIwMCE9Yy5zdGF0dXMmJjIwMSE9Yy5zdGF0dXN8fGgoYyk7aWYoZCYmND09Yy5yZWFkeVN0YXRlJiYyMDAhPWMuc3RhdHVzJiYyMDEhPWMuc3RhdHVzKWQoYyk7ZWxzZSBpZig0PT1jLnJlYWR5U3RhdGUmJjA9PWMuc3RhdHVzJiZsJiZsLkZlKHRoaXMuYmIudXJsKSYmbC5OZCl7dmFyIGU9bmV3IHkoYS51cmwpO2UuRXQoIlBPU1QiKTtlLnNldERhdGEoe2hvbWFkX3Bpbmc6InRydWUifSk7KG5ldyBiKGUsZnVuY3Rpb24oYSl7dmFyIGI9ITE7dHJ5e2I9SlNPTi5wYXJzZShhLnJlc3BvbnNlVGV4dCl9Y2F0Y2goaCl7Yj0hMX1iJiZiLnBpbmcmJiJwb25nIj09Yi5waW5nJiYoYj0hMCk7Ynx8bC5rYSgicmVxdWVzdF9mYWlsZWRfbm9wb25nICIpfSxmdW5jdGlvbigpe2wua2EoInJlcXVlc3RfZmFpbGVkIil9KSkubG9hZCgpfWYmJjQhPWMucmVhZHlTdGF0ZSYmZihjKX0uYmluZCh0aGlzKX1jLmNrPWI7Yi5wcm90b3R5cGU9e2xvYWQ6ZnVuY3Rpb24oKXt2YXIgYT0KdGhpcy5iYi5kYXRhO2lmKCJzdHJpbmciIT10eXBlb2YgYSl7dmFyIGI9YSxhPSIiLGQ7Zm9yKGQgaW4gYilhKz0iJiIrZCsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGJbZF0pO2E9YS5zdWJzdHIoMSl9dGhpcy54ZyYmKGErPSImaG9tYWRfZm9sbG93X3JlZGlyZWN0cz10cnVlIik7dHJ5e3RoaXMuSmg/dGhpcy5xYi5vcGVuKHRoaXMuYmIubWV0aG9kLHRoaXMuYmIudXJsLCExKTp0aGlzLnFiLm9wZW4odGhpcy5iYi5tZXRob2QsdGhpcy5iYi51cmwsITApLHRoaXMuZ2l8fCh0aGlzLnFiLndpdGhDcmVkZW50aWFscz0hMCksMDxhLmxlbmd0aCYmdGhpcy5xYi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSxhWyJYLUhvbWFkLVBvc3QiXSYmdGhpcy5xYi5zZXRSZXF1ZXN0SGVhZGVyKCJYLUhvbWFkLVBvc3QiLCJ0cnVlIiksdGhpcy5xYi5zZW5kKGEpfWNhdGNoKGYpe2wmJmwuRmUodGhpcy5iYi51cmwpP2wuTmQ/Cmwua2EoInJlcXVlc3RfZmFpbGVkIik6ZS50cmFjaygiY2hlY2siLCJyZXF1ZXN0X2ZhaWxlZCIsITApOmwuRmUodGhpcy5iYi51cmwpLHRoaXMubWgmJnRoaXMubWgoKX1yZXR1cm4gdGhpcy5xYn19fSkoYyk7dmFyIE5hPWMuY2t8fE5hOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5LYT0hMTt0aGlzLnFjPSIiO3RoaXMuZWU9dGhpcy5wYz10aGlzLnViPW51bGw7dGhpcy5Wbz10aGlzLkdiPXRoaXMuZGg9ITE7dGhpcy5KYT0iIjt0aGlzLllnPSExO3RoaXMuRmE9dGhpcy5yZD0iIjt0aGlzLlVnPXRoaXMuWD10aGlzLmlzRW5hYmxlZD10aGlzLlplPSExO3RoaXMuQ2E9W107dGhpcy5LZz10aGlzLlpiPSIiO3RoaXMubGU9ITE7dGhpcy5wZj0wO3RoaXMuRWY9InN2bXBsYXllci5hZHZlcnRpc2luZy5IT01BRF9WRVJJRklFRCI7dGhpcy5DZj0ic3ZtcGxheWVyLmFkdmVydGlzaW5nLkhPTUFEX0JMT0NLRUQiO3RoaXMuS2I9InN2bXBsYXllci5hZHZlcnRpc2luZy5IT01BRF9OT0JMT0NLRVIiOwp0aGlzLmhjPSJzdm1wbGF5ZXIuYWR2ZXJ0aXNpbmcuSE9NQURfQURCTE9DS0VSIjt0aGlzLkRmPSJzdm1wbGF5ZXIuYWR2ZXJ0aXNpbmcuSE9NQURfQ09PS0lFQkxPQ0tFUiI7dGhpcy5hYz0iIjt0aGlzLmJjPVtdO3RoaXMuY2M9W107dGhpcy5MZD1bXTt0aGlzLiRiPSIiO3RoaXMucWY9MDt0aGlzLnZpZGVvcGxhemE9e307dGhpcy5BYz0hMTt0aGlzLnVvPXRoaXMuT2Q9bnVsbDt0aGlzLkZoPXRoaXMuTmM9dGhpcy5wZz10aGlzLnVmPXRoaXMuTmQ9dGhpcy5nZT10aGlzLlFjPSExO3RoaXMuZ2I9e2dsb2JhbDohMSxjbGllbnQ6ITEsY3VzdG9tZXI6ITF9O3RoaXMudGQ9MDt0aGlzLk1nPSExO3RoaXMuTGc9MUUzO3RoaXMuJGM9ITE7dGhpcy5QYT0xRTM7dGhpcy5NZj0iIn1jLmRrPWI7Yi5wcm90b3R5cGU9e2dldENvbmZpZzpmdW5jdGlvbigpe3JldHVybntpc0FjdGl2ZTp0aGlzLkthLGFkdGFncGFyYW1ldGVyOnRoaXMucWMsYWR0YWdtb2RpZmllcjp0aGlzLnViLGFkdGFnbW9kaWZpZXJBZHY6dGhpcy5wYywKYWR0YWdyZWdleDp0aGlzLmVlLGJpdHJhdGU6dGhpcy5QYSxqc3BvcHVwczp0aGlzLmRoLHNpZGVsb2Fkczp0aGlzLkdiLGRpc2FibGV0ZXN0czp0aGlzLlZvLGhvbWFkQWxpYXM6dGhpcy5KYSxpc0luaXRpYWxpemVkOnRoaXMuWWcsZ2xvYmFsQ29uZmlnOnRoaXMucmQsY2xpZW50Q29uZmlnOnRoaXMuRmEsaXNFbmFibGVkOnRoaXMuaXNFbmFibGVkLGlzVmVyaWZpZWQ6dGhpcy5YLGlzQmxvY2tlZDp0aGlzLlVnLHNlcnZlcjp0aGlzLkNhLHN2bUNvbmZpZzp0aGlzLlpiLGhvbWFkQWRwYXRoOnRoaXMuS2csZGlzYWJsZUNvb2tpZVRlc3Q6dGhpcy5sZSx0ZXN0Q29va2llQXR0ZW1wdHM6dGhpcy5wZixIT01BRF9WRVJJRklFRDp0aGlzLkVmLEhPTUFEX0JMT0NLRUQ6dGhpcy5DZixIT01BRF9OT0JMT0NLRVI6dGhpcy5LYixIT01BRF9BREJMT0NLRVI6dGhpcy5oYyxIT01BRF9DT09LSUVCTE9DS0VSOnRoaXMuRGYsdGVzdEhpZGU6dGhpcy5hYyx0ZXN0VGFnczp0aGlzLmJjLHRlc3RUYWdzSlM6dGhpcy5jYywKdGVzdFRhZ3NYSFI6dGhpcy5MZCx0ZXN0Q29va2llOnRoaXMuJGIsdGhyb3R0bGU6dGhpcy5xZix2aWRlb3BsYXphOnRoaXMudmlkZW9wbGF6YSxob21hZFRlc3RlZDp0aGlzLkFjLGNoZWNrZWRIb21hZFN0YXR1c0NhbGxiYWNrOnRoaXMudW8sYWRCbG9ja2VyRGV0ZWN0ZWQ6dGhpcy5RYyxibG9ja2VkV2FzQ2FsbGVkOnRoaXMuZ2UsdXNlU3RyaWN0Q2hlY2tzOnRoaXMuTmQsdXNlU3RyaWN0Q29uZmlnQ2hlY2tzOnRoaXMudWYsY29uZmlnRmFpbHVyZXM6dGhpcy5nYixzaXRlQ29uZmlnOnRoaXMuYWIsc2VydmVySWQ6dGhpcy5CaCxlbmFibGVRdWFydGlsZVRyYWNraW5nOnRoaXMudmMsdnBhaWQ6dGhpcy5OYyxza2lwQWxsb3dlZDp0aGlzLkZoLHZtYXBzOnRoaXMuY2ksYWx0ZXJuYXRlX2NsaWNrdGhyb3VnaDp0aGlzLiRjLGFkRmFsbGJhY2tVUkw6dGhpcy5NZn19LERxOmZ1bmN0aW9uKCl7dmFyIGE9ITEsYjtmb3IoYiBpbiB0aGlzLmdiKSJib29sZWFuIj09dHlwZW9mIHRoaXMuZ2JbYl0mJgoxPT10aGlzLmdiW2JdJiYoYT0hMCk7cmV0dXJuIGF9LGRmOmZ1bmN0aW9uKGEpe3RoaXMuZ2JbYV09ITB9LGZxOmZ1bmN0aW9uKCl7dmFyIGE9W10sYjtmb3IoYiBpbiB0aGlzLmdiKSJib29sZWFuIj09dHlwZW9mIHRoaXMuZ2JbYl0mJjE9PXRoaXMuZ2JbYl0mJmEucHVzaChiKTtyZXR1cm4gYX0sS2Q6ZnVuY3Rpb24oYSl7YT1hfHwiIjtpZigic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIGE7YT1hLnJlcGxhY2UoIlt0aW1lXSIsTWF0aC5yb3VuZCgobmV3IERhdGUpLmdldFRpbWUoKS8xRTMpKTthPWEucmVwbGFjZSgiW3RpbWVNU10iLChuZXcgRGF0ZSkuZ2V0VGltZSgpKTthPWEucmVwbGFjZSgiW3RpbWVzdGFtcF0iLChuZXcgRGF0ZSkuZ2V0VGltZSgpKTthPWEucmVwbGFjZSgiW3JhbmRvbV0iLHRoaXMuRWIoMTApLnRvU3RyaW5nKCkpO2E9YS5yZXBsYWNlKCJbZG9jdW1lbnRVUkxdIixkb2N1bWVudC5VUkwpO2E9YS5yZXBsYWNlKCJbZG9jdW1lbnRCYXNlVVJJXSIsZG9jdW1lbnQuYmFzZVVSSSk7CnJldHVybiBhPWUuUG4oYSl9LHphOmZ1bmN0aW9uKGEsYixkKXt2YXIgZj0iIixjPSIiLGU9IiIsZz0iIjtpZighdGhpcy5LYSYmIWIpcmV0dXJuIG5ldyB5KGEpO2Y9dGhpcy5FZShhKTtjPXRoaXMubGEoYSk7Zj8odGhpcy5DYygpP2U9YTplPWMucHJvdG9jb2wrIjovLyIrYy5hdXRob3JpdHkrIi8iLGc9Yy5wYXRoLnN1YnN0cigxKSk6KGU9dGhpcy5EZCgpLGc9Yy5wYXRoLnN1YnN0cigxKSsoYy5xdWVyeT8iPyIrYy5xdWVyeToiIikpO2QmJih0aGlzLnFjfHx0aGlzLnVifHx0aGlzLnBjfHx0aGlzLmVlKSYmKGc9dGhpcy5XcihnKSk7YT1uZXcgeShlKTthLnVybD1lO2U9IiI7ZT1mP2MuaG9zdC5zcGxpdCgiLiIpLnNsaWNlKDEpLmpvaW4oIi0iKTp0aGlzLmhxKGMuaG9zdCk7YS5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9ZTthLmRhdGEuaG9tYWRfdXJsX3N1ZmZpeD1nO2EuZGF0YS5ob21hZF91cmxfc3VmZml4X2Jhc2U2ND10aGlzLnZiKGcpO2EubWV0aG9kPSJQT1NUIjsKcmV0dXJuIGF9LEVlOmZ1bmN0aW9uKGEpe3ZhciBiPSExLGQ9bmV3IFJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPyhbdy4tXSopOj8uKihbMC05XSspPy8/KFthLWYwLTldezQwfSkvPyQiLCJnIik7KGQ9ZC5leGVjKGEpKSYmKGRbMl18fGRbNV0pP2I9ITA6dGhpcy5DYygpJiYoZD1uZXcgUmVnRXhwKCJeKGh0dHBzPyk6Ly8oW3cuLV0qKTo/LiooWzAtOV0rKT8vKFthLWYwLTldezQwfSkvPyQiLCJnIiksKGQ9ZC5leGVjKGEpKSYmZFs0XSYmKGI9ITApKTtyZXR1cm4gYn0sQ2M6ZnVuY3Rpb24oKXt2YXIgYT0hMSxiPSIiO3RoaXMuQ2EmJnRoaXMuQ2EubGVuZ3RoJiYwPHRoaXMuQ2EubGVuZ3RoJiYoYj10aGlzLkNhWzBdLGI9Yi5yZXBsYWNlKCJodHRwczovLyIsIiIpLGI9Yi5yZXBsYWNlKCJodHRwOi8vIiwiIiksYj1iLnJlcGxhY2UoIi8vIiwiIiksYT0oYT1iLnNwbGl0KCIuIikpJiZhWzBdJiYiW2hhc2hdIj09YVswXT8hMTohMCk7cmV0dXJuIGF9LEZlOmZ1bmN0aW9uKGEpe3ZhciBiPQohMSxkPVJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPy4qIiwiZyIpLmV4ZWMoYSk7ZCYmKGRbMl18fGRbNV0pP2I9ITA6Yj10aGlzLkVlKGEpO3JldHVybiBifSxocTpmdW5jdGlvbihhKXt2YXIgYj0iIixkPSIiO2lmKCJzdHJpbmciPT09dHlwZW9mIHRoaXMuSmEmJjA8dGhpcy5KYS5sZW5ndGgpcmV0dXJuIHRoaXMuSmE7Zm9yKGQgaW4gdGhpcy5KYSlpZihiPXRoaXMuSmFbZF0sYi5oYXNPd25Qcm9wZXJ0eSgidXJsIikmJmIudXJsPT09YSlyZXR1cm4gYi5TdjtyZXR1cm4ibm9uZSJ9LHVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2FbdGhpcy5CaF19LERkOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy51ZCgpLGI9dGhpcy5FaCgobmV3IERhdGUpLmdldFRpbWUoKSsiIiksZD0iMWFiY2RmIi5zcGxpdCgiIik7cmV0dXJuIGEucmVwbGFjZSgiW2hhc2hdIixiLnNsaWNlKDAsLTEpKyIiK2RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmQubGVuZ3RoKV0pfSxqaDpmdW5jdGlvbihhLApiLGQpe2E9ITE7Yj0iIjtpZihkLmV2YWwpdHJ5e2I9ZXZhbCgiKCIrZC5ldmFsKyIpKCkiKX1jYXRjaChmKXthPSEwfWVsc2UgYT0hMDthJiYiS0VFUCIhPT1kLmZhbGxiYWNrJiYoYj1kLmZhbGxiYWNrKTtyZXR1cm4gYn0sVnI6ZnVuY3Rpb24oYSxiKXt2YXIgZD1lLmxhKGEpLGY9IiIsZj0iIixjO2ZvcihjIGluIGIpe2lmKGJbY10uc3VidmFsdWVzKXtmb3IodmFyIGc9ZGVjb2RlVVJJQ29tcG9uZW50KGQucXVlcnlLZXlbY10pLnNwbGl0KCImIiksZj17fSxIPTA7SDxnLmxlbmd0aDtIKyspe3ZhciBrPWdbSF0uc3BsaXQoIj0iKTtmW2tbMF1dPWtbMV19Zm9yKHZhciBsIGluIGJbY10uc3VidmFsdWVzKWZbbF09dGhpcy5qaChmW2xdLGwsYltjXS5zdWJ2YWx1ZXNbbF0pO2c9W107Zm9yKGwgaW4gZilnLnB1c2gobCsiPSIrZltsXSk7Zj1nPWVuY29kZVVSSUNvbXBvbmVudChnLmpvaW4oIiYiKSl9ZWxzZSBmPXRoaXMuamgoZC5xdWVyeUtleVtjXSxjLGJbY10pO2QucXVlcnlLZXlbY109CmZ9bD1bXTtmb3IoYyBpbiBkLnF1ZXJ5S2V5KWwucHVzaChjKyI9IitkLnF1ZXJ5S2V5W2NdKTtyZXR1cm4gZj1kLmhvc3QrZC5wYXRoKyI/IitsLmpvaW4oIiYiKX0sV3I6ZnVuY3Rpb24oYSl7dGhpcy5xYyYmKGErPXRoaXMucWMpO2lmKHRoaXMudWIpZm9yKHZhciBiIGluIHRoaXMudWIpdGhpcy51Yi5oYXNPd25Qcm9wZXJ0eShiKSYmKGE9YS5yZXBsYWNlKGIsdGhpcy51YltiXSkpO3RoaXMucGMmJihhPXRoaXMuVnIoYSx0aGlzLnBjKSk7cmV0dXJuIGF9LGw6ZnVuY3Rpb24oYSxiLGQsZixjLGUpe2w9dGhpczt0aGlzLllnPSEwO3RoaXMucmQ9YTt0aGlzLkZhPWI7dGhpcy5aZT1kO3RoaXMuT2Q9Zjt0aGlzLnNjPWM7dGhpcy5hYj1lfHx7fTt0aGlzLkpyKCk7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLkZhKXRoaXMuSHIoKTtlbHNlIGlmKCJvYmplY3QiIT09dHlwZW9mIHRoaXMuRmEpdHJ5e3RoaXMuRmE9YigpLHRoaXMuZGQoKX1jYXRjaChnKXt0aGlzLmthKCJub0NsaWVudENvbmZpZyIpfX0sCm5iOmZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7dHJ5e2I9bmV3IEV2ZW50KGEpfWNhdGNoKGQpe2I9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksYi5pbml0RXZlbnQoImN1c3RvbSIsITAsITEpfXJldHVybiBifSxKcjpmdW5jdGlvbigpe3RoaXMuTGEobmV3IHkodGhpcy5yZCt0aGlzLmFlKCJnbG9iYWwiKSksdGhpcy56cS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7dGhpcy5kZigiZ2xvYmFsIik7Im9iamVjdCI9PXR5cGVvZiBfY2xpZW50Q29uZmlnJiZ0aGlzLmRkKCl9LmJpbmQodGhpcyksITApfSxIcjpmdW5jdGlvbigpe3RoaXMuTGEobmV3IHkodGhpcy5GYSt0aGlzLmFlKCJjbGllbnQiLC0xIT10aGlzLkZhLmluZGV4T2YoIj8iKSkpLHRoaXMuZGQuYmluZCh0aGlzKSxmdW5jdGlvbigpe3RoaXMuZGYoImNsaWVudCIpO3RoaXMua2EoImNsaWVudENvbmZpZ0NvdWxkTm90QmVMb2FkZWQiKX0uYmluZCh0aGlzKSwhMCl9LGFlOmZ1bmN0aW9uKGEsYil7dmFyIGQ7ZD0oYj8iJiI6CiI/IikrKCJjYWNoZT0iK3RoaXMuRWIoKSk7dGhpcy5hYiYmdGhpcy5hYi5ub0NsaWVudENvbmZpZ0NhY2hlQnVzdGVyJiYiY2xpZW50Ij09YSYmKGQ9IiIpO3RoaXMuYWImJnRoaXMuYWIubm9DYWNoZUJ1c3RlciYmKGQ9IiIpO3JldHVybiBkfSxrYTpmdW5jdGlvbihhKXtpZighdGhpcy5nZSl7dGhpcy5nZT0hMDt2YXIgYj1mdW5jdGlvbigpe2Zvcih2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSxiPTA7YjxhLmxlbmd0aDtiKyspe2lmKGFbYl0mJmFbYl0ucGF1c2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBhW2JdLnBhdXNlKXRyeXthW2JdLnBhdXNlKCl9Y2F0Y2goaCl7fWFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKX1hPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKTtmb3IoYj0wO2I8YS5sZW5ndGg7YisrKWFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTthPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInZpZGVvLXdyYXBwZXIiKTsKZm9yKGI9MDtiPGEubGVuZ3RoO2IrKylhW2JdJiZhW2JdLnBhcmVudE5vZGUmJmFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTthPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInZpZGVvcGxheWVyIik7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKylhW2JdJiZhW2JdLnBhcmVudE5vZGUmJmFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTtpZih3aW5kb3cuc2VsZiE9d2luZG93LnRvcClmb3IoYT13aW5kb3cuZG9jdW1lbnQ7YS5oYXNDaGlsZE5vZGVzKCk7KWEucmVtb3ZlQ2hpbGQoYS5sYXN0Q2hpbGQpfTsiNHBsYXllcnMuZGUiPT1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpJiYodGhpcy5zYz0hMSk7dGhpcy5zYyYmImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLnNjP3RoaXMuc2MoKTooYigpLHdpbmRvdy5zZXRJbnRlcnZhbChiLDUwMCkpO3RoaXMuWD10aGlzLlVnPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLkNmKSk7CnRoaXMuSWIoKTtlLndjKGsuUXMpOyhiPWUuU2IodGhpcy51ZCgpKSl8fChiPWUuU2IoZG9jdW1lbnQubG9jYXRpb24uaHJlZikpO2F8fChhPSJ1bmtvd24iKTtlLnRyYWNrKCJzdGF0c19oZF9wZW5hbHR5IixhLCEwKX19LHpxOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLlgpe3ZhciBiPXt9O3RyeXtiPUpTT04ucGFyc2UoYS5yZXNwb25zZVRleHQpfWNhdGNoKGQpe2IuZW5hYmxlZD0iZmFsc2UifXRoaXMuaXNFbmFibGVkPXRoaXMuZGMoYi5lbmFibGVkKTt0aGlzLlg9IXRoaXMuaXNFbmFibGVkO3RoaXMuaXNFbmFibGVkPyJvYmplY3QiIT10eXBlb2YgdGhpcy5GYXx8dGhpcy5aYnx8dGhpcy5KYXx8dGhpcy5kZCgpOih0aGlzLkthPXRoaXMuaXNFbmFibGVkPSExLHRoaXMuWD0hMCxkb2N1bWVudC5kaXNwYXRjaEV2ZW50KHRoaXMubmIodGhpcy5LYikpLHRoaXMuSWIoKSl9fSxkZDpmdW5jdGlvbihhKXt2YXIgYj0hMTthJiYoYj1hLnJlc3BvbnNlVGV4dCk7YT17fTtpZihiKXRyeXthPQpKU09OLnBhcnNlKGIpfWNhdGNoKGQpe2E9dGhpcy5GYX1lbHNlIGE9dGhpcy5GYTt0aGlzLmlzRW5hYmxlZD10aGlzLmRjKGEuZW5hYmxlZCk7dGhpcy5YPSF0aGlzLmlzRW5hYmxlZDt0aGlzLkNhPWEuc2VydmVyfHxbXTtmb3IoYj0wO2I8dGhpcy5DYS5sZW5ndGg7YisrKXRoaXMuQ2FbYl09dGhpcy5DYVtiXS5yZXBsYWNlKCJkYW1vaC53aWtpYS5jb20iLCJkYW1vaC53aWtpYS5jb20uc3Zvbm0tYWxpYXMuY29tIik7dGhpcy5aYj1hLmNvbmZpZ3x8IiI7dGhpcy5KYT1hLmFsaWFzfHxudWxsO3RoaXMuS2c9YS5hZHBhdGh8fCIiO3RoaXMubGU9YS5kaXNhYmxlY29va2lldGVzdHx8ITE7dGhpcy5CaD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqdGhpcy5DYS5sZW5ndGgpO3RoaXMuaXNFbmFibGVkJiZ0aGlzLlpiJiZ0aGlzLkphJiZ0aGlzLkNhLmxlbmd0aD90aGlzLkRjKCExKToodGhpcy5LYT10aGlzLmlzRW5hYmxlZD0hMSx0aGlzLlg9ITAsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh0aGlzLm5iKHRoaXMuS2IpKSwKdGhpcy5JYigpKX0sRGM6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWCl7dmFyIGI9e307aWYoYSl7dmFyIGI9bmV3IHkodGhpcy5EZCgpKSxkPXRoaXMubGEodGhpcy5aYik7Yi5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9InMzaG9tYWRnbG9iYWxjb25maWdzIjtiLmRhdGEuaG9tYWRfdXJsX3N1ZmZpeD1kLnBhdGguc3Vic3RyKDEpLnJlcGxhY2UoImhvbWFkLWdsb2JhbC1jb25maWdzLnNjaG5lZXZvbm1vcmdlbi5jb20vIiwiIik7Yi5tZXRob2Q9IlBPU1QifWVsc2UgYj1uZXcgeSh0aGlzLlpiK3RoaXMuYWUoImN1c3RvbWVyIikpO3RoaXMuTGEoYix0aGlzLmR1LmJpbmQodGhpcyksZnVuY3Rpb24oKXt0aGlzLmRmKCJjdXN0b21lciIpO2E/dGhpcy5MbD90aGlzLmthKCJub1NWTUNvbmZpZyIpOih0aGlzLkxsPSEwLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5EYyghMCl9LmJpbmQodGhpcyksMTAwKSk6dGhpcy5EYyghMCl9LmJpbmQodGhpcyksITApfX0sZHU6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWCl7YT0KYS5yZXNwb25zZVRleHQ7dmFyIGI9e307dHJ5e2I9SlNPTi5wYXJzZShhKX1jYXRjaChkKXtpZighdGhpcy5BYyYmdGhpcy5pc0VuYWJsZWQpe3RoaXMuQWM9ITA7dGhpcy5EYyghMCk7cmV0dXJufX10aGlzLk5kPXRoaXMuZGMoYi5zdHJpY3QpO3RoaXMudWY9dGhpcy5kYyhiLnN0cmljdF9jb25maWdfZW5hYmxlZCk7dGhpcy5wZz1iLmR1cmF0aW9uX2NoZWNrX3BlbmFsdHlfZGlzYWJsZWR8fCExO3RoaXMudmM9dGhpcy5kYyhiLmVuYWJsZVF1YXJ0aWxlVHJhY2tpbmcpO3RoaXMuaXNFbmFibGVkPXRoaXMuZGMoYi5lbmFibGVkKTt0aGlzLmFjPWIudGVzdGhpZGV8fCIiO3RoaXMuY2M9Yi50ZXN0YWR0YWdzanN8fGIudGVzdGFkdGFnc3x8W107dGhpcy5MZD1iLnRlc3RhZHRhZ3N4aHJ8fFtdO3RoaXMucWM9Yi5hZHRhZ3BhcmFtZXRlcnx8IiI7dGhpcy51Yj1iLmFkdGFnbW9kaWZpZXJ8fG51bGw7dGhpcy5wYz1iLmFkdGFnbW9kaWZpZXJfYWR2fHxudWxsO3RoaXMuZWU9Yi5hZHRhZ3JlZ2V4fHwKbnVsbDt0aGlzLmRoPWIuanNwb3B1cHN8fCExO3RoaXMuR2I9Yi5zaWRlbG9hZHN8fCExO3RoaXMuTmM9Yi52cGFpZHx8ITE7dGhpcy5hYi52cGFpZD10aGlzLk5jO3RoaXMuRmg9Yi5za2lwYWxsb3dlZHx8ITE7dGhpcy5hZD1iLmNhcHRpb25fZHVyYXRpb258fCExO3RoaXMuY2k9Yi52bWFwc3x8IiI7dGhpcy4kYz1iLmFsdGVybmF0ZV9jbGlja3Rocm91Z2h8fCExO3RoaXMuUGE9Yi5iaXRyYXRlfHwxRTM7dGhpcy5NZj1iLmFkX2ZhbGxiYWNrX1VSTHx8IiI7dGhpcy4kYj1iLnRlc3QzcmRwYXJ0eWNvb2tpZSYmYi50ZXN0M3JkcGFydHljb29raWUgaW5zdGFuY2VvZiBBcnJheT90aGlzLnBxKGIudGVzdDNyZHBhcnR5Y29va2llKTpiLnRlc3QzcmRwYXJ0eWNvb2tpZXx8IiI7dGhpcy5sZSYmKHRoaXMuJGI9bnVsbCk7dGhpcy5xZj1iLnRocm90dGxlfHwwO3RoaXMudmlkZW9wbGF6YT1iLnZpZGVvcGxhemF8fHt9OyF0aGlzLkFjJiZ0aGlzLmlzRW5hYmxlZD8odGhpcy5BYz0hMCx0aGlzLkRjKCEwKSk6CnRoaXMuaXNFbmFibGVkJiYhdGhpcy55dSgpJiYodGhpcy5hY3x8dGhpcy5jY3x8dGhpcy5iY3x8dGhpcy4kYnx8dGhpcy5MZCk/dGhpcy5aZT8odGhpcy5LYT10aGlzLlg9ITAsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh0aGlzLm5iKHRoaXMuS2IpKSx0aGlzLmllKCksdGhpcy5JYigpKTp0aGlzLmx1KCk6KHRoaXMuaXNFbmFibGVkPSExLHRoaXMubXUoKSl9fSxsdTpmdW5jdGlvbigpe3RoaXMua3UoKTt0aGlzLm51KCl9LG51OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4idmFyIGV2dCA9IHt9O2lmICh0eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7ZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KCciK2ErIicpO30gZWxzZSB7ZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7ZXZ0LmluaXRDdXN0b21FdmVudCgnIithKyInLCBmYWxzZSwgZmFsc2UsIHt9KTt9d2luZG93LnBhcmVudC5kb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2dCk7In0KdmFyIGI9ImlubGluZWV2YWxkYXRhIixkPTA7dHJ5e3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2Yud2lkdGg9MTtmLmhlaWdodD0xO2Yuc3R5bGUuZGlzcGxheT0ibm9uZSI7Zi5zcmM9ImFib3V0OmJsYW5rIjt2YXIgYz1lLmJhKDEwKSxnPWUuYmEoMTApLEg9ZS5iYSgxMCk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihjLGZ1bmN0aW9uKCl7ZCsrO2I9Yi5yZXBsYWNlKCJkYXRhIiwiIil9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGcsZnVuY3Rpb24oKXtkKys7Yj1iLnJlcGxhY2UoImV2YWwiLCIiKX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoSCxmdW5jdGlvbigpe2QrKztiPWIucmVwbGFjZSgiaW5saW5lIiwiIil9KTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYpO2YuY29udGVudFdpbmRvdy5kb2N1bWVudC53cml0ZShhdG9iKCJQR2gwYld3K1BHaGxZV1ErUEhOamNtbHdkQ0IwZVhCbFBTSjBaWGgwTDJwaGRtRnpZM0pwY0hRaVBnPT0iKSsKYShIKSthdG9iKCJQQzl6WTNKcGNIUStQSE5qY21sd2RDQjBlWEJsUFNKMFpYaDBMMnBoZG1GelkzSnBjSFFpUG1WMllXd29JZz09IikrYShnKSthdG9iKCJJaWs4TDNOamNtbHdkRDQ4YzJOeWFYQjBJSFI1Y0dVOUluUmxlSFF2YW1GMllYTmpjbWx3ZENJZ2MzSmpQU0prWVhSaE9uUmxlSFF2YW1GMllYTmpjbWx3ZER0aVlYTmxOalFzIikrZS52YihhKGMpKSthdG9iKCJJajQ4TDNOamNtbHdkRDQ4TDJobFlXUStQR0p2WkhrK1BDOWliMlI1UGp3dmFIUnRiRDQ9IikpfWNhdGNoKGspe313aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGYpfWNhdGNoKGEpe31pZigzIT1kKXt2YXIgYz1lLnVjKCk7aWYoKGMuaXNDaHJvbWV8fGMuaXNGaXJlZm94KSYmIWMuaXNFZGdlJiYhZS5UYSgpKXtpZih0aGlzLmFiJiZ0aGlzLmFiLnBsYXllciYmdGhpcy5hYi5wbGF5ZXIubGVuZ3RoKXtlLnRyYWNrKCJzdGF0c19oZF9jc3BfaGRwIixiLCEwKTsKcmV0dXJufXRoaXMua2EoImNzcF8iK2IpfWUudHJhY2soInN0YXRzX2hkX2NzcCIsYiwhMCl9fS5iaW5kKHRoaXMpLDFFMyl9LG11OmZ1bmN0aW9uKCl7dGhpcy5YPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLktiKSk7dGhpcy5JYigpfSxMYzpmdW5jdGlvbihhKXt0aGlzLlFjPSEwO3RoaXMuWHx8KHRoaXMuWD10aGlzLkthPSEwLGRvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYihhKSksdGhpcy5JYigpLHRoaXMuaWUoKSl9LGt1OmZ1bmN0aW9uKCl7aWYodGhpcy5hYyl7dmFyIGE9ZS51YygpO2lmKChhLmlzQ2hyb21lfHxhLmlzRmlyZWZveCkmJnRoaXMuYmgoKSl0aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZEhpZGUoKSBzdGV2ZSBpcyBhbGl2ZSIpO2Vsc2V7YT0hMTt0cnl7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yi5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLmFjKTtiLnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuYWMpOwpiLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJ3aWR0aDoxcHg7aGVpZ2h0OjFweDttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4O2JhY2tncm91bmQtY29sb3I6I2ZmMDAwMCIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYik7dmFyIGQ9MD09PWIub2Zmc2V0V2lkdGh8fDA9PT1iLm9mZnNldEhlaWdodDtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGIpO2E9ZH1jYXRjaChmKXt9YT90aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZEhpZGUoKSBhZCBlbGVtZW50IHdhcyBoaWRkZW4iKTp0aGlzLk5oKCl9fWVsc2UgdGhpcy5OaCgpfSxNaDpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXtmPWQuc2hpZnQoKS5yZXBsYWNlKCJbcmFuZG9tXSIsdGhpcy5FYigpKTt0aGlzLnF1KGYsMDxkLmxlbmd0aD9hLmJpbmQodGhpcyk6dGhpcy5tZi5iaW5kKHRoaXMpLGIuYmluZCh0aGlzKSl9ZnVuY3Rpb24gYigpe3RoaXMuTGModGhpcy5oYywibiBIb21hZFV0aWwudGVzdEFkQ2FsbCgpIGFkIGNhbGwgdG8gJyIrCmYrIicgd2FzIGJsb2NrZWQiKX1pZigodGhpcy5iYz10aGlzLkxkKSYmdGhpcy5iYy5sZW5ndGgpe3ZhciBkPXRoaXMuYmMuc2xpY2UoKSxmPSIiO2EuYmluZCh0aGlzKSgpfWVsc2UgdGhpcy5tZigpfSxxdTpmdW5jdGlvbihhLGIsZCl7ZnVuY3Rpb24gZigpe2MoKSYmYigpfWZ1bmN0aW9uIGMoKXtyZXR1cm4gZT8od2luZG93LmNsZWFyVGltZW91dChlKSwhMCk6ITF9dmFyIGU9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtmKCl9LDNFMyk7dGhpcy5MYShuZXcgeShhKSxmLGZ1bmN0aW9uKCl7YygpJiZkKCl9KX0sTmg6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7Zj1kLnNoaWZ0KCkucmVwbGFjZSgiW3JhbmRvbV0iLHRoaXMuRWIoKSk7dGhpcy5ydShmLDA8ZC5sZW5ndGg/YS5iaW5kKHRoaXMpOnRoaXMuTWguYmluZCh0aGlzKSxiLmJpbmQodGhpcykpfWZ1bmN0aW9uIGIoKXt0aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZENhbGxKUygpIGFkIGNhbGwgdG8gJyIrCmYrIicgd2FzIGJsb2NrZWQiKX1pZih0aGlzLmNjJiZ0aGlzLmNjLmxlbmd0aCl7dmFyIGQ9dGhpcy5jYy5zbGljZSgpLGY7YS5iaW5kKHRoaXMpKCl9ZWxzZSB0aGlzLk1oKCl9LHJ1OmZ1bmN0aW9uKGEsYixkKXtmdW5jdGlvbiBmKCl7ZSgpJiZiKCl9ZnVuY3Rpb24gYygpe2UoKSYmZCgpfWZ1bmN0aW9uIGUoKXtyZXR1cm4gZz8od2luZG93LmNsZWFyVGltZW91dChnKSwhMCk6ITF9dmFyIGc9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtmKCl9LDNFMyk7dHJ5e3dpbmRvdy5vbmVycm9yPWZ1bmN0aW9uKGIsZCl7ZD09YSYmZSgpJiZjKCl9O3ZhciBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoayk7ay5zZXRBdHRyaWJ1dGUoImFzeW5jIiwiYXN5bmMiKTtrLnNldEF0dHJpYnV0ZSgiZGVmZXIiLCJkZWZlciIpO2sub25sb2FkPWY7ay5vbmVycm9yPWM7ay5zcmM9YTtrLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwKYyl9Y2F0Y2gobCl7ZigpfX0sbWY6ZnVuY3Rpb24oKXt0aGlzLiRiPyh0aGlzLnBmKyssdGhpcy5MYShuZXcgeSh0aGlzLiRiKSx0aGlzLmp1LmJpbmQodGhpcyksZnVuY3Rpb24oKXt0aGlzLm5mKCJDQ0MiKX0uYmluZCh0aGlzKSkpOnRoaXMuS2goKX0sbmY6ZnVuY3Rpb24oYSl7dGhpcy5MYyh0aGlzLkRmLCJuIEhvbWFkVXRpbC50ZXN0M3JkUGFydHlDb29raWUoKSBjYW5ub3Qgc2V0IDNyZCBwYXJ0eSBjb29raWUgIithKX0sanU6ZnVuY3Rpb24oYSl7YT1hLnJlc3BvbnNlVGV4dDt2YXIgYj0hMTt0cnl7Yj1KU09OLnBhcnNlKGEpfWNhdGNoKGQpe31iJiZiLnN0YXR1cz8idHJpZ2dlci1zZXQiPT1iLnN0YXR1cz8zPnRoaXMucGY/dGhpcy5tZigpOnRoaXMubmYoIkJCQiIpOiJhbHJlYWR5LXNldCI9PWIuc3RhdHVzJiZ0aGlzLktoKCk6dGhpcy5uZigiQUFBIil9LEtoOmZ1bmN0aW9uKCl7dGhpcy5YPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLktiKSk7CnRoaXMuSWIoKTt0aGlzLmllKCl9LGJoOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PWFkZEV2ZW50TGlzdGVuZXIudG9TdHJpbmcoKS5pbmRleE9mKCJuYXRpdmUgY29kZSIpJiYtMT09YWRkRXZlbnRMaXN0ZW5lci50b1N0cmluZygpLmluZGV4T2YoImFkZEV2ZW50TGlzdGVuZXIiKX0sSWI6ZnVuY3Rpb24oKXt2YXIgYT0iMCIsYj0iMCI7dHJ5e2UuVGEoKSYmKGE9IjEiKX1jYXRjaChkKXthPTJ9dGhpcy5RYyYmKGI9IjEiKTtlLnRyYWNrKCJzdGF0c19oZF9tb2JpbGVfYWIiLGErIiIrYiwhMCk7IjEiPT09YiYmKGUuQmEoInQtb25saW5lLmRlIil8fGUuQmEoImdpZ2EuZGUiKXx8ZS5CYSgid2VsdC5kZSIpKSYmZS50cmFjaygic3RhdHNfaGRfYWJfaXNTdGV2ZSIsdGhpcy5iaCgpLCEwKTtkb2N1bWVudC5kaXNwYXRjaEV2ZW50KHRoaXMubmIodGhpcy5FZikpO3RoaXMuT2QmJiJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5PZCYmdGhpcy5PZCgpfSxybzpmdW5jdGlvbigpe2lmKHRoaXMudWYmJgp0aGlzLkRxKCkpe3ZhciBhPXRoaXMuZnEoKTthJiZhLmpvaW4mJmUudHJhY2soImNvbmZpZ19mYWlsZWQiLGEuam9pbigiXyIpLCEwKX19LFJoOmZ1bmN0aW9uKGEpe2F8fChhPSIiKTtpZigic3RyaW5nIiE9PXR5cGVvZiBhKXRyeXthPWEudG9TdHJpbmcoKX1jYXRjaChiKXthPSJjb3VsZF9ub3RfY29udmVydF90b19zdHJpbmcifWE9YS50cmltKCk7ZS50cmFjaygic3RhdHNfaGRfYWN0aXZhdGVkIixhLCEwKX0sTGE6ZnVuY3Rpb24oYSxiLGQsZixjLGcpe3RoaXMudGR8fCh0aGlzLnRkPTApO3RoaXMudGQrKzt0aGlzLnRkPnRoaXMuTGcmJiF0aGlzLk1nJiYodGhpcy5NZz0hMCxlLnRyYWNrKCJzdGF0c19oZF9yZXF1ZXN0Y291bnQiLHRoaXMuTGcsITApKTthPW5ldyBOYShhLGIsZCk7ZiYmKGEuZ2k9ITApO2MmJmUubXIoKSYmKGEueGc9ITApO2cmJihhLkpoPSEwKTtyZXR1cm4gYS5sb2FkKCl9LGVnOmZ1bmN0aW9uKCl7ZS5UYSgpfHxlLllhKCJodHRwOi8vZDM3OTk2NGF5bWV4MnguY2xvdWRmcm9udC5uZXQvY2hlY2sueG1sP2VtcHR5PXRydWUiLAoiaG9tYWRzdGF0aWN2YXN0Iix7aG9tYWRfaGFzaF9ndWVzc2VkOiJ0cnVlIn0sZnVuY3Rpb24oYSl7dmFyIGI9bnVsbCxkPW51bGwsZj0iIjt0cnl7KGI9YS5yZXNwb25zZVhNTCl8fChiPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEucmVzcG9uc2VUZXh0LCJ0ZXh0L3htbCIpKSxkPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkIilbMF19Y2F0Y2goYyl7dGhpcy5rYSgibWVkaWFmaWxlX25veG1sIik7cmV0dXJufWlmKGQpaWYoYT1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJNZWRpYUZpbGUiKSlpZihhWzBdJiYoYT1hWzBdKSxhKXtmPWEmJmEuY2hpbGROb2RlcyYmYS5jaGlsZE5vZGVzWzBdP2EuY2hpbGROb2Rlc1swXS5ub2RlVmFsdWU6IiI7dGhpcy5DYygpfHwoYT10aGlzLmxhKGYpLGY9YS5wcm90b2NvbCsiOi8vIithLmhvc3QpO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7ZS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXtlLm5ldHdvcmtTdGF0ZT09CmUuTkVUV09SS19OT19TT1VSQ0UmJnRoaXMua2EoIm1lZGlhZmlsZSIpfS5iaW5kKHRoaXMpKTtlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNvdXJjZSIpKTtlLnNldEF0dHJpYnV0ZSgic3JjIixmKX1lbHNlIHRoaXMua2EoIm1lZGlhZmlsZV9ub21lZGlhIik7ZWxzZSB0aGlzLmthKCJtZWRpYWZpbGVfbm9tZWRpYSIpO2Vsc2UgdGhpcy5rYSgibWVkaWFmaWxlX25vYWQiKX0uYmluZCh0aGlzKSxmdW5jdGlvbigpe3RoaXMua2EoIm1lZGlhZmlsZV94bWxyZXF1ZXN0Iil9LmJpbmQodGhpcyksdGhpcyl9LGl1OmZ1bmN0aW9uKCl7cmV0dXJuImFsbCI9PT10aGlzLmNpfSxxbzpmdW5jdGlvbigpe3RoaXMuemEoImh0dHA6Ly9kMzc5OTY0YXltZXgyeC5jbG91ZGZyb250Lm5ldC9jaGVjay54bWw/ZW1wdHk9dHJ1ZSIsITApO3ZhciBhPXRoaXMuemEoImh0dHA6Ly9kMzc5OTY0YXltZXgyeC5jbG91ZGZyb250Lm5ldC9jaGVjay54bWw/ZW1wdHk9dHJ1ZSIsITApOwphLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0iaG9tYWRzdGF0aWN2YXN0IjthLmRhdGEuaG9tYWRfaGFzaF9ndWVzc2VkPSJ0cnVlIjt0aGlzLkxhKGEsdGhpcy5UdS5iaW5kKHRoaXMpLHRoaXMuU3UuYmluZCh0aGlzKSl9LFR1OmZ1bmN0aW9uKGEpe3ZhciBiPW51bGwsZD1udWxsO3RyeXsoYj1hLnJlc3BvbnNlWE1MKXx8KGI9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYS5yZXNwb25zZVRleHQsInRleHQveG1sIikpLGQ9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWQiKVswXX1jYXRjaChmKXtyZXR1cm59ZHx8dGhpcy5BcCgpfSxTdTpmdW5jdGlvbigpe30sQXA6ZnVuY3Rpb24oKXtlLndjKGsuenApO2UudHJhY2soImZhaWwtaW5pdCIsIjEwMSIpO3RoaXMua2EoInZhc3RmaWxlTWFuaXB1bGF0aW9uIil9LGllOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0VuYWJsZWQmJnRoaXMuR2IubGVuZ3RoKWZvcih2YXIgYT0wO2E8dGhpcy5HYi5sZW5ndGg7YSsrKXt2YXIgYj0KdGhpcy5HYlthXTsicmVxdWVzdCI9PWIudHlwZSYmZS5ZYShiLnVybCxiLmFsaWFzLG51bGwsZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7fSx0aGlzKTtpZigiZXZhbCI9PWIudHlwZSl7dmFyIGQ9bmV3IEo7d2luZG93W2QuaWEoKV09dGhpcztlLllhKGIudXJsLGIuYWxpYXMsbnVsbCxmdW5jdGlvbihhKXtpZihhLnJlc3BvbnNlVGV4dCl0cnl7ZXZhbChhLnJlc3BvbnNlVGV4dCl9Y2F0Y2goYil7fX0sZnVuY3Rpb24oKXt9LHRoaXMpfX19LHl1OmZ1bmN0aW9uKCl7cmV0dXJuIDEwMCpNYXRoLnJhbmRvbSgpPHRoaXMucWZ9LHBxOmZ1bmN0aW9uKGEpe3JldHVybiBhW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSphLmxlbmd0aCldfSxFYjpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnBvdygxMCxhfHwxMCkqKC44OTk5OTk5OTkqTWF0aC5yYW5kb20oKSsuMSkpfSxiYTpmdW5jdGlvbihhKXthPWF8fDEwO2Zvcih2YXIgYj0iIixkPTA7ZDxhO2QrKyliKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCguNT4KTWF0aC5yYW5kb20oKT82NTo5NykrTWF0aC5mbG9vcigyNipNYXRoLnJhbmRvbSgpKSk7cmV0dXJuIGJ9LGRjOmZ1bmN0aW9uKGEpe3JldHVybiJUcnVlIj09YXx8InRydWUiPT1hfHwxPT1hfHwiMSI9PWF8fDE9PWF9LHZiOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iIixkLGYsYyxlLGcsayxsPTA7bDxhLmxlbmd0aDspZD1hLmNoYXJDb2RlQXQobCsrKSxmPWEuY2hhckNvZGVBdChsKyspLGM9YS5jaGFyQ29kZUF0KGwrKyksZT1kPj4yLGQ9KGQmMyk8PDR8Zj4+NCxnPShmJjE1KTw8MnxjPj42LGs9YyY2Myxpc05hTihmKT9nPWs9NjQ6aXNOYU4oYykmJihrPTY0KSxiPWIrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZSkrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZCkrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZykrCiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGspO3JldHVybiBifSxsYTpmdW5jdGlvbihhKXt2YXIgYj0ic291cmNlIHByb3RvY29sIGF1dGhvcml0eSB1c2VySW5mbyB1c2VyIHBhc3N3b3JkIGhvc3QgcG9ydCByZWxhdGl2ZSBwYXRoIGRpcmVjdG9yeSBmaWxlIHF1ZXJ5IGFuY2hvciIuc3BsaXQoIiAiKTthPS9eKD86KD8hW146QF0rOlteOkBcL10qQCkoW146XC8/Iy5dKyk6KT8oPzpcL1wvKT8oKD86KChbXjpAXSopKD86OihbXjpAXSopKT8pP0ApPyhbXjpcLz8jXSopKD86OihcZCopKT8pKCgoXC8oPzpbXj8jXSg/IVtePyNcL10qXC5bXj8jXC8uXSsoPzpbPyNdfCQpKSkqXC8/KT8oW14/I1wvXSopKSg/Olw/KFteI10qKSk/KD86IyguKikpPykvLmV4ZWMoYSk7Zm9yKHZhciBkPXt9LGY9MTQ7Zi0tOylkW2JbZl1dPWFbZl18fCIiO2QucXVlcnlLZXk9e307ZFtiWzEyXV0ucmVwbGFjZSgvKD86XnwmKShbXiY9XSopPT8oW14mXSopL2csCmZ1bmN0aW9uKGEsYixoKXtiJiYoZC5xdWVyeUtleVtiXT1oKX0pO3JldHVybiBkfSxFaDpmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEpe3ZhciBkPSIiLGgsYztmb3IoaD03OzA8PWg7aC0tKWM9YT4+PjQqaCYxNSxkKz1jLnRvU3RyaW5nKDE2KTtyZXR1cm4gZH1mdW5jdGlvbiBkKGEsYil7cmV0dXJuIGE8PGJ8YT4+PjMyLWJ9dmFyIGYsYyxlPUFycmF5KDgwKSxnPTE3MzI1ODQxOTMsaz00MDIzMjMzNDE3LGw9MjU2MjM4MzEwMixtPTI3MTczMzg3OCxyPTMyODUzNzc1MjAscCxxLHQsdSx2O3A9YS5sZW5ndGg7dmFyIHc9W107Zm9yKGY9MDtmPHAtMztmKz00KWM9YS5jaGFyQ29kZUF0KGYpPDwyNHxhLmNoYXJDb2RlQXQoZisxKTw8MTZ8YS5jaGFyQ29kZUF0KGYrMik8PDh8YS5jaGFyQ29kZUF0KGYrMyksdy5wdXNoKGMpO3N3aXRjaChwJTQpe2Nhc2UgMDpmPTIxNDc0ODM2NDg7YnJlYWs7Y2FzZSAxOmY9YS5jaGFyQ29kZUF0KHAtMSk8PDI0fDgzODg2MDg7YnJlYWs7Y2FzZSAyOmY9CmEuY2hhckNvZGVBdChwLTIpPDwyNHxhLmNoYXJDb2RlQXQocC0xKTw8MTZ8MzI3Njg7YnJlYWs7Y2FzZSAzOmY9YS5jaGFyQ29kZUF0KHAtMyk8PDI0fGEuY2hhckNvZGVBdChwLTIpPDwxNnxhLmNoYXJDb2RlQXQocC0xKTw8OHwxMjh9Zm9yKHcucHVzaChmKTsxNCE9dy5sZW5ndGglMTY7KXcucHVzaCgwKTt3LnB1c2gocD4+PjI5KTt3LnB1c2gocDw8MyY0Mjk0OTY3Mjk1KTtmb3IoYT0wO2E8dy5sZW5ndGg7YSs9MTYpe2ZvcihmPTA7MTY+ZjtmKyspZVtmXT13W2ErZl07Zm9yKGY9MTY7Nzk+PWY7ZisrKWVbZl09ZChlW2YtM11eZVtmLThdXmVbZi0xNF1eZVtmLTE2XSwxKTtjPWc7cD1rO3E9bDt0PW07dT1yO2ZvcihmPTA7MTk+PWY7ZisrKXY9ZChjLDUpKyhwJnF8fnAmdCkrdStlW2ZdKzE1MTg1MDAyNDkmNDI5NDk2NzI5NSx1PXQsdD1xLHE9ZChwLDMwKSxwPWMsYz12O2ZvcihmPTIwOzM5Pj1mO2YrKyl2PWQoYyw1KSsocF5xXnQpK3UrZVtmXSsxODU5Nzc1MzkzJjQyOTQ5NjcyOTUsCnU9dCx0PXEscT1kKHAsMzApLHA9YyxjPXY7Zm9yKGY9NDA7NTk+PWY7ZisrKXY9ZChjLDUpKyhwJnF8cCZ0fHEmdCkrdStlW2ZdKzI0MDA5NTk3MDgmNDI5NDk2NzI5NSx1PXQsdD1xLHE9ZChwLDMwKSxwPWMsYz12O2ZvcihmPTYwOzc5Pj1mO2YrKyl2PWQoYyw1KSsocF5xXnQpK3UrZVtmXSszMzk1NDY5NzgyJjQyOTQ5NjcyOTUsdT10LHQ9cSxxPWQocCwzMCkscD1jLGM9djtnPWcrYyY0Mjk0OTY3Mjk1O2s9aytwJjQyOTQ5NjcyOTU7bD1sK3EmNDI5NDk2NzI5NTttPW0rdCY0Mjk0OTY3Mjk1O3I9cit1JjQyOTQ5NjcyOTV9cmV0dXJuKGIoZykrYihrKStiKGwpK2IobSkrYihyKSkudG9Mb3dlckNhc2UoKX19fSkoYyk7dmFyIE9hPWMuZGt8fE9hLGw9bmV3IE9hO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLlB0PXRoaXMuYVs5XTt0aGlzLk5rPXRoaXMuYVszXTt0aGlzLmZ1PQp0aGlzLmFbM107dGhpcy5qPXRoaXMuYVs1XX1jLmxuPWI7Yi5wcm90b3R5cGU9e090OmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5QdDp0aGlzLk1rKGEpfSxNazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTms6dGhpcy5ldShhKX0sZXU6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5mdTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmo6YX19fSkoYyk7dmFyIFBhPWMubG58fFBhLHZjPW5ldyBQYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXZjLk90KDQpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoYSxiLGQpe3RoaXMuYj1hO2EuZi5PP3RoaXMuWmE9YS5mLk8oKTp0aGlzLlphPSIiO2EuZi5TZyYmYS5mLlNnKHtwYXVzZTp0aGlzLnpkLmJpbmQodGhpcykscmVzdW1lOnRoaXMuemguYmluZCh0aGlzKSwKbXV0ZTp0aGlzLk5lLmJpbmQodGhpcyksdW5tdXRlOnRoaXMuTHUuYmluZCh0aGlzKX0pO3RoaXMuY29udGFpbmVyPXRoaXMuYi5oYjt0aGlzLnBsYXllcj10aGlzLmIuZjt0aGlzLlBiPXRoaXMuWmM9ITE7dGhpcy5Mbj0xRTM7dGhpcy5lYT1udWxsO3RoaXMuTD1iO3RoaXMueWE9e307dGhpcy52aWRlbz17fTt0aGlzLkpkPXt9O2UubGIoIm5ld0JpZ0FkSWQiKTt0aGlzLmJvPWUuYmEoMTApO3RoaXMuamY9MDt0aGlzLlhjPSJXZXJidW5nIC0gW3RpbWVdIjtkJiZkLmFkbWVzc2FnZSYmKHRoaXMuWGM9ZC5hZG1lc3NhZ2UsImZ1bmN0aW9uIj09dHlwZW9mIGQuYWRtZXNzYWdlJiYoKGE9dGhpcy5iLmYpJiZ0aGlzLmIuZi51JiYoYT10aGlzLmIuZi51KCkpLHRoaXMuWGM9ZC5hZG1lc3NhZ2UoYSkpKTtkJiYidHJ1ZSI9PVN0cmluZyhkLmFkanVzdEFkVm9sdW1lVG9Db250ZW50UGxheWVyKSYmKHRoaXMua249ZC5hZGp1c3RBZFZvbHVtZVRvQ29udGVudFBsYXllcik7dGhpcy5RZT10aGlzLklkPQohMTt0aGlzLmdoPWQmJmQubWF4V3JhcHBlckRlcHRoP3BhcnNlSW50KGQubWF4V3JhcHBlckRlcHRoKToxNTt0aGlzLmM9e307dGhpcy5WYz0hMTt0aGlzLlVoPS0xO3RoaXMuY29udHJvbHM9dGhpcy5jYXB0aW9uPXRoaXMuVWI9ITE7dGhpcy5Rbz1lLmJhKDEwKTt0aGlzLkRiPWUuYmEoMTApO3RoaXMuQmI9ZS5iYSgxMCk7dGhpcy5HaD1lLmJhKDEwKTt0aGlzLmNvbmY9e307dGhpcy50Yz10aGlzLkNiPSExO3RoaXMub2U9bnVsbDt0aGlzLlJkPXRoaXMuSmI9dGhpcy56ZT10aGlzLlZlPXRoaXMua2U9dGhpcy5qZD10aGlzLmxmPXRoaXMucGI9dGhpcy5nYz10aGlzLm9oPXRoaXMueGM9dGhpcy56dT10aGlzLnNiPSExO3RoaXMubGM9W107dGhpcy5lYz17fTt0aGlzLnJmPSExO3RoaXMuV2I9e307dGhpcy5Hcz0yMDA7dGhpcy5BZj10aGlzLmZpPXRoaXMuZmU9dGhpcy5ZZT0hMX1jLllqPWI7Yi5wcm90b3R5cGU9e3p0OmZ1bmN0aW9uKGEpe3RoaXMuY29uZj1hfSxIYTpmdW5jdGlvbihhKXt2YXIgYj0KdGhpcy5jb25mW2FdO3RoaXMuY29uZlt0aGlzLlphXSYmdGhpcy5jb25mW3RoaXMuWmFdW2FdJiYoYj10aGlzLmNvbmZbdGhpcy5aYV1bYV0pO3JldHVybiBifSxTaDpmdW5jdGlvbigpeyJwcmVyb2xsIj09ZS5TYSYmZS50cmFjaygic3RhdHNfaGRfYWN0aXZlIiwiIiwhMCk7dGhpcy5MLlFjP2UudHJhY2soImFkY2FsbCIsIjEiKTplLnRyYWNrKCJhZGNhbGwiLCIwIik7ZS50cmFjaygic3RhdHNfaGRfYWRfY2FsbCIsIiIsITApO2UudihrLmJuLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LEllOmZ1bmN0aW9uKGEsYixkLGMpe3RoaXMuc2I9ZDt2YXIgbj0hMTtjJiZjLmhvbWFkX3JlcGxhY2VfdXJsc19pbl90YWdzJiYobj0hMCk7aWYodGhpcy5MLlgpdGhpcy5qZisrLGUubGIoIm5ld1NtYWxsQWRJZCIpLHRoaXMuTC5ybygpLGM9bC5nZXRDb25maWcoKSx0aGlzLkwuS2EmJnRoaXMuTC5pc0VuYWJsZWQ/KHRoaXMuU2goKSxuZXcgVCh0aGlzLGEsdGhpcy5naCwKe2ZpcnN0Q2FsbDohMCx1c2VBZFRhZ1BhcmFtZXRlcjohMCxrZWVwVVJMOmIsYml0cmF0ZTpjLlBhLGVtcHR5OiJyZXNwb25zZS5lbXB0eSI9PWEsdnBhaWQ6dGhpcy5MLk5jLGhvbWFkX3JlcGxhY2VfdXJsc19pbl90YWdzOm4sY29udGVudFZpZGVvOntkdXJhdGlvbjp0aGlzLmIuZi5nZXREdXJhdGlvbigpLGN1cnJlbnRUaW1lOnRoaXMuYi5mLmdldEN1cnJlbnRUaW1lKCl9fSkpOmI/KHRoaXMuU2goKSxuZXcgVCh0aGlzLGEsdGhpcy5naCx7Zmlyc3RDYWxsOiEwLHZwYWlkOnRoaXMuTC5OYyx1c2VBZFRhZ1BhcmFtZXRlcjohMCxiaXRyYXRlOmMuUGEsa2VlcFVSTDohMCxob21hZF9yZXBsYWNlX3VybHNfaW5fdGFnczpuLGNvbnRlbnRWaWRlbzp7ZHVyYXRpb246dGhpcy5iLmYuZ2V0RHVyYXRpb24oKSxjdXJyZW50VGltZTp0aGlzLmIuZi5nZXRDdXJyZW50VGltZSgpfX0pKTp0aGlzLlFhKCk7ZWxzZXt2YXIgZz10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtnLkllKGEsYixkKX0sCjUwKX19LFRlOmZ1bmN0aW9uKGEpe2EuV2EmJmUudHJhY2soInN0YXRzX2hkX3dyYXBwZXJzYyIsImFkIiwhMCk7InNwaWVnZWwuZGUiIT1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpfHx0aGlzLlFlfHwic3ZtcHJldmlldyIhPWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZikuYW5jaG9yPyh0aGlzLlJkPXRoaXMuSmI9dGhpcy54Yz0hMSx0aGlzLmM9YSx0aGlzLkx0KHRoaXMuYyksdGhpcy5IZyhhKSx0aGlzLmxjPXRoaXMuemcoYSksdGhpcy5lYz17fSx0aGlzLnJmPSExLHRoaXMuSG8oKSk6dGhpcy5oZCgpfSxIZzpmdW5jdGlvbihhKXthJiYoYS5vcmlnaW4mJihhPWEub3JpZ2luKSxhLnBhcmVudCYmYS5wYXJlbnQgaW5zdGFuY2VvZiBiJiYodGhpcy5KZD10aGlzLnNxKGEpKSx0aGlzLkhnKGEucGFyZW50KSl9LHpnOmZ1bmN0aW9uKGEpe3ZhciBjPVtdO2EmJihhLm9yaWdpbiYmKGE9YS5vcmlnaW4pLCFhfHwhYS5wYXJlbnR8fGEucGFyZW50IGluc3RhbmNlb2YgYnx8KGM9CnRoaXMuemcoYS5wYXJlbnQpKSxjLnB1c2godGhpcy4kcChhKSkpO3JldHVybiBjfSwkcDpmdW5jdGlvbihhKXt2YXIgYj0iIixkPVtdO2lmKGEmJmEuVSYmYS5VLmdldEF0dHJpYnV0ZSl7Yj1hLlUuZ2V0QXR0cmlidXRlKCJpZCIpO2E9YS5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJDcmVhdGl2ZSIpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWQucHVzaChhW2NdLmdldEF0dHJpYnV0ZSgiaWQiKSk7MT09ZC5sZW5ndGgmJihkPWRbMF0pfXJldHVybnthZElEOmIsY3JlYXRpdmVJRDpkfX0sc3E6ZnVuY3Rpb24oYSl7dmFyIGI9W10sZD1bXSxjPVtdLGU9W10sZz0iIjtpZihhLlUpe2I9YS5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJbXByZXNzaW9uIik7Yz1hLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkNyZWF0aXZlIik7YS5VLmdldEF0dHJpYnV0ZSgiaWQiKSYmKGc9YS5VLmdldEF0dHJpYnV0ZSgiaWQiKSxlLnB1c2goZykpO2EuVS5nZXRBdHRyaWJ1dGUoImFkSUQiKSYmKGc9CmEuVS5nZXRBdHRyaWJ1dGUoImFkSUQiKSxlLnB1c2goZykpO2Zvcih2YXIgaz0wO2s8Yy5sZW5ndGg7aysrKWNba10uZ2V0QXR0cmlidXRlKCJpZCIpJiYoZz1jW2tdLmdldEF0dHJpYnV0ZSgiaWQiKSxlLnB1c2goZykpLGNba10uZ2V0QXR0cmlidXRlKCJhZElEIikmJihnPWNba10uZ2V0QXR0cmlidXRlKCJhZElEIiksZS5wdXNoKGcpKTtmb3Ioaz0wO2s8Yi5sZW5ndGg7aysrKWQucHVzaChhLmliKGJba10pKX1yZXR1cm57aW1wcmVzc2lvbnM6ZCxhZElkczplLGFkSWQ6Z319LG9hOmZ1bmN0aW9uKGEpe2EuV2EmJmUudHJhY2soInN0YXRzX2hkX3dyYXBwZXJzYyIsIm5vYWQiLCEwKTt2YXIgYj0wLGQ9InN0YXRzX2hkX2FkX2Vycm9yIjthJiYoYS5lcnJvciYmYS5lcnJvci5kZXRhaWwmJmEuZXJyb3IuZGV0YWlsLmNvZGUmJihiPWEuZXJyb3IuZGV0YWlsLmNvZGUpLGEubWQmJmEubWQuZXJyb3ImJmEubWQuZXJyb3IuY29kZSYmKGI9YS5tZC5lcnJvci5jb2RlKSk7c3dpdGNoKGEuZXJyb3IuY29kZSl7Y2FzZSB3Lk9jLmNvZGU6Yj09CkYuVWQuY29kZT9lLnYoay5udix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpOihlLkplKCksYj09Ri5IZi5jb2RlJiZlLnYoay5jcyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKTtlLnYoay55cCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2VtcHR5IjticmVhaztjYXNlIHcuRmYuY29kZTplLnYoay5VdSx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2Vycm9yX3Zhc3Rsb2FkZmFpbGVkIjticmVhaztjYXNlIHcuSWYuY29kZTplLnRyYWNrKCJ3cmFwcGVybGltaXQiLCIxMDYiKTtlLnYoay51dix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2Vycm9yX3dyYXBwZXJsaW1pdCI7YnJlYWs7Y2FzZSB3LlZkLmNvZGU6ZS52KGsueHYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLAp0aGlzLkIoKSx0aGlzLkMoKSk7ZD0ic3RhdHNfaGRfYWRfZXJyb3JfeG1scGFyc2UiO2JyZWFrO2Nhc2Ugdy5UZC5jb2RlOmUudihrLmRzLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSksZS50cmFjaygibm9tZWRpYSIsIjEwMiIpLGQ9InN0YXRzX2hkX2FkX2Vycm9yX25vbWVkaWEiLHRoaXMudGN8fChlLnRyYWNrKCJub21lZGlhX25vZmxhc2giLCIxMDUiKSxkPSJzdGF0c19oZF9hZF9lcnJvcl9ub21lZGlhbm9mbGFzaCIpfSJzdGF0c19oZF9hZF9lcnJvciI9PWQmJmEuZXJyb3ImJmEuZXJyb3IueGEmJihkKz0iXyIrYS5lcnJvci54YSk7ZS50cmFjayhkLCIiLCEwKTt0aGlzLlFiKGEpO3RoaXMuUWEoKX0sUWI6ZnVuY3Rpb24oYSl7dmFyIGI9OTAwO2EmJmEuZXJyb3ImJmEuZXJyb3IuY29kZSYmKGI9YS5lcnJvci5jb2RlLDkwMTxiJiYoYj05MDApKTtmb3IoYj17IltFUlJPUkNPREVdIjpifTthLk9hLmxlbmd0aDspdHJ5e3ZhciBkPWEuT2EucG9wKCk7CnRoaXMuSGUoZC51cmwsZC50eXBlLGIpfWNhdGNoKGMpe319LEx0OmZ1bmN0aW9uKGEpe3RoaXMua2U9dGhpcy56ZT10aGlzLlZlPSExO3RoaXMueWE9dGhpcy5iLkc7dmFyIGI9OTk5OTt0aGlzLmNvbmYuekluZGV4JiYoYj10aGlzLmNvbmYuekluZGV4LTEpO3RoaXMueWEuekluZGV4PWI7Yj10aGlzLmIuRjt0cnl7dmFyIGQ9dGhpcy5iLmYuZ2V0UmF3UGxheWVyKCk7aWYoZCYmZC5lbnZ2YXJzKXRyeXtiPWQuZW52dmFycygpLnZpZGVvU2xvdCx0aGlzLlllPSEwfWNhdGNoKGMpe319Y2F0Y2goZSl7fWIub3c9ImF1dG8iO3RoaXMuY29uZlsidmlkZW8uc3R5bGUucG9zaXRpb24iXSYmKGIuc3R5bGUucG9zaXRpb249dGhpcy5jb25mWyJ2aWRlby5zdHlsZS5wb3NpdGlvbiJdKTt0aGlzLmNvbmZbInZpZGVvLnN0eWxlIl0mJihiLnN0eWxlPXRoaXMuY29uZlsidmlkZW8uc3R5bGUiXSk7aWYodGhpcy5jb25mWyJ2aWRlby5hdHRyaWJ1dGVzIl0pZm9yKHZhciBnIGluIHRoaXMuY29uZlsidmlkZW8uYXR0cmlidXRlcyJdKXRoaXMuY29uZlsidmlkZW8uYXR0cmlidXRlcyJdLmhhc093blByb3BlcnR5KGcpJiYKYi5zZXRBdHRyaWJ1dGUoZyx0aGlzLmNvbmZbInZpZGVvLmF0dHJpYnV0ZXMiXVtnXSk7dGhpcy5rbiYmdGhpcy5wbGF5ZXIucWUoKSYmKGIudm9sdW1lPXRoaXMucGxheWVyLnFlKCkvMTAwKTtmb3IoO2IuZmlyc3RDaGlsZDspYi5yZW1vdmVDaGlsZChiLmZpcnN0Q2hpbGQpO2ZvcihkPTA7ZDxhLk0ubGVuZ3RoO2QrKyliLmNhblBsYXlUeXBlKGEuTVtkXS50eXBlKSYmdGhpcy5lbihiLGEuTVtkXS51cmwrIiIsYS5NW2RdLnR5cGUpO3RoaXMuWWUmJmIubG9hZCgpO2lmKHRoaXMuT2goYikpe3RoaXMuaG4oYik7YT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdP2Euc3R5bGU9dGhpcy5jb25mWyJpbm5lcldhcnBwZXIuc3R5bGUiXTooYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUud2lkdGg9IjEwMCUiLGEuc3R5bGUuaGVpZ2h0PSIxMDAlIik7dGhpcy5lYT10aGlzLnlhLmFwcGVuZENoaWxkKGEpO3RyeXt0aGlzLlllPwp0aGlzLnZpZGVvPWI6dGhpcy52aWRlbz10aGlzLmVhLmFwcGVuZENoaWxkKGIpfWNhdGNoKGspe3RoaXMudmlkZW89Yn19ZWxzZSB0aGlzLmMuTW8oKT8oYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdP2Euc3R5bGU9dGhpcy5jb25mWyJpbm5lcldhcnBwZXIuc3R5bGUiXTphLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGhpcy5lYT10aGlzLnlhLmFwcGVuZENoaWxkKGEpLHRoaXMudmlkZW89dGhpcy5lYS5hcHBlbmRDaGlsZChiKSx0aGlzLkp0KCkpOnRoaXMuRGUoKT90aGlzLkRoKCk6dGhpcy5jLm9yaWdpbi5xZyh3LlRkKX0sSnQ6ZnVuY3Rpb24oKXt0aGlzLnBiPXRoaXMuZ2M9ITE7dGhpcy5iLmYudmEmJnRoaXMuYi5mLnZhKCkmJihlLnYoay5qZyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMucGI9ITApO2UuamUoKTt0aGlzLmMmJnRoaXMuYy5vcmlnaW4mJnRoaXMuYy5vcmlnaW4uc2EmJgplLmpuKHRoaXMuYy5vcmlnaW4uc2EpO2UuZWIoInNldFVwVnBhaWQiKTt2YXIgYT10aGlzLmIuRjt0aGlzLmIuRj1DLnBvcCgpO2EucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcy5iLkYsYSk7dGhpcy5iLnBoKCk7dGhpcy5iLkpjKCk7Zm9yKGE9dGhpcy5iLkc7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7YS5wYXJlbnR8fHRoaXMuYi5KYygpO3RoaXMuZWE9dGhpcy55YT10aGlzLmIuRzt0aGlzLndmKCJ2cGFpZCIpO2lmKHRoaXMucGIpe2lmKGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYikpYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbjt0aGlzLnRyYWNrKCJtdXRlIiwhMCk7ZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJjb250ZW50IiwhMCk7ZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKX10aGlzLkg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7dGhpcy5ILnNldEF0dHJpYnV0ZSgid2lkdGgiLAoiMTAwJSIpO3RoaXMuSC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjEwMCUiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJzY3JvbGxpbmciLCJubyIpO3RoaXMuSC5zZXRBdHRyaWJ1dGUoImFsbG93IiwiYXV0b3BsYXkiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJkZWxlZ2F0ZXN0aWNreXVzZXJhY3RpdmF0aW9uIiwibWVkaWEiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJzdHlsZSIsImJvcmRlcjogMCBub25lO291dGxpbmU6IG5vbmU7Iik7dGhpcy5iLkcuYXBwZW5kQ2hpbGQodGhpcy5IKTt0aGlzLkgub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGE9ITE7dGhpcy5iLmYudmEmJnRoaXMuYi5mLnZhKCkmJihhPSEwKTt2YXIgYj10aGlzLmMudXEoKSxjPXRoaXMuYy5BLk9yaWdpbmFsQWRQYXJhbWV0ZXJzLGc9e2hvbWFkOkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobC5nZXRDb25maWcoKSkpLHZwYWlkOnt1cmw6Yi51cmwsdmlld21vZGU6Im5vcm1hbCIsZGVzaXJlZEJpdHJhdGU6Yi5kZXNpcmVkQml0cmF0ZXx8CmIuYml0cmF0ZXx8NDAwLGFkUGFyYW1ldGVyczpjLGNyZWF0aXZlRGF0YTp7QWRQYXJhbWV0ZXJzOmN9LGNvbnRlbnRwbGF5ZXI6e3dpZHRoOnBhcnNlSW50KHRoaXMuYi5HLnN0eWxlLndpZHRoKSxoZWlnaHQ6cGFyc2VJbnQodGhpcy5iLkcuc3R5bGUuaGVpZ2h0KX19LGNvbnRlbnRQbGF5ZXI6e211dGVkOmF9fTtlLm1hKHRoaXMuSCwiY29uZmlnIixnKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDEwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwiY29uZmlnIixnKX0uYmluZCh0aGlzKSwyMDApO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksNTAwKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDcwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwKImNvbmZpZyIsZyl9LmJpbmQodGhpcyksMUUzKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDEyMDApO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksMTUwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwiY29uZmlnIixnKX0uYmluZCh0aGlzKSwyRTMpO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksNUUzKX0uYmluZCh0aGlzKTthPWUuJGYoImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9ob21hZC1nbG9iYWwtY29uZmlncy5zY2huZWV2b25tb3JnZW4uY29tL2lmcmFtZS5odG1sIix0aGlzLkwpO3RoaXMuSC5zcmM9YTtlLmJlKCJ2cGFpZGV2ZW50IixmdW5jdGlvbihhKXsiQWRTaXplQ2hhbmdlIiE9YS5kYXRhLm5hbWUmJiJBZFJlbWFpbmluZ1RpbWVDaGFuZ2UiIT0KWyJkYXRhIl0ubmFtZSYmdGhpcy5iLlRiKCEwKTtpZihhJiZhLmRhdGEmJmEuZGF0YS5uYW1lKXt0aGlzLmxjPWEuZGF0YS5vcmlnaW5hbGV2ZW50LmFkSURzOyJBZEVycm9yIj09YS5kYXRhLm5hbWUmJnRoaXMuYnYoYSk7aWYoIkFkSW1wcmVzc2lvbiI9PWEuZGF0YS5uYW1lJiYodGhpcy5jdigpLHRoaXMuYi5UYighMCksIXRoaXMuSmIpKXt2YXIgYj0yRTMsYz01MDt0aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uJiYodGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi5wZXJjZW50JiYoYz10aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnBlcmNlbnQpLHRoaXMuY29uZi52aWV3YWJsZUltcHJlc3Npb24udGltZU1TJiYoYj10aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnRpbWVNUykpO3RoaXMuSmI9e2VsOnRoaXMuSCxjYjpmdW5jdGlvbigpe3RoaXMuUmQ9ITA7ZS52KGsuYmksdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt0aGlzLnRyYWNrKCJ2aWV3YWJsZSIpfS5iaW5kKHRoaXMpLAp0aW1lTVM6YixwZXJjZW50OmMsc3RhcnRUaW1lOiExfTtlLkNlKHRoaXMuSmIpfSJBZFN0YXJ0ZWQiPT1hLmRhdGEubmFtZSYmKHRoaXMuYi5UYighMCksdGhpcy5ndigpKTsiQWRWaWRlb1N0YXJ0Ij09YS5kYXRhLm5hbWUmJih0aGlzLmIuVGIoITApLHRoaXMua3YoKSk7IkFkVmlkZW9GaXJzdFF1YXJ0aWxlIj09YS5kYXRhLm5hbWUmJnRoaXMuaXYoKTsiQWRWaWRlb01pZHBvaW50Ij09YS5kYXRhLm5hbWUmJnRoaXMuanYoKTsiQWRWaWRlb1RoaXJkUXVhcnRpbGUiPT1hLmRhdGEubmFtZSYmdGhpcy5sdigpOyJBZFZpZGVvQ29tcGxldGUiPT1hLmRhdGEubmFtZSYmdGhpcy5odigpOyJBZFN0b3BwZWQiPT1hLmRhdGEubmFtZSYmdGhpcy5kaSgpO2lmKCJBZENsaWNrVGhydSI9PWEuZGF0YS5uYW1lKXt2YXIgZz1hLmRhdGEuY2xpY2tUaHJ1VGFyZ2V0O2d8fChnPXRoaXMuYy5PYik7aWYoIWcpcmV0dXJuO3RoaXMudHJhY2soImNsaWNrdHJhY2tpbmciKTtlLnYoay5pZyx0aGlzLmMuQSwKdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPSJfdG9wIjt0cnl7dGhpcy5MLiRjJiYoYT0iX2JsYW5rIik7dmFyIGI9d2luZG93Lm9wZW4oIiIsYSk7Yi5kb2N1bWVudC5ib2R5LmlubmVySFRNTD0iPGRpdj48L2Rpdj4iO2IuZG9jdW1lbnQubG9jYXRpb24uaHJlZj1nfWNhdGNoKGQpe3dpbmRvdy5vcGVuKGcsYSl9fS5iaW5kKHRoaXMpLDUwMCl9IkFkU2tpcHBlZCI9PWEuZGF0YS5uYW1lJiZ0aGlzLmZ2KCk7IkFkUmVtYWluaW5nVGltZUNoYW5nZSI9PWEuZGF0YS5uYW1lJiZlLnYoay4kZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpOyJBZFBhdXNlZCI9PWEuZGF0YS5uYW1lJiZ0aGlzLmR2KCk7IkFkUGxheWluZyI9PWEuZGF0YS5uYW1lJiYodGhpcy5maSYmKHRoaXMuQWY9ITEsdGhpcy5ZYigpKSx0aGlzLmV2KCkpOyJBZFZvbHVtZUNoYW5nZSI9PWEuZGF0YS5uYW1lJiYoYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkJiKSwKMD09YS5kYXRhLm9yaWdpbmFsZXZlbnQudm9sdW1lPyh0aGlzLnBiPSEwLGImJihiLmlubmVySFRNTD10aGlzLmNvbmYudW5tdXRlQnV0dG9uKSx0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJ1c2VyIiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSk6KHRoaXMucGI9ITEsYiYmKGIuaW5uZXJIVE1MPXRoaXMuY29uZi5tdXRlQnV0dG9uKSx0aGlzLnRyYWNrKCJ1bm11dGUiLCEwKSxlLnRyYWNrKCJzdGF0c19oZF91bm11dGVkIiwidXNlciIsITApLGUudihrLnRmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpLGUudihrLiRkLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpfX0uYmluZCh0aGlzKSk7ZS5iZSgidnBhaWRjb250aW51ZWNvbnRlbnQiLGZ1bmN0aW9uKCl7dGhpcy5RYSgpfS5iaW5kKHRoaXMpKTtlLmJlKCJ2cGFpZGVycm9zIixmdW5jdGlvbigpe3RoaXMuUWEoKX0uYmluZCh0aGlzKSk7CnRoaXMuYi5ZZihmdW5jdGlvbihhKXtlLm1hKHRoaXMuSCwicmVzaXplIixhKX0uYmluZCh0aGlzKSl9LGR2OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy50cmFjaygicGF1c2UiKTtlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2EmJihhLmlubmVySFRNTD10aGlzLmNvbmYucGxheUJ1dHRvbik7dGhpcy5nYz0hMH0sZXY6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRiKTthJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uKTt0aGlzLnRyYWNrKCJyZXN1bWUiLCEwKTtlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuZ2M9ITF9LGd2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygiY3JlYXRpdmVWaWV3Iik7ZS52KGsuVWYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKX0sCmZ2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygic2tpcCIpO2UudihrLlRmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LGN2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygiaW1wcmVzc2lvbiIpO2UuZWIoImltcHJlc3Npb24iKTtlLnYoay5QZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxrdjpmdW5jdGlvbigpe3RoaXMudHJhY2soInN0YXJ0Iik7ZS5lYigic3RhcnQiKTtlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxpdjpmdW5jdGlvbigpe3RoaXMudHJhY2soImZpcnN0UXVhcnRpbGUiKTt0aGlzLnhjPSEwO2UuZWIoImZpcnN0UXVhcnRpbGUiKTtlLnYoay5OZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxqdjpmdW5jdGlvbigpe3RoaXMudHJhY2soIm1pZHBvaW50Iik7ZS5lYigibWlkcG9pbnQiKTtlLnYoay5SZix0aGlzLmMuQSx0aGlzLmIuZi51KCksCnRoaXMuQigpLHRoaXMuQygpKX0sbHY6ZnVuY3Rpb24oKXt0aGlzLnRyYWNrKCJ0aGlyZFF1YXJ0aWxlIik7ZS5lYigidGhpcmRRdWFydGlsZSIpO2UudihrLlZmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LGh2OmZ1bmN0aW9uKCl7dGhpcy5QZCgpO2UuZWIoImNvbXBsZXRlIil9LGRpOmZ1bmN0aW9uKGEpe2lmKHRoaXMuSCYmdGhpcy5ILnBhcmVudE5vZGUmJnRoaXMuSC5wYXJlbnROb2RlLnBhcmVudE5vZGUpe2UuZWIoImFkc3RvcHBlZCIpO3ZhciBiPXRoaXMuSC5wYXJlbnROb2RlO3RoaXMuSC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuSCk7Yi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpO2UuamUoKTt0aGlzLkg9ITE7dGhpcy5RYShhKX19LGJ2OmZ1bmN0aW9uKGEpe3ZhciBiPWEubWVzc2FnZXx8IiIsZD0vXGQrL2csYz1bXTshYiYmYS5kYXRhJiZhLmRhdGEub3JpZ2luYWxldmVudCYmYS5kYXRhLm9yaWdpbmFsZXZlbnQubXNnJiYoYj0KYS5kYXRhLm9yaWdpbmFsZXZlbnQubXNnLChjPWIubWF0Y2goZCkpP2Muam9pbiYmKGI9Yy5qb2luKCItIikpOmI9Yi5zdWJzdHJpbmcoMCwyMCkpO2UudHJhY2soInN0YXRzX3ZwX2Vycm9yaGFuZGxlciIsYiwhMCk7ZS5lYigiZXJyIixiKTtlLnYoay5tdix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuZGkoITApfSxlbjpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoYSxiKXtpZihiLkthJiZiLmlzRW5hYmxlZCYmIWIuQ2MoKSl7dmFyIGQ9Yi5sYShhKTtyZXR1cm4gZC5wcm90b2NvbCsiOi8vIitkLmhvc3R9cmV0dXJuIGF9aWYoYS5hcHBlbmRDaGlsZCl7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic291cmNlIik7Yy5zcmM9ZChiLHRoaXMuTCk7Yy5vbmVycm9yPXRoaXMuWXUuYmluZCh0aGlzKTthLmFwcGVuZENoaWxkKGMpfWVsc2UgYS5zZXRBdHRyaWJ1dGUoInNyYyIsZChiLHRoaXMuTCkpfSxPaDpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRFbGVtZW50c0J5VGFnTmFtZT8KMDxhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzb3VyY2UiKS5sZW5ndGg6ITB9LGhuOmZ1bmN0aW9uKGEpe2EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZHN0YXJ0Iix0aGlzLmFpLmJpbmQodGhpcykpO2EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkbWV0YWRhdGEiLHRoaXMueGYuYmluZCh0aGlzKSk7YS5hZGRFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIix0aGlzLnlmLmJpbmQodGhpcykpO2EuYWRkRXZlbnRMaXN0ZW5lcigiZW5kZWQiLHRoaXMuUGQuYmluZCh0aGlzKSk7YS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5RZC5iaW5kKHRoaXMpKX0sRWQ6ZnVuY3Rpb24oYSl7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2Fkc3RhcnQiLHRoaXMuYWkuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsdGhpcy54Zi5iaW5kKHRoaXMpKTthLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLHRoaXMueWYuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlbmRlZCIsCnRoaXMuUGQuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5RZC5iaW5kKHRoaXMpKX0sYWk6ZnVuY3Rpb24oYSl7dGhpcy5QYnx8KHRoaXMudmlkZW8uY29udHJvbHM9ITEsd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLlBifHx0aGlzLnhmKGEpfS5iaW5kKHRoaXMpLHRoaXMuTG4pKX0seGY6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWmMmJnRoaXMuT2godGhpcy52aWRlbykmJiF0aGlzLkNiJiYhdGhpcy5QYil7dGhpcy5aYz0hMDt0cnl7aWYoIWUuVGEoKSYmYS50YXJnZXQmJjU+PWEudGFyZ2V0LmR1cmF0aW9uJiY1PE1hdGguYWJzKHRoaXMuYy5kdXJhdGlvbi1hLnRhcmdldC5kdXJhdGlvbikpe3RoaXMuQ2J8fCh0aGlzLkNiPSEwLHRoaXMuRWQodGhpcy52aWRlbyksZS50cmFjaygic3RhdHNfaGRfbm9vcHZpZGVvIiwiIiwhMCksdGhpcy5MLnBnfHx0aGlzLkwua2EoInZpZGVvLW5vb3AiKSk7dGhpcy5RYSgpO3JldHVybn19Y2F0Y2goYil7ZS50cmFjaygic3RhdHNfaGRfbm9vcHZpZGVvX2ZhaWwiLAoiIiwhMCl9dGhpcy5YdSgpO3RoaXMudmlkZW8uY29udHJvbHM9ITE7dGhpcy5iLkpjKCk7dGhpcy5aaCgpO3RoaXMud2YoKTt0aGlzLmFnKCk7dGhpcy5iLnBoKCk7dGhpcy52aWRlby5wbGF5JiZ0aGlzLmtmKCl9fSxrZjpmdW5jdGlvbigpe2lmKCF0aGlzLmpkKWlmKHRoaXMuY29uZi5wcmVBZElmcmFtZVVybCl7dmFyIGE9dGhpcy5jb25mLnByZUFkSWZyYW1lVXJsOyJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoYT1hKGUuU2EpKTtpZigic3RyaW5nIj09dHlwZW9mIGEmJmEpe3RoaXMuc2Q9W107Zm9yKHZhciBiPXRoaXMuYi5HLGQ9MDtkPGIuY2hpbGRyZW4ubGVuZ3RoO2QrKyl0aGlzLnNkLnB1c2goYi5jaGlsZHJlbltkXSksYi5jaGlsZHJlbltkXS5zdHlsZS5kaXNwbGF5PSJub25lIjtkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9KTtkLnNldEF0dHJpYnV0ZSgic3JjIiwKYSk7ZC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Quc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7ZC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAwIG5vbmU7b3V0bGluZTogbm9uZTsiKTtiLmFwcGVuZENoaWxkKGQpO3ZhciBjPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihhKXtpZigiY29udGludWUiPT1hLmRhdGEpe3RoaXMuVGMoKTthPU1hdGgucm91bmQoKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWMpLzFFMyk7dmFyIGI9IiI7MTxhJiYoYj0iZ3QxIik7NTxhJiYoYj0iZ3Q1Iik7MTA8YSYmKGI9Imd0MTAiKTsyMDxhJiYoYj0iZ3QyMCIpO2UudHJhY2soInN0YXRzX2hkX3ByZUlmcmFtZUNsb3NlZCIsYiwhMCl9fS5iaW5kKHRoaXMpKTtlLnRyYWNrKCJzdGF0c19oZF9wcmVJZnJhbWVPcGVuZWQiLCIiLCEwKX1lbHNlIHRoaXMuVGMoKX1lbHNlIHRoaXMuVGMoKX0sVGM6ZnVuY3Rpb24oYSl7aWYodGhpcy5zZClmb3IodmFyIGI9CjA7Yjx0aGlzLnNkLmxlbmd0aDtiKyspdGhpcy5zZFtiXS5zdHlsZS5kaXNwbGF5PSJibG9jayI7aWYoKGI9dGhpcy52aWRlby5wbGF5KCkpJiZiWyJjYXRjaCJdKWJbImNhdGNoIl0oZnVuY3Rpb24oYil7dGhpcy5qZHx8KGE/KCJzdHJpbmciIT10eXBlb2YgYiYmYiYmYi5tZXNzYWdlJiYoYj1iLm1lc3NhZ2UpLHRoaXMuUWEoKSxlLnRyYWNrKCJzdGF0c19oZF9wbGF5UHJvbWlzZUZhaWxlZCIsYiwhMCkpOih0aGlzLk5lKCEwKSx0aGlzLlRjKCEwKSkpfS5iaW5kKHRoaXMpKTtiLnRoZW4oZnVuY3Rpb24oKXt0aGlzLnplJiZlLnRyYWNrKCJzdGF0c19oZF9wbGF5UHJvbWlzZVJlc29sdmVkQWZ0ZXJJbXByZXNzaW9uIiwiIiwhMCk7dGhpcy5WZT0hMH0uYmluZCh0aGlzKSk7ZGE/KHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLlhiLmJpbmQodGhpcykpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuWGIuYmluZCh0aGlzKSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLAp0aGlzLlhiLmJpbmQodGhpcykpKTpLPWZ1bmN0aW9uKCl7dGhpcy5WY3x8KHRoaXMudmlkZW8ubG9hZCgpLHRoaXMua2YoKSl9LmJpbmQodGhpcyk7dGhpcy5zZSgpLkNoKHRoaXMpfSxQZDpmdW5jdGlvbigpe3RoaXMuTC52YyYmIXRoaXMuQ2ImJmUudHJhY2soInF1YXJ0aWxlIiwiY29tcGxldGUiLCEwKTt0aGlzLnRyYWNrKCJjb21wbGV0ZSIpO2UudihrLiRtLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSk7dGhpcy5RYSgpfSxRYTpmdW5jdGlvbihhKXtpZighdGhpcy5rZSlpZih0aGlzLmtlPSEwLHRoaXMuUmR8fChlLnYoay5mcyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMudHJhY2soIm5vdHZpZXdhYmxlIikpLHRoaXMuYy5yYnx8dGhpcy5jLmpjKXtlLmxiKCJuZXdTbWFsbEFkSWQiKTt0aGlzLmpmKys7dGhpcy5QYj10aGlzLlpjPSExO3RyeXt0aGlzLkVkKHRoaXMudmlkZW8pfWNhdGNoKGIpe310cnl7dGhpcy5lYS5yZW1vdmVDaGlsZCh0aGlzLnZpZGVvKX1jYXRjaChkKXt9dHJ5e3RoaXMueWEucmVtb3ZlQ2hpbGQodGhpcy5lYSl9Y2F0Y2goYyl7fXRoaXMuY2FwdGlvbj0KdGhpcy5jb250cm9scz1udWxsO3RoaXMuSWQ9ITE7dHJ5e3RoaXMuYi5XaCgpfWNhdGNoKGcpe310aGlzLmxmPSEwO3RoaXMuYi53ZSgpO3RoaXMuVWI9ITE7dGhpcy5zZSgpLnloKCk7dGhpcy5jLnJiJiZ0aGlzLmMub3JpZ2luLk9lKCk7dGhpcy5jLmpjJiYoYT90aGlzLmMub3JpZ2luLmtoKCk6dGhpcy5oZCgpKX1lbHNlIHRoaXMuaGQoKX0sWXU6ZnVuY3Rpb24oYSl7YS50YXJnZXQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChhLnRhcmdldCk7dGhpcy52aWRlby5uZXR3b3JrU3RhdGUmJnRoaXMudmlkZW8ubmV0d29ya1N0YXRlPT10aGlzLnZpZGVvLk5FVFdPUktfTk9fU09VUkNFJiYodGhpcy5FZCh0aGlzLnZpZGVvKSx0aGlzLkRlKCk/dGhpcy5EaCgpOnRoaXMuUWQoYSkpfSxRZDpmdW5jdGlvbihhKXt0aGlzLlBiPSEwO2EmJmEudGFyZ2V0JiZhLnRhcmdldC5lcnJvciYmYS50YXJnZXQuZXJyb3IuY29kZXx8dGhpcy52aWRlby5uZXR3b3JrU3RhdGU9PXRoaXMudmlkZW8uTkVUV09SS19OT19TT1VSQ0UmJgoodGhpcy5EZSgpP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50Y3x8dGhpcy5MLmVnKCl9LmJpbmQodGhpcyksMUUzKTp0aGlzLkwuZWcoKSk7dGhpcy5jLm9yaWdpbi5xZyh3LlRkKX0seWY6ZnVuY3Rpb24oKXtpZih0aGlzLnp1KXRoaXMuUWEoKTtlbHNle3RoaXMuVWI9ITA7dGhpcy5iLmYuVmEmJiF0aGlzLmxmJiZ0aGlzLmIuZi5WYSgpJiZlLnYoay5mZCx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3ZhciBhPU1hdGguZmxvb3IodGhpcy52aWRlby5jdXJyZW50VGltZSk7dGhpcy5DdShhKTtpZighdGhpcy5KYil7dmFyIGI9MkUzLGQ9NTA7dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbiYmKHRoaXMuY29uZi52aWV3YWJsZUltcHJlc3Npb24ucGVyY2VudCYmKGQ9dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi5wZXJjZW50KSx0aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnRpbWVNUyYmKGI9dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi50aW1lTVMpKTsKdGhpcy5KYj17ZWw6dGhpcy52aWRlbyxjYjpmdW5jdGlvbigpe3RoaXMuUmQ9ITA7ZS52KGsuYmksdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt0aGlzLnRyYWNrKCJ2aWV3YWJsZSIpfS5iaW5kKHRoaXMpLHRpbWVNUzpiLHBlcmNlbnQ6ZCxzdGFydFRpbWU6ITF9O2UuQ2UodGhpcy5KYil9ZD0iIjt0aGlzLmMuaGYmJihiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuR2gpKSYmKGQ9dGhpcy5jLmhmLWEsMDxkP2Q9dGhpcy5jb25mLnNraXBhYmxlQnV0dG9uLnJlcGxhY2UoIlt0aW1lXSIsZCk6KGQ9dGhpcy5jb25mLnNraXBCdXR0b24ucmVwbGFjZSgiW3RpbWVdIixkKSx0aGlzLklkfHwodGhpcy5JZD0hMCxiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3RoaXMudHJhY2soInNraXAiKTtlLnYoay5UZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuYy5yYj8odGhpcy5QYj10aGlzLlpjPSExLAp0aGlzLkVkKHRoaXMudmlkZW8pLHRoaXMuZWEucmVtb3ZlQ2hpbGQodGhpcy52aWRlbyksdGhpcy55YS5yZW1vdmVDaGlsZCh0aGlzLmVhKSx0aGlzLmNhcHRpb249dGhpcy5jb250cm9scz1udWxsLHRoaXMuSWQ9ITEsdGhpcy5iLldoKCksdGhpcy5jLm9yaWdpbi5PZSgpKTp0aGlzLlFhKCl9LmJpbmQodGhpcykpKSksYi5pbm5lckhUTUw9ZCk7dGhpcy5jYXB0aW9uJiYodGhpcy5jYXB0aW9uLmlubmVySFRNTD10aGlzLlhjLnJlcGxhY2UoIlt0aW1lXSIsZS55Zyh0aGlzLmMuZHVyYXRpb24tYSkpKTt0aGlzLlZjPSEwO3RoaXMudmlkZW8uY29udHJvbHM9ITF9fSxEaDpmdW5jdGlvbigpe3RoaXMudGM9ITA7dGhpcy55YT10aGlzLmIuRzt0aGlzLnlhLmlubmVySFRNTD0iIjt2YXIgYT05OTk5O3RoaXMuY29uZi56SW5kZXgmJihhPXRoaXMuY29uZi56SW5kZXgtMSk7dGhpcy55YS56SW5kZXg9YTthPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9iamVjdCIpO2Euc2V0QXR0cmlidXRlKCJkYXRhIiwKImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9ob21hZC1nbG9iYWwtY29uZmlncy5zY2huZWV2b25tb3JnZW4uY29tL2hvbWFkanNmbGFzaGRpc3BsYXkuc3dmIik7YS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Euc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7YS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpO2Euc2V0QXR0cmlidXRlKCJpZCIsImRpc3BtYWluIik7YS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJkaXNwbWFpbiIpO2Euc2V0QXR0cmlidXRlKCJzdHlsZSIsInZpc2liaWxpdHk6IHZpc2libGUiKTthLnNldEF0dHJpYnV0ZSgiRmxhc2hWYXJzIiwiZGF0YT0iK3RoaXMubnEoKSk7YS5pbm5lckhUTUw9JzxwYXJhbSBuYW1lPSJhbGxvd3NjcmlwdGFjY2VzcyIgdmFsdWU9ImFsd2F5cyI+PHBhcmFtIG5hbWU9ImFsbG93RnVsbFNjcmVlbiIgdmFsdWU9InRydWUiPjxwYXJhbSBuYW1lPSJiZ0NvbG9yIiB2YWx1ZT0iIzAwMDAwMCI+PHBhcmFtIG5hbWU9Im9wYXF1ZSIgdmFsdWU9ImRpcmVjdCI+JzsKdGhpcy5iLkY9YTt2YXIgYj10aGlzLmIuRixkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RoaXMuY29uZlsiaW5uZXJXYXJwcGVyLnN0eWxlIl0/ZC5zdHlsZT10aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdOmQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIjt0aGlzLmVhPXRoaXMueWEuYXBwZW5kQ2hpbGQoZCk7dGhpcy5iLkpjKCk7dGhpcy52aWRlbz10aGlzLmVhLmFwcGVuZENoaWxkKGIpO2I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO2Iuc3R5bGUudG9wPSIwcHgiO2Iuc3R5bGUud2lkdGg9dGhpcy55YS5vZmZzZXRXaWR0aCsicHgiO2Iuc3R5bGUuaGVpZ2h0PXRoaXMueWEub2Zmc2V0SGVpZ2h0KyJweCI7Yi5zdHlsZS5jdXJzb3I9InBvaW50ZXIiO2Iub25jbGljaz10aGlzLiRoLmJpbmQodGhpcyk7dGhpcy5lYS5hcHBlbmRDaGlsZChiKTt0aGlzLlpoKCk7dGhpcy53ZigpO3RoaXMub2U9c2V0SW50ZXJ2YWwodGhpcy5wby5iaW5kKHRoaXMpLAoxMDApO3JldHVybiBhfSxucTpmdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxiPXt9LGQ9MDtkPHRoaXMuYy5NLmxlbmd0aDtkKyspe3ZhciBjPWI9dGhpcy5jLk1bZF0sZTtlPWIudXJsO3ZhciBnPXRoaXMuTDtnLkthJiZnLmlzRW5hYmxlZCYmIWcuQ2MoKSYmKGU9Zy5sYShlKSxlPWUucHJvdG9jb2wrIjovLyIrZS5ob3N0KTtjLnVybD1lO2EucHVzaChiKX1yZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHttZWRpYWZpbGVzOmF9KSl9LHBvOmZ1bmN0aW9uKCl7dHJ5e3ZhciBhPXRoaXMudmlkZW8uZ2V0Rmxhc2hEaXNwbGF5U3RhdHVzKCk7dGhpcy52aWRlby5wYXVzZWQ9YS5wYXVzZWQ7YS50aW1lPj10aGlzLmMuZHVyYXRpb24/KGNsZWFySW50ZXJ2YWwodGhpcy5vZSksdGhpcy5QZCgpKTooMDxhLnRpbWUmJih0aGlzLnZpZGVvLmN1cnJlbnRUaW1lPWEudGltZSx0aGlzLnlmKCkpLCJlcnJvciI9PWEuc3RhdHVzJiYoY2xlYXJJbnRlcnZhbCh0aGlzLm9lKSwKdGhpcy5RZCgpKSx0aGlzLnZpZGVvLm11dGVkP3RoaXMudmlkZW8ubXV0ZSgpOnRoaXMudmlkZW8udW5tdXRlKCkpfWNhdGNoKGIpe319LFRoOmZ1bmN0aW9uKCl7dGhpcy5vaHx8KHRoaXMub2g9ITAsdGhpcy54Y3x8ZS50cmFjaygic3RhdHNfaGRfY2xvc2VkQmVmb3JlMXN0UXVhcnRpbGUiLCIiLCEwKSl9LEN1OmZ1bmN0aW9uKGEpe2UudihrLiRkLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSk7YT09dGhpcy5VaHx8dGhpcy5DYnx8KDA9PWEmJih0aGlzLnNiJiYod2luZG93LmNsZWFyVGltZW91dCh0aGlzLnNiKSx0aGlzLnNiPSExKSx0aGlzLlZlfHwoZS50cmFjaygic3RhdHNfaGRfaW1wcmVzc2lvbldpdGhPdXRSZXNvbHZlZFByb21pc2UiLCIiLCEwKSx0aGlzLnplPSEwKSx0aGlzLnRyYWNrKCJpbXByZXNzaW9uIiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsZnVuY3Rpb24oKXt0aGlzLlRoKCl9LmJpbmQodGhpcykpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLApmdW5jdGlvbigpe3RoaXMuVGgoKX0uYmluZCh0aGlzKSksdGhpcy50YyYmZS50cmFjaygic3RhdHNfaGRfYWRfaW1wcmVzc2lvbl9mbGFzaCIsIiIsITApLHRoaXMuQ2J8fGUudHJhY2soInN0YXRzX2hkX2FkX2ltcHJlc3Npb24iLCIiLCEwKSxlLlRhKCkmJmUudHJhY2soInN0YXRzX2hkX2FkX2ltcHJlc3Npb25fbW9iaWxlIiwiIiwhMCksdGhpcy50cmFjaygiY3JlYXRpdmVWaWV3IiksdGhpcy50cmFjaygic3RhcnQiKSxlLnYoay5QZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLGUudihrLlVmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSksdGhpcy50YyYmZS50cmFjaygicGxheWVkV2l0aEZsYXNoIiwiMTAzIikpLGE9PU1hdGguZmxvb3IodGhpcy5jLmR1cmF0aW9uLzQpJiYodGhpcy5MLnZjJiYoZS50cmFjaygicXVhcnRpbGUiLCJmaXJzdFF1YXJ0aWxlIiwhMCksdGhpcy54Yz0hMCksdGhpcy50cmFjaygiZmlyc3RRdWFydGlsZSIpLAplLnYoay5OZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKSxhPT1NYXRoLmZsb29yKHRoaXMuYy5kdXJhdGlvbi8yKSYmKHRoaXMuTC52YyYmZS50cmFjaygicXVhcnRpbGUiLCJtaWRwb2ludCIsITApLHRoaXMudHJhY2soIm1pZHBvaW50IiksZS52KGsuUmYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSksYT09TWF0aC5mbG9vcigzKnRoaXMuYy5kdXJhdGlvbi80KSYmKHRoaXMuTC52YyYmZS50cmFjaygicXVhcnRpbGUiLCJ0aGlyZFF1YXJ0aWxlIiwhMCksdGhpcy50cmFjaygidGhpcmRRdWFydGlsZSIpLGUudihrLlZmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpLHRoaXMuVWg9YSl9LHRyYWNrOmZ1bmN0aW9uKGEsYil7aWYoIXRoaXMuQ2Ipe3RyeXtpZih0aGlzLmVjW2FdPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHRoaXMuZWMuaW1wcmVzc2lvbiYmdGhpcy5lYy5jb21wbGV0ZSYmIXRoaXMucmYpe3RoaXMucmY9CiEwO3ZhciBkPXRoaXMuZWMuY29tcGxldGUtdGhpcy5lYy5pbXByZXNzaW9uLGM9InN0YXRzX2hkX3RpbWVkaWZmIjt0aGlzLkgmJihjKz0idnBhaWQiKTs1RTM+ZCYmKDEwPmQmJihkPTEwKSwwPmQmJihkPSJuZWdhdGl2ZSIpLGUudHJhY2soYyxkLCEwKSl9fWNhdGNoKGcpe31pZigibXV0ZSI9PWF8fCJ1bm11dGUiPT1hfHwicGF1c2UiPT1hfHwicmVzdW1lIj09YSl7aWYodGhpc1thKyJIYXNCZWVuVHJhY2tlZCJdKXJldHVybjt0aGlzW2ErIkhhc0JlZW5UcmFja2VkIl09ITB9ZD1bXTt0cnl7ZD10aGlzLnRxKHRoaXMuYy5PYSxhKX1jYXRjaChsKXtkPVtdfWZvcig7ZC5sZW5ndGg7KXRyeXt2YXIgbT1kLnBvcCgpOyJpbXByZXNzaW9uIj09YSYmKHRoaXMuZmU9ITApOyJpbXByZXNzaW9uIj09YSYmdGhpcy5KZC5pbXByZXNzaW9ucyYmZS5rcihtLnVybCx0aGlzLkpkLmltcHJlc3Npb25zKT90aGlzLkhlKG0udXJsLG0udHlwZSx7fSxmdW5jdGlvbihhKXt0cnl7dmFyIGI9YS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1VcmwiKTsKZS52KGsuYW4sdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHthZElkOnRoaXMuSmQuYWRJZCxpbXByZXNzaW9uVVJMOmJ9LHRoaXMuQygpKX1jYXRjaChkKXt9fS5iaW5kKHRoaXMpKTp0aGlzLkhlKG0udXJsLG0udHlwZSl9Y2F0Y2gocSl7fWlmKCFiKXRyeXt0aGlzLmMuT2E9dGhpcy5Ubyh0aGlzLmMuT2EsYSl9Y2F0Y2gocil7fX19LEhlOmZ1bmN0aW9uKGEsYixkLGMsZSl7YSYmInN0cmluZyI9PXR5cGVvZiBhJiZhLmxlbmd0aCYmKGI9dGhpcy5MLnphKGEpLGQmJmIuZG4oZCksY3x8KGM9dGhpcy5vZyksZXx8KGU9dGhpcy5vZyksdGhpcy5mbihhKSx0aGlzLkwuTGEoYixmdW5jdGlvbigpe3RoaXMueGgoYSk7YygpfS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7dGhpcy54aChhKTtlKCl9LmJpbmQodGhpcyksITEsITApKX0sZm46ZnVuY3Rpb24oYSl7dGhpcy5XYlthXT0ib3BlbiJ9LHhoOmZ1bmN0aW9uKGEpe3RoaXMuV2JbYV09ImNsb3NlZCJ9LEhvOmZ1bmN0aW9uKCl7dGhpcy5XYj0Ke319LCR0OmZ1bmN0aW9uKCl7dmFyIGE9MCxiO2ZvcihiIGluIHRoaXMuV2IpdGhpcy5XYi5oYXNPd25Qcm9wZXJ0eShiKSYmIm9wZW4iPT10aGlzLldiW2JdJiZhKys7cmV0dXJuIGF9LHRxOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhLnR5cGU9PWJ9KX0sVG86ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEudHlwZSE9PWJ9KX0sWHU6ZnVuY3Rpb24oKXt0aGlzLnZpZGVvLnN0eWxlJiYodGhpcy52aWRlby5zdHlsZS5jdXJzb3I9InBvaW50ZXIiLHRoaXMudmlkZW8ub25jbGljaz10aGlzLiRoLmJpbmQodGhpcykpfSwkaDpmdW5jdGlvbigpe2UuVGEoKSYmIm5vbmUiPT09dGhpcy5jb250cm9scy5zdHlsZS5kaXNwbGF5P3RoaXMuWWIoKTp0aGlzLmMuT2ImJihlLnYoay5pZyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMudHJhY2soImNsaWNrdHJhY2tpbmciKSwKIXRoaXMueGMmJmUuVGEoKSYmZS50cmFjaygic3RhdHNfaGRfY2xpY2t0aHJvdWdoQmVmb3JlMXN0UXVhcnRpbGUiLGUuYXEoKSwhMCksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT0iX3RvcCI7dGhpcy5MLiRjJiYoYT0iX2JsYW5rIik7dHJ5e3ZhciBiPXdpbmRvdy5vcGVuKCIiLGEpO2IuZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9IjxkaXY+PC9kaXY+IjtiLmRvY3VtZW50LmxvY2F0aW9uLmhyZWY9dGhpcy5jLk9ifWNhdGNoKGQpe3dpbmRvdy5vcGVuKHRoaXMuYy5PYixhKX19LmJpbmQodGhpcyksNTAwKSl9LFpoOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY2FwdGlvbil7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5jb25mWyJjYXB0aW9uLnN0eWxlIl0/YS5zdHlsZT10aGlzLmNvbmZbImNhcHRpb24uc3R5bGUiXTooYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUud2lkdGg9IjEwMCUiLGEuc3R5bGUuYmFja2dyb3VuZD0ibGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLDAsMCwwLjA1KSAwJSxyZ2JhKDAsMCwwLDAuMjUpIDEwMCUpIiwKYS5zdHlsZS5wYWRkaW5nPSIycHgiLGEuc3R5bGUuZm9udEZhbWlseT0iQXJpYWwsIFZlcmRhbmEiLGEuc3R5bGUuZm9udFNpemU9IjlweCIsYS5zdHlsZS5jb2xvcj0iI2ZmZmZmZiIsYS5zdHlsZS50ZXh0QWxpZ249ImNlbnRlciIsYS5zdHlsZS5ib3R0b209IjBweCIsYS5zdHlsZS5ib3hTaXppbmc9ImJvcmRlci1ib3giKTthLmlubmVySFRNTD10aGlzLlhjLnJlcGxhY2UoIlt0aW1lXSIsZS55ZygwKSk7dmFyIGI9dGhpcy5jb25mWyJjYXB0aW9uLmR1cmF0aW9uIl07dGhpcy5MLmFkJiYoYj10aGlzLkwuYWQpO2ImJndpbmRvdy5zZXRUaW1lb3V0KHRoaXMueGIuYmluZCh0aGlzKSwxRTMqYik7dGhpcy5jYXB0aW9uPXRoaXMuZWEuYXBwZW5kQ2hpbGQoYSl9fSx4YjpmdW5jdGlvbigpeyh0aGlzLmNvbmZbImNhcHRpb24uZHVyYXRpb24iXXx8dGhpcy5MLmFkKSYmdGhpcy5jYXB0aW9uJiZ0aGlzLmNhcHRpb24uc3R5bGUmJih0aGlzLmNhcHRpb24uc3R5bGUuZGlzcGxheT0ibm9uZSIpfSwKR2Q6ZnVuY3Rpb24oKXsodGhpcy5jb25mWyJjYXB0aW9uLmR1cmF0aW9uIl18fHRoaXMuTC5hZCkmJnRoaXMuY2FwdGlvbiYmdGhpcy5jYXB0aW9uLnN0eWxlJiYodGhpcy5jYXB0aW9uLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9LHdmOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmNvbnRyb2xzKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuaWQ9dGhpcy5Rbzt0aGlzLmNvbmZbImNvbnRyb2xzLnN0eWxlIl0/ZC5zdHlsZT10aGlzLmNvbmZbImNvbnRyb2xzLnN0eWxlIl06KGQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixkLnN0eWxlLndpZHRoPSIxMDAlIixkLnN0eWxlLmZvbnRGYW1pbHk9IkFyaWFsLCBWZXJkYW5hIixkLnN0eWxlLmNvbG9yPSIjZmZmZmZmIixkLnN0eWxlLnRleHRBbGlnbj0iY2VudGVyIixkLnN0eWxlLmJvdHRvbT0iMHB4IixkLnN0eWxlLnpJbmRleD0iMTAwMDAiKTtkLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsCmZ1bmN0aW9uKCl7dGhpcy5ZYigpO3RoaXMuR2QoKX0uYmluZCh0aGlzKSk7ZC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt0aGlzLnliKCk7dGhpcy54YigpfS5iaW5kKHRoaXMpKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbInBsYXlQYXVzZS5zdHlsZSJdP2Muc3R5bGU9dGhpcy5jb25mWyJwbGF5UGF1c2Uuc3R5bGUiXTooYy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZmxvYXQ6bGVmdCIpLGMuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixjLnN0eWxlWyJmbG9hdCJdPSJsZWZ0IixjLnN0eWxlLmN1cnNvcj0icG9pbnRlciIpO2MuaWQ9dGhpcy5EYjtjLmlubmVySFRNTD10aGlzLmNvbmYucGF1c2VCdXR0b247InZwYWlkIj09YT8oYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5RaC5iaW5kKHRoaXMpKSxiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLlFoLmJpbmQodGhpcykpKTooYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsCnRoaXMuUGguYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5QaC5iaW5kKHRoaXMpKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7dGhpcy5ZYigpO3RoaXMuR2QoKX0uYmluZCh0aGlzKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt0aGlzLnliKCk7dGhpcy54YigpfS5iaW5kKHRoaXMpKTt2YXIgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbIm11dGUuc3R5bGUiXT9nLnN0eWxlPXRoaXMuY29uZlsibXV0ZS5zdHlsZSJdOihnLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJmbG9hdDpyaWdodCIpLGcuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixnLnN0eWxlWyJmbG9hdCJdPSJyaWdodCIsZy5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTtnLmlkPXRoaXMuQmI7Zy5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b247InZwYWlkIj09YT9nLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwKdGhpcy5CdS5iaW5kKHRoaXMpKTpnLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLkF1LmJpbmQodGhpcykpO2cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe3RoaXMuWWIoKTt0aGlzLkdkKCl9LmJpbmQodGhpcykpO2cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7dGhpcy55YigpO3RoaXMueGIoKX0uYmluZCh0aGlzKSk7dmFyIGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5jb25mWyJza2lwLnN0eWxlIl0/bC5zdHlsZT10aGlzLmNvbmZbInNraXAuc3R5bGUiXToobC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwicG9zaXRpb246YWJzb2x1dGU7dG9wOi01MHB4O3JpZ2h0OjBweCIpLGwuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixsLnN0eWxlLnRvcD0iLTUwcHgiLGwuc3R5bGUucmlnaHQ9IjBweCIsbC5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTtsLmlkPXRoaXMuR2g7bC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLApmdW5jdGlvbigpe3ZhciBhPWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpO2EmJmFbMF0mJihhWzBdLnN0eWxlLm9wYWNpdHk9MSl9KTtsLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IixmdW5jdGlvbigpe3ZhciBhPWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpO2EmJmFbMF0mJihhWzBdLnN0eWxlLm9wYWNpdHk9LjYpfSk7bC5pbm5lckhUTUw9IiI7ZC5hcHBlbmRDaGlsZChjKTt0aGlzLmMuaGYmJmQuYXBwZW5kQ2hpbGQobCk7ZC5hcHBlbmRDaGlsZChnKTtkLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2UuVGEoKXx8KHRoaXMuZWEuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe3RoaXMuWWIoKTt0aGlzLkdkKCl9LmJpbmQodGhpcykpLHRoaXMuZWEuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7dGhpcy55YigpO3RoaXMueGIoKX0uYmluZCh0aGlzKSkpO3RoaXMuY29udHJvbHM9dGhpcy5lYS5hcHBlbmRDaGlsZChkKTsKdGhpcy5jb25mWyJyZXN1bWVDb250cm9sLnN0eWxlIl0/Yi5zdHlsZT10aGlzLmNvbmZbInJlc3VtZUNvbnRyb2wuc3R5bGUiXTooYi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGIuc3R5bGUud2lkdGg9IjEwMCUiLGIuc3R5bGUuZm9udEZhbWlseT0iQXJpYWwsIFZlcmRhbmEiLGIuc3R5bGUuY29sb3I9IiNmZmZmZmYiLGIuc3R5bGUudGV4dEFsaWduPSJjZW50ZXIiLGIuc3R5bGUuYm90dG9tPSIwcHgiLGIuc3R5bGUuekluZGV4PSIxMDAwMCIsYi5zdHlsZS5kaXNwbGF5PSJub25lIixkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpLGQub25lcnJvcj1mdW5jdGlvbigpe3RoaXMud2EmJih0aGlzLndhLnN0eWxlLmJhY2tncm91bmQ9InVybCgnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9iaWdwbGF5MTkwNjA2LnBuZycpIG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIil9LmJpbmQodGhpcyksZC5zcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSGdBQUFCNENBWUFBQUE1WkRiU0FBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeWhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVOaTFqTVRRMUlEYzVMakUyTXpRNU9Td2dNakF4T0M4d09DOHhNeTB4TmpvME1Eb3lNaUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01Ua2dLRTFoWTJsdWRHOXphQ2tpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2T0Rnd01VWTVOa1kzUmpsQ01URkZPVGt3UmpnNVJUZ3pSRFU0T0RRME1qVWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZPRGd3TVVZNU56QTNSamxDTVRGRk9Ua3dSamc1UlRnelJEVTRPRFEwTWpVaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzRPREF4UmprMlJEZEdPVUl4TVVVNU9UQkdPRGxGT0RORU5UZzRORFF5TlNJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvNE9EQXhSamsyUlRkR09VSXhNVVU1T1RCR09EbEZPRE5FTlRnNE5EUXlOU0l2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHZWN29SSUFBQXlyU1VSQlZIamE3RjBKYkZUWEZiMkRiY0JBS1FHTXpXNldRRnBTS2lyV1FnZ3BVSUhiaEpLMHFnMUdrQWdvUXFsRTFRcXpTRWhJN0dEUzRyS0pGZ3pZMkdyQllJc0NqVkFOaENXaHhSVENXb1BManNHQU1hRUdZd3k5NTgzNzFqRE1qR2ZHZitiL1AvOGQ2V2p3T0JuL2Q4KzhlOSs5YjNQMDd0MmI5SVRENGZENXM3ZjNkRUEwZjI0YmZ1M0tiTXVNWStMbk41ak5tQTBsWHpDcm1OWE1TbVk1OHk2empIbWJXZkx5NVV2OC9GenZCK1RQcmZNOVQvOU52WXhDMXNWYlRIdzdCekM3NDk5c0hJamF0SjZmK3o4cDl0Zk1ZdVpYek5QTUMxWTBrcFVFUnE4Y3hoekJITXpzR2FLLzAxUXkwZTM5aTh3anpQM01BN0szSzRIcmlRVG0rOHlmTWQ5anhocjRMRDBsUDJFK1lSWXk4NWtGekZLekd0QmgwaGljeEp6QS9JRFp4T1Jmd2tvcGNoYnpiMmFMd1ExTVpDajB6c25NSW1tb1pBdUlTL0laOGF5NzViTlBOdGpUbUU1Z0dHTW1ScS9NRGN3K0ZoNzQ5WkZ0S0pGdGlyVzd3SjlLWXl5VjhUWlNrQ0RiVkNMYmFEdUJrNlE3eTRnd1lUMEpuU0hibW1TSFVUUWFuTTREaVhGa0wvU1I0NHB0ek4rR2M5UWR6aDQ4aVhtT2FUZHhYVEZPMm1CU0pBbjhMZVpXNWlaeWxnM3RqamVrTGJaSzIxamFSUTltZDV6TnI1MlZycThobGZtT2ZEMXN4Ujc4Sy9uZ1NsenZnRzIra0xheWxNQ2ZNZGNwL2Z6R09ta3pTd2k4blRsRGFSWXdaa2pibVRZR1J6SDNjOHdkcHJRS0doK1JjNlpxT0xQR1REMFlFK25IeURtZHAxQS92Q3R0MlZDWEhsemYyUXVIdzRHZWkzblN2a29iM2RCUDJuUWc2MU5qZEE4dVZPS0dCSDJsYlEyTndYbjhEWHRIYVJFeXdMWjV6QStONk1HL1o0NVZHb1FjWTZXdGd4djV0bW5USnBpNGkyVXJpNVR0dzRhQnpKdnNMWXZDNGFLL3ozL296OHJtWVFjV0VweGduZ3lsaThiUS9lL0sxb1poYjZEcFU2QUNZejR6WHRuWk1NUkxEVUlpY0FvNUt5MEt4dUlqcVlXdUFuK2J1Vm5aMWpUWUxEWFJUV0I4WUl5eXEya1E0MitIODBkZzdDZ1lvMnhxT295UjJ0UmI0STFHdGlJcUtvb2VQWHBFang4L3BnWU5HaWhaQTlRbUtpNHV6dGZ2c2RJZzFjZ1dWRlZWVWRldVhlbjU4K2RVWEZ4TUxWcTBFRUxydmNYRG9taEJ6aFdhSjRMcHdaZ2xXbVowQzY1ZXZVb1RKMDZrL1B4OEdqVnFGRjI2ZElsdTNib2xSQTdSUG1PcllRblRFWXpBdjJFMk4vcnBhMnBxcUtLaWdoSVRFeWt2TDQrMmJ0MUszYnAxbzNQbnp0SERodytGQzFlOTJQc0tHbTh1R3NKam9YWmpvNS8rd1lNSE5HTEVDQm80Y0tENHVWZXZYcFNhbWtyTm1qV2preWRQMHVYTGw4Vy9HelpzU0M5ZXZMQ3J5RERPY3VaTGYzdnd4LzdtV1VZZ05qYVcwdExTcUxDd2tLWk9uVXJsNWVYQ2RTTXUyM1FnQnEwbUJlS2kwNnpRcXM2ZE85UHExYXRwOSs3ZE5IcjBhTkdiYlJ5ZjAvd1ZlQ2p6VFN1MWJOQ2dRYlJqeHc3YXVIR2ppTTluejU2MVkzeCtVMnIzcXNCd2EyNzgxTU43aHRKZmpCOC9uZzRkT2tSTGxpd1I0cDQ1YzRhZVBuMWFtMWJaZ0s5cDU5NkRNV3EyOUNxTnhvMGIwOHlaTStuZ3dZTTBiZG8wdW52M3JwM2k4MWozek1lOXhUOG5heCt0VkF1a1ZXdldyS0c5ZS9mUzhPSERSWkhFQnZFNVdtcm8xVVVubTlYOUJJc2hRNGFJUWRqbXpadHI0ek5HM1ZwdmprQTNuZUxOUldOYjQvQkkvV29qUGg4NWNvUVdMRmhBMGRIUlFtZ3RQa2NZM3BQRmo5ZGM5SS9KWEtmdTZBNFVRK2JPblNzR1l0T25UNmQ3OSs2SitJd0NTUVFKSGVYYVVkMEZ0Z1VRbjVFLzc5bXpKMUx6NTFHZUJIN1hicFVCeE9kZHUzWlJWbGFXbUxHS29QcjJqOXdGeGdtdDNjaW1TRTVPcHNPSEQ5T2lSWXNvSmlhR3pwOC9MNllwTGV5MmEvWFVXakNBYkE3VXQyZlBuaTN5NXlsVHBvajRYRkpTWXVYOGVZQ3J3RDhnaGRyNHZHN2RPcEZhalJ3NTBzcnh1WTlySHZ5MldmTTZvNllBaHc0ZFNnVUZCYUsrcmNWbkxYKzJTRDc4dHBZSDQydlpVL1ZkejVnd1lZS0l6NHNYTHhhREx3aU4rR3lCZ1JnMGRVRGdkc3lPU2tyZjhYbldyRmtpUG1QK3VheXN6QXIxYldqYURpNDZrUmx0ZHBkakJxRFV1WDc5ZXRxM2IxOXRmZnZtelp1MXNkbGtOb09taVZvUFZnZ3dmMGFSWk11V0xXSlFkdUhDQlpFL203QTN0OE1UeFNuSmdnUFdoaDAvZnB6bXo1OHY2dHNRMm1UeE9RNEN0MVJTQlk5R2pSclJ2SG56UkgwYjg4OWFmZHNrOGJrbFluQXJGWHQxS0IxeEtyVjI3VnJodXJFSzFDVHh1UlcrWXMxVlA5UTNmNGJJMmRuWllsQjI4ZUpGSSt2YnpTRndJeVdML2hnM2JweVlmMTY0Y0tHb2J5TStQM3YyTE54Q040TEFhbHRvaU5Da1NST2FNMmVPS0pSTW5qeFp2SWRGQm1GRURBUitvYVFJTFpCS2JkaXdRU3cydUgvL3Z0aU9FeTVna1ZhVmtpQzBRSy9GQW9QdDI3Zlg3bzRNRTZvaDhETWxRZWlRbTV0THk1Y3ZwNktpSXNLWlpLMWF0UkpiWWNPRUtwU3pucGpkU0ZiY0M2eE5VR0JFM2JScFUrclJvNGRvUjNWMWRUZ2Y0eHYwNEllcW4rbUhhOWV1MGRLbFM4VXkzY3JLU3BFZm84cGwwTFJuQlFRdVU3TFVIMGlCVnF4WUlZb2ROMjdjb0E0ZE9naGlRR1hndHRaN0VQaU9rcWQrd0tiMDlQUjBPblhxRkxWdTNWcTRZNGdhenRHeUY1UWlCdDlTRWdVZloxSEl3UFFoY3Q3dTNidUw5MDBncklaYjZNRlh5SGxmZmJTU3pEOWN1WEpGREtBd1hZZ1VxRXVYTGtiR1dXK0FwbGNoNmsyTURjaTUxRktoamppN2N1VktXclZxRmQyK2ZWdkVXUFJjZytPc04xeUh0bHJHL1I4bG4yOWc4Z0RuaEdCcExZUkduTVZVb1luY3NUc3VJc1BVTHVVNFN5N2JIVlFlN0RtZnhkNWp4Rms4VHhpTEZjRUNtdGJHM1JPcWo3NEtuTStseGRrblQ1NkllcklKNDZ3dm5IQVYrQ3NscVJNWU5DSE9vbmFNQmUvdDI3YzNjNXoxaGVPdUFwZXcyN2xNTnQ2ZkJHemJ0azFVb1U2ZlBrMHRXN1lVN2hpaVdzQWR1NlBFNFhCY0ZnSzd4TGVEZGhYNDZOR2pJcDlGbk1YQUNTc3hZQmNURDZEcXdnRk5WOWZjOTNQbUozWVM5dnIxNnlMT2J0cTBTYmhtbkx0bHNUanJEWjlyLzNEdHdYZ1RYMW5UN2NuUWV4UU5sN3RzMlRMS3lNaWcwdEpTU2toSUVETStKaWt2MWhjMXJnSzd6anlYa3c1WHFaa2RPVGs1MUxkdlg3RzZBcU5qdUdPa1B4QTJRbzRvTHBSYXZ1YWlnVnptaUVnVTFyVnVqRVZ3S0MrS3I3djFleXg1MEpDOENmeFhjdDVHSFRGMWFlU3pPRmtuTXpOVHVPWk9uVHBGU3B6MUdIMmtobDRGZnNUY3lmeUYxVnVxemMraWJuem56cDNhT0d2QmZEWVE3Sklha3FjWXJPR1BWbThsNnNiOSt2VVRjUmFqWTljNEcrSEljSC9Ea3lzK3hDd21pNTA0Q3h3N2RreTRZK1N6aUxOWUxtUHhmRFlRRkV2dDZoUVlXTXI4azFWYWhuVlFPQ0ZIcXh0SGVKejFCby8zYTNpNzRqMlRtVTRtUHZVZHdGWk5iWDRXK1d4OGZEeTFiZHMyVXZMWlFGREIzT1RwRncxOEpNc0xUSjBMNU9aUy8vNzl4ZFlRYmZWaWhPV3pnV0MrMU14dmdZSFAzRWRrUnNIVjFXSkRWMUpTRXFXa3BJZ0R5NURQWW1MQVpqM1dGVmoyN1BXR2NGLzVMaXcyVStiRmhxSmp4NDVpTkR4anhneHhyQkVXaitNOUc4WlpUNWhGSG01YjBlREFnS1FPL0plWmFOVFR3LzNpVGdaczJzS3NENjRCd2pVNk51NnhycmhhbHpiK0NJenpoLzloVkF2UVN6R0FBakNJUW85VjE5clZBb2VPK3B3LzhHZWJHejRnMzZnV29MeUl4ZVNnVFFkUTNwQlBma3dPK2J1UGNTS3pXdG5VTklBV2svenlnSDcyaUFvcDhqWmxXMU5nRXZtNWFUQ1FuY2c1ekR4bFc4T1JGMGhIQzNTcmVRcXB6V3BHNG83VXdQOUJhb0IvNEJtNzlOSDhXcVJzYlFpU0hBNUhRQ2N5UkRWdkh2QXhXY2hac0NQeGZXWHZzR0lxT2EvOHBWQUxUTElINDU2bGdjcnVZY0VmbUl1QytSL3JjOXdMYnAzZXFXd2ZjdXdrSHpkOGgxSmc0RVBtRjBxRGtPR3d0REVaSlRDQVV1YS9sQmE2QTV2SGh0WDNRL1FRR0ZYL3djeC9LazEwQTJ6NVEvSXl4eHR1Z1VYNnhCeEV6djFOQ3ZYRFFXbExYUTZvQzNZVTdRbWNJci9NNU5mdk1uc3BuWUxDWDVnLzVWeFh0eG1WVUJ5YStFdHlydWRTQ0F6cDBuYTZJbFNuWXY1T0p1WUsvbUdxdEpudUNPVVdsUTNzc3I4bTUxNlp6a3BEajhDS2pHUjJ5VitHNmcrRStseGJQUGozbU5sS3k5ZVFMVzN6WlNqL1NEZ09MdjZHbWNyOG1GeTJOZG9ZNWRJV3FkSTJaSFdCTldUSzBYV09qY1hOa1RiSUROY2YxRE5OOGdlUE9TN3ZJR2ZsNnp2TXRqWVI5dDlNWE5xd2hPUHRZL2RmdWw5YnErYzF0a2JkM0lScEw5eFovR3R5VGo5R0trcGxHL3RRRUZOOVZoWllBN2FxNG1TZnRBZ1R1bFMycVJzWnZCM1hnUU0xOVlMN0FqNVBDL3A4TFBLTDVkK041OWZwOGh0dlJaeGtybVVYbThXdkhxOUs4T1IrUSttaXpTU3c2KzkrSWtlWkh6Q2JtRnpVU21ZQk0wdHp3NzRFVWdLL2lnUXA4aGh5VGt2R21rUlU5RTV0UTBDQmUzaFJBdnN2c0NzdzRoNUd6bE9BTUQwWjdtdnBjVHp2RWVaKzVnSG03VUJFVkFKVHdBZWV2Y1hzVGM1MVlUaExIMVdoTmpxNGRMamN1MHlVV1MrUnM5SjBtbm5CYjZNcWdYVVIyQjNSVXVDdXNyZmo0dXQ0Wmd0bU0zSmV3cW5kMDRpdEg3anhEVGtwZGdoZ3ZYR1o3SlVsVXVDZ1R5QTFrOEQvRjJBQUU4YkJqOGQ0ZEM0QUFBQUFTVVZPUks1Q1lJST0iLApiLnN0eWxlLmJhY2tncm91bmQ9InVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFIZ0FBQUI0Q0FZQUFBQTVaRGJTQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5aHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU5pMWpNVFExSURjNUxqRTJNelE1T1N3Z01qQXhPQzh3T0M4eE15MHhOam8wTURveU1pQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTkRJREl3TVRrZ0tFMWhZMmx1ZEc5emFDa2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZPRGd3TVVZNU5rWTNSamxDTVRGRk9Ua3dSamc1UlRnelJEVTRPRFEwTWpVaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk9EZ3dNVVk1TnpBM1JqbENNVEZGT1Rrd1JqZzVSVGd6UkRVNE9EUTBNalVpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvNE9EQXhSamsyUkRkR09VSXhNVVU1T1RCR09EbEZPRE5FTlRnNE5EUXlOU0lnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG80T0RBeFJqazJSVGRHT1VJeE1VVTVPVEJHT0RsRk9ETkVOVGc0TkRReU5TSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QdlY3b1JJQUFBeXJTVVJCVkhqYTdGMEpiRlRYRmIyRGJjQkFLUUdNelc2V1FGcFNLaXJXUWdncFVJSGJoSkswcWcxR2tBZ29RcWxFMVFxelNFaEk3R0RTNHJLSkZnelkyR3JCWUlzQ2pWQU5oQ1doeFJUQ1dvUExqc0dBTWFFR1l3eTk1ODM3MWpETWpHZkdmK2IvUC84ZDZXandPQm4vZDgrOGU5KzliM1AwN3QyYjlJVEQ0ZkQ1czdmM2RFQTBmMjRiZnUzS2JNdU1ZK0xuTjVqTm1BMGxYekNybU5YTVNtWTU4eTZ6akhtYldmTHk1VXY4L0Z6dkIrVFByZk05VC85TnZZeEMxc1ZiVEh3N0J6Qzc0OTlzSElqYXRKNmYrejhwOXRmTVl1Wlh6TlBNQzFZMGtwVUVScThjeGh6QkhNenNHYUsvMDFReTBlMzlpOHdqelAzTUE3SzNLNEhyaVFUbSs4eWZNZDlqeGhyNExEMGxQMkUrWVJZeTg1a0Z6Rkt6R3RCaDBoaWN4SnpBL0lEWnhPUmZ3a29wY2hiemIyYUx3UTFNWkNqMHpzbk1JbW1vWkF1SVMvSVo4YXk3NWJOUE50alRtRTVnR0dNbVJxL01EY3crRmg3NDlaRnRLSkZ0aXJXN3dKOUtZeXlWOFRaU2tDRGJWQ0xiYUR1Qms2UTd5NGd3WVQwSm5TSGJtbVNIVVRRYW5NNERpWEZrTC9TUjQ0cHR6TitHYzlRZHpoNDhpWG1PYVRkeFhURk8ybUJTSkFuOExlWlc1aVp5bGczdGpqZWtMYlpLMjFqYVJROW1kNXpOcjUyVnJxOGhsZm1PZkQxc3hSNzhLL25nU2x6dmdHMitrTGF5bE1DZk1kY3AvZnpHT21relN3aThuVGxEYVJZd1pramJtVFlHUnpIM2M4d2RwclFLR2grUmM2WnFPTFBHVEQwWUUrbkh5RG1kcDFBL3ZDdHQyVkNYSGx6ZjJRdUh3NEdlaTNuU3Zrb2IzZEJQMm5RZzYxTmpkQTh1Vk9LR0JIMmxiUTJOd1huOERYdEhhUkV5d0xaNXpBK042TUcvWjQ1VkdvUWNZNld0Z3h2NXRtblRKcGk0aTJVcmk1VHR3NGFCekp2c0xZdkM0YUsvejMvb3o4cm1ZUWNXRXB4Z25neWxpOGJRL2UvSzFvWmhiNkRwVTZBQ1l6NHpYdG5aTU1STERVSWljQW81S3kwS3h1SWpxWVd1QW4rYnVWbloxalRZTERYUlRXQjhZSXl5cTJrUTQyK0g4MGRnN0NnWW8yeHFPb3lSMnRSYjRJMUd0aUlxS29vZVBYcEVqeDgvcGdZTkdpaFpBOVFtS2k0dXp0ZnZzZElnMWNnV1ZGVlZVZGV1WGVuNTgrZFVYRnhNTFZxMEVFTHJ2Y1hEb21oQnpoV2FKNExwd1pnbFdtWjBDNjVldlVvVEowNmsvUHg4R2pWcUZGMjZkSWx1M2JvbFJBN1JQbU9yWVFuVEVZekF2MkUyTi9ycGEycHFxS0tpZ2hJVEV5a3ZMNCsyYnQxSzNicDFvM1BuenRIRGh3K0ZDMWU5MlBzS0dtOHVHc0pqb1haam81Lyt3WU1ITkdMRUNCbzRjS0Q0dVZldlhwU2Fta3JObWpXamt5ZFAwdVhMbDhXL0d6WnNTQzlldkxDcnlERE9jdVpMZjN2d3gvN21XVVlnTmphVzB0TFNxTEN3a0taT25Vcmw1ZVhDZFNNdTIzUWdCcTBtQmVLaTA2elFxczZkTzlQcTFhdHA5KzdkTkhyMGFOR2JiUnlmMC93VmVDanpUU3UxYk5DZ1FiUmp4dzdhdUhHamlNOW56NTYxWTN4K1UycjNxc0J3YTI3ODFNTjdodEpmakI4L25nNGRPa1JMbGl3UjRwNDVjNGFlUG4xYW0xYlpnSzlwNTk2RE1XcTI5Q3FOeG8wYjA4eVpNK25nd1lNMGJkbzB1bnYzcnAzaTgxajN6TWU5eFQ4bmF4K3RWQXVrVld2V3JLRzllL2ZTOE9IRFJaSEVCdkU1V21ybzFVVW5tOVg5QklzaFE0YUlRZGptelp0cjR6TkczVnB2amtBM25lTE5SV05iNC9CSS9Xb2pQaDg1Y29RV0xGaEEwZEhSUW1ndFBrY1kzcFBGajlkYzlJL0pYS2Z1NkE0VVErYk9uU3NHWXRPblQ2ZDc5KzZKK0l3Q1NRUUpIZVhhVWQwRnRnVVFuNUUvNzltekoxTHo1MUdlQkg3WGJwVUJ4T2RkdTNaUlZsYVdtTEdLb1ByMmo5d0Z4Z210M2NpbVNFNU9wc09IRDlPaVJZc29KaWFHenA4L0w2WXBMZXkyYS9YVVdqQ0FiQTdVdDJmUG5pM3k1eWxUcG9qNFhGSlNZdVg4ZVlDcndEOGdoZHI0dkc3ZE9wRmFqUnc1MHNyeHVZOXJIdnkyV2ZNNm82WUFodzRkU2dVRkJhSytyY1ZuTFgrMlNENzh0cFlINDJ2WlUvVmR6NWd3WVlLSXo0c1hMeGFETHdpTitHeUJnUmcwZFVEZ2RzeU9Ta3JmOFhuV3JGa2lQbVArdWF5c3pBcjFiV2phRGk0NmtSbHRkcGRqQnFEVXVYNzlldHEzYjE5dGZmdm16WnUxc2Rsa05vT21pVm9QVmdnd2YwYVJaTXVXTFdKUWR1SENCWkUvbTdBM3Q4TVR4U25KZ2dQV2hoMC9mcHptejU4djZ0c1EybVR4T1E0Q3QxUlNCWTlHalJyUnZIbnpSSDBiODg5YWZkc2s4YmtsWW5BckZYdDFLQjF4S3JWMjdWcmh1ckVLMUNUeHVSVytZczFWUDlRM2Y0YkkyZG5aWWxCMjhlSkZJK3ZielNGd0l5V0wvaGczYnB5WWYxNjRjS0dvYnlNK1AzdjJMTnhDTjRMQWFsdG9pTkNrU1JPYU0yZU9LSlJNbmp4WnZJZEZCbUZFREFSK29hUUlMWkJLYmRpd1FTdzJ1SC8vdnRpT0V5NWdrVmFWa2lDMFFLL0ZBb1B0MjdmWDdvNE1FNm9oOERNbFFlaVFtNXRMeTVjdnA2S2lJc0taWksxYXRSSmJZY09FS3BTem5wamRTRmJjQzZ4TlVHQkUzYlJwVStyUm80ZG9SM1YxZFRnZjR4djA0SWVxbittSGE5ZXUwZEtsUzhVeTNjcktTcEVmbzhwbDBMUm5CUVF1VTdMVUgwaUJWcXhZSVlvZE4yN2NvQTRkT2doaVFHWGd0dFo3RVBpT2txZCt3S2IwOVBSME9uWHFGTFZ1M1ZxNFk0Z2F6dEd5RjVRaUJ0OVNFZ1VmWjFISXdQUWhjdDd1M2J1TDkwMGdySVpiNk1GWHlIbGZmYlNTekQ5Y3VYSkZES0F3WFlnVXFFdVhMa2JHV1crQXBsY2g2azJNRGNpNTFGS2hqamk3Y3VWS1dyVnFGZDIrZlZ2RVdQUmNnK09zTjF5SHRsckcvUjhsbjI5ZzhnRG5oR0JwTFlSR25NVlVvWW5jc1RzdUlzUFVMdVU0U3k3YkhWUWU3RG1meGQ1anhGazhUeGlMRmNFQ210YkczUk9xajc0S25NK2x4ZGtuVDU2SWVySUo0Nnd2bkhBVitDc2xxUk1ZTkNIT29uYU1CZS90MjdjM2M1ejFoZU91QXBldzI3bE1OdDZmQkd6YnRrMVVvVTZmUGswdFc3WVU3aGlpV3NBZHU2UEU0WEJjRmdLN3hMZURkaFg0Nk5HaklwOUZuTVhBQ1NzeFlCY1RENkRxd2dGTlY5ZmM5M1BtSjNZUzl2cjE2eUxPYnRxMFNiaG1uTHRsc1RqckRaOXIvM0R0d1hnVFgxblQ3Y25RZXhRTmw3dHMyVExLeU1pZzB0SlNTa2hJRURNK0ppa3YxaGMxcmdLN3pqeVhrdzVYcVprZE9UazUxTGR2WDdHNkFxTmp1R09rUHhBMlFvNG9McFJhdnVhaWdWem1pRWdVMXJWdWpFVndLQytLcjd2MWV5eDUwSkM4Q2Z4WGN0NUdIVEYxYWVTek9Ga25Nek5UdU9aT25UcEZTcHoxR0gya2hsNEZmc1RjeWZ5RjFWdXF6YytpYm56bnpwM2FPR3ZCZkRZUTdKSWFrcWNZck9HUFZtOGw2c2I5K3ZVVGNSYWpZOWM0RytISWNIL0RreXMreEN3bWk1MDRDeHc3ZGt5NFkrU3ppTE5ZTG1QeGZEWVFGRXZ0NmhRWVdNcjhrMVZhaG5WUU9DRkhxeHRIZUp6MUJvLzNhM2k3NGoyVG1VNG1QdlVkd0ZaTmJYNFcrV3g4ZkR5MWJkczJVdkxaUUZEQjNPVHBGdzE4Sk1zTFRKMEw1T1pTLy83OXhkWVFiZlZpaE9XemdXQysxTXh2Z1lIUDNFZGtSc0hWMVdKRFYxSlNFcVdrcElnRHk1RFBZbUxBWmozV0ZWajI3UFdHY0YvNUxpdzJVK2JGaHFKang0NWlORHhqeGd4eHJCRVdqK005RzhaWlQ1aEZIbTViMGVEQWdLUU8vSmVaYU5UVHcvM2lUZ1pzMnNLc0Q2NEJ3alU2TnU2eHJyaGFsemIrQ0l6emgvOWhWQXZRU3pHQUFqQ0lRbzlWMTlyVkFvZU8rcHcvOEdlYkd6NGczNmdXb0x5SXhlU2dUUWRRM3BCUGZrd08rYnVQY1NLeld0blVOSUFXay96eWdINzJpQW9wOGpabFcxTmdFdm01YVRDUW5jZzV6RHhsVzhPUkYwaEhDM1NyZVFxcHpXcEc0bzdVd1A5QmFvQi80Qm03OU5IOFdxUnNiUWlTSEE1SFFDY3lSRFZ2SHZBeFdjaFpzQ1B4ZldYdnNHSXFPYS84cFZBTFRMSUg0NTZsZ2NydVljRWZtSXVDK1IvcmM5d0xicDNlcVd3ZmN1d2tIemQ4aDFKZzRFUG1GMHFEa09Hd3RERVpKVENBVXVhL2xCYTZBNXZIaHRYM1EvUVFHRlgvd2N4L0trMTBBMno1US9JeXh4dHVnVVg2eEJ4RXp2MU5DdlhEUVdsTFhRNm9DM1lVN1FtY0lyL001TmZ2TW5zcG5ZTENYNWcvNVZ4WHR4bVZVQnlhK0V0eXJ1ZFNDQXpwMG5hNklsU25ZdjVPSnVZSy9tR3F0Sm51Q09VV2xRM3NzcjhtNTE2WnprcERqOENLakdSMnlWK0c2ZytFK2x4YlBQajNtTmxLeTllUUxXM3paU2ovU0RnT0x2NkdtY3I4bUZ5Mk5kb1k1ZElXcWRJMlpIV0JOV1RLMFhXT2pjWE5rVGJJRE5jZjFETk44Z2VQT1M3dklHZmw2enZNdGpZUjl0OU1YTnF3aE9QdFkvZGZ1bDlicStjMXRrYmQzSVJwTDl4Wi9HdHlUajlHS2twbEcvdFFFRk45VmhaWUE3YXE0bVNmdEFnVHVsUzJxUnNadkIzWGdRTTE5WUw3QWo1UEMvcDhMUEtMNWQrTjU5ZnA4aHR2Ulp4a3JtVVhtOFd2SHE5SzhPUitRK21pelNTdzYrOStJa2VaSHpDYm1GelVTbVlCTTB0enc3NEVVZ0svaWdRcDhoaHlUa3ZHbWtSVTlFNXRRMENCZTNoUkF2c3ZzQ3N3NGg1R3psT0FNRDBaN212cGNUenZFZVorNWdIbTdVQkVWQUpUd0FlZXZjWHNUYzUxWVRoTEgxV2hOanE0ZExqY3UweVVXUytSczlKMG1ubkJiNk1xZ1hVUjJCM1JVdUN1c3JmajR1dDRaZ3RtTTNKZXdxbmQwNGl0SDdqeERUa3BkZ2hndlhHWjdKVWxVdUNnVHlBMWs4RC9GMkFBRThiQmo4ZDRkQzRBQUFBQVNVVk9SSzVDWUlJPScpIG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIiwKYi5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTt0aGlzLndhPXRoaXMuZWEuYXBwZW5kQ2hpbGQoYik7dGhpcy5iLllmKGZ1bmN0aW9uKGEpe3RoaXMud2Euc3R5bGUuaGVpZ2h0PWEuaGVpZ2h0KyJweCJ9LmJpbmQodGhpcykpOyJ2cGFpZCIhPWEmJnRoaXMuYi5mLnZhJiZ0aGlzLmIuZi52YSgpJiYoZS52KGsuamcsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSx0aGlzLk5lKCkpO3RoaXMueWIoKX19LHliOmZ1bmN0aW9uKCl7dGhpcy5jb250cm9scy5zdHlsZS5kaXNwbGF5PSJub25lIn0sWWI6ZnVuY3Rpb24oKXt0aGlzLndhJiYiYmxvY2siPT10aGlzLndhLnN0eWxlLmRpc3BsYXl8fHRoaXMuQWZ8fCh0aGlzLmNvbnRyb2xzLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9LFBoOmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy5iLkYucGF1c2VkPyh0aGlzLmIuRi5wbGF5KCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uLAp0aGlzLnRyYWNrKCJyZXN1bWUiLCEwKSxlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSk6KHRoaXMuYi5GLnBhdXNlKCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24sdGhpcy50cmFjaygicGF1c2UiLCEwKSxlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnliKCksdGhpcy54YigpKSl9LFFoOmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy5nYz8oZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJwbGF5IiksdGhpcy53YSYmKHRoaXMud2Euc3R5bGUuZGlzcGxheT0ibm9uZSIpLGEmJihhLmlubmVySFRNTD10aGlzLmNvbmYucGF1c2VCdXR0b24pLHRoaXMuZ2M9ITEpOihlLm1hKHRoaXMuSCwiY29udHJvbCIsCiJwYXVzZSIpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnliKCksdGhpcy54YigpKSxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24pLHRoaXMuZ2M9ITApfSx6ZDpmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRGIpO3RoaXMuYi5GLnBhdXNlZHx8KHRoaXMuYi5GLnBhdXNlKCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24sdGhpcy50cmFjaygicGF1c2UiLCEwKSxlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKX0semg6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRiKTt0aGlzLmIuRi5wYXVzZWQmJih0aGlzLmIuRi5wbGF5KCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uLHRoaXMudHJhY2soInJlc3VtZSIsITApLGUudihrLlVjLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSwKdGhpcy5DKCkpKX0sQXU6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkJiKTt0aGlzLmIuRi5tdXRlZD8odGhpcy5iLkYubXV0ZWQ9ITEsYS5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b24sdGhpcy50cmFjaygidW5tdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfdW5tdXRlZCIsInVzZXIiLCEwKSxlLnYoay50Zix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKToodGhpcy5iLkYubXV0ZWQ9ITAsYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJ1c2VyIiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSl9LEJ1OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYik7dGhpcy5wYj8oZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJ1bm11dGUiKSwKdGhpcy5wYj0hMSxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b24pKTooZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJtdXRlIiksdGhpcy5wYj0hMCxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbikpfSxOZTpmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuQmIpO3RoaXMuYi5GLm11dGVkfHwodGhpcy5iLkYubXV0ZWQ9ITAsYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJjb250ZW50IiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSl9LEx1OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYik7dGhpcy5iLkYubXV0ZWQmJih0aGlzLmIuRi5tdXRlZD0hMSxhLmlubmVySFRNTD10aGlzLmNvbmYubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJ1bm11dGUiLAohMCksZS50cmFjaygic3RhdHNfaGRfdW5tdXRlZCIsImNvbnRlbnQiLCEwKSxlLnYoay50Zix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKX0sWGI6ZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5YYik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5YYik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuWGIpO3RoaXMuamR8fHRoaXMuVmN8fCh0aGlzLnZpZGVvLmxvYWQoKSx0aGlzLmtmKCkpfSxoZDpmdW5jdGlvbigpe3ZhciBhPSExLGI9bC5nZXRDb25maWcoKTsic3ZtcHJldmlldyI9PWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZikuYW5jaG9yJiYoYT0hMCxiLmFkRmFsbGJhY2tVUkx8fChiLmFkRmFsbGJhY2tVUkw9Imh0dHBzOi8vaGdjLWNmLWNhY2hlLTEuc3Zvbm0uY29tL3dlbGVjdC54bWwiKSk7ZS51YygpO2lmKChhfHwhdGhpcy5mZSYmCmIuYWRGYWxsYmFja1VSTCkmJiF0aGlzLlFlKXRoaXMuUWU9dGhpcy5maT10aGlzLkFmPSEwLGUudHJhY2soInN0YXRzX3d0X3N0YXJ0IiwiIiwhMCksdGhpcy5mZT0hMCxhPWUuJGYoYi5hZEZhbGxiYWNrVVJMLHRoaXMuTCwhMSx7b25seVVSTDohMH0pLHRoaXMuSWUoYSwhMCwhMSx7aG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3M6ITB9KTtlbHNlIGlmKHRoaXMuamQ9ITAsdGhpcy5zYiYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5zYiksdGhpcy5zYj0hMSksKCJwcmVyb2xsIj09ZS5TYSYmdGhpcy5WY3x8InBvc3Ryb2xsIj09ZS5TYSkmJnRoaXMuY29uZi5wb3N0QWRJZnJhbWVVcmwpaWYoYT10aGlzLmNvbmYucG9zdEFkSWZyYW1lVXJsLCJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoYT1hKGUuU2EpKSwic3RyaW5nIj09dHlwZW9mIGEmJmEpe2ZvcihiPXRoaXMuYi5HO2IuZmlyc3RDaGlsZDspYi5yZW1vdmVDaGlsZChiLmZpcnN0Q2hpbGQpO2IucGFyZW50fHx0aGlzLmIuSmMoKTsKdmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Yy5zZXRBdHRyaWJ1dGUoInNyYyIsYSk7Yy5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Muc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7Yy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAwIG5vbmU7b3V0bGluZTogbm9uZTsiKTtiLmFwcGVuZENoaWxkKGMpO3ZhciBmPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihhKXtpZigiY29udGludWUiPT1hLmRhdGEpe3RoaXMua2QoKTthPU1hdGgucm91bmQoKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWYpLzFFMyk7dmFyIGI9IiI7MTxhJiYoYj0iZ3QxIik7NTxhJiYoYj0iZ3Q1Iik7MTA8YSYmKGI9Imd0MTAiKTsyMDxhJiYoYj0iZ3QyMCIpO2UudHJhY2soInN0YXRzX2hkX3Bvc3RJZnJhbWVDbG9zZWQiLGIsITApfX0uYmluZCh0aGlzKSk7ZS50cmFjaygic3RhdHNfaGRfcG9zdElmcmFtZU9wZW5lZCIsCiIiLCEwKX1lbHNlIHRoaXMua2QoKTtlbHNlIHRoaXMua2QoKX0sa2Q6ZnVuY3Rpb24oYSl7dGhpcy4kdCgpJiYhYT93aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMua2QoITApfS5iaW5kKHRoaXMpLHRoaXMuR3MpOih0aGlzLmxmPSEwLHRoaXMuYi53ZSgpLHRoaXMuYi5wdCgpLHRoaXMuVWI9ITEsZS52KGsuUG8sdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSx0aGlzLnNlKCkueWgoKSl9LHNlOmZ1bmN0aW9uKCl7dmFyIGE9bnVsbDt0aGlzLmImJnRoaXMuYi5mJiYoYT10aGlzLmIuZik7cmV0dXJuIGF9LERlOmZ1bmN0aW9uKCl7dmFyIGE9ITE7dHJ5e25ldyBBY3RpdmVYT2JqZWN0KCJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFzaCIpJiYoYT0hMCl9Y2F0Y2goYil7bmF2aWdhdG9yLm1pbWVUeXBlcyYmdm9pZCAwIT1uYXZpZ2F0b3IubWltZVR5cGVzWyJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCJdJiZuYXZpZ2F0b3IubWltZVR5cGVzWyJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCJdLmVuYWJsZWRQbHVnaW4mJgooYT0hMCl9cmV0dXJuIGF9LGFnOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5IYSgibWluVmlzIik7YSYmKGUuQmUodGhpcy52aWRlbyxhKT90aGlzLnpoKCk6dGhpcy56ZCgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5hZygpfS5iaW5kKHRoaXMpLDEwMCkpfSxCOmZ1bmN0aW9uKCl7dmFyIGE9e307dGhpcy5jJiYoYS5jbGlja3Rocm91Z2g9dGhpcy5jLk9iLGEuZHVyYXRpb249dGhpcy5jLmR1cmF0aW9uLGEuYWRQb2Q9dGhpcy5jLnJiLHRoaXMudmlkZW8mJnRoaXMudmlkZW8uY3VycmVudFRpbWUmJihhLmN1cnJlbnRUaW1lPXRoaXMudmlkZW8uY3VycmVudFRpbWUpLHRoaXMubGMmJjA8dGhpcy5sYy5sZW5ndGgmJihhLmFkSWRzPXRoaXMubGMpKTt0aGlzLnZpZGVvJiZ0aGlzLnZpZGVvLmR1cmF0aW9uJiYoYS52aWRlb19kdXJhdGlvbj10aGlzLnZpZGVvLmR1cmF0aW9uKTtyZXR1cm4gYX0sQzpmdW5jdGlvbigpe3ZhciBhPXt9O2EuYWRzZXNzaW9uX2lkPXRoaXMuYm8rCiItIit0aGlzLmpmO3RoaXMuYyYmdGhpcy5jLkRnJiYoYS5ob21hZEltcHJlc3Npb25BZElkPXRoaXMuYy5EZygpKTtyZXR1cm4gYX0sb2c6ZnVuY3Rpb24oKXt9fX0pKHRoaXMpO3ZhciBRYT1jLllqfHxRYTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy55cz10aGlzLmFbMV07dGhpcy5HcD10aGlzLmFbNV07dGhpcy5qPXRoaXMuYVs4XX1jLk5pPWI7Yi5wcm90b3R5cGU9e3hzOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy55czp0aGlzLkZwKGEpfSxGcDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuR3A6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuajphfX19KShjKTt2YXIgUmE9Yy5OaXx8UmEsd2M9bmV3IFJhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwKIlooVFREWlRSUiIpO3dpbmRvdy5EPXdjLnhzKDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsYixjLGQpe3RoaXMub3B0aW9ucz1kfHx7fTtoPWM7dGhpcy5wYXJlbnQ9YTt0aGlzLnVybD1iO3RoaXMuRWE9bnVsbDt0aGlzLlc9W107dGhpcy5VPW51bGw7dGhpcy5rYz10aGlzLm1jPSExO3RoaXMuc2E9IiI7dGhpcy56Zj0hMTtkJiZkLmVtcHR5P3RoaXMuTXIoJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+PFZBU1QgdmVyc2lvbj0iMy4wIj48L1ZBU1Q+Jyk6dGhpcy5sb2FkKCl9dmFyIGE9MCxoLGQ9W107Yy52bT1iO2IucHJvdG90eXBlPXtsb2FkOmZ1bmN0aW9uKCl7dmFyIGE9ZS51YygpLGI7Yj1lLmxhKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpO3ZhciBjPSIiO2IucXVlcnlLZXkmJihjPWIucXVlcnlLZXkuaHZwKTtjJiYodGhpcy5vcHRpb25zLnZwYWlkPSEwKTtiPXRoaXMub3B0aW9ucy5rZWVwVVJMP25ldyB5KHRoaXMudXJsKTpsLnphKGwuS2QodGhpcy51cmwpLAohMSx0aGlzLm9wdGlvbnMudXNlQWRUYWdQYXJhbWV0ZXIpO2lmKHRoaXMub3B0aW9ucy52cGFpZCYmIWUuVGEoKSYmKGEuaXNDaHJvbWV8fGEuaXNGaXJlZm94KSYmIWEuaXNFZGdlfHxjKXthPWUubGcodGhpcy51cmwpO2F8fChhPXRoaXMudXJsKTtpZigwPD1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoIm1hcnRoYXN0ZXdhcnQiKSYmdGhpcy5vcHRpb25zLkFkU3lzdGVtJiYiR0RGUCI9PXRoaXMub3B0aW9ucy5BZFN5c3RlbXx8ImFwcHNwb3QiPT1jfHwwPGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZigiZmFuZG9tLmNvbSIpJiYwPGEuaW5kZXhPZigicHViYWRzLmcuZG91YmxlY2xpY2submV0LyIpKTA8YS5pbmRleE9mKCJnb29nbGVhZHMuZy5kb3VibGVjbGljay5uZXQvcGFnZWFkL2FkcyIpfHwiYXBwc3BvdCI9PWN8fDA8ZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKCJmYW5kb20uY29tIikmJjA8YS5pbmRleE9mKCJwdWJhZHMuZy5kb3VibGVjbGljay5uZXQvIik/Cih0aGlzLnVybD0iaHR0cHM6Ly9pbWEzdnBhaWQuYXBwc3BvdC5jb20vP2FkVGFnVXJsPSIrZW5jb2RlVVJJQ29tcG9uZW50KGwuS2QoYSkpKyImdHlwZT1qcyIsYj1sLnphKGwuS2QodGhpcy51cmwpLCExLHRoaXMub3B0aW9ucy51c2VBZFRhZ1BhcmFtZXRlciksYi5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9ImNvbWFwcHNwb3RpbWEzdnBhaWQiKTpiPWwuemEobC5LZChhKSwhMSx0aGlzLm9wdGlvbnMudXNlQWRUYWdQYXJhbWV0ZXIpO2IuZGF0YS5ob21hZF92cGFpZF9jb21wYXRpYmxlPSJ0cnVlIjt0aGlzLm9wdGlvbnMuaG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3MmJihiLmRhdGEuaG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3M9Ik1lZGlhZmlsZSIpfWwuTGEoYix0aGlzLkxyLmJpbmQodGhpcyksdGhpcy5Jci5iaW5kKHRoaXMpKX0sQWc6ZnVuY3Rpb24oKXt2YXIgYT0wPHRoaXMuRWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6VkFTVEFkRGF0YSIpLmxlbmd0aD8KW106W10uc2xpY2UuY2FsbCh0aGlzLkVhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJBZCIpKTsiUGxheWxpc3QiPT10aGlzLkVhLmZpcnN0Q2hpbGQubm9kZU5hbWUmJmEuZm9yRWFjaChmdW5jdGlvbihhLGIsYyl7aWYoMT09YS5jaGlsZE5vZGVzLmxlbmd0aClpZihhLnBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09ZS5TYSl0cnl7dmFyIGQ9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoJzxBZCBzZXF1ZW5jZT0iJysoYisxKSsnIj48V3JhcHBlcj48VkFTVEFkVGFnVVJJPjwhW0NEQVRBWycrYS50ZXh0Q29udGVudC50cmltKCkrIl1dXHgzZTwvVkFTVEFkVGFnVVJJPjwvV3JhcHBlcj48L0FkPiIsInRleHQveG1sIik7Y1tiXT1kLmZpcnN0Q2hpbGR9Y2F0Y2goZil7Y1tiXT17fX1lbHNlIGMuc3BsaWNlKGIsMSl9KTt2YXIgYj1bXS5zbGljZS5jYWxsKHRoaXMuRWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6QWRCcmVhayIpKTswPj1iLmxlbmd0aCYmCihiPVtdLnNsaWNlLmNhbGwodGhpcy5FYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWRCcmVhayIpKSk7dmFyIGM9W107Yi5mb3JFYWNoKGZ1bmN0aW9uKGEsYixkKXtpZigic3RhcnQiPT1hLmdldEF0dHJpYnV0ZSgidGltZU9mZnNldCIpJiYicHJlcm9sbCI9PWUuU2F8fCJlbmQiPT1hLmdldEF0dHJpYnV0ZSgidGltZU9mZnNldCIpJiYicG9zdHJvbGwiPT1lLlNhfHx0aGlzLm9yKGEuZ2V0QXR0cmlidXRlKCJ0aW1lT2Zmc2V0IikpfHxsLml1KCkpdHJ5e3ZhciBmPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6QWRUYWdVUkkiKTswPj1mLmxlbmd0aCYmKGY9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWRUYWdVUkkiKSk7dmFyIGg9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoJzxBZCBzZXF1ZW5jZT0iJysoYisxKSsnIj48V3JhcHBlcj48VkFTVEFkVGFnVVJJPjwhW0NEQVRBWycrZlswXS50ZXh0Q29udGVudC50cmltKCkrIl1dXHgzZTwvVkFTVEFkVGFnVVJJPjwvV3JhcHBlcj48L0FkPiIsCiJ0ZXh0L3htbCIpO2RbYl09aC5maXJzdENoaWxkO2MucHVzaChoKX1jYXRjaChnKXtmb3IoYT1bXS5zbGljZS5jYWxsKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkIikpLGI9MDtiPGEubGVuZ3RoO2IrKyljLnB1c2goYVtiXSl9fS5iaW5kKHRoaXMpKTthPWEuY29uY2F0KGMpO3JldHVybiBhPWEuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgic2VxdWVuY2UiKT9OdW1iZXIoYS5nZXRBdHRyaWJ1dGUoInNlcXVlbmNlIikpPE51bWJlcihiLmdldEF0dHJpYnV0ZSgic2VxdWVuY2UiKSk/LTE6MTowfSl9LG9yOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMub3B0aW9ucy5jb250ZW50VmlkZW8sYz10aGlzLm9wdGlvbnMudGltZU9mZnNldERlbHRhfHwxMCxkPTA7aWYoIShhJiZiJiZiLmR1cmF0aW9uJiZiLmN1cnJlbnRUaW1lKSlyZXR1cm4hMTswPD1hLmluZGV4T2YoIiUiKT9kPWIuZHVyYXRpb24vMTAwKnBhcnNlSW50KGEpOjA8PWEuaW5kZXhPZigiOiIpJiYKKDA8PWEuaW5kZXhPZigiLiIpJiYoYT1hLnN1YnN0cmluZygwLGEuaW5kZXhPZigiLiIpKSksYT1hLnNwbGl0KCI6IiksYT1hLnJldmVyc2UoKSxkPXBhcnNlSW50KGFbMF0pKzYwKnBhcnNlSW50KGFbMV0pKzM2MDAqcGFyc2VJbnQoYVsyXSkpO3JldHVybiBkJiZNYXRoLmFicyhkLXBhcnNlSW50KGIuY3VycmVudFRpbWUpKTw9Yz8hMDohMX0sTHI6ZnVuY3Rpb24oYSl7dGhpcy5mdChhKTt0cnl7dGhpcy5FYT1hLnJlc3BvbnNlWE1MLHRoaXMuRWF8fCh0aGlzLkVhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEucmVzcG9uc2VUZXh0LCJ0ZXh0L3htbCIpKX1jYXRjaChiKXt0aGlzLm9hKHRoaXMuUmEody5WZCkpfXRoaXMuVz10aGlzLkFnKCk7dGhpcy5tYz10aGlzLm9mKCk7dGhpcy5rYz10aGlzLkxoKCk7dGhpcy5XLmxlbmd0aD90aGlzLkZjKCk6dGhpcy5vYSh0aGlzLlJhKHcuT2Mse2Vycm9yOnRoaXMuemY/Ri5VZDpGLkdmfSkpfSxNcjpmdW5jdGlvbihhKXt0cnl7dGhpcy5FYXx8Cih0aGlzLkVhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEsInRleHQveG1sIikpfWNhdGNoKGIpe3RoaXMub2EodGhpcy5SYSh3LlZkKSl9dGhpcy5XPXRoaXMuQWcoKTt0aGlzLm1jPXRoaXMub2YoKTt0aGlzLmtjPXRoaXMuTGgoKTt0aGlzLlcubGVuZ3RoP3RoaXMuRmMoKTp0aGlzLm9hKHRoaXMuUmEody5PYyx7ZXJyb3I6dGhpcy56Zj9GLlVkOkYuR2Z9KSl9LElyOmZ1bmN0aW9uKCl7dGhpcy5vYSh0aGlzLlJhKHcuRmYse2RlcHRoOmF9KSl9LEZjOmZ1bmN0aW9uKCl7dGhpcy5VPXRoaXMuVy5zaGlmdCgpO3RoaXMucXIoKT90aGlzLnN1KCk/KGErKyxuZXcgYih0aGlzLHRoaXMuSWcoKSxoLHtBZFN5c3RlbTp0aGlzLlpwKCksdnBhaWQ6dGhpcy5vcHRpb25zLnZwYWlkfSkpOnRoaXMub2EodGhpcy5SYSh3LklmKSk6KGE9MCx0aGlzLlF1KCkmJnRoaXMuVGUodGhpcy5SbygpKSl9LE9lOmZ1bmN0aW9uKCl7dGhpcy5tYz8odGhpcy5tYz0xPHRoaXMuVy5sZW5ndGgsCnRoaXMuVy5sZW5ndGgmJnRoaXMuRmMoKSk6dGhpcy5wYXJlbnQuT2UoKX0sa2g6ZnVuY3Rpb24oKXt0aGlzLmtjPyh0aGlzLmtjPTE8dGhpcy5XLmxlbmd0aCx0aGlzLlcubGVuZ3RoJiZ0aGlzLkZjKCkpOnRoaXMucGFyZW50LmtoKCl9LFF1OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHUoKT90aGlzLm91KCk/ITA6KC0xIT10aGlzLnljKCk/dGhpcy5vYSh0aGlzLlJhKHcuQmYpKTp0aGlzLm9hKHRoaXMuUmEody5qaikpLCExKToodGhpcy5vYSh0aGlzLlJhKHcuT2MsRi5IZikpLCExKX0sVGU6ZnVuY3Rpb24oYSl7dGhpcy5zYXx8KHRoaXMuc2E9IiIpO2EuT2E9YS5PYS5jb25jYXQodGhpcy5LZSgpKTthLnJiPWEucmI/YS5yYjp0aGlzLm1jO2EuamM9YS5qYz9hLmpjOnRoaXMua2M7YS5XYT1hLldhP2EuV2E6LTEhPXRoaXMuc2EuaW5kZXhPZigic21hcnRjbGlwLm5ldCIpJiYhdGhpcy5vcHRpb25zLndnO3RoaXMucGFyZW50LlRlKGEpfSxSbzpmdW5jdGlvbigpe3ZhciBhPW5ldyBTYTsKdGhpcy5zYXx8KHRoaXMuc2E9IiIpO2EuZHVyYXRpb249dGhpcy55YygpO2EuTT10aGlzLkZnKCk7YS5PYj10aGlzLmJxKCk7YS5vcmlnaW49dGhpczthLkE9dGhpcy5ZcCgpO2EuaGY9dGhpcy5ycShhLmR1cmF0aW9uKTthLldhPWEuV2E/YS5XYTotMSE9dGhpcy5zYS5pbmRleE9mKCJzbWFydGNsaXAubmV0IikmJiF0aGlzLm9wdGlvbnMud2c7cmV0dXJuIGF9LG9hOmZ1bmN0aW9uKGIpe3RoaXMuc2F8fCh0aGlzLnNhPSIiKTtiLldhPWIuV2E/Yi5XYTotMSE9dGhpcy5zYS5pbmRleE9mKCJzbWFydGNsaXAubmV0IikmJiF0aGlzLm9wdGlvbnMud2c7dGhpcy5VJiYoYi5PYT1iLmVycm9yLmNvZGUhPXcuQmYuY29kZT9iLk9hLmNvbmNhdCh0aGlzLmNxKCkpOmIuT2EuY29uY2F0KHRoaXMubHEoKSkpO3RoaXMuVy5sZW5ndGg/KHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5RYiYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucGFyZW50LlFiJiZ0aGlzLnBhcmVudC5RYihiKSxhPTAsdGhpcy5GYygpKToKKHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5vYSYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucGFyZW50Lm9hJiZ0aGlzLnBhcmVudC5vYShiKSxhPTApfSxRYjpmdW5jdGlvbihhKXt0aGlzLnBhcmVudC5RYihhKX0scWc6ZnVuY3Rpb24oYSxiKXt0aGlzLm9hKHRoaXMuUmEoYSxiKSl9LFJhOmZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IFRhKGEsYik7Yy5vcmlnaW49dGhpcztyZXR1cm4gY30sc3U6ZnVuY3Rpb24oKXtyZXR1cm4gYTxofSxwdTpmdW5jdGlvbigpe3JldHVybiAwPHRoaXMuRmcoKS5sZW5ndGh9LG91OmZ1bmN0aW9uKCl7cmV0dXJuIDE8dGhpcy55YygpfSxvZjpmdW5jdGlvbigpe3JldHVybiAxPHRoaXMuVy5maWx0ZXIoZnVuY3Rpb24oYSl7dmFyIGI9ITE7YS5nZXRBdHRyaWJ1dGUmJihiPTA8TnVtYmVyKGEuZ2V0QXR0cmlidXRlKCJzZXF1ZW5jZSIpKSk7cmV0dXJuIGJ9KS5sZW5ndGh9LExoOmZ1bmN0aW9uKCl7dmFyIGE9ITE7dGhpcy5XJiYyPD10aGlzLlcubGVuZ3RoJiYKIXRoaXMub2YoKSYmKGE9ITApO3JldHVybiBhfSxmdDpmdW5jdGlvbihhKXt0aGlzLnNhPSJVTktOT1dOIjt0cnl7ZC5wdXNoKHRoaXMuc2E9YS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1VcmwiKSl9Y2F0Y2goYil7dGhpcy5zYT0iVU5LTk9XTiJ9dHJ5e3RoaXMuemY9YS5nZXRSZXNwb25zZUhlYWRlciYmYS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1WcGFpZC1JZ25vcmVkIil9Y2F0Y2goYyl7fX0scXI6ZnVuY3Rpb24oKXtyZXR1cm4gMDx0aGlzLklnKCkubGVuZ3RofSxJZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlKHRoaXMuVSwiVkFTVEFkVGFnVVJJIil9LFpwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmUodGhpcy5VLCJBZFN5c3RlbSIpfSxLZTpmdW5jdGlvbigpe2Zvcih2YXIgYT0iSW1wcmVzc2lvbiBUcmFja2luZyBDbGlja1RyYWNraW5nIEVycm9yIFZpZXdhYmxlIE5vdFZpZXdhYmxlIHZpZXdhYmxlX2ltcHJlc3Npb24gbWVhc3VyYWJsZV9pbXByZXNzaW9uIi5zcGxpdCgiICIpLApiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtbXS5zbGljZS5jYWxsKHRoaXMuVS5nZXRFbGVtZW50c0J5VGFnTmFtZShkKSkuZm9yRWFjaChmdW5jdGlvbihhKXtpZihhJiYhdGhpcy5WZyhhKSl7dmFyIGM9YS5nZXRBdHRyaWJ1dGUoImV2ZW50Iil8fGQudG9Mb3dlckNhc2UoKTtiLnB1c2goe3R5cGU6Yyx1cmw6dGhpcy5pYihhKX0pfX0uYmluZCh0aGlzKSl9cmV0dXJuIGJ9LFZnOmZ1bmN0aW9uKGEpe3JldHVybiBhPyJDb21wYW5pb24iPT1hLm5vZGVOYW1lPyEwOnRoaXMuVmcoYS5wYXJlbnROb2RlKTohMX0sbHE6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLktlKCk7cmV0dXJuIGE9YS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuImltcHJlc3Npb24iPT1hLnR5cGV9KX0sY3E6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLktlKCk7cmV0dXJuIGE9YS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuImVycm9yIj09YS50eXBlfSl9LGJxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWIodGhpcy5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJDbGlja1Rocm91Z2giKVswXSl9LApGZzpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIk1lZGlhRmlsZSIpLGI9W10sYz0wO2M8YS5sZW5ndGg7YysrKWIucHVzaCh7aWQ6YVtjXS5nZXRBdHRyaWJ1dGUoImlkIiksdHlwZTphW2NdLmdldEF0dHJpYnV0ZSgidHlwZSIpLFBhOmFbY10uZ2V0QXR0cmlidXRlKCJiaXRyYXRlIiksd2lkdGg6YVtjXS5nZXRBdHRyaWJ1dGUoIndpZHRoIiksaGVpZ2h0OmFbY10uZ2V0QXR0cmlidXRlKCJoZWlnaHQiKSxUdjphW2NdLmdldEF0dHJpYnV0ZSgiZGVsaXZlcnkiKSx1cmw6dGhpcy5pYihhW2NdKX0pO3ZhciBkPXRoaXMub3B0aW9ucy5QYXx8MUUzO3RyeXt2YXIgaD1iLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4tMSE9YS50eXBlLmluZGV4T2YoIm1wNCIpfSkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBNYXRoLmFicyhkLWEuUGEpLU1hdGguYWJzKGQtYi5QYSl9KSxlPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybi0xPT1hLnR5cGUuaW5kZXhPZigibXA0Iil9KS5zb3J0KGZ1bmN0aW9uKGEsCmIpe3JldHVybiBNYXRoLmFicyhkLWEuUGEpLU1hdGguYWJzKGQtYi5QYSl9KSxiPWguY29uY2F0KGUpfWNhdGNoKGcpe31yZXR1cm4gYn0sWXA6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImFkUGFyYW1ldGVycyIpO2EmJjAhPWEubGVuZ3RofHwoYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkUGFyYW1ldGVycyIpKTtmb3IodmFyIGI9IiIsYz0hMSxkPVtdLGI9ITEsaD0iIixlPVtdLGc9IiIsZz0wO2c8YS5sZW5ndGg7ZysrKXtoPWI9dGhpcy5xZChhW2ddKTt0cnl7Yz1KU09OLnBhcnNlKGIpfWNhdGNoKGspe2M9Yn1kLnB1c2goYyk7ZS5wdXNoKGgpfTE8YS5sZW5ndGg/KGI9ZCxnPWgpOihiPWMsZz1lKTtyZXR1cm57QWRQYXJhbWV0ZXJzOmIsT3JpZ2luYWxBZFBhcmFtZXRlcnM6Zy50b1N0cmluZygpfX0seWM6ZnVuY3Rpb24oKXt2YXIgYTt0cnl7cmV0dXJuIGE9dGhpcy5pYih0aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkR1cmF0aW9uIilbMF0pLAphPWEuc3BsaXQoIjoiKSxhPTM2MDAqK2FbMF0rNjAqK2FbMV0rICthWzJdLGlzTmFOKGEpPy0xOmF9Y2F0Y2goYil7cmV0dXJuLTF9fSxycTpmdW5jdGlvbihhKXt2YXIgYj0hMSxjPSExLGQ9ITE7dHJ5e2M9dGhpcy5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJMaW5lYXIiKVswXSxkPWMuZ2V0QXR0cmlidXRlKCJza2lwb2Zmc2V0IiksYj1lLld0KGQsYSksMD5iJiYoYj0hMSl9Y2F0Y2goaCl7Yj0hMX1yZXR1cm4gYn0scmU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZhLmdldEVsZW1lbnRzQnlUYWdOYW1lKGIpLmxlbmd0aD90aGlzLmliKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYilbMF0pOiIifSx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5jaGlsZE5vZGVzJiZhLmNoaWxkTm9kZXNbMF0/YS5jaGlsZE5vZGVzWzBdLm5vZGVWYWx1ZToiIn0saWI6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5xZChhKToiIn0scWQ6ZnVuY3Rpb24oYSl7dmFyIGI9CnRoaXMudWUoYSk7YiYmKGI9Yi50cmltKCkpOyFiJiZhLnRleHRDb250ZW50JiYoYj1hLnRleHRDb250ZW50LGI9Yi50cmltKCkpO3JldHVybiBifX19KShjKTt2YXIgVD1jLnZtfHxUO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLiRyPXRoaXMuYVs1XTt0aGlzLnBpPXRoaXMuYVszXTt0aGlzLkNvPXRoaXMuYVs2XTt0aGlzLmVqPXRoaXMuYVsxXTt0aGlzLm5uPXRoaXMuYVs2XTt0aGlzLnFsPXRoaXMuYVs4XTt0aGlzLktpPXRoaXMuYVsxXTt0aGlzLkFpPXRoaXMuYVs4XTt0aGlzLmo9dGhpcy5hWzddfWMuTnE9YjtiLnByb3RvdHlwZT17WnI6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLiRyOnRoaXMub2koYSl9LG9pOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5waTp0aGlzLkJvKGEpfSxCbzpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuQ286dGhpcy5kaihhKX0sCmRqOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5lajp0aGlzLm1uKGEpfSxtbjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMubm46dGhpcy5wbChhKX0scGw6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLnFsOnRoaXMuSmkoYSl9LEppOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5LaTp0aGlzLnppKGEpfSx6aTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuQWk6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBVYT1jLk5xfHxVYSx4Yz1uZXcgVWEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD14Yy5acig0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuZHVyYXRpb249MDt0aGlzLk9hPVtdO3RoaXMuTT1bXTt0aGlzLk9iPSIiO3RoaXMuQT10aGlzLmpjPXRoaXMucmI9ITE7dGhpcy54ZT0KdGhpcy5vcmlnaW49bnVsbDt0aGlzLnllPSIifWMucmw9YjtiLnByb3RvdHlwZT17TW86ZnVuY3Rpb24oKXtmb3IodmFyIGE9ITEsYj0wO2I8dGhpcy5NLmxlbmd0aDtiKyspaWYoMDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24vZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC9lY21hc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQvamF2YXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJ0ZXh0L2pzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC94LWVjbWFzY3JpcHQiKXx8CjA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1qYXZhc2NyaXB0IikpYT0hMDtyZXR1cm4gYX0sanE6ZnVuY3Rpb24oKXtpZighdGhpcy54ZSYmdGhpcy5vcmlnaW4mJnRoaXMub3JpZ2luLkVhKXt2YXIgYT10aGlzLm9yaWdpbi5FYTtpZihhLmdldEVsZW1lbnRzQnlUYWdOYW1lKWZvcih2YXIgYT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJbXByZXNzaW9uIiksYj0iIixjPTA7YzxhLmxlbmd0aDtjKyspKGI9YVtjXS5nZXRBdHRyaWJ1dGUoImlkIikpJiYwPD1iLmluZGV4T2YoIkhPTUFEIikmJih0aGlzLnhlPWFbY10pfXJldHVybiB0aGlzLnhlfSxEZzpmdW5jdGlvbigpe2lmKHRoaXMueWUpcmV0dXJuIHRoaXMueWU7dmFyIGE9IiI7KGE9dGhpcy5qcSgpKSYmYS5nZXRBdHRyaWJ1dGU/KGE9YS5nZXRBdHRyaWJ1dGUoImlkIiksYT1hLnJlcGxhY2UoIkhPTUFEXyIsIiIpLChhPWEucmVwbGFjZSgiSE9NQUQiLCIiKSl8fChhPSJlbXB0eSIpKTphPSJub19pbXBfbm9kZSI7CnJldHVybiB0aGlzLnllPWF9LHVxOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPSExLGI9MDtiPHRoaXMuTS5sZW5ndGg7YisrKWlmKDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24vamF2YXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQvZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJ0ZXh0L2phdmFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC9qc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1lY21hc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1qYXZhc2NyaXB0IikpYT0KdGhpcy5NW2JdO3JldHVybiBhfX19KShjKTt2YXIgU2E9Yy5ybHx8U2E7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMudW09dGhpcy5hWzldO3RoaXMuSHE9dGhpcy5hWzZdO3RoaXMucXA9dGhpcy5hWzddO3RoaXMubXM9dGhpcy5hWzldO3RoaXMuYWw9dGhpcy5hWzRdO3RoaXMuVnA9dGhpcy5hWzEwXTt0aGlzLmVyPXRoaXMuYVs2XTt0aGlzLmo9dGhpcy5hWzVdfWMucmo9YjtiLnByb3RvdHlwZT17dG06ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnVtOnRoaXMuR3EoYSl9LEdxOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5IcTp0aGlzLnBwKGEpfSxwcDpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMucXA6dGhpcy5scyhhKX0sbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLm1zOnRoaXMuJGsoYSl9LCRrOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5hbDoKdGhpcy5VcChhKX0sVXA6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLlZwOnRoaXMuZHIoYSl9LGRyOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5lcjp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLmo6YX19fSkoYyk7dmFyIFZhPWMucmp8fFZhLHljPW5ldyBWYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXljLnRtKDQpO3ZhciB3PXtWZDp7dHlwZToiZXJyb3IiLGNvZGU6MTAwLG1lc3NhZ2U6IlhNTCBwYXJzaW5nIGVycm9yIix4YToiWE1MX1BBUlNFX0VSUk9SIn0samo6e3R5cGU6ImVycm9yIixjb2RlOjIwMixtZXNzYWdlOiJWaWRlbyBwbGF5ZXIgZXhwZWN0aW5nIGRpZmZlcmVudCBkdXJhdGlvbi4iLHhhOiJEVVJBVElPTl9FUlJPUiJ9LE9jOnt0eXBlOiJlcnJvciIsY29kZTozMDMsbWVzc2FnZToiTm8gYWRzIFZBU1QgcmVzcG9uc2UgYWZ0ZXIgb25lIG9yIG1vcmUgV3JhcHBlcnMuIEFsc28gaW5jbHVkZXMgbnVtYmVyIG9mIGVtcHR5IFZBU1QgcmVzcG9uc2VzIGZyb20gZmFsbGJhY2suIiwKeGE6IkVNUFRZX1ZBU1QifSxJZjp7dHlwZToiY3JpdGljYWwiLGNvZGU6MzAyLG1lc3NhZ2U6IldyYXBwZXIgbGltaXQgcmVhY2hlZCwgYXMgZGVmaW5lZCBieSB0aGUgdmlkZW8gcGxheWVyLiBUb28gbWFueSBXcmFwcGVyIHJlc3BvbnNlcyBoYXZlIGJlZW4gcmVjZWl2ZWQgd2l0aCBubyBJbkxpbmUgcmVzcG9uc2UuIix4YToiV1JBUFBFUl9MSU1JVF9SRUFDSEVEIn0sRmY6e3R5cGU6ImVycm9yIixjb2RlOjMwMSxtZXNzYWdlOiJUaW1lb3V0IG9mIFZBU1QgVVJJIHByb3ZpZGVkIGluIFdyYXBwZXIgZWxlbWVudCwgb3Igb2YgVkFTVCBVUkkgcHJvdmlkZWQgaW4gYSBzdWJzZXF1ZW50IFdyYXBwZXIgZWxlbWVudC4gSW5jbHVkZXMgcmVxdWVzdCBlcnJvcnMgc3VjaCBhcyBpbnZhbGlkIFVSSSwgdW5yZWFjaGFibGUgb3IgcmVxdWVzdCB0aW1lb3V0IGZvciBVUkksIGFuZCBzZWN1cml0eSBvciBvdGhlciBleGNlcHRpb25zIHJlbGF0ZWQgdG8gcmVxdWVzdGluZyBhIFZBU1QgVVJJLiIsCnhhOiJMT0FEX0VSUk9SIn0sVGQ6e3R5cGU6ImVycm9yIixjb2RlOjQwMyxtZXNzYWdlOiJDb3VsZCBub3QgZmluZCBNZWRpYUZpbGUgdGhhdCBpcyBzdXBwb3J0ZWQgYnkgdGhpcyB2aWRlbyBwbGF5ZXIsIGJhc2VkIG9uIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBNZWRpYUZpbGUgZWxlbWVudC4iLHhhOiJOT19QTEFZQUJMRV9TT1VSQ0VTIn0sS3Y6e3R5cGU6ImVycm9yIixjb2RlOjQwNSxtZXNzYWdlOiJQcm9ibGVtIGRpc3BsYXlpbmcgTWVkaWFGaWxlLiIseGE6Ik1FRElBRklMRV9FUlJPUiJ9LEJmOnt0eXBlOiJlcnJvciIsY29kZTo5OTksbWVzc2FnZToiMSBzZWMgZHVtbXkgYWQiLHhhOiJEVU1NWV9BRCJ9fSxGPXtHZjp7dHlwZToiZXJyb3IiLGNvZGU6MzAzMSxtZXNzYWdlOiJubyBhZHMiLHhhOiJOT19BRFMifSxIZjp7dHlwZToiZXJyb3IiLGNvZGU6MzAzMixtZXNzYWdlOiJubyBtZWRpYWZpbGVzIHNwZWNpZmllZCIseGE6Ik5PX01FRElBRklMRVMifSxMdjp7dHlwZToiZXJyb3IiLApjb2RlOjMwMzMsbWVzc2FnZToibm8gcGxheWFibGUgbWVkaWFmaWxlcyIseGE6Ik5PX1BMQVlBQkxFX01FRElBRklMRVMifSxVZDp7dHlwZToiZXJyb3IiLGNvZGU6MzAzNCxtZXNzYWdlOiJ2cGFpZCBpZ25vcmVkIix4YToiVlBBSURfSUdOT1JFRCJ9fTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5vcz10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs0XX1jLnJuPWI7Yi5wcm90b3R5cGU9e25zOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5vczp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLmo6YX19fSkoYyk7dmFyIFdhPWMucm58fFdhLHpjPW5ldyBXYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXpjLm5zKDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsCmIpe3RoaXMuZXJyb3I9YTt0aGlzLm1kPWI7dGhpcy5PYT1bXTt0aGlzLm9yaWdpbj1udWxsfWMuTGo9YjtiLnByb3RvdHlwZT17fX0pKGMpO3ZhciBUYT1jLkxqfHxUYTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5DbT10aGlzLmFbMV07dGhpcy5YcT10aGlzLmFbOV07dGhpcy5Pbj10aGlzLmFbNl07dGhpcy5TcD10aGlzLmFbNV07dGhpcy5Baz10aGlzLmFbOV07dGhpcy5SdD10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVs3XX1jLmNyPWI7Yi5wcm90b3R5cGU9e0JtOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuQ206dGhpcy5XcShhKX0sV3E6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLlhxOnRoaXMuTm4oYSl9LE5uOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Pbjp0aGlzLlJwKGEpfSxScDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuU3A6dGhpcy56ayhhKX0sCnprOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5Bazp0aGlzLlF0KGEpfSxRdDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuUnQ6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBYYT1jLmNyfHxYYSxBYz1uZXcgWGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1BYy5CbSg0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYihhLGIpe3RoaXMuY29uZj1ifHx7fTt0aGlzLmY9YTt0aGlzLmhiPWEuQmcoKTt0aGlzLkc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5HLmlkPWUuYmEoMTApO3RoaXMuRj1DLnBvcCgpO3RoaXMuRnx8KGUudHJhY2soInN0YXRzX2hkX25vVmlkZW9UYWdMZWZ0IiwiIiwhMCksdGhpcy5GPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIiksdGhpcy5GLmlkPQoiYWRYZGlzcGxheSIsdGhpcy5GLnN0eWxlLmRpc3BsYXk9ImJsb2NrIik7dGhpcy5EPXt9O3RoaXMuWmY9ITE7dGhpcy5OYj1bXX1jLnFqPWI7Yi5wcm90b3R5cGU9e1RwOmZ1bmN0aW9uKGEpe3ZhciBiPXt9LGM9ITEsZT0wLGI9MCxnPXt9O2EuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiYoYj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9ImZpeGVkIixlPWIubGVmdCxiPWIudG9wKTtnPXt4OmUseTpifTtnLnBvc2l0aW9uPWM7cmV0dXJuIGd9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuY29uZi51c2VCb3VuZGluZ0NsaWVudFJlY3QpcmV0dXJuIHRoaXMuVHAoYSk7Zm9yKHZhciBiPTAsYz0wLGU9ITEsZz10aGlzLk9xKGEpLGs9e307YTspYis9YS5vZmZzZXRMZWZ0K2EuY2xpZW50TGVmdCxjKz1hLm9mZnNldFRvcCthLmNsaWVudFRvcCxhPWEub2Zmc2V0UGFyZW50O2cmJihhPXZvaWQgMCE9PXdpbmRvdy5wYWdlWU9mZnNldD93aW5kb3cucGFnZVlPZmZzZXQ6KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8CmRvY3VtZW50LmJvZHkucGFyZW50Tm9kZXx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wLGIrPXZvaWQgMCE9PXdpbmRvdy5wYWdlWE9mZnNldD93aW5kb3cucGFnZVhPZmZzZXQ6KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlfHxkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0LGMrPWEsdGhpcy5jb25mLnBvc2l0aW9uSWZGaXhlZCYmKGU9dGhpcy5jb25mLnBvc2l0aW9uSWZGaXhlZCkpO2s9e3g6Yix5OmN9O2UmJihrLnBvc2l0aW9uPWUpO3JldHVybiBrfSxjdTpmdW5jdGlvbigpe3RoaXMuWmY9ITB9LFdoOmZ1bmN0aW9uKCl7dGhpcy5GPUMucG9wKCk7dGhpcy5GfHwoZS50cmFjaygic3RhdHNfaGRfbm9WaWRlb1RhZ0xlZnQiLCIiLCEwKSx0aGlzLkY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmlkZW8iKSx0aGlzLkYuaWQ9ImFkWGRpc3BsYXkiLHRoaXMuRi5zdHlsZS5kaXNwbGF5PSJibG9jayIpfSxwaDpmdW5jdGlvbigpe3RoaXMuZi5wYXVzZSgpOwplLnYoay5mZCx0aGlzLmYudSgpKX0scHQ6ZnVuY3Rpb24oKXt0aGlzLlpmfHwodGhpcy5mLnBsYXkoKSxlLnYoay5nZCx0aGlzLmYudSgpKSl9LEpjOmZ1bmN0aW9uKCl7dmFyIGE9MjE0NzQ4MzY0Nzt0aGlzLmNvbmYuekluZGV4JiYoYT10aGlzLmNvbmYuekluZGV4KTt0aGlzLmYucGF1c2UoKTt0aGlzLkcuc3R5bGUuekluZGV4PWE7dGhpcy5HLnN0eWxlLm1hcmdpbkxlZnQ9ImF1dG8iO3RoaXMuRy5zdHlsZS5tYXJnaW5SaWdodD0iYXV0byI7dGhpcy5HLnN0eWxlLmJhY2tncm91bmRDb2xvcj0iIzAwMDAwMCI7dGhpcy5HLnN0eWxlLmJveFNpemluZz10aGlzLmhiLnN0eWxlLmJveFNpemluZzt0aGlzLkcuc3R5bGUud2lkdGg9dGhpcy5oYi5vZmZzZXRXaWR0aCswKyJweCI7dGhpcy5HLnN0eWxlLmhlaWdodD10aGlzLmhiLm9mZnNldEhlaWdodCswKyJweCI7dGhpcy5GLnN0eWxlLndpZHRoPXRoaXMuaGIub2Zmc2V0V2lkdGgrMCsicHgiO3RoaXMuRi5zdHlsZS5oZWlnaHQ9dGhpcy5oYi5vZmZzZXRIZWlnaHQrCjArInB4Ijt0aGlzLmdldFBvc2l0aW9uKHRoaXMuaGIpO3RoaXMuZi5IYyYmdGhpcy5mLkhjKCk/dGhpcy5mLkJnKCkuYXBwZW5kQ2hpbGQodGhpcy5HKTpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuRyk7d2luZG93LnNldFRpbWVvdXQodGhpcy5UYi5iaW5kKHRoaXMpLDEwKX0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0aGlzLmYuZXhpdEZ1bGxzY3JlZW4oKX0sT3E6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlLGM9ITE7YTspe2lmKGEuc3R5bGUmJigiZml4ZWQiPT1hLnN0eWxlLnBvc2l0aW9ufHxiJiYiZml4ZWQiPT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS5wb3NpdGlvbikpe2M9ITA7YnJlYWt9YT1hLnBhcmVudE5vZGV9cmV0dXJuIGN9LE1wOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0UG9zaXRpb24oYSk7Yi5wb3NpdGlvbj9iLnBvc2l0aW9uPWIucG9zaXRpb246Yi5wb3NpdGlvbj0iYWJzb2x1dGUiO2Iud2lkdGg9CmEub2Zmc2V0V2lkdGg7Yi5oZWlnaHQ9YS5vZmZzZXRIZWlnaHQ7cmV0dXJuIGJ9LFRiOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuTXAodGhpcy5oYik7aWYoYi54IT10aGlzLkQueHx8Yi55IT10aGlzLkQueXx8Yi5wb3NpdGlvbiE9dGhpcy5ELnBvc2l0aW9ufHxiLndpZHRoIT10aGlzLkQud2lkdGh8fGIuaGVpZ2h0IT10aGlzLkQuaGVpZ2h0fHxhKXtpZigwPHRoaXMuRC53aWR0aCYmMDx0aGlzLkQuaGVpZ2h0JiYwPT1iLndpZHRoJiYwPT1iLmhlaWdodCl7dGhpcy53ZSgpO3JldHVybn10aGlzLkQ9Yjt0aGlzLmYuSGMoKT8odGhpcy5HLnN0eWxlLmxlZnQ9IjBweCIsdGhpcy5HLnN0eWxlLnRvcD0iMHB4Iik6KHRoaXMuRy5zdHlsZS5sZWZ0PWIueCsicHgiLHRoaXMuRy5zdHlsZS50b3A9Yi55KyJweCIpO3RoaXMuRy5zdHlsZS53aWR0aD1iLndpZHRoKyJweCI7dGhpcy5HLnN0eWxlLmhlaWdodD1iLmhlaWdodCsicHgiO3RoaXMuRy5zdHlsZS5wb3NpdGlvbj1iLnBvc2l0aW9uOwp0aGlzLkYuc3R5bGUud2lkdGg9Yi53aWR0aCsicHgiO3RoaXMuRi5zdHlsZS5oZWlnaHQ9Yi5oZWlnaHQrInB4Ijtmb3IoYT0wO2E8dGhpcy5OYi5sZW5ndGg7YSsrKXRoaXMuTmJbYV0oe3dpZHRoOmIud2lkdGgsaGVpZ2h0OmIuaGVpZ2h0fSl9ZS5IaCh0aGlzLkcpJiZ3aW5kb3cuc2V0VGltZW91dCh0aGlzLlRiLmJpbmQodGhpcyksMTApfSxZZjpmdW5jdGlvbihhKXt0aGlzLk5ifHwodGhpcy5OYj1bXSk7ImZ1bmN0aW9uIj09dHlwZW9mIGEmJnRoaXMuTmIucHVzaChhKX0sd2U6ZnVuY3Rpb24oKXt0aGlzLkcmJnRoaXMuRy5wYXJlbnROb2RlJiZ0aGlzLkcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCYmdGhpcy5HLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5HKTt0aGlzLkYmJnRoaXMuRi5wYXVzZSYmdGhpcy5GLnBhdXNlKCl9fX0pKGMpO2Zvcih2YXIgWWE9Yy5xanx8WWEsQz1bXSxaYT0wOzEwMD5aYTtaYSsrKXt2YXIgTz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpOwpPLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjtPLmlkPWUuYmEoMTApO08uY29udHJvbHM9ITA7Qy5wdXNoKE8pfXZhciBLPSExLGRhPSExO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIseik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIseik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHopO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIseik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuc3A9dGhpcy5hWzhdO3RoaXMubXA9dGhpcy5hWzRdO3RoaXMuYXI9dGhpcy5hWzJdO3RoaXMuVXM9dGhpcy5hWzhdO3RoaXMueW89dGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbNV19Yy5ZbD1iO2IucHJvdG90eXBlPXtycDpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLnNwOnRoaXMubHAoYSl9LGxwOmZ1bmN0aW9uKGEpe3JldHVybiAzPAphP3RoaXMubXA6dGhpcy4kcShhKX0sJHE6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLmFyOnRoaXMuVHMoYSl9LFRzOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5Vczp0aGlzLnhvKGEpfSx4bzpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMueW86dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciAkYT1jLllsfHwkYSxCYz1uZXcgJGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1CYy5ycCg0KTsoZnVuY3Rpb24oYyl7Yy5mbD11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLmVsZW1lbnRJZCxhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGIpO2F8fChiPXRoaXMuZ2V0UmF3UGxheWVyKCkuZ2V0RWxlbWVudElkKCksCmE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYikpO3RoaXMuWShhKTt0aGlzLkZkKGIpO3RoaXMubWcoKX0sRmQ6ZnVuY3Rpb24oYil7dGhpcy5pZHx8KHRoaXMuaWQ9Yil9LG1nOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5JYSgpLGE9dGhpcy52aWRlb1RhZzthfHwoKGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXSl8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdKSxhP3RoaXMuWihhKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubWcoKX0uYmluZCh0aGlzKSwxMDApKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBsYXkoKX0sVmE6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpO2IuaXNQbGF5aW5nJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5pc1BsYXlpbmcmJmIuaXNQbGF5aW5nKCkmJnRoaXMucGF1c2UoKX0sCkFlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4gYi5wYXJhbWV0ZXJzJiYhMT09PWIucGFyYW1ldGVycy5hdXRvcGxheT8hMTohMH0sTzpmdW5jdGlvbigpe3JldHVybiJPb3lhbGEifSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGI/Yi5tdXRlZDohMH0sdTpmdW5jdGlvbigpe3ZhciBiPXt9LGE9dGhpcy52aWRlb1RhZyxjPXRoaXMuSWEoKTtpZihiLnZpZGVvVGFnPWEpYi52aWRlb1RhZ0lkPWEuaWQ7aWYoYi5jb250YWluZXI9YyliLmNvbnRhaW5lcklkPWMuaWQ7Yi5wbGF5ZXI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4gYn19KX0pKGMpO3ZhciBhYj1jLmZsfHxhYjsoZnVuY3Rpb24oYyl7Yy5kbD12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9ZWEoKTt0aGlzLk1iPXRoaXMuTWJ8fCExO3RoaXMuUWY9dGhpcy5TZj10aGlzLlJnPXRoaXMuZGE9dGhpcy5zZj0KITE7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5BRFNfRVJST1IsImV4YW1wbGUiLGZ1bmN0aW9uKGEsYil7dGhpcy5JcChhLGIpfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5BRFNfUExBWUVELCJleGFtcGxlIixmdW5jdGlvbigpe3RoaXMuc2Y9ITA7dGhpcy5SZyYmdGhpcy5oZygpfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5QTEFZSU5HLCJleGFtcGxlIixmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFBsYXllcigpLnpiO2EmJmEuVWImJnRoaXMuZ2V0UGxheWVyKCkucGF1c2UoKX0uYmluZCh0aGlzKSwxMDApfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5JTklUSUFMX1BMQVksImV4YW1wbGUiLGZ1bmN0aW9uKCl7dGhpcy5jZCgpO3RoaXMuUmc9ITA7dGhpcy5oZygpfS5iaW5kKHRoaXMpKTt0aGlzLmNnKCl9LApoZzpmdW5jdGlvbigpe2lmKCF0aGlzLk1iKXt0aGlzLmNkKCk7aWYoIXRoaXMuc2YmJiF0aGlzLmNkKCkpcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCksITA7dGhpcy5zZiYmdGhpcy5RZiYmIXRoaXMuU2YmJndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCl9fSxjZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuR2coImFkTWFuYWdlckNvbnRyb2xsZXIiKTtyZXR1cm4gYiYmYi5hZE1hbmFnZXJzJiZiLmFkTWFuYWdlcnNbImdvb2dsZS1pbWEtYWRzLW1hbmFnZXIiXX0sR2c6ZnVuY3Rpb24oYil7Zm9yKHZhciBhPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCksYz0wO2M8YS5tb2R1bGVzLmxlbmd0aDtjKyspe3ZhciBkPWEubW9kdWxlc1tjXTtpZihkLm5hbWU9PT1iKXJldHVybiBkLmluc3RhbmNlfX0sY2c6ZnVuY3Rpb24oKXtpZih0aGlzLmNkKCkpe3ZhciBiPXRoaXMuR2coImFkTWFuYWdlckNvbnRyb2xsZXIiKS5hZE1hbmFnZXJzWyJnb29nbGUtaW1hLWFkcy1tYW5hZ2VyIl07CnRoaXMuU2Y9MDxiLmdldEN1cnJlbnRUaW1lKCk7dGhpcy5RZj1iLlJ2fXRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmNnKCl9LmJpbmQodGhpcyksMTAwKX0sVXY6ZnVuY3Rpb24oYil7cmV0dXJuIGIuaXNBZFBsYXlpbmcmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmlzQWRQbGF5aW5nP2IuZ3coKTohMX0seWM6ZnVuY3Rpb24oYil7cmV0dXJuIGIuZ2V0QWREdXJhdGlvbiYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0QWREdXJhdGlvbj9iLnljKCk6LTF9LG1xOmZ1bmN0aW9uKGIpe3JldHVybiBiLmlzUGxheWluZyYmImZ1bmN0aW9uIj09dHlwZW9mIGIuaXNQbGF5aW5nP2IuaXNQbGF5aW5nKCk6LTF9LElwOmZ1bmN0aW9uKGIsYSl7dGhpcy5NYj1hLm1hdGNoKC9cZCsvKT9wYXJzZUludChhLm1hdGNoKC9cZCsvKVswXSk6MDsxMDA5PT10aGlzLk1ifHwzMDI9PXRoaXMuTWI/dGhpcy5kYT0hMDp0aGlzLm8oImFkZXJyb3IiLHRoaXMuTWIpO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLAoxMDApfSxlZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCk7dGhpcy5kYT8odGhpcy53KCksdGhpcy50YSgpKTpiLkFlKCk/KHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDJFMykpOnRoaXMubXEoYik/KHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDJFMykpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCl9fSl9KShjKTt2YXIgYmI9Yy5kbHx8YmI7KGZ1bmN0aW9uKGMpe2MuZ2w9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxucjpmdW5jdGlvbigpe3dpbmRvdy5PTy52bC5YbS5WbT93aW5kb3cuT08udmwuWG0uVm0uUHYoZnVuY3Rpb24oKXt9KTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubnIoKX0sMTAwKX0sZzpmdW5jdGlvbigpe3RoaXMuVWE9MTUwMDt2YXIgYj0KZWEoKTtpZihiJiZiLl9faW50ZXJuYWwmJmIuX19pbnRlcm5hbC5wbGF5ZXJzJiYwPGUudGUoYi5fX2ludGVybmFsLnBsYXllcnMpKWZvcih2YXIgYSBpbiBiLl9faW50ZXJuYWwucGxheWVycylpZihiLl9faW50ZXJuYWwucGxheWVycy5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGM9bmV3IGFiKGIuX19pbnRlcm5hbC5wbGF5ZXJzW2FdKTt0aGlzLk4oYyl8fCh0aGlzLlAoYyksKG5ldyBiYihjLHRoaXMuSykpLmcoKSl9dGhpcy5SKCl9fSl9KShjKTt2YXIgY2I9Yy5nbHx8Y2IsZGI9bmV3IGNiKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnlyPXRoaXMuYVszXTt0aGlzLlJrPXRoaXMuYVsyXTt0aGlzLkRqPXRoaXMuYVs2XTt0aGlzLnl0PXRoaXMuYVs5XTt0aGlzLm9tPXRoaXMuYVsxXTt0aGlzLkJ2PXRoaXMuYVs5XTt0aGlzLmhrPXRoaXMuYVs3XTt0aGlzLmNsPXRoaXMuYVs1XTsKdGhpcy5BbT10aGlzLmFbN107dGhpcy5qPXRoaXMuYVs5XX1jLnJyPWI7Yi5wcm90b3R5cGU9e3hyOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy55cjp0aGlzLlFrKGEpfSxRazpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuUms6dGhpcy5DaihhKX0sQ2o6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLkRqOnRoaXMueHQoYSl9LHh0OmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy55dDp0aGlzLm5tKGEpfSxubTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMub206dGhpcy5BdihhKX0sQXY6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLkJ2OnRoaXMuZ2soYSl9LGdrOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5oazp0aGlzLmJsKGEpfSxibDpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuY2w6dGhpcy56bShhKX0sem06ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5BbTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5qOgphfX19KShjKTt2YXIgZWI9Yy5ycnx8ZWIsQ2M9bmV3IGViKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9Q2MueHIoNCk7KGZ1bmN0aW9uKGMpe2MuYWo9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dGhpcy5xYT0hMTt0aGlzLkpnKCl9LEpnOmZ1bmN0aW9uKCl7dmFyIGI9ITEsYT0hMTt0aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5nZXRGaWd1cmUmJihiPXRoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLmdldEZpZ3VyZSgpKTtifHwoYj10aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5lbGVtZW50KTt0aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5nZXRWaWRlb0VsZW1lbnQmJihhPXRoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLmdldFZpZGVvRWxlbWVudCgpKTtiJiYhYSYmKGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXSk7CmImJmE/KHRoaXMuWShiKSx0aGlzLlooYSkpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5KZygpfS5iaW5kKHRoaXMpLDEwMCl9LHBhdXNlOmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLnBsYXkoKX0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIuZ2V0Q3VycmVudFRpbWUoKX0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIuZ2V0RHVyYXRpb24oKX0sTmE6ZnVuY3Rpb24oKXt0aGlzLnRoKCl9LHRoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRDdXJyZW50VGltZSgpOzE+dGhpcy5nZXREdXJhdGlvbigpLWI/dGhpcy5WJiYoMCx0aGlzLlYpKCk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnRoKCl9LmJpbmQodGhpcyksMTAwKX0sCk86ZnVuY3Rpb24oKXtyZXR1cm4iQml0bW92aW4ifX0pfSkoYyk7dmFyIGZiPWMuYWp8fGZiOyhmdW5jdGlvbihjKXtjLiRpPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LGRnOmZ1bmN0aW9uKGIpe3ZhciBhPWIuY29kZSxjPWIubWVzc2FnZTtiLmRhdGEmJihhPWIuZGF0YS5jb2RlLGM9Yi5kYXRhLm1lc3NhZ2UpOzEyMDUhPWEmJig5MDA9PWEmJjA8Yy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImVtcHR5Iik/KHRoaXMudygiZW1wdHkiKSx0aGlzLnRhKCkpOjEwMDk9PWF8fDMwMz09YXx8NDAzPT1hP3RoaXMudGEoKTp0aGlzLnMoKSl9LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2lmKGIuYWRFcnJvckV2ZW50cylmb3IodmFyIGE9MDthPGIuYWRFcnJvckV2ZW50cy5sZW5ndGg7YSsrKXRoaXMuZGcoYi5hZEVycm9yRXZlbnRzKTtiLnBsYXllci5vbigiYWRlcnJvciIsZnVuY3Rpb24oYSl7dGhpcy5kZyhhKX0uYmluZCh0aGlzKSk7CmIucGxheWVyLm9uKCJhZHF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygiYWRxdWFydGlsZSIpfS5iaW5kKHRoaXMpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCkucGxheWVyLmlzUGxheWluZygpP3RoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcyksMTApfX0pfSkoYyk7dmFyIGdiPWMuJGl8fGdiOyhmdW5jdGlvbihjKXtjLmJqPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sd2g6ZnVuY3Rpb24oYil7Yj1uZXcgZmIoYik7Yi5xYT90aGlzLlIoKTp0aGlzLk4oYil8fChiLkZkKE1hdGguY2VpbCgxRTEwKk1hdGgucmFuZG9tKCkpKSx0aGlzLlAoYiksKG5ldyBnYihiLHRoaXMuSykpLmcoKSl9LGc6ZnVuY3Rpb24oKXt0aGlzLkpwfHwodGhpcy5KcD0hMCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzdm06cGxheWVyaW5zdGFuY2UiLGZ1bmN0aW9uKGEpe3RoaXMud2goYS5kZXRhaWwpfS5iaW5kKHRoaXMpKSk7CmlmKHdpbmRvdy5fX3NjaG5lZVZvbk1vcmdlbiYmd2luZG93Ll9fc2NobmVlVm9uTW9yZ2VuLnZpZGVvUGxheWVySW5zdGFuY2VzKWZvcih2YXIgYj0wO2I8d2luZG93Ll9fc2NobmVlVm9uTW9yZ2VuLnZpZGVvUGxheWVySW5zdGFuY2VzLmxlbmd0aDtiKyspdGhpcy53aCh3aW5kb3cuX19zY2huZWVWb25Nb3JnZW4udmlkZW9QbGF5ZXJJbnN0YW5jZXNbYl0pO3RoaXMuUigpfX0pfSkoYyk7dmFyIGhiPWMuYmp8fGhiLFU9bmV3IGhiKHIpO1UuZygpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnJ0PXRoaXMuYVs0XTt0aGlzLmlsPXRoaXMuYVs5XTt0aGlzLmV0PXRoaXMuYVs4XTt0aGlzLkpxPXRoaXMuYVs1XTt0aGlzLkFyPXRoaXMuYVsxMF07dGhpcy5xbT10aGlzLmFbMl07dGhpcy5qaz10aGlzLmFbNF07dGhpcy53cT10aGlzLmFbOV07dGhpcy5VaT10aGlzLmFbNF07dGhpcy5Ecz0KdGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbOF19Yy5Jaj1iO2IucHJvdG90eXBlPXtxdDpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMucnQ6dGhpcy5obChhKX0saGw6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmlsOnRoaXMuZHQoYSl9LGR0OmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5ldDp0aGlzLklxKGEpfSxJcTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuSnE6dGhpcy56cihhKX0senI6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLkFyOnRoaXMucG0oYSl9LHBtOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5xbTp0aGlzLmlrKGEpfSxpazpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuams6dGhpcy52cShhKX0sdnE6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLndxOnRoaXMuVGkoYSl9LFRpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuVWk6dGhpcy5DcyhhKX0sQ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLkRzOnRoaXMuaShhKX0sCmk6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLmo6YX19fSkoYyk7dmFyIGliPWMuSWp8fGliLERjPW5ldyBpYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPURjLnF0KDQpOyhmdW5jdGlvbihjKXtjLlVsPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0UmF3UGxheWVyKCkpO3RoaXMuWShiKTtpZihiKXt2YXIgYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdO2F8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdKTt0aGlzLlooYSl9ZWxzZSB3aW5kb3cuc2V0VGltZW91dCh0aGlzLlMuYmluZCh0aGlzKSwxMDApfSxwYXVzZTpmdW5jdGlvbigpe3RyeXt0Zm1zdWl0ZSgiIyIrdGhpcy5nZXRSYXdQbGF5ZXIoKSkudGZtdmlkZW8oInBhdXNlIil9Y2F0Y2goYil7fX0sCnBsYXk6ZnVuY3Rpb24oKXt0cnl7dGZtc3VpdGUoIiMiK3RoaXMuZ2V0UmF3UGxheWVyKCkpLnRmbXZpZGVvKCJyZXN1bWUiKX1jYXRjaChiKXt0Zm1zdWl0ZSgiIyIrdGhpcy5nZXRSYXdQbGF5ZXIoKSkudGZtdmlkZW8oInBsYXkiKX19LEhjOmZ1bmN0aW9uKCl7dmFyIGI9bTtyZXR1cm4gYiYmYi5ydW5JbnNpZGVDb250YWluZXI/ITA6ITF9LE86ZnVuY3Rpb24oKXtyZXR1cm4iVEZNc3VpdGUifX0pfSkoYyk7dmFyIFY9Yy5VbHx8VjsoZnVuY3Rpb24oYyl7Yy5UbD12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTt4LldjKCIjIitiLCJvbkFkc01hbmFnZXJMb2FkZWQiLGZ1bmN0aW9uKCl7d2luZG93LnNldFRpbWVvdXQodGhpcy53LmJpbmQodGhpcyksMjAwKX0uYmluZCh0aGlzKSk7eC5XYygiIyIrYiwib2JqZWN0IixmdW5jdGlvbihhKXt0aGlzLmhzKGEpfS5iaW5kKHRoaXMpKTsKeC5XYygiIyIrYiwiYWRzTG9hZGVyRmFpbGVkIixmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsImFkc0xvYWRlckZhaWxlZCIpO3RoaXMuSSgpfS5iaW5kKHRoaXMpKTt4LldjKCIjIitiLCJyZXF1ZXN0QWRzRmFpbGVkIixmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsInJlcXVlc3RBZHNGYWlsZWQiKTt0aGlzLkkoKX0uYmluZCh0aGlzKSk7eC5DcSgpfSxoczpmdW5jdGlvbihiKXt2YXIgYT0iIixjO2ZvcihjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSl7YT1pc05hTihiW2NdKT8hMTpiW2NdO2lmKDEwMDk9PWJbY118fDEwMDE9PWJbY118fDMwMz09YltjXXx8NDAzPT1iW2NdKXt0aGlzLncoKTt0aGlzLnRhKCk7cmV0dXJufWZvcih2YXIgZCBpbiBiW2NdKWlmKGJbY10uaGFzT3duUHJvcGVydHkoZCkmJihhPWlzTmFOKGJbY11bZF0pPyExOmJbY11bZF0sMTAwOT09YltjXVtkXXx8MTAwMT09YltjXVtkXXx8MzAzPT1iW2NdW2RdfHw0MDM9PWJbY11bZF0pKXt0aGlzLncoKTsKdGhpcy50YSgpO3JldHVybn19dGhpcy5vKCJhZGVycm9yIixhKTt0aGlzLkkoKX19KX0pKGMpO3ZhciBXPWMuVGx8fFc7KGZ1bmN0aW9uKGMpe2MuVmw9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93LnRmbXN1aXRlKXtmb3IodmFyIGI9W10sYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSxjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10pO2E9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10pO3RoaXMueWQmJihiPWUuVW8oYix0aGlzLnlkKSk7Zm9yKGE9MDthPGIubGVuZ3RoO2ErKyl7dmFyIGQ9YlthXS5pZC5yZXBsYWNlKCJjb250ZW50RWxlbWVudCIsIiIpLGQ9bmV3IFYoZCk7aWYoIXRoaXMuTihkKSl7dGhpcy5QKGQpO3ZhciBmPW5ldyBXKGQsdGhpcy5LKTtmLmcoKX19Zm9yKGE9MDthPGIubGVuZ3RoO2ErKylmb3IoYz0KYlthXTtjLnBhcmVudEVsZW1lbnQ7KXt2YXIgYz1jLnBhcmVudEVsZW1lbnQsZz1jLmdldEF0dHJpYnV0ZSgiaWQiKTtpZihnKXRyeXt0Zm1zdWl0ZSgiIyIrZykudGZtdmlkZW8oInJlc3VtZSIpLHRoaXMueWR8fCh0aGlzLnlkPVtdKSx0aGlzLnlkLnB1c2goYlthXSksZD1uZXcgVihnKSx0aGlzLk4oZCl8fCh0aGlzLlAoZCksZj1uZXcgVyhkLHRoaXMuSyksZi5nKCkpfWNhdGNoKGspe319fXRoaXMuUigpfSxXYzpmdW5jdGlvbihiLGEsYyl7dGhpcy5jYXx8KHRoaXMuY2E9e30pO3RoaXMuY2FbYl18fCh0aGlzLmNhW2JdPXt9KTt0aGlzLmNhW2JdW2FdfHwodGhpcy5jYVtiXVthXT1bXSk7dGhpcy5jYVtiXVthXS5wdXNoKGMpfSx0dTpmdW5jdGlvbihiKXt2YXIgYT1iLnNQbGF5ZXJTZWxlY3RvcjtpZihiKWlmKCF0aGlzLmNhfHx0aGlzLmNhJiYhdGhpcy5jYVthXSl0aGlzLkVjfHwodGhpcy5FYz1bXSksdGhpcy5FYy5wdXNoKGIpLHRoaXMub3QoKSYmKHRoaXMuYWYoKSx0aGlzLmcoKSk7CmVsc2V7dmFyIGM9Im9iamVjdCI7InN0cmluZyI9PT10eXBlb2YgYi5vRXZlbnRUeXBlJiYoYz1iLm9FdmVudFR5cGUpO2lmKHRoaXMuY2FbYV1bY10mJjA8dGhpcy5jYVthXVtjXS5sZW5ndGgpZm9yKHZhciBkPTA7ZDx0aGlzLmNhW2FdW2NdLmxlbmd0aDtkKyspdGhpcy5jYVthXVtjXVtkXShiKX19LENxOmZ1bmN0aW9uKCl7aWYodGhpcy5FYylmb3IodmFyIGI9MDtiPHRoaXMuRWMubGVuZ3RoO2IrKyl7dmFyIGE9dGhpcy5FY1tiXSxjPWEuc1BsYXllclNlbGVjdG9yLGQ9Im9iamVjdCI7InN0cmluZyI9PT10eXBlb2YgYS5vRXZlbnRUeXBlJiYoZD1hLm9FdmVudFR5cGUpO2lmKHRoaXMuY2FbY11bZF0mJjA8dGhpcy5jYVtjXVtkXS5sZW5ndGgpZm9yKHZhciBlPTA7ZTx0aGlzLmNhW2NdW2RdLmxlbmd0aDtlKyspdGhpcy5jYVtjXVtkXVtlXShhKX19LHZpZGVvcGtnSW50ZXJmYWNlOmZ1bmN0aW9uKGIpeyJhdXRvUmVzaXplQ2FsbGJhY2tCZWZvcmUiIT1iLm9FdmVudFR5cGUuaCYmCiJhdXRvUmVzaXplQ2FsbGJhY2tBZnRlciIhPWIub0V2ZW50VHlwZS5oJiZ4LnR1KGIpfX0pfSkoYyk7dmFyIGpiPWMuVmx8fGpiLHg9bmV3IGpiKHIpO2NhKCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTGs9dGhpcy5hWzFdO3RoaXMuRXA9dGhpcy5hWzZdO3RoaXMuaj10aGlzLmFbNV19Yy5lbz1iO2IucHJvdG90eXBlPXtLazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTGs6dGhpcy5EcChhKX0sRHA6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLkVwOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuajphfX19KShjKTt2YXIga2I9Yy5lb3x8a2IsRWM9bmV3IGtiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9RWMuS2soNCk7CihmdW5jdGlvbihjKXtjLlhpPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubXV0ZWQ9ITE7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSYXdQbGF5ZXIoKSk7dGhpcy5ZKGIpO3ZhciBhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07YXx8KGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO3RoaXMuWihhKX0scGF1c2U6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5wYXVzZSgpfSl9LHBsYXk6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5wbGF5KCl9KX0sVmE6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5pc1BsYXlpbmcoKSYmCmIucGF1c2UoKX0pfSx2YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm11dGVkfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkJpbGRNZWRpYVBsYXllciJ9fSl9KShjKTt2YXIgbGI9Yy5YaXx8bGI7KGZ1bmN0aW9uKGMpe2MuWWk9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7JCgiIyIrYikuZGF0YSgibWVkaWFwbGF5ZXIiKS50aGVuKGZ1bmN0aW9uKGEpe3RoaXMucGxheWVyLm11dGVkPWEuZGF0YS5tdXRlZDthLm9uKCJlcnJvciIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIkVycm9yIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7YS5vbigidGltZXVwZGF0ZSIsZnVuY3Rpb24oKXtpZighYS5pc1BsYXlpbmd8fGEuaXNQbGF5aW5nKCkpYS5pc0FkJiZhLmlzQWQoKT90aGlzLncoKTphLmRhdGEmJmEuZGF0YS5hZHMmJmEuZGF0YS5hZHMudmFzdCYmYS5kYXRhLmFkcy52YXN0LnNyY2VzPwoodGhpcy5vKCJub0FkIiwicGxheWVkIiksdGhpcy5JKCkpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vKCJub0FkIiwicGxheWVkIik7dGhpcy5JKCEwKX0uYmluZCh0aGlzKSwyNTApfS5iaW5kKHRoaXMpKTthLm9uKCJwYXVzZSIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIndhaXRpbmciLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKTthLm9uKCJhZEVycm9yIixmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKTthLm9uKCJBZEVycm9yIixmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKTthLm9uKCJBZExvYWRlZCIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIkFkU3RhcnRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7YS5vbigiQWRWaWRlb1N0YXJ0IixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTthLm9uKCJBZFBsYXlpbmciLGZ1bmN0aW9uKCl7dGhpcy53KCl9LmJpbmQodGhpcykpO2Eub24oIkFkVmlkZW9GaXJzdFF1YXJ0aWxlIiwKZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7YS5vbigiQWRWaWRlb01pZHBvaW50IixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTthLm9uKCJBZFZpZGVvVGhpcmRRdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSl9LmJpbmQodGhpcykpfX0pfSkoYyk7dmFyIG1iPWMuWWl8fG1iOyhmdW5jdGlvbihjKXtjLlppPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm1lZGlhcGxheWVyIik7aWYod2luZG93LmRlJiZ3aW5kb3cuZGUuYmlsZCYmd2luZG93LmRlLmJpbGQubWVkaWFwbGF5ZXImJmImJjA8Yi5sZW5ndGgpZm9yKHZhciBhIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGM9YlthXSxkPSIiO3RyeXtkPWMuZ2V0QXR0cmlidXRlKCJpZCIpfWNhdGNoKGUpe2Q9Yy5pZH1pZihkJiYkKCIjIitkKS5kYXRhKCJtZWRpYXBsYXllciIpKXRyeXt2YXIgZz0KbmV3IGxiKGQpO3RoaXMuTihnKXx8KHRoaXMuUChnKSwobmV3IG1iKGcsdGhpcy5LKSkuZygpKX1jYXRjaChrKXt9fXRoaXMuUigpfSxOOmZ1bmN0aW9uKGIpe3ZhciBhPWIuZ2V0UmF3UGxheWVyKCk7JCgiIyIrYSk7Zm9yKHZhciBjIGluIHRoaXMuTWEpaWYoYT09dGhpcy5NYVtjXS5nZXRSYXdQbGF5ZXIoKSlyZXR1cm4hMDtyZXR1cm4gdGhpcy5NYVtiLmphKCldPyEwOiExfX0pfSkoYyk7dmFyIG5iPWMuWml8fG5iLG9iPW5ldyBuYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5Fbz10aGlzLmFbNF07dGhpcy50dj10aGlzLmFbMV07dGhpcy5mbT10aGlzLmFbNl07dGhpcy5vcD10aGlzLmFbM107dGhpcy5qPXRoaXMuYVsyXX1jLndyPWI7Yi5wcm90b3R5cGU9e0RvOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Fbzp0aGlzLnN2KGEpfSxzdjpmdW5jdGlvbihhKXtyZXR1cm4gMTwKYT90aGlzLnR2OnRoaXMuZW0oYSl9LGVtOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5mbTp0aGlzLm5wKGEpfSxucDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMub3A6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBwYj1jLndyfHxwYixGYz1uZXcgcGIoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1GYy5Ebyg0KTsoZnVuY3Rpb24oYyl7Yy5Vaz11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPSExO3RoaXMuZ2V0UmF3UGxheWVyKCkuZW52dmFycyYmdGhpcy5nZXRSYXdQbGF5ZXIoKS5lbnZ2YXJzKCk7dGhpcy5nZXRSYXdQbGF5ZXIoKS5jb250YWluZXJJRCYmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSYXdQbGF5ZXIoKS5jb250YWluZXJJRCkpOwpiJiYoYT1iKTt0aGlzLlkoYik7dGhpcy5aKGEpO3RoaXMuaHQodGhpcy5nZXRSYXdQbGF5ZXIoKSxiKTt0aGlzLmdldFJhd1BsYXllcigpfSxwYXVzZTpmdW5jdGlvbigpe30scGxheTpmdW5jdGlvbigpe30saHQ6ZnVuY3Rpb24oYixhKXtiJiZiLnBhdXNlRXZlbnQmJmEuYWRkRXZlbnRMaXN0ZW5lcihiLnBhdXNlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiZ0aGlzLmhhLnBhdXNlJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5wYXVzZSYmdGhpcy5oYS5wYXVzZSgpfS5iaW5kKHRoaXMpKTtiJiZiLnJlc3VtZUV2ZW50JiZhLmFkZEV2ZW50TGlzdGVuZXIoYi5yZXN1bWVFdmVudCxmdW5jdGlvbigpe3RoaXMuaGEmJnRoaXMuaGEucmVzdW1lJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5yZXN1bWUmJnRoaXMuaGEucmVzdW1lKCl9LmJpbmQodGhpcykpO2ImJmIubXV0ZUV2ZW50JiZhLmFkZEV2ZW50TGlzdGVuZXIoYi5tdXRlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiYKdGhpcy5oYS5tdXRlJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5tdXRlJiZ0aGlzLmhhLm11dGUoKX0uYmluZCh0aGlzKSk7YiYmYi51bm11dGVFdmVudCYmYS5hZGRFdmVudExpc3RlbmVyKGIudW5tdXRlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiZ0aGlzLmhhLnVubXV0ZSYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuaGEudW5tdXRlJiZ0aGlzLmhhLnVubXV0ZSgpfS5iaW5kKHRoaXMpKX0sU2c6ZnVuY3Rpb24oYil7dGhpcy5oYT1ifSxPOmZ1bmN0aW9uKCl7cmV0dXJuIk9ubHlIT01BRCJ9fSl9KShjKTt2YXIgcWI9Yy5Va3x8cWI7KGZ1bmN0aW9uKGMpe2MuVGs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKTt0aGlzLmVpPSExfSxnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKSxhPXRoaXMuZ2V0UGxheWVyKCk7Yi5hdXRvc3RhcnQmJiF0aGlzLmVpJiYodGhpcy5JKCksdGhpcy5laT0hMCx0aGlzLnJhKCkpOwphLklhKCkuYWRkRXZlbnRMaXN0ZW5lcihiLnBsYXlFdmVudCxmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKX19KX0pKGMpO3ZhciByYj1jLlRrfHxyYjsoZnVuY3Rpb24oYyl7Yy5Waz1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtKXtpZihtLnBsYXllcil7dmFyIGI9bS5wbGF5ZXI7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGIpdHJ5e2I9YigpfWNhdGNoKGEpe2UudHJhY2soIm9ubHlIT01BRENvbmZGYWlsZWQiLCIiLCEwKX1mb3IodmFyIGM9ITEsZD0wO2Q8Yi5sZW5ndGg7ZCsrKWM9bmV3IHFiKGJbZF0pLHRoaXMuTihjKXx8KHRoaXMuUChjKSwobmV3IHJiKGMsdGhpcy5LKSkuZygpKX19ZWxzZSB0aGlzLlIoKX19KX0pKGMpO3ZhciBzYj1jLlZrfHxzYixYPW5ldyBzYihyKTtYLmcoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CnRoaXMueGw9dGhpcy5hWzddO3RoaXMuemo9dGhpcy5hWzNdO3RoaXMud289dGhpcy5hWzddO3RoaXMueWk9dGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbNV19Yy5Ccj1iO2IucHJvdG90eXBlPXt3bDpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMueGw6dGhpcy55aihhKX0seWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnpqOnRoaXMudm8oYSl9LHZvOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMud286dGhpcy54aShhKX0seGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLnlpOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuajphfX19KShjKTt2YXIgdGI9Yy5Ccnx8dGIsR2M9bmV3IHRiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9R2Mud2woNCk7KGZ1bmN0aW9uKGMpe2MuR209dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSwKUzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCkucGFyZW50Tm9kZTt0aGlzLlkoYik7Yj10aGlzLmdldFJhd1BsYXllcigpO3RoaXMuWihiKTt0aGlzLmlzUGxheWluZz0hMTtiLmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5pc1BsYXlpbmc9ITB9LmJpbmQodGhpcykpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheSgpfSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGI/Yi5tdXRlZDohMH0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5jdXJyZW50VGltZX0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5kdXJhdGlvbn0sTmE6ZnVuY3Rpb24oKXswPHRoaXMuZ2V0RHVyYXRpb24oKSYmMDx0aGlzLmdldEN1cnJlbnRUaW1lKCkmJgoxLjU+dGhpcy5nZXREdXJhdGlvbigpLXRoaXMuZ2V0Q3VycmVudFRpbWUoKSYmdGhpcy5WPygwLHRoaXMuVikoKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuTmEoKX0uYmluZCh0aGlzKSw0MDApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIldGdjQifX0pfSkoYyk7dmFyIHViPWMuR218fHViOyhmdW5jdGlvbihjKXtjLkZtPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LFJiOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKSxiPWIuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIuaW1hQWRzTG9hZGVyfSxndDpmdW5jdGlvbihiKXtiLmFkZEV2ZW50TGlzdGVuZXIoZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUixmdW5jdGlvbihhKXthPWEuZ2V0RXJyb3IoKTthLmdldEVycm9yQ29kZSgpO3RoaXMuJGF8fCh0aGlzLiRhPVtdKTt0aGlzLiRhLnB1c2goYS5nZXRFcnJvckNvZGUoKSk7MTAwOT09YS5nZXRFcnJvckNvZGUoKXx8CjMwMz09YS5nZXRFcnJvckNvZGUoKXx8NDAzPT1hLmdldEVycm9yQ29kZSgpP3RoaXMudGEoKTp0aGlzLm8oImFkZXJyb3IiLGEuZ2V0RXJyb3JDb2RlKCkpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkc01hbmFnZXJMb2FkZWQiLGZ1bmN0aW9uKCl7dGhpcy5uYz0hMDt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yi5hZGRFdmVudExpc3RlbmVyKCJsb2ciLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKX0sZzpmdW5jdGlvbigpe3RoaXMucygpO3RoaXMuZ2V0UGxheWVyKCk7dGhpcy5BYT90aGlzLmd0KHRoaXMuQWEpOih0aGlzLkFhPXRoaXMuUmIoKSx3aW5kb3cuc2V0VGltZW91dCh0aGlzLmcuYmluZCh0aGlzKSwxMDApKX0sczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCk7aWYoYi5pc1BsYXlpbmcmJjE8Yi5nZXRDdXJyZW50VGltZSgpKXtpZighdGhpcy5BYSl7dGhpcy5JKCk7cmV0dXJufWlmKCF0aGlzLm5jKXt0aGlzLkkoKTtyZXR1cm59Yj0hMDtpZih0aGlzLiRhJiYKdGhpcy4kYS5sZW5ndGgmJjE8dGhpcy4kYS5sZW5ndGgpZm9yKHZhciBhPTA7YTx0aGlzLiRhLmxlbmd0aC0xO2ErKykxMDA5IT10aGlzLiRhW2FdJiYzMDMhPXRoaXMuJGFbYV0mJjQwMyE9dGhpcy4kYVthXSYmKGI9ITEpO2lmKGIpdGhpcy53KCJlbXB0eSIpLHRoaXMudGEoKTtlbHNle3RoaXMuSSgpO3JldHVybn19d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoKX0uYmluZCh0aGlzKSw1MDApfX0pfSkoYyk7dmFyIHZiPWMuRm18fHZiOyhmdW5jdGlvbihjKXtjLkhtPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe3RoaXMuVWE9LTE7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIik7aWYod2luZG93LndmdjRfaHRtbDVfcGxheWVyJiYwPGIubGVuZ3RoKWZvcih2YXIgYSBpbiBiKXt2YXIgYz1uZXcgdWIoYi5pdGVtKGEpKTt0aGlzLk4oYyl8fC0xPT1jLmlkLnNlYXJjaCgidmlkZW9fIil8fCh0aGlzLlAoYyksCihuZXcgdmIoYyx0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIHdiPWMuSG18fHdiLHhiPW5ldyB3YihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5McT10aGlzLmFbN107dGhpcy5Vcj10aGlzLmFbMl07dGhpcy5Hbz10aGlzLmFbNl07dGhpcy52cj10aGlzLmFbOV07dGhpcy5Edj10aGlzLmFbM107dGhpcy56bj10aGlzLmFbMV07dGhpcy5xcz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbN119Yy5Qcz1iO2IucHJvdG90eXBlPXtLcTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuTHE6dGhpcy5UcihhKX0sVHI6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLlVyOnRoaXMuRm8oYSl9LEZvOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5Hbzp0aGlzLnVyKGEpfSx1cjpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMudnI6dGhpcy5DdihhKX0sQ3Y6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8CmE/dGhpcy5Edjp0aGlzLnluKGEpfSx5bjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuem46dGhpcy5wcyhhKX0scHM6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLnFzOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLmo6YX19fSkoYyk7dmFyIHliPWMuUHN8fHliLEhjPW5ldyB5YigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPUhjLktxKDQpOyhmdW5jdGlvbihjKXtjLkhsPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm10di1wbGF5ZXItY29udGFpbmVyIilbMF07dGhpcy5ZKGIpO3RoaXMuWihiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdKTt0aGlzLlVlPSExfSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCk7CndpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpe3RoaXMuV3MoKX0uYmluZCh0aGlzKSw1MDApfSxXczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UG9zaXRpb24oKSxhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiZ0aGlzLlYmJnRoaXMuVigpfSxnZXREdXJhdGlvbjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT0wO2IucGxheWJhY2suZ2V0RHVyYXRpb24mJihhPWIucGxheWJhY2suZ2V0RHVyYXRpb24oKSk7cmV0dXJuIGF9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPTA7Yi5wbGF5YmFjay5nZXRQb3NpdGlvbiYmKGE9Yi5wbGF5YmFjay5nZXRQb3NpdGlvbigpKTtyZXR1cm4gYX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBsYXliYWNrLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLlVlJiZ3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLlVlKTsKdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5YmFjay5wbGF5KCl9LGlzUGxheWluZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIucGxheWJhY2smJmIucGxheWJhY2suZ2V0UGxheVN0YXRlPyhiLnBsYXliYWNrLmdldFBsYXlTdGF0ZSgpLCJwbGF5aW5nIj09Yi5wbGF5YmFjay5nZXRQbGF5U3RhdGUoKSk6ITF9LFp0OmZ1bmN0aW9uKCl7dGhpcy5VZT13aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt0aGlzLnBhdXNlKCl9LmJpbmQodGhpcyksMTApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIlJvY2tlcnkifX0pfSkoYyk7dmFyIHpiPWMuSGx8fHpiOyhmdW5jdGlvbihjKXtjLkdsPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSk7dGhpcy5mYz0wfSxnOmZ1bmN0aW9uKCl7dGhpcy5Tcj0xMDt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO3RoaXMuZmN8fCh0aGlzLmZjPTAsYi5hZGRFdmVudExpc3RlbmVyKCJhZEVycm9yIiwKZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiKTt0aGlzLnMoKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXt9KSk7d2luZG93LnZpZGVvcGxhemE/KHdpbmRvdy52aWRlb3BsYXphLmJ1aWxkRGF0ZXx8KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpLHdpbmRvdy52aWRlb3BsYXphLmNvcmU/KHdpbmRvdy52aWRlb3BsYXphLmNvcmUuQWRDYWxsTW9kdWxlfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5UcmFja2VyfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5tb2RlbHx8KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpLHdpbmRvdy52aWRlb3BsYXphLmNvcmUucGFyc2V8fCh0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGF6YSIpLAp0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5yZXF1ZXN0fHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSkpOih0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGF6YSIpLHRoaXMucygpKSx3aW5kb3cudmlkZW9wbGF6YS52ZXJzaW9uTnVtYmVyfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSkpOih0aGlzLmZjfHx0aGlzLmZjKyssdGhpcy5mYzw9dGhpcy5Tcj8odGhpcy5mYysrLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksNTAwKSk6KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nKCk/KHRoaXMuZ2V0UGxheWVyKCkuWnQoKSx0aGlzLkkoKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoKX0uYmluZCh0aGlzKSwxMDApfX0pfSkoYyk7CnZhciBBYj1jLkdsfHxBYjsoZnVuY3Rpb24oYyl7Yy5JbD1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJtdHYtcGxheWVyLWNvbnRhaW5lciIpLGE9ITE7YiYmYlswXSYmKGE9YlswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSkmJmFbMF0mJndpbmRvdy5wbGF5ZXJBcGkmJndpbmRvdy5wbGF5ZXJBcGkucGxheWJhY2smJmImJihiPW5ldyB6Yih3aW5kb3cucGxheWVyQXBpKSx0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBBYihiLHRoaXMuSykpLmcoKSkpO3RoaXMuUigpfX0pfSkoYyk7dmFyIEJiPWMuSWx8fEJiLENiPW5ldyBCYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5GbD10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbOF19Yy52cD1iO2IucHJvdG90eXBlPQp7RWw6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkZsOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuajphfX19KShjKTt2YXIgRGI9Yy52cHx8RGIsSWM9bmV3IERiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9SWMuRWwoNCk7KGZ1bmN0aW9uKGMpe2MuQ2w9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS5wYXJlbnROb2RlLnBhcmVudE5vZGU7dGhpcy5ZKGIpO2I9dGhpcy5nZXRSYXdQbGF5ZXIoKTt0aGlzLlooYik7dGhpcy5pc1BsYXlpbmc9ITE7Yi5hZGRFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIixmdW5jdGlvbigpe3RoaXMuaXNQbGF5aW5nPSEwfS5iaW5kKHRoaXMpKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlKCl9LApwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5KCl9LGdldEN1cnJlbnRUaW1lOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPSIiO2IuY3VycmVudFRpbWUmJihhPWIuY3VycmVudFRpbWUpO3JldHVybiBhfSxnZXREdXJhdGlvbjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT0wO2IuZHVyYXRpb24mJihhPWIuZHVyYXRpb24pO3JldHVybiBhfSxOYTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0Q3VycmVudFRpbWUoKSxhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiZhJiYxPmEtYj90aGlzLlYoKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuTmEoKX0uYmluZCh0aGlzKSwyMDApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIlJhZGlhbnRNUCJ9fSl9KShjKTt2YXIgRWI9Yy5DbHx8RWI7KGZ1bmN0aW9uKGMpe2MuQmw9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLmdldFBsYXllcigpLklhKCksYT10aGlzLmdldFBsYXllcigpLnZpZGVvVGFnO2EmJmEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZHN0YXJ0IixmdW5jdGlvbigpe3RoaXMucmEoKTt0aGlzLmdldFBsYXllcigpLmlzUGxheWluZz0hMX0uYmluZCh0aGlzKSk7dGhpcy5nZXRQbGF5ZXIoKTtiLmFkZEV2ZW50TGlzdGVuZXIoInBsYXlpbmciLGZ1bmN0aW9uKCl7dGhpcy5ObygpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkbG9hZGVkIixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkc3RhcnRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yj10aGlzLnBkKCk7MDxiLmdldEN1cnJlbnRUaW1lKCk/dGhpcy5HcigpOnRoaXMuZ2coKTtiLmF1dG9wbGF5JiZ3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuT2YoKXx8KHRoaXMubygiY29udGVudHBsYXkiKSx0aGlzLnMoITApKX0uYmluZCh0aGlzKSwKMUUzKX0sTm86ZnVuY3Rpb24oKXt0aGlzLk9mKCl8fHRoaXMucyghMCl9LEdyOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wZCgpOyFiLm5hJiZiLlcmJmIuT3YmJmIuUXYmJih0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIiksdGhpcy5zKCkpfSxnZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMucGQoKTtiLmFkc0xvYWRlcj9iLmFkc0xvYWRlci5hZGRFdmVudExpc3RlbmVyKGdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUuQURfRVJST1IsZnVuY3Rpb24oYSl7dmFyIGI7YTp7YT1hLmdldEVycm9yKCk7Zm9yKGIgaW4gYSlpZigibnVtYmVyIj09dHlwZW9mIGFbYl0pe2I9YVtiXTticmVhayBhfWI9dm9pZCAwfTEwMDk9PWJ8fDMwMz09Ynx8NDAzPT1iPyh0aGlzLncoKSx0aGlzLnRhKCkpOih0aGlzLm8oImFkZXJyb3IiLGIpLHRoaXMucygpKX0uYmluZCh0aGlzKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmdnKCl9LmJpbmQodGhpcyksMTAwKX0scGQ6ZnVuY3Rpb24oKXtpZighdGhpcy5uaClmb3IodmFyIGI9Cm0ucGxheWVyYXBpKCksYT10aGlzLmdldFBsYXllcigpLklhKCkuaWQsYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10uaWQ9PWEmJih0aGlzLm5oPWJbY10pO3JldHVybiB0aGlzLm5ofSxodzpmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuaW1hPyFpbWEudmlkZW8uY2xpZW50LmpzVGFnJiYhaW1hLnZpZGVvLmNsaWVudC50YWdnZWQmJiFpbWEudmlkZW8uY2xpZW50LmdldEVEYXRhOiExfSxzOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nP2I/dGhpcy5wZCgpLmFkc0xvYWRlcj90aGlzLkkoITApOnRoaXMuSSgpOnRoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwKX19KX0pKGMpO3ZhciBGYj1jLkJsfHxGYjsoZnVuY3Rpb24oYyl7Yy5EbD1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtJiZtLnBsYXllcmFwaSl7dmFyIGI9bS5wbGF5ZXJhcGkoKTtpZihiLmxlbmd0aCl7Zm9yKHZhciBhPQowO2E8Yi5sZW5ndGg7YSsrKXt2YXIgYz1uZXcgRWIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYlthXS5pZCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pO3RoaXMuTihjKXx8KHRoaXMuUChjKSwobmV3IEZiKGMsdGhpcy5LKSkuZygpKX1yZXR1cm59fXRoaXMuUigpfX0pfSkoYyk7dmFyIEdiPWMuRGx8fEdiLEhiPW5ldyBHYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5lcD10aGlzLmFbMV07dGhpcy51aT10aGlzLmFbMTBdO3RoaXMuSWk9dGhpcy5hWzZdO3RoaXMud3M9dGhpcy5hWzddO3RoaXMueG49dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbMl19Yy5RbD1iO2IucHJvdG90eXBlPXtjcDpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLmVwOnRoaXMudGkoYSl9LHRpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy51aTp0aGlzLkhpKGEpfSxIaTpmdW5jdGlvbihhKXtyZXR1cm4gMTA8CmE/dGhpcy5JaTp0aGlzLnZzKGEpfSx2czpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMud3M6dGhpcy53bihhKX0sd246ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLnhuOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuajphfX19KShjKTt2YXIgSWI9Yy5RbHx8SWIsSmM9bmV3IEliKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9SmMuY3AoNCk7KGZ1bmN0aW9uKGMpe2MuRWs9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5wbGF5ZXIuaWQpO0cmJihiPWIuZmlyc3RDaGlsZCk7aWYoYil7dGhpcy5ZKGIpO2lmKGIudGFnTmFtZSl7dmFyIGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXTthfHwoYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7CmF8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImVtYmVkIilbMF0pfWE/dGhpcy5aKGEpOnRoaXMucGEoKX1lbHNlIHRoaXMucGEoKX0sZnc6ZnVuY3Rpb24oKXt2YXIgYj0hMTswPD1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpLmluZGV4T2YoInNwaWVnZWwuZGUiKSYmKGI9ITApO3JldHVybiBifSxwYXVzZTpmdW5jdGlvbigpe2lmKEcpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7d2luZG93Ll9wbGF5LmNvbnRyb2wuaW50ZXJhY3QucGF1c2UoYi5pZCl9ZWxzZSB3aW5kb3cuX3BsYXkuYWRkb25zLnN2bS5zZW5kQ29tbWFuZCgicGF1c2UiKX0scGxheTpmdW5jdGlvbigpe2lmKEcpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7d2luZG93Ll9wbGF5LmNvbnRyb2wuaW50ZXJhY3QucGxheShiLmlkKX1lbHNlIHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLnNlbmRDb21tYW5kKCJwbGF5Iil9LFZhOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy52aWRlb1RhZztyZXR1cm4gYiYmIWIucGF1c2VkPwoodGhpcy5wYXVzZSgpLCEwKTohMX0sTzpmdW5jdGlvbigpe3JldHVybiJuZXh0In0sSGM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSWE6ZnVuY3Rpb24oKXt2YXIgYjtHPyhiPXRoaXMuZ2V0UmF3UGxheWVyKCksYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChiLmlkKS5maXJzdENoaWxkKTpiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLmdldFBsYXllckNvbnRhaW5lcigpKTtiIT10aGlzLmNvbnRhaW5lciYmKHRoaXMuY29udGFpbmVyPWIpO3JldHVybiB0aGlzLmNvbnRhaW5lcn19KX0pKGMpO3ZhciBZPWMuRWt8fFk7KGZ1bmN0aW9uKGMpe2MuRGs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMuV2U9IiI7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtiJiYodGhpcy5XZT1iLmlkKTtHP3dpbmRvdy5fcGxheS5jb25maWcuYWRkQWRkb25MaXN0ZW5lcihmdW5jdGlvbihhKXt2YXIgYj0KYS5wbGF5ZXJDb250YWluZXI7YiYmdGhpcy5XZSYmYiE9dGhpcy5XZXx8ImFkZXJyb3IiIT1hLmV2ZW50fHxlLkJhKCJ0ZWxlNS5kZSIpJiYicG9zdHJvbGwiPT1hLmFkVHlwZXx8KGEuYWRVUkwmJihtLmFkVGFnPWEuYWRVUkwpLHRoaXMubygiYWRlcnJvciIsYS5rdyksdGhpcy5JKCksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnJhKCl9LmJpbmQodGhpcyksMTAwKSl9LmJpbmQodGhpcyksInN2bSIpOndpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLnNldExpc3RlbmVyKGZ1bmN0aW9uKGEpeyJhZGVycm9yIj09YSYmKHRoaXMubygiYWRlcnJvciIpLHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDEwMCkpfS5iaW5kKHRoaXMpKX19KX0pKGMpO3ZhciBaPWMuRGt8fFo7KGZ1bmN0aW9uKGMpe2MuRms9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93Ll9wbGF5JiYKd2luZG93Ll9wbGF5LmFkZG9ucyYmd2luZG93Ll9wbGF5LmFkZG9ucy5zdm0pe0c9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLmdldFBsYXllckNvbnRhaW5lcj8hMTohMDt2YXIgYjtpZihHKWZvcih2YXIgYT13aW5kb3cuX3BsYXkuY29udHJvbC5nZXRJbnN0YW5jZXMoKSxjPWEubGVuZ3RoLGQ9MDtkPGM7ZCsrKXtpZihiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFbZF0pKWI9bmV3IFkoYiksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFooYix0aGlzLkspLGIuZygpKX1lbHNlIGlmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQod2luZG93Ll9wbGF5LmFkZG9ucy5zdm0uZ2V0UGxheWVyQ29udGFpbmVyKCkpKWI9bmV3IFkoYiksYi5xYT90aGlzLmFmKCk6dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFooYix0aGlzLkspLGIuZygpKX10aGlzLlIoKX19KX0pKGMpO3ZhciBHLEpiPWMuRmt8fEpiLEtiPW5ldyBKYihoYSk7Yz1jfHwKe307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnhwPXRoaXMuYVs1XTt0aGlzLlFtPXRoaXMuYVs3XTt0aGlzLlNtPXRoaXMuYVs0XTt0aGlzLnNpPXRoaXMuYVs5XTt0aGlzLnZqPXRoaXMuYVs4XTt0aGlzLlhsPXRoaXMuYVs5XTt0aGlzLkV1PXRoaXMuYVsxMF07dGhpcy5ZdD10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs0XX1jLllvPWI7Yi5wcm90b3R5cGU9e3dwOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy54cDp0aGlzLlBtKGEpfSxQbTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuUW06dGhpcy5SbShhKX0sUm06ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5TbTp0aGlzLnJpKGEpfSxyaTpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuc2k6dGhpcy51aihhKX0sdWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLnZqOnRoaXMuV2woYSl9LFdsOmZ1bmN0aW9uKGEpe3JldHVybiA1PAphP3RoaXMuWGw6dGhpcy5EdShhKX0sRHU6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLkV1OnRoaXMuWHQoYSl9LFh0OmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5ZdDp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLmo6YX19fSkoYyk7dmFyIExiPWMuWW98fExiLEtjPW5ldyBMYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPUtjLndwKDQpOyhmdW5jdGlvbihjKXtjLk5tPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpO2lmKGImJmJbMF0pe2Zvcih2YXIgYT1iPWJbMF07YSYmYS5wYXJlbnROb2RlOyl7aWYoIkJPRFkiPT1hLnBhcmVudE5vZGUubm9kZU5hbWUpe2E9YS5wYXJlbnROb2RlO2JyZWFrfWE9YS5wYXJlbnROb2RlfXRoaXMuWihiKTsKdGhpcy5ZKGEpO3RoaXMuU2Q9ITE7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhkRXZlbnQiLGZ1bmN0aW9uKGEpe2lmKGEuZGV0YWlsKXtpZigiY29udGVudFBsYXllclBsYXkiPT1hLmRldGFpbC5uYW1lKXRyeXt3aW5kb3cuREw4X29uQWRDb21wbGV0ZWQoKSx0aGlzLlNkPSExfWNhdGNoKGIpe31pZigiYWRSZXF1ZXN0Ij09YS5kZXRhaWwubmFtZSl0cnl7dGhpcy5TZHx8KHRoaXMuU2Q9ITAsd2luZG93LkRMOF9vbkFkU3RhcnRlZCgpKX1jYXRjaChjKXt9fX0uYmluZCh0aGlzKSl9ZWxzZSB0aGlzLnBhKCl9LHBhdXNlOmZ1bmN0aW9uKCl7dHJ5e3dpbmRvdy5ETDhfb25Db250ZW50UGF1c2VSZXF1ZXN0ZWQoKX1jYXRjaChiKXt0aGlzLnZpZGVvVGFnLnBhdXNlKCl9fSxwbGF5OmZ1bmN0aW9uKCl7dHJ5e3dpbmRvdy5ETDhfb25Db250ZW50UmVzdW1lUmVxdWVzdGVkKCl9Y2F0Y2goYil7dGhpcy52aWRlb1RhZy5wbGF5KCl9fSxWYTpmdW5jdGlvbigpe2lmKCF0aGlzLnZpZGVvVGFnLnBhdXNlZClyZXR1cm4gdGhpcy5wYXVzZSgpLAohMH0sTzpmdW5jdGlvbigpe3JldHVybiJ4eW1hdGljIn19KX0pKGMpO3ZhciBNYj1jLk5tfHxNYjsoZnVuY3Rpb24oYyl7Yy5NbT12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxpdDpmdW5jdGlvbihiKXtiJiZiLmFkZEV2ZW50TGlzdGVuZXImJihiLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBsZXRlIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJpbXByZXNzaW9uIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJmaXJzdHF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJtaWRwb2ludCIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigidGhpcmRxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigiYWRzTWFuYWdlckxvYWRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigiYWRzRXJyb3IiLApmdW5jdGlvbihhKXt0aGlzLmJkKGEpfS5iaW5kKHRoaXMpKSxiLmFkZEV2ZW50TGlzdGVuZXIoImFkRXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuYmQoYSl9LmJpbmQodGhpcykpKTtiJiZiLmFkZEFkRXJyb3JMaXN0ZW5lciYmYi5hZGRBZEVycm9yTGlzdGVuZXIoZnVuY3Rpb24oYSl7dGhpcy5iZChhKX0uYmluZCh0aGlzKSl9LGJkOmZ1bmN0aW9uKGIpe3ZhciBhPXt9O2IuZ2V0RXJyb3ImJihiLmdldEVycm9yKCksYT1iLmdldEVycm9yKCkpO2EuZ2V0RXJyb3JDb2RlPyhhLmdldEVycm9yQ29kZSgpLHRoaXMubygiYWRlcnJvciIsYS5nZXRFcnJvckNvZGUoKSksMTAwOT09YS5nZXRFcnJvckNvZGUoKXx8MzAzPT1hLmdldEVycm9yQ29kZSgpfHw0MDM9PWEuZ2V0RXJyb3JDb2RlKCk/dGhpcy53KCk6dGhpcy5JKCkpOih0aGlzLm8oIm5vZnJhbWV3b3JrIiksdGhpcy5JKCkpfSxMZjpmdW5jdGlvbigpe2lmKHdpbmRvdy5fX2RsOF9hZEVycm9yRXZlbnRCdWNrZXQpZm9yKHZhciBiPTA7YjwKd2luZG93Ll9fZGw4X2FkRXJyb3JFdmVudEJ1Y2tldC5sZW5ndGg7YisrKXRoaXMuYmQod2luZG93Ll9fZGw4X2FkRXJyb3JFdmVudEJ1Y2tldFtiXSk7dGhpcy51YSgpfHx3aW5kb3cuc2V0VGltZW91dCh0aGlzLkxmLmJpbmQodGhpcyksMTAwKX0sZzpmdW5jdGlvbigpe3dpbmRvdy5fX2RsOF9hZHNMb2FkZXImJnRoaXMuaXQod2luZG93Ll9fZGw4X2Fkc0xvYWRlcik7dGhpcy5MZigpfX0pfSkoYyk7dmFyIE5iPWMuTW18fE5iOyhmdW5jdGlvbihjKXtjLk9tPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe2lmKHdpbmRvdy5ETDhfR0xPQkFMUyl7dmFyIGI9bmV3IE1iKHdpbmRvdy5ETDhfR0xPQkFMUyk7Yi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLChuZXcgTmIoYix0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIE9iPWMuT218fE9iLFBiPW5ldyBPYihoYSk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT0KQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLkZyPXRoaXMuYVsyXTt0aGlzLklzPXRoaXMuYVs4XTt0aGlzLlhuPXRoaXMuYVsxXTt0aGlzLlVqPXRoaXMuYVszXTt0aGlzLlpxPXRoaXMuYVs5XTt0aGlzLmo9dGhpcy5hWzZdfWMuRm49YjtiLnByb3RvdHlwZT17RXI6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLkZyOnRoaXMuSHMoYSl9LEhzOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5Jczp0aGlzLlduKGEpfSxXbjpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuWG46dGhpcy5UaihhKX0sVGo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlVqOnRoaXMuWXEoYSl9LFlxOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5acTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLmo6YX19fSkoYyk7dmFyIFFiPWMuRm58fFFiLExjPW5ldyBRYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLAoibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1MYy5Fcig0KTsoZnVuY3Rpb24oYyl7Yy5qbT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt0aGlzLnJoPSExO3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7aWYoYi52aWRlb01vZGVsKXt2YXIgYT1iLnZpZGVvTW9kZWwuZ2V0KCJwbGF5ZXJFbGVtZW50Iik7aWYoYSl7dGhpcy5ZKGEpO3ZhciBjPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07Y3x8KGM9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO2M/KHRoaXMuWihjKSxiLnZpZGVvTW9kZWwub2JzZXJ2ZSgicG9zaXRpb24iLGZ1bmN0aW9uKGEpe3RoaXMuYXM9YX0uYmluZCh0aGlzKSksYi52aWRlb01vZGVsLm9ic2VydmUoImR1cmF0aW9uIixmdW5jdGlvbihhKXt0aGlzLmR1cmF0aW9uPWF9LmJpbmQodGhpcykpKTp0aGlzLnBhKCl9ZWxzZSB0aGlzLnBhKCl9ZWxzZSB0aGlzLnBhKCl9LApxdzpmdW5jdGlvbigpe30sdmE6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLGE9MTtyZXR1cm4gYi52aWRlb01vZGVsJiZiLnZpZGVvTW9kZWwuZ2V0JiYoYT1iLnZpZGVvTW9kZWwuZ2V0KCJ2b2x1bWUiKSwwPGEpPyExOiEwfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkudmlkZW9Nb2RlbC5wYXVzZSgpfSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb01vZGVsLnBsYXkoKX0sVmE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb01vZGVsLmdldCgiaXNQYXVzZWQiKT8hMToodGhpcy5wYXVzZSgpLCEwKX0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc30sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kdXJhdGlvbn0sTzpmdW5jdGlvbigpe3JldHVybiJ0djIifSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkudmlkZW9Nb2RlbC5vYnNlcnZlKCJwb3NpdGlvbiIsCmZ1bmN0aW9uKGIpe3RoaXMuTWQoYil9LmJpbmQodGhpcykpfSxNZDpmdW5jdGlvbihiKXt0aGlzLmdldFJhd1BsYXllcigpO3RoaXMuZ2V0Q3VycmVudFRpbWUoKT5iJiYoYj10aGlzLmdldEN1cnJlbnRUaW1lKCkpO3ZhciBhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiYhdGhpcy5yaCYmKHRoaXMucmg9ITAsdGhpcy5WJiZ0aGlzLlYoKSl9fSl9KShjKTt2YXIgUD1jLmptfHxQOyhmdW5jdGlvbihjKXtjLmltPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LEFhOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZighdGhpcy5wZSlpZih0aGlzLkFifHwodGhpcy5BYj0wKSx0aGlzLkFiKyssMTU8dGhpcy5BYil7aWYod2luZG93LmltYSYmd2luZG93LmltYS5jb21tb24mJndpbmRvdy5pbWEuSW1hU2RrU2V0dGluZ3MmJndpbmRvdy5pbWEuY29tbW9uLmdldFZpZGVvTWV0YWRhdGEmJndpbmRvdy5pbWEuY29tbW9uLnRyaWdnZXJNZWFzdXJhYmxlRXZlbnQpcmV0dXJuIHdpbmRvdy5jYW5SdW5BZHM/CnRoaXMuSXQoKTp0aGlzLnMoITApLCEwO3RoaXMubygibm9mcmFtZXdvcmsiLCJJTUEiKTtiLnZpZGVvTW9kZWwuZ2V0KCJhZFRhZ1VybCIpP3RoaXMucygpOnRoaXMucyghMCl9ZWxzZSBpZihiPWIudmlkZW9Nb2RlbC5nZXQoImFkc0xvYWRlciIpKXt0aGlzLnBlPSEwO3ZhciBhPSJhZEVycm9yIjt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudCYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7Yi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhKTt0aGlzLmRhfHwodGhpcy5vKCJhZGVycm9yIix0aGlzLlQpLHRoaXMucygpKX0uYmluZCh0aGlzKSl9ZWxzZSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuQWEoKX0uYmluZCh0aGlzKSwxMCl9LHZkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF9LApnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYz0hMDtjfHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGM9ITApOyJudW1iZXIiPT10eXBlb2YgYT8oYi5UPWEsYi5vKCJhZGVycm9yIixhKSk6Yi5vKCJhZGVycm9yIil9cmV0dXJuIGN9Yi5vcmlnaW5hbEV2ZW50JiYoYj1iLm9yaWdpbmFsRXZlbnQpO2lmKGIuZ2V0RXJyb3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmdldEVycm9yKXt2YXIgYz1iLmdldEVycm9yKCk7aWYoYy5nZXRFcnJvckNvZGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLmdldEVycm9yQ29kZSYmYShjLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7cmV0dXJufX1mb3IodmFyIGQgaW4gYilpZihiLmhhc093blByb3BlcnR5KGQpJiZiW2RdJiZiW2RdLmFkRXJyb3ImJmJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJgoiZnVuY3Rpb24iPT10eXBlb2YgYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmYShiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTticmVha319LGc6ZnVuY3Rpb24oKXt0aGlzLlQ9dGhpcy5UfHwhMTt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO3RoaXMuQWEoKTtiLnZpZGVvTW9kZWwub2JzZXJ2ZSgicGxheVN0YXRlIixmdW5jdGlvbihhKXsicGxheWluZyI9PWEmJih0aGlzLmlzUGxheWluZz0hMCl9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJwbGF5TW9kZSIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJjdXJyZW50QWRTZWdtZW50IixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7Yi52aWRlb01vZGVsLm9ic2VydmUoImlzQWRzUGxheWluZyIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9yIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7CmIudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9ycyIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9yc1giLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKTtiLnZpZGVvTW9kZWwub2JzZXJ2ZSgiTk9OX0VWRU5UIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSl9LHM6ZnVuY3Rpb24oYil7dGhpcy5pc1BsYXlpbmc/dGhpcy5JKGIpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwKX19KX0pKGMpO3ZhciBRPWMuaW18fFE7KGZ1bmN0aW9uKGMpe2Mua209cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpO3RoaXMuVWE9LTF9LGc6ZnVuY3Rpb24oKXtpZih3aW5kb3cuaW5zZXJ0ZWRQbGF5ZXIpe3ZhciBiPW5ldyBQKHdpbmRvdy5pbnNlcnRlZFBsYXllcik7Yi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKX1pZih3aW5kb3cuVFYyUGxheWVycyYmCndpbmRvdy5UVjJQbGF5ZXJzLmxlbmd0aClmb3IodmFyIGE9MDthPHdpbmRvdy5UVjJQbGF5ZXJzLmxlbmd0aDthKyspYj1uZXcgUCh3aW5kb3cuVFYyUGxheWVyc1thXSksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKTtlbHNlIGlmKHdpbmRvdy5UVjJQbGF5ZXJzKWZvcihhIGluIHdpbmRvdy5UVjJQbGF5ZXJzKXdpbmRvdy5UVjJQbGF5ZXJzLmhhc093blByb3BlcnR5KGEpJiZ3aW5kb3cuVFYyUGxheWVyc1thXS52aWRlb01vZGVsJiYoYj1uZXcgUCh3aW5kb3cuVFYyUGxheWVyc1thXSksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKSk7dGhpcy5hZigpO3RoaXMuUigpfX0pfSkoYyk7dmFyIFJiPWMua218fFJiLFNiPW5ldyBSYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy56bD0KdGhpcy5hWzFdO3RoaXMuVHE9dGhpcy5hWzRdO3RoaXMuS3M9dGhpcy5hWzFdO3RoaXMuTHA9dGhpcy5hWzddO3RoaXMuaj10aGlzLmFbNl19Yy5MbT1iO2IucHJvdG90eXBlPXt5bDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuemw6dGhpcy5TcShhKX0sU3E6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlRxOnRoaXMuSnMoYSl9LEpzOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Lczp0aGlzLktwKGEpfSxLcDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuTHA6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBUYj1jLkxtfHxUYixNYz1uZXcgVGIoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1NYy55bCg0KTsoZnVuY3Rpb24oYyl7Yy50az11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXJDb250YWluZXI7dGhpcy5ZKGIpO3ZhciBhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07YXx8KGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO3RoaXMuWihhKTthJiZ0aGlzLlkoYS5wYXJlbnROb2RlKX0sTzpmdW5jdGlvbigpe3JldHVybiJsYW9sYTEifSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5hcGkucGxheSgpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkuYXBpLnBhdXNlKCl9fSl9KShjKTt2YXIgYWE9Yy50a3x8YWE7KGZ1bmN0aW9uKGMpe2Muc2s9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMuT2c9MDt0aGlzLlQ9dGhpcy5UfHwhMTt0aGlzLmdldFBsYXllcigpO3RoaXMuZGE9dGhpcy5CYz10aGlzLkFhPXRoaXMuWWM9ITE7dGhpcy52aD1lLkViKDEwKTsKdGhpcy5YZygpfSxYZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7aWYoYi5zdWJQbGF5ZXImJmIuc3ViUGxheWVyLmFkc0ludGVyZmFjZSYmYi5zdWJQbGF5ZXIuYWRzSW50ZXJmYWNlLmFkc0xvYWRlcilyZXR1cm4gdGhpcy5uYT1iLnN1YlBsYXllci5hZHNJbnRlcmZhY2UuYWRzTG9hZGVyLHRoaXMub2IoKSwhMDt0aGlzLk9nKys7aWYoMTA8dGhpcy5PZyl0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIiksd2luZG93LmltYSYmd2luZG93LmltYS5jb21tb24mJndpbmRvdy5pbWEuSW1hU2RrU2V0dGluZ3M/dGhpcy5zKCEwKTp0aGlzLnMoKTtlbHNlIHJldHVybiB3aW5kb3cuc2V0VGltZW91dCh0aGlzLlhnLmJpbmQodGhpcyksMTAwKSwhMX0sb2I6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm5hO2lmKGIpe3ZhciBhPSJhZEVycm9yIixjPSJsb2ciO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiYKZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYoYz1nb29nbGUuaW1hLkFkRXZlbnQuVHlwZS5MT0cpOyJmdW5jdGlvbiIhPT10eXBlb2YgYi5hZGRFdmVudExpc3RlbmVyP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKTooYi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKGMsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCk7dGhpcy5mYSghMCl9LmJpbmQodGhpcykpKX1lbHNlIHRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLm9iKCl9LmJpbmQodGhpcyksCjIwKX0sZ2E6ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYShhLGIpe3ZhciBjPSExO2lmKGEpe2lmKDEwMDk9PWF8fDMwMz09YXx8NDAzPT1hKWM9ITA7Y3x8IWEuaW5kZXhPZnx8LTE9PT1hLmluZGV4T2YoIjEwMDkiKSYmLTE9PT1hLmluZGV4T2YoIjMwMyIpJiYtMT09PWEuaW5kZXhPZigiNDAzIil8fChjPSEwKTsibnVtYmVyIj09dHlwZW9mIGEmJihiLlQ9YSxiLm8oImFkZXJyb3IiLGEpKX1yZXR1cm4gY31iLm9yaWdpbmFsRXZlbnQmJihiPWIub3JpZ2luYWxFdmVudCk7aWYoYi5nZXRFcnJvciYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0RXJyb3Ipe3ZhciBjPWIuZ2V0RXJyb3IoKTtpZihjLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuZ2V0RXJyb3JDb2RlJiZhKGMuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTtyZXR1cm59fWZvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkmJmJbZF0mJmJbZF0uYWRFcnJvciYmYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmCiJmdW5jdGlvbiI9PXR5cGVvZiBiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlJiZhKGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO2JyZWFrfX0sdmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYX0sRGE6ZnVuY3Rpb24oKXt0aGlzLmRhPSEwfSxmYTpmdW5jdGlvbihiKXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZGE/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwMCl9LHM6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTthLmFwaS5wbGF5ZWQmJmEuYXBpLnBsYXllZCgpP3RoaXMuSShiKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMucyhiKX0uYmluZCh0aGlzKSwxMCl9fSl9KShjKTt2YXIgYmE9Yy5za3x8YmE7KGZ1bmN0aW9uKGMpe2MudWs9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9ITE7CmlmKHdpbmRvdy5sMVBsYXllckluc3RhbmNlJiZ3aW5kb3cubDFQbGF5ZXJJbnN0YW5jZS5sZW5ndGgmJjA8d2luZG93LmwxUGxheWVySW5zdGFuY2UubGVuZ3RoKWZvcih2YXIgYT0wO2E8d2luZG93LmwxUGxheWVySW5zdGFuY2UubGVuZ3RoO2ErKyliPW5ldyBhYSh3aW5kb3cubDFQbGF5ZXJJbnN0YW5jZVswXSksdGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IGJhKGIsdGhpcy5LKSxiLmcoKSk7ZWxzZSB3aW5kb3cucGxheWVyJiZ3aW5kb3cucGxheWVyLmFwaSYmd2luZG93LnBsYXllci5sMVBsYXllciYmKGI9bmV3IGFhKHdpbmRvdy5wbGF5ZXIpLHRoaXMuTihiKXx8KHRoaXMuUChiKSxiPW5ldyBiYShiLHRoaXMuSyksYi5nKCkpKTt0aGlzLlIoKX19KX0pKGMpO3ZhciBVYj1jLnVrfHxVYixWYj1uZXcgVWIocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTnU9dGhpcy5hWzJdOwp0aGlzLmtzPXRoaXMuYVs5XTt0aGlzLmJwPXRoaXMuYVsxXTt0aGlzLnd2PXRoaXMuYVsxMF07dGhpcy5Kaz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbM119Yy5Hbj1iO2IucHJvdG90eXBlPXtNdTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuTnU6dGhpcy5qcyhhKX0sanM6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5rczp0aGlzLmFwKGEpfSxhcDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuYnA6dGhpcy52dihhKX0sdnY6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnd2OnRoaXMuSWsoYSl9LElrOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5Kazp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLmo6YX19fSkoYyk7dmFyIFdiPWMuR258fFdiLE5jPW5ldyBXYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPQpOYy5NdSg0KTsoZnVuY3Rpb24oYyl7Yy5Xaj11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPSExO3RyeXtiPXRoaXMuZ2V0UmF3UGxheWVyKClbMF0ucGFyZW50Tm9kZSxhPXRoaXMuZ2V0UmF3UGxheWVyKClbMF19Y2F0Y2goYyl7fWImJmE/KHRoaXMuWShiKSx0aGlzLlooYSksdGhpcy5nZXRSYXdQbGF5ZXIoKSk6dGhpcy5wYSgpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkuY3NzKCJkaXNwbGF5Iiwibm9uZSIpfSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5jc3MoImRpc3BsYXkiLCJibG9jayIpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkdBTlZpZGVvIn19KX0pKGMpO3ZhciBYYj1jLldqfHxYYjsoZnVuY3Rpb24oYyl7Yy5Waj12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dGhpcy5mZygpfSxmZzpmdW5jdGlvbihiKXt3aW5kb3cuR0FOX1ZpZGVvfHwKKGI/KHRoaXMubygibm9mcmFtZXdvcmsiLCJJTUEiKSx0aGlzLkkoKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmZnKCEwKX0uYmluZCh0aGlzKSwxMDApKX19KX0pKGMpO3ZhciBZYj1jLlZqfHxZYjsoZnVuY3Rpb24oYyl7Yy5Yaj1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2FtZSIpO2lmKGImJiJESVYiPT1iLm5vZGVOYW1lJiZ3aW5kb3cudmlkZW9hZF9nYW5fc3RhcnQmJndpbmRvdy4kJiZ3aW5kb3cuJCgiZGl2I2dhbWUiKSl7Yj1uZXcgWGIod2luZG93LiQoImRpdiNnYW1lIikpO2lmKGIucWEpe3RoaXMuUigpO3JldHVybn1pZighdGhpcy5OKGIpKXt0aGlzLlAoYik7KG5ldyBZYihiLHRoaXMuSykpLmcoKTt0aGlzLlIoKTtyZXR1cm59fXRoaXMuUigpfX0pfSkoYyk7dmFyIFpiPWMuWGp8fFpiLCRiPW5ldyBaYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPQpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMueGo9dGhpcy5hWzldO3RoaXMuYW89dGhpcy5hWzNdO3RoaXMuR3Y9dGhpcy5hWzVdO3RoaXMuaj10aGlzLmFbNV19Yy5NcT1iO2IucHJvdG90eXBlPXt3ajpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMueGo6dGhpcy4kbihhKX0sJG46ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmFvOnRoaXMuRnYoYSl9LEZ2OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuR3Y6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBhYz1jLk1xfHxhYyxPYz1uZXcgYWMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1PYy53aig0KTsoZnVuY3Rpb24oYyl7Yy5raT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0KdGhpcy5nZXRSYXdQbGF5ZXIoKS5nZXRXcmFwcGVyKCk7Yj8odGhpcy5ZKGIpLChiPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pP3RoaXMuWihiKTp0aGlzLnBhKCkpOnRoaXMucGEoKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlVmlkZW8oKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheVZpZGVvKCl9LE86ZnVuY3Rpb24oKXtyZXR1cm4iQVYifX0pfSkoYyk7dmFyIGJjPWMua2l8fGJjOyhmdW5jdGlvbihjKXtjLmppPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2Iub24oImFkRXJyb3IiLGZ1bmN0aW9uKCl7d2luZG93LnNldFRpbWVvdXQodGhpcy5zLmJpbmQodGhpcyksMTAwKX0uYmluZCh0aGlzKSk7Yi5vbigiYWRGcmFtZXdvcmtOb3RBdmFpbGFibGUiLGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcykpOwp0aGlzLmhlKCk7dGhpcy5iZygpfSxnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYz0hMDtjfHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGM9ITApOyJudW1iZXIiPT10eXBlb2YgYSYmKGIuVD1hLGIubygiYWRlcnJvciIsYSkpfXJldHVybiBjfWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTtpZihiLmdldEVycm9yJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5nZXRFcnJvcil7dmFyIGM9Yi5nZXRFcnJvcigpO2lmKGMuZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5nZXRFcnJvckNvZGUmJmEoYy5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO3JldHVybn19Zm9yKHZhciBkIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSYmYltkXSYmYltkXS5hZEVycm9yJiYKYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJmEoYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7YnJlYWt9fSx2ZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhfSxEYTpmdW5jdGlvbigpe3RoaXMuZGE9ITA7dGhpcy53KCJlbXB0eSB2YXN0Iil9LGJnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZihiLmdldFNlbGVjdGVkQWRIYW5kbGVyKWlmKChiPWIuZ2V0U2VsZWN0ZWRBZEhhbmRsZXIoKSkmJmIuYWRzTG9hZGVyKWZvcih2YXIgYT0wO2E8Yi5hZHNMb2FkZXIubGVuZ3RoO2ErKyl7dmFyIGM9ImFkRXJyb3IiO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SJiYKKGM9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7Yi5hZHNMb2FkZXJbYV0uYWRkRXZlbnRMaXN0ZW5lcihjLGZ1bmN0aW9uKGEpe2EuZ2V0RXJyb3ImJihhPWEuZ2V0RXJyb3IoKSk7dmFyIGI9ITE7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYj0hMDtpZighYilmb3IodmFyIGMgaW4gYSl7aWYoYVtjXSYmYVtjXS5pbmRleE9mJiYoLTEhPWFbY10uaW5kZXhPZigiMTAwOSIpfHwtMSE9YVtjXS5pbmRleE9mKCIzMDMiKXx8LTEhPWFbY10uaW5kZXhPZigiNDAzIikpKXtiPSEwO2JyZWFrfWlmKGFbY10mJigxMDA5PT1hW2NdfHwzMDM9PWFbY118fDQwMz09YVtjXSkpe2I9ITA7YnJlYWt9fWI/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKCl9LmJpbmQodGhpcykpfWVsc2Ugd2luZG93LnNldFRpbWVvdXQodGhpcy5iZy5iaW5kKHRoaXMpLDUwKTtlbHNlIHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuaGUuYmluZCh0aGlzKSwxMDApfSxoZTpmdW5jdGlvbigpe2lmKCF0aGlzLnVhKCkpe3ZhciBiPQp0aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyJwbGF5aW5nIj09Yi5nZXRQbGF5U3RhdGUoKT9iLmdldEFkSW5mbygpPyh3aW5kb3cuc2V0VGltZW91dCh0aGlzLnJhLmJpbmQodGhpcyksMTApLHRoaXMudygpKTpiLl9wbGF5ZXJPcHRpb25zJiZiLl9wbGF5ZXJPcHRpb25zLnBsYXlBZHZlcnRpc2VtZW50c3x8Yi5fYWRSZWdpc3RlcmVkP3RoaXMucygpOnRoaXMucyghMCk6d2luZG93LnNldFRpbWVvdXQodGhpcy5oZS5iaW5kKHRoaXMpLDEwMCl9fSxzOmZ1bmN0aW9uKGIpe3dpbmRvdy5zZXRUaW1lb3V0KHRoaXMucmEuYmluZCh0aGlzKSwxRTQpO3RoaXMuSShiKX19KX0pKGMpO3ZhciBjYz1jLmppfHxjYzsoZnVuY3Rpb24oYyl7Yy5saT1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFhhOmZ1bmN0aW9uKGIpe2I9bmV3IGJjKGIpO2IucWE/dGhpcy5SKCk6dGhpcy5OKGIpfHwodGhpcy5QKGIpLChuZXcgY2MoYix0aGlzLkspKS5nKCkpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93LnNyYXZ2cGxQbGF5ZXJJbnN0YW5jZXMpZm9yKHZhciBiPQowO2I8d2luZG93LnNyYXZ2cGxQbGF5ZXJJbnN0YW5jZXMubGVuZ3RoO2IrKyl0aGlzLlhhKHdpbmRvdy5zcmF2dnBsUGxheWVySW5zdGFuY2VzW2JdKTtlbHNlIHdpbmRvdy5zZXR1cFBsYXllckVsZW1lbnQ/dGhpcy5YYSh3aW5kb3cuc2V0dXBQbGF5ZXJFbGVtZW50KTp0aGlzLlIoKX19KX0pKGMpO3ZhciBkYz1jLmxpfHxkYyxlYz1uZXcgZGMocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuSW49dGhpcy5hWzNdO3RoaXMuU2o9dGhpcy5hWzJdO3RoaXMuVm49dGhpcy5hWzldO3RoaXMud2k9dGhpcy5hWzRdO3RoaXMuUmk9dGhpcy5hWzNdO3RoaXMubW09dGhpcy5hWzZdO3RoaXMuJGw9dGhpcy5hWzFdO3RoaXMua289dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbM119Yy5ncz1iO2IucHJvdG90eXBlPXtIbjpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuSW46dGhpcy5SaihhKX0sClJqOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuU2o6dGhpcy5VbihhKX0sVW46ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlZuOnRoaXMudmkoYSl9LHZpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy53aTp0aGlzLlFpKGEpfSxRaTpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMuUmk6dGhpcy5sbShhKX0sbG06ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLm1tOnRoaXMuWmwoYSl9LFpsOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy4kbDp0aGlzLmpvKGEpfSxqbzpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMua286dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBmYz1jLmdzfHxmYyxQYz1uZXcgZmMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1QYy5Ibig0KTtjPWN8fHt9OwooZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuWmc9dGhpcy5haD10aGlzLiRnPSExO3RoaXMuQWQ9W107dGhpcy4kZT17R0FOVmlkZW86InVuZGVmaW5lZCI9PT10eXBlb2YgJGI/bnVsbDokYixsYW9sYTFQbGF5ZXI6InVuZGVmaW5lZCI9PT10eXBlb2YgVmI/bnVsbDpWYixWaWRlb0pTOiJ1bmRlZmluZWQiPT09dHlwZW9mIEJhP251bGw6QmEsYml0bW92aW46InVuZGVmaW5lZCI9PT10eXBlb2YgVT9udWxsOlUsb3ZWaWRlbzoidW5kZWZpbmVkIj09PXR5cGVvZiBHYT9udWxsOkdhLFJhZGlhbnRNUDoidW5kZWZpbmVkIj09PXR5cGVvZiBIYj9udWxsOkhiLGp3OiJ1bmRlZmluZWQiPT09dHlwZW9mIHdhP251bGw6d2EsdHYyOiJ1bmRlZmluZWQiPT09dHlwZW9mIFNiP251bGw6U2IsdGZtc3VpdGVQbGF5ZXI6InVuZGVmaW5lZCI9PT10eXBlb2YgeD9udWxsOngsbmV4dFBsYXllcjoidW5kZWZpbmVkIj09PXR5cGVvZiBLYj9udWxsOktiLHh5bWF0aWNQbGF5ZXI6InVuZGVmaW5lZCI9PT0KdHlwZW9mIFBiP251bGw6UGIsYmlsZE1lZGlhUGxheWVyOiJ1bmRlZmluZWQiPT09dHlwZW9mIG9iP251bGw6b2IsT295YWxhOiJ1bmRlZmluZWQiPT09dHlwZW9mIGRiP251bGw6ZGIsUm9ja2VyeToidW5kZWZpbmVkIj09PXR5cGVvZiBDYj9udWxsOkNiLGluUmVhZDoidW5kZWZpbmVkIj09PXR5cGVvZiBMYT9udWxsOkxhLHdmdjQ6InVuZGVmaW5lZCI9PT10eXBlb2YgeGI/bnVsbDp4YixBVlBsYXllckRldGVjdGlvbjoidW5kZWZpbmVkIj09PXR5cGVvZiBlYz9udWxsOmVjLE9ubHlIT01BRDoidW5kZWZpbmVkIj09PXR5cGVvZiBYP251bGw6WH19Yy50bD1iO2IucHJvdG90eXBlPXtnOmZ1bmN0aW9uKCl7dmFyIGE9W10sYT1hLmxlbmd0aD90aGlzLm9xKGEpOltdLGI7dGhpcy5haD0hMDtpZihhLmxlbmd0aCl7dGhpcy4kZz0hMDtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyliPWFbY10sdGhpcy5BaChiKX1lbHNlIGZvcihjIGluIHRoaXMuJGUpe2lmKHRoaXMuWmcpYnJlYWs7CmI9dGhpcy4kZVtjXTt0aGlzLnZmKGIpJiYodGhpcy5BZC5wdXNoKGIpLHRoaXMuQWgoYikpfX0sdmY6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEgaW5zdGFuY2VvZiBxPyEwOiExfSxvcTpmdW5jdGlvbihhKXt2YXIgYj1bXSxjO2lmKCFhfHwhYS5sZW5ndGgpcmV0dXJuIGI7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspYz1hW2VdLGM9dGhpcy4kZVtjXSx0aGlzLnZmKGMpJiZiLnB1c2goYyk7cmV0dXJuIGJ9LEFoOmZ1bmN0aW9uKGEpe3RoaXMudmYoYSkmJmEuZygpfSxhdTpmdW5jdGlvbihhKXtpZihhJiZhIGluc3RhbmNlb2YgdSYmIXRoaXMuJGcpZm9yKHRoaXMuWmc9ITAsYT0wO2E8dGhpcy5BZC5sZW5ndGg7YSsrKXRoaXMuQWRbYV0uSGImJndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5BZFthXS5IYil9fX0pKGMpO3ZhciBnYz1jLnRsfHxnYyxOPW5ldyBnYztOLmcoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CnRoaXMueHU9dGhpcy5hWzZdO3RoaXMuS2o9dGhpcy5hWzZdO3RoaXMuWm09dGhpcy5hWzFdO3RoaXMuR2k9dGhpcy5hWzEwXTt0aGlzLkd1PXRoaXMuYVsyXTt0aGlzLllyPXRoaXMuYVs1XTt0aGlzLlJxPXRoaXMuYVsxMF07dGhpcy5qPXRoaXMuYVsyXX1jLlp1PWI7Yi5wcm90b3R5cGU9e3d1OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMueHU6dGhpcy5KaihhKX0sSmo6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLktqOnRoaXMuWW0oYSl9LFltOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5abTp0aGlzLkZpKGEpfSxGaTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuR2k6dGhpcy5GdShhKX0sRnU6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLkd1OnRoaXMuWHIoYSl9LFhyOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuWXI6dGhpcy5RcShhKX0sUXE6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlJxOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMjwKYT90aGlzLmo6YX19fSkoYyk7dmFyIGhjPWMuWnV8fGhjLFFjPW5ldyBoYygxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPVFjLnd1KDQpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oYyl7aWYoYy5lcnJvciBpbnN0YW5jZW9mIFJlZmVyZW5jZUVycm9yKXt2YXIgYj1jLmZpbGVuYW1lP2MuZmlsZW5hbWU6IiI7aWYoLTEhPWIuaW5kZXhPZigiaG9tYWQiKXx8LTEhPWIuaW5kZXhPZigiaGQtbWFpbiIpKWI9Yy5tZXNzYWdlP2MubWVzc2FnZToiIixjPWMuZXJyb3Iuc3RhY2s/Yy5lcnJvci5zdGFjazoiIiwtMSE9Yi5pbmRleE9mKCJpcyBub3QgZGVmaW5lZCIpPyhjPWIuc3Vic3RyaW5nKGIuaW5kZXhPZigiOiIpKzEsYi5pbmRleE9mKCJpcyBub3QiKS0xKSxlLndjKGsuUnUpLGUudHJhY2soInN0YXRzX2hkX3ZhcmRlbGV0ZWQiLGMsCiEwKSk6LTEhPWMuaW5kZXhPZigic2V0QCIpJiYoZS53YyhrLmVzKSxlLnRyYWNrKCJzdGF0c19oZF92YXJub3RzZXQiLCIiLCEwKSl9fSk7dmFyIEU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7RS53aWR0aD0xO0UuaGVpZ2h0PTE7RS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJwbXRtdnMiKTtFLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoRSk7dmFyIFJjPUUuY29udGVudFdpbmRvdy5zZXRJbnRlcnZhbC5iaW5kKHdpbmRvdyksa2M9RS5jb250ZW50V2luZG93LnNldFRpbWVvdXQuYmluZCh3aW5kb3cpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoRSk7dmFyIEk9bmV3IEosbT0hMTtJLmlhKCk7SS5UZygpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKEkuaWEoKSxmdW5jdGlvbihjKXttfHwobT1jLmRldGFpbCl9LCExKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihJLlRnKCksZnVuY3Rpb24oYyl7bXx8KG09Yy5kZXRhaWwpfSwhMSk7CkkuaWEoKTt2YXIgU2M9UmMoZnVuY3Rpb24oKXtlLnZnKHdpbmRvdyxJLmZyKCkse2lkOlNjfSl9LDUwMCksamE9ZS5iYSgxMCk7ZmEoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy50aj10aGlzLmFbNF07dGhpcy56dj10aGlzLmFbMl07dGhpcy5waj10aGlzLmFbOF07dGhpcy5DcD10aGlzLmFbOF07dGhpcy5aaz10aGlzLmFbNl07dGhpcy5QbD10aGlzLmFbM107dGhpcy5Iaj10aGlzLmFbN107dGhpcy5saz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbM119Yy5ydj1iO2IucHJvdG90eXBlPXtzajpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMudGo6dGhpcy55dihhKX0seXY6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLnp2OnRoaXMub2ooYSl9LG9qOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5wajp0aGlzLkJwKGEpfSxCcDpmdW5jdGlvbihhKXtyZXR1cm4gMjwKYT90aGlzLkNwOnRoaXMuWWsoYSl9LFlrOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5aazp0aGlzLk9sKGEpfSxPbDpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuUGw6dGhpcy5HaihhKX0sR2o6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5Iajp0aGlzLmtrKGEpfSxrazpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMubGs6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBpYz1jLnJ2fHxpYyxUYz1uZXcgaWMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1UYy5zaig0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuc2g9dGhpcy5jb25mPXRoaXMuamI9dGhpcy5wbGF5ZXI9bnVsbDt0aGlzLndkPTA7dGhpcy5aYT0iIjt0aGlzLkJkPVtdO3RoaXMuQ2Q9MDt0aGlzLnVoPSExO3RoaXMuWGU9CltdO2UubGIoIm5ld0FkZGVsaXZlcnkiKX1jLm1pPWI7Yi5wcm90b3R5cGU9e0d0OmZ1bmN0aW9uKGEpe3RoaXMuc2g9YX0sZmY6ZnVuY3Rpb24oYSl7dGhpcy5wbGF5ZXI9YTt0aGlzLlphPXRoaXMucGxheWVyLk8oKX0sZ2V0UGxheWVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGxheWVyfSxCdDpmdW5jdGlvbihhKXt0aGlzLmpiPWF9LEF0OmZ1bmN0aW9uKGEpe3RoaXMuY29uZj1hfSxIYTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNvbmZbYV07dGhpcy5jb25mW3RoaXMuWmFdJiZ0aGlzLmNvbmZbdGhpcy5aYV1bYV0mJihiPXRoaXMuY29uZlt0aGlzLlphXVthXSk7cmV0dXJuIGJ9LEljOmZ1bmN0aW9uKGEsYil7ZS5CYSgid2VsdC5kZSIpJiZlLllhKCJodHRwczovL2Fzdi5udWdnYWQubmV0L2JrP251Z2duPTE1Njk5MDUxMDImbnVnZ3NpZD0xOTgyMjE3NTUwJm51Z2dyaWQ9IitlbmNvZGVVUklDb21wb25lbnQobG9jYXRpb24uaHJlZikrIiZudWdnbD1odHRwcyUzQSUyRiUyRnd3MjUxLnNtYXJ0YWRzZXJ2ZXIuY29tJTJGdHJhY2slMkZjb21wLmFzcCUzRmtleXdvcmQlM0ROVUdHVkFSUyUyNnNpdGUlM0Q4NTE0NSIsCiJuZXRudWdnYWRhc3YiLHt9LGZ1bmN0aW9uKCl7fSxmdW5jdGlvbigpe30sdGhpcy5qYik7dmFyIGM9ITEsZj0hMTtpZih0aGlzLmdyKCkpdGhpcy5qYi5sKHRoaXMuamIucmQsdGhpcy5qYi5GYSx0aGlzLmpiLlplLGZ1bmN0aW9uKCl7dGhpcy5JYyhhLGIpfS5iaW5kKHRoaXMpLHRoaXMuamIuc2MpO2Vsc2UgaWYodGhpcy5FcSgpKXRoaXMud3QoZnVuY3Rpb24oKXt0aGlzLkljKGEsYil9LmJpbmQodGhpcykpO2Vsc2V7dGhpcy5wbGF5ZXIucGF1c2UoKTtlLnYoay5mZCx0aGlzLnBsYXllci51KCkpO3ZhciBnPXRoaXMuY29uZixsPW5ldyBZYSh0aGlzLmdldFBsYXllcigpLGcpO2ImJmwuY3UoKTtsLmV4aXRGdWxsc2NyZWVuKCk7ZS5sYigibmV3SG9tYWREaXNwbGF5Iik7Uz1sPW5ldyBRYShsLHRoaXMuamIsZyk7bC56dCh0aGlzLmNvbmYpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYSl7dmFyIG09ITE7dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyJiYobT10aGlzLnBsYXllci5nZXRSYXdQbGF5ZXIoKSk7CmE9YShtKX0oYT10aGlzLlJyKGEpKXx8ZS50cmFjaygic3RhdHNfaGRfbm9BZFRhZyIsInNob3ciLCEwKTsiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5wbGF5ZXIuR2UmJihjPXRoaXMucGxheWVyLkdlKCkpO2cuYWRTdGFydFRpbWVvdXQmJihmPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7fSxnLmFkU3RhcnRUaW1lb3V0fHw1RTQpKTtsLkllKGEsYyxmKTt0aGlzLnBsYXllci5DaChsKX19LGdyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IERhdGUsYj0wO2lmKHRoaXMud2QpcmV0dXJuIGI9YS5nZXRUaW1lKCktdGhpcy53ZC5nZXRUaW1lKCksdGhpcy53ZD1hLDNFNTxiPyEwOiExO3RoaXMud2Q9YTtyZXR1cm4hMX0sVnQ6ZnVuY3Rpb24oKXtlLmxiKCJwcmVyb2xsIik7ZS5lZigicHJlcm9sbCIpO3ZhciBhPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgicHJlcm9sbEFkVGFnIikmJihhPXRoaXMuSGEoInByZXJvbGxBZFRhZyIpKTsoYT10aGlzLnJnKGEpKT90aGlzLkljKGEpOihlLnRyYWNrKCJzdGF0c19oZF9ub0FkVGFnIiwKInByZSIsITApLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXIucGxheSgpfS5iaW5kKHRoaXMpLDApLGUudihrLmdkLHRoaXMucGxheWVyLnUoKSkpfSxVdDpmdW5jdGlvbihhKXtpZighdGhpcy5zaCl7ZS5lZigicG9zdHJvbGwiKTtlLmxiKCJwb3N0cm9sbCIpO3RoaXMuR3QoITApO3ZhciBiPXRoaXMuY29uZixjPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgicG9zdHJvbGxBZFRhZyIpJiYoYz10aGlzLkhhKCJwb3N0cm9sbEFkVGFnIikpOyhjPXRoaXMucmcoYykpP3RoaXMuSWMoYyxiLnBvc3Ryb2xsVXNlQ29tcGxldGVFdmVudD8hMDphKTooZS50cmFjaygic3RhdHNfaGRfbm9BZFRhZyIsInBvc3QiLCEwKSx0aGlzLnBsYXllci5wbGF5KCksZS52KGsuZ2QsdGhpcy5wbGF5ZXIudSgpKSl9fSxyZzpmdW5jdGlvbihhKXtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGEpe3ZhciBiPSExO3RoaXMucGxheWVyLmdldFJhd1BsYXllciYmKGI9dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyKCkpOwphPWEoYil9cmV0dXJuIGF9LGx0OmZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXIuS3QodGhpcy5VdC5iaW5kKHRoaXMpKTt0aGlzLnBsYXllci5OYSgpfSxIZDpmdW5jdGlvbihhKXtlLmxiKCJtaWRyb2xsIik7ZS5lZigibWlkcm9sbCIpO2lmKCF0aGlzLmhoKXt0aGlzLmhoPSEwO3ZhciBiPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgibWlkcm9sbEFkVGFnIikmJihiPXRoaXMuSGEoIm1pZHJvbGxBZFRhZyIpKTtiPyh0aGlzLkljKGIsYSksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmhoPSExfS5iaW5kKHRoaXMpLDFFMykpOihlLnRyYWNrKCJzdGF0c19oZF9ub0FkVGFnIiwibWlkIiwhMCksdGhpcy5wbGF5ZXIucGxheSgpLGUudihrLmdkLHRoaXMucGxheWVyLnUoKSkpfX0sa3Q6ZnVuY3Rpb24oKXt0aGlzLnBsYXllci5GdCh0aGlzLkhkLmJpbmQodGhpcykpO3RoaXMucGxheWVyLkxlKCl9LGc6ZnVuY3Rpb24oKXt0aGlzLlZ0KCk7dGhpcy5wbGF5ZXIuTGUmJnRoaXMua3QoKTsKdGhpcy5sdCgpfSxtdDpmdW5jdGlvbigpe3ZhciBhPVtdO2lmKHRoaXMuY29uZi55aWVsZGxhYil7dGhpcy5jb25mLnlpZWxkbGFiWzBdP2E9dGhpcy5jb25mLnlpZWxkbGFiOmFbMF09dGhpcy5jb25mLnlpZWxkbGFiO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKShmdW5jdGlvbihhLGIsYyxnKXt0aGlzLkJkLnB1c2goeyJmdW5jdGlvbiI6ZnVuY3Rpb24oZSl7dGhpcy5FdihhLGIsYyxnLGUpfS5iaW5kKGUpfSl9KS5jYWxsKHRoaXMsYVtiXS51cmwsYVtiXS5wbGFjZWhvbGRlcixhW2JdLmFsaWFzLGFbYl0ubWFjcm8pfXRoaXMuQ2Q9dGhpcy5CZC5sZW5ndGh9LEVxOmZ1bmN0aW9uKCl7dmFyIGE9ITE7MDx0aGlzLkNkJiYoYT0hMCk7cmV0dXJuIGF9LHd0OmZ1bmN0aW9uKGEpe3RoaXMudWg9YTtmb3IoYT0wO2E8dGhpcy5CZC5sZW5ndGg7YSsrKXRoaXMuQmRbYV1bImZ1bmN0aW9uIl0odGhpcy5acy5iaW5kKHRoaXMpKX0sWnM6ZnVuY3Rpb24oYSl7dGhpcy5DZC0tO2EmJnRoaXMuWGUucHVzaChhKTsKMD49dGhpcy5DZCYmdGhpcy51aCgpfSxScjpmdW5jdGlvbihhKXtmb3IodmFyIGI9IiIsYz0wO2M8dGhpcy5YZS5sZW5ndGg7YysrKWI9dGhpcy5YZVtjXSxhPWEucmVwbGFjZShiLm1hY3JvLGIucGxhY2Vob2xkZXIpO3JldHVybiBhfX19KShjKTt2YXIgZ2E9Yy5taXx8Z2EsUz0hMSxuYT0hMTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy55az10aGlzLmFbN107dGhpcy5TbD10aGlzLmFbNF07dGhpcy5ncD10aGlzLmFbMTBdO3RoaXMuWm49dGhpcy5hWzNdO3RoaXMuTnQ9dGhpcy5hWzFdO3RoaXMuaj10aGlzLmFbN119Yy5OcD1iO2IucHJvdG90eXBlPXt4azpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLnlrOnRoaXMuUmwoYSl9LFJsOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5TbDp0aGlzLmZwKGEpfSxmcDpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuZ3A6CnRoaXMuWW4oYSl9LFluOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5abjp0aGlzLk10KGEpfSxNdDpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTnQ6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuajphfX19KShjKTt2YXIgamM9Yy5OcHx8amMsVWM9bmV3IGpjKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9VWMueGsoNCl9KS5jYWxsKE9oamF1ZGlwQWxpZWNhaUosT2hqYXVkaXBBbGllY2FpSik7Cg==
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
46.4.116.20 , Germany, ASN24940 (HETZNER-AS, DE),
Reverse DNS
static.20.116.4.46.clients.your-server.de
Software
AmazonS3 /
Resource Hash
5ee5cb1d210bab87efd0825369e6bcbbdf3f9fcc0d1fbf227b0bc670e8a8d3dd

Request headers

Sec-Fetch-Mode
cors
Referer
https://videos.giga.de/embed/176875?autoplay=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-type
application/x-www-form-urlencoded

Response headers

Date
Fri, 13 Sep 2019 08:37:12 GMT
Connection
keep-alive
Content-Length
653
Last-Modified
Thu, 12 Sep 2019 07:31:24 GMT
Server
AmazonS3
Etag
"063da71572f57793ea4125f50b418f84"
Vary
Accept-Encoding
Access-Control-Allow-Methods
GET, POST, OPTIONS
Content-Type
application/json
Access-Control-Allow-Origin
https://videos.giga.de
Access-Control-Expose-Headers
X-Homad-Instance, X-Homad-Long-Ad-Ignored, X-Homad-Sig, X-Homad-Url, X-Homad-Vpaid-Ignored, X-Homad-Ad-Id
Cache-Control
no-cache, no-store
Access-Control-Allow-Credentials
true
X-Homad-Instance
de36-homad-1
X-Homad-Url
http://homad-global-configs-eu-fra.schneevonmorgen.com.s3.amazonaws.com/www.giga.de/config.json
Accept-Ranges
bytes
Access-Control-Allow-Headers
X-Homad-Compatible-Vpaid, X-Homad-Post, X-Homad-Url
Expires
0
view
securepubads.g.doubleclick.net/pcs/ Frame 9BA9
0
53 B
Fetch
General
Full URL
https://securepubads.g.doubleclick.net/pcs/view?xai=AKAOjsvRGxKhtDi0q35rWFDPKJ3s_Q_8l6MbON39w2IFMaQ0YEqH3kSzsl5fQRiguB0FixoDhQWwime89SAWe4-sICccPCRR_iHNlu_Ux9-Y4f5pWff7Xn40cj3Rt6ZPt7dR6-_PowjrEZP1Q5yOVEdaEXlJkxlZ9tRRpusPDi9GG7cWREVaC5yFJZRz6ZQT8KdMPcp5G6Z9WL_X5W2H0wWPbgZQUiuYBs-cK-vanCMzFxUmLCzQ9Zd1o3XS5gSA0fJEXwqRXg1hrgW31F3eipWfn1csIASKM-alyKT6nec7&sig=Cg0ArKJSzEFWLaUcJx5QEAE&urlfix=1&adurl=
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
216.58.206.2 Mountain View, United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
fra16s20-in-f2.1e100.net
Software
cafe /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

timing-allow-origin
*
date
Fri, 13 Sep 2019 08:37:12 GMT
x-content-type-options
nosniff
server
cafe
status
200
p3p
policyref="https://googleads.g.doubleclick.net/pagead/gcn_p3p_.xml", CP="CURa ADMa DEVa TAIo PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
access-control-allow-origin
*
cache-control
private
content-type
image/gif
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
0
x-xss-protection
0
vpt.js
static.cliipa.com/basev/ Frame 9BA9
38 KB
11 KB
Script
General
Full URL
https://static.cliipa.com/basev/vpt.js?userId=551424a21b1b1f08006fb6f9&containerId=5c9117581325370004630210&format=3&host=cliipa.com&query[coppa]=false&query[param1]=adunit_/4444/giga.de_sd/software_artikel&macros[regs_gdpr]=1&macros[user_consent]=2
Requested by
Host: securepubads.g.doubleclick.net
URL: https://securepubads.g.doubleclick.net/gpt/pubads_impl_rendering_2019091201.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
69.16.175.10 Phoenix, United States, ASN20446 (HIGHWINDS3 - Highwinds Network Group, Inc., US),
Reverse DNS
tlb.hwcdn.net
Software
/
Resource Hash
be701739dbd531e7a05df6dea81b4666d177b2ef14503eba47e7bf220959788d

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:12 GMT
Content-Encoding
gzip
Last-Modified
Wed, 07 Aug 2019 15:09:39 GMT
ETag
"1565190579"
Access-Control-Allow-Methods
GET, OPTIONS, HEAD
P3P
CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
Access-Control-Allow-Origin
*
Access-Control-Expose-Headers
Origin, Accept ,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Length, Accept-Language, Accept-Encoding, Referer, Range
Cache-Control
max-age=41169
Connection
Keep-Alive
Accept-Ranges
bytes
Content-Type
application/javascript
Access-Control-Allow-Headers
Origin, Accept ,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Length, Accept-Language, Accept-Encoding, Referer, Range
Content-Length
9883
X-HW
1568363832.dop006.fr8.t,1568363832.cds065.fr8.shn,1568363832.cds065.fr8.c
osd_listener.js
www.googletagservices.com/activeview/js/current/ Frame 9BA9
75 KB
28 KB
Script
General
Full URL
https://www.googletagservices.com/activeview/js/current/osd_listener.js?cache=r20110914
Requested by
Host: securepubads.g.doubleclick.net
URL: https://securepubads.g.doubleclick.net/gpt/pubads_impl_rendering_2019091201.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:824::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
sffe /
Resource Hash
c1f4b48cf64b1d62f7ac56e47f4654cc28d949cdb83d9a0fa7be561c498b20d7
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
content-encoding
gzip
x-content-type-options
nosniff
server
sffe
etag
"1568027754411643"
vary
Accept-Encoding
content-type
text/javascript
status
200
cache-control
private, max-age=3000
accept-ranges
bytes
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
content-length
28564
x-xss-protection
0
expires
Fri, 13 Sep 2019 08:37:12 GMT
5005878418
dfp-gateway.s-onetag.com/1/4444/
113 B
579 B
XHR
General
Full URL
https://dfp-gateway.s-onetag.com/1/4444/5005878418
Requested by
Host: get.s-onetag.com
URL: https://get.s-onetag.com/1400a607-dbd1-49d7-9171-69ce05c71f5e/tag.min.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
2600:9000:2057:1a00:a:52eb:a100:93a1 , United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
Software
/
Resource Hash
f2f6180a65038b9ef6eb958ba11c1d049f52081b6550dc396c4f0a887f31a61f

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:30:43 GMT
via
1.1 27f665df26bde4a7226480b4a2890ff9.cloudfront.net (CloudFront), 1.1 87b272b7d9b97f38da15c91c833c3292.cloudfront.net (CloudFront)
age
389
x-amzn-requestid
ce6d609e-5489-4964-b1a7-9e71135dad1c
status
200
x-cache
Hit from cloudfront
content-type
application/json
access-control-allow-origin
*
cache-control
max-age=3600, public
x-amzn-trace-id
Root=1-5d7b53b3-2bb66e902443109071d35e8c;Sampled=0
x-amz-cf-pop
FRA2-C2, FRA6-C1
x-amz-apigw-id
f8oECFkRyK4Fgdg=
content-length
113
x-amz-cf-id
JF7jHYUeEZz2Whb4FtkCexixjh3VS049oMLuNimHRIi2Ro06zVnU_w==
7xA
tracker-adserver.ibillboard.com/error/impid/a9145aca-d802-42e7-b0df-0dd4b93c7189/iid/b2b14a66-7c5e-4010-87ef-151c0212799a/asid/346a3f1b-2167-4e54-8af3-4a8d2910a189/tid/346a3f1b-2167-4e54-8af3-4a8d2... Frame 4E21
0
272 B
Image
General
Full URL
https://tracker-adserver.ibillboard.com/error/impid/a9145aca-d802-42e7-b0df-0dd4b93c7189/iid/b2b14a66-7c5e-4010-87ef-151c0212799a/asid/346a3f1b-2167-4e54-8af3-4a8d2910a189/tid/346a3f1b-2167-4e54-8af3-4a8d2910a189/adid/85a0d494-5864-4a1e-c578-9fc94f9efa60/sensitive/7xA?erc=303
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
62.168.44.125 Velke Prilepy, Czech Republic, ASN5588 (GTSCE GTS Central Europe / Antel Germany, CZ),
Reverse DNS
host-125.billboard.cz
Software
ibillboard /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Access-Control-Allow-Origin
*, *
Date
Fri, 13 Sep 2019 08:37:12 GMT
Access-Control-Allow-Credentials
true
Server
ibillboard
Connection
keep-alive
Transfer-Encoding
chunked
Access-Control-Allow-Methods
GET
tag
a.teads.tv/page/68592/ Frame 4E21
1 KB
827 B
Script
General
Full URL
https://a.teads.tv/page/68592/tag
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.232.7 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-232-7.deploy.static.akamaitechnologies.com
Software
/
Resource Hash
01295ef44ccf7fdfaea9e0be7cc992544e0680b5fa8275ebc6b985734f89e867

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
content-encoding
gzip
status
200
vary
Accept-Encoding
content-type
application/javascript; charset=UTF-8
access-control-allow-origin
*
cache-control
private, must-revalidate, max-age=3600
access-control-allow-credentials
true
content-length
551
expires
Fri, 13 Sep 2019 09:37:12 GMT
hic_qos
ssl.1.damoh.giga.de/ Frame 4364
24 B
409 B
XHR
General
Full URL
https://ssl.1.damoh.giga.de/hic_qos?ads&adserv=1&_werbebanner_&simple_ad_
Requested by
Host: text
URL: data:text/javascript;base64,dmFyIE9oamF1ZGlwQWxpZWNhaUo9T2hqYXVkaXBBbGllY2FpSnx8e307CihmdW5jdGlvbihjKXtmdW5jdGlvbiBjYSgpe3guUmV8fCh4LlJlPTApO3guUmUrKzt3aW5kb3cudmlkZW9wa2dJbnRlcmZhY2UhPXgudmlkZW9wa2dJbnRlcmZhY2UmJih3aW5kb3cudmlkZW9wa2dJbnRlcmZhY2U9eC52aWRlb3BrZ0ludGVyZmFjZSk7MTA+eC5SZSYmd2luZG93LnNldFRpbWVvdXQoY2EsNTAwKX1mdW5jdGlvbiB6KCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIseik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIseik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIseik7ZGE9ITA7Zm9yKHZhciBjPTA7YzxDLmxlbmd0aDtjKyspQ1tjXS5sb2FkKCk7CmZvcihjPTA7YzxDLmxlbmd0aDtjKyspe3ZhciBiPUNbY10ucGxheSgpO2lmKHZvaWQgMCE9PWIpYi50aGVuKGZ1bmN0aW9uKCl7fSlbImNhdGNoIl0oZnVuY3Rpb24oKXt9KX1LJiYoSygpLEs9ITEpfWZ1bmN0aW9uIGVhKCl7dmFyIGM9d2luZG93Lk9PO2N8fChjPXdpbmRvdy5qT09QbGF5ZXJfMCk7cmV0dXJuIGN9ZnVuY3Rpb24gZmEoKXtpZihtKXttLnBhdXNlQnV0dG9ufHwobS5wYXVzZUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1sZWZ0OiA2cHg7cGFkZGluZy1ib3R0b206IDZweDsiIG9uZXJyb3I9InRoaXMuc3JjPVwnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9wYXVzZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlF6UTVOelUxTjBRMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UXpRNU56VTFOMFUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBETkRrM05UVTNRalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERORGszTlRVM1F6WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BnSG5DckVBQUFGMFNVUkJWSGphN0ptOWlvTkFFTWZqM1JVVzhTTWFQd2hhMjRjSTFsWldlWUxZK1FTV2dwVytnNCtVSm04UnRVMU1pbURsTGJjZ3dTUEhRY0xlempGVHpRNHkrOXZoUHlQTENrbVN6S0RaeCtsMGdnZDlQcC9oUWQ5dU4zalF3ekFnTkF0N213RTBsQWRDWXlOaXBSRWFOWTJWUm1pUTBOdnROZ3hEU1pLcXFqb2NEbU44dFZydGRqdlA4OXEyemZPY0krak5abE9XSmZVSlh4UkYxK3VWTG91aThIMmYrazNUa0NQeE1qM2lPQjU5V1pZSjkzaUFrWmpZdmYvM2xTYXFtRVJvMmtkeExxQW5TWVl2K3lITzQvUjRCTTFYcFJsRDQyLzhGeFhGUmtSTmc5UTB5SkdIallqeXdPbUJqZmlmRzdHdTYvdmw4WGlrYVlreitld2wyNzJUMjlIeldmYjcvWHE5ZGwyMzY3b3N5OGlTeGkrWEN3RU5na0FVUlJKTTA3VHYrK2UzRXh6SHdVWkU2RWVhbnMvbjRLQUYyN1lSbWdtMFpWbndvRTNUaEFkdEdBWTg2T1Z5aWRCTW9IVmRod2V0YVJvODZNVmlBUTlhVlZXRVpnS3RLQW84NkpmY1hGaERmMy9MNGQ4K0JSZ0ErUk5XU3hQaVI0d0FBQUFBU1VWT1JLNUNZSUk9Ii8+Jyk7Cm0ucGxheUJ1dHRvbnx8KG0ucGxheUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1sZWZ0OiA2cHg7cGFkZGluZy1ib3R0b206IDZweDsiIG9uZXJyb3I9InRoaXMuc3JjPVwnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9wbGF5MTgxMDAyLnBuZ1wnIiBzcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRHdBQUFBOENBSUFBQUMxbms0bEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeWhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVOaTFqTURZM0lEYzVMakUxTnpjME55d2dNakF4TlM4d015OHpNQzB5TXpvME1EbzBNaUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01UVWdLRTFoWTJsdWRHOXphQ2tpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2UXpRNU56VTFOemsyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZRelE1TnpVMU4wRTJOVVV3TVRGRk5UazVSamhCTTBNelEwVXhOMFUwUkRnaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcERORGszTlRVM056WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwRE5EazNOVFUzT0RZMVJUQXhNVVUxT1RsR09FRXpRek5EUlRFM1JUUkVPQ0l2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHZWa0dJa0FBQUhaU1VSQlZIamE3Smd4aXNKUUVJWjFYYkJSbXdoaURpQjZnVTB0cEJJRUM0dUFoVTBNQkZ2RlhxMFZQRUNDVm9MYWVnR0xpS1dGSGlDa2pyR3hqTE11aUd6QTNlVWx6L2ZZK2FzUW5QQmwvT2RsWnVLcXFzWjQwN3ZydXZ4Qm4wNG4vcUF2bHd0LzBMN3ZJelFOdmNVNEZOb0RvYkVRTWRNSWpaN0dUSDhxa2N2bFNPTFQ2WFM5WHQvdjkxVHQ0Wk9wV3ExMnU5MzVmSjVLcFh4YUlvV0dUTU9yRjR2RjlYcGRLQlQ0Z0w2WFJDYVRXU3dXalVhREJuUzRidXYxZW9QQjRDdjk3SG82K01SYXJXWVlSajZmNThBZWp3S0xMNWZMY3JrY0VYUWltODJTL0ZNZk53WHZKNVBKU3FVQ0Y3dmRqamw3UFA4MnRkdnR5V1FTK21rWStXZGNsdVhwZEFxR1lib1FneXFWU3NBTkJScWFwd1ZCSVBTMEpFay8vZ3dzRGltSG8zQ3oyZkNSNmJ1YXplWnNOaU8zT08zV1ZMcnB4YTNwbjhMUDU3T3U2K1NISUwxKytuQTRBTEhqT0s4ZkFuNFpicHJtY0Rqa1puSUJTMEFMdFZxdEdCcTNub2VESlRxZHp2RjQ1R2F3aFo1SlVaVFFpU08wUjcvZmh3YVYwV2s4R0c3YnRxWnBZQXh1VmdpV1piVmFMU2crcHZjZWorR2owV2c4SHROWTFvVHlGTS96VkZYZGJyZVVsaldFUXlnTTRkREJBWEdrSnY2bXVDaUt1TXREYUZ6MUlqUkNZeUZpcGhFYW9iRVFFZm9mUVY4RkdBQkdFSjRVNUZJZnp3QUFBQUJKUlU1RXJrSmdnZz09Ii8+Jyk7Cm0ubXV0ZUJ1dHRvbnx8KG0ubXV0ZUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1yaWdodDogNnB4O3BhZGRpbmctYm90dG9tOiA2cHg7IiBvbmVycm9yPSJ0aGlzLnNyYz1cJ2h0dHBzOi8vaG1kYXNzdHMuc2NobmVldm9ubW9yZ2VuLmNvbS9pbWcvbXV0ZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlEwWkNNRGMwUWpBMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UTBaQ01EYzBRakUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBETkRrM05UVTNSalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERORGszTlRVNE1EWTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1ByV2YzOGNBQUFKVVNVUkJWSGphN0ptL2p3RkJGTWU1dTNKUmM5UkVmZndCTGxHaW9ISTZqV3Y5QVZSWGllZ0ZDWTJ3Q2pyMDRoL2dMOUQ3MFlocTc1dWRaQ0xyZHRuZDJjM04zYnhpOHF6ZE41OTU3L3RtN2ZLV3kyVVBiL2F5MysvNWd6NGNEdnhCbjg5bi9xQVZSUkhRYnRpVGgwTVQ4aERRb2hGRnBnVzAwRFI3YUlXcDFldDF4WGxqQmkxSjBuQTR6R1F5TGtDejBiVFA1MnUzMjlGb0ZMNExUY0lBT2hRS3RWcXRXQ3hHUGpLQlJzVXd6bVl6UjZDUjNXNjM2L2Y3NlJFN0FiUFpMTWJwZElxd3lBSWM5cnZITGJFMSsxQU56cHRxY0dqZEdPOGVxS0FzeTdmRWowY29Gb3VWU2dVT1lZWHpxaHF0bGVsR1JLVnl1WnpCY3BQSjVJL0g3OHFqVkNwaEhBd0dpVVFDSFl6ek1WSkVqV05PMDFpeEhwYXg2UVdrcktsVUNrNi8zNmVzbWd0dkhSUHlzQ1pRVFpCUDFlQzhxL1lJNGwxNU9IVWIvMUtOcU1oYXhWejl3VVFDUWwyUHA5T3NQSFNoN2NqamVyVHB1SnBwSmduV2JjUS85YmhsVXg2T1pwcExlVGlWNmNWaWdUczhaNDNZNi9YSXg4bGtRZzZlVGlleWpOK2JhV3I0VVVVZEFtMkJYZ3V0Ti9kdXQxdXYxM3JmWXRaNFBHNXFNY3ZsVXJNTVRCRU9oMW51SHJKcUJsYzJHbzE4UG0raFJKRDd0WVB6UVcrY2UyYWFybGFybTgybVZxdFoxdFY4UHI5MmNPSHhlSFM4RVR1ZERxWnBOcHMybTRIU2o4ZGpFbUc3M1VJNVR1MGVtSVp3QndJQis4K0lsSDYxV2htRThscHJCWTJoS1VlakVlR09SQ0o4dkdHQ3VBdUZ3clVpK1hqREJPNTBPbzNSQldodk1CaGtXRGpzWExoM09DMlBaMG1TR0lhN1hDN2lWYS80SjBCQS93OW8wWWdDV2tDTFJoVHlFTkRNN1Z1QUFRQndvdnZJdjA5WTZnQUFBQUJKUlU1RXJrSmdnZz09Ii8+Jyk7Cm0udW5tdXRlQnV0dG9ufHwobS51bm11dGVCdXR0b249JzxpbWcgc3R5bGU9Im1heC13aWR0aDogMjVweDttYXgtaGVpZ2h0OiAyNXB4O3BhZGRpbmctcmlnaHQ6IDZweDtwYWRkaW5nLWJvdHRvbTogNnB4OyIgb25lcnJvcj0idGhpcy5zcmM9XCdodHRwczovL2htZGFzc3RzLnNjaG5lZXZvbm1vcmdlbi5jb20vaW1nL3VubXV0ZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlEwWkNNRGMwUWpRMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UTBaQ01EYzBRalUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBEUmtJd056UkNNalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERSa0l3TnpSQ016WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BpL2RxR3dBQUFTRlNVUkJWSGphN0psTFRCTkJHTWUzaUVpbDcyNUxhMHVRaTYyUEF4b0RIUEhDelpaRXFpYVFRQTJKd3NGWHZHaE1DSGZmSmlZRzFDWWVSRUUweElQdEJZN1lFeWFDK0VLSUVCTXI3VzRWaW9qV2IzZXRXYnF6MjA1WjFFMzJPMndtT3pQZi9QYWIvenhYMDk3ZVRpak5paE9KaFBLZ0tZcFNIblFxbFZJZWREcWRWcUgvaGhVUkNqUlZIaXEwT2hEVlNLdlFxcWIvZmFUUHpNM3RvK2t0eTh0Zk5tdzQ1UEY4TENuaDUzWjNkM2QxZGVWMHNpMlZhbzdGd0kvK3g0OVhXdTFoandjdjBta2NxNmNvYUF5SW9TYTBkM2xxU3JleXdtWHBkTHErdmo2Zno1ZlR5YmJGeGQ0M2IzenhPSGdBUDU1VWF2LzhQQllHSmpSTjg3L1lzN1RVOC9ZdGNBTnhUMCtQaHcxWVRtS29vdi81ays5bmZ6eU9oWUVuRHk0MmZQTXVMZlcrZTBjTUQzdTlYdTZOaEVNSWF1L1VsR0UxTWJJVzlCZzhoNGFHWkpESERac3RXVlFrNVBZZU8wWmtUa0FTTWI0bFFuelhhdVhLK0ZpREJIU2EzKzhYbFFmV0NJQkJjNlNxU3NoTlBIOU8xTmNUNGljM2lQSHQ5KytSeE9kZExsZG5aMHRMQzZUM3NzWUVJdE52TWtRYWJMSzBOTGgxcXdRM01zWml4SS85L3NjbUU4Y0tKVjJzL1pFS3RxYWhkeG9iRzhXKzlVc3NabWh1SmxhUFM0NGJ4aVhNaHZ6QmVtZDZHa21jdkhadFMyMXRPaGpVNi9WL0VMTVNlUE0wZkhGTlRZMlVWa1pHbU5BS3VPOXMydFJXV2NseGc5eERNek5JNG5OT1oyTnRMWjlNSW9FaGp4d0NyNjVtdUkzR3JOZmJ2MzBEVUlnMzZGaU1PTnJSOFNoVFVScGFob0dZUDNkMDgrWkhpUVJhRlZldkVtMXRhOXA3RkJqbVhOeU12ck9VdzlwWmgyT3lyaTVQVlJTeUlxNlZXMkRQT2pvR0RZYjBtbTNOa2M2Ym0xRkZhMnVlQVY1UFRXZHhYN2tpbG5uZFlubkp6aFh5N0tkbGtBZG5ZMlBFeVpOaW1hMFU1WXJGOGc5d2dackdKaGJPMlR5RGFjUU5DL1hZbUN6UW9vc0xCbmN1NHQ5RzA5czdPNzFPcDNEWmswaXN6NVFYQ2hHN2QrY216c1Q3eWR6Y2ptajBuMFlhaUlOQjlLbU1KT0Y1NGZObkJQcUpFOFRSbzFnNnlkNTdpUEhNenM2T2pvNkt4c3hnWUFJbVR2eFFwK1BTU082Nm16Y1BrQ1EwNFhhNzVUellEckFtVnEzcDY5Y0w4L05vWXF0MW9LeU1ZTjF5Q1dSSitKakk0T0J0blE0QWdON0FManI1UnJxQWV3K0dPQjVIWk1EaUVncjFRKy96ZlBhWGxkRWFEWEFiQlEwMTNMc1h0bGpnU0J3T2h6bEVtaDBiaFc5TlJZa1hGaTZLRWNPaVdGMmRQbjQ4S3llczFYNncyKzkvK2lUa0JsZndhb0NGWnI2d3Y1OWpuWmlZQU9XSXNXbXdWQlZZV0xpRS9JV1hJWVprUlVVRnN1Nk81ZVVIc1pnUnhYSGFiSVlPV2RVSkRRM3dqRVFpTXR3d0JSWVhFZk92Um5ONnp4NjZxa3E2N2tSSnlVR2JEUXJuNHpiQ21qeG5SR0dUOENaQWtnOWV2dzRFQW54RkltMTg0MFlvakhTeWpwYzFUMHRMc3hwcklrbEFZWURHeDZGUDRTbnRBUW8zQ2JqQkxSYUd4dWwwWWlua01rVWRZditYdmlndVBtVXlBVVRXL0oxTUpuTTYyZm45Ty9qWnRiSUM2ZnRhTGZqQll0QTRIQTdGM1pvcUU3cTh2Rng1MEhhN1hYblFOcHROZWRBa3U0ZFVvZGNmMm1xMUtnL2FZckVvRDlwc05pc1Ayb1M1aEtyUWhVSWI4N2c0L08rZ1lWK21QR2p1ZjRleTdKY0FBd0Rhbk9MSU8vcGdrQUFBQUFCSlJVNUVya0pnZ2c9PSIvPicpOwptLnNraXBhYmxlQnV0dG9ufHwobS5za2lwYWJsZUJ1dHRvbj0nPGRpdiBzdHlsZT0ib3BhY2l0eTogMC43O21pbi1oZWlnaHQ6IDI1cHg7bWF4LWhlaWdodDogMjVweDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2Rpc3BsYXk6IGlubGluZS1ibG9jaztsaW5lLWhlaWdodDogMjVweDtwYWRkaW5nLWxlZnQ6IDZweDttYXJnaW4tcmlnaHQ6IDZweDtwYWRkaW5nLXJpZ2h0OiA2cHg7Ym9yZGVyOiAjRkZGRkZGO2JhY2tncm91bmQtY29sb3I6YmxhY2s7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ij5Ta2lwIEFkIGluIFt0aW1lXXM8ZGl2PicpO20uc2tpcEJ1dHRvbnx8KG0uc2tpcEJ1dHRvbj0nPGRpdiBzdHlsZT0ibWluLWhlaWdodDogMjVweDttYXgtaGVpZ2h0OiAyNXB4O29wYWNpdHk6IDAuNjttYXJnaW4tcmlnaHQ6IDZweDtwYWRkaW5nLWxlZnQ6IDZweDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2Rpc3BsYXk6IGlubGluZS1ibG9jaztsaW5lLWhlaWdodDogMjVweDtiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14OyI+U2tpcCBBZDxpbWcgc3R5bGU9Im1heC13aWR0aDogMzBweDtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246IG1pZGRsZTsiIG9uZXJyb3I9XCdodHRwczovL2htZGFzc3RzLnNjaG5lZXZvbm1vcmdlbi5jb20vaW1nL3NraXAxODEwMDIucG5nXCcgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQVlBQUFBNi9ObHlBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQTNCcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1UTTRJRGM1TGpFMU9UZ3lOQ3dnTWpBeE5pOHdPUzh4TkMwd01Ub3dPVG93TVNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3VFUwOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXRiUzhpSUhodGJHNXpPbk4wVW1WbVBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZjMVI1Y0dVdlVtVnpiM1Z5WTJWU1pXWWpJaUI0Yld4dWN6cDRiWEE5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM4aUlIaHRjRTFOT2s5eWFXZHBibUZzUkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwRk9UWkRRalZHTUVSR01USXhNVVUyT0RReFFVVkJOME5HTVVNeU9Ua3hOU0lnZUcxd1RVMDZSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBGUmpjM09VRkdNRVJHUkRVeE1VVTJPRU0xT1VFNFFrSkdSamRHTmtRM05pSWdlRzF3VFUwNlNXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEZSamMzT1VGRlJrUkdSRFV4TVVVMk9FTTFPVUU0UWtKR1JqZEdOa1EzTmlJZ2VHMXdPa055WldGMGIzSlViMjlzUFNKQlpHOWlaU0JRYUc5MGIzTm9iM0FnUTBNZ01qQXhOeUFvVFdGamFXNTBiM05vS1NJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5KdmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09tUXpZemsxTkRCbUxUVmxZVE10TkRsbE5DMWhOR1V5TFdRMk1qUXlOVGN6Wm1VNVlTSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcEZPVFpEUWpWR01FUkdNVEl4TVVVMk9EUXhRVVZCTjBOR01VTXlPVGt4TlNJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BtNlhOVDRBQUFKcVNVUkJWSGphWXZ6Ly96L0RTQUpNRENNTWpIcDQxTU9qSGg3MThLaUhSejA4NnVGUkQ0OTZlTlREb3g0ZTlmQ29oN0VCbHNIbUlFTkR3d0JzNHVmUG45OUFGUXRBQXdEVXhqWTJOakZkWFYwcjlmWDEvVWpWQzlXREFzZ3hCeGVtU1pMMkJZTFMwdEt3RlN0V3JBUjZQZ3JrWUZJaWdCaXhRWldIZVhsNWVVQzBob1lHeDdadDI1YXFBWUdlbnA0UGtSNytSNHpZb1BJd2Nvenc4ZkV4ckY2OXVqc2FDSFIxZFgwR09vYnBWbWlWbDVkSHFLdXJhMWhaV2ZFY08zWnN4WWdvcFFNQ0FneUF5WHkrbTVzYnp6TWd1SExseXJiaGtxUnhPaENVcjllc1dUUGJFUWkwdGJXOWhrV2hSUWlBOHZYa3laTkxzckt5TXJXMHREeUdWYUdGRDJSblovdE1talJwc3BtWldjaXdLN1J3QVJjWEZ4VnBhZW1GZ1lHQk1qZUFZRVMwcFRVMU5ia1dMbHpZRHl6VS9HbWRwRmxvbEtUL2taT3YyOXZiTTRDRm1zYXdLN1R3Z2ZqNGVJY2hWMmlOdVA0d0pVbncwNmRQRENNbVNWKzdkdTBic0tNVlA2eGFXcmpBL1Buejk0RzZsVStBWUZqSE1DZ0pBL3ZPVTVxQjRPN2R1L3VHYXJWRWRCSXVLU2twdm43OStvMzc5KzhmR05ZdExXQUg0a3hUVTFQanBVdVh0Z3piN2lFTUFEMjZhTjY4ZVhNZlBIaHdpTjdkUTdxMnRCNC9mc3lRbHBhV0NVeksxeDQrZkhob1dJOTRIRDkrL0ZrcUVBQUxxVStQSGowNlFrcGdEYmxDcTYrdmIxMC9FQUJqK0FnNUJkNlFpZUdQSHo4eXBLU2tsSjRBQW1JOE8yU2JsbGV2WHIyeVk4ZU9HKzd1N3VIQXBIeU1GTS9TT2tuVFpPYUJFaXdsSldXRlB2TUFGYU9LK1lOdWJna1VtMEFQV3RMS2ZNYlJ4YVdqSGg3MThLaUhSejA4NnVGUkQ0OTZlTlREb3g0ZTlmQ29oMGM5UE9waEJnYUFBQU1BR21DMHBlSmNHRUlBQUFBQVNVVk9SSzVDWUlJPSIvPjwvZGl2PicpOwppZihtLnNpZGVsb2Fkcyl7dmFyIGM9ZnVuY3Rpb24oKXt9O20uc2lkZWxvYWRzLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5hbGlhczsiZnVuY3Rpb24iPT09dHlwZW9mIGImJihiPWIoKSk7YT1hLnVybDsiZnVuY3Rpb24iPT09dHlwZW9mIGEmJihhPWEoKSk7ZS5ZYShhLGIsW10sYyxjLGwpfSl9bC5sKG0uZ2xvYmFsQ29uZmlnLG0uY2xpZW50Q29uZmlnLG0ucHJlY2hlY2tlZCxtLm9uUmVhZHksbS5vbkZhaWx1cmUsbSk7ZG9jdW1lbnQuaGRfcmVhZHk9ITA7dmFyIGI9bS5zdGFydFBsYXllcjtiJiYiZnVuY3Rpb24iPT09dHlwZW9mIGImJmIoKX1lbHNlIGtjKGZhLDUwKX1mdW5jdGlvbiByKGMsYil7aWYoZS5jbyllLnRyYWNrKCJzdGF0c19oZF9ieXBhc3MiLCIiLCEwKTtlbHNlIGlmKG0mJmwpeyhtLmFkVGFnfHxtLnByZXJvbGxBZFRhZykmJmMucGF1c2UoKTtlLnYoay5mZCxjLnUoKSk7aWYoYy5nZXRDdXJyZW50VGltZSl7dmFyIGE9Yy5nZXRDdXJyZW50VGltZSgpO2EmJgplLnRyYWNrKCJhY3RpdmF0ZWRBdCIsYSl9Yj9sLkthPSEwOmUudHJhY2soInN0YXRzX2hkX2FiZCIsIiIsITApO2E9bmV3IGdhO2EuZmYoYyk7YS5CdChsKTthLkF0KG0pO2EubXQoKTthLmcoKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cihjLGIpfS5iaW5kKHRoaXMpLDUwKX1mdW5jdGlvbiBoYShjLGIpe2MucGF1c2UoKTtpZihsLkdiLmxlbmd0aCl7dmFyIGE9bC5HYi5zaGlmdCgpO2lmKCJhZGNhbGwiPT1hLnR5cGUpe3ZhciBoO2g9ZS5IdCh7IltMT0FEU0NSSVBUXSI6ZS5iYSgxMCksIltVVElMU10iOmUuYmEoMTApLCJbQ0FMTEJBQ0tdIjplLmJhKDEwKX0pO3dpbmRvd1toWyJbTE9BRFNDUklQVF0iXV09ZS5maC5iaW5kKGUpO3dpbmRvd1toWyJbVVRJTFNdIl1dPWw7Zm9yKHdpbmRvd1toWyJbQ0FMTEJBQ0tdIl1dPWZ1bmN0aW9uKGEpe2Zvcih2YXIgaCBpbiBhKW1baF09YVtoXTtyKGMsYil9O2g9YS5zY3JpcHRzLnNoaWZ0KCk7KWUuZmgoaCxmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJzaWRlbG9hZCBzdWNjZXNzIil9LApmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJzaWRlbG9hZCBmYWlsZWQiKX0sbCl9ZWxzZSByKGMsYil9ZWxzZSByKGMsYil9Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTXM9dGhpcy5hWzFdO3RoaXMuWGs9dGhpcy5hWzFdO3RoaXMuZ2o9dGhpcy5hWzddO3RoaXMuRW09dGhpcy5hWzNdO3RoaXMubmo9dGhpcy5hWzEwXTt0aGlzLkRuPXRoaXMuYVszXTt0aGlzLmZrPXRoaXMuYVsxXTt0aGlzLk9zPXRoaXMuYVsxXTt0aGlzLkl1PXRoaXMuYVs4XTt0aGlzLlZxPXRoaXMuYVs0XTt0aGlzLmo9dGhpcy5hWzNdfWMuY3Q9YjtiLnByb3RvdHlwZT17THM6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5Nczp0aGlzLldrKGEpfSxXazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuWGs6dGhpcy5maihhKX0sZmo6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLmdqOnRoaXMuRG0oYSl9LApEbTpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuRW06dGhpcy5taihhKX0sbWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLm5qOnRoaXMuQ24oYSl9LENuOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5Ebjp0aGlzLmVrKGEpfSxlazpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuZms6dGhpcy5OcyhhKX0sTnM6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLk9zOnRoaXMuSHUoYSl9LEh1OmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5JdTp0aGlzLlVxKGEpfSxVcTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuVnE6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBpYT1jLmN0fHxpYSxsYz1uZXcgaWEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1sYy5Mcyg0KTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5jbz0KITE7dGhpcy5TYT0ic2V0dXAiO3RoaXMuS2M9W107dGhpcy5qZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLllzLmJpbmQodGhpcykpO3RoaXMua2I9e307dGhpcy5OZz17fTt0aGlzLmNmPSExfWMuJGo9YjtiLnByb3RvdHlwZT17YnU6ZnVuY3Rpb24oKXt2YXIgYT0iIixiO2ZvcihiIGluIHRoaXMua2IpdGhpcy5rYi5oYXNPd25Qcm9wZXJ0eShiKSYmKGErPWIrdGhpcy5rYltiXSsiXyIpO3JldHVybiBhfSx6YzpmdW5jdGlvbigpe3RoaXMuY2Z8fCh0aGlzLmNmPWUuYmEoMTApKTtyZXR1cm4gdGhpcy5jZn0sbGI6ZnVuY3Rpb24oYSl7dGhpcy5rYlthXXx8KHRoaXMua2JbYV09MCk7dGhpcy5rYlthXSs9MTs1PHRoaXMua2JbYV0mJiF0aGlzLk5nW2FdJiYodGhpcy5OZ1thXT0hMCwibmV3QmlnQWRJZCI9PWEmJnRoaXMudHJhY2soInN0YXRzX2hkX2NoZWNrdHJhY2tzIix0aGlzLmJ1KCksITApKX0samU6ZnVuY3Rpb24oKXt0aGlzLmFhPXt1cmxzOnt9LApob21hZFVybHM6e30sb3JpZ2luYWxVcmxzOnt9LHNjcmlwdHM6e30sZXZlbnRsaXN0ZW5lcjpbXSxnZW5lcmFsRXZlbnRsaXN0ZW5lcjpbXSxpRnJhbWVzOltdLGlGcmFtZU9uTG9hZEhhbmRsZXI6e30saUZyYW1lVXJsOiIiLHRyYWNlOltdLHN0YWNrOltdLGVycm1zZzpbXX19LGpuOmZ1bmN0aW9uKGEpe3RoaXMuYWEuZXJybXNnLnB1c2goYSl9LHBvc3RNZXNzYWdlOmZ1bmN0aW9uKGEsYil7dHJ5e2EuY29udGVudFdpbmRvdyYmKGE9YS5jb250ZW50V2luZG93KX1jYXRjaChkKXt9YSYmYS5wb3N0TWVzc2FnZSYmYS5wb3N0TWVzc2FnZShiLCIqIil9LG1hOmZ1bmN0aW9uKGEsYixkKXt0aGlzLnBvc3RNZXNzYWdlKGEse3R5cGU6InZwYWlkIixldmVudDpiLGRhdGE6ZH0pfSxZczpmdW5jdGlvbihhKXthJiZhLmRhdGEmJmEuZGF0YS50eXBlJiYidnBhaWQiPT1hLmRhdGEudHlwZSYmdGhpcy5YcyhhLmRhdGEpfSxYczpmdW5jdGlvbihhKXtpZih0aGlzLmFhJiZ0aGlzLmFhLmV2ZW50bGlzdGVuZXIpZm9yKHZhciBiPQp0aGlzLmFhLmV2ZW50bGlzdGVuZXIubGVuZ3RoLGQ9MDtkPGI7ZCsrKXRoaXMuYWEmJnRoaXMuYWEuZXZlbnRsaXN0ZW5lciYmdGhpcy5hYS5ldmVudGxpc3RlbmVyW2RdJiZhLmV2ZW50PT10aGlzLmFhLmV2ZW50bGlzdGVuZXJbZF0ubmFtZSYmdGhpcy5hYS5ldmVudGxpc3RlbmVyW2RdLmNiKGEpfSxiZTpmdW5jdGlvbihhLGIpe3RoaXMuYWEuZXZlbnRsaXN0ZW5lci5wdXNoKHtuYW1lOmEsY2I6Yn0pfSxsZzpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmdxKGEpLGQ9ITE7aWYoYilyZXR1cm4gdGhpcy5laChhLCJQT1NUIix7aG9tYWRfcmVzb2x2ZV9oYXNoOmJ9LGZ1bmN0aW9uKGEpe3RyeXtkPUpTT04ucGFyc2UoYS5yZXNwb25zZVRleHQpLnVybH1jYXRjaChiKXtjb25zb2xlLmxvZygid3RmIixiKX19LGZ1bmN0aW9uKCl7fSwhMCwhMCksZH0sZ3E6ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IFJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPyhbdy4tXSopOj8uKihbMC05XSspPy8/KFthLWYwLTldezQwfSkvPyQiLAoiZyIpO2lmKChiPWIuZXhlYyhhKSkmJihiWzJdfHxiWzVdKSl7aWYoYlsyXSlyZXR1cm4gYlsyXTtpZihiWzVdKXJldHVybiBiWzVdfWVsc2UgaWYoYj1uZXcgUmVnRXhwKCJeKGh0dHBzPyk6Ly8oW3cuLV0qKTo/LiooWzAtOV0rKT8vPyhbYS1mMC05XXs0MH0pLz8kIiwiZyIpLChiPWIuZXhlYyhhKSkmJmJbNF0pcmV0dXJuIGJbNF07cmV0dXJuITF9LGduOmZ1bmN0aW9uKGEsYil7aWYoYiYmISgwPnRoaXMubGEoYSkuaG9zdC5pbmRleE9mKCJkYW1vaCIpKSl7aWYoYT09Yil7aWYoZS5RcChhKSlyZXR1cm47KGI9dGhpcy5sZyhhKSl8fChiPWEpfTA9PT1iLmluZGV4T2YoIi8vIikmJihiPSJodHRwczoiK2IpO3RoaXMuYWEudXJsc1thXT1iO3RoaXMuYWEudXJsc1tiXT1hO3RoaXMuYWEuaG9tYWRVcmxzW2FdPWI7dGhpcy5hYS5vcmlnaW5hbFVybHNbYl09YX19LFFwOmZ1bmN0aW9uKGEpe3ZhciBiPSExO3RoaXMuYWEuaG9tYWRVcmxzW2FdJiYoYj10aGlzLmFhLmhvbWFkVXJsc1thXSk7CnJldHVybiBifSx0ZzpmdW5jdGlvbihhKXt2YXIgYj0hMTt0aGlzLmFhLm9yaWdpbmFsVXJscyYmdGhpcy5hYS5vcmlnaW5hbFVybHNbYV0mJihiPXRoaXMuYWEub3JpZ2luYWxVcmxzW2FdKTtyZXR1cm4gYn0sZWI6ZnVuY3Rpb24oYSxiKXtifHwoYj0iIik7dGhpcy50cmFjaygic3RhdHNfdnBhaWRfIithLGIsITApfSxwcjpmdW5jdGlvbihhKXtyZXR1cm4iYWJvdXQ6YmxhbmsiPT1hfHwiYWJvdXQ6c2VsZiI9PWF8fCIiPT1hfSx0ZTpmdW5jdGlvbihhKXtpZighYXx8Im9iamVjdCIhPT10eXBlb2YgYSlyZXR1cm4gMDt2YXIgYj0wLGQ9IiI7Zm9yKGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiZiKys7cmV0dXJuIGJ9LENnOmZ1bmN0aW9uKGEsYil7dmFyIGQ9YVtiXTtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBkP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGQpOiJmdW5jdGlvbiI9PT10eXBlb2YgZD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChkKCkpOiJvYmplY3QiPT09dHlwZW9mIGQ/CmQ6bnVsbH0sSGg6ZnVuY3Rpb24oYSl7Zm9yKDthIT1kb2N1bWVudC5ib2R5JiZudWxsIT1hOylhPWEucGFyZW50RWxlbWVudDtyZXR1cm4gYT09ZG9jdW1lbnQuYm9keT8hMDohMX0sV2c6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiYiZnVuY3Rpb24iPT09dHlwZW9mIGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PyhhPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpPzA8PWEudG9wJiYwPD1hLmxlZnQmJmEuYm90dG9tPD0od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSYmYS5yaWdodDw9KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpOiExOiExfSxCZTpmdW5jdGlvbihhLGIpe3ZhciBkPTAsZj0wLG49MCxjPTAsZT0hMTtpZighYXx8IWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0fHwiZnVuY3Rpb24iIT09dHlwZW9mIGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXJldHVybiExOwp2YXIgZz1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFnKXJldHVybiExO249Zy5oZWlnaHQqZy53aWR0aDtkPWcud2lkdGg7Zj1nLmhlaWdodDswPmcudG9wJiYoZis9Zy50b3ApO2cuYm90dG9tPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpJiYoZi09Zy5ib3R0b20tKHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpOzA+Zy5sZWZ0JiYoZCs9Zy5sZWZ0KTtnLnJpZ2h0Pih3aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKSYmKGQtPWcucmlnaHQtKHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpKTswPmYmJihmPTApOzA+ZCYmKGQ9MCk7MDxuJiYoYz0xMDAvbipkKmYpO2M+PWImJihlPSEwKTtyZXR1cm4gZX0sQ2U6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5CZShhLmVsLAphLnBlcmNlbnQpO2Euc3RhcnRUaW1lfHwoYS5zdGFydFRpbWU9KG5ldyBEYXRlKS5nZXRUaW1lKCkpO2lmKGIpe2lmKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWEuc3RhcnRUaW1lPj1hLnRpbWVNUyl7YS5jYigpO3JldHVybn19ZWxzZSBhLnN0YXJ0VGltZT0hMTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuQ2UoYSl9LmJpbmQodGhpcyksMTAwKX0sRWI6ZnVuY3Rpb24oYSl7YT1hJiYibnVtYmVyIj09PXR5cGVvZiBhP01hdGguYWJzKGEpOjEwO3JldHVybiBNYXRoLnJvdW5kKE1hdGgucG93KDEwLGEpKiguODk5OTk5OTk5Kk1hdGgucmFuZG9tKCkrLjEpKX0sYmE6ZnVuY3Rpb24oYSl7YT1hJiYibnVtYmVyIj09PXR5cGVvZiBhJiYwPGE/TWF0aC5yb3VuZChhKToxMDtmb3IodmFyIGI9IiIsZD0wO2Q8YTtkKyspYis9U3RyaW5nLmZyb21DaGFyQ29kZSgoLjU+TWF0aC5yYW5kb20oKT82NTo5NykrTWF0aC5mbG9vcigyNipNYXRoLnJhbmRvbSgpKSk7cmV0dXJuIGJ9LHZlOmZ1bmN0aW9uKGEpe3ZhciBiPQowLGQsZjtpZigwPT09YS5sZW5ndGgpcmV0dXJuIGI7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKylmPWEuY2hhckNvZGVBdChkKSxiPShiPDw1KS1iK2YsYnw9MDtyZXR1cm4gYn0sRWg6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2YXIgaD0iIixkLGY7Zm9yKGQ9NzswPD1kO2QtLSlmPWE+Pj40KmQmMTUsaCs9Zi50b1N0cmluZygxNik7cmV0dXJuIGh9ZnVuY3Rpb24gZChhLGIpe3JldHVybiBhPDxifGE+Pj4zMi1ifXZhciBmLG4sYz1BcnJheSg4MCksZT0xNzMyNTg0MTkzLGc9NDAyMzIzMzQxNyxrPTI1NjIzODMxMDIsTD0yNzE3MzM4NzgsbD0zMjg1Mzc3NTIwLHAsbSx0LEIscjthPWEmJiJzdHJpbmciPT09dHlwZW9mIGE/YToiIjtwPWEubGVuZ3RoO3ZhciBxPVtdO2ZvcihmPTA7ZjxwLTM7Zis9NCluPWEuY2hhckNvZGVBdChmKTw8MjR8YS5jaGFyQ29kZUF0KGYrMSk8PDE2fGEuY2hhckNvZGVBdChmKzIpPDw4fGEuY2hhckNvZGVBdChmKzMpLHEucHVzaChuKTtzd2l0Y2gocCUKNCl7Y2FzZSAwOmY9MjE0NzQ4MzY0ODticmVhaztjYXNlIDE6Zj1hLmNoYXJDb2RlQXQocC0xKTw8MjR8ODM4ODYwODticmVhaztjYXNlIDI6Zj1hLmNoYXJDb2RlQXQocC0yKTw8MjR8YS5jaGFyQ29kZUF0KHAtMSk8PDE2fDMyNzY4O2JyZWFrO2Nhc2UgMzpmPWEuY2hhckNvZGVBdChwLTMpPDwyNHxhLmNoYXJDb2RlQXQocC0yKTw8MTZ8YS5jaGFyQ29kZUF0KHAtMSk8PDh8MTI4fWZvcihxLnB1c2goZik7MTQhPXEubGVuZ3RoJTE2OylxLnB1c2goMCk7cS5wdXNoKHA+Pj4yOSk7cS5wdXNoKHA8PDMmNDI5NDk2NzI5NSk7Zm9yKGE9MDthPHEubGVuZ3RoO2ErPTE2KXtmb3IoZj0wOzE2PmY7ZisrKWNbZl09cVthK2ZdO2ZvcihmPTE2Ozc5Pj1mO2YrKyljW2ZdPWQoY1tmLTNdXmNbZi04XV5jW2YtMTRdXmNbZi0xNl0sMSk7bj1lO3A9ZzttPWs7dD1MO0I9bDtmb3IoZj0wOzE5Pj1mO2YrKylyPWQobiw1KSsocCZtfH5wJnQpK0IrY1tmXSsxNTE4NTAwMjQ5JjQyOTQ5NjcyOTUsQj10LAp0PW0sbT1kKHAsMzApLHA9bixuPXI7Zm9yKGY9MjA7Mzk+PWY7ZisrKXI9ZChuLDUpKyhwXm1edCkrQitjW2ZdKzE4NTk3NzUzOTMmNDI5NDk2NzI5NSxCPXQsdD1tLG09ZChwLDMwKSxwPW4sbj1yO2ZvcihmPTQwOzU5Pj1mO2YrKylyPWQobiw1KSsocCZtfHAmdHxtJnQpK0IrY1tmXSsyNDAwOTU5NzA4JjQyOTQ5NjcyOTUsQj10LHQ9bSxtPWQocCwzMCkscD1uLG49cjtmb3IoZj02MDs3OT49ZjtmKyspcj1kKG4sNSkrKHBebV50KStCK2NbZl0rMzM5NTQ2OTc4MiY0Mjk0OTY3Mjk1LEI9dCx0PW0sbT1kKHAsMzApLHA9bixuPXI7ZT1lK24mNDI5NDk2NzI5NTtnPWcrcCY0Mjk0OTY3Mjk1O2s9ayttJjQyOTQ5NjcyOTU7TD1MK3QmNDI5NDk2NzI5NTtsPWwrQiY0Mjk0OTY3Mjk1fXJldHVybihiKGUpK2IoZykrYihrKStiKEwpK2IobCkpLnRvTG93ZXJDYXNlKCl9LHZiOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iIixkLGYsbixjLGUsZyxrPTA7azxhLmxlbmd0aDspZD1hLmNoYXJDb2RlQXQoaysrKSwKZj1hLmNoYXJDb2RlQXQoaysrKSxuPWEuY2hhckNvZGVBdChrKyspLGM9ZD4+MixkPShkJjMpPDw0fGY+PjQsZT0oZiYxNSk8PDJ8bj4+NixnPW4mNjMsaXNOYU4oZik/ZT1nPTY0OmlzTmFOKG4pJiYoZz02NCksYj1iKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGMpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGQpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGUpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGcpO3JldHVybiBifSxtcjpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudmVuZG9yJiYtMTxuYXZpZ2F0b3IudmVuZG9yLmluZGV4T2YoIkFwcGxlIil9LAp1YzpmdW5jdGlvbigpe3ZhciBhPXt9LGI9ITEsZD0hMSxmPSExLG49ITEsYz0hMSxlPSExLGc9ITEsaz0hMSxtPSExLGw9ITE7dHJ5e2I9Y2hlY2tGb3JQaGFudG9tSlMoKX1jYXRjaChwKXt9dHJ5ey9cYkhlYWRsZXNzQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJihkPSEwKX1jYXRjaChyKXt9dHJ5e2Y9d2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoIndlYmRyaXZlciIpfHxuYXZpZ2F0b3IuTmI/ITA6ITF9Y2F0Y2godCl7fXRyeXtuPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk9wZXJhIiksYz0tMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94IiksZT0tMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJTYWZhcmkiKSxnPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk1TSUUiKSxtPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkNocm9tZSIpLGs9IWcmJiEhd2luZG93LlN0eWxlTWVkaWEsCmw9KG18fG4pJiYhIXdpbmRvdy5DU1N9Y2F0Y2gocSl7fWEuaXNQaGFudG9tSlM9YjthLmlzQ2hyb21lSGVhZGxlc3M9ZDthLmlzRmlyZWZveEhlYWRsZXNzPWY7YS5pc09wZXJhPW47YS5pc0ZpcmVmb3g9YzthLmlzU2FmYXJpPWU7YS5pc0lFPWc7YS5pc0VkZ2U9azthLmlzQ2hyb21lPW07YS5pc0JsaW5rPWw7cmV0dXJuIGF9LGFxOmZ1bmN0aW9uKCl7dmFyIGE9IlUiLGI9dGhpcy51YygpO2IuaXNQaGFudG9tSlM/YT0iSFAiOmIuaXNDaHJvbWVIZWFkbGVzcz9hPSJIQyI6Yi5pc0ZpcmVmb3hIZWFkbGVzcz9hPSJIRiI6KGIuaXNCbGluayYmKGE9IkIiKSxiLmlzT3BlcmEmJihhPSJPIiksYi5pc0ZpcmVmb3gmJihhPSJGIiksYi5pc1NhZmFyaSYmKGE9IlMiKSxiLmlzSUUmJihhPSJJIiksYi5pc0VkZ2UmJihhPSJFIiksYi5pc0Nocm9tZSYmKGE9IkMiKSk7cmV0dXJuIGF9LFRhOmZ1bmN0aW9uKCl7dmFyIGE9e1NpOmZ1bmN0aW9uKCl7cmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSl9LApjajpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9CbGFja0JlcnJ5L2kpfSxQcTpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpfSxqbDpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9PcGVyYSBNaW5pL2kpfSxJbTpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9JRU1vYmlsZS9pKX0sTW46ZnVuY3Rpb24oKXtyZXR1cm4gYS5TaSgpfHxhLmNqKCl8fGEuUHEoKXx8YS5qbCgpfHxhLkltKCl9fTtyZXR1cm4gYS5NbigpfSxsYTpmdW5jdGlvbihhKXt2YXIgYj0ic291cmNlIHByb3RvY29sIGF1dGhvcml0eSB1c2VySW5mbyB1c2VyIHBhc3N3b3JkIGhvc3QgcG9ydCByZWxhdGl2ZSBwYXRoIGRpcmVjdG9yeSBmaWxlIHF1ZXJ5IGFuY2hvciIuc3BsaXQoIiAiKTthPS9eKD86KD8hW146QF0rOlteOkBcL10qQCkoW146XC8/Iy5dKyk6KT8oPzpcL1wvKT8oKD86KChbXjpAXSopKD86OihbXjpAXSopKT8pP0ApPyhbXjpcLz8jXSopKD86OihcZCopKT8pKCgoXC8oPzpbXj8jXSg/IVtePyNcL10qXC5bXj8jXC8uXSsoPzpbPyNdfCQpKSkqXC8/KT8oW14/I1wvXSopKSg/Olw/KFteI10qKSk/KD86IyguKikpPykvLmV4ZWMoYSk7CmZvcih2YXIgZD17fSxmPTE0O2YtLTspZFtiW2ZdXT1hW2ZdfHwiIjtkLnF1ZXJ5S2V5PXt9O2RbYlsxMl1dLnJlcGxhY2UoLyg/Ol58JikoW14mPV0qKT0/KFteJl0qKS9nLGZ1bmN0aW9uKGEsYixoKXtiJiYoZC5xdWVyeUtleVtiXT1oKX0pO3JldHVybiBkfSx1bmlxdWU6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXt9LGQ9W10sZj0wLG49YS5sZW5ndGg7ZjxuOysrZiliLmhhc093blByb3BlcnR5KGFbZl0pfHwoZC5wdXNoKGFbZl0pLGJbYVtmXV09MSk7cmV0dXJuIGR9LFNiOmZ1bmN0aW9uKGEpe2E9dGhpcy5sYShhKS5ob3N0LnNwbGl0KCIuIik7dmFyIGI9IiI7YVthLmxlbmd0aC0yXSYmKGIrPWFbYS5sZW5ndGgtMl0rIi4iKTthW2EubGVuZ3RoLTFdJiYoYis9YVthLmxlbmd0aC0xXSk7cmV0dXJuIGJ9LEJhOmZ1bmN0aW9uKGEpe3ZhciBiPSIiLGQ9ITE7d2luZG93JiZ3aW5kb3cubG9jYXRpb24mJndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSYmKGI9d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKTsKYiYmLTE8Yi5pbmRleE9mKGEpJiYoZD0hMCk7cmV0dXJuIGR9LHFxOmZ1bmN0aW9uKCl7dmFyIGE9IiIsYj0iIixkPSIiO3RyeXthPXdpbmRvdy5sb2NhdGlvbi5ob3N0LGI9d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLHdpbmRvdyE9d2luZG93LnRvcCYmKGE9d2luZG93LnRvcC5sb2NhdGlvbi5ob3N0LGI9d2luZG93LnRvcC5sb2NhdGlvbi5wYXRobmFtZSl9Y2F0Y2goZil7ZG9jdW1lbnQucmVmZXJyZXImJihkPXRoaXMubGEoZG9jdW1lbnQucmVmZXJyZXIpLGE9ZC5ob3N0LGI9ZC5wYXRoKX1yZXR1cm4gYStifSxVbzpmdW5jdGlvbihhLGIpe2Zvcih2YXIgZD1bXSxmPVtdLG49MDtuPGIubGVuZ3RoO24rKylkW2Jbbl1dPSEwO2ZvcihuPTA7bjxhLmxlbmd0aDtuKyspZFthW25dXXx8Zi5wdXNoKGFbbl0pO3JldHVybiBmfSxXdDpmdW5jdGlvbihhLGIpe3ZhciBkPS0xLGY9IiI7dHJ5ezA8YS5pbmRleE9mKCIlIikmJjA8Yj8oZj1hLnNwbGl0KCIlIiksZD1iLzEwMCpmKTooZD1hLnNwbGl0KCI6IiksCmQ9MzYwMCorZFswXSs2MCorZFsxXSsgK2RbMl0sZD1NYXRoLnJvdW5kKGQpKX1jYXRjaChuKXtkPS0xfXJldHVybiBpc05hTihkKT8tMTpkfSx5ZzpmdW5jdGlvbihhKXthPU1hdGgucm91bmQoYSk7dmFyIGI9Ii0tOi0tIjswPD1hJiYoYT1NYXRoLmZsb29yKGEpLGI9TWF0aC5mbG9vcihhLzYwKSxiPXRoaXMuVmgoYikrIjoiK3RoaXMuVmgoTWF0aC5mbG9vcihhLTYwKmIpKSk7cmV0dXJuIGJ9LFZoOmZ1bmN0aW9uKGEpe3JldHVybiAxMD5hPyIwIithLnRvU3RyaW5nKCk6YS50b1N0cmluZygpfSxlZjpmdW5jdGlvbihhKXt0aGlzLlNhPWF9LHZnOmZ1bmN0aW9uKGEsYixkKXt2YXIgZjtkLnN0YXRlPXRoaXMuU2E7dGhpcy5XZihkKTsiZnVuY3Rpb24iPT09dHlwZW9mIHdpbmRvdy5DdXN0b21FdmVudD9mPW5ldyBDdXN0b21FdmVudChiLHtkZXRhaWw6ZH0pOihmPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpLGYuaW5pdEN1c3RvbUV2ZW50KGIsITEsITEsZCkpOwphLmRpc3BhdGNoRXZlbnQoZil9LHdjOmZ1bmN0aW9uKGEsYixkKXtifHwoYj0iaGRFdmVudCIpO2R8fChkPXdpbmRvdyk7dGhpcy52ZyhkLGIsYSl9LHY6ZnVuY3Rpb24oYSxiLGQsZixuLGMsZyl7dmFyIEE9YTtkJiZiJiYoYj1rLlhhKGIsZCkpO2ImJihBPWsuWGEoYSxiKSk7ZiYmKEE9ay5YYShBLGYpKTtuJiYoQT1rLlhhKEEsbikpO2MmJihBPWsuWGEoQSxjKSk7ZyYmKEE9ay5YYShBLGMpKTtlLndjKEEpfSwkczpmdW5jdGlvbihhKXt2YXIgYj17fTtpZighYS5jb2RlKXJldHVybiExO2lmKGEuc3BlY2lhbF90cmFjayliPWE7ZWxzZSBpZighKGEuY29kZSYmMTAwNTw9YS5jb2RlJiYxMDI5Pj1hLmNvZGUpfHwxMDIzPT1hLmNvZGV8fDEwMTg9PWEuY29kZSlyZXR1cm47dHJ5e2phJiYoYi5zZXNzaW9uX2lkPWphKTtiLmFkc2Vzc2lvbl9pZD1hLmFkc2Vzc2lvbl9pZD9hLmFkc2Vzc2lvbl9pZDoiZXBvbiI7YS5ob21hZEltcHJlc3Npb25BZElkJiYoYi5hZF9pZD1hLmhvbWFkSW1wcmVzc2lvbkFkSWQpOwpiLmV2ZW50PWEuY29kZTtiLnNpdGVfaHJlZj10aGlzLnFxKCk7aWYoYS5zdGF0ZSlzd2l0Y2goYS5zdGF0ZSl7Y2FzZSAicHJlcm9sbCI6Yi5wb3NpdGlvbj0xO2JyZWFrO2Nhc2UgIm1pZHJvbGwiOmIucG9zaXRpb249MjticmVhaztjYXNlICJwb3N0cm9sbCI6Yi5wb3NpdGlvbj0zO2JyZWFrO2RlZmF1bHQ6Yi5wb3NpdGlvbj0wfWEudmlkZW9fZHVyYXRpb24mJihiLnZpZGVvX2R1cmF0aW9uPWEudmlkZW9fZHVyYXRpb24pfWNhdGNoKGQpe31yZXR1cm4gYn0sV2Y6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy4kcyhhKTtpZihiKWlmKCFsfHwhbC5YKXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5XZihiKX0uYmluZCh0aGlzKSw1MDApO2Vsc2UgaWYobC5pc0VuYWJsZWQpe2lmKCJvYmplY3QiPT10eXBlb2YgYil0cnl7Yj1KU09OLnN0cmluZ2lmeShiKX1jYXRjaChkKXtiPWIudG9TdHJpbmc/Yi50b1N0cmluZygpOiIifWImJmIudHJpbSYmKGI9Yi50cmltKCkpO2E9bC5EZCgpOwpsLnphKGEsITApO2E9bC56YShhLCEwKTthLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0iIjthLmRhdGEuaG9tYWRfYXQ9YjtsLkxhKGEsZnVuY3Rpb24oKXt9KX19LHRyYWNrOmZ1bmN0aW9uKGEsYixkKXtpZihkKWlmKCFsfHwhbC5YKXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50cmFjayhhLGIsZCl9LmJpbmQodGhpcyksNTAwKTtlbHNlIGlmKGwuaXNFbmFibGVkKXthJiZhLnRyaW0mJihhPWEudHJpbSgpKTtiJiZiLnRyaW0mJihiPWIudHJpbSgpKTt2YXIgZj1hK2I7dGhpcy5NY3x8KHRoaXMuTWM9e30pO3RoaXMuTWNbZl18fCh0aGlzLk1jW2ZdPTApO3RoaXMuTWNbZl0rKzsxMDx0aGlzLk1jW2ZdfHwoZj1sLkRkKCkrIj9ob21hZF90cmFja19rZXk9IitlbmNvZGVVUklDb21wb25lbnQoYSkrIiZob21hZF90cmFja192YWx1ZT0iK2VuY29kZVVSSUNvbXBvbmVudChiKSxsLnphKGYsITApLGY9bC56YShmLCEwKSxmLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0KIiIsZi5kYXRhLmhvbWFkX3RyYWNrX2tleT0iKiIrZW5jb2RlVVJJQ29tcG9uZW50KGEpKyIqIixmLmRhdGEuaG9tYWRfdHJhY2tfdmFsdWU9IioiK2VuY29kZVVSSUNvbXBvbmVudChiKSsiKiIsbC5MYShmLGZ1bmN0aW9uKGQpe3ZhciBmPSExO2Q9ZC5yZXNwb25zZVRleHQ7dHJ5e2Q9SlNPTi5wYXJzZShkKSxkPWQuZGF0YSxkWzBdPT1lbmNvZGVVUklDb21wb25lbnQoYSkmJihmPSEwKSxkWzFdJiZkWzFdIT1lbmNvZGVVUklDb21wb25lbnQoYikmJihmPSExKX1jYXRjaChjKXt9Znx8dGhpcy50cmFjaygic3RhdHNfaGRfdHJhY2tjaGVjayIsKGRbMF0/ZFswXToiIikrKGRbMV0/ZFsxXToiIiksITApfS5iaW5kKHRoaXMpKSl9fSxKZTpmdW5jdGlvbigpe2wmJmwuWD9sLmlzRW5hYmxlZCYmbC5xbygpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5KZSgpfS5iaW5kKHRoaXMpLDUwMCl9LHJlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEmJiJvYmplY3QiPT10eXBlb2YgYSYmCmEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYikubGVuZ3RoP3RoaXMuaWIoYS5nZXRFbGVtZW50c0J5VGFnTmFtZShiKVswXSk6IiJ9LHVlOmZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLmNoaWxkTm9kZXMmJmEuY2hpbGROb2Rlc1swXT9hLmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlOiIifSxpYjpmdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLnFkKGEpOiIifSxxZDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnVlKGEpO2ImJihiPWIudHJpbSgpKTshYiYmYS50ZXh0Q29udGVudCYmKGI9YS50ZXh0Q29udGVudCxiPWIudHJpbSgpKTtyZXR1cm4gYn0sJGY6ZnVuY3Rpb24oYSxiLGQsZil7ZD0hMTtpZihiLkVlKGEpfHx0aGlzLnByKGEpfHwwPD1hLmluZGV4T2YoImRhdGE6aW1hZ2UiKSlyZXR1cm4gYTt3aW5kb3cuc2FuZGJveCYmd2luZG93LnNhbmRib3guYmYmJndpbmRvdy5zYW5kYm94LmJmWyJTdHJpbmcucHJvdG90eXBlLmluZGV4T2YiXSYmKDA8PXNhbmRib3guYmZbIlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiJdLmJpbmQoYSkoImVycm9yIil8fApzYW5kYm94LmJmWyJTdHJpbmcucHJvdG90eXBlLmluZGV4T2YiXS5iaW5kKGEpKCJFcnJvciIpKTtpZih0aGlzLnRnKGEpKXJldHVybiB0aGlzLnRnKGEpO3ZhciBuPXtob21hZF91cmxfcHJlZml4X2FsaWFzOiJ2cGFpZCJ9O24uaG9tYWRfdXJsX3N1ZmZpeD1hO24uaG9tYWRfdXJsX3N1ZmZpeF9iYXNlNjQ9dGhpcy52YihhKTtuLmhvbWFkX3JldHVybl9vbmx5X3VybF9hbmRfaGFzaD0idHJ1ZSI7bi5ob21hZF9oYXNoX2d1ZXNzZWQ9InRydWUiO2YmJmYucG9zdCYmKG5bIlgtSG9tYWQtUG9zdCJdPSJ0cnVlIik7ZCYmKG4uaG9tYWRfaW50cm9zcGVjdD0iaWZyYW1lIik7bi5ob21hZF92cGFpZF9jb21wYXRpYmxlPSJ0cnVlIjtuLmhvbWFkX3ZwYWlkX2N0eD0idHJ1ZSI7ZiYmZi5vbmx5VVJMJiYobi5ob21hZF9yZXBsYWNlX3VybHNfaW5fdGFncz0iTWVkaWFGaWxlIik7dmFyIGM9ITE7ZD0hMTtkPXRoaXMuWWEoYSxiLkphLG4sZnVuY3Rpb24oYSl7Yz1hLnJlc3BvbnNlVGV4dH0sCmZ1bmN0aW9uKCl7fSxiLCEwKTt0cnl7Y3x8KGM9ZCksYz1KU09OLnBhcnNlKGMpfWNhdGNoKGUpe2M9ITF9Yy51cmwmJmMuaGFzaCYmKGM9Yi51ZCgpLnJlcGxhY2UoIltoYXNoXSIsYy5oYXNoKSk7dGhpcy5nbihjLGEpO3JldHVybiBjfSxZYTpmdW5jdGlvbihhLGIsZCxmLG4sYyxlLGcpe3ZhciBrPWN8fGw7Yz0hMDtnJiYoYz0hMSk7aWYoayYmay5YKWlmKGsuaXNFbmFibGVkKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSl0cnl7YT1hKCl9Y2F0Y2gobSl7bihtKX1pZigic3RyaW5nIiE9dHlwZW9mIGEpbigpO2Vsc2V7ay56YShhLGMpO2M9ay56YShhLGMpO2MuZGF0YS5ob21hZF91cmxfcHJlZml4X2FsaWFzPWI7Yy5kYXRhLmhvbWFkX2hhc2hfZ3Vlc3NlZD0idHJ1ZSI7Zm9yKHZhciByIGluIGQpYy5kYXRhW3JdPWRbcl07cmV0dXJuIGsuTGEoYyxmLG4sIiIsIiIsZSl9fWVsc2UgbigpO2Vsc2Ugd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLllhKGEsYixkLGYsbiwKayxlLGcpfS5iaW5kKHRoaXMpLDUwMCl9LGVoOmZ1bmN0aW9uKGEsYixkLGYsYyxlLGcpe3ZhciBrPSEwO2cmJihrPSExKTtpZigic3RyaW5nIiE9dHlwZW9mIGQpe2c9ZDtkPSIiO2Zvcih2YXIgbSBpbiBnKWQrPSImIittKyI9IitlbmNvZGVVUklDb21wb25lbnQoZ1ttXSk7ZD1kLnN1YnN0cigxKX12YXIgbD1uZXcgWE1MSHR0cFJlcXVlc3Q7bC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshZnx8NCE9bC5yZWFkeVN0YXRlfHwyMDAhPWwuc3RhdHVzJiYyMDEhPWwuc3RhdHVzfHxmKGwpO2MmJjQ9PWwucmVhZHlTdGF0ZSYmMjAwIT1sLnN0YXR1cyYmMjAxIT1sLnN0YXR1cyYmYyhsKX07dHJ5e2wub3BlbihiLGEsayksbC53aXRoQ3JlZGVudGlhbHM9ZSwwPGQubGVuZ3RoJiZsLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpLGwuc2VuZChkKX1jYXRjaChyKXtjJiZjKCl9cmV0dXJuIGx9LEtyOmZ1bmN0aW9uKGEsCmIsZCl7dGhpcy5laChhLCJHRVQiLCIiLGZ1bmN0aW9uKGEpe2E9YS5yZXNwb25zZVRleHQ7aWYodGhpcy5LYylmb3IodmFyIGMgaW4gdGhpcy5LYylhPWEuc3BsaXQoYykuam9pbih0aGlzLktjW2NdKTtjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2MudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtjLnNyYz0iZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIrZS52YihhKTtkJiYoYy5vbmVycm9yPWQpO2RvY3VtZW50LmhlYWQuZmlyc3RDaGlsZD9kb2N1bWVudC5oZWFkLmluc2VydEJlZm9yZShjLGRvY3VtZW50LmhlYWQuZmlyc3RDaGlsZCk6ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChjKTtiJiZzZXRUaW1lb3V0KGIsMCl9LmJpbmQodGhpcyksZCl9LGZoOmZ1bmN0aW9uKGEsYixkLGYpe3ZhciBjPXtob21hZF91cmxfcHJlZml4X2FsaWFzOiJ2cGFpZCJ9O2MuaG9tYWRfdXJsX3N1ZmZpeD1hO2MuaG9tYWRfdXJsX3N1ZmZpeF9iYXNlNjQ9dGhpcy52YihhKTtjLmhvbWFkX3JldHVybl9vbmx5X3VybF9hbmRfaGFzaD0KInRydWUiO2MuaG9tYWRfaGFzaF9ndWVzc2VkPSJ0cnVlIjt0aGlzLllhKGEsZi5KYSxjLGZ1bmN0aW9uKGEpe2E9YS5yZXNwb25zZVRleHQ7dHJ5e2E9SlNPTi5wYXJzZShhKX1jYXRjaChjKXthPSExfXRoaXMuS3IoZi51ZCgpLnJlcGxhY2UoIltoYXNoXSIsYS5oYXNoKSxiLGQpfS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7fSxmLCEwKX0sSHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuS2M9YX0sRXY6ZnVuY3Rpb24oYSxiLGQsZixjKXt0aGlzLllhKGEsZCx7fSxmdW5jdGlvbihhKXt0cnl7dmFyIGQ9SlNPTi5wYXJzZShhLnJlc3BvbnNlVGV4dCk7ZFswXSYmKGQ9ZFswXSk7ZD9kLmlkPyhiPWIucmVwbGFjZSgiW2lkXSIsZC5pZCksYj1iLnJlcGxhY2UoIltwcmljZV0iLGQucHJpY2UpLGI9Yi5yZXBsYWNlKCJbYWR2ZXJ0aXNlcl0iLGQuYWR2ZXJ0aXNlciksYj1iLnJlcGxhY2UoIltjdXJsXSIsZC5jdXJsKSxiPWIucmVwbGFjZSgiW2Zvcm1hdF0iLGQuZm9ybWF0KSxiPWIucmVwbGFjZSgiW3NyY10iLApkLnNyYyksYj1iLnJlcGxhY2UoIltwcmljZXJhbmdlXSIsZC5wcmljZXJhbmdlKSxiPWIucmVwbGFjZSgiW3BpZF0iLGQucGlkKSxiPWIucmVwbGFjZSgiW3ByaW9dIixkLnByaW8pLGI9Yi5yZXBsYWNlKCJbZGlkXSIsZC5kaWQpLGMoe3BsYWNlaG9sZGVyOmIsbWFjcm86Zn0pKTpjKHtwbGFjZWhvbGRlcjoiIixtYWNybzpmfSk6Yyh7cGxhY2Vob2xkZXI6IiIsbWFjcm86Zn0pfWNhdGNoKGUpe2Moe3BsYWNlaG9sZGVyOiIiLG1hY3JvOmZ9KX19LGZ1bmN0aW9uKCl7Yyh7cGxhY2Vob2xkZXI6IiIsbWFjcm86Zn0pfSl9LFBuOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0hMTshYjspe3ZhciBkPWEubGFzdEluZGV4T2YoIkVOQ09ERSgiKTswPmQ/Yj0hMDooZD1hLnN1YnN0cmluZyhkKzcsYS5pbmRleE9mKCIpIixkKSksYT1hLnJlcGxhY2UoIkVOQ09ERSgiK2QrIikiLGVuY29kZVVSSUNvbXBvbmVudChkKSkpfXJldHVybiBhfSxrcjpmdW5jdGlvbihhLGIpe3ZhciBkPSExO2lmKGIpZm9yKHZhciBmPQowO2Y8Yi5sZW5ndGg7ZisrKWlmKGJbZl09PWEpe2Q9ITA7YnJlYWt9cmV0dXJuIGR9fX0pKGMpO3ZhciBSPWMuJGp8fFI7bmV3IFI7dmFyIGU9bmV3IFI7KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoYSl7dGhpcy5kYXRhPWF8fHt9fWMuWmo9YjtiLlhhPWZ1bmN0aW9uKGEsYil7dmFyIGQ9e30sZjtmb3IoZiBpbiBiKWRbZl09YltmXTtmb3IoZiBpbiBhKWRbZl09YVtmXTtyZXR1cm4gZH07Yi5Rcz17Y29kZToiMTAwMCIsdHlwZToicGVuYWx0eSIsbWVzc2FnZToiIixuYW1lOiJwZW5hbHR5In07Yi5kcz17Y29kZToiMTAwMSIsdHlwZToibWVkaWFlcnJvciIsbWVzc2FnZToiIixuYW1lOiJhZEVycm9yIn07Yi5udj17Y29kZToiMTAwMiIsdHlwZToidnBhaWQiLG1lc3NhZ2U6IiIsbmFtZToidnBhaWQifTtiLnlwPXtjb2RlOiIxMDAzIix0eXBlOiJlbXB0eVZhc3QiLG1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IueHY9e2NvZGU6IjEwMDQiLHR5cGU6Im1hbGZvcm1hdHRlZFhNTCIsCm1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IuVWY9e2NvZGU6IjEwMDUiLHR5cGU6ImFkU3RhcnQiLG1lc3NhZ2U6IiIsbmFtZToiYWRTdGFydCJ9O2IuTmY9e2NvZGU6IjEwMDYiLHR5cGU6ImFkRmlyc3RRdWFydGlsZSIsbWVzc2FnZToiIixuYW1lOiJhZEZpcnN0UXVhcnRpbGUifTtiLlJmPXtjb2RlOiIxMDA3Iix0eXBlOiJhZE1pZFBvaW50IixtZXNzYWdlOiIiLG5hbWU6ImFkTWlkUG9pbnQifTtiLlZmPXtjb2RlOiIxMDA4Iix0eXBlOiJhZFRoaXJkUXVhcnRpbGUiLG1lc3NhZ2U6IiIsbmFtZToiYWRUaGlyZFF1YXJ0aWxlIn07Yi4kbT17Y29kZToiMTAwOSIsdHlwZToiYWRDb21wbGV0ZSIsbWVzc2FnZToiIixuYW1lOiJhZENvbXBsZXRlIn07Yi5QZj17Y29kZToiMTAxMCIsdHlwZToiYWRJbXByZXNzaW9uc0NhbGxlZCIsbWVzc2FnZToiIixuYW1lOiJhZEltcHJlc3Npb24ifTtiLlV1PXtjb2RlOiIxMDExIix0eXBlOiJ2YXN0TG9hZGluZ0ZhaWxlZCIsbWVzc2FnZToiIiwKbmFtZToiYWRFcnJvciJ9O2IuY3M9e2NvZGU6IjEwMTIiLHR5cGU6Im5vQ3JlYXRpdmUiLG1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IuenA9e2NvZGU6IjEwMTMiLHR5cGU6ImVtcHR5VmFzdEZyb21Ib21hZFNlcnZlckV2ZW50IixtZXNzYWdlOiIiLG5hbWU6ImFkRXJyb3IifTtiLnV2PXtjb2RlOiIxMDE0Iix0eXBlOiJ3cmFwcGVyTGltaXRSZWFjaGVkIixtZXNzYWdlOiIiLG5hbWU6ImFkRXJyb3IifTtiLmlnPXtjb2RlOiIxMDE1Iix0eXBlOiJjbGlja3Rocm91Z2giLG1lc3NhZ2U6IiIsbmFtZToiYWRDbGljayJ9O2IuUG89e2NvZGU6IjEwMTYiLHR5cGU6ImNvbnRpbnVlQ29udGVudCIsbWVzc2FnZToiIixuYW1lOiJjb250aW51ZUNvbnRlbnQifTtiLmdkPXtjb2RlOiIxMDE3Iix0eXBlOiJjb250ZW50UGxheWVyUGxheSIsbWVzc2FnZToiIixuYW1lOiJjb250ZW50UGxheWVyUGxheSJ9O2IuZmQ9e2NvZGU6IjEwMTgiLHR5cGU6ImNvbnRlbnRQbGF5ZXJQYXVzZSIsbWVzc2FnZToiIiwKbmFtZToiY29udGVudFBsYXllclBhdXNlIn07Yi5UZj17Y29kZToiMTAxOSIsdHlwZToiYWRTa2lwcGVkIixtZXNzYWdlOiIiLG5hbWU6ImFkU2tpcHBlZCJ9O2IuYm49e2NvZGU6IjEwMjAiLHR5cGU6ImFkUmVxdWVzdCIsbWVzc2FnZToiIixuYW1lOiJhZFJlcXVlc3QifTtiLlVjPXtjb2RlOiIxMDIxIix0eXBlOiJhZFBsYXkiLG1lc3NhZ2U6IiIsbmFtZToiYWRQbGF5In07Yi5ZZD17Y29kZToiMTAyMiIsdHlwZToiYWRQYXVzZSIsbWVzc2FnZToiIixuYW1lOiJhZFBhdXNlIn07Yi4kZD17Y29kZToiMTAyMyIsdHlwZToiYWRUaW1lIixtZXNzYWdlOiIiLG5hbWU6ImFkVGltZSJ9O2IuYW49e2NvZGU6IjEwMjQiLHR5cGU6ImFkTWV0YSIsbWVzc2FnZToiIixuYW1lOiJhZE1ldGEifTtiLmJpPXtjb2RlOiIxMDI1Iix0eXBlOiJ2aWV3YWJsZSIsbWVzc2FnZToiIixuYW1lOiJ2aWV3YWJsZSJ9O2IuZnM9e2NvZGU6IjEwMjYiLHR5cGU6Im5vdFZpZXdhYmxlIixtZXNzYWdlOiIiLG5hbWU6Im5vdFZpZXdhYmxlIn07CmIueGQ9e2NvZGU6IjEwMjciLHR5cGU6Im11dGUiLG1lc3NhZ2U6IiIsbmFtZToibXV0ZSJ9O2IudGY9e2NvZGU6IjEwMjgiLHR5cGU6InVubXV0ZSIsbWVzc2FnZToiIixuYW1lOiJ1bm11dGUifTtiLmpnPXtjb2RlOiIxMDI5Iix0eXBlOiJjb250ZW50UGxheWVyTXV0ZWQiLG1lc3NhZ2U6IiIsbmFtZToiY29udGVudFBsYXllck11dGVkIn07Yi5tdj17Y29kZToiMTAzMCIsdHlwZToidnBhaWRlcnJvciIsbWVzc2FnZToiIixuYW1lOiJhZEVycm9yIn07Yi5SdT17Y29kZToiOTAwMSIsdHlwZToidmFyaWFibGVEZWxldGVkRXZlbnQiLG1lc3NhZ2U6IiIsbmFtZToidmFyaWFibGVEZWxldGVkRXZlbnQifTtiLmVzPXtjb2RlOiI5MDAyIix0eXBlOiJub1ZhcmlhYmxlU2V0dGluZ0V2ZW50IixtZXNzYWdlOiIiLG5hbWU6Im5vVmFyaWFibGVTZXR0aW5nRXZlbnQifTtiLnByb3RvdHlwZT17Z2V0RXJyb3JDb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3JDb2RlfX19KShjKTt2YXIgaz0KYy5aanx8aztjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5odT10aGlzLmFbMl07dGhpcy5Iaz10aGlzLmFbMV07dGhpcy5LdT10aGlzLmFbOF07dGhpcy5QcD10aGlzLmFbN107dGhpcy5FaT10aGlzLmFbNF07dGhpcy5Gaj10aGlzLmFbMV07dGhpcy52dT10aGlzLmFbNF07dGhpcy5vbD10aGlzLmFbNV07dGhpcy5Mbz10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs2XX1jLkFsPWI7Yi5wcm90b3R5cGU9e2d1OmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5odTp0aGlzLkdrKGEpfSxHazpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuSGs6dGhpcy5KdShhKX0sSnU6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLkt1OnRoaXMuT3AoYSl9LE9wOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5QcDp0aGlzLkRpKGEpfSxEaTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuRWk6CnRoaXMuRWooYSl9LEVqOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5Gajp0aGlzLnV1KGEpfSx1dTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMudnU6dGhpcy5ubChhKX0sbmw6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLm9sOnRoaXMuS28oYSl9LEtvOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5Mbzp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmo6YX19fSkoYyk7dmFyIGthPWMuQWx8fGthLG1jPW5ldyBrYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPW1jLmd1KDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7fWMuYWs9YjtiLnByb3RvdHlwZT17dmU6ZnVuY3Rpb24oYSl7dmFyIGI9MCxkLGYsYztpZigwPT1hLmxlbmd0aClyZXR1cm4gYjtkPTA7Zm9yKGM9YS5sZW5ndGg7ZDxjO2QrKylmPWEuY2hhckNvZGVBdChkKSwKYj0oYjw8NSktYitmLGJ8PTA7cmV0dXJuIE1hdGguYWJzKGIpfSxqYTpmdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKERhdGUubm93KCkvMUUzLzM2MDAvMjQpK25hdmlnYXRvci5hcHBDb2RlTmFtZStuYXZpZ2F0b3IuYXBwTmFtZStuYXZpZ2F0b3IuYXBwVmVyc2lvbituYXZpZ2F0b3IudXNlckFnZW50K25hdmlnYXRvci5wbGF0Zm9ybSsobmF2aWdhdG9yLmxhbmd1YWdlfHxuYXZpZ2F0b3IuRHx8IngiKX0sa3E6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yb3VuZChEYXRlLm5vdygpLzFFMy8zNjAwKStuYXZpZ2F0b3IuYXBwQ29kZU5hbWUrbmF2aWdhdG9yLmFwcE5hbWUrbmF2aWdhdG9yLmFwcFZlcnNpb24rbmF2aWdhdG9yLnVzZXJBZ2VudCtuYXZpZ2F0b3IucGxhdGZvcm0rKG5hdmlnYXRvci5sYW5ndWFnZXx8bmF2aWdhdG9yLkR8fCJ4IikrKG5ldyBEYXRlKS50b1RpbWVTdHJpbmcoKS5zdWJzdHIoLTEyKX0sb2Q6ZnVuY3Rpb24oYSl7YT1wYXJzZUludChhKTtpZig2NTw9CmEmJjkwPj1hfHw5Nzw9YSYmMTIyPj1hKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGEpO2lmKDA+PWEpcmV0dXJuIiI7aWYoNjU+YSlyZXR1cm4gdGhpcy5vZChhKzY1KTtpZig5MDxhKXJldHVybiB0aGlzLm9kKE1hdGgucm91bmQoYS8yKSl9LHJldmVyc2U6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGQ9YS5sZW5ndGgtMSxiPSIiOzA8PWQ7Yis9YVtkLS1dKTtyZXR1cm4gYn0saWE6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy52ZSh0aGlzLmphKCkrIiIpLGE9KGErIiIrdGhpcy5yZXZlcnNlKGErIiIpKS5tYXRjaCgvLnsxLDJ9L2cpLGI9IiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWIrPXRoaXMub2QoYVtkXSk7MD09Yi5sZW5ndGgmJihiPSJ6b3JrIik7cmV0dXJuIGJ9LGZyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWEoKSsiMiJ9LFRnOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMudmUodGhpcy5rcSgpKyIiKSxhPShhKyIiK3RoaXMucmV2ZXJzZShhKyIiKSkubWF0Y2goLy57MSwyfS9nKSwKYj0iIixkPTA7ZDxhLmxlbmd0aDtkKyspYis9dGhpcy5vZChhW2RdKTswPT1iLmxlbmd0aCYmKGI9InpvcmsiKTtyZXR1cm4gYn19fSkoYyk7dmFyIEo9Yy5ha3x8SjtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5kbT10aGlzLmFbOV07dGhpcy5xdj10aGlzLmFbMl07dGhpcy5tbz10aGlzLmFbMV07dGhpcy5QdT10aGlzLmFbNl07dGhpcy5DaT10aGlzLmFbNl07dGhpcy5xbj10aGlzLmFbN107dGhpcy53az10aGlzLmFbM107dGhpcy5qPXRoaXMuYVszXX1jLlNvPWI7Yi5wcm90b3R5cGU9e2NtOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5kbTp0aGlzLnB2KGEpfSxwdjpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMucXY6dGhpcy5sbyhhKX0sbG86ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLm1vOnRoaXMuT3UoYSl9LE91OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhPwp0aGlzLlB1OnRoaXMuQmkoYSl9LEJpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5DaTp0aGlzLnBuKGEpfSxwbjpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMucW46dGhpcy52ayhhKX0sdms6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLndrOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuajphfX19KShjKTt2YXIgbGE9Yy5Tb3x8bGEsbmM9bmV3IGxhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9bmMuY20oNCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe312YXIgYT0veHl6Ly50ZXN0KGZ1bmN0aW9uKCl7eHl6fSk/L1xiX3N1cGVyXGIvOi8uKi87Yi5leHRlbmQ9ZnVuY3Rpb24oaCl7dmFyIGQ9dGhpcy5wcm90b3R5cGUsZj1PYmplY3QuY3JlYXRlKGQpLGM7Zm9yKGMgaW4gaClmW2NdPSJmdW5jdGlvbiI9PT0KdHlwZW9mIGhbY10mJiJmdW5jdGlvbiI9PXR5cGVvZiBkW2NdJiZhLnRlc3QoaFtjXSk/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD10aGlzLm07dGhpcy5tPWRbYV07dmFyIGY9Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5tPWg7cmV0dXJuIGZ9fShjLGhbY10pOmhbY107aD0iZnVuY3Rpb24iPT09dHlwZW9mIGYubD9mLmhhc093blByb3BlcnR5KCJpbml0Iik/Zi5sOmZ1bmN0aW9uKCl7ZC5sLmFwcGx5KHRoaXMsYXJndW1lbnRzKX06ZnVuY3Rpb24oKXt9O2gucHJvdG90eXBlPWY7Zi5jb25zdHJ1Y3Rvcj1oO2guZXh0ZW5kPWIuZXh0ZW5kO3JldHVybiBofTtjLmlqPWJ9KShjKTt2YXIgTT1jLmlqfHxNO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnVzPXRoaXMuYVs4XTt0aGlzLkFvPXRoaXMuYVsyXTt0aGlzLmlpPXRoaXMuYVs3XTt0aGlzLkJuPQp0aGlzLmFbNV07dGhpcy5UdD10aGlzLmFbOV07dGhpcy5zcz10aGlzLmFbNV07dGhpcy5XdT10aGlzLmFbOF07dGhpcy5qPXRoaXMuYVsxXX1jLlNrPWI7Yi5wcm90b3R5cGU9e3RzOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy51czp0aGlzLnpvKGEpfSx6bzpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuQW86dGhpcy5oaShhKX0saGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5paTp0aGlzLkFuKGEpfSxBbjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuQm46dGhpcy5TdChhKX0sU3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlR0OnRoaXMucnMoYSl9LHJzOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5zczp0aGlzLlZ1KGEpfSxWdTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuV3U6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBtYT1jLlNrfHxtYSxvYz1uZXcgbWEoMSxuZXcgRGF0ZSwKMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9b2MudHMoNCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7Yy5zbD1NLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLk1hPXt9O3RoaXMuSz1udWxsO3RoaXMuR2M9MTAwO3RoaXMuRmI9MDt0aGlzLlVhPTE1MDt0aGlzLkhiPTA7dGhpcy5DdChiKX0sZzpmdW5jdGlvbigpe30sUjpmdW5jdGlvbigpe3RoaXMuRmI8PXRoaXMuVWE/KHRoaXMuRmIrKyx0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuZy5iaW5kKHRoaXMpLHRoaXMuR2MpKTowPnRoaXMuVWEmJih0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuZy5iaW5kKHRoaXMpLHRoaXMuR2MpKX0sb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GYj50aGlzLlVhPyEwOiExfSxhZjpmdW5jdGlvbigpe3RoaXMuRmI9MH0sTzpmdW5jdGlvbigpe3JldHVybiJlbXB0eSJ9LEN0OmZ1bmN0aW9uKGIpe3RoaXMuSz0KYn0saXE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LfSxQOmZ1bmN0aW9uKGIpe2UudHJhY2soInN0YXRzX3BsYXllciIsYi5PKCksITApO3RoaXMuTWFbYi5qYSgpXT1iO04mJk4uYWgmJk4uYXUoYil9LCR2OmZ1bmN0aW9uKCl7cmV0dXJuIGUudGUodGhpcy5NYSl9LE46ZnVuY3Rpb24oYil7dmFyIGE9Yi52aWRlb1RhZyxoO2ZvcihoIGluIHRoaXMuTWEpaWYoYT09dGhpcy5NYVtoXS52aWRlb1RhZylyZXR1cm4hMDtyZXR1cm4gdGhpcy5NYVtiLmphKCldPyEwOiExfSxscjpmdW5jdGlvbihiKXtiPWIuSWEoKTtmb3IodmFyIGEgaW4gdGhpcy5NYSlpZihiLmlkPT10aGlzLk1hW2FdLklhKCkuaWQpcmV0dXJuITA7cmV0dXJuITF9LHB3OmZ1bmN0aW9uKGIpe3RoaXMuTWFbYi5pZF09bnVsbH19KX0pKGMpO3ZhciBxPWMuc2x8fHE7KGZ1bmN0aW9uKGMpe2MudWw9TS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy52aWRlb1RhZz10aGlzLmNvbnRhaW5lcj10aGlzLmlkPW51bGw7dGhpcy5HYz0KMTA7dGhpcy5GYj0wO3RoaXMuVWE9NTA7dGhpcy5WPW51bGw7dGhpcy5xYT0hMTt0aGlzLnBsYXllcj1iO3RoaXMuemI9IiI7dGhpcy5uZz0hMTt0aGlzLlMoKX0sTzpmdW5jdGlvbigpe3JldHVybiJlbXB0eSJ9LHU6ZnVuY3Rpb24oKXt2YXIgYj17fSxhPXRoaXMudmlkZW9UYWcsaD10aGlzLklhKCksZD10aGlzLmdldFJhd1BsYXllcigpO2lmKGIudmlkZW9UYWc9YSliLnZpZGVvVGFnSWQ9YS5pZDtpZihiLmNvbnRhaW5lcj1oKWIuY29udGFpbmVySWQ9aC5pZDtkJiYoYi5wbGF5ZXI9ZCk7cmV0dXJuIGJ9LFM6ZnVuY3Rpb24oKXt9LE5hOmZ1bmN0aW9uKCl7fSxLdDpmdW5jdGlvbihiKXt0aGlzLlY9Yn0sYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5WfSxGdDpmdW5jdGlvbihiKXt0aGlzLk1lPWJ9LFp2OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTWV9LExlOmZ1bmN0aW9uKCl7fSxSOmZ1bmN0aW9uKCl7dGhpcy5GYjw9dGhpcy5VYSYmKHRoaXMuRmIrKyx3aW5kb3cuc2V0VGltZW91dCh0aGlzLlMuYmluZCh0aGlzKSwKdGhpcy5HYykpfSxpc0Z1bGxzY3JlZW46ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0cnl7aWYoZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4pZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKVsiY2F0Y2giXShmdW5jdGlvbigpe30pO2Vsc2UgaWYoZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4pZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4oKTtlbHNlIGlmKGRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4pZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpO2Vsc2UgaWYoZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbilkb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuKCk7ZWxzZSByZXR1cm4hMX1jYXRjaChiKXt9fSxCZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLklhKCl9LHBhdXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGxheWVyLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXIucGxheSgpfSxqYTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfSwKRmQ6ZnVuY3Rpb24oYil7dGhpcy5pZD1ifSxydzpmdW5jdGlvbigpe30sWjpmdW5jdGlvbihiKXtpZighYilyZXR1cm4hMTt0aGlzLnZpZGVvVGFnPWI7dGhpcy5GcSgpfHx0aGlzLmNuKCk7dGhpcy5GZCh0aGlzLnZpZGVvVGFnLmdldEF0dHJpYnV0ZSgiaWQiKSl9LGJ3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW9UYWd9LGNuOmZ1bmN0aW9uKCl7dGhpcy52aWRlb1RhZy5zZXRBdHRyaWJ1dGUoImlkIixlLmJhKDEwKSl9LEZxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW9UYWcuZ2V0QXR0cmlidXRlKCJpZCIpPyEwOiExfSxZOmZ1bmN0aW9uKGIpe3RoaXMuY29udGFpbmVyPWJ9LElhOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLmNvbnRhaW5lcj90aGlzLmNvbnRhaW5lcigpOnRoaXMuY29udGFpbmVyfSxnZXRSYXdQbGF5ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXJ9LEFlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LGlzUGxheWluZzpmdW5jdGlvbigpe3JldHVybiEwfSwKZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnO3JldHVybiBiJiZiLmN1cnJlbnRUaW1lP2IuY3VycmVudFRpbWU6MH0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnO3JldHVybiBiJiZiLmR1cmF0aW9uP2IuZHVyYXRpb246MH0sVmE6ZnVuY3Rpb24oKXtyZXR1cm4hMX0saXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xYX0scGE6ZnVuY3Rpb24oKXt0aGlzLnFhPSEwfSxIYzpmdW5jdGlvbigpe3ZhciBiPW07cmV0dXJuIGImJmIucnVuSW5zaWRlQ29udGFpbmVyPyEwOiExfSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGImJmIubXV0ZWQ/Yi5tdXRlZDohMX0sR2U6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sQ2g6ZnVuY3Rpb24oYil7dGhpcy56Yj1ifSxZdjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnpifSx5aDpmdW5jdGlvbigpe3RoaXMuemI9bnVsbH0sZHc6ZnVuY3Rpb24oKXt2YXIgYj0hMTt0aGlzLnpiJiYKKGI9ITApO3JldHVybiBifSxsdzpmdW5jdGlvbigpe3RoaXMubmd8fCh0aGlzLm5nPSEwKX0scWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sVnY6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPXRoaXMudmlkZW9UYWc7YSYmYS5nZXRBdHRyaWJ1dGUoImlkIikmJihiPWEuZ2V0QXR0cmlidXRlKCJpZCIpKTtyZXR1cm4gYn19KX0pKGMpO3ZhciB1PWMudWx8fHU7KGZ1bmN0aW9uKGMpe2Mubmk9TS5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLks9dGhpcy5wbGF5ZXI9IiI7dGhpcy5KZj0iMSI7dGhpcy5LZj0iMiI7dGhpcy5XbT0iMyI7dGhpcy5QYz0wO3RoaXMuaWg9MzA7dGhpcy5MYj1bXTt0aGlzLmZiPVtdO3RoaXMuaWM9e2V4dGVybmFsOjEsbm9mcmFtZXdvcms6MixhZGVycm9yOjMsY29udGVudHBsYXk6NCxub0Fkc01hbmFnZXI6NSx1bmtub3duOjZ9O3RoaXMuWGY9dGhpcy5ZaD0hMTt0aGlzLnN0YXR1cz10aGlzLlBjO3RoaXMuaWQ9ZS5iYSgxMCk7dGhpcy5mZihiKTt0aGlzLkR0KGEpfSwKZzpmdW5jdGlvbigpe30sdGE6ZnVuY3Rpb24oKXt0aGlzLllofHwodGhpcy5ZaD0hMCxlLkplKCkpfSxQZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuTygpO1MmJlMuVWImJiFuYSYmKG5hPSEwLGUudHJhY2soInBvc3NpYmxlRG91YmxlQWQiLCIxMDRfIitiKSl9LGJyOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKSxhPW5ldyBKO3dpbmRvd1thLmlhKCldfHwod2luZG93W2EuaWEoKV09e30pO3dpbmRvd1thLmlhKCldW2IuamEoKV18fCh3aW5kb3dbYS5pYSgpXVtiLmphKCldPXt9LHdpbmRvd1thLmlhKCldW2IuamEoKV0uaW5pdGlhdG9yPWUuemMoKSk7d2luZG93W2EuaWEoKV1bYi5qYSgpXVtlLnpjKCldP3dpbmRvd1thLmlhKCldW2IuamEoKV1bZS56YygpXSsrOndpbmRvd1thLmlhKCldW2IuamEoKV1bZS56YygpXT0xfSxpcjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCksYT0hMCxoPW5ldyBKO3dpbmRvd1toLmlhKCldJiZ3aW5kb3dbaC5pYSgpXVtiLmphKCldJiYKd2luZG93W2guaWEoKV1bYi5qYSgpXS5pbml0aWF0b3IhPWUuemMoKSYmKHRoaXMuZ2YoKSxhPSExKTtyZXR1cm4gYX0sSTpmdW5jdGlvbihiLGEpe3ZhciBoPSEwO2ImJihoPSExKTtpZighdGhpcy51YSgpKXt0aGlzLmJyKCk7aWYoIXRoaXMuaXIoKSl7ZS50cmFjaygic3RhdHNfaGRfZG91YmxlTWFpbiIsIiIsITApO3RoaXMuZ2YoKTtyZXR1cm59dGhpcy5nZigpO3RoaXMuSyh0aGlzLmdldFBsYXllcigpLGgpO3RoaXMuUmgoKTt0aGlzLlhmPSEwO2EmJiJmdW5jdGlvbiI9PXR5cGVvZiBhJiZhKCk7cmV0dXJuITB9cmV0dXJuITF9LG86ZnVuY3Rpb24oYixhKXt0aGlzLnVhKCl8fCh0aGlzLkxiLnB1c2goYiksdGhpcy5mYi5wdXNoKHtyZWFzb246YixkZXRhaWw6YX0pKX0sUmg6ZnVuY3Rpb24oKXt2YXIgYj0idW5rbm93biIsYT1bXTt0aGlzLkxiJiYwPHRoaXMuTGIubGVuZ3RoJiYodGhpcy5MYj1lLnVuaXF1ZSh0aGlzLkxiKSxlLnRyYWNrKCJhY3RpdmF0ZWRCeSIsdGhpcy5MYi5qb2luKCIsIikpKTsKaWYodGhpcy5mYil7Zm9yKHZhciBoPTA7aDx0aGlzLmZiLmxlbmd0aDtoKyspdGhpcy5pY1t0aGlzLmZiW2hdLnJlYXNvbl09PXRoaXMuaWNbYl0mJmEucHVzaCh0aGlzLmZiW2hdLmRldGFpbCksdGhpcy5pY1t0aGlzLmZiW2hdLnJlYXNvbl08dGhpcy5pY1tiXSYmKGE9W10sYS5wdXNoKHRoaXMuZmJbaF0uZGV0YWlsKSxiPXRoaXMuZmJbaF0ucmVhc29uKTt0aGlzLmljW2JdfHwoYj0idW5rbm93biIsYT1bXSk7MDxhLmxlbmd0aCYmKGg9ZS51bmlxdWUoYSksYj1iKyItIitoLmpvaW4oIi0iKSk7ZS50cmFjaygic3RhdHNfaGRfYWN0aXZhdGVkIixiLCEwLGEpfX0sY3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5YZn0sdzpmdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMuSmZ9LGdmOmZ1bmN0aW9uKCl7dGhpcy5zdGF0dXM9dGhpcy5LZn0sSXQ6ZnVuY3Rpb24oKXt0aGlzLnN0YXR1cz10aGlzLldtfSxyYTpmdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMuUGN9LE9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT0KdGhpcy5KZn0sTXY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0dXM9PXRoaXMuS2Z9LHVhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdHVzIT10aGlzLlBjfSxmZjpmdW5jdGlvbihiKXt0aGlzLnBsYXllcj1ifSxnZXRQbGF5ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXJ9LER0OmZ1bmN0aW9uKGIpe3RoaXMuSz1ifSxpcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLkt9LE5yOmZ1bmN0aW9uKCl7fX0pfSkoYyk7dmFyIHY9Yy5uaXx8djtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5Qcj10aGlzLmFbOV07dGhpcy5CcT10aGlzLmFbNV07dGhpcy50cj10aGlzLmFbMl07dGhpcy5QaT10aGlzLmFbN107dGhpcy5Ubj10aGlzLmFbNl07dGhpcy5VbT10aGlzLmFbNV07dGhpcy5LbD10aGlzLmFbOF07dGhpcy5qPXRoaXMuYVs0XX1jLkVuPWI7Yi5wcm90b3R5cGU9e09yOmZ1bmN0aW9uKGEpe3JldHVybiA5PAphP3RoaXMuUHI6dGhpcy5BcShhKX0sQXE6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkJxOnRoaXMuc3IoYSl9LHNyOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy50cjp0aGlzLk9pKGEpfSxPaTpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuUGk6dGhpcy5TbihhKX0sU246ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLlRuOnRoaXMuVG0oYSl9LFRtOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5VbTp0aGlzLkpsKGEpfSxKbDpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuS2w6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBvYT1jLkVufHxvYSxwYz1uZXcgb2EoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1wYy5Pcig0KTsoZnVuY3Rpb24oYyl7Yy5Paj11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb0NvbnRhaW5lcjt0aGlzLlkoYik7Yj10aGlzLmdldFJhd1BsYXllcigpLnZpZGVvO3RoaXMuWihiKTt0aGlzLmlzUGxheWluZz0hMTtiLmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5pc1BsYXlpbmc9ITB9LmJpbmQodGhpcykpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheSgpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkV4cFBsYXllciJ9fSl9KShjKTt2YXIgcGE9Yy5Panx8cGE7KGZ1bmN0aW9uKGMpe2MuUGo9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCksYT1iLk52O2E/YS5uYT9hLm5hLmFkZEV2ZW50TGlzdGVuZXIoImFkRXJyb3IiLGZ1bmN0aW9uKGEpe3ZhciBiPQohMSxmPSIiO2EuZ2V0RXJyb3ImJihiPWEuZ2V0RXJyb3IoKSk7Ynx8YS5kZXRhaWwuZ2V0RXJyb3ImJihiPWEuZGV0YWlsLmdldEVycm9yKCkpO2IuZ2V0RXJyb3JDb2RlJiYoZis9Yi5nZXRFcnJvckNvZGUoKSk7Yi5nZXRNZXNzYWdlJiYoZis9Yi5nZXRNZXNzYWdlKCkpO2YuaW5kZXhPZiYmKDA8PWYuaW5kZXhPZigiMTAwOSIpfHwwPD1mLmluZGV4T2YoIjMwMyIpfHwwPD1mLmluZGV4T2YoIjQwMyIpKT8odGhpcy53KCksdGhpcy50YSgpKToodGhpcy5vKCJhZGVycm9yIiksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZygpfS5iaW5kKHRoaXMpLDEwMCk6Yi5fYWRDb25maWcuYWRzRGlzYWJsZWR8fCh0aGlzLm8oImZyYW1ld29yayIpLHRoaXMucygpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nP3RoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcyksCjEwKX19KX0pKGMpO3ZhciBxYT1jLlBqfHxxYTsoZnVuY3Rpb24oYyl7Yy5Raj1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZih3aW5kb3cucGxheWVyTWFuYWdlciYmd2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycyYmd2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycygpWzBdKXt2YXIgYj1uZXcgcGEod2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycygpWzBdKTt0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBxYShiLHRoaXMuSykpLmcoKSl9dGhpcy5SKCl9fSl9KShjKTt2YXIgcmE9Yy5Ranx8cmE7KG5ldyByYShyKSkuZygpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnR0PXRoaXMuYVs4XTt0aGlzLmJtPXRoaXMuYVs3XTt0aGlzLkJqPXRoaXMuYVs1XTt0aGlzLmhvPXRoaXMuYVsyXTt0aGlzLmhtPQp0aGlzLmFbMV07dGhpcy5Sbj10aGlzLmFbM107dGhpcy5saj10aGlzLmFbNl07dGhpcy5pcD10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVs3XX1jLkJzPWI7Yi5wcm90b3R5cGU9e3N0OmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy50dDp0aGlzLmFtKGEpfSxhbTpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuYm06dGhpcy5BaihhKX0sQWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkJqOnRoaXMuZm8oYSl9LGZvOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5obzp0aGlzLmdtKGEpfSxnbTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuaG06dGhpcy5RbihhKX0sUW46ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLlJuOnRoaXMua2ooYSl9LGtqOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5sajp0aGlzLmhwKGEpfSxocDpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuaXA6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpOwp2YXIgc2E9Yy5Cc3x8c2EscWM9bmV3IHNhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9cWMuc3QoNCk7KGZ1bmN0aW9uKGMpe2MucWs9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dGhpcy5WYj0hMTt0aGlzLnNnKCk7dGhpcy51ZygpO3RoaXMuT289ITF9LHNnOmZ1bmN0aW9uKCl7dGhpcy5WYj0hMTt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnBsYXllci5pZCk7Ynx8KHRoaXMuVmI9ITApO2lmKCJPQkpFQ1QiPT1iLm5vZGVOYW1lfHwiVklERU8iPT1iLm5vZGVOYW1lKWI9Yi5wYXJlbnROb2RlO3RoaXMuWShiKX0sdWc6ZnVuY3Rpb24oKXtpZighdGhpcy5WYil7dmFyIGI9dGhpcy5JYSgpLGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXTthfHwoYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7CmF8fCh0aGlzLlZiPSEwKTt0aGlzLlooYSl9fSxOYTpmdW5jdGlvbigpe3ZhciBiPXRoaXMucGxheWVyO2lmKG0ucG9zdHJvbGxVc2VDb21wbGV0ZUV2ZW50KWIuX2V2ZW50cy5iZWZvcmVDb21wbGV0ZS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OnRoaXMucGxheWVyLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy5WJiYoMCx0aGlzLlYpKCl9LmJpbmQodGhpcyl9KTtlbHNlIGlmKGIuX2V2ZW50cyYmYi5fZXZlbnRzLnRpbWUmJmIuX2V2ZW50cy50aW1lLnB1c2goe2NvbnRleHQ6bnVsbCxjdHg6dGhpcy5wbGF5ZXIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7YS5kdXJhdGlvbiYmYS5wb3NpdGlvbiYmMT5hLmR1cmF0aW9uLWEucG9zaXRpb24mJnRoaXMuViYmKDAsdGhpcy5WKSgpfS5iaW5kKHRoaXMpfSksYi5vblRpbWUpYi5vblRpbWUoZnVuY3Rpb24oYSl7YS5kdXJhdGlvbiYmYS5wb3NpdGlvbiYmMT5hLmR1cmF0aW9uLWEucG9zaXRpb24mJnRoaXMuViYmKDAsdGhpcy5WKSgpfS5iaW5kKHRoaXMpKX0sCkxlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRFcnJvciYmYi5fZXZlbnRzLmFkRXJyb3IucHVzaCh7Y29udGV4dDpudWxsLGN0eDpiLGNhbGxiYWNrOmZ1bmN0aW9uKGEpe3RoaXMuSGQoYSl9LmJpbmQodGhpcyl9KTtpZihiLm9uQWRFcnJvciliLm9uQWRFcnJvcihmdW5jdGlvbihhKXt0aGlzLkhkKGEpfS5iaW5kKHRoaXMpKX0sSGQ6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5wbGF5ZXI7YS5nZXRQb3NpdGlvbigpO2EuZ2V0UG9zaXRpb24oKTthLmdldER1cmF0aW9uKCk7YS5nZXRQb3NpdGlvbigpO2EuZ2V0RHVyYXRpb24oKTthLmdldFBvc2l0aW9uKCk7Im1pZCI9PWIuYWRwb3NpdGlvbiYmYS5nZXRQb3NpdGlvbiYmMzA8YS5nZXRQb3NpdGlvbigpJiYzMDxhLmdldER1cmF0aW9uKCktYS5nZXRQb3NpdGlvbigpJiZ0aGlzLk1lJiYoMCx0aGlzLk1lKSgpfSxwbGF5OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7aWYoIWIuZ2V0U3RhdGV8fAoicGxheWluZyIhPWIuZ2V0U3RhdGUoKXx8dGhpcy52aWRlb1RhZy5wYXVzZWQpcmV0dXJuIHRoaXMucGxheWVyLnBsYXkoKX0scGF1c2U6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnBsYXllcjtyZXR1cm4gYi5nZXRTdGF0ZSYmInBhdXNlZCI9PWIuZ2V0U3RhdGUoKT8icGF1c2VkIjp0aGlzLnBsYXllci5wYXVzZSghMCl9LFZhOmZ1bmN0aW9uKCl7cmV0dXJuInBhdXNlZCI9PXRoaXMucGF1c2UoKT8hMTohMH0sTzpmdW5jdGlvbigpe3JldHVybiJKV1BsYXllciJ9LGV4aXRGdWxsc2NyZWVuOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7Yi5nZXRGdWxsc2NyZWVuJiZiLmdldEZ1bGxzY3JlZW4oKSYmYi5zZXRGdWxsc2NyZWVuKCl9LHZhOmZ1bmN0aW9uKCl7dmFyIGI9ITEsYT10aGlzLnBsYXllcjthLmdldE11dGUmJmEuZ2V0TXV0ZSgpJiYoYj0hMCk7cmV0dXJuIGJ9LHFlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXIsYT0hMTtiLmdldFZvbHVtZSYmYi5nZXRWb2x1bWUoKSYmCihhPWIuZ2V0Vm9sdW1lKCkpO3JldHVybiBhfX0pfSkoYyk7dmFyIHRhPWMucWt8fHRhOyhmdW5jdGlvbihjKXtjLnBrPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LFM6ZnVuY3Rpb24oKXt9LHJhOmZ1bmN0aW9uKCl7dGhpcy5zdGF0dXM9dGhpcy5QYzt0aGlzLmlzUGxheWluZz10aGlzLlJjPSExO3RoaXMuWmQ9MTt0aGlzLlNjPVtdO3RoaXMudGI9ITF9LGc6ZnVuY3Rpb24oKXt0aGlzLmlzUGxheWluZz10aGlzLlJjPSExO3RoaXMuWmQ9MTt0aGlzLlNjPVtdO3RoaXMudGI9ITE7dGhpcy5nZXRQbGF5ZXIoKTt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpLGE9e307Yi5nZXRDb25maWcmJihhPWIuZ2V0Q29uZmlnKCksYS5hZHZlcnRpc2luZz8oYS5hZHZlcnRpc2luZy5zY2hlZHVsZSYmKGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzP2EuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzLnRhZyYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5hZHMudGFnLmxlbmd0aCYmCih0aGlzLlpkPWEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzLnRhZy5sZW5ndGgsdGhpcy50Yj0hMCk6KGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUucHJlcm9sbCYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5wcmVyb2xsLnRhZyYmKHRoaXMudGI9ITApLGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRicmVha3ByZSYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5hZGJyZWFrcHJlLnRhZyYmKHRoaXMudGI9ITApKSksYS5hZHZlcnRpc2luZy50YWcmJih0aGlzLnRiPSEwKSk6dGhpcy53KCJubyBhZHZlcnRpc2luZyBjb25maWd1cmVkIGZvciBwbGF5ZXIiKSk7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRDb21wbGV0ZSYmYi5fZXZlbnRzLmFkQ29tcGxldGUucHVzaCh7Y29udGV4dDpudWxsLGN0eDpiLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy53KCJhZENvbXBsZXRlIik7dGhpcy5SYz0hMH0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkQ2xpY2smJmIuX2V2ZW50cy5hZENsaWNrLnB1c2goe2NvbnRleHQ6bnVsbCwKY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkQ2xpY2siKX0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkSW1wcmVzc2lvbiYmYi5fZXZlbnRzLmFkSW1wcmVzc2lvbi5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkSW1wcmVzc2lvbiIpO3RoaXMuUGUoKX0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkTWV0YSYmYi5fZXZlbnRzLmFkTWV0YS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkTWV0YSIpfS5iaW5kKHRoaXMpfSk7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRTa2lwcGVkJiZiLl9ldmVudHMuYWRTa2lwcGVkLnB1c2goe2NvbnRleHQ6bnVsbCxjdHg6YixjYWxsYmFjazpmdW5jdGlvbigpe3RoaXMudygiYWRTa2lwcGVkIil9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5hZFRpbWUmJmIuX2V2ZW50cy5hZFRpbWUucHVzaCh7Y29udGV4dDpudWxsLApjdHg6YixjYWxsYmFjazpmdW5jdGlvbigpe3RoaXMudygiYWRUaW1lIil9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5hZEVycm9yJiZiLl9ldmVudHMuYWRFcnJvci5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7dGhpcy5vbkFkRXJyb3IoYSl9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy50aW1lJiZiLl9ldmVudHMudGltZS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7dGhpcy5pc1BsYXlpbmc9ITA7YS5kdXJhdGlvbj50aGlzLmloJiYhdGhpcy51YSgpJiYodGhpcy50Yj8odGhpcy5vKCJjb250ZW50cGxheU5vQWRzIiwiIiksdGhpcy5zKCkpOih0aGlzLm8oImNvbnRlbnRwbGF5VGltZSIsMUUzKk1hdGgucm91bmQoYS5kdXJhdGlvbi8xRTMpKSx0aGlzLnMoITApKSl9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5wbGF5bGlzdEl0ZW0mJmIuX2V2ZW50cy5wbGF5bGlzdEl0ZW0ucHVzaCh7Y29udGV4dDpudWxsLApjdHg6dGhpcy5wbGF5ZXIsY2FsbGJhY2s6ZnVuY3Rpb24oKXtpZih0aGlzLnVhKCkmJih0aGlzLnJhKCksdGhpcy5nZXRQbGF5ZXIoKS5Pbz0hMCxtLnNraXBBZE9uQ29udGV4dENoYW5nZSkpe3ZhciBhPXRoaXMuZ2V0UGxheWVyKCkuemI7YSYmKGEuemQoKSxhLmhkKCkpfX0uYmluZCh0aGlzKX0pO2lmKGIub25BZENvbXBsZXRlKWIub25BZENvbXBsZXRlKGZ1bmN0aW9uKCl7dGhpcy53KCJvbkFkQ29tcGxldGUiKTt0aGlzLlJjPSEwfS5iaW5kKHRoaXMpKTtpZihiLm9uQWRJbXByZXNzaW9uKWIub25BZEltcHJlc3Npb24oZnVuY3Rpb24oKXt0aGlzLncoIm9uQWRJbXByZXNzaW9uIik7dGhpcy5QZSgpfS5iaW5kKHRoaXMpKTtpZihiLm9uQWRQbGF5KWIub25BZFBsYXkoZnVuY3Rpb24oKXt0aGlzLncoIm9uQWRQbGF5Iil9LmJpbmQodGhpcykpO2lmKGIub25BZFRpbWUpYi5vbkFkVGltZShmdW5jdGlvbigpe3RoaXMudygib25BZFRpbWUiKX0uYmluZCh0aGlzKSk7aWYoYi5vbkFkRXJyb3IpYi5vbkFkRXJyb3IoZnVuY3Rpb24oYSl7dGhpcy5vbkFkRXJyb3IoYSl9LmJpbmQodGhpcykpOwppZihiLm9uVGltZSliLm9uVGltZShmdW5jdGlvbihhKXt0aGlzLmlzUGxheWluZz0hMDthLmR1cmF0aW9uPnRoaXMuaWgmJiF0aGlzLnVhKCkmJih0aGlzLnRiPyh0aGlzLm8oImNvbnRlbnRwbGF5Tm9BZHMiLCIiKSx0aGlzLnMoKSk6KHRoaXMubygiY29udGVudHBsYXlUaW1lIiwxRTMqTWF0aC5yb3VuZChhLmR1cmF0aW9uLzFFMykpLHRoaXMucyghMCkpKX0uYmluZCh0aGlzKSl9LG9uQWRFcnJvcjpmdW5jdGlvbihiKXt2YXIgYT1iLnRhZzstMT09dGhpcy5TYy5pbmRleE9mKGEpJiZ0aGlzLlNjLnB1c2goYSk7IjEwMSI9PWIuY29kZXx8IjEwMDEiPT1iLmNvZGU/KHRoaXMudygpLHRoaXMudGEoKSk6OTAwPT1iLmNvZGUmJjA8Yi5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigiZW1wdHkiKT90aGlzLncoImVtcHR5Iik6MzAzPT1iLmNvZGUmJjA8Yi5tZXNzYWdlLmluZGV4T2YoIk5vIEFkcyBWQVNUIHJlc3BvbnNlIGFmdGVyIG9uZSBvciBtb3JlIFdyYXBwZXJzIik/dGhpcy53KCJlbXB0eSIpOgoodGhpcy5vKCJhZGVycm9yIixiLmNvZGUpLHRoaXMuU2MubGVuZ3RoPj10aGlzLlpkJiZ0aGlzLnMoKSl9LE5yOmZ1bmN0aW9uKGIpe3RoaXMubSgiSlc6ICIrYi50eXBlKX0sczpmdW5jdGlvbihiKXtiP3RoaXMubmU/dGhpcy5uZSsrOnRoaXMubmU9MTp0aGlzLm1lP3RoaXMubWUrKzp0aGlzLm1lPTE7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKTtlLkhoKGEudmlkZW9UYWcpP2EuVmI/dGhpcy53KCJwbGF5ZXIgaXMgaW52YWxkIik6dGhpcy5SY3x8dGhpcy5pc1BsYXlpbmc/KHRoaXMubWU+dGhpcy5uZSYmKGI9ITEpLHRoaXMuSShiKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoYil9LmJpbmQodGhpcyksNTApOihhLnNnKCksYS51ZygpLGEuVmJ8fHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDIwKSl9fSl9KShjKTt2YXIgdWE9Yy5wa3x8dWE7KGZ1bmN0aW9uKGMpe2Mucms9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSwKZzpmdW5jdGlvbigpe3ZhciBiPWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZik7aWYoIllXUnBkR2x2Ymk1clpXbHVaWFpwWkdWdmQyVnlZblZ1WnoweCIhPXRoaXMuZXEoKXx8IWIuYXV0aG9yaXR5fHwhYi5hdXRob3JpdHl8fCJ3d3cuc3BpZWdlbC5kZSIhPWIuYXV0aG9yaXR5JiYicXMyLnByZXZpZXcuc3BpZWdlbC5kZSIhPWIuYXV0aG9yaXR5JiYicHJldmlldy5zcGllZ2VsLmRlIiE9Yi5hdXRob3JpdHkmJiJwcm9kLnNwaWVnZWwuZGUiIT1iLmF1dGhvcml0eSl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiandwbGF5ZXIiKTtpZighd2luZG93Lmp3cGxheWVyfHwhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoandwbGF5ZXIoKS5pZCl8fCJBIiE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoandwbGF5ZXIoKS5pZCkubm9kZU5hbWUpaWYod2luZG93Lmp3cGxheWVyJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZChqd3BsYXllcigpLmlkKXx8aCYmaCgpLmlkKXtiPQpbXTtpZigxPGEubGVuZ3RoKWZvcihoPTA7aDxhLmxlbmd0aDtoKyspYi5wdXNoKGFbaF0uZ2V0QXR0cmlidXRlKCJpZCIpKTtlbHNlIGIucHVzaChqd3BsYXllcigpLmlkKTtqd3BsYXllcigpO2ZvcihhPTA7YTxiLmxlbmd0aDthKyspe3ZhciBoPW5ldyB0YSh3aW5kb3cuandwbGF5ZXIoYlthXSkpO3RoaXMuTihoKXx8dGhpcy5scihoKXx8KHRoaXMuUChoKSxoPW5ldyB1YShoLHRoaXMuSyksaC5TKCksaC5nKCkpfX10aGlzLlIoKX19LFh2OmZ1bmN0aW9uKCl7cmV0dXJuIllXUnBkR2x2Ymk1clpXbHVaWFpwWkdWdmQyVnlZblZ1WnoweCJ9LGVxOmZ1bmN0aW9uKCl7dmFyIGI9ZS5sYShkb2N1bWVudC5sb2NhdGlvbi5ocmVmKTtyZXR1cm4gZS52YihiLmFuY2hvcil9fSl9KShjKTt2YXIgdmE9Yy5ya3x8dmEsd2E9bmV3IHZhKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLkRyPQp0aGlzLmFbM107dGhpcy5Qaz10aGlzLmFbOF07dGhpcy5zbT10aGlzLmFbMV07dGhpcy5ObD10aGlzLmFbOV07dGhpcy5qPXRoaXMuYVsxMF19Yy5pbz1iO2IucHJvdG90eXBlPXtDcjpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuRHI6dGhpcy5PayhhKX0sT2s6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLlBrOnRoaXMucm0oYSl9LHJtOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5zbTp0aGlzLk1sKGEpfSxNbDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuTmw6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciB4YT1jLmlvfHx4YSxyYz1uZXcgeGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1yYy5Dcig0KTsoZnVuY3Rpb24oYyl7Yy54bT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtpZihiKXt2YXIgYT1iLmVsXzthfHwoYT1iLmVsKCkpO2E/KHRoaXMuWShhKSwoYj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdKXx8KGI9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pLGI/dGhpcy5aKGIpOnRoaXMucGEoKSk6dGhpcy5wYSgpfWVsc2UgdGhpcy5wYSgpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuInZpZGVvanMifSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkub24oInRpbWV1cGRhdGUiLGZ1bmN0aW9uKGIpe3RoaXMuTWQoYil9LmJpbmQodGhpcykpfSxNZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT1iLmN1cnJlbnRUaW1lKCksYj1iLmR1cmF0aW9uKCk7YSYmMDxhJiZiJiYwPGImJmE+PWItMiYmdGhpcy5WJiZ0aGlzLlYoKX0sQWU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnLmdldEF0dHJpYnV0ZSgiZGF0YS14LXNldHVwIik7CmlmKGIpdHJ5e3ZhciBhPUpTT04ucGFyc2UoYik7aWYoYS5oYXNPd25Qcm9wZXJ0eSgieC1hdXRvcGxheSIpJiYhYVsieC1hdXRvcGxheSJdKXJldHVybiExfWNhdGNoKGgpe31iPXRoaXMuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIuYXV0b3BsYXkmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmF1dG9wbGF5P2IuYXV0b3BsYXkoKTohMX0sdmE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXIubXV0ZWQmJnRoaXMucGxheWVyLm11dGVkKCl9LFZhOmZ1bmN0aW9uKCl7dGhpcy5wYXVzZSgpO3JldHVybiEwfSxpc1BsYXlpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wYXVzZWQoKT8hMTohMH0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLGE9Yi5pc0Z1bGxzY3JlZW47aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpdHJ5e2E9YSgpfWNhdGNoKGgpe2E9ITF9YSYmYi5leGl0RnVsbHNjcmVlbigpfSxjdXJyZW50VGltZTpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLmdldFJhd1BsYXllcigpO2lmKGIuY3VycmVudFRpbWUpcmV0dXJuIGIuY3VycmVudFRpbWUoKX19KX0pKGMpO3ZhciB5YT1jLnhtfHx5YTsoZnVuY3Rpb24oYyl7Yy53bT12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dGhpcy5UPXRoaXMuVHx8ITE7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKTt0aGlzLmRhPXRoaXMuQmM9dGhpcy5BYT10aGlzLlljPSExO3RoaXMudmg9ZS5FYigxMCk7dGhpcy5YaD0hMDt0aGlzLm5jPXRoaXMuUWc9ITE7dGhpcy5icyhiLmdldFJhd1BsYXllcigpKXx8KHRoaXMubGgoKSx0aGlzLm5vKCksdGhpcy5vYigpKX0sYnM6ZnVuY3Rpb24oYil7cmV0dXJuIGUuQmEoInQtb25saW5lLmRlIik/ITE9PT1iLm9wdGlvbnNfLmFkUHJlcm9sbDohMX0sbnc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2NvbnNvbGUuaW5mbyh0aGlzLmdldFBsYXllcigpLmphKCksIjsiLCJ3aW5kb3cuaW1hOiIsCiI7Iix3aW5kb3cuaW1hLCI7Iix0eXBlb2Ygd2luZG93LmltYSwiOyIsInBsYXllci5hZHM6IiwiOyIsYi5XLCI7Iix0eXBlb2YgYi5XLCI7IiwicGxheWVyLmFkcy5zdGF0ZToiLCI7IixiLlc/Yi5XLnN0YXRlOiJ1bmRlZmluZWRYIiwiOyIsYi5XP3R5cGVvZiBiLlcuc3RhdGU6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYToiLCI7IixiLmltYSwiOyIsdHlwZW9mIGIuaW1hLCI7IiwicGxheWVyLmltYTM6IiwiOyIsYi5KLCI7Iix0eXBlb2YgYi5KLCI7IiwicGxheWVyLmltYS5hZGRFdmVudExpc3RlbmVyOiIsIjsiLGIuaW1hP2IuaW1hLmFkZEV2ZW50TGlzdGVuZXI6InVuZGVmaW5lZFgiLCI7IixiLmltYT90eXBlb2YgYi5pbWEuYWRkRXZlbnRMaXN0ZW5lcjoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5hZGRFdmVudExpc3RlbmVyOiIsIjsiLGIuSj9iLkouYWRkRXZlbnRMaXN0ZW5lcjoidW5kZWZpbmVkWCIsIjsiLGIuSj90eXBlb2YgYi5KLmFkZEV2ZW50TGlzdGVuZXI6CiJ1bmRlZmluZWRYIiwiOyIsInBsYXllci5pbWEuZ2V0QWRzTWFuYWdlcjoiLCI7IixiLmltYT9iLmltYS5HYToidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5HYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5nZXRBZHNNYW5hZ2VyOiIsIjsiLGIuSj9iLkouR2E6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5HYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmdldEFkc01hbmFnZXIoKToiLCI7IixiLmltYSYmYi5pbWEuR2E/Yi5pbWEuR2EoKToidW5kZWZpbmVkWCIsIjsiLGIuaW1hJiZiLmltYS5HYT90eXBlb2YgYi5pbWEuR2EoKToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5nZXRBZHNNYW5hZ2VyKCk6IiwiOyIsYi5KJiZiLkouR2E/Yi5KLkdhKCk6InVuZGVmaW5lZFgiLCI7IixiLkomJmIuSi5HYT90eXBlb2YgYi5KLkdhKCk6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYS5fYWRzTG9hZGVyOiIsIjsiLGIuaW1hP2IuaW1hLldkOgoidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5XZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5fYWRzTG9hZGVyOiIsIjsiLGIuSj9iLkouV2Q6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5XZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLl9hZHNNYW5hZ2VyOiIsIjsiLGIuaW1hP2IuaW1hLlhkOiJ1bmRlZmluZWRYIiwiOyIsYi5pbWE/dHlwZW9mIGIuaW1hLlhkOiJ1bmRlZmluZWRYIiwiOyIsInBsYXllci5pbWEzLl9hZHNNYW5hZ2VyOiIsIjsiLGIuSj9iLkouWGQ6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5YZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmFkc0xvYWRlcjoiLCI7IixiLmltYT9iLmltYS5uYToidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5uYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5hZHNMb2FkZXI6IiwiOyIsYi5KP2IuSi5uYToidW5kZWZpbmVkWCIsIjsiLGIuSj8KdHlwZW9mIGIuSi5uYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmFkc01hbmFnZXI6IiwiOyIsYi5pbWE/Yi5pbWEuY2U6InVuZGVmaW5lZFgiLCI7IixiLmltYT90eXBlb2YgYi5pbWEuY2U6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYTMuYWRzTWFuYWdlcjoiLCI7IixiLko/Yi5KLmNlOiJ1bmRlZmluZWRYIiwiOyIsYi5KP3R5cGVvZiBiLkouY2U6InVuZGVmaW5lZFgiLCI7IiwiRE9ORSIsdGhpcy52aCl9LHdiOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtiLmltYTMmJih0aGlzLmltYT1iLmltYTMpO2lmKGIuaW1hKXt0aGlzLmltYT1iLmltYTt0cnl7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuaW1hJiZ0aGlzLnBsYXllci5nZXRSYXdQbGF5ZXIoKS5hY3RpdmVQbHVnaW5zXyYmMT09dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyKCkuYWN0aXZlUGx1Z2luc18uaW1hJiYodGhpcy5pbWE9dGhpcy5pbWEoKSx0aGlzLmltYS5jb250cm9sbGVyJiYKKHRoaXMuaW1hPXRoaXMuaW1hLmNvbnRyb2xsZXIpKX1jYXRjaChhKXt9fXJldHVybiB0aGlzLmltYX0sUmI6ZnVuY3Rpb24oKXtpZighdGhpcy5uYSl7dmFyIGI9dGhpcy53YigpO2ImJihiLmFkc0xvYWRlciYmKHRoaXMubmE9Yi5hZHNMb2FkZXIpLGIuX2Fkc0xvYWRlciYmKHRoaXMubmE9Yi5fYWRzTG9hZGVyKSxiLmdldEFkc0xvYWRlciYmKHRoaXMubmE9Yi5nZXRBZHNMb2FkZXIpLGIuY29udHJvbGxlciYmYi5jb250cm9sbGVyLnNka0ltcGwmJmIuY29udHJvbGxlci5zZGtJbXBsLmFkc0xvYWRlciYmKHRoaXMubmE9Yi5jb250cm9sbGVyLnNka0ltcGwuYWRzTG9hZGVyKSl9cmV0dXJuIHRoaXMubmF9LEVnOmZ1bmN0aW9uKCl7aWYoIXRoaXMuQmMpe3ZhciBiPXRoaXMud2IoKTtiJiYoYi5hZHNNYW5hZ2VyJiYodGhpcy5CYz1iLmFkc01hbmFnZXIpLGIuZ2V0QWRzTWFuYWdlciYmKHRoaXMuQmM9Yi5nZXRBZHNNYW5hZ2VyKCkpKX1yZXR1cm4gdGhpcy5CY30sanI6ZnVuY3Rpb24oKXtpZighdGhpcy5QZyl7dmFyIGI9CnRoaXMud2IoKSxhPXRoaXMuaHIoKTt3aW5kb3cuaW1hJiZiJiYoYi5fYWRzTG9hZGVyfHxiLmFkc0xvYWRlcnx8YSkmJih0aGlzLlBnPSEwKX1yZXR1cm4gdGhpcy5QZ30saHI6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyF0aGlzLlljJiZiLmFkcyYmKGIuYWRzLnN0YXRlfHxiLmFkcy5fc3RhdGUpJiYodGhpcy5ZYz0hMCk7cmV0dXJuIHRoaXMuWWN9LG9iOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5SYigpO2lmKGIpe3ZhciBhPSJhZEVycm9yIixoPSJhZHNNYW5hZ2VyTG9hZGVkIixkPSJsb2ciO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SJiYoYT1nb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SKTt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkc01hbmFnZXJMb2FkZWRFdmVudCYmCmdvb2dsZS5pbWEuQWRzTWFuYWdlckxvYWRlZEV2ZW50LlR5cGUmJmdvb2dsZS5pbWEuQWRzTWFuYWdlckxvYWRlZEV2ZW50LlR5cGUuQURTX01BTkFHRVJfTE9BREVEJiYoaD1nb29nbGUuaW1hLkFkc01hbmFnZXJMb2FkZWRFdmVudC5UeXBlLkFEU19NQU5BR0VSX0xPQURFRCk7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYoZD1nb29nbGUuaW1hLkFkRXZlbnQuVHlwZS5MT0cpOyJmdW5jdGlvbiIhPT10eXBlb2YgYi5hZGRFdmVudExpc3RlbmVyP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKTooYi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKGgsZnVuY3Rpb24oKXt0aGlzLmp0KCl9LmJpbmQodGhpcykpLApiLmFkZEV2ZW50TGlzdGVuZXIoZCxmdW5jdGlvbihhKXt0aGlzLmdhKGEsITApO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKTt0aGlzLmZhKCEwKX0uYmluZCh0aGlzKSkpfWVsc2UgdGhpcy51YSgpfHx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMub2IoKX0uYmluZCh0aGlzKSwyMCl9LGp0OmZ1bmN0aW9uKCl7dGhpcy5uYz0hMDt2YXIgYj10aGlzLkVnKCk7aWYoYnx8dGhpcy51YSgpKXt2YXIgYT0iYWRFcnJvciIsaD0ibG9nIjt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudCYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYKKGg9Z29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HKTtiLmFkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihhKXt0aGlzLmdhKGEpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoaCxmdW5jdGlvbihhKXt0aGlzLmdhKGEsITApO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKTt0aGlzLmZhKCEwKX0uYmluZCh0aGlzKSk7dmFyIGQ9IiI7ZS5UYSgpJiYoZD0iTV8iKTtiLmFkZEV2ZW50TGlzdGVuZXIoInN0YXJ0IixmdW5jdGlvbigpe2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrInN0YXJ0IiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiZmlyc3RxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrImZpc3RxdWFydGlsZSIsIiIsITApfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoIm1pZHBvaW50IixmdW5jdGlvbigpe3RoaXMub2M9CiEwO2lmKGUuQmEoImNoaXAuZGUiKSl7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtlLnRyYWNrKCJzdGF0c19jdXN0XyIrZCsibWlkcG9pbnQiLCIiLCEwKTtlLnRyYWNrKCJzdGF0c19jdXN0X2RvdWJsZXBsYXkiLCFhLnBhdXNlZCgpLCEwKX19LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigidGhpcmRxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrInRoaXJkcXVhcnRpbGUiLCIiLCEwKX0uYmluZCh0aGlzKSk7Yi5hZGRFdmVudExpc3RlbmVyKCJjb21wbGV0ZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrImNvbXBsZXRlIiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiaW1wcmVzc2lvbiIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iKwpkKyJpbXByZXNzaW9uIiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiYWxsQWRzQ29tcGxldGVkIixmdW5jdGlvbigpe3RoaXMub2N8fCh0aGlzLm8oImFkZXJyb3IiLCJub2FkZXZlbnQiKSx0aGlzLmZhKCksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKX0sV3Y6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyF0aGlzLmtnJiZiLmFkcyYmKHRoaXMua2c9Yi5hZHMpO3JldHVybiB0aGlzLmtnfSxubzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7Yi5vbigiYWRzZXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuZ2EoYSk7dGhpcy5mYSgpO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKX0uYmluZCh0aGlzKSk7Yi5vbigiYWR0cmlnZ2VyIixmdW5jdGlvbigpe3RoaXMucmEoKTt0aGlzLmZhKCEwKTsKdGhpcy5vKCJ0cmlnZ2VyIiwiSE9NQUQiKX0uYmluZCh0aGlzKSk7Yi5vbigiaW1hM2Vycm9yIixmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZmEoKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCl9LmJpbmQodGhpcykpO2Iub24oImltYTNhZGVycm9yIixmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZmEoKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCl9LmJpbmQodGhpcykpO2Iub24oImltYTMtYWQtZXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuZ2EoYSk7dGhpcy5mYSgpO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKX0uYmluZCh0aGlzKSk7Yi5vbigiYWRzLWZpcnN0LXF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygpO3RoaXMuUGUoKX0uYmluZCh0aGlzKSl9LGxkOmZ1bmN0aW9uKCl7dmFyIGI9ITE7dHJ5e2lmKGhvbWFkVXRpbHMmJmhvbWFkVXRpbHMuWClob21hZFV0aWxzLkthJiYoYj0hMCk7ZWxzZXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubGQoKX0uYmluZCh0aGlzKSwKNTApO3JldHVybn19Y2F0Y2goYSl7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmxkKCl9LmJpbmQodGhpcyksNTApO3JldHVybn1iJiYoKGI9dGhpcy5FZygpKSYmYi5kZXN0cm95P2IuZGVzdHJveSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5sZCgpfS5iaW5kKHRoaXMpLDUwKSl9LGxoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKTtpZihiLmlzUGxheWluZygpJiYwPGIuY3VycmVudFRpbWUoKSlpZih0aGlzLmpyKCkpe3ZhciBhPXRoaXMud2IoKSxoPXRoaXMuUmIoKTthJiZoJiYodGhpcy53YigpLHRoaXMuUmIoKSx0aGlzLm5jfHx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubmM/dGhpcy53KCk6KHRoaXMuZmEoITApLHRoaXMubygibm9BZHNNYW5hZ2VyIiwiYWRzTWFuYWdlciIpKX0uYmluZCh0aGlzKSwyRTMpKTt0aGlzLndiKCl9ZWxzZSB0aGlzLlFnP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGE9CnRoaXMud2IoKSxiPXRoaXMuUmIoKTthJiYhYj8odGhpcy5vKCJub2ZyYW1ld29yayIsIklNQV9BRFNMT0FERVIiKSx0aGlzLmZhKCkpOih0aGlzLmZhKCEwKSx0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIikpfS5iaW5kKHRoaXMpLDEwMCk6dGhpcy5RZz0hMDtiLmlzUGxheWluZygpJiYxMDxiLmN1cnJlbnRUaW1lKCl8fHRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmxoKCl9LmJpbmQodGhpcyksNTApfSxnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGg9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpaD0hMDtofHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGg9ITApOyJudW1iZXIiPT10eXBlb2YgYSYmKGIuVD1hLGIubygiYWRlcnJvciIsYSkpfXJldHVybiBofWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTsKaWYoYi5nZXRFcnJvciYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0RXJyb3Ipe3ZhciBoPWIuZ2V0RXJyb3IoKTtpZihoLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGguZ2V0RXJyb3JDb2RlJiZhKGguZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTtyZXR1cm59fWZvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkmJmJbZF0mJmJbZF0uYWRFcnJvciYmYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJmEoYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7YnJlYWt9fSxvbzpmdW5jdGlvbigpe3RoaXMucmN8fCh0aGlzLnJjPSJ1bmtub3duIik7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZihiLmFkcyl7aWYodGhpcy5yYyE9Yi5hZHMuc3RhdGUmJih0aGlzLnJjPWIuYWRzLnN0YXRlKSwiYWQtcGxheWJhY2siPT0KdGhpcy5yYyl7dGhpcy53KCJhZC1wbGF5YmFjayIpO3JldHVybn19ZWxzZSB0aGlzLnJjPSJuby1hZHMiO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vbygpfS5iaW5kKHRoaXMpLDEwKX0sdmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYX0sRGE6ZnVuY3Rpb24oKXswPD1lLlNiKGRvY3VtZW50LmxvY2F0aW9uKS5pbmRleE9mKCJzdGVybi5kZSIpJiYxMDA5PT10aGlzLlQ/KHRoaXMuZGE9ITAsdGhpcy5zKCEwKSk6KHRoaXMuZGE9ITAsdGhpcy53KCJlbXB0eSB2YXN0IikpfSxmYTpmdW5jdGlvbihiKXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZGE/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwMCl9LHM6ZnVuY3Rpb24oYil7dGhpcy51YSgpfHwoYnx8KHRoaXMuWGg9ITEpLHRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCkub24oInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5JKHRoaXMuWGgsZnVuY3Rpb24oKXt0aGlzLmxkKCl9LmJpbmQodGhpcykpfS5iaW5kKHRoaXMpKSl9LAp0bzpmdW5jdGlvbigpe3RoaXMuZXd8fCgxMDx0aGlzLiR1Pyh0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGFhemEiKSx3aW5kb3cuc2V0VGltZW91dCh0aGlzLmZhLmJpbmQodGhpcyksNTAwKSk6KHRoaXMuJHUrKyx0aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpLnZwRXZlbnQ/dGhpcy5udCgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50bygpfS5iaW5kKHRoaXMpLDUwKSkpfSxudDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7aWYoYi52cEV2ZW50JiYhdGhpcy5hdil7dGhpcy5hdj0hMDt2YXIgYT0iIjtiLnZwRXZlbnQucmFuZG9tVGVzdCYmKGE9IiIpO2IudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZHMtZXJyb3IiK2EsZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiLCJ2cDphZHMtZXJyb3IiKTt3aW5kb3cuc2V0VGltZW91dCh0aGlzLmZhLmJpbmQodGhpcyksNTAwKX0uYmluZCh0aGlzKSk7CmIudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZC1lcnJvciIrYSxmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsInZwOmFkLWVycm9yIik7d2luZG93LnNldFRpbWVvdXQodGhpcy5mYS5iaW5kKHRoaXMpLDUwMCl9LmJpbmQodGhpcykpO2IudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZC1yZWFkeSIrYSxmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLnZwRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcigidnA6YWQtZW5kZWQiK2EsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yi52cEV2ZW50LmFkZEV2ZW50TGlzdGVuZXIoInZwOmFkc2xvdC1jb21wbGV0ZSIrYSxmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLnZwRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcigidnA6YWRzLXJlYWR5IithLGZ1bmN0aW9uKCl7dGhpcy53KCl9LmJpbmQodGhpcykpfX19KX0pKGMpO3ZhciB6YT1jLndtfHx6YTsoZnVuY3Rpb24oYyl7Yy55bT1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApnOmZ1bmN0aW9uKCl7aWYoIXdpbmRvdy5kZW1vUGxheWVyKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaWZyYW1lIiksYTthPXRoaXMuSWgod2luZG93KTtmb3IodmFyIGg9MDtoPGIubGVuZ3RoO2grKyl0cnl7YT1hfHx0aGlzLkloKGJbaF0pfWNhdGNoKGQpe310aGlzLlIoKX19LEloOmZ1bmN0aW9uKGIpe3ZhciBhPVtdO2IudmlkZW9qcyYmYi52aWRlb2pzLmdldFBsYXllcnM/YT1iLnZpZGVvanMuZ2V0UGxheWVycygpOmIudmlkZW9qcyYmYi52aWRlb2pzLnBsYXllcnMmJihhPWIudmlkZW9qcy5wbGF5ZXJzKTtpZigwPGUudGUoYSkpe2I9YTtmb3IodmFyIGggaW4gYiliLmhhc093blByb3BlcnR5KGgpJiYoYT1uZXcgeWEoYltoXSksYS5xYXx8dGhpcy5OKGEpfHwhMT09PWEuZ2V0UmF3UGxheWVyKCkuaXNSZWFkeV98fCh0aGlzLlAoYSksKG5ldyB6YShhLHRoaXMuSykpLmcoKSkpO3JldHVybiEwfXJldHVybiExfSxSOmZ1bmN0aW9uKCl7dGhpcy5IYj0Kd2luZG93LnNldFRpbWVvdXQodGhpcy5nLmJpbmQodGhpcyksdGhpcy5HYyl9fSl9KShjKTt2YXIgQWE9Yy55bXx8QWEsQmE9bmV3IEFhKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnlxPXRoaXMuYVs0XTt0aGlzLiRvPXRoaXMuYVs1XTt0aGlzLnRuPXRoaXMuYVsxMF07dGhpcy5rcD10aGlzLmFbMV07dGhpcy5Kbz10aGlzLmFbNl07dGhpcy5Gcz10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVsxXX1jLlFyPWI7Yi5wcm90b3R5cGU9e3hxOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy55cTp0aGlzLlpvKGEpfSxabzpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuJG86dGhpcy5zbihhKX0sc246ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy50bjp0aGlzLmpwKGEpfSxqcDpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMua3A6dGhpcy5JbyhhKX0sSW86ZnVuY3Rpb24oYSl7cmV0dXJuIDU8CmE/dGhpcy5Kbzp0aGlzLkVzKGEpfSxFczpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuRnM6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBDYT1jLlFyfHxDYSxzYz1uZXcgQ2EoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1zYy54cSg0KTsoZnVuY3Rpb24oYyl7Yy5sbD11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt0aGlzLlNlPTA7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPWIucGxheWVyQ29udGFpbmVyO2lmKCFhJiYoYi5wbGF5ZXJJbnN0YW5jZSYmYi5wbGF5ZXJJbnN0YW5jZS5pZCYmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYi5wbGF5ZXJJbnN0YW5jZS5pZCkpJiYoYT1iLnBhcmVudE5vZGUpLCFhKSl7dGhpcy5wYSgpO3JldHVybn10aGlzLlkoYSk7CihiPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pfHwoYj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7Yj90aGlzLlooYik6dGhpcy5wYSgpfSxWczpmdW5jdGlvbihiKXt2YXIgYT10aGlzLnpiLGg9dGhpcy5qYSgpLGQ9IiI7Yi5tZW1vJiYoZD1iLm1lbW8udmlkZW9pZCk7ZCYmYSYmYS5VYiYmKDA8PWguaW5kZXhPZihkKXx8YS56ZCgpKX0scGF1c2U6ZnVuY3Rpb24oYil7Ynx8KHRoaXMuU2U9MCk7Yj10aGlzLmdldFJhd1BsYXllcigpO2IucGxheWVySW5zdGFuY2UmJmIucGxheWVySW5zdGFuY2UucGF1c2U/KHdpbmRvdy5wb3N0TWVzc2FnZSgiaG9tYWRwYXVzZSIsIioiKSxiLnBsYXllckluc3RhbmNlLnBhdXNlKCkpOndpbmRvdy5vdlZpZGVvJiZ3aW5kb3cub3ZWaWRlby5zdG9wUGxheWJhY2smJih3aW5kb3cucG9zdE1lc3NhZ2UoImhvbWFkcGF1c2UiLCIqIiksd2luZG93Lm92VmlkZW8uc3RvcFBsYXliYWNrKCkpfSxWYTpmdW5jdGlvbigpe3RoaXMuU2UrKzsKaWYoMTA8dGhpcy5TZSlyZXR1cm4hMTt0aGlzLnBhdXNlKCJwYXVzZVJlcGVhdE9uQWREZWxpdmVyeSIpO3JldHVybiEwfSxwbGF5OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtiLnBsYXllckluc3RhbmNlJiZiLnBsYXllckluc3RhbmNlLnBsYXk/KHdpbmRvdy5wb3N0TWVzc2FnZSgiaG9tYWRwbGF5IiwiKiIpLGIucGxheWVySW5zdGFuY2UucGxheSgpKTp3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8ucmVzdW1lUGxheWJhY2smJih3aW5kb3cucG9zdE1lc3NhZ2UoImhvbWFkcGxheSIsIioiKSx3aW5kb3cub3ZWaWRlby5yZXN1bWVQbGF5YmFjaygpKX0saXNQbGF5aW5nOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4hMT09PWIucGxheWVySW5zdGFuY2UucGF1c2VkPyEwOiEwPT09Yi5wbGF5ZXJJbnN0YW5jZS5wYXVzZWQ/ITE6Yi5pc1BsYXlpbmd9LGdldEN1cnJlbnRUaW1lOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTsKaWYoYi5wbGF5ZXJJbnN0YW5jZSYmYi5wbGF5ZXJJbnN0YW5jZS5jdXJyZW50VGltZSlyZXR1cm4gYi5wbGF5ZXJJbnN0YW5jZS5jdXJyZW50VGltZTtpZih3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8uZ2V0Q3VycmVudFRpbWUpcmV0dXJuIHdpbmRvdy5vdlZpZGVvLmdldEN1cnJlbnRUaW1lKCl9LGdldER1cmF0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtpZihiLnBsYXllckluc3RhbmNlJiZiLnBsYXllckluc3RhbmNlLmR1cmF0aW9uKXJldHVybiBiLnBsYXllckluc3RhbmNlLmR1cmF0aW9uO2lmKHdpbmRvdy5vdlZpZGVvJiZ3aW5kb3cub3ZWaWRlby5nZXREdXJhdGlvbilyZXR1cm4gd2luZG93Lm92VmlkZW8uZ2V0RHVyYXRpb24oKX0sTzpmdW5jdGlvbigpe3JldHVybiJPdlZpZGVvIn0sTmE6ZnVuY3Rpb24oKXt9LE1kOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0UmF3UGxheWVyKCk7dGhpcy5nZXRDdXJyZW50VGltZSgpPmImJihiPXRoaXMuZ2V0Q3VycmVudFRpbWUoKSk7CnZhciBhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiZ0aGlzLlYmJnRoaXMuVigpfX0pfSkoYyk7dmFyIERhPWMubGx8fERhOyhmdW5jdGlvbihjKXtjLmtsPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LEFhOmZ1bmN0aW9uKCl7aWYoIXRoaXMucGUpaWYodGhpcy5BYnx8KHRoaXMuQWI9MCksdGhpcy5nZXRQbGF5ZXIoKS5pc1BsYXlpbmcoKSYmdGhpcy5BYisrLDE1PHRoaXMuQWIpdGhpcy5vKCJub2ZyYW1ld29yayIsIklNQSIpLHRoaXMucyghMCk7ZWxzZXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2lmKGIuYWR2ZXJ0aXNpbmcpaWYoYj1iLmFkdmVydGlzaW5nLmFkc0xvYWRlcil7dGhpcy5wZT0hMDt2YXIgYT0iYWRFcnJvciI7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUuQURfRVJST1ImJgooYT1nb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SKTtiLmFkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZGF8fCh0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5BYSgpfS5iaW5kKHRoaXMpLDEwKTtlbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5BYSgpfS5iaW5kKHRoaXMpLDEwKX19LHZkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF9LGdhOmZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGEoYSxiKXt2YXIgaD0hMTtpZihhKXtpZigxMDA5PT1hfHwzMDM9PWF8fDQwMz09YSloPSEwO2h8fCFhLmluZGV4T2Z8fC0xPT09YS5pbmRleE9mKCIxMDA5IikmJi0xPT09YS5pbmRleE9mKCIzMDMiKSYmLTE9PT1hLmluZGV4T2YoIjQwMyIpfHwoaD0hMCk7Im51bWJlciI9PXR5cGVvZiBhJiYoYi5UPWEsYi5vKCJhZGVycm9yIiwKYSkpfXJldHVybiBofWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTtpZihiLmdldEVycm9yJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5nZXRFcnJvcil7dmFyIGg9Yi5nZXRFcnJvcigpO2lmKGguZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgaC5nZXRFcnJvckNvZGUmJmEoaC5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO3JldHVybn19Zm9yKHZhciBkIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSYmYltkXSYmYltkXS5hZEVycm9yJiZiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmYShiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTticmVha319LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpO3RoaXMuVD10aGlzLlR8fCExO3RoaXMuQWEoKTt2YXIgYT13aW5kb3cub3ZWaWRlbzthfHwoYT13aW5kb3cub3YudmlkZW8uUGxheWVyKTsKYSYmYS5yZWdpc3RlckV2ZW50JiYhdGhpcy5IcD8oYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuT25fUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX0FERVJST1IsZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCk7dGhpcy5zKCl9LmJpbmQodGhpcykpLHRoaXMuSHA9ITAsYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX1NUT1BQRUQsZnVuY3Rpb24oYSl7Yi5WcyhhKX0uYmluZCh0aGlzKSkpOmIuaXNQbGF5aW5nKCl8fHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksMTAwKX0sczpmdW5jdGlvbihiKXt0aGlzLkkoYil9fSl9KShjKTsKdmFyIEVhPWMua2x8fEVhOyhmdW5jdGlvbihjKXtjLm1sPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMuVWE9MTUwMDt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1bXTt3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8uc3luY2hyb25pemVyJiZ3aW5kb3cub3ZWaWRlby5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllciYmMDx3aW5kb3cub3ZWaWRlby5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllci5sZW5ndGgmJihiPXdpbmRvdy5vdlZpZGVvLnN5bmNocm9uaXplci5yZWdpc3RlcmVkUGxheWVyKTt3aW5kb3cub3YmJndpbmRvdy5vdi52aWRlbyYmd2luZG93Lm92LnZpZGVvLlBsYXllciYmd2luZG93Lm92LnZpZGVvLlBsYXllci5zeW5jaHJvbml6ZXImJndpbmRvdy5vdi52aWRlby5QbGF5ZXIuc3luY2hyb25pemVyLnJlZ2lzdGVyZWRQbGF5ZXImJjA8d2luZG93Lm92LnZpZGVvLlBsYXllci5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllci5sZW5ndGgmJgooYj13aW5kb3cub3YudmlkZW8uUGxheWVyLnN5bmNocm9uaXplci5yZWdpc3RlcmVkUGxheWVyKTtpZigwPGIubGVuZ3RoKWZvcih2YXIgYT0wO2E8Yi5sZW5ndGg7YSsrKXt2YXIgaD1uZXcgRGEoYlthXSk7aC5xYXx8dGhpcy5OKGgpfHwodGhpcy5QKGgpLChuZXcgRWEoaCx0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIEZhPWMubWx8fEZhLEdhPW5ldyBGYShyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5NaT10aGlzLmFbOF07dGhpcy5idD10aGlzLmFbN107dGhpcy52bj10aGlzLmFbN107dGhpcy5XaT10aGlzLmFbNV07dGhpcy5Daz10aGlzLmFbNF07dGhpcy5qPXRoaXMuYVs3XX1jLkp2PWI7Yi5wcm90b3R5cGU9e0xpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5NaTp0aGlzLmF0KGEpfSxhdDpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuYnQ6CnRoaXMudW4oYSl9LHVuOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy52bjp0aGlzLlZpKGEpfSxWaTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuV2k6dGhpcy5CayhhKX0sQms6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLkNrOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuajphfX19KShjKTt2YXIgSGE9Yy5Kdnx8SGEsdGM9bmV3IEhhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9dGMuTGkoNCk7KGZ1bmN0aW9uKGMpe2Mubms9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPWUuQ2coYiwiZWxlbWVudElEIik7dGhpcy5xaD1iLnBvc2l0aW9uaW5nO3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2guc3R5bGUud2lkdGg9CmIud2lkdGg7aC5zdHlsZS5taW5XaWR0aD1iLndpZHRoO2guc3R5bGUubWF4V2lkdGg9Yi53aWR0aDtoLnN0eWxlLmhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1pbkhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1heEhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1hcmdpbkxlZnQ9ImF1dG8iO2guc3R5bGUubWFyZ2luUmlnaHQ9ImF1dG8iOyJiZWZvcmUiPT10aGlzLnFoP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaCxhKToiYWZ0ZXIiPT10aGlzLnFoP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaCxhLm5leHRTaWJsaW5nKTphLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGgsYSk7dGhpcy5ZKGgpO3RoaXMuWihoKTt0aGlzLm5kPWh9LHBhdXNlOmZ1bmN0aW9uKCl7fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5uZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMubmQpfSx2YTpmdW5jdGlvbigpe3JldHVybiEwfSxzbzpmdW5jdGlvbigpe2UuV2codGhpcy5uZCk7ZS5CZSh0aGlzLm5kKTsKd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnNvKCl9LmJpbmQodGhpcyksNTApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuImlucmVhZCJ9LEdlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSl9KShjKTt2YXIgSWE9Yy5ua3x8SWE7KGZ1bmN0aW9uKGMpe2MubWs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMubygiZXh0ZXJuYWwiKTt0aGlzLkkoITApfX0pfSkoYyk7dmFyIEphPWMubWt8fEphOyhmdW5jdGlvbihjKXtjLm9rPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMuVWE9MTUwMDt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtJiZtLmlucmVhZCl7dmFyIGI9bS5pbnJlYWQsYT1lLkNnKGIsImVsZW1lbnRJRCIpO2UuV2coYSkmJihiPW5ldyBJYShiKSx0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBKYShiLHRoaXMuSykpLmcoKSkpO3RoaXMuSGI9d2luZG93LnNldFRpbWVvdXQodGhpcy5nLmJpbmQodGhpcyksCjEwMCl9ZWxzZSB0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksMTAwKX19KX0pKGMpO3ZhciBLYT1jLm9rfHxLYSxMYT1uZXcgS2Eocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMudnQ9dGhpcy5hWzVdO3RoaXMuTmo9dGhpcy5hWzJdO3RoaXMuSXY9dGhpcy5hWzRdO3RoaXMudXA9dGhpcy5hWzddO3RoaXMuS249dGhpcy5hWzhdO3RoaXMuQXM9dGhpcy5hWzRdO3RoaXMuWHA9dGhpcy5hWzNdO3RoaXMuS209dGhpcy5hWzRdO3RoaXMuU3M9dGhpcy5hWzVdO3RoaXMuWG89dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbNF19Yy5oaj1iO2IucHJvdG90eXBlPXt1dDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMudnQ6dGhpcy5NaihhKX0sTWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLk5qOnRoaXMuSHYoYSl9LEh2OmZ1bmN0aW9uKGEpe3JldHVybiA5PAphP3RoaXMuSXY6dGhpcy50cChhKX0sdHA6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnVwOnRoaXMuSm4oYSl9LEpuOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Lbjp0aGlzLnpzKGEpfSx6czpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuQXM6dGhpcy5XcChhKX0sV3A6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLlhwOnRoaXMuSm0oYSl9LEptOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuS206dGhpcy5ScyhhKX0sUnM6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlNzOnRoaXMuV28oYSl9LFdvOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5Ybzp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLmo6YX19fSkoYyk7dmFyIE1hPWMuaGp8fE1hLHVjPW5ldyBNYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPQp1Yy51dCg0KTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEpe3RoaXMudXJsPWE7dGhpcy5tZXRob2Q9IkdFVCI7dGhpcy5kYXRhPXt9fWMuYms9YjtiLnByb3RvdHlwZT17c2V0RGF0YTpmdW5jdGlvbihhKXt0aGlzLmRhdGE9YX0sRXQ6ZnVuY3Rpb24oYSl7dGhpcy5tZXRob2Q9YX0sYXBwZW5kRGF0YTpmdW5jdGlvbihhLGIpe3RoaXMuZGF0YVthXT1ifSxkbjpmdW5jdGlvbihhKXt0cnl7dGhpcy5hcHBlbmREYXRhKCJob21hZF9tYWNyb3MiLEpTT04uc3RyaW5naWZ5KGEpKX1jYXRjaChiKXt9fX19KShjKTt2YXIgeT1jLmJrfHx5OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsaCxkLGYpe3RoaXMuYmI9YTt0aGlzLnhnPXRoaXMuZ2k9ITE7dGhpcy5taD1kO3RoaXMuSmg9ITE7InN0cmluZyI9PT10eXBlb2YgYSYmKHRoaXMuYmI9bmV3IHkoYSkpO3ZhciBjPXRoaXMucWI9bmV3IFhNTEh0dHBSZXF1ZXN0O2Mub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWh8fAo0IT1jLnJlYWR5U3RhdGV8fDIwMCE9Yy5zdGF0dXMmJjIwMSE9Yy5zdGF0dXN8fGgoYyk7aWYoZCYmND09Yy5yZWFkeVN0YXRlJiYyMDAhPWMuc3RhdHVzJiYyMDEhPWMuc3RhdHVzKWQoYyk7ZWxzZSBpZig0PT1jLnJlYWR5U3RhdGUmJjA9PWMuc3RhdHVzJiZsJiZsLkZlKHRoaXMuYmIudXJsKSYmbC5OZCl7dmFyIGU9bmV3IHkoYS51cmwpO2UuRXQoIlBPU1QiKTtlLnNldERhdGEoe2hvbWFkX3Bpbmc6InRydWUifSk7KG5ldyBiKGUsZnVuY3Rpb24oYSl7dmFyIGI9ITE7dHJ5e2I9SlNPTi5wYXJzZShhLnJlc3BvbnNlVGV4dCl9Y2F0Y2goaCl7Yj0hMX1iJiZiLnBpbmcmJiJwb25nIj09Yi5waW5nJiYoYj0hMCk7Ynx8bC5rYSgicmVxdWVzdF9mYWlsZWRfbm9wb25nICIpfSxmdW5jdGlvbigpe2wua2EoInJlcXVlc3RfZmFpbGVkIil9KSkubG9hZCgpfWYmJjQhPWMucmVhZHlTdGF0ZSYmZihjKX0uYmluZCh0aGlzKX1jLmNrPWI7Yi5wcm90b3R5cGU9e2xvYWQ6ZnVuY3Rpb24oKXt2YXIgYT0KdGhpcy5iYi5kYXRhO2lmKCJzdHJpbmciIT10eXBlb2YgYSl7dmFyIGI9YSxhPSIiLGQ7Zm9yKGQgaW4gYilhKz0iJiIrZCsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGJbZF0pO2E9YS5zdWJzdHIoMSl9dGhpcy54ZyYmKGErPSImaG9tYWRfZm9sbG93X3JlZGlyZWN0cz10cnVlIik7dHJ5e3RoaXMuSmg/dGhpcy5xYi5vcGVuKHRoaXMuYmIubWV0aG9kLHRoaXMuYmIudXJsLCExKTp0aGlzLnFiLm9wZW4odGhpcy5iYi5tZXRob2QsdGhpcy5iYi51cmwsITApLHRoaXMuZ2l8fCh0aGlzLnFiLndpdGhDcmVkZW50aWFscz0hMCksMDxhLmxlbmd0aCYmdGhpcy5xYi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSxhWyJYLUhvbWFkLVBvc3QiXSYmdGhpcy5xYi5zZXRSZXF1ZXN0SGVhZGVyKCJYLUhvbWFkLVBvc3QiLCJ0cnVlIiksdGhpcy5xYi5zZW5kKGEpfWNhdGNoKGYpe2wmJmwuRmUodGhpcy5iYi51cmwpP2wuTmQ/Cmwua2EoInJlcXVlc3RfZmFpbGVkIik6ZS50cmFjaygiY2hlY2siLCJyZXF1ZXN0X2ZhaWxlZCIsITApOmwuRmUodGhpcy5iYi51cmwpLHRoaXMubWgmJnRoaXMubWgoKX1yZXR1cm4gdGhpcy5xYn19fSkoYyk7dmFyIE5hPWMuY2t8fE5hOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5LYT0hMTt0aGlzLnFjPSIiO3RoaXMuZWU9dGhpcy5wYz10aGlzLnViPW51bGw7dGhpcy5Wbz10aGlzLkdiPXRoaXMuZGg9ITE7dGhpcy5KYT0iIjt0aGlzLllnPSExO3RoaXMuRmE9dGhpcy5yZD0iIjt0aGlzLlVnPXRoaXMuWD10aGlzLmlzRW5hYmxlZD10aGlzLlplPSExO3RoaXMuQ2E9W107dGhpcy5LZz10aGlzLlpiPSIiO3RoaXMubGU9ITE7dGhpcy5wZj0wO3RoaXMuRWY9InN2bXBsYXllci5hZHZlcnRpc2luZy5IT01BRF9WRVJJRklFRCI7dGhpcy5DZj0ic3ZtcGxheWVyLmFkdmVydGlzaW5nLkhPTUFEX0JMT0NLRUQiO3RoaXMuS2I9InN2bXBsYXllci5hZHZlcnRpc2luZy5IT01BRF9OT0JMT0NLRVIiOwp0aGlzLmhjPSJzdm1wbGF5ZXIuYWR2ZXJ0aXNpbmcuSE9NQURfQURCTE9DS0VSIjt0aGlzLkRmPSJzdm1wbGF5ZXIuYWR2ZXJ0aXNpbmcuSE9NQURfQ09PS0lFQkxPQ0tFUiI7dGhpcy5hYz0iIjt0aGlzLmJjPVtdO3RoaXMuY2M9W107dGhpcy5MZD1bXTt0aGlzLiRiPSIiO3RoaXMucWY9MDt0aGlzLnZpZGVvcGxhemE9e307dGhpcy5BYz0hMTt0aGlzLnVvPXRoaXMuT2Q9bnVsbDt0aGlzLkZoPXRoaXMuTmM9dGhpcy5wZz10aGlzLnVmPXRoaXMuTmQ9dGhpcy5nZT10aGlzLlFjPSExO3RoaXMuZ2I9e2dsb2JhbDohMSxjbGllbnQ6ITEsY3VzdG9tZXI6ITF9O3RoaXMudGQ9MDt0aGlzLk1nPSExO3RoaXMuTGc9MUUzO3RoaXMuJGM9ITE7dGhpcy5QYT0xRTM7dGhpcy5NZj0iIn1jLmRrPWI7Yi5wcm90b3R5cGU9e2dldENvbmZpZzpmdW5jdGlvbigpe3JldHVybntpc0FjdGl2ZTp0aGlzLkthLGFkdGFncGFyYW1ldGVyOnRoaXMucWMsYWR0YWdtb2RpZmllcjp0aGlzLnViLGFkdGFnbW9kaWZpZXJBZHY6dGhpcy5wYywKYWR0YWdyZWdleDp0aGlzLmVlLGJpdHJhdGU6dGhpcy5QYSxqc3BvcHVwczp0aGlzLmRoLHNpZGVsb2Fkczp0aGlzLkdiLGRpc2FibGV0ZXN0czp0aGlzLlZvLGhvbWFkQWxpYXM6dGhpcy5KYSxpc0luaXRpYWxpemVkOnRoaXMuWWcsZ2xvYmFsQ29uZmlnOnRoaXMucmQsY2xpZW50Q29uZmlnOnRoaXMuRmEsaXNFbmFibGVkOnRoaXMuaXNFbmFibGVkLGlzVmVyaWZpZWQ6dGhpcy5YLGlzQmxvY2tlZDp0aGlzLlVnLHNlcnZlcjp0aGlzLkNhLHN2bUNvbmZpZzp0aGlzLlpiLGhvbWFkQWRwYXRoOnRoaXMuS2csZGlzYWJsZUNvb2tpZVRlc3Q6dGhpcy5sZSx0ZXN0Q29va2llQXR0ZW1wdHM6dGhpcy5wZixIT01BRF9WRVJJRklFRDp0aGlzLkVmLEhPTUFEX0JMT0NLRUQ6dGhpcy5DZixIT01BRF9OT0JMT0NLRVI6dGhpcy5LYixIT01BRF9BREJMT0NLRVI6dGhpcy5oYyxIT01BRF9DT09LSUVCTE9DS0VSOnRoaXMuRGYsdGVzdEhpZGU6dGhpcy5hYyx0ZXN0VGFnczp0aGlzLmJjLHRlc3RUYWdzSlM6dGhpcy5jYywKdGVzdFRhZ3NYSFI6dGhpcy5MZCx0ZXN0Q29va2llOnRoaXMuJGIsdGhyb3R0bGU6dGhpcy5xZix2aWRlb3BsYXphOnRoaXMudmlkZW9wbGF6YSxob21hZFRlc3RlZDp0aGlzLkFjLGNoZWNrZWRIb21hZFN0YXR1c0NhbGxiYWNrOnRoaXMudW8sYWRCbG9ja2VyRGV0ZWN0ZWQ6dGhpcy5RYyxibG9ja2VkV2FzQ2FsbGVkOnRoaXMuZ2UsdXNlU3RyaWN0Q2hlY2tzOnRoaXMuTmQsdXNlU3RyaWN0Q29uZmlnQ2hlY2tzOnRoaXMudWYsY29uZmlnRmFpbHVyZXM6dGhpcy5nYixzaXRlQ29uZmlnOnRoaXMuYWIsc2VydmVySWQ6dGhpcy5CaCxlbmFibGVRdWFydGlsZVRyYWNraW5nOnRoaXMudmMsdnBhaWQ6dGhpcy5OYyxza2lwQWxsb3dlZDp0aGlzLkZoLHZtYXBzOnRoaXMuY2ksYWx0ZXJuYXRlX2NsaWNrdGhyb3VnaDp0aGlzLiRjLGFkRmFsbGJhY2tVUkw6dGhpcy5NZn19LERxOmZ1bmN0aW9uKCl7dmFyIGE9ITEsYjtmb3IoYiBpbiB0aGlzLmdiKSJib29sZWFuIj09dHlwZW9mIHRoaXMuZ2JbYl0mJgoxPT10aGlzLmdiW2JdJiYoYT0hMCk7cmV0dXJuIGF9LGRmOmZ1bmN0aW9uKGEpe3RoaXMuZ2JbYV09ITB9LGZxOmZ1bmN0aW9uKCl7dmFyIGE9W10sYjtmb3IoYiBpbiB0aGlzLmdiKSJib29sZWFuIj09dHlwZW9mIHRoaXMuZ2JbYl0mJjE9PXRoaXMuZ2JbYl0mJmEucHVzaChiKTtyZXR1cm4gYX0sS2Q6ZnVuY3Rpb24oYSl7YT1hfHwiIjtpZigic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIGE7YT1hLnJlcGxhY2UoIlt0aW1lXSIsTWF0aC5yb3VuZCgobmV3IERhdGUpLmdldFRpbWUoKS8xRTMpKTthPWEucmVwbGFjZSgiW3RpbWVNU10iLChuZXcgRGF0ZSkuZ2V0VGltZSgpKTthPWEucmVwbGFjZSgiW3RpbWVzdGFtcF0iLChuZXcgRGF0ZSkuZ2V0VGltZSgpKTthPWEucmVwbGFjZSgiW3JhbmRvbV0iLHRoaXMuRWIoMTApLnRvU3RyaW5nKCkpO2E9YS5yZXBsYWNlKCJbZG9jdW1lbnRVUkxdIixkb2N1bWVudC5VUkwpO2E9YS5yZXBsYWNlKCJbZG9jdW1lbnRCYXNlVVJJXSIsZG9jdW1lbnQuYmFzZVVSSSk7CnJldHVybiBhPWUuUG4oYSl9LHphOmZ1bmN0aW9uKGEsYixkKXt2YXIgZj0iIixjPSIiLGU9IiIsZz0iIjtpZighdGhpcy5LYSYmIWIpcmV0dXJuIG5ldyB5KGEpO2Y9dGhpcy5FZShhKTtjPXRoaXMubGEoYSk7Zj8odGhpcy5DYygpP2U9YTplPWMucHJvdG9jb2wrIjovLyIrYy5hdXRob3JpdHkrIi8iLGc9Yy5wYXRoLnN1YnN0cigxKSk6KGU9dGhpcy5EZCgpLGc9Yy5wYXRoLnN1YnN0cigxKSsoYy5xdWVyeT8iPyIrYy5xdWVyeToiIikpO2QmJih0aGlzLnFjfHx0aGlzLnVifHx0aGlzLnBjfHx0aGlzLmVlKSYmKGc9dGhpcy5XcihnKSk7YT1uZXcgeShlKTthLnVybD1lO2U9IiI7ZT1mP2MuaG9zdC5zcGxpdCgiLiIpLnNsaWNlKDEpLmpvaW4oIi0iKTp0aGlzLmhxKGMuaG9zdCk7YS5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9ZTthLmRhdGEuaG9tYWRfdXJsX3N1ZmZpeD1nO2EuZGF0YS5ob21hZF91cmxfc3VmZml4X2Jhc2U2ND10aGlzLnZiKGcpO2EubWV0aG9kPSJQT1NUIjsKcmV0dXJuIGF9LEVlOmZ1bmN0aW9uKGEpe3ZhciBiPSExLGQ9bmV3IFJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPyhbdy4tXSopOj8uKihbMC05XSspPy8/KFthLWYwLTldezQwfSkvPyQiLCJnIik7KGQ9ZC5leGVjKGEpKSYmKGRbMl18fGRbNV0pP2I9ITA6dGhpcy5DYygpJiYoZD1uZXcgUmVnRXhwKCJeKGh0dHBzPyk6Ly8oW3cuLV0qKTo/LiooWzAtOV0rKT8vKFthLWYwLTldezQwfSkvPyQiLCJnIiksKGQ9ZC5leGVjKGEpKSYmZFs0XSYmKGI9ITApKTtyZXR1cm4gYn0sQ2M6ZnVuY3Rpb24oKXt2YXIgYT0hMSxiPSIiO3RoaXMuQ2EmJnRoaXMuQ2EubGVuZ3RoJiYwPHRoaXMuQ2EubGVuZ3RoJiYoYj10aGlzLkNhWzBdLGI9Yi5yZXBsYWNlKCJodHRwczovLyIsIiIpLGI9Yi5yZXBsYWNlKCJodHRwOi8vIiwiIiksYj1iLnJlcGxhY2UoIi8vIiwiIiksYT0oYT1iLnNwbGl0KCIuIikpJiZhWzBdJiYiW2hhc2hdIj09YVswXT8hMTohMCk7cmV0dXJuIGF9LEZlOmZ1bmN0aW9uKGEpe3ZhciBiPQohMSxkPVJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPy4qIiwiZyIpLmV4ZWMoYSk7ZCYmKGRbMl18fGRbNV0pP2I9ITA6Yj10aGlzLkVlKGEpO3JldHVybiBifSxocTpmdW5jdGlvbihhKXt2YXIgYj0iIixkPSIiO2lmKCJzdHJpbmciPT09dHlwZW9mIHRoaXMuSmEmJjA8dGhpcy5KYS5sZW5ndGgpcmV0dXJuIHRoaXMuSmE7Zm9yKGQgaW4gdGhpcy5KYSlpZihiPXRoaXMuSmFbZF0sYi5oYXNPd25Qcm9wZXJ0eSgidXJsIikmJmIudXJsPT09YSlyZXR1cm4gYi5TdjtyZXR1cm4ibm9uZSJ9LHVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2FbdGhpcy5CaF19LERkOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy51ZCgpLGI9dGhpcy5FaCgobmV3IERhdGUpLmdldFRpbWUoKSsiIiksZD0iMWFiY2RmIi5zcGxpdCgiIik7cmV0dXJuIGEucmVwbGFjZSgiW2hhc2hdIixiLnNsaWNlKDAsLTEpKyIiK2RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmQubGVuZ3RoKV0pfSxqaDpmdW5jdGlvbihhLApiLGQpe2E9ITE7Yj0iIjtpZihkLmV2YWwpdHJ5e2I9ZXZhbCgiKCIrZC5ldmFsKyIpKCkiKX1jYXRjaChmKXthPSEwfWVsc2UgYT0hMDthJiYiS0VFUCIhPT1kLmZhbGxiYWNrJiYoYj1kLmZhbGxiYWNrKTtyZXR1cm4gYn0sVnI6ZnVuY3Rpb24oYSxiKXt2YXIgZD1lLmxhKGEpLGY9IiIsZj0iIixjO2ZvcihjIGluIGIpe2lmKGJbY10uc3VidmFsdWVzKXtmb3IodmFyIGc9ZGVjb2RlVVJJQ29tcG9uZW50KGQucXVlcnlLZXlbY10pLnNwbGl0KCImIiksZj17fSxIPTA7SDxnLmxlbmd0aDtIKyspe3ZhciBrPWdbSF0uc3BsaXQoIj0iKTtmW2tbMF1dPWtbMV19Zm9yKHZhciBsIGluIGJbY10uc3VidmFsdWVzKWZbbF09dGhpcy5qaChmW2xdLGwsYltjXS5zdWJ2YWx1ZXNbbF0pO2c9W107Zm9yKGwgaW4gZilnLnB1c2gobCsiPSIrZltsXSk7Zj1nPWVuY29kZVVSSUNvbXBvbmVudChnLmpvaW4oIiYiKSl9ZWxzZSBmPXRoaXMuamgoZC5xdWVyeUtleVtjXSxjLGJbY10pO2QucXVlcnlLZXlbY109CmZ9bD1bXTtmb3IoYyBpbiBkLnF1ZXJ5S2V5KWwucHVzaChjKyI9IitkLnF1ZXJ5S2V5W2NdKTtyZXR1cm4gZj1kLmhvc3QrZC5wYXRoKyI/IitsLmpvaW4oIiYiKX0sV3I6ZnVuY3Rpb24oYSl7dGhpcy5xYyYmKGErPXRoaXMucWMpO2lmKHRoaXMudWIpZm9yKHZhciBiIGluIHRoaXMudWIpdGhpcy51Yi5oYXNPd25Qcm9wZXJ0eShiKSYmKGE9YS5yZXBsYWNlKGIsdGhpcy51YltiXSkpO3RoaXMucGMmJihhPXRoaXMuVnIoYSx0aGlzLnBjKSk7cmV0dXJuIGF9LGw6ZnVuY3Rpb24oYSxiLGQsZixjLGUpe2w9dGhpczt0aGlzLllnPSEwO3RoaXMucmQ9YTt0aGlzLkZhPWI7dGhpcy5aZT1kO3RoaXMuT2Q9Zjt0aGlzLnNjPWM7dGhpcy5hYj1lfHx7fTt0aGlzLkpyKCk7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLkZhKXRoaXMuSHIoKTtlbHNlIGlmKCJvYmplY3QiIT09dHlwZW9mIHRoaXMuRmEpdHJ5e3RoaXMuRmE9YigpLHRoaXMuZGQoKX1jYXRjaChnKXt0aGlzLmthKCJub0NsaWVudENvbmZpZyIpfX0sCm5iOmZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7dHJ5e2I9bmV3IEV2ZW50KGEpfWNhdGNoKGQpe2I9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksYi5pbml0RXZlbnQoImN1c3RvbSIsITAsITEpfXJldHVybiBifSxKcjpmdW5jdGlvbigpe3RoaXMuTGEobmV3IHkodGhpcy5yZCt0aGlzLmFlKCJnbG9iYWwiKSksdGhpcy56cS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7dGhpcy5kZigiZ2xvYmFsIik7Im9iamVjdCI9PXR5cGVvZiBfY2xpZW50Q29uZmlnJiZ0aGlzLmRkKCl9LmJpbmQodGhpcyksITApfSxIcjpmdW5jdGlvbigpe3RoaXMuTGEobmV3IHkodGhpcy5GYSt0aGlzLmFlKCJjbGllbnQiLC0xIT10aGlzLkZhLmluZGV4T2YoIj8iKSkpLHRoaXMuZGQuYmluZCh0aGlzKSxmdW5jdGlvbigpe3RoaXMuZGYoImNsaWVudCIpO3RoaXMua2EoImNsaWVudENvbmZpZ0NvdWxkTm90QmVMb2FkZWQiKX0uYmluZCh0aGlzKSwhMCl9LGFlOmZ1bmN0aW9uKGEsYil7dmFyIGQ7ZD0oYj8iJiI6CiI/IikrKCJjYWNoZT0iK3RoaXMuRWIoKSk7dGhpcy5hYiYmdGhpcy5hYi5ub0NsaWVudENvbmZpZ0NhY2hlQnVzdGVyJiYiY2xpZW50Ij09YSYmKGQ9IiIpO3RoaXMuYWImJnRoaXMuYWIubm9DYWNoZUJ1c3RlciYmKGQ9IiIpO3JldHVybiBkfSxrYTpmdW5jdGlvbihhKXtpZighdGhpcy5nZSl7dGhpcy5nZT0hMDt2YXIgYj1mdW5jdGlvbigpe2Zvcih2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSxiPTA7YjxhLmxlbmd0aDtiKyspe2lmKGFbYl0mJmFbYl0ucGF1c2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBhW2JdLnBhdXNlKXRyeXthW2JdLnBhdXNlKCl9Y2F0Y2goaCl7fWFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKX1hPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKTtmb3IoYj0wO2I8YS5sZW5ndGg7YisrKWFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTthPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInZpZGVvLXdyYXBwZXIiKTsKZm9yKGI9MDtiPGEubGVuZ3RoO2IrKylhW2JdJiZhW2JdLnBhcmVudE5vZGUmJmFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTthPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInZpZGVvcGxheWVyIik7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKylhW2JdJiZhW2JdLnBhcmVudE5vZGUmJmFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTtpZih3aW5kb3cuc2VsZiE9d2luZG93LnRvcClmb3IoYT13aW5kb3cuZG9jdW1lbnQ7YS5oYXNDaGlsZE5vZGVzKCk7KWEucmVtb3ZlQ2hpbGQoYS5sYXN0Q2hpbGQpfTsiNHBsYXllcnMuZGUiPT1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpJiYodGhpcy5zYz0hMSk7dGhpcy5zYyYmImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLnNjP3RoaXMuc2MoKTooYigpLHdpbmRvdy5zZXRJbnRlcnZhbChiLDUwMCkpO3RoaXMuWD10aGlzLlVnPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLkNmKSk7CnRoaXMuSWIoKTtlLndjKGsuUXMpOyhiPWUuU2IodGhpcy51ZCgpKSl8fChiPWUuU2IoZG9jdW1lbnQubG9jYXRpb24uaHJlZikpO2F8fChhPSJ1bmtvd24iKTtlLnRyYWNrKCJzdGF0c19oZF9wZW5hbHR5IixhLCEwKX19LHpxOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLlgpe3ZhciBiPXt9O3RyeXtiPUpTT04ucGFyc2UoYS5yZXNwb25zZVRleHQpfWNhdGNoKGQpe2IuZW5hYmxlZD0iZmFsc2UifXRoaXMuaXNFbmFibGVkPXRoaXMuZGMoYi5lbmFibGVkKTt0aGlzLlg9IXRoaXMuaXNFbmFibGVkO3RoaXMuaXNFbmFibGVkPyJvYmplY3QiIT10eXBlb2YgdGhpcy5GYXx8dGhpcy5aYnx8dGhpcy5KYXx8dGhpcy5kZCgpOih0aGlzLkthPXRoaXMuaXNFbmFibGVkPSExLHRoaXMuWD0hMCxkb2N1bWVudC5kaXNwYXRjaEV2ZW50KHRoaXMubmIodGhpcy5LYikpLHRoaXMuSWIoKSl9fSxkZDpmdW5jdGlvbihhKXt2YXIgYj0hMTthJiYoYj1hLnJlc3BvbnNlVGV4dCk7YT17fTtpZihiKXRyeXthPQpKU09OLnBhcnNlKGIpfWNhdGNoKGQpe2E9dGhpcy5GYX1lbHNlIGE9dGhpcy5GYTt0aGlzLmlzRW5hYmxlZD10aGlzLmRjKGEuZW5hYmxlZCk7dGhpcy5YPSF0aGlzLmlzRW5hYmxlZDt0aGlzLkNhPWEuc2VydmVyfHxbXTtmb3IoYj0wO2I8dGhpcy5DYS5sZW5ndGg7YisrKXRoaXMuQ2FbYl09dGhpcy5DYVtiXS5yZXBsYWNlKCJkYW1vaC53aWtpYS5jb20iLCJkYW1vaC53aWtpYS5jb20uc3Zvbm0tYWxpYXMuY29tIik7dGhpcy5aYj1hLmNvbmZpZ3x8IiI7dGhpcy5KYT1hLmFsaWFzfHxudWxsO3RoaXMuS2c9YS5hZHBhdGh8fCIiO3RoaXMubGU9YS5kaXNhYmxlY29va2lldGVzdHx8ITE7dGhpcy5CaD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqdGhpcy5DYS5sZW5ndGgpO3RoaXMuaXNFbmFibGVkJiZ0aGlzLlpiJiZ0aGlzLkphJiZ0aGlzLkNhLmxlbmd0aD90aGlzLkRjKCExKToodGhpcy5LYT10aGlzLmlzRW5hYmxlZD0hMSx0aGlzLlg9ITAsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh0aGlzLm5iKHRoaXMuS2IpKSwKdGhpcy5JYigpKX0sRGM6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWCl7dmFyIGI9e307aWYoYSl7dmFyIGI9bmV3IHkodGhpcy5EZCgpKSxkPXRoaXMubGEodGhpcy5aYik7Yi5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9InMzaG9tYWRnbG9iYWxjb25maWdzIjtiLmRhdGEuaG9tYWRfdXJsX3N1ZmZpeD1kLnBhdGguc3Vic3RyKDEpLnJlcGxhY2UoImhvbWFkLWdsb2JhbC1jb25maWdzLnNjaG5lZXZvbm1vcmdlbi5jb20vIiwiIik7Yi5tZXRob2Q9IlBPU1QifWVsc2UgYj1uZXcgeSh0aGlzLlpiK3RoaXMuYWUoImN1c3RvbWVyIikpO3RoaXMuTGEoYix0aGlzLmR1LmJpbmQodGhpcyksZnVuY3Rpb24oKXt0aGlzLmRmKCJjdXN0b21lciIpO2E/dGhpcy5MbD90aGlzLmthKCJub1NWTUNvbmZpZyIpOih0aGlzLkxsPSEwLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5EYyghMCl9LmJpbmQodGhpcyksMTAwKSk6dGhpcy5EYyghMCl9LmJpbmQodGhpcyksITApfX0sZHU6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWCl7YT0KYS5yZXNwb25zZVRleHQ7dmFyIGI9e307dHJ5e2I9SlNPTi5wYXJzZShhKX1jYXRjaChkKXtpZighdGhpcy5BYyYmdGhpcy5pc0VuYWJsZWQpe3RoaXMuQWM9ITA7dGhpcy5EYyghMCk7cmV0dXJufX10aGlzLk5kPXRoaXMuZGMoYi5zdHJpY3QpO3RoaXMudWY9dGhpcy5kYyhiLnN0cmljdF9jb25maWdfZW5hYmxlZCk7dGhpcy5wZz1iLmR1cmF0aW9uX2NoZWNrX3BlbmFsdHlfZGlzYWJsZWR8fCExO3RoaXMudmM9dGhpcy5kYyhiLmVuYWJsZVF1YXJ0aWxlVHJhY2tpbmcpO3RoaXMuaXNFbmFibGVkPXRoaXMuZGMoYi5lbmFibGVkKTt0aGlzLmFjPWIudGVzdGhpZGV8fCIiO3RoaXMuY2M9Yi50ZXN0YWR0YWdzanN8fGIudGVzdGFkdGFnc3x8W107dGhpcy5MZD1iLnRlc3RhZHRhZ3N4aHJ8fFtdO3RoaXMucWM9Yi5hZHRhZ3BhcmFtZXRlcnx8IiI7dGhpcy51Yj1iLmFkdGFnbW9kaWZpZXJ8fG51bGw7dGhpcy5wYz1iLmFkdGFnbW9kaWZpZXJfYWR2fHxudWxsO3RoaXMuZWU9Yi5hZHRhZ3JlZ2V4fHwKbnVsbDt0aGlzLmRoPWIuanNwb3B1cHN8fCExO3RoaXMuR2I9Yi5zaWRlbG9hZHN8fCExO3RoaXMuTmM9Yi52cGFpZHx8ITE7dGhpcy5hYi52cGFpZD10aGlzLk5jO3RoaXMuRmg9Yi5za2lwYWxsb3dlZHx8ITE7dGhpcy5hZD1iLmNhcHRpb25fZHVyYXRpb258fCExO3RoaXMuY2k9Yi52bWFwc3x8IiI7dGhpcy4kYz1iLmFsdGVybmF0ZV9jbGlja3Rocm91Z2h8fCExO3RoaXMuUGE9Yi5iaXRyYXRlfHwxRTM7dGhpcy5NZj1iLmFkX2ZhbGxiYWNrX1VSTHx8IiI7dGhpcy4kYj1iLnRlc3QzcmRwYXJ0eWNvb2tpZSYmYi50ZXN0M3JkcGFydHljb29raWUgaW5zdGFuY2VvZiBBcnJheT90aGlzLnBxKGIudGVzdDNyZHBhcnR5Y29va2llKTpiLnRlc3QzcmRwYXJ0eWNvb2tpZXx8IiI7dGhpcy5sZSYmKHRoaXMuJGI9bnVsbCk7dGhpcy5xZj1iLnRocm90dGxlfHwwO3RoaXMudmlkZW9wbGF6YT1iLnZpZGVvcGxhemF8fHt9OyF0aGlzLkFjJiZ0aGlzLmlzRW5hYmxlZD8odGhpcy5BYz0hMCx0aGlzLkRjKCEwKSk6CnRoaXMuaXNFbmFibGVkJiYhdGhpcy55dSgpJiYodGhpcy5hY3x8dGhpcy5jY3x8dGhpcy5iY3x8dGhpcy4kYnx8dGhpcy5MZCk/dGhpcy5aZT8odGhpcy5LYT10aGlzLlg9ITAsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh0aGlzLm5iKHRoaXMuS2IpKSx0aGlzLmllKCksdGhpcy5JYigpKTp0aGlzLmx1KCk6KHRoaXMuaXNFbmFibGVkPSExLHRoaXMubXUoKSl9fSxsdTpmdW5jdGlvbigpe3RoaXMua3UoKTt0aGlzLm51KCl9LG51OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4idmFyIGV2dCA9IHt9O2lmICh0eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7ZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KCciK2ErIicpO30gZWxzZSB7ZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7ZXZ0LmluaXRDdXN0b21FdmVudCgnIithKyInLCBmYWxzZSwgZmFsc2UsIHt9KTt9d2luZG93LnBhcmVudC5kb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2dCk7In0KdmFyIGI9ImlubGluZWV2YWxkYXRhIixkPTA7dHJ5e3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2Yud2lkdGg9MTtmLmhlaWdodD0xO2Yuc3R5bGUuZGlzcGxheT0ibm9uZSI7Zi5zcmM9ImFib3V0OmJsYW5rIjt2YXIgYz1lLmJhKDEwKSxnPWUuYmEoMTApLEg9ZS5iYSgxMCk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihjLGZ1bmN0aW9uKCl7ZCsrO2I9Yi5yZXBsYWNlKCJkYXRhIiwiIil9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGcsZnVuY3Rpb24oKXtkKys7Yj1iLnJlcGxhY2UoImV2YWwiLCIiKX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoSCxmdW5jdGlvbigpe2QrKztiPWIucmVwbGFjZSgiaW5saW5lIiwiIil9KTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYpO2YuY29udGVudFdpbmRvdy5kb2N1bWVudC53cml0ZShhdG9iKCJQR2gwYld3K1BHaGxZV1ErUEhOamNtbHdkQ0IwZVhCbFBTSjBaWGgwTDJwaGRtRnpZM0pwY0hRaVBnPT0iKSsKYShIKSthdG9iKCJQQzl6WTNKcGNIUStQSE5qY21sd2RDQjBlWEJsUFNKMFpYaDBMMnBoZG1GelkzSnBjSFFpUG1WMllXd29JZz09IikrYShnKSthdG9iKCJJaWs4TDNOamNtbHdkRDQ4YzJOeWFYQjBJSFI1Y0dVOUluUmxlSFF2YW1GMllYTmpjbWx3ZENJZ2MzSmpQU0prWVhSaE9uUmxlSFF2YW1GMllYTmpjbWx3ZER0aVlYTmxOalFzIikrZS52YihhKGMpKSthdG9iKCJJajQ4TDNOamNtbHdkRDQ4TDJobFlXUStQR0p2WkhrK1BDOWliMlI1UGp3dmFIUnRiRDQ9IikpfWNhdGNoKGspe313aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGYpfWNhdGNoKGEpe31pZigzIT1kKXt2YXIgYz1lLnVjKCk7aWYoKGMuaXNDaHJvbWV8fGMuaXNGaXJlZm94KSYmIWMuaXNFZGdlJiYhZS5UYSgpKXtpZih0aGlzLmFiJiZ0aGlzLmFiLnBsYXllciYmdGhpcy5hYi5wbGF5ZXIubGVuZ3RoKXtlLnRyYWNrKCJzdGF0c19oZF9jc3BfaGRwIixiLCEwKTsKcmV0dXJufXRoaXMua2EoImNzcF8iK2IpfWUudHJhY2soInN0YXRzX2hkX2NzcCIsYiwhMCl9fS5iaW5kKHRoaXMpLDFFMyl9LG11OmZ1bmN0aW9uKCl7dGhpcy5YPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLktiKSk7dGhpcy5JYigpfSxMYzpmdW5jdGlvbihhKXt0aGlzLlFjPSEwO3RoaXMuWHx8KHRoaXMuWD10aGlzLkthPSEwLGRvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYihhKSksdGhpcy5JYigpLHRoaXMuaWUoKSl9LGt1OmZ1bmN0aW9uKCl7aWYodGhpcy5hYyl7dmFyIGE9ZS51YygpO2lmKChhLmlzQ2hyb21lfHxhLmlzRmlyZWZveCkmJnRoaXMuYmgoKSl0aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZEhpZGUoKSBzdGV2ZSBpcyBhbGl2ZSIpO2Vsc2V7YT0hMTt0cnl7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yi5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLmFjKTtiLnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuYWMpOwpiLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJ3aWR0aDoxcHg7aGVpZ2h0OjFweDttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4O2JhY2tncm91bmQtY29sb3I6I2ZmMDAwMCIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYik7dmFyIGQ9MD09PWIub2Zmc2V0V2lkdGh8fDA9PT1iLm9mZnNldEhlaWdodDtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGIpO2E9ZH1jYXRjaChmKXt9YT90aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZEhpZGUoKSBhZCBlbGVtZW50IHdhcyBoaWRkZW4iKTp0aGlzLk5oKCl9fWVsc2UgdGhpcy5OaCgpfSxNaDpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXtmPWQuc2hpZnQoKS5yZXBsYWNlKCJbcmFuZG9tXSIsdGhpcy5FYigpKTt0aGlzLnF1KGYsMDxkLmxlbmd0aD9hLmJpbmQodGhpcyk6dGhpcy5tZi5iaW5kKHRoaXMpLGIuYmluZCh0aGlzKSl9ZnVuY3Rpb24gYigpe3RoaXMuTGModGhpcy5oYywibiBIb21hZFV0aWwudGVzdEFkQ2FsbCgpIGFkIGNhbGwgdG8gJyIrCmYrIicgd2FzIGJsb2NrZWQiKX1pZigodGhpcy5iYz10aGlzLkxkKSYmdGhpcy5iYy5sZW5ndGgpe3ZhciBkPXRoaXMuYmMuc2xpY2UoKSxmPSIiO2EuYmluZCh0aGlzKSgpfWVsc2UgdGhpcy5tZigpfSxxdTpmdW5jdGlvbihhLGIsZCl7ZnVuY3Rpb24gZigpe2MoKSYmYigpfWZ1bmN0aW9uIGMoKXtyZXR1cm4gZT8od2luZG93LmNsZWFyVGltZW91dChlKSwhMCk6ITF9dmFyIGU9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtmKCl9LDNFMyk7dGhpcy5MYShuZXcgeShhKSxmLGZ1bmN0aW9uKCl7YygpJiZkKCl9KX0sTmg6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7Zj1kLnNoaWZ0KCkucmVwbGFjZSgiW3JhbmRvbV0iLHRoaXMuRWIoKSk7dGhpcy5ydShmLDA8ZC5sZW5ndGg/YS5iaW5kKHRoaXMpOnRoaXMuTWguYmluZCh0aGlzKSxiLmJpbmQodGhpcykpfWZ1bmN0aW9uIGIoKXt0aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZENhbGxKUygpIGFkIGNhbGwgdG8gJyIrCmYrIicgd2FzIGJsb2NrZWQiKX1pZih0aGlzLmNjJiZ0aGlzLmNjLmxlbmd0aCl7dmFyIGQ9dGhpcy5jYy5zbGljZSgpLGY7YS5iaW5kKHRoaXMpKCl9ZWxzZSB0aGlzLk1oKCl9LHJ1OmZ1bmN0aW9uKGEsYixkKXtmdW5jdGlvbiBmKCl7ZSgpJiZiKCl9ZnVuY3Rpb24gYygpe2UoKSYmZCgpfWZ1bmN0aW9uIGUoKXtyZXR1cm4gZz8od2luZG93LmNsZWFyVGltZW91dChnKSwhMCk6ITF9dmFyIGc9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtmKCl9LDNFMyk7dHJ5e3dpbmRvdy5vbmVycm9yPWZ1bmN0aW9uKGIsZCl7ZD09YSYmZSgpJiZjKCl9O3ZhciBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoayk7ay5zZXRBdHRyaWJ1dGUoImFzeW5jIiwiYXN5bmMiKTtrLnNldEF0dHJpYnV0ZSgiZGVmZXIiLCJkZWZlciIpO2sub25sb2FkPWY7ay5vbmVycm9yPWM7ay5zcmM9YTtrLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwKYyl9Y2F0Y2gobCl7ZigpfX0sbWY6ZnVuY3Rpb24oKXt0aGlzLiRiPyh0aGlzLnBmKyssdGhpcy5MYShuZXcgeSh0aGlzLiRiKSx0aGlzLmp1LmJpbmQodGhpcyksZnVuY3Rpb24oKXt0aGlzLm5mKCJDQ0MiKX0uYmluZCh0aGlzKSkpOnRoaXMuS2goKX0sbmY6ZnVuY3Rpb24oYSl7dGhpcy5MYyh0aGlzLkRmLCJuIEhvbWFkVXRpbC50ZXN0M3JkUGFydHlDb29raWUoKSBjYW5ub3Qgc2V0IDNyZCBwYXJ0eSBjb29raWUgIithKX0sanU6ZnVuY3Rpb24oYSl7YT1hLnJlc3BvbnNlVGV4dDt2YXIgYj0hMTt0cnl7Yj1KU09OLnBhcnNlKGEpfWNhdGNoKGQpe31iJiZiLnN0YXR1cz8idHJpZ2dlci1zZXQiPT1iLnN0YXR1cz8zPnRoaXMucGY/dGhpcy5tZigpOnRoaXMubmYoIkJCQiIpOiJhbHJlYWR5LXNldCI9PWIuc3RhdHVzJiZ0aGlzLktoKCk6dGhpcy5uZigiQUFBIil9LEtoOmZ1bmN0aW9uKCl7dGhpcy5YPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLktiKSk7CnRoaXMuSWIoKTt0aGlzLmllKCl9LGJoOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PWFkZEV2ZW50TGlzdGVuZXIudG9TdHJpbmcoKS5pbmRleE9mKCJuYXRpdmUgY29kZSIpJiYtMT09YWRkRXZlbnRMaXN0ZW5lci50b1N0cmluZygpLmluZGV4T2YoImFkZEV2ZW50TGlzdGVuZXIiKX0sSWI6ZnVuY3Rpb24oKXt2YXIgYT0iMCIsYj0iMCI7dHJ5e2UuVGEoKSYmKGE9IjEiKX1jYXRjaChkKXthPTJ9dGhpcy5RYyYmKGI9IjEiKTtlLnRyYWNrKCJzdGF0c19oZF9tb2JpbGVfYWIiLGErIiIrYiwhMCk7IjEiPT09YiYmKGUuQmEoInQtb25saW5lLmRlIil8fGUuQmEoImdpZ2EuZGUiKXx8ZS5CYSgid2VsdC5kZSIpKSYmZS50cmFjaygic3RhdHNfaGRfYWJfaXNTdGV2ZSIsdGhpcy5iaCgpLCEwKTtkb2N1bWVudC5kaXNwYXRjaEV2ZW50KHRoaXMubmIodGhpcy5FZikpO3RoaXMuT2QmJiJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5PZCYmdGhpcy5PZCgpfSxybzpmdW5jdGlvbigpe2lmKHRoaXMudWYmJgp0aGlzLkRxKCkpe3ZhciBhPXRoaXMuZnEoKTthJiZhLmpvaW4mJmUudHJhY2soImNvbmZpZ19mYWlsZWQiLGEuam9pbigiXyIpLCEwKX19LFJoOmZ1bmN0aW9uKGEpe2F8fChhPSIiKTtpZigic3RyaW5nIiE9PXR5cGVvZiBhKXRyeXthPWEudG9TdHJpbmcoKX1jYXRjaChiKXthPSJjb3VsZF9ub3RfY29udmVydF90b19zdHJpbmcifWE9YS50cmltKCk7ZS50cmFjaygic3RhdHNfaGRfYWN0aXZhdGVkIixhLCEwKX0sTGE6ZnVuY3Rpb24oYSxiLGQsZixjLGcpe3RoaXMudGR8fCh0aGlzLnRkPTApO3RoaXMudGQrKzt0aGlzLnRkPnRoaXMuTGcmJiF0aGlzLk1nJiYodGhpcy5NZz0hMCxlLnRyYWNrKCJzdGF0c19oZF9yZXF1ZXN0Y291bnQiLHRoaXMuTGcsITApKTthPW5ldyBOYShhLGIsZCk7ZiYmKGEuZ2k9ITApO2MmJmUubXIoKSYmKGEueGc9ITApO2cmJihhLkpoPSEwKTtyZXR1cm4gYS5sb2FkKCl9LGVnOmZ1bmN0aW9uKCl7ZS5UYSgpfHxlLllhKCJodHRwOi8vZDM3OTk2NGF5bWV4MnguY2xvdWRmcm9udC5uZXQvY2hlY2sueG1sP2VtcHR5PXRydWUiLAoiaG9tYWRzdGF0aWN2YXN0Iix7aG9tYWRfaGFzaF9ndWVzc2VkOiJ0cnVlIn0sZnVuY3Rpb24oYSl7dmFyIGI9bnVsbCxkPW51bGwsZj0iIjt0cnl7KGI9YS5yZXNwb25zZVhNTCl8fChiPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEucmVzcG9uc2VUZXh0LCJ0ZXh0L3htbCIpKSxkPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkIilbMF19Y2F0Y2goYyl7dGhpcy5rYSgibWVkaWFmaWxlX25veG1sIik7cmV0dXJufWlmKGQpaWYoYT1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJNZWRpYUZpbGUiKSlpZihhWzBdJiYoYT1hWzBdKSxhKXtmPWEmJmEuY2hpbGROb2RlcyYmYS5jaGlsZE5vZGVzWzBdP2EuY2hpbGROb2Rlc1swXS5ub2RlVmFsdWU6IiI7dGhpcy5DYygpfHwoYT10aGlzLmxhKGYpLGY9YS5wcm90b2NvbCsiOi8vIithLmhvc3QpO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7ZS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXtlLm5ldHdvcmtTdGF0ZT09CmUuTkVUV09SS19OT19TT1VSQ0UmJnRoaXMua2EoIm1lZGlhZmlsZSIpfS5iaW5kKHRoaXMpKTtlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNvdXJjZSIpKTtlLnNldEF0dHJpYnV0ZSgic3JjIixmKX1lbHNlIHRoaXMua2EoIm1lZGlhZmlsZV9ub21lZGlhIik7ZWxzZSB0aGlzLmthKCJtZWRpYWZpbGVfbm9tZWRpYSIpO2Vsc2UgdGhpcy5rYSgibWVkaWFmaWxlX25vYWQiKX0uYmluZCh0aGlzKSxmdW5jdGlvbigpe3RoaXMua2EoIm1lZGlhZmlsZV94bWxyZXF1ZXN0Iil9LmJpbmQodGhpcyksdGhpcyl9LGl1OmZ1bmN0aW9uKCl7cmV0dXJuImFsbCI9PT10aGlzLmNpfSxxbzpmdW5jdGlvbigpe3RoaXMuemEoImh0dHA6Ly9kMzc5OTY0YXltZXgyeC5jbG91ZGZyb250Lm5ldC9jaGVjay54bWw/ZW1wdHk9dHJ1ZSIsITApO3ZhciBhPXRoaXMuemEoImh0dHA6Ly9kMzc5OTY0YXltZXgyeC5jbG91ZGZyb250Lm5ldC9jaGVjay54bWw/ZW1wdHk9dHJ1ZSIsITApOwphLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0iaG9tYWRzdGF0aWN2YXN0IjthLmRhdGEuaG9tYWRfaGFzaF9ndWVzc2VkPSJ0cnVlIjt0aGlzLkxhKGEsdGhpcy5UdS5iaW5kKHRoaXMpLHRoaXMuU3UuYmluZCh0aGlzKSl9LFR1OmZ1bmN0aW9uKGEpe3ZhciBiPW51bGwsZD1udWxsO3RyeXsoYj1hLnJlc3BvbnNlWE1MKXx8KGI9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYS5yZXNwb25zZVRleHQsInRleHQveG1sIikpLGQ9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWQiKVswXX1jYXRjaChmKXtyZXR1cm59ZHx8dGhpcy5BcCgpfSxTdTpmdW5jdGlvbigpe30sQXA6ZnVuY3Rpb24oKXtlLndjKGsuenApO2UudHJhY2soImZhaWwtaW5pdCIsIjEwMSIpO3RoaXMua2EoInZhc3RmaWxlTWFuaXB1bGF0aW9uIil9LGllOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0VuYWJsZWQmJnRoaXMuR2IubGVuZ3RoKWZvcih2YXIgYT0wO2E8dGhpcy5HYi5sZW5ndGg7YSsrKXt2YXIgYj0KdGhpcy5HYlthXTsicmVxdWVzdCI9PWIudHlwZSYmZS5ZYShiLnVybCxiLmFsaWFzLG51bGwsZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7fSx0aGlzKTtpZigiZXZhbCI9PWIudHlwZSl7dmFyIGQ9bmV3IEo7d2luZG93W2QuaWEoKV09dGhpcztlLllhKGIudXJsLGIuYWxpYXMsbnVsbCxmdW5jdGlvbihhKXtpZihhLnJlc3BvbnNlVGV4dCl0cnl7ZXZhbChhLnJlc3BvbnNlVGV4dCl9Y2F0Y2goYil7fX0sZnVuY3Rpb24oKXt9LHRoaXMpfX19LHl1OmZ1bmN0aW9uKCl7cmV0dXJuIDEwMCpNYXRoLnJhbmRvbSgpPHRoaXMucWZ9LHBxOmZ1bmN0aW9uKGEpe3JldHVybiBhW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSphLmxlbmd0aCldfSxFYjpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnBvdygxMCxhfHwxMCkqKC44OTk5OTk5OTkqTWF0aC5yYW5kb20oKSsuMSkpfSxiYTpmdW5jdGlvbihhKXthPWF8fDEwO2Zvcih2YXIgYj0iIixkPTA7ZDxhO2QrKyliKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCguNT4KTWF0aC5yYW5kb20oKT82NTo5NykrTWF0aC5mbG9vcigyNipNYXRoLnJhbmRvbSgpKSk7cmV0dXJuIGJ9LGRjOmZ1bmN0aW9uKGEpe3JldHVybiJUcnVlIj09YXx8InRydWUiPT1hfHwxPT1hfHwiMSI9PWF8fDE9PWF9LHZiOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iIixkLGYsYyxlLGcsayxsPTA7bDxhLmxlbmd0aDspZD1hLmNoYXJDb2RlQXQobCsrKSxmPWEuY2hhckNvZGVBdChsKyspLGM9YS5jaGFyQ29kZUF0KGwrKyksZT1kPj4yLGQ9KGQmMyk8PDR8Zj4+NCxnPShmJjE1KTw8MnxjPj42LGs9YyY2Myxpc05hTihmKT9nPWs9NjQ6aXNOYU4oYykmJihrPTY0KSxiPWIrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZSkrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZCkrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZykrCiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGspO3JldHVybiBifSxsYTpmdW5jdGlvbihhKXt2YXIgYj0ic291cmNlIHByb3RvY29sIGF1dGhvcml0eSB1c2VySW5mbyB1c2VyIHBhc3N3b3JkIGhvc3QgcG9ydCByZWxhdGl2ZSBwYXRoIGRpcmVjdG9yeSBmaWxlIHF1ZXJ5IGFuY2hvciIuc3BsaXQoIiAiKTthPS9eKD86KD8hW146QF0rOlteOkBcL10qQCkoW146XC8/Iy5dKyk6KT8oPzpcL1wvKT8oKD86KChbXjpAXSopKD86OihbXjpAXSopKT8pP0ApPyhbXjpcLz8jXSopKD86OihcZCopKT8pKCgoXC8oPzpbXj8jXSg/IVtePyNcL10qXC5bXj8jXC8uXSsoPzpbPyNdfCQpKSkqXC8/KT8oW14/I1wvXSopKSg/Olw/KFteI10qKSk/KD86IyguKikpPykvLmV4ZWMoYSk7Zm9yKHZhciBkPXt9LGY9MTQ7Zi0tOylkW2JbZl1dPWFbZl18fCIiO2QucXVlcnlLZXk9e307ZFtiWzEyXV0ucmVwbGFjZSgvKD86XnwmKShbXiY9XSopPT8oW14mXSopL2csCmZ1bmN0aW9uKGEsYixoKXtiJiYoZC5xdWVyeUtleVtiXT1oKX0pO3JldHVybiBkfSxFaDpmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEpe3ZhciBkPSIiLGgsYztmb3IoaD03OzA8PWg7aC0tKWM9YT4+PjQqaCYxNSxkKz1jLnRvU3RyaW5nKDE2KTtyZXR1cm4gZH1mdW5jdGlvbiBkKGEsYil7cmV0dXJuIGE8PGJ8YT4+PjMyLWJ9dmFyIGYsYyxlPUFycmF5KDgwKSxnPTE3MzI1ODQxOTMsaz00MDIzMjMzNDE3LGw9MjU2MjM4MzEwMixtPTI3MTczMzg3OCxyPTMyODUzNzc1MjAscCxxLHQsdSx2O3A9YS5sZW5ndGg7dmFyIHc9W107Zm9yKGY9MDtmPHAtMztmKz00KWM9YS5jaGFyQ29kZUF0KGYpPDwyNHxhLmNoYXJDb2RlQXQoZisxKTw8MTZ8YS5jaGFyQ29kZUF0KGYrMik8PDh8YS5jaGFyQ29kZUF0KGYrMyksdy5wdXNoKGMpO3N3aXRjaChwJTQpe2Nhc2UgMDpmPTIxNDc0ODM2NDg7YnJlYWs7Y2FzZSAxOmY9YS5jaGFyQ29kZUF0KHAtMSk8PDI0fDgzODg2MDg7YnJlYWs7Y2FzZSAyOmY9CmEuY2hhckNvZGVBdChwLTIpPDwyNHxhLmNoYXJDb2RlQXQocC0xKTw8MTZ8MzI3Njg7YnJlYWs7Y2FzZSAzOmY9YS5jaGFyQ29kZUF0KHAtMyk8PDI0fGEuY2hhckNvZGVBdChwLTIpPDwxNnxhLmNoYXJDb2RlQXQocC0xKTw8OHwxMjh9Zm9yKHcucHVzaChmKTsxNCE9dy5sZW5ndGglMTY7KXcucHVzaCgwKTt3LnB1c2gocD4+PjI5KTt3LnB1c2gocDw8MyY0Mjk0OTY3Mjk1KTtmb3IoYT0wO2E8dy5sZW5ndGg7YSs9MTYpe2ZvcihmPTA7MTY+ZjtmKyspZVtmXT13W2ErZl07Zm9yKGY9MTY7Nzk+PWY7ZisrKWVbZl09ZChlW2YtM11eZVtmLThdXmVbZi0xNF1eZVtmLTE2XSwxKTtjPWc7cD1rO3E9bDt0PW07dT1yO2ZvcihmPTA7MTk+PWY7ZisrKXY9ZChjLDUpKyhwJnF8fnAmdCkrdStlW2ZdKzE1MTg1MDAyNDkmNDI5NDk2NzI5NSx1PXQsdD1xLHE9ZChwLDMwKSxwPWMsYz12O2ZvcihmPTIwOzM5Pj1mO2YrKyl2PWQoYyw1KSsocF5xXnQpK3UrZVtmXSsxODU5Nzc1MzkzJjQyOTQ5NjcyOTUsCnU9dCx0PXEscT1kKHAsMzApLHA9YyxjPXY7Zm9yKGY9NDA7NTk+PWY7ZisrKXY9ZChjLDUpKyhwJnF8cCZ0fHEmdCkrdStlW2ZdKzI0MDA5NTk3MDgmNDI5NDk2NzI5NSx1PXQsdD1xLHE9ZChwLDMwKSxwPWMsYz12O2ZvcihmPTYwOzc5Pj1mO2YrKyl2PWQoYyw1KSsocF5xXnQpK3UrZVtmXSszMzk1NDY5NzgyJjQyOTQ5NjcyOTUsdT10LHQ9cSxxPWQocCwzMCkscD1jLGM9djtnPWcrYyY0Mjk0OTY3Mjk1O2s9aytwJjQyOTQ5NjcyOTU7bD1sK3EmNDI5NDk2NzI5NTttPW0rdCY0Mjk0OTY3Mjk1O3I9cit1JjQyOTQ5NjcyOTV9cmV0dXJuKGIoZykrYihrKStiKGwpK2IobSkrYihyKSkudG9Mb3dlckNhc2UoKX19fSkoYyk7dmFyIE9hPWMuZGt8fE9hLGw9bmV3IE9hO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLlB0PXRoaXMuYVs5XTt0aGlzLk5rPXRoaXMuYVszXTt0aGlzLmZ1PQp0aGlzLmFbM107dGhpcy5qPXRoaXMuYVs1XX1jLmxuPWI7Yi5wcm90b3R5cGU9e090OmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5QdDp0aGlzLk1rKGEpfSxNazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTms6dGhpcy5ldShhKX0sZXU6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5mdTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmo6YX19fSkoYyk7dmFyIFBhPWMubG58fFBhLHZjPW5ldyBQYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXZjLk90KDQpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoYSxiLGQpe3RoaXMuYj1hO2EuZi5PP3RoaXMuWmE9YS5mLk8oKTp0aGlzLlphPSIiO2EuZi5TZyYmYS5mLlNnKHtwYXVzZTp0aGlzLnpkLmJpbmQodGhpcykscmVzdW1lOnRoaXMuemguYmluZCh0aGlzKSwKbXV0ZTp0aGlzLk5lLmJpbmQodGhpcyksdW5tdXRlOnRoaXMuTHUuYmluZCh0aGlzKX0pO3RoaXMuY29udGFpbmVyPXRoaXMuYi5oYjt0aGlzLnBsYXllcj10aGlzLmIuZjt0aGlzLlBiPXRoaXMuWmM9ITE7dGhpcy5Mbj0xRTM7dGhpcy5lYT1udWxsO3RoaXMuTD1iO3RoaXMueWE9e307dGhpcy52aWRlbz17fTt0aGlzLkpkPXt9O2UubGIoIm5ld0JpZ0FkSWQiKTt0aGlzLmJvPWUuYmEoMTApO3RoaXMuamY9MDt0aGlzLlhjPSJXZXJidW5nIC0gW3RpbWVdIjtkJiZkLmFkbWVzc2FnZSYmKHRoaXMuWGM9ZC5hZG1lc3NhZ2UsImZ1bmN0aW9uIj09dHlwZW9mIGQuYWRtZXNzYWdlJiYoKGE9dGhpcy5iLmYpJiZ0aGlzLmIuZi51JiYoYT10aGlzLmIuZi51KCkpLHRoaXMuWGM9ZC5hZG1lc3NhZ2UoYSkpKTtkJiYidHJ1ZSI9PVN0cmluZyhkLmFkanVzdEFkVm9sdW1lVG9Db250ZW50UGxheWVyKSYmKHRoaXMua249ZC5hZGp1c3RBZFZvbHVtZVRvQ29udGVudFBsYXllcik7dGhpcy5RZT10aGlzLklkPQohMTt0aGlzLmdoPWQmJmQubWF4V3JhcHBlckRlcHRoP3BhcnNlSW50KGQubWF4V3JhcHBlckRlcHRoKToxNTt0aGlzLmM9e307dGhpcy5WYz0hMTt0aGlzLlVoPS0xO3RoaXMuY29udHJvbHM9dGhpcy5jYXB0aW9uPXRoaXMuVWI9ITE7dGhpcy5Rbz1lLmJhKDEwKTt0aGlzLkRiPWUuYmEoMTApO3RoaXMuQmI9ZS5iYSgxMCk7dGhpcy5HaD1lLmJhKDEwKTt0aGlzLmNvbmY9e307dGhpcy50Yz10aGlzLkNiPSExO3RoaXMub2U9bnVsbDt0aGlzLlJkPXRoaXMuSmI9dGhpcy56ZT10aGlzLlZlPXRoaXMua2U9dGhpcy5qZD10aGlzLmxmPXRoaXMucGI9dGhpcy5nYz10aGlzLm9oPXRoaXMueGM9dGhpcy56dT10aGlzLnNiPSExO3RoaXMubGM9W107dGhpcy5lYz17fTt0aGlzLnJmPSExO3RoaXMuV2I9e307dGhpcy5Hcz0yMDA7dGhpcy5BZj10aGlzLmZpPXRoaXMuZmU9dGhpcy5ZZT0hMX1jLllqPWI7Yi5wcm90b3R5cGU9e3p0OmZ1bmN0aW9uKGEpe3RoaXMuY29uZj1hfSxIYTpmdW5jdGlvbihhKXt2YXIgYj0KdGhpcy5jb25mW2FdO3RoaXMuY29uZlt0aGlzLlphXSYmdGhpcy5jb25mW3RoaXMuWmFdW2FdJiYoYj10aGlzLmNvbmZbdGhpcy5aYV1bYV0pO3JldHVybiBifSxTaDpmdW5jdGlvbigpeyJwcmVyb2xsIj09ZS5TYSYmZS50cmFjaygic3RhdHNfaGRfYWN0aXZlIiwiIiwhMCk7dGhpcy5MLlFjP2UudHJhY2soImFkY2FsbCIsIjEiKTplLnRyYWNrKCJhZGNhbGwiLCIwIik7ZS50cmFjaygic3RhdHNfaGRfYWRfY2FsbCIsIiIsITApO2UudihrLmJuLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LEllOmZ1bmN0aW9uKGEsYixkLGMpe3RoaXMuc2I9ZDt2YXIgbj0hMTtjJiZjLmhvbWFkX3JlcGxhY2VfdXJsc19pbl90YWdzJiYobj0hMCk7aWYodGhpcy5MLlgpdGhpcy5qZisrLGUubGIoIm5ld1NtYWxsQWRJZCIpLHRoaXMuTC5ybygpLGM9bC5nZXRDb25maWcoKSx0aGlzLkwuS2EmJnRoaXMuTC5pc0VuYWJsZWQ/KHRoaXMuU2goKSxuZXcgVCh0aGlzLGEsdGhpcy5naCwKe2ZpcnN0Q2FsbDohMCx1c2VBZFRhZ1BhcmFtZXRlcjohMCxrZWVwVVJMOmIsYml0cmF0ZTpjLlBhLGVtcHR5OiJyZXNwb25zZS5lbXB0eSI9PWEsdnBhaWQ6dGhpcy5MLk5jLGhvbWFkX3JlcGxhY2VfdXJsc19pbl90YWdzOm4sY29udGVudFZpZGVvOntkdXJhdGlvbjp0aGlzLmIuZi5nZXREdXJhdGlvbigpLGN1cnJlbnRUaW1lOnRoaXMuYi5mLmdldEN1cnJlbnRUaW1lKCl9fSkpOmI/KHRoaXMuU2goKSxuZXcgVCh0aGlzLGEsdGhpcy5naCx7Zmlyc3RDYWxsOiEwLHZwYWlkOnRoaXMuTC5OYyx1c2VBZFRhZ1BhcmFtZXRlcjohMCxiaXRyYXRlOmMuUGEsa2VlcFVSTDohMCxob21hZF9yZXBsYWNlX3VybHNfaW5fdGFnczpuLGNvbnRlbnRWaWRlbzp7ZHVyYXRpb246dGhpcy5iLmYuZ2V0RHVyYXRpb24oKSxjdXJyZW50VGltZTp0aGlzLmIuZi5nZXRDdXJyZW50VGltZSgpfX0pKTp0aGlzLlFhKCk7ZWxzZXt2YXIgZz10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtnLkllKGEsYixkKX0sCjUwKX19LFRlOmZ1bmN0aW9uKGEpe2EuV2EmJmUudHJhY2soInN0YXRzX2hkX3dyYXBwZXJzYyIsImFkIiwhMCk7InNwaWVnZWwuZGUiIT1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpfHx0aGlzLlFlfHwic3ZtcHJldmlldyIhPWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZikuYW5jaG9yPyh0aGlzLlJkPXRoaXMuSmI9dGhpcy54Yz0hMSx0aGlzLmM9YSx0aGlzLkx0KHRoaXMuYyksdGhpcy5IZyhhKSx0aGlzLmxjPXRoaXMuemcoYSksdGhpcy5lYz17fSx0aGlzLnJmPSExLHRoaXMuSG8oKSk6dGhpcy5oZCgpfSxIZzpmdW5jdGlvbihhKXthJiYoYS5vcmlnaW4mJihhPWEub3JpZ2luKSxhLnBhcmVudCYmYS5wYXJlbnQgaW5zdGFuY2VvZiBiJiYodGhpcy5KZD10aGlzLnNxKGEpKSx0aGlzLkhnKGEucGFyZW50KSl9LHpnOmZ1bmN0aW9uKGEpe3ZhciBjPVtdO2EmJihhLm9yaWdpbiYmKGE9YS5vcmlnaW4pLCFhfHwhYS5wYXJlbnR8fGEucGFyZW50IGluc3RhbmNlb2YgYnx8KGM9CnRoaXMuemcoYS5wYXJlbnQpKSxjLnB1c2godGhpcy4kcChhKSkpO3JldHVybiBjfSwkcDpmdW5jdGlvbihhKXt2YXIgYj0iIixkPVtdO2lmKGEmJmEuVSYmYS5VLmdldEF0dHJpYnV0ZSl7Yj1hLlUuZ2V0QXR0cmlidXRlKCJpZCIpO2E9YS5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJDcmVhdGl2ZSIpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWQucHVzaChhW2NdLmdldEF0dHJpYnV0ZSgiaWQiKSk7MT09ZC5sZW5ndGgmJihkPWRbMF0pfXJldHVybnthZElEOmIsY3JlYXRpdmVJRDpkfX0sc3E6ZnVuY3Rpb24oYSl7dmFyIGI9W10sZD1bXSxjPVtdLGU9W10sZz0iIjtpZihhLlUpe2I9YS5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJbXByZXNzaW9uIik7Yz1hLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkNyZWF0aXZlIik7YS5VLmdldEF0dHJpYnV0ZSgiaWQiKSYmKGc9YS5VLmdldEF0dHJpYnV0ZSgiaWQiKSxlLnB1c2goZykpO2EuVS5nZXRBdHRyaWJ1dGUoImFkSUQiKSYmKGc9CmEuVS5nZXRBdHRyaWJ1dGUoImFkSUQiKSxlLnB1c2goZykpO2Zvcih2YXIgaz0wO2s8Yy5sZW5ndGg7aysrKWNba10uZ2V0QXR0cmlidXRlKCJpZCIpJiYoZz1jW2tdLmdldEF0dHJpYnV0ZSgiaWQiKSxlLnB1c2goZykpLGNba10uZ2V0QXR0cmlidXRlKCJhZElEIikmJihnPWNba10uZ2V0QXR0cmlidXRlKCJhZElEIiksZS5wdXNoKGcpKTtmb3Ioaz0wO2s8Yi5sZW5ndGg7aysrKWQucHVzaChhLmliKGJba10pKX1yZXR1cm57aW1wcmVzc2lvbnM6ZCxhZElkczplLGFkSWQ6Z319LG9hOmZ1bmN0aW9uKGEpe2EuV2EmJmUudHJhY2soInN0YXRzX2hkX3dyYXBwZXJzYyIsIm5vYWQiLCEwKTt2YXIgYj0wLGQ9InN0YXRzX2hkX2FkX2Vycm9yIjthJiYoYS5lcnJvciYmYS5lcnJvci5kZXRhaWwmJmEuZXJyb3IuZGV0YWlsLmNvZGUmJihiPWEuZXJyb3IuZGV0YWlsLmNvZGUpLGEubWQmJmEubWQuZXJyb3ImJmEubWQuZXJyb3IuY29kZSYmKGI9YS5tZC5lcnJvci5jb2RlKSk7c3dpdGNoKGEuZXJyb3IuY29kZSl7Y2FzZSB3Lk9jLmNvZGU6Yj09CkYuVWQuY29kZT9lLnYoay5udix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpOihlLkplKCksYj09Ri5IZi5jb2RlJiZlLnYoay5jcyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKTtlLnYoay55cCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2VtcHR5IjticmVhaztjYXNlIHcuRmYuY29kZTplLnYoay5VdSx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2Vycm9yX3Zhc3Rsb2FkZmFpbGVkIjticmVhaztjYXNlIHcuSWYuY29kZTplLnRyYWNrKCJ3cmFwcGVybGltaXQiLCIxMDYiKTtlLnYoay51dix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2Vycm9yX3dyYXBwZXJsaW1pdCI7YnJlYWs7Y2FzZSB3LlZkLmNvZGU6ZS52KGsueHYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLAp0aGlzLkIoKSx0aGlzLkMoKSk7ZD0ic3RhdHNfaGRfYWRfZXJyb3JfeG1scGFyc2UiO2JyZWFrO2Nhc2Ugdy5UZC5jb2RlOmUudihrLmRzLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSksZS50cmFjaygibm9tZWRpYSIsIjEwMiIpLGQ9InN0YXRzX2hkX2FkX2Vycm9yX25vbWVkaWEiLHRoaXMudGN8fChlLnRyYWNrKCJub21lZGlhX25vZmxhc2giLCIxMDUiKSxkPSJzdGF0c19oZF9hZF9lcnJvcl9ub21lZGlhbm9mbGFzaCIpfSJzdGF0c19oZF9hZF9lcnJvciI9PWQmJmEuZXJyb3ImJmEuZXJyb3IueGEmJihkKz0iXyIrYS5lcnJvci54YSk7ZS50cmFjayhkLCIiLCEwKTt0aGlzLlFiKGEpO3RoaXMuUWEoKX0sUWI6ZnVuY3Rpb24oYSl7dmFyIGI9OTAwO2EmJmEuZXJyb3ImJmEuZXJyb3IuY29kZSYmKGI9YS5lcnJvci5jb2RlLDkwMTxiJiYoYj05MDApKTtmb3IoYj17IltFUlJPUkNPREVdIjpifTthLk9hLmxlbmd0aDspdHJ5e3ZhciBkPWEuT2EucG9wKCk7CnRoaXMuSGUoZC51cmwsZC50eXBlLGIpfWNhdGNoKGMpe319LEx0OmZ1bmN0aW9uKGEpe3RoaXMua2U9dGhpcy56ZT10aGlzLlZlPSExO3RoaXMueWE9dGhpcy5iLkc7dmFyIGI9OTk5OTt0aGlzLmNvbmYuekluZGV4JiYoYj10aGlzLmNvbmYuekluZGV4LTEpO3RoaXMueWEuekluZGV4PWI7Yj10aGlzLmIuRjt0cnl7dmFyIGQ9dGhpcy5iLmYuZ2V0UmF3UGxheWVyKCk7aWYoZCYmZC5lbnZ2YXJzKXRyeXtiPWQuZW52dmFycygpLnZpZGVvU2xvdCx0aGlzLlllPSEwfWNhdGNoKGMpe319Y2F0Y2goZSl7fWIub3c9ImF1dG8iO3RoaXMuY29uZlsidmlkZW8uc3R5bGUucG9zaXRpb24iXSYmKGIuc3R5bGUucG9zaXRpb249dGhpcy5jb25mWyJ2aWRlby5zdHlsZS5wb3NpdGlvbiJdKTt0aGlzLmNvbmZbInZpZGVvLnN0eWxlIl0mJihiLnN0eWxlPXRoaXMuY29uZlsidmlkZW8uc3R5bGUiXSk7aWYodGhpcy5jb25mWyJ2aWRlby5hdHRyaWJ1dGVzIl0pZm9yKHZhciBnIGluIHRoaXMuY29uZlsidmlkZW8uYXR0cmlidXRlcyJdKXRoaXMuY29uZlsidmlkZW8uYXR0cmlidXRlcyJdLmhhc093blByb3BlcnR5KGcpJiYKYi5zZXRBdHRyaWJ1dGUoZyx0aGlzLmNvbmZbInZpZGVvLmF0dHJpYnV0ZXMiXVtnXSk7dGhpcy5rbiYmdGhpcy5wbGF5ZXIucWUoKSYmKGIudm9sdW1lPXRoaXMucGxheWVyLnFlKCkvMTAwKTtmb3IoO2IuZmlyc3RDaGlsZDspYi5yZW1vdmVDaGlsZChiLmZpcnN0Q2hpbGQpO2ZvcihkPTA7ZDxhLk0ubGVuZ3RoO2QrKyliLmNhblBsYXlUeXBlKGEuTVtkXS50eXBlKSYmdGhpcy5lbihiLGEuTVtkXS51cmwrIiIsYS5NW2RdLnR5cGUpO3RoaXMuWWUmJmIubG9hZCgpO2lmKHRoaXMuT2goYikpe3RoaXMuaG4oYik7YT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdP2Euc3R5bGU9dGhpcy5jb25mWyJpbm5lcldhcnBwZXIuc3R5bGUiXTooYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUud2lkdGg9IjEwMCUiLGEuc3R5bGUuaGVpZ2h0PSIxMDAlIik7dGhpcy5lYT10aGlzLnlhLmFwcGVuZENoaWxkKGEpO3RyeXt0aGlzLlllPwp0aGlzLnZpZGVvPWI6dGhpcy52aWRlbz10aGlzLmVhLmFwcGVuZENoaWxkKGIpfWNhdGNoKGspe3RoaXMudmlkZW89Yn19ZWxzZSB0aGlzLmMuTW8oKT8oYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdP2Euc3R5bGU9dGhpcy5jb25mWyJpbm5lcldhcnBwZXIuc3R5bGUiXTphLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGhpcy5lYT10aGlzLnlhLmFwcGVuZENoaWxkKGEpLHRoaXMudmlkZW89dGhpcy5lYS5hcHBlbmRDaGlsZChiKSx0aGlzLkp0KCkpOnRoaXMuRGUoKT90aGlzLkRoKCk6dGhpcy5jLm9yaWdpbi5xZyh3LlRkKX0sSnQ6ZnVuY3Rpb24oKXt0aGlzLnBiPXRoaXMuZ2M9ITE7dGhpcy5iLmYudmEmJnRoaXMuYi5mLnZhKCkmJihlLnYoay5qZyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMucGI9ITApO2UuamUoKTt0aGlzLmMmJnRoaXMuYy5vcmlnaW4mJnRoaXMuYy5vcmlnaW4uc2EmJgplLmpuKHRoaXMuYy5vcmlnaW4uc2EpO2UuZWIoInNldFVwVnBhaWQiKTt2YXIgYT10aGlzLmIuRjt0aGlzLmIuRj1DLnBvcCgpO2EucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcy5iLkYsYSk7dGhpcy5iLnBoKCk7dGhpcy5iLkpjKCk7Zm9yKGE9dGhpcy5iLkc7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7YS5wYXJlbnR8fHRoaXMuYi5KYygpO3RoaXMuZWE9dGhpcy55YT10aGlzLmIuRzt0aGlzLndmKCJ2cGFpZCIpO2lmKHRoaXMucGIpe2lmKGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYikpYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbjt0aGlzLnRyYWNrKCJtdXRlIiwhMCk7ZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJjb250ZW50IiwhMCk7ZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKX10aGlzLkg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7dGhpcy5ILnNldEF0dHJpYnV0ZSgid2lkdGgiLAoiMTAwJSIpO3RoaXMuSC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjEwMCUiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJzY3JvbGxpbmciLCJubyIpO3RoaXMuSC5zZXRBdHRyaWJ1dGUoImFsbG93IiwiYXV0b3BsYXkiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJkZWxlZ2F0ZXN0aWNreXVzZXJhY3RpdmF0aW9uIiwibWVkaWEiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJzdHlsZSIsImJvcmRlcjogMCBub25lO291dGxpbmU6IG5vbmU7Iik7dGhpcy5iLkcuYXBwZW5kQ2hpbGQodGhpcy5IKTt0aGlzLkgub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGE9ITE7dGhpcy5iLmYudmEmJnRoaXMuYi5mLnZhKCkmJihhPSEwKTt2YXIgYj10aGlzLmMudXEoKSxjPXRoaXMuYy5BLk9yaWdpbmFsQWRQYXJhbWV0ZXJzLGc9e2hvbWFkOkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobC5nZXRDb25maWcoKSkpLHZwYWlkOnt1cmw6Yi51cmwsdmlld21vZGU6Im5vcm1hbCIsZGVzaXJlZEJpdHJhdGU6Yi5kZXNpcmVkQml0cmF0ZXx8CmIuYml0cmF0ZXx8NDAwLGFkUGFyYW1ldGVyczpjLGNyZWF0aXZlRGF0YTp7QWRQYXJhbWV0ZXJzOmN9LGNvbnRlbnRwbGF5ZXI6e3dpZHRoOnBhcnNlSW50KHRoaXMuYi5HLnN0eWxlLndpZHRoKSxoZWlnaHQ6cGFyc2VJbnQodGhpcy5iLkcuc3R5bGUuaGVpZ2h0KX19LGNvbnRlbnRQbGF5ZXI6e211dGVkOmF9fTtlLm1hKHRoaXMuSCwiY29uZmlnIixnKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDEwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwiY29uZmlnIixnKX0uYmluZCh0aGlzKSwyMDApO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksNTAwKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDcwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwKImNvbmZpZyIsZyl9LmJpbmQodGhpcyksMUUzKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDEyMDApO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksMTUwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwiY29uZmlnIixnKX0uYmluZCh0aGlzKSwyRTMpO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksNUUzKX0uYmluZCh0aGlzKTthPWUuJGYoImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9ob21hZC1nbG9iYWwtY29uZmlncy5zY2huZWV2b25tb3JnZW4uY29tL2lmcmFtZS5odG1sIix0aGlzLkwpO3RoaXMuSC5zcmM9YTtlLmJlKCJ2cGFpZGV2ZW50IixmdW5jdGlvbihhKXsiQWRTaXplQ2hhbmdlIiE9YS5kYXRhLm5hbWUmJiJBZFJlbWFpbmluZ1RpbWVDaGFuZ2UiIT0KWyJkYXRhIl0ubmFtZSYmdGhpcy5iLlRiKCEwKTtpZihhJiZhLmRhdGEmJmEuZGF0YS5uYW1lKXt0aGlzLmxjPWEuZGF0YS5vcmlnaW5hbGV2ZW50LmFkSURzOyJBZEVycm9yIj09YS5kYXRhLm5hbWUmJnRoaXMuYnYoYSk7aWYoIkFkSW1wcmVzc2lvbiI9PWEuZGF0YS5uYW1lJiYodGhpcy5jdigpLHRoaXMuYi5UYighMCksIXRoaXMuSmIpKXt2YXIgYj0yRTMsYz01MDt0aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uJiYodGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi5wZXJjZW50JiYoYz10aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnBlcmNlbnQpLHRoaXMuY29uZi52aWV3YWJsZUltcHJlc3Npb24udGltZU1TJiYoYj10aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnRpbWVNUykpO3RoaXMuSmI9e2VsOnRoaXMuSCxjYjpmdW5jdGlvbigpe3RoaXMuUmQ9ITA7ZS52KGsuYmksdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt0aGlzLnRyYWNrKCJ2aWV3YWJsZSIpfS5iaW5kKHRoaXMpLAp0aW1lTVM6YixwZXJjZW50OmMsc3RhcnRUaW1lOiExfTtlLkNlKHRoaXMuSmIpfSJBZFN0YXJ0ZWQiPT1hLmRhdGEubmFtZSYmKHRoaXMuYi5UYighMCksdGhpcy5ndigpKTsiQWRWaWRlb1N0YXJ0Ij09YS5kYXRhLm5hbWUmJih0aGlzLmIuVGIoITApLHRoaXMua3YoKSk7IkFkVmlkZW9GaXJzdFF1YXJ0aWxlIj09YS5kYXRhLm5hbWUmJnRoaXMuaXYoKTsiQWRWaWRlb01pZHBvaW50Ij09YS5kYXRhLm5hbWUmJnRoaXMuanYoKTsiQWRWaWRlb1RoaXJkUXVhcnRpbGUiPT1hLmRhdGEubmFtZSYmdGhpcy5sdigpOyJBZFZpZGVvQ29tcGxldGUiPT1hLmRhdGEubmFtZSYmdGhpcy5odigpOyJBZFN0b3BwZWQiPT1hLmRhdGEubmFtZSYmdGhpcy5kaSgpO2lmKCJBZENsaWNrVGhydSI9PWEuZGF0YS5uYW1lKXt2YXIgZz1hLmRhdGEuY2xpY2tUaHJ1VGFyZ2V0O2d8fChnPXRoaXMuYy5PYik7aWYoIWcpcmV0dXJuO3RoaXMudHJhY2soImNsaWNrdHJhY2tpbmciKTtlLnYoay5pZyx0aGlzLmMuQSwKdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPSJfdG9wIjt0cnl7dGhpcy5MLiRjJiYoYT0iX2JsYW5rIik7dmFyIGI9d2luZG93Lm9wZW4oIiIsYSk7Yi5kb2N1bWVudC5ib2R5LmlubmVySFRNTD0iPGRpdj48L2Rpdj4iO2IuZG9jdW1lbnQubG9jYXRpb24uaHJlZj1nfWNhdGNoKGQpe3dpbmRvdy5vcGVuKGcsYSl9fS5iaW5kKHRoaXMpLDUwMCl9IkFkU2tpcHBlZCI9PWEuZGF0YS5uYW1lJiZ0aGlzLmZ2KCk7IkFkUmVtYWluaW5nVGltZUNoYW5nZSI9PWEuZGF0YS5uYW1lJiZlLnYoay4kZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpOyJBZFBhdXNlZCI9PWEuZGF0YS5uYW1lJiZ0aGlzLmR2KCk7IkFkUGxheWluZyI9PWEuZGF0YS5uYW1lJiYodGhpcy5maSYmKHRoaXMuQWY9ITEsdGhpcy5ZYigpKSx0aGlzLmV2KCkpOyJBZFZvbHVtZUNoYW5nZSI9PWEuZGF0YS5uYW1lJiYoYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkJiKSwKMD09YS5kYXRhLm9yaWdpbmFsZXZlbnQudm9sdW1lPyh0aGlzLnBiPSEwLGImJihiLmlubmVySFRNTD10aGlzLmNvbmYudW5tdXRlQnV0dG9uKSx0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJ1c2VyIiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSk6KHRoaXMucGI9ITEsYiYmKGIuaW5uZXJIVE1MPXRoaXMuY29uZi5tdXRlQnV0dG9uKSx0aGlzLnRyYWNrKCJ1bm11dGUiLCEwKSxlLnRyYWNrKCJzdGF0c19oZF91bm11dGVkIiwidXNlciIsITApLGUudihrLnRmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpLGUudihrLiRkLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpfX0uYmluZCh0aGlzKSk7ZS5iZSgidnBhaWRjb250aW51ZWNvbnRlbnQiLGZ1bmN0aW9uKCl7dGhpcy5RYSgpfS5iaW5kKHRoaXMpKTtlLmJlKCJ2cGFpZGVycm9zIixmdW5jdGlvbigpe3RoaXMuUWEoKX0uYmluZCh0aGlzKSk7CnRoaXMuYi5ZZihmdW5jdGlvbihhKXtlLm1hKHRoaXMuSCwicmVzaXplIixhKX0uYmluZCh0aGlzKSl9LGR2OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy50cmFjaygicGF1c2UiKTtlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2EmJihhLmlubmVySFRNTD10aGlzLmNvbmYucGxheUJ1dHRvbik7dGhpcy5nYz0hMH0sZXY6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRiKTthJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uKTt0aGlzLnRyYWNrKCJyZXN1bWUiLCEwKTtlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuZ2M9ITF9LGd2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygiY3JlYXRpdmVWaWV3Iik7ZS52KGsuVWYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKX0sCmZ2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygic2tpcCIpO2UudihrLlRmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LGN2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygiaW1wcmVzc2lvbiIpO2UuZWIoImltcHJlc3Npb24iKTtlLnYoay5QZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxrdjpmdW5jdGlvbigpe3RoaXMudHJhY2soInN0YXJ0Iik7ZS5lYigic3RhcnQiKTtlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxpdjpmdW5jdGlvbigpe3RoaXMudHJhY2soImZpcnN0UXVhcnRpbGUiKTt0aGlzLnhjPSEwO2UuZWIoImZpcnN0UXVhcnRpbGUiKTtlLnYoay5OZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxqdjpmdW5jdGlvbigpe3RoaXMudHJhY2soIm1pZHBvaW50Iik7ZS5lYigibWlkcG9pbnQiKTtlLnYoay5SZix0aGlzLmMuQSx0aGlzLmIuZi51KCksCnRoaXMuQigpLHRoaXMuQygpKX0sbHY6ZnVuY3Rpb24oKXt0aGlzLnRyYWNrKCJ0aGlyZFF1YXJ0aWxlIik7ZS5lYigidGhpcmRRdWFydGlsZSIpO2UudihrLlZmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LGh2OmZ1bmN0aW9uKCl7dGhpcy5QZCgpO2UuZWIoImNvbXBsZXRlIil9LGRpOmZ1bmN0aW9uKGEpe2lmKHRoaXMuSCYmdGhpcy5ILnBhcmVudE5vZGUmJnRoaXMuSC5wYXJlbnROb2RlLnBhcmVudE5vZGUpe2UuZWIoImFkc3RvcHBlZCIpO3ZhciBiPXRoaXMuSC5wYXJlbnROb2RlO3RoaXMuSC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuSCk7Yi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpO2UuamUoKTt0aGlzLkg9ITE7dGhpcy5RYShhKX19LGJ2OmZ1bmN0aW9uKGEpe3ZhciBiPWEubWVzc2FnZXx8IiIsZD0vXGQrL2csYz1bXTshYiYmYS5kYXRhJiZhLmRhdGEub3JpZ2luYWxldmVudCYmYS5kYXRhLm9yaWdpbmFsZXZlbnQubXNnJiYoYj0KYS5kYXRhLm9yaWdpbmFsZXZlbnQubXNnLChjPWIubWF0Y2goZCkpP2Muam9pbiYmKGI9Yy5qb2luKCItIikpOmI9Yi5zdWJzdHJpbmcoMCwyMCkpO2UudHJhY2soInN0YXRzX3ZwX2Vycm9yaGFuZGxlciIsYiwhMCk7ZS5lYigiZXJyIixiKTtlLnYoay5tdix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuZGkoITApfSxlbjpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoYSxiKXtpZihiLkthJiZiLmlzRW5hYmxlZCYmIWIuQ2MoKSl7dmFyIGQ9Yi5sYShhKTtyZXR1cm4gZC5wcm90b2NvbCsiOi8vIitkLmhvc3R9cmV0dXJuIGF9aWYoYS5hcHBlbmRDaGlsZCl7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic291cmNlIik7Yy5zcmM9ZChiLHRoaXMuTCk7Yy5vbmVycm9yPXRoaXMuWXUuYmluZCh0aGlzKTthLmFwcGVuZENoaWxkKGMpfWVsc2UgYS5zZXRBdHRyaWJ1dGUoInNyYyIsZChiLHRoaXMuTCkpfSxPaDpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRFbGVtZW50c0J5VGFnTmFtZT8KMDxhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzb3VyY2UiKS5sZW5ndGg6ITB9LGhuOmZ1bmN0aW9uKGEpe2EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZHN0YXJ0Iix0aGlzLmFpLmJpbmQodGhpcykpO2EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkbWV0YWRhdGEiLHRoaXMueGYuYmluZCh0aGlzKSk7YS5hZGRFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIix0aGlzLnlmLmJpbmQodGhpcykpO2EuYWRkRXZlbnRMaXN0ZW5lcigiZW5kZWQiLHRoaXMuUGQuYmluZCh0aGlzKSk7YS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5RZC5iaW5kKHRoaXMpKX0sRWQ6ZnVuY3Rpb24oYSl7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2Fkc3RhcnQiLHRoaXMuYWkuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsdGhpcy54Zi5iaW5kKHRoaXMpKTthLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLHRoaXMueWYuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlbmRlZCIsCnRoaXMuUGQuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5RZC5iaW5kKHRoaXMpKX0sYWk6ZnVuY3Rpb24oYSl7dGhpcy5QYnx8KHRoaXMudmlkZW8uY29udHJvbHM9ITEsd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLlBifHx0aGlzLnhmKGEpfS5iaW5kKHRoaXMpLHRoaXMuTG4pKX0seGY6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWmMmJnRoaXMuT2godGhpcy52aWRlbykmJiF0aGlzLkNiJiYhdGhpcy5QYil7dGhpcy5aYz0hMDt0cnl7aWYoIWUuVGEoKSYmYS50YXJnZXQmJjU+PWEudGFyZ2V0LmR1cmF0aW9uJiY1PE1hdGguYWJzKHRoaXMuYy5kdXJhdGlvbi1hLnRhcmdldC5kdXJhdGlvbikpe3RoaXMuQ2J8fCh0aGlzLkNiPSEwLHRoaXMuRWQodGhpcy52aWRlbyksZS50cmFjaygic3RhdHNfaGRfbm9vcHZpZGVvIiwiIiwhMCksdGhpcy5MLnBnfHx0aGlzLkwua2EoInZpZGVvLW5vb3AiKSk7dGhpcy5RYSgpO3JldHVybn19Y2F0Y2goYil7ZS50cmFjaygic3RhdHNfaGRfbm9vcHZpZGVvX2ZhaWwiLAoiIiwhMCl9dGhpcy5YdSgpO3RoaXMudmlkZW8uY29udHJvbHM9ITE7dGhpcy5iLkpjKCk7dGhpcy5aaCgpO3RoaXMud2YoKTt0aGlzLmFnKCk7dGhpcy5iLnBoKCk7dGhpcy52aWRlby5wbGF5JiZ0aGlzLmtmKCl9fSxrZjpmdW5jdGlvbigpe2lmKCF0aGlzLmpkKWlmKHRoaXMuY29uZi5wcmVBZElmcmFtZVVybCl7dmFyIGE9dGhpcy5jb25mLnByZUFkSWZyYW1lVXJsOyJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoYT1hKGUuU2EpKTtpZigic3RyaW5nIj09dHlwZW9mIGEmJmEpe3RoaXMuc2Q9W107Zm9yKHZhciBiPXRoaXMuYi5HLGQ9MDtkPGIuY2hpbGRyZW4ubGVuZ3RoO2QrKyl0aGlzLnNkLnB1c2goYi5jaGlsZHJlbltkXSksYi5jaGlsZHJlbltkXS5zdHlsZS5kaXNwbGF5PSJub25lIjtkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9KTtkLnNldEF0dHJpYnV0ZSgic3JjIiwKYSk7ZC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Quc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7ZC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAwIG5vbmU7b3V0bGluZTogbm9uZTsiKTtiLmFwcGVuZENoaWxkKGQpO3ZhciBjPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihhKXtpZigiY29udGludWUiPT1hLmRhdGEpe3RoaXMuVGMoKTthPU1hdGgucm91bmQoKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWMpLzFFMyk7dmFyIGI9IiI7MTxhJiYoYj0iZ3QxIik7NTxhJiYoYj0iZ3Q1Iik7MTA8YSYmKGI9Imd0MTAiKTsyMDxhJiYoYj0iZ3QyMCIpO2UudHJhY2soInN0YXRzX2hkX3ByZUlmcmFtZUNsb3NlZCIsYiwhMCl9fS5iaW5kKHRoaXMpKTtlLnRyYWNrKCJzdGF0c19oZF9wcmVJZnJhbWVPcGVuZWQiLCIiLCEwKX1lbHNlIHRoaXMuVGMoKX1lbHNlIHRoaXMuVGMoKX0sVGM6ZnVuY3Rpb24oYSl7aWYodGhpcy5zZClmb3IodmFyIGI9CjA7Yjx0aGlzLnNkLmxlbmd0aDtiKyspdGhpcy5zZFtiXS5zdHlsZS5kaXNwbGF5PSJibG9jayI7aWYoKGI9dGhpcy52aWRlby5wbGF5KCkpJiZiWyJjYXRjaCJdKWJbImNhdGNoIl0oZnVuY3Rpb24oYil7dGhpcy5qZHx8KGE/KCJzdHJpbmciIT10eXBlb2YgYiYmYiYmYi5tZXNzYWdlJiYoYj1iLm1lc3NhZ2UpLHRoaXMuUWEoKSxlLnRyYWNrKCJzdGF0c19oZF9wbGF5UHJvbWlzZUZhaWxlZCIsYiwhMCkpOih0aGlzLk5lKCEwKSx0aGlzLlRjKCEwKSkpfS5iaW5kKHRoaXMpKTtiLnRoZW4oZnVuY3Rpb24oKXt0aGlzLnplJiZlLnRyYWNrKCJzdGF0c19oZF9wbGF5UHJvbWlzZVJlc29sdmVkQWZ0ZXJJbXByZXNzaW9uIiwiIiwhMCk7dGhpcy5WZT0hMH0uYmluZCh0aGlzKSk7ZGE/KHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLlhiLmJpbmQodGhpcykpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuWGIuYmluZCh0aGlzKSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLAp0aGlzLlhiLmJpbmQodGhpcykpKTpLPWZ1bmN0aW9uKCl7dGhpcy5WY3x8KHRoaXMudmlkZW8ubG9hZCgpLHRoaXMua2YoKSl9LmJpbmQodGhpcyk7dGhpcy5zZSgpLkNoKHRoaXMpfSxQZDpmdW5jdGlvbigpe3RoaXMuTC52YyYmIXRoaXMuQ2ImJmUudHJhY2soInF1YXJ0aWxlIiwiY29tcGxldGUiLCEwKTt0aGlzLnRyYWNrKCJjb21wbGV0ZSIpO2UudihrLiRtLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSk7dGhpcy5RYSgpfSxRYTpmdW5jdGlvbihhKXtpZighdGhpcy5rZSlpZih0aGlzLmtlPSEwLHRoaXMuUmR8fChlLnYoay5mcyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMudHJhY2soIm5vdHZpZXdhYmxlIikpLHRoaXMuYy5yYnx8dGhpcy5jLmpjKXtlLmxiKCJuZXdTbWFsbEFkSWQiKTt0aGlzLmpmKys7dGhpcy5QYj10aGlzLlpjPSExO3RyeXt0aGlzLkVkKHRoaXMudmlkZW8pfWNhdGNoKGIpe310cnl7dGhpcy5lYS5yZW1vdmVDaGlsZCh0aGlzLnZpZGVvKX1jYXRjaChkKXt9dHJ5e3RoaXMueWEucmVtb3ZlQ2hpbGQodGhpcy5lYSl9Y2F0Y2goYyl7fXRoaXMuY2FwdGlvbj0KdGhpcy5jb250cm9scz1udWxsO3RoaXMuSWQ9ITE7dHJ5e3RoaXMuYi5XaCgpfWNhdGNoKGcpe310aGlzLmxmPSEwO3RoaXMuYi53ZSgpO3RoaXMuVWI9ITE7dGhpcy5zZSgpLnloKCk7dGhpcy5jLnJiJiZ0aGlzLmMub3JpZ2luLk9lKCk7dGhpcy5jLmpjJiYoYT90aGlzLmMub3JpZ2luLmtoKCk6dGhpcy5oZCgpKX1lbHNlIHRoaXMuaGQoKX0sWXU6ZnVuY3Rpb24oYSl7YS50YXJnZXQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChhLnRhcmdldCk7dGhpcy52aWRlby5uZXR3b3JrU3RhdGUmJnRoaXMudmlkZW8ubmV0d29ya1N0YXRlPT10aGlzLnZpZGVvLk5FVFdPUktfTk9fU09VUkNFJiYodGhpcy5FZCh0aGlzLnZpZGVvKSx0aGlzLkRlKCk/dGhpcy5EaCgpOnRoaXMuUWQoYSkpfSxRZDpmdW5jdGlvbihhKXt0aGlzLlBiPSEwO2EmJmEudGFyZ2V0JiZhLnRhcmdldC5lcnJvciYmYS50YXJnZXQuZXJyb3IuY29kZXx8dGhpcy52aWRlby5uZXR3b3JrU3RhdGU9PXRoaXMudmlkZW8uTkVUV09SS19OT19TT1VSQ0UmJgoodGhpcy5EZSgpP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50Y3x8dGhpcy5MLmVnKCl9LmJpbmQodGhpcyksMUUzKTp0aGlzLkwuZWcoKSk7dGhpcy5jLm9yaWdpbi5xZyh3LlRkKX0seWY6ZnVuY3Rpb24oKXtpZih0aGlzLnp1KXRoaXMuUWEoKTtlbHNle3RoaXMuVWI9ITA7dGhpcy5iLmYuVmEmJiF0aGlzLmxmJiZ0aGlzLmIuZi5WYSgpJiZlLnYoay5mZCx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3ZhciBhPU1hdGguZmxvb3IodGhpcy52aWRlby5jdXJyZW50VGltZSk7dGhpcy5DdShhKTtpZighdGhpcy5KYil7dmFyIGI9MkUzLGQ9NTA7dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbiYmKHRoaXMuY29uZi52aWV3YWJsZUltcHJlc3Npb24ucGVyY2VudCYmKGQ9dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi5wZXJjZW50KSx0aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnRpbWVNUyYmKGI9dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi50aW1lTVMpKTsKdGhpcy5KYj17ZWw6dGhpcy52aWRlbyxjYjpmdW5jdGlvbigpe3RoaXMuUmQ9ITA7ZS52KGsuYmksdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt0aGlzLnRyYWNrKCJ2aWV3YWJsZSIpfS5iaW5kKHRoaXMpLHRpbWVNUzpiLHBlcmNlbnQ6ZCxzdGFydFRpbWU6ITF9O2UuQ2UodGhpcy5KYil9ZD0iIjt0aGlzLmMuaGYmJihiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuR2gpKSYmKGQ9dGhpcy5jLmhmLWEsMDxkP2Q9dGhpcy5jb25mLnNraXBhYmxlQnV0dG9uLnJlcGxhY2UoIlt0aW1lXSIsZCk6KGQ9dGhpcy5jb25mLnNraXBCdXR0b24ucmVwbGFjZSgiW3RpbWVdIixkKSx0aGlzLklkfHwodGhpcy5JZD0hMCxiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3RoaXMudHJhY2soInNraXAiKTtlLnYoay5UZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuYy5yYj8odGhpcy5QYj10aGlzLlpjPSExLAp0aGlzLkVkKHRoaXMudmlkZW8pLHRoaXMuZWEucmVtb3ZlQ2hpbGQodGhpcy52aWRlbyksdGhpcy55YS5yZW1vdmVDaGlsZCh0aGlzLmVhKSx0aGlzLmNhcHRpb249dGhpcy5jb250cm9scz1udWxsLHRoaXMuSWQ9ITEsdGhpcy5iLldoKCksdGhpcy5jLm9yaWdpbi5PZSgpKTp0aGlzLlFhKCl9LmJpbmQodGhpcykpKSksYi5pbm5lckhUTUw9ZCk7dGhpcy5jYXB0aW9uJiYodGhpcy5jYXB0aW9uLmlubmVySFRNTD10aGlzLlhjLnJlcGxhY2UoIlt0aW1lXSIsZS55Zyh0aGlzLmMuZHVyYXRpb24tYSkpKTt0aGlzLlZjPSEwO3RoaXMudmlkZW8uY29udHJvbHM9ITF9fSxEaDpmdW5jdGlvbigpe3RoaXMudGM9ITA7dGhpcy55YT10aGlzLmIuRzt0aGlzLnlhLmlubmVySFRNTD0iIjt2YXIgYT05OTk5O3RoaXMuY29uZi56SW5kZXgmJihhPXRoaXMuY29uZi56SW5kZXgtMSk7dGhpcy55YS56SW5kZXg9YTthPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9iamVjdCIpO2Euc2V0QXR0cmlidXRlKCJkYXRhIiwKImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9ob21hZC1nbG9iYWwtY29uZmlncy5zY2huZWV2b25tb3JnZW4uY29tL2hvbWFkanNmbGFzaGRpc3BsYXkuc3dmIik7YS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Euc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7YS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpO2Euc2V0QXR0cmlidXRlKCJpZCIsImRpc3BtYWluIik7YS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJkaXNwbWFpbiIpO2Euc2V0QXR0cmlidXRlKCJzdHlsZSIsInZpc2liaWxpdHk6IHZpc2libGUiKTthLnNldEF0dHJpYnV0ZSgiRmxhc2hWYXJzIiwiZGF0YT0iK3RoaXMubnEoKSk7YS5pbm5lckhUTUw9JzxwYXJhbSBuYW1lPSJhbGxvd3NjcmlwdGFjY2VzcyIgdmFsdWU9ImFsd2F5cyI+PHBhcmFtIG5hbWU9ImFsbG93RnVsbFNjcmVlbiIgdmFsdWU9InRydWUiPjxwYXJhbSBuYW1lPSJiZ0NvbG9yIiB2YWx1ZT0iIzAwMDAwMCI+PHBhcmFtIG5hbWU9Im9wYXF1ZSIgdmFsdWU9ImRpcmVjdCI+JzsKdGhpcy5iLkY9YTt2YXIgYj10aGlzLmIuRixkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RoaXMuY29uZlsiaW5uZXJXYXJwcGVyLnN0eWxlIl0/ZC5zdHlsZT10aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdOmQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIjt0aGlzLmVhPXRoaXMueWEuYXBwZW5kQ2hpbGQoZCk7dGhpcy5iLkpjKCk7dGhpcy52aWRlbz10aGlzLmVhLmFwcGVuZENoaWxkKGIpO2I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO2Iuc3R5bGUudG9wPSIwcHgiO2Iuc3R5bGUud2lkdGg9dGhpcy55YS5vZmZzZXRXaWR0aCsicHgiO2Iuc3R5bGUuaGVpZ2h0PXRoaXMueWEub2Zmc2V0SGVpZ2h0KyJweCI7Yi5zdHlsZS5jdXJzb3I9InBvaW50ZXIiO2Iub25jbGljaz10aGlzLiRoLmJpbmQodGhpcyk7dGhpcy5lYS5hcHBlbmRDaGlsZChiKTt0aGlzLlpoKCk7dGhpcy53ZigpO3RoaXMub2U9c2V0SW50ZXJ2YWwodGhpcy5wby5iaW5kKHRoaXMpLAoxMDApO3JldHVybiBhfSxucTpmdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxiPXt9LGQ9MDtkPHRoaXMuYy5NLmxlbmd0aDtkKyspe3ZhciBjPWI9dGhpcy5jLk1bZF0sZTtlPWIudXJsO3ZhciBnPXRoaXMuTDtnLkthJiZnLmlzRW5hYmxlZCYmIWcuQ2MoKSYmKGU9Zy5sYShlKSxlPWUucHJvdG9jb2wrIjovLyIrZS5ob3N0KTtjLnVybD1lO2EucHVzaChiKX1yZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHttZWRpYWZpbGVzOmF9KSl9LHBvOmZ1bmN0aW9uKCl7dHJ5e3ZhciBhPXRoaXMudmlkZW8uZ2V0Rmxhc2hEaXNwbGF5U3RhdHVzKCk7dGhpcy52aWRlby5wYXVzZWQ9YS5wYXVzZWQ7YS50aW1lPj10aGlzLmMuZHVyYXRpb24/KGNsZWFySW50ZXJ2YWwodGhpcy5vZSksdGhpcy5QZCgpKTooMDxhLnRpbWUmJih0aGlzLnZpZGVvLmN1cnJlbnRUaW1lPWEudGltZSx0aGlzLnlmKCkpLCJlcnJvciI9PWEuc3RhdHVzJiYoY2xlYXJJbnRlcnZhbCh0aGlzLm9lKSwKdGhpcy5RZCgpKSx0aGlzLnZpZGVvLm11dGVkP3RoaXMudmlkZW8ubXV0ZSgpOnRoaXMudmlkZW8udW5tdXRlKCkpfWNhdGNoKGIpe319LFRoOmZ1bmN0aW9uKCl7dGhpcy5vaHx8KHRoaXMub2g9ITAsdGhpcy54Y3x8ZS50cmFjaygic3RhdHNfaGRfY2xvc2VkQmVmb3JlMXN0UXVhcnRpbGUiLCIiLCEwKSl9LEN1OmZ1bmN0aW9uKGEpe2UudihrLiRkLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSk7YT09dGhpcy5VaHx8dGhpcy5DYnx8KDA9PWEmJih0aGlzLnNiJiYod2luZG93LmNsZWFyVGltZW91dCh0aGlzLnNiKSx0aGlzLnNiPSExKSx0aGlzLlZlfHwoZS50cmFjaygic3RhdHNfaGRfaW1wcmVzc2lvbldpdGhPdXRSZXNvbHZlZFByb21pc2UiLCIiLCEwKSx0aGlzLnplPSEwKSx0aGlzLnRyYWNrKCJpbXByZXNzaW9uIiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsZnVuY3Rpb24oKXt0aGlzLlRoKCl9LmJpbmQodGhpcykpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLApmdW5jdGlvbigpe3RoaXMuVGgoKX0uYmluZCh0aGlzKSksdGhpcy50YyYmZS50cmFjaygic3RhdHNfaGRfYWRfaW1wcmVzc2lvbl9mbGFzaCIsIiIsITApLHRoaXMuQ2J8fGUudHJhY2soInN0YXRzX2hkX2FkX2ltcHJlc3Npb24iLCIiLCEwKSxlLlRhKCkmJmUudHJhY2soInN0YXRzX2hkX2FkX2ltcHJlc3Npb25fbW9iaWxlIiwiIiwhMCksdGhpcy50cmFjaygiY3JlYXRpdmVWaWV3IiksdGhpcy50cmFjaygic3RhcnQiKSxlLnYoay5QZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLGUudihrLlVmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSksdGhpcy50YyYmZS50cmFjaygicGxheWVkV2l0aEZsYXNoIiwiMTAzIikpLGE9PU1hdGguZmxvb3IodGhpcy5jLmR1cmF0aW9uLzQpJiYodGhpcy5MLnZjJiYoZS50cmFjaygicXVhcnRpbGUiLCJmaXJzdFF1YXJ0aWxlIiwhMCksdGhpcy54Yz0hMCksdGhpcy50cmFjaygiZmlyc3RRdWFydGlsZSIpLAplLnYoay5OZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKSxhPT1NYXRoLmZsb29yKHRoaXMuYy5kdXJhdGlvbi8yKSYmKHRoaXMuTC52YyYmZS50cmFjaygicXVhcnRpbGUiLCJtaWRwb2ludCIsITApLHRoaXMudHJhY2soIm1pZHBvaW50IiksZS52KGsuUmYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSksYT09TWF0aC5mbG9vcigzKnRoaXMuYy5kdXJhdGlvbi80KSYmKHRoaXMuTC52YyYmZS50cmFjaygicXVhcnRpbGUiLCJ0aGlyZFF1YXJ0aWxlIiwhMCksdGhpcy50cmFjaygidGhpcmRRdWFydGlsZSIpLGUudihrLlZmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpLHRoaXMuVWg9YSl9LHRyYWNrOmZ1bmN0aW9uKGEsYil7aWYoIXRoaXMuQ2Ipe3RyeXtpZih0aGlzLmVjW2FdPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHRoaXMuZWMuaW1wcmVzc2lvbiYmdGhpcy5lYy5jb21wbGV0ZSYmIXRoaXMucmYpe3RoaXMucmY9CiEwO3ZhciBkPXRoaXMuZWMuY29tcGxldGUtdGhpcy5lYy5pbXByZXNzaW9uLGM9InN0YXRzX2hkX3RpbWVkaWZmIjt0aGlzLkgmJihjKz0idnBhaWQiKTs1RTM+ZCYmKDEwPmQmJihkPTEwKSwwPmQmJihkPSJuZWdhdGl2ZSIpLGUudHJhY2soYyxkLCEwKSl9fWNhdGNoKGcpe31pZigibXV0ZSI9PWF8fCJ1bm11dGUiPT1hfHwicGF1c2UiPT1hfHwicmVzdW1lIj09YSl7aWYodGhpc1thKyJIYXNCZWVuVHJhY2tlZCJdKXJldHVybjt0aGlzW2ErIkhhc0JlZW5UcmFja2VkIl09ITB9ZD1bXTt0cnl7ZD10aGlzLnRxKHRoaXMuYy5PYSxhKX1jYXRjaChsKXtkPVtdfWZvcig7ZC5sZW5ndGg7KXRyeXt2YXIgbT1kLnBvcCgpOyJpbXByZXNzaW9uIj09YSYmKHRoaXMuZmU9ITApOyJpbXByZXNzaW9uIj09YSYmdGhpcy5KZC5pbXByZXNzaW9ucyYmZS5rcihtLnVybCx0aGlzLkpkLmltcHJlc3Npb25zKT90aGlzLkhlKG0udXJsLG0udHlwZSx7fSxmdW5jdGlvbihhKXt0cnl7dmFyIGI9YS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1VcmwiKTsKZS52KGsuYW4sdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHthZElkOnRoaXMuSmQuYWRJZCxpbXByZXNzaW9uVVJMOmJ9LHRoaXMuQygpKX1jYXRjaChkKXt9fS5iaW5kKHRoaXMpKTp0aGlzLkhlKG0udXJsLG0udHlwZSl9Y2F0Y2gocSl7fWlmKCFiKXRyeXt0aGlzLmMuT2E9dGhpcy5Ubyh0aGlzLmMuT2EsYSl9Y2F0Y2gocil7fX19LEhlOmZ1bmN0aW9uKGEsYixkLGMsZSl7YSYmInN0cmluZyI9PXR5cGVvZiBhJiZhLmxlbmd0aCYmKGI9dGhpcy5MLnphKGEpLGQmJmIuZG4oZCksY3x8KGM9dGhpcy5vZyksZXx8KGU9dGhpcy5vZyksdGhpcy5mbihhKSx0aGlzLkwuTGEoYixmdW5jdGlvbigpe3RoaXMueGgoYSk7YygpfS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7dGhpcy54aChhKTtlKCl9LmJpbmQodGhpcyksITEsITApKX0sZm46ZnVuY3Rpb24oYSl7dGhpcy5XYlthXT0ib3BlbiJ9LHhoOmZ1bmN0aW9uKGEpe3RoaXMuV2JbYV09ImNsb3NlZCJ9LEhvOmZ1bmN0aW9uKCl7dGhpcy5XYj0Ke319LCR0OmZ1bmN0aW9uKCl7dmFyIGE9MCxiO2ZvcihiIGluIHRoaXMuV2IpdGhpcy5XYi5oYXNPd25Qcm9wZXJ0eShiKSYmIm9wZW4iPT10aGlzLldiW2JdJiZhKys7cmV0dXJuIGF9LHRxOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhLnR5cGU9PWJ9KX0sVG86ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEudHlwZSE9PWJ9KX0sWHU6ZnVuY3Rpb24oKXt0aGlzLnZpZGVvLnN0eWxlJiYodGhpcy52aWRlby5zdHlsZS5jdXJzb3I9InBvaW50ZXIiLHRoaXMudmlkZW8ub25jbGljaz10aGlzLiRoLmJpbmQodGhpcykpfSwkaDpmdW5jdGlvbigpe2UuVGEoKSYmIm5vbmUiPT09dGhpcy5jb250cm9scy5zdHlsZS5kaXNwbGF5P3RoaXMuWWIoKTp0aGlzLmMuT2ImJihlLnYoay5pZyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMudHJhY2soImNsaWNrdHJhY2tpbmciKSwKIXRoaXMueGMmJmUuVGEoKSYmZS50cmFjaygic3RhdHNfaGRfY2xpY2t0aHJvdWdoQmVmb3JlMXN0UXVhcnRpbGUiLGUuYXEoKSwhMCksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT0iX3RvcCI7dGhpcy5MLiRjJiYoYT0iX2JsYW5rIik7dHJ5e3ZhciBiPXdpbmRvdy5vcGVuKCIiLGEpO2IuZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9IjxkaXY+PC9kaXY+IjtiLmRvY3VtZW50LmxvY2F0aW9uLmhyZWY9dGhpcy5jLk9ifWNhdGNoKGQpe3dpbmRvdy5vcGVuKHRoaXMuYy5PYixhKX19LmJpbmQodGhpcyksNTAwKSl9LFpoOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY2FwdGlvbil7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5jb25mWyJjYXB0aW9uLnN0eWxlIl0/YS5zdHlsZT10aGlzLmNvbmZbImNhcHRpb24uc3R5bGUiXTooYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUud2lkdGg9IjEwMCUiLGEuc3R5bGUuYmFja2dyb3VuZD0ibGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLDAsMCwwLjA1KSAwJSxyZ2JhKDAsMCwwLDAuMjUpIDEwMCUpIiwKYS5zdHlsZS5wYWRkaW5nPSIycHgiLGEuc3R5bGUuZm9udEZhbWlseT0iQXJpYWwsIFZlcmRhbmEiLGEuc3R5bGUuZm9udFNpemU9IjlweCIsYS5zdHlsZS5jb2xvcj0iI2ZmZmZmZiIsYS5zdHlsZS50ZXh0QWxpZ249ImNlbnRlciIsYS5zdHlsZS5ib3R0b209IjBweCIsYS5zdHlsZS5ib3hTaXppbmc9ImJvcmRlci1ib3giKTthLmlubmVySFRNTD10aGlzLlhjLnJlcGxhY2UoIlt0aW1lXSIsZS55ZygwKSk7dmFyIGI9dGhpcy5jb25mWyJjYXB0aW9uLmR1cmF0aW9uIl07dGhpcy5MLmFkJiYoYj10aGlzLkwuYWQpO2ImJndpbmRvdy5zZXRUaW1lb3V0KHRoaXMueGIuYmluZCh0aGlzKSwxRTMqYik7dGhpcy5jYXB0aW9uPXRoaXMuZWEuYXBwZW5kQ2hpbGQoYSl9fSx4YjpmdW5jdGlvbigpeyh0aGlzLmNvbmZbImNhcHRpb24uZHVyYXRpb24iXXx8dGhpcy5MLmFkKSYmdGhpcy5jYXB0aW9uJiZ0aGlzLmNhcHRpb24uc3R5bGUmJih0aGlzLmNhcHRpb24uc3R5bGUuZGlzcGxheT0ibm9uZSIpfSwKR2Q6ZnVuY3Rpb24oKXsodGhpcy5jb25mWyJjYXB0aW9uLmR1cmF0aW9uIl18fHRoaXMuTC5hZCkmJnRoaXMuY2FwdGlvbiYmdGhpcy5jYXB0aW9uLnN0eWxlJiYodGhpcy5jYXB0aW9uLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9LHdmOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmNvbnRyb2xzKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuaWQ9dGhpcy5Rbzt0aGlzLmNvbmZbImNvbnRyb2xzLnN0eWxlIl0/ZC5zdHlsZT10aGlzLmNvbmZbImNvbnRyb2xzLnN0eWxlIl06KGQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixkLnN0eWxlLndpZHRoPSIxMDAlIixkLnN0eWxlLmZvbnRGYW1pbHk9IkFyaWFsLCBWZXJkYW5hIixkLnN0eWxlLmNvbG9yPSIjZmZmZmZmIixkLnN0eWxlLnRleHRBbGlnbj0iY2VudGVyIixkLnN0eWxlLmJvdHRvbT0iMHB4IixkLnN0eWxlLnpJbmRleD0iMTAwMDAiKTtkLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsCmZ1bmN0aW9uKCl7dGhpcy5ZYigpO3RoaXMuR2QoKX0uYmluZCh0aGlzKSk7ZC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt0aGlzLnliKCk7dGhpcy54YigpfS5iaW5kKHRoaXMpKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbInBsYXlQYXVzZS5zdHlsZSJdP2Muc3R5bGU9dGhpcy5jb25mWyJwbGF5UGF1c2Uuc3R5bGUiXTooYy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZmxvYXQ6bGVmdCIpLGMuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixjLnN0eWxlWyJmbG9hdCJdPSJsZWZ0IixjLnN0eWxlLmN1cnNvcj0icG9pbnRlciIpO2MuaWQ9dGhpcy5EYjtjLmlubmVySFRNTD10aGlzLmNvbmYucGF1c2VCdXR0b247InZwYWlkIj09YT8oYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5RaC5iaW5kKHRoaXMpKSxiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLlFoLmJpbmQodGhpcykpKTooYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsCnRoaXMuUGguYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5QaC5iaW5kKHRoaXMpKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7dGhpcy5ZYigpO3RoaXMuR2QoKX0uYmluZCh0aGlzKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt0aGlzLnliKCk7dGhpcy54YigpfS5iaW5kKHRoaXMpKTt2YXIgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbIm11dGUuc3R5bGUiXT9nLnN0eWxlPXRoaXMuY29uZlsibXV0ZS5zdHlsZSJdOihnLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJmbG9hdDpyaWdodCIpLGcuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixnLnN0eWxlWyJmbG9hdCJdPSJyaWdodCIsZy5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTtnLmlkPXRoaXMuQmI7Zy5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b247InZwYWlkIj09YT9nLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwKdGhpcy5CdS5iaW5kKHRoaXMpKTpnLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLkF1LmJpbmQodGhpcykpO2cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe3RoaXMuWWIoKTt0aGlzLkdkKCl9LmJpbmQodGhpcykpO2cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7dGhpcy55YigpO3RoaXMueGIoKX0uYmluZCh0aGlzKSk7dmFyIGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5jb25mWyJza2lwLnN0eWxlIl0/bC5zdHlsZT10aGlzLmNvbmZbInNraXAuc3R5bGUiXToobC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwicG9zaXRpb246YWJzb2x1dGU7dG9wOi01MHB4O3JpZ2h0OjBweCIpLGwuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixsLnN0eWxlLnRvcD0iLTUwcHgiLGwuc3R5bGUucmlnaHQ9IjBweCIsbC5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTtsLmlkPXRoaXMuR2g7bC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLApmdW5jdGlvbigpe3ZhciBhPWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpO2EmJmFbMF0mJihhWzBdLnN0eWxlLm9wYWNpdHk9MSl9KTtsLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IixmdW5jdGlvbigpe3ZhciBhPWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpO2EmJmFbMF0mJihhWzBdLnN0eWxlLm9wYWNpdHk9LjYpfSk7bC5pbm5lckhUTUw9IiI7ZC5hcHBlbmRDaGlsZChjKTt0aGlzLmMuaGYmJmQuYXBwZW5kQ2hpbGQobCk7ZC5hcHBlbmRDaGlsZChnKTtkLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2UuVGEoKXx8KHRoaXMuZWEuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe3RoaXMuWWIoKTt0aGlzLkdkKCl9LmJpbmQodGhpcykpLHRoaXMuZWEuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7dGhpcy55YigpO3RoaXMueGIoKX0uYmluZCh0aGlzKSkpO3RoaXMuY29udHJvbHM9dGhpcy5lYS5hcHBlbmRDaGlsZChkKTsKdGhpcy5jb25mWyJyZXN1bWVDb250cm9sLnN0eWxlIl0/Yi5zdHlsZT10aGlzLmNvbmZbInJlc3VtZUNvbnRyb2wuc3R5bGUiXTooYi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGIuc3R5bGUud2lkdGg9IjEwMCUiLGIuc3R5bGUuZm9udEZhbWlseT0iQXJpYWwsIFZlcmRhbmEiLGIuc3R5bGUuY29sb3I9IiNmZmZmZmYiLGIuc3R5bGUudGV4dEFsaWduPSJjZW50ZXIiLGIuc3R5bGUuYm90dG9tPSIwcHgiLGIuc3R5bGUuekluZGV4PSIxMDAwMCIsYi5zdHlsZS5kaXNwbGF5PSJub25lIixkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpLGQub25lcnJvcj1mdW5jdGlvbigpe3RoaXMud2EmJih0aGlzLndhLnN0eWxlLmJhY2tncm91bmQ9InVybCgnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9iaWdwbGF5MTkwNjA2LnBuZycpIG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIil9LmJpbmQodGhpcyksZC5zcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSGdBQUFCNENBWUFBQUE1WkRiU0FBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeWhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVOaTFqTVRRMUlEYzVMakUyTXpRNU9Td2dNakF4T0M4d09DOHhNeTB4TmpvME1Eb3lNaUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01Ua2dLRTFoWTJsdWRHOXphQ2tpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2T0Rnd01VWTVOa1kzUmpsQ01URkZPVGt3UmpnNVJUZ3pSRFU0T0RRME1qVWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZPRGd3TVVZNU56QTNSamxDTVRGRk9Ua3dSamc1UlRnelJEVTRPRFEwTWpVaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzRPREF4UmprMlJEZEdPVUl4TVVVNU9UQkdPRGxGT0RORU5UZzRORFF5TlNJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvNE9EQXhSamsyUlRkR09VSXhNVVU1T1RCR09EbEZPRE5FTlRnNE5EUXlOU0l2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHZWN29SSUFBQXlyU1VSQlZIamE3RjBKYkZUWEZiMkRiY0JBS1FHTXpXNldRRnBTS2lyV1FnZ3BVSUhiaEpLMHFnMUdrQWdvUXFsRTFRcXpTRWhJN0dEUzRyS0pGZ3pZMkdyQllJc0NqVkFOaENXaHhSVENXb1BManNHQU1hRUdZd3k5NTgzNzFqRE1qR2ZHZitiL1AvOGQ2V2p3T0JuL2Q4KzhlOSs5YjNQMDd0MmI5SVRENGZENXM3ZjNkRUEwZjI0YmZ1M0tiTXVNWStMbk41ak5tQTBsWHpDcm1OWE1TbVk1OHk2empIbWJXZkx5NVV2OC9GenZCK1RQcmZNOVQvOU52WXhDMXNWYlRIdzdCekM3NDk5c0hJamF0SjZmK3o4cDl0Zk1ZdVpYek5QTUMxWTBrcFVFUnE4Y3hoekJITXpzR2FLLzAxUXkwZTM5aTh3anpQM01BN0szSzRIcmlRVG0rOHlmTWQ5anhocjRMRDBsUDJFK1lSWXk4NWtGekZLekd0QmgwaGljeEp6QS9JRFp4T1Jmd2tvcGNoYnpiMmFMd1ExTVpDajB6c25NSW1tb1pBdUlTL0laOGF5NzViTlBOdGpUbUU1Z0dHTW1ScS9NRGN3K0ZoNzQ5WkZ0S0pGdGlyVzd3SjlLWXl5VjhUWlNrQ0RiVkNMYmFEdUJrNlE3eTRnd1lUMEpuU0hibW1TSFVUUWFuTTREaVhGa0wvU1I0NHB0ek4rR2M5UWR6aDQ4aVhtT2FUZHhYVEZPMm1CU0pBbjhMZVpXNWlaeWxnM3RqamVrTGJaSzIxamFSUTltZDV6TnI1MlZycThobGZtT2ZEMXN4Ujc4Sy9uZ1NsenZnRzIra0xheWxNQ2ZNZGNwL2Z6R09ta3pTd2k4blRsRGFSWXdaa2pibVRZR1J6SDNjOHdkcHJRS0doK1JjNlpxT0xQR1REMFlFK25IeURtZHAxQS92Q3R0MlZDWEhsemYyUXVIdzRHZWkzblN2a29iM2RCUDJuUWc2MU5qZEE4dVZPS0dCSDJsYlEyTndYbjhEWHRIYVJFeXdMWjV6QStONk1HL1o0NVZHb1FjWTZXdGd4djV0bW5USnBpNGkyVXJpNVR0dzRhQnpKdnNMWXZDNGFLL3ozL296OHJtWVFjV0VweGduZ3lsaThiUS9lL0sxb1poYjZEcFU2QUNZejR6WHRuWk1NUkxEVUlpY0FvNUt5MEt4dUlqcVlXdUFuK2J1Vm5aMWpUWUxEWFJUV0I4WUl5eXEya1E0MitIODBkZzdDZ1lvMnhxT295UjJ0UmI0STFHdGlJcUtvb2VQWHBFang4L3BnWU5HaWhaQTlRbUtpNHV6dGZ2c2RJZzFjZ1dWRlZWVWRldVhlbjU4K2RVWEZ4TUxWcTBFRUxydmNYRG9taEJ6aFdhSjRMcHdaZ2xXbVowQzY1ZXZVb1RKMDZrL1B4OEdqVnFGRjI2ZElsdTNib2xSQTdSUG1PcllRblRFWXpBdjJFMk4vcnBhMnBxcUtLaWdoSVRFeWt2TDQrMmJ0MUszYnAxbzNQbnp0SERodytGQzFlOTJQc0tHbTh1R3NKam9YWmpvNS8rd1lNSE5HTEVDQm80Y0tENHVWZXZYcFNhbWtyTm1qV2preWRQMHVYTGw4Vy9HelpzU0M5ZXZMQ3J5RERPY3VaTGYzdnd4LzdtV1VZZ05qYVcwdExTcUxDd2tLWk9uVXJsNWVYQ2RTTXUyM1FnQnEwbUJlS2kwNnpRcXM2ZE85UHExYXRwOSs3ZE5IcjBhTkdiYlJ5ZjAvd1ZlQ2p6VFN1MWJOQ2dRYlJqeHc3YXVIR2ppTTluejU2MVkzeCtVMnIzcXNCd2EyNzgxTU43aHRKZmpCOC9uZzRkT2tSTGxpd1I0cDQ1YzRhZVBuMWFtMWJaZ0s5cDU5NkRNV3EyOUNxTnhvMGIwOHlaTStuZ3dZTTBiZG8wdW52M3JwM2k4MWozek1lOXhUOG5heCt0VkF1a1ZXdldyS0c5ZS9mUzhPSERSWkhFQnZFNVdtcm8xVVVubTlYOUJJc2hRNGFJUWRqbXpadHI0ek5HM1ZwdmprQTNuZUxOUldOYjQvQkkvV29qUGg4NWNvUVdMRmhBMGRIUlFtZ3RQa2NZM3BQRmo5ZGM5SS9KWEtmdTZBNFVRK2JPblNzR1l0T25UNmQ3OSs2SitJd0NTUVFKSGVYYVVkMEZ0Z1VRbjVFLzc5bXpKMUx6NTFHZUJIN1hicFVCeE9kZHUzWlJWbGFXbUxHS29QcjJqOXdGeGdtdDNjaW1TRTVPcHNPSEQ5T2lSWXNvSmlhR3pwOC9MNllwTGV5MmEvWFVXakNBYkE3VXQyZlBuaTN5NXlsVHBvajRYRkpTWXVYOGVZQ3J3RDhnaGRyNHZHN2RPcEZhalJ3NTBzcnh1WTlySHZ5MldmTTZvNllBaHc0ZFNnVUZCYUsrcmNWbkxYKzJTRDc4dHBZSDQydlpVL1ZkejVnd1lZS0l6NHNYTHhhREx3aU4rR3lCZ1JnMGRVRGdkc3lPU2tyZjhYbldyRmtpUG1QK3VheXN6QXIxYldqYURpNDZrUmx0ZHBkakJxRFV1WDc5ZXRxM2IxOXRmZnZtelp1MXNkbGtOb09taVZvUFZnZ3dmMGFSWk11V0xXSlFkdUhDQlpFL203QTN0OE1UeFNuSmdnUFdoaDAvZnB6bXo1OHY2dHNRMm1UeE9RNEN0MVJTQlk5R2pSclJ2SG56UkgwYjg4OWFmZHNrOGJrbFluQXJGWHQxS0IxeEtyVjI3VnJodXJFSzFDVHh1UlcrWXMxVlA5UTNmNGJJMmRuWllsQjI4ZUpGSSt2YnpTRndJeVdML2hnM2JweVlmMTY0Y0tHb2J5TStQM3YyTE54Q040TEFhbHRvaU5Da1NST2FNMmVPS0pSTW5qeFp2SWRGQm1GRURBUitvYVFJTFpCS2JkaXdRU3cydUgvL3Z0aU9FeTVna1ZhVmtpQzBRSy9GQW9QdDI3Zlg3bzRNRTZvaDhETWxRZWlRbTV0THk1Y3ZwNktpSXNLWlpLMWF0UkpiWWNPRUtwU3pucGpkU0ZiY0M2eE5VR0JFM2JScFUrclJvNGRvUjNWMWRUZ2Y0eHYwNEllcW4rbUhhOWV1MGRLbFM4VXkzY3JLU3BFZm84cGwwTFJuQlFRdVU3TFVIMGlCVnF4WUlZb2ROMjdjb0E0ZE9naGlRR1hndHRaN0VQaU9rcWQrd0tiMDlQUjBPblhxRkxWdTNWcTRZNGdhenRHeUY1UWlCdDlTRWdVZloxSEl3UFFoY3Q3dTNidUw5MDBncklaYjZNRlh5SGxmZmJTU3pEOWN1WEpGREtBd1hZZ1VxRXVYTGtiR1dXK0FwbGNoNmsyTURjaTUxRktoamppN2N1VktXclZxRmQyK2ZWdkVXUFJjZytPc04xeUh0bHJHL1I4bG4yOWc4Z0RuaEdCcExZUkduTVZVb1luY3NUc3VJc1BVTHVVNFN5N2JIVlFlN0RtZnhkNWp4Rms4VHhpTEZjRUNtdGJHM1JPcWo3NEtuTStseGRrblQ1NkllcklKNDZ3dm5IQVYrQ3NscVJNWU5DSE9vbmFNQmUvdDI3YzNjNXoxaGVPdUFwZXcyN2xNTnQ2ZkJHemJ0azFVb1U2ZlBrMHRXN1lVN2hpaVdzQWR1NlBFNFhCY0ZnSzd4TGVEZGhYNDZOR2pJcDlGbk1YQUNTc3hZQmNURDZEcXdnRk5WOWZjOTNQbUozWVM5dnIxNnlMT2J0cTBTYmhtbkx0bHNUanJEWjlyLzNEdHdYZ1RYMW5UN2NuUWV4UU5sN3RzMlRMS3lNaWcwdEpTU2toSUVETStKaWt2MWhjMXJnSzd6anlYa3c1WHFaa2RPVGs1MUxkdlg3RzZBcU5qdUdPa1B4QTJRbzRvTHBSYXZ1YWlnVnptaUVnVTFyVnVqRVZ3S0MrS3I3djFleXg1MEpDOENmeFhjdDVHSFRGMWFlU3pPRmtuTXpOVHVPWk9uVHBGU3B6MUdIMmtobDRGZnNUY3lmeUYxVnVxemMraWJuem56cDNhT0d2QmZEWVE3Sklha3FjWXJPR1BWbThsNnNiOSt2VVRjUmFqWTljNEcrSEljSC9Ea3lzK3hDd21pNTA0Q3h3N2RreTRZK1N6aUxOWUxtUHhmRFlRRkV2dDZoUVlXTXI4azFWYWhuVlFPQ0ZIcXh0SGVKejFCby8zYTNpNzRqMlRtVTRtUHZVZHdGWk5iWDRXK1d4OGZEeTFiZHMyVXZMWlFGREIzT1RwRncxOEpNc0xUSjBMNU9aUy8vNzl4ZFlRYmZWaWhPV3pnV0MrMU14dmdZSFAzRWRrUnNIVjFXSkRWMUpTRXFXa3BJZ0R5NURQWW1MQVpqM1dGVmoyN1BXR2NGLzVMaXcyVStiRmhxSmp4NDVpTkR4anhneHhyQkVXaitNOUc4WlpUNWhGSG01YjBlREFnS1FPL0plWmFOVFR3LzNpVGdaczJzS3NENjRCd2pVNk51NnhycmhhbHpiK0NJenpoLzloVkF2UVN6R0FBakNJUW85VjE5clZBb2VPK3B3LzhHZWJHejRnMzZnV29MeUl4ZVNnVFFkUTNwQlBma3dPK2J1UGNTS3pXdG5VTklBV2svenlnSDcyaUFvcDhqWmxXMU5nRXZtNWFUQ1FuY2c1ekR4bFc4T1JGMGhIQzNTcmVRcXB6V3BHNG83VXdQOUJhb0IvNEJtNzlOSDhXcVJzYlFpU0hBNUhRQ2N5UkRWdkh2QXhXY2hac0NQeGZXWHZzR0lxT2EvOHBWQUxUTElINDU2bGdjcnVZY0VmbUl1QytSL3JjOXdMYnAzZXFXd2ZjdXdrSHpkOGgxSmc0RVBtRjBxRGtPR3d0REVaSlRDQVV1YS9sQmE2QTV2SGh0WDNRL1FRR0ZYL3djeC9LazEwQTJ6NVEvSXl4eHR1Z1VYNnhCeEV6djFOQ3ZYRFFXbExYUTZvQzNZVTdRbWNJci9NNU5mdk1uc3BuWUxDWDVnLzVWeFh0eG1WVUJ5YStFdHlydWRTQ0F6cDBuYTZJbFNuWXY1T0p1WUsvbUdxdEpudUNPVVdsUTNzc3I4bTUxNlp6a3BEajhDS2pHUjJ5VitHNmcrRStseGJQUGozbU5sS3k5ZVFMVzN6WlNqL1NEZ09MdjZHbWNyOG1GeTJOZG9ZNWRJV3FkSTJaSFdCTldUSzBYV09qY1hOa1RiSUROY2YxRE5OOGdlUE9TN3ZJR2ZsNnp2TXRqWVI5dDlNWE5xd2hPUHRZL2RmdWw5YnErYzF0a2JkM0lScEw5eFovR3R5VGo5R0trcGxHL3RRRUZOOVZoWllBN2FxNG1TZnRBZ1R1bFMycVJzWnZCM1hnUU0xOVlMN0FqNVBDL3A4TFBLTDVkK041OWZwOGh0dlJaeGtybVVYbThXdkhxOUs4T1IrUSttaXpTU3c2KzkrSWtlWkh6Q2JtRnpVU21ZQk0wdHp3NzRFVWdLL2lnUXA4aGh5VGt2R21rUlU5RTV0UTBDQmUzaFJBdnN2c0NzdzRoNUd6bE9BTUQwWjdtdnBjVHp2RWVaKzVnSG03VUJFVkFKVHdBZWV2Y1hzVGM1MVlUaExIMVdoTmpxNGRMamN1MHlVV1MrUnM5SjBtbm5CYjZNcWdYVVIyQjNSVXVDdXNyZmo0dXQ0Wmd0bU0zSmV3cW5kMDRpdEg3anhEVGtwZGdoZ3ZYR1o3SlVsVXVDZ1R5QTFrOEQvRjJBQUU4YkJqOGQ0ZEM0QUFBQUFTVVZPUks1Q1lJST0iLApiLnN0eWxlLmJhY2tncm91bmQ9InVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFIZ0FBQUI0Q0FZQUFBQTVaRGJTQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5aHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU5pMWpNVFExSURjNUxqRTJNelE1T1N3Z01qQXhPQzh3T0M4eE15MHhOam8wTURveU1pQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTkRJREl3TVRrZ0tFMWhZMmx1ZEc5emFDa2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZPRGd3TVVZNU5rWTNSamxDTVRGRk9Ua3dSamc1UlRnelJEVTRPRFEwTWpVaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk9EZ3dNVVk1TnpBM1JqbENNVEZGT1Rrd1JqZzVSVGd6UkRVNE9EUTBNalVpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvNE9EQXhSamsyUkRkR09VSXhNVVU1T1RCR09EbEZPRE5FTlRnNE5EUXlOU0lnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG80T0RBeFJqazJSVGRHT1VJeE1VVTVPVEJHT0RsRk9ETkVOVGc0TkRReU5TSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QdlY3b1JJQUFBeXJTVVJCVkhqYTdGMEpiRlRYRmIyRGJjQkFLUUdNelc2V1FGcFNLaXJXUWdncFVJSGJoSkswcWcxR2tBZ29RcWxFMVFxelNFaEk3R0RTNHJLSkZnelkyR3JCWUlzQ2pWQU5oQ1doeFJUQ1dvUExqc0dBTWFFR1l3eTk1ODM3MWpETWpHZkdmK2IvUC84ZDZXandPQm4vZDgrOGU5KzliM1AwN3QyYjlJVEQ0ZkQ1czdmM2RFQTBmMjRiZnUzS2JNdU1ZK0xuTjVqTm1BMGxYekNybU5YTVNtWTU4eTZ6akhtYldmTHk1VXY4L0Z6dkIrVFByZk05VC85TnZZeEMxc1ZiVEh3N0J6Qzc0OTlzSElqYXRKNmYrejhwOXRmTVl1Wlh6TlBNQzFZMGtwVUVScThjeGh6QkhNenNHYUsvMDFReTBlMzlpOHdqelAzTUE3SzNLNEhyaVFUbSs4eWZNZDlqeGhyNExEMGxQMkUrWVJZeTg1a0Z6Rkt6R3RCaDBoaWN4SnpBL0lEWnhPUmZ3a29wY2hiemIyYUx3UTFNWkNqMHpzbk1JbW1vWkF1SVMvSVo4YXk3NWJOUE50alRtRTVnR0dNbVJxL01EY3crRmg3NDlaRnRLSkZ0aXJXN3dKOUtZeXlWOFRaU2tDRGJWQ0xiYUR1Qms2UTd5NGd3WVQwSm5TSGJtbVNIVVRRYW5NNERpWEZrTC9TUjQ0cHR6TitHYzlRZHpoNDhpWG1PYVRkeFhURk8ybUJTSkFuOExlWlc1aVp5bGczdGpqZWtMYlpLMjFqYVJROW1kNXpOcjUyVnJxOGhsZm1PZkQxc3hSNzhLL25nU2x6dmdHMitrTGF5bE1DZk1kY3AvZnpHT21relN3aThuVGxEYVJZd1pramJtVFlHUnpIM2M4d2RwclFLR2grUmM2WnFPTFBHVEQwWUUrbkh5RG1kcDFBL3ZDdHQyVkNYSGx6ZjJRdUh3NEdlaTNuU3Zrb2IzZEJQMm5RZzYxTmpkQTh1Vk9LR0JIMmxiUTJOd1huOERYdEhhUkV5d0xaNXpBK042TUcvWjQ1VkdvUWNZNld0Z3h2NXRtblRKcGk0aTJVcmk1VHR3NGFCekp2c0xZdkM0YUsvejMvb3o4cm1ZUWNXRXB4Z25neWxpOGJRL2UvSzFvWmhiNkRwVTZBQ1l6NHpYdG5aTU1STERVSWljQW81S3kwS3h1SWpxWVd1QW4rYnVWbloxalRZTERYUlRXQjhZSXl5cTJrUTQyK0g4MGRnN0NnWW8yeHFPb3lSMnRSYjRJMUd0aUlxS29vZVBYcEVqeDgvcGdZTkdpaFpBOVFtS2k0dXp0ZnZzZElnMWNnV1ZGVlZVZGV1WGVuNTgrZFVYRnhNTFZxMEVFTHJ2Y1hEb21oQnpoV2FKNExwd1pnbFdtWjBDNjVldlVvVEowNmsvUHg4R2pWcUZGMjZkSWx1M2JvbFJBN1JQbU9yWVFuVEVZekF2MkUyTi9ycGEycHFxS0tpZ2hJVEV5a3ZMNCsyYnQxSzNicDFvM1BuenRIRGh3K0ZDMWU5MlBzS0dtOHVHc0pqb1haam81Lyt3WU1ITkdMRUNCbzRjS0Q0dVZldlhwU2Fta3JObWpXamt5ZFAwdVhMbDhXL0d6WnNTQzlldkxDcnlERE9jdVpMZjN2d3gvN21XVVlnTmphVzB0TFNxTEN3a0taT25Vcmw1ZVhDZFNNdTIzUWdCcTBtQmVLaTA2elFxczZkTzlQcTFhdHA5KzdkTkhyMGFOR2JiUnlmMC93VmVDanpUU3UxYk5DZ1FiUmp4dzdhdUhHamlNOW56NTYxWTN4K1UycjNxc0J3YTI3ODFNTjdodEpmakI4L25nNGRPa1JMbGl3UjRwNDVjNGFlUG4xYW0xYlpnSzlwNTk2RE1XcTI5Q3FOeG8wYjA4eVpNK25nd1lNMGJkbzB1bnYzcnAzaTgxajN6TWU5eFQ4bmF4K3RWQXVrVld2V3JLRzllL2ZTOE9IRFJaSEVCdkU1V21ybzFVVW5tOVg5QklzaFE0YUlRZGptelp0cjR6TkczVnB2amtBM25lTE5SV05iNC9CSS9Xb2pQaDg1Y29RV0xGaEEwZEhSUW1ndFBrY1kzcFBGajlkYzlJL0pYS2Z1NkE0VVErYk9uU3NHWXRPblQ2ZDc5KzZKK0l3Q1NRUUpIZVhhVWQwRnRnVVFuNUUvNzltekoxTHo1MUdlQkg3WGJwVUJ4T2RkdTNaUlZsYVdtTEdLb1ByMmo5d0Z4Z210M2NpbVNFNU9wc09IRDlPaVJZc29KaWFHenA4L0w2WXBMZXkyYS9YVVdqQ0FiQTdVdDJmUG5pM3k1eWxUcG9qNFhGSlNZdVg4ZVlDcndEOGdoZHI0dkc3ZE9wRmFqUnc1MHNyeHVZOXJIdnkyV2ZNNm82WUFodzRkU2dVRkJhSytyY1ZuTFgrMlNENzh0cFlINDJ2WlUvVmR6NWd3WVlLSXo0c1hMeGFETHdpTitHeUJnUmcwZFVEZ2RzeU9Ta3JmOFhuV3JGa2lQbVArdWF5c3pBcjFiV2phRGk0NmtSbHRkcGRqQnFEVXVYNzlldHEzYjE5dGZmdm16WnUxc2Rsa05vT21pVm9QVmdnd2YwYVJaTXVXTFdKUWR1SENCWkUvbTdBM3Q4TVR4U25KZ2dQV2hoMC9mcHptejU4djZ0c1EybVR4T1E0Q3QxUlNCWTlHalJyUnZIbnpSSDBiODg5YWZkc2s4YmtsWW5BckZYdDFLQjF4S3JWMjdWcmh1ckVLMUNUeHVSVytZczFWUDlRM2Y0YkkyZG5aWWxCMjhlSkZJK3ZielNGd0l5V0wvaGczYnB5WWYxNjRjS0dvYnlNK1AzdjJMTnhDTjRMQWFsdG9pTkNrU1JPYU0yZU9LSlJNbmp4WnZJZEZCbUZFREFSK29hUUlMWkJLYmRpd1FTdzJ1SC8vdnRpT0V5NWdrVmFWa2lDMFFLL0ZBb1B0MjdmWDdvNE1FNm9oOERNbFFlaVFtNXRMeTVjdnA2S2lJc0taWksxYXRSSmJZY09FS3BTem5wamRTRmJjQzZ4TlVHQkUzYlJwVStyUm80ZG9SM1YxZFRnZjR4djA0SWVxbittSGE5ZXUwZEtsUzhVeTNjcktTcEVmbzhwbDBMUm5CUVF1VTdMVUgwaUJWcXhZSVlvZE4yN2NvQTRkT2doaVFHWGd0dFo3RVBpT2txZCt3S2IwOVBSME9uWHFGTFZ1M1ZxNFk0Z2F6dEd5RjVRaUJ0OVNFZ1VmWjFISXdQUWhjdDd1M2J1TDkwMGdySVpiNk1GWHlIbGZmYlNTekQ5Y3VYSkZES0F3WFlnVXFFdVhMa2JHV1crQXBsY2g2azJNRGNpNTFGS2hqamk3Y3VWS1dyVnFGZDIrZlZ2RVdQUmNnK09zTjF5SHRsckcvUjhsbjI5ZzhnRG5oR0JwTFlSR25NVlVvWW5jc1RzdUlzUFVMdVU0U3k3YkhWUWU3RG1meGQ1anhGazhUeGlMRmNFQ210YkczUk9xajc0S25NK2x4ZGtuVDU2SWVySUo0Nnd2bkhBVitDc2xxUk1ZTkNIT29uYU1CZS90MjdjM2M1ejFoZU91QXBldzI3bE1OdDZmQkd6YnRrMVVvVTZmUGswdFc3WVU3aGlpV3NBZHU2UEU0WEJjRmdLN3hMZURkaFg0Nk5HaklwOUZuTVhBQ1NzeFlCY1RENkRxd2dGTlY5ZmM5M1BtSjNZUzl2cjE2eUxPYnRxMFNiaG1uTHRsc1RqckRaOXIvM0R0d1hnVFgxblQ3Y25RZXhRTmw3dHMyVExLeU1pZzB0SlNTa2hJRURNK0ppa3YxaGMxcmdLN3pqeVhrdzVYcVprZE9UazUxTGR2WDdHNkFxTmp1R09rUHhBMlFvNG9McFJhdnVhaWdWem1pRWdVMXJWdWpFVndLQytLcjd2MWV5eDUwSkM4Q2Z4WGN0NUdIVEYxYWVTek9Ga25Nek5UdU9aT25UcEZTcHoxR0gya2hsNEZmc1RjeWZ5RjFWdXF6YytpYm56bnpwM2FPR3ZCZkRZUTdKSWFrcWNZck9HUFZtOGw2c2I5K3ZVVGNSYWpZOWM0RytISWNIL0RreXMreEN3bWk1MDRDeHc3ZGt5NFkrU3ppTE5ZTG1QeGZEWVFGRXZ0NmhRWVdNcjhrMVZhaG5WUU9DRkhxeHRIZUp6MUJvLzNhM2k3NGoyVG1VNG1QdlVkd0ZaTmJYNFcrV3g4ZkR5MWJkczJVdkxaUUZEQjNPVHBGdzE4Sk1zTFRKMEw1T1pTLy83OXhkWVFiZlZpaE9XemdXQysxTXh2Z1lIUDNFZGtSc0hWMVdKRFYxSlNFcVdrcElnRHk1RFBZbUxBWmozV0ZWajI3UFdHY0YvNUxpdzJVK2JGaHFKang0NWlORHhqeGd4eHJCRVdqK005RzhaWlQ1aEZIbTViMGVEQWdLUU8vSmVaYU5UVHcvM2lUZ1pzMnNLc0Q2NEJ3alU2TnU2eHJyaGFsemIrQ0l6emgvOWhWQXZRU3pHQUFqQ0lRbzlWMTlyVkFvZU8rcHcvOEdlYkd6NGczNmdXb0x5SXhlU2dUUWRRM3BCUGZrd08rYnVQY1NLeld0blVOSUFXay96eWdINzJpQW9wOGpabFcxTmdFdm01YVRDUW5jZzV6RHhsVzhPUkYwaEhDM1NyZVFxcHpXcEc0bzdVd1A5QmFvQi80Qm03OU5IOFdxUnNiUWlTSEE1SFFDY3lSRFZ2SHZBeFdjaFpzQ1B4ZldYdnNHSXFPYS84cFZBTFRMSUg0NTZsZ2NydVljRWZtSXVDK1IvcmM5d0xicDNlcVd3ZmN1d2tIemQ4aDFKZzRFUG1GMHFEa09Hd3RERVpKVENBVXVhL2xCYTZBNXZIaHRYM1EvUVFHRlgvd2N4L0trMTBBMno1US9JeXh4dHVnVVg2eEJ4RXp2MU5DdlhEUVdsTFhRNm9DM1lVN1FtY0lyL001TmZ2TW5zcG5ZTENYNWcvNVZ4WHR4bVZVQnlhK0V0eXJ1ZFNDQXpwMG5hNklsU25ZdjVPSnVZSy9tR3F0Sm51Q09VV2xRM3NzcjhtNTE2WnprcERqOENLakdSMnlWK0c2ZytFK2x4YlBQajNtTmxLeTllUUxXM3paU2ovU0RnT0x2NkdtY3I4bUZ5Mk5kb1k1ZElXcWRJMlpIV0JOV1RLMFhXT2pjWE5rVGJJRE5jZjFETk44Z2VQT1M3dklHZmw2enZNdGpZUjl0OU1YTnF3aE9QdFkvZGZ1bDlicStjMXRrYmQzSVJwTDl4Wi9HdHlUajlHS2twbEcvdFFFRk45VmhaWUE3YXE0bVNmdEFnVHVsUzJxUnNadkIzWGdRTTE5WUw3QWo1UEMvcDhMUEtMNWQrTjU5ZnA4aHR2Ulp4a3JtVVhtOFd2SHE5SzhPUitRK21pelNTdzYrOStJa2VaSHpDYm1GelVTbVlCTTB0enc3NEVVZ0svaWdRcDhoaHlUa3ZHbWtSVTlFNXRRMENCZTNoUkF2c3ZzQ3N3NGg1R3psT0FNRDBaN212cGNUenZFZVorNWdIbTdVQkVWQUpUd0FlZXZjWHNUYzUxWVRoTEgxV2hOanE0ZExqY3UweVVXUytSczlKMG1ubkJiNk1xZ1hVUjJCM1JVdUN1c3JmajR1dDRaZ3RtTTNKZXdxbmQwNGl0SDdqeERUa3BkZ2hndlhHWjdKVWxVdUNnVHlBMWs4RC9GMkFBRThiQmo4ZDRkQzRBQUFBQVNVVk9SSzVDWUlJPScpIG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIiwKYi5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTt0aGlzLndhPXRoaXMuZWEuYXBwZW5kQ2hpbGQoYik7dGhpcy5iLllmKGZ1bmN0aW9uKGEpe3RoaXMud2Euc3R5bGUuaGVpZ2h0PWEuaGVpZ2h0KyJweCJ9LmJpbmQodGhpcykpOyJ2cGFpZCIhPWEmJnRoaXMuYi5mLnZhJiZ0aGlzLmIuZi52YSgpJiYoZS52KGsuamcsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSx0aGlzLk5lKCkpO3RoaXMueWIoKX19LHliOmZ1bmN0aW9uKCl7dGhpcy5jb250cm9scy5zdHlsZS5kaXNwbGF5PSJub25lIn0sWWI6ZnVuY3Rpb24oKXt0aGlzLndhJiYiYmxvY2siPT10aGlzLndhLnN0eWxlLmRpc3BsYXl8fHRoaXMuQWZ8fCh0aGlzLmNvbnRyb2xzLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9LFBoOmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy5iLkYucGF1c2VkPyh0aGlzLmIuRi5wbGF5KCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uLAp0aGlzLnRyYWNrKCJyZXN1bWUiLCEwKSxlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSk6KHRoaXMuYi5GLnBhdXNlKCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24sdGhpcy50cmFjaygicGF1c2UiLCEwKSxlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnliKCksdGhpcy54YigpKSl9LFFoOmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy5nYz8oZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJwbGF5IiksdGhpcy53YSYmKHRoaXMud2Euc3R5bGUuZGlzcGxheT0ibm9uZSIpLGEmJihhLmlubmVySFRNTD10aGlzLmNvbmYucGF1c2VCdXR0b24pLHRoaXMuZ2M9ITEpOihlLm1hKHRoaXMuSCwiY29udHJvbCIsCiJwYXVzZSIpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnliKCksdGhpcy54YigpKSxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24pLHRoaXMuZ2M9ITApfSx6ZDpmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRGIpO3RoaXMuYi5GLnBhdXNlZHx8KHRoaXMuYi5GLnBhdXNlKCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24sdGhpcy50cmFjaygicGF1c2UiLCEwKSxlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKX0semg6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRiKTt0aGlzLmIuRi5wYXVzZWQmJih0aGlzLmIuRi5wbGF5KCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uLHRoaXMudHJhY2soInJlc3VtZSIsITApLGUudihrLlVjLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSwKdGhpcy5DKCkpKX0sQXU6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkJiKTt0aGlzLmIuRi5tdXRlZD8odGhpcy5iLkYubXV0ZWQ9ITEsYS5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b24sdGhpcy50cmFjaygidW5tdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfdW5tdXRlZCIsInVzZXIiLCEwKSxlLnYoay50Zix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKToodGhpcy5iLkYubXV0ZWQ9ITAsYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJ1c2VyIiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSl9LEJ1OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYik7dGhpcy5wYj8oZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJ1bm11dGUiKSwKdGhpcy5wYj0hMSxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b24pKTooZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJtdXRlIiksdGhpcy5wYj0hMCxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbikpfSxOZTpmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuQmIpO3RoaXMuYi5GLm11dGVkfHwodGhpcy5iLkYubXV0ZWQ9ITAsYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJjb250ZW50IiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSl9LEx1OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYik7dGhpcy5iLkYubXV0ZWQmJih0aGlzLmIuRi5tdXRlZD0hMSxhLmlubmVySFRNTD10aGlzLmNvbmYubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJ1bm11dGUiLAohMCksZS50cmFjaygic3RhdHNfaGRfdW5tdXRlZCIsImNvbnRlbnQiLCEwKSxlLnYoay50Zix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKX0sWGI6ZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5YYik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5YYik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuWGIpO3RoaXMuamR8fHRoaXMuVmN8fCh0aGlzLnZpZGVvLmxvYWQoKSx0aGlzLmtmKCkpfSxoZDpmdW5jdGlvbigpe3ZhciBhPSExLGI9bC5nZXRDb25maWcoKTsic3ZtcHJldmlldyI9PWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZikuYW5jaG9yJiYoYT0hMCxiLmFkRmFsbGJhY2tVUkx8fChiLmFkRmFsbGJhY2tVUkw9Imh0dHBzOi8vaGdjLWNmLWNhY2hlLTEuc3Zvbm0uY29tL3dlbGVjdC54bWwiKSk7ZS51YygpO2lmKChhfHwhdGhpcy5mZSYmCmIuYWRGYWxsYmFja1VSTCkmJiF0aGlzLlFlKXRoaXMuUWU9dGhpcy5maT10aGlzLkFmPSEwLGUudHJhY2soInN0YXRzX3d0X3N0YXJ0IiwiIiwhMCksdGhpcy5mZT0hMCxhPWUuJGYoYi5hZEZhbGxiYWNrVVJMLHRoaXMuTCwhMSx7b25seVVSTDohMH0pLHRoaXMuSWUoYSwhMCwhMSx7aG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3M6ITB9KTtlbHNlIGlmKHRoaXMuamQ9ITAsdGhpcy5zYiYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5zYiksdGhpcy5zYj0hMSksKCJwcmVyb2xsIj09ZS5TYSYmdGhpcy5WY3x8InBvc3Ryb2xsIj09ZS5TYSkmJnRoaXMuY29uZi5wb3N0QWRJZnJhbWVVcmwpaWYoYT10aGlzLmNvbmYucG9zdEFkSWZyYW1lVXJsLCJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoYT1hKGUuU2EpKSwic3RyaW5nIj09dHlwZW9mIGEmJmEpe2ZvcihiPXRoaXMuYi5HO2IuZmlyc3RDaGlsZDspYi5yZW1vdmVDaGlsZChiLmZpcnN0Q2hpbGQpO2IucGFyZW50fHx0aGlzLmIuSmMoKTsKdmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Yy5zZXRBdHRyaWJ1dGUoInNyYyIsYSk7Yy5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Muc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7Yy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAwIG5vbmU7b3V0bGluZTogbm9uZTsiKTtiLmFwcGVuZENoaWxkKGMpO3ZhciBmPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihhKXtpZigiY29udGludWUiPT1hLmRhdGEpe3RoaXMua2QoKTthPU1hdGgucm91bmQoKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWYpLzFFMyk7dmFyIGI9IiI7MTxhJiYoYj0iZ3QxIik7NTxhJiYoYj0iZ3Q1Iik7MTA8YSYmKGI9Imd0MTAiKTsyMDxhJiYoYj0iZ3QyMCIpO2UudHJhY2soInN0YXRzX2hkX3Bvc3RJZnJhbWVDbG9zZWQiLGIsITApfX0uYmluZCh0aGlzKSk7ZS50cmFjaygic3RhdHNfaGRfcG9zdElmcmFtZU9wZW5lZCIsCiIiLCEwKX1lbHNlIHRoaXMua2QoKTtlbHNlIHRoaXMua2QoKX0sa2Q6ZnVuY3Rpb24oYSl7dGhpcy4kdCgpJiYhYT93aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMua2QoITApfS5iaW5kKHRoaXMpLHRoaXMuR3MpOih0aGlzLmxmPSEwLHRoaXMuYi53ZSgpLHRoaXMuYi5wdCgpLHRoaXMuVWI9ITEsZS52KGsuUG8sdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSx0aGlzLnNlKCkueWgoKSl9LHNlOmZ1bmN0aW9uKCl7dmFyIGE9bnVsbDt0aGlzLmImJnRoaXMuYi5mJiYoYT10aGlzLmIuZik7cmV0dXJuIGF9LERlOmZ1bmN0aW9uKCl7dmFyIGE9ITE7dHJ5e25ldyBBY3RpdmVYT2JqZWN0KCJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFzaCIpJiYoYT0hMCl9Y2F0Y2goYil7bmF2aWdhdG9yLm1pbWVUeXBlcyYmdm9pZCAwIT1uYXZpZ2F0b3IubWltZVR5cGVzWyJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCJdJiZuYXZpZ2F0b3IubWltZVR5cGVzWyJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCJdLmVuYWJsZWRQbHVnaW4mJgooYT0hMCl9cmV0dXJuIGF9LGFnOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5IYSgibWluVmlzIik7YSYmKGUuQmUodGhpcy52aWRlbyxhKT90aGlzLnpoKCk6dGhpcy56ZCgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5hZygpfS5iaW5kKHRoaXMpLDEwMCkpfSxCOmZ1bmN0aW9uKCl7dmFyIGE9e307dGhpcy5jJiYoYS5jbGlja3Rocm91Z2g9dGhpcy5jLk9iLGEuZHVyYXRpb249dGhpcy5jLmR1cmF0aW9uLGEuYWRQb2Q9dGhpcy5jLnJiLHRoaXMudmlkZW8mJnRoaXMudmlkZW8uY3VycmVudFRpbWUmJihhLmN1cnJlbnRUaW1lPXRoaXMudmlkZW8uY3VycmVudFRpbWUpLHRoaXMubGMmJjA8dGhpcy5sYy5sZW5ndGgmJihhLmFkSWRzPXRoaXMubGMpKTt0aGlzLnZpZGVvJiZ0aGlzLnZpZGVvLmR1cmF0aW9uJiYoYS52aWRlb19kdXJhdGlvbj10aGlzLnZpZGVvLmR1cmF0aW9uKTtyZXR1cm4gYX0sQzpmdW5jdGlvbigpe3ZhciBhPXt9O2EuYWRzZXNzaW9uX2lkPXRoaXMuYm8rCiItIit0aGlzLmpmO3RoaXMuYyYmdGhpcy5jLkRnJiYoYS5ob21hZEltcHJlc3Npb25BZElkPXRoaXMuYy5EZygpKTtyZXR1cm4gYX0sb2c6ZnVuY3Rpb24oKXt9fX0pKHRoaXMpO3ZhciBRYT1jLllqfHxRYTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy55cz10aGlzLmFbMV07dGhpcy5HcD10aGlzLmFbNV07dGhpcy5qPXRoaXMuYVs4XX1jLk5pPWI7Yi5wcm90b3R5cGU9e3hzOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy55czp0aGlzLkZwKGEpfSxGcDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuR3A6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuajphfX19KShjKTt2YXIgUmE9Yy5OaXx8UmEsd2M9bmV3IFJhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwKIlooVFREWlRSUiIpO3dpbmRvdy5EPXdjLnhzKDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsYixjLGQpe3RoaXMub3B0aW9ucz1kfHx7fTtoPWM7dGhpcy5wYXJlbnQ9YTt0aGlzLnVybD1iO3RoaXMuRWE9bnVsbDt0aGlzLlc9W107dGhpcy5VPW51bGw7dGhpcy5rYz10aGlzLm1jPSExO3RoaXMuc2E9IiI7dGhpcy56Zj0hMTtkJiZkLmVtcHR5P3RoaXMuTXIoJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+PFZBU1QgdmVyc2lvbj0iMy4wIj48L1ZBU1Q+Jyk6dGhpcy5sb2FkKCl9dmFyIGE9MCxoLGQ9W107Yy52bT1iO2IucHJvdG90eXBlPXtsb2FkOmZ1bmN0aW9uKCl7dmFyIGE9ZS51YygpLGI7Yj1lLmxhKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpO3ZhciBjPSIiO2IucXVlcnlLZXkmJihjPWIucXVlcnlLZXkuaHZwKTtjJiYodGhpcy5vcHRpb25zLnZwYWlkPSEwKTtiPXRoaXMub3B0aW9ucy5rZWVwVVJMP25ldyB5KHRoaXMudXJsKTpsLnphKGwuS2QodGhpcy51cmwpLAohMSx0aGlzLm9wdGlvbnMudXNlQWRUYWdQYXJhbWV0ZXIpO2lmKHRoaXMub3B0aW9ucy52cGFpZCYmIWUuVGEoKSYmKGEuaXNDaHJvbWV8fGEuaXNGaXJlZm94KSYmIWEuaXNFZGdlfHxjKXthPWUubGcodGhpcy51cmwpO2F8fChhPXRoaXMudXJsKTtpZigwPD1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoIm1hcnRoYXN0ZXdhcnQiKSYmdGhpcy5vcHRpb25zLkFkU3lzdGVtJiYiR0RGUCI9PXRoaXMub3B0aW9ucy5BZFN5c3RlbXx8ImFwcHNwb3QiPT1jfHwwPGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZigiZmFuZG9tLmNvbSIpJiYwPGEuaW5kZXhPZigicHViYWRzLmcuZG91YmxlY2xpY2submV0LyIpKTA8YS5pbmRleE9mKCJnb29nbGVhZHMuZy5kb3VibGVjbGljay5uZXQvcGFnZWFkL2FkcyIpfHwiYXBwc3BvdCI9PWN8fDA8ZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKCJmYW5kb20uY29tIikmJjA8YS5pbmRleE9mKCJwdWJhZHMuZy5kb3VibGVjbGljay5uZXQvIik/Cih0aGlzLnVybD0iaHR0cHM6Ly9pbWEzdnBhaWQuYXBwc3BvdC5jb20vP2FkVGFnVXJsPSIrZW5jb2RlVVJJQ29tcG9uZW50KGwuS2QoYSkpKyImdHlwZT1qcyIsYj1sLnphKGwuS2QodGhpcy51cmwpLCExLHRoaXMub3B0aW9ucy51c2VBZFRhZ1BhcmFtZXRlciksYi5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9ImNvbWFwcHNwb3RpbWEzdnBhaWQiKTpiPWwuemEobC5LZChhKSwhMSx0aGlzLm9wdGlvbnMudXNlQWRUYWdQYXJhbWV0ZXIpO2IuZGF0YS5ob21hZF92cGFpZF9jb21wYXRpYmxlPSJ0cnVlIjt0aGlzLm9wdGlvbnMuaG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3MmJihiLmRhdGEuaG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3M9Ik1lZGlhZmlsZSIpfWwuTGEoYix0aGlzLkxyLmJpbmQodGhpcyksdGhpcy5Jci5iaW5kKHRoaXMpKX0sQWc6ZnVuY3Rpb24oKXt2YXIgYT0wPHRoaXMuRWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6VkFTVEFkRGF0YSIpLmxlbmd0aD8KW106W10uc2xpY2UuY2FsbCh0aGlzLkVhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJBZCIpKTsiUGxheWxpc3QiPT10aGlzLkVhLmZpcnN0Q2hpbGQubm9kZU5hbWUmJmEuZm9yRWFjaChmdW5jdGlvbihhLGIsYyl7aWYoMT09YS5jaGlsZE5vZGVzLmxlbmd0aClpZihhLnBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09ZS5TYSl0cnl7dmFyIGQ9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoJzxBZCBzZXF1ZW5jZT0iJysoYisxKSsnIj48V3JhcHBlcj48VkFTVEFkVGFnVVJJPjwhW0NEQVRBWycrYS50ZXh0Q29udGVudC50cmltKCkrIl1dXHgzZTwvVkFTVEFkVGFnVVJJPjwvV3JhcHBlcj48L0FkPiIsInRleHQveG1sIik7Y1tiXT1kLmZpcnN0Q2hpbGR9Y2F0Y2goZil7Y1tiXT17fX1lbHNlIGMuc3BsaWNlKGIsMSl9KTt2YXIgYj1bXS5zbGljZS5jYWxsKHRoaXMuRWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6QWRCcmVhayIpKTswPj1iLmxlbmd0aCYmCihiPVtdLnNsaWNlLmNhbGwodGhpcy5FYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWRCcmVhayIpKSk7dmFyIGM9W107Yi5mb3JFYWNoKGZ1bmN0aW9uKGEsYixkKXtpZigic3RhcnQiPT1hLmdldEF0dHJpYnV0ZSgidGltZU9mZnNldCIpJiYicHJlcm9sbCI9PWUuU2F8fCJlbmQiPT1hLmdldEF0dHJpYnV0ZSgidGltZU9mZnNldCIpJiYicG9zdHJvbGwiPT1lLlNhfHx0aGlzLm9yKGEuZ2V0QXR0cmlidXRlKCJ0aW1lT2Zmc2V0IikpfHxsLml1KCkpdHJ5e3ZhciBmPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6QWRUYWdVUkkiKTswPj1mLmxlbmd0aCYmKGY9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWRUYWdVUkkiKSk7dmFyIGg9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoJzxBZCBzZXF1ZW5jZT0iJysoYisxKSsnIj48V3JhcHBlcj48VkFTVEFkVGFnVVJJPjwhW0NEQVRBWycrZlswXS50ZXh0Q29udGVudC50cmltKCkrIl1dXHgzZTwvVkFTVEFkVGFnVVJJPjwvV3JhcHBlcj48L0FkPiIsCiJ0ZXh0L3htbCIpO2RbYl09aC5maXJzdENoaWxkO2MucHVzaChoKX1jYXRjaChnKXtmb3IoYT1bXS5zbGljZS5jYWxsKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkIikpLGI9MDtiPGEubGVuZ3RoO2IrKyljLnB1c2goYVtiXSl9fS5iaW5kKHRoaXMpKTthPWEuY29uY2F0KGMpO3JldHVybiBhPWEuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgic2VxdWVuY2UiKT9OdW1iZXIoYS5nZXRBdHRyaWJ1dGUoInNlcXVlbmNlIikpPE51bWJlcihiLmdldEF0dHJpYnV0ZSgic2VxdWVuY2UiKSk/LTE6MTowfSl9LG9yOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMub3B0aW9ucy5jb250ZW50VmlkZW8sYz10aGlzLm9wdGlvbnMudGltZU9mZnNldERlbHRhfHwxMCxkPTA7aWYoIShhJiZiJiZiLmR1cmF0aW9uJiZiLmN1cnJlbnRUaW1lKSlyZXR1cm4hMTswPD1hLmluZGV4T2YoIiUiKT9kPWIuZHVyYXRpb24vMTAwKnBhcnNlSW50KGEpOjA8PWEuaW5kZXhPZigiOiIpJiYKKDA8PWEuaW5kZXhPZigiLiIpJiYoYT1hLnN1YnN0cmluZygwLGEuaW5kZXhPZigiLiIpKSksYT1hLnNwbGl0KCI6IiksYT1hLnJldmVyc2UoKSxkPXBhcnNlSW50KGFbMF0pKzYwKnBhcnNlSW50KGFbMV0pKzM2MDAqcGFyc2VJbnQoYVsyXSkpO3JldHVybiBkJiZNYXRoLmFicyhkLXBhcnNlSW50KGIuY3VycmVudFRpbWUpKTw9Yz8hMDohMX0sTHI6ZnVuY3Rpb24oYSl7dGhpcy5mdChhKTt0cnl7dGhpcy5FYT1hLnJlc3BvbnNlWE1MLHRoaXMuRWF8fCh0aGlzLkVhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEucmVzcG9uc2VUZXh0LCJ0ZXh0L3htbCIpKX1jYXRjaChiKXt0aGlzLm9hKHRoaXMuUmEody5WZCkpfXRoaXMuVz10aGlzLkFnKCk7dGhpcy5tYz10aGlzLm9mKCk7dGhpcy5rYz10aGlzLkxoKCk7dGhpcy5XLmxlbmd0aD90aGlzLkZjKCk6dGhpcy5vYSh0aGlzLlJhKHcuT2Mse2Vycm9yOnRoaXMuemY/Ri5VZDpGLkdmfSkpfSxNcjpmdW5jdGlvbihhKXt0cnl7dGhpcy5FYXx8Cih0aGlzLkVhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEsInRleHQveG1sIikpfWNhdGNoKGIpe3RoaXMub2EodGhpcy5SYSh3LlZkKSl9dGhpcy5XPXRoaXMuQWcoKTt0aGlzLm1jPXRoaXMub2YoKTt0aGlzLmtjPXRoaXMuTGgoKTt0aGlzLlcubGVuZ3RoP3RoaXMuRmMoKTp0aGlzLm9hKHRoaXMuUmEody5PYyx7ZXJyb3I6dGhpcy56Zj9GLlVkOkYuR2Z9KSl9LElyOmZ1bmN0aW9uKCl7dGhpcy5vYSh0aGlzLlJhKHcuRmYse2RlcHRoOmF9KSl9LEZjOmZ1bmN0aW9uKCl7dGhpcy5VPXRoaXMuVy5zaGlmdCgpO3RoaXMucXIoKT90aGlzLnN1KCk/KGErKyxuZXcgYih0aGlzLHRoaXMuSWcoKSxoLHtBZFN5c3RlbTp0aGlzLlpwKCksdnBhaWQ6dGhpcy5vcHRpb25zLnZwYWlkfSkpOnRoaXMub2EodGhpcy5SYSh3LklmKSk6KGE9MCx0aGlzLlF1KCkmJnRoaXMuVGUodGhpcy5SbygpKSl9LE9lOmZ1bmN0aW9uKCl7dGhpcy5tYz8odGhpcy5tYz0xPHRoaXMuVy5sZW5ndGgsCnRoaXMuVy5sZW5ndGgmJnRoaXMuRmMoKSk6dGhpcy5wYXJlbnQuT2UoKX0sa2g6ZnVuY3Rpb24oKXt0aGlzLmtjPyh0aGlzLmtjPTE8dGhpcy5XLmxlbmd0aCx0aGlzLlcubGVuZ3RoJiZ0aGlzLkZjKCkpOnRoaXMucGFyZW50LmtoKCl9LFF1OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHUoKT90aGlzLm91KCk/ITA6KC0xIT10aGlzLnljKCk/dGhpcy5vYSh0aGlzLlJhKHcuQmYpKTp0aGlzLm9hKHRoaXMuUmEody5qaikpLCExKToodGhpcy5vYSh0aGlzLlJhKHcuT2MsRi5IZikpLCExKX0sVGU6ZnVuY3Rpb24oYSl7dGhpcy5zYXx8KHRoaXMuc2E9IiIpO2EuT2E9YS5PYS5jb25jYXQodGhpcy5LZSgpKTthLnJiPWEucmI/YS5yYjp0aGlzLm1jO2EuamM9YS5qYz9hLmpjOnRoaXMua2M7YS5XYT1hLldhP2EuV2E6LTEhPXRoaXMuc2EuaW5kZXhPZigic21hcnRjbGlwLm5ldCIpJiYhdGhpcy5vcHRpb25zLndnO3RoaXMucGFyZW50LlRlKGEpfSxSbzpmdW5jdGlvbigpe3ZhciBhPW5ldyBTYTsKdGhpcy5zYXx8KHRoaXMuc2E9IiIpO2EuZHVyYXRpb249dGhpcy55YygpO2EuTT10aGlzLkZnKCk7YS5PYj10aGlzLmJxKCk7YS5vcmlnaW49dGhpczthLkE9dGhpcy5ZcCgpO2EuaGY9dGhpcy5ycShhLmR1cmF0aW9uKTthLldhPWEuV2E/YS5XYTotMSE9dGhpcy5zYS5pbmRleE9mKCJzbWFydGNsaXAubmV0IikmJiF0aGlzLm9wdGlvbnMud2c7cmV0dXJuIGF9LG9hOmZ1bmN0aW9uKGIpe3RoaXMuc2F8fCh0aGlzLnNhPSIiKTtiLldhPWIuV2E/Yi5XYTotMSE9dGhpcy5zYS5pbmRleE9mKCJzbWFydGNsaXAubmV0IikmJiF0aGlzLm9wdGlvbnMud2c7dGhpcy5VJiYoYi5PYT1iLmVycm9yLmNvZGUhPXcuQmYuY29kZT9iLk9hLmNvbmNhdCh0aGlzLmNxKCkpOmIuT2EuY29uY2F0KHRoaXMubHEoKSkpO3RoaXMuVy5sZW5ndGg/KHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5RYiYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucGFyZW50LlFiJiZ0aGlzLnBhcmVudC5RYihiKSxhPTAsdGhpcy5GYygpKToKKHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5vYSYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucGFyZW50Lm9hJiZ0aGlzLnBhcmVudC5vYShiKSxhPTApfSxRYjpmdW5jdGlvbihhKXt0aGlzLnBhcmVudC5RYihhKX0scWc6ZnVuY3Rpb24oYSxiKXt0aGlzLm9hKHRoaXMuUmEoYSxiKSl9LFJhOmZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IFRhKGEsYik7Yy5vcmlnaW49dGhpcztyZXR1cm4gY30sc3U6ZnVuY3Rpb24oKXtyZXR1cm4gYTxofSxwdTpmdW5jdGlvbigpe3JldHVybiAwPHRoaXMuRmcoKS5sZW5ndGh9LG91OmZ1bmN0aW9uKCl7cmV0dXJuIDE8dGhpcy55YygpfSxvZjpmdW5jdGlvbigpe3JldHVybiAxPHRoaXMuVy5maWx0ZXIoZnVuY3Rpb24oYSl7dmFyIGI9ITE7YS5nZXRBdHRyaWJ1dGUmJihiPTA8TnVtYmVyKGEuZ2V0QXR0cmlidXRlKCJzZXF1ZW5jZSIpKSk7cmV0dXJuIGJ9KS5sZW5ndGh9LExoOmZ1bmN0aW9uKCl7dmFyIGE9ITE7dGhpcy5XJiYyPD10aGlzLlcubGVuZ3RoJiYKIXRoaXMub2YoKSYmKGE9ITApO3JldHVybiBhfSxmdDpmdW5jdGlvbihhKXt0aGlzLnNhPSJVTktOT1dOIjt0cnl7ZC5wdXNoKHRoaXMuc2E9YS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1VcmwiKSl9Y2F0Y2goYil7dGhpcy5zYT0iVU5LTk9XTiJ9dHJ5e3RoaXMuemY9YS5nZXRSZXNwb25zZUhlYWRlciYmYS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1WcGFpZC1JZ25vcmVkIil9Y2F0Y2goYyl7fX0scXI6ZnVuY3Rpb24oKXtyZXR1cm4gMDx0aGlzLklnKCkubGVuZ3RofSxJZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlKHRoaXMuVSwiVkFTVEFkVGFnVVJJIil9LFpwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmUodGhpcy5VLCJBZFN5c3RlbSIpfSxLZTpmdW5jdGlvbigpe2Zvcih2YXIgYT0iSW1wcmVzc2lvbiBUcmFja2luZyBDbGlja1RyYWNraW5nIEVycm9yIFZpZXdhYmxlIE5vdFZpZXdhYmxlIHZpZXdhYmxlX2ltcHJlc3Npb24gbWVhc3VyYWJsZV9pbXByZXNzaW9uIi5zcGxpdCgiICIpLApiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtbXS5zbGljZS5jYWxsKHRoaXMuVS5nZXRFbGVtZW50c0J5VGFnTmFtZShkKSkuZm9yRWFjaChmdW5jdGlvbihhKXtpZihhJiYhdGhpcy5WZyhhKSl7dmFyIGM9YS5nZXRBdHRyaWJ1dGUoImV2ZW50Iil8fGQudG9Mb3dlckNhc2UoKTtiLnB1c2goe3R5cGU6Yyx1cmw6dGhpcy5pYihhKX0pfX0uYmluZCh0aGlzKSl9cmV0dXJuIGJ9LFZnOmZ1bmN0aW9uKGEpe3JldHVybiBhPyJDb21wYW5pb24iPT1hLm5vZGVOYW1lPyEwOnRoaXMuVmcoYS5wYXJlbnROb2RlKTohMX0sbHE6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLktlKCk7cmV0dXJuIGE9YS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuImltcHJlc3Npb24iPT1hLnR5cGV9KX0sY3E6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLktlKCk7cmV0dXJuIGE9YS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuImVycm9yIj09YS50eXBlfSl9LGJxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWIodGhpcy5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJDbGlja1Rocm91Z2giKVswXSl9LApGZzpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIk1lZGlhRmlsZSIpLGI9W10sYz0wO2M8YS5sZW5ndGg7YysrKWIucHVzaCh7aWQ6YVtjXS5nZXRBdHRyaWJ1dGUoImlkIiksdHlwZTphW2NdLmdldEF0dHJpYnV0ZSgidHlwZSIpLFBhOmFbY10uZ2V0QXR0cmlidXRlKCJiaXRyYXRlIiksd2lkdGg6YVtjXS5nZXRBdHRyaWJ1dGUoIndpZHRoIiksaGVpZ2h0OmFbY10uZ2V0QXR0cmlidXRlKCJoZWlnaHQiKSxUdjphW2NdLmdldEF0dHJpYnV0ZSgiZGVsaXZlcnkiKSx1cmw6dGhpcy5pYihhW2NdKX0pO3ZhciBkPXRoaXMub3B0aW9ucy5QYXx8MUUzO3RyeXt2YXIgaD1iLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4tMSE9YS50eXBlLmluZGV4T2YoIm1wNCIpfSkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBNYXRoLmFicyhkLWEuUGEpLU1hdGguYWJzKGQtYi5QYSl9KSxlPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybi0xPT1hLnR5cGUuaW5kZXhPZigibXA0Iil9KS5zb3J0KGZ1bmN0aW9uKGEsCmIpe3JldHVybiBNYXRoLmFicyhkLWEuUGEpLU1hdGguYWJzKGQtYi5QYSl9KSxiPWguY29uY2F0KGUpfWNhdGNoKGcpe31yZXR1cm4gYn0sWXA6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImFkUGFyYW1ldGVycyIpO2EmJjAhPWEubGVuZ3RofHwoYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkUGFyYW1ldGVycyIpKTtmb3IodmFyIGI9IiIsYz0hMSxkPVtdLGI9ITEsaD0iIixlPVtdLGc9IiIsZz0wO2c8YS5sZW5ndGg7ZysrKXtoPWI9dGhpcy5xZChhW2ddKTt0cnl7Yz1KU09OLnBhcnNlKGIpfWNhdGNoKGspe2M9Yn1kLnB1c2goYyk7ZS5wdXNoKGgpfTE8YS5sZW5ndGg/KGI9ZCxnPWgpOihiPWMsZz1lKTtyZXR1cm57QWRQYXJhbWV0ZXJzOmIsT3JpZ2luYWxBZFBhcmFtZXRlcnM6Zy50b1N0cmluZygpfX0seWM6ZnVuY3Rpb24oKXt2YXIgYTt0cnl7cmV0dXJuIGE9dGhpcy5pYih0aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkR1cmF0aW9uIilbMF0pLAphPWEuc3BsaXQoIjoiKSxhPTM2MDAqK2FbMF0rNjAqK2FbMV0rICthWzJdLGlzTmFOKGEpPy0xOmF9Y2F0Y2goYil7cmV0dXJuLTF9fSxycTpmdW5jdGlvbihhKXt2YXIgYj0hMSxjPSExLGQ9ITE7dHJ5e2M9dGhpcy5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJMaW5lYXIiKVswXSxkPWMuZ2V0QXR0cmlidXRlKCJza2lwb2Zmc2V0IiksYj1lLld0KGQsYSksMD5iJiYoYj0hMSl9Y2F0Y2goaCl7Yj0hMX1yZXR1cm4gYn0scmU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZhLmdldEVsZW1lbnRzQnlUYWdOYW1lKGIpLmxlbmd0aD90aGlzLmliKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYilbMF0pOiIifSx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5jaGlsZE5vZGVzJiZhLmNoaWxkTm9kZXNbMF0/YS5jaGlsZE5vZGVzWzBdLm5vZGVWYWx1ZToiIn0saWI6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5xZChhKToiIn0scWQ6ZnVuY3Rpb24oYSl7dmFyIGI9CnRoaXMudWUoYSk7YiYmKGI9Yi50cmltKCkpOyFiJiZhLnRleHRDb250ZW50JiYoYj1hLnRleHRDb250ZW50LGI9Yi50cmltKCkpO3JldHVybiBifX19KShjKTt2YXIgVD1jLnZtfHxUO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLiRyPXRoaXMuYVs1XTt0aGlzLnBpPXRoaXMuYVszXTt0aGlzLkNvPXRoaXMuYVs2XTt0aGlzLmVqPXRoaXMuYVsxXTt0aGlzLm5uPXRoaXMuYVs2XTt0aGlzLnFsPXRoaXMuYVs4XTt0aGlzLktpPXRoaXMuYVsxXTt0aGlzLkFpPXRoaXMuYVs4XTt0aGlzLmo9dGhpcy5hWzddfWMuTnE9YjtiLnByb3RvdHlwZT17WnI6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLiRyOnRoaXMub2koYSl9LG9pOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5waTp0aGlzLkJvKGEpfSxCbzpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuQ286dGhpcy5kaihhKX0sCmRqOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5lajp0aGlzLm1uKGEpfSxtbjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMubm46dGhpcy5wbChhKX0scGw6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLnFsOnRoaXMuSmkoYSl9LEppOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5LaTp0aGlzLnppKGEpfSx6aTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuQWk6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBVYT1jLk5xfHxVYSx4Yz1uZXcgVWEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD14Yy5acig0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuZHVyYXRpb249MDt0aGlzLk9hPVtdO3RoaXMuTT1bXTt0aGlzLk9iPSIiO3RoaXMuQT10aGlzLmpjPXRoaXMucmI9ITE7dGhpcy54ZT0KdGhpcy5vcmlnaW49bnVsbDt0aGlzLnllPSIifWMucmw9YjtiLnByb3RvdHlwZT17TW86ZnVuY3Rpb24oKXtmb3IodmFyIGE9ITEsYj0wO2I8dGhpcy5NLmxlbmd0aDtiKyspaWYoMDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24vZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC9lY21hc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQvamF2YXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJ0ZXh0L2pzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC94LWVjbWFzY3JpcHQiKXx8CjA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1qYXZhc2NyaXB0IikpYT0hMDtyZXR1cm4gYX0sanE6ZnVuY3Rpb24oKXtpZighdGhpcy54ZSYmdGhpcy5vcmlnaW4mJnRoaXMub3JpZ2luLkVhKXt2YXIgYT10aGlzLm9yaWdpbi5FYTtpZihhLmdldEVsZW1lbnRzQnlUYWdOYW1lKWZvcih2YXIgYT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJbXByZXNzaW9uIiksYj0iIixjPTA7YzxhLmxlbmd0aDtjKyspKGI9YVtjXS5nZXRBdHRyaWJ1dGUoImlkIikpJiYwPD1iLmluZGV4T2YoIkhPTUFEIikmJih0aGlzLnhlPWFbY10pfXJldHVybiB0aGlzLnhlfSxEZzpmdW5jdGlvbigpe2lmKHRoaXMueWUpcmV0dXJuIHRoaXMueWU7dmFyIGE9IiI7KGE9dGhpcy5qcSgpKSYmYS5nZXRBdHRyaWJ1dGU/KGE9YS5nZXRBdHRyaWJ1dGUoImlkIiksYT1hLnJlcGxhY2UoIkhPTUFEXyIsIiIpLChhPWEucmVwbGFjZSgiSE9NQUQiLCIiKSl8fChhPSJlbXB0eSIpKTphPSJub19pbXBfbm9kZSI7CnJldHVybiB0aGlzLnllPWF9LHVxOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPSExLGI9MDtiPHRoaXMuTS5sZW5ndGg7YisrKWlmKDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24vamF2YXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQvZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJ0ZXh0L2phdmFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC9qc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1lY21hc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1qYXZhc2NyaXB0IikpYT0KdGhpcy5NW2JdO3JldHVybiBhfX19KShjKTt2YXIgU2E9Yy5ybHx8U2E7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMudW09dGhpcy5hWzldO3RoaXMuSHE9dGhpcy5hWzZdO3RoaXMucXA9dGhpcy5hWzddO3RoaXMubXM9dGhpcy5hWzldO3RoaXMuYWw9dGhpcy5hWzRdO3RoaXMuVnA9dGhpcy5hWzEwXTt0aGlzLmVyPXRoaXMuYVs2XTt0aGlzLmo9dGhpcy5hWzVdfWMucmo9YjtiLnByb3RvdHlwZT17dG06ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnVtOnRoaXMuR3EoYSl9LEdxOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5IcTp0aGlzLnBwKGEpfSxwcDpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMucXA6dGhpcy5scyhhKX0sbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLm1zOnRoaXMuJGsoYSl9LCRrOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5hbDoKdGhpcy5VcChhKX0sVXA6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLlZwOnRoaXMuZHIoYSl9LGRyOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5lcjp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLmo6YX19fSkoYyk7dmFyIFZhPWMucmp8fFZhLHljPW5ldyBWYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXljLnRtKDQpO3ZhciB3PXtWZDp7dHlwZToiZXJyb3IiLGNvZGU6MTAwLG1lc3NhZ2U6IlhNTCBwYXJzaW5nIGVycm9yIix4YToiWE1MX1BBUlNFX0VSUk9SIn0samo6e3R5cGU6ImVycm9yIixjb2RlOjIwMixtZXNzYWdlOiJWaWRlbyBwbGF5ZXIgZXhwZWN0aW5nIGRpZmZlcmVudCBkdXJhdGlvbi4iLHhhOiJEVVJBVElPTl9FUlJPUiJ9LE9jOnt0eXBlOiJlcnJvciIsY29kZTozMDMsbWVzc2FnZToiTm8gYWRzIFZBU1QgcmVzcG9uc2UgYWZ0ZXIgb25lIG9yIG1vcmUgV3JhcHBlcnMuIEFsc28gaW5jbHVkZXMgbnVtYmVyIG9mIGVtcHR5IFZBU1QgcmVzcG9uc2VzIGZyb20gZmFsbGJhY2suIiwKeGE6IkVNUFRZX1ZBU1QifSxJZjp7dHlwZToiY3JpdGljYWwiLGNvZGU6MzAyLG1lc3NhZ2U6IldyYXBwZXIgbGltaXQgcmVhY2hlZCwgYXMgZGVmaW5lZCBieSB0aGUgdmlkZW8gcGxheWVyLiBUb28gbWFueSBXcmFwcGVyIHJlc3BvbnNlcyBoYXZlIGJlZW4gcmVjZWl2ZWQgd2l0aCBubyBJbkxpbmUgcmVzcG9uc2UuIix4YToiV1JBUFBFUl9MSU1JVF9SRUFDSEVEIn0sRmY6e3R5cGU6ImVycm9yIixjb2RlOjMwMSxtZXNzYWdlOiJUaW1lb3V0IG9mIFZBU1QgVVJJIHByb3ZpZGVkIGluIFdyYXBwZXIgZWxlbWVudCwgb3Igb2YgVkFTVCBVUkkgcHJvdmlkZWQgaW4gYSBzdWJzZXF1ZW50IFdyYXBwZXIgZWxlbWVudC4gSW5jbHVkZXMgcmVxdWVzdCBlcnJvcnMgc3VjaCBhcyBpbnZhbGlkIFVSSSwgdW5yZWFjaGFibGUgb3IgcmVxdWVzdCB0aW1lb3V0IGZvciBVUkksIGFuZCBzZWN1cml0eSBvciBvdGhlciBleGNlcHRpb25zIHJlbGF0ZWQgdG8gcmVxdWVzdGluZyBhIFZBU1QgVVJJLiIsCnhhOiJMT0FEX0VSUk9SIn0sVGQ6e3R5cGU6ImVycm9yIixjb2RlOjQwMyxtZXNzYWdlOiJDb3VsZCBub3QgZmluZCBNZWRpYUZpbGUgdGhhdCBpcyBzdXBwb3J0ZWQgYnkgdGhpcyB2aWRlbyBwbGF5ZXIsIGJhc2VkIG9uIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBNZWRpYUZpbGUgZWxlbWVudC4iLHhhOiJOT19QTEFZQUJMRV9TT1VSQ0VTIn0sS3Y6e3R5cGU6ImVycm9yIixjb2RlOjQwNSxtZXNzYWdlOiJQcm9ibGVtIGRpc3BsYXlpbmcgTWVkaWFGaWxlLiIseGE6Ik1FRElBRklMRV9FUlJPUiJ9LEJmOnt0eXBlOiJlcnJvciIsY29kZTo5OTksbWVzc2FnZToiMSBzZWMgZHVtbXkgYWQiLHhhOiJEVU1NWV9BRCJ9fSxGPXtHZjp7dHlwZToiZXJyb3IiLGNvZGU6MzAzMSxtZXNzYWdlOiJubyBhZHMiLHhhOiJOT19BRFMifSxIZjp7dHlwZToiZXJyb3IiLGNvZGU6MzAzMixtZXNzYWdlOiJubyBtZWRpYWZpbGVzIHNwZWNpZmllZCIseGE6Ik5PX01FRElBRklMRVMifSxMdjp7dHlwZToiZXJyb3IiLApjb2RlOjMwMzMsbWVzc2FnZToibm8gcGxheWFibGUgbWVkaWFmaWxlcyIseGE6Ik5PX1BMQVlBQkxFX01FRElBRklMRVMifSxVZDp7dHlwZToiZXJyb3IiLGNvZGU6MzAzNCxtZXNzYWdlOiJ2cGFpZCBpZ25vcmVkIix4YToiVlBBSURfSUdOT1JFRCJ9fTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5vcz10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs0XX1jLnJuPWI7Yi5wcm90b3R5cGU9e25zOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5vczp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLmo6YX19fSkoYyk7dmFyIFdhPWMucm58fFdhLHpjPW5ldyBXYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXpjLm5zKDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsCmIpe3RoaXMuZXJyb3I9YTt0aGlzLm1kPWI7dGhpcy5PYT1bXTt0aGlzLm9yaWdpbj1udWxsfWMuTGo9YjtiLnByb3RvdHlwZT17fX0pKGMpO3ZhciBUYT1jLkxqfHxUYTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5DbT10aGlzLmFbMV07dGhpcy5YcT10aGlzLmFbOV07dGhpcy5Pbj10aGlzLmFbNl07dGhpcy5TcD10aGlzLmFbNV07dGhpcy5Baz10aGlzLmFbOV07dGhpcy5SdD10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVs3XX1jLmNyPWI7Yi5wcm90b3R5cGU9e0JtOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuQ206dGhpcy5XcShhKX0sV3E6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLlhxOnRoaXMuTm4oYSl9LE5uOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Pbjp0aGlzLlJwKGEpfSxScDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuU3A6dGhpcy56ayhhKX0sCnprOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5Bazp0aGlzLlF0KGEpfSxRdDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuUnQ6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBYYT1jLmNyfHxYYSxBYz1uZXcgWGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1BYy5CbSg0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYihhLGIpe3RoaXMuY29uZj1ifHx7fTt0aGlzLmY9YTt0aGlzLmhiPWEuQmcoKTt0aGlzLkc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5HLmlkPWUuYmEoMTApO3RoaXMuRj1DLnBvcCgpO3RoaXMuRnx8KGUudHJhY2soInN0YXRzX2hkX25vVmlkZW9UYWdMZWZ0IiwiIiwhMCksdGhpcy5GPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIiksdGhpcy5GLmlkPQoiYWRYZGlzcGxheSIsdGhpcy5GLnN0eWxlLmRpc3BsYXk9ImJsb2NrIik7dGhpcy5EPXt9O3RoaXMuWmY9ITE7dGhpcy5OYj1bXX1jLnFqPWI7Yi5wcm90b3R5cGU9e1RwOmZ1bmN0aW9uKGEpe3ZhciBiPXt9LGM9ITEsZT0wLGI9MCxnPXt9O2EuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiYoYj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9ImZpeGVkIixlPWIubGVmdCxiPWIudG9wKTtnPXt4OmUseTpifTtnLnBvc2l0aW9uPWM7cmV0dXJuIGd9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuY29uZi51c2VCb3VuZGluZ0NsaWVudFJlY3QpcmV0dXJuIHRoaXMuVHAoYSk7Zm9yKHZhciBiPTAsYz0wLGU9ITEsZz10aGlzLk9xKGEpLGs9e307YTspYis9YS5vZmZzZXRMZWZ0K2EuY2xpZW50TGVmdCxjKz1hLm9mZnNldFRvcCthLmNsaWVudFRvcCxhPWEub2Zmc2V0UGFyZW50O2cmJihhPXZvaWQgMCE9PXdpbmRvdy5wYWdlWU9mZnNldD93aW5kb3cucGFnZVlPZmZzZXQ6KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8CmRvY3VtZW50LmJvZHkucGFyZW50Tm9kZXx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wLGIrPXZvaWQgMCE9PXdpbmRvdy5wYWdlWE9mZnNldD93aW5kb3cucGFnZVhPZmZzZXQ6KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlfHxkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0LGMrPWEsdGhpcy5jb25mLnBvc2l0aW9uSWZGaXhlZCYmKGU9dGhpcy5jb25mLnBvc2l0aW9uSWZGaXhlZCkpO2s9e3g6Yix5OmN9O2UmJihrLnBvc2l0aW9uPWUpO3JldHVybiBrfSxjdTpmdW5jdGlvbigpe3RoaXMuWmY9ITB9LFdoOmZ1bmN0aW9uKCl7dGhpcy5GPUMucG9wKCk7dGhpcy5GfHwoZS50cmFjaygic3RhdHNfaGRfbm9WaWRlb1RhZ0xlZnQiLCIiLCEwKSx0aGlzLkY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmlkZW8iKSx0aGlzLkYuaWQ9ImFkWGRpc3BsYXkiLHRoaXMuRi5zdHlsZS5kaXNwbGF5PSJibG9jayIpfSxwaDpmdW5jdGlvbigpe3RoaXMuZi5wYXVzZSgpOwplLnYoay5mZCx0aGlzLmYudSgpKX0scHQ6ZnVuY3Rpb24oKXt0aGlzLlpmfHwodGhpcy5mLnBsYXkoKSxlLnYoay5nZCx0aGlzLmYudSgpKSl9LEpjOmZ1bmN0aW9uKCl7dmFyIGE9MjE0NzQ4MzY0Nzt0aGlzLmNvbmYuekluZGV4JiYoYT10aGlzLmNvbmYuekluZGV4KTt0aGlzLmYucGF1c2UoKTt0aGlzLkcuc3R5bGUuekluZGV4PWE7dGhpcy5HLnN0eWxlLm1hcmdpbkxlZnQ9ImF1dG8iO3RoaXMuRy5zdHlsZS5tYXJnaW5SaWdodD0iYXV0byI7dGhpcy5HLnN0eWxlLmJhY2tncm91bmRDb2xvcj0iIzAwMDAwMCI7dGhpcy5HLnN0eWxlLmJveFNpemluZz10aGlzLmhiLnN0eWxlLmJveFNpemluZzt0aGlzLkcuc3R5bGUud2lkdGg9dGhpcy5oYi5vZmZzZXRXaWR0aCswKyJweCI7dGhpcy5HLnN0eWxlLmhlaWdodD10aGlzLmhiLm9mZnNldEhlaWdodCswKyJweCI7dGhpcy5GLnN0eWxlLndpZHRoPXRoaXMuaGIub2Zmc2V0V2lkdGgrMCsicHgiO3RoaXMuRi5zdHlsZS5oZWlnaHQ9dGhpcy5oYi5vZmZzZXRIZWlnaHQrCjArInB4Ijt0aGlzLmdldFBvc2l0aW9uKHRoaXMuaGIpO3RoaXMuZi5IYyYmdGhpcy5mLkhjKCk/dGhpcy5mLkJnKCkuYXBwZW5kQ2hpbGQodGhpcy5HKTpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuRyk7d2luZG93LnNldFRpbWVvdXQodGhpcy5UYi5iaW5kKHRoaXMpLDEwKX0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0aGlzLmYuZXhpdEZ1bGxzY3JlZW4oKX0sT3E6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlLGM9ITE7YTspe2lmKGEuc3R5bGUmJigiZml4ZWQiPT1hLnN0eWxlLnBvc2l0aW9ufHxiJiYiZml4ZWQiPT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS5wb3NpdGlvbikpe2M9ITA7YnJlYWt9YT1hLnBhcmVudE5vZGV9cmV0dXJuIGN9LE1wOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0UG9zaXRpb24oYSk7Yi5wb3NpdGlvbj9iLnBvc2l0aW9uPWIucG9zaXRpb246Yi5wb3NpdGlvbj0iYWJzb2x1dGUiO2Iud2lkdGg9CmEub2Zmc2V0V2lkdGg7Yi5oZWlnaHQ9YS5vZmZzZXRIZWlnaHQ7cmV0dXJuIGJ9LFRiOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuTXAodGhpcy5oYik7aWYoYi54IT10aGlzLkQueHx8Yi55IT10aGlzLkQueXx8Yi5wb3NpdGlvbiE9dGhpcy5ELnBvc2l0aW9ufHxiLndpZHRoIT10aGlzLkQud2lkdGh8fGIuaGVpZ2h0IT10aGlzLkQuaGVpZ2h0fHxhKXtpZigwPHRoaXMuRC53aWR0aCYmMDx0aGlzLkQuaGVpZ2h0JiYwPT1iLndpZHRoJiYwPT1iLmhlaWdodCl7dGhpcy53ZSgpO3JldHVybn10aGlzLkQ9Yjt0aGlzLmYuSGMoKT8odGhpcy5HLnN0eWxlLmxlZnQ9IjBweCIsdGhpcy5HLnN0eWxlLnRvcD0iMHB4Iik6KHRoaXMuRy5zdHlsZS5sZWZ0PWIueCsicHgiLHRoaXMuRy5zdHlsZS50b3A9Yi55KyJweCIpO3RoaXMuRy5zdHlsZS53aWR0aD1iLndpZHRoKyJweCI7dGhpcy5HLnN0eWxlLmhlaWdodD1iLmhlaWdodCsicHgiO3RoaXMuRy5zdHlsZS5wb3NpdGlvbj1iLnBvc2l0aW9uOwp0aGlzLkYuc3R5bGUud2lkdGg9Yi53aWR0aCsicHgiO3RoaXMuRi5zdHlsZS5oZWlnaHQ9Yi5oZWlnaHQrInB4Ijtmb3IoYT0wO2E8dGhpcy5OYi5sZW5ndGg7YSsrKXRoaXMuTmJbYV0oe3dpZHRoOmIud2lkdGgsaGVpZ2h0OmIuaGVpZ2h0fSl9ZS5IaCh0aGlzLkcpJiZ3aW5kb3cuc2V0VGltZW91dCh0aGlzLlRiLmJpbmQodGhpcyksMTApfSxZZjpmdW5jdGlvbihhKXt0aGlzLk5ifHwodGhpcy5OYj1bXSk7ImZ1bmN0aW9uIj09dHlwZW9mIGEmJnRoaXMuTmIucHVzaChhKX0sd2U6ZnVuY3Rpb24oKXt0aGlzLkcmJnRoaXMuRy5wYXJlbnROb2RlJiZ0aGlzLkcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCYmdGhpcy5HLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5HKTt0aGlzLkYmJnRoaXMuRi5wYXVzZSYmdGhpcy5GLnBhdXNlKCl9fX0pKGMpO2Zvcih2YXIgWWE9Yy5xanx8WWEsQz1bXSxaYT0wOzEwMD5aYTtaYSsrKXt2YXIgTz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpOwpPLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjtPLmlkPWUuYmEoMTApO08uY29udHJvbHM9ITA7Qy5wdXNoKE8pfXZhciBLPSExLGRhPSExO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIseik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIseik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHopO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIseik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuc3A9dGhpcy5hWzhdO3RoaXMubXA9dGhpcy5hWzRdO3RoaXMuYXI9dGhpcy5hWzJdO3RoaXMuVXM9dGhpcy5hWzhdO3RoaXMueW89dGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbNV19Yy5ZbD1iO2IucHJvdG90eXBlPXtycDpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLnNwOnRoaXMubHAoYSl9LGxwOmZ1bmN0aW9uKGEpe3JldHVybiAzPAphP3RoaXMubXA6dGhpcy4kcShhKX0sJHE6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLmFyOnRoaXMuVHMoYSl9LFRzOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5Vczp0aGlzLnhvKGEpfSx4bzpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMueW86dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciAkYT1jLllsfHwkYSxCYz1uZXcgJGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1CYy5ycCg0KTsoZnVuY3Rpb24oYyl7Yy5mbD11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLmVsZW1lbnRJZCxhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGIpO2F8fChiPXRoaXMuZ2V0UmF3UGxheWVyKCkuZ2V0RWxlbWVudElkKCksCmE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYikpO3RoaXMuWShhKTt0aGlzLkZkKGIpO3RoaXMubWcoKX0sRmQ6ZnVuY3Rpb24oYil7dGhpcy5pZHx8KHRoaXMuaWQ9Yil9LG1nOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5JYSgpLGE9dGhpcy52aWRlb1RhZzthfHwoKGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXSl8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdKSxhP3RoaXMuWihhKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubWcoKX0uYmluZCh0aGlzKSwxMDApKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBsYXkoKX0sVmE6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpO2IuaXNQbGF5aW5nJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5pc1BsYXlpbmcmJmIuaXNQbGF5aW5nKCkmJnRoaXMucGF1c2UoKX0sCkFlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4gYi5wYXJhbWV0ZXJzJiYhMT09PWIucGFyYW1ldGVycy5hdXRvcGxheT8hMTohMH0sTzpmdW5jdGlvbigpe3JldHVybiJPb3lhbGEifSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGI/Yi5tdXRlZDohMH0sdTpmdW5jdGlvbigpe3ZhciBiPXt9LGE9dGhpcy52aWRlb1RhZyxjPXRoaXMuSWEoKTtpZihiLnZpZGVvVGFnPWEpYi52aWRlb1RhZ0lkPWEuaWQ7aWYoYi5jb250YWluZXI9YyliLmNvbnRhaW5lcklkPWMuaWQ7Yi5wbGF5ZXI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4gYn19KX0pKGMpO3ZhciBhYj1jLmZsfHxhYjsoZnVuY3Rpb24oYyl7Yy5kbD12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9ZWEoKTt0aGlzLk1iPXRoaXMuTWJ8fCExO3RoaXMuUWY9dGhpcy5TZj10aGlzLlJnPXRoaXMuZGE9dGhpcy5zZj0KITE7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5BRFNfRVJST1IsImV4YW1wbGUiLGZ1bmN0aW9uKGEsYil7dGhpcy5JcChhLGIpfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5BRFNfUExBWUVELCJleGFtcGxlIixmdW5jdGlvbigpe3RoaXMuc2Y9ITA7dGhpcy5SZyYmdGhpcy5oZygpfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5QTEFZSU5HLCJleGFtcGxlIixmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFBsYXllcigpLnpiO2EmJmEuVWImJnRoaXMuZ2V0UGxheWVyKCkucGF1c2UoKX0uYmluZCh0aGlzKSwxMDApfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5JTklUSUFMX1BMQVksImV4YW1wbGUiLGZ1bmN0aW9uKCl7dGhpcy5jZCgpO3RoaXMuUmc9ITA7dGhpcy5oZygpfS5iaW5kKHRoaXMpKTt0aGlzLmNnKCl9LApoZzpmdW5jdGlvbigpe2lmKCF0aGlzLk1iKXt0aGlzLmNkKCk7aWYoIXRoaXMuc2YmJiF0aGlzLmNkKCkpcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCksITA7dGhpcy5zZiYmdGhpcy5RZiYmIXRoaXMuU2YmJndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCl9fSxjZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuR2coImFkTWFuYWdlckNvbnRyb2xsZXIiKTtyZXR1cm4gYiYmYi5hZE1hbmFnZXJzJiZiLmFkTWFuYWdlcnNbImdvb2dsZS1pbWEtYWRzLW1hbmFnZXIiXX0sR2c6ZnVuY3Rpb24oYil7Zm9yKHZhciBhPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCksYz0wO2M8YS5tb2R1bGVzLmxlbmd0aDtjKyspe3ZhciBkPWEubW9kdWxlc1tjXTtpZihkLm5hbWU9PT1iKXJldHVybiBkLmluc3RhbmNlfX0sY2c6ZnVuY3Rpb24oKXtpZih0aGlzLmNkKCkpe3ZhciBiPXRoaXMuR2coImFkTWFuYWdlckNvbnRyb2xsZXIiKS5hZE1hbmFnZXJzWyJnb29nbGUtaW1hLWFkcy1tYW5hZ2VyIl07CnRoaXMuU2Y9MDxiLmdldEN1cnJlbnRUaW1lKCk7dGhpcy5RZj1iLlJ2fXRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmNnKCl9LmJpbmQodGhpcyksMTAwKX0sVXY6ZnVuY3Rpb24oYil7cmV0dXJuIGIuaXNBZFBsYXlpbmcmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmlzQWRQbGF5aW5nP2IuZ3coKTohMX0seWM6ZnVuY3Rpb24oYil7cmV0dXJuIGIuZ2V0QWREdXJhdGlvbiYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0QWREdXJhdGlvbj9iLnljKCk6LTF9LG1xOmZ1bmN0aW9uKGIpe3JldHVybiBiLmlzUGxheWluZyYmImZ1bmN0aW9uIj09dHlwZW9mIGIuaXNQbGF5aW5nP2IuaXNQbGF5aW5nKCk6LTF9LElwOmZ1bmN0aW9uKGIsYSl7dGhpcy5NYj1hLm1hdGNoKC9cZCsvKT9wYXJzZUludChhLm1hdGNoKC9cZCsvKVswXSk6MDsxMDA5PT10aGlzLk1ifHwzMDI9PXRoaXMuTWI/dGhpcy5kYT0hMDp0aGlzLm8oImFkZXJyb3IiLHRoaXMuTWIpO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLAoxMDApfSxlZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCk7dGhpcy5kYT8odGhpcy53KCksdGhpcy50YSgpKTpiLkFlKCk/KHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDJFMykpOnRoaXMubXEoYik/KHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDJFMykpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCl9fSl9KShjKTt2YXIgYmI9Yy5kbHx8YmI7KGZ1bmN0aW9uKGMpe2MuZ2w9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxucjpmdW5jdGlvbigpe3dpbmRvdy5PTy52bC5YbS5WbT93aW5kb3cuT08udmwuWG0uVm0uUHYoZnVuY3Rpb24oKXt9KTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubnIoKX0sMTAwKX0sZzpmdW5jdGlvbigpe3RoaXMuVWE9MTUwMDt2YXIgYj0KZWEoKTtpZihiJiZiLl9faW50ZXJuYWwmJmIuX19pbnRlcm5hbC5wbGF5ZXJzJiYwPGUudGUoYi5fX2ludGVybmFsLnBsYXllcnMpKWZvcih2YXIgYSBpbiBiLl9faW50ZXJuYWwucGxheWVycylpZihiLl9faW50ZXJuYWwucGxheWVycy5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGM9bmV3IGFiKGIuX19pbnRlcm5hbC5wbGF5ZXJzW2FdKTt0aGlzLk4oYyl8fCh0aGlzLlAoYyksKG5ldyBiYihjLHRoaXMuSykpLmcoKSl9dGhpcy5SKCl9fSl9KShjKTt2YXIgY2I9Yy5nbHx8Y2IsZGI9bmV3IGNiKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnlyPXRoaXMuYVszXTt0aGlzLlJrPXRoaXMuYVsyXTt0aGlzLkRqPXRoaXMuYVs2XTt0aGlzLnl0PXRoaXMuYVs5XTt0aGlzLm9tPXRoaXMuYVsxXTt0aGlzLkJ2PXRoaXMuYVs5XTt0aGlzLmhrPXRoaXMuYVs3XTt0aGlzLmNsPXRoaXMuYVs1XTsKdGhpcy5BbT10aGlzLmFbN107dGhpcy5qPXRoaXMuYVs5XX1jLnJyPWI7Yi5wcm90b3R5cGU9e3hyOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy55cjp0aGlzLlFrKGEpfSxRazpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuUms6dGhpcy5DaihhKX0sQ2o6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLkRqOnRoaXMueHQoYSl9LHh0OmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy55dDp0aGlzLm5tKGEpfSxubTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMub206dGhpcy5BdihhKX0sQXY6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLkJ2OnRoaXMuZ2soYSl9LGdrOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5oazp0aGlzLmJsKGEpfSxibDpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuY2w6dGhpcy56bShhKX0sem06ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5BbTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5qOgphfX19KShjKTt2YXIgZWI9Yy5ycnx8ZWIsQ2M9bmV3IGViKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9Q2MueHIoNCk7KGZ1bmN0aW9uKGMpe2MuYWo9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dGhpcy5xYT0hMTt0aGlzLkpnKCl9LEpnOmZ1bmN0aW9uKCl7dmFyIGI9ITEsYT0hMTt0aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5nZXRGaWd1cmUmJihiPXRoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLmdldEZpZ3VyZSgpKTtifHwoYj10aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5lbGVtZW50KTt0aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5nZXRWaWRlb0VsZW1lbnQmJihhPXRoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLmdldFZpZGVvRWxlbWVudCgpKTtiJiYhYSYmKGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXSk7CmImJmE/KHRoaXMuWShiKSx0aGlzLlooYSkpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5KZygpfS5iaW5kKHRoaXMpLDEwMCl9LHBhdXNlOmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLnBsYXkoKX0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIuZ2V0Q3VycmVudFRpbWUoKX0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIuZ2V0RHVyYXRpb24oKX0sTmE6ZnVuY3Rpb24oKXt0aGlzLnRoKCl9LHRoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRDdXJyZW50VGltZSgpOzE+dGhpcy5nZXREdXJhdGlvbigpLWI/dGhpcy5WJiYoMCx0aGlzLlYpKCk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnRoKCl9LmJpbmQodGhpcyksMTAwKX0sCk86ZnVuY3Rpb24oKXtyZXR1cm4iQml0bW92aW4ifX0pfSkoYyk7dmFyIGZiPWMuYWp8fGZiOyhmdW5jdGlvbihjKXtjLiRpPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LGRnOmZ1bmN0aW9uKGIpe3ZhciBhPWIuY29kZSxjPWIubWVzc2FnZTtiLmRhdGEmJihhPWIuZGF0YS5jb2RlLGM9Yi5kYXRhLm1lc3NhZ2UpOzEyMDUhPWEmJig5MDA9PWEmJjA8Yy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImVtcHR5Iik/KHRoaXMudygiZW1wdHkiKSx0aGlzLnRhKCkpOjEwMDk9PWF8fDMwMz09YXx8NDAzPT1hP3RoaXMudGEoKTp0aGlzLnMoKSl9LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2lmKGIuYWRFcnJvckV2ZW50cylmb3IodmFyIGE9MDthPGIuYWRFcnJvckV2ZW50cy5sZW5ndGg7YSsrKXRoaXMuZGcoYi5hZEVycm9yRXZlbnRzKTtiLnBsYXllci5vbigiYWRlcnJvciIsZnVuY3Rpb24oYSl7dGhpcy5kZyhhKX0uYmluZCh0aGlzKSk7CmIucGxheWVyLm9uKCJhZHF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygiYWRxdWFydGlsZSIpfS5iaW5kKHRoaXMpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCkucGxheWVyLmlzUGxheWluZygpP3RoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcyksMTApfX0pfSkoYyk7dmFyIGdiPWMuJGl8fGdiOyhmdW5jdGlvbihjKXtjLmJqPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sd2g6ZnVuY3Rpb24oYil7Yj1uZXcgZmIoYik7Yi5xYT90aGlzLlIoKTp0aGlzLk4oYil8fChiLkZkKE1hdGguY2VpbCgxRTEwKk1hdGgucmFuZG9tKCkpKSx0aGlzLlAoYiksKG5ldyBnYihiLHRoaXMuSykpLmcoKSl9LGc6ZnVuY3Rpb24oKXt0aGlzLkpwfHwodGhpcy5KcD0hMCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzdm06cGxheWVyaW5zdGFuY2UiLGZ1bmN0aW9uKGEpe3RoaXMud2goYS5kZXRhaWwpfS5iaW5kKHRoaXMpKSk7CmlmKHdpbmRvdy5fX3NjaG5lZVZvbk1vcmdlbiYmd2luZG93Ll9fc2NobmVlVm9uTW9yZ2VuLnZpZGVvUGxheWVySW5zdGFuY2VzKWZvcih2YXIgYj0wO2I8d2luZG93Ll9fc2NobmVlVm9uTW9yZ2VuLnZpZGVvUGxheWVySW5zdGFuY2VzLmxlbmd0aDtiKyspdGhpcy53aCh3aW5kb3cuX19zY2huZWVWb25Nb3JnZW4udmlkZW9QbGF5ZXJJbnN0YW5jZXNbYl0pO3RoaXMuUigpfX0pfSkoYyk7dmFyIGhiPWMuYmp8fGhiLFU9bmV3IGhiKHIpO1UuZygpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnJ0PXRoaXMuYVs0XTt0aGlzLmlsPXRoaXMuYVs5XTt0aGlzLmV0PXRoaXMuYVs4XTt0aGlzLkpxPXRoaXMuYVs1XTt0aGlzLkFyPXRoaXMuYVsxMF07dGhpcy5xbT10aGlzLmFbMl07dGhpcy5qaz10aGlzLmFbNF07dGhpcy53cT10aGlzLmFbOV07dGhpcy5VaT10aGlzLmFbNF07dGhpcy5Ecz0KdGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbOF19Yy5Jaj1iO2IucHJvdG90eXBlPXtxdDpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMucnQ6dGhpcy5obChhKX0saGw6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmlsOnRoaXMuZHQoYSl9LGR0OmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5ldDp0aGlzLklxKGEpfSxJcTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuSnE6dGhpcy56cihhKX0senI6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLkFyOnRoaXMucG0oYSl9LHBtOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5xbTp0aGlzLmlrKGEpfSxpazpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuams6dGhpcy52cShhKX0sdnE6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLndxOnRoaXMuVGkoYSl9LFRpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuVWk6dGhpcy5DcyhhKX0sQ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLkRzOnRoaXMuaShhKX0sCmk6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLmo6YX19fSkoYyk7dmFyIGliPWMuSWp8fGliLERjPW5ldyBpYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPURjLnF0KDQpOyhmdW5jdGlvbihjKXtjLlVsPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0UmF3UGxheWVyKCkpO3RoaXMuWShiKTtpZihiKXt2YXIgYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdO2F8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdKTt0aGlzLlooYSl9ZWxzZSB3aW5kb3cuc2V0VGltZW91dCh0aGlzLlMuYmluZCh0aGlzKSwxMDApfSxwYXVzZTpmdW5jdGlvbigpe3RyeXt0Zm1zdWl0ZSgiIyIrdGhpcy5nZXRSYXdQbGF5ZXIoKSkudGZtdmlkZW8oInBhdXNlIil9Y2F0Y2goYil7fX0sCnBsYXk6ZnVuY3Rpb24oKXt0cnl7dGZtc3VpdGUoIiMiK3RoaXMuZ2V0UmF3UGxheWVyKCkpLnRmbXZpZGVvKCJyZXN1bWUiKX1jYXRjaChiKXt0Zm1zdWl0ZSgiIyIrdGhpcy5nZXRSYXdQbGF5ZXIoKSkudGZtdmlkZW8oInBsYXkiKX19LEhjOmZ1bmN0aW9uKCl7dmFyIGI9bTtyZXR1cm4gYiYmYi5ydW5JbnNpZGVDb250YWluZXI/ITA6ITF9LE86ZnVuY3Rpb24oKXtyZXR1cm4iVEZNc3VpdGUifX0pfSkoYyk7dmFyIFY9Yy5VbHx8VjsoZnVuY3Rpb24oYyl7Yy5UbD12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTt4LldjKCIjIitiLCJvbkFkc01hbmFnZXJMb2FkZWQiLGZ1bmN0aW9uKCl7d2luZG93LnNldFRpbWVvdXQodGhpcy53LmJpbmQodGhpcyksMjAwKX0uYmluZCh0aGlzKSk7eC5XYygiIyIrYiwib2JqZWN0IixmdW5jdGlvbihhKXt0aGlzLmhzKGEpfS5iaW5kKHRoaXMpKTsKeC5XYygiIyIrYiwiYWRzTG9hZGVyRmFpbGVkIixmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsImFkc0xvYWRlckZhaWxlZCIpO3RoaXMuSSgpfS5iaW5kKHRoaXMpKTt4LldjKCIjIitiLCJyZXF1ZXN0QWRzRmFpbGVkIixmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsInJlcXVlc3RBZHNGYWlsZWQiKTt0aGlzLkkoKX0uYmluZCh0aGlzKSk7eC5DcSgpfSxoczpmdW5jdGlvbihiKXt2YXIgYT0iIixjO2ZvcihjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSl7YT1pc05hTihiW2NdKT8hMTpiW2NdO2lmKDEwMDk9PWJbY118fDEwMDE9PWJbY118fDMwMz09YltjXXx8NDAzPT1iW2NdKXt0aGlzLncoKTt0aGlzLnRhKCk7cmV0dXJufWZvcih2YXIgZCBpbiBiW2NdKWlmKGJbY10uaGFzT3duUHJvcGVydHkoZCkmJihhPWlzTmFOKGJbY11bZF0pPyExOmJbY11bZF0sMTAwOT09YltjXVtkXXx8MTAwMT09YltjXVtkXXx8MzAzPT1iW2NdW2RdfHw0MDM9PWJbY11bZF0pKXt0aGlzLncoKTsKdGhpcy50YSgpO3JldHVybn19dGhpcy5vKCJhZGVycm9yIixhKTt0aGlzLkkoKX19KX0pKGMpO3ZhciBXPWMuVGx8fFc7KGZ1bmN0aW9uKGMpe2MuVmw9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93LnRmbXN1aXRlKXtmb3IodmFyIGI9W10sYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSxjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10pO2E9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10pO3RoaXMueWQmJihiPWUuVW8oYix0aGlzLnlkKSk7Zm9yKGE9MDthPGIubGVuZ3RoO2ErKyl7dmFyIGQ9YlthXS5pZC5yZXBsYWNlKCJjb250ZW50RWxlbWVudCIsIiIpLGQ9bmV3IFYoZCk7aWYoIXRoaXMuTihkKSl7dGhpcy5QKGQpO3ZhciBmPW5ldyBXKGQsdGhpcy5LKTtmLmcoKX19Zm9yKGE9MDthPGIubGVuZ3RoO2ErKylmb3IoYz0KYlthXTtjLnBhcmVudEVsZW1lbnQ7KXt2YXIgYz1jLnBhcmVudEVsZW1lbnQsZz1jLmdldEF0dHJpYnV0ZSgiaWQiKTtpZihnKXRyeXt0Zm1zdWl0ZSgiIyIrZykudGZtdmlkZW8oInJlc3VtZSIpLHRoaXMueWR8fCh0aGlzLnlkPVtdKSx0aGlzLnlkLnB1c2goYlthXSksZD1uZXcgVihnKSx0aGlzLk4oZCl8fCh0aGlzLlAoZCksZj1uZXcgVyhkLHRoaXMuSyksZi5nKCkpfWNhdGNoKGspe319fXRoaXMuUigpfSxXYzpmdW5jdGlvbihiLGEsYyl7dGhpcy5jYXx8KHRoaXMuY2E9e30pO3RoaXMuY2FbYl18fCh0aGlzLmNhW2JdPXt9KTt0aGlzLmNhW2JdW2FdfHwodGhpcy5jYVtiXVthXT1bXSk7dGhpcy5jYVtiXVthXS5wdXNoKGMpfSx0dTpmdW5jdGlvbihiKXt2YXIgYT1iLnNQbGF5ZXJTZWxlY3RvcjtpZihiKWlmKCF0aGlzLmNhfHx0aGlzLmNhJiYhdGhpcy5jYVthXSl0aGlzLkVjfHwodGhpcy5FYz1bXSksdGhpcy5FYy5wdXNoKGIpLHRoaXMub3QoKSYmKHRoaXMuYWYoKSx0aGlzLmcoKSk7CmVsc2V7dmFyIGM9Im9iamVjdCI7InN0cmluZyI9PT10eXBlb2YgYi5vRXZlbnRUeXBlJiYoYz1iLm9FdmVudFR5cGUpO2lmKHRoaXMuY2FbYV1bY10mJjA8dGhpcy5jYVthXVtjXS5sZW5ndGgpZm9yKHZhciBkPTA7ZDx0aGlzLmNhW2FdW2NdLmxlbmd0aDtkKyspdGhpcy5jYVthXVtjXVtkXShiKX19LENxOmZ1bmN0aW9uKCl7aWYodGhpcy5FYylmb3IodmFyIGI9MDtiPHRoaXMuRWMubGVuZ3RoO2IrKyl7dmFyIGE9dGhpcy5FY1tiXSxjPWEuc1BsYXllclNlbGVjdG9yLGQ9Im9iamVjdCI7InN0cmluZyI9PT10eXBlb2YgYS5vRXZlbnRUeXBlJiYoZD1hLm9FdmVudFR5cGUpO2lmKHRoaXMuY2FbY11bZF0mJjA8dGhpcy5jYVtjXVtkXS5sZW5ndGgpZm9yKHZhciBlPTA7ZTx0aGlzLmNhW2NdW2RdLmxlbmd0aDtlKyspdGhpcy5jYVtjXVtkXVtlXShhKX19LHZpZGVvcGtnSW50ZXJmYWNlOmZ1bmN0aW9uKGIpeyJhdXRvUmVzaXplQ2FsbGJhY2tCZWZvcmUiIT1iLm9FdmVudFR5cGUuaCYmCiJhdXRvUmVzaXplQ2FsbGJhY2tBZnRlciIhPWIub0V2ZW50VHlwZS5oJiZ4LnR1KGIpfX0pfSkoYyk7dmFyIGpiPWMuVmx8fGpiLHg9bmV3IGpiKHIpO2NhKCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTGs9dGhpcy5hWzFdO3RoaXMuRXA9dGhpcy5hWzZdO3RoaXMuaj10aGlzLmFbNV19Yy5lbz1iO2IucHJvdG90eXBlPXtLazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTGs6dGhpcy5EcChhKX0sRHA6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLkVwOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuajphfX19KShjKTt2YXIga2I9Yy5lb3x8a2IsRWM9bmV3IGtiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9RWMuS2soNCk7CihmdW5jdGlvbihjKXtjLlhpPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubXV0ZWQ9ITE7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSYXdQbGF5ZXIoKSk7dGhpcy5ZKGIpO3ZhciBhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07YXx8KGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO3RoaXMuWihhKX0scGF1c2U6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5wYXVzZSgpfSl9LHBsYXk6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5wbGF5KCl9KX0sVmE6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5pc1BsYXlpbmcoKSYmCmIucGF1c2UoKX0pfSx2YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm11dGVkfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkJpbGRNZWRpYVBsYXllciJ9fSl9KShjKTt2YXIgbGI9Yy5YaXx8bGI7KGZ1bmN0aW9uKGMpe2MuWWk9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7JCgiIyIrYikuZGF0YSgibWVkaWFwbGF5ZXIiKS50aGVuKGZ1bmN0aW9uKGEpe3RoaXMucGxheWVyLm11dGVkPWEuZGF0YS5tdXRlZDthLm9uKCJlcnJvciIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIkVycm9yIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7YS5vbigidGltZXVwZGF0ZSIsZnVuY3Rpb24oKXtpZighYS5pc1BsYXlpbmd8fGEuaXNQbGF5aW5nKCkpYS5pc0FkJiZhLmlzQWQoKT90aGlzLncoKTphLmRhdGEmJmEuZGF0YS5hZHMmJmEuZGF0YS5hZHMudmFzdCYmYS5kYXRhLmFkcy52YXN0LnNyY2VzPwoodGhpcy5vKCJub0FkIiwicGxheWVkIiksdGhpcy5JKCkpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vKCJub0FkIiwicGxheWVkIik7dGhpcy5JKCEwKX0uYmluZCh0aGlzKSwyNTApfS5iaW5kKHRoaXMpKTthLm9uKCJwYXVzZSIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIndhaXRpbmciLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKTthLm9uKCJhZEVycm9yIixmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKTthLm9uKCJBZEVycm9yIixmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKTthLm9uKCJBZExvYWRlZCIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIkFkU3RhcnRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7YS5vbigiQWRWaWRlb1N0YXJ0IixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTthLm9uKCJBZFBsYXlpbmciLGZ1bmN0aW9uKCl7dGhpcy53KCl9LmJpbmQodGhpcykpO2Eub24oIkFkVmlkZW9GaXJzdFF1YXJ0aWxlIiwKZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7YS5vbigiQWRWaWRlb01pZHBvaW50IixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTthLm9uKCJBZFZpZGVvVGhpcmRRdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSl9LmJpbmQodGhpcykpfX0pfSkoYyk7dmFyIG1iPWMuWWl8fG1iOyhmdW5jdGlvbihjKXtjLlppPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm1lZGlhcGxheWVyIik7aWYod2luZG93LmRlJiZ3aW5kb3cuZGUuYmlsZCYmd2luZG93LmRlLmJpbGQubWVkaWFwbGF5ZXImJmImJjA8Yi5sZW5ndGgpZm9yKHZhciBhIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGM9YlthXSxkPSIiO3RyeXtkPWMuZ2V0QXR0cmlidXRlKCJpZCIpfWNhdGNoKGUpe2Q9Yy5pZH1pZihkJiYkKCIjIitkKS5kYXRhKCJtZWRpYXBsYXllciIpKXRyeXt2YXIgZz0KbmV3IGxiKGQpO3RoaXMuTihnKXx8KHRoaXMuUChnKSwobmV3IG1iKGcsdGhpcy5LKSkuZygpKX1jYXRjaChrKXt9fXRoaXMuUigpfSxOOmZ1bmN0aW9uKGIpe3ZhciBhPWIuZ2V0UmF3UGxheWVyKCk7JCgiIyIrYSk7Zm9yKHZhciBjIGluIHRoaXMuTWEpaWYoYT09dGhpcy5NYVtjXS5nZXRSYXdQbGF5ZXIoKSlyZXR1cm4hMDtyZXR1cm4gdGhpcy5NYVtiLmphKCldPyEwOiExfX0pfSkoYyk7dmFyIG5iPWMuWml8fG5iLG9iPW5ldyBuYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5Fbz10aGlzLmFbNF07dGhpcy50dj10aGlzLmFbMV07dGhpcy5mbT10aGlzLmFbNl07dGhpcy5vcD10aGlzLmFbM107dGhpcy5qPXRoaXMuYVsyXX1jLndyPWI7Yi5wcm90b3R5cGU9e0RvOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Fbzp0aGlzLnN2KGEpfSxzdjpmdW5jdGlvbihhKXtyZXR1cm4gMTwKYT90aGlzLnR2OnRoaXMuZW0oYSl9LGVtOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5mbTp0aGlzLm5wKGEpfSxucDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMub3A6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBwYj1jLndyfHxwYixGYz1uZXcgcGIoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1GYy5Ebyg0KTsoZnVuY3Rpb24oYyl7Yy5Vaz11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPSExO3RoaXMuZ2V0UmF3UGxheWVyKCkuZW52dmFycyYmdGhpcy5nZXRSYXdQbGF5ZXIoKS5lbnZ2YXJzKCk7dGhpcy5nZXRSYXdQbGF5ZXIoKS5jb250YWluZXJJRCYmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSYXdQbGF5ZXIoKS5jb250YWluZXJJRCkpOwpiJiYoYT1iKTt0aGlzLlkoYik7dGhpcy5aKGEpO3RoaXMuaHQodGhpcy5nZXRSYXdQbGF5ZXIoKSxiKTt0aGlzLmdldFJhd1BsYXllcigpfSxwYXVzZTpmdW5jdGlvbigpe30scGxheTpmdW5jdGlvbigpe30saHQ6ZnVuY3Rpb24oYixhKXtiJiZiLnBhdXNlRXZlbnQmJmEuYWRkRXZlbnRMaXN0ZW5lcihiLnBhdXNlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiZ0aGlzLmhhLnBhdXNlJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5wYXVzZSYmdGhpcy5oYS5wYXVzZSgpfS5iaW5kKHRoaXMpKTtiJiZiLnJlc3VtZUV2ZW50JiZhLmFkZEV2ZW50TGlzdGVuZXIoYi5yZXN1bWVFdmVudCxmdW5jdGlvbigpe3RoaXMuaGEmJnRoaXMuaGEucmVzdW1lJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5yZXN1bWUmJnRoaXMuaGEucmVzdW1lKCl9LmJpbmQodGhpcykpO2ImJmIubXV0ZUV2ZW50JiZhLmFkZEV2ZW50TGlzdGVuZXIoYi5tdXRlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiYKdGhpcy5oYS5tdXRlJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5tdXRlJiZ0aGlzLmhhLm11dGUoKX0uYmluZCh0aGlzKSk7YiYmYi51bm11dGVFdmVudCYmYS5hZGRFdmVudExpc3RlbmVyKGIudW5tdXRlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiZ0aGlzLmhhLnVubXV0ZSYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuaGEudW5tdXRlJiZ0aGlzLmhhLnVubXV0ZSgpfS5iaW5kKHRoaXMpKX0sU2c6ZnVuY3Rpb24oYil7dGhpcy5oYT1ifSxPOmZ1bmN0aW9uKCl7cmV0dXJuIk9ubHlIT01BRCJ9fSl9KShjKTt2YXIgcWI9Yy5Va3x8cWI7KGZ1bmN0aW9uKGMpe2MuVGs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKTt0aGlzLmVpPSExfSxnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKSxhPXRoaXMuZ2V0UGxheWVyKCk7Yi5hdXRvc3RhcnQmJiF0aGlzLmVpJiYodGhpcy5JKCksdGhpcy5laT0hMCx0aGlzLnJhKCkpOwphLklhKCkuYWRkRXZlbnRMaXN0ZW5lcihiLnBsYXlFdmVudCxmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKX19KX0pKGMpO3ZhciByYj1jLlRrfHxyYjsoZnVuY3Rpb24oYyl7Yy5Waz1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtKXtpZihtLnBsYXllcil7dmFyIGI9bS5wbGF5ZXI7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGIpdHJ5e2I9YigpfWNhdGNoKGEpe2UudHJhY2soIm9ubHlIT01BRENvbmZGYWlsZWQiLCIiLCEwKX1mb3IodmFyIGM9ITEsZD0wO2Q8Yi5sZW5ndGg7ZCsrKWM9bmV3IHFiKGJbZF0pLHRoaXMuTihjKXx8KHRoaXMuUChjKSwobmV3IHJiKGMsdGhpcy5LKSkuZygpKX19ZWxzZSB0aGlzLlIoKX19KX0pKGMpO3ZhciBzYj1jLlZrfHxzYixYPW5ldyBzYihyKTtYLmcoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CnRoaXMueGw9dGhpcy5hWzddO3RoaXMuemo9dGhpcy5hWzNdO3RoaXMud289dGhpcy5hWzddO3RoaXMueWk9dGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbNV19Yy5Ccj1iO2IucHJvdG90eXBlPXt3bDpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMueGw6dGhpcy55aihhKX0seWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnpqOnRoaXMudm8oYSl9LHZvOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMud286dGhpcy54aShhKX0seGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLnlpOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuajphfX19KShjKTt2YXIgdGI9Yy5Ccnx8dGIsR2M9bmV3IHRiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9R2Mud2woNCk7KGZ1bmN0aW9uKGMpe2MuR209dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSwKUzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCkucGFyZW50Tm9kZTt0aGlzLlkoYik7Yj10aGlzLmdldFJhd1BsYXllcigpO3RoaXMuWihiKTt0aGlzLmlzUGxheWluZz0hMTtiLmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5pc1BsYXlpbmc9ITB9LmJpbmQodGhpcykpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheSgpfSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGI/Yi5tdXRlZDohMH0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5jdXJyZW50VGltZX0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5kdXJhdGlvbn0sTmE6ZnVuY3Rpb24oKXswPHRoaXMuZ2V0RHVyYXRpb24oKSYmMDx0aGlzLmdldEN1cnJlbnRUaW1lKCkmJgoxLjU+dGhpcy5nZXREdXJhdGlvbigpLXRoaXMuZ2V0Q3VycmVudFRpbWUoKSYmdGhpcy5WPygwLHRoaXMuVikoKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuTmEoKX0uYmluZCh0aGlzKSw0MDApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIldGdjQifX0pfSkoYyk7dmFyIHViPWMuR218fHViOyhmdW5jdGlvbihjKXtjLkZtPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LFJiOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKSxiPWIuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIuaW1hQWRzTG9hZGVyfSxndDpmdW5jdGlvbihiKXtiLmFkZEV2ZW50TGlzdGVuZXIoZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUixmdW5jdGlvbihhKXthPWEuZ2V0RXJyb3IoKTthLmdldEVycm9yQ29kZSgpO3RoaXMuJGF8fCh0aGlzLiRhPVtdKTt0aGlzLiRhLnB1c2goYS5nZXRFcnJvckNvZGUoKSk7MTAwOT09YS5nZXRFcnJvckNvZGUoKXx8CjMwMz09YS5nZXRFcnJvckNvZGUoKXx8NDAzPT1hLmdldEVycm9yQ29kZSgpP3RoaXMudGEoKTp0aGlzLm8oImFkZXJyb3IiLGEuZ2V0RXJyb3JDb2RlKCkpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkc01hbmFnZXJMb2FkZWQiLGZ1bmN0aW9uKCl7dGhpcy5uYz0hMDt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yi5hZGRFdmVudExpc3RlbmVyKCJsb2ciLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKX0sZzpmdW5jdGlvbigpe3RoaXMucygpO3RoaXMuZ2V0UGxheWVyKCk7dGhpcy5BYT90aGlzLmd0KHRoaXMuQWEpOih0aGlzLkFhPXRoaXMuUmIoKSx3aW5kb3cuc2V0VGltZW91dCh0aGlzLmcuYmluZCh0aGlzKSwxMDApKX0sczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCk7aWYoYi5pc1BsYXlpbmcmJjE8Yi5nZXRDdXJyZW50VGltZSgpKXtpZighdGhpcy5BYSl7dGhpcy5JKCk7cmV0dXJufWlmKCF0aGlzLm5jKXt0aGlzLkkoKTtyZXR1cm59Yj0hMDtpZih0aGlzLiRhJiYKdGhpcy4kYS5sZW5ndGgmJjE8dGhpcy4kYS5sZW5ndGgpZm9yKHZhciBhPTA7YTx0aGlzLiRhLmxlbmd0aC0xO2ErKykxMDA5IT10aGlzLiRhW2FdJiYzMDMhPXRoaXMuJGFbYV0mJjQwMyE9dGhpcy4kYVthXSYmKGI9ITEpO2lmKGIpdGhpcy53KCJlbXB0eSIpLHRoaXMudGEoKTtlbHNle3RoaXMuSSgpO3JldHVybn19d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoKX0uYmluZCh0aGlzKSw1MDApfX0pfSkoYyk7dmFyIHZiPWMuRm18fHZiOyhmdW5jdGlvbihjKXtjLkhtPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe3RoaXMuVWE9LTE7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIik7aWYod2luZG93LndmdjRfaHRtbDVfcGxheWVyJiYwPGIubGVuZ3RoKWZvcih2YXIgYSBpbiBiKXt2YXIgYz1uZXcgdWIoYi5pdGVtKGEpKTt0aGlzLk4oYyl8fC0xPT1jLmlkLnNlYXJjaCgidmlkZW9fIil8fCh0aGlzLlAoYyksCihuZXcgdmIoYyx0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIHdiPWMuSG18fHdiLHhiPW5ldyB3YihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5McT10aGlzLmFbN107dGhpcy5Vcj10aGlzLmFbMl07dGhpcy5Hbz10aGlzLmFbNl07dGhpcy52cj10aGlzLmFbOV07dGhpcy5Edj10aGlzLmFbM107dGhpcy56bj10aGlzLmFbMV07dGhpcy5xcz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbN119Yy5Qcz1iO2IucHJvdG90eXBlPXtLcTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuTHE6dGhpcy5UcihhKX0sVHI6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLlVyOnRoaXMuRm8oYSl9LEZvOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5Hbzp0aGlzLnVyKGEpfSx1cjpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMudnI6dGhpcy5DdihhKX0sQ3Y6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8CmE/dGhpcy5Edjp0aGlzLnluKGEpfSx5bjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuem46dGhpcy5wcyhhKX0scHM6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLnFzOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLmo6YX19fSkoYyk7dmFyIHliPWMuUHN8fHliLEhjPW5ldyB5YigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPUhjLktxKDQpOyhmdW5jdGlvbihjKXtjLkhsPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm10di1wbGF5ZXItY29udGFpbmVyIilbMF07dGhpcy5ZKGIpO3RoaXMuWihiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdKTt0aGlzLlVlPSExfSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCk7CndpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpe3RoaXMuV3MoKX0uYmluZCh0aGlzKSw1MDApfSxXczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UG9zaXRpb24oKSxhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiZ0aGlzLlYmJnRoaXMuVigpfSxnZXREdXJhdGlvbjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT0wO2IucGxheWJhY2suZ2V0RHVyYXRpb24mJihhPWIucGxheWJhY2suZ2V0RHVyYXRpb24oKSk7cmV0dXJuIGF9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPTA7Yi5wbGF5YmFjay5nZXRQb3NpdGlvbiYmKGE9Yi5wbGF5YmFjay5nZXRQb3NpdGlvbigpKTtyZXR1cm4gYX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBsYXliYWNrLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLlVlJiZ3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLlVlKTsKdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5YmFjay5wbGF5KCl9LGlzUGxheWluZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIucGxheWJhY2smJmIucGxheWJhY2suZ2V0UGxheVN0YXRlPyhiLnBsYXliYWNrLmdldFBsYXlTdGF0ZSgpLCJwbGF5aW5nIj09Yi5wbGF5YmFjay5nZXRQbGF5U3RhdGUoKSk6ITF9LFp0OmZ1bmN0aW9uKCl7dGhpcy5VZT13aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt0aGlzLnBhdXNlKCl9LmJpbmQodGhpcyksMTApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIlJvY2tlcnkifX0pfSkoYyk7dmFyIHpiPWMuSGx8fHpiOyhmdW5jdGlvbihjKXtjLkdsPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSk7dGhpcy5mYz0wfSxnOmZ1bmN0aW9uKCl7dGhpcy5Tcj0xMDt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO3RoaXMuZmN8fCh0aGlzLmZjPTAsYi5hZGRFdmVudExpc3RlbmVyKCJhZEVycm9yIiwKZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiKTt0aGlzLnMoKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXt9KSk7d2luZG93LnZpZGVvcGxhemE/KHdpbmRvdy52aWRlb3BsYXphLmJ1aWxkRGF0ZXx8KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpLHdpbmRvdy52aWRlb3BsYXphLmNvcmU/KHdpbmRvdy52aWRlb3BsYXphLmNvcmUuQWRDYWxsTW9kdWxlfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5UcmFja2VyfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5tb2RlbHx8KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpLHdpbmRvdy52aWRlb3BsYXphLmNvcmUucGFyc2V8fCh0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGF6YSIpLAp0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5yZXF1ZXN0fHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSkpOih0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGF6YSIpLHRoaXMucygpKSx3aW5kb3cudmlkZW9wbGF6YS52ZXJzaW9uTnVtYmVyfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSkpOih0aGlzLmZjfHx0aGlzLmZjKyssdGhpcy5mYzw9dGhpcy5Tcj8odGhpcy5mYysrLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksNTAwKSk6KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nKCk/KHRoaXMuZ2V0UGxheWVyKCkuWnQoKSx0aGlzLkkoKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoKX0uYmluZCh0aGlzKSwxMDApfX0pfSkoYyk7CnZhciBBYj1jLkdsfHxBYjsoZnVuY3Rpb24oYyl7Yy5JbD1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJtdHYtcGxheWVyLWNvbnRhaW5lciIpLGE9ITE7YiYmYlswXSYmKGE9YlswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSkmJmFbMF0mJndpbmRvdy5wbGF5ZXJBcGkmJndpbmRvdy5wbGF5ZXJBcGkucGxheWJhY2smJmImJihiPW5ldyB6Yih3aW5kb3cucGxheWVyQXBpKSx0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBBYihiLHRoaXMuSykpLmcoKSkpO3RoaXMuUigpfX0pfSkoYyk7dmFyIEJiPWMuSWx8fEJiLENiPW5ldyBCYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5GbD10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbOF19Yy52cD1iO2IucHJvdG90eXBlPQp7RWw6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkZsOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuajphfX19KShjKTt2YXIgRGI9Yy52cHx8RGIsSWM9bmV3IERiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9SWMuRWwoNCk7KGZ1bmN0aW9uKGMpe2MuQ2w9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS5wYXJlbnROb2RlLnBhcmVudE5vZGU7dGhpcy5ZKGIpO2I9dGhpcy5nZXRSYXdQbGF5ZXIoKTt0aGlzLlooYik7dGhpcy5pc1BsYXlpbmc9ITE7Yi5hZGRFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIixmdW5jdGlvbigpe3RoaXMuaXNQbGF5aW5nPSEwfS5iaW5kKHRoaXMpKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlKCl9LApwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5KCl9LGdldEN1cnJlbnRUaW1lOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPSIiO2IuY3VycmVudFRpbWUmJihhPWIuY3VycmVudFRpbWUpO3JldHVybiBhfSxnZXREdXJhdGlvbjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT0wO2IuZHVyYXRpb24mJihhPWIuZHVyYXRpb24pO3JldHVybiBhfSxOYTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0Q3VycmVudFRpbWUoKSxhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiZhJiYxPmEtYj90aGlzLlYoKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuTmEoKX0uYmluZCh0aGlzKSwyMDApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIlJhZGlhbnRNUCJ9fSl9KShjKTt2YXIgRWI9Yy5DbHx8RWI7KGZ1bmN0aW9uKGMpe2MuQmw9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLmdldFBsYXllcigpLklhKCksYT10aGlzLmdldFBsYXllcigpLnZpZGVvVGFnO2EmJmEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZHN0YXJ0IixmdW5jdGlvbigpe3RoaXMucmEoKTt0aGlzLmdldFBsYXllcigpLmlzUGxheWluZz0hMX0uYmluZCh0aGlzKSk7dGhpcy5nZXRQbGF5ZXIoKTtiLmFkZEV2ZW50TGlzdGVuZXIoInBsYXlpbmciLGZ1bmN0aW9uKCl7dGhpcy5ObygpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkbG9hZGVkIixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkc3RhcnRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yj10aGlzLnBkKCk7MDxiLmdldEN1cnJlbnRUaW1lKCk/dGhpcy5HcigpOnRoaXMuZ2coKTtiLmF1dG9wbGF5JiZ3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuT2YoKXx8KHRoaXMubygiY29udGVudHBsYXkiKSx0aGlzLnMoITApKX0uYmluZCh0aGlzKSwKMUUzKX0sTm86ZnVuY3Rpb24oKXt0aGlzLk9mKCl8fHRoaXMucyghMCl9LEdyOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wZCgpOyFiLm5hJiZiLlcmJmIuT3YmJmIuUXYmJih0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIiksdGhpcy5zKCkpfSxnZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMucGQoKTtiLmFkc0xvYWRlcj9iLmFkc0xvYWRlci5hZGRFdmVudExpc3RlbmVyKGdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUuQURfRVJST1IsZnVuY3Rpb24oYSl7dmFyIGI7YTp7YT1hLmdldEVycm9yKCk7Zm9yKGIgaW4gYSlpZigibnVtYmVyIj09dHlwZW9mIGFbYl0pe2I9YVtiXTticmVhayBhfWI9dm9pZCAwfTEwMDk9PWJ8fDMwMz09Ynx8NDAzPT1iPyh0aGlzLncoKSx0aGlzLnRhKCkpOih0aGlzLm8oImFkZXJyb3IiLGIpLHRoaXMucygpKX0uYmluZCh0aGlzKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmdnKCl9LmJpbmQodGhpcyksMTAwKX0scGQ6ZnVuY3Rpb24oKXtpZighdGhpcy5uaClmb3IodmFyIGI9Cm0ucGxheWVyYXBpKCksYT10aGlzLmdldFBsYXllcigpLklhKCkuaWQsYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10uaWQ9PWEmJih0aGlzLm5oPWJbY10pO3JldHVybiB0aGlzLm5ofSxodzpmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuaW1hPyFpbWEudmlkZW8uY2xpZW50LmpzVGFnJiYhaW1hLnZpZGVvLmNsaWVudC50YWdnZWQmJiFpbWEudmlkZW8uY2xpZW50LmdldEVEYXRhOiExfSxzOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nP2I/dGhpcy5wZCgpLmFkc0xvYWRlcj90aGlzLkkoITApOnRoaXMuSSgpOnRoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwKX19KX0pKGMpO3ZhciBGYj1jLkJsfHxGYjsoZnVuY3Rpb24oYyl7Yy5EbD1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtJiZtLnBsYXllcmFwaSl7dmFyIGI9bS5wbGF5ZXJhcGkoKTtpZihiLmxlbmd0aCl7Zm9yKHZhciBhPQowO2E8Yi5sZW5ndGg7YSsrKXt2YXIgYz1uZXcgRWIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYlthXS5pZCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pO3RoaXMuTihjKXx8KHRoaXMuUChjKSwobmV3IEZiKGMsdGhpcy5LKSkuZygpKX1yZXR1cm59fXRoaXMuUigpfX0pfSkoYyk7dmFyIEdiPWMuRGx8fEdiLEhiPW5ldyBHYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5lcD10aGlzLmFbMV07dGhpcy51aT10aGlzLmFbMTBdO3RoaXMuSWk9dGhpcy5hWzZdO3RoaXMud3M9dGhpcy5hWzddO3RoaXMueG49dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbMl19Yy5RbD1iO2IucHJvdG90eXBlPXtjcDpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLmVwOnRoaXMudGkoYSl9LHRpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy51aTp0aGlzLkhpKGEpfSxIaTpmdW5jdGlvbihhKXtyZXR1cm4gMTA8CmE/dGhpcy5JaTp0aGlzLnZzKGEpfSx2czpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMud3M6dGhpcy53bihhKX0sd246ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLnhuOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuajphfX19KShjKTt2YXIgSWI9Yy5RbHx8SWIsSmM9bmV3IEliKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9SmMuY3AoNCk7KGZ1bmN0aW9uKGMpe2MuRWs9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5wbGF5ZXIuaWQpO0cmJihiPWIuZmlyc3RDaGlsZCk7aWYoYil7dGhpcy5ZKGIpO2lmKGIudGFnTmFtZSl7dmFyIGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXTthfHwoYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7CmF8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImVtYmVkIilbMF0pfWE/dGhpcy5aKGEpOnRoaXMucGEoKX1lbHNlIHRoaXMucGEoKX0sZnc6ZnVuY3Rpb24oKXt2YXIgYj0hMTswPD1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpLmluZGV4T2YoInNwaWVnZWwuZGUiKSYmKGI9ITApO3JldHVybiBifSxwYXVzZTpmdW5jdGlvbigpe2lmKEcpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7d2luZG93Ll9wbGF5LmNvbnRyb2wuaW50ZXJhY3QucGF1c2UoYi5pZCl9ZWxzZSB3aW5kb3cuX3BsYXkuYWRkb25zLnN2bS5zZW5kQ29tbWFuZCgicGF1c2UiKX0scGxheTpmdW5jdGlvbigpe2lmKEcpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7d2luZG93Ll9wbGF5LmNvbnRyb2wuaW50ZXJhY3QucGxheShiLmlkKX1lbHNlIHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLnNlbmRDb21tYW5kKCJwbGF5Iil9LFZhOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy52aWRlb1RhZztyZXR1cm4gYiYmIWIucGF1c2VkPwoodGhpcy5wYXVzZSgpLCEwKTohMX0sTzpmdW5jdGlvbigpe3JldHVybiJuZXh0In0sSGM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSWE6ZnVuY3Rpb24oKXt2YXIgYjtHPyhiPXRoaXMuZ2V0UmF3UGxheWVyKCksYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChiLmlkKS5maXJzdENoaWxkKTpiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLmdldFBsYXllckNvbnRhaW5lcigpKTtiIT10aGlzLmNvbnRhaW5lciYmKHRoaXMuY29udGFpbmVyPWIpO3JldHVybiB0aGlzLmNvbnRhaW5lcn19KX0pKGMpO3ZhciBZPWMuRWt8fFk7KGZ1bmN0aW9uKGMpe2MuRGs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMuV2U9IiI7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtiJiYodGhpcy5XZT1iLmlkKTtHP3dpbmRvdy5fcGxheS5jb25maWcuYWRkQWRkb25MaXN0ZW5lcihmdW5jdGlvbihhKXt2YXIgYj0KYS5wbGF5ZXJDb250YWluZXI7YiYmdGhpcy5XZSYmYiE9dGhpcy5XZXx8ImFkZXJyb3IiIT1hLmV2ZW50fHxlLkJhKCJ0ZWxlNS5kZSIpJiYicG9zdHJvbGwiPT1hLmFkVHlwZXx8KGEuYWRVUkwmJihtLmFkVGFnPWEuYWRVUkwpLHRoaXMubygiYWRlcnJvciIsYS5rdyksdGhpcy5JKCksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnJhKCl9LmJpbmQodGhpcyksMTAwKSl9LmJpbmQodGhpcyksInN2bSIpOndpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLnNldExpc3RlbmVyKGZ1bmN0aW9uKGEpeyJhZGVycm9yIj09YSYmKHRoaXMubygiYWRlcnJvciIpLHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDEwMCkpfS5iaW5kKHRoaXMpKX19KX0pKGMpO3ZhciBaPWMuRGt8fFo7KGZ1bmN0aW9uKGMpe2MuRms9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93Ll9wbGF5JiYKd2luZG93Ll9wbGF5LmFkZG9ucyYmd2luZG93Ll9wbGF5LmFkZG9ucy5zdm0pe0c9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLmdldFBsYXllckNvbnRhaW5lcj8hMTohMDt2YXIgYjtpZihHKWZvcih2YXIgYT13aW5kb3cuX3BsYXkuY29udHJvbC5nZXRJbnN0YW5jZXMoKSxjPWEubGVuZ3RoLGQ9MDtkPGM7ZCsrKXtpZihiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFbZF0pKWI9bmV3IFkoYiksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFooYix0aGlzLkspLGIuZygpKX1lbHNlIGlmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQod2luZG93Ll9wbGF5LmFkZG9ucy5zdm0uZ2V0UGxheWVyQ29udGFpbmVyKCkpKWI9bmV3IFkoYiksYi5xYT90aGlzLmFmKCk6dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFooYix0aGlzLkspLGIuZygpKX10aGlzLlIoKX19KX0pKGMpO3ZhciBHLEpiPWMuRmt8fEpiLEtiPW5ldyBKYihoYSk7Yz1jfHwKe307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnhwPXRoaXMuYVs1XTt0aGlzLlFtPXRoaXMuYVs3XTt0aGlzLlNtPXRoaXMuYVs0XTt0aGlzLnNpPXRoaXMuYVs5XTt0aGlzLnZqPXRoaXMuYVs4XTt0aGlzLlhsPXRoaXMuYVs5XTt0aGlzLkV1PXRoaXMuYVsxMF07dGhpcy5ZdD10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs0XX1jLllvPWI7Yi5wcm90b3R5cGU9e3dwOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy54cDp0aGlzLlBtKGEpfSxQbTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuUW06dGhpcy5SbShhKX0sUm06ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5TbTp0aGlzLnJpKGEpfSxyaTpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuc2k6dGhpcy51aihhKX0sdWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLnZqOnRoaXMuV2woYSl9LFdsOmZ1bmN0aW9uKGEpe3JldHVybiA1PAphP3RoaXMuWGw6dGhpcy5EdShhKX0sRHU6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLkV1OnRoaXMuWHQoYSl9LFh0OmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5ZdDp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLmo6YX19fSkoYyk7dmFyIExiPWMuWW98fExiLEtjPW5ldyBMYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPUtjLndwKDQpOyhmdW5jdGlvbihjKXtjLk5tPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpO2lmKGImJmJbMF0pe2Zvcih2YXIgYT1iPWJbMF07YSYmYS5wYXJlbnROb2RlOyl7aWYoIkJPRFkiPT1hLnBhcmVudE5vZGUubm9kZU5hbWUpe2E9YS5wYXJlbnROb2RlO2JyZWFrfWE9YS5wYXJlbnROb2RlfXRoaXMuWihiKTsKdGhpcy5ZKGEpO3RoaXMuU2Q9ITE7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhkRXZlbnQiLGZ1bmN0aW9uKGEpe2lmKGEuZGV0YWlsKXtpZigiY29udGVudFBsYXllclBsYXkiPT1hLmRldGFpbC5uYW1lKXRyeXt3aW5kb3cuREw4X29uQWRDb21wbGV0ZWQoKSx0aGlzLlNkPSExfWNhdGNoKGIpe31pZigiYWRSZXF1ZXN0Ij09YS5kZXRhaWwubmFtZSl0cnl7dGhpcy5TZHx8KHRoaXMuU2Q9ITAsd2luZG93LkRMOF9vbkFkU3RhcnRlZCgpKX1jYXRjaChjKXt9fX0uYmluZCh0aGlzKSl9ZWxzZSB0aGlzLnBhKCl9LHBhdXNlOmZ1bmN0aW9uKCl7dHJ5e3dpbmRvdy5ETDhfb25Db250ZW50UGF1c2VSZXF1ZXN0ZWQoKX1jYXRjaChiKXt0aGlzLnZpZGVvVGFnLnBhdXNlKCl9fSxwbGF5OmZ1bmN0aW9uKCl7dHJ5e3dpbmRvdy5ETDhfb25Db250ZW50UmVzdW1lUmVxdWVzdGVkKCl9Y2F0Y2goYil7dGhpcy52aWRlb1RhZy5wbGF5KCl9fSxWYTpmdW5jdGlvbigpe2lmKCF0aGlzLnZpZGVvVGFnLnBhdXNlZClyZXR1cm4gdGhpcy5wYXVzZSgpLAohMH0sTzpmdW5jdGlvbigpe3JldHVybiJ4eW1hdGljIn19KX0pKGMpO3ZhciBNYj1jLk5tfHxNYjsoZnVuY3Rpb24oYyl7Yy5NbT12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxpdDpmdW5jdGlvbihiKXtiJiZiLmFkZEV2ZW50TGlzdGVuZXImJihiLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBsZXRlIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJpbXByZXNzaW9uIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJmaXJzdHF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJtaWRwb2ludCIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigidGhpcmRxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigiYWRzTWFuYWdlckxvYWRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigiYWRzRXJyb3IiLApmdW5jdGlvbihhKXt0aGlzLmJkKGEpfS5iaW5kKHRoaXMpKSxiLmFkZEV2ZW50TGlzdGVuZXIoImFkRXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuYmQoYSl9LmJpbmQodGhpcykpKTtiJiZiLmFkZEFkRXJyb3JMaXN0ZW5lciYmYi5hZGRBZEVycm9yTGlzdGVuZXIoZnVuY3Rpb24oYSl7dGhpcy5iZChhKX0uYmluZCh0aGlzKSl9LGJkOmZ1bmN0aW9uKGIpe3ZhciBhPXt9O2IuZ2V0RXJyb3ImJihiLmdldEVycm9yKCksYT1iLmdldEVycm9yKCkpO2EuZ2V0RXJyb3JDb2RlPyhhLmdldEVycm9yQ29kZSgpLHRoaXMubygiYWRlcnJvciIsYS5nZXRFcnJvckNvZGUoKSksMTAwOT09YS5nZXRFcnJvckNvZGUoKXx8MzAzPT1hLmdldEVycm9yQ29kZSgpfHw0MDM9PWEuZ2V0RXJyb3JDb2RlKCk/dGhpcy53KCk6dGhpcy5JKCkpOih0aGlzLm8oIm5vZnJhbWV3b3JrIiksdGhpcy5JKCkpfSxMZjpmdW5jdGlvbigpe2lmKHdpbmRvdy5fX2RsOF9hZEVycm9yRXZlbnRCdWNrZXQpZm9yKHZhciBiPTA7YjwKd2luZG93Ll9fZGw4X2FkRXJyb3JFdmVudEJ1Y2tldC5sZW5ndGg7YisrKXRoaXMuYmQod2luZG93Ll9fZGw4X2FkRXJyb3JFdmVudEJ1Y2tldFtiXSk7dGhpcy51YSgpfHx3aW5kb3cuc2V0VGltZW91dCh0aGlzLkxmLmJpbmQodGhpcyksMTAwKX0sZzpmdW5jdGlvbigpe3dpbmRvdy5fX2RsOF9hZHNMb2FkZXImJnRoaXMuaXQod2luZG93Ll9fZGw4X2Fkc0xvYWRlcik7dGhpcy5MZigpfX0pfSkoYyk7dmFyIE5iPWMuTW18fE5iOyhmdW5jdGlvbihjKXtjLk9tPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe2lmKHdpbmRvdy5ETDhfR0xPQkFMUyl7dmFyIGI9bmV3IE1iKHdpbmRvdy5ETDhfR0xPQkFMUyk7Yi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLChuZXcgTmIoYix0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIE9iPWMuT218fE9iLFBiPW5ldyBPYihoYSk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT0KQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLkZyPXRoaXMuYVsyXTt0aGlzLklzPXRoaXMuYVs4XTt0aGlzLlhuPXRoaXMuYVsxXTt0aGlzLlVqPXRoaXMuYVszXTt0aGlzLlpxPXRoaXMuYVs5XTt0aGlzLmo9dGhpcy5hWzZdfWMuRm49YjtiLnByb3RvdHlwZT17RXI6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLkZyOnRoaXMuSHMoYSl9LEhzOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5Jczp0aGlzLlduKGEpfSxXbjpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuWG46dGhpcy5UaihhKX0sVGo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlVqOnRoaXMuWXEoYSl9LFlxOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5acTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLmo6YX19fSkoYyk7dmFyIFFiPWMuRm58fFFiLExjPW5ldyBRYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLAoibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1MYy5Fcig0KTsoZnVuY3Rpb24oYyl7Yy5qbT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt0aGlzLnJoPSExO3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7aWYoYi52aWRlb01vZGVsKXt2YXIgYT1iLnZpZGVvTW9kZWwuZ2V0KCJwbGF5ZXJFbGVtZW50Iik7aWYoYSl7dGhpcy5ZKGEpO3ZhciBjPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07Y3x8KGM9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO2M/KHRoaXMuWihjKSxiLnZpZGVvTW9kZWwub2JzZXJ2ZSgicG9zaXRpb24iLGZ1bmN0aW9uKGEpe3RoaXMuYXM9YX0uYmluZCh0aGlzKSksYi52aWRlb01vZGVsLm9ic2VydmUoImR1cmF0aW9uIixmdW5jdGlvbihhKXt0aGlzLmR1cmF0aW9uPWF9LmJpbmQodGhpcykpKTp0aGlzLnBhKCl9ZWxzZSB0aGlzLnBhKCl9ZWxzZSB0aGlzLnBhKCl9LApxdzpmdW5jdGlvbigpe30sdmE6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLGE9MTtyZXR1cm4gYi52aWRlb01vZGVsJiZiLnZpZGVvTW9kZWwuZ2V0JiYoYT1iLnZpZGVvTW9kZWwuZ2V0KCJ2b2x1bWUiKSwwPGEpPyExOiEwfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkudmlkZW9Nb2RlbC5wYXVzZSgpfSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb01vZGVsLnBsYXkoKX0sVmE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb01vZGVsLmdldCgiaXNQYXVzZWQiKT8hMToodGhpcy5wYXVzZSgpLCEwKX0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc30sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kdXJhdGlvbn0sTzpmdW5jdGlvbigpe3JldHVybiJ0djIifSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkudmlkZW9Nb2RlbC5vYnNlcnZlKCJwb3NpdGlvbiIsCmZ1bmN0aW9uKGIpe3RoaXMuTWQoYil9LmJpbmQodGhpcykpfSxNZDpmdW5jdGlvbihiKXt0aGlzLmdldFJhd1BsYXllcigpO3RoaXMuZ2V0Q3VycmVudFRpbWUoKT5iJiYoYj10aGlzLmdldEN1cnJlbnRUaW1lKCkpO3ZhciBhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiYhdGhpcy5yaCYmKHRoaXMucmg9ITAsdGhpcy5WJiZ0aGlzLlYoKSl9fSl9KShjKTt2YXIgUD1jLmptfHxQOyhmdW5jdGlvbihjKXtjLmltPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LEFhOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZighdGhpcy5wZSlpZih0aGlzLkFifHwodGhpcy5BYj0wKSx0aGlzLkFiKyssMTU8dGhpcy5BYil7aWYod2luZG93LmltYSYmd2luZG93LmltYS5jb21tb24mJndpbmRvdy5pbWEuSW1hU2RrU2V0dGluZ3MmJndpbmRvdy5pbWEuY29tbW9uLmdldFZpZGVvTWV0YWRhdGEmJndpbmRvdy5pbWEuY29tbW9uLnRyaWdnZXJNZWFzdXJhYmxlRXZlbnQpcmV0dXJuIHdpbmRvdy5jYW5SdW5BZHM/CnRoaXMuSXQoKTp0aGlzLnMoITApLCEwO3RoaXMubygibm9mcmFtZXdvcmsiLCJJTUEiKTtiLnZpZGVvTW9kZWwuZ2V0KCJhZFRhZ1VybCIpP3RoaXMucygpOnRoaXMucyghMCl9ZWxzZSBpZihiPWIudmlkZW9Nb2RlbC5nZXQoImFkc0xvYWRlciIpKXt0aGlzLnBlPSEwO3ZhciBhPSJhZEVycm9yIjt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudCYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7Yi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhKTt0aGlzLmRhfHwodGhpcy5vKCJhZGVycm9yIix0aGlzLlQpLHRoaXMucygpKX0uYmluZCh0aGlzKSl9ZWxzZSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuQWEoKX0uYmluZCh0aGlzKSwxMCl9LHZkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF9LApnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYz0hMDtjfHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGM9ITApOyJudW1iZXIiPT10eXBlb2YgYT8oYi5UPWEsYi5vKCJhZGVycm9yIixhKSk6Yi5vKCJhZGVycm9yIil9cmV0dXJuIGN9Yi5vcmlnaW5hbEV2ZW50JiYoYj1iLm9yaWdpbmFsRXZlbnQpO2lmKGIuZ2V0RXJyb3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmdldEVycm9yKXt2YXIgYz1iLmdldEVycm9yKCk7aWYoYy5nZXRFcnJvckNvZGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLmdldEVycm9yQ29kZSYmYShjLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7cmV0dXJufX1mb3IodmFyIGQgaW4gYilpZihiLmhhc093blByb3BlcnR5KGQpJiZiW2RdJiZiW2RdLmFkRXJyb3ImJmJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJgoiZnVuY3Rpb24iPT10eXBlb2YgYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmYShiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTticmVha319LGc6ZnVuY3Rpb24oKXt0aGlzLlQ9dGhpcy5UfHwhMTt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO3RoaXMuQWEoKTtiLnZpZGVvTW9kZWwub2JzZXJ2ZSgicGxheVN0YXRlIixmdW5jdGlvbihhKXsicGxheWluZyI9PWEmJih0aGlzLmlzUGxheWluZz0hMCl9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJwbGF5TW9kZSIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJjdXJyZW50QWRTZWdtZW50IixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7Yi52aWRlb01vZGVsLm9ic2VydmUoImlzQWRzUGxheWluZyIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9yIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7CmIudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9ycyIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9yc1giLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKTtiLnZpZGVvTW9kZWwub2JzZXJ2ZSgiTk9OX0VWRU5UIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSl9LHM6ZnVuY3Rpb24oYil7dGhpcy5pc1BsYXlpbmc/dGhpcy5JKGIpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwKX19KX0pKGMpO3ZhciBRPWMuaW18fFE7KGZ1bmN0aW9uKGMpe2Mua209cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpO3RoaXMuVWE9LTF9LGc6ZnVuY3Rpb24oKXtpZih3aW5kb3cuaW5zZXJ0ZWRQbGF5ZXIpe3ZhciBiPW5ldyBQKHdpbmRvdy5pbnNlcnRlZFBsYXllcik7Yi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKX1pZih3aW5kb3cuVFYyUGxheWVycyYmCndpbmRvdy5UVjJQbGF5ZXJzLmxlbmd0aClmb3IodmFyIGE9MDthPHdpbmRvdy5UVjJQbGF5ZXJzLmxlbmd0aDthKyspYj1uZXcgUCh3aW5kb3cuVFYyUGxheWVyc1thXSksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKTtlbHNlIGlmKHdpbmRvdy5UVjJQbGF5ZXJzKWZvcihhIGluIHdpbmRvdy5UVjJQbGF5ZXJzKXdpbmRvdy5UVjJQbGF5ZXJzLmhhc093blByb3BlcnR5KGEpJiZ3aW5kb3cuVFYyUGxheWVyc1thXS52aWRlb01vZGVsJiYoYj1uZXcgUCh3aW5kb3cuVFYyUGxheWVyc1thXSksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKSk7dGhpcy5hZigpO3RoaXMuUigpfX0pfSkoYyk7dmFyIFJiPWMua218fFJiLFNiPW5ldyBSYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy56bD0KdGhpcy5hWzFdO3RoaXMuVHE9dGhpcy5hWzRdO3RoaXMuS3M9dGhpcy5hWzFdO3RoaXMuTHA9dGhpcy5hWzddO3RoaXMuaj10aGlzLmFbNl19Yy5MbT1iO2IucHJvdG90eXBlPXt5bDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuemw6dGhpcy5TcShhKX0sU3E6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlRxOnRoaXMuSnMoYSl9LEpzOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Lczp0aGlzLktwKGEpfSxLcDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuTHA6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBUYj1jLkxtfHxUYixNYz1uZXcgVGIoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1NYy55bCg0KTsoZnVuY3Rpb24oYyl7Yy50az11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXJDb250YWluZXI7dGhpcy5ZKGIpO3ZhciBhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07YXx8KGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO3RoaXMuWihhKTthJiZ0aGlzLlkoYS5wYXJlbnROb2RlKX0sTzpmdW5jdGlvbigpe3JldHVybiJsYW9sYTEifSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5hcGkucGxheSgpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkuYXBpLnBhdXNlKCl9fSl9KShjKTt2YXIgYWE9Yy50a3x8YWE7KGZ1bmN0aW9uKGMpe2Muc2s9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMuT2c9MDt0aGlzLlQ9dGhpcy5UfHwhMTt0aGlzLmdldFBsYXllcigpO3RoaXMuZGE9dGhpcy5CYz10aGlzLkFhPXRoaXMuWWM9ITE7dGhpcy52aD1lLkViKDEwKTsKdGhpcy5YZygpfSxYZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7aWYoYi5zdWJQbGF5ZXImJmIuc3ViUGxheWVyLmFkc0ludGVyZmFjZSYmYi5zdWJQbGF5ZXIuYWRzSW50ZXJmYWNlLmFkc0xvYWRlcilyZXR1cm4gdGhpcy5uYT1iLnN1YlBsYXllci5hZHNJbnRlcmZhY2UuYWRzTG9hZGVyLHRoaXMub2IoKSwhMDt0aGlzLk9nKys7aWYoMTA8dGhpcy5PZyl0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIiksd2luZG93LmltYSYmd2luZG93LmltYS5jb21tb24mJndpbmRvdy5pbWEuSW1hU2RrU2V0dGluZ3M/dGhpcy5zKCEwKTp0aGlzLnMoKTtlbHNlIHJldHVybiB3aW5kb3cuc2V0VGltZW91dCh0aGlzLlhnLmJpbmQodGhpcyksMTAwKSwhMX0sb2I6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm5hO2lmKGIpe3ZhciBhPSJhZEVycm9yIixjPSJsb2ciO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiYKZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYoYz1nb29nbGUuaW1hLkFkRXZlbnQuVHlwZS5MT0cpOyJmdW5jdGlvbiIhPT10eXBlb2YgYi5hZGRFdmVudExpc3RlbmVyP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKTooYi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKGMsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCk7dGhpcy5mYSghMCl9LmJpbmQodGhpcykpKX1lbHNlIHRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLm9iKCl9LmJpbmQodGhpcyksCjIwKX0sZ2E6ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYShhLGIpe3ZhciBjPSExO2lmKGEpe2lmKDEwMDk9PWF8fDMwMz09YXx8NDAzPT1hKWM9ITA7Y3x8IWEuaW5kZXhPZnx8LTE9PT1hLmluZGV4T2YoIjEwMDkiKSYmLTE9PT1hLmluZGV4T2YoIjMwMyIpJiYtMT09PWEuaW5kZXhPZigiNDAzIil8fChjPSEwKTsibnVtYmVyIj09dHlwZW9mIGEmJihiLlQ9YSxiLm8oImFkZXJyb3IiLGEpKX1yZXR1cm4gY31iLm9yaWdpbmFsRXZlbnQmJihiPWIub3JpZ2luYWxFdmVudCk7aWYoYi5nZXRFcnJvciYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0RXJyb3Ipe3ZhciBjPWIuZ2V0RXJyb3IoKTtpZihjLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuZ2V0RXJyb3JDb2RlJiZhKGMuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTtyZXR1cm59fWZvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkmJmJbZF0mJmJbZF0uYWRFcnJvciYmYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmCiJmdW5jdGlvbiI9PXR5cGVvZiBiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlJiZhKGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO2JyZWFrfX0sdmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYX0sRGE6ZnVuY3Rpb24oKXt0aGlzLmRhPSEwfSxmYTpmdW5jdGlvbihiKXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZGE/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwMCl9LHM6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTthLmFwaS5wbGF5ZWQmJmEuYXBpLnBsYXllZCgpP3RoaXMuSShiKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMucyhiKX0uYmluZCh0aGlzKSwxMCl9fSl9KShjKTt2YXIgYmE9Yy5za3x8YmE7KGZ1bmN0aW9uKGMpe2MudWs9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9ITE7CmlmKHdpbmRvdy5sMVBsYXllckluc3RhbmNlJiZ3aW5kb3cubDFQbGF5ZXJJbnN0YW5jZS5sZW5ndGgmJjA8d2luZG93LmwxUGxheWVySW5zdGFuY2UubGVuZ3RoKWZvcih2YXIgYT0wO2E8d2luZG93LmwxUGxheWVySW5zdGFuY2UubGVuZ3RoO2ErKyliPW5ldyBhYSh3aW5kb3cubDFQbGF5ZXJJbnN0YW5jZVswXSksdGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IGJhKGIsdGhpcy5LKSxiLmcoKSk7ZWxzZSB3aW5kb3cucGxheWVyJiZ3aW5kb3cucGxheWVyLmFwaSYmd2luZG93LnBsYXllci5sMVBsYXllciYmKGI9bmV3IGFhKHdpbmRvdy5wbGF5ZXIpLHRoaXMuTihiKXx8KHRoaXMuUChiKSxiPW5ldyBiYShiLHRoaXMuSyksYi5nKCkpKTt0aGlzLlIoKX19KX0pKGMpO3ZhciBVYj1jLnVrfHxVYixWYj1uZXcgVWIocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTnU9dGhpcy5hWzJdOwp0aGlzLmtzPXRoaXMuYVs5XTt0aGlzLmJwPXRoaXMuYVsxXTt0aGlzLnd2PXRoaXMuYVsxMF07dGhpcy5Kaz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbM119Yy5Hbj1iO2IucHJvdG90eXBlPXtNdTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuTnU6dGhpcy5qcyhhKX0sanM6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5rczp0aGlzLmFwKGEpfSxhcDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuYnA6dGhpcy52dihhKX0sdnY6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnd2OnRoaXMuSWsoYSl9LElrOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5Kazp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLmo6YX19fSkoYyk7dmFyIFdiPWMuR258fFdiLE5jPW5ldyBXYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPQpOYy5NdSg0KTsoZnVuY3Rpb24oYyl7Yy5Xaj11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPSExO3RyeXtiPXRoaXMuZ2V0UmF3UGxheWVyKClbMF0ucGFyZW50Tm9kZSxhPXRoaXMuZ2V0UmF3UGxheWVyKClbMF19Y2F0Y2goYyl7fWImJmE/KHRoaXMuWShiKSx0aGlzLlooYSksdGhpcy5nZXRSYXdQbGF5ZXIoKSk6dGhpcy5wYSgpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkuY3NzKCJkaXNwbGF5Iiwibm9uZSIpfSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5jc3MoImRpc3BsYXkiLCJibG9jayIpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkdBTlZpZGVvIn19KX0pKGMpO3ZhciBYYj1jLldqfHxYYjsoZnVuY3Rpb24oYyl7Yy5Waj12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dGhpcy5mZygpfSxmZzpmdW5jdGlvbihiKXt3aW5kb3cuR0FOX1ZpZGVvfHwKKGI/KHRoaXMubygibm9mcmFtZXdvcmsiLCJJTUEiKSx0aGlzLkkoKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmZnKCEwKX0uYmluZCh0aGlzKSwxMDApKX19KX0pKGMpO3ZhciBZYj1jLlZqfHxZYjsoZnVuY3Rpb24oYyl7Yy5Yaj1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2FtZSIpO2lmKGImJiJESVYiPT1iLm5vZGVOYW1lJiZ3aW5kb3cudmlkZW9hZF9nYW5fc3RhcnQmJndpbmRvdy4kJiZ3aW5kb3cuJCgiZGl2I2dhbWUiKSl7Yj1uZXcgWGIod2luZG93LiQoImRpdiNnYW1lIikpO2lmKGIucWEpe3RoaXMuUigpO3JldHVybn1pZighdGhpcy5OKGIpKXt0aGlzLlAoYik7KG5ldyBZYihiLHRoaXMuSykpLmcoKTt0aGlzLlIoKTtyZXR1cm59fXRoaXMuUigpfX0pfSkoYyk7dmFyIFpiPWMuWGp8fFpiLCRiPW5ldyBaYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPQpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMueGo9dGhpcy5hWzldO3RoaXMuYW89dGhpcy5hWzNdO3RoaXMuR3Y9dGhpcy5hWzVdO3RoaXMuaj10aGlzLmFbNV19Yy5NcT1iO2IucHJvdG90eXBlPXt3ajpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMueGo6dGhpcy4kbihhKX0sJG46ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmFvOnRoaXMuRnYoYSl9LEZ2OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuR3Y6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBhYz1jLk1xfHxhYyxPYz1uZXcgYWMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1PYy53aig0KTsoZnVuY3Rpb24oYyl7Yy5raT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0KdGhpcy5nZXRSYXdQbGF5ZXIoKS5nZXRXcmFwcGVyKCk7Yj8odGhpcy5ZKGIpLChiPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pP3RoaXMuWihiKTp0aGlzLnBhKCkpOnRoaXMucGEoKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlVmlkZW8oKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheVZpZGVvKCl9LE86ZnVuY3Rpb24oKXtyZXR1cm4iQVYifX0pfSkoYyk7dmFyIGJjPWMua2l8fGJjOyhmdW5jdGlvbihjKXtjLmppPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2Iub24oImFkRXJyb3IiLGZ1bmN0aW9uKCl7d2luZG93LnNldFRpbWVvdXQodGhpcy5zLmJpbmQodGhpcyksMTAwKX0uYmluZCh0aGlzKSk7Yi5vbigiYWRGcmFtZXdvcmtOb3RBdmFpbGFibGUiLGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcykpOwp0aGlzLmhlKCk7dGhpcy5iZygpfSxnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYz0hMDtjfHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGM9ITApOyJudW1iZXIiPT10eXBlb2YgYSYmKGIuVD1hLGIubygiYWRlcnJvciIsYSkpfXJldHVybiBjfWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTtpZihiLmdldEVycm9yJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5nZXRFcnJvcil7dmFyIGM9Yi5nZXRFcnJvcigpO2lmKGMuZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5nZXRFcnJvckNvZGUmJmEoYy5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO3JldHVybn19Zm9yKHZhciBkIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSYmYltkXSYmYltkXS5hZEVycm9yJiYKYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJmEoYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7YnJlYWt9fSx2ZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhfSxEYTpmdW5jdGlvbigpe3RoaXMuZGE9ITA7dGhpcy53KCJlbXB0eSB2YXN0Iil9LGJnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZihiLmdldFNlbGVjdGVkQWRIYW5kbGVyKWlmKChiPWIuZ2V0U2VsZWN0ZWRBZEhhbmRsZXIoKSkmJmIuYWRzTG9hZGVyKWZvcih2YXIgYT0wO2E8Yi5hZHNMb2FkZXIubGVuZ3RoO2ErKyl7dmFyIGM9ImFkRXJyb3IiO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SJiYKKGM9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7Yi5hZHNMb2FkZXJbYV0uYWRkRXZlbnRMaXN0ZW5lcihjLGZ1bmN0aW9uKGEpe2EuZ2V0RXJyb3ImJihhPWEuZ2V0RXJyb3IoKSk7dmFyIGI9ITE7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYj0hMDtpZighYilmb3IodmFyIGMgaW4gYSl7aWYoYVtjXSYmYVtjXS5pbmRleE9mJiYoLTEhPWFbY10uaW5kZXhPZigiMTAwOSIpfHwtMSE9YVtjXS5pbmRleE9mKCIzMDMiKXx8LTEhPWFbY10uaW5kZXhPZigiNDAzIikpKXtiPSEwO2JyZWFrfWlmKGFbY10mJigxMDA5PT1hW2NdfHwzMDM9PWFbY118fDQwMz09YVtjXSkpe2I9ITA7YnJlYWt9fWI/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKCl9LmJpbmQodGhpcykpfWVsc2Ugd2luZG93LnNldFRpbWVvdXQodGhpcy5iZy5iaW5kKHRoaXMpLDUwKTtlbHNlIHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuaGUuYmluZCh0aGlzKSwxMDApfSxoZTpmdW5jdGlvbigpe2lmKCF0aGlzLnVhKCkpe3ZhciBiPQp0aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyJwbGF5aW5nIj09Yi5nZXRQbGF5U3RhdGUoKT9iLmdldEFkSW5mbygpPyh3aW5kb3cuc2V0VGltZW91dCh0aGlzLnJhLmJpbmQodGhpcyksMTApLHRoaXMudygpKTpiLl9wbGF5ZXJPcHRpb25zJiZiLl9wbGF5ZXJPcHRpb25zLnBsYXlBZHZlcnRpc2VtZW50c3x8Yi5fYWRSZWdpc3RlcmVkP3RoaXMucygpOnRoaXMucyghMCk6d2luZG93LnNldFRpbWVvdXQodGhpcy5oZS5iaW5kKHRoaXMpLDEwMCl9fSxzOmZ1bmN0aW9uKGIpe3dpbmRvdy5zZXRUaW1lb3V0KHRoaXMucmEuYmluZCh0aGlzKSwxRTQpO3RoaXMuSShiKX19KX0pKGMpO3ZhciBjYz1jLmppfHxjYzsoZnVuY3Rpb24oYyl7Yy5saT1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFhhOmZ1bmN0aW9uKGIpe2I9bmV3IGJjKGIpO2IucWE/dGhpcy5SKCk6dGhpcy5OKGIpfHwodGhpcy5QKGIpLChuZXcgY2MoYix0aGlzLkspKS5nKCkpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93LnNyYXZ2cGxQbGF5ZXJJbnN0YW5jZXMpZm9yKHZhciBiPQowO2I8d2luZG93LnNyYXZ2cGxQbGF5ZXJJbnN0YW5jZXMubGVuZ3RoO2IrKyl0aGlzLlhhKHdpbmRvdy5zcmF2dnBsUGxheWVySW5zdGFuY2VzW2JdKTtlbHNlIHdpbmRvdy5zZXR1cFBsYXllckVsZW1lbnQ/dGhpcy5YYSh3aW5kb3cuc2V0dXBQbGF5ZXJFbGVtZW50KTp0aGlzLlIoKX19KX0pKGMpO3ZhciBkYz1jLmxpfHxkYyxlYz1uZXcgZGMocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuSW49dGhpcy5hWzNdO3RoaXMuU2o9dGhpcy5hWzJdO3RoaXMuVm49dGhpcy5hWzldO3RoaXMud2k9dGhpcy5hWzRdO3RoaXMuUmk9dGhpcy5hWzNdO3RoaXMubW09dGhpcy5hWzZdO3RoaXMuJGw9dGhpcy5hWzFdO3RoaXMua289dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbM119Yy5ncz1iO2IucHJvdG90eXBlPXtIbjpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuSW46dGhpcy5SaihhKX0sClJqOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuU2o6dGhpcy5VbihhKX0sVW46ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlZuOnRoaXMudmkoYSl9LHZpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy53aTp0aGlzLlFpKGEpfSxRaTpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMuUmk6dGhpcy5sbShhKX0sbG06ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLm1tOnRoaXMuWmwoYSl9LFpsOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy4kbDp0aGlzLmpvKGEpfSxqbzpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMua286dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBmYz1jLmdzfHxmYyxQYz1uZXcgZmMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1QYy5Ibig0KTtjPWN8fHt9OwooZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuWmc9dGhpcy5haD10aGlzLiRnPSExO3RoaXMuQWQ9W107dGhpcy4kZT17R0FOVmlkZW86InVuZGVmaW5lZCI9PT10eXBlb2YgJGI/bnVsbDokYixsYW9sYTFQbGF5ZXI6InVuZGVmaW5lZCI9PT10eXBlb2YgVmI/bnVsbDpWYixWaWRlb0pTOiJ1bmRlZmluZWQiPT09dHlwZW9mIEJhP251bGw6QmEsYml0bW92aW46InVuZGVmaW5lZCI9PT10eXBlb2YgVT9udWxsOlUsb3ZWaWRlbzoidW5kZWZpbmVkIj09PXR5cGVvZiBHYT9udWxsOkdhLFJhZGlhbnRNUDoidW5kZWZpbmVkIj09PXR5cGVvZiBIYj9udWxsOkhiLGp3OiJ1bmRlZmluZWQiPT09dHlwZW9mIHdhP251bGw6d2EsdHYyOiJ1bmRlZmluZWQiPT09dHlwZW9mIFNiP251bGw6U2IsdGZtc3VpdGVQbGF5ZXI6InVuZGVmaW5lZCI9PT10eXBlb2YgeD9udWxsOngsbmV4dFBsYXllcjoidW5kZWZpbmVkIj09PXR5cGVvZiBLYj9udWxsOktiLHh5bWF0aWNQbGF5ZXI6InVuZGVmaW5lZCI9PT0KdHlwZW9mIFBiP251bGw6UGIsYmlsZE1lZGlhUGxheWVyOiJ1bmRlZmluZWQiPT09dHlwZW9mIG9iP251bGw6b2IsT295YWxhOiJ1bmRlZmluZWQiPT09dHlwZW9mIGRiP251bGw6ZGIsUm9ja2VyeToidW5kZWZpbmVkIj09PXR5cGVvZiBDYj9udWxsOkNiLGluUmVhZDoidW5kZWZpbmVkIj09PXR5cGVvZiBMYT9udWxsOkxhLHdmdjQ6InVuZGVmaW5lZCI9PT10eXBlb2YgeGI/bnVsbDp4YixBVlBsYXllckRldGVjdGlvbjoidW5kZWZpbmVkIj09PXR5cGVvZiBlYz9udWxsOmVjLE9ubHlIT01BRDoidW5kZWZpbmVkIj09PXR5cGVvZiBYP251bGw6WH19Yy50bD1iO2IucHJvdG90eXBlPXtnOmZ1bmN0aW9uKCl7dmFyIGE9W10sYT1hLmxlbmd0aD90aGlzLm9xKGEpOltdLGI7dGhpcy5haD0hMDtpZihhLmxlbmd0aCl7dGhpcy4kZz0hMDtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyliPWFbY10sdGhpcy5BaChiKX1lbHNlIGZvcihjIGluIHRoaXMuJGUpe2lmKHRoaXMuWmcpYnJlYWs7CmI9dGhpcy4kZVtjXTt0aGlzLnZmKGIpJiYodGhpcy5BZC5wdXNoKGIpLHRoaXMuQWgoYikpfX0sdmY6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEgaW5zdGFuY2VvZiBxPyEwOiExfSxvcTpmdW5jdGlvbihhKXt2YXIgYj1bXSxjO2lmKCFhfHwhYS5sZW5ndGgpcmV0dXJuIGI7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspYz1hW2VdLGM9dGhpcy4kZVtjXSx0aGlzLnZmKGMpJiZiLnB1c2goYyk7cmV0dXJuIGJ9LEFoOmZ1bmN0aW9uKGEpe3RoaXMudmYoYSkmJmEuZygpfSxhdTpmdW5jdGlvbihhKXtpZihhJiZhIGluc3RhbmNlb2YgdSYmIXRoaXMuJGcpZm9yKHRoaXMuWmc9ITAsYT0wO2E8dGhpcy5BZC5sZW5ndGg7YSsrKXRoaXMuQWRbYV0uSGImJndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5BZFthXS5IYil9fX0pKGMpO3ZhciBnYz1jLnRsfHxnYyxOPW5ldyBnYztOLmcoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CnRoaXMueHU9dGhpcy5hWzZdO3RoaXMuS2o9dGhpcy5hWzZdO3RoaXMuWm09dGhpcy5hWzFdO3RoaXMuR2k9dGhpcy5hWzEwXTt0aGlzLkd1PXRoaXMuYVsyXTt0aGlzLllyPXRoaXMuYVs1XTt0aGlzLlJxPXRoaXMuYVsxMF07dGhpcy5qPXRoaXMuYVsyXX1jLlp1PWI7Yi5wcm90b3R5cGU9e3d1OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMueHU6dGhpcy5KaihhKX0sSmo6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLktqOnRoaXMuWW0oYSl9LFltOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5abTp0aGlzLkZpKGEpfSxGaTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuR2k6dGhpcy5GdShhKX0sRnU6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLkd1OnRoaXMuWHIoYSl9LFhyOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuWXI6dGhpcy5RcShhKX0sUXE6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlJxOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMjwKYT90aGlzLmo6YX19fSkoYyk7dmFyIGhjPWMuWnV8fGhjLFFjPW5ldyBoYygxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPVFjLnd1KDQpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oYyl7aWYoYy5lcnJvciBpbnN0YW5jZW9mIFJlZmVyZW5jZUVycm9yKXt2YXIgYj1jLmZpbGVuYW1lP2MuZmlsZW5hbWU6IiI7aWYoLTEhPWIuaW5kZXhPZigiaG9tYWQiKXx8LTEhPWIuaW5kZXhPZigiaGQtbWFpbiIpKWI9Yy5tZXNzYWdlP2MubWVzc2FnZToiIixjPWMuZXJyb3Iuc3RhY2s/Yy5lcnJvci5zdGFjazoiIiwtMSE9Yi5pbmRleE9mKCJpcyBub3QgZGVmaW5lZCIpPyhjPWIuc3Vic3RyaW5nKGIuaW5kZXhPZigiOiIpKzEsYi5pbmRleE9mKCJpcyBub3QiKS0xKSxlLndjKGsuUnUpLGUudHJhY2soInN0YXRzX2hkX3ZhcmRlbGV0ZWQiLGMsCiEwKSk6LTEhPWMuaW5kZXhPZigic2V0QCIpJiYoZS53YyhrLmVzKSxlLnRyYWNrKCJzdGF0c19oZF92YXJub3RzZXQiLCIiLCEwKSl9fSk7dmFyIEU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7RS53aWR0aD0xO0UuaGVpZ2h0PTE7RS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJwbXRtdnMiKTtFLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoRSk7dmFyIFJjPUUuY29udGVudFdpbmRvdy5zZXRJbnRlcnZhbC5iaW5kKHdpbmRvdyksa2M9RS5jb250ZW50V2luZG93LnNldFRpbWVvdXQuYmluZCh3aW5kb3cpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoRSk7dmFyIEk9bmV3IEosbT0hMTtJLmlhKCk7SS5UZygpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKEkuaWEoKSxmdW5jdGlvbihjKXttfHwobT1jLmRldGFpbCl9LCExKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihJLlRnKCksZnVuY3Rpb24oYyl7bXx8KG09Yy5kZXRhaWwpfSwhMSk7CkkuaWEoKTt2YXIgU2M9UmMoZnVuY3Rpb24oKXtlLnZnKHdpbmRvdyxJLmZyKCkse2lkOlNjfSl9LDUwMCksamE9ZS5iYSgxMCk7ZmEoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy50aj10aGlzLmFbNF07dGhpcy56dj10aGlzLmFbMl07dGhpcy5waj10aGlzLmFbOF07dGhpcy5DcD10aGlzLmFbOF07dGhpcy5aaz10aGlzLmFbNl07dGhpcy5QbD10aGlzLmFbM107dGhpcy5Iaj10aGlzLmFbN107dGhpcy5saz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbM119Yy5ydj1iO2IucHJvdG90eXBlPXtzajpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMudGo6dGhpcy55dihhKX0seXY6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLnp2OnRoaXMub2ooYSl9LG9qOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5wajp0aGlzLkJwKGEpfSxCcDpmdW5jdGlvbihhKXtyZXR1cm4gMjwKYT90aGlzLkNwOnRoaXMuWWsoYSl9LFlrOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5aazp0aGlzLk9sKGEpfSxPbDpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuUGw6dGhpcy5HaihhKX0sR2o6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5Iajp0aGlzLmtrKGEpfSxrazpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMubGs6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBpYz1jLnJ2fHxpYyxUYz1uZXcgaWMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1UYy5zaig0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuc2g9dGhpcy5jb25mPXRoaXMuamI9dGhpcy5wbGF5ZXI9bnVsbDt0aGlzLndkPTA7dGhpcy5aYT0iIjt0aGlzLkJkPVtdO3RoaXMuQ2Q9MDt0aGlzLnVoPSExO3RoaXMuWGU9CltdO2UubGIoIm5ld0FkZGVsaXZlcnkiKX1jLm1pPWI7Yi5wcm90b3R5cGU9e0d0OmZ1bmN0aW9uKGEpe3RoaXMuc2g9YX0sZmY6ZnVuY3Rpb24oYSl7dGhpcy5wbGF5ZXI9YTt0aGlzLlphPXRoaXMucGxheWVyLk8oKX0sZ2V0UGxheWVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGxheWVyfSxCdDpmdW5jdGlvbihhKXt0aGlzLmpiPWF9LEF0OmZ1bmN0aW9uKGEpe3RoaXMuY29uZj1hfSxIYTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNvbmZbYV07dGhpcy5jb25mW3RoaXMuWmFdJiZ0aGlzLmNvbmZbdGhpcy5aYV1bYV0mJihiPXRoaXMuY29uZlt0aGlzLlphXVthXSk7cmV0dXJuIGJ9LEljOmZ1bmN0aW9uKGEsYil7ZS5CYSgid2VsdC5kZSIpJiZlLllhKCJodHRwczovL2Fzdi5udWdnYWQubmV0L2JrP251Z2duPTE1Njk5MDUxMDImbnVnZ3NpZD0xOTgyMjE3NTUwJm51Z2dyaWQ9IitlbmNvZGVVUklDb21wb25lbnQobG9jYXRpb24uaHJlZikrIiZudWdnbD1odHRwcyUzQSUyRiUyRnd3MjUxLnNtYXJ0YWRzZXJ2ZXIuY29tJTJGdHJhY2slMkZjb21wLmFzcCUzRmtleXdvcmQlM0ROVUdHVkFSUyUyNnNpdGUlM0Q4NTE0NSIsCiJuZXRudWdnYWRhc3YiLHt9LGZ1bmN0aW9uKCl7fSxmdW5jdGlvbigpe30sdGhpcy5qYik7dmFyIGM9ITEsZj0hMTtpZih0aGlzLmdyKCkpdGhpcy5qYi5sKHRoaXMuamIucmQsdGhpcy5qYi5GYSx0aGlzLmpiLlplLGZ1bmN0aW9uKCl7dGhpcy5JYyhhLGIpfS5iaW5kKHRoaXMpLHRoaXMuamIuc2MpO2Vsc2UgaWYodGhpcy5FcSgpKXRoaXMud3QoZnVuY3Rpb24oKXt0aGlzLkljKGEsYil9LmJpbmQodGhpcykpO2Vsc2V7dGhpcy5wbGF5ZXIucGF1c2UoKTtlLnYoay5mZCx0aGlzLnBsYXllci51KCkpO3ZhciBnPXRoaXMuY29uZixsPW5ldyBZYSh0aGlzLmdldFBsYXllcigpLGcpO2ImJmwuY3UoKTtsLmV4aXRGdWxsc2NyZWVuKCk7ZS5sYigibmV3SG9tYWREaXNwbGF5Iik7Uz1sPW5ldyBRYShsLHRoaXMuamIsZyk7bC56dCh0aGlzLmNvbmYpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYSl7dmFyIG09ITE7dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyJiYobT10aGlzLnBsYXllci5nZXRSYXdQbGF5ZXIoKSk7CmE9YShtKX0oYT10aGlzLlJyKGEpKXx8ZS50cmFjaygic3RhdHNfaGRfbm9BZFRhZyIsInNob3ciLCEwKTsiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5wbGF5ZXIuR2UmJihjPXRoaXMucGxheWVyLkdlKCkpO2cuYWRTdGFydFRpbWVvdXQmJihmPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7fSxnLmFkU3RhcnRUaW1lb3V0fHw1RTQpKTtsLkllKGEsYyxmKTt0aGlzLnBsYXllci5DaChsKX19LGdyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IERhdGUsYj0wO2lmKHRoaXMud2QpcmV0dXJuIGI9YS5nZXRUaW1lKCktdGhpcy53ZC5nZXRUaW1lKCksdGhpcy53ZD1hLDNFNTxiPyEwOiExO3RoaXMud2Q9YTtyZXR1cm4hMX0sVnQ6ZnVuY3Rpb24oKXtlLmxiKCJwcmVyb2xsIik7ZS5lZigicHJlcm9sbCIpO3ZhciBhPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgicHJlcm9sbEFkVGFnIikmJihhPXRoaXMuSGEoInByZXJvbGxBZFRhZyIpKTsoYT10aGlzLnJnKGEpKT90aGlzLkljKGEpOihlLnRyYWNrKCJzdGF0c19oZF9ub0FkVGFnIiwKInByZSIsITApLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXIucGxheSgpfS5iaW5kKHRoaXMpLDApLGUudihrLmdkLHRoaXMucGxheWVyLnUoKSkpfSxVdDpmdW5jdGlvbihhKXtpZighdGhpcy5zaCl7ZS5lZigicG9zdHJvbGwiKTtlLmxiKCJwb3N0cm9sbCIpO3RoaXMuR3QoITApO3ZhciBiPXRoaXMuY29uZixjPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgicG9zdHJvbGxBZFRhZyIpJiYoYz10aGlzLkhhKCJwb3N0cm9sbEFkVGFnIikpOyhjPXRoaXMucmcoYykpP3RoaXMuSWMoYyxiLnBvc3Ryb2xsVXNlQ29tcGxldGVFdmVudD8hMDphKTooZS50cmFjaygic3RhdHNfaGRfbm9BZFRhZyIsInBvc3QiLCEwKSx0aGlzLnBsYXllci5wbGF5KCksZS52KGsuZ2QsdGhpcy5wbGF5ZXIudSgpKSl9fSxyZzpmdW5jdGlvbihhKXtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGEpe3ZhciBiPSExO3RoaXMucGxheWVyLmdldFJhd1BsYXllciYmKGI9dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyKCkpOwphPWEoYil9cmV0dXJuIGF9LGx0OmZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXIuS3QodGhpcy5VdC5iaW5kKHRoaXMpKTt0aGlzLnBsYXllci5OYSgpfSxIZDpmdW5jdGlvbihhKXtlLmxiKCJtaWRyb2xsIik7ZS5lZigibWlkcm9sbCIpO2lmKCF0aGlzLmhoKXt0aGlzLmhoPSEwO3ZhciBiPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgibWlkcm9sbEFkVGFnIikmJihiPXRoaXMuSGEoIm1pZHJvbGxBZFRhZyIpKTtiPyh0aGlzLkljKGIsYSksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmhoPSExfS5iaW5kKHRoaXMpLDFFMykpOihlLnRyYWNrKCJzdGF0c19oZF9ub0FkVGFnIiwibWlkIiwhMCksdGhpcy5wbGF5ZXIucGxheSgpLGUudihrLmdkLHRoaXMucGxheWVyLnUoKSkpfX0sa3Q6ZnVuY3Rpb24oKXt0aGlzLnBsYXllci5GdCh0aGlzLkhkLmJpbmQodGhpcykpO3RoaXMucGxheWVyLkxlKCl9LGc6ZnVuY3Rpb24oKXt0aGlzLlZ0KCk7dGhpcy5wbGF5ZXIuTGUmJnRoaXMua3QoKTsKdGhpcy5sdCgpfSxtdDpmdW5jdGlvbigpe3ZhciBhPVtdO2lmKHRoaXMuY29uZi55aWVsZGxhYil7dGhpcy5jb25mLnlpZWxkbGFiWzBdP2E9dGhpcy5jb25mLnlpZWxkbGFiOmFbMF09dGhpcy5jb25mLnlpZWxkbGFiO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKShmdW5jdGlvbihhLGIsYyxnKXt0aGlzLkJkLnB1c2goeyJmdW5jdGlvbiI6ZnVuY3Rpb24oZSl7dGhpcy5FdihhLGIsYyxnLGUpfS5iaW5kKGUpfSl9KS5jYWxsKHRoaXMsYVtiXS51cmwsYVtiXS5wbGFjZWhvbGRlcixhW2JdLmFsaWFzLGFbYl0ubWFjcm8pfXRoaXMuQ2Q9dGhpcy5CZC5sZW5ndGh9LEVxOmZ1bmN0aW9uKCl7dmFyIGE9ITE7MDx0aGlzLkNkJiYoYT0hMCk7cmV0dXJuIGF9LHd0OmZ1bmN0aW9uKGEpe3RoaXMudWg9YTtmb3IoYT0wO2E8dGhpcy5CZC5sZW5ndGg7YSsrKXRoaXMuQmRbYV1bImZ1bmN0aW9uIl0odGhpcy5acy5iaW5kKHRoaXMpKX0sWnM6ZnVuY3Rpb24oYSl7dGhpcy5DZC0tO2EmJnRoaXMuWGUucHVzaChhKTsKMD49dGhpcy5DZCYmdGhpcy51aCgpfSxScjpmdW5jdGlvbihhKXtmb3IodmFyIGI9IiIsYz0wO2M8dGhpcy5YZS5sZW5ndGg7YysrKWI9dGhpcy5YZVtjXSxhPWEucmVwbGFjZShiLm1hY3JvLGIucGxhY2Vob2xkZXIpO3JldHVybiBhfX19KShjKTt2YXIgZ2E9Yy5taXx8Z2EsUz0hMSxuYT0hMTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy55az10aGlzLmFbN107dGhpcy5TbD10aGlzLmFbNF07dGhpcy5ncD10aGlzLmFbMTBdO3RoaXMuWm49dGhpcy5hWzNdO3RoaXMuTnQ9dGhpcy5hWzFdO3RoaXMuaj10aGlzLmFbN119Yy5OcD1iO2IucHJvdG90eXBlPXt4azpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLnlrOnRoaXMuUmwoYSl9LFJsOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5TbDp0aGlzLmZwKGEpfSxmcDpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuZ3A6CnRoaXMuWW4oYSl9LFluOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5abjp0aGlzLk10KGEpfSxNdDpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTnQ6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuajphfX19KShjKTt2YXIgamM9Yy5OcHx8amMsVWM9bmV3IGpjKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9VWMueGsoNCl9KS5jYWxsKE9oamF1ZGlwQWxpZWNhaUosT2hqYXVkaXBBbGllY2FpSik7Cg==
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
144.76.115.247 , Germany, ASN24940 (HETZNER-AS, DE),
Reverse DNS
static.247.115.76.144.clients.your-server.de
Software
openresty/1.15.8.1 /
Resource Hash
ae8f9dd465ab424d0dd4f81f7ba9ec5029f6736e090c3f33b5f0fa0c0ecc47dc

Request headers

Sec-Fetch-Mode
cors
Referer
https://videos.giga.de/embed/176875?autoplay=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:13 GMT
Last-Modified
Wed, 24 Jul 2019 10:17:21 GMT
Server
openresty/1.15.8.1
ETag
"5d383031-18"
Access-Control-Allow-Methods
GET
Content-Type
application/octet-stream
Access-Control-Allow-Origin
https://videos.giga.de
Access-Control-Allow-Credentials
true
Connection
keep-alive
Accept-Ranges
bytes
Content-Length
24
truncated
/ Frame 766C
241 B
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
70e9747bd88728b49476bcf8c6bcdb0fab921b6095d517b57c2130cab898e7a1

Request headers

User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Content-Type
text/javascript
extend
bis.cliipa.com/event/ Frame 9BA9
0
438 B
XHR
General
Full URL
https://bis.cliipa.com/event/extend
Requested by
Host: static.cliipa.com
URL: https://static.cliipa.com/basev/vpt.js?userId=551424a21b1b1f08006fb6f9&containerId=5c9117581325370004630210&format=3&host=cliipa.com&query[coppa]=false&query[param1]=adunit_/4444/giga.de_sd/software_artikel&macros[regs_gdpr]=1&macros[user_consent]=2
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
54.235.243.56 Ashburn, United States, ASN14618 (AMAZON-AES - Amazon.com, Inc., US),
Reverse DNS
ec2-54-235-243-56.compute-1.amazonaws.com
Software
Cowboy /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-type
application/json; charset=UTF-8

Response headers

Date
Fri, 13 Sep 2019 08:37:12 GMT
Via
1.1 vegur
Server
Cowboy
P3p
CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
Access-Control-Allow-Origin
*
Connection
keep-alive
Access-Control-Allow-Headers
Origin, DNT, X-Requested-With, Keep-Alive, Content-Type, Accept, Cache-Control, Pragma, Authorization, Content-Length, Accept-Encoding, Accept-Language
Content-Length
0
json
server.cliipa.com/campaigns/551424a21b1b1f08006fb6f9/5c9117581325370004630210/ Frame 9BA9
5 KB
4 KB
XHR
General
Full URL
https://server.cliipa.com/campaigns/551424a21b1b1f08006fb6f9/5c9117581325370004630210/json?url=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&ref=www.giga.de&st=true&cb=1568363832426
Requested by
Host: static.cliipa.com
URL: https://static.cliipa.com/basev/vpt.js?userId=551424a21b1b1f08006fb6f9&containerId=5c9117581325370004630210&format=3&host=cliipa.com&query[coppa]=false&query[param1]=adunit_/4444/giga.de_sd/software_artikel&macros[regs_gdpr]=1&macros[user_consent]=2
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
54.243.114.159 Ashburn, United States, ASN14618 (AMAZON-AES - Amazon.com, Inc., US),
Reverse DNS
ec2-54-243-114-159.compute-1.amazonaws.com
Software
Cowboy /
Resource Hash
253a57352ea737e9a370ba2e50c20f70d058a71f6f6d1d11edb6dd53b88bbf75

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-type
application/json; charset=UTF-8

Response headers

Date
Fri, 13 Sep 2019 08:37:13 GMT
Content-Encoding
gzip
Server
Cowboy
Content-Type
application/json; charset=utf-8
Access-Control-Allow-Origin
https://www.giga.de
Cache-Control
max-age=0, no-cache, must-revalidate, proxy-revalidate
Access-Control-Allow-Credentials
true
Connection
keep-alive
Access-Control-Allow-Headers
Origin, X-Requested-With, Content-Type, Accept, Authorization, Content-Range, Cache-Control
Content-Length
3946
Via
1.1 vegur
teads-format.min.js
a.teads.tv/media/format/v3/
712 KB
186 KB
Script
General
Full URL
https://a.teads.tv/media/format/v3/teads-format.min.js
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.232.7 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-232-7.deploy.static.akamaitechnologies.com
Software
/
Resource Hash
9577813fe87cfe961576762bfb2d22a20545fa7611d71e9788283bc6bc72f6b0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:12 GMT
content-encoding
gzip
last-modified
Tue, 10 Sep 2019 14:48:56 GMT
x-amz-request-id
D3457BD0C8F48F2F
etag
"63b4fd36abe19ce1dba43bee65254c55"
vary
Accept-Encoding
content-type
text/javascript;charset=utf-8
status
200
cache-control
private, must-revalidate, max-age=600
x-bucket
3
accept-ranges
bytes
content-length
189683
x-amz-id-2
TNhsiyCN0cb7SIQ0k5x3mJXTJfAKMmxKrHo6BTipVeoptixOltidq+IGcZsDh9jACiK1wEyOCCI=
expires
Fri, 13 Sep 2019 08:47:12 GMT
truncated
/ Frame 9BA9
211 B
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
727e7bf3927ec8720c5e1a40d85f7dc3c0c8b769cdfd6285b80fac63b7a659d1

Request headers

User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Content-Type
image/png
data
lb59.s400.meetrics.net/
43 B
308 B
Image
General
Full URL
https://lb59.s400.meetrics.net/data?/J1/wI0VAAUkzFBDPBAANUASCABBQCAZAAAOA55A55A85B55A58E55A55AGAx2A21A0wArBQCAPAAAIhBAAAjapFAPAAAAAAAAATapFAPAAAIhBAAAjBQCAPAAAAAAAAATBQCAPAAA1IASCABIhBAPAAAFAAMqoTIhBAPYDANUASCAHBQCAPBAA1IASCAHapFAPAAAAAAAAAIZyOASksFjMdNUASCAgCAYJAFAAABQCAAA+Go0F0wFz6BvvA0yFhjFruBhkFmvFytFuuEl0FvhEkmFzjFypFw0Fv/AiuF9zAx5A15Ax2A47AjsFpjFr9Bo0F0wFz6BvvAhkFjsFpjFruBnuBkvF1iFslFjsFpjFruBulF0vBwjFzvBjsFpjFr/B4hFp9BBLFBPFqzFz4F4kFwlE45BWVFyuEapFYWFFDF3xB0DFhJFq2FwzFJvFvVF45EF6FDnF0PEz5E3NFJFFWqF5zAW5Bv3FtWF2lF3SFwFFsqFIiF2UF6lFjiFE4B5mEatF2wApIFwwEaIF64Bk3B5tBzaFRjFh6FTSFmiF32AErFV4BHLFSLFjfFZmFBSFVyFfVFkwF31EHpFhVFxEEElF1NFZ3FukF0DFxPEU2Bn4FtsFNGFr4BfIFVzFKHFtIEC5BrsFwDEZfF2MFrIF3rFQXF1qFUBFqhFGsFi1BCQFNwF1iEyEFZoF5oEoEFsTFhZFXEF6wB0ZEs4B5VFI3FJRFtnEDsFvTFEPFitFDzFVWFy0AypE43FN0Bz2AFQF0BEXwFywF3jFVyB34ANQF6lFN1Fn2BpNF3wBsRFmzEpnF9DEnwBByFLKFT6FNOFyZFzuE20FMrFJFFBFFm1EysFmpF49BxmAhkF1yFs9B7jEwqFz9By7AvyFk9ByxAwwA1wAwxA5yAJAXhFssFwhFwlFyBFAAAAAAAAAAAAAAAAd1IASCA4NAYJAFAAAIhBALAyzAxzAwfE5yAx3AfBFAAJAXhFssFwhFwlFyBFAAAAAAAAAAAAAAAAQtjFJwetUA
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
136.243.5.11 , Germany, ASN24940 (HETZNER-AS, DE),
Reverse DNS
h232.meetrics.de
Software
nginx /
Resource Hash
548f2d6f4d0d820c6c5ffbeffcbd7f0e73193e2932eefe542accc84762deec87

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:12 GMT
Server
nginx
Transfer-Encoding
chunked
Content-Type
image/gif
Cache-control
no-cache,no-store,must-revalidate
Connection
keep-alive
Expires
Fri, 13-Sep-19 08:37:11 GMT
data
lb59.s400.meetrics.net/
43 B
308 B
Image
General
Full URL
https://lb59.s400.meetrics.net/data?/J1/wJ0VAA/k0FWUmvFytFh0FjvFklF9iEsvFjrFlyFmhEk2F9yA42A35A13A1mAjwFpkF9kElzFr0FvwFmhEwhF90A04AyzA44Ay5AymAjpFk9BxzA4yAx2Ay0A1zA3yAmzEp6Fl9Bx4ExmAzpF0lF9nEpnFhuBklFfzFkmBwsFhjFl9BzvFm0F3hFylFmhEwiF9vE10FtvEmtBwhFnlFmhEwjF90A04AyzA44Ay5AymAhwFk9B00A4yAz4A4yA5yAmhEwlF9lAyGE00A00AlyAGnFpnFhuBklFfzFklByGEzvFm0F3hFylFfhFy0FprFlsFlyAGvF10FtvEmtBwhFnlFmhEkjF9kEpyFljF0mBttFvkFl9BklFmhF1sF0mBjiF9xA12A4zA2zA4zAx4AyyAmvFytFh0FjvFklF9iEsvFjrFlyFmhEk2F9xAw1A00A5xA21A1mAjwFpkF9kElzFr0FvwFmhEwhF91AwwAyxAwwA2xA5mAjpFk9BxzA4yA21Aw1A32Ay0AmzEp6Fl9B4wAw4E01AwmAzpF0lF9nEpnFhuBklFfzFkmBwsFhjFl9BzvFm0F3hFylFmhEwiF9wEvzF0lFyhFkmBhwFj9B1wAwyAxwAw2Ax5AmhEwkF91AwwAyxAwwA2xA5mAhwFl9BlyAG0B00A0lAyGEnpFnhFukElfFzkFlyAGzFvmF03FhyFlfFhyF0pFrlFslByGEwvFz0FlyFhkFmhEkjF9kEpyFljF0mBttFvkFl9BklFmhF1sF0mBjiF9xA12A4zA2zA4zAx5Ay1AmvFytFh0FjvFklF9iEsvFjrFlyFmhEk2F90Az2Ay5Ax3A1mAjwFpkF9kElzFr0FvwFmhEwhF91AxzA21A30A34AzmAjpFk9BxzA4yA41Ax0AxwA3zAmzEp6Fl9BxyAw4E2wAwmAzpF0lF9nEpnFhuBklFfzFkmBwsFhjFl9BzvFm0F3hFylFmhEwiF9zEr5FmhEwjF91AxzA21A30A34AzmAhwFk9B1xAz2A13A03A4zAmhEwlF9lAyGE00A00AlyAGnFpnFhuBklFfzFklByGEzvFm0F3hFylFfhFy0FprFlsFlyAGzFr5FmhEkjF9kEpyFljF0mBttFvkFl9BklFmhF1sF0mBjiF9xA12A4zA2zA4zAyxA25AmvFytFh0FjvFklF9XEhsFswFhwFlyFmhEk2F90Az2Ay5Ax3A1mAjwFpkF9kElzFr0FvwFmhEwhF91AxzA21A30A34AzmAjpFk9BxzA4yA40A4xAx2A42AmzEp6Fl9B3yA44E5wAmzEp0Fl9BnpFnhFukElfFzkFmwEshFjlF9zEvmF03FhyFlmBhwFi9BihFuuFlyFmhEwjF91AxzA21A30A34AzmAhwFk9B1xAz2A13A03A4zAmhEwlF9lAyGE00A00AlyAGnFpnFhuBklFfzFklByGEzvFm0F3hFylFfhFy0FprFlsFlyAGiFhuFulFymBhkFj9BkpFylFj0FmtEtvFklF9kElmFh1Fs0FmjEi9Bx1A24Az2Az4AzyAx5A3mEvyFthF0jFvkFl9BNlFkpF1tFSlFj0FhuFnsFlmBhkF29BxzAxxA12A4xA1mAjwFpkF9kElzFr0FvwFmhEwhF91AwwA14A34A0xA4mAjpFk9BxzA4yA21AwwAz2AyzAmzEp6Fl9BzwAw4Ey1AwmAzpF0lF9nEpnFhuBklFfzFkmBwsFhjFl9BzvFm0F3hFylFmhEwiF9yEljF0hFunFslFmhEwjF91AwwA14A34A0xA4mAhwFk9B1wAw1A43A40Ax4AmhEwlF9lAyGE00A00AlyAGnFpnFhuBklFfzFklByGEzvFm0F3hFylFfhFy0FprFlsFlyAGyFljF0hFunFslFmhEkjF9kEpyFljF0mBttFvkFl9BklFmhF1sF0mBjiF9xA12A4zA2zA4zAy0A1zATkzFARksFAQtjFOQnNcA
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
136.243.5.11 , Germany, ASN24940 (HETZNER-AS, DE),
Reverse DNS
h232.meetrics.de
Software
nginx /
Resource Hash
548f2d6f4d0d820c6c5ffbeffcbd7f0e73193e2932eefe542accc84762deec87

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:12 GMT
Server
nginx
Transfer-Encoding
chunked
Content-Type
image/gif
Cache-control
no-cache,no-store,must-revalidate
Connection
keep-alive
Expires
Fri, 13-Sep-19 08:37:11 GMT
v2
de.tynt.com/deb/
4 B
200 B
Script
General
Full URL
https://de.tynt.com/deb/v2?id=s!sovrn&dn=IDS&cc=1&r=
Requested by
Host: cdn.tynt.com
URL: https://cdn.tynt.com/ids.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
208.100.17.184 Chicago, United States, ASN32748 (STEADFAST - Steadfast, US),
Reverse DNS
ip184.208-100-17.static.steadfastdns.net
Software
/
Resource Hash
d21021784cda31eeae5c8295e047a14bda6ed5a9b5963fca9e7ceb398a9c9179

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

status
200
date
Fri, 13 Sep 2019 08:37:12 GMT
cache-control
max-age=86400
content-type
application/javascript
p3p
CP=NOI DSP COR NID PSA PSD OUR IND UNI COM NAV INT DEM STA
content-length
4
expires
Sat, 14 Sep 2019 08:37:12 GMT
5005878418
dfp-gateway.s-onetag.com/1/4444/
113 B
579 B
XHR
General
Full URL
https://dfp-gateway.s-onetag.com/1/4444/5005878418
Requested by
Host: get.s-onetag.com
URL: https://get.s-onetag.com/1400a607-dbd1-49d7-9171-69ce05c71f5e/tag.min.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
2600:9000:2057:1a00:a:52eb:a100:93a1 , United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
Software
/
Resource Hash
f2f6180a65038b9ef6eb958ba11c1d049f52081b6550dc396c4f0a887f31a61f

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:30:43 GMT
via
1.1 27f665df26bde4a7226480b4a2890ff9.cloudfront.net (CloudFront), 1.1 87b272b7d9b97f38da15c91c833c3292.cloudfront.net (CloudFront)
age
389
x-amzn-requestid
ce6d609e-5489-4964-b1a7-9e71135dad1c
status
200
x-cache
Hit from cloudfront
content-type
application/json
access-control-allow-origin
*
cache-control
max-age=3600, public
x-amzn-trace-id
Root=1-5d7b53b3-2bb66e902443109071d35e8c;Sampled=0
x-amz-cf-pop
FRA2-C2, FRA6-C1
x-amz-apigw-id
f8oECFkRyK4Fgdg=
content-length
113
x-amz-cf-id
AkdXJ-KQ7c_X_naGhV4ljUT2DuEfSfvzsYWAdrbCzp7UR1Z40fvU4w==
index.html
cmp.teads.mgr.consensu.org/ Frame 528E
0
0
Document
General
Full URL
https://cmp.teads.mgr.consensu.org/index.html
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2a02:26f0:6c00:292::2c92 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
AmazonS3 /
Resource Hash

Request headers

Host
cmp.teads.mgr.consensu.org
Connection
keep-alive
Pragma
no-cache
Cache-Control
no-cache
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site
cross-site
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Accept-Encoding
gzip, deflate, br
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

x-amz-id-2
kGI/LkmsIcd2daPyZ44T91Tgh3nqFBaPCP2I5Rt/ZLlg5M5DrVepYy/Ac/ZfkFjnOAPn7svobKA=
x-amz-request-id
B87A212102411FA1
Last-Modified
Fri, 14 Sep 2018 07:42:32 GMT
ETag
"e7d6c2974a38b7ff77a560e83789f66a"
Accept-Ranges
bytes
Content-Type
text/html
Content-Length
583
Server
AmazonS3
Cache-Control
max-age=300
Expires
Fri, 13 Sep 2019 08:42:12 GMT
Date
Fri, 13 Sep 2019 08:37:12 GMT
Connection
keep-alive
index.html
cmp.teads.mgr.consensu.org/ Frame 4722
0
0
Document
General
Full URL
https://cmp.teads.mgr.consensu.org/index.html
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2a02:26f0:6c00:292::2c92 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
AmazonS3 /
Resource Hash

Request headers

Host
cmp.teads.mgr.consensu.org
Connection
keep-alive
Pragma
no-cache
Cache-Control
no-cache
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site
cross-site
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Accept-Encoding
gzip, deflate, br
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

x-amz-id-2
kGI/LkmsIcd2daPyZ44T91Tgh3nqFBaPCP2I5Rt/ZLlg5M5DrVepYy/Ac/ZfkFjnOAPn7svobKA=
x-amz-request-id
B87A212102411FA1
Last-Modified
Fri, 14 Sep 2018 07:42:32 GMT
ETag
"e7d6c2974a38b7ff77a560e83789f66a"
Accept-Ranges
bytes
Content-Type
text/html
Content-Length
583
Server
AmazonS3
Cache-Control
max-age=300
Expires
Fri, 13 Sep 2019 08:42:12 GMT
Date
Fri, 13 Sep 2019 08:37:12 GMT
Connection
keep-alive
p2
sb.scorecardresearch.com/
Redirect Chain
  • https://sb.scorecardresearch.com/p?c1=2&c2=17198971&ns_ap_sv=2.1511.10&ns_type=hidden&ns_st_it=a&ns_st_sv=4.0.0&ns_st_ad=1&ns_st_sq=1&ns_st_id=1568363832519&ns_st_ec=1&ns_st_cn=1&ns_st_ev=play&ns_s...
  • https://sb.scorecardresearch.com/p2?c1=2&c2=17198971&ns_ap_sv=2.1511.10&ns_type=hidden&ns_st_it=a&ns_st_sv=4.0.0&ns_st_ad=1&ns_st_sq=1&ns_st_id=1568363832519&ns_st_ec=1&ns_st_cn=1&ns_st_ev=play&ns_...
43 B
309 B
Image
General
Full URL
https://sb.scorecardresearch.com/p2?c1=2&c2=17198971&ns_ap_sv=2.1511.10&ns_type=hidden&ns_st_it=a&ns_st_sv=4.0.0&ns_st_ad=1&ns_st_sq=1&ns_st_id=1568363832519&ns_st_ec=1&ns_st_cn=1&ns_st_ev=play&ns_st_ct=va00&ns_st_cl=0&ns_st_pt=0&c3=*null&c4=*null&c6=*null&ns_ts=15891680&cs_ucfr=1
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
23.43.115.95 , Netherlands, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
a23-43-115-95.deploy.static.akamaitechnologies.com
Software
/
Resource Hash
24e480e4659fbae818853a38f8a3036f529f539024dc3e772c0b594ce02ea9db

Request headers

Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:12 GMT
Cache-Control
private, no-cache, no-cache=Set-Cookie, no-store, proxy-revalidate
Connection
keep-alive
Content-Type
image/gif
Content-Length
43
Expires
Mon, 01 Jan 1990 00:00:00 GMT

Redirect headers

Location
https://sb.scorecardresearch.com/p2?c1=2&c2=17198971&ns_ap_sv=2.1511.10&ns_type=hidden&ns_st_it=a&ns_st_sv=4.0.0&ns_st_ad=1&ns_st_sq=1&ns_st_id=1568363832519&ns_st_ec=1&ns_st_cn=1&ns_st_ev=play&ns_st_ct=va00&ns_st_cl=0&ns_st_pt=0&c3=*null&c4=*null&c6=*null&ns_ts=15891680&cs_ucfr=1
Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:12 GMT
Cache-Control
private, no-cache, no-cache=Set-Cookie, no-store, proxy-revalidate
Connection
keep-alive
Content-Length
0
Expires
Mon, 01 Jan 1990 00:00:00 GMT
track
t.teads.tv/
23 B
157 B
Image
General
Full URL
https://t.teads.tv/track?action=placementCall&ts=1568363832516&pageId=68592&pid=73584&env=js-web&pfid=[pfid]&f=1&fv=91
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.232.7 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-232-7.deploy.static.akamaitechnologies.com
Software
/
Resource Hash
328e90a318268aea96180cc31666ae6d6f79d90d078c123bc3d98ee08a192fb7

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

status
200
pragma
no-cache
date
Fri, 13 Sep 2019 08:37:12 GMT
cache-control
max-age=0, no-cache, no-store
expires
Fri, 13 Sep 2019 08:37:12 GMT
content-length
23
content-type
image/gif
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D73584%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20f11
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D73584%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20tagtype%203
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
track
t.teads.tv/
23 B
157 B
Image
General
Full URL
https://t.teads.tv/track?action=slotAvailable&ts=1568363832517&pageId=68592&pid=73584&env=js-web&pfid=[pfid]&f=1&slot=native&fv=91
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.232.7 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-232-7.deploy.static.akamaitechnologies.com
Software
/
Resource Hash
328e90a318268aea96180cc31666ae6d6f79d90d078c123bc3d98ee08a192fb7

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

status
200
pragma
no-cache
date
Fri, 13 Sep 2019 08:37:12 GMT
cache-control
max-age=0, no-cache, no-store
expires
Fri, 13 Sep 2019 08:37:12 GMT
content-length
23
content-type
image/gif
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D73584%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20f24
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D73584%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20gdpr-cmp-response%200.06
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
p2
sb.scorecardresearch.com/
Redirect Chain
  • https://sb.scorecardresearch.com/p?c1=2&c2=17198971&ns_ap_sv=2.1511.10&ns_type=hidden&ns_st_it=a&ns_st_sv=4.0.0&ns_st_ad=1&ns_st_sq=1&ns_st_id=1568363832536&ns_st_ec=1&ns_st_cn=1&ns_st_ev=play&ns_s...
  • https://sb.scorecardresearch.com/p2?c1=2&c2=17198971&ns_ap_sv=2.1511.10&ns_type=hidden&ns_st_it=a&ns_st_sv=4.0.0&ns_st_ad=1&ns_st_sq=1&ns_st_id=1568363832536&ns_st_ec=1&ns_st_cn=1&ns_st_ev=play&ns_...
43 B
309 B
Image
General
Full URL
https://sb.scorecardresearch.com/p2?c1=2&c2=17198971&ns_ap_sv=2.1511.10&ns_type=hidden&ns_st_it=a&ns_st_sv=4.0.0&ns_st_ad=1&ns_st_sq=1&ns_st_id=1568363832536&ns_st_ec=1&ns_st_cn=1&ns_st_ev=play&ns_st_ct=va00&ns_st_cl=0&ns_st_pt=0&c3=*null&c4=*null&c6=*null&ns_ts=04536766&cs_ucfr=1
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
104.108.39.228 , Netherlands, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a104-108-39-228.deploy.static.akamaitechnologies.com
Software
/
Resource Hash
24e480e4659fbae818853a38f8a3036f529f539024dc3e772c0b594ce02ea9db

Request headers

Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:12 GMT
Cache-Control
private, no-cache, no-cache=Set-Cookie, no-store, proxy-revalidate
Connection
keep-alive
Content-Type
image/gif
Content-Length
43
Expires
Mon, 01 Jan 1990 00:00:00 GMT

Redirect headers

Location
https://sb.scorecardresearch.com/p2?c1=2&c2=17198971&ns_ap_sv=2.1511.10&ns_type=hidden&ns_st_it=a&ns_st_sv=4.0.0&ns_st_ad=1&ns_st_sq=1&ns_st_id=1568363832536&ns_st_ec=1&ns_st_cn=1&ns_st_ev=play&ns_st_ct=va00&ns_st_cl=0&ns_st_pt=0&c3=*null&c4=*null&c6=*null&ns_ts=04536766&cs_ucfr=1
Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:12 GMT
Cache-Control
private, no-cache, no-cache=Set-Cookie, no-store, proxy-revalidate
Connection
keep-alive
Content-Length
0
Expires
Mon, 01 Jan 1990 00:00:00 GMT
track
t.teads.tv/
23 B
157 B
Image
General
Full URL
https://t.teads.tv/track?action=placementCall&ts=1568363832535&pageId=68592&pid=76332&env=js-web&pfid=[pfid]&f=1&fv=91
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.232.7 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-232-7.deploy.static.akamaitechnologies.com
Software
/
Resource Hash
328e90a318268aea96180cc31666ae6d6f79d90d078c123bc3d98ee08a192fb7

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

status
200
pragma
no-cache
date
Fri, 13 Sep 2019 08:37:12 GMT
cache-control
max-age=0, no-cache, no-store
expires
Fri, 13 Sep 2019 08:37:12 GMT
content-length
23
content-type
image/gif
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D76332%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20f11
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D76332%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20tagtype%203
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
track
t.teads.tv/
23 B
157 B
Image
General
Full URL
https://t.teads.tv/track?action=slotAvailable&ts=1568363832535&pageId=68592&pid=76332&env=js-web&pfid=[pfid]&f=1&slot=multislot&fv=91
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.232.7 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-232-7.deploy.static.akamaitechnologies.com
Software
/
Resource Hash
328e90a318268aea96180cc31666ae6d6f79d90d078c123bc3d98ee08a192fb7

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

status
200
pragma
no-cache
date
Fri, 13 Sep 2019 08:37:12 GMT
cache-control
max-age=0, no-cache, no-store
expires
Fri, 13 Sep 2019 08:37:12 GMT
content-length
23
content-type
image/gif
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D76332%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20f24
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D76332%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20gdpr-cmp-response%200.01
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
ad
a.teads.tv/page/68592/
118 B
332 B
XHR
General
Full URL
https://a.teads.tv/page/68592/ad?windowWidth=1600&windowHeight=1200&windowDepth=1&windowReferrerUrl=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&page=%7B%22id%22%3A68592%2C%22placements%22%3A%5B%7B%22id%22%3A73584%2C%22validity%22%3A%7B%22status%22%3Atrue%2C%22reasons%22%3A%5B%5D%7D%2C%22player%22%3A%7B%22width%22%3A625%2C%22height%22%3A352%7D%2C%22slotType%22%3A%22native%22%7D%5D%2C%22gdpr_iab%22%3A%7B%22status%22%3A21%2C%22consent%22%3A%22%22%2C%22reason%22%3A210%7D%7D&userId=704d2c23-de86-47b8-b354-e7e1f3d0f420&formatVersion=2.22.61&env=js-web&netBw=10&ttfb=103
Requested by
Host: a.teads.tv
URL: https://a.teads.tv/media/format/v3/teads-format.min.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.232.7 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-232-7.deploy.static.akamaitechnologies.com
Software
/
Resource Hash
f50167bee40cd7fdd6c623efb794e0edddec7de87ef71f48c8b1b1413e1dfc4a

Request headers

Accept
application/json; charset=UTF-8
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
cors

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:12 GMT
content-encoding
gzip
status
200
vary
Accept-Encoding
content-type
application/json
access-control-allow-origin
https://www.giga.de
cache-control
max-age=0, no-cache, no-store
access-control-allow-credentials
true
content-length
129
expires
Fri, 13 Sep 2019 08:37:12 GMT
ad
a.teads.tv/page/68592/
118 B
332 B
XHR
General
Full URL
https://a.teads.tv/page/68592/ad?windowWidth=1600&windowHeight=1200&windowDepth=1&windowReferrerUrl=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&page=%7B%22id%22%3A68592%2C%22placements%22%3A%5B%7B%22id%22%3A76332%2C%22validity%22%3A%7B%22status%22%3Atrue%2C%22reasons%22%3A%5B%5D%7D%2C%22player%22%3A%7B%22width%22%3A625%2C%22height%22%3A352%7D%2C%22slotType%22%3A%22multislot%22%7D%5D%2C%22gdpr_iab%22%3A%7B%22status%22%3A21%2C%22consent%22%3A%22%22%2C%22reason%22%3A210%7D%7D&userId=704d2c23-de86-47b8-b354-e7e1f3d0f420&formatVersion=2.22.61&env=js-web&netBw=10&ttfb=103
Requested by
Host: a.teads.tv
URL: https://a.teads.tv/media/format/v3/teads-format.min.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.232.7 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-232-7.deploy.static.akamaitechnologies.com
Software
/
Resource Hash
f50167bee40cd7fdd6c623efb794e0edddec7de87ef71f48c8b1b1413e1dfc4a

Request headers

Accept
application/json; charset=UTF-8
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
cors

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:12 GMT
content-encoding
gzip
status
200
vary
Accept-Encoding
content-type
application/json
access-control-allow-origin
https://www.giga.de
cache-control
max-age=0, no-cache, no-store
access-control-allow-credentials
true
content-length
129
expires
Fri, 13 Sep 2019 08:37:12 GMT
iframe
sync.teads.tv/ Frame D12B
0
0
Document
General
Full URL
https://sync.teads.tv/iframe?pid=76332&userId=704d2c23-de86-47b8-b354-e7e1f3d0f420&gdprIab={%22status%22:21,%22consent%22:%22%22,%22reason%22:210}&env=js-web&1568363832590
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.232.7 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-232-7.deploy.static.akamaitechnologies.com
Software
akka-http/10.1.5 /
Resource Hash

Request headers

:method
GET
:authority
sync.teads.tv
:scheme
https
:path
/iframe?pid=76332&userId=704d2c23-de86-47b8-b354-e7e1f3d0f420&gdprIab={%22status%22:21,%22consent%22:%22%22,%22reason%22:210}&env=js-web&1568363832590
pragma
no-cache
cache-control
no-cache
upgrade-insecure-requests
1
user-agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
sec-fetch-mode
nested-navigate
accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
sec-fetch-site
cross-site
referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
accept-encoding
gzip, deflate, br
cookie
tt_viewer=3b59a460-ef62-4d43-955f-109e0c23fbf5
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

status
200
content-type
text/html; charset=UTF-8
server
akka-http/10.1.5
content-length
1844
expires
Fri, 13 Sep 2019 08:37:12 GMT
cache-control
max-age=0, no-cache, no-store
pragma
no-cache
date
Fri, 13 Sep 2019 08:37:12 GMT
set-cookie
tt_exelate=; Expires=Sat, 14 Sep 2019 08:37:12 GMT; Domain=.teads.tv; SameSite=None tt_bluekai=; Expires=Sat, 14 Sep 2019 08:37:12 GMT; Domain=.teads.tv; SameSite=None tt_emetriq=; Expires=Sat, 14 Sep 2019 08:37:12 GMT; Domain=.teads.tv; SameSite=None tt_liveramp=; Expires=Sat, 14 Sep 2019 08:37:12 GMT; Domain=.teads.tv; SameSite=None tt_neustar=; Expires=Sat, 14 Sep 2019 08:37:12 GMT; Domain=.teads.tv; SameSite=None tt_salesforce=; Expires=Sat, 14 Sep 2019 08:37:12 GMT; Domain=.teads.tv; SameSite=None tt_dar=; Expires=Sat, 14 Sep 2019 08:37:12 GMT; Domain=.teads.tv; SameSite=None
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D76332%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20fu%3Dtm%20trl%3D22%20tre%3D25%20frl%3D32%20fre%3D50%20a%3D23%20b%3D2%20d%3D0%20c%3D3%20e%3D4%20f%3D3%20g%3D0%20h%3D44%20i%3D0%20
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D76332%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20fu%3Dtpb%20q%3D59%20
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
p
ic.tynt.com/b/
0
119 B
Image
General
Full URL
https://ic.tynt.com/b/p?id=s!sovrn&lm=0&ts=1568363832155&dn=IDS&iso=0&img=https%3A%2F%2Fstatic.giga.de%2Fwp-content%2Fuploads%2F2015%2F07%2Fpaypal-login-rcm1200x627u.jpg&t=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&cu=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
208.100.17.186 Chicago, United States, ASN32748 (STEADFAST - Steadfast, US),
Reverse DNS
ip186.208-100-17.static.steadfastdns.net
Software
nginx/1.14.0 /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

status
204
date
Fri, 13 Sep 2019 08:37:12 GMT
server
nginx/1.14.0
p3p
CP=NOI DSP COR NID PSA PSD OUR IND UNI COM NAV INT DEM STA
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D73584%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20fu%3Dtm%20trl%3D22%20tre%3D25%20frl%3D32%20fre%3D50%20a%3D4%20b%3D2%20d%3D0%20c%3D9%20e%3D5%20f%3D16%20g%3D0%20h%3D55%20i%3D0%20
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D73584%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20fu%3Dtpb%20q%3D88%20
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
track
t.teads.tv/
23 B
157 B
Image
General
Full URL
https://t.teads.tv/track?action=adCall&ts=1568363832518&pageId=68592&pid=73584&env=js-web&pfid=[pfid]&f=1&slot=native&gdpr_status=21&gdpr_consent=[gdpr_consent]&gdpr_reason=210&fv=91
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.232.7 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-232-7.deploy.static.akamaitechnologies.com
Software
/
Resource Hash
328e90a318268aea96180cc31666ae6d6f79d90d078c123bc3d98ee08a192fb7

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

status
200
pragma
no-cache
date
Fri, 13 Sep 2019 08:37:12 GMT
cache-control
max-age=0, no-cache, no-store
expires
Fri, 13 Sep 2019 08:37:12 GMT
content-length
23
content-type
image/gif
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D73584%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20f41
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D73584%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20fu%3Dac%20l%3D91%20
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
track
t.teads.tv/
23 B
157 B
Image
General
Full URL
https://t.teads.tv/track?action=noAd-ivt-doubleVerify&ts=1568363832518&pageId=68592&pid=73584&env=js-web&pfid=[pfid]&f=1&slot=native&fv=91
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.232.7 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-232-7.deploy.static.akamaitechnologies.com
Software
/
Resource Hash
328e90a318268aea96180cc31666ae6d6f79d90d078c123bc3d98ee08a192fb7

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

status
200
pragma
no-cache
date
Fri, 13 Sep 2019 08:37:12 GMT
cache-control
max-age=0, no-cache, no-store
expires
Fri, 13 Sep 2019 08:37:12 GMT
content-length
23
content-type
image/gif
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D73584%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20f51
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D73584%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20gdpr-cmp-teads-response%20106.41
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D76332%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20gdpr-cmp-teads-response%2095.01
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D73584%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20gdpr-cmp-teads-response%20108.23
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==
s8t.teads.tv/sumo/receiver/v1/http/
0
0
Image
General
Full URL
https://s8t.teads.tv/sumo/receiver/v1/http/ZaVnC4dhaV3tMuL-jxvu514sKTR1JLPJH0zZLzvxn3qMwWPdO_mBRbSGTyZgi2P4CqAJ4tfCX6IriPgecDkMFRxDm1GAGUben7xo9S92iY-h9z-o4eCwqg==?%5B91%7Cdesktop%7CMac%20OS%7C10.14.5%7CChrome%7C74%7Cweb%7C%5D%5Bp%3D76332%3Bs%3D%3Bg%3D%5D%5Binfo%5D%20gdpr-cmp-teads-response%2096.61
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_ECDSA, AES_256_GCM
Server
2a02:26f0:6c00:295::36f1 , Ascension Island, ASN20940 (AKAMAI-ASN1, US),
Reverse DNS
Software
/
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

access-control-allow-origin
*
access-control-allow-credentials
false
access-control-allow-headers
*
access-control-max-age
86400
access-control-allow-methods
GET,POST
Cookie set beacon
ap.lijit.com/ Frame CF43
0
0
Document
General
Full URL
https://ap.lijit.com/beacon?informer=13413818&gdpr_consent=
Requested by
Host: ap.lijit.com
URL: https://ap.lijit.com/www/sovrn_beacon_standalone/sovrn_standalone_beacon.js?iid=13413818
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
72.251.249.9 Amsterdam, Netherlands, ASN29791 (VOXEL-DOT-NET - Internap Corporation, US),
Reverse DNS
Software
nginx / raptor
Resource Hash

Request headers

Host
ap.lijit.com
Connection
keep-alive
Pragma
no-cache
Cache-Control
no-cache
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site
cross-site
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Accept-Encoding
gzip, deflate, br
Cookie
ctag=211:1568450231|423:1568450231|234:1568450231|203:1568450231|205:1568450231; ljt_reader=e3f8950ceaf08e44bb016892; tpro=eJxNUMtuhDAM%2FBefI%2BTw2i2%2F0b1VVRQFA5FCggJUqlb8e52wi3qb8UzGnjwhbBNF6J7gNjsTdChgDr0yYffbya75D8XVBg8dlAXCISDSQDFaP36SjmZ6UJxX6L6%2BBSwxDNZRyrXehDkjiagWt7MFi%2FImoELV4pu0qFjP7C4AVZWxvPMaE5yjMUdcEItawBh1r1YzZWcjwAd%2FSg2%2FGsn3Z7OBZu2ywJ4Lpvu1OVP1btKMF7%2B%2BAwuUAvQQlZ4zY0mvVvtMOGay65Jxmw6crOsj%2BZTlQ05n%2Fy%2FlpnXJDn2eL%2B%2BqqtOw4vZKlu80yeSWW%2FC8UfXHy9P8%2B7DmOI4%2FvRJ50A%3D%3D; ljtrtb_refresh=false; ljtrtbexp=eJxdkEEOwCAIBP%2FiuQdQQOjXmv7dpD0xxzHurOszdNzqUb6XLb3G7BjReXXcSLsITlSQgFBRWFWJGw6GIdGQMKZhITbM35fmMj%2FemIw%2Bg9%2Fgs8KfIO%2FcJ%2F1F7wGnaE9Q
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

Server
nginx
Date
Fri, 13 Sep 2019 08:37:12 GMT
Content-Type
text/html;charset=utf-8
Transfer-Encoding
chunked
Vary
Accept-Encoding
X-Application-Context
application:prod:9080
Set-Cookie
tpro=eJxNUMtuhDAM%2FBefI%2BTw2i2%2F0b1VVRQFA5FCggJUqlb8e52wi3qb8UzGnjwhbBNF6J7gNjsTdChgDr0yYffbya75D8XVBg8dlAXCISDSQDFaP36SjmZ6UJxX6L6%2BBSwxDNZRyrXehDkjiagWt7MFi%2FImoELV4pu0qFjP7C4AVZWxvPMaE5yjMUdcEItawBh1r1YzZWcjwAd%2FSg2%2FGsn3Z7OBZu2ywJ4Lpvu1OVP1btKMF7%2B%2BAwuUAvQQlZ4zY0mvVvtMOGay65Jxmw6crOsj%2BZTlQ05n%2Fy%2FlpnXJDn2eL%2B%2BqqtOw4vZKlu80yeSWW%2FC8UfXHy9P8%2B7DmOI4%2FvRJ50A%3D%3D;Path=/;Domain=.lijit.com;Expires=Sat, 12-Sep-2020 08:37:12 GMT;Max-Age=31536000 ljtrtb_refresh=false;Path=/;Domain=.lijit.com;Expires=Tue, 17-Sep-2019 08:37:12 GMT;Max-Age=345600 ljtrtbexp=eJxdkEEOwCAIBP%2FiuQdAUOjXmv7dpD0xxzHurOszdNwaq2JPn3YN67hW59lxIx0iOFFBAkJFYVUlbgQYhkRDwpiOhdhgvy89xD7emIw%2Bh9%2Fh88KfIB%2FcJ%2F1F7wG6ok9p;Path=/;Domain=.lijit.com;Expires=Sat, 12-Sep-2020 08:37:12 GMT;Max-Age=31536000
Expires
Fri, 20 Mar 2009 00:00:00 GMT
Cache-Control
private, no-cache, no-store, must-revalidate, proxy-revalidate, max-age=0, s-maxage=0
Pragma
no-cache
P3P
CP="CUR ADM OUR NOR STA NID"
X-Powered-By
raptor
Content-Encoding
gzip
X-Sovrn-Pod
ap3ams1
p
ic.tynt.com/b/
0
119 B
Image
General
Full URL
https://ic.tynt.com/b/p?id=s!sovrn&lm=0&ts=1568363832155&dn=IDS&iso=0&img=https%3A%2F%2Fstatic.giga.de%2Fwp-content%2Fuploads%2F2015%2F07%2Fpaypal-login-rcm1200x627u.jpg&t=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
208.100.17.186 Chicago, United States, ASN32748 (STEADFAST - Steadfast, US),
Reverse DNS
ip186.208-100-17.static.steadfastdns.net
Software
nginx/1.14.0 /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

status
204
date
Fri, 13 Sep 2019 08:37:12 GMT
server
nginx/1.14.0
p3p
CP=NOI DSP COR NID PSA PSD OUR IND UNI COM NAV INT DEM STA
p
ic.tynt.com/b/
0
119 B
Image
General
Full URL
https://ic.tynt.com/b/p?id=s!sovrn&lm=0&ts=1568363832155&dn=IDS&iso=0&img=https%3A%2F%2Fstatic.giga.de%2Fwp-content%2Fuploads%2F2015%2F07%2Fpaypal-login-rcm1200x627u.jpg
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
208.100.17.186 Chicago, United States, ASN32748 (STEADFAST - Steadfast, US),
Reverse DNS
ip186.208-100-17.static.steadfastdns.net
Software
nginx/1.14.0 /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

status
204
date
Fri, 13 Sep 2019 08:37:12 GMT
server
nginx/1.14.0
p3p
CP=NOI DSP COR NID PSA PSD OUR IND UNI COM NAV INT DEM STA
p
ic.tynt.com/b/
0
119 B
Image
General
Full URL
https://ic.tynt.com/b/p?id=s!sovrn&lm=0&ts=1568363832155&dn=IDS&iso=0&img=https%3A%2F%2Fstatic.giga.de%2Fwp-content%2Fuploads%2F2015%2F07%2Fpaypal-login-rcm1200x627u.jpg
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
208.100.17.186 Chicago, United States, ASN32748 (STEADFAST - Steadfast, US),
Reverse DNS
ip186.208-100-17.static.steadfastdns.net
Software
nginx/1.14.0 /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

status
204
date
Fri, 13 Sep 2019 08:37:12 GMT
server
nginx/1.14.0
p3p
CP=NOI DSP COR NID PSA PSD OUR IND UNI COM NAV INT DEM STA
p
ic.tynt.com/b/
0
119 B
Image
General
Full URL
https://ic.tynt.com/b/p?id=s!sovrn&lm=0&ts=1568363832155&dn=IDS&iso=0&img=https%3A%2F%2Fstatic.giga.de%2Fwp-content%2Fuploads%2F2015%2F07%2Fpaypal-login-rcm1200x627u.jpg
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
208.100.17.186 Chicago, United States, ASN32748 (STEADFAST - Steadfast, US),
Reverse DNS
ip186.208-100-17.static.steadfastdns.net
Software
nginx/1.14.0 /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

status
204
date
Fri, 13 Sep 2019 08:37:13 GMT
server
nginx/1.14.0
p3p
CP=NOI DSP COR NID PSA PSD OUR IND UNI COM NAV INT DEM STA
p
ic.tynt.com/b/
0
119 B
Image
General
Full URL
https://ic.tynt.com/b/p?id=s!sovrn&lm=0&ts=1568363832155&dn=IDS&iso=0
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
208.100.17.186 Chicago, United States, ASN32748 (STEADFAST - Steadfast, US),
Reverse DNS
ip186.208-100-17.static.steadfastdns.net
Software
nginx/1.14.0 /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

status
204
date
Fri, 13 Sep 2019 08:37:13 GMT
server
nginx/1.14.0
p3p
CP=NOI DSP COR NID PSA PSD OUR IND UNI COM NAV INT DEM STA
/
ssl.3.damoh.giga.de/45eae94b4e2051e2c49b4642c3654f4ec5c6830a/ Frame 4364
109 B
671 B
XHR
General
Full URL
https://ssl.3.damoh.giga.de/45eae94b4e2051e2c49b4642c3654f4ec5c6830a/
Requested by
Host: text
URL: data:text/javascript;base64,dmFyIE9oamF1ZGlwQWxpZWNhaUo9T2hqYXVkaXBBbGllY2FpSnx8e307CihmdW5jdGlvbihjKXtmdW5jdGlvbiBjYSgpe3guUmV8fCh4LlJlPTApO3guUmUrKzt3aW5kb3cudmlkZW9wa2dJbnRlcmZhY2UhPXgudmlkZW9wa2dJbnRlcmZhY2UmJih3aW5kb3cudmlkZW9wa2dJbnRlcmZhY2U9eC52aWRlb3BrZ0ludGVyZmFjZSk7MTA+eC5SZSYmd2luZG93LnNldFRpbWVvdXQoY2EsNTAwKX1mdW5jdGlvbiB6KCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIseik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIseik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIseik7ZGE9ITA7Zm9yKHZhciBjPTA7YzxDLmxlbmd0aDtjKyspQ1tjXS5sb2FkKCk7CmZvcihjPTA7YzxDLmxlbmd0aDtjKyspe3ZhciBiPUNbY10ucGxheSgpO2lmKHZvaWQgMCE9PWIpYi50aGVuKGZ1bmN0aW9uKCl7fSlbImNhdGNoIl0oZnVuY3Rpb24oKXt9KX1LJiYoSygpLEs9ITEpfWZ1bmN0aW9uIGVhKCl7dmFyIGM9d2luZG93Lk9PO2N8fChjPXdpbmRvdy5qT09QbGF5ZXJfMCk7cmV0dXJuIGN9ZnVuY3Rpb24gZmEoKXtpZihtKXttLnBhdXNlQnV0dG9ufHwobS5wYXVzZUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1sZWZ0OiA2cHg7cGFkZGluZy1ib3R0b206IDZweDsiIG9uZXJyb3I9InRoaXMuc3JjPVwnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9wYXVzZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlF6UTVOelUxTjBRMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UXpRNU56VTFOMFUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBETkRrM05UVTNRalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERORGszTlRVM1F6WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BnSG5DckVBQUFGMFNVUkJWSGphN0ptOWlvTkFFTWZqM1JVVzhTTWFQd2hhMjRjSTFsWldlWUxZK1FTV2dwVytnNCtVSm04UnRVMU1pbURsTGJjZ3dTUEhRY0xlempGVHpRNHkrOXZoUHlQTENrbVN6S0RaeCtsMGdnZDlQcC9oUWQ5dU4zalF3ekFnTkF0N213RTBsQWRDWXlOaXBSRWFOWTJWUm1pUTBOdnROZ3hEU1pLcXFqb2NEbU44dFZydGRqdlA4OXEyemZPY0krak5abE9XSmZVSlh4UkYxK3VWTG91aThIMmYrazNUa0NQeE1qM2lPQjU5V1pZSjkzaUFrWmpZdmYvM2xTYXFtRVJvMmtkeExxQW5TWVl2K3lITzQvUjRCTTFYcFJsRDQyLzhGeFhGUmtSTmc5UTB5SkdIallqeXdPbUJqZmlmRzdHdTYvdmw4WGlrYVlreitld2wyNzJUMjlIeldmYjcvWHE5ZGwyMzY3b3N5OGlTeGkrWEN3RU5na0FVUlJKTTA3VHYrK2UzRXh6SHdVWkU2RWVhbnMvbjRLQUYyN1lSbWdtMFpWbndvRTNUaEFkdEdBWTg2T1Z5aWRCTW9IVmRod2V0YVJvODZNVmlBUTlhVlZXRVpnS3RLQW84NkpmY1hGaERmMy9MNGQ4K0JSZ0ErUk5XU3hQaVI0d0FBQUFBU1VWT1JLNUNZSUk9Ii8+Jyk7Cm0ucGxheUJ1dHRvbnx8KG0ucGxheUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1sZWZ0OiA2cHg7cGFkZGluZy1ib3R0b206IDZweDsiIG9uZXJyb3I9InRoaXMuc3JjPVwnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9wbGF5MTgxMDAyLnBuZ1wnIiBzcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRHdBQUFBOENBSUFBQUMxbms0bEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeWhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVOaTFqTURZM0lEYzVMakUxTnpjME55d2dNakF4TlM4d015OHpNQzB5TXpvME1EbzBNaUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01UVWdLRTFoWTJsdWRHOXphQ2tpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2UXpRNU56VTFOemsyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZRelE1TnpVMU4wRTJOVVV3TVRGRk5UazVSamhCTTBNelEwVXhOMFUwUkRnaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcERORGszTlRVM056WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwRE5EazNOVFUzT0RZMVJUQXhNVVUxT1RsR09FRXpRek5EUlRFM1JUUkVPQ0l2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHZWa0dJa0FBQUhaU1VSQlZIamE3Smd4aXNKUUVJWjFYYkJSbXdoaURpQjZnVTB0cEJJRUM0dUFoVTBNQkZ2RlhxMFZQRUNDVm9MYWVnR0xpS1dGSGlDa2pyR3hqTE11aUd6QTNlVWx6L2ZZK2FzUW5QQmwvT2RsWnVLcXFzWjQwN3ZydXZ4Qm4wNG4vcUF2bHd0LzBMN3ZJelFOdmNVNEZOb0RvYkVRTWRNSWpaN0dUSDhxa2N2bFNPTFQ2WFM5WHQvdjkxVHQ0Wk9wV3ExMnU5MzVmSjVLcFh4YUlvV0dUTU9yRjR2RjlYcGRLQlQ0Z0w2WFJDYVRXU3dXalVhREJuUzRidXYxZW9QQjRDdjk3SG82K01SYXJXWVlSajZmNThBZWp3S0xMNWZMY3JrY0VYUWltODJTL0ZNZk53WHZKNVBKU3FVQ0Y3dmRqamw3UFA4MnRkdnR5V1FTK21rWStXZGNsdVhwZEFxR1lib1FneXFWU3NBTkJScWFwd1ZCSVBTMEpFay8vZ3dzRGltSG8zQ3oyZkNSNmJ1YXplWnNOaU8zT08zV1ZMcnB4YTNwbjhMUDU3T3U2K1NISUwxKytuQTRBTEhqT0s4ZkFuNFpicHJtY0Rqa1puSUJTMEFMdFZxdEdCcTNub2VESlRxZHp2RjQ1R2F3aFo1SlVaVFFpU08wUjcvZmh3YVYwV2s4R0c3YnRxWnBZQXh1VmdpV1piVmFMU2crcHZjZWorR2owV2c4SHROWTFvVHlGTS96VkZYZGJyZVVsaldFUXlnTTRkREJBWEdrSnY2bXVDaUt1TXREYUZ6MUlqUkNZeUZpcGhFYW9iRVFFZm9mUVY4RkdBQkdFSjRVNUZJZnp3QUFBQUJKUlU1RXJrSmdnZz09Ii8+Jyk7Cm0ubXV0ZUJ1dHRvbnx8KG0ubXV0ZUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1yaWdodDogNnB4O3BhZGRpbmctYm90dG9tOiA2cHg7IiBvbmVycm9yPSJ0aGlzLnNyYz1cJ2h0dHBzOi8vaG1kYXNzdHMuc2NobmVldm9ubW9yZ2VuLmNvbS9pbWcvbXV0ZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlEwWkNNRGMwUWpBMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UTBaQ01EYzBRakUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBETkRrM05UVTNSalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERORGszTlRVNE1EWTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1ByV2YzOGNBQUFKVVNVUkJWSGphN0ptL2p3RkJGTWU1dTNKUmM5UkVmZndCTGxHaW9ISTZqV3Y5QVZSWGllZ0ZDWTJ3Q2pyMDRoL2dMOUQ3MFlocTc1dWRaQ0xyZHRuZDJjM04zYnhpOHF6ZE41OTU3L3RtN2ZLV3kyVVBiL2F5MysvNWd6NGNEdnhCbjg5bi9xQVZSUkhRYnRpVGgwTVQ4aERRb2hGRnBnVzAwRFI3YUlXcDFldDF4WGxqQmkxSjBuQTR6R1F5TGtDejBiVFA1MnUzMjlGb0ZMNExUY0lBT2hRS3RWcXRXQ3hHUGpLQlJzVXd6bVl6UjZDUjNXNjM2L2Y3NlJFN0FiUFpMTWJwZElxd3lBSWM5cnZITGJFMSsxQU56cHRxY0dqZEdPOGVxS0FzeTdmRWowY29Gb3VWU2dVT1lZWHpxaHF0bGVsR1JLVnl1WnpCY3BQSjVJL0g3OHFqVkNwaEhBd0dpVVFDSFl6ek1WSkVqV05PMDFpeEhwYXg2UVdrcktsVUNrNi8zNmVzbWd0dkhSUHlzQ1pRVFpCUDFlQzhxL1lJNGwxNU9IVWIvMUtOcU1oYXhWejl3VVFDUWwyUHA5T3NQSFNoN2NqamVyVHB1SnBwSmduV2JjUS85YmhsVXg2T1pwcExlVGlWNmNWaWdUczhaNDNZNi9YSXg4bGtRZzZlVGlleWpOK2JhV3I0VVVVZEFtMkJYZ3V0Ti9kdXQxdXYxM3JmWXRaNFBHNXFNY3ZsVXJNTVRCRU9oMW51SHJKcUJsYzJHbzE4UG0raFJKRDd0WVB6UVcrY2UyYWFybGFybTgybVZxdFoxdFY4UHI5MmNPSHhlSFM4RVR1ZERxWnBOcHMybTRIU2o4ZGpFbUc3M1VJNVR1MGVtSVp3QndJQis4K0lsSDYxV2htRThscHJCWTJoS1VlakVlR09SQ0o4dkdHQ3VBdUZ3clVpK1hqREJPNTBPbzNSQldodk1CaGtXRGpzWExoM09DMlBaMG1TR0lhN1hDN2lWYS80SjBCQS93OW8wWWdDV2tDTFJoVHlFTkRNN1Z1QUFRQndvdnZJdjA5WTZnQUFBQUJKUlU1RXJrSmdnZz09Ii8+Jyk7Cm0udW5tdXRlQnV0dG9ufHwobS51bm11dGVCdXR0b249JzxpbWcgc3R5bGU9Im1heC13aWR0aDogMjVweDttYXgtaGVpZ2h0OiAyNXB4O3BhZGRpbmctcmlnaHQ6IDZweDtwYWRkaW5nLWJvdHRvbTogNnB4OyIgb25lcnJvcj0idGhpcy5zcmM9XCdodHRwczovL2htZGFzc3RzLnNjaG5lZXZvbm1vcmdlbi5jb20vaW1nL3VubXV0ZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlEwWkNNRGMwUWpRMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UTBaQ01EYzBRalUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBEUmtJd056UkNNalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERSa0l3TnpSQ016WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BpL2RxR3dBQUFTRlNVUkJWSGphN0psTFRCTkJHTWUzaUVpbDcyNUxhMHVRaTYyUEF4b0RIUEhDelpaRXFpYVFRQTJKd3NGWHZHaE1DSGZmSmlZRzFDWWVSRUUweElQdEJZN1lFeWFDK0VLSUVCTXI3VzRWaW9qV2IzZXRXYnF6MjA1WjFFMzJPMndtT3pQZi9QYWIvenhYMDk3ZVRpak5paE9KaFBLZ0tZcFNIblFxbFZJZWREcWRWcUgvaGhVUkNqUlZIaXEwT2hEVlNLdlFxcWIvZmFUUHpNM3RvK2t0eTh0Zk5tdzQ1UEY4TENuaDUzWjNkM2QxZGVWMHNpMlZhbzdGd0kvK3g0OVhXdTFoandjdjBta2NxNmNvYUF5SW9TYTBkM2xxU3JleXdtWHBkTHErdmo2Zno1ZlR5YmJGeGQ0M2IzenhPSGdBUDU1VWF2LzhQQllHSmpSTjg3L1lzN1RVOC9ZdGNBTnhUMCtQaHcxWVRtS29vdi81ays5bmZ6eU9oWUVuRHk0MmZQTXVMZlcrZTBjTUQzdTlYdTZOaEVNSWF1L1VsR0UxTWJJVzlCZzhoNGFHWkpESERac3RXVlFrNVBZZU8wWmtUa0FTTWI0bFFuelhhdVhLK0ZpREJIU2EzKzhYbFFmV0NJQkJjNlNxU3NoTlBIOU8xTmNUNGljM2lQSHQ5KytSeE9kZExsZG5aMHRMQzZUM3NzWUVJdE52TWtRYWJMSzBOTGgxcXdRM01zWml4SS85L3NjbUU4Y0tKVjJzL1pFS3RxYWhkeG9iRzhXKzlVc3NabWh1SmxhUFM0NGJ4aVhNaHZ6QmVtZDZHa21jdkhadFMyMXRPaGpVNi9WL0VMTVNlUE0wZkhGTlRZMlVWa1pHbU5BS3VPOXMydFJXV2NseGc5eERNek5JNG5OT1oyTnRMWjlNSW9FaGp4d0NyNjVtdUkzR3JOZmJ2MzBEVUlnMzZGaU1PTnJSOFNoVFVScGFob0dZUDNkMDgrWkhpUVJhRlZldkVtMXRhOXA3RkJqbVhOeU12ck9VdzlwWmgyT3lyaTVQVlJTeUlxNlZXMkRQT2pvR0RZYjBtbTNOa2M2Ym0xRkZhMnVlQVY1UFRXZHhYN2tpbG5uZFlubkp6aFh5N0tkbGtBZG5ZMlBFeVpOaW1hMFU1WXJGOGc5d2dackdKaGJPMlR5RGFjUU5DL1hZbUN6UW9vc0xCbmN1NHQ5RzA5czdPNzFPcDNEWmswaXN6NVFYQ2hHN2QrY216c1Q3eWR6Y2ptajBuMFlhaUlOQjlLbU1KT0Y1NGZObkJQcUpFOFRSbzFnNnlkNTdpUEhNenM2T2pvNkt4c3hnWUFJbVR2eFFwK1BTU082Nm16Y1BrQ1EwNFhhNzVUellEckFtVnEzcDY5Y0w4L05vWXF0MW9LeU1ZTjF5Q1dSSitKakk0T0J0blE0QWdON0FManI1UnJxQWV3K0dPQjVIWk1EaUVncjFRKy96ZlBhWGxkRWFEWEFiQlEwMTNMc1h0bGpnU0J3T2h6bEVtaDBiaFc5TlJZa1hGaTZLRWNPaVdGMmRQbjQ4S3llczFYNncyKzkvK2lUa0JsZndhb0NGWnI2d3Y1OWpuWmlZQU9XSXNXbXdWQlZZV0xpRS9JV1hJWVprUlVVRnN1Nk81ZVVIc1pnUnhYSGFiSVlPV2RVSkRRM3dqRVFpTXR3d0JSWVhFZk92Um5ONnp4NjZxa3E2N2tSSnlVR2JEUXJuNHpiQ21qeG5SR0dUOENaQWtnOWV2dzRFQW54RkltMTg0MFlvakhTeWpwYzFUMHRMc3hwcklrbEFZWURHeDZGUDRTbnRBUW8zQ2JqQkxSYUd4dWwwWWlua01rVWRZditYdmlndVBtVXlBVVRXL0oxTUpuTTYyZm45Ty9qWnRiSUM2ZnRhTGZqQll0QTRIQTdGM1pvcUU3cTh2Rng1MEhhN1hYblFOcHROZWRBa3U0ZFVvZGNmMm1xMUtnL2FZckVvRDlwc05pc1Ayb1M1aEtyUWhVSWI4N2c0L08rZ1lWK21QR2p1ZjRleTdKY0FBd0Rhbk9MSU8vcGdrQUFBQUFCSlJVNUVya0pnZ2c9PSIvPicpOwptLnNraXBhYmxlQnV0dG9ufHwobS5za2lwYWJsZUJ1dHRvbj0nPGRpdiBzdHlsZT0ib3BhY2l0eTogMC43O21pbi1oZWlnaHQ6IDI1cHg7bWF4LWhlaWdodDogMjVweDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2Rpc3BsYXk6IGlubGluZS1ibG9jaztsaW5lLWhlaWdodDogMjVweDtwYWRkaW5nLWxlZnQ6IDZweDttYXJnaW4tcmlnaHQ6IDZweDtwYWRkaW5nLXJpZ2h0OiA2cHg7Ym9yZGVyOiAjRkZGRkZGO2JhY2tncm91bmQtY29sb3I6YmxhY2s7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ij5Ta2lwIEFkIGluIFt0aW1lXXM8ZGl2PicpO20uc2tpcEJ1dHRvbnx8KG0uc2tpcEJ1dHRvbj0nPGRpdiBzdHlsZT0ibWluLWhlaWdodDogMjVweDttYXgtaGVpZ2h0OiAyNXB4O29wYWNpdHk6IDAuNjttYXJnaW4tcmlnaHQ6IDZweDtwYWRkaW5nLWxlZnQ6IDZweDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2Rpc3BsYXk6IGlubGluZS1ibG9jaztsaW5lLWhlaWdodDogMjVweDtiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14OyI+U2tpcCBBZDxpbWcgc3R5bGU9Im1heC13aWR0aDogMzBweDtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246IG1pZGRsZTsiIG9uZXJyb3I9XCdodHRwczovL2htZGFzc3RzLnNjaG5lZXZvbm1vcmdlbi5jb20vaW1nL3NraXAxODEwMDIucG5nXCcgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQVlBQUFBNi9ObHlBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQTNCcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1UTTRJRGM1TGpFMU9UZ3lOQ3dnTWpBeE5pOHdPUzh4TkMwd01Ub3dPVG93TVNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3VFUwOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXRiUzhpSUhodGJHNXpPbk4wVW1WbVBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZjMVI1Y0dVdlVtVnpiM1Z5WTJWU1pXWWpJaUI0Yld4dWN6cDRiWEE5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM4aUlIaHRjRTFOT2s5eWFXZHBibUZzUkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwRk9UWkRRalZHTUVSR01USXhNVVUyT0RReFFVVkJOME5HTVVNeU9Ua3hOU0lnZUcxd1RVMDZSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBGUmpjM09VRkdNRVJHUkRVeE1VVTJPRU0xT1VFNFFrSkdSamRHTmtRM05pSWdlRzF3VFUwNlNXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEZSamMzT1VGRlJrUkdSRFV4TVVVMk9FTTFPVUU0UWtKR1JqZEdOa1EzTmlJZ2VHMXdPa055WldGMGIzSlViMjlzUFNKQlpHOWlaU0JRYUc5MGIzTm9iM0FnUTBNZ01qQXhOeUFvVFdGamFXNTBiM05vS1NJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5KdmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09tUXpZemsxTkRCbUxUVmxZVE10TkRsbE5DMWhOR1V5TFdRMk1qUXlOVGN6Wm1VNVlTSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcEZPVFpEUWpWR01FUkdNVEl4TVVVMk9EUXhRVVZCTjBOR01VTXlPVGt4TlNJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BtNlhOVDRBQUFKcVNVUkJWSGphWXZ6Ly96L0RTQUpNRENNTWpIcDQxTU9qSGg3MThLaUhSejA4NnVGUkQ0OTZlTlREb3g0ZTlmQ29oN0VCbHNIbUlFTkR3d0JzNHVmUG45OUFGUXRBQXdEVXhqWTJOakZkWFYwcjlmWDEvVWpWQzlXREFzZ3hCeGVtU1pMMkJZTFMwdEt3RlN0V3JBUjZQZ3JrWUZJaWdCaXhRWldIZVhsNWVVQzBob1lHeDdadDI1YXFBWUdlbnA0UGtSNytSNHpZb1BJd2Nvenc4ZkV4ckY2OXVqc2FDSFIxZFgwR09vYnBWbWlWbDVkSHFLdXJhMWhaV2ZFY08zWnN4WWdvcFFNQ0FneUF5WHkrbTVzYnp6TWd1SExseXJiaGtxUnhPaENVcjllc1dUUGJFUWkwdGJXOWhrV2hSUWlBOHZYa3laTkxzckt5TXJXMHREeUdWYUdGRDJSblovdE1talJwc3BtWldjaXdLN1J3QVJjWEZ4VnBhZW1GZ1lHQk1qZUFZRVMwcFRVMU5ia1dMbHpZRHl6VS9HbWRwRmxvbEtUL2taT3YyOXZiTTRDRm1zYXdLN1R3Z2ZqNGVJY2hWMmlOdVA0d0pVbncwNmRQRENNbVNWKzdkdTBic0tNVlA2eGFXcmpBL1Buejk0RzZsVStBWUZqSE1DZ0pBL3ZPVTVxQjRPN2R1L3VHYXJWRWRCSXVLU2twdm43OStvMzc5KzhmR05ZdExXQUg0a3hUVTFQanBVdVh0Z3piN2lFTUFEMjZhTjY4ZVhNZlBIaHdpTjdkUTdxMnRCNC9mc3lRbHBhV0NVeksxeDQrZkhob1dJOTRIRDkrL0ZrcUVBQUxxVStQSGowNlFrcGdEYmxDcTYrdmIxMC9FQUJqK0FnNUJkNlFpZUdQSHo4eXBLU2tsSjRBQW1JOE8yU2JsbGV2WHIyeVk4ZU9HKzd1N3VIQXBIeU1GTS9TT2tuVFpPYUJFaXdsSldXRlB2TUFGYU9LK1lOdWJna1VtMEFQV3RMS2ZNYlJ4YVdqSGg3MThLaUhSejA4NnVGUkQ0OTZlTlREb3g0ZTlmQ29oMGM5UE9waEJnYUFBQU1BR21DMHBlSmNHRUlBQUFBQVNVVk9SSzVDWUlJPSIvPjwvZGl2PicpOwppZihtLnNpZGVsb2Fkcyl7dmFyIGM9ZnVuY3Rpb24oKXt9O20uc2lkZWxvYWRzLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5hbGlhczsiZnVuY3Rpb24iPT09dHlwZW9mIGImJihiPWIoKSk7YT1hLnVybDsiZnVuY3Rpb24iPT09dHlwZW9mIGEmJihhPWEoKSk7ZS5ZYShhLGIsW10sYyxjLGwpfSl9bC5sKG0uZ2xvYmFsQ29uZmlnLG0uY2xpZW50Q29uZmlnLG0ucHJlY2hlY2tlZCxtLm9uUmVhZHksbS5vbkZhaWx1cmUsbSk7ZG9jdW1lbnQuaGRfcmVhZHk9ITA7dmFyIGI9bS5zdGFydFBsYXllcjtiJiYiZnVuY3Rpb24iPT09dHlwZW9mIGImJmIoKX1lbHNlIGtjKGZhLDUwKX1mdW5jdGlvbiByKGMsYil7aWYoZS5jbyllLnRyYWNrKCJzdGF0c19oZF9ieXBhc3MiLCIiLCEwKTtlbHNlIGlmKG0mJmwpeyhtLmFkVGFnfHxtLnByZXJvbGxBZFRhZykmJmMucGF1c2UoKTtlLnYoay5mZCxjLnUoKSk7aWYoYy5nZXRDdXJyZW50VGltZSl7dmFyIGE9Yy5nZXRDdXJyZW50VGltZSgpO2EmJgplLnRyYWNrKCJhY3RpdmF0ZWRBdCIsYSl9Yj9sLkthPSEwOmUudHJhY2soInN0YXRzX2hkX2FiZCIsIiIsITApO2E9bmV3IGdhO2EuZmYoYyk7YS5CdChsKTthLkF0KG0pO2EubXQoKTthLmcoKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cihjLGIpfS5iaW5kKHRoaXMpLDUwKX1mdW5jdGlvbiBoYShjLGIpe2MucGF1c2UoKTtpZihsLkdiLmxlbmd0aCl7dmFyIGE9bC5HYi5zaGlmdCgpO2lmKCJhZGNhbGwiPT1hLnR5cGUpe3ZhciBoO2g9ZS5IdCh7IltMT0FEU0NSSVBUXSI6ZS5iYSgxMCksIltVVElMU10iOmUuYmEoMTApLCJbQ0FMTEJBQ0tdIjplLmJhKDEwKX0pO3dpbmRvd1toWyJbTE9BRFNDUklQVF0iXV09ZS5maC5iaW5kKGUpO3dpbmRvd1toWyJbVVRJTFNdIl1dPWw7Zm9yKHdpbmRvd1toWyJbQ0FMTEJBQ0tdIl1dPWZ1bmN0aW9uKGEpe2Zvcih2YXIgaCBpbiBhKW1baF09YVtoXTtyKGMsYil9O2g9YS5zY3JpcHRzLnNoaWZ0KCk7KWUuZmgoaCxmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJzaWRlbG9hZCBzdWNjZXNzIil9LApmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJzaWRlbG9hZCBmYWlsZWQiKX0sbCl9ZWxzZSByKGMsYil9ZWxzZSByKGMsYil9Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTXM9dGhpcy5hWzFdO3RoaXMuWGs9dGhpcy5hWzFdO3RoaXMuZ2o9dGhpcy5hWzddO3RoaXMuRW09dGhpcy5hWzNdO3RoaXMubmo9dGhpcy5hWzEwXTt0aGlzLkRuPXRoaXMuYVszXTt0aGlzLmZrPXRoaXMuYVsxXTt0aGlzLk9zPXRoaXMuYVsxXTt0aGlzLkl1PXRoaXMuYVs4XTt0aGlzLlZxPXRoaXMuYVs0XTt0aGlzLmo9dGhpcy5hWzNdfWMuY3Q9YjtiLnByb3RvdHlwZT17THM6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5Nczp0aGlzLldrKGEpfSxXazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuWGs6dGhpcy5maihhKX0sZmo6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLmdqOnRoaXMuRG0oYSl9LApEbTpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuRW06dGhpcy5taihhKX0sbWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLm5qOnRoaXMuQ24oYSl9LENuOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5Ebjp0aGlzLmVrKGEpfSxlazpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuZms6dGhpcy5OcyhhKX0sTnM6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLk9zOnRoaXMuSHUoYSl9LEh1OmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5JdTp0aGlzLlVxKGEpfSxVcTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuVnE6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBpYT1jLmN0fHxpYSxsYz1uZXcgaWEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1sYy5Mcyg0KTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5jbz0KITE7dGhpcy5TYT0ic2V0dXAiO3RoaXMuS2M9W107dGhpcy5qZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLllzLmJpbmQodGhpcykpO3RoaXMua2I9e307dGhpcy5OZz17fTt0aGlzLmNmPSExfWMuJGo9YjtiLnByb3RvdHlwZT17YnU6ZnVuY3Rpb24oKXt2YXIgYT0iIixiO2ZvcihiIGluIHRoaXMua2IpdGhpcy5rYi5oYXNPd25Qcm9wZXJ0eShiKSYmKGErPWIrdGhpcy5rYltiXSsiXyIpO3JldHVybiBhfSx6YzpmdW5jdGlvbigpe3RoaXMuY2Z8fCh0aGlzLmNmPWUuYmEoMTApKTtyZXR1cm4gdGhpcy5jZn0sbGI6ZnVuY3Rpb24oYSl7dGhpcy5rYlthXXx8KHRoaXMua2JbYV09MCk7dGhpcy5rYlthXSs9MTs1PHRoaXMua2JbYV0mJiF0aGlzLk5nW2FdJiYodGhpcy5OZ1thXT0hMCwibmV3QmlnQWRJZCI9PWEmJnRoaXMudHJhY2soInN0YXRzX2hkX2NoZWNrdHJhY2tzIix0aGlzLmJ1KCksITApKX0samU6ZnVuY3Rpb24oKXt0aGlzLmFhPXt1cmxzOnt9LApob21hZFVybHM6e30sb3JpZ2luYWxVcmxzOnt9LHNjcmlwdHM6e30sZXZlbnRsaXN0ZW5lcjpbXSxnZW5lcmFsRXZlbnRsaXN0ZW5lcjpbXSxpRnJhbWVzOltdLGlGcmFtZU9uTG9hZEhhbmRsZXI6e30saUZyYW1lVXJsOiIiLHRyYWNlOltdLHN0YWNrOltdLGVycm1zZzpbXX19LGpuOmZ1bmN0aW9uKGEpe3RoaXMuYWEuZXJybXNnLnB1c2goYSl9LHBvc3RNZXNzYWdlOmZ1bmN0aW9uKGEsYil7dHJ5e2EuY29udGVudFdpbmRvdyYmKGE9YS5jb250ZW50V2luZG93KX1jYXRjaChkKXt9YSYmYS5wb3N0TWVzc2FnZSYmYS5wb3N0TWVzc2FnZShiLCIqIil9LG1hOmZ1bmN0aW9uKGEsYixkKXt0aGlzLnBvc3RNZXNzYWdlKGEse3R5cGU6InZwYWlkIixldmVudDpiLGRhdGE6ZH0pfSxZczpmdW5jdGlvbihhKXthJiZhLmRhdGEmJmEuZGF0YS50eXBlJiYidnBhaWQiPT1hLmRhdGEudHlwZSYmdGhpcy5YcyhhLmRhdGEpfSxYczpmdW5jdGlvbihhKXtpZih0aGlzLmFhJiZ0aGlzLmFhLmV2ZW50bGlzdGVuZXIpZm9yKHZhciBiPQp0aGlzLmFhLmV2ZW50bGlzdGVuZXIubGVuZ3RoLGQ9MDtkPGI7ZCsrKXRoaXMuYWEmJnRoaXMuYWEuZXZlbnRsaXN0ZW5lciYmdGhpcy5hYS5ldmVudGxpc3RlbmVyW2RdJiZhLmV2ZW50PT10aGlzLmFhLmV2ZW50bGlzdGVuZXJbZF0ubmFtZSYmdGhpcy5hYS5ldmVudGxpc3RlbmVyW2RdLmNiKGEpfSxiZTpmdW5jdGlvbihhLGIpe3RoaXMuYWEuZXZlbnRsaXN0ZW5lci5wdXNoKHtuYW1lOmEsY2I6Yn0pfSxsZzpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmdxKGEpLGQ9ITE7aWYoYilyZXR1cm4gdGhpcy5laChhLCJQT1NUIix7aG9tYWRfcmVzb2x2ZV9oYXNoOmJ9LGZ1bmN0aW9uKGEpe3RyeXtkPUpTT04ucGFyc2UoYS5yZXNwb25zZVRleHQpLnVybH1jYXRjaChiKXtjb25zb2xlLmxvZygid3RmIixiKX19LGZ1bmN0aW9uKCl7fSwhMCwhMCksZH0sZ3E6ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IFJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPyhbdy4tXSopOj8uKihbMC05XSspPy8/KFthLWYwLTldezQwfSkvPyQiLAoiZyIpO2lmKChiPWIuZXhlYyhhKSkmJihiWzJdfHxiWzVdKSl7aWYoYlsyXSlyZXR1cm4gYlsyXTtpZihiWzVdKXJldHVybiBiWzVdfWVsc2UgaWYoYj1uZXcgUmVnRXhwKCJeKGh0dHBzPyk6Ly8oW3cuLV0qKTo/LiooWzAtOV0rKT8vPyhbYS1mMC05XXs0MH0pLz8kIiwiZyIpLChiPWIuZXhlYyhhKSkmJmJbNF0pcmV0dXJuIGJbNF07cmV0dXJuITF9LGduOmZ1bmN0aW9uKGEsYil7aWYoYiYmISgwPnRoaXMubGEoYSkuaG9zdC5pbmRleE9mKCJkYW1vaCIpKSl7aWYoYT09Yil7aWYoZS5RcChhKSlyZXR1cm47KGI9dGhpcy5sZyhhKSl8fChiPWEpfTA9PT1iLmluZGV4T2YoIi8vIikmJihiPSJodHRwczoiK2IpO3RoaXMuYWEudXJsc1thXT1iO3RoaXMuYWEudXJsc1tiXT1hO3RoaXMuYWEuaG9tYWRVcmxzW2FdPWI7dGhpcy5hYS5vcmlnaW5hbFVybHNbYl09YX19LFFwOmZ1bmN0aW9uKGEpe3ZhciBiPSExO3RoaXMuYWEuaG9tYWRVcmxzW2FdJiYoYj10aGlzLmFhLmhvbWFkVXJsc1thXSk7CnJldHVybiBifSx0ZzpmdW5jdGlvbihhKXt2YXIgYj0hMTt0aGlzLmFhLm9yaWdpbmFsVXJscyYmdGhpcy5hYS5vcmlnaW5hbFVybHNbYV0mJihiPXRoaXMuYWEub3JpZ2luYWxVcmxzW2FdKTtyZXR1cm4gYn0sZWI6ZnVuY3Rpb24oYSxiKXtifHwoYj0iIik7dGhpcy50cmFjaygic3RhdHNfdnBhaWRfIithLGIsITApfSxwcjpmdW5jdGlvbihhKXtyZXR1cm4iYWJvdXQ6YmxhbmsiPT1hfHwiYWJvdXQ6c2VsZiI9PWF8fCIiPT1hfSx0ZTpmdW5jdGlvbihhKXtpZighYXx8Im9iamVjdCIhPT10eXBlb2YgYSlyZXR1cm4gMDt2YXIgYj0wLGQ9IiI7Zm9yKGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiZiKys7cmV0dXJuIGJ9LENnOmZ1bmN0aW9uKGEsYil7dmFyIGQ9YVtiXTtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBkP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGQpOiJmdW5jdGlvbiI9PT10eXBlb2YgZD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChkKCkpOiJvYmplY3QiPT09dHlwZW9mIGQ/CmQ6bnVsbH0sSGg6ZnVuY3Rpb24oYSl7Zm9yKDthIT1kb2N1bWVudC5ib2R5JiZudWxsIT1hOylhPWEucGFyZW50RWxlbWVudDtyZXR1cm4gYT09ZG9jdW1lbnQuYm9keT8hMDohMX0sV2c6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiYiZnVuY3Rpb24iPT09dHlwZW9mIGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PyhhPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpPzA8PWEudG9wJiYwPD1hLmxlZnQmJmEuYm90dG9tPD0od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSYmYS5yaWdodDw9KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpOiExOiExfSxCZTpmdW5jdGlvbihhLGIpe3ZhciBkPTAsZj0wLG49MCxjPTAsZT0hMTtpZighYXx8IWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0fHwiZnVuY3Rpb24iIT09dHlwZW9mIGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXJldHVybiExOwp2YXIgZz1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFnKXJldHVybiExO249Zy5oZWlnaHQqZy53aWR0aDtkPWcud2lkdGg7Zj1nLmhlaWdodDswPmcudG9wJiYoZis9Zy50b3ApO2cuYm90dG9tPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpJiYoZi09Zy5ib3R0b20tKHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpOzA+Zy5sZWZ0JiYoZCs9Zy5sZWZ0KTtnLnJpZ2h0Pih3aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKSYmKGQtPWcucmlnaHQtKHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpKTswPmYmJihmPTApOzA+ZCYmKGQ9MCk7MDxuJiYoYz0xMDAvbipkKmYpO2M+PWImJihlPSEwKTtyZXR1cm4gZX0sQ2U6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5CZShhLmVsLAphLnBlcmNlbnQpO2Euc3RhcnRUaW1lfHwoYS5zdGFydFRpbWU9KG5ldyBEYXRlKS5nZXRUaW1lKCkpO2lmKGIpe2lmKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWEuc3RhcnRUaW1lPj1hLnRpbWVNUyl7YS5jYigpO3JldHVybn19ZWxzZSBhLnN0YXJ0VGltZT0hMTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuQ2UoYSl9LmJpbmQodGhpcyksMTAwKX0sRWI6ZnVuY3Rpb24oYSl7YT1hJiYibnVtYmVyIj09PXR5cGVvZiBhP01hdGguYWJzKGEpOjEwO3JldHVybiBNYXRoLnJvdW5kKE1hdGgucG93KDEwLGEpKiguODk5OTk5OTk5Kk1hdGgucmFuZG9tKCkrLjEpKX0sYmE6ZnVuY3Rpb24oYSl7YT1hJiYibnVtYmVyIj09PXR5cGVvZiBhJiYwPGE/TWF0aC5yb3VuZChhKToxMDtmb3IodmFyIGI9IiIsZD0wO2Q8YTtkKyspYis9U3RyaW5nLmZyb21DaGFyQ29kZSgoLjU+TWF0aC5yYW5kb20oKT82NTo5NykrTWF0aC5mbG9vcigyNipNYXRoLnJhbmRvbSgpKSk7cmV0dXJuIGJ9LHZlOmZ1bmN0aW9uKGEpe3ZhciBiPQowLGQsZjtpZigwPT09YS5sZW5ndGgpcmV0dXJuIGI7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKylmPWEuY2hhckNvZGVBdChkKSxiPShiPDw1KS1iK2YsYnw9MDtyZXR1cm4gYn0sRWg6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2YXIgaD0iIixkLGY7Zm9yKGQ9NzswPD1kO2QtLSlmPWE+Pj40KmQmMTUsaCs9Zi50b1N0cmluZygxNik7cmV0dXJuIGh9ZnVuY3Rpb24gZChhLGIpe3JldHVybiBhPDxifGE+Pj4zMi1ifXZhciBmLG4sYz1BcnJheSg4MCksZT0xNzMyNTg0MTkzLGc9NDAyMzIzMzQxNyxrPTI1NjIzODMxMDIsTD0yNzE3MzM4NzgsbD0zMjg1Mzc3NTIwLHAsbSx0LEIscjthPWEmJiJzdHJpbmciPT09dHlwZW9mIGE/YToiIjtwPWEubGVuZ3RoO3ZhciBxPVtdO2ZvcihmPTA7ZjxwLTM7Zis9NCluPWEuY2hhckNvZGVBdChmKTw8MjR8YS5jaGFyQ29kZUF0KGYrMSk8PDE2fGEuY2hhckNvZGVBdChmKzIpPDw4fGEuY2hhckNvZGVBdChmKzMpLHEucHVzaChuKTtzd2l0Y2gocCUKNCl7Y2FzZSAwOmY9MjE0NzQ4MzY0ODticmVhaztjYXNlIDE6Zj1hLmNoYXJDb2RlQXQocC0xKTw8MjR8ODM4ODYwODticmVhaztjYXNlIDI6Zj1hLmNoYXJDb2RlQXQocC0yKTw8MjR8YS5jaGFyQ29kZUF0KHAtMSk8PDE2fDMyNzY4O2JyZWFrO2Nhc2UgMzpmPWEuY2hhckNvZGVBdChwLTMpPDwyNHxhLmNoYXJDb2RlQXQocC0yKTw8MTZ8YS5jaGFyQ29kZUF0KHAtMSk8PDh8MTI4fWZvcihxLnB1c2goZik7MTQhPXEubGVuZ3RoJTE2OylxLnB1c2goMCk7cS5wdXNoKHA+Pj4yOSk7cS5wdXNoKHA8PDMmNDI5NDk2NzI5NSk7Zm9yKGE9MDthPHEubGVuZ3RoO2ErPTE2KXtmb3IoZj0wOzE2PmY7ZisrKWNbZl09cVthK2ZdO2ZvcihmPTE2Ozc5Pj1mO2YrKyljW2ZdPWQoY1tmLTNdXmNbZi04XV5jW2YtMTRdXmNbZi0xNl0sMSk7bj1lO3A9ZzttPWs7dD1MO0I9bDtmb3IoZj0wOzE5Pj1mO2YrKylyPWQobiw1KSsocCZtfH5wJnQpK0IrY1tmXSsxNTE4NTAwMjQ5JjQyOTQ5NjcyOTUsQj10LAp0PW0sbT1kKHAsMzApLHA9bixuPXI7Zm9yKGY9MjA7Mzk+PWY7ZisrKXI9ZChuLDUpKyhwXm1edCkrQitjW2ZdKzE4NTk3NzUzOTMmNDI5NDk2NzI5NSxCPXQsdD1tLG09ZChwLDMwKSxwPW4sbj1yO2ZvcihmPTQwOzU5Pj1mO2YrKylyPWQobiw1KSsocCZtfHAmdHxtJnQpK0IrY1tmXSsyNDAwOTU5NzA4JjQyOTQ5NjcyOTUsQj10LHQ9bSxtPWQocCwzMCkscD1uLG49cjtmb3IoZj02MDs3OT49ZjtmKyspcj1kKG4sNSkrKHBebV50KStCK2NbZl0rMzM5NTQ2OTc4MiY0Mjk0OTY3Mjk1LEI9dCx0PW0sbT1kKHAsMzApLHA9bixuPXI7ZT1lK24mNDI5NDk2NzI5NTtnPWcrcCY0Mjk0OTY3Mjk1O2s9ayttJjQyOTQ5NjcyOTU7TD1MK3QmNDI5NDk2NzI5NTtsPWwrQiY0Mjk0OTY3Mjk1fXJldHVybihiKGUpK2IoZykrYihrKStiKEwpK2IobCkpLnRvTG93ZXJDYXNlKCl9LHZiOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iIixkLGYsbixjLGUsZyxrPTA7azxhLmxlbmd0aDspZD1hLmNoYXJDb2RlQXQoaysrKSwKZj1hLmNoYXJDb2RlQXQoaysrKSxuPWEuY2hhckNvZGVBdChrKyspLGM9ZD4+MixkPShkJjMpPDw0fGY+PjQsZT0oZiYxNSk8PDJ8bj4+NixnPW4mNjMsaXNOYU4oZik/ZT1nPTY0OmlzTmFOKG4pJiYoZz02NCksYj1iKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGMpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGQpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGUpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGcpO3JldHVybiBifSxtcjpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudmVuZG9yJiYtMTxuYXZpZ2F0b3IudmVuZG9yLmluZGV4T2YoIkFwcGxlIil9LAp1YzpmdW5jdGlvbigpe3ZhciBhPXt9LGI9ITEsZD0hMSxmPSExLG49ITEsYz0hMSxlPSExLGc9ITEsaz0hMSxtPSExLGw9ITE7dHJ5e2I9Y2hlY2tGb3JQaGFudG9tSlMoKX1jYXRjaChwKXt9dHJ5ey9cYkhlYWRsZXNzQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJihkPSEwKX1jYXRjaChyKXt9dHJ5e2Y9d2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoIndlYmRyaXZlciIpfHxuYXZpZ2F0b3IuTmI/ITA6ITF9Y2F0Y2godCl7fXRyeXtuPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk9wZXJhIiksYz0tMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94IiksZT0tMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJTYWZhcmkiKSxnPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk1TSUUiKSxtPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkNocm9tZSIpLGs9IWcmJiEhd2luZG93LlN0eWxlTWVkaWEsCmw9KG18fG4pJiYhIXdpbmRvdy5DU1N9Y2F0Y2gocSl7fWEuaXNQaGFudG9tSlM9YjthLmlzQ2hyb21lSGVhZGxlc3M9ZDthLmlzRmlyZWZveEhlYWRsZXNzPWY7YS5pc09wZXJhPW47YS5pc0ZpcmVmb3g9YzthLmlzU2FmYXJpPWU7YS5pc0lFPWc7YS5pc0VkZ2U9azthLmlzQ2hyb21lPW07YS5pc0JsaW5rPWw7cmV0dXJuIGF9LGFxOmZ1bmN0aW9uKCl7dmFyIGE9IlUiLGI9dGhpcy51YygpO2IuaXNQaGFudG9tSlM/YT0iSFAiOmIuaXNDaHJvbWVIZWFkbGVzcz9hPSJIQyI6Yi5pc0ZpcmVmb3hIZWFkbGVzcz9hPSJIRiI6KGIuaXNCbGluayYmKGE9IkIiKSxiLmlzT3BlcmEmJihhPSJPIiksYi5pc0ZpcmVmb3gmJihhPSJGIiksYi5pc1NhZmFyaSYmKGE9IlMiKSxiLmlzSUUmJihhPSJJIiksYi5pc0VkZ2UmJihhPSJFIiksYi5pc0Nocm9tZSYmKGE9IkMiKSk7cmV0dXJuIGF9LFRhOmZ1bmN0aW9uKCl7dmFyIGE9e1NpOmZ1bmN0aW9uKCl7cmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSl9LApjajpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9CbGFja0JlcnJ5L2kpfSxQcTpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpfSxqbDpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9PcGVyYSBNaW5pL2kpfSxJbTpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9JRU1vYmlsZS9pKX0sTW46ZnVuY3Rpb24oKXtyZXR1cm4gYS5TaSgpfHxhLmNqKCl8fGEuUHEoKXx8YS5qbCgpfHxhLkltKCl9fTtyZXR1cm4gYS5NbigpfSxsYTpmdW5jdGlvbihhKXt2YXIgYj0ic291cmNlIHByb3RvY29sIGF1dGhvcml0eSB1c2VySW5mbyB1c2VyIHBhc3N3b3JkIGhvc3QgcG9ydCByZWxhdGl2ZSBwYXRoIGRpcmVjdG9yeSBmaWxlIHF1ZXJ5IGFuY2hvciIuc3BsaXQoIiAiKTthPS9eKD86KD8hW146QF0rOlteOkBcL10qQCkoW146XC8/Iy5dKyk6KT8oPzpcL1wvKT8oKD86KChbXjpAXSopKD86OihbXjpAXSopKT8pP0ApPyhbXjpcLz8jXSopKD86OihcZCopKT8pKCgoXC8oPzpbXj8jXSg/IVtePyNcL10qXC5bXj8jXC8uXSsoPzpbPyNdfCQpKSkqXC8/KT8oW14/I1wvXSopKSg/Olw/KFteI10qKSk/KD86IyguKikpPykvLmV4ZWMoYSk7CmZvcih2YXIgZD17fSxmPTE0O2YtLTspZFtiW2ZdXT1hW2ZdfHwiIjtkLnF1ZXJ5S2V5PXt9O2RbYlsxMl1dLnJlcGxhY2UoLyg/Ol58JikoW14mPV0qKT0/KFteJl0qKS9nLGZ1bmN0aW9uKGEsYixoKXtiJiYoZC5xdWVyeUtleVtiXT1oKX0pO3JldHVybiBkfSx1bmlxdWU6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXt9LGQ9W10sZj0wLG49YS5sZW5ndGg7ZjxuOysrZiliLmhhc093blByb3BlcnR5KGFbZl0pfHwoZC5wdXNoKGFbZl0pLGJbYVtmXV09MSk7cmV0dXJuIGR9LFNiOmZ1bmN0aW9uKGEpe2E9dGhpcy5sYShhKS5ob3N0LnNwbGl0KCIuIik7dmFyIGI9IiI7YVthLmxlbmd0aC0yXSYmKGIrPWFbYS5sZW5ndGgtMl0rIi4iKTthW2EubGVuZ3RoLTFdJiYoYis9YVthLmxlbmd0aC0xXSk7cmV0dXJuIGJ9LEJhOmZ1bmN0aW9uKGEpe3ZhciBiPSIiLGQ9ITE7d2luZG93JiZ3aW5kb3cubG9jYXRpb24mJndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSYmKGI9d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKTsKYiYmLTE8Yi5pbmRleE9mKGEpJiYoZD0hMCk7cmV0dXJuIGR9LHFxOmZ1bmN0aW9uKCl7dmFyIGE9IiIsYj0iIixkPSIiO3RyeXthPXdpbmRvdy5sb2NhdGlvbi5ob3N0LGI9d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLHdpbmRvdyE9d2luZG93LnRvcCYmKGE9d2luZG93LnRvcC5sb2NhdGlvbi5ob3N0LGI9d2luZG93LnRvcC5sb2NhdGlvbi5wYXRobmFtZSl9Y2F0Y2goZil7ZG9jdW1lbnQucmVmZXJyZXImJihkPXRoaXMubGEoZG9jdW1lbnQucmVmZXJyZXIpLGE9ZC5ob3N0LGI9ZC5wYXRoKX1yZXR1cm4gYStifSxVbzpmdW5jdGlvbihhLGIpe2Zvcih2YXIgZD1bXSxmPVtdLG49MDtuPGIubGVuZ3RoO24rKylkW2Jbbl1dPSEwO2ZvcihuPTA7bjxhLmxlbmd0aDtuKyspZFthW25dXXx8Zi5wdXNoKGFbbl0pO3JldHVybiBmfSxXdDpmdW5jdGlvbihhLGIpe3ZhciBkPS0xLGY9IiI7dHJ5ezA8YS5pbmRleE9mKCIlIikmJjA8Yj8oZj1hLnNwbGl0KCIlIiksZD1iLzEwMCpmKTooZD1hLnNwbGl0KCI6IiksCmQ9MzYwMCorZFswXSs2MCorZFsxXSsgK2RbMl0sZD1NYXRoLnJvdW5kKGQpKX1jYXRjaChuKXtkPS0xfXJldHVybiBpc05hTihkKT8tMTpkfSx5ZzpmdW5jdGlvbihhKXthPU1hdGgucm91bmQoYSk7dmFyIGI9Ii0tOi0tIjswPD1hJiYoYT1NYXRoLmZsb29yKGEpLGI9TWF0aC5mbG9vcihhLzYwKSxiPXRoaXMuVmgoYikrIjoiK3RoaXMuVmgoTWF0aC5mbG9vcihhLTYwKmIpKSk7cmV0dXJuIGJ9LFZoOmZ1bmN0aW9uKGEpe3JldHVybiAxMD5hPyIwIithLnRvU3RyaW5nKCk6YS50b1N0cmluZygpfSxlZjpmdW5jdGlvbihhKXt0aGlzLlNhPWF9LHZnOmZ1bmN0aW9uKGEsYixkKXt2YXIgZjtkLnN0YXRlPXRoaXMuU2E7dGhpcy5XZihkKTsiZnVuY3Rpb24iPT09dHlwZW9mIHdpbmRvdy5DdXN0b21FdmVudD9mPW5ldyBDdXN0b21FdmVudChiLHtkZXRhaWw6ZH0pOihmPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpLGYuaW5pdEN1c3RvbUV2ZW50KGIsITEsITEsZCkpOwphLmRpc3BhdGNoRXZlbnQoZil9LHdjOmZ1bmN0aW9uKGEsYixkKXtifHwoYj0iaGRFdmVudCIpO2R8fChkPXdpbmRvdyk7dGhpcy52ZyhkLGIsYSl9LHY6ZnVuY3Rpb24oYSxiLGQsZixuLGMsZyl7dmFyIEE9YTtkJiZiJiYoYj1rLlhhKGIsZCkpO2ImJihBPWsuWGEoYSxiKSk7ZiYmKEE9ay5YYShBLGYpKTtuJiYoQT1rLlhhKEEsbikpO2MmJihBPWsuWGEoQSxjKSk7ZyYmKEE9ay5YYShBLGMpKTtlLndjKEEpfSwkczpmdW5jdGlvbihhKXt2YXIgYj17fTtpZighYS5jb2RlKXJldHVybiExO2lmKGEuc3BlY2lhbF90cmFjayliPWE7ZWxzZSBpZighKGEuY29kZSYmMTAwNTw9YS5jb2RlJiYxMDI5Pj1hLmNvZGUpfHwxMDIzPT1hLmNvZGV8fDEwMTg9PWEuY29kZSlyZXR1cm47dHJ5e2phJiYoYi5zZXNzaW9uX2lkPWphKTtiLmFkc2Vzc2lvbl9pZD1hLmFkc2Vzc2lvbl9pZD9hLmFkc2Vzc2lvbl9pZDoiZXBvbiI7YS5ob21hZEltcHJlc3Npb25BZElkJiYoYi5hZF9pZD1hLmhvbWFkSW1wcmVzc2lvbkFkSWQpOwpiLmV2ZW50PWEuY29kZTtiLnNpdGVfaHJlZj10aGlzLnFxKCk7aWYoYS5zdGF0ZSlzd2l0Y2goYS5zdGF0ZSl7Y2FzZSAicHJlcm9sbCI6Yi5wb3NpdGlvbj0xO2JyZWFrO2Nhc2UgIm1pZHJvbGwiOmIucG9zaXRpb249MjticmVhaztjYXNlICJwb3N0cm9sbCI6Yi5wb3NpdGlvbj0zO2JyZWFrO2RlZmF1bHQ6Yi5wb3NpdGlvbj0wfWEudmlkZW9fZHVyYXRpb24mJihiLnZpZGVvX2R1cmF0aW9uPWEudmlkZW9fZHVyYXRpb24pfWNhdGNoKGQpe31yZXR1cm4gYn0sV2Y6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy4kcyhhKTtpZihiKWlmKCFsfHwhbC5YKXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5XZihiKX0uYmluZCh0aGlzKSw1MDApO2Vsc2UgaWYobC5pc0VuYWJsZWQpe2lmKCJvYmplY3QiPT10eXBlb2YgYil0cnl7Yj1KU09OLnN0cmluZ2lmeShiKX1jYXRjaChkKXtiPWIudG9TdHJpbmc/Yi50b1N0cmluZygpOiIifWImJmIudHJpbSYmKGI9Yi50cmltKCkpO2E9bC5EZCgpOwpsLnphKGEsITApO2E9bC56YShhLCEwKTthLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0iIjthLmRhdGEuaG9tYWRfYXQ9YjtsLkxhKGEsZnVuY3Rpb24oKXt9KX19LHRyYWNrOmZ1bmN0aW9uKGEsYixkKXtpZihkKWlmKCFsfHwhbC5YKXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50cmFjayhhLGIsZCl9LmJpbmQodGhpcyksNTAwKTtlbHNlIGlmKGwuaXNFbmFibGVkKXthJiZhLnRyaW0mJihhPWEudHJpbSgpKTtiJiZiLnRyaW0mJihiPWIudHJpbSgpKTt2YXIgZj1hK2I7dGhpcy5NY3x8KHRoaXMuTWM9e30pO3RoaXMuTWNbZl18fCh0aGlzLk1jW2ZdPTApO3RoaXMuTWNbZl0rKzsxMDx0aGlzLk1jW2ZdfHwoZj1sLkRkKCkrIj9ob21hZF90cmFja19rZXk9IitlbmNvZGVVUklDb21wb25lbnQoYSkrIiZob21hZF90cmFja192YWx1ZT0iK2VuY29kZVVSSUNvbXBvbmVudChiKSxsLnphKGYsITApLGY9bC56YShmLCEwKSxmLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0KIiIsZi5kYXRhLmhvbWFkX3RyYWNrX2tleT0iKiIrZW5jb2RlVVJJQ29tcG9uZW50KGEpKyIqIixmLmRhdGEuaG9tYWRfdHJhY2tfdmFsdWU9IioiK2VuY29kZVVSSUNvbXBvbmVudChiKSsiKiIsbC5MYShmLGZ1bmN0aW9uKGQpe3ZhciBmPSExO2Q9ZC5yZXNwb25zZVRleHQ7dHJ5e2Q9SlNPTi5wYXJzZShkKSxkPWQuZGF0YSxkWzBdPT1lbmNvZGVVUklDb21wb25lbnQoYSkmJihmPSEwKSxkWzFdJiZkWzFdIT1lbmNvZGVVUklDb21wb25lbnQoYikmJihmPSExKX1jYXRjaChjKXt9Znx8dGhpcy50cmFjaygic3RhdHNfaGRfdHJhY2tjaGVjayIsKGRbMF0/ZFswXToiIikrKGRbMV0/ZFsxXToiIiksITApfS5iaW5kKHRoaXMpKSl9fSxKZTpmdW5jdGlvbigpe2wmJmwuWD9sLmlzRW5hYmxlZCYmbC5xbygpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5KZSgpfS5iaW5kKHRoaXMpLDUwMCl9LHJlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEmJiJvYmplY3QiPT10eXBlb2YgYSYmCmEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYikubGVuZ3RoP3RoaXMuaWIoYS5nZXRFbGVtZW50c0J5VGFnTmFtZShiKVswXSk6IiJ9LHVlOmZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLmNoaWxkTm9kZXMmJmEuY2hpbGROb2Rlc1swXT9hLmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlOiIifSxpYjpmdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLnFkKGEpOiIifSxxZDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnVlKGEpO2ImJihiPWIudHJpbSgpKTshYiYmYS50ZXh0Q29udGVudCYmKGI9YS50ZXh0Q29udGVudCxiPWIudHJpbSgpKTtyZXR1cm4gYn0sJGY6ZnVuY3Rpb24oYSxiLGQsZil7ZD0hMTtpZihiLkVlKGEpfHx0aGlzLnByKGEpfHwwPD1hLmluZGV4T2YoImRhdGE6aW1hZ2UiKSlyZXR1cm4gYTt3aW5kb3cuc2FuZGJveCYmd2luZG93LnNhbmRib3guYmYmJndpbmRvdy5zYW5kYm94LmJmWyJTdHJpbmcucHJvdG90eXBlLmluZGV4T2YiXSYmKDA8PXNhbmRib3guYmZbIlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiJdLmJpbmQoYSkoImVycm9yIil8fApzYW5kYm94LmJmWyJTdHJpbmcucHJvdG90eXBlLmluZGV4T2YiXS5iaW5kKGEpKCJFcnJvciIpKTtpZih0aGlzLnRnKGEpKXJldHVybiB0aGlzLnRnKGEpO3ZhciBuPXtob21hZF91cmxfcHJlZml4X2FsaWFzOiJ2cGFpZCJ9O24uaG9tYWRfdXJsX3N1ZmZpeD1hO24uaG9tYWRfdXJsX3N1ZmZpeF9iYXNlNjQ9dGhpcy52YihhKTtuLmhvbWFkX3JldHVybl9vbmx5X3VybF9hbmRfaGFzaD0idHJ1ZSI7bi5ob21hZF9oYXNoX2d1ZXNzZWQ9InRydWUiO2YmJmYucG9zdCYmKG5bIlgtSG9tYWQtUG9zdCJdPSJ0cnVlIik7ZCYmKG4uaG9tYWRfaW50cm9zcGVjdD0iaWZyYW1lIik7bi5ob21hZF92cGFpZF9jb21wYXRpYmxlPSJ0cnVlIjtuLmhvbWFkX3ZwYWlkX2N0eD0idHJ1ZSI7ZiYmZi5vbmx5VVJMJiYobi5ob21hZF9yZXBsYWNlX3VybHNfaW5fdGFncz0iTWVkaWFGaWxlIik7dmFyIGM9ITE7ZD0hMTtkPXRoaXMuWWEoYSxiLkphLG4sZnVuY3Rpb24oYSl7Yz1hLnJlc3BvbnNlVGV4dH0sCmZ1bmN0aW9uKCl7fSxiLCEwKTt0cnl7Y3x8KGM9ZCksYz1KU09OLnBhcnNlKGMpfWNhdGNoKGUpe2M9ITF9Yy51cmwmJmMuaGFzaCYmKGM9Yi51ZCgpLnJlcGxhY2UoIltoYXNoXSIsYy5oYXNoKSk7dGhpcy5nbihjLGEpO3JldHVybiBjfSxZYTpmdW5jdGlvbihhLGIsZCxmLG4sYyxlLGcpe3ZhciBrPWN8fGw7Yz0hMDtnJiYoYz0hMSk7aWYoayYmay5YKWlmKGsuaXNFbmFibGVkKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSl0cnl7YT1hKCl9Y2F0Y2gobSl7bihtKX1pZigic3RyaW5nIiE9dHlwZW9mIGEpbigpO2Vsc2V7ay56YShhLGMpO2M9ay56YShhLGMpO2MuZGF0YS5ob21hZF91cmxfcHJlZml4X2FsaWFzPWI7Yy5kYXRhLmhvbWFkX2hhc2hfZ3Vlc3NlZD0idHJ1ZSI7Zm9yKHZhciByIGluIGQpYy5kYXRhW3JdPWRbcl07cmV0dXJuIGsuTGEoYyxmLG4sIiIsIiIsZSl9fWVsc2UgbigpO2Vsc2Ugd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLllhKGEsYixkLGYsbiwKayxlLGcpfS5iaW5kKHRoaXMpLDUwMCl9LGVoOmZ1bmN0aW9uKGEsYixkLGYsYyxlLGcpe3ZhciBrPSEwO2cmJihrPSExKTtpZigic3RyaW5nIiE9dHlwZW9mIGQpe2c9ZDtkPSIiO2Zvcih2YXIgbSBpbiBnKWQrPSImIittKyI9IitlbmNvZGVVUklDb21wb25lbnQoZ1ttXSk7ZD1kLnN1YnN0cigxKX12YXIgbD1uZXcgWE1MSHR0cFJlcXVlc3Q7bC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshZnx8NCE9bC5yZWFkeVN0YXRlfHwyMDAhPWwuc3RhdHVzJiYyMDEhPWwuc3RhdHVzfHxmKGwpO2MmJjQ9PWwucmVhZHlTdGF0ZSYmMjAwIT1sLnN0YXR1cyYmMjAxIT1sLnN0YXR1cyYmYyhsKX07dHJ5e2wub3BlbihiLGEsayksbC53aXRoQ3JlZGVudGlhbHM9ZSwwPGQubGVuZ3RoJiZsLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpLGwuc2VuZChkKX1jYXRjaChyKXtjJiZjKCl9cmV0dXJuIGx9LEtyOmZ1bmN0aW9uKGEsCmIsZCl7dGhpcy5laChhLCJHRVQiLCIiLGZ1bmN0aW9uKGEpe2E9YS5yZXNwb25zZVRleHQ7aWYodGhpcy5LYylmb3IodmFyIGMgaW4gdGhpcy5LYylhPWEuc3BsaXQoYykuam9pbih0aGlzLktjW2NdKTtjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2MudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtjLnNyYz0iZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIrZS52YihhKTtkJiYoYy5vbmVycm9yPWQpO2RvY3VtZW50LmhlYWQuZmlyc3RDaGlsZD9kb2N1bWVudC5oZWFkLmluc2VydEJlZm9yZShjLGRvY3VtZW50LmhlYWQuZmlyc3RDaGlsZCk6ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChjKTtiJiZzZXRUaW1lb3V0KGIsMCl9LmJpbmQodGhpcyksZCl9LGZoOmZ1bmN0aW9uKGEsYixkLGYpe3ZhciBjPXtob21hZF91cmxfcHJlZml4X2FsaWFzOiJ2cGFpZCJ9O2MuaG9tYWRfdXJsX3N1ZmZpeD1hO2MuaG9tYWRfdXJsX3N1ZmZpeF9iYXNlNjQ9dGhpcy52YihhKTtjLmhvbWFkX3JldHVybl9vbmx5X3VybF9hbmRfaGFzaD0KInRydWUiO2MuaG9tYWRfaGFzaF9ndWVzc2VkPSJ0cnVlIjt0aGlzLllhKGEsZi5KYSxjLGZ1bmN0aW9uKGEpe2E9YS5yZXNwb25zZVRleHQ7dHJ5e2E9SlNPTi5wYXJzZShhKX1jYXRjaChjKXthPSExfXRoaXMuS3IoZi51ZCgpLnJlcGxhY2UoIltoYXNoXSIsYS5oYXNoKSxiLGQpfS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7fSxmLCEwKX0sSHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuS2M9YX0sRXY6ZnVuY3Rpb24oYSxiLGQsZixjKXt0aGlzLllhKGEsZCx7fSxmdW5jdGlvbihhKXt0cnl7dmFyIGQ9SlNPTi5wYXJzZShhLnJlc3BvbnNlVGV4dCk7ZFswXSYmKGQ9ZFswXSk7ZD9kLmlkPyhiPWIucmVwbGFjZSgiW2lkXSIsZC5pZCksYj1iLnJlcGxhY2UoIltwcmljZV0iLGQucHJpY2UpLGI9Yi5yZXBsYWNlKCJbYWR2ZXJ0aXNlcl0iLGQuYWR2ZXJ0aXNlciksYj1iLnJlcGxhY2UoIltjdXJsXSIsZC5jdXJsKSxiPWIucmVwbGFjZSgiW2Zvcm1hdF0iLGQuZm9ybWF0KSxiPWIucmVwbGFjZSgiW3NyY10iLApkLnNyYyksYj1iLnJlcGxhY2UoIltwcmljZXJhbmdlXSIsZC5wcmljZXJhbmdlKSxiPWIucmVwbGFjZSgiW3BpZF0iLGQucGlkKSxiPWIucmVwbGFjZSgiW3ByaW9dIixkLnByaW8pLGI9Yi5yZXBsYWNlKCJbZGlkXSIsZC5kaWQpLGMoe3BsYWNlaG9sZGVyOmIsbWFjcm86Zn0pKTpjKHtwbGFjZWhvbGRlcjoiIixtYWNybzpmfSk6Yyh7cGxhY2Vob2xkZXI6IiIsbWFjcm86Zn0pfWNhdGNoKGUpe2Moe3BsYWNlaG9sZGVyOiIiLG1hY3JvOmZ9KX19LGZ1bmN0aW9uKCl7Yyh7cGxhY2Vob2xkZXI6IiIsbWFjcm86Zn0pfSl9LFBuOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0hMTshYjspe3ZhciBkPWEubGFzdEluZGV4T2YoIkVOQ09ERSgiKTswPmQ/Yj0hMDooZD1hLnN1YnN0cmluZyhkKzcsYS5pbmRleE9mKCIpIixkKSksYT1hLnJlcGxhY2UoIkVOQ09ERSgiK2QrIikiLGVuY29kZVVSSUNvbXBvbmVudChkKSkpfXJldHVybiBhfSxrcjpmdW5jdGlvbihhLGIpe3ZhciBkPSExO2lmKGIpZm9yKHZhciBmPQowO2Y8Yi5sZW5ndGg7ZisrKWlmKGJbZl09PWEpe2Q9ITA7YnJlYWt9cmV0dXJuIGR9fX0pKGMpO3ZhciBSPWMuJGp8fFI7bmV3IFI7dmFyIGU9bmV3IFI7KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoYSl7dGhpcy5kYXRhPWF8fHt9fWMuWmo9YjtiLlhhPWZ1bmN0aW9uKGEsYil7dmFyIGQ9e30sZjtmb3IoZiBpbiBiKWRbZl09YltmXTtmb3IoZiBpbiBhKWRbZl09YVtmXTtyZXR1cm4gZH07Yi5Rcz17Y29kZToiMTAwMCIsdHlwZToicGVuYWx0eSIsbWVzc2FnZToiIixuYW1lOiJwZW5hbHR5In07Yi5kcz17Y29kZToiMTAwMSIsdHlwZToibWVkaWFlcnJvciIsbWVzc2FnZToiIixuYW1lOiJhZEVycm9yIn07Yi5udj17Y29kZToiMTAwMiIsdHlwZToidnBhaWQiLG1lc3NhZ2U6IiIsbmFtZToidnBhaWQifTtiLnlwPXtjb2RlOiIxMDAzIix0eXBlOiJlbXB0eVZhc3QiLG1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IueHY9e2NvZGU6IjEwMDQiLHR5cGU6Im1hbGZvcm1hdHRlZFhNTCIsCm1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IuVWY9e2NvZGU6IjEwMDUiLHR5cGU6ImFkU3RhcnQiLG1lc3NhZ2U6IiIsbmFtZToiYWRTdGFydCJ9O2IuTmY9e2NvZGU6IjEwMDYiLHR5cGU6ImFkRmlyc3RRdWFydGlsZSIsbWVzc2FnZToiIixuYW1lOiJhZEZpcnN0UXVhcnRpbGUifTtiLlJmPXtjb2RlOiIxMDA3Iix0eXBlOiJhZE1pZFBvaW50IixtZXNzYWdlOiIiLG5hbWU6ImFkTWlkUG9pbnQifTtiLlZmPXtjb2RlOiIxMDA4Iix0eXBlOiJhZFRoaXJkUXVhcnRpbGUiLG1lc3NhZ2U6IiIsbmFtZToiYWRUaGlyZFF1YXJ0aWxlIn07Yi4kbT17Y29kZToiMTAwOSIsdHlwZToiYWRDb21wbGV0ZSIsbWVzc2FnZToiIixuYW1lOiJhZENvbXBsZXRlIn07Yi5QZj17Y29kZToiMTAxMCIsdHlwZToiYWRJbXByZXNzaW9uc0NhbGxlZCIsbWVzc2FnZToiIixuYW1lOiJhZEltcHJlc3Npb24ifTtiLlV1PXtjb2RlOiIxMDExIix0eXBlOiJ2YXN0TG9hZGluZ0ZhaWxlZCIsbWVzc2FnZToiIiwKbmFtZToiYWRFcnJvciJ9O2IuY3M9e2NvZGU6IjEwMTIiLHR5cGU6Im5vQ3JlYXRpdmUiLG1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IuenA9e2NvZGU6IjEwMTMiLHR5cGU6ImVtcHR5VmFzdEZyb21Ib21hZFNlcnZlckV2ZW50IixtZXNzYWdlOiIiLG5hbWU6ImFkRXJyb3IifTtiLnV2PXtjb2RlOiIxMDE0Iix0eXBlOiJ3cmFwcGVyTGltaXRSZWFjaGVkIixtZXNzYWdlOiIiLG5hbWU6ImFkRXJyb3IifTtiLmlnPXtjb2RlOiIxMDE1Iix0eXBlOiJjbGlja3Rocm91Z2giLG1lc3NhZ2U6IiIsbmFtZToiYWRDbGljayJ9O2IuUG89e2NvZGU6IjEwMTYiLHR5cGU6ImNvbnRpbnVlQ29udGVudCIsbWVzc2FnZToiIixuYW1lOiJjb250aW51ZUNvbnRlbnQifTtiLmdkPXtjb2RlOiIxMDE3Iix0eXBlOiJjb250ZW50UGxheWVyUGxheSIsbWVzc2FnZToiIixuYW1lOiJjb250ZW50UGxheWVyUGxheSJ9O2IuZmQ9e2NvZGU6IjEwMTgiLHR5cGU6ImNvbnRlbnRQbGF5ZXJQYXVzZSIsbWVzc2FnZToiIiwKbmFtZToiY29udGVudFBsYXllclBhdXNlIn07Yi5UZj17Y29kZToiMTAxOSIsdHlwZToiYWRTa2lwcGVkIixtZXNzYWdlOiIiLG5hbWU6ImFkU2tpcHBlZCJ9O2IuYm49e2NvZGU6IjEwMjAiLHR5cGU6ImFkUmVxdWVzdCIsbWVzc2FnZToiIixuYW1lOiJhZFJlcXVlc3QifTtiLlVjPXtjb2RlOiIxMDIxIix0eXBlOiJhZFBsYXkiLG1lc3NhZ2U6IiIsbmFtZToiYWRQbGF5In07Yi5ZZD17Y29kZToiMTAyMiIsdHlwZToiYWRQYXVzZSIsbWVzc2FnZToiIixuYW1lOiJhZFBhdXNlIn07Yi4kZD17Y29kZToiMTAyMyIsdHlwZToiYWRUaW1lIixtZXNzYWdlOiIiLG5hbWU6ImFkVGltZSJ9O2IuYW49e2NvZGU6IjEwMjQiLHR5cGU6ImFkTWV0YSIsbWVzc2FnZToiIixuYW1lOiJhZE1ldGEifTtiLmJpPXtjb2RlOiIxMDI1Iix0eXBlOiJ2aWV3YWJsZSIsbWVzc2FnZToiIixuYW1lOiJ2aWV3YWJsZSJ9O2IuZnM9e2NvZGU6IjEwMjYiLHR5cGU6Im5vdFZpZXdhYmxlIixtZXNzYWdlOiIiLG5hbWU6Im5vdFZpZXdhYmxlIn07CmIueGQ9e2NvZGU6IjEwMjciLHR5cGU6Im11dGUiLG1lc3NhZ2U6IiIsbmFtZToibXV0ZSJ9O2IudGY9e2NvZGU6IjEwMjgiLHR5cGU6InVubXV0ZSIsbWVzc2FnZToiIixuYW1lOiJ1bm11dGUifTtiLmpnPXtjb2RlOiIxMDI5Iix0eXBlOiJjb250ZW50UGxheWVyTXV0ZWQiLG1lc3NhZ2U6IiIsbmFtZToiY29udGVudFBsYXllck11dGVkIn07Yi5tdj17Y29kZToiMTAzMCIsdHlwZToidnBhaWRlcnJvciIsbWVzc2FnZToiIixuYW1lOiJhZEVycm9yIn07Yi5SdT17Y29kZToiOTAwMSIsdHlwZToidmFyaWFibGVEZWxldGVkRXZlbnQiLG1lc3NhZ2U6IiIsbmFtZToidmFyaWFibGVEZWxldGVkRXZlbnQifTtiLmVzPXtjb2RlOiI5MDAyIix0eXBlOiJub1ZhcmlhYmxlU2V0dGluZ0V2ZW50IixtZXNzYWdlOiIiLG5hbWU6Im5vVmFyaWFibGVTZXR0aW5nRXZlbnQifTtiLnByb3RvdHlwZT17Z2V0RXJyb3JDb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3JDb2RlfX19KShjKTt2YXIgaz0KYy5aanx8aztjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5odT10aGlzLmFbMl07dGhpcy5Iaz10aGlzLmFbMV07dGhpcy5LdT10aGlzLmFbOF07dGhpcy5QcD10aGlzLmFbN107dGhpcy5FaT10aGlzLmFbNF07dGhpcy5Gaj10aGlzLmFbMV07dGhpcy52dT10aGlzLmFbNF07dGhpcy5vbD10aGlzLmFbNV07dGhpcy5Mbz10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs2XX1jLkFsPWI7Yi5wcm90b3R5cGU9e2d1OmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5odTp0aGlzLkdrKGEpfSxHazpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuSGs6dGhpcy5KdShhKX0sSnU6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLkt1OnRoaXMuT3AoYSl9LE9wOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5QcDp0aGlzLkRpKGEpfSxEaTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuRWk6CnRoaXMuRWooYSl9LEVqOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5Gajp0aGlzLnV1KGEpfSx1dTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMudnU6dGhpcy5ubChhKX0sbmw6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLm9sOnRoaXMuS28oYSl9LEtvOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5Mbzp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmo6YX19fSkoYyk7dmFyIGthPWMuQWx8fGthLG1jPW5ldyBrYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPW1jLmd1KDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7fWMuYWs9YjtiLnByb3RvdHlwZT17dmU6ZnVuY3Rpb24oYSl7dmFyIGI9MCxkLGYsYztpZigwPT1hLmxlbmd0aClyZXR1cm4gYjtkPTA7Zm9yKGM9YS5sZW5ndGg7ZDxjO2QrKylmPWEuY2hhckNvZGVBdChkKSwKYj0oYjw8NSktYitmLGJ8PTA7cmV0dXJuIE1hdGguYWJzKGIpfSxqYTpmdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKERhdGUubm93KCkvMUUzLzM2MDAvMjQpK25hdmlnYXRvci5hcHBDb2RlTmFtZStuYXZpZ2F0b3IuYXBwTmFtZStuYXZpZ2F0b3IuYXBwVmVyc2lvbituYXZpZ2F0b3IudXNlckFnZW50K25hdmlnYXRvci5wbGF0Zm9ybSsobmF2aWdhdG9yLmxhbmd1YWdlfHxuYXZpZ2F0b3IuRHx8IngiKX0sa3E6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yb3VuZChEYXRlLm5vdygpLzFFMy8zNjAwKStuYXZpZ2F0b3IuYXBwQ29kZU5hbWUrbmF2aWdhdG9yLmFwcE5hbWUrbmF2aWdhdG9yLmFwcFZlcnNpb24rbmF2aWdhdG9yLnVzZXJBZ2VudCtuYXZpZ2F0b3IucGxhdGZvcm0rKG5hdmlnYXRvci5sYW5ndWFnZXx8bmF2aWdhdG9yLkR8fCJ4IikrKG5ldyBEYXRlKS50b1RpbWVTdHJpbmcoKS5zdWJzdHIoLTEyKX0sb2Q6ZnVuY3Rpb24oYSl7YT1wYXJzZUludChhKTtpZig2NTw9CmEmJjkwPj1hfHw5Nzw9YSYmMTIyPj1hKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGEpO2lmKDA+PWEpcmV0dXJuIiI7aWYoNjU+YSlyZXR1cm4gdGhpcy5vZChhKzY1KTtpZig5MDxhKXJldHVybiB0aGlzLm9kKE1hdGgucm91bmQoYS8yKSl9LHJldmVyc2U6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGQ9YS5sZW5ndGgtMSxiPSIiOzA8PWQ7Yis9YVtkLS1dKTtyZXR1cm4gYn0saWE6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy52ZSh0aGlzLmphKCkrIiIpLGE9KGErIiIrdGhpcy5yZXZlcnNlKGErIiIpKS5tYXRjaCgvLnsxLDJ9L2cpLGI9IiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWIrPXRoaXMub2QoYVtkXSk7MD09Yi5sZW5ndGgmJihiPSJ6b3JrIik7cmV0dXJuIGJ9LGZyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWEoKSsiMiJ9LFRnOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMudmUodGhpcy5rcSgpKyIiKSxhPShhKyIiK3RoaXMucmV2ZXJzZShhKyIiKSkubWF0Y2goLy57MSwyfS9nKSwKYj0iIixkPTA7ZDxhLmxlbmd0aDtkKyspYis9dGhpcy5vZChhW2RdKTswPT1iLmxlbmd0aCYmKGI9InpvcmsiKTtyZXR1cm4gYn19fSkoYyk7dmFyIEo9Yy5ha3x8SjtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5kbT10aGlzLmFbOV07dGhpcy5xdj10aGlzLmFbMl07dGhpcy5tbz10aGlzLmFbMV07dGhpcy5QdT10aGlzLmFbNl07dGhpcy5DaT10aGlzLmFbNl07dGhpcy5xbj10aGlzLmFbN107dGhpcy53az10aGlzLmFbM107dGhpcy5qPXRoaXMuYVszXX1jLlNvPWI7Yi5wcm90b3R5cGU9e2NtOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5kbTp0aGlzLnB2KGEpfSxwdjpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMucXY6dGhpcy5sbyhhKX0sbG86ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLm1vOnRoaXMuT3UoYSl9LE91OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhPwp0aGlzLlB1OnRoaXMuQmkoYSl9LEJpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5DaTp0aGlzLnBuKGEpfSxwbjpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMucW46dGhpcy52ayhhKX0sdms6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLndrOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuajphfX19KShjKTt2YXIgbGE9Yy5Tb3x8bGEsbmM9bmV3IGxhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9bmMuY20oNCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe312YXIgYT0veHl6Ly50ZXN0KGZ1bmN0aW9uKCl7eHl6fSk/L1xiX3N1cGVyXGIvOi8uKi87Yi5leHRlbmQ9ZnVuY3Rpb24oaCl7dmFyIGQ9dGhpcy5wcm90b3R5cGUsZj1PYmplY3QuY3JlYXRlKGQpLGM7Zm9yKGMgaW4gaClmW2NdPSJmdW5jdGlvbiI9PT0KdHlwZW9mIGhbY10mJiJmdW5jdGlvbiI9PXR5cGVvZiBkW2NdJiZhLnRlc3QoaFtjXSk/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD10aGlzLm07dGhpcy5tPWRbYV07dmFyIGY9Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5tPWg7cmV0dXJuIGZ9fShjLGhbY10pOmhbY107aD0iZnVuY3Rpb24iPT09dHlwZW9mIGYubD9mLmhhc093blByb3BlcnR5KCJpbml0Iik/Zi5sOmZ1bmN0aW9uKCl7ZC5sLmFwcGx5KHRoaXMsYXJndW1lbnRzKX06ZnVuY3Rpb24oKXt9O2gucHJvdG90eXBlPWY7Zi5jb25zdHJ1Y3Rvcj1oO2guZXh0ZW5kPWIuZXh0ZW5kO3JldHVybiBofTtjLmlqPWJ9KShjKTt2YXIgTT1jLmlqfHxNO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnVzPXRoaXMuYVs4XTt0aGlzLkFvPXRoaXMuYVsyXTt0aGlzLmlpPXRoaXMuYVs3XTt0aGlzLkJuPQp0aGlzLmFbNV07dGhpcy5UdD10aGlzLmFbOV07dGhpcy5zcz10aGlzLmFbNV07dGhpcy5XdT10aGlzLmFbOF07dGhpcy5qPXRoaXMuYVsxXX1jLlNrPWI7Yi5wcm90b3R5cGU9e3RzOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy51czp0aGlzLnpvKGEpfSx6bzpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuQW86dGhpcy5oaShhKX0saGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5paTp0aGlzLkFuKGEpfSxBbjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuQm46dGhpcy5TdChhKX0sU3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlR0OnRoaXMucnMoYSl9LHJzOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5zczp0aGlzLlZ1KGEpfSxWdTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuV3U6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBtYT1jLlNrfHxtYSxvYz1uZXcgbWEoMSxuZXcgRGF0ZSwKMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9b2MudHMoNCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7Yy5zbD1NLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLk1hPXt9O3RoaXMuSz1udWxsO3RoaXMuR2M9MTAwO3RoaXMuRmI9MDt0aGlzLlVhPTE1MDt0aGlzLkhiPTA7dGhpcy5DdChiKX0sZzpmdW5jdGlvbigpe30sUjpmdW5jdGlvbigpe3RoaXMuRmI8PXRoaXMuVWE/KHRoaXMuRmIrKyx0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuZy5iaW5kKHRoaXMpLHRoaXMuR2MpKTowPnRoaXMuVWEmJih0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuZy5iaW5kKHRoaXMpLHRoaXMuR2MpKX0sb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GYj50aGlzLlVhPyEwOiExfSxhZjpmdW5jdGlvbigpe3RoaXMuRmI9MH0sTzpmdW5jdGlvbigpe3JldHVybiJlbXB0eSJ9LEN0OmZ1bmN0aW9uKGIpe3RoaXMuSz0KYn0saXE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LfSxQOmZ1bmN0aW9uKGIpe2UudHJhY2soInN0YXRzX3BsYXllciIsYi5PKCksITApO3RoaXMuTWFbYi5qYSgpXT1iO04mJk4uYWgmJk4uYXUoYil9LCR2OmZ1bmN0aW9uKCl7cmV0dXJuIGUudGUodGhpcy5NYSl9LE46ZnVuY3Rpb24oYil7dmFyIGE9Yi52aWRlb1RhZyxoO2ZvcihoIGluIHRoaXMuTWEpaWYoYT09dGhpcy5NYVtoXS52aWRlb1RhZylyZXR1cm4hMDtyZXR1cm4gdGhpcy5NYVtiLmphKCldPyEwOiExfSxscjpmdW5jdGlvbihiKXtiPWIuSWEoKTtmb3IodmFyIGEgaW4gdGhpcy5NYSlpZihiLmlkPT10aGlzLk1hW2FdLklhKCkuaWQpcmV0dXJuITA7cmV0dXJuITF9LHB3OmZ1bmN0aW9uKGIpe3RoaXMuTWFbYi5pZF09bnVsbH19KX0pKGMpO3ZhciBxPWMuc2x8fHE7KGZ1bmN0aW9uKGMpe2MudWw9TS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy52aWRlb1RhZz10aGlzLmNvbnRhaW5lcj10aGlzLmlkPW51bGw7dGhpcy5HYz0KMTA7dGhpcy5GYj0wO3RoaXMuVWE9NTA7dGhpcy5WPW51bGw7dGhpcy5xYT0hMTt0aGlzLnBsYXllcj1iO3RoaXMuemI9IiI7dGhpcy5uZz0hMTt0aGlzLlMoKX0sTzpmdW5jdGlvbigpe3JldHVybiJlbXB0eSJ9LHU6ZnVuY3Rpb24oKXt2YXIgYj17fSxhPXRoaXMudmlkZW9UYWcsaD10aGlzLklhKCksZD10aGlzLmdldFJhd1BsYXllcigpO2lmKGIudmlkZW9UYWc9YSliLnZpZGVvVGFnSWQ9YS5pZDtpZihiLmNvbnRhaW5lcj1oKWIuY29udGFpbmVySWQ9aC5pZDtkJiYoYi5wbGF5ZXI9ZCk7cmV0dXJuIGJ9LFM6ZnVuY3Rpb24oKXt9LE5hOmZ1bmN0aW9uKCl7fSxLdDpmdW5jdGlvbihiKXt0aGlzLlY9Yn0sYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5WfSxGdDpmdW5jdGlvbihiKXt0aGlzLk1lPWJ9LFp2OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTWV9LExlOmZ1bmN0aW9uKCl7fSxSOmZ1bmN0aW9uKCl7dGhpcy5GYjw9dGhpcy5VYSYmKHRoaXMuRmIrKyx3aW5kb3cuc2V0VGltZW91dCh0aGlzLlMuYmluZCh0aGlzKSwKdGhpcy5HYykpfSxpc0Z1bGxzY3JlZW46ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0cnl7aWYoZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4pZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKVsiY2F0Y2giXShmdW5jdGlvbigpe30pO2Vsc2UgaWYoZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4pZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4oKTtlbHNlIGlmKGRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4pZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpO2Vsc2UgaWYoZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbilkb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuKCk7ZWxzZSByZXR1cm4hMX1jYXRjaChiKXt9fSxCZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLklhKCl9LHBhdXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGxheWVyLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXIucGxheSgpfSxqYTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfSwKRmQ6ZnVuY3Rpb24oYil7dGhpcy5pZD1ifSxydzpmdW5jdGlvbigpe30sWjpmdW5jdGlvbihiKXtpZighYilyZXR1cm4hMTt0aGlzLnZpZGVvVGFnPWI7dGhpcy5GcSgpfHx0aGlzLmNuKCk7dGhpcy5GZCh0aGlzLnZpZGVvVGFnLmdldEF0dHJpYnV0ZSgiaWQiKSl9LGJ3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW9UYWd9LGNuOmZ1bmN0aW9uKCl7dGhpcy52aWRlb1RhZy5zZXRBdHRyaWJ1dGUoImlkIixlLmJhKDEwKSl9LEZxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW9UYWcuZ2V0QXR0cmlidXRlKCJpZCIpPyEwOiExfSxZOmZ1bmN0aW9uKGIpe3RoaXMuY29udGFpbmVyPWJ9LElhOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLmNvbnRhaW5lcj90aGlzLmNvbnRhaW5lcigpOnRoaXMuY29udGFpbmVyfSxnZXRSYXdQbGF5ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXJ9LEFlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LGlzUGxheWluZzpmdW5jdGlvbigpe3JldHVybiEwfSwKZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnO3JldHVybiBiJiZiLmN1cnJlbnRUaW1lP2IuY3VycmVudFRpbWU6MH0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnO3JldHVybiBiJiZiLmR1cmF0aW9uP2IuZHVyYXRpb246MH0sVmE6ZnVuY3Rpb24oKXtyZXR1cm4hMX0saXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xYX0scGE6ZnVuY3Rpb24oKXt0aGlzLnFhPSEwfSxIYzpmdW5jdGlvbigpe3ZhciBiPW07cmV0dXJuIGImJmIucnVuSW5zaWRlQ29udGFpbmVyPyEwOiExfSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGImJmIubXV0ZWQ/Yi5tdXRlZDohMX0sR2U6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sQ2g6ZnVuY3Rpb24oYil7dGhpcy56Yj1ifSxZdjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnpifSx5aDpmdW5jdGlvbigpe3RoaXMuemI9bnVsbH0sZHc6ZnVuY3Rpb24oKXt2YXIgYj0hMTt0aGlzLnpiJiYKKGI9ITApO3JldHVybiBifSxsdzpmdW5jdGlvbigpe3RoaXMubmd8fCh0aGlzLm5nPSEwKX0scWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sVnY6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPXRoaXMudmlkZW9UYWc7YSYmYS5nZXRBdHRyaWJ1dGUoImlkIikmJihiPWEuZ2V0QXR0cmlidXRlKCJpZCIpKTtyZXR1cm4gYn19KX0pKGMpO3ZhciB1PWMudWx8fHU7KGZ1bmN0aW9uKGMpe2Mubmk9TS5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLks9dGhpcy5wbGF5ZXI9IiI7dGhpcy5KZj0iMSI7dGhpcy5LZj0iMiI7dGhpcy5XbT0iMyI7dGhpcy5QYz0wO3RoaXMuaWg9MzA7dGhpcy5MYj1bXTt0aGlzLmZiPVtdO3RoaXMuaWM9e2V4dGVybmFsOjEsbm9mcmFtZXdvcms6MixhZGVycm9yOjMsY29udGVudHBsYXk6NCxub0Fkc01hbmFnZXI6NSx1bmtub3duOjZ9O3RoaXMuWGY9dGhpcy5ZaD0hMTt0aGlzLnN0YXR1cz10aGlzLlBjO3RoaXMuaWQ9ZS5iYSgxMCk7dGhpcy5mZihiKTt0aGlzLkR0KGEpfSwKZzpmdW5jdGlvbigpe30sdGE6ZnVuY3Rpb24oKXt0aGlzLllofHwodGhpcy5ZaD0hMCxlLkplKCkpfSxQZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuTygpO1MmJlMuVWImJiFuYSYmKG5hPSEwLGUudHJhY2soInBvc3NpYmxlRG91YmxlQWQiLCIxMDRfIitiKSl9LGJyOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKSxhPW5ldyBKO3dpbmRvd1thLmlhKCldfHwod2luZG93W2EuaWEoKV09e30pO3dpbmRvd1thLmlhKCldW2IuamEoKV18fCh3aW5kb3dbYS5pYSgpXVtiLmphKCldPXt9LHdpbmRvd1thLmlhKCldW2IuamEoKV0uaW5pdGlhdG9yPWUuemMoKSk7d2luZG93W2EuaWEoKV1bYi5qYSgpXVtlLnpjKCldP3dpbmRvd1thLmlhKCldW2IuamEoKV1bZS56YygpXSsrOndpbmRvd1thLmlhKCldW2IuamEoKV1bZS56YygpXT0xfSxpcjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCksYT0hMCxoPW5ldyBKO3dpbmRvd1toLmlhKCldJiZ3aW5kb3dbaC5pYSgpXVtiLmphKCldJiYKd2luZG93W2guaWEoKV1bYi5qYSgpXS5pbml0aWF0b3IhPWUuemMoKSYmKHRoaXMuZ2YoKSxhPSExKTtyZXR1cm4gYX0sSTpmdW5jdGlvbihiLGEpe3ZhciBoPSEwO2ImJihoPSExKTtpZighdGhpcy51YSgpKXt0aGlzLmJyKCk7aWYoIXRoaXMuaXIoKSl7ZS50cmFjaygic3RhdHNfaGRfZG91YmxlTWFpbiIsIiIsITApO3RoaXMuZ2YoKTtyZXR1cm59dGhpcy5nZigpO3RoaXMuSyh0aGlzLmdldFBsYXllcigpLGgpO3RoaXMuUmgoKTt0aGlzLlhmPSEwO2EmJiJmdW5jdGlvbiI9PXR5cGVvZiBhJiZhKCk7cmV0dXJuITB9cmV0dXJuITF9LG86ZnVuY3Rpb24oYixhKXt0aGlzLnVhKCl8fCh0aGlzLkxiLnB1c2goYiksdGhpcy5mYi5wdXNoKHtyZWFzb246YixkZXRhaWw6YX0pKX0sUmg6ZnVuY3Rpb24oKXt2YXIgYj0idW5rbm93biIsYT1bXTt0aGlzLkxiJiYwPHRoaXMuTGIubGVuZ3RoJiYodGhpcy5MYj1lLnVuaXF1ZSh0aGlzLkxiKSxlLnRyYWNrKCJhY3RpdmF0ZWRCeSIsdGhpcy5MYi5qb2luKCIsIikpKTsKaWYodGhpcy5mYil7Zm9yKHZhciBoPTA7aDx0aGlzLmZiLmxlbmd0aDtoKyspdGhpcy5pY1t0aGlzLmZiW2hdLnJlYXNvbl09PXRoaXMuaWNbYl0mJmEucHVzaCh0aGlzLmZiW2hdLmRldGFpbCksdGhpcy5pY1t0aGlzLmZiW2hdLnJlYXNvbl08dGhpcy5pY1tiXSYmKGE9W10sYS5wdXNoKHRoaXMuZmJbaF0uZGV0YWlsKSxiPXRoaXMuZmJbaF0ucmVhc29uKTt0aGlzLmljW2JdfHwoYj0idW5rbm93biIsYT1bXSk7MDxhLmxlbmd0aCYmKGg9ZS51bmlxdWUoYSksYj1iKyItIitoLmpvaW4oIi0iKSk7ZS50cmFjaygic3RhdHNfaGRfYWN0aXZhdGVkIixiLCEwLGEpfX0sY3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5YZn0sdzpmdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMuSmZ9LGdmOmZ1bmN0aW9uKCl7dGhpcy5zdGF0dXM9dGhpcy5LZn0sSXQ6ZnVuY3Rpb24oKXt0aGlzLnN0YXR1cz10aGlzLldtfSxyYTpmdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMuUGN9LE9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT0KdGhpcy5KZn0sTXY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0dXM9PXRoaXMuS2Z9LHVhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdHVzIT10aGlzLlBjfSxmZjpmdW5jdGlvbihiKXt0aGlzLnBsYXllcj1ifSxnZXRQbGF5ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXJ9LER0OmZ1bmN0aW9uKGIpe3RoaXMuSz1ifSxpcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLkt9LE5yOmZ1bmN0aW9uKCl7fX0pfSkoYyk7dmFyIHY9Yy5uaXx8djtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5Qcj10aGlzLmFbOV07dGhpcy5CcT10aGlzLmFbNV07dGhpcy50cj10aGlzLmFbMl07dGhpcy5QaT10aGlzLmFbN107dGhpcy5Ubj10aGlzLmFbNl07dGhpcy5VbT10aGlzLmFbNV07dGhpcy5LbD10aGlzLmFbOF07dGhpcy5qPXRoaXMuYVs0XX1jLkVuPWI7Yi5wcm90b3R5cGU9e09yOmZ1bmN0aW9uKGEpe3JldHVybiA5PAphP3RoaXMuUHI6dGhpcy5BcShhKX0sQXE6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkJxOnRoaXMuc3IoYSl9LHNyOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy50cjp0aGlzLk9pKGEpfSxPaTpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuUGk6dGhpcy5TbihhKX0sU246ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLlRuOnRoaXMuVG0oYSl9LFRtOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5VbTp0aGlzLkpsKGEpfSxKbDpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuS2w6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBvYT1jLkVufHxvYSxwYz1uZXcgb2EoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1wYy5Pcig0KTsoZnVuY3Rpb24oYyl7Yy5Paj11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb0NvbnRhaW5lcjt0aGlzLlkoYik7Yj10aGlzLmdldFJhd1BsYXllcigpLnZpZGVvO3RoaXMuWihiKTt0aGlzLmlzUGxheWluZz0hMTtiLmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5pc1BsYXlpbmc9ITB9LmJpbmQodGhpcykpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheSgpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkV4cFBsYXllciJ9fSl9KShjKTt2YXIgcGE9Yy5Panx8cGE7KGZ1bmN0aW9uKGMpe2MuUGo9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCksYT1iLk52O2E/YS5uYT9hLm5hLmFkZEV2ZW50TGlzdGVuZXIoImFkRXJyb3IiLGZ1bmN0aW9uKGEpe3ZhciBiPQohMSxmPSIiO2EuZ2V0RXJyb3ImJihiPWEuZ2V0RXJyb3IoKSk7Ynx8YS5kZXRhaWwuZ2V0RXJyb3ImJihiPWEuZGV0YWlsLmdldEVycm9yKCkpO2IuZ2V0RXJyb3JDb2RlJiYoZis9Yi5nZXRFcnJvckNvZGUoKSk7Yi5nZXRNZXNzYWdlJiYoZis9Yi5nZXRNZXNzYWdlKCkpO2YuaW5kZXhPZiYmKDA8PWYuaW5kZXhPZigiMTAwOSIpfHwwPD1mLmluZGV4T2YoIjMwMyIpfHwwPD1mLmluZGV4T2YoIjQwMyIpKT8odGhpcy53KCksdGhpcy50YSgpKToodGhpcy5vKCJhZGVycm9yIiksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZygpfS5iaW5kKHRoaXMpLDEwMCk6Yi5fYWRDb25maWcuYWRzRGlzYWJsZWR8fCh0aGlzLm8oImZyYW1ld29yayIpLHRoaXMucygpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nP3RoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcyksCjEwKX19KX0pKGMpO3ZhciBxYT1jLlBqfHxxYTsoZnVuY3Rpb24oYyl7Yy5Raj1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZih3aW5kb3cucGxheWVyTWFuYWdlciYmd2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycyYmd2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycygpWzBdKXt2YXIgYj1uZXcgcGEod2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycygpWzBdKTt0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBxYShiLHRoaXMuSykpLmcoKSl9dGhpcy5SKCl9fSl9KShjKTt2YXIgcmE9Yy5Ranx8cmE7KG5ldyByYShyKSkuZygpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnR0PXRoaXMuYVs4XTt0aGlzLmJtPXRoaXMuYVs3XTt0aGlzLkJqPXRoaXMuYVs1XTt0aGlzLmhvPXRoaXMuYVsyXTt0aGlzLmhtPQp0aGlzLmFbMV07dGhpcy5Sbj10aGlzLmFbM107dGhpcy5saj10aGlzLmFbNl07dGhpcy5pcD10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVs3XX1jLkJzPWI7Yi5wcm90b3R5cGU9e3N0OmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy50dDp0aGlzLmFtKGEpfSxhbTpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuYm06dGhpcy5BaihhKX0sQWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkJqOnRoaXMuZm8oYSl9LGZvOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5obzp0aGlzLmdtKGEpfSxnbTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuaG06dGhpcy5RbihhKX0sUW46ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLlJuOnRoaXMua2ooYSl9LGtqOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5sajp0aGlzLmhwKGEpfSxocDpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuaXA6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpOwp2YXIgc2E9Yy5Cc3x8c2EscWM9bmV3IHNhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9cWMuc3QoNCk7KGZ1bmN0aW9uKGMpe2MucWs9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dGhpcy5WYj0hMTt0aGlzLnNnKCk7dGhpcy51ZygpO3RoaXMuT289ITF9LHNnOmZ1bmN0aW9uKCl7dGhpcy5WYj0hMTt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnBsYXllci5pZCk7Ynx8KHRoaXMuVmI9ITApO2lmKCJPQkpFQ1QiPT1iLm5vZGVOYW1lfHwiVklERU8iPT1iLm5vZGVOYW1lKWI9Yi5wYXJlbnROb2RlO3RoaXMuWShiKX0sdWc6ZnVuY3Rpb24oKXtpZighdGhpcy5WYil7dmFyIGI9dGhpcy5JYSgpLGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXTthfHwoYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7CmF8fCh0aGlzLlZiPSEwKTt0aGlzLlooYSl9fSxOYTpmdW5jdGlvbigpe3ZhciBiPXRoaXMucGxheWVyO2lmKG0ucG9zdHJvbGxVc2VDb21wbGV0ZUV2ZW50KWIuX2V2ZW50cy5iZWZvcmVDb21wbGV0ZS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OnRoaXMucGxheWVyLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy5WJiYoMCx0aGlzLlYpKCl9LmJpbmQodGhpcyl9KTtlbHNlIGlmKGIuX2V2ZW50cyYmYi5fZXZlbnRzLnRpbWUmJmIuX2V2ZW50cy50aW1lLnB1c2goe2NvbnRleHQ6bnVsbCxjdHg6dGhpcy5wbGF5ZXIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7YS5kdXJhdGlvbiYmYS5wb3NpdGlvbiYmMT5hLmR1cmF0aW9uLWEucG9zaXRpb24mJnRoaXMuViYmKDAsdGhpcy5WKSgpfS5iaW5kKHRoaXMpfSksYi5vblRpbWUpYi5vblRpbWUoZnVuY3Rpb24oYSl7YS5kdXJhdGlvbiYmYS5wb3NpdGlvbiYmMT5hLmR1cmF0aW9uLWEucG9zaXRpb24mJnRoaXMuViYmKDAsdGhpcy5WKSgpfS5iaW5kKHRoaXMpKX0sCkxlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRFcnJvciYmYi5fZXZlbnRzLmFkRXJyb3IucHVzaCh7Y29udGV4dDpudWxsLGN0eDpiLGNhbGxiYWNrOmZ1bmN0aW9uKGEpe3RoaXMuSGQoYSl9LmJpbmQodGhpcyl9KTtpZihiLm9uQWRFcnJvciliLm9uQWRFcnJvcihmdW5jdGlvbihhKXt0aGlzLkhkKGEpfS5iaW5kKHRoaXMpKX0sSGQ6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5wbGF5ZXI7YS5nZXRQb3NpdGlvbigpO2EuZ2V0UG9zaXRpb24oKTthLmdldER1cmF0aW9uKCk7YS5nZXRQb3NpdGlvbigpO2EuZ2V0RHVyYXRpb24oKTthLmdldFBvc2l0aW9uKCk7Im1pZCI9PWIuYWRwb3NpdGlvbiYmYS5nZXRQb3NpdGlvbiYmMzA8YS5nZXRQb3NpdGlvbigpJiYzMDxhLmdldER1cmF0aW9uKCktYS5nZXRQb3NpdGlvbigpJiZ0aGlzLk1lJiYoMCx0aGlzLk1lKSgpfSxwbGF5OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7aWYoIWIuZ2V0U3RhdGV8fAoicGxheWluZyIhPWIuZ2V0U3RhdGUoKXx8dGhpcy52aWRlb1RhZy5wYXVzZWQpcmV0dXJuIHRoaXMucGxheWVyLnBsYXkoKX0scGF1c2U6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnBsYXllcjtyZXR1cm4gYi5nZXRTdGF0ZSYmInBhdXNlZCI9PWIuZ2V0U3RhdGUoKT8icGF1c2VkIjp0aGlzLnBsYXllci5wYXVzZSghMCl9LFZhOmZ1bmN0aW9uKCl7cmV0dXJuInBhdXNlZCI9PXRoaXMucGF1c2UoKT8hMTohMH0sTzpmdW5jdGlvbigpe3JldHVybiJKV1BsYXllciJ9LGV4aXRGdWxsc2NyZWVuOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7Yi5nZXRGdWxsc2NyZWVuJiZiLmdldEZ1bGxzY3JlZW4oKSYmYi5zZXRGdWxsc2NyZWVuKCl9LHZhOmZ1bmN0aW9uKCl7dmFyIGI9ITEsYT10aGlzLnBsYXllcjthLmdldE11dGUmJmEuZ2V0TXV0ZSgpJiYoYj0hMCk7cmV0dXJuIGJ9LHFlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXIsYT0hMTtiLmdldFZvbHVtZSYmYi5nZXRWb2x1bWUoKSYmCihhPWIuZ2V0Vm9sdW1lKCkpO3JldHVybiBhfX0pfSkoYyk7dmFyIHRhPWMucWt8fHRhOyhmdW5jdGlvbihjKXtjLnBrPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LFM6ZnVuY3Rpb24oKXt9LHJhOmZ1bmN0aW9uKCl7dGhpcy5zdGF0dXM9dGhpcy5QYzt0aGlzLmlzUGxheWluZz10aGlzLlJjPSExO3RoaXMuWmQ9MTt0aGlzLlNjPVtdO3RoaXMudGI9ITF9LGc6ZnVuY3Rpb24oKXt0aGlzLmlzUGxheWluZz10aGlzLlJjPSExO3RoaXMuWmQ9MTt0aGlzLlNjPVtdO3RoaXMudGI9ITE7dGhpcy5nZXRQbGF5ZXIoKTt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpLGE9e307Yi5nZXRDb25maWcmJihhPWIuZ2V0Q29uZmlnKCksYS5hZHZlcnRpc2luZz8oYS5hZHZlcnRpc2luZy5zY2hlZHVsZSYmKGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzP2EuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzLnRhZyYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5hZHMudGFnLmxlbmd0aCYmCih0aGlzLlpkPWEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzLnRhZy5sZW5ndGgsdGhpcy50Yj0hMCk6KGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUucHJlcm9sbCYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5wcmVyb2xsLnRhZyYmKHRoaXMudGI9ITApLGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRicmVha3ByZSYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5hZGJyZWFrcHJlLnRhZyYmKHRoaXMudGI9ITApKSksYS5hZHZlcnRpc2luZy50YWcmJih0aGlzLnRiPSEwKSk6dGhpcy53KCJubyBhZHZlcnRpc2luZyBjb25maWd1cmVkIGZvciBwbGF5ZXIiKSk7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRDb21wbGV0ZSYmYi5fZXZlbnRzLmFkQ29tcGxldGUucHVzaCh7Y29udGV4dDpudWxsLGN0eDpiLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy53KCJhZENvbXBsZXRlIik7dGhpcy5SYz0hMH0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkQ2xpY2smJmIuX2V2ZW50cy5hZENsaWNrLnB1c2goe2NvbnRleHQ6bnVsbCwKY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkQ2xpY2siKX0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkSW1wcmVzc2lvbiYmYi5fZXZlbnRzLmFkSW1wcmVzc2lvbi5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkSW1wcmVzc2lvbiIpO3RoaXMuUGUoKX0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkTWV0YSYmYi5fZXZlbnRzLmFkTWV0YS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkTWV0YSIpfS5iaW5kKHRoaXMpfSk7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRTa2lwcGVkJiZiLl9ldmVudHMuYWRTa2lwcGVkLnB1c2goe2NvbnRleHQ6bnVsbCxjdHg6YixjYWxsYmFjazpmdW5jdGlvbigpe3RoaXMudygiYWRTa2lwcGVkIil9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5hZFRpbWUmJmIuX2V2ZW50cy5hZFRpbWUucHVzaCh7Y29udGV4dDpudWxsLApjdHg6YixjYWxsYmFjazpmdW5jdGlvbigpe3RoaXMudygiYWRUaW1lIil9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5hZEVycm9yJiZiLl9ldmVudHMuYWRFcnJvci5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7dGhpcy5vbkFkRXJyb3IoYSl9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy50aW1lJiZiLl9ldmVudHMudGltZS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7dGhpcy5pc1BsYXlpbmc9ITA7YS5kdXJhdGlvbj50aGlzLmloJiYhdGhpcy51YSgpJiYodGhpcy50Yj8odGhpcy5vKCJjb250ZW50cGxheU5vQWRzIiwiIiksdGhpcy5zKCkpOih0aGlzLm8oImNvbnRlbnRwbGF5VGltZSIsMUUzKk1hdGgucm91bmQoYS5kdXJhdGlvbi8xRTMpKSx0aGlzLnMoITApKSl9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5wbGF5bGlzdEl0ZW0mJmIuX2V2ZW50cy5wbGF5bGlzdEl0ZW0ucHVzaCh7Y29udGV4dDpudWxsLApjdHg6dGhpcy5wbGF5ZXIsY2FsbGJhY2s6ZnVuY3Rpb24oKXtpZih0aGlzLnVhKCkmJih0aGlzLnJhKCksdGhpcy5nZXRQbGF5ZXIoKS5Pbz0hMCxtLnNraXBBZE9uQ29udGV4dENoYW5nZSkpe3ZhciBhPXRoaXMuZ2V0UGxheWVyKCkuemI7YSYmKGEuemQoKSxhLmhkKCkpfX0uYmluZCh0aGlzKX0pO2lmKGIub25BZENvbXBsZXRlKWIub25BZENvbXBsZXRlKGZ1bmN0aW9uKCl7dGhpcy53KCJvbkFkQ29tcGxldGUiKTt0aGlzLlJjPSEwfS5iaW5kKHRoaXMpKTtpZihiLm9uQWRJbXByZXNzaW9uKWIub25BZEltcHJlc3Npb24oZnVuY3Rpb24oKXt0aGlzLncoIm9uQWRJbXByZXNzaW9uIik7dGhpcy5QZSgpfS5iaW5kKHRoaXMpKTtpZihiLm9uQWRQbGF5KWIub25BZFBsYXkoZnVuY3Rpb24oKXt0aGlzLncoIm9uQWRQbGF5Iil9LmJpbmQodGhpcykpO2lmKGIub25BZFRpbWUpYi5vbkFkVGltZShmdW5jdGlvbigpe3RoaXMudygib25BZFRpbWUiKX0uYmluZCh0aGlzKSk7aWYoYi5vbkFkRXJyb3IpYi5vbkFkRXJyb3IoZnVuY3Rpb24oYSl7dGhpcy5vbkFkRXJyb3IoYSl9LmJpbmQodGhpcykpOwppZihiLm9uVGltZSliLm9uVGltZShmdW5jdGlvbihhKXt0aGlzLmlzUGxheWluZz0hMDthLmR1cmF0aW9uPnRoaXMuaWgmJiF0aGlzLnVhKCkmJih0aGlzLnRiPyh0aGlzLm8oImNvbnRlbnRwbGF5Tm9BZHMiLCIiKSx0aGlzLnMoKSk6KHRoaXMubygiY29udGVudHBsYXlUaW1lIiwxRTMqTWF0aC5yb3VuZChhLmR1cmF0aW9uLzFFMykpLHRoaXMucyghMCkpKX0uYmluZCh0aGlzKSl9LG9uQWRFcnJvcjpmdW5jdGlvbihiKXt2YXIgYT1iLnRhZzstMT09dGhpcy5TYy5pbmRleE9mKGEpJiZ0aGlzLlNjLnB1c2goYSk7IjEwMSI9PWIuY29kZXx8IjEwMDEiPT1iLmNvZGU/KHRoaXMudygpLHRoaXMudGEoKSk6OTAwPT1iLmNvZGUmJjA8Yi5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigiZW1wdHkiKT90aGlzLncoImVtcHR5Iik6MzAzPT1iLmNvZGUmJjA8Yi5tZXNzYWdlLmluZGV4T2YoIk5vIEFkcyBWQVNUIHJlc3BvbnNlIGFmdGVyIG9uZSBvciBtb3JlIFdyYXBwZXJzIik/dGhpcy53KCJlbXB0eSIpOgoodGhpcy5vKCJhZGVycm9yIixiLmNvZGUpLHRoaXMuU2MubGVuZ3RoPj10aGlzLlpkJiZ0aGlzLnMoKSl9LE5yOmZ1bmN0aW9uKGIpe3RoaXMubSgiSlc6ICIrYi50eXBlKX0sczpmdW5jdGlvbihiKXtiP3RoaXMubmU/dGhpcy5uZSsrOnRoaXMubmU9MTp0aGlzLm1lP3RoaXMubWUrKzp0aGlzLm1lPTE7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKTtlLkhoKGEudmlkZW9UYWcpP2EuVmI/dGhpcy53KCJwbGF5ZXIgaXMgaW52YWxkIik6dGhpcy5SY3x8dGhpcy5pc1BsYXlpbmc/KHRoaXMubWU+dGhpcy5uZSYmKGI9ITEpLHRoaXMuSShiKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoYil9LmJpbmQodGhpcyksNTApOihhLnNnKCksYS51ZygpLGEuVmJ8fHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDIwKSl9fSl9KShjKTt2YXIgdWE9Yy5wa3x8dWE7KGZ1bmN0aW9uKGMpe2Mucms9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSwKZzpmdW5jdGlvbigpe3ZhciBiPWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZik7aWYoIllXUnBkR2x2Ymk1clpXbHVaWFpwWkdWdmQyVnlZblZ1WnoweCIhPXRoaXMuZXEoKXx8IWIuYXV0aG9yaXR5fHwhYi5hdXRob3JpdHl8fCJ3d3cuc3BpZWdlbC5kZSIhPWIuYXV0aG9yaXR5JiYicXMyLnByZXZpZXcuc3BpZWdlbC5kZSIhPWIuYXV0aG9yaXR5JiYicHJldmlldy5zcGllZ2VsLmRlIiE9Yi5hdXRob3JpdHkmJiJwcm9kLnNwaWVnZWwuZGUiIT1iLmF1dGhvcml0eSl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiandwbGF5ZXIiKTtpZighd2luZG93Lmp3cGxheWVyfHwhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoandwbGF5ZXIoKS5pZCl8fCJBIiE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoandwbGF5ZXIoKS5pZCkubm9kZU5hbWUpaWYod2luZG93Lmp3cGxheWVyJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZChqd3BsYXllcigpLmlkKXx8aCYmaCgpLmlkKXtiPQpbXTtpZigxPGEubGVuZ3RoKWZvcihoPTA7aDxhLmxlbmd0aDtoKyspYi5wdXNoKGFbaF0uZ2V0QXR0cmlidXRlKCJpZCIpKTtlbHNlIGIucHVzaChqd3BsYXllcigpLmlkKTtqd3BsYXllcigpO2ZvcihhPTA7YTxiLmxlbmd0aDthKyspe3ZhciBoPW5ldyB0YSh3aW5kb3cuandwbGF5ZXIoYlthXSkpO3RoaXMuTihoKXx8dGhpcy5scihoKXx8KHRoaXMuUChoKSxoPW5ldyB1YShoLHRoaXMuSyksaC5TKCksaC5nKCkpfX10aGlzLlIoKX19LFh2OmZ1bmN0aW9uKCl7cmV0dXJuIllXUnBkR2x2Ymk1clpXbHVaWFpwWkdWdmQyVnlZblZ1WnoweCJ9LGVxOmZ1bmN0aW9uKCl7dmFyIGI9ZS5sYShkb2N1bWVudC5sb2NhdGlvbi5ocmVmKTtyZXR1cm4gZS52YihiLmFuY2hvcil9fSl9KShjKTt2YXIgdmE9Yy5ya3x8dmEsd2E9bmV3IHZhKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLkRyPQp0aGlzLmFbM107dGhpcy5Qaz10aGlzLmFbOF07dGhpcy5zbT10aGlzLmFbMV07dGhpcy5ObD10aGlzLmFbOV07dGhpcy5qPXRoaXMuYVsxMF19Yy5pbz1iO2IucHJvdG90eXBlPXtDcjpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuRHI6dGhpcy5PayhhKX0sT2s6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLlBrOnRoaXMucm0oYSl9LHJtOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5zbTp0aGlzLk1sKGEpfSxNbDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuTmw6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciB4YT1jLmlvfHx4YSxyYz1uZXcgeGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1yYy5Dcig0KTsoZnVuY3Rpb24oYyl7Yy54bT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtpZihiKXt2YXIgYT1iLmVsXzthfHwoYT1iLmVsKCkpO2E/KHRoaXMuWShhKSwoYj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdKXx8KGI9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pLGI/dGhpcy5aKGIpOnRoaXMucGEoKSk6dGhpcy5wYSgpfWVsc2UgdGhpcy5wYSgpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuInZpZGVvanMifSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkub24oInRpbWV1cGRhdGUiLGZ1bmN0aW9uKGIpe3RoaXMuTWQoYil9LmJpbmQodGhpcykpfSxNZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT1iLmN1cnJlbnRUaW1lKCksYj1iLmR1cmF0aW9uKCk7YSYmMDxhJiZiJiYwPGImJmE+PWItMiYmdGhpcy5WJiZ0aGlzLlYoKX0sQWU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnLmdldEF0dHJpYnV0ZSgiZGF0YS14LXNldHVwIik7CmlmKGIpdHJ5e3ZhciBhPUpTT04ucGFyc2UoYik7aWYoYS5oYXNPd25Qcm9wZXJ0eSgieC1hdXRvcGxheSIpJiYhYVsieC1hdXRvcGxheSJdKXJldHVybiExfWNhdGNoKGgpe31iPXRoaXMuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIuYXV0b3BsYXkmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmF1dG9wbGF5P2IuYXV0b3BsYXkoKTohMX0sdmE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXIubXV0ZWQmJnRoaXMucGxheWVyLm11dGVkKCl9LFZhOmZ1bmN0aW9uKCl7dGhpcy5wYXVzZSgpO3JldHVybiEwfSxpc1BsYXlpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wYXVzZWQoKT8hMTohMH0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLGE9Yi5pc0Z1bGxzY3JlZW47aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpdHJ5e2E9YSgpfWNhdGNoKGgpe2E9ITF9YSYmYi5leGl0RnVsbHNjcmVlbigpfSxjdXJyZW50VGltZTpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLmdldFJhd1BsYXllcigpO2lmKGIuY3VycmVudFRpbWUpcmV0dXJuIGIuY3VycmVudFRpbWUoKX19KX0pKGMpO3ZhciB5YT1jLnhtfHx5YTsoZnVuY3Rpb24oYyl7Yy53bT12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dGhpcy5UPXRoaXMuVHx8ITE7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKTt0aGlzLmRhPXRoaXMuQmM9dGhpcy5BYT10aGlzLlljPSExO3RoaXMudmg9ZS5FYigxMCk7dGhpcy5YaD0hMDt0aGlzLm5jPXRoaXMuUWc9ITE7dGhpcy5icyhiLmdldFJhd1BsYXllcigpKXx8KHRoaXMubGgoKSx0aGlzLm5vKCksdGhpcy5vYigpKX0sYnM6ZnVuY3Rpb24oYil7cmV0dXJuIGUuQmEoInQtb25saW5lLmRlIik/ITE9PT1iLm9wdGlvbnNfLmFkUHJlcm9sbDohMX0sbnc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2NvbnNvbGUuaW5mbyh0aGlzLmdldFBsYXllcigpLmphKCksIjsiLCJ3aW5kb3cuaW1hOiIsCiI7Iix3aW5kb3cuaW1hLCI7Iix0eXBlb2Ygd2luZG93LmltYSwiOyIsInBsYXllci5hZHM6IiwiOyIsYi5XLCI7Iix0eXBlb2YgYi5XLCI7IiwicGxheWVyLmFkcy5zdGF0ZToiLCI7IixiLlc/Yi5XLnN0YXRlOiJ1bmRlZmluZWRYIiwiOyIsYi5XP3R5cGVvZiBiLlcuc3RhdGU6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYToiLCI7IixiLmltYSwiOyIsdHlwZW9mIGIuaW1hLCI7IiwicGxheWVyLmltYTM6IiwiOyIsYi5KLCI7Iix0eXBlb2YgYi5KLCI7IiwicGxheWVyLmltYS5hZGRFdmVudExpc3RlbmVyOiIsIjsiLGIuaW1hP2IuaW1hLmFkZEV2ZW50TGlzdGVuZXI6InVuZGVmaW5lZFgiLCI7IixiLmltYT90eXBlb2YgYi5pbWEuYWRkRXZlbnRMaXN0ZW5lcjoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5hZGRFdmVudExpc3RlbmVyOiIsIjsiLGIuSj9iLkouYWRkRXZlbnRMaXN0ZW5lcjoidW5kZWZpbmVkWCIsIjsiLGIuSj90eXBlb2YgYi5KLmFkZEV2ZW50TGlzdGVuZXI6CiJ1bmRlZmluZWRYIiwiOyIsInBsYXllci5pbWEuZ2V0QWRzTWFuYWdlcjoiLCI7IixiLmltYT9iLmltYS5HYToidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5HYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5nZXRBZHNNYW5hZ2VyOiIsIjsiLGIuSj9iLkouR2E6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5HYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmdldEFkc01hbmFnZXIoKToiLCI7IixiLmltYSYmYi5pbWEuR2E/Yi5pbWEuR2EoKToidW5kZWZpbmVkWCIsIjsiLGIuaW1hJiZiLmltYS5HYT90eXBlb2YgYi5pbWEuR2EoKToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5nZXRBZHNNYW5hZ2VyKCk6IiwiOyIsYi5KJiZiLkouR2E/Yi5KLkdhKCk6InVuZGVmaW5lZFgiLCI7IixiLkomJmIuSi5HYT90eXBlb2YgYi5KLkdhKCk6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYS5fYWRzTG9hZGVyOiIsIjsiLGIuaW1hP2IuaW1hLldkOgoidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5XZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5fYWRzTG9hZGVyOiIsIjsiLGIuSj9iLkouV2Q6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5XZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLl9hZHNNYW5hZ2VyOiIsIjsiLGIuaW1hP2IuaW1hLlhkOiJ1bmRlZmluZWRYIiwiOyIsYi5pbWE/dHlwZW9mIGIuaW1hLlhkOiJ1bmRlZmluZWRYIiwiOyIsInBsYXllci5pbWEzLl9hZHNNYW5hZ2VyOiIsIjsiLGIuSj9iLkouWGQ6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5YZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmFkc0xvYWRlcjoiLCI7IixiLmltYT9iLmltYS5uYToidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5uYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5hZHNMb2FkZXI6IiwiOyIsYi5KP2IuSi5uYToidW5kZWZpbmVkWCIsIjsiLGIuSj8KdHlwZW9mIGIuSi5uYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmFkc01hbmFnZXI6IiwiOyIsYi5pbWE/Yi5pbWEuY2U6InVuZGVmaW5lZFgiLCI7IixiLmltYT90eXBlb2YgYi5pbWEuY2U6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYTMuYWRzTWFuYWdlcjoiLCI7IixiLko/Yi5KLmNlOiJ1bmRlZmluZWRYIiwiOyIsYi5KP3R5cGVvZiBiLkouY2U6InVuZGVmaW5lZFgiLCI7IiwiRE9ORSIsdGhpcy52aCl9LHdiOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtiLmltYTMmJih0aGlzLmltYT1iLmltYTMpO2lmKGIuaW1hKXt0aGlzLmltYT1iLmltYTt0cnl7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuaW1hJiZ0aGlzLnBsYXllci5nZXRSYXdQbGF5ZXIoKS5hY3RpdmVQbHVnaW5zXyYmMT09dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyKCkuYWN0aXZlUGx1Z2luc18uaW1hJiYodGhpcy5pbWE9dGhpcy5pbWEoKSx0aGlzLmltYS5jb250cm9sbGVyJiYKKHRoaXMuaW1hPXRoaXMuaW1hLmNvbnRyb2xsZXIpKX1jYXRjaChhKXt9fXJldHVybiB0aGlzLmltYX0sUmI6ZnVuY3Rpb24oKXtpZighdGhpcy5uYSl7dmFyIGI9dGhpcy53YigpO2ImJihiLmFkc0xvYWRlciYmKHRoaXMubmE9Yi5hZHNMb2FkZXIpLGIuX2Fkc0xvYWRlciYmKHRoaXMubmE9Yi5fYWRzTG9hZGVyKSxiLmdldEFkc0xvYWRlciYmKHRoaXMubmE9Yi5nZXRBZHNMb2FkZXIpLGIuY29udHJvbGxlciYmYi5jb250cm9sbGVyLnNka0ltcGwmJmIuY29udHJvbGxlci5zZGtJbXBsLmFkc0xvYWRlciYmKHRoaXMubmE9Yi5jb250cm9sbGVyLnNka0ltcGwuYWRzTG9hZGVyKSl9cmV0dXJuIHRoaXMubmF9LEVnOmZ1bmN0aW9uKCl7aWYoIXRoaXMuQmMpe3ZhciBiPXRoaXMud2IoKTtiJiYoYi5hZHNNYW5hZ2VyJiYodGhpcy5CYz1iLmFkc01hbmFnZXIpLGIuZ2V0QWRzTWFuYWdlciYmKHRoaXMuQmM9Yi5nZXRBZHNNYW5hZ2VyKCkpKX1yZXR1cm4gdGhpcy5CY30sanI6ZnVuY3Rpb24oKXtpZighdGhpcy5QZyl7dmFyIGI9CnRoaXMud2IoKSxhPXRoaXMuaHIoKTt3aW5kb3cuaW1hJiZiJiYoYi5fYWRzTG9hZGVyfHxiLmFkc0xvYWRlcnx8YSkmJih0aGlzLlBnPSEwKX1yZXR1cm4gdGhpcy5QZ30saHI6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyF0aGlzLlljJiZiLmFkcyYmKGIuYWRzLnN0YXRlfHxiLmFkcy5fc3RhdGUpJiYodGhpcy5ZYz0hMCk7cmV0dXJuIHRoaXMuWWN9LG9iOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5SYigpO2lmKGIpe3ZhciBhPSJhZEVycm9yIixoPSJhZHNNYW5hZ2VyTG9hZGVkIixkPSJsb2ciO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SJiYoYT1nb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SKTt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkc01hbmFnZXJMb2FkZWRFdmVudCYmCmdvb2dsZS5pbWEuQWRzTWFuYWdlckxvYWRlZEV2ZW50LlR5cGUmJmdvb2dsZS5pbWEuQWRzTWFuYWdlckxvYWRlZEV2ZW50LlR5cGUuQURTX01BTkFHRVJfTE9BREVEJiYoaD1nb29nbGUuaW1hLkFkc01hbmFnZXJMb2FkZWRFdmVudC5UeXBlLkFEU19NQU5BR0VSX0xPQURFRCk7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYoZD1nb29nbGUuaW1hLkFkRXZlbnQuVHlwZS5MT0cpOyJmdW5jdGlvbiIhPT10eXBlb2YgYi5hZGRFdmVudExpc3RlbmVyP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKTooYi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKGgsZnVuY3Rpb24oKXt0aGlzLmp0KCl9LmJpbmQodGhpcykpLApiLmFkZEV2ZW50TGlzdGVuZXIoZCxmdW5jdGlvbihhKXt0aGlzLmdhKGEsITApO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKTt0aGlzLmZhKCEwKX0uYmluZCh0aGlzKSkpfWVsc2UgdGhpcy51YSgpfHx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMub2IoKX0uYmluZCh0aGlzKSwyMCl9LGp0OmZ1bmN0aW9uKCl7dGhpcy5uYz0hMDt2YXIgYj10aGlzLkVnKCk7aWYoYnx8dGhpcy51YSgpKXt2YXIgYT0iYWRFcnJvciIsaD0ibG9nIjt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudCYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYKKGg9Z29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HKTtiLmFkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihhKXt0aGlzLmdhKGEpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoaCxmdW5jdGlvbihhKXt0aGlzLmdhKGEsITApO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKTt0aGlzLmZhKCEwKX0uYmluZCh0aGlzKSk7dmFyIGQ9IiI7ZS5UYSgpJiYoZD0iTV8iKTtiLmFkZEV2ZW50TGlzdGVuZXIoInN0YXJ0IixmdW5jdGlvbigpe2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrInN0YXJ0IiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiZmlyc3RxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrImZpc3RxdWFydGlsZSIsIiIsITApfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoIm1pZHBvaW50IixmdW5jdGlvbigpe3RoaXMub2M9CiEwO2lmKGUuQmEoImNoaXAuZGUiKSl7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtlLnRyYWNrKCJzdGF0c19jdXN0XyIrZCsibWlkcG9pbnQiLCIiLCEwKTtlLnRyYWNrKCJzdGF0c19jdXN0X2RvdWJsZXBsYXkiLCFhLnBhdXNlZCgpLCEwKX19LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigidGhpcmRxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrInRoaXJkcXVhcnRpbGUiLCIiLCEwKX0uYmluZCh0aGlzKSk7Yi5hZGRFdmVudExpc3RlbmVyKCJjb21wbGV0ZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrImNvbXBsZXRlIiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiaW1wcmVzc2lvbiIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iKwpkKyJpbXByZXNzaW9uIiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiYWxsQWRzQ29tcGxldGVkIixmdW5jdGlvbigpe3RoaXMub2N8fCh0aGlzLm8oImFkZXJyb3IiLCJub2FkZXZlbnQiKSx0aGlzLmZhKCksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKX0sV3Y6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyF0aGlzLmtnJiZiLmFkcyYmKHRoaXMua2c9Yi5hZHMpO3JldHVybiB0aGlzLmtnfSxubzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7Yi5vbigiYWRzZXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuZ2EoYSk7dGhpcy5mYSgpO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKX0uYmluZCh0aGlzKSk7Yi5vbigiYWR0cmlnZ2VyIixmdW5jdGlvbigpe3RoaXMucmEoKTt0aGlzLmZhKCEwKTsKdGhpcy5vKCJ0cmlnZ2VyIiwiSE9NQUQiKX0uYmluZCh0aGlzKSk7Yi5vbigiaW1hM2Vycm9yIixmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZmEoKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCl9LmJpbmQodGhpcykpO2Iub24oImltYTNhZGVycm9yIixmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZmEoKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCl9LmJpbmQodGhpcykpO2Iub24oImltYTMtYWQtZXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuZ2EoYSk7dGhpcy5mYSgpO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKX0uYmluZCh0aGlzKSk7Yi5vbigiYWRzLWZpcnN0LXF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygpO3RoaXMuUGUoKX0uYmluZCh0aGlzKSl9LGxkOmZ1bmN0aW9uKCl7dmFyIGI9ITE7dHJ5e2lmKGhvbWFkVXRpbHMmJmhvbWFkVXRpbHMuWClob21hZFV0aWxzLkthJiYoYj0hMCk7ZWxzZXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubGQoKX0uYmluZCh0aGlzKSwKNTApO3JldHVybn19Y2F0Y2goYSl7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmxkKCl9LmJpbmQodGhpcyksNTApO3JldHVybn1iJiYoKGI9dGhpcy5FZygpKSYmYi5kZXN0cm95P2IuZGVzdHJveSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5sZCgpfS5iaW5kKHRoaXMpLDUwKSl9LGxoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKTtpZihiLmlzUGxheWluZygpJiYwPGIuY3VycmVudFRpbWUoKSlpZih0aGlzLmpyKCkpe3ZhciBhPXRoaXMud2IoKSxoPXRoaXMuUmIoKTthJiZoJiYodGhpcy53YigpLHRoaXMuUmIoKSx0aGlzLm5jfHx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubmM/dGhpcy53KCk6KHRoaXMuZmEoITApLHRoaXMubygibm9BZHNNYW5hZ2VyIiwiYWRzTWFuYWdlciIpKX0uYmluZCh0aGlzKSwyRTMpKTt0aGlzLndiKCl9ZWxzZSB0aGlzLlFnP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGE9CnRoaXMud2IoKSxiPXRoaXMuUmIoKTthJiYhYj8odGhpcy5vKCJub2ZyYW1ld29yayIsIklNQV9BRFNMT0FERVIiKSx0aGlzLmZhKCkpOih0aGlzLmZhKCEwKSx0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIikpfS5iaW5kKHRoaXMpLDEwMCk6dGhpcy5RZz0hMDtiLmlzUGxheWluZygpJiYxMDxiLmN1cnJlbnRUaW1lKCl8fHRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmxoKCl9LmJpbmQodGhpcyksNTApfSxnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGg9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpaD0hMDtofHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGg9ITApOyJudW1iZXIiPT10eXBlb2YgYSYmKGIuVD1hLGIubygiYWRlcnJvciIsYSkpfXJldHVybiBofWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTsKaWYoYi5nZXRFcnJvciYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0RXJyb3Ipe3ZhciBoPWIuZ2V0RXJyb3IoKTtpZihoLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGguZ2V0RXJyb3JDb2RlJiZhKGguZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTtyZXR1cm59fWZvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkmJmJbZF0mJmJbZF0uYWRFcnJvciYmYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJmEoYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7YnJlYWt9fSxvbzpmdW5jdGlvbigpe3RoaXMucmN8fCh0aGlzLnJjPSJ1bmtub3duIik7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZihiLmFkcyl7aWYodGhpcy5yYyE9Yi5hZHMuc3RhdGUmJih0aGlzLnJjPWIuYWRzLnN0YXRlKSwiYWQtcGxheWJhY2siPT0KdGhpcy5yYyl7dGhpcy53KCJhZC1wbGF5YmFjayIpO3JldHVybn19ZWxzZSB0aGlzLnJjPSJuby1hZHMiO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vbygpfS5iaW5kKHRoaXMpLDEwKX0sdmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYX0sRGE6ZnVuY3Rpb24oKXswPD1lLlNiKGRvY3VtZW50LmxvY2F0aW9uKS5pbmRleE9mKCJzdGVybi5kZSIpJiYxMDA5PT10aGlzLlQ/KHRoaXMuZGE9ITAsdGhpcy5zKCEwKSk6KHRoaXMuZGE9ITAsdGhpcy53KCJlbXB0eSB2YXN0IikpfSxmYTpmdW5jdGlvbihiKXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZGE/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwMCl9LHM6ZnVuY3Rpb24oYil7dGhpcy51YSgpfHwoYnx8KHRoaXMuWGg9ITEpLHRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCkub24oInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5JKHRoaXMuWGgsZnVuY3Rpb24oKXt0aGlzLmxkKCl9LmJpbmQodGhpcykpfS5iaW5kKHRoaXMpKSl9LAp0bzpmdW5jdGlvbigpe3RoaXMuZXd8fCgxMDx0aGlzLiR1Pyh0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGFhemEiKSx3aW5kb3cuc2V0VGltZW91dCh0aGlzLmZhLmJpbmQodGhpcyksNTAwKSk6KHRoaXMuJHUrKyx0aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpLnZwRXZlbnQ/dGhpcy5udCgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50bygpfS5iaW5kKHRoaXMpLDUwKSkpfSxudDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7aWYoYi52cEV2ZW50JiYhdGhpcy5hdil7dGhpcy5hdj0hMDt2YXIgYT0iIjtiLnZwRXZlbnQucmFuZG9tVGVzdCYmKGE9IiIpO2IudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZHMtZXJyb3IiK2EsZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiLCJ2cDphZHMtZXJyb3IiKTt3aW5kb3cuc2V0VGltZW91dCh0aGlzLmZhLmJpbmQodGhpcyksNTAwKX0uYmluZCh0aGlzKSk7CmIudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZC1lcnJvciIrYSxmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsInZwOmFkLWVycm9yIik7d2luZG93LnNldFRpbWVvdXQodGhpcy5mYS5iaW5kKHRoaXMpLDUwMCl9LmJpbmQodGhpcykpO2IudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZC1yZWFkeSIrYSxmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLnZwRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcigidnA6YWQtZW5kZWQiK2EsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yi52cEV2ZW50LmFkZEV2ZW50TGlzdGVuZXIoInZwOmFkc2xvdC1jb21wbGV0ZSIrYSxmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLnZwRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcigidnA6YWRzLXJlYWR5IithLGZ1bmN0aW9uKCl7dGhpcy53KCl9LmJpbmQodGhpcykpfX19KX0pKGMpO3ZhciB6YT1jLndtfHx6YTsoZnVuY3Rpb24oYyl7Yy55bT1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApnOmZ1bmN0aW9uKCl7aWYoIXdpbmRvdy5kZW1vUGxheWVyKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaWZyYW1lIiksYTthPXRoaXMuSWgod2luZG93KTtmb3IodmFyIGg9MDtoPGIubGVuZ3RoO2grKyl0cnl7YT1hfHx0aGlzLkloKGJbaF0pfWNhdGNoKGQpe310aGlzLlIoKX19LEloOmZ1bmN0aW9uKGIpe3ZhciBhPVtdO2IudmlkZW9qcyYmYi52aWRlb2pzLmdldFBsYXllcnM/YT1iLnZpZGVvanMuZ2V0UGxheWVycygpOmIudmlkZW9qcyYmYi52aWRlb2pzLnBsYXllcnMmJihhPWIudmlkZW9qcy5wbGF5ZXJzKTtpZigwPGUudGUoYSkpe2I9YTtmb3IodmFyIGggaW4gYiliLmhhc093blByb3BlcnR5KGgpJiYoYT1uZXcgeWEoYltoXSksYS5xYXx8dGhpcy5OKGEpfHwhMT09PWEuZ2V0UmF3UGxheWVyKCkuaXNSZWFkeV98fCh0aGlzLlAoYSksKG5ldyB6YShhLHRoaXMuSykpLmcoKSkpO3JldHVybiEwfXJldHVybiExfSxSOmZ1bmN0aW9uKCl7dGhpcy5IYj0Kd2luZG93LnNldFRpbWVvdXQodGhpcy5nLmJpbmQodGhpcyksdGhpcy5HYyl9fSl9KShjKTt2YXIgQWE9Yy55bXx8QWEsQmE9bmV3IEFhKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnlxPXRoaXMuYVs0XTt0aGlzLiRvPXRoaXMuYVs1XTt0aGlzLnRuPXRoaXMuYVsxMF07dGhpcy5rcD10aGlzLmFbMV07dGhpcy5Kbz10aGlzLmFbNl07dGhpcy5Gcz10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVsxXX1jLlFyPWI7Yi5wcm90b3R5cGU9e3hxOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy55cTp0aGlzLlpvKGEpfSxabzpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuJG86dGhpcy5zbihhKX0sc246ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy50bjp0aGlzLmpwKGEpfSxqcDpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMua3A6dGhpcy5JbyhhKX0sSW86ZnVuY3Rpb24oYSl7cmV0dXJuIDU8CmE/dGhpcy5Kbzp0aGlzLkVzKGEpfSxFczpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuRnM6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBDYT1jLlFyfHxDYSxzYz1uZXcgQ2EoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1zYy54cSg0KTsoZnVuY3Rpb24oYyl7Yy5sbD11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt0aGlzLlNlPTA7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPWIucGxheWVyQ29udGFpbmVyO2lmKCFhJiYoYi5wbGF5ZXJJbnN0YW5jZSYmYi5wbGF5ZXJJbnN0YW5jZS5pZCYmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYi5wbGF5ZXJJbnN0YW5jZS5pZCkpJiYoYT1iLnBhcmVudE5vZGUpLCFhKSl7dGhpcy5wYSgpO3JldHVybn10aGlzLlkoYSk7CihiPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pfHwoYj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7Yj90aGlzLlooYik6dGhpcy5wYSgpfSxWczpmdW5jdGlvbihiKXt2YXIgYT10aGlzLnpiLGg9dGhpcy5qYSgpLGQ9IiI7Yi5tZW1vJiYoZD1iLm1lbW8udmlkZW9pZCk7ZCYmYSYmYS5VYiYmKDA8PWguaW5kZXhPZihkKXx8YS56ZCgpKX0scGF1c2U6ZnVuY3Rpb24oYil7Ynx8KHRoaXMuU2U9MCk7Yj10aGlzLmdldFJhd1BsYXllcigpO2IucGxheWVySW5zdGFuY2UmJmIucGxheWVySW5zdGFuY2UucGF1c2U/KHdpbmRvdy5wb3N0TWVzc2FnZSgiaG9tYWRwYXVzZSIsIioiKSxiLnBsYXllckluc3RhbmNlLnBhdXNlKCkpOndpbmRvdy5vdlZpZGVvJiZ3aW5kb3cub3ZWaWRlby5zdG9wUGxheWJhY2smJih3aW5kb3cucG9zdE1lc3NhZ2UoImhvbWFkcGF1c2UiLCIqIiksd2luZG93Lm92VmlkZW8uc3RvcFBsYXliYWNrKCkpfSxWYTpmdW5jdGlvbigpe3RoaXMuU2UrKzsKaWYoMTA8dGhpcy5TZSlyZXR1cm4hMTt0aGlzLnBhdXNlKCJwYXVzZVJlcGVhdE9uQWREZWxpdmVyeSIpO3JldHVybiEwfSxwbGF5OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtiLnBsYXllckluc3RhbmNlJiZiLnBsYXllckluc3RhbmNlLnBsYXk/KHdpbmRvdy5wb3N0TWVzc2FnZSgiaG9tYWRwbGF5IiwiKiIpLGIucGxheWVySW5zdGFuY2UucGxheSgpKTp3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8ucmVzdW1lUGxheWJhY2smJih3aW5kb3cucG9zdE1lc3NhZ2UoImhvbWFkcGxheSIsIioiKSx3aW5kb3cub3ZWaWRlby5yZXN1bWVQbGF5YmFjaygpKX0saXNQbGF5aW5nOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4hMT09PWIucGxheWVySW5zdGFuY2UucGF1c2VkPyEwOiEwPT09Yi5wbGF5ZXJJbnN0YW5jZS5wYXVzZWQ/ITE6Yi5pc1BsYXlpbmd9LGdldEN1cnJlbnRUaW1lOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTsKaWYoYi5wbGF5ZXJJbnN0YW5jZSYmYi5wbGF5ZXJJbnN0YW5jZS5jdXJyZW50VGltZSlyZXR1cm4gYi5wbGF5ZXJJbnN0YW5jZS5jdXJyZW50VGltZTtpZih3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8uZ2V0Q3VycmVudFRpbWUpcmV0dXJuIHdpbmRvdy5vdlZpZGVvLmdldEN1cnJlbnRUaW1lKCl9LGdldER1cmF0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtpZihiLnBsYXllckluc3RhbmNlJiZiLnBsYXllckluc3RhbmNlLmR1cmF0aW9uKXJldHVybiBiLnBsYXllckluc3RhbmNlLmR1cmF0aW9uO2lmKHdpbmRvdy5vdlZpZGVvJiZ3aW5kb3cub3ZWaWRlby5nZXREdXJhdGlvbilyZXR1cm4gd2luZG93Lm92VmlkZW8uZ2V0RHVyYXRpb24oKX0sTzpmdW5jdGlvbigpe3JldHVybiJPdlZpZGVvIn0sTmE6ZnVuY3Rpb24oKXt9LE1kOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0UmF3UGxheWVyKCk7dGhpcy5nZXRDdXJyZW50VGltZSgpPmImJihiPXRoaXMuZ2V0Q3VycmVudFRpbWUoKSk7CnZhciBhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiZ0aGlzLlYmJnRoaXMuVigpfX0pfSkoYyk7dmFyIERhPWMubGx8fERhOyhmdW5jdGlvbihjKXtjLmtsPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LEFhOmZ1bmN0aW9uKCl7aWYoIXRoaXMucGUpaWYodGhpcy5BYnx8KHRoaXMuQWI9MCksdGhpcy5nZXRQbGF5ZXIoKS5pc1BsYXlpbmcoKSYmdGhpcy5BYisrLDE1PHRoaXMuQWIpdGhpcy5vKCJub2ZyYW1ld29yayIsIklNQSIpLHRoaXMucyghMCk7ZWxzZXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2lmKGIuYWR2ZXJ0aXNpbmcpaWYoYj1iLmFkdmVydGlzaW5nLmFkc0xvYWRlcil7dGhpcy5wZT0hMDt2YXIgYT0iYWRFcnJvciI7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUuQURfRVJST1ImJgooYT1nb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SKTtiLmFkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZGF8fCh0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5BYSgpfS5iaW5kKHRoaXMpLDEwKTtlbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5BYSgpfS5iaW5kKHRoaXMpLDEwKX19LHZkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF9LGdhOmZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGEoYSxiKXt2YXIgaD0hMTtpZihhKXtpZigxMDA5PT1hfHwzMDM9PWF8fDQwMz09YSloPSEwO2h8fCFhLmluZGV4T2Z8fC0xPT09YS5pbmRleE9mKCIxMDA5IikmJi0xPT09YS5pbmRleE9mKCIzMDMiKSYmLTE9PT1hLmluZGV4T2YoIjQwMyIpfHwoaD0hMCk7Im51bWJlciI9PXR5cGVvZiBhJiYoYi5UPWEsYi5vKCJhZGVycm9yIiwKYSkpfXJldHVybiBofWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTtpZihiLmdldEVycm9yJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5nZXRFcnJvcil7dmFyIGg9Yi5nZXRFcnJvcigpO2lmKGguZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgaC5nZXRFcnJvckNvZGUmJmEoaC5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO3JldHVybn19Zm9yKHZhciBkIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSYmYltkXSYmYltkXS5hZEVycm9yJiZiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmYShiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTticmVha319LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpO3RoaXMuVD10aGlzLlR8fCExO3RoaXMuQWEoKTt2YXIgYT13aW5kb3cub3ZWaWRlbzthfHwoYT13aW5kb3cub3YudmlkZW8uUGxheWVyKTsKYSYmYS5yZWdpc3RlckV2ZW50JiYhdGhpcy5IcD8oYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuT25fUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX0FERVJST1IsZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCk7dGhpcy5zKCl9LmJpbmQodGhpcykpLHRoaXMuSHA9ITAsYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX1NUT1BQRUQsZnVuY3Rpb24oYSl7Yi5WcyhhKX0uYmluZCh0aGlzKSkpOmIuaXNQbGF5aW5nKCl8fHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksMTAwKX0sczpmdW5jdGlvbihiKXt0aGlzLkkoYil9fSl9KShjKTsKdmFyIEVhPWMua2x8fEVhOyhmdW5jdGlvbihjKXtjLm1sPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMuVWE9MTUwMDt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1bXTt3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8uc3luY2hyb25pemVyJiZ3aW5kb3cub3ZWaWRlby5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllciYmMDx3aW5kb3cub3ZWaWRlby5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllci5sZW5ndGgmJihiPXdpbmRvdy5vdlZpZGVvLnN5bmNocm9uaXplci5yZWdpc3RlcmVkUGxheWVyKTt3aW5kb3cub3YmJndpbmRvdy5vdi52aWRlbyYmd2luZG93Lm92LnZpZGVvLlBsYXllciYmd2luZG93Lm92LnZpZGVvLlBsYXllci5zeW5jaHJvbml6ZXImJndpbmRvdy5vdi52aWRlby5QbGF5ZXIuc3luY2hyb25pemVyLnJlZ2lzdGVyZWRQbGF5ZXImJjA8d2luZG93Lm92LnZpZGVvLlBsYXllci5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllci5sZW5ndGgmJgooYj13aW5kb3cub3YudmlkZW8uUGxheWVyLnN5bmNocm9uaXplci5yZWdpc3RlcmVkUGxheWVyKTtpZigwPGIubGVuZ3RoKWZvcih2YXIgYT0wO2E8Yi5sZW5ndGg7YSsrKXt2YXIgaD1uZXcgRGEoYlthXSk7aC5xYXx8dGhpcy5OKGgpfHwodGhpcy5QKGgpLChuZXcgRWEoaCx0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIEZhPWMubWx8fEZhLEdhPW5ldyBGYShyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5NaT10aGlzLmFbOF07dGhpcy5idD10aGlzLmFbN107dGhpcy52bj10aGlzLmFbN107dGhpcy5XaT10aGlzLmFbNV07dGhpcy5Daz10aGlzLmFbNF07dGhpcy5qPXRoaXMuYVs3XX1jLkp2PWI7Yi5wcm90b3R5cGU9e0xpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5NaTp0aGlzLmF0KGEpfSxhdDpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuYnQ6CnRoaXMudW4oYSl9LHVuOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy52bjp0aGlzLlZpKGEpfSxWaTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuV2k6dGhpcy5CayhhKX0sQms6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLkNrOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuajphfX19KShjKTt2YXIgSGE9Yy5Kdnx8SGEsdGM9bmV3IEhhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9dGMuTGkoNCk7KGZ1bmN0aW9uKGMpe2Mubms9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPWUuQ2coYiwiZWxlbWVudElEIik7dGhpcy5xaD1iLnBvc2l0aW9uaW5nO3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2guc3R5bGUud2lkdGg9CmIud2lkdGg7aC5zdHlsZS5taW5XaWR0aD1iLndpZHRoO2guc3R5bGUubWF4V2lkdGg9Yi53aWR0aDtoLnN0eWxlLmhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1pbkhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1heEhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1hcmdpbkxlZnQ9ImF1dG8iO2guc3R5bGUubWFyZ2luUmlnaHQ9ImF1dG8iOyJiZWZvcmUiPT10aGlzLnFoP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaCxhKToiYWZ0ZXIiPT10aGlzLnFoP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaCxhLm5leHRTaWJsaW5nKTphLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGgsYSk7dGhpcy5ZKGgpO3RoaXMuWihoKTt0aGlzLm5kPWh9LHBhdXNlOmZ1bmN0aW9uKCl7fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5uZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMubmQpfSx2YTpmdW5jdGlvbigpe3JldHVybiEwfSxzbzpmdW5jdGlvbigpe2UuV2codGhpcy5uZCk7ZS5CZSh0aGlzLm5kKTsKd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnNvKCl9LmJpbmQodGhpcyksNTApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuImlucmVhZCJ9LEdlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSl9KShjKTt2YXIgSWE9Yy5ua3x8SWE7KGZ1bmN0aW9uKGMpe2MubWs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMubygiZXh0ZXJuYWwiKTt0aGlzLkkoITApfX0pfSkoYyk7dmFyIEphPWMubWt8fEphOyhmdW5jdGlvbihjKXtjLm9rPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMuVWE9MTUwMDt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtJiZtLmlucmVhZCl7dmFyIGI9bS5pbnJlYWQsYT1lLkNnKGIsImVsZW1lbnRJRCIpO2UuV2coYSkmJihiPW5ldyBJYShiKSx0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBKYShiLHRoaXMuSykpLmcoKSkpO3RoaXMuSGI9d2luZG93LnNldFRpbWVvdXQodGhpcy5nLmJpbmQodGhpcyksCjEwMCl9ZWxzZSB0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksMTAwKX19KX0pKGMpO3ZhciBLYT1jLm9rfHxLYSxMYT1uZXcgS2Eocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMudnQ9dGhpcy5hWzVdO3RoaXMuTmo9dGhpcy5hWzJdO3RoaXMuSXY9dGhpcy5hWzRdO3RoaXMudXA9dGhpcy5hWzddO3RoaXMuS249dGhpcy5hWzhdO3RoaXMuQXM9dGhpcy5hWzRdO3RoaXMuWHA9dGhpcy5hWzNdO3RoaXMuS209dGhpcy5hWzRdO3RoaXMuU3M9dGhpcy5hWzVdO3RoaXMuWG89dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbNF19Yy5oaj1iO2IucHJvdG90eXBlPXt1dDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMudnQ6dGhpcy5NaihhKX0sTWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLk5qOnRoaXMuSHYoYSl9LEh2OmZ1bmN0aW9uKGEpe3JldHVybiA5PAphP3RoaXMuSXY6dGhpcy50cChhKX0sdHA6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnVwOnRoaXMuSm4oYSl9LEpuOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Lbjp0aGlzLnpzKGEpfSx6czpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuQXM6dGhpcy5XcChhKX0sV3A6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLlhwOnRoaXMuSm0oYSl9LEptOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuS206dGhpcy5ScyhhKX0sUnM6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlNzOnRoaXMuV28oYSl9LFdvOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5Ybzp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLmo6YX19fSkoYyk7dmFyIE1hPWMuaGp8fE1hLHVjPW5ldyBNYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPQp1Yy51dCg0KTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEpe3RoaXMudXJsPWE7dGhpcy5tZXRob2Q9IkdFVCI7dGhpcy5kYXRhPXt9fWMuYms9YjtiLnByb3RvdHlwZT17c2V0RGF0YTpmdW5jdGlvbihhKXt0aGlzLmRhdGE9YX0sRXQ6ZnVuY3Rpb24oYSl7dGhpcy5tZXRob2Q9YX0sYXBwZW5kRGF0YTpmdW5jdGlvbihhLGIpe3RoaXMuZGF0YVthXT1ifSxkbjpmdW5jdGlvbihhKXt0cnl7dGhpcy5hcHBlbmREYXRhKCJob21hZF9tYWNyb3MiLEpTT04uc3RyaW5naWZ5KGEpKX1jYXRjaChiKXt9fX19KShjKTt2YXIgeT1jLmJrfHx5OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsaCxkLGYpe3RoaXMuYmI9YTt0aGlzLnhnPXRoaXMuZ2k9ITE7dGhpcy5taD1kO3RoaXMuSmg9ITE7InN0cmluZyI9PT10eXBlb2YgYSYmKHRoaXMuYmI9bmV3IHkoYSkpO3ZhciBjPXRoaXMucWI9bmV3IFhNTEh0dHBSZXF1ZXN0O2Mub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWh8fAo0IT1jLnJlYWR5U3RhdGV8fDIwMCE9Yy5zdGF0dXMmJjIwMSE9Yy5zdGF0dXN8fGgoYyk7aWYoZCYmND09Yy5yZWFkeVN0YXRlJiYyMDAhPWMuc3RhdHVzJiYyMDEhPWMuc3RhdHVzKWQoYyk7ZWxzZSBpZig0PT1jLnJlYWR5U3RhdGUmJjA9PWMuc3RhdHVzJiZsJiZsLkZlKHRoaXMuYmIudXJsKSYmbC5OZCl7dmFyIGU9bmV3IHkoYS51cmwpO2UuRXQoIlBPU1QiKTtlLnNldERhdGEoe2hvbWFkX3Bpbmc6InRydWUifSk7KG5ldyBiKGUsZnVuY3Rpb24oYSl7dmFyIGI9ITE7dHJ5e2I9SlNPTi5wYXJzZShhLnJlc3BvbnNlVGV4dCl9Y2F0Y2goaCl7Yj0hMX1iJiZiLnBpbmcmJiJwb25nIj09Yi5waW5nJiYoYj0hMCk7Ynx8bC5rYSgicmVxdWVzdF9mYWlsZWRfbm9wb25nICIpfSxmdW5jdGlvbigpe2wua2EoInJlcXVlc3RfZmFpbGVkIil9KSkubG9hZCgpfWYmJjQhPWMucmVhZHlTdGF0ZSYmZihjKX0uYmluZCh0aGlzKX1jLmNrPWI7Yi5wcm90b3R5cGU9e2xvYWQ6ZnVuY3Rpb24oKXt2YXIgYT0KdGhpcy5iYi5kYXRhO2lmKCJzdHJpbmciIT10eXBlb2YgYSl7dmFyIGI9YSxhPSIiLGQ7Zm9yKGQgaW4gYilhKz0iJiIrZCsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGJbZF0pO2E9YS5zdWJzdHIoMSl9dGhpcy54ZyYmKGErPSImaG9tYWRfZm9sbG93X3JlZGlyZWN0cz10cnVlIik7dHJ5e3RoaXMuSmg/dGhpcy5xYi5vcGVuKHRoaXMuYmIubWV0aG9kLHRoaXMuYmIudXJsLCExKTp0aGlzLnFiLm9wZW4odGhpcy5iYi5tZXRob2QsdGhpcy5iYi51cmwsITApLHRoaXMuZ2l8fCh0aGlzLnFiLndpdGhDcmVkZW50aWFscz0hMCksMDxhLmxlbmd0aCYmdGhpcy5xYi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSxhWyJYLUhvbWFkLVBvc3QiXSYmdGhpcy5xYi5zZXRSZXF1ZXN0SGVhZGVyKCJYLUhvbWFkLVBvc3QiLCJ0cnVlIiksdGhpcy5xYi5zZW5kKGEpfWNhdGNoKGYpe2wmJmwuRmUodGhpcy5iYi51cmwpP2wuTmQ/Cmwua2EoInJlcXVlc3RfZmFpbGVkIik6ZS50cmFjaygiY2hlY2siLCJyZXF1ZXN0X2ZhaWxlZCIsITApOmwuRmUodGhpcy5iYi51cmwpLHRoaXMubWgmJnRoaXMubWgoKX1yZXR1cm4gdGhpcy5xYn19fSkoYyk7dmFyIE5hPWMuY2t8fE5hOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5LYT0hMTt0aGlzLnFjPSIiO3RoaXMuZWU9dGhpcy5wYz10aGlzLnViPW51bGw7dGhpcy5Wbz10aGlzLkdiPXRoaXMuZGg9ITE7dGhpcy5KYT0iIjt0aGlzLllnPSExO3RoaXMuRmE9dGhpcy5yZD0iIjt0aGlzLlVnPXRoaXMuWD10aGlzLmlzRW5hYmxlZD10aGlzLlplPSExO3RoaXMuQ2E9W107dGhpcy5LZz10aGlzLlpiPSIiO3RoaXMubGU9ITE7dGhpcy5wZj0wO3RoaXMuRWY9InN2bXBsYXllci5hZHZlcnRpc2luZy5IT01BRF9WRVJJRklFRCI7dGhpcy5DZj0ic3ZtcGxheWVyLmFkdmVydGlzaW5nLkhPTUFEX0JMT0NLRUQiO3RoaXMuS2I9InN2bXBsYXllci5hZHZlcnRpc2luZy5IT01BRF9OT0JMT0NLRVIiOwp0aGlzLmhjPSJzdm1wbGF5ZXIuYWR2ZXJ0aXNpbmcuSE9NQURfQURCTE9DS0VSIjt0aGlzLkRmPSJzdm1wbGF5ZXIuYWR2ZXJ0aXNpbmcuSE9NQURfQ09PS0lFQkxPQ0tFUiI7dGhpcy5hYz0iIjt0aGlzLmJjPVtdO3RoaXMuY2M9W107dGhpcy5MZD1bXTt0aGlzLiRiPSIiO3RoaXMucWY9MDt0aGlzLnZpZGVvcGxhemE9e307dGhpcy5BYz0hMTt0aGlzLnVvPXRoaXMuT2Q9bnVsbDt0aGlzLkZoPXRoaXMuTmM9dGhpcy5wZz10aGlzLnVmPXRoaXMuTmQ9dGhpcy5nZT10aGlzLlFjPSExO3RoaXMuZ2I9e2dsb2JhbDohMSxjbGllbnQ6ITEsY3VzdG9tZXI6ITF9O3RoaXMudGQ9MDt0aGlzLk1nPSExO3RoaXMuTGc9MUUzO3RoaXMuJGM9ITE7dGhpcy5QYT0xRTM7dGhpcy5NZj0iIn1jLmRrPWI7Yi5wcm90b3R5cGU9e2dldENvbmZpZzpmdW5jdGlvbigpe3JldHVybntpc0FjdGl2ZTp0aGlzLkthLGFkdGFncGFyYW1ldGVyOnRoaXMucWMsYWR0YWdtb2RpZmllcjp0aGlzLnViLGFkdGFnbW9kaWZpZXJBZHY6dGhpcy5wYywKYWR0YWdyZWdleDp0aGlzLmVlLGJpdHJhdGU6dGhpcy5QYSxqc3BvcHVwczp0aGlzLmRoLHNpZGVsb2Fkczp0aGlzLkdiLGRpc2FibGV0ZXN0czp0aGlzLlZvLGhvbWFkQWxpYXM6dGhpcy5KYSxpc0luaXRpYWxpemVkOnRoaXMuWWcsZ2xvYmFsQ29uZmlnOnRoaXMucmQsY2xpZW50Q29uZmlnOnRoaXMuRmEsaXNFbmFibGVkOnRoaXMuaXNFbmFibGVkLGlzVmVyaWZpZWQ6dGhpcy5YLGlzQmxvY2tlZDp0aGlzLlVnLHNlcnZlcjp0aGlzLkNhLHN2bUNvbmZpZzp0aGlzLlpiLGhvbWFkQWRwYXRoOnRoaXMuS2csZGlzYWJsZUNvb2tpZVRlc3Q6dGhpcy5sZSx0ZXN0Q29va2llQXR0ZW1wdHM6dGhpcy5wZixIT01BRF9WRVJJRklFRDp0aGlzLkVmLEhPTUFEX0JMT0NLRUQ6dGhpcy5DZixIT01BRF9OT0JMT0NLRVI6dGhpcy5LYixIT01BRF9BREJMT0NLRVI6dGhpcy5oYyxIT01BRF9DT09LSUVCTE9DS0VSOnRoaXMuRGYsdGVzdEhpZGU6dGhpcy5hYyx0ZXN0VGFnczp0aGlzLmJjLHRlc3RUYWdzSlM6dGhpcy5jYywKdGVzdFRhZ3NYSFI6dGhpcy5MZCx0ZXN0Q29va2llOnRoaXMuJGIsdGhyb3R0bGU6dGhpcy5xZix2aWRlb3BsYXphOnRoaXMudmlkZW9wbGF6YSxob21hZFRlc3RlZDp0aGlzLkFjLGNoZWNrZWRIb21hZFN0YXR1c0NhbGxiYWNrOnRoaXMudW8sYWRCbG9ja2VyRGV0ZWN0ZWQ6dGhpcy5RYyxibG9ja2VkV2FzQ2FsbGVkOnRoaXMuZ2UsdXNlU3RyaWN0Q2hlY2tzOnRoaXMuTmQsdXNlU3RyaWN0Q29uZmlnQ2hlY2tzOnRoaXMudWYsY29uZmlnRmFpbHVyZXM6dGhpcy5nYixzaXRlQ29uZmlnOnRoaXMuYWIsc2VydmVySWQ6dGhpcy5CaCxlbmFibGVRdWFydGlsZVRyYWNraW5nOnRoaXMudmMsdnBhaWQ6dGhpcy5OYyxza2lwQWxsb3dlZDp0aGlzLkZoLHZtYXBzOnRoaXMuY2ksYWx0ZXJuYXRlX2NsaWNrdGhyb3VnaDp0aGlzLiRjLGFkRmFsbGJhY2tVUkw6dGhpcy5NZn19LERxOmZ1bmN0aW9uKCl7dmFyIGE9ITEsYjtmb3IoYiBpbiB0aGlzLmdiKSJib29sZWFuIj09dHlwZW9mIHRoaXMuZ2JbYl0mJgoxPT10aGlzLmdiW2JdJiYoYT0hMCk7cmV0dXJuIGF9LGRmOmZ1bmN0aW9uKGEpe3RoaXMuZ2JbYV09ITB9LGZxOmZ1bmN0aW9uKCl7dmFyIGE9W10sYjtmb3IoYiBpbiB0aGlzLmdiKSJib29sZWFuIj09dHlwZW9mIHRoaXMuZ2JbYl0mJjE9PXRoaXMuZ2JbYl0mJmEucHVzaChiKTtyZXR1cm4gYX0sS2Q6ZnVuY3Rpb24oYSl7YT1hfHwiIjtpZigic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIGE7YT1hLnJlcGxhY2UoIlt0aW1lXSIsTWF0aC5yb3VuZCgobmV3IERhdGUpLmdldFRpbWUoKS8xRTMpKTthPWEucmVwbGFjZSgiW3RpbWVNU10iLChuZXcgRGF0ZSkuZ2V0VGltZSgpKTthPWEucmVwbGFjZSgiW3RpbWVzdGFtcF0iLChuZXcgRGF0ZSkuZ2V0VGltZSgpKTthPWEucmVwbGFjZSgiW3JhbmRvbV0iLHRoaXMuRWIoMTApLnRvU3RyaW5nKCkpO2E9YS5yZXBsYWNlKCJbZG9jdW1lbnRVUkxdIixkb2N1bWVudC5VUkwpO2E9YS5yZXBsYWNlKCJbZG9jdW1lbnRCYXNlVVJJXSIsZG9jdW1lbnQuYmFzZVVSSSk7CnJldHVybiBhPWUuUG4oYSl9LHphOmZ1bmN0aW9uKGEsYixkKXt2YXIgZj0iIixjPSIiLGU9IiIsZz0iIjtpZighdGhpcy5LYSYmIWIpcmV0dXJuIG5ldyB5KGEpO2Y9dGhpcy5FZShhKTtjPXRoaXMubGEoYSk7Zj8odGhpcy5DYygpP2U9YTplPWMucHJvdG9jb2wrIjovLyIrYy5hdXRob3JpdHkrIi8iLGc9Yy5wYXRoLnN1YnN0cigxKSk6KGU9dGhpcy5EZCgpLGc9Yy5wYXRoLnN1YnN0cigxKSsoYy5xdWVyeT8iPyIrYy5xdWVyeToiIikpO2QmJih0aGlzLnFjfHx0aGlzLnVifHx0aGlzLnBjfHx0aGlzLmVlKSYmKGc9dGhpcy5XcihnKSk7YT1uZXcgeShlKTthLnVybD1lO2U9IiI7ZT1mP2MuaG9zdC5zcGxpdCgiLiIpLnNsaWNlKDEpLmpvaW4oIi0iKTp0aGlzLmhxKGMuaG9zdCk7YS5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9ZTthLmRhdGEuaG9tYWRfdXJsX3N1ZmZpeD1nO2EuZGF0YS5ob21hZF91cmxfc3VmZml4X2Jhc2U2ND10aGlzLnZiKGcpO2EubWV0aG9kPSJQT1NUIjsKcmV0dXJuIGF9LEVlOmZ1bmN0aW9uKGEpe3ZhciBiPSExLGQ9bmV3IFJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPyhbdy4tXSopOj8uKihbMC05XSspPy8/KFthLWYwLTldezQwfSkvPyQiLCJnIik7KGQ9ZC5leGVjKGEpKSYmKGRbMl18fGRbNV0pP2I9ITA6dGhpcy5DYygpJiYoZD1uZXcgUmVnRXhwKCJeKGh0dHBzPyk6Ly8oW3cuLV0qKTo/LiooWzAtOV0rKT8vKFthLWYwLTldezQwfSkvPyQiLCJnIiksKGQ9ZC5leGVjKGEpKSYmZFs0XSYmKGI9ITApKTtyZXR1cm4gYn0sQ2M6ZnVuY3Rpb24oKXt2YXIgYT0hMSxiPSIiO3RoaXMuQ2EmJnRoaXMuQ2EubGVuZ3RoJiYwPHRoaXMuQ2EubGVuZ3RoJiYoYj10aGlzLkNhWzBdLGI9Yi5yZXBsYWNlKCJodHRwczovLyIsIiIpLGI9Yi5yZXBsYWNlKCJodHRwOi8vIiwiIiksYj1iLnJlcGxhY2UoIi8vIiwiIiksYT0oYT1iLnNwbGl0KCIuIikpJiZhWzBdJiYiW2hhc2hdIj09YVswXT8hMTohMCk7cmV0dXJuIGF9LEZlOmZ1bmN0aW9uKGEpe3ZhciBiPQohMSxkPVJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPy4qIiwiZyIpLmV4ZWMoYSk7ZCYmKGRbMl18fGRbNV0pP2I9ITA6Yj10aGlzLkVlKGEpO3JldHVybiBifSxocTpmdW5jdGlvbihhKXt2YXIgYj0iIixkPSIiO2lmKCJzdHJpbmciPT09dHlwZW9mIHRoaXMuSmEmJjA8dGhpcy5KYS5sZW5ndGgpcmV0dXJuIHRoaXMuSmE7Zm9yKGQgaW4gdGhpcy5KYSlpZihiPXRoaXMuSmFbZF0sYi5oYXNPd25Qcm9wZXJ0eSgidXJsIikmJmIudXJsPT09YSlyZXR1cm4gYi5TdjtyZXR1cm4ibm9uZSJ9LHVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2FbdGhpcy5CaF19LERkOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy51ZCgpLGI9dGhpcy5FaCgobmV3IERhdGUpLmdldFRpbWUoKSsiIiksZD0iMWFiY2RmIi5zcGxpdCgiIik7cmV0dXJuIGEucmVwbGFjZSgiW2hhc2hdIixiLnNsaWNlKDAsLTEpKyIiK2RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmQubGVuZ3RoKV0pfSxqaDpmdW5jdGlvbihhLApiLGQpe2E9ITE7Yj0iIjtpZihkLmV2YWwpdHJ5e2I9ZXZhbCgiKCIrZC5ldmFsKyIpKCkiKX1jYXRjaChmKXthPSEwfWVsc2UgYT0hMDthJiYiS0VFUCIhPT1kLmZhbGxiYWNrJiYoYj1kLmZhbGxiYWNrKTtyZXR1cm4gYn0sVnI6ZnVuY3Rpb24oYSxiKXt2YXIgZD1lLmxhKGEpLGY9IiIsZj0iIixjO2ZvcihjIGluIGIpe2lmKGJbY10uc3VidmFsdWVzKXtmb3IodmFyIGc9ZGVjb2RlVVJJQ29tcG9uZW50KGQucXVlcnlLZXlbY10pLnNwbGl0KCImIiksZj17fSxIPTA7SDxnLmxlbmd0aDtIKyspe3ZhciBrPWdbSF0uc3BsaXQoIj0iKTtmW2tbMF1dPWtbMV19Zm9yKHZhciBsIGluIGJbY10uc3VidmFsdWVzKWZbbF09dGhpcy5qaChmW2xdLGwsYltjXS5zdWJ2YWx1ZXNbbF0pO2c9W107Zm9yKGwgaW4gZilnLnB1c2gobCsiPSIrZltsXSk7Zj1nPWVuY29kZVVSSUNvbXBvbmVudChnLmpvaW4oIiYiKSl9ZWxzZSBmPXRoaXMuamgoZC5xdWVyeUtleVtjXSxjLGJbY10pO2QucXVlcnlLZXlbY109CmZ9bD1bXTtmb3IoYyBpbiBkLnF1ZXJ5S2V5KWwucHVzaChjKyI9IitkLnF1ZXJ5S2V5W2NdKTtyZXR1cm4gZj1kLmhvc3QrZC5wYXRoKyI/IitsLmpvaW4oIiYiKX0sV3I6ZnVuY3Rpb24oYSl7dGhpcy5xYyYmKGErPXRoaXMucWMpO2lmKHRoaXMudWIpZm9yKHZhciBiIGluIHRoaXMudWIpdGhpcy51Yi5oYXNPd25Qcm9wZXJ0eShiKSYmKGE9YS5yZXBsYWNlKGIsdGhpcy51YltiXSkpO3RoaXMucGMmJihhPXRoaXMuVnIoYSx0aGlzLnBjKSk7cmV0dXJuIGF9LGw6ZnVuY3Rpb24oYSxiLGQsZixjLGUpe2w9dGhpczt0aGlzLllnPSEwO3RoaXMucmQ9YTt0aGlzLkZhPWI7dGhpcy5aZT1kO3RoaXMuT2Q9Zjt0aGlzLnNjPWM7dGhpcy5hYj1lfHx7fTt0aGlzLkpyKCk7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLkZhKXRoaXMuSHIoKTtlbHNlIGlmKCJvYmplY3QiIT09dHlwZW9mIHRoaXMuRmEpdHJ5e3RoaXMuRmE9YigpLHRoaXMuZGQoKX1jYXRjaChnKXt0aGlzLmthKCJub0NsaWVudENvbmZpZyIpfX0sCm5iOmZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7dHJ5e2I9bmV3IEV2ZW50KGEpfWNhdGNoKGQpe2I9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksYi5pbml0RXZlbnQoImN1c3RvbSIsITAsITEpfXJldHVybiBifSxKcjpmdW5jdGlvbigpe3RoaXMuTGEobmV3IHkodGhpcy5yZCt0aGlzLmFlKCJnbG9iYWwiKSksdGhpcy56cS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7dGhpcy5kZigiZ2xvYmFsIik7Im9iamVjdCI9PXR5cGVvZiBfY2xpZW50Q29uZmlnJiZ0aGlzLmRkKCl9LmJpbmQodGhpcyksITApfSxIcjpmdW5jdGlvbigpe3RoaXMuTGEobmV3IHkodGhpcy5GYSt0aGlzLmFlKCJjbGllbnQiLC0xIT10aGlzLkZhLmluZGV4T2YoIj8iKSkpLHRoaXMuZGQuYmluZCh0aGlzKSxmdW5jdGlvbigpe3RoaXMuZGYoImNsaWVudCIpO3RoaXMua2EoImNsaWVudENvbmZpZ0NvdWxkTm90QmVMb2FkZWQiKX0uYmluZCh0aGlzKSwhMCl9LGFlOmZ1bmN0aW9uKGEsYil7dmFyIGQ7ZD0oYj8iJiI6CiI/IikrKCJjYWNoZT0iK3RoaXMuRWIoKSk7dGhpcy5hYiYmdGhpcy5hYi5ub0NsaWVudENvbmZpZ0NhY2hlQnVzdGVyJiYiY2xpZW50Ij09YSYmKGQ9IiIpO3RoaXMuYWImJnRoaXMuYWIubm9DYWNoZUJ1c3RlciYmKGQ9IiIpO3JldHVybiBkfSxrYTpmdW5jdGlvbihhKXtpZighdGhpcy5nZSl7dGhpcy5nZT0hMDt2YXIgYj1mdW5jdGlvbigpe2Zvcih2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSxiPTA7YjxhLmxlbmd0aDtiKyspe2lmKGFbYl0mJmFbYl0ucGF1c2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBhW2JdLnBhdXNlKXRyeXthW2JdLnBhdXNlKCl9Y2F0Y2goaCl7fWFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKX1hPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKTtmb3IoYj0wO2I8YS5sZW5ndGg7YisrKWFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTthPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInZpZGVvLXdyYXBwZXIiKTsKZm9yKGI9MDtiPGEubGVuZ3RoO2IrKylhW2JdJiZhW2JdLnBhcmVudE5vZGUmJmFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTthPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInZpZGVvcGxheWVyIik7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKylhW2JdJiZhW2JdLnBhcmVudE5vZGUmJmFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTtpZih3aW5kb3cuc2VsZiE9d2luZG93LnRvcClmb3IoYT13aW5kb3cuZG9jdW1lbnQ7YS5oYXNDaGlsZE5vZGVzKCk7KWEucmVtb3ZlQ2hpbGQoYS5sYXN0Q2hpbGQpfTsiNHBsYXllcnMuZGUiPT1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpJiYodGhpcy5zYz0hMSk7dGhpcy5zYyYmImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLnNjP3RoaXMuc2MoKTooYigpLHdpbmRvdy5zZXRJbnRlcnZhbChiLDUwMCkpO3RoaXMuWD10aGlzLlVnPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLkNmKSk7CnRoaXMuSWIoKTtlLndjKGsuUXMpOyhiPWUuU2IodGhpcy51ZCgpKSl8fChiPWUuU2IoZG9jdW1lbnQubG9jYXRpb24uaHJlZikpO2F8fChhPSJ1bmtvd24iKTtlLnRyYWNrKCJzdGF0c19oZF9wZW5hbHR5IixhLCEwKX19LHpxOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLlgpe3ZhciBiPXt9O3RyeXtiPUpTT04ucGFyc2UoYS5yZXNwb25zZVRleHQpfWNhdGNoKGQpe2IuZW5hYmxlZD0iZmFsc2UifXRoaXMuaXNFbmFibGVkPXRoaXMuZGMoYi5lbmFibGVkKTt0aGlzLlg9IXRoaXMuaXNFbmFibGVkO3RoaXMuaXNFbmFibGVkPyJvYmplY3QiIT10eXBlb2YgdGhpcy5GYXx8dGhpcy5aYnx8dGhpcy5KYXx8dGhpcy5kZCgpOih0aGlzLkthPXRoaXMuaXNFbmFibGVkPSExLHRoaXMuWD0hMCxkb2N1bWVudC5kaXNwYXRjaEV2ZW50KHRoaXMubmIodGhpcy5LYikpLHRoaXMuSWIoKSl9fSxkZDpmdW5jdGlvbihhKXt2YXIgYj0hMTthJiYoYj1hLnJlc3BvbnNlVGV4dCk7YT17fTtpZihiKXRyeXthPQpKU09OLnBhcnNlKGIpfWNhdGNoKGQpe2E9dGhpcy5GYX1lbHNlIGE9dGhpcy5GYTt0aGlzLmlzRW5hYmxlZD10aGlzLmRjKGEuZW5hYmxlZCk7dGhpcy5YPSF0aGlzLmlzRW5hYmxlZDt0aGlzLkNhPWEuc2VydmVyfHxbXTtmb3IoYj0wO2I8dGhpcy5DYS5sZW5ndGg7YisrKXRoaXMuQ2FbYl09dGhpcy5DYVtiXS5yZXBsYWNlKCJkYW1vaC53aWtpYS5jb20iLCJkYW1vaC53aWtpYS5jb20uc3Zvbm0tYWxpYXMuY29tIik7dGhpcy5aYj1hLmNvbmZpZ3x8IiI7dGhpcy5KYT1hLmFsaWFzfHxudWxsO3RoaXMuS2c9YS5hZHBhdGh8fCIiO3RoaXMubGU9YS5kaXNhYmxlY29va2lldGVzdHx8ITE7dGhpcy5CaD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqdGhpcy5DYS5sZW5ndGgpO3RoaXMuaXNFbmFibGVkJiZ0aGlzLlpiJiZ0aGlzLkphJiZ0aGlzLkNhLmxlbmd0aD90aGlzLkRjKCExKToodGhpcy5LYT10aGlzLmlzRW5hYmxlZD0hMSx0aGlzLlg9ITAsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh0aGlzLm5iKHRoaXMuS2IpKSwKdGhpcy5JYigpKX0sRGM6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWCl7dmFyIGI9e307aWYoYSl7dmFyIGI9bmV3IHkodGhpcy5EZCgpKSxkPXRoaXMubGEodGhpcy5aYik7Yi5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9InMzaG9tYWRnbG9iYWxjb25maWdzIjtiLmRhdGEuaG9tYWRfdXJsX3N1ZmZpeD1kLnBhdGguc3Vic3RyKDEpLnJlcGxhY2UoImhvbWFkLWdsb2JhbC1jb25maWdzLnNjaG5lZXZvbm1vcmdlbi5jb20vIiwiIik7Yi5tZXRob2Q9IlBPU1QifWVsc2UgYj1uZXcgeSh0aGlzLlpiK3RoaXMuYWUoImN1c3RvbWVyIikpO3RoaXMuTGEoYix0aGlzLmR1LmJpbmQodGhpcyksZnVuY3Rpb24oKXt0aGlzLmRmKCJjdXN0b21lciIpO2E/dGhpcy5MbD90aGlzLmthKCJub1NWTUNvbmZpZyIpOih0aGlzLkxsPSEwLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5EYyghMCl9LmJpbmQodGhpcyksMTAwKSk6dGhpcy5EYyghMCl9LmJpbmQodGhpcyksITApfX0sZHU6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWCl7YT0KYS5yZXNwb25zZVRleHQ7dmFyIGI9e307dHJ5e2I9SlNPTi5wYXJzZShhKX1jYXRjaChkKXtpZighdGhpcy5BYyYmdGhpcy5pc0VuYWJsZWQpe3RoaXMuQWM9ITA7dGhpcy5EYyghMCk7cmV0dXJufX10aGlzLk5kPXRoaXMuZGMoYi5zdHJpY3QpO3RoaXMudWY9dGhpcy5kYyhiLnN0cmljdF9jb25maWdfZW5hYmxlZCk7dGhpcy5wZz1iLmR1cmF0aW9uX2NoZWNrX3BlbmFsdHlfZGlzYWJsZWR8fCExO3RoaXMudmM9dGhpcy5kYyhiLmVuYWJsZVF1YXJ0aWxlVHJhY2tpbmcpO3RoaXMuaXNFbmFibGVkPXRoaXMuZGMoYi5lbmFibGVkKTt0aGlzLmFjPWIudGVzdGhpZGV8fCIiO3RoaXMuY2M9Yi50ZXN0YWR0YWdzanN8fGIudGVzdGFkdGFnc3x8W107dGhpcy5MZD1iLnRlc3RhZHRhZ3N4aHJ8fFtdO3RoaXMucWM9Yi5hZHRhZ3BhcmFtZXRlcnx8IiI7dGhpcy51Yj1iLmFkdGFnbW9kaWZpZXJ8fG51bGw7dGhpcy5wYz1iLmFkdGFnbW9kaWZpZXJfYWR2fHxudWxsO3RoaXMuZWU9Yi5hZHRhZ3JlZ2V4fHwKbnVsbDt0aGlzLmRoPWIuanNwb3B1cHN8fCExO3RoaXMuR2I9Yi5zaWRlbG9hZHN8fCExO3RoaXMuTmM9Yi52cGFpZHx8ITE7dGhpcy5hYi52cGFpZD10aGlzLk5jO3RoaXMuRmg9Yi5za2lwYWxsb3dlZHx8ITE7dGhpcy5hZD1iLmNhcHRpb25fZHVyYXRpb258fCExO3RoaXMuY2k9Yi52bWFwc3x8IiI7dGhpcy4kYz1iLmFsdGVybmF0ZV9jbGlja3Rocm91Z2h8fCExO3RoaXMuUGE9Yi5iaXRyYXRlfHwxRTM7dGhpcy5NZj1iLmFkX2ZhbGxiYWNrX1VSTHx8IiI7dGhpcy4kYj1iLnRlc3QzcmRwYXJ0eWNvb2tpZSYmYi50ZXN0M3JkcGFydHljb29raWUgaW5zdGFuY2VvZiBBcnJheT90aGlzLnBxKGIudGVzdDNyZHBhcnR5Y29va2llKTpiLnRlc3QzcmRwYXJ0eWNvb2tpZXx8IiI7dGhpcy5sZSYmKHRoaXMuJGI9bnVsbCk7dGhpcy5xZj1iLnRocm90dGxlfHwwO3RoaXMudmlkZW9wbGF6YT1iLnZpZGVvcGxhemF8fHt9OyF0aGlzLkFjJiZ0aGlzLmlzRW5hYmxlZD8odGhpcy5BYz0hMCx0aGlzLkRjKCEwKSk6CnRoaXMuaXNFbmFibGVkJiYhdGhpcy55dSgpJiYodGhpcy5hY3x8dGhpcy5jY3x8dGhpcy5iY3x8dGhpcy4kYnx8dGhpcy5MZCk/dGhpcy5aZT8odGhpcy5LYT10aGlzLlg9ITAsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh0aGlzLm5iKHRoaXMuS2IpKSx0aGlzLmllKCksdGhpcy5JYigpKTp0aGlzLmx1KCk6KHRoaXMuaXNFbmFibGVkPSExLHRoaXMubXUoKSl9fSxsdTpmdW5jdGlvbigpe3RoaXMua3UoKTt0aGlzLm51KCl9LG51OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4idmFyIGV2dCA9IHt9O2lmICh0eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7ZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KCciK2ErIicpO30gZWxzZSB7ZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7ZXZ0LmluaXRDdXN0b21FdmVudCgnIithKyInLCBmYWxzZSwgZmFsc2UsIHt9KTt9d2luZG93LnBhcmVudC5kb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2dCk7In0KdmFyIGI9ImlubGluZWV2YWxkYXRhIixkPTA7dHJ5e3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2Yud2lkdGg9MTtmLmhlaWdodD0xO2Yuc3R5bGUuZGlzcGxheT0ibm9uZSI7Zi5zcmM9ImFib3V0OmJsYW5rIjt2YXIgYz1lLmJhKDEwKSxnPWUuYmEoMTApLEg9ZS5iYSgxMCk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihjLGZ1bmN0aW9uKCl7ZCsrO2I9Yi5yZXBsYWNlKCJkYXRhIiwiIil9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGcsZnVuY3Rpb24oKXtkKys7Yj1iLnJlcGxhY2UoImV2YWwiLCIiKX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoSCxmdW5jdGlvbigpe2QrKztiPWIucmVwbGFjZSgiaW5saW5lIiwiIil9KTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYpO2YuY29udGVudFdpbmRvdy5kb2N1bWVudC53cml0ZShhdG9iKCJQR2gwYld3K1BHaGxZV1ErUEhOamNtbHdkQ0IwZVhCbFBTSjBaWGgwTDJwaGRtRnpZM0pwY0hRaVBnPT0iKSsKYShIKSthdG9iKCJQQzl6WTNKcGNIUStQSE5qY21sd2RDQjBlWEJsUFNKMFpYaDBMMnBoZG1GelkzSnBjSFFpUG1WMllXd29JZz09IikrYShnKSthdG9iKCJJaWs4TDNOamNtbHdkRDQ4YzJOeWFYQjBJSFI1Y0dVOUluUmxlSFF2YW1GMllYTmpjbWx3ZENJZ2MzSmpQU0prWVhSaE9uUmxlSFF2YW1GMllYTmpjbWx3ZER0aVlYTmxOalFzIikrZS52YihhKGMpKSthdG9iKCJJajQ4TDNOamNtbHdkRDQ4TDJobFlXUStQR0p2WkhrK1BDOWliMlI1UGp3dmFIUnRiRDQ9IikpfWNhdGNoKGspe313aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGYpfWNhdGNoKGEpe31pZigzIT1kKXt2YXIgYz1lLnVjKCk7aWYoKGMuaXNDaHJvbWV8fGMuaXNGaXJlZm94KSYmIWMuaXNFZGdlJiYhZS5UYSgpKXtpZih0aGlzLmFiJiZ0aGlzLmFiLnBsYXllciYmdGhpcy5hYi5wbGF5ZXIubGVuZ3RoKXtlLnRyYWNrKCJzdGF0c19oZF9jc3BfaGRwIixiLCEwKTsKcmV0dXJufXRoaXMua2EoImNzcF8iK2IpfWUudHJhY2soInN0YXRzX2hkX2NzcCIsYiwhMCl9fS5iaW5kKHRoaXMpLDFFMyl9LG11OmZ1bmN0aW9uKCl7dGhpcy5YPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLktiKSk7dGhpcy5JYigpfSxMYzpmdW5jdGlvbihhKXt0aGlzLlFjPSEwO3RoaXMuWHx8KHRoaXMuWD10aGlzLkthPSEwLGRvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYihhKSksdGhpcy5JYigpLHRoaXMuaWUoKSl9LGt1OmZ1bmN0aW9uKCl7aWYodGhpcy5hYyl7dmFyIGE9ZS51YygpO2lmKChhLmlzQ2hyb21lfHxhLmlzRmlyZWZveCkmJnRoaXMuYmgoKSl0aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZEhpZGUoKSBzdGV2ZSBpcyBhbGl2ZSIpO2Vsc2V7YT0hMTt0cnl7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yi5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLmFjKTtiLnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuYWMpOwpiLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJ3aWR0aDoxcHg7aGVpZ2h0OjFweDttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4O2JhY2tncm91bmQtY29sb3I6I2ZmMDAwMCIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYik7dmFyIGQ9MD09PWIub2Zmc2V0V2lkdGh8fDA9PT1iLm9mZnNldEhlaWdodDtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGIpO2E9ZH1jYXRjaChmKXt9YT90aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZEhpZGUoKSBhZCBlbGVtZW50IHdhcyBoaWRkZW4iKTp0aGlzLk5oKCl9fWVsc2UgdGhpcy5OaCgpfSxNaDpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXtmPWQuc2hpZnQoKS5yZXBsYWNlKCJbcmFuZG9tXSIsdGhpcy5FYigpKTt0aGlzLnF1KGYsMDxkLmxlbmd0aD9hLmJpbmQodGhpcyk6dGhpcy5tZi5iaW5kKHRoaXMpLGIuYmluZCh0aGlzKSl9ZnVuY3Rpb24gYigpe3RoaXMuTGModGhpcy5oYywibiBIb21hZFV0aWwudGVzdEFkQ2FsbCgpIGFkIGNhbGwgdG8gJyIrCmYrIicgd2FzIGJsb2NrZWQiKX1pZigodGhpcy5iYz10aGlzLkxkKSYmdGhpcy5iYy5sZW5ndGgpe3ZhciBkPXRoaXMuYmMuc2xpY2UoKSxmPSIiO2EuYmluZCh0aGlzKSgpfWVsc2UgdGhpcy5tZigpfSxxdTpmdW5jdGlvbihhLGIsZCl7ZnVuY3Rpb24gZigpe2MoKSYmYigpfWZ1bmN0aW9uIGMoKXtyZXR1cm4gZT8od2luZG93LmNsZWFyVGltZW91dChlKSwhMCk6ITF9dmFyIGU9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtmKCl9LDNFMyk7dGhpcy5MYShuZXcgeShhKSxmLGZ1bmN0aW9uKCl7YygpJiZkKCl9KX0sTmg6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7Zj1kLnNoaWZ0KCkucmVwbGFjZSgiW3JhbmRvbV0iLHRoaXMuRWIoKSk7dGhpcy5ydShmLDA8ZC5sZW5ndGg/YS5iaW5kKHRoaXMpOnRoaXMuTWguYmluZCh0aGlzKSxiLmJpbmQodGhpcykpfWZ1bmN0aW9uIGIoKXt0aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZENhbGxKUygpIGFkIGNhbGwgdG8gJyIrCmYrIicgd2FzIGJsb2NrZWQiKX1pZih0aGlzLmNjJiZ0aGlzLmNjLmxlbmd0aCl7dmFyIGQ9dGhpcy5jYy5zbGljZSgpLGY7YS5iaW5kKHRoaXMpKCl9ZWxzZSB0aGlzLk1oKCl9LHJ1OmZ1bmN0aW9uKGEsYixkKXtmdW5jdGlvbiBmKCl7ZSgpJiZiKCl9ZnVuY3Rpb24gYygpe2UoKSYmZCgpfWZ1bmN0aW9uIGUoKXtyZXR1cm4gZz8od2luZG93LmNsZWFyVGltZW91dChnKSwhMCk6ITF9dmFyIGc9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtmKCl9LDNFMyk7dHJ5e3dpbmRvdy5vbmVycm9yPWZ1bmN0aW9uKGIsZCl7ZD09YSYmZSgpJiZjKCl9O3ZhciBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoayk7ay5zZXRBdHRyaWJ1dGUoImFzeW5jIiwiYXN5bmMiKTtrLnNldEF0dHJpYnV0ZSgiZGVmZXIiLCJkZWZlciIpO2sub25sb2FkPWY7ay5vbmVycm9yPWM7ay5zcmM9YTtrLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwKYyl9Y2F0Y2gobCl7ZigpfX0sbWY6ZnVuY3Rpb24oKXt0aGlzLiRiPyh0aGlzLnBmKyssdGhpcy5MYShuZXcgeSh0aGlzLiRiKSx0aGlzLmp1LmJpbmQodGhpcyksZnVuY3Rpb24oKXt0aGlzLm5mKCJDQ0MiKX0uYmluZCh0aGlzKSkpOnRoaXMuS2goKX0sbmY6ZnVuY3Rpb24oYSl7dGhpcy5MYyh0aGlzLkRmLCJuIEhvbWFkVXRpbC50ZXN0M3JkUGFydHlDb29raWUoKSBjYW5ub3Qgc2V0IDNyZCBwYXJ0eSBjb29raWUgIithKX0sanU6ZnVuY3Rpb24oYSl7YT1hLnJlc3BvbnNlVGV4dDt2YXIgYj0hMTt0cnl7Yj1KU09OLnBhcnNlKGEpfWNhdGNoKGQpe31iJiZiLnN0YXR1cz8idHJpZ2dlci1zZXQiPT1iLnN0YXR1cz8zPnRoaXMucGY/dGhpcy5tZigpOnRoaXMubmYoIkJCQiIpOiJhbHJlYWR5LXNldCI9PWIuc3RhdHVzJiZ0aGlzLktoKCk6dGhpcy5uZigiQUFBIil9LEtoOmZ1bmN0aW9uKCl7dGhpcy5YPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLktiKSk7CnRoaXMuSWIoKTt0aGlzLmllKCl9LGJoOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PWFkZEV2ZW50TGlzdGVuZXIudG9TdHJpbmcoKS5pbmRleE9mKCJuYXRpdmUgY29kZSIpJiYtMT09YWRkRXZlbnRMaXN0ZW5lci50b1N0cmluZygpLmluZGV4T2YoImFkZEV2ZW50TGlzdGVuZXIiKX0sSWI6ZnVuY3Rpb24oKXt2YXIgYT0iMCIsYj0iMCI7dHJ5e2UuVGEoKSYmKGE9IjEiKX1jYXRjaChkKXthPTJ9dGhpcy5RYyYmKGI9IjEiKTtlLnRyYWNrKCJzdGF0c19oZF9tb2JpbGVfYWIiLGErIiIrYiwhMCk7IjEiPT09YiYmKGUuQmEoInQtb25saW5lLmRlIil8fGUuQmEoImdpZ2EuZGUiKXx8ZS5CYSgid2VsdC5kZSIpKSYmZS50cmFjaygic3RhdHNfaGRfYWJfaXNTdGV2ZSIsdGhpcy5iaCgpLCEwKTtkb2N1bWVudC5kaXNwYXRjaEV2ZW50KHRoaXMubmIodGhpcy5FZikpO3RoaXMuT2QmJiJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5PZCYmdGhpcy5PZCgpfSxybzpmdW5jdGlvbigpe2lmKHRoaXMudWYmJgp0aGlzLkRxKCkpe3ZhciBhPXRoaXMuZnEoKTthJiZhLmpvaW4mJmUudHJhY2soImNvbmZpZ19mYWlsZWQiLGEuam9pbigiXyIpLCEwKX19LFJoOmZ1bmN0aW9uKGEpe2F8fChhPSIiKTtpZigic3RyaW5nIiE9PXR5cGVvZiBhKXRyeXthPWEudG9TdHJpbmcoKX1jYXRjaChiKXthPSJjb3VsZF9ub3RfY29udmVydF90b19zdHJpbmcifWE9YS50cmltKCk7ZS50cmFjaygic3RhdHNfaGRfYWN0aXZhdGVkIixhLCEwKX0sTGE6ZnVuY3Rpb24oYSxiLGQsZixjLGcpe3RoaXMudGR8fCh0aGlzLnRkPTApO3RoaXMudGQrKzt0aGlzLnRkPnRoaXMuTGcmJiF0aGlzLk1nJiYodGhpcy5NZz0hMCxlLnRyYWNrKCJzdGF0c19oZF9yZXF1ZXN0Y291bnQiLHRoaXMuTGcsITApKTthPW5ldyBOYShhLGIsZCk7ZiYmKGEuZ2k9ITApO2MmJmUubXIoKSYmKGEueGc9ITApO2cmJihhLkpoPSEwKTtyZXR1cm4gYS5sb2FkKCl9LGVnOmZ1bmN0aW9uKCl7ZS5UYSgpfHxlLllhKCJodHRwOi8vZDM3OTk2NGF5bWV4MnguY2xvdWRmcm9udC5uZXQvY2hlY2sueG1sP2VtcHR5PXRydWUiLAoiaG9tYWRzdGF0aWN2YXN0Iix7aG9tYWRfaGFzaF9ndWVzc2VkOiJ0cnVlIn0sZnVuY3Rpb24oYSl7dmFyIGI9bnVsbCxkPW51bGwsZj0iIjt0cnl7KGI9YS5yZXNwb25zZVhNTCl8fChiPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEucmVzcG9uc2VUZXh0LCJ0ZXh0L3htbCIpKSxkPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkIilbMF19Y2F0Y2goYyl7dGhpcy5rYSgibWVkaWFmaWxlX25veG1sIik7cmV0dXJufWlmKGQpaWYoYT1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJNZWRpYUZpbGUiKSlpZihhWzBdJiYoYT1hWzBdKSxhKXtmPWEmJmEuY2hpbGROb2RlcyYmYS5jaGlsZE5vZGVzWzBdP2EuY2hpbGROb2Rlc1swXS5ub2RlVmFsdWU6IiI7dGhpcy5DYygpfHwoYT10aGlzLmxhKGYpLGY9YS5wcm90b2NvbCsiOi8vIithLmhvc3QpO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7ZS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXtlLm5ldHdvcmtTdGF0ZT09CmUuTkVUV09SS19OT19TT1VSQ0UmJnRoaXMua2EoIm1lZGlhZmlsZSIpfS5iaW5kKHRoaXMpKTtlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNvdXJjZSIpKTtlLnNldEF0dHJpYnV0ZSgic3JjIixmKX1lbHNlIHRoaXMua2EoIm1lZGlhZmlsZV9ub21lZGlhIik7ZWxzZSB0aGlzLmthKCJtZWRpYWZpbGVfbm9tZWRpYSIpO2Vsc2UgdGhpcy5rYSgibWVkaWFmaWxlX25vYWQiKX0uYmluZCh0aGlzKSxmdW5jdGlvbigpe3RoaXMua2EoIm1lZGlhZmlsZV94bWxyZXF1ZXN0Iil9LmJpbmQodGhpcyksdGhpcyl9LGl1OmZ1bmN0aW9uKCl7cmV0dXJuImFsbCI9PT10aGlzLmNpfSxxbzpmdW5jdGlvbigpe3RoaXMuemEoImh0dHA6Ly9kMzc5OTY0YXltZXgyeC5jbG91ZGZyb250Lm5ldC9jaGVjay54bWw/ZW1wdHk9dHJ1ZSIsITApO3ZhciBhPXRoaXMuemEoImh0dHA6Ly9kMzc5OTY0YXltZXgyeC5jbG91ZGZyb250Lm5ldC9jaGVjay54bWw/ZW1wdHk9dHJ1ZSIsITApOwphLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0iaG9tYWRzdGF0aWN2YXN0IjthLmRhdGEuaG9tYWRfaGFzaF9ndWVzc2VkPSJ0cnVlIjt0aGlzLkxhKGEsdGhpcy5UdS5iaW5kKHRoaXMpLHRoaXMuU3UuYmluZCh0aGlzKSl9LFR1OmZ1bmN0aW9uKGEpe3ZhciBiPW51bGwsZD1udWxsO3RyeXsoYj1hLnJlc3BvbnNlWE1MKXx8KGI9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYS5yZXNwb25zZVRleHQsInRleHQveG1sIikpLGQ9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWQiKVswXX1jYXRjaChmKXtyZXR1cm59ZHx8dGhpcy5BcCgpfSxTdTpmdW5jdGlvbigpe30sQXA6ZnVuY3Rpb24oKXtlLndjKGsuenApO2UudHJhY2soImZhaWwtaW5pdCIsIjEwMSIpO3RoaXMua2EoInZhc3RmaWxlTWFuaXB1bGF0aW9uIil9LGllOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0VuYWJsZWQmJnRoaXMuR2IubGVuZ3RoKWZvcih2YXIgYT0wO2E8dGhpcy5HYi5sZW5ndGg7YSsrKXt2YXIgYj0KdGhpcy5HYlthXTsicmVxdWVzdCI9PWIudHlwZSYmZS5ZYShiLnVybCxiLmFsaWFzLG51bGwsZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7fSx0aGlzKTtpZigiZXZhbCI9PWIudHlwZSl7dmFyIGQ9bmV3IEo7d2luZG93W2QuaWEoKV09dGhpcztlLllhKGIudXJsLGIuYWxpYXMsbnVsbCxmdW5jdGlvbihhKXtpZihhLnJlc3BvbnNlVGV4dCl0cnl7ZXZhbChhLnJlc3BvbnNlVGV4dCl9Y2F0Y2goYil7fX0sZnVuY3Rpb24oKXt9LHRoaXMpfX19LHl1OmZ1bmN0aW9uKCl7cmV0dXJuIDEwMCpNYXRoLnJhbmRvbSgpPHRoaXMucWZ9LHBxOmZ1bmN0aW9uKGEpe3JldHVybiBhW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSphLmxlbmd0aCldfSxFYjpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnBvdygxMCxhfHwxMCkqKC44OTk5OTk5OTkqTWF0aC5yYW5kb20oKSsuMSkpfSxiYTpmdW5jdGlvbihhKXthPWF8fDEwO2Zvcih2YXIgYj0iIixkPTA7ZDxhO2QrKyliKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCguNT4KTWF0aC5yYW5kb20oKT82NTo5NykrTWF0aC5mbG9vcigyNipNYXRoLnJhbmRvbSgpKSk7cmV0dXJuIGJ9LGRjOmZ1bmN0aW9uKGEpe3JldHVybiJUcnVlIj09YXx8InRydWUiPT1hfHwxPT1hfHwiMSI9PWF8fDE9PWF9LHZiOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iIixkLGYsYyxlLGcsayxsPTA7bDxhLmxlbmd0aDspZD1hLmNoYXJDb2RlQXQobCsrKSxmPWEuY2hhckNvZGVBdChsKyspLGM9YS5jaGFyQ29kZUF0KGwrKyksZT1kPj4yLGQ9KGQmMyk8PDR8Zj4+NCxnPShmJjE1KTw8MnxjPj42LGs9YyY2Myxpc05hTihmKT9nPWs9NjQ6aXNOYU4oYykmJihrPTY0KSxiPWIrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZSkrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZCkrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZykrCiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGspO3JldHVybiBifSxsYTpmdW5jdGlvbihhKXt2YXIgYj0ic291cmNlIHByb3RvY29sIGF1dGhvcml0eSB1c2VySW5mbyB1c2VyIHBhc3N3b3JkIGhvc3QgcG9ydCByZWxhdGl2ZSBwYXRoIGRpcmVjdG9yeSBmaWxlIHF1ZXJ5IGFuY2hvciIuc3BsaXQoIiAiKTthPS9eKD86KD8hW146QF0rOlteOkBcL10qQCkoW146XC8/Iy5dKyk6KT8oPzpcL1wvKT8oKD86KChbXjpAXSopKD86OihbXjpAXSopKT8pP0ApPyhbXjpcLz8jXSopKD86OihcZCopKT8pKCgoXC8oPzpbXj8jXSg/IVtePyNcL10qXC5bXj8jXC8uXSsoPzpbPyNdfCQpKSkqXC8/KT8oW14/I1wvXSopKSg/Olw/KFteI10qKSk/KD86IyguKikpPykvLmV4ZWMoYSk7Zm9yKHZhciBkPXt9LGY9MTQ7Zi0tOylkW2JbZl1dPWFbZl18fCIiO2QucXVlcnlLZXk9e307ZFtiWzEyXV0ucmVwbGFjZSgvKD86XnwmKShbXiY9XSopPT8oW14mXSopL2csCmZ1bmN0aW9uKGEsYixoKXtiJiYoZC5xdWVyeUtleVtiXT1oKX0pO3JldHVybiBkfSxFaDpmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEpe3ZhciBkPSIiLGgsYztmb3IoaD03OzA8PWg7aC0tKWM9YT4+PjQqaCYxNSxkKz1jLnRvU3RyaW5nKDE2KTtyZXR1cm4gZH1mdW5jdGlvbiBkKGEsYil7cmV0dXJuIGE8PGJ8YT4+PjMyLWJ9dmFyIGYsYyxlPUFycmF5KDgwKSxnPTE3MzI1ODQxOTMsaz00MDIzMjMzNDE3LGw9MjU2MjM4MzEwMixtPTI3MTczMzg3OCxyPTMyODUzNzc1MjAscCxxLHQsdSx2O3A9YS5sZW5ndGg7dmFyIHc9W107Zm9yKGY9MDtmPHAtMztmKz00KWM9YS5jaGFyQ29kZUF0KGYpPDwyNHxhLmNoYXJDb2RlQXQoZisxKTw8MTZ8YS5jaGFyQ29kZUF0KGYrMik8PDh8YS5jaGFyQ29kZUF0KGYrMyksdy5wdXNoKGMpO3N3aXRjaChwJTQpe2Nhc2UgMDpmPTIxNDc0ODM2NDg7YnJlYWs7Y2FzZSAxOmY9YS5jaGFyQ29kZUF0KHAtMSk8PDI0fDgzODg2MDg7YnJlYWs7Y2FzZSAyOmY9CmEuY2hhckNvZGVBdChwLTIpPDwyNHxhLmNoYXJDb2RlQXQocC0xKTw8MTZ8MzI3Njg7YnJlYWs7Y2FzZSAzOmY9YS5jaGFyQ29kZUF0KHAtMyk8PDI0fGEuY2hhckNvZGVBdChwLTIpPDwxNnxhLmNoYXJDb2RlQXQocC0xKTw8OHwxMjh9Zm9yKHcucHVzaChmKTsxNCE9dy5sZW5ndGglMTY7KXcucHVzaCgwKTt3LnB1c2gocD4+PjI5KTt3LnB1c2gocDw8MyY0Mjk0OTY3Mjk1KTtmb3IoYT0wO2E8dy5sZW5ndGg7YSs9MTYpe2ZvcihmPTA7MTY+ZjtmKyspZVtmXT13W2ErZl07Zm9yKGY9MTY7Nzk+PWY7ZisrKWVbZl09ZChlW2YtM11eZVtmLThdXmVbZi0xNF1eZVtmLTE2XSwxKTtjPWc7cD1rO3E9bDt0PW07dT1yO2ZvcihmPTA7MTk+PWY7ZisrKXY9ZChjLDUpKyhwJnF8fnAmdCkrdStlW2ZdKzE1MTg1MDAyNDkmNDI5NDk2NzI5NSx1PXQsdD1xLHE9ZChwLDMwKSxwPWMsYz12O2ZvcihmPTIwOzM5Pj1mO2YrKyl2PWQoYyw1KSsocF5xXnQpK3UrZVtmXSsxODU5Nzc1MzkzJjQyOTQ5NjcyOTUsCnU9dCx0PXEscT1kKHAsMzApLHA9YyxjPXY7Zm9yKGY9NDA7NTk+PWY7ZisrKXY9ZChjLDUpKyhwJnF8cCZ0fHEmdCkrdStlW2ZdKzI0MDA5NTk3MDgmNDI5NDk2NzI5NSx1PXQsdD1xLHE9ZChwLDMwKSxwPWMsYz12O2ZvcihmPTYwOzc5Pj1mO2YrKyl2PWQoYyw1KSsocF5xXnQpK3UrZVtmXSszMzk1NDY5NzgyJjQyOTQ5NjcyOTUsdT10LHQ9cSxxPWQocCwzMCkscD1jLGM9djtnPWcrYyY0Mjk0OTY3Mjk1O2s9aytwJjQyOTQ5NjcyOTU7bD1sK3EmNDI5NDk2NzI5NTttPW0rdCY0Mjk0OTY3Mjk1O3I9cit1JjQyOTQ5NjcyOTV9cmV0dXJuKGIoZykrYihrKStiKGwpK2IobSkrYihyKSkudG9Mb3dlckNhc2UoKX19fSkoYyk7dmFyIE9hPWMuZGt8fE9hLGw9bmV3IE9hO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLlB0PXRoaXMuYVs5XTt0aGlzLk5rPXRoaXMuYVszXTt0aGlzLmZ1PQp0aGlzLmFbM107dGhpcy5qPXRoaXMuYVs1XX1jLmxuPWI7Yi5wcm90b3R5cGU9e090OmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5QdDp0aGlzLk1rKGEpfSxNazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTms6dGhpcy5ldShhKX0sZXU6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5mdTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmo6YX19fSkoYyk7dmFyIFBhPWMubG58fFBhLHZjPW5ldyBQYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXZjLk90KDQpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoYSxiLGQpe3RoaXMuYj1hO2EuZi5PP3RoaXMuWmE9YS5mLk8oKTp0aGlzLlphPSIiO2EuZi5TZyYmYS5mLlNnKHtwYXVzZTp0aGlzLnpkLmJpbmQodGhpcykscmVzdW1lOnRoaXMuemguYmluZCh0aGlzKSwKbXV0ZTp0aGlzLk5lLmJpbmQodGhpcyksdW5tdXRlOnRoaXMuTHUuYmluZCh0aGlzKX0pO3RoaXMuY29udGFpbmVyPXRoaXMuYi5oYjt0aGlzLnBsYXllcj10aGlzLmIuZjt0aGlzLlBiPXRoaXMuWmM9ITE7dGhpcy5Mbj0xRTM7dGhpcy5lYT1udWxsO3RoaXMuTD1iO3RoaXMueWE9e307dGhpcy52aWRlbz17fTt0aGlzLkpkPXt9O2UubGIoIm5ld0JpZ0FkSWQiKTt0aGlzLmJvPWUuYmEoMTApO3RoaXMuamY9MDt0aGlzLlhjPSJXZXJidW5nIC0gW3RpbWVdIjtkJiZkLmFkbWVzc2FnZSYmKHRoaXMuWGM9ZC5hZG1lc3NhZ2UsImZ1bmN0aW9uIj09dHlwZW9mIGQuYWRtZXNzYWdlJiYoKGE9dGhpcy5iLmYpJiZ0aGlzLmIuZi51JiYoYT10aGlzLmIuZi51KCkpLHRoaXMuWGM9ZC5hZG1lc3NhZ2UoYSkpKTtkJiYidHJ1ZSI9PVN0cmluZyhkLmFkanVzdEFkVm9sdW1lVG9Db250ZW50UGxheWVyKSYmKHRoaXMua249ZC5hZGp1c3RBZFZvbHVtZVRvQ29udGVudFBsYXllcik7dGhpcy5RZT10aGlzLklkPQohMTt0aGlzLmdoPWQmJmQubWF4V3JhcHBlckRlcHRoP3BhcnNlSW50KGQubWF4V3JhcHBlckRlcHRoKToxNTt0aGlzLmM9e307dGhpcy5WYz0hMTt0aGlzLlVoPS0xO3RoaXMuY29udHJvbHM9dGhpcy5jYXB0aW9uPXRoaXMuVWI9ITE7dGhpcy5Rbz1lLmJhKDEwKTt0aGlzLkRiPWUuYmEoMTApO3RoaXMuQmI9ZS5iYSgxMCk7dGhpcy5HaD1lLmJhKDEwKTt0aGlzLmNvbmY9e307dGhpcy50Yz10aGlzLkNiPSExO3RoaXMub2U9bnVsbDt0aGlzLlJkPXRoaXMuSmI9dGhpcy56ZT10aGlzLlZlPXRoaXMua2U9dGhpcy5qZD10aGlzLmxmPXRoaXMucGI9dGhpcy5nYz10aGlzLm9oPXRoaXMueGM9dGhpcy56dT10aGlzLnNiPSExO3RoaXMubGM9W107dGhpcy5lYz17fTt0aGlzLnJmPSExO3RoaXMuV2I9e307dGhpcy5Hcz0yMDA7dGhpcy5BZj10aGlzLmZpPXRoaXMuZmU9dGhpcy5ZZT0hMX1jLllqPWI7Yi5wcm90b3R5cGU9e3p0OmZ1bmN0aW9uKGEpe3RoaXMuY29uZj1hfSxIYTpmdW5jdGlvbihhKXt2YXIgYj0KdGhpcy5jb25mW2FdO3RoaXMuY29uZlt0aGlzLlphXSYmdGhpcy5jb25mW3RoaXMuWmFdW2FdJiYoYj10aGlzLmNvbmZbdGhpcy5aYV1bYV0pO3JldHVybiBifSxTaDpmdW5jdGlvbigpeyJwcmVyb2xsIj09ZS5TYSYmZS50cmFjaygic3RhdHNfaGRfYWN0aXZlIiwiIiwhMCk7dGhpcy5MLlFjP2UudHJhY2soImFkY2FsbCIsIjEiKTplLnRyYWNrKCJhZGNhbGwiLCIwIik7ZS50cmFjaygic3RhdHNfaGRfYWRfY2FsbCIsIiIsITApO2UudihrLmJuLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LEllOmZ1bmN0aW9uKGEsYixkLGMpe3RoaXMuc2I9ZDt2YXIgbj0hMTtjJiZjLmhvbWFkX3JlcGxhY2VfdXJsc19pbl90YWdzJiYobj0hMCk7aWYodGhpcy5MLlgpdGhpcy5qZisrLGUubGIoIm5ld1NtYWxsQWRJZCIpLHRoaXMuTC5ybygpLGM9bC5nZXRDb25maWcoKSx0aGlzLkwuS2EmJnRoaXMuTC5pc0VuYWJsZWQ/KHRoaXMuU2goKSxuZXcgVCh0aGlzLGEsdGhpcy5naCwKe2ZpcnN0Q2FsbDohMCx1c2VBZFRhZ1BhcmFtZXRlcjohMCxrZWVwVVJMOmIsYml0cmF0ZTpjLlBhLGVtcHR5OiJyZXNwb25zZS5lbXB0eSI9PWEsdnBhaWQ6dGhpcy5MLk5jLGhvbWFkX3JlcGxhY2VfdXJsc19pbl90YWdzOm4sY29udGVudFZpZGVvOntkdXJhdGlvbjp0aGlzLmIuZi5nZXREdXJhdGlvbigpLGN1cnJlbnRUaW1lOnRoaXMuYi5mLmdldEN1cnJlbnRUaW1lKCl9fSkpOmI/KHRoaXMuU2goKSxuZXcgVCh0aGlzLGEsdGhpcy5naCx7Zmlyc3RDYWxsOiEwLHZwYWlkOnRoaXMuTC5OYyx1c2VBZFRhZ1BhcmFtZXRlcjohMCxiaXRyYXRlOmMuUGEsa2VlcFVSTDohMCxob21hZF9yZXBsYWNlX3VybHNfaW5fdGFnczpuLGNvbnRlbnRWaWRlbzp7ZHVyYXRpb246dGhpcy5iLmYuZ2V0RHVyYXRpb24oKSxjdXJyZW50VGltZTp0aGlzLmIuZi5nZXRDdXJyZW50VGltZSgpfX0pKTp0aGlzLlFhKCk7ZWxzZXt2YXIgZz10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtnLkllKGEsYixkKX0sCjUwKX19LFRlOmZ1bmN0aW9uKGEpe2EuV2EmJmUudHJhY2soInN0YXRzX2hkX3dyYXBwZXJzYyIsImFkIiwhMCk7InNwaWVnZWwuZGUiIT1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpfHx0aGlzLlFlfHwic3ZtcHJldmlldyIhPWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZikuYW5jaG9yPyh0aGlzLlJkPXRoaXMuSmI9dGhpcy54Yz0hMSx0aGlzLmM9YSx0aGlzLkx0KHRoaXMuYyksdGhpcy5IZyhhKSx0aGlzLmxjPXRoaXMuemcoYSksdGhpcy5lYz17fSx0aGlzLnJmPSExLHRoaXMuSG8oKSk6dGhpcy5oZCgpfSxIZzpmdW5jdGlvbihhKXthJiYoYS5vcmlnaW4mJihhPWEub3JpZ2luKSxhLnBhcmVudCYmYS5wYXJlbnQgaW5zdGFuY2VvZiBiJiYodGhpcy5KZD10aGlzLnNxKGEpKSx0aGlzLkhnKGEucGFyZW50KSl9LHpnOmZ1bmN0aW9uKGEpe3ZhciBjPVtdO2EmJihhLm9yaWdpbiYmKGE9YS5vcmlnaW4pLCFhfHwhYS5wYXJlbnR8fGEucGFyZW50IGluc3RhbmNlb2YgYnx8KGM9CnRoaXMuemcoYS5wYXJlbnQpKSxjLnB1c2godGhpcy4kcChhKSkpO3JldHVybiBjfSwkcDpmdW5jdGlvbihhKXt2YXIgYj0iIixkPVtdO2lmKGEmJmEuVSYmYS5VLmdldEF0dHJpYnV0ZSl7Yj1hLlUuZ2V0QXR0cmlidXRlKCJpZCIpO2E9YS5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJDcmVhdGl2ZSIpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWQucHVzaChhW2NdLmdldEF0dHJpYnV0ZSgiaWQiKSk7MT09ZC5sZW5ndGgmJihkPWRbMF0pfXJldHVybnthZElEOmIsY3JlYXRpdmVJRDpkfX0sc3E6ZnVuY3Rpb24oYSl7dmFyIGI9W10sZD1bXSxjPVtdLGU9W10sZz0iIjtpZihhLlUpe2I9YS5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJbXByZXNzaW9uIik7Yz1hLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkNyZWF0aXZlIik7YS5VLmdldEF0dHJpYnV0ZSgiaWQiKSYmKGc9YS5VLmdldEF0dHJpYnV0ZSgiaWQiKSxlLnB1c2goZykpO2EuVS5nZXRBdHRyaWJ1dGUoImFkSUQiKSYmKGc9CmEuVS5nZXRBdHRyaWJ1dGUoImFkSUQiKSxlLnB1c2goZykpO2Zvcih2YXIgaz0wO2s8Yy5sZW5ndGg7aysrKWNba10uZ2V0QXR0cmlidXRlKCJpZCIpJiYoZz1jW2tdLmdldEF0dHJpYnV0ZSgiaWQiKSxlLnB1c2goZykpLGNba10uZ2V0QXR0cmlidXRlKCJhZElEIikmJihnPWNba10uZ2V0QXR0cmlidXRlKCJhZElEIiksZS5wdXNoKGcpKTtmb3Ioaz0wO2s8Yi5sZW5ndGg7aysrKWQucHVzaChhLmliKGJba10pKX1yZXR1cm57aW1wcmVzc2lvbnM6ZCxhZElkczplLGFkSWQ6Z319LG9hOmZ1bmN0aW9uKGEpe2EuV2EmJmUudHJhY2soInN0YXRzX2hkX3dyYXBwZXJzYyIsIm5vYWQiLCEwKTt2YXIgYj0wLGQ9InN0YXRzX2hkX2FkX2Vycm9yIjthJiYoYS5lcnJvciYmYS5lcnJvci5kZXRhaWwmJmEuZXJyb3IuZGV0YWlsLmNvZGUmJihiPWEuZXJyb3IuZGV0YWlsLmNvZGUpLGEubWQmJmEubWQuZXJyb3ImJmEubWQuZXJyb3IuY29kZSYmKGI9YS5tZC5lcnJvci5jb2RlKSk7c3dpdGNoKGEuZXJyb3IuY29kZSl7Y2FzZSB3Lk9jLmNvZGU6Yj09CkYuVWQuY29kZT9lLnYoay5udix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpOihlLkplKCksYj09Ri5IZi5jb2RlJiZlLnYoay5jcyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKTtlLnYoay55cCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2VtcHR5IjticmVhaztjYXNlIHcuRmYuY29kZTplLnYoay5VdSx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2Vycm9yX3Zhc3Rsb2FkZmFpbGVkIjticmVhaztjYXNlIHcuSWYuY29kZTplLnRyYWNrKCJ3cmFwcGVybGltaXQiLCIxMDYiKTtlLnYoay51dix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2Vycm9yX3dyYXBwZXJsaW1pdCI7YnJlYWs7Y2FzZSB3LlZkLmNvZGU6ZS52KGsueHYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLAp0aGlzLkIoKSx0aGlzLkMoKSk7ZD0ic3RhdHNfaGRfYWRfZXJyb3JfeG1scGFyc2UiO2JyZWFrO2Nhc2Ugdy5UZC5jb2RlOmUudihrLmRzLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSksZS50cmFjaygibm9tZWRpYSIsIjEwMiIpLGQ9InN0YXRzX2hkX2FkX2Vycm9yX25vbWVkaWEiLHRoaXMudGN8fChlLnRyYWNrKCJub21lZGlhX25vZmxhc2giLCIxMDUiKSxkPSJzdGF0c19oZF9hZF9lcnJvcl9ub21lZGlhbm9mbGFzaCIpfSJzdGF0c19oZF9hZF9lcnJvciI9PWQmJmEuZXJyb3ImJmEuZXJyb3IueGEmJihkKz0iXyIrYS5lcnJvci54YSk7ZS50cmFjayhkLCIiLCEwKTt0aGlzLlFiKGEpO3RoaXMuUWEoKX0sUWI6ZnVuY3Rpb24oYSl7dmFyIGI9OTAwO2EmJmEuZXJyb3ImJmEuZXJyb3IuY29kZSYmKGI9YS5lcnJvci5jb2RlLDkwMTxiJiYoYj05MDApKTtmb3IoYj17IltFUlJPUkNPREVdIjpifTthLk9hLmxlbmd0aDspdHJ5e3ZhciBkPWEuT2EucG9wKCk7CnRoaXMuSGUoZC51cmwsZC50eXBlLGIpfWNhdGNoKGMpe319LEx0OmZ1bmN0aW9uKGEpe3RoaXMua2U9dGhpcy56ZT10aGlzLlZlPSExO3RoaXMueWE9dGhpcy5iLkc7dmFyIGI9OTk5OTt0aGlzLmNvbmYuekluZGV4JiYoYj10aGlzLmNvbmYuekluZGV4LTEpO3RoaXMueWEuekluZGV4PWI7Yj10aGlzLmIuRjt0cnl7dmFyIGQ9dGhpcy5iLmYuZ2V0UmF3UGxheWVyKCk7aWYoZCYmZC5lbnZ2YXJzKXRyeXtiPWQuZW52dmFycygpLnZpZGVvU2xvdCx0aGlzLlllPSEwfWNhdGNoKGMpe319Y2F0Y2goZSl7fWIub3c9ImF1dG8iO3RoaXMuY29uZlsidmlkZW8uc3R5bGUucG9zaXRpb24iXSYmKGIuc3R5bGUucG9zaXRpb249dGhpcy5jb25mWyJ2aWRlby5zdHlsZS5wb3NpdGlvbiJdKTt0aGlzLmNvbmZbInZpZGVvLnN0eWxlIl0mJihiLnN0eWxlPXRoaXMuY29uZlsidmlkZW8uc3R5bGUiXSk7aWYodGhpcy5jb25mWyJ2aWRlby5hdHRyaWJ1dGVzIl0pZm9yKHZhciBnIGluIHRoaXMuY29uZlsidmlkZW8uYXR0cmlidXRlcyJdKXRoaXMuY29uZlsidmlkZW8uYXR0cmlidXRlcyJdLmhhc093blByb3BlcnR5KGcpJiYKYi5zZXRBdHRyaWJ1dGUoZyx0aGlzLmNvbmZbInZpZGVvLmF0dHJpYnV0ZXMiXVtnXSk7dGhpcy5rbiYmdGhpcy5wbGF5ZXIucWUoKSYmKGIudm9sdW1lPXRoaXMucGxheWVyLnFlKCkvMTAwKTtmb3IoO2IuZmlyc3RDaGlsZDspYi5yZW1vdmVDaGlsZChiLmZpcnN0Q2hpbGQpO2ZvcihkPTA7ZDxhLk0ubGVuZ3RoO2QrKyliLmNhblBsYXlUeXBlKGEuTVtkXS50eXBlKSYmdGhpcy5lbihiLGEuTVtkXS51cmwrIiIsYS5NW2RdLnR5cGUpO3RoaXMuWWUmJmIubG9hZCgpO2lmKHRoaXMuT2goYikpe3RoaXMuaG4oYik7YT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdP2Euc3R5bGU9dGhpcy5jb25mWyJpbm5lcldhcnBwZXIuc3R5bGUiXTooYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUud2lkdGg9IjEwMCUiLGEuc3R5bGUuaGVpZ2h0PSIxMDAlIik7dGhpcy5lYT10aGlzLnlhLmFwcGVuZENoaWxkKGEpO3RyeXt0aGlzLlllPwp0aGlzLnZpZGVvPWI6dGhpcy52aWRlbz10aGlzLmVhLmFwcGVuZENoaWxkKGIpfWNhdGNoKGspe3RoaXMudmlkZW89Yn19ZWxzZSB0aGlzLmMuTW8oKT8oYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdP2Euc3R5bGU9dGhpcy5jb25mWyJpbm5lcldhcnBwZXIuc3R5bGUiXTphLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGhpcy5lYT10aGlzLnlhLmFwcGVuZENoaWxkKGEpLHRoaXMudmlkZW89dGhpcy5lYS5hcHBlbmRDaGlsZChiKSx0aGlzLkp0KCkpOnRoaXMuRGUoKT90aGlzLkRoKCk6dGhpcy5jLm9yaWdpbi5xZyh3LlRkKX0sSnQ6ZnVuY3Rpb24oKXt0aGlzLnBiPXRoaXMuZ2M9ITE7dGhpcy5iLmYudmEmJnRoaXMuYi5mLnZhKCkmJihlLnYoay5qZyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMucGI9ITApO2UuamUoKTt0aGlzLmMmJnRoaXMuYy5vcmlnaW4mJnRoaXMuYy5vcmlnaW4uc2EmJgplLmpuKHRoaXMuYy5vcmlnaW4uc2EpO2UuZWIoInNldFVwVnBhaWQiKTt2YXIgYT10aGlzLmIuRjt0aGlzLmIuRj1DLnBvcCgpO2EucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcy5iLkYsYSk7dGhpcy5iLnBoKCk7dGhpcy5iLkpjKCk7Zm9yKGE9dGhpcy5iLkc7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7YS5wYXJlbnR8fHRoaXMuYi5KYygpO3RoaXMuZWE9dGhpcy55YT10aGlzLmIuRzt0aGlzLndmKCJ2cGFpZCIpO2lmKHRoaXMucGIpe2lmKGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYikpYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbjt0aGlzLnRyYWNrKCJtdXRlIiwhMCk7ZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJjb250ZW50IiwhMCk7ZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKX10aGlzLkg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7dGhpcy5ILnNldEF0dHJpYnV0ZSgid2lkdGgiLAoiMTAwJSIpO3RoaXMuSC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjEwMCUiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJzY3JvbGxpbmciLCJubyIpO3RoaXMuSC5zZXRBdHRyaWJ1dGUoImFsbG93IiwiYXV0b3BsYXkiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJkZWxlZ2F0ZXN0aWNreXVzZXJhY3RpdmF0aW9uIiwibWVkaWEiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJzdHlsZSIsImJvcmRlcjogMCBub25lO291dGxpbmU6IG5vbmU7Iik7dGhpcy5iLkcuYXBwZW5kQ2hpbGQodGhpcy5IKTt0aGlzLkgub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGE9ITE7dGhpcy5iLmYudmEmJnRoaXMuYi5mLnZhKCkmJihhPSEwKTt2YXIgYj10aGlzLmMudXEoKSxjPXRoaXMuYy5BLk9yaWdpbmFsQWRQYXJhbWV0ZXJzLGc9e2hvbWFkOkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobC5nZXRDb25maWcoKSkpLHZwYWlkOnt1cmw6Yi51cmwsdmlld21vZGU6Im5vcm1hbCIsZGVzaXJlZEJpdHJhdGU6Yi5kZXNpcmVkQml0cmF0ZXx8CmIuYml0cmF0ZXx8NDAwLGFkUGFyYW1ldGVyczpjLGNyZWF0aXZlRGF0YTp7QWRQYXJhbWV0ZXJzOmN9LGNvbnRlbnRwbGF5ZXI6e3dpZHRoOnBhcnNlSW50KHRoaXMuYi5HLnN0eWxlLndpZHRoKSxoZWlnaHQ6cGFyc2VJbnQodGhpcy5iLkcuc3R5bGUuaGVpZ2h0KX19LGNvbnRlbnRQbGF5ZXI6e211dGVkOmF9fTtlLm1hKHRoaXMuSCwiY29uZmlnIixnKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDEwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwiY29uZmlnIixnKX0uYmluZCh0aGlzKSwyMDApO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksNTAwKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDcwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwKImNvbmZpZyIsZyl9LmJpbmQodGhpcyksMUUzKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDEyMDApO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksMTUwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwiY29uZmlnIixnKX0uYmluZCh0aGlzKSwyRTMpO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksNUUzKX0uYmluZCh0aGlzKTthPWUuJGYoImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9ob21hZC1nbG9iYWwtY29uZmlncy5zY2huZWV2b25tb3JnZW4uY29tL2lmcmFtZS5odG1sIix0aGlzLkwpO3RoaXMuSC5zcmM9YTtlLmJlKCJ2cGFpZGV2ZW50IixmdW5jdGlvbihhKXsiQWRTaXplQ2hhbmdlIiE9YS5kYXRhLm5hbWUmJiJBZFJlbWFpbmluZ1RpbWVDaGFuZ2UiIT0KWyJkYXRhIl0ubmFtZSYmdGhpcy5iLlRiKCEwKTtpZihhJiZhLmRhdGEmJmEuZGF0YS5uYW1lKXt0aGlzLmxjPWEuZGF0YS5vcmlnaW5hbGV2ZW50LmFkSURzOyJBZEVycm9yIj09YS5kYXRhLm5hbWUmJnRoaXMuYnYoYSk7aWYoIkFkSW1wcmVzc2lvbiI9PWEuZGF0YS5uYW1lJiYodGhpcy5jdigpLHRoaXMuYi5UYighMCksIXRoaXMuSmIpKXt2YXIgYj0yRTMsYz01MDt0aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uJiYodGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi5wZXJjZW50JiYoYz10aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnBlcmNlbnQpLHRoaXMuY29uZi52aWV3YWJsZUltcHJlc3Npb24udGltZU1TJiYoYj10aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnRpbWVNUykpO3RoaXMuSmI9e2VsOnRoaXMuSCxjYjpmdW5jdGlvbigpe3RoaXMuUmQ9ITA7ZS52KGsuYmksdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt0aGlzLnRyYWNrKCJ2aWV3YWJsZSIpfS5iaW5kKHRoaXMpLAp0aW1lTVM6YixwZXJjZW50OmMsc3RhcnRUaW1lOiExfTtlLkNlKHRoaXMuSmIpfSJBZFN0YXJ0ZWQiPT1hLmRhdGEubmFtZSYmKHRoaXMuYi5UYighMCksdGhpcy5ndigpKTsiQWRWaWRlb1N0YXJ0Ij09YS5kYXRhLm5hbWUmJih0aGlzLmIuVGIoITApLHRoaXMua3YoKSk7IkFkVmlkZW9GaXJzdFF1YXJ0aWxlIj09YS5kYXRhLm5hbWUmJnRoaXMuaXYoKTsiQWRWaWRlb01pZHBvaW50Ij09YS5kYXRhLm5hbWUmJnRoaXMuanYoKTsiQWRWaWRlb1RoaXJkUXVhcnRpbGUiPT1hLmRhdGEubmFtZSYmdGhpcy5sdigpOyJBZFZpZGVvQ29tcGxldGUiPT1hLmRhdGEubmFtZSYmdGhpcy5odigpOyJBZFN0b3BwZWQiPT1hLmRhdGEubmFtZSYmdGhpcy5kaSgpO2lmKCJBZENsaWNrVGhydSI9PWEuZGF0YS5uYW1lKXt2YXIgZz1hLmRhdGEuY2xpY2tUaHJ1VGFyZ2V0O2d8fChnPXRoaXMuYy5PYik7aWYoIWcpcmV0dXJuO3RoaXMudHJhY2soImNsaWNrdHJhY2tpbmciKTtlLnYoay5pZyx0aGlzLmMuQSwKdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPSJfdG9wIjt0cnl7dGhpcy5MLiRjJiYoYT0iX2JsYW5rIik7dmFyIGI9d2luZG93Lm9wZW4oIiIsYSk7Yi5kb2N1bWVudC5ib2R5LmlubmVySFRNTD0iPGRpdj48L2Rpdj4iO2IuZG9jdW1lbnQubG9jYXRpb24uaHJlZj1nfWNhdGNoKGQpe3dpbmRvdy5vcGVuKGcsYSl9fS5iaW5kKHRoaXMpLDUwMCl9IkFkU2tpcHBlZCI9PWEuZGF0YS5uYW1lJiZ0aGlzLmZ2KCk7IkFkUmVtYWluaW5nVGltZUNoYW5nZSI9PWEuZGF0YS5uYW1lJiZlLnYoay4kZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpOyJBZFBhdXNlZCI9PWEuZGF0YS5uYW1lJiZ0aGlzLmR2KCk7IkFkUGxheWluZyI9PWEuZGF0YS5uYW1lJiYodGhpcy5maSYmKHRoaXMuQWY9ITEsdGhpcy5ZYigpKSx0aGlzLmV2KCkpOyJBZFZvbHVtZUNoYW5nZSI9PWEuZGF0YS5uYW1lJiYoYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkJiKSwKMD09YS5kYXRhLm9yaWdpbmFsZXZlbnQudm9sdW1lPyh0aGlzLnBiPSEwLGImJihiLmlubmVySFRNTD10aGlzLmNvbmYudW5tdXRlQnV0dG9uKSx0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJ1c2VyIiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSk6KHRoaXMucGI9ITEsYiYmKGIuaW5uZXJIVE1MPXRoaXMuY29uZi5tdXRlQnV0dG9uKSx0aGlzLnRyYWNrKCJ1bm11dGUiLCEwKSxlLnRyYWNrKCJzdGF0c19oZF91bm11dGVkIiwidXNlciIsITApLGUudihrLnRmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpLGUudihrLiRkLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpfX0uYmluZCh0aGlzKSk7ZS5iZSgidnBhaWRjb250aW51ZWNvbnRlbnQiLGZ1bmN0aW9uKCl7dGhpcy5RYSgpfS5iaW5kKHRoaXMpKTtlLmJlKCJ2cGFpZGVycm9zIixmdW5jdGlvbigpe3RoaXMuUWEoKX0uYmluZCh0aGlzKSk7CnRoaXMuYi5ZZihmdW5jdGlvbihhKXtlLm1hKHRoaXMuSCwicmVzaXplIixhKX0uYmluZCh0aGlzKSl9LGR2OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy50cmFjaygicGF1c2UiKTtlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2EmJihhLmlubmVySFRNTD10aGlzLmNvbmYucGxheUJ1dHRvbik7dGhpcy5nYz0hMH0sZXY6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRiKTthJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uKTt0aGlzLnRyYWNrKCJyZXN1bWUiLCEwKTtlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuZ2M9ITF9LGd2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygiY3JlYXRpdmVWaWV3Iik7ZS52KGsuVWYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKX0sCmZ2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygic2tpcCIpO2UudihrLlRmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LGN2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygiaW1wcmVzc2lvbiIpO2UuZWIoImltcHJlc3Npb24iKTtlLnYoay5QZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxrdjpmdW5jdGlvbigpe3RoaXMudHJhY2soInN0YXJ0Iik7ZS5lYigic3RhcnQiKTtlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxpdjpmdW5jdGlvbigpe3RoaXMudHJhY2soImZpcnN0UXVhcnRpbGUiKTt0aGlzLnhjPSEwO2UuZWIoImZpcnN0UXVhcnRpbGUiKTtlLnYoay5OZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxqdjpmdW5jdGlvbigpe3RoaXMudHJhY2soIm1pZHBvaW50Iik7ZS5lYigibWlkcG9pbnQiKTtlLnYoay5SZix0aGlzLmMuQSx0aGlzLmIuZi51KCksCnRoaXMuQigpLHRoaXMuQygpKX0sbHY6ZnVuY3Rpb24oKXt0aGlzLnRyYWNrKCJ0aGlyZFF1YXJ0aWxlIik7ZS5lYigidGhpcmRRdWFydGlsZSIpO2UudihrLlZmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LGh2OmZ1bmN0aW9uKCl7dGhpcy5QZCgpO2UuZWIoImNvbXBsZXRlIil9LGRpOmZ1bmN0aW9uKGEpe2lmKHRoaXMuSCYmdGhpcy5ILnBhcmVudE5vZGUmJnRoaXMuSC5wYXJlbnROb2RlLnBhcmVudE5vZGUpe2UuZWIoImFkc3RvcHBlZCIpO3ZhciBiPXRoaXMuSC5wYXJlbnROb2RlO3RoaXMuSC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuSCk7Yi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpO2UuamUoKTt0aGlzLkg9ITE7dGhpcy5RYShhKX19LGJ2OmZ1bmN0aW9uKGEpe3ZhciBiPWEubWVzc2FnZXx8IiIsZD0vXGQrL2csYz1bXTshYiYmYS5kYXRhJiZhLmRhdGEub3JpZ2luYWxldmVudCYmYS5kYXRhLm9yaWdpbmFsZXZlbnQubXNnJiYoYj0KYS5kYXRhLm9yaWdpbmFsZXZlbnQubXNnLChjPWIubWF0Y2goZCkpP2Muam9pbiYmKGI9Yy5qb2luKCItIikpOmI9Yi5zdWJzdHJpbmcoMCwyMCkpO2UudHJhY2soInN0YXRzX3ZwX2Vycm9yaGFuZGxlciIsYiwhMCk7ZS5lYigiZXJyIixiKTtlLnYoay5tdix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuZGkoITApfSxlbjpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoYSxiKXtpZihiLkthJiZiLmlzRW5hYmxlZCYmIWIuQ2MoKSl7dmFyIGQ9Yi5sYShhKTtyZXR1cm4gZC5wcm90b2NvbCsiOi8vIitkLmhvc3R9cmV0dXJuIGF9aWYoYS5hcHBlbmRDaGlsZCl7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic291cmNlIik7Yy5zcmM9ZChiLHRoaXMuTCk7Yy5vbmVycm9yPXRoaXMuWXUuYmluZCh0aGlzKTthLmFwcGVuZENoaWxkKGMpfWVsc2UgYS5zZXRBdHRyaWJ1dGUoInNyYyIsZChiLHRoaXMuTCkpfSxPaDpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRFbGVtZW50c0J5VGFnTmFtZT8KMDxhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzb3VyY2UiKS5sZW5ndGg6ITB9LGhuOmZ1bmN0aW9uKGEpe2EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZHN0YXJ0Iix0aGlzLmFpLmJpbmQodGhpcykpO2EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkbWV0YWRhdGEiLHRoaXMueGYuYmluZCh0aGlzKSk7YS5hZGRFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIix0aGlzLnlmLmJpbmQodGhpcykpO2EuYWRkRXZlbnRMaXN0ZW5lcigiZW5kZWQiLHRoaXMuUGQuYmluZCh0aGlzKSk7YS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5RZC5iaW5kKHRoaXMpKX0sRWQ6ZnVuY3Rpb24oYSl7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2Fkc3RhcnQiLHRoaXMuYWkuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsdGhpcy54Zi5iaW5kKHRoaXMpKTthLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLHRoaXMueWYuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlbmRlZCIsCnRoaXMuUGQuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5RZC5iaW5kKHRoaXMpKX0sYWk6ZnVuY3Rpb24oYSl7dGhpcy5QYnx8KHRoaXMudmlkZW8uY29udHJvbHM9ITEsd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLlBifHx0aGlzLnhmKGEpfS5iaW5kKHRoaXMpLHRoaXMuTG4pKX0seGY6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWmMmJnRoaXMuT2godGhpcy52aWRlbykmJiF0aGlzLkNiJiYhdGhpcy5QYil7dGhpcy5aYz0hMDt0cnl7aWYoIWUuVGEoKSYmYS50YXJnZXQmJjU+PWEudGFyZ2V0LmR1cmF0aW9uJiY1PE1hdGguYWJzKHRoaXMuYy5kdXJhdGlvbi1hLnRhcmdldC5kdXJhdGlvbikpe3RoaXMuQ2J8fCh0aGlzLkNiPSEwLHRoaXMuRWQodGhpcy52aWRlbyksZS50cmFjaygic3RhdHNfaGRfbm9vcHZpZGVvIiwiIiwhMCksdGhpcy5MLnBnfHx0aGlzLkwua2EoInZpZGVvLW5vb3AiKSk7dGhpcy5RYSgpO3JldHVybn19Y2F0Y2goYil7ZS50cmFjaygic3RhdHNfaGRfbm9vcHZpZGVvX2ZhaWwiLAoiIiwhMCl9dGhpcy5YdSgpO3RoaXMudmlkZW8uY29udHJvbHM9ITE7dGhpcy5iLkpjKCk7dGhpcy5aaCgpO3RoaXMud2YoKTt0aGlzLmFnKCk7dGhpcy5iLnBoKCk7dGhpcy52aWRlby5wbGF5JiZ0aGlzLmtmKCl9fSxrZjpmdW5jdGlvbigpe2lmKCF0aGlzLmpkKWlmKHRoaXMuY29uZi5wcmVBZElmcmFtZVVybCl7dmFyIGE9dGhpcy5jb25mLnByZUFkSWZyYW1lVXJsOyJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoYT1hKGUuU2EpKTtpZigic3RyaW5nIj09dHlwZW9mIGEmJmEpe3RoaXMuc2Q9W107Zm9yKHZhciBiPXRoaXMuYi5HLGQ9MDtkPGIuY2hpbGRyZW4ubGVuZ3RoO2QrKyl0aGlzLnNkLnB1c2goYi5jaGlsZHJlbltkXSksYi5jaGlsZHJlbltkXS5zdHlsZS5kaXNwbGF5PSJub25lIjtkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9KTtkLnNldEF0dHJpYnV0ZSgic3JjIiwKYSk7ZC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Quc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7ZC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAwIG5vbmU7b3V0bGluZTogbm9uZTsiKTtiLmFwcGVuZENoaWxkKGQpO3ZhciBjPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihhKXtpZigiY29udGludWUiPT1hLmRhdGEpe3RoaXMuVGMoKTthPU1hdGgucm91bmQoKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWMpLzFFMyk7dmFyIGI9IiI7MTxhJiYoYj0iZ3QxIik7NTxhJiYoYj0iZ3Q1Iik7MTA8YSYmKGI9Imd0MTAiKTsyMDxhJiYoYj0iZ3QyMCIpO2UudHJhY2soInN0YXRzX2hkX3ByZUlmcmFtZUNsb3NlZCIsYiwhMCl9fS5iaW5kKHRoaXMpKTtlLnRyYWNrKCJzdGF0c19oZF9wcmVJZnJhbWVPcGVuZWQiLCIiLCEwKX1lbHNlIHRoaXMuVGMoKX1lbHNlIHRoaXMuVGMoKX0sVGM6ZnVuY3Rpb24oYSl7aWYodGhpcy5zZClmb3IodmFyIGI9CjA7Yjx0aGlzLnNkLmxlbmd0aDtiKyspdGhpcy5zZFtiXS5zdHlsZS5kaXNwbGF5PSJibG9jayI7aWYoKGI9dGhpcy52aWRlby5wbGF5KCkpJiZiWyJjYXRjaCJdKWJbImNhdGNoIl0oZnVuY3Rpb24oYil7dGhpcy5qZHx8KGE/KCJzdHJpbmciIT10eXBlb2YgYiYmYiYmYi5tZXNzYWdlJiYoYj1iLm1lc3NhZ2UpLHRoaXMuUWEoKSxlLnRyYWNrKCJzdGF0c19oZF9wbGF5UHJvbWlzZUZhaWxlZCIsYiwhMCkpOih0aGlzLk5lKCEwKSx0aGlzLlRjKCEwKSkpfS5iaW5kKHRoaXMpKTtiLnRoZW4oZnVuY3Rpb24oKXt0aGlzLnplJiZlLnRyYWNrKCJzdGF0c19oZF9wbGF5UHJvbWlzZVJlc29sdmVkQWZ0ZXJJbXByZXNzaW9uIiwiIiwhMCk7dGhpcy5WZT0hMH0uYmluZCh0aGlzKSk7ZGE/KHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLlhiLmJpbmQodGhpcykpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuWGIuYmluZCh0aGlzKSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLAp0aGlzLlhiLmJpbmQodGhpcykpKTpLPWZ1bmN0aW9uKCl7dGhpcy5WY3x8KHRoaXMudmlkZW8ubG9hZCgpLHRoaXMua2YoKSl9LmJpbmQodGhpcyk7dGhpcy5zZSgpLkNoKHRoaXMpfSxQZDpmdW5jdGlvbigpe3RoaXMuTC52YyYmIXRoaXMuQ2ImJmUudHJhY2soInF1YXJ0aWxlIiwiY29tcGxldGUiLCEwKTt0aGlzLnRyYWNrKCJjb21wbGV0ZSIpO2UudihrLiRtLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSk7dGhpcy5RYSgpfSxRYTpmdW5jdGlvbihhKXtpZighdGhpcy5rZSlpZih0aGlzLmtlPSEwLHRoaXMuUmR8fChlLnYoay5mcyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMudHJhY2soIm5vdHZpZXdhYmxlIikpLHRoaXMuYy5yYnx8dGhpcy5jLmpjKXtlLmxiKCJuZXdTbWFsbEFkSWQiKTt0aGlzLmpmKys7dGhpcy5QYj10aGlzLlpjPSExO3RyeXt0aGlzLkVkKHRoaXMudmlkZW8pfWNhdGNoKGIpe310cnl7dGhpcy5lYS5yZW1vdmVDaGlsZCh0aGlzLnZpZGVvKX1jYXRjaChkKXt9dHJ5e3RoaXMueWEucmVtb3ZlQ2hpbGQodGhpcy5lYSl9Y2F0Y2goYyl7fXRoaXMuY2FwdGlvbj0KdGhpcy5jb250cm9scz1udWxsO3RoaXMuSWQ9ITE7dHJ5e3RoaXMuYi5XaCgpfWNhdGNoKGcpe310aGlzLmxmPSEwO3RoaXMuYi53ZSgpO3RoaXMuVWI9ITE7dGhpcy5zZSgpLnloKCk7dGhpcy5jLnJiJiZ0aGlzLmMub3JpZ2luLk9lKCk7dGhpcy5jLmpjJiYoYT90aGlzLmMub3JpZ2luLmtoKCk6dGhpcy5oZCgpKX1lbHNlIHRoaXMuaGQoKX0sWXU6ZnVuY3Rpb24oYSl7YS50YXJnZXQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChhLnRhcmdldCk7dGhpcy52aWRlby5uZXR3b3JrU3RhdGUmJnRoaXMudmlkZW8ubmV0d29ya1N0YXRlPT10aGlzLnZpZGVvLk5FVFdPUktfTk9fU09VUkNFJiYodGhpcy5FZCh0aGlzLnZpZGVvKSx0aGlzLkRlKCk/dGhpcy5EaCgpOnRoaXMuUWQoYSkpfSxRZDpmdW5jdGlvbihhKXt0aGlzLlBiPSEwO2EmJmEudGFyZ2V0JiZhLnRhcmdldC5lcnJvciYmYS50YXJnZXQuZXJyb3IuY29kZXx8dGhpcy52aWRlby5uZXR3b3JrU3RhdGU9PXRoaXMudmlkZW8uTkVUV09SS19OT19TT1VSQ0UmJgoodGhpcy5EZSgpP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50Y3x8dGhpcy5MLmVnKCl9LmJpbmQodGhpcyksMUUzKTp0aGlzLkwuZWcoKSk7dGhpcy5jLm9yaWdpbi5xZyh3LlRkKX0seWY6ZnVuY3Rpb24oKXtpZih0aGlzLnp1KXRoaXMuUWEoKTtlbHNle3RoaXMuVWI9ITA7dGhpcy5iLmYuVmEmJiF0aGlzLmxmJiZ0aGlzLmIuZi5WYSgpJiZlLnYoay5mZCx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3ZhciBhPU1hdGguZmxvb3IodGhpcy52aWRlby5jdXJyZW50VGltZSk7dGhpcy5DdShhKTtpZighdGhpcy5KYil7dmFyIGI9MkUzLGQ9NTA7dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbiYmKHRoaXMuY29uZi52aWV3YWJsZUltcHJlc3Npb24ucGVyY2VudCYmKGQ9dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi5wZXJjZW50KSx0aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnRpbWVNUyYmKGI9dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi50aW1lTVMpKTsKdGhpcy5KYj17ZWw6dGhpcy52aWRlbyxjYjpmdW5jdGlvbigpe3RoaXMuUmQ9ITA7ZS52KGsuYmksdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt0aGlzLnRyYWNrKCJ2aWV3YWJsZSIpfS5iaW5kKHRoaXMpLHRpbWVNUzpiLHBlcmNlbnQ6ZCxzdGFydFRpbWU6ITF9O2UuQ2UodGhpcy5KYil9ZD0iIjt0aGlzLmMuaGYmJihiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuR2gpKSYmKGQ9dGhpcy5jLmhmLWEsMDxkP2Q9dGhpcy5jb25mLnNraXBhYmxlQnV0dG9uLnJlcGxhY2UoIlt0aW1lXSIsZCk6KGQ9dGhpcy5jb25mLnNraXBCdXR0b24ucmVwbGFjZSgiW3RpbWVdIixkKSx0aGlzLklkfHwodGhpcy5JZD0hMCxiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3RoaXMudHJhY2soInNraXAiKTtlLnYoay5UZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuYy5yYj8odGhpcy5QYj10aGlzLlpjPSExLAp0aGlzLkVkKHRoaXMudmlkZW8pLHRoaXMuZWEucmVtb3ZlQ2hpbGQodGhpcy52aWRlbyksdGhpcy55YS5yZW1vdmVDaGlsZCh0aGlzLmVhKSx0aGlzLmNhcHRpb249dGhpcy5jb250cm9scz1udWxsLHRoaXMuSWQ9ITEsdGhpcy5iLldoKCksdGhpcy5jLm9yaWdpbi5PZSgpKTp0aGlzLlFhKCl9LmJpbmQodGhpcykpKSksYi5pbm5lckhUTUw9ZCk7dGhpcy5jYXB0aW9uJiYodGhpcy5jYXB0aW9uLmlubmVySFRNTD10aGlzLlhjLnJlcGxhY2UoIlt0aW1lXSIsZS55Zyh0aGlzLmMuZHVyYXRpb24tYSkpKTt0aGlzLlZjPSEwO3RoaXMudmlkZW8uY29udHJvbHM9ITF9fSxEaDpmdW5jdGlvbigpe3RoaXMudGM9ITA7dGhpcy55YT10aGlzLmIuRzt0aGlzLnlhLmlubmVySFRNTD0iIjt2YXIgYT05OTk5O3RoaXMuY29uZi56SW5kZXgmJihhPXRoaXMuY29uZi56SW5kZXgtMSk7dGhpcy55YS56SW5kZXg9YTthPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9iamVjdCIpO2Euc2V0QXR0cmlidXRlKCJkYXRhIiwKImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9ob21hZC1nbG9iYWwtY29uZmlncy5zY2huZWV2b25tb3JnZW4uY29tL2hvbWFkanNmbGFzaGRpc3BsYXkuc3dmIik7YS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Euc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7YS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpO2Euc2V0QXR0cmlidXRlKCJpZCIsImRpc3BtYWluIik7YS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJkaXNwbWFpbiIpO2Euc2V0QXR0cmlidXRlKCJzdHlsZSIsInZpc2liaWxpdHk6IHZpc2libGUiKTthLnNldEF0dHJpYnV0ZSgiRmxhc2hWYXJzIiwiZGF0YT0iK3RoaXMubnEoKSk7YS5pbm5lckhUTUw9JzxwYXJhbSBuYW1lPSJhbGxvd3NjcmlwdGFjY2VzcyIgdmFsdWU9ImFsd2F5cyI+PHBhcmFtIG5hbWU9ImFsbG93RnVsbFNjcmVlbiIgdmFsdWU9InRydWUiPjxwYXJhbSBuYW1lPSJiZ0NvbG9yIiB2YWx1ZT0iIzAwMDAwMCI+PHBhcmFtIG5hbWU9Im9wYXF1ZSIgdmFsdWU9ImRpcmVjdCI+JzsKdGhpcy5iLkY9YTt2YXIgYj10aGlzLmIuRixkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RoaXMuY29uZlsiaW5uZXJXYXJwcGVyLnN0eWxlIl0/ZC5zdHlsZT10aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdOmQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIjt0aGlzLmVhPXRoaXMueWEuYXBwZW5kQ2hpbGQoZCk7dGhpcy5iLkpjKCk7dGhpcy52aWRlbz10aGlzLmVhLmFwcGVuZENoaWxkKGIpO2I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO2Iuc3R5bGUudG9wPSIwcHgiO2Iuc3R5bGUud2lkdGg9dGhpcy55YS5vZmZzZXRXaWR0aCsicHgiO2Iuc3R5bGUuaGVpZ2h0PXRoaXMueWEub2Zmc2V0SGVpZ2h0KyJweCI7Yi5zdHlsZS5jdXJzb3I9InBvaW50ZXIiO2Iub25jbGljaz10aGlzLiRoLmJpbmQodGhpcyk7dGhpcy5lYS5hcHBlbmRDaGlsZChiKTt0aGlzLlpoKCk7dGhpcy53ZigpO3RoaXMub2U9c2V0SW50ZXJ2YWwodGhpcy5wby5iaW5kKHRoaXMpLAoxMDApO3JldHVybiBhfSxucTpmdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxiPXt9LGQ9MDtkPHRoaXMuYy5NLmxlbmd0aDtkKyspe3ZhciBjPWI9dGhpcy5jLk1bZF0sZTtlPWIudXJsO3ZhciBnPXRoaXMuTDtnLkthJiZnLmlzRW5hYmxlZCYmIWcuQ2MoKSYmKGU9Zy5sYShlKSxlPWUucHJvdG9jb2wrIjovLyIrZS5ob3N0KTtjLnVybD1lO2EucHVzaChiKX1yZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHttZWRpYWZpbGVzOmF9KSl9LHBvOmZ1bmN0aW9uKCl7dHJ5e3ZhciBhPXRoaXMudmlkZW8uZ2V0Rmxhc2hEaXNwbGF5U3RhdHVzKCk7dGhpcy52aWRlby5wYXVzZWQ9YS5wYXVzZWQ7YS50aW1lPj10aGlzLmMuZHVyYXRpb24/KGNsZWFySW50ZXJ2YWwodGhpcy5vZSksdGhpcy5QZCgpKTooMDxhLnRpbWUmJih0aGlzLnZpZGVvLmN1cnJlbnRUaW1lPWEudGltZSx0aGlzLnlmKCkpLCJlcnJvciI9PWEuc3RhdHVzJiYoY2xlYXJJbnRlcnZhbCh0aGlzLm9lKSwKdGhpcy5RZCgpKSx0aGlzLnZpZGVvLm11dGVkP3RoaXMudmlkZW8ubXV0ZSgpOnRoaXMudmlkZW8udW5tdXRlKCkpfWNhdGNoKGIpe319LFRoOmZ1bmN0aW9uKCl7dGhpcy5vaHx8KHRoaXMub2g9ITAsdGhpcy54Y3x8ZS50cmFjaygic3RhdHNfaGRfY2xvc2VkQmVmb3JlMXN0UXVhcnRpbGUiLCIiLCEwKSl9LEN1OmZ1bmN0aW9uKGEpe2UudihrLiRkLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSk7YT09dGhpcy5VaHx8dGhpcy5DYnx8KDA9PWEmJih0aGlzLnNiJiYod2luZG93LmNsZWFyVGltZW91dCh0aGlzLnNiKSx0aGlzLnNiPSExKSx0aGlzLlZlfHwoZS50cmFjaygic3RhdHNfaGRfaW1wcmVzc2lvbldpdGhPdXRSZXNvbHZlZFByb21pc2UiLCIiLCEwKSx0aGlzLnplPSEwKSx0aGlzLnRyYWNrKCJpbXByZXNzaW9uIiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsZnVuY3Rpb24oKXt0aGlzLlRoKCl9LmJpbmQodGhpcykpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLApmdW5jdGlvbigpe3RoaXMuVGgoKX0uYmluZCh0aGlzKSksdGhpcy50YyYmZS50cmFjaygic3RhdHNfaGRfYWRfaW1wcmVzc2lvbl9mbGFzaCIsIiIsITApLHRoaXMuQ2J8fGUudHJhY2soInN0YXRzX2hkX2FkX2ltcHJlc3Npb24iLCIiLCEwKSxlLlRhKCkmJmUudHJhY2soInN0YXRzX2hkX2FkX2ltcHJlc3Npb25fbW9iaWxlIiwiIiwhMCksdGhpcy50cmFjaygiY3JlYXRpdmVWaWV3IiksdGhpcy50cmFjaygic3RhcnQiKSxlLnYoay5QZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLGUudihrLlVmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSksdGhpcy50YyYmZS50cmFjaygicGxheWVkV2l0aEZsYXNoIiwiMTAzIikpLGE9PU1hdGguZmxvb3IodGhpcy5jLmR1cmF0aW9uLzQpJiYodGhpcy5MLnZjJiYoZS50cmFjaygicXVhcnRpbGUiLCJmaXJzdFF1YXJ0aWxlIiwhMCksdGhpcy54Yz0hMCksdGhpcy50cmFjaygiZmlyc3RRdWFydGlsZSIpLAplLnYoay5OZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKSxhPT1NYXRoLmZsb29yKHRoaXMuYy5kdXJhdGlvbi8yKSYmKHRoaXMuTC52YyYmZS50cmFjaygicXVhcnRpbGUiLCJtaWRwb2ludCIsITApLHRoaXMudHJhY2soIm1pZHBvaW50IiksZS52KGsuUmYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSksYT09TWF0aC5mbG9vcigzKnRoaXMuYy5kdXJhdGlvbi80KSYmKHRoaXMuTC52YyYmZS50cmFjaygicXVhcnRpbGUiLCJ0aGlyZFF1YXJ0aWxlIiwhMCksdGhpcy50cmFjaygidGhpcmRRdWFydGlsZSIpLGUudihrLlZmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpLHRoaXMuVWg9YSl9LHRyYWNrOmZ1bmN0aW9uKGEsYil7aWYoIXRoaXMuQ2Ipe3RyeXtpZih0aGlzLmVjW2FdPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHRoaXMuZWMuaW1wcmVzc2lvbiYmdGhpcy5lYy5jb21wbGV0ZSYmIXRoaXMucmYpe3RoaXMucmY9CiEwO3ZhciBkPXRoaXMuZWMuY29tcGxldGUtdGhpcy5lYy5pbXByZXNzaW9uLGM9InN0YXRzX2hkX3RpbWVkaWZmIjt0aGlzLkgmJihjKz0idnBhaWQiKTs1RTM+ZCYmKDEwPmQmJihkPTEwKSwwPmQmJihkPSJuZWdhdGl2ZSIpLGUudHJhY2soYyxkLCEwKSl9fWNhdGNoKGcpe31pZigibXV0ZSI9PWF8fCJ1bm11dGUiPT1hfHwicGF1c2UiPT1hfHwicmVzdW1lIj09YSl7aWYodGhpc1thKyJIYXNCZWVuVHJhY2tlZCJdKXJldHVybjt0aGlzW2ErIkhhc0JlZW5UcmFja2VkIl09ITB9ZD1bXTt0cnl7ZD10aGlzLnRxKHRoaXMuYy5PYSxhKX1jYXRjaChsKXtkPVtdfWZvcig7ZC5sZW5ndGg7KXRyeXt2YXIgbT1kLnBvcCgpOyJpbXByZXNzaW9uIj09YSYmKHRoaXMuZmU9ITApOyJpbXByZXNzaW9uIj09YSYmdGhpcy5KZC5pbXByZXNzaW9ucyYmZS5rcihtLnVybCx0aGlzLkpkLmltcHJlc3Npb25zKT90aGlzLkhlKG0udXJsLG0udHlwZSx7fSxmdW5jdGlvbihhKXt0cnl7dmFyIGI9YS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1VcmwiKTsKZS52KGsuYW4sdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHthZElkOnRoaXMuSmQuYWRJZCxpbXByZXNzaW9uVVJMOmJ9LHRoaXMuQygpKX1jYXRjaChkKXt9fS5iaW5kKHRoaXMpKTp0aGlzLkhlKG0udXJsLG0udHlwZSl9Y2F0Y2gocSl7fWlmKCFiKXRyeXt0aGlzLmMuT2E9dGhpcy5Ubyh0aGlzLmMuT2EsYSl9Y2F0Y2gocil7fX19LEhlOmZ1bmN0aW9uKGEsYixkLGMsZSl7YSYmInN0cmluZyI9PXR5cGVvZiBhJiZhLmxlbmd0aCYmKGI9dGhpcy5MLnphKGEpLGQmJmIuZG4oZCksY3x8KGM9dGhpcy5vZyksZXx8KGU9dGhpcy5vZyksdGhpcy5mbihhKSx0aGlzLkwuTGEoYixmdW5jdGlvbigpe3RoaXMueGgoYSk7YygpfS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7dGhpcy54aChhKTtlKCl9LmJpbmQodGhpcyksITEsITApKX0sZm46ZnVuY3Rpb24oYSl7dGhpcy5XYlthXT0ib3BlbiJ9LHhoOmZ1bmN0aW9uKGEpe3RoaXMuV2JbYV09ImNsb3NlZCJ9LEhvOmZ1bmN0aW9uKCl7dGhpcy5XYj0Ke319LCR0OmZ1bmN0aW9uKCl7dmFyIGE9MCxiO2ZvcihiIGluIHRoaXMuV2IpdGhpcy5XYi5oYXNPd25Qcm9wZXJ0eShiKSYmIm9wZW4iPT10aGlzLldiW2JdJiZhKys7cmV0dXJuIGF9LHRxOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhLnR5cGU9PWJ9KX0sVG86ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEudHlwZSE9PWJ9KX0sWHU6ZnVuY3Rpb24oKXt0aGlzLnZpZGVvLnN0eWxlJiYodGhpcy52aWRlby5zdHlsZS5jdXJzb3I9InBvaW50ZXIiLHRoaXMudmlkZW8ub25jbGljaz10aGlzLiRoLmJpbmQodGhpcykpfSwkaDpmdW5jdGlvbigpe2UuVGEoKSYmIm5vbmUiPT09dGhpcy5jb250cm9scy5zdHlsZS5kaXNwbGF5P3RoaXMuWWIoKTp0aGlzLmMuT2ImJihlLnYoay5pZyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMudHJhY2soImNsaWNrdHJhY2tpbmciKSwKIXRoaXMueGMmJmUuVGEoKSYmZS50cmFjaygic3RhdHNfaGRfY2xpY2t0aHJvdWdoQmVmb3JlMXN0UXVhcnRpbGUiLGUuYXEoKSwhMCksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT0iX3RvcCI7dGhpcy5MLiRjJiYoYT0iX2JsYW5rIik7dHJ5e3ZhciBiPXdpbmRvdy5vcGVuKCIiLGEpO2IuZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9IjxkaXY+PC9kaXY+IjtiLmRvY3VtZW50LmxvY2F0aW9uLmhyZWY9dGhpcy5jLk9ifWNhdGNoKGQpe3dpbmRvdy5vcGVuKHRoaXMuYy5PYixhKX19LmJpbmQodGhpcyksNTAwKSl9LFpoOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY2FwdGlvbil7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5jb25mWyJjYXB0aW9uLnN0eWxlIl0/YS5zdHlsZT10aGlzLmNvbmZbImNhcHRpb24uc3R5bGUiXTooYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUud2lkdGg9IjEwMCUiLGEuc3R5bGUuYmFja2dyb3VuZD0ibGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLDAsMCwwLjA1KSAwJSxyZ2JhKDAsMCwwLDAuMjUpIDEwMCUpIiwKYS5zdHlsZS5wYWRkaW5nPSIycHgiLGEuc3R5bGUuZm9udEZhbWlseT0iQXJpYWwsIFZlcmRhbmEiLGEuc3R5bGUuZm9udFNpemU9IjlweCIsYS5zdHlsZS5jb2xvcj0iI2ZmZmZmZiIsYS5zdHlsZS50ZXh0QWxpZ249ImNlbnRlciIsYS5zdHlsZS5ib3R0b209IjBweCIsYS5zdHlsZS5ib3hTaXppbmc9ImJvcmRlci1ib3giKTthLmlubmVySFRNTD10aGlzLlhjLnJlcGxhY2UoIlt0aW1lXSIsZS55ZygwKSk7dmFyIGI9dGhpcy5jb25mWyJjYXB0aW9uLmR1cmF0aW9uIl07dGhpcy5MLmFkJiYoYj10aGlzLkwuYWQpO2ImJndpbmRvdy5zZXRUaW1lb3V0KHRoaXMueGIuYmluZCh0aGlzKSwxRTMqYik7dGhpcy5jYXB0aW9uPXRoaXMuZWEuYXBwZW5kQ2hpbGQoYSl9fSx4YjpmdW5jdGlvbigpeyh0aGlzLmNvbmZbImNhcHRpb24uZHVyYXRpb24iXXx8dGhpcy5MLmFkKSYmdGhpcy5jYXB0aW9uJiZ0aGlzLmNhcHRpb24uc3R5bGUmJih0aGlzLmNhcHRpb24uc3R5bGUuZGlzcGxheT0ibm9uZSIpfSwKR2Q6ZnVuY3Rpb24oKXsodGhpcy5jb25mWyJjYXB0aW9uLmR1cmF0aW9uIl18fHRoaXMuTC5hZCkmJnRoaXMuY2FwdGlvbiYmdGhpcy5jYXB0aW9uLnN0eWxlJiYodGhpcy5jYXB0aW9uLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9LHdmOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmNvbnRyb2xzKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuaWQ9dGhpcy5Rbzt0aGlzLmNvbmZbImNvbnRyb2xzLnN0eWxlIl0/ZC5zdHlsZT10aGlzLmNvbmZbImNvbnRyb2xzLnN0eWxlIl06KGQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixkLnN0eWxlLndpZHRoPSIxMDAlIixkLnN0eWxlLmZvbnRGYW1pbHk9IkFyaWFsLCBWZXJkYW5hIixkLnN0eWxlLmNvbG9yPSIjZmZmZmZmIixkLnN0eWxlLnRleHRBbGlnbj0iY2VudGVyIixkLnN0eWxlLmJvdHRvbT0iMHB4IixkLnN0eWxlLnpJbmRleD0iMTAwMDAiKTtkLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsCmZ1bmN0aW9uKCl7dGhpcy5ZYigpO3RoaXMuR2QoKX0uYmluZCh0aGlzKSk7ZC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt0aGlzLnliKCk7dGhpcy54YigpfS5iaW5kKHRoaXMpKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbInBsYXlQYXVzZS5zdHlsZSJdP2Muc3R5bGU9dGhpcy5jb25mWyJwbGF5UGF1c2Uuc3R5bGUiXTooYy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZmxvYXQ6bGVmdCIpLGMuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixjLnN0eWxlWyJmbG9hdCJdPSJsZWZ0IixjLnN0eWxlLmN1cnNvcj0icG9pbnRlciIpO2MuaWQ9dGhpcy5EYjtjLmlubmVySFRNTD10aGlzLmNvbmYucGF1c2VCdXR0b247InZwYWlkIj09YT8oYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5RaC5iaW5kKHRoaXMpKSxiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLlFoLmJpbmQodGhpcykpKTooYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsCnRoaXMuUGguYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5QaC5iaW5kKHRoaXMpKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7dGhpcy5ZYigpO3RoaXMuR2QoKX0uYmluZCh0aGlzKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt0aGlzLnliKCk7dGhpcy54YigpfS5iaW5kKHRoaXMpKTt2YXIgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbIm11dGUuc3R5bGUiXT9nLnN0eWxlPXRoaXMuY29uZlsibXV0ZS5zdHlsZSJdOihnLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJmbG9hdDpyaWdodCIpLGcuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixnLnN0eWxlWyJmbG9hdCJdPSJyaWdodCIsZy5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTtnLmlkPXRoaXMuQmI7Zy5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b247InZwYWlkIj09YT9nLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwKdGhpcy5CdS5iaW5kKHRoaXMpKTpnLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLkF1LmJpbmQodGhpcykpO2cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe3RoaXMuWWIoKTt0aGlzLkdkKCl9LmJpbmQodGhpcykpO2cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7dGhpcy55YigpO3RoaXMueGIoKX0uYmluZCh0aGlzKSk7dmFyIGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5jb25mWyJza2lwLnN0eWxlIl0/bC5zdHlsZT10aGlzLmNvbmZbInNraXAuc3R5bGUiXToobC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwicG9zaXRpb246YWJzb2x1dGU7dG9wOi01MHB4O3JpZ2h0OjBweCIpLGwuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixsLnN0eWxlLnRvcD0iLTUwcHgiLGwuc3R5bGUucmlnaHQ9IjBweCIsbC5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTtsLmlkPXRoaXMuR2g7bC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLApmdW5jdGlvbigpe3ZhciBhPWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpO2EmJmFbMF0mJihhWzBdLnN0eWxlLm9wYWNpdHk9MSl9KTtsLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IixmdW5jdGlvbigpe3ZhciBhPWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpO2EmJmFbMF0mJihhWzBdLnN0eWxlLm9wYWNpdHk9LjYpfSk7bC5pbm5lckhUTUw9IiI7ZC5hcHBlbmRDaGlsZChjKTt0aGlzLmMuaGYmJmQuYXBwZW5kQ2hpbGQobCk7ZC5hcHBlbmRDaGlsZChnKTtkLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2UuVGEoKXx8KHRoaXMuZWEuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe3RoaXMuWWIoKTt0aGlzLkdkKCl9LmJpbmQodGhpcykpLHRoaXMuZWEuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7dGhpcy55YigpO3RoaXMueGIoKX0uYmluZCh0aGlzKSkpO3RoaXMuY29udHJvbHM9dGhpcy5lYS5hcHBlbmRDaGlsZChkKTsKdGhpcy5jb25mWyJyZXN1bWVDb250cm9sLnN0eWxlIl0/Yi5zdHlsZT10aGlzLmNvbmZbInJlc3VtZUNvbnRyb2wuc3R5bGUiXTooYi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGIuc3R5bGUud2lkdGg9IjEwMCUiLGIuc3R5bGUuZm9udEZhbWlseT0iQXJpYWwsIFZlcmRhbmEiLGIuc3R5bGUuY29sb3I9IiNmZmZmZmYiLGIuc3R5bGUudGV4dEFsaWduPSJjZW50ZXIiLGIuc3R5bGUuYm90dG9tPSIwcHgiLGIuc3R5bGUuekluZGV4PSIxMDAwMCIsYi5zdHlsZS5kaXNwbGF5PSJub25lIixkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpLGQub25lcnJvcj1mdW5jdGlvbigpe3RoaXMud2EmJih0aGlzLndhLnN0eWxlLmJhY2tncm91bmQ9InVybCgnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9iaWdwbGF5MTkwNjA2LnBuZycpIG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIil9LmJpbmQodGhpcyksZC5zcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSGdBQUFCNENBWUFBQUE1WkRiU0FBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeWhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVOaTFqTVRRMUlEYzVMakUyTXpRNU9Td2dNakF4T0M4d09DOHhNeTB4TmpvME1Eb3lNaUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01Ua2dLRTFoWTJsdWRHOXphQ2tpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2T0Rnd01VWTVOa1kzUmpsQ01URkZPVGt3UmpnNVJUZ3pSRFU0T0RRME1qVWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZPRGd3TVVZNU56QTNSamxDTVRGRk9Ua3dSamc1UlRnelJEVTRPRFEwTWpVaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzRPREF4UmprMlJEZEdPVUl4TVVVNU9UQkdPRGxGT0RORU5UZzRORFF5TlNJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvNE9EQXhSamsyUlRkR09VSXhNVVU1T1RCR09EbEZPRE5FTlRnNE5EUXlOU0l2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHZWN29SSUFBQXlyU1VSQlZIamE3RjBKYkZUWEZiMkRiY0JBS1FHTXpXNldRRnBTS2lyV1FnZ3BVSUhiaEpLMHFnMUdrQWdvUXFsRTFRcXpTRWhJN0dEUzRyS0pGZ3pZMkdyQllJc0NqVkFOaENXaHhSVENXb1BManNHQU1hRUdZd3k5NTgzNzFqRE1qR2ZHZitiL1AvOGQ2V2p3T0JuL2Q4KzhlOSs5YjNQMDd0MmI5SVRENGZENXM3ZjNkRUEwZjI0YmZ1M0tiTXVNWStMbk41ak5tQTBsWHpDcm1OWE1TbVk1OHk2empIbWJXZkx5NVV2OC9GenZCK1RQcmZNOVQvOU52WXhDMXNWYlRIdzdCekM3NDk5c0hJamF0SjZmK3o4cDl0Zk1ZdVpYek5QTUMxWTBrcFVFUnE4Y3hoekJITXpzR2FLLzAxUXkwZTM5aTh3anpQM01BN0szSzRIcmlRVG0rOHlmTWQ5anhocjRMRDBsUDJFK1lSWXk4NWtGekZLekd0QmgwaGljeEp6QS9JRFp4T1Jmd2tvcGNoYnpiMmFMd1ExTVpDajB6c25NSW1tb1pBdUlTL0laOGF5NzViTlBOdGpUbUU1Z0dHTW1ScS9NRGN3K0ZoNzQ5WkZ0S0pGdGlyVzd3SjlLWXl5VjhUWlNrQ0RiVkNMYmFEdUJrNlE3eTRnd1lUMEpuU0hibW1TSFVUUWFuTTREaVhGa0wvU1I0NHB0ek4rR2M5UWR6aDQ4aVhtT2FUZHhYVEZPMm1CU0pBbjhMZVpXNWlaeWxnM3RqamVrTGJaSzIxamFSUTltZDV6TnI1MlZycThobGZtT2ZEMXN4Ujc4Sy9uZ1NsenZnRzIra0xheWxNQ2ZNZGNwL2Z6R09ta3pTd2k4blRsRGFSWXdaa2pibVRZR1J6SDNjOHdkcHJRS0doK1JjNlpxT0xQR1REMFlFK25IeURtZHAxQS92Q3R0MlZDWEhsemYyUXVIdzRHZWkzblN2a29iM2RCUDJuUWc2MU5qZEE4dVZPS0dCSDJsYlEyTndYbjhEWHRIYVJFeXdMWjV6QStONk1HL1o0NVZHb1FjWTZXdGd4djV0bW5USnBpNGkyVXJpNVR0dzRhQnpKdnNMWXZDNGFLL3ozL296OHJtWVFjV0VweGduZ3lsaThiUS9lL0sxb1poYjZEcFU2QUNZejR6WHRuWk1NUkxEVUlpY0FvNUt5MEt4dUlqcVlXdUFuK2J1Vm5aMWpUWUxEWFJUV0I4WUl5eXEya1E0MitIODBkZzdDZ1lvMnhxT295UjJ0UmI0STFHdGlJcUtvb2VQWHBFang4L3BnWU5HaWhaQTlRbUtpNHV6dGZ2c2RJZzFjZ1dWRlZWVWRldVhlbjU4K2RVWEZ4TUxWcTBFRUxydmNYRG9taEJ6aFdhSjRMcHdaZ2xXbVowQzY1ZXZVb1RKMDZrL1B4OEdqVnFGRjI2ZElsdTNib2xSQTdSUG1PcllRblRFWXpBdjJFMk4vcnBhMnBxcUtLaWdoSVRFeWt2TDQrMmJ0MUszYnAxbzNQbnp0SERodytGQzFlOTJQc0tHbTh1R3NKam9YWmpvNS8rd1lNSE5HTEVDQm80Y0tENHVWZXZYcFNhbWtyTm1qV2preWRQMHVYTGw4Vy9HelpzU0M5ZXZMQ3J5RERPY3VaTGYzdnd4LzdtV1VZZ05qYVcwdExTcUxDd2tLWk9uVXJsNWVYQ2RTTXUyM1FnQnEwbUJlS2kwNnpRcXM2ZE85UHExYXRwOSs3ZE5IcjBhTkdiYlJ5ZjAvd1ZlQ2p6VFN1MWJOQ2dRYlJqeHc3YXVIR2ppTTluejU2MVkzeCtVMnIzcXNCd2EyNzgxTU43aHRKZmpCOC9uZzRkT2tSTGxpd1I0cDQ1YzRhZVBuMWFtMWJaZ0s5cDU5NkRNV3EyOUNxTnhvMGIwOHlaTStuZ3dZTTBiZG8wdW52M3JwM2k4MWozek1lOXhUOG5heCt0VkF1a1ZXdldyS0c5ZS9mUzhPSERSWkhFQnZFNVdtcm8xVVVubTlYOUJJc2hRNGFJUWRqbXpadHI0ek5HM1ZwdmprQTNuZUxOUldOYjQvQkkvV29qUGg4NWNvUVdMRmhBMGRIUlFtZ3RQa2NZM3BQRmo5ZGM5SS9KWEtmdTZBNFVRK2JPblNzR1l0T25UNmQ3OSs2SitJd0NTUVFKSGVYYVVkMEZ0Z1VRbjVFLzc5bXpKMUx6NTFHZUJIN1hicFVCeE9kZHUzWlJWbGFXbUxHS29QcjJqOXdGeGdtdDNjaW1TRTVPcHNPSEQ5T2lSWXNvSmlhR3pwOC9MNllwTGV5MmEvWFVXakNBYkE3VXQyZlBuaTN5NXlsVHBvajRYRkpTWXVYOGVZQ3J3RDhnaGRyNHZHN2RPcEZhalJ3NTBzcnh1WTlySHZ5MldmTTZvNllBaHc0ZFNnVUZCYUsrcmNWbkxYKzJTRDc4dHBZSDQydlpVL1ZkejVnd1lZS0l6NHNYTHhhREx3aU4rR3lCZ1JnMGRVRGdkc3lPU2tyZjhYbldyRmtpUG1QK3VheXN6QXIxYldqYURpNDZrUmx0ZHBkakJxRFV1WDc5ZXRxM2IxOXRmZnZtelp1MXNkbGtOb09taVZvUFZnZ3dmMGFSWk11V0xXSlFkdUhDQlpFL203QTN0OE1UeFNuSmdnUFdoaDAvZnB6bXo1OHY2dHNRMm1UeE9RNEN0MVJTQlk5R2pSclJ2SG56UkgwYjg4OWFmZHNrOGJrbFluQXJGWHQxS0IxeEtyVjI3VnJodXJFSzFDVHh1UlcrWXMxVlA5UTNmNGJJMmRuWllsQjI4ZUpGSSt2YnpTRndJeVdML2hnM2JweVlmMTY0Y0tHb2J5TStQM3YyTE54Q040TEFhbHRvaU5Da1NST2FNMmVPS0pSTW5qeFp2SWRGQm1GRURBUitvYVFJTFpCS2JkaXdRU3cydUgvL3Z0aU9FeTVna1ZhVmtpQzBRSy9GQW9QdDI3Zlg3bzRNRTZvaDhETWxRZWlRbTV0THk1Y3ZwNktpSXNLWlpLMWF0UkpiWWNPRUtwU3pucGpkU0ZiY0M2eE5VR0JFM2JScFUrclJvNGRvUjNWMWRUZ2Y0eHYwNEllcW4rbUhhOWV1MGRLbFM4VXkzY3JLU3BFZm84cGwwTFJuQlFRdVU3TFVIMGlCVnF4WUlZb2ROMjdjb0E0ZE9naGlRR1hndHRaN0VQaU9rcWQrd0tiMDlQUjBPblhxRkxWdTNWcTRZNGdhenRHeUY1UWlCdDlTRWdVZloxSEl3UFFoY3Q3dTNidUw5MDBncklaYjZNRlh5SGxmZmJTU3pEOWN1WEpGREtBd1hZZ1VxRXVYTGtiR1dXK0FwbGNoNmsyTURjaTUxRktoamppN2N1VktXclZxRmQyK2ZWdkVXUFJjZytPc04xeUh0bHJHL1I4bG4yOWc4Z0RuaEdCcExZUkduTVZVb1luY3NUc3VJc1BVTHVVNFN5N2JIVlFlN0RtZnhkNWp4Rms4VHhpTEZjRUNtdGJHM1JPcWo3NEtuTStseGRrblQ1NkllcklKNDZ3dm5IQVYrQ3NscVJNWU5DSE9vbmFNQmUvdDI3YzNjNXoxaGVPdUFwZXcyN2xNTnQ2ZkJHemJ0azFVb1U2ZlBrMHRXN1lVN2hpaVdzQWR1NlBFNFhCY0ZnSzd4TGVEZGhYNDZOR2pJcDlGbk1YQUNTc3hZQmNURDZEcXdnRk5WOWZjOTNQbUozWVM5dnIxNnlMT2J0cTBTYmhtbkx0bHNUanJEWjlyLzNEdHdYZ1RYMW5UN2NuUWV4UU5sN3RzMlRMS3lNaWcwdEpTU2toSUVETStKaWt2MWhjMXJnSzd6anlYa3c1WHFaa2RPVGs1MUxkdlg3RzZBcU5qdUdPa1B4QTJRbzRvTHBSYXZ1YWlnVnptaUVnVTFyVnVqRVZ3S0MrS3I3djFleXg1MEpDOENmeFhjdDVHSFRGMWFlU3pPRmtuTXpOVHVPWk9uVHBGU3B6MUdIMmtobDRGZnNUY3lmeUYxVnVxemMraWJuem56cDNhT0d2QmZEWVE3Sklha3FjWXJPR1BWbThsNnNiOSt2VVRjUmFqWTljNEcrSEljSC9Ea3lzK3hDd21pNTA0Q3h3N2RreTRZK1N6aUxOWUxtUHhmRFlRRkV2dDZoUVlXTXI4azFWYWhuVlFPQ0ZIcXh0SGVKejFCby8zYTNpNzRqMlRtVTRtUHZVZHdGWk5iWDRXK1d4OGZEeTFiZHMyVXZMWlFGREIzT1RwRncxOEpNc0xUSjBMNU9aUy8vNzl4ZFlRYmZWaWhPV3pnV0MrMU14dmdZSFAzRWRrUnNIVjFXSkRWMUpTRXFXa3BJZ0R5NURQWW1MQVpqM1dGVmoyN1BXR2NGLzVMaXcyVStiRmhxSmp4NDVpTkR4anhneHhyQkVXaitNOUc4WlpUNWhGSG01YjBlREFnS1FPL0plWmFOVFR3LzNpVGdaczJzS3NENjRCd2pVNk51NnhycmhhbHpiK0NJenpoLzloVkF2UVN6R0FBakNJUW85VjE5clZBb2VPK3B3LzhHZWJHejRnMzZnV29MeUl4ZVNnVFFkUTNwQlBma3dPK2J1UGNTS3pXdG5VTklBV2svenlnSDcyaUFvcDhqWmxXMU5nRXZtNWFUQ1FuY2c1ekR4bFc4T1JGMGhIQzNTcmVRcXB6V3BHNG83VXdQOUJhb0IvNEJtNzlOSDhXcVJzYlFpU0hBNUhRQ2N5UkRWdkh2QXhXY2hac0NQeGZXWHZzR0lxT2EvOHBWQUxUTElINDU2bGdjcnVZY0VmbUl1QytSL3JjOXdMYnAzZXFXd2ZjdXdrSHpkOGgxSmc0RVBtRjBxRGtPR3d0REVaSlRDQVV1YS9sQmE2QTV2SGh0WDNRL1FRR0ZYL3djeC9LazEwQTJ6NVEvSXl4eHR1Z1VYNnhCeEV6djFOQ3ZYRFFXbExYUTZvQzNZVTdRbWNJci9NNU5mdk1uc3BuWUxDWDVnLzVWeFh0eG1WVUJ5YStFdHlydWRTQ0F6cDBuYTZJbFNuWXY1T0p1WUsvbUdxdEpudUNPVVdsUTNzc3I4bTUxNlp6a3BEajhDS2pHUjJ5VitHNmcrRStseGJQUGozbU5sS3k5ZVFMVzN6WlNqL1NEZ09MdjZHbWNyOG1GeTJOZG9ZNWRJV3FkSTJaSFdCTldUSzBYV09qY1hOa1RiSUROY2YxRE5OOGdlUE9TN3ZJR2ZsNnp2TXRqWVI5dDlNWE5xd2hPUHRZL2RmdWw5YnErYzF0a2JkM0lScEw5eFovR3R5VGo5R0trcGxHL3RRRUZOOVZoWllBN2FxNG1TZnRBZ1R1bFMycVJzWnZCM1hnUU0xOVlMN0FqNVBDL3A4TFBLTDVkK041OWZwOGh0dlJaeGtybVVYbThXdkhxOUs4T1IrUSttaXpTU3c2KzkrSWtlWkh6Q2JtRnpVU21ZQk0wdHp3NzRFVWdLL2lnUXA4aGh5VGt2R21rUlU5RTV0UTBDQmUzaFJBdnN2c0NzdzRoNUd6bE9BTUQwWjdtdnBjVHp2RWVaKzVnSG03VUJFVkFKVHdBZWV2Y1hzVGM1MVlUaExIMVdoTmpxNGRMamN1MHlVV1MrUnM5SjBtbm5CYjZNcWdYVVIyQjNSVXVDdXNyZmo0dXQ0Wmd0bU0zSmV3cW5kMDRpdEg3anhEVGtwZGdoZ3ZYR1o3SlVsVXVDZ1R5QTFrOEQvRjJBQUU4YkJqOGQ0ZEM0QUFBQUFTVVZPUks1Q1lJST0iLApiLnN0eWxlLmJhY2tncm91bmQ9InVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFIZ0FBQUI0Q0FZQUFBQTVaRGJTQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5aHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU5pMWpNVFExSURjNUxqRTJNelE1T1N3Z01qQXhPQzh3T0M4eE15MHhOam8wTURveU1pQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTkRJREl3TVRrZ0tFMWhZMmx1ZEc5emFDa2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZPRGd3TVVZNU5rWTNSamxDTVRGRk9Ua3dSamc1UlRnelJEVTRPRFEwTWpVaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk9EZ3dNVVk1TnpBM1JqbENNVEZGT1Rrd1JqZzVSVGd6UkRVNE9EUTBNalVpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvNE9EQXhSamsyUkRkR09VSXhNVVU1T1RCR09EbEZPRE5FTlRnNE5EUXlOU0lnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG80T0RBeFJqazJSVGRHT1VJeE1VVTVPVEJHT0RsRk9ETkVOVGc0TkRReU5TSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QdlY3b1JJQUFBeXJTVVJCVkhqYTdGMEpiRlRYRmIyRGJjQkFLUUdNelc2V1FGcFNLaXJXUWdncFVJSGJoSkswcWcxR2tBZ29RcWxFMVFxelNFaEk3R0RTNHJLSkZnelkyR3JCWUlzQ2pWQU5oQ1doeFJUQ1dvUExqc0dBTWFFR1l3eTk1ODM3MWpETWpHZkdmK2IvUC84ZDZXandPQm4vZDgrOGU5KzliM1AwN3QyYjlJVEQ0ZkQ1czdmM2RFQTBmMjRiZnUzS2JNdU1ZK0xuTjVqTm1BMGxYekNybU5YTVNtWTU4eTZ6akhtYldmTHk1VXY4L0Z6dkIrVFByZk05VC85TnZZeEMxc1ZiVEh3N0J6Qzc0OTlzSElqYXRKNmYrejhwOXRmTVl1Wlh6TlBNQzFZMGtwVUVScThjeGh6QkhNenNHYUsvMDFReTBlMzlpOHdqelAzTUE3SzNLNEhyaVFUbSs4eWZNZDlqeGhyNExEMGxQMkUrWVJZeTg1a0Z6Rkt6R3RCaDBoaWN4SnpBL0lEWnhPUmZ3a29wY2hiemIyYUx3UTFNWkNqMHpzbk1JbW1vWkF1SVMvSVo4YXk3NWJOUE50alRtRTVnR0dNbVJxL01EY3crRmg3NDlaRnRLSkZ0aXJXN3dKOUtZeXlWOFRaU2tDRGJWQ0xiYUR1Qms2UTd5NGd3WVQwSm5TSGJtbVNIVVRRYW5NNERpWEZrTC9TUjQ0cHR6TitHYzlRZHpoNDhpWG1PYVRkeFhURk8ybUJTSkFuOExlWlc1aVp5bGczdGpqZWtMYlpLMjFqYVJROW1kNXpOcjUyVnJxOGhsZm1PZkQxc3hSNzhLL25nU2x6dmdHMitrTGF5bE1DZk1kY3AvZnpHT21relN3aThuVGxEYVJZd1pramJtVFlHUnpIM2M4d2RwclFLR2grUmM2WnFPTFBHVEQwWUUrbkh5RG1kcDFBL3ZDdHQyVkNYSGx6ZjJRdUh3NEdlaTNuU3Zrb2IzZEJQMm5RZzYxTmpkQTh1Vk9LR0JIMmxiUTJOd1huOERYdEhhUkV5d0xaNXpBK042TUcvWjQ1VkdvUWNZNld0Z3h2NXRtblRKcGk0aTJVcmk1VHR3NGFCekp2c0xZdkM0YUsvejMvb3o4cm1ZUWNXRXB4Z25neWxpOGJRL2UvSzFvWmhiNkRwVTZBQ1l6NHpYdG5aTU1STERVSWljQW81S3kwS3h1SWpxWVd1QW4rYnVWbloxalRZTERYUlRXQjhZSXl5cTJrUTQyK0g4MGRnN0NnWW8yeHFPb3lSMnRSYjRJMUd0aUlxS29vZVBYcEVqeDgvcGdZTkdpaFpBOVFtS2k0dXp0ZnZzZElnMWNnV1ZGVlZVZGV1WGVuNTgrZFVYRnhNTFZxMEVFTHJ2Y1hEb21oQnpoV2FKNExwd1pnbFdtWjBDNjVldlVvVEowNmsvUHg4R2pWcUZGMjZkSWx1M2JvbFJBN1JQbU9yWVFuVEVZekF2MkUyTi9ycGEycHFxS0tpZ2hJVEV5a3ZMNCsyYnQxSzNicDFvM1BuenRIRGh3K0ZDMWU5MlBzS0dtOHVHc0pqb1haam81Lyt3WU1ITkdMRUNCbzRjS0Q0dVZldlhwU2Fta3JObWpXamt5ZFAwdVhMbDhXL0d6WnNTQzlldkxDcnlERE9jdVpMZjN2d3gvN21XVVlnTmphVzB0TFNxTEN3a0taT25Vcmw1ZVhDZFNNdTIzUWdCcTBtQmVLaTA2elFxczZkTzlQcTFhdHA5KzdkTkhyMGFOR2JiUnlmMC93VmVDanpUU3UxYk5DZ1FiUmp4dzdhdUhHamlNOW56NTYxWTN4K1UycjNxc0J3YTI3ODFNTjdodEpmakI4L25nNGRPa1JMbGl3UjRwNDVjNGFlUG4xYW0xYlpnSzlwNTk2RE1XcTI5Q3FOeG8wYjA4eVpNK25nd1lNMGJkbzB1bnYzcnAzaTgxajN6TWU5eFQ4bmF4K3RWQXVrVld2V3JLRzllL2ZTOE9IRFJaSEVCdkU1V21ybzFVVW5tOVg5QklzaFE0YUlRZGptelp0cjR6TkczVnB2amtBM25lTE5SV05iNC9CSS9Xb2pQaDg1Y29RV0xGaEEwZEhSUW1ndFBrY1kzcFBGajlkYzlJL0pYS2Z1NkE0VVErYk9uU3NHWXRPblQ2ZDc5KzZKK0l3Q1NRUUpIZVhhVWQwRnRnVVFuNUUvNzltekoxTHo1MUdlQkg3WGJwVUJ4T2RkdTNaUlZsYVdtTEdLb1ByMmo5d0Z4Z210M2NpbVNFNU9wc09IRDlPaVJZc29KaWFHenA4L0w2WXBMZXkyYS9YVVdqQ0FiQTdVdDJmUG5pM3k1eWxUcG9qNFhGSlNZdVg4ZVlDcndEOGdoZHI0dkc3ZE9wRmFqUnc1MHNyeHVZOXJIdnkyV2ZNNm82WUFodzRkU2dVRkJhSytyY1ZuTFgrMlNENzh0cFlINDJ2WlUvVmR6NWd3WVlLSXo0c1hMeGFETHdpTitHeUJnUmcwZFVEZ2RzeU9Ta3JmOFhuV3JGa2lQbVArdWF5c3pBcjFiV2phRGk0NmtSbHRkcGRqQnFEVXVYNzlldHEzYjE5dGZmdm16WnUxc2Rsa05vT21pVm9QVmdnd2YwYVJaTXVXTFdKUWR1SENCWkUvbTdBM3Q4TVR4U25KZ2dQV2hoMC9mcHptejU4djZ0c1EybVR4T1E0Q3QxUlNCWTlHalJyUnZIbnpSSDBiODg5YWZkc2s4YmtsWW5BckZYdDFLQjF4S3JWMjdWcmh1ckVLMUNUeHVSVytZczFWUDlRM2Y0YkkyZG5aWWxCMjhlSkZJK3ZielNGd0l5V0wvaGczYnB5WWYxNjRjS0dvYnlNK1AzdjJMTnhDTjRMQWFsdG9pTkNrU1JPYU0yZU9LSlJNbmp4WnZJZEZCbUZFREFSK29hUUlMWkJLYmRpd1FTdzJ1SC8vdnRpT0V5NWdrVmFWa2lDMFFLL0ZBb1B0MjdmWDdvNE1FNm9oOERNbFFlaVFtNXRMeTVjdnA2S2lJc0taWksxYXRSSmJZY09FS3BTem5wamRTRmJjQzZ4TlVHQkUzYlJwVStyUm80ZG9SM1YxZFRnZjR4djA0SWVxbittSGE5ZXUwZEtsUzhVeTNjcktTcEVmbzhwbDBMUm5CUVF1VTdMVUgwaUJWcXhZSVlvZE4yN2NvQTRkT2doaVFHWGd0dFo3RVBpT2txZCt3S2IwOVBSME9uWHFGTFZ1M1ZxNFk0Z2F6dEd5RjVRaUJ0OVNFZ1VmWjFISXdQUWhjdDd1M2J1TDkwMGdySVpiNk1GWHlIbGZmYlNTekQ5Y3VYSkZES0F3WFlnVXFFdVhMa2JHV1crQXBsY2g2azJNRGNpNTFGS2hqamk3Y3VWS1dyVnFGZDIrZlZ2RVdQUmNnK09zTjF5SHRsckcvUjhsbjI5ZzhnRG5oR0JwTFlSR25NVlVvWW5jc1RzdUlzUFVMdVU0U3k3YkhWUWU3RG1meGQ1anhGazhUeGlMRmNFQ210YkczUk9xajc0S25NK2x4ZGtuVDU2SWVySUo0Nnd2bkhBVitDc2xxUk1ZTkNIT29uYU1CZS90MjdjM2M1ejFoZU91QXBldzI3bE1OdDZmQkd6YnRrMVVvVTZmUGswdFc3WVU3aGlpV3NBZHU2UEU0WEJjRmdLN3hMZURkaFg0Nk5HaklwOUZuTVhBQ1NzeFlCY1RENkRxd2dGTlY5ZmM5M1BtSjNZUzl2cjE2eUxPYnRxMFNiaG1uTHRsc1RqckRaOXIvM0R0d1hnVFgxblQ3Y25RZXhRTmw3dHMyVExLeU1pZzB0SlNTa2hJRURNK0ppa3YxaGMxcmdLN3pqeVhrdzVYcVprZE9UazUxTGR2WDdHNkFxTmp1R09rUHhBMlFvNG9McFJhdnVhaWdWem1pRWdVMXJWdWpFVndLQytLcjd2MWV5eDUwSkM4Q2Z4WGN0NUdIVEYxYWVTek9Ga25Nek5UdU9aT25UcEZTcHoxR0gya2hsNEZmc1RjeWZ5RjFWdXF6YytpYm56bnpwM2FPR3ZCZkRZUTdKSWFrcWNZck9HUFZtOGw2c2I5K3ZVVGNSYWpZOWM0RytISWNIL0RreXMreEN3bWk1MDRDeHc3ZGt5NFkrU3ppTE5ZTG1QeGZEWVFGRXZ0NmhRWVdNcjhrMVZhaG5WUU9DRkhxeHRIZUp6MUJvLzNhM2k3NGoyVG1VNG1QdlVkd0ZaTmJYNFcrV3g4ZkR5MWJkczJVdkxaUUZEQjNPVHBGdzE4Sk1zTFRKMEw1T1pTLy83OXhkWVFiZlZpaE9XemdXQysxTXh2Z1lIUDNFZGtSc0hWMVdKRFYxSlNFcVdrcElnRHk1RFBZbUxBWmozV0ZWajI3UFdHY0YvNUxpdzJVK2JGaHFKang0NWlORHhqeGd4eHJCRVdqK005RzhaWlQ1aEZIbTViMGVEQWdLUU8vSmVaYU5UVHcvM2lUZ1pzMnNLc0Q2NEJ3alU2TnU2eHJyaGFsemIrQ0l6emgvOWhWQXZRU3pHQUFqQ0lRbzlWMTlyVkFvZU8rcHcvOEdlYkd6NGczNmdXb0x5SXhlU2dUUWRRM3BCUGZrd08rYnVQY1NLeld0blVOSUFXay96eWdINzJpQW9wOGpabFcxTmdFdm01YVRDUW5jZzV6RHhsVzhPUkYwaEhDM1NyZVFxcHpXcEc0bzdVd1A5QmFvQi80Qm03OU5IOFdxUnNiUWlTSEE1SFFDY3lSRFZ2SHZBeFdjaFpzQ1B4ZldYdnNHSXFPYS84cFZBTFRMSUg0NTZsZ2NydVljRWZtSXVDK1IvcmM5d0xicDNlcVd3ZmN1d2tIemQ4aDFKZzRFUG1GMHFEa09Hd3RERVpKVENBVXVhL2xCYTZBNXZIaHRYM1EvUVFHRlgvd2N4L0trMTBBMno1US9JeXh4dHVnVVg2eEJ4RXp2MU5DdlhEUVdsTFhRNm9DM1lVN1FtY0lyL001TmZ2TW5zcG5ZTENYNWcvNVZ4WHR4bVZVQnlhK0V0eXJ1ZFNDQXpwMG5hNklsU25ZdjVPSnVZSy9tR3F0Sm51Q09VV2xRM3NzcjhtNTE2WnprcERqOENLakdSMnlWK0c2ZytFK2x4YlBQajNtTmxLeTllUUxXM3paU2ovU0RnT0x2NkdtY3I4bUZ5Mk5kb1k1ZElXcWRJMlpIV0JOV1RLMFhXT2pjWE5rVGJJRE5jZjFETk44Z2VQT1M3dklHZmw2enZNdGpZUjl0OU1YTnF3aE9QdFkvZGZ1bDlicStjMXRrYmQzSVJwTDl4Wi9HdHlUajlHS2twbEcvdFFFRk45VmhaWUE3YXE0bVNmdEFnVHVsUzJxUnNadkIzWGdRTTE5WUw3QWo1UEMvcDhMUEtMNWQrTjU5ZnA4aHR2Ulp4a3JtVVhtOFd2SHE5SzhPUitRK21pelNTdzYrOStJa2VaSHpDYm1GelVTbVlCTTB0enc3NEVVZ0svaWdRcDhoaHlUa3ZHbWtSVTlFNXRRMENCZTNoUkF2c3ZzQ3N3NGg1R3psT0FNRDBaN212cGNUenZFZVorNWdIbTdVQkVWQUpUd0FlZXZjWHNUYzUxWVRoTEgxV2hOanE0ZExqY3UweVVXUytSczlKMG1ubkJiNk1xZ1hVUjJCM1JVdUN1c3JmajR1dDRaZ3RtTTNKZXdxbmQwNGl0SDdqeERUa3BkZ2hndlhHWjdKVWxVdUNnVHlBMWs4RC9GMkFBRThiQmo4ZDRkQzRBQUFBQVNVVk9SSzVDWUlJPScpIG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIiwKYi5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTt0aGlzLndhPXRoaXMuZWEuYXBwZW5kQ2hpbGQoYik7dGhpcy5iLllmKGZ1bmN0aW9uKGEpe3RoaXMud2Euc3R5bGUuaGVpZ2h0PWEuaGVpZ2h0KyJweCJ9LmJpbmQodGhpcykpOyJ2cGFpZCIhPWEmJnRoaXMuYi5mLnZhJiZ0aGlzLmIuZi52YSgpJiYoZS52KGsuamcsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSx0aGlzLk5lKCkpO3RoaXMueWIoKX19LHliOmZ1bmN0aW9uKCl7dGhpcy5jb250cm9scy5zdHlsZS5kaXNwbGF5PSJub25lIn0sWWI6ZnVuY3Rpb24oKXt0aGlzLndhJiYiYmxvY2siPT10aGlzLndhLnN0eWxlLmRpc3BsYXl8fHRoaXMuQWZ8fCh0aGlzLmNvbnRyb2xzLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9LFBoOmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy5iLkYucGF1c2VkPyh0aGlzLmIuRi5wbGF5KCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uLAp0aGlzLnRyYWNrKCJyZXN1bWUiLCEwKSxlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSk6KHRoaXMuYi5GLnBhdXNlKCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24sdGhpcy50cmFjaygicGF1c2UiLCEwKSxlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnliKCksdGhpcy54YigpKSl9LFFoOmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy5nYz8oZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJwbGF5IiksdGhpcy53YSYmKHRoaXMud2Euc3R5bGUuZGlzcGxheT0ibm9uZSIpLGEmJihhLmlubmVySFRNTD10aGlzLmNvbmYucGF1c2VCdXR0b24pLHRoaXMuZ2M9ITEpOihlLm1hKHRoaXMuSCwiY29udHJvbCIsCiJwYXVzZSIpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnliKCksdGhpcy54YigpKSxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24pLHRoaXMuZ2M9ITApfSx6ZDpmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRGIpO3RoaXMuYi5GLnBhdXNlZHx8KHRoaXMuYi5GLnBhdXNlKCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24sdGhpcy50cmFjaygicGF1c2UiLCEwKSxlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKX0semg6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRiKTt0aGlzLmIuRi5wYXVzZWQmJih0aGlzLmIuRi5wbGF5KCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uLHRoaXMudHJhY2soInJlc3VtZSIsITApLGUudihrLlVjLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSwKdGhpcy5DKCkpKX0sQXU6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkJiKTt0aGlzLmIuRi5tdXRlZD8odGhpcy5iLkYubXV0ZWQ9ITEsYS5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b24sdGhpcy50cmFjaygidW5tdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfdW5tdXRlZCIsInVzZXIiLCEwKSxlLnYoay50Zix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKToodGhpcy5iLkYubXV0ZWQ9ITAsYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJ1c2VyIiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSl9LEJ1OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYik7dGhpcy5wYj8oZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJ1bm11dGUiKSwKdGhpcy5wYj0hMSxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b24pKTooZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJtdXRlIiksdGhpcy5wYj0hMCxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbikpfSxOZTpmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuQmIpO3RoaXMuYi5GLm11dGVkfHwodGhpcy5iLkYubXV0ZWQ9ITAsYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJjb250ZW50IiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSl9LEx1OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYik7dGhpcy5iLkYubXV0ZWQmJih0aGlzLmIuRi5tdXRlZD0hMSxhLmlubmVySFRNTD10aGlzLmNvbmYubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJ1bm11dGUiLAohMCksZS50cmFjaygic3RhdHNfaGRfdW5tdXRlZCIsImNvbnRlbnQiLCEwKSxlLnYoay50Zix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKX0sWGI6ZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5YYik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5YYik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuWGIpO3RoaXMuamR8fHRoaXMuVmN8fCh0aGlzLnZpZGVvLmxvYWQoKSx0aGlzLmtmKCkpfSxoZDpmdW5jdGlvbigpe3ZhciBhPSExLGI9bC5nZXRDb25maWcoKTsic3ZtcHJldmlldyI9PWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZikuYW5jaG9yJiYoYT0hMCxiLmFkRmFsbGJhY2tVUkx8fChiLmFkRmFsbGJhY2tVUkw9Imh0dHBzOi8vaGdjLWNmLWNhY2hlLTEuc3Zvbm0uY29tL3dlbGVjdC54bWwiKSk7ZS51YygpO2lmKChhfHwhdGhpcy5mZSYmCmIuYWRGYWxsYmFja1VSTCkmJiF0aGlzLlFlKXRoaXMuUWU9dGhpcy5maT10aGlzLkFmPSEwLGUudHJhY2soInN0YXRzX3d0X3N0YXJ0IiwiIiwhMCksdGhpcy5mZT0hMCxhPWUuJGYoYi5hZEZhbGxiYWNrVVJMLHRoaXMuTCwhMSx7b25seVVSTDohMH0pLHRoaXMuSWUoYSwhMCwhMSx7aG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3M6ITB9KTtlbHNlIGlmKHRoaXMuamQ9ITAsdGhpcy5zYiYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5zYiksdGhpcy5zYj0hMSksKCJwcmVyb2xsIj09ZS5TYSYmdGhpcy5WY3x8InBvc3Ryb2xsIj09ZS5TYSkmJnRoaXMuY29uZi5wb3N0QWRJZnJhbWVVcmwpaWYoYT10aGlzLmNvbmYucG9zdEFkSWZyYW1lVXJsLCJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoYT1hKGUuU2EpKSwic3RyaW5nIj09dHlwZW9mIGEmJmEpe2ZvcihiPXRoaXMuYi5HO2IuZmlyc3RDaGlsZDspYi5yZW1vdmVDaGlsZChiLmZpcnN0Q2hpbGQpO2IucGFyZW50fHx0aGlzLmIuSmMoKTsKdmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Yy5zZXRBdHRyaWJ1dGUoInNyYyIsYSk7Yy5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Muc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7Yy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAwIG5vbmU7b3V0bGluZTogbm9uZTsiKTtiLmFwcGVuZENoaWxkKGMpO3ZhciBmPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihhKXtpZigiY29udGludWUiPT1hLmRhdGEpe3RoaXMua2QoKTthPU1hdGgucm91bmQoKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWYpLzFFMyk7dmFyIGI9IiI7MTxhJiYoYj0iZ3QxIik7NTxhJiYoYj0iZ3Q1Iik7MTA8YSYmKGI9Imd0MTAiKTsyMDxhJiYoYj0iZ3QyMCIpO2UudHJhY2soInN0YXRzX2hkX3Bvc3RJZnJhbWVDbG9zZWQiLGIsITApfX0uYmluZCh0aGlzKSk7ZS50cmFjaygic3RhdHNfaGRfcG9zdElmcmFtZU9wZW5lZCIsCiIiLCEwKX1lbHNlIHRoaXMua2QoKTtlbHNlIHRoaXMua2QoKX0sa2Q6ZnVuY3Rpb24oYSl7dGhpcy4kdCgpJiYhYT93aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMua2QoITApfS5iaW5kKHRoaXMpLHRoaXMuR3MpOih0aGlzLmxmPSEwLHRoaXMuYi53ZSgpLHRoaXMuYi5wdCgpLHRoaXMuVWI9ITEsZS52KGsuUG8sdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSx0aGlzLnNlKCkueWgoKSl9LHNlOmZ1bmN0aW9uKCl7dmFyIGE9bnVsbDt0aGlzLmImJnRoaXMuYi5mJiYoYT10aGlzLmIuZik7cmV0dXJuIGF9LERlOmZ1bmN0aW9uKCl7dmFyIGE9ITE7dHJ5e25ldyBBY3RpdmVYT2JqZWN0KCJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFzaCIpJiYoYT0hMCl9Y2F0Y2goYil7bmF2aWdhdG9yLm1pbWVUeXBlcyYmdm9pZCAwIT1uYXZpZ2F0b3IubWltZVR5cGVzWyJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCJdJiZuYXZpZ2F0b3IubWltZVR5cGVzWyJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCJdLmVuYWJsZWRQbHVnaW4mJgooYT0hMCl9cmV0dXJuIGF9LGFnOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5IYSgibWluVmlzIik7YSYmKGUuQmUodGhpcy52aWRlbyxhKT90aGlzLnpoKCk6dGhpcy56ZCgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5hZygpfS5iaW5kKHRoaXMpLDEwMCkpfSxCOmZ1bmN0aW9uKCl7dmFyIGE9e307dGhpcy5jJiYoYS5jbGlja3Rocm91Z2g9dGhpcy5jLk9iLGEuZHVyYXRpb249dGhpcy5jLmR1cmF0aW9uLGEuYWRQb2Q9dGhpcy5jLnJiLHRoaXMudmlkZW8mJnRoaXMudmlkZW8uY3VycmVudFRpbWUmJihhLmN1cnJlbnRUaW1lPXRoaXMudmlkZW8uY3VycmVudFRpbWUpLHRoaXMubGMmJjA8dGhpcy5sYy5sZW5ndGgmJihhLmFkSWRzPXRoaXMubGMpKTt0aGlzLnZpZGVvJiZ0aGlzLnZpZGVvLmR1cmF0aW9uJiYoYS52aWRlb19kdXJhdGlvbj10aGlzLnZpZGVvLmR1cmF0aW9uKTtyZXR1cm4gYX0sQzpmdW5jdGlvbigpe3ZhciBhPXt9O2EuYWRzZXNzaW9uX2lkPXRoaXMuYm8rCiItIit0aGlzLmpmO3RoaXMuYyYmdGhpcy5jLkRnJiYoYS5ob21hZEltcHJlc3Npb25BZElkPXRoaXMuYy5EZygpKTtyZXR1cm4gYX0sb2c6ZnVuY3Rpb24oKXt9fX0pKHRoaXMpO3ZhciBRYT1jLllqfHxRYTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy55cz10aGlzLmFbMV07dGhpcy5HcD10aGlzLmFbNV07dGhpcy5qPXRoaXMuYVs4XX1jLk5pPWI7Yi5wcm90b3R5cGU9e3hzOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy55czp0aGlzLkZwKGEpfSxGcDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuR3A6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuajphfX19KShjKTt2YXIgUmE9Yy5OaXx8UmEsd2M9bmV3IFJhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwKIlooVFREWlRSUiIpO3dpbmRvdy5EPXdjLnhzKDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsYixjLGQpe3RoaXMub3B0aW9ucz1kfHx7fTtoPWM7dGhpcy5wYXJlbnQ9YTt0aGlzLnVybD1iO3RoaXMuRWE9bnVsbDt0aGlzLlc9W107dGhpcy5VPW51bGw7dGhpcy5rYz10aGlzLm1jPSExO3RoaXMuc2E9IiI7dGhpcy56Zj0hMTtkJiZkLmVtcHR5P3RoaXMuTXIoJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+PFZBU1QgdmVyc2lvbj0iMy4wIj48L1ZBU1Q+Jyk6dGhpcy5sb2FkKCl9dmFyIGE9MCxoLGQ9W107Yy52bT1iO2IucHJvdG90eXBlPXtsb2FkOmZ1bmN0aW9uKCl7dmFyIGE9ZS51YygpLGI7Yj1lLmxhKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpO3ZhciBjPSIiO2IucXVlcnlLZXkmJihjPWIucXVlcnlLZXkuaHZwKTtjJiYodGhpcy5vcHRpb25zLnZwYWlkPSEwKTtiPXRoaXMub3B0aW9ucy5rZWVwVVJMP25ldyB5KHRoaXMudXJsKTpsLnphKGwuS2QodGhpcy51cmwpLAohMSx0aGlzLm9wdGlvbnMudXNlQWRUYWdQYXJhbWV0ZXIpO2lmKHRoaXMub3B0aW9ucy52cGFpZCYmIWUuVGEoKSYmKGEuaXNDaHJvbWV8fGEuaXNGaXJlZm94KSYmIWEuaXNFZGdlfHxjKXthPWUubGcodGhpcy51cmwpO2F8fChhPXRoaXMudXJsKTtpZigwPD1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoIm1hcnRoYXN0ZXdhcnQiKSYmdGhpcy5vcHRpb25zLkFkU3lzdGVtJiYiR0RGUCI9PXRoaXMub3B0aW9ucy5BZFN5c3RlbXx8ImFwcHNwb3QiPT1jfHwwPGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZigiZmFuZG9tLmNvbSIpJiYwPGEuaW5kZXhPZigicHViYWRzLmcuZG91YmxlY2xpY2submV0LyIpKTA8YS5pbmRleE9mKCJnb29nbGVhZHMuZy5kb3VibGVjbGljay5uZXQvcGFnZWFkL2FkcyIpfHwiYXBwc3BvdCI9PWN8fDA8ZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKCJmYW5kb20uY29tIikmJjA8YS5pbmRleE9mKCJwdWJhZHMuZy5kb3VibGVjbGljay5uZXQvIik/Cih0aGlzLnVybD0iaHR0cHM6Ly9pbWEzdnBhaWQuYXBwc3BvdC5jb20vP2FkVGFnVXJsPSIrZW5jb2RlVVJJQ29tcG9uZW50KGwuS2QoYSkpKyImdHlwZT1qcyIsYj1sLnphKGwuS2QodGhpcy51cmwpLCExLHRoaXMub3B0aW9ucy51c2VBZFRhZ1BhcmFtZXRlciksYi5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9ImNvbWFwcHNwb3RpbWEzdnBhaWQiKTpiPWwuemEobC5LZChhKSwhMSx0aGlzLm9wdGlvbnMudXNlQWRUYWdQYXJhbWV0ZXIpO2IuZGF0YS5ob21hZF92cGFpZF9jb21wYXRpYmxlPSJ0cnVlIjt0aGlzLm9wdGlvbnMuaG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3MmJihiLmRhdGEuaG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3M9Ik1lZGlhZmlsZSIpfWwuTGEoYix0aGlzLkxyLmJpbmQodGhpcyksdGhpcy5Jci5iaW5kKHRoaXMpKX0sQWc6ZnVuY3Rpb24oKXt2YXIgYT0wPHRoaXMuRWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6VkFTVEFkRGF0YSIpLmxlbmd0aD8KW106W10uc2xpY2UuY2FsbCh0aGlzLkVhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJBZCIpKTsiUGxheWxpc3QiPT10aGlzLkVhLmZpcnN0Q2hpbGQubm9kZU5hbWUmJmEuZm9yRWFjaChmdW5jdGlvbihhLGIsYyl7aWYoMT09YS5jaGlsZE5vZGVzLmxlbmd0aClpZihhLnBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09ZS5TYSl0cnl7dmFyIGQ9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoJzxBZCBzZXF1ZW5jZT0iJysoYisxKSsnIj48V3JhcHBlcj48VkFTVEFkVGFnVVJJPjwhW0NEQVRBWycrYS50ZXh0Q29udGVudC50cmltKCkrIl1dXHgzZTwvVkFTVEFkVGFnVVJJPjwvV3JhcHBlcj48L0FkPiIsInRleHQveG1sIik7Y1tiXT1kLmZpcnN0Q2hpbGR9Y2F0Y2goZil7Y1tiXT17fX1lbHNlIGMuc3BsaWNlKGIsMSl9KTt2YXIgYj1bXS5zbGljZS5jYWxsKHRoaXMuRWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6QWRCcmVhayIpKTswPj1iLmxlbmd0aCYmCihiPVtdLnNsaWNlLmNhbGwodGhpcy5FYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWRCcmVhayIpKSk7dmFyIGM9W107Yi5mb3JFYWNoKGZ1bmN0aW9uKGEsYixkKXtpZigic3RhcnQiPT1hLmdldEF0dHJpYnV0ZSgidGltZU9mZnNldCIpJiYicHJlcm9sbCI9PWUuU2F8fCJlbmQiPT1hLmdldEF0dHJpYnV0ZSgidGltZU9mZnNldCIpJiYicG9zdHJvbGwiPT1lLlNhfHx0aGlzLm9yKGEuZ2V0QXR0cmlidXRlKCJ0aW1lT2Zmc2V0IikpfHxsLml1KCkpdHJ5e3ZhciBmPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6QWRUYWdVUkkiKTswPj1mLmxlbmd0aCYmKGY9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWRUYWdVUkkiKSk7dmFyIGg9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoJzxBZCBzZXF1ZW5jZT0iJysoYisxKSsnIj48V3JhcHBlcj48VkFTVEFkVGFnVVJJPjwhW0NEQVRBWycrZlswXS50ZXh0Q29udGVudC50cmltKCkrIl1dXHgzZTwvVkFTVEFkVGFnVVJJPjwvV3JhcHBlcj48L0FkPiIsCiJ0ZXh0L3htbCIpO2RbYl09aC5maXJzdENoaWxkO2MucHVzaChoKX1jYXRjaChnKXtmb3IoYT1bXS5zbGljZS5jYWxsKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkIikpLGI9MDtiPGEubGVuZ3RoO2IrKyljLnB1c2goYVtiXSl9fS5iaW5kKHRoaXMpKTthPWEuY29uY2F0KGMpO3JldHVybiBhPWEuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgic2VxdWVuY2UiKT9OdW1iZXIoYS5nZXRBdHRyaWJ1dGUoInNlcXVlbmNlIikpPE51bWJlcihiLmdldEF0dHJpYnV0ZSgic2VxdWVuY2UiKSk/LTE6MTowfSl9LG9yOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMub3B0aW9ucy5jb250ZW50VmlkZW8sYz10aGlzLm9wdGlvbnMudGltZU9mZnNldERlbHRhfHwxMCxkPTA7aWYoIShhJiZiJiZiLmR1cmF0aW9uJiZiLmN1cnJlbnRUaW1lKSlyZXR1cm4hMTswPD1hLmluZGV4T2YoIiUiKT9kPWIuZHVyYXRpb24vMTAwKnBhcnNlSW50KGEpOjA8PWEuaW5kZXhPZigiOiIpJiYKKDA8PWEuaW5kZXhPZigiLiIpJiYoYT1hLnN1YnN0cmluZygwLGEuaW5kZXhPZigiLiIpKSksYT1hLnNwbGl0KCI6IiksYT1hLnJldmVyc2UoKSxkPXBhcnNlSW50KGFbMF0pKzYwKnBhcnNlSW50KGFbMV0pKzM2MDAqcGFyc2VJbnQoYVsyXSkpO3JldHVybiBkJiZNYXRoLmFicyhkLXBhcnNlSW50KGIuY3VycmVudFRpbWUpKTw9Yz8hMDohMX0sTHI6ZnVuY3Rpb24oYSl7dGhpcy5mdChhKTt0cnl7dGhpcy5FYT1hLnJlc3BvbnNlWE1MLHRoaXMuRWF8fCh0aGlzLkVhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEucmVzcG9uc2VUZXh0LCJ0ZXh0L3htbCIpKX1jYXRjaChiKXt0aGlzLm9hKHRoaXMuUmEody5WZCkpfXRoaXMuVz10aGlzLkFnKCk7dGhpcy5tYz10aGlzLm9mKCk7dGhpcy5rYz10aGlzLkxoKCk7dGhpcy5XLmxlbmd0aD90aGlzLkZjKCk6dGhpcy5vYSh0aGlzLlJhKHcuT2Mse2Vycm9yOnRoaXMuemY/Ri5VZDpGLkdmfSkpfSxNcjpmdW5jdGlvbihhKXt0cnl7dGhpcy5FYXx8Cih0aGlzLkVhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEsInRleHQveG1sIikpfWNhdGNoKGIpe3RoaXMub2EodGhpcy5SYSh3LlZkKSl9dGhpcy5XPXRoaXMuQWcoKTt0aGlzLm1jPXRoaXMub2YoKTt0aGlzLmtjPXRoaXMuTGgoKTt0aGlzLlcubGVuZ3RoP3RoaXMuRmMoKTp0aGlzLm9hKHRoaXMuUmEody5PYyx7ZXJyb3I6dGhpcy56Zj9GLlVkOkYuR2Z9KSl9LElyOmZ1bmN0aW9uKCl7dGhpcy5vYSh0aGlzLlJhKHcuRmYse2RlcHRoOmF9KSl9LEZjOmZ1bmN0aW9uKCl7dGhpcy5VPXRoaXMuVy5zaGlmdCgpO3RoaXMucXIoKT90aGlzLnN1KCk/KGErKyxuZXcgYih0aGlzLHRoaXMuSWcoKSxoLHtBZFN5c3RlbTp0aGlzLlpwKCksdnBhaWQ6dGhpcy5vcHRpb25zLnZwYWlkfSkpOnRoaXMub2EodGhpcy5SYSh3LklmKSk6KGE9MCx0aGlzLlF1KCkmJnRoaXMuVGUodGhpcy5SbygpKSl9LE9lOmZ1bmN0aW9uKCl7dGhpcy5tYz8odGhpcy5tYz0xPHRoaXMuVy5sZW5ndGgsCnRoaXMuVy5sZW5ndGgmJnRoaXMuRmMoKSk6dGhpcy5wYXJlbnQuT2UoKX0sa2g6ZnVuY3Rpb24oKXt0aGlzLmtjPyh0aGlzLmtjPTE8dGhpcy5XLmxlbmd0aCx0aGlzLlcubGVuZ3RoJiZ0aGlzLkZjKCkpOnRoaXMucGFyZW50LmtoKCl9LFF1OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHUoKT90aGlzLm91KCk/ITA6KC0xIT10aGlzLnljKCk/dGhpcy5vYSh0aGlzLlJhKHcuQmYpKTp0aGlzLm9hKHRoaXMuUmEody5qaikpLCExKToodGhpcy5vYSh0aGlzLlJhKHcuT2MsRi5IZikpLCExKX0sVGU6ZnVuY3Rpb24oYSl7dGhpcy5zYXx8KHRoaXMuc2E9IiIpO2EuT2E9YS5PYS5jb25jYXQodGhpcy5LZSgpKTthLnJiPWEucmI/YS5yYjp0aGlzLm1jO2EuamM9YS5qYz9hLmpjOnRoaXMua2M7YS5XYT1hLldhP2EuV2E6LTEhPXRoaXMuc2EuaW5kZXhPZigic21hcnRjbGlwLm5ldCIpJiYhdGhpcy5vcHRpb25zLndnO3RoaXMucGFyZW50LlRlKGEpfSxSbzpmdW5jdGlvbigpe3ZhciBhPW5ldyBTYTsKdGhpcy5zYXx8KHRoaXMuc2E9IiIpO2EuZHVyYXRpb249dGhpcy55YygpO2EuTT10aGlzLkZnKCk7YS5PYj10aGlzLmJxKCk7YS5vcmlnaW49dGhpczthLkE9dGhpcy5ZcCgpO2EuaGY9dGhpcy5ycShhLmR1cmF0aW9uKTthLldhPWEuV2E/YS5XYTotMSE9dGhpcy5zYS5pbmRleE9mKCJzbWFydGNsaXAubmV0IikmJiF0aGlzLm9wdGlvbnMud2c7cmV0dXJuIGF9LG9hOmZ1bmN0aW9uKGIpe3RoaXMuc2F8fCh0aGlzLnNhPSIiKTtiLldhPWIuV2E/Yi5XYTotMSE9dGhpcy5zYS5pbmRleE9mKCJzbWFydGNsaXAubmV0IikmJiF0aGlzLm9wdGlvbnMud2c7dGhpcy5VJiYoYi5PYT1iLmVycm9yLmNvZGUhPXcuQmYuY29kZT9iLk9hLmNvbmNhdCh0aGlzLmNxKCkpOmIuT2EuY29uY2F0KHRoaXMubHEoKSkpO3RoaXMuVy5sZW5ndGg/KHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5RYiYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucGFyZW50LlFiJiZ0aGlzLnBhcmVudC5RYihiKSxhPTAsdGhpcy5GYygpKToKKHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5vYSYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucGFyZW50Lm9hJiZ0aGlzLnBhcmVudC5vYShiKSxhPTApfSxRYjpmdW5jdGlvbihhKXt0aGlzLnBhcmVudC5RYihhKX0scWc6ZnVuY3Rpb24oYSxiKXt0aGlzLm9hKHRoaXMuUmEoYSxiKSl9LFJhOmZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IFRhKGEsYik7Yy5vcmlnaW49dGhpcztyZXR1cm4gY30sc3U6ZnVuY3Rpb24oKXtyZXR1cm4gYTxofSxwdTpmdW5jdGlvbigpe3JldHVybiAwPHRoaXMuRmcoKS5sZW5ndGh9LG91OmZ1bmN0aW9uKCl7cmV0dXJuIDE8dGhpcy55YygpfSxvZjpmdW5jdGlvbigpe3JldHVybiAxPHRoaXMuVy5maWx0ZXIoZnVuY3Rpb24oYSl7dmFyIGI9ITE7YS5nZXRBdHRyaWJ1dGUmJihiPTA8TnVtYmVyKGEuZ2V0QXR0cmlidXRlKCJzZXF1ZW5jZSIpKSk7cmV0dXJuIGJ9KS5sZW5ndGh9LExoOmZ1bmN0aW9uKCl7dmFyIGE9ITE7dGhpcy5XJiYyPD10aGlzLlcubGVuZ3RoJiYKIXRoaXMub2YoKSYmKGE9ITApO3JldHVybiBhfSxmdDpmdW5jdGlvbihhKXt0aGlzLnNhPSJVTktOT1dOIjt0cnl7ZC5wdXNoKHRoaXMuc2E9YS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1VcmwiKSl9Y2F0Y2goYil7dGhpcy5zYT0iVU5LTk9XTiJ9dHJ5e3RoaXMuemY9YS5nZXRSZXNwb25zZUhlYWRlciYmYS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1WcGFpZC1JZ25vcmVkIil9Y2F0Y2goYyl7fX0scXI6ZnVuY3Rpb24oKXtyZXR1cm4gMDx0aGlzLklnKCkubGVuZ3RofSxJZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlKHRoaXMuVSwiVkFTVEFkVGFnVVJJIil9LFpwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmUodGhpcy5VLCJBZFN5c3RlbSIpfSxLZTpmdW5jdGlvbigpe2Zvcih2YXIgYT0iSW1wcmVzc2lvbiBUcmFja2luZyBDbGlja1RyYWNraW5nIEVycm9yIFZpZXdhYmxlIE5vdFZpZXdhYmxlIHZpZXdhYmxlX2ltcHJlc3Npb24gbWVhc3VyYWJsZV9pbXByZXNzaW9uIi5zcGxpdCgiICIpLApiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtbXS5zbGljZS5jYWxsKHRoaXMuVS5nZXRFbGVtZW50c0J5VGFnTmFtZShkKSkuZm9yRWFjaChmdW5jdGlvbihhKXtpZihhJiYhdGhpcy5WZyhhKSl7dmFyIGM9YS5nZXRBdHRyaWJ1dGUoImV2ZW50Iil8fGQudG9Mb3dlckNhc2UoKTtiLnB1c2goe3R5cGU6Yyx1cmw6dGhpcy5pYihhKX0pfX0uYmluZCh0aGlzKSl9cmV0dXJuIGJ9LFZnOmZ1bmN0aW9uKGEpe3JldHVybiBhPyJDb21wYW5pb24iPT1hLm5vZGVOYW1lPyEwOnRoaXMuVmcoYS5wYXJlbnROb2RlKTohMX0sbHE6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLktlKCk7cmV0dXJuIGE9YS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuImltcHJlc3Npb24iPT1hLnR5cGV9KX0sY3E6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLktlKCk7cmV0dXJuIGE9YS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuImVycm9yIj09YS50eXBlfSl9LGJxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWIodGhpcy5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJDbGlja1Rocm91Z2giKVswXSl9LApGZzpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIk1lZGlhRmlsZSIpLGI9W10sYz0wO2M8YS5sZW5ndGg7YysrKWIucHVzaCh7aWQ6YVtjXS5nZXRBdHRyaWJ1dGUoImlkIiksdHlwZTphW2NdLmdldEF0dHJpYnV0ZSgidHlwZSIpLFBhOmFbY10uZ2V0QXR0cmlidXRlKCJiaXRyYXRlIiksd2lkdGg6YVtjXS5nZXRBdHRyaWJ1dGUoIndpZHRoIiksaGVpZ2h0OmFbY10uZ2V0QXR0cmlidXRlKCJoZWlnaHQiKSxUdjphW2NdLmdldEF0dHJpYnV0ZSgiZGVsaXZlcnkiKSx1cmw6dGhpcy5pYihhW2NdKX0pO3ZhciBkPXRoaXMub3B0aW9ucy5QYXx8MUUzO3RyeXt2YXIgaD1iLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4tMSE9YS50eXBlLmluZGV4T2YoIm1wNCIpfSkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBNYXRoLmFicyhkLWEuUGEpLU1hdGguYWJzKGQtYi5QYSl9KSxlPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybi0xPT1hLnR5cGUuaW5kZXhPZigibXA0Iil9KS5zb3J0KGZ1bmN0aW9uKGEsCmIpe3JldHVybiBNYXRoLmFicyhkLWEuUGEpLU1hdGguYWJzKGQtYi5QYSl9KSxiPWguY29uY2F0KGUpfWNhdGNoKGcpe31yZXR1cm4gYn0sWXA6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImFkUGFyYW1ldGVycyIpO2EmJjAhPWEubGVuZ3RofHwoYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkUGFyYW1ldGVycyIpKTtmb3IodmFyIGI9IiIsYz0hMSxkPVtdLGI9ITEsaD0iIixlPVtdLGc9IiIsZz0wO2c8YS5sZW5ndGg7ZysrKXtoPWI9dGhpcy5xZChhW2ddKTt0cnl7Yz1KU09OLnBhcnNlKGIpfWNhdGNoKGspe2M9Yn1kLnB1c2goYyk7ZS5wdXNoKGgpfTE8YS5sZW5ndGg/KGI9ZCxnPWgpOihiPWMsZz1lKTtyZXR1cm57QWRQYXJhbWV0ZXJzOmIsT3JpZ2luYWxBZFBhcmFtZXRlcnM6Zy50b1N0cmluZygpfX0seWM6ZnVuY3Rpb24oKXt2YXIgYTt0cnl7cmV0dXJuIGE9dGhpcy5pYih0aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkR1cmF0aW9uIilbMF0pLAphPWEuc3BsaXQoIjoiKSxhPTM2MDAqK2FbMF0rNjAqK2FbMV0rICthWzJdLGlzTmFOKGEpPy0xOmF9Y2F0Y2goYil7cmV0dXJuLTF9fSxycTpmdW5jdGlvbihhKXt2YXIgYj0hMSxjPSExLGQ9ITE7dHJ5e2M9dGhpcy5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJMaW5lYXIiKVswXSxkPWMuZ2V0QXR0cmlidXRlKCJza2lwb2Zmc2V0IiksYj1lLld0KGQsYSksMD5iJiYoYj0hMSl9Y2F0Y2goaCl7Yj0hMX1yZXR1cm4gYn0scmU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZhLmdldEVsZW1lbnRzQnlUYWdOYW1lKGIpLmxlbmd0aD90aGlzLmliKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYilbMF0pOiIifSx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5jaGlsZE5vZGVzJiZhLmNoaWxkTm9kZXNbMF0/YS5jaGlsZE5vZGVzWzBdLm5vZGVWYWx1ZToiIn0saWI6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5xZChhKToiIn0scWQ6ZnVuY3Rpb24oYSl7dmFyIGI9CnRoaXMudWUoYSk7YiYmKGI9Yi50cmltKCkpOyFiJiZhLnRleHRDb250ZW50JiYoYj1hLnRleHRDb250ZW50LGI9Yi50cmltKCkpO3JldHVybiBifX19KShjKTt2YXIgVD1jLnZtfHxUO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLiRyPXRoaXMuYVs1XTt0aGlzLnBpPXRoaXMuYVszXTt0aGlzLkNvPXRoaXMuYVs2XTt0aGlzLmVqPXRoaXMuYVsxXTt0aGlzLm5uPXRoaXMuYVs2XTt0aGlzLnFsPXRoaXMuYVs4XTt0aGlzLktpPXRoaXMuYVsxXTt0aGlzLkFpPXRoaXMuYVs4XTt0aGlzLmo9dGhpcy5hWzddfWMuTnE9YjtiLnByb3RvdHlwZT17WnI6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLiRyOnRoaXMub2koYSl9LG9pOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5waTp0aGlzLkJvKGEpfSxCbzpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuQ286dGhpcy5kaihhKX0sCmRqOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5lajp0aGlzLm1uKGEpfSxtbjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMubm46dGhpcy5wbChhKX0scGw6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLnFsOnRoaXMuSmkoYSl9LEppOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5LaTp0aGlzLnppKGEpfSx6aTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuQWk6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBVYT1jLk5xfHxVYSx4Yz1uZXcgVWEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD14Yy5acig0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuZHVyYXRpb249MDt0aGlzLk9hPVtdO3RoaXMuTT1bXTt0aGlzLk9iPSIiO3RoaXMuQT10aGlzLmpjPXRoaXMucmI9ITE7dGhpcy54ZT0KdGhpcy5vcmlnaW49bnVsbDt0aGlzLnllPSIifWMucmw9YjtiLnByb3RvdHlwZT17TW86ZnVuY3Rpb24oKXtmb3IodmFyIGE9ITEsYj0wO2I8dGhpcy5NLmxlbmd0aDtiKyspaWYoMDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24vZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC9lY21hc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQvamF2YXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJ0ZXh0L2pzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC94LWVjbWFzY3JpcHQiKXx8CjA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1qYXZhc2NyaXB0IikpYT0hMDtyZXR1cm4gYX0sanE6ZnVuY3Rpb24oKXtpZighdGhpcy54ZSYmdGhpcy5vcmlnaW4mJnRoaXMub3JpZ2luLkVhKXt2YXIgYT10aGlzLm9yaWdpbi5FYTtpZihhLmdldEVsZW1lbnRzQnlUYWdOYW1lKWZvcih2YXIgYT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJbXByZXNzaW9uIiksYj0iIixjPTA7YzxhLmxlbmd0aDtjKyspKGI9YVtjXS5nZXRBdHRyaWJ1dGUoImlkIikpJiYwPD1iLmluZGV4T2YoIkhPTUFEIikmJih0aGlzLnhlPWFbY10pfXJldHVybiB0aGlzLnhlfSxEZzpmdW5jdGlvbigpe2lmKHRoaXMueWUpcmV0dXJuIHRoaXMueWU7dmFyIGE9IiI7KGE9dGhpcy5qcSgpKSYmYS5nZXRBdHRyaWJ1dGU/KGE9YS5nZXRBdHRyaWJ1dGUoImlkIiksYT1hLnJlcGxhY2UoIkhPTUFEXyIsIiIpLChhPWEucmVwbGFjZSgiSE9NQUQiLCIiKSl8fChhPSJlbXB0eSIpKTphPSJub19pbXBfbm9kZSI7CnJldHVybiB0aGlzLnllPWF9LHVxOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPSExLGI9MDtiPHRoaXMuTS5sZW5ndGg7YisrKWlmKDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24vamF2YXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQvZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJ0ZXh0L2phdmFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC9qc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1lY21hc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1qYXZhc2NyaXB0IikpYT0KdGhpcy5NW2JdO3JldHVybiBhfX19KShjKTt2YXIgU2E9Yy5ybHx8U2E7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMudW09dGhpcy5hWzldO3RoaXMuSHE9dGhpcy5hWzZdO3RoaXMucXA9dGhpcy5hWzddO3RoaXMubXM9dGhpcy5hWzldO3RoaXMuYWw9dGhpcy5hWzRdO3RoaXMuVnA9dGhpcy5hWzEwXTt0aGlzLmVyPXRoaXMuYVs2XTt0aGlzLmo9dGhpcy5hWzVdfWMucmo9YjtiLnByb3RvdHlwZT17dG06ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnVtOnRoaXMuR3EoYSl9LEdxOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5IcTp0aGlzLnBwKGEpfSxwcDpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMucXA6dGhpcy5scyhhKX0sbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLm1zOnRoaXMuJGsoYSl9LCRrOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5hbDoKdGhpcy5VcChhKX0sVXA6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLlZwOnRoaXMuZHIoYSl9LGRyOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5lcjp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLmo6YX19fSkoYyk7dmFyIFZhPWMucmp8fFZhLHljPW5ldyBWYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXljLnRtKDQpO3ZhciB3PXtWZDp7dHlwZToiZXJyb3IiLGNvZGU6MTAwLG1lc3NhZ2U6IlhNTCBwYXJzaW5nIGVycm9yIix4YToiWE1MX1BBUlNFX0VSUk9SIn0samo6e3R5cGU6ImVycm9yIixjb2RlOjIwMixtZXNzYWdlOiJWaWRlbyBwbGF5ZXIgZXhwZWN0aW5nIGRpZmZlcmVudCBkdXJhdGlvbi4iLHhhOiJEVVJBVElPTl9FUlJPUiJ9LE9jOnt0eXBlOiJlcnJvciIsY29kZTozMDMsbWVzc2FnZToiTm8gYWRzIFZBU1QgcmVzcG9uc2UgYWZ0ZXIgb25lIG9yIG1vcmUgV3JhcHBlcnMuIEFsc28gaW5jbHVkZXMgbnVtYmVyIG9mIGVtcHR5IFZBU1QgcmVzcG9uc2VzIGZyb20gZmFsbGJhY2suIiwKeGE6IkVNUFRZX1ZBU1QifSxJZjp7dHlwZToiY3JpdGljYWwiLGNvZGU6MzAyLG1lc3NhZ2U6IldyYXBwZXIgbGltaXQgcmVhY2hlZCwgYXMgZGVmaW5lZCBieSB0aGUgdmlkZW8gcGxheWVyLiBUb28gbWFueSBXcmFwcGVyIHJlc3BvbnNlcyBoYXZlIGJlZW4gcmVjZWl2ZWQgd2l0aCBubyBJbkxpbmUgcmVzcG9uc2UuIix4YToiV1JBUFBFUl9MSU1JVF9SRUFDSEVEIn0sRmY6e3R5cGU6ImVycm9yIixjb2RlOjMwMSxtZXNzYWdlOiJUaW1lb3V0IG9mIFZBU1QgVVJJIHByb3ZpZGVkIGluIFdyYXBwZXIgZWxlbWVudCwgb3Igb2YgVkFTVCBVUkkgcHJvdmlkZWQgaW4gYSBzdWJzZXF1ZW50IFdyYXBwZXIgZWxlbWVudC4gSW5jbHVkZXMgcmVxdWVzdCBlcnJvcnMgc3VjaCBhcyBpbnZhbGlkIFVSSSwgdW5yZWFjaGFibGUgb3IgcmVxdWVzdCB0aW1lb3V0IGZvciBVUkksIGFuZCBzZWN1cml0eSBvciBvdGhlciBleGNlcHRpb25zIHJlbGF0ZWQgdG8gcmVxdWVzdGluZyBhIFZBU1QgVVJJLiIsCnhhOiJMT0FEX0VSUk9SIn0sVGQ6e3R5cGU6ImVycm9yIixjb2RlOjQwMyxtZXNzYWdlOiJDb3VsZCBub3QgZmluZCBNZWRpYUZpbGUgdGhhdCBpcyBzdXBwb3J0ZWQgYnkgdGhpcyB2aWRlbyBwbGF5ZXIsIGJhc2VkIG9uIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBNZWRpYUZpbGUgZWxlbWVudC4iLHhhOiJOT19QTEFZQUJMRV9TT1VSQ0VTIn0sS3Y6e3R5cGU6ImVycm9yIixjb2RlOjQwNSxtZXNzYWdlOiJQcm9ibGVtIGRpc3BsYXlpbmcgTWVkaWFGaWxlLiIseGE6Ik1FRElBRklMRV9FUlJPUiJ9LEJmOnt0eXBlOiJlcnJvciIsY29kZTo5OTksbWVzc2FnZToiMSBzZWMgZHVtbXkgYWQiLHhhOiJEVU1NWV9BRCJ9fSxGPXtHZjp7dHlwZToiZXJyb3IiLGNvZGU6MzAzMSxtZXNzYWdlOiJubyBhZHMiLHhhOiJOT19BRFMifSxIZjp7dHlwZToiZXJyb3IiLGNvZGU6MzAzMixtZXNzYWdlOiJubyBtZWRpYWZpbGVzIHNwZWNpZmllZCIseGE6Ik5PX01FRElBRklMRVMifSxMdjp7dHlwZToiZXJyb3IiLApjb2RlOjMwMzMsbWVzc2FnZToibm8gcGxheWFibGUgbWVkaWFmaWxlcyIseGE6Ik5PX1BMQVlBQkxFX01FRElBRklMRVMifSxVZDp7dHlwZToiZXJyb3IiLGNvZGU6MzAzNCxtZXNzYWdlOiJ2cGFpZCBpZ25vcmVkIix4YToiVlBBSURfSUdOT1JFRCJ9fTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5vcz10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs0XX1jLnJuPWI7Yi5wcm90b3R5cGU9e25zOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5vczp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLmo6YX19fSkoYyk7dmFyIFdhPWMucm58fFdhLHpjPW5ldyBXYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXpjLm5zKDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsCmIpe3RoaXMuZXJyb3I9YTt0aGlzLm1kPWI7dGhpcy5PYT1bXTt0aGlzLm9yaWdpbj1udWxsfWMuTGo9YjtiLnByb3RvdHlwZT17fX0pKGMpO3ZhciBUYT1jLkxqfHxUYTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5DbT10aGlzLmFbMV07dGhpcy5YcT10aGlzLmFbOV07dGhpcy5Pbj10aGlzLmFbNl07dGhpcy5TcD10aGlzLmFbNV07dGhpcy5Baz10aGlzLmFbOV07dGhpcy5SdD10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVs3XX1jLmNyPWI7Yi5wcm90b3R5cGU9e0JtOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuQ206dGhpcy5XcShhKX0sV3E6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLlhxOnRoaXMuTm4oYSl9LE5uOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Pbjp0aGlzLlJwKGEpfSxScDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuU3A6dGhpcy56ayhhKX0sCnprOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5Bazp0aGlzLlF0KGEpfSxRdDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuUnQ6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBYYT1jLmNyfHxYYSxBYz1uZXcgWGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1BYy5CbSg0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYihhLGIpe3RoaXMuY29uZj1ifHx7fTt0aGlzLmY9YTt0aGlzLmhiPWEuQmcoKTt0aGlzLkc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5HLmlkPWUuYmEoMTApO3RoaXMuRj1DLnBvcCgpO3RoaXMuRnx8KGUudHJhY2soInN0YXRzX2hkX25vVmlkZW9UYWdMZWZ0IiwiIiwhMCksdGhpcy5GPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIiksdGhpcy5GLmlkPQoiYWRYZGlzcGxheSIsdGhpcy5GLnN0eWxlLmRpc3BsYXk9ImJsb2NrIik7dGhpcy5EPXt9O3RoaXMuWmY9ITE7dGhpcy5OYj1bXX1jLnFqPWI7Yi5wcm90b3R5cGU9e1RwOmZ1bmN0aW9uKGEpe3ZhciBiPXt9LGM9ITEsZT0wLGI9MCxnPXt9O2EuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiYoYj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9ImZpeGVkIixlPWIubGVmdCxiPWIudG9wKTtnPXt4OmUseTpifTtnLnBvc2l0aW9uPWM7cmV0dXJuIGd9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuY29uZi51c2VCb3VuZGluZ0NsaWVudFJlY3QpcmV0dXJuIHRoaXMuVHAoYSk7Zm9yKHZhciBiPTAsYz0wLGU9ITEsZz10aGlzLk9xKGEpLGs9e307YTspYis9YS5vZmZzZXRMZWZ0K2EuY2xpZW50TGVmdCxjKz1hLm9mZnNldFRvcCthLmNsaWVudFRvcCxhPWEub2Zmc2V0UGFyZW50O2cmJihhPXZvaWQgMCE9PXdpbmRvdy5wYWdlWU9mZnNldD93aW5kb3cucGFnZVlPZmZzZXQ6KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8CmRvY3VtZW50LmJvZHkucGFyZW50Tm9kZXx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wLGIrPXZvaWQgMCE9PXdpbmRvdy5wYWdlWE9mZnNldD93aW5kb3cucGFnZVhPZmZzZXQ6KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlfHxkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0LGMrPWEsdGhpcy5jb25mLnBvc2l0aW9uSWZGaXhlZCYmKGU9dGhpcy5jb25mLnBvc2l0aW9uSWZGaXhlZCkpO2s9e3g6Yix5OmN9O2UmJihrLnBvc2l0aW9uPWUpO3JldHVybiBrfSxjdTpmdW5jdGlvbigpe3RoaXMuWmY9ITB9LFdoOmZ1bmN0aW9uKCl7dGhpcy5GPUMucG9wKCk7dGhpcy5GfHwoZS50cmFjaygic3RhdHNfaGRfbm9WaWRlb1RhZ0xlZnQiLCIiLCEwKSx0aGlzLkY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmlkZW8iKSx0aGlzLkYuaWQ9ImFkWGRpc3BsYXkiLHRoaXMuRi5zdHlsZS5kaXNwbGF5PSJibG9jayIpfSxwaDpmdW5jdGlvbigpe3RoaXMuZi5wYXVzZSgpOwplLnYoay5mZCx0aGlzLmYudSgpKX0scHQ6ZnVuY3Rpb24oKXt0aGlzLlpmfHwodGhpcy5mLnBsYXkoKSxlLnYoay5nZCx0aGlzLmYudSgpKSl9LEpjOmZ1bmN0aW9uKCl7dmFyIGE9MjE0NzQ4MzY0Nzt0aGlzLmNvbmYuekluZGV4JiYoYT10aGlzLmNvbmYuekluZGV4KTt0aGlzLmYucGF1c2UoKTt0aGlzLkcuc3R5bGUuekluZGV4PWE7dGhpcy5HLnN0eWxlLm1hcmdpbkxlZnQ9ImF1dG8iO3RoaXMuRy5zdHlsZS5tYXJnaW5SaWdodD0iYXV0byI7dGhpcy5HLnN0eWxlLmJhY2tncm91bmRDb2xvcj0iIzAwMDAwMCI7dGhpcy5HLnN0eWxlLmJveFNpemluZz10aGlzLmhiLnN0eWxlLmJveFNpemluZzt0aGlzLkcuc3R5bGUud2lkdGg9dGhpcy5oYi5vZmZzZXRXaWR0aCswKyJweCI7dGhpcy5HLnN0eWxlLmhlaWdodD10aGlzLmhiLm9mZnNldEhlaWdodCswKyJweCI7dGhpcy5GLnN0eWxlLndpZHRoPXRoaXMuaGIub2Zmc2V0V2lkdGgrMCsicHgiO3RoaXMuRi5zdHlsZS5oZWlnaHQ9dGhpcy5oYi5vZmZzZXRIZWlnaHQrCjArInB4Ijt0aGlzLmdldFBvc2l0aW9uKHRoaXMuaGIpO3RoaXMuZi5IYyYmdGhpcy5mLkhjKCk/dGhpcy5mLkJnKCkuYXBwZW5kQ2hpbGQodGhpcy5HKTpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuRyk7d2luZG93LnNldFRpbWVvdXQodGhpcy5UYi5iaW5kKHRoaXMpLDEwKX0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0aGlzLmYuZXhpdEZ1bGxzY3JlZW4oKX0sT3E6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlLGM9ITE7YTspe2lmKGEuc3R5bGUmJigiZml4ZWQiPT1hLnN0eWxlLnBvc2l0aW9ufHxiJiYiZml4ZWQiPT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS5wb3NpdGlvbikpe2M9ITA7YnJlYWt9YT1hLnBhcmVudE5vZGV9cmV0dXJuIGN9LE1wOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0UG9zaXRpb24oYSk7Yi5wb3NpdGlvbj9iLnBvc2l0aW9uPWIucG9zaXRpb246Yi5wb3NpdGlvbj0iYWJzb2x1dGUiO2Iud2lkdGg9CmEub2Zmc2V0V2lkdGg7Yi5oZWlnaHQ9YS5vZmZzZXRIZWlnaHQ7cmV0dXJuIGJ9LFRiOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuTXAodGhpcy5oYik7aWYoYi54IT10aGlzLkQueHx8Yi55IT10aGlzLkQueXx8Yi5wb3NpdGlvbiE9dGhpcy5ELnBvc2l0aW9ufHxiLndpZHRoIT10aGlzLkQud2lkdGh8fGIuaGVpZ2h0IT10aGlzLkQuaGVpZ2h0fHxhKXtpZigwPHRoaXMuRC53aWR0aCYmMDx0aGlzLkQuaGVpZ2h0JiYwPT1iLndpZHRoJiYwPT1iLmhlaWdodCl7dGhpcy53ZSgpO3JldHVybn10aGlzLkQ9Yjt0aGlzLmYuSGMoKT8odGhpcy5HLnN0eWxlLmxlZnQ9IjBweCIsdGhpcy5HLnN0eWxlLnRvcD0iMHB4Iik6KHRoaXMuRy5zdHlsZS5sZWZ0PWIueCsicHgiLHRoaXMuRy5zdHlsZS50b3A9Yi55KyJweCIpO3RoaXMuRy5zdHlsZS53aWR0aD1iLndpZHRoKyJweCI7dGhpcy5HLnN0eWxlLmhlaWdodD1iLmhlaWdodCsicHgiO3RoaXMuRy5zdHlsZS5wb3NpdGlvbj1iLnBvc2l0aW9uOwp0aGlzLkYuc3R5bGUud2lkdGg9Yi53aWR0aCsicHgiO3RoaXMuRi5zdHlsZS5oZWlnaHQ9Yi5oZWlnaHQrInB4Ijtmb3IoYT0wO2E8dGhpcy5OYi5sZW5ndGg7YSsrKXRoaXMuTmJbYV0oe3dpZHRoOmIud2lkdGgsaGVpZ2h0OmIuaGVpZ2h0fSl9ZS5IaCh0aGlzLkcpJiZ3aW5kb3cuc2V0VGltZW91dCh0aGlzLlRiLmJpbmQodGhpcyksMTApfSxZZjpmdW5jdGlvbihhKXt0aGlzLk5ifHwodGhpcy5OYj1bXSk7ImZ1bmN0aW9uIj09dHlwZW9mIGEmJnRoaXMuTmIucHVzaChhKX0sd2U6ZnVuY3Rpb24oKXt0aGlzLkcmJnRoaXMuRy5wYXJlbnROb2RlJiZ0aGlzLkcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCYmdGhpcy5HLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5HKTt0aGlzLkYmJnRoaXMuRi5wYXVzZSYmdGhpcy5GLnBhdXNlKCl9fX0pKGMpO2Zvcih2YXIgWWE9Yy5xanx8WWEsQz1bXSxaYT0wOzEwMD5aYTtaYSsrKXt2YXIgTz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpOwpPLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjtPLmlkPWUuYmEoMTApO08uY29udHJvbHM9ITA7Qy5wdXNoKE8pfXZhciBLPSExLGRhPSExO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIseik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIseik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHopO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIseik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuc3A9dGhpcy5hWzhdO3RoaXMubXA9dGhpcy5hWzRdO3RoaXMuYXI9dGhpcy5hWzJdO3RoaXMuVXM9dGhpcy5hWzhdO3RoaXMueW89dGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbNV19Yy5ZbD1iO2IucHJvdG90eXBlPXtycDpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLnNwOnRoaXMubHAoYSl9LGxwOmZ1bmN0aW9uKGEpe3JldHVybiAzPAphP3RoaXMubXA6dGhpcy4kcShhKX0sJHE6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLmFyOnRoaXMuVHMoYSl9LFRzOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5Vczp0aGlzLnhvKGEpfSx4bzpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMueW86dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciAkYT1jLllsfHwkYSxCYz1uZXcgJGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1CYy5ycCg0KTsoZnVuY3Rpb24oYyl7Yy5mbD11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLmVsZW1lbnRJZCxhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGIpO2F8fChiPXRoaXMuZ2V0UmF3UGxheWVyKCkuZ2V0RWxlbWVudElkKCksCmE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYikpO3RoaXMuWShhKTt0aGlzLkZkKGIpO3RoaXMubWcoKX0sRmQ6ZnVuY3Rpb24oYil7dGhpcy5pZHx8KHRoaXMuaWQ9Yil9LG1nOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5JYSgpLGE9dGhpcy52aWRlb1RhZzthfHwoKGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXSl8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdKSxhP3RoaXMuWihhKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubWcoKX0uYmluZCh0aGlzKSwxMDApKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBsYXkoKX0sVmE6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpO2IuaXNQbGF5aW5nJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5pc1BsYXlpbmcmJmIuaXNQbGF5aW5nKCkmJnRoaXMucGF1c2UoKX0sCkFlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4gYi5wYXJhbWV0ZXJzJiYhMT09PWIucGFyYW1ldGVycy5hdXRvcGxheT8hMTohMH0sTzpmdW5jdGlvbigpe3JldHVybiJPb3lhbGEifSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGI/Yi5tdXRlZDohMH0sdTpmdW5jdGlvbigpe3ZhciBiPXt9LGE9dGhpcy52aWRlb1RhZyxjPXRoaXMuSWEoKTtpZihiLnZpZGVvVGFnPWEpYi52aWRlb1RhZ0lkPWEuaWQ7aWYoYi5jb250YWluZXI9YyliLmNvbnRhaW5lcklkPWMuaWQ7Yi5wbGF5ZXI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4gYn19KX0pKGMpO3ZhciBhYj1jLmZsfHxhYjsoZnVuY3Rpb24oYyl7Yy5kbD12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9ZWEoKTt0aGlzLk1iPXRoaXMuTWJ8fCExO3RoaXMuUWY9dGhpcy5TZj10aGlzLlJnPXRoaXMuZGE9dGhpcy5zZj0KITE7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5BRFNfRVJST1IsImV4YW1wbGUiLGZ1bmN0aW9uKGEsYil7dGhpcy5JcChhLGIpfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5BRFNfUExBWUVELCJleGFtcGxlIixmdW5jdGlvbigpe3RoaXMuc2Y9ITA7dGhpcy5SZyYmdGhpcy5oZygpfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5QTEFZSU5HLCJleGFtcGxlIixmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFBsYXllcigpLnpiO2EmJmEuVWImJnRoaXMuZ2V0UGxheWVyKCkucGF1c2UoKX0uYmluZCh0aGlzKSwxMDApfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5JTklUSUFMX1BMQVksImV4YW1wbGUiLGZ1bmN0aW9uKCl7dGhpcy5jZCgpO3RoaXMuUmc9ITA7dGhpcy5oZygpfS5iaW5kKHRoaXMpKTt0aGlzLmNnKCl9LApoZzpmdW5jdGlvbigpe2lmKCF0aGlzLk1iKXt0aGlzLmNkKCk7aWYoIXRoaXMuc2YmJiF0aGlzLmNkKCkpcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCksITA7dGhpcy5zZiYmdGhpcy5RZiYmIXRoaXMuU2YmJndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCl9fSxjZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuR2coImFkTWFuYWdlckNvbnRyb2xsZXIiKTtyZXR1cm4gYiYmYi5hZE1hbmFnZXJzJiZiLmFkTWFuYWdlcnNbImdvb2dsZS1pbWEtYWRzLW1hbmFnZXIiXX0sR2c6ZnVuY3Rpb24oYil7Zm9yKHZhciBhPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCksYz0wO2M8YS5tb2R1bGVzLmxlbmd0aDtjKyspe3ZhciBkPWEubW9kdWxlc1tjXTtpZihkLm5hbWU9PT1iKXJldHVybiBkLmluc3RhbmNlfX0sY2c6ZnVuY3Rpb24oKXtpZih0aGlzLmNkKCkpe3ZhciBiPXRoaXMuR2coImFkTWFuYWdlckNvbnRyb2xsZXIiKS5hZE1hbmFnZXJzWyJnb29nbGUtaW1hLWFkcy1tYW5hZ2VyIl07CnRoaXMuU2Y9MDxiLmdldEN1cnJlbnRUaW1lKCk7dGhpcy5RZj1iLlJ2fXRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmNnKCl9LmJpbmQodGhpcyksMTAwKX0sVXY6ZnVuY3Rpb24oYil7cmV0dXJuIGIuaXNBZFBsYXlpbmcmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmlzQWRQbGF5aW5nP2IuZ3coKTohMX0seWM6ZnVuY3Rpb24oYil7cmV0dXJuIGIuZ2V0QWREdXJhdGlvbiYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0QWREdXJhdGlvbj9iLnljKCk6LTF9LG1xOmZ1bmN0aW9uKGIpe3JldHVybiBiLmlzUGxheWluZyYmImZ1bmN0aW9uIj09dHlwZW9mIGIuaXNQbGF5aW5nP2IuaXNQbGF5aW5nKCk6LTF9LElwOmZ1bmN0aW9uKGIsYSl7dGhpcy5NYj1hLm1hdGNoKC9cZCsvKT9wYXJzZUludChhLm1hdGNoKC9cZCsvKVswXSk6MDsxMDA5PT10aGlzLk1ifHwzMDI9PXRoaXMuTWI/dGhpcy5kYT0hMDp0aGlzLm8oImFkZXJyb3IiLHRoaXMuTWIpO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLAoxMDApfSxlZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCk7dGhpcy5kYT8odGhpcy53KCksdGhpcy50YSgpKTpiLkFlKCk/KHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDJFMykpOnRoaXMubXEoYik/KHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDJFMykpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCl9fSl9KShjKTt2YXIgYmI9Yy5kbHx8YmI7KGZ1bmN0aW9uKGMpe2MuZ2w9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxucjpmdW5jdGlvbigpe3dpbmRvdy5PTy52bC5YbS5WbT93aW5kb3cuT08udmwuWG0uVm0uUHYoZnVuY3Rpb24oKXt9KTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubnIoKX0sMTAwKX0sZzpmdW5jdGlvbigpe3RoaXMuVWE9MTUwMDt2YXIgYj0KZWEoKTtpZihiJiZiLl9faW50ZXJuYWwmJmIuX19pbnRlcm5hbC5wbGF5ZXJzJiYwPGUudGUoYi5fX2ludGVybmFsLnBsYXllcnMpKWZvcih2YXIgYSBpbiBiLl9faW50ZXJuYWwucGxheWVycylpZihiLl9faW50ZXJuYWwucGxheWVycy5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGM9bmV3IGFiKGIuX19pbnRlcm5hbC5wbGF5ZXJzW2FdKTt0aGlzLk4oYyl8fCh0aGlzLlAoYyksKG5ldyBiYihjLHRoaXMuSykpLmcoKSl9dGhpcy5SKCl9fSl9KShjKTt2YXIgY2I9Yy5nbHx8Y2IsZGI9bmV3IGNiKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnlyPXRoaXMuYVszXTt0aGlzLlJrPXRoaXMuYVsyXTt0aGlzLkRqPXRoaXMuYVs2XTt0aGlzLnl0PXRoaXMuYVs5XTt0aGlzLm9tPXRoaXMuYVsxXTt0aGlzLkJ2PXRoaXMuYVs5XTt0aGlzLmhrPXRoaXMuYVs3XTt0aGlzLmNsPXRoaXMuYVs1XTsKdGhpcy5BbT10aGlzLmFbN107dGhpcy5qPXRoaXMuYVs5XX1jLnJyPWI7Yi5wcm90b3R5cGU9e3hyOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy55cjp0aGlzLlFrKGEpfSxRazpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuUms6dGhpcy5DaihhKX0sQ2o6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLkRqOnRoaXMueHQoYSl9LHh0OmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy55dDp0aGlzLm5tKGEpfSxubTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMub206dGhpcy5BdihhKX0sQXY6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLkJ2OnRoaXMuZ2soYSl9LGdrOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5oazp0aGlzLmJsKGEpfSxibDpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuY2w6dGhpcy56bShhKX0sem06ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5BbTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5qOgphfX19KShjKTt2YXIgZWI9Yy5ycnx8ZWIsQ2M9bmV3IGViKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9Q2MueHIoNCk7KGZ1bmN0aW9uKGMpe2MuYWo9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dGhpcy5xYT0hMTt0aGlzLkpnKCl9LEpnOmZ1bmN0aW9uKCl7dmFyIGI9ITEsYT0hMTt0aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5nZXRGaWd1cmUmJihiPXRoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLmdldEZpZ3VyZSgpKTtifHwoYj10aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5lbGVtZW50KTt0aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5nZXRWaWRlb0VsZW1lbnQmJihhPXRoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLmdldFZpZGVvRWxlbWVudCgpKTtiJiYhYSYmKGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXSk7CmImJmE/KHRoaXMuWShiKSx0aGlzLlooYSkpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5KZygpfS5iaW5kKHRoaXMpLDEwMCl9LHBhdXNlOmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLnBsYXkoKX0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIuZ2V0Q3VycmVudFRpbWUoKX0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIuZ2V0RHVyYXRpb24oKX0sTmE6ZnVuY3Rpb24oKXt0aGlzLnRoKCl9LHRoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRDdXJyZW50VGltZSgpOzE+dGhpcy5nZXREdXJhdGlvbigpLWI/dGhpcy5WJiYoMCx0aGlzLlYpKCk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnRoKCl9LmJpbmQodGhpcyksMTAwKX0sCk86ZnVuY3Rpb24oKXtyZXR1cm4iQml0bW92aW4ifX0pfSkoYyk7dmFyIGZiPWMuYWp8fGZiOyhmdW5jdGlvbihjKXtjLiRpPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LGRnOmZ1bmN0aW9uKGIpe3ZhciBhPWIuY29kZSxjPWIubWVzc2FnZTtiLmRhdGEmJihhPWIuZGF0YS5jb2RlLGM9Yi5kYXRhLm1lc3NhZ2UpOzEyMDUhPWEmJig5MDA9PWEmJjA8Yy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImVtcHR5Iik/KHRoaXMudygiZW1wdHkiKSx0aGlzLnRhKCkpOjEwMDk9PWF8fDMwMz09YXx8NDAzPT1hP3RoaXMudGEoKTp0aGlzLnMoKSl9LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2lmKGIuYWRFcnJvckV2ZW50cylmb3IodmFyIGE9MDthPGIuYWRFcnJvckV2ZW50cy5sZW5ndGg7YSsrKXRoaXMuZGcoYi5hZEVycm9yRXZlbnRzKTtiLnBsYXllci5vbigiYWRlcnJvciIsZnVuY3Rpb24oYSl7dGhpcy5kZyhhKX0uYmluZCh0aGlzKSk7CmIucGxheWVyLm9uKCJhZHF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygiYWRxdWFydGlsZSIpfS5iaW5kKHRoaXMpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCkucGxheWVyLmlzUGxheWluZygpP3RoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcyksMTApfX0pfSkoYyk7dmFyIGdiPWMuJGl8fGdiOyhmdW5jdGlvbihjKXtjLmJqPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sd2g6ZnVuY3Rpb24oYil7Yj1uZXcgZmIoYik7Yi5xYT90aGlzLlIoKTp0aGlzLk4oYil8fChiLkZkKE1hdGguY2VpbCgxRTEwKk1hdGgucmFuZG9tKCkpKSx0aGlzLlAoYiksKG5ldyBnYihiLHRoaXMuSykpLmcoKSl9LGc6ZnVuY3Rpb24oKXt0aGlzLkpwfHwodGhpcy5KcD0hMCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzdm06cGxheWVyaW5zdGFuY2UiLGZ1bmN0aW9uKGEpe3RoaXMud2goYS5kZXRhaWwpfS5iaW5kKHRoaXMpKSk7CmlmKHdpbmRvdy5fX3NjaG5lZVZvbk1vcmdlbiYmd2luZG93Ll9fc2NobmVlVm9uTW9yZ2VuLnZpZGVvUGxheWVySW5zdGFuY2VzKWZvcih2YXIgYj0wO2I8d2luZG93Ll9fc2NobmVlVm9uTW9yZ2VuLnZpZGVvUGxheWVySW5zdGFuY2VzLmxlbmd0aDtiKyspdGhpcy53aCh3aW5kb3cuX19zY2huZWVWb25Nb3JnZW4udmlkZW9QbGF5ZXJJbnN0YW5jZXNbYl0pO3RoaXMuUigpfX0pfSkoYyk7dmFyIGhiPWMuYmp8fGhiLFU9bmV3IGhiKHIpO1UuZygpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnJ0PXRoaXMuYVs0XTt0aGlzLmlsPXRoaXMuYVs5XTt0aGlzLmV0PXRoaXMuYVs4XTt0aGlzLkpxPXRoaXMuYVs1XTt0aGlzLkFyPXRoaXMuYVsxMF07dGhpcy5xbT10aGlzLmFbMl07dGhpcy5qaz10aGlzLmFbNF07dGhpcy53cT10aGlzLmFbOV07dGhpcy5VaT10aGlzLmFbNF07dGhpcy5Ecz0KdGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbOF19Yy5Jaj1iO2IucHJvdG90eXBlPXtxdDpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMucnQ6dGhpcy5obChhKX0saGw6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmlsOnRoaXMuZHQoYSl9LGR0OmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5ldDp0aGlzLklxKGEpfSxJcTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuSnE6dGhpcy56cihhKX0senI6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLkFyOnRoaXMucG0oYSl9LHBtOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5xbTp0aGlzLmlrKGEpfSxpazpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuams6dGhpcy52cShhKX0sdnE6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLndxOnRoaXMuVGkoYSl9LFRpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuVWk6dGhpcy5DcyhhKX0sQ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLkRzOnRoaXMuaShhKX0sCmk6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLmo6YX19fSkoYyk7dmFyIGliPWMuSWp8fGliLERjPW5ldyBpYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPURjLnF0KDQpOyhmdW5jdGlvbihjKXtjLlVsPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0UmF3UGxheWVyKCkpO3RoaXMuWShiKTtpZihiKXt2YXIgYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdO2F8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdKTt0aGlzLlooYSl9ZWxzZSB3aW5kb3cuc2V0VGltZW91dCh0aGlzLlMuYmluZCh0aGlzKSwxMDApfSxwYXVzZTpmdW5jdGlvbigpe3RyeXt0Zm1zdWl0ZSgiIyIrdGhpcy5nZXRSYXdQbGF5ZXIoKSkudGZtdmlkZW8oInBhdXNlIil9Y2F0Y2goYil7fX0sCnBsYXk6ZnVuY3Rpb24oKXt0cnl7dGZtc3VpdGUoIiMiK3RoaXMuZ2V0UmF3UGxheWVyKCkpLnRmbXZpZGVvKCJyZXN1bWUiKX1jYXRjaChiKXt0Zm1zdWl0ZSgiIyIrdGhpcy5nZXRSYXdQbGF5ZXIoKSkudGZtdmlkZW8oInBsYXkiKX19LEhjOmZ1bmN0aW9uKCl7dmFyIGI9bTtyZXR1cm4gYiYmYi5ydW5JbnNpZGVDb250YWluZXI/ITA6ITF9LE86ZnVuY3Rpb24oKXtyZXR1cm4iVEZNc3VpdGUifX0pfSkoYyk7dmFyIFY9Yy5VbHx8VjsoZnVuY3Rpb24oYyl7Yy5UbD12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTt4LldjKCIjIitiLCJvbkFkc01hbmFnZXJMb2FkZWQiLGZ1bmN0aW9uKCl7d2luZG93LnNldFRpbWVvdXQodGhpcy53LmJpbmQodGhpcyksMjAwKX0uYmluZCh0aGlzKSk7eC5XYygiIyIrYiwib2JqZWN0IixmdW5jdGlvbihhKXt0aGlzLmhzKGEpfS5iaW5kKHRoaXMpKTsKeC5XYygiIyIrYiwiYWRzTG9hZGVyRmFpbGVkIixmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsImFkc0xvYWRlckZhaWxlZCIpO3RoaXMuSSgpfS5iaW5kKHRoaXMpKTt4LldjKCIjIitiLCJyZXF1ZXN0QWRzRmFpbGVkIixmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsInJlcXVlc3RBZHNGYWlsZWQiKTt0aGlzLkkoKX0uYmluZCh0aGlzKSk7eC5DcSgpfSxoczpmdW5jdGlvbihiKXt2YXIgYT0iIixjO2ZvcihjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSl7YT1pc05hTihiW2NdKT8hMTpiW2NdO2lmKDEwMDk9PWJbY118fDEwMDE9PWJbY118fDMwMz09YltjXXx8NDAzPT1iW2NdKXt0aGlzLncoKTt0aGlzLnRhKCk7cmV0dXJufWZvcih2YXIgZCBpbiBiW2NdKWlmKGJbY10uaGFzT3duUHJvcGVydHkoZCkmJihhPWlzTmFOKGJbY11bZF0pPyExOmJbY11bZF0sMTAwOT09YltjXVtkXXx8MTAwMT09YltjXVtkXXx8MzAzPT1iW2NdW2RdfHw0MDM9PWJbY11bZF0pKXt0aGlzLncoKTsKdGhpcy50YSgpO3JldHVybn19dGhpcy5vKCJhZGVycm9yIixhKTt0aGlzLkkoKX19KX0pKGMpO3ZhciBXPWMuVGx8fFc7KGZ1bmN0aW9uKGMpe2MuVmw9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93LnRmbXN1aXRlKXtmb3IodmFyIGI9W10sYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSxjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10pO2E9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10pO3RoaXMueWQmJihiPWUuVW8oYix0aGlzLnlkKSk7Zm9yKGE9MDthPGIubGVuZ3RoO2ErKyl7dmFyIGQ9YlthXS5pZC5yZXBsYWNlKCJjb250ZW50RWxlbWVudCIsIiIpLGQ9bmV3IFYoZCk7aWYoIXRoaXMuTihkKSl7dGhpcy5QKGQpO3ZhciBmPW5ldyBXKGQsdGhpcy5LKTtmLmcoKX19Zm9yKGE9MDthPGIubGVuZ3RoO2ErKylmb3IoYz0KYlthXTtjLnBhcmVudEVsZW1lbnQ7KXt2YXIgYz1jLnBhcmVudEVsZW1lbnQsZz1jLmdldEF0dHJpYnV0ZSgiaWQiKTtpZihnKXRyeXt0Zm1zdWl0ZSgiIyIrZykudGZtdmlkZW8oInJlc3VtZSIpLHRoaXMueWR8fCh0aGlzLnlkPVtdKSx0aGlzLnlkLnB1c2goYlthXSksZD1uZXcgVihnKSx0aGlzLk4oZCl8fCh0aGlzLlAoZCksZj1uZXcgVyhkLHRoaXMuSyksZi5nKCkpfWNhdGNoKGspe319fXRoaXMuUigpfSxXYzpmdW5jdGlvbihiLGEsYyl7dGhpcy5jYXx8KHRoaXMuY2E9e30pO3RoaXMuY2FbYl18fCh0aGlzLmNhW2JdPXt9KTt0aGlzLmNhW2JdW2FdfHwodGhpcy5jYVtiXVthXT1bXSk7dGhpcy5jYVtiXVthXS5wdXNoKGMpfSx0dTpmdW5jdGlvbihiKXt2YXIgYT1iLnNQbGF5ZXJTZWxlY3RvcjtpZihiKWlmKCF0aGlzLmNhfHx0aGlzLmNhJiYhdGhpcy5jYVthXSl0aGlzLkVjfHwodGhpcy5FYz1bXSksdGhpcy5FYy5wdXNoKGIpLHRoaXMub3QoKSYmKHRoaXMuYWYoKSx0aGlzLmcoKSk7CmVsc2V7dmFyIGM9Im9iamVjdCI7InN0cmluZyI9PT10eXBlb2YgYi5vRXZlbnRUeXBlJiYoYz1iLm9FdmVudFR5cGUpO2lmKHRoaXMuY2FbYV1bY10mJjA8dGhpcy5jYVthXVtjXS5sZW5ndGgpZm9yKHZhciBkPTA7ZDx0aGlzLmNhW2FdW2NdLmxlbmd0aDtkKyspdGhpcy5jYVthXVtjXVtkXShiKX19LENxOmZ1bmN0aW9uKCl7aWYodGhpcy5FYylmb3IodmFyIGI9MDtiPHRoaXMuRWMubGVuZ3RoO2IrKyl7dmFyIGE9dGhpcy5FY1tiXSxjPWEuc1BsYXllclNlbGVjdG9yLGQ9Im9iamVjdCI7InN0cmluZyI9PT10eXBlb2YgYS5vRXZlbnRUeXBlJiYoZD1hLm9FdmVudFR5cGUpO2lmKHRoaXMuY2FbY11bZF0mJjA8dGhpcy5jYVtjXVtkXS5sZW5ndGgpZm9yKHZhciBlPTA7ZTx0aGlzLmNhW2NdW2RdLmxlbmd0aDtlKyspdGhpcy5jYVtjXVtkXVtlXShhKX19LHZpZGVvcGtnSW50ZXJmYWNlOmZ1bmN0aW9uKGIpeyJhdXRvUmVzaXplQ2FsbGJhY2tCZWZvcmUiIT1iLm9FdmVudFR5cGUuaCYmCiJhdXRvUmVzaXplQ2FsbGJhY2tBZnRlciIhPWIub0V2ZW50VHlwZS5oJiZ4LnR1KGIpfX0pfSkoYyk7dmFyIGpiPWMuVmx8fGpiLHg9bmV3IGpiKHIpO2NhKCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTGs9dGhpcy5hWzFdO3RoaXMuRXA9dGhpcy5hWzZdO3RoaXMuaj10aGlzLmFbNV19Yy5lbz1iO2IucHJvdG90eXBlPXtLazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTGs6dGhpcy5EcChhKX0sRHA6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLkVwOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuajphfX19KShjKTt2YXIga2I9Yy5lb3x8a2IsRWM9bmV3IGtiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9RWMuS2soNCk7CihmdW5jdGlvbihjKXtjLlhpPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubXV0ZWQ9ITE7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSYXdQbGF5ZXIoKSk7dGhpcy5ZKGIpO3ZhciBhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07YXx8KGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO3RoaXMuWihhKX0scGF1c2U6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5wYXVzZSgpfSl9LHBsYXk6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5wbGF5KCl9KX0sVmE6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5pc1BsYXlpbmcoKSYmCmIucGF1c2UoKX0pfSx2YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm11dGVkfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkJpbGRNZWRpYVBsYXllciJ9fSl9KShjKTt2YXIgbGI9Yy5YaXx8bGI7KGZ1bmN0aW9uKGMpe2MuWWk9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7JCgiIyIrYikuZGF0YSgibWVkaWFwbGF5ZXIiKS50aGVuKGZ1bmN0aW9uKGEpe3RoaXMucGxheWVyLm11dGVkPWEuZGF0YS5tdXRlZDthLm9uKCJlcnJvciIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIkVycm9yIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7YS5vbigidGltZXVwZGF0ZSIsZnVuY3Rpb24oKXtpZighYS5pc1BsYXlpbmd8fGEuaXNQbGF5aW5nKCkpYS5pc0FkJiZhLmlzQWQoKT90aGlzLncoKTphLmRhdGEmJmEuZGF0YS5hZHMmJmEuZGF0YS5hZHMudmFzdCYmYS5kYXRhLmFkcy52YXN0LnNyY2VzPwoodGhpcy5vKCJub0FkIiwicGxheWVkIiksdGhpcy5JKCkpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vKCJub0FkIiwicGxheWVkIik7dGhpcy5JKCEwKX0uYmluZCh0aGlzKSwyNTApfS5iaW5kKHRoaXMpKTthLm9uKCJwYXVzZSIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIndhaXRpbmciLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKTthLm9uKCJhZEVycm9yIixmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKTthLm9uKCJBZEVycm9yIixmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKTthLm9uKCJBZExvYWRlZCIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIkFkU3RhcnRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7YS5vbigiQWRWaWRlb1N0YXJ0IixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTthLm9uKCJBZFBsYXlpbmciLGZ1bmN0aW9uKCl7dGhpcy53KCl9LmJpbmQodGhpcykpO2Eub24oIkFkVmlkZW9GaXJzdFF1YXJ0aWxlIiwKZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7YS5vbigiQWRWaWRlb01pZHBvaW50IixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTthLm9uKCJBZFZpZGVvVGhpcmRRdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSl9LmJpbmQodGhpcykpfX0pfSkoYyk7dmFyIG1iPWMuWWl8fG1iOyhmdW5jdGlvbihjKXtjLlppPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm1lZGlhcGxheWVyIik7aWYod2luZG93LmRlJiZ3aW5kb3cuZGUuYmlsZCYmd2luZG93LmRlLmJpbGQubWVkaWFwbGF5ZXImJmImJjA8Yi5sZW5ndGgpZm9yKHZhciBhIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGM9YlthXSxkPSIiO3RyeXtkPWMuZ2V0QXR0cmlidXRlKCJpZCIpfWNhdGNoKGUpe2Q9Yy5pZH1pZihkJiYkKCIjIitkKS5kYXRhKCJtZWRpYXBsYXllciIpKXRyeXt2YXIgZz0KbmV3IGxiKGQpO3RoaXMuTihnKXx8KHRoaXMuUChnKSwobmV3IG1iKGcsdGhpcy5LKSkuZygpKX1jYXRjaChrKXt9fXRoaXMuUigpfSxOOmZ1bmN0aW9uKGIpe3ZhciBhPWIuZ2V0UmF3UGxheWVyKCk7JCgiIyIrYSk7Zm9yKHZhciBjIGluIHRoaXMuTWEpaWYoYT09dGhpcy5NYVtjXS5nZXRSYXdQbGF5ZXIoKSlyZXR1cm4hMDtyZXR1cm4gdGhpcy5NYVtiLmphKCldPyEwOiExfX0pfSkoYyk7dmFyIG5iPWMuWml8fG5iLG9iPW5ldyBuYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5Fbz10aGlzLmFbNF07dGhpcy50dj10aGlzLmFbMV07dGhpcy5mbT10aGlzLmFbNl07dGhpcy5vcD10aGlzLmFbM107dGhpcy5qPXRoaXMuYVsyXX1jLndyPWI7Yi5wcm90b3R5cGU9e0RvOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Fbzp0aGlzLnN2KGEpfSxzdjpmdW5jdGlvbihhKXtyZXR1cm4gMTwKYT90aGlzLnR2OnRoaXMuZW0oYSl9LGVtOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5mbTp0aGlzLm5wKGEpfSxucDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMub3A6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBwYj1jLndyfHxwYixGYz1uZXcgcGIoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1GYy5Ebyg0KTsoZnVuY3Rpb24oYyl7Yy5Vaz11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPSExO3RoaXMuZ2V0UmF3UGxheWVyKCkuZW52dmFycyYmdGhpcy5nZXRSYXdQbGF5ZXIoKS5lbnZ2YXJzKCk7dGhpcy5nZXRSYXdQbGF5ZXIoKS5jb250YWluZXJJRCYmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSYXdQbGF5ZXIoKS5jb250YWluZXJJRCkpOwpiJiYoYT1iKTt0aGlzLlkoYik7dGhpcy5aKGEpO3RoaXMuaHQodGhpcy5nZXRSYXdQbGF5ZXIoKSxiKTt0aGlzLmdldFJhd1BsYXllcigpfSxwYXVzZTpmdW5jdGlvbigpe30scGxheTpmdW5jdGlvbigpe30saHQ6ZnVuY3Rpb24oYixhKXtiJiZiLnBhdXNlRXZlbnQmJmEuYWRkRXZlbnRMaXN0ZW5lcihiLnBhdXNlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiZ0aGlzLmhhLnBhdXNlJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5wYXVzZSYmdGhpcy5oYS5wYXVzZSgpfS5iaW5kKHRoaXMpKTtiJiZiLnJlc3VtZUV2ZW50JiZhLmFkZEV2ZW50TGlzdGVuZXIoYi5yZXN1bWVFdmVudCxmdW5jdGlvbigpe3RoaXMuaGEmJnRoaXMuaGEucmVzdW1lJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5yZXN1bWUmJnRoaXMuaGEucmVzdW1lKCl9LmJpbmQodGhpcykpO2ImJmIubXV0ZUV2ZW50JiZhLmFkZEV2ZW50TGlzdGVuZXIoYi5tdXRlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiYKdGhpcy5oYS5tdXRlJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5tdXRlJiZ0aGlzLmhhLm11dGUoKX0uYmluZCh0aGlzKSk7YiYmYi51bm11dGVFdmVudCYmYS5hZGRFdmVudExpc3RlbmVyKGIudW5tdXRlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiZ0aGlzLmhhLnVubXV0ZSYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuaGEudW5tdXRlJiZ0aGlzLmhhLnVubXV0ZSgpfS5iaW5kKHRoaXMpKX0sU2c6ZnVuY3Rpb24oYil7dGhpcy5oYT1ifSxPOmZ1bmN0aW9uKCl7cmV0dXJuIk9ubHlIT01BRCJ9fSl9KShjKTt2YXIgcWI9Yy5Va3x8cWI7KGZ1bmN0aW9uKGMpe2MuVGs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKTt0aGlzLmVpPSExfSxnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKSxhPXRoaXMuZ2V0UGxheWVyKCk7Yi5hdXRvc3RhcnQmJiF0aGlzLmVpJiYodGhpcy5JKCksdGhpcy5laT0hMCx0aGlzLnJhKCkpOwphLklhKCkuYWRkRXZlbnRMaXN0ZW5lcihiLnBsYXlFdmVudCxmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKX19KX0pKGMpO3ZhciByYj1jLlRrfHxyYjsoZnVuY3Rpb24oYyl7Yy5Waz1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtKXtpZihtLnBsYXllcil7dmFyIGI9bS5wbGF5ZXI7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGIpdHJ5e2I9YigpfWNhdGNoKGEpe2UudHJhY2soIm9ubHlIT01BRENvbmZGYWlsZWQiLCIiLCEwKX1mb3IodmFyIGM9ITEsZD0wO2Q8Yi5sZW5ndGg7ZCsrKWM9bmV3IHFiKGJbZF0pLHRoaXMuTihjKXx8KHRoaXMuUChjKSwobmV3IHJiKGMsdGhpcy5LKSkuZygpKX19ZWxzZSB0aGlzLlIoKX19KX0pKGMpO3ZhciBzYj1jLlZrfHxzYixYPW5ldyBzYihyKTtYLmcoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CnRoaXMueGw9dGhpcy5hWzddO3RoaXMuemo9dGhpcy5hWzNdO3RoaXMud289dGhpcy5hWzddO3RoaXMueWk9dGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbNV19Yy5Ccj1iO2IucHJvdG90eXBlPXt3bDpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMueGw6dGhpcy55aihhKX0seWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnpqOnRoaXMudm8oYSl9LHZvOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMud286dGhpcy54aShhKX0seGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLnlpOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuajphfX19KShjKTt2YXIgdGI9Yy5Ccnx8dGIsR2M9bmV3IHRiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9R2Mud2woNCk7KGZ1bmN0aW9uKGMpe2MuR209dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSwKUzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCkucGFyZW50Tm9kZTt0aGlzLlkoYik7Yj10aGlzLmdldFJhd1BsYXllcigpO3RoaXMuWihiKTt0aGlzLmlzUGxheWluZz0hMTtiLmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5pc1BsYXlpbmc9ITB9LmJpbmQodGhpcykpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheSgpfSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGI/Yi5tdXRlZDohMH0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5jdXJyZW50VGltZX0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5kdXJhdGlvbn0sTmE6ZnVuY3Rpb24oKXswPHRoaXMuZ2V0RHVyYXRpb24oKSYmMDx0aGlzLmdldEN1cnJlbnRUaW1lKCkmJgoxLjU+dGhpcy5nZXREdXJhdGlvbigpLXRoaXMuZ2V0Q3VycmVudFRpbWUoKSYmdGhpcy5WPygwLHRoaXMuVikoKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuTmEoKX0uYmluZCh0aGlzKSw0MDApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIldGdjQifX0pfSkoYyk7dmFyIHViPWMuR218fHViOyhmdW5jdGlvbihjKXtjLkZtPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LFJiOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKSxiPWIuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIuaW1hQWRzTG9hZGVyfSxndDpmdW5jdGlvbihiKXtiLmFkZEV2ZW50TGlzdGVuZXIoZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUixmdW5jdGlvbihhKXthPWEuZ2V0RXJyb3IoKTthLmdldEVycm9yQ29kZSgpO3RoaXMuJGF8fCh0aGlzLiRhPVtdKTt0aGlzLiRhLnB1c2goYS5nZXRFcnJvckNvZGUoKSk7MTAwOT09YS5nZXRFcnJvckNvZGUoKXx8CjMwMz09YS5nZXRFcnJvckNvZGUoKXx8NDAzPT1hLmdldEVycm9yQ29kZSgpP3RoaXMudGEoKTp0aGlzLm8oImFkZXJyb3IiLGEuZ2V0RXJyb3JDb2RlKCkpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkc01hbmFnZXJMb2FkZWQiLGZ1bmN0aW9uKCl7dGhpcy5uYz0hMDt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yi5hZGRFdmVudExpc3RlbmVyKCJsb2ciLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKX0sZzpmdW5jdGlvbigpe3RoaXMucygpO3RoaXMuZ2V0UGxheWVyKCk7dGhpcy5BYT90aGlzLmd0KHRoaXMuQWEpOih0aGlzLkFhPXRoaXMuUmIoKSx3aW5kb3cuc2V0VGltZW91dCh0aGlzLmcuYmluZCh0aGlzKSwxMDApKX0sczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCk7aWYoYi5pc1BsYXlpbmcmJjE8Yi5nZXRDdXJyZW50VGltZSgpKXtpZighdGhpcy5BYSl7dGhpcy5JKCk7cmV0dXJufWlmKCF0aGlzLm5jKXt0aGlzLkkoKTtyZXR1cm59Yj0hMDtpZih0aGlzLiRhJiYKdGhpcy4kYS5sZW5ndGgmJjE8dGhpcy4kYS5sZW5ndGgpZm9yKHZhciBhPTA7YTx0aGlzLiRhLmxlbmd0aC0xO2ErKykxMDA5IT10aGlzLiRhW2FdJiYzMDMhPXRoaXMuJGFbYV0mJjQwMyE9dGhpcy4kYVthXSYmKGI9ITEpO2lmKGIpdGhpcy53KCJlbXB0eSIpLHRoaXMudGEoKTtlbHNle3RoaXMuSSgpO3JldHVybn19d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoKX0uYmluZCh0aGlzKSw1MDApfX0pfSkoYyk7dmFyIHZiPWMuRm18fHZiOyhmdW5jdGlvbihjKXtjLkhtPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe3RoaXMuVWE9LTE7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIik7aWYod2luZG93LndmdjRfaHRtbDVfcGxheWVyJiYwPGIubGVuZ3RoKWZvcih2YXIgYSBpbiBiKXt2YXIgYz1uZXcgdWIoYi5pdGVtKGEpKTt0aGlzLk4oYyl8fC0xPT1jLmlkLnNlYXJjaCgidmlkZW9fIil8fCh0aGlzLlAoYyksCihuZXcgdmIoYyx0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIHdiPWMuSG18fHdiLHhiPW5ldyB3YihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5McT10aGlzLmFbN107dGhpcy5Vcj10aGlzLmFbMl07dGhpcy5Hbz10aGlzLmFbNl07dGhpcy52cj10aGlzLmFbOV07dGhpcy5Edj10aGlzLmFbM107dGhpcy56bj10aGlzLmFbMV07dGhpcy5xcz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbN119Yy5Qcz1iO2IucHJvdG90eXBlPXtLcTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuTHE6dGhpcy5UcihhKX0sVHI6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLlVyOnRoaXMuRm8oYSl9LEZvOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5Hbzp0aGlzLnVyKGEpfSx1cjpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMudnI6dGhpcy5DdihhKX0sQ3Y6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8CmE/dGhpcy5Edjp0aGlzLnluKGEpfSx5bjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuem46dGhpcy5wcyhhKX0scHM6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLnFzOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLmo6YX19fSkoYyk7dmFyIHliPWMuUHN8fHliLEhjPW5ldyB5YigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPUhjLktxKDQpOyhmdW5jdGlvbihjKXtjLkhsPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm10di1wbGF5ZXItY29udGFpbmVyIilbMF07dGhpcy5ZKGIpO3RoaXMuWihiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdKTt0aGlzLlVlPSExfSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCk7CndpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpe3RoaXMuV3MoKX0uYmluZCh0aGlzKSw1MDApfSxXczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UG9zaXRpb24oKSxhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiZ0aGlzLlYmJnRoaXMuVigpfSxnZXREdXJhdGlvbjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT0wO2IucGxheWJhY2suZ2V0RHVyYXRpb24mJihhPWIucGxheWJhY2suZ2V0RHVyYXRpb24oKSk7cmV0dXJuIGF9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPTA7Yi5wbGF5YmFjay5nZXRQb3NpdGlvbiYmKGE9Yi5wbGF5YmFjay5nZXRQb3NpdGlvbigpKTtyZXR1cm4gYX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBsYXliYWNrLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLlVlJiZ3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLlVlKTsKdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5YmFjay5wbGF5KCl9LGlzUGxheWluZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIucGxheWJhY2smJmIucGxheWJhY2suZ2V0UGxheVN0YXRlPyhiLnBsYXliYWNrLmdldFBsYXlTdGF0ZSgpLCJwbGF5aW5nIj09Yi5wbGF5YmFjay5nZXRQbGF5U3RhdGUoKSk6ITF9LFp0OmZ1bmN0aW9uKCl7dGhpcy5VZT13aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt0aGlzLnBhdXNlKCl9LmJpbmQodGhpcyksMTApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIlJvY2tlcnkifX0pfSkoYyk7dmFyIHpiPWMuSGx8fHpiOyhmdW5jdGlvbihjKXtjLkdsPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSk7dGhpcy5mYz0wfSxnOmZ1bmN0aW9uKCl7dGhpcy5Tcj0xMDt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO3RoaXMuZmN8fCh0aGlzLmZjPTAsYi5hZGRFdmVudExpc3RlbmVyKCJhZEVycm9yIiwKZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiKTt0aGlzLnMoKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXt9KSk7d2luZG93LnZpZGVvcGxhemE/KHdpbmRvdy52aWRlb3BsYXphLmJ1aWxkRGF0ZXx8KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpLHdpbmRvdy52aWRlb3BsYXphLmNvcmU/KHdpbmRvdy52aWRlb3BsYXphLmNvcmUuQWRDYWxsTW9kdWxlfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5UcmFja2VyfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5tb2RlbHx8KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpLHdpbmRvdy52aWRlb3BsYXphLmNvcmUucGFyc2V8fCh0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGF6YSIpLAp0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5yZXF1ZXN0fHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSkpOih0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGF6YSIpLHRoaXMucygpKSx3aW5kb3cudmlkZW9wbGF6YS52ZXJzaW9uTnVtYmVyfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSkpOih0aGlzLmZjfHx0aGlzLmZjKyssdGhpcy5mYzw9dGhpcy5Tcj8odGhpcy5mYysrLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksNTAwKSk6KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nKCk/KHRoaXMuZ2V0UGxheWVyKCkuWnQoKSx0aGlzLkkoKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoKX0uYmluZCh0aGlzKSwxMDApfX0pfSkoYyk7CnZhciBBYj1jLkdsfHxBYjsoZnVuY3Rpb24oYyl7Yy5JbD1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJtdHYtcGxheWVyLWNvbnRhaW5lciIpLGE9ITE7YiYmYlswXSYmKGE9YlswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSkmJmFbMF0mJndpbmRvdy5wbGF5ZXJBcGkmJndpbmRvdy5wbGF5ZXJBcGkucGxheWJhY2smJmImJihiPW5ldyB6Yih3aW5kb3cucGxheWVyQXBpKSx0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBBYihiLHRoaXMuSykpLmcoKSkpO3RoaXMuUigpfX0pfSkoYyk7dmFyIEJiPWMuSWx8fEJiLENiPW5ldyBCYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5GbD10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbOF19Yy52cD1iO2IucHJvdG90eXBlPQp7RWw6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkZsOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuajphfX19KShjKTt2YXIgRGI9Yy52cHx8RGIsSWM9bmV3IERiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9SWMuRWwoNCk7KGZ1bmN0aW9uKGMpe2MuQ2w9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS5wYXJlbnROb2RlLnBhcmVudE5vZGU7dGhpcy5ZKGIpO2I9dGhpcy5nZXRSYXdQbGF5ZXIoKTt0aGlzLlooYik7dGhpcy5pc1BsYXlpbmc9ITE7Yi5hZGRFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIixmdW5jdGlvbigpe3RoaXMuaXNQbGF5aW5nPSEwfS5iaW5kKHRoaXMpKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlKCl9LApwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5KCl9LGdldEN1cnJlbnRUaW1lOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPSIiO2IuY3VycmVudFRpbWUmJihhPWIuY3VycmVudFRpbWUpO3JldHVybiBhfSxnZXREdXJhdGlvbjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT0wO2IuZHVyYXRpb24mJihhPWIuZHVyYXRpb24pO3JldHVybiBhfSxOYTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0Q3VycmVudFRpbWUoKSxhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiZhJiYxPmEtYj90aGlzLlYoKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuTmEoKX0uYmluZCh0aGlzKSwyMDApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIlJhZGlhbnRNUCJ9fSl9KShjKTt2YXIgRWI9Yy5DbHx8RWI7KGZ1bmN0aW9uKGMpe2MuQmw9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLmdldFBsYXllcigpLklhKCksYT10aGlzLmdldFBsYXllcigpLnZpZGVvVGFnO2EmJmEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZHN0YXJ0IixmdW5jdGlvbigpe3RoaXMucmEoKTt0aGlzLmdldFBsYXllcigpLmlzUGxheWluZz0hMX0uYmluZCh0aGlzKSk7dGhpcy5nZXRQbGF5ZXIoKTtiLmFkZEV2ZW50TGlzdGVuZXIoInBsYXlpbmciLGZ1bmN0aW9uKCl7dGhpcy5ObygpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkbG9hZGVkIixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkc3RhcnRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yj10aGlzLnBkKCk7MDxiLmdldEN1cnJlbnRUaW1lKCk/dGhpcy5HcigpOnRoaXMuZ2coKTtiLmF1dG9wbGF5JiZ3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuT2YoKXx8KHRoaXMubygiY29udGVudHBsYXkiKSx0aGlzLnMoITApKX0uYmluZCh0aGlzKSwKMUUzKX0sTm86ZnVuY3Rpb24oKXt0aGlzLk9mKCl8fHRoaXMucyghMCl9LEdyOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wZCgpOyFiLm5hJiZiLlcmJmIuT3YmJmIuUXYmJih0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIiksdGhpcy5zKCkpfSxnZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMucGQoKTtiLmFkc0xvYWRlcj9iLmFkc0xvYWRlci5hZGRFdmVudExpc3RlbmVyKGdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUuQURfRVJST1IsZnVuY3Rpb24oYSl7dmFyIGI7YTp7YT1hLmdldEVycm9yKCk7Zm9yKGIgaW4gYSlpZigibnVtYmVyIj09dHlwZW9mIGFbYl0pe2I9YVtiXTticmVhayBhfWI9dm9pZCAwfTEwMDk9PWJ8fDMwMz09Ynx8NDAzPT1iPyh0aGlzLncoKSx0aGlzLnRhKCkpOih0aGlzLm8oImFkZXJyb3IiLGIpLHRoaXMucygpKX0uYmluZCh0aGlzKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmdnKCl9LmJpbmQodGhpcyksMTAwKX0scGQ6ZnVuY3Rpb24oKXtpZighdGhpcy5uaClmb3IodmFyIGI9Cm0ucGxheWVyYXBpKCksYT10aGlzLmdldFBsYXllcigpLklhKCkuaWQsYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10uaWQ9PWEmJih0aGlzLm5oPWJbY10pO3JldHVybiB0aGlzLm5ofSxodzpmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuaW1hPyFpbWEudmlkZW8uY2xpZW50LmpzVGFnJiYhaW1hLnZpZGVvLmNsaWVudC50YWdnZWQmJiFpbWEudmlkZW8uY2xpZW50LmdldEVEYXRhOiExfSxzOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nP2I/dGhpcy5wZCgpLmFkc0xvYWRlcj90aGlzLkkoITApOnRoaXMuSSgpOnRoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwKX19KX0pKGMpO3ZhciBGYj1jLkJsfHxGYjsoZnVuY3Rpb24oYyl7Yy5EbD1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtJiZtLnBsYXllcmFwaSl7dmFyIGI9bS5wbGF5ZXJhcGkoKTtpZihiLmxlbmd0aCl7Zm9yKHZhciBhPQowO2E8Yi5sZW5ndGg7YSsrKXt2YXIgYz1uZXcgRWIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYlthXS5pZCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pO3RoaXMuTihjKXx8KHRoaXMuUChjKSwobmV3IEZiKGMsdGhpcy5LKSkuZygpKX1yZXR1cm59fXRoaXMuUigpfX0pfSkoYyk7dmFyIEdiPWMuRGx8fEdiLEhiPW5ldyBHYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5lcD10aGlzLmFbMV07dGhpcy51aT10aGlzLmFbMTBdO3RoaXMuSWk9dGhpcy5hWzZdO3RoaXMud3M9dGhpcy5hWzddO3RoaXMueG49dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbMl19Yy5RbD1iO2IucHJvdG90eXBlPXtjcDpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLmVwOnRoaXMudGkoYSl9LHRpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy51aTp0aGlzLkhpKGEpfSxIaTpmdW5jdGlvbihhKXtyZXR1cm4gMTA8CmE/dGhpcy5JaTp0aGlzLnZzKGEpfSx2czpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMud3M6dGhpcy53bihhKX0sd246ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLnhuOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuajphfX19KShjKTt2YXIgSWI9Yy5RbHx8SWIsSmM9bmV3IEliKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9SmMuY3AoNCk7KGZ1bmN0aW9uKGMpe2MuRWs9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5wbGF5ZXIuaWQpO0cmJihiPWIuZmlyc3RDaGlsZCk7aWYoYil7dGhpcy5ZKGIpO2lmKGIudGFnTmFtZSl7dmFyIGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXTthfHwoYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7CmF8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImVtYmVkIilbMF0pfWE/dGhpcy5aKGEpOnRoaXMucGEoKX1lbHNlIHRoaXMucGEoKX0sZnc6ZnVuY3Rpb24oKXt2YXIgYj0hMTswPD1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpLmluZGV4T2YoInNwaWVnZWwuZGUiKSYmKGI9ITApO3JldHVybiBifSxwYXVzZTpmdW5jdGlvbigpe2lmKEcpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7d2luZG93Ll9wbGF5LmNvbnRyb2wuaW50ZXJhY3QucGF1c2UoYi5pZCl9ZWxzZSB3aW5kb3cuX3BsYXkuYWRkb25zLnN2bS5zZW5kQ29tbWFuZCgicGF1c2UiKX0scGxheTpmdW5jdGlvbigpe2lmKEcpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7d2luZG93Ll9wbGF5LmNvbnRyb2wuaW50ZXJhY3QucGxheShiLmlkKX1lbHNlIHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLnNlbmRDb21tYW5kKCJwbGF5Iil9LFZhOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy52aWRlb1RhZztyZXR1cm4gYiYmIWIucGF1c2VkPwoodGhpcy5wYXVzZSgpLCEwKTohMX0sTzpmdW5jdGlvbigpe3JldHVybiJuZXh0In0sSGM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSWE6ZnVuY3Rpb24oKXt2YXIgYjtHPyhiPXRoaXMuZ2V0UmF3UGxheWVyKCksYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChiLmlkKS5maXJzdENoaWxkKTpiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLmdldFBsYXllckNvbnRhaW5lcigpKTtiIT10aGlzLmNvbnRhaW5lciYmKHRoaXMuY29udGFpbmVyPWIpO3JldHVybiB0aGlzLmNvbnRhaW5lcn19KX0pKGMpO3ZhciBZPWMuRWt8fFk7KGZ1bmN0aW9uKGMpe2MuRGs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMuV2U9IiI7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtiJiYodGhpcy5XZT1iLmlkKTtHP3dpbmRvdy5fcGxheS5jb25maWcuYWRkQWRkb25MaXN0ZW5lcihmdW5jdGlvbihhKXt2YXIgYj0KYS5wbGF5ZXJDb250YWluZXI7YiYmdGhpcy5XZSYmYiE9dGhpcy5XZXx8ImFkZXJyb3IiIT1hLmV2ZW50fHxlLkJhKCJ0ZWxlNS5kZSIpJiYicG9zdHJvbGwiPT1hLmFkVHlwZXx8KGEuYWRVUkwmJihtLmFkVGFnPWEuYWRVUkwpLHRoaXMubygiYWRlcnJvciIsYS5rdyksdGhpcy5JKCksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnJhKCl9LmJpbmQodGhpcyksMTAwKSl9LmJpbmQodGhpcyksInN2bSIpOndpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLnNldExpc3RlbmVyKGZ1bmN0aW9uKGEpeyJhZGVycm9yIj09YSYmKHRoaXMubygiYWRlcnJvciIpLHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDEwMCkpfS5iaW5kKHRoaXMpKX19KX0pKGMpO3ZhciBaPWMuRGt8fFo7KGZ1bmN0aW9uKGMpe2MuRms9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93Ll9wbGF5JiYKd2luZG93Ll9wbGF5LmFkZG9ucyYmd2luZG93Ll9wbGF5LmFkZG9ucy5zdm0pe0c9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLmdldFBsYXllckNvbnRhaW5lcj8hMTohMDt2YXIgYjtpZihHKWZvcih2YXIgYT13aW5kb3cuX3BsYXkuY29udHJvbC5nZXRJbnN0YW5jZXMoKSxjPWEubGVuZ3RoLGQ9MDtkPGM7ZCsrKXtpZihiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFbZF0pKWI9bmV3IFkoYiksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFooYix0aGlzLkspLGIuZygpKX1lbHNlIGlmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQod2luZG93Ll9wbGF5LmFkZG9ucy5zdm0uZ2V0UGxheWVyQ29udGFpbmVyKCkpKWI9bmV3IFkoYiksYi5xYT90aGlzLmFmKCk6dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFooYix0aGlzLkspLGIuZygpKX10aGlzLlIoKX19KX0pKGMpO3ZhciBHLEpiPWMuRmt8fEpiLEtiPW5ldyBKYihoYSk7Yz1jfHwKe307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnhwPXRoaXMuYVs1XTt0aGlzLlFtPXRoaXMuYVs3XTt0aGlzLlNtPXRoaXMuYVs0XTt0aGlzLnNpPXRoaXMuYVs5XTt0aGlzLnZqPXRoaXMuYVs4XTt0aGlzLlhsPXRoaXMuYVs5XTt0aGlzLkV1PXRoaXMuYVsxMF07dGhpcy5ZdD10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs0XX1jLllvPWI7Yi5wcm90b3R5cGU9e3dwOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy54cDp0aGlzLlBtKGEpfSxQbTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuUW06dGhpcy5SbShhKX0sUm06ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5TbTp0aGlzLnJpKGEpfSxyaTpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuc2k6dGhpcy51aihhKX0sdWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLnZqOnRoaXMuV2woYSl9LFdsOmZ1bmN0aW9uKGEpe3JldHVybiA1PAphP3RoaXMuWGw6dGhpcy5EdShhKX0sRHU6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLkV1OnRoaXMuWHQoYSl9LFh0OmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5ZdDp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLmo6YX19fSkoYyk7dmFyIExiPWMuWW98fExiLEtjPW5ldyBMYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPUtjLndwKDQpOyhmdW5jdGlvbihjKXtjLk5tPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpO2lmKGImJmJbMF0pe2Zvcih2YXIgYT1iPWJbMF07YSYmYS5wYXJlbnROb2RlOyl7aWYoIkJPRFkiPT1hLnBhcmVudE5vZGUubm9kZU5hbWUpe2E9YS5wYXJlbnROb2RlO2JyZWFrfWE9YS5wYXJlbnROb2RlfXRoaXMuWihiKTsKdGhpcy5ZKGEpO3RoaXMuU2Q9ITE7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhkRXZlbnQiLGZ1bmN0aW9uKGEpe2lmKGEuZGV0YWlsKXtpZigiY29udGVudFBsYXllclBsYXkiPT1hLmRldGFpbC5uYW1lKXRyeXt3aW5kb3cuREw4X29uQWRDb21wbGV0ZWQoKSx0aGlzLlNkPSExfWNhdGNoKGIpe31pZigiYWRSZXF1ZXN0Ij09YS5kZXRhaWwubmFtZSl0cnl7dGhpcy5TZHx8KHRoaXMuU2Q9ITAsd2luZG93LkRMOF9vbkFkU3RhcnRlZCgpKX1jYXRjaChjKXt9fX0uYmluZCh0aGlzKSl9ZWxzZSB0aGlzLnBhKCl9LHBhdXNlOmZ1bmN0aW9uKCl7dHJ5e3dpbmRvdy5ETDhfb25Db250ZW50UGF1c2VSZXF1ZXN0ZWQoKX1jYXRjaChiKXt0aGlzLnZpZGVvVGFnLnBhdXNlKCl9fSxwbGF5OmZ1bmN0aW9uKCl7dHJ5e3dpbmRvdy5ETDhfb25Db250ZW50UmVzdW1lUmVxdWVzdGVkKCl9Y2F0Y2goYil7dGhpcy52aWRlb1RhZy5wbGF5KCl9fSxWYTpmdW5jdGlvbigpe2lmKCF0aGlzLnZpZGVvVGFnLnBhdXNlZClyZXR1cm4gdGhpcy5wYXVzZSgpLAohMH0sTzpmdW5jdGlvbigpe3JldHVybiJ4eW1hdGljIn19KX0pKGMpO3ZhciBNYj1jLk5tfHxNYjsoZnVuY3Rpb24oYyl7Yy5NbT12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxpdDpmdW5jdGlvbihiKXtiJiZiLmFkZEV2ZW50TGlzdGVuZXImJihiLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBsZXRlIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJpbXByZXNzaW9uIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJmaXJzdHF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJtaWRwb2ludCIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigidGhpcmRxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigiYWRzTWFuYWdlckxvYWRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigiYWRzRXJyb3IiLApmdW5jdGlvbihhKXt0aGlzLmJkKGEpfS5iaW5kKHRoaXMpKSxiLmFkZEV2ZW50TGlzdGVuZXIoImFkRXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuYmQoYSl9LmJpbmQodGhpcykpKTtiJiZiLmFkZEFkRXJyb3JMaXN0ZW5lciYmYi5hZGRBZEVycm9yTGlzdGVuZXIoZnVuY3Rpb24oYSl7dGhpcy5iZChhKX0uYmluZCh0aGlzKSl9LGJkOmZ1bmN0aW9uKGIpe3ZhciBhPXt9O2IuZ2V0RXJyb3ImJihiLmdldEVycm9yKCksYT1iLmdldEVycm9yKCkpO2EuZ2V0RXJyb3JDb2RlPyhhLmdldEVycm9yQ29kZSgpLHRoaXMubygiYWRlcnJvciIsYS5nZXRFcnJvckNvZGUoKSksMTAwOT09YS5nZXRFcnJvckNvZGUoKXx8MzAzPT1hLmdldEVycm9yQ29kZSgpfHw0MDM9PWEuZ2V0RXJyb3JDb2RlKCk/dGhpcy53KCk6dGhpcy5JKCkpOih0aGlzLm8oIm5vZnJhbWV3b3JrIiksdGhpcy5JKCkpfSxMZjpmdW5jdGlvbigpe2lmKHdpbmRvdy5fX2RsOF9hZEVycm9yRXZlbnRCdWNrZXQpZm9yKHZhciBiPTA7YjwKd2luZG93Ll9fZGw4X2FkRXJyb3JFdmVudEJ1Y2tldC5sZW5ndGg7YisrKXRoaXMuYmQod2luZG93Ll9fZGw4X2FkRXJyb3JFdmVudEJ1Y2tldFtiXSk7dGhpcy51YSgpfHx3aW5kb3cuc2V0VGltZW91dCh0aGlzLkxmLmJpbmQodGhpcyksMTAwKX0sZzpmdW5jdGlvbigpe3dpbmRvdy5fX2RsOF9hZHNMb2FkZXImJnRoaXMuaXQod2luZG93Ll9fZGw4X2Fkc0xvYWRlcik7dGhpcy5MZigpfX0pfSkoYyk7dmFyIE5iPWMuTW18fE5iOyhmdW5jdGlvbihjKXtjLk9tPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe2lmKHdpbmRvdy5ETDhfR0xPQkFMUyl7dmFyIGI9bmV3IE1iKHdpbmRvdy5ETDhfR0xPQkFMUyk7Yi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLChuZXcgTmIoYix0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIE9iPWMuT218fE9iLFBiPW5ldyBPYihoYSk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT0KQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLkZyPXRoaXMuYVsyXTt0aGlzLklzPXRoaXMuYVs4XTt0aGlzLlhuPXRoaXMuYVsxXTt0aGlzLlVqPXRoaXMuYVszXTt0aGlzLlpxPXRoaXMuYVs5XTt0aGlzLmo9dGhpcy5hWzZdfWMuRm49YjtiLnByb3RvdHlwZT17RXI6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLkZyOnRoaXMuSHMoYSl9LEhzOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5Jczp0aGlzLlduKGEpfSxXbjpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuWG46dGhpcy5UaihhKX0sVGo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlVqOnRoaXMuWXEoYSl9LFlxOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5acTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLmo6YX19fSkoYyk7dmFyIFFiPWMuRm58fFFiLExjPW5ldyBRYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLAoibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1MYy5Fcig0KTsoZnVuY3Rpb24oYyl7Yy5qbT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt0aGlzLnJoPSExO3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7aWYoYi52aWRlb01vZGVsKXt2YXIgYT1iLnZpZGVvTW9kZWwuZ2V0KCJwbGF5ZXJFbGVtZW50Iik7aWYoYSl7dGhpcy5ZKGEpO3ZhciBjPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07Y3x8KGM9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO2M/KHRoaXMuWihjKSxiLnZpZGVvTW9kZWwub2JzZXJ2ZSgicG9zaXRpb24iLGZ1bmN0aW9uKGEpe3RoaXMuYXM9YX0uYmluZCh0aGlzKSksYi52aWRlb01vZGVsLm9ic2VydmUoImR1cmF0aW9uIixmdW5jdGlvbihhKXt0aGlzLmR1cmF0aW9uPWF9LmJpbmQodGhpcykpKTp0aGlzLnBhKCl9ZWxzZSB0aGlzLnBhKCl9ZWxzZSB0aGlzLnBhKCl9LApxdzpmdW5jdGlvbigpe30sdmE6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLGE9MTtyZXR1cm4gYi52aWRlb01vZGVsJiZiLnZpZGVvTW9kZWwuZ2V0JiYoYT1iLnZpZGVvTW9kZWwuZ2V0KCJ2b2x1bWUiKSwwPGEpPyExOiEwfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkudmlkZW9Nb2RlbC5wYXVzZSgpfSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb01vZGVsLnBsYXkoKX0sVmE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb01vZGVsLmdldCgiaXNQYXVzZWQiKT8hMToodGhpcy5wYXVzZSgpLCEwKX0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc30sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kdXJhdGlvbn0sTzpmdW5jdGlvbigpe3JldHVybiJ0djIifSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkudmlkZW9Nb2RlbC5vYnNlcnZlKCJwb3NpdGlvbiIsCmZ1bmN0aW9uKGIpe3RoaXMuTWQoYil9LmJpbmQodGhpcykpfSxNZDpmdW5jdGlvbihiKXt0aGlzLmdldFJhd1BsYXllcigpO3RoaXMuZ2V0Q3VycmVudFRpbWUoKT5iJiYoYj10aGlzLmdldEN1cnJlbnRUaW1lKCkpO3ZhciBhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiYhdGhpcy5yaCYmKHRoaXMucmg9ITAsdGhpcy5WJiZ0aGlzLlYoKSl9fSl9KShjKTt2YXIgUD1jLmptfHxQOyhmdW5jdGlvbihjKXtjLmltPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LEFhOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZighdGhpcy5wZSlpZih0aGlzLkFifHwodGhpcy5BYj0wKSx0aGlzLkFiKyssMTU8dGhpcy5BYil7aWYod2luZG93LmltYSYmd2luZG93LmltYS5jb21tb24mJndpbmRvdy5pbWEuSW1hU2RrU2V0dGluZ3MmJndpbmRvdy5pbWEuY29tbW9uLmdldFZpZGVvTWV0YWRhdGEmJndpbmRvdy5pbWEuY29tbW9uLnRyaWdnZXJNZWFzdXJhYmxlRXZlbnQpcmV0dXJuIHdpbmRvdy5jYW5SdW5BZHM/CnRoaXMuSXQoKTp0aGlzLnMoITApLCEwO3RoaXMubygibm9mcmFtZXdvcmsiLCJJTUEiKTtiLnZpZGVvTW9kZWwuZ2V0KCJhZFRhZ1VybCIpP3RoaXMucygpOnRoaXMucyghMCl9ZWxzZSBpZihiPWIudmlkZW9Nb2RlbC5nZXQoImFkc0xvYWRlciIpKXt0aGlzLnBlPSEwO3ZhciBhPSJhZEVycm9yIjt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudCYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7Yi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhKTt0aGlzLmRhfHwodGhpcy5vKCJhZGVycm9yIix0aGlzLlQpLHRoaXMucygpKX0uYmluZCh0aGlzKSl9ZWxzZSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuQWEoKX0uYmluZCh0aGlzKSwxMCl9LHZkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF9LApnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYz0hMDtjfHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGM9ITApOyJudW1iZXIiPT10eXBlb2YgYT8oYi5UPWEsYi5vKCJhZGVycm9yIixhKSk6Yi5vKCJhZGVycm9yIil9cmV0dXJuIGN9Yi5vcmlnaW5hbEV2ZW50JiYoYj1iLm9yaWdpbmFsRXZlbnQpO2lmKGIuZ2V0RXJyb3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmdldEVycm9yKXt2YXIgYz1iLmdldEVycm9yKCk7aWYoYy5nZXRFcnJvckNvZGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLmdldEVycm9yQ29kZSYmYShjLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7cmV0dXJufX1mb3IodmFyIGQgaW4gYilpZihiLmhhc093blByb3BlcnR5KGQpJiZiW2RdJiZiW2RdLmFkRXJyb3ImJmJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJgoiZnVuY3Rpb24iPT10eXBlb2YgYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmYShiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTticmVha319LGc6ZnVuY3Rpb24oKXt0aGlzLlQ9dGhpcy5UfHwhMTt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO3RoaXMuQWEoKTtiLnZpZGVvTW9kZWwub2JzZXJ2ZSgicGxheVN0YXRlIixmdW5jdGlvbihhKXsicGxheWluZyI9PWEmJih0aGlzLmlzUGxheWluZz0hMCl9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJwbGF5TW9kZSIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJjdXJyZW50QWRTZWdtZW50IixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7Yi52aWRlb01vZGVsLm9ic2VydmUoImlzQWRzUGxheWluZyIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9yIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7CmIudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9ycyIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9yc1giLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKTtiLnZpZGVvTW9kZWwub2JzZXJ2ZSgiTk9OX0VWRU5UIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSl9LHM6ZnVuY3Rpb24oYil7dGhpcy5pc1BsYXlpbmc/dGhpcy5JKGIpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwKX19KX0pKGMpO3ZhciBRPWMuaW18fFE7KGZ1bmN0aW9uKGMpe2Mua209cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpO3RoaXMuVWE9LTF9LGc6ZnVuY3Rpb24oKXtpZih3aW5kb3cuaW5zZXJ0ZWRQbGF5ZXIpe3ZhciBiPW5ldyBQKHdpbmRvdy5pbnNlcnRlZFBsYXllcik7Yi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKX1pZih3aW5kb3cuVFYyUGxheWVycyYmCndpbmRvdy5UVjJQbGF5ZXJzLmxlbmd0aClmb3IodmFyIGE9MDthPHdpbmRvdy5UVjJQbGF5ZXJzLmxlbmd0aDthKyspYj1uZXcgUCh3aW5kb3cuVFYyUGxheWVyc1thXSksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKTtlbHNlIGlmKHdpbmRvdy5UVjJQbGF5ZXJzKWZvcihhIGluIHdpbmRvdy5UVjJQbGF5ZXJzKXdpbmRvdy5UVjJQbGF5ZXJzLmhhc093blByb3BlcnR5KGEpJiZ3aW5kb3cuVFYyUGxheWVyc1thXS52aWRlb01vZGVsJiYoYj1uZXcgUCh3aW5kb3cuVFYyUGxheWVyc1thXSksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKSk7dGhpcy5hZigpO3RoaXMuUigpfX0pfSkoYyk7dmFyIFJiPWMua218fFJiLFNiPW5ldyBSYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy56bD0KdGhpcy5hWzFdO3RoaXMuVHE9dGhpcy5hWzRdO3RoaXMuS3M9dGhpcy5hWzFdO3RoaXMuTHA9dGhpcy5hWzddO3RoaXMuaj10aGlzLmFbNl19Yy5MbT1iO2IucHJvdG90eXBlPXt5bDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuemw6dGhpcy5TcShhKX0sU3E6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlRxOnRoaXMuSnMoYSl9LEpzOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Lczp0aGlzLktwKGEpfSxLcDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuTHA6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBUYj1jLkxtfHxUYixNYz1uZXcgVGIoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1NYy55bCg0KTsoZnVuY3Rpb24oYyl7Yy50az11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXJDb250YWluZXI7dGhpcy5ZKGIpO3ZhciBhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07YXx8KGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO3RoaXMuWihhKTthJiZ0aGlzLlkoYS5wYXJlbnROb2RlKX0sTzpmdW5jdGlvbigpe3JldHVybiJsYW9sYTEifSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5hcGkucGxheSgpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkuYXBpLnBhdXNlKCl9fSl9KShjKTt2YXIgYWE9Yy50a3x8YWE7KGZ1bmN0aW9uKGMpe2Muc2s9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMuT2c9MDt0aGlzLlQ9dGhpcy5UfHwhMTt0aGlzLmdldFBsYXllcigpO3RoaXMuZGE9dGhpcy5CYz10aGlzLkFhPXRoaXMuWWM9ITE7dGhpcy52aD1lLkViKDEwKTsKdGhpcy5YZygpfSxYZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7aWYoYi5zdWJQbGF5ZXImJmIuc3ViUGxheWVyLmFkc0ludGVyZmFjZSYmYi5zdWJQbGF5ZXIuYWRzSW50ZXJmYWNlLmFkc0xvYWRlcilyZXR1cm4gdGhpcy5uYT1iLnN1YlBsYXllci5hZHNJbnRlcmZhY2UuYWRzTG9hZGVyLHRoaXMub2IoKSwhMDt0aGlzLk9nKys7aWYoMTA8dGhpcy5PZyl0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIiksd2luZG93LmltYSYmd2luZG93LmltYS5jb21tb24mJndpbmRvdy5pbWEuSW1hU2RrU2V0dGluZ3M/dGhpcy5zKCEwKTp0aGlzLnMoKTtlbHNlIHJldHVybiB3aW5kb3cuc2V0VGltZW91dCh0aGlzLlhnLmJpbmQodGhpcyksMTAwKSwhMX0sb2I6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm5hO2lmKGIpe3ZhciBhPSJhZEVycm9yIixjPSJsb2ciO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiYKZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYoYz1nb29nbGUuaW1hLkFkRXZlbnQuVHlwZS5MT0cpOyJmdW5jdGlvbiIhPT10eXBlb2YgYi5hZGRFdmVudExpc3RlbmVyP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKTooYi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKGMsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCk7dGhpcy5mYSghMCl9LmJpbmQodGhpcykpKX1lbHNlIHRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLm9iKCl9LmJpbmQodGhpcyksCjIwKX0sZ2E6ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYShhLGIpe3ZhciBjPSExO2lmKGEpe2lmKDEwMDk9PWF8fDMwMz09YXx8NDAzPT1hKWM9ITA7Y3x8IWEuaW5kZXhPZnx8LTE9PT1hLmluZGV4T2YoIjEwMDkiKSYmLTE9PT1hLmluZGV4T2YoIjMwMyIpJiYtMT09PWEuaW5kZXhPZigiNDAzIil8fChjPSEwKTsibnVtYmVyIj09dHlwZW9mIGEmJihiLlQ9YSxiLm8oImFkZXJyb3IiLGEpKX1yZXR1cm4gY31iLm9yaWdpbmFsRXZlbnQmJihiPWIub3JpZ2luYWxFdmVudCk7aWYoYi5nZXRFcnJvciYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0RXJyb3Ipe3ZhciBjPWIuZ2V0RXJyb3IoKTtpZihjLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuZ2V0RXJyb3JDb2RlJiZhKGMuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTtyZXR1cm59fWZvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkmJmJbZF0mJmJbZF0uYWRFcnJvciYmYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmCiJmdW5jdGlvbiI9PXR5cGVvZiBiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlJiZhKGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO2JyZWFrfX0sdmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYX0sRGE6ZnVuY3Rpb24oKXt0aGlzLmRhPSEwfSxmYTpmdW5jdGlvbihiKXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZGE/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwMCl9LHM6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTthLmFwaS5wbGF5ZWQmJmEuYXBpLnBsYXllZCgpP3RoaXMuSShiKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMucyhiKX0uYmluZCh0aGlzKSwxMCl9fSl9KShjKTt2YXIgYmE9Yy5za3x8YmE7KGZ1bmN0aW9uKGMpe2MudWs9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9ITE7CmlmKHdpbmRvdy5sMVBsYXllckluc3RhbmNlJiZ3aW5kb3cubDFQbGF5ZXJJbnN0YW5jZS5sZW5ndGgmJjA8d2luZG93LmwxUGxheWVySW5zdGFuY2UubGVuZ3RoKWZvcih2YXIgYT0wO2E8d2luZG93LmwxUGxheWVySW5zdGFuY2UubGVuZ3RoO2ErKyliPW5ldyBhYSh3aW5kb3cubDFQbGF5ZXJJbnN0YW5jZVswXSksdGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IGJhKGIsdGhpcy5LKSxiLmcoKSk7ZWxzZSB3aW5kb3cucGxheWVyJiZ3aW5kb3cucGxheWVyLmFwaSYmd2luZG93LnBsYXllci5sMVBsYXllciYmKGI9bmV3IGFhKHdpbmRvdy5wbGF5ZXIpLHRoaXMuTihiKXx8KHRoaXMuUChiKSxiPW5ldyBiYShiLHRoaXMuSyksYi5nKCkpKTt0aGlzLlIoKX19KX0pKGMpO3ZhciBVYj1jLnVrfHxVYixWYj1uZXcgVWIocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTnU9dGhpcy5hWzJdOwp0aGlzLmtzPXRoaXMuYVs5XTt0aGlzLmJwPXRoaXMuYVsxXTt0aGlzLnd2PXRoaXMuYVsxMF07dGhpcy5Kaz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbM119Yy5Hbj1iO2IucHJvdG90eXBlPXtNdTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuTnU6dGhpcy5qcyhhKX0sanM6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5rczp0aGlzLmFwKGEpfSxhcDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuYnA6dGhpcy52dihhKX0sdnY6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnd2OnRoaXMuSWsoYSl9LElrOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5Kazp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLmo6YX19fSkoYyk7dmFyIFdiPWMuR258fFdiLE5jPW5ldyBXYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPQpOYy5NdSg0KTsoZnVuY3Rpb24oYyl7Yy5Xaj11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPSExO3RyeXtiPXRoaXMuZ2V0UmF3UGxheWVyKClbMF0ucGFyZW50Tm9kZSxhPXRoaXMuZ2V0UmF3UGxheWVyKClbMF19Y2F0Y2goYyl7fWImJmE/KHRoaXMuWShiKSx0aGlzLlooYSksdGhpcy5nZXRSYXdQbGF5ZXIoKSk6dGhpcy5wYSgpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkuY3NzKCJkaXNwbGF5Iiwibm9uZSIpfSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5jc3MoImRpc3BsYXkiLCJibG9jayIpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkdBTlZpZGVvIn19KX0pKGMpO3ZhciBYYj1jLldqfHxYYjsoZnVuY3Rpb24oYyl7Yy5Waj12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dGhpcy5mZygpfSxmZzpmdW5jdGlvbihiKXt3aW5kb3cuR0FOX1ZpZGVvfHwKKGI/KHRoaXMubygibm9mcmFtZXdvcmsiLCJJTUEiKSx0aGlzLkkoKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmZnKCEwKX0uYmluZCh0aGlzKSwxMDApKX19KX0pKGMpO3ZhciBZYj1jLlZqfHxZYjsoZnVuY3Rpb24oYyl7Yy5Yaj1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2FtZSIpO2lmKGImJiJESVYiPT1iLm5vZGVOYW1lJiZ3aW5kb3cudmlkZW9hZF9nYW5fc3RhcnQmJndpbmRvdy4kJiZ3aW5kb3cuJCgiZGl2I2dhbWUiKSl7Yj1uZXcgWGIod2luZG93LiQoImRpdiNnYW1lIikpO2lmKGIucWEpe3RoaXMuUigpO3JldHVybn1pZighdGhpcy5OKGIpKXt0aGlzLlAoYik7KG5ldyBZYihiLHRoaXMuSykpLmcoKTt0aGlzLlIoKTtyZXR1cm59fXRoaXMuUigpfX0pfSkoYyk7dmFyIFpiPWMuWGp8fFpiLCRiPW5ldyBaYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPQpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMueGo9dGhpcy5hWzldO3RoaXMuYW89dGhpcy5hWzNdO3RoaXMuR3Y9dGhpcy5hWzVdO3RoaXMuaj10aGlzLmFbNV19Yy5NcT1iO2IucHJvdG90eXBlPXt3ajpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMueGo6dGhpcy4kbihhKX0sJG46ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmFvOnRoaXMuRnYoYSl9LEZ2OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuR3Y6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBhYz1jLk1xfHxhYyxPYz1uZXcgYWMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1PYy53aig0KTsoZnVuY3Rpb24oYyl7Yy5raT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0KdGhpcy5nZXRSYXdQbGF5ZXIoKS5nZXRXcmFwcGVyKCk7Yj8odGhpcy5ZKGIpLChiPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pP3RoaXMuWihiKTp0aGlzLnBhKCkpOnRoaXMucGEoKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlVmlkZW8oKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheVZpZGVvKCl9LE86ZnVuY3Rpb24oKXtyZXR1cm4iQVYifX0pfSkoYyk7dmFyIGJjPWMua2l8fGJjOyhmdW5jdGlvbihjKXtjLmppPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2Iub24oImFkRXJyb3IiLGZ1bmN0aW9uKCl7d2luZG93LnNldFRpbWVvdXQodGhpcy5zLmJpbmQodGhpcyksMTAwKX0uYmluZCh0aGlzKSk7Yi5vbigiYWRGcmFtZXdvcmtOb3RBdmFpbGFibGUiLGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcykpOwp0aGlzLmhlKCk7dGhpcy5iZygpfSxnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYz0hMDtjfHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGM9ITApOyJudW1iZXIiPT10eXBlb2YgYSYmKGIuVD1hLGIubygiYWRlcnJvciIsYSkpfXJldHVybiBjfWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTtpZihiLmdldEVycm9yJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5nZXRFcnJvcil7dmFyIGM9Yi5nZXRFcnJvcigpO2lmKGMuZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5nZXRFcnJvckNvZGUmJmEoYy5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO3JldHVybn19Zm9yKHZhciBkIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSYmYltkXSYmYltkXS5hZEVycm9yJiYKYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJmEoYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7YnJlYWt9fSx2ZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhfSxEYTpmdW5jdGlvbigpe3RoaXMuZGE9ITA7dGhpcy53KCJlbXB0eSB2YXN0Iil9LGJnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZihiLmdldFNlbGVjdGVkQWRIYW5kbGVyKWlmKChiPWIuZ2V0U2VsZWN0ZWRBZEhhbmRsZXIoKSkmJmIuYWRzTG9hZGVyKWZvcih2YXIgYT0wO2E8Yi5hZHNMb2FkZXIubGVuZ3RoO2ErKyl7dmFyIGM9ImFkRXJyb3IiO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SJiYKKGM9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7Yi5hZHNMb2FkZXJbYV0uYWRkRXZlbnRMaXN0ZW5lcihjLGZ1bmN0aW9uKGEpe2EuZ2V0RXJyb3ImJihhPWEuZ2V0RXJyb3IoKSk7dmFyIGI9ITE7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYj0hMDtpZighYilmb3IodmFyIGMgaW4gYSl7aWYoYVtjXSYmYVtjXS5pbmRleE9mJiYoLTEhPWFbY10uaW5kZXhPZigiMTAwOSIpfHwtMSE9YVtjXS5pbmRleE9mKCIzMDMiKXx8LTEhPWFbY10uaW5kZXhPZigiNDAzIikpKXtiPSEwO2JyZWFrfWlmKGFbY10mJigxMDA5PT1hW2NdfHwzMDM9PWFbY118fDQwMz09YVtjXSkpe2I9ITA7YnJlYWt9fWI/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKCl9LmJpbmQodGhpcykpfWVsc2Ugd2luZG93LnNldFRpbWVvdXQodGhpcy5iZy5iaW5kKHRoaXMpLDUwKTtlbHNlIHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuaGUuYmluZCh0aGlzKSwxMDApfSxoZTpmdW5jdGlvbigpe2lmKCF0aGlzLnVhKCkpe3ZhciBiPQp0aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyJwbGF5aW5nIj09Yi5nZXRQbGF5U3RhdGUoKT9iLmdldEFkSW5mbygpPyh3aW5kb3cuc2V0VGltZW91dCh0aGlzLnJhLmJpbmQodGhpcyksMTApLHRoaXMudygpKTpiLl9wbGF5ZXJPcHRpb25zJiZiLl9wbGF5ZXJPcHRpb25zLnBsYXlBZHZlcnRpc2VtZW50c3x8Yi5fYWRSZWdpc3RlcmVkP3RoaXMucygpOnRoaXMucyghMCk6d2luZG93LnNldFRpbWVvdXQodGhpcy5oZS5iaW5kKHRoaXMpLDEwMCl9fSxzOmZ1bmN0aW9uKGIpe3dpbmRvdy5zZXRUaW1lb3V0KHRoaXMucmEuYmluZCh0aGlzKSwxRTQpO3RoaXMuSShiKX19KX0pKGMpO3ZhciBjYz1jLmppfHxjYzsoZnVuY3Rpb24oYyl7Yy5saT1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFhhOmZ1bmN0aW9uKGIpe2I9bmV3IGJjKGIpO2IucWE/dGhpcy5SKCk6dGhpcy5OKGIpfHwodGhpcy5QKGIpLChuZXcgY2MoYix0aGlzLkspKS5nKCkpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93LnNyYXZ2cGxQbGF5ZXJJbnN0YW5jZXMpZm9yKHZhciBiPQowO2I8d2luZG93LnNyYXZ2cGxQbGF5ZXJJbnN0YW5jZXMubGVuZ3RoO2IrKyl0aGlzLlhhKHdpbmRvdy5zcmF2dnBsUGxheWVySW5zdGFuY2VzW2JdKTtlbHNlIHdpbmRvdy5zZXR1cFBsYXllckVsZW1lbnQ/dGhpcy5YYSh3aW5kb3cuc2V0dXBQbGF5ZXJFbGVtZW50KTp0aGlzLlIoKX19KX0pKGMpO3ZhciBkYz1jLmxpfHxkYyxlYz1uZXcgZGMocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuSW49dGhpcy5hWzNdO3RoaXMuU2o9dGhpcy5hWzJdO3RoaXMuVm49dGhpcy5hWzldO3RoaXMud2k9dGhpcy5hWzRdO3RoaXMuUmk9dGhpcy5hWzNdO3RoaXMubW09dGhpcy5hWzZdO3RoaXMuJGw9dGhpcy5hWzFdO3RoaXMua289dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbM119Yy5ncz1iO2IucHJvdG90eXBlPXtIbjpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuSW46dGhpcy5SaihhKX0sClJqOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuU2o6dGhpcy5VbihhKX0sVW46ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlZuOnRoaXMudmkoYSl9LHZpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy53aTp0aGlzLlFpKGEpfSxRaTpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMuUmk6dGhpcy5sbShhKX0sbG06ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLm1tOnRoaXMuWmwoYSl9LFpsOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy4kbDp0aGlzLmpvKGEpfSxqbzpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMua286dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBmYz1jLmdzfHxmYyxQYz1uZXcgZmMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1QYy5Ibig0KTtjPWN8fHt9OwooZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuWmc9dGhpcy5haD10aGlzLiRnPSExO3RoaXMuQWQ9W107dGhpcy4kZT17R0FOVmlkZW86InVuZGVmaW5lZCI9PT10eXBlb2YgJGI/bnVsbDokYixsYW9sYTFQbGF5ZXI6InVuZGVmaW5lZCI9PT10eXBlb2YgVmI/bnVsbDpWYixWaWRlb0pTOiJ1bmRlZmluZWQiPT09dHlwZW9mIEJhP251bGw6QmEsYml0bW92aW46InVuZGVmaW5lZCI9PT10eXBlb2YgVT9udWxsOlUsb3ZWaWRlbzoidW5kZWZpbmVkIj09PXR5cGVvZiBHYT9udWxsOkdhLFJhZGlhbnRNUDoidW5kZWZpbmVkIj09PXR5cGVvZiBIYj9udWxsOkhiLGp3OiJ1bmRlZmluZWQiPT09dHlwZW9mIHdhP251bGw6d2EsdHYyOiJ1bmRlZmluZWQiPT09dHlwZW9mIFNiP251bGw6U2IsdGZtc3VpdGVQbGF5ZXI6InVuZGVmaW5lZCI9PT10eXBlb2YgeD9udWxsOngsbmV4dFBsYXllcjoidW5kZWZpbmVkIj09PXR5cGVvZiBLYj9udWxsOktiLHh5bWF0aWNQbGF5ZXI6InVuZGVmaW5lZCI9PT0KdHlwZW9mIFBiP251bGw6UGIsYmlsZE1lZGlhUGxheWVyOiJ1bmRlZmluZWQiPT09dHlwZW9mIG9iP251bGw6b2IsT295YWxhOiJ1bmRlZmluZWQiPT09dHlwZW9mIGRiP251bGw6ZGIsUm9ja2VyeToidW5kZWZpbmVkIj09PXR5cGVvZiBDYj9udWxsOkNiLGluUmVhZDoidW5kZWZpbmVkIj09PXR5cGVvZiBMYT9udWxsOkxhLHdmdjQ6InVuZGVmaW5lZCI9PT10eXBlb2YgeGI/bnVsbDp4YixBVlBsYXllckRldGVjdGlvbjoidW5kZWZpbmVkIj09PXR5cGVvZiBlYz9udWxsOmVjLE9ubHlIT01BRDoidW5kZWZpbmVkIj09PXR5cGVvZiBYP251bGw6WH19Yy50bD1iO2IucHJvdG90eXBlPXtnOmZ1bmN0aW9uKCl7dmFyIGE9W10sYT1hLmxlbmd0aD90aGlzLm9xKGEpOltdLGI7dGhpcy5haD0hMDtpZihhLmxlbmd0aCl7dGhpcy4kZz0hMDtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyliPWFbY10sdGhpcy5BaChiKX1lbHNlIGZvcihjIGluIHRoaXMuJGUpe2lmKHRoaXMuWmcpYnJlYWs7CmI9dGhpcy4kZVtjXTt0aGlzLnZmKGIpJiYodGhpcy5BZC5wdXNoKGIpLHRoaXMuQWgoYikpfX0sdmY6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEgaW5zdGFuY2VvZiBxPyEwOiExfSxvcTpmdW5jdGlvbihhKXt2YXIgYj1bXSxjO2lmKCFhfHwhYS5sZW5ndGgpcmV0dXJuIGI7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspYz1hW2VdLGM9dGhpcy4kZVtjXSx0aGlzLnZmKGMpJiZiLnB1c2goYyk7cmV0dXJuIGJ9LEFoOmZ1bmN0aW9uKGEpe3RoaXMudmYoYSkmJmEuZygpfSxhdTpmdW5jdGlvbihhKXtpZihhJiZhIGluc3RhbmNlb2YgdSYmIXRoaXMuJGcpZm9yKHRoaXMuWmc9ITAsYT0wO2E8dGhpcy5BZC5sZW5ndGg7YSsrKXRoaXMuQWRbYV0uSGImJndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5BZFthXS5IYil9fX0pKGMpO3ZhciBnYz1jLnRsfHxnYyxOPW5ldyBnYztOLmcoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CnRoaXMueHU9dGhpcy5hWzZdO3RoaXMuS2o9dGhpcy5hWzZdO3RoaXMuWm09dGhpcy5hWzFdO3RoaXMuR2k9dGhpcy5hWzEwXTt0aGlzLkd1PXRoaXMuYVsyXTt0aGlzLllyPXRoaXMuYVs1XTt0aGlzLlJxPXRoaXMuYVsxMF07dGhpcy5qPXRoaXMuYVsyXX1jLlp1PWI7Yi5wcm90b3R5cGU9e3d1OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMueHU6dGhpcy5KaihhKX0sSmo6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLktqOnRoaXMuWW0oYSl9LFltOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5abTp0aGlzLkZpKGEpfSxGaTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuR2k6dGhpcy5GdShhKX0sRnU6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLkd1OnRoaXMuWHIoYSl9LFhyOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuWXI6dGhpcy5RcShhKX0sUXE6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlJxOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMjwKYT90aGlzLmo6YX19fSkoYyk7dmFyIGhjPWMuWnV8fGhjLFFjPW5ldyBoYygxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPVFjLnd1KDQpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oYyl7aWYoYy5lcnJvciBpbnN0YW5jZW9mIFJlZmVyZW5jZUVycm9yKXt2YXIgYj1jLmZpbGVuYW1lP2MuZmlsZW5hbWU6IiI7aWYoLTEhPWIuaW5kZXhPZigiaG9tYWQiKXx8LTEhPWIuaW5kZXhPZigiaGQtbWFpbiIpKWI9Yy5tZXNzYWdlP2MubWVzc2FnZToiIixjPWMuZXJyb3Iuc3RhY2s/Yy5lcnJvci5zdGFjazoiIiwtMSE9Yi5pbmRleE9mKCJpcyBub3QgZGVmaW5lZCIpPyhjPWIuc3Vic3RyaW5nKGIuaW5kZXhPZigiOiIpKzEsYi5pbmRleE9mKCJpcyBub3QiKS0xKSxlLndjKGsuUnUpLGUudHJhY2soInN0YXRzX2hkX3ZhcmRlbGV0ZWQiLGMsCiEwKSk6LTEhPWMuaW5kZXhPZigic2V0QCIpJiYoZS53YyhrLmVzKSxlLnRyYWNrKCJzdGF0c19oZF92YXJub3RzZXQiLCIiLCEwKSl9fSk7dmFyIEU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7RS53aWR0aD0xO0UuaGVpZ2h0PTE7RS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJwbXRtdnMiKTtFLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoRSk7dmFyIFJjPUUuY29udGVudFdpbmRvdy5zZXRJbnRlcnZhbC5iaW5kKHdpbmRvdyksa2M9RS5jb250ZW50V2luZG93LnNldFRpbWVvdXQuYmluZCh3aW5kb3cpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoRSk7dmFyIEk9bmV3IEosbT0hMTtJLmlhKCk7SS5UZygpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKEkuaWEoKSxmdW5jdGlvbihjKXttfHwobT1jLmRldGFpbCl9LCExKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihJLlRnKCksZnVuY3Rpb24oYyl7bXx8KG09Yy5kZXRhaWwpfSwhMSk7CkkuaWEoKTt2YXIgU2M9UmMoZnVuY3Rpb24oKXtlLnZnKHdpbmRvdyxJLmZyKCkse2lkOlNjfSl9LDUwMCksamE9ZS5iYSgxMCk7ZmEoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy50aj10aGlzLmFbNF07dGhpcy56dj10aGlzLmFbMl07dGhpcy5waj10aGlzLmFbOF07dGhpcy5DcD10aGlzLmFbOF07dGhpcy5aaz10aGlzLmFbNl07dGhpcy5QbD10aGlzLmFbM107dGhpcy5Iaj10aGlzLmFbN107dGhpcy5saz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbM119Yy5ydj1iO2IucHJvdG90eXBlPXtzajpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMudGo6dGhpcy55dihhKX0seXY6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLnp2OnRoaXMub2ooYSl9LG9qOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5wajp0aGlzLkJwKGEpfSxCcDpmdW5jdGlvbihhKXtyZXR1cm4gMjwKYT90aGlzLkNwOnRoaXMuWWsoYSl9LFlrOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5aazp0aGlzLk9sKGEpfSxPbDpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuUGw6dGhpcy5HaihhKX0sR2o6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5Iajp0aGlzLmtrKGEpfSxrazpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMubGs6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBpYz1jLnJ2fHxpYyxUYz1uZXcgaWMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1UYy5zaig0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuc2g9dGhpcy5jb25mPXRoaXMuamI9dGhpcy5wbGF5ZXI9bnVsbDt0aGlzLndkPTA7dGhpcy5aYT0iIjt0aGlzLkJkPVtdO3RoaXMuQ2Q9MDt0aGlzLnVoPSExO3RoaXMuWGU9CltdO2UubGIoIm5ld0FkZGVsaXZlcnkiKX1jLm1pPWI7Yi5wcm90b3R5cGU9e0d0OmZ1bmN0aW9uKGEpe3RoaXMuc2g9YX0sZmY6ZnVuY3Rpb24oYSl7dGhpcy5wbGF5ZXI9YTt0aGlzLlphPXRoaXMucGxheWVyLk8oKX0sZ2V0UGxheWVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGxheWVyfSxCdDpmdW5jdGlvbihhKXt0aGlzLmpiPWF9LEF0OmZ1bmN0aW9uKGEpe3RoaXMuY29uZj1hfSxIYTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNvbmZbYV07dGhpcy5jb25mW3RoaXMuWmFdJiZ0aGlzLmNvbmZbdGhpcy5aYV1bYV0mJihiPXRoaXMuY29uZlt0aGlzLlphXVthXSk7cmV0dXJuIGJ9LEljOmZ1bmN0aW9uKGEsYil7ZS5CYSgid2VsdC5kZSIpJiZlLllhKCJodHRwczovL2Fzdi5udWdnYWQubmV0L2JrP251Z2duPTE1Njk5MDUxMDImbnVnZ3NpZD0xOTgyMjE3NTUwJm51Z2dyaWQ9IitlbmNvZGVVUklDb21wb25lbnQobG9jYXRpb24uaHJlZikrIiZudWdnbD1odHRwcyUzQSUyRiUyRnd3MjUxLnNtYXJ0YWRzZXJ2ZXIuY29tJTJGdHJhY2slMkZjb21wLmFzcCUzRmtleXdvcmQlM0ROVUdHVkFSUyUyNnNpdGUlM0Q4NTE0NSIsCiJuZXRudWdnYWRhc3YiLHt9LGZ1bmN0aW9uKCl7fSxmdW5jdGlvbigpe30sdGhpcy5qYik7dmFyIGM9ITEsZj0hMTtpZih0aGlzLmdyKCkpdGhpcy5qYi5sKHRoaXMuamIucmQsdGhpcy5qYi5GYSx0aGlzLmpiLlplLGZ1bmN0aW9uKCl7dGhpcy5JYyhhLGIpfS5iaW5kKHRoaXMpLHRoaXMuamIuc2MpO2Vsc2UgaWYodGhpcy5FcSgpKXRoaXMud3QoZnVuY3Rpb24oKXt0aGlzLkljKGEsYil9LmJpbmQodGhpcykpO2Vsc2V7dGhpcy5wbGF5ZXIucGF1c2UoKTtlLnYoay5mZCx0aGlzLnBsYXllci51KCkpO3ZhciBnPXRoaXMuY29uZixsPW5ldyBZYSh0aGlzLmdldFBsYXllcigpLGcpO2ImJmwuY3UoKTtsLmV4aXRGdWxsc2NyZWVuKCk7ZS5sYigibmV3SG9tYWREaXNwbGF5Iik7Uz1sPW5ldyBRYShsLHRoaXMuamIsZyk7bC56dCh0aGlzLmNvbmYpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYSl7dmFyIG09ITE7dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyJiYobT10aGlzLnBsYXllci5nZXRSYXdQbGF5ZXIoKSk7CmE9YShtKX0oYT10aGlzLlJyKGEpKXx8ZS50cmFjaygic3RhdHNfaGRfbm9BZFRhZyIsInNob3ciLCEwKTsiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5wbGF5ZXIuR2UmJihjPXRoaXMucGxheWVyLkdlKCkpO2cuYWRTdGFydFRpbWVvdXQmJihmPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7fSxnLmFkU3RhcnRUaW1lb3V0fHw1RTQpKTtsLkllKGEsYyxmKTt0aGlzLnBsYXllci5DaChsKX19LGdyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IERhdGUsYj0wO2lmKHRoaXMud2QpcmV0dXJuIGI9YS5nZXRUaW1lKCktdGhpcy53ZC5nZXRUaW1lKCksdGhpcy53ZD1hLDNFNTxiPyEwOiExO3RoaXMud2Q9YTtyZXR1cm4hMX0sVnQ6ZnVuY3Rpb24oKXtlLmxiKCJwcmVyb2xsIik7ZS5lZigicHJlcm9sbCIpO3ZhciBhPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgicHJlcm9sbEFkVGFnIikmJihhPXRoaXMuSGEoInByZXJvbGxBZFRhZyIpKTsoYT10aGlzLnJnKGEpKT90aGlzLkljKGEpOihlLnRyYWNrKCJzdGF0c19oZF9ub0FkVGFnIiwKInByZSIsITApLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXIucGxheSgpfS5iaW5kKHRoaXMpLDApLGUudihrLmdkLHRoaXMucGxheWVyLnUoKSkpfSxVdDpmdW5jdGlvbihhKXtpZighdGhpcy5zaCl7ZS5lZigicG9zdHJvbGwiKTtlLmxiKCJwb3N0cm9sbCIpO3RoaXMuR3QoITApO3ZhciBiPXRoaXMuY29uZixjPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgicG9zdHJvbGxBZFRhZyIpJiYoYz10aGlzLkhhKCJwb3N0cm9sbEFkVGFnIikpOyhjPXRoaXMucmcoYykpP3RoaXMuSWMoYyxiLnBvc3Ryb2xsVXNlQ29tcGxldGVFdmVudD8hMDphKTooZS50cmFjaygic3RhdHNfaGRfbm9BZFRhZyIsInBvc3QiLCEwKSx0aGlzLnBsYXllci5wbGF5KCksZS52KGsuZ2QsdGhpcy5wbGF5ZXIudSgpKSl9fSxyZzpmdW5jdGlvbihhKXtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGEpe3ZhciBiPSExO3RoaXMucGxheWVyLmdldFJhd1BsYXllciYmKGI9dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyKCkpOwphPWEoYil9cmV0dXJuIGF9LGx0OmZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXIuS3QodGhpcy5VdC5iaW5kKHRoaXMpKTt0aGlzLnBsYXllci5OYSgpfSxIZDpmdW5jdGlvbihhKXtlLmxiKCJtaWRyb2xsIik7ZS5lZigibWlkcm9sbCIpO2lmKCF0aGlzLmhoKXt0aGlzLmhoPSEwO3ZhciBiPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgibWlkcm9sbEFkVGFnIikmJihiPXRoaXMuSGEoIm1pZHJvbGxBZFRhZyIpKTtiPyh0aGlzLkljKGIsYSksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmhoPSExfS5iaW5kKHRoaXMpLDFFMykpOihlLnRyYWNrKCJzdGF0c19oZF9ub0FkVGFnIiwibWlkIiwhMCksdGhpcy5wbGF5ZXIucGxheSgpLGUudihrLmdkLHRoaXMucGxheWVyLnUoKSkpfX0sa3Q6ZnVuY3Rpb24oKXt0aGlzLnBsYXllci5GdCh0aGlzLkhkLmJpbmQodGhpcykpO3RoaXMucGxheWVyLkxlKCl9LGc6ZnVuY3Rpb24oKXt0aGlzLlZ0KCk7dGhpcy5wbGF5ZXIuTGUmJnRoaXMua3QoKTsKdGhpcy5sdCgpfSxtdDpmdW5jdGlvbigpe3ZhciBhPVtdO2lmKHRoaXMuY29uZi55aWVsZGxhYil7dGhpcy5jb25mLnlpZWxkbGFiWzBdP2E9dGhpcy5jb25mLnlpZWxkbGFiOmFbMF09dGhpcy5jb25mLnlpZWxkbGFiO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKShmdW5jdGlvbihhLGIsYyxnKXt0aGlzLkJkLnB1c2goeyJmdW5jdGlvbiI6ZnVuY3Rpb24oZSl7dGhpcy5FdihhLGIsYyxnLGUpfS5iaW5kKGUpfSl9KS5jYWxsKHRoaXMsYVtiXS51cmwsYVtiXS5wbGFjZWhvbGRlcixhW2JdLmFsaWFzLGFbYl0ubWFjcm8pfXRoaXMuQ2Q9dGhpcy5CZC5sZW5ndGh9LEVxOmZ1bmN0aW9uKCl7dmFyIGE9ITE7MDx0aGlzLkNkJiYoYT0hMCk7cmV0dXJuIGF9LHd0OmZ1bmN0aW9uKGEpe3RoaXMudWg9YTtmb3IoYT0wO2E8dGhpcy5CZC5sZW5ndGg7YSsrKXRoaXMuQmRbYV1bImZ1bmN0aW9uIl0odGhpcy5acy5iaW5kKHRoaXMpKX0sWnM6ZnVuY3Rpb24oYSl7dGhpcy5DZC0tO2EmJnRoaXMuWGUucHVzaChhKTsKMD49dGhpcy5DZCYmdGhpcy51aCgpfSxScjpmdW5jdGlvbihhKXtmb3IodmFyIGI9IiIsYz0wO2M8dGhpcy5YZS5sZW5ndGg7YysrKWI9dGhpcy5YZVtjXSxhPWEucmVwbGFjZShiLm1hY3JvLGIucGxhY2Vob2xkZXIpO3JldHVybiBhfX19KShjKTt2YXIgZ2E9Yy5taXx8Z2EsUz0hMSxuYT0hMTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy55az10aGlzLmFbN107dGhpcy5TbD10aGlzLmFbNF07dGhpcy5ncD10aGlzLmFbMTBdO3RoaXMuWm49dGhpcy5hWzNdO3RoaXMuTnQ9dGhpcy5hWzFdO3RoaXMuaj10aGlzLmFbN119Yy5OcD1iO2IucHJvdG90eXBlPXt4azpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLnlrOnRoaXMuUmwoYSl9LFJsOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5TbDp0aGlzLmZwKGEpfSxmcDpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuZ3A6CnRoaXMuWW4oYSl9LFluOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5abjp0aGlzLk10KGEpfSxNdDpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTnQ6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuajphfX19KShjKTt2YXIgamM9Yy5OcHx8amMsVWM9bmV3IGpjKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9VWMueGsoNCl9KS5jYWxsKE9oamF1ZGlwQWxpZWNhaUosT2hqYXVkaXBBbGllY2FpSik7Cg==
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
46.4.116.20 , Germany, ASN24940 (HETZNER-AS, DE),
Reverse DNS
static.20.116.4.46.clients.your-server.de
Software
TornadoServer/5.0 /
Resource Hash
9725b267c37b60d3a97a87216aa18ef1d1922138faa4f548e506fccfe5517f61

Request headers

Sec-Fetch-Mode
cors
Referer
https://videos.giga.de/embed/176875?autoplay=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-type
application/x-www-form-urlencoded

Response headers

Date
Fri, 13 Sep 2019 08:37:13 GMT
Server
TornadoServer/5.0
Vary
Accept-Encoding
Access-Control-Allow-Methods
GET, POST, OPTIONS
Content-Type
application/json; charset=UTF-8
Access-Control-Allow-Origin
https://videos.giga.de
Access-Control-Expose-Headers
X-Homad-Instance, X-Homad-Long-Ad-Ignored, X-Homad-Sig, X-Homad-Url, X-Homad-Vpaid-Ignored, X-Homad-Ad-Id
Access-Control-Allow-Credentials
true
Connection
keep-alive
Access-Control-Allow-Headers
X-Homad-Compatible-Vpaid, X-Homad-Post, X-Homad-Url
Content-Length
109
/
ssl.3.damoh.giga.de/ab05a2ea95228cec46cc55f77107820124e8db61/ Frame 4364
42 B
738 B
XHR
General
Full URL
https://ssl.3.damoh.giga.de/ab05a2ea95228cec46cc55f77107820124e8db61/
Requested by
Host: text
URL: data:text/javascript;base64,dmFyIE9oamF1ZGlwQWxpZWNhaUo9T2hqYXVkaXBBbGllY2FpSnx8e307CihmdW5jdGlvbihjKXtmdW5jdGlvbiBjYSgpe3guUmV8fCh4LlJlPTApO3guUmUrKzt3aW5kb3cudmlkZW9wa2dJbnRlcmZhY2UhPXgudmlkZW9wa2dJbnRlcmZhY2UmJih3aW5kb3cudmlkZW9wa2dJbnRlcmZhY2U9eC52aWRlb3BrZ0ludGVyZmFjZSk7MTA+eC5SZSYmd2luZG93LnNldFRpbWVvdXQoY2EsNTAwKX1mdW5jdGlvbiB6KCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIseik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHopO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIseik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIseik7ZGE9ITA7Zm9yKHZhciBjPTA7YzxDLmxlbmd0aDtjKyspQ1tjXS5sb2FkKCk7CmZvcihjPTA7YzxDLmxlbmd0aDtjKyspe3ZhciBiPUNbY10ucGxheSgpO2lmKHZvaWQgMCE9PWIpYi50aGVuKGZ1bmN0aW9uKCl7fSlbImNhdGNoIl0oZnVuY3Rpb24oKXt9KX1LJiYoSygpLEs9ITEpfWZ1bmN0aW9uIGVhKCl7dmFyIGM9d2luZG93Lk9PO2N8fChjPXdpbmRvdy5qT09QbGF5ZXJfMCk7cmV0dXJuIGN9ZnVuY3Rpb24gZmEoKXtpZihtKXttLnBhdXNlQnV0dG9ufHwobS5wYXVzZUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1sZWZ0OiA2cHg7cGFkZGluZy1ib3R0b206IDZweDsiIG9uZXJyb3I9InRoaXMuc3JjPVwnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9wYXVzZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlF6UTVOelUxTjBRMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UXpRNU56VTFOMFUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBETkRrM05UVTNRalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERORGszTlRVM1F6WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BnSG5DckVBQUFGMFNVUkJWSGphN0ptOWlvTkFFTWZqM1JVVzhTTWFQd2hhMjRjSTFsWldlWUxZK1FTV2dwVytnNCtVSm04UnRVMU1pbURsTGJjZ3dTUEhRY0xlempGVHpRNHkrOXZoUHlQTENrbVN6S0RaeCtsMGdnZDlQcC9oUWQ5dU4zalF3ekFnTkF0N213RTBsQWRDWXlOaXBSRWFOWTJWUm1pUTBOdnROZ3hEU1pLcXFqb2NEbU44dFZydGRqdlA4OXEyemZPY0krak5abE9XSmZVSlh4UkYxK3VWTG91aThIMmYrazNUa0NQeE1qM2lPQjU5V1pZSjkzaUFrWmpZdmYvM2xTYXFtRVJvMmtkeExxQW5TWVl2K3lITzQvUjRCTTFYcFJsRDQyLzhGeFhGUmtSTmc5UTB5SkdIallqeXdPbUJqZmlmRzdHdTYvdmw4WGlrYVlreitld2wyNzJUMjlIeldmYjcvWHE5ZGwyMzY3b3N5OGlTeGkrWEN3RU5na0FVUlJKTTA3VHYrK2UzRXh6SHdVWkU2RWVhbnMvbjRLQUYyN1lSbWdtMFpWbndvRTNUaEFkdEdBWTg2T1Z5aWRCTW9IVmRod2V0YVJvODZNVmlBUTlhVlZXRVpnS3RLQW84NkpmY1hGaERmMy9MNGQ4K0JSZ0ErUk5XU3hQaVI0d0FBQUFBU1VWT1JLNUNZSUk9Ii8+Jyk7Cm0ucGxheUJ1dHRvbnx8KG0ucGxheUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1sZWZ0OiA2cHg7cGFkZGluZy1ib3R0b206IDZweDsiIG9uZXJyb3I9InRoaXMuc3JjPVwnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9wbGF5MTgxMDAyLnBuZ1wnIiBzcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRHdBQUFBOENBSUFBQUMxbms0bEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeWhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVOaTFqTURZM0lEYzVMakUxTnpjME55d2dNakF4TlM4d015OHpNQzB5TXpvME1EbzBNaUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01UVWdLRTFoWTJsdWRHOXphQ2tpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2UXpRNU56VTFOemsyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZRelE1TnpVMU4wRTJOVVV3TVRGRk5UazVSamhCTTBNelEwVXhOMFUwUkRnaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcERORGszTlRVM056WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwRE5EazNOVFUzT0RZMVJUQXhNVVUxT1RsR09FRXpRek5EUlRFM1JUUkVPQ0l2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHZWa0dJa0FBQUhaU1VSQlZIamE3Smd4aXNKUUVJWjFYYkJSbXdoaURpQjZnVTB0cEJJRUM0dUFoVTBNQkZ2RlhxMFZQRUNDVm9MYWVnR0xpS1dGSGlDa2pyR3hqTE11aUd6QTNlVWx6L2ZZK2FzUW5QQmwvT2RsWnVLcXFzWjQwN3ZydXZ4Qm4wNG4vcUF2bHd0LzBMN3ZJelFOdmNVNEZOb0RvYkVRTWRNSWpaN0dUSDhxa2N2bFNPTFQ2WFM5WHQvdjkxVHQ0Wk9wV3ExMnU5MzVmSjVLcFh4YUlvV0dUTU9yRjR2RjlYcGRLQlQ0Z0w2WFJDYVRXU3dXalVhREJuUzRidXYxZW9QQjRDdjk3SG82K01SYXJXWVlSajZmNThBZWp3S0xMNWZMY3JrY0VYUWltODJTL0ZNZk53WHZKNVBKU3FVQ0Y3dmRqamw3UFA4MnRkdnR5V1FTK21rWStXZGNsdVhwZEFxR1lib1FneXFWU3NBTkJScWFwd1ZCSVBTMEpFay8vZ3dzRGltSG8zQ3oyZkNSNmJ1YXplWnNOaU8zT08zV1ZMcnB4YTNwbjhMUDU3T3U2K1NISUwxKytuQTRBTEhqT0s4ZkFuNFpicHJtY0Rqa1puSUJTMEFMdFZxdEdCcTNub2VESlRxZHp2RjQ1R2F3aFo1SlVaVFFpU08wUjcvZmh3YVYwV2s4R0c3YnRxWnBZQXh1VmdpV1piVmFMU2crcHZjZWorR2owV2c4SHROWTFvVHlGTS96VkZYZGJyZVVsaldFUXlnTTRkREJBWEdrSnY2bXVDaUt1TXREYUZ6MUlqUkNZeUZpcGhFYW9iRVFFZm9mUVY4RkdBQkdFSjRVNUZJZnp3QUFBQUJKUlU1RXJrSmdnZz09Ii8+Jyk7Cm0ubXV0ZUJ1dHRvbnx8KG0ubXV0ZUJ1dHRvbj0nPGltZyBzdHlsZT0ibWF4LXdpZHRoOiAyNXB4O21heC1oZWlnaHQ6IDI1cHg7cGFkZGluZy1yaWdodDogNnB4O3BhZGRpbmctYm90dG9tOiA2cHg7IiBvbmVycm9yPSJ0aGlzLnNyYz1cJ2h0dHBzOi8vaG1kYXNzdHMuc2NobmVldm9ubW9yZ2VuLmNvbS9pbWcvbXV0ZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlEwWkNNRGMwUWpBMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UTBaQ01EYzBRakUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBETkRrM05UVTNSalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERORGszTlRVNE1EWTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1ByV2YzOGNBQUFKVVNVUkJWSGphN0ptL2p3RkJGTWU1dTNKUmM5UkVmZndCTGxHaW9ISTZqV3Y5QVZSWGllZ0ZDWTJ3Q2pyMDRoL2dMOUQ3MFlocTc1dWRaQ0xyZHRuZDJjM04zYnhpOHF6ZE41OTU3L3RtN2ZLV3kyVVBiL2F5MysvNWd6NGNEdnhCbjg5bi9xQVZSUkhRYnRpVGgwTVQ4aERRb2hGRnBnVzAwRFI3YUlXcDFldDF4WGxqQmkxSjBuQTR6R1F5TGtDejBiVFA1MnUzMjlGb0ZMNExUY0lBT2hRS3RWcXRXQ3hHUGpLQlJzVXd6bVl6UjZDUjNXNjM2L2Y3NlJFN0FiUFpMTWJwZElxd3lBSWM5cnZITGJFMSsxQU56cHRxY0dqZEdPOGVxS0FzeTdmRWowY29Gb3VWU2dVT1lZWHpxaHF0bGVsR1JLVnl1WnpCY3BQSjVJL0g3OHFqVkNwaEhBd0dpVVFDSFl6ek1WSkVqV05PMDFpeEhwYXg2UVdrcktsVUNrNi8zNmVzbWd0dkhSUHlzQ1pRVFpCUDFlQzhxL1lJNGwxNU9IVWIvMUtOcU1oYXhWejl3VVFDUWwyUHA5T3NQSFNoN2NqamVyVHB1SnBwSmduV2JjUS85YmhsVXg2T1pwcExlVGlWNmNWaWdUczhaNDNZNi9YSXg4bGtRZzZlVGlleWpOK2JhV3I0VVVVZEFtMkJYZ3V0Ti9kdXQxdXYxM3JmWXRaNFBHNXFNY3ZsVXJNTVRCRU9oMW51SHJKcUJsYzJHbzE4UG0raFJKRDd0WVB6UVcrY2UyYWFybGFybTgybVZxdFoxdFY4UHI5MmNPSHhlSFM4RVR1ZERxWnBOcHMybTRIU2o4ZGpFbUc3M1VJNVR1MGVtSVp3QndJQis4K0lsSDYxV2htRThscHJCWTJoS1VlakVlR09SQ0o4dkdHQ3VBdUZ3clVpK1hqREJPNTBPbzNSQldodk1CaGtXRGpzWExoM09DMlBaMG1TR0lhN1hDN2lWYS80SjBCQS93OW8wWWdDV2tDTFJoVHlFTkRNN1Z1QUFRQndvdnZJdjA5WTZnQUFBQUJKUlU1RXJrSmdnZz09Ii8+Jyk7Cm0udW5tdXRlQnV0dG9ufHwobS51bm11dGVCdXR0b249JzxpbWcgc3R5bGU9Im1heC13aWR0aDogMjVweDttYXgtaGVpZ2h0OiAyNXB4O3BhZGRpbmctcmlnaHQ6IDZweDtwYWRkaW5nLWJvdHRvbTogNnB4OyIgb25lcnJvcj0idGhpcy5zcmM9XCdodHRwczovL2htZGFzc3RzLnNjaG5lZXZvbm1vcmdlbi5jb20vaW1nL3VubXV0ZTE4MTAwMi5wbmdcJyIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQUlBQUFDMW5rNGxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlocFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1EWTNJRGM1TGpFMU56YzBOeXdnTWpBeE5TOHdNeTh6TUMweU16bzBNRG8wTWlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVORElESXdNVFVnS0UxaFkybHVkRzl6YUNraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlEwWkNNRGMwUWpRMk5VVXdNVEZGTlRrNVJqaEJNME16UTBVeE4wVTBSRGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UTBaQ01EYzBRalUyTlVVd01URkZOVGs1UmpoQk0wTXpRMFV4TjBVMFJEZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBEUmtJd056UkNNalkxUlRBeE1VVTFPVGxHT0VFelF6TkRSVEUzUlRSRU9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERSa0l3TnpSQ016WTFSVEF4TVVVMU9UbEdPRUV6UXpORFJURTNSVFJFT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BpL2RxR3dBQUFTRlNVUkJWSGphN0psTFRCTkJHTWUzaUVpbDcyNUxhMHVRaTYyUEF4b0RIUEhDelpaRXFpYVFRQTJKd3NGWHZHaE1DSGZmSmlZRzFDWWVSRUUweElQdEJZN1lFeWFDK0VLSUVCTXI3VzRWaW9qV2IzZXRXYnF6MjA1WjFFMzJPMndtT3pQZi9QYWIvenhYMDk3ZVRpak5paE9KaFBLZ0tZcFNIblFxbFZJZWREcWRWcUgvaGhVUkNqUlZIaXEwT2hEVlNLdlFxcWIvZmFUUHpNM3RvK2t0eTh0Zk5tdzQ1UEY4TENuaDUzWjNkM2QxZGVWMHNpMlZhbzdGd0kvK3g0OVhXdTFoandjdjBta2NxNmNvYUF5SW9TYTBkM2xxU3JleXdtWHBkTHErdmo2Zno1ZlR5YmJGeGQ0M2IzenhPSGdBUDU1VWF2LzhQQllHSmpSTjg3L1lzN1RVOC9ZdGNBTnhUMCtQaHcxWVRtS29vdi81ays5bmZ6eU9oWUVuRHk0MmZQTXVMZlcrZTBjTUQzdTlYdTZOaEVNSWF1L1VsR0UxTWJJVzlCZzhoNGFHWkpESERac3RXVlFrNVBZZU8wWmtUa0FTTWI0bFFuelhhdVhLK0ZpREJIU2EzKzhYbFFmV0NJQkJjNlNxU3NoTlBIOU8xTmNUNGljM2lQSHQ5KytSeE9kZExsZG5aMHRMQzZUM3NzWUVJdE52TWtRYWJMSzBOTGgxcXdRM01zWml4SS85L3NjbUU4Y0tKVjJzL1pFS3RxYWhkeG9iRzhXKzlVc3NabWh1SmxhUFM0NGJ4aVhNaHZ6QmVtZDZHa21jdkhadFMyMXRPaGpVNi9WL0VMTVNlUE0wZkhGTlRZMlVWa1pHbU5BS3VPOXMydFJXV2NseGc5eERNek5JNG5OT1oyTnRMWjlNSW9FaGp4d0NyNjVtdUkzR3JOZmJ2MzBEVUlnMzZGaU1PTnJSOFNoVFVScGFob0dZUDNkMDgrWkhpUVJhRlZldkVtMXRhOXA3RkJqbVhOeU12ck9VdzlwWmgyT3lyaTVQVlJTeUlxNlZXMkRQT2pvR0RZYjBtbTNOa2M2Ym0xRkZhMnVlQVY1UFRXZHhYN2tpbG5uZFlubkp6aFh5N0tkbGtBZG5ZMlBFeVpOaW1hMFU1WXJGOGc5d2dackdKaGJPMlR5RGFjUU5DL1hZbUN6UW9vc0xCbmN1NHQ5RzA5czdPNzFPcDNEWmswaXN6NVFYQ2hHN2QrY216c1Q3eWR6Y2ptajBuMFlhaUlOQjlLbU1KT0Y1NGZObkJQcUpFOFRSbzFnNnlkNTdpUEhNenM2T2pvNkt4c3hnWUFJbVR2eFFwK1BTU082Nm16Y1BrQ1EwNFhhNzVUellEckFtVnEzcDY5Y0w4L05vWXF0MW9LeU1ZTjF5Q1dSSitKakk0T0J0blE0QWdON0FManI1UnJxQWV3K0dPQjVIWk1EaUVncjFRKy96ZlBhWGxkRWFEWEFiQlEwMTNMc1h0bGpnU0J3T2h6bEVtaDBiaFc5TlJZa1hGaTZLRWNPaVdGMmRQbjQ4S3llczFYNncyKzkvK2lUa0JsZndhb0NGWnI2d3Y1OWpuWmlZQU9XSXNXbXdWQlZZV0xpRS9JV1hJWVprUlVVRnN1Nk81ZVVIc1pnUnhYSGFiSVlPV2RVSkRRM3dqRVFpTXR3d0JSWVhFZk92Um5ONnp4NjZxa3E2N2tSSnlVR2JEUXJuNHpiQ21qeG5SR0dUOENaQWtnOWV2dzRFQW54RkltMTg0MFlvakhTeWpwYzFUMHRMc3hwcklrbEFZWURHeDZGUDRTbnRBUW8zQ2JqQkxSYUd4dWwwWWlua01rVWRZditYdmlndVBtVXlBVVRXL0oxTUpuTTYyZm45Ty9qWnRiSUM2ZnRhTGZqQll0QTRIQTdGM1pvcUU3cTh2Rng1MEhhN1hYblFOcHROZWRBa3U0ZFVvZGNmMm1xMUtnL2FZckVvRDlwc05pc1Ayb1M1aEtyUWhVSWI4N2c0L08rZ1lWK21QR2p1ZjRleTdKY0FBd0Rhbk9MSU8vcGdrQUFBQUFCSlJVNUVya0pnZ2c9PSIvPicpOwptLnNraXBhYmxlQnV0dG9ufHwobS5za2lwYWJsZUJ1dHRvbj0nPGRpdiBzdHlsZT0ib3BhY2l0eTogMC43O21pbi1oZWlnaHQ6IDI1cHg7bWF4LWhlaWdodDogMjVweDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2Rpc3BsYXk6IGlubGluZS1ibG9jaztsaW5lLWhlaWdodDogMjVweDtwYWRkaW5nLWxlZnQ6IDZweDttYXJnaW4tcmlnaHQ6IDZweDtwYWRkaW5nLXJpZ2h0OiA2cHg7Ym9yZGVyOiAjRkZGRkZGO2JhY2tncm91bmQtY29sb3I6YmxhY2s7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ij5Ta2lwIEFkIGluIFt0aW1lXXM8ZGl2PicpO20uc2tpcEJ1dHRvbnx8KG0uc2tpcEJ1dHRvbj0nPGRpdiBzdHlsZT0ibWluLWhlaWdodDogMjVweDttYXgtaGVpZ2h0OiAyNXB4O29wYWNpdHk6IDAuNjttYXJnaW4tcmlnaHQ6IDZweDtwYWRkaW5nLWxlZnQ6IDZweDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2Rpc3BsYXk6IGlubGluZS1ibG9jaztsaW5lLWhlaWdodDogMjVweDtiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14OyI+U2tpcCBBZDxpbWcgc3R5bGU9Im1heC13aWR0aDogMzBweDtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246IG1pZGRsZTsiIG9uZXJyb3I9XCdodHRwczovL2htZGFzc3RzLnNjaG5lZXZvbm1vcmdlbi5jb20vaW1nL3NraXAxODEwMDIucG5nXCcgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQThDQVlBQUFBNi9ObHlBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQTNCcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1Tmkxak1UTTRJRGM1TGpFMU9UZ3lOQ3dnTWpBeE5pOHdPUzh4TkMwd01Ub3dPVG93TVNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3VFUwOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXRiUzhpSUhodGJHNXpPbk4wVW1WbVBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZjMVI1Y0dVdlVtVnpiM1Z5WTJWU1pXWWpJaUI0Yld4dWN6cDRiWEE5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM4aUlIaHRjRTFOT2s5eWFXZHBibUZzUkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwRk9UWkRRalZHTUVSR01USXhNVVUyT0RReFFVVkJOME5HTVVNeU9Ua3hOU0lnZUcxd1RVMDZSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBGUmpjM09VRkdNRVJHUkRVeE1VVTJPRU0xT1VFNFFrSkdSamRHTmtRM05pSWdlRzF3VFUwNlNXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEZSamMzT1VGRlJrUkdSRFV4TVVVMk9FTTFPVUU0UWtKR1JqZEdOa1EzTmlJZ2VHMXdPa055WldGMGIzSlViMjlzUFNKQlpHOWlaU0JRYUc5MGIzTm9iM0FnUTBNZ01qQXhOeUFvVFdGamFXNTBiM05vS1NJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5KdmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09tUXpZemsxTkRCbUxUVmxZVE10TkRsbE5DMWhOR1V5TFdRMk1qUXlOVGN6Wm1VNVlTSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcEZPVFpEUWpWR01FUkdNVEl4TVVVMk9EUXhRVVZCTjBOR01VTXlPVGt4TlNJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BtNlhOVDRBQUFKcVNVUkJWSGphWXZ6Ly96L0RTQUpNRENNTWpIcDQxTU9qSGg3MThLaUhSejA4NnVGUkQ0OTZlTlREb3g0ZTlmQ29oN0VCbHNIbUlFTkR3d0JzNHVmUG45OUFGUXRBQXdEVXhqWTJOakZkWFYwcjlmWDEvVWpWQzlXREFzZ3hCeGVtU1pMMkJZTFMwdEt3RlN0V3JBUjZQZ3JrWUZJaWdCaXhRWldIZVhsNWVVQzBob1lHeDdadDI1YXFBWUdlbnA0UGtSNytSNHpZb1BJd2Nvenc4ZkV4ckY2OXVqc2FDSFIxZFgwR09vYnBWbWlWbDVkSHFLdXJhMWhaV2ZFY08zWnN4WWdvcFFNQ0FneUF5WHkrbTVzYnp6TWd1SExseXJiaGtxUnhPaENVcjllc1dUUGJFUWkwdGJXOWhrV2hSUWlBOHZYa3laTkxzckt5TXJXMHREeUdWYUdGRDJSblovdE1talJwc3BtWldjaXdLN1J3QVJjWEZ4VnBhZW1GZ1lHQk1qZUFZRVMwcFRVMU5ia1dMbHpZRHl6VS9HbWRwRmxvbEtUL2taT3YyOXZiTTRDRm1zYXdLN1R3Z2ZqNGVJY2hWMmlOdVA0d0pVbncwNmRQRENNbVNWKzdkdTBic0tNVlA2eGFXcmpBL1Buejk0RzZsVStBWUZqSE1DZ0pBL3ZPVTVxQjRPN2R1L3VHYXJWRWRCSXVLU2twdm43OStvMzc5KzhmR05ZdExXQUg0a3hUVTFQanBVdVh0Z3piN2lFTUFEMjZhTjY4ZVhNZlBIaHdpTjdkUTdxMnRCNC9mc3lRbHBhV0NVeksxeDQrZkhob1dJOTRIRDkrL0ZrcUVBQUxxVStQSGowNlFrcGdEYmxDcTYrdmIxMC9FQUJqK0FnNUJkNlFpZUdQSHo4eXBLU2tsSjRBQW1JOE8yU2JsbGV2WHIyeVk4ZU9HKzd1N3VIQXBIeU1GTS9TT2tuVFpPYUJFaXdsSldXRlB2TUFGYU9LK1lOdWJna1VtMEFQV3RMS2ZNYlJ4YVdqSGg3MThLaUhSejA4NnVGUkQ0OTZlTlREb3g0ZTlmQ29oMGM5UE9waEJnYUFBQU1BR21DMHBlSmNHRUlBQUFBQVNVVk9SSzVDWUlJPSIvPjwvZGl2PicpOwppZihtLnNpZGVsb2Fkcyl7dmFyIGM9ZnVuY3Rpb24oKXt9O20uc2lkZWxvYWRzLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5hbGlhczsiZnVuY3Rpb24iPT09dHlwZW9mIGImJihiPWIoKSk7YT1hLnVybDsiZnVuY3Rpb24iPT09dHlwZW9mIGEmJihhPWEoKSk7ZS5ZYShhLGIsW10sYyxjLGwpfSl9bC5sKG0uZ2xvYmFsQ29uZmlnLG0uY2xpZW50Q29uZmlnLG0ucHJlY2hlY2tlZCxtLm9uUmVhZHksbS5vbkZhaWx1cmUsbSk7ZG9jdW1lbnQuaGRfcmVhZHk9ITA7dmFyIGI9bS5zdGFydFBsYXllcjtiJiYiZnVuY3Rpb24iPT09dHlwZW9mIGImJmIoKX1lbHNlIGtjKGZhLDUwKX1mdW5jdGlvbiByKGMsYil7aWYoZS5jbyllLnRyYWNrKCJzdGF0c19oZF9ieXBhc3MiLCIiLCEwKTtlbHNlIGlmKG0mJmwpeyhtLmFkVGFnfHxtLnByZXJvbGxBZFRhZykmJmMucGF1c2UoKTtlLnYoay5mZCxjLnUoKSk7aWYoYy5nZXRDdXJyZW50VGltZSl7dmFyIGE9Yy5nZXRDdXJyZW50VGltZSgpO2EmJgplLnRyYWNrKCJhY3RpdmF0ZWRBdCIsYSl9Yj9sLkthPSEwOmUudHJhY2soInN0YXRzX2hkX2FiZCIsIiIsITApO2E9bmV3IGdhO2EuZmYoYyk7YS5CdChsKTthLkF0KG0pO2EubXQoKTthLmcoKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cihjLGIpfS5iaW5kKHRoaXMpLDUwKX1mdW5jdGlvbiBoYShjLGIpe2MucGF1c2UoKTtpZihsLkdiLmxlbmd0aCl7dmFyIGE9bC5HYi5zaGlmdCgpO2lmKCJhZGNhbGwiPT1hLnR5cGUpe3ZhciBoO2g9ZS5IdCh7IltMT0FEU0NSSVBUXSI6ZS5iYSgxMCksIltVVElMU10iOmUuYmEoMTApLCJbQ0FMTEJBQ0tdIjplLmJhKDEwKX0pO3dpbmRvd1toWyJbTE9BRFNDUklQVF0iXV09ZS5maC5iaW5kKGUpO3dpbmRvd1toWyJbVVRJTFNdIl1dPWw7Zm9yKHdpbmRvd1toWyJbQ0FMTEJBQ0tdIl1dPWZ1bmN0aW9uKGEpe2Zvcih2YXIgaCBpbiBhKW1baF09YVtoXTtyKGMsYil9O2g9YS5zY3JpcHRzLnNoaWZ0KCk7KWUuZmgoaCxmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJzaWRlbG9hZCBzdWNjZXNzIil9LApmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJzaWRlbG9hZCBmYWlsZWQiKX0sbCl9ZWxzZSByKGMsYil9ZWxzZSByKGMsYil9Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTXM9dGhpcy5hWzFdO3RoaXMuWGs9dGhpcy5hWzFdO3RoaXMuZ2o9dGhpcy5hWzddO3RoaXMuRW09dGhpcy5hWzNdO3RoaXMubmo9dGhpcy5hWzEwXTt0aGlzLkRuPXRoaXMuYVszXTt0aGlzLmZrPXRoaXMuYVsxXTt0aGlzLk9zPXRoaXMuYVsxXTt0aGlzLkl1PXRoaXMuYVs4XTt0aGlzLlZxPXRoaXMuYVs0XTt0aGlzLmo9dGhpcy5hWzNdfWMuY3Q9YjtiLnByb3RvdHlwZT17THM6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5Nczp0aGlzLldrKGEpfSxXazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuWGs6dGhpcy5maihhKX0sZmo6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLmdqOnRoaXMuRG0oYSl9LApEbTpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuRW06dGhpcy5taihhKX0sbWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLm5qOnRoaXMuQ24oYSl9LENuOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5Ebjp0aGlzLmVrKGEpfSxlazpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuZms6dGhpcy5OcyhhKX0sTnM6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLk9zOnRoaXMuSHUoYSl9LEh1OmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5JdTp0aGlzLlVxKGEpfSxVcTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuVnE6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBpYT1jLmN0fHxpYSxsYz1uZXcgaWEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1sYy5Mcyg0KTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5jbz0KITE7dGhpcy5TYT0ic2V0dXAiO3RoaXMuS2M9W107dGhpcy5qZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLllzLmJpbmQodGhpcykpO3RoaXMua2I9e307dGhpcy5OZz17fTt0aGlzLmNmPSExfWMuJGo9YjtiLnByb3RvdHlwZT17YnU6ZnVuY3Rpb24oKXt2YXIgYT0iIixiO2ZvcihiIGluIHRoaXMua2IpdGhpcy5rYi5oYXNPd25Qcm9wZXJ0eShiKSYmKGErPWIrdGhpcy5rYltiXSsiXyIpO3JldHVybiBhfSx6YzpmdW5jdGlvbigpe3RoaXMuY2Z8fCh0aGlzLmNmPWUuYmEoMTApKTtyZXR1cm4gdGhpcy5jZn0sbGI6ZnVuY3Rpb24oYSl7dGhpcy5rYlthXXx8KHRoaXMua2JbYV09MCk7dGhpcy5rYlthXSs9MTs1PHRoaXMua2JbYV0mJiF0aGlzLk5nW2FdJiYodGhpcy5OZ1thXT0hMCwibmV3QmlnQWRJZCI9PWEmJnRoaXMudHJhY2soInN0YXRzX2hkX2NoZWNrdHJhY2tzIix0aGlzLmJ1KCksITApKX0samU6ZnVuY3Rpb24oKXt0aGlzLmFhPXt1cmxzOnt9LApob21hZFVybHM6e30sb3JpZ2luYWxVcmxzOnt9LHNjcmlwdHM6e30sZXZlbnRsaXN0ZW5lcjpbXSxnZW5lcmFsRXZlbnRsaXN0ZW5lcjpbXSxpRnJhbWVzOltdLGlGcmFtZU9uTG9hZEhhbmRsZXI6e30saUZyYW1lVXJsOiIiLHRyYWNlOltdLHN0YWNrOltdLGVycm1zZzpbXX19LGpuOmZ1bmN0aW9uKGEpe3RoaXMuYWEuZXJybXNnLnB1c2goYSl9LHBvc3RNZXNzYWdlOmZ1bmN0aW9uKGEsYil7dHJ5e2EuY29udGVudFdpbmRvdyYmKGE9YS5jb250ZW50V2luZG93KX1jYXRjaChkKXt9YSYmYS5wb3N0TWVzc2FnZSYmYS5wb3N0TWVzc2FnZShiLCIqIil9LG1hOmZ1bmN0aW9uKGEsYixkKXt0aGlzLnBvc3RNZXNzYWdlKGEse3R5cGU6InZwYWlkIixldmVudDpiLGRhdGE6ZH0pfSxZczpmdW5jdGlvbihhKXthJiZhLmRhdGEmJmEuZGF0YS50eXBlJiYidnBhaWQiPT1hLmRhdGEudHlwZSYmdGhpcy5YcyhhLmRhdGEpfSxYczpmdW5jdGlvbihhKXtpZih0aGlzLmFhJiZ0aGlzLmFhLmV2ZW50bGlzdGVuZXIpZm9yKHZhciBiPQp0aGlzLmFhLmV2ZW50bGlzdGVuZXIubGVuZ3RoLGQ9MDtkPGI7ZCsrKXRoaXMuYWEmJnRoaXMuYWEuZXZlbnRsaXN0ZW5lciYmdGhpcy5hYS5ldmVudGxpc3RlbmVyW2RdJiZhLmV2ZW50PT10aGlzLmFhLmV2ZW50bGlzdGVuZXJbZF0ubmFtZSYmdGhpcy5hYS5ldmVudGxpc3RlbmVyW2RdLmNiKGEpfSxiZTpmdW5jdGlvbihhLGIpe3RoaXMuYWEuZXZlbnRsaXN0ZW5lci5wdXNoKHtuYW1lOmEsY2I6Yn0pfSxsZzpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmdxKGEpLGQ9ITE7aWYoYilyZXR1cm4gdGhpcy5laChhLCJQT1NUIix7aG9tYWRfcmVzb2x2ZV9oYXNoOmJ9LGZ1bmN0aW9uKGEpe3RyeXtkPUpTT04ucGFyc2UoYS5yZXNwb25zZVRleHQpLnVybH1jYXRjaChiKXtjb25zb2xlLmxvZygid3RmIixiKX19LGZ1bmN0aW9uKCl7fSwhMCwhMCksZH0sZ3E6ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IFJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPyhbdy4tXSopOj8uKihbMC05XSspPy8/KFthLWYwLTldezQwfSkvPyQiLAoiZyIpO2lmKChiPWIuZXhlYyhhKSkmJihiWzJdfHxiWzVdKSl7aWYoYlsyXSlyZXR1cm4gYlsyXTtpZihiWzVdKXJldHVybiBiWzVdfWVsc2UgaWYoYj1uZXcgUmVnRXhwKCJeKGh0dHBzPyk6Ly8oW3cuLV0qKTo/LiooWzAtOV0rKT8vPyhbYS1mMC05XXs0MH0pLz8kIiwiZyIpLChiPWIuZXhlYyhhKSkmJmJbNF0pcmV0dXJuIGJbNF07cmV0dXJuITF9LGduOmZ1bmN0aW9uKGEsYil7aWYoYiYmISgwPnRoaXMubGEoYSkuaG9zdC5pbmRleE9mKCJkYW1vaCIpKSl7aWYoYT09Yil7aWYoZS5RcChhKSlyZXR1cm47KGI9dGhpcy5sZyhhKSl8fChiPWEpfTA9PT1iLmluZGV4T2YoIi8vIikmJihiPSJodHRwczoiK2IpO3RoaXMuYWEudXJsc1thXT1iO3RoaXMuYWEudXJsc1tiXT1hO3RoaXMuYWEuaG9tYWRVcmxzW2FdPWI7dGhpcy5hYS5vcmlnaW5hbFVybHNbYl09YX19LFFwOmZ1bmN0aW9uKGEpe3ZhciBiPSExO3RoaXMuYWEuaG9tYWRVcmxzW2FdJiYoYj10aGlzLmFhLmhvbWFkVXJsc1thXSk7CnJldHVybiBifSx0ZzpmdW5jdGlvbihhKXt2YXIgYj0hMTt0aGlzLmFhLm9yaWdpbmFsVXJscyYmdGhpcy5hYS5vcmlnaW5hbFVybHNbYV0mJihiPXRoaXMuYWEub3JpZ2luYWxVcmxzW2FdKTtyZXR1cm4gYn0sZWI6ZnVuY3Rpb24oYSxiKXtifHwoYj0iIik7dGhpcy50cmFjaygic3RhdHNfdnBhaWRfIithLGIsITApfSxwcjpmdW5jdGlvbihhKXtyZXR1cm4iYWJvdXQ6YmxhbmsiPT1hfHwiYWJvdXQ6c2VsZiI9PWF8fCIiPT1hfSx0ZTpmdW5jdGlvbihhKXtpZighYXx8Im9iamVjdCIhPT10eXBlb2YgYSlyZXR1cm4gMDt2YXIgYj0wLGQ9IiI7Zm9yKGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiZiKys7cmV0dXJuIGJ9LENnOmZ1bmN0aW9uKGEsYil7dmFyIGQ9YVtiXTtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBkP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGQpOiJmdW5jdGlvbiI9PT10eXBlb2YgZD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChkKCkpOiJvYmplY3QiPT09dHlwZW9mIGQ/CmQ6bnVsbH0sSGg6ZnVuY3Rpb24oYSl7Zm9yKDthIT1kb2N1bWVudC5ib2R5JiZudWxsIT1hOylhPWEucGFyZW50RWxlbWVudDtyZXR1cm4gYT09ZG9jdW1lbnQuYm9keT8hMDohMX0sV2c6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiYiZnVuY3Rpb24iPT09dHlwZW9mIGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PyhhPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpPzA8PWEudG9wJiYwPD1hLmxlZnQmJmEuYm90dG9tPD0od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSYmYS5yaWdodDw9KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpOiExOiExfSxCZTpmdW5jdGlvbihhLGIpe3ZhciBkPTAsZj0wLG49MCxjPTAsZT0hMTtpZighYXx8IWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0fHwiZnVuY3Rpb24iIT09dHlwZW9mIGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXJldHVybiExOwp2YXIgZz1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFnKXJldHVybiExO249Zy5oZWlnaHQqZy53aWR0aDtkPWcud2lkdGg7Zj1nLmhlaWdodDswPmcudG9wJiYoZis9Zy50b3ApO2cuYm90dG9tPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpJiYoZi09Zy5ib3R0b20tKHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpOzA+Zy5sZWZ0JiYoZCs9Zy5sZWZ0KTtnLnJpZ2h0Pih3aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKSYmKGQtPWcucmlnaHQtKHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpKTswPmYmJihmPTApOzA+ZCYmKGQ9MCk7MDxuJiYoYz0xMDAvbipkKmYpO2M+PWImJihlPSEwKTtyZXR1cm4gZX0sQ2U6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5CZShhLmVsLAphLnBlcmNlbnQpO2Euc3RhcnRUaW1lfHwoYS5zdGFydFRpbWU9KG5ldyBEYXRlKS5nZXRUaW1lKCkpO2lmKGIpe2lmKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWEuc3RhcnRUaW1lPj1hLnRpbWVNUyl7YS5jYigpO3JldHVybn19ZWxzZSBhLnN0YXJ0VGltZT0hMTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuQ2UoYSl9LmJpbmQodGhpcyksMTAwKX0sRWI6ZnVuY3Rpb24oYSl7YT1hJiYibnVtYmVyIj09PXR5cGVvZiBhP01hdGguYWJzKGEpOjEwO3JldHVybiBNYXRoLnJvdW5kKE1hdGgucG93KDEwLGEpKiguODk5OTk5OTk5Kk1hdGgucmFuZG9tKCkrLjEpKX0sYmE6ZnVuY3Rpb24oYSl7YT1hJiYibnVtYmVyIj09PXR5cGVvZiBhJiYwPGE/TWF0aC5yb3VuZChhKToxMDtmb3IodmFyIGI9IiIsZD0wO2Q8YTtkKyspYis9U3RyaW5nLmZyb21DaGFyQ29kZSgoLjU+TWF0aC5yYW5kb20oKT82NTo5NykrTWF0aC5mbG9vcigyNipNYXRoLnJhbmRvbSgpKSk7cmV0dXJuIGJ9LHZlOmZ1bmN0aW9uKGEpe3ZhciBiPQowLGQsZjtpZigwPT09YS5sZW5ndGgpcmV0dXJuIGI7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKylmPWEuY2hhckNvZGVBdChkKSxiPShiPDw1KS1iK2YsYnw9MDtyZXR1cm4gYn0sRWg6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2YXIgaD0iIixkLGY7Zm9yKGQ9NzswPD1kO2QtLSlmPWE+Pj40KmQmMTUsaCs9Zi50b1N0cmluZygxNik7cmV0dXJuIGh9ZnVuY3Rpb24gZChhLGIpe3JldHVybiBhPDxifGE+Pj4zMi1ifXZhciBmLG4sYz1BcnJheSg4MCksZT0xNzMyNTg0MTkzLGc9NDAyMzIzMzQxNyxrPTI1NjIzODMxMDIsTD0yNzE3MzM4NzgsbD0zMjg1Mzc3NTIwLHAsbSx0LEIscjthPWEmJiJzdHJpbmciPT09dHlwZW9mIGE/YToiIjtwPWEubGVuZ3RoO3ZhciBxPVtdO2ZvcihmPTA7ZjxwLTM7Zis9NCluPWEuY2hhckNvZGVBdChmKTw8MjR8YS5jaGFyQ29kZUF0KGYrMSk8PDE2fGEuY2hhckNvZGVBdChmKzIpPDw4fGEuY2hhckNvZGVBdChmKzMpLHEucHVzaChuKTtzd2l0Y2gocCUKNCl7Y2FzZSAwOmY9MjE0NzQ4MzY0ODticmVhaztjYXNlIDE6Zj1hLmNoYXJDb2RlQXQocC0xKTw8MjR8ODM4ODYwODticmVhaztjYXNlIDI6Zj1hLmNoYXJDb2RlQXQocC0yKTw8MjR8YS5jaGFyQ29kZUF0KHAtMSk8PDE2fDMyNzY4O2JyZWFrO2Nhc2UgMzpmPWEuY2hhckNvZGVBdChwLTMpPDwyNHxhLmNoYXJDb2RlQXQocC0yKTw8MTZ8YS5jaGFyQ29kZUF0KHAtMSk8PDh8MTI4fWZvcihxLnB1c2goZik7MTQhPXEubGVuZ3RoJTE2OylxLnB1c2goMCk7cS5wdXNoKHA+Pj4yOSk7cS5wdXNoKHA8PDMmNDI5NDk2NzI5NSk7Zm9yKGE9MDthPHEubGVuZ3RoO2ErPTE2KXtmb3IoZj0wOzE2PmY7ZisrKWNbZl09cVthK2ZdO2ZvcihmPTE2Ozc5Pj1mO2YrKyljW2ZdPWQoY1tmLTNdXmNbZi04XV5jW2YtMTRdXmNbZi0xNl0sMSk7bj1lO3A9ZzttPWs7dD1MO0I9bDtmb3IoZj0wOzE5Pj1mO2YrKylyPWQobiw1KSsocCZtfH5wJnQpK0IrY1tmXSsxNTE4NTAwMjQ5JjQyOTQ5NjcyOTUsQj10LAp0PW0sbT1kKHAsMzApLHA9bixuPXI7Zm9yKGY9MjA7Mzk+PWY7ZisrKXI9ZChuLDUpKyhwXm1edCkrQitjW2ZdKzE4NTk3NzUzOTMmNDI5NDk2NzI5NSxCPXQsdD1tLG09ZChwLDMwKSxwPW4sbj1yO2ZvcihmPTQwOzU5Pj1mO2YrKylyPWQobiw1KSsocCZtfHAmdHxtJnQpK0IrY1tmXSsyNDAwOTU5NzA4JjQyOTQ5NjcyOTUsQj10LHQ9bSxtPWQocCwzMCkscD1uLG49cjtmb3IoZj02MDs3OT49ZjtmKyspcj1kKG4sNSkrKHBebV50KStCK2NbZl0rMzM5NTQ2OTc4MiY0Mjk0OTY3Mjk1LEI9dCx0PW0sbT1kKHAsMzApLHA9bixuPXI7ZT1lK24mNDI5NDk2NzI5NTtnPWcrcCY0Mjk0OTY3Mjk1O2s9ayttJjQyOTQ5NjcyOTU7TD1MK3QmNDI5NDk2NzI5NTtsPWwrQiY0Mjk0OTY3Mjk1fXJldHVybihiKGUpK2IoZykrYihrKStiKEwpK2IobCkpLnRvTG93ZXJDYXNlKCl9LHZiOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iIixkLGYsbixjLGUsZyxrPTA7azxhLmxlbmd0aDspZD1hLmNoYXJDb2RlQXQoaysrKSwKZj1hLmNoYXJDb2RlQXQoaysrKSxuPWEuY2hhckNvZGVBdChrKyspLGM9ZD4+MixkPShkJjMpPDw0fGY+PjQsZT0oZiYxNSk8PDJ8bj4+NixnPW4mNjMsaXNOYU4oZik/ZT1nPTY0OmlzTmFOKG4pJiYoZz02NCksYj1iKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGMpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGQpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGUpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGcpO3JldHVybiBifSxtcjpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudmVuZG9yJiYtMTxuYXZpZ2F0b3IudmVuZG9yLmluZGV4T2YoIkFwcGxlIil9LAp1YzpmdW5jdGlvbigpe3ZhciBhPXt9LGI9ITEsZD0hMSxmPSExLG49ITEsYz0hMSxlPSExLGc9ITEsaz0hMSxtPSExLGw9ITE7dHJ5e2I9Y2hlY2tGb3JQaGFudG9tSlMoKX1jYXRjaChwKXt9dHJ5ey9cYkhlYWRsZXNzQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJihkPSEwKX1jYXRjaChyKXt9dHJ5e2Y9d2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoIndlYmRyaXZlciIpfHxuYXZpZ2F0b3IuTmI/ITA6ITF9Y2F0Y2godCl7fXRyeXtuPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk9wZXJhIiksYz0tMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94IiksZT0tMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJTYWZhcmkiKSxnPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk1TSUUiKSxtPS0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkNocm9tZSIpLGs9IWcmJiEhd2luZG93LlN0eWxlTWVkaWEsCmw9KG18fG4pJiYhIXdpbmRvdy5DU1N9Y2F0Y2gocSl7fWEuaXNQaGFudG9tSlM9YjthLmlzQ2hyb21lSGVhZGxlc3M9ZDthLmlzRmlyZWZveEhlYWRsZXNzPWY7YS5pc09wZXJhPW47YS5pc0ZpcmVmb3g9YzthLmlzU2FmYXJpPWU7YS5pc0lFPWc7YS5pc0VkZ2U9azthLmlzQ2hyb21lPW07YS5pc0JsaW5rPWw7cmV0dXJuIGF9LGFxOmZ1bmN0aW9uKCl7dmFyIGE9IlUiLGI9dGhpcy51YygpO2IuaXNQaGFudG9tSlM/YT0iSFAiOmIuaXNDaHJvbWVIZWFkbGVzcz9hPSJIQyI6Yi5pc0ZpcmVmb3hIZWFkbGVzcz9hPSJIRiI6KGIuaXNCbGluayYmKGE9IkIiKSxiLmlzT3BlcmEmJihhPSJPIiksYi5pc0ZpcmVmb3gmJihhPSJGIiksYi5pc1NhZmFyaSYmKGE9IlMiKSxiLmlzSUUmJihhPSJJIiksYi5pc0VkZ2UmJihhPSJFIiksYi5pc0Nocm9tZSYmKGE9IkMiKSk7cmV0dXJuIGF9LFRhOmZ1bmN0aW9uKCl7dmFyIGE9e1NpOmZ1bmN0aW9uKCl7cmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSl9LApjajpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9CbGFja0JlcnJ5L2kpfSxQcTpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpfSxqbDpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9PcGVyYSBNaW5pL2kpfSxJbTpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9JRU1vYmlsZS9pKX0sTW46ZnVuY3Rpb24oKXtyZXR1cm4gYS5TaSgpfHxhLmNqKCl8fGEuUHEoKXx8YS5qbCgpfHxhLkltKCl9fTtyZXR1cm4gYS5NbigpfSxsYTpmdW5jdGlvbihhKXt2YXIgYj0ic291cmNlIHByb3RvY29sIGF1dGhvcml0eSB1c2VySW5mbyB1c2VyIHBhc3N3b3JkIGhvc3QgcG9ydCByZWxhdGl2ZSBwYXRoIGRpcmVjdG9yeSBmaWxlIHF1ZXJ5IGFuY2hvciIuc3BsaXQoIiAiKTthPS9eKD86KD8hW146QF0rOlteOkBcL10qQCkoW146XC8/Iy5dKyk6KT8oPzpcL1wvKT8oKD86KChbXjpAXSopKD86OihbXjpAXSopKT8pP0ApPyhbXjpcLz8jXSopKD86OihcZCopKT8pKCgoXC8oPzpbXj8jXSg/IVtePyNcL10qXC5bXj8jXC8uXSsoPzpbPyNdfCQpKSkqXC8/KT8oW14/I1wvXSopKSg/Olw/KFteI10qKSk/KD86IyguKikpPykvLmV4ZWMoYSk7CmZvcih2YXIgZD17fSxmPTE0O2YtLTspZFtiW2ZdXT1hW2ZdfHwiIjtkLnF1ZXJ5S2V5PXt9O2RbYlsxMl1dLnJlcGxhY2UoLyg/Ol58JikoW14mPV0qKT0/KFteJl0qKS9nLGZ1bmN0aW9uKGEsYixoKXtiJiYoZC5xdWVyeUtleVtiXT1oKX0pO3JldHVybiBkfSx1bmlxdWU6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXt9LGQ9W10sZj0wLG49YS5sZW5ndGg7ZjxuOysrZiliLmhhc093blByb3BlcnR5KGFbZl0pfHwoZC5wdXNoKGFbZl0pLGJbYVtmXV09MSk7cmV0dXJuIGR9LFNiOmZ1bmN0aW9uKGEpe2E9dGhpcy5sYShhKS5ob3N0LnNwbGl0KCIuIik7dmFyIGI9IiI7YVthLmxlbmd0aC0yXSYmKGIrPWFbYS5sZW5ndGgtMl0rIi4iKTthW2EubGVuZ3RoLTFdJiYoYis9YVthLmxlbmd0aC0xXSk7cmV0dXJuIGJ9LEJhOmZ1bmN0aW9uKGEpe3ZhciBiPSIiLGQ9ITE7d2luZG93JiZ3aW5kb3cubG9jYXRpb24mJndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSYmKGI9d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKTsKYiYmLTE8Yi5pbmRleE9mKGEpJiYoZD0hMCk7cmV0dXJuIGR9LHFxOmZ1bmN0aW9uKCl7dmFyIGE9IiIsYj0iIixkPSIiO3RyeXthPXdpbmRvdy5sb2NhdGlvbi5ob3N0LGI9d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLHdpbmRvdyE9d2luZG93LnRvcCYmKGE9d2luZG93LnRvcC5sb2NhdGlvbi5ob3N0LGI9d2luZG93LnRvcC5sb2NhdGlvbi5wYXRobmFtZSl9Y2F0Y2goZil7ZG9jdW1lbnQucmVmZXJyZXImJihkPXRoaXMubGEoZG9jdW1lbnQucmVmZXJyZXIpLGE9ZC5ob3N0LGI9ZC5wYXRoKX1yZXR1cm4gYStifSxVbzpmdW5jdGlvbihhLGIpe2Zvcih2YXIgZD1bXSxmPVtdLG49MDtuPGIubGVuZ3RoO24rKylkW2Jbbl1dPSEwO2ZvcihuPTA7bjxhLmxlbmd0aDtuKyspZFthW25dXXx8Zi5wdXNoKGFbbl0pO3JldHVybiBmfSxXdDpmdW5jdGlvbihhLGIpe3ZhciBkPS0xLGY9IiI7dHJ5ezA8YS5pbmRleE9mKCIlIikmJjA8Yj8oZj1hLnNwbGl0KCIlIiksZD1iLzEwMCpmKTooZD1hLnNwbGl0KCI6IiksCmQ9MzYwMCorZFswXSs2MCorZFsxXSsgK2RbMl0sZD1NYXRoLnJvdW5kKGQpKX1jYXRjaChuKXtkPS0xfXJldHVybiBpc05hTihkKT8tMTpkfSx5ZzpmdW5jdGlvbihhKXthPU1hdGgucm91bmQoYSk7dmFyIGI9Ii0tOi0tIjswPD1hJiYoYT1NYXRoLmZsb29yKGEpLGI9TWF0aC5mbG9vcihhLzYwKSxiPXRoaXMuVmgoYikrIjoiK3RoaXMuVmgoTWF0aC5mbG9vcihhLTYwKmIpKSk7cmV0dXJuIGJ9LFZoOmZ1bmN0aW9uKGEpe3JldHVybiAxMD5hPyIwIithLnRvU3RyaW5nKCk6YS50b1N0cmluZygpfSxlZjpmdW5jdGlvbihhKXt0aGlzLlNhPWF9LHZnOmZ1bmN0aW9uKGEsYixkKXt2YXIgZjtkLnN0YXRlPXRoaXMuU2E7dGhpcy5XZihkKTsiZnVuY3Rpb24iPT09dHlwZW9mIHdpbmRvdy5DdXN0b21FdmVudD9mPW5ldyBDdXN0b21FdmVudChiLHtkZXRhaWw6ZH0pOihmPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpLGYuaW5pdEN1c3RvbUV2ZW50KGIsITEsITEsZCkpOwphLmRpc3BhdGNoRXZlbnQoZil9LHdjOmZ1bmN0aW9uKGEsYixkKXtifHwoYj0iaGRFdmVudCIpO2R8fChkPXdpbmRvdyk7dGhpcy52ZyhkLGIsYSl9LHY6ZnVuY3Rpb24oYSxiLGQsZixuLGMsZyl7dmFyIEE9YTtkJiZiJiYoYj1rLlhhKGIsZCkpO2ImJihBPWsuWGEoYSxiKSk7ZiYmKEE9ay5YYShBLGYpKTtuJiYoQT1rLlhhKEEsbikpO2MmJihBPWsuWGEoQSxjKSk7ZyYmKEE9ay5YYShBLGMpKTtlLndjKEEpfSwkczpmdW5jdGlvbihhKXt2YXIgYj17fTtpZighYS5jb2RlKXJldHVybiExO2lmKGEuc3BlY2lhbF90cmFjayliPWE7ZWxzZSBpZighKGEuY29kZSYmMTAwNTw9YS5jb2RlJiYxMDI5Pj1hLmNvZGUpfHwxMDIzPT1hLmNvZGV8fDEwMTg9PWEuY29kZSlyZXR1cm47dHJ5e2phJiYoYi5zZXNzaW9uX2lkPWphKTtiLmFkc2Vzc2lvbl9pZD1hLmFkc2Vzc2lvbl9pZD9hLmFkc2Vzc2lvbl9pZDoiZXBvbiI7YS5ob21hZEltcHJlc3Npb25BZElkJiYoYi5hZF9pZD1hLmhvbWFkSW1wcmVzc2lvbkFkSWQpOwpiLmV2ZW50PWEuY29kZTtiLnNpdGVfaHJlZj10aGlzLnFxKCk7aWYoYS5zdGF0ZSlzd2l0Y2goYS5zdGF0ZSl7Y2FzZSAicHJlcm9sbCI6Yi5wb3NpdGlvbj0xO2JyZWFrO2Nhc2UgIm1pZHJvbGwiOmIucG9zaXRpb249MjticmVhaztjYXNlICJwb3N0cm9sbCI6Yi5wb3NpdGlvbj0zO2JyZWFrO2RlZmF1bHQ6Yi5wb3NpdGlvbj0wfWEudmlkZW9fZHVyYXRpb24mJihiLnZpZGVvX2R1cmF0aW9uPWEudmlkZW9fZHVyYXRpb24pfWNhdGNoKGQpe31yZXR1cm4gYn0sV2Y6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy4kcyhhKTtpZihiKWlmKCFsfHwhbC5YKXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5XZihiKX0uYmluZCh0aGlzKSw1MDApO2Vsc2UgaWYobC5pc0VuYWJsZWQpe2lmKCJvYmplY3QiPT10eXBlb2YgYil0cnl7Yj1KU09OLnN0cmluZ2lmeShiKX1jYXRjaChkKXtiPWIudG9TdHJpbmc/Yi50b1N0cmluZygpOiIifWImJmIudHJpbSYmKGI9Yi50cmltKCkpO2E9bC5EZCgpOwpsLnphKGEsITApO2E9bC56YShhLCEwKTthLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0iIjthLmRhdGEuaG9tYWRfYXQ9YjtsLkxhKGEsZnVuY3Rpb24oKXt9KX19LHRyYWNrOmZ1bmN0aW9uKGEsYixkKXtpZihkKWlmKCFsfHwhbC5YKXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50cmFjayhhLGIsZCl9LmJpbmQodGhpcyksNTAwKTtlbHNlIGlmKGwuaXNFbmFibGVkKXthJiZhLnRyaW0mJihhPWEudHJpbSgpKTtiJiZiLnRyaW0mJihiPWIudHJpbSgpKTt2YXIgZj1hK2I7dGhpcy5NY3x8KHRoaXMuTWM9e30pO3RoaXMuTWNbZl18fCh0aGlzLk1jW2ZdPTApO3RoaXMuTWNbZl0rKzsxMDx0aGlzLk1jW2ZdfHwoZj1sLkRkKCkrIj9ob21hZF90cmFja19rZXk9IitlbmNvZGVVUklDb21wb25lbnQoYSkrIiZob21hZF90cmFja192YWx1ZT0iK2VuY29kZVVSSUNvbXBvbmVudChiKSxsLnphKGYsITApLGY9bC56YShmLCEwKSxmLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0KIiIsZi5kYXRhLmhvbWFkX3RyYWNrX2tleT0iKiIrZW5jb2RlVVJJQ29tcG9uZW50KGEpKyIqIixmLmRhdGEuaG9tYWRfdHJhY2tfdmFsdWU9IioiK2VuY29kZVVSSUNvbXBvbmVudChiKSsiKiIsbC5MYShmLGZ1bmN0aW9uKGQpe3ZhciBmPSExO2Q9ZC5yZXNwb25zZVRleHQ7dHJ5e2Q9SlNPTi5wYXJzZShkKSxkPWQuZGF0YSxkWzBdPT1lbmNvZGVVUklDb21wb25lbnQoYSkmJihmPSEwKSxkWzFdJiZkWzFdIT1lbmNvZGVVUklDb21wb25lbnQoYikmJihmPSExKX1jYXRjaChjKXt9Znx8dGhpcy50cmFjaygic3RhdHNfaGRfdHJhY2tjaGVjayIsKGRbMF0/ZFswXToiIikrKGRbMV0/ZFsxXToiIiksITApfS5iaW5kKHRoaXMpKSl9fSxKZTpmdW5jdGlvbigpe2wmJmwuWD9sLmlzRW5hYmxlZCYmbC5xbygpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5KZSgpfS5iaW5kKHRoaXMpLDUwMCl9LHJlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEmJiJvYmplY3QiPT10eXBlb2YgYSYmCmEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYikubGVuZ3RoP3RoaXMuaWIoYS5nZXRFbGVtZW50c0J5VGFnTmFtZShiKVswXSk6IiJ9LHVlOmZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLmNoaWxkTm9kZXMmJmEuY2hpbGROb2Rlc1swXT9hLmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlOiIifSxpYjpmdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLnFkKGEpOiIifSxxZDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnVlKGEpO2ImJihiPWIudHJpbSgpKTshYiYmYS50ZXh0Q29udGVudCYmKGI9YS50ZXh0Q29udGVudCxiPWIudHJpbSgpKTtyZXR1cm4gYn0sJGY6ZnVuY3Rpb24oYSxiLGQsZil7ZD0hMTtpZihiLkVlKGEpfHx0aGlzLnByKGEpfHwwPD1hLmluZGV4T2YoImRhdGE6aW1hZ2UiKSlyZXR1cm4gYTt3aW5kb3cuc2FuZGJveCYmd2luZG93LnNhbmRib3guYmYmJndpbmRvdy5zYW5kYm94LmJmWyJTdHJpbmcucHJvdG90eXBlLmluZGV4T2YiXSYmKDA8PXNhbmRib3guYmZbIlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiJdLmJpbmQoYSkoImVycm9yIil8fApzYW5kYm94LmJmWyJTdHJpbmcucHJvdG90eXBlLmluZGV4T2YiXS5iaW5kKGEpKCJFcnJvciIpKTtpZih0aGlzLnRnKGEpKXJldHVybiB0aGlzLnRnKGEpO3ZhciBuPXtob21hZF91cmxfcHJlZml4X2FsaWFzOiJ2cGFpZCJ9O24uaG9tYWRfdXJsX3N1ZmZpeD1hO24uaG9tYWRfdXJsX3N1ZmZpeF9iYXNlNjQ9dGhpcy52YihhKTtuLmhvbWFkX3JldHVybl9vbmx5X3VybF9hbmRfaGFzaD0idHJ1ZSI7bi5ob21hZF9oYXNoX2d1ZXNzZWQ9InRydWUiO2YmJmYucG9zdCYmKG5bIlgtSG9tYWQtUG9zdCJdPSJ0cnVlIik7ZCYmKG4uaG9tYWRfaW50cm9zcGVjdD0iaWZyYW1lIik7bi5ob21hZF92cGFpZF9jb21wYXRpYmxlPSJ0cnVlIjtuLmhvbWFkX3ZwYWlkX2N0eD0idHJ1ZSI7ZiYmZi5vbmx5VVJMJiYobi5ob21hZF9yZXBsYWNlX3VybHNfaW5fdGFncz0iTWVkaWFGaWxlIik7dmFyIGM9ITE7ZD0hMTtkPXRoaXMuWWEoYSxiLkphLG4sZnVuY3Rpb24oYSl7Yz1hLnJlc3BvbnNlVGV4dH0sCmZ1bmN0aW9uKCl7fSxiLCEwKTt0cnl7Y3x8KGM9ZCksYz1KU09OLnBhcnNlKGMpfWNhdGNoKGUpe2M9ITF9Yy51cmwmJmMuaGFzaCYmKGM9Yi51ZCgpLnJlcGxhY2UoIltoYXNoXSIsYy5oYXNoKSk7dGhpcy5nbihjLGEpO3JldHVybiBjfSxZYTpmdW5jdGlvbihhLGIsZCxmLG4sYyxlLGcpe3ZhciBrPWN8fGw7Yz0hMDtnJiYoYz0hMSk7aWYoayYmay5YKWlmKGsuaXNFbmFibGVkKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSl0cnl7YT1hKCl9Y2F0Y2gobSl7bihtKX1pZigic3RyaW5nIiE9dHlwZW9mIGEpbigpO2Vsc2V7ay56YShhLGMpO2M9ay56YShhLGMpO2MuZGF0YS5ob21hZF91cmxfcHJlZml4X2FsaWFzPWI7Yy5kYXRhLmhvbWFkX2hhc2hfZ3Vlc3NlZD0idHJ1ZSI7Zm9yKHZhciByIGluIGQpYy5kYXRhW3JdPWRbcl07cmV0dXJuIGsuTGEoYyxmLG4sIiIsIiIsZSl9fWVsc2UgbigpO2Vsc2Ugd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLllhKGEsYixkLGYsbiwKayxlLGcpfS5iaW5kKHRoaXMpLDUwMCl9LGVoOmZ1bmN0aW9uKGEsYixkLGYsYyxlLGcpe3ZhciBrPSEwO2cmJihrPSExKTtpZigic3RyaW5nIiE9dHlwZW9mIGQpe2c9ZDtkPSIiO2Zvcih2YXIgbSBpbiBnKWQrPSImIittKyI9IitlbmNvZGVVUklDb21wb25lbnQoZ1ttXSk7ZD1kLnN1YnN0cigxKX12YXIgbD1uZXcgWE1MSHR0cFJlcXVlc3Q7bC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshZnx8NCE9bC5yZWFkeVN0YXRlfHwyMDAhPWwuc3RhdHVzJiYyMDEhPWwuc3RhdHVzfHxmKGwpO2MmJjQ9PWwucmVhZHlTdGF0ZSYmMjAwIT1sLnN0YXR1cyYmMjAxIT1sLnN0YXR1cyYmYyhsKX07dHJ5e2wub3BlbihiLGEsayksbC53aXRoQ3JlZGVudGlhbHM9ZSwwPGQubGVuZ3RoJiZsLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpLGwuc2VuZChkKX1jYXRjaChyKXtjJiZjKCl9cmV0dXJuIGx9LEtyOmZ1bmN0aW9uKGEsCmIsZCl7dGhpcy5laChhLCJHRVQiLCIiLGZ1bmN0aW9uKGEpe2E9YS5yZXNwb25zZVRleHQ7aWYodGhpcy5LYylmb3IodmFyIGMgaW4gdGhpcy5LYylhPWEuc3BsaXQoYykuam9pbih0aGlzLktjW2NdKTtjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2MudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtjLnNyYz0iZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIrZS52YihhKTtkJiYoYy5vbmVycm9yPWQpO2RvY3VtZW50LmhlYWQuZmlyc3RDaGlsZD9kb2N1bWVudC5oZWFkLmluc2VydEJlZm9yZShjLGRvY3VtZW50LmhlYWQuZmlyc3RDaGlsZCk6ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChjKTtiJiZzZXRUaW1lb3V0KGIsMCl9LmJpbmQodGhpcyksZCl9LGZoOmZ1bmN0aW9uKGEsYixkLGYpe3ZhciBjPXtob21hZF91cmxfcHJlZml4X2FsaWFzOiJ2cGFpZCJ9O2MuaG9tYWRfdXJsX3N1ZmZpeD1hO2MuaG9tYWRfdXJsX3N1ZmZpeF9iYXNlNjQ9dGhpcy52YihhKTtjLmhvbWFkX3JldHVybl9vbmx5X3VybF9hbmRfaGFzaD0KInRydWUiO2MuaG9tYWRfaGFzaF9ndWVzc2VkPSJ0cnVlIjt0aGlzLllhKGEsZi5KYSxjLGZ1bmN0aW9uKGEpe2E9YS5yZXNwb25zZVRleHQ7dHJ5e2E9SlNPTi5wYXJzZShhKX1jYXRjaChjKXthPSExfXRoaXMuS3IoZi51ZCgpLnJlcGxhY2UoIltoYXNoXSIsYS5oYXNoKSxiLGQpfS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7fSxmLCEwKX0sSHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuS2M9YX0sRXY6ZnVuY3Rpb24oYSxiLGQsZixjKXt0aGlzLllhKGEsZCx7fSxmdW5jdGlvbihhKXt0cnl7dmFyIGQ9SlNPTi5wYXJzZShhLnJlc3BvbnNlVGV4dCk7ZFswXSYmKGQ9ZFswXSk7ZD9kLmlkPyhiPWIucmVwbGFjZSgiW2lkXSIsZC5pZCksYj1iLnJlcGxhY2UoIltwcmljZV0iLGQucHJpY2UpLGI9Yi5yZXBsYWNlKCJbYWR2ZXJ0aXNlcl0iLGQuYWR2ZXJ0aXNlciksYj1iLnJlcGxhY2UoIltjdXJsXSIsZC5jdXJsKSxiPWIucmVwbGFjZSgiW2Zvcm1hdF0iLGQuZm9ybWF0KSxiPWIucmVwbGFjZSgiW3NyY10iLApkLnNyYyksYj1iLnJlcGxhY2UoIltwcmljZXJhbmdlXSIsZC5wcmljZXJhbmdlKSxiPWIucmVwbGFjZSgiW3BpZF0iLGQucGlkKSxiPWIucmVwbGFjZSgiW3ByaW9dIixkLnByaW8pLGI9Yi5yZXBsYWNlKCJbZGlkXSIsZC5kaWQpLGMoe3BsYWNlaG9sZGVyOmIsbWFjcm86Zn0pKTpjKHtwbGFjZWhvbGRlcjoiIixtYWNybzpmfSk6Yyh7cGxhY2Vob2xkZXI6IiIsbWFjcm86Zn0pfWNhdGNoKGUpe2Moe3BsYWNlaG9sZGVyOiIiLG1hY3JvOmZ9KX19LGZ1bmN0aW9uKCl7Yyh7cGxhY2Vob2xkZXI6IiIsbWFjcm86Zn0pfSl9LFBuOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0hMTshYjspe3ZhciBkPWEubGFzdEluZGV4T2YoIkVOQ09ERSgiKTswPmQ/Yj0hMDooZD1hLnN1YnN0cmluZyhkKzcsYS5pbmRleE9mKCIpIixkKSksYT1hLnJlcGxhY2UoIkVOQ09ERSgiK2QrIikiLGVuY29kZVVSSUNvbXBvbmVudChkKSkpfXJldHVybiBhfSxrcjpmdW5jdGlvbihhLGIpe3ZhciBkPSExO2lmKGIpZm9yKHZhciBmPQowO2Y8Yi5sZW5ndGg7ZisrKWlmKGJbZl09PWEpe2Q9ITA7YnJlYWt9cmV0dXJuIGR9fX0pKGMpO3ZhciBSPWMuJGp8fFI7bmV3IFI7dmFyIGU9bmV3IFI7KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoYSl7dGhpcy5kYXRhPWF8fHt9fWMuWmo9YjtiLlhhPWZ1bmN0aW9uKGEsYil7dmFyIGQ9e30sZjtmb3IoZiBpbiBiKWRbZl09YltmXTtmb3IoZiBpbiBhKWRbZl09YVtmXTtyZXR1cm4gZH07Yi5Rcz17Y29kZToiMTAwMCIsdHlwZToicGVuYWx0eSIsbWVzc2FnZToiIixuYW1lOiJwZW5hbHR5In07Yi5kcz17Y29kZToiMTAwMSIsdHlwZToibWVkaWFlcnJvciIsbWVzc2FnZToiIixuYW1lOiJhZEVycm9yIn07Yi5udj17Y29kZToiMTAwMiIsdHlwZToidnBhaWQiLG1lc3NhZ2U6IiIsbmFtZToidnBhaWQifTtiLnlwPXtjb2RlOiIxMDAzIix0eXBlOiJlbXB0eVZhc3QiLG1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IueHY9e2NvZGU6IjEwMDQiLHR5cGU6Im1hbGZvcm1hdHRlZFhNTCIsCm1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IuVWY9e2NvZGU6IjEwMDUiLHR5cGU6ImFkU3RhcnQiLG1lc3NhZ2U6IiIsbmFtZToiYWRTdGFydCJ9O2IuTmY9e2NvZGU6IjEwMDYiLHR5cGU6ImFkRmlyc3RRdWFydGlsZSIsbWVzc2FnZToiIixuYW1lOiJhZEZpcnN0UXVhcnRpbGUifTtiLlJmPXtjb2RlOiIxMDA3Iix0eXBlOiJhZE1pZFBvaW50IixtZXNzYWdlOiIiLG5hbWU6ImFkTWlkUG9pbnQifTtiLlZmPXtjb2RlOiIxMDA4Iix0eXBlOiJhZFRoaXJkUXVhcnRpbGUiLG1lc3NhZ2U6IiIsbmFtZToiYWRUaGlyZFF1YXJ0aWxlIn07Yi4kbT17Y29kZToiMTAwOSIsdHlwZToiYWRDb21wbGV0ZSIsbWVzc2FnZToiIixuYW1lOiJhZENvbXBsZXRlIn07Yi5QZj17Y29kZToiMTAxMCIsdHlwZToiYWRJbXByZXNzaW9uc0NhbGxlZCIsbWVzc2FnZToiIixuYW1lOiJhZEltcHJlc3Npb24ifTtiLlV1PXtjb2RlOiIxMDExIix0eXBlOiJ2YXN0TG9hZGluZ0ZhaWxlZCIsbWVzc2FnZToiIiwKbmFtZToiYWRFcnJvciJ9O2IuY3M9e2NvZGU6IjEwMTIiLHR5cGU6Im5vQ3JlYXRpdmUiLG1lc3NhZ2U6IiIsbmFtZToiYWRFcnJvciJ9O2IuenA9e2NvZGU6IjEwMTMiLHR5cGU6ImVtcHR5VmFzdEZyb21Ib21hZFNlcnZlckV2ZW50IixtZXNzYWdlOiIiLG5hbWU6ImFkRXJyb3IifTtiLnV2PXtjb2RlOiIxMDE0Iix0eXBlOiJ3cmFwcGVyTGltaXRSZWFjaGVkIixtZXNzYWdlOiIiLG5hbWU6ImFkRXJyb3IifTtiLmlnPXtjb2RlOiIxMDE1Iix0eXBlOiJjbGlja3Rocm91Z2giLG1lc3NhZ2U6IiIsbmFtZToiYWRDbGljayJ9O2IuUG89e2NvZGU6IjEwMTYiLHR5cGU6ImNvbnRpbnVlQ29udGVudCIsbWVzc2FnZToiIixuYW1lOiJjb250aW51ZUNvbnRlbnQifTtiLmdkPXtjb2RlOiIxMDE3Iix0eXBlOiJjb250ZW50UGxheWVyUGxheSIsbWVzc2FnZToiIixuYW1lOiJjb250ZW50UGxheWVyUGxheSJ9O2IuZmQ9e2NvZGU6IjEwMTgiLHR5cGU6ImNvbnRlbnRQbGF5ZXJQYXVzZSIsbWVzc2FnZToiIiwKbmFtZToiY29udGVudFBsYXllclBhdXNlIn07Yi5UZj17Y29kZToiMTAxOSIsdHlwZToiYWRTa2lwcGVkIixtZXNzYWdlOiIiLG5hbWU6ImFkU2tpcHBlZCJ9O2IuYm49e2NvZGU6IjEwMjAiLHR5cGU6ImFkUmVxdWVzdCIsbWVzc2FnZToiIixuYW1lOiJhZFJlcXVlc3QifTtiLlVjPXtjb2RlOiIxMDIxIix0eXBlOiJhZFBsYXkiLG1lc3NhZ2U6IiIsbmFtZToiYWRQbGF5In07Yi5ZZD17Y29kZToiMTAyMiIsdHlwZToiYWRQYXVzZSIsbWVzc2FnZToiIixuYW1lOiJhZFBhdXNlIn07Yi4kZD17Y29kZToiMTAyMyIsdHlwZToiYWRUaW1lIixtZXNzYWdlOiIiLG5hbWU6ImFkVGltZSJ9O2IuYW49e2NvZGU6IjEwMjQiLHR5cGU6ImFkTWV0YSIsbWVzc2FnZToiIixuYW1lOiJhZE1ldGEifTtiLmJpPXtjb2RlOiIxMDI1Iix0eXBlOiJ2aWV3YWJsZSIsbWVzc2FnZToiIixuYW1lOiJ2aWV3YWJsZSJ9O2IuZnM9e2NvZGU6IjEwMjYiLHR5cGU6Im5vdFZpZXdhYmxlIixtZXNzYWdlOiIiLG5hbWU6Im5vdFZpZXdhYmxlIn07CmIueGQ9e2NvZGU6IjEwMjciLHR5cGU6Im11dGUiLG1lc3NhZ2U6IiIsbmFtZToibXV0ZSJ9O2IudGY9e2NvZGU6IjEwMjgiLHR5cGU6InVubXV0ZSIsbWVzc2FnZToiIixuYW1lOiJ1bm11dGUifTtiLmpnPXtjb2RlOiIxMDI5Iix0eXBlOiJjb250ZW50UGxheWVyTXV0ZWQiLG1lc3NhZ2U6IiIsbmFtZToiY29udGVudFBsYXllck11dGVkIn07Yi5tdj17Y29kZToiMTAzMCIsdHlwZToidnBhaWRlcnJvciIsbWVzc2FnZToiIixuYW1lOiJhZEVycm9yIn07Yi5SdT17Y29kZToiOTAwMSIsdHlwZToidmFyaWFibGVEZWxldGVkRXZlbnQiLG1lc3NhZ2U6IiIsbmFtZToidmFyaWFibGVEZWxldGVkRXZlbnQifTtiLmVzPXtjb2RlOiI5MDAyIix0eXBlOiJub1ZhcmlhYmxlU2V0dGluZ0V2ZW50IixtZXNzYWdlOiIiLG5hbWU6Im5vVmFyaWFibGVTZXR0aW5nRXZlbnQifTtiLnByb3RvdHlwZT17Z2V0RXJyb3JDb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3JDb2RlfX19KShjKTt2YXIgaz0KYy5aanx8aztjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5odT10aGlzLmFbMl07dGhpcy5Iaz10aGlzLmFbMV07dGhpcy5LdT10aGlzLmFbOF07dGhpcy5QcD10aGlzLmFbN107dGhpcy5FaT10aGlzLmFbNF07dGhpcy5Gaj10aGlzLmFbMV07dGhpcy52dT10aGlzLmFbNF07dGhpcy5vbD10aGlzLmFbNV07dGhpcy5Mbz10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs2XX1jLkFsPWI7Yi5wcm90b3R5cGU9e2d1OmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5odTp0aGlzLkdrKGEpfSxHazpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuSGs6dGhpcy5KdShhKX0sSnU6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLkt1OnRoaXMuT3AoYSl9LE9wOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5QcDp0aGlzLkRpKGEpfSxEaTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuRWk6CnRoaXMuRWooYSl9LEVqOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5Gajp0aGlzLnV1KGEpfSx1dTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMudnU6dGhpcy5ubChhKX0sbmw6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLm9sOnRoaXMuS28oYSl9LEtvOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5Mbzp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmo6YX19fSkoYyk7dmFyIGthPWMuQWx8fGthLG1jPW5ldyBrYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPW1jLmd1KDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7fWMuYWs9YjtiLnByb3RvdHlwZT17dmU6ZnVuY3Rpb24oYSl7dmFyIGI9MCxkLGYsYztpZigwPT1hLmxlbmd0aClyZXR1cm4gYjtkPTA7Zm9yKGM9YS5sZW5ndGg7ZDxjO2QrKylmPWEuY2hhckNvZGVBdChkKSwKYj0oYjw8NSktYitmLGJ8PTA7cmV0dXJuIE1hdGguYWJzKGIpfSxqYTpmdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKERhdGUubm93KCkvMUUzLzM2MDAvMjQpK25hdmlnYXRvci5hcHBDb2RlTmFtZStuYXZpZ2F0b3IuYXBwTmFtZStuYXZpZ2F0b3IuYXBwVmVyc2lvbituYXZpZ2F0b3IudXNlckFnZW50K25hdmlnYXRvci5wbGF0Zm9ybSsobmF2aWdhdG9yLmxhbmd1YWdlfHxuYXZpZ2F0b3IuRHx8IngiKX0sa3E6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yb3VuZChEYXRlLm5vdygpLzFFMy8zNjAwKStuYXZpZ2F0b3IuYXBwQ29kZU5hbWUrbmF2aWdhdG9yLmFwcE5hbWUrbmF2aWdhdG9yLmFwcFZlcnNpb24rbmF2aWdhdG9yLnVzZXJBZ2VudCtuYXZpZ2F0b3IucGxhdGZvcm0rKG5hdmlnYXRvci5sYW5ndWFnZXx8bmF2aWdhdG9yLkR8fCJ4IikrKG5ldyBEYXRlKS50b1RpbWVTdHJpbmcoKS5zdWJzdHIoLTEyKX0sb2Q6ZnVuY3Rpb24oYSl7YT1wYXJzZUludChhKTtpZig2NTw9CmEmJjkwPj1hfHw5Nzw9YSYmMTIyPj1hKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGEpO2lmKDA+PWEpcmV0dXJuIiI7aWYoNjU+YSlyZXR1cm4gdGhpcy5vZChhKzY1KTtpZig5MDxhKXJldHVybiB0aGlzLm9kKE1hdGgucm91bmQoYS8yKSl9LHJldmVyc2U6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGQ9YS5sZW5ndGgtMSxiPSIiOzA8PWQ7Yis9YVtkLS1dKTtyZXR1cm4gYn0saWE6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy52ZSh0aGlzLmphKCkrIiIpLGE9KGErIiIrdGhpcy5yZXZlcnNlKGErIiIpKS5tYXRjaCgvLnsxLDJ9L2cpLGI9IiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWIrPXRoaXMub2QoYVtkXSk7MD09Yi5sZW5ndGgmJihiPSJ6b3JrIik7cmV0dXJuIGJ9LGZyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWEoKSsiMiJ9LFRnOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMudmUodGhpcy5rcSgpKyIiKSxhPShhKyIiK3RoaXMucmV2ZXJzZShhKyIiKSkubWF0Y2goLy57MSwyfS9nKSwKYj0iIixkPTA7ZDxhLmxlbmd0aDtkKyspYis9dGhpcy5vZChhW2RdKTswPT1iLmxlbmd0aCYmKGI9InpvcmsiKTtyZXR1cm4gYn19fSkoYyk7dmFyIEo9Yy5ha3x8SjtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5kbT10aGlzLmFbOV07dGhpcy5xdj10aGlzLmFbMl07dGhpcy5tbz10aGlzLmFbMV07dGhpcy5QdT10aGlzLmFbNl07dGhpcy5DaT10aGlzLmFbNl07dGhpcy5xbj10aGlzLmFbN107dGhpcy53az10aGlzLmFbM107dGhpcy5qPXRoaXMuYVszXX1jLlNvPWI7Yi5wcm90b3R5cGU9e2NtOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5kbTp0aGlzLnB2KGEpfSxwdjpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMucXY6dGhpcy5sbyhhKX0sbG86ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLm1vOnRoaXMuT3UoYSl9LE91OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhPwp0aGlzLlB1OnRoaXMuQmkoYSl9LEJpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5DaTp0aGlzLnBuKGEpfSxwbjpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMucW46dGhpcy52ayhhKX0sdms6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLndrOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuajphfX19KShjKTt2YXIgbGE9Yy5Tb3x8bGEsbmM9bmV3IGxhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9bmMuY20oNCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe312YXIgYT0veHl6Ly50ZXN0KGZ1bmN0aW9uKCl7eHl6fSk/L1xiX3N1cGVyXGIvOi8uKi87Yi5leHRlbmQ9ZnVuY3Rpb24oaCl7dmFyIGQ9dGhpcy5wcm90b3R5cGUsZj1PYmplY3QuY3JlYXRlKGQpLGM7Zm9yKGMgaW4gaClmW2NdPSJmdW5jdGlvbiI9PT0KdHlwZW9mIGhbY10mJiJmdW5jdGlvbiI9PXR5cGVvZiBkW2NdJiZhLnRlc3QoaFtjXSk/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD10aGlzLm07dGhpcy5tPWRbYV07dmFyIGY9Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5tPWg7cmV0dXJuIGZ9fShjLGhbY10pOmhbY107aD0iZnVuY3Rpb24iPT09dHlwZW9mIGYubD9mLmhhc093blByb3BlcnR5KCJpbml0Iik/Zi5sOmZ1bmN0aW9uKCl7ZC5sLmFwcGx5KHRoaXMsYXJndW1lbnRzKX06ZnVuY3Rpb24oKXt9O2gucHJvdG90eXBlPWY7Zi5jb25zdHJ1Y3Rvcj1oO2guZXh0ZW5kPWIuZXh0ZW5kO3JldHVybiBofTtjLmlqPWJ9KShjKTt2YXIgTT1jLmlqfHxNO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnVzPXRoaXMuYVs4XTt0aGlzLkFvPXRoaXMuYVsyXTt0aGlzLmlpPXRoaXMuYVs3XTt0aGlzLkJuPQp0aGlzLmFbNV07dGhpcy5UdD10aGlzLmFbOV07dGhpcy5zcz10aGlzLmFbNV07dGhpcy5XdT10aGlzLmFbOF07dGhpcy5qPXRoaXMuYVsxXX1jLlNrPWI7Yi5wcm90b3R5cGU9e3RzOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy51czp0aGlzLnpvKGEpfSx6bzpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuQW86dGhpcy5oaShhKX0saGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5paTp0aGlzLkFuKGEpfSxBbjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuQm46dGhpcy5TdChhKX0sU3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlR0OnRoaXMucnMoYSl9LHJzOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5zczp0aGlzLlZ1KGEpfSxWdTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuV3U6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBtYT1jLlNrfHxtYSxvYz1uZXcgbWEoMSxuZXcgRGF0ZSwKMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9b2MudHMoNCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7Yy5zbD1NLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLk1hPXt9O3RoaXMuSz1udWxsO3RoaXMuR2M9MTAwO3RoaXMuRmI9MDt0aGlzLlVhPTE1MDt0aGlzLkhiPTA7dGhpcy5DdChiKX0sZzpmdW5jdGlvbigpe30sUjpmdW5jdGlvbigpe3RoaXMuRmI8PXRoaXMuVWE/KHRoaXMuRmIrKyx0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuZy5iaW5kKHRoaXMpLHRoaXMuR2MpKTowPnRoaXMuVWEmJih0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuZy5iaW5kKHRoaXMpLHRoaXMuR2MpKX0sb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GYj50aGlzLlVhPyEwOiExfSxhZjpmdW5jdGlvbigpe3RoaXMuRmI9MH0sTzpmdW5jdGlvbigpe3JldHVybiJlbXB0eSJ9LEN0OmZ1bmN0aW9uKGIpe3RoaXMuSz0KYn0saXE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LfSxQOmZ1bmN0aW9uKGIpe2UudHJhY2soInN0YXRzX3BsYXllciIsYi5PKCksITApO3RoaXMuTWFbYi5qYSgpXT1iO04mJk4uYWgmJk4uYXUoYil9LCR2OmZ1bmN0aW9uKCl7cmV0dXJuIGUudGUodGhpcy5NYSl9LE46ZnVuY3Rpb24oYil7dmFyIGE9Yi52aWRlb1RhZyxoO2ZvcihoIGluIHRoaXMuTWEpaWYoYT09dGhpcy5NYVtoXS52aWRlb1RhZylyZXR1cm4hMDtyZXR1cm4gdGhpcy5NYVtiLmphKCldPyEwOiExfSxscjpmdW5jdGlvbihiKXtiPWIuSWEoKTtmb3IodmFyIGEgaW4gdGhpcy5NYSlpZihiLmlkPT10aGlzLk1hW2FdLklhKCkuaWQpcmV0dXJuITA7cmV0dXJuITF9LHB3OmZ1bmN0aW9uKGIpe3RoaXMuTWFbYi5pZF09bnVsbH19KX0pKGMpO3ZhciBxPWMuc2x8fHE7KGZ1bmN0aW9uKGMpe2MudWw9TS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy52aWRlb1RhZz10aGlzLmNvbnRhaW5lcj10aGlzLmlkPW51bGw7dGhpcy5HYz0KMTA7dGhpcy5GYj0wO3RoaXMuVWE9NTA7dGhpcy5WPW51bGw7dGhpcy5xYT0hMTt0aGlzLnBsYXllcj1iO3RoaXMuemI9IiI7dGhpcy5uZz0hMTt0aGlzLlMoKX0sTzpmdW5jdGlvbigpe3JldHVybiJlbXB0eSJ9LHU6ZnVuY3Rpb24oKXt2YXIgYj17fSxhPXRoaXMudmlkZW9UYWcsaD10aGlzLklhKCksZD10aGlzLmdldFJhd1BsYXllcigpO2lmKGIudmlkZW9UYWc9YSliLnZpZGVvVGFnSWQ9YS5pZDtpZihiLmNvbnRhaW5lcj1oKWIuY29udGFpbmVySWQ9aC5pZDtkJiYoYi5wbGF5ZXI9ZCk7cmV0dXJuIGJ9LFM6ZnVuY3Rpb24oKXt9LE5hOmZ1bmN0aW9uKCl7fSxLdDpmdW5jdGlvbihiKXt0aGlzLlY9Yn0sYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5WfSxGdDpmdW5jdGlvbihiKXt0aGlzLk1lPWJ9LFp2OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTWV9LExlOmZ1bmN0aW9uKCl7fSxSOmZ1bmN0aW9uKCl7dGhpcy5GYjw9dGhpcy5VYSYmKHRoaXMuRmIrKyx3aW5kb3cuc2V0VGltZW91dCh0aGlzLlMuYmluZCh0aGlzKSwKdGhpcy5HYykpfSxpc0Z1bGxzY3JlZW46ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0cnl7aWYoZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4pZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKVsiY2F0Y2giXShmdW5jdGlvbigpe30pO2Vsc2UgaWYoZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4pZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4oKTtlbHNlIGlmKGRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4pZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpO2Vsc2UgaWYoZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbilkb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuKCk7ZWxzZSByZXR1cm4hMX1jYXRjaChiKXt9fSxCZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLklhKCl9LHBhdXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGxheWVyLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXIucGxheSgpfSxqYTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfSwKRmQ6ZnVuY3Rpb24oYil7dGhpcy5pZD1ifSxydzpmdW5jdGlvbigpe30sWjpmdW5jdGlvbihiKXtpZighYilyZXR1cm4hMTt0aGlzLnZpZGVvVGFnPWI7dGhpcy5GcSgpfHx0aGlzLmNuKCk7dGhpcy5GZCh0aGlzLnZpZGVvVGFnLmdldEF0dHJpYnV0ZSgiaWQiKSl9LGJ3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW9UYWd9LGNuOmZ1bmN0aW9uKCl7dGhpcy52aWRlb1RhZy5zZXRBdHRyaWJ1dGUoImlkIixlLmJhKDEwKSl9LEZxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW9UYWcuZ2V0QXR0cmlidXRlKCJpZCIpPyEwOiExfSxZOmZ1bmN0aW9uKGIpe3RoaXMuY29udGFpbmVyPWJ9LElhOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLmNvbnRhaW5lcj90aGlzLmNvbnRhaW5lcigpOnRoaXMuY29udGFpbmVyfSxnZXRSYXdQbGF5ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXJ9LEFlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LGlzUGxheWluZzpmdW5jdGlvbigpe3JldHVybiEwfSwKZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnO3JldHVybiBiJiZiLmN1cnJlbnRUaW1lP2IuY3VycmVudFRpbWU6MH0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnO3JldHVybiBiJiZiLmR1cmF0aW9uP2IuZHVyYXRpb246MH0sVmE6ZnVuY3Rpb24oKXtyZXR1cm4hMX0saXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xYX0scGE6ZnVuY3Rpb24oKXt0aGlzLnFhPSEwfSxIYzpmdW5jdGlvbigpe3ZhciBiPW07cmV0dXJuIGImJmIucnVuSW5zaWRlQ29udGFpbmVyPyEwOiExfSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGImJmIubXV0ZWQ/Yi5tdXRlZDohMX0sR2U6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sQ2g6ZnVuY3Rpb24oYil7dGhpcy56Yj1ifSxZdjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnpifSx5aDpmdW5jdGlvbigpe3RoaXMuemI9bnVsbH0sZHc6ZnVuY3Rpb24oKXt2YXIgYj0hMTt0aGlzLnpiJiYKKGI9ITApO3JldHVybiBifSxsdzpmdW5jdGlvbigpe3RoaXMubmd8fCh0aGlzLm5nPSEwKX0scWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sVnY6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPXRoaXMudmlkZW9UYWc7YSYmYS5nZXRBdHRyaWJ1dGUoImlkIikmJihiPWEuZ2V0QXR0cmlidXRlKCJpZCIpKTtyZXR1cm4gYn19KX0pKGMpO3ZhciB1PWMudWx8fHU7KGZ1bmN0aW9uKGMpe2Mubmk9TS5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLks9dGhpcy5wbGF5ZXI9IiI7dGhpcy5KZj0iMSI7dGhpcy5LZj0iMiI7dGhpcy5XbT0iMyI7dGhpcy5QYz0wO3RoaXMuaWg9MzA7dGhpcy5MYj1bXTt0aGlzLmZiPVtdO3RoaXMuaWM9e2V4dGVybmFsOjEsbm9mcmFtZXdvcms6MixhZGVycm9yOjMsY29udGVudHBsYXk6NCxub0Fkc01hbmFnZXI6NSx1bmtub3duOjZ9O3RoaXMuWGY9dGhpcy5ZaD0hMTt0aGlzLnN0YXR1cz10aGlzLlBjO3RoaXMuaWQ9ZS5iYSgxMCk7dGhpcy5mZihiKTt0aGlzLkR0KGEpfSwKZzpmdW5jdGlvbigpe30sdGE6ZnVuY3Rpb24oKXt0aGlzLllofHwodGhpcy5ZaD0hMCxlLkplKCkpfSxQZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuTygpO1MmJlMuVWImJiFuYSYmKG5hPSEwLGUudHJhY2soInBvc3NpYmxlRG91YmxlQWQiLCIxMDRfIitiKSl9LGJyOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKSxhPW5ldyBKO3dpbmRvd1thLmlhKCldfHwod2luZG93W2EuaWEoKV09e30pO3dpbmRvd1thLmlhKCldW2IuamEoKV18fCh3aW5kb3dbYS5pYSgpXVtiLmphKCldPXt9LHdpbmRvd1thLmlhKCldW2IuamEoKV0uaW5pdGlhdG9yPWUuemMoKSk7d2luZG93W2EuaWEoKV1bYi5qYSgpXVtlLnpjKCldP3dpbmRvd1thLmlhKCldW2IuamEoKV1bZS56YygpXSsrOndpbmRvd1thLmlhKCldW2IuamEoKV1bZS56YygpXT0xfSxpcjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCksYT0hMCxoPW5ldyBKO3dpbmRvd1toLmlhKCldJiZ3aW5kb3dbaC5pYSgpXVtiLmphKCldJiYKd2luZG93W2guaWEoKV1bYi5qYSgpXS5pbml0aWF0b3IhPWUuemMoKSYmKHRoaXMuZ2YoKSxhPSExKTtyZXR1cm4gYX0sSTpmdW5jdGlvbihiLGEpe3ZhciBoPSEwO2ImJihoPSExKTtpZighdGhpcy51YSgpKXt0aGlzLmJyKCk7aWYoIXRoaXMuaXIoKSl7ZS50cmFjaygic3RhdHNfaGRfZG91YmxlTWFpbiIsIiIsITApO3RoaXMuZ2YoKTtyZXR1cm59dGhpcy5nZigpO3RoaXMuSyh0aGlzLmdldFBsYXllcigpLGgpO3RoaXMuUmgoKTt0aGlzLlhmPSEwO2EmJiJmdW5jdGlvbiI9PXR5cGVvZiBhJiZhKCk7cmV0dXJuITB9cmV0dXJuITF9LG86ZnVuY3Rpb24oYixhKXt0aGlzLnVhKCl8fCh0aGlzLkxiLnB1c2goYiksdGhpcy5mYi5wdXNoKHtyZWFzb246YixkZXRhaWw6YX0pKX0sUmg6ZnVuY3Rpb24oKXt2YXIgYj0idW5rbm93biIsYT1bXTt0aGlzLkxiJiYwPHRoaXMuTGIubGVuZ3RoJiYodGhpcy5MYj1lLnVuaXF1ZSh0aGlzLkxiKSxlLnRyYWNrKCJhY3RpdmF0ZWRCeSIsdGhpcy5MYi5qb2luKCIsIikpKTsKaWYodGhpcy5mYil7Zm9yKHZhciBoPTA7aDx0aGlzLmZiLmxlbmd0aDtoKyspdGhpcy5pY1t0aGlzLmZiW2hdLnJlYXNvbl09PXRoaXMuaWNbYl0mJmEucHVzaCh0aGlzLmZiW2hdLmRldGFpbCksdGhpcy5pY1t0aGlzLmZiW2hdLnJlYXNvbl08dGhpcy5pY1tiXSYmKGE9W10sYS5wdXNoKHRoaXMuZmJbaF0uZGV0YWlsKSxiPXRoaXMuZmJbaF0ucmVhc29uKTt0aGlzLmljW2JdfHwoYj0idW5rbm93biIsYT1bXSk7MDxhLmxlbmd0aCYmKGg9ZS51bmlxdWUoYSksYj1iKyItIitoLmpvaW4oIi0iKSk7ZS50cmFjaygic3RhdHNfaGRfYWN0aXZhdGVkIixiLCEwLGEpfX0sY3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5YZn0sdzpmdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMuSmZ9LGdmOmZ1bmN0aW9uKCl7dGhpcy5zdGF0dXM9dGhpcy5LZn0sSXQ6ZnVuY3Rpb24oKXt0aGlzLnN0YXR1cz10aGlzLldtfSxyYTpmdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMuUGN9LE9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT0KdGhpcy5KZn0sTXY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0dXM9PXRoaXMuS2Z9LHVhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdHVzIT10aGlzLlBjfSxmZjpmdW5jdGlvbihiKXt0aGlzLnBsYXllcj1ifSxnZXRQbGF5ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXJ9LER0OmZ1bmN0aW9uKGIpe3RoaXMuSz1ifSxpcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLkt9LE5yOmZ1bmN0aW9uKCl7fX0pfSkoYyk7dmFyIHY9Yy5uaXx8djtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5Qcj10aGlzLmFbOV07dGhpcy5CcT10aGlzLmFbNV07dGhpcy50cj10aGlzLmFbMl07dGhpcy5QaT10aGlzLmFbN107dGhpcy5Ubj10aGlzLmFbNl07dGhpcy5VbT10aGlzLmFbNV07dGhpcy5LbD10aGlzLmFbOF07dGhpcy5qPXRoaXMuYVs0XX1jLkVuPWI7Yi5wcm90b3R5cGU9e09yOmZ1bmN0aW9uKGEpe3JldHVybiA5PAphP3RoaXMuUHI6dGhpcy5BcShhKX0sQXE6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkJxOnRoaXMuc3IoYSl9LHNyOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy50cjp0aGlzLk9pKGEpfSxPaTpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuUGk6dGhpcy5TbihhKX0sU246ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLlRuOnRoaXMuVG0oYSl9LFRtOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5VbTp0aGlzLkpsKGEpfSxKbDpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuS2w6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBvYT1jLkVufHxvYSxwYz1uZXcgb2EoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1wYy5Pcig0KTsoZnVuY3Rpb24oYyl7Yy5Paj11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb0NvbnRhaW5lcjt0aGlzLlkoYik7Yj10aGlzLmdldFJhd1BsYXllcigpLnZpZGVvO3RoaXMuWihiKTt0aGlzLmlzUGxheWluZz0hMTtiLmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5pc1BsYXlpbmc9ITB9LmJpbmQodGhpcykpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheSgpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkV4cFBsYXllciJ9fSl9KShjKTt2YXIgcGE9Yy5Panx8cGE7KGZ1bmN0aW9uKGMpe2MuUGo9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCksYT1iLk52O2E/YS5uYT9hLm5hLmFkZEV2ZW50TGlzdGVuZXIoImFkRXJyb3IiLGZ1bmN0aW9uKGEpe3ZhciBiPQohMSxmPSIiO2EuZ2V0RXJyb3ImJihiPWEuZ2V0RXJyb3IoKSk7Ynx8YS5kZXRhaWwuZ2V0RXJyb3ImJihiPWEuZGV0YWlsLmdldEVycm9yKCkpO2IuZ2V0RXJyb3JDb2RlJiYoZis9Yi5nZXRFcnJvckNvZGUoKSk7Yi5nZXRNZXNzYWdlJiYoZis9Yi5nZXRNZXNzYWdlKCkpO2YuaW5kZXhPZiYmKDA8PWYuaW5kZXhPZigiMTAwOSIpfHwwPD1mLmluZGV4T2YoIjMwMyIpfHwwPD1mLmluZGV4T2YoIjQwMyIpKT8odGhpcy53KCksdGhpcy50YSgpKToodGhpcy5vKCJhZGVycm9yIiksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZygpfS5iaW5kKHRoaXMpLDEwMCk6Yi5fYWRDb25maWcuYWRzRGlzYWJsZWR8fCh0aGlzLm8oImZyYW1ld29yayIpLHRoaXMucygpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nP3RoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcyksCjEwKX19KX0pKGMpO3ZhciBxYT1jLlBqfHxxYTsoZnVuY3Rpb24oYyl7Yy5Raj1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZih3aW5kb3cucGxheWVyTWFuYWdlciYmd2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycyYmd2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycygpWzBdKXt2YXIgYj1uZXcgcGEod2luZG93LnBsYXllck1hbmFnZXIuZ2V0QWxsUGxheWVycygpWzBdKTt0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBxYShiLHRoaXMuSykpLmcoKSl9dGhpcy5SKCl9fSl9KShjKTt2YXIgcmE9Yy5Ranx8cmE7KG5ldyByYShyKSkuZygpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnR0PXRoaXMuYVs4XTt0aGlzLmJtPXRoaXMuYVs3XTt0aGlzLkJqPXRoaXMuYVs1XTt0aGlzLmhvPXRoaXMuYVsyXTt0aGlzLmhtPQp0aGlzLmFbMV07dGhpcy5Sbj10aGlzLmFbM107dGhpcy5saj10aGlzLmFbNl07dGhpcy5pcD10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVs3XX1jLkJzPWI7Yi5wcm90b3R5cGU9e3N0OmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy50dDp0aGlzLmFtKGEpfSxhbTpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuYm06dGhpcy5BaihhKX0sQWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkJqOnRoaXMuZm8oYSl9LGZvOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5obzp0aGlzLmdtKGEpfSxnbTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuaG06dGhpcy5RbihhKX0sUW46ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLlJuOnRoaXMua2ooYSl9LGtqOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5sajp0aGlzLmhwKGEpfSxocDpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuaXA6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpOwp2YXIgc2E9Yy5Cc3x8c2EscWM9bmV3IHNhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9cWMuc3QoNCk7KGZ1bmN0aW9uKGMpe2MucWs9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dGhpcy5WYj0hMTt0aGlzLnNnKCk7dGhpcy51ZygpO3RoaXMuT289ITF9LHNnOmZ1bmN0aW9uKCl7dGhpcy5WYj0hMTt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnBsYXllci5pZCk7Ynx8KHRoaXMuVmI9ITApO2lmKCJPQkpFQ1QiPT1iLm5vZGVOYW1lfHwiVklERU8iPT1iLm5vZGVOYW1lKWI9Yi5wYXJlbnROb2RlO3RoaXMuWShiKX0sdWc6ZnVuY3Rpb24oKXtpZighdGhpcy5WYil7dmFyIGI9dGhpcy5JYSgpLGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXTthfHwoYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7CmF8fCh0aGlzLlZiPSEwKTt0aGlzLlooYSl9fSxOYTpmdW5jdGlvbigpe3ZhciBiPXRoaXMucGxheWVyO2lmKG0ucG9zdHJvbGxVc2VDb21wbGV0ZUV2ZW50KWIuX2V2ZW50cy5iZWZvcmVDb21wbGV0ZS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OnRoaXMucGxheWVyLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy5WJiYoMCx0aGlzLlYpKCl9LmJpbmQodGhpcyl9KTtlbHNlIGlmKGIuX2V2ZW50cyYmYi5fZXZlbnRzLnRpbWUmJmIuX2V2ZW50cy50aW1lLnB1c2goe2NvbnRleHQ6bnVsbCxjdHg6dGhpcy5wbGF5ZXIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7YS5kdXJhdGlvbiYmYS5wb3NpdGlvbiYmMT5hLmR1cmF0aW9uLWEucG9zaXRpb24mJnRoaXMuViYmKDAsdGhpcy5WKSgpfS5iaW5kKHRoaXMpfSksYi5vblRpbWUpYi5vblRpbWUoZnVuY3Rpb24oYSl7YS5kdXJhdGlvbiYmYS5wb3NpdGlvbiYmMT5hLmR1cmF0aW9uLWEucG9zaXRpb24mJnRoaXMuViYmKDAsdGhpcy5WKSgpfS5iaW5kKHRoaXMpKX0sCkxlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRFcnJvciYmYi5fZXZlbnRzLmFkRXJyb3IucHVzaCh7Y29udGV4dDpudWxsLGN0eDpiLGNhbGxiYWNrOmZ1bmN0aW9uKGEpe3RoaXMuSGQoYSl9LmJpbmQodGhpcyl9KTtpZihiLm9uQWRFcnJvciliLm9uQWRFcnJvcihmdW5jdGlvbihhKXt0aGlzLkhkKGEpfS5iaW5kKHRoaXMpKX0sSGQ6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5wbGF5ZXI7YS5nZXRQb3NpdGlvbigpO2EuZ2V0UG9zaXRpb24oKTthLmdldER1cmF0aW9uKCk7YS5nZXRQb3NpdGlvbigpO2EuZ2V0RHVyYXRpb24oKTthLmdldFBvc2l0aW9uKCk7Im1pZCI9PWIuYWRwb3NpdGlvbiYmYS5nZXRQb3NpdGlvbiYmMzA8YS5nZXRQb3NpdGlvbigpJiYzMDxhLmdldER1cmF0aW9uKCktYS5nZXRQb3NpdGlvbigpJiZ0aGlzLk1lJiYoMCx0aGlzLk1lKSgpfSxwbGF5OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7aWYoIWIuZ2V0U3RhdGV8fAoicGxheWluZyIhPWIuZ2V0U3RhdGUoKXx8dGhpcy52aWRlb1RhZy5wYXVzZWQpcmV0dXJuIHRoaXMucGxheWVyLnBsYXkoKX0scGF1c2U6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnBsYXllcjtyZXR1cm4gYi5nZXRTdGF0ZSYmInBhdXNlZCI9PWIuZ2V0U3RhdGUoKT8icGF1c2VkIjp0aGlzLnBsYXllci5wYXVzZSghMCl9LFZhOmZ1bmN0aW9uKCl7cmV0dXJuInBhdXNlZCI9PXRoaXMucGF1c2UoKT8hMTohMH0sTzpmdW5jdGlvbigpe3JldHVybiJKV1BsYXllciJ9LGV4aXRGdWxsc2NyZWVuOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXI7Yi5nZXRGdWxsc2NyZWVuJiZiLmdldEZ1bGxzY3JlZW4oKSYmYi5zZXRGdWxsc2NyZWVuKCl9LHZhOmZ1bmN0aW9uKCl7dmFyIGI9ITEsYT10aGlzLnBsYXllcjthLmdldE11dGUmJmEuZ2V0TXV0ZSgpJiYoYj0hMCk7cmV0dXJuIGJ9LHFlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wbGF5ZXIsYT0hMTtiLmdldFZvbHVtZSYmYi5nZXRWb2x1bWUoKSYmCihhPWIuZ2V0Vm9sdW1lKCkpO3JldHVybiBhfX0pfSkoYyk7dmFyIHRhPWMucWt8fHRhOyhmdW5jdGlvbihjKXtjLnBrPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LFM6ZnVuY3Rpb24oKXt9LHJhOmZ1bmN0aW9uKCl7dGhpcy5zdGF0dXM9dGhpcy5QYzt0aGlzLmlzUGxheWluZz10aGlzLlJjPSExO3RoaXMuWmQ9MTt0aGlzLlNjPVtdO3RoaXMudGI9ITF9LGc6ZnVuY3Rpb24oKXt0aGlzLmlzUGxheWluZz10aGlzLlJjPSExO3RoaXMuWmQ9MTt0aGlzLlNjPVtdO3RoaXMudGI9ITE7dGhpcy5nZXRQbGF5ZXIoKTt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpLGE9e307Yi5nZXRDb25maWcmJihhPWIuZ2V0Q29uZmlnKCksYS5hZHZlcnRpc2luZz8oYS5hZHZlcnRpc2luZy5zY2hlZHVsZSYmKGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzP2EuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzLnRhZyYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5hZHMudGFnLmxlbmd0aCYmCih0aGlzLlpkPWEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRzLnRhZy5sZW5ndGgsdGhpcy50Yj0hMCk6KGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUucHJlcm9sbCYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5wcmVyb2xsLnRhZyYmKHRoaXMudGI9ITApLGEuYWR2ZXJ0aXNpbmcuc2NoZWR1bGUuYWRicmVha3ByZSYmYS5hZHZlcnRpc2luZy5zY2hlZHVsZS5hZGJyZWFrcHJlLnRhZyYmKHRoaXMudGI9ITApKSksYS5hZHZlcnRpc2luZy50YWcmJih0aGlzLnRiPSEwKSk6dGhpcy53KCJubyBhZHZlcnRpc2luZyBjb25maWd1cmVkIGZvciBwbGF5ZXIiKSk7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRDb21wbGV0ZSYmYi5fZXZlbnRzLmFkQ29tcGxldGUucHVzaCh7Y29udGV4dDpudWxsLGN0eDpiLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy53KCJhZENvbXBsZXRlIik7dGhpcy5SYz0hMH0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkQ2xpY2smJmIuX2V2ZW50cy5hZENsaWNrLnB1c2goe2NvbnRleHQ6bnVsbCwKY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkQ2xpY2siKX0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkSW1wcmVzc2lvbiYmYi5fZXZlbnRzLmFkSW1wcmVzc2lvbi5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkSW1wcmVzc2lvbiIpO3RoaXMuUGUoKX0uYmluZCh0aGlzKX0pO2IuX2V2ZW50cyYmYi5fZXZlbnRzLmFkTWV0YSYmYi5fZXZlbnRzLmFkTWV0YS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLncoImFkTWV0YSIpfS5iaW5kKHRoaXMpfSk7Yi5fZXZlbnRzJiZiLl9ldmVudHMuYWRTa2lwcGVkJiZiLl9ldmVudHMuYWRTa2lwcGVkLnB1c2goe2NvbnRleHQ6bnVsbCxjdHg6YixjYWxsYmFjazpmdW5jdGlvbigpe3RoaXMudygiYWRTa2lwcGVkIil9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5hZFRpbWUmJmIuX2V2ZW50cy5hZFRpbWUucHVzaCh7Y29udGV4dDpudWxsLApjdHg6YixjYWxsYmFjazpmdW5jdGlvbigpe3RoaXMudygiYWRUaW1lIil9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5hZEVycm9yJiZiLl9ldmVudHMuYWRFcnJvci5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7dGhpcy5vbkFkRXJyb3IoYSl9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy50aW1lJiZiLl9ldmVudHMudGltZS5wdXNoKHtjb250ZXh0Om51bGwsY3R4OmIsY2FsbGJhY2s6ZnVuY3Rpb24oYSl7dGhpcy5pc1BsYXlpbmc9ITA7YS5kdXJhdGlvbj50aGlzLmloJiYhdGhpcy51YSgpJiYodGhpcy50Yj8odGhpcy5vKCJjb250ZW50cGxheU5vQWRzIiwiIiksdGhpcy5zKCkpOih0aGlzLm8oImNvbnRlbnRwbGF5VGltZSIsMUUzKk1hdGgucm91bmQoYS5kdXJhdGlvbi8xRTMpKSx0aGlzLnMoITApKSl9LmJpbmQodGhpcyl9KTtiLl9ldmVudHMmJmIuX2V2ZW50cy5wbGF5bGlzdEl0ZW0mJmIuX2V2ZW50cy5wbGF5bGlzdEl0ZW0ucHVzaCh7Y29udGV4dDpudWxsLApjdHg6dGhpcy5wbGF5ZXIsY2FsbGJhY2s6ZnVuY3Rpb24oKXtpZih0aGlzLnVhKCkmJih0aGlzLnJhKCksdGhpcy5nZXRQbGF5ZXIoKS5Pbz0hMCxtLnNraXBBZE9uQ29udGV4dENoYW5nZSkpe3ZhciBhPXRoaXMuZ2V0UGxheWVyKCkuemI7YSYmKGEuemQoKSxhLmhkKCkpfX0uYmluZCh0aGlzKX0pO2lmKGIub25BZENvbXBsZXRlKWIub25BZENvbXBsZXRlKGZ1bmN0aW9uKCl7dGhpcy53KCJvbkFkQ29tcGxldGUiKTt0aGlzLlJjPSEwfS5iaW5kKHRoaXMpKTtpZihiLm9uQWRJbXByZXNzaW9uKWIub25BZEltcHJlc3Npb24oZnVuY3Rpb24oKXt0aGlzLncoIm9uQWRJbXByZXNzaW9uIik7dGhpcy5QZSgpfS5iaW5kKHRoaXMpKTtpZihiLm9uQWRQbGF5KWIub25BZFBsYXkoZnVuY3Rpb24oKXt0aGlzLncoIm9uQWRQbGF5Iil9LmJpbmQodGhpcykpO2lmKGIub25BZFRpbWUpYi5vbkFkVGltZShmdW5jdGlvbigpe3RoaXMudygib25BZFRpbWUiKX0uYmluZCh0aGlzKSk7aWYoYi5vbkFkRXJyb3IpYi5vbkFkRXJyb3IoZnVuY3Rpb24oYSl7dGhpcy5vbkFkRXJyb3IoYSl9LmJpbmQodGhpcykpOwppZihiLm9uVGltZSliLm9uVGltZShmdW5jdGlvbihhKXt0aGlzLmlzUGxheWluZz0hMDthLmR1cmF0aW9uPnRoaXMuaWgmJiF0aGlzLnVhKCkmJih0aGlzLnRiPyh0aGlzLm8oImNvbnRlbnRwbGF5Tm9BZHMiLCIiKSx0aGlzLnMoKSk6KHRoaXMubygiY29udGVudHBsYXlUaW1lIiwxRTMqTWF0aC5yb3VuZChhLmR1cmF0aW9uLzFFMykpLHRoaXMucyghMCkpKX0uYmluZCh0aGlzKSl9LG9uQWRFcnJvcjpmdW5jdGlvbihiKXt2YXIgYT1iLnRhZzstMT09dGhpcy5TYy5pbmRleE9mKGEpJiZ0aGlzLlNjLnB1c2goYSk7IjEwMSI9PWIuY29kZXx8IjEwMDEiPT1iLmNvZGU/KHRoaXMudygpLHRoaXMudGEoKSk6OTAwPT1iLmNvZGUmJjA8Yi5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigiZW1wdHkiKT90aGlzLncoImVtcHR5Iik6MzAzPT1iLmNvZGUmJjA8Yi5tZXNzYWdlLmluZGV4T2YoIk5vIEFkcyBWQVNUIHJlc3BvbnNlIGFmdGVyIG9uZSBvciBtb3JlIFdyYXBwZXJzIik/dGhpcy53KCJlbXB0eSIpOgoodGhpcy5vKCJhZGVycm9yIixiLmNvZGUpLHRoaXMuU2MubGVuZ3RoPj10aGlzLlpkJiZ0aGlzLnMoKSl9LE5yOmZ1bmN0aW9uKGIpe3RoaXMubSgiSlc6ICIrYi50eXBlKX0sczpmdW5jdGlvbihiKXtiP3RoaXMubmU/dGhpcy5uZSsrOnRoaXMubmU9MTp0aGlzLm1lP3RoaXMubWUrKzp0aGlzLm1lPTE7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKTtlLkhoKGEudmlkZW9UYWcpP2EuVmI/dGhpcy53KCJwbGF5ZXIgaXMgaW52YWxkIik6dGhpcy5SY3x8dGhpcy5pc1BsYXlpbmc/KHRoaXMubWU+dGhpcy5uZSYmKGI9ITEpLHRoaXMuSShiKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoYil9LmJpbmQodGhpcyksNTApOihhLnNnKCksYS51ZygpLGEuVmJ8fHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDIwKSl9fSl9KShjKTt2YXIgdWE9Yy5wa3x8dWE7KGZ1bmN0aW9uKGMpe2Mucms9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSwKZzpmdW5jdGlvbigpe3ZhciBiPWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZik7aWYoIllXUnBkR2x2Ymk1clpXbHVaWFpwWkdWdmQyVnlZblZ1WnoweCIhPXRoaXMuZXEoKXx8IWIuYXV0aG9yaXR5fHwhYi5hdXRob3JpdHl8fCJ3d3cuc3BpZWdlbC5kZSIhPWIuYXV0aG9yaXR5JiYicXMyLnByZXZpZXcuc3BpZWdlbC5kZSIhPWIuYXV0aG9yaXR5JiYicHJldmlldy5zcGllZ2VsLmRlIiE9Yi5hdXRob3JpdHkmJiJwcm9kLnNwaWVnZWwuZGUiIT1iLmF1dGhvcml0eSl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiandwbGF5ZXIiKTtpZighd2luZG93Lmp3cGxheWVyfHwhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoandwbGF5ZXIoKS5pZCl8fCJBIiE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoandwbGF5ZXIoKS5pZCkubm9kZU5hbWUpaWYod2luZG93Lmp3cGxheWVyJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZChqd3BsYXllcigpLmlkKXx8aCYmaCgpLmlkKXtiPQpbXTtpZigxPGEubGVuZ3RoKWZvcihoPTA7aDxhLmxlbmd0aDtoKyspYi5wdXNoKGFbaF0uZ2V0QXR0cmlidXRlKCJpZCIpKTtlbHNlIGIucHVzaChqd3BsYXllcigpLmlkKTtqd3BsYXllcigpO2ZvcihhPTA7YTxiLmxlbmd0aDthKyspe3ZhciBoPW5ldyB0YSh3aW5kb3cuandwbGF5ZXIoYlthXSkpO3RoaXMuTihoKXx8dGhpcy5scihoKXx8KHRoaXMuUChoKSxoPW5ldyB1YShoLHRoaXMuSyksaC5TKCksaC5nKCkpfX10aGlzLlIoKX19LFh2OmZ1bmN0aW9uKCl7cmV0dXJuIllXUnBkR2x2Ymk1clpXbHVaWFpwWkdWdmQyVnlZblZ1WnoweCJ9LGVxOmZ1bmN0aW9uKCl7dmFyIGI9ZS5sYShkb2N1bWVudC5sb2NhdGlvbi5ocmVmKTtyZXR1cm4gZS52YihiLmFuY2hvcil9fSl9KShjKTt2YXIgdmE9Yy5ya3x8dmEsd2E9bmV3IHZhKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLkRyPQp0aGlzLmFbM107dGhpcy5Qaz10aGlzLmFbOF07dGhpcy5zbT10aGlzLmFbMV07dGhpcy5ObD10aGlzLmFbOV07dGhpcy5qPXRoaXMuYVsxMF19Yy5pbz1iO2IucHJvdG90eXBlPXtDcjpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuRHI6dGhpcy5PayhhKX0sT2s6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLlBrOnRoaXMucm0oYSl9LHJtOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5zbTp0aGlzLk1sKGEpfSxNbDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuTmw6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciB4YT1jLmlvfHx4YSxyYz1uZXcgeGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1yYy5Dcig0KTsoZnVuY3Rpb24oYyl7Yy54bT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtpZihiKXt2YXIgYT1iLmVsXzthfHwoYT1iLmVsKCkpO2E/KHRoaXMuWShhKSwoYj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdKXx8KGI9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pLGI/dGhpcy5aKGIpOnRoaXMucGEoKSk6dGhpcy5wYSgpfWVsc2UgdGhpcy5wYSgpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuInZpZGVvanMifSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkub24oInRpbWV1cGRhdGUiLGZ1bmN0aW9uKGIpe3RoaXMuTWQoYil9LmJpbmQodGhpcykpfSxNZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT1iLmN1cnJlbnRUaW1lKCksYj1iLmR1cmF0aW9uKCk7YSYmMDxhJiZiJiYwPGImJmE+PWItMiYmdGhpcy5WJiZ0aGlzLlYoKX0sQWU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZpZGVvVGFnLmdldEF0dHJpYnV0ZSgiZGF0YS14LXNldHVwIik7CmlmKGIpdHJ5e3ZhciBhPUpTT04ucGFyc2UoYik7aWYoYS5oYXNPd25Qcm9wZXJ0eSgieC1hdXRvcGxheSIpJiYhYVsieC1hdXRvcGxheSJdKXJldHVybiExfWNhdGNoKGgpe31iPXRoaXMuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIuYXV0b3BsYXkmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmF1dG9wbGF5P2IuYXV0b3BsYXkoKTohMX0sdmE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5ZXIubXV0ZWQmJnRoaXMucGxheWVyLm11dGVkKCl9LFZhOmZ1bmN0aW9uKCl7dGhpcy5wYXVzZSgpO3JldHVybiEwfSxpc1BsYXlpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wYXVzZWQoKT8hMTohMH0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLGE9Yi5pc0Z1bGxzY3JlZW47aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpdHJ5e2E9YSgpfWNhdGNoKGgpe2E9ITF9YSYmYi5leGl0RnVsbHNjcmVlbigpfSxjdXJyZW50VGltZTpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLmdldFJhd1BsYXllcigpO2lmKGIuY3VycmVudFRpbWUpcmV0dXJuIGIuY3VycmVudFRpbWUoKX19KX0pKGMpO3ZhciB5YT1jLnhtfHx5YTsoZnVuY3Rpb24oYyl7Yy53bT12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dGhpcy5UPXRoaXMuVHx8ITE7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKTt0aGlzLmRhPXRoaXMuQmM9dGhpcy5BYT10aGlzLlljPSExO3RoaXMudmg9ZS5FYigxMCk7dGhpcy5YaD0hMDt0aGlzLm5jPXRoaXMuUWc9ITE7dGhpcy5icyhiLmdldFJhd1BsYXllcigpKXx8KHRoaXMubGgoKSx0aGlzLm5vKCksdGhpcy5vYigpKX0sYnM6ZnVuY3Rpb24oYil7cmV0dXJuIGUuQmEoInQtb25saW5lLmRlIik/ITE9PT1iLm9wdGlvbnNfLmFkUHJlcm9sbDohMX0sbnc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2NvbnNvbGUuaW5mbyh0aGlzLmdldFBsYXllcigpLmphKCksIjsiLCJ3aW5kb3cuaW1hOiIsCiI7Iix3aW5kb3cuaW1hLCI7Iix0eXBlb2Ygd2luZG93LmltYSwiOyIsInBsYXllci5hZHM6IiwiOyIsYi5XLCI7Iix0eXBlb2YgYi5XLCI7IiwicGxheWVyLmFkcy5zdGF0ZToiLCI7IixiLlc/Yi5XLnN0YXRlOiJ1bmRlZmluZWRYIiwiOyIsYi5XP3R5cGVvZiBiLlcuc3RhdGU6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYToiLCI7IixiLmltYSwiOyIsdHlwZW9mIGIuaW1hLCI7IiwicGxheWVyLmltYTM6IiwiOyIsYi5KLCI7Iix0eXBlb2YgYi5KLCI7IiwicGxheWVyLmltYS5hZGRFdmVudExpc3RlbmVyOiIsIjsiLGIuaW1hP2IuaW1hLmFkZEV2ZW50TGlzdGVuZXI6InVuZGVmaW5lZFgiLCI7IixiLmltYT90eXBlb2YgYi5pbWEuYWRkRXZlbnRMaXN0ZW5lcjoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5hZGRFdmVudExpc3RlbmVyOiIsIjsiLGIuSj9iLkouYWRkRXZlbnRMaXN0ZW5lcjoidW5kZWZpbmVkWCIsIjsiLGIuSj90eXBlb2YgYi5KLmFkZEV2ZW50TGlzdGVuZXI6CiJ1bmRlZmluZWRYIiwiOyIsInBsYXllci5pbWEuZ2V0QWRzTWFuYWdlcjoiLCI7IixiLmltYT9iLmltYS5HYToidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5HYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5nZXRBZHNNYW5hZ2VyOiIsIjsiLGIuSj9iLkouR2E6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5HYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmdldEFkc01hbmFnZXIoKToiLCI7IixiLmltYSYmYi5pbWEuR2E/Yi5pbWEuR2EoKToidW5kZWZpbmVkWCIsIjsiLGIuaW1hJiZiLmltYS5HYT90eXBlb2YgYi5pbWEuR2EoKToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5nZXRBZHNNYW5hZ2VyKCk6IiwiOyIsYi5KJiZiLkouR2E/Yi5KLkdhKCk6InVuZGVmaW5lZFgiLCI7IixiLkomJmIuSi5HYT90eXBlb2YgYi5KLkdhKCk6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYS5fYWRzTG9hZGVyOiIsIjsiLGIuaW1hP2IuaW1hLldkOgoidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5XZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5fYWRzTG9hZGVyOiIsIjsiLGIuSj9iLkouV2Q6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5XZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLl9hZHNNYW5hZ2VyOiIsIjsiLGIuaW1hP2IuaW1hLlhkOiJ1bmRlZmluZWRYIiwiOyIsYi5pbWE/dHlwZW9mIGIuaW1hLlhkOiJ1bmRlZmluZWRYIiwiOyIsInBsYXllci5pbWEzLl9hZHNNYW5hZ2VyOiIsIjsiLGIuSj9iLkouWGQ6InVuZGVmaW5lZFgiLCI7IixiLko/dHlwZW9mIGIuSi5YZDoidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmFkc0xvYWRlcjoiLCI7IixiLmltYT9iLmltYS5uYToidW5kZWZpbmVkWCIsIjsiLGIuaW1hP3R5cGVvZiBiLmltYS5uYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hMy5hZHNMb2FkZXI6IiwiOyIsYi5KP2IuSi5uYToidW5kZWZpbmVkWCIsIjsiLGIuSj8KdHlwZW9mIGIuSi5uYToidW5kZWZpbmVkWCIsIjsiLCJwbGF5ZXIuaW1hLmFkc01hbmFnZXI6IiwiOyIsYi5pbWE/Yi5pbWEuY2U6InVuZGVmaW5lZFgiLCI7IixiLmltYT90eXBlb2YgYi5pbWEuY2U6InVuZGVmaW5lZFgiLCI7IiwicGxheWVyLmltYTMuYWRzTWFuYWdlcjoiLCI7IixiLko/Yi5KLmNlOiJ1bmRlZmluZWRYIiwiOyIsYi5KP3R5cGVvZiBiLkouY2U6InVuZGVmaW5lZFgiLCI7IiwiRE9ORSIsdGhpcy52aCl9LHdiOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtiLmltYTMmJih0aGlzLmltYT1iLmltYTMpO2lmKGIuaW1hKXt0aGlzLmltYT1iLmltYTt0cnl7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuaW1hJiZ0aGlzLnBsYXllci5nZXRSYXdQbGF5ZXIoKS5hY3RpdmVQbHVnaW5zXyYmMT09dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyKCkuYWN0aXZlUGx1Z2luc18uaW1hJiYodGhpcy5pbWE9dGhpcy5pbWEoKSx0aGlzLmltYS5jb250cm9sbGVyJiYKKHRoaXMuaW1hPXRoaXMuaW1hLmNvbnRyb2xsZXIpKX1jYXRjaChhKXt9fXJldHVybiB0aGlzLmltYX0sUmI6ZnVuY3Rpb24oKXtpZighdGhpcy5uYSl7dmFyIGI9dGhpcy53YigpO2ImJihiLmFkc0xvYWRlciYmKHRoaXMubmE9Yi5hZHNMb2FkZXIpLGIuX2Fkc0xvYWRlciYmKHRoaXMubmE9Yi5fYWRzTG9hZGVyKSxiLmdldEFkc0xvYWRlciYmKHRoaXMubmE9Yi5nZXRBZHNMb2FkZXIpLGIuY29udHJvbGxlciYmYi5jb250cm9sbGVyLnNka0ltcGwmJmIuY29udHJvbGxlci5zZGtJbXBsLmFkc0xvYWRlciYmKHRoaXMubmE9Yi5jb250cm9sbGVyLnNka0ltcGwuYWRzTG9hZGVyKSl9cmV0dXJuIHRoaXMubmF9LEVnOmZ1bmN0aW9uKCl7aWYoIXRoaXMuQmMpe3ZhciBiPXRoaXMud2IoKTtiJiYoYi5hZHNNYW5hZ2VyJiYodGhpcy5CYz1iLmFkc01hbmFnZXIpLGIuZ2V0QWRzTWFuYWdlciYmKHRoaXMuQmM9Yi5nZXRBZHNNYW5hZ2VyKCkpKX1yZXR1cm4gdGhpcy5CY30sanI6ZnVuY3Rpb24oKXtpZighdGhpcy5QZyl7dmFyIGI9CnRoaXMud2IoKSxhPXRoaXMuaHIoKTt3aW5kb3cuaW1hJiZiJiYoYi5fYWRzTG9hZGVyfHxiLmFkc0xvYWRlcnx8YSkmJih0aGlzLlBnPSEwKX1yZXR1cm4gdGhpcy5QZ30saHI6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyF0aGlzLlljJiZiLmFkcyYmKGIuYWRzLnN0YXRlfHxiLmFkcy5fc3RhdGUpJiYodGhpcy5ZYz0hMCk7cmV0dXJuIHRoaXMuWWN9LG9iOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5SYigpO2lmKGIpe3ZhciBhPSJhZEVycm9yIixoPSJhZHNNYW5hZ2VyTG9hZGVkIixkPSJsb2ciO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SJiYoYT1nb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SKTt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkc01hbmFnZXJMb2FkZWRFdmVudCYmCmdvb2dsZS5pbWEuQWRzTWFuYWdlckxvYWRlZEV2ZW50LlR5cGUmJmdvb2dsZS5pbWEuQWRzTWFuYWdlckxvYWRlZEV2ZW50LlR5cGUuQURTX01BTkFHRVJfTE9BREVEJiYoaD1nb29nbGUuaW1hLkFkc01hbmFnZXJMb2FkZWRFdmVudC5UeXBlLkFEU19NQU5BR0VSX0xPQURFRCk7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYoZD1nb29nbGUuaW1hLkFkRXZlbnQuVHlwZS5MT0cpOyJmdW5jdGlvbiIhPT10eXBlb2YgYi5hZGRFdmVudExpc3RlbmVyP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKTooYi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKGgsZnVuY3Rpb24oKXt0aGlzLmp0KCl9LmJpbmQodGhpcykpLApiLmFkZEV2ZW50TGlzdGVuZXIoZCxmdW5jdGlvbihhKXt0aGlzLmdhKGEsITApO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKTt0aGlzLmZhKCEwKX0uYmluZCh0aGlzKSkpfWVsc2UgdGhpcy51YSgpfHx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMub2IoKX0uYmluZCh0aGlzKSwyMCl9LGp0OmZ1bmN0aW9uKCl7dGhpcy5uYz0hMDt2YXIgYj10aGlzLkVnKCk7aWYoYnx8dGhpcy51YSgpKXt2YXIgYT0iYWRFcnJvciIsaD0ibG9nIjt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudCYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYKKGg9Z29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HKTtiLmFkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihhKXt0aGlzLmdhKGEpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoaCxmdW5jdGlvbihhKXt0aGlzLmdhKGEsITApO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKTt0aGlzLmZhKCEwKX0uYmluZCh0aGlzKSk7dmFyIGQ9IiI7ZS5UYSgpJiYoZD0iTV8iKTtiLmFkZEV2ZW50TGlzdGVuZXIoInN0YXJ0IixmdW5jdGlvbigpe2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrInN0YXJ0IiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiZmlyc3RxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrImZpc3RxdWFydGlsZSIsIiIsITApfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoIm1pZHBvaW50IixmdW5jdGlvbigpe3RoaXMub2M9CiEwO2lmKGUuQmEoImNoaXAuZGUiKSl7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtlLnRyYWNrKCJzdGF0c19jdXN0XyIrZCsibWlkcG9pbnQiLCIiLCEwKTtlLnRyYWNrKCJzdGF0c19jdXN0X2RvdWJsZXBsYXkiLCFhLnBhdXNlZCgpLCEwKX19LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigidGhpcmRxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrInRoaXJkcXVhcnRpbGUiLCIiLCEwKX0uYmluZCh0aGlzKSk7Yi5hZGRFdmVudExpc3RlbmVyKCJjb21wbGV0ZSIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iK2QrImNvbXBsZXRlIiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiaW1wcmVzc2lvbiIsZnVuY3Rpb24oKXt0aGlzLm9jPSEwO2UuQmEoImNoaXAuZGUiKSYmZS50cmFjaygic3RhdHNfY3VzdF8iKwpkKyJpbXByZXNzaW9uIiwiIiwhMCl9LmJpbmQodGhpcykpO2IuYWRkRXZlbnRMaXN0ZW5lcigiYWxsQWRzQ29tcGxldGVkIixmdW5jdGlvbigpe3RoaXMub2N8fCh0aGlzLm8oImFkZXJyb3IiLCJub2FkZXZlbnQiKSx0aGlzLmZhKCksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKX0sV3Y6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyF0aGlzLmtnJiZiLmFkcyYmKHRoaXMua2c9Yi5hZHMpO3JldHVybiB0aGlzLmtnfSxubzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7Yi5vbigiYWRzZXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuZ2EoYSk7dGhpcy5mYSgpO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKX0uYmluZCh0aGlzKSk7Yi5vbigiYWR0cmlnZ2VyIixmdW5jdGlvbigpe3RoaXMucmEoKTt0aGlzLmZhKCEwKTsKdGhpcy5vKCJ0cmlnZ2VyIiwiSE9NQUQiKX0uYmluZCh0aGlzKSk7Yi5vbigiaW1hM2Vycm9yIixmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZmEoKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCl9LmJpbmQodGhpcykpO2Iub24oImltYTNhZGVycm9yIixmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZmEoKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCl9LmJpbmQodGhpcykpO2Iub24oImltYTMtYWQtZXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuZ2EoYSk7dGhpcy5mYSgpO3RoaXMubygiYWRlcnJvciIsdGhpcy5UKX0uYmluZCh0aGlzKSk7Yi5vbigiYWRzLWZpcnN0LXF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygpO3RoaXMuUGUoKX0uYmluZCh0aGlzKSl9LGxkOmZ1bmN0aW9uKCl7dmFyIGI9ITE7dHJ5e2lmKGhvbWFkVXRpbHMmJmhvbWFkVXRpbHMuWClob21hZFV0aWxzLkthJiYoYj0hMCk7ZWxzZXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubGQoKX0uYmluZCh0aGlzKSwKNTApO3JldHVybn19Y2F0Y2goYSl7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmxkKCl9LmJpbmQodGhpcyksNTApO3JldHVybn1iJiYoKGI9dGhpcy5FZygpKSYmYi5kZXN0cm95P2IuZGVzdHJveSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5sZCgpfS5iaW5kKHRoaXMpLDUwKSl9LGxoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKTtpZihiLmlzUGxheWluZygpJiYwPGIuY3VycmVudFRpbWUoKSlpZih0aGlzLmpyKCkpe3ZhciBhPXRoaXMud2IoKSxoPXRoaXMuUmIoKTthJiZoJiYodGhpcy53YigpLHRoaXMuUmIoKSx0aGlzLm5jfHx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubmM/dGhpcy53KCk6KHRoaXMuZmEoITApLHRoaXMubygibm9BZHNNYW5hZ2VyIiwiYWRzTWFuYWdlciIpKX0uYmluZCh0aGlzKSwyRTMpKTt0aGlzLndiKCl9ZWxzZSB0aGlzLlFnP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGE9CnRoaXMud2IoKSxiPXRoaXMuUmIoKTthJiYhYj8odGhpcy5vKCJub2ZyYW1ld29yayIsIklNQV9BRFNMT0FERVIiKSx0aGlzLmZhKCkpOih0aGlzLmZhKCEwKSx0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIikpfS5iaW5kKHRoaXMpLDEwMCk6dGhpcy5RZz0hMDtiLmlzUGxheWluZygpJiYxMDxiLmN1cnJlbnRUaW1lKCl8fHRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmxoKCl9LmJpbmQodGhpcyksNTApfSxnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGg9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpaD0hMDtofHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGg9ITApOyJudW1iZXIiPT10eXBlb2YgYSYmKGIuVD1hLGIubygiYWRlcnJvciIsYSkpfXJldHVybiBofWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTsKaWYoYi5nZXRFcnJvciYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0RXJyb3Ipe3ZhciBoPWIuZ2V0RXJyb3IoKTtpZihoLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGguZ2V0RXJyb3JDb2RlJiZhKGguZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTtyZXR1cm59fWZvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkmJmJbZF0mJmJbZF0uYWRFcnJvciYmYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJmEoYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7YnJlYWt9fSxvbzpmdW5jdGlvbigpe3RoaXMucmN8fCh0aGlzLnJjPSJ1bmtub3duIik7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZihiLmFkcyl7aWYodGhpcy5yYyE9Yi5hZHMuc3RhdGUmJih0aGlzLnJjPWIuYWRzLnN0YXRlKSwiYWQtcGxheWJhY2siPT0KdGhpcy5yYyl7dGhpcy53KCJhZC1wbGF5YmFjayIpO3JldHVybn19ZWxzZSB0aGlzLnJjPSJuby1hZHMiO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vbygpfS5iaW5kKHRoaXMpLDEwKX0sdmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYX0sRGE6ZnVuY3Rpb24oKXswPD1lLlNiKGRvY3VtZW50LmxvY2F0aW9uKS5pbmRleE9mKCJzdGVybi5kZSIpJiYxMDA5PT10aGlzLlQ/KHRoaXMuZGE9ITAsdGhpcy5zKCEwKSk6KHRoaXMuZGE9ITAsdGhpcy53KCJlbXB0eSB2YXN0IikpfSxmYTpmdW5jdGlvbihiKXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZGE/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwMCl9LHM6ZnVuY3Rpb24oYil7dGhpcy51YSgpfHwoYnx8KHRoaXMuWGg9ITEpLHRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCkub24oInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5JKHRoaXMuWGgsZnVuY3Rpb24oKXt0aGlzLmxkKCl9LmJpbmQodGhpcykpfS5iaW5kKHRoaXMpKSl9LAp0bzpmdW5jdGlvbigpe3RoaXMuZXd8fCgxMDx0aGlzLiR1Pyh0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGFhemEiKSx3aW5kb3cuc2V0VGltZW91dCh0aGlzLmZhLmJpbmQodGhpcyksNTAwKSk6KHRoaXMuJHUrKyx0aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpLnZwRXZlbnQ/dGhpcy5udCgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50bygpfS5iaW5kKHRoaXMpLDUwKSkpfSxudDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7aWYoYi52cEV2ZW50JiYhdGhpcy5hdil7dGhpcy5hdj0hMDt2YXIgYT0iIjtiLnZwRXZlbnQucmFuZG9tVGVzdCYmKGE9IiIpO2IudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZHMtZXJyb3IiK2EsZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiLCJ2cDphZHMtZXJyb3IiKTt3aW5kb3cuc2V0VGltZW91dCh0aGlzLmZhLmJpbmQodGhpcyksNTAwKX0uYmluZCh0aGlzKSk7CmIudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZC1lcnJvciIrYSxmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsInZwOmFkLWVycm9yIik7d2luZG93LnNldFRpbWVvdXQodGhpcy5mYS5iaW5kKHRoaXMpLDUwMCl9LmJpbmQodGhpcykpO2IudnBFdmVudC5hZGRFdmVudExpc3RlbmVyKCJ2cDphZC1yZWFkeSIrYSxmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLnZwRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcigidnA6YWQtZW5kZWQiK2EsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yi52cEV2ZW50LmFkZEV2ZW50TGlzdGVuZXIoInZwOmFkc2xvdC1jb21wbGV0ZSIrYSxmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLnZwRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcigidnA6YWRzLXJlYWR5IithLGZ1bmN0aW9uKCl7dGhpcy53KCl9LmJpbmQodGhpcykpfX19KX0pKGMpO3ZhciB6YT1jLndtfHx6YTsoZnVuY3Rpb24oYyl7Yy55bT1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApnOmZ1bmN0aW9uKCl7aWYoIXdpbmRvdy5kZW1vUGxheWVyKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaWZyYW1lIiksYTthPXRoaXMuSWgod2luZG93KTtmb3IodmFyIGg9MDtoPGIubGVuZ3RoO2grKyl0cnl7YT1hfHx0aGlzLkloKGJbaF0pfWNhdGNoKGQpe310aGlzLlIoKX19LEloOmZ1bmN0aW9uKGIpe3ZhciBhPVtdO2IudmlkZW9qcyYmYi52aWRlb2pzLmdldFBsYXllcnM/YT1iLnZpZGVvanMuZ2V0UGxheWVycygpOmIudmlkZW9qcyYmYi52aWRlb2pzLnBsYXllcnMmJihhPWIudmlkZW9qcy5wbGF5ZXJzKTtpZigwPGUudGUoYSkpe2I9YTtmb3IodmFyIGggaW4gYiliLmhhc093blByb3BlcnR5KGgpJiYoYT1uZXcgeWEoYltoXSksYS5xYXx8dGhpcy5OKGEpfHwhMT09PWEuZ2V0UmF3UGxheWVyKCkuaXNSZWFkeV98fCh0aGlzLlAoYSksKG5ldyB6YShhLHRoaXMuSykpLmcoKSkpO3JldHVybiEwfXJldHVybiExfSxSOmZ1bmN0aW9uKCl7dGhpcy5IYj0Kd2luZG93LnNldFRpbWVvdXQodGhpcy5nLmJpbmQodGhpcyksdGhpcy5HYyl9fSl9KShjKTt2YXIgQWE9Yy55bXx8QWEsQmE9bmV3IEFhKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnlxPXRoaXMuYVs0XTt0aGlzLiRvPXRoaXMuYVs1XTt0aGlzLnRuPXRoaXMuYVsxMF07dGhpcy5rcD10aGlzLmFbMV07dGhpcy5Kbz10aGlzLmFbNl07dGhpcy5Gcz10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVsxXX1jLlFyPWI7Yi5wcm90b3R5cGU9e3hxOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy55cTp0aGlzLlpvKGEpfSxabzpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuJG86dGhpcy5zbihhKX0sc246ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy50bjp0aGlzLmpwKGEpfSxqcDpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMua3A6dGhpcy5JbyhhKX0sSW86ZnVuY3Rpb24oYSl7cmV0dXJuIDU8CmE/dGhpcy5Kbzp0aGlzLkVzKGEpfSxFczpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuRnM6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBDYT1jLlFyfHxDYSxzYz1uZXcgQ2EoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1zYy54cSg0KTsoZnVuY3Rpb24oYyl7Yy5sbD11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt0aGlzLlNlPTA7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPWIucGxheWVyQ29udGFpbmVyO2lmKCFhJiYoYi5wbGF5ZXJJbnN0YW5jZSYmYi5wbGF5ZXJJbnN0YW5jZS5pZCYmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYi5wbGF5ZXJJbnN0YW5jZS5pZCkpJiYoYT1iLnBhcmVudE5vZGUpLCFhKSl7dGhpcy5wYSgpO3JldHVybn10aGlzLlkoYSk7CihiPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pfHwoYj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7Yj90aGlzLlooYik6dGhpcy5wYSgpfSxWczpmdW5jdGlvbihiKXt2YXIgYT10aGlzLnpiLGg9dGhpcy5qYSgpLGQ9IiI7Yi5tZW1vJiYoZD1iLm1lbW8udmlkZW9pZCk7ZCYmYSYmYS5VYiYmKDA8PWguaW5kZXhPZihkKXx8YS56ZCgpKX0scGF1c2U6ZnVuY3Rpb24oYil7Ynx8KHRoaXMuU2U9MCk7Yj10aGlzLmdldFJhd1BsYXllcigpO2IucGxheWVySW5zdGFuY2UmJmIucGxheWVySW5zdGFuY2UucGF1c2U/KHdpbmRvdy5wb3N0TWVzc2FnZSgiaG9tYWRwYXVzZSIsIioiKSxiLnBsYXllckluc3RhbmNlLnBhdXNlKCkpOndpbmRvdy5vdlZpZGVvJiZ3aW5kb3cub3ZWaWRlby5zdG9wUGxheWJhY2smJih3aW5kb3cucG9zdE1lc3NhZ2UoImhvbWFkcGF1c2UiLCIqIiksd2luZG93Lm92VmlkZW8uc3RvcFBsYXliYWNrKCkpfSxWYTpmdW5jdGlvbigpe3RoaXMuU2UrKzsKaWYoMTA8dGhpcy5TZSlyZXR1cm4hMTt0aGlzLnBhdXNlKCJwYXVzZVJlcGVhdE9uQWREZWxpdmVyeSIpO3JldHVybiEwfSxwbGF5OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtiLnBsYXllckluc3RhbmNlJiZiLnBsYXllckluc3RhbmNlLnBsYXk/KHdpbmRvdy5wb3N0TWVzc2FnZSgiaG9tYWRwbGF5IiwiKiIpLGIucGxheWVySW5zdGFuY2UucGxheSgpKTp3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8ucmVzdW1lUGxheWJhY2smJih3aW5kb3cucG9zdE1lc3NhZ2UoImhvbWFkcGxheSIsIioiKSx3aW5kb3cub3ZWaWRlby5yZXN1bWVQbGF5YmFjaygpKX0saXNQbGF5aW5nOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4hMT09PWIucGxheWVySW5zdGFuY2UucGF1c2VkPyEwOiEwPT09Yi5wbGF5ZXJJbnN0YW5jZS5wYXVzZWQ/ITE6Yi5pc1BsYXlpbmd9LGdldEN1cnJlbnRUaW1lOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTsKaWYoYi5wbGF5ZXJJbnN0YW5jZSYmYi5wbGF5ZXJJbnN0YW5jZS5jdXJyZW50VGltZSlyZXR1cm4gYi5wbGF5ZXJJbnN0YW5jZS5jdXJyZW50VGltZTtpZih3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8uZ2V0Q3VycmVudFRpbWUpcmV0dXJuIHdpbmRvdy5vdlZpZGVvLmdldEN1cnJlbnRUaW1lKCl9LGdldER1cmF0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtpZihiLnBsYXllckluc3RhbmNlJiZiLnBsYXllckluc3RhbmNlLmR1cmF0aW9uKXJldHVybiBiLnBsYXllckluc3RhbmNlLmR1cmF0aW9uO2lmKHdpbmRvdy5vdlZpZGVvJiZ3aW5kb3cub3ZWaWRlby5nZXREdXJhdGlvbilyZXR1cm4gd2luZG93Lm92VmlkZW8uZ2V0RHVyYXRpb24oKX0sTzpmdW5jdGlvbigpe3JldHVybiJPdlZpZGVvIn0sTmE6ZnVuY3Rpb24oKXt9LE1kOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0UmF3UGxheWVyKCk7dGhpcy5nZXRDdXJyZW50VGltZSgpPmImJihiPXRoaXMuZ2V0Q3VycmVudFRpbWUoKSk7CnZhciBhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiZ0aGlzLlYmJnRoaXMuVigpfX0pfSkoYyk7dmFyIERhPWMubGx8fERhOyhmdW5jdGlvbihjKXtjLmtsPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LEFhOmZ1bmN0aW9uKCl7aWYoIXRoaXMucGUpaWYodGhpcy5BYnx8KHRoaXMuQWI9MCksdGhpcy5nZXRQbGF5ZXIoKS5pc1BsYXlpbmcoKSYmdGhpcy5BYisrLDE1PHRoaXMuQWIpdGhpcy5vKCJub2ZyYW1ld29yayIsIklNQSIpLHRoaXMucyghMCk7ZWxzZXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2lmKGIuYWR2ZXJ0aXNpbmcpaWYoYj1iLmFkdmVydGlzaW5nLmFkc0xvYWRlcil7dGhpcy5wZT0hMDt2YXIgYT0iYWRFcnJvciI7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUuQURfRVJST1ImJgooYT1nb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SKTtiLmFkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihhKXt0aGlzLmdhKGEpO3RoaXMuZGF8fCh0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCksdGhpcy5zKCkpfS5iaW5kKHRoaXMpKX1lbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5BYSgpfS5iaW5kKHRoaXMpLDEwKTtlbHNlIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5BYSgpfS5iaW5kKHRoaXMpLDEwKX19LHZkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF9LGdhOmZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGEoYSxiKXt2YXIgaD0hMTtpZihhKXtpZigxMDA5PT1hfHwzMDM9PWF8fDQwMz09YSloPSEwO2h8fCFhLmluZGV4T2Z8fC0xPT09YS5pbmRleE9mKCIxMDA5IikmJi0xPT09YS5pbmRleE9mKCIzMDMiKSYmLTE9PT1hLmluZGV4T2YoIjQwMyIpfHwoaD0hMCk7Im51bWJlciI9PXR5cGVvZiBhJiYoYi5UPWEsYi5vKCJhZGVycm9yIiwKYSkpfXJldHVybiBofWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTtpZihiLmdldEVycm9yJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5nZXRFcnJvcil7dmFyIGg9Yi5nZXRFcnJvcigpO2lmKGguZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgaC5nZXRFcnJvckNvZGUmJmEoaC5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO3JldHVybn19Zm9yKHZhciBkIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSYmYltkXSYmYltkXS5hZEVycm9yJiZiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmYShiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTticmVha319LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpO3RoaXMuVD10aGlzLlR8fCExO3RoaXMuQWEoKTt2YXIgYT13aW5kb3cub3ZWaWRlbzthfHwoYT13aW5kb3cub3YudmlkZW8uUGxheWVyKTsKYSYmYS5yZWdpc3RlckV2ZW50JiYhdGhpcy5IcD8oYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuT25fUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuUExBWUVSX0RFU1RST1lFRCxmdW5jdGlvbigpe3RoaXMucmEoKX0uYmluZCh0aGlzKSksYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX0FERVJST1IsZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCk7dGhpcy5zKCl9LmJpbmQodGhpcykpLHRoaXMuSHA9ITAsYS5yZWdpc3RlckV2ZW50KGEuT05fUExBWUVSX1NUT1BQRUQsZnVuY3Rpb24oYSl7Yi5WcyhhKX0uYmluZCh0aGlzKSkpOmIuaXNQbGF5aW5nKCl8fHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksMTAwKX0sczpmdW5jdGlvbihiKXt0aGlzLkkoYil9fSl9KShjKTsKdmFyIEVhPWMua2x8fEVhOyhmdW5jdGlvbihjKXtjLm1sPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMuVWE9MTUwMDt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1bXTt3aW5kb3cub3ZWaWRlbyYmd2luZG93Lm92VmlkZW8uc3luY2hyb25pemVyJiZ3aW5kb3cub3ZWaWRlby5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllciYmMDx3aW5kb3cub3ZWaWRlby5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllci5sZW5ndGgmJihiPXdpbmRvdy5vdlZpZGVvLnN5bmNocm9uaXplci5yZWdpc3RlcmVkUGxheWVyKTt3aW5kb3cub3YmJndpbmRvdy5vdi52aWRlbyYmd2luZG93Lm92LnZpZGVvLlBsYXllciYmd2luZG93Lm92LnZpZGVvLlBsYXllci5zeW5jaHJvbml6ZXImJndpbmRvdy5vdi52aWRlby5QbGF5ZXIuc3luY2hyb25pemVyLnJlZ2lzdGVyZWRQbGF5ZXImJjA8d2luZG93Lm92LnZpZGVvLlBsYXllci5zeW5jaHJvbml6ZXIucmVnaXN0ZXJlZFBsYXllci5sZW5ndGgmJgooYj13aW5kb3cub3YudmlkZW8uUGxheWVyLnN5bmNocm9uaXplci5yZWdpc3RlcmVkUGxheWVyKTtpZigwPGIubGVuZ3RoKWZvcih2YXIgYT0wO2E8Yi5sZW5ndGg7YSsrKXt2YXIgaD1uZXcgRGEoYlthXSk7aC5xYXx8dGhpcy5OKGgpfHwodGhpcy5QKGgpLChuZXcgRWEoaCx0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIEZhPWMubWx8fEZhLEdhPW5ldyBGYShyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5NaT10aGlzLmFbOF07dGhpcy5idD10aGlzLmFbN107dGhpcy52bj10aGlzLmFbN107dGhpcy5XaT10aGlzLmFbNV07dGhpcy5Daz10aGlzLmFbNF07dGhpcy5qPXRoaXMuYVs3XX1jLkp2PWI7Yi5wcm90b3R5cGU9e0xpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5NaTp0aGlzLmF0KGEpfSxhdDpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuYnQ6CnRoaXMudW4oYSl9LHVuOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy52bjp0aGlzLlZpKGEpfSxWaTpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuV2k6dGhpcy5CayhhKX0sQms6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLkNrOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuajphfX19KShjKTt2YXIgSGE9Yy5Kdnx8SGEsdGM9bmV3IEhhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9dGMuTGkoNCk7KGZ1bmN0aW9uKGMpe2Mubms9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPWUuQ2coYiwiZWxlbWVudElEIik7dGhpcy5xaD1iLnBvc2l0aW9uaW5nO3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2guc3R5bGUud2lkdGg9CmIud2lkdGg7aC5zdHlsZS5taW5XaWR0aD1iLndpZHRoO2guc3R5bGUubWF4V2lkdGg9Yi53aWR0aDtoLnN0eWxlLmhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1pbkhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1heEhlaWdodD1iLmhlaWdodDtoLnN0eWxlLm1hcmdpbkxlZnQ9ImF1dG8iO2guc3R5bGUubWFyZ2luUmlnaHQ9ImF1dG8iOyJiZWZvcmUiPT10aGlzLnFoP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaCxhKToiYWZ0ZXIiPT10aGlzLnFoP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaCxhLm5leHRTaWJsaW5nKTphLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGgsYSk7dGhpcy5ZKGgpO3RoaXMuWihoKTt0aGlzLm5kPWh9LHBhdXNlOmZ1bmN0aW9uKCl7fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5uZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMubmQpfSx2YTpmdW5jdGlvbigpe3JldHVybiEwfSxzbzpmdW5jdGlvbigpe2UuV2codGhpcy5uZCk7ZS5CZSh0aGlzLm5kKTsKd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnNvKCl9LmJpbmQodGhpcyksNTApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuImlucmVhZCJ9LEdlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSl9KShjKTt2YXIgSWE9Yy5ua3x8SWE7KGZ1bmN0aW9uKGMpe2MubWs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMubygiZXh0ZXJuYWwiKTt0aGlzLkkoITApfX0pfSkoYyk7dmFyIEphPWMubWt8fEphOyhmdW5jdGlvbihjKXtjLm9rPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMuVWE9MTUwMDt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtJiZtLmlucmVhZCl7dmFyIGI9bS5pbnJlYWQsYT1lLkNnKGIsImVsZW1lbnRJRCIpO2UuV2coYSkmJihiPW5ldyBJYShiKSx0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBKYShiLHRoaXMuSykpLmcoKSkpO3RoaXMuSGI9d2luZG93LnNldFRpbWVvdXQodGhpcy5nLmJpbmQodGhpcyksCjEwMCl9ZWxzZSB0aGlzLkhiPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksMTAwKX19KX0pKGMpO3ZhciBLYT1jLm9rfHxLYSxMYT1uZXcgS2Eocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMudnQ9dGhpcy5hWzVdO3RoaXMuTmo9dGhpcy5hWzJdO3RoaXMuSXY9dGhpcy5hWzRdO3RoaXMudXA9dGhpcy5hWzddO3RoaXMuS249dGhpcy5hWzhdO3RoaXMuQXM9dGhpcy5hWzRdO3RoaXMuWHA9dGhpcy5hWzNdO3RoaXMuS209dGhpcy5hWzRdO3RoaXMuU3M9dGhpcy5hWzVdO3RoaXMuWG89dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbNF19Yy5oaj1iO2IucHJvdG90eXBlPXt1dDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMudnQ6dGhpcy5NaihhKX0sTWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLk5qOnRoaXMuSHYoYSl9LEh2OmZ1bmN0aW9uKGEpe3JldHVybiA5PAphP3RoaXMuSXY6dGhpcy50cChhKX0sdHA6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnVwOnRoaXMuSm4oYSl9LEpuOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Lbjp0aGlzLnpzKGEpfSx6czpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuQXM6dGhpcy5XcChhKX0sV3A6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLlhwOnRoaXMuSm0oYSl9LEptOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuS206dGhpcy5ScyhhKX0sUnM6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlNzOnRoaXMuV28oYSl9LFdvOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5Ybzp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLmo6YX19fSkoYyk7dmFyIE1hPWMuaGp8fE1hLHVjPW5ldyBNYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPQp1Yy51dCg0KTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEpe3RoaXMudXJsPWE7dGhpcy5tZXRob2Q9IkdFVCI7dGhpcy5kYXRhPXt9fWMuYms9YjtiLnByb3RvdHlwZT17c2V0RGF0YTpmdW5jdGlvbihhKXt0aGlzLmRhdGE9YX0sRXQ6ZnVuY3Rpb24oYSl7dGhpcy5tZXRob2Q9YX0sYXBwZW5kRGF0YTpmdW5jdGlvbihhLGIpe3RoaXMuZGF0YVthXT1ifSxkbjpmdW5jdGlvbihhKXt0cnl7dGhpcy5hcHBlbmREYXRhKCJob21hZF9tYWNyb3MiLEpTT04uc3RyaW5naWZ5KGEpKX1jYXRjaChiKXt9fX19KShjKTt2YXIgeT1jLmJrfHx5OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsaCxkLGYpe3RoaXMuYmI9YTt0aGlzLnhnPXRoaXMuZ2k9ITE7dGhpcy5taD1kO3RoaXMuSmg9ITE7InN0cmluZyI9PT10eXBlb2YgYSYmKHRoaXMuYmI9bmV3IHkoYSkpO3ZhciBjPXRoaXMucWI9bmV3IFhNTEh0dHBSZXF1ZXN0O2Mub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWh8fAo0IT1jLnJlYWR5U3RhdGV8fDIwMCE9Yy5zdGF0dXMmJjIwMSE9Yy5zdGF0dXN8fGgoYyk7aWYoZCYmND09Yy5yZWFkeVN0YXRlJiYyMDAhPWMuc3RhdHVzJiYyMDEhPWMuc3RhdHVzKWQoYyk7ZWxzZSBpZig0PT1jLnJlYWR5U3RhdGUmJjA9PWMuc3RhdHVzJiZsJiZsLkZlKHRoaXMuYmIudXJsKSYmbC5OZCl7dmFyIGU9bmV3IHkoYS51cmwpO2UuRXQoIlBPU1QiKTtlLnNldERhdGEoe2hvbWFkX3Bpbmc6InRydWUifSk7KG5ldyBiKGUsZnVuY3Rpb24oYSl7dmFyIGI9ITE7dHJ5e2I9SlNPTi5wYXJzZShhLnJlc3BvbnNlVGV4dCl9Y2F0Y2goaCl7Yj0hMX1iJiZiLnBpbmcmJiJwb25nIj09Yi5waW5nJiYoYj0hMCk7Ynx8bC5rYSgicmVxdWVzdF9mYWlsZWRfbm9wb25nICIpfSxmdW5jdGlvbigpe2wua2EoInJlcXVlc3RfZmFpbGVkIil9KSkubG9hZCgpfWYmJjQhPWMucmVhZHlTdGF0ZSYmZihjKX0uYmluZCh0aGlzKX1jLmNrPWI7Yi5wcm90b3R5cGU9e2xvYWQ6ZnVuY3Rpb24oKXt2YXIgYT0KdGhpcy5iYi5kYXRhO2lmKCJzdHJpbmciIT10eXBlb2YgYSl7dmFyIGI9YSxhPSIiLGQ7Zm9yKGQgaW4gYilhKz0iJiIrZCsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGJbZF0pO2E9YS5zdWJzdHIoMSl9dGhpcy54ZyYmKGErPSImaG9tYWRfZm9sbG93X3JlZGlyZWN0cz10cnVlIik7dHJ5e3RoaXMuSmg/dGhpcy5xYi5vcGVuKHRoaXMuYmIubWV0aG9kLHRoaXMuYmIudXJsLCExKTp0aGlzLnFiLm9wZW4odGhpcy5iYi5tZXRob2QsdGhpcy5iYi51cmwsITApLHRoaXMuZ2l8fCh0aGlzLnFiLndpdGhDcmVkZW50aWFscz0hMCksMDxhLmxlbmd0aCYmdGhpcy5xYi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSxhWyJYLUhvbWFkLVBvc3QiXSYmdGhpcy5xYi5zZXRSZXF1ZXN0SGVhZGVyKCJYLUhvbWFkLVBvc3QiLCJ0cnVlIiksdGhpcy5xYi5zZW5kKGEpfWNhdGNoKGYpe2wmJmwuRmUodGhpcy5iYi51cmwpP2wuTmQ/Cmwua2EoInJlcXVlc3RfZmFpbGVkIik6ZS50cmFjaygiY2hlY2siLCJyZXF1ZXN0X2ZhaWxlZCIsITApOmwuRmUodGhpcy5iYi51cmwpLHRoaXMubWgmJnRoaXMubWgoKX1yZXR1cm4gdGhpcy5xYn19fSkoYyk7dmFyIE5hPWMuY2t8fE5hOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5LYT0hMTt0aGlzLnFjPSIiO3RoaXMuZWU9dGhpcy5wYz10aGlzLnViPW51bGw7dGhpcy5Wbz10aGlzLkdiPXRoaXMuZGg9ITE7dGhpcy5KYT0iIjt0aGlzLllnPSExO3RoaXMuRmE9dGhpcy5yZD0iIjt0aGlzLlVnPXRoaXMuWD10aGlzLmlzRW5hYmxlZD10aGlzLlplPSExO3RoaXMuQ2E9W107dGhpcy5LZz10aGlzLlpiPSIiO3RoaXMubGU9ITE7dGhpcy5wZj0wO3RoaXMuRWY9InN2bXBsYXllci5hZHZlcnRpc2luZy5IT01BRF9WRVJJRklFRCI7dGhpcy5DZj0ic3ZtcGxheWVyLmFkdmVydGlzaW5nLkhPTUFEX0JMT0NLRUQiO3RoaXMuS2I9InN2bXBsYXllci5hZHZlcnRpc2luZy5IT01BRF9OT0JMT0NLRVIiOwp0aGlzLmhjPSJzdm1wbGF5ZXIuYWR2ZXJ0aXNpbmcuSE9NQURfQURCTE9DS0VSIjt0aGlzLkRmPSJzdm1wbGF5ZXIuYWR2ZXJ0aXNpbmcuSE9NQURfQ09PS0lFQkxPQ0tFUiI7dGhpcy5hYz0iIjt0aGlzLmJjPVtdO3RoaXMuY2M9W107dGhpcy5MZD1bXTt0aGlzLiRiPSIiO3RoaXMucWY9MDt0aGlzLnZpZGVvcGxhemE9e307dGhpcy5BYz0hMTt0aGlzLnVvPXRoaXMuT2Q9bnVsbDt0aGlzLkZoPXRoaXMuTmM9dGhpcy5wZz10aGlzLnVmPXRoaXMuTmQ9dGhpcy5nZT10aGlzLlFjPSExO3RoaXMuZ2I9e2dsb2JhbDohMSxjbGllbnQ6ITEsY3VzdG9tZXI6ITF9O3RoaXMudGQ9MDt0aGlzLk1nPSExO3RoaXMuTGc9MUUzO3RoaXMuJGM9ITE7dGhpcy5QYT0xRTM7dGhpcy5NZj0iIn1jLmRrPWI7Yi5wcm90b3R5cGU9e2dldENvbmZpZzpmdW5jdGlvbigpe3JldHVybntpc0FjdGl2ZTp0aGlzLkthLGFkdGFncGFyYW1ldGVyOnRoaXMucWMsYWR0YWdtb2RpZmllcjp0aGlzLnViLGFkdGFnbW9kaWZpZXJBZHY6dGhpcy5wYywKYWR0YWdyZWdleDp0aGlzLmVlLGJpdHJhdGU6dGhpcy5QYSxqc3BvcHVwczp0aGlzLmRoLHNpZGVsb2Fkczp0aGlzLkdiLGRpc2FibGV0ZXN0czp0aGlzLlZvLGhvbWFkQWxpYXM6dGhpcy5KYSxpc0luaXRpYWxpemVkOnRoaXMuWWcsZ2xvYmFsQ29uZmlnOnRoaXMucmQsY2xpZW50Q29uZmlnOnRoaXMuRmEsaXNFbmFibGVkOnRoaXMuaXNFbmFibGVkLGlzVmVyaWZpZWQ6dGhpcy5YLGlzQmxvY2tlZDp0aGlzLlVnLHNlcnZlcjp0aGlzLkNhLHN2bUNvbmZpZzp0aGlzLlpiLGhvbWFkQWRwYXRoOnRoaXMuS2csZGlzYWJsZUNvb2tpZVRlc3Q6dGhpcy5sZSx0ZXN0Q29va2llQXR0ZW1wdHM6dGhpcy5wZixIT01BRF9WRVJJRklFRDp0aGlzLkVmLEhPTUFEX0JMT0NLRUQ6dGhpcy5DZixIT01BRF9OT0JMT0NLRVI6dGhpcy5LYixIT01BRF9BREJMT0NLRVI6dGhpcy5oYyxIT01BRF9DT09LSUVCTE9DS0VSOnRoaXMuRGYsdGVzdEhpZGU6dGhpcy5hYyx0ZXN0VGFnczp0aGlzLmJjLHRlc3RUYWdzSlM6dGhpcy5jYywKdGVzdFRhZ3NYSFI6dGhpcy5MZCx0ZXN0Q29va2llOnRoaXMuJGIsdGhyb3R0bGU6dGhpcy5xZix2aWRlb3BsYXphOnRoaXMudmlkZW9wbGF6YSxob21hZFRlc3RlZDp0aGlzLkFjLGNoZWNrZWRIb21hZFN0YXR1c0NhbGxiYWNrOnRoaXMudW8sYWRCbG9ja2VyRGV0ZWN0ZWQ6dGhpcy5RYyxibG9ja2VkV2FzQ2FsbGVkOnRoaXMuZ2UsdXNlU3RyaWN0Q2hlY2tzOnRoaXMuTmQsdXNlU3RyaWN0Q29uZmlnQ2hlY2tzOnRoaXMudWYsY29uZmlnRmFpbHVyZXM6dGhpcy5nYixzaXRlQ29uZmlnOnRoaXMuYWIsc2VydmVySWQ6dGhpcy5CaCxlbmFibGVRdWFydGlsZVRyYWNraW5nOnRoaXMudmMsdnBhaWQ6dGhpcy5OYyxza2lwQWxsb3dlZDp0aGlzLkZoLHZtYXBzOnRoaXMuY2ksYWx0ZXJuYXRlX2NsaWNrdGhyb3VnaDp0aGlzLiRjLGFkRmFsbGJhY2tVUkw6dGhpcy5NZn19LERxOmZ1bmN0aW9uKCl7dmFyIGE9ITEsYjtmb3IoYiBpbiB0aGlzLmdiKSJib29sZWFuIj09dHlwZW9mIHRoaXMuZ2JbYl0mJgoxPT10aGlzLmdiW2JdJiYoYT0hMCk7cmV0dXJuIGF9LGRmOmZ1bmN0aW9uKGEpe3RoaXMuZ2JbYV09ITB9LGZxOmZ1bmN0aW9uKCl7dmFyIGE9W10sYjtmb3IoYiBpbiB0aGlzLmdiKSJib29sZWFuIj09dHlwZW9mIHRoaXMuZ2JbYl0mJjE9PXRoaXMuZ2JbYl0mJmEucHVzaChiKTtyZXR1cm4gYX0sS2Q6ZnVuY3Rpb24oYSl7YT1hfHwiIjtpZigic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIGE7YT1hLnJlcGxhY2UoIlt0aW1lXSIsTWF0aC5yb3VuZCgobmV3IERhdGUpLmdldFRpbWUoKS8xRTMpKTthPWEucmVwbGFjZSgiW3RpbWVNU10iLChuZXcgRGF0ZSkuZ2V0VGltZSgpKTthPWEucmVwbGFjZSgiW3RpbWVzdGFtcF0iLChuZXcgRGF0ZSkuZ2V0VGltZSgpKTthPWEucmVwbGFjZSgiW3JhbmRvbV0iLHRoaXMuRWIoMTApLnRvU3RyaW5nKCkpO2E9YS5yZXBsYWNlKCJbZG9jdW1lbnRVUkxdIixkb2N1bWVudC5VUkwpO2E9YS5yZXBsYWNlKCJbZG9jdW1lbnRCYXNlVVJJXSIsZG9jdW1lbnQuYmFzZVVSSSk7CnJldHVybiBhPWUuUG4oYSl9LHphOmZ1bmN0aW9uKGEsYixkKXt2YXIgZj0iIixjPSIiLGU9IiIsZz0iIjtpZighdGhpcy5LYSYmIWIpcmV0dXJuIG5ldyB5KGEpO2Y9dGhpcy5FZShhKTtjPXRoaXMubGEoYSk7Zj8odGhpcy5DYygpP2U9YTplPWMucHJvdG9jb2wrIjovLyIrYy5hdXRob3JpdHkrIi8iLGc9Yy5wYXRoLnN1YnN0cigxKSk6KGU9dGhpcy5EZCgpLGc9Yy5wYXRoLnN1YnN0cigxKSsoYy5xdWVyeT8iPyIrYy5xdWVyeToiIikpO2QmJih0aGlzLnFjfHx0aGlzLnVifHx0aGlzLnBjfHx0aGlzLmVlKSYmKGc9dGhpcy5XcihnKSk7YT1uZXcgeShlKTthLnVybD1lO2U9IiI7ZT1mP2MuaG9zdC5zcGxpdCgiLiIpLnNsaWNlKDEpLmpvaW4oIi0iKTp0aGlzLmhxKGMuaG9zdCk7YS5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9ZTthLmRhdGEuaG9tYWRfdXJsX3N1ZmZpeD1nO2EuZGF0YS5ob21hZF91cmxfc3VmZml4X2Jhc2U2ND10aGlzLnZiKGcpO2EubWV0aG9kPSJQT1NUIjsKcmV0dXJuIGF9LEVlOmZ1bmN0aW9uKGEpe3ZhciBiPSExLGQ9bmV3IFJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPyhbdy4tXSopOj8uKihbMC05XSspPy8/KFthLWYwLTldezQwfSkvPyQiLCJnIik7KGQ9ZC5leGVjKGEpKSYmKGRbMl18fGRbNV0pP2I9ITA6dGhpcy5DYygpJiYoZD1uZXcgUmVnRXhwKCJeKGh0dHBzPyk6Ly8oW3cuLV0qKTo/LiooWzAtOV0rKT8vKFthLWYwLTldezQwfSkvPyQiLCJnIiksKGQ9ZC5leGVjKGEpKSYmZFs0XSYmKGI9ITApKTtyZXR1cm4gYn0sQ2M6ZnVuY3Rpb24oKXt2YXIgYT0hMSxiPSIiO3RoaXMuQ2EmJnRoaXMuQ2EubGVuZ3RoJiYwPHRoaXMuQ2EubGVuZ3RoJiYoYj10aGlzLkNhWzBdLGI9Yi5yZXBsYWNlKCJodHRwczovLyIsIiIpLGI9Yi5yZXBsYWNlKCJodHRwOi8vIiwiIiksYj1iLnJlcGxhY2UoIi8vIiwiIiksYT0oYT1iLnNwbGl0KCIuIikpJiZhWzBdJiYiW2hhc2hdIj09YVswXT8hMTohMCk7cmV0dXJuIGF9LEZlOmZ1bmN0aW9uKGEpe3ZhciBiPQohMSxkPVJlZ0V4cCgiXihodHRwcz8pOi8vKFthLWYwLTldezQwfSkuPy4qIiwiZyIpLmV4ZWMoYSk7ZCYmKGRbMl18fGRbNV0pP2I9ITA6Yj10aGlzLkVlKGEpO3JldHVybiBifSxocTpmdW5jdGlvbihhKXt2YXIgYj0iIixkPSIiO2lmKCJzdHJpbmciPT09dHlwZW9mIHRoaXMuSmEmJjA8dGhpcy5KYS5sZW5ndGgpcmV0dXJuIHRoaXMuSmE7Zm9yKGQgaW4gdGhpcy5KYSlpZihiPXRoaXMuSmFbZF0sYi5oYXNPd25Qcm9wZXJ0eSgidXJsIikmJmIudXJsPT09YSlyZXR1cm4gYi5TdjtyZXR1cm4ibm9uZSJ9LHVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2FbdGhpcy5CaF19LERkOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy51ZCgpLGI9dGhpcy5FaCgobmV3IERhdGUpLmdldFRpbWUoKSsiIiksZD0iMWFiY2RmIi5zcGxpdCgiIik7cmV0dXJuIGEucmVwbGFjZSgiW2hhc2hdIixiLnNsaWNlKDAsLTEpKyIiK2RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmQubGVuZ3RoKV0pfSxqaDpmdW5jdGlvbihhLApiLGQpe2E9ITE7Yj0iIjtpZihkLmV2YWwpdHJ5e2I9ZXZhbCgiKCIrZC5ldmFsKyIpKCkiKX1jYXRjaChmKXthPSEwfWVsc2UgYT0hMDthJiYiS0VFUCIhPT1kLmZhbGxiYWNrJiYoYj1kLmZhbGxiYWNrKTtyZXR1cm4gYn0sVnI6ZnVuY3Rpb24oYSxiKXt2YXIgZD1lLmxhKGEpLGY9IiIsZj0iIixjO2ZvcihjIGluIGIpe2lmKGJbY10uc3VidmFsdWVzKXtmb3IodmFyIGc9ZGVjb2RlVVJJQ29tcG9uZW50KGQucXVlcnlLZXlbY10pLnNwbGl0KCImIiksZj17fSxIPTA7SDxnLmxlbmd0aDtIKyspe3ZhciBrPWdbSF0uc3BsaXQoIj0iKTtmW2tbMF1dPWtbMV19Zm9yKHZhciBsIGluIGJbY10uc3VidmFsdWVzKWZbbF09dGhpcy5qaChmW2xdLGwsYltjXS5zdWJ2YWx1ZXNbbF0pO2c9W107Zm9yKGwgaW4gZilnLnB1c2gobCsiPSIrZltsXSk7Zj1nPWVuY29kZVVSSUNvbXBvbmVudChnLmpvaW4oIiYiKSl9ZWxzZSBmPXRoaXMuamgoZC5xdWVyeUtleVtjXSxjLGJbY10pO2QucXVlcnlLZXlbY109CmZ9bD1bXTtmb3IoYyBpbiBkLnF1ZXJ5S2V5KWwucHVzaChjKyI9IitkLnF1ZXJ5S2V5W2NdKTtyZXR1cm4gZj1kLmhvc3QrZC5wYXRoKyI/IitsLmpvaW4oIiYiKX0sV3I6ZnVuY3Rpb24oYSl7dGhpcy5xYyYmKGErPXRoaXMucWMpO2lmKHRoaXMudWIpZm9yKHZhciBiIGluIHRoaXMudWIpdGhpcy51Yi5oYXNPd25Qcm9wZXJ0eShiKSYmKGE9YS5yZXBsYWNlKGIsdGhpcy51YltiXSkpO3RoaXMucGMmJihhPXRoaXMuVnIoYSx0aGlzLnBjKSk7cmV0dXJuIGF9LGw6ZnVuY3Rpb24oYSxiLGQsZixjLGUpe2w9dGhpczt0aGlzLllnPSEwO3RoaXMucmQ9YTt0aGlzLkZhPWI7dGhpcy5aZT1kO3RoaXMuT2Q9Zjt0aGlzLnNjPWM7dGhpcy5hYj1lfHx7fTt0aGlzLkpyKCk7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLkZhKXRoaXMuSHIoKTtlbHNlIGlmKCJvYmplY3QiIT09dHlwZW9mIHRoaXMuRmEpdHJ5e3RoaXMuRmE9YigpLHRoaXMuZGQoKX1jYXRjaChnKXt0aGlzLmthKCJub0NsaWVudENvbmZpZyIpfX0sCm5iOmZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7dHJ5e2I9bmV3IEV2ZW50KGEpfWNhdGNoKGQpe2I9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksYi5pbml0RXZlbnQoImN1c3RvbSIsITAsITEpfXJldHVybiBifSxKcjpmdW5jdGlvbigpe3RoaXMuTGEobmV3IHkodGhpcy5yZCt0aGlzLmFlKCJnbG9iYWwiKSksdGhpcy56cS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7dGhpcy5kZigiZ2xvYmFsIik7Im9iamVjdCI9PXR5cGVvZiBfY2xpZW50Q29uZmlnJiZ0aGlzLmRkKCl9LmJpbmQodGhpcyksITApfSxIcjpmdW5jdGlvbigpe3RoaXMuTGEobmV3IHkodGhpcy5GYSt0aGlzLmFlKCJjbGllbnQiLC0xIT10aGlzLkZhLmluZGV4T2YoIj8iKSkpLHRoaXMuZGQuYmluZCh0aGlzKSxmdW5jdGlvbigpe3RoaXMuZGYoImNsaWVudCIpO3RoaXMua2EoImNsaWVudENvbmZpZ0NvdWxkTm90QmVMb2FkZWQiKX0uYmluZCh0aGlzKSwhMCl9LGFlOmZ1bmN0aW9uKGEsYil7dmFyIGQ7ZD0oYj8iJiI6CiI/IikrKCJjYWNoZT0iK3RoaXMuRWIoKSk7dGhpcy5hYiYmdGhpcy5hYi5ub0NsaWVudENvbmZpZ0NhY2hlQnVzdGVyJiYiY2xpZW50Ij09YSYmKGQ9IiIpO3RoaXMuYWImJnRoaXMuYWIubm9DYWNoZUJ1c3RlciYmKGQ9IiIpO3JldHVybiBkfSxrYTpmdW5jdGlvbihhKXtpZighdGhpcy5nZSl7dGhpcy5nZT0hMDt2YXIgYj1mdW5jdGlvbigpe2Zvcih2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSxiPTA7YjxhLmxlbmd0aDtiKyspe2lmKGFbYl0mJmFbYl0ucGF1c2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBhW2JdLnBhdXNlKXRyeXthW2JdLnBhdXNlKCl9Y2F0Y2goaCl7fWFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKX1hPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKTtmb3IoYj0wO2I8YS5sZW5ndGg7YisrKWFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTthPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInZpZGVvLXdyYXBwZXIiKTsKZm9yKGI9MDtiPGEubGVuZ3RoO2IrKylhW2JdJiZhW2JdLnBhcmVudE5vZGUmJmFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTthPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInZpZGVvcGxheWVyIik7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKylhW2JdJiZhW2JdLnBhcmVudE5vZGUmJmFbYl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2JdKTtpZih3aW5kb3cuc2VsZiE9d2luZG93LnRvcClmb3IoYT13aW5kb3cuZG9jdW1lbnQ7YS5oYXNDaGlsZE5vZGVzKCk7KWEucmVtb3ZlQ2hpbGQoYS5sYXN0Q2hpbGQpfTsiNHBsYXllcnMuZGUiPT1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpJiYodGhpcy5zYz0hMSk7dGhpcy5zYyYmImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLnNjP3RoaXMuc2MoKTooYigpLHdpbmRvdy5zZXRJbnRlcnZhbChiLDUwMCkpO3RoaXMuWD10aGlzLlVnPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLkNmKSk7CnRoaXMuSWIoKTtlLndjKGsuUXMpOyhiPWUuU2IodGhpcy51ZCgpKSl8fChiPWUuU2IoZG9jdW1lbnQubG9jYXRpb24uaHJlZikpO2F8fChhPSJ1bmtvd24iKTtlLnRyYWNrKCJzdGF0c19oZF9wZW5hbHR5IixhLCEwKX19LHpxOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLlgpe3ZhciBiPXt9O3RyeXtiPUpTT04ucGFyc2UoYS5yZXNwb25zZVRleHQpfWNhdGNoKGQpe2IuZW5hYmxlZD0iZmFsc2UifXRoaXMuaXNFbmFibGVkPXRoaXMuZGMoYi5lbmFibGVkKTt0aGlzLlg9IXRoaXMuaXNFbmFibGVkO3RoaXMuaXNFbmFibGVkPyJvYmplY3QiIT10eXBlb2YgdGhpcy5GYXx8dGhpcy5aYnx8dGhpcy5KYXx8dGhpcy5kZCgpOih0aGlzLkthPXRoaXMuaXNFbmFibGVkPSExLHRoaXMuWD0hMCxkb2N1bWVudC5kaXNwYXRjaEV2ZW50KHRoaXMubmIodGhpcy5LYikpLHRoaXMuSWIoKSl9fSxkZDpmdW5jdGlvbihhKXt2YXIgYj0hMTthJiYoYj1hLnJlc3BvbnNlVGV4dCk7YT17fTtpZihiKXRyeXthPQpKU09OLnBhcnNlKGIpfWNhdGNoKGQpe2E9dGhpcy5GYX1lbHNlIGE9dGhpcy5GYTt0aGlzLmlzRW5hYmxlZD10aGlzLmRjKGEuZW5hYmxlZCk7dGhpcy5YPSF0aGlzLmlzRW5hYmxlZDt0aGlzLkNhPWEuc2VydmVyfHxbXTtmb3IoYj0wO2I8dGhpcy5DYS5sZW5ndGg7YisrKXRoaXMuQ2FbYl09dGhpcy5DYVtiXS5yZXBsYWNlKCJkYW1vaC53aWtpYS5jb20iLCJkYW1vaC53aWtpYS5jb20uc3Zvbm0tYWxpYXMuY29tIik7dGhpcy5aYj1hLmNvbmZpZ3x8IiI7dGhpcy5KYT1hLmFsaWFzfHxudWxsO3RoaXMuS2c9YS5hZHBhdGh8fCIiO3RoaXMubGU9YS5kaXNhYmxlY29va2lldGVzdHx8ITE7dGhpcy5CaD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqdGhpcy5DYS5sZW5ndGgpO3RoaXMuaXNFbmFibGVkJiZ0aGlzLlpiJiZ0aGlzLkphJiZ0aGlzLkNhLmxlbmd0aD90aGlzLkRjKCExKToodGhpcy5LYT10aGlzLmlzRW5hYmxlZD0hMSx0aGlzLlg9ITAsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh0aGlzLm5iKHRoaXMuS2IpKSwKdGhpcy5JYigpKX0sRGM6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWCl7dmFyIGI9e307aWYoYSl7dmFyIGI9bmV3IHkodGhpcy5EZCgpKSxkPXRoaXMubGEodGhpcy5aYik7Yi5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9InMzaG9tYWRnbG9iYWxjb25maWdzIjtiLmRhdGEuaG9tYWRfdXJsX3N1ZmZpeD1kLnBhdGguc3Vic3RyKDEpLnJlcGxhY2UoImhvbWFkLWdsb2JhbC1jb25maWdzLnNjaG5lZXZvbm1vcmdlbi5jb20vIiwiIik7Yi5tZXRob2Q9IlBPU1QifWVsc2UgYj1uZXcgeSh0aGlzLlpiK3RoaXMuYWUoImN1c3RvbWVyIikpO3RoaXMuTGEoYix0aGlzLmR1LmJpbmQodGhpcyksZnVuY3Rpb24oKXt0aGlzLmRmKCJjdXN0b21lciIpO2E/dGhpcy5MbD90aGlzLmthKCJub1NWTUNvbmZpZyIpOih0aGlzLkxsPSEwLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5EYyghMCl9LmJpbmQodGhpcyksMTAwKSk6dGhpcy5EYyghMCl9LmJpbmQodGhpcyksITApfX0sZHU6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWCl7YT0KYS5yZXNwb25zZVRleHQ7dmFyIGI9e307dHJ5e2I9SlNPTi5wYXJzZShhKX1jYXRjaChkKXtpZighdGhpcy5BYyYmdGhpcy5pc0VuYWJsZWQpe3RoaXMuQWM9ITA7dGhpcy5EYyghMCk7cmV0dXJufX10aGlzLk5kPXRoaXMuZGMoYi5zdHJpY3QpO3RoaXMudWY9dGhpcy5kYyhiLnN0cmljdF9jb25maWdfZW5hYmxlZCk7dGhpcy5wZz1iLmR1cmF0aW9uX2NoZWNrX3BlbmFsdHlfZGlzYWJsZWR8fCExO3RoaXMudmM9dGhpcy5kYyhiLmVuYWJsZVF1YXJ0aWxlVHJhY2tpbmcpO3RoaXMuaXNFbmFibGVkPXRoaXMuZGMoYi5lbmFibGVkKTt0aGlzLmFjPWIudGVzdGhpZGV8fCIiO3RoaXMuY2M9Yi50ZXN0YWR0YWdzanN8fGIudGVzdGFkdGFnc3x8W107dGhpcy5MZD1iLnRlc3RhZHRhZ3N4aHJ8fFtdO3RoaXMucWM9Yi5hZHRhZ3BhcmFtZXRlcnx8IiI7dGhpcy51Yj1iLmFkdGFnbW9kaWZpZXJ8fG51bGw7dGhpcy5wYz1iLmFkdGFnbW9kaWZpZXJfYWR2fHxudWxsO3RoaXMuZWU9Yi5hZHRhZ3JlZ2V4fHwKbnVsbDt0aGlzLmRoPWIuanNwb3B1cHN8fCExO3RoaXMuR2I9Yi5zaWRlbG9hZHN8fCExO3RoaXMuTmM9Yi52cGFpZHx8ITE7dGhpcy5hYi52cGFpZD10aGlzLk5jO3RoaXMuRmg9Yi5za2lwYWxsb3dlZHx8ITE7dGhpcy5hZD1iLmNhcHRpb25fZHVyYXRpb258fCExO3RoaXMuY2k9Yi52bWFwc3x8IiI7dGhpcy4kYz1iLmFsdGVybmF0ZV9jbGlja3Rocm91Z2h8fCExO3RoaXMuUGE9Yi5iaXRyYXRlfHwxRTM7dGhpcy5NZj1iLmFkX2ZhbGxiYWNrX1VSTHx8IiI7dGhpcy4kYj1iLnRlc3QzcmRwYXJ0eWNvb2tpZSYmYi50ZXN0M3JkcGFydHljb29raWUgaW5zdGFuY2VvZiBBcnJheT90aGlzLnBxKGIudGVzdDNyZHBhcnR5Y29va2llKTpiLnRlc3QzcmRwYXJ0eWNvb2tpZXx8IiI7dGhpcy5sZSYmKHRoaXMuJGI9bnVsbCk7dGhpcy5xZj1iLnRocm90dGxlfHwwO3RoaXMudmlkZW9wbGF6YT1iLnZpZGVvcGxhemF8fHt9OyF0aGlzLkFjJiZ0aGlzLmlzRW5hYmxlZD8odGhpcy5BYz0hMCx0aGlzLkRjKCEwKSk6CnRoaXMuaXNFbmFibGVkJiYhdGhpcy55dSgpJiYodGhpcy5hY3x8dGhpcy5jY3x8dGhpcy5iY3x8dGhpcy4kYnx8dGhpcy5MZCk/dGhpcy5aZT8odGhpcy5LYT10aGlzLlg9ITAsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh0aGlzLm5iKHRoaXMuS2IpKSx0aGlzLmllKCksdGhpcy5JYigpKTp0aGlzLmx1KCk6KHRoaXMuaXNFbmFibGVkPSExLHRoaXMubXUoKSl9fSxsdTpmdW5jdGlvbigpe3RoaXMua3UoKTt0aGlzLm51KCl9LG51OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4idmFyIGV2dCA9IHt9O2lmICh0eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7ZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KCciK2ErIicpO30gZWxzZSB7ZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7ZXZ0LmluaXRDdXN0b21FdmVudCgnIithKyInLCBmYWxzZSwgZmFsc2UsIHt9KTt9d2luZG93LnBhcmVudC5kb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2dCk7In0KdmFyIGI9ImlubGluZWV2YWxkYXRhIixkPTA7dHJ5e3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2Yud2lkdGg9MTtmLmhlaWdodD0xO2Yuc3R5bGUuZGlzcGxheT0ibm9uZSI7Zi5zcmM9ImFib3V0OmJsYW5rIjt2YXIgYz1lLmJhKDEwKSxnPWUuYmEoMTApLEg9ZS5iYSgxMCk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihjLGZ1bmN0aW9uKCl7ZCsrO2I9Yi5yZXBsYWNlKCJkYXRhIiwiIil9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGcsZnVuY3Rpb24oKXtkKys7Yj1iLnJlcGxhY2UoImV2YWwiLCIiKX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoSCxmdW5jdGlvbigpe2QrKztiPWIucmVwbGFjZSgiaW5saW5lIiwiIil9KTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYpO2YuY29udGVudFdpbmRvdy5kb2N1bWVudC53cml0ZShhdG9iKCJQR2gwYld3K1BHaGxZV1ErUEhOamNtbHdkQ0IwZVhCbFBTSjBaWGgwTDJwaGRtRnpZM0pwY0hRaVBnPT0iKSsKYShIKSthdG9iKCJQQzl6WTNKcGNIUStQSE5qY21sd2RDQjBlWEJsUFNKMFpYaDBMMnBoZG1GelkzSnBjSFFpUG1WMllXd29JZz09IikrYShnKSthdG9iKCJJaWs4TDNOamNtbHdkRDQ4YzJOeWFYQjBJSFI1Y0dVOUluUmxlSFF2YW1GMllYTmpjbWx3ZENJZ2MzSmpQU0prWVhSaE9uUmxlSFF2YW1GMllYTmpjbWx3ZER0aVlYTmxOalFzIikrZS52YihhKGMpKSthdG9iKCJJajQ4TDNOamNtbHdkRDQ4TDJobFlXUStQR0p2WkhrK1BDOWliMlI1UGp3dmFIUnRiRDQ9IikpfWNhdGNoKGspe313aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGYpfWNhdGNoKGEpe31pZigzIT1kKXt2YXIgYz1lLnVjKCk7aWYoKGMuaXNDaHJvbWV8fGMuaXNGaXJlZm94KSYmIWMuaXNFZGdlJiYhZS5UYSgpKXtpZih0aGlzLmFiJiZ0aGlzLmFiLnBsYXllciYmdGhpcy5hYi5wbGF5ZXIubGVuZ3RoKXtlLnRyYWNrKCJzdGF0c19oZF9jc3BfaGRwIixiLCEwKTsKcmV0dXJufXRoaXMua2EoImNzcF8iK2IpfWUudHJhY2soInN0YXRzX2hkX2NzcCIsYiwhMCl9fS5iaW5kKHRoaXMpLDFFMyl9LG11OmZ1bmN0aW9uKCl7dGhpcy5YPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLktiKSk7dGhpcy5JYigpfSxMYzpmdW5jdGlvbihhKXt0aGlzLlFjPSEwO3RoaXMuWHx8KHRoaXMuWD10aGlzLkthPSEwLGRvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYihhKSksdGhpcy5JYigpLHRoaXMuaWUoKSl9LGt1OmZ1bmN0aW9uKCl7aWYodGhpcy5hYyl7dmFyIGE9ZS51YygpO2lmKChhLmlzQ2hyb21lfHxhLmlzRmlyZWZveCkmJnRoaXMuYmgoKSl0aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZEhpZGUoKSBzdGV2ZSBpcyBhbGl2ZSIpO2Vsc2V7YT0hMTt0cnl7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yi5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLmFjKTtiLnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuYWMpOwpiLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJ3aWR0aDoxcHg7aGVpZ2h0OjFweDttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4O2JhY2tncm91bmQtY29sb3I6I2ZmMDAwMCIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYik7dmFyIGQ9MD09PWIub2Zmc2V0V2lkdGh8fDA9PT1iLm9mZnNldEhlaWdodDtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGIpO2E9ZH1jYXRjaChmKXt9YT90aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZEhpZGUoKSBhZCBlbGVtZW50IHdhcyBoaWRkZW4iKTp0aGlzLk5oKCl9fWVsc2UgdGhpcy5OaCgpfSxNaDpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXtmPWQuc2hpZnQoKS5yZXBsYWNlKCJbcmFuZG9tXSIsdGhpcy5FYigpKTt0aGlzLnF1KGYsMDxkLmxlbmd0aD9hLmJpbmQodGhpcyk6dGhpcy5tZi5iaW5kKHRoaXMpLGIuYmluZCh0aGlzKSl9ZnVuY3Rpb24gYigpe3RoaXMuTGModGhpcy5oYywibiBIb21hZFV0aWwudGVzdEFkQ2FsbCgpIGFkIGNhbGwgdG8gJyIrCmYrIicgd2FzIGJsb2NrZWQiKX1pZigodGhpcy5iYz10aGlzLkxkKSYmdGhpcy5iYy5sZW5ndGgpe3ZhciBkPXRoaXMuYmMuc2xpY2UoKSxmPSIiO2EuYmluZCh0aGlzKSgpfWVsc2UgdGhpcy5tZigpfSxxdTpmdW5jdGlvbihhLGIsZCl7ZnVuY3Rpb24gZigpe2MoKSYmYigpfWZ1bmN0aW9uIGMoKXtyZXR1cm4gZT8od2luZG93LmNsZWFyVGltZW91dChlKSwhMCk6ITF9dmFyIGU9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtmKCl9LDNFMyk7dGhpcy5MYShuZXcgeShhKSxmLGZ1bmN0aW9uKCl7YygpJiZkKCl9KX0sTmg6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7Zj1kLnNoaWZ0KCkucmVwbGFjZSgiW3JhbmRvbV0iLHRoaXMuRWIoKSk7dGhpcy5ydShmLDA8ZC5sZW5ndGg/YS5iaW5kKHRoaXMpOnRoaXMuTWguYmluZCh0aGlzKSxiLmJpbmQodGhpcykpfWZ1bmN0aW9uIGIoKXt0aGlzLkxjKHRoaXMuaGMsIm4gSG9tYWRVdGlsLnRlc3RBZENhbGxKUygpIGFkIGNhbGwgdG8gJyIrCmYrIicgd2FzIGJsb2NrZWQiKX1pZih0aGlzLmNjJiZ0aGlzLmNjLmxlbmd0aCl7dmFyIGQ9dGhpcy5jYy5zbGljZSgpLGY7YS5iaW5kKHRoaXMpKCl9ZWxzZSB0aGlzLk1oKCl9LHJ1OmZ1bmN0aW9uKGEsYixkKXtmdW5jdGlvbiBmKCl7ZSgpJiZiKCl9ZnVuY3Rpb24gYygpe2UoKSYmZCgpfWZ1bmN0aW9uIGUoKXtyZXR1cm4gZz8od2luZG93LmNsZWFyVGltZW91dChnKSwhMCk6ITF9dmFyIGc9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtmKCl9LDNFMyk7dHJ5e3dpbmRvdy5vbmVycm9yPWZ1bmN0aW9uKGIsZCl7ZD09YSYmZSgpJiZjKCl9O3ZhciBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoayk7ay5zZXRBdHRyaWJ1dGUoImFzeW5jIiwiYXN5bmMiKTtrLnNldEF0dHJpYnV0ZSgiZGVmZXIiLCJkZWZlciIpO2sub25sb2FkPWY7ay5vbmVycm9yPWM7ay5zcmM9YTtrLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwKYyl9Y2F0Y2gobCl7ZigpfX0sbWY6ZnVuY3Rpb24oKXt0aGlzLiRiPyh0aGlzLnBmKyssdGhpcy5MYShuZXcgeSh0aGlzLiRiKSx0aGlzLmp1LmJpbmQodGhpcyksZnVuY3Rpb24oKXt0aGlzLm5mKCJDQ0MiKX0uYmluZCh0aGlzKSkpOnRoaXMuS2goKX0sbmY6ZnVuY3Rpb24oYSl7dGhpcy5MYyh0aGlzLkRmLCJuIEhvbWFkVXRpbC50ZXN0M3JkUGFydHlDb29raWUoKSBjYW5ub3Qgc2V0IDNyZCBwYXJ0eSBjb29raWUgIithKX0sanU6ZnVuY3Rpb24oYSl7YT1hLnJlc3BvbnNlVGV4dDt2YXIgYj0hMTt0cnl7Yj1KU09OLnBhcnNlKGEpfWNhdGNoKGQpe31iJiZiLnN0YXR1cz8idHJpZ2dlci1zZXQiPT1iLnN0YXR1cz8zPnRoaXMucGY/dGhpcy5tZigpOnRoaXMubmYoIkJCQiIpOiJhbHJlYWR5LXNldCI9PWIuc3RhdHVzJiZ0aGlzLktoKCk6dGhpcy5uZigiQUFBIil9LEtoOmZ1bmN0aW9uKCl7dGhpcy5YPSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5uYih0aGlzLktiKSk7CnRoaXMuSWIoKTt0aGlzLmllKCl9LGJoOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PWFkZEV2ZW50TGlzdGVuZXIudG9TdHJpbmcoKS5pbmRleE9mKCJuYXRpdmUgY29kZSIpJiYtMT09YWRkRXZlbnRMaXN0ZW5lci50b1N0cmluZygpLmluZGV4T2YoImFkZEV2ZW50TGlzdGVuZXIiKX0sSWI6ZnVuY3Rpb24oKXt2YXIgYT0iMCIsYj0iMCI7dHJ5e2UuVGEoKSYmKGE9IjEiKX1jYXRjaChkKXthPTJ9dGhpcy5RYyYmKGI9IjEiKTtlLnRyYWNrKCJzdGF0c19oZF9tb2JpbGVfYWIiLGErIiIrYiwhMCk7IjEiPT09YiYmKGUuQmEoInQtb25saW5lLmRlIil8fGUuQmEoImdpZ2EuZGUiKXx8ZS5CYSgid2VsdC5kZSIpKSYmZS50cmFjaygic3RhdHNfaGRfYWJfaXNTdGV2ZSIsdGhpcy5iaCgpLCEwKTtkb2N1bWVudC5kaXNwYXRjaEV2ZW50KHRoaXMubmIodGhpcy5FZikpO3RoaXMuT2QmJiJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5PZCYmdGhpcy5PZCgpfSxybzpmdW5jdGlvbigpe2lmKHRoaXMudWYmJgp0aGlzLkRxKCkpe3ZhciBhPXRoaXMuZnEoKTthJiZhLmpvaW4mJmUudHJhY2soImNvbmZpZ19mYWlsZWQiLGEuam9pbigiXyIpLCEwKX19LFJoOmZ1bmN0aW9uKGEpe2F8fChhPSIiKTtpZigic3RyaW5nIiE9PXR5cGVvZiBhKXRyeXthPWEudG9TdHJpbmcoKX1jYXRjaChiKXthPSJjb3VsZF9ub3RfY29udmVydF90b19zdHJpbmcifWE9YS50cmltKCk7ZS50cmFjaygic3RhdHNfaGRfYWN0aXZhdGVkIixhLCEwKX0sTGE6ZnVuY3Rpb24oYSxiLGQsZixjLGcpe3RoaXMudGR8fCh0aGlzLnRkPTApO3RoaXMudGQrKzt0aGlzLnRkPnRoaXMuTGcmJiF0aGlzLk1nJiYodGhpcy5NZz0hMCxlLnRyYWNrKCJzdGF0c19oZF9yZXF1ZXN0Y291bnQiLHRoaXMuTGcsITApKTthPW5ldyBOYShhLGIsZCk7ZiYmKGEuZ2k9ITApO2MmJmUubXIoKSYmKGEueGc9ITApO2cmJihhLkpoPSEwKTtyZXR1cm4gYS5sb2FkKCl9LGVnOmZ1bmN0aW9uKCl7ZS5UYSgpfHxlLllhKCJodHRwOi8vZDM3OTk2NGF5bWV4MnguY2xvdWRmcm9udC5uZXQvY2hlY2sueG1sP2VtcHR5PXRydWUiLAoiaG9tYWRzdGF0aWN2YXN0Iix7aG9tYWRfaGFzaF9ndWVzc2VkOiJ0cnVlIn0sZnVuY3Rpb24oYSl7dmFyIGI9bnVsbCxkPW51bGwsZj0iIjt0cnl7KGI9YS5yZXNwb25zZVhNTCl8fChiPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEucmVzcG9uc2VUZXh0LCJ0ZXh0L3htbCIpKSxkPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkIilbMF19Y2F0Y2goYyl7dGhpcy5rYSgibWVkaWFmaWxlX25veG1sIik7cmV0dXJufWlmKGQpaWYoYT1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJNZWRpYUZpbGUiKSlpZihhWzBdJiYoYT1hWzBdKSxhKXtmPWEmJmEuY2hpbGROb2RlcyYmYS5jaGlsZE5vZGVzWzBdP2EuY2hpbGROb2Rlc1swXS5ub2RlVmFsdWU6IiI7dGhpcy5DYygpfHwoYT10aGlzLmxhKGYpLGY9YS5wcm90b2NvbCsiOi8vIithLmhvc3QpO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7ZS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXtlLm5ldHdvcmtTdGF0ZT09CmUuTkVUV09SS19OT19TT1VSQ0UmJnRoaXMua2EoIm1lZGlhZmlsZSIpfS5iaW5kKHRoaXMpKTtlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNvdXJjZSIpKTtlLnNldEF0dHJpYnV0ZSgic3JjIixmKX1lbHNlIHRoaXMua2EoIm1lZGlhZmlsZV9ub21lZGlhIik7ZWxzZSB0aGlzLmthKCJtZWRpYWZpbGVfbm9tZWRpYSIpO2Vsc2UgdGhpcy5rYSgibWVkaWFmaWxlX25vYWQiKX0uYmluZCh0aGlzKSxmdW5jdGlvbigpe3RoaXMua2EoIm1lZGlhZmlsZV94bWxyZXF1ZXN0Iil9LmJpbmQodGhpcyksdGhpcyl9LGl1OmZ1bmN0aW9uKCl7cmV0dXJuImFsbCI9PT10aGlzLmNpfSxxbzpmdW5jdGlvbigpe3RoaXMuemEoImh0dHA6Ly9kMzc5OTY0YXltZXgyeC5jbG91ZGZyb250Lm5ldC9jaGVjay54bWw/ZW1wdHk9dHJ1ZSIsITApO3ZhciBhPXRoaXMuemEoImh0dHA6Ly9kMzc5OTY0YXltZXgyeC5jbG91ZGZyb250Lm5ldC9jaGVjay54bWw/ZW1wdHk9dHJ1ZSIsITApOwphLmRhdGEuaG9tYWRfdXJsX3ByZWZpeF9hbGlhcz0iaG9tYWRzdGF0aWN2YXN0IjthLmRhdGEuaG9tYWRfaGFzaF9ndWVzc2VkPSJ0cnVlIjt0aGlzLkxhKGEsdGhpcy5UdS5iaW5kKHRoaXMpLHRoaXMuU3UuYmluZCh0aGlzKSl9LFR1OmZ1bmN0aW9uKGEpe3ZhciBiPW51bGwsZD1udWxsO3RyeXsoYj1hLnJlc3BvbnNlWE1MKXx8KGI9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYS5yZXNwb25zZVRleHQsInRleHQveG1sIikpLGQ9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWQiKVswXX1jYXRjaChmKXtyZXR1cm59ZHx8dGhpcy5BcCgpfSxTdTpmdW5jdGlvbigpe30sQXA6ZnVuY3Rpb24oKXtlLndjKGsuenApO2UudHJhY2soImZhaWwtaW5pdCIsIjEwMSIpO3RoaXMua2EoInZhc3RmaWxlTWFuaXB1bGF0aW9uIil9LGllOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0VuYWJsZWQmJnRoaXMuR2IubGVuZ3RoKWZvcih2YXIgYT0wO2E8dGhpcy5HYi5sZW5ndGg7YSsrKXt2YXIgYj0KdGhpcy5HYlthXTsicmVxdWVzdCI9PWIudHlwZSYmZS5ZYShiLnVybCxiLmFsaWFzLG51bGwsZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7fSx0aGlzKTtpZigiZXZhbCI9PWIudHlwZSl7dmFyIGQ9bmV3IEo7d2luZG93W2QuaWEoKV09dGhpcztlLllhKGIudXJsLGIuYWxpYXMsbnVsbCxmdW5jdGlvbihhKXtpZihhLnJlc3BvbnNlVGV4dCl0cnl7ZXZhbChhLnJlc3BvbnNlVGV4dCl9Y2F0Y2goYil7fX0sZnVuY3Rpb24oKXt9LHRoaXMpfX19LHl1OmZ1bmN0aW9uKCl7cmV0dXJuIDEwMCpNYXRoLnJhbmRvbSgpPHRoaXMucWZ9LHBxOmZ1bmN0aW9uKGEpe3JldHVybiBhW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSphLmxlbmd0aCldfSxFYjpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnBvdygxMCxhfHwxMCkqKC44OTk5OTk5OTkqTWF0aC5yYW5kb20oKSsuMSkpfSxiYTpmdW5jdGlvbihhKXthPWF8fDEwO2Zvcih2YXIgYj0iIixkPTA7ZDxhO2QrKyliKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCguNT4KTWF0aC5yYW5kb20oKT82NTo5NykrTWF0aC5mbG9vcigyNipNYXRoLnJhbmRvbSgpKSk7cmV0dXJuIGJ9LGRjOmZ1bmN0aW9uKGEpe3JldHVybiJUcnVlIj09YXx8InRydWUiPT1hfHwxPT1hfHwiMSI9PWF8fDE9PWF9LHZiOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iIixkLGYsYyxlLGcsayxsPTA7bDxhLmxlbmd0aDspZD1hLmNoYXJDb2RlQXQobCsrKSxmPWEuY2hhckNvZGVBdChsKyspLGM9YS5jaGFyQ29kZUF0KGwrKyksZT1kPj4yLGQ9KGQmMyk8PDR8Zj4+NCxnPShmJjE1KTw8MnxjPj42LGs9YyY2Myxpc05hTihmKT9nPWs9NjQ6aXNOYU4oYykmJihrPTY0KSxiPWIrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZSkrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZCkrIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5jaGFyQXQoZykrCiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuY2hhckF0KGspO3JldHVybiBifSxsYTpmdW5jdGlvbihhKXt2YXIgYj0ic291cmNlIHByb3RvY29sIGF1dGhvcml0eSB1c2VySW5mbyB1c2VyIHBhc3N3b3JkIGhvc3QgcG9ydCByZWxhdGl2ZSBwYXRoIGRpcmVjdG9yeSBmaWxlIHF1ZXJ5IGFuY2hvciIuc3BsaXQoIiAiKTthPS9eKD86KD8hW146QF0rOlteOkBcL10qQCkoW146XC8/Iy5dKyk6KT8oPzpcL1wvKT8oKD86KChbXjpAXSopKD86OihbXjpAXSopKT8pP0ApPyhbXjpcLz8jXSopKD86OihcZCopKT8pKCgoXC8oPzpbXj8jXSg/IVtePyNcL10qXC5bXj8jXC8uXSsoPzpbPyNdfCQpKSkqXC8/KT8oW14/I1wvXSopKSg/Olw/KFteI10qKSk/KD86IyguKikpPykvLmV4ZWMoYSk7Zm9yKHZhciBkPXt9LGY9MTQ7Zi0tOylkW2JbZl1dPWFbZl18fCIiO2QucXVlcnlLZXk9e307ZFtiWzEyXV0ucmVwbGFjZSgvKD86XnwmKShbXiY9XSopPT8oW14mXSopL2csCmZ1bmN0aW9uKGEsYixoKXtiJiYoZC5xdWVyeUtleVtiXT1oKX0pO3JldHVybiBkfSxFaDpmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEpe3ZhciBkPSIiLGgsYztmb3IoaD03OzA8PWg7aC0tKWM9YT4+PjQqaCYxNSxkKz1jLnRvU3RyaW5nKDE2KTtyZXR1cm4gZH1mdW5jdGlvbiBkKGEsYil7cmV0dXJuIGE8PGJ8YT4+PjMyLWJ9dmFyIGYsYyxlPUFycmF5KDgwKSxnPTE3MzI1ODQxOTMsaz00MDIzMjMzNDE3LGw9MjU2MjM4MzEwMixtPTI3MTczMzg3OCxyPTMyODUzNzc1MjAscCxxLHQsdSx2O3A9YS5sZW5ndGg7dmFyIHc9W107Zm9yKGY9MDtmPHAtMztmKz00KWM9YS5jaGFyQ29kZUF0KGYpPDwyNHxhLmNoYXJDb2RlQXQoZisxKTw8MTZ8YS5jaGFyQ29kZUF0KGYrMik8PDh8YS5jaGFyQ29kZUF0KGYrMyksdy5wdXNoKGMpO3N3aXRjaChwJTQpe2Nhc2UgMDpmPTIxNDc0ODM2NDg7YnJlYWs7Y2FzZSAxOmY9YS5jaGFyQ29kZUF0KHAtMSk8PDI0fDgzODg2MDg7YnJlYWs7Y2FzZSAyOmY9CmEuY2hhckNvZGVBdChwLTIpPDwyNHxhLmNoYXJDb2RlQXQocC0xKTw8MTZ8MzI3Njg7YnJlYWs7Y2FzZSAzOmY9YS5jaGFyQ29kZUF0KHAtMyk8PDI0fGEuY2hhckNvZGVBdChwLTIpPDwxNnxhLmNoYXJDb2RlQXQocC0xKTw8OHwxMjh9Zm9yKHcucHVzaChmKTsxNCE9dy5sZW5ndGglMTY7KXcucHVzaCgwKTt3LnB1c2gocD4+PjI5KTt3LnB1c2gocDw8MyY0Mjk0OTY3Mjk1KTtmb3IoYT0wO2E8dy5sZW5ndGg7YSs9MTYpe2ZvcihmPTA7MTY+ZjtmKyspZVtmXT13W2ErZl07Zm9yKGY9MTY7Nzk+PWY7ZisrKWVbZl09ZChlW2YtM11eZVtmLThdXmVbZi0xNF1eZVtmLTE2XSwxKTtjPWc7cD1rO3E9bDt0PW07dT1yO2ZvcihmPTA7MTk+PWY7ZisrKXY9ZChjLDUpKyhwJnF8fnAmdCkrdStlW2ZdKzE1MTg1MDAyNDkmNDI5NDk2NzI5NSx1PXQsdD1xLHE9ZChwLDMwKSxwPWMsYz12O2ZvcihmPTIwOzM5Pj1mO2YrKyl2PWQoYyw1KSsocF5xXnQpK3UrZVtmXSsxODU5Nzc1MzkzJjQyOTQ5NjcyOTUsCnU9dCx0PXEscT1kKHAsMzApLHA9YyxjPXY7Zm9yKGY9NDA7NTk+PWY7ZisrKXY9ZChjLDUpKyhwJnF8cCZ0fHEmdCkrdStlW2ZdKzI0MDA5NTk3MDgmNDI5NDk2NzI5NSx1PXQsdD1xLHE9ZChwLDMwKSxwPWMsYz12O2ZvcihmPTYwOzc5Pj1mO2YrKyl2PWQoYyw1KSsocF5xXnQpK3UrZVtmXSszMzk1NDY5NzgyJjQyOTQ5NjcyOTUsdT10LHQ9cSxxPWQocCwzMCkscD1jLGM9djtnPWcrYyY0Mjk0OTY3Mjk1O2s9aytwJjQyOTQ5NjcyOTU7bD1sK3EmNDI5NDk2NzI5NTttPW0rdCY0Mjk0OTY3Mjk1O3I9cit1JjQyOTQ5NjcyOTV9cmV0dXJuKGIoZykrYihrKStiKGwpK2IobSkrYihyKSkudG9Mb3dlckNhc2UoKX19fSkoYyk7dmFyIE9hPWMuZGt8fE9hLGw9bmV3IE9hO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLlB0PXRoaXMuYVs5XTt0aGlzLk5rPXRoaXMuYVszXTt0aGlzLmZ1PQp0aGlzLmFbM107dGhpcy5qPXRoaXMuYVs1XX1jLmxuPWI7Yi5wcm90b3R5cGU9e090OmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5QdDp0aGlzLk1rKGEpfSxNazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTms6dGhpcy5ldShhKX0sZXU6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5mdTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmo6YX19fSkoYyk7dmFyIFBhPWMubG58fFBhLHZjPW5ldyBQYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXZjLk90KDQpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoYSxiLGQpe3RoaXMuYj1hO2EuZi5PP3RoaXMuWmE9YS5mLk8oKTp0aGlzLlphPSIiO2EuZi5TZyYmYS5mLlNnKHtwYXVzZTp0aGlzLnpkLmJpbmQodGhpcykscmVzdW1lOnRoaXMuemguYmluZCh0aGlzKSwKbXV0ZTp0aGlzLk5lLmJpbmQodGhpcyksdW5tdXRlOnRoaXMuTHUuYmluZCh0aGlzKX0pO3RoaXMuY29udGFpbmVyPXRoaXMuYi5oYjt0aGlzLnBsYXllcj10aGlzLmIuZjt0aGlzLlBiPXRoaXMuWmM9ITE7dGhpcy5Mbj0xRTM7dGhpcy5lYT1udWxsO3RoaXMuTD1iO3RoaXMueWE9e307dGhpcy52aWRlbz17fTt0aGlzLkpkPXt9O2UubGIoIm5ld0JpZ0FkSWQiKTt0aGlzLmJvPWUuYmEoMTApO3RoaXMuamY9MDt0aGlzLlhjPSJXZXJidW5nIC0gW3RpbWVdIjtkJiZkLmFkbWVzc2FnZSYmKHRoaXMuWGM9ZC5hZG1lc3NhZ2UsImZ1bmN0aW9uIj09dHlwZW9mIGQuYWRtZXNzYWdlJiYoKGE9dGhpcy5iLmYpJiZ0aGlzLmIuZi51JiYoYT10aGlzLmIuZi51KCkpLHRoaXMuWGM9ZC5hZG1lc3NhZ2UoYSkpKTtkJiYidHJ1ZSI9PVN0cmluZyhkLmFkanVzdEFkVm9sdW1lVG9Db250ZW50UGxheWVyKSYmKHRoaXMua249ZC5hZGp1c3RBZFZvbHVtZVRvQ29udGVudFBsYXllcik7dGhpcy5RZT10aGlzLklkPQohMTt0aGlzLmdoPWQmJmQubWF4V3JhcHBlckRlcHRoP3BhcnNlSW50KGQubWF4V3JhcHBlckRlcHRoKToxNTt0aGlzLmM9e307dGhpcy5WYz0hMTt0aGlzLlVoPS0xO3RoaXMuY29udHJvbHM9dGhpcy5jYXB0aW9uPXRoaXMuVWI9ITE7dGhpcy5Rbz1lLmJhKDEwKTt0aGlzLkRiPWUuYmEoMTApO3RoaXMuQmI9ZS5iYSgxMCk7dGhpcy5HaD1lLmJhKDEwKTt0aGlzLmNvbmY9e307dGhpcy50Yz10aGlzLkNiPSExO3RoaXMub2U9bnVsbDt0aGlzLlJkPXRoaXMuSmI9dGhpcy56ZT10aGlzLlZlPXRoaXMua2U9dGhpcy5qZD10aGlzLmxmPXRoaXMucGI9dGhpcy5nYz10aGlzLm9oPXRoaXMueGM9dGhpcy56dT10aGlzLnNiPSExO3RoaXMubGM9W107dGhpcy5lYz17fTt0aGlzLnJmPSExO3RoaXMuV2I9e307dGhpcy5Hcz0yMDA7dGhpcy5BZj10aGlzLmZpPXRoaXMuZmU9dGhpcy5ZZT0hMX1jLllqPWI7Yi5wcm90b3R5cGU9e3p0OmZ1bmN0aW9uKGEpe3RoaXMuY29uZj1hfSxIYTpmdW5jdGlvbihhKXt2YXIgYj0KdGhpcy5jb25mW2FdO3RoaXMuY29uZlt0aGlzLlphXSYmdGhpcy5jb25mW3RoaXMuWmFdW2FdJiYoYj10aGlzLmNvbmZbdGhpcy5aYV1bYV0pO3JldHVybiBifSxTaDpmdW5jdGlvbigpeyJwcmVyb2xsIj09ZS5TYSYmZS50cmFjaygic3RhdHNfaGRfYWN0aXZlIiwiIiwhMCk7dGhpcy5MLlFjP2UudHJhY2soImFkY2FsbCIsIjEiKTplLnRyYWNrKCJhZGNhbGwiLCIwIik7ZS50cmFjaygic3RhdHNfaGRfYWRfY2FsbCIsIiIsITApO2UudihrLmJuLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LEllOmZ1bmN0aW9uKGEsYixkLGMpe3RoaXMuc2I9ZDt2YXIgbj0hMTtjJiZjLmhvbWFkX3JlcGxhY2VfdXJsc19pbl90YWdzJiYobj0hMCk7aWYodGhpcy5MLlgpdGhpcy5qZisrLGUubGIoIm5ld1NtYWxsQWRJZCIpLHRoaXMuTC5ybygpLGM9bC5nZXRDb25maWcoKSx0aGlzLkwuS2EmJnRoaXMuTC5pc0VuYWJsZWQ/KHRoaXMuU2goKSxuZXcgVCh0aGlzLGEsdGhpcy5naCwKe2ZpcnN0Q2FsbDohMCx1c2VBZFRhZ1BhcmFtZXRlcjohMCxrZWVwVVJMOmIsYml0cmF0ZTpjLlBhLGVtcHR5OiJyZXNwb25zZS5lbXB0eSI9PWEsdnBhaWQ6dGhpcy5MLk5jLGhvbWFkX3JlcGxhY2VfdXJsc19pbl90YWdzOm4sY29udGVudFZpZGVvOntkdXJhdGlvbjp0aGlzLmIuZi5nZXREdXJhdGlvbigpLGN1cnJlbnRUaW1lOnRoaXMuYi5mLmdldEN1cnJlbnRUaW1lKCl9fSkpOmI/KHRoaXMuU2goKSxuZXcgVCh0aGlzLGEsdGhpcy5naCx7Zmlyc3RDYWxsOiEwLHZwYWlkOnRoaXMuTC5OYyx1c2VBZFRhZ1BhcmFtZXRlcjohMCxiaXRyYXRlOmMuUGEsa2VlcFVSTDohMCxob21hZF9yZXBsYWNlX3VybHNfaW5fdGFnczpuLGNvbnRlbnRWaWRlbzp7ZHVyYXRpb246dGhpcy5iLmYuZ2V0RHVyYXRpb24oKSxjdXJyZW50VGltZTp0aGlzLmIuZi5nZXRDdXJyZW50VGltZSgpfX0pKTp0aGlzLlFhKCk7ZWxzZXt2YXIgZz10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtnLkllKGEsYixkKX0sCjUwKX19LFRlOmZ1bmN0aW9uKGEpe2EuV2EmJmUudHJhY2soInN0YXRzX2hkX3dyYXBwZXJzYyIsImFkIiwhMCk7InNwaWVnZWwuZGUiIT1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpfHx0aGlzLlFlfHwic3ZtcHJldmlldyIhPWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZikuYW5jaG9yPyh0aGlzLlJkPXRoaXMuSmI9dGhpcy54Yz0hMSx0aGlzLmM9YSx0aGlzLkx0KHRoaXMuYyksdGhpcy5IZyhhKSx0aGlzLmxjPXRoaXMuemcoYSksdGhpcy5lYz17fSx0aGlzLnJmPSExLHRoaXMuSG8oKSk6dGhpcy5oZCgpfSxIZzpmdW5jdGlvbihhKXthJiYoYS5vcmlnaW4mJihhPWEub3JpZ2luKSxhLnBhcmVudCYmYS5wYXJlbnQgaW5zdGFuY2VvZiBiJiYodGhpcy5KZD10aGlzLnNxKGEpKSx0aGlzLkhnKGEucGFyZW50KSl9LHpnOmZ1bmN0aW9uKGEpe3ZhciBjPVtdO2EmJihhLm9yaWdpbiYmKGE9YS5vcmlnaW4pLCFhfHwhYS5wYXJlbnR8fGEucGFyZW50IGluc3RhbmNlb2YgYnx8KGM9CnRoaXMuemcoYS5wYXJlbnQpKSxjLnB1c2godGhpcy4kcChhKSkpO3JldHVybiBjfSwkcDpmdW5jdGlvbihhKXt2YXIgYj0iIixkPVtdO2lmKGEmJmEuVSYmYS5VLmdldEF0dHJpYnV0ZSl7Yj1hLlUuZ2V0QXR0cmlidXRlKCJpZCIpO2E9YS5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJDcmVhdGl2ZSIpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWQucHVzaChhW2NdLmdldEF0dHJpYnV0ZSgiaWQiKSk7MT09ZC5sZW5ndGgmJihkPWRbMF0pfXJldHVybnthZElEOmIsY3JlYXRpdmVJRDpkfX0sc3E6ZnVuY3Rpb24oYSl7dmFyIGI9W10sZD1bXSxjPVtdLGU9W10sZz0iIjtpZihhLlUpe2I9YS5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJbXByZXNzaW9uIik7Yz1hLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkNyZWF0aXZlIik7YS5VLmdldEF0dHJpYnV0ZSgiaWQiKSYmKGc9YS5VLmdldEF0dHJpYnV0ZSgiaWQiKSxlLnB1c2goZykpO2EuVS5nZXRBdHRyaWJ1dGUoImFkSUQiKSYmKGc9CmEuVS5nZXRBdHRyaWJ1dGUoImFkSUQiKSxlLnB1c2goZykpO2Zvcih2YXIgaz0wO2s8Yy5sZW5ndGg7aysrKWNba10uZ2V0QXR0cmlidXRlKCJpZCIpJiYoZz1jW2tdLmdldEF0dHJpYnV0ZSgiaWQiKSxlLnB1c2goZykpLGNba10uZ2V0QXR0cmlidXRlKCJhZElEIikmJihnPWNba10uZ2V0QXR0cmlidXRlKCJhZElEIiksZS5wdXNoKGcpKTtmb3Ioaz0wO2s8Yi5sZW5ndGg7aysrKWQucHVzaChhLmliKGJba10pKX1yZXR1cm57aW1wcmVzc2lvbnM6ZCxhZElkczplLGFkSWQ6Z319LG9hOmZ1bmN0aW9uKGEpe2EuV2EmJmUudHJhY2soInN0YXRzX2hkX3dyYXBwZXJzYyIsIm5vYWQiLCEwKTt2YXIgYj0wLGQ9InN0YXRzX2hkX2FkX2Vycm9yIjthJiYoYS5lcnJvciYmYS5lcnJvci5kZXRhaWwmJmEuZXJyb3IuZGV0YWlsLmNvZGUmJihiPWEuZXJyb3IuZGV0YWlsLmNvZGUpLGEubWQmJmEubWQuZXJyb3ImJmEubWQuZXJyb3IuY29kZSYmKGI9YS5tZC5lcnJvci5jb2RlKSk7c3dpdGNoKGEuZXJyb3IuY29kZSl7Y2FzZSB3Lk9jLmNvZGU6Yj09CkYuVWQuY29kZT9lLnYoay5udix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpOihlLkplKCksYj09Ri5IZi5jb2RlJiZlLnYoay5jcyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKTtlLnYoay55cCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2VtcHR5IjticmVhaztjYXNlIHcuRmYuY29kZTplLnYoay5VdSx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2Vycm9yX3Zhc3Rsb2FkZmFpbGVkIjticmVhaztjYXNlIHcuSWYuY29kZTplLnRyYWNrKCJ3cmFwcGVybGltaXQiLCIxMDYiKTtlLnYoay51dix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2Q9InN0YXRzX2hkX2FkX2Vycm9yX3dyYXBwZXJsaW1pdCI7YnJlYWs7Y2FzZSB3LlZkLmNvZGU6ZS52KGsueHYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLAp0aGlzLkIoKSx0aGlzLkMoKSk7ZD0ic3RhdHNfaGRfYWRfZXJyb3JfeG1scGFyc2UiO2JyZWFrO2Nhc2Ugdy5UZC5jb2RlOmUudihrLmRzLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSksZS50cmFjaygibm9tZWRpYSIsIjEwMiIpLGQ9InN0YXRzX2hkX2FkX2Vycm9yX25vbWVkaWEiLHRoaXMudGN8fChlLnRyYWNrKCJub21lZGlhX25vZmxhc2giLCIxMDUiKSxkPSJzdGF0c19oZF9hZF9lcnJvcl9ub21lZGlhbm9mbGFzaCIpfSJzdGF0c19oZF9hZF9lcnJvciI9PWQmJmEuZXJyb3ImJmEuZXJyb3IueGEmJihkKz0iXyIrYS5lcnJvci54YSk7ZS50cmFjayhkLCIiLCEwKTt0aGlzLlFiKGEpO3RoaXMuUWEoKX0sUWI6ZnVuY3Rpb24oYSl7dmFyIGI9OTAwO2EmJmEuZXJyb3ImJmEuZXJyb3IuY29kZSYmKGI9YS5lcnJvci5jb2RlLDkwMTxiJiYoYj05MDApKTtmb3IoYj17IltFUlJPUkNPREVdIjpifTthLk9hLmxlbmd0aDspdHJ5e3ZhciBkPWEuT2EucG9wKCk7CnRoaXMuSGUoZC51cmwsZC50eXBlLGIpfWNhdGNoKGMpe319LEx0OmZ1bmN0aW9uKGEpe3RoaXMua2U9dGhpcy56ZT10aGlzLlZlPSExO3RoaXMueWE9dGhpcy5iLkc7dmFyIGI9OTk5OTt0aGlzLmNvbmYuekluZGV4JiYoYj10aGlzLmNvbmYuekluZGV4LTEpO3RoaXMueWEuekluZGV4PWI7Yj10aGlzLmIuRjt0cnl7dmFyIGQ9dGhpcy5iLmYuZ2V0UmF3UGxheWVyKCk7aWYoZCYmZC5lbnZ2YXJzKXRyeXtiPWQuZW52dmFycygpLnZpZGVvU2xvdCx0aGlzLlllPSEwfWNhdGNoKGMpe319Y2F0Y2goZSl7fWIub3c9ImF1dG8iO3RoaXMuY29uZlsidmlkZW8uc3R5bGUucG9zaXRpb24iXSYmKGIuc3R5bGUucG9zaXRpb249dGhpcy5jb25mWyJ2aWRlby5zdHlsZS5wb3NpdGlvbiJdKTt0aGlzLmNvbmZbInZpZGVvLnN0eWxlIl0mJihiLnN0eWxlPXRoaXMuY29uZlsidmlkZW8uc3R5bGUiXSk7aWYodGhpcy5jb25mWyJ2aWRlby5hdHRyaWJ1dGVzIl0pZm9yKHZhciBnIGluIHRoaXMuY29uZlsidmlkZW8uYXR0cmlidXRlcyJdKXRoaXMuY29uZlsidmlkZW8uYXR0cmlidXRlcyJdLmhhc093blByb3BlcnR5KGcpJiYKYi5zZXRBdHRyaWJ1dGUoZyx0aGlzLmNvbmZbInZpZGVvLmF0dHJpYnV0ZXMiXVtnXSk7dGhpcy5rbiYmdGhpcy5wbGF5ZXIucWUoKSYmKGIudm9sdW1lPXRoaXMucGxheWVyLnFlKCkvMTAwKTtmb3IoO2IuZmlyc3RDaGlsZDspYi5yZW1vdmVDaGlsZChiLmZpcnN0Q2hpbGQpO2ZvcihkPTA7ZDxhLk0ubGVuZ3RoO2QrKyliLmNhblBsYXlUeXBlKGEuTVtkXS50eXBlKSYmdGhpcy5lbihiLGEuTVtkXS51cmwrIiIsYS5NW2RdLnR5cGUpO3RoaXMuWWUmJmIubG9hZCgpO2lmKHRoaXMuT2goYikpe3RoaXMuaG4oYik7YT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdP2Euc3R5bGU9dGhpcy5jb25mWyJpbm5lcldhcnBwZXIuc3R5bGUiXTooYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUud2lkdGg9IjEwMCUiLGEuc3R5bGUuaGVpZ2h0PSIxMDAlIik7dGhpcy5lYT10aGlzLnlhLmFwcGVuZENoaWxkKGEpO3RyeXt0aGlzLlllPwp0aGlzLnZpZGVvPWI6dGhpcy52aWRlbz10aGlzLmVhLmFwcGVuZENoaWxkKGIpfWNhdGNoKGspe3RoaXMudmlkZW89Yn19ZWxzZSB0aGlzLmMuTW8oKT8oYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdP2Euc3R5bGU9dGhpcy5jb25mWyJpbm5lcldhcnBwZXIuc3R5bGUiXTphLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGhpcy5lYT10aGlzLnlhLmFwcGVuZENoaWxkKGEpLHRoaXMudmlkZW89dGhpcy5lYS5hcHBlbmRDaGlsZChiKSx0aGlzLkp0KCkpOnRoaXMuRGUoKT90aGlzLkRoKCk6dGhpcy5jLm9yaWdpbi5xZyh3LlRkKX0sSnQ6ZnVuY3Rpb24oKXt0aGlzLnBiPXRoaXMuZ2M9ITE7dGhpcy5iLmYudmEmJnRoaXMuYi5mLnZhKCkmJihlLnYoay5qZyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMucGI9ITApO2UuamUoKTt0aGlzLmMmJnRoaXMuYy5vcmlnaW4mJnRoaXMuYy5vcmlnaW4uc2EmJgplLmpuKHRoaXMuYy5vcmlnaW4uc2EpO2UuZWIoInNldFVwVnBhaWQiKTt2YXIgYT10aGlzLmIuRjt0aGlzLmIuRj1DLnBvcCgpO2EucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcy5iLkYsYSk7dGhpcy5iLnBoKCk7dGhpcy5iLkpjKCk7Zm9yKGE9dGhpcy5iLkc7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7YS5wYXJlbnR8fHRoaXMuYi5KYygpO3RoaXMuZWE9dGhpcy55YT10aGlzLmIuRzt0aGlzLndmKCJ2cGFpZCIpO2lmKHRoaXMucGIpe2lmKGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYikpYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbjt0aGlzLnRyYWNrKCJtdXRlIiwhMCk7ZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJjb250ZW50IiwhMCk7ZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKX10aGlzLkg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7dGhpcy5ILnNldEF0dHJpYnV0ZSgid2lkdGgiLAoiMTAwJSIpO3RoaXMuSC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjEwMCUiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJzY3JvbGxpbmciLCJubyIpO3RoaXMuSC5zZXRBdHRyaWJ1dGUoImFsbG93IiwiYXV0b3BsYXkiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJkZWxlZ2F0ZXN0aWNreXVzZXJhY3RpdmF0aW9uIiwibWVkaWEiKTt0aGlzLkguc2V0QXR0cmlidXRlKCJzdHlsZSIsImJvcmRlcjogMCBub25lO291dGxpbmU6IG5vbmU7Iik7dGhpcy5iLkcuYXBwZW5kQ2hpbGQodGhpcy5IKTt0aGlzLkgub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGE9ITE7dGhpcy5iLmYudmEmJnRoaXMuYi5mLnZhKCkmJihhPSEwKTt2YXIgYj10aGlzLmMudXEoKSxjPXRoaXMuYy5BLk9yaWdpbmFsQWRQYXJhbWV0ZXJzLGc9e2hvbWFkOkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobC5nZXRDb25maWcoKSkpLHZwYWlkOnt1cmw6Yi51cmwsdmlld21vZGU6Im5vcm1hbCIsZGVzaXJlZEJpdHJhdGU6Yi5kZXNpcmVkQml0cmF0ZXx8CmIuYml0cmF0ZXx8NDAwLGFkUGFyYW1ldGVyczpjLGNyZWF0aXZlRGF0YTp7QWRQYXJhbWV0ZXJzOmN9LGNvbnRlbnRwbGF5ZXI6e3dpZHRoOnBhcnNlSW50KHRoaXMuYi5HLnN0eWxlLndpZHRoKSxoZWlnaHQ6cGFyc2VJbnQodGhpcy5iLkcuc3R5bGUuaGVpZ2h0KX19LGNvbnRlbnRQbGF5ZXI6e211dGVkOmF9fTtlLm1hKHRoaXMuSCwiY29uZmlnIixnKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDEwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwiY29uZmlnIixnKX0uYmluZCh0aGlzKSwyMDApO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksNTAwKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDcwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwKImNvbmZpZyIsZyl9LmJpbmQodGhpcyksMUUzKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UubWEodGhpcy5ILCJjb25maWciLGcpfS5iaW5kKHRoaXMpLDEyMDApO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksMTUwMCk7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLm1hKHRoaXMuSCwiY29uZmlnIixnKX0uYmluZCh0aGlzKSwyRTMpO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tYSh0aGlzLkgsImNvbmZpZyIsZyl9LmJpbmQodGhpcyksNUUzKX0uYmluZCh0aGlzKTthPWUuJGYoImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9ob21hZC1nbG9iYWwtY29uZmlncy5zY2huZWV2b25tb3JnZW4uY29tL2lmcmFtZS5odG1sIix0aGlzLkwpO3RoaXMuSC5zcmM9YTtlLmJlKCJ2cGFpZGV2ZW50IixmdW5jdGlvbihhKXsiQWRTaXplQ2hhbmdlIiE9YS5kYXRhLm5hbWUmJiJBZFJlbWFpbmluZ1RpbWVDaGFuZ2UiIT0KWyJkYXRhIl0ubmFtZSYmdGhpcy5iLlRiKCEwKTtpZihhJiZhLmRhdGEmJmEuZGF0YS5uYW1lKXt0aGlzLmxjPWEuZGF0YS5vcmlnaW5hbGV2ZW50LmFkSURzOyJBZEVycm9yIj09YS5kYXRhLm5hbWUmJnRoaXMuYnYoYSk7aWYoIkFkSW1wcmVzc2lvbiI9PWEuZGF0YS5uYW1lJiYodGhpcy5jdigpLHRoaXMuYi5UYighMCksIXRoaXMuSmIpKXt2YXIgYj0yRTMsYz01MDt0aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uJiYodGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi5wZXJjZW50JiYoYz10aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnBlcmNlbnQpLHRoaXMuY29uZi52aWV3YWJsZUltcHJlc3Npb24udGltZU1TJiYoYj10aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnRpbWVNUykpO3RoaXMuSmI9e2VsOnRoaXMuSCxjYjpmdW5jdGlvbigpe3RoaXMuUmQ9ITA7ZS52KGsuYmksdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt0aGlzLnRyYWNrKCJ2aWV3YWJsZSIpfS5iaW5kKHRoaXMpLAp0aW1lTVM6YixwZXJjZW50OmMsc3RhcnRUaW1lOiExfTtlLkNlKHRoaXMuSmIpfSJBZFN0YXJ0ZWQiPT1hLmRhdGEubmFtZSYmKHRoaXMuYi5UYighMCksdGhpcy5ndigpKTsiQWRWaWRlb1N0YXJ0Ij09YS5kYXRhLm5hbWUmJih0aGlzLmIuVGIoITApLHRoaXMua3YoKSk7IkFkVmlkZW9GaXJzdFF1YXJ0aWxlIj09YS5kYXRhLm5hbWUmJnRoaXMuaXYoKTsiQWRWaWRlb01pZHBvaW50Ij09YS5kYXRhLm5hbWUmJnRoaXMuanYoKTsiQWRWaWRlb1RoaXJkUXVhcnRpbGUiPT1hLmRhdGEubmFtZSYmdGhpcy5sdigpOyJBZFZpZGVvQ29tcGxldGUiPT1hLmRhdGEubmFtZSYmdGhpcy5odigpOyJBZFN0b3BwZWQiPT1hLmRhdGEubmFtZSYmdGhpcy5kaSgpO2lmKCJBZENsaWNrVGhydSI9PWEuZGF0YS5uYW1lKXt2YXIgZz1hLmRhdGEuY2xpY2tUaHJ1VGFyZ2V0O2d8fChnPXRoaXMuYy5PYik7aWYoIWcpcmV0dXJuO3RoaXMudHJhY2soImNsaWNrdHJhY2tpbmciKTtlLnYoay5pZyx0aGlzLmMuQSwKdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPSJfdG9wIjt0cnl7dGhpcy5MLiRjJiYoYT0iX2JsYW5rIik7dmFyIGI9d2luZG93Lm9wZW4oIiIsYSk7Yi5kb2N1bWVudC5ib2R5LmlubmVySFRNTD0iPGRpdj48L2Rpdj4iO2IuZG9jdW1lbnQubG9jYXRpb24uaHJlZj1nfWNhdGNoKGQpe3dpbmRvdy5vcGVuKGcsYSl9fS5iaW5kKHRoaXMpLDUwMCl9IkFkU2tpcHBlZCI9PWEuZGF0YS5uYW1lJiZ0aGlzLmZ2KCk7IkFkUmVtYWluaW5nVGltZUNoYW5nZSI9PWEuZGF0YS5uYW1lJiZlLnYoay4kZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpOyJBZFBhdXNlZCI9PWEuZGF0YS5uYW1lJiZ0aGlzLmR2KCk7IkFkUGxheWluZyI9PWEuZGF0YS5uYW1lJiYodGhpcy5maSYmKHRoaXMuQWY9ITEsdGhpcy5ZYigpKSx0aGlzLmV2KCkpOyJBZFZvbHVtZUNoYW5nZSI9PWEuZGF0YS5uYW1lJiYoYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkJiKSwKMD09YS5kYXRhLm9yaWdpbmFsZXZlbnQudm9sdW1lPyh0aGlzLnBiPSEwLGImJihiLmlubmVySFRNTD10aGlzLmNvbmYudW5tdXRlQnV0dG9uKSx0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJ1c2VyIiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSk6KHRoaXMucGI9ITEsYiYmKGIuaW5uZXJIVE1MPXRoaXMuY29uZi5tdXRlQnV0dG9uKSx0aGlzLnRyYWNrKCJ1bm11dGUiLCEwKSxlLnRyYWNrKCJzdGF0c19oZF91bm11dGVkIiwidXNlciIsITApLGUudihrLnRmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpLGUudihrLiRkLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpfX0uYmluZCh0aGlzKSk7ZS5iZSgidnBhaWRjb250aW51ZWNvbnRlbnQiLGZ1bmN0aW9uKCl7dGhpcy5RYSgpfS5iaW5kKHRoaXMpKTtlLmJlKCJ2cGFpZGVycm9zIixmdW5jdGlvbigpe3RoaXMuUWEoKX0uYmluZCh0aGlzKSk7CnRoaXMuYi5ZZihmdW5jdGlvbihhKXtlLm1hKHRoaXMuSCwicmVzaXplIixhKX0uYmluZCh0aGlzKSl9LGR2OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy50cmFjaygicGF1c2UiKTtlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO2EmJihhLmlubmVySFRNTD10aGlzLmNvbmYucGxheUJ1dHRvbik7dGhpcy5nYz0hMH0sZXY6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRiKTthJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uKTt0aGlzLnRyYWNrKCJyZXN1bWUiLCEwKTtlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuZ2M9ITF9LGd2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygiY3JlYXRpdmVWaWV3Iik7ZS52KGsuVWYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKX0sCmZ2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygic2tpcCIpO2UudihrLlRmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LGN2OmZ1bmN0aW9uKCl7dGhpcy50cmFjaygiaW1wcmVzc2lvbiIpO2UuZWIoImltcHJlc3Npb24iKTtlLnYoay5QZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxrdjpmdW5jdGlvbigpe3RoaXMudHJhY2soInN0YXJ0Iik7ZS5lYigic3RhcnQiKTtlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxpdjpmdW5jdGlvbigpe3RoaXMudHJhY2soImZpcnN0UXVhcnRpbGUiKTt0aGlzLnhjPSEwO2UuZWIoImZpcnN0UXVhcnRpbGUiKTtlLnYoay5OZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpfSxqdjpmdW5jdGlvbigpe3RoaXMudHJhY2soIm1pZHBvaW50Iik7ZS5lYigibWlkcG9pbnQiKTtlLnYoay5SZix0aGlzLmMuQSx0aGlzLmIuZi51KCksCnRoaXMuQigpLHRoaXMuQygpKX0sbHY6ZnVuY3Rpb24oKXt0aGlzLnRyYWNrKCJ0aGlyZFF1YXJ0aWxlIik7ZS5lYigidGhpcmRRdWFydGlsZSIpO2UudihrLlZmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSl9LGh2OmZ1bmN0aW9uKCl7dGhpcy5QZCgpO2UuZWIoImNvbXBsZXRlIil9LGRpOmZ1bmN0aW9uKGEpe2lmKHRoaXMuSCYmdGhpcy5ILnBhcmVudE5vZGUmJnRoaXMuSC5wYXJlbnROb2RlLnBhcmVudE5vZGUpe2UuZWIoImFkc3RvcHBlZCIpO3ZhciBiPXRoaXMuSC5wYXJlbnROb2RlO3RoaXMuSC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuSCk7Yi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpO2UuamUoKTt0aGlzLkg9ITE7dGhpcy5RYShhKX19LGJ2OmZ1bmN0aW9uKGEpe3ZhciBiPWEubWVzc2FnZXx8IiIsZD0vXGQrL2csYz1bXTshYiYmYS5kYXRhJiZhLmRhdGEub3JpZ2luYWxldmVudCYmYS5kYXRhLm9yaWdpbmFsZXZlbnQubXNnJiYoYj0KYS5kYXRhLm9yaWdpbmFsZXZlbnQubXNnLChjPWIubWF0Y2goZCkpP2Muam9pbiYmKGI9Yy5qb2luKCItIikpOmI9Yi5zdWJzdHJpbmcoMCwyMCkpO2UudHJhY2soInN0YXRzX3ZwX2Vycm9yaGFuZGxlciIsYiwhMCk7ZS5lYigiZXJyIixiKTtlLnYoay5tdix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuZGkoITApfSxlbjpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoYSxiKXtpZihiLkthJiZiLmlzRW5hYmxlZCYmIWIuQ2MoKSl7dmFyIGQ9Yi5sYShhKTtyZXR1cm4gZC5wcm90b2NvbCsiOi8vIitkLmhvc3R9cmV0dXJuIGF9aWYoYS5hcHBlbmRDaGlsZCl7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic291cmNlIik7Yy5zcmM9ZChiLHRoaXMuTCk7Yy5vbmVycm9yPXRoaXMuWXUuYmluZCh0aGlzKTthLmFwcGVuZENoaWxkKGMpfWVsc2UgYS5zZXRBdHRyaWJ1dGUoInNyYyIsZChiLHRoaXMuTCkpfSxPaDpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRFbGVtZW50c0J5VGFnTmFtZT8KMDxhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzb3VyY2UiKS5sZW5ndGg6ITB9LGhuOmZ1bmN0aW9uKGEpe2EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZHN0YXJ0Iix0aGlzLmFpLmJpbmQodGhpcykpO2EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkbWV0YWRhdGEiLHRoaXMueGYuYmluZCh0aGlzKSk7YS5hZGRFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIix0aGlzLnlmLmJpbmQodGhpcykpO2EuYWRkRXZlbnRMaXN0ZW5lcigiZW5kZWQiLHRoaXMuUGQuYmluZCh0aGlzKSk7YS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5RZC5iaW5kKHRoaXMpKX0sRWQ6ZnVuY3Rpb24oYSl7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2Fkc3RhcnQiLHRoaXMuYWkuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsdGhpcy54Zi5iaW5kKHRoaXMpKTthLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLHRoaXMueWYuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlbmRlZCIsCnRoaXMuUGQuYmluZCh0aGlzKSk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5RZC5iaW5kKHRoaXMpKX0sYWk6ZnVuY3Rpb24oYSl7dGhpcy5QYnx8KHRoaXMudmlkZW8uY29udHJvbHM9ITEsd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLlBifHx0aGlzLnhmKGEpfS5iaW5kKHRoaXMpLHRoaXMuTG4pKX0seGY6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuWmMmJnRoaXMuT2godGhpcy52aWRlbykmJiF0aGlzLkNiJiYhdGhpcy5QYil7dGhpcy5aYz0hMDt0cnl7aWYoIWUuVGEoKSYmYS50YXJnZXQmJjU+PWEudGFyZ2V0LmR1cmF0aW9uJiY1PE1hdGguYWJzKHRoaXMuYy5kdXJhdGlvbi1hLnRhcmdldC5kdXJhdGlvbikpe3RoaXMuQ2J8fCh0aGlzLkNiPSEwLHRoaXMuRWQodGhpcy52aWRlbyksZS50cmFjaygic3RhdHNfaGRfbm9vcHZpZGVvIiwiIiwhMCksdGhpcy5MLnBnfHx0aGlzLkwua2EoInZpZGVvLW5vb3AiKSk7dGhpcy5RYSgpO3JldHVybn19Y2F0Y2goYil7ZS50cmFjaygic3RhdHNfaGRfbm9vcHZpZGVvX2ZhaWwiLAoiIiwhMCl9dGhpcy5YdSgpO3RoaXMudmlkZW8uY29udHJvbHM9ITE7dGhpcy5iLkpjKCk7dGhpcy5aaCgpO3RoaXMud2YoKTt0aGlzLmFnKCk7dGhpcy5iLnBoKCk7dGhpcy52aWRlby5wbGF5JiZ0aGlzLmtmKCl9fSxrZjpmdW5jdGlvbigpe2lmKCF0aGlzLmpkKWlmKHRoaXMuY29uZi5wcmVBZElmcmFtZVVybCl7dmFyIGE9dGhpcy5jb25mLnByZUFkSWZyYW1lVXJsOyJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoYT1hKGUuU2EpKTtpZigic3RyaW5nIj09dHlwZW9mIGEmJmEpe3RoaXMuc2Q9W107Zm9yKHZhciBiPXRoaXMuYi5HLGQ9MDtkPGIuY2hpbGRyZW4ubGVuZ3RoO2QrKyl0aGlzLnNkLnB1c2goYi5jaGlsZHJlbltkXSksYi5jaGlsZHJlbltkXS5zdHlsZS5kaXNwbGF5PSJub25lIjtkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9KTtkLnNldEF0dHJpYnV0ZSgic3JjIiwKYSk7ZC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Quc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7ZC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAwIG5vbmU7b3V0bGluZTogbm9uZTsiKTtiLmFwcGVuZENoaWxkKGQpO3ZhciBjPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihhKXtpZigiY29udGludWUiPT1hLmRhdGEpe3RoaXMuVGMoKTthPU1hdGgucm91bmQoKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWMpLzFFMyk7dmFyIGI9IiI7MTxhJiYoYj0iZ3QxIik7NTxhJiYoYj0iZ3Q1Iik7MTA8YSYmKGI9Imd0MTAiKTsyMDxhJiYoYj0iZ3QyMCIpO2UudHJhY2soInN0YXRzX2hkX3ByZUlmcmFtZUNsb3NlZCIsYiwhMCl9fS5iaW5kKHRoaXMpKTtlLnRyYWNrKCJzdGF0c19oZF9wcmVJZnJhbWVPcGVuZWQiLCIiLCEwKX1lbHNlIHRoaXMuVGMoKX1lbHNlIHRoaXMuVGMoKX0sVGM6ZnVuY3Rpb24oYSl7aWYodGhpcy5zZClmb3IodmFyIGI9CjA7Yjx0aGlzLnNkLmxlbmd0aDtiKyspdGhpcy5zZFtiXS5zdHlsZS5kaXNwbGF5PSJibG9jayI7aWYoKGI9dGhpcy52aWRlby5wbGF5KCkpJiZiWyJjYXRjaCJdKWJbImNhdGNoIl0oZnVuY3Rpb24oYil7dGhpcy5qZHx8KGE/KCJzdHJpbmciIT10eXBlb2YgYiYmYiYmYi5tZXNzYWdlJiYoYj1iLm1lc3NhZ2UpLHRoaXMuUWEoKSxlLnRyYWNrKCJzdGF0c19oZF9wbGF5UHJvbWlzZUZhaWxlZCIsYiwhMCkpOih0aGlzLk5lKCEwKSx0aGlzLlRjKCEwKSkpfS5iaW5kKHRoaXMpKTtiLnRoZW4oZnVuY3Rpb24oKXt0aGlzLnplJiZlLnRyYWNrKCJzdGF0c19oZF9wbGF5UHJvbWlzZVJlc29sdmVkQWZ0ZXJJbXByZXNzaW9uIiwiIiwhMCk7dGhpcy5WZT0hMH0uYmluZCh0aGlzKSk7ZGE/KHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLlhiLmJpbmQodGhpcykpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuWGIuYmluZCh0aGlzKSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLAp0aGlzLlhiLmJpbmQodGhpcykpKTpLPWZ1bmN0aW9uKCl7dGhpcy5WY3x8KHRoaXMudmlkZW8ubG9hZCgpLHRoaXMua2YoKSl9LmJpbmQodGhpcyk7dGhpcy5zZSgpLkNoKHRoaXMpfSxQZDpmdW5jdGlvbigpe3RoaXMuTC52YyYmIXRoaXMuQ2ImJmUudHJhY2soInF1YXJ0aWxlIiwiY29tcGxldGUiLCEwKTt0aGlzLnRyYWNrKCJjb21wbGV0ZSIpO2UudihrLiRtLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSk7dGhpcy5RYSgpfSxRYTpmdW5jdGlvbihhKXtpZighdGhpcy5rZSlpZih0aGlzLmtlPSEwLHRoaXMuUmR8fChlLnYoay5mcyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMudHJhY2soIm5vdHZpZXdhYmxlIikpLHRoaXMuYy5yYnx8dGhpcy5jLmpjKXtlLmxiKCJuZXdTbWFsbEFkSWQiKTt0aGlzLmpmKys7dGhpcy5QYj10aGlzLlpjPSExO3RyeXt0aGlzLkVkKHRoaXMudmlkZW8pfWNhdGNoKGIpe310cnl7dGhpcy5lYS5yZW1vdmVDaGlsZCh0aGlzLnZpZGVvKX1jYXRjaChkKXt9dHJ5e3RoaXMueWEucmVtb3ZlQ2hpbGQodGhpcy5lYSl9Y2F0Y2goYyl7fXRoaXMuY2FwdGlvbj0KdGhpcy5jb250cm9scz1udWxsO3RoaXMuSWQ9ITE7dHJ5e3RoaXMuYi5XaCgpfWNhdGNoKGcpe310aGlzLmxmPSEwO3RoaXMuYi53ZSgpO3RoaXMuVWI9ITE7dGhpcy5zZSgpLnloKCk7dGhpcy5jLnJiJiZ0aGlzLmMub3JpZ2luLk9lKCk7dGhpcy5jLmpjJiYoYT90aGlzLmMub3JpZ2luLmtoKCk6dGhpcy5oZCgpKX1lbHNlIHRoaXMuaGQoKX0sWXU6ZnVuY3Rpb24oYSl7YS50YXJnZXQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChhLnRhcmdldCk7dGhpcy52aWRlby5uZXR3b3JrU3RhdGUmJnRoaXMudmlkZW8ubmV0d29ya1N0YXRlPT10aGlzLnZpZGVvLk5FVFdPUktfTk9fU09VUkNFJiYodGhpcy5FZCh0aGlzLnZpZGVvKSx0aGlzLkRlKCk/dGhpcy5EaCgpOnRoaXMuUWQoYSkpfSxRZDpmdW5jdGlvbihhKXt0aGlzLlBiPSEwO2EmJmEudGFyZ2V0JiZhLnRhcmdldC5lcnJvciYmYS50YXJnZXQuZXJyb3IuY29kZXx8dGhpcy52aWRlby5uZXR3b3JrU3RhdGU9PXRoaXMudmlkZW8uTkVUV09SS19OT19TT1VSQ0UmJgoodGhpcy5EZSgpP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50Y3x8dGhpcy5MLmVnKCl9LmJpbmQodGhpcyksMUUzKTp0aGlzLkwuZWcoKSk7dGhpcy5jLm9yaWdpbi5xZyh3LlRkKX0seWY6ZnVuY3Rpb24oKXtpZih0aGlzLnp1KXRoaXMuUWEoKTtlbHNle3RoaXMuVWI9ITA7dGhpcy5iLmYuVmEmJiF0aGlzLmxmJiZ0aGlzLmIuZi5WYSgpJiZlLnYoay5mZCx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3ZhciBhPU1hdGguZmxvb3IodGhpcy52aWRlby5jdXJyZW50VGltZSk7dGhpcy5DdShhKTtpZighdGhpcy5KYil7dmFyIGI9MkUzLGQ9NTA7dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbiYmKHRoaXMuY29uZi52aWV3YWJsZUltcHJlc3Npb24ucGVyY2VudCYmKGQ9dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi5wZXJjZW50KSx0aGlzLmNvbmYudmlld2FibGVJbXByZXNzaW9uLnRpbWVNUyYmKGI9dGhpcy5jb25mLnZpZXdhYmxlSW1wcmVzc2lvbi50aW1lTVMpKTsKdGhpcy5KYj17ZWw6dGhpcy52aWRlbyxjYjpmdW5jdGlvbigpe3RoaXMuUmQ9ITA7ZS52KGsuYmksdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKTt0aGlzLnRyYWNrKCJ2aWV3YWJsZSIpfS5iaW5kKHRoaXMpLHRpbWVNUzpiLHBlcmNlbnQ6ZCxzdGFydFRpbWU6ITF9O2UuQ2UodGhpcy5KYil9ZD0iIjt0aGlzLmMuaGYmJihiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuR2gpKSYmKGQ9dGhpcy5jLmhmLWEsMDxkP2Q9dGhpcy5jb25mLnNraXBhYmxlQnV0dG9uLnJlcGxhY2UoIlt0aW1lXSIsZCk6KGQ9dGhpcy5jb25mLnNraXBCdXR0b24ucmVwbGFjZSgiW3RpbWVdIixkKSx0aGlzLklkfHwodGhpcy5JZD0hMCxiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3RoaXMudHJhY2soInNraXAiKTtlLnYoay5UZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpO3RoaXMuYy5yYj8odGhpcy5QYj10aGlzLlpjPSExLAp0aGlzLkVkKHRoaXMudmlkZW8pLHRoaXMuZWEucmVtb3ZlQ2hpbGQodGhpcy52aWRlbyksdGhpcy55YS5yZW1vdmVDaGlsZCh0aGlzLmVhKSx0aGlzLmNhcHRpb249dGhpcy5jb250cm9scz1udWxsLHRoaXMuSWQ9ITEsdGhpcy5iLldoKCksdGhpcy5jLm9yaWdpbi5PZSgpKTp0aGlzLlFhKCl9LmJpbmQodGhpcykpKSksYi5pbm5lckhUTUw9ZCk7dGhpcy5jYXB0aW9uJiYodGhpcy5jYXB0aW9uLmlubmVySFRNTD10aGlzLlhjLnJlcGxhY2UoIlt0aW1lXSIsZS55Zyh0aGlzLmMuZHVyYXRpb24tYSkpKTt0aGlzLlZjPSEwO3RoaXMudmlkZW8uY29udHJvbHM9ITF9fSxEaDpmdW5jdGlvbigpe3RoaXMudGM9ITA7dGhpcy55YT10aGlzLmIuRzt0aGlzLnlhLmlubmVySFRNTD0iIjt2YXIgYT05OTk5O3RoaXMuY29uZi56SW5kZXgmJihhPXRoaXMuY29uZi56SW5kZXgtMSk7dGhpcy55YS56SW5kZXg9YTthPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9iamVjdCIpO2Euc2V0QXR0cmlidXRlKCJkYXRhIiwKImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9ob21hZC1nbG9iYWwtY29uZmlncy5zY2huZWV2b25tb3JnZW4uY29tL2hvbWFkanNmbGFzaGRpc3BsYXkuc3dmIik7YS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Euc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7YS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpO2Euc2V0QXR0cmlidXRlKCJpZCIsImRpc3BtYWluIik7YS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJkaXNwbWFpbiIpO2Euc2V0QXR0cmlidXRlKCJzdHlsZSIsInZpc2liaWxpdHk6IHZpc2libGUiKTthLnNldEF0dHJpYnV0ZSgiRmxhc2hWYXJzIiwiZGF0YT0iK3RoaXMubnEoKSk7YS5pbm5lckhUTUw9JzxwYXJhbSBuYW1lPSJhbGxvd3NjcmlwdGFjY2VzcyIgdmFsdWU9ImFsd2F5cyI+PHBhcmFtIG5hbWU9ImFsbG93RnVsbFNjcmVlbiIgdmFsdWU9InRydWUiPjxwYXJhbSBuYW1lPSJiZ0NvbG9yIiB2YWx1ZT0iIzAwMDAwMCI+PHBhcmFtIG5hbWU9Im9wYXF1ZSIgdmFsdWU9ImRpcmVjdCI+JzsKdGhpcy5iLkY9YTt2YXIgYj10aGlzLmIuRixkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RoaXMuY29uZlsiaW5uZXJXYXJwcGVyLnN0eWxlIl0/ZC5zdHlsZT10aGlzLmNvbmZbImlubmVyV2FycHBlci5zdHlsZSJdOmQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIjt0aGlzLmVhPXRoaXMueWEuYXBwZW5kQ2hpbGQoZCk7dGhpcy5iLkpjKCk7dGhpcy52aWRlbz10aGlzLmVhLmFwcGVuZENoaWxkKGIpO2I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO2Iuc3R5bGUudG9wPSIwcHgiO2Iuc3R5bGUud2lkdGg9dGhpcy55YS5vZmZzZXRXaWR0aCsicHgiO2Iuc3R5bGUuaGVpZ2h0PXRoaXMueWEub2Zmc2V0SGVpZ2h0KyJweCI7Yi5zdHlsZS5jdXJzb3I9InBvaW50ZXIiO2Iub25jbGljaz10aGlzLiRoLmJpbmQodGhpcyk7dGhpcy5lYS5hcHBlbmRDaGlsZChiKTt0aGlzLlpoKCk7dGhpcy53ZigpO3RoaXMub2U9c2V0SW50ZXJ2YWwodGhpcy5wby5iaW5kKHRoaXMpLAoxMDApO3JldHVybiBhfSxucTpmdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxiPXt9LGQ9MDtkPHRoaXMuYy5NLmxlbmd0aDtkKyspe3ZhciBjPWI9dGhpcy5jLk1bZF0sZTtlPWIudXJsO3ZhciBnPXRoaXMuTDtnLkthJiZnLmlzRW5hYmxlZCYmIWcuQ2MoKSYmKGU9Zy5sYShlKSxlPWUucHJvdG9jb2wrIjovLyIrZS5ob3N0KTtjLnVybD1lO2EucHVzaChiKX1yZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHttZWRpYWZpbGVzOmF9KSl9LHBvOmZ1bmN0aW9uKCl7dHJ5e3ZhciBhPXRoaXMudmlkZW8uZ2V0Rmxhc2hEaXNwbGF5U3RhdHVzKCk7dGhpcy52aWRlby5wYXVzZWQ9YS5wYXVzZWQ7YS50aW1lPj10aGlzLmMuZHVyYXRpb24/KGNsZWFySW50ZXJ2YWwodGhpcy5vZSksdGhpcy5QZCgpKTooMDxhLnRpbWUmJih0aGlzLnZpZGVvLmN1cnJlbnRUaW1lPWEudGltZSx0aGlzLnlmKCkpLCJlcnJvciI9PWEuc3RhdHVzJiYoY2xlYXJJbnRlcnZhbCh0aGlzLm9lKSwKdGhpcy5RZCgpKSx0aGlzLnZpZGVvLm11dGVkP3RoaXMudmlkZW8ubXV0ZSgpOnRoaXMudmlkZW8udW5tdXRlKCkpfWNhdGNoKGIpe319LFRoOmZ1bmN0aW9uKCl7dGhpcy5vaHx8KHRoaXMub2g9ITAsdGhpcy54Y3x8ZS50cmFjaygic3RhdHNfaGRfY2xvc2VkQmVmb3JlMXN0UXVhcnRpbGUiLCIiLCEwKSl9LEN1OmZ1bmN0aW9uKGEpe2UudihrLiRkLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSk7YT09dGhpcy5VaHx8dGhpcy5DYnx8KDA9PWEmJih0aGlzLnNiJiYod2luZG93LmNsZWFyVGltZW91dCh0aGlzLnNiKSx0aGlzLnNiPSExKSx0aGlzLlZlfHwoZS50cmFjaygic3RhdHNfaGRfaW1wcmVzc2lvbldpdGhPdXRSZXNvbHZlZFByb21pc2UiLCIiLCEwKSx0aGlzLnplPSEwKSx0aGlzLnRyYWNrKCJpbXByZXNzaW9uIiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsZnVuY3Rpb24oKXt0aGlzLlRoKCl9LmJpbmQodGhpcykpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLApmdW5jdGlvbigpe3RoaXMuVGgoKX0uYmluZCh0aGlzKSksdGhpcy50YyYmZS50cmFjaygic3RhdHNfaGRfYWRfaW1wcmVzc2lvbl9mbGFzaCIsIiIsITApLHRoaXMuQ2J8fGUudHJhY2soInN0YXRzX2hkX2FkX2ltcHJlc3Npb24iLCIiLCEwKSxlLlRhKCkmJmUudHJhY2soInN0YXRzX2hkX2FkX2ltcHJlc3Npb25fbW9iaWxlIiwiIiwhMCksdGhpcy50cmFjaygiY3JlYXRpdmVWaWV3IiksdGhpcy50cmFjaygic3RhcnQiKSxlLnYoay5QZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLGUudihrLlVmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSksdGhpcy50YyYmZS50cmFjaygicGxheWVkV2l0aEZsYXNoIiwiMTAzIikpLGE9PU1hdGguZmxvb3IodGhpcy5jLmR1cmF0aW9uLzQpJiYodGhpcy5MLnZjJiYoZS50cmFjaygicXVhcnRpbGUiLCJmaXJzdFF1YXJ0aWxlIiwhMCksdGhpcy54Yz0hMCksdGhpcy50cmFjaygiZmlyc3RRdWFydGlsZSIpLAplLnYoay5OZix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKSxhPT1NYXRoLmZsb29yKHRoaXMuYy5kdXJhdGlvbi8yKSYmKHRoaXMuTC52YyYmZS50cmFjaygicXVhcnRpbGUiLCJtaWRwb2ludCIsITApLHRoaXMudHJhY2soIm1pZHBvaW50IiksZS52KGsuUmYsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSksYT09TWF0aC5mbG9vcigzKnRoaXMuYy5kdXJhdGlvbi80KSYmKHRoaXMuTC52YyYmZS50cmFjaygicXVhcnRpbGUiLCJ0aGlyZFF1YXJ0aWxlIiwhMCksdGhpcy50cmFjaygidGhpcmRRdWFydGlsZSIpLGUudihrLlZmLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSx0aGlzLkMoKSkpLHRoaXMuVWg9YSl9LHRyYWNrOmZ1bmN0aW9uKGEsYil7aWYoIXRoaXMuQ2Ipe3RyeXtpZih0aGlzLmVjW2FdPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHRoaXMuZWMuaW1wcmVzc2lvbiYmdGhpcy5lYy5jb21wbGV0ZSYmIXRoaXMucmYpe3RoaXMucmY9CiEwO3ZhciBkPXRoaXMuZWMuY29tcGxldGUtdGhpcy5lYy5pbXByZXNzaW9uLGM9InN0YXRzX2hkX3RpbWVkaWZmIjt0aGlzLkgmJihjKz0idnBhaWQiKTs1RTM+ZCYmKDEwPmQmJihkPTEwKSwwPmQmJihkPSJuZWdhdGl2ZSIpLGUudHJhY2soYyxkLCEwKSl9fWNhdGNoKGcpe31pZigibXV0ZSI9PWF8fCJ1bm11dGUiPT1hfHwicGF1c2UiPT1hfHwicmVzdW1lIj09YSl7aWYodGhpc1thKyJIYXNCZWVuVHJhY2tlZCJdKXJldHVybjt0aGlzW2ErIkhhc0JlZW5UcmFja2VkIl09ITB9ZD1bXTt0cnl7ZD10aGlzLnRxKHRoaXMuYy5PYSxhKX1jYXRjaChsKXtkPVtdfWZvcig7ZC5sZW5ndGg7KXRyeXt2YXIgbT1kLnBvcCgpOyJpbXByZXNzaW9uIj09YSYmKHRoaXMuZmU9ITApOyJpbXByZXNzaW9uIj09YSYmdGhpcy5KZC5pbXByZXNzaW9ucyYmZS5rcihtLnVybCx0aGlzLkpkLmltcHJlc3Npb25zKT90aGlzLkhlKG0udXJsLG0udHlwZSx7fSxmdW5jdGlvbihhKXt0cnl7dmFyIGI9YS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1VcmwiKTsKZS52KGsuYW4sdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHthZElkOnRoaXMuSmQuYWRJZCxpbXByZXNzaW9uVVJMOmJ9LHRoaXMuQygpKX1jYXRjaChkKXt9fS5iaW5kKHRoaXMpKTp0aGlzLkhlKG0udXJsLG0udHlwZSl9Y2F0Y2gocSl7fWlmKCFiKXRyeXt0aGlzLmMuT2E9dGhpcy5Ubyh0aGlzLmMuT2EsYSl9Y2F0Y2gocil7fX19LEhlOmZ1bmN0aW9uKGEsYixkLGMsZSl7YSYmInN0cmluZyI9PXR5cGVvZiBhJiZhLmxlbmd0aCYmKGI9dGhpcy5MLnphKGEpLGQmJmIuZG4oZCksY3x8KGM9dGhpcy5vZyksZXx8KGU9dGhpcy5vZyksdGhpcy5mbihhKSx0aGlzLkwuTGEoYixmdW5jdGlvbigpe3RoaXMueGgoYSk7YygpfS5iaW5kKHRoaXMpLGZ1bmN0aW9uKCl7dGhpcy54aChhKTtlKCl9LmJpbmQodGhpcyksITEsITApKX0sZm46ZnVuY3Rpb24oYSl7dGhpcy5XYlthXT0ib3BlbiJ9LHhoOmZ1bmN0aW9uKGEpe3RoaXMuV2JbYV09ImNsb3NlZCJ9LEhvOmZ1bmN0aW9uKCl7dGhpcy5XYj0Ke319LCR0OmZ1bmN0aW9uKCl7dmFyIGE9MCxiO2ZvcihiIGluIHRoaXMuV2IpdGhpcy5XYi5oYXNPd25Qcm9wZXJ0eShiKSYmIm9wZW4iPT10aGlzLldiW2JdJiZhKys7cmV0dXJuIGF9LHRxOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhLnR5cGU9PWJ9KX0sVG86ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEudHlwZSE9PWJ9KX0sWHU6ZnVuY3Rpb24oKXt0aGlzLnZpZGVvLnN0eWxlJiYodGhpcy52aWRlby5zdHlsZS5jdXJzb3I9InBvaW50ZXIiLHRoaXMudmlkZW8ub25jbGljaz10aGlzLiRoLmJpbmQodGhpcykpfSwkaDpmdW5jdGlvbigpe2UuVGEoKSYmIm5vbmUiPT09dGhpcy5jb250cm9scy5zdHlsZS5kaXNwbGF5P3RoaXMuWWIoKTp0aGlzLmMuT2ImJihlLnYoay5pZyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMudHJhY2soImNsaWNrdHJhY2tpbmciKSwKIXRoaXMueGMmJmUuVGEoKSYmZS50cmFjaygic3RhdHNfaGRfY2xpY2t0aHJvdWdoQmVmb3JlMXN0UXVhcnRpbGUiLGUuYXEoKSwhMCksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT0iX3RvcCI7dGhpcy5MLiRjJiYoYT0iX2JsYW5rIik7dHJ5e3ZhciBiPXdpbmRvdy5vcGVuKCIiLGEpO2IuZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9IjxkaXY+PC9kaXY+IjtiLmRvY3VtZW50LmxvY2F0aW9uLmhyZWY9dGhpcy5jLk9ifWNhdGNoKGQpe3dpbmRvdy5vcGVuKHRoaXMuYy5PYixhKX19LmJpbmQodGhpcyksNTAwKSl9LFpoOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY2FwdGlvbil7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5jb25mWyJjYXB0aW9uLnN0eWxlIl0/YS5zdHlsZT10aGlzLmNvbmZbImNhcHRpb24uc3R5bGUiXTooYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUud2lkdGg9IjEwMCUiLGEuc3R5bGUuYmFja2dyb3VuZD0ibGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLDAsMCwwLjA1KSAwJSxyZ2JhKDAsMCwwLDAuMjUpIDEwMCUpIiwKYS5zdHlsZS5wYWRkaW5nPSIycHgiLGEuc3R5bGUuZm9udEZhbWlseT0iQXJpYWwsIFZlcmRhbmEiLGEuc3R5bGUuZm9udFNpemU9IjlweCIsYS5zdHlsZS5jb2xvcj0iI2ZmZmZmZiIsYS5zdHlsZS50ZXh0QWxpZ249ImNlbnRlciIsYS5zdHlsZS5ib3R0b209IjBweCIsYS5zdHlsZS5ib3hTaXppbmc9ImJvcmRlci1ib3giKTthLmlubmVySFRNTD10aGlzLlhjLnJlcGxhY2UoIlt0aW1lXSIsZS55ZygwKSk7dmFyIGI9dGhpcy5jb25mWyJjYXB0aW9uLmR1cmF0aW9uIl07dGhpcy5MLmFkJiYoYj10aGlzLkwuYWQpO2ImJndpbmRvdy5zZXRUaW1lb3V0KHRoaXMueGIuYmluZCh0aGlzKSwxRTMqYik7dGhpcy5jYXB0aW9uPXRoaXMuZWEuYXBwZW5kQ2hpbGQoYSl9fSx4YjpmdW5jdGlvbigpeyh0aGlzLmNvbmZbImNhcHRpb24uZHVyYXRpb24iXXx8dGhpcy5MLmFkKSYmdGhpcy5jYXB0aW9uJiZ0aGlzLmNhcHRpb24uc3R5bGUmJih0aGlzLmNhcHRpb24uc3R5bGUuZGlzcGxheT0ibm9uZSIpfSwKR2Q6ZnVuY3Rpb24oKXsodGhpcy5jb25mWyJjYXB0aW9uLmR1cmF0aW9uIl18fHRoaXMuTC5hZCkmJnRoaXMuY2FwdGlvbiYmdGhpcy5jYXB0aW9uLnN0eWxlJiYodGhpcy5jYXB0aW9uLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9LHdmOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmNvbnRyb2xzKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuaWQ9dGhpcy5Rbzt0aGlzLmNvbmZbImNvbnRyb2xzLnN0eWxlIl0/ZC5zdHlsZT10aGlzLmNvbmZbImNvbnRyb2xzLnN0eWxlIl06KGQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixkLnN0eWxlLndpZHRoPSIxMDAlIixkLnN0eWxlLmZvbnRGYW1pbHk9IkFyaWFsLCBWZXJkYW5hIixkLnN0eWxlLmNvbG9yPSIjZmZmZmZmIixkLnN0eWxlLnRleHRBbGlnbj0iY2VudGVyIixkLnN0eWxlLmJvdHRvbT0iMHB4IixkLnN0eWxlLnpJbmRleD0iMTAwMDAiKTtkLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsCmZ1bmN0aW9uKCl7dGhpcy5ZYigpO3RoaXMuR2QoKX0uYmluZCh0aGlzKSk7ZC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt0aGlzLnliKCk7dGhpcy54YigpfS5iaW5kKHRoaXMpKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbInBsYXlQYXVzZS5zdHlsZSJdP2Muc3R5bGU9dGhpcy5jb25mWyJwbGF5UGF1c2Uuc3R5bGUiXTooYy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZmxvYXQ6bGVmdCIpLGMuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixjLnN0eWxlWyJmbG9hdCJdPSJsZWZ0IixjLnN0eWxlLmN1cnNvcj0icG9pbnRlciIpO2MuaWQ9dGhpcy5EYjtjLmlubmVySFRNTD10aGlzLmNvbmYucGF1c2VCdXR0b247InZwYWlkIj09YT8oYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5RaC5iaW5kKHRoaXMpKSxiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLlFoLmJpbmQodGhpcykpKTooYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsCnRoaXMuUGguYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5QaC5iaW5kKHRoaXMpKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7dGhpcy5ZYigpO3RoaXMuR2QoKX0uYmluZCh0aGlzKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt0aGlzLnliKCk7dGhpcy54YigpfS5iaW5kKHRoaXMpKTt2YXIgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmNvbmZbIm11dGUuc3R5bGUiXT9nLnN0eWxlPXRoaXMuY29uZlsibXV0ZS5zdHlsZSJdOihnLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJmbG9hdDpyaWdodCIpLGcuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixnLnN0eWxlWyJmbG9hdCJdPSJyaWdodCIsZy5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTtnLmlkPXRoaXMuQmI7Zy5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b247InZwYWlkIj09YT9nLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwKdGhpcy5CdS5iaW5kKHRoaXMpKTpnLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLkF1LmJpbmQodGhpcykpO2cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe3RoaXMuWWIoKTt0aGlzLkdkKCl9LmJpbmQodGhpcykpO2cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7dGhpcy55YigpO3RoaXMueGIoKX0uYmluZCh0aGlzKSk7dmFyIGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5jb25mWyJza2lwLnN0eWxlIl0/bC5zdHlsZT10aGlzLmNvbmZbInNraXAuc3R5bGUiXToobC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwicG9zaXRpb246YWJzb2x1dGU7dG9wOi01MHB4O3JpZ2h0OjBweCIpLGwuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixsLnN0eWxlLnRvcD0iLTUwcHgiLGwuc3R5bGUucmlnaHQ9IjBweCIsbC5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTtsLmlkPXRoaXMuR2g7bC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLApmdW5jdGlvbigpe3ZhciBhPWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpO2EmJmFbMF0mJihhWzBdLnN0eWxlLm9wYWNpdHk9MSl9KTtsLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IixmdW5jdGlvbigpe3ZhciBhPWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpO2EmJmFbMF0mJihhWzBdLnN0eWxlLm9wYWNpdHk9LjYpfSk7bC5pbm5lckhUTUw9IiI7ZC5hcHBlbmRDaGlsZChjKTt0aGlzLmMuaGYmJmQuYXBwZW5kQ2hpbGQobCk7ZC5hcHBlbmRDaGlsZChnKTtkLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2UuVGEoKXx8KHRoaXMuZWEuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe3RoaXMuWWIoKTt0aGlzLkdkKCl9LmJpbmQodGhpcykpLHRoaXMuZWEuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7dGhpcy55YigpO3RoaXMueGIoKX0uYmluZCh0aGlzKSkpO3RoaXMuY29udHJvbHM9dGhpcy5lYS5hcHBlbmRDaGlsZChkKTsKdGhpcy5jb25mWyJyZXN1bWVDb250cm9sLnN0eWxlIl0/Yi5zdHlsZT10aGlzLmNvbmZbInJlc3VtZUNvbnRyb2wuc3R5bGUiXTooYi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGIuc3R5bGUud2lkdGg9IjEwMCUiLGIuc3R5bGUuZm9udEZhbWlseT0iQXJpYWwsIFZlcmRhbmEiLGIuc3R5bGUuY29sb3I9IiNmZmZmZmYiLGIuc3R5bGUudGV4dEFsaWduPSJjZW50ZXIiLGIuc3R5bGUuYm90dG9tPSIwcHgiLGIuc3R5bGUuekluZGV4PSIxMDAwMCIsYi5zdHlsZS5kaXNwbGF5PSJub25lIixkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpLGQub25lcnJvcj1mdW5jdGlvbigpe3RoaXMud2EmJih0aGlzLndhLnN0eWxlLmJhY2tncm91bmQ9InVybCgnaHR0cHM6Ly9obWRhc3N0cy5zY2huZWV2b25tb3JnZW4uY29tL2ltZy9iaWdwbGF5MTkwNjA2LnBuZycpIG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIil9LmJpbmQodGhpcyksZC5zcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSGdBQUFCNENBWUFBQUE1WkRiU0FBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeWhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVOaTFqTVRRMUlEYzVMakUyTXpRNU9Td2dNakF4T0M4d09DOHhNeTB4TmpvME1Eb3lNaUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01Ua2dLRTFoWTJsdWRHOXphQ2tpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2T0Rnd01VWTVOa1kzUmpsQ01URkZPVGt3UmpnNVJUZ3pSRFU0T0RRME1qVWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZPRGd3TVVZNU56QTNSamxDTVRGRk9Ua3dSamc1UlRnelJEVTRPRFEwTWpVaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzRPREF4UmprMlJEZEdPVUl4TVVVNU9UQkdPRGxGT0RORU5UZzRORFF5TlNJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvNE9EQXhSamsyUlRkR09VSXhNVVU1T1RCR09EbEZPRE5FTlRnNE5EUXlOU0l2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHZWN29SSUFBQXlyU1VSQlZIamE3RjBKYkZUWEZiMkRiY0JBS1FHTXpXNldRRnBTS2lyV1FnZ3BVSUhiaEpLMHFnMUdrQWdvUXFsRTFRcXpTRWhJN0dEUzRyS0pGZ3pZMkdyQllJc0NqVkFOaENXaHhSVENXb1BManNHQU1hRUdZd3k5NTgzNzFqRE1qR2ZHZitiL1AvOGQ2V2p3T0JuL2Q4KzhlOSs5YjNQMDd0MmI5SVRENGZENXM3ZjNkRUEwZjI0YmZ1M0tiTXVNWStMbk41ak5tQTBsWHpDcm1OWE1TbVk1OHk2empIbWJXZkx5NVV2OC9GenZCK1RQcmZNOVQvOU52WXhDMXNWYlRIdzdCekM3NDk5c0hJamF0SjZmK3o4cDl0Zk1ZdVpYek5QTUMxWTBrcFVFUnE4Y3hoekJITXpzR2FLLzAxUXkwZTM5aTh3anpQM01BN0szSzRIcmlRVG0rOHlmTWQ5anhocjRMRDBsUDJFK1lSWXk4NWtGekZLekd0QmgwaGljeEp6QS9JRFp4T1Jmd2tvcGNoYnpiMmFMd1ExTVpDajB6c25NSW1tb1pBdUlTL0laOGF5NzViTlBOdGpUbUU1Z0dHTW1ScS9NRGN3K0ZoNzQ5WkZ0S0pGdGlyVzd3SjlLWXl5VjhUWlNrQ0RiVkNMYmFEdUJrNlE3eTRnd1lUMEpuU0hibW1TSFVUUWFuTTREaVhGa0wvU1I0NHB0ek4rR2M5UWR6aDQ4aVhtT2FUZHhYVEZPMm1CU0pBbjhMZVpXNWlaeWxnM3RqamVrTGJaSzIxamFSUTltZDV6TnI1MlZycThobGZtT2ZEMXN4Ujc4Sy9uZ1NsenZnRzIra0xheWxNQ2ZNZGNwL2Z6R09ta3pTd2k4blRsRGFSWXdaa2pibVRZR1J6SDNjOHdkcHJRS0doK1JjNlpxT0xQR1REMFlFK25IeURtZHAxQS92Q3R0MlZDWEhsemYyUXVIdzRHZWkzblN2a29iM2RCUDJuUWc2MU5qZEE4dVZPS0dCSDJsYlEyTndYbjhEWHRIYVJFeXdMWjV6QStONk1HL1o0NVZHb1FjWTZXdGd4djV0bW5USnBpNGkyVXJpNVR0dzRhQnpKdnNMWXZDNGFLL3ozL296OHJtWVFjV0VweGduZ3lsaThiUS9lL0sxb1poYjZEcFU2QUNZejR6WHRuWk1NUkxEVUlpY0FvNUt5MEt4dUlqcVlXdUFuK2J1Vm5aMWpUWUxEWFJUV0I4WUl5eXEya1E0MitIODBkZzdDZ1lvMnhxT295UjJ0UmI0STFHdGlJcUtvb2VQWHBFang4L3BnWU5HaWhaQTlRbUtpNHV6dGZ2c2RJZzFjZ1dWRlZWVWRldVhlbjU4K2RVWEZ4TUxWcTBFRUxydmNYRG9taEJ6aFdhSjRMcHdaZ2xXbVowQzY1ZXZVb1RKMDZrL1B4OEdqVnFGRjI2ZElsdTNib2xSQTdSUG1PcllRblRFWXpBdjJFMk4vcnBhMnBxcUtLaWdoSVRFeWt2TDQrMmJ0MUszYnAxbzNQbnp0SERodytGQzFlOTJQc0tHbTh1R3NKam9YWmpvNS8rd1lNSE5HTEVDQm80Y0tENHVWZXZYcFNhbWtyTm1qV2preWRQMHVYTGw4Vy9HelpzU0M5ZXZMQ3J5RERPY3VaTGYzdnd4LzdtV1VZZ05qYVcwdExTcUxDd2tLWk9uVXJsNWVYQ2RTTXUyM1FnQnEwbUJlS2kwNnpRcXM2ZE85UHExYXRwOSs3ZE5IcjBhTkdiYlJ5ZjAvd1ZlQ2p6VFN1MWJOQ2dRYlJqeHc3YXVIR2ppTTluejU2MVkzeCtVMnIzcXNCd2EyNzgxTU43aHRKZmpCOC9uZzRkT2tSTGxpd1I0cDQ1YzRhZVBuMWFtMWJaZ0s5cDU5NkRNV3EyOUNxTnhvMGIwOHlaTStuZ3dZTTBiZG8wdW52M3JwM2k4MWozek1lOXhUOG5heCt0VkF1a1ZXdldyS0c5ZS9mUzhPSERSWkhFQnZFNVdtcm8xVVVubTlYOUJJc2hRNGFJUWRqbXpadHI0ek5HM1ZwdmprQTNuZUxOUldOYjQvQkkvV29qUGg4NWNvUVdMRmhBMGRIUlFtZ3RQa2NZM3BQRmo5ZGM5SS9KWEtmdTZBNFVRK2JPblNzR1l0T25UNmQ3OSs2SitJd0NTUVFKSGVYYVVkMEZ0Z1VRbjVFLzc5bXpKMUx6NTFHZUJIN1hicFVCeE9kZHUzWlJWbGFXbUxHS29QcjJqOXdGeGdtdDNjaW1TRTVPcHNPSEQ5T2lSWXNvSmlhR3pwOC9MNllwTGV5MmEvWFVXakNBYkE3VXQyZlBuaTN5NXlsVHBvajRYRkpTWXVYOGVZQ3J3RDhnaGRyNHZHN2RPcEZhalJ3NTBzcnh1WTlySHZ5MldmTTZvNllBaHc0ZFNnVUZCYUsrcmNWbkxYKzJTRDc4dHBZSDQydlpVL1ZkejVnd1lZS0l6NHNYTHhhREx3aU4rR3lCZ1JnMGRVRGdkc3lPU2tyZjhYbldyRmtpUG1QK3VheXN6QXIxYldqYURpNDZrUmx0ZHBkakJxRFV1WDc5ZXRxM2IxOXRmZnZtelp1MXNkbGtOb09taVZvUFZnZ3dmMGFSWk11V0xXSlFkdUhDQlpFL203QTN0OE1UeFNuSmdnUFdoaDAvZnB6bXo1OHY2dHNRMm1UeE9RNEN0MVJTQlk5R2pSclJ2SG56UkgwYjg4OWFmZHNrOGJrbFluQXJGWHQxS0IxeEtyVjI3VnJodXJFSzFDVHh1UlcrWXMxVlA5UTNmNGJJMmRuWllsQjI4ZUpGSSt2YnpTRndJeVdML2hnM2JweVlmMTY0Y0tHb2J5TStQM3YyTE54Q040TEFhbHRvaU5Da1NST2FNMmVPS0pSTW5qeFp2SWRGQm1GRURBUitvYVFJTFpCS2JkaXdRU3cydUgvL3Z0aU9FeTVna1ZhVmtpQzBRSy9GQW9QdDI3Zlg3bzRNRTZvaDhETWxRZWlRbTV0THk1Y3ZwNktpSXNLWlpLMWF0UkpiWWNPRUtwU3pucGpkU0ZiY0M2eE5VR0JFM2JScFUrclJvNGRvUjNWMWRUZ2Y0eHYwNEllcW4rbUhhOWV1MGRLbFM4VXkzY3JLU3BFZm84cGwwTFJuQlFRdVU3TFVIMGlCVnF4WUlZb2ROMjdjb0E0ZE9naGlRR1hndHRaN0VQaU9rcWQrd0tiMDlQUjBPblhxRkxWdTNWcTRZNGdhenRHeUY1UWlCdDlTRWdVZloxSEl3UFFoY3Q3dTNidUw5MDBncklaYjZNRlh5SGxmZmJTU3pEOWN1WEpGREtBd1hZZ1VxRXVYTGtiR1dXK0FwbGNoNmsyTURjaTUxRktoamppN2N1VktXclZxRmQyK2ZWdkVXUFJjZytPc04xeUh0bHJHL1I4bG4yOWc4Z0RuaEdCcExZUkduTVZVb1luY3NUc3VJc1BVTHVVNFN5N2JIVlFlN0RtZnhkNWp4Rms4VHhpTEZjRUNtdGJHM1JPcWo3NEtuTStseGRrblQ1NkllcklKNDZ3dm5IQVYrQ3NscVJNWU5DSE9vbmFNQmUvdDI3YzNjNXoxaGVPdUFwZXcyN2xNTnQ2ZkJHemJ0azFVb1U2ZlBrMHRXN1lVN2hpaVdzQWR1NlBFNFhCY0ZnSzd4TGVEZGhYNDZOR2pJcDlGbk1YQUNTc3hZQmNURDZEcXdnRk5WOWZjOTNQbUozWVM5dnIxNnlMT2J0cTBTYmhtbkx0bHNUanJEWjlyLzNEdHdYZ1RYMW5UN2NuUWV4UU5sN3RzMlRMS3lNaWcwdEpTU2toSUVETStKaWt2MWhjMXJnSzd6anlYa3c1WHFaa2RPVGs1MUxkdlg3RzZBcU5qdUdPa1B4QTJRbzRvTHBSYXZ1YWlnVnptaUVnVTFyVnVqRVZ3S0MrS3I3djFleXg1MEpDOENmeFhjdDVHSFRGMWFlU3pPRmtuTXpOVHVPWk9uVHBGU3B6MUdIMmtobDRGZnNUY3lmeUYxVnVxemMraWJuem56cDNhT0d2QmZEWVE3Sklha3FjWXJPR1BWbThsNnNiOSt2VVRjUmFqWTljNEcrSEljSC9Ea3lzK3hDd21pNTA0Q3h3N2RreTRZK1N6aUxOWUxtUHhmRFlRRkV2dDZoUVlXTXI4azFWYWhuVlFPQ0ZIcXh0SGVKejFCby8zYTNpNzRqMlRtVTRtUHZVZHdGWk5iWDRXK1d4OGZEeTFiZHMyVXZMWlFGREIzT1RwRncxOEpNc0xUSjBMNU9aUy8vNzl4ZFlRYmZWaWhPV3pnV0MrMU14dmdZSFAzRWRrUnNIVjFXSkRWMUpTRXFXa3BJZ0R5NURQWW1MQVpqM1dGVmoyN1BXR2NGLzVMaXcyVStiRmhxSmp4NDVpTkR4anhneHhyQkVXaitNOUc4WlpUNWhGSG01YjBlREFnS1FPL0plWmFOVFR3LzNpVGdaczJzS3NENjRCd2pVNk51NnhycmhhbHpiK0NJenpoLzloVkF2UVN6R0FBakNJUW85VjE5clZBb2VPK3B3LzhHZWJHejRnMzZnV29MeUl4ZVNnVFFkUTNwQlBma3dPK2J1UGNTS3pXdG5VTklBV2svenlnSDcyaUFvcDhqWmxXMU5nRXZtNWFUQ1FuY2c1ekR4bFc4T1JGMGhIQzNTcmVRcXB6V3BHNG83VXdQOUJhb0IvNEJtNzlOSDhXcVJzYlFpU0hBNUhRQ2N5UkRWdkh2QXhXY2hac0NQeGZXWHZzR0lxT2EvOHBWQUxUTElINDU2bGdjcnVZY0VmbUl1QytSL3JjOXdMYnAzZXFXd2ZjdXdrSHpkOGgxSmc0RVBtRjBxRGtPR3d0REVaSlRDQVV1YS9sQmE2QTV2SGh0WDNRL1FRR0ZYL3djeC9LazEwQTJ6NVEvSXl4eHR1Z1VYNnhCeEV6djFOQ3ZYRFFXbExYUTZvQzNZVTdRbWNJci9NNU5mdk1uc3BuWUxDWDVnLzVWeFh0eG1WVUJ5YStFdHlydWRTQ0F6cDBuYTZJbFNuWXY1T0p1WUsvbUdxdEpudUNPVVdsUTNzc3I4bTUxNlp6a3BEajhDS2pHUjJ5VitHNmcrRStseGJQUGozbU5sS3k5ZVFMVzN6WlNqL1NEZ09MdjZHbWNyOG1GeTJOZG9ZNWRJV3FkSTJaSFdCTldUSzBYV09qY1hOa1RiSUROY2YxRE5OOGdlUE9TN3ZJR2ZsNnp2TXRqWVI5dDlNWE5xd2hPUHRZL2RmdWw5YnErYzF0a2JkM0lScEw5eFovR3R5VGo5R0trcGxHL3RRRUZOOVZoWllBN2FxNG1TZnRBZ1R1bFMycVJzWnZCM1hnUU0xOVlMN0FqNVBDL3A4TFBLTDVkK041OWZwOGh0dlJaeGtybVVYbThXdkhxOUs4T1IrUSttaXpTU3c2KzkrSWtlWkh6Q2JtRnpVU21ZQk0wdHp3NzRFVWdLL2lnUXA4aGh5VGt2R21rUlU5RTV0UTBDQmUzaFJBdnN2c0NzdzRoNUd6bE9BTUQwWjdtdnBjVHp2RWVaKzVnSG03VUJFVkFKVHdBZWV2Y1hzVGM1MVlUaExIMVdoTmpxNGRMamN1MHlVV1MrUnM5SjBtbm5CYjZNcWdYVVIyQjNSVXVDdXNyZmo0dXQ0Wmd0bU0zSmV3cW5kMDRpdEg3anhEVGtwZGdoZ3ZYR1o3SlVsVXVDZ1R5QTFrOEQvRjJBQUU4YkJqOGQ0ZEM0QUFBQUFTVVZPUks1Q1lJST0iLApiLnN0eWxlLmJhY2tncm91bmQ9InVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFIZ0FBQUI0Q0FZQUFBQTVaRGJTQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5aHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU5pMWpNVFExSURjNUxqRTJNelE1T1N3Z01qQXhPQzh3T0M4eE15MHhOam8wTURveU1pQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTkRJREl3TVRrZ0tFMWhZMmx1ZEc5emFDa2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZPRGd3TVVZNU5rWTNSamxDTVRGRk9Ua3dSamc1UlRnelJEVTRPRFEwTWpVaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk9EZ3dNVVk1TnpBM1JqbENNVEZGT1Rrd1JqZzVSVGd6UkRVNE9EUTBNalVpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvNE9EQXhSamsyUkRkR09VSXhNVVU1T1RCR09EbEZPRE5FTlRnNE5EUXlOU0lnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG80T0RBeFJqazJSVGRHT1VJeE1VVTVPVEJHT0RsRk9ETkVOVGc0TkRReU5TSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QdlY3b1JJQUFBeXJTVVJCVkhqYTdGMEpiRlRYRmIyRGJjQkFLUUdNelc2V1FGcFNLaXJXUWdncFVJSGJoSkswcWcxR2tBZ29RcWxFMVFxelNFaEk3R0RTNHJLSkZnelkyR3JCWUlzQ2pWQU5oQ1doeFJUQ1dvUExqc0dBTWFFR1l3eTk1ODM3MWpETWpHZkdmK2IvUC84ZDZXandPQm4vZDgrOGU5KzliM1AwN3QyYjlJVEQ0ZkQ1czdmM2RFQTBmMjRiZnUzS2JNdU1ZK0xuTjVqTm1BMGxYekNybU5YTVNtWTU4eTZ6akhtYldmTHk1VXY4L0Z6dkIrVFByZk05VC85TnZZeEMxc1ZiVEh3N0J6Qzc0OTlzSElqYXRKNmYrejhwOXRmTVl1Wlh6TlBNQzFZMGtwVUVScThjeGh6QkhNenNHYUsvMDFReTBlMzlpOHdqelAzTUE3SzNLNEhyaVFUbSs4eWZNZDlqeGhyNExEMGxQMkUrWVJZeTg1a0Z6Rkt6R3RCaDBoaWN4SnpBL0lEWnhPUmZ3a29wY2hiemIyYUx3UTFNWkNqMHpzbk1JbW1vWkF1SVMvSVo4YXk3NWJOUE50alRtRTVnR0dNbVJxL01EY3crRmg3NDlaRnRLSkZ0aXJXN3dKOUtZeXlWOFRaU2tDRGJWQ0xiYUR1Qms2UTd5NGd3WVQwSm5TSGJtbVNIVVRRYW5NNERpWEZrTC9TUjQ0cHR6TitHYzlRZHpoNDhpWG1PYVRkeFhURk8ybUJTSkFuOExlWlc1aVp5bGczdGpqZWtMYlpLMjFqYVJROW1kNXpOcjUyVnJxOGhsZm1PZkQxc3hSNzhLL25nU2x6dmdHMitrTGF5bE1DZk1kY3AvZnpHT21relN3aThuVGxEYVJZd1pramJtVFlHUnpIM2M4d2RwclFLR2grUmM2WnFPTFBHVEQwWUUrbkh5RG1kcDFBL3ZDdHQyVkNYSGx6ZjJRdUh3NEdlaTNuU3Zrb2IzZEJQMm5RZzYxTmpkQTh1Vk9LR0JIMmxiUTJOd1huOERYdEhhUkV5d0xaNXpBK042TUcvWjQ1VkdvUWNZNld0Z3h2NXRtblRKcGk0aTJVcmk1VHR3NGFCekp2c0xZdkM0YUsvejMvb3o4cm1ZUWNXRXB4Z25neWxpOGJRL2UvSzFvWmhiNkRwVTZBQ1l6NHpYdG5aTU1STERVSWljQW81S3kwS3h1SWpxWVd1QW4rYnVWbloxalRZTERYUlRXQjhZSXl5cTJrUTQyK0g4MGRnN0NnWW8yeHFPb3lSMnRSYjRJMUd0aUlxS29vZVBYcEVqeDgvcGdZTkdpaFpBOVFtS2k0dXp0ZnZzZElnMWNnV1ZGVlZVZGV1WGVuNTgrZFVYRnhNTFZxMEVFTHJ2Y1hEb21oQnpoV2FKNExwd1pnbFdtWjBDNjVldlVvVEowNmsvUHg4R2pWcUZGMjZkSWx1M2JvbFJBN1JQbU9yWVFuVEVZekF2MkUyTi9ycGEycHFxS0tpZ2hJVEV5a3ZMNCsyYnQxSzNicDFvM1BuenRIRGh3K0ZDMWU5MlBzS0dtOHVHc0pqb1haam81Lyt3WU1ITkdMRUNCbzRjS0Q0dVZldlhwU2Fta3JObWpXamt5ZFAwdVhMbDhXL0d6WnNTQzlldkxDcnlERE9jdVpMZjN2d3gvN21XVVlnTmphVzB0TFNxTEN3a0taT25Vcmw1ZVhDZFNNdTIzUWdCcTBtQmVLaTA2elFxczZkTzlQcTFhdHA5KzdkTkhyMGFOR2JiUnlmMC93VmVDanpUU3UxYk5DZ1FiUmp4dzdhdUhHamlNOW56NTYxWTN4K1UycjNxc0J3YTI3ODFNTjdodEpmakI4L25nNGRPa1JMbGl3UjRwNDVjNGFlUG4xYW0xYlpnSzlwNTk2RE1XcTI5Q3FOeG8wYjA4eVpNK25nd1lNMGJkbzB1bnYzcnAzaTgxajN6TWU5eFQ4bmF4K3RWQXVrVld2V3JLRzllL2ZTOE9IRFJaSEVCdkU1V21ybzFVVW5tOVg5QklzaFE0YUlRZGptelp0cjR6TkczVnB2amtBM25lTE5SV05iNC9CSS9Xb2pQaDg1Y29RV0xGaEEwZEhSUW1ndFBrY1kzcFBGajlkYzlJL0pYS2Z1NkE0VVErYk9uU3NHWXRPblQ2ZDc5KzZKK0l3Q1NRUUpIZVhhVWQwRnRnVVFuNUUvNzltekoxTHo1MUdlQkg3WGJwVUJ4T2RkdTNaUlZsYVdtTEdLb1ByMmo5d0Z4Z210M2NpbVNFNU9wc09IRDlPaVJZc29KaWFHenA4L0w2WXBMZXkyYS9YVVdqQ0FiQTdVdDJmUG5pM3k1eWxUcG9qNFhGSlNZdVg4ZVlDcndEOGdoZHI0dkc3ZE9wRmFqUnc1MHNyeHVZOXJIdnkyV2ZNNm82WUFodzRkU2dVRkJhSytyY1ZuTFgrMlNENzh0cFlINDJ2WlUvVmR6NWd3WVlLSXo0c1hMeGFETHdpTitHeUJnUmcwZFVEZ2RzeU9Ta3JmOFhuV3JGa2lQbVArdWF5c3pBcjFiV2phRGk0NmtSbHRkcGRqQnFEVXVYNzlldHEzYjE5dGZmdm16WnUxc2Rsa05vT21pVm9QVmdnd2YwYVJaTXVXTFdKUWR1SENCWkUvbTdBM3Q4TVR4U25KZ2dQV2hoMC9mcHptejU4djZ0c1EybVR4T1E0Q3QxUlNCWTlHalJyUnZIbnpSSDBiODg5YWZkc2s4YmtsWW5BckZYdDFLQjF4S3JWMjdWcmh1ckVLMUNUeHVSVytZczFWUDlRM2Y0YkkyZG5aWWxCMjhlSkZJK3ZielNGd0l5V0wvaGczYnB5WWYxNjRjS0dvYnlNK1AzdjJMTnhDTjRMQWFsdG9pTkNrU1JPYU0yZU9LSlJNbmp4WnZJZEZCbUZFREFSK29hUUlMWkJLYmRpd1FTdzJ1SC8vdnRpT0V5NWdrVmFWa2lDMFFLL0ZBb1B0MjdmWDdvNE1FNm9oOERNbFFlaVFtNXRMeTVjdnA2S2lJc0taWksxYXRSSmJZY09FS3BTem5wamRTRmJjQzZ4TlVHQkUzYlJwVStyUm80ZG9SM1YxZFRnZjR4djA0SWVxbittSGE5ZXUwZEtsUzhVeTNjcktTcEVmbzhwbDBMUm5CUVF1VTdMVUgwaUJWcXhZSVlvZE4yN2NvQTRkT2doaVFHWGd0dFo3RVBpT2txZCt3S2IwOVBSME9uWHFGTFZ1M1ZxNFk0Z2F6dEd5RjVRaUJ0OVNFZ1VmWjFISXdQUWhjdDd1M2J1TDkwMGdySVpiNk1GWHlIbGZmYlNTekQ5Y3VYSkZES0F3WFlnVXFFdVhMa2JHV1crQXBsY2g2azJNRGNpNTFGS2hqamk3Y3VWS1dyVnFGZDIrZlZ2RVdQUmNnK09zTjF5SHRsckcvUjhsbjI5ZzhnRG5oR0JwTFlSR25NVlVvWW5jc1RzdUlzUFVMdVU0U3k3YkhWUWU3RG1meGQ1anhGazhUeGlMRmNFQ210YkczUk9xajc0S25NK2x4ZGtuVDU2SWVySUo0Nnd2bkhBVitDc2xxUk1ZTkNIT29uYU1CZS90MjdjM2M1ejFoZU91QXBldzI3bE1OdDZmQkd6YnRrMVVvVTZmUGswdFc3WVU3aGlpV3NBZHU2UEU0WEJjRmdLN3hMZURkaFg0Nk5HaklwOUZuTVhBQ1NzeFlCY1RENkRxd2dGTlY5ZmM5M1BtSjNZUzl2cjE2eUxPYnRxMFNiaG1uTHRsc1RqckRaOXIvM0R0d1hnVFgxblQ3Y25RZXhRTmw3dHMyVExLeU1pZzB0SlNTa2hJRURNK0ppa3YxaGMxcmdLN3pqeVhrdzVYcVprZE9UazUxTGR2WDdHNkFxTmp1R09rUHhBMlFvNG9McFJhdnVhaWdWem1pRWdVMXJWdWpFVndLQytLcjd2MWV5eDUwSkM4Q2Z4WGN0NUdIVEYxYWVTek9Ga25Nek5UdU9aT25UcEZTcHoxR0gya2hsNEZmc1RjeWZ5RjFWdXF6YytpYm56bnpwM2FPR3ZCZkRZUTdKSWFrcWNZck9HUFZtOGw2c2I5K3ZVVGNSYWpZOWM0RytISWNIL0RreXMreEN3bWk1MDRDeHc3ZGt5NFkrU3ppTE5ZTG1QeGZEWVFGRXZ0NmhRWVdNcjhrMVZhaG5WUU9DRkhxeHRIZUp6MUJvLzNhM2k3NGoyVG1VNG1QdlVkd0ZaTmJYNFcrV3g4ZkR5MWJkczJVdkxaUUZEQjNPVHBGdzE4Sk1zTFRKMEw1T1pTLy83OXhkWVFiZlZpaE9XemdXQysxTXh2Z1lIUDNFZGtSc0hWMVdKRFYxSlNFcVdrcElnRHk1RFBZbUxBWmozV0ZWajI3UFdHY0YvNUxpdzJVK2JGaHFKang0NWlORHhqeGd4eHJCRVdqK005RzhaWlQ1aEZIbTViMGVEQWdLUU8vSmVaYU5UVHcvM2lUZ1pzMnNLc0Q2NEJ3alU2TnU2eHJyaGFsemIrQ0l6emgvOWhWQXZRU3pHQUFqQ0lRbzlWMTlyVkFvZU8rcHcvOEdlYkd6NGczNmdXb0x5SXhlU2dUUWRRM3BCUGZrd08rYnVQY1NLeld0blVOSUFXay96eWdINzJpQW9wOGpabFcxTmdFdm01YVRDUW5jZzV6RHhsVzhPUkYwaEhDM1NyZVFxcHpXcEc0bzdVd1A5QmFvQi80Qm03OU5IOFdxUnNiUWlTSEE1SFFDY3lSRFZ2SHZBeFdjaFpzQ1B4ZldYdnNHSXFPYS84cFZBTFRMSUg0NTZsZ2NydVljRWZtSXVDK1IvcmM5d0xicDNlcVd3ZmN1d2tIemQ4aDFKZzRFUG1GMHFEa09Hd3RERVpKVENBVXVhL2xCYTZBNXZIaHRYM1EvUVFHRlgvd2N4L0trMTBBMno1US9JeXh4dHVnVVg2eEJ4RXp2MU5DdlhEUVdsTFhRNm9DM1lVN1FtY0lyL001TmZ2TW5zcG5ZTENYNWcvNVZ4WHR4bVZVQnlhK0V0eXJ1ZFNDQXpwMG5hNklsU25ZdjVPSnVZSy9tR3F0Sm51Q09VV2xRM3NzcjhtNTE2WnprcERqOENLakdSMnlWK0c2ZytFK2x4YlBQajNtTmxLeTllUUxXM3paU2ovU0RnT0x2NkdtY3I4bUZ5Mk5kb1k1ZElXcWRJMlpIV0JOV1RLMFhXT2pjWE5rVGJJRE5jZjFETk44Z2VQT1M3dklHZmw2enZNdGpZUjl0OU1YTnF3aE9QdFkvZGZ1bDlicStjMXRrYmQzSVJwTDl4Wi9HdHlUajlHS2twbEcvdFFFRk45VmhaWUE3YXE0bVNmdEFnVHVsUzJxUnNadkIzWGdRTTE5WUw3QWo1UEMvcDhMUEtMNWQrTjU5ZnA4aHR2Ulp4a3JtVVhtOFd2SHE5SzhPUitRK21pelNTdzYrOStJa2VaSHpDYm1GelVTbVlCTTB0enc3NEVVZ0svaWdRcDhoaHlUa3ZHbWtSVTlFNXRRMENCZTNoUkF2c3ZzQ3N3NGg1R3psT0FNRDBaN212cGNUenZFZVorNWdIbTdVQkVWQUpUd0FlZXZjWHNUYzUxWVRoTEgxV2hOanE0ZExqY3UweVVXUytSczlKMG1ubkJiNk1xZ1hVUjJCM1JVdUN1c3JmajR1dDRaZ3RtTTNKZXdxbmQwNGl0SDdqeERUa3BkZ2hndlhHWjdKVWxVdUNnVHlBMWs4RC9GMkFBRThiQmo4ZDRkQzRBQUFBQVNVVk9SSzVDWUlJPScpIG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIiwKYi5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTt0aGlzLndhPXRoaXMuZWEuYXBwZW5kQ2hpbGQoYik7dGhpcy5iLllmKGZ1bmN0aW9uKGEpe3RoaXMud2Euc3R5bGUuaGVpZ2h0PWEuaGVpZ2h0KyJweCJ9LmJpbmQodGhpcykpOyJ2cGFpZCIhPWEmJnRoaXMuYi5mLnZhJiZ0aGlzLmIuZi52YSgpJiYoZS52KGsuamcsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSx0aGlzLk5lKCkpO3RoaXMueWIoKX19LHliOmZ1bmN0aW9uKCl7dGhpcy5jb250cm9scy5zdHlsZS5kaXNwbGF5PSJub25lIn0sWWI6ZnVuY3Rpb24oKXt0aGlzLndhJiYiYmxvY2siPT10aGlzLndhLnN0eWxlLmRpc3BsYXl8fHRoaXMuQWZ8fCh0aGlzLmNvbnRyb2xzLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9LFBoOmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy5iLkYucGF1c2VkPyh0aGlzLmIuRi5wbGF5KCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uLAp0aGlzLnRyYWNrKCJyZXN1bWUiLCEwKSxlLnYoay5VYyx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSk6KHRoaXMuYi5GLnBhdXNlKCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24sdGhpcy50cmFjaygicGF1c2UiLCEwKSxlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnliKCksdGhpcy54YigpKSl9LFFoOmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5EYik7dGhpcy5nYz8oZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJwbGF5IiksdGhpcy53YSYmKHRoaXMud2Euc3R5bGUuZGlzcGxheT0ibm9uZSIpLGEmJihhLmlubmVySFRNTD10aGlzLmNvbmYucGF1c2VCdXR0b24pLHRoaXMuZ2M9ITEpOihlLm1hKHRoaXMuSCwiY29udHJvbCIsCiJwYXVzZSIpLHRoaXMud2EmJih0aGlzLndhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnliKCksdGhpcy54YigpKSxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24pLHRoaXMuZ2M9ITApfSx6ZDpmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRGIpO3RoaXMuYi5GLnBhdXNlZHx8KHRoaXMuYi5GLnBhdXNlKCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBsYXlCdXR0b24sdGhpcy50cmFjaygicGF1c2UiLCEwKSxlLnYoay5ZZCx0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKX0semg6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRiKTt0aGlzLmIuRi5wYXVzZWQmJih0aGlzLmIuRi5wbGF5KCksYS5pbm5lckhUTUw9dGhpcy5jb25mLnBhdXNlQnV0dG9uLHRoaXMudHJhY2soInJlc3VtZSIsITApLGUudihrLlVjLHRoaXMuYy5BLHRoaXMuYi5mLnUoKSx0aGlzLkIoKSwKdGhpcy5DKCkpKX0sQXU6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkJiKTt0aGlzLmIuRi5tdXRlZD8odGhpcy5iLkYubXV0ZWQ9ITEsYS5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b24sdGhpcy50cmFjaygidW5tdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfdW5tdXRlZCIsInVzZXIiLCEwKSxlLnYoay50Zix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKToodGhpcy5iLkYubXV0ZWQ9ITAsYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJ1c2VyIiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSl9LEJ1OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYik7dGhpcy5wYj8oZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJ1bm11dGUiKSwKdGhpcy5wYj0hMSxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLm11dGVCdXR0b24pKTooZS5tYSh0aGlzLkgsImNvbnRyb2wiLCJtdXRlIiksdGhpcy5wYj0hMCxhJiYoYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbikpfSxOZTpmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuQmIpO3RoaXMuYi5GLm11dGVkfHwodGhpcy5iLkYubXV0ZWQ9ITAsYS5pbm5lckhUTUw9dGhpcy5jb25mLnVubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJtdXRlIiwhMCksZS50cmFjaygic3RhdHNfaGRfbXV0ZWQiLCJjb250ZW50IiwhMCksZS52KGsueGQsdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSl9LEx1OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5CYik7dGhpcy5iLkYubXV0ZWQmJih0aGlzLmIuRi5tdXRlZD0hMSxhLmlubmVySFRNTD10aGlzLmNvbmYubXV0ZUJ1dHRvbix0aGlzLnRyYWNrKCJ1bm11dGUiLAohMCksZS50cmFjaygic3RhdHNfaGRfdW5tdXRlZCIsImNvbnRlbnQiLCEwKSxlLnYoay50Zix0aGlzLmMuQSx0aGlzLmIuZi51KCksdGhpcy5CKCksdGhpcy5DKCkpKX0sWGI6ZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5YYik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5YYik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuWGIpO3RoaXMuamR8fHRoaXMuVmN8fCh0aGlzLnZpZGVvLmxvYWQoKSx0aGlzLmtmKCkpfSxoZDpmdW5jdGlvbigpe3ZhciBhPSExLGI9bC5nZXRDb25maWcoKTsic3ZtcHJldmlldyI9PWUubGEoZG9jdW1lbnQubG9jYXRpb24uaHJlZikuYW5jaG9yJiYoYT0hMCxiLmFkRmFsbGJhY2tVUkx8fChiLmFkRmFsbGJhY2tVUkw9Imh0dHBzOi8vaGdjLWNmLWNhY2hlLTEuc3Zvbm0uY29tL3dlbGVjdC54bWwiKSk7ZS51YygpO2lmKChhfHwhdGhpcy5mZSYmCmIuYWRGYWxsYmFja1VSTCkmJiF0aGlzLlFlKXRoaXMuUWU9dGhpcy5maT10aGlzLkFmPSEwLGUudHJhY2soInN0YXRzX3d0X3N0YXJ0IiwiIiwhMCksdGhpcy5mZT0hMCxhPWUuJGYoYi5hZEZhbGxiYWNrVVJMLHRoaXMuTCwhMSx7b25seVVSTDohMH0pLHRoaXMuSWUoYSwhMCwhMSx7aG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3M6ITB9KTtlbHNlIGlmKHRoaXMuamQ9ITAsdGhpcy5zYiYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5zYiksdGhpcy5zYj0hMSksKCJwcmVyb2xsIj09ZS5TYSYmdGhpcy5WY3x8InBvc3Ryb2xsIj09ZS5TYSkmJnRoaXMuY29uZi5wb3N0QWRJZnJhbWVVcmwpaWYoYT10aGlzLmNvbmYucG9zdEFkSWZyYW1lVXJsLCJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoYT1hKGUuU2EpKSwic3RyaW5nIj09dHlwZW9mIGEmJmEpe2ZvcihiPXRoaXMuYi5HO2IuZmlyc3RDaGlsZDspYi5yZW1vdmVDaGlsZChiLmZpcnN0Q2hpbGQpO2IucGFyZW50fHx0aGlzLmIuSmMoKTsKdmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Yy5zZXRBdHRyaWJ1dGUoInNyYyIsYSk7Yy5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpO2Muc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIik7Yy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAwIG5vbmU7b3V0bGluZTogbm9uZTsiKTtiLmFwcGVuZENoaWxkKGMpO3ZhciBmPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihhKXtpZigiY29udGludWUiPT1hLmRhdGEpe3RoaXMua2QoKTthPU1hdGgucm91bmQoKChuZXcgRGF0ZSkuZ2V0VGltZSgpLWYpLzFFMyk7dmFyIGI9IiI7MTxhJiYoYj0iZ3QxIik7NTxhJiYoYj0iZ3Q1Iik7MTA8YSYmKGI9Imd0MTAiKTsyMDxhJiYoYj0iZ3QyMCIpO2UudHJhY2soInN0YXRzX2hkX3Bvc3RJZnJhbWVDbG9zZWQiLGIsITApfX0uYmluZCh0aGlzKSk7ZS50cmFjaygic3RhdHNfaGRfcG9zdElmcmFtZU9wZW5lZCIsCiIiLCEwKX1lbHNlIHRoaXMua2QoKTtlbHNlIHRoaXMua2QoKX0sa2Q6ZnVuY3Rpb24oYSl7dGhpcy4kdCgpJiYhYT93aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMua2QoITApfS5iaW5kKHRoaXMpLHRoaXMuR3MpOih0aGlzLmxmPSEwLHRoaXMuYi53ZSgpLHRoaXMuYi5wdCgpLHRoaXMuVWI9ITEsZS52KGsuUG8sdGhpcy5jLkEsdGhpcy5iLmYudSgpLHRoaXMuQigpLHRoaXMuQygpKSx0aGlzLnNlKCkueWgoKSl9LHNlOmZ1bmN0aW9uKCl7dmFyIGE9bnVsbDt0aGlzLmImJnRoaXMuYi5mJiYoYT10aGlzLmIuZik7cmV0dXJuIGF9LERlOmZ1bmN0aW9uKCl7dmFyIGE9ITE7dHJ5e25ldyBBY3RpdmVYT2JqZWN0KCJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFzaCIpJiYoYT0hMCl9Y2F0Y2goYil7bmF2aWdhdG9yLm1pbWVUeXBlcyYmdm9pZCAwIT1uYXZpZ2F0b3IubWltZVR5cGVzWyJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCJdJiZuYXZpZ2F0b3IubWltZVR5cGVzWyJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCJdLmVuYWJsZWRQbHVnaW4mJgooYT0hMCl9cmV0dXJuIGF9LGFnOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5IYSgibWluVmlzIik7YSYmKGUuQmUodGhpcy52aWRlbyxhKT90aGlzLnpoKCk6dGhpcy56ZCgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5hZygpfS5iaW5kKHRoaXMpLDEwMCkpfSxCOmZ1bmN0aW9uKCl7dmFyIGE9e307dGhpcy5jJiYoYS5jbGlja3Rocm91Z2g9dGhpcy5jLk9iLGEuZHVyYXRpb249dGhpcy5jLmR1cmF0aW9uLGEuYWRQb2Q9dGhpcy5jLnJiLHRoaXMudmlkZW8mJnRoaXMudmlkZW8uY3VycmVudFRpbWUmJihhLmN1cnJlbnRUaW1lPXRoaXMudmlkZW8uY3VycmVudFRpbWUpLHRoaXMubGMmJjA8dGhpcy5sYy5sZW5ndGgmJihhLmFkSWRzPXRoaXMubGMpKTt0aGlzLnZpZGVvJiZ0aGlzLnZpZGVvLmR1cmF0aW9uJiYoYS52aWRlb19kdXJhdGlvbj10aGlzLnZpZGVvLmR1cmF0aW9uKTtyZXR1cm4gYX0sQzpmdW5jdGlvbigpe3ZhciBhPXt9O2EuYWRzZXNzaW9uX2lkPXRoaXMuYm8rCiItIit0aGlzLmpmO3RoaXMuYyYmdGhpcy5jLkRnJiYoYS5ob21hZEltcHJlc3Npb25BZElkPXRoaXMuYy5EZygpKTtyZXR1cm4gYX0sb2c6ZnVuY3Rpb24oKXt9fX0pKHRoaXMpO3ZhciBRYT1jLllqfHxRYTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy55cz10aGlzLmFbMV07dGhpcy5HcD10aGlzLmFbNV07dGhpcy5qPXRoaXMuYVs4XX1jLk5pPWI7Yi5wcm90b3R5cGU9e3hzOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy55czp0aGlzLkZwKGEpfSxGcDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuR3A6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuajphfX19KShjKTt2YXIgUmE9Yy5OaXx8UmEsd2M9bmV3IFJhKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwKIlooVFREWlRSUiIpO3dpbmRvdy5EPXdjLnhzKDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsYixjLGQpe3RoaXMub3B0aW9ucz1kfHx7fTtoPWM7dGhpcy5wYXJlbnQ9YTt0aGlzLnVybD1iO3RoaXMuRWE9bnVsbDt0aGlzLlc9W107dGhpcy5VPW51bGw7dGhpcy5rYz10aGlzLm1jPSExO3RoaXMuc2E9IiI7dGhpcy56Zj0hMTtkJiZkLmVtcHR5P3RoaXMuTXIoJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+PFZBU1QgdmVyc2lvbj0iMy4wIj48L1ZBU1Q+Jyk6dGhpcy5sb2FkKCl9dmFyIGE9MCxoLGQ9W107Yy52bT1iO2IucHJvdG90eXBlPXtsb2FkOmZ1bmN0aW9uKCl7dmFyIGE9ZS51YygpLGI7Yj1lLmxhKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpO3ZhciBjPSIiO2IucXVlcnlLZXkmJihjPWIucXVlcnlLZXkuaHZwKTtjJiYodGhpcy5vcHRpb25zLnZwYWlkPSEwKTtiPXRoaXMub3B0aW9ucy5rZWVwVVJMP25ldyB5KHRoaXMudXJsKTpsLnphKGwuS2QodGhpcy51cmwpLAohMSx0aGlzLm9wdGlvbnMudXNlQWRUYWdQYXJhbWV0ZXIpO2lmKHRoaXMub3B0aW9ucy52cGFpZCYmIWUuVGEoKSYmKGEuaXNDaHJvbWV8fGEuaXNGaXJlZm94KSYmIWEuaXNFZGdlfHxjKXthPWUubGcodGhpcy51cmwpO2F8fChhPXRoaXMudXJsKTtpZigwPD1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoIm1hcnRoYXN0ZXdhcnQiKSYmdGhpcy5vcHRpb25zLkFkU3lzdGVtJiYiR0RGUCI9PXRoaXMub3B0aW9ucy5BZFN5c3RlbXx8ImFwcHNwb3QiPT1jfHwwPGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZigiZmFuZG9tLmNvbSIpJiYwPGEuaW5kZXhPZigicHViYWRzLmcuZG91YmxlY2xpY2submV0LyIpKTA8YS5pbmRleE9mKCJnb29nbGVhZHMuZy5kb3VibGVjbGljay5uZXQvcGFnZWFkL2FkcyIpfHwiYXBwc3BvdCI9PWN8fDA8ZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKCJmYW5kb20uY29tIikmJjA8YS5pbmRleE9mKCJwdWJhZHMuZy5kb3VibGVjbGljay5uZXQvIik/Cih0aGlzLnVybD0iaHR0cHM6Ly9pbWEzdnBhaWQuYXBwc3BvdC5jb20vP2FkVGFnVXJsPSIrZW5jb2RlVVJJQ29tcG9uZW50KGwuS2QoYSkpKyImdHlwZT1qcyIsYj1sLnphKGwuS2QodGhpcy51cmwpLCExLHRoaXMub3B0aW9ucy51c2VBZFRhZ1BhcmFtZXRlciksYi5kYXRhLmhvbWFkX3VybF9wcmVmaXhfYWxpYXM9ImNvbWFwcHNwb3RpbWEzdnBhaWQiKTpiPWwuemEobC5LZChhKSwhMSx0aGlzLm9wdGlvbnMudXNlQWRUYWdQYXJhbWV0ZXIpO2IuZGF0YS5ob21hZF92cGFpZF9jb21wYXRpYmxlPSJ0cnVlIjt0aGlzLm9wdGlvbnMuaG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3MmJihiLmRhdGEuaG9tYWRfcmVwbGFjZV91cmxzX2luX3RhZ3M9Ik1lZGlhZmlsZSIpfWwuTGEoYix0aGlzLkxyLmJpbmQodGhpcyksdGhpcy5Jci5iaW5kKHRoaXMpKX0sQWc6ZnVuY3Rpb24oKXt2YXIgYT0wPHRoaXMuRWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6VkFTVEFkRGF0YSIpLmxlbmd0aD8KW106W10uc2xpY2UuY2FsbCh0aGlzLkVhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJBZCIpKTsiUGxheWxpc3QiPT10aGlzLkVhLmZpcnN0Q2hpbGQubm9kZU5hbWUmJmEuZm9yRWFjaChmdW5jdGlvbihhLGIsYyl7aWYoMT09YS5jaGlsZE5vZGVzLmxlbmd0aClpZihhLnBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09ZS5TYSl0cnl7dmFyIGQ9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoJzxBZCBzZXF1ZW5jZT0iJysoYisxKSsnIj48V3JhcHBlcj48VkFTVEFkVGFnVVJJPjwhW0NEQVRBWycrYS50ZXh0Q29udGVudC50cmltKCkrIl1dXHgzZTwvVkFTVEFkVGFnVVJJPjwvV3JhcHBlcj48L0FkPiIsInRleHQveG1sIik7Y1tiXT1kLmZpcnN0Q2hpbGR9Y2F0Y2goZil7Y1tiXT17fX1lbHNlIGMuc3BsaWNlKGIsMSl9KTt2YXIgYj1bXS5zbGljZS5jYWxsKHRoaXMuRWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6QWRCcmVhayIpKTswPj1iLmxlbmd0aCYmCihiPVtdLnNsaWNlLmNhbGwodGhpcy5FYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWRCcmVhayIpKSk7dmFyIGM9W107Yi5mb3JFYWNoKGZ1bmN0aW9uKGEsYixkKXtpZigic3RhcnQiPT1hLmdldEF0dHJpYnV0ZSgidGltZU9mZnNldCIpJiYicHJlcm9sbCI9PWUuU2F8fCJlbmQiPT1hLmdldEF0dHJpYnV0ZSgidGltZU9mZnNldCIpJiYicG9zdHJvbGwiPT1lLlNhfHx0aGlzLm9yKGEuZ2V0QXR0cmlidXRlKCJ0aW1lT2Zmc2V0IikpfHxsLml1KCkpdHJ5e3ZhciBmPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZtYXA6QWRUYWdVUkkiKTswPj1mLmxlbmd0aCYmKGY9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQWRUYWdVUkkiKSk7dmFyIGg9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoJzxBZCBzZXF1ZW5jZT0iJysoYisxKSsnIj48V3JhcHBlcj48VkFTVEFkVGFnVVJJPjwhW0NEQVRBWycrZlswXS50ZXh0Q29udGVudC50cmltKCkrIl1dXHgzZTwvVkFTVEFkVGFnVVJJPjwvV3JhcHBlcj48L0FkPiIsCiJ0ZXh0L3htbCIpO2RbYl09aC5maXJzdENoaWxkO2MucHVzaChoKX1jYXRjaChnKXtmb3IoYT1bXS5zbGljZS5jYWxsKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkIikpLGI9MDtiPGEubGVuZ3RoO2IrKyljLnB1c2goYVtiXSl9fS5iaW5kKHRoaXMpKTthPWEuY29uY2F0KGMpO3JldHVybiBhPWEuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgic2VxdWVuY2UiKT9OdW1iZXIoYS5nZXRBdHRyaWJ1dGUoInNlcXVlbmNlIikpPE51bWJlcihiLmdldEF0dHJpYnV0ZSgic2VxdWVuY2UiKSk/LTE6MTowfSl9LG9yOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMub3B0aW9ucy5jb250ZW50VmlkZW8sYz10aGlzLm9wdGlvbnMudGltZU9mZnNldERlbHRhfHwxMCxkPTA7aWYoIShhJiZiJiZiLmR1cmF0aW9uJiZiLmN1cnJlbnRUaW1lKSlyZXR1cm4hMTswPD1hLmluZGV4T2YoIiUiKT9kPWIuZHVyYXRpb24vMTAwKnBhcnNlSW50KGEpOjA8PWEuaW5kZXhPZigiOiIpJiYKKDA8PWEuaW5kZXhPZigiLiIpJiYoYT1hLnN1YnN0cmluZygwLGEuaW5kZXhPZigiLiIpKSksYT1hLnNwbGl0KCI6IiksYT1hLnJldmVyc2UoKSxkPXBhcnNlSW50KGFbMF0pKzYwKnBhcnNlSW50KGFbMV0pKzM2MDAqcGFyc2VJbnQoYVsyXSkpO3JldHVybiBkJiZNYXRoLmFicyhkLXBhcnNlSW50KGIuY3VycmVudFRpbWUpKTw9Yz8hMDohMX0sTHI6ZnVuY3Rpb24oYSl7dGhpcy5mdChhKTt0cnl7dGhpcy5FYT1hLnJlc3BvbnNlWE1MLHRoaXMuRWF8fCh0aGlzLkVhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEucmVzcG9uc2VUZXh0LCJ0ZXh0L3htbCIpKX1jYXRjaChiKXt0aGlzLm9hKHRoaXMuUmEody5WZCkpfXRoaXMuVz10aGlzLkFnKCk7dGhpcy5tYz10aGlzLm9mKCk7dGhpcy5rYz10aGlzLkxoKCk7dGhpcy5XLmxlbmd0aD90aGlzLkZjKCk6dGhpcy5vYSh0aGlzLlJhKHcuT2Mse2Vycm9yOnRoaXMuemY/Ri5VZDpGLkdmfSkpfSxNcjpmdW5jdGlvbihhKXt0cnl7dGhpcy5FYXx8Cih0aGlzLkVhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEsInRleHQveG1sIikpfWNhdGNoKGIpe3RoaXMub2EodGhpcy5SYSh3LlZkKSl9dGhpcy5XPXRoaXMuQWcoKTt0aGlzLm1jPXRoaXMub2YoKTt0aGlzLmtjPXRoaXMuTGgoKTt0aGlzLlcubGVuZ3RoP3RoaXMuRmMoKTp0aGlzLm9hKHRoaXMuUmEody5PYyx7ZXJyb3I6dGhpcy56Zj9GLlVkOkYuR2Z9KSl9LElyOmZ1bmN0aW9uKCl7dGhpcy5vYSh0aGlzLlJhKHcuRmYse2RlcHRoOmF9KSl9LEZjOmZ1bmN0aW9uKCl7dGhpcy5VPXRoaXMuVy5zaGlmdCgpO3RoaXMucXIoKT90aGlzLnN1KCk/KGErKyxuZXcgYih0aGlzLHRoaXMuSWcoKSxoLHtBZFN5c3RlbTp0aGlzLlpwKCksdnBhaWQ6dGhpcy5vcHRpb25zLnZwYWlkfSkpOnRoaXMub2EodGhpcy5SYSh3LklmKSk6KGE9MCx0aGlzLlF1KCkmJnRoaXMuVGUodGhpcy5SbygpKSl9LE9lOmZ1bmN0aW9uKCl7dGhpcy5tYz8odGhpcy5tYz0xPHRoaXMuVy5sZW5ndGgsCnRoaXMuVy5sZW5ndGgmJnRoaXMuRmMoKSk6dGhpcy5wYXJlbnQuT2UoKX0sa2g6ZnVuY3Rpb24oKXt0aGlzLmtjPyh0aGlzLmtjPTE8dGhpcy5XLmxlbmd0aCx0aGlzLlcubGVuZ3RoJiZ0aGlzLkZjKCkpOnRoaXMucGFyZW50LmtoKCl9LFF1OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHUoKT90aGlzLm91KCk/ITA6KC0xIT10aGlzLnljKCk/dGhpcy5vYSh0aGlzLlJhKHcuQmYpKTp0aGlzLm9hKHRoaXMuUmEody5qaikpLCExKToodGhpcy5vYSh0aGlzLlJhKHcuT2MsRi5IZikpLCExKX0sVGU6ZnVuY3Rpb24oYSl7dGhpcy5zYXx8KHRoaXMuc2E9IiIpO2EuT2E9YS5PYS5jb25jYXQodGhpcy5LZSgpKTthLnJiPWEucmI/YS5yYjp0aGlzLm1jO2EuamM9YS5qYz9hLmpjOnRoaXMua2M7YS5XYT1hLldhP2EuV2E6LTEhPXRoaXMuc2EuaW5kZXhPZigic21hcnRjbGlwLm5ldCIpJiYhdGhpcy5vcHRpb25zLndnO3RoaXMucGFyZW50LlRlKGEpfSxSbzpmdW5jdGlvbigpe3ZhciBhPW5ldyBTYTsKdGhpcy5zYXx8KHRoaXMuc2E9IiIpO2EuZHVyYXRpb249dGhpcy55YygpO2EuTT10aGlzLkZnKCk7YS5PYj10aGlzLmJxKCk7YS5vcmlnaW49dGhpczthLkE9dGhpcy5ZcCgpO2EuaGY9dGhpcy5ycShhLmR1cmF0aW9uKTthLldhPWEuV2E/YS5XYTotMSE9dGhpcy5zYS5pbmRleE9mKCJzbWFydGNsaXAubmV0IikmJiF0aGlzLm9wdGlvbnMud2c7cmV0dXJuIGF9LG9hOmZ1bmN0aW9uKGIpe3RoaXMuc2F8fCh0aGlzLnNhPSIiKTtiLldhPWIuV2E/Yi5XYTotMSE9dGhpcy5zYS5pbmRleE9mKCJzbWFydGNsaXAubmV0IikmJiF0aGlzLm9wdGlvbnMud2c7dGhpcy5VJiYoYi5PYT1iLmVycm9yLmNvZGUhPXcuQmYuY29kZT9iLk9hLmNvbmNhdCh0aGlzLmNxKCkpOmIuT2EuY29uY2F0KHRoaXMubHEoKSkpO3RoaXMuVy5sZW5ndGg/KHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5RYiYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucGFyZW50LlFiJiZ0aGlzLnBhcmVudC5RYihiKSxhPTAsdGhpcy5GYygpKToKKHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5vYSYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucGFyZW50Lm9hJiZ0aGlzLnBhcmVudC5vYShiKSxhPTApfSxRYjpmdW5jdGlvbihhKXt0aGlzLnBhcmVudC5RYihhKX0scWc6ZnVuY3Rpb24oYSxiKXt0aGlzLm9hKHRoaXMuUmEoYSxiKSl9LFJhOmZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IFRhKGEsYik7Yy5vcmlnaW49dGhpcztyZXR1cm4gY30sc3U6ZnVuY3Rpb24oKXtyZXR1cm4gYTxofSxwdTpmdW5jdGlvbigpe3JldHVybiAwPHRoaXMuRmcoKS5sZW5ndGh9LG91OmZ1bmN0aW9uKCl7cmV0dXJuIDE8dGhpcy55YygpfSxvZjpmdW5jdGlvbigpe3JldHVybiAxPHRoaXMuVy5maWx0ZXIoZnVuY3Rpb24oYSl7dmFyIGI9ITE7YS5nZXRBdHRyaWJ1dGUmJihiPTA8TnVtYmVyKGEuZ2V0QXR0cmlidXRlKCJzZXF1ZW5jZSIpKSk7cmV0dXJuIGJ9KS5sZW5ndGh9LExoOmZ1bmN0aW9uKCl7dmFyIGE9ITE7dGhpcy5XJiYyPD10aGlzLlcubGVuZ3RoJiYKIXRoaXMub2YoKSYmKGE9ITApO3JldHVybiBhfSxmdDpmdW5jdGlvbihhKXt0aGlzLnNhPSJVTktOT1dOIjt0cnl7ZC5wdXNoKHRoaXMuc2E9YS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1VcmwiKSl9Y2F0Y2goYil7dGhpcy5zYT0iVU5LTk9XTiJ9dHJ5e3RoaXMuemY9YS5nZXRSZXNwb25zZUhlYWRlciYmYS5nZXRSZXNwb25zZUhlYWRlcigiWC1Ib21hZC1WcGFpZC1JZ25vcmVkIil9Y2F0Y2goYyl7fX0scXI6ZnVuY3Rpb24oKXtyZXR1cm4gMDx0aGlzLklnKCkubGVuZ3RofSxJZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlKHRoaXMuVSwiVkFTVEFkVGFnVVJJIil9LFpwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmUodGhpcy5VLCJBZFN5c3RlbSIpfSxLZTpmdW5jdGlvbigpe2Zvcih2YXIgYT0iSW1wcmVzc2lvbiBUcmFja2luZyBDbGlja1RyYWNraW5nIEVycm9yIFZpZXdhYmxlIE5vdFZpZXdhYmxlIHZpZXdhYmxlX2ltcHJlc3Npb24gbWVhc3VyYWJsZV9pbXByZXNzaW9uIi5zcGxpdCgiICIpLApiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtbXS5zbGljZS5jYWxsKHRoaXMuVS5nZXRFbGVtZW50c0J5VGFnTmFtZShkKSkuZm9yRWFjaChmdW5jdGlvbihhKXtpZihhJiYhdGhpcy5WZyhhKSl7dmFyIGM9YS5nZXRBdHRyaWJ1dGUoImV2ZW50Iil8fGQudG9Mb3dlckNhc2UoKTtiLnB1c2goe3R5cGU6Yyx1cmw6dGhpcy5pYihhKX0pfX0uYmluZCh0aGlzKSl9cmV0dXJuIGJ9LFZnOmZ1bmN0aW9uKGEpe3JldHVybiBhPyJDb21wYW5pb24iPT1hLm5vZGVOYW1lPyEwOnRoaXMuVmcoYS5wYXJlbnROb2RlKTohMX0sbHE6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLktlKCk7cmV0dXJuIGE9YS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuImltcHJlc3Npb24iPT1hLnR5cGV9KX0sY3E6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLktlKCk7cmV0dXJuIGE9YS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuImVycm9yIj09YS50eXBlfSl9LGJxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWIodGhpcy5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJDbGlja1Rocm91Z2giKVswXSl9LApGZzpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIk1lZGlhRmlsZSIpLGI9W10sYz0wO2M8YS5sZW5ndGg7YysrKWIucHVzaCh7aWQ6YVtjXS5nZXRBdHRyaWJ1dGUoImlkIiksdHlwZTphW2NdLmdldEF0dHJpYnV0ZSgidHlwZSIpLFBhOmFbY10uZ2V0QXR0cmlidXRlKCJiaXRyYXRlIiksd2lkdGg6YVtjXS5nZXRBdHRyaWJ1dGUoIndpZHRoIiksaGVpZ2h0OmFbY10uZ2V0QXR0cmlidXRlKCJoZWlnaHQiKSxUdjphW2NdLmdldEF0dHJpYnV0ZSgiZGVsaXZlcnkiKSx1cmw6dGhpcy5pYihhW2NdKX0pO3ZhciBkPXRoaXMub3B0aW9ucy5QYXx8MUUzO3RyeXt2YXIgaD1iLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4tMSE9YS50eXBlLmluZGV4T2YoIm1wNCIpfSkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBNYXRoLmFicyhkLWEuUGEpLU1hdGguYWJzKGQtYi5QYSl9KSxlPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybi0xPT1hLnR5cGUuaW5kZXhPZigibXA0Iil9KS5zb3J0KGZ1bmN0aW9uKGEsCmIpe3JldHVybiBNYXRoLmFicyhkLWEuUGEpLU1hdGguYWJzKGQtYi5QYSl9KSxiPWguY29uY2F0KGUpfWNhdGNoKGcpe31yZXR1cm4gYn0sWXA6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImFkUGFyYW1ldGVycyIpO2EmJjAhPWEubGVuZ3RofHwoYT10aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkFkUGFyYW1ldGVycyIpKTtmb3IodmFyIGI9IiIsYz0hMSxkPVtdLGI9ITEsaD0iIixlPVtdLGc9IiIsZz0wO2c8YS5sZW5ndGg7ZysrKXtoPWI9dGhpcy5xZChhW2ddKTt0cnl7Yz1KU09OLnBhcnNlKGIpfWNhdGNoKGspe2M9Yn1kLnB1c2goYyk7ZS5wdXNoKGgpfTE8YS5sZW5ndGg/KGI9ZCxnPWgpOihiPWMsZz1lKTtyZXR1cm57QWRQYXJhbWV0ZXJzOmIsT3JpZ2luYWxBZFBhcmFtZXRlcnM6Zy50b1N0cmluZygpfX0seWM6ZnVuY3Rpb24oKXt2YXIgYTt0cnl7cmV0dXJuIGE9dGhpcy5pYih0aGlzLlUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkR1cmF0aW9uIilbMF0pLAphPWEuc3BsaXQoIjoiKSxhPTM2MDAqK2FbMF0rNjAqK2FbMV0rICthWzJdLGlzTmFOKGEpPy0xOmF9Y2F0Y2goYil7cmV0dXJuLTF9fSxycTpmdW5jdGlvbihhKXt2YXIgYj0hMSxjPSExLGQ9ITE7dHJ5e2M9dGhpcy5VLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJMaW5lYXIiKVswXSxkPWMuZ2V0QXR0cmlidXRlKCJza2lwb2Zmc2V0IiksYj1lLld0KGQsYSksMD5iJiYoYj0hMSl9Y2F0Y2goaCl7Yj0hMX1yZXR1cm4gYn0scmU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZhLmdldEVsZW1lbnRzQnlUYWdOYW1lKGIpLmxlbmd0aD90aGlzLmliKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYilbMF0pOiIifSx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5jaGlsZE5vZGVzJiZhLmNoaWxkTm9kZXNbMF0/YS5jaGlsZE5vZGVzWzBdLm5vZGVWYWx1ZToiIn0saWI6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5xZChhKToiIn0scWQ6ZnVuY3Rpb24oYSl7dmFyIGI9CnRoaXMudWUoYSk7YiYmKGI9Yi50cmltKCkpOyFiJiZhLnRleHRDb250ZW50JiYoYj1hLnRleHRDb250ZW50LGI9Yi50cmltKCkpO3JldHVybiBifX19KShjKTt2YXIgVD1jLnZtfHxUO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLiRyPXRoaXMuYVs1XTt0aGlzLnBpPXRoaXMuYVszXTt0aGlzLkNvPXRoaXMuYVs2XTt0aGlzLmVqPXRoaXMuYVsxXTt0aGlzLm5uPXRoaXMuYVs2XTt0aGlzLnFsPXRoaXMuYVs4XTt0aGlzLktpPXRoaXMuYVsxXTt0aGlzLkFpPXRoaXMuYVs4XTt0aGlzLmo9dGhpcy5hWzddfWMuTnE9YjtiLnByb3RvdHlwZT17WnI6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLiRyOnRoaXMub2koYSl9LG9pOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5waTp0aGlzLkJvKGEpfSxCbzpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuQ286dGhpcy5kaihhKX0sCmRqOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5lajp0aGlzLm1uKGEpfSxtbjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMubm46dGhpcy5wbChhKX0scGw6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLnFsOnRoaXMuSmkoYSl9LEppOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5LaTp0aGlzLnppKGEpfSx6aTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuQWk6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBVYT1jLk5xfHxVYSx4Yz1uZXcgVWEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD14Yy5acig0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuZHVyYXRpb249MDt0aGlzLk9hPVtdO3RoaXMuTT1bXTt0aGlzLk9iPSIiO3RoaXMuQT10aGlzLmpjPXRoaXMucmI9ITE7dGhpcy54ZT0KdGhpcy5vcmlnaW49bnVsbDt0aGlzLnllPSIifWMucmw9YjtiLnByb3RvdHlwZT17TW86ZnVuY3Rpb24oKXtmb3IodmFyIGE9ITEsYj0wO2I8dGhpcy5NLmxlbmd0aDtiKyspaWYoMDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24vZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC9lY21hc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQvamF2YXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJ0ZXh0L2pzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC94LWVjbWFzY3JpcHQiKXx8CjA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1qYXZhc2NyaXB0IikpYT0hMDtyZXR1cm4gYX0sanE6ZnVuY3Rpb24oKXtpZighdGhpcy54ZSYmdGhpcy5vcmlnaW4mJnRoaXMub3JpZ2luLkVhKXt2YXIgYT10aGlzLm9yaWdpbi5FYTtpZihhLmdldEVsZW1lbnRzQnlUYWdOYW1lKWZvcih2YXIgYT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJbXByZXNzaW9uIiksYj0iIixjPTA7YzxhLmxlbmd0aDtjKyspKGI9YVtjXS5nZXRBdHRyaWJ1dGUoImlkIikpJiYwPD1iLmluZGV4T2YoIkhPTUFEIikmJih0aGlzLnhlPWFbY10pfXJldHVybiB0aGlzLnhlfSxEZzpmdW5jdGlvbigpe2lmKHRoaXMueWUpcmV0dXJuIHRoaXMueWU7dmFyIGE9IiI7KGE9dGhpcy5qcSgpKSYmYS5nZXRBdHRyaWJ1dGU/KGE9YS5nZXRBdHRyaWJ1dGUoImlkIiksYT1hLnJlcGxhY2UoIkhPTUFEXyIsIiIpLChhPWEucmVwbGFjZSgiSE9NQUQiLCIiKSl8fChhPSJlbXB0eSIpKTphPSJub19pbXBfbm9kZSI7CnJldHVybiB0aGlzLnllPWF9LHVxOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPSExLGI9MDtiPHRoaXMuTS5sZW5ndGg7YisrKWlmKDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24vamF2YXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQvZWNtYXNjcmlwdCIpfHwwPD10aGlzLk1bYl0udHlwZS5pbmRleE9mKCJ0ZXh0L2phdmFzY3JpcHQiKXx8MDw9dGhpcy5NW2JdLnR5cGUuaW5kZXhPZigidGV4dC9qc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1lY21hc2NyaXB0Iil8fDA8PXRoaXMuTVtiXS50eXBlLmluZGV4T2YoInRleHQveC1qYXZhc2NyaXB0IikpYT0KdGhpcy5NW2JdO3JldHVybiBhfX19KShjKTt2YXIgU2E9Yy5ybHx8U2E7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMudW09dGhpcy5hWzldO3RoaXMuSHE9dGhpcy5hWzZdO3RoaXMucXA9dGhpcy5hWzddO3RoaXMubXM9dGhpcy5hWzldO3RoaXMuYWw9dGhpcy5hWzRdO3RoaXMuVnA9dGhpcy5hWzEwXTt0aGlzLmVyPXRoaXMuYVs2XTt0aGlzLmo9dGhpcy5hWzVdfWMucmo9YjtiLnByb3RvdHlwZT17dG06ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnVtOnRoaXMuR3EoYSl9LEdxOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5IcTp0aGlzLnBwKGEpfSxwcDpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMucXA6dGhpcy5scyhhKX0sbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLm1zOnRoaXMuJGsoYSl9LCRrOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5hbDoKdGhpcy5VcChhKX0sVXA6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLlZwOnRoaXMuZHIoYSl9LGRyOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy5lcjp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLmo6YX19fSkoYyk7dmFyIFZhPWMucmp8fFZhLHljPW5ldyBWYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXljLnRtKDQpO3ZhciB3PXtWZDp7dHlwZToiZXJyb3IiLGNvZGU6MTAwLG1lc3NhZ2U6IlhNTCBwYXJzaW5nIGVycm9yIix4YToiWE1MX1BBUlNFX0VSUk9SIn0samo6e3R5cGU6ImVycm9yIixjb2RlOjIwMixtZXNzYWdlOiJWaWRlbyBwbGF5ZXIgZXhwZWN0aW5nIGRpZmZlcmVudCBkdXJhdGlvbi4iLHhhOiJEVVJBVElPTl9FUlJPUiJ9LE9jOnt0eXBlOiJlcnJvciIsY29kZTozMDMsbWVzc2FnZToiTm8gYWRzIFZBU1QgcmVzcG9uc2UgYWZ0ZXIgb25lIG9yIG1vcmUgV3JhcHBlcnMuIEFsc28gaW5jbHVkZXMgbnVtYmVyIG9mIGVtcHR5IFZBU1QgcmVzcG9uc2VzIGZyb20gZmFsbGJhY2suIiwKeGE6IkVNUFRZX1ZBU1QifSxJZjp7dHlwZToiY3JpdGljYWwiLGNvZGU6MzAyLG1lc3NhZ2U6IldyYXBwZXIgbGltaXQgcmVhY2hlZCwgYXMgZGVmaW5lZCBieSB0aGUgdmlkZW8gcGxheWVyLiBUb28gbWFueSBXcmFwcGVyIHJlc3BvbnNlcyBoYXZlIGJlZW4gcmVjZWl2ZWQgd2l0aCBubyBJbkxpbmUgcmVzcG9uc2UuIix4YToiV1JBUFBFUl9MSU1JVF9SRUFDSEVEIn0sRmY6e3R5cGU6ImVycm9yIixjb2RlOjMwMSxtZXNzYWdlOiJUaW1lb3V0IG9mIFZBU1QgVVJJIHByb3ZpZGVkIGluIFdyYXBwZXIgZWxlbWVudCwgb3Igb2YgVkFTVCBVUkkgcHJvdmlkZWQgaW4gYSBzdWJzZXF1ZW50IFdyYXBwZXIgZWxlbWVudC4gSW5jbHVkZXMgcmVxdWVzdCBlcnJvcnMgc3VjaCBhcyBpbnZhbGlkIFVSSSwgdW5yZWFjaGFibGUgb3IgcmVxdWVzdCB0aW1lb3V0IGZvciBVUkksIGFuZCBzZWN1cml0eSBvciBvdGhlciBleGNlcHRpb25zIHJlbGF0ZWQgdG8gcmVxdWVzdGluZyBhIFZBU1QgVVJJLiIsCnhhOiJMT0FEX0VSUk9SIn0sVGQ6e3R5cGU6ImVycm9yIixjb2RlOjQwMyxtZXNzYWdlOiJDb3VsZCBub3QgZmluZCBNZWRpYUZpbGUgdGhhdCBpcyBzdXBwb3J0ZWQgYnkgdGhpcyB2aWRlbyBwbGF5ZXIsIGJhc2VkIG9uIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBNZWRpYUZpbGUgZWxlbWVudC4iLHhhOiJOT19QTEFZQUJMRV9TT1VSQ0VTIn0sS3Y6e3R5cGU6ImVycm9yIixjb2RlOjQwNSxtZXNzYWdlOiJQcm9ibGVtIGRpc3BsYXlpbmcgTWVkaWFGaWxlLiIseGE6Ik1FRElBRklMRV9FUlJPUiJ9LEJmOnt0eXBlOiJlcnJvciIsY29kZTo5OTksbWVzc2FnZToiMSBzZWMgZHVtbXkgYWQiLHhhOiJEVU1NWV9BRCJ9fSxGPXtHZjp7dHlwZToiZXJyb3IiLGNvZGU6MzAzMSxtZXNzYWdlOiJubyBhZHMiLHhhOiJOT19BRFMifSxIZjp7dHlwZToiZXJyb3IiLGNvZGU6MzAzMixtZXNzYWdlOiJubyBtZWRpYWZpbGVzIHNwZWNpZmllZCIseGE6Ik5PX01FRElBRklMRVMifSxMdjp7dHlwZToiZXJyb3IiLApjb2RlOjMwMzMsbWVzc2FnZToibm8gcGxheWFibGUgbWVkaWFmaWxlcyIseGE6Ik5PX1BMQVlBQkxFX01FRElBRklMRVMifSxVZDp7dHlwZToiZXJyb3IiLGNvZGU6MzAzNCxtZXNzYWdlOiJ2cGFpZCBpZ25vcmVkIix4YToiVlBBSURfSUdOT1JFRCJ9fTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5vcz10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs0XX1jLnJuPWI7Yi5wcm90b3R5cGU9e25zOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5vczp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLmo6YX19fSkoYyk7dmFyIFdhPWMucm58fFdhLHpjPW5ldyBXYSgxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPXpjLm5zKDQpOyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKGEsCmIpe3RoaXMuZXJyb3I9YTt0aGlzLm1kPWI7dGhpcy5PYT1bXTt0aGlzLm9yaWdpbj1udWxsfWMuTGo9YjtiLnByb3RvdHlwZT17fX0pKGMpO3ZhciBUYT1jLkxqfHxUYTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5DbT10aGlzLmFbMV07dGhpcy5YcT10aGlzLmFbOV07dGhpcy5Pbj10aGlzLmFbNl07dGhpcy5TcD10aGlzLmFbNV07dGhpcy5Baz10aGlzLmFbOV07dGhpcy5SdD10aGlzLmFbMl07dGhpcy5qPXRoaXMuYVs3XX1jLmNyPWI7Yi5wcm90b3R5cGU9e0JtOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuQ206dGhpcy5XcShhKX0sV3E6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLlhxOnRoaXMuTm4oYSl9LE5uOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Pbjp0aGlzLlJwKGEpfSxScDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuU3A6dGhpcy56ayhhKX0sCnprOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5Bazp0aGlzLlF0KGEpfSxRdDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuUnQ6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBYYT1jLmNyfHxYYSxBYz1uZXcgWGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1BYy5CbSg0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYihhLGIpe3RoaXMuY29uZj1ifHx7fTt0aGlzLmY9YTt0aGlzLmhiPWEuQmcoKTt0aGlzLkc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5HLmlkPWUuYmEoMTApO3RoaXMuRj1DLnBvcCgpO3RoaXMuRnx8KGUudHJhY2soInN0YXRzX2hkX25vVmlkZW9UYWdMZWZ0IiwiIiwhMCksdGhpcy5GPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIiksdGhpcy5GLmlkPQoiYWRYZGlzcGxheSIsdGhpcy5GLnN0eWxlLmRpc3BsYXk9ImJsb2NrIik7dGhpcy5EPXt9O3RoaXMuWmY9ITE7dGhpcy5OYj1bXX1jLnFqPWI7Yi5wcm90b3R5cGU9e1RwOmZ1bmN0aW9uKGEpe3ZhciBiPXt9LGM9ITEsZT0wLGI9MCxnPXt9O2EuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiYoYj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9ImZpeGVkIixlPWIubGVmdCxiPWIudG9wKTtnPXt4OmUseTpifTtnLnBvc2l0aW9uPWM7cmV0dXJuIGd9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuY29uZi51c2VCb3VuZGluZ0NsaWVudFJlY3QpcmV0dXJuIHRoaXMuVHAoYSk7Zm9yKHZhciBiPTAsYz0wLGU9ITEsZz10aGlzLk9xKGEpLGs9e307YTspYis9YS5vZmZzZXRMZWZ0K2EuY2xpZW50TGVmdCxjKz1hLm9mZnNldFRvcCthLmNsaWVudFRvcCxhPWEub2Zmc2V0UGFyZW50O2cmJihhPXZvaWQgMCE9PXdpbmRvdy5wYWdlWU9mZnNldD93aW5kb3cucGFnZVlPZmZzZXQ6KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8CmRvY3VtZW50LmJvZHkucGFyZW50Tm9kZXx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wLGIrPXZvaWQgMCE9PXdpbmRvdy5wYWdlWE9mZnNldD93aW5kb3cucGFnZVhPZmZzZXQ6KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlfHxkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0LGMrPWEsdGhpcy5jb25mLnBvc2l0aW9uSWZGaXhlZCYmKGU9dGhpcy5jb25mLnBvc2l0aW9uSWZGaXhlZCkpO2s9e3g6Yix5OmN9O2UmJihrLnBvc2l0aW9uPWUpO3JldHVybiBrfSxjdTpmdW5jdGlvbigpe3RoaXMuWmY9ITB9LFdoOmZ1bmN0aW9uKCl7dGhpcy5GPUMucG9wKCk7dGhpcy5GfHwoZS50cmFjaygic3RhdHNfaGRfbm9WaWRlb1RhZ0xlZnQiLCIiLCEwKSx0aGlzLkY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmlkZW8iKSx0aGlzLkYuaWQ9ImFkWGRpc3BsYXkiLHRoaXMuRi5zdHlsZS5kaXNwbGF5PSJibG9jayIpfSxwaDpmdW5jdGlvbigpe3RoaXMuZi5wYXVzZSgpOwplLnYoay5mZCx0aGlzLmYudSgpKX0scHQ6ZnVuY3Rpb24oKXt0aGlzLlpmfHwodGhpcy5mLnBsYXkoKSxlLnYoay5nZCx0aGlzLmYudSgpKSl9LEpjOmZ1bmN0aW9uKCl7dmFyIGE9MjE0NzQ4MzY0Nzt0aGlzLmNvbmYuekluZGV4JiYoYT10aGlzLmNvbmYuekluZGV4KTt0aGlzLmYucGF1c2UoKTt0aGlzLkcuc3R5bGUuekluZGV4PWE7dGhpcy5HLnN0eWxlLm1hcmdpbkxlZnQ9ImF1dG8iO3RoaXMuRy5zdHlsZS5tYXJnaW5SaWdodD0iYXV0byI7dGhpcy5HLnN0eWxlLmJhY2tncm91bmRDb2xvcj0iIzAwMDAwMCI7dGhpcy5HLnN0eWxlLmJveFNpemluZz10aGlzLmhiLnN0eWxlLmJveFNpemluZzt0aGlzLkcuc3R5bGUud2lkdGg9dGhpcy5oYi5vZmZzZXRXaWR0aCswKyJweCI7dGhpcy5HLnN0eWxlLmhlaWdodD10aGlzLmhiLm9mZnNldEhlaWdodCswKyJweCI7dGhpcy5GLnN0eWxlLndpZHRoPXRoaXMuaGIub2Zmc2V0V2lkdGgrMCsicHgiO3RoaXMuRi5zdHlsZS5oZWlnaHQ9dGhpcy5oYi5vZmZzZXRIZWlnaHQrCjArInB4Ijt0aGlzLmdldFBvc2l0aW9uKHRoaXMuaGIpO3RoaXMuZi5IYyYmdGhpcy5mLkhjKCk/dGhpcy5mLkJnKCkuYXBwZW5kQ2hpbGQodGhpcy5HKTpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuRyk7d2luZG93LnNldFRpbWVvdXQodGhpcy5UYi5iaW5kKHRoaXMpLDEwKX0sZXhpdEZ1bGxzY3JlZW46ZnVuY3Rpb24oKXt0aGlzLmYuZXhpdEZ1bGxzY3JlZW4oKX0sT3E6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlLGM9ITE7YTspe2lmKGEuc3R5bGUmJigiZml4ZWQiPT1hLnN0eWxlLnBvc2l0aW9ufHxiJiYiZml4ZWQiPT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS5wb3NpdGlvbikpe2M9ITA7YnJlYWt9YT1hLnBhcmVudE5vZGV9cmV0dXJuIGN9LE1wOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0UG9zaXRpb24oYSk7Yi5wb3NpdGlvbj9iLnBvc2l0aW9uPWIucG9zaXRpb246Yi5wb3NpdGlvbj0iYWJzb2x1dGUiO2Iud2lkdGg9CmEub2Zmc2V0V2lkdGg7Yi5oZWlnaHQ9YS5vZmZzZXRIZWlnaHQ7cmV0dXJuIGJ9LFRiOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuTXAodGhpcy5oYik7aWYoYi54IT10aGlzLkQueHx8Yi55IT10aGlzLkQueXx8Yi5wb3NpdGlvbiE9dGhpcy5ELnBvc2l0aW9ufHxiLndpZHRoIT10aGlzLkQud2lkdGh8fGIuaGVpZ2h0IT10aGlzLkQuaGVpZ2h0fHxhKXtpZigwPHRoaXMuRC53aWR0aCYmMDx0aGlzLkQuaGVpZ2h0JiYwPT1iLndpZHRoJiYwPT1iLmhlaWdodCl7dGhpcy53ZSgpO3JldHVybn10aGlzLkQ9Yjt0aGlzLmYuSGMoKT8odGhpcy5HLnN0eWxlLmxlZnQ9IjBweCIsdGhpcy5HLnN0eWxlLnRvcD0iMHB4Iik6KHRoaXMuRy5zdHlsZS5sZWZ0PWIueCsicHgiLHRoaXMuRy5zdHlsZS50b3A9Yi55KyJweCIpO3RoaXMuRy5zdHlsZS53aWR0aD1iLndpZHRoKyJweCI7dGhpcy5HLnN0eWxlLmhlaWdodD1iLmhlaWdodCsicHgiO3RoaXMuRy5zdHlsZS5wb3NpdGlvbj1iLnBvc2l0aW9uOwp0aGlzLkYuc3R5bGUud2lkdGg9Yi53aWR0aCsicHgiO3RoaXMuRi5zdHlsZS5oZWlnaHQ9Yi5oZWlnaHQrInB4Ijtmb3IoYT0wO2E8dGhpcy5OYi5sZW5ndGg7YSsrKXRoaXMuTmJbYV0oe3dpZHRoOmIud2lkdGgsaGVpZ2h0OmIuaGVpZ2h0fSl9ZS5IaCh0aGlzLkcpJiZ3aW5kb3cuc2V0VGltZW91dCh0aGlzLlRiLmJpbmQodGhpcyksMTApfSxZZjpmdW5jdGlvbihhKXt0aGlzLk5ifHwodGhpcy5OYj1bXSk7ImZ1bmN0aW9uIj09dHlwZW9mIGEmJnRoaXMuTmIucHVzaChhKX0sd2U6ZnVuY3Rpb24oKXt0aGlzLkcmJnRoaXMuRy5wYXJlbnROb2RlJiZ0aGlzLkcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCYmdGhpcy5HLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5HKTt0aGlzLkYmJnRoaXMuRi5wYXVzZSYmdGhpcy5GLnBhdXNlKCl9fX0pKGMpO2Zvcih2YXIgWWE9Yy5xanx8WWEsQz1bXSxaYT0wOzEwMD5aYTtaYSsrKXt2YXIgTz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpOwpPLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjtPLmlkPWUuYmEoMTApO08uY29udHJvbHM9ITA7Qy5wdXNoKE8pfXZhciBLPSExLGRhPSExO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIseik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIseik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHopO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIseik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuc3A9dGhpcy5hWzhdO3RoaXMubXA9dGhpcy5hWzRdO3RoaXMuYXI9dGhpcy5hWzJdO3RoaXMuVXM9dGhpcy5hWzhdO3RoaXMueW89dGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbNV19Yy5ZbD1iO2IucHJvdG90eXBlPXtycDpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLnNwOnRoaXMubHAoYSl9LGxwOmZ1bmN0aW9uKGEpe3JldHVybiAzPAphP3RoaXMubXA6dGhpcy4kcShhKX0sJHE6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLmFyOnRoaXMuVHMoYSl9LFRzOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5Vczp0aGlzLnhvKGEpfSx4bzpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMueW86dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciAkYT1jLllsfHwkYSxCYz1uZXcgJGEoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1CYy5ycCg0KTsoZnVuY3Rpb24oYyl7Yy5mbD11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLmVsZW1lbnRJZCxhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGIpO2F8fChiPXRoaXMuZ2V0UmF3UGxheWVyKCkuZ2V0RWxlbWVudElkKCksCmE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYikpO3RoaXMuWShhKTt0aGlzLkZkKGIpO3RoaXMubWcoKX0sRmQ6ZnVuY3Rpb24oYil7dGhpcy5pZHx8KHRoaXMuaWQ9Yil9LG1nOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5JYSgpLGE9dGhpcy52aWRlb1RhZzthfHwoKGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXSl8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdKSxhP3RoaXMuWihhKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubWcoKX0uYmluZCh0aGlzKSwxMDApKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBsYXkoKX0sVmE6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpO2IuaXNQbGF5aW5nJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5pc1BsYXlpbmcmJmIuaXNQbGF5aW5nKCkmJnRoaXMucGF1c2UoKX0sCkFlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4gYi5wYXJhbWV0ZXJzJiYhMT09PWIucGFyYW1ldGVycy5hdXRvcGxheT8hMTohMH0sTzpmdW5jdGlvbigpe3JldHVybiJPb3lhbGEifSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGI/Yi5tdXRlZDohMH0sdTpmdW5jdGlvbigpe3ZhciBiPXt9LGE9dGhpcy52aWRlb1RhZyxjPXRoaXMuSWEoKTtpZihiLnZpZGVvVGFnPWEpYi52aWRlb1RhZ0lkPWEuaWQ7aWYoYi5jb250YWluZXI9YyliLmNvbnRhaW5lcklkPWMuaWQ7Yi5wbGF5ZXI9dGhpcy5nZXRSYXdQbGF5ZXIoKTtyZXR1cm4gYn19KX0pKGMpO3ZhciBhYj1jLmZsfHxhYjsoZnVuY3Rpb24oYyl7Yy5kbD12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9ZWEoKTt0aGlzLk1iPXRoaXMuTWJ8fCExO3RoaXMuUWY9dGhpcy5TZj10aGlzLlJnPXRoaXMuZGE9dGhpcy5zZj0KITE7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5BRFNfRVJST1IsImV4YW1wbGUiLGZ1bmN0aW9uKGEsYil7dGhpcy5JcChhLGIpfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5BRFNfUExBWUVELCJleGFtcGxlIixmdW5jdGlvbigpe3RoaXMuc2Y9ITA7dGhpcy5SZyYmdGhpcy5oZygpfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5QTEFZSU5HLCJleGFtcGxlIixmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFBsYXllcigpLnpiO2EmJmEuVWImJnRoaXMuZ2V0UGxheWVyKCkucGF1c2UoKX0uYmluZCh0aGlzKSwxMDApfS5iaW5kKHRoaXMpKTthLm1iLnN1YnNjcmliZShiLkVWRU5UUy5JTklUSUFMX1BMQVksImV4YW1wbGUiLGZ1bmN0aW9uKCl7dGhpcy5jZCgpO3RoaXMuUmc9ITA7dGhpcy5oZygpfS5iaW5kKHRoaXMpKTt0aGlzLmNnKCl9LApoZzpmdW5jdGlvbigpe2lmKCF0aGlzLk1iKXt0aGlzLmNkKCk7aWYoIXRoaXMuc2YmJiF0aGlzLmNkKCkpcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCksITA7dGhpcy5zZiYmdGhpcy5RZiYmIXRoaXMuU2YmJndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCl9fSxjZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuR2coImFkTWFuYWdlckNvbnRyb2xsZXIiKTtyZXR1cm4gYiYmYi5hZE1hbmFnZXJzJiZiLmFkTWFuYWdlcnNbImdvb2dsZS1pbWEtYWRzLW1hbmFnZXIiXX0sR2c6ZnVuY3Rpb24oYil7Zm9yKHZhciBhPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCksYz0wO2M8YS5tb2R1bGVzLmxlbmd0aDtjKyspe3ZhciBkPWEubW9kdWxlc1tjXTtpZihkLm5hbWU9PT1iKXJldHVybiBkLmluc3RhbmNlfX0sY2c6ZnVuY3Rpb24oKXtpZih0aGlzLmNkKCkpe3ZhciBiPXRoaXMuR2coImFkTWFuYWdlckNvbnRyb2xsZXIiKS5hZE1hbmFnZXJzWyJnb29nbGUtaW1hLWFkcy1tYW5hZ2VyIl07CnRoaXMuU2Y9MDxiLmdldEN1cnJlbnRUaW1lKCk7dGhpcy5RZj1iLlJ2fXRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmNnKCl9LmJpbmQodGhpcyksMTAwKX0sVXY6ZnVuY3Rpb24oYil7cmV0dXJuIGIuaXNBZFBsYXlpbmcmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmlzQWRQbGF5aW5nP2IuZ3coKTohMX0seWM6ZnVuY3Rpb24oYil7cmV0dXJuIGIuZ2V0QWREdXJhdGlvbiYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0QWREdXJhdGlvbj9iLnljKCk6LTF9LG1xOmZ1bmN0aW9uKGIpe3JldHVybiBiLmlzUGxheWluZyYmImZ1bmN0aW9uIj09dHlwZW9mIGIuaXNQbGF5aW5nP2IuaXNQbGF5aW5nKCk6LTF9LElwOmZ1bmN0aW9uKGIsYSl7dGhpcy5NYj1hLm1hdGNoKC9cZCsvKT9wYXJzZUludChhLm1hdGNoKC9cZCsvKVswXSk6MDsxMDA5PT10aGlzLk1ifHwzMDI9PXRoaXMuTWI/dGhpcy5kYT0hMDp0aGlzLm8oImFkZXJyb3IiLHRoaXMuTWIpO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLAoxMDApfSxlZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCk7dGhpcy5kYT8odGhpcy53KCksdGhpcy50YSgpKTpiLkFlKCk/KHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDJFMykpOnRoaXMubXEoYik/KHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDJFMykpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5lZCgpfS5iaW5kKHRoaXMpLDEwMCl9fSl9KShjKTt2YXIgYmI9Yy5kbHx8YmI7KGZ1bmN0aW9uKGMpe2MuZ2w9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxucjpmdW5jdGlvbigpe3dpbmRvdy5PTy52bC5YbS5WbT93aW5kb3cuT08udmwuWG0uVm0uUHYoZnVuY3Rpb24oKXt9KTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMubnIoKX0sMTAwKX0sZzpmdW5jdGlvbigpe3RoaXMuVWE9MTUwMDt2YXIgYj0KZWEoKTtpZihiJiZiLl9faW50ZXJuYWwmJmIuX19pbnRlcm5hbC5wbGF5ZXJzJiYwPGUudGUoYi5fX2ludGVybmFsLnBsYXllcnMpKWZvcih2YXIgYSBpbiBiLl9faW50ZXJuYWwucGxheWVycylpZihiLl9faW50ZXJuYWwucGxheWVycy5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGM9bmV3IGFiKGIuX19pbnRlcm5hbC5wbGF5ZXJzW2FdKTt0aGlzLk4oYyl8fCh0aGlzLlAoYyksKG5ldyBiYihjLHRoaXMuSykpLmcoKSl9dGhpcy5SKCl9fSl9KShjKTt2YXIgY2I9Yy5nbHx8Y2IsZGI9bmV3IGNiKHIpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnlyPXRoaXMuYVszXTt0aGlzLlJrPXRoaXMuYVsyXTt0aGlzLkRqPXRoaXMuYVs2XTt0aGlzLnl0PXRoaXMuYVs5XTt0aGlzLm9tPXRoaXMuYVsxXTt0aGlzLkJ2PXRoaXMuYVs5XTt0aGlzLmhrPXRoaXMuYVs3XTt0aGlzLmNsPXRoaXMuYVs1XTsKdGhpcy5BbT10aGlzLmFbN107dGhpcy5qPXRoaXMuYVs5XX1jLnJyPWI7Yi5wcm90b3R5cGU9e3hyOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy55cjp0aGlzLlFrKGEpfSxRazpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMuUms6dGhpcy5DaihhKX0sQ2o6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLkRqOnRoaXMueHQoYSl9LHh0OmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy55dDp0aGlzLm5tKGEpfSxubTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMub206dGhpcy5BdihhKX0sQXY6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLkJ2OnRoaXMuZ2soYSl9LGdrOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5oazp0aGlzLmJsKGEpfSxibDpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuY2w6dGhpcy56bShhKX0sem06ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5BbTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5qOgphfX19KShjKTt2YXIgZWI9Yy5ycnx8ZWIsQ2M9bmV3IGViKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9Q2MueHIoNCk7KGZ1bmN0aW9uKGMpe2MuYWo9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dGhpcy5xYT0hMTt0aGlzLkpnKCl9LEpnOmZ1bmN0aW9uKCl7dmFyIGI9ITEsYT0hMTt0aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5nZXRGaWd1cmUmJihiPXRoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLmdldEZpZ3VyZSgpKTtifHwoYj10aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5lbGVtZW50KTt0aGlzLmdldFJhd1BsYXllcigpLnBsYXllci5nZXRWaWRlb0VsZW1lbnQmJihhPXRoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLmdldFZpZGVvRWxlbWVudCgpKTtiJiYhYSYmKGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXSk7CmImJmE/KHRoaXMuWShiKSx0aGlzLlooYSkpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5KZygpfS5iaW5kKHRoaXMpLDEwMCl9LHBhdXNlOmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheWVyLnBsYXkoKX0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIuZ2V0Q3VycmVudFRpbWUoKX0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXIuZ2V0RHVyYXRpb24oKX0sTmE6ZnVuY3Rpb24oKXt0aGlzLnRoKCl9LHRoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRDdXJyZW50VGltZSgpOzE+dGhpcy5nZXREdXJhdGlvbigpLWI/dGhpcy5WJiYoMCx0aGlzLlYpKCk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnRoKCl9LmJpbmQodGhpcyksMTAwKX0sCk86ZnVuY3Rpb24oKXtyZXR1cm4iQml0bW92aW4ifX0pfSkoYyk7dmFyIGZiPWMuYWp8fGZiOyhmdW5jdGlvbihjKXtjLiRpPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LGRnOmZ1bmN0aW9uKGIpe3ZhciBhPWIuY29kZSxjPWIubWVzc2FnZTtiLmRhdGEmJihhPWIuZGF0YS5jb2RlLGM9Yi5kYXRhLm1lc3NhZ2UpOzEyMDUhPWEmJig5MDA9PWEmJjA8Yy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImVtcHR5Iik/KHRoaXMudygiZW1wdHkiKSx0aGlzLnRhKCkpOjEwMDk9PWF8fDMwMz09YXx8NDAzPT1hP3RoaXMudGEoKTp0aGlzLnMoKSl9LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2lmKGIuYWRFcnJvckV2ZW50cylmb3IodmFyIGE9MDthPGIuYWRFcnJvckV2ZW50cy5sZW5ndGg7YSsrKXRoaXMuZGcoYi5hZEVycm9yRXZlbnRzKTtiLnBsYXllci5vbigiYWRlcnJvciIsZnVuY3Rpb24oYSl7dGhpcy5kZyhhKX0uYmluZCh0aGlzKSk7CmIucGxheWVyLm9uKCJhZHF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygiYWRxdWFydGlsZSIpfS5iaW5kKHRoaXMpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCkucGxheWVyLmlzUGxheWluZygpP3RoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcyksMTApfX0pfSkoYyk7dmFyIGdiPWMuJGl8fGdiOyhmdW5jdGlvbihjKXtjLmJqPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sd2g6ZnVuY3Rpb24oYil7Yj1uZXcgZmIoYik7Yi5xYT90aGlzLlIoKTp0aGlzLk4oYil8fChiLkZkKE1hdGguY2VpbCgxRTEwKk1hdGgucmFuZG9tKCkpKSx0aGlzLlAoYiksKG5ldyBnYihiLHRoaXMuSykpLmcoKSl9LGc6ZnVuY3Rpb24oKXt0aGlzLkpwfHwodGhpcy5KcD0hMCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzdm06cGxheWVyaW5zdGFuY2UiLGZ1bmN0aW9uKGEpe3RoaXMud2goYS5kZXRhaWwpfS5iaW5kKHRoaXMpKSk7CmlmKHdpbmRvdy5fX3NjaG5lZVZvbk1vcmdlbiYmd2luZG93Ll9fc2NobmVlVm9uTW9yZ2VuLnZpZGVvUGxheWVySW5zdGFuY2VzKWZvcih2YXIgYj0wO2I8d2luZG93Ll9fc2NobmVlVm9uTW9yZ2VuLnZpZGVvUGxheWVySW5zdGFuY2VzLmxlbmd0aDtiKyspdGhpcy53aCh3aW5kb3cuX19zY2huZWVWb25Nb3JnZW4udmlkZW9QbGF5ZXJJbnN0YW5jZXNbYl0pO3RoaXMuUigpfX0pfSkoYyk7dmFyIGhiPWMuYmp8fGhiLFU9bmV3IGhiKHIpO1UuZygpO2M9Y3x8e307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnJ0PXRoaXMuYVs0XTt0aGlzLmlsPXRoaXMuYVs5XTt0aGlzLmV0PXRoaXMuYVs4XTt0aGlzLkpxPXRoaXMuYVs1XTt0aGlzLkFyPXRoaXMuYVsxMF07dGhpcy5xbT10aGlzLmFbMl07dGhpcy5qaz10aGlzLmFbNF07dGhpcy53cT10aGlzLmFbOV07dGhpcy5VaT10aGlzLmFbNF07dGhpcy5Ecz0KdGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbOF19Yy5Jaj1iO2IucHJvdG90eXBlPXtxdDpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMucnQ6dGhpcy5obChhKX0saGw6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmlsOnRoaXMuZHQoYSl9LGR0OmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5ldDp0aGlzLklxKGEpfSxJcTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuSnE6dGhpcy56cihhKX0senI6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLkFyOnRoaXMucG0oYSl9LHBtOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5xbTp0aGlzLmlrKGEpfSxpazpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuams6dGhpcy52cShhKX0sdnE6ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLndxOnRoaXMuVGkoYSl9LFRpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuVWk6dGhpcy5DcyhhKX0sQ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLkRzOnRoaXMuaShhKX0sCmk6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLmo6YX19fSkoYyk7dmFyIGliPWMuSWp8fGliLERjPW5ldyBpYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPURjLnF0KDQpOyhmdW5jdGlvbihjKXtjLlVsPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0UmF3UGxheWVyKCkpO3RoaXMuWShiKTtpZihiKXt2YXIgYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdO2F8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdKTt0aGlzLlooYSl9ZWxzZSB3aW5kb3cuc2V0VGltZW91dCh0aGlzLlMuYmluZCh0aGlzKSwxMDApfSxwYXVzZTpmdW5jdGlvbigpe3RyeXt0Zm1zdWl0ZSgiIyIrdGhpcy5nZXRSYXdQbGF5ZXIoKSkudGZtdmlkZW8oInBhdXNlIil9Y2F0Y2goYil7fX0sCnBsYXk6ZnVuY3Rpb24oKXt0cnl7dGZtc3VpdGUoIiMiK3RoaXMuZ2V0UmF3UGxheWVyKCkpLnRmbXZpZGVvKCJyZXN1bWUiKX1jYXRjaChiKXt0Zm1zdWl0ZSgiIyIrdGhpcy5nZXRSYXdQbGF5ZXIoKSkudGZtdmlkZW8oInBsYXkiKX19LEhjOmZ1bmN0aW9uKCl7dmFyIGI9bTtyZXR1cm4gYiYmYi5ydW5JbnNpZGVDb250YWluZXI/ITA6ITF9LE86ZnVuY3Rpb24oKXtyZXR1cm4iVEZNc3VpdGUifX0pfSkoYyk7dmFyIFY9Yy5VbHx8VjsoZnVuY3Rpb24oYyl7Yy5UbD12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTt4LldjKCIjIitiLCJvbkFkc01hbmFnZXJMb2FkZWQiLGZ1bmN0aW9uKCl7d2luZG93LnNldFRpbWVvdXQodGhpcy53LmJpbmQodGhpcyksMjAwKX0uYmluZCh0aGlzKSk7eC5XYygiIyIrYiwib2JqZWN0IixmdW5jdGlvbihhKXt0aGlzLmhzKGEpfS5iaW5kKHRoaXMpKTsKeC5XYygiIyIrYiwiYWRzTG9hZGVyRmFpbGVkIixmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsImFkc0xvYWRlckZhaWxlZCIpO3RoaXMuSSgpfS5iaW5kKHRoaXMpKTt4LldjKCIjIitiLCJyZXF1ZXN0QWRzRmFpbGVkIixmdW5jdGlvbigpe3RoaXMubygiYWRlcnJvciIsInJlcXVlc3RBZHNGYWlsZWQiKTt0aGlzLkkoKX0uYmluZCh0aGlzKSk7eC5DcSgpfSxoczpmdW5jdGlvbihiKXt2YXIgYT0iIixjO2ZvcihjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSl7YT1pc05hTihiW2NdKT8hMTpiW2NdO2lmKDEwMDk9PWJbY118fDEwMDE9PWJbY118fDMwMz09YltjXXx8NDAzPT1iW2NdKXt0aGlzLncoKTt0aGlzLnRhKCk7cmV0dXJufWZvcih2YXIgZCBpbiBiW2NdKWlmKGJbY10uaGFzT3duUHJvcGVydHkoZCkmJihhPWlzTmFOKGJbY11bZF0pPyExOmJbY11bZF0sMTAwOT09YltjXVtkXXx8MTAwMT09YltjXVtkXXx8MzAzPT1iW2NdW2RdfHw0MDM9PWJbY11bZF0pKXt0aGlzLncoKTsKdGhpcy50YSgpO3JldHVybn19dGhpcy5vKCJhZGVycm9yIixhKTt0aGlzLkkoKX19KX0pKGMpO3ZhciBXPWMuVGx8fFc7KGZ1bmN0aW9uKGMpe2MuVmw9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93LnRmbXN1aXRlKXtmb3IodmFyIGI9W10sYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSxjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10pO2E9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10pO3RoaXMueWQmJihiPWUuVW8oYix0aGlzLnlkKSk7Zm9yKGE9MDthPGIubGVuZ3RoO2ErKyl7dmFyIGQ9YlthXS5pZC5yZXBsYWNlKCJjb250ZW50RWxlbWVudCIsIiIpLGQ9bmV3IFYoZCk7aWYoIXRoaXMuTihkKSl7dGhpcy5QKGQpO3ZhciBmPW5ldyBXKGQsdGhpcy5LKTtmLmcoKX19Zm9yKGE9MDthPGIubGVuZ3RoO2ErKylmb3IoYz0KYlthXTtjLnBhcmVudEVsZW1lbnQ7KXt2YXIgYz1jLnBhcmVudEVsZW1lbnQsZz1jLmdldEF0dHJpYnV0ZSgiaWQiKTtpZihnKXRyeXt0Zm1zdWl0ZSgiIyIrZykudGZtdmlkZW8oInJlc3VtZSIpLHRoaXMueWR8fCh0aGlzLnlkPVtdKSx0aGlzLnlkLnB1c2goYlthXSksZD1uZXcgVihnKSx0aGlzLk4oZCl8fCh0aGlzLlAoZCksZj1uZXcgVyhkLHRoaXMuSyksZi5nKCkpfWNhdGNoKGspe319fXRoaXMuUigpfSxXYzpmdW5jdGlvbihiLGEsYyl7dGhpcy5jYXx8KHRoaXMuY2E9e30pO3RoaXMuY2FbYl18fCh0aGlzLmNhW2JdPXt9KTt0aGlzLmNhW2JdW2FdfHwodGhpcy5jYVtiXVthXT1bXSk7dGhpcy5jYVtiXVthXS5wdXNoKGMpfSx0dTpmdW5jdGlvbihiKXt2YXIgYT1iLnNQbGF5ZXJTZWxlY3RvcjtpZihiKWlmKCF0aGlzLmNhfHx0aGlzLmNhJiYhdGhpcy5jYVthXSl0aGlzLkVjfHwodGhpcy5FYz1bXSksdGhpcy5FYy5wdXNoKGIpLHRoaXMub3QoKSYmKHRoaXMuYWYoKSx0aGlzLmcoKSk7CmVsc2V7dmFyIGM9Im9iamVjdCI7InN0cmluZyI9PT10eXBlb2YgYi5vRXZlbnRUeXBlJiYoYz1iLm9FdmVudFR5cGUpO2lmKHRoaXMuY2FbYV1bY10mJjA8dGhpcy5jYVthXVtjXS5sZW5ndGgpZm9yKHZhciBkPTA7ZDx0aGlzLmNhW2FdW2NdLmxlbmd0aDtkKyspdGhpcy5jYVthXVtjXVtkXShiKX19LENxOmZ1bmN0aW9uKCl7aWYodGhpcy5FYylmb3IodmFyIGI9MDtiPHRoaXMuRWMubGVuZ3RoO2IrKyl7dmFyIGE9dGhpcy5FY1tiXSxjPWEuc1BsYXllclNlbGVjdG9yLGQ9Im9iamVjdCI7InN0cmluZyI9PT10eXBlb2YgYS5vRXZlbnRUeXBlJiYoZD1hLm9FdmVudFR5cGUpO2lmKHRoaXMuY2FbY11bZF0mJjA8dGhpcy5jYVtjXVtkXS5sZW5ndGgpZm9yKHZhciBlPTA7ZTx0aGlzLmNhW2NdW2RdLmxlbmd0aDtlKyspdGhpcy5jYVtjXVtkXVtlXShhKX19LHZpZGVvcGtnSW50ZXJmYWNlOmZ1bmN0aW9uKGIpeyJhdXRvUmVzaXplQ2FsbGJhY2tCZWZvcmUiIT1iLm9FdmVudFR5cGUuaCYmCiJhdXRvUmVzaXplQ2FsbGJhY2tBZnRlciIhPWIub0V2ZW50VHlwZS5oJiZ4LnR1KGIpfX0pfSkoYyk7dmFyIGpiPWMuVmx8fGpiLHg9bmV3IGpiKHIpO2NhKCk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTGs9dGhpcy5hWzFdO3RoaXMuRXA9dGhpcy5hWzZdO3RoaXMuaj10aGlzLmFbNV19Yy5lbz1iO2IucHJvdG90eXBlPXtLazpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTGs6dGhpcy5EcChhKX0sRHA6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLkVwOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuajphfX19KShjKTt2YXIga2I9Yy5lb3x8a2IsRWM9bmV3IGtiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9RWMuS2soNCk7CihmdW5jdGlvbihjKXtjLlhpPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubXV0ZWQ9ITE7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSYXdQbGF5ZXIoKSk7dGhpcy5ZKGIpO3ZhciBhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07YXx8KGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO3RoaXMuWihhKX0scGF1c2U6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5wYXVzZSgpfSl9LHBsYXk6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5wbGF5KCl9KX0sVmE6ZnVuY3Rpb24oKXskKCIjIit0aGlzLmdldFJhd1BsYXllcigpKS5kYXRhKCJtZWRpYXBsYXllciIpLnRoZW4oZnVuY3Rpb24oYil7Yi5pc1BsYXlpbmcoKSYmCmIucGF1c2UoKX0pfSx2YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm11dGVkfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkJpbGRNZWRpYVBsYXllciJ9fSl9KShjKTt2YXIgbGI9Yy5YaXx8bGI7KGZ1bmN0aW9uKGMpe2MuWWk9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7JCgiIyIrYikuZGF0YSgibWVkaWFwbGF5ZXIiKS50aGVuKGZ1bmN0aW9uKGEpe3RoaXMucGxheWVyLm11dGVkPWEuZGF0YS5tdXRlZDthLm9uKCJlcnJvciIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIkVycm9yIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7YS5vbigidGltZXVwZGF0ZSIsZnVuY3Rpb24oKXtpZighYS5pc1BsYXlpbmd8fGEuaXNQbGF5aW5nKCkpYS5pc0FkJiZhLmlzQWQoKT90aGlzLncoKTphLmRhdGEmJmEuZGF0YS5hZHMmJmEuZGF0YS5hZHMudmFzdCYmYS5kYXRhLmFkcy52YXN0LnNyY2VzPwoodGhpcy5vKCJub0FkIiwicGxheWVkIiksdGhpcy5JKCkpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vKCJub0FkIiwicGxheWVkIik7dGhpcy5JKCEwKX0uYmluZCh0aGlzKSwyNTApfS5iaW5kKHRoaXMpKTthLm9uKCJwYXVzZSIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIndhaXRpbmciLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKTthLm9uKCJhZEVycm9yIixmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKTthLm9uKCJBZEVycm9yIixmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKTthLm9uKCJBZExvYWRlZCIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2Eub24oIkFkU3RhcnRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7YS5vbigiQWRWaWRlb1N0YXJ0IixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTthLm9uKCJBZFBsYXlpbmciLGZ1bmN0aW9uKCl7dGhpcy53KCl9LmJpbmQodGhpcykpO2Eub24oIkFkVmlkZW9GaXJzdFF1YXJ0aWxlIiwKZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7YS5vbigiQWRWaWRlb01pZHBvaW50IixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTthLm9uKCJBZFZpZGVvVGhpcmRRdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSl9LmJpbmQodGhpcykpfX0pfSkoYyk7dmFyIG1iPWMuWWl8fG1iOyhmdW5jdGlvbihjKXtjLlppPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm1lZGlhcGxheWVyIik7aWYod2luZG93LmRlJiZ3aW5kb3cuZGUuYmlsZCYmd2luZG93LmRlLmJpbGQubWVkaWFwbGF5ZXImJmImJjA8Yi5sZW5ndGgpZm9yKHZhciBhIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGM9YlthXSxkPSIiO3RyeXtkPWMuZ2V0QXR0cmlidXRlKCJpZCIpfWNhdGNoKGUpe2Q9Yy5pZH1pZihkJiYkKCIjIitkKS5kYXRhKCJtZWRpYXBsYXllciIpKXRyeXt2YXIgZz0KbmV3IGxiKGQpO3RoaXMuTihnKXx8KHRoaXMuUChnKSwobmV3IG1iKGcsdGhpcy5LKSkuZygpKX1jYXRjaChrKXt9fXRoaXMuUigpfSxOOmZ1bmN0aW9uKGIpe3ZhciBhPWIuZ2V0UmF3UGxheWVyKCk7JCgiIyIrYSk7Zm9yKHZhciBjIGluIHRoaXMuTWEpaWYoYT09dGhpcy5NYVtjXS5nZXRSYXdQbGF5ZXIoKSlyZXR1cm4hMDtyZXR1cm4gdGhpcy5NYVtiLmphKCldPyEwOiExfX0pfSkoYyk7dmFyIG5iPWMuWml8fG5iLG9iPW5ldyBuYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5Fbz10aGlzLmFbNF07dGhpcy50dj10aGlzLmFbMV07dGhpcy5mbT10aGlzLmFbNl07dGhpcy5vcD10aGlzLmFbM107dGhpcy5qPXRoaXMuYVsyXX1jLndyPWI7Yi5wcm90b3R5cGU9e0RvOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Fbzp0aGlzLnN2KGEpfSxzdjpmdW5jdGlvbihhKXtyZXR1cm4gMTwKYT90aGlzLnR2OnRoaXMuZW0oYSl9LGVtOmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5mbTp0aGlzLm5wKGEpfSxucDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMub3A6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBwYj1jLndyfHxwYixGYz1uZXcgcGIoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1GYy5Ebyg0KTsoZnVuY3Rpb24oYyl7Yy5Vaz11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPSExO3RoaXMuZ2V0UmF3UGxheWVyKCkuZW52dmFycyYmdGhpcy5nZXRSYXdQbGF5ZXIoKS5lbnZ2YXJzKCk7dGhpcy5nZXRSYXdQbGF5ZXIoKS5jb250YWluZXJJRCYmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSYXdQbGF5ZXIoKS5jb250YWluZXJJRCkpOwpiJiYoYT1iKTt0aGlzLlkoYik7dGhpcy5aKGEpO3RoaXMuaHQodGhpcy5nZXRSYXdQbGF5ZXIoKSxiKTt0aGlzLmdldFJhd1BsYXllcigpfSxwYXVzZTpmdW5jdGlvbigpe30scGxheTpmdW5jdGlvbigpe30saHQ6ZnVuY3Rpb24oYixhKXtiJiZiLnBhdXNlRXZlbnQmJmEuYWRkRXZlbnRMaXN0ZW5lcihiLnBhdXNlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiZ0aGlzLmhhLnBhdXNlJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5wYXVzZSYmdGhpcy5oYS5wYXVzZSgpfS5iaW5kKHRoaXMpKTtiJiZiLnJlc3VtZUV2ZW50JiZhLmFkZEV2ZW50TGlzdGVuZXIoYi5yZXN1bWVFdmVudCxmdW5jdGlvbigpe3RoaXMuaGEmJnRoaXMuaGEucmVzdW1lJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5yZXN1bWUmJnRoaXMuaGEucmVzdW1lKCl9LmJpbmQodGhpcykpO2ImJmIubXV0ZUV2ZW50JiZhLmFkZEV2ZW50TGlzdGVuZXIoYi5tdXRlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiYKdGhpcy5oYS5tdXRlJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5oYS5tdXRlJiZ0aGlzLmhhLm11dGUoKX0uYmluZCh0aGlzKSk7YiYmYi51bm11dGVFdmVudCYmYS5hZGRFdmVudExpc3RlbmVyKGIudW5tdXRlRXZlbnQsZnVuY3Rpb24oKXt0aGlzLmhhJiZ0aGlzLmhhLnVubXV0ZSYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuaGEudW5tdXRlJiZ0aGlzLmhhLnVubXV0ZSgpfS5iaW5kKHRoaXMpKX0sU2c6ZnVuY3Rpb24oYil7dGhpcy5oYT1ifSxPOmZ1bmN0aW9uKCl7cmV0dXJuIk9ubHlIT01BRCJ9fSl9KShjKTt2YXIgcWI9Yy5Va3x8cWI7KGZ1bmN0aW9uKGMpe2MuVGs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKTt0aGlzLmVpPSExfSxnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKSxhPXRoaXMuZ2V0UGxheWVyKCk7Yi5hdXRvc3RhcnQmJiF0aGlzLmVpJiYodGhpcy5JKCksdGhpcy5laT0hMCx0aGlzLnJhKCkpOwphLklhKCkuYWRkRXZlbnRMaXN0ZW5lcihiLnBsYXlFdmVudCxmdW5jdGlvbigpe3RoaXMuSSgpfS5iaW5kKHRoaXMpKX19KX0pKGMpO3ZhciByYj1jLlRrfHxyYjsoZnVuY3Rpb24oYyl7Yy5Waz1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtKXtpZihtLnBsYXllcil7dmFyIGI9bS5wbGF5ZXI7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGIpdHJ5e2I9YigpfWNhdGNoKGEpe2UudHJhY2soIm9ubHlIT01BRENvbmZGYWlsZWQiLCIiLCEwKX1mb3IodmFyIGM9ITEsZD0wO2Q8Yi5sZW5ndGg7ZCsrKWM9bmV3IHFiKGJbZF0pLHRoaXMuTihjKXx8KHRoaXMuUChjKSwobmV3IHJiKGMsdGhpcy5LKSkuZygpKX19ZWxzZSB0aGlzLlIoKX19KX0pKGMpO3ZhciBzYj1jLlZrfHxzYixYPW5ldyBzYihyKTtYLmcoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CnRoaXMueGw9dGhpcy5hWzddO3RoaXMuemo9dGhpcy5hWzNdO3RoaXMud289dGhpcy5hWzddO3RoaXMueWk9dGhpcy5hWzNdO3RoaXMuaj10aGlzLmFbNV19Yy5Ccj1iO2IucHJvdG90eXBlPXt3bDpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMueGw6dGhpcy55aihhKX0seWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnpqOnRoaXMudm8oYSl9LHZvOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMud286dGhpcy54aShhKX0seGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDY8YT90aGlzLnlpOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuajphfX19KShjKTt2YXIgdGI9Yy5Ccnx8dGIsR2M9bmV3IHRiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9R2Mud2woNCk7KGZ1bmN0aW9uKGMpe2MuR209dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSwKUzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCkucGFyZW50Tm9kZTt0aGlzLlkoYik7Yj10aGlzLmdldFJhd1BsYXllcigpO3RoaXMuWihiKTt0aGlzLmlzUGxheWluZz0hMTtiLmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLGZ1bmN0aW9uKCl7dGhpcy5pc1BsYXlpbmc9ITB9LmJpbmQodGhpcykpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGF1c2UoKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheSgpfSx2YTpmdW5jdGlvbigpe3ZhciBiPXRoaXMudmlkZW9UYWc7cmV0dXJuIGI/Yi5tdXRlZDohMH0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5jdXJyZW50VGltZX0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS5kdXJhdGlvbn0sTmE6ZnVuY3Rpb24oKXswPHRoaXMuZ2V0RHVyYXRpb24oKSYmMDx0aGlzLmdldEN1cnJlbnRUaW1lKCkmJgoxLjU+dGhpcy5nZXREdXJhdGlvbigpLXRoaXMuZ2V0Q3VycmVudFRpbWUoKSYmdGhpcy5WPygwLHRoaXMuVikoKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuTmEoKX0uYmluZCh0aGlzKSw0MDApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIldGdjQifX0pfSkoYyk7dmFyIHViPWMuR218fHViOyhmdW5jdGlvbihjKXtjLkZtPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LFJiOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKSxiPWIuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIuaW1hQWRzTG9hZGVyfSxndDpmdW5jdGlvbihiKXtiLmFkZEV2ZW50TGlzdGVuZXIoZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUixmdW5jdGlvbihhKXthPWEuZ2V0RXJyb3IoKTthLmdldEVycm9yQ29kZSgpO3RoaXMuJGF8fCh0aGlzLiRhPVtdKTt0aGlzLiRhLnB1c2goYS5nZXRFcnJvckNvZGUoKSk7MTAwOT09YS5nZXRFcnJvckNvZGUoKXx8CjMwMz09YS5nZXRFcnJvckNvZGUoKXx8NDAzPT1hLmdldEVycm9yQ29kZSgpP3RoaXMudGEoKTp0aGlzLm8oImFkZXJyb3IiLGEuZ2V0RXJyb3JDb2RlKCkpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkc01hbmFnZXJMb2FkZWQiLGZ1bmN0aW9uKCl7dGhpcy5uYz0hMDt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yi5hZGRFdmVudExpc3RlbmVyKCJsb2ciLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKX0sZzpmdW5jdGlvbigpe3RoaXMucygpO3RoaXMuZ2V0UGxheWVyKCk7dGhpcy5BYT90aGlzLmd0KHRoaXMuQWEpOih0aGlzLkFhPXRoaXMuUmIoKSx3aW5kb3cuc2V0VGltZW91dCh0aGlzLmcuYmluZCh0aGlzKSwxMDApKX0sczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCk7aWYoYi5pc1BsYXlpbmcmJjE8Yi5nZXRDdXJyZW50VGltZSgpKXtpZighdGhpcy5BYSl7dGhpcy5JKCk7cmV0dXJufWlmKCF0aGlzLm5jKXt0aGlzLkkoKTtyZXR1cm59Yj0hMDtpZih0aGlzLiRhJiYKdGhpcy4kYS5sZW5ndGgmJjE8dGhpcy4kYS5sZW5ndGgpZm9yKHZhciBhPTA7YTx0aGlzLiRhLmxlbmd0aC0xO2ErKykxMDA5IT10aGlzLiRhW2FdJiYzMDMhPXRoaXMuJGFbYV0mJjQwMyE9dGhpcy4kYVthXSYmKGI9ITEpO2lmKGIpdGhpcy53KCJlbXB0eSIpLHRoaXMudGEoKTtlbHNle3RoaXMuSSgpO3JldHVybn19d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoKX0uYmluZCh0aGlzKSw1MDApfX0pfSkoYyk7dmFyIHZiPWMuRm18fHZiOyhmdW5jdGlvbihjKXtjLkhtPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe3RoaXMuVWE9LTE7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIik7aWYod2luZG93LndmdjRfaHRtbDVfcGxheWVyJiYwPGIubGVuZ3RoKWZvcih2YXIgYSBpbiBiKXt2YXIgYz1uZXcgdWIoYi5pdGVtKGEpKTt0aGlzLk4oYyl8fC0xPT1jLmlkLnNlYXJjaCgidmlkZW9fIil8fCh0aGlzLlAoYyksCihuZXcgdmIoYyx0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIHdiPWMuSG18fHdiLHhiPW5ldyB3YihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5McT10aGlzLmFbN107dGhpcy5Vcj10aGlzLmFbMl07dGhpcy5Hbz10aGlzLmFbNl07dGhpcy52cj10aGlzLmFbOV07dGhpcy5Edj10aGlzLmFbM107dGhpcy56bj10aGlzLmFbMV07dGhpcy5xcz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbN119Yy5Qcz1iO2IucHJvdG90eXBlPXtLcTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuTHE6dGhpcy5UcihhKX0sVHI6ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLlVyOnRoaXMuRm8oYSl9LEZvOmZ1bmN0aW9uKGEpe3JldHVybiA0PGE/dGhpcy5Hbzp0aGlzLnVyKGEpfSx1cjpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMudnI6dGhpcy5DdihhKX0sQ3Y6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8CmE/dGhpcy5Edjp0aGlzLnluKGEpfSx5bjpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuem46dGhpcy5wcyhhKX0scHM6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLnFzOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLmo6YX19fSkoYyk7dmFyIHliPWMuUHN8fHliLEhjPW5ldyB5YigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPUhjLktxKDQpOyhmdW5jdGlvbihjKXtjLkhsPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm10di1wbGF5ZXItY29udGFpbmVyIilbMF07dGhpcy5ZKGIpO3RoaXMuWihiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzBdKTt0aGlzLlVlPSExfSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCk7CndpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpe3RoaXMuV3MoKX0uYmluZCh0aGlzKSw1MDApfSxXczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UG9zaXRpb24oKSxhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiZ0aGlzLlYmJnRoaXMuVigpfSxnZXREdXJhdGlvbjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT0wO2IucGxheWJhY2suZ2V0RHVyYXRpb24mJihhPWIucGxheWJhY2suZ2V0RHVyYXRpb24oKSk7cmV0dXJuIGF9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPTA7Yi5wbGF5YmFjay5nZXRQb3NpdGlvbiYmKGE9Yi5wbGF5YmFjay5nZXRQb3NpdGlvbigpKTtyZXR1cm4gYX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBsYXliYWNrLnBhdXNlKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLlVlJiZ3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLlVlKTsKdGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5YmFjay5wbGF5KCl9LGlzUGxheWluZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7cmV0dXJuIGIucGxheWJhY2smJmIucGxheWJhY2suZ2V0UGxheVN0YXRlPyhiLnBsYXliYWNrLmdldFBsYXlTdGF0ZSgpLCJwbGF5aW5nIj09Yi5wbGF5YmFjay5nZXRQbGF5U3RhdGUoKSk6ITF9LFp0OmZ1bmN0aW9uKCl7dGhpcy5VZT13aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt0aGlzLnBhdXNlKCl9LmJpbmQodGhpcyksMTApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIlJvY2tlcnkifX0pfSkoYyk7dmFyIHpiPWMuSGx8fHpiOyhmdW5jdGlvbihjKXtjLkdsPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSk7dGhpcy5mYz0wfSxnOmZ1bmN0aW9uKCl7dGhpcy5Tcj0xMDt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO3RoaXMuZmN8fCh0aGlzLmZjPTAsYi5hZGRFdmVudExpc3RlbmVyKCJhZEVycm9yIiwKZnVuY3Rpb24oKXt0aGlzLm8oImFkZXJyb3IiKTt0aGlzLnMoKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXt9KSk7d2luZG93LnZpZGVvcGxhemE/KHdpbmRvdy52aWRlb3BsYXphLmJ1aWxkRGF0ZXx8KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpLHdpbmRvdy52aWRlb3BsYXphLmNvcmU/KHdpbmRvdy52aWRlb3BsYXphLmNvcmUuQWRDYWxsTW9kdWxlfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5UcmFja2VyfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5tb2RlbHx8KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpLHdpbmRvdy52aWRlb3BsYXphLmNvcmUucGFyc2V8fCh0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGF6YSIpLAp0aGlzLnMoKSksd2luZG93LnZpZGVvcGxhemEuY29yZS5yZXF1ZXN0fHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSkpOih0aGlzLm8oIm5vZnJhbWV3b3JrIiwidmlkZW9wbGF6YSIpLHRoaXMucygpKSx3aW5kb3cudmlkZW9wbGF6YS52ZXJzaW9uTnVtYmVyfHwodGhpcy5vKCJub2ZyYW1ld29yayIsInZpZGVvcGxhemEiKSx0aGlzLnMoKSkpOih0aGlzLmZjfHx0aGlzLmZjKyssdGhpcy5mYzw9dGhpcy5Tcj8odGhpcy5mYysrLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5nKCl9LmJpbmQodGhpcyksNTAwKSk6KHRoaXMubygibm9mcmFtZXdvcmsiLCJ2aWRlb3BsYXphIiksdGhpcy5zKCkpKX0sczpmdW5jdGlvbigpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nKCk/KHRoaXMuZ2V0UGxheWVyKCkuWnQoKSx0aGlzLkkoKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnMoKX0uYmluZCh0aGlzKSwxMDApfX0pfSkoYyk7CnZhciBBYj1jLkdsfHxBYjsoZnVuY3Rpb24oYyl7Yy5JbD1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJtdHYtcGxheWVyLWNvbnRhaW5lciIpLGE9ITE7YiYmYlswXSYmKGE9YlswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKSkmJmFbMF0mJndpbmRvdy5wbGF5ZXJBcGkmJndpbmRvdy5wbGF5ZXJBcGkucGxheWJhY2smJmImJihiPW5ldyB6Yih3aW5kb3cucGxheWVyQXBpKSx0aGlzLk4oYil8fCh0aGlzLlAoYiksKG5ldyBBYihiLHRoaXMuSykpLmcoKSkpO3RoaXMuUigpfX0pfSkoYyk7dmFyIEJiPWMuSWx8fEJiLENiPW5ldyBCYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5GbD10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbOF19Yy52cD1iO2IucHJvdG90eXBlPQp7RWw6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLkZsOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gOTxhP3RoaXMuajphfX19KShjKTt2YXIgRGI9Yy52cHx8RGIsSWM9bmV3IERiKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9SWMuRWwoNCk7KGZ1bmN0aW9uKGMpe2MuQ2w9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS5wYXJlbnROb2RlLnBhcmVudE5vZGU7dGhpcy5ZKGIpO2I9dGhpcy5nZXRSYXdQbGF5ZXIoKTt0aGlzLlooYik7dGhpcy5pc1BsYXlpbmc9ITE7Yi5hZGRFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIixmdW5jdGlvbigpe3RoaXMuaXNQbGF5aW5nPSEwfS5iaW5kKHRoaXMpKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlKCl9LApwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5KCl9LGdldEN1cnJlbnRUaW1lOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKSxhPSIiO2IuY3VycmVudFRpbWUmJihhPWIuY3VycmVudFRpbWUpO3JldHVybiBhfSxnZXREdXJhdGlvbjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCksYT0wO2IuZHVyYXRpb24mJihhPWIuZHVyYXRpb24pO3JldHVybiBhfSxOYTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0Q3VycmVudFRpbWUoKSxhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiZhJiYxPmEtYj90aGlzLlYoKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuTmEoKX0uYmluZCh0aGlzKSwyMDApfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIlJhZGlhbnRNUCJ9fSl9KShjKTt2YXIgRWI9Yy5DbHx8RWI7KGZ1bmN0aW9uKGMpe2MuQmw9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLmdldFBsYXllcigpLklhKCksYT10aGlzLmdldFBsYXllcigpLnZpZGVvVGFnO2EmJmEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZHN0YXJ0IixmdW5jdGlvbigpe3RoaXMucmEoKTt0aGlzLmdldFBsYXllcigpLmlzUGxheWluZz0hMX0uYmluZCh0aGlzKSk7dGhpcy5nZXRQbGF5ZXIoKTtiLmFkZEV2ZW50TGlzdGVuZXIoInBsYXlpbmciLGZ1bmN0aW9uKCl7dGhpcy5ObygpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkbG9hZGVkIixmdW5jdGlvbigpe3RoaXMudygpfS5iaW5kKHRoaXMpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImFkc3RhcnRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0uYmluZCh0aGlzKSk7Yj10aGlzLnBkKCk7MDxiLmdldEN1cnJlbnRUaW1lKCk/dGhpcy5HcigpOnRoaXMuZ2coKTtiLmF1dG9wbGF5JiZ3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuT2YoKXx8KHRoaXMubygiY29udGVudHBsYXkiKSx0aGlzLnMoITApKX0uYmluZCh0aGlzKSwKMUUzKX0sTm86ZnVuY3Rpb24oKXt0aGlzLk9mKCl8fHRoaXMucyghMCl9LEdyOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wZCgpOyFiLm5hJiZiLlcmJmIuT3YmJmIuUXYmJih0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIiksdGhpcy5zKCkpfSxnZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMucGQoKTtiLmFkc0xvYWRlcj9iLmFkc0xvYWRlci5hZGRFdmVudExpc3RlbmVyKGdvb2dsZS5pbWEuQWRFcnJvckV2ZW50LlR5cGUuQURfRVJST1IsZnVuY3Rpb24oYSl7dmFyIGI7YTp7YT1hLmdldEVycm9yKCk7Zm9yKGIgaW4gYSlpZigibnVtYmVyIj09dHlwZW9mIGFbYl0pe2I9YVtiXTticmVhayBhfWI9dm9pZCAwfTEwMDk9PWJ8fDMwMz09Ynx8NDAzPT1iPyh0aGlzLncoKSx0aGlzLnRhKCkpOih0aGlzLm8oImFkZXJyb3IiLGIpLHRoaXMucygpKX0uYmluZCh0aGlzKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmdnKCl9LmJpbmQodGhpcyksMTAwKX0scGQ6ZnVuY3Rpb24oKXtpZighdGhpcy5uaClmb3IodmFyIGI9Cm0ucGxheWVyYXBpKCksYT10aGlzLmdldFBsYXllcigpLklhKCkuaWQsYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10uaWQ9PWEmJih0aGlzLm5oPWJbY10pO3JldHVybiB0aGlzLm5ofSxodzpmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuaW1hPyFpbWEudmlkZW8uY2xpZW50LmpzVGFnJiYhaW1hLnZpZGVvLmNsaWVudC50YWdnZWQmJiFpbWEudmlkZW8uY2xpZW50LmdldEVEYXRhOiExfSxzOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0UGxheWVyKCkuaXNQbGF5aW5nP2I/dGhpcy5wZCgpLmFkc0xvYWRlcj90aGlzLkkoITApOnRoaXMuSSgpOnRoaXMuSSgpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwKX19KX0pKGMpO3ZhciBGYj1jLkJsfHxGYjsoZnVuY3Rpb24oYyl7Yy5EbD1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXtpZihtJiZtLnBsYXllcmFwaSl7dmFyIGI9bS5wbGF5ZXJhcGkoKTtpZihiLmxlbmd0aCl7Zm9yKHZhciBhPQowO2E8Yi5sZW5ndGg7YSsrKXt2YXIgYz1uZXcgRWIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYlthXS5pZCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pO3RoaXMuTihjKXx8KHRoaXMuUChjKSwobmV3IEZiKGMsdGhpcy5LKSkuZygpKX1yZXR1cm59fXRoaXMuUigpfX0pfSkoYyk7dmFyIEdiPWMuRGx8fEdiLEhiPW5ldyBHYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5lcD10aGlzLmFbMV07dGhpcy51aT10aGlzLmFbMTBdO3RoaXMuSWk9dGhpcy5hWzZdO3RoaXMud3M9dGhpcy5hWzddO3RoaXMueG49dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbMl19Yy5RbD1iO2IucHJvdG90eXBlPXtjcDpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLmVwOnRoaXMudGkoYSl9LHRpOmZ1bmN0aW9uKGEpe3JldHVybiA1PGE/dGhpcy51aTp0aGlzLkhpKGEpfSxIaTpmdW5jdGlvbihhKXtyZXR1cm4gMTA8CmE/dGhpcy5JaTp0aGlzLnZzKGEpfSx2czpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMud3M6dGhpcy53bihhKX0sd246ZnVuY3Rpb24oYSl7cmV0dXJuIDM8YT90aGlzLnhuOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMjxhP3RoaXMuajphfX19KShjKTt2YXIgSWI9Yy5RbHx8SWIsSmM9bmV3IEliKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9SmMuY3AoNCk7KGZ1bmN0aW9uKGMpe2MuRWs9dS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxTOmZ1bmN0aW9uKCl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5wbGF5ZXIuaWQpO0cmJihiPWIuZmlyc3RDaGlsZCk7aWYoYil7dGhpcy5ZKGIpO2lmKGIudGFnTmFtZSl7dmFyIGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXTthfHwoYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXSk7CmF8fChhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImVtYmVkIilbMF0pfWE/dGhpcy5aKGEpOnRoaXMucGEoKX1lbHNlIHRoaXMucGEoKX0sZnc6ZnVuY3Rpb24oKXt2YXIgYj0hMTswPD1lLlNiKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpLmluZGV4T2YoInNwaWVnZWwuZGUiKSYmKGI9ITApO3JldHVybiBifSxwYXVzZTpmdW5jdGlvbigpe2lmKEcpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7d2luZG93Ll9wbGF5LmNvbnRyb2wuaW50ZXJhY3QucGF1c2UoYi5pZCl9ZWxzZSB3aW5kb3cuX3BsYXkuYWRkb25zLnN2bS5zZW5kQ29tbWFuZCgicGF1c2UiKX0scGxheTpmdW5jdGlvbigpe2lmKEcpe3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7d2luZG93Ll9wbGF5LmNvbnRyb2wuaW50ZXJhY3QucGxheShiLmlkKX1lbHNlIHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLnNlbmRDb21tYW5kKCJwbGF5Iil9LFZhOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy52aWRlb1RhZztyZXR1cm4gYiYmIWIucGF1c2VkPwoodGhpcy5wYXVzZSgpLCEwKTohMX0sTzpmdW5jdGlvbigpe3JldHVybiJuZXh0In0sSGM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSWE6ZnVuY3Rpb24oKXt2YXIgYjtHPyhiPXRoaXMuZ2V0UmF3UGxheWVyKCksYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChiLmlkKS5maXJzdENoaWxkKTpiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLmdldFBsYXllckNvbnRhaW5lcigpKTtiIT10aGlzLmNvbnRhaW5lciYmKHRoaXMuY29udGFpbmVyPWIpO3JldHVybiB0aGlzLmNvbnRhaW5lcn19KX0pKGMpO3ZhciBZPWMuRWt8fFk7KGZ1bmN0aW9uKGMpe2MuRGs9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMuV2U9IiI7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtiJiYodGhpcy5XZT1iLmlkKTtHP3dpbmRvdy5fcGxheS5jb25maWcuYWRkQWRkb25MaXN0ZW5lcihmdW5jdGlvbihhKXt2YXIgYj0KYS5wbGF5ZXJDb250YWluZXI7YiYmdGhpcy5XZSYmYiE9dGhpcy5XZXx8ImFkZXJyb3IiIT1hLmV2ZW50fHxlLkJhKCJ0ZWxlNS5kZSIpJiYicG9zdHJvbGwiPT1hLmFkVHlwZXx8KGEuYWRVUkwmJihtLmFkVGFnPWEuYWRVUkwpLHRoaXMubygiYWRlcnJvciIsYS5rdyksdGhpcy5JKCksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnJhKCl9LmJpbmQodGhpcyksMTAwKSl9LmJpbmQodGhpcyksInN2bSIpOndpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLnNldExpc3RlbmVyKGZ1bmN0aW9uKGEpeyJhZGVycm9yIj09YSYmKHRoaXMubygiYWRlcnJvciIpLHRoaXMuSSgpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yYSgpfS5iaW5kKHRoaXMpLDEwMCkpfS5iaW5kKHRoaXMpKX19KX0pKGMpO3ZhciBaPWMuRGt8fFo7KGZ1bmN0aW9uKGMpe2MuRms9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93Ll9wbGF5JiYKd2luZG93Ll9wbGF5LmFkZG9ucyYmd2luZG93Ll9wbGF5LmFkZG9ucy5zdm0pe0c9ImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5fcGxheS5hZGRvbnMuc3ZtLmdldFBsYXllckNvbnRhaW5lcj8hMTohMDt2YXIgYjtpZihHKWZvcih2YXIgYT13aW5kb3cuX3BsYXkuY29udHJvbC5nZXRJbnN0YW5jZXMoKSxjPWEubGVuZ3RoLGQ9MDtkPGM7ZCsrKXtpZihiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFbZF0pKWI9bmV3IFkoYiksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFooYix0aGlzLkspLGIuZygpKX1lbHNlIGlmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQod2luZG93Ll9wbGF5LmFkZG9ucy5zdm0uZ2V0UGxheWVyQ29udGFpbmVyKCkpKWI9bmV3IFkoYiksYi5xYT90aGlzLmFmKCk6dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFooYix0aGlzLkspLGIuZygpKX10aGlzLlIoKX19KX0pKGMpO3ZhciBHLEpiPWMuRmt8fEpiLEtiPW5ldyBKYihoYSk7Yz1jfHwKe307KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXt0aGlzLmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLnhwPXRoaXMuYVs1XTt0aGlzLlFtPXRoaXMuYVs3XTt0aGlzLlNtPXRoaXMuYVs0XTt0aGlzLnNpPXRoaXMuYVs5XTt0aGlzLnZqPXRoaXMuYVs4XTt0aGlzLlhsPXRoaXMuYVs5XTt0aGlzLkV1PXRoaXMuYVsxMF07dGhpcy5ZdD10aGlzLmFbNl07dGhpcy5qPXRoaXMuYVs0XX1jLllvPWI7Yi5wcm90b3R5cGU9e3dwOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy54cDp0aGlzLlBtKGEpfSxQbTpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuUW06dGhpcy5SbShhKX0sUm06ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5TbTp0aGlzLnJpKGEpfSxyaTpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuc2k6dGhpcy51aihhKX0sdWo6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLnZqOnRoaXMuV2woYSl9LFdsOmZ1bmN0aW9uKGEpe3JldHVybiA1PAphP3RoaXMuWGw6dGhpcy5EdShhKX0sRHU6ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLkV1OnRoaXMuWHQoYSl9LFh0OmZ1bmN0aW9uKGEpe3JldHVybiA3PGE/dGhpcy5ZdDp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDI8YT90aGlzLmo6YX19fSkoYyk7dmFyIExiPWMuWW98fExiLEtjPW5ldyBMYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPUtjLndwKDQpOyhmdW5jdGlvbihjKXtjLk5tPXUuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sUzpmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpO2lmKGImJmJbMF0pe2Zvcih2YXIgYT1iPWJbMF07YSYmYS5wYXJlbnROb2RlOyl7aWYoIkJPRFkiPT1hLnBhcmVudE5vZGUubm9kZU5hbWUpe2E9YS5wYXJlbnROb2RlO2JyZWFrfWE9YS5wYXJlbnROb2RlfXRoaXMuWihiKTsKdGhpcy5ZKGEpO3RoaXMuU2Q9ITE7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhkRXZlbnQiLGZ1bmN0aW9uKGEpe2lmKGEuZGV0YWlsKXtpZigiY29udGVudFBsYXllclBsYXkiPT1hLmRldGFpbC5uYW1lKXRyeXt3aW5kb3cuREw4X29uQWRDb21wbGV0ZWQoKSx0aGlzLlNkPSExfWNhdGNoKGIpe31pZigiYWRSZXF1ZXN0Ij09YS5kZXRhaWwubmFtZSl0cnl7dGhpcy5TZHx8KHRoaXMuU2Q9ITAsd2luZG93LkRMOF9vbkFkU3RhcnRlZCgpKX1jYXRjaChjKXt9fX0uYmluZCh0aGlzKSl9ZWxzZSB0aGlzLnBhKCl9LHBhdXNlOmZ1bmN0aW9uKCl7dHJ5e3dpbmRvdy5ETDhfb25Db250ZW50UGF1c2VSZXF1ZXN0ZWQoKX1jYXRjaChiKXt0aGlzLnZpZGVvVGFnLnBhdXNlKCl9fSxwbGF5OmZ1bmN0aW9uKCl7dHJ5e3dpbmRvdy5ETDhfb25Db250ZW50UmVzdW1lUmVxdWVzdGVkKCl9Y2F0Y2goYil7dGhpcy52aWRlb1RhZy5wbGF5KCl9fSxWYTpmdW5jdGlvbigpe2lmKCF0aGlzLnZpZGVvVGFnLnBhdXNlZClyZXR1cm4gdGhpcy5wYXVzZSgpLAohMH0sTzpmdW5jdGlvbigpe3JldHVybiJ4eW1hdGljIn19KX0pKGMpO3ZhciBNYj1jLk5tfHxNYjsoZnVuY3Rpb24oYyl7Yy5NbT12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxpdDpmdW5jdGlvbihiKXtiJiZiLmFkZEV2ZW50TGlzdGVuZXImJihiLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBsZXRlIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJpbXByZXNzaW9uIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJmaXJzdHF1YXJ0aWxlIixmdW5jdGlvbigpe3RoaXMudygpfSksYi5hZGRFdmVudExpc3RlbmVyKCJtaWRwb2ludCIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigidGhpcmRxdWFydGlsZSIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigiYWRzTWFuYWdlckxvYWRlZCIsZnVuY3Rpb24oKXt0aGlzLncoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigiYWRzRXJyb3IiLApmdW5jdGlvbihhKXt0aGlzLmJkKGEpfS5iaW5kKHRoaXMpKSxiLmFkZEV2ZW50TGlzdGVuZXIoImFkRXJyb3IiLGZ1bmN0aW9uKGEpe3RoaXMuYmQoYSl9LmJpbmQodGhpcykpKTtiJiZiLmFkZEFkRXJyb3JMaXN0ZW5lciYmYi5hZGRBZEVycm9yTGlzdGVuZXIoZnVuY3Rpb24oYSl7dGhpcy5iZChhKX0uYmluZCh0aGlzKSl9LGJkOmZ1bmN0aW9uKGIpe3ZhciBhPXt9O2IuZ2V0RXJyb3ImJihiLmdldEVycm9yKCksYT1iLmdldEVycm9yKCkpO2EuZ2V0RXJyb3JDb2RlPyhhLmdldEVycm9yQ29kZSgpLHRoaXMubygiYWRlcnJvciIsYS5nZXRFcnJvckNvZGUoKSksMTAwOT09YS5nZXRFcnJvckNvZGUoKXx8MzAzPT1hLmdldEVycm9yQ29kZSgpfHw0MDM9PWEuZ2V0RXJyb3JDb2RlKCk/dGhpcy53KCk6dGhpcy5JKCkpOih0aGlzLm8oIm5vZnJhbWV3b3JrIiksdGhpcy5JKCkpfSxMZjpmdW5jdGlvbigpe2lmKHdpbmRvdy5fX2RsOF9hZEVycm9yRXZlbnRCdWNrZXQpZm9yKHZhciBiPTA7YjwKd2luZG93Ll9fZGw4X2FkRXJyb3JFdmVudEJ1Y2tldC5sZW5ndGg7YisrKXRoaXMuYmQod2luZG93Ll9fZGw4X2FkRXJyb3JFdmVudEJ1Y2tldFtiXSk7dGhpcy51YSgpfHx3aW5kb3cuc2V0VGltZW91dCh0aGlzLkxmLmJpbmQodGhpcyksMTAwKX0sZzpmdW5jdGlvbigpe3dpbmRvdy5fX2RsOF9hZHNMb2FkZXImJnRoaXMuaXQod2luZG93Ll9fZGw4X2Fkc0xvYWRlcik7dGhpcy5MZigpfX0pfSkoYyk7dmFyIE5iPWMuTW18fE5iOyhmdW5jdGlvbihjKXtjLk9tPXEuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIpe3RoaXMubShiKX0sZzpmdW5jdGlvbigpe2lmKHdpbmRvdy5ETDhfR0xPQkFMUyl7dmFyIGI9bmV3IE1iKHdpbmRvdy5ETDhfR0xPQkFMUyk7Yi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLChuZXcgTmIoYix0aGlzLkspKS5nKCkpfXRoaXMuUigpfX0pfSkoYyk7dmFyIE9iPWMuT218fE9iLFBiPW5ldyBPYihoYSk7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT0KQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLkZyPXRoaXMuYVsyXTt0aGlzLklzPXRoaXMuYVs4XTt0aGlzLlhuPXRoaXMuYVsxXTt0aGlzLlVqPXRoaXMuYVszXTt0aGlzLlpxPXRoaXMuYVs5XTt0aGlzLmo9dGhpcy5hWzZdfWMuRm49YjtiLnByb3RvdHlwZT17RXI6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLkZyOnRoaXMuSHMoYSl9LEhzOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5Jczp0aGlzLlduKGEpfSxXbjpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuWG46dGhpcy5UaihhKX0sVGo6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlVqOnRoaXMuWXEoYSl9LFlxOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5acTp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLmo6YX19fSkoYyk7dmFyIFFiPWMuRm58fFFiLExjPW5ldyBRYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLAoibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1MYy5Fcig0KTsoZnVuY3Rpb24oYyl7Yy5qbT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt0aGlzLnJoPSExO3ZhciBiPXRoaXMuZ2V0UmF3UGxheWVyKCk7aWYoYi52aWRlb01vZGVsKXt2YXIgYT1iLnZpZGVvTW9kZWwuZ2V0KCJwbGF5ZXJFbGVtZW50Iik7aWYoYSl7dGhpcy5ZKGEpO3ZhciBjPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07Y3x8KGM9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO2M/KHRoaXMuWihjKSxiLnZpZGVvTW9kZWwub2JzZXJ2ZSgicG9zaXRpb24iLGZ1bmN0aW9uKGEpe3RoaXMuYXM9YX0uYmluZCh0aGlzKSksYi52aWRlb01vZGVsLm9ic2VydmUoImR1cmF0aW9uIixmdW5jdGlvbihhKXt0aGlzLmR1cmF0aW9uPWF9LmJpbmQodGhpcykpKTp0aGlzLnBhKCl9ZWxzZSB0aGlzLnBhKCl9ZWxzZSB0aGlzLnBhKCl9LApxdzpmdW5jdGlvbigpe30sdmE6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFJhd1BsYXllcigpLGE9MTtyZXR1cm4gYi52aWRlb01vZGVsJiZiLnZpZGVvTW9kZWwuZ2V0JiYoYT1iLnZpZGVvTW9kZWwuZ2V0KCJ2b2x1bWUiKSwwPGEpPyExOiEwfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkudmlkZW9Nb2RlbC5wYXVzZSgpfSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb01vZGVsLnBsYXkoKX0sVmE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdQbGF5ZXIoKS52aWRlb01vZGVsLmdldCgiaXNQYXVzZWQiKT8hMToodGhpcy5wYXVzZSgpLCEwKX0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc30sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kdXJhdGlvbn0sTzpmdW5jdGlvbigpe3JldHVybiJ0djIifSxOYTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkudmlkZW9Nb2RlbC5vYnNlcnZlKCJwb3NpdGlvbiIsCmZ1bmN0aW9uKGIpe3RoaXMuTWQoYil9LmJpbmQodGhpcykpfSxNZDpmdW5jdGlvbihiKXt0aGlzLmdldFJhd1BsYXllcigpO3RoaXMuZ2V0Q3VycmVudFRpbWUoKT5iJiYoYj10aGlzLmdldEN1cnJlbnRUaW1lKCkpO3ZhciBhPXRoaXMuZ2V0RHVyYXRpb24oKTtiJiYwPGImJmEmJjA8YSYmYj49YS0xJiYhdGhpcy5yaCYmKHRoaXMucmg9ITAsdGhpcy5WJiZ0aGlzLlYoKSl9fSl9KShjKTt2YXIgUD1jLmptfHxQOyhmdW5jdGlvbihjKXtjLmltPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LEFhOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZighdGhpcy5wZSlpZih0aGlzLkFifHwodGhpcy5BYj0wKSx0aGlzLkFiKyssMTU8dGhpcy5BYil7aWYod2luZG93LmltYSYmd2luZG93LmltYS5jb21tb24mJndpbmRvdy5pbWEuSW1hU2RrU2V0dGluZ3MmJndpbmRvdy5pbWEuY29tbW9uLmdldFZpZGVvTWV0YWRhdGEmJndpbmRvdy5pbWEuY29tbW9uLnRyaWdnZXJNZWFzdXJhYmxlRXZlbnQpcmV0dXJuIHdpbmRvdy5jYW5SdW5BZHM/CnRoaXMuSXQoKTp0aGlzLnMoITApLCEwO3RoaXMubygibm9mcmFtZXdvcmsiLCJJTUEiKTtiLnZpZGVvTW9kZWwuZ2V0KCJhZFRhZ1VybCIpP3RoaXMucygpOnRoaXMucyghMCl9ZWxzZSBpZihiPWIudmlkZW9Nb2RlbC5nZXQoImFkc0xvYWRlciIpKXt0aGlzLnBlPSEwO3ZhciBhPSJhZEVycm9yIjt3aW5kb3cuZ29vZ2xlJiZnb29nbGUuaW1hJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudCYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7Yi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhKTt0aGlzLmRhfHwodGhpcy5vKCJhZGVycm9yIix0aGlzLlQpLHRoaXMucygpKX0uYmluZCh0aGlzKSl9ZWxzZSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuQWEoKX0uYmluZCh0aGlzKSwxMCl9LHZkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF9LApnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYz0hMDtjfHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGM9ITApOyJudW1iZXIiPT10eXBlb2YgYT8oYi5UPWEsYi5vKCJhZGVycm9yIixhKSk6Yi5vKCJhZGVycm9yIil9cmV0dXJuIGN9Yi5vcmlnaW5hbEV2ZW50JiYoYj1iLm9yaWdpbmFsRXZlbnQpO2lmKGIuZ2V0RXJyb3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmdldEVycm9yKXt2YXIgYz1iLmdldEVycm9yKCk7aWYoYy5nZXRFcnJvckNvZGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLmdldEVycm9yQ29kZSYmYShjLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7cmV0dXJufX1mb3IodmFyIGQgaW4gYilpZihiLmhhc093blByb3BlcnR5KGQpJiZiW2RdJiZiW2RdLmFkRXJyb3ImJmJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJgoiZnVuY3Rpb24iPT10eXBlb2YgYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmYShiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTticmVha319LGc6ZnVuY3Rpb24oKXt0aGlzLlQ9dGhpcy5UfHwhMTt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO3RoaXMuQWEoKTtiLnZpZGVvTW9kZWwub2JzZXJ2ZSgicGxheVN0YXRlIixmdW5jdGlvbihhKXsicGxheWluZyI9PWEmJih0aGlzLmlzUGxheWluZz0hMCl9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJwbGF5TW9kZSIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJjdXJyZW50QWRTZWdtZW50IixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7Yi52aWRlb01vZGVsLm9ic2VydmUoImlzQWRzUGxheWluZyIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9yIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSk7CmIudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9ycyIsZnVuY3Rpb24oKXt9LmJpbmQodGhpcykpO2IudmlkZW9Nb2RlbC5vYnNlcnZlKCJhZEVycm9yc1giLGZ1bmN0aW9uKCl7fS5iaW5kKHRoaXMpKTtiLnZpZGVvTW9kZWwub2JzZXJ2ZSgiTk9OX0VWRU5UIixmdW5jdGlvbigpe30uYmluZCh0aGlzKSl9LHM6ZnVuY3Rpb24oYil7dGhpcy5pc1BsYXlpbmc/dGhpcy5JKGIpOndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwKX19KX0pKGMpO3ZhciBRPWMuaW18fFE7KGZ1bmN0aW9uKGMpe2Mua209cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpO3RoaXMuVWE9LTF9LGc6ZnVuY3Rpb24oKXtpZih3aW5kb3cuaW5zZXJ0ZWRQbGF5ZXIpe3ZhciBiPW5ldyBQKHdpbmRvdy5pbnNlcnRlZFBsYXllcik7Yi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKX1pZih3aW5kb3cuVFYyUGxheWVycyYmCndpbmRvdy5UVjJQbGF5ZXJzLmxlbmd0aClmb3IodmFyIGE9MDthPHdpbmRvdy5UVjJQbGF5ZXJzLmxlbmd0aDthKyspYj1uZXcgUCh3aW5kb3cuVFYyUGxheWVyc1thXSksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKTtlbHNlIGlmKHdpbmRvdy5UVjJQbGF5ZXJzKWZvcihhIGluIHdpbmRvdy5UVjJQbGF5ZXJzKXdpbmRvdy5UVjJQbGF5ZXJzLmhhc093blByb3BlcnR5KGEpJiZ3aW5kb3cuVFYyUGxheWVyc1thXS52aWRlb01vZGVsJiYoYj1uZXcgUCh3aW5kb3cuVFYyUGxheWVyc1thXSksYi5xYXx8dGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IFEoYix0aGlzLkspLGIuZygpKSk7dGhpcy5hZigpO3RoaXMuUigpfX0pfSkoYyk7dmFyIFJiPWMua218fFJiLFNiPW5ldyBSYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy56bD0KdGhpcy5hWzFdO3RoaXMuVHE9dGhpcy5hWzRdO3RoaXMuS3M9dGhpcy5hWzFdO3RoaXMuTHA9dGhpcy5hWzddO3RoaXMuaj10aGlzLmFbNl19Yy5MbT1iO2IucHJvdG90eXBlPXt5bDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuemw6dGhpcy5TcShhKX0sU3E6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlRxOnRoaXMuSnMoYSl9LEpzOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5Lczp0aGlzLktwKGEpfSxLcDpmdW5jdGlvbihhKXtyZXR1cm4gNzxhP3RoaXMuTHA6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBUYj1jLkxtfHxUYixNYz1uZXcgVGIoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1NYy55bCg0KTsoZnVuY3Rpb24oYyl7Yy50az11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LApTOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRSYXdQbGF5ZXIoKS5wbGF5ZXJDb250YWluZXI7dGhpcy5ZKGIpO3ZhciBhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF07YXx8KGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0pO3RoaXMuWihhKTthJiZ0aGlzLlkoYS5wYXJlbnROb2RlKX0sTzpmdW5jdGlvbigpe3JldHVybiJsYW9sYTEifSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5hcGkucGxheSgpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkuYXBpLnBhdXNlKCl9fSl9KShjKTt2YXIgYWE9Yy50a3x8YWE7KGZ1bmN0aW9uKGMpe2Muc2s9di5leHRlbmQoe2w6ZnVuY3Rpb24oYixhKXt0aGlzLm0oYixhKX0sZzpmdW5jdGlvbigpe3RoaXMuT2c9MDt0aGlzLlQ9dGhpcy5UfHwhMTt0aGlzLmdldFBsYXllcigpO3RoaXMuZGE9dGhpcy5CYz10aGlzLkFhPXRoaXMuWWM9ITE7dGhpcy52aD1lLkViKDEwKTsKdGhpcy5YZygpfSxYZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UGxheWVyKCkuZ2V0UmF3UGxheWVyKCk7aWYoYi5zdWJQbGF5ZXImJmIuc3ViUGxheWVyLmFkc0ludGVyZmFjZSYmYi5zdWJQbGF5ZXIuYWRzSW50ZXJmYWNlLmFkc0xvYWRlcilyZXR1cm4gdGhpcy5uYT1iLnN1YlBsYXllci5hZHNJbnRlcmZhY2UuYWRzTG9hZGVyLHRoaXMub2IoKSwhMDt0aGlzLk9nKys7aWYoMTA8dGhpcy5PZyl0aGlzLm8oIm5vZnJhbWV3b3JrIiwiSU1BIiksd2luZG93LmltYSYmd2luZG93LmltYS5jb21tb24mJndpbmRvdy5pbWEuSW1hU2RrU2V0dGluZ3M/dGhpcy5zKCEwKTp0aGlzLnMoKTtlbHNlIHJldHVybiB3aW5kb3cuc2V0VGltZW91dCh0aGlzLlhnLmJpbmQodGhpcyksMTAwKSwhMX0sb2I6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm5hO2lmKGIpe3ZhciBhPSJhZEVycm9yIixjPSJsb2ciO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiYKZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiYmKGE9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7d2luZG93Lmdvb2dsZSYmZ29vZ2xlLmltYSYmZ29vZ2xlLmltYS5BZEV2ZW50JiZnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSYmZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuTE9HJiYoYz1nb29nbGUuaW1hLkFkRXZlbnQuVHlwZS5MT0cpOyJmdW5jdGlvbiIhPT10eXBlb2YgYi5hZGRFdmVudExpc3RlbmVyP3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5vYigpfS5iaW5kKHRoaXMpLDIwKTooYi5hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKX0uYmluZCh0aGlzKSksYi5hZGRFdmVudExpc3RlbmVyKGMsZnVuY3Rpb24oYSl7dGhpcy5nYShhLCEwKTt0aGlzLm8oImFkZXJyb3IiLHRoaXMuVCk7dGhpcy5mYSghMCl9LmJpbmQodGhpcykpKX1lbHNlIHRoaXMudWEoKXx8d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLm9iKCl9LmJpbmQodGhpcyksCjIwKX0sZ2E6ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYShhLGIpe3ZhciBjPSExO2lmKGEpe2lmKDEwMDk9PWF8fDMwMz09YXx8NDAzPT1hKWM9ITA7Y3x8IWEuaW5kZXhPZnx8LTE9PT1hLmluZGV4T2YoIjEwMDkiKSYmLTE9PT1hLmluZGV4T2YoIjMwMyIpJiYtMT09PWEuaW5kZXhPZigiNDAzIil8fChjPSEwKTsibnVtYmVyIj09dHlwZW9mIGEmJihiLlQ9YSxiLm8oImFkZXJyb3IiLGEpKX1yZXR1cm4gY31iLm9yaWdpbmFsRXZlbnQmJihiPWIub3JpZ2luYWxFdmVudCk7aWYoYi5nZXRFcnJvciYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZ2V0RXJyb3Ipe3ZhciBjPWIuZ2V0RXJyb3IoKTtpZihjLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuZ2V0RXJyb3JDb2RlJiZhKGMuZ2V0RXJyb3JDb2RlKCksdGhpcykpe3RoaXMuRGEoKTtyZXR1cm59fWZvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkmJmJbZF0mJmJbZF0uYWRFcnJvciYmYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmCiJmdW5jdGlvbiI9PXR5cGVvZiBiW2RdLmFkRXJyb3IuZ2V0RXJyb3JDb2RlJiZhKGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO2JyZWFrfX0sdmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYX0sRGE6ZnVuY3Rpb24oKXt0aGlzLmRhPSEwfSxmYTpmdW5jdGlvbihiKXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZGE/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKGIpfS5iaW5kKHRoaXMpLDEwMCl9LHM6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTthLmFwaS5wbGF5ZWQmJmEuYXBpLnBsYXllZCgpP3RoaXMuSShiKTp3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMucyhiKX0uYmluZCh0aGlzKSwxMCl9fSl9KShjKTt2YXIgYmE9Yy5za3x8YmE7KGZ1bmN0aW9uKGMpe2MudWs9cS5leHRlbmQoe2w6ZnVuY3Rpb24oYil7dGhpcy5tKGIpfSxnOmZ1bmN0aW9uKCl7dmFyIGI9ITE7CmlmKHdpbmRvdy5sMVBsYXllckluc3RhbmNlJiZ3aW5kb3cubDFQbGF5ZXJJbnN0YW5jZS5sZW5ndGgmJjA8d2luZG93LmwxUGxheWVySW5zdGFuY2UubGVuZ3RoKWZvcih2YXIgYT0wO2E8d2luZG93LmwxUGxheWVySW5zdGFuY2UubGVuZ3RoO2ErKyliPW5ldyBhYSh3aW5kb3cubDFQbGF5ZXJJbnN0YW5jZVswXSksdGhpcy5OKGIpfHwodGhpcy5QKGIpLGI9bmV3IGJhKGIsdGhpcy5LKSxiLmcoKSk7ZWxzZSB3aW5kb3cucGxheWVyJiZ3aW5kb3cucGxheWVyLmFwaSYmd2luZG93LnBsYXllci5sMVBsYXllciYmKGI9bmV3IGFhKHdpbmRvdy5wbGF5ZXIpLHRoaXMuTihiKXx8KHRoaXMuUChiKSxiPW5ldyBiYShiLHRoaXMuSyksYi5nKCkpKTt0aGlzLlIoKX19KX0pKGMpO3ZhciBVYj1jLnVrfHxVYixWYj1uZXcgVWIocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuTnU9dGhpcy5hWzJdOwp0aGlzLmtzPXRoaXMuYVs5XTt0aGlzLmJwPXRoaXMuYVsxXTt0aGlzLnd2PXRoaXMuYVsxMF07dGhpcy5Kaz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbM119Yy5Hbj1iO2IucHJvdG90eXBlPXtNdTpmdW5jdGlvbihhKXtyZXR1cm4gMzxhP3RoaXMuTnU6dGhpcy5qcyhhKX0sanM6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5rczp0aGlzLmFwKGEpfSxhcDpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMuYnA6dGhpcy52dihhKX0sdnY6ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLnd2OnRoaXMuSWsoYSl9LElrOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5Kazp0aGlzLmkoYSl9LGk6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLmo6YX19fSkoYyk7dmFyIFdiPWMuR258fFdiLE5jPW5ldyBXYigxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPQpOYy5NdSg0KTsoZnVuY3Rpb24oYyl7Yy5Xaj11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0hMSxhPSExO3RyeXtiPXRoaXMuZ2V0UmF3UGxheWVyKClbMF0ucGFyZW50Tm9kZSxhPXRoaXMuZ2V0UmF3UGxheWVyKClbMF19Y2F0Y2goYyl7fWImJmE/KHRoaXMuWShiKSx0aGlzLlooYSksdGhpcy5nZXRSYXdQbGF5ZXIoKSk6dGhpcy5wYSgpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkuY3NzKCJkaXNwbGF5Iiwibm9uZSIpfSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5nZXRSYXdQbGF5ZXIoKS5jc3MoImRpc3BsYXkiLCJibG9jayIpfSxPOmZ1bmN0aW9uKCl7cmV0dXJuIkdBTlZpZGVvIn19KX0pKGMpO3ZhciBYYj1jLldqfHxYYjsoZnVuY3Rpb24oYyl7Yy5Waj12LmV4dGVuZCh7bDpmdW5jdGlvbihiLGEpe3RoaXMubShiLGEpfSxnOmZ1bmN0aW9uKCl7dGhpcy5mZygpfSxmZzpmdW5jdGlvbihiKXt3aW5kb3cuR0FOX1ZpZGVvfHwKKGI/KHRoaXMubygibm9mcmFtZXdvcmsiLCJJTUEiKSx0aGlzLkkoKSk6d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmZnKCEwKX0uYmluZCh0aGlzKSwxMDApKX19KX0pKGMpO3ZhciBZYj1jLlZqfHxZYjsoZnVuY3Rpb24oYyl7Yy5Yaj1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LGc6ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2FtZSIpO2lmKGImJiJESVYiPT1iLm5vZGVOYW1lJiZ3aW5kb3cudmlkZW9hZF9nYW5fc3RhcnQmJndpbmRvdy4kJiZ3aW5kb3cuJCgiZGl2I2dhbWUiKSl7Yj1uZXcgWGIod2luZG93LiQoImRpdiNnYW1lIikpO2lmKGIucWEpe3RoaXMuUigpO3JldHVybn1pZighdGhpcy5OKGIpKXt0aGlzLlAoYik7KG5ldyBZYihiLHRoaXMuSykpLmcoKTt0aGlzLlIoKTtyZXR1cm59fXRoaXMuUigpfX0pfSkoYyk7dmFyIFpiPWMuWGp8fFpiLCRiPW5ldyBaYihyKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPQpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMueGo9dGhpcy5hWzldO3RoaXMuYW89dGhpcy5hWzNdO3RoaXMuR3Y9dGhpcy5hWzVdO3RoaXMuaj10aGlzLmFbNV19Yy5NcT1iO2IucHJvdG90eXBlPXt3ajpmdW5jdGlvbihhKXtyZXR1cm4gNTxhP3RoaXMueGo6dGhpcy4kbihhKX0sJG46ZnVuY3Rpb24oYSl7cmV0dXJuIDQ8YT90aGlzLmFvOnRoaXMuRnYoYSl9LEZ2OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuR3Y6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBhYz1jLk1xfHxhYyxPYz1uZXcgYWMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1PYy53aig0KTsoZnVuY3Rpb24oYyl7Yy5raT11LmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFM6ZnVuY3Rpb24oKXt2YXIgYj0KdGhpcy5nZXRSYXdQbGF5ZXIoKS5nZXRXcmFwcGVyKCk7Yj8odGhpcy5ZKGIpLChiPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIilbMF0pP3RoaXMuWihiKTp0aGlzLnBhKCkpOnRoaXMucGEoKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLmdldFJhd1BsYXllcigpLnBhdXNlVmlkZW8oKX0scGxheTpmdW5jdGlvbigpe3RoaXMuZ2V0UmF3UGxheWVyKCkucGxheVZpZGVvKCl9LE86ZnVuY3Rpb24oKXtyZXR1cm4iQVYifX0pfSkoYyk7dmFyIGJjPWMua2l8fGJjOyhmdW5jdGlvbihjKXtjLmppPXYuZXh0ZW5kKHtsOmZ1bmN0aW9uKGIsYSl7dGhpcy5tKGIsYSl9LGc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpO2Iub24oImFkRXJyb3IiLGZ1bmN0aW9uKCl7d2luZG93LnNldFRpbWVvdXQodGhpcy5zLmJpbmQodGhpcyksMTAwKX0uYmluZCh0aGlzKSk7Yi5vbigiYWRGcmFtZXdvcmtOb3RBdmFpbGFibGUiLGZ1bmN0aW9uKCl7dGhpcy5zKCl9LmJpbmQodGhpcykpOwp0aGlzLmhlKCk7dGhpcy5iZygpfSxnYTpmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9ITE7aWYoYSl7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYz0hMDtjfHwhYS5pbmRleE9mfHwtMT09PWEuaW5kZXhPZigiMTAwOSIpJiYtMT09PWEuaW5kZXhPZigiMzAzIikmJi0xPT09YS5pbmRleE9mKCI0MDMiKXx8KGM9ITApOyJudW1iZXIiPT10eXBlb2YgYSYmKGIuVD1hLGIubygiYWRlcnJvciIsYSkpfXJldHVybiBjfWIub3JpZ2luYWxFdmVudCYmKGI9Yi5vcmlnaW5hbEV2ZW50KTtpZihiLmdldEVycm9yJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5nZXRFcnJvcil7dmFyIGM9Yi5nZXRFcnJvcigpO2lmKGMuZ2V0RXJyb3JDb2RlJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5nZXRFcnJvckNvZGUmJmEoYy5nZXRFcnJvckNvZGUoKSx0aGlzKSl7dGhpcy5EYSgpO3JldHVybn19Zm9yKHZhciBkIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSYmYltkXSYmYltkXS5hZEVycm9yJiYKYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSYmImZ1bmN0aW9uIj09dHlwZW9mIGJbZF0uYWRFcnJvci5nZXRFcnJvckNvZGUmJmEoYltkXS5hZEVycm9yLmdldEVycm9yQ29kZSgpLHRoaXMpKXt0aGlzLkRhKCk7YnJlYWt9fSx2ZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhfSxEYTpmdW5jdGlvbigpe3RoaXMuZGE9ITA7dGhpcy53KCJlbXB0eSB2YXN0Iil9LGJnOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRQbGF5ZXIoKS5nZXRSYXdQbGF5ZXIoKTtpZihiLmdldFNlbGVjdGVkQWRIYW5kbGVyKWlmKChiPWIuZ2V0U2VsZWN0ZWRBZEhhbmRsZXIoKSkmJmIuYWRzTG9hZGVyKWZvcih2YXIgYT0wO2E8Yi5hZHNMb2FkZXIubGVuZ3RoO2ErKyl7dmFyIGM9ImFkRXJyb3IiO3dpbmRvdy5nb29nbGUmJmdvb2dsZS5pbWEmJmdvb2dsZS5pbWEuQWRFcnJvckV2ZW50JiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlJiZnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SJiYKKGM9Z29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUik7Yi5hZHNMb2FkZXJbYV0uYWRkRXZlbnRMaXN0ZW5lcihjLGZ1bmN0aW9uKGEpe2EuZ2V0RXJyb3ImJihhPWEuZ2V0RXJyb3IoKSk7dmFyIGI9ITE7aWYoMTAwOT09YXx8MzAzPT1hfHw0MDM9PWEpYj0hMDtpZighYilmb3IodmFyIGMgaW4gYSl7aWYoYVtjXSYmYVtjXS5pbmRleE9mJiYoLTEhPWFbY10uaW5kZXhPZigiMTAwOSIpfHwtMSE9YVtjXS5pbmRleE9mKCIzMDMiKXx8LTEhPWFbY10uaW5kZXhPZigiNDAzIikpKXtiPSEwO2JyZWFrfWlmKGFbY10mJigxMDA5PT1hW2NdfHwzMDM9PWFbY118fDQwMz09YVtjXSkpe2I9ITA7YnJlYWt9fWI/KHRoaXMudygpLHRoaXMudGEoKSk6dGhpcy5zKCl9LmJpbmQodGhpcykpfWVsc2Ugd2luZG93LnNldFRpbWVvdXQodGhpcy5iZy5iaW5kKHRoaXMpLDUwKTtlbHNlIHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuaGUuYmluZCh0aGlzKSwxMDApfSxoZTpmdW5jdGlvbigpe2lmKCF0aGlzLnVhKCkpe3ZhciBiPQp0aGlzLmdldFBsYXllcigpLmdldFJhd1BsYXllcigpOyJwbGF5aW5nIj09Yi5nZXRQbGF5U3RhdGUoKT9iLmdldEFkSW5mbygpPyh3aW5kb3cuc2V0VGltZW91dCh0aGlzLnJhLmJpbmQodGhpcyksMTApLHRoaXMudygpKTpiLl9wbGF5ZXJPcHRpb25zJiZiLl9wbGF5ZXJPcHRpb25zLnBsYXlBZHZlcnRpc2VtZW50c3x8Yi5fYWRSZWdpc3RlcmVkP3RoaXMucygpOnRoaXMucyghMCk6d2luZG93LnNldFRpbWVvdXQodGhpcy5oZS5iaW5kKHRoaXMpLDEwMCl9fSxzOmZ1bmN0aW9uKGIpe3dpbmRvdy5zZXRUaW1lb3V0KHRoaXMucmEuYmluZCh0aGlzKSwxRTQpO3RoaXMuSShiKX19KX0pKGMpO3ZhciBjYz1jLmppfHxjYzsoZnVuY3Rpb24oYyl7Yy5saT1xLmV4dGVuZCh7bDpmdW5jdGlvbihiKXt0aGlzLm0oYil9LFhhOmZ1bmN0aW9uKGIpe2I9bmV3IGJjKGIpO2IucWE/dGhpcy5SKCk6dGhpcy5OKGIpfHwodGhpcy5QKGIpLChuZXcgY2MoYix0aGlzLkspKS5nKCkpfSxnOmZ1bmN0aW9uKCl7aWYod2luZG93LnNyYXZ2cGxQbGF5ZXJJbnN0YW5jZXMpZm9yKHZhciBiPQowO2I8d2luZG93LnNyYXZ2cGxQbGF5ZXJJbnN0YW5jZXMubGVuZ3RoO2IrKyl0aGlzLlhhKHdpbmRvdy5zcmF2dnBsUGxheWVySW5zdGFuY2VzW2JdKTtlbHNlIHdpbmRvdy5zZXR1cFBsYXllckVsZW1lbnQ/dGhpcy5YYSh3aW5kb3cuc2V0dXBQbGF5ZXJFbGVtZW50KTp0aGlzLlIoKX19KX0pKGMpO3ZhciBkYz1jLmxpfHxkYyxlYz1uZXcgZGMocik7Yz1jfHx7fTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMuSW49dGhpcy5hWzNdO3RoaXMuU2o9dGhpcy5hWzJdO3RoaXMuVm49dGhpcy5hWzldO3RoaXMud2k9dGhpcy5hWzRdO3RoaXMuUmk9dGhpcy5hWzNdO3RoaXMubW09dGhpcy5hWzZdO3RoaXMuJGw9dGhpcy5hWzFdO3RoaXMua289dGhpcy5hWzldO3RoaXMuaj10aGlzLmFbM119Yy5ncz1iO2IucHJvdG90eXBlPXtIbjpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuSW46dGhpcy5SaihhKX0sClJqOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuU2o6dGhpcy5VbihhKX0sVW46ZnVuY3Rpb24oYSl7cmV0dXJuIDg8YT90aGlzLlZuOnRoaXMudmkoYSl9LHZpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy53aTp0aGlzLlFpKGEpfSxRaTpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMuUmk6dGhpcy5sbShhKX0sbG06ZnVuY3Rpb24oYSl7cmV0dXJuIDE8YT90aGlzLm1tOnRoaXMuWmwoYSl9LFpsOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy4kbDp0aGlzLmpvKGEpfSxqbzpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMua286dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiA2PGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBmYz1jLmdzfHxmYyxQYz1uZXcgZmMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1QYy5Ibig0KTtjPWN8fHt9OwooZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuWmc9dGhpcy5haD10aGlzLiRnPSExO3RoaXMuQWQ9W107dGhpcy4kZT17R0FOVmlkZW86InVuZGVmaW5lZCI9PT10eXBlb2YgJGI/bnVsbDokYixsYW9sYTFQbGF5ZXI6InVuZGVmaW5lZCI9PT10eXBlb2YgVmI/bnVsbDpWYixWaWRlb0pTOiJ1bmRlZmluZWQiPT09dHlwZW9mIEJhP251bGw6QmEsYml0bW92aW46InVuZGVmaW5lZCI9PT10eXBlb2YgVT9udWxsOlUsb3ZWaWRlbzoidW5kZWZpbmVkIj09PXR5cGVvZiBHYT9udWxsOkdhLFJhZGlhbnRNUDoidW5kZWZpbmVkIj09PXR5cGVvZiBIYj9udWxsOkhiLGp3OiJ1bmRlZmluZWQiPT09dHlwZW9mIHdhP251bGw6d2EsdHYyOiJ1bmRlZmluZWQiPT09dHlwZW9mIFNiP251bGw6U2IsdGZtc3VpdGVQbGF5ZXI6InVuZGVmaW5lZCI9PT10eXBlb2YgeD9udWxsOngsbmV4dFBsYXllcjoidW5kZWZpbmVkIj09PXR5cGVvZiBLYj9udWxsOktiLHh5bWF0aWNQbGF5ZXI6InVuZGVmaW5lZCI9PT0KdHlwZW9mIFBiP251bGw6UGIsYmlsZE1lZGlhUGxheWVyOiJ1bmRlZmluZWQiPT09dHlwZW9mIG9iP251bGw6b2IsT295YWxhOiJ1bmRlZmluZWQiPT09dHlwZW9mIGRiP251bGw6ZGIsUm9ja2VyeToidW5kZWZpbmVkIj09PXR5cGVvZiBDYj9udWxsOkNiLGluUmVhZDoidW5kZWZpbmVkIj09PXR5cGVvZiBMYT9udWxsOkxhLHdmdjQ6InVuZGVmaW5lZCI9PT10eXBlb2YgeGI/bnVsbDp4YixBVlBsYXllckRldGVjdGlvbjoidW5kZWZpbmVkIj09PXR5cGVvZiBlYz9udWxsOmVjLE9ubHlIT01BRDoidW5kZWZpbmVkIj09PXR5cGVvZiBYP251bGw6WH19Yy50bD1iO2IucHJvdG90eXBlPXtnOmZ1bmN0aW9uKCl7dmFyIGE9W10sYT1hLmxlbmd0aD90aGlzLm9xKGEpOltdLGI7dGhpcy5haD0hMDtpZihhLmxlbmd0aCl7dGhpcy4kZz0hMDtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyliPWFbY10sdGhpcy5BaChiKX1lbHNlIGZvcihjIGluIHRoaXMuJGUpe2lmKHRoaXMuWmcpYnJlYWs7CmI9dGhpcy4kZVtjXTt0aGlzLnZmKGIpJiYodGhpcy5BZC5wdXNoKGIpLHRoaXMuQWgoYikpfX0sdmY6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEgaW5zdGFuY2VvZiBxPyEwOiExfSxvcTpmdW5jdGlvbihhKXt2YXIgYj1bXSxjO2lmKCFhfHwhYS5sZW5ndGgpcmV0dXJuIGI7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspYz1hW2VdLGM9dGhpcy4kZVtjXSx0aGlzLnZmKGMpJiZiLnB1c2goYyk7cmV0dXJuIGJ9LEFoOmZ1bmN0aW9uKGEpe3RoaXMudmYoYSkmJmEuZygpfSxhdTpmdW5jdGlvbihhKXtpZihhJiZhIGluc3RhbmNlb2YgdSYmIXRoaXMuJGcpZm9yKHRoaXMuWmc9ITAsYT0wO2E8dGhpcy5BZC5sZW5ndGg7YSsrKXRoaXMuQWRbYV0uSGImJndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5BZFthXS5IYil9fX0pKGMpO3ZhciBnYz1jLnRsfHxnYyxOPW5ldyBnYztOLmcoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CnRoaXMueHU9dGhpcy5hWzZdO3RoaXMuS2o9dGhpcy5hWzZdO3RoaXMuWm09dGhpcy5hWzFdO3RoaXMuR2k9dGhpcy5hWzEwXTt0aGlzLkd1PXRoaXMuYVsyXTt0aGlzLllyPXRoaXMuYVs1XTt0aGlzLlJxPXRoaXMuYVsxMF07dGhpcy5qPXRoaXMuYVsyXX1jLlp1PWI7Yi5wcm90b3R5cGU9e3d1OmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMueHU6dGhpcy5KaihhKX0sSmo6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLktqOnRoaXMuWW0oYSl9LFltOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5abTp0aGlzLkZpKGEpfSxGaTpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuR2k6dGhpcy5GdShhKX0sRnU6ZnVuY3Rpb24oYSl7cmV0dXJuIDc8YT90aGlzLkd1OnRoaXMuWHIoYSl9LFhyOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuWXI6dGhpcy5RcShhKX0sUXE6ZnVuY3Rpb24oYSl7cmV0dXJuIDU8YT90aGlzLlJxOnRoaXMuaShhKX0saTpmdW5jdGlvbihhKXtyZXR1cm4gMjwKYT90aGlzLmo6YX19fSkoYyk7dmFyIGhjPWMuWnV8fGhjLFFjPW5ldyBoYygxLG5ldyBEYXRlLDIsTWF0aC5yYW5kb20oKSwidHJ1ZSIsbmF2aWdhdG9yLCJsLWtleSIsITEsTWF0aC5hYnMoLTEpLCJ0ZiIsIlooVFREWlRSUiIpO3dpbmRvdy5EPVFjLnd1KDQpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oYyl7aWYoYy5lcnJvciBpbnN0YW5jZW9mIFJlZmVyZW5jZUVycm9yKXt2YXIgYj1jLmZpbGVuYW1lP2MuZmlsZW5hbWU6IiI7aWYoLTEhPWIuaW5kZXhPZigiaG9tYWQiKXx8LTEhPWIuaW5kZXhPZigiaGQtbWFpbiIpKWI9Yy5tZXNzYWdlP2MubWVzc2FnZToiIixjPWMuZXJyb3Iuc3RhY2s/Yy5lcnJvci5zdGFjazoiIiwtMSE9Yi5pbmRleE9mKCJpcyBub3QgZGVmaW5lZCIpPyhjPWIuc3Vic3RyaW5nKGIuaW5kZXhPZigiOiIpKzEsYi5pbmRleE9mKCJpcyBub3QiKS0xKSxlLndjKGsuUnUpLGUudHJhY2soInN0YXRzX2hkX3ZhcmRlbGV0ZWQiLGMsCiEwKSk6LTEhPWMuaW5kZXhPZigic2V0QCIpJiYoZS53YyhrLmVzKSxlLnRyYWNrKCJzdGF0c19oZF92YXJub3RzZXQiLCIiLCEwKSl9fSk7dmFyIEU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7RS53aWR0aD0xO0UuaGVpZ2h0PTE7RS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJwbXRtdnMiKTtFLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoRSk7dmFyIFJjPUUuY29udGVudFdpbmRvdy5zZXRJbnRlcnZhbC5iaW5kKHdpbmRvdyksa2M9RS5jb250ZW50V2luZG93LnNldFRpbWVvdXQuYmluZCh3aW5kb3cpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoRSk7dmFyIEk9bmV3IEosbT0hMTtJLmlhKCk7SS5UZygpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKEkuaWEoKSxmdW5jdGlvbihjKXttfHwobT1jLmRldGFpbCl9LCExKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihJLlRnKCksZnVuY3Rpb24oYyl7bXx8KG09Yy5kZXRhaWwpfSwhMSk7CkkuaWEoKTt2YXIgU2M9UmMoZnVuY3Rpb24oKXtlLnZnKHdpbmRvdyxJLmZyKCkse2lkOlNjfSl9LDUwMCksamE9ZS5iYSgxMCk7ZmEoKTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy50aj10aGlzLmFbNF07dGhpcy56dj10aGlzLmFbMl07dGhpcy5waj10aGlzLmFbOF07dGhpcy5DcD10aGlzLmFbOF07dGhpcy5aaz10aGlzLmFbNl07dGhpcy5QbD10aGlzLmFbM107dGhpcy5Iaj10aGlzLmFbN107dGhpcy5saz10aGlzLmFbMTBdO3RoaXMuaj10aGlzLmFbM119Yy5ydj1iO2IucHJvdG90eXBlPXtzajpmdW5jdGlvbihhKXtyZXR1cm4gMTxhP3RoaXMudGo6dGhpcy55dihhKX0seXY6ZnVuY3Rpb24oYSl7cmV0dXJuIDk8YT90aGlzLnp2OnRoaXMub2ooYSl9LG9qOmZ1bmN0aW9uKGEpe3JldHVybiAxPGE/dGhpcy5wajp0aGlzLkJwKGEpfSxCcDpmdW5jdGlvbihhKXtyZXR1cm4gMjwKYT90aGlzLkNwOnRoaXMuWWsoYSl9LFlrOmZ1bmN0aW9uKGEpe3JldHVybiA5PGE/dGhpcy5aazp0aGlzLk9sKGEpfSxPbDpmdW5jdGlvbihhKXtyZXR1cm4gODxhP3RoaXMuUGw6dGhpcy5HaihhKX0sR2o6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwPGE/dGhpcy5Iajp0aGlzLmtrKGEpfSxrazpmdW5jdGlvbihhKXtyZXR1cm4gNjxhP3RoaXMubGs6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAyPGE/dGhpcy5qOmF9fX0pKGMpO3ZhciBpYz1jLnJ2fHxpYyxUYz1uZXcgaWMoMSxuZXcgRGF0ZSwyLE1hdGgucmFuZG9tKCksInRydWUiLG5hdmlnYXRvciwibC1rZXkiLCExLE1hdGguYWJzKC0xKSwidGYiLCJaKFRURFpUUlIiKTt3aW5kb3cuRD1UYy5zaig0KTsoZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3RoaXMuc2g9dGhpcy5jb25mPXRoaXMuamI9dGhpcy5wbGF5ZXI9bnVsbDt0aGlzLndkPTA7dGhpcy5aYT0iIjt0aGlzLkJkPVtdO3RoaXMuQ2Q9MDt0aGlzLnVoPSExO3RoaXMuWGU9CltdO2UubGIoIm5ld0FkZGVsaXZlcnkiKX1jLm1pPWI7Yi5wcm90b3R5cGU9e0d0OmZ1bmN0aW9uKGEpe3RoaXMuc2g9YX0sZmY6ZnVuY3Rpb24oYSl7dGhpcy5wbGF5ZXI9YTt0aGlzLlphPXRoaXMucGxheWVyLk8oKX0sZ2V0UGxheWVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGxheWVyfSxCdDpmdW5jdGlvbihhKXt0aGlzLmpiPWF9LEF0OmZ1bmN0aW9uKGEpe3RoaXMuY29uZj1hfSxIYTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNvbmZbYV07dGhpcy5jb25mW3RoaXMuWmFdJiZ0aGlzLmNvbmZbdGhpcy5aYV1bYV0mJihiPXRoaXMuY29uZlt0aGlzLlphXVthXSk7cmV0dXJuIGJ9LEljOmZ1bmN0aW9uKGEsYil7ZS5CYSgid2VsdC5kZSIpJiZlLllhKCJodHRwczovL2Fzdi5udWdnYWQubmV0L2JrP251Z2duPTE1Njk5MDUxMDImbnVnZ3NpZD0xOTgyMjE3NTUwJm51Z2dyaWQ9IitlbmNvZGVVUklDb21wb25lbnQobG9jYXRpb24uaHJlZikrIiZudWdnbD1odHRwcyUzQSUyRiUyRnd3MjUxLnNtYXJ0YWRzZXJ2ZXIuY29tJTJGdHJhY2slMkZjb21wLmFzcCUzRmtleXdvcmQlM0ROVUdHVkFSUyUyNnNpdGUlM0Q4NTE0NSIsCiJuZXRudWdnYWRhc3YiLHt9LGZ1bmN0aW9uKCl7fSxmdW5jdGlvbigpe30sdGhpcy5qYik7dmFyIGM9ITEsZj0hMTtpZih0aGlzLmdyKCkpdGhpcy5qYi5sKHRoaXMuamIucmQsdGhpcy5qYi5GYSx0aGlzLmpiLlplLGZ1bmN0aW9uKCl7dGhpcy5JYyhhLGIpfS5iaW5kKHRoaXMpLHRoaXMuamIuc2MpO2Vsc2UgaWYodGhpcy5FcSgpKXRoaXMud3QoZnVuY3Rpb24oKXt0aGlzLkljKGEsYil9LmJpbmQodGhpcykpO2Vsc2V7dGhpcy5wbGF5ZXIucGF1c2UoKTtlLnYoay5mZCx0aGlzLnBsYXllci51KCkpO3ZhciBnPXRoaXMuY29uZixsPW5ldyBZYSh0aGlzLmdldFBsYXllcigpLGcpO2ImJmwuY3UoKTtsLmV4aXRGdWxsc2NyZWVuKCk7ZS5sYigibmV3SG9tYWREaXNwbGF5Iik7Uz1sPW5ldyBRYShsLHRoaXMuamIsZyk7bC56dCh0aGlzLmNvbmYpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYSl7dmFyIG09ITE7dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyJiYobT10aGlzLnBsYXllci5nZXRSYXdQbGF5ZXIoKSk7CmE9YShtKX0oYT10aGlzLlJyKGEpKXx8ZS50cmFjaygic3RhdHNfaGRfbm9BZFRhZyIsInNob3ciLCEwKTsiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5wbGF5ZXIuR2UmJihjPXRoaXMucGxheWVyLkdlKCkpO2cuYWRTdGFydFRpbWVvdXQmJihmPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7fSxnLmFkU3RhcnRUaW1lb3V0fHw1RTQpKTtsLkllKGEsYyxmKTt0aGlzLnBsYXllci5DaChsKX19LGdyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IERhdGUsYj0wO2lmKHRoaXMud2QpcmV0dXJuIGI9YS5nZXRUaW1lKCktdGhpcy53ZC5nZXRUaW1lKCksdGhpcy53ZD1hLDNFNTxiPyEwOiExO3RoaXMud2Q9YTtyZXR1cm4hMX0sVnQ6ZnVuY3Rpb24oKXtlLmxiKCJwcmVyb2xsIik7ZS5lZigicHJlcm9sbCIpO3ZhciBhPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgicHJlcm9sbEFkVGFnIikmJihhPXRoaXMuSGEoInByZXJvbGxBZFRhZyIpKTsoYT10aGlzLnJnKGEpKT90aGlzLkljKGEpOihlLnRyYWNrKCJzdGF0c19oZF9ub0FkVGFnIiwKInByZSIsITApLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXIucGxheSgpfS5iaW5kKHRoaXMpLDApLGUudihrLmdkLHRoaXMucGxheWVyLnUoKSkpfSxVdDpmdW5jdGlvbihhKXtpZighdGhpcy5zaCl7ZS5lZigicG9zdHJvbGwiKTtlLmxiKCJwb3N0cm9sbCIpO3RoaXMuR3QoITApO3ZhciBiPXRoaXMuY29uZixjPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgicG9zdHJvbGxBZFRhZyIpJiYoYz10aGlzLkhhKCJwb3N0cm9sbEFkVGFnIikpOyhjPXRoaXMucmcoYykpP3RoaXMuSWMoYyxiLnBvc3Ryb2xsVXNlQ29tcGxldGVFdmVudD8hMDphKTooZS50cmFjaygic3RhdHNfaGRfbm9BZFRhZyIsInBvc3QiLCEwKSx0aGlzLnBsYXllci5wbGF5KCksZS52KGsuZ2QsdGhpcy5wbGF5ZXIudSgpKSl9fSxyZzpmdW5jdGlvbihhKXtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGEpe3ZhciBiPSExO3RoaXMucGxheWVyLmdldFJhd1BsYXllciYmKGI9dGhpcy5wbGF5ZXIuZ2V0UmF3UGxheWVyKCkpOwphPWEoYil9cmV0dXJuIGF9LGx0OmZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXIuS3QodGhpcy5VdC5iaW5kKHRoaXMpKTt0aGlzLnBsYXllci5OYSgpfSxIZDpmdW5jdGlvbihhKXtlLmxiKCJtaWRyb2xsIik7ZS5lZigibWlkcm9sbCIpO2lmKCF0aGlzLmhoKXt0aGlzLmhoPSEwO3ZhciBiPXRoaXMuSGEoImFkVGFnIik7dGhpcy5IYSgibWlkcm9sbEFkVGFnIikmJihiPXRoaXMuSGEoIm1pZHJvbGxBZFRhZyIpKTtiPyh0aGlzLkljKGIsYSksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmhoPSExfS5iaW5kKHRoaXMpLDFFMykpOihlLnRyYWNrKCJzdGF0c19oZF9ub0FkVGFnIiwibWlkIiwhMCksdGhpcy5wbGF5ZXIucGxheSgpLGUudihrLmdkLHRoaXMucGxheWVyLnUoKSkpfX0sa3Q6ZnVuY3Rpb24oKXt0aGlzLnBsYXllci5GdCh0aGlzLkhkLmJpbmQodGhpcykpO3RoaXMucGxheWVyLkxlKCl9LGc6ZnVuY3Rpb24oKXt0aGlzLlZ0KCk7dGhpcy5wbGF5ZXIuTGUmJnRoaXMua3QoKTsKdGhpcy5sdCgpfSxtdDpmdW5jdGlvbigpe3ZhciBhPVtdO2lmKHRoaXMuY29uZi55aWVsZGxhYil7dGhpcy5jb25mLnlpZWxkbGFiWzBdP2E9dGhpcy5jb25mLnlpZWxkbGFiOmFbMF09dGhpcy5jb25mLnlpZWxkbGFiO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKShmdW5jdGlvbihhLGIsYyxnKXt0aGlzLkJkLnB1c2goeyJmdW5jdGlvbiI6ZnVuY3Rpb24oZSl7dGhpcy5FdihhLGIsYyxnLGUpfS5iaW5kKGUpfSl9KS5jYWxsKHRoaXMsYVtiXS51cmwsYVtiXS5wbGFjZWhvbGRlcixhW2JdLmFsaWFzLGFbYl0ubWFjcm8pfXRoaXMuQ2Q9dGhpcy5CZC5sZW5ndGh9LEVxOmZ1bmN0aW9uKCl7dmFyIGE9ITE7MDx0aGlzLkNkJiYoYT0hMCk7cmV0dXJuIGF9LHd0OmZ1bmN0aW9uKGEpe3RoaXMudWg9YTtmb3IoYT0wO2E8dGhpcy5CZC5sZW5ndGg7YSsrKXRoaXMuQmRbYV1bImZ1bmN0aW9uIl0odGhpcy5acy5iaW5kKHRoaXMpKX0sWnM6ZnVuY3Rpb24oYSl7dGhpcy5DZC0tO2EmJnRoaXMuWGUucHVzaChhKTsKMD49dGhpcy5DZCYmdGhpcy51aCgpfSxScjpmdW5jdGlvbihhKXtmb3IodmFyIGI9IiIsYz0wO2M8dGhpcy5YZS5sZW5ndGg7YysrKWI9dGhpcy5YZVtjXSxhPWEucmVwbGFjZShiLm1hY3JvLGIucGxhY2Vob2xkZXIpO3JldHVybiBhfX19KShjKTt2YXIgZ2E9Yy5taXx8Z2EsUz0hMSxuYT0hMTtjPWN8fHt9OyhmdW5jdGlvbihjKXtmdW5jdGlvbiBiKCl7dGhpcy5hPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy55az10aGlzLmFbN107dGhpcy5TbD10aGlzLmFbNF07dGhpcy5ncD10aGlzLmFbMTBdO3RoaXMuWm49dGhpcy5hWzNdO3RoaXMuTnQ9dGhpcy5hWzFdO3RoaXMuaj10aGlzLmFbN119Yy5OcD1iO2IucHJvdG90eXBlPXt4azpmdW5jdGlvbihhKXtyZXR1cm4gMTA8YT90aGlzLnlrOnRoaXMuUmwoYSl9LFJsOmZ1bmN0aW9uKGEpe3JldHVybiAzPGE/dGhpcy5TbDp0aGlzLmZwKGEpfSxmcDpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuZ3A6CnRoaXMuWW4oYSl9LFluOmZ1bmN0aW9uKGEpe3JldHVybiA4PGE/dGhpcy5abjp0aGlzLk10KGEpfSxNdDpmdW5jdGlvbihhKXtyZXR1cm4gNDxhP3RoaXMuTnQ6dGhpcy5pKGEpfSxpOmZ1bmN0aW9uKGEpe3JldHVybiAxMDxhP3RoaXMuajphfX19KShjKTt2YXIgamM9Yy5OcHx8amMsVWM9bmV3IGpjKDEsbmV3IERhdGUsMixNYXRoLnJhbmRvbSgpLCJ0cnVlIixuYXZpZ2F0b3IsImwta2V5IiwhMSxNYXRoLmFicygtMSksInRmIiwiWihUVERaVFJSIik7d2luZG93LkQ9VWMueGsoNCl9KS5jYWxsKE9oamF1ZGlwQWxpZWNhaUosT2hqYXVkaXBBbGllY2FpSik7Cg==
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
46.4.116.20 , Germany, ASN24940 (HETZNER-AS, DE),
Reverse DNS
static.20.116.4.46.clients.your-server.de
Software
cafe /
Resource Hash
ef1955ae757c8b966c83248350331bd3a30f658ced11f387f8ebf05ab3368629

Request headers

Sec-Fetch-Mode
cors
Referer
https://videos.giga.de/embed/176875?autoplay=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-type
application/x-www-form-urlencoded

Response headers

Date
Fri, 13 Sep 2019 08:37:13 GMT
Server
cafe
Vary
Accept-Encoding
Access-Control-Allow-Methods
GET, POST, OPTIONS
Content-Type
image/gif
Access-Control-Allow-Origin
https://videos.giga.de
Access-Control-Expose-Headers
X-Homad-Instance, X-Homad-Long-Ad-Ignored, X-Homad-Sig, X-Homad-Url, X-Homad-Vpaid-Ignored, X-Homad-Ad-Id
Cache-Control
no-cache, must-revalidate
Access-Control-Allow-Credentials
true
X-Homad-Instance
de36-homad-1
X-Homad-Url
https://pubads.g.doubleclick.net/activity
Connection
keep-alive
Access-Control-Allow-Headers
X-Homad-Compatible-Vpaid, X-Homad-Post, X-Homad-Url
Content-Length
42
Expires
Fri, 01 Jan 1990 00:00:00 GMT
sbt.js
static.cliipa.com/basev/1.0.306/ Frame 9BA9
518 KB
116 KB
Script
General
Full URL
https://static.cliipa.com/basev/1.0.306/sbt.js
Requested by
Host: static.cliipa.com
URL: https://static.cliipa.com/basev/vpt.js?userId=551424a21b1b1f08006fb6f9&containerId=5c9117581325370004630210&format=3&host=cliipa.com&query[coppa]=false&query[param1]=adunit_/4444/giga.de_sd/software_artikel&macros[regs_gdpr]=1&macros[user_consent]=2
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
69.16.175.10 Phoenix, United States, ASN20446 (HIGHWINDS3 - Highwinds Network Group, Inc., US),
Reverse DNS
tlb.hwcdn.net
Software
/
Resource Hash
230287b29094522a46f74f69cd0ee9dd174e73b9e6f67a0340798cd89a57a2f5

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:13 GMT
Content-Encoding
gzip
Last-Modified
Wed, 11 Sep 2019 16:48:04 GMT
ETag
"1568220484"
Access-Control-Allow-Methods
GET, OPTIONS, HEAD
P3P
CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
Access-Control-Allow-Origin
*
Access-Control-Expose-Headers
Origin, Accept ,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Length, Accept-Language, Accept-Encoding, Referer, Range
Cache-Control
max-age=30450
Connection
Keep-Alive
Accept-Ranges
bytes
Content-Type
application/javascript
Access-Control-Allow-Headers
Origin, Accept ,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Length, Accept-Language, Accept-Encoding, Referer, Range
Content-Length
117613
X-HW
1568363832.dop006.fr8.t,1568363833.cds065.fr8.shn,1568363833.dop006.fr8.t,1568363833.cds032.fr8.c
config.json
gocp.stroeermediabrands.de/absconf/www.giga.de/
11 KB
11 KB
Fetch
General
Full URL
https://gocp.stroeermediabrands.de/absconf/www.giga.de/config.json
Requested by
Host: gocp.stroeermediabrands.de
URL: https://gocp.stroeermediabrands.de/trackcp.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
188.40.16.106 , Germany, ASN24940 (HETZNER-AS, DE),
Reverse DNS
static.106.16.40.188.clients.your-server.de
Software
/
Resource Hash
a70bd52b04b0429181c36c9ea8b56d449c45945555f4f31d00fb66e3f76d5b2e

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Access-Control-Allow-Origin
*
Date
Fri, 13 Sep 2019 08:37:13 GMT
Cache-Control
max-age=31536000, public
X-Machine
hn86 gocp env
Transfer-Encoding
chunked
Content-Type
application/json; charset=UTF-8
content14_10_18m.js
vidstat.taboola.com/
37 KB
8 KB
Script
General
Full URL
https://vidstat.taboola.com/content14_10_18m.js
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.114.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
ab8bbbaf028510d8b119cce741f0c2cc94816dcc113d83cac81a6aade6a76fa9

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:13 GMT
via
1.1 e0064d0a2437e206ed082e1fa1cdae61.cloudfront.net (CloudFront), 1.1 varnish
age
520975
x-cache
Hit from cloudfront, HIT
status
200
content-encoding
gzip
content-length
7638
x-served-by
cache-hhn4058-HHN
last-modified
Sun, 14 Oct 2018 13:31:31 GMT
server
AmazonS3
x-timer
S1568363833.352800,VS0,VE0
etag
"d8d81221ec6e604811ce469d899c9c8b"
vary
Accept-Encoding
content-type
application/javascript
cache-control
public, max-age=2592000
x-amz-cf-pop
FRA53-C1
accept-ranges
bytes
x-amz-cf-id
omj5vaGwuVO0u1DUElZ04p0xjblvLHfKzDESlIUndnM3CZOy52LCcg==
x-cache-hits
862163
oppsula.js
vidstat.taboola.com/oppsula/1.3.6/
15 KB
5 KB
Script
General
Full URL
https://vidstat.taboola.com/oppsula/1.3.6/oppsula.js
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.114.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
6eeaa330e79de82579d573d85b1e62ee0017782c71406518af6b366b78c7981e

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:13 GMT
via
1.1 cc77875ec7dfc885cffaa2ec6fa578f6.cloudfront.net (CloudFront), 1.1 varnish
age
498713
x-cache
Hit from cloudfront, HIT
status
200
access-control-max-age
3000
content-encoding
gzip
content-length
5174
x-served-by
cache-hhn4058-HHN
last-modified
Sun, 24 Feb 2019 08:54:20 GMT
server
AmazonS3
x-timer
S1568363833.354426,VS0,VE0
etag
"9eef55ccd492389cc88aa5285cade680"
vary
Accept-Encoding
access-control-allow-methods
GET, HEAD
content-type
application/javascript
access-control-allow-origin
*
cache-control
public, max-age=2592000
x-amz-cf-pop
FRA53-C1
accept-ranges
bytes
x-amz-cf-id
Hgfm8sbkx1gxZS7yha4CHuK3b3w9ezttWuCCZ4CAfr_LsIj39lkI7Q==
x-cache-hits
875706
OvaMediaPlayer.js
vidstat.taboola.com/vpaid/vPlayer/player/v10.3.9/
676 KB
180 KB
Script
General
Full URL
https://vidstat.taboola.com/vpaid/vPlayer/player/v10.3.9/OvaMediaPlayer.js
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.114.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
f49737b6c3e21187c8bbeb786a2657904a47ba34b42f12752f4e7fafb5889e7a

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:13 GMT
via
1.1 fab3f75b4ee7d58be154b12ee77e06eb.cloudfront.net (CloudFront), 1.1 varnish
age
331065
x-amz-meta-mtime
1568032630
x-cache
Miss from cloudfront, HIT
status
200
x-amz-meta-mode
33188
content-encoding
gzip
content-length
183864
x-served-by
cache-hhn4058-HHN
last-modified
Mon, 09 Sep 2019 12:37:11 GMT
server
AmazonS3
x-timer
S1568363833.374462,VS0,VE0
etag
"ccfcd9e919d1659a44d13fd074133cbd"
x-amz-meta-uid
0
vary
Accept-Encoding
x-amz-meta-gid
0
cache-control
public, max-age=2592000
x-amz-cf-pop
FRA56
accept-ranges
bytes
content-type
application/javascript
x-amz-cf-id
TdRuQfnjNfZM8uvwNDroWdWZ0x7zhcBKJ9K3-GNUrEgRBzlHtOY_-Q==
x-cache-hits
518039
st
convammp.taboola.com/
0
77 B
Image
General
Full URL
https://convammp.taboola.com/st?cijs=convusmp&ttype=45&cisd=convusmp&cipid=8045671&crid=4883965&dast=V7WzsCFgPCRy_OC6aURATCRy_OC6aURAUAAAAGBvQHGzFc7oYrGodFIi5Xo-VktVwMF4PhcrNYDGEjhsvdcEXjsEjE5Wq0nKyGm8FkthosJpsphBjLZTKoBRKW2e87KCinp8fsMshYLpNBLZA1TS6_G77QdDp8rnu97ve765w-h13k8uteFofh8PkLHs7Dw-wXPQ2Hz1_wcB4eZrfY73Pa3Zq_W-cymj5v1d3k1vzdYr_Lc3orjZa32O9z2t2Cy99idrldfjkAAAAAPAAoFfZD_AACAEQAAAAASAAAAABQBFT8WwhcAAAAAGAAFGD9aABAcTCc62592Y0O1-dl9wcAwEMACADAgAIJwABOUwlARc7BCQAAAAAAAAAAy____38MgB7xmQxAhtJgD8CDD8ADUUFiESMAAAAASKY2j6NJnVBZVAEAEKRbAVwBAAS0pRCLn4UBAAAQjC3Qw-L3mx12jd_tMgAAAAAAAAAAs_-zfzQhojG3tCCWAl61X0AAgLVfQAAANnUDAHgLgAs6glYMBqsziMlmtJvMDgAAAODu____Xw_kZiPHcLQYzhaO2WLj2i0nht3IM3MYN6ORyWLbbQ8YrucpwqgxrW9EWGa_76CgnJ4es8sgY7lMBrVA1jS5_AbxQcOwnAyC-U3YYrSaTDbL4Wy5mAyGo-FotD-BGw1wgobDwWI3WOwWi-FkMRkNloMFCsRgghMyHG0mq9FutZssh5PRaLaZbJCiVavZaDMYrmaT2W63Gg6Gy9EIKVqzmE0mi9loudsMlpPRYDgZDhEmNgvjaOHxrRWb1cQt2ox2a4lrMHOLDBOXyTJzrhyO2Vr0-phOu9HIYfFtUTBAaS-Ci3SiOV3-LpflrXlb3Dqnz2ERSzQni3Qiu-x7s5FjOFoMZwvHbLFx7ZYTw27kmTmMm9HIZLHt9o3NwjhaeHxrxWY1cYs2o91a4hrM3CLDxGWyzJwrh2O2Fr0-ptNuNHJYfPvGajbczDbDzWLfWM2Gm9lmuFnsO3SG7-pzNipvWoVHJnS4xt2mzGlQuAwW709iWky7s4Pn9zs6VaqLxtiQfRMKs8FjMChiieB0kU5EL-PpIpZInhbpRLjaDEbLiW20Wy1nHpvFY5vNZs6ZceZyDYe74coilihNF-lEr3tZHIbD5y94OA8Ps1_0NBw-f8HDeXiY3WK_z2l3a_5uncto-rxVd5Nb83eL_S7P6a00Wt5iv89pdwsuf4vZ5XZZ1H9siNForpvNFYPlXDNYJQAAAAAAAACAJcyZNwEAAAA4DWSxGEwWywWAEGPdJfiUCnl0An8rbvwYYk6Xv8tleWveFrfO6XNYGUBipwA!&cmcv=&pix=31589837&cb=1568363833347&uv=23122&tms=1568363833347&abt=aat1_vA!expl_vA!sac5_vB!ufm_vA&ft=0&unm=FEED_MANAGER&debug=pn:!sqg:!torgn:1568363830625.302!ts:1568363833347&
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.14.49 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
nginx/1.13.12 /
Resource Hash

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:13 GMT
via
1.1 varnish
server
nginx/1.13.12
x-timer
S1568363833.384055,VS0,VE9
x-cache
MISS
status
200
x-cache-hits
0
accept-ranges
bytes
content-length
0
x-served-by
cache-fra19143-FRA
st
convammp.taboola.com/
0
53 B
Image
General
Full URL
https://convammp.taboola.com/st?cijs=convusmp&ttype=72&cisd=convusmp&cipid=8045671&crid=4883965&dast=V7WzsCFgPCRy_OC6aURATCRy_OC6aURAUAAAAGBvQHGzFc7oYrGodFIi5Xo-VktVwMF4PhcrNYDGEjhsvdcEXjsEjE5Wq0nKyGm8FkthosJpsphBjLZTKoBRKW2e87KCinp8fsMshYLpNBLZA1TS6_G77QdDp8rnu97ve765w-h13k8uteFofh8PkLHs7Dw-wXPQ2Hz1_wcB4eZrfY73Pa3Zq_W-cymj5v1d3k1vzdYr_Lc3orjZa32O9z2t2Cy99idrldfjkAAAAAPAAoFfZD_AACAEQAAAAASAAAAABQBFT8WwhcAAAAAGAAFGD9aABAcTCc62592Y0O1-dl9wcAwEMACADAgAIJwABOUwlARc7BCQAAAAAAAAAAy____38MgB7xmQxAhtJgD8CDD8ADUUFiESMAAAAASKY2j6NJnVBZVAEAEKRbAVwBAAS0pRCLn4UBAAAQjC3Qw-L3mx12jd_tMgAAAAAAAAAAs_-zfzQhojG3tCCWAl61X0AAgLVfQAAANnUDAHgLgAs6glYMBqsziMlmtJvMDgAAAODu____Xw_kZiPHcLQYzhaO2WLj2i0nht3IM3MYN6ORyWLbbQ8YrucpwqgxrW9EWGa_76CgnJ4es8sgY7lMBrVA1jS5_AbxQcOwnAyC-U3YYrSaTDbL4Wy5mAyGo-FotD-BGw1wgobDwWI3WOwWi-FkMRkNloMFCsRgghMyHG0mq9FutZssh5PRaLaZbJCiVavZaDMYrmaT2W63Gg6Gy9EIKVqzmE0mi9loudsMlpPRYDgZDhEmNgvjaOHxrRWb1cQt2ox2a4lrMHOLDBOXyTJzrhyO2Vr0-phOu9HIYfFtUTBAaS-Ci3SiOV3-LpflrXlb3Dqnz2ERSzQni3Qiu-x7s5FjOFoMZwvHbLFx7ZYTw27kmTmMm9HIZLHt9o3NwjhaeHxrxWY1cYs2o91a4hrM3CLDxGWyzJwrh2O2Fr0-ptNuNHJYfPvGajbczDbDzWLfWM2Gm9lmuFnsO3SG7-pzNipvWoVHJnS4xt2mzGlQuAwW709iWky7s4Pn9zs6VaqLxtiQfRMKs8FjMChiieB0kU5EL-PpIpZInhbpRLjaDEbLiW20Wy1nHpvFY5vNZs6ZceZyDYe74coilihNF-lEr3tZHIbD5y94OA8Ps1_0NBw-f8HDeXiY3WK_z2l3a_5uncto-rxVd5Nb83eL_S7P6a00Wt5iv89pdwsuf4vZ5XZZ1H9siNForpvNFYPlXDNYJQAAAAAAAACAJcyZNwEAAAA4DWSxGEwWywWAEGPdJfiUCnl0An8rbvwYYk6Xv8tleWveFrfO6XNYGUBipwA!&cmcv=&pix=&cb=1568363833372&uv=23122&tms=1568363833372&abt=aat1_vA!expl_vA!sac5_vB!ufm_vA&ft=0&unm=FEED_MANAGER
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.14.49 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
nginx/1.13.12 /
Resource Hash

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:13 GMT
via
1.1 varnish
server
nginx/1.13.12
x-timer
S1568363833.384071,VS0,VE9
x-cache
MISS
status
200
x-cache-hits
0
accept-ranges
bytes
content-length
0
x-served-by
cache-fra19143-FRA
ngx_pagespeed_beacon
www.giga.de/
0
73 B
XHR
General
Full URL
https://www.giga.de/ngx_pagespeed_beacon?url=http%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.72.10 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
nginx /
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Content-Type
application/x-www-form-urlencoded

Response headers

status
204
date
Fri, 13 Sep 2019 08:37:13 GMT
cache-control
max-age=0, no-cache
server
nginx
f69b3f1b-82b2-4bbe-8b1e-2bc8ebbdac6c
https://www.giga.de/ Frame 9BA9
1 KB
0
Other
General
Full URL
blob:https://www.giga.de/f69b3f1b-82b2-4bbe-8b1e-2bc8ebbdac6c
Requested by
Host: static.cliipa.com
URL: https://static.cliipa.com/basev/1.0.306/sbt.js
Protocol
BLOB
Security
, ,
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
ee441245ef85f538030acf5e534d1cf2664c18289cec8cc0d84656ffb0e0a95d

Request headers

Sec-Fetch-Mode
same-origin
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Content-Length
1205
4dd45976-c2f6-4c0a-9402-b0d0d390fa5d
https://www.giga.de/ Frame 9BA9
1 KB
0
Other
General
Full URL
blob:https://www.giga.de/4dd45976-c2f6-4c0a-9402-b0d0d390fa5d
Requested by
Host: static.cliipa.com
URL: https://static.cliipa.com/basev/1.0.306/sbt.js
Protocol
BLOB
Security
, ,
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
8e920612ce29a3290fc2edbaab7647470f21dda35cc1a350f9b8b362fc4d3ebe

Request headers

Sec-Fetch-Mode
same-origin
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Content-Length
1515
truncated
/ Frame 9BA9
2 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
9d02d662da8a47fb5fb610b545007507b6017028043dbb63cd09ec897d3b9627

Request headers

User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Content-Type
image/png
truncated
/ Frame 9BA9
715 B
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
5a3f1dd74233f605e511f1b5b244bedf85ac88ba264caf4d6401bc7ec2017dcd

Request headers

User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Content-Type
image/png
gpt.js
www.googletagservices.com/tag/js/ Frame 1F1F
41 KB
13 KB
Script
General
Full URL
https://www.googletagservices.com/tag/js/gpt.js
Requested by
Host: static.cliipa.com
URL: https://static.cliipa.com/basev/1.0.306/sbt.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:824::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
sffe /
Resource Hash
b0a55cd6ac476adf475714e621d8a8c3eedff93c7fa90698dc80179bd5fae956
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:13 GMT
content-encoding
gzip
x-content-type-options
nosniff
server
sffe
etag
"277 / 383 of 1000 / last-modified: 1568323759"
vary
Accept-Encoding
content-type
text/javascript
status
200
cache-control
private, max-age=900, stale-while-revalidate=3600
timing-allow-origin
*
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
content-length
13176
x-xss-protection
0
expires
Fri, 13 Sep 2019 08:37:13 GMT
4d2ac18c-5296-4411-ba6c-c7eb25daa3b9
https://www.giga.de/
1 KB
0
Media
General
Full URL
blob:https://www.giga.de/4d2ac18c-5296-4411-ba6c-c7eb25daa3b9
Protocol
BLOB
Security
, ,
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
60ddc774c7b5fd0c01d169321a444da403d60c0042f6bee01b0c96f6e1535fda

Request headers

Sec-Fetch-Mode
no-cors
Accept-Encoding
identity;q=1, *;q=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Range
bytes=0-

Response headers

Content-Range
bytes 0-1492/1493
Content-Length
1493
Content-Type
video/mp4
052d8b21-f1a9-4507-9097-f0e94a2d2a94
https://www.giga.de/
1 KB
0
Media
General
Full URL
blob:https://www.giga.de/052d8b21-f1a9-4507-9097-f0e94a2d2a94
Protocol
BLOB
Security
, ,
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
60ddc774c7b5fd0c01d169321a444da403d60c0042f6bee01b0c96f6e1535fda

Request headers

Sec-Fetch-Mode
no-cors
Accept-Encoding
identity;q=1, *;q=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Range
bytes=0-

Response headers

Content-Range
bytes 0-1492/1493
Content-Length
1493
Content-Type
video/mp4
map.js
js.adscale.de/
21 KB
6 KB
Script
General
Full URL
https://js.adscale.de/map.js
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.234.72 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-234-72.deploy.static.akamaitechnologies.com
Software
AmazonS3 /
Resource Hash
49b11c901e39d47f6124a05eb2a85b49828b1ab13045ff657d9a622df6445e72

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

x-amz-version-id
dkfVZvfV0gdhc2R5a4arQG6Eo23V0d6t
Content-Encoding
gzip
Last-Modified
Thu, 05 Sep 2019 23:46:38 GMT
Server
AmazonS3
x-amz-request-id
45280296D20EB550
ETag
"bebadcf744e89f1c759744a2a44d9f38"
Vary
Accept-Encoding
Content-Type
text/javascript
Cache-Control
max-age=300
Date
Fri, 13 Sep 2019 08:37:13 GMT
Connection
keep-alive
Accept-Ranges
bytes
Content-Length
5434
x-amz-id-2
tKq7230iBP/75HIazwSTtIgKBAKWav7f2wNpExvvRpJpHdOMd1onSwcOTNUFAJE7ai1oRBjulIY=
adex.js
dmp.theadex.com/d/607/2256/s/
39 KB
14 KB
Script
General
Full URL
https://dmp.theadex.com/d/607/2256/s/adex.js?ts=93620386
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.3, , AES_256_GCM
Server
89.163.159.109 Cloppenburg, Germany, ASN24961 (MYLOC-AS, DE),
Reverse DNS
Software
nginx /
Resource Hash
f23d04df5067a82ed44a032393efa3b0fcbe492907b2fb72f77466832e1b8aed

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:13 GMT
content-encoding
gzip
last-modified
Tue, 11 Jun 2019 18:16:07 GMT
server
nginx
etag
W/"5cffefe7-9ca4"
content-type
application/javascript
status
200
cache-control
max-age=300
access-control-allow-credentials
true
expires
Fri, 13 Sep 2019 08:42:13 GMT
adex.js
dmp.theadex.com/d/285/5184/s/
39 KB
14 KB
Script
General
Full URL
https://dmp.theadex.com/d/285/5184/s/adex.js?ts=44187013
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.3, , AES_256_GCM
Server
89.163.159.109 Cloppenburg, Germany, ASN24961 (MYLOC-AS, DE),
Reverse DNS
Software
nginx /
Resource Hash
9d68d3cac9e1f807599c5c9d388d900f1108014535f9368705a0c6a25e73664f

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:13 GMT
content-encoding
gzip
last-modified
Fri, 05 Jul 2019 13:52:02 GMT
server
nginx
etag
W/"5d1f5602-9ca4"
content-type
application/javascript
status
200
cache-control
max-age=300
access-control-allow-credentials
true
expires
Fri, 13 Sep 2019 08:42:13 GMT
ibb_map.js
bbcdn-bbnaut.ibillboard.com/library/
1 KB
1014 B
Script
General
Full URL
https://bbcdn-bbnaut.ibillboard.com/library/ibb_map.js
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
194.213.222.29 Adamov, Czech Republic, ASN5588 (GTSCE GTS Central Europe / Antel Germany, CZ),
Reverse DNS
cdn4.bbmedia.cz
Software
ibillboard /
Resource Hash
0fcdcfd13a1beb422d1068e345ba2f7a71595f093cf755768808f352c9aa8f47

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:13 GMT
Content-Encoding
gzip
Last-Modified
Sun, 01 Oct 2017 19:11:53 GMT
Server
ibillboard
Vary
Accept-Encoding, Accept-Encoding
Content-Type
application/javascript
Cache-Control
max-age=604800
Transfer-Encoding
chunked
Connection
keep-alive
Expires
Thu, 19 Sep 2019 21:58:31 GMT
default.js
ups.xplosion.de/loader/69511/
2 KB
2 KB
Script
General
Full URL
https://ups.xplosion.de/loader/69511/default.js
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
52.208.73.164 Dublin, Ireland, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
ec2-52-208-73-164.eu-west-1.compute.amazonaws.com
Software
/
Resource Hash
fba9cccffa2a53735939d3d1cacb0379003f349f45ca514d629fbabd02fd4db8

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

status
200
date
Fri, 13 Sep 2019 08:37:13 GMT
cache-control
must-revalidate,no-cache,no-store
access-control-allow-origin
*
content-type
text/javascript
content-length
1543
p3p
CP="NOI DSP COR NID PSAo OUR SAMo BUS"
learn
de-gmtdmp.mookie1.com/t/v2/
43 B
673 B
Image
General
Full URL
https://de-gmtdmp.mookie1.com/t/v2/learn?tagid=V2_343&src.rand=94594504&src.id=Stroeer
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
54.93.224.155 Frankfurt am Main, Germany, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
ec2-54-93-224-155.eu-central-1.compute.amazonaws.com
Software
Apache /
Resource Hash
a065920df8cc4016d67c3a464be90099c9d28ffe7c9e6ee3a18f257efc58cbd7

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:13 GMT
Server
Apache
P3P
CP="NON DSP COR NID CURa PSAa PSDa OUR STP UNI COM NAV STA LOC OTC",policyref="/w3c/p3p.xml"
Cache-Control
no-cache, no-store, must-revalidate
Connection
keep-alive
Content-Type
image/gif;charset=UTF-8
Content-Length
43
X-Application-Context
application
Expires
Thu, 01 Jan 1970 00:00:00 GMT
5a68b55943ab0f00040790e9.mp4
inventory.cliipa.com/551424a21b1b1f08006fb6f9/5a68b55943ab0f00040790e9/ Frame 9BA9
64 KB
0
Media
General
Full URL
https://inventory.cliipa.com/551424a21b1b1f08006fb6f9/5a68b55943ab0f00040790e9/5a68b55943ab0f00040790e9.mp4
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
69.16.175.10 Phoenix, United States, ASN20446 (HIGHWINDS3 - Highwinds Network Group, Inc., US),
Reverse DNS
tlb.hwcdn.net
Software
/
Resource Hash

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Accept-Encoding
identity;q=1, *;q=0
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Range
bytes=0-

Response headers

Date
Fri, 13 Sep 2019 08:37:13 GMT
Content-Range
bytes 0-1368236/1368237
Last-Modified
Wed, 24 Jan 2018 16:34:44 GMT
ETag
"1516811684"
X-HW
1568363833.dop005.fr8.t,1568363833.cds110.fr8.shn,1568363833.cds110.fr8.c
P3P
CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
Access-Control-Allow-Origin
*
Access-Control-Expose-Headers
Origin, Accept ,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Length, Accept-Language, Accept-Encoding, Referer, Range
Cache-Control
public, max-age=86400
Connection
Keep-Alive
Accept-Ranges
bytes
Content-Type
video/mp4
Access-Control-Allow-Headers
Origin, Accept ,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Length, Accept-Language, Accept-Encoding, Referer, Range
Content-Length
1368237
pubads_impl_2019090501.js
securepubads.g.doubleclick.net/gpt/ Frame 1F1F
159 KB
58 KB
Script
General
Full URL
https://securepubads.g.doubleclick.net/gpt/pubads_impl_2019090501.js
Requested by
Host: www.googletagservices.com
URL: https://www.googletagservices.com/tag/js/gpt.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
216.58.206.2 Mountain View, United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
fra16s20-in-f2.1e100.net
Software
sffe /
Resource Hash
1f948056b50b22854611638a2a293c1f4eb05e9b72c29b2e3f41eefabd789788
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:13 GMT
content-encoding
gzip
x-content-type-options
nosniff
last-modified
Thu, 05 Sep 2019 13:05:53 GMT
server
sffe
vary
Accept-Encoding
content-type
text/javascript
status
200
cache-control
private, immutable, max-age=31536000
accept-ranges
bytes
timing-allow-origin
*
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
59665
x-xss-protection
0
expires
Fri, 13 Sep 2019 08:37:13 GMT
integrator.sync.js
adservice.google.de/adsid/ Frame 1F1F
113 B
175 B
Script
General
Full URL
https://adservice.google.de/adsid/integrator.sync.js?domain=www.giga.de
Requested by
Host: www.googletagservices.com
URL: https://www.googletagservices.com/tag/js/gpt.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:824::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
cafe /
Resource Hash
ea03bfd7fdda1eac185ebc3e8e74b33065b04c8e0adc48cbbd4136748dbd2742
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

timing-allow-origin
*
date
Fri, 13 Sep 2019 08:37:13 GMT
content-encoding
gzip
x-content-type-options
nosniff
server
cafe
p3p
CP="This is not a P3P policy! See http://support.google.com/accounts/answer/151657 for more info."
status
200
cache-control
private, no-cache, no-store
content-disposition
attachment; filename="f.txt"
content-type
application/javascript; charset=UTF-8
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
content-length
108
x-xss-protection
0
player.css
vidstat.taboola.com/vpaid/vPlayer/player/v10.3.9/assets/
14 KB
3 KB
Stylesheet
General
Full URL
https://vidstat.taboola.com/vpaid/vPlayer/player/v10.3.9/assets/player.css
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.114.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
3e519113583c968dd0daa3a70249fc54df7114ba2595bfe1644d2320e6d25aa5

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:13 GMT
via
1.1 7e3ec4bce6d89d06369eae9bcbd1cb7e.cloudfront.net (CloudFront), 1.1 varnish
age
331064
x-amz-meta-mtime
1568032632
x-cache
Miss from cloudfront, HIT
status
200
x-amz-meta-mode
33188
content-encoding
gzip
content-length
2419
x-served-by
cache-hhn4058-HHN
last-modified
Mon, 09 Sep 2019 12:37:13 GMT
server
AmazonS3
x-timer
S1568363834.631654,VS0,VE0
etag
"d905122fc8955e89d4478cba21f53f32"
x-amz-meta-uid
0
vary
Accept-Encoding
x-amz-meta-gid
0
cache-control
public, max-age=2592000
x-amz-cf-pop
FRA56
accept-ranges
bytes
content-type
text/css
x-amz-cf-id
dA7g7S1Iiyx4vQ-d-7ZjBwfCKKgR2XQyVMhFOLDrh3nW0WHG1K6IeA==
x-cache-hits
493833
dsm.js
vidstat.taboola.com/vpaid/ds/176/
1 KB
749 B
Script
General
Full URL
https://vidstat.taboola.com/vpaid/ds/176/dsm.js
Requested by
Host: vidstat.taboola.com
URL: https://vidstat.taboola.com/vpaid/vPlayer/player/v10.3.9/OvaMediaPlayer.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.114.2 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
91ffef0e08af098862c5ee0b413103869650c929e0a65fbd29e5815e3b402609

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:13 GMT
via
1.1 15d3b4db3728feaae1780610a1bac86e.cloudfront.net (CloudFront), 1.1 varnish
age
1355971
x-cache
Miss from cloudfront, HIT
status
200
content-encoding
gzip
content-length
499
x-served-by
cache-hhn4058-HHN
last-modified
Mon, 29 Jul 2019 13:39:31 GMT
server
AmazonS3
x-timer
S1568363834.633351,VS0,VE0
etag
"d2ab13c0468acb5251b93e254b36f876"
vary
Accept-Encoding
content-type
application/octet-stream
cache-control
public, max-age=2592000
x-amz-cf-pop
FRA53-C1
accept-ranges
bytes
x-amz-cf-id
0nv2OT_XPk-IG7z9z6oZo9TBdh3JN4CIlKPHiCNZtGPiLDGtmmFw1Q==
x-cache-hits
551366
st
convammp.taboola.com/
0
53 B
Image
General
Full URL
https://convammp.taboola.com/st?cijs=convusmp&ttype=81&cisd=convusmp&cipid=8045671&crid=4883965&dast=V7WzsCFgPCRy_OC6aURATCRy_OC6aURAUAAAAGBvQHGzFc7oYrGodFIi5Xo-VktVwMF4PhcrNYDGEjhsvdcEXjsEjE5Wq0nKyGm8FkthosJpsphBjLZTKoBRKW2e87KCinp8fsMshYLpNBLZA1TS6_G77QdDp8rnu97ve765w-h13k8uteFofh8PkLHs7Dw-wXPQ2Hz1_wcB4eZrfY73Pa3Zq_W-cymj5v1d3k1vzdYr_Lc3orjZa32O9z2t2Cy99idrldfjkAAAAAPAAoFfZD_AACAEQAAAAASAAAAABQBFT8WwhcAAAAAGAAFGD9aABAcTCc62592Y0O1-dl9wcAwEMACADAgAIJwABOUwlARc7BCQAAAAAAAAAAy____38MgB7xmQxAhtJgD8CDD8ADUUFiESMAAAAASKY2j6NJnVBZVAEAEKRbAVwBAAS0pRCLn4UBAAAQjC3Qw-L3mx12jd_tMgAAAAAAAAAAs_-zfzQhojG3tCCWAl61X0AAgLVfQAAANnUDAHgLgAs6glYMBqsziMlmtJvMDgAAAODu____Xw_kZiPHcLQYzhaO2WLj2i0nht3IM3MYN6ORyWLbbQ8YrucpwqgxrW9EWGa_76CgnJ4es8sgY7lMBrVA1jS5_AbxQcOwnAyC-U3YYrSaTDbL4Wy5mAyGo-FotD-BGw1wgobDwWI3WOwWi-FkMRkNloMFCsRgghMyHG0mq9FutZssh5PRaLaZbJCiVavZaDMYrmaT2W63Gg6Gy9EIKVqzmE0mi9loudsMlpPRYDgZDhEmNgvjaOHxrRWb1cQt2ox2a4lrMHOLDBOXyTJzrhyO2Vr0-phOu9HIYfFtUTBAaS-Ci3SiOV3-LpflrXlb3Dqnz2ERSzQni3Qiu-x7s5FjOFoMZwvHbLFx7ZYTw27kmTmMm9HIZLHt9o3NwjhaeHxrxWY1cYs2o91a4hrM3CLDxGWyzJwrh2O2Fr0-ptNuNHJYfPvGajbczDbDzWLfWM2Gm9lmuFnsO3SG7-pzNipvWoVHJnS4xt2mzGlQuAwW709iWky7s4Pn9zs6VaqLxtiQfRMKs8FjMChiieB0kU5EL-PpIpZInhbpRLjaDEbLiW20Wy1nHpvFY5vNZs6ZceZyDYe74coilihNF-lEr3tZHIbD5y94OA8Ps1_0NBw-f8HDeXiY3WK_z2l3a_5uncto-rxVd5Nb83eL_S7P6a00Wt5iv89pdwsuf4vZ5XZZ1H9siNForpvNFYPlXDNYJQAAAAAAAACAJcyZNwEAAAA4DWSxGEwWywWAEGPdJfiUCnl0An8rbvwYYk6Xv8tleWveFrfO6XNYGUBipwA!&cmcv=&uv=23122&unm=FEED_MANAGER&cb=1568363833623&abt=aat1_vA!expl_vA!sac5_vB!ufm_vA&baseReportD=taboola.com&dataCenter=am&
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.14.49 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
nginx/1.13.12 /
Resource Hash

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:13 GMT
via
1.1 varnish
server
nginx/1.13.12
x-timer
S1568363834.645508,VS0,VE9
x-cache
MISS
status
200
x-cache-hits
0
accept-ranges
bytes
content-length
0
x-served-by
cache-fra19143-FRA
t.png
gocp.stroeermediabrands.de/
98 B
355 B
Image
General
Full URL
https://gocp.stroeermediabrands.de/t.png?title=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&canonicalUrl=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&url=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&contentPieceId=2857946&publishDate=2016-09-22T12%3A38%3A19%2B02%3A00&_=1568363833643.-419479828
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
188.40.16.106 , Germany, ASN24940 (HETZNER-AS, DE),
Reverse DNS
static.106.16.40.188.clients.your-server.de
Software
/
Resource Hash
ede401f1ed56b31a6f0f795b0b8f1a9948878459b450d5f9eea82051c2e24d40

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:13 GMT
Last-Modified
Mon, 26 Aug 2019 12:29:06 GMT
ETag
"5d63d092-62"
Content-Type
image/png
Cache-Control
max-age=31536000, public
X-Machine
hn86 gocp env
Accept-Ranges
bytes
Content-Length
98
activeview
pagead2.googlesyndication.com/pcs/ Frame 9BA9
42 B
110 B
Image
General
Full URL
https://pagead2.googlesyndication.com/pcs/activeview?xai=AKAOjst3puzM-4Y-Ktv_sjpIofasO-X-ek91XjxehXoKA7HvzkG6QD9ngHV2hcrA9N0slvw_rFHHj443RiRX5i--v5khoRHTEzsVfmIqXt8SCtY&sig=Cg0ArKJSzAV3AL8hilXmEAE&adk=3179048887&tt=138&bs=1585%2C1200&mtos=1108,1108,1108,1108,1108&tos=1108,0,0,0,0&p=278,967.5,528,1267.5&mcvt=1108&rs=3&ht=0&tfs=1190&tls=2298&mc=1&lte=1&bas=0&bac=0&met=0&avms=nio&niot_obs=959&niot_cbk=1019&md=2&rst=1568363832317&rpt=139&isd=0&msd=0&lm=2&oseid=3&xdi=0&ps=1585%2C6699&ss=1600%2C1200&pt=2161&bin=1&deb=1-2-7-18-20-16-116-18-0-0-0&tvt=2289&r=v&id=osdim&vs=4&uc=10&upc=1&tgt=DIV&cl=1&cec=1&clc=1&cac=1&cd=0x0&itpl=19&v=20190909
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:824::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
cafe /
Resource Hash
ef1955ae757c8b966c83248350331bd3a30f658ced11f387f8ebf05ab3368629
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:13 GMT
x-content-type-options
nosniff
server
cafe
timing-allow-origin
*
status
200
p3p
policyref="https://www.googleadservices.com/pagead/p3p.xml", CP="NOI DEV PSA PSD IVA IVD OTP OUR OTR IND OTC"
access-control-allow-origin
*
cache-control
no-cache, must-revalidate
content-type
image/gif
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
content-length
42
x-xss-protection
0
expires
Fri, 01 Jan 1990 00:00:00 GMT
p.min.js
cdn.emetriq.de/adp/profiling/0.2.2/
4 KB
2 KB
Script
General
Full URL
https://cdn.emetriq.de/adp/profiling/0.2.2/p.min.js
Requested by
Host: ups.xplosion.de
URL: https://ups.xplosion.de/loader/69511/default.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
2600:9000:2057:e00:1c:8c89:a300:93a1 , United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
Software
AmazonS3 /
Resource Hash
0161504a412281d7c5e626b19e17e84295593b2c4e373826ca1e35a2579508bb

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 14 Jun 2019 00:49:05 GMT
content-encoding
gzip
last-modified
Fri, 07 Jun 2019 11:50:36 GMT
server
AmazonS3
age
7890489
vary
Accept-Encoding
x-cache
Hit from cloudfront
x-amz-version-id
xx8i10qOhfwpOULfQBi5YwU2PFbxz7Th
status
200
cache-control
max-age=31536000, no-transform, public
x-amz-cf-pop
FRA6-C1
content-type
application/javascript; charset=utf-8
x-amz-cf-id
WGcEAYWPmtJvlstsCJhNl7BCcBA77fC_hIORub9Lkjjp-pZA_6oc5A==
via
1.1 89c822bb1ce1445a7be6d1057088cfbf.cloudfront.net (CloudFront)
ads
securepubads.g.doubleclick.net/gampad/ Frame 1F1F
19 KB
8 KB
XHR
General
Full URL
https://securepubads.g.doubleclick.net/gampad/ads?gdfp_req=1&pvsid=1994520669297679&correlator=480827571355416&output=ldjh&callback=googletag.impl.pubads.callbackProxy1&impl=fif&eid=21064552%2C21062888%2C21063636&vrg=2019090501&guci=1.2.0.0.2.2.0.0&plat=1%3A32776%2C2%3A16809992%2C8%3A134250504&sc=1&sfv=1-0-35&ecs=20190913&iu=%2F5286166%2Fgiga.de%2FVidazoo-Passback-300x250&sz=300x250&eri=6&cookie_enabled=1&cdm=www.giga.de&bc=31&lmt=1568363833&dt=1568363833714&dlt=1568363833469&idt=232&ea=0&frm=23&biw=1585&bih=1200&isw=300&ish=250&oid=3&adx=968&ady=278&adk=3503934010&uci=83req8gj52g&ifi=1&ifk=2079463813&u_tz=120&u_his=2&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_sd=1&flash=0&nhd=2&iag=15&url=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&top=www.giga.de&dssz=2&icsg=10&std=0&vis=1&dmc=8&scr_x=0&scr_y=0&ga_vid=1151781421.1568363834&ga_sid=1568363834&ga_hid=1926086429&fws=256&ohw=0
Requested by
Host: securepubads.g.doubleclick.net
URL: https://securepubads.g.doubleclick.net/gpt/pubads_impl_2019090501.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
216.58.206.2 Mountain View, United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
fra16s20-in-f2.1e100.net
Software
cafe /
Resource Hash
de63ad1c3fb42acda070c53b705a18d969c48ed0bb2bcda26fcaacc3b8dc1989
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:14 GMT
content-encoding
br
x-content-type-options
nosniff
google-mediationgroup-id
-2
p3p
policyref="https://googleads.g.doubleclick.net/pagead/gcn_p3p_.xml", CP="CURa ADMa DEVa TAIo PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
status
200
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
7917
x-xss-protection
0
google-lineitem-id
5021208867
pragma
no-cache
server
cafe
google-mediationtag-id
-2
google-creative-id
138266090223
content-type
text/plain; charset=UTF-8
access-control-allow-origin
https://www.giga.de
cache-control
no-cache, must-revalidate
access-control-allow-credentials
true
timing-allow-origin
*
expires
Fri, 01 Jan 1990 00:00:00 GMT
pubads_impl_rendering_2019090501.js
securepubads.g.doubleclick.net/gpt/ Frame 1F1F
63 KB
24 KB
Script
General
Full URL
https://securepubads.g.doubleclick.net/gpt/pubads_impl_rendering_2019090501.js
Requested by
Host: securepubads.g.doubleclick.net
URL: https://securepubads.g.doubleclick.net/gpt/pubads_impl_2019090501.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
216.58.206.2 Mountain View, United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
fra16s20-in-f2.1e100.net
Software
sffe /
Resource Hash
4021f17f04d1808610fd53096d9a57e97d86a7d8c94cd86b970640c4f99a70c6
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:13 GMT
content-encoding
gzip
x-content-type-options
nosniff
last-modified
Thu, 05 Sep 2019 13:05:53 GMT
server
sffe
vary
Accept-Encoding
content-type
text/javascript
status
200
cache-control
private, immutable, max-age=31536000
accept-ranges
bytes
timing-allow-origin
*
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
content-length
24375
x-xss-protection
0
expires
Fri, 13 Sep 2019 08:37:13 GMT
container.html
tpc.googlesyndication.com/safeframe/1-0-35/html/ Frame 1F1F
0
0

segments
api.theadex.com/v0.9/pub/
56 B
126 B
Script
General
Full URL
https://api.theadex.com/v0.9/pub/segments?access_token=y5fWjpPcqPTEF7fuHtSSUIh1UnD1w2hVEt2Y2PjI&callback=window.ibb_lib.ibb_store
Requested by
Host: bbcdn-bbnaut.ibillboard.com
URL: https://bbcdn-bbnaut.ibillboard.com/library/ibb_map.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
89.163.159.120 Cloppenburg, Germany, ASN24961 (MYLOC-AS, DE),
Reverse DNS
Software
/
Resource Hash
893fa7339c102fb976d4065531644d8a8ac565fc84818a77600ad3ed5a72a26b

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

status
200
date
Fri, 13 Sep 2019 08:37:13 GMT
content-length
56
content-type
text/plain; charset=utf-8
data
ups.xplosion.de/
4 KB
3 KB
Script
General
Full URL
https://ups.xplosion.de/data?title=PayPal-Login%3A%20so%20geht%27s%20ohne%20Probleme&hostSiteUrl=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&userAgent=5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_14_5)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F74.0.3729.169%20Safari%2F537.36&userLang=en-US&color=24&os=Linux%20x86_64&timezone=-2&screen=1200x1600&mbr=562f6e0592a50266d82bbdd8627b2056&event_id=page_view&_sid=69511&_ver=0.2.2&_seg=jsonp&_=365703241703
Requested by
Host: cdn.emetriq.de
URL: https://cdn.emetriq.de/adp/profiling/0.2.2/p.min.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
52.208.73.164 Dublin, Ireland, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
ec2-52-208-73-164.eu-west-1.compute.amazonaws.com
Software
/
Resource Hash
12cdcb56f128495591fd6b264ba187967a9e635891b09d8619681eb0116e8314

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:13 GMT
content-encoding
gzip
status
200
vary
accept-encoding
p3p
CP="NOI DSP COR NID PSAo OUR SAMo BUS"
access-control-allow-origin
*
cache-control
must-revalidate,no-cache,no-store
content-type
text/javascript
adrtxtag.min.js
cdn.adrtx.net/
840 B
848 B
Script
General
Full URL
https://cdn.adrtx.net/adrtxtag.min.js
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
34.250.43.132 Dublin, Ireland, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
ec2-34-250-43-132.eu-west-1.compute.amazonaws.com
Software
akka-http/10.1.9 /
Resource Hash
760e4b5d62fd40555e5378e6216c0d4bec64c26bd39d3418b59e14c46ad0aa08

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Wed, 11 Sep 2019 11:03:05 GMT
Content-Encoding
gzip
Last-Modified
Wed, 11 Sep 2019 10:56:33 GMT
Server
akka-http/10.1.9
ETag
"8fda08a34733677008755479a59fa669"
Content-Type
application/javascript; charset=UTF-8
Cache-Control
max-age=86400, must-revalidate
Connection
keep-alive
Content-Length
509
usersync
uss.xplosion.de/ Frame BB4E
Redirect Chain
  • https://xpl.theadex.com/d/327/i/2.gif?axd_pid=22&axd_fuid=BSaCEiBCBsJsBsRCWDUkWsfABifABSfABSfABiUABifABfrr&cb=https%3A%2F%2Fuss.xplosion.de%2Fusersync%3Fsid%3D65966%26fpid%3D%7B%7BUUID%7D%7D
  • https://uss.xplosion.de/usersync?sid=65966&fpid=4203766813119717598
42 B
662 B
Image
General
Full URL
https://uss.xplosion.de/usersync?sid=65966&fpid=4203766813119717598
Requested by
Host: www.giga.de
URL: https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
52.208.73.164 Dublin, Ireland, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
ec2-52-208-73-164.eu-west-1.compute.amazonaws.com
Software
/
Resource Hash
ef1955ae757c8b966c83248350331bd3a30f658ced11f387f8ebf05ab3368629

Request headers

Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

status
200
date
Fri, 13 Sep 2019 08:37:13 GMT
cache-control
must-revalidate,no-cache,no-store
access-control-allow-origin
*
content-type
image/gif
content-length
42
p3p
CP="NOI DSP COR NID PSAo OUR SAMo BUS"

Redirect headers

pragma
no-cache
date
Fri, 13 Sep 2019 08:37:13 GMT
server
nginx
status
307
p3p
CP="CAO PSAa PSDa IVAa IVDa OUR UNI COM NAV"
location
https://uss.xplosion.de/usersync?sid=65966&fpid=4203766813119717598
cache-control
no-store, no-cache, must-revalidate
access-control-allow-credentials
true
content-type
text/html; charset=utf-8
content-length
107
expires
0
activation
adstax-match.adrtx.net/ Frame A38B
0
0
Document
General
Full URL
https://adstax-match.adrtx.net/activation?receiverId=adaud
Requested by
Host: confiant-integrations.global.ssl.fastly.net
URL: https://confiant-integrations.global.ssl.fastly.net/prebid/201908291025/wrap.js
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
108.128.71.27 Dublin, Ireland, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
ec2-108-128-71-27.eu-west-1.compute.amazonaws.com
Software
akka-http/10.1.9 /
Resource Hash

Request headers

Host
adstax-match.adrtx.net
Connection
keep-alive
Pragma
no-cache
Cache-Control
no-cache
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site
cross-site
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Accept-Encoding
gzip, deflate, br
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

Cache-Control
no-cache, no-store, must-revalidate
Content-Type
text/html; charset=UTF-8
Date
Fri, 13 Sep 2019 08:37:14 GMT
Server
akka-http/10.1.9
X-Error-Reason
Missing UserId
Content-Length
39
Connection
keep-alive
container.html
tpc.googlesyndication.com/safeframe/1-0-35/html/ Frame 17DC
0
0
Document
General
Full URL
https://tpc.googlesyndication.com/safeframe/1-0-35/html/container.html?n=2
Requested by
Host: securepubads.g.doubleclick.net
URL: https://securepubads.g.doubleclick.net/gpt/pubads_impl_rendering_2019090501.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:825::2001 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
sffe /
Resource Hash
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

:method
GET
:authority
tpc.googlesyndication.com
:scheme
https
:path
/safeframe/1-0-35/html/container.html?n=2
pragma
no-cache
cache-control
no-cache
upgrade-insecure-requests
1
user-agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
sec-fetch-mode
nested-navigate
accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
sec-fetch-site
cross-site
referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
accept-encoding
gzip, deflate, br
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

status
200
accept-ranges
bytes
vary
Accept-Encoding
content-encoding
gzip
content-type
text/html
timing-allow-origin
*
content-length
3491
date
Fri, 13 Sep 2019 07:25:39 GMT
expires
Sat, 12 Sep 2020 07:25:39 GMT
last-modified
Fri, 21 Jun 2019 14:35:26 GMT
x-content-type-options
nosniff
server
sffe
x-xss-protection
0
cache-control
public, immutable, max-age=31536000
age
4295
alt-svc
quic=":443"; ma=2592000; v="46,43,39"
osd.js
www.googletagservices.com/activeview/js/current/ Frame 1F1F
76 KB
28 KB
Script
General
Full URL
https://www.googletagservices.com/activeview/js/current/osd.js?cb=%2Fr20100101
Requested by
Host: securepubads.g.doubleclick.net
URL: https://securepubads.g.doubleclick.net/gpt/pubads_impl_2019090501.js
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2a00:1450:4001:824::2002 Frankfurt am Main, Germany, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
sffe /
Resource Hash
52b9e38359d28b25df0896fd56c1fe0e2dfa20e178baab3822213b49a5cdec97
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 0

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:37:14 GMT
content-encoding
gzip
x-content-type-options
nosniff
server
sffe
etag
"1568027754411643"
vary
Accept-Encoding
content-type
text/javascript
status
200
cache-control
private, max-age=3000
accept-ranges
bytes
alt-svc
quic="googleads.g.doubleclick.net:443"; ma=2592000; v="46,43,39",quic=":443"; ma=2592000; v="46,43,39"
content-length
28408
x-xss-protection
0
expires
Fri, 13 Sep 2019 08:37:14 GMT
usersync
uss.xplosion.de/
42 B
662 B
Image
General
Full URL
https://uss.xplosion.de/usersync?sid=69511&fpid=562f6e0592a50266d82bbdd8627b2056
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
52.208.73.164 Dublin, Ireland, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
ec2-52-208-73-164.eu-west-1.compute.amazonaws.com
Software
/
Resource Hash
ef1955ae757c8b966c83248350331bd3a30f658ced11f387f8ebf05ab3368629

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

status
200
date
Fri, 13 Sep 2019 08:37:14 GMT
cache-control
must-revalidate,no-cache,no-store
access-control-allow-origin
*
content-type
image/gif
content-length
42
p3p
CP="NOI DSP COR NID PSAo OUR SAMo BUS"
utsync.ashx
ml314.com/ Frame C71B
573 B
1 KB
Script
General
Full URL
https://ml314.com/utsync.ashx?pub=&adv=&et=0&eid=50282&ct=js&pi=&fp=&clid=&if=1&ps=&cl=&mlt=&data=&&cp=https%3A%2F%2Fwww.giga.de%2Fwebapps%2Fpaypal%2Ftipps%2Fpaypal-login-so-gehts-und-so-loest-ihr-login-probleme%2F&pv=1568363832108_2zcsbvh5j&bl=en-us&cb=7202132&return=https%3A%2F%2Fce.lijit.com%2Fmerge%3Fpid%3D5031%263pid%3D%5BPersonID%5D&ht=&d=&dc=&si=1568363832108_2zcsbvh5j&cid=&s=1600x1200&rp=
Requested by
Host: ml314.com
URL: https://ml314.com/tag.aspx?138
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
34.247.144.106 Dublin, Ireland, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
ec2-34-247-144-106.eu-west-1.compute.amazonaws.com
Software
Microsoft-IIS/10.0 / ASP.NET
Resource Hash
6ce766de94077b4e60303af4cc43beadb70f2dff773cae87eaffdd5e1383992a

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:14 GMT
Content-Encoding
gzip
Server
Microsoft-IIS/10.0
X-AspNet-Version
4.0.30319
X-Powered-By
ASP.NET
Vary
Accept-Encoding
p3P
CP="NON DSP COR ADMo PSAo DEVo BUS COM UNI NAV DEM STA"
Cache-Control
private
Connection
keep-alive
Content-Type
application/javascript; charset=utf-8
Content-Length
398
Expires
0
csync.ashx
ml314.com/ Frame C71B
Redirect Chain
  • https://ib.adnxs.com/getuid?https://ml314.com/csync.ashx%3Ffp=$UID%26person_id=5978151496988943630%26eid=2
  • https://ib.adnxs.com/bounce?%2Fgetuid%3Fhttps%3A%2F%2Fml314.com%2Fcsync.ashx%253Ffp%3D%24UID%2526person_id%3D5978151496988943630%2526eid%3D2
  • https://ml314.com/csync.ashx?fp=8048907583063875128&person_id=5978151496988943630&eid=2
43 B
312 B
Image
General
Full URL
https://ml314.com/csync.ashx?fp=8048907583063875128&person_id=5978151496988943630&eid=2
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
34.247.144.106 Dublin, Ireland, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
ec2-34-247-144-106.eu-west-1.compute.amazonaws.com
Software
Microsoft-IIS/10.0 / ASP.NET
Resource Hash
b1442e85b03bdcaf66dc58c7abb98745dd2687d86350be9a298a1d9382ac849b

Request headers

Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:14 GMT
Server
Microsoft-IIS/10.0
X-AspNet-Version
4.0.30319
X-Powered-By
ASP.NET
Content-Type
image/gif
Cache-Control
private
Connection
keep-alive
Content-Length
43
Expires
Sat, 14 Sep 2019 04:37:15 GMT

Redirect headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:17 GMT
X-Proxy-Origin
144.76.109.30; 144.76.109.30; 539.bm-nginx-loadbalancer.mgmt.fra1; *.adnxs.com; 37.252.172.244:80
AN-X-Request-Uuid
e402b302-b432-483a-b14d-d7399a6c76f7
Server
nginx/1.13.4
Access-Control-Allow-Origin
*
P3P
policyref="http://cdn.adnxs.com/w3c/policy/p3p.xml", CP="NOI DSP COR ADM PSAo PSDo OURo SAMo UNRo OTRo BUS COM NAV DEM STA PRE"
Location
https://ml314.com/csync.ashx?fp=8048907583063875128&person_id=5978151496988943630&eid=2
Cache-Control
no-store, no-cache, private
Access-Control-Allow-Credentials
true
Connection
keep-alive
Content-Type
text/html; charset=utf-8
Content-Length
0
X-XSS-Protection
0
Expires
Sat, 15 Nov 2008 16:00:00 GMT
csync.ashx
ml314.com/ Frame C71B
Redirect Chain
  • https://tags.bluekai.com/site/20486?limit=0&id=5978151496988943630&redir=https://ml314.com/csync.ashx%3Ffp=$_BK_UUID%26person_id=5978151496988943630%26eid=50056
  • https://ml314.com/csync.ashx?fp=Ide%2BmQ999992OU%2B5&person_id=5978151496988943630&eid=50056
43 B
312 B
Image
General
Full URL
https://ml314.com/csync.ashx?fp=Ide%2BmQ999992OU%2B5&person_id=5978151496988943630&eid=50056
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
34.247.144.106 Dublin, Ireland, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
ec2-34-247-144-106.eu-west-1.compute.amazonaws.com
Software
Microsoft-IIS/10.0 / ASP.NET
Resource Hash
b1442e85b03bdcaf66dc58c7abb98745dd2687d86350be9a298a1d9382ac849b

Request headers

Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:14 GMT
Server
Microsoft-IIS/10.0
X-AspNet-Version
4.0.30319
X-Powered-By
ASP.NET
Content-Type
image/gif
Cache-Control
private
Connection
keep-alive
Content-Length
43
Expires
Sat, 14 Sep 2019 04:37:15 GMT

Redirect headers

Location
https://ml314.com/csync.ashx?fp=Ide%2BmQ999992OU%2B5&person_id=5978151496988943630&eid=50056
Date
Fri, 13 Sep 2019 08:37:15 GMT
Connection
keep-alive
Content-Length
0
BK-Server
2f1b
P3P
CP="NOI DSP COR CUR ADMo DEVo PSAo PSDo OUR SAMo BUS UNI NAV", policyref="http://tags.bluekai.com/w3c/p3p.xml"
match
ps.eyeota.net/ Frame C71B
Redirect Chain
  • https://ps.eyeota.net/pixel?pid=r8hrb20&t=gif
  • https://ps.eyeota.net/pixel/bounce/?pid=r8hrb20&t=gif
  • https://ml314.com/utsync.ashx?eid=50052&et=0&fp=2edf3diw4sFa-EpthQA_PlYOpHokFe418YvxiU-KZPj0&gdpr=1&gdpr_consent=&return=https%3A%2F%2Fps.eyeota.net%2Fmatch%3Fbid%3Dr8hrb20%26uid%3Dnil
  • https://ml314.com/csync.ashx?fp=2edf3diw4sFa-EpthQA_PlYOpHokFe418YvxiU-KZPj0&person_id=5978151496988943630&eid=50052&return=https%3a%2f%2fps.eyeota.net%2fmatch%3fbid%3dr8hrb20%26uid%3dnil
  • https://ps.eyeota.net/match?bid=r8hrb20&uid=nil
70 B
171 B
Image
General
Full URL
https://ps.eyeota.net/match?bid=r8hrb20&uid=nil
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
18.195.251.148 Frankfurt am Main, Germany, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
ec2-18-195-251-148.eu-central-1.compute.amazonaws.com
Software
/
Resource Hash
de9d3fd0eb948bd294477d0eda60a73b85caff1794803530d0463193a113da98

Request headers

Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Date
Fri, 13 Sep 2019 08:37:15 GMT
Content-Length
70
Content-Type
image/gif

Redirect headers

Date
Fri, 13 Sep 2019 08:37:14 GMT
Server
Microsoft-IIS/10.0
X-AspNet-Version
4.0.30319
X-Powered-By
ASP.NET
Content-Type
text/html; charset=utf-8
Location
https://ps.eyeota.net/match?bid=r8hrb20&uid=nil
Cache-Control
private
Connection
keep-alive
Content-Length
168
Expires
Sat, 14 Sep 2019 04:37:15 GMT
merge
ce.lijit.com/ Frame C71B
0
532 B
Image
General
Full URL
https://ce.lijit.com/merge?pid=5031&3pid=5978151496988943630
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
72.251.249.9 Amsterdam, Netherlands, ASN29791 (VOXEL-DOT-NET - Internap Corporation, US),
Reverse DNS
Software
nginx / raptor
Resource Hash
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:15 GMT
Server
nginx
X-Powered-By
raptor
P3P
CP="CUR ADM OUR NOR STA NID"
Cache-Control
private, no-cache, no-store, must-revalidate, proxy-revalidate, max-age=0, s-maxage=0
X-Sovrn-Pod
ap3ams1
Content-Type
text/html;charset=utf-8
X-Application-Context
application:prod:9080
Expires
Fri, 20 Mar 2009 00:00:00 GMT
pd
eu-u.openx.net/w/1.0/ Frame 096F
Redirect Chain
  • https://eu-u.openx.net/w/1.0/pd?plm=6&ph=2671f27c-3f24-410f-8105-4de0c801f2a9&gdpr=1
  • https://eu-u.openx.net/w/1.0/pd?cc=1&plm=6&ph=2671f27c-3f24-410f-8105-4de0c801f2a9&gdpr=1
0
0
Document
General
Full URL
https://eu-u.openx.net/w/1.0/pd?cc=1&plm=6&ph=2671f27c-3f24-410f-8105-4de0c801f2a9&gdpr=1
Requested by
Host: cdn-a.yieldlove.com
URL: https://cdn-a.yieldlove.com/yieldlove-bidder-stroeer.js?giga.de
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
34.95.120.147 , United States, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
147.120.95.34.bc.googleusercontent.com
Software
OXGW/16.161.0 /
Resource Hash

Request headers

:method
GET
:authority
eu-u.openx.net
:scheme
https
:path
/w/1.0/pd?cc=1&plm=6&ph=2671f27c-3f24-410f-8105-4de0c801f2a9&gdpr=1
pragma
no-cache
cache-control
no-cache
upgrade-insecure-requests
1
user-agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
sec-fetch-mode
nested-navigate
accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
sec-fetch-site
cross-site
referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
accept-encoding
gzip, deflate, br
cookie
i=f46c8cb9-7dfb-0379-0b85-9e615e4a68a3|1568363835
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

status
200
vary
Accept
set-cookie
i=f46c8cb9-7dfb-0379-0b85-9e615e4a68a3|1568363835; Version=1; Expires=Sat, 12-Sep-2020 08:37:15 GMT; Max-Age=31536000; Domain=.openx.net; Path=/ pd=v2|1568363835|mOgikimWiygu; Version=1; Expires=Sat, 28-Sep-2019 08:37:15 GMT; Max-Age=1296000; Domain=.openx.net; Path=/
server
OXGW/16.161.0
p3p
CP="CUR ADM OUR NOR STA NID"
date
Fri, 13 Sep 2019 08:37:15 GMT
content-type
text/html
content-length
592
via
1.1 google
alt-svc
clear

Redirect headers

status
302
set-cookie
i=f46c8cb9-7dfb-0379-0b85-9e615e4a68a3|1568363835; Version=1; Expires=Sat, 12-Sep-2020 08:37:15 GMT; Max-Age=31536000; Domain=.openx.net; Path=/
server
OXGW/16.161.0
p3p
CP="CUR ADM OUR NOR STA NID"
location
https://eu-u.openx.net/w/1.0/pd?cc=1&plm=6&ph=2671f27c-3f24-410f-8105-4de0c801f2a9&gdpr=1
date
Fri, 13 Sep 2019 08:37:15 GMT
content-length
0
via
1.1 google
alt-svc
clear
async_usersync.html
acdn.adnxs.com/ib/static/usersync/v3/ Frame 522C
0
0
Document
General
Full URL
https://acdn.adnxs.com/ib/static/usersync/v3/async_usersync.html
Requested by
Host: cdn-a.yieldlove.com
URL: https://cdn-a.yieldlove.com/yieldlove-bidder-stroeer.js?giga.de
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
151.101.113.108 Frankfurt am Main, Germany, ASN54113 (FASTLY - Fastly, US),
Reverse DNS
Software
nginx/1.9.13 /
Resource Hash

Request headers

Host
acdn.adnxs.com
Connection
keep-alive
Pragma
no-cache
Cache-Control
no-cache
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site
cross-site
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Accept-Encoding
gzip, deflate, br
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

Server
nginx/1.9.13
Content-Type
text/html
Last-Modified
Fri, 20 May 2016 02:07:09 GMT
ETag
W/"573e714d-3e3"
Expires
Sun, 06 Aug 2017 09:41:59 GMT
Cache-Control
max-age=31536000
Access-Control-Allow-Origin
*
Content-Encoding
gzip
Via
1.1 varnish 1.1 varnish
Fastly-Debug-Digest
e0a1bb88354655bae6b4f44be1ff58238053e5563770e29e0e433e905ee66055
Content-Length
506
Accept-Ranges
bytes
Date
Fri, 13 Sep 2019 08:37:15 GMT
Age
3279320
Connection
keep-alive
X-Served-By
cache-jfk8123-JFK, cache-hhn4070-HHN
X-Cache
HIT, HIT
X-Cache-Hits
1276778, 1450884
X-Timer
S1568363835.297892,VS0,VE0
Vary
Accept-Encoding
usync.html
eus.rubiconproject.com/ Frame DF0C
0
0
Document
General
Full URL
https://eus.rubiconproject.com/usync.html
Requested by
Host: cdn-a.yieldlove.com
URL: https://cdn-a.yieldlove.com/yieldlove-bidder-stroeer.js?giga.de
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
104.111.230.142 , Netherlands, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a104-111-230-142.deploy.static.akamaitechnologies.com
Software
Apache/2.2.15 (CentOS) / PHP/5.3.3
Resource Hash

Request headers

Host
eus.rubiconproject.com
Connection
keep-alive
Pragma
no-cache
Cache-Control
no-cache
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site
cross-site
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Accept-Encoding
gzip, deflate, br
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

Server
Apache/2.2.15 (CentOS)
X-Powered-By
PHP/5.3.3
p3p
CP="NOI CURa ADMa DEVa TAIa OUR # BUS IND UNI COM NAV INT"
Last-Modified
Wed, 11 Sep 2019 18:27:19 GMT
Content-Encoding
gzip
Content-Length
7614
Content-Type
text/html; charset=UTF-8
Cache-Control
max-age=71242
Expires
Sat, 14 Sep 2019 04:24:37 GMT
Date
Fri, 13 Sep 2019 08:37:15 GMT
Connection
keep-alive
Vary
Accept-Encoding
Cookie set showad.js
ads.pubmatic.com/AdServer/js/ Frame 1993
0
0
Document
General
Full URL
https://ads.pubmatic.com/AdServer/js/showad.js
Requested by
Host: cdn-a.yieldlove.com
URL: https://cdn-a.yieldlove.com/yieldlove-bidder-stroeer.js?giga.de
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
2.18.233.180 , Ascension Island, ASN16625 (AKAMAI-AS - Akamai Technologies, Inc., US),
Reverse DNS
a2-18-233-180.deploy.static.akamaitechnologies.com
Software
Apache/2.2.15 (CentOS) /
Resource Hash

Request headers

Host
ads.pubmatic.com
Connection
keep-alive
Pragma
no-cache
Cache-Control
no-cache
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site
cross-site
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
Accept-Encoding
gzip, deflate, br
Cookie
KTPCACOOKIE=YES; KCCH=YES; pi=156212:4
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Sec-Fetch-Mode
nested-navigate
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/

Response headers

Last-Modified
Fri, 26 Jul 2019 09:39:45 GMT
ETag
"13006b6-9bf6-58e925294ef26"
Server
Apache/2.2.15 (CentOS)
Set-Cookie
KTPCACOOKIE=YES; domain=.pubmatic.com; path=/; max-age=7776000;
Accept-Ranges
bytes
Content-Encoding
gzip
P3P
CP="NOI DSP COR LAW CUR ADMo DEVo TAIo PSAo PSDo IVAo IVDo HISo OTPo OUR SAMo BUS UNI COM NAV INT DEM CNT STA PRE LOC", CP="NOI DSP COR LAW CUR ADMo DEVo TAIo PSAo PSDo IVAo IVDo HISo OTPo OUR SAMo BUS UNI COM NAV INT DEM CNT STA PRE LOC"
Content-Length
14898
Content-Type
text/html; charset=UTF-8
Cache-Control
public, max-age=141220
Expires
Sat, 14 Sep 2019 23:50:55 GMT
Date
Fri, 13 Sep 2019 08:37:15 GMT
Connection
keep-alive
Vary
Accept-Encoding
data
lb59.s400.meetrics.net/
43 B
308 B
Image
General
Full URL
https://lb59.s400.meetrics.net/data?/J1/wKKOBALlnFFLl1FDLkqFKtkyB23A52AwwA6wEylF0pFtlF2qoFx1A24Az2Az4AzwA2yA12A1mE5rE4zE5sF4BEUkzF2BPlAAAAAAAABHLIAPAAAFAAHLITMPsAPAAAJPAWEABMPsAZAAAOA55A55A85B55A58E55A55AFAzzA03A5BErMPsAPKEAJPAWEAHMPsAPWKAAZAwSAcAAAASksFhFjAAAAAAAAAAAAEAAAHLIAAAAAAAHAklFzrF0vFwBFIAzvFm0F3hFylFKAnpFnhFukElfFzkFHAzwAw4Ey1AwBEMAxzA4yA21AwwAz2AyzAGAkpFylFj0FAAAAJAxzAxxA12A4xA1BEKA1wAw1A43A40Ax4AJAylFj0FhuFnsFlBFKA1wAw1A43A40Ax4AKA1wAw1A43A40Ax4AzAlyAG0B00A0lAyGEnpFnhFukElfFzkFlyAGzFvmF03FhyFlfFhyF0pFrlFslByGEylFj0FhuFnsFlBFdJPAWEAsEA6DAFAAAMPsAAAAAPANlFkpF1tFSlFj0FhuFnsFlBFAAAAAAAAAAAAAAAAQtjFDyG/SA
Protocol
HTTP/1.1
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
136.243.5.11 , Germany, ASN24940 (HETZNER-AS, DE),
Reverse DNS
h232.meetrics.de
Software
nginx /
Resource Hash
548f2d6f4d0d820c6c5ffbeffcbd7f0e73193e2932eefe542accc84762deec87

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:16 GMT
Server
nginx
Transfer-Encoding
chunked
Content-Type
image/gif
Cache-control
no-cache,no-store,must-revalidate
Connection
keep-alive
Expires
Fri, 13-Sep-19 08:37:15 GMT
o.gif
go.giga-abs.de/
35 B
355 B
Image
General
Full URL
https://go.giga-abs.de/o.gif?__iz=0&__id=1568363841067&__it=-120&__ic=727391&__iq=d60947d71dc6b8363d958031bdb4812c&__ig=1
Protocol
HTTP/1.0
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
178.19.72.20 , Germany, ASN29551 (HGCOMP-ASN, DE),
Reverse DNS
Software
X/1.0 /
Resource Hash
2d865c4f2d21f06c2c74d99850d1a387bc4b2f42add0b96c6297d039b884d46f

Request headers

Sec-Fetch-Mode
no-cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

Pragma
no-cache
Date
Fri, 13 Sep 2019 08:37:21 GMT
Last-Modified
Sat, 05 Sep 2009 08:36:16 GMT
Server
X/1.0
Content-Type
image/gif
Cache-Control
private, no-cache, no-store, proxy-revalidate, no-transform
Connection
keep-alive
Content-Length
35
Expires
Fri, 07 Sep 2012 08:36:16 GMT
/
onetag-geo.s-onetag.com/
23 B
433 B
XHR
General
Full URL
https://onetag-geo.s-onetag.com/
Requested by
Host: beacon.s-onetag.com
URL: https://beacon.s-onetag.com/beacon.min.js
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
2600:9000:2057:f600:5:ae3a:ba00:93a1 , United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
Software
/
Resource Hash
ad16e1b37490fca28df99d039d6373d2fee4d894fcd279d95b90ae872f4d860f

Request headers

Sec-Fetch-Mode
cors
Referer
https://www.giga.de/webapps/paypal/tipps/paypal-login-so-gehts-und-so-loest-ihr-login-probleme/
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36

Response headers

date
Fri, 13 Sep 2019 08:27:55 GMT
via
1.1 18e87eada05046c231b7f49230fa6dc4.cloudfront.net (CloudFront), 1.1 163be08bc1bc44818353c4fd88655bee.cloudfront.net (CloudFront)
age
566
x-amzn-requestid
4d20880f-2295-49f1-bd18-42ca49e0195a
status
200
x-cache
Hit from cloudfront
content-type
application/json
access-control-allow-origin
*
cache-control
max-age=3600
x-amz-cf-pop
FRA53-C1, FRA6-C1
x-amz-apigw-id
f8npxE10SK4FSSg=
content-length
23
x-amz-cf-id
xYl-IIK67Lfk3XX2P9-JtMfcVEm03c_TZH2ehcAPV7fuPyhT_dbnJg==

Failed requests

These URLs were requested, but there was no response received. You will also see them in the list above.

Domain
tpc.googlesyndication.com
URL
https://tpc.googlesyndication.com/safeframe/1-0-35/html/container.html
Domain
tpc.googlesyndication.com
URL
https://tpc.googlesyndication.com/safeframe/1-0-35/html/container.html?n=2

Verdicts & Comments Add Verdict or Comment

323 JavaScript Global Variables

These are the non-standard "global" variables defined on the window object. These can be helpful in identifying possible client-side frameworks and code.

object| smbContext object| LUX object| POST_META number| LUX_t_start number| LUX_t_end object| gaLog object| smbt function| b2serp object| smbadloader function| requirejs function| require function| define string| GoogleAnalyticsObject function| ga function| adLoader object| apstag boolean| smbt_only object| DKUIM_SETTINGS string| GIGA_AREA string| WP_SITEURL string| SHUTTLE_CORE_VIDEO_CDN_VIDEO_URL string| SHUTTLE_API_URL string| VIDEO_INLINE_MODE boolean| VIDEO_AUTOPLAY_DISABLED function| st_cookie object| is number| USER_PAGE_COUNT string| szmvars object| iom object| smbVideoService object| iam_data object| pagespeed object| adsbygoogle boolean| apstagLOADED object| google_tag_data object| gaplugins object| gaGlobal object| gaData object| dataLayer string| type function| sdibgclick object| _absconfig object| _ecoconf function| getSDG object| SDG function| showSdgDebug object| googletag object| pbjsYLHH boolean| yieldlove_prevent_autoload string| sdgMeetricsStatus object| _enqAdpParam object| fXm_Head object| SDM_head undefined| SDM_resource string| SDM_target object| google_js_reporting_queue object| google_ad_modifications object| google_logging_queue object| ggeac boolean| google_measure_js_timing object| googleToken object| googleIMState function| processGoogleToken object| google_reactive_ads_global_state object| google_sa_queue object| google_sl_win function| google_process_slots boolean| google_apltlad number| _gfp_ function| google_spfd number| google_lpabyc number| google_unique_id object| google_sv_map object| google_t12n_vars function| setImmediate function| clearImmediate string| state object| __onetag object| __connect object| nativendo_588f272a3e49c_conf object| google_tag_manager object| closure_memoize_cache_ object| de_meetrics object| _econa function| send object| google_optimize function| google_sa_impl object| google_jobrunner object| google_persistent_state_async object| __google_ad_urls number| google_global_correlator object| google_prev_clients object| ampInaboxIframes object| ampInaboxPendingMessages object| google_iframe_oncopy function| Goog_AdSense_getAdAdapterInstance boolean| google_osd_loaded boolean| google_onload_fired function| _ object| yieldlove_site_settings object| yieldlove_cmd object| YLHH object| core function| pbjsYLHHChunk object| stroeerCore object| _taboola function| dummy function| log function| debug function| info function| warn function| error object| nativendo_pc function| NativendoV2 object| NativendoV2Loader object| nativendo object| nativendo_588f272a3e49c boolean| google_noFetch function| Goog_Osd_UnloadAdBlock function| Goog_Osd_UpdateElementToMeasure function| google_osd_amcb object| NUGGjson function| aplauncherExec function| aplauncher string| n_pbt object| _m6rq string| preloadType function| webpackJsonpdkuim object| Base64 boolean| dkuimInited object| TRC object| _tblConsole undefined| msg object| _comscore object| confiant function| $ function| jQuery function| isEmpty object| gapi object| ___jsl function| Goog_AdSense_OsdAdapter number| _m6rApiLoaded function| __trcCopyProps function| __trcFromError function| __trcClientTimestamp function| __trcLog function| __trcError function| __trcDebug function| __trcInfo function| __trcWarn function| __trcDOMWalker function| __trcPurgeEventHandlers function| __trcJSONify function| __trcUnJSONify function| __trcGetMargins function| __trcAttachResize function| __trcDetachResize function| __trcTrim function| __trcGetElementsByClass function| __trcToArray function| __trcObjectCreate function| PageManager function| addHashParam object| params number| trc_debug_level string| trc_article_id object| TRCImpl number| taboola_view_id function| udm_ object| ns_p object| COMSCORE string| sdm_ift object| google_image_requests string| sovrn_beacon_tid object| nativendo_588f272a3e49c_map object| LJT_Ads object| trcManager object| trcRbox object| options object| Tynt object| containers object| images function| stroeerCoreConnect object| _33Across function| __cmp object| cmTag function| startCMTagMain object| teadsscript object| teads object| cp2 boolean| isCmTagFMOnPage string| category function| shuffle object| arrToUse object| travel object| news object| mobilecontent1 object| mobilecontent1_new object| travelmuted object| movietrailersHD object| movietrailersHDmuted object| widescreen object| movietrailerslight object| landscapeHD object| landscapeHDmuted object| blank object| blankblack object| blankblack7 object| blankblack5 object| blankblack_mob object| blankwhiteHDmpg object| blankblack10 object| blankwhite object| blankwhiteHD object| black_loader object| lightweight object| lightweight_single object| lightweight300600 object| bonnier object| home object| lipstick object| shoes object| art object| infiltrator object| glass object| lemurs object| NBAshoes object| Sunglasses object| Hummus object| Short_food object| Short_swim object| Euro_news object| Automoto_TV object| Uzoo object| SmartDuvet object| Tiger object| Chocolate object| Logan object| Jacket object| Bike object| Kanye object| Cancun object| Smartwatch object| Helicopter object| dogshampoo object| icetea object| charger object| blueysmoothie object| ShortContent object| carbsandwich object| pisatower object| Food1 object| Food2 object| Food3 object| Food4 object| Food5 object| Food6 object| Food7 object| Fashion object| Lifestyle1 object| Lifestyle2 object| Technology1 object| Technology2 object| Technology3 object| Entertainment object| Scrambledeggs object| Spinach object| Bub1 object| Pokemon object| style_hacks object| Motorcycle object| IceCracking object| Manatees object| Daiving object| Fishing_Lure object| Shark object| HundredsManatees object| TigerShark object| MandelaPrize object| Bertram35 object| bushfire object| Snow object| Delta object| Wheels object| Yellowfin object| Grip object| Kawasaki object| Yoga object| Cat object| Chickens object| RZR object| bitcoin object| bmw object| wombat object| koala object| Marsupial object| puppy object| bitcoinMuted object| bmwMuted object| Wallabies object| Bunny object| Pumpkins object| Dogs_Stress object| Dogs_Stress_image object| lightweight300600_short object| playlist function| webpackHotUpdate string| vpaidId function| OvaMediaPlayer object| _EQLService object| _EQPScript function| _h object| _adexc object| adex object| ibb_lib object| _EQPService object| _adrtx number| _emqUSSMutex function| _emqUSSCall string| segments object| segmentsArr undefined| result string| _emqstr

0 Cookies

4 Console Messages

Source Level URL
Text
console-api log URL: https://gocp.stroeermediabrands.de/trackcp.js(Line 1)
Message:
starting version 20181002
console-api error URL: https://c.amazon-adsystem.com/aax2/apstag.js(Line 2)
Message:
Error: `apstag.init` was called multiple times
console-api log (Line 108)
Message:
inline_ad: No video available; loading inline-ad by Teads
console-api info URL: https://gocp.stroeermediabrands.de/trackcp.js(Line 1)
Message:
got title from meta

Indicators

This is a term in the security industry to describe indicators such as IPs, Domains, Hashes, etc. This does not imply that any of these indicate malicious activity.

15.taboola.com
a.teads.tv
aax-eu.amazon-adsystem.com
acdn.adnxs.com
ad.doubleclick.net
ads.pubmatic.com
adscale.nuggad.net
adserver-eu.adtech.advertising.com
adserver.adtech.de
adservice.google.com
adservice.google.de
adstax-match.adrtx.net
adx.adform.net
ajax.googleapis.com
ap.lijit.com
api.theadex.com
apis.google.com
as-sec.casalemedia.com
bbcdn-bbnaut.ibillboard.com
beacon.s-onetag.com
bis.cliipa.com
bttrack.com
c.amazon-adsystem.com
c.nativendo.de
cdn-a.yieldlove.com
cdn.adrtx.net
cdn.emetriq.de
cdn.m6r.eu
cdn.speedcurve.com
cdn.stroeerdigitalmedia.de
cdn.taboola.com
cdn.tynt.com
cds.taboola.com
ce.lijit.com
cm.g.doubleclick.net
cmp.teads.mgr.consensu.org
confiant-integrations.global.ssl.fastly.net
convammp.taboola.com
crops.giga.de
csi.gstatic.com
d.nativendo.de
de-gmtdmp.mookie1.com
de.ioam.de
de.tynt.com
dfp-gateway.s-onetag.com
dkuim.de
dmp.theadex.com
dx.bigsea.weborama.com
eu-u.openx.net
eus.rubiconproject.com
fastlane.rubiconproject.com
files.giga-video.de
get.s-onetag.com
go.giga-abs.de
gocp.stroeermediabrands.de
googleads.g.doubleclick.net
gslbeacon.lijit.com
hbopenbid.pubmatic.com
hgc-cf-cache-1.svonm.com
ib.adnxs.com
ic.tynt.com
ih.adscale.de
imasdk.googleapis.com
imprammp.taboola.com
inventory.cliipa.com
irqs.ioam.de
js.adscale.de
js.stroeermediabrands.de
lb59.s400.meetrics.net
m.exactag.com
match.adsrvr.org
match.taboola.com
maxcdn.bootstrapcdn.com
media.oadts.com
ml314.com
native.adscale.de
onetag-geo.s-onetag.com
p.adsymptotic.com
p.rfihub.com
pagead2.googlesyndication.com
pd.sharethis.com
pixel.rubiconproject.com
ps.eyeota.net
px.powerlinks.com
rtb.mfadsrvr.com
s3.eu-central-1.amazonaws.com
s400.mxcdn.net
s8t.teads.tv
sb.scorecardresearch.com
script.ioam.de
securepubads.g.doubleclick.net
segments.company-target.com
server.cliipa.com
si.nuggad.net
ssl-econa.met.vgwort.de
ssl.1.damoh.giga.de
ssl.3.damoh.giga.de
static.cliipa.com
static.giga.de
sync.teads.tv
t.nativendo.de
t.teads.tv
tags.bluekai.com
tpc.googlesyndication.com
track.adform.net
tracker-adserver.ibillboard.com
tracking.m6r.eu
trc.taboola.com
ups.xplosion.de
uss.xplosion.de
vap3ams1.lijit.com
video-adserver.ibillboard.com
videos.giga.de
vidstat.taboola.com
www.dunkirkinception.com
www.facebook.com
www.giga.de
www.google-analytics.com
www.googletagmanager.com
www.googletagservices.com
www.storygize.net
x.bidswitch.net
xpl.theadex.com
yieldlove-d.openx.net
tpc.googlesyndication.com
104.108.39.228
104.109.82.87
104.111.230.142
104.111.241.32
104.111.246.233
104.16.88.26
104.18.100.194
107.178.241.34
108.128.71.27
109.71.25.30
130.211.13.252
136.243.5.11
143.204.211.231
143.204.214.111
143.204.214.42
143.204.214.51
144.76.115.247
151.101.113.108
151.101.113.194
151.101.114.2
151.101.114.49
151.101.14.2
151.101.14.217
151.101.14.49
152.199.21.32
152.199.22.24
161.156.66.178
172.217.21.198
172.217.22.2
178.19.65.130
178.19.70.100
178.19.72.10
178.19.72.20
18.185.176.108
18.194.251.73
18.195.251.148
18.195.39.206
18.196.130.47
185.22.221.117
185.64.189.112
188.40.16.106
192.132.33.46
193.0.160.128
193.46.63.75
194.213.222.29
2.18.232.7
2.18.233.180
2.18.233.67
2.18.234.21
2.18.234.72
2001:4de0:ac19::1:b:2a
208.100.17.184
208.100.17.186
216.58.206.2
23.43.115.95
2600:9000:2057:1a00:a:52eb:a100:93a1
2600:9000:2057:4600:1f:287:d20a:ce1
2600:9000:2057:e00:1c:8c89:a300:93a1
2600:9000:2057:f600:5:ae3a:ba00:93a1
2600:9000:20bb:5200:5:9a4c:9b00:93a1
2606:4700:20::6819:ad0d
2a00:1450:4001:815::200a
2a00:1450:4001:815::200e
2a00:1450:4001:816::2002
2a00:1450:4001:818::2002
2a00:1450:4001:819::2008
2a00:1450:4001:81a::200a
2a00:1450:4001:824::2002
2a00:1450:4001:825::2001
2a00:1450:4001:825::200e
2a00:1450:4002:807::2003
2a02:26f0:6c00:292::2c92
2a02:26f0:6c00:295::36f1
2a02:26f0:6c00:2bc::5f76
2a03:2880:f12d:83:face:b00c:0:25de
34.247.144.106
34.250.43.132
34.95.120.147
35.162.160.88
37.157.6.253
37.252.173.27
40.113.136.100
46.253.113.178
46.4.116.20
52.208.73.164
52.219.73.107
52.49.153.216
52.51.225.28
52.94.218.7
54.235.243.56
54.243.114.159
54.93.224.155
62.168.44.125
62.168.44.126
69.16.175.10
69.173.144.142
69.173.144.165
72.251.249.9
80.82.201.88
85.14.248.91
89.163.159.109
89.163.159.120
91.215.100.39
91.215.103.65
00dbbd574387178311a123fd5add4544605ba593ce9a2b711e6937555255fafd
01295ef44ccf7fdfaea9e0be7cc992544e0680b5fa8275ebc6b985734f89e867
0161504a412281d7c5e626b19e17e84295593b2c4e373826ca1e35a2579508bb
02a7b0524c2c00da3b4d41595a90ff9ebdd1662955c3919e412ca07ce79f118e
044855d5075e966e6f7a57b588d1e4ca643d7a0620f8f47e57a5d26b8a4459cb
0482a98d09daebc18a0d2e1ed8f748da5b0179e61223ed541101df1f4699f073
06bb0cf1f50c80214da364e7d78896cafcb1299643cee50320173985b0c81668
079c6baf748d3b543bd11d58558f93c92619dfc023b34b66a1c3648a4f01feee
0baa1b7da945fc3334d5683c8502c3da91529a8a35afaf0e591be34633adf609
0cd5de0454fa0c99b9f91a54e6768882973d31ff6f28871f09a882c35f69f74c
0dbbaa3c57cc19372d94124069c8c05ed2fc89f0f8c5755f6cf2e4d46e61c603
0e6f831bb3dbd78ef661b62aa1f6b4606bb13426d5a9378d061aa20354f24499
0fcdcfd13a1beb422d1068e345ba2f7a71595f093cf755768808f352c9aa8f47
10d8d42d73a02ddb877101e72fbfa15a0ec820224d97cedee4cf92d571be5caa
10eba73b3641332bde05fa8d6223e7017ac5207673602247c35f358ea89e3092
12cdcb56f128495591fd6b264ba187967a9e635891b09d8619681eb0116e8314
12eab7ed9516d8d3da05af9f6af5f31f280da236929d76b0a135cf7cce47ea82
18fb2b55cf8f17a3ecffab0fe2223921a6ccba4bffd6ed33a03ef3bf619a9148
1a560979c35508f894818e1f68012f0a56d6a6001c5dfb73ffeda325fcbafbeb
1b35bd23206a199b500fdb41aa9dd3ddedb9cbfdd2f1b1da79c5a3f916e737e5
1cffe994afb339e309c26d549a5672bc88ebb4d0b3389f970be98bf6049f08ed
1d620a0f7dc002fca2d94bf2da586b9198b9fa94a3b53e9eeb069833081f119d
1f6485f6195ee62977b95b9c83be099fccd1d96b49fe2c745feb18e0e47b7021
1f948056b50b22854611638a2a293c1f4eb05e9b72c29b2e3f41eefabd789788
20d9df1102585ece75fec7d91e5e34837cbe41fa16e0d7f29eab5142affd592f
230287b29094522a46f74f69cd0ee9dd174e73b9e6f67a0340798cd89a57a2f5
24e480e4659fbae818853a38f8a3036f529f539024dc3e772c0b594ce02ea9db
253a57352ea737e9a370ba2e50c20f70d058a71f6f6d1d11edb6dd53b88bbf75
265de6b562fdaf225b6713104b74342ffe97177ac67505d9e799e3acfa56352b
2b62326a6aafef471d4775604603e2404453f26c5c29d9f97f946227d23f4544
2d865c4f2d21f06c2c74d99850d1a387bc4b2f42add0b96c6297d039b884d46f
2dcadfbf3cb2289d13410e259b221f9f7815d2877ef8a4fb271ac5accd6edde2
2f58ccf14355919dfa5815bebd82d775161bdf2707480201bd8b2334778c0412
3240c7e00ccd21fbdd141f58cb238c68bb59180a35dfb79df8bbe57e0d13b0fc
328e90a318268aea96180cc31666ae6d6f79d90d078c123bc3d98ee08a192fb7
32c3ca88ea47d1c7ea1a1f688cae7b1fda20642254b79332055b8f74bb53d475
3320fb56f2fec9e760965a2ac7eb6bc6914270c6b7440cfcd0b652bbbab6d46c
35637b2df493cc121a7ffc815aa9fadf81ae3f0199e524af5ebe73c7f254e3b7
359159fe456a7b4879303b756d2880d20df5c922f040fa5866727c27b4858e5c
3756a2fb0bf85ff623355016a9fd82f089296029a7a6836049d30d3bc8a1dd56
375d0a37ed1af4a9783323fa1f3760dbdb5a61eea7a349875e317ba2978d4706
38306a61050b744f5681bff474aebdff051ae5682ddb4e84b414b56abd4c2ee2
390a28be2ca4bcea5b71fe050295281a1a8fc99175690cdd62de378190400acb
39b076e4bb4fab9b8a142499cf6155f8c128464974691a04de7e764f71b72618
3b1011d0eada4c1977bc4c2d1036d1d4618c4361e870bcd81057e60fd5771d9b
3b23054f385ff046b52da49f09543ca2a464820efb8f01a8cbbf0d999eaa4460
3b7b8a4b411ddf8db9bacc2f3aabf406f8e4c0c087829b336ca331c40adfdff1
3ddb12be58c8d1e4f15ed6bd23266bbcb098846570ef8fcfd819be9af32ea25c
3e519113583c968dd0daa3a70249fc54df7114ba2595bfe1644d2320e6d25aa5
3e82f5310fe957108f5b1f2c3c701763f296b335802dbc630704331974feb40c
3ec820f43f2c15f54966331d9209c9b39e506c4cbea0725110302d1a33111e12
3fafca44c304f7b6eab7180819c3732b59e55eac85e21e595cb75869498952e0
3fe01ed3233e7c570a8c116f864cfc8743e8374a2a611f8f72582204976a67e9
4021f17f04d1808610fd53096d9a57e97d86a7d8c94cd86b970640c4f99a70c6
40447fb0b243730fcdc6a8a094cf9d400ce1ec01e89ab80e15142ce294f49fa8
429e8f62ea6700f952db60ed9f95d5c6b4791a4d8cd2877424c8f17a1793a184
43a795a6f470126a6e79eca19330eab92301736e1d85d78d5e3db5956fd85630
442d9d314760bead3211eaafcb93d6ee3fba274c2f2db3f736cb7198a57e287d
45676a0091b9749d7a5c81a546266569cdbdbfb9bf9e4e6c5c24e5927cf70c21
480d2b8dc3750386bed19ba9e1e09a5ffe76493fac1d7fc77bc048f175b27a23
49b11c901e39d47f6124a05eb2a85b49828b1ab13045ff657d9a622df6445e72
4b5b6b15c6255109e06720cce42a06d3aead8b7874423d9c52cb0303212c25ef
4e0705327480ad2323cb03d9c450ffcae4a98bf3a5382fa0c7882145ed620e49
4e0e01b4aba79882fffcde76d931987fcaf38e709bc88be1d586295d43bea739
511c23178d504d371d22fb6899174f448db32523e9cacd2860306a2b3b8cc1f5
517e7d1c064ad5ca2f630bcec7317fed6608bfd1a5b53e645a891ecaad58cc7d
52b9e38359d28b25df0896fd56c1fe0e2dfa20e178baab3822213b49a5cdec97
53964478a7c634e8dad34ecc303dd8048d00dce4993906de1bacf67f663486ef
548f2d6f4d0d820c6c5ffbeffcbd7f0e73193e2932eefe542accc84762deec87
58e1df23acbfa4f51cd1040a1fb1a85ff9ba6366467bf024174f6192efcb2afc
599d6aec60d8329438a61c79ff5070d78c6836c74ef88e94d3afd96afca6d3d8
5a3f1dd74233f605e511f1b5b244bedf85ac88ba264caf4d6401bc7ec2017dcd
5aeb54f6727af87431148b611f64c2d9608b22f49b71cd313f5e023b0f6ee642
5d34aed5d72936e2857c26ca39adaf36b913d9459e489d9b1450036fa34b04cc
5ee5cb1d210bab87efd0825369e6bcbbdf3f9fcc0d1fbf227b0bc670e8a8d3dd
5f7c7709d592c7e19dc12152d7adce8a117f08af40a2facd69c19b495c9a1047
60ddc774c7b5fd0c01d169321a444da403d60c0042f6bee01b0c96f6e1535fda
61b9ac1203852340a156ea847aaf93c33ce3c1d6bfc2c55eb4b0f0716598eb48
63714e830757475f0137c03822188430715e636f0f465e75c9d5b4dd03bf9457
662831879bdbc4f42424d6f14598e0b8e9a5fe8712514ee52143f3b1ae0d4b27
662fa6bcdf71d8f92e29010d3e2e270e0071e5d19b1d14ce205654a78aa0a7a9
6839c2ac75e498a7b30b54255cd82ed3c5ccc05725820a91054365be0b388a5d
68986dd8f1ef6b05cbc0a2f532b87ea2f93ebe9ccd06f8265b15044dd1f4ab17
6adc3d4c1056996e4e8b765a62604c78b1f867cceb3b15d0b9bedb7c4857f992
6c7ed2d548e889f2bd271cc326596ba4ad529474c3881bf3fcbc39d8d3213706
6cbed10dafbec73cfc50203d43d95a933c1471ebac77cd2c7b05ba5bb16a296f
6ce766de94077b4e60303af4cc43beadb70f2dff773cae87eaffdd5e1383992a
6d6f482982f8f1a1814e279ff50df4ccc301533ca9655e4d080d6b90ec69d69e
6e56afb2fb736ea4a16ba443214ab2795a3cd76ffe5cc84827bdf7ceb26d67f7
6eeaa330e79de82579d573d85b1e62ee0017782c71406518af6b366b78c7981e
6f76f02fcac9bd9bc624d98a2b8f5235f21ca512b97bce59f207794583ce68cd
70e9747bd88728b49476bcf8c6bcdb0fab921b6095d517b57c2130cab898e7a1
71744bddd5fc4b7b5f6cab2b154593e133c6746d22dad0315b09aa31f183941f
727e7bf3927ec8720c5e1a40d85f7dc3c0c8b769cdfd6285b80fac63b7a659d1
73032accf72bdc46460f8cf7395082094db4444d5e41e7e9b2a2617b38b88847
732b00bf442b9e5abd0da8f00874bcf39e8d24487e44754cbcae0a5cd3d0a1fc
7600c92bf8d83aff07aa53256b691bb54818eaa7762c83afa7e43323df0b492a
760e4b5d62fd40555e5378e6216c0d4bec64c26bd39d3418b59e14c46ad0aa08
7725538fe2f71147bffeba7452b434c826aef9009666cb4360c605d0b2a91d1d
78f4a3114e3738eab1ffd31cbd3611435034197ecc40456f3ed43f82af4393d3
790407d643dfe21ecd773a44007cde3980d7a5eabd829ad1f06c2738b72fd1a2
794fe0486515f44881ce168acf0fb4ba478b6971fe3448ae96176f50075fadca
7c92ffc225aed56f82019862b155c8d84902352620250d029bbf653a3d7eab61
8123470f5549b50c979d1251dd4b27dc0c0db2cd15ad8f68c54858cc2ae57504
8337212354871836e6763a41e615916c89bac5b3f1f0adf60ba43c7c806e1015
856ec2798ca96e3fccd580167bf40b38a4addaf33d838d7387faa4f60f1e7e42
87083882cc6015984eb0411a99d3981817f5dc5c90ba24f0940420c5548d82de
893fa7339c102fb976d4065531644d8a8ac565fc84818a77600ad3ed5a72a26b
8b703b9f986241e1202672cb854dfa0c5d18d18d762ed927cc9f0ecbad7addfe
8e920612ce29a3290fc2edbaab7647470f21dda35cc1a350f9b8b362fc4d3ebe
8eb1b12b01dcfd0e7d7a431cb5daf50292db75a75516bed8758ba55a2c9de2f0
91ffef0e08af098862c5ee0b413103869650c929e0a65fbd29e5815e3b402609
92f513cad9ff11510e5454cba0bc05fa7a90cacd8b39f9fb0fd7838605559be5
92f5fdb2be157bac1c050ae74fdd9269b35c817ea16931ae9998c2dc27bfd0c4
9577813fe87cfe961576762bfb2d22a20545fa7611d71e9788283bc6bc72f6b0
9725b267c37b60d3a97a87216aa18ef1d1922138faa4f548e506fccfe5517f61
9b404c617f947b58e4c257e9d622512567b05283f1ce4894b11273982c534f71
9bd30b1e43178f3f44cea73f2c0a38523a0f68d791c37f9a152fa15f56dd302f
9d02d662da8a47fb5fb610b545007507b6017028043dbb63cd09ec897d3b9627
9d68d3cac9e1f807599c5c9d388d900f1108014535f9368705a0c6a25e73664f
9efa53ec1a261a8576a66a71befaf9d03c1a108aac36271f4599b87597b8a71e
a0611e486e87faf678d732cede5f2b94c26550f87a9e8baf6393ac3e8f96268b
a065920df8cc4016d67c3a464be90099c9d28ffe7c9e6ee3a18f257efc58cbd7
a2c366aa8391d21ebef20168baf46a06dda027007d0745cf85741d7318295654
a70bd52b04b0429181c36c9ea8b56d449c45945555f4f31d00fb66e3f76d5b2e
a7a3688d3c99ee687cf6ea9a621434b4dacfd08d50a14a646ffd0c9d472b46c5
a9b30bb4dd7c1d5d8083571fc9ec8fa25918c980a3682c42325b58e939d31a6d
aab674e9d8db3a0e62eab505f85284fa5c757e31cf0d56f6017a48e2e28ea30a
aad43962cf32b81533449a96ca4937f1399e018c07822a86450a2ba0a5d7794a
ab0acc5efcec79c1da64382dc76b4e651051fcf34aef688d8cd2a7d34eb19f08
ab8bbbaf028510d8b119cce741f0c2cc94816dcc113d83cac81a6aade6a76fa9
ad16e1b37490fca28df99d039d6373d2fee4d894fcd279d95b90ae872f4d860f
ae71e7fca9bdcd8f67f80101dfb15e325b9f38c43e46de5c28b268268c8feced
ae8f9dd465ab424d0dd4f81f7ba9ec5029f6736e090c3f33b5f0fa0c0ecc47dc
afe0dcfca292a0fae8bce08a48c14d3e59c9d82c6052ab6d48a22ecc6c48f277
b0a55cd6ac476adf475714e621d8a8c3eedff93c7fa90698dc80179bd5fae956
b1442e85b03bdcaf66dc58c7abb98745dd2687d86350be9a298a1d9382ac849b
ba78228683af43e25c31f85ad078af375af1cab55f5b897af66556565e9b178c
bd18a6f807406f321e7ee81e8e4e19890ebc33df1cd136d46b22d894f0144f6e
bd3bc3097edbb84fffd054526645ecc935588d441f13e4612871ceab14d3740c
be701739dbd531e7a05df6dea81b4666d177b2ef14503eba47e7bf220959788d
c09055f0d3ce5ac45f886c935226d1e4cb0f7488525e9f8b298f26fc0171e5a8
c1f4b48cf64b1d62f7ac56e47f4654cc28d949cdb83d9a0fa7be561c498b20d7
c7e6b1dcc86227fc39b041454dbe6fbbab2efee73f711d5c9e9e420f605d9415
c82374d4dce9d17bd18331dfb61f597894994e818486faefac7b1ada908c6813
c86b97039dee366847426e8ecac1d0dcdb158aea76b2d00a74eb479b05a2a5cb
c959d175ccf2a5f270b3ec797d22c21c2fb414e5ddb0c4e7d18cf8e7c3e13e14
cb992eae898417162c48b37712991d9ad8053c4a64fce51aff195edc69dc35f2
cddc04822e3d360c8d4ce7041294700199c5c9e3395ae7c21a311a112ae0526f
cf4724b2f736ed1a0ae6bc28f1ead963d9cd2c1fd87b6ef32e7799fc1c5c8bda
d0fd74148f4cbe78bd0e6328dc5ce5955f0a0ecdb1eb2919da4a7e596ac65912
d21021784cda31eeae5c8295e047a14bda6ed5a9b5963fca9e7ceb398a9c9179
d6cbd7921bed348f24d7aed7d9b3c0f1b63c160b79a120a67bd03a9e9fba0dd1
d7a4d52f0d11ac4b648bd9199feae31ea441cd3cf0677529a4d2f0d20b7a5913
d8381e66783011957eabadb622d7899061bf93e78fff38ebfe00ab743d6c8e60
dbb67c620eaabf6679a314db18d3ae43037aef71ab27422e6feec08ee987cc0a
dc111a70984a9eda00752b06277113029ef288f1125c31eff2477413e15e8aa4
dc7e04c832ffdf83f88939ad31570584f01e2bb63b91e5daf004f43e0ebe7b91
de63ad1c3fb42acda070c53b705a18d969c48ed0bb2bcda26fcaacc3b8dc1989
de9d3fd0eb948bd294477d0eda60a73b85caff1794803530d0463193a113da98
df9a8ea808eab2cfe30957bbf9979a1c2b892c6a074c2a848661aa4cf89c6416
e1ba287125c479a4febea7faddf96e9c99c7f6f54aaea9e1780852cf8af9611c
e3636151f0d2d72818ea36045a5c802a701eeb257644465d2a4ad70a6305c939
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
e7d01a791944bac943f828259d192e75e8f52a3285b91b28151af60575801b93
ea03bfd7fdda1eac185ebc3e8e74b33065b04c8e0adc48cbbd4136748dbd2742
ed12abebf74d61e8a6846dd87861bbe0c58355d207ef453eabd28a82e0519496
ede401f1ed56b31a6f0f795b0b8f1a9948878459b450d5f9eea82051c2e24d40
ee441245ef85f538030acf5e534d1cf2664c18289cec8cc0d84656ffb0e0a95d
ef1955ae757c8b966c83248350331bd3a30f658ced11f387f8ebf05ab3368629
f1379a9c047773af19ec6c4f9a465e0147cbabc785342c01110b43304179196a
f23d04df5067a82ed44a032393efa3b0fcbe492907b2fb72f77466832e1b8aed
f2f6180a65038b9ef6eb958ba11c1d049f52081b6550dc396c4f0a887f31a61f
f49737b6c3e21187c8bbeb786a2657904a47ba34b42f12752f4e7fafb5889e7a
f50167bee40cd7fdd6c623efb794e0edddec7de87ef71f48c8b1b1413e1dfc4a
f68019eb4b4e5933301d4ee75969e0cb94ed8333bf514630fa749eb9c3e483c9
f6c88d72ddbc86769c79cd60c2fbffac3679934dca3c2173dc8f919bcbbbfd64
f7f62a0b73e1aa131796590006b45b4275f3f0b8b2c31c7ca387efafc1c11328
f94e032d892cd03ec8d2e87a139d5598ff586ffd4ddccd14d0cef518730c0821
fba9cccffa2a53735939d3d1cacb0379003f349f45ca514d629fbabd02fd4db8