URL: http://kateto.net/network-visualization
Submission: On December 27 via manual from IE

Summary

This website contacted 7 IPs in 2 countries across 5 domains to perform 128 HTTP transactions. The main IP is 198.71.233.15, located in Scottsdale, United States and belongs to AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US. The main domain is kateto.net.
This is the only time kateto.net was scanned on urlscan.io!

urlscan.io Verdict: No classification

Domain & IP information

IP Address AS Autonomous System
117 198.71.233.15 26496 (AS-26496-...)
4 2a00:1450:400... 15169 (GOOGLE)
4 2a00:1450:400... 15169 (GOOGLE)
1 2a00:1450:400... 15169 (GOOGLE)
2 4 143.204.214.44 16509 (AMAZON-02)
128 7
Domain Requested by
116 kateto.net kateto.net
4 mathjax.rstudio.com 2 redirects www.kateto.net
4 fonts.gstatic.com kateto.net
4 www.google-analytics.com kateto.net
www.googletagmanager.com
www.kateto.net
1 www.googletagmanager.com www.kateto.net
1 www.kateto.net kateto.net
128 6
Subject Issuer Validity Valid
*.google-analytics.com
Google Internet Authority G3
2018-12-04 -
2019-02-26
3 months crt.sh
mathjax.rstudio.com
Amazon
2018-03-07 -
2019-04-07
a year crt.sh

This page contains 6 frames:

Primary Page: http://kateto.net/network-visualization
Frame ID: 180E6039FA7E0507CFABCB600073D94D
Requests: 122 HTTP requests in this frame

Frame: http://www.kateto.net/polnet2018
Frame ID: AA2919D33577E7FD8DCB01EE86CC1EA0
Requests: 106 HTTP requests in this frame

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

Frame: data://truncated
Frame ID: 60DD0711EE00446658580463A1961F97
Requests: 1 HTTP requests in this frame

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

Frame: data://truncated
Frame ID: 3805D7E5A3F4A049D37CA1ECDD571928
Requests: 1 HTTP requests in this frame

Screenshot


Detected technologies

Overall confidence: 100%
Detected patterns
  • html /<link rel=["']stylesheet["'] [^>]+wp-(?:content|includes)/i
  • script /\/wp-includes\//i
  • meta generator /WordPress( [\d.]+)?/i

Overall confidence: 100%
Detected patterns
  • html /<link rel=["']stylesheet["'] [^>]+wp-(?:content|includes)/i
  • script /\/wp-includes\//i
  • meta generator /WordPress( [\d.]+)?/i

Overall confidence: 100%
Detected patterns
  • html /<link[^>]* href=[^>]+font-awesome(?:\.min)?\.css/i

Overall confidence: 100%
Detected patterns
  • env /^_fusion/i

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

Overall confidence: 100%
Detected patterns
  • env /^Modernizr$/i

Overall confidence: 100%
Detected patterns
  • env /^twemoji$/i

Overall confidence: 100%
Detected patterns
  • script /jquery.*\.js/i
  • env /^jQuery$/i

Page Statistics

128
Requests

5 %
HTTPS

60 %
IPv6

5
Domains

6
Subdomains

7
IPs

2
Countries

6857 kB
Transfer

20718 kB
Size

0
Cookies

Redirected requests

There were HTTP redirect chains for the following requests:

Request Chain 5
  • http://www.google-analytics.com/analytics.js HTTP 307
  • https://www.google-analytics.com/analytics.js
Request Chain 229
  • https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML HTTP 302
  • https://mathjax.rstudio.com/2.7.2/MathJax.js?config=TeX-AMS-MML_HTMLorMML
Request Chain 230
  • https://mathjax.rstudio.com/latest/config/TeX-AMS-MML_HTMLorMML.js?V=2.7.2 HTTP 302
  • https://mathjax.rstudio.com/2.7.2/config/TeX-AMS-MML_HTMLorMML.js?V=2.7.2

128 HTTP transactions

Resource
Path
Size
x-fer
Type
MIME-Type
Primary Request network-visualization
kateto.net/
60 KB
12 KB
Document
General
Full URL
http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
d9ff5d838ee8c44c5641e1788bcab3c7d5f33886c7c581e9d27a496fa010a6fc

Request headers

Host
kateto.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_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding
gzip, deflate
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

X-Pingback
http://kateto.net/xmlrpc.php
Content-Encoding
gzip
Content-Type
text/html; charset=UTF-8
X-Port
port_10098
X-Cacheable
YES:Forced
Content-Length
11944
Accept-Ranges
bytes
Date
Thu, 27 Dec 2018 07:35:28 GMT
Age
79174
Vary
Accept-Encoding, User-Agent
X-Cache
cached
X-Cache-Hit
HIT
X-Backend
all_requests
cv.css
kateto.net/wp-content/plugins/content-views-query-and-display-post-page/public/assets/css/
76 KB
12 KB
Stylesheet
General
Full URL
http://kateto.net/wp-content/plugins/content-views-query-and-display-post-page/public/assets/css/cv.css?ver=2.1.2
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
92f78af020e68a9cc550f429e828bc83528171d5d21e62e00481964f40275bda

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
text/css,*/*;q=0.1
Referer
http://kateto.net/network-visualization
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:28 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:55:32 GMT
X-Backend
all_requests
Cache-Control
max-age=86400
Age
91357
ETag
"12fb5-57967a4876932-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
text/css
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
11709
Expires
Thu, 27 Dec 2018 06:12:51 GMT
cvpro.min.css
kateto.net/wp-content/plugins/pt-content-views-pro/public/assets/css/
34 KB
8 KB
Stylesheet
General
Full URL
http://kateto.net/wp-content/plugins/pt-content-views-pro/public/assets/css/cvpro.min.css?ver=4.2
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
844c8d9866e03156fdec51751d83788fea59ecc73d28ae491d413363084cc325

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
text/css,*/*;q=0.1
Referer
http://kateto.net/network-visualization
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:28 GMT
Content-Encoding
gzip
Last-Modified
Thu, 05 Jan 2017 14:22:19 GMT
X-Backend
all_requests
Cache-Control
max-age=86400
Age
91357
ETag
"876a-54559a10a34e4-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
text/css
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
8274
Expires
Thu, 27 Dec 2018 06:12:51 GMT
style.min.css
kateto.net/wp-includes/css/dist/block-library/
25 KB
5 KB
Stylesheet
General
Full URL
http://kateto.net/wp-includes/css/dist/block-library/style.min.css?ver=5.0.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
57a96eb1ccacae26e452d6e147fb29ca8ca20ce183970a3a4fb5febf8662fcc7

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
text/css,*/*;q=0.1
Referer
http://kateto.net/network-visualization
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:28 GMT
Content-Encoding
gzip
Last-Modified
Mon, 10 Dec 2018 05:38:46 GMT
X-Backend
all_requests
Cache-Control
max-age=86400
Age
408343
ETag
"63e3-57ca460f65278-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
text/css
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
4281
Expires
Sun, 23 Dec 2018 14:09:45 GMT
style.min.css
kateto.net/wp-content/themes/Avada/assets/css/
204 KB
32 KB
Stylesheet
General
Full URL
http://kateto.net/wp-content/themes/Avada/assets/css/style.min.css?ver=5.7.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
7e2f4d1f00797f7c2b4d30f46b2dc6a4a9d3a09d32bce2c33eeb63e36c79d915

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
text/css,*/*;q=0.1
Referer
http://kateto.net/network-visualization
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:28 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:32 GMT
X-Backend
all_requests
Cache-Control
max-age=86400
Age
91357
ETag
"32fc9-57967aba89cc4-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
text/css
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
32191
Expires
Thu, 27 Dec 2018 06:12:51 GMT
fd25c93c724cedfd7a27353375b93f47.min.css
kateto.net/wp-content/uploads/fusion-styles/
616 KB
77 KB
Stylesheet
General
Full URL
http://kateto.net/wp-content/uploads/fusion-styles/fd25c93c724cedfd7a27353375b93f47.min.css?ver=5.0.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
c92fdf100dca5fb56a0400e89db3f5041216c0bfb768d5bdf1dc68453bd1a845

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
text/css,*/*;q=0.1
Referer
http://kateto.net/network-visualization
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:28 GMT
Content-Encoding
gzip
Last-Modified
Wed, 07 Nov 2018 21:41:31 GMT
X-Backend
all_requests
Cache-Control
max-age=86400
Age
408343
ETag
"9a090-57a19fb40df59-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
text/css
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
78681
Expires
Sun, 23 Dec 2018 14:09:45 GMT
analytics.js
www.google-analytics.com/
Redirect Chain
  • http://www.google-analytics.com/analytics.js
  • https://www.google-analytics.com/analytics.js
43 KB
17 KB
Script
General
Full URL
https://www.google-analytics.com/analytics.js
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
2a00:1450:4001:81d::200e , Ireland, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Golfe2 /
Resource Hash
b688a3bcd1297cc0fe08e6e52fea14ba9108ee4b9a2052c03e7bac6e19347255
Security Headers
Name Value
Strict-Transport-Security max-age=10886400; includeSubDomains; preload
X-Content-Type-Options nosniff

Request headers

Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

strict-transport-security
max-age=10886400; includeSubDomains; preload
content-encoding
gzip
x-content-type-options
nosniff
last-modified
Mon, 05 Nov 2018 21:10:09 GMT
server
Golfe2
age
1267
date
Thu, 27 Dec 2018 07:14:21 GMT
vary
Accept-Encoding
content-type
text/javascript
status
200
cache-control
public, max-age=7200
timing-allow-origin
*
alt-svc
quic=":443"; ma=2592000; v="44,43,39,35"
content-length
17404
expires
Thu, 27 Dec 2018 09:14:21 GMT

Redirect headers

Location
https://www.google-analytics.com/analytics.js
Non-Authoritative-Reason
HSTS
wp-emoji-release.min.js
kateto.net/wp-includes/js/
12 KB
5 KB
Script
General
Full URL
http://kateto.net/wp-includes/js/wp-emoji-release.min.js?ver=5.0.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
d2458b9fd9089fdcb9de317093e004ef3a65597dc68b9adfdeb15a7c9968d0d5

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:28 GMT
Content-Encoding
gzip
Last-Modified
Wed, 26 Sep 2018 18:12:44 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
405832
ETag
"2efa-576ca2b3d0535-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
4382
Expires
Sat, 29 Dec 2018 14:51:36 GMT
frontend.min.js
kateto.net/wp-content/plugins/google-analytics-for-wordpress/assets/js/
8 KB
3 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/google-analytics-for-wordpress/assets/js/frontend.min.js?ver=7.2.0
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
24c230989b1d54e076804ffa5ac83d522f12deaf7f16b6495964ae63a897709f

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:28 GMT
Content-Encoding
gzip
Last-Modified
Wed, 26 Sep 2018 17:49:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91357
ETag
"1f9b-576c9d88067d8-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
2468
Expires
Wed, 02 Jan 2019 06:12:51 GMT
jquery.js
kateto.net/wp-includes/js/jquery/
95 KB
33 KB
Script
General
Full URL
http://kateto.net/wp-includes/js/jquery/jquery.js?ver=1.12.4
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
fc48d1d80ece71a79a7b39877f4104d49d3da6c3665cf6dc203000fb7df4447e

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:28 GMT
Content-Encoding
gzip
Last-Modified
Wed, 26 Sep 2018 18:12:44 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91228
ETag
"17ba0-576ca2b3796fd-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
33766
Expires
Wed, 02 Jan 2019 06:15:00 GMT
jquery-migrate.min.js
kateto.net/wp-includes/js/jquery/
10 KB
4 KB
Script
General
Full URL
http://kateto.net/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.4.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
48eb8b500ae6a38617b5738d2b3faec481922a7782246e31d2755c034a45cd5d

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:28 GMT
Content-Encoding
gzip
Last-Modified
Wed, 26 Sep 2018 18:12:44 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91357
ETag
"2748-576ca2b376673-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
4014
Expires
Wed, 02 Jan 2019 06:12:51 GMT
academic-rss-500x383.jpg
kateto.net/wp-content/uploads/2018/01/
33 KB
33 KB
Image
General
Full URL
http://kateto.net/wp-content/uploads/2018/01/academic-rss-500x383.jpg
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
df495acc38f016f771fb3aca27b9aa6a8a59ea8b6060b3125518077bf6a6f1b0

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
image/webp,image/apng,image/*,*/*;q=0.8
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Last-Modified
Fri, 15 Jun 2018 03:41:30 GMT
X-Backend
all_requests
Cache-Control
max-age=5184000
Age
1904725
ETag
"8281-56ea5fdd11edc"
X-Cacheable
YES
X-Cache
cached
Content-Type
image/jpeg
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
33409
Expires
Sun, 03 Feb 2019 06:30:05 GMT
NetworkData3-500x383.png
kateto.net/wp-content/uploads/2016/05/
258 KB
258 KB
Image
General
Full URL
http://kateto.net/wp-content/uploads/2016/05/NetworkData3-500x383.png
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
81e6fd94ffc99d9976c1e788f37f29dc634362ea19e429169a3164896a7c3bca

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
image/webp,image/apng,image/*,*/*;q=0.8
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Last-Modified
Fri, 15 Jun 2018 03:41:31 GMT
X-Backend
all_requests
Cache-Control
max-age=5184000
Age
1904725
ETag
"4086c-56ea5fdde1abc"
X-Cacheable
YES
X-Cache
cached
Content-Type
image/png
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
264300
Expires
Sun, 03 Feb 2019 06:30:05 GMT
Gephi_R_Sunbelt2016-500x383.png
kateto.net/wp-content/uploads/2016/04/
311 KB
312 KB
Image
General
Full URL
http://kateto.net/wp-content/uploads/2016/04/Gephi_R_Sunbelt2016-500x383.png
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
fcc1283f60eb0695145bdc56fd26f702831379eedfa23b2869bfd45b968777b1

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
image/webp,image/apng,image/*,*/*;q=0.8
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Last-Modified
Fri, 15 Jun 2018 03:41:32 GMT
X-Backend
all_requests
Cache-Control
max-age=5184000
Age
1904725
ETag
"4dde2-56ea5fded1647"
X-Cacheable
YES
X-Cache
cached
Content-Type
image/png
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
318946
Expires
Sun, 03 Feb 2019 06:30:05 GMT
network-viz-500x383.png
kateto.net/wp-content/uploads/2016/03/
449 KB
450 KB
Image
General
Full URL
http://kateto.net/wp-content/uploads/2016/03/network-viz-500x383.png
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
32362a2b46675ff16a132b76f4a21d32733b60e90a8f7da6a605ed126ae5a266

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
image/webp,image/apng,image/*,*/*;q=0.8
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Last-Modified
Fri, 15 Jun 2018 03:41:34 GMT
X-Backend
all_requests
Cache-Control
max-age=5184000
Age
1904725
ETag
"70598-56ea5fe13485e"
X-Cacheable
YES
X-Cache
cached
Content-Type
image/png
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
460184
Expires
Sun, 03 Feb 2019 06:30:05 GMT
igraph-500x383.jpg
kateto.net/wp-content/uploads/2016/01/
41 KB
42 KB
Image
General
Full URL
http://kateto.net/wp-content/uploads/2016/01/igraph-500x383.jpg
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
c66ab93736d3541c71a2049875de64c0c51a2ab09f7c73f0bd17e4b33a7272df

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
image/webp,image/apng,image/*,*/*;q=0.8
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Last-Modified
Fri, 15 Jun 2018 03:41:34 GMT
X-Backend
all_requests
Cache-Control
max-age=5184000
Age
1904697
ETag
"a54a-56ea5fe149e25"
X-Cacheable
YES
X-Cache
cached
Content-Type
image/jpeg
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
42314
Expires
Sun, 03 Feb 2019 06:30:33 GMT
Map-terms-Rep-Dem-05-norm-2-notxt-500x383.png
kateto.net/wp-content/uploads/2015/06/
58 KB
59 KB
Image
General
Full URL
http://kateto.net/wp-content/uploads/2015/06/Map-terms-Rep-Dem-05-norm-2-notxt-500x383.png
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
07d387600994476b37f86913b8e6c91dc6a0fa59dd5b9f149ca3900df2d5614b

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
image/webp,image/apng,image/*,*/*;q=0.8
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Last-Modified
Sun, 17 Jun 2018 21:02:49 GMT
X-Backend
all_requests
Cache-Control
max-age=5184000
Age
1904723
ETag
"e9a2-56edcc58dea0a"
X-Cacheable
YES
X-Cache
cached
Content-Type
image/png
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
59810
Expires
Sun, 03 Feb 2019 06:30:07 GMT
cv.js
kateto.net/wp-content/plugins/content-views-query-and-display-post-page/public/assets/js/
22 KB
7 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/content-views-query-and-display-post-page/public/assets/js/cv.js?ver=2.1.2
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
98758f3b3cf6f03a326e5d5ee863c30710610d762dd9718b41e2605187cf7f87

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:28 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:55:32 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91354
ETag
"59b0-57967a486ebce-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
6600
Expires
Wed, 02 Jan 2019 06:12:54 GMT
cvpro.min.js
kateto.net/wp-content/plugins/pt-content-views-pro/public/assets/js/
69 KB
23 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/pt-content-views-pro/public/assets/js/cvpro.min.js?ver=4.2
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
299cebdfa1abd478185784f13688f6560f0f03e88e259a21414f5b0088e122a4

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:28 GMT
Content-Encoding
gzip
Last-Modified
Thu, 05 Jan 2017 14:22:19 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91354
ETag
"112d6-54559a10a5d9a-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
23223
Expires
Wed, 02 Jan 2019 06:12:55 GMT
isotope.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
34 KB
10 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/isotope.js?ver=3.0.4
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
57f3316599c6cb279ffb4fb239393035f0bb68fb16302f9bfb2b122acc282e4a

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:28 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91353
ETag
"887f-57967abf0208a-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
9749
Expires
Wed, 02 Jan 2019 06:12:55 GMT
jquery.infinitescroll.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
21 KB
12 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/jquery.infinitescroll.js?ver=2.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
b7be203f69d78fc9333697062bac50e776a77e549c326aeeb2f619f799f054d4

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:28 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91227
ETag
"524c-57967abf000df-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
11990
Expires
Wed, 02 Jan 2019 06:15:01 GMT
avada-faqs.js
kateto.net/wp-content/plugins/fusion-core/js/min/
979 B
793 B
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-core/js/min/avada-faqs.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
b1a7be6cf478f7d4228fc455a370f1be8ac6e37acade5fd382c1e1992b51433f

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:28 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 01:00:12 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91227
ETag
"3d3-57967b531dcc5-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
373
Expires
Wed, 02 Jan 2019 06:15:01 GMT
modernizr.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
13 KB
5 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/modernizr.js?ver=3.3.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
dd1fad41f2891919876ec7b3fc3057b7b89fad8e8ff8b5d03815838bb8e7e497

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:28 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91227
ETag
"3322-57967abefcc3d-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
5164
Expires
Wed, 02 Jan 2019 06:15:01 GMT
jquery.fitvids.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
2 KB
1 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/jquery.fitvids.js?ver=1.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
3c0bfb5a3db6967755accf4f7d045f8529e546a3b713281cac8a3088b51f6bda

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:28 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91227
ETag
"6eb-57967abf05060-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
793
Expires
Wed, 02 Jan 2019 06:15:01 GMT
fusion-video-general.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
6 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/fusion-video-general.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
b9996b32165e1ee5de0a45e370b05addb9fb6aec3fb6141c73c1cecfda4de66d

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:28 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91227
ETag
"166f-57967abef2477-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1824
Expires
Wed, 02 Jan 2019 06:15:02 GMT
jquery.ilightbox.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
81 KB
25 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/jquery.ilightbox.js?ver=2.2.3
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
385ed18e3673b41dfdee7ac701af87a1a7b29b8ef4bc095ded29f9bdd5775b9b

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91226
ETag
"14290-57967abef5697-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
25312
Expires
Wed, 02 Jan 2019 06:15:02 GMT
jquery.mousewheel.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
1006 B
908 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/jquery.mousewheel.js?ver=3.0.6
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
dd5ceb190d2852ad363c91ce58749aff3a6dd46e0c9fa299cdf9a8ecfcfaca7a

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91350
ETag
"3ee-57967abf06327-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
488
Expires
Wed, 02 Jan 2019 06:12:59 GMT
fusion-lightbox.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/
6 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/fusion-lightbox.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
ab1a025da75807a57c2e8ecfcc301f78bd002f4916f992dc520e043a25d47434

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91225
ETag
"1935-57967abeb4815-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1847
Expires
Wed, 02 Jan 2019 06:15:03 GMT
imagesLoaded.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
7 KB
3 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/imagesLoaded.js?ver=3.1.8
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
447f8762021b0e2726cea6977b09f5448684bf078d66cf5718f681bd2e1cec4f

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91221
ETag
"1a98-57967abeeff8d-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
2255
Expires
Wed, 02 Jan 2019 06:15:07 GMT
packery.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
13 KB
4 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/packery.js?ver=2.0.0
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
0f158ed2f9a3b0126d41b4013a4f746eea09663c6214b79877e19016129aa4e6

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91226
ETag
"35cc-57967abef9b75-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
4169
Expires
Wed, 02 Jan 2019 06:15:03 GMT
avada-portfolio.js
kateto.net/wp-content/plugins/fusion-core/js/min/
12 KB
3 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-core/js/min/avada-portfolio.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
180677466c59e0765b841f9f10c92f5c9c6f79a581f24694a0e1cfe2dcb5160b

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 01:00:12 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91225
ETag
"31f6-57967b531c780-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
2906
Expires
Wed, 02 Jan 2019 06:15:03 GMT
fusion-recent-posts.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
4 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-recent-posts.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
6e746a03bc3330d32fb71d7fd89fc6aa4de6214664ca21bf6b643bd444cc1415

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91289
ETag
"10a7-57967b478d84f-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1253
Expires
Wed, 02 Jan 2019 06:13:59 GMT
bootstrap.collapse.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
3 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/bootstrap.collapse.js?ver=3.1.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
831b15eff680729ab2b4f6b849f09d7dd2e1846d2a37a011b89e03f13cc572dd

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91225
ETag
"d42-57967abeff697-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1151
Expires
Wed, 02 Jan 2019 06:15:04 GMT
fusion-equal-heights.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/
1 KB
891 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/fusion-equal-heights.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
29da3233a309dd74c144f872b66ba470472579a0aca0e2362f5c5cc8f0e7a385

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91224
ETag
"501-57967abeb9db1-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
471
Expires
Wed, 02 Jan 2019 06:15:05 GMT
fusion-toggles.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
2 KB
1 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-toggles.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
f98a3db3d376370ded7f085974e5b16af1c56904159fe522ebb0bbced062038b

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 01:00:00 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91224
ETag
"9a8-57967b47970d4-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
810
Expires
Wed, 02 Jan 2019 06:15:05 GMT
cssua.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
3 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/cssua.js?ver=2.1.28
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
4025727c5cdf69ebebb78196e38a76144968ff27b9dfe789968f23f69d51e2cd

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91224
ETag
"d0d-57967abef485f-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1481
Expires
Wed, 02 Jan 2019 06:15:05 GMT
jquery.waypoints.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
7 KB
3 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/jquery.waypoints.js?ver=2.0.3
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
173a42f3468eebc25191bc4aaa1e86fb422b56337682ce4b38bd2ca4229b8543

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91224
ETag
"1d57-57967abefb937-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
2416
Expires
Wed, 02 Jan 2019 06:15:05 GMT
fusion-waypoints.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/
447 B
687 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/fusion-waypoints.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
051295687c256d4bf401a70a2fd455ee85f8b7272e2cd133c00a40ba282dab4c

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91223
ETag
"1bf-57967abeb5d6d-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
267
Expires
Wed, 02 Jan 2019 06:15:05 GMT
fusion-animations.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
1 KB
897 B
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-animations.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
576f08290e6492215c31e059a5b8dbc6b9d9c801886d44ecab93624f070acb07

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91223
ETag
"430-57967b4789d9e-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
477
Expires
Wed, 02 Jan 2019 06:15:05 GMT
jquery.fade.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
1 KB
865 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/jquery.fade.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
0b6b1cd454ac76a80fe115f90ee1950f48e6c2a143e4a96176adbb520c40c80b

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91337
ETag
"48e-57967abf0471f-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
445
Expires
Wed, 02 Jan 2019 06:13:12 GMT
jquery.requestAnimationFrame.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
695 B
761 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/jquery.requestAnimationFrame.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
346467f0ba1b9a43b33c78f0663942aa96d5cc8c8064e470665d9308c45a3d91

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91223
ETag
"2b7-57967abef3670-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
341
Expires
Wed, 02 Jan 2019 06:15:05 GMT
fusion-parallax.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
10 KB
3 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/fusion-parallax.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
8cab7e21e2a3105ef06fd43c875a614bc0ffd170ab3f8bffd2044c03ed44bcea

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91223
ETag
"260f-57967abef1b5a-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
2365
Expires
Wed, 02 Jan 2019 06:15:06 GMT
fusion-video-bg.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
5 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/fusion-video-bg.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
57376344235f987c935c8fedbf63597857d4c2357ffd48a0d4a7dfa4b7eb4794

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91223
ETag
"14ce-57967abf0348f-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1969
Expires
Wed, 02 Jan 2019 06:15:06 GMT
fusion-container.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
9 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-container.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
4e935df82f460a420d80cde9d91b1b145e1bee3bcc1bb7d31a074d9d7f37b5b7

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91222
ETag
"25b5-57967b479032b-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1919
Expires
Wed, 02 Jan 2019 06:15:07 GMT
jquery.cycle.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
26 KB
8 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/jquery.cycle.js?ver=3.0.3
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
ef01f6c9d515df0151de5d55bf3a60ea0f5b0b5387af0f602f1310851828f114

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91222
ETag
"6661-57967abef6201-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
7523
Expires
Wed, 02 Jan 2019 06:15:07 GMT
fusion-testimonials.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
1 KB
852 B
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-testimonials.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
445ea6c21f8315829dc221101d38913120bd14090456441789562763763dc7b1

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91222
ETag
"42e-57967b479286e-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
432
Expires
Wed, 02 Jan 2019 06:15:07 GMT
bootstrap.transition.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
752 B
798 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/bootstrap.transition.js?ver=3.3.6
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
f6524d3bc9f7ad5378a1957b540a60fe820e502ce1474bbb053d6b56e89a9102

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91222
ETag
"2f0-57967abef2d96-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
378
Expires
Wed, 02 Jan 2019 06:15:07 GMT
bootstrap.tab.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
1 KB
1 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/bootstrap.tab.js?ver=3.1.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
38422528775302f2f6c4950b00d3209665aa13bd8a64727267b8b1ce50712fc9

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91335
ETag
"5d7-57967abefa56b-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
716
Expires
Wed, 02 Jan 2019 06:13:14 GMT
fusion-tabs.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
4 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-tabs.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
09f06f00d804cf6abd02fef131e6ce9f79401ba96ee40324dfd28fa286498e58

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91222
ETag
"11c9-57967b478c066-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1149
Expires
Wed, 02 Jan 2019 06:15:07 GMT
fusion-column-bg-image.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
1 KB
943 B
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-column-bg-image.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
e8a066351f19240f0fec8b70708aa8dec4928a741ef520a76e90a4ad75f1ec0b

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91221
ETag
"53a-57967b4791b62-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
523
Expires
Wed, 02 Jan 2019 06:15:08 GMT
fusion-column.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
2 KB
761 B
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-column.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
9ae3cc738ad24787d1be7330037d215c1383e2b15dcde127431f915e9dbcba1c

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91221
ETag
"7c5-57967b478b455-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
341
Expires
Wed, 02 Jan 2019 06:15:08 GMT
jquery.appear.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
3 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/jquery.appear.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
08370201daee47824e2271d06f0300abe6dffa78df2a5913eae613bc9f375bcd

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91333
ETag
"bbc-57967abef124b-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1331
Expires
Wed, 02 Jan 2019 06:13:16 GMT
fusion-progress.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
786 B
776 B
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-progress.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
b6443f12a07a199cced0c9d1506093b41835cd831937332df384a781eca8977f

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91221
ETag
"312-57967b47885cf-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
356
Expires
Wed, 02 Jan 2019 06:15:08 GMT
fusion-syntax-highlighter.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
2 KB
1 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-syntax-highlighter.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
0d91ab1e931555efe756f470940e387c4086500cda43af0228c86361f0d9fc7c

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91220
ETag
"76f-57967b478795b-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
707
Expires
Wed, 02 Jan 2019 06:15:09 GMT
jquery.fusion_maps.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
6 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/jquery.fusion_maps.js?ver=2.2.2
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
ff5c3d99a50a9658489d88f592813f9fcaaf929f6b51ff882efca248857371f0

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91325
ETag
"1632-57967abef6c25-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1941
Expires
Wed, 02 Jan 2019 06:13:24 GMT
fusion-google-map.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/
325 B
641 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/fusion-google-map.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
4a768695e2001c056e6f8f20f4904e49bbd0471d060b47bbd3cf026ac74e8d5d

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91220
ETag
"145-57967abeb3004-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
221
Expires
Wed, 02 Jan 2019 06:15:09 GMT
jquery.countTo.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/library/
945 B
850 B
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/library/jquery.countTo.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
0c2d6aa51d3d04b3e548b51fec1d00d7e7ae1d2cced71ba4e2bb154a6871d6c7

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 01:00:00 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91219
ETag
"3b1-57967b47a49d6-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
430
Expires
Wed, 02 Jan 2019 06:15:10 GMT
jquery.easyPieChart.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
4 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/jquery.easyPieChart.js?ver=2.1.7
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
5338acdbe16862e5d826ff614549d8463ae7e26ef1fc27b5d7fee45193ac05b5

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91219
ETag
"e93-57967abefd5f8-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1541
Expires
Wed, 02 Jan 2019 06:15:10 GMT
fusion-counters-circle.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
3 KB
1 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-counters-circle.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
5c7438ec740fa9bea75de44a0fbbbc78c14351010ab6ff42ed13b96c7c777d37

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91218
ETag
"d20-57967b4794019-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
921
Expires
Wed, 02 Jan 2019 06:15:11 GMT
fusion-content-boxes.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
4 KB
1 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-content-boxes.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
fa0aa801b4f145613e631853cf697527783bd5af01eead6494563d0521de99a6

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91218
ETag
"1045-57967b478f090-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
848
Expires
Wed, 02 Jan 2019 06:15:11 GMT
bootstrap.modal.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
4 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/bootstrap.modal.js?ver=3.1.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
5df1ebfffcddd46e04c6026ceeab7d0a99e907c43f1bda760c876bb936155c5f

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91218
ETag
"f73-57967abef75ac-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1300
Expires
Wed, 02 Jan 2019 06:15:11 GMT
fusion-modal.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
4 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-modal.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
78a380367f24325466b6bfc6e989971ecabc00333757e69b87bc490726bfbc5f

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91218
ETag
"102f-57967b4790fab-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1184
Expires
Wed, 02 Jan 2019 06:15:11 GMT
fusion-events.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
3 KB
1 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-events.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
3369709d20d9c1c487738adf334cb5307e82d15948fa2241cfdcb6906b3e85f7

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91218
ETag
"cdb-57967b4786c83-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1083
Expires
Wed, 02 Jan 2019 06:15:11 GMT
fusion-counters-box.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
926 B
861 B
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-counters-box.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
67e0d4919ff70c1c3eabd2801c690bcfce99ef1926119f86d812c7a6b951ce28

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 01:00:00 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91218
ETag
"39e-57967b4796598-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
441
Expires
Wed, 02 Jan 2019 06:15:11 GMT
fusion-flip-boxes.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
1 KB
742 B
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-flip-boxes.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
b0ca3d367f3b06e94078cbe3132c948b43c31576c2513693a1790a5ab2c61598

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91218
ETag
"4a3-57967b47934ed-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
322
Expires
Wed, 02 Jan 2019 06:15:12 GMT
fusion-gallery.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
1 KB
919 B
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-gallery.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
d9ae8b314f45d9835f8738dd75713d6c267768b18a3fb072dd6b7a195ea045ee

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91218
ETag
"4ad-57967b478e4ed-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
499
Expires
Wed, 02 Jan 2019 06:15:12 GMT
fusion-title.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
655 B
753 B
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-title.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
ae0f1b690df343a956c0c38f10cdfba1b9caa9f5850ee066caa5e6aa4ea1fe04

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91216
ETag
"28f-57967b4789201-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
333
Expires
Wed, 02 Jan 2019 06:15:13 GMT
Chart.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/library/
153 KB
45 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/library/Chart.js?ver=2.7.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
849abd0086b44cc8f232c974a1902eba0a632b28c499d74e08d0b81e29760048

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 01:00:00 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91216
ETag
"26480-57967b47a387a-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
46147
Expires
Wed, 02 Jan 2019 06:15:13 GMT
fusion-chart.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
5 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-chart.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
3deb29b8fdfdd69f4a7d19c8ac166fa0b70bd6a82315d384f654d313637caebe

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 01:00:00 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91318
ETag
"148e-57967b4797cbc-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1673
Expires
Wed, 02 Jan 2019 06:13:32 GMT
jquery.event.move.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/library/
5 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/library/jquery.event.move.js?ver=2.0
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
512e43cff32041e14e69d9030c2eb73871e61aba905c1968eda47ae0cef9cb7b

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 01:00:00 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91216
ETag
"152d-57967b479e1c6-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
2007
Expires
Wed, 02 Jan 2019 06:15:13 GMT
fusion-image-before-after.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
2 KB
1 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-image-before-after.js?ver=1.0
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
f8ea3fd0ebc9772c51df0b61b519677aa0c38bcc9ab0b1b818d949c1baf46a00

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91216
ETag
"9f9-57967b478a902-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
926
Expires
Wed, 02 Jan 2019 06:15:14 GMT
jquery.countdown.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/library/
3 KB
1 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/library/jquery.countdown.js?ver=1.0
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
adb4dc173de9c49530f9d50131c359628af6011197caebdeea767de0a9aae7c3

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 01:00:00 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91215
ETag
"b41-57967b479d450-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1054
Expires
Wed, 02 Jan 2019 06:15:14 GMT
fusion-countdown.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
459 B
720 B
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-countdown.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
4303c58fd1ed8315421c091d6bf0c651916e752a08ac1eb65af7fcde0a5d81de

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91216
ETag
"1cb-57967b4794b3e-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
300
Expires
Wed, 02 Jan 2019 06:15:14 GMT
vimeoPlayer.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
16 KB
6 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/vimeoPlayer.js?ver=2.2.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
8fcca243e0633537ab5a60897b92deba38f13bc927de72f88ba65dee9fddb62e

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91215
ETag
"4059-57967abf059f7-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
5389
Expires
Wed, 02 Jan 2019 06:15:14 GMT
fusion-video.js
kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/
1 KB
864 B
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-builder/assets/js/min/general/fusion-video.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
8dc2823c4500c5f0889b6b60d5f5300360d47c314d2be63a5917b1a0623f4fe3

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:59:59 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91215
ETag
"419-57967b479597e-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
444
Expires
Wed, 02 Jan 2019 06:15:14 GMT
jquery.hoverintent.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
1 KB
883 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/jquery.hoverintent.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
59d3b42550f13ce9588c415cd29d0d0624ff82f0069d4bb8e673b2dafcc987d9

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91215
ETag
"454-57967abef922e-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
463
Expires
Wed, 02 Jan 2019 06:15:15 GMT
avada-vertical-menu-widget.js
kateto.net/wp-content/themes/Avada/assets/min/js/general/
2 KB
879 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/assets/min/js/general/avada-vertical-menu-widget.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
4a7b353345f28b2f6473cf4b09bd8630b109184e31e8d999ccea5d7e741e4351

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:32 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91315
ETag
"75a-57967abb552ac-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
459
Expires
Wed, 02 Jan 2019 06:13:34 GMT
bootstrap.tooltip.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
9 KB
3 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/bootstrap.tooltip.js?ver=3.3.5
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
8fcc6c6049bb9cd7f2dd2764ace4e50eb467066e05dd5c3c3a4fd7d0bde0c154

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91214
ETag
"22bb-57967abf013c0-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
3030
Expires
Wed, 02 Jan 2019 06:15:16 GMT
bootstrap.popover.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
2 KB
1 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/bootstrap.popover.js?ver=3.3.5
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
20ab7bdc092a81b8ddc76f31895a985835df01667588c354f831a036f55e5075

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91214
ETag
"633-57967abefafa6-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
697
Expires
Wed, 02 Jan 2019 06:15:16 GMT
jquery.carouFredSel.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
53 KB
14 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/jquery.carouFredSel.js?ver=6.2.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
0a7ad0894de0ad3e1e3f60bb7f1acff8f0111e16898ef194de60504147c21656

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91213
ETag
"d555-57967abefe2a8-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
13537
Expires
Wed, 02 Jan 2019 06:15:16 GMT
jquery.easing.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
3 KB
1 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/jquery.easing.js?ver=1.3
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
14736cc84994f28ff5106f6b8e6f017f38f94c2b42fc69f3b4e43522882c7422

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91314
ETag
"d04-57967abef3f6c-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
805
Expires
Wed, 02 Jan 2019 06:13:36 GMT
jquery.flexslider.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
22 KB
7 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/jquery.flexslider.js?ver=2.2.2
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
e36fdce902bfa93a2440660eab3f9ebe225ff5d553799748955df74773e8836e

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91311
ETag
"59f7-57967abf02aed-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
6532
Expires
Wed, 02 Jan 2019 06:13:38 GMT
jquery.hoverflow.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
647 B
756 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/jquery.hoverflow.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
7d505ba222682e357b9df002b34795df17ebda41a74b5d2aa0143b13ffbceb11

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91309
ETag
"287-57967abefc2c4-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
336
Expires
Wed, 02 Jan 2019 06:13:40 GMT
jquery.placeholder.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
2 KB
1 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/jquery.placeholder.js?ver=2.0.7
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
673cda4390e4c64c2ec3431e9b948b885e7306f68ef9b8c9fbb9bd83bba88641

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91309
ETag
"898-57967abef7f45-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
874
Expires
Wed, 02 Jan 2019 06:13:41 GMT
jquery.touchSwipe.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/
10 KB
4 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/library/jquery.touchSwipe.js?ver=1.6.6
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
54857896bdcf37a944f4bd573b0cf874eaa0aa62ee8e2e222cce3a7788bcd395

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91309
ETag
"2787-57967abef0902-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
3644
Expires
Wed, 02 Jan 2019 06:13:41 GMT
fusion-alert.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/
138 B
550 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/fusion-alert.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
9c1eedb49dbbf57672cbf97d7d70edf6918f89e58c57d49e71496dbda2a56df3

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91308
ETag
"8a-57967abeb950d-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
131
Expires
Wed, 02 Jan 2019 06:13:42 GMT
fusion-carousel.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/
4 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/fusion-carousel.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
aa887bd82816b046c131856daa00a57eaa9172e78a62870bf2e65175ca6dbeb1

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91308
ETag
"e0c-57967abeb7af9-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1144
Expires
Wed, 02 Jan 2019 06:13:42 GMT
fusion-flexslider.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/
9 KB
1 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/fusion-flexslider.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
0e2392fdc4987b5456a43638346618351b095182be241f698516ea298e2d96f8

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91307
ETag
"2416-57967abeb1c66-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1073
Expires
Wed, 02 Jan 2019 06:13:42 GMT
fusion-popover.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/
275 B
612 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/fusion-popover.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
ab439586de1e097863ea040904bdd2bfa31014e9294e975142a70699074d0841

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91307
ETag
"113-57967abeb8c56-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
192
Expires
Wed, 02 Jan 2019 06:13:43 GMT
fusion-tooltip.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/
2 KB
872 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/fusion-tooltip.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
399d2ccc7531e019f247d142f2e9e060fe8752504bdaf463028d32ec212695cf

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91307
ETag
"603-57967abeb3e17-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
452
Expires
Wed, 02 Jan 2019 06:13:43 GMT
fusion-sharing-box.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/
610 B
643 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/fusion-sharing-box.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
0eb948d2111a3a8f5e1f1ad8f8ece80d0a10f8f1fc5e1c0c2e214d461a49a952

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91306
ETag
"262-57967abeb09f7-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
223
Expires
Wed, 02 Jan 2019 06:13:43 GMT
fusion-blog.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/
9 KB
3 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/fusion-blog.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
4dd4ba9773ddb1007653ca0abb0a4b8606035794823000db1e932ef79d79ad16

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91306
ETag
"240e-57967abeb132b-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
2275
Expires
Wed, 02 Jan 2019 06:13:44 GMT
fusion-button.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/
231 B
589 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/fusion-button.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
f1560fb223e37341fa8b435f6c114628cadeb4ab4057f25a729fa717ad240987

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91306
ETag
"e7-57967abeaee8e-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
170
Expires
Wed, 02 Jan 2019 06:13:44 GMT
fusion-general-global.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/
569 B
706 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/fusion-general-global.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
fbc02a59b50dd8863fa2621ac9081e28fdd627f5476aec06784858858f05f442

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91302
ETag
"239-57967abeb83b6-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
286
Expires
Wed, 02 Jan 2019 06:13:48 GMT
fusion-ie1011.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/
1 KB
946 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/fusion-ie1011.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
27d5b422e5ac5a2170e6c73bcdeb86aa9320af8c7d6ef5a53d1c678720e2d598

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91302
ETag
"4b3-57967abeadb86-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
526
Expires
Wed, 02 Jan 2019 06:13:48 GMT
avada-header.js
kateto.net/wp-content/themes/Avada/assets/min/js/general/
31 KB
4 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/assets/min/js/general/avada-header.js?ver=5.7.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
9cb8140635d6cdab5d102fa8681ec5528bb165fdf7747b6fbd78a65075cc0abc

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:32 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91301
ETag
"7d54-57967abb58115-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
3826
Expires
Wed, 02 Jan 2019 06:13:48 GMT
avada-menu.js
kateto.net/wp-content/themes/Avada/assets/min/js/general/
34 KB
6 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/assets/min/js/general/avada-menu.js?ver=5.7.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
f937cef662cf12641922dee29ba5124cfc909ee6d1d3c2896c462f0c43d9c46b

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:32 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91301
ETag
"88fa-57967abb5f3d7-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
5962
Expires
Wed, 02 Jan 2019 06:13:49 GMT
fusion-scroll-to-anchor.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/
4 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/fusion-scroll-to-anchor.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
fa2e8ed25b98183e4a8126c1fa69a8628362676c522ca8a9bbeb3adabea034d9

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91299
ETag
"1195-57967abeb00ce-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1424
Expires
Wed, 02 Jan 2019 06:13:51 GMT
fusion-responsive-typography.js
kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/
2 KB
1 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/min/js/general/fusion-responsive-typography.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
50842be368e7865ccc110511b5ebfda87894b8162a459946d08e7a13ff4b1507

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91299
ETag
"926-57967abead14a-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
658
Expires
Wed, 02 Jan 2019 06:13:51 GMT
bootstrap.scrollspy.js
kateto.net/wp-content/themes/Avada/assets/min/js/library/
3 KB
1 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/assets/min/js/library/bootstrap.scrollspy.js?ver=3.3.2
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
b6ce2750a5429b968ac4c675acacfbd7da06ddf4638fb1e73ffb0a4553b346cb

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:33 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91298
ETag
"a77-57967abb6fa38-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1060
Expires
Wed, 02 Jan 2019 06:13:52 GMT
avada-comments.js
kateto.net/wp-content/themes/Avada/assets/min/js/general/
1 KB
890 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/assets/min/js/general/avada-comments.js?ver=5.7.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
3aeb5d27ba1347463afdea3f0a9e7332c7db1adb45377264fba3b37c0da01178

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:32 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91296
ETag
"492-57967abb58ca1-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
470
Expires
Wed, 02 Jan 2019 06:13:54 GMT
avada-general-footer.js
kateto.net/wp-content/themes/Avada/assets/min/js/general/
952 B
772 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/assets/min/js/general/avada-general-footer.js?ver=5.7.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
4f56a354ed72e68c9165a6b5ea38351046a0af0d713df4a090b8d4be722367cc

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:32 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91296
ETag
"3b8-57967abb562ba-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
352
Expires
Wed, 02 Jan 2019 06:13:54 GMT
avada-quantity.js
kateto.net/wp-content/themes/Avada/assets/min/js/general/
1 KB
996 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/assets/min/js/general/avada-quantity.js?ver=5.7.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
b5609922140cafd832011effc2ec0a286db7e83ceb2cf3091cc0d306eee5328d

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:32 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91295
ETag
"525-57967abb5a85a-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
576
Expires
Wed, 02 Jan 2019 06:13:55 GMT
avada-scrollspy.js
kateto.net/wp-content/themes/Avada/assets/min/js/general/
656 B
672 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/assets/min/js/general/avada-scrollspy.js?ver=5.7.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
1f530977f86728293d5f9aa64d48f2a3f4e9db788af2568ee54d4cb4fc332860

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:32 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91295
ETag
"290-57967abb59f14-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
252
Expires
Wed, 02 Jan 2019 06:13:55 GMT
avada-select.js
kateto.net/wp-content/themes/Avada/assets/min/js/general/
501 B
651 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/assets/min/js/general/avada-select.js?ver=5.7.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
d8c237ac23e562540132de6ced5d5a5619a6ee895b0da0298bfdb6e7bbceb7b2

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:32 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91295
ETag
"1f5-57967abb637f7-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
231
Expires
Wed, 02 Jan 2019 06:13:55 GMT
avada-sidebars.js
kateto.net/wp-content/themes/Avada/assets/min/js/general/
3 KB
1 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/assets/min/js/general/avada-sidebars.js?ver=5.7.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
8725cd37d5dfef7a1981f8972d9b2e003e5d56e8912dc53db0d4e049958c12ab

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:32 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91295
ETag
"a05-57967abb56a93-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
682
Expires
Wed, 02 Jan 2019 06:13:55 GMT
jquery.sticky-kit.js
kateto.net/wp-content/themes/Avada/assets/min/js/library/
3 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/assets/min/js/library/jquery.sticky-kit.js?ver=5.7.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
1b4944b5f8a439d1e7f531888ed6eb66781561f56f84336e75b218cb31bb9af9

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:33 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91295
ETag
"aba-57967abb70231-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1208
Expires
Wed, 02 Jan 2019 06:13:55 GMT
avada-tabs-widget.js
kateto.net/wp-content/themes/Avada/assets/min/js/general/
453 B
653 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/assets/min/js/general/avada-tabs-widget.js?ver=5.7.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
f1ebf95b8c5770caa6358f4448ef42c18e17fd368a6efeff424fb801941c4da1

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:32 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91295
ETag
"1c5-57967abb5c354-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
233
Expires
Wed, 02 Jan 2019 06:13:55 GMT
jquery.toTop.js
kateto.net/wp-content/themes/Avada/assets/min/js/library/
1 KB
949 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/assets/min/js/library/jquery.toTop.js?ver=1.2
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
132b243eb8bdb961de2dd423a678f4c12ee160c40093ff06d31d10b43145cfdf

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:33 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91294
ETag
"400-57967abb6f221-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
529
Expires
Wed, 02 Jan 2019 06:13:56 GMT
avada-to-top.js
kateto.net/wp-content/themes/Avada/assets/min/js/general/
222 B
574 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/assets/min/js/general/avada-to-top.js?ver=5.7.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
5be6f7bd7c681c64cf19fc457ef73dda83f73becb6c7bd1a32a06846785b1128

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:32 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91294
ETag
"de-57967abb5b1fd-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
155
Expires
Wed, 02 Jan 2019 06:13:56 GMT
avada-drop-down.js
kateto.net/wp-content/themes/Avada/assets/min/js/general/
5 KB
1 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/assets/min/js/general/avada-drop-down.js?ver=5.7.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
71bba7d46f11636f52bf90a31eb147a65cded15b6f9cd4d13ec3257c4bed8823

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:32 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91294
ETag
"12c2-57967abb606f6-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
864
Expires
Wed, 02 Jan 2019 06:13:56 GMT
jquery.elasticslider.js
kateto.net/wp-content/themes/Avada/assets/min/js/library/
4 KB
2 KB
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/assets/min/js/library/jquery.elasticslider.js?ver=5.7.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
efd7b1811cef4b7c13b8ae58028f93fd15f154177f1a65df59c0f2139649b9ee

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:33 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91294
ETag
"11da-57967abb709c3-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
1622
Expires
Wed, 02 Jan 2019 06:13:56 GMT
avada-elastic-slider.js
kateto.net/wp-content/themes/Avada/assets/min/js/general/
521 B
639 B
Script
General
Full URL
http://kateto.net/wp-content/themes/Avada/assets/min/js/general/avada-elastic-slider.js?ver=5.7.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
11a03c12927fe2110cf77b28a5d8441c0cbf639fe01f96b969aa9a0ee8350892

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 00:57:32 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91291
ETag
"209-57967abb55b05-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
219
Expires
Wed, 02 Jan 2019 06:13:59 GMT
collect
www.google-analytics.com/r/
35 B
104 B
Image
General
Full URL
https://www.google-analytics.com/r/collect?v=1&_v=j72&a=1072902580&t=pageview&_s=1&dl=http%3A%2F%2Fkateto.net%2Fnetwork-visualization&ul=en-us&de=UTF-8&dt=Static%20and%20dynamic%20network%20visualization%20with%20R%20%E2%80%93%20Katya%20Ognyanova&sd=24-bit&sr=1600x1200&vp=1600x1200&je=0&_u=YEBAAUABC~&jid=47642970&gjid=515591751&cid=2141377886.1545896128&tid=UA-9692471-1&_gid=439529942.1545896128&_r=1&z=1806981227
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
2a00:1450:4001:81d::200e , Ireland, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Golfe2 /
Resource Hash
8337212354871836e6763a41e615916c89bac5b3f1f0adf60ba43c7c806e1015
Security Headers
Name Value
X-Content-Type-Options nosniff

Request headers

Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

pragma
no-cache
date
Thu, 27 Dec 2018 07:35:28 GMT
x-content-type-options
nosniff
last-modified
Sun, 17 May 1998 03:00:00 GMT
server
Golfe2
access-control-allow-origin
*
content-type
image/gif
status
200
cache-control
no-cache, no-store, must-revalidate
alt-svc
quic=":443"; ma=2592000; v="44,43,39,35"
content-length
35
expires
Fri, 01 Jan 1990 00:00:00 GMT
avada-fusion-slider.js
kateto.net/wp-content/plugins/fusion-core/js/min/
26 KB
4 KB
Script
General
Full URL
http://kateto.net/wp-content/plugins/fusion-core/js/min/avada-fusion-slider.js?ver=1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
5733d4e205ea28887e56a39851b592959b514b6b2d57a5f5db9cfcc518a9d23a

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Tue, 30 Oct 2018 01:00:12 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
91291
ETag
"690f-57967b531af2b-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
3835
Expires
Wed, 02 Jan 2019 06:13:59 GMT
wp-embed.min.js
kateto.net/wp-includes/js/
1 KB
1 KB
Script
General
Full URL
http://kateto.net/wp-includes/js/wp-embed.min.js?ver=5.0.1
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
2152557cac69e2bd7d6debef5037a9f554f9209cc305b8141b3329acb10c42b7

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/network-visualization
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1; _gat_gtag_UA_9692471_1=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/network-visualization
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:30 GMT
Content-Encoding
gzip
Last-Modified
Thu, 11 Oct 2018 04:00:23 GMT
X-Backend
all_requests
Cache-Control
max-age=604800
Age
405812
ETag
"57b-577ec029723c0-gzip"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/javascript
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
753
Expires
Sat, 29 Dec 2018 14:51:58 GMT
polnet2018
www.kateto.net/ Frame AA29
9 MB
4 MB
Document
General
Full URL
http://www.kateto.net/polnet2018
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash

Request headers

Host
www.kateto.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_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer
http://kateto.net/network-visualization
Accept-Encoding
gzip, deflate
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Referer
http://kateto.net/network-visualization

Response headers

Content-Location
polnet2018.html
TCN
choice
Content-Encoding
gzip
Content-Type
text/html
X-Port
port_10098
X-Cacheable
YES:Forced
Content-Length
4253569
Date
Thu, 27 Dec 2018 07:35:29 GMT
Age
35681
Vary
negotiate,Accept-Encoding, User-Agent
X-Cache
cached
X-Cache-Hit
HIT
X-Backend
all_requests
Accept-Ranges
bytes
gray-net-Linkedin.jpg
kateto.net/wp-content/uploads/2018/06/
491 KB
491 KB
Image
General
Full URL
http://kateto.net/wp-content/uploads/2018/06/gray-net-Linkedin.jpg
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
f83f4f76cfbb82e8b956253d2f5914014286f750b332fd8998edae8549ee4160

Request headers

Pragma
no-cache
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
image/webp,image/apng,image/*,*/*;q=0.8
Referer
http://kateto.net/wp-content/uploads/fusion-styles/fd25c93c724cedfd7a27353375b93f47.min.css?ver=5.0.1
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
Referer
http://kateto.net/wp-content/uploads/fusion-styles/fd25c93c724cedfd7a27353375b93f47.min.css?ver=5.0.1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Last-Modified
Fri, 15 Jun 2018 03:36:37 GMT
X-Backend
all_requests
Cache-Control
max-age=5184000
Age
1906194
ETag
"7ac6d-56ea5ec522bae"
X-Cacheable
YES
X-Cache
cached
Content-Type
image/jpeg
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
502893
Expires
Sun, 03 Feb 2019 06:05:34 GMT
jizaRExUiTo99u79D0KEwA.ttf
fonts.gstatic.com/s/ptsans/v9/
94 KB
59 KB
Font
General
Full URL
http://fonts.gstatic.com/s/ptsans/v9/jizaRExUiTo99u79D0KEwA.ttf
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
2a00:1450:4001:821::2003 , Ireland, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
sffe /
Resource Hash
ed3b51f6240250bb0427957fc3fa326a1a1140acbc31d8f162a568346b8366da
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 1; mode=block

Request headers

User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Referer
http://kateto.net/wp-content/uploads/fusion-styles/fd25c93c724cedfd7a27353375b93f47.min.css?ver=5.0.1
Origin
http://kateto.net

Response headers

Date
Wed, 19 Dec 2018 23:29:12 GMT
Content-Encoding
gzip
X-Content-Type-Options
nosniff
Last-Modified
Wed, 11 Oct 2017 18:24:45 GMT
Server
sffe
Age
633976
Vary
Accept-Encoding
Content-Type
font/ttf
Access-Control-Allow-Origin
*
Cache-Control
public, max-age=31536000
Accept-Ranges
bytes
Timing-Allow-Origin
*
Content-Length
59457
X-XSS-Protection
1; mode=block
Expires
Thu, 19 Dec 2019 23:29:12 GMT
bWt97fPFfRzkCa9Jlp6IacVcWQ.ttf
fonts.gstatic.com/s/anticslab/v6/
30 KB
18 KB
Font
General
Full URL
http://fonts.gstatic.com/s/anticslab/v6/bWt97fPFfRzkCa9Jlp6IacVcWQ.ttf
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
2a00:1450:4001:821::2003 , Ireland, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
sffe /
Resource Hash
e257ccf4d079c7f7952b2627e70760af89b5a6ca6302dd877638434f6982a606
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 1; mode=block

Request headers

User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Referer
http://kateto.net/wp-content/uploads/fusion-styles/fd25c93c724cedfd7a27353375b93f47.min.css?ver=5.0.1
Origin
http://kateto.net

Response headers

Date
Thu, 20 Dec 2018 09:50:52 GMT
Content-Encoding
gzip
X-Content-Type-Options
nosniff
Last-Modified
Tue, 10 Oct 2017 21:46:13 GMT
Server
sffe
Age
596676
Vary
Accept-Encoding
Content-Type
font/ttf
Access-Control-Allow-Origin
*
Cache-Control
public, max-age=31536000
Accept-Ranges
bytes
Timing-Allow-Origin
*
Content-Length
17533
X-XSS-Protection
1; mode=block
Expires
Fri, 20 Dec 2019 09:50:52 GMT
icomoon.woff
kateto.net/wp-content/themes/Avada/includes/lib/assets/fonts/icomoon/
17 KB
18 KB
Font
General
Full URL
http://kateto.net/wp-content/themes/Avada/includes/lib/assets/fonts/icomoon/icomoon.woff
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
198.71.233.15 Scottsdale, United States, ASN26496 (AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US),
Reverse DNS
ip-198-71-233-15.ip.secureserver.net
Software
/
Resource Hash
6af107cfcc3720e22e6821a417995ae8ff5b3b745f23d2239cbf639516e11e20

Request headers

Pragma
no-cache
Origin
http://kateto.net
Accept-Encoding
gzip, deflate
Host
kateto.net
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept
*/*
Referer
http://kateto.net/wp-content/uploads/fusion-styles/fd25c93c724cedfd7a27353375b93f47.min.css?ver=5.0.1
Cookie
_ga=GA1.2.2141377886.1545896128; _gid=GA1.2.439529942.1545896128; _gat=1
Connection
keep-alive
Cache-Control
no-cache
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Referer
http://kateto.net/wp-content/uploads/fusion-styles/fd25c93c724cedfd7a27353375b93f47.min.css?ver=5.0.1
Origin
http://kateto.net

Response headers

Date
Thu, 27 Dec 2018 07:35:29 GMT
Last-Modified
Tue, 30 Oct 2018 00:57:36 GMT
X-Backend
all_requests
Age
91287
ETag
"4588-57967abe5303e"
X-Cacheable
YES
X-Cache
cached
Content-Type
application/x-font-woff
X-Port
port_10098
X-Cache-Hit
HIT
Accept-Ranges
bytes
Content-Length
17800
jizfRExUiTo99u79B_mh0O6tKA.ttf
fonts.gstatic.com/s/ptsans/v9/
98 KB
61 KB
Font
General
Full URL
http://fonts.gstatic.com/s/ptsans/v9/jizfRExUiTo99u79B_mh0O6tKA.ttf
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
2a00:1450:4001:821::2003 , Ireland, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
sffe /
Resource Hash
ae254009a380ca9b7aa7a4be4170da94f2035a84c15de80aa827aeee819d5971
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 1; mode=block

Request headers

User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Referer
http://kateto.net/wp-content/uploads/fusion-styles/fd25c93c724cedfd7a27353375b93f47.min.css?ver=5.0.1
Origin
http://kateto.net

Response headers

Date
Fri, 21 Dec 2018 06:06:45 GMT
Content-Encoding
gzip
X-Content-Type-Options
nosniff
Last-Modified
Wed, 11 Oct 2017 18:24:54 GMT
Server
sffe
Age
523723
Vary
Accept-Encoding
Content-Type
font/ttf
Access-Control-Allow-Origin
*
Cache-Control
public, max-age=31536000
Accept-Ranges
bytes
Timing-Allow-Origin
*
Content-Length
61655
X-XSS-Protection
1; mode=block
Expires
Sat, 21 Dec 2019 06:06:45 GMT
jizYRExUiTo99u79D0e0x8mN.ttf
fonts.gstatic.com/s/ptsans/v9/
90 KB
55 KB
Font
General
Full URL
http://fonts.gstatic.com/s/ptsans/v9/jizYRExUiTo99u79D0e0x8mN.ttf
Requested by
Host: kateto.net
URL: http://kateto.net/network-visualization
Protocol
HTTP/1.1
Server
2a00:1450:4001:821::2003 , Ireland, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
sffe /
Resource Hash
1d78cd1f1618051c4550557f96233484bbb834cb0ed9cca9456a8951c78b298d
Security Headers
Name Value
X-Content-Type-Options nosniff
X-Xss-Protection 1; mode=block

Request headers

User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Referer
http://kateto.net/wp-content/uploads/fusion-styles/fd25c93c724cedfd7a27353375b93f47.min.css?ver=5.0.1
Origin
http://kateto.net

Response headers

Date
Thu, 20 Dec 2018 22:04:52 GMT
Content-Encoding
gzip
X-Content-Type-Options
nosniff
Last-Modified
Wed, 11 Oct 2017 18:26:26 GMT
Server
sffe
Age
552636
Vary
Accept-Encoding
Content-Type
font/ttf
Access-Control-Allow-Origin
*
Cache-Control
public, max-age=31536000
Accept-Ranges
bytes
Timing-Allow-Origin
*
Content-Length
55554
X-XSS-Protection
1; mode=block
Expires
Fri, 20 Dec 2019 22:04:52 GMT
js
www.googletagmanager.com/gtag/ Frame AA29
87 KB
32 KB
Script
General
Full URL
https://www.googletagmanager.com/gtag/js?id=UA-9692471-1
Requested by
Host: www.kateto.net
URL: http://www.kateto.net/polnet2018
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
2a00:1450:4001:815::2008 , Ireland, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Google Tag Manager (scaffolding) /
Resource Hash
60c1f3a35b29a773b5bfd69382277d30aafb3a4af87e736c10cdc86ccbea8673
Security Headers
Name Value
X-Xss-Protection 1; mode=block

Request headers

Referer
http://www.kateto.net/polnet2018
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

date
Thu, 27 Dec 2018 07:35:29 GMT
content-encoding
gzip
alt-svc
quic=":443"; ma=2592000; v="44,43,39,35"
server
Google Tag Manager (scaffolding)
access-control-allow-origin
http://www.googletagmanager.com
vary
Accept-Encoding
content-type
application/javascript; charset=UTF-8
status
200
cache-control
private, max-age=900
access-control-allow-credentials
true
access-control-allow-headers
Cache-Control
content-length
32165
x-xss-protection
1; mode=block
expires
Thu, 27 Dec 2018 07:35:29 GMT
analytics.js
www.google-analytics.com/ Frame AA29
43 KB
17 KB
Script
General
Full URL
https://www.google-analytics.com/analytics.js
Requested by
Host: www.googletagmanager.com
URL: https://www.googletagmanager.com/gtag/js?id=UA-9692471-1
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
2a00:1450:4001:81d::200e , Ireland, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Golfe2 /
Resource Hash
b688a3bcd1297cc0fe08e6e52fea14ba9108ee4b9a2052c03e7bac6e19347255
Security Headers
Name Value
Strict-Transport-Security max-age=10886400; includeSubDomains; preload
X-Content-Type-Options nosniff

Request headers

Referer
http://www.kateto.net/polnet2018
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

strict-transport-security
max-age=10886400; includeSubDomains; preload
content-encoding
gzip
x-content-type-options
nosniff
last-modified
Mon, 05 Nov 2018 21:10:09 GMT
server
Golfe2
age
1268
date
Thu, 27 Dec 2018 07:14:21 GMT
vary
Accept-Encoding
content-type
text/javascript
status
200
cache-control
public, max-age=7200
timing-allow-origin
*
alt-svc
quic=":443"; ma=2592000; v="44,43,39,35"
content-length
17404
expires
Thu, 27 Dec 2018 09:14:21 GMT
collect
www.google-analytics.com/r/ Frame AA29
35 B
104 B
Image
General
Full URL
https://www.google-analytics.com/r/collect?v=1&_v=j72&a=1342037157&t=pageview&_s=1&dl=http%3A%2F%2Fwww.kateto.net%2Fpolnet2018&dr=http%3A%2F%2Fkateto.net%2Fnetwork-visualization&ul=en-us&de=UTF-8&dt=Network%20visualization%20with%20R&sd=24-bit&sr=1600x1200&vp=1040x56500&je=0&_u=AACAAUAB~&jid=1732636316&gjid=1230990019&cid=2141377886.1545896128&tid=UA-9692471-1&_gid=439529942.1545896128&_r=1&gtm=2oubc0&z=1740123838
Requested by
Host: www.kateto.net
URL: http://www.kateto.net/polnet2018
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
2a00:1450:4001:81d::200e , Ireland, ASN15169 (GOOGLE - Google LLC, US),
Reverse DNS
Software
Golfe2 /
Resource Hash
8337212354871836e6763a41e615916c89bac5b3f1f0adf60ba43c7c806e1015
Security Headers
Name Value
X-Content-Type-Options nosniff

Request headers

Referer
http://www.kateto.net/polnet2018
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

pragma
no-cache
date
Thu, 27 Dec 2018 07:35:29 GMT
x-content-type-options
nosniff
last-modified
Sun, 17 May 1998 03:00:00 GMT
server
Golfe2
access-control-allow-origin
*
content-type
image/gif
status
200
cache-control
no-cache, no-store, must-revalidate
alt-svc
quic=":443"; ma=2592000; v="44,43,39,35"
content-length
35
expires
Fri, 01 Jan 1990 00:00:00 GMT
truncated
/ Frame AA29
95 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
668b046d12db350ccba6728890476b3efee53b2f42dbb84743e5e9f1ae0cc404

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
403 KB
0
Stylesheet
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
7594defe661b80895cae28fe0da93ca74b5e737228016899a77773fcdcd084a7

Request headers

Response headers

Content-Type
text/css;charset=utf-8
truncated
/ Frame AA29
36 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
4a4de7903ea62d330e17410ea4db6c22bcbeb350ac6aa402d6b54b4c0cbed327

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
3 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
95ed2737d4ab0b494087a294b6eb4d28c13926f2c77ccf3bda4b1ae64bfd401a

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
4 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
c7b66ee04aeac6fc31f77a14d5553af4047de35d2864fcf7560452a183dd4e62

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
4 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
46ce784c4d4508dd6e2cce1fed540432245397521aed38902e432bb88b7057e4

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
195 B
0
Stylesheet
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
139286985e135ba0cf71e0fae9cc35004c1fcb0f29c71ffa33fe5684b291ffc7

Request headers

Response headers

Content-Type
text/css;charset=utf-8
truncated
/ Frame AA29
50 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
bea6e643b8c1515c321d427748569829df9d9c2506e211d27686a94e8e4f1e86

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
30 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
3eee4a26d37adaea1fe9f6a5aaa68cb7ed2e57e86c1dda7a3628981ac51ef4d5

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
227 KB
0
Stylesheet
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
444aab1a9e60dcec4df57538fd6752ae95ba8cb6528339a9c813ce95392a5707

Request headers

Response headers

Content-Type
text/css;charset=utf-8
truncated
/ Frame AA29
648 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
365baee4539d48af574180191a4842bd92cda476b31caf436604e1e6898ceb02

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
134 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
f989644f83f1c6c11a96ad0a1c87c62e0f15215bba5d6998bfe927511bdc3547

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
493 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
0f7dbf7b3754318a756fb14257ebca021cc8f66d95beb6a226382aa53a5a2bcc

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
2 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
8d99a56cc8a97efd4994e9d0e68682cec220b9017192927a483577eac0a4bb87

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
21 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
a775ef6f5d9f443c1a03ccd7fd76fb36d5c0c28248a07b8516a27d61ab706767

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
26 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
9afeea2810c82c46d5556b1d14cf990d6fc6d7a2f45aee956fe6acbb6f822c3e

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
14 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
c7e542e793e6b9f85245fe2200f2b2d14ce889fe2ae16417d460860882995975

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
23 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
26c8e7920bef1d0a6ad8ec2c6d130d7fb75ca288bdd02312cf3a959ffa5472d4

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
48 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
5893dd307c3938cfde76ec97d6e14ce085643de6e6d71346a772a00de662e19a

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
508 B
0
Stylesheet
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
48d6e4f6c1ec88b9e0f92366ff2b93314a45b4d552e71cdabb6fe300cb44993b

Request headers

Response headers

Content-Type
text/css;charset=utf-8
truncated
/ Frame AA29
19 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
b87292e270a8ad1f54e53c79ed5e9678801a3c610f2f368526b33aa12b94a21d

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
209 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
ce95569b70abea0961ce73f0f890e654c312c748ff958e3eb42fef2bd8002f04

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
9 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
97eb59bf8b33a516e1e3136643f5fe02417e473a14971cb657a6fbc2c37f3d1c

Request headers

Response headers

Content-Type
application/x-javascript
truncated
/ Frame AA29
325 B
0
Stylesheet
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
429efd8bba43255a776f338192524561573f31f409b2b8930d3b8a08f5800de5

Request headers

Response headers

Content-Type
text/css;charset=utf-8
truncated
/ Frame AA29
141 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
e3ba4019c5f788cb4f52d56e5d416bbd31b5314820d5a8b91897b76e5a082b64

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
1 MB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
b7e0953ede9fa9832452bb364b8663ab9c563d517b8803920bdffa29084bd0a0

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
117 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
8ed4ce7b3e5915fdb32377020e307a96f0be1e93cdbfcaec5481dc43b9c38642

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
132 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
9a89694ca7c4d738785c26eb35ebeef8a8f5a16be0150491dd3cabda323c9e3f

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
1 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
623a201c35de324ba05cd72d124dd4cb7ec1d76f8945c5870cad790ba035437c

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
3 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
60563e433eb36e551a814c32266297485a8a850d08f1127fe4964535021f3c62

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
3 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
b97e3d110d5c3b7365ca430b5e1c56b7fb3e7005314f6d6d664817b4b42b3abc

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
3 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
53de98f0a91e5422aa0314cbddda3ad488d88255d6f94590c18a5de0cbd876aa

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
4 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
04a369e5104b02a302491e829f87651bd3245a088b2c2e7c2cda5efb1c0a8a9c

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
2 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
ce32be56670f6b9eca8707f3c3a0c9df059c1ad5fe27fb0912d14d72d11a2d4e

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
4 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
6ba038f9eb00ba46691d1d4f13d9a855bcbc1eb34dcbcae81ae14964e955832f

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
425 B
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
2fff4aae6dfa95434b03e6250a8342589b15cbf51d8c950641249d909902039d

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
425 B
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
4d5cb29be83231b967ddbcafe80fd4b6219f73aba2595aecb9d9eb27c4cca09c

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
425 B
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
a6a60fb0777e6becff27c7e3748bbc3b796b4c3e3f4cda6cb700b8c0d6b5f5a3

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
2 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
3d3d035403ba87f19bed92bf20449a5b5a1c0ed2d9a669008abf83d4fa9172b7

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
2 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
c5b962d6659dde5b413f47959e7e23038a5f702298d0f13954d5908aa4251102

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
13 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
8fd966e492c2933164405126069e6002fc5fd796c75e6752b64430c74670acd3

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
7 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
143779a6877b306e3248bf4cd51e823e4f673b6a46437a641df1374b5f883c08

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
11 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
28bea0bca6f1b424273b8bac5bf1c4fd940c321f835726211103ec8cbedce7c1

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
19 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
174e2d1db38e03b738189d641c3fbf1b5a5e0c2447725e3480aa8c233f23cdb7

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
7 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
95e711aa98b525c287b1d0a83c035e28ec7d368f0a82a0164ddecae5202bd49c

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
6 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
b4466ccaa9a0364f03bb521b9e98b201d4fcea65e17fb3f9655a2274a4486f99

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
9 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
75363faef5916beebe2153fa7718e52e70c70474c92dd04feaadcc8ee8d0d68e

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
16 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
4559d8a63215939cdb90857325cf790084d8d08ab6d23488459a8e782c7d2afe

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
8 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
ec34d50e2ef95cfb0268270ae88f17c048d6e43e4a5dde57590065fff26ab498

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
5 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
c93f50c3e81d0769cc6d2a020bc77a41bd23b5282b646a0475030a3cef619498

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
13 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
e08401e113bababed0e1d26d2419a5fb430b656c50f95ac6afa5b94a81425514

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
14 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
213956ed472b76327ceaea1a769220bfe792ca6f1274cabdd0b59cb01ae1b48f

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
5 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
90e367eb680921224f0b9214b50294b33719f07cd04f7eefe3e226284da2a67b

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
12 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
44bad9fb6e9a4fb34281c8a67dc9123ee1dbe6ed15a84d6408889a3537a1889d

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
13 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
a944bb9edeae94642bc93284352dd7e3040e8f82355e45c2e1584abe3d539538

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
12 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
57c191f46696a6d758bb7314a8169f0c16535ecee570db3fdf569a880be75218

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
4 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
343c4699a6c775fe8a30af075192013d533424215906ad3ff8aed2acfe3bea29

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
12 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
4df873d6d05b9721a52a0089b99e06a8c20ef53b0313cf82ae9a98196d50ea2c

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
10 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
56f317513570fbe1bef64202f7596692faa08f23eb180f8962cfd360fa2d36c3

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
6 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
eb7a0daf81da5b6d0beca7740c0053d331a4e72b88421200ce0ee284bb5ded06

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
5 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
431e5082bcf39683ecd59a5168a3d4fbb0cb88a770f9a7b2b6ff0bea1c291e5f

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
3 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
e2437fe822bd2271a79aae2d36b8c82093f9c23674485aab45ea78f18ce4829e

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
42 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
021b6a12d0f9466cd4b21a39ab0647e910766382cf195f9337b2af5b3a9ecdb4

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
52 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
69671e2a33fe1494c679baddc7e8bbf893f1ab1fcc4e72f930b9aeaf4fabaf9f

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
5 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
36bcbf3a0d704255d31f4058f961974d9098a5e5b8ba447f7339c8034c891330

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
3 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
116daa209acd90613c61aa03b4df53d8adee00bf30f5990339e9b2e70dc1966f

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
11 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
38f9edb64f1b7d72df340751412cd937cb43907578d04b36c859532a97abffe8

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
7 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
498bcb92ea3a8a3b01dceae648e139972ad196ac56fec134e9e7cd0a4ee17752

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
5 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
a533d720c38e28941ee5758e87fa4b1d0d7e4a9a290ab88e58c6d188cffe8e90

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
5 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
d2e1c93166c4e96adeb8a77fbf50b9696d71f3328d1e98677150d867a1864ed0

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
5 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
e2fd8977c742d6fed4d220bbdf64c836193f4872b0b329e5c8316d462eafed60

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
13 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
6202c140da067e69c7dd81695ae7315b718e1387470b26afa3ecf309bb6914f5

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
35 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
82d4b148369d8f79e11b5ea9cb324273c58a06dc33abd700cafb907b5ac00617

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
22 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
eab94a85e356d95c957e8656e616873497f382b676b4737cf0bc432205674a53

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
8 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
3a5060dcf93fd29f396b513972297c43167dfe2bef016bd704b96b5369e550b2

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
4 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
60c5c995e81d99006a511a1b66e9811b194bab9f0a3918438ec1707c92dc479c

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
8 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
d2ee7e9d2d75afb62ad22c537d31fc0f9db385923ff38f28d489c77a19c698bf

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
6 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
0936665ee89920617edd603579467680cb3eaa3d9f2ec6e0cae3ed51c9cf0ead

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
9 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
0b892eeb61f16fc04e14b99741bb87ed413757818621984e38a95bde5e1f7154

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
43 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
dd023580c4e0d39f7ebedee823aefead5399feec0f26355ca38c3d46dfce1273

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
198 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
c73a41758beed1de5691c352e0cacf5dc45ebfadaabff2f5af64585e65db4c70

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
15 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
f8954902287160bb63cd83b72452ae95c82f873a73415417a607f104b2bef20c

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
10 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
5cc0ffc32d631d639dca960c0c85176753c7e1c2875d242efa7a9a225cbbc4ff

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
8 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
b72f99f24c4f113dde381df9e9031195fc8175d4d8dd475cae7f48407c040775

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
9 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
a4ca18154fcc828c586b7ecca731672842247fbf1fca13bf77de31ce6d52b0b7

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
2 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
cda58b73d8c30c38ea2c939274aaef90c01aacc3f78520dc99949fd67d7addf7

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
3 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
d143e0c522ca71aa1571e75742ce512399998e9a606a49fef60423b85952fb9f

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
6 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
ef5ab7bd325fbe46b4eb31fb8efca4e4bfaa7ce9a16c4bf18b71defb44af1124

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
8 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
44e2095616437a3144f3684ec6814cda5f92af567ebcf3e55d7a7a6a2e0c8026

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
22 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
e3e0a629c9fa9b66d6026e4f1afdddd238a1cedd06c82a08c120b80d65e57781

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
12 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
5bd62f0f3d999f2de051272fa3634e5edf6fe43a2dd18d30482d368a03498914

Request headers

Response headers

Content-Type
image/gif
truncated
/ Frame C4DF
307 KB
0
Document
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
1970448c4da70546362f013c0d917ec406b59f1581942b7a32ff60ea683bbad3

Request headers

Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

truncated
/ Frame AA29
3 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
1701194cb45e149a5d61ec9596fb759a38863514586f291e250735e4fb0b33b5

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
2 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
d315eb962b63a7349feddbe7f3ac09a7967e24237a818b7ecb23dc58b70df341

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
2 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
41a31f76baf1536251acd1c5fa915b3ec6aefea543491cf3ea0eac00957fe152

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
3 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
5853ecd29976ec2e2e87e8ae153ee434bed0135eae3582a42f4f3f295e2d577b

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame 60DD
320 KB
0
Document
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
ca7e821bd1e6b3aaa1d2e95b837b776d53e6a6bde7265571c1beb38a0fbc7bf0

Request headers

Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

truncated
/ Frame AA29
6 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
e52e60c6cb8c90370e5454ca0c9657b58d6605925d3bedcf634a998ed1eff88a

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
6 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
9986313ee852bfe8818a27b0b2a6b36acc016b21777f7cdbee55773800beb48b

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame B0A9
612 KB
0
Document
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
9612dcfb40d520940926e3ee315f68f572aa54f22452206233c13f2a74ec9fa3

Request headers

Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

truncated
/ Frame 3805
618 KB
0
Document
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
456cf979b40f845e3013b83a82f8cd36e7320eff6663af13b12099ebcc07faee

Request headers

Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

truncated
/ Frame AA29
23 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
7a17567e30d1bf8df1f48e3bc266553b8a97af9fb6cc393eaa7e531ab1fbc91c

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
11 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
7ba0070e7053766bb9bfed264be1bc9938def85f09039485d9f442ea600bb5cf

Request headers

Response headers

Content-Type
image/png
truncated
/ Frame AA29
91 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
7800fc2eec29cde13108679dcdf79e5513ae0cc5d7c9fc9874580c56854aa225

Request headers

Response headers

Content-Type
image/png
MathJax.js
mathjax.rstudio.com/2.7.2/ Frame AA29
Redirect Chain
  • https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML
  • https://mathjax.rstudio.com/2.7.2/MathJax.js?config=TeX-AMS-MML_HTMLorMML
62 KB
62 KB
Script
General
Full URL
https://mathjax.rstudio.com/2.7.2/MathJax.js?config=TeX-AMS-MML_HTMLorMML
Requested by
Host: www.kateto.net
URL: http://www.kateto.net/polnet2018
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
143.204.214.44 Wilmington, United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
server-143-204-214-44.fra53.r.cloudfront.net
Software
AmazonS3 /
Resource Hash
7c2b61de9d81e1c64cce5afb3858b39a8e5191d2401c9e2f387a44ec568d711f

Request headers

Referer
http://www.kateto.net/polnet2018
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

date
Wed, 26 Dec 2018 22:55:05 GMT
via
1.1 a3c2566f9e36ad3cdf79fc6307fcf567.cloudfront.net (CloudFront)
last-modified
Mon, 28 Aug 2017 12:54:29 GMT
server
AmazonS3
age
62525
etag
"359b9c63cb3ba43384b2995e5699a63f"
x-cache
Hit from cloudfront
content-type
application/javascript
status
200
content-length
63244
x-amz-cf-id
xK9Js6O-_E61ffWAW46qnlNdzzok9ZfdpN_pxwIcm7SzM7LPt7VJow==

Redirect headers

date
Wed, 26 Dec 2018 12:38:22 GMT
via
1.1 a3c2566f9e36ad3cdf79fc6307fcf567.cloudfront.net (CloudFront)
server
AmazonS3
age
68232
location
https://mathjax.rstudio.com/2.7.2/MathJax.js?config=TeX-AMS-MML_HTMLorMML
x-cache
Hit from cloudfront
status
302
content-length
0
x-amz-cf-id
bgvE0brlnfBrkLVzGNh9-XNsdLi5e3icCLjO4B4wUBmy4mTyICJiHw==
TeX-AMS-MML_HTMLorMML.js
mathjax.rstudio.com/2.7.2/config/ Frame AA29
Redirect Chain
  • https://mathjax.rstudio.com/latest/config/TeX-AMS-MML_HTMLorMML.js?V=2.7.2
  • https://mathjax.rstudio.com/2.7.2/config/TeX-AMS-MML_HTMLorMML.js?V=2.7.2
239 KB
239 KB
Script
General
Full URL
https://mathjax.rstudio.com/2.7.2/config/TeX-AMS-MML_HTMLorMML.js?V=2.7.2
Requested by
Host: www.kateto.net
URL: http://www.kateto.net/polnet2018
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_128_GCM
Server
143.204.214.44 Wilmington, United States, ASN16509 (AMAZON-02 - Amazon.com, Inc., US),
Reverse DNS
server-143-204-214-44.fra53.r.cloudfront.net
Software
AmazonS3 /
Resource Hash
e7f6012ecb5ed7654b2d8e6b7e77f8fbe2706b0746d4a356a9d6d026287dea12

Request headers

Referer
http://www.kateto.net/polnet2018
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36

Response headers

date
Wed, 26 Dec 2018 22:55:05 GMT
via
1.1 a3c2566f9e36ad3cdf79fc6307fcf567.cloudfront.net (CloudFront)
last-modified
Mon, 28 Aug 2017 12:54:30 GMT
server
AmazonS3
age
62526
etag
"544f69a31055e5aae4c4f1606c38f947"
x-cache
Hit from cloudfront
content-type
application/javascript
status
200
content-length
244250
x-amz-cf-id
kTSevrXvWHZSmxj6tcQECfAT3aOYE-2m4wgM0-Mpt9D9aQxWca5Vwg==

Redirect headers

date
Wed, 26 Dec 2018 12:38:22 GMT
via
1.1 a3c2566f9e36ad3cdf79fc6307fcf567.cloudfront.net (CloudFront)
server
AmazonS3
age
68234
location
https://mathjax.rstudio.com/2.7.2/config/TeX-AMS-MML_HTMLorMML.js?V=2.7.2
x-cache
Hit from cloudfront
status
302
content-length
0
x-amz-cf-id
R9CeFJEDFXqrFgWfGsNhdY9FmwRBz32XaKBdLLVzlYho5Ml3oXRwmQ==

Verdicts & Comments Add Verdict or Comment

153 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| onselectstart object| onselectionchange function| queueMicrotask string| mi_version boolean| mi_track_user string| mi_no_track_reason string| disableStr function| __gaTrackerIsOptedOut function| __gaTrackerOptout string| GoogleAnalyticsObject function| __gaTracker object| _wpemojiSettings object| google_tag_data object| gaplugins object| gaGlobal object| gaData object| twemoji object| wp object| monsterinsights_frontend function| MonsterInsights object| MonsterInsightsObject undefined| $ function| jQuery object| doc object| PT_CV_PUBLIC object| PT_CV_PAGINATION object| jQuery1124021060515064398722 function| EventEmitter object| eventie function| cvp_imagesLoaded object| cvp_Modernizr function| cvp_Shuffle function| cvp_common object| cvsf_data function| cvp_js function| jQueryBridget function| EvEmitter function| getSize function| matchesSelector object| fizzyUIUtils function| Outlayer function| Isotope function| Masonry object| Modernizr object| fusionVideoGeneralVars function| insertParam function| registerYoutubePlayers function| loadYoutubeIframeAPI function| onYouTubePlayerAPIReady function| onPlayerStateChange function| onPlayerReady function| ytVidId function| playVideoAndPauseOthers function| YTReady object| fusionLightboxVideoVars object| browserPrefixes object| fusionLightboxVars object| avadaLightBox object| $ilInstances function| imagesLoaded function| Packery object| avadaPortfolioVars object| fusionRecentPostsVars object| fusionEqualHeightVars object| cssua function| getAdminbarHeight function| getWaypointOffset object| fusionAnimationsVars function| _fusionRefreshScroll function| _fusionParallaxAll function| _fusionRefreshWindow object| _fusionImageParallaxImages object| fusionVideoBgVars function| _fbRowGetAllElementsWithAttribute function| _fbRowOnPlayerReady function| _fbRowOnPlayerStateChange function| resizeVideo function| vimeoReady function| fusionInitVimeoPlayers object| $youtubeBGVideos function| onYouTubeIframeAPIReady object| fusionContainerVars function| setCorrectResizeValuesForScrollSections function| scrollToCurrentScrollSection object| fusionTestimonialVars object| fusionTabVars object| fusionBgImageVars function| fusionCalcColumnEqualHeights object| fusionMapsVars function| getScrollBarWidth object| fusionCountersBox function| Color function| Chart object| Vimeo object| fusionVideoVars object| fusionCarouselVars function| generateCarousel object| fusionFlexSliderVars object| fusionBlogVars function| checkHoverTouchState object| fusionIe1011Vars function| addStylesForOldIEVersions object| avadaHeaderVars function| getStickyHeaderHeight function| getWaypointTopOffset object| avadaMenuVars object| fusionScrollToAnchorVars object| fusionTypographyVars function| fusionSetOriginalTypographyData function| fusionCalculateResponsiveTypeValues object| avadaCommentVars function| avadaAddQuantityBoxes function| calcSelectArrowDimensions object| avadaSidebarsVars function| setStickySidebarStatus function| calcStickySidebarOffset object| toTopscreenReaderText object| avadaToTopVars object| avadaElasticSliderVars object| avadaFusionSliderVars number| headerHeight function| fusionReanimateSlider string| responsiveTypeElements number| _fusionScrollTop number| _fusionWindowHeight number| _fusionScrollLeft number| _fusionWindowWidth boolean| fusionAccordianClick string| ns3 number| dur2 number| perc object| fusionVimeoPlayers number| $headerParentHeight number| $headerHeight number| $menuHeight number| $scrolled_header_height object| $stickyTrigger number| $wpadminbarHeight number| $stickyTrigger_position number| $woo_store_notice number| $top_frame number| $sticky_header_type number| $slider_offset number| $site_width boolean| $media_query_test_1 boolean| $media_query_test_2 boolean| $media_query_test_3 boolean| $media_query_test_4 number| $standardLogoHeight number| $initial_desktop_header_height string| $initial_sticky_header_shrinkage boolean| $sticky_can_be_shrinked boolean| mobileMenuSepAdded

0 Cookies

11 Console Messages

Source Level URL
Text
console-api log URL: http://kateto.net/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.4.1(Line 2)
Message:
JQMIGRATE: Migrate is installed, version 1.4.1
console-api debug URL: data:text/html;base64,PCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSdlbic+DQogIDxoZWFkPg0KICAg%0AIDxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4NCiAgICAgIDwhLS0gY3NzIGZvciBzdHls%0AaW5nIHRoZSBkMy5zbGlkZXIgbGliIC0tPg0KICAgICAgPHN0eWxlIHR5cGU9J3Rl%0AeHQvY3NzJz4uZDMtc2xpZGVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAg%0AIGZvbnQtZmFtaWx5OiBWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7CiAgICBmb250%0ALXNpemU6IDEuMWVtOwogICAgYm9yZGVyOiAxcHggc29saWQgI2FhYWFhYTsKICAg%0AIHotaW5kZXg6IDI7Cn0KCi5kMy1zbGlkZXItaG9yaXpvbnRhbCB7CiAgICBoZWln%0AaHQ6IC44ZW07Cn0gIAoKLmQzLXNsaWRlci1yYW5nZSB7CiAgYmFja2dyb3VuZDoj%0AMjk4MGI5OwogIGxlZnQ6MHB4OwogIHJpZ2h0OjBweDsKICBoZWlnaHQ6IDAuOGVt%0AOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKfQoKLmQzLXNsaWRlci1yYW5nZS12ZXJ0%0AaWNhbCB7CiAgYmFja2dyb3VuZDojMjk4MGI5OwogIGxlZnQ6MHB4OwogIHJpZ2h0%0AOjBweDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOjA7Cn0KCi5kMy1zbGlk%0AZXItdmVydGljYWwgewogICAgd2lkdGg6IC44ZW07CiAgICBoZWlnaHQ6IDEwMHB4%0AOwp9ICAgICAgCgouZDMtc2xpZGVyLWhhbmRsZSB7CiAgICBwb3NpdGlvbjogYWJz%0Ab2x1dGU7CiAgICB3aWR0aDogMS4yZW07CiAgICBoZWlnaHQ6IDEuMmVtOwogICAg%0AYm9yZGVyOiAxcHggc29saWQgI2QzZDNkMzsKICAgIGJvcmRlci1yYWRpdXM6IDRw%0AeDsKICAgIGJhY2tncm91bmQ6ICNlZWU7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXIt%0AZ3JhZGllbnQodG8gYm90dG9tLCAjZWVlIDAlLCAjZGRkIDEwMCUpOwogICAgei1p%0AbmRleDogMzsKICAgIGN1cnNvcjogbW92ZTsKfQoKLmQzLXNsaWRlci1oYW5kbGU6%0AaG92ZXIgewogICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTk5OTsKfQoKLmQzLXNs%0AaWRlci1ob3Jpem9udGFsIC5kMy1zbGlkZXItaGFuZGxlIHsKICAgIHRvcDogLS4z%0AZW07Cn0KCi5kMy1zbGlkZXItYXhpcyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7%0ACiAgICB6LWluZGV4OiAxOyAgICAKfQoKLmQzLXNsaWRlci1heGlzLWJvdHRvbSB7%0ACiAgICB0b3A6IC44ZW07Cn0KCi5kMy1zbGlkZXItYXhpcy1yaWdodCB7CiAgICBs%0AZWZ0OiAuOGVtOwp9CgouZDMtc2xpZGVyLWF4aXMgcGF0aCB7CiAgICBzdHJva2Ut%0Ad2lkdGg6IDA7CiAgICBmaWxsOiBub25lOwp9CgouZDMtc2xpZGVyLWF4aXMgbGlu%0AZSB7CiAgICBmaWxsOiBub25lOwogICAgc3Ryb2tlOiAjYWFhOwogICAgc2hhcGUt%0AcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwp9CgouZDMtc2xpZGVyLWF4aXMgdGV4dCB7%0ACiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5kMy1zbGlkZXItdmVydGljYWwgLmQz%0ALXNsaWRlci1oYW5kbGUgewogICAgbGVmdDogLS4yNWVtOwogICAgbWFyZ2luLWxl%0AZnQ6IDA7CiAgICBtYXJnaW4tYm90dG9tOiAtLjZlbTsgICAgICAKfTwvc3R5bGU+%0ADQogICAgICA8IS0tIGNzcyBmb3Igc3R5bGluZyB0aGUgbmR0di1kMyByZW5kZXIg%0AYW5kIGNvbXBvbmVudHMgLS0+DQogICAgICA8c3R5bGUgdHlwZT0ndGV4dC9jc3Mn%0APi5uZHR2LWZ1bGxzY3JlZW4geyAKICBwYWRkaW5nOiAwOwogIG1hcmdpbjogMDsK%0AICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KCi5uZHR2LWQzLWNvbnRh%0AaW5lciB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoubWFpbiwgLnhsYWIgewog%0AIHRleHQtYW5jaG9yOiBtaWRkbGU7Cn0KCi5sYWJlbCwgLm1haW4sIC54bGFiLCAu%0AdG9vbHRpcCB7CiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7Cn0KCi5kcmFnZ2lu%0AZyB7CiAgY3Vyc29yOiBtb3ZlOwp9Cgoubm9kZSB7CiAgc3Ryb2tlLXdpZHRoOiAx%0AcHg7CiAgZmlsbDogcmVkOwogIHN0cm9rZTogYmxhY2s7Cn0KCi5ub2RlLCAuZWRn%0AZSB7CiAgY3Vyc29yOiBwb2ludGVyOwogIC8qdHJhbnNpdGlvbjogc3Ryb2tlLXdp%0AZHRoIDAuMnMgZWFzZTsqLwp9CgovKi5ub2RlOmhvdmVyLCAuZWRnZTpob3ZlciB7%0ACiAgc3Ryb2tlLXdpZHRoOiA1cHggIWltcG9ydGFudDsKfSovCgouZWRnZSB7CiAg%0Ac3Ryb2tlOiBibGFjazsKfQoKLmxhYmVsIHsKICBwb2ludGVyLWV2ZW50czogbm9u%0AZTsKfQoKLmdyYXBoIHsgCiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG92ZXJmbG93%0AOiBoaWRkZW47Cn0KCi5rZXkgewogIHBhZGRpbmc6IDEwcHg7CiAgdGV4dC1hbGln%0AbjogY2VudGVyOwp9CgouY29udHJvbHMgeyAKICBtYXJnaW46IDEwcHggMjBweDsK%0AICBoZWlnaHQ6IDQwcHg7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBwb3Np%0AdGlvbjogYWJzb2x1dGU7CiAgYm90dG9tOiAwcHg7CiAgbGVmdDogMHB4OwogIHJp%0AZ2h0OiAwcHg7Cn0KCi5wbGF5LWNvbnRyb2wtY29udGFpbmVyPmRpdiB7CiAgd2lk%0AdGg6IDI1cHg7CiAgaGVpZ2h0OiAyNXB4OwogIG92ZXJmbG93OiBoaWRkZW47CiAg%0AZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgouY29udHJvbHMgLmljb24sIC5uZHR2%0ALW1lbnUtY29udGFpbmVyIC5pY29uIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6%0AIDEwMCU7CiAgY3Vyc29yOiBwb2ludGVyOwp9CgouY29udHJvbHMgLmljb246aG92%0AZXIgewogIGZpbGw6IGJsdWU7Cn0KCi5kYXRhX2Nob29zZXJfY29udGFpbmVyIHsK%0AICBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMTBweDsgbGVmdDogMTBweDsKfQoK%0ALnBsYXktY29udHJvbC1jb250YWluZXIgewogIGZsb2F0OiByaWdodDsgCiAgYmFj%0Aa2dyb3VuZDogI2NjYzsgCiAgYm9yZGVyLXJhZGl1czogNXB4OyAKICBwYWRkaW5n%0AOiA3cHg7CiAgcGFkZGluZy1ib3R0b206IDNweDsKICBib3gtc2l6aW5nOiBib3Jk%0AZXItYm94Owp9CgoubmR0di1kMy1jb250YWluZXIgeyAKICBwb3NpdGlvbjogcmVs%0AYXRpdmU7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBib3JkZXI6IDFweCBz%0Ab2xpZDsKfQoKLnNsaWRlci1jb250cm9sLWNvbnRhaW5lciB7IAogIG1hcmdpbi1y%0AaWdodDogMTYwcHg7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKLmQzLXNs%0AaWRlci1oYW5kbGUgewogIG1pbi13aWR0aDogMTBweDsKfQoKLmQzLXNsaWRlci1h%0AeGlzIHsKICBoZWlnaHQ6IDIwcHg7Cn0KCi50b29sdGlwIHsKICBkaXNwbGF5OiBu%0Ab25lOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiAxMDAwOwogIHBh%0AZGRpbmc6IDEwcHggMTBweDsKICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1%0ALCAxKTsKICBib3JkZXI6IDFweCBzb2xpZCAjNjY2OwogIG9wYWNpdHk6IDE7ICAv%0AKiB0aGlzIGlzIHRvIHByZXZlbnQgYm9vdHN0cmFwJ3MgdG9vbHRpcCBydWxlIGZy%0Ab20gb3ZlcnJkaW5nICovCn0KCi5mcmFtZUluZm8gewogIGRpc3BsYXk6IG5vbmU7%0ACiAgcG9zaXRpb246IGFic29sdXRlOwogIGJvdHRvbTogMHB4OwogIGxlZnQ6IDBw%0AeDsKICBwYWRkaW5nOiA1cHg7Cn0KCi5kdXJhdGlvbkNvbnRyb2wgewogIHdpZHRo%0AOiAxNTBweDsKICBtYXJnaW4tYm90dG9tOiAyMHB4OyAKfQoKLmNvbnRhaW5lciAu%0Ac2NyZWVuIHsKICBvcGFjaXR5OiAwOwogIHBvaW50ZXItZXZlbnRzOiBub25lOwog%0AIGZpbGw6IG5vbmU7Cn0KCi5jb250YWluZXIgLnNjcmVlbi5uZXR3b3JrLXNlbGVj%0AdGVkIHsKICBvcGFjaXR5OiAuNjsKfQoKLm5kdHYtbWVudS1jb250YWluZXIgewog%0AIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDVweDsKICByaWdodDogNXB4Owp9%0ACgoubmR0di1tZW51LWljb24gewogIHdpZHRoOiAyNXB4OwogIGhlaWdodDogMjVw%0AeDsKICBmbG9hdDogcmlnaHQ7CiAgei1pbmRleDogMTAwOwp9CgoubmR0di1tZW51%0ALWljb24ubWVudS1hY3RpdmUgewogIGJhY2tncm91bmQ6ICNmZmY7CiAgYm9yZGVy%0AOiAxcHggc29saWQgIzY2NjsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2Zm%0AZjsKfQoKLm5kdHYtbWVudSB7CiAgYmFja2dyb3VuZDogd2hpdGU7CiAgYm9yZGVy%0AOiAxcHggc29saWQgIzY2NjsKICBib3gtc2hhZG93OiAwcHggMnB4IDRweCByZ2Jh%0AKDAsMCwwLDAuMik7CiAgcGFkZGluZzogMTBweDsKICBtYXJnaW4tdG9wOiAyNXB4%0AOwogIGRpc3BsYXk6IG5vbmU7Cn0KCi5tZW51LWl0ZW0gewogIHBhZGRpbmc6IDEw%0AcHggMHB4OwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQ0NDOwp9CgoubWVu%0AdS1pdGVtOmZpcnN0LWNoaWxkIHsKICBwYWRkaW5nLXRvcDogMHB4Owp9CgoubWVu%0AdS1pdGVtOmxhc3QtY2hpbGQgewogIHBhZGRpbmctYm90dG9tOiAwcHg7CiAgYm9y%0AZGVyOiBub25lOwp9Cjwvc3R5bGU+DQogICAgPCEtLSBtaW5pbWl6ZWQgZDMuanMg%0AbGlicmFyeSAtLT4NCiAgICAgIDxzY3JpcHQ+IWZ1bmN0aW9uKCl7ZnVuY3Rpb24g%0AbihuLHQpe3JldHVybiB0Pm4/LTE6bj50PzE6bj49dD8wOjAvMH1mdW5jdGlvbiB0%0AKG4pe3JldHVybiBudWxsIT1uJiYhaXNOYU4obil9ZnVuY3Rpb24gZShuKXtyZXR1%0Acm57bGVmdDpmdW5jdGlvbih0LGUscix1KXtmb3IoYXJndW1lbnRzLmxlbmd0aDwz%0AJiYocj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJih1PXQubGVuZ3RoKTt1PnI7KXt2%0AYXIgaT1yK3U+Pj4xO24odFtpXSxlKTwwP3I9aSsxOnU9aX1yZXR1cm4gcn0scmln%0AaHQ6ZnVuY3Rpb24odCxlLHIsdSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9%0AMCksYXJndW1lbnRzLmxlbmd0aDw0JiYodT10Lmxlbmd0aCk7dT5yOyl7dmFyIGk9%0Acit1Pj4+MTtuKHRbaV0sZSk+MD91PWk6cj1pKzF9cmV0dXJuIHJ9fX1mdW5jdGlv%0AbiByKG4pe3JldHVybiBuLmxlbmd0aH1mdW5jdGlvbiB1KG4pe2Zvcih2YXIgdD0x%0AO24qdCUxOyl0Kj0xMDtyZXR1cm4gdH1mdW5jdGlvbiBpKG4sdCl7dHJ5e2Zvcih2%0AYXIgZSBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHt2%0AYWx1ZTp0W2VdLGVudW1lcmFibGU6ITF9KX1jYXRjaChyKXtuLnByb3RvdHlwZT10%0AfX1mdW5jdGlvbiBvKCl7fWZ1bmN0aW9uIGEobil7cmV0dXJuIG9hK24gaW4gdGhp%0Ac31mdW5jdGlvbiBjKG4pe3JldHVybiBuPW9hK24sbiBpbiB0aGlzJiZkZWxldGUg%0AdGhpc1tuXX1mdW5jdGlvbiBsKCl7dmFyIG49W107cmV0dXJuIHRoaXMuZm9yRWFj%0AaChmdW5jdGlvbih0KXtuLnB1c2godCl9KSxufWZ1bmN0aW9uIHMoKXt2YXIgbj0w%0AO2Zvcih2YXIgdCBpbiB0aGlzKXQuY2hhckNvZGVBdCgwKT09PWFhJiYrK247cmV0%0AdXJuIG59ZnVuY3Rpb24gZigpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG4uY2hhckNv%0AZGVBdCgwKT09PWFhKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGgoKXt9ZnVu%0AY3Rpb24gZyhuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0%0ALGFyZ3VtZW50cyk7cmV0dXJuIHI9PT10P246cn19ZnVuY3Rpb24gcChuLHQpe2lm%0AKHQgaW4gbilyZXR1cm4gdDt0PXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5z%0AbGljZSgxKTtmb3IodmFyIGU9MCxyPWNhLmxlbmd0aDtyPmU7KytlKXt2YXIgdT1j%0AYVtlXSt0O2lmKHUgaW4gbilyZXR1cm4gdX19ZnVuY3Rpb24gdigpe31mdW5jdGlv%0AbiBkKCl7fWZ1bmN0aW9uIG0obil7ZnVuY3Rpb24gdCgpe2Zvcih2YXIgdCxyPWUs%0AdT0tMSxpPXIubGVuZ3RoOysrdTxpOykodD1yW3VdLm9uKSYmdC5hcHBseSh0aGlz%0ALGFyZ3VtZW50cyk7cmV0dXJuIG59dmFyIGU9W10scj1uZXcgbztyZXR1cm4gdC5v%0Abj1mdW5jdGlvbih0LHUpe3ZhciBpLG89ci5nZXQodCk7cmV0dXJuIGFyZ3VtZW50%0Acy5sZW5ndGg8Mj9vJiZvLm9uOihvJiYoby5vbj1udWxsLGU9ZS5zbGljZSgwLGk9%0AZS5pbmRleE9mKG8pKS5jb25jYXQoZS5zbGljZShpKzEpKSxyLnJlbW92ZSh0KSks%0AdSYmZS5wdXNoKHIuc2V0KHQse29uOnV9KSksbil9LHR9ZnVuY3Rpb24geSgpe1Zv%0ALmV2ZW50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24geCgpe2Zvcih2YXIgbix0%0APVZvLmV2ZW50O249dC5zb3VyY2VFdmVudDspdD1uO3JldHVybiB0fWZ1bmN0aW9u%0AIE0obil7Zm9yKHZhciB0PW5ldyBkLGU9MCxyPWFyZ3VtZW50cy5sZW5ndGg7Kytl%0APHI7KXRbYXJndW1lbnRzW2VdXT1tKHQpO3JldHVybiB0Lm9mPWZ1bmN0aW9uKGUs%0Acil7cmV0dXJuIGZ1bmN0aW9uKHUpe3RyeXt2YXIgaT11LnNvdXJjZUV2ZW50PVZv%0ALmV2ZW50O3UudGFyZ2V0PW4sVm8uZXZlbnQ9dSx0W3UudHlwZV0uYXBwbHkoZSxy%0AKX1maW5hbGx5e1ZvLmV2ZW50PWl9fX0sdH1mdW5jdGlvbiBfKG4pe3JldHVybiBz%0AYShuLHZhKSxufWZ1bmN0aW9uIGIobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9m%0AIG4/bjpmdW5jdGlvbigpe3JldHVybiBmYShuLHRoaXMpfX1mdW5jdGlvbiB3KG4p%0Ae3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24oKXtyZXR1cm4g%0AaGEobix0aGlzKX19ZnVuY3Rpb24gUyhuLHQpe2Z1bmN0aW9uIGUoKXt0aGlzLnJl%0AbW92ZUF0dHJpYnV0ZShuKX1mdW5jdGlvbiByKCl7dGhpcy5yZW1vdmVBdHRyaWJ1%0AdGVOUyhuLnNwYWNlLG4ubG9jYWwpfWZ1bmN0aW9uIHUoKXt0aGlzLnNldEF0dHJp%0AYnV0ZShuLHQpfWZ1bmN0aW9uIGkoKXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3Bh%0AY2Usbi5sb2NhbCx0KX1mdW5jdGlvbiBvKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFy%0AZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZShuKTp0aGlzLnNl%0AdEF0dHJpYnV0ZShuLGUpfWZ1bmN0aW9uIGEoKXt2YXIgZT10LmFwcGx5KHRoaXMs%0AYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFj%0AZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxl%0AKX1yZXR1cm4gbj1Wby5ucy5xdWFsaWZ5KG4pLG51bGw9PXQ/bi5sb2NhbD9yOmU6%0AImZ1bmN0aW9uIj09dHlwZW9mIHQ/bi5sb2NhbD9hOm86bi5sb2NhbD9pOnV9ZnVu%0AY3Rpb24gayhuKXtyZXR1cm4gbi50cmltKCkucmVwbGFjZSgvXHMrL2csIiAiKX1m%0AdW5jdGlvbiBFKG4pe3JldHVybiBuZXcgUmVnRXhwKCIoPzpefFxccyspIitWby5y%0AZXF1b3RlKG4pKyIoPzpcXHMrfCQpIiwiZyIpfWZ1bmN0aW9uIEEobil7cmV0dXJu%0AKG4rIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBDKG4sdCl7ZnVu%0AY3Rpb24gZSgpe2Zvcih2YXIgZT0tMTsrK2U8dTspbltlXSh0aGlzLHQpfWZ1bmN0%0AaW9uIHIoKXtmb3IodmFyIGU9LTEscj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTsr%0AK2U8dTspbltlXSh0aGlzLHIpfW49QShuKS5tYXAoTik7dmFyIHU9bi5sZW5ndGg7%0AcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/cjplfWZ1bmN0aW9uIE4obil7dmFy%0AIHQ9RShuKTtyZXR1cm4gZnVuY3Rpb24oZSxyKXtpZih1PWUuY2xhc3NMaXN0KXJl%0AdHVybiByP3UuYWRkKG4pOnUucmVtb3ZlKG4pO3ZhciB1PWUuZ2V0QXR0cmlidXRl%0AKCJjbGFzcyIpfHwiIjtyPyh0Lmxhc3RJbmRleD0wLHQudGVzdCh1KXx8ZS5zZXRB%0AdHRyaWJ1dGUoImNsYXNzIixrKHUrIiAiK24pKSk6ZS5zZXRBdHRyaWJ1dGUoImNs%0AYXNzIixrKHUucmVwbGFjZSh0LCIgIikpKX19ZnVuY3Rpb24geihuLHQsZSl7ZnVu%0AY3Rpb24gcigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9ZnVuY3Rpb24g%0AdSgpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfWZ1bmN0aW9uIGkoKXt2%0AYXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUu%0AcmVtb3ZlUHJvcGVydHkobik6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLHIsZSl9%0AcmV0dXJuIG51bGw9PXQ/cjoiZnVuY3Rpb24iPT10eXBlb2YgdD9pOnV9ZnVuY3Rp%0Ab24gTChuLHQpe2Z1bmN0aW9uIGUoKXtkZWxldGUgdGhpc1tuXX1mdW5jdGlvbiBy%0AKCl7dGhpc1tuXT10fWZ1bmN0aW9uIHUoKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJn%0AdW1lbnRzKTtudWxsPT1lP2RlbGV0ZSB0aGlzW25dOnRoaXNbbl09ZX1yZXR1cm4g%0AbnVsbD09dD9lOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3U6cn1mdW5jdGlvbiBUKG4p%0Ae3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246KG49Vm8ubnMucXVhbGlmeShu%0AKSkubG9jYWw/ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNy%0AZWF0ZUVsZW1lbnROUyhuLnNwYWNlLG4ubG9jYWwpfTpmdW5jdGlvbigpe3JldHVy%0AbiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHRoaXMubmFtZXNw%0AYWNlVVJJLG4pfX1mdW5jdGlvbiBxKG4pe3JldHVybntfX2RhdGFfXzpufX1mdW5j%0AdGlvbiBSKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBwYSh0aGlzLG4pfX1m%0AdW5jdGlvbiBEKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RofHwodD1uKSxmdW5j%0AdGlvbihuLGUpe3JldHVybiBuJiZlP3Qobi5fX2RhdGFfXyxlLl9fZGF0YV9fKToh%0Abi0hZX19ZnVuY3Rpb24gUChuLHQpe2Zvcih2YXIgZT0wLHI9bi5sZW5ndGg7cj5l%0AO2UrKylmb3IodmFyIHUsaT1uW2VdLG89MCxhPWkubGVuZ3RoO2E+bztvKyspKHU9%0AaVtvXSkmJnQodSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFUobil7cmV0dXJuIHNh%0AKG4sbWEpLG59ZnVuY3Rpb24gaihuKXt2YXIgdCxlO3JldHVybiBmdW5jdGlvbihy%0ALHUsaSl7dmFyIG8sYT1uW2ldLnVwZGF0ZSxjPWEubGVuZ3RoO2ZvcihpIT1lJiYo%0AZT1pLHQ9MCksdT49dCYmKHQ9dSsxKTshKG89YVt0XSkmJisrdDxjOyk7cmV0dXJu%0AIG99fWZ1bmN0aW9uIEgoKXt2YXIgbj10aGlzLl9fdHJhbnNpdGlvbl9fO24mJisr%0Abi5hY3RpdmV9ZnVuY3Rpb24gRihuLHQsZSl7ZnVuY3Rpb24gcigpe3ZhciB0PXRo%0AaXNbb107dCYmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLHQsdC4kKSxkZWxl%0AdGUgdGhpc1tvXSl9ZnVuY3Rpb24gdSgpe3ZhciB1PWModCwkbyhhcmd1bWVudHMp%0AKTtyLmNhbGwodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKG4sdGhpc1tvXT11%0ALHUuJD1lKSx1Ll89dH1mdW5jdGlvbiBpKCl7dmFyIHQsZT1uZXcgUmVnRXhwKCJe%0AX19vbihbXi5dKykiK1ZvLnJlcXVvdGUobikrIiQiKTtmb3IodmFyIHIgaW4gdGhp%0AcylpZih0PXIubWF0Y2goZSkpe3ZhciB1PXRoaXNbcl07dGhpcy5yZW1vdmVFdmVu%0AdExpc3RlbmVyKHRbMV0sdSx1LiQpLGRlbGV0ZSB0aGlzW3JdfX12YXIgbz0iX19v%0AbiIrbixhPW4uaW5kZXhPZigiLiIpLGM9TzthPjAmJihuPW4uc2xpY2UoMCxhKSk7%0AdmFyIGw9eGEuZ2V0KG4pO3JldHVybiBsJiYobj1sLGM9WSksYT90P3U6cjp0P3Y6%0AaX1mdW5jdGlvbiBPKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPVZvLmV2%0AZW50O1ZvLmV2ZW50PWUsdFswXT10aGlzLl9fZGF0YV9fO3RyeXtuLmFwcGx5KHRo%0AaXMsdCl9ZmluYWxseXtWby5ldmVudD1yfX19ZnVuY3Rpb24gWShuLHQpe3ZhciBl%0APU8obix0KTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHQ9dGhpcyxyPW4ucmVsYXRl%0AZFRhcmdldDtyJiYocj09PXR8fDgmci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0%0AKSl8fGUuY2FsbCh0LG4pfX1mdW5jdGlvbiBJKCl7dmFyIG49Ii5kcmFnc3VwcHJl%0Ac3MtIisgKytfYSx0PSJjbGljayIrbixlPVZvLnNlbGVjdChKbykub24oInRvdWNo%0AbW92ZSIrbix5KS5vbigiZHJhZ3N0YXJ0IituLHkpLm9uKCJzZWxlY3RzdGFydCIr%0Abix5KTtpZihNYSl7dmFyIHI9V28uc3R5bGUsdT1yW01hXTtyW01hXT0ibm9uZSJ9%0AcmV0dXJuIGZ1bmN0aW9uKGkpe2Z1bmN0aW9uIG8oKXtlLm9uKHQsbnVsbCl9ZS5v%0AbihuLG51bGwpLE1hJiYocltNYV09dSksaSYmKGUub24odCxmdW5jdGlvbigpe3ko%0AKSxvKCl9LCEwKSxzZXRUaW1lb3V0KG8sMCkpfX1mdW5jdGlvbiBaKG4sdCl7dC5j%0AaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSk7dmFyIGU9bi5v%0Ad25lclNWR0VsZW1lbnR8fG47aWYoZS5jcmVhdGVTVkdQb2ludCl7dmFyIHI9ZS5j%0AcmVhdGVTVkdQb2ludCgpO2lmKDA+YmEmJihKby5zY3JvbGxYfHxKby5zY3JvbGxZ%0AKSl7ZT1Wby5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInN2ZyIpLnN0eWxlKHtwb3Np%0AdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxwYWRkaW5nOjAs%0AYm9yZGVyOiJub25lIn0sImltcG9ydGFudCIpO3ZhciB1PWVbMF1bMF0uZ2V0U2Ny%0AZWVuQ1RNKCk7YmE9ISh1LmZ8fHUuZSksZS5yZW1vdmUoKX1yZXR1cm4gYmE/KHIu%0AeD10LnBhZ2VYLHIueT10LnBhZ2VZKTooci54PXQuY2xpZW50WCxyLnk9dC5jbGll%0AbnRZKSxyPXIubWF0cml4VHJhbnNmb3JtKG4uZ2V0U2NyZWVuQ1RNKCkuaW52ZXJz%0AZSgpKSxbci54LHIueV19dmFyIGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTty%0AZXR1cm5bdC5jbGllbnRYLWkubGVmdC1uLmNsaWVudExlZnQsdC5jbGllbnRZLWku%0AdG9wLW4uY2xpZW50VG9wXX1mdW5jdGlvbiBWKCl7cmV0dXJuIFZvLmV2ZW50LmNo%0AYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXJ9ZnVuY3Rpb24gWCgpe3JldHVybiBW%0Aby5ldmVudC50YXJnZXR9ZnVuY3Rpb24gJCgpe3JldHVybiBKb31mdW5jdGlvbiBC%0AKG4pe3JldHVybiBuPjA/MTowPm4/LTE6MH1mdW5jdGlvbiBXKG4sdCxlKXtyZXR1%0Acm4odFswXS1uWzBdKSooZVsxXS1uWzFdKS0odFsxXS1uWzFdKSooZVswXS1uWzBd%0AKX1mdW5jdGlvbiBKKG4pe3JldHVybiBuPjE/MDotMT5uP3dhOk1hdGguYWNvcyhu%0AKX1mdW5jdGlvbiBHKG4pe3JldHVybiBuPjE/a2E6LTE+bj8ta2E6TWF0aC5hc2lu%0AKG4pfWZ1bmN0aW9uIEsobil7cmV0dXJuKChuPU1hdGguZXhwKG4pKS0xL24pLzJ9%0AZnVuY3Rpb24gUShuKXtyZXR1cm4oKG49TWF0aC5leHAobikpKzEvbikvMn1mdW5j%0AdGlvbiBudChuKXtyZXR1cm4oKG49TWF0aC5leHAoMipuKSktMSkvKG4rMSl9ZnVu%0AY3Rpb24gdHQobil7cmV0dXJuKG49TWF0aC5zaW4obi8yKSkqbn1mdW5jdGlvbiBl%0AdCgpe31mdW5jdGlvbiBydChuLHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBy%0AdD8odGhpcy5oPStuLHRoaXMucz0rdCx2b2lkKHRoaXMubD0rZSkpOmFyZ3VtZW50%0Acy5sZW5ndGg8Mj9uIGluc3RhbmNlb2YgcnQ/bmV3IHJ0KG4uaCxuLnMsbi5sKTpt%0AdCgiIituLHl0LHJ0KTpuZXcgcnQobix0LGUpfWZ1bmN0aW9uIHV0KG4sdCxlKXtm%0AdW5jdGlvbiByKG4pe3JldHVybiBuPjM2MD9uLT0zNjA6MD5uJiYobis9MzYwKSw2%0AMD5uP2krKG8taSkqbi82MDoxODA+bj9vOjI0MD5uP2krKG8taSkqKDI0MC1uKS82%0AMDppfWZ1bmN0aW9uIHUobil7cmV0dXJuIE1hdGgucm91bmQoMjU1KnIobikpfXZh%0AciBpLG87cmV0dXJuIG49aXNOYU4obik/MDoobiU9MzYwKTwwP24rMzYwOm4sdD1p%0Ac05hTih0KT8wOjA+dD8wOnQ+MT8xOnQsZT0wPmU/MDplPjE/MTplLG89LjU+PWU/%0AZSooMSt0KTplK3QtZSp0LGk9MiplLW8sbmV3IGd0KHUobisxMjApLHUobiksdShu%0ALTEyMCkpfWZ1bmN0aW9uIGl0KG4sdCxlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9m%0AIGl0Pyh0aGlzLmg9K24sdGhpcy5jPSt0LHZvaWQodGhpcy5sPStlKSk6YXJndW1l%0AbnRzLmxlbmd0aDwyP24gaW5zdGFuY2VvZiBpdD9uZXcgaXQobi5oLG4uYyxuLmwp%0AOm4gaW5zdGFuY2VvZiBhdD9sdChuLmwsbi5hLG4uYik6bHQoKG49eHQoKG49Vm8u%0AcmdiKG4pKS5yLG4uZyxuLmIpKS5sLG4uYSxuLmIpOm5ldyBpdChuLHQsZSl9ZnVu%0AY3Rpb24gb3Qobix0LGUpe3JldHVybiBpc05hTihuKSYmKG49MCksaXNOYU4odCkm%0AJih0PTApLG5ldyBhdChlLE1hdGguY29zKG4qPUNhKSp0LE1hdGguc2luKG4pKnQp%0AfWZ1bmN0aW9uIGF0KG4sdCxlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGF0Pyh0%0AaGlzLmw9K24sdGhpcy5hPSt0LHZvaWQodGhpcy5iPStlKSk6YXJndW1lbnRzLmxl%0Abmd0aDwyP24gaW5zdGFuY2VvZiBhdD9uZXcgYXQobi5sLG4uYSxuLmIpOm4gaW5z%0AdGFuY2VvZiBpdD9vdChuLmwsbi5jLG4uaCk6eHQoKG49Z3QobikpLnIsbi5nLG4u%0AYik6bmV3IGF0KG4sdCxlKX1mdW5jdGlvbiBjdChuLHQsZSl7dmFyIHI9KG4rMTYp%0ALzExNix1PXIrdC81MDAsaT1yLWUvMjAwO3JldHVybiB1PXN0KHUpKkhhLHI9c3Qo%0AcikqRmEsaT1zdChpKSpPYSxuZXcgZ3QoaHQoMy4yNDA0NTQyKnUtMS41MzcxMzg1%0AKnItLjQ5ODUzMTQqaSksaHQoLS45NjkyNjYqdSsxLjg3NjAxMDgqcisuMDQxNTU2%0AKmkpLGh0KC4wNTU2NDM0KnUtLjIwNDAyNTkqcisxLjA1NzIyNTIqaSkpfWZ1bmN0%0AaW9uIGx0KG4sdCxlKXtyZXR1cm4gbj4wP25ldyBpdChNYXRoLmF0YW4yKGUsdCkq%0ATmEsTWF0aC5zcXJ0KHQqdCtlKmUpLG4pOm5ldyBpdCgwLzAsMC8wLG4pfWZ1bmN0%0AaW9uIHN0KG4pe3JldHVybiBuPi4yMDY4OTMwMzQ/bipuKm46KG4tNC8yOSkvNy43%0AODcwMzd9ZnVuY3Rpb24gZnQobil7cmV0dXJuIG4+LjAwODg1Nj9NYXRoLnBvdyhu%0ALDEvMyk6Ny43ODcwMzcqbis0LzI5fWZ1bmN0aW9uIGh0KG4pe3JldHVybiBNYXRo%0ALnJvdW5kKDI1NSooLjAwMzA0Pj1uPzEyLjkyKm46MS4wNTUqTWF0aC5wb3cobiwx%0ALzIuNCktLjA1NSkpfWZ1bmN0aW9uIGd0KG4sdCxlKXtyZXR1cm4gdGhpcyBpbnN0%0AYW5jZW9mIGd0Pyh0aGlzLnI9fn5uLHRoaXMuZz1+fnQsdm9pZCh0aGlzLmI9fn5l%0AKSk6YXJndW1lbnRzLmxlbmd0aDwyP24gaW5zdGFuY2VvZiBndD9uZXcgZ3Qobi5y%0ALG4uZyxuLmIpOm10KCIiK24sZ3QsdXQpOm5ldyBndChuLHQsZSl9ZnVuY3Rpb24g%0AcHQobil7cmV0dXJuIG5ldyBndChuPj4xNiwyNTUmbj4+OCwyNTUmbil9ZnVuY3Rp%0Ab24gdnQobil7cmV0dXJuIHB0KG4pKyIifWZ1bmN0aW9uIGR0KG4pe3JldHVybiAx%0ANj5uPyIwIitNYXRoLm1heCgwLG4pLnRvU3RyaW5nKDE2KTpNYXRoLm1pbigyNTUs%0AbikudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIG10KG4sdCxlKXt2YXIgcix1LGksbz0w%0ALGE9MCxjPTA7aWYocj0vKFthLXpdKylcKCguKilcKS9pLmV4ZWMobikpc3dpdGNo%0AKHU9clsyXS5zcGxpdCgiLCIpLHJbMV0pe2Nhc2UiaHNsIjpyZXR1cm4gZShwYXJz%0AZUZsb2F0KHVbMF0pLHBhcnNlRmxvYXQodVsxXSkvMTAwLHBhcnNlRmxvYXQodVsy%0AXSkvMTAwKTtjYXNlInJnYiI6cmV0dXJuIHQoX3QodVswXSksX3QodVsxXSksX3Qo%0AdVsyXSkpfXJldHVybihpPVphLmdldChuKSk/dChpLnIsaS5nLGkuYik6KG51bGw9%0APW58fCIjIiE9PW4uY2hhckF0KDApfHxpc05hTihpPXBhcnNlSW50KG4uc2xpY2Uo%0AMSksMTYpKXx8KDQ9PT1uLmxlbmd0aD8obz0oMzg0MCZpKT4+NCxvPW8+PjR8byxh%0APTI0MCZpLGE9YT4+NHxhLGM9MTUmaSxjPWM8PDR8Yyk6Nz09PW4ubGVuZ3RoJiYo%0Abz0oMTY3MTE2ODAmaSk+PjE2LGE9KDY1MjgwJmkpPj44LGM9MjU1JmkpKSx0KG8s%0AYSxjKSl9ZnVuY3Rpb24geXQobix0LGUpe3ZhciByLHUsaT1NYXRoLm1pbihuLz0y%0ANTUsdC89MjU1LGUvPTI1NSksbz1NYXRoLm1heChuLHQsZSksYT1vLWksYz0obytp%0AKS8yO3JldHVybiBhPyh1PS41PmM/YS8obytpKTphLygyLW8taSkscj1uPT1vPyh0%0ALWUpL2ErKGU+dD82OjApOnQ9PW8/KGUtbikvYSsyOihuLXQpL2ErNCxyKj02MCk6%0AKHI9MC8wLHU9Yz4wJiYxPmM/MDpyKSxuZXcgcnQocix1LGMpfWZ1bmN0aW9uIHh0%0AKG4sdCxlKXtuPU10KG4pLHQ9TXQodCksZT1NdChlKTt2YXIgcj1mdCgoLjQxMjQ1%0ANjQqbisuMzU3NTc2MSp0Ky4xODA0Mzc1KmUpL0hhKSx1PWZ0KCguMjEyNjcyOSpu%0AKy43MTUxNTIyKnQrLjA3MjE3NSplKS9GYSksaT1mdCgoLjAxOTMzMzkqbisuMTE5%0AMTkyKnQrLjk1MDMwNDEqZSkvT2EpO3JldHVybiBhdCgxMTYqdS0xNiw1MDAqKHIt%0AdSksMjAwKih1LWkpKX1mdW5jdGlvbiBNdChuKXtyZXR1cm4obi89MjU1KTw9LjA0%0AMDQ1P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlv%0AbiBfdChuKXt2YXIgdD1wYXJzZUZsb2F0KG4pO3JldHVybiIlIj09PW4uY2hhckF0%0AKG4ubGVuZ3RoLTEpP01hdGgucm91bmQoMi41NSp0KTp0fWZ1bmN0aW9uIGJ0KG4p%0Ae3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24oKXtyZXR1cm4g%0Abn19ZnVuY3Rpb24gd3Qobil7cmV0dXJuIG59ZnVuY3Rpb24gU3Qobil7cmV0dXJu%0AIGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJm%0AdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lLGU9bnVsbCksa3QodCxlLG4scil9fWZ1%0AbmN0aW9uIGt0KG4sdCxlLHIpe2Z1bmN0aW9uIHUoKXt2YXIgbix0PWMuc3RhdHVz%0AO2lmKCF0JiZBdChjKXx8dD49MjAwJiYzMDA+dHx8MzA0PT09dCl7dHJ5e249ZS5j%0AYWxsKGksYyl9Y2F0Y2gocil7cmV0dXJuIG8uZXJyb3IuY2FsbChpLHIpLHZvaWQg%0AMH1vLmxvYWQuY2FsbChpLG4pfWVsc2Ugby5lcnJvci5jYWxsKGksYyl9dmFyIGk9%0Ae30sbz1Wby5kaXNwYXRjaCgiYmVmb3Jlc2VuZCIsInByb2dyZXNzIiwibG9hZCIs%0AImVycm9yIiksYT17fSxjPW5ldyBYTUxIdHRwUmVxdWVzdCxsPW51bGw7cmV0dXJu%0AIUpvLlhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIGN8fCEvXiho%0AdHRwKHMpPzopP1wvXC8vLnRlc3Qobil8fChjPW5ldyBYRG9tYWluUmVxdWVzdCks%0AIm9ubG9hZCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj11OmMub25yZWFkeXN0YXRl%0AY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJnUoKX0sYy5vbnByb2dy%0AZXNzPWZ1bmN0aW9uKG4pe3ZhciB0PVZvLmV2ZW50O1ZvLmV2ZW50PW47dHJ5e28u%0AcHJvZ3Jlc3MuY2FsbChpLGMpfWZpbmFsbHl7Vm8uZXZlbnQ9dH19LGkuaGVhZGVy%0APWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49KG4rIiIpLnRvTG93ZXJDYXNlKCksYXJn%0AdW1lbnRzLmxlbmd0aDwyP2Fbbl06KG51bGw9PXQ/ZGVsZXRlIGFbbl06YVtuXT10%0AKyIiLGkpfSxpLm1pbWVUeXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu%0AbGVuZ3RoPyh0PW51bGw9PW4/bnVsbDpuKyIiLGkpOnR9LGkucmVzcG9uc2VUeXBl%0APWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4saSk6bH0s%0AaS5yZXNwb25zZT1mdW5jdGlvbihuKXtyZXR1cm4gZT1uLGl9LFsiZ2V0IiwicG9z%0AdCJdLmZvckVhY2goZnVuY3Rpb24obil7aVtuXT1mdW5jdGlvbigpe3JldHVybiBp%0ALnNlbmQuYXBwbHkoaSxbbl0uY29uY2F0KCRvKGFyZ3VtZW50cykpKX19KSxpLnNl%0AbmQ9ZnVuY3Rpb24oZSxyLHUpe2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVu%0AY3Rpb24iPT10eXBlb2YgciYmKHU9cixyPW51bGwpLGMub3BlbihlLG4sITApLG51%0AbGw9PXR8fCJhY2NlcHQiaW4gYXx8KGEuYWNjZXB0PXQrIiwqLyoiKSxjLnNldFJl%0AcXVlc3RIZWFkZXIpZm9yKHZhciBzIGluIGEpYy5zZXRSZXF1ZXN0SGVhZGVyKHMs%0AYVtzXSk7cmV0dXJuIG51bGwhPXQmJmMub3ZlcnJpZGVNaW1lVHlwZSYmYy5vdmVy%0AcmlkZU1pbWVUeXBlKHQpLG51bGwhPWwmJihjLnJlc3BvbnNlVHlwZT1sKSxudWxs%0AIT11JiZpLm9uKCJlcnJvciIsdSkub24oImxvYWQiLGZ1bmN0aW9uKG4pe3UobnVs%0AbCxuKX0pLG8uYmVmb3Jlc2VuZC5jYWxsKGksYyksYy5zZW5kKG51bGw9PXI/bnVs%0AbDpyKSxpfSxpLmFib3J0PWZ1bmN0aW9uKCl7cmV0dXJuIGMuYWJvcnQoKSxpfSxW%0Aby5yZWJpbmQoaSxvLCJvbiIpLG51bGw9PXI/aTppLmdldChFdChyKSl9ZnVuY3Rp%0Ab24gRXQobil7cmV0dXJuIDE9PT1uLmxlbmd0aD9mdW5jdGlvbih0LGUpe24obnVs%0AbD09dD9lOm51bGwpfTpufWZ1bmN0aW9uIEF0KG4pe3ZhciB0PW4ucmVzcG9uc2VU%0AeXBlO3JldHVybiB0JiYidGV4dCIhPT10P24ucmVzcG9uc2U6bi5yZXNwb25zZVRl%0AeHR9ZnVuY3Rpb24gQ3QoKXt2YXIgbj1OdCgpLHQ9enQoKS1uO3Q+MjQ/KGlzRmlu%0AaXRlKHQpJiYoY2xlYXJUaW1lb3V0KEJhKSxCYT1zZXRUaW1lb3V0KEN0LHQpKSwk%0AYT0wKTooJGE9MSxKYShDdCkpfWZ1bmN0aW9uIE50KCl7dmFyIG49RGF0ZS5ub3co%0AKTtmb3IoV2E9VmE7V2E7KW4+PVdhLnQmJihXYS5mPVdhLmMobi1XYS50KSksV2E9%0AV2EubjtyZXR1cm4gbn1mdW5jdGlvbiB6dCgpe2Zvcih2YXIgbix0PVZhLGU9MS8w%0AO3Q7KXQuZj90PW4/bi5uPXQubjpWYT10Lm46KHQudDxlJiYoZT10LnQpLHQ9KG49%0AdCkubik7cmV0dXJuIFhhPW4sZX1mdW5jdGlvbiBMdChuLHQpe3JldHVybiB0LShu%0AP01hdGguY2VpbChNYXRoLmxvZyhuKS9NYXRoLkxOMTApOjEpfWZ1bmN0aW9uIFR0%0AKG4sdCl7dmFyIGU9TWF0aC5wb3coMTAsMyppYSg4LXQpKTtyZXR1cm57c2NhbGU6%0AdD44P2Z1bmN0aW9uKG4pe3JldHVybiBuL2V9OmZ1bmN0aW9uKG4pe3JldHVybiBu%0AKmV9LHN5bWJvbDpufX1mdW5jdGlvbiBxdChuKXt2YXIgdD1uLmRlY2ltYWwsZT1u%0ALnRob3VzYW5kcyxyPW4uZ3JvdXBpbmcsdT1uLmN1cnJlbmN5LGk9cj9mdW5jdGlv%0AbihuKXtmb3IodmFyIHQ9bi5sZW5ndGgsdT1bXSxpPTAsbz1yWzBdO28+MCYmdD4w%0AOyl1LnB1c2gobi5zdWJzdHJpbmcodC09byx0K28pKSxvPXJbaT0oaSsxKSVyLmxl%0Abmd0aF07cmV0dXJuIHUucmV2ZXJzZSgpLmpvaW4oZSl9Ond0O3JldHVybiBmdW5j%0AdGlvbihuKXt2YXIgZT1LYS5leGVjKG4pLHI9ZVsxXXx8IiAiLG89ZVsyXXx8Ij4i%0ALGE9ZVszXXx8IiIsYz1lWzRdfHwiIixsPWVbNV0scz0rZVs2XSxmPWVbN10saD1l%0AWzhdLGc9ZVs5XSxwPTEsdj0iIixkPSIiLG09ITE7c3dpdGNoKGgmJihoPStoLnN1%0AYnN0cmluZygxKSksKGx8fCIwIj09PXImJiI9Ij09PW8pJiYobD1yPSIwIixvPSI9%0AIixmJiYocy09TWF0aC5mbG9vcigocy0xKS80KSkpLGcpe2Nhc2UibiI6Zj0hMCxn%0APSJnIjticmVhaztjYXNlIiUiOnA9MTAwLGQ9IiUiLGc9ImYiO2JyZWFrO2Nhc2Ui%0AcCI6cD0xMDAsZD0iJSIsZz0iciI7YnJlYWs7Y2FzZSJiIjpjYXNlIm8iOmNhc2Ui%0AeCI6Y2FzZSJYIjoiIyI9PT1jJiYodj0iMCIrZy50b0xvd2VyQ2FzZSgpKTtjYXNl%0AImMiOmNhc2UiZCI6bT0hMCxoPTA7YnJlYWs7Y2FzZSJzIjpwPS0xLGc9InIifSIk%0AIj09PWMmJih2PXVbMF0sZD11WzFdKSwiciIhPWd8fGh8fChnPSJnIiksbnVsbCE9%0AaCYmKCJnIj09Zz9oPU1hdGgubWF4KDEsTWF0aC5taW4oMjEsaCkpOigiZSI9PWd8%0AfCJmIj09ZykmJihoPU1hdGgubWF4KDAsTWF0aC5taW4oMjAsaCkpKSksZz1RYS5n%0AZXQoZyl8fFJ0O3ZhciB5PWwmJmY7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlPWQ7%0AaWYobSYmbiUxKXJldHVybiIiO3ZhciB1PTA+bnx8MD09PW4mJjA+MS9uPyhuPS1u%0ALCItIik6YTtpZigwPnApe3ZhciBjPVZvLmZvcm1hdFByZWZpeChuLGgpO249Yy5z%0AY2FsZShuKSxlPWMuc3ltYm9sK2R9ZWxzZSBuKj1wO249ZyhuLGgpO3ZhciB4PW4u%0AbGFzdEluZGV4T2YoIi4iKSxNPTA+eD9uOm4uc3Vic3RyaW5nKDAseCksXz0wPng/%0AIiI6dCtuLnN1YnN0cmluZyh4KzEpOyFsJiZmJiYoTT1pKE0pKTt2YXIgYj12Lmxl%0Abmd0aCtNLmxlbmd0aCtfLmxlbmd0aCsoeT8wOnUubGVuZ3RoKSx3PXM+Yj9uZXcg%0AQXJyYXkoYj1zLWIrMSkuam9pbihyKToiIjtyZXR1cm4geSYmKE09aSh3K00pKSx1%0AKz12LG49TStfLCgiPCI9PT1vP3Urbit3OiI+Ij09PW8/dyt1K246Il4iPT09bz93%0ALnN1YnN0cmluZygwLGI+Pj0xKSt1K24rdy5zdWJzdHJpbmcoYik6dSsoeT9uOncr%0AbikpK2V9fX1mdW5jdGlvbiBSdChuKXtyZXR1cm4gbisiIn1mdW5jdGlvbiBEdCgp%0Ae3RoaXMuXz1uZXcgRGF0ZShhcmd1bWVudHMubGVuZ3RoPjE/RGF0ZS5VVEMuYXBw%0AbHkodGhpcyxhcmd1bWVudHMpOmFyZ3VtZW50c1swXSl9ZnVuY3Rpb24gUHQobix0%0ALGUpe2Z1bmN0aW9uIHIodCl7dmFyIGU9bih0KSxyPWkoZSwxKTtyZXR1cm4gci10%0APnQtZT9lOnJ9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdChlPW4obmV3IHRjKGUtMSkp%0ALDEpLGV9ZnVuY3Rpb24gaShuLGUpe3JldHVybiB0KG49bmV3IHRjKCtuKSxlKSxu%0AfWZ1bmN0aW9uIG8obixyLGkpe3ZhciBvPXUobiksYT1bXTtpZihpPjEpZm9yKDty%0APm87KWUobyklaXx8YS5wdXNoKG5ldyBEYXRlKCtvKSksdChvLDEpO2Vsc2UgZm9y%0AKDtyPm87KWEucHVzaChuZXcgRGF0ZSgrbykpLHQobywxKTtyZXR1cm4gYX1mdW5j%0AdGlvbiBhKG4sdCxlKXt0cnl7dGM9RHQ7dmFyIHI9bmV3IER0O3JldHVybiByLl89%0AbixvKHIsdCxlKX1maW5hbGx5e3RjPURhdGV9fW4uZmxvb3I9bixuLnJvdW5kPXIs%0Abi5jZWlsPXUsbi5vZmZzZXQ9aSxuLnJhbmdlPW87dmFyIGM9bi51dGM9VXQobik7%0AcmV0dXJuIGMuZmxvb3I9YyxjLnJvdW5kPVV0KHIpLGMuY2VpbD1VdCh1KSxjLm9m%0AZnNldD1VdChpKSxjLnJhbmdlPWEsbn1mdW5jdGlvbiBVdChuKXtyZXR1cm4gZnVu%0AY3Rpb24odCxlKXt0cnl7dGM9RHQ7dmFyIHI9bmV3IER0O3JldHVybiByLl89dCxu%0AKHIsZSkuX31maW5hbGx5e3RjPURhdGV9fX1mdW5jdGlvbiBqdChuKXtmdW5jdGlv%0AbiB0KG4pe2Z1bmN0aW9uIHQodCl7Zm9yKHZhciBlLHUsaSxvPVtdLGE9LTEsYz0w%0AOysrYTxyOykzNz09PW4uY2hhckNvZGVBdChhKSYmKG8ucHVzaChuLnNsaWNlKGMs%0AYSkpLG51bGwhPSh1PXJjW2U9bi5jaGFyQXQoKythKV0pJiYoZT1uLmNoYXJBdCgr%0AK2EpKSwoaT1DW2VdKSYmKGU9aSh0LG51bGw9PXU/ImUiPT09ZT8iICI6IjAiOnUp%0AKSxvLnB1c2goZSksYz1hKzEpO3JldHVybiBvLnB1c2gobi5zbGljZShjLGEpKSxv%0ALmpvaW4oIiIpfXZhciByPW4ubGVuZ3RoO3JldHVybiB0LnBhcnNlPWZ1bmN0aW9u%0AKHQpe3ZhciByPXt5OjE5MDAsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjAsWjpudWxs%0AfSx1PWUocixuLHQsMCk7aWYodSE9dC5sZW5ndGgpcmV0dXJuIG51bGw7InAiaW4g%0AciYmKHIuSD1yLkglMTIrMTIqci5wKTt2YXIgaT1udWxsIT1yLlomJnRjIT09RHQs%0Abz1uZXcoaT9EdDp0Yyk7cmV0dXJuImoiaW4gcj9vLnNldEZ1bGxZZWFyKHIueSww%0ALHIuaik6InciaW4gciYmKCJXImluIHJ8fCJVImluIHIpPyhvLnNldEZ1bGxZZWFy%0AKHIueSwwLDEpLG8uc2V0RnVsbFllYXIoci55LDAsIlciaW4gcj8oci53KzYpJTcr%0ANypyLlctKG8uZ2V0RGF5KCkrNSklNzpyLncrNypyLlUtKG8uZ2V0RGF5KCkrNikl%0ANykpOm8uc2V0RnVsbFllYXIoci55LHIubSxyLmQpLG8uc2V0SG91cnMoci5IKygw%0AfHIuWi8xMDApLHIuTStyLlolMTAwLHIuUyxyLkwpLGk/by5fOm99LHQudG9TdHJp%0Abmc9ZnVuY3Rpb24oKXtyZXR1cm4gbn0sdH1mdW5jdGlvbiBlKG4sdCxlLHIpe2Zv%0Acih2YXIgdSxpLG8sYT0wLGM9dC5sZW5ndGgsbD1lLmxlbmd0aDtjPmE7KXtpZihy%0APj1sKXJldHVybi0xO2lmKHU9dC5jaGFyQ29kZUF0KGErKyksMzc9PT11KXtpZihv%0APXQuY2hhckF0KGErKyksaT1OW28gaW4gcmM/dC5jaGFyQXQoYSsrKTpvXSwhaXx8%0AKHI9aShuLGUscikpPDApcmV0dXJuLTF9ZWxzZSBpZih1IT1lLmNoYXJDb2RlQXQo%0AcisrKSlyZXR1cm4tMX1yZXR1cm4gcn1mdW5jdGlvbiByKG4sdCxlKXtiLmxhc3RJ%0AbmRleD0wO3ZhciByPWIuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gcj8obi53PXcu%0AZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rp%0Ab24gdShuLHQsZSl7TS5sYXN0SW5kZXg9MDt2YXIgcj1NLmV4ZWModC5zbGljZShl%0AKSk7cmV0dXJuIHI/KG4udz1fLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclsw%0AXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGkobix0LGUpe0UubGFzdEluZGV4PTA7dmFy%0AIHI9RS5leGVjKHQuc2xpY2UoZSkpO3JldHVybiByPyhuLm09QS5nZXQoclswXS50%0Ab0xvd2VyQ2FzZSgpKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBvKG4sdCxl%0AKXtTLmxhc3RJbmRleD0wO3ZhciByPVMuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4g%0Acj8obi5tPWsuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6%0ALTF9ZnVuY3Rpb24gYShuLHQscil7cmV0dXJuIGUobixDLmMudG9TdHJpbmcoKSx0%0ALHIpfWZ1bmN0aW9uIGMobix0LHIpe3JldHVybiBlKG4sQy54LnRvU3RyaW5nKCks%0AdCxyKX1mdW5jdGlvbiBsKG4sdCxyKXtyZXR1cm4gZShuLEMuWC50b1N0cmluZygp%0ALHQscil9ZnVuY3Rpb24gcyhuLHQsZSl7dmFyIHI9eC5nZXQodC5zbGljZShlLGUr%0APTIpLnRvTG93ZXJDYXNlKCkpO3JldHVybiBudWxsPT1yPy0xOihuLnA9cixlKX12%0AYXIgZj1uLmRhdGVUaW1lLGg9bi5kYXRlLGc9bi50aW1lLHA9bi5wZXJpb2RzLHY9%0Abi5kYXlzLGQ9bi5zaG9ydERheXMsbT1uLm1vbnRocyx5PW4uc2hvcnRNb250aHM7%0AdC51dGM9ZnVuY3Rpb24obil7ZnVuY3Rpb24gZShuKXt0cnl7dGM9RHQ7dmFyIHQ9%0AbmV3IHRjO3JldHVybiB0Ll89bixyKHQpfWZpbmFsbHl7dGM9RGF0ZX19dmFyIHI9%0AdChuKTtyZXR1cm4gZS5wYXJzZT1mdW5jdGlvbihuKXt0cnl7dGM9RHQ7dmFyIHQ9%0Aci5wYXJzZShuKTtyZXR1cm4gdCYmdC5ffWZpbmFsbHl7dGM9RGF0ZX19LGUudG9T%0AdHJpbmc9ci50b1N0cmluZyxlfSx0Lm11bHRpPXQudXRjLm11bHRpPXVlO3ZhciB4%0APVZvLm1hcCgpLE09RnQodiksXz1PdCh2KSxiPUZ0KGQpLHc9T3QoZCksUz1GdCht%0AKSxrPU90KG0pLEU9RnQoeSksQT1PdCh5KTtwLmZvckVhY2goZnVuY3Rpb24obix0%0AKXt4LnNldChuLnRvTG93ZXJDYXNlKCksdCl9KTt2YXIgQz17YTpmdW5jdGlvbihu%0AKXtyZXR1cm4gZFtuLmdldERheSgpXX0sQTpmdW5jdGlvbihuKXtyZXR1cm4gdltu%0ALmdldERheSgpXX0sYjpmdW5jdGlvbihuKXtyZXR1cm4geVtuLmdldE1vbnRoKCld%0AfSxCOmZ1bmN0aW9uKG4pe3JldHVybiBtW24uZ2V0TW9udGgoKV19LGM6dChmKSxk%0AOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEh0KG4uZ2V0RGF0ZSgpLHQsMil9LGU6ZnVu%0AY3Rpb24obix0KXtyZXR1cm4gSHQobi5nZXREYXRlKCksdCwyKX0sSDpmdW5jdGlv%0AbihuLHQpe3JldHVybiBIdChuLmdldEhvdXJzKCksdCwyKX0sSTpmdW5jdGlvbihu%0ALHQpe3JldHVybiBIdChuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9LGo6ZnVuY3Rp%0Ab24obix0KXtyZXR1cm4gSHQoMStuYy5kYXlPZlllYXIobiksdCwzKX0sTDpmdW5j%0AdGlvbihuLHQpe3JldHVybiBIdChuLmdldE1pbGxpc2Vjb25kcygpLHQsMyl9LG06%0AZnVuY3Rpb24obix0KXtyZXR1cm4gSHQobi5nZXRNb250aCgpKzEsdCwyKX0sTTpm%0AdW5jdGlvbihuLHQpe3JldHVybiBIdChuLmdldE1pbnV0ZXMoKSx0LDIpfSxwOmZ1%0AbmN0aW9uKG4pe3JldHVybiBwWysobi5nZXRIb3VycygpPj0xMildfSxTOmZ1bmN0%0AaW9uKG4sdCl7cmV0dXJuIEh0KG4uZ2V0U2Vjb25kcygpLHQsMil9LFU6ZnVuY3Rp%0Ab24obix0KXtyZXR1cm4gSHQobmMuc3VuZGF5T2ZZZWFyKG4pLHQsMil9LHc6ZnVu%0AY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF5KCl9LFc6ZnVuY3Rpb24obix0KXtyZXR1%0Acm4gSHQobmMubW9uZGF5T2ZZZWFyKG4pLHQsMil9LHg6dChoKSxYOnQoZykseTpm%0AdW5jdGlvbihuLHQpe3JldHVybiBIdChuLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9%0ALFk6ZnVuY3Rpb24obix0KXtyZXR1cm4gSHQobi5nZXRGdWxsWWVhcigpJTFlNCx0%0ALDQpfSxaOmVlLCIlIjpmdW5jdGlvbigpe3JldHVybiIlIn19LE49e2E6cixBOnUs%0AYjppLEI6byxjOmEsZDpKdCxlOkp0LEg6S3QsSTpLdCxqOkd0LEw6dGUsbTpXdCxN%0AOlF0LHA6cyxTOm5lLFU6SXQsdzpZdCxXOlp0LHg6YyxYOmwseTpYdCxZOlZ0LFo6%0AJHQsIiUiOnJlfTtyZXR1cm4gdH1mdW5jdGlvbiBIdChuLHQsZSl7dmFyIHI9MD5u%0APyItIjoiIix1PShyPy1uOm4pKyIiLGk9dS5sZW5ndGg7cmV0dXJuIHIrKGU+aT9u%0AZXcgQXJyYXkoZS1pKzEpLmpvaW4odCkrdTp1KX1mdW5jdGlvbiBGdChuKXtyZXR1%0Acm4gbmV3IFJlZ0V4cCgiXig/OiIrbi5tYXAoVm8ucmVxdW90ZSkuam9pbigifCIp%0AKyIpIiwiaSIpfWZ1bmN0aW9uIE90KG4pe2Zvcih2YXIgdD1uZXcgbyxlPS0xLHI9%0Abi5sZW5ndGg7KytlPHI7KXQuc2V0KG5bZV0udG9Mb3dlckNhc2UoKSxlKTtyZXR1%0Acm4gdH1mdW5jdGlvbiBZdChuLHQsZSl7dWMubGFzdEluZGV4PTA7dmFyIHI9dWMu%0AZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIHI/KG4udz0rclswXSxlK3JbMF0u%0AbGVuZ3RoKTotMX1mdW5jdGlvbiBJdChuLHQsZSl7dWMubGFzdEluZGV4PTA7dmFy%0AIHI9dWMuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gcj8obi5VPStyWzBdLGUrclsw%0AXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFp0KG4sdCxlKXt1Yy5sYXN0SW5kZXg9MDt2%0AYXIgcj11Yy5leGVjKHQuc2xpY2UoZSkpO3JldHVybiByPyhuLlc9K3JbMF0sZSty%0AWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVnQobix0LGUpe3VjLmxhc3RJbmRleD0w%0AO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiByPyhuLnk9K3Jb%0AMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWHQobix0LGUpe3VjLmxhc3RJ%0AbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiByPyhu%0ALnk9QnQoK3JbMF0pLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICR0KG4sdCxl%0AKXtyZXR1cm4vXlsrLV1cZHs0fSQvLnRlc3QodD10LnNsaWNlKGUsZSs1KSk/KG4u%0AWj0tdCxlKzUpOi0xfWZ1bmN0aW9uIEJ0KG4pe3JldHVybiBuKyhuPjY4PzE5MDA6%0AMmUzKX1mdW5jdGlvbiBXdChuLHQsZSl7dWMubGFzdEluZGV4PTA7dmFyIHI9dWMu%0AZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KG4ubT1yWzBdLTEsZStyWzBd%0ALmxlbmd0aCk6LTF9ZnVuY3Rpb24gSnQobix0LGUpe3VjLmxhc3RJbmRleD0wO3Zh%0AciByPXVjLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiByPyhuLmQ9K3JbMF0s%0AZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gR3Qobix0LGUpe3VjLmxhc3RJbmRl%0AeD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrMykpO3JldHVybiByPyhuLmo9%0AK3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS3Qobix0LGUpe3VjLmxh%0Ac3RJbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBy%0APyhuLkg9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUXQobix0LGUp%0Ae3VjLmxhc3RJbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrMikpO3Jl%0AdHVybiByPyhuLk09K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbmUo%0Abix0LGUpe3VjLmxhc3RJbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUr%0AMikpO3JldHVybiByPyhuLlM9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rp%0Ab24gdGUobix0LGUpe3VjLmxhc3RJbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGlj%0AZShlLGUrMykpO3JldHVybiByPyhuLkw9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9%0AZnVuY3Rpb24gZWUobil7dmFyIHQ9bi5nZXRUaW1lem9uZU9mZnNldCgpLGU9dD4w%0APyItIjoiKyIscj0wfGlhKHQpLzYwLHU9aWEodCklNjA7cmV0dXJuIGUrSHQociwi%0AMCIsMikrSHQodSwiMCIsMil9ZnVuY3Rpb24gcmUobix0LGUpe2ljLmxhc3RJbmRl%0AeD0wO3ZhciByPWljLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiByP2Urclsw%0AXS5sZW5ndGg6LTF9ZnVuY3Rpb24gdWUobil7Zm9yKHZhciB0PW4ubGVuZ3RoLGU9%0ALTE7KytlPHQ7KW5bZV1bMF09dGhpcyhuW2VdWzBdKTtyZXR1cm4gZnVuY3Rpb24o%0AdCl7Zm9yKHZhciBlPTAscj1uW2VdOyFyWzFdKHQpOylyPW5bKytlXTtyZXR1cm4g%0AclswXSh0KX19ZnVuY3Rpb24gaWUoKXt9ZnVuY3Rpb24gb2Uobix0LGUpe3ZhciBy%0APWUucz1uK3QsdT1yLW4saT1yLXU7ZS50PW4taSsodC11KX1mdW5jdGlvbiBhZShu%0ALHQpe24mJmxjLmhhc093blByb3BlcnR5KG4udHlwZSkmJmxjW24udHlwZV0obix0%0AKX1mdW5jdGlvbiBjZShuLHQsZSl7dmFyIHIsdT0tMSxpPW4ubGVuZ3RoLWU7Zm9y%0AKHQubGluZVN0YXJ0KCk7Kyt1PGk7KXI9blt1XSx0LnBvaW50KHJbMF0sclsxXSxy%0AWzJdKTt0LmxpbmVFbmQoKX1mdW5jdGlvbiBsZShuLHQpe3ZhciBlPS0xLHI9bi5s%0AZW5ndGg7Zm9yKHQucG9seWdvblN0YXJ0KCk7KytlPHI7KWNlKG5bZV0sdCwxKTt0%0ALnBvbHlnb25FbmQoKX1mdW5jdGlvbiBzZSgpe2Z1bmN0aW9uIG4obix0KXtuKj1D%0AYSx0PXQqQ2EvMit3YS80O3ZhciBlPW4tcixvPWU+PTA/MTotMSxhPW8qZSxjPU1h%0AdGguY29zKHQpLGw9TWF0aC5zaW4odCkscz1pKmwsZj11KmMrcypNYXRoLmNvcyhh%0AKSxoPXMqbypNYXRoLnNpbihhKTtmYy5hZGQoTWF0aC5hdGFuMihoLGYpKSxyPW4s%0AdT1jLGk9bH12YXIgdCxlLHIsdSxpO2hjLnBvaW50PWZ1bmN0aW9uKG8sYSl7aGMu%0AcG9pbnQ9bixyPSh0PW8pKkNhLHU9TWF0aC5jb3MoYT0oZT1hKSpDYS8yK3dhLzQp%0ALGk9TWF0aC5zaW4oYSl9LGhjLmxpbmVFbmQ9ZnVuY3Rpb24oKXtuKHQsZSl9fWZ1%0AbmN0aW9uIGZlKG4pe3ZhciB0PW5bMF0sZT1uWzFdLHI9TWF0aC5jb3MoZSk7cmV0%0AdXJuW3IqTWF0aC5jb3ModCkscipNYXRoLnNpbih0KSxNYXRoLnNpbihlKV19ZnVu%0AY3Rpb24gaGUobix0KXtyZXR1cm4gblswXSp0WzBdK25bMV0qdFsxXStuWzJdKnRb%0AMl19ZnVuY3Rpb24gZ2Uobix0KXtyZXR1cm5bblsxXSp0WzJdLW5bMl0qdFsxXSxu%0AWzJdKnRbMF0tblswXSp0WzJdLG5bMF0qdFsxXS1uWzFdKnRbMF1dfWZ1bmN0aW9u%0AIHBlKG4sdCl7blswXSs9dFswXSxuWzFdKz10WzFdLG5bMl0rPXRbMl19ZnVuY3Rp%0Ab24gdmUobix0KXtyZXR1cm5bblswXSp0LG5bMV0qdCxuWzJdKnRdfWZ1bmN0aW9u%0AIGRlKG4pe3ZhciB0PU1hdGguc3FydChuWzBdKm5bMF0rblsxXSpuWzFdK25bMl0q%0AblsyXSk7blswXS89dCxuWzFdLz10LG5bMl0vPXR9ZnVuY3Rpb24gbWUobil7cmV0%0AdXJuW01hdGguYXRhbjIoblsxXSxuWzBdKSxHKG5bMl0pXX1mdW5jdGlvbiB5ZShu%0ALHQpe3JldHVybiBpYShuWzBdLXRbMF0pPEVhJiZpYShuWzFdLXRbMV0pPEVhfWZ1%0AbmN0aW9uIHhlKG4sdCl7bio9Q2E7dmFyIGU9TWF0aC5jb3ModCo9Q2EpO01lKGUq%0ATWF0aC5jb3MobiksZSpNYXRoLnNpbihuKSxNYXRoLnNpbih0KSl9ZnVuY3Rpb24g%0ATWUobix0LGUpeysrZ2MsdmMrPShuLXZjKS9nYyxkYys9KHQtZGMpL2djLG1jKz0o%0AZS1tYykvZ2N9ZnVuY3Rpb24gX2UoKXtmdW5jdGlvbiBuKG4sdSl7bio9Q2E7dmFy%0AIGk9TWF0aC5jb3ModSo9Q2EpLG89aSpNYXRoLmNvcyhuKSxhPWkqTWF0aC5zaW4o%0AbiksYz1NYXRoLnNpbih1KSxsPU1hdGguYXRhbjIoTWF0aC5zcXJ0KChsPWUqYy1y%0AKmEpKmwrKGw9cipvLXQqYykqbCsobD10KmEtZSpvKSpsKSx0Km8rZSphK3IqYyk7%0AcGMrPWwseWMrPWwqKHQrKHQ9bykpLHhjKz1sKihlKyhlPWEpKSxNYys9bCoociso%0Acj1jKSksTWUodCxlLHIpfXZhciB0LGUscjtTYy5wb2ludD1mdW5jdGlvbih1LGkp%0Ae3UqPUNhO3ZhciBvPU1hdGguY29zKGkqPUNhKTt0PW8qTWF0aC5jb3ModSksZT1v%0AKk1hdGguc2luKHUpLHI9TWF0aC5zaW4oaSksU2MucG9pbnQ9bixNZSh0LGUscil9%0AfWZ1bmN0aW9uIGJlKCl7U2MucG9pbnQ9eGV9ZnVuY3Rpb24gd2UoKXtmdW5jdGlv%0AbiBuKG4sdCl7bio9Q2E7dmFyIGU9TWF0aC5jb3ModCo9Q2EpLG89ZSpNYXRoLmNv%0AcyhuKSxhPWUqTWF0aC5zaW4obiksYz1NYXRoLnNpbih0KSxsPXUqYy1pKmEscz1p%0AKm8tcipjLGY9ciphLXUqbyxoPU1hdGguc3FydChsKmwrcypzK2YqZiksZz1yKm8r%0AdSphK2kqYyxwPWgmJi1KKGcpL2gsdj1NYXRoLmF0YW4yKGgsZyk7X2MrPXAqbCxi%0AYys9cCpzLHdjKz1wKmYscGMrPXYseWMrPXYqKHIrKHI9bykpLHhjKz12Kih1Kyh1%0APWEpKSxNYys9diooaSsoaT1jKSksTWUocix1LGkpfXZhciB0LGUscix1LGk7U2Mu%0AcG9pbnQ9ZnVuY3Rpb24obyxhKXt0PW8sZT1hLFNjLnBvaW50PW4sbyo9Q2E7dmFy%0AIGM9TWF0aC5jb3MoYSo9Q2EpO3I9YypNYXRoLmNvcyhvKSx1PWMqTWF0aC5zaW4o%0AbyksaT1NYXRoLnNpbihhKSxNZShyLHUsaSl9LFNjLmxpbmVFbmQ9ZnVuY3Rpb24o%0AKXtuKHQsZSksU2MubGluZUVuZD1iZSxTYy5wb2ludD14ZX19ZnVuY3Rpb24gU2Uo%0AKXtyZXR1cm4hMH1mdW5jdGlvbiBrZShuLHQsZSxyLHUpe3ZhciBpPVtdLG89W107%0AaWYobi5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCEoKHQ9bi5sZW5ndGgtMSk8PTAp%0AKXt2YXIgdCxlPW5bMF0scj1uW3RdO2lmKHllKGUscikpe3UubGluZVN0YXJ0KCk7%0AZm9yKHZhciBhPTA7dD5hOysrYSl1LnBvaW50KChlPW5bYV0pWzBdLGVbMV0pO3Jl%0AdHVybiB1LmxpbmVFbmQoKSx2b2lkIDB9dmFyIGM9bmV3IEFlKGUsbixudWxsLCEw%0AKSxsPW5ldyBBZShlLG51bGwsYywhMSk7Yy5vPWwsaS5wdXNoKGMpLG8ucHVzaChs%0AKSxjPW5ldyBBZShyLG4sbnVsbCwhMSksbD1uZXcgQWUocixudWxsLGMsITApLGMu%0Abz1sLGkucHVzaChjKSxvLnB1c2gobCl9fSksby5zb3J0KHQpLEVlKGkpLEVlKG8p%0ALGkubGVuZ3RoKXtmb3IodmFyIGE9MCxjPWUsbD1vLmxlbmd0aDtsPmE7KythKW9b%0AYV0uZT1jPSFjO2Zvcih2YXIgcyxmLGg9aVswXTs7KXtmb3IodmFyIGc9aCxwPSEw%0AO2cudjspaWYoKGc9Zy5uKT09PWgpcmV0dXJuO3M9Zy56LHUubGluZVN0YXJ0KCk7%0AZG97aWYoZy52PWcuby52PSEwLGcuZSl7aWYocClmb3IodmFyIGE9MCxsPXMubGVu%0AZ3RoO2w+YTsrK2EpdS5wb2ludCgoZj1zW2FdKVswXSxmWzFdKTtlbHNlIHIoZy54%0ALGcubi54LDEsdSk7Zz1nLm59ZWxzZXtpZihwKXtzPWcucC56O2Zvcih2YXIgYT1z%0ALmxlbmd0aC0xO2E+PTA7LS1hKXUucG9pbnQoKGY9c1thXSlbMF0sZlsxXSl9ZWxz%0AZSByKGcueCxnLnAueCwtMSx1KTtnPWcucH1nPWcubyxzPWcueixwPSFwfXdoaWxl%0AKCFnLnYpO3UubGluZUVuZCgpfX19ZnVuY3Rpb24gRWUobil7aWYodD1uLmxlbmd0%0AaCl7Zm9yKHZhciB0LGUscj0wLHU9blswXTsrK3I8dDspdS5uPWU9bltyXSxlLnA9%0AdSx1PWU7dS5uPWU9blswXSxlLnA9dX19ZnVuY3Rpb24gQWUobix0LGUscil7dGhp%0Acy54PW4sdGhpcy56PXQsdGhpcy5vPWUsdGhpcy5lPXIsdGhpcy52PSExLHRoaXMu%0Abj10aGlzLnA9bnVsbH1mdW5jdGlvbiBDZShuLHQsZSxyKXtyZXR1cm4gZnVuY3Rp%0Ab24odSxpKXtmdW5jdGlvbiBvKHQsZSl7dmFyIHI9dSh0LGUpO24odD1yWzBdLGU9%0AclsxXSkmJmkucG9pbnQodCxlKX1mdW5jdGlvbiBhKG4sdCl7dmFyIGU9dShuLHQp%0AO2QucG9pbnQoZVswXSxlWzFdKX1mdW5jdGlvbiBjKCl7eS5wb2ludD1hLGQubGlu%0AZVN0YXJ0KCl9ZnVuY3Rpb24gbCgpe3kucG9pbnQ9byxkLmxpbmVFbmQoKX1mdW5j%0AdGlvbiBzKG4sdCl7di5wdXNoKFtuLHRdKTt2YXIgZT11KG4sdCk7TS5wb2ludChl%0AWzBdLGVbMV0pfWZ1bmN0aW9uIGYoKXtNLmxpbmVTdGFydCgpLHY9W119ZnVuY3Rp%0Ab24gaCgpe3ModlswXVswXSx2WzBdWzFdKSxNLmxpbmVFbmQoKTt2YXIgbix0PU0u%0AY2xlYW4oKSxlPXguYnVmZmVyKCkscj1lLmxlbmd0aDtpZih2LnBvcCgpLHAucHVz%0AaCh2KSx2PW51bGwscilpZigxJnQpe249ZVswXTt2YXIgdSxyPW4ubGVuZ3RoLTEs%0Abz0tMTtpZihyPjApe2ZvcihffHwoaS5wb2x5Z29uU3RhcnQoKSxfPSEwKSxpLmxp%0AbmVTdGFydCgpOysrbzxyOylpLnBvaW50KCh1PW5bb10pWzBdLHVbMV0pO2kubGlu%0AZUVuZCgpfX1lbHNlIHI+MSYmMiZ0JiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5z%0AaGlmdCgpKSksZy5wdXNoKGUuZmlsdGVyKE5lKSl9dmFyIGcscCx2LGQ9dChpKSxt%0APXUuaW52ZXJ0KHJbMF0sclsxXSkseT17cG9pbnQ6byxsaW5lU3RhcnQ6YyxsaW5l%0ARW5kOmwscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eS5wb2ludD1zLHkubGluZVN0%0AYXJ0PWYseS5saW5lRW5kPWgsZz1bXSxwPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9u%0AKCl7eS5wb2ludD1vLHkubGluZVN0YXJ0PWMseS5saW5lRW5kPWwsZz1Wby5tZXJn%0AZShnKTt2YXIgbj1EZShtLHApO2cubGVuZ3RoPyhffHwoaS5wb2x5Z29uU3RhcnQo%0AKSxfPSEwKSxrZShnLExlLG4sZSxpKSk6biYmKF98fChpLnBvbHlnb25TdGFydCgp%0ALF89ITApLGkubGluZVN0YXJ0KCksZShudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQo%0AKSksXyYmKGkucG9seWdvbkVuZCgpLF89ITEpLGc9cD1udWxsfSxzcGhlcmU6ZnVu%0AY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCksZShudWxsLG51%0AbGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19LHg9emUoKSxNPXQo%0AeCksXz0hMTtyZXR1cm4geX19ZnVuY3Rpb24gTmUobil7cmV0dXJuIG4ubGVuZ3Ro%0APjF9ZnVuY3Rpb24gemUoKXt2YXIgbix0PVtdO3JldHVybntsaW5lU3RhcnQ6ZnVu%0AY3Rpb24oKXt0LnB1c2gobj1bXSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7bi5wdXNo%0AKFt0LGVdKX0sbGluZUVuZDp2LGJ1ZmZlcjpmdW5jdGlvbigpe3ZhciBlPXQ7cmV0%0AdXJuIHQ9W10sbj1udWxsLGV9LHJlam9pbjpmdW5jdGlvbigpe3QubGVuZ3RoPjEm%0AJnQucHVzaCh0LnBvcCgpLmNvbmNhdCh0LnNoaWZ0KCkpKX19fWZ1bmN0aW9uIExl%0AKG4sdCl7cmV0dXJuKChuPW4ueClbMF08MD9uWzFdLWthLUVhOmthLW5bMV0pLSgo%0AdD10LngpWzBdPDA/dFsxXS1rYS1FYTprYS10WzFdKX1mdW5jdGlvbiBUZShuKXt2%0AYXIgdCxlPTAvMCxyPTAvMCx1PTAvMDtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9u%0AKCl7bi5saW5lU3RhcnQoKSx0PTF9LHBvaW50OmZ1bmN0aW9uKGksbyl7dmFyIGE9%0AaT4wP3dhOi13YSxjPWlhKGktZSk7aWEoYy13YSk8RWE/KG4ucG9pbnQoZSxyPShy%0AK28pLzI+MD9rYTota2EpLG4ucG9pbnQodSxyKSxuLmxpbmVFbmQoKSxuLmxpbmVT%0AdGFydCgpLG4ucG9pbnQoYSxyKSxuLnBvaW50KGksciksdD0wKTp1IT09YSYmYz49%0Ad2EmJihpYShlLXUpPEVhJiYoZS09dSpFYSksaWEoaS1hKTxFYSYmKGktPWEqRWEp%0ALHI9cWUoZSxyLGksbyksbi5wb2ludCh1LHIpLG4ubGluZUVuZCgpLG4ubGluZVN0%0AYXJ0KCksbi5wb2ludChhLHIpLHQ9MCksbi5wb2ludChlPWkscj1vKSx1PWF9LGxp%0AbmVFbmQ6ZnVuY3Rpb24oKXtuLmxpbmVFbmQoKSxlPXI9MC8wfSxjbGVhbjpmdW5j%0AdGlvbigpe3JldHVybiAyLXR9fX1mdW5jdGlvbiBxZShuLHQsZSxyKXt2YXIgdSxp%0ALG89TWF0aC5zaW4obi1lKTtyZXR1cm4gaWEobyk+RWE/TWF0aC5hdGFuKChNYXRo%0ALnNpbih0KSooaT1NYXRoLmNvcyhyKSkqTWF0aC5zaW4oZSktTWF0aC5zaW4ocikq%0AKHU9TWF0aC5jb3ModCkpKk1hdGguc2luKG4pKS8odSppKm8pKToodCtyKS8yfWZ1%0AbmN0aW9uIFJlKG4sdCxlLHIpe3ZhciB1O2lmKG51bGw9PW4pdT1lKmthLHIucG9p%0AbnQoLXdhLHUpLHIucG9pbnQoMCx1KSxyLnBvaW50KHdhLHUpLHIucG9pbnQod2Es%0AMCksci5wb2ludCh3YSwtdSksci5wb2ludCgwLC11KSxyLnBvaW50KC13YSwtdSks%0Aci5wb2ludCgtd2EsMCksci5wb2ludCgtd2EsdSk7ZWxzZSBpZihpYShuWzBdLXRb%0AMF0pPkVhKXt2YXIgaT1uWzBdPHRbMF0/d2E6LXdhO3U9ZSppLzIsci5wb2ludCgt%0AaSx1KSxyLnBvaW50KDAsdSksci5wb2ludChpLHUpfWVsc2Ugci5wb2ludCh0WzBd%0ALHRbMV0pfWZ1bmN0aW9uIERlKG4sdCl7dmFyIGU9blswXSxyPW5bMV0sdT1bTWF0%0AaC5zaW4oZSksLU1hdGguY29zKGUpLDBdLGk9MCxvPTA7ZmMucmVzZXQoKTtmb3Io%0AdmFyIGE9MCxjPXQubGVuZ3RoO2M+YTsrK2Epe3ZhciBsPXRbYV0scz1sLmxlbmd0%0AaDtpZihzKWZvcih2YXIgZj1sWzBdLGg9ZlswXSxnPWZbMV0vMit3YS80LHA9TWF0%0AaC5zaW4oZyksdj1NYXRoLmNvcyhnKSxkPTE7Oyl7ZD09PXMmJihkPTApLG49bFtk%0AXTt2YXIgbT1uWzBdLHk9blsxXS8yK3dhLzQseD1NYXRoLnNpbih5KSxNPU1hdGgu%0AY29zKHkpLF89bS1oLGI9Xz49MD8xOi0xLHc9YipfLFM9dz53YSxrPXAqeDtpZihm%0AYy5hZGQoTWF0aC5hdGFuMihrKmIqTWF0aC5zaW4odyksdipNK2sqTWF0aC5jb3Mo%0AdykpKSxpKz1TP18rYipTYTpfLFNeaD49ZV5tPj1lKXt2YXIgRT1nZShmZShmKSxm%0AZShuKSk7ZGUoRSk7dmFyIEE9Z2UodSxFKTtkZShBKTt2YXIgQz0oU15fPj0wPy0x%0AOjEpKkcoQVsyXSk7KHI+Q3x8cj09PUMmJihFWzBdfHxFWzFdKSkmJihvKz1TXl8+%0APTA/MTotMSl9aWYoIWQrKylicmVhaztoPW0scD14LHY9TSxmPW59fXJldHVybigt%0ARWE+aXx8RWE+aSYmMD5mYyleMSZvfWZ1bmN0aW9uIFBlKG4pe2Z1bmN0aW9uIHQo%0Abix0KXtyZXR1cm4gTWF0aC5jb3MobikqTWF0aC5jb3ModCk+aX1mdW5jdGlvbiBl%0AKG4pe3ZhciBlLGksYyxsLHM7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2w9%0AYz0hMSxzPTF9LHBvaW50OmZ1bmN0aW9uKGYsaCl7dmFyIGcscD1bZixoXSx2PXQo%0AZixoKSxkPW8/dj8wOnUoZixoKTp2P3UoZisoMD5mP3dhOi13YSksaCk6MDtpZigh%0AZSYmKGw9Yz12KSYmbi5saW5lU3RhcnQoKSx2IT09YyYmKGc9cihlLHApLCh5ZShl%0ALGcpfHx5ZShwLGcpKSYmKHBbMF0rPUVhLHBbMV0rPUVhLHY9dChwWzBdLHBbMV0p%0AKSksdiE9PWMpcz0wLHY/KG4ubGluZVN0YXJ0KCksZz1yKHAsZSksbi5wb2ludChn%0AWzBdLGdbMV0pKTooZz1yKGUscCksbi5wb2ludChnWzBdLGdbMV0pLG4ubGluZUVu%0AZCgpKSxlPWc7ZWxzZSBpZihhJiZlJiZvXnYpe3ZhciBtO2QmaXx8IShtPXIocCxl%0ALCEwKSl8fChzPTAsbz8obi5saW5lU3RhcnQoKSxuLnBvaW50KG1bMF1bMF0sbVsw%0AXVsxXSksbi5wb2ludChtWzFdWzBdLG1bMV1bMV0pLG4ubGluZUVuZCgpKToobi5w%0Ab2ludChtWzFdWzBdLG1bMV1bMV0pLG4ubGluZUVuZCgpLG4ubGluZVN0YXJ0KCks%0Abi5wb2ludChtWzBdWzBdLG1bMF1bMV0pKSl9IXZ8fGUmJnllKGUscCl8fG4ucG9p%0AbnQocFswXSxwWzFdKSxlPXAsYz12LGk9ZH0sbGluZUVuZDpmdW5jdGlvbigpe2Mm%0AJm4ubGluZUVuZCgpLGU9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gc3wo%0AbCYmYyk8PDF9fX1mdW5jdGlvbiByKG4sdCxlKXt2YXIgcj1mZShuKSx1PWZlKHQp%0ALG89WzEsMCwwXSxhPWdlKHIsdSksYz1oZShhLGEpLGw9YVswXSxzPWMtbCpsO2lm%0AKCFzKXJldHVybiFlJiZuO3ZhciBmPWkqYy9zLGg9LWkqbC9zLGc9Z2UobyxhKSxw%0APXZlKG8sZiksdj12ZShhLGgpO3BlKHAsdik7dmFyIGQ9ZyxtPWhlKHAsZCkseT1o%0AZShkLGQpLHg9bSptLXkqKGhlKHAscCktMSk7aWYoISgwPngpKXt2YXIgTT1NYXRo%0ALnNxcnQoeCksXz12ZShkLCgtbS1NKS95KTtpZihwZShfLHApLF89bWUoXyksIWUp%0AcmV0dXJuIF87dmFyIGIsdz1uWzBdLFM9dFswXSxrPW5bMV0sRT10WzFdO3c+UyYm%0AKGI9dyx3PVMsUz1iKTt2YXIgQT1TLXcsQz1pYShBLXdhKTxFYSxOPUN8fEVhPkE7%0AaWYoIUMmJms+RSYmKGI9ayxrPUUsRT1iKSxOP0M/aytFPjBeX1sxXTwoaWEoX1sw%0AXS13KTxFYT9rOkUpOms8PV9bMV0mJl9bMV08PUU6QT53YV4odzw9X1swXSYmX1sw%0AXTw9Uykpe3ZhciB6PXZlKGQsKC1tK00pL3kpO3JldHVybiBwZSh6LHApLFtfLG1l%0AKHopXX19fWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1vP246d2Etbix1PTA7cmV0dXJu%0ALXI+dD91fD0xOnQ+ciYmKHV8PTIpLC1yPmU/dXw9NDplPnImJih1fD04KSx1fXZh%0AciBpPU1hdGguY29zKG4pLG89aT4wLGE9aWEoaSk+RWEsYz1zcihuLDYqQ2EpO3Jl%0AdHVybiBDZSh0LGUsYyxvP1swLC1uXTpbLXdhLG4td2FdKX1mdW5jdGlvbiBVZShu%0ALHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGksbz11LmEsYT11LmIsYz1v%0ALngsbD1vLnkscz1hLngsZj1hLnksaD0wLGc9MSxwPXMtYyx2PWYtbDtpZihpPW4t%0AYyxwfHwhKGk+MCkpe2lmKGkvPXAsMD5wKXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9%0AaSl9ZWxzZSBpZihwPjApe2lmKGk+ZylyZXR1cm47aT5oJiYoaD1pKX1pZihpPWUt%0AYyxwfHwhKDA+aSkpe2lmKGkvPXAsMD5wKXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9%0AaSl9ZWxzZSBpZihwPjApe2lmKGg+aSlyZXR1cm47Zz5pJiYoZz1pKX1pZihpPXQt%0AbCx2fHwhKGk+MCkpe2lmKGkvPXYsMD52KXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9%0AaSl9ZWxzZSBpZih2PjApe2lmKGk+ZylyZXR1cm47aT5oJiYoaD1pKX1pZihpPXIt%0AbCx2fHwhKDA+aSkpe2lmKGkvPXYsMD52KXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9%0AaSl9ZWxzZSBpZih2PjApe2lmKGg+aSlyZXR1cm47Zz5pJiYoZz1pKX1yZXR1cm4g%0AaD4wJiYodS5hPXt4OmMraCpwLHk6bCtoKnZ9KSwxPmcmJih1LmI9e3g6YytnKnAs%0AeTpsK2cqdn0pLHV9fX19fX1mdW5jdGlvbiBqZShuLHQsZSxyKXtmdW5jdGlvbiB1%0AKHIsdSl7cmV0dXJuIGlhKHJbMF0tbik8RWE/dT4wPzA6MzppYShyWzBdLWUpPEVh%0AP3U+MD8yOjE6aWEoclsxXS10KTxFYT91PjA/MTowOnU+MD8zOjJ9ZnVuY3Rpb24g%0AaShuLHQpe3JldHVybiBvKG4ueCx0LngpfWZ1bmN0aW9uIG8obix0KXt2YXIgZT11%0AKG4sMSkscj11KHQsMSk7cmV0dXJuIGUhPT1yP2UtcjowPT09ZT90WzFdLW5bMV06%0AMT09PWU/blswXS10WzBdOjI9PT1lP25bMV0tdFsxXTp0WzBdLW5bMF19cmV0dXJu%0AIGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMobil7Zm9yKHZhciB0PTAsZT1kLmxlbmd0%0AaCxyPW5bMV0sdT0wO2U+dTsrK3UpZm9yKHZhciBpLG89MSxhPWRbdV0sYz1hLmxl%0Abmd0aCxsPWFbMF07Yz5vOysrbylpPWFbb10sbFsxXTw9cj9pWzFdPnImJlcobCxp%0ALG4pPjAmJisrdDppWzFdPD1yJiZXKGwsaSxuKTwwJiYtLXQsbD1pO3JldHVybiAw%0AIT09dH1mdW5jdGlvbiBsKGksYSxjLGwpe3ZhciBzPTAsZj0wO2lmKG51bGw9PWl8%0AfChzPXUoaSxjKSkhPT0oZj11KGEsYykpfHxvKGksYSk8MF5jPjApe2RvIGwucG9p%0AbnQoMD09PXN8fDM9PT1zP246ZSxzPjE/cjp0KTt3aGlsZSgocz0ocytjKzQpJTQp%0AIT09Zil9ZWxzZSBsLnBvaW50KGFbMF0sYVsxXSl9ZnVuY3Rpb24gcyh1LGkpe3Jl%0AdHVybiB1Pj1uJiZlPj11JiZpPj10JiZyPj1pfWZ1bmN0aW9uIGYobix0KXtzKG4s%0AdCkmJmEucG9pbnQobix0KX1mdW5jdGlvbiBoKCl7Ti5wb2ludD1wLGQmJmQucHVz%0AaChtPVtdKSxTPSEwLHc9ITEsXz1iPTAvMH1mdW5jdGlvbiBnKCl7diYmKHAoeSx4%0AKSxNJiZ3JiZBLnJlam9pbigpLHYucHVzaChBLmJ1ZmZlcigpKSksTi5wb2ludD1m%0ALHcmJmEubGluZUVuZCgpfWZ1bmN0aW9uIHAobix0KXtuPU1hdGgubWF4KC1FYyxN%0AYXRoLm1pbihFYyxuKSksdD1NYXRoLm1heCgtRWMsTWF0aC5taW4oRWMsdCkpO3Zh%0AciBlPXMobix0KTtpZihkJiZtLnB1c2goW24sdF0pLFMpeT1uLHg9dCxNPWUsUz0h%0AMSxlJiYoYS5saW5lU3RhcnQoKSxhLnBvaW50KG4sdCkpO2Vsc2UgaWYoZSYmdylh%0ALnBvaW50KG4sdCk7ZWxzZXt2YXIgcj17YTp7eDpfLHk6Yn0sYjp7eDpuLHk6dH19%0AO0Mocik/KHd8fChhLmxpbmVTdGFydCgpLGEucG9pbnQoci5hLngsci5hLnkpKSxh%0ALnBvaW50KHIuYi54LHIuYi55KSxlfHxhLmxpbmVFbmQoKSxrPSExKTplJiYoYS5s%0AaW5lU3RhcnQoKSxhLnBvaW50KG4sdCksaz0hMSl9Xz1uLGI9dCx3PWV9dmFyIHYs%0AZCxtLHkseCxNLF8sYix3LFMsayxFPWEsQT16ZSgpLEM9VWUobix0LGUsciksTj17%0AcG9pbnQ6ZixsaW5lU3RhcnQ6aCxsaW5lRW5kOmcscG9seWdvblN0YXJ0OmZ1bmN0%0AaW9uKCl7YT1BLHY9W10sZD1bXSxrPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7%0AYT1FLHY9Vm8ubWVyZ2Uodik7dmFyIHQ9YyhbbixyXSksZT1rJiZ0LHU9di5sZW5n%0AdGg7KGV8fHUpJiYoYS5wb2x5Z29uU3RhcnQoKSxlJiYoYS5saW5lU3RhcnQoKSxs%0AKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgpKSx1JiZrZSh2LGksdCxsLGEpLGEu%0AcG9seWdvbkVuZCgpKSx2PWQ9bT1udWxsfX07cmV0dXJuIE59fWZ1bmN0aW9uIEhl%0AKG4sdCl7ZnVuY3Rpb24gZShlLHIpe3JldHVybiBlPW4oZSxyKSx0KGVbMF0sZVsx%0AXSl9cmV0dXJuIG4uaW52ZXJ0JiZ0LmludmVydCYmKGUuaW52ZXJ0PWZ1bmN0aW9u%0AKGUscil7cmV0dXJuIGU9dC5pbnZlcnQoZSxyKSxlJiZuLmludmVydChlWzBdLGVb%0AMV0pfSksZX1mdW5jdGlvbiBGZShuKXt2YXIgdD0wLGU9d2EvMyxyPWVyKG4pLHU9%0Acih0LGUpO3JldHVybiB1LnBhcmFsbGVscz1mdW5jdGlvbihuKXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aD9yKHQ9blswXSp3YS8xODAsZT1uWzFdKndhLzE4MCk6WzE4%0AMCoodC93YSksMTgwKihlL3dhKV19LHV9ZnVuY3Rpb24gT2Uobix0KXtmdW5jdGlv%0AbiBlKG4sdCl7dmFyIGU9TWF0aC5zcXJ0KGktMip1Kk1hdGguc2luKHQpKS91O3Jl%0AdHVybltlKk1hdGguc2luKG4qPXUpLG8tZSpNYXRoLmNvcyhuKV19dmFyIHI9TWF0%0AaC5zaW4obiksdT0ocitNYXRoLnNpbih0KSkvMixpPTErciooMip1LXIpLG89TWF0%0AaC5zcXJ0KGkpL3U7cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7dmFyIGU9%0Aby10O3JldHVybltNYXRoLmF0YW4yKG4sZSkvdSxHKChpLShuKm4rZSplKSp1KnUp%0ALygyKnUpKV19LGV9ZnVuY3Rpb24gWWUoKXtmdW5jdGlvbiBuKG4sdCl7Q2MrPXUq%0Abi1yKnQscj1uLHU9dH12YXIgdCxlLHIsdTtxYy5wb2ludD1mdW5jdGlvbihpLG8p%0Ae3FjLnBvaW50PW4sdD1yPWksZT11PW99LHFjLmxpbmVFbmQ9ZnVuY3Rpb24oKXtu%0AKHQsZSl9fWZ1bmN0aW9uIEllKG4sdCl7TmM+biYmKE5jPW4pLG4+TGMmJihMYz1u%0AKSx6Yz50JiYoemM9dCksdD5UYyYmKFRjPXQpfWZ1bmN0aW9uIFplKCl7ZnVuY3Rp%0Ab24gbihuLHQpe28ucHVzaCgiTSIsbiwiLCIsdCxpKX1mdW5jdGlvbiB0KG4sdCl7%0Aby5wdXNoKCJNIixuLCIsIix0KSxhLnBvaW50PWV9ZnVuY3Rpb24gZShuLHQpe28u%0AcHVzaCgiTCIsbiwiLCIsdCl9ZnVuY3Rpb24gcigpe2EucG9pbnQ9bn1mdW5jdGlv%0AbiB1KCl7by5wdXNoKCJaIil9dmFyIGk9VmUoNC41KSxvPVtdLGE9e3BvaW50Om4s%0AbGluZVN0YXJ0OmZ1bmN0aW9uKCl7YS5wb2ludD10fSxsaW5lRW5kOnIscG9seWdv%0AblN0YXJ0OmZ1bmN0aW9uKCl7YS5saW5lRW5kPXV9LHBvbHlnb25FbmQ6ZnVuY3Rp%0Ab24oKXthLmxpbmVFbmQ9cixhLnBvaW50PW59LHBvaW50UmFkaXVzOmZ1bmN0aW9u%0AKG4pe3JldHVybiBpPVZlKG4pLGF9LHJlc3VsdDpmdW5jdGlvbigpe2lmKG8ubGVu%0AZ3RoKXt2YXIgbj1vLmpvaW4oIiIpO3JldHVybiBvPVtdLG59fX07cmV0dXJuIGF9%0AZnVuY3Rpb24gVmUobil7cmV0dXJuIm0wLCIrbisiYSIrbisiLCIrbisiIDAgMSwx%0AIDAsIistMipuKyJhIituKyIsIituKyIgMCAxLDEgMCwiKzIqbisieiJ9ZnVuY3Rp%0Ab24gWGUobix0KXt2Yys9bixkYys9dCwrK21jfWZ1bmN0aW9uICRlKCl7ZnVuY3Rp%0Ab24gbihuLHIpe3ZhciB1PW4tdCxpPXItZSxvPU1hdGguc3FydCh1KnUraSppKTt5%0AYys9byoodCtuKS8yLHhjKz1vKihlK3IpLzIsTWMrPW8sWGUodD1uLGU9cil9dmFy%0AIHQsZTtEYy5wb2ludD1mdW5jdGlvbihyLHUpe0RjLnBvaW50PW4sWGUodD1yLGU9%0AdSl9fWZ1bmN0aW9uIEJlKCl7RGMucG9pbnQ9WGV9ZnVuY3Rpb24gV2UoKXtmdW5j%0AdGlvbiBuKG4sdCl7dmFyIGU9bi1yLGk9dC11LG89TWF0aC5zcXJ0KGUqZStpKmkp%0AO3ljKz1vKihyK24pLzIseGMrPW8qKHUrdCkvMixNYys9byxvPXUqbi1yKnQsX2Mr%0APW8qKHIrbiksYmMrPW8qKHUrdCksd2MrPTMqbyxYZShyPW4sdT10KX12YXIgdCxl%0ALHIsdTtEYy5wb2ludD1mdW5jdGlvbihpLG8pe0RjLnBvaW50PW4sWGUodD1yPWks%0AZT11PW8pfSxEYy5saW5lRW5kPWZ1bmN0aW9uKCl7bih0LGUpfX1mdW5jdGlvbiBK%0AZShuKXtmdW5jdGlvbiB0KHQsZSl7bi5tb3ZlVG8odCxlKSxuLmFyYyh0LGUsbyww%0ALFNhKX1mdW5jdGlvbiBlKHQsZSl7bi5tb3ZlVG8odCxlKSxhLnBvaW50PXJ9ZnVu%0AY3Rpb24gcih0LGUpe24ubGluZVRvKHQsZSl9ZnVuY3Rpb24gdSgpe2EucG9pbnQ9%0AdH1mdW5jdGlvbiBpKCl7bi5jbG9zZVBhdGgoKX12YXIgbz00LjUsYT17cG9pbnQ6%0AdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXthLnBvaW50PWV9LGxpbmVFbmQ6dSxwb2x5%0AZ29uU3RhcnQ6ZnVuY3Rpb24oKXthLmxpbmVFbmQ9aX0scG9seWdvbkVuZDpmdW5j%0AdGlvbigpe2EubGluZUVuZD11LGEucG9pbnQ9dH0scG9pbnRSYWRpdXM6ZnVuY3Rp%0Ab24obil7cmV0dXJuIG89bixhfSxyZXN1bHQ6dn07cmV0dXJuIGF9ZnVuY3Rpb24g%0AR2Uobil7ZnVuY3Rpb24gdChuKXtyZXR1cm4oYT9yOmUpKG4pfWZ1bmN0aW9uIGUo%0AdCl7cmV0dXJuIG5yKHQsZnVuY3Rpb24oZSxyKXtlPW4oZSxyKSx0LnBvaW50KGVb%0AMF0sZVsxXSl9KX1mdW5jdGlvbiByKHQpe2Z1bmN0aW9uIGUoZSxyKXtlPW4oZSxy%0AKSx0LnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gcigpe3g9MC8wLFMucG9pbnQ9%0AaSx0LmxpbmVTdGFydCgpfWZ1bmN0aW9uIGkoZSxyKXt2YXIgaT1mZShbZSxyXSks%0Abz1uKGUscik7dSh4LE0seSxfLGIsdyx4PW9bMF0sTT1vWzFdLHk9ZSxfPWlbMF0s%0AYj1pWzFdLHc9aVsyXSxhLHQpLHQucG9pbnQoeCxNKX1mdW5jdGlvbiBvKCl7Uy5w%0Ab2ludD1lLHQubGluZUVuZCgpfWZ1bmN0aW9uIGMoKXtyKCksUy5wb2ludD1sLFMu%0AbGluZUVuZD1zfWZ1bmN0aW9uIGwobix0KXtpKGY9bixoPXQpLGc9eCxwPU0sdj1f%0ALGQ9YixtPXcsUy5wb2ludD1pfWZ1bmN0aW9uIHMoKXt1KHgsTSx5LF8sYix3LGcs%0AcCxmLHYsZCxtLGEsdCksUy5saW5lRW5kPW8sbygpfXZhciBmLGgsZyxwLHYsZCxt%0ALHkseCxNLF8sYix3LFM9e3BvaW50OmUsbGluZVN0YXJ0OnIsbGluZUVuZDpvLHBv%0AbHlnb25TdGFydDpmdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCksUy5saW5lU3Rh%0AcnQ9Y30scG9seWdvbkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpLFMubGlu%0AZVN0YXJ0PXJ9fTtyZXR1cm4gU31mdW5jdGlvbiB1KHQsZSxyLGEsYyxsLHMsZixo%0ALGcscCx2LGQsbSl7dmFyIHk9cy10LHg9Zi1lLE09eSp5K3gqeDtpZihNPjQqaSYm%0AZC0tKXt2YXIgXz1hK2csYj1jK3Asdz1sK3YsUz1NYXRoLnNxcnQoXypfK2IqYit3%0AKncpLGs9TWF0aC5hc2luKHcvPVMpLEU9aWEoaWEodyktMSk8RWF8fGlhKHItaCk8%0ARWE/KHIraCkvMjpNYXRoLmF0YW4yKGIsXyksQT1uKEUsayksQz1BWzBdLE49QVsx%0AXSx6PUMtdCxMPU4tZSxUPXgqei15Kkw7KFQqVC9NPml8fGlhKCh5KnoreCpMKS9N%0ALS41KT4uM3x8bz5hKmcrYypwK2wqdikmJih1KHQsZSxyLGEsYyxsLEMsTixFLF8v%0APVMsYi89Uyx3LGQsbSksbS5wb2ludChDLE4pLHUoQyxOLEUsXyxiLHcscyxmLGgs%0AZyxwLHYsZCxtKSl9fXZhciBpPS41LG89TWF0aC5jb3MoMzAqQ2EpLGE9MTY7cmV0%0AdXJuIHQucHJlY2lzaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyhhPShpPW4qbik+MCYmMTYsdCk6TWF0aC5zcXJ0KGkpCn0sdH1mdW5jdGlv%0AbiBLZShuKXt2YXIgdD1HZShmdW5jdGlvbih0LGUpe3JldHVybiBuKFt0Kk5hLGUq%0ATmFdKX0pO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gcnIodChuKSl9fWZ1bmN0%0AaW9uIFFlKG4pe3RoaXMuc3RyZWFtPW59ZnVuY3Rpb24gbnIobix0KXtyZXR1cm57%0AcG9pbnQ6dCxzcGhlcmU6ZnVuY3Rpb24oKXtuLnNwaGVyZSgpfSxsaW5lU3RhcnQ6%0AZnVuY3Rpb24oKXtuLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7bi5s%0AaW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe24ucG9seWdvblN0YXJ0%0AKCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25FbmQoKX19fWZ1bmN0%0AaW9uIHRyKG4pe3JldHVybiBlcihmdW5jdGlvbigpe3JldHVybiBufSkoKX1mdW5j%0AdGlvbiBlcihuKXtmdW5jdGlvbiB0KG4pe3JldHVybiBuPWEoblswXSpDYSxuWzFd%0AKkNhKSxbblswXSpoK2MsbC1uWzFdKmhdfWZ1bmN0aW9uIGUobil7cmV0dXJuIG49%0AYS5pbnZlcnQoKG5bMF0tYykvaCwobC1uWzFdKS9oKSxuJiZbblswXSpOYSxuWzFd%0AKk5hXX1mdW5jdGlvbiByKCl7YT1IZShvPW9yKG0seSx4KSxpKTt2YXIgbj1pKHYs%0AZCk7cmV0dXJuIGM9Zy1uWzBdKmgsbD1wK25bMV0qaCx1KCl9ZnVuY3Rpb24gdSgp%0Ae3JldHVybiBzJiYocy52YWxpZD0hMSxzPW51bGwpLHR9dmFyIGksbyxhLGMsbCxz%0ALGY9R2UoZnVuY3Rpb24obix0KXtyZXR1cm4gbj1pKG4sdCksW25bMF0qaCtjLGwt%0AblsxXSpoXX0pLGg9MTUwLGc9NDgwLHA9MjUwLHY9MCxkPTAsbT0wLHk9MCx4PTAs%0ATT1rYyxfPXd0LGI9bnVsbCx3PW51bGw7cmV0dXJuIHQuc3RyZWFtPWZ1bmN0aW9u%0AKG4pe3JldHVybiBzJiYocy52YWxpZD0hMSkscz1ycihNKG8sZihfKG4pKSkpLHMu%0AdmFsaWQ9ITAsc30sdC5jbGlwQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KE09bnVsbD09bj8oYj1uLGtjKTpQZSgoYj0rbikqQ2EpLHUo%0AKSk6Yn0sdC5jbGlwRXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu%0AbGVuZ3RoPyh3PW4sXz1uP2plKG5bMF1bMF0sblswXVsxXSxuWzFdWzBdLG5bMV1b%0AMV0pOnd0LHUoKSk6d30sdC5zY2FsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1l%0AbnRzLmxlbmd0aD8oaD0rbixyKCkpOmh9LHQudHJhbnNsYXRlPWZ1bmN0aW9uKG4p%0Ae3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStuWzBdLHA9K25bMV0scigpKTpb%0AZyxwXX0sdC5jZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KHY9blswXSUzNjAqQ2EsZD1uWzFdJTM2MCpDYSxyKCkpOlt2Kk5hLGQqTmFd%0AfSx0LnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o%0AbT1uWzBdJTM2MCpDYSx5PW5bMV0lMzYwKkNhLHg9bi5sZW5ndGg+Mj9uWzJdJTM2%0AMCpDYTowLHIoKSk6W20qTmEseSpOYSx4Kk5hXX0sVm8ucmViaW5kKHQsZiwicHJl%0AY2lzaW9uIiksZnVuY3Rpb24oKXtyZXR1cm4gaT1uLmFwcGx5KHRoaXMsYXJndW1l%0AbnRzKSx0LmludmVydD1pLmludmVydCYmZSxyKCl9fWZ1bmN0aW9uIHJyKG4pe3Jl%0AdHVybiBucihuLGZ1bmN0aW9uKHQsZSl7bi5wb2ludCh0KkNhLGUqQ2EpfSl9ZnVu%0AY3Rpb24gdXIobix0KXtyZXR1cm5bbix0XX1mdW5jdGlvbiBpcihuLHQpe3JldHVy%0AbltuPndhP24tU2E6LXdhPm4/bitTYTpuLHRdfWZ1bmN0aW9uIG9yKG4sdCxlKXty%0AZXR1cm4gbj90fHxlP0hlKGNyKG4pLGxyKHQsZSkpOmNyKG4pOnR8fGU/bHIodCxl%0AKTppcn1mdW5jdGlvbiBhcihuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4g%0AdCs9bixbdD53YT90LVNhOi13YT50P3QrU2E6dCxlXX19ZnVuY3Rpb24gY3Iobil7%0AdmFyIHQ9YXIobik7cmV0dXJuIHQuaW52ZXJ0PWFyKC1uKSx0fWZ1bmN0aW9uIGxy%0AKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPU1hdGguY29zKHQpLGE9TWF0aC5j%0Ab3MobikqZSxjPU1hdGguc2luKG4pKmUsbD1NYXRoLnNpbih0KSxzPWwqcithKnU7%0AcmV0dXJuW01hdGguYXRhbjIoYyppLXMqbyxhKnItbCp1KSxHKHMqaStjKm8pXX12%0AYXIgcj1NYXRoLmNvcyhuKSx1PU1hdGguc2luKG4pLGk9TWF0aC5jb3ModCksbz1N%0AYXRoLnNpbih0KTtyZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1N%0AYXRoLmNvcyh0KSxhPU1hdGguY29zKG4pKmUsYz1NYXRoLnNpbihuKSplLGw9TWF0%0AaC5zaW4odCkscz1sKmktYypvO3JldHVybltNYXRoLmF0YW4yKGMqaStsKm8sYSpy%0AK3MqdSksRyhzKnItYSp1KV19LGV9ZnVuY3Rpb24gc3Iobix0KXt2YXIgZT1NYXRo%0ALmNvcyhuKSxyPU1hdGguc2luKG4pO3JldHVybiBmdW5jdGlvbih1LGksbyxhKXt2%0AYXIgYz1vKnQ7bnVsbCE9dT8odT1mcihlLHUpLGk9ZnIoZSxpKSwobz4wP2k+dTp1%0APmkpJiYodSs9bypTYSkpOih1PW4rbypTYSxpPW4tLjUqYyk7Zm9yKHZhciBsLHM9%0AdTtvPjA/cz5pOmk+cztzLT1jKWEucG9pbnQoKGw9bWUoW2UsLXIqTWF0aC5jb3Mo%0AcyksLXIqTWF0aC5zaW4ocyldKSlbMF0sbFsxXSl9fWZ1bmN0aW9uIGZyKG4sdCl7%0AdmFyIGU9ZmUodCk7ZVswXS09bixkZShlKTt2YXIgcj1KKC1lWzFdKTtyZXR1cm4o%0AKC1lWzJdPDA/LXI6cikrMipNYXRoLlBJLUVhKSUoMipNYXRoLlBJKX1mdW5jdGlv%0AbiBocihuLHQsZSl7dmFyIHI9Vm8ucmFuZ2Uobix0LUVhLGUpLmNvbmNhdCh0KTty%0AZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKHQpe3JldHVy%0AbltuLHRdfSl9fWZ1bmN0aW9uIGdyKG4sdCxlKXt2YXIgcj1Wby5yYW5nZShuLHQt%0ARWEsZSkuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gci5tYXAo%0AZnVuY3Rpb24odCl7cmV0dXJuW3Qsbl19KX19ZnVuY3Rpb24gcHIobil7cmV0dXJu%0AIG4uc291cmNlfWZ1bmN0aW9uIHZyKG4pe3JldHVybiBuLnRhcmdldH1mdW5jdGlv%0AbiBkcihuLHQsZSxyKXt2YXIgdT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLG89%0ATWF0aC5jb3MociksYT1NYXRoLnNpbihyKSxjPXUqTWF0aC5jb3MobiksbD11Kk1h%0AdGguc2luKG4pLHM9bypNYXRoLmNvcyhlKSxmPW8qTWF0aC5zaW4oZSksaD0yKk1h%0AdGguYXNpbihNYXRoLnNxcnQodHQoci10KSt1Km8qdHQoZS1uKSkpLGc9MS9NYXRo%0ALnNpbihoKSxwPWg/ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zaW4obio9aCkqZyxl%0APU1hdGguc2luKGgtbikqZyxyPWUqYyt0KnMsdT1lKmwrdCpmLG89ZSppK3QqYTty%0AZXR1cm5bTWF0aC5hdGFuMih1LHIpKk5hLE1hdGguYXRhbjIobyxNYXRoLnNxcnQo%0AcipyK3UqdSkpKk5hXX06ZnVuY3Rpb24oKXtyZXR1cm5bbipOYSx0Kk5hXX07cmV0%0AdXJuIHAuZGlzdGFuY2U9aCxwfWZ1bmN0aW9uIG1yKCl7ZnVuY3Rpb24gbihuLHUp%0Ae3ZhciBpPU1hdGguc2luKHUqPUNhKSxvPU1hdGguY29zKHUpLGE9aWEoKG4qPUNh%0AKS10KSxjPU1hdGguY29zKGEpO1BjKz1NYXRoLmF0YW4yKE1hdGguc3FydCgoYT1v%0AKk1hdGguc2luKGEpKSphKyhhPXIqaS1lKm8qYykqYSksZSppK3IqbypjKSx0PW4s%0AZT1pLHI9b312YXIgdCxlLHI7VWMucG9pbnQ9ZnVuY3Rpb24odSxpKXt0PXUqQ2Es%0AZT1NYXRoLnNpbihpKj1DYSkscj1NYXRoLmNvcyhpKSxVYy5wb2ludD1ufSxVYy5s%0AaW5lRW5kPWZ1bmN0aW9uKCl7VWMucG9pbnQ9VWMubGluZUVuZD12fX1mdW5jdGlv%0AbiB5cihuLHQpe2Z1bmN0aW9uIGUodCxlKXt2YXIgcj1NYXRoLmNvcyh0KSx1PU1h%0AdGguY29zKGUpLGk9bihyKnUpO3JldHVybltpKnUqTWF0aC5zaW4odCksaSpNYXRo%0ALnNpbihlKV19cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKG4sZSl7dmFyIHI9TWF0%0AaC5zcXJ0KG4qbitlKmUpLHU9dChyKSxpPU1hdGguc2luKHUpLG89TWF0aC5jb3Mo%0AdSk7cmV0dXJuW01hdGguYXRhbjIobippLHIqbyksTWF0aC5hc2luKHImJmUqaS9y%0AKV19LGV9ZnVuY3Rpb24geHIobix0KXtmdW5jdGlvbiBlKG4sdCl7bz4wPy1rYStF%0AYT50JiYodD0ta2ErRWEpOnQ+a2EtRWEmJih0PWthLUVhKTt2YXIgZT1vL01hdGgu%0AcG93KHUodCksaSk7cmV0dXJuW2UqTWF0aC5zaW4oaSpuKSxvLWUqTWF0aC5jb3Mo%0AaSpuKV19dmFyIHI9TWF0aC5jb3MobiksdT1mdW5jdGlvbihuKXtyZXR1cm4gTWF0%0AaC50YW4od2EvNCtuLzIpfSxpPW49PT10P01hdGguc2luKG4pOk1hdGgubG9nKHIv%0ATWF0aC5jb3ModCkpL01hdGgubG9nKHUodCkvdShuKSksbz1yKk1hdGgucG93KHUo%0AbiksaSkvaTtyZXR1cm4gaT8oZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1v%0ALXQscj1CKGkpKk1hdGguc3FydChuKm4rZSplKTtyZXR1cm5bTWF0aC5hdGFuMihu%0ALGUpL2ksMipNYXRoLmF0YW4oTWF0aC5wb3coby9yLDEvaSkpLWthXX0sZSk6X3J9%0AZnVuY3Rpb24gTXIobix0KXtmdW5jdGlvbiBlKG4sdCl7dmFyIGU9aS10O3JldHVy%0AbltlKk1hdGguc2luKHUqbiksaS1lKk1hdGguY29zKHUqbildfXZhciByPU1hdGgu%0AY29zKG4pLHU9bj09PXQ/TWF0aC5zaW4obik6KHItTWF0aC5jb3ModCkpLyh0LW4p%0ALGk9ci91K247cmV0dXJuIGlhKHUpPEVhP3VyOihlLmludmVydD1mdW5jdGlvbihu%0ALHQpe3ZhciBlPWktdDtyZXR1cm5bTWF0aC5hdGFuMihuLGUpL3UsaS1CKHUpKk1h%0AdGguc3FydChuKm4rZSplKV19LGUpfWZ1bmN0aW9uIF9yKG4sdCl7cmV0dXJuW24s%0ATWF0aC5sb2coTWF0aC50YW4od2EvNCt0LzIpKV19ZnVuY3Rpb24gYnIobil7dmFy%0AIHQsZT10cihuKSxyPWUuc2NhbGUsdT1lLnRyYW5zbGF0ZSxpPWUuY2xpcEV4dGVu%0AdDtyZXR1cm4gZS5zY2FsZT1mdW5jdGlvbigpe3ZhciBuPXIuYXBwbHkoZSxhcmd1%0AbWVudHMpO3JldHVybiBuPT09ZT90P2UuY2xpcEV4dGVudChudWxsKTplOm59LGUu%0AdHJhbnNsYXRlPWZ1bmN0aW9uKCl7dmFyIG49dS5hcHBseShlLGFyZ3VtZW50cyk7%0AcmV0dXJuIG49PT1lP3Q/ZS5jbGlwRXh0ZW50KG51bGwpOmU6bn0sZS5jbGlwRXh0%0AZW50PWZ1bmN0aW9uKG4pe3ZhciBvPWkuYXBwbHkoZSxhcmd1bWVudHMpO2lmKG89%0APT1lKXtpZih0PW51bGw9PW4pe3ZhciBhPXdhKnIoKSxjPXUoKTtpKFtbY1swXS1h%0ALGNbMV0tYV0sW2NbMF0rYSxjWzFdK2FdXSl9fWVsc2UgdCYmKG89bnVsbCk7cmV0%0AdXJuIG99LGUuY2xpcEV4dGVudChudWxsKX1mdW5jdGlvbiB3cihuLHQpe3JldHVy%0AbltNYXRoLmxvZyhNYXRoLnRhbih3YS80K3QvMikpLC1uXX1mdW5jdGlvbiBTcihu%0AKXtyZXR1cm4gblswXX1mdW5jdGlvbiBrcihuKXtyZXR1cm4gblsxXX1mdW5jdGlv%0AbiBFcihuKXtmb3IodmFyIHQ9bi5sZW5ndGgsZT1bMCwxXSxyPTIsdT0yO3Q+dTt1%0AKyspe2Zvcig7cj4xJiZXKG5bZVtyLTJdXSxuW2Vbci0xXV0sblt1XSk8PTA7KS0t%0AcjtlW3IrK109dX1yZXR1cm4gZS5zbGljZSgwLHIpfWZ1bmN0aW9uIEFyKG4sdCl7%0AcmV0dXJuIG5bMF0tdFswXXx8blsxXS10WzFdfWZ1bmN0aW9uIENyKG4sdCxlKXty%0AZXR1cm4oZVswXS10WzBdKSooblsxXS10WzFdKTwoZVsxXS10WzFdKSooblswXS10%0AWzBdKX1mdW5jdGlvbiBOcihuLHQsZSxyKXt2YXIgdT1uWzBdLGk9ZVswXSxvPXRb%0AMF0tdSxhPXJbMF0taSxjPW5bMV0sbD1lWzFdLHM9dFsxXS1jLGY9clsxXS1sLGg9%0AKGEqKGMtbCktZioodS1pKSkvKGYqby1hKnMpO3JldHVyblt1K2gqbyxjK2gqc119%0AZnVuY3Rpb24genIobil7dmFyIHQ9blswXSxlPW5bbi5sZW5ndGgtMV07cmV0dXJu%0AISh0WzBdLWVbMF18fHRbMV0tZVsxXSl9ZnVuY3Rpb24gTHIoKXtLcih0aGlzKSx0%0AaGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gVHIo%0Abil7dmFyIHQ9V2MucG9wKCl8fG5ldyBMcjtyZXR1cm4gdC5zaXRlPW4sdH1mdW5j%0AdGlvbiBxcihuKXtJcihuKSxYYy5yZW1vdmUobiksV2MucHVzaChuKSxLcihuKX1m%0AdW5jdGlvbiBScihuKXt2YXIgdD1uLmNpcmNsZSxlPXQueCxyPXQuY3ksdT17eDpl%0ALHk6cn0saT1uLlAsbz1uLk4sYT1bbl07cXIobik7Zm9yKHZhciBjPWk7Yy5jaXJj%0AbGUmJmlhKGUtYy5jaXJjbGUueCk8RWEmJmlhKHItYy5jaXJjbGUuY3kpPEVhOylp%0APWMuUCxhLnVuc2hpZnQoYykscXIoYyksYz1pO2EudW5zaGlmdChjKSxJcihjKTtm%0Ab3IodmFyIGw9bztsLmNpcmNsZSYmaWEoZS1sLmNpcmNsZS54KTxFYSYmaWEoci1s%0ALmNpcmNsZS5jeSk8RWE7KW89bC5OLGEucHVzaChsKSxxcihsKSxsPW87YS5wdXNo%0AKGwpLElyKGwpO3ZhciBzLGY9YS5sZW5ndGg7Zm9yKHM9MTtmPnM7KytzKWw9YVtz%0AXSxjPWFbcy0xXSxXcihsLmVkZ2UsYy5zaXRlLGwuc2l0ZSx1KTtjPWFbMF0sbD1h%0AW2YtMV0sbC5lZGdlPSRyKGMuc2l0ZSxsLnNpdGUsbnVsbCx1KSxZcihjKSxZcihs%0AKX1mdW5jdGlvbiBEcihuKXtmb3IodmFyIHQsZSxyLHUsaT1uLngsbz1uLnksYT1Y%0AYy5fO2E7KWlmKHI9UHIoYSxvKS1pLHI+RWEpYT1hLkw7ZWxzZXtpZih1PWktVXIo%0AYSxvKSwhKHU+RWEpKXtyPi1FYT8odD1hLlAsZT1hKTp1Pi1FYT8odD1hLGU9YS5O%0AKTp0PWU9YTticmVha31pZighYS5SKXt0PWE7YnJlYWt9YT1hLlJ9dmFyIGM9VHIo%0Abik7aWYoWGMuaW5zZXJ0KHQsYyksdHx8ZSl7aWYodD09PWUpcmV0dXJuIElyKHQp%0ALGU9VHIodC5zaXRlKSxYYy5pbnNlcnQoYyxlKSxjLmVkZ2U9ZS5lZGdlPSRyKHQu%0Ac2l0ZSxjLnNpdGUpLFlyKHQpLFlyKGUpLHZvaWQgMDtpZighZSlyZXR1cm4gYy5l%0AZGdlPSRyKHQuc2l0ZSxjLnNpdGUpLHZvaWQgMDtJcih0KSxJcihlKTt2YXIgbD10%0ALnNpdGUscz1sLngsZj1sLnksaD1uLngtcyxnPW4ueS1mLHA9ZS5zaXRlLHY9cC54%0ALXMsZD1wLnktZixtPTIqKGgqZC1nKnYpLHk9aCpoK2cqZyx4PXYqditkKmQsTT17%0AeDooZCp5LWcqeCkvbStzLHk6KGgqeC12KnkpL20rZn07V3IoZS5lZGdlLGwscCxN%0AKSxjLmVkZ2U9JHIobCxuLG51bGwsTSksZS5lZGdlPSRyKG4scCxudWxsLE0pLFly%0AKHQpLFlyKGUpfX1mdW5jdGlvbiBQcihuLHQpe3ZhciBlPW4uc2l0ZSxyPWUueCx1%0APWUueSxpPXUtdDtpZighaSlyZXR1cm4gcjt2YXIgbz1uLlA7aWYoIW8pcmV0dXJu%0ALTEvMDtlPW8uc2l0ZTt2YXIgYT1lLngsYz1lLnksbD1jLXQ7aWYoIWwpcmV0dXJu%0AIGE7dmFyIHM9YS1yLGY9MS9pLTEvbCxoPXMvbDtyZXR1cm4gZj8oLWgrTWF0aC5z%0AcXJ0KGgqaC0yKmYqKHMqcy8oLTIqbCktYytsLzIrdS1pLzIpKSkvZityOihyK2Ep%0ALzJ9ZnVuY3Rpb24gVXIobix0KXt2YXIgZT1uLk47aWYoZSlyZXR1cm4gUHIoZSx0%0AKTt2YXIgcj1uLnNpdGU7cmV0dXJuIHIueT09PXQ/ci54OjEvMH1mdW5jdGlvbiBq%0AcihuKXt0aGlzLnNpdGU9bix0aGlzLmVkZ2VzPVtdfWZ1bmN0aW9uIEhyKG4pe2Zv%0Acih2YXIgdCxlLHIsdSxpLG8sYSxjLGwscyxmPW5bMF1bMF0saD1uWzFdWzBdLGc9%0AblswXVsxXSxwPW5bMV1bMV0sdj1WYyxkPXYubGVuZ3RoO2QtLTspaWYoaT12W2Rd%0ALGkmJmkucHJlcGFyZSgpKWZvcihhPWkuZWRnZXMsYz1hLmxlbmd0aCxvPTA7Yz5v%0AOylzPWFbb10uZW5kKCkscj1zLngsdT1zLnksbD1hWysrbyVjXS5zdGFydCgpLHQ9%0AbC54LGU9bC55LChpYShyLXQpPkVhfHxpYSh1LWUpPkVhKSYmKGEuc3BsaWNlKG8s%0AMCxuZXcgSnIoQnIoaS5zaXRlLHMsaWEoci1mKTxFYSYmcC11PkVhP3t4OmYseTpp%0AYSh0LWYpPEVhP2U6cH06aWEodS1wKTxFYSYmaC1yPkVhP3t4OmlhKGUtcCk8RWE/%0AdDpoLHk6cH06aWEoci1oKTxFYSYmdS1nPkVhP3t4OmgseTppYSh0LWgpPEVhP2U6%0AZ306aWEodS1nKTxFYSYmci1mPkVhP3t4OmlhKGUtZyk8RWE/dDpmLHk6Z306bnVs%0AbCksaS5zaXRlLG51bGwpKSwrK2MpfWZ1bmN0aW9uIEZyKG4sdCl7cmV0dXJuIHQu%0AYW5nbGUtbi5hbmdsZX1mdW5jdGlvbiBPcigpe0tyKHRoaXMpLHRoaXMueD10aGlz%0ALnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBZcihu%0AKXt2YXIgdD1uLlAsZT1uLk47aWYodCYmZSl7dmFyIHI9dC5zaXRlLHU9bi5zaXRl%0ALGk9ZS5zaXRlO2lmKHIhPT1pKXt2YXIgbz11LngsYT11LnksYz1yLngtbyxsPXIu%0AeS1hLHM9aS54LW8sZj1pLnktYSxoPTIqKGMqZi1sKnMpO2lmKCEoaD49LUFhKSl7%0AdmFyIGc9YypjK2wqbCxwPXMqcytmKmYsdj0oZipnLWwqcCkvaCxkPShjKnAtcypn%0AKS9oLGY9ZCthLG09SmMucG9wKCl8fG5ldyBPcjttLmFyYz1uLG0uc2l0ZT11LG0u%0AeD12K28sbS55PWYrTWF0aC5zcXJ0KHYqditkKmQpLG0uY3k9ZixuLmNpcmNsZT1t%0AO2Zvcih2YXIgeT1udWxsLHg9QmMuXzt4OylpZihtLnk8eC55fHxtLnk9PT14Lnkm%0AJm0ueDw9eC54KXtpZigheC5MKXt5PXguUDticmVha314PXguTH1lbHNle2lmKCF4%0ALlIpe3k9eDticmVha314PXguUn1CYy5pbnNlcnQoeSxtKSx5fHwoJGM9bSl9fX19%0AZnVuY3Rpb24gSXIobil7dmFyIHQ9bi5jaXJjbGU7dCYmKHQuUHx8KCRjPXQuTiks%0AQmMucmVtb3ZlKHQpLEpjLnB1c2godCksS3IodCksbi5jaXJjbGU9bnVsbCl9ZnVu%0AY3Rpb24gWnIobil7Zm9yKHZhciB0LGU9WmMscj1VZShuWzBdWzBdLG5bMF1bMV0s%0AblsxXVswXSxuWzFdWzFdKSx1PWUubGVuZ3RoO3UtLTspdD1lW3VdLCghVnIodCxu%0AKXx8IXIodCl8fGlhKHQuYS54LXQuYi54KTxFYSYmaWEodC5hLnktdC5iLnkpPEVh%0AKSYmKHQuYT10LmI9bnVsbCxlLnNwbGljZSh1LDEpKX1mdW5jdGlvbiBWcihuLHQp%0Ae3ZhciBlPW4uYjtpZihlKXJldHVybiEwO3ZhciByLHUsaT1uLmEsbz10WzBdWzBd%0ALGE9dFsxXVswXSxjPXRbMF1bMV0sbD10WzFdWzFdLHM9bi5sLGY9bi5yLGg9cy54%0ALGc9cy55LHA9Zi54LHY9Zi55LGQ9KGgrcCkvMixtPShnK3YpLzI7aWYodj09PWcp%0Ae2lmKG8+ZHx8ZD49YSlyZXR1cm47aWYoaD5wKXtpZihpKXtpZihpLnk+PWwpcmV0%0AdXJufWVsc2UgaT17eDpkLHk6Y307ZT17eDpkLHk6bH19ZWxzZXtpZihpKXtpZihp%0ALnk8YylyZXR1cm59ZWxzZSBpPXt4OmQseTpsfTtlPXt4OmQseTpjfX19ZWxzZSBp%0AZihyPShoLXApLyh2LWcpLHU9bS1yKmQsLTE+cnx8cj4xKWlmKGg+cCl7aWYoaSl7%0AaWYoaS55Pj1sKXJldHVybn1lbHNlIGk9e3g6KGMtdSkvcix5OmN9O2U9e3g6KGwt%0AdSkvcix5Omx9fWVsc2V7aWYoaSl7aWYoaS55PGMpcmV0dXJufWVsc2UgaT17eDoo%0AbC11KS9yLHk6bH07ZT17eDooYy11KS9yLHk6Y319ZWxzZSBpZih2Pmcpe2lmKGkp%0Ae2lmKGkueD49YSlyZXR1cm59ZWxzZSBpPXt4Om8seTpyKm8rdX07ZT17eDphLHk6%0AciphK3V9fWVsc2V7aWYoaSl7aWYoaS54PG8pcmV0dXJufWVsc2UgaT17eDphLHk6%0AciphK3V9O2U9e3g6byx5OnIqbyt1fX1yZXR1cm4gbi5hPWksbi5iPWUsITB9ZnVu%0AY3Rpb24gWHIobix0KXt0aGlzLmw9bix0aGlzLnI9dCx0aGlzLmE9dGhpcy5iPW51%0AbGx9ZnVuY3Rpb24gJHIobix0LGUscil7dmFyIHU9bmV3IFhyKG4sdCk7cmV0dXJu%0AIFpjLnB1c2godSksZSYmV3IodSxuLHQsZSksciYmV3IodSx0LG4sciksVmNbbi5p%0AXS5lZGdlcy5wdXNoKG5ldyBKcih1LG4sdCkpLFZjW3QuaV0uZWRnZXMucHVzaChu%0AZXcgSnIodSx0LG4pKSx1fWZ1bmN0aW9uIEJyKG4sdCxlKXt2YXIgcj1uZXcgWHIo%0AbixudWxsKTtyZXR1cm4gci5hPXQsci5iPWUsWmMucHVzaChyKSxyfWZ1bmN0aW9u%0AIFdyKG4sdCxlLHIpe24uYXx8bi5iP24ubD09PWU/bi5iPXI6bi5hPXI6KG4uYT1y%0ALG4ubD10LG4ucj1lKX1mdW5jdGlvbiBKcihuLHQsZSl7dmFyIHI9bi5hLHU9bi5i%0AO3RoaXMuZWRnZT1uLHRoaXMuc2l0ZT10LHRoaXMuYW5nbGU9ZT9NYXRoLmF0YW4y%0AKGUueS10LnksZS54LXQueCk6bi5sPT09dD9NYXRoLmF0YW4yKHUueC1yLngsci55%0ALXUueSk6TWF0aC5hdGFuMihyLngtdS54LHUueS1yLnkpfWZ1bmN0aW9uIEdyKCl7%0AdGhpcy5fPW51bGx9ZnVuY3Rpb24gS3Iobil7bi5VPW4uQz1uLkw9bi5SPW4uUD1u%0ALk49bnVsbH1mdW5jdGlvbiBRcihuLHQpe3ZhciBlPXQscj10LlIsdT1lLlU7dT91%0ALkw9PT1lP3UuTD1yOnUuUj1yOm4uXz1yLHIuVT11LGUuVT1yLGUuUj1yLkwsZS5S%0AJiYoZS5SLlU9ZSksci5MPWV9ZnVuY3Rpb24gbnUobix0KXt2YXIgZT10LHI9dC5M%0ALHU9ZS5VO3U/dS5MPT09ZT91Lkw9cjp1LlI9cjpuLl89cixyLlU9dSxlLlU9cixl%0ALkw9ci5SLGUuTCYmKGUuTC5VPWUpLHIuUj1lfWZ1bmN0aW9uIHR1KG4pe2Zvcig7%0Abi5MOyluPW4uTDtyZXR1cm4gbn1mdW5jdGlvbiBldShuLHQpe3ZhciBlLHIsdSxp%0APW4uc29ydChydSkucG9wKCk7Zm9yKFpjPVtdLFZjPW5ldyBBcnJheShuLmxlbmd0%0AaCksWGM9bmV3IEdyLEJjPW5ldyBHcjs7KWlmKHU9JGMsaSYmKCF1fHxpLnk8dS55%0AfHxpLnk9PT11LnkmJmkueDx1LngpKShpLnghPT1lfHxpLnkhPT1yKSYmKFZjW2ku%0AaV09bmV3IGpyKGkpLERyKGkpLGU9aS54LHI9aS55KSxpPW4ucG9wKCk7ZWxzZXtp%0AZighdSlicmVhaztScih1LmFyYyl9dCYmKFpyKHQpLEhyKHQpKTt2YXIgbz17Y2Vs%0AbHM6VmMsZWRnZXM6WmN9O3JldHVybiBYYz1CYz1aYz1WYz1udWxsLG99ZnVuY3Rp%0Ab24gcnUobix0KXtyZXR1cm4gdC55LW4ueXx8dC54LW4ueH1mdW5jdGlvbiB1dShu%0ALHQsZSl7cmV0dXJuKG4ueC1lLngpKih0Lnktbi55KS0obi54LXQueCkqKGUueS1u%0ALnkpfWZ1bmN0aW9uIGl1KG4pe3JldHVybiBuLnh9ZnVuY3Rpb24gb3Uobil7cmV0%0AdXJuIG4ueX1mdW5jdGlvbiBhdSgpe3JldHVybntsZWFmOiEwLG5vZGVzOltdLHBv%0AaW50Om51bGwseDpudWxsLHk6bnVsbH19ZnVuY3Rpb24gY3Uobix0LGUscix1LGkp%0Ae2lmKCFuKHQsZSxyLHUsaSkpe3ZhciBvPS41KihlK3UpLGE9LjUqKHIraSksYz10%0ALm5vZGVzO2NbMF0mJmN1KG4sY1swXSxlLHIsbyxhKSxjWzFdJiZjdShuLGNbMV0s%0AbyxyLHUsYSksY1syXSYmY3UobixjWzJdLGUsYSxvLGkpLGNbM10mJmN1KG4sY1sz%0AXSxvLGEsdSxpKX19ZnVuY3Rpb24gbHUobix0KXtuPVZvLnJnYihuKSx0PVZvLnJn%0AYih0KTt2YXIgZT1uLnIscj1uLmcsdT1uLmIsaT10LnItZSxvPXQuZy1yLGE9dC5i%0ALXU7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiIjIitkdChNYXRoLnJvdW5kKGUr%0AaSpuKSkrZHQoTWF0aC5yb3VuZChyK28qbikpK2R0KE1hdGgucm91bmQodSthKm4p%0AKX19ZnVuY3Rpb24gc3Uobix0KXt2YXIgZSxyPXt9LHU9e307Zm9yKGUgaW4gbill%0AIGluIHQ/cltlXT1ndShuW2VdLHRbZV0pOnVbZV09bltlXTtmb3IoZSBpbiB0KWUg%0AaW4gbnx8KHVbZV09dFtlXSk7cmV0dXJuIGZ1bmN0aW9uKG4pe2ZvcihlIGluIHIp%0AdVtlXT1yW2VdKG4pO3JldHVybiB1fX1mdW5jdGlvbiBmdShuLHQpe3JldHVybiB0%0ALT1uPStuLGZ1bmN0aW9uKGUpe3JldHVybiBuK3QqZX19ZnVuY3Rpb24gaHUobix0%0AKXt2YXIgZSxyLHUsaT1LYy5sYXN0SW5kZXg9UWMubGFzdEluZGV4PTAsbz0tMSxh%0APVtdLGM9W107Zm9yKG4rPSIiLHQrPSIiOyhlPUtjLmV4ZWMobikpJiYocj1RYy5l%0AeGVjKHQpKTspKHU9ci5pbmRleCk+aSYmKHU9dC5zbGljZShpLHUpLGFbb10/YVtv%0AXSs9dTphWysrb109dSksKGU9ZVswXSk9PT0ocj1yWzBdKT9hW29dP2Fbb10rPXI6%0AYVsrK29dPXI6KGFbKytvXT1udWxsLGMucHVzaCh7aTpvLHg6ZnUoZSxyKX0pKSxp%0APVFjLmxhc3RJbmRleDtyZXR1cm4gaTx0Lmxlbmd0aCYmKHU9dC5zbGljZShpKSxh%0AW29dP2Fbb10rPXU6YVsrK29dPXUpLGEubGVuZ3RoPDI/Y1swXT8odD1jWzBdLngs%0AZnVuY3Rpb24obil7cmV0dXJuIHQobikrIiJ9KTpmdW5jdGlvbigpe3JldHVybiB0%0AfToodD1jLmxlbmd0aCxmdW5jdGlvbihuKXtmb3IodmFyIGUscj0wO3Q+cjsrK3Ip%0AYVsoZT1jW3JdKS5pXT1lLngobik7cmV0dXJuIGEuam9pbigiIil9KX1mdW5jdGlv%0AbiBndShuLHQpe2Zvcih2YXIgZSxyPVZvLmludGVycG9sYXRvcnMubGVuZ3RoOy0t%0Acj49MCYmIShlPVZvLmludGVycG9sYXRvcnNbcl0obix0KSk7KTtyZXR1cm4gZX1m%0AdW5jdGlvbiBwdShuLHQpe3ZhciBlLHI9W10sdT1bXSxpPW4ubGVuZ3RoLG89dC5s%0AZW5ndGgsYT1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0aCk7Zm9yKGU9MDthPmU7%0AKytlKXIucHVzaChndShuW2VdLHRbZV0pKTtmb3IoO2k+ZTsrK2UpdVtlXT1uW2Vd%0AO2Zvcig7bz5lOysrZSl1W2VdPXRbZV07cmV0dXJuIGZ1bmN0aW9uKG4pe2Zvcihl%0APTA7YT5lOysrZSl1W2VdPXJbZV0obik7cmV0dXJuIHV9fWZ1bmN0aW9uIHZ1KG4p%0Ae3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMD49dD8wOnQ+PTE/MTpuKHQpfX1m%0AdW5jdGlvbiBkdShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDEtbigxLXQp%0AfX1mdW5jdGlvbiBtdShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLjUqKC41%0APnQ/bigyKnQpOjItbigyLTIqdCkpfX1mdW5jdGlvbiB5dShuKXtyZXR1cm4gbipu%0AfWZ1bmN0aW9uIHh1KG4pe3JldHVybiBuKm4qbn1mdW5jdGlvbiBNdShuKXtpZigw%0APj1uKXJldHVybiAwO2lmKG4+PTEpcmV0dXJuIDE7dmFyIHQ9bipuLGU9dCpuO3Jl%0AdHVybiA0KiguNT5uP2U6Myoobi10KStlLS43NSl9ZnVuY3Rpb24gX3Uobil7cmV0%0AdXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LG4pfX1mdW5jdGlvbiBi%0AdShuKXtyZXR1cm4gMS1NYXRoLmNvcyhuKmthKX1mdW5jdGlvbiB3dShuKXtyZXR1%0Acm4gTWF0aC5wb3coMiwxMCoobi0xKSl9ZnVuY3Rpb24gU3Uobil7cmV0dXJuIDEt%0ATWF0aC5zcXJ0KDEtbipuKX1mdW5jdGlvbiBrdShuLHQpe3ZhciBlO3JldHVybiBh%0Acmd1bWVudHMubGVuZ3RoPDImJih0PS40NSksYXJndW1lbnRzLmxlbmd0aD9lPXQv%0AU2EqTWF0aC5hc2luKDEvbik6KG49MSxlPXQvNCksZnVuY3Rpb24ocil7cmV0dXJu%0AIDErbipNYXRoLnBvdygyLC0xMCpyKSpNYXRoLnNpbigoci1lKSpTYS90KX19ZnVu%0AY3Rpb24gRXUobil7cmV0dXJuIG58fChuPTEuNzAxNTgpLGZ1bmN0aW9uKHQpe3Jl%0AdHVybiB0KnQqKChuKzEpKnQtbil9fWZ1bmN0aW9uIEF1KG4pe3JldHVybiAxLzIu%0ANzU+bj83LjU2MjUqbipuOjIvMi43NT5uPzcuNTYyNSoobi09MS41LzIuNzUpKm4r%0ALjc1OjIuNS8yLjc1Pm4/Ny41NjI1KihuLT0yLjI1LzIuNzUpKm4rLjkzNzU6Ny41%0ANjI1KihuLT0yLjYyNS8yLjc1KSpuKy45ODQzNzV9ZnVuY3Rpb24gQ3Uobix0KXtu%0APVZvLmhjbChuKSx0PVZvLmhjbCh0KTt2YXIgZT1uLmgscj1uLmMsdT1uLmwsaT10%0ALmgtZSxvPXQuYy1yLGE9dC5sLXU7cmV0dXJuIGlzTmFOKG8pJiYobz0wLHI9aXNO%0AYU4ocik/dC5jOnIpLGlzTmFOKGkpPyhpPTAsZT1pc05hTihlKT90Lmg6ZSk6aT4x%0AODA/aS09MzYwOi0xODA+aSYmKGkrPTM2MCksZnVuY3Rpb24obil7cmV0dXJuIG90%0AKGUraSpuLHIrbypuLHUrYSpuKSsiIn19ZnVuY3Rpb24gTnUobix0KXtuPVZvLmhz%0AbChuKSx0PVZvLmhzbCh0KTt2YXIgZT1uLmgscj1uLnMsdT1uLmwsaT10LmgtZSxv%0APXQucy1yLGE9dC5sLXU7cmV0dXJuIGlzTmFOKG8pJiYobz0wLHI9aXNOYU4ocik/%0AdC5zOnIpLGlzTmFOKGkpPyhpPTAsZT1pc05hTihlKT90Lmg6ZSk6aT4xODA/aS09%0AMzYwOi0xODA+aSYmKGkrPTM2MCksZnVuY3Rpb24obil7cmV0dXJuIHV0KGUraSpu%0ALHIrbypuLHUrYSpuKSsiIn19ZnVuY3Rpb24genUobix0KXtuPVZvLmxhYihuKSx0%0APVZvLmxhYih0KTt2YXIgZT1uLmwscj1uLmEsdT1uLmIsaT10LmwtZSxvPXQuYS1y%0ALGE9dC5iLXU7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBjdChlK2kqbixyK28q%0Abix1K2EqbikrIiJ9fWZ1bmN0aW9uIEx1KG4sdCl7cmV0dXJuIHQtPW4sZnVuY3Rp%0Ab24oZSl7cmV0dXJuIE1hdGgucm91bmQobit0KmUpfX1mdW5jdGlvbiBUdShuKXt2%0AYXIgdD1bbi5hLG4uYl0sZT1bbi5jLG4uZF0scj1SdSh0KSx1PXF1KHQsZSksaT1S%0AdShEdShlLHQsLXUpKXx8MDt0WzBdKmVbMV08ZVswXSp0WzFdJiYodFswXSo9LTEs%0AdFsxXSo9LTEscio9LTEsdSo9LTEpLHRoaXMucm90YXRlPShyP01hdGguYXRhbjIo%0AdFsxXSx0WzBdKTpNYXRoLmF0YW4yKC1lWzBdLGVbMV0pKSpOYSx0aGlzLnRyYW5z%0AbGF0ZT1bbi5lLG4uZl0sdGhpcy5zY2FsZT1bcixpXSx0aGlzLnNrZXc9aT9NYXRo%0ALmF0YW4yKHUsaSkqTmE6MH1mdW5jdGlvbiBxdShuLHQpe3JldHVybiBuWzBdKnRb%0AMF0rblsxXSp0WzFdfWZ1bmN0aW9uIFJ1KG4pe3ZhciB0PU1hdGguc3FydChxdShu%0ALG4pKTtyZXR1cm4gdCYmKG5bMF0vPXQsblsxXS89dCksdH1mdW5jdGlvbiBEdShu%0ALHQsZSl7cmV0dXJuIG5bMF0rPWUqdFswXSxuWzFdKz1lKnRbMV0sbn1mdW5jdGlv%0AbiBQdShuLHQpe3ZhciBlLHI9W10sdT1bXSxpPVZvLnRyYW5zZm9ybShuKSxvPVZv%0ALnRyYW5zZm9ybSh0KSxhPWkudHJhbnNsYXRlLGM9by50cmFuc2xhdGUsbD1pLnJv%0AdGF0ZSxzPW8ucm90YXRlLGY9aS5za2V3LGg9by5za2V3LGc9aS5zY2FsZSxwPW8u%0Ac2NhbGU7cmV0dXJuIGFbMF0hPWNbMF18fGFbMV0hPWNbMV0/KHIucHVzaCgidHJh%0AbnNsYXRlKCIsbnVsbCwiLCIsbnVsbCwiKSIpLHUucHVzaCh7aToxLHg6ZnUoYVsw%0AXSxjWzBdKX0se2k6Myx4OmZ1KGFbMV0sY1sxXSl9KSk6Y1swXXx8Y1sxXT9yLnB1%0Ac2goInRyYW5zbGF0ZSgiK2MrIikiKTpyLnB1c2goIiIpLGwhPXM/KGwtcz4xODA/%0Acys9MzYwOnMtbD4xODAmJihsKz0zNjApLHUucHVzaCh7aTpyLnB1c2goci5wb3Ao%0AKSsicm90YXRlKCIsbnVsbCwiKSIpLTIseDpmdShsLHMpfSkpOnMmJnIucHVzaChy%0ALnBvcCgpKyJyb3RhdGUoIitzKyIpIiksZiE9aD91LnB1c2goe2k6ci5wdXNoKHIu%0AcG9wKCkrInNrZXdYKCIsbnVsbCwiKSIpLTIseDpmdShmLGgpfSk6aCYmci5wdXNo%0AKHIucG9wKCkrInNrZXdYKCIraCsiKSIpLGdbMF0hPXBbMF18fGdbMV0hPXBbMV0/%0AKGU9ci5wdXNoKHIucG9wKCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpLHUu%0AcHVzaCh7aTplLTQseDpmdShnWzBdLHBbMF0pfSx7aTplLTIseDpmdShnWzFdLHBb%0AMV0pfSkpOigxIT1wWzBdfHwxIT1wWzFdKSYmci5wdXNoKHIucG9wKCkrInNjYWxl%0AKCIrcCsiKSIpLGU9dS5sZW5ndGgsZnVuY3Rpb24obil7Zm9yKHZhciB0LGk9LTE7%0AKytpPGU7KXJbKHQ9dVtpXSkuaV09dC54KG4pO3JldHVybiByLmpvaW4oIiIpfX1m%0AdW5jdGlvbiBVdShuLHQpe3JldHVybiB0PXQtKG49K24pPzEvKHQtbik6MCxmdW5j%0AdGlvbihlKXtyZXR1cm4oZS1uKSp0fX1mdW5jdGlvbiBqdShuLHQpe3JldHVybiB0%0APXQtKG49K24pPzEvKHQtbik6MCxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgo%0AMCxNYXRoLm1pbigxLChlLW4pKnQpKX19ZnVuY3Rpb24gSHUobil7Zm9yKHZhciB0%0APW4uc291cmNlLGU9bi50YXJnZXQscj1PdSh0LGUpLHU9W3RdO3QhPT1yOyl0PXQu%0AcGFyZW50LHUucHVzaCh0KTtmb3IodmFyIGk9dS5sZW5ndGg7ZSE9PXI7KXUuc3Bs%0AaWNlKGksMCxlKSxlPWUucGFyZW50O3JldHVybiB1fWZ1bmN0aW9uIEZ1KG4pe2Zv%0Acih2YXIgdD1bXSxlPW4ucGFyZW50O251bGwhPWU7KXQucHVzaChuKSxuPWUsZT1l%0ALnBhcmVudDtyZXR1cm4gdC5wdXNoKG4pLHR9ZnVuY3Rpb24gT3Uobix0KXtpZihu%0APT09dClyZXR1cm4gbjtmb3IodmFyIGU9RnUobikscj1GdSh0KSx1PWUucG9wKCks%0AaT1yLnBvcCgpLG89bnVsbDt1PT09aTspbz11LHU9ZS5wb3AoKSxpPXIucG9wKCk7%0AcmV0dXJuIG99ZnVuY3Rpb24gWXUobil7bi5maXhlZHw9Mn1mdW5jdGlvbiBJdShu%0AKXtuLmZpeGVkJj0tN31mdW5jdGlvbiBadShuKXtuLmZpeGVkfD00LG4ucHg9bi54%0ALG4ucHk9bi55fWZ1bmN0aW9uIFZ1KG4pe24uZml4ZWQmPS01fWZ1bmN0aW9uIFh1%0AKG4sdCxlKXt2YXIgcj0wLHU9MDtpZihuLmNoYXJnZT0wLCFuLmxlYWYpZm9yKHZh%0AciBpLG89bi5ub2RlcyxhPW8ubGVuZ3RoLGM9LTE7KytjPGE7KWk9b1tjXSxudWxs%0AIT1pJiYoWHUoaSx0LGUpLG4uY2hhcmdlKz1pLmNoYXJnZSxyKz1pLmNoYXJnZSpp%0ALmN4LHUrPWkuY2hhcmdlKmkuY3kpO2lmKG4ucG9pbnQpe24ubGVhZnx8KG4ucG9p%0AbnQueCs9TWF0aC5yYW5kb20oKS0uNSxuLnBvaW50LnkrPU1hdGgucmFuZG9tKCkt%0ALjUpO3ZhciBsPXQqZVtuLnBvaW50LmluZGV4XTtuLmNoYXJnZSs9bi5wb2ludENo%0AYXJnZT1sLHIrPWwqbi5wb2ludC54LHUrPWwqbi5wb2ludC55fW4uY3g9ci9uLmNo%0AYXJnZSxuLmN5PXUvbi5jaGFyZ2V9ZnVuY3Rpb24gJHUobix0KXtyZXR1cm4gVm8u%0AcmViaW5kKG4sdCwic29ydCIsImNoaWxkcmVuIiwidmFsdWUiKSxuLm5vZGVzPW4s%0Abi5saW5rcz1RdSxufWZ1bmN0aW9uIEJ1KG4sdCl7Zm9yKHZhciBlPVtuXTtudWxs%0AIT0obj1lLnBvcCgpKTspaWYodChuKSwodT1uLmNoaWxkcmVuKSYmKHI9dS5sZW5n%0AdGgpKWZvcih2YXIgcix1Oy0tcj49MDspZS5wdXNoKHVbcl0pfWZ1bmN0aW9uIFd1%0AKG4sdCl7Zm9yKHZhciBlPVtuXSxyPVtdO251bGwhPShuPWUucG9wKCkpOylpZihy%0ALnB1c2gobiksKGk9bi5jaGlsZHJlbikmJih1PWkubGVuZ3RoKSlmb3IodmFyIHUs%0AaSxvPS0xOysrbzx1OyllLnB1c2goaVtvXSk7Zm9yKDtudWxsIT0obj1yLnBvcCgp%0AKTspdChuKX1mdW5jdGlvbiBKdShuKXtyZXR1cm4gbi5jaGlsZHJlbn1mdW5jdGlv%0AbiBHdShuKXtyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBLdShuLHQpe3JldHVybiB0%0ALnZhbHVlLW4udmFsdWV9ZnVuY3Rpb24gUXUobil7cmV0dXJuIFZvLm1lcmdlKG4u%0AbWFwKGZ1bmN0aW9uKG4pe3JldHVybihuLmNoaWxkcmVufHxbXSkubWFwKGZ1bmN0%0AaW9uKHQpe3JldHVybntzb3VyY2U6bix0YXJnZXQ6dH19KX0pKX1mdW5jdGlvbiBu%0AaShuKXtyZXR1cm4gbi54fWZ1bmN0aW9uIHRpKG4pe3JldHVybiBuLnl9ZnVuY3Rp%0Ab24gZWkobix0LGUpe24ueTA9dCxuLnk9ZX1mdW5jdGlvbiByaShuKXtyZXR1cm4g%0AVm8ucmFuZ2Uobi5sZW5ndGgpfWZ1bmN0aW9uIHVpKG4pe2Zvcih2YXIgdD0tMSxl%0APW5bMF0ubGVuZ3RoLHI9W107Kyt0PGU7KXJbdF09MDtyZXR1cm4gcn1mdW5jdGlv%0AbiBpaShuKXtmb3IodmFyIHQsZT0xLHI9MCx1PW5bMF1bMV0saT1uLmxlbmd0aDtp%0APmU7KytlKSh0PW5bZV1bMV0pPnUmJihyPWUsdT10KTtyZXR1cm4gcn1mdW5jdGlv%0AbiBvaShuKXtyZXR1cm4gbi5yZWR1Y2UoYWksMCl9ZnVuY3Rpb24gYWkobix0KXty%0AZXR1cm4gbit0WzFdfWZ1bmN0aW9uIGNpKG4sdCl7cmV0dXJuIGxpKG4sTWF0aC5j%0AZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMisxKSl9ZnVuY3Rpb24gbGko%0Abix0KXtmb3IodmFyIGU9LTEscj0rblswXSx1PShuWzFdLXIpL3QsaT1bXTsrK2U8%0APXQ7KWlbZV09dSplK3I7cmV0dXJuIGl9ZnVuY3Rpb24gc2kobil7cmV0dXJuW1Zv%0ALm1pbihuKSxWby5tYXgobildfWZ1bmN0aW9uIGZpKG4sdCl7cmV0dXJuIG4udmFs%0AdWUtdC52YWx1ZX1mdW5jdGlvbiBoaShuLHQpe3ZhciBlPW4uX3BhY2tfbmV4dDtu%0ALl9wYWNrX25leHQ9dCx0Ll9wYWNrX3ByZXY9bix0Ll9wYWNrX25leHQ9ZSxlLl9w%0AYWNrX3ByZXY9dH1mdW5jdGlvbiBnaShuLHQpe24uX3BhY2tfbmV4dD10LHQuX3Bh%0AY2tfcHJldj1ufWZ1bmN0aW9uIHBpKG4sdCl7dmFyIGU9dC54LW4ueCxyPXQueS1u%0ALnksdT1uLnIrdC5yO3JldHVybi45OTkqdSp1PmUqZStyKnJ9ZnVuY3Rpb24gdmko%0Abil7ZnVuY3Rpb24gdChuKXtzPU1hdGgubWluKG4ueC1uLnIscyksZj1NYXRoLm1h%0AeChuLngrbi5yLGYpLGg9TWF0aC5taW4obi55LW4ucixoKSxnPU1hdGgubWF4KG4u%0AeStuLnIsZyl9aWYoKGU9bi5jaGlsZHJlbikmJihsPWUubGVuZ3RoKSl7dmFyIGUs%0Acix1LGksbyxhLGMsbCxzPTEvMCxmPS0xLzAsaD0xLzAsZz0tMS8wO2lmKGUuZm9y%0ARWFjaChkaSkscj1lWzBdLHIueD0tci5yLHIueT0wLHQociksbD4xJiYodT1lWzFd%0ALHUueD11LnIsdS55PTAsdCh1KSxsPjIpKWZvcihpPWVbMl0seGkocix1LGkpLHQo%0AaSksaGkocixpKSxyLl9wYWNrX3ByZXY9aSxoaShpLHUpLHU9ci5fcGFja19uZXh0%0ALG89MztsPm87bysrKXt4aShyLHUsaT1lW29dKTt2YXIgcD0wLHY9MSxkPTE7Zm9y%0AKGE9dS5fcGFja19uZXh0O2EhPT11O2E9YS5fcGFja19uZXh0LHYrKylpZihwaShh%0ALGkpKXtwPTE7YnJlYWt9aWYoMT09cClmb3IoYz1yLl9wYWNrX3ByZXY7YyE9PWEu%0AX3BhY2tfcHJldiYmIXBpKGMsaSk7Yz1jLl9wYWNrX3ByZXYsZCsrKTtwPyhkPnZ8%0AfHY9PWQmJnUucjxyLnI/Z2kocix1PWEpOmdpKHI9Yyx1KSxvLS0pOihoaShyLGkp%0ALHU9aSx0KGkpKX12YXIgbT0ocytmKS8yLHk9KGgrZykvMix4PTA7Zm9yKG89MDts%0APm87bysrKWk9ZVtvXSxpLngtPW0saS55LT15LHg9TWF0aC5tYXgoeCxpLnIrTWF0%0AaC5zcXJ0KGkueCppLngraS55KmkueSkpO24ucj14LGUuZm9yRWFjaChtaSl9fWZ1%0AbmN0aW9uIGRpKG4pe24uX3BhY2tfbmV4dD1uLl9wYWNrX3ByZXY9bn1mdW5jdGlv%0AbiBtaShuKXtkZWxldGUgbi5fcGFja19uZXh0LGRlbGV0ZSBuLl9wYWNrX3ByZXZ9%0AZnVuY3Rpb24geWkobix0LGUscil7dmFyIHU9bi5jaGlsZHJlbjtpZihuLng9dCs9%0AcipuLngsbi55PWUrPXIqbi55LG4ucio9cix1KWZvcih2YXIgaT0tMSxvPXUubGVu%0AZ3RoOysraTxvOyl5aSh1W2ldLHQsZSxyKX1mdW5jdGlvbiB4aShuLHQsZSl7dmFy%0AIHI9bi5yK2Uucix1PXQueC1uLngsaT10Lnktbi55O2lmKHImJih1fHxpKSl7dmFy%0AIG89dC5yK2UucixhPXUqdStpKmk7byo9byxyKj1yO3ZhciBjPS41KyhyLW8pLygy%0AKmEpLGw9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihyK2EpLShyLT1hKSpyLW8q%0AbykpLygyKmEpO2UueD1uLngrYyp1K2wqaSxlLnk9bi55K2MqaS1sKnV9ZWxzZSBl%0ALng9bi54K3IsZS55PW4ueX1mdW5jdGlvbiBNaShuLHQpe3JldHVybiBuLnBhcmVu%0AdD09dC5wYXJlbnQ/MToyfWZ1bmN0aW9uIF9pKG4pe3ZhciB0PW4uY2hpbGRyZW47%0AcmV0dXJuIHQubGVuZ3RoP3RbMF06bi50fWZ1bmN0aW9uIGJpKG4pe3ZhciB0LGU9%0Abi5jaGlsZHJlbjtyZXR1cm4odD1lLmxlbmd0aCk/ZVt0LTFdOm4udH1mdW5jdGlv%0AbiB3aShuLHQsZSl7dmFyIHI9ZS8odC5pLW4uaSk7dC5jLT1yLHQucys9ZSxuLmMr%0APXIsdC56Kz1lLHQubSs9ZX1mdW5jdGlvbiBTaShuKXtmb3IodmFyIHQsZT0wLHI9%0AMCx1PW4uY2hpbGRyZW4saT11Lmxlbmd0aDstLWk+PTA7KXQ9dVtpXSx0LnorPWUs%0AdC5tKz1lLGUrPXQucysocis9dC5jKX1mdW5jdGlvbiBraShuLHQsZSl7cmV0dXJu%0AIG4uYS5wYXJlbnQ9PT10LnBhcmVudD9uLmE6ZX1mdW5jdGlvbiBFaShuKXtyZXR1%0Acm4gMStWby5tYXgobixmdW5jdGlvbihuKXtyZXR1cm4gbi55fSl9ZnVuY3Rpb24g%0AQWkobil7cmV0dXJuIG4ucmVkdWNlKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4rdC54%0AfSwwKS9uLmxlbmd0aH1mdW5jdGlvbiBDaShuKXt2YXIgdD1uLmNoaWxkcmVuO3Jl%0AdHVybiB0JiZ0Lmxlbmd0aD9DaSh0WzBdKTpufWZ1bmN0aW9uIE5pKG4pe3ZhciB0%0ALGU9bi5jaGlsZHJlbjtyZXR1cm4gZSYmKHQ9ZS5sZW5ndGgpP05pKGVbdC0xXSk6%0Abn1mdW5jdGlvbiB6aShuKXtyZXR1cm57eDpuLngseTpuLnksZHg6bi5keCxkeTpu%0ALmR5fX1mdW5jdGlvbiBMaShuLHQpe3ZhciBlPW4ueCt0WzNdLHI9bi55K3RbMF0s%0AdT1uLmR4LXRbMV0tdFszXSxpPW4uZHktdFswXS10WzJdO3JldHVybiAwPnUmJihl%0AKz11LzIsdT0wKSwwPmkmJihyKz1pLzIsaT0wKSx7eDplLHk6cixkeDp1LGR5Oml9%0AfWZ1bmN0aW9uIFRpKG4pe3ZhciB0PW5bMF0sZT1uW24ubGVuZ3RoLTFdO3JldHVy%0AbiBlPnQ/W3QsZV06W2UsdF19ZnVuY3Rpb24gcWkobil7cmV0dXJuIG4ucmFuZ2VF%0AeHRlbnQ/bi5yYW5nZUV4dGVudCgpOlRpKG4ucmFuZ2UoKSl9ZnVuY3Rpb24gUmko%0Abix0LGUscil7dmFyIHU9ZShuWzBdLG5bMV0pLGk9cih0WzBdLHRbMV0pO3JldHVy%0AbiBmdW5jdGlvbihuKXtyZXR1cm4gaSh1KG4pKX19ZnVuY3Rpb24gRGkobix0KXt2%0AYXIgZSxyPTAsdT1uLmxlbmd0aC0xLGk9bltyXSxvPW5bdV07cmV0dXJuIGk+byYm%0AKGU9cixyPXUsdT1lLGU9aSxpPW8sbz1lKSxuW3JdPXQuZmxvb3IoaSksblt1XT10%0ALmNlaWwobyksbn1mdW5jdGlvbiBQaShuKXtyZXR1cm4gbj97Zmxvb3I6ZnVuY3Rp%0Ab24odCl7cmV0dXJuIE1hdGguZmxvb3IodC9uKSpufSxjZWlsOmZ1bmN0aW9uKHQp%0Ae3JldHVybiBNYXRoLmNlaWwodC9uKSpufX06c2x9ZnVuY3Rpb24gVWkobix0LGUs%0Acil7dmFyIHU9W10saT1bXSxvPTAsYT1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0%0AaCktMTtmb3IoblthXTxuWzBdJiYobj1uLnNsaWNlKCkucmV2ZXJzZSgpLHQ9dC5z%0AbGljZSgpLnJldmVyc2UoKSk7KytvPD1hOyl1LnB1c2goZShuW28tMV0sbltvXSkp%0ALGkucHVzaChyKHRbby0xXSx0W29dKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBl%0APVZvLmJpc2VjdChuLHQsMSxhKS0xO3JldHVybiBpW2VdKHVbZV0odCkpfX1mdW5j%0AdGlvbiBqaShuLHQsZSxyKXtmdW5jdGlvbiB1KCl7dmFyIHU9TWF0aC5taW4obi5s%0AZW5ndGgsdC5sZW5ndGgpPjI/VWk6UmksYz1yP2p1OlV1O3JldHVybiBvPXUobix0%0ALGMsZSksYT11KHQsbixjLGd1KSxpfWZ1bmN0aW9uIGkobil7cmV0dXJuIG8obil9%0AdmFyIG8sYTtyZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24obil7cmV0dXJuIGEobil9%0ALGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhu%0APXQubWFwKE51bWJlciksdSgpKTpufSxpLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sdSgpKTp0fSxpLnJhbmdlUm91bmQ9ZnVu%0AY3Rpb24obil7cmV0dXJuIGkucmFuZ2UobikuaW50ZXJwb2xhdGUoTHUpfSxpLmNs%0AYW1wPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sdSgp%0AKTpyfSxpLmludGVycG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu%0AbGVuZ3RoPyhlPW4sdSgpKTplfSxpLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBZ%0AaShuLHQpfSxpLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSWkobix0%0ALGUpfSxpLm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIEZpKG4sdCksdSgpfSxpLmNv%0AcHk9ZnVuY3Rpb24oKXtyZXR1cm4gamkobix0LGUscil9LHUoKX1mdW5jdGlvbiBI%0AaShuLHQpe3JldHVybiBWby5yZWJpbmQobix0LCJyYW5nZSIsInJhbmdlUm91bmQi%0ALCJpbnRlcnBvbGF0ZSIsImNsYW1wIil9ZnVuY3Rpb24gRmkobix0KXtyZXR1cm4g%0ARGkobixQaShPaShuLHQpWzJdKSl9ZnVuY3Rpb24gT2kobix0KXtudWxsPT10JiYo%0AdD0xMCk7dmFyIGU9VGkobikscj1lWzFdLWVbMF0sdT1NYXRoLnBvdygxMCxNYXRo%0ALmZsb29yKE1hdGgubG9nKHIvdCkvTWF0aC5MTjEwKSksaT10L3IqdTtyZXR1cm4u%0AMTU+PWk/dSo9MTA6LjM1Pj1pP3UqPTU6Ljc1Pj1pJiYodSo9MiksZVswXT1NYXRo%0ALmNlaWwoZVswXS91KSp1LGVbMV09TWF0aC5mbG9vcihlWzFdL3UpKnUrLjUqdSxl%0AWzJdPXUsZX1mdW5jdGlvbiBZaShuLHQpe3JldHVybiBWby5yYW5nZS5hcHBseShW%0AbyxPaShuLHQpKX1mdW5jdGlvbiBJaShuLHQsZSl7dmFyIHI9T2kobix0KTtpZihl%0AKXt2YXIgdT1LYS5leGVjKGUpO2lmKHUuc2hpZnQoKSwicyI9PT11WzhdKXt2YXIg%0AaT1Wby5mb3JtYXRQcmVmaXgoTWF0aC5tYXgoaWEoclswXSksaWEoclsxXSkpKTty%0AZXR1cm4gdVs3XXx8KHVbN109Ii4iK1ppKGkuc2NhbGUoclsyXSkpKSx1WzhdPSJm%0AIixlPVZvLmZvcm1hdCh1LmpvaW4oIiIpKSxmdW5jdGlvbihuKXtyZXR1cm4gZShp%0ALnNjYWxlKG4pKStpLnN5bWJvbH19dVs3XXx8KHVbN109Ii4iK1ZpKHVbOF0scikp%0ALGU9dS5qb2luKCIiKX1lbHNlIGU9IiwuIitaaShyWzJdKSsiZiI7cmV0dXJuIFZv%0ALmZvcm1hdChlKX1mdW5jdGlvbiBaaShuKXtyZXR1cm4tTWF0aC5mbG9vcihNYXRo%0ALmxvZyhuKS9NYXRoLkxOMTArLjAxKX1mdW5jdGlvbiBWaShuLHQpe3ZhciBlPVpp%0AKHRbMl0pO3JldHVybiBuIGluIGZsP01hdGguYWJzKGUtWmkoTWF0aC5tYXgoaWEo%0AdFswXSksaWEodFsxXSkpKSkrICsoImUiIT09bik6ZS0yKigiJSI9PT1uKX1mdW5j%0AdGlvbiBYaShuLHQsZSxyKXtmdW5jdGlvbiB1KG4pe3JldHVybihlP01hdGgubG9n%0AKDA+bj8wOm4pOi1NYXRoLmxvZyhuPjA/MDotbikpL01hdGgubG9nKHQpfWZ1bmN0%0AaW9uIGkobil7cmV0dXJuIGU/TWF0aC5wb3codCxuKTotTWF0aC5wb3codCwtbil9%0AZnVuY3Rpb24gbyh0KXtyZXR1cm4gbih1KHQpKX1yZXR1cm4gby5pbnZlcnQ9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGkobi5pbnZlcnQodCkpfSxvLmRvbWFpbj1mdW5jdGlv%0Abih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10WzBdPj0wLG4uZG9tYWlu%0AKChyPXQubWFwKE51bWJlcikpLm1hcCh1KSksbyk6cn0sby5iYXNlPWZ1bmN0aW9u%0AKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlLG4uZG9tYWluKHIubWFw%0AKHUpKSxvKTp0fSxvLm5pY2U9ZnVuY3Rpb24oKXt2YXIgdD1EaShyLm1hcCh1KSxl%0AP01hdGg6Z2wpO3JldHVybiBuLmRvbWFpbih0KSxyPXQubWFwKGkpLG99LG8udGlj%0Aa3M9ZnVuY3Rpb24oKXt2YXIgbj1UaShyKSxvPVtdLGE9blswXSxjPW5bMV0sbD1N%0AYXRoLmZsb29yKHUoYSkpLHM9TWF0aC5jZWlsKHUoYykpLGY9dCUxPzI6dDtpZihp%0Ac0Zpbml0ZShzLWwpKXtpZihlKXtmb3IoO3M+bDtsKyspZm9yKHZhciBoPTE7Zj5o%0AO2grKylvLnB1c2goaShsKSpoKTtvLnB1c2goaShsKSl9ZWxzZSBmb3Ioby5wdXNo%0AKGkobCkpO2wrKzxzOylmb3IodmFyIGg9Zi0xO2g+MDtoLS0pby5wdXNoKGkobCkq%0AaCk7Zm9yKGw9MDtvW2xdPGE7bCsrKTtmb3Iocz1vLmxlbmd0aDtvW3MtMV0+Yztz%0ALS0pO289by5zbGljZShsLHMpfXJldHVybiBvfSxvLnRpY2tGb3JtYXQ9ZnVuY3Rp%0Ab24obix0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gaGw7YXJndW1lbnRz%0ALmxlbmd0aDwyP3Q9aGw6ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVZvLmZvcm1h%0AdCh0KSk7dmFyIHIsYT1NYXRoLm1heCguMSxuL28udGlja3MoKS5sZW5ndGgpLGM9%0AZT8ocj0xZS0xMixNYXRoLmNlaWwpOihyPS0xZS0xMixNYXRoLmZsb29yKTtyZXR1%0Acm4gZnVuY3Rpb24obil7cmV0dXJuIG4vaShjKHUobikrcikpPD1hP3Qobik6IiJ9%0AfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gWGkobi5jb3B5KCksdCxlLHIpfSxI%0AaShvLG4pfWZ1bmN0aW9uICRpKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBu%0AKHUodCkpfXZhciB1PUJpKHQpLGk9QmkoMS90KTtyZXR1cm4gci5pbnZlcnQ9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGkobi5pbnZlcnQodCkpfSxyLmRvbWFpbj1mdW5jdGlv%0Abih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obi5kb21haW4oKGU9dC5tYXAo%0ATnVtYmVyKSkubWFwKHUpKSxyKTplfSxyLnRpY2tzPWZ1bmN0aW9uKG4pe3JldHVy%0AbiBZaShlLG4pfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gSWko%0AZSxuLHQpfSxyLm5pY2U9ZnVuY3Rpb24obil7cmV0dXJuIHIuZG9tYWluKEZpKGUs%0AbikpfSxyLmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyh1PUJpKHQ9byksaT1CaSgxL3QpLG4uZG9tYWluKGUubWFwKHUpKSxyKTp0%0AfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gJGkobi5jb3B5KCksdCxlKX0sSGko%0AcixuKX1mdW5jdGlvbiBCaShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDA+%0AdD8tTWF0aC5wb3coLXQsbik6TWF0aC5wb3codCxuKX19ZnVuY3Rpb24gV2kobix0%0AKXtmdW5jdGlvbiBlKGUpe3JldHVybiBpWygodS5nZXQoZSl8fCgicmFuZ2UiPT09%0AdC50P3Uuc2V0KGUsbi5wdXNoKGUpKTowLzApKS0xKSVpLmxlbmd0aF19ZnVuY3Rp%0Ab24gcih0LGUpe3JldHVybiBWby5yYW5nZShuLmxlbmd0aCkubWFwKGZ1bmN0aW9u%0AKG4pe3JldHVybiB0K2Uqbn0pfXZhciB1LGksYTtyZXR1cm4gZS5kb21haW49ZnVu%0AY3Rpb24ocil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG47bj1bXSx1PW5l%0AdyBvO2Zvcih2YXIgaSxhPS0xLGM9ci5sZW5ndGg7KythPGM7KXUuaGFzKGk9clth%0AXSl8fHUuc2V0KGksbi5wdXNoKGkpKTtyZXR1cm4gZVt0LnRdLmFwcGx5KGUsdC5h%0AKX0sZS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o%0AaT1uLGE9MCx0PXt0OiJyYW5nZSIsYTphcmd1bWVudHN9LGUpOml9LGUucmFuZ2VQ%0Ab2ludHM9ZnVuY3Rpb24odSxvKXthcmd1bWVudHMubGVuZ3RoPDImJihvPTApO3Zh%0AciBjPXVbMF0sbD11WzFdLHM9KGwtYykvKE1hdGgubWF4KDEsbi5sZW5ndGgtMSkr%0Abyk7cmV0dXJuIGk9cihuLmxlbmd0aDwyPyhjK2wpLzI6YytzKm8vMixzKSxhPTAs%0AdD17dDoicmFuZ2VQb2ludHMiLGE6YXJndW1lbnRzfSxlfSxlLnJhbmdlQmFuZHM9%0AZnVuY3Rpb24odSxvLGMpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKG89MCksYXJndW1l%0AbnRzLmxlbmd0aDwzJiYoYz1vKTt2YXIgbD11WzFdPHVbMF0scz11W2wtMF0sZj11%0AWzEtbF0saD0oZi1zKS8obi5sZW5ndGgtbysyKmMpO3JldHVybiBpPXIocytoKmMs%0AaCksbCYmaS5yZXZlcnNlKCksYT1oKigxLW8pLHQ9e3Q6InJhbmdlQmFuZHMiLGE6%0AYXJndW1lbnRzfSxlfSxlLnJhbmdlUm91bmRCYW5kcz1mdW5jdGlvbih1LG8sYyl7%0AYXJndW1lbnRzLmxlbmd0aDwyJiYobz0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihj%0APW8pO3ZhciBsPXVbMV08dVswXSxzPXVbbC0wXSxmPXVbMS1sXSxoPU1hdGguZmxv%0Ab3IoKGYtcykvKG4ubGVuZ3RoLW8rMipjKSksZz1mLXMtKG4ubGVuZ3RoLW8pKmg7%0AcmV0dXJuIGk9cihzK01hdGgucm91bmQoZy8yKSxoKSxsJiZpLnJldmVyc2UoKSxh%0APU1hdGgucm91bmQoaCooMS1vKSksdD17dDoicmFuZ2VSb3VuZEJhbmRzIixhOmFy%0AZ3VtZW50c30sZX0sZS5yYW5nZUJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZS5y%0AYW5nZUV4dGVudD1mdW5jdGlvbigpe3JldHVybiBUaSh0LmFbMF0pfSxlLmNvcHk9%0AZnVuY3Rpb24oKXtyZXR1cm4gV2kobix0KX0sZS5kb21haW4obil9ZnVuY3Rpb24g%0ASmkoZSxyKXtmdW5jdGlvbiB1KCl7dmFyIG49MCx0PXIubGVuZ3RoO2ZvcihvPVtd%0AOysrbjx0OylvW24tMV09Vm8ucXVhbnRpbGUoZSxuL3QpO3JldHVybiBpfWZ1bmN0%0AaW9uIGkobil7cmV0dXJuIGlzTmFOKG49K24pP3ZvaWQgMDpyW1ZvLmJpc2VjdChv%0ALG4pXX12YXIgbztyZXR1cm4gaS5kb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIGFy%0AZ3VtZW50cy5sZW5ndGg/KGU9ci5maWx0ZXIodCkuc29ydChuKSx1KCkpOmV9LGku%0AcmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bix1%0AKCkpOnJ9LGkucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGkuaW52ZXJ0%0ARXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBuPXIuaW5kZXhPZihuKSwwPm4/WzAv%0AMCwwLzBdOltuPjA/b1tuLTFdOmVbMF0sbjxvLmxlbmd0aD9vW25dOmVbZS5sZW5n%0AdGgtMV1dfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSmkoZSxyKX0sdSgpfWZ1%0AbmN0aW9uIEdpKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlW01hdGgubWF4%0AKDAsTWF0aC5taW4obyxNYXRoLmZsb29yKGkqKHQtbikpKSldfWZ1bmN0aW9uIHUo%0AKXtyZXR1cm4gaT1lLmxlbmd0aC8odC1uKSxvPWUubGVuZ3RoLTEscn12YXIgaSxv%0AO3JldHVybiByLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl%0Abmd0aD8obj0rZVswXSx0PStlW2UubGVuZ3RoLTFdLHUoKSk6W24sdF19LHIucmFu%0AZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix1KCkp%0AOmV9LHIuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0PWUuaW5kZXhP%0AZih0KSx0PTA+dD8wLzA6dC9pK24sW3QsdCsxL2ldfSxyLmNvcHk9ZnVuY3Rpb24o%0AKXtyZXR1cm4gR2kobix0LGUpfSx1KCl9ZnVuY3Rpb24gS2kobix0KXtmdW5jdGlv%0AbiBlKGUpe3JldHVybiBlPj1lP3RbVm8uYmlzZWN0KG4sZSldOnZvaWQgMH1yZXR1%0Acm4gZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/%0AKG49dCxlKTpufSxlLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu%0AbGVuZ3RoPyh0PW4sZSk6dH0sZS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oZSl7cmV0%0AdXJuIGU9dC5pbmRleE9mKGUpLFtuW2UtMV0sbltlXV19LGUuY29weT1mdW5jdGlv%0Abigpe3JldHVybiBLaShuLHQpfSxlfWZ1bmN0aW9uIFFpKG4pe2Z1bmN0aW9uIHQo%0Abil7cmV0dXJuK259cmV0dXJuIHQuaW52ZXJ0PXQsdC5kb21haW49dC5yYW5nZT1m%0AdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLm1hcCh0KSx0%0AKTpufSx0LnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBZaShuLHQpfSx0LnRpY2tG%0Ab3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSWkobix0LGUpfSx0LmNvcHk9ZnVu%0AY3Rpb24oKXtyZXR1cm4gUWkobil9LHR9ZnVuY3Rpb24gbm8obil7cmV0dXJuIG4u%0AaW5uZXJSYWRpdXN9ZnVuY3Rpb24gdG8obil7cmV0dXJuIG4ub3V0ZXJSYWRpdXN9%0AZnVuY3Rpb24gZW8obil7cmV0dXJuIG4uc3RhcnRBbmdsZX1mdW5jdGlvbiBybyhu%0AKXtyZXR1cm4gbi5lbmRBbmdsZX1mdW5jdGlvbiB1byhuKXtmdW5jdGlvbiB0KHQp%0Ae2Z1bmN0aW9uIG8oKXtsLnB1c2goIk0iLGkobihzKSxhKSl9Zm9yKHZhciBjLGw9%0AW10scz1bXSxmPS0xLGg9dC5sZW5ndGgsZz1idChlKSxwPWJ0KHIpOysrZjxoOyl1%0ALmNhbGwodGhpcyxjPXRbZl0sZik/cy5wdXNoKFsrZy5jYWxsKHRoaXMsYyxmKSwr%0AcC5jYWxsKHRoaXMsYyxmKV0pOnMubGVuZ3RoJiYobygpLHM9W10pO3JldHVybiBz%0ALmxlbmd0aCYmbygpLGwubGVuZ3RoP2wuam9pbigiIik6bnVsbH12YXIgZT1Tcixy%0APWtyLHU9U2UsaT1pbyxvPWkua2V5LGE9Ljc7cmV0dXJuIHQueD1mdW5jdGlvbihu%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHQpOmV9LHQueT1mdW5jdGlv%0AbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHQpOnJ9LHQuZGVmaW5l%0AZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1uLHQpOnV9%0ALHQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIG4/aT1uOihpPU1sLmdldChuKXx8aW8p%0ALmtleSx0KTpvfSx0LnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50%0Acy5sZW5ndGg/KGE9bix0KTphfSx0fWZ1bmN0aW9uIGlvKG4pe3JldHVybiBuLmpv%0AaW4oIkwiKX1mdW5jdGlvbiBvbyhuKXtyZXR1cm4gaW8obikrIloifWZ1bmN0aW9u%0AIGFvKG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgscj1uWzBdLHU9W3JbMF0sIiwi%0ALHJbMV1dOysrdDxlOyl1LnB1c2goIkgiLChyWzBdKyhyPW5bdF0pWzBdKS8yLCJW%0AIixyWzFdKTtyZXR1cm4gZT4xJiZ1LnB1c2goIkgiLHJbMF0pLHUuam9pbigiIil9%0AZnVuY3Rpb24gY28obil7Zm9yKHZhciB0PTAsZT1uLmxlbmd0aCxyPW5bMF0sdT1b%0AclswXSwiLCIsclsxXV07Kyt0PGU7KXUucHVzaCgiViIsKHI9blt0XSlbMV0sIkgi%0ALHJbMF0pO3JldHVybiB1LmpvaW4oIiIpfWZ1bmN0aW9uIGxvKG4pe2Zvcih2YXIg%0AdD0wLGU9bi5sZW5ndGgscj1uWzBdLHU9W3JbMF0sIiwiLHJbMV1dOysrdDxlOyl1%0ALnB1c2goIkgiLChyPW5bdF0pWzBdLCJWIixyWzFdKTtyZXR1cm4gdS5qb2luKCIi%0AKX1mdW5jdGlvbiBzbyhuLHQpe3JldHVybiBuLmxlbmd0aDw0P2lvKG4pOm5bMV0r%0AZ28obi5zbGljZSgxLG4ubGVuZ3RoLTEpLHBvKG4sdCkpfWZ1bmN0aW9uIGZvKG4s%0AdCl7cmV0dXJuIG4ubGVuZ3RoPDM/aW8obik6blswXStnbygobi5wdXNoKG5bMF0p%0ALG4pLHBvKFtuW24ubGVuZ3RoLTJdXS5jb25jYXQobixbblsxXV0pLHQpKX1mdW5j%0AdGlvbiBobyhuLHQpe3JldHVybiBuLmxlbmd0aDwzP2lvKG4pOm5bMF0rZ28obixw%0AbyhuLHQpKX1mdW5jdGlvbiBnbyhuLHQpe2lmKHQubGVuZ3RoPDF8fG4ubGVuZ3Ro%0AIT10Lmxlbmd0aCYmbi5sZW5ndGghPXQubGVuZ3RoKzIpcmV0dXJuIGlvKG4pO3Zh%0AciBlPW4ubGVuZ3RoIT10Lmxlbmd0aCxyPSIiLHU9blswXSxpPW5bMV0sbz10WzBd%0ALGE9byxjPTE7aWYoZSYmKHIrPSJRIisoaVswXS0yKm9bMF0vMykrIiwiKyhpWzFd%0ALTIqb1sxXS8zKSsiLCIraVswXSsiLCIraVsxXSx1PW5bMV0sYz0yKSx0Lmxlbmd0%0AaD4xKXthPXRbMV0saT1uW2NdLGMrKyxyKz0iQyIrKHVbMF0rb1swXSkrIiwiKyh1%0AWzFdK29bMV0pKyIsIisoaVswXS1hWzBdKSsiLCIrKGlbMV0tYVsxXSkrIiwiK2lb%0AMF0rIiwiK2lbMV07Zm9yKHZhciBsPTI7bDx0Lmxlbmd0aDtsKyssYysrKWk9bltj%0AXSxhPXRbbF0scis9IlMiKyhpWzBdLWFbMF0pKyIsIisoaVsxXS1hWzFdKSsiLCIr%0AaVswXSsiLCIraVsxXX1pZihlKXt2YXIgcz1uW2NdO3IrPSJRIisoaVswXSsyKmFb%0AMF0vMykrIiwiKyhpWzFdKzIqYVsxXS8zKSsiLCIrc1swXSsiLCIrc1sxXX1yZXR1%0Acm4gcn1mdW5jdGlvbiBwbyhuLHQpe2Zvcih2YXIgZSxyPVtdLHU9KDEtdCkvMixp%0APW5bMF0sbz1uWzFdLGE9MSxjPW4ubGVuZ3RoOysrYTxjOyllPWksaT1vLG89blth%0AXSxyLnB1c2goW3UqKG9bMF0tZVswXSksdSoob1sxXS1lWzFdKV0pO3JldHVybiBy%0AfWZ1bmN0aW9uIHZvKG4pe2lmKG4ubGVuZ3RoPDMpcmV0dXJuIGlvKG4pO3ZhciB0%0APTEsZT1uLmxlbmd0aCxyPW5bMF0sdT1yWzBdLGk9clsxXSxvPVt1LHUsdSwocj1u%0AWzFdKVswXV0sYT1baSxpLGksclsxXV0sYz1bdSwiLCIsaSwiTCIsTW8od2wsbyks%0AIiwiLE1vKHdsLGEpXTtmb3Iobi5wdXNoKG5bZS0xXSk7Kyt0PD1lOylyPW5bdF0s%0Aby5zaGlmdCgpLG8ucHVzaChyWzBdKSxhLnNoaWZ0KCksYS5wdXNoKHJbMV0pLF9v%0AKGMsbyxhKTtyZXR1cm4gbi5wb3AoKSxjLnB1c2goIkwiLHIpLGMuam9pbigiIil9%0AZnVuY3Rpb24gbW8obil7aWYobi5sZW5ndGg8NClyZXR1cm4gaW8obik7Zm9yKHZh%0AciB0LGU9W10scj0tMSx1PW4ubGVuZ3RoLGk9WzBdLG89WzBdOysrcjwzOyl0PW5b%0Acl0saS5wdXNoKHRbMF0pLG8ucHVzaCh0WzFdKTtmb3IoZS5wdXNoKE1vKHdsLGkp%0AKyIsIitNbyh3bCxvKSksLS1yOysrcjx1Oyl0PW5bcl0saS5zaGlmdCgpLGkucHVz%0AaCh0WzBdKSxvLnNoaWZ0KCksby5wdXNoKHRbMV0pLF9vKGUsaSxvKTtyZXR1cm4g%0AZS5qb2luKCIiKX1mdW5jdGlvbiB5byhuKXtmb3IodmFyIHQsZSxyPS0xLHU9bi5s%0AZW5ndGgsaT11KzQsbz1bXSxhPVtdOysrcjw0OyllPW5bciV1XSxvLnB1c2goZVsw%0AXSksYS5wdXNoKGVbMV0pO2Zvcih0PVtNbyh3bCxvKSwiLCIsTW8od2wsYSldLC0t%0AcjsrK3I8aTspZT1uW3IldV0sby5zaGlmdCgpLG8ucHVzaChlWzBdKSxhLnNoaWZ0%0AKCksYS5wdXNoKGVbMV0pLF9vKHQsbyxhKTtyZXR1cm4gdC5qb2luKCIiKX1mdW5j%0AdGlvbiB4byhuLHQpe3ZhciBlPW4ubGVuZ3RoLTE7aWYoZSlmb3IodmFyIHIsdSxp%0APW5bMF1bMF0sbz1uWzBdWzFdLGE9bltlXVswXS1pLGM9bltlXVsxXS1vLGw9LTE7%0AKytsPD1lOylyPW5bbF0sdT1sL2UsclswXT10KnJbMF0rKDEtdCkqKGkrdSphKSxy%0AWzFdPXQqclsxXSsoMS10KSoobyt1KmMpO3JldHVybiB2byhuKX1mdW5jdGlvbiBN%0AbyhuLHQpe3JldHVybiBuWzBdKnRbMF0rblsxXSp0WzFdK25bMl0qdFsyXStuWzNd%0AKnRbM119ZnVuY3Rpb24gX28obix0LGUpe24ucHVzaCgiQyIsTW8oX2wsdCksIiwi%0ALE1vKF9sLGUpLCIsIixNbyhibCx0KSwiLCIsTW8oYmwsZSksIiwiLE1vKHdsLHQp%0ALCIsIixNbyh3bCxlKSl9ZnVuY3Rpb24gYm8obix0KXtyZXR1cm4odFsxXS1uWzFd%0AKS8odFswXS1uWzBdKX1mdW5jdGlvbiB3byhuKXtmb3IodmFyIHQ9MCxlPW4ubGVu%0AZ3RoLTEscj1bXSx1PW5bMF0saT1uWzFdLG89clswXT1ibyh1LGkpOysrdDxlOyly%0AW3RdPShvKyhvPWJvKHU9aSxpPW5bdCsxXSkpKS8yO3JldHVybiByW3RdPW8scn1m%0AdW5jdGlvbiBTbyhuKXtmb3IodmFyIHQsZSxyLHUsaT1bXSxvPXdvKG4pLGE9LTEs%0AYz1uLmxlbmd0aC0xOysrYTxjOyl0PWJvKG5bYV0sblthKzFdKSxpYSh0KTxFYT9v%0AW2FdPW9bYSsxXT0wOihlPW9bYV0vdCxyPW9bYSsxXS90LHU9ZSplK3Iqcix1Pjkm%0AJih1PTMqdC9NYXRoLnNxcnQodSksb1thXT11KmUsb1thKzFdPXUqcikpO2Zvcihh%0APS0xOysrYTw9YzspdT0obltNYXRoLm1pbihjLGErMSldWzBdLW5bTWF0aC5tYXgo%0AMCxhLTEpXVswXSkvKDYqKDErb1thXSpvW2FdKSksaS5wdXNoKFt1fHwwLG9bYV0q%0AdXx8MF0pO3JldHVybiBpfWZ1bmN0aW9uIGtvKG4pe3JldHVybiBuLmxlbmd0aDwz%0AP2lvKG4pOm5bMF0rZ28obixTbyhuKSl9ZnVuY3Rpb24gRW8obil7Zm9yKHZhciB0%0ALGUscix1PS0xLGk9bi5sZW5ndGg7Kyt1PGk7KXQ9blt1XSxlPXRbMF0scj10WzFd%0AK3lsLHRbMF09ZSpNYXRoLmNvcyhyKSx0WzFdPWUqTWF0aC5zaW4ocik7cmV0dXJu%0AIG59ZnVuY3Rpb24gQW8obil7ZnVuY3Rpb24gdCh0KXtmdW5jdGlvbiBjKCl7di5w%0AdXNoKCJNIixhKG4obSksZikscyxsKG4oZC5yZXZlcnNlKCkpLGYpLCJaIil9Zm9y%0AKHZhciBoLGcscCx2PVtdLGQ9W10sbT1bXSx5PS0xLHg9dC5sZW5ndGgsTT1idChl%0AKSxfPWJ0KHUpLGI9ZT09PXI/ZnVuY3Rpb24oKXtyZXR1cm4gZ306YnQociksdz11%0APT09aT9mdW5jdGlvbigpe3JldHVybiBwfTpidChpKTsrK3k8eDspby5jYWxsKHRo%0AaXMsaD10W3ldLHkpPyhkLnB1c2goW2c9K00uY2FsbCh0aGlzLGgseSkscD0rXy5j%0AYWxsKHRoaXMsaCx5KV0pLG0ucHVzaChbK2IuY2FsbCh0aGlzLGgseSksK3cuY2Fs%0AbCh0aGlzLGgseSldKSk6ZC5sZW5ndGgmJihjKCksZD1bXSxtPVtdKTtyZXR1cm4g%0AZC5sZW5ndGgmJmMoKSx2Lmxlbmd0aD92LmpvaW4oIiIpOm51bGx9dmFyIGU9U3Is%0Acj1Tcix1PTAsaT1rcixvPVNlLGE9aW8sYz1hLmtleSxsPWEscz0iTCIsZj0uNzty%0AZXR1cm4gdC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhl%0APXI9bix0KTpyfSx0LngwPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyhlPW4sdCk6ZX0sdC54MT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRz%0ALmxlbmd0aD8ocj1uLHQpOnJ9LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1l%0AbnRzLmxlbmd0aD8odT1pPW4sdCk6aX0sdC55MD1mdW5jdGlvbihuKXtyZXR1cm4g%0AYXJndW1lbnRzLmxlbmd0aD8odT1uLHQpOnV9LHQueTE9ZnVuY3Rpb24obil7cmV0%0AdXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bix0KTppfSx0LmRlZmluZWQ9ZnVuY3Rp%0Ab24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bix0KTpvfSx0LmludGVy%0AcG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJm%0AdW5jdGlvbiI9PXR5cGVvZiBuP2E9bjooYT1NbC5nZXQobil8fGlvKS5rZXksbD1h%0ALnJldmVyc2V8fGEscz1hLmNsb3NlZD8iTSI6IkwiLHQpOmN9LHQudGVuc2lvbj1m%0AdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1uLHQpOmZ9LHR9%0AZnVuY3Rpb24gQ28obil7cmV0dXJuIG4ucmFkaXVzfWZ1bmN0aW9uIE5vKG4pe3Jl%0AdHVybltuLngsbi55XX1mdW5jdGlvbiB6byhuKXtyZXR1cm4gZnVuY3Rpb24oKXt2%0AYXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlPXRbMF0scj10WzFdK3lsO3Jl%0AdHVybltlKk1hdGguY29zKHIpLGUqTWF0aC5zaW4ocildfX1mdW5jdGlvbiBMbygp%0Ae3JldHVybiA2NH1mdW5jdGlvbiBUbygpe3JldHVybiJjaXJjbGUifWZ1bmN0aW9u%0AIHFvKG4pe3ZhciB0PU1hdGguc3FydChuL3dhKTtyZXR1cm4iTTAsIit0KyJBIit0%0AKyIsIit0KyIgMCAxLDEgMCwiKy10KyJBIit0KyIsIit0KyIgMCAxLDEgMCwiK3Qr%0AIloifWZ1bmN0aW9uIFJvKG4sdCl7cmV0dXJuIHNhKG4sTmwpLG4uaWQ9dCxufWZ1%0AbmN0aW9uIERvKG4sdCxlLHIpe3ZhciB1PW4uaWQ7cmV0dXJuIFAobiwiZnVuY3Rp%0Ab24iPT10eXBlb2YgZT9mdW5jdGlvbihuLGksbyl7bi5fX3RyYW5zaXRpb25fX1t1%0AXS50d2Vlbi5zZXQodCxyKGUuY2FsbChuLG4uX19kYXRhX18saSxvKSkpfTooZT1y%0AKGUpLGZ1bmN0aW9uKG4pe24uX190cmFuc2l0aW9uX19bdV0udHdlZW4uc2V0KHQs%0AZSl9KSl9ZnVuY3Rpb24gUG8obil7cmV0dXJuIG51bGw9PW4mJihuPSIiKSxmdW5j%0AdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gVW8obix0LGUscil7%0AdmFyIHU9bi5fX3RyYW5zaXRpb25fX3x8KG4uX190cmFuc2l0aW9uX189e2FjdGl2%0AZTowLGNvdW50OjB9KSxpPXVbZV07aWYoIWkpe3ZhciBhPXIudGltZTtpPXVbZV09%0Ae3R3ZWVuOm5ldyBvLHRpbWU6YSxlYXNlOnIuZWFzZSxkZWxheTpyLmRlbGF5LGR1%0AcmF0aW9uOnIuZHVyYXRpb259LCsrdS5jb3VudCxWby50aW1lcihmdW5jdGlvbihy%0AKXtmdW5jdGlvbiBvKHIpe3JldHVybiB1LmFjdGl2ZT5lP2woKToodS5hY3RpdmU9%0AZSxpLmV2ZW50JiZpLmV2ZW50LnN0YXJ0LmNhbGwobixzLHQpLGkudHdlZW4uZm9y%0ARWFjaChmdW5jdGlvbihlLHIpeyhyPXIuY2FsbChuLHMsdCkpJiZ2LnB1c2gocil9%0AKSxWby50aW1lcihmdW5jdGlvbigpe3JldHVybiBwLmM9YyhyfHwxKT9TZTpjLDF9%0ALDAsYSksdm9pZCAwKX1mdW5jdGlvbiBjKHIpe2lmKHUuYWN0aXZlIT09ZSlyZXR1%0Acm4gbCgpO2Zvcih2YXIgbz1yL2csYT1mKG8pLGM9di5sZW5ndGg7Yz4wOyl2Wy0t%0AY10uY2FsbChuLGEpO3JldHVybiBvPj0xPyhpLmV2ZW50JiZpLmV2ZW50LmVuZC5j%0AYWxsKG4scyx0KSxsKCkpOnZvaWQgMAp9ZnVuY3Rpb24gbCgpe3JldHVybi0tdS5j%0Ab3VudD9kZWxldGUgdVtlXTpkZWxldGUgbi5fX3RyYW5zaXRpb25fXywxfXZhciBz%0APW4uX19kYXRhX18sZj1pLmVhc2UsaD1pLmRlbGF5LGc9aS5kdXJhdGlvbixwPVdh%0ALHY9W107cmV0dXJuIHAudD1oK2Escj49aD9vKHItaCk6KHAuYz1vLHZvaWQgMCl9%0ALDAsYSl9fWZ1bmN0aW9uIGpvKG4sdCl7bi5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0%0AaW9uKG4pe3JldHVybiJ0cmFuc2xhdGUoIit0KG4pKyIsMCkifSl9ZnVuY3Rpb24g%0ASG8obix0KXtuLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24obil7cmV0dXJuInRy%0AYW5zbGF0ZSgwLCIrdChuKSsiKSJ9KX1mdW5jdGlvbiBGbyhuKXtyZXR1cm4gbi50%0Ab0lTT1N0cmluZygpfWZ1bmN0aW9uIE9vKG4sdCxlKXtmdW5jdGlvbiByKHQpe3Jl%0AdHVybiBuKHQpfWZ1bmN0aW9uIHUobixlKXt2YXIgcj1uWzFdLW5bMF0sdT1yL2Us%0AaT1Wby5iaXNlY3QoamwsdSk7cmV0dXJuIGk9PWpsLmxlbmd0aD9bdC55ZWFyLE9p%0AKG4ubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLzMxNTM2ZTZ9KSxlKVsyXV06aT90%0AW3UvamxbaS0xXTxqbFtpXS91P2ktMTppXTpbT2wsT2kobixlKVsyXV19cmV0dXJu%0AIHIuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBZbyhuLmludmVydCh0KSl9LHIu%0AZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuLmRv%0AbWFpbih0KSxyKTpuLmRvbWFpbigpLm1hcChZbyl9LHIubmljZT1mdW5jdGlvbihu%0ALHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIWlzTmFOKGUpJiYhbi5yYW5nZShlLFlv%0AKCtlKzEpLHQpLmxlbmd0aH12YXIgaT1yLmRvbWFpbigpLG89VGkoaSksYT1udWxs%0APT1uP3UobywxMCk6Im51bWJlciI9PXR5cGVvZiBuJiZ1KG8sbik7cmV0dXJuIGEm%0AJihuPWFbMF0sdD1hWzFdKSxyLmRvbWFpbihEaShpLHQ+MT97Zmxvb3I6ZnVuY3Rp%0Ab24odCl7Zm9yKDtlKHQ9bi5mbG9vcih0KSk7KXQ9WW8odC0xKTtyZXR1cm4gdH0s%0AY2VpbDpmdW5jdGlvbih0KXtmb3IoO2UodD1uLmNlaWwodCkpOyl0PVlvKCt0KzEp%0AO3JldHVybiB0fX06bikpfSxyLnRpY2tzPWZ1bmN0aW9uKG4sdCl7dmFyIGU9VGko%0Aci5kb21haW4oKSksaT1udWxsPT1uP3UoZSwxMCk6Im51bWJlciI9PXR5cGVvZiBu%0AP3UoZSxuKTohbi5yYW5nZSYmW3tyYW5nZTpufSx0XTtyZXR1cm4gaSYmKG49aVsw%0AXSx0PWlbMV0pLG4ucmFuZ2UoZVswXSxZbygrZVsxXSsxKSwxPnQ/MTp0KX0sci50%0AaWNrRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHIuY29weT1mdW5jdGlvbigp%0Ae3JldHVybiBPbyhuLmNvcHkoKSx0LGUpfSxIaShyLG4pfWZ1bmN0aW9uIFlvKG4p%0Ae3JldHVybiBuZXcgRGF0ZShuKX1mdW5jdGlvbiBJbyhuKXtyZXR1cm4gSlNPTi5w%0AYXJzZShuLnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gWm8obil7dmFyIHQ9Qm8uY3Jl%0AYXRlUmFuZ2UoKTtyZXR1cm4gdC5zZWxlY3ROb2RlKEJvLmJvZHkpLHQuY3JlYXRl%0AQ29udGV4dHVhbEZyYWdtZW50KG4ucmVzcG9uc2VUZXh0KX12YXIgVm89e3ZlcnNp%0Ab246IjMuNC4xMiJ9O0RhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1%0Acm4rbmV3IERhdGV9KTt2YXIgWG89W10uc2xpY2UsJG89ZnVuY3Rpb24obil7cmV0%0AdXJuIFhvLmNhbGwobil9LEJvPWRvY3VtZW50LFdvPUJvLmRvY3VtZW50RWxlbWVu%0AdCxKbz13aW5kb3c7dHJ5eyRvKFdvLmNoaWxkTm9kZXMpWzBdLm5vZGVUeXBlfWNh%0AdGNoKEdvKXskbz1mdW5jdGlvbihuKXtmb3IodmFyIHQ9bi5sZW5ndGgsZT1uZXcg%0AQXJyYXkodCk7dC0tOyllW3RdPW5bdF07cmV0dXJuIGV9fXRyeXtCby5jcmVhdGVF%0AbGVtZW50KCJkaXYiKS5zdHlsZS5zZXRQcm9wZXJ0eSgib3BhY2l0eSIsMCwiIil9%0AY2F0Y2goS28pe3ZhciBRbz1Kby5FbGVtZW50LnByb3RvdHlwZSxuYT1Rby5zZXRB%0AdHRyaWJ1dGUsdGE9UW8uc2V0QXR0cmlidXRlTlMsZWE9Sm8uQ1NTU3R5bGVEZWNs%0AYXJhdGlvbi5wcm90b3R5cGUscmE9ZWEuc2V0UHJvcGVydHk7UW8uc2V0QXR0cmli%0AdXRlPWZ1bmN0aW9uKG4sdCl7bmEuY2FsbCh0aGlzLG4sdCsiIil9LFFvLnNldEF0%0AdHJpYnV0ZU5TPWZ1bmN0aW9uKG4sdCxlKXt0YS5jYWxsKHRoaXMsbix0LGUrIiIp%0AfSxlYS5zZXRQcm9wZXJ0eT1mdW5jdGlvbihuLHQsZSl7cmEuY2FsbCh0aGlzLG4s%0AdCsiIixlKX19Vm8uYXNjZW5kaW5nPW4sVm8uZGVzY2VuZGluZz1mdW5jdGlvbihu%0ALHQpe3JldHVybiBuPnQ/LTE6dD5uPzE6dD49bj8wOjAvMH0sVm8ubWluPWZ1bmN0%0AaW9uKG4sdCl7dmFyIGUscix1PS0xLGk9bi5sZW5ndGg7aWYoMT09PWFyZ3VtZW50%0Acy5sZW5ndGgpe2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9blt1XSkmJmU+PWUpOyll%0APXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj1uW3VdKSYmZT5yJiYoZT1yKX1l%0AbHNle2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9dC5jYWxsKG4sblt1XSx1KSkmJmU+%0APWUpOyllPXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj10LmNhbGwobixuW3Vd%0ALHUpKSYmZT5yJiYoZT1yKX1yZXR1cm4gZX0sVm8ubWF4PWZ1bmN0aW9uKG4sdCl7%0AdmFyIGUscix1PS0xLGk9bi5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgp%0Ae2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9blt1XSkmJmU+PWUpOyllPXZvaWQgMDtm%0Ab3IoOysrdTxpOyludWxsIT0ocj1uW3VdKSYmcj5lJiYoZT1yKX1lbHNle2Zvcig7%0AKyt1PGkmJiEobnVsbCE9KGU9dC5jYWxsKG4sblt1XSx1KSkmJmU+PWUpOyllPXZv%0AaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj10LmNhbGwobixuW3VdLHUpKSYmcj5l%0AJiYoZT1yKX1yZXR1cm4gZX0sVm8uZXh0ZW50PWZ1bmN0aW9uKG4sdCl7dmFyIGUs%0Acix1LGk9LTEsbz1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9y%0AKDsrK2k8byYmIShudWxsIT0oZT11PW5baV0pJiZlPj1lKTspZT11PXZvaWQgMDtm%0Ab3IoOysraTxvOyludWxsIT0ocj1uW2ldKSYmKGU+ciYmKGU9cikscj51JiYodT1y%0AKSl9ZWxzZXtmb3IoOysraTxvJiYhKG51bGwhPShlPXU9dC5jYWxsKG4sbltpXSxp%0AKSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysraTxvOyludWxsIT0ocj10LmNhbGwo%0AbixuW2ldLGkpKSYmKGU+ciYmKGU9cikscj51JiYodT1yKSl9cmV0dXJuW2UsdV19%0ALFZvLnN1bT1mdW5jdGlvbihuLHQpe3ZhciBlLHI9MCx1PW4ubGVuZ3RoLGk9LTE7%0AaWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2k8dTspaXNOYU4oZT0rbltp%0AXSl8fChyKz1lKTtlbHNlIGZvcig7KytpPHU7KWlzTmFOKGU9K3QuY2FsbChuLG5b%0AaV0saSkpfHwocis9ZSk7cmV0dXJuIHJ9LFZvLm1lYW49ZnVuY3Rpb24obixlKXt2%0AYXIgcix1PTAsaT1uLmxlbmd0aCxvPS0xLGE9aTtpZigxPT09YXJndW1lbnRzLmxl%0Abmd0aClmb3IoOysrbzxpOyl0KHI9bltvXSk/dSs9cjotLWE7ZWxzZSBmb3IoOysr%0AbzxpOyl0KHI9ZS5jYWxsKG4sbltvXSxvKSk/dSs9cjotLWE7cmV0dXJuIGE/dS9h%0AOnZvaWQgMH0sVm8ucXVhbnRpbGU9ZnVuY3Rpb24obix0KXt2YXIgZT0obi5sZW5n%0AdGgtMSkqdCsxLHI9TWF0aC5mbG9vcihlKSx1PStuW3ItMV0saT1lLXI7cmV0dXJu%0AIGk/dStpKihuW3JdLXUpOnV9LFZvLm1lZGlhbj1mdW5jdGlvbihlLHIpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPjEmJihlPWUubWFwKHIpKSxlPWUuZmlsdGVyKHQp%0ALGUubGVuZ3RoP1ZvLnF1YW50aWxlKGUuc29ydChuKSwuNSk6dm9pZCAwfTt2YXIg%0AdWE9ZShuKTtWby5iaXNlY3RMZWZ0PXVhLmxlZnQsVm8uYmlzZWN0PVZvLmJpc2Vj%0AdFJpZ2h0PXVhLnJpZ2h0LFZvLmJpc2VjdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBl%0AKDE9PT10Lmxlbmd0aD9mdW5jdGlvbihlLHIpe3JldHVybiBuKHQoZSkscil9OnQp%0AfSxWby5zaHVmZmxlPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdCxlLHI9bi5sZW5ndGg7%0AcjspZT0wfE1hdGgucmFuZG9tKCkqci0tLHQ9bltyXSxuW3JdPW5bZV0sbltlXT10%0AO3JldHVybiBufSxWby5wZXJtdXRlPWZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPXQu%0AbGVuZ3RoLHI9bmV3IEFycmF5KGUpO2UtLTspcltlXT1uW3RbZV1dO3JldHVybiBy%0AfSxWby5wYWlycz1mdW5jdGlvbihuKXtmb3IodmFyIHQsZT0wLHI9bi5sZW5ndGgt%0AMSx1PW5bMF0saT1uZXcgQXJyYXkoMD5yPzA6cik7cj5lOylpW2VdPVt0PXUsdT1u%0AWysrZV1dO3JldHVybiBpfSxWby56aXA9ZnVuY3Rpb24oKXtpZighKHU9YXJndW1l%0AbnRzLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBuPS0xLHQ9Vm8ubWluKGFyZ3Vt%0AZW50cyxyKSxlPW5ldyBBcnJheSh0KTsrK248dDspZm9yKHZhciB1LGk9LTEsbz1l%0AW25dPW5ldyBBcnJheSh1KTsrK2k8dTspb1tpXT1hcmd1bWVudHNbaV1bbl07cmV0%0AdXJuIGV9LFZvLnRyYW5zcG9zZT1mdW5jdGlvbihuKXtyZXR1cm4gVm8uemlwLmFw%0AcGx5KFZvLG4pfSxWby5rZXlzPWZ1bmN0aW9uKG4pe3ZhciB0PVtdO2Zvcih2YXIg%0AZSBpbiBuKXQucHVzaChlKTtyZXR1cm4gdH0sVm8udmFsdWVzPWZ1bmN0aW9uKG4p%0Ae3ZhciB0PVtdO2Zvcih2YXIgZSBpbiBuKXQucHVzaChuW2VdKTtyZXR1cm4gdH0s%0AVm8uZW50cmllcz1mdW5jdGlvbihuKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gbil0%0ALnB1c2goe2tleTplLHZhbHVlOm5bZV19KTtyZXR1cm4gdH0sVm8ubWVyZ2U9ZnVu%0AY3Rpb24obil7Zm9yKHZhciB0LGUscix1PW4ubGVuZ3RoLGk9LTEsbz0wOysraTx1%0AOylvKz1uW2ldLmxlbmd0aDtmb3IoZT1uZXcgQXJyYXkobyk7LS11Pj0wOylmb3Io%0Acj1uW3VdLHQ9ci5sZW5ndGg7LS10Pj0wOyllWy0tb109clt0XTtyZXR1cm4gZX07%0AdmFyIGlhPU1hdGguYWJzO1ZvLnJhbmdlPWZ1bmN0aW9uKG4sdCxlKXtpZihhcmd1%0AbWVudHMubGVuZ3RoPDMmJihlPTEsYXJndW1lbnRzLmxlbmd0aDwyJiYodD1uLG49%0AMCkpLDEvMD09PSh0LW4pL2UpdGhyb3cgbmV3IEVycm9yKCJpbmZpbml0ZSByYW5n%0AZSIpO3ZhciByLGk9W10sbz11KGlhKGUpKSxhPS0xO2lmKG4qPW8sdCo9byxlKj1v%0ALDA+ZSlmb3IoOyhyPW4rZSorK2EpPnQ7KWkucHVzaChyL28pO2Vsc2UgZm9yKDso%0Acj1uK2UqKythKTx0OylpLnB1c2goci9vKTtyZXR1cm4gaX0sVm8ubWFwPWZ1bmN0%0AaW9uKG4pe3ZhciB0PW5ldyBvO2lmKG4gaW5zdGFuY2VvZiBvKW4uZm9yRWFjaChm%0AdW5jdGlvbihuLGUpe3Quc2V0KG4sZSl9KTtlbHNlIGZvcih2YXIgZSBpbiBuKXQu%0Ac2V0KGUsbltlXSk7cmV0dXJuIHR9LGkobyx7aGFzOmEsZ2V0OmZ1bmN0aW9uKG4p%0Ae3JldHVybiB0aGlzW29hK25dfSxzZXQ6ZnVuY3Rpb24obix0KXtyZXR1cm4gdGhp%0Ac1tvYStuXT10fSxyZW1vdmU6YyxrZXlzOmwsdmFsdWVzOmZ1bmN0aW9uKCl7dmFy%0AIG49W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0LGUpe24ucHVzaChl%0AKX0pLG59LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtyZXR1cm4gdGhpcy5m%0Ab3JFYWNoKGZ1bmN0aW9uKHQsZSl7bi5wdXNoKHtrZXk6dCx2YWx1ZTplfSl9KSxu%0AfSxzaXplOnMsZW1wdHk6Zixmb3JFYWNoOmZ1bmN0aW9uKG4pe2Zvcih2YXIgdCBp%0AbiB0aGlzKXQuY2hhckNvZGVBdCgwKT09PWFhJiZuLmNhbGwodGhpcyx0LnNsaWNl%0AKDEpLHRoaXNbdF0pfX0pO3ZhciBvYT0iXHgwMCIsYWE9b2EuY2hhckNvZGVBdCgw%0AKTtWby5uZXN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0LGEsYyl7aWYoYz49aS5s%0AZW5ndGgpcmV0dXJuIHI/ci5jYWxsKHUsYSk6ZT9hLnNvcnQoZSk6YTtmb3IodmFy%0AIGwscyxmLGgsZz0tMSxwPWEubGVuZ3RoLHY9aVtjKytdLGQ9bmV3IG87KytnPHA7%0AKShoPWQuZ2V0KGw9dihzPWFbZ10pKSk/aC5wdXNoKHMpOmQuc2V0KGwsW3NdKTty%0AZXR1cm4gdD8ocz10KCksZj1mdW5jdGlvbihlLHIpe3Muc2V0KGUsbih0LHIsYykp%0AfSk6KHM9e30sZj1mdW5jdGlvbihlLHIpe3NbZV09bih0LHIsYyl9KSxkLmZvckVh%0AY2goZiksc31mdW5jdGlvbiB0KG4sZSl7aWYoZT49aS5sZW5ndGgpcmV0dXJuIG47%0AdmFyIHI9W10sdT1hW2UrK107cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihuLHUp%0Ae3IucHVzaCh7a2V5Om4sdmFsdWVzOnQodSxlKX0pfSksdT9yLnNvcnQoZnVuY3Rp%0Ab24obix0KXtyZXR1cm4gdShuLmtleSx0LmtleSl9KTpyfXZhciBlLHIsdT17fSxp%0APVtdLGE9W107cmV0dXJuIHUubWFwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oZSx0%0ALDApfSx1LmVudHJpZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobihWby5tYXAsZSww%0AKSwwKX0sdS5rZXk9ZnVuY3Rpb24obil7cmV0dXJuIGkucHVzaChuKSx1fSx1LnNv%0AcnRLZXlzPWZ1bmN0aW9uKG4pe3JldHVybiBhW2kubGVuZ3RoLTFdPW4sdX0sdS5z%0Ab3J0VmFsdWVzPWZ1bmN0aW9uKG4pe3JldHVybiBlPW4sdX0sdS5yb2xsdXA9ZnVu%0AY3Rpb24obil7cmV0dXJuIHI9bix1fSx1fSxWby5zZXQ9ZnVuY3Rpb24obil7dmFy%0AIHQ9bmV3IGg7aWYobilmb3IodmFyIGU9MCxyPW4ubGVuZ3RoO3I+ZTsrK2UpdC5h%0AZGQobltlXSk7cmV0dXJuIHR9LGkoaCx7aGFzOmEsYWRkOmZ1bmN0aW9uKG4pe3Jl%0AdHVybiB0aGlzW29hK25dPSEwLG59LHJlbW92ZTpmdW5jdGlvbihuKXtyZXR1cm4g%0Abj1vYStuLG4gaW4gdGhpcyYmZGVsZXRlIHRoaXNbbl19LHZhbHVlczpsLHNpemU6%0AcyxlbXB0eTpmLGZvckVhY2g6ZnVuY3Rpb24obil7Zm9yKHZhciB0IGluIHRoaXMp%0AdC5jaGFyQ29kZUF0KDApPT09YWEmJm4uY2FsbCh0aGlzLHQuc2xpY2UoMSkpfX0p%0ALFZvLmJlaGF2aW9yPXt9LFZvLnJlYmluZD1mdW5jdGlvbihuLHQpe2Zvcih2YXIg%0AZSxyPTEsdT1hcmd1bWVudHMubGVuZ3RoOysrcjx1OyluW2U9YXJndW1lbnRzW3Jd%0AXT1nKG4sdCx0W2VdKTtyZXR1cm4gbn07dmFyIGNhPVsid2Via2l0IiwibXMiLCJt%0Ab3oiLCJNb3oiLCJvIiwiTyJdO1ZvLmRpc3BhdGNoPWZ1bmN0aW9uKCl7Zm9yKHZh%0AciBuPW5ldyBkLHQ9LTEsZT1hcmd1bWVudHMubGVuZ3RoOysrdDxlOyluW2FyZ3Vt%0AZW50c1t0XV09bShuKTtyZXR1cm4gbn0sZC5wcm90b3R5cGUub249ZnVuY3Rpb24o%0Abix0KXt2YXIgZT1uLmluZGV4T2YoIi4iKSxyPSIiO2lmKGU+PTAmJihyPW4uc2xp%0AY2UoZSsxKSxuPW4uc2xpY2UoMCxlKSksbilyZXR1cm4gYXJndW1lbnRzLmxlbmd0%0AaDwyP3RoaXNbbl0ub24ocik6dGhpc1tuXS5vbihyLHQpO2lmKDI9PT1hcmd1bWVu%0AdHMubGVuZ3RoKXtpZihudWxsPT10KWZvcihuIGluIHRoaXMpdGhpcy5oYXNPd25Q%0Acm9wZXJ0eShuKSYmdGhpc1tuXS5vbihyLG51bGwpO3JldHVybiB0aGlzfX0sVm8u%0AZXZlbnQ9bnVsbCxWby5yZXF1b3RlPWZ1bmN0aW9uKG4pe3JldHVybiBuLnJlcGxh%0AY2UobGEsIlxcJCYiKX07dmFyIGxhPS9bXFxcXlwkXCpcK1w/XHxcW1xdXChcKVwu%0AXHtcfV0vZyxzYT17fS5fX3Byb3RvX18/ZnVuY3Rpb24obix0KXtuLl9fcHJvdG9f%0AXz10fTpmdW5jdGlvbihuLHQpe2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXX0sZmE9%0AZnVuY3Rpb24obix0KXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yKG4pfSxoYT1mdW5j%0AdGlvbihuLHQpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3JBbGwobil9LGdhPVdvLm1h%0AdGNoZXN8fFdvW3AoV28sIm1hdGNoZXNTZWxlY3RvciIpXSxwYT1mdW5jdGlvbihu%0ALHQpe3JldHVybiBnYS5jYWxsKG4sdCl9OyJmdW5jdGlvbiI9PXR5cGVvZiBTaXp6%0AbGUmJihmYT1mdW5jdGlvbihuLHQpe3JldHVybiBTaXp6bGUobix0KVswXXx8bnVs%0AbH0saGE9U2l6emxlLHBhPVNpenpsZS5tYXRjaGVzU2VsZWN0b3IpLFZvLnNlbGVj%0AdGlvbj1mdW5jdGlvbigpe3JldHVybiB5YX07dmFyIHZhPVZvLnNlbGVjdGlvbi5w%0Acm90b3R5cGU9W107dmEuc2VsZWN0PWZ1bmN0aW9uKG4pe3ZhciB0LGUscix1LGk9%0AW107bj1iKG4pO2Zvcih2YXIgbz0tMSxhPXRoaXMubGVuZ3RoOysrbzxhOyl7aS5w%0AdXNoKHQ9W10pLHQucGFyZW50Tm9kZT0ocj10aGlzW29dKS5wYXJlbnROb2RlO2Zv%0Acih2YXIgYz0tMSxsPXIubGVuZ3RoOysrYzxsOykodT1yW2NdKT8odC5wdXNoKGU9%0Abi5jYWxsKHUsdS5fX2RhdGFfXyxjLG8pKSxlJiYiX19kYXRhX18iaW4gdSYmKGUu%0AX19kYXRhX189dS5fX2RhdGFfXykpOnQucHVzaChudWxsKX1yZXR1cm4gXyhpKX0s%0AdmEuc2VsZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0LGUscj1bXTtuPXcobik7Zm9y%0AKHZhciB1PS0xLGk9dGhpcy5sZW5ndGg7Kyt1PGk7KWZvcih2YXIgbz10aGlzW3Vd%0ALGE9LTEsYz1vLmxlbmd0aDsrK2E8YzspKGU9b1thXSkmJihyLnB1c2godD0kbyhu%0ALmNhbGwoZSxlLl9fZGF0YV9fLGEsdSkpKSx0LnBhcmVudE5vZGU9ZSk7cmV0dXJu%0AIF8ocil9O3ZhciBkYT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIs%0AeGh0bWw6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHhsaW5rOiJodHRw%0AOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3Jn%0AL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIw%0AMDAveG1sbnMvIn07Vm8ubnM9e3ByZWZpeDpkYSxxdWFsaWZ5OmZ1bmN0aW9uKG4p%0Ae3ZhciB0PW4uaW5kZXhPZigiOiIpLGU9bjtyZXR1cm4gdD49MCYmKGU9bi5zbGlj%0AZSgwLHQpLG49bi5zbGljZSh0KzEpKSxkYS5oYXNPd25Qcm9wZXJ0eShlKT97c3Bh%0AY2U6ZGFbZV0sbG9jYWw6bn06bn19LHZhLmF0dHI9ZnVuY3Rpb24obix0KXtpZihh%0Acmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2Ygbil7dmFyIGU9%0AdGhpcy5ub2RlKCk7cmV0dXJuIG49Vm8ubnMucXVhbGlmeShuKSxuLmxvY2FsP2Uu%0AZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTplLmdldEF0dHJpYnV0ZShu%0AKX1mb3IodCBpbiBuKXRoaXMuZWFjaChTKHQsblt0XSkpO3JldHVybiB0aGlzfXJl%0AdHVybiB0aGlzLmVhY2goUyhuLHQpKX0sdmEuY2xhc3NlZD1mdW5jdGlvbihuLHQp%0Ae2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXt2%0AYXIgZT10aGlzLm5vZGUoKSxyPShuPUEobikpLmxlbmd0aCx1PS0xO2lmKHQ9ZS5j%0AbGFzc0xpc3Qpe2Zvcig7Kyt1PHI7KWlmKCF0LmNvbnRhaW5zKG5bdV0pKXJldHVy%0AbiExfWVsc2UgZm9yKHQ9ZS5nZXRBdHRyaWJ1dGUoImNsYXNzIik7Kyt1PHI7KWlm%0AKCFFKG5bdV0pLnRlc3QodCkpcmV0dXJuITE7cmV0dXJuITB9Zm9yKHQgaW4gbil0%0AaGlzLmVhY2goQyh0LG5bdF0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNo%0AKEMobix0KSl9LHZhLnN0eWxlPWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1hcmd1bWVu%0AdHMubGVuZ3RoO2lmKDM+cil7aWYoInN0cmluZyIhPXR5cGVvZiBuKXsyPnImJih0%0APSIiKTtmb3IoZSBpbiBuKXRoaXMuZWFjaCh6KGUsbltlXSx0KSk7cmV0dXJuIHRo%0AaXN9aWYoMj5yKXJldHVybiBKby5nZXRDb21wdXRlZFN0eWxlKHRoaXMubm9kZSgp%0ALG51bGwpLmdldFByb3BlcnR5VmFsdWUobik7ZT0iIn1yZXR1cm4gdGhpcy5lYWNo%0AKHoobix0LGUpKX0sdmEucHJvcGVydHk9ZnVuY3Rpb24obix0KXtpZihhcmd1bWVu%0AdHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gdGhpcy5u%0Ab2RlKClbbl07Zm9yKHQgaW4gbil0aGlzLmVhY2goTCh0LG5bdF0pKTtyZXR1cm4g%0AdGhpc31yZXR1cm4gdGhpcy5lYWNoKEwobix0KSl9LHZhLnRleHQ9ZnVuY3Rpb24o%0Abil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCJmdW5jdGlvbiI9%0APXR5cGVvZiBuP2Z1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50%0Acyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT10PyIiOnR9Om51bGw9PW4/ZnVuY3Rp%0Ab24oKXt0aGlzLnRleHRDb250ZW50PSIifTpmdW5jdGlvbigpe3RoaXMudGV4dENv%0AbnRlbnQ9bn0pOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSx2YS5odG1sPWZ1bmN0%0AaW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rp%0Ab24iPT10eXBlb2Ygbj9mdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1%0AbWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PXQ/IiI6dH06bnVsbD09bj9mdW5j%0AdGlvbigpe3RoaXMuaW5uZXJIVE1MPSIifTpmdW5jdGlvbigpe3RoaXMuaW5uZXJI%0AVE1MPW59KTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHZhLmFwcGVuZD1mdW5jdGlv%0AbihuKXtyZXR1cm4gbj1UKG4pLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJu%0AIHRoaXMuYXBwZW5kQ2hpbGQobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LHZh%0ALmluc2VydD1mdW5jdGlvbihuLHQpe3JldHVybiBuPVQobiksdD1iKHQpLHRoaXMu%0Ac2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBw%0AbHkodGhpcyxhcmd1bWVudHMpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxs%0AKX0pfSx2YS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0%0AaW9uKCl7dmFyIG49dGhpcy5wYXJlbnROb2RlO24mJm4ucmVtb3ZlQ2hpbGQodGhp%0Acyl9KX0sdmEuZGF0YT1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUobixlKXt2YXIg%0Acix1LGksYT1uLmxlbmd0aCxmPWUubGVuZ3RoLGg9TWF0aC5taW4oYSxmKSxnPW5l%0AdyBBcnJheShmKSxwPW5ldyBBcnJheShmKSx2PW5ldyBBcnJheShhKTtpZih0KXt2%0AYXIgZCxtPW5ldyBvLHk9bmV3IG8seD1bXTtmb3Iocj0tMTsrK3I8YTspZD10LmNh%0AbGwodT1uW3JdLHUuX19kYXRhX18sciksbS5oYXMoZCk/dltyXT11Om0uc2V0KGQs%0AdSkseC5wdXNoKGQpO2ZvcihyPS0xOysrcjxmOylkPXQuY2FsbChlLGk9ZVtyXSxy%0AKSwodT1tLmdldChkKSk/KGdbcl09dSx1Ll9fZGF0YV9fPWkpOnkuaGFzKGQpfHwo%0AcFtyXT1xKGkpKSx5LnNldChkLGkpLG0ucmVtb3ZlKGQpO2ZvcihyPS0xOysrcjxh%0AOyltLmhhcyh4W3JdKSYmKHZbcl09bltyXSl9ZWxzZXtmb3Iocj0tMTsrK3I8aDsp%0AdT1uW3JdLGk9ZVtyXSx1Pyh1Ll9fZGF0YV9fPWksZ1tyXT11KTpwW3JdPXEoaSk7%0AZm9yKDtmPnI7KytyKXBbcl09cShlW3JdKTtmb3IoO2E+cjsrK3IpdltyXT1uW3Jd%0AfXAudXBkYXRlPWcscC5wYXJlbnROb2RlPWcucGFyZW50Tm9kZT12LnBhcmVudE5v%0AZGU9bi5wYXJlbnROb2RlLGMucHVzaChwKSxsLnB1c2goZykscy5wdXNoKHYpfXZh%0AciByLHUsaT0tMSxhPXRoaXMubGVuZ3RoO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtm%0Ab3Iobj1uZXcgQXJyYXkoYT0ocj10aGlzWzBdKS5sZW5ndGgpOysraTxhOykodT1y%0AW2ldKSYmKG5baV09dS5fX2RhdGFfXyk7cmV0dXJuIG59dmFyIGM9VShbXSksbD1f%0AKFtdKSxzPV8oW10pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKWZvcig7KytpPGE7%0AKWUocj10aGlzW2ldLG4uY2FsbChyLHIucGFyZW50Tm9kZS5fX2RhdGFfXyxpKSk7%0AZWxzZSBmb3IoOysraTxhOyllKHI9dGhpc1tpXSxuKTtyZXR1cm4gbC5lbnRlcj1m%0AdW5jdGlvbigpe3JldHVybiBjfSxsLmV4aXQ9ZnVuY3Rpb24oKXtyZXR1cm4gc30s%0AbH0sdmEuZGF0dW09ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/%0AdGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLG4pOnRoaXMucHJvcGVydHkoIl9fZGF0%0AYV9fIil9LHZhLmZpbHRlcj1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdT1bXTsiZnVu%0AY3Rpb24iIT10eXBlb2YgbiYmKG49UihuKSk7Zm9yKHZhciBpPTAsbz10aGlzLmxl%0Abmd0aDtvPmk7aSsrKXt1LnB1c2godD1bXSksdC5wYXJlbnROb2RlPShlPXRoaXNb%0AaV0pLnBhcmVudE5vZGU7Zm9yKHZhciBhPTAsYz1lLmxlbmd0aDtjPmE7YSsrKShy%0APWVbYV0pJiZuLmNhbGwocixyLl9fZGF0YV9fLGEsaSkmJnQucHVzaChyKX1yZXR1%0Acm4gXyh1KX0sdmEub3JkZXI9ZnVuY3Rpb24oKXtmb3IodmFyIG49LTEsdD10aGlz%0ALmxlbmd0aDsrK248dDspZm9yKHZhciBlLHI9dGhpc1tuXSx1PXIubGVuZ3RoLTEs%0AaT1yW3VdOy0tdT49MDspKGU9clt1XSkmJihpJiZpIT09ZS5uZXh0U2libGluZyYm%0AaS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLGkpLGk9ZSk7cmV0dXJuIHRoaXN9%0ALHZhLnNvcnQ9ZnVuY3Rpb24obil7bj1ELmFwcGx5KHRoaXMsYXJndW1lbnRzKTtm%0Ab3IodmFyIHQ9LTEsZT10aGlzLmxlbmd0aDsrK3Q8ZTspdGhpc1t0XS5zb3J0KG4p%0AO3JldHVybiB0aGlzLm9yZGVyKCl9LHZhLmVhY2g9ZnVuY3Rpb24obil7cmV0dXJu%0AIFAodGhpcyxmdW5jdGlvbih0LGUscil7bi5jYWxsKHQsdC5fX2RhdGFfXyxlLHIp%0AfSl9LHZhLmNhbGw9ZnVuY3Rpb24obil7dmFyIHQ9JG8oYXJndW1lbnRzKTtyZXR1%0Acm4gbi5hcHBseSh0WzBdPXRoaXMsdCksdGhpc30sdmEuZW1wdHk9ZnVuY3Rpb24o%0AKXtyZXR1cm4hdGhpcy5ub2RlKCl9LHZhLm5vZGU9ZnVuY3Rpb24oKXtmb3IodmFy%0AIG49MCx0PXRoaXMubGVuZ3RoO3Q+bjtuKyspZm9yKHZhciBlPXRoaXNbbl0scj0w%0ALHU9ZS5sZW5ndGg7dT5yO3IrKyl7dmFyIGk9ZVtyXTtpZihpKXJldHVybiBpfXJl%0AdHVybiBudWxsfSx2YS5zaXplPWZ1bmN0aW9uKCl7dmFyIG49MDtyZXR1cm4gUCh0%0AaGlzLGZ1bmN0aW9uKCl7KytufSksbn07dmFyIG1hPVtdO1ZvLnNlbGVjdGlvbi5l%0AbnRlcj1VLFZvLnNlbGVjdGlvbi5lbnRlci5wcm90b3R5cGU9bWEsbWEuYXBwZW5k%0APXZhLmFwcGVuZCxtYS5lbXB0eT12YS5lbXB0eSxtYS5ub2RlPXZhLm5vZGUsbWEu%0AY2FsbD12YS5jYWxsLG1hLnNpemU9dmEuc2l6ZSxtYS5zZWxlY3Q9ZnVuY3Rpb24o%0Abil7Zm9yKHZhciB0LGUscix1LGksbz1bXSxhPS0xLGM9dGhpcy5sZW5ndGg7Kyth%0APGM7KXtyPSh1PXRoaXNbYV0pLnVwZGF0ZSxvLnB1c2godD1bXSksdC5wYXJlbnRO%0Ab2RlPXUucGFyZW50Tm9kZTtmb3IodmFyIGw9LTEscz11Lmxlbmd0aDsrK2w8czsp%0AKGk9dVtsXSk/KHQucHVzaChyW2xdPWU9bi5jYWxsKHUucGFyZW50Tm9kZSxpLl9f%0AZGF0YV9fLGwsYSkpLGUuX19kYXRhX189aS5fX2RhdGFfXyk6dC5wdXNoKG51bGwp%0AfXJldHVybiBfKG8pfSxtYS5pbnNlcnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aDwyJiYodD1qKHRoaXMpKSx2YS5pbnNlcnQuY2FsbCh0aGlz%0ALG4sdCl9LHZhLnRyYW5zaXRpb249ZnVuY3Rpb24oKXtmb3IodmFyIG4sdCxlPWts%0AfHwrK3psLHI9W10sdT1FbHx8e3RpbWU6RGF0ZS5ub3coKSxlYXNlOk11LGRlbGF5%0AOjAsZHVyYXRpb246MjUwfSxpPS0xLG89dGhpcy5sZW5ndGg7KytpPG87KXtyLnB1%0Ac2gobj1bXSk7Zm9yKHZhciBhPXRoaXNbaV0sYz0tMSxsPWEubGVuZ3RoOysrYzxs%0AOykodD1hW2NdKSYmVW8odCxjLGUsdSksbi5wdXNoKHQpfXJldHVybiBSbyhyLGUp%0AfSx2YS5pbnRlcnJ1cHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKEgpfSxW%0Aby5zZWxlY3Q9ZnVuY3Rpb24obil7dmFyIHQ9WyJzdHJpbmciPT10eXBlb2Ygbj9m%0AYShuLEJvKTpuXTtyZXR1cm4gdC5wYXJlbnROb2RlPVdvLF8oW3RdKX0sVm8uc2Vs%0AZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0PSRvKCJzdHJpbmciPT10eXBlb2Ygbj9o%0AYShuLEJvKTpuKTtyZXR1cm4gdC5wYXJlbnROb2RlPVdvLF8oW3RdKX07dmFyIHlh%0APVZvLnNlbGVjdChXbyk7dmEub249ZnVuY3Rpb24obix0LGUpe3ZhciByPWFyZ3Vt%0AZW50cy5sZW5ndGg7aWYoMz5yKXtpZigic3RyaW5nIiE9dHlwZW9mIG4pezI+ciYm%0AKHQ9ITEpO2ZvcihlIGluIG4pdGhpcy5lYWNoKEYoZSxuW2VdLHQpKTtyZXR1cm4g%0AdGhpc31pZigyPnIpcmV0dXJuKHI9dGhpcy5ub2RlKClbIl9fb24iK25dKSYmci5f%0AO2U9ITF9cmV0dXJuIHRoaXMuZWFjaChGKG4sdCxlKSl9O3ZhciB4YT1Wby5tYXAo%0Ae21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSk7%0AeGEuZm9yRWFjaChmdW5jdGlvbihuKXsib24iK24gaW4gQm8mJnhhLnJlbW92ZShu%0AKX0pO3ZhciBNYT0ib25zZWxlY3RzdGFydCJpbiBCbz9udWxsOnAoV28uc3R5bGUs%0AInVzZXJTZWxlY3QiKSxfYT0wO1ZvLm1vdXNlPWZ1bmN0aW9uKG4pe3JldHVybiBa%0AKG4seCgpKX07dmFyIGJhPS9XZWJLaXQvLnRlc3QoSm8ubmF2aWdhdG9yLnVzZXJB%0AZ2VudCk/LTE6MDtWby50b3VjaD1mdW5jdGlvbihuLHQsZSl7aWYoYXJndW1lbnRz%0ALmxlbmd0aDwzJiYoZT10LHQ9eCgpLmNoYW5nZWRUb3VjaGVzKSx0KWZvcih2YXIg%0Acix1PTAsaT10Lmxlbmd0aDtpPnU7Kyt1KWlmKChyPXRbdV0pLmlkZW50aWZpZXI9%0APT1lKXJldHVybiBaKG4scil9LFZvLmJlaGF2aW9yLmRyYWc9ZnVuY3Rpb24oKXtm%0AdW5jdGlvbiBuKCl7dGhpcy5vbigibW91c2Vkb3duLmRyYWciLHUpLm9uKCJ0b3Vj%0AaHN0YXJ0LmRyYWciLGkpfWZ1bmN0aW9uIHQobix0LHUsaSxvKXtyZXR1cm4gZnVu%0AY3Rpb24oKXtmdW5jdGlvbiBhKCl7dmFyIG4sZSxyPXQoaCx2KTtyJiYobj1yWzBd%0ALXhbMF0sZT1yWzFdLXhbMV0scHw9bnxlLHg9cixnKHt0eXBlOiJkcmFnIix4OnJb%0AMF0rbFswXSx5OnJbMV0rbFsxXSxkeDpuLGR5OmV9KSl9ZnVuY3Rpb24gYygpe3Qo%0AaCx2KSYmKG0ub24oaStkLG51bGwpLm9uKG8rZCxudWxsKSx5KHAmJlZvLmV2ZW50%0ALnRhcmdldD09PWYpLGcoe3R5cGU6ImRyYWdlbmQifSkpfXZhciBsLHM9dGhpcyxm%0APVZvLmV2ZW50LnRhcmdldCxoPXMucGFyZW50Tm9kZSxnPWUub2Yocyxhcmd1bWVu%0AdHMpLHA9MCx2PW4oKSxkPSIuZHJhZyIrKG51bGw9PXY/IiI6Ii0iK3YpLG09Vm8u%0Ac2VsZWN0KHUoKSkub24oaStkLGEpLm9uKG8rZCxjKSx5PUkoKSx4PXQoaCx2KTty%0APyhsPXIuYXBwbHkocyxhcmd1bWVudHMpLGw9W2wueC14WzBdLGwueS14WzFdXSk6%0AbD1bMCwwXSxnKHt0eXBlOiJkcmFnc3RhcnQifSl9fXZhciBlPU0obiwiZHJhZyIs%0AImRyYWdzdGFydCIsImRyYWdlbmQiKSxyPW51bGwsdT10KHYsVm8ubW91c2UsJCwi%0AbW91c2Vtb3ZlIiwibW91c2V1cCIpLGk9dChWLFZvLnRvdWNoLFgsInRvdWNobW92%0AZSIsInRvdWNoZW5kIik7cmV0dXJuIG4ub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sVm8ucmViaW5kKG4sZSwib24i%0AKX0sVm8udG91Y2hlcz1mdW5jdGlvbihuLHQpe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPDImJih0PXgoKS50b3VjaGVzKSx0PyRvKHQpLm1hcChmdW5jdGlvbih0KXt2%0AYXIgZT1aKG4sdCk7cmV0dXJuIGUuaWRlbnRpZmllcj10LmlkZW50aWZpZXIsZX0p%0AOltdfTt2YXIgd2E9TWF0aC5QSSxTYT0yKndhLGthPXdhLzIsRWE9MWUtNixBYT1F%0AYSpFYSxDYT13YS8xODAsTmE9MTgwL3dhLHphPU1hdGguU1FSVDIsTGE9MixUYT00%0AO1ZvLmludGVycG9sYXRlWm9vbT1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUobil7%0AdmFyIHQ9bip5O2lmKG0pe3ZhciBlPVEodiksbz1pLyhMYSpoKSooZSpudCh6YSp0%0AK3YpLUsodikpO3JldHVybltyK28qbCx1K28qcyxpKmUvUSh6YSp0K3YpXX1yZXR1%0Acm5bcituKmwsdStuKnMsaSpNYXRoLmV4cCh6YSp0KV19dmFyIHI9blswXSx1PW5b%0AMV0saT1uWzJdLG89dFswXSxhPXRbMV0sYz10WzJdLGw9by1yLHM9YS11LGY9bCps%0AK3MqcyxoPU1hdGguc3FydChmKSxnPShjKmMtaSppK1RhKmYpLygyKmkqTGEqaCks%0AcD0oYypjLWkqaS1UYSpmKS8oMipjKkxhKmgpLHY9TWF0aC5sb2coTWF0aC5zcXJ0%0AKGcqZysxKS1nKSxkPU1hdGgubG9nKE1hdGguc3FydChwKnArMSktcCksbT1kLXYs%0AeT0obXx8TWF0aC5sb2coYy9pKSkvemE7cmV0dXJuIGUuZHVyYXRpb249MWUzKnks%0AZX0sVm8uYmVoYXZpb3Iuem9vbT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obil7bi5v%0AbihBLGwpLm9uKERhKyIuem9vbSIsZikub24oImRibGNsaWNrLnpvb20iLGgpLm9u%0AKHoscyl9ZnVuY3Rpb24gdChuKXtyZXR1cm5bKG5bMF0tUy54KS9TLmssKG5bMV0t%0AUy55KS9TLmtdfWZ1bmN0aW9uIGUobil7cmV0dXJuW25bMF0qUy5rK1MueCxuWzFd%0AKlMuaytTLnldfWZ1bmN0aW9uIHIobil7Uy5rPU1hdGgubWF4KEVbMF0sTWF0aC5t%0AaW4oRVsxXSxuKSl9ZnVuY3Rpb24gdShuLHQpe3Q9ZSh0KSxTLngrPW5bMF0tdFsw%0AXSxTLnkrPW5bMV0tdFsxXX1mdW5jdGlvbiBpKCl7XyYmXy5kb21haW4oeC5yYW5n%0AZSgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4obi1TLngpL1Mua30pLm1hcCh4Lmlu%0AdmVydCkpLHcmJncuZG9tYWluKGIucmFuZ2UoKS5tYXAoZnVuY3Rpb24obil7cmV0%0AdXJuKG4tUy55KS9TLmt9KS5tYXAoYi5pbnZlcnQpKX1mdW5jdGlvbiBvKG4pe24o%0Ae3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBhKG4pe2koKSxuKHt0eXBlOiJ6%0Ab29tIixzY2FsZTpTLmssdHJhbnNsYXRlOltTLngsUy55XX0pfWZ1bmN0aW9uIGMo%0Abil7bih7dHlwZToiem9vbWVuZCJ9KX1mdW5jdGlvbiBsKCl7ZnVuY3Rpb24gbigp%0Ae3M9MSx1KFZvLm1vdXNlKHIpLGgpLGEobCl9ZnVuY3Rpb24gZSgpe2Yub24oQyxu%0AdWxsKS5vbihOLG51bGwpLGcocyYmVm8uZXZlbnQudGFyZ2V0PT09aSksYyhsKX12%0AYXIgcj10aGlzLGk9Vm8uZXZlbnQudGFyZ2V0LGw9TC5vZihyLGFyZ3VtZW50cyks%0Acz0wLGY9Vm8uc2VsZWN0KEpvKS5vbihDLG4pLm9uKE4sZSksaD10KFZvLm1vdXNl%0AKHIpKSxnPUkoKTtILmNhbGwociksbyhsKX1mdW5jdGlvbiBzKCl7ZnVuY3Rpb24g%0Abigpe3ZhciBuPVZvLnRvdWNoZXMoZyk7cmV0dXJuIGg9Uy5rLG4uZm9yRWFjaChm%0AdW5jdGlvbihuKXtuLmlkZW50aWZpZXIgaW4gdiYmKHZbbi5pZGVudGlmaWVyXT10%0AKG4pKX0pLG59ZnVuY3Rpb24gZSgpe3ZhciB0PVZvLmV2ZW50LnRhcmdldDtWby5z%0AZWxlY3QodCkub24oTSxpKS5vbihfLGYpLGIucHVzaCh0KTtmb3IodmFyIGU9Vm8u%0AZXZlbnQuY2hhbmdlZFRvdWNoZXMsbz0wLGM9ZS5sZW5ndGg7Yz5vOysrbyl2W2Vb%0Ab10uaWRlbnRpZmllcl09bnVsbDt2YXIgbD1uKCkscz1EYXRlLm5vdygpO2lmKDE9%0APT1sLmxlbmd0aCl7aWYoNTAwPnMtbSl7dmFyIGg9bFswXSxnPXZbaC5pZGVudGlm%0AaWVyXTtyKDIqUy5rKSx1KGgsZykseSgpLGEocCl9bT1zfWVsc2UgaWYobC5sZW5n%0AdGg+MSl7dmFyIGg9bFswXSx4PWxbMV0sdz1oWzBdLXhbMF0saz1oWzFdLXhbMV07%0AZD13KncrayprfX1mdW5jdGlvbiBpKCl7Zm9yKHZhciBuLHQsZSxpLG89Vm8udG91%0AY2hlcyhnKSxjPTAsbD1vLmxlbmd0aDtsPmM7KytjLGk9bnVsbClpZihlPW9bY10s%0AaT12W2UuaWRlbnRpZmllcl0pe2lmKHQpYnJlYWs7bj1lLHQ9aX1pZihpKXt2YXIg%0Acz0ocz1lWzBdLW5bMF0pKnMrKHM9ZVsxXS1uWzFdKSpzLGY9ZCYmTWF0aC5zcXJ0%0AKHMvZCk7bj1bKG5bMF0rZVswXSkvMiwoblsxXStlWzFdKS8yXSx0PVsodFswXStp%0AWzBdKS8yLCh0WzFdK2lbMV0pLzJdLHIoZipoKX1tPW51bGwsdShuLHQpLGEocCl9%0AZnVuY3Rpb24gZigpe2lmKFZvLmV2ZW50LnRvdWNoZXMubGVuZ3RoKXtmb3IodmFy%0AIHQ9Vm8uZXZlbnQuY2hhbmdlZFRvdWNoZXMsZT0wLHI9dC5sZW5ndGg7cj5lOysr%0AZSlkZWxldGUgdlt0W2VdLmlkZW50aWZpZXJdO2Zvcih2YXIgdSBpbiB2KXJldHVy%0AbiB2b2lkIG4oKX1Wby5zZWxlY3RBbGwoYikub24oeCxudWxsKSx3Lm9uKEEsbCku%0Ab24oeixzKSxrKCksYyhwKX12YXIgaCxnPXRoaXMscD1MLm9mKGcsYXJndW1lbnRz%0AKSx2PXt9LGQ9MCx4PSIuem9vbS0iK1ZvLmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBd%0ALmlkZW50aWZpZXIsTT0idG91Y2htb3ZlIit4LF89InRvdWNoZW5kIit4LGI9W10s%0Adz1Wby5zZWxlY3QoZyksaz1JKCk7SC5jYWxsKGcpLGUoKSxvKHApLHcub24oQSxu%0AdWxsKS5vbih6LGUpfWZ1bmN0aW9uIGYoKXt2YXIgbj1MLm9mKHRoaXMsYXJndW1l%0AbnRzKTtkP2NsZWFyVGltZW91dChkKTooZz10KHA9dnx8Vm8ubW91c2UodGhpcykp%0ALEguY2FsbCh0aGlzKSxvKG4pKSxkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkPW51%0AbGwsYyhuKX0sNTApLHkoKSxyKE1hdGgucG93KDIsLjAwMipxYSgpKSpTLmspLHUo%0AcCxnKSxhKG4pfWZ1bmN0aW9uIGgoKXt2YXIgbj1MLm9mKHRoaXMsYXJndW1lbnRz%0AKSxlPVZvLm1vdXNlKHRoaXMpLGk9dChlKSxsPU1hdGgubG9nKFMuaykvTWF0aC5M%0ATjI7byhuKSxyKE1hdGgucG93KDIsVm8uZXZlbnQuc2hpZnRLZXk/TWF0aC5jZWls%0AKGwpLTE6TWF0aC5mbG9vcihsKSsxKSksdShlLGkpLGEobiksYyhuKX12YXIgZyxw%0ALHYsZCxtLHgsXyxiLHcsUz17eDowLHk6MCxrOjF9LGs9Wzk2MCw1MDBdLEU9UmEs%0AQT0ibW91c2Vkb3duLnpvb20iLEM9Im1vdXNlbW92ZS56b29tIixOPSJtb3VzZXVw%0ALnpvb20iLHo9InRvdWNoc3RhcnQuem9vbSIsTD1NKG4sInpvb21zdGFydCIsInpv%0Ab20iLCJ6b29tZW5kIik7cmV0dXJuIG4uZXZlbnQ9ZnVuY3Rpb24obil7bi5lYWNo%0AKGZ1bmN0aW9uKCl7dmFyIG49TC5vZih0aGlzLGFyZ3VtZW50cyksdD1TO2tsP1Zv%0ALnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuem9vbSIsZnVu%0AY3Rpb24oKXtTPXRoaXMuX19jaGFydF9ffHx7eDowLHk6MCxrOjF9LG8obil9KS50%0Ad2Vlbigiem9vbTp6b29tIixmdW5jdGlvbigpe3ZhciBlPWtbMF0scj1rWzFdLHU9%0AZS8yLGk9ci8yLG89Vm8uaW50ZXJwb2xhdGVab29tKFsodS1TLngpL1MuaywoaS1T%0ALnkpL1MuayxlL1Mua10sWyh1LXQueCkvdC5rLChpLXQueSkvdC5rLGUvdC5rXSk7%0AcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPW8odCksYz1lL3JbMl07dGhpcy5fX2No%0AYXJ0X189Uz17eDp1LXJbMF0qYyx5OmktclsxXSpjLGs6Y30sYShuKX19KS5lYWNo%0AKCJlbmQuem9vbSIsZnVuY3Rpb24oKXtjKG4pfSk6KHRoaXMuX19jaGFydF9fPVMs%0AbyhuKSxhKG4pLGMobikpfSl9LG4udHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhTPXt4Oit0WzBdLHk6K3RbMV0sazpTLmt9LGko%0AKSxuKTpbUy54LFMueV19LG4uc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KFM9e3g6Uy54LHk6Uy55LGs6K3R9LGkoKSxuKTpTLmt9LG4u%0Ac2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/%0AKEU9bnVsbD09dD9SYTpbK3RbMF0sK3RbMV1dLG4pOkV9LG4uY2VudGVyPWZ1bmN0%0AaW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXQmJlsrdFswXSwrdFsx%0AXV0sbik6dn0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyhrPXQmJlsrdFswXSwrdFsxXV0sbik6a30sbi54PWZ1bmN0aW9uKHQpe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPXQseD10LmNvcHkoKSxTPXt4OjAseTow%0ALGs6MX0sbik6X30sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyh3PXQsYj10LmNvcHkoKSxTPXt4OjAseTowLGs6MX0sbik6d30sVm8ucmVi%0AaW5kKG4sTCwib24iKX07dmFyIHFhLFJhPVswLDEvMF0sRGE9Im9ud2hlZWwiaW4g%0AQm8/KHFhPWZ1bmN0aW9uKCl7cmV0dXJuLVZvLmV2ZW50LmRlbHRhWSooVm8uZXZl%0AbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiBC%0Abz8ocWE9ZnVuY3Rpb24oKXtyZXR1cm4gVm8uZXZlbnQud2hlZWxEZWx0YX0sIm1v%0AdXNld2hlZWwiKToocWE9ZnVuY3Rpb24oKXtyZXR1cm4tVm8uZXZlbnQuZGV0YWls%0AfSwiTW96TW91c2VQaXhlbFNjcm9sbCIpO1ZvLmNvbG9yPWV0LGV0LnByb3RvdHlw%0AZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifSxWby5o%0Ac2w9cnQ7dmFyIFBhPXJ0LnByb3RvdHlwZT1uZXcgZXQ7UGEuYnJpZ2h0ZXI9ZnVu%0AY3Rpb24obil7cmV0dXJuIG49TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9u%0AOjEpLG5ldyBydCh0aGlzLmgsdGhpcy5zLHRoaXMubC9uKX0sUGEuZGFya2VyPWZ1%0AbmN0aW9uKG4pe3JldHVybiBuPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/%0AbjoxKSxuZXcgcnQodGhpcy5oLHRoaXMucyxuKnRoaXMubCl9LFBhLnJnYj1mdW5j%0AdGlvbigpe3JldHVybiB1dCh0aGlzLmgsdGhpcy5zLHRoaXMubCl9LFZvLmhjbD1p%0AdDt2YXIgVWE9aXQucHJvdG90eXBlPW5ldyBldDtVYS5icmlnaHRlcj1mdW5jdGlv%0AbihuKXtyZXR1cm4gbmV3IGl0KHRoaXMuaCx0aGlzLmMsTWF0aC5taW4oMTAwLHRo%0AaXMubCtqYSooYXJndW1lbnRzLmxlbmd0aD9uOjEpKSl9LFVhLmRhcmtlcj1mdW5j%0AdGlvbihuKXtyZXR1cm4gbmV3IGl0KHRoaXMuaCx0aGlzLmMsTWF0aC5tYXgoMCx0%0AaGlzLmwtamEqKGFyZ3VtZW50cy5sZW5ndGg/bjoxKSkpfSxVYS5yZ2I9ZnVuY3Rp%0Ab24oKXtyZXR1cm4gb3QodGhpcy5oLHRoaXMuYyx0aGlzLmwpLnJnYigpfSxWby5s%0AYWI9YXQ7dmFyIGphPTE4LEhhPS45NTA0NyxGYT0xLE9hPTEuMDg4ODMsWWE9YXQu%0AcHJvdG90eXBlPW5ldyBldDtZYS5icmlnaHRlcj1mdW5jdGlvbihuKXtyZXR1cm4g%0AbmV3IGF0KE1hdGgubWluKDEwMCx0aGlzLmwramEqKGFyZ3VtZW50cy5sZW5ndGg/%0AbjoxKSksdGhpcy5hLHRoaXMuYil9LFlhLmRhcmtlcj1mdW5jdGlvbihuKXtyZXR1%0Acm4gbmV3IGF0KE1hdGgubWF4KDAsdGhpcy5sLWphKihhcmd1bWVudHMubGVuZ3Ro%0AP246MSkpLHRoaXMuYSx0aGlzLmIpfSxZYS5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4g%0AY3QodGhpcy5sLHRoaXMuYSx0aGlzLmIpfSxWby5yZ2I9Z3Q7dmFyIElhPWd0LnBy%0Ab3RvdHlwZT1uZXcgZXQ7SWEuYnJpZ2h0ZXI9ZnVuY3Rpb24obil7bj1NYXRoLnBv%0AdyguNyxhcmd1bWVudHMubGVuZ3RoP246MSk7dmFyIHQ9dGhpcy5yLGU9dGhpcy5n%0ALHI9dGhpcy5iLHU9MzA7cmV0dXJuIHR8fGV8fHI/KHQmJnU+dCYmKHQ9dSksZSYm%0AdT5lJiYoZT11KSxyJiZ1PnImJihyPXUpLG5ldyBndChNYXRoLm1pbigyNTUsdC9u%0AKSxNYXRoLm1pbigyNTUsZS9uKSxNYXRoLm1pbigyNTUsci9uKSkpOm5ldyBndCh1%0ALHUsdSl9LElhLmRhcmtlcj1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLnBvdygu%0ANyxhcmd1bWVudHMubGVuZ3RoP246MSksbmV3IGd0KG4qdGhpcy5yLG4qdGhpcy5n%0ALG4qdGhpcy5iKX0sSWEuaHNsPWZ1bmN0aW9uKCl7cmV0dXJuIHl0KHRoaXMucix0%0AaGlzLmcsdGhpcy5iKX0sSWEudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iIyIr%0AZHQodGhpcy5yKStkdCh0aGlzLmcpK2R0KHRoaXMuYil9O3ZhciBaYT1Wby5tYXAo%0Ae2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2%0ANTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYx%0AMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3%0ANzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0%0ALGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNl%0AOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5m%0AbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQy%0AMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJr%0AZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoy%0ANTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21h%0AZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6%0AMTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFy%0Aa3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVi%0AbHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6%0AMzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxk%0AZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgy%0ANjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6%0AMTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0%0AMixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRl%0AOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6%0AODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0%0AMjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5y%0AZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6%0AMTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2%0ANSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRi%0AbHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1%0ANTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4%0AMjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0%0AcGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVu%0AOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6Nzgz%0AMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0%0ANzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMz%0AMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4%0AODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVk%0AaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNl%0AYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3By%0AaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlv%0AbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbTox%0ANjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2%0AYWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2%0AZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFu%0AZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2%0ANTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYs%0AcGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNo%0AcHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bTox%0ANDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlZDox%0ANjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2Fk%0AZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAz%0AMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYTox%0AMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1%0AZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNu%0Ab3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAs%0AdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86%0AMTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0%0AOjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVs%0AbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSk7WmEuZm9yRWFjaChm%0AdW5jdGlvbihuLHQpe1phLnNldChuLHB0KHQpKX0pLFZvLmZ1bmN0b3I9YnQsVm8u%0AeGhyPVN0KHd0KSxWby5kc3Y9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKG4sZSxp%0AKXthcmd1bWVudHMubGVuZ3RoPDMmJihpPWUsZT1udWxsKTt2YXIgbz1rdChuLHQs%0AbnVsbD09ZT9yOnUoZSksaSk7cmV0dXJuIG8ucm93PWZ1bmN0aW9uKG4pe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoP28ucmVzcG9uc2UobnVsbD09KGU9bik/cjp1KG4p%0AKTplfSxvfWZ1bmN0aW9uIHIobil7cmV0dXJuIGUucGFyc2Uobi5yZXNwb25zZVRl%0AeHQpfWZ1bmN0aW9uIHUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLnBh%0AcnNlKHQucmVzcG9uc2VUZXh0LG4pfX1mdW5jdGlvbiBpKHQpe3JldHVybiB0Lm1h%0AcChvKS5qb2luKG4pfWZ1bmN0aW9uIG8obil7cmV0dXJuIGEudGVzdChuKT8nIicr%0Abi5yZXBsYWNlKC9cIi9nLCciIicpKyciJzpufXZhciBhPW5ldyBSZWdFeHAoJ1si%0AJytuKyJcbl0iKSxjPW4uY2hhckNvZGVBdCgwKTtyZXR1cm4gZS5wYXJzZT1mdW5j%0AdGlvbihuLHQpe3ZhciByO3JldHVybiBlLnBhcnNlUm93cyhuLGZ1bmN0aW9uKG4s%0AZSl7aWYocilyZXR1cm4gcihuLGUtMSk7dmFyIHU9bmV3IEZ1bmN0aW9uKCJkIiwi%0AcmV0dXJuIHsiK24ubWFwKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIEpTT04uc3RyaW5n%0AaWZ5KG4pKyI6IGRbIit0KyJdIn0pLmpvaW4oIiwiKSsifSIpO3I9dD9mdW5jdGlv%0AbihuLGUpe3JldHVybiB0KHUobiksZSl9OnV9KX0sZS5wYXJzZVJvd3M9ZnVuY3Rp%0Ab24obix0KXtmdW5jdGlvbiBlKCl7aWYocz49bClyZXR1cm4gbztpZih1KXJldHVy%0AbiB1PSExLGk7dmFyIHQ9cztpZigzND09PW4uY2hhckNvZGVBdCh0KSl7Zm9yKHZh%0AciBlPXQ7ZSsrPGw7KWlmKDM0PT09bi5jaGFyQ29kZUF0KGUpKXtpZigzNCE9PW4u%0AY2hhckNvZGVBdChlKzEpKWJyZWFrOysrZX1zPWUrMjt2YXIgcj1uLmNoYXJDb2Rl%0AQXQoZSsxKTtyZXR1cm4gMTM9PT1yPyh1PSEwLDEwPT09bi5jaGFyQ29kZUF0KGUr%0AMikmJisrcyk6MTA9PT1yJiYodT0hMCksbi5zbGljZSh0KzEsZSkucmVwbGFjZSgv%0AIiIvZywnIicpfWZvcig7bD5zOyl7dmFyIHI9bi5jaGFyQ29kZUF0KHMrKyksYT0x%0AO2lmKDEwPT09cil1PSEwO2Vsc2UgaWYoMTM9PT1yKXU9ITAsMTA9PT1uLmNoYXJD%0Ab2RlQXQocykmJigrK3MsKythKTtlbHNlIGlmKHIhPT1jKWNvbnRpbnVlO3JldHVy%0AbiBuLnNsaWNlKHQscy1hKX1yZXR1cm4gbi5zbGljZSh0KX1mb3IodmFyIHIsdSxp%0APXt9LG89e30sYT1bXSxsPW4ubGVuZ3RoLHM9MCxmPTA7KHI9ZSgpKSE9PW87KXtm%0Ab3IodmFyIGg9W107ciE9PWkmJnIhPT1vOyloLnB1c2gocikscj1lKCk7KCF0fHwo%0AaD10KGgsZisrKSkpJiZhLnB1c2goaCl9cmV0dXJuIGF9LGUuZm9ybWF0PWZ1bmN0%0AaW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodFswXSkpcmV0dXJuIGUuZm9ybWF0Um93%0Acyh0KTt2YXIgcj1uZXcgaCx1PVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24o%0Abil7Zm9yKHZhciB0IGluIG4pci5oYXModCl8fHUucHVzaChyLmFkZCh0KSl9KSxb%0AdS5tYXAobykuam9pbihuKV0uY29uY2F0KHQubWFwKGZ1bmN0aW9uKHQpe3JldHVy%0AbiB1Lm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbyh0W25dKX0pLmpvaW4obil9KSku%0Aam9pbigiXG4iKX0sZS5mb3JtYXRSb3dzPWZ1bmN0aW9uKG4pe3JldHVybiBuLm1h%0AcChpKS5qb2luKCJcbiIpfSxlfSxWby5jc3Y9Vm8uZHN2KCIsIiwidGV4dC9jc3Yi%0AKSxWby50c3Y9Vm8uZHN2KCIJIiwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIp%0AO3ZhciBWYSxYYSwkYSxCYSxXYSxKYT1Kb1twKEpvLCJyZXF1ZXN0QW5pbWF0aW9u%0ARnJhbWUiKV18fGZ1bmN0aW9uKG4pe3NldFRpbWVvdXQobiwxNyl9O1ZvLnRpbWVy%0APWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoOzI+ciYmKHQ9%0AMCksMz5yJiYoZT1EYXRlLm5vdygpKTt2YXIgdT1lK3QsaT17YzpuLHQ6dSxmOiEx%0ALG46bnVsbH07WGE/WGEubj1pOlZhPWksWGE9aSwkYXx8KEJhPWNsZWFyVGltZW91%0AdChCYSksJGE9MSxKYShDdCkpfSxWby50aW1lci5mbHVzaD1mdW5jdGlvbigpe050%0AKCksenQoKX0sVm8ucm91bmQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gdD9NYXRoLnJv%0AdW5kKG4qKHQ9TWF0aC5wb3coMTAsdCkpKS90Ok1hdGgucm91bmQobil9O3ZhciBH%0AYT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0i%0ALCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXS5tYXAoVHQpO1ZvLmZvcm1hdFByZWZp%0AeD1mdW5jdGlvbihuLHQpe3ZhciBlPTA7cmV0dXJuIG4mJigwPm4mJihuKj0tMSks%0AdCYmKG49Vm8ucm91bmQobixMdChuLHQpKSksZT0xK01hdGguZmxvb3IoMWUtMTIr%0ATWF0aC5sb2cobikvTWF0aC5MTjEwKSxlPU1hdGgubWF4KC0yNCxNYXRoLm1pbigy%0ANCwzKk1hdGguZmxvb3IoKGUtMSkvMykpKSksR2FbOCtlLzNdfTt2YXIgS2E9Lyg/%0AOihbXntdKT8oWzw+PV5dKSk/KFsrXC0gXSk/KFskI10pPygwKT8oXGQrKT8oLCk/%0AKFwuLT9cZCspPyhbYS16JV0pPy9pLFFhPVZvLm1hcCh7YjpmdW5jdGlvbihuKXty%0AZXR1cm4gbi50b1N0cmluZygyKX0sYzpmdW5jdGlvbihuKXtyZXR1cm4gU3RyaW5n%0ALmZyb21DaGFyQ29kZShuKX0sbzpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmlu%0AZyg4KX0seDpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmluZygxNil9LFg6ZnVu%0AY3Rpb24obil7cmV0dXJuIG4udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LGc6%0AZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b1ByZWNpc2lvbih0KX0sZTpmdW5jdGlv%0AbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0%0AKXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxyOmZ1bmN0aW9uKG4sdCl7cmV0dXJuKG49%0AVm8ucm91bmQobixMdChuLHQpKSkudG9GaXhlZChNYXRoLm1heCgwLE1hdGgubWlu%0AKDIwLEx0KG4qKDErMWUtMTUpLHQpKSkpfX0pLG5jPVZvLnRpbWU9e30sdGM9RGF0%0AZTtEdC5wcm90b3R5cGU9e2dldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f%0ALmdldFVUQ0RhdGUoKX0sZ2V0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5n%0AZXRVVENEYXkoKX0sZ2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f%0ALmdldFVUQ0Z1bGxZZWFyKCl9LGdldEhvdXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRo%0AaXMuXy5nZXRVVENIb3VycygpfSxnZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXty%0AZXR1cm4gdGhpcy5fLmdldFVUQ01pbGxpc2Vjb25kcygpfSxnZXRNaW51dGVzOmZ1%0AbmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaW51dGVzKCl9LGdldE1vbnRo%0AOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNb250aCgpfSxnZXRTZWNv%0AbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENTZWNvbmRzKCl9LGdl%0AdFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFRpbWUoKX0sZ2V0VGlt%0AZXpvbmVPZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdmFsdWVPZjpmdW5jdGlv%0Abigpe3JldHVybiB0aGlzLl8udmFsdWVPZigpfSxzZXREYXRlOmZ1bmN0aW9uKCl7%0AZWMuc2V0VVRDRGF0ZS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RGF5OmZ1%0AbmN0aW9uKCl7ZWMuc2V0VVRDRGF5LmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxz%0AZXRGdWxsWWVhcjpmdW5jdGlvbigpe2VjLnNldFVUQ0Z1bGxZZWFyLmFwcGx5KHRo%0AaXMuXyxhcmd1bWVudHMpfSxzZXRIb3VyczpmdW5jdGlvbigpe2VjLnNldFVUQ0hv%0AdXJzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaWxsaXNlY29uZHM6ZnVu%0AY3Rpb24oKXtlYy5zZXRVVENNaWxsaXNlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3Vt%0AZW50cyl9LHNldE1pbnV0ZXM6ZnVuY3Rpb24oKXtlYy5zZXRVVENNaW51dGVzLmFw%0AcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNb250aDpmdW5jdGlvbigpe2VjLnNl%0AdFVUQ01vbnRoLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRTZWNvbmRzOmZ1%0AbmN0aW9uKCl7ZWMuc2V0VVRDU2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRz%0AKX0sc2V0VGltZTpmdW5jdGlvbigpe2VjLnNldFRpbWUuYXBwbHkodGhpcy5fLGFy%0AZ3VtZW50cyl9fTt2YXIgZWM9RGF0ZS5wcm90b3R5cGU7bmMueWVhcj1QdChmdW5j%0AdGlvbihuKXtyZXR1cm4gbj1uYy5kYXkobiksbi5zZXRNb250aCgwLDEpLG59LGZ1%0AbmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1%0AbmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KSxuYy55ZWFycz1uYy55%0AZWFyLnJhbmdlLG5jLnllYXJzLnV0Yz1uYy55ZWFyLnV0Yy5yYW5nZSxuYy5kYXk9%0AUHQoZnVuY3Rpb24obil7dmFyIHQ9bmV3IHRjKDJlMywwKTtyZXR1cm4gdC5zZXRG%0AdWxsWWVhcihuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgp%0AKSx0fSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSt0KX0sZnVu%0AY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF0ZSgpLTF9KSxuYy5kYXlzPW5jLmRheS5y%0AYW5nZSxuYy5kYXlzLnV0Yz1uYy5kYXkudXRjLnJhbmdlLG5jLmRheU9mWWVhcj1m%0AdW5jdGlvbihuKXt2YXIgdD1uYy55ZWFyKG4pO3JldHVybiBNYXRoLmZsb29yKChu%0ALXQtNmU0KihuLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNl%0AdCgpKSkvODY0ZTUpfSxbInN1bmRheSIsIm1vbmRheSIsInR1ZXNkYXkiLCJ3ZWRu%0AZXNkYXkiLCJ0aHVyc2RheSIsImZyaWRheSIsInNhdHVyZGF5Il0uZm9yRWFjaChm%0AdW5jdGlvbihuLHQpe3Q9Ny10O3ZhciBlPW5jW25dPVB0KGZ1bmN0aW9uKG4pe3Jl%0AdHVybihuPW5jLmRheShuKSkuc2V0RGF0ZShuLmdldERhdGUoKS0obi5nZXREYXko%0AKSt0KSU3KSxufSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSs3%0AKk1hdGguZmxvb3IodCkpfSxmdW5jdGlvbihuKXt2YXIgZT1uYy55ZWFyKG4pLmdl%0AdERheSgpO3JldHVybiBNYXRoLmZsb29yKChuYy5kYXlPZlllYXIobikrKGUrdCkl%0ANykvNyktKGUhPT10KX0pO25jW24rInMiXT1lLnJhbmdlLG5jW24rInMiXS51dGM9%0AZS51dGMucmFuZ2UsbmNbbisiT2ZZZWFyIl09ZnVuY3Rpb24obil7dmFyIGU9bmMu%0AeWVhcihuKS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigobmMuZGF5T2ZZZWFy%0AKG4pKyhlK3QpJTcpLzcpfX0pLG5jLndlZWs9bmMuc3VuZGF5LG5jLndlZWtzPW5j%0ALnN1bmRheS5yYW5nZSxuYy53ZWVrcy51dGM9bmMuc3VuZGF5LnV0Yy5yYW5nZSxu%0AYy53ZWVrT2ZZZWFyPW5jLnN1bmRheU9mWWVhcjt2YXIgcmM9eyItIjoiIixfOiIg%0AIiwwOiIwIn0sdWM9L15ccypcZCsvLGljPS9eJS87Vm8ubG9jYWxlPWZ1bmN0aW9u%0AKG4pe3JldHVybntudW1iZXJGb3JtYXQ6cXQobiksdGltZUZvcm1hdDpqdChuKX19%0AO3ZhciBvYz1Wby5sb2NhbGUoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3Jv%0AdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLGRhdGVUaW1lOiIlYSAlYiAlZSAl%0AWCAlWSIsZGF0ZToiJW0vJWQvJVkiLHRpbWU6IiVIOiVNOiVTIixwZXJpb2RzOlsi%0AQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2Vk%0AbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5%0AczpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1v%0AbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXki%0ALCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJO%0Ab3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJN%0AYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJO%0Ab3YiLCJEZWMiXX0pO1ZvLmZvcm1hdD1vYy5udW1iZXJGb3JtYXQsVm8uZ2VvPXt9%0ALGllLnByb3RvdHlwZT17czowLHQ6MCxhZGQ6ZnVuY3Rpb24obil7b2Uobix0aGlz%0ALnQsYWMpLG9lKGFjLnMsdGhpcy5zLHRoaXMpLHRoaXMucz90aGlzLnQrPWFjLnQ6%0AdGhpcy5zPWFjLnR9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSx2%0AYWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBhYz1uZXcgaWU7%0AVm8uZ2VvLnN0cmVhbT1mdW5jdGlvbihuLHQpe24mJmNjLmhhc093blByb3BlcnR5%0AKG4udHlwZSk/Y2Nbbi50eXBlXShuLHQpOmFlKG4sdCl9O3ZhciBjYz17RmVhdHVy%0AZTpmdW5jdGlvbihuLHQpe2FlKG4uZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0%0AaW9uOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uZmVhdHVyZXMscj0tMSx1PWUu%0AbGVuZ3RoOysrcjx1OylhZShlW3JdLmdlb21ldHJ5LHQpfX0sbGM9e1NwaGVyZTpm%0AdW5jdGlvbihuLHQpe3Quc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKG4sdCl7bj1u%0ALmNvb3JkaW5hdGVzLHQucG9pbnQoblswXSxuWzFdLG5bMl0pfSxNdWx0aVBvaW50%0AOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRpbmF0ZXMscj0tMSx1PWUu%0AbGVuZ3RoOysrcjx1OyluPWVbcl0sdC5wb2ludChuWzBdLG5bMV0sblsyXSl9LExp%0AbmVTdHJpbmc6ZnVuY3Rpb24obix0KXtjZShuLmNvb3JkaW5hdGVzLHQsMCl9LE11%0AbHRpTGluZVN0cmluZzpmdW5jdGlvbihuLHQpe2Zvcih2YXIgZT1uLmNvb3JkaW5h%0AdGVzLHI9LTEsdT1lLmxlbmd0aDsrK3I8dTspY2UoZVtyXSx0LDApfSxQb2x5Z29u%0AOmZ1bmN0aW9uKG4sdCl7bGUobi5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29u%0AOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRpbmF0ZXMscj0tMSx1PWUu%0AbGVuZ3RoOysrcjx1OylsZShlW3JdLHQpfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVu%0AY3Rpb24obix0KXtmb3IodmFyIGU9bi5nZW9tZXRyaWVzLHI9LTEsdT1lLmxlbmd0%0AaDsrK3I8dTspYWUoZVtyXSx0KX19O1ZvLmdlby5hcmVhPWZ1bmN0aW9uKG4pe3Jl%0AdHVybiBzYz0wLFZvLmdlby5zdHJlYW0obixoYyksc2N9O3ZhciBzYyxmYz1uZXcg%0AaWUsaGM9e3NwaGVyZTpmdW5jdGlvbigpe3NjKz00KndhfSxwb2ludDp2LGxpbmVT%0AdGFydDp2LGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmYy5yZXNl%0AdCgpLGhjLmxpbmVTdGFydD1zZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciBu%0APTIqZmM7c2MrPTA+bj80KndhK246bixoYy5saW5lU3RhcnQ9aGMubGluZUVuZD1o%0AYy5wb2ludD12fX07Vm8uZ2VvLmJvdW5kcz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4o%0Abix0KXt4LnB1c2goTT1bcz1uLGg9bl0pLGY+dCYmKGY9dCksdD5nJiYoZz10KX1m%0AdW5jdGlvbiB0KHQsZSl7dmFyIHI9ZmUoW3QqQ2EsZSpDYV0pO2lmKG0pe3ZhciB1%0APWdlKG0sciksaT1bdVsxXSwtdVswXSwwXSxvPWdlKGksdSk7ZGUobyksbz1tZShv%0AKTt2YXIgYz10LXAsbD1jPjA/MTotMSx2PW9bMF0qTmEqbCxkPWlhKGMpPjE4MDtp%0AZihkXih2PmwqcCYmbCp0PnYpKXt2YXIgeT1vWzFdKk5hO3k+ZyYmKGc9eSl9ZWxz%0AZSBpZih2PSh2KzM2MCklMzYwLTE4MCxkXih2PmwqcCYmbCp0PnYpKXt2YXIgeT0t%0Ab1sxXSpOYTtmPnkmJihmPXkpfWVsc2UgZj5lJiYoZj1lKSxlPmcmJihnPWUpO2Q/%0AcD50P2Eocyx0KT5hKHMsaCkmJihoPXQpOmEodCxoKT5hKHMsaCkmJihzPXQpOmg+%0APXM/KHM+dCYmKHM9dCksdD5oJiYoaD10KSk6dD5wP2Eocyx0KT5hKHMsaCkmJiho%0APXQpOmEodCxoKT5hKHMsaCkmJihzPXQpfWVsc2Ugbih0LGUpO209cixwPXR9ZnVu%0AY3Rpb24gZSgpe18ucG9pbnQ9dH1mdW5jdGlvbiByKCl7TVswXT1zLE1bMV09aCxf%0ALnBvaW50PW4sbT1udWxsfWZ1bmN0aW9uIHUobixlKXtpZihtKXt2YXIgcj1uLXA7%0AeSs9aWEocik+MTgwP3IrKHI+MD8zNjA6LTM2MCk6cn1lbHNlIHY9bixkPWU7aGMu%0AcG9pbnQobixlKSx0KG4sZSl9ZnVuY3Rpb24gaSgpe2hjLmxpbmVTdGFydCgpfWZ1%0AbmN0aW9uIG8oKXt1KHYsZCksaGMubGluZUVuZCgpLGlhKHkpPkVhJiYocz0tKGg9%0AMTgwKSksTVswXT1zLE1bMV09aCxtPW51bGx9ZnVuY3Rpb24gYShuLHQpe3JldHVy%0Abih0LT1uKTwwP3QrMzYwOnR9ZnVuY3Rpb24gYyhuLHQpe3JldHVybiBuWzBdLXRb%0AMF19ZnVuY3Rpb24gbChuLHQpe3JldHVybiB0WzBdPD10WzFdP3RbMF08PW4mJm48%0APXRbMV06bjx0WzBdfHx0WzFdPG59dmFyIHMsZixoLGcscCx2LGQsbSx5LHgsTSxf%0APXtwb2ludDpuLGxpbmVTdGFydDplLGxpbmVFbmQ6cixwb2x5Z29uU3RhcnQ6ZnVu%0AY3Rpb24oKXtfLnBvaW50PXUsXy5saW5lU3RhcnQ9aSxfLmxpbmVFbmQ9byx5PTAs%0AaGMucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtoYy5wb2x5%0AZ29uRW5kKCksXy5wb2ludD1uLF8ubGluZVN0YXJ0PWUsXy5saW5lRW5kPXIsMD5m%0AYz8ocz0tKGg9MTgwKSxmPS0oZz05MCkpOnk+RWE/Zz05MDotRWE+eSYmKGY9LTkw%0AKSxNWzBdPXMsTVsxXT1ofX07cmV0dXJuIGZ1bmN0aW9uKG4pe2c9aD0tKHM9Zj0x%0ALzApLHg9W10sVm8uZ2VvLnN0cmVhbShuLF8pO3ZhciB0PXgubGVuZ3RoO2lmKHQp%0Ae3guc29ydChjKTtmb3IodmFyIGUscj0xLHU9eFswXSxpPVt1XTt0PnI7KytyKWU9%0AeFtyXSxsKGVbMF0sdSl8fGwoZVsxXSx1KT8oYSh1WzBdLGVbMV0pPmEodVswXSx1%0AWzFdKSYmKHVbMV09ZVsxXSksYShlWzBdLHVbMV0pPmEodVswXSx1WzFdKSYmKHVb%0AMF09ZVswXSkpOmkucHVzaCh1PWUpO2Zvcih2YXIgbyxlLHA9LTEvMCx0PWkubGVu%0AZ3RoLTEscj0wLHU9aVt0XTt0Pj1yO3U9ZSwrK3IpZT1pW3JdLChvPWEodVsxXSxl%0AWzBdKSk+cCYmKHA9byxzPWVbMF0saD11WzFdKQp9cmV0dXJuIHg9TT1udWxsLDEv%0AMD09PXN8fDEvMD09PWY/W1swLzAsMC8wXSxbMC8wLDAvMF1dOltbcyxmXSxbaCxn%0AXV19fSgpLFZvLmdlby5jZW50cm9pZD1mdW5jdGlvbihuKXtnYz1wYz12Yz1kYz1t%0AYz15Yz14Yz1NYz1fYz1iYz13Yz0wLFZvLmdlby5zdHJlYW0obixTYyk7dmFyIHQ9%0AX2MsZT1iYyxyPXdjLHU9dCp0K2UqZStyKnI7cmV0dXJuIEFhPnUmJih0PXljLGU9%0AeGMscj1NYyxFYT5wYyYmKHQ9dmMsZT1kYyxyPW1jKSx1PXQqdCtlKmUrcipyLEFh%0APnUpP1swLzAsMC8wXTpbTWF0aC5hdGFuMihlLHQpKk5hLEcoci9NYXRoLnNxcnQo%0AdSkpKk5hXX07dmFyIGdjLHBjLHZjLGRjLG1jLHljLHhjLE1jLF9jLGJjLHdjLFNj%0APXtzcGhlcmU6dixwb2ludDp4ZSxsaW5lU3RhcnQ6X2UsbGluZUVuZDpiZSxwb2x5%0AZ29uU3RhcnQ6ZnVuY3Rpb24oKXtTYy5saW5lU3RhcnQ9d2V9LHBvbHlnb25FbmQ6%0AZnVuY3Rpb24oKXtTYy5saW5lU3RhcnQ9X2V9fSxrYz1DZShTZSxUZSxSZSxbLXdh%0ALC13YS8yXSksRWM9MWU5O1ZvLmdlby5jbGlwRXh0ZW50PWZ1bmN0aW9uKCl7dmFy%0AIG4sdCxlLHIsdSxpLG89e3N0cmVhbTpmdW5jdGlvbihuKXtyZXR1cm4gdSYmKHUu%0AdmFsaWQ9ITEpLHU9aShuKSx1LnZhbGlkPSEwLHV9LGV4dGVudDpmdW5jdGlvbihh%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1qZShuPSthWzBdWzBdLHQ9K2Fb%0AMF1bMV0sZT0rYVsxXVswXSxyPSthWzFdWzFdKSx1JiYodS52YWxpZD0hMSx1PW51%0AbGwpLG8pOltbbix0XSxbZSxyXV19fTtyZXR1cm4gby5leHRlbnQoW1swLDBdLFs5%0ANjAsNTAwXV0pfSwoVm8uZ2VvLmNvbmljRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0%0AdXJuIEZlKE9lKX0pLnJhdz1PZSxWby5nZW8uYWxiZXJzPWZ1bmN0aW9uKCl7cmV0%0AdXJuIFZvLmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbOTYsMF0pLmNlbnRl%0AcihbLS42LDM4LjddKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzAp%0AfSxWby5nZW8uYWxiZXJzVXNhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXt2YXIg%0AaT1uWzBdLG89blsxXTtyZXR1cm4gdD1udWxsLGUoaSxvKSx0fHwocihpLG8pLHQp%0AfHx1KGksbyksdH12YXIgdCxlLHIsdSxpPVZvLmdlby5hbGJlcnMoKSxvPVZvLmdl%0Aby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4%0ALjVdKS5wYXJhbGxlbHMoWzU1LDY1XSksYT1Wby5nZW8uY29uaWNFcXVhbEFyZWEo%0AKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4%0ALDE4XSksYz17cG9pbnQ6ZnVuY3Rpb24obixlKXt0PVtuLGVdfX07cmV0dXJuIG4u%0AaW52ZXJ0PWZ1bmN0aW9uKG4pe3ZhciB0PWkuc2NhbGUoKSxlPWkudHJhbnNsYXRl%0AKCkscj0oblswXS1lWzBdKS90LHU9KG5bMV0tZVsxXSkvdDtyZXR1cm4odT49LjEy%0AJiYuMjM0PnUmJnI+PS0uNDI1JiYtLjIxND5yP286dT49LjE2NiYmLjIzND51JiZy%0APj0tLjIxNCYmLS4xMTU+cj9hOmkpLmludmVydChuKX0sbi5zdHJlYW09ZnVuY3Rp%0Ab24obil7dmFyIHQ9aS5zdHJlYW0obiksZT1vLnN0cmVhbShuKSxyPWEuc3RyZWFt%0AKG4pO3JldHVybntwb2ludDpmdW5jdGlvbihuLHUpe3QucG9pbnQobix1KSxlLnBv%0AaW50KG4sdSksci5wb2ludChuLHUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0LnNwaGVy%0AZSgpLGUuc3BoZXJlKCksci5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7%0AdC5saW5lU3RhcnQoKSxlLmxpbmVTdGFydCgpLHIubGluZVN0YXJ0KCl9LGxpbmVF%0AbmQ6ZnVuY3Rpb24oKXt0LmxpbmVFbmQoKSxlLmxpbmVFbmQoKSxyLmxpbmVFbmQo%0AKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dC5wb2x5Z29uU3RhcnQoKSxlLnBv%0AbHlnb25TdGFydCgpLHIucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rp%0Ab24oKXt0LnBvbHlnb25FbmQoKSxlLnBvbHlnb25FbmQoKSxyLnBvbHlnb25FbmQo%0AKX19fSxuLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxl%0Abmd0aD8oaS5wcmVjaXNpb24odCksby5wcmVjaXNpb24odCksYS5wcmVjaXNpb24o%0AdCksbik6aS5wcmVjaXNpb24oKX0sbi5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4g%0AYXJndW1lbnRzLmxlbmd0aD8oaS5zY2FsZSh0KSxvLnNjYWxlKC4zNSp0KSxhLnNj%0AYWxlKHQpLG4udHJhbnNsYXRlKGkudHJhbnNsYXRlKCkpKTppLnNjYWxlKCl9LG4u%0AdHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVy%0AbiBpLnRyYW5zbGF0ZSgpO3ZhciBsPWkuc2NhbGUoKSxzPSt0WzBdLGY9K3RbMV07%0AcmV0dXJuIGU9aS50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW3MtLjQ1NSpsLGYt%0ALjIzOCpsXSxbcysuNDU1KmwsZisuMjM4KmxdXSkuc3RyZWFtKGMpLnBvaW50LHI9%0Aby50cmFuc2xhdGUoW3MtLjMwNypsLGYrLjIwMSpsXSkuY2xpcEV4dGVudChbW3Mt%0ALjQyNSpsK0VhLGYrLjEyKmwrRWFdLFtzLS4yMTQqbC1FYSxmKy4yMzQqbC1FYV1d%0AKS5zdHJlYW0oYykucG9pbnQsdT1hLnRyYW5zbGF0ZShbcy0uMjA1KmwsZisuMjEy%0AKmxdKS5jbGlwRXh0ZW50KFtbcy0uMjE0KmwrRWEsZisuMTY2KmwrRWFdLFtzLS4x%0AMTUqbC1FYSxmKy4yMzQqbC1FYV1dKS5zdHJlYW0oYykucG9pbnQsbn0sbi5zY2Fs%0AZSgxMDcwKX07dmFyIEFjLENjLE5jLHpjLExjLFRjLHFjPXtwb2ludDp2LGxpbmVT%0AdGFydDp2LGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtDYz0wLHFj%0ALmxpbmVTdGFydD1ZZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3FjLmxpbmVTdGFy%0AdD1xYy5saW5lRW5kPXFjLnBvaW50PXYsQWMrPWlhKENjLzIpfX0sUmM9e3BvaW50%0AOkllLGxpbmVTdGFydDp2LGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6dixwb2x5Z29u%0ARW5kOnZ9LERjPXtwb2ludDpYZSxsaW5lU3RhcnQ6JGUsbGluZUVuZDpCZSxwb2x5%0AZ29uU3RhcnQ6ZnVuY3Rpb24oKXtEYy5saW5lU3RhcnQ9V2V9LHBvbHlnb25FbmQ6%0AZnVuY3Rpb24oKXtEYy5wb2ludD1YZSxEYy5saW5lU3RhcnQ9JGUsRGMubGluZUVu%0AZD1CZX19O1ZvLmdlby5wYXRoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtyZXR1%0Acm4gbiYmKCJmdW5jdGlvbiI9PXR5cGVvZiBhJiZpLnBvaW50UmFkaXVzKCthLmFw%0AcGx5KHRoaXMsYXJndW1lbnRzKSksbyYmby52YWxpZHx8KG89dShpKSksVm8uZ2Vv%0ALnN0cmVhbShuLG8pKSxpLnJlc3VsdCgpfWZ1bmN0aW9uIHQoKXtyZXR1cm4gbz1u%0AdWxsLG59dmFyIGUscix1LGksbyxhPTQuNTtyZXR1cm4gbi5hcmVhPWZ1bmN0aW9u%0AKG4pe3JldHVybiBBYz0wLFZvLmdlby5zdHJlYW0obix1KHFjKSksQWN9LG4uY2Vu%0AdHJvaWQ9ZnVuY3Rpb24obil7cmV0dXJuIHZjPWRjPW1jPXljPXhjPU1jPV9jPWJj%0APXdjPTAsVm8uZ2VvLnN0cmVhbShuLHUoRGMpKSx3Yz9bX2Mvd2MsYmMvd2NdOk1j%0AP1t5Yy9NYyx4Yy9NY106bWM/W3ZjL21jLGRjL21jXTpbMC8wLDAvMF19LG4uYm91%0AbmRzPWZ1bmN0aW9uKG4pe3JldHVybiBMYz1UYz0tKE5jPXpjPTEvMCksVm8uZ2Vv%0ALnN0cmVhbShuLHUoUmMpKSxbW05jLHpjXSxbTGMsVGNdXX0sbi5wcm9qZWN0aW9u%0APWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PShlPW4pP24u%0Ac3RyZWFtfHxLZShuKTp3dCx0KCkpOmV9LG4uY29udGV4dD1mdW5jdGlvbihuKXty%0AZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0ocj1uKT9uZXcgWmU6bmV3%0AIEplKG4pLCJmdW5jdGlvbiIhPXR5cGVvZiBhJiZpLnBvaW50UmFkaXVzKGEpLHQo%0AKSk6cn0sbi5wb2ludFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRz%0ALmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OihpLnBvaW50UmFkaXVz%0AKCt0KSwrdCksbik6YX0sbi5wcm9qZWN0aW9uKFZvLmdlby5hbGJlcnNVc2EoKSku%0AY29udGV4dChudWxsKX0sVm8uZ2VvLnRyYW5zZm9ybT1mdW5jdGlvbihuKXtyZXR1%0Acm57c3RyZWFtOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBRZSh0KTtmb3IodmFyIHIg%0AaW4gbillW3JdPW5bcl07cmV0dXJuIGV9fX0sUWUucHJvdG90eXBlPXtwb2ludDpm%0AdW5jdGlvbihuLHQpe3RoaXMuc3RyZWFtLnBvaW50KG4sdCl9LHNwaGVyZTpmdW5j%0AdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24o%0AKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3Ro%0AaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhp%0Acy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0%0AaGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fSxWby5nZW8ucHJvamVjdGlvbj10cixW%0Aby5nZW8ucHJvamVjdGlvbk11dGF0b3I9ZXIsKFZvLmdlby5lcXVpcmVjdGFuZ3Vs%0AYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdHIodXIpfSkucmF3PXVyLmludmVydD11cixW%0Aby5nZW8ucm90YXRpb249ZnVuY3Rpb24obil7ZnVuY3Rpb24gdCh0KXtyZXR1cm4g%0AdD1uKHRbMF0qQ2EsdFsxXSpDYSksdFswXSo9TmEsdFsxXSo9TmEsdH1yZXR1cm4g%0Abj1vcihuWzBdJTM2MCpDYSxuWzFdKkNhLG4ubGVuZ3RoPjI/blsyXSpDYTowKSx0%0ALmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdD1uLmludmVydCh0WzBdKkNhLHRb%0AMV0qQ2EpLHRbMF0qPU5hLHRbMV0qPU5hLHR9LHR9LGlyLmludmVydD11cixWby5n%0AZW8uY2lyY2xlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBuPSJmdW5jdGlv%0AbiI9PXR5cGVvZiByP3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnIsdD1vcigtblsw%0AXSpDYSwtblsxXSpDYSwwKS5pbnZlcnQsdT1bXTtyZXR1cm4gZShudWxsLG51bGws%0AMSx7cG9pbnQ6ZnVuY3Rpb24obixlKXt1LnB1c2gobj10KG4sZSkpLG5bMF0qPU5h%0ALG5bMV0qPU5hfX0pLHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbdV19fXZh%0AciB0LGUscj1bMCwwXSx1PTY7cmV0dXJuIG4ub3JpZ2luPWZ1bmN0aW9uKHQpe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5hbmdsZT1mdW5jdGlv%0AbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zcigodD0rcikqQ2EsdSpD%0AYSksbik6dH0sbi5wcmVjaXNpb249ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50%0Acy5sZW5ndGg/KGU9c3IodCpDYSwodT0rcikqQ2EpLG4pOnV9LG4uYW5nbGUoOTAp%0AfSxWby5nZW8uZGlzdGFuY2U9ZnVuY3Rpb24obix0KXt2YXIgZSxyPSh0WzBdLW5b%0AMF0pKkNhLHU9blsxXSpDYSxpPXRbMV0qQ2Esbz1NYXRoLnNpbihyKSxhPU1hdGgu%0AY29zKHIpLGM9TWF0aC5zaW4odSksbD1NYXRoLmNvcyh1KSxzPU1hdGguc2luKGkp%0ALGY9TWF0aC5jb3MoaSk7cmV0dXJuIE1hdGguYXRhbjIoTWF0aC5zcXJ0KChlPWYq%0AbykqZSsoZT1sKnMtYypmKmEpKmUpLGMqcytsKmYqYSl9LFZvLmdlby5ncmF0aWN1%0AbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7cmV0dXJue3R5cGU6Ik11bHRpTGlu%0AZVN0cmluZyIsY29vcmRpbmF0ZXM6dCgpfX1mdW5jdGlvbiB0KCl7cmV0dXJuIFZv%0ALnJhbmdlKE1hdGguY2VpbChpL2QpKmQsdSxkKS5tYXAoaCkuY29uY2F0KFZvLnJh%0AbmdlKE1hdGguY2VpbChsL20pKm0sYyxtKS5tYXAoZykpLmNvbmNhdChWby5yYW5n%0AZShNYXRoLmNlaWwoci9wKSpwLGUscCkuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVy%0AbiBpYShuJWQpPkVhfSkubWFwKHMpKS5jb25jYXQoVm8ucmFuZ2UoTWF0aC5jZWls%0AKGEvdikqdixvLHYpLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gaWEobiVtKT5F%0AYX0pLm1hcChmKSl9dmFyIGUscix1LGksbyxhLGMsbCxzLGYsaCxnLHA9MTAsdj1w%0ALGQ9OTAsbT0zNjAseT0yLjU7cmV0dXJuIG4ubGluZXM9ZnVuY3Rpb24oKXtyZXR1%0Acm4gdCgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIs%0AY29vcmRpbmF0ZXM6bn19KX0sbi5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5%0AcGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltoKGkpLmNvbmNhdChnKGMpLnNsaWNl%0AKDEpLGgodSkucmV2ZXJzZSgpLnNsaWNlKDEpLGcobCkucmV2ZXJzZSgpLnNsaWNl%0AKDEpKV19fSxuLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxl%0Abmd0aD9uLm1ham9yRXh0ZW50KHQpLm1pbm9yRXh0ZW50KHQpOm4ubWlub3JFeHRl%0AbnQoKX0sbi5tYWpvckV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRz%0ALmxlbmd0aD8oaT0rdFswXVswXSx1PSt0WzFdWzBdLGw9K3RbMF1bMV0sYz0rdFsx%0AXVsxXSxpPnUmJih0PWksaT11LHU9dCksbD5jJiYodD1sLGw9YyxjPXQpLG4ucHJl%0AY2lzaW9uKHkpKTpbW2ksbF0sW3UsY11dfSxuLm1pbm9yRXh0ZW50PWZ1bmN0aW9u%0AKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdWzBdLGU9K3RbMV1b%0AMF0sYT0rdFswXVsxXSxvPSt0WzFdWzFdLHI+ZSYmKHQ9cixyPWUsZT10KSxhPm8m%0AJih0PWEsYT1vLG89dCksbi5wcmVjaXNpb24oeSkpOltbcixhXSxbZSxvXV19LG4u%0Ac3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uLm1ham9y%0AU3RlcCh0KS5taW5vclN0ZXAodCk6bi5taW5vclN0ZXAoKX0sbi5tYWpvclN0ZXA9%0AZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9K3RbMF0sbT0r%0AdFsxXSxuKTpbZCxtXX0sbi5taW5vclN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFy%0AZ3VtZW50cy5sZW5ndGg/KHA9K3RbMF0sdj0rdFsxXSxuKTpbcCx2XX0sbi5wcmVj%0AaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9K3Qs%0Acz1ocihhLG8sOTApLGY9Z3IocixlLHkpLGg9aHIobCxjLDkwKSxnPWdyKGksdSx5%0AKSxuKTp5fSxuLm1ham9yRXh0ZW50KFtbLTE4MCwtOTArRWFdLFsxODAsOTAtRWFd%0AXSkubWlub3JFeHRlbnQoW1stMTgwLC04MC1FYV0sWzE4MCw4MCtFYV1dKX0sVm8u%0AZ2VvLmdyZWF0QXJjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3JldHVybnt0eXBl%0AOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpbdHx8ci5hcHBseSh0aGlzLGFyZ3Vt%0AZW50cyksZXx8dS5hcHBseSh0aGlzLGFyZ3VtZW50cyldfX12YXIgdCxlLHI9cHIs%0AdT12cjtyZXR1cm4gbi5kaXN0YW5jZT1mdW5jdGlvbigpe3JldHVybiBWby5nZW8u%0AZGlzdGFuY2UodHx8ci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZXx8dS5hcHBseSh0%0AaGlzLGFyZ3VtZW50cykpfSxuLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aD8ocj1lLHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/bnVsbDpl%0ALG4pOnJ9LG4udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyh1PXQsZT0iZnVuY3Rpb24iPT10eXBlb2YgdD9udWxsOnQsbik6dX0sbi5w%0AcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uOjB9%0ALG59LFZvLmdlby5pbnRlcnBvbGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBkcihu%0AWzBdKkNhLG5bMV0qQ2EsdFswXSpDYSx0WzFdKkNhKX0sVm8uZ2VvLmxlbmd0aD1m%0AdW5jdGlvbihuKXtyZXR1cm4gUGM9MCxWby5nZW8uc3RyZWFtKG4sVWMpLFBjfTt2%0AYXIgUGMsVWM9e3NwaGVyZTp2LHBvaW50OnYsbGluZVN0YXJ0Om1yLGxpbmVFbmQ6%0Adixwb2x5Z29uU3RhcnQ6dixwb2x5Z29uRW5kOnZ9LGpjPXlyKGZ1bmN0aW9uKG4p%0Ae3JldHVybiBNYXRoLnNxcnQoMi8oMStuKSl9LGZ1bmN0aW9uKG4pe3JldHVybiAy%0AKk1hdGguYXNpbihuLzIpfSk7KFZvLmdlby5hemltdXRoYWxFcXVhbEFyZWE9ZnVu%0AY3Rpb24oKXtyZXR1cm4gdHIoamMpfSkucmF3PWpjO3ZhciBIYz15cihmdW5jdGlv%0AbihuKXt2YXIgdD1NYXRoLmFjb3Mobik7cmV0dXJuIHQmJnQvTWF0aC5zaW4odCl9%0ALHd0KTsoVm8uZ2VvLmF6aW11dGhhbEVxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0%0AdXJuIHRyKEhjKX0pLnJhdz1IYywoVm8uZ2VvLmNvbmljQ29uZm9ybWFsPWZ1bmN0%0AaW9uKCl7cmV0dXJuIEZlKHhyKX0pLnJhdz14ciwoVm8uZ2VvLmNvbmljRXF1aWRp%0Ac3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gRmUoTXIpfSkucmF3PU1yO3ZhciBGYz15%0AcihmdW5jdGlvbihuKXtyZXR1cm4gMS9ufSxNYXRoLmF0YW4pOyhWby5nZW8uZ25v%0AbW9uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gdHIoRmMpfSkucmF3PUZjLF9yLmludmVy%0AdD1mdW5jdGlvbihuLHQpe3JldHVybltuLDIqTWF0aC5hdGFuKE1hdGguZXhwKHQp%0AKS1rYV19LChWby5nZW8ubWVyY2F0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gYnIoX3Ip%0AfSkucmF3PV9yO3ZhciBPYz15cihmdW5jdGlvbigpe3JldHVybiAxfSxNYXRoLmFz%0AaW4pOyhWby5nZW8ub3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIHRyKE9j%0AKX0pLnJhdz1PYzt2YXIgWWM9eXIoZnVuY3Rpb24obil7cmV0dXJuIDEvKDErbil9%0ALGZ1bmN0aW9uKG4pe3JldHVybiAyKk1hdGguYXRhbihuKX0pOyhWby5nZW8uc3Rl%0AcmVvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiB0cihZYyl9KS5yYXc9WWMsd3Iu%0AaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuWy10LDIqTWF0aC5hdGFuKE1hdGgu%0AZXhwKG4pKS1rYV19LChWby5nZW8udHJhbnN2ZXJzZU1lcmNhdG9yPWZ1bmN0aW9u%0AKCl7dmFyIG49YnIod3IpLHQ9bi5jZW50ZXIsZT1uLnJvdGF0ZTtyZXR1cm4gbi5j%0AZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIG4/dChbLW5bMV0sblswXV0pOihuPXQo%0AKSxbblsxXSwtblswXV0pfSxuLnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gbj9l%0AKFtuWzBdLG5bMV0sbi5sZW5ndGg+Mj9uWzJdKzkwOjkwXSk6KG49ZSgpLFtuWzBd%0ALG5bMV0sblsyXS05MF0pfSxlKFswLDAsOTBdKX0pLnJhdz13cixWby5nZW9tPXt9%0ALFZvLmdlb20uaHVsbD1mdW5jdGlvbihuKXtmdW5jdGlvbiB0KG4pe2lmKG4ubGVu%0AZ3RoPDMpcmV0dXJuW107dmFyIHQsdT1idChlKSxpPWJ0KHIpLG89bi5sZW5ndGgs%0AYT1bXSxjPVtdO2Zvcih0PTA7bz50O3QrKylhLnB1c2goWyt1LmNhbGwodGhpcyxu%0AW3RdLHQpLCtpLmNhbGwodGhpcyxuW3RdLHQpLHRdKTtmb3IoYS5zb3J0KEFyKSx0%0APTA7bz50O3QrKyljLnB1c2goW2FbdF1bMF0sLWFbdF1bMV1dKTt2YXIgbD1Fcihh%0AKSxzPUVyKGMpLGY9c1swXT09PWxbMF0saD1zW3MubGVuZ3RoLTFdPT09bFtsLmxl%0Abmd0aC0xXSxnPVtdO2Zvcih0PWwubGVuZ3RoLTE7dD49MDstLXQpZy5wdXNoKG5b%0AYVtsW3RdXVsyXV0pO2Zvcih0PStmO3Q8cy5sZW5ndGgtaDsrK3QpZy5wdXNoKG5b%0AYVtzW3RdXVsyXV0pO3JldHVybiBnfXZhciBlPVNyLHI9a3I7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/dChuKToodC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVu%0AdHMubGVuZ3RoPyhlPW4sdCk6ZX0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1%0AbWVudHMubGVuZ3RoPyhyPW4sdCk6cn0sdCl9LFZvLmdlb20ucG9seWdvbj1mdW5j%0AdGlvbihuKXtyZXR1cm4gc2EobixJYyksbn07dmFyIEljPVZvLmdlb20ucG9seWdv%0Abi5wcm90b3R5cGU9W107SWMuYXJlYT1mdW5jdGlvbigpe2Zvcih2YXIgbix0PS0x%0ALGU9dGhpcy5sZW5ndGgscj10aGlzW2UtMV0sdT0wOysrdDxlOyluPXIscj10aGlz%0AW3RdLHUrPW5bMV0qclswXS1uWzBdKnJbMV07cmV0dXJuLjUqdX0sSWMuY2VudHJv%0AaWQ9ZnVuY3Rpb24obil7dmFyIHQsZSxyPS0xLHU9dGhpcy5sZW5ndGgsaT0wLG89%0AMCxhPXRoaXNbdS0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KG49LTEvKDYqdGhp%0Acy5hcmVhKCkpKTsrK3I8dTspdD1hLGE9dGhpc1tyXSxlPXRbMF0qYVsxXS1hWzBd%0AKnRbMV0saSs9KHRbMF0rYVswXSkqZSxvKz0odFsxXSthWzFdKSplO3JldHVybltp%0AKm4sbypuXX0sSWMuY2xpcD1mdW5jdGlvbihuKXtmb3IodmFyIHQsZSxyLHUsaSxv%0ALGE9enIobiksYz0tMSxsPXRoaXMubGVuZ3RoLXpyKHRoaXMpLHM9dGhpc1tsLTFd%0AOysrYzxsOyl7Zm9yKHQ9bi5zbGljZSgpLG4ubGVuZ3RoPTAsdT10aGlzW2NdLGk9%0AdFsocj10Lmxlbmd0aC1hKS0xXSxlPS0xOysrZTxyOylvPXRbZV0sQ3IobyxzLHUp%0APyhDcihpLHMsdSl8fG4ucHVzaChOcihpLG8scyx1KSksbi5wdXNoKG8pKTpDcihp%0ALHMsdSkmJm4ucHVzaChOcihpLG8scyx1KSksaT1vO2EmJm4ucHVzaChuWzBdKSxz%0APXV9cmV0dXJuIG59O3ZhciBaYyxWYyxYYywkYyxCYyxXYz1bXSxKYz1bXTtqci5w%0Acm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2Zvcih2YXIgbix0PXRoaXMuZWRn%0AZXMsZT10Lmxlbmd0aDtlLS07KW49dFtlXS5lZGdlLG4uYiYmbi5hfHx0LnNwbGlj%0AZShlLDEpO3JldHVybiB0LnNvcnQoRnIpLHQubGVuZ3RofSxKci5wcm90b3R5cGU9%0Ae3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRl%0AP3RoaXMuZWRnZS5hOnRoaXMuZWRnZS5ifSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4g%0AdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmI6dGhpcy5lZGdlLmF9%0AfSxHci5wcm90b3R5cGU9e2luc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLHIsdTtp%0AZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7%0AZm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0%0AaGlzLl8/KG49dHUodGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1u%0AKToodC5QPXQuTj1udWxsLHRoaXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVs%0AbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzspcj1lLlUsZT09PXIuTD8odT1yLlIs%0AdSYmdS5DPyhlLkM9dS5DPSExLHIuQz0hMCxuPXIpOihuPT09ZS5SJiYoUXIodGhp%0AcyxlKSxuPWUsZT1uLlUpLGUuQz0hMSxyLkM9ITAsbnUodGhpcyxyKSkpOih1PXIu%0ATCx1JiZ1LkM/KGUuQz11LkM9ITEsci5DPSEwLG49cik6KG49PT1lLkwmJihudSh0%0AaGlzLGUpLG49ZSxlPW4uVSksZS5DPSExLHIuQz0hMCxRcih0aGlzLHIpKSksZT1u%0ALlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1u%0ALlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciB0LGUscix1PW4u%0AVSxpPW4uTCxvPW4uUjtpZihlPWk/bz90dShvKTppOm8sdT91Lkw9PT1uP3UuTD1l%0AOnUuUj1lOnRoaXMuXz1lLGkmJm8/KHI9ZS5DLGUuQz1uLkMsZS5MPWksaS5VPWUs%0AZSE9PW8/KHU9ZS5VLGUuVT1uLlUsbj1lLlIsdS5MPW4sZS5SPW8sby5VPWUpOihl%0ALlU9dSx1PWUsbj1lLlIpKToocj1uLkMsbj1lKSxuJiYobi5VPXUpLCFyKXtpZihu%0AJiZuLkMpcmV0dXJuIG4uQz0hMSx2b2lkIDA7ZG97aWYobj09PXRoaXMuXylicmVh%0AaztpZihuPT09dS5MKXtpZih0PXUuUix0LkMmJih0LkM9ITEsdS5DPSEwLFFyKHRo%0AaXMsdSksdD11LlIpLHQuTCYmdC5MLkN8fHQuUiYmdC5SLkMpe3QuUiYmdC5SLkN8%0AfCh0LkwuQz0hMSx0LkM9ITAsbnUodGhpcyx0KSx0PXUuUiksdC5DPXUuQyx1LkM9%0AdC5SLkM9ITEsUXIodGhpcyx1KSxuPXRoaXMuXzticmVha319ZWxzZSBpZih0PXUu%0ATCx0LkMmJih0LkM9ITEsdS5DPSEwLG51KHRoaXMsdSksdD11LkwpLHQuTCYmdC5M%0ALkN8fHQuUiYmdC5SLkMpe3QuTCYmdC5MLkN8fCh0LlIuQz0hMSx0LkM9ITAsUXIo%0AdGhpcyx0KSx0PXUuTCksdC5DPXUuQyx1LkM9dC5MLkM9ITEsbnUodGhpcyx1KSxu%0APXRoaXMuXzticmVha310LkM9ITAsbj11LHU9dS5VfXdoaWxlKCFuLkMpO24mJihu%0ALkM9ITEpfX19LFZvLmdlb20udm9yb25vaT1mdW5jdGlvbihuKXtmdW5jdGlvbiB0%0AKG4pe3ZhciB0PW5ldyBBcnJheShuLmxlbmd0aCkscj1hWzBdWzBdLHU9YVswXVsx%0AXSxpPWFbMV1bMF0sbz1hWzFdWzFdO3JldHVybiBldShlKG4pLGEpLmNlbGxzLmZv%0AckVhY2goZnVuY3Rpb24oZSxhKXt2YXIgYz1lLmVkZ2VzLGw9ZS5zaXRlLHM9dFth%0AXT1jLmxlbmd0aD9jLm1hcChmdW5jdGlvbihuKXt2YXIgdD1uLnN0YXJ0KCk7cmV0%0AdXJuW3QueCx0LnldfSk6bC54Pj1yJiZsLng8PWkmJmwueT49dSYmbC55PD1vP1tb%0AcixvXSxbaSxvXSxbaSx1XSxbcix1XV06W107cy5wb2ludD1uW2FdfSksdH1mdW5j%0AdGlvbiBlKG4pe3JldHVybiBuLm1hcChmdW5jdGlvbihuLHQpe3JldHVybnt4Ok1h%0AdGgucm91bmQoaShuLHQpL0VhKSpFYSx5Ok1hdGgucm91bmQobyhuLHQpL0VhKSpF%0AYSxpOnR9fSl9dmFyIHI9U3IsdT1rcixpPXIsbz11LGE9R2M7cmV0dXJuIG4/dChu%0AKToodC5saW5rcz1mdW5jdGlvbihuKXtyZXR1cm4gZXUoZShuKSkuZWRnZXMuZmls%0AdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLmwmJm4ucn0pLm1hcChmdW5jdGlvbih0%0AKXtyZXR1cm57c291cmNlOm5bdC5sLmldLHRhcmdldDpuW3Quci5pXX19KX0sdC50%0AcmlhbmdsZXM9ZnVuY3Rpb24obil7dmFyIHQ9W107cmV0dXJuIGV1KGUobikpLmNl%0AbGxzLmZvckVhY2goZnVuY3Rpb24oZSxyKXtmb3IodmFyIHUsaSxvPWUuc2l0ZSxh%0APWUuZWRnZXMuc29ydChGciksYz0tMSxsPWEubGVuZ3RoLHM9YVtsLTFdLmVkZ2Us%0AZj1zLmw9PT1vP3MucjpzLmw7KytjPGw7KXU9cyxpPWYscz1hW2NdLmVkZ2UsZj1z%0ALmw9PT1vP3MucjpzLmwscjxpLmkmJnI8Zi5pJiZ1dShvLGksZik8MCYmdC5wdXNo%0AKFtuW3JdLG5baS5pXSxuW2YuaV1dKX0pLHR9LHQueD1mdW5jdGlvbihuKXtyZXR1%0Acm4gYXJndW1lbnRzLmxlbmd0aD8oaT1idChyPW4pLHQpOnJ9LHQueT1mdW5jdGlv%0AbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1idCh1PW4pLHQpOnV9LHQu%0AY2xpcEV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o%0AYT1udWxsPT1uP0djOm4sdCk6YT09PUdjP251bGw6YX0sdC5zaXplPWZ1bmN0aW9u%0AKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QuY2xpcEV4dGVudChuJiZbWzAs%0AMF0sbl0pOmE9PT1HYz9udWxsOmEmJmFbMV19LHQpfTt2YXIgR2M9W1stMWU2LC0x%0AZTZdLFsxZTYsMWU2XV07Vm8uZ2VvbS5kZWxhdW5heT1mdW5jdGlvbihuKXtyZXR1%0Acm4gVm8uZ2VvbS52b3Jvbm9pKCkudHJpYW5nbGVzKG4pfSxWby5nZW9tLnF1YWR0%0AcmVlPWZ1bmN0aW9uKG4sdCxlLHIsdSl7ZnVuY3Rpb24gaShuKXtmdW5jdGlvbiBp%0AKG4sdCxlLHIsdSxpLG8sYSl7aWYoIWlzTmFOKGUpJiYhaXNOYU4ocikpaWYobi5s%0AZWFmKXt2YXIgYz1uLngscz1uLnk7aWYobnVsbCE9YylpZihpYShjLWUpK2lhKHMt%0Acik8LjAxKWwobix0LGUscix1LGksbyxhKTtlbHNle3ZhciBmPW4ucG9pbnQ7bi54%0APW4ueT1uLnBvaW50PW51bGwsbChuLGYsYyxzLHUsaSxvLGEpLGwobix0LGUscix1%0ALGksbyxhKX1lbHNlIG4ueD1lLG4ueT1yLG4ucG9pbnQ9dH1lbHNlIGwobix0LGUs%0Acix1LGksbyxhKX1mdW5jdGlvbiBsKG4sdCxlLHIsdSxvLGEsYyl7dmFyIGw9LjUq%0AKHUrYSkscz0uNSoobytjKSxmPWU+PWwsaD1yPj1zLGc9KGg8PDEpK2Y7bi5sZWFm%0APSExLG49bi5ub2Rlc1tnXXx8KG4ubm9kZXNbZ109YXUoKSksZj91PWw6YT1sLGg/%0Abz1zOmM9cyxpKG4sdCxlLHIsdSxvLGEsYyl9dmFyIHMsZixoLGcscCx2LGQsbSx5%0ALHg9YnQoYSksTT1idChjKTtpZihudWxsIT10KXY9dCxkPWUsbT1yLHk9dTtlbHNl%0AIGlmKG09eT0tKHY9ZD0xLzApLGY9W10saD1bXSxwPW4ubGVuZ3RoLG8pZm9yKGc9%0AMDtwPmc7KytnKXM9bltnXSxzLng8diYmKHY9cy54KSxzLnk8ZCYmKGQ9cy55KSxz%0ALng+bSYmKG09cy54KSxzLnk+eSYmKHk9cy55KSxmLnB1c2gocy54KSxoLnB1c2go%0Acy55KTtlbHNlIGZvcihnPTA7cD5nOysrZyl7dmFyIF89K3gocz1uW2ddLGcpLGI9%0AK00ocyxnKTt2Pl8mJih2PV8pLGQ+YiYmKGQ9YiksXz5tJiYobT1fKSxiPnkmJih5%0APWIpLGYucHVzaChfKSxoLnB1c2goYil9dmFyIHc9bS12LFM9eS1kO3c+Uz95PWQr%0AdzptPXYrUzt2YXIgaz1hdSgpO2lmKGsuYWRkPWZ1bmN0aW9uKG4pe2koayxuLCt4%0AKG4sKytnKSwrTShuLGcpLHYsZCxtLHkpfSxrLnZpc2l0PWZ1bmN0aW9uKG4pe2N1%0AKG4sayx2LGQsbSx5KX0sZz0tMSxudWxsPT10KXtmb3IoOysrZzxwOylpKGssbltn%0AXSxmW2ddLGhbZ10sdixkLG0seSk7LS1nfWVsc2Ugbi5mb3JFYWNoKGsuYWRkKTty%0AZXR1cm4gZj1oPW49cz1udWxsLGt9dmFyIG8sYT1TcixjPWtyO3JldHVybihvPWFy%0AZ3VtZW50cy5sZW5ndGgpPyhhPWl1LGM9b3UsMz09PW8mJih1PWUscj10LGU9dD0w%0AKSxpKG4pKTooaS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro%0APyhhPW4saSk6YX0saS55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyhjPW4saSk6Y30saS5leHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KG51bGw9PW4/dD1lPXI9dT1udWxsOih0PStuWzBdWzBdLGU9%0AK25bMF1bMV0scj0rblsxXVswXSx1PStuWzFdWzFdKSxpKTpudWxsPT10P251bGw6%0AW1t0LGVdLFtyLHVdXX0saS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVu%0AdHMubGVuZ3RoPyhudWxsPT1uP3Q9ZT1yPXU9bnVsbDoodD1lPTAscj0rblswXSx1%0APStuWzFdKSxpKTpudWxsPT10P251bGw6W3ItdCx1LWVdfSxpKX0sVm8uaW50ZXJw%0Ab2xhdGVSZ2I9bHUsVm8uaW50ZXJwb2xhdGVPYmplY3Q9c3UsVm8uaW50ZXJwb2xh%0AdGVOdW1iZXI9ZnUsVm8uaW50ZXJwb2xhdGVTdHJpbmc9aHU7dmFyIEtjPS9bLStd%0APyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxRYz1uZXcg%0AUmVnRXhwKEtjLnNvdXJjZSwiZyIpO1ZvLmludGVycG9sYXRlPWd1LFZvLmludGVy%0AcG9sYXRvcnM9W2Z1bmN0aW9uKG4sdCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuKCJz%0AdHJpbmciPT09ZT9aYS5oYXModCl8fC9eKCN8cmdiXCh8aHNsXCgpLy50ZXN0KHQp%0AP2x1Omh1OnQgaW5zdGFuY2VvZiBldD9sdTpBcnJheS5pc0FycmF5KHQpP3B1OiJv%0AYmplY3QiPT09ZSYmaXNOYU4odCk/c3U6ZnUpKG4sdCl9XSxWby5pbnRlcnBvbGF0%0AZUFycmF5PXB1O3ZhciBubD1mdW5jdGlvbigpe3JldHVybiB3dH0sdGw9Vm8ubWFw%0AKHtsaW5lYXI6bmwscG9seTpfdSxxdWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHl1fSxj%0AdWJpYzpmdW5jdGlvbigpe3JldHVybiB4dX0sc2luOmZ1bmN0aW9uKCl7cmV0dXJu%0AIGJ1fSxleHA6ZnVuY3Rpb24oKXtyZXR1cm4gd3V9LGNpcmNsZTpmdW5jdGlvbigp%0Ae3JldHVybiBTdX0sZWxhc3RpYzprdSxiYWNrOkV1LGJvdW5jZTpmdW5jdGlvbigp%0Ae3JldHVybiBBdX19KSxlbD1Wby5tYXAoeyJpbiI6d3Qsb3V0OmR1LCJpbi1vdXQi%0AOm11LCJvdXQtaW4iOmZ1bmN0aW9uKG4pe3JldHVybiBtdShkdShuKSl9fSk7Vm8u%0AZWFzZT1mdW5jdGlvbihuKXt2YXIgdD1uLmluZGV4T2YoIi0iKSxlPXQ+PTA/bi5z%0AbGljZSgwLHQpOm4scj10Pj0wP24uc2xpY2UodCsxKToiaW4iO3JldHVybiBlPXRs%0ALmdldChlKXx8bmwscj1lbC5nZXQocil8fHd0LHZ1KHIoZS5hcHBseShudWxsLFhv%0ALmNhbGwoYXJndW1lbnRzLDEpKSkpfSxWby5pbnRlcnBvbGF0ZUhjbD1DdSxWby5p%0AbnRlcnBvbGF0ZUhzbD1OdSxWby5pbnRlcnBvbGF0ZUxhYj16dSxWby5pbnRlcnBv%0AbGF0ZVJvdW5kPUx1LFZvLnRyYW5zZm9ybT1mdW5jdGlvbihuKXt2YXIgdD1Cby5j%0AcmVhdGVFbGVtZW50TlMoVm8ubnMucHJlZml4LnN2ZywiZyIpO3JldHVybihWby50%0AcmFuc2Zvcm09ZnVuY3Rpb24obil7aWYobnVsbCE9bil7dC5zZXRBdHRyaWJ1dGUo%0AInRyYW5zZm9ybSIsbik7dmFyIGU9dC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xp%0AZGF0ZSgpfXJldHVybiBuZXcgVHUoZT9lLm1hdHJpeDpybCl9KShuKX0sVHUucHJv%0AdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3Ro%0AaXMudHJhbnNsYXRlKyIpcm90YXRlKCIrdGhpcy5yb3RhdGUrIilza2V3WCgiK3Ro%0AaXMuc2tldysiKXNjYWxlKCIrdGhpcy5zY2FsZSsiKSJ9O3ZhciBybD17YToxLGI6%0AMCxjOjAsZDoxLGU6MCxmOjB9O1ZvLmludGVycG9sYXRlVHJhbnNmb3JtPVB1LFZv%0ALmxheW91dD17fSxWby5sYXlvdXQuYnVuZGxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1%0AbmN0aW9uKG4pe2Zvcih2YXIgdD1bXSxlPS0xLHI9bi5sZW5ndGg7KytlPHI7KXQu%0AcHVzaChIdShuW2VdKSk7cmV0dXJuIHR9fSxWby5sYXlvdXQuY2hvcmQ9ZnVuY3Rp%0Ab24oKXtmdW5jdGlvbiBuKCl7dmFyIG4sbCxmLGgsZyxwPXt9LHY9W10sZD1Wby5y%0AYW5nZShpKSxtPVtdO2ZvcihlPVtdLHI9W10sbj0wLGg9LTE7KytoPGk7KXtmb3Io%0AbD0wLGc9LTE7KytnPGk7KWwrPXVbaF1bZ107di5wdXNoKGwpLG0ucHVzaChWby5y%0AYW5nZShpKSksbis9bH1mb3IobyYmZC5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0dXJu%0AIG8odltuXSx2W3RdKX0pLGEmJm0uZm9yRWFjaChmdW5jdGlvbihuLHQpe24uc29y%0AdChmdW5jdGlvbihuLGUpe3JldHVybiBhKHVbdF1bbl0sdVt0XVtlXSl9KX0pLG49%0AKFNhLXMqaSkvbixsPTAsaD0tMTsrK2g8aTspe2ZvcihmPWwsZz0tMTsrK2c8aTsp%0Ae3ZhciB5PWRbaF0seD1tW3ldW2ddLE09dVt5XVt4XSxfPWwsYj1sKz1NKm47cFt5%0AKyItIit4XT17aW5kZXg6eSxzdWJpbmRleDp4LHN0YXJ0QW5nbGU6XyxlbmRBbmds%0AZTpiLHZhbHVlOk19fXJbeV09e2luZGV4Onksc3RhcnRBbmdsZTpmLGVuZEFuZ2xl%0AOmwsdmFsdWU6KGwtZikvbn0sbCs9c31mb3IoaD0tMTsrK2g8aTspZm9yKGc9aC0x%0AOysrZzxpOyl7dmFyIHc9cFtoKyItIitnXSxTPXBbZysiLSIraF07KHcudmFsdWV8%0AfFMudmFsdWUpJiZlLnB1c2gody52YWx1ZTxTLnZhbHVlP3tzb3VyY2U6Uyx0YXJn%0AZXQ6d306e3NvdXJjZTp3LHRhcmdldDpTfSl9YyYmdCgpfWZ1bmN0aW9uIHQoKXtl%0ALnNvcnQoZnVuY3Rpb24obix0KXtyZXR1cm4gYygobi5zb3VyY2UudmFsdWUrbi50%0AYXJnZXQudmFsdWUpLzIsKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlKS8y%0AKX0pfXZhciBlLHIsdSxpLG8sYSxjLGw9e30scz0wO3JldHVybiBsLm1hdHJpeD1m%0AdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0odT1uKSYmdS5s%0AZW5ndGgsZT1yPW51bGwsbCk6dX0sbC5wYWRkaW5nPWZ1bmN0aW9uKG4pe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhzPW4sZT1yPW51bGwsbCk6c30sbC5zb3J0R3Jv%0AdXBzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW4sZT1y%0APW51bGwsbCk6b30sbC5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKG4pe3JldHVybiBh%0Acmd1bWVudHMubGVuZ3RoPyhhPW4sZT1udWxsLGwpOmF9LGwuc29ydENob3Jkcz1m%0AdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uLGUmJnQoKSxs%0AKTpjfSxsLmNob3Jkcz1mdW5jdGlvbigpe3JldHVybiBlfHxuKCksZX0sbC5ncm91%0AcHM9ZnVuY3Rpb24oKXtyZXR1cm4gcnx8bigpLHJ9LGx9LFZvLmxheW91dC5mb3Jj%0AZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxy%0ALHUpe2lmKHQucG9pbnQhPT1uKXt2YXIgaT10LmN4LW4ueCxvPXQuY3ktbi55LGE9%0AdS1lLGM9aSppK28qbztpZihjPmEqYS9kKXtpZihwPmMpe3ZhciBsPXQuY2hhcmdl%0AL2M7bi5weC09aSpsLG4ucHktPW8qbH1yZXR1cm4hMH1pZih0LnBvaW50JiZjJiZw%0APmMpe3ZhciBsPXQucG9pbnRDaGFyZ2UvYztuLnB4LT1pKmwsbi5weS09bypsfX1y%0AZXR1cm4hdC5jaGFyZ2V9fWZ1bmN0aW9uIHQobil7bi5weD1Wby5ldmVudC54LG4u%0AcHk9Vm8uZXZlbnQueSxhLnJlc3VtZSgpfXZhciBlLHIsdSxpLG8sYT17fSxjPVZv%0ALmRpc3BhdGNoKCJzdGFydCIsInRpY2siLCJlbmQiKSxsPVsxLDFdLHM9LjksZj11%0AbCxoPWlsLGc9LTMwLHA9b2wsdj0uMSxkPS42NCxtPVtdLHk9W107cmV0dXJuIGEu%0AdGljaz1mdW5jdGlvbigpe2lmKChyKj0uOTkpPC4wMDUpcmV0dXJuIGMuZW5kKHt0%0AeXBlOiJlbmQiLGFscGhhOnI9MH0pLCEwO3ZhciB0LGUsYSxmLGgscCxkLHgsTSxf%0APW0ubGVuZ3RoLGI9eS5sZW5ndGg7Zm9yKGU9MDtiPmU7KytlKWE9eVtlXSxmPWEu%0Ac291cmNlLGg9YS50YXJnZXQseD1oLngtZi54LE09aC55LWYueSwocD14KngrTSpN%0AKSYmKHA9cippW2VdKigocD1NYXRoLnNxcnQocCkpLXVbZV0pL3AseCo9cCxNKj1w%0ALGgueC09eCooZD1mLndlaWdodC8oaC53ZWlnaHQrZi53ZWlnaHQpKSxoLnktPU0q%0AZCxmLngrPXgqKGQ9MS1kKSxmLnkrPU0qZCk7aWYoKGQ9cip2KSYmKHg9bFswXS8y%0ALE09bFsxXS8yLGU9LTEsZCkpZm9yKDsrK2U8XzspYT1tW2VdLGEueCs9KHgtYS54%0AKSpkLGEueSs9KE0tYS55KSpkO2lmKGcpZm9yKFh1KHQ9Vm8uZ2VvbS5xdWFkdHJl%0AZShtKSxyLG8pLGU9LTE7KytlPF87KShhPW1bZV0pLmZpeGVkfHx0LnZpc2l0KG4o%0AYSkpO2ZvcihlPS0xOysrZTxfOylhPW1bZV0sYS5maXhlZD8oYS54PWEucHgsYS55%0APWEucHkpOihhLngtPShhLnB4LShhLnB4PWEueCkpKnMsYS55LT0oYS5weS0oYS5w%0AeT1hLnkpKSpzKTtjLnRpY2soe3R5cGU6InRpY2siLGFscGhhOnJ9KX0sYS5ub2Rl%0Acz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1uLGEpOm19%0ALGEubGlua3M9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9%0AbixhKTp5fSxhLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KGw9bixhKTpsfSxhLmxpbmtEaXN0YW5jZT1mdW5jdGlvbihuKXtyZXR1cm4g%0AYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOituLGEp%0AOmZ9LGEuZGlzdGFuY2U9YS5saW5rRGlzdGFuY2UsYS5saW5rU3RyZW5ndGg9ZnVu%0AY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09%0AdHlwZW9mIG4/bjorbixhKTpofSxhLmZyaWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhzPStuLGEpOnN9LGEuY2hhcmdlPWZ1bmN0aW9u%0AKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSJmdW5jdGlvbiI9PXR5cGVv%0AZiBuP246K24sYSk6Z30sYS5jaGFyZ2VEaXN0YW5jZT1mdW5jdGlvbihuKXtyZXR1%0Acm4gYXJndW1lbnRzLmxlbmd0aD8ocD1uKm4sYSk6TWF0aC5zcXJ0KHApfSxhLmdy%0AYXZpdHk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9K24s%0AYSk6dn0sYS50aGV0YT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0%0AaD8oZD1uKm4sYSk6TWF0aC5zcXJ0KGQpfSxhLmFscGhhPWZ1bmN0aW9uKG4pe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStuLHI/cj1uPjA/bjowOm4+MCYmKGMu%0Ac3RhcnQoe3R5cGU6InN0YXJ0IixhbHBoYTpyPW59KSxWby50aW1lcihhLnRpY2sp%0AKSxhKTpyfSxhLnN0YXJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHIpe2lmKCFl%0AKXtmb3IoZT1uZXcgQXJyYXkoYyksYT0wO2M+YTsrK2EpZVthXT1bXTtmb3IoYT0w%0AO2w+YTsrK2Epe3ZhciB1PXlbYV07ZVt1LnNvdXJjZS5pbmRleF0ucHVzaCh1LnRh%0AcmdldCksZVt1LnRhcmdldC5pbmRleF0ucHVzaCh1LnNvdXJjZSl9fWZvcih2YXIg%0AaSxvPWVbdF0sYT0tMSxsPW8ubGVuZ3RoOysrYTxsOylpZighaXNOYU4oaT1vW2Fd%0AW25dKSlyZXR1cm4gaTtyZXR1cm4gTWF0aC5yYW5kb20oKSpyfXZhciB0LGUscixj%0APW0ubGVuZ3RoLHM9eS5sZW5ndGgscD1sWzBdLHY9bFsxXTtmb3IodD0wO2M+dDsr%0AK3QpKHI9bVt0XSkuaW5kZXg9dCxyLndlaWdodD0wO2Zvcih0PTA7cz50OysrdCly%0APXlbdF0sIm51bWJlciI9PXR5cGVvZiByLnNvdXJjZSYmKHIuc291cmNlPW1bci5z%0Ab3VyY2VdKSwibnVtYmVyIj09dHlwZW9mIHIudGFyZ2V0JiYoci50YXJnZXQ9bVty%0ALnRhcmdldF0pLCsrci5zb3VyY2Uud2VpZ2h0LCsrci50YXJnZXQud2VpZ2h0O2Zv%0Acih0PTA7Yz50OysrdClyPW1bdF0saXNOYU4oci54KSYmKHIueD1uKCJ4IixwKSks%0AaXNOYU4oci55KSYmKHIueT1uKCJ5Iix2KSksaXNOYU4oci5weCkmJihyLnB4PXIu%0AeCksaXNOYU4oci5weSkmJihyLnB5PXIueSk7aWYodT1bXSwiZnVuY3Rpb24iPT10%0AeXBlb2YgZilmb3IodD0wO3M+dDsrK3QpdVt0XT0rZi5jYWxsKHRoaXMseVt0XSx0%0AKTtlbHNlIGZvcih0PTA7cz50OysrdCl1W3RdPWY7aWYoaT1bXSwiZnVuY3Rpb24i%0APT10eXBlb2YgaClmb3IodD0wO3M+dDsrK3QpaVt0XT0raC5jYWxsKHRoaXMseVt0%0AXSx0KTtlbHNlIGZvcih0PTA7cz50OysrdClpW3RdPWg7aWYobz1bXSwiZnVuY3Rp%0Ab24iPT10eXBlb2YgZylmb3IodD0wO2M+dDsrK3Qpb1t0XT0rZy5jYWxsKHRoaXMs%0AbVt0XSx0KTtlbHNlIGZvcih0PTA7Yz50OysrdClvW3RdPWc7cmV0dXJuIGEucmVz%0AdW1lKCl9LGEucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYWxwaGEoLjEpfSxh%0ALnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hbHBoYSgwKX0sYS5kcmFnPWZ1bmN0%0AaW9uKCl7cmV0dXJuIGV8fChlPVZvLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4od3Qp%0ALm9uKCJkcmFnc3RhcnQuZm9yY2UiLFl1KS5vbigiZHJhZy5mb3JjZSIsdCkub24o%0AImRyYWdlbmQuZm9yY2UiLEl1KSksYXJndW1lbnRzLmxlbmd0aD8odGhpcy5vbigi%0AbW91c2VvdmVyLmZvcmNlIixadSkub24oIm1vdXNlb3V0LmZvcmNlIixWdSkuY2Fs%0AbChlKSx2b2lkIDApOmV9LFZvLnJlYmluZChhLGMsIm9uIil9O3ZhciB1bD0yMCxp%0AbD0xLG9sPTEvMDtWby5sYXlvdXQuaGllcmFyY2h5PWZ1bmN0aW9uKCl7ZnVuY3Rp%0Ab24gbih1KXt2YXIgaSxvPVt1XSxhPVtdO2Zvcih1LmRlcHRoPTA7bnVsbCE9KGk9%0Aby5wb3AoKSk7KWlmKGEucHVzaChpKSwobD1lLmNhbGwobixpLGkuZGVwdGgpKSYm%0AKGM9bC5sZW5ndGgpKXtmb3IodmFyIGMsbCxzOy0tYz49MDspby5wdXNoKHM9bFtj%0AXSkscy5wYXJlbnQ9aSxzLmRlcHRoPWkuZGVwdGgrMTtyJiYoaS52YWx1ZT0wKSxp%0ALmNoaWxkcmVuPWx9ZWxzZSByJiYoaS52YWx1ZT0rci5jYWxsKG4saSxpLmRlcHRo%0AKXx8MCksZGVsZXRlIGkuY2hpbGRyZW47cmV0dXJuIFd1KHUsZnVuY3Rpb24obil7%0AdmFyIGUsdTt0JiYoZT1uLmNoaWxkcmVuKSYmZS5zb3J0KHQpLHImJih1PW4ucGFy%0AZW50KSYmKHUudmFsdWUrPW4udmFsdWUpfSksYX12YXIgdD1LdSxlPUp1LHI9R3U7%0AcmV0dXJuIG4uc29ydD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0%0AaD8odD1lLG4pOnR9LG4uY2hpbGRyZW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5yZXZhbHVlPWZ1bmN0aW9u%0AKHQpe3JldHVybiByJiYoQnUodCxmdW5jdGlvbihuKXtuLmNoaWxkcmVuJiYobi52%0AYWx1ZT0wKX0pLFd1KHQsZnVuY3Rpb24odCl7dmFyIGU7dC5jaGlsZHJlbnx8KHQu%0AdmFsdWU9K3IuY2FsbChuLHQsdC5kZXB0aCl8fDApLChlPXQucGFyZW50KSYmKGUu%0AdmFsdWUrPXQudmFsdWUpfSkpLHR9LG59LFZvLmxheW91dC5wYXJ0aXRpb249ZnVu%0AY3Rpb24oKXtmdW5jdGlvbiBuKHQsZSxyLHUpe3ZhciBpPXQuY2hpbGRyZW47aWYo%0AdC54PWUsdC55PXQuZGVwdGgqdSx0LmR4PXIsdC5keT11LGkmJihvPWkubGVuZ3Ro%0AKSl7dmFyIG8sYSxjLGw9LTE7Zm9yKHI9dC52YWx1ZT9yL3QudmFsdWU6MDsrK2w8%0AbzspbihhPWlbbF0sZSxjPWEudmFsdWUqcix1KSxlKz1jfX1mdW5jdGlvbiB0KG4p%0Ae3ZhciBlPW4uY2hpbGRyZW4scj0wO2lmKGUmJih1PWUubGVuZ3RoKSlmb3IodmFy%0AIHUsaT0tMTsrK2k8dTspcj1NYXRoLm1heChyLHQoZVtpXSkpO3JldHVybiAxK3J9%0AZnVuY3Rpb24gZShlLGkpe3ZhciBvPXIuY2FsbCh0aGlzLGUsaSk7cmV0dXJuIG4o%0Ab1swXSwwLHVbMF0sdVsxXS90KG9bMF0pKSxvfXZhciByPVZvLmxheW91dC5oaWVy%0AYXJjaHkoKSx1PVsxLDFdO3JldHVybiBlLnNpemU9ZnVuY3Rpb24obil7cmV0dXJu%0AIGFyZ3VtZW50cy5sZW5ndGg/KHU9bixlKTp1fSwkdShlLHIpfSxWby5sYXlvdXQu%0AcGllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihpKXt2YXIgbz1pLm1hcChmdW5jdGlv%0AbihlLHIpe3JldHVybit0LmNhbGwobixlLHIpfSksYT0rKCJmdW5jdGlvbiI9PXR5%0AcGVvZiByP3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnIpLGM9KCgiZnVuY3Rpb24i%0APT10eXBlb2YgdT91LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp1KS1hKS9Wby5zdW0o%0AbyksbD1Wby5yYW5nZShpLmxlbmd0aCk7bnVsbCE9ZSYmbC5zb3J0KGU9PT1hbD9m%0AdW5jdGlvbihuLHQpe3JldHVybiBvW3RdLW9bbl19OmZ1bmN0aW9uKG4sdCl7cmV0%0AdXJuIGUoaVtuXSxpW3RdKX0pO3ZhciBzPVtdO3JldHVybiBsLmZvckVhY2goZnVu%0AY3Rpb24obil7dmFyIHQ7c1tuXT17ZGF0YTppW25dLHZhbHVlOnQ9b1tuXSxzdGFy%0AdEFuZ2xlOmEsZW5kQW5nbGU6YSs9dCpjfX0pLHN9dmFyIHQ9TnVtYmVyLGU9YWws%0Acj0wLHU9U2E7cmV0dXJuIG4udmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJu%0AIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnN0YXJ0QW5nbGU9ZnVuY3Rp%0Ab24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxuLmVuZEFu%0AZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbik6%0AdX0sbn07dmFyIGFsPXt9O1ZvLmxheW91dC5zdGFjaz1mdW5jdGlvbigpe2Z1bmN0%0AaW9uIG4oYSxjKXt2YXIgbD1hLm1hcChmdW5jdGlvbihlLHIpe3JldHVybiB0LmNh%0AbGwobixlLHIpfSkscz1sLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVu%0AY3Rpb24odCxlKXtyZXR1cm5baS5jYWxsKG4sdCxlKSxvLmNhbGwobix0LGUpXX0p%0AfSksZj1lLmNhbGwobixzLGMpO2w9Vm8ucGVybXV0ZShsLGYpLHM9Vm8ucGVybXV0%0AZShzLGYpO3ZhciBoLGcscCx2PXIuY2FsbChuLHMsYyksZD1sLmxlbmd0aCxtPWxb%0AMF0ubGVuZ3RoO2ZvcihnPTA7bT5nOysrZylmb3IodS5jYWxsKG4sbFswXVtnXSxw%0APXZbZ10sc1swXVtnXVsxXSksaD0xO2Q+aDsrK2gpdS5jYWxsKG4sbFtoXVtnXSxw%0AKz1zW2gtMV1bZ11bMV0sc1toXVtnXVsxXSk7cmV0dXJuIGF9dmFyIHQ9d3QsZT1y%0AaSxyPXVpLHU9ZWksaT1uaSxvPXRpO3JldHVybiBuLnZhbHVlcz1mdW5jdGlvbihl%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4ub3JkZXI9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09%0AdHlwZW9mIHQ/dDpjbC5nZXQodCl8fHJpLG4pOmV9LG4ub2Zmc2V0PWZ1bmN0aW9u%0AKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVv%0AZiB0P3Q6bGwuZ2V0KHQpfHx1aSxuKTpyfSxuLng9ZnVuY3Rpb24odCl7cmV0dXJu%0AIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxuKTppfSxuLnk9ZnVuY3Rpb24odCl7cmV0%0AdXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxuKTpvfSxuLm91dD1mdW5jdGlvbih0%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LG4pOnV9LG59O3ZhciBjbD1W%0Aby5tYXAoeyJpbnNpZGUtb3V0IjpmdW5jdGlvbihuKXt2YXIgdCxlLHI9bi5sZW5n%0AdGgsdT1uLm1hcChpaSksaT1uLm1hcChvaSksbz1Wby5yYW5nZShyKS5zb3J0KGZ1%0AbmN0aW9uKG4sdCl7cmV0dXJuIHVbbl0tdVt0XX0pLGE9MCxjPTAsbD1bXSxzPVtd%0AO2Zvcih0PTA7cj50OysrdCllPW9bdF0sYz5hPyhhKz1pW2VdLGwucHVzaChlKSk6%0AKGMrPWlbZV0scy5wdXNoKGUpKTtyZXR1cm4gcy5yZXZlcnNlKCkuY29uY2F0KGwp%0AfSxyZXZlcnNlOmZ1bmN0aW9uKG4pe3JldHVybiBWby5yYW5nZShuLmxlbmd0aCku%0AcmV2ZXJzZSgpfSwiZGVmYXVsdCI6cml9KSxsbD1Wby5tYXAoe3NpbGhvdWV0dGU6%0AZnVuY3Rpb24obil7dmFyIHQsZSxyLHU9bi5sZW5ndGgsaT1uWzBdLmxlbmd0aCxv%0APVtdLGE9MCxjPVtdO2ZvcihlPTA7aT5lOysrZSl7Zm9yKHQ9MCxyPTA7dT50O3Qr%0AKylyKz1uW3RdW2VdWzFdO3I+YSYmKGE9ciksby5wdXNoKHIpfWZvcihlPTA7aT5l%0AOysrZSljW2VdPShhLW9bZV0pLzI7cmV0dXJuIGN9LHdpZ2dsZTpmdW5jdGlvbihu%0AKXt2YXIgdCxlLHIsdSxpLG8sYSxjLGwscz1uLmxlbmd0aCxmPW5bMF0saD1mLmxl%0Abmd0aCxnPVtdO2ZvcihnWzBdPWM9bD0wLGU9MTtoPmU7KytlKXtmb3IodD0wLHU9%0AMDtzPnQ7Kyt0KXUrPW5bdF1bZV1bMV07Zm9yKHQ9MCxpPTAsYT1mW2VdWzBdLWZb%0AZS0xXVswXTtzPnQ7Kyt0KXtmb3Iocj0wLG89KG5bdF1bZV1bMV0tblt0XVtlLTFd%0AWzFdKS8oMiphKTt0PnI7KytyKW8rPShuW3JdW2VdWzFdLW5bcl1bZS0xXVsxXSkv%0AYTtpKz1vKm5bdF1bZV1bMV19Z1tlXT1jLT11P2kvdSphOjAsbD5jJiYobD1jKX1m%0Ab3IoZT0wO2g+ZTsrK2UpZ1tlXS09bDtyZXR1cm4gZ30sZXhwYW5kOmZ1bmN0aW9u%0AKG4pe3ZhciB0LGUscix1PW4ubGVuZ3RoLGk9blswXS5sZW5ndGgsbz0xL3UsYT1b%0AXTtmb3IoZT0wO2k+ZTsrK2Upe2Zvcih0PTAscj0wO3U+dDt0Kyspcis9blt0XVtl%0AXVsxXTtpZihyKWZvcih0PTA7dT50O3QrKyluW3RdW2VdWzFdLz1yO2Vsc2UgZm9y%0AKHQ9MDt1PnQ7dCsrKW5bdF1bZV1bMV09b31mb3IoZT0wO2k+ZTsrK2UpYVtlXT0w%0AO3JldHVybiBhfSx6ZXJvOnVpfSk7Vm8ubGF5b3V0Lmhpc3RvZ3JhbT1mdW5jdGlv%0Abigpe2Z1bmN0aW9uIG4obixpKXtmb3IodmFyIG8sYSxjPVtdLGw9bi5tYXAoZSx0%0AaGlzKSxzPXIuY2FsbCh0aGlzLGwsaSksZj11LmNhbGwodGhpcyxzLGwsaSksaT0t%0AMSxoPWwubGVuZ3RoLGc9Zi5sZW5ndGgtMSxwPXQ/MToxL2g7KytpPGc7KW89Y1tp%0AXT1bXSxvLmR4PWZbaSsxXS0oby54PWZbaV0pLG8ueT0wO2lmKGc+MClmb3IoaT0t%0AMTsrK2k8aDspYT1sW2ldLGE+PXNbMF0mJmE8PXNbMV0mJihvPWNbVm8uYmlzZWN0%0AKGYsYSwxLGcpLTFdLG8ueSs9cCxvLnB1c2gobltpXSkpO3JldHVybiBjfXZhciB0%0APSEwLGU9TnVtYmVyLHI9c2ksdT1jaTtyZXR1cm4gbi52YWx1ZT1mdW5jdGlvbih0%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4ucmFuZ2U9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9YnQodCksbik6cn0s%0Abi5iaW5zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJu%0AdW1iZXIiPT10eXBlb2YgdD9mdW5jdGlvbihuKXtyZXR1cm4gbGkobix0KX06YnQo%0AdCksbik6dX0sbi5mcmVxdWVuY3k9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50%0Acy5sZW5ndGg/KHQ9ISFlLG4pOnR9LG59LFZvLmxheW91dC5wYWNrPWZ1bmN0aW9u%0AKCl7ZnVuY3Rpb24gbihuLGkpe3ZhciBvPWUuY2FsbCh0aGlzLG4saSksYT1vWzBd%0ALGM9dVswXSxsPXVbMV0scz1udWxsPT10P01hdGguc3FydDoiZnVuY3Rpb24iPT10%0AeXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9O2lmKGEueD1hLnk9MCxXdShh%0ALGZ1bmN0aW9uKG4pe24ucj0rcyhuLnZhbHVlKX0pLFd1KGEsdmkpLHIpe3ZhciBm%0APXIqKHQ/MTpNYXRoLm1heCgyKmEuci9jLDIqYS5yL2wpKS8yO1d1KGEsZnVuY3Rp%0Ab24obil7bi5yKz1mfSksV3UoYSx2aSksV3UoYSxmdW5jdGlvbihuKXtuLnItPWZ9%0AKX1yZXR1cm4geWkoYSxjLzIsbC8yLHQ/MToxL01hdGgubWF4KDIqYS5yL2MsMiph%0ALnIvbCkpLG99dmFyIHQsZT1Wby5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChmaSks%0Acj0wLHU9WzEsMV07cmV0dXJuIG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aD8odT10LG4pOnV9LG4ucmFkaXVzPWZ1bmN0aW9uKGUpe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PWV8fCJmdW5jdGlvbiI9PXR5%0AcGVvZiBlP2U6K2Usbik6dH0sbi5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBh%0Acmd1bWVudHMubGVuZ3RoPyhyPSt0LG4pOnJ9LCR1KG4sZSl9LFZvLmxheW91dC50%0AcmVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHUpe3ZhciBzPW8uY2FsbCh0aGlz%0ALG4sdSksZj1zWzBdLGg9dChmKTtpZihXdShoLGUpLGgucGFyZW50Lm09LWgueixC%0AdShoLHIpLGwpQnUoZixpKTtlbHNle3ZhciBnPWYscD1mLHY9ZjtCdShmLGZ1bmN0%0AaW9uKG4pe24ueDxnLngmJihnPW4pLG4ueD5wLngmJihwPW4pLG4uZGVwdGg+di5k%0AZXB0aCYmKHY9bil9KTt2YXIgZD1hKGcscCkvMi1nLngsbT1jWzBdLyhwLngrYShw%0ALGcpLzIrZCkseT1jWzFdLyh2LmRlcHRofHwxKTtCdShmLGZ1bmN0aW9uKG4pe24u%0AeD0obi54K2QpKm0sbi55PW4uZGVwdGgqeX0pfXJldHVybiBzfWZ1bmN0aW9uIHQo%0Abil7Zm9yKHZhciB0LGU9e0E6bnVsbCxjaGlsZHJlbjpbbl19LHI9W2VdO251bGwh%0APSh0PXIucG9wKCkpOylmb3IodmFyIHUsaT10LmNoaWxkcmVuLG89MCxhPWkubGVu%0AZ3RoO2E+bzsrK28pci5wdXNoKChpW29dPXU9e186aVtvXSxwYXJlbnQ6dCxjaGls%0AZHJlbjoodT1pW29dLmNoaWxkcmVuKSYmdS5zbGljZSgpfHxbXSxBOm51bGwsYTpu%0AdWxsLHo6MCxtOjAsYzowLHM6MCx0Om51bGwsaTpvfSkuYT11KTtyZXR1cm4gZS5j%0AaGlsZHJlblswXX1mdW5jdGlvbiBlKG4pe3ZhciB0PW4uY2hpbGRyZW4sZT1uLnBh%0AcmVudC5jaGlsZHJlbixyPW4uaT9lW24uaS0xXTpudWxsO2lmKHQubGVuZ3RoKXtT%0AaShuKTt2YXIgaT0odFswXS56K3RbdC5sZW5ndGgtMV0ueikvMjtyPyhuLno9ci56%0AK2Eobi5fLHIuXyksbi5tPW4uei1pKTpuLno9aX1lbHNlIHImJihuLno9ci56K2Eo%0Abi5fLHIuXykpO24ucGFyZW50LkE9dShuLHIsbi5wYXJlbnQuQXx8ZVswXSl9ZnVu%0AY3Rpb24gcihuKXtuLl8ueD1uLnorbi5wYXJlbnQubSxuLm0rPW4ucGFyZW50Lm19%0AZnVuY3Rpb24gdShuLHQsZSl7aWYodCl7Zm9yKHZhciByLHU9bixpPW4sbz10LGM9%0AdS5wYXJlbnQuY2hpbGRyZW5bMF0sbD11Lm0scz1pLm0sZj1vLm0saD1jLm07bz1i%0AaShvKSx1PV9pKHUpLG8mJnU7KWM9X2koYyksaT1iaShpKSxpLmE9bixyPW8ueitm%0ALXUuei1sK2Eoby5fLHUuXykscj4wJiYod2koa2kobyxuLGUpLG4sciksbCs9cixz%0AKz1yKSxmKz1vLm0sbCs9dS5tLGgrPWMubSxzKz1pLm07byYmIWJpKGkpJiYoaS50%0APW8saS5tKz1mLXMpLHUmJiFfaShjKSYmKGMudD11LGMubSs9bC1oLGU9bil9cmV0%0AdXJuIGV9ZnVuY3Rpb24gaShuKXtuLngqPWNbMF0sbi55PW4uZGVwdGgqY1sxXX12%0AYXIgbz1Wby5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxs%0AKSxhPU1pLGM9WzEsMV0sbD1udWxsO3JldHVybiBuLnNlcGFyYXRpb249ZnVuY3Rp%0Ab24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxuKTphfSxuLnNpemU9%0AZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bnVsbD09KGM9%0AdCk/aTpudWxsLG4pOmw/bnVsbDpjfSxuLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW51bGw9PShjPXQpP251bGw6aSxuKTps%0AP2M6bnVsbH0sJHUobixvKX0sVm8ubGF5b3V0LmNsdXN0ZXI9ZnVuY3Rpb24oKXtm%0AdW5jdGlvbiBuKG4saSl7dmFyIG8sYT10LmNhbGwodGhpcyxuLGkpLGM9YVswXSxs%0APTA7V3UoYyxmdW5jdGlvbihuKXt2YXIgdD1uLmNoaWxkcmVuO3QmJnQubGVuZ3Ro%0APyhuLng9QWkodCksbi55PUVpKHQpKToobi54PW8/bCs9ZShuLG8pOjAsbi55PTAs%0Abz1uKX0pO3ZhciBzPUNpKGMpLGY9TmkoYyksaD1zLngtZShzLGYpLzIsZz1mLngr%0AZShmLHMpLzI7cmV0dXJuIFd1KGMsdT9mdW5jdGlvbihuKXtuLng9KG4ueC1jLngp%0AKnJbMF0sbi55PShjLnktbi55KSpyWzFdfTpmdW5jdGlvbihuKXtuLng9KG4ueC1o%0AKS8oZy1oKSpyWzBdLG4ueT0oMS0oYy55P24ueS9jLnk6MSkpKnJbMV19KSxhfXZh%0AciB0PVZvLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwp%0ALGU9TWkscj1bMSwxXSx1PSExO3JldHVybiBuLnNlcGFyYXRpb249ZnVuY3Rpb24o%0AdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnNpemU9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bnVsbD09KHI9dCks%0Abik6dT9udWxsOnJ9LG4ubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KHU9bnVsbCE9KHI9dCksbik6dT9yOm51bGx9LCR1KG4sdCl9%0ALFZvLmxheW91dC50cmVlbWFwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHQpe2Zv%0Acih2YXIgZSxyLHU9LTEsaT1uLmxlbmd0aDsrK3U8aTspcj0oZT1uW3VdKS52YWx1%0AZSooMD50PzA6dCksZS5hcmVhPWlzTmFOKHIpfHwwPj1yPzA6cn1mdW5jdGlvbiB0%0AKGUpe3ZhciBpPWUuY2hpbGRyZW47aWYoaSYmaS5sZW5ndGgpe3ZhciBvLGEsYyxs%0APWYoZSkscz1bXSxoPWkuc2xpY2UoKSxwPTEvMCx2PSJzbGljZSI9PT1nP2wuZHg6%0AImRpY2UiPT09Zz9sLmR5OiJzbGljZS1kaWNlIj09PWc/MSZlLmRlcHRoP2wuZHk6%0AbC5keDpNYXRoLm1pbihsLmR4LGwuZHkpO2ZvcihuKGgsbC5keCpsLmR5L2UudmFs%0AdWUpLHMuYXJlYT0wOyhjPWgubGVuZ3RoKT4wOylzLnB1c2gobz1oW2MtMV0pLHMu%0AYXJlYSs9by5hcmVhLCJzcXVhcmlmeSIhPT1nfHwoYT1yKHMsdikpPD1wPyhoLnBv%0AcCgpLHA9YSk6KHMuYXJlYS09cy5wb3AoKS5hcmVhLHUocyx2LGwsITEpLHY9TWF0%0AaC5taW4obC5keCxsLmR5KSxzLmxlbmd0aD1zLmFyZWE9MCxwPTEvMCk7cy5sZW5n%0AdGgmJih1KHMsdixsLCEwKSxzLmxlbmd0aD1zLmFyZWE9MCksaS5mb3JFYWNoKHQp%0AfX1mdW5jdGlvbiBlKHQpe3ZhciByPXQuY2hpbGRyZW47aWYociYmci5sZW5ndGgp%0Ae3ZhciBpLG89Zih0KSxhPXIuc2xpY2UoKSxjPVtdO2ZvcihuKGEsby5keCpvLmR5%0AL3QudmFsdWUpLGMuYXJlYT0wO2k9YS5wb3AoKTspYy5wdXNoKGkpLGMuYXJlYSs9%0AaS5hcmVhLG51bGwhPWkueiYmKHUoYyxpLno/by5keDpvLmR5LG8sIWEubGVuZ3Ro%0AKSxjLmxlbmd0aD1jLmFyZWE9MCk7ci5mb3JFYWNoKGUpfX1mdW5jdGlvbiByKG4s%0AdCl7Zm9yKHZhciBlLHI9bi5hcmVhLHU9MCxpPTEvMCxvPS0xLGE9bi5sZW5ndGg7%0AKytvPGE7KShlPW5bb10uYXJlYSkmJihpPmUmJihpPWUpLGU+dSYmKHU9ZSkpO3Jl%0AdHVybiByKj1yLHQqPXQscj9NYXRoLm1heCh0KnUqcC9yLHIvKHQqaSpwKSk6MS8w%0AfWZ1bmN0aW9uIHUobix0LGUscil7dmFyIHUsaT0tMSxvPW4ubGVuZ3RoLGE9ZS54%0ALGw9ZS55LHM9dD9jKG4uYXJlYS90KTowO2lmKHQ9PWUuZHgpe2Zvcigocnx8cz5l%0ALmR5KSYmKHM9ZS5keSk7KytpPG87KXU9bltpXSx1Lng9YSx1Lnk9bCx1LmR5PXMs%0AYSs9dS5keD1NYXRoLm1pbihlLngrZS5keC1hLHM/Yyh1LmFyZWEvcyk6MCk7dS56%0APSEwLHUuZHgrPWUueCtlLmR4LWEsZS55Kz1zLGUuZHktPXN9ZWxzZXtmb3IoKHJ8%0AfHM+ZS5keCkmJihzPWUuZHgpOysraTxvOyl1PW5baV0sdS54PWEsdS55PWwsdS5k%0AeD1zLGwrPXUuZHk9TWF0aC5taW4oZS55K2UuZHktbCxzP2ModS5hcmVhL3MpOjAp%0AO3Uuej0hMSx1LmR5Kz1lLnkrZS5keS1sLGUueCs9cyxlLmR4LT1zfX1mdW5jdGlv%0AbiBpKHIpe3ZhciB1PW98fGEociksaT11WzBdO3JldHVybiBpLng9MCxpLnk9MCxp%0ALmR4PWxbMF0saS5keT1sWzFdLG8mJmEucmV2YWx1ZShpKSxuKFtpXSxpLmR4Kmku%0AZHkvaS52YWx1ZSksKG8/ZTp0KShpKSxoJiYobz11KSx1fXZhciBvLGE9Vm8ubGF5%0Ab3V0LmhpZXJhcmNoeSgpLGM9TWF0aC5yb3VuZCxsPVsxLDFdLHM9bnVsbCxmPXpp%0ALGg9ITEsZz0ic3F1YXJpZnkiLHA9LjUqKDErTWF0aC5zcXJ0KDUpKTtyZXR1cm4g%0AaS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4s%0AaSk6bH0saS5wYWRkaW5nPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQodCl7dmFyIGU9%0Abi5jYWxsKGksdCx0LmRlcHRoKTtyZXR1cm4gbnVsbD09ZT96aSh0KTpMaSh0LCJu%0AdW1iZXIiPT10eXBlb2YgZT9bZSxlLGUsZV06ZSl9ZnVuY3Rpb24gZSh0KXtyZXR1%0Acm4gTGkodCxuKX1pZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gczt2YXIgcjty%0AZXR1cm4gZj1udWxsPT0ocz1uKT96aToiZnVuY3Rpb24iPT0ocj10eXBlb2Ygbik/%0AdDoibnVtYmVyIj09PXI/KG49W24sbixuLG5dLGUpOmUsaX0saS5yb3VuZD1mdW5j%0AdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uP01hdGgucm91bmQ6%0ATnVtYmVyLGkpOmMhPU51bWJlcn0saS5zdGlja3k9ZnVuY3Rpb24obil7cmV0dXJu%0AIGFyZ3VtZW50cy5sZW5ndGg/KGg9bixvPW51bGwsaSk6aH0saS5yYXRpbz1mdW5j%0AdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1uLGkpOnB9LGkubW9k%0AZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1uKyIiLGkp%0AOmd9LCR1KGksYSl9LFZvLnJhbmRvbT17bm9ybWFsOmZ1bmN0aW9uKG4sdCl7dmFy%0AIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gMj5lJiYodD0xKSwxPmUmJihuPTAp%0ALGZ1bmN0aW9uKCl7dmFyIGUscix1O2RvIGU9MipNYXRoLnJhbmRvbSgpLTEscj0y%0AKk1hdGgucmFuZG9tKCktMSx1PWUqZStyKnI7d2hpbGUoIXV8fHU+MSk7cmV0dXJu%0AIG4rdCplKk1hdGguc3FydCgtMipNYXRoLmxvZyh1KS91KX19LGxvZ05vcm1hbDpm%0AdW5jdGlvbigpe3ZhciBuPVZvLnJhbmRvbS5ub3JtYWwuYXBwbHkoVm8sYXJndW1l%0AbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19LGJh%0AdGVzOmZ1bmN0aW9uKG4pe3ZhciB0PVZvLnJhbmRvbS5pcndpbkhhbGwobik7cmV0%0AdXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQoKS9ufX0saXJ3aW5IYWxsOmZ1bmN0aW9u%0AKG4pe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9MDtuPmU7ZSsrKXQr%0APU1hdGgucmFuZG9tKCk7cmV0dXJuIHR9fX0sVm8uc2NhbGU9e307dmFyIHNsPXtm%0AbG9vcjp3dCxjZWlsOnd0fTtWby5zY2FsZS5saW5lYXI9ZnVuY3Rpb24oKXtyZXR1%0Acm4gamkoWzAsMV0sWzAsMV0sZ3UsITEpfTt2YXIgZmw9e3M6MSxnOjEscDoxLHI6%0AMSxlOjF9O1ZvLnNjYWxlLmxvZz1mdW5jdGlvbigpe3JldHVybiBYaShWby5zY2Fs%0AZS5saW5lYXIoKS5kb21haW4oWzAsMV0pLDEwLCEwLFsxLDEwXSl9O3ZhciBobD1W%0Aby5mb3JtYXQoIi4wZSIpLGdsPXtmbG9vcjpmdW5jdGlvbihuKXtyZXR1cm4tTWF0%0AaC5jZWlsKC1uKX0sY2VpbDpmdW5jdGlvbihuKXtyZXR1cm4tTWF0aC5mbG9vcigt%0Abil9fTtWby5zY2FsZS5wb3c9ZnVuY3Rpb24oKXtyZXR1cm4gJGkoVm8uc2NhbGUu%0AbGluZWFyKCksMSxbMCwxXSl9LFZvLnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1%0Acm4gVm8uc2NhbGUucG93KCkuZXhwb25lbnQoLjUpfSxWby5zY2FsZS5vcmRpbmFs%0APWZ1bmN0aW9uKCl7cmV0dXJuIFdpKFtdLHt0OiJyYW5nZSIsYTpbW11dfSl9LFZv%0ALnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rpb24oKXtyZXR1cm4gVm8uc2NhbGUub3Jk%0AaW5hbCgpLnJhbmdlKHBsKX0sVm8uc2NhbGUuY2F0ZWdvcnkyMD1mdW5jdGlvbigp%0Ae3JldHVybiBWby5zY2FsZS5vcmRpbmFsKCkucmFuZ2UodmwpfSxWby5zY2FsZS5j%0AYXRlZ29yeTIwYj1mdW5jdGlvbigpe3JldHVybiBWby5zY2FsZS5vcmRpbmFsKCku%0AcmFuZ2UoZGwpfSxWby5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVy%0AbiBWby5zY2FsZS5vcmRpbmFsKCkucmFuZ2UobWwpfTt2YXIgcGw9WzIwNjIyNjAs%0AMTY3NDQyMDYsMjkyNDU4OCwxNDAzNDcyOCw5NzI1ODg1LDkxOTcxMzEsMTQ5MDcz%0AMzAsODM1NTcxMSwxMjM2OTE4NiwxNTU2MTc1XS5tYXAodnQpLHZsPVsyMDYyMjYw%0ALDExNDU0NDQwLDE2NzQ0MjA2LDE2NzU5NjcyLDI5MjQ1ODgsMTAwMTg2OTgsMTQw%0AMzQ3MjgsMTY3NTA3NDIsOTcyNTg4NSwxMjk1NTg2MSw5MTk3MTMxLDEyODg1MTQw%0ALDE0OTA3MzMwLDE2MjM0MTk0LDgzNTU3MTEsMTMwOTI4MDcsMTIzNjkxODYsMTQ0%0AMDg1ODksMTU1NjE3NSwxMDQxMDcyNV0ubWFwKHZ0KSxkbD1bMzc1MDc3Nyw1Mzk1%0ANjE5LDcwNDA3MTksMTAyNjQyODYsNjUxOTA5Nyw5MjE2NTk0LDExOTE1MTE1LDEz%0ANTU2NjM2LDkyMDI5OTMsMTI0MjY4MDksMTUxODY1MTQsMTUxOTA5MzIsODY2NjE2%0AOSwxMTM1NjQ5MCwxNDA0OTY0MywxNTE3NzM3Miw4MDc3NjgzLDEwODM0MzI0LDEz%0ANTI4NTA5LDE0NTg5NjU0XS5tYXAodnQpLG1sPVszMjQ0NzMzLDcwNTcxMTAsMTA0%0AMDY2MjUsMTMwMzI0MzEsMTUwOTUwNTMsMTY2MTY3NjQsMTY2MjUyNTksMTY2MzQw%0AMTgsMzI1MzA3Niw3NjUyNDcwLDEwNjA3MDAzLDEzMTAxNTA0LDc2OTUyODEsMTAz%0AOTQzMTIsMTIzNjkzNzIsMTQzNDI4OTEsNjUxMzUwNyw5ODY4OTUwLDEyNDM0ODc3%0ALDE0Mjc3MDgxXS5tYXAodnQpO1ZvLnNjYWxlLnF1YW50aWxlPWZ1bmN0aW9uKCl7%0AcmV0dXJuIEppKFtdLFtdKX0sVm8uc2NhbGUucXVhbnRpemU9ZnVuY3Rpb24oKXty%0AZXR1cm4gR2koMCwxLFswLDFdKX0sVm8uc2NhbGUudGhyZXNob2xkPWZ1bmN0aW9u%0AKCl7cmV0dXJuIEtpKFsuNV0sWzAsMV0pfSxWby5zY2FsZS5pZGVudGl0eT1mdW5j%0AdGlvbigpe3JldHVybiBRaShbMCwxXSl9LFZvLnN2Zz17fSxWby5zdmcuYXJjPWZ1%0AbmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVu%0AdHMpLGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbz1yLmFwcGx5KHRoaXMsYXJn%0AdW1lbnRzKSt5bCxhPXUuYXBwbHkodGhpcyxhcmd1bWVudHMpK3lsLGM9KG8+YSYm%0AKGM9byxvPWEsYT1jKSxhLW8pLGw9d2E+Yz8iMCI6IjEiLHM9TWF0aC5jb3Mobyks%0AZj1NYXRoLnNpbihvKSxoPU1hdGguY29zKGEpLGc9TWF0aC5zaW4oYSk7CnJldHVy%0AbiBjPj14bD9uPyJNMCwiK2krIkEiK2krIiwiK2krIiAwIDEsMSAwLCIrLWkrIkEi%0AK2krIiwiK2krIiAwIDEsMSAwLCIraSsiTTAsIituKyJBIituKyIsIituKyIgMCAx%0ALDAgMCwiKy1uKyJBIituKyIsIituKyIgMCAxLDAgMCwiK24rIloiOiJNMCwiK2kr%0AIkEiK2krIiwiK2krIiAwIDEsMSAwLCIrLWkrIkEiK2krIiwiK2krIiAwIDEsMSAw%0ALCIraSsiWiI6bj8iTSIraSpzKyIsIitpKmYrIkEiK2krIiwiK2krIiAwICIrbCsi%0ALDEgIitpKmgrIiwiK2kqZysiTCIrbipoKyIsIituKmcrIkEiK24rIiwiK24rIiAw%0AICIrbCsiLDAgIituKnMrIiwiK24qZisiWiI6Ik0iK2kqcysiLCIraSpmKyJBIitp%0AKyIsIitpKyIgMCAiK2wrIiwxICIraSpoKyIsIitpKmcrIkwwLDAiKyJaIn12YXIg%0AdD1ubyxlPXRvLHI9ZW8sdT1ybztyZXR1cm4gbi5pbm5lclJhZGl1cz1mdW5jdGlv%0AbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1idChlKSxuKTp0fSxuLm91%0AdGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhl%0APWJ0KHQpLG4pOmV9LG4uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aD8ocj1idCh0KSxuKTpyfSxuLmVuZEFuZ2xlPWZ1bmN0aW9u%0AKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWJ0KHQpLG4pOnV9LG4uY2Vu%0AdHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0odC5hcHBseSh0aGlzLGFyZ3VtZW50cykr%0AZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsaT0oci5hcHBseSh0aGlzLGFyZ3Vt%0AZW50cykrdS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIreWw7cmV0dXJuW01hdGgu%0AY29zKGkpKm4sTWF0aC5zaW4oaSkqbl19LG59O3ZhciB5bD0ta2EseGw9U2EtRWE7%0AVm8uc3ZnLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdW8od3QpfTt2YXIgTWw9Vm8u%0AbWFwKHtsaW5lYXI6aW8sImxpbmVhci1jbG9zZWQiOm9vLHN0ZXA6YW8sInN0ZXAt%0AYmVmb3JlIjpjbywic3RlcC1hZnRlciI6bG8sYmFzaXM6dm8sImJhc2lzLW9wZW4i%0AOm1vLCJiYXNpcy1jbG9zZWQiOnlvLGJ1bmRsZTp4byxjYXJkaW5hbDpobywiY2Fy%0AZGluYWwtb3BlbiI6c28sImNhcmRpbmFsLWNsb3NlZCI6Zm8sbW9ub3RvbmU6a299%0AKTtNbC5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7dC5rZXk9bix0LmNsb3NlZD0vLWNs%0Ab3NlZCQvLnRlc3Qobil9KTt2YXIgX2w9WzAsMi8zLDEvMywwXSxibD1bMCwxLzMs%0AMi8zLDBdLHdsPVswLDEvNiwyLzMsMS82XTtWby5zdmcubGluZS5yYWRpYWw9ZnVu%0AY3Rpb24oKXt2YXIgbj11byhFbyk7cmV0dXJuIG4ucmFkaXVzPW4ueCxkZWxldGUg%0Abi54LG4uYW5nbGU9bi55LGRlbGV0ZSBuLnksbn0sY28ucmV2ZXJzZT1sbyxsby5y%0AZXZlcnNlPWNvLFZvLnN2Zy5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIEFvKHd0KX0s%0AVm8uc3ZnLmFyZWEucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIG49QW8oRW8pO3JldHVy%0AbiBuLnJhZGl1cz1uLngsZGVsZXRlIG4ueCxuLmlubmVyUmFkaXVzPW4ueDAsZGVs%0AZXRlIG4ueDAsbi5vdXRlclJhZGl1cz1uLngxLGRlbGV0ZSBuLngxLG4uYW5nbGU9%0Abi55LGRlbGV0ZSBuLnksbi5zdGFydEFuZ2xlPW4ueTAsZGVsZXRlIG4ueTAsbi5l%0AbmRBbmdsZT1uLnkxLGRlbGV0ZSBuLnkxLG59LFZvLnN2Zy5jaG9yZD1mdW5jdGlv%0Abigpe2Z1bmN0aW9uIG4obixhKXt2YXIgYz10KHRoaXMsaSxuLGEpLGw9dCh0aGlz%0ALG8sbixhKTtyZXR1cm4iTSIrYy5wMCtyKGMucixjLnAxLGMuYTEtYy5hMCkrKGUo%0AYyxsKT91KGMucixjLnAxLGMucixjLnAwKTp1KGMucixjLnAxLGwucixsLnAwKSty%0AKGwucixsLnAxLGwuYTEtbC5hMCkrdShsLnIsbC5wMSxjLnIsYy5wMCkpKyJaIn1m%0AdW5jdGlvbiB0KG4sdCxlLHIpe3ZhciB1PXQuY2FsbChuLGUsciksaT1hLmNhbGwo%0Abix1LHIpLG89Yy5jYWxsKG4sdSxyKSt5bCxzPWwuY2FsbChuLHUscikreWw7cmV0%0AdXJue3I6aSxhMDpvLGExOnMscDA6W2kqTWF0aC5jb3MobyksaSpNYXRoLnNpbihv%0AKV0scDE6W2kqTWF0aC5jb3MocyksaSpNYXRoLnNpbihzKV19fWZ1bmN0aW9uIGUo%0Abix0KXtyZXR1cm4gbi5hMD09dC5hMCYmbi5hMT09dC5hMX1mdW5jdGlvbiByKG4s%0AdCxlKXtyZXR1cm4iQSIrbisiLCIrbisiIDAgIisgKyhlPndhKSsiLDEgIit0fWZ1%0AbmN0aW9uIHUobix0LGUscil7cmV0dXJuIlEgMCwwICIrcn12YXIgaT1wcixvPXZy%0ALGE9Q28sYz1lbyxsPXJvO3JldHVybiBuLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1%0Acm4gYXJndW1lbnRzLmxlbmd0aD8oYT1idCh0KSxuKTphfSxuLnNvdXJjZT1mdW5j%0AdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1idCh0KSxuKTppfSxu%0ALnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1i%0AdCh0KSxuKTpvfSxuLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KGM9YnQodCksbik6Y30sbi5lbmRBbmdsZT1mdW5jdGlvbih0%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1idCh0KSxuKTpsfSxufSxWby5z%0AdmcuZGlhZ29uYWw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4sdSl7dmFyIGk9dC5j%0AYWxsKHRoaXMsbix1KSxvPWUuY2FsbCh0aGlzLG4sdSksYT0oaS55K28ueSkvMixj%0APVtpLHt4OmkueCx5OmF9LHt4Om8ueCx5OmF9LG9dO3JldHVybiBjPWMubWFwKHIp%0ALCJNIitjWzBdKyJDIitjWzFdKyIgIitjWzJdKyIgIitjWzNdfXZhciB0PXByLGU9%0AdnIscj1ObztyZXR1cm4gbi5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KHQ9YnQoZSksbik6dH0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7%0AcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YnQodCksbik6ZX0sbi5wcm9qZWN0%0AaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6%0Acn0sbn0sVm8uc3ZnLmRpYWdvbmFsLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBuPVZv%0ALnN2Zy5kaWFnb25hbCgpLHQ9Tm8sZT1uLnByb2plY3Rpb247cmV0dXJuIG4ucHJv%0AamVjdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHpv%0AKHQ9bikpOnR9LG59LFZvLnN2Zy5zeW1ib2w9ZnVuY3Rpb24oKXtmdW5jdGlvbiBu%0AKG4scil7cmV0dXJuKFNsLmdldCh0LmNhbGwodGhpcyxuLHIpKXx8cW8pKGUuY2Fs%0AbCh0aGlzLG4scikpfXZhciB0PVRvLGU9TG87cmV0dXJuIG4udHlwZT1mdW5jdGlv%0AbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1idChlKSxuKTp0fSxuLnNp%0AemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YnQodCks%0Abik6ZX0sbn07dmFyIFNsPVZvLm1hcCh7Y2lyY2xlOnFvLGNyb3NzOmZ1bmN0aW9u%0AKG4pe3ZhciB0PU1hdGguc3FydChuLzUpLzI7cmV0dXJuIk0iKy0zKnQrIiwiKy10%0AKyJIIistdCsiViIrLTMqdCsiSCIrdCsiViIrLXQrIkgiKzMqdCsiViIrdCsiSCIr%0AdCsiViIrMyp0KyJIIistdCsiViIrdCsiSCIrLTMqdCsiWiJ9LGRpYW1vbmQ6ZnVu%0AY3Rpb24obil7dmFyIHQ9TWF0aC5zcXJ0KG4vKDIqQ2wpKSxlPXQqQ2w7cmV0dXJu%0AIk0wLCIrLXQrIkwiK2UrIiwwIisiIDAsIit0KyIgIistZSsiLDAiKyJaIn0sc3F1%0AYXJlOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguc3FydChuKS8yO3JldHVybiJNIist%0AdCsiLCIrLXQrIkwiK3QrIiwiKy10KyIgIit0KyIsIit0KyIgIistdCsiLCIrdCsi%0AWiJ9LCJ0cmlhbmdsZS1kb3duIjpmdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQo%0Abi9BbCksZT10KkFsLzI7cmV0dXJuIk0wLCIrZSsiTCIrdCsiLCIrLWUrIiAiKy10%0AKyIsIistZSsiWiJ9LCJ0cmlhbmdsZS11cCI6ZnVuY3Rpb24obil7dmFyIHQ9TWF0%0AaC5zcXJ0KG4vQWwpLGU9dCpBbC8yO3JldHVybiJNMCwiKy1lKyJMIit0KyIsIitl%0AKyIgIistdCsiLCIrZSsiWiJ9fSk7Vm8uc3ZnLnN5bWJvbFR5cGVzPVNsLmtleXMo%0AKTt2YXIga2wsRWwsQWw9TWF0aC5zcXJ0KDMpLENsPU1hdGgudGFuKDMwKkNhKSxO%0AbD1bXSx6bD0wO05sLmNhbGw9dmEuY2FsbCxObC5lbXB0eT12YS5lbXB0eSxObC5u%0Ab2RlPXZhLm5vZGUsTmwuc2l6ZT12YS5zaXplLFZvLnRyYW5zaXRpb249ZnVuY3Rp%0Ab24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/a2w/bi50cmFuc2l0aW9uKCk6%0Abjp5YS50cmFuc2l0aW9uKCl9LFZvLnRyYW5zaXRpb24ucHJvdG90eXBlPU5sLE5s%0ALnNlbGVjdD1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdT10aGlzLmlkLGk9W107bj1i%0AKG4pO2Zvcih2YXIgbz0tMSxhPXRoaXMubGVuZ3RoOysrbzxhOyl7aS5wdXNoKHQ9%0AW10pO2Zvcih2YXIgYz10aGlzW29dLGw9LTEscz1jLmxlbmd0aDsrK2w8czspKHI9%0AY1tsXSkmJihlPW4uY2FsbChyLHIuX19kYXRhX18sbCxvKSk/KCJfX2RhdGFfXyJp%0AbiByJiYoZS5fX2RhdGFfXz1yLl9fZGF0YV9fKSxVbyhlLGwsdSxyLl9fdHJhbnNp%0AdGlvbl9fW3VdKSx0LnB1c2goZSkpOnQucHVzaChudWxsKX1yZXR1cm4gUm8oaSx1%0AKX0sTmwuc2VsZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0LGUscix1LGksbz10aGlz%0ALmlkLGE9W107bj13KG4pO2Zvcih2YXIgYz0tMSxsPXRoaXMubGVuZ3RoOysrYzxs%0AOylmb3IodmFyIHM9dGhpc1tjXSxmPS0xLGg9cy5sZW5ndGg7KytmPGg7KWlmKHI9%0Ac1tmXSl7aT1yLl9fdHJhbnNpdGlvbl9fW29dLGU9bi5jYWxsKHIsci5fX2RhdGFf%0AXyxmLGMpLGEucHVzaCh0PVtdKTtmb3IodmFyIGc9LTEscD1lLmxlbmd0aDsrK2c8%0AcDspKHU9ZVtnXSkmJlVvKHUsZyxvLGkpLHQucHVzaCh1KX1yZXR1cm4gUm8oYSxv%0AKX0sTmwuZmlsdGVyPWZ1bmN0aW9uKG4pe3ZhciB0LGUscix1PVtdOyJmdW5jdGlv%0AbiIhPXR5cGVvZiBuJiYobj1SKG4pKTtmb3IodmFyIGk9MCxvPXRoaXMubGVuZ3Ro%0AO28+aTtpKyspe3UucHVzaCh0PVtdKTtmb3IodmFyIGU9dGhpc1tpXSxhPTAsYz1l%0ALmxlbmd0aDtjPmE7YSsrKShyPWVbYV0pJiZuLmNhbGwocixyLl9fZGF0YV9fLGEs%0AaSkmJnQucHVzaChyKX1yZXR1cm4gUm8odSx0aGlzLmlkKX0sTmwudHdlZW49ZnVu%0AY3Rpb24obix0KXt2YXIgZT10aGlzLmlkO3JldHVybiBhcmd1bWVudHMubGVuZ3Ro%0APDI/dGhpcy5ub2RlKCkuX190cmFuc2l0aW9uX19bZV0udHdlZW4uZ2V0KG4pOlAo%0AdGhpcyxudWxsPT10P2Z1bmN0aW9uKHQpe3QuX190cmFuc2l0aW9uX19bZV0udHdl%0AZW4ucmVtb3ZlKG4pfTpmdW5jdGlvbihyKXtyLl9fdHJhbnNpdGlvbl9fW2VdLnR3%0AZWVuLnNldChuLHQpfSl9LE5sLmF0dHI9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBl%0AKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYSl9ZnVuY3Rpb24gcigpe3RoaXMucmVt%0Ab3ZlQXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsKX1mdW5jdGlvbiB1KG4pe3Jl%0AdHVybiBudWxsPT1uP2U6KG4rPSIiLGZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLmdl%0AdEF0dHJpYnV0ZShhKTtyZXR1cm4gZSE9PW4mJih0PW8oZSxuKSxmdW5jdGlvbihu%0AKXt0aGlzLnNldEF0dHJpYnV0ZShhLHQobikpfSl9KX1mdW5jdGlvbiBpKG4pe3Jl%0AdHVybiBudWxsPT1uP3I6KG4rPSIiLGZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLmdl%0AdEF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCk7cmV0dXJuIGUhPT1uJiYodD1v%0AKGUsbiksZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGVOUyhhLnNwYWNlLGEu%0AbG9jYWwsdChuKSl9KX0pfWlmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHQgaW4g%0Abil0aGlzLmF0dHIodCxuW3RdKTtyZXR1cm4gdGhpc312YXIgbz0idHJhbnNmb3Jt%0AIj09bj9QdTpndSxhPVZvLm5zLnF1YWxpZnkobik7cmV0dXJuIERvKHRoaXMsImF0%0AdHIuIituLHQsYS5sb2NhbD9pOnUpfSxObC5hdHRyVHdlZW49ZnVuY3Rpb24obix0%0AKXtmdW5jdGlvbiBlKG4sZSl7dmFyIHI9dC5jYWxsKHRoaXMsbixlLHRoaXMuZ2V0%0AQXR0cmlidXRlKHUpKTtyZXR1cm4gciYmZnVuY3Rpb24obil7dGhpcy5zZXRBdHRy%0AaWJ1dGUodSxyKG4pKX19ZnVuY3Rpb24gcihuLGUpe3ZhciByPXQuY2FsbCh0aGlz%0ALG4sZSx0aGlzLmdldEF0dHJpYnV0ZU5TKHUuc3BhY2UsdS5sb2NhbCkpO3JldHVy%0AbiByJiZmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHUuc3BhY2UsdS5s%0Ab2NhbCxyKG4pKX19dmFyIHU9Vm8ubnMucXVhbGlmeShuKTtyZXR1cm4gdGhpcy50%0Ad2VlbigiYXR0ci4iK24sdS5sb2NhbD9yOmUpfSxObC5zdHlsZT1mdW5jdGlvbihu%0ALHQsZSl7ZnVuY3Rpb24gcigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9%0AZnVuY3Rpb24gdSh0KXtyZXR1cm4gbnVsbD09dD9yOih0Kz0iIixmdW5jdGlvbigp%0Ae3ZhciByLHU9Sm8uZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3Bl%0AcnR5VmFsdWUobik7cmV0dXJuIHUhPT10JiYocj1ndSh1LHQpLGZ1bmN0aW9uKHQp%0Ae3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobixyKHQpLGUpfSl9KX12YXIgaT1hcmd1%0AbWVudHMubGVuZ3RoO2lmKDM+aSl7aWYoInN0cmluZyIhPXR5cGVvZiBuKXsyPmkm%0AJih0PSIiKTtmb3IoZSBpbiBuKXRoaXMuc3R5bGUoZSxuW2VdLHQpO3JldHVybiB0%0AaGlzfWU9IiJ9cmV0dXJuIERvKHRoaXMsInN0eWxlLiIrbix0LHUpfSxObC5zdHls%0AZVR3ZWVuPWZ1bmN0aW9uKG4sdCxlKXtmdW5jdGlvbiByKHIsdSl7dmFyIGk9dC5j%0AYWxsKHRoaXMscix1LEpvLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQ%0Acm9wZXJ0eVZhbHVlKG4pKTtyZXR1cm4gaSYmZnVuY3Rpb24odCl7dGhpcy5zdHls%0AZS5zZXRQcm9wZXJ0eShuLGkodCksZSl9fXJldHVybiBhcmd1bWVudHMubGVuZ3Ro%0APDMmJihlPSIiKSx0aGlzLnR3ZWVuKCJzdHlsZS4iK24scil9LE5sLnRleHQ9ZnVu%0AY3Rpb24obil7cmV0dXJuIERvKHRoaXMsInRleHQiLG4sUG8pfSxObC5yZW1vdmU9%0AZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKCJlbmQudHJhbnNpdGlvbiIsZnVu%0AY3Rpb24oKXt2YXIgbjt0aGlzLl9fdHJhbnNpdGlvbl9fLmNvdW50PDImJihuPXRo%0AaXMucGFyZW50Tm9kZSkmJm4ucmVtb3ZlQ2hpbGQodGhpcyl9KX0sTmwuZWFzZT1m%0AdW5jdGlvbihuKXt2YXIgdD10aGlzLmlkO3JldHVybiBhcmd1bWVudHMubGVuZ3Ro%0APDE/dGhpcy5ub2RlKCkuX190cmFuc2l0aW9uX19bdF0uZWFzZTooImZ1bmN0aW9u%0AIiE9dHlwZW9mIG4mJihuPVZvLmVhc2UuYXBwbHkoVm8sYXJndW1lbnRzKSksUCh0%0AaGlzLGZ1bmN0aW9uKGUpe2UuX190cmFuc2l0aW9uX19bdF0uZWFzZT1ufSkpfSxO%0AbC5kZWxheT1mdW5jdGlvbihuKXt2YXIgdD10aGlzLmlkO3JldHVybiBhcmd1bWVu%0AdHMubGVuZ3RoPDE/dGhpcy5ub2RlKCkuX190cmFuc2l0aW9uX19bdF0uZGVsYXk6%0AUCh0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKGUscix1KXtlLl9f%0AdHJhbnNpdGlvbl9fW3RdLmRlbGF5PStuLmNhbGwoZSxlLl9fZGF0YV9fLHIsdSl9%0AOihuPStuLGZ1bmN0aW9uKGUpe2UuX190cmFuc2l0aW9uX19bdF0uZGVsYXk9bn0p%0AKX0sTmwuZHVyYXRpb249ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5pZDtyZXR1cm4g%0AYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpLl9fdHJhbnNpdGlvbl9fW3Rd%0ALmR1cmF0aW9uOlAodGhpcywiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbihl%0ALHIsdSl7ZS5fX3RyYW5zaXRpb25fX1t0XS5kdXJhdGlvbj1NYXRoLm1heCgxLG4u%0AY2FsbChlLGUuX19kYXRhX18scix1KSl9OihuPU1hdGgubWF4KDEsbiksZnVuY3Rp%0Ab24oZSl7ZS5fX3RyYW5zaXRpb25fX1t0XS5kdXJhdGlvbj1ufSkpfSxObC5lYWNo%0APWZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5pZDtpZihhcmd1bWVudHMubGVuZ3Ro%0APDIpe3ZhciByPUVsLHU9a2w7a2w9ZSxQKHRoaXMsZnVuY3Rpb24odCxyLHUpe0Vs%0APXQuX190cmFuc2l0aW9uX19bZV0sbi5jYWxsKHQsdC5fX2RhdGFfXyxyLHUpfSks%0ARWw9cixrbD11fWVsc2UgUCh0aGlzLGZ1bmN0aW9uKHIpe3ZhciB1PXIuX190cmFu%0Ac2l0aW9uX19bZV07KHUuZXZlbnR8fCh1LmV2ZW50PVZvLmRpc3BhdGNoKCJzdGFy%0AdCIsImVuZCIpKSkub24obix0KX0pO3JldHVybiB0aGlzfSxObC50cmFuc2l0aW9u%0APWZ1bmN0aW9uKCl7Zm9yKHZhciBuLHQsZSxyLHU9dGhpcy5pZCxpPSsremwsbz1b%0AXSxhPTAsYz10aGlzLmxlbmd0aDtjPmE7YSsrKXtvLnB1c2gobj1bXSk7Zm9yKHZh%0AciB0PXRoaXNbYV0sbD0wLHM9dC5sZW5ndGg7cz5sO2wrKykoZT10W2xdKSYmKHI9%0AT2JqZWN0LmNyZWF0ZShlLl9fdHJhbnNpdGlvbl9fW3VdKSxyLmRlbGF5Kz1yLmR1%0AcmF0aW9uLFVvKGUsbCxpLHIpKSxuLnB1c2goZSl9cmV0dXJuIFJvKG8saSl9LFZv%0ALnN2Zy5heGlzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtuLmVhY2goZnVuY3Rp%0Ab24oKXt2YXIgbixsPVZvLnNlbGVjdCh0aGlzKSxzPXRoaXMuX19jaGFydF9ffHxl%0ALGY9dGhpcy5fX2NoYXJ0X189ZS5jb3B5KCksaD1udWxsPT1jP2YudGlja3M/Zi50%0AaWNrcy5hcHBseShmLGEpOmYuZG9tYWluKCk6YyxnPW51bGw9PXQ/Zi50aWNrRm9y%0AbWF0P2YudGlja0Zvcm1hdC5hcHBseShmLGEpOnd0OnQscD1sLnNlbGVjdEFsbCgi%0ALnRpY2siKS5kYXRhKGgsZiksdj1wLmVudGVyKCkuaW5zZXJ0KCJnIiwiLmRvbWFp%0AbiIpLmF0dHIoImNsYXNzIiwidGljayIpLnN0eWxlKCJvcGFjaXR5IixFYSksZD1W%0Aby50cmFuc2l0aW9uKHAuZXhpdCgpKS5zdHlsZSgib3BhY2l0eSIsRWEpLnJlbW92%0AZSgpLG09Vm8udHJhbnNpdGlvbihwLm9yZGVyKCkpLnN0eWxlKCJvcGFjaXR5Iiwx%0AKSx5PXFpKGYpLHg9bC5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFswXSksTT0o%0AeC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZG9tYWluIiks%0AVm8udHJhbnNpdGlvbih4KSk7di5hcHBlbmQoImxpbmUiKSx2LmFwcGVuZCgidGV4%0AdCIpO3ZhciBfPXYuc2VsZWN0KCJsaW5lIiksYj1tLnNlbGVjdCgibGluZSIpLHc9%0AcC5zZWxlY3QoInRleHQiKS50ZXh0KGcpLFM9di5zZWxlY3QoInRleHQiKSxrPW0u%0Ac2VsZWN0KCJ0ZXh0Iik7c3dpdGNoKHIpe2Nhc2UiYm90dG9tIjpuPWpvLF8uYXR0%0AcigieTIiLHUpLFMuYXR0cigieSIsTWF0aC5tYXgodSwwKStvKSxiLmF0dHIoIngy%0AIiwwKS5hdHRyKCJ5MiIsdSksay5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixNYXRoLm1h%0AeCh1LDApK28pLHcuYXR0cigiZHkiLCIuNzFlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hv%0AciIsIm1pZGRsZSIpLE0uYXR0cigiZCIsIk0iK3lbMF0rIiwiK2krIlYwSCIreVsx%0AXSsiViIraSk7YnJlYWs7Y2FzZSJ0b3AiOm49am8sXy5hdHRyKCJ5MiIsLXUpLFMu%0AYXR0cigieSIsLShNYXRoLm1heCh1LDApK28pKSxiLmF0dHIoIngyIiwwKS5hdHRy%0AKCJ5MiIsLXUpLGsuYXR0cigieCIsMCkuYXR0cigieSIsLShNYXRoLm1heCh1LDAp%0AK28pKSx3LmF0dHIoImR5IiwiMGVtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlk%0AZGxlIiksTS5hdHRyKCJkIiwiTSIreVswXSsiLCIrLWkrIlYwSCIreVsxXSsiViIr%0ALWkpO2JyZWFrO2Nhc2UibGVmdCI6bj1IbyxfLmF0dHIoIngyIiwtdSksUy5hdHRy%0AKCJ4IiwtKE1hdGgubWF4KHUsMCkrbykpLGIuYXR0cigieDIiLC11KS5hdHRyKCJ5%0AMiIsMCksay5hdHRyKCJ4IiwtKE1hdGgubWF4KHUsMCkrbykpLmF0dHIoInkiLDAp%0ALHcuYXR0cigiZHkiLCIuMzJlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImVuZCIp%0ALE0uYXR0cigiZCIsIk0iKy1pKyIsIit5WzBdKyJIMFYiK3lbMV0rIkgiKy1pKTti%0AcmVhaztjYXNlInJpZ2h0IjpuPUhvLF8uYXR0cigieDIiLHUpLFMuYXR0cigieCIs%0ATWF0aC5tYXgodSwwKStvKSxiLmF0dHIoIngyIix1KS5hdHRyKCJ5MiIsMCksay5h%0AdHRyKCJ4IixNYXRoLm1heCh1LDApK28pLmF0dHIoInkiLDApLHcuYXR0cigiZHki%0ALCIuMzJlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IiksTS5hdHRyKCJk%0AIiwiTSIraSsiLCIreVswXSsiSDBWIit5WzFdKyJIIitpKX1pZihmLnJhbmdlQmFu%0AZCl7dmFyIEU9ZixBPUUucmFuZ2VCYW5kKCkvMjtzPWY9ZnVuY3Rpb24obil7cmV0%0AdXJuIEUobikrQX19ZWxzZSBzLnJhbmdlQmFuZD9zPWY6ZC5jYWxsKG4sZik7di5j%0AYWxsKG4scyksbS5jYWxsKG4sZil9KX12YXIgdCxlPVZvLnNjYWxlLmxpbmVhcigp%0ALHI9TGwsdT02LGk9NixvPTMsYT1bMTBdLGM9bnVsbDtyZXR1cm4gbi5zY2FsZT1m%0AdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4u%0Ab3JpZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQg%0AaW4gVGw/dCsiIjpMbCxuKTpyfSxuLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGFy%0AZ3VtZW50cy5sZW5ndGg/KGE9YXJndW1lbnRzLG4pOmF9LG4udGlja1ZhbHVlcz1m%0AdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LG4pOmN9LG4u%0AdGlja0Zvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o%0AdD1lLG4pOnR9LG4udGlja1NpemU9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRz%0ALmxlbmd0aDtyZXR1cm4gZT8odT0rdCxpPSthcmd1bWVudHNbZS0xXSxuKTp1fSxu%0ALmlubmVyVGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KHU9K3Qsbik6dX0sbi5vdXRlclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LG4pOml9LG4udGlja1BhZGRpbmc9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3Qsbik6b30sbi50%0AaWNrU3ViZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgm%0AJm59LG59O3ZhciBMbD0iYm90dG9tIixUbD17dG9wOjEscmlnaHQ6MSxib3R0b206%0AMSxsZWZ0OjF9O1ZvLnN2Zy5icnVzaD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oaSl7%0AaS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9Vm8uc2VsZWN0KHRoaXMpLnN0eWxlKCJw%0Ab2ludGVyLWV2ZW50cyIsImFsbCIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGln%0AaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIikub24oIm1vdXNlZG93bi5icnVzaCIs%0AdSkub24oInRvdWNoc3RhcnQuYnJ1c2giLHUpLG89aS5zZWxlY3RBbGwoIi5iYWNr%0AZ3JvdW5kIikuZGF0YShbMF0pO28uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRy%0AKCJjbGFzcyIsImJhY2tncm91bmQiKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRl%0AbiIpLnN0eWxlKCJjdXJzb3IiLCJjcm9zc2hhaXIiKSxpLnNlbGVjdEFsbCgiLmV4%0AdGVudCIpLmRhdGEoWzBdKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNs%0AYXNzIiwiZXh0ZW50Iikuc3R5bGUoImN1cnNvciIsIm1vdmUiKTt2YXIgYT1pLnNl%0AbGVjdEFsbCgiLnJlc2l6ZSIpLmRhdGEocCx3dCk7YS5leGl0KCkucmVtb3ZlKCks%0AYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihuKXty%0AZXR1cm4icmVzaXplICIrbn0pLnN0eWxlKCJjdXJzb3IiLGZ1bmN0aW9uKG4pe3Jl%0AdHVybiBxbFtuXX0pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGZ1bmN0aW9uKG4p%0Ae3JldHVybi9bZXddJC8udGVzdChuKT8tMzpudWxsfSkuYXR0cigieSIsZnVuY3Rp%0Ab24obil7cmV0dXJuL15bbnNdLy50ZXN0KG4pPy0zOm51bGx9KS5hdHRyKCJ3aWR0%0AaCIsNikuYXR0cigiaGVpZ2h0Iiw2KS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRl%0AbiIpLGEuc3R5bGUoImRpc3BsYXkiLG4uZW1wdHkoKT8ibm9uZSI6bnVsbCk7dmFy%0AIHMsZj1Wby50cmFuc2l0aW9uKGkpLGg9Vm8udHJhbnNpdGlvbihvKTtjJiYocz1x%0AaShjKSxoLmF0dHIoIngiLHNbMF0pLmF0dHIoIndpZHRoIixzWzFdLXNbMF0pLGUo%0AZikpLGwmJihzPXFpKGwpLGguYXR0cigieSIsc1swXSkuYXR0cigiaGVpZ2h0Iixz%0AWzFdLXNbMF0pLHIoZikpLHQoZil9KX1mdW5jdGlvbiB0KG4pe24uc2VsZWN0QWxs%0AKCIucmVzaXplIikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihuKXtyZXR1cm4i%0AdHJhbnNsYXRlKCIrc1srL2UkLy50ZXN0KG4pXSsiLCIrZlsrL15zLy50ZXN0KG4p%0AXSsiKSJ9KX1mdW5jdGlvbiBlKG4pe24uc2VsZWN0KCIuZXh0ZW50IikuYXR0cigi%0AeCIsc1swXSksbi5zZWxlY3RBbGwoIi5leHRlbnQsLm4+cmVjdCwucz5yZWN0Iiku%0AYXR0cigid2lkdGgiLHNbMV0tc1swXSl9ZnVuY3Rpb24gcihuKXtuLnNlbGVjdCgi%0ALmV4dGVudCIpLmF0dHIoInkiLGZbMF0pLG4uc2VsZWN0QWxsKCIuZXh0ZW50LC5l%0APnJlY3QsLnc+cmVjdCIpLmF0dHIoImhlaWdodCIsZlsxXS1mWzBdKX1mdW5jdGlv%0AbiB1KCl7ZnVuY3Rpb24gdSgpezMyPT1Wby5ldmVudC5rZXlDb2RlJiYoQ3x8KHg9%0AbnVsbCx6WzBdLT1zWzFdLHpbMV0tPWZbMV0sQz0yKSx5KCkpfWZ1bmN0aW9uIHAo%0AKXszMj09Vm8uZXZlbnQua2V5Q29kZSYmMj09QyYmKHpbMF0rPXNbMV0selsxXSs9%0AZlsxXSxDPTAseSgpKX1mdW5jdGlvbiB2KCl7dmFyIG49Vm8ubW91c2UoXyksdT0h%0AMTtNJiYoblswXSs9TVswXSxuWzFdKz1NWzFdKSxDfHwoVm8uZXZlbnQuYWx0S2V5%0APyh4fHwoeD1bKHNbMF0rc1sxXSkvMiwoZlswXStmWzFdKS8yXSkselswXT1zWyso%0AblswXTx4WzBdKV0selsxXT1mWysoblsxXTx4WzFdKV0pOng9bnVsbCksRSYmZChu%0ALGMsMCkmJihlKFMpLHU9ITApLEEmJmQobixsLDEpJiYocihTKSx1PSEwKSx1JiYo%0AdChTKSx3KHt0eXBlOiJicnVzaCIsbW9kZTpDPyJtb3ZlIjoicmVzaXplIn0pKX1m%0AdW5jdGlvbiBkKG4sdCxlKXt2YXIgcix1LGE9cWkodCksYz1hWzBdLGw9YVsxXSxw%0APXpbZV0sdj1lP2Y6cyxkPXZbMV0tdlswXTtyZXR1cm4gQyYmKGMtPXAsbC09ZCtw%0AKSxyPShlP2c6aCk/TWF0aC5tYXgoYyxNYXRoLm1pbihsLG5bZV0pKTpuW2VdLEM/%0AdT0ocis9cCkrZDooeCYmKHA9TWF0aC5tYXgoYyxNYXRoLm1pbihsLDIqeFtlXS1y%0AKSkpLHI+cD8odT1yLHI9cCk6dT1wKSx2WzBdIT1yfHx2WzFdIT11PyhlP289bnVs%0AbDppPW51bGwsdlswXT1yLHZbMV09dSwhMCk6dm9pZCAwfWZ1bmN0aW9uIG0oKXt2%0AKCksUy5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zZWxlY3RBbGwoIi5y%0AZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbi5lbXB0eSgpPyJub25lIjpudWxsKSxW%0Aby5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIixudWxsKSxMLm9uKCJtb3Vz%0AZW1vdmUuYnJ1c2giLG51bGwpLm9uKCJtb3VzZXVwLmJydXNoIixudWxsKS5vbigi%0AdG91Y2htb3ZlLmJydXNoIixudWxsKS5vbigidG91Y2hlbmQuYnJ1c2giLG51bGwp%0ALm9uKCJrZXlkb3duLmJydXNoIixudWxsKS5vbigia2V5dXAuYnJ1c2giLG51bGwp%0ALE4oKSx3KHt0eXBlOiJicnVzaGVuZCJ9KX12YXIgeCxNLF89dGhpcyxiPVZvLnNl%0AbGVjdChWby5ldmVudC50YXJnZXQpLHc9YS5vZihfLGFyZ3VtZW50cyksUz1Wby5z%0AZWxlY3QoXyksaz1iLmRhdHVtKCksRT0hL14obnxzKSQvLnRlc3QoaykmJmMsQT0h%0AL14oZXx3KSQvLnRlc3QoaykmJmwsQz1iLmNsYXNzZWQoImV4dGVudCIpLE49SSgp%0ALHo9Vm8ubW91c2UoXyksTD1Wby5zZWxlY3QoSm8pLm9uKCJrZXlkb3duLmJydXNo%0AIix1KS5vbigia2V5dXAuYnJ1c2giLHApO2lmKFZvLmV2ZW50LmNoYW5nZWRUb3Vj%0AaGVzP0wub24oInRvdWNobW92ZS5icnVzaCIsdikub24oInRvdWNoZW5kLmJydXNo%0AIixtKTpMLm9uKCJtb3VzZW1vdmUuYnJ1c2giLHYpLm9uKCJtb3VzZXVwLmJydXNo%0AIixtKSxTLmludGVycnVwdCgpLnNlbGVjdEFsbCgiKiIpLmludGVycnVwdCgpLEMp%0AelswXT1zWzBdLXpbMF0selsxXT1mWzBdLXpbMV07ZWxzZSBpZihrKXt2YXIgVD0r%0AL3ckLy50ZXN0KGspLHE9Ky9ebi8udGVzdChrKTtNPVtzWzEtVF0telswXSxmWzEt%0AcV0telsxXV0selswXT1zW1RdLHpbMV09ZltxXX1lbHNlIFZvLmV2ZW50LmFsdEtl%0AeSYmKHg9ei5zbGljZSgpKTtTLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUi%0AKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksVm8u%0Ac2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIsYi5zdHlsZSgiY3Vyc29yIikp%0ALHcoe3R5cGU6ImJydXNoc3RhcnQifSksdigpfXZhciBpLG8sYT1NKG4sImJydXNo%0Ac3RhcnQiLCJicnVzaCIsImJydXNoZW5kIiksYz1udWxsLGw9bnVsbCxzPVswLDBd%0ALGY9WzAsMF0saD0hMCxnPSEwLHA9UmxbMF07cmV0dXJuIG4uZXZlbnQ9ZnVuY3Rp%0Ab24obil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49YS5vZih0aGlzLGFyZ3VtZW50%0AcyksdD17eDpzLHk6ZixpOmksajpvfSxlPXRoaXMuX19jaGFydF9ffHx0O3RoaXMu%0AX19jaGFydF9fPXQsa2w/Vm8uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNo%0AKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXtpPWUuaSxvPWUuaixzPWUueCxmPWUu%0AeSxuKHt0eXBlOiJicnVzaHN0YXJ0In0pfSkudHdlZW4oImJydXNoOmJydXNoIixm%0AdW5jdGlvbigpe3ZhciBlPXB1KHMsdC54KSxyPXB1KGYsdC55KTtyZXR1cm4gaT1v%0APW51bGwsZnVuY3Rpb24odSl7cz10Lng9ZSh1KSxmPXQueT1yKHUpLG4oe3R5cGU6%0AImJydXNoIixtb2RlOiJyZXNpemUifSl9fSkuZWFjaCgiZW5kLmJydXNoIixmdW5j%0AdGlvbigpe2k9dC5pLG89dC5qLG4oe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUi%0AfSksbih7dHlwZToiYnJ1c2hlbmQifSl9KToobih7dHlwZToiYnJ1c2hzdGFydCJ9%0AKSxuKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pLG4oe3R5cGU6ImJydXNo%0AZW5kIn0pKX0pfSxuLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KGM9dCxwPVJsWyFjPDwxfCFsXSxuKTpjfSxuLnk9ZnVuY3Rpb24odCl7cmV0%0AdXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxwPVJsWyFjPDwxfCFsXSxuKTpsfSxu%0ALmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjJiZs%0APyhoPSEhdFswXSxnPSEhdFsxXSk6Yz9oPSEhdDpsJiYoZz0hIXQpLG4pOmMmJmw/%0AW2gsZ106Yz9oOmw/ZzpudWxsfSxuLmV4dGVudD1mdW5jdGlvbih0KXt2YXIgZSxy%0ALHUsYSxoO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjJiYoZT10WzBdLHI9dFsx%0AXSxsJiYoZT1lWzBdLHI9clswXSksaT1bZSxyXSxjLmludmVydCYmKGU9YyhlKSxy%0APWMocikpLGU+ciYmKGg9ZSxlPXIscj1oKSwoZSE9c1swXXx8ciE9c1sxXSkmJihz%0APVtlLHJdKSksbCYmKHU9dFswXSxhPXRbMV0sYyYmKHU9dVsxXSxhPWFbMV0pLG89%0AW3UsYV0sbC5pbnZlcnQmJih1PWwodSksYT1sKGEpKSx1PmEmJihoPXUsdT1hLGE9%0AaCksKHUhPWZbMF18fGEhPWZbMV0pJiYoZj1bdSxhXSkpLG4pOihjJiYoaT8oZT1p%0AWzBdLHI9aVsxXSk6KGU9c1swXSxyPXNbMV0sYy5pbnZlcnQmJihlPWMuaW52ZXJ0%0AKGUpLHI9Yy5pbnZlcnQocikpLGU+ciYmKGg9ZSxlPXIscj1oKSkpLGwmJihvPyh1%0APW9bMF0sYT1vWzFdKToodT1mWzBdLGE9ZlsxXSxsLmludmVydCYmKHU9bC5pbnZl%0AcnQodSksYT1sLmludmVydChhKSksdT5hJiYoaD11LHU9YSxhPWgpKSksYyYmbD9b%0AW2UsdV0sW3IsYV1dOmM/W2Uscl06bCYmW3UsYV0pfSxuLmNsZWFyPWZ1bmN0aW9u%0AKCl7cmV0dXJuIG4uZW1wdHkoKXx8KHM9WzAsMF0sZj1bMCwwXSxpPW89bnVsbCks%0Abn0sbi5lbXB0eT1mdW5jdGlvbigpe3JldHVybiEhYyYmc1swXT09c1sxXXx8ISFs%0AJiZmWzBdPT1mWzFdfSxWby5yZWJpbmQobixhLCJvbiIpfTt2YXIgcWw9e246Im5z%0ALXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6%0AZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJl%0Ac2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sUmw9W1sibiIsImUiLCJzIiwidyIsIm53%0AIiwibmUiLCJzZSIsInN3Il0sWyJlIiwidyJdLFsibiIsInMiXSxbXV0sRGw9bmMu%0AZm9ybWF0PW9jLnRpbWVGb3JtYXQsUGw9RGwudXRjLFVsPVBsKCIlWS0lbS0lZFQl%0ASDolTTolUy4lTFoiKTtEbC5pc289RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcm%0AJituZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/Rm86VWwsRm8u%0AcGFyc2U9ZnVuY3Rpb24obil7dmFyIHQ9bmV3IERhdGUobik7cmV0dXJuIGlzTmFO%0AKHQpP251bGw6dH0sRm8udG9TdHJpbmc9VWwudG9TdHJpbmcsbmMuc2Vjb25kPVB0%0AKGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgdGMoMWUzKk1hdGguZmxvb3Iobi8xZTMp%0AKX0sZnVuY3Rpb24obix0KXtuLnNldFRpbWUobi5nZXRUaW1lKCkrMWUzKk1hdGgu%0AZmxvb3IodCkpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRTZWNvbmRzKCl9KSxu%0AYy5zZWNvbmRzPW5jLnNlY29uZC5yYW5nZSxuYy5zZWNvbmRzLnV0Yz1uYy5zZWNv%0AbmQudXRjLnJhbmdlLG5jLm1pbnV0ZT1QdChmdW5jdGlvbihuKXtyZXR1cm4gbmV3%0AIHRjKDZlNCpNYXRoLmZsb29yKG4vNmU0KSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRU%0AaW1lKG4uZ2V0VGltZSgpKzZlNCpNYXRoLmZsb29yKHQpKX0sZnVuY3Rpb24obil7%0AcmV0dXJuIG4uZ2V0TWludXRlcygpfSksbmMubWludXRlcz1uYy5taW51dGUucmFu%0AZ2UsbmMubWludXRlcy51dGM9bmMubWludXRlLnV0Yy5yYW5nZSxuYy5ob3VyPVB0%0AKGZ1bmN0aW9uKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKS82MDtyZXR1%0Acm4gbmV3IHRjKDM2ZTUqKE1hdGguZmxvb3Iobi8zNmU1LXQpK3QpKX0sZnVuY3Rp%0Ab24obix0KXtuLnNldFRpbWUobi5nZXRUaW1lKCkrMzZlNSpNYXRoLmZsb29yKHQp%0AKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLG5jLmhvdXJzPW5j%0ALmhvdXIucmFuZ2UsbmMuaG91cnMudXRjPW5jLmhvdXIudXRjLnJhbmdlLG5jLm1v%0AbnRoPVB0KGZ1bmN0aW9uKG4pe3JldHVybiBuPW5jLmRheShuKSxuLnNldERhdGUo%0AMSksbn0sZnVuY3Rpb24obix0KXtuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSt0KX0s%0AZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TW9udGgoKX0pLG5jLm1vbnRocz1uYy5t%0Ab250aC5yYW5nZSxuYy5tb250aHMudXRjPW5jLm1vbnRoLnV0Yy5yYW5nZTt2YXIg%0Aamw9WzFlMyw1ZTMsMTVlMywzZTQsNmU0LDNlNSw5ZTUsMThlNSwzNmU1LDEwOGU1%0ALDIxNmU1LDQzMmU1LDg2NGU1LDE3MjhlNSw2MDQ4ZTUsMjU5MmU2LDc3NzZlNiwz%0AMTUzNmU2XSxIbD1bW25jLnNlY29uZCwxXSxbbmMuc2Vjb25kLDVdLFtuYy5zZWNv%0AbmQsMTVdLFtuYy5zZWNvbmQsMzBdLFtuYy5taW51dGUsMV0sW25jLm1pbnV0ZSw1%0AXSxbbmMubWludXRlLDE1XSxbbmMubWludXRlLDMwXSxbbmMuaG91ciwxXSxbbmMu%0AaG91ciwzXSxbbmMuaG91ciw2XSxbbmMuaG91ciwxMl0sW25jLmRheSwxXSxbbmMu%0AZGF5LDJdLFtuYy53ZWVrLDFdLFtuYy5tb250aCwxXSxbbmMubW9udGgsM10sW25j%0ALnllYXIsMV1dLEZsPURsLm11bHRpKFtbIi4lTCIsZnVuY3Rpb24obil7cmV0dXJu%0AIG4uZ2V0TWlsbGlzZWNvbmRzKCl9XSxbIjolUyIsZnVuY3Rpb24obil7cmV0dXJu%0AIG4uZ2V0U2Vjb25kcygpfV0sWyIlSTolTSIsZnVuY3Rpb24obil7cmV0dXJuIG4u%0AZ2V0TWludXRlcygpfV0sWyIlSSAlcCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0%0ASG91cnMoKX1dLFsiJWEgJWQiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERheSgp%0AJiYxIT1uLmdldERhdGUoKX1dLFsiJWIgJWQiLGZ1bmN0aW9uKG4pe3JldHVybiAx%0AIT1uLmdldERhdGUoKX1dLFsiJUIiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1v%0AbnRoKCl9XSxbIiVZIixTZV1dKSxPbD17cmFuZ2U6ZnVuY3Rpb24obix0LGUpe3Jl%0AdHVybiBWby5yYW5nZShNYXRoLmNlaWwobi9lKSplLCt0LGUpLm1hcChZbyl9LGZs%0Ab29yOnd0LGNlaWw6d3R9O0hsLnllYXI9bmMueWVhcixuYy5zY2FsZT1mdW5jdGlv%0Abigpe3JldHVybiBPbyhWby5zY2FsZS5saW5lYXIoKSxIbCxGbCl9O3ZhciBZbD1I%0AbC5tYXAoZnVuY3Rpb24obil7cmV0dXJuW25bMF0udXRjLG5bMV1dfSksSWw9UGwu%0AbXVsdGkoW1siLiVMIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENNaWxsaXNl%0AY29uZHMoKX1dLFsiOiVTIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENTZWNv%0AbmRzKCl9XSxbIiVJOiVNIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENNaW51%0AdGVzKCl9XSxbIiVJICVwIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENIb3Vy%0AcygpfV0sWyIlYSAlZCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDRGF5KCkm%0AJjEhPW4uZ2V0VVRDRGF0ZSgpfV0sWyIlYiAlZCIsZnVuY3Rpb24obil7cmV0dXJu%0AIDEhPW4uZ2V0VVRDRGF0ZSgpfV0sWyIlQiIsZnVuY3Rpb24obil7cmV0dXJuIG4u%0AZ2V0VVRDTW9udGgoKX1dLFsiJVkiLFNlXV0pO1lsLnllYXI9bmMueWVhci51dGMs%0AbmMuc2NhbGUudXRjPWZ1bmN0aW9uKCl7cmV0dXJuIE9vKFZvLnNjYWxlLmxpbmVh%0AcigpLFlsLElsKX0sVm8udGV4dD1TdChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXNw%0Ab25zZVRleHR9KSxWby5qc29uPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGt0KG4sImFw%0AcGxpY2F0aW9uL2pzb24iLElvLHQpfSxWby5odG1sPWZ1bmN0aW9uKG4sdCl7cmV0%0AdXJuIGt0KG4sInRleHQvaHRtbCIsWm8sdCl9LFZvLnhtbD1TdChmdW5jdGlvbihu%0AKXtyZXR1cm4gbi5yZXNwb25zZVhNTH0pLCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZp%0AbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFZvKToib2JqZWN0Ij09dHlwZW9mIG1vZHVs%0AZSYmbW9kdWxlLmV4cG9ydHMmJihtb2R1bGUuZXhwb3J0cz1WbyksdGhpcy5kMz1W%0Ab30oKTs8L3NjcmlwdD4NCiAgICAgIDwhLS0gbWluaW1pemVkIGpxdWVyeSBqcyBs%0AaWJyYXJ5IC0tPg0KICAgICAgPHNjcmlwdD4vKiEgalF1ZXJ5IHYyLjEuMSB8IChj%0AKSAyMDA1LCAyMDE0IGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIHwganF1ZXJ5Lm9y%0AZy9saWNlbnNlICovCiFmdW5jdGlvbihhLGIpeyJvYmplY3QiPT10eXBlb2YgbW9k%0AdWxlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBv%0AcnRzPWEuZG9jdW1lbnQ/YihhLCEwKTpmdW5jdGlvbihhKXtpZighYS5kb2N1bWVu%0AdCl0aHJvdyBuZXcgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRo%0AIGEgZG9jdW1lbnQiKTtyZXR1cm4gYihhKX06YihhKX0oInVuZGVmaW5lZCIhPXR5%0AcGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxk%0APWMuc2xpY2UsZT1jLmNvbmNhdCxmPWMucHVzaCxnPWMuaW5kZXhPZixoPXt9LGk9%0AaC50b1N0cmluZyxqPWguaGFzT3duUHJvcGVydHksaz17fSxsPWEuZG9jdW1lbnQs%0AbT0iMi4xLjEiLG49ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IG4uZm4uaW5pdChh%0ALGIpfSxvPS9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZyxwPS9e%0ALW1zLS8scT0vLShbXGRhLXpdKS9naSxyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIu%0AdG9VcHBlckNhc2UoKX07bi5mbj1uLnByb3RvdHlwZT17anF1ZXJ5Om0sY29uc3Ry%0AdWN0b3I6bixzZWxlY3RvcjoiIixsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7%0AcmV0dXJuIGQuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBudWxs%0AIT1hPzA+YT90aGlzW2ErdGhpcy5sZW5ndGhdOnRoaXNbYV06ZC5jYWxsKHRoaXMp%0AfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSl7dmFyIGI9bi5tZXJnZSh0aGlzLmNvbnN0%0AcnVjdG9yKCksYSk7cmV0dXJuIGIucHJldk9iamVjdD10aGlzLGIuY29udGV4dD10%0AaGlzLmNvbnRleHQsYn0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBuLmVhY2go%0AdGhpcyxhLGIpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNr%0AKG4ubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0p%0AKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZC5hcHBs%0AeSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlz%0ALmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpm%0AdW5jdGlvbihhKXt2YXIgYj10aGlzLmxlbmd0aCxjPSthKygwPmE/YjowKTtyZXR1%0Acm4gdGhpcy5wdXNoU3RhY2soYz49MCYmYj5jP1t0aGlzW2NdXTpbXSl9LGVuZDpm%0AdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0%0Ab3IobnVsbCl9LHB1c2g6Zixzb3J0OmMuc29ydCxzcGxpY2U6Yy5zcGxpY2V9LG4u%0AZXh0ZW5kPW4uZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGc9%0AYXJndW1lbnRzWzBdfHx7fSxoPTEsaT1hcmd1bWVudHMubGVuZ3RoLGo9ITE7Zm9y%0AKCJib29sZWFuIj09dHlwZW9mIGcmJihqPWcsZz1hcmd1bWVudHNbaF18fHt9LGgr%0AKyksIm9iamVjdCI9PXR5cGVvZiBnfHxuLmlzRnVuY3Rpb24oZyl8fChnPXt9KSxo%0APT09aSYmKGc9dGhpcyxoLS0pO2k+aDtoKyspaWYobnVsbCE9KGE9YXJndW1lbnRz%0AW2hdKSlmb3IoYiBpbiBhKWM9Z1tiXSxkPWFbYl0sZyE9PWQmJihqJiZkJiYobi5p%0Ac1BsYWluT2JqZWN0KGQpfHwoZT1uLmlzQXJyYXkoZCkpKT8oZT8oZT0hMSxmPWMm%0AJm4uaXNBcnJheShjKT9jOltdKTpmPWMmJm4uaXNQbGFpbk9iamVjdChjKT9jOnt9%0ALGdbYl09bi5leHRlbmQoaixmLGQpKTp2b2lkIDAhPT1kJiYoZ1tiXT1kKSk7cmV0%0AdXJuIGd9LG4uZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhtK01hdGgucmFuZG9t%0AKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24o%0AYSl7dGhyb3cgbmV3IEVycm9yKGEpfSxub29wOmZ1bmN0aW9uKCl7fSxpc0Z1bmN0%0AaW9uOmZ1bmN0aW9uKGEpe3JldHVybiJmdW5jdGlvbiI9PT1uLnR5cGUoYSl9LGlz%0AQXJyYXk6QXJyYXkuaXNBcnJheSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4g%0AbnVsbCE9YSYmYT09PWEud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oYSl7cmV0%0AdXJuIW4uaXNBcnJheShhKSYmYS1wYXJzZUZsb2F0KGEpPj0wfSxpc1BsYWluT2Jq%0AZWN0OmZ1bmN0aW9uKGEpe3JldHVybiJvYmplY3QiIT09bi50eXBlKGEpfHxhLm5v%0AZGVUeXBlfHxuLmlzV2luZG93KGEpPyExOmEuY29uc3RydWN0b3ImJiFqLmNhbGwo%0AYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJvdG90eXBlT2YiKT8hMTohMH0s%0AaXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVy%0AbiExO3JldHVybiEwfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP2Er%0AIiI6Im9iamVjdCI9PXR5cGVvZiBhfHwiZnVuY3Rpb24iPT10eXBlb2YgYT9oW2ku%0AY2FsbChhKV18fCJvYmplY3QiOnR5cGVvZiBhfSxnbG9iYWxFdmFsOmZ1bmN0aW9u%0AKGEpe3ZhciBiLGM9ZXZhbDthPW4udHJpbShhKSxhJiYoMT09PWEuaW5kZXhPZigi%0AdXNlIHN0cmljdCIpPyhiPWwuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksYi50ZXh0%0APWEsbC5oZWFkLmFwcGVuZENoaWxkKGIpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo%0AYikpOmMoYSkpfSxjYW1lbENhc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFj%0AZShwLCJtcy0iKS5yZXBsYWNlKHEscil9LG5vZGVOYW1lOmZ1bmN0aW9uKGEsYil7%0AcmV0dXJuIGEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWIu%0AdG9Mb3dlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZT0wLGY9%0AYS5sZW5ndGgsZz1zKGEpO2lmKGMpe2lmKGcpe2Zvcig7Zj5lO2UrKylpZihkPWIu%0AYXBwbHkoYVtlXSxjKSxkPT09ITEpYnJlYWt9ZWxzZSBmb3IoZSBpbiBhKWlmKGQ9%0AYi5hcHBseShhW2VdLGMpLGQ9PT0hMSlicmVha31lbHNlIGlmKGcpe2Zvcig7Zj5l%0AO2UrKylpZihkPWIuY2FsbChhW2VdLGUsYVtlXSksZD09PSExKWJyZWFrfWVsc2Ug%0AZm9yKGUgaW4gYSlpZihkPWIuY2FsbChhW2VdLGUsYVtlXSksZD09PSExKWJyZWFr%0AO3JldHVybiBhfSx0cmltOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hPyIiOihh%0AKyIiKS5yZXBsYWNlKG8sIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oYSxiKXt2YXIg%0AYz1ifHxbXTtyZXR1cm4gbnVsbCE9YSYmKHMoT2JqZWN0KGEpKT9uLm1lcmdlKGMs%0AInN0cmluZyI9PXR5cGVvZiBhP1thXTphKTpmLmNhbGwoYyxhKSksY30saW5BcnJh%0AeTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGw9PWI/LTE6Zy5jYWxsKGIsYSxj%0AKX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9K2IubGVuZ3RoLGQ9MCxl%0APWEubGVuZ3RoO2M+ZDtkKyspYVtlKytdPWJbZF07cmV0dXJuIGEubGVuZ3RoPWUs%0AYX0sZ3JlcDpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkLGU9W10sZj0wLGc9YS5s%0AZW5ndGgsaD0hYztnPmY7ZisrKWQ9IWIoYVtmXSxmKSxkIT09aCYmZS5wdXNoKGFb%0AZl0pO3JldHVybiBlfSxtYXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9MCxnPWEu%0AbGVuZ3RoLGg9cyhhKSxpPVtdO2lmKGgpZm9yKDtnPmY7ZisrKWQ9YihhW2ZdLGYs%0AYyksbnVsbCE9ZCYmaS5wdXNoKGQpO2Vsc2UgZm9yKGYgaW4gYSlkPWIoYVtmXSxm%0ALGMpLG51bGwhPWQmJmkucHVzaChkKTtyZXR1cm4gZS5hcHBseShbXSxpKX0sZ3Vp%0AZDoxLHByb3h5OmZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmO3JldHVybiJzdHJpbmci%0APT10eXBlb2YgYiYmKGM9YVtiXSxiPWEsYT1jKSxuLmlzRnVuY3Rpb24oYSk/KGU9%0AZC5jYWxsKGFyZ3VtZW50cywyKSxmPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHko%0AYnx8dGhpcyxlLmNvbmNhdChkLmNhbGwoYXJndW1lbnRzKSkpfSxmLmd1aWQ9YS5n%0AdWlkPWEuZ3VpZHx8bi5ndWlkKyssZik6dm9pZCAwfSxub3c6RGF0ZS5ub3csc3Vw%0AcG9ydDprfSksbi5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24g%0AQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIi5zcGxpdCgiICIpLGZ1bmN0%0AaW9uKGEsYil7aFsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KTtm%0AdW5jdGlvbiBzKGEpe3ZhciBiPWEubGVuZ3RoLGM9bi50eXBlKGEpO3JldHVybiJm%0AdW5jdGlvbiI9PT1jfHxuLmlzV2luZG93KGEpPyExOjE9PT1hLm5vZGVUeXBlJiZi%0APyEwOiJhcnJheSI9PT1jfHwwPT09Ynx8Im51bWJlciI9PXR5cGVvZiBiJiZiPjAm%0AJmItMSBpbiBhfXZhciB0PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGks%0AaixrLGwsbSxuLG8scCxxLHIscyx0LHU9InNpenpsZSIrLW5ldyBEYXRlLHY9YS5k%0Ab2N1bWVudCx3PTAseD0wLHk9Z2IoKSx6PWdiKCksQT1nYigpLEI9ZnVuY3Rpb24o%0AYSxiKXtyZXR1cm4gYT09PWImJihsPSEwKSwwfSxDPSJ1bmRlZmluZWQiLEQ9MTw8%0AMzEsRT17fS5oYXNPd25Qcm9wZXJ0eSxGPVtdLEc9Ri5wb3AsSD1GLnB1c2gsST1G%0ALnB1c2gsSj1GLnNsaWNlLEs9Ri5pbmRleE9mfHxmdW5jdGlvbihhKXtmb3IodmFy%0AIGI9MCxjPXRoaXMubGVuZ3RoO2M+YjtiKyspaWYodGhpc1tiXT09PWEpcmV0dXJu%0AIGI7cmV0dXJuLTF9LEw9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3Vz%0AfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxs%0Ab29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixNPSJb%0AXFx4MjBcXHRcXHJcXG5cXGZdIixOPSIoPzpcXFxcLnxbXFx3LV18W15cXHgwMC1c%0AXHhhMF0pKyIsTz1OLnJlcGxhY2UoInciLCJ3IyIpLFA9IlxcWyIrTSsiKigiK04r%0AIikoPzoiK00rIiooWypeJHwhfl0/PSkiK00rIiooPzonKCg/OlxcXFwufFteXFxc%0AXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitPKyIpKXwpIitN%0AKyIqXFxdIixRPSI6KCIrTisiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkq%0AKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwo%0AKVtcXF1dfCIrUCsiKSopfC4qKVxcKXwpIixSPW5ldyBSZWdFeHAoIl4iK00rIit8%0AKCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTSsiKyQiLCJnIiksUz1uZXcgUmVn%0ARXhwKCJeIitNKyIqLCIrTSsiKiIpLFQ9bmV3IFJlZ0V4cCgiXiIrTSsiKihbPit+%0AXXwiK00rIikiK00rIioiKSxVPW5ldyBSZWdFeHAoIj0iK00rIiooW15cXF0nXCJd%0AKj8pIitNKyIqXFxdIiwiZyIpLFY9bmV3IFJlZ0V4cChRKSxXPW5ldyBSZWdFeHAo%0AIl4iK08rIiQiKSxYPXtJRDpuZXcgUmVnRXhwKCJeIygiK04rIikiKSxDTEFTUzpu%0AZXcgUmVnRXhwKCJeXFwuKCIrTisiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTi5y%0AZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrUCksUFNF%0AVURPOm5ldyBSZWdFeHAoIl4iK1EpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8%0AZmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIr%0ATSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCki%0AK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAo%0AIl4oPzoiK0wrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitN%0AKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpc%0AXCgiK00rIiooKD86LVxcZCk/XFxkKikiK00rIipcXCl8KSg/PVteLV18JCkiLCJp%0AIil9LFk9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxaPS9e%0AaFxkJC9pLCQ9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLF89L14oPzojKFtcdy1d%0AKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxhYj0vWyt+XS8sYmI9Lyd8XFwvZyxjYj1u%0AZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK00rIj98KCIrTSsiKXwuKSIs%0AImlnIiksZGI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIweCIrYi02NTUzNjtyZXR1%0Acm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpT%0AdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9O3Ry%0AeXtJLmFwcGx5KEY9Si5jYWxsKHYuY2hpbGROb2Rlcyksdi5jaGlsZE5vZGVzKSxG%0AW3YuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGViKXtJPXthcHBs%0AeTpGLmxlbmd0aD9mdW5jdGlvbihhLGIpe0guYXBwbHkoYSxKLmNhbGwoYikpfTpm%0AdW5jdGlvbihhLGIpe3ZhciBjPWEubGVuZ3RoLGQ9MDt3aGlsZShhW2MrK109Yltk%0AKytdKTthLmxlbmd0aD1jLTF9fX1mdW5jdGlvbiBmYihhLGIsZCxlKXt2YXIgZixo%0ALGosayxsLG8scixzLHcseDtpZigoYj9iLm93bmVyRG9jdW1lbnR8fGI6dikhPT1u%0AJiZtKGIpLGI9Ynx8bixkPWR8fFtdLCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0%0AdXJuIGQ7aWYoMSE9PShrPWIubm9kZVR5cGUpJiY5IT09aylyZXR1cm5bXTtpZihw%0AJiYhZSl7aWYoZj1fLmV4ZWMoYSkpaWYoaj1mWzFdKXtpZig5PT09ayl7aWYoaD1i%0ALmdldEVsZW1lbnRCeUlkKGopLCFofHwhaC5wYXJlbnROb2RlKXJldHVybiBkO2lm%0AKGguaWQ9PT1qKXJldHVybiBkLnB1c2goaCksZH1lbHNlIGlmKGIub3duZXJEb2N1%0AbWVudCYmKGg9Yi5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGopKSYmdChi%0ALGgpJiZoLmlkPT09ailyZXR1cm4gZC5wdXNoKGgpLGR9ZWxzZXtpZihmWzJdKXJl%0AdHVybiBJLmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSksZDtpZigo%0Aaj1mWzNdKSYmYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZiLmdldEVsZW1lbnRz%0AQnlDbGFzc05hbWUpcmV0dXJuIEkuYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFz%0Ac05hbWUoaikpLGR9aWYoYy5xc2EmJighcXx8IXEudGVzdChhKSkpe2lmKHM9cj11%0ALHc9Yix4PTk9PT1rJiZhLDE9PT1rJiYib2JqZWN0IiE9PWIubm9kZU5hbWUudG9M%0Ab3dlckNhc2UoKSl7bz1nKGEpLChyPWIuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXIu%0AcmVwbGFjZShiYiwiXFwkJiIpOmIuc2V0QXR0cmlidXRlKCJpZCIscykscz0iW2lk%0APSciK3MrIiddICIsbD1vLmxlbmd0aDt3aGlsZShsLS0pb1tsXT1zK3FiKG9bbF0p%0AO3c9YWIudGVzdChhKSYmb2IoYi5wYXJlbnROb2RlKXx8Yix4PW8uam9pbigiLCIp%0AfWlmKHgpdHJ5e3JldHVybiBJLmFwcGx5KGQsdy5xdWVyeVNlbGVjdG9yQWxsKHgp%0AKSxkfWNhdGNoKHkpe31maW5hbGx5e3J8fGIucmVtb3ZlQXR0cmlidXRlKCJpZCIp%0AfX19cmV0dXJuIGkoYS5yZXBsYWNlKFIsIiQxIiksYixkLGUpfWZ1bmN0aW9uIGdi%0AKCl7dmFyIGE9W107ZnVuY3Rpb24gYihjLGUpe3JldHVybiBhLnB1c2goYysiICIp%0APmQuY2FjaGVMZW5ndGgmJmRlbGV0ZSBiW2Euc2hpZnQoKV0sYltjKyIgIl09ZX1y%0AZXR1cm4gYn1mdW5jdGlvbiBoYihhKXtyZXR1cm4gYVt1XT0hMCxhfWZ1bmN0aW9u%0AIGliKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEh%0AYShiKX1jYXRjaChjKXtyZXR1cm4hMX1maW5hbGx5e2IucGFyZW50Tm9kZSYmYi5w%0AYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH19ZnVuY3Rpb24gamIoYSxi%0AKXt2YXIgYz1hLnNwbGl0KCJ8IiksZT1hLmxlbmd0aDt3aGlsZShlLS0pZC5hdHRy%0ASGFuZGxlW2NbZV1dPWJ9ZnVuY3Rpb24ga2IoYSxiKXt2YXIgYz1iJiZhLGQ9YyYm%0AMT09PWEubm9kZVR5cGUmJjE9PT1iLm5vZGVUeXBlJiYofmIuc291cmNlSW5kZXh8%0AfEQpLSh+YS5zb3VyY2VJbmRleHx8RCk7aWYoZClyZXR1cm4gZDtpZihjKXdoaWxl%0AKGM9Yy5uZXh0U2libGluZylpZihjPT09YilyZXR1cm4tMTtyZXR1cm4gYT8xOi0x%0AfWZ1bmN0aW9uIGxiKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVO%0AYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWMmJmIudHlwZT09PWF9%0AfWZ1bmN0aW9uIG1iKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVO%0AYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1jfHwiYnV0dG9uIj09%0APWMpJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBuYihhKXtyZXR1cm4gaGIoZnVuY3Rp%0Ab24oYil7cmV0dXJuIGI9K2IsaGIoZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEoW10s%0AYy5sZW5ndGgsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pY1tlPWZbZ11dJiYoY1tl%0AXT0hKGRbZV09Y1tlXSkpfSl9KX1mdW5jdGlvbiBvYihhKXtyZXR1cm4gYSYmdHlw%0AZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPT1DJiZhfWM9ZmIuc3VwcG9ydD17%0AfSxmPWZiLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJihhLm93bmVyRG9jdW1l%0AbnR8fGEpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj8iSFRNTCIhPT1iLm5vZGVO%0AYW1lOiExfSxtPWZiLnNldERvY3VtZW50PWZ1bmN0aW9uKGEpe3ZhciBiLGU9YT9h%0ALm93bmVyRG9jdW1lbnR8fGE6dixnPWUuZGVmYXVsdFZpZXc7cmV0dXJuIGUhPT1u%0AJiY5PT09ZS5ub2RlVHlwZSYmZS5kb2N1bWVudEVsZW1lbnQ/KG49ZSxvPWUuZG9j%0AdW1lbnRFbGVtZW50LHA9IWYoZSksZyYmZyE9PWcudG9wJiYoZy5hZGRFdmVudExp%0Ac3RlbmVyP2cuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixmdW5jdGlvbigpe20o%0AKX0sITEpOmcuYXR0YWNoRXZlbnQmJmcuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixm%0AdW5jdGlvbigpe20oKX0pKSxjLmF0dHJpYnV0ZXM9aWIoZnVuY3Rpb24oYSl7cmV0%0AdXJuIGEuY2xhc3NOYW1lPSJpIiwhYS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIp%0AfSksYy5nZXRFbGVtZW50c0J5VGFnTmFtZT1pYihmdW5jdGlvbihhKXtyZXR1cm4g%0AYS5hcHBlbmRDaGlsZChlLmNyZWF0ZUNvbW1lbnQoIiIpKSwhYS5nZXRFbGVtZW50%0Ac0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGMuZ2V0RWxlbWVudHNCeUNsYXNzTmFt%0AZT0kLnRlc3QoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSYmaWIoZnVuY3Rpb24o%0AYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSdhJz48L2Rpdj48ZGl2%0AIGNsYXNzPSdhIGknPjwvZGl2PiIsYS5maXJzdENoaWxkLmNsYXNzTmFtZT0iaSIs%0AMj09PWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaSIpLmxlbmd0aH0pLGMuZ2V0%0AQnlJZD1pYihmdW5jdGlvbihhKXtyZXR1cm4gby5hcHBlbmRDaGlsZChhKS5pZD11%0ALCFlLmdldEVsZW1lbnRzQnlOYW1lfHwhZS5nZXRFbGVtZW50c0J5TmFtZSh1KS5s%0AZW5ndGh9KSxjLmdldEJ5SWQ/KGQuZmluZC5JRD1mdW5jdGlvbihhLGIpe2lmKHR5%0AcGVvZiBiLmdldEVsZW1lbnRCeUlkIT09QyYmcCl7dmFyIGM9Yi5nZXRFbGVtZW50%0AQnlJZChhKTtyZXR1cm4gYyYmYy5wYXJlbnROb2RlP1tjXTpbXX19LGQuZmlsdGVy%0ALklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShjYixkYik7cmV0dXJuIGZ1%0AbmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaWQiKT09PWJ9fSk6KGRl%0AbGV0ZSBkLmZpbmQuSUQsZC5maWx0ZXIuSUQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5y%0AZXBsYWNlKGNiLGRiKTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGM9dHlwZW9mIGEu%0AZ2V0QXR0cmlidXRlTm9kZSE9PUMmJmEuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTty%0AZXR1cm4gYyYmYy52YWx1ZT09PWJ9fSksZC5maW5kLlRBRz1jLmdldEVsZW1lbnRz%0AQnlUYWdOYW1lP2Z1bmN0aW9uKGEsYil7cmV0dXJuIHR5cGVvZiBiLmdldEVsZW1l%0AbnRzQnlUYWdOYW1lIT09Qz9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOnZvaWQg%0AMH06ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9MCxmPWIuZ2V0RWxlbWVudHNC%0AeVRhZ05hbWUoYSk7aWYoIioiPT09YSl7d2hpbGUoYz1mW2UrK10pMT09PWMubm9k%0AZVR5cGUmJmQucHVzaChjKTtyZXR1cm4gZH1yZXR1cm4gZn0sZC5maW5kLkNMQVNT%0APWMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oYSxiKXtyZXR1cm4g%0AdHlwZW9mIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PUMmJnA/Yi5nZXRFbGVt%0AZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFzYT0kLnRl%0Ac3QoZS5xdWVyeVNlbGVjdG9yQWxsKSkmJihpYihmdW5jdGlvbihhKXthLmlubmVy%0ASFRNTD0iPHNlbGVjdCBtc2FsbG93Y2xpcD0nJz48b3B0aW9uIHNlbGVjdGVkPScn%0APjwvb3B0aW9uPjwvc2VsZWN0PiIsYS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxv%0Ad2NsaXBePScnXSIpLmxlbmd0aCYmcS5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xc%0AIlwiKSIpLGEucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8%0AcS5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK0wrIikiKSxhLnF1ZXJ5U2VsZWN0%0Ab3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxxLnB1c2goIjpjaGVja2VkIil9KSxp%0AYihmdW5jdGlvbihhKXt2YXIgYj1lLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Yi5z%0AZXRBdHRyaWJ1dGUoInR5cGUiLCJoaWRkZW4iKSxhLmFwcGVuZENoaWxkKGIpLnNl%0AdEF0dHJpYnV0ZSgibmFtZSIsIkQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1l%0APWRdIikubGVuZ3RoJiZxLnB1c2goIm5hbWUiK00rIipbKl4kfCF+XT89IiksYS5x%0AdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aHx8cS5wdXNoKCI6ZW5h%0AYmxlZCIsIjpkaXNhYmxlZCIpLGEucXVlcnlTZWxlY3RvckFsbCgiKiw6eCIpLHEu%0AcHVzaCgiLC4qOiIpfSkpLChjLm1hdGNoZXNTZWxlY3Rvcj0kLnRlc3Qocz1vLm1h%0AdGNoZXN8fG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxvLm1vek1hdGNoZXNTZWxl%0AY3Rvcnx8by5vTWF0Y2hlc1NlbGVjdG9yfHxvLm1zTWF0Y2hlc1NlbGVjdG9yKSkm%0AJmliKGZ1bmN0aW9uKGEpe2MuZGlzY29ubmVjdGVkTWF0Y2g9cy5jYWxsKGEsImRp%0AdiIpLHMuY2FsbChhLCJbcyE9JyddOngiKSxyLnB1c2goIiE9IixRKX0pLHE9cS5s%0AZW5ndGgmJm5ldyBSZWdFeHAocS5qb2luKCJ8IikpLHI9ci5sZW5ndGgmJm5ldyBS%0AZWdFeHAoci5qb2luKCJ8IikpLGI9JC50ZXN0KG8uY29tcGFyZURvY3VtZW50UG9z%0AaXRpb24pLHQ9Ynx8JC50ZXN0KG8uY29udGFpbnMpP2Z1bmN0aW9uKGEsYil7dmFy%0AIGM9OT09PWEubm9kZVR5cGU/YS5kb2N1bWVudEVsZW1lbnQ6YSxkPWImJmIucGFy%0AZW50Tm9kZTtyZXR1cm4gYT09PWR8fCEoIWR8fDEhPT1kLm5vZGVUeXBlfHwhKGMu%0AY29udGFpbnM/Yy5jb250YWlucyhkKTphLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9u%0AJiYxNiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQpKSl9OmZ1bmN0aW9uKGEs%0AYil7aWYoYil3aGlsZShiPWIucGFyZW50Tm9kZSlpZihiPT09YSlyZXR1cm4hMDty%0AZXR1cm4hMX0sQj1iP2Z1bmN0aW9uKGEsYil7aWYoYT09PWIpcmV0dXJuIGw9ITAs%0AMDt2YXIgZD0hYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hYi5jb21wYXJlRG9j%0AdW1lbnRQb3NpdGlvbjtyZXR1cm4gZD9kOihkPShhLm93bmVyRG9jdW1lbnR8fGEp%0APT09KGIub3duZXJEb2N1bWVudHx8Yik/YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlv%0AbihiKToxLDEmZHx8IWMuc29ydERldGFjaGVkJiZiLmNvbXBhcmVEb2N1bWVudFBv%0Ac2l0aW9uKGEpPT09ZD9hPT09ZXx8YS5vd25lckRvY3VtZW50PT09diYmdCh2LGEp%0APy0xOmI9PT1lfHxiLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYsYik/MTprP0suY2Fs%0AbChrLGEpLUsuY2FsbChrLGIpOjA6NCZkPy0xOjEpfTpmdW5jdGlvbihhLGIpe2lm%0AKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGMsZD0wLGY9YS5wYXJlbnROb2RlLGc9%0AYi5wYXJlbnROb2RlLGg9W2FdLGk9W2JdO2lmKCFmfHwhZylyZXR1cm4gYT09PWU/%0ALTE6Yj09PWU/MTpmPy0xOmc/MTprP0suY2FsbChrLGEpLUsuY2FsbChrLGIpOjA7%0AaWYoZj09PWcpcmV0dXJuIGtiKGEsYik7Yz1hO3doaWxlKGM9Yy5wYXJlbnROb2Rl%0AKWgudW5zaGlmdChjKTtjPWI7d2hpbGUoYz1jLnBhcmVudE5vZGUpaS51bnNoaWZ0%0AKGMpO3doaWxlKGhbZF09PT1pW2RdKWQrKztyZXR1cm4gZD9rYihoW2RdLGlbZF0p%0AOmhbZF09PT12Py0xOmlbZF09PT12PzE6MH0sZSk6bn0sZmIubWF0Y2hlcz1mdW5j%0AdGlvbihhLGIpe3JldHVybiBmYihhLG51bGwsbnVsbCxiKX0sZmIubWF0Y2hlc1Nl%0AbGVjdG9yPWZ1bmN0aW9uKGEsYil7aWYoKGEub3duZXJEb2N1bWVudHx8YSkhPT1u%0AJiZtKGEpLGI9Yi5yZXBsYWNlKFUsIj0nJDEnXSIpLCEoIWMubWF0Y2hlc1NlbGVj%0AdG9yfHwhcHx8ciYmci50ZXN0KGIpfHxxJiZxLnRlc3QoYikpKXRyeXt2YXIgZD1z%0ALmNhbGwoYSxiKTtpZihkfHxjLmRpc2Nvbm5lY3RlZE1hdGNofHxhLmRvY3VtZW50%0AJiYxMSE9PWEuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIGR9Y2F0Y2goZSl7fXJl%0AdHVybiBmYihiLG4sbnVsbCxbYV0pLmxlbmd0aD4wfSxmYi5jb250YWlucz1mdW5j%0AdGlvbihhLGIpe3JldHVybihhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKSx0%0AKGEsYil9LGZiLmF0dHI9ZnVuY3Rpb24oYSxiKXsoYS5vd25lckRvY3VtZW50fHxh%0AKSE9PW4mJm0oYSk7dmFyIGU9ZC5hdHRySGFuZGxlW2IudG9Mb3dlckNhc2UoKV0s%0AZj1lJiZFLmNhbGwoZC5hdHRySGFuZGxlLGIudG9Mb3dlckNhc2UoKSk/ZShhLGIs%0AIXApOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09Zj9mOmMuYXR0cmlidXRlc3x8IXA/%0AYS5nZXRBdHRyaWJ1dGUoYik6KGY9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSYmZi5z%0AcGVjaWZpZWQ/Zi52YWx1ZTpudWxsfSxmYi5lcnJvcj1mdW5jdGlvbihhKXt0aHJv%0AdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Np%0Ab246ICIrYSl9LGZiLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7dmFyIGIsZD1bXSxl%0APTAsZj0wO2lmKGw9IWMuZGV0ZWN0RHVwbGljYXRlcyxrPSFjLnNvcnRTdGFibGUm%0AJmEuc2xpY2UoMCksYS5zb3J0KEIpLGwpe3doaWxlKGI9YVtmKytdKWI9PT1hW2Zd%0AJiYoZT1kLnB1c2goZikpO3doaWxlKGUtLSlhLnNwbGljZShkW2VdLDEpfXJldHVy%0AbiBrPW51bGwsYX0sZT1mYi5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9IiIs%0AZD0wLGY9YS5ub2RlVHlwZTtpZihmKXtpZigxPT09Znx8OT09PWZ8fDExPT09Zil7%0AaWYoInN0cmluZyI9PXR5cGVvZiBhLnRleHRDb250ZW50KXJldHVybiBhLnRleHRD%0Ab250ZW50O2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyljKz1l%0AKGEpfWVsc2UgaWYoMz09PWZ8fDQ9PT1mKXJldHVybiBhLm5vZGVWYWx1ZX1lbHNl%0AIHdoaWxlKGI9YVtkKytdKWMrPWUoYik7cmV0dXJuIGN9LGQ9ZmIuc2VsZWN0b3Jz%0APXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86aGIsbWF0Y2g6WCxhdHRySGFu%0AZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixm%0AaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlv%0AdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9%0AfSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS5y%0AZXBsYWNlKGNiLGRiKSxhWzNdPShhWzNdfHxhWzRdfHxhWzVdfHwiIikucmVwbGFj%0AZShjYixkYiksIn49Ij09PWFbMl0mJihhWzNdPSIgIithWzNdKyIgIiksYS5zbGlj%0AZSgwLDQpfSxDSElMRDpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnRvTG93%0AZXJDYXNlKCksIm50aCI9PT1hWzFdLnNsaWNlKDAsMyk/KGFbM118fGZiLmVycm9y%0AKGFbMF0pLGFbNF09KyhhWzRdP2FbNV0rKGFbNl18fDEpOjIqKCJldmVuIj09PWFb%0AM118fCJvZGQiPT09YVszXSkpLGFbNV09KyhhWzddK2FbOF18fCJvZGQiPT09YVsz%0AXSkpOmFbM10mJmZiLmVycm9yKGFbMF0pLGF9LFBTRVVETzpmdW5jdGlvbihhKXt2%0AYXIgYixjPSFhWzZdJiZhWzJdO3JldHVybiBYLkNISUxELnRlc3QoYVswXSk/bnVs%0AbDooYVszXT9hWzJdPWFbNF18fGFbNV18fCIiOmMmJlYudGVzdChjKSYmKGI9Zyhj%0ALCEwKSkmJihiPWMuaW5kZXhPZigiKSIsYy5sZW5ndGgtYiktYy5sZW5ndGgpJiYo%0AYVswXT1hWzBdLnNsaWNlKDAsYiksYVsyXT1jLnNsaWNlKDAsYikpLGEuc2xpY2Uo%0AMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2Uo%0AY2IsZGIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09YT9mdW5jdGlvbigpe3Jl%0AdHVybiEwfTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFt%0AZS50b0xvd2VyQ2FzZSgpPT09Yn19LENMQVNTOmZ1bmN0aW9uKGEpe3ZhciBiPXlb%0AYSsiICJdO3JldHVybiBifHwoYj1uZXcgUmVnRXhwKCIoXnwiK00rIikiK2ErIigi%0AK00rInwkKSIpKSYmeShhLGZ1bmN0aW9uKGEpe3JldHVybiBiLnRlc3QoInN0cmlu%0AZyI9PXR5cGVvZiBhLmNsYXNzTmFtZSYmYS5jbGFzc05hbWV8fHR5cGVvZiBhLmdl%0AdEF0dHJpYnV0ZSE9PUMmJmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0s%0AQVRUUjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciBlPWZi%0ALmF0dHIoZCxhKTtyZXR1cm4gbnVsbD09ZT8iIT0iPT09YjpiPyhlKz0iIiwiPSI9%0APT1iP2U9PT1jOiIhPSI9PT1iP2UhPT1jOiJePSI9PT1iP2MmJjA9PT1lLmluZGV4%0AT2YoYyk6Iio9Ij09PWI/YyYmZS5pbmRleE9mKGMpPi0xOiIkPSI9PT1iP2MmJmUu%0Ac2xpY2UoLWMubGVuZ3RoKT09PWM6In49Ij09PWI/KCIgIitlKyIgIikuaW5kZXhP%0AZihjKT4tMToifD0iPT09Yj9lPT09Y3x8ZS5zbGljZSgwLGMubGVuZ3RoKzEpPT09%0AYysiLSI6ITEpOiEwfX0sQ0hJTEQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj0i%0AbnRoIiE9PWEuc2xpY2UoMCwzKSxnPSJsYXN0IiE9PWEuc2xpY2UoLTQpLGg9Im9m%0ALXR5cGUiPT09YjtyZXR1cm4gMT09PWQmJjA9PT1lP2Z1bmN0aW9uKGEpe3JldHVy%0AbiEhYS5wYXJlbnROb2RlfTpmdW5jdGlvbihiLGMsaSl7dmFyIGosayxsLG0sbixv%0ALHA9ZiE9PWc/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixxPWIucGFy%0AZW50Tm9kZSxyPWgmJmIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxzPSFpJiYhaDtp%0AZihxKXtpZihmKXt3aGlsZShwKXtsPWI7d2hpbGUobD1sW3BdKWlmKGg/bC5ub2Rl%0ATmFtZS50b0xvd2VyQ2FzZSgpPT09cjoxPT09bC5ub2RlVHlwZSlyZXR1cm4hMTtv%0APXA9Im9ubHkiPT09YSYmIW8mJiJuZXh0U2libGluZyJ9cmV0dXJuITB9aWYobz1b%0AZz9xLmZpcnN0Q2hpbGQ6cS5sYXN0Q2hpbGRdLGcmJnMpe2s9cVt1XXx8KHFbdV09%0Ae30pLGo9a1thXXx8W10sbj1qWzBdPT09dyYmalsxXSxtPWpbMF09PT13JiZqWzJd%0ALGw9biYmcS5jaGlsZE5vZGVzW25dO3doaWxlKGw9KytuJiZsJiZsW3BdfHwobT1u%0APTApfHxvLnBvcCgpKWlmKDE9PT1sLm5vZGVUeXBlJiYrK20mJmw9PT1iKXtrW2Fd%0APVt3LG4sbV07YnJlYWt9fWVsc2UgaWYocyYmKGo9KGJbdV18fChiW3VdPXt9KSlb%0AYV0pJiZqWzBdPT09dyltPWpbMV07ZWxzZSB3aGlsZShsPSsrbiYmbCYmbFtwXXx8%0AKG09bj0wKXx8by5wb3AoKSlpZigoaD9sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9%0APT1yOjE9PT1sLm5vZGVUeXBlKSYmKyttJiYocyYmKChsW3VdfHwobFt1XT17fSkp%0AW2FdPVt3LG1dKSxsPT09YikpYnJlYWs7cmV0dXJuIG0tPWUsbT09PWR8fG0lZD09%0APTAmJm0vZD49MH19fSxQU0VVRE86ZnVuY3Rpb24oYSxiKXt2YXIgYyxlPWQucHNl%0AdWRvc1thXXx8ZC5zZXRGaWx0ZXJzW2EudG9Mb3dlckNhc2UoKV18fGZiLmVycm9y%0AKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrYSk7cmV0dXJuIGVbdV0/ZShiKTplLmxl%0Abmd0aD4xPyhjPVthLGEsIiIsYl0sZC5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5%0AKGEudG9Mb3dlckNhc2UoKSk/aGIoZnVuY3Rpb24oYSxjKXt2YXIgZCxmPWUoYSxi%0AKSxnPWYubGVuZ3RoO3doaWxlKGctLSlkPUsuY2FsbChhLGZbZ10pLGFbZF09IShj%0AW2RdPWZbZ10pfSk6ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSwwLGMpfSk6ZX19LHBz%0AZXVkb3M6e25vdDpoYihmdW5jdGlvbihhKXt2YXIgYj1bXSxjPVtdLGQ9aChhLnJl%0AcGxhY2UoUiwiJDEiKSk7cmV0dXJuIGRbdV0/aGIoZnVuY3Rpb24oYSxiLGMsZSl7%0AdmFyIGYsZz1kKGEsbnVsbCxlLFtdKSxoPWEubGVuZ3RoO3doaWxlKGgtLSkoZj1n%0AW2hdKSYmKGFbaF09IShiW2hdPWYpKX0pOmZ1bmN0aW9uKGEsZSxmKXtyZXR1cm4g%0AYlswXT1hLGQoYixudWxsLGYsYyksIWMucG9wKCl9fSksaGFzOmhiKGZ1bmN0aW9u%0AKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZmIoYSxiKS5sZW5ndGg+MH19%0AKSxjb250YWluczpoYihmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0%0AdXJuKGIudGV4dENvbnRlbnR8fGIuaW5uZXJUZXh0fHxlKGIpKS5pbmRleE9mKGEp%0APi0xfX0pLGxhbmc6aGIoZnVuY3Rpb24oYSl7cmV0dXJuIFcudGVzdChhfHwiIil8%0AfGZiLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK2EpLGE9YS5yZXBsYWNlKGNi%0ALGRiKS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKGIpe3ZhciBjO2RvIGlmKGM9cD9i%0ALmxhbmc6Yi5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIil8fGIuZ2V0QXR0cmlidXRl%0AKCJsYW5nIikpcmV0dXJuIGM9Yy50b0xvd2VyQ2FzZSgpLGM9PT1hfHwwPT09Yy5p%0AbmRleE9mKGErIi0iKTt3aGlsZSgoYj1iLnBhcmVudE5vZGUpJiYxPT09Yi5ub2Rl%0AVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGIpe3ZhciBjPWEubG9j%0AYXRpb24mJmEubG9jYXRpb24uaGFzaDtyZXR1cm4gYyYmYy5zbGljZSgxKT09PWIu%0AaWR9LHJvb3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1vfSxmb2N1czpmdW5jdGlv%0AbihhKXtyZXR1cm4gYT09PW4uYWN0aXZlRWxlbWVudCYmKCFuLmhhc0ZvY3VzfHxu%0ALmhhc0ZvY3VzKCkpJiYhIShhLnR5cGV8fGEuaHJlZnx8fmEudGFiSW5kZXgpfSxl%0AbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITF9LGRpc2Fi%0AbGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6%0AZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVy%0AbiJpbnB1dCI9PT1iJiYhIWEuY2hlY2tlZHx8Im9wdGlvbiI9PT1iJiYhIWEuc2Vs%0AZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLnBhcmVudE5vZGUm%0AJmEucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LGEuc2VsZWN0ZWQ9PT0hMH0sZW1w%0AdHk6ZnVuY3Rpb24oYSl7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJs%0AaW5nKWlmKGEubm9kZVR5cGU8NilyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1%0AbmN0aW9uKGEpe3JldHVybiFkLnBzZXVkb3MuZW1wdHkoYSl9LGhlYWRlcjpmdW5j%0AdGlvbihhKXtyZXR1cm4gWi50ZXN0KGEubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlv%0AbihhKXtyZXR1cm4gWS50ZXN0KGEubm9kZU5hbWUpfSxidXR0b246ZnVuY3Rpb24o%0AYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9%0APT1iJiYiYnV0dG9uIj09PWEudHlwZXx8ImJ1dHRvbiI9PT1ifSx0ZXh0OmZ1bmN0%0AaW9uKGEpe3ZhciBiO3JldHVybiJpbnB1dCI9PT1hLm5vZGVOYW1lLnRvTG93ZXJD%0AYXNlKCkmJiJ0ZXh0Ij09PWEudHlwZSYmKG51bGw9PShiPWEuZ2V0QXR0cmlidXRl%0AKCJ0eXBlIikpfHwidGV4dCI9PT1iLnRvTG93ZXJDYXNlKCkpfSxmaXJzdDpuYihm%0AdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6bmIoZnVuY3Rpb24oYSxiKXtyZXR1%0Acm5bYi0xXX0pLGVxOm5iKGZ1bmN0aW9uKGEsYixjKXtyZXR1cm5bMD5jP2MrYjpj%0AXX0pLGV2ZW46bmIoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtiPmM7Yys9Milh%0ALnB1c2goYyk7cmV0dXJuIGF9KSxvZGQ6bmIoZnVuY3Rpb24oYSxiKXtmb3IodmFy%0AIGM9MTtiPmM7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxsdDpuYihmdW5jdGlv%0AbihhLGIsYyl7Zm9yKHZhciBkPTA+Yz9jK2I6YzstLWQ+PTA7KWEucHVzaChkKTty%0AZXR1cm4gYX0pLGd0Om5iKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MD5jP2Mr%0AYjpjOysrZDxiOylhLnB1c2goZCk7cmV0dXJuIGF9KX19LGQucHNldWRvcy5udGg9%0AZC5wc2V1ZG9zLmVxO2ZvcihiIGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6%0AITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KWQucHNldWRvc1tiXT1sYihiKTtmb3Io%0AYiBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KWQucHNldWRvc1tiXT1tYihiKTtmdW5j%0AdGlvbiBwYigpe31wYi5wcm90b3R5cGU9ZC5maWx0ZXJzPWQucHNldWRvcyxkLnNl%0AdEZpbHRlcnM9bmV3IHBiLGc9ZmIudG9rZW5pemU9ZnVuY3Rpb24oYSxiKXt2YXIg%0AYyxlLGYsZyxoLGksaixrPXpbYSsiICJdO2lmKGspcmV0dXJuIGI/MDprLnNsaWNl%0AKDApO2g9YSxpPVtdLGo9ZC5wcmVGaWx0ZXI7d2hpbGUoaCl7KCFjfHwoZT1TLmV4%0AZWMoaCkpKSYmKGUmJihoPWguc2xpY2UoZVswXS5sZW5ndGgpfHxoKSxpLnB1c2go%0AZj1bXSkpLGM9ITEsKGU9VC5leGVjKGgpKSYmKGM9ZS5zaGlmdCgpLGYucHVzaCh7%0AdmFsdWU6Yyx0eXBlOmVbMF0ucmVwbGFjZShSLCIgIil9KSxoPWguc2xpY2UoYy5s%0AZW5ndGgpKTtmb3IoZyBpbiBkLmZpbHRlcikhKGU9WFtnXS5leGVjKGgpKXx8altn%0AXSYmIShlPWpbZ10oZSkpfHwoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5%0AcGU6ZyxtYXRjaGVzOmV9KSxoPWguc2xpY2UoYy5sZW5ndGgpKTtpZighYylicmVh%0Aa31yZXR1cm4gYj9oLmxlbmd0aDpoP2ZiLmVycm9yKGEpOnooYSxpKS5zbGljZSgw%0AKX07ZnVuY3Rpb24gcWIoYSl7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aCxkPSIiO2M+%0AYjtiKyspZCs9YVtiXS52YWx1ZTtyZXR1cm4gZH1mdW5jdGlvbiByYihhLGIsYyl7%0AdmFyIGQ9Yi5kaXIsZT1jJiYicGFyZW50Tm9kZSI9PT1kLGY9eCsrO3JldHVybiBi%0ALmZpcnN0P2Z1bmN0aW9uKGIsYyxmKXt3aGlsZShiPWJbZF0paWYoMT09PWIubm9k%0AZVR5cGV8fGUpcmV0dXJuIGEoYixjLGYpfTpmdW5jdGlvbihiLGMsZyl7dmFyIGgs%0AaSxqPVt3LGZdO2lmKGcpe3doaWxlKGI9YltkXSlpZigoMT09PWIubm9kZVR5cGV8%0AfGUpJiZhKGIsYyxnKSlyZXR1cm4hMH1lbHNlIHdoaWxlKGI9YltkXSlpZigxPT09%0AYi5ub2RlVHlwZXx8ZSl7aWYoaT1iW3VdfHwoYlt1XT17fSksKGg9aVtkXSkmJmhb%0AMF09PT13JiZoWzFdPT09ZilyZXR1cm4galsyXT1oWzJdO2lmKGlbZF09aixqWzJd%0APWEoYixjLGcpKXJldHVybiEwfX19ZnVuY3Rpb24gc2IoYSl7cmV0dXJuIGEubGVu%0AZ3RoPjE/ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWEubGVuZ3RoO3doaWxlKGUtLSlp%0AZighYVtlXShiLGMsZCkpcmV0dXJuITE7cmV0dXJuITB9OmFbMF19ZnVuY3Rpb24g%0AdGIoYSxiLGMpe2Zvcih2YXIgZD0wLGU9Yi5sZW5ndGg7ZT5kO2QrKylmYihhLGJb%0AZF0sYyk7cmV0dXJuIGN9ZnVuY3Rpb24gdWIoYSxiLGMsZCxlKXtmb3IodmFyIGYs%0AZz1bXSxoPTAsaT1hLmxlbmd0aCxqPW51bGwhPWI7aT5oO2grKykoZj1hW2hdKSYm%0AKCFjfHxjKGYsZCxlKSkmJihnLnB1c2goZiksaiYmYi5wdXNoKGgpKTtyZXR1cm4g%0AZ31mdW5jdGlvbiB2YihhLGIsYyxkLGUsZil7cmV0dXJuIGQmJiFkW3VdJiYoZD12%0AYihkKSksZSYmIWVbdV0mJihlPXZiKGUsZikpLGhiKGZ1bmN0aW9uKGYsZyxoLGkp%0Ae3ZhciBqLGssbCxtPVtdLG49W10sbz1nLmxlbmd0aCxwPWZ8fHRiKGJ8fCIqIixo%0ALm5vZGVUeXBlP1toXTpoLFtdKSxxPSFhfHwhZiYmYj9wOnViKHAsbSxhLGgsaSks%0Acj1jP2V8fChmP2E6b3x8ZCk/W106ZzpxO2lmKGMmJmMocSxyLGgsaSksZCl7aj11%0AYihyLG4pLGQoaixbXSxoLGkpLGs9ai5sZW5ndGg7d2hpbGUoay0tKShsPWpba10p%0AJiYocltuW2tdXT0hKHFbbltrXV09bCkpfWlmKGYpe2lmKGV8fGEpe2lmKGUpe2o9%0AW10saz1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkmJmoucHVzaChxW2tdPWwp%0AO2UobnVsbCxyPVtdLGosaSl9az1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkm%0AJihqPWU/Sy5jYWxsKGYsbCk6bVtrXSk+LTEmJihmW2pdPSEoZ1tqXT1sKSl9fWVs%0Ac2Ugcj11YihyPT09Zz9yLnNwbGljZShvLHIubGVuZ3RoKTpyKSxlP2UobnVsbCxn%0ALHIsaSk6SS5hcHBseShnLHIpfSl9ZnVuY3Rpb24gd2IoYSl7Zm9yKHZhciBiLGMs%0AZSxmPWEubGVuZ3RoLGc9ZC5yZWxhdGl2ZVthWzBdLnR5cGVdLGg9Z3x8ZC5yZWxh%0AdGl2ZVsiICJdLGk9Zz8xOjAsaz1yYihmdW5jdGlvbihhKXtyZXR1cm4gYT09PWJ9%0ALGgsITApLGw9cmIoZnVuY3Rpb24oYSl7cmV0dXJuIEsuY2FsbChiLGEpPi0xfSxo%0ALCEwKSxtPVtmdW5jdGlvbihhLGMsZCl7cmV0dXJuIWcmJihkfHxjIT09ail8fCgo%0AYj1jKS5ub2RlVHlwZT9rKGEsYyxkKTpsKGEsYyxkKSl9XTtmPmk7aSsrKWlmKGM9%0AZC5yZWxhdGl2ZVthW2ldLnR5cGVdKW09W3JiKHNiKG0pLGMpXTtlbHNle2lmKGM9%0AZC5maWx0ZXJbYVtpXS50eXBlXS5hcHBseShudWxsLGFbaV0ubWF0Y2hlcyksY1t1%0AXSl7Zm9yKGU9KytpO2Y+ZTtlKyspaWYoZC5yZWxhdGl2ZVthW2VdLnR5cGVdKWJy%0AZWFrO3JldHVybiB2YihpPjEmJnNiKG0pLGk+MSYmcWIoYS5zbGljZSgwLGktMSku%0AY29uY2F0KHt2YWx1ZToiICI9PT1hW2ktMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFj%0AZShSLCIkMSIpLGMsZT5pJiZ3YihhLnNsaWNlKGksZSkpLGY+ZSYmd2IoYT1hLnNs%0AaWNlKGUpKSxmPmUmJnFiKGEpKX1tLnB1c2goYyl9cmV0dXJuIHNiKG0pfWZ1bmN0%0AaW9uIHhiKGEsYil7dmFyIGM9Yi5sZW5ndGg+MCxlPWEubGVuZ3RoPjAsZj1mdW5j%0AdGlvbihmLGcsaCxpLGspe3ZhciBsLG0sbyxwPTAscT0iMCIscj1mJiZbXSxzPVtd%0ALHQ9aix1PWZ8fGUmJmQuZmluZC5UQUcoIioiLGspLHY9dys9bnVsbD09dD8xOk1h%0AdGgucmFuZG9tKCl8fC4xLHg9dS5sZW5ndGg7Zm9yKGsmJihqPWchPT1uJiZnKTtx%0AIT09eCYmbnVsbCE9KGw9dVtxXSk7cSsrKXtpZihlJiZsKXttPTA7d2hpbGUobz1h%0AW20rK10paWYobyhsLGcsaCkpe2kucHVzaChsKTticmVha31rJiYodz12KX1jJiYo%0AKGw9IW8mJmwpJiZwLS0sZiYmci5wdXNoKGwpKX1pZihwKz1xLGMmJnEhPT1wKXtt%0APTA7d2hpbGUobz1iW20rK10pbyhyLHMsZyxoKTtpZihmKXtpZihwPjApd2hpbGUo%0AcS0tKXJbcV18fHNbcV18fChzW3FdPUcuY2FsbChpKSk7cz11YihzKX1JLmFwcGx5%0AKGkscyksayYmIWYmJnMubGVuZ3RoPjAmJnArYi5sZW5ndGg+MSYmZmIudW5pcXVl%0AU29ydChpKX1yZXR1cm4gayYmKHc9dixqPXQpLHJ9O3JldHVybiBjP2hiKGYpOmZ9%0AcmV0dXJuIGg9ZmIuY29tcGlsZT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1b%0AXSxmPUFbYSsiICJdO2lmKCFmKXtifHwoYj1nKGEpKSxjPWIubGVuZ3RoO3doaWxl%0AKGMtLSlmPXdiKGJbY10pLGZbdV0/ZC5wdXNoKGYpOmUucHVzaChmKTtmPUEoYSx4%0AYihlLGQpKSxmLnNlbGVjdG9yPWF9cmV0dXJuIGZ9LGk9ZmIuc2VsZWN0PWZ1bmN0%0AaW9uKGEsYixlLGYpe3ZhciBpLGosayxsLG0sbj0iZnVuY3Rpb24iPT10eXBlb2Yg%0AYSYmYSxvPSFmJiZnKGE9bi5zZWxlY3Rvcnx8YSk7aWYoZT1lfHxbXSwxPT09by5s%0AZW5ndGgpe2lmKGo9b1swXT1vWzBdLnNsaWNlKDApLGoubGVuZ3RoPjImJiJJRCI9%0APT0oaz1qWzBdKS50eXBlJiZjLmdldEJ5SWQmJjk9PT1iLm5vZGVUeXBlJiZwJiZk%0ALnJlbGF0aXZlW2pbMV0udHlwZV0pe2lmKGI9KGQuZmluZC5JRChrLm1hdGNoZXNb%0AMF0ucmVwbGFjZShjYixkYiksYil8fFtdKVswXSwhYilyZXR1cm4gZTtuJiYoYj1i%0ALnBhcmVudE5vZGUpLGE9YS5zbGljZShqLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1p%0APVgubmVlZHNDb250ZXh0LnRlc3QoYSk/MDpqLmxlbmd0aDt3aGlsZShpLS0pe2lm%0AKGs9altpXSxkLnJlbGF0aXZlW2w9ay50eXBlXSlicmVhaztpZigobT1kLmZpbmRb%0AbF0pJiYoZj1tKGsubWF0Y2hlc1swXS5yZXBsYWNlKGNiLGRiKSxhYi50ZXN0KGpb%0AMF0udHlwZSkmJm9iKGIucGFyZW50Tm9kZSl8fGIpKSl7aWYoai5zcGxpY2UoaSwx%0AKSxhPWYubGVuZ3RoJiZxYihqKSwhYSlyZXR1cm4gSS5hcHBseShlLGYpLGU7YnJl%0AYWt9fX1yZXR1cm4obnx8aChhLG8pKShmLGIsIXAsZSxhYi50ZXN0KGEpJiZvYihi%0ALnBhcmVudE5vZGUpfHxiKSxlfSxjLnNvcnRTdGFibGU9dS5zcGxpdCgiIikuc29y%0AdChCKS5qb2luKCIiKT09PXUsYy5kZXRlY3REdXBsaWNhdGVzPSEhbCxtKCksYy5z%0Ab3J0RGV0YWNoZWQ9aWIoZnVuY3Rpb24oYSl7cmV0dXJuIDEmYS5jb21wYXJlRG9j%0AdW1lbnRQb3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLGliKGZ1bmN0%0AaW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMi%0APT09YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGpiKCJ0eXBl%0AfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9p%0AZCAwOmEuZ2V0QXR0cmlidXRlKGIsInR5cGUiPT09Yi50b0xvd2VyQ2FzZSgpPzE6%0AMil9KSxjLmF0dHJpYnV0ZXMmJmliKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVy%0ASFRNTD0iPGlucHV0Lz4iLGEuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVl%0AIiwiIiksIiI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8%0AfGpiKCJ2YWx1ZSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjfHwiaW5wdXQiIT09%0AYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP3ZvaWQgMDphLmRlZmF1bHRWYWx1ZX0p%0ALGliKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hLmdldEF0dHJpYnV0ZSgiZGlz%0AYWJsZWQiKX0pfHxqYihMLGZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gYz92%0Ab2lkIDA6YVtiXT09PSEwP2IudG9Mb3dlckNhc2UoKTooZD1hLmdldEF0dHJpYnV0%0AZU5vZGUoYikpJiZkLnNwZWNpZmllZD9kLnZhbHVlOm51bGx9KSxmYn0oYSk7bi5m%0AaW5kPXQsbi5leHByPXQuc2VsZWN0b3JzLG4uZXhwclsiOiJdPW4uZXhwci5wc2V1%0AZG9zLG4udW5pcXVlPXQudW5pcXVlU29ydCxuLnRleHQ9dC5nZXRUZXh0LG4uaXNY%0ATUxEb2M9dC5pc1hNTCxuLmNvbnRhaW5zPXQuY29udGFpbnM7dmFyIHU9bi5leHBy%0ALm1hdGNoLm5lZWRzQ29udGV4dCx2PS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwp%0AJC8sdz0vXi5bXjojXFtcLixdKiQvO2Z1bmN0aW9uIHgoYSxiLGMpe2lmKG4uaXNG%0AdW5jdGlvbihiKSlyZXR1cm4gbi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4h%0AIWIuY2FsbChhLGQsYSkhPT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gbi5ncmVw%0AKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1iIT09Y30pO2lmKCJzdHJpbmciPT10%0AeXBlb2YgYil7aWYody50ZXN0KGIpKXJldHVybiBuLmZpbHRlcihiLGEsYyk7Yj1u%0ALmZpbHRlcihiLGEpfXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4g%0AZy5jYWxsKGIsYSk+PTAhPT1jfSl9bi5maWx0ZXI9ZnVuY3Rpb24oYSxiLGMpe3Zh%0AciBkPWJbMF07cmV0dXJuIGMmJihhPSI6bm90KCIrYSsiKSIpLDE9PT1iLmxlbmd0%0AaCYmMT09PWQubm9kZVR5cGU/bi5maW5kLm1hdGNoZXNTZWxlY3RvcihkLGEpP1tk%0AXTpbXTpuLmZpbmQubWF0Y2hlcyhhLG4uZ3JlcChiLGZ1bmN0aW9uKGEpe3JldHVy%0AbiAxPT09YS5ub2RlVHlwZX0pKX0sbi5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24o%0AYSl7dmFyIGIsYz10aGlzLmxlbmd0aCxkPVtdLGU9dGhpcztpZigic3RyaW5nIiE9%0AdHlwZW9mIGEpcmV0dXJuIHRoaXMucHVzaFN0YWNrKG4oYSkuZmlsdGVyKGZ1bmN0%0AaW9uKCl7Zm9yKGI9MDtjPmI7YisrKWlmKG4uY29udGFpbnMoZVtiXSx0aGlzKSly%0AZXR1cm4hMH0pKTtmb3IoYj0wO2M+YjtiKyspbi5maW5kKGEsZVtiXSxkKTtyZXR1%0Acm4gZD10aGlzLnB1c2hTdGFjayhjPjE/bi51bmlxdWUoZCk6ZCksZC5zZWxlY3Rv%0Acj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2E6YSxkfSxmaWx0ZXI6%0AZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgodGhpcyxhfHxbXSwh%0AMSkpfSxub3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgodGhp%0AcyxhfHxbXSwhMCkpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIXgodGhpcywic3Ry%0AaW5nIj09dHlwZW9mIGEmJnUudGVzdChhKT9uKGEpOmF8fFtdLCExKS5sZW5ndGh9%0AfSk7dmFyIHksej0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQv%0ALEE9bi5mbi5pbml0PWZ1bmN0aW9uKGEsYil7dmFyIGMsZDtpZighYSlyZXR1cm4g%0AdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGEpe2lmKGM9IjwiPT09YVswXSYmIj4i%0APT09YVthLmxlbmd0aC0xXSYmYS5sZW5ndGg+PTM/W251bGwsYSxudWxsXTp6LmV4%0AZWMoYSksIWN8fCFjWzFdJiZiKXJldHVybiFifHxiLmpxdWVyeT8oYnx8eSkuZmlu%0AZChhKTp0aGlzLmNvbnN0cnVjdG9yKGIpLmZpbmQoYSk7aWYoY1sxXSl7aWYoYj1i%0AIGluc3RhbmNlb2Ygbj9iWzBdOmIsbi5tZXJnZSh0aGlzLG4ucGFyc2VIVE1MKGNb%0AMV0sYiYmYi5ub2RlVHlwZT9iLm93bmVyRG9jdW1lbnR8fGI6bCwhMCkpLHYudGVz%0AdChjWzFdKSYmbi5pc1BsYWluT2JqZWN0KGIpKWZvcihjIGluIGIpbi5pc0Z1bmN0%0AaW9uKHRoaXNbY10pP3RoaXNbY10oYltjXSk6dGhpcy5hdHRyKGMsYltjXSk7cmV0%0AdXJuIHRoaXN9cmV0dXJuIGQ9bC5nZXRFbGVtZW50QnlJZChjWzJdKSxkJiZkLnBh%0AcmVudE5vZGUmJih0aGlzLmxlbmd0aD0xLHRoaXNbMF09ZCksdGhpcy5jb250ZXh0%0APWwsdGhpcy5zZWxlY3Rvcj1hLHRoaXN9cmV0dXJuIGEubm9kZVR5cGU/KHRoaXMu%0AY29udGV4dD10aGlzWzBdPWEsdGhpcy5sZW5ndGg9MSx0aGlzKTpuLmlzRnVuY3Rp%0Ab24oYSk/InVuZGVmaW5lZCIhPXR5cGVvZiB5LnJlYWR5P3kucmVhZHkoYSk6YShu%0AKToodm9pZCAwIT09YS5zZWxlY3RvciYmKHRoaXMuc2VsZWN0b3I9YS5zZWxlY3Rv%0Acix0aGlzLmNvbnRleHQ9YS5jb250ZXh0KSxuLm1ha2VBcnJheShhLHRoaXMpKX07%0AQS5wcm90b3R5cGU9bi5mbix5PW4obCk7dmFyIEI9L14oPzpwYXJlbnRzfHByZXYo%0APzpVbnRpbHxBbGwpKS8sQz17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDoh%0AMCxwcmV2OiEwfTtuLmV4dGVuZCh7ZGlyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1b%0AXSxlPXZvaWQgMCE9PWM7d2hpbGUoKGE9YVtiXSkmJjkhPT1hLm5vZGVUeXBlKWlm%0AKDE9PT1hLm5vZGVUeXBlKXtpZihlJiZuKGEpLmlzKGMpKWJyZWFrO2QucHVzaChh%0AKX1yZXR1cm4gZH0sc2libGluZzpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXTth%0AO2E9YS5uZXh0U2libGluZykxPT09YS5ub2RlVHlwZSYmYSE9PWImJmMucHVzaChh%0AKTtyZXR1cm4gY319KSxuLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGEpe3ZhciBi%0APW4oYSx0aGlzKSxjPWIubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlv%0Abigpe2Zvcih2YXIgYT0wO2M+YTthKyspaWYobi5jb250YWlucyh0aGlzLGJbYV0p%0AKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD0w%0ALGU9dGhpcy5sZW5ndGgsZj1bXSxnPXUudGVzdChhKXx8InN0cmluZyIhPXR5cGVv%0AZiBhP24oYSxifHx0aGlzLmNvbnRleHQpOjA7ZT5kO2QrKylmb3IoYz10aGlzW2Rd%0AO2MmJmMhPT1iO2M9Yy5wYXJlbnROb2RlKWlmKGMubm9kZVR5cGU8MTEmJihnP2cu%0AaW5kZXgoYyk+LTE6MT09PWMubm9kZVR5cGUmJm4uZmluZC5tYXRjaGVzU2VsZWN0%0Ab3IoYyxhKSkpe2YucHVzaChjKTticmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2so%0AZi5sZW5ndGg+MT9uLnVuaXF1ZShmKTpmKX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0%0AdXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP2cuY2FsbChuKGEpLHRoaXNbMF0pOmcu%0AY2FsbCh0aGlzLGEuanF1ZXJ5P2FbMF06YSk6dGhpc1swXSYmdGhpc1swXS5wYXJl%0AbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVu%0AY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobi51bmlxdWUobi5tZXJn%0AZSh0aGlzLmdldCgpLG4oYSxiKSkpKX0sYWRkQmFjazpmdW5jdGlvbihhKXtyZXR1%0Acm4gdGhpcy5hZGQobnVsbD09YT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2Jq%0AZWN0LmZpbHRlcihhKSl9fSk7ZnVuY3Rpb24gRChhLGIpe3doaWxlKChhPWFbYl0p%0AJiYxIT09YS5ub2RlVHlwZSk7cmV0dXJuIGF9bi5lYWNoKHtwYXJlbnQ6ZnVuY3Rp%0Ab24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiYxMSE9PWIubm9kZVR5%0AcGU/YjpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBuLmRpcihhLCJw%0AYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJu%0AIG4uZGlyKGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVy%0AbiBEKGEsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIEQo%0AYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJu%0AIG4uZGlyKGEsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oYSl7cmV0%0AdXJuIG4uZGlyKGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rp%0Ab24oYSxiLGMpe3JldHVybiBuLmRpcihhLCJuZXh0U2libGluZyIsYyl9LHByZXZV%0AbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG4uZGlyKGEsInByZXZpb3VzU2li%0AbGluZyIsYyl9LHNpYmxpbmdzOmZ1bmN0aW9uKGEpe3JldHVybiBuLnNpYmxpbmco%0AKGEucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1bmN0%0AaW9uKGEpe3JldHVybiBuLnNpYmxpbmcoYS5maXJzdENoaWxkKX0sY29udGVudHM6%0AZnVuY3Rpb24oYSl7cmV0dXJuIGEuY29udGVudERvY3VtZW50fHxuLm1lcmdlKFtd%0ALGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe24uZm5bYV09ZnVuY3Rpb24o%0AYyxkKXt2YXIgZT1uLm1hcCh0aGlzLGIsYyk7cmV0dXJuIlVudGlsIiE9PWEuc2xp%0AY2UoLTUpJiYoZD1jKSxkJiYic3RyaW5nIj09dHlwZW9mIGQmJihlPW4uZmlsdGVy%0AKGQsZSkpLHRoaXMubGVuZ3RoPjEmJihDW2FdfHxuLnVuaXF1ZShlKSxCLnRlc3Qo%0AYSkmJmUucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhlKX19KTt2YXIgRT0vXFMr%0AL2csRj17fTtmdW5jdGlvbiBHKGEpe3ZhciBiPUZbYV09e307cmV0dXJuIG4uZWFj%0AaChhLm1hdGNoKEUpfHxbXSxmdW5jdGlvbihhLGMpe2JbY109ITB9KSxifW4uQ2Fs%0AbGJhY2tzPWZ1bmN0aW9uKGEpe2E9InN0cmluZyI9PXR5cGVvZiBhP0ZbYV18fEco%0AYSk6bi5leHRlbmQoe30sYSk7dmFyIGIsYyxkLGUsZixnLGg9W10saT0hYS5vbmNl%0AJiZbXSxqPWZ1bmN0aW9uKGwpe2ZvcihiPWEubWVtb3J5JiZsLGM9ITAsZz1lfHww%0ALGU9MCxmPWgubGVuZ3RoLGQ9ITA7aCYmZj5nO2crKylpZihoW2ddLmFwcGx5KGxb%0AMF0sbFsxXSk9PT0hMSYmYS5zdG9wT25GYWxzZSl7Yj0hMTticmVha31kPSExLGgm%0AJihpP2kubGVuZ3RoJiZqKGkuc2hpZnQoKSk6Yj9oPVtdOmsuZGlzYWJsZSgpKX0s%0Aaz17YWRkOmZ1bmN0aW9uKCl7aWYoaCl7dmFyIGM9aC5sZW5ndGg7IWZ1bmN0aW9u%0AIGcoYil7bi5lYWNoKGIsZnVuY3Rpb24oYixjKXt2YXIgZD1uLnR5cGUoYyk7ImZ1%0AbmN0aW9uIj09PWQ/YS51bmlxdWUmJmsuaGFzKGMpfHxoLnB1c2goYyk6YyYmYy5s%0AZW5ndGgmJiJzdHJpbmciIT09ZCYmZyhjKX0pfShhcmd1bWVudHMpLGQ/Zj1oLmxl%0Abmd0aDpiJiYoZT1jLGooYikpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24o%0AKXtyZXR1cm4gaCYmbi5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihhLGIpe3ZhciBj%0AO3doaWxlKChjPW4uaW5BcnJheShiLGgsYykpPi0xKWguc3BsaWNlKGMsMSksZCYm%0AKGY+PWMmJmYtLSxnPj1jJiZnLS0pfSksdGhpc30saGFzOmZ1bmN0aW9uKGEpe3Jl%0AdHVybiBhP24uaW5BcnJheShhLGgpPi0xOiEoIWh8fCFoLmxlbmd0aCl9LGVtcHR5%0AOmZ1bmN0aW9uKCl7cmV0dXJuIGg9W10sZj0wLHRoaXN9LGRpc2FibGU6ZnVuY3Rp%0Ab24oKXtyZXR1cm4gaD1pPWI9dm9pZCAwLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9u%0AKCl7cmV0dXJuIWh9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gaT12b2lkIDAsYnx8%0Aay5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWl9LGZp%0AcmVXaXRoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIWh8fGMmJiFpfHwoYj1ifHxbXSxi%0APVthLGIuc2xpY2U/Yi5zbGljZSgpOmJdLGQ/aS5wdXNoKGIpOmooYikpLHRoaXN9%0ALGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gay5maXJlV2l0aCh0aGlzLGFyZ3VtZW50%0AcyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWN9fTtyZXR1cm4ga30s%0Abi5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGEpe3ZhciBiPVtbInJlc29sdmUi%0ALCJkb25lIixuLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVzb2x2ZWQiXSxb%0AInJlamVjdCIsImZhaWwiLG4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWpl%0AY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLG4uQ2FsbGJhY2tzKCJtZW1vcnki%0AKV1dLGM9InBlbmRpbmciLGQ9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGFs%0Ad2F5czpmdW5jdGlvbigpe3JldHVybiBlLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFy%0AZ3VtZW50cyksdGhpc30sdGhlbjpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50czty%0AZXR1cm4gbi5EZWZlcnJlZChmdW5jdGlvbihjKXtuLmVhY2goYixmdW5jdGlvbihi%0ALGYpe3ZhciBnPW4uaXNGdW5jdGlvbihhW2JdKSYmYVtiXTtlW2ZbMV1dKGZ1bmN0%0AaW9uKCl7dmFyIGE9ZyYmZy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7YSYmbi5pc0Z1%0AbmN0aW9uKGEucHJvbWlzZSk/YS5wcm9taXNlKCkuZG9uZShjLnJlc29sdmUpLmZh%0AaWwoYy5yZWplY3QpLnByb2dyZXNzKGMubm90aWZ5KTpjW2ZbMF0rIldpdGgiXSh0%0AaGlzPT09ZD9jLnByb21pc2UoKTp0aGlzLGc/W2FdOmFyZ3VtZW50cyl9KX0pLGE9%0AbnVsbH0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVs%0AbCE9YT9uLmV4dGVuZChhLGQpOmR9fSxlPXt9O3JldHVybiBkLnBpcGU9ZC50aGVu%0ALG4uZWFjaChiLGZ1bmN0aW9uKGEsZil7dmFyIGc9ZlsyXSxoPWZbM107ZFtmWzFd%0AXT1nLmFkZCxoJiZnLmFkZChmdW5jdGlvbigpe2M9aH0sYlsxXmFdWzJdLmRpc2Fi%0AbGUsYlsyXVsyXS5sb2NrKSxlW2ZbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIGVbZlsw%0AXSsiV2l0aCJdKHRoaXM9PT1lP2Q6dGhpcyxhcmd1bWVudHMpLHRoaXN9LGVbZlsw%0AXSsiV2l0aCJdPWcuZmlyZVdpdGh9KSxkLnByb21pc2UoZSksYSYmYS5jYWxsKGUs%0AZSksZX0sd2hlbjpmdW5jdGlvbihhKXt2YXIgYj0wLGM9ZC5jYWxsKGFyZ3VtZW50%0AcyksZT1jLmxlbmd0aCxmPTEhPT1lfHxhJiZuLmlzRnVuY3Rpb24oYS5wcm9taXNl%0AKT9lOjAsZz0xPT09Zj9hOm4uRGVmZXJyZWQoKSxoPWZ1bmN0aW9uKGEsYixjKXty%0AZXR1cm4gZnVuY3Rpb24oZSl7YlthXT10aGlzLGNbYV09YXJndW1lbnRzLmxlbmd0%0AaD4xP2QuY2FsbChhcmd1bWVudHMpOmUsYz09PWk/Zy5ub3RpZnlXaXRoKGIsYyk6%0ALS1mfHxnLnJlc29sdmVXaXRoKGIsYyl9fSxpLGosaztpZihlPjEpZm9yKGk9bmV3%0AIEFycmF5KGUpLGo9bmV3IEFycmF5KGUpLGs9bmV3IEFycmF5KGUpO2U+YjtiKysp%0AY1tiXSYmbi5pc0Z1bmN0aW9uKGNbYl0ucHJvbWlzZSk/Y1tiXS5wcm9taXNlKCku%0AZG9uZShoKGIsayxjKSkuZmFpbChnLnJlamVjdCkucHJvZ3Jlc3MoaChiLGosaSkp%0AOi0tZjtyZXR1cm4gZnx8Zy5yZXNvbHZlV2l0aChrLGMpLGcucHJvbWlzZSgpfX0p%0AO3ZhciBIO24uZm4ucmVhZHk9ZnVuY3Rpb24oYSl7cmV0dXJuIG4ucmVhZHkucHJv%0AbWlzZSgpLmRvbmUoYSksdGhpc30sbi5leHRlbmQoe2lzUmVhZHk6ITEscmVhZHlX%0AYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGEpe2E/bi5yZWFkeVdhaXQrKzpuLnJl%0AYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oYSl7KGE9PT0hMD8tLW4ucmVhZHlXYWl0%0AOm4uaXNSZWFkeSl8fChuLmlzUmVhZHk9ITAsYSE9PSEwJiYtLW4ucmVhZHlXYWl0%0APjB8fChILnJlc29sdmVXaXRoKGwsW25dKSxuLmZuLnRyaWdnZXJIYW5kbGVyJiYo%0AbihsKS50cmlnZ2VySGFuZGxlcigicmVhZHkiKSxuKGwpLm9mZigicmVhZHkiKSkp%0AKX19KTtmdW5jdGlvbiBJKCl7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250%0AZW50TG9hZGVkIixJLCExKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLEks%0AITEpLG4ucmVhZHkoKX1uLnJlYWR5LnByb21pc2U9ZnVuY3Rpb24oYil7cmV0dXJu%0AIEh8fChIPW4uRGVmZXJyZWQoKSwiY29tcGxldGUiPT09bC5yZWFkeVN0YXRlP3Nl%0AdFRpbWVvdXQobi5yZWFkeSk6KGwuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVu%0AdExvYWRlZCIsSSwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixJLCExKSkp%0ALEgucHJvbWlzZShiKX0sbi5yZWFkeS5wcm9taXNlKCk7dmFyIEo9bi5hY2Nlc3M9%0AZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9MCxpPWEubGVuZ3RoLGo9bnVs%0AbD09YztpZigib2JqZWN0Ij09PW4udHlwZShjKSl7ZT0hMDtmb3IoaCBpbiBjKW4u%0AYWNjZXNzKGEsYixoLGNbaF0sITAsZixnKX1lbHNlIGlmKHZvaWQgMCE9PWQmJihl%0APSEwLG4uaXNGdW5jdGlvbihkKXx8KGc9ITApLGomJihnPyhiLmNhbGwoYSxkKSxi%0APW51bGwpOihqPWIsYj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGouY2FsbChuKGEp%0ALGMpfSkpLGIpKWZvcig7aT5oO2grKyliKGFbaF0sYyxnP2Q6ZC5jYWxsKGFbaF0s%0AaCxiKGFbaF0sYykpKTtyZXR1cm4gZT9hOmo/Yi5jYWxsKGEpOmk/YihhWzBdLGMp%0AOmZ9O24uYWNjZXB0RGF0YT1mdW5jdGlvbihhKXtyZXR1cm4gMT09PWEubm9kZVR5%0AcGV8fDk9PT1hLm5vZGVUeXBlfHwhK2Eubm9kZVR5cGV9O2Z1bmN0aW9uIEsoKXtP%0AYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5jYWNoZT17fSwwLHtnZXQ6ZnVuY3Rp%0Ab24oKXtyZXR1cm57fX19KSx0aGlzLmV4cGFuZG89bi5leHBhbmRvK01hdGgucmFu%0AZG9tKCl9Sy51aWQ9MSxLLmFjY2VwdHM9bi5hY2NlcHREYXRhLEsucHJvdG90eXBl%0APXtrZXk6ZnVuY3Rpb24oYSl7aWYoIUsuYWNjZXB0cyhhKSlyZXR1cm4gMDt2YXIg%0AYj17fSxjPWFbdGhpcy5leHBhbmRvXTtpZighYyl7Yz1LLnVpZCsrO3RyeXtiW3Ro%0AaXMuZXhwYW5kb109e3ZhbHVlOmN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGEs%0AYil9Y2F0Y2goZCl7Ylt0aGlzLmV4cGFuZG9dPWMsbi5leHRlbmQoYSxiKX19cmV0%0AdXJuIHRoaXMuY2FjaGVbY118fCh0aGlzLmNhY2hlW2NdPXt9KSxjfSxzZXQ6ZnVu%0AY3Rpb24oYSxiLGMpe3ZhciBkLGU9dGhpcy5rZXkoYSksZj10aGlzLmNhY2hlW2Vd%0AO2lmKCJzdHJpbmciPT10eXBlb2YgYilmW2JdPWM7ZWxzZSBpZihuLmlzRW1wdHlP%0AYmplY3QoZikpbi5leHRlbmQodGhpcy5jYWNoZVtlXSxiKTtlbHNlIGZvcihkIGlu%0AIGIpZltkXT1iW2RdO3JldHVybiBmfSxnZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz10%0AaGlzLmNhY2hlW3RoaXMua2V5KGEpXTtyZXR1cm4gdm9pZCAwPT09Yj9jOmNbYl19%0ALGFjY2VzczpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIHZvaWQgMD09PWJ8%0AfGImJiJzdHJpbmciPT10eXBlb2YgYiYmdm9pZCAwPT09Yz8oZD10aGlzLmdldChh%0ALGIpLHZvaWQgMCE9PWQ/ZDp0aGlzLmdldChhLG4uY2FtZWxDYXNlKGIpKSk6KHRo%0AaXMuc2V0KGEsYixjKSx2b2lkIDAhPT1jP2M6Yil9LHJlbW92ZTpmdW5jdGlvbihh%0ALGIpe3ZhciBjLGQsZSxmPXRoaXMua2V5KGEpLGc9dGhpcy5jYWNoZVtmXTtpZih2%0Ab2lkIDA9PT1iKXRoaXMuY2FjaGVbZl09e307ZWxzZXtuLmlzQXJyYXkoYik/ZD1i%0ALmNvbmNhdChiLm1hcChuLmNhbWVsQ2FzZSkpOihlPW4uY2FtZWxDYXNlKGIpLGIg%0AaW4gZz9kPVtiLGVdOihkPWUsZD1kIGluIGc/W2RdOmQubWF0Y2goRSl8fFtdKSks%0AYz1kLmxlbmd0aDt3aGlsZShjLS0pZGVsZXRlIGdbZFtjXV19fSxoYXNEYXRhOmZ1%0AbmN0aW9uKGEpe3JldHVybiFuLmlzRW1wdHlPYmplY3QodGhpcy5jYWNoZVthW3Ro%0AaXMuZXhwYW5kb11dfHx7fSl9LGRpc2NhcmQ6ZnVuY3Rpb24oYSl7YVt0aGlzLmV4%0AcGFuZG9dJiZkZWxldGUgdGhpcy5jYWNoZVthW3RoaXMuZXhwYW5kb11dfX07dmFy%0AIEw9bmV3IEssTT1uZXcgSyxOPS9eKD86XHtbXHdcV10qXH18XFtbXHdcV10qXF0p%0AJC8sTz0vKFtBLVpdKS9nO2Z1bmN0aW9uIFAoYSxiLGMpe3ZhciBkO2lmKHZvaWQg%0AMD09PWMmJjE9PT1hLm5vZGVUeXBlKWlmKGQ9ImRhdGEtIitiLnJlcGxhY2UoTywi%0ALSQxIikudG9Mb3dlckNhc2UoKSxjPWEuZ2V0QXR0cmlidXRlKGQpLCJzdHJpbmci%0APT10eXBlb2YgYyl7dHJ5e2M9InRydWUiPT09Yz8hMDoiZmFsc2UiPT09Yz8hMToi%0AbnVsbCI9PT1jP251bGw6K2MrIiI9PT1jPytjOk4udGVzdChjKT9uLnBhcnNlSlNP%0ATihjKTpjfWNhdGNoKGUpe31NLnNldChhLGIsYyl9ZWxzZSBjPXZvaWQgMDtyZXR1%0Acm4gY31uLmV4dGVuZCh7aGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gTS5oYXNE%0AYXRhKGEpfHxMLmhhc0RhdGEoYSl9LGRhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVy%0AbiBNLmFjY2VzcyhhLGIsYyl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtNLnJl%0AbW92ZShhLGIpCn0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBMLmFjY2Vz%0AcyhhLGIsYyl9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7TC5yZW1vdmUoYSxi%0AKX19KSxuLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxm%0APXRoaXNbMF0sZz1mJiZmLmF0dHJpYnV0ZXM7aWYodm9pZCAwPT09YSl7aWYodGhp%0Acy5sZW5ndGgmJihlPU0uZ2V0KGYpLDE9PT1mLm5vZGVUeXBlJiYhTC5nZXQoZiwi%0AaGFzRGF0YUF0dHJzIikpKXtjPWcubGVuZ3RoO3doaWxlKGMtLSlnW2NdJiYoZD1n%0AW2NdLm5hbWUsMD09PWQuaW5kZXhPZigiZGF0YS0iKSYmKGQ9bi5jYW1lbENhc2Uo%0AZC5zbGljZSg1KSksUChmLGQsZVtkXSkpKTtMLnNldChmLCJoYXNEYXRhQXR0cnMi%0ALCEwKX1yZXR1cm4gZX1yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGE/dGhpcy5lYWNo%0AKGZ1bmN0aW9uKCl7TS5zZXQodGhpcyxhKX0pOkoodGhpcyxmdW5jdGlvbihiKXt2%0AYXIgYyxkPW4uY2FtZWxDYXNlKGEpO2lmKGYmJnZvaWQgMD09PWIpe2lmKGM9TS5n%0AZXQoZixhKSx2b2lkIDAhPT1jKXJldHVybiBjO2lmKGM9TS5nZXQoZixkKSx2b2lk%0AIDAhPT1jKXJldHVybiBjO2lmKGM9UChmLGQsdm9pZCAwKSx2b2lkIDAhPT1jKXJl%0AdHVybiBjfWVsc2UgdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9TS5nZXQodGhp%0AcyxkKTtNLnNldCh0aGlzLGQsYiksLTEhPT1hLmluZGV4T2YoIi0iKSYmdm9pZCAw%0AIT09YyYmTS5zZXQodGhpcyxhLGIpfSl9LG51bGwsYixhcmd1bWVudHMubGVuZ3Ro%0APjEsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMu%0AZWFjaChmdW5jdGlvbigpe00ucmVtb3ZlKHRoaXMsYSl9KX19KSxuLmV4dGVuZCh7%0AcXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBhPyhiPShifHwiZngi%0AKSsicXVldWUiLGQ9TC5nZXQoYSxiKSxjJiYoIWR8fG4uaXNBcnJheShjKT9kPUwu%0AYWNjZXNzKGEsYixuLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKSxkfHxbXSk6dm9p%0AZCAwfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPW4ucXVl%0AdWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9bi5fcXVldWVIb29rcyhh%0ALGIpLGc9ZnVuY3Rpb24oKXtuLmRlcXVldWUoYSxiKX07ImlucHJvZ3Jlc3MiPT09%0AZSYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKCJmeCI9PT1iJiZjLnVuc2hpZnQoImlu%0AcHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZm%0ALmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1i%0AKyJxdWV1ZUhvb2tzIjtyZXR1cm4gTC5nZXQoYSxjKXx8TC5hY2Nlc3MoYSxjLHtl%0AbXB0eTpuLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtM%0ALnJlbW92ZShhLFtiKyJxdWV1ZSIsY10pfSl9KX19KSxuLmZuLmV4dGVuZCh7cXVl%0AdWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVybiJzdHJpbmciIT10eXBlb2Yg%0AYSYmKGI9YSxhPSJmeCIsYy0tKSxhcmd1bWVudHMubGVuZ3RoPGM/bi5xdWV1ZSh0%0AaGlzWzBdLGEpOnZvaWQgMD09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2%0AYXIgYz1uLnF1ZXVlKHRoaXMsYSxiKTtuLl9xdWV1ZUhvb2tzKHRoaXMsYSksImZ4%0AIj09PWEmJiJpbnByb2dyZXNzIiE9PWNbMF0mJm4uZGVxdWV1ZSh0aGlzLGEpfSl9%0ALGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp%0Ae24uZGVxdWV1ZSh0aGlzLGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0%0AdXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxi%0AKXt2YXIgYyxkPTEsZT1uLkRlZmVycmVkKCksZj10aGlzLGc9dGhpcy5sZW5ndGgs%0AaD1mdW5jdGlvbigpey0tZHx8ZS5yZXNvbHZlV2l0aChmLFtmXSl9OyJzdHJpbmci%0AIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHwiZngiO3doaWxlKGctLSlj%0APUwuZ2V0KGZbZ10sYSsicXVldWVIb29rcyIpLGMmJmMuZW1wdHkmJihkKyssYy5l%0AbXB0eS5hZGQoaCkpO3JldHVybiBoKCksZS5wcm9taXNlKGIpfX0pO3ZhciBRPS9b%0AKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLFI9WyJU%0Ab3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxTPWZ1bmN0aW9uKGEsYil7cmV0%0AdXJuIGE9Ynx8YSwibm9uZSI9PT1uLmNzcyhhLCJkaXNwbGF5Iil8fCFuLmNvbnRh%0AaW5zKGEub3duZXJEb2N1bWVudCxhKX0sVD0vXig/OmNoZWNrYm94fHJhZGlvKSQv%0AaTshZnVuY3Rpb24oKXt2YXIgYT1sLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxi%0APWEuYXBwZW5kQ2hpbGQobC5jcmVhdGVFbGVtZW50KCJkaXYiKSksYz1sLmNyZWF0%0AZUVsZW1lbnQoImlucHV0Iik7Yy5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIp%0ALGMuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLGMuc2V0QXR0cmli%0AdXRlKCJuYW1lIiwidCIpLGIuYXBwZW5kQ2hpbGQoYyksay5jaGVja0Nsb25lPWIu%0AY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGIu%0AaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixrLm5vQ2xvbmVDaGVj%0Aa2VkPSEhYi5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWV9KCk7%0AdmFyIFU9InVuZGVmaW5lZCI7ay5mb2N1c2luQnViYmxlcz0ib25mb2N1c2luImlu%0AIGE7dmFyIFY9L15rZXkvLFc9L14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51%0AKXxjbGljay8sWD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sWT0v%0AXihbXi5dKikoPzpcLiguKyl8KSQvO2Z1bmN0aW9uIFooKXtyZXR1cm4hMH1mdW5j%0AdGlvbiAkKCl7cmV0dXJuITF9ZnVuY3Rpb24gXygpe3RyeXtyZXR1cm4gbC5hY3Rp%0AdmVFbGVtZW50fWNhdGNoKGEpe319bi5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5j%0AdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbyxwLHEscj1MLmdl%0AdChhKTtpZihyKXtjLmhhbmRsZXImJihmPWMsYz1mLmhhbmRsZXIsZT1mLnNlbGVj%0AdG9yKSxjLmd1aWR8fChjLmd1aWQ9bi5ndWlkKyspLChpPXIuZXZlbnRzKXx8KGk9%0Aci5ldmVudHM9e30pLChnPXIuaGFuZGxlKXx8KGc9ci5oYW5kbGU9ZnVuY3Rpb24o%0AYil7cmV0dXJuIHR5cGVvZiBuIT09VSYmbi5ldmVudC50cmlnZ2VyZWQhPT1iLnR5%0AcGU/bi5ldmVudC5kaXNwYXRjaC5hcHBseShhLGFyZ3VtZW50cyk6dm9pZCAwfSks%0AYj0oYnx8IiIpLm1hdGNoKEUpfHxbIiJdLGo9Yi5sZW5ndGg7d2hpbGUoai0tKWg9%0AWS5leGVjKGJbal0pfHxbXSxvPXE9aFsxXSxwPShoWzJdfHwiIikuc3BsaXQoIi4i%0AKS5zb3J0KCksbyYmKGw9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShlP2wuZGVs%0AZWdhdGVUeXBlOmwuYmluZFR5cGUpfHxvLGw9bi5ldmVudC5zcGVjaWFsW29dfHx7%0AfSxrPW4uZXh0ZW5kKHt0eXBlOm8sb3JpZ1R5cGU6cSxkYXRhOmQsaGFuZGxlcjpj%0ALGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJm4uZXhwci5t%0AYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3BhY2U6cC5qb2luKCIuIil9%0ALGYpLChtPWlbb10pfHwobT1pW29dPVtdLG0uZGVsZWdhdGVDb3VudD0wLGwuc2V0%0AdXAmJmwuc2V0dXAuY2FsbChhLGQscCxnKSE9PSExfHxhLmFkZEV2ZW50TGlzdGVu%0AZXImJmEuYWRkRXZlbnRMaXN0ZW5lcihvLGcsITEpKSxsLmFkZCYmKGwuYWRkLmNh%0AbGwoYSxrKSxrLmhhbmRsZXIuZ3VpZHx8KGsuaGFuZGxlci5ndWlkPWMuZ3VpZCkp%0ALGU/bS5zcGxpY2UobS5kZWxlZ2F0ZUNvdW50KyssMCxrKTptLnB1c2goayksbi5l%0AdmVudC5nbG9iYWxbb109ITApfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7%0AdmFyIGYsZyxoLGksaixrLGwsbSxvLHAscSxyPUwuaGFzRGF0YShhKSYmTC5nZXQo%0AYSk7aWYociYmKGk9ci5ldmVudHMpKXtiPShifHwiIikubWF0Y2goRSl8fFsiIl0s%0Aaj1iLmxlbmd0aDt3aGlsZShqLS0paWYoaD1ZLmV4ZWMoYltqXSl8fFtdLG89cT1o%0AWzFdLHA9KGhbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxvKXtsPW4uZXZlbnQu%0Ac3BlY2lhbFtvXXx8e30sbz0oZD9sLmRlbGVnYXRlVHlwZTpsLmJpbmRUeXBlKXx8%0AbyxtPWlbb118fFtdLGg9aFsyXSYmbmV3IFJlZ0V4cCgiKF58XFwuKSIrcC5qb2lu%0AKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKSxnPWY9bS5sZW5ndGg7d2hpbGUo%0AZi0tKWs9bVtmXSwhZSYmcSE9PWsub3JpZ1R5cGV8fGMmJmMuZ3VpZCE9PWsuZ3Vp%0AZHx8aCYmIWgudGVzdChrLm5hbWVzcGFjZSl8fGQmJmQhPT1rLnNlbGVjdG9yJiYo%0AIioqIiE9PWR8fCFrLnNlbGVjdG9yKXx8KG0uc3BsaWNlKGYsMSksay5zZWxlY3Rv%0AciYmbS5kZWxlZ2F0ZUNvdW50LS0sbC5yZW1vdmUmJmwucmVtb3ZlLmNhbGwoYSxr%0AKSk7ZyYmIW0ubGVuZ3RoJiYobC50ZWFyZG93biYmbC50ZWFyZG93bi5jYWxsKGEs%0AcCxyLmhhbmRsZSkhPT0hMXx8bi5yZW1vdmVFdmVudChhLG8sci5oYW5kbGUpLGRl%0AbGV0ZSBpW29dKX1lbHNlIGZvcihvIGluIGkpbi5ldmVudC5yZW1vdmUoYSxvK2Jb%0Aal0sYyxkLCEwKTtuLmlzRW1wdHlPYmplY3QoaSkmJihkZWxldGUgci5oYW5kbGUs%0ATC5yZW1vdmUoYSwiZXZlbnRzIikpfX0sdHJpZ2dlcjpmdW5jdGlvbihiLGMsZCxl%0AKXt2YXIgZixnLGgsaSxrLG0sbyxwPVtkfHxsXSxxPWouY2FsbChiLCJ0eXBlIik/%0AYi50eXBlOmIscj1qLmNhbGwoYiwibmFtZXNwYWNlIik/Yi5uYW1lc3BhY2Uuc3Bs%0AaXQoIi4iKTpbXTtpZihnPWg9ZD1kfHxsLDMhPT1kLm5vZGVUeXBlJiY4IT09ZC5u%0Ab2RlVHlwZSYmIVgudGVzdChxK24uZXZlbnQudHJpZ2dlcmVkKSYmKHEuaW5kZXhP%0AZigiLiIpPj0wJiYocj1xLnNwbGl0KCIuIikscT1yLnNoaWZ0KCksci5zb3J0KCkp%0ALGs9cS5pbmRleE9mKCI6Iik8MCYmIm9uIitxLGI9YltuLmV4cGFuZG9dP2I6bmV3%0AIG4uRXZlbnQocSwib2JqZWN0Ij09dHlwZW9mIGImJmIpLGIuaXNUcmlnZ2VyPWU/%0AMjozLGIubmFtZXNwYWNlPXIuam9pbigiLiIpLGIubmFtZXNwYWNlX3JlPWIubmFt%0AZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK3Iuam9pbigiXFwuKD86LipcXC58%0AKSIpKyIoXFwufCQpIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50YXJnZXR8fChi%0ALnRhcmdldD1kKSxjPW51bGw9PWM/W2JdOm4ubWFrZUFycmF5KGMsW2JdKSxvPW4u%0AZXZlbnQuc3BlY2lhbFtxXXx8e30sZXx8IW8udHJpZ2dlcnx8by50cmlnZ2VyLmFw%0AcGx5KGQsYykhPT0hMSkpe2lmKCFlJiYhby5ub0J1YmJsZSYmIW4uaXNXaW5kb3co%0AZCkpe2ZvcihpPW8uZGVsZWdhdGVUeXBlfHxxLFgudGVzdChpK3EpfHwoZz1nLnBh%0AcmVudE5vZGUpO2c7Zz1nLnBhcmVudE5vZGUpcC5wdXNoKGcpLGg9ZztoPT09KGQu%0Ab3duZXJEb2N1bWVudHx8bCkmJnAucHVzaChoLmRlZmF1bHRWaWV3fHxoLnBhcmVu%0AdFdpbmRvd3x8YSl9Zj0wO3doaWxlKChnPXBbZisrXSkmJiFiLmlzUHJvcGFnYXRp%0Ab25TdG9wcGVkKCkpYi50eXBlPWY+MT9pOm8uYmluZFR5cGV8fHEsbT0oTC5nZXQo%0AZywiZXZlbnRzIil8fHt9KVtiLnR5cGVdJiZMLmdldChnLCJoYW5kbGUiKSxtJiZt%0ALmFwcGx5KGcsYyksbT1rJiZnW2tdLG0mJm0uYXBwbHkmJm4uYWNjZXB0RGF0YShn%0AKSYmKGIucmVzdWx0PW0uYXBwbHkoZyxjKSxiLnJlc3VsdD09PSExJiZiLnByZXZl%0AbnREZWZhdWx0KCkpO3JldHVybiBiLnR5cGU9cSxlfHxiLmlzRGVmYXVsdFByZXZl%0AbnRlZCgpfHxvLl9kZWZhdWx0JiZvLl9kZWZhdWx0LmFwcGx5KHAucG9wKCksYykh%0APT0hMXx8IW4uYWNjZXB0RGF0YShkKXx8ayYmbi5pc0Z1bmN0aW9uKGRbcV0pJiYh%0Abi5pc1dpbmRvdyhkKSYmKGg9ZFtrXSxoJiYoZFtrXT1udWxsKSxuLmV2ZW50LnRy%0AaWdnZXJlZD1xLGRbcV0oKSxuLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsaCYmKGRb%0Aa109aCkpLGIucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YT1uLmV2ZW50%0ALmZpeChhKTt2YXIgYixjLGUsZixnLGg9W10saT1kLmNhbGwoYXJndW1lbnRzKSxq%0APShMLmdldCh0aGlzLCJldmVudHMiKXx8e30pW2EudHlwZV18fFtdLGs9bi5ldmVu%0AdC5zcGVjaWFsW2EudHlwZV18fHt9O2lmKGlbMF09YSxhLmRlbGVnYXRlVGFyZ2V0%0APXRoaXMsIWsucHJlRGlzcGF0Y2h8fGsucHJlRGlzcGF0Y2guY2FsbCh0aGlzLGEp%0AIT09ITEpe2g9bi5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsYSxqKSxiPTA7d2hp%0AbGUoKGY9aFtiKytdKSYmIWEuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7YS5jdXJy%0AZW50VGFyZ2V0PWYuZWxlbSxjPTA7d2hpbGUoKGc9Zi5oYW5kbGVyc1tjKytdKSYm%0AIWEuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkoIWEubmFtZXNwYWNl%0AX3JlfHxhLm5hbWVzcGFjZV9yZS50ZXN0KGcubmFtZXNwYWNlKSkmJihhLmhhbmRs%0AZU9iaj1nLGEuZGF0YT1nLmRhdGEsZT0oKG4uZXZlbnQuc3BlY2lhbFtnLm9yaWdU%0AeXBlXXx8e30pLmhhbmRsZXx8Zy5oYW5kbGVyKS5hcHBseShmLmVsZW0saSksdm9p%0AZCAwIT09ZSYmKGEucmVzdWx0PWUpPT09ITEmJihhLnByZXZlbnREZWZhdWx0KCks%0AYS5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBrLnBvc3REaXNwYXRjaCYmay5w%0Ab3N0RGlzcGF0Y2guY2FsbCh0aGlzLGEpLGEucmVzdWx0fX0saGFuZGxlcnM6ZnVu%0AY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnPVtdLGg9Yi5kZWxlZ2F0ZUNvdW50LGk9%0AYS50YXJnZXQ7aWYoaCYmaS5ub2RlVHlwZSYmKCFhLmJ1dHRvbnx8ImNsaWNrIiE9%0APWEudHlwZSkpZm9yKDtpIT09dGhpcztpPWkucGFyZW50Tm9kZXx8dGhpcylpZihp%0ALmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1hLnR5cGUpe2ZvcihkPVtdLGM9MDto%0APmM7YysrKWY9YltjXSxlPWYuc2VsZWN0b3IrIiAiLHZvaWQgMD09PWRbZV0mJihk%0AW2VdPWYubmVlZHNDb250ZXh0P24oZSx0aGlzKS5pbmRleChpKT49MDpuLmZpbmQo%0AZSx0aGlzLG51bGwsW2ldKS5sZW5ndGgpLGRbZV0mJmQucHVzaChmKTtkLmxlbmd0%0AaCYmZy5wdXNoKHtlbGVtOmksaGFuZGxlcnM6ZH0pfXJldHVybiBoPGIubGVuZ3Ro%0AJiZnLnB1c2goe2VsZW06dGhpcyxoYW5kbGVyczpiLnNsaWNlKGgpfSksZ30scHJv%0AcHM6ImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFy%0AZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRh%0AcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7%0AfSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNw%0AbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PWEud2hp%0AY2gmJihhLndoaWNoPW51bGwhPWIuY2hhckNvZGU/Yi5jaGFyQ29kZTpiLmtleUNv%0AZGUpLGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50%0AWCBjbGllbnRZIG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNj%0AcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGIp%0Ae3ZhciBjLGQsZSxmPWIuYnV0dG9uO3JldHVybiBudWxsPT1hLnBhZ2VYJiZudWxs%0AIT1iLmNsaWVudFgmJihjPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGwsZD1jLmRv%0AY3VtZW50RWxlbWVudCxlPWMuYm9keSxhLnBhZ2VYPWIuY2xpZW50WCsoZCYmZC5z%0AY3JvbGxMZWZ0fHxlJiZlLnNjcm9sbExlZnR8fDApLShkJiZkLmNsaWVudExlZnR8%0AfGUmJmUuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1iLmNsaWVudFkrKGQmJmQuc2Ny%0Ab2xsVG9wfHxlJiZlLnNjcm9sbFRvcHx8MCktKGQmJmQuY2xpZW50VG9wfHxlJiZl%0ALmNsaWVudFRvcHx8MCkpLGEud2hpY2h8fHZvaWQgMD09PWZ8fChhLndoaWNoPTEm%0AZj8xOjImZj8zOjQmZj8yOjApLGF9fSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtuLmV4%0AcGFuZG9dKXJldHVybiBhO3ZhciBiLGMsZCxlPWEudHlwZSxmPWEsZz10aGlzLmZp%0AeEhvb2tzW2VdO2d8fCh0aGlzLmZpeEhvb2tzW2VdPWc9Vy50ZXN0KGUpP3RoaXMu%0AbW91c2VIb29rczpWLnRlc3QoZSk/dGhpcy5rZXlIb29rczp7fSksZD1nLnByb3Bz%0AP3RoaXMucHJvcHMuY29uY2F0KGcucHJvcHMpOnRoaXMucHJvcHMsYT1uZXcgbi5F%0AdmVudChmKSxiPWQubGVuZ3RoO3doaWxlKGItLSljPWRbYl0sYVtjXT1mW2NdO3Jl%0AdHVybiBhLnRhcmdldHx8KGEudGFyZ2V0PWwpLDM9PT1hLnRhcmdldC5ub2RlVHlw%0AZSYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGcuZmlsdGVyP2cuZmls%0AdGVyKGEsZik6YX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0%0AcmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMhPT1fKCkmJnRoaXMuZm9jdXM/%0AKHRoaXMuZm9jdXMoKSwhMSk6dm9pZCAwfSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4i%0AfSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1fKCkmJnRo%0AaXMuYmx1cj8odGhpcy5ibHVyKCksITEpOnZvaWQgMH0sZGVsZWdhdGVUeXBlOiJm%0Ab2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuImNoZWNr%0AYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmbi5ub2RlTmFtZSh0aGlzLCJp%0AbnB1dCIpPyh0aGlzLmNsaWNrKCksITEpOnZvaWQgMH0sX2RlZmF1bHQ6ZnVuY3Rp%0Ab24oYSl7cmV0dXJuIG4ubm9kZU5hbWUoYS50YXJnZXQsImEiKX19LGJlZm9yZXVu%0AbG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGEpe3ZvaWQgMCE9PWEucmVzdWx0%0AJiZhLm9yaWdpbmFsRXZlbnQmJihhLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9%0AYS5yZXN1bHQpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW4u%0AZXh0ZW5kKG5ldyBuLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMCxvcmln%0AaW5hbEV2ZW50Ont9fSk7ZD9uLmV2ZW50LnRyaWdnZXIoZSxudWxsLGIpOm4uZXZl%0AbnQuZGlzcGF0Y2guY2FsbChiLGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkmJmMu%0AcHJldmVudERlZmF1bHQoKX19LG4ucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oYSxiLGMp%0Ae2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIs%0AYywhMSl9LG4uRXZlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcyBpbnN0YW5j%0AZW9mIG4uRXZlbnQ/KGEmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhp%0Acy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQ%0AcmV2ZW50ZWR8fHZvaWQgMD09PWEuZGVmYXVsdFByZXZlbnRlZCYmYS5yZXR1cm5W%0AYWx1ZT09PSExP1o6JCk6dGhpcy50eXBlPWEsYiYmbi5leHRlbmQodGhpcyxiKSx0%0AaGlzLnRpbWVTdGFtcD1hJiZhLnRpbWVTdGFtcHx8bi5ub3coKSx2b2lkKHRoaXNb%0Abi5leHBhbmRvXT0hMCkpOm5ldyBuLkV2ZW50KGEsYil9LG4uRXZlbnQucHJvdG90%0AeXBlPXtpc0RlZmF1bHRQcmV2ZW50ZWQ6JCxpc1Byb3BhZ2F0aW9uU3RvcHBlZDok%0ALGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiQscHJldmVudERlZmF1bHQ6%0AZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1%0AbHRQcmV2ZW50ZWQ9WixhJiZhLnByZXZlbnREZWZhdWx0JiZhLnByZXZlbnREZWZh%0AdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3Jp%0AZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPVosYSYmYS5zdG9w%0AUHJvcGFnYXRpb24mJmEuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQ%0Acm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0%0AaGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPVosYSYmYS5zdG9wSW1t%0AZWRpYXRlUHJvcGFnYXRpb24mJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCks%0AdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LG4uZWFjaCh7bW91c2VlbnRlcjoibW91%0Ac2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2lu%0AdGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oYSxi%0AKXtuLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIs%0AaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdl%0AdCxmPWEuaGFuZGxlT2JqO3JldHVybighZXx8ZSE9PWQmJiFuLmNvbnRhaW5zKGQs%0AZSkpJiYoYS50eXBlPWYub3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxh%0Acmd1bWVudHMpLGEudHlwZT1iKSxjfX19KSxrLmZvY3VzaW5CdWJibGVzfHxuLmVh%0AY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEs%0AYil7dmFyIGM9ZnVuY3Rpb24oYSl7bi5ldmVudC5zaW11bGF0ZShiLGEudGFyZ2V0%0ALG4uZXZlbnQuZml4KGEpLCEwKX07bi5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpm%0AdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPUwuYWNj%0AZXNzKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCksTC5hY2Nlc3Mo%0AZCxiLChlfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93%0AbmVyRG9jdW1lbnR8fHRoaXMsZT1MLmFjY2VzcyhkLGIpLTE7ZT9MLmFjY2Vzcyhk%0ALGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLEwucmVtb3ZlKGQs%0AYikpfX19KSxuLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIg%0AZixnO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7InN0cmluZyIhPXR5cGVvZiBiJiYo%0AYz1jfHxiLGI9dm9pZCAwKTtmb3IoZyBpbiBhKXRoaXMub24oZyxiLGMsYVtnXSxl%0AKTtyZXR1cm4gdGhpc31pZihudWxsPT1jJiZudWxsPT1kPyhkPWIsYz1iPXZvaWQg%0AMCk6bnVsbD09ZCYmKCJzdHJpbmciPT10eXBlb2YgYj8oZD1jLGM9dm9pZCAwKToo%0AZD1jLGM9YixiPXZvaWQgMCkpLGQ9PT0hMSlkPSQ7ZWxzZSBpZighZClyZXR1cm4g%0AdGhpcztyZXR1cm4gMT09PWUmJihmPWQsZD1mdW5jdGlvbihhKXtyZXR1cm4gbigp%0ALm9mZihhKSxmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5ndWlkPWYuZ3VpZHx8%0AKGYuZ3VpZD1uLmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe24uZXZlbnQu%0AYWRkKHRoaXMsYSxkLGMsYil9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVy%0AbiB0aGlzLm9uKGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQs%0AZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1h%0ALmhhbmRsZU9iaixuKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9k%0ALm9yaWdUeXBlKyIuIitkLm5hbWVzcGFjZTpkLm9yaWdUeXBlLGQuc2VsZWN0b3Is%0AZC5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7Zm9yKGUgaW4g%0AYSl0aGlzLm9mZihlLGIsYVtlXSk7cmV0dXJuIHRoaXN9cmV0dXJuKGI9PT0hMXx8%0AImZ1bmN0aW9uIj09dHlwZW9mIGIpJiYoYz1iLGI9dm9pZCAwKSxjPT09ITEmJihj%0APSQpLHRoaXMuZWFjaChmdW5jdGlvbigpe24uZXZlbnQucmVtb3ZlKHRoaXMsYSxj%0ALGIpfSl9LHRyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1%0AbmN0aW9uKCl7bi5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFu%0AZGxlcjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXNbMF07cmV0dXJuIGM/bi5ldmVu%0AdC50cmlnZ2VyKGEsYixjLCEwKTp2b2lkIDB9fSk7dmFyIGFiPS88KD8hYXJlYXxi%0Acnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpd%0AKylbXj5dKilcLz4vZ2ksYmI9LzwoW1x3Ol0rKS8sY2I9Lzx8JiM/XHcrOy8sZGI9%0ALzwoPzpzY3JpcHR8c3R5bGV8bGluaykvaSxlYj0vY2hlY2tlZFxzKig/OltePV18%0APVxzKi5jaGVja2VkLikvaSxmYj0vXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ks%0AZ2I9L150cnVlXC8oLiopLyxoYj0vXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpc%0AXVxdfC0tKT5ccyokL2csaWI9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0n%0AbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90%0AYWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48%0AL3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJs%0AZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5Pjwv%0AdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtpYi5vcHRncm91cD1pYi5vcHRp%0Ab24saWIudGJvZHk9aWIudGZvb3Q9aWIuY29sZ3JvdXA9aWIuY2FwdGlvbj1pYi50%0AaGVhZCxpYi50aD1pYi50ZDtmdW5jdGlvbiBqYihhLGIpe3JldHVybiBuLm5vZGVO%0AYW1lKGEsInRhYmxlIikmJm4ubm9kZU5hbWUoMTEhPT1iLm5vZGVUeXBlP2I6Yi5m%0AaXJzdENoaWxkLCJ0ciIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5Iilb%0AMF18fGEuYXBwZW5kQ2hpbGQoYS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo%0AInRib2R5IikpOmF9ZnVuY3Rpb24ga2IoYSl7cmV0dXJuIGEudHlwZT0obnVsbCE9%0APWEuZ2V0QXR0cmlidXRlKCJ0eXBlIikpKyIvIithLnR5cGUsYX1mdW5jdGlvbiBs%0AYihhKXt2YXIgYj1nYi5leGVjKGEudHlwZSk7cmV0dXJuIGI/YS50eXBlPWJbMV06%0AYS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxhfWZ1bmN0aW9uIG1iKGEsYil7Zm9y%0AKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKUwuc2V0KGFbY10sImdsb2JhbEV2%0AYWwiLCFifHxMLmdldChiW2NdLCJnbG9iYWxFdmFsIikpfWZ1bmN0aW9uIG5iKGEs%0AYil7dmFyIGMsZCxlLGYsZyxoLGksajtpZigxPT09Yi5ub2RlVHlwZSl7aWYoTC5o%0AYXNEYXRhKGEpJiYoZj1MLmFjY2VzcyhhKSxnPUwuc2V0KGIsZiksaj1mLmV2ZW50%0Acykpe2RlbGV0ZSBnLmhhbmRsZSxnLmV2ZW50cz17fTtmb3IoZSBpbiBqKWZvcihj%0APTAsZD1qW2VdLmxlbmd0aDtkPmM7YysrKW4uZXZlbnQuYWRkKGIsZSxqW2VdW2Nd%0AKX1NLmhhc0RhdGEoYSkmJihoPU0uYWNjZXNzKGEpLGk9bi5leHRlbmQoe30saCks%0ATS5zZXQoYixpKSl9fWZ1bmN0aW9uIG9iKGEsYil7dmFyIGM9YS5nZXRFbGVtZW50%0Ac0J5VGFnTmFtZT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKGJ8fCIqIik6YS5xdWVy%0AeVNlbGVjdG9yQWxsP2EucXVlcnlTZWxlY3RvckFsbChifHwiKiIpOltdO3JldHVy%0AbiB2b2lkIDA9PT1ifHxiJiZuLm5vZGVOYW1lKGEsYik/bi5tZXJnZShbYV0sYyk6%0AY31mdW5jdGlvbiBwYihhLGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2Uo%0AKTsiaW5wdXQiPT09YyYmVC50ZXN0KGEudHlwZSk/Yi5jaGVja2VkPWEuY2hlY2tl%0AZDooImlucHV0Ij09PWN8fCJ0ZXh0YXJlYSI9PT1jKSYmKGIuZGVmYXVsdFZhbHVl%0APWEuZGVmYXVsdFZhbHVlKX1uLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMp%0Ae3ZhciBkLGUsZixnLGg9YS5jbG9uZU5vZGUoITApLGk9bi5jb250YWlucyhhLm93%0AbmVyRG9jdW1lbnQsYSk7aWYoIShrLm5vQ2xvbmVDaGVja2VkfHwxIT09YS5ub2Rl%0AVHlwZSYmMTEhPT1hLm5vZGVUeXBlfHxuLmlzWE1MRG9jKGEpKSlmb3IoZz1vYiho%0AKSxmPW9iKGEpLGQ9MCxlPWYubGVuZ3RoO2U+ZDtkKyspcGIoZltkXSxnW2RdKTtp%0AZihiKWlmKGMpZm9yKGY9Znx8b2IoYSksZz1nfHxvYihoKSxkPTAsZT1mLmxlbmd0%0AaDtlPmQ7ZCsrKW5iKGZbZF0sZ1tkXSk7ZWxzZSBuYihhLGgpO3JldHVybiBnPW9i%0AKGgsInNjcmlwdCIpLGcubGVuZ3RoPjAmJm1iKGcsIWkmJm9iKGEsInNjcmlwdCIp%0AKSxofSxidWlsZEZyYWdtZW50OmZ1bmN0aW9uKGEsYixjLGQpe2Zvcih2YXIgZSxm%0ALGcsaCxpLGosaz1iLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxsPVtdLG09MCxv%0APWEubGVuZ3RoO28+bTttKyspaWYoZT1hW21dLGV8fDA9PT1lKWlmKCJvYmplY3Qi%0APT09bi50eXBlKGUpKW4ubWVyZ2UobCxlLm5vZGVUeXBlP1tlXTplKTtlbHNlIGlm%0AKGNiLnRlc3QoZSkpe2Y9Znx8ay5hcHBlbmRDaGlsZChiLmNyZWF0ZUVsZW1lbnQo%0AImRpdiIpKSxnPShiYi5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgp%0ALGg9aWJbZ118fGliLl9kZWZhdWx0LGYuaW5uZXJIVE1MPWhbMV0rZS5yZXBsYWNl%0AKGFiLCI8JDE+PC8kMj4iKStoWzJdLGo9aFswXTt3aGlsZShqLS0pZj1mLmxhc3RD%0AaGlsZDtuLm1lcmdlKGwsZi5jaGlsZE5vZGVzKSxmPWsuZmlyc3RDaGlsZCxmLnRl%0AeHRDb250ZW50PSIifWVsc2UgbC5wdXNoKGIuY3JlYXRlVGV4dE5vZGUoZSkpO2su%0AdGV4dENvbnRlbnQ9IiIsbT0wO3doaWxlKGU9bFttKytdKWlmKCghZHx8LTE9PT1u%0ALmluQXJyYXkoZSxkKSkmJihpPW4uY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUp%0ALGY9b2Ioay5hcHBlbmRDaGlsZChlKSwic2NyaXB0IiksaSYmbWIoZiksYykpe2o9%0AMDt3aGlsZShlPWZbaisrXSlmYi50ZXN0KGUudHlwZXx8IiIpJiZjLnB1c2goZSl9%0AcmV0dXJuIGt9LGNsZWFuRGF0YTpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGUs%0AZj1uLmV2ZW50LnNwZWNpYWwsZz0wO3ZvaWQgMCE9PShjPWFbZ10pO2crKyl7aWYo%0Abi5hY2NlcHREYXRhKGMpJiYoZT1jW0wuZXhwYW5kb10sZSYmKGI9TC5jYWNoZVtl%0AXSkpKXtpZihiLmV2ZW50cylmb3IoZCBpbiBiLmV2ZW50cylmW2RdP24uZXZlbnQu%0AcmVtb3ZlKGMsZCk6bi5yZW1vdmVFdmVudChjLGQsYi5oYW5kbGUpO0wuY2FjaGVb%0AZV0mJmRlbGV0ZSBMLmNhY2hlW2VdfWRlbGV0ZSBNLmNhY2hlW2NbTS5leHBhbmRv%0AXV19fX0pLG4uZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBKKHRo%0AaXMsZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/bi50ZXh0KHRoaXMpOnRo%0AaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7KDE9PT10aGlzLm5vZGVUeXBlfHwx%0AMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKSYmKHRoaXMudGV4%0AdENvbnRlbnQ9YSl9KX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6%0AZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rp%0Ab24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8%0AOT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPWpiKHRoaXMsYSk7Yi5hcHBlbmRDaGls%0AZChhKX19KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlw%0AKGFyZ3VtZW50cyxmdW5jdGlvbihhKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9%0APT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIGI9amIodGhp%0AcyxhKTtiLmluc2VydEJlZm9yZShhLGIuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpm%0AdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlv%0AbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZv%0AcmUoYSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1h%0AbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMu%0AcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzLm5leHRTaWJsaW5nKX0pfSxy%0AZW1vdmU6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD1hP24uZmlsdGVyKGEsdGhp%0Acyk6dGhpcyxlPTA7bnVsbCE9KGM9ZFtlXSk7ZSsrKWJ8fDEhPT1jLm5vZGVUeXBl%0AfHxuLmNsZWFuRGF0YShvYihjKSksYy5wYXJlbnROb2RlJiYoYiYmbi5jb250YWlu%0AcyhjLm93bmVyRG9jdW1lbnQsYykmJm1iKG9iKGMsInNjcmlwdCIpKSxjLnBhcmVu%0AdE5vZGUucmVtb3ZlQ2hpbGQoYykpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlv%0Abigpe2Zvcih2YXIgYSxiPTA7bnVsbCE9KGE9dGhpc1tiXSk7YisrKTE9PT1hLm5v%0AZGVUeXBlJiYobi5jbGVhbkRhdGEob2IoYSwhMSkpLGEudGV4dENvbnRlbnQ9IiIp%0AO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihhLGIpe3JldHVybiBhPW51bGw9%0APWE/ITE6YSxiPW51bGw9PWI/YTpiLHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJu%0AIG4uY2xvbmUodGhpcyxhLGIpfSl9LGh0bWw6ZnVuY3Rpb24oYSl7cmV0dXJuIEoo%0AdGhpcyxmdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdfHx7fSxjPTAsZD10aGlzLmxl%0Abmd0aDtpZih2b2lkIDA9PT1hJiYxPT09Yi5ub2RlVHlwZSlyZXR1cm4gYi5pbm5l%0AckhUTUw7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYhZGIudGVzdChhKSYmIWliWyhi%0AYi5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1hLnJlcGxh%0AY2UoYWIsIjwkMT48LyQyPiIpO3RyeXtmb3IoO2Q+YztjKyspYj10aGlzW2NdfHx7%0AfSwxPT09Yi5ub2RlVHlwZSYmKG4uY2xlYW5EYXRhKG9iKGIsITEpKSxiLmlubmVy%0ASFRNTD1hKTtiPTB9Y2F0Y2goZSl7fX1iJiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGEp%0AfSxudWxsLGEsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9u%0AKCl7dmFyIGE9YXJndW1lbnRzWzBdO3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3Vt%0AZW50cyxmdW5jdGlvbihiKXthPXRoaXMucGFyZW50Tm9kZSxuLmNsZWFuRGF0YShv%0AYih0aGlzKSksYSYmYS5yZXBsYWNlQ2hpbGQoYix0aGlzKX0pLGEmJihhLmxlbmd0%0AaHx8YS5ub2RlVHlwZSk/dGhpczp0aGlzLnJlbW92ZSgpfSxkZXRhY2g6ZnVuY3Rp%0Ab24oYSl7cmV0dXJuIHRoaXMucmVtb3ZlKGEsITApfSxkb21NYW5pcDpmdW5jdGlv%0AbihhLGIpe2E9ZS5hcHBseShbXSxhKTt2YXIgYyxkLGYsZyxoLGksaj0wLGw9dGhp%0Acy5sZW5ndGgsbT10aGlzLG89bC0xLHA9YVswXSxxPW4uaXNGdW5jdGlvbihwKTtp%0AZihxfHxsPjEmJiJzdHJpbmciPT10eXBlb2YgcCYmIWsuY2hlY2tDbG9uZSYmZWIu%0AdGVzdChwKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe3ZhciBkPW0uZXEo%0AYyk7cSYmKGFbMF09cC5jYWxsKHRoaXMsYyxkLmh0bWwoKSkpLGQuZG9tTWFuaXAo%0AYSxiKX0pO2lmKGwmJihjPW4uYnVpbGRGcmFnbWVudChhLHRoaXNbMF0ub3duZXJE%0Ab2N1bWVudCwhMSx0aGlzKSxkPWMuZmlyc3RDaGlsZCwxPT09Yy5jaGlsZE5vZGVz%0ALmxlbmd0aCYmKGM9ZCksZCkpe2ZvcihmPW4ubWFwKG9iKGMsInNjcmlwdCIpLGti%0AKSxnPWYubGVuZ3RoO2w+ajtqKyspaD1jLGohPT1vJiYoaD1uLmNsb25lKGgsITAs%0AITApLGcmJm4ubWVyZ2UoZixvYihoLCJzY3JpcHQiKSkpLGIuY2FsbCh0aGlzW2pd%0ALGgsaik7aWYoZylmb3IoaT1mW2YubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsbi5t%0AYXAoZixsYiksaj0wO2c+ajtqKyspaD1mW2pdLGZiLnRlc3QoaC50eXBlfHwiIikm%0AJiFMLmFjY2VzcyhoLCJnbG9iYWxFdmFsIikmJm4uY29udGFpbnMoaSxoKSYmKGgu%0Ac3JjP24uX2V2YWxVcmwmJm4uX2V2YWxVcmwoaC5zcmMpOm4uZ2xvYmFsRXZhbCho%0ALnRleHRDb250ZW50LnJlcGxhY2UoaGIsIiIpKSl9cmV0dXJuIHRoaXN9fSksbi5l%0AYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2Vy%0AdEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6%0AInJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXtuLmZuW2FdPWZ1bmN0aW9uKGEp%0Ae2Zvcih2YXIgYyxkPVtdLGU9bihhKSxnPWUubGVuZ3RoLTEsaD0wO2c+PWg7aCsr%0AKWM9aD09PWc/dGhpczp0aGlzLmNsb25lKCEwKSxuKGVbaF0pW2JdKGMpLGYuYXBw%0AbHkoZCxjLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZCl9fSk7dmFyIHFi%0ALHJiPXt9O2Z1bmN0aW9uIHNiKGIsYyl7dmFyIGQsZT1uKGMuY3JlYXRlRWxlbWVu%0AdChiKSkuYXBwZW5kVG8oYy5ib2R5KSxmPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5%0AbGUmJihkPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUoZVswXSkpP2QuZGlzcGxh%0AeTpuLmNzcyhlWzBdLCJkaXNwbGF5Iik7cmV0dXJuIGUuZGV0YWNoKCksZn1mdW5j%0AdGlvbiB0YihhKXt2YXIgYj1sLGM9cmJbYV07cmV0dXJuIGN8fChjPXNiKGEsYiks%0AIm5vbmUiIT09YyYmY3x8KHFiPShxYnx8bigiPGlmcmFtZSBmcmFtZWJvcmRlcj0n%0AMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpKS5hcHBlbmRUbyhiLmRvY3VtZW50%0ARWxlbWVudCksYj1xYlswXS5jb250ZW50RG9jdW1lbnQsYi53cml0ZSgpLGIuY2xv%0Ac2UoKSxjPXNiKGEsYikscWIuZGV0YWNoKCkpLHJiW2FdPWMpLGN9dmFyIHViPS9e%0AbWFyZ2luLyx2Yj1uZXcgUmVnRXhwKCJeKCIrUSsiKSg/IXB4KVthLXolXSskIiwi%0AaSIpLHdiPWZ1bmN0aW9uKGEpe3JldHVybiBhLm93bmVyRG9jdW1lbnQuZGVmYXVs%0AdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpfTtmdW5jdGlvbiB4YihhLGIs%0AYyl7dmFyIGQsZSxmLGcsaD1hLnN0eWxlO3JldHVybiBjPWN8fHdiKGEpLGMmJihn%0APWMuZ2V0UHJvcGVydHlWYWx1ZShiKXx8Y1tiXSksYyYmKCIiIT09Z3x8bi5jb250%0AYWlucyhhLm93bmVyRG9jdW1lbnQsYSl8fChnPW4uc3R5bGUoYSxiKSksdmIudGVz%0AdChnKSYmdWIudGVzdChiKSYmKGQ9aC53aWR0aCxlPWgubWluV2lkdGgsZj1oLm1h%0AeFdpZHRoLGgubWluV2lkdGg9aC5tYXhXaWR0aD1oLndpZHRoPWcsZz1jLndpZHRo%0ALGgud2lkdGg9ZCxoLm1pbldpZHRoPWUsaC5tYXhXaWR0aD1mKSksdm9pZCAwIT09%0AZz9nKyIiOmd9ZnVuY3Rpb24geWIoYSxiKXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7%0AcmV0dXJuIGEoKT92b2lkIGRlbGV0ZSB0aGlzLmdldDoodGhpcy5nZXQ9YikuYXBw%0AbHkodGhpcyxhcmd1bWVudHMpfX19IWZ1bmN0aW9uKCl7dmFyIGIsYyxkPWwuZG9j%0AdW1lbnRFbGVtZW50LGU9bC5jcmVhdGVFbGVtZW50KCJkaXYiKSxmPWwuY3JlYXRl%0ARWxlbWVudCgiZGl2Iik7aWYoZi5zdHlsZSl7Zi5zdHlsZS5iYWNrZ3JvdW5kQ2xp%0AcD0iY29udGVudC1ib3giLGYuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5k%0AQ2xpcD0iIixrLmNsZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09Zi5zdHls%0AZS5iYWNrZ3JvdW5kQ2xpcCxlLnN0eWxlLmNzc1RleHQ9ImJvcmRlcjowO3dpZHRo%0AOjA7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4O3Bv%0Ac2l0aW9uOmFic29sdXRlIixlLmFwcGVuZENoaWxkKGYpO2Z1bmN0aW9uIGcoKXtm%0ALnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1t%0Ab3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtk%0AaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MSU7dG9wOjElO2JvcmRlcjoxcHg7cGFk%0AZGluZzoxcHg7d2lkdGg6NHB4O3Bvc2l0aW9uOmFic29sdXRlIixmLmlubmVySFRN%0ATD0iIixkLmFwcGVuZENoaWxkKGUpO3ZhciBnPWEuZ2V0Q29tcHV0ZWRTdHlsZShm%0ALG51bGwpO2I9IjElIiE9PWcudG9wLGM9IjRweCI9PT1nLndpZHRoLGQucmVtb3Zl%0AQ2hpbGQoZSl9YS5nZXRDb21wdXRlZFN0eWxlJiZuLmV4dGVuZChrLHtwaXhlbFBv%0Ac2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGcoKSxifSxib3hTaXppbmdSZWxpYWJs%0AZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT1jJiZnKCksY30scmVsaWFibGVNYXJn%0AaW5SaWdodDpmdW5jdGlvbigpe3ZhciBiLGM9Zi5hcHBlbmRDaGlsZChsLmNyZWF0%0AZUVsZW1lbnQoImRpdiIpKTtyZXR1cm4gYy5zdHlsZS5jc3NUZXh0PWYuc3R5bGUu%0AY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94%0ALXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3Bs%0AYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowIixjLnN0eWxlLm1h%0AcmdpblJpZ2h0PWMuc3R5bGUud2lkdGg9IjAiLGYuc3R5bGUud2lkdGg9IjFweCIs%0AZC5hcHBlbmRDaGlsZChlKSxiPSFwYXJzZUZsb2F0KGEuZ2V0Q29tcHV0ZWRTdHls%0AZShjLG51bGwpLm1hcmdpblJpZ2h0KSxkLnJlbW92ZUNoaWxkKGUpLGJ9fSl9fSgp%0ALG4uc3dhcD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGc9e307Zm9yKGYgaW4g%0AYilnW2ZdPWEuc3R5bGVbZl0sYS5zdHlsZVtmXT1iW2ZdO2U9Yy5hcHBseShhLGR8%0AfFtdKTtmb3IoZiBpbiBiKWEuc3R5bGVbZl09Z1tmXTtyZXR1cm4gZX07dmFyIHpi%0APS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxBYj1uZXcgUmVnRXhwKCJeKCIr%0AUSsiKSguKikkIiwiaSIpLEJiPW5ldyBSZWdFeHAoIl4oWystXSk9KCIrUSsiKSIs%0AImkiKSxDYj17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4i%0ALGRpc3BsYXk6ImJsb2NrIn0sRGI9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWln%0AaHQ6IjQwMCJ9LEViPVsiV2Via2l0IiwiTyIsIk1veiIsIm1zIl07ZnVuY3Rpb24g%0ARmIoYSxiKXtpZihiIGluIGEpcmV0dXJuIGI7dmFyIGM9YlswXS50b1VwcGVyQ2Fz%0AZSgpK2Iuc2xpY2UoMSksZD1iLGU9RWIubGVuZ3RoO3doaWxlKGUtLSlpZihiPUVi%0AW2VdK2MsYiBpbiBhKXJldHVybiBiO3JldHVybiBkfWZ1bmN0aW9uIEdiKGEsYixj%0AKXt2YXIgZD1BYi5leGVjKGIpO3JldHVybiBkP01hdGgubWF4KDAsZFsxXS0oY3x8%0AMCkpKyhkWzJdfHwicHgiKTpifWZ1bmN0aW9uIEhiKGEsYixjLGQsZSl7Zm9yKHZh%0AciBmPWM9PT0oZD8iYm9yZGVyIjoiY29udGVudCIpPzQ6IndpZHRoIj09PWI/MTow%0ALGc9MDs0PmY7Zis9MikibWFyZ2luIj09PWMmJihnKz1uLmNzcyhhLGMrUltmXSwh%0AMCxlKSksZD8oImNvbnRlbnQiPT09YyYmKGctPW4uY3NzKGEsInBhZGRpbmciK1Jb%0AZl0sITAsZSkpLCJtYXJnaW4iIT09YyYmKGctPW4uY3NzKGEsImJvcmRlciIrUltm%0AXSsiV2lkdGgiLCEwLGUpKSk6KGcrPW4uY3NzKGEsInBhZGRpbmciK1JbZl0sITAs%0AZSksInBhZGRpbmciIT09YyYmKGcrPW4uY3NzKGEsImJvcmRlciIrUltmXSsiV2lk%0AdGgiLCEwLGUpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gSWIoYSxiLGMpe3ZhciBkPSEw%0ALGU9IndpZHRoIj09PWI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxmPXdi%0AKGEpLGc9ImJvcmRlci1ib3giPT09bi5jc3MoYSwiYm94U2l6aW5nIiwhMSxmKTtp%0AZigwPj1lfHxudWxsPT1lKXtpZihlPXhiKGEsYixmKSwoMD5lfHxudWxsPT1lKSYm%0AKGU9YS5zdHlsZVtiXSksdmIudGVzdChlKSlyZXR1cm4gZTtkPWcmJihrLmJveFNp%0AemluZ1JlbGlhYmxlKCl8fGU9PT1hLnN0eWxlW2JdKSxlPXBhcnNlRmxvYXQoZSl8%0AfDB9cmV0dXJuIGUrSGIoYSxiLGN8fChnPyJib3JkZXIiOiJjb250ZW50IiksZCxm%0AKSsicHgifWZ1bmN0aW9uIEpiKGEsYil7Zm9yKHZhciBjLGQsZSxmPVtdLGc9MCxo%0APWEubGVuZ3RoO2g+ZztnKyspZD1hW2ddLGQuc3R5bGUmJihmW2ddPUwuZ2V0KGQs%0AIm9sZGRpc3BsYXkiKSxjPWQuc3R5bGUuZGlzcGxheSxiPyhmW2ddfHwibm9uZSIh%0APT1jfHwoZC5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PWQuc3R5bGUuZGlzcGxheSYm%0AUyhkKSYmKGZbZ109TC5hY2Nlc3MoZCwib2xkZGlzcGxheSIsdGIoZC5ub2RlTmFt%0AZSkpKSk6KGU9UyhkKSwibm9uZSI9PT1jJiZlfHxMLnNldChkLCJvbGRkaXNwbGF5%0AIixlP2M6bi5jc3MoZCwiZGlzcGxheSIpKSkpO2ZvcihnPTA7aD5nO2crKylkPWFb%0AZ10sZC5zdHlsZSYmKGImJiJub25lIiE9PWQuc3R5bGUuZGlzcGxheSYmIiIhPT1k%0ALnN0eWxlLmRpc3BsYXl8fChkLnN0eWxlLmRpc3BsYXk9Yj9mW2ddfHwiIjoibm9u%0AZSIpKTtyZXR1cm4gYX1uLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpm%0AdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPXhiKGEsIm9wYWNpdHkiKTtyZXR1cm4i%0AIj09PWM/IjEiOmN9fX19LGNzc051bWJlcjp7Y29sdW1uQ291bnQ6ITAsZmlsbE9w%0AYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEw%0ALGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdp%0AZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6ImNz%0Ac0Zsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYSYmMyE9PWEubm9k%0AZVR5cGUmJjghPT1hLm5vZGVUeXBlJiZhLnN0eWxlKXt2YXIgZSxmLGcsaD1uLmNh%0AbWVsQ2FzZShiKSxpPWEuc3R5bGU7cmV0dXJuIGI9bi5jc3NQcm9wc1toXXx8KG4u%0AY3NzUHJvcHNbaF09RmIoaSxoKSksZz1uLmNzc0hvb2tzW2JdfHxuLmNzc0hvb2tz%0AW2hdLHZvaWQgMD09PWM/ZyYmImdldCJpbiBnJiZ2b2lkIDAhPT0oZT1nLmdldChh%0ALCExLGQpKT9lOmlbYl06KGY9dHlwZW9mIGMsInN0cmluZyI9PT1mJiYoZT1CYi5l%0AeGVjKGMpKSYmKGM9KGVbMV0rMSkqZVsyXStwYXJzZUZsb2F0KG4uY3NzKGEsYikp%0ALGY9Im51bWJlciIpLG51bGwhPWMmJmM9PT1jJiYoIm51bWJlciIhPT1mfHxuLmNz%0Ac051bWJlcltoXXx8KGMrPSJweCIpLGsuY2xlYXJDbG9uZVN0eWxlfHwiIiE9PWN8%0AfDAhPT1iLmluZGV4T2YoImJhY2tncm91bmQiKXx8KGlbYl09ImluaGVyaXQiKSxn%0AJiYic2V0ImluIGcmJnZvaWQgMD09PShjPWcuc2V0KGEsYyxkKSl8fChpW2JdPWMp%0AKSx2b2lkIDApfX0sY3NzOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoPW4u%0AY2FtZWxDYXNlKGIpO3JldHVybiBiPW4uY3NzUHJvcHNbaF18fChuLmNzc1Byb3Bz%0AW2hdPUZiKGEuc3R5bGUsaCkpLGc9bi5jc3NIb29rc1tiXXx8bi5jc3NIb29rc1to%0AXSxnJiYiZ2V0ImluIGcmJihlPWcuZ2V0KGEsITAsYykpLHZvaWQgMD09PWUmJihl%0APXhiKGEsYixkKSksIm5vcm1hbCI9PT1lJiZiIGluIERiJiYoZT1EYltiXSksIiI9%0APT1jfHxjPyhmPXBhcnNlRmxvYXQoZSksYz09PSEwfHxuLmlzTnVtZXJpYyhmKT9m%0AfHwwOmUpOmV9fSksbi5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihh%0ALGIpe24uY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGM/%0AemIudGVzdChuLmNzcyhhLCJkaXNwbGF5IikpJiYwPT09YS5vZmZzZXRXaWR0aD9u%0ALnN3YXAoYSxDYixmdW5jdGlvbigpe3JldHVybiBJYihhLGIsZCl9KTpJYihhLGIs%0AZCk6dm9pZCAwfSxzZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWQmJndiKGEpO3Jl%0AdHVybiBHYihhLGMsZD9IYihhLGIsZCwiYm9yZGVyLWJveCI9PT1uLmNzcyhhLCJi%0Ab3hTaXppbmciLCExLGUpLGUpOjApfX19KSxuLmNzc0hvb2tzLm1hcmdpblJpZ2h0%0APXliKGsucmVsaWFibGVNYXJnaW5SaWdodCxmdW5jdGlvbihhLGIpe3JldHVybiBi%0AP24uc3dhcChhLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSx4YixbYSwibWFyZ2lu%0AUmlnaHQiXSk6dm9pZCAwfSksbi5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixi%0Ab3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2ErYl09e2V4%0AcGFuZDpmdW5jdGlvbihjKXtmb3IodmFyIGQ9MCxlPXt9LGY9InN0cmluZyI9PXR5%0AcGVvZiBjP2Muc3BsaXQoIiAiKTpbY107ND5kO2QrKyllW2ErUltkXStiXT1mW2Rd%0AfHxmW2QtMl18fGZbMF07cmV0dXJuIGV9fSx1Yi50ZXN0KGEpfHwobi5jc3NIb29r%0Ac1thK2JdLnNldD1HYil9KSxuLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGEsYil7%0AcmV0dXJuIEoodGhpcyxmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXt9LGc9MDtp%0AZihuLmlzQXJyYXkoYikpe2ZvcihkPXdiKGEpLGU9Yi5sZW5ndGg7ZT5nO2crKylm%0AW2JbZ11dPW4uY3NzKGEsYltnXSwhMSxkKTtyZXR1cm4gZn1yZXR1cm4gdm9pZCAw%0AIT09Yz9uLnN0eWxlKGEsYixjKTpuLmNzcyhhLGIpfSxhLGIsYXJndW1lbnRzLmxl%0Abmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBKYih0aGlzLCEwKX0saGlk%0AZTpmdW5jdGlvbigpe3JldHVybiBKYih0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGEp%0Ae3JldHVybiJib29sZWFuIj09dHlwZW9mIGE/YT90aGlzLnNob3coKTp0aGlzLmhp%0AZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtTKHRoaXMpP24odGhpcykuc2hvdygp%0AOm4odGhpcykuaGlkZSgpfSl9fSk7ZnVuY3Rpb24gS2IoYSxiLGMsZCxlKXtyZXR1%0Acm4gbmV3IEtiLnByb3RvdHlwZS5pbml0KGEsYixjLGQsZSl9bi5Ud2Vlbj1LYixL%0AYi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOktiLGluaXQ6ZnVuY3Rpb24oYSxiLGMs%0AZCxlLGYpe3RoaXMuZWxlbT1hLHRoaXMucHJvcD1jLHRoaXMuZWFzaW5nPWV8fCJz%0Ad2luZyIsdGhpcy5vcHRpb25zPWIsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1%0AcigpLHRoaXMuZW5kPWQsdGhpcy51bml0PWZ8fChuLmNzc051bWJlcltjXT8iIjoi%0AcHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGE9S2IucHJvcEhvb2tzW3RoaXMucHJv%0AcF07cmV0dXJuIGEmJmEuZ2V0P2EuZ2V0KHRoaXMpOktiLnByb3BIb29rcy5fZGVm%0AYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihhKXt2YXIgYixjPUtiLnByb3BI%0Ab29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLnBvcz1iPXRoaXMub3B0aW9ucy5k%0AdXJhdGlvbj9uLmVhc2luZ1t0aGlzLmVhc2luZ10oYSx0aGlzLm9wdGlvbnMuZHVy%0AYXRpb24qYSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTphLHRoaXMubm93PSh0%0AaGlzLmVuZC10aGlzLnN0YXJ0KSpiK3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0%0AZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRo%0AaXMpLGMmJmMuc2V0P2Muc2V0KHRoaXMpOktiLnByb3BIb29rcy5fZGVmYXVsdC5z%0AZXQodGhpcyksdGhpc319LEtiLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1LYi5w%0Acm90b3R5cGUsS2IucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGEp%0Ae3ZhciBiO3JldHVybiBudWxsPT1hLmVsZW1bYS5wcm9wXXx8YS5lbGVtLnN0eWxl%0AJiZudWxsIT1hLmVsZW0uc3R5bGVbYS5wcm9wXT8oYj1uLmNzcyhhLmVsZW0sYS5w%0Acm9wLCIiKSxiJiYiYXV0byIhPT1iP2I6MCk6YS5lbGVtW2EucHJvcF19LHNldDpm%0AdW5jdGlvbihhKXtuLmZ4LnN0ZXBbYS5wcm9wXT9uLmZ4LnN0ZXBbYS5wcm9wXShh%0AKTphLmVsZW0uc3R5bGUmJihudWxsIT1hLmVsZW0uc3R5bGVbbi5jc3NQcm9wc1th%0ALnByb3BdXXx8bi5jc3NIb29rc1thLnByb3BdKT9uLnN0eWxlKGEuZWxlbSxhLnBy%0Ab3AsYS5ub3crYS51bml0KTphLmVsZW1bYS5wcm9wXT1hLm5vd319fSxLYi5wcm9w%0ASG9va3Muc2Nyb2xsVG9wPUtiLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVu%0AY3Rpb24oYSl7YS5lbGVtLm5vZGVUeXBlJiZhLmVsZW0ucGFyZW50Tm9kZSYmKGEu%0AZWxlbVthLnByb3BdPWEubm93KX19LG4uZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24o%0AYSl7cmV0dXJuIGF9LHN3aW5nOmZ1bmN0aW9uKGEpe3JldHVybi41LU1hdGguY29z%0AKGEqTWF0aC5QSSkvMn19LG4uZng9S2IucHJvdG90eXBlLmluaXQsbi5meC5zdGVw%0APXt9O3ZhciBMYixNYixOYj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sT2I9bmV3%0AIFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK1ErIikoW2EteiVdKikkIiwiaSIpLFBi%0APS9xdWV1ZUhvb2tzJC8sUWI9W1ZiXSxSYj17IioiOltmdW5jdGlvbihhLGIpe3Zh%0AciBjPXRoaXMuY3JlYXRlVHdlZW4oYSxiKSxkPWMuY3VyKCksZT1PYi5leGVjKGIp%0ALGY9ZSYmZVszXXx8KG4uY3NzTnVtYmVyW2FdPyIiOiJweCIpLGc9KG4uY3NzTnVt%0AYmVyW2FdfHwicHgiIT09ZiYmK2QpJiZPYi5leGVjKG4uY3NzKGMuZWxlbSxhKSks%0AaD0xLGk9MjA7aWYoZyYmZ1szXSE9PWYpe2Y9Znx8Z1szXSxlPWV8fFtdLGc9K2R8%0AfDE7ZG8gaD1ofHwiLjUiLGcvPWgsbi5zdHlsZShjLmVsZW0sYSxnK2YpO3doaWxl%0AKGghPT0oaD1jLmN1cigpL2QpJiYxIT09aCYmLS1pKX1yZXR1cm4gZSYmKGc9Yy5z%0AdGFydD0rZ3x8K2R8fDAsYy51bml0PWYsYy5lbmQ9ZVsxXT9nKyhlWzFdKzEpKmVb%0AMl06K2VbMl0pLGN9XX07ZnVuY3Rpb24gU2IoKXtyZXR1cm4gc2V0VGltZW91dChm%0AdW5jdGlvbigpe0xiPXZvaWQgMH0pLExiPW4ubm93KCl9ZnVuY3Rpb24gVGIoYSxi%0AKXt2YXIgYyxkPTAsZT17aGVpZ2h0OmF9O2ZvcihiPWI/MTowOzQ+ZDtkKz0yLWIp%0AYz1SW2RdLGVbIm1hcmdpbiIrY109ZVsicGFkZGluZyIrY109YTtyZXR1cm4gYiYm%0AKGUub3BhY2l0eT1lLndpZHRoPWEpLGV9ZnVuY3Rpb24gVWIoYSxiLGMpe2Zvcih2%0AYXIgZCxlPShSYltiXXx8W10pLmNvbmNhdChSYlsiKiJdKSxmPTAsZz1lLmxlbmd0%0AaDtnPmY7ZisrKWlmKGQ9ZVtmXS5jYWxsKGMsYixhKSlyZXR1cm4gZH1mdW5jdGlv%0AbiBWYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsPXRoaXMsbT17fSxvPWEu%0Ac3R5bGUscD1hLm5vZGVUeXBlJiZTKGEpLHE9TC5nZXQoYSwiZnhzaG93Iik7Yy5x%0AdWV1ZXx8KGg9bi5fcXVldWVIb29rcyhhLCJmeCIpLG51bGw9PWgudW5xdWV1ZWQm%0AJihoLnVucXVldWVkPTAsaT1oLmVtcHR5LmZpcmUsaC5lbXB0eS5maXJlPWZ1bmN0%0AaW9uKCl7aC51bnF1ZXVlZHx8aSgpfSksaC51bnF1ZXVlZCsrLGwuYWx3YXlzKGZ1%0AbmN0aW9uKCl7bC5hbHdheXMoZnVuY3Rpb24oKXtoLnVucXVldWVkLS0sbi5xdWV1%0AZShhLCJmeCIpLmxlbmd0aHx8aC5lbXB0eS5maXJlKCl9KX0pKSwxPT09YS5ub2Rl%0AVHlwZSYmKCJoZWlnaHQiaW4gYnx8IndpZHRoImluIGIpJiYoYy5vdmVyZmxvdz1b%0Aby5vdmVyZmxvdyxvLm92ZXJmbG93WCxvLm92ZXJmbG93WV0saj1uLmNzcyhhLCJk%0AaXNwbGF5Iiksaz0ibm9uZSI9PT1qP0wuZ2V0KGEsIm9sZGRpc3BsYXkiKXx8dGIo%0AYS5ub2RlTmFtZSk6aiwiaW5saW5lIj09PWsmJiJub25lIj09PW4uY3NzKGEsImZs%0Ab2F0IikmJihvLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxjLm92ZXJmbG93JiYo%0Aby5vdmVyZmxvdz0iaGlkZGVuIixsLmFsd2F5cyhmdW5jdGlvbigpe28ub3ZlcmZs%0Ab3c9Yy5vdmVyZmxvd1swXSxvLm92ZXJmbG93WD1jLm92ZXJmbG93WzFdLG8ub3Zl%0AcmZsb3dZPWMub3ZlcmZsb3dbMl19KSk7Zm9yKGQgaW4gYilpZihlPWJbZF0sTmIu%0AZXhlYyhlKSl7aWYoZGVsZXRlIGJbZF0sZj1mfHwidG9nZ2xlIj09PWUsZT09PShw%0APyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1lfHwhcXx8dm9pZCAwPT09cVtk%0AXSljb250aW51ZTtwPSEwfW1bZF09cSYmcVtkXXx8bi5zdHlsZShhLGQpfWVsc2Ug%0Aaj12b2lkIDA7aWYobi5pc0VtcHR5T2JqZWN0KG0pKSJpbmxpbmUiPT09KCJub25l%0AIj09PWo/dGIoYS5ub2RlTmFtZSk6aikmJihvLmRpc3BsYXk9aik7ZWxzZXtxPyJo%0AaWRkZW4iaW4gcSYmKHA9cS5oaWRkZW4pOnE9TC5hY2Nlc3MoYSwiZnhzaG93Iix7%0AfSksZiYmKHEuaGlkZGVuPSFwKSxwP24oYSkuc2hvdygpOmwuZG9uZShmdW5jdGlv%0Abigpe24oYSkuaGlkZSgpfSksbC5kb25lKGZ1bmN0aW9uKCl7dmFyIGI7TC5yZW1v%0AdmUoYSwiZnhzaG93Iik7Zm9yKGIgaW4gbSluLnN0eWxlKGEsYixtW2JdKX0pO2Zv%0AcihkIGluIG0pZz1VYihwP3FbZF06MCxkLGwpLGQgaW4gcXx8KHFbZF09Zy5zdGFy%0AdCxwJiYoZy5lbmQ9Zy5zdGFydCxnLnN0YXJ0PSJ3aWR0aCI9PT1kfHwiaGVpZ2h0%0AIj09PWQ/MTowKSl9fWZ1bmN0aW9uIFdiKGEsYil7dmFyIGMsZCxlLGYsZztmb3Io%0AYyBpbiBhKWlmKGQ9bi5jYW1lbENhc2UoYyksZT1iW2RdLGY9YVtjXSxuLmlzQXJy%0AYXkoZikmJihlPWZbMV0sZj1hW2NdPWZbMF0pLGMhPT1kJiYoYVtkXT1mLGRlbGV0%0AZSBhW2NdKSxnPW4uY3NzSG9va3NbZF0sZyYmImV4cGFuZCJpbiBnKXtmPWcuZXhw%0AYW5kKGYpLGRlbGV0ZSBhW2RdO2ZvcihjIGluIGYpYyBpbiBhfHwoYVtjXT1mW2Nd%0ALGJbY109ZSl9ZWxzZSBiW2RdPWV9ZnVuY3Rpb24gWGIoYSxiLGMpe3ZhciBkLGUs%0AZj0wLGc9UWIubGVuZ3RoLGg9bi5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigp%0Ae2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7aWYoZSlyZXR1cm4hMTtmb3Io%0AdmFyIGI9TGJ8fFNiKCksYz1NYXRoLm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRp%0Ab24tYiksZD1jL2ouZHVyYXRpb258fDAsZj0xLWQsZz0wLGk9ai50d2VlbnMubGVu%0AZ3RoO2k+ZztnKyspai50d2VlbnNbZ10ucnVuKGYpO3JldHVybiBoLm5vdGlmeVdp%0AdGgoYSxbaixmLGNdKSwxPmYmJmk/YzooaC5yZXNvbHZlV2l0aChhLFtqXSksITEp%0AfSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOm4uZXh0ZW5kKHt9LGIpLG9wdHM6%0Abi5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LGMpLG9yaWdpbmFsUHJvcGVy%0AdGllczpiLG9yaWdpbmFsT3B0aW9uczpjLHN0YXJ0VGltZTpMYnx8U2IoKSxkdXJh%0AdGlvbjpjLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihi%0ALGMpe3ZhciBkPW4uVHdlZW4oYSxqLm9wdHMsYixjLGoub3B0cy5zcGVjaWFsRWFz%0AaW5nW2JdfHxqLm9wdHMuZWFzaW5nKTtyZXR1cm4gai50d2VlbnMucHVzaChkKSxk%0AfSxzdG9wOmZ1bmN0aW9uKGIpe3ZhciBjPTAsZD1iP2oudHdlZW5zLmxlbmd0aDow%0AO2lmKGUpcmV0dXJuIHRoaXM7Zm9yKGU9ITA7ZD5jO2MrKylqLnR3ZWVuc1tjXS5y%0AdW4oMSk7cmV0dXJuIGI/aC5yZXNvbHZlV2l0aChhLFtqLGJdKTpoLnJlamVjdFdp%0AdGgoYSxbaixiXSksdGhpc319KSxrPWoucHJvcHM7Zm9yKFdiKGssai5vcHRzLnNw%0AZWNpYWxFYXNpbmcpO2c+ZjtmKyspaWYoZD1RYltmXS5jYWxsKGosYSxrLGoub3B0%0AcykpcmV0dXJuIGQ7cmV0dXJuIG4ubWFwKGssVWIsaiksbi5pc0Z1bmN0aW9uKGou%0Ab3B0cy5zdGFydCkmJmoub3B0cy5zdGFydC5jYWxsKGEsaiksbi5meC50aW1lcihu%0ALmV4dGVuZChpLHtlbGVtOmEsYW5pbTpqLHF1ZXVlOmoub3B0cy5xdWV1ZX0pKSxq%0ALnByb2dyZXNzKGoub3B0cy5wcm9ncmVzcykuZG9uZShqLm9wdHMuZG9uZSxqLm9w%0AdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3%0AYXlzKX1uLkFuaW1hdGlvbj1uLmV4dGVuZChYYix7dHdlZW5lcjpmdW5jdGlvbihh%0ALGIpe24uaXNGdW5jdGlvbihhKT8oYj1hLGE9WyIqIl0pOmE9YS5zcGxpdCgiICIp%0AO2Zvcih2YXIgYyxkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWM9YVtkXSxSYltjXT1S%0AYltjXXx8W10sUmJbY10udW5zaGlmdChiKX0scHJlZmlsdGVyOmZ1bmN0aW9uKGEs%0AYil7Yj9RYi51bnNoaWZ0KGEpOlFiLnB1c2goYSl9fSksbi5zcGVlZD1mdW5jdGlv%0AbihhLGIsYyl7dmFyIGQ9YSYmIm9iamVjdCI9PXR5cGVvZiBhP24uZXh0ZW5kKHt9%0ALGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8bi5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0%0AaW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFuLmlzRnVuY3Rpb24oYikmJmJ9O3JldHVy%0AbiBkLmR1cmF0aW9uPW4uZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiBkLmR1cmF0%0AaW9uP2QuZHVyYXRpb246ZC5kdXJhdGlvbiBpbiBuLmZ4LnNwZWVkcz9uLmZ4LnNw%0AZWVkc1tkLmR1cmF0aW9uXTpuLmZ4LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ZC5x%0AdWV1ZXx8ZC5xdWV1ZT09PSEwKSYmKGQucXVldWU9ImZ4IiksZC5vbGQ9ZC5jb21w%0AbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bi5pc0Z1bmN0aW9uKGQub2xkKSYm%0AZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZuLmRlcXVldWUodGhpcyxkLnF1ZXVl%0AKX0sZH0sbi5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1%0Acm4gdGhpcy5maWx0ZXIoUykuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCku%0AYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxi%0ALGMsZCl7dmFyIGU9bi5pc0VtcHR5T2JqZWN0KGEpLGY9bi5zcGVlZChiLGMsZCks%0AZz1mdW5jdGlvbigpe3ZhciBiPVhiKHRoaXMsbi5leHRlbmQoe30sYSksZik7KGV8%0AfEwuZ2V0KHRoaXMsImZpbmlzaCIpKSYmYi5zdG9wKCEwKX07cmV0dXJuIGcuZmlu%0AaXNoPWcsZXx8Zi5xdWV1ZT09PSExP3RoaXMuZWFjaChnKTp0aGlzLnF1ZXVlKGYu%0AcXVldWUsZyl9LHN0b3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWZ1bmN0aW9uKGEp%0Ae3ZhciBiPWEuc3RvcDtkZWxldGUgYS5zdG9wLGIoYyl9O3JldHVybiJzdHJpbmci%0AIT10eXBlb2YgYSYmKGM9YixiPWEsYT12b2lkIDApLGImJmEhPT0hMSYmdGhpcy5x%0AdWV1ZShhfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj0hMCxl%0APW51bGwhPWEmJmErInF1ZXVlSG9va3MiLGY9bi50aW1lcnMsZz1MLmdldCh0aGlz%0AKTtpZihlKWdbZV0mJmdbZV0uc3RvcCYmZChnW2VdKTtlbHNlIGZvcihlIGluIGcp%0AZ1tlXSYmZ1tlXS5zdG9wJiZQYi50ZXN0KGUpJiZkKGdbZV0pO2ZvcihlPWYubGVu%0AZ3RoO2UtLTspZltlXS5lbGVtIT09dGhpc3x8bnVsbCE9YSYmZltlXS5xdWV1ZSE9%0APWF8fChmW2VdLmFuaW0uc3RvcChjKSxiPSExLGYuc3BsaWNlKGUsMSkpOyhifHwh%0AYykmJm4uZGVxdWV1ZSh0aGlzLGEpfSl9LGZpbmlzaDpmdW5jdGlvbihhKXtyZXR1%0Acm4gYSE9PSExJiYoYT1hfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIg%0AYixjPUwuZ2V0KHRoaXMpLGQ9Y1thKyJxdWV1ZSJdLGU9Y1thKyJxdWV1ZUhvb2tz%0AIl0sZj1uLnRpbWVycyxnPWQ/ZC5sZW5ndGg6MDtmb3IoYy5maW5pc2g9ITAsbi5x%0AdWV1ZSh0aGlzLGEsW10pLGUmJmUuc3RvcCYmZS5zdG9wLmNhbGwodGhpcywhMCks%0AYj1mLmxlbmd0aDtiLS07KWZbYl0uZWxlbT09PXRoaXMmJmZbYl0ucXVldWU9PT1h%0AJiYoZltiXS5hbmltLnN0b3AoITApLGYuc3BsaWNlKGIsMSkpO2ZvcihiPTA7Zz5i%0AO2IrKylkW2JdJiZkW2JdLmZpbmlzaCYmZFtiXS5maW5pc2guY2FsbCh0aGlzKTtk%0AZWxldGUgYy5maW5pc2h9KX19KSxuLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlk%0AZSJdLGZ1bmN0aW9uKGEsYil7dmFyIGM9bi5mbltiXTtuLmZuW2JdPWZ1bmN0aW9u%0AKGEsZCxlKXtyZXR1cm4gbnVsbD09YXx8ImJvb2xlYW4iPT10eXBlb2YgYT9jLmFw%0AcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoVGIoYiwhMCksYSxkLGUp%0AfX0pLG4uZWFjaCh7c2xpZGVEb3duOlRiKCJzaG93Iiksc2xpZGVVcDpUYigiaGlk%0AZSIpLHNsaWRlVG9nZ2xlOlRiKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNo%0Ab3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0%0AeToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7bi5mblthXT1mdW5jdGlvbihhLGMs%0AZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxuLnRpbWVycz1bXSxu%0ALmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPTAsYz1uLnRpbWVycztmb3IoTGI9%0Abi5ub3coKTtiPGMubGVuZ3RoO2IrKylhPWNbYl0sYSgpfHxjW2JdIT09YXx8Yy5z%0AcGxpY2UoYi0tLDEpO2MubGVuZ3RofHxuLmZ4LnN0b3AoKSxMYj12b2lkIDB9LG4u%0AZngudGltZXI9ZnVuY3Rpb24oYSl7bi50aW1lcnMucHVzaChhKSxhKCk/bi5meC5z%0AdGFydCgpOm4udGltZXJzLnBvcCgpfSxuLmZ4LmludGVydmFsPTEzLG4uZnguc3Rh%0AcnQ9ZnVuY3Rpb24oKXtNYnx8KE1iPXNldEludGVydmFsKG4uZngudGljayxuLmZ4%0ALmludGVydmFsKSl9LG4uZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwo%0ATWIpLE1iPW51bGx9LG4uZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVm%0AYXVsdDo0MDB9LG4uZm4uZGVsYXk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1uLmZ4%0AP24uZnguc3BlZWRzW2FdfHxhOmEsYj1ifHwiZngiLHRoaXMucXVldWUoYixmdW5j%0AdGlvbihiLGMpe3ZhciBkPXNldFRpbWVvdXQoYixhKTtjLnN0b3A9ZnVuY3Rpb24o%0AKXtjbGVhclRpbWVvdXQoZCl9fSl9LGZ1bmN0aW9uKCl7dmFyIGE9bC5jcmVhdGVF%0AbGVtZW50KCJpbnB1dCIpLGI9bC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxjPWIu%0AYXBwZW5kQ2hpbGQobC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7YS50eXBlPSJj%0AaGVja2JveCIsay5jaGVja09uPSIiIT09YS52YWx1ZSxrLm9wdFNlbGVjdGVkPWMu%0Ac2VsZWN0ZWQsYi5kaXNhYmxlZD0hMCxrLm9wdERpc2FibGVkPSFjLmRpc2FibGVk%0ALGE9bC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGEudmFsdWU9InQiLGEudHlwZT0i%0AcmFkaW8iLGsucmFkaW9WYWx1ZT0idCI9PT1hLnZhbHVlfSgpO3ZhciBZYixaYiwk%0AYj1uLmV4cHIuYXR0ckhhbmRsZTtuLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihh%0ALGIpe3JldHVybiBKKHRoaXMsbi5hdHRyLGEsYixhcmd1bWVudHMubGVuZ3RoPjEp%0AfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rp%0Ab24oKXtuLnJlbW92ZUF0dHIodGhpcyxhKX0pfX0pLG4uZXh0ZW5kKHthdHRyOmZ1%0AbmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9YS5ub2RlVHlwZTtpZihhJiYzIT09ZiYm%0AOCE9PWYmJjIhPT1mKXJldHVybiB0eXBlb2YgYS5nZXRBdHRyaWJ1dGU9PT1VP24u%0AcHJvcChhLGIsYyk6KDE9PT1mJiZuLmlzWE1MRG9jKGEpfHwoYj1iLnRvTG93ZXJD%0AYXNlKCksZD1uLmF0dHJIb29rc1tiXXx8KG4uZXhwci5tYXRjaC5ib29sLnRlc3Qo%0AYik/WmI6WWIpKSx2b2lkIDA9PT1jP2QmJiJnZXQiaW4gZCYmbnVsbCE9PShlPWQu%0AZ2V0KGEsYikpP2U6KGU9bi5maW5kLmF0dHIoYSxiKSxudWxsPT1lP3ZvaWQgMDpl%0AKTpudWxsIT09Yz9kJiYic2V0ImluIGQmJnZvaWQgMCE9PShlPWQuc2V0KGEsYyxi%0AKSk/ZTooYS5zZXRBdHRyaWJ1dGUoYixjKyIiKSxjKTp2b2lkIG4ucmVtb3ZlQXR0%0AcihhLGIpKQp9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9MCxm%0APWImJmIubWF0Y2goRSk7aWYoZiYmMT09PWEubm9kZVR5cGUpd2hpbGUoYz1mW2Ur%0AK10pZD1uLnByb3BGaXhbY118fGMsbi5leHByLm1hdGNoLmJvb2wudGVzdChjKSYm%0AKGFbZF09ITEpLGEucmVtb3ZlQXR0cmlidXRlKGMpfSxhdHRySG9va3M6e3R5cGU6%0Ae3NldDpmdW5jdGlvbihhLGIpe2lmKCFrLnJhZGlvVmFsdWUmJiJyYWRpbyI9PT1i%0AJiZuLm5vZGVOYW1lKGEsImlucHV0Iikpe3ZhciBjPWEudmFsdWU7cmV0dXJuIGEu%0Ac2V0QXR0cmlidXRlKCJ0eXBlIixiKSxjJiYoYS52YWx1ZT1jKSxifX19fX0pLFpi%0APXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPT09ITE/bi5yZW1vdmVBdHRy%0AKGEsYyk6YS5zZXRBdHRyaWJ1dGUoYyxjKSxjfX0sbi5lYWNoKG4uZXhwci5tYXRj%0AaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGEsYil7dmFyIGM9%0AJGJbYl18fG4uZmluZC5hdHRyOyRiW2JdPWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxm%0AO3JldHVybiBkfHwoZj0kYltiXSwkYltiXT1lLGU9bnVsbCE9YyhhLGIsZCk/Yi50%0Ab0xvd2VyQ2FzZSgpOm51bGwsJGJbYl09ZiksZX19KTt2YXIgX2I9L14oPzppbnB1%0AdHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaTtuLmZuLmV4dGVuZCh7cHJvcDpm%0AdW5jdGlvbihhLGIpe3JldHVybiBKKHRoaXMsbi5wcm9wLGEsYixhcmd1bWVudHMu%0AbGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVh%0AY2goZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tuLnByb3BGaXhbYV18fGFdfSl9fSks%0Abi5leHRlbmQoe3Byb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFz%0Ac05hbWUifSxwcm9wOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZz1hLm5vZGVU%0AeXBlO2lmKGEmJjMhPT1nJiY4IT09ZyYmMiE9PWcpcmV0dXJuIGY9MSE9PWd8fCFu%0ALmlzWE1MRG9jKGEpLGYmJihiPW4ucHJvcEZpeFtiXXx8YixlPW4ucHJvcEhvb2tz%0AW2JdKSx2b2lkIDAhPT1jP2UmJiJzZXQiaW4gZSYmdm9pZCAwIT09KGQ9ZS5zZXQo%0AYSxjLGIpKT9kOmFbYl09YzplJiYiZ2V0ImluIGUmJm51bGwhPT0oZD1lLmdldChh%0ALGIpKT9kOmFbYl19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihh%0AKXtyZXR1cm4gYS5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fF9iLnRlc3QoYS5u%0Ab2RlTmFtZSl8fGEuaHJlZj9hLnRhYkluZGV4Oi0xfX19fSksay5vcHRTZWxlY3Rl%0AZHx8KG4ucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9%0AYS5wYXJlbnROb2RlO3JldHVybiBiJiZiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9k%0AZS5zZWxlY3RlZEluZGV4LG51bGx9fSksbi5lYWNoKFsidGFiSW5kZXgiLCJyZWFk%0AT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJy%0Ab3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVu%0AdEVkaXRhYmxlIl0sZnVuY3Rpb24oKXtuLnByb3BGaXhbdGhpcy50b0xvd2VyQ2Fz%0AZSgpXT10aGlzfSk7dmFyIGFjPS9bXHRcclxuXGZdL2c7bi5mbi5leHRlbmQoe2Fk%0AZENsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPSJzdHJpbmciPT10%0AeXBlb2YgYSYmYSxpPTAsaj10aGlzLmxlbmd0aDtpZihuLmlzRnVuY3Rpb24oYSkp%0AcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLmFkZENsYXNzKGEu%0AY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGgpZm9yKGI9KGF8fCIi%0AKS5tYXRjaChFKXx8W107aj5pO2krKylpZihjPXRoaXNbaV0sZD0xPT09Yy5ub2Rl%0AVHlwZSYmKGMuY2xhc3NOYW1lPygiICIrYy5jbGFzc05hbWUrIiAiKS5yZXBsYWNl%0AKGFjLCIgIik6IiAiKSl7Zj0wO3doaWxlKGU9YltmKytdKWQuaW5kZXhPZigiICIr%0AZSsiICIpPDAmJihkKz1lKyIgIik7Zz1uLnRyaW0oZCksYy5jbGFzc05hbWUhPT1n%0AJiYoYy5jbGFzc05hbWU9Zyl9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0%0AaW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPTA9PT1hcmd1bWVudHMubGVuZ3RofHwi%0Ac3RyaW5nIj09dHlwZW9mIGEmJmEsaT0wLGo9dGhpcy5sZW5ndGg7aWYobi5pc0Z1%0AbmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bih0aGlzKS5y%0AZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZiho%0AKWZvcihiPShhfHwiIikubWF0Y2goRSl8fFtdO2o+aTtpKyspaWYoYz10aGlzW2ld%0ALGQ9MT09PWMubm9kZVR5cGUmJihjLmNsYXNzTmFtZT8oIiAiK2MuY2xhc3NOYW1l%0AKyIgIikucmVwbGFjZShhYywiICIpOiIiKSl7Zj0wO3doaWxlKGU9YltmKytdKXdo%0AaWxlKGQuaW5kZXhPZigiICIrZSsiICIpPj0wKWQ9ZC5yZXBsYWNlKCIgIitlKyIg%0AIiwiICIpO2c9YT9uLnRyaW0oZCk6IiIsYy5jbGFzc05hbWUhPT1nJiYoYy5jbGFz%0Ac05hbWU9Zyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7%0AdmFyIGM9dHlwZW9mIGE7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYiYmInN0cmlu%0AZyI9PT1jP2I/dGhpcy5hZGRDbGFzcyhhKTp0aGlzLnJlbW92ZUNsYXNzKGEpOnRo%0AaXMuZWFjaChuLmlzRnVuY3Rpb24oYSk/ZnVuY3Rpb24oYyl7bih0aGlzKS50b2dn%0AbGVDbGFzcyhhLmNhbGwodGhpcyxjLHRoaXMuY2xhc3NOYW1lLGIpLGIpfTpmdW5j%0AdGlvbigpe2lmKCJzdHJpbmciPT09Yyl7dmFyIGIsZD0wLGU9bih0aGlzKSxmPWEu%0AbWF0Y2goRSl8fFtdO3doaWxlKGI9ZltkKytdKWUuaGFzQ2xhc3MoYik/ZS5yZW1v%0AdmVDbGFzcyhiKTplLmFkZENsYXNzKGIpfWVsc2UoYz09PVV8fCJib29sZWFuIj09%0APWMpJiYodGhpcy5jbGFzc05hbWUmJkwuc2V0KHRoaXMsIl9fY2xhc3NOYW1lX18i%0ALHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8%0AYT09PSExPyIiOkwuZ2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpfSl9LGhh%0Ac0NsYXNzOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iICIrYSsiICIsYz0wLGQ9dGhp%0Acy5sZW5ndGg7ZD5jO2MrKylpZigxPT09dGhpc1tjXS5ub2RlVHlwZSYmKCIgIit0%0AaGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoYWMsIiAiKS5pbmRleE9mKGIp%0APj0wKXJldHVybiEwO3JldHVybiExfX0pO3ZhciBiYz0vXHIvZztuLmZuLmV4dGVu%0AZCh7dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07e2lmKGFyZ3Vt%0AZW50cy5sZW5ndGgpcmV0dXJuIGQ9bi5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChm%0AdW5jdGlvbihjKXt2YXIgZTsxPT09dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwo%0AdGhpcyxjLG4odGhpcykudmFsKCkpOmEsbnVsbD09ZT9lPSIiOiJudW1iZXIiPT10%0AeXBlb2YgZT9lKz0iIjpuLmlzQXJyYXkoZSkmJihlPW4ubWFwKGUsZnVuY3Rpb24o%0AYSl7cmV0dXJuIG51bGw9PWE/IiI6YSsiIn0pKSxiPW4udmFsSG9va3NbdGhpcy50%0AeXBlXXx8bi52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGIm%0AJiJzZXQiaW4gYiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLCJ2YWx1ZSIpfHwodGhp%0Acy52YWx1ZT1lKSl9KTtpZihlKXJldHVybiBiPW4udmFsSG9va3NbZS50eXBlXXx8%0Abi52YWxIb29rc1tlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJnZXQiaW4g%0AYiYmdm9pZCAwIT09KGM9Yi5nZXQoZSwidmFsdWUiKSk/YzooYz1lLnZhbHVlLCJz%0AdHJpbmciPT10eXBlb2YgYz9jLnJlcGxhY2UoYmMsIiIpOm51bGw9PWM/IiI6Yyl9%0AfX0pLG4uZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7%0AdmFyIGI9bi5maW5kLmF0dHIoYSwidmFsdWUiKTtyZXR1cm4gbnVsbCE9Yj9iOm4u%0AdHJpbShuLnRleHQoYSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZh%0AciBiLGMsZD1hLm9wdGlvbnMsZT1hLnNlbGVjdGVkSW5kZXgsZj0ic2VsZWN0LW9u%0AZSI9PT1hLnR5cGV8fDA+ZSxnPWY/bnVsbDpbXSxoPWY/ZSsxOmQubGVuZ3RoLGk9%0AMD5lP2g6Zj9lOjA7aD5pO2krKylpZihjPWRbaV0sISghYy5zZWxlY3RlZCYmaSE9%0APWV8fChrLm9wdERpc2FibGVkP2MuZGlzYWJsZWQ6bnVsbCE9PWMuZ2V0QXR0cmli%0AdXRlKCJkaXNhYmxlZCIpKXx8Yy5wYXJlbnROb2RlLmRpc2FibGVkJiZuLm5vZGVO%0AYW1lKGMucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKGI9bihjKS52YWwoKSxm%0AKXJldHVybiBiO2cucHVzaChiKX1yZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKGEsYil7%0AdmFyIGMsZCxlPWEub3B0aW9ucyxmPW4ubWFrZUFycmF5KGIpLGc9ZS5sZW5ndGg7%0Ad2hpbGUoZy0tKWQ9ZVtnXSwoZC5zZWxlY3RlZD1uLmluQXJyYXkoZC52YWx1ZSxm%0AKT49MCkmJihjPSEwKTtyZXR1cm4gY3x8KGEuc2VsZWN0ZWRJbmRleD0tMSksZn19%0AfX0pLG4uZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe24udmFs%0ASG9va3NbdGhpc109e3NldDpmdW5jdGlvbihhLGIpe3JldHVybiBuLmlzQXJyYXko%0AYik/YS5jaGVja2VkPW4uaW5BcnJheShuKGEpLnZhbCgpLGIpPj0wOnZvaWQgMH19%0ALGsuY2hlY2tPbnx8KG4udmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGEpe3Jl%0AdHVybiBudWxsPT09YS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjphLnZhbHVl%0AfSl9KSxuLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJl%0Ac2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3Vz%0AZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3Vz%0AZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5%0AdXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtu%0ALmZuW2JdPWZ1bmN0aW9uKGEsYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90%0AaGlzLm9uKGIsbnVsbCxhLGMpOnRoaXMudHJpZ2dlcihiKX19KSxuLmZuLmV4dGVu%0AZCh7aG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEp%0ALm1vdXNlbGVhdmUoYnx8YSl9LGJpbmQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0%0AaGlzLm9uKGEsbnVsbCxiLGMpfSx1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4g%0AdGhpcy5vZmYoYSxudWxsLGIpfSxkZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyxkKXty%0AZXR1cm4gdGhpcy5vbihiLGEsYyxkKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIs%0AYyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGEsIioqIik6%0AdGhpcy5vZmYoYixhfHwiKioiLGMpfX0pO3ZhciBjYz1uLm5vdygpLGRjPS9cPy87%0Abi5wYXJzZUpTT049ZnVuY3Rpb24oYSl7cmV0dXJuIEpTT04ucGFyc2UoYSsiIil9%0ALG4ucGFyc2VYTUw9ZnVuY3Rpb24oYSl7dmFyIGIsYztpZighYXx8InN0cmluZyIh%0APXR5cGVvZiBhKXJldHVybiBudWxsO3RyeXtjPW5ldyBET01QYXJzZXIsYj1jLnBh%0AcnNlRnJvbVN0cmluZyhhLCJ0ZXh0L3htbCIpfWNhdGNoKGQpe2I9dm9pZCAwfXJl%0AdHVybighYnx8Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5s%0AZW5ndGgpJiZuLmVycm9yKCJJbnZhbGlkIFhNTDogIithKSxifTt2YXIgZWMsZmMs%0AZ2M9LyMuKiQvLGhjPS8oWz8mXSlfPVteJl0qLyxpYz0vXiguKj8pOlsgXHRdKihb%0AXlxyXG5dKikkL2dtLGpjPS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4%0AdGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLGtjPS9eKD86R0VUfEhFQUQpJC8s%0AbGM9L15cL1wvLyxtYz0vXihbXHcuKy1dKzopKD86XC9cLyg/OlteXC8/I10qQHwp%0AKFteXC8/IzpdKikoPzo6KFxkKyl8KXwpLyxuYz17fSxvYz17fSxwYz0iKi8iLmNv%0AbmNhdCgiKiIpO3RyeXtmYz1sb2NhdGlvbi5ocmVmfWNhdGNoKHFjKXtmYz1sLmNy%0AZWF0ZUVsZW1lbnQoImEiKSxmYy5ocmVmPSIiLGZjPWZjLmhyZWZ9ZWM9bWMuZXhl%0AYyhmYy50b0xvd2VyQ2FzZSgpKXx8W107ZnVuY3Rpb24gcmMoYSl7cmV0dXJuIGZ1%0AbmN0aW9uKGIsYyl7InN0cmluZyIhPXR5cGVvZiBiJiYoYz1iLGI9IioiKTt2YXIg%0AZCxlPTAsZj1iLnRvTG93ZXJDYXNlKCkubWF0Y2goRSl8fFtdO2lmKG4uaXNGdW5j%0AdGlvbihjKSl3aGlsZShkPWZbZSsrXSkiKyI9PT1kWzBdPyhkPWQuc2xpY2UoMSl8%0AfCIqIiwoYVtkXT1hW2RdfHxbXSkudW5zaGlmdChjKSk6KGFbZF09YVtkXXx8W10p%0ALnB1c2goYyl9fWZ1bmN0aW9uIHNjKGEsYixjLGQpe3ZhciBlPXt9LGY9YT09PW9j%0AO2Z1bmN0aW9uIGcoaCl7dmFyIGk7cmV0dXJuIGVbaF09ITAsbi5lYWNoKGFbaF18%0AfFtdLGZ1bmN0aW9uKGEsaCl7dmFyIGo9aChiLGMsZCk7cmV0dXJuInN0cmluZyIh%0APXR5cGVvZiBqfHxmfHxlW2pdP2Y/IShpPWopOnZvaWQgMDooYi5kYXRhVHlwZXMu%0AdW5zaGlmdChqKSxnKGopLCExKX0pLGl9cmV0dXJuIGcoYi5kYXRhVHlwZXNbMF0p%0AfHwhZVsiKiJdJiZnKCIqIil9ZnVuY3Rpb24gdGMoYSxiKXt2YXIgYyxkLGU9bi5h%0AamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihjIGluIGIpdm9pZCAwIT09%0AYltjXSYmKChlW2NdP2E6ZHx8KGQ9e30pKVtjXT1iW2NdKTtyZXR1cm4gZCYmbi5l%0AeHRlbmQoITAsYSxkKSxhfWZ1bmN0aW9uIHVjKGEsYixjKXt2YXIgZCxlLGYsZyxo%0APWEuY29udGVudHMsaT1hLmRhdGFUeXBlczt3aGlsZSgiKiI9PT1pWzBdKWkuc2hp%0AZnQoKSx2b2lkIDA9PT1kJiYoZD1hLm1pbWVUeXBlfHxiLmdldFJlc3BvbnNlSGVh%0AZGVyKCJDb250ZW50LVR5cGUiKSk7aWYoZClmb3IoZSBpbiBoKWlmKGhbZV0mJmhb%0AZV0udGVzdChkKSl7aS51bnNoaWZ0KGUpO2JyZWFrfWlmKGlbMF1pbiBjKWY9aVsw%0AXTtlbHNle2ZvcihlIGluIGMpe2lmKCFpWzBdfHxhLmNvbnZlcnRlcnNbZSsiICIr%0AaVswXV0pe2Y9ZTticmVha31nfHwoZz1lKX1mPWZ8fGd9cmV0dXJuIGY/KGYhPT1p%0AWzBdJiZpLnVuc2hpZnQoZiksY1tmXSk6dm9pZCAwfWZ1bmN0aW9uIHZjKGEsYixj%0ALGQpe3ZhciBlLGYsZyxoLGksaj17fSxrPWEuZGF0YVR5cGVzLnNsaWNlKCk7aWYo%0Aa1sxXSlmb3IoZyBpbiBhLmNvbnZlcnRlcnMpaltnLnRvTG93ZXJDYXNlKCldPWEu%0AY29udmVydGVyc1tnXTtmPWsuc2hpZnQoKTt3aGlsZShmKWlmKGEucmVzcG9uc2VG%0AaWVsZHNbZl0mJihjW2EucmVzcG9uc2VGaWVsZHNbZl1dPWIpLCFpJiZkJiZhLmRh%0AdGFGaWx0ZXImJihiPWEuZGF0YUZpbHRlcihiLGEuZGF0YVR5cGUpKSxpPWYsZj1r%0ALnNoaWZ0KCkpaWYoIioiPT09ZilmPWk7ZWxzZSBpZigiKiIhPT1pJiZpIT09Zil7%0AaWYoZz1qW2krIiAiK2ZdfHxqWyIqICIrZl0sIWcpZm9yKGUgaW4gailpZihoPWUu%0Ac3BsaXQoIiAiKSxoWzFdPT09ZiYmKGc9altpKyIgIitoWzBdXXx8alsiKiAiK2hb%0AMF1dKSl7Zz09PSEwP2c9altlXTpqW2VdIT09ITAmJihmPWhbMF0say51bnNoaWZ0%0AKGhbMV0pKTticmVha31pZihnIT09ITApaWYoZyYmYVsidGhyb3dzIl0pYj1nKGIp%0AO2Vsc2UgdHJ5e2I9ZyhiKX1jYXRjaChsKXtyZXR1cm57c3RhdGU6InBhcnNlcmVy%0Acm9yIixlcnJvcjpnP2w6Ik5vIGNvbnZlcnNpb24gZnJvbSAiK2krIiB0byAiK2Z9%0AfX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6Yn19bi5leHRlbmQoe2FjdGl2%0AZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOmZj%0ALHR5cGU6IkdFVCIsaXNMb2NhbDpqYy50ZXN0KGVjWzFdKSxnbG9iYWw6ITAscHJv%0AY2Vzc0RhdGE6ITAsYXN5bmM6ITAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gt%0Ad3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIsYWNjZXB0czp7Iioi%0AOnBjLHRleHQ6InRleHQvcGxhaW4iLGh0bWw6InRleHQvaHRtbCIseG1sOiJhcHBs%0AaWNhdGlvbi94bWwsIHRleHQveG1sIixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0%0AZXh0L2phdmFzY3JpcHQifSxjb250ZW50czp7eG1sOi94bWwvLGh0bWw6L2h0bWwv%0ALGpzb246L2pzb24vfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIs%0AdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25zZUpTT04ifSxjb252ZXJ0%0AZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6%0Abi5wYXJzZUpTT04sInRleHQgeG1sIjpuLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7%0AdXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtyZXR1%0Acm4gYj90Yyh0YyhhLG4uYWpheFNldHRpbmdzKSxiKTp0YyhuLmFqYXhTZXR0aW5n%0AcyxhKX0sYWpheFByZWZpbHRlcjpyYyhuYyksYWpheFRyYW5zcG9ydDpyYyhvYyks%0AYWpheDpmdW5jdGlvbihhLGIpeyJvYmplY3QiPT10eXBlb2YgYSYmKGI9YSxhPXZv%0AaWQgMCksYj1ifHx7fTt2YXIgYyxkLGUsZixnLGgsaSxqLGs9bi5hamF4U2V0dXAo%0Ae30sYiksbD1rLmNvbnRleHR8fGssbT1rLmNvbnRleHQmJihsLm5vZGVUeXBlfHxs%0ALmpxdWVyeSk/bihsKTpuLmV2ZW50LG89bi5EZWZlcnJlZCgpLHA9bi5DYWxsYmFj%0Aa3MoIm9uY2UgbWVtb3J5IikscT1rLnN0YXR1c0NvZGV8fHt9LHI9e30scz17fSx0%0APTAsdT0iY2FuY2VsZWQiLHY9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRl%0AcjpmdW5jdGlvbihhKXt2YXIgYjtpZigyPT09dCl7aWYoIWYpe2Y9e307d2hpbGUo%0AYj1pYy5leGVjKGUpKWZbYlsxXS50b0xvd2VyQ2FzZSgpXT1iWzJdfWI9ZlthLnRv%0ATG93ZXJDYXNlKCldfXJldHVybiBudWxsPT1iP251bGw6Yn0sZ2V0QWxsUmVzcG9u%0Ac2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIDI9PT10P2U6bnVsbH0sc2V0UmVx%0AdWVzdEhlYWRlcjpmdW5jdGlvbihhLGIpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTty%0AZXR1cm4gdHx8KGE9c1tjXT1zW2NdfHxhLHJbYV09YiksdGhpc30sb3ZlcnJpZGVN%0AaW1lVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gdHx8KGsubWltZVR5cGU9YSksdGhp%0Ac30sc3RhdHVzQ29kZTpmdW5jdGlvbihhKXt2YXIgYjtpZihhKWlmKDI+dClmb3Io%0AYiBpbiBhKXFbYl09W3FbYl0sYVtiXV07ZWxzZSB2LmFsd2F5cyhhW3Yuc3RhdHVz%0AXSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGEpe3ZhciBiPWF8fHU7cmV0%0AdXJuIGMmJmMuYWJvcnQoYikseCgwLGIpLHRoaXN9fTtpZihvLnByb21pc2Uodiku%0AY29tcGxldGU9cC5hZGQsdi5zdWNjZXNzPXYuZG9uZSx2LmVycm9yPXYuZmFpbCxr%0ALnVybD0oKGF8fGsudXJsfHxmYykrIiIpLnJlcGxhY2UoZ2MsIiIpLnJlcGxhY2Uo%0AbGMsZWNbMV0rIi8vIiksay50eXBlPWIubWV0aG9kfHxiLnR5cGV8fGsubWV0aG9k%0AfHxrLnR5cGUsay5kYXRhVHlwZXM9bi50cmltKGsuZGF0YVR5cGV8fCIqIikudG9M%0Ab3dlckNhc2UoKS5tYXRjaChFKXx8WyIiXSxudWxsPT1rLmNyb3NzRG9tYWluJiYo%0AaD1tYy5leGVjKGsudXJsLnRvTG93ZXJDYXNlKCkpLGsuY3Jvc3NEb21haW49ISgh%0AaHx8aFsxXT09PWVjWzFdJiZoWzJdPT09ZWNbMl0mJihoWzNdfHwoImh0dHA6Ij09%0APWhbMV0/IjgwIjoiNDQzIikpPT09KGVjWzNdfHwoImh0dHA6Ij09PWVjWzFdPyI4%0AMCI6IjQ0MyIpKSkpLGsuZGF0YSYmay5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5%0AcGVvZiBrLmRhdGEmJihrLmRhdGE9bi5wYXJhbShrLmRhdGEsay50cmFkaXRpb25h%0AbCkpLHNjKG5jLGssYix2KSwyPT09dClyZXR1cm4gdjtpPWsuZ2xvYmFsLGkmJjA9%0APT1uLmFjdGl2ZSsrJiZuLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLGsudHlw%0AZT1rLnR5cGUudG9VcHBlckNhc2UoKSxrLmhhc0NvbnRlbnQ9IWtjLnRlc3Qoay50%0AeXBlKSxkPWsudXJsLGsuaGFzQ29udGVudHx8KGsuZGF0YSYmKGQ9ay51cmwrPShk%0AYy50ZXN0KGQpPyImIjoiPyIpK2suZGF0YSxkZWxldGUgay5kYXRhKSxrLmNhY2hl%0APT09ITEmJihrLnVybD1oYy50ZXN0KGQpP2QucmVwbGFjZShoYywiJDFfPSIrY2Mr%0AKyk6ZCsoZGMudGVzdChkKT8iJiI6Ij8iKSsiXz0iK2NjKyspKSxrLmlmTW9kaWZp%0AZWQmJihuLmxhc3RNb2RpZmllZFtkXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1N%0Ab2RpZmllZC1TaW5jZSIsbi5sYXN0TW9kaWZpZWRbZF0pLG4uZXRhZ1tkXSYmdi5z%0AZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixuLmV0YWdbZF0pKSwoay5k%0AYXRhJiZrLmhhc0NvbnRlbnQmJmsuY29udGVudFR5cGUhPT0hMXx8Yi5jb250ZW50%0AVHlwZSkmJnYuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixrLmNvbnRl%0AbnRUeXBlKSx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsay5kYXRhVHlwZXNb%0AMF0mJmsuYWNjZXB0c1trLmRhdGFUeXBlc1swXV0/ay5hY2NlcHRzW2suZGF0YVR5%0AcGVzWzBdXSsoIioiIT09ay5kYXRhVHlwZXNbMF0/IiwgIitwYysiOyBxPTAuMDEi%0AOiIiKTprLmFjY2VwdHNbIioiXSk7Zm9yKGogaW4gay5oZWFkZXJzKXYuc2V0UmVx%0AdWVzdEhlYWRlcihqLGsuaGVhZGVyc1tqXSk7aWYoay5iZWZvcmVTZW5kJiYoay5i%0AZWZvcmVTZW5kLmNhbGwobCx2LGspPT09ITF8fDI9PT10KSlyZXR1cm4gdi5hYm9y%0AdCgpO3U9ImFib3J0Ijtmb3IoaiBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0%0AZToxfSl2W2pdKGtbal0pO2lmKGM9c2Mob2MsayxiLHYpKXt2LnJlYWR5U3RhdGU9%0AMSxpJiZtLnRyaWdnZXIoImFqYXhTZW5kIixbdixrXSksay5hc3luYyYmay50aW1l%0Ab3V0PjAmJihnPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2LmFib3J0KCJ0aW1lb3V0%0AIil9LGsudGltZW91dCkpO3RyeXt0PTEsYy5zZW5kKHIseCl9Y2F0Y2godyl7aWYo%0AISgyPnQpKXRocm93IHc7eCgtMSx3KX19ZWxzZSB4KC0xLCJObyBUcmFuc3BvcnQi%0AKTtmdW5jdGlvbiB4KGEsYixmLGgpe3ZhciBqLHIscyx1LHcseD1iOzIhPT10JiYo%0AdD0yLGcmJmNsZWFyVGltZW91dChnKSxjPXZvaWQgMCxlPWh8fCIiLHYucmVhZHlT%0AdGF0ZT1hPjA/NDowLGo9YT49MjAwJiYzMDA+YXx8MzA0PT09YSxmJiYodT11Yyhr%0ALHYsZikpLHU9dmMoayx1LHYsaiksaj8oay5pZk1vZGlmaWVkJiYodz12LmdldFJl%0Ac3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIiksdyYmKG4ubGFzdE1vZGlmaWVk%0AW2RdPXcpLHc9di5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpLHcmJihuLmV0YWdb%0AZF09dykpLDIwND09PWF8fCJIRUFEIj09PWsudHlwZT94PSJub2NvbnRlbnQiOjMw%0AND09PWE/eD0ibm90bW9kaWZpZWQiOih4PXUuc3RhdGUscj11LmRhdGEscz11LmVy%0Acm9yLGo9IXMpKToocz14LChhfHwheCkmJih4PSJlcnJvciIsMD5hJiYoYT0wKSkp%0ALHYuc3RhdHVzPWEsdi5zdGF0dXNUZXh0PShifHx4KSsiIixqP28ucmVzb2x2ZVdp%0AdGgobCxbcix4LHZdKTpvLnJlamVjdFdpdGgobCxbdix4LHNdKSx2LnN0YXR1c0Nv%0AZGUocSkscT12b2lkIDAsaSYmbS50cmlnZ2VyKGo/ImFqYXhTdWNjZXNzIjoiYWph%0AeEVycm9yIixbdixrLGo/cjpzXSkscC5maXJlV2l0aChsLFt2LHhdKSxpJiYobS50%0AcmlnZ2VyKCJhamF4Q29tcGxldGUiLFt2LGtdKSwtLW4uYWN0aXZlfHxuLmV2ZW50%0ALnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gdn0sZ2V0SlNPTjpmdW5jdGlv%0AbihhLGIsYyl7cmV0dXJuIG4uZ2V0KGEsYixjLCJqc29uIil9LGdldFNjcmlwdDpm%0AdW5jdGlvbihhLGIpe3JldHVybiBuLmdldChhLHZvaWQgMCxiLCJzY3JpcHQiKX19%0AKSxuLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxiKXtuW2JdPWZ1bmN0%0AaW9uKGEsYyxkLGUpe3JldHVybiBuLmlzRnVuY3Rpb24oYykmJihlPWV8fGQsZD1j%0ALGM9dm9pZCAwKSxuLmFqYXgoe3VybDphLHR5cGU6YixkYXRhVHlwZTplLGRhdGE6%0AYyxzdWNjZXNzOmR9KX19KSxuLmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3RvcCIs%0AImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNl%0AbmQiXSxmdW5jdGlvbihhLGIpe24uZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIHRo%0AaXMub24oYixhKX19KSxuLl9ldmFsVXJsPWZ1bmN0aW9uKGEpe3JldHVybiBuLmFq%0AYXgoe3VybDphLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsYXN5bmM6ITEs%0AZ2xvYmFsOiExLCJ0aHJvd3MiOiEwfSl9LG4uZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1%0AbmN0aW9uKGEpe3ZhciBiO3JldHVybiBuLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNo%0AKGZ1bmN0aW9uKGIpe24odGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxiKSl9KToo%0AdGhpc1swXSYmKGI9bihhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xv%0AbmUoITApLHRoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1sw%0AXSksYi5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RFbGVt%0AZW50Q2hpbGQpYT1hLmZpcnN0RWxlbWVudENoaWxkO3JldHVybiBhfSkuYXBwZW5k%0AKHRoaXMpKSx0aGlzKX0sd3JhcElubmVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlz%0ALmVhY2gobi5pc0Z1bmN0aW9uKGEpP2Z1bmN0aW9uKGIpe24odGhpcykud3JhcElu%0AbmVyKGEuY2FsbCh0aGlzLGIpKX06ZnVuY3Rpb24oKXt2YXIgYj1uKHRoaXMpLGM9%0AYi5jb250ZW50cygpO2MubGVuZ3RoP2Mud3JhcEFsbChhKTpiLmFwcGVuZChhKX0p%0AfSx3cmFwOmZ1bmN0aW9uKGEpe3ZhciBiPW4uaXNGdW5jdGlvbihhKTtyZXR1cm4g%0AdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe24odGhpcykud3JhcEFsbChiP2EuY2FsbCh0%0AaGlzLGMpOmEpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVu%0AdCgpLmVhY2goZnVuY3Rpb24oKXtuLm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8bih0%0AaGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9fSksbi5l%0AeHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGEpe3JldHVybiBhLm9mZnNldFdp%0AZHRoPD0wJiZhLm9mZnNldEhlaWdodDw9MH0sbi5leHByLmZpbHRlcnMudmlzaWJs%0AZT1mdW5jdGlvbihhKXtyZXR1cm4hbi5leHByLmZpbHRlcnMuaGlkZGVuKGEpfTt2%0AYXIgd2M9LyUyMC9nLHhjPS9cW1xdJC8seWM9L1xyP1xuL2csemM9L14oPzpzdWJt%0AaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLEFjPS9eKD86aW5wdXR8c2Vs%0AZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiBCYyhhLGIsYyxkKXt2YXIg%0AZTtpZihuLmlzQXJyYXkoYikpbi5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHx4Yy50%0AZXN0KGEpP2QoYSxlKTpCYyhhKyJbIisoIm9iamVjdCI9PXR5cGVvZiBlP2I6IiIp%0AKyJdIixlLGMsZCl9KTtlbHNlIGlmKGN8fCJvYmplY3QiIT09bi50eXBlKGIpKWQo%0AYSxiKTtlbHNlIGZvcihlIGluIGIpQmMoYSsiWyIrZSsiXSIsYltlXSxjLGQpfW4u%0AcGFyYW09ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9ZnVuY3Rpb24oYSxiKXti%0APW4uaXNGdW5jdGlvbihiKT9iKCk6bnVsbD09Yj8iIjpiLGRbZC5sZW5ndGhdPWVu%0AY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtp%0AZih2b2lkIDA9PT1iJiYoYj1uLmFqYXhTZXR0aW5ncyYmbi5hamF4U2V0dGluZ3Mu%0AdHJhZGl0aW9uYWwpLG4uaXNBcnJheShhKXx8YS5qcXVlcnkmJiFuLmlzUGxhaW5P%0AYmplY3QoYSkpbi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZh%0AbHVlKX0pO2Vsc2UgZm9yKGMgaW4gYSlCYyhjLGFbY10sYixlKTtyZXR1cm4gZC5q%0Ab2luKCImIikucmVwbGFjZSh3YywiKyIpfSxuLmZuLmV4dGVuZCh7c2VyaWFsaXpl%0AOmZ1bmN0aW9uKCl7cmV0dXJuIG4ucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgp%0AKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVu%0AY3Rpb24oKXt2YXIgYT1uLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gYT9u%0ALm1ha2VBcnJheShhKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGE9dGhp%0Acy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFuKHRoaXMpLmlzKCI6ZGlzYWJsZWQi%0AKSYmQWMudGVzdCh0aGlzLm5vZGVOYW1lKSYmIXpjLnRlc3QoYSkmJih0aGlzLmNo%0AZWNrZWR8fCFULnRlc3QoYSkpfSkubWFwKGZ1bmN0aW9uKGEsYil7dmFyIGM9bih0%0AaGlzKS52YWwoKTtyZXR1cm4gbnVsbD09Yz9udWxsOm4uaXNBcnJheShjKT9uLm1h%0AcChjLGZ1bmN0aW9uKGEpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxh%0AY2UoeWMsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKHlj%0ALCJcclxuIil9fSkuZ2V0KCl9fSksbi5hamF4U2V0dGluZ3MueGhyPWZ1bmN0aW9u%0AKCl7dHJ5e3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9Y2F0Y2goYSl7fX07dmFy%0AIENjPTAsRGM9e30sRWM9ezA6MjAwLDEyMjM6MjA0fSxGYz1uLmFqYXhTZXR0aW5n%0Acy54aHIoKTthLkFjdGl2ZVhPYmplY3QmJm4oYSkub24oInVubG9hZCIsZnVuY3Rp%0Ab24oKXtmb3IodmFyIGEgaW4gRGMpRGNbYV0oKX0pLGsuY29ycz0hIUZjJiYid2l0%0AaENyZWRlbnRpYWxzImluIEZjLGsuYWpheD1GYz0hIUZjLG4uYWpheFRyYW5zcG9y%0AdChmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gay5jb3JzfHxGYyYmIWEuY3Jvc3NE%0Ab21haW4/e3NlbmQ6ZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEueGhyKCksZz0rK0Nj%0AO2lmKGYub3BlbihhLnR5cGUsYS51cmwsYS5hc3luYyxhLnVzZXJuYW1lLGEucGFz%0Ac3dvcmQpLGEueGhyRmllbGRzKWZvcihlIGluIGEueGhyRmllbGRzKWZbZV09YS54%0AaHJGaWVsZHNbZV07YS5taW1lVHlwZSYmZi5vdmVycmlkZU1pbWVUeXBlJiZmLm92%0AZXJyaWRlTWltZVR5cGUoYS5taW1lVHlwZSksYS5jcm9zc0RvbWFpbnx8Y1siWC1S%0AZXF1ZXN0ZWQtV2l0aCJdfHwoY1siWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRw%0AUmVxdWVzdCIpO2ZvcihlIGluIGMpZi5zZXRSZXF1ZXN0SGVhZGVyKGUsY1tlXSk7%0AYj1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXtiJiYoZGVsZXRlIERjW2dd%0ALGI9Zi5vbmxvYWQ9Zi5vbmVycm9yPW51bGwsImFib3J0Ij09PWE/Zi5hYm9ydCgp%0AOiJlcnJvciI9PT1hP2QoZi5zdGF0dXMsZi5zdGF0dXNUZXh0KTpkKEVjW2Yuc3Rh%0AdHVzXXx8Zi5zdGF0dXMsZi5zdGF0dXNUZXh0LCJzdHJpbmciPT10eXBlb2YgZi5y%0AZXNwb25zZVRleHQ/e3RleHQ6Zi5yZXNwb25zZVRleHR9OnZvaWQgMCxmLmdldEFs%0AbFJlc3BvbnNlSGVhZGVycygpKSl9fSxmLm9ubG9hZD1iKCksZi5vbmVycm9yPWIo%0AImVycm9yIiksYj1EY1tnXT1iKCJhYm9ydCIpO3RyeXtmLnNlbmQoYS5oYXNDb250%0AZW50JiZhLmRhdGF8fG51bGwpfWNhdGNoKGgpe2lmKGIpdGhyb3cgaH19LGFib3J0%0AOmZ1bmN0aW9uKCl7YiYmYigpfX06dm9pZCAwfSksbi5hamF4U2V0dXAoe2FjY2Vw%0AdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2Ny%0AaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFz%0AY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi8oPzpqYXZhfGVjbWEpc2NyaXB0L30s%0AY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihhKXtyZXR1cm4gbi5n%0AbG9iYWxFdmFsKGEpLGF9fX0pLG4uYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5j%0AdGlvbihhKXt2b2lkIDA9PT1hLmNhY2hlJiYoYS5jYWNoZT0hMSksYS5jcm9zc0Rv%0AbWFpbiYmKGEudHlwZT0iR0VUIil9KSxuLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIs%0AZnVuY3Rpb24oYSl7aWYoYS5jcm9zc0RvbWFpbil7dmFyIGIsYztyZXR1cm57c2Vu%0AZDpmdW5jdGlvbihkLGUpe2I9bigiPHNjcmlwdD4iKS5wcm9wKHthc3luYzohMCxj%0AaGFyc2V0OmEuc2NyaXB0Q2hhcnNldCxzcmM6YS51cmx9KS5vbigibG9hZCBlcnJv%0AciIsYz1mdW5jdGlvbihhKXtiLnJlbW92ZSgpLGM9bnVsbCxhJiZlKCJlcnJvciI9%0APT1hLnR5cGU/NDA0OjIwMCxhLnR5cGUpfSksbC5oZWFkLmFwcGVuZENoaWxkKGJb%0AMF0pfSxhYm9ydDpmdW5jdGlvbigpe2MmJmMoKX19fX0pO3ZhciBHYz1bXSxIYz0v%0AKD0pXD8oPz0mfCQpfFw/XD8vO24uYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2si%0ALGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgYT1HYy5wb3AoKXx8bi5leHBh%0AbmRvKyJfIitjYysrO3JldHVybiB0aGlzW2FdPSEwLGF9fSksbi5hamF4UHJlZmls%0AdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihiLGMsZCl7dmFyIGUsZixnLGg9Yi5q%0Ac29ucCE9PSExJiYoSGMudGVzdChiLnVybCk/InVybCI6InN0cmluZyI9PXR5cGVv%0AZiBiLmRhdGEmJiEoYi5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0%0AaW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZIYy50ZXN0KGIuZGF0YSkmJiJk%0AYXRhIik7cmV0dXJuIGh8fCJqc29ucCI9PT1iLmRhdGFUeXBlc1swXT8oZT1iLmpz%0Ab25wQ2FsbGJhY2s9bi5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29u%0AcENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGg/YltoXT1iW2hdLnJlcGxhY2Uo%0ASGMsIiQxIitlKTpiLmpzb25wIT09ITEmJihiLnVybCs9KGRjLnRlc3QoYi51cmwp%0APyImIjoiPyIpK2IuanNvbnArIj0iK2UpLGIuY29udmVydGVyc1sic2NyaXB0IGpz%0Ab24iXT1mdW5jdGlvbigpe3JldHVybiBnfHxuLmVycm9yKGUrIiB3YXMgbm90IGNh%0AbGxlZCIpLGdbMF19LGIuZGF0YVR5cGVzWzBdPSJqc29uIixmPWFbZV0sYVtlXT1m%0AdW5jdGlvbigpe2c9YXJndW1lbnRzfSxkLmFsd2F5cyhmdW5jdGlvbigpe2FbZV09%0AZixiW2VdJiYoYi5qc29ucENhbGxiYWNrPWMuanNvbnBDYWxsYmFjayxHYy5wdXNo%0AKGUpKSxnJiZuLmlzRnVuY3Rpb24oZikmJmYoZ1swXSksZz1mPXZvaWQgMH0pLCJz%0AY3JpcHQiKTp2b2lkIDB9KSxuLnBhcnNlSFRNTD1mdW5jdGlvbihhLGIsYyl7aWYo%0AIWF8fCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gbnVsbDsiYm9vbGVhbiI9PXR5%0AcGVvZiBiJiYoYz1iLGI9ITEpLGI9Ynx8bDt2YXIgZD12LmV4ZWMoYSksZT0hYyYm%0AW107cmV0dXJuIGQ/W2IuY3JlYXRlRWxlbWVudChkWzFdKV06KGQ9bi5idWlsZEZy%0AYWdtZW50KFthXSxiLGUpLGUmJmUubGVuZ3RoJiZuKGUpLnJlbW92ZSgpLG4ubWVy%0AZ2UoW10sZC5jaGlsZE5vZGVzKSl9O3ZhciBJYz1uLmZuLmxvYWQ7bi5mbi5sb2Fk%0APWZ1bmN0aW9uKGEsYixjKXtpZigic3RyaW5nIiE9dHlwZW9mIGEmJkljKXJldHVy%0AbiBJYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGQsZSxmLGc9dGhpcyxoPWEu%0AaW5kZXhPZigiICIpO3JldHVybiBoPj0wJiYoZD1uLnRyaW0oYS5zbGljZShoKSks%0AYT1hLnNsaWNlKDAsaCkpLG4uaXNGdW5jdGlvbihiKT8oYz1iLGI9dm9pZCAwKTpi%0AJiYib2JqZWN0Ij09dHlwZW9mIGImJihlPSJQT1NUIiksZy5sZW5ndGg+MCYmbi5h%0AamF4KHt1cmw6YSx0eXBlOmUsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yn0pLmRvbmUo%0AZnVuY3Rpb24oYSl7Zj1hcmd1bWVudHMsZy5odG1sKGQ/bigiPGRpdj4iKS5hcHBl%0AbmQobi5wYXJzZUhUTUwoYSkpLmZpbmQoZCk6YSl9KS5jb21wbGV0ZShjJiZmdW5j%0AdGlvbihhLGIpe2cuZWFjaChjLGZ8fFthLnJlc3BvbnNlVGV4dCxiLGFdKX0pLHRo%0AaXN9LG4uZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGEpe3JldHVybiBu%0ALmdyZXAobi50aW1lcnMsZnVuY3Rpb24oYil7cmV0dXJuIGE9PT1iLmVsZW19KS5s%0AZW5ndGh9O3ZhciBKYz1hLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtmdW5jdGlv%0AbiBLYyhhKXtyZXR1cm4gbi5pc1dpbmRvdyhhKT9hOjk9PT1hLm5vZGVUeXBlJiZh%0ALmRlZmF1bHRWaWV3fW4ub2Zmc2V0PXtzZXRPZmZzZXQ6ZnVuY3Rpb24oYSxiLGMp%0Ae3ZhciBkLGUsZixnLGgsaSxqLGs9bi5jc3MoYSwicG9zaXRpb24iKSxsPW4oYSks%0AbT17fTsic3RhdGljIj09PWsmJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIp%0ALGg9bC5vZmZzZXQoKSxmPW4uY3NzKGEsInRvcCIpLGk9bi5jc3MoYSwibGVmdCIp%0ALGo9KCJhYnNvbHV0ZSI9PT1rfHwiZml4ZWQiPT09aykmJihmK2kpLmluZGV4T2Yo%0AImF1dG8iKT4tMSxqPyhkPWwucG9zaXRpb24oKSxnPWQudG9wLGU9ZC5sZWZ0KToo%0AZz1wYXJzZUZsb2F0KGYpfHwwLGU9cGFyc2VGbG9hdChpKXx8MCksbi5pc0Z1bmN0%0AaW9uKGIpJiYoYj1iLmNhbGwoYSxjLGgpKSxudWxsIT1iLnRvcCYmKG0udG9wPWIu%0AdG9wLWgudG9wK2cpLG51bGwhPWIubGVmdCYmKG0ubGVmdD1iLmxlZnQtaC5sZWZ0%0AK2UpLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLG0pOmwuY3NzKG0pfX0sbi5m%0Abi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3Ro%0AKXJldHVybiB2b2lkIDA9PT1hP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe24u%0Ab2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTt2YXIgYixjLGQ9dGhpc1swXSxl%0APXt0b3A6MCxsZWZ0OjB9LGY9ZCYmZC5vd25lckRvY3VtZW50O2lmKGYpcmV0dXJu%0AIGI9Zi5kb2N1bWVudEVsZW1lbnQsbi5jb250YWlucyhiLGQpPyh0eXBlb2YgZC5n%0AZXRCb3VuZGluZ0NsaWVudFJlY3QhPT1VJiYoZT1kLmdldEJvdW5kaW5nQ2xpZW50%0AUmVjdCgpKSxjPUtjKGYpLHt0b3A6ZS50b3ArYy5wYWdlWU9mZnNldC1iLmNsaWVu%0AdFRvcCxsZWZ0OmUubGVmdCtjLnBhZ2VYT2Zmc2V0LWIuY2xpZW50TGVmdH0pOmV9%0ALHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGEsYixjPXRoaXNb%0AMF0sZD17dG9wOjAsbGVmdDowfTtyZXR1cm4iZml4ZWQiPT09bi5jc3MoYywicG9z%0AaXRpb24iKT9iPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6KGE9dGhpcy5vZmZz%0AZXRQYXJlbnQoKSxiPXRoaXMub2Zmc2V0KCksbi5ub2RlTmFtZShhWzBdLCJodG1s%0AIil8fChkPWEub2Zmc2V0KCkpLGQudG9wKz1uLmNzcyhhWzBdLCJib3JkZXJUb3BX%0AaWR0aCIsITApLGQubGVmdCs9bi5jc3MoYVswXSwiYm9yZGVyTGVmdFdpZHRoIiwh%0AMCkpLHt0b3A6Yi50b3AtZC50b3Atbi5jc3MoYywibWFyZ2luVG9wIiwhMCksbGVm%0AdDpiLmxlZnQtZC5sZWZ0LW4uY3NzKGMsIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZz%0AZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2%0AYXIgYT10aGlzLm9mZnNldFBhcmVudHx8SmM7d2hpbGUoYSYmIW4ubm9kZU5hbWUo%0AYSwiaHRtbCIpJiYic3RhdGljIj09PW4uY3NzKGEsInBvc2l0aW9uIikpYT1hLm9m%0AZnNldFBhcmVudDtyZXR1cm4gYXx8SmN9KX19KSxuLmVhY2goe3Njcm9sbExlZnQ6%0AInBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24o%0AYixjKXt2YXIgZD0icGFnZVlPZmZzZXQiPT09YztuLmZuW2JdPWZ1bmN0aW9uKGUp%0Ae3JldHVybiBKKHRoaXMsZnVuY3Rpb24oYixlLGYpe3ZhciBnPUtjKGIpO3JldHVy%0AbiB2b2lkIDA9PT1mP2c/Z1tjXTpiW2VdOnZvaWQoZz9nLnNjcm9sbFRvKGQ/YS5w%0AYWdlWE9mZnNldDpmLGQ/ZjphLnBhZ2VZT2Zmc2V0KTpiW2VdPWYpfSxiLGUsYXJn%0AdW1lbnRzLmxlbmd0aCxudWxsKX19KSxuLmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVu%0AY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2JdPXliKGsucGl4ZWxQb3NpdGlvbixmdW5j%0AdGlvbihhLGMpe3JldHVybiBjPyhjPXhiKGEsYiksdmIudGVzdChjKT9uKGEpLnBv%0Ac2l0aW9uKClbYl0rInB4IjpjKTp2b2lkIDB9KX0pLG4uZWFjaCh7SGVpZ2h0OiJo%0AZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGEsYil7bi5lYWNoKHtwYWRk%0AaW5nOiJpbm5lciIrYSxjb250ZW50OmIsIiI6Im91dGVyIithfSxmdW5jdGlvbihj%0ALGQpe24uZm5bZF09ZnVuY3Rpb24oZCxlKXt2YXIgZj1hcmd1bWVudHMubGVuZ3Ro%0AJiYoY3x8ImJvb2xlYW4iIT10eXBlb2YgZCksZz1jfHwoZD09PSEwfHxlPT09ITA/%0AIm1hcmdpbiI6ImJvcmRlciIpO3JldHVybiBKKHRoaXMsZnVuY3Rpb24oYixjLGQp%0Ae3ZhciBlO3JldHVybiBuLmlzV2luZG93KGIpP2IuZG9jdW1lbnQuZG9jdW1lbnRF%0AbGVtZW50WyJjbGllbnQiK2FdOjk9PT1iLm5vZGVUeXBlPyhlPWIuZG9jdW1lbnRF%0AbGVtZW50LE1hdGgubWF4KGIuYm9keVsic2Nyb2xsIithXSxlWyJzY3JvbGwiK2Fd%0ALGIuYm9keVsib2Zmc2V0IithXSxlWyJvZmZzZXQiK2FdLGVbImNsaWVudCIrYV0p%0AKTp2b2lkIDA9PT1kP24uY3NzKGIsYyxnKTpuLnN0eWxlKGIsYyxkLGcpfSxiLGY/%0AZDp2b2lkIDAsZixudWxsKX19KX0pLG4uZm4uc2l6ZT1mdW5jdGlvbigpe3JldHVy%0AbiB0aGlzLmxlbmd0aH0sbi5mbi5hbmRTZWxmPW4uZm4uYWRkQmFjaywiZnVuY3Rp%0Ab24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIs%0AW10sZnVuY3Rpb24oKXtyZXR1cm4gbn0pO3ZhciBMYz1hLmpRdWVyeSxNYz1hLiQ7%0AcmV0dXJuIG4ubm9Db25mbGljdD1mdW5jdGlvbihiKXtyZXR1cm4gYS4kPT09biYm%0AKGEuJD1NYyksYiYmYS5qUXVlcnk9PT1uJiYoYS5qUXVlcnk9TGMpLG59LHR5cGVv%0AZiBiPT09VSYmKGEualF1ZXJ5PWEuJD1uKSxufSk7Ci8vIyBzb3VyY2VNYXBwaW5n%0AVVJMPWpxdWVyeS5taW4ubWFwPC9zY3JpcHQ+DQogICAgICA8IS0tIGQzLnNsaWRl%0Aci5qcyBsaWJyYXJ5IC0tPg0KICAgICAgPHNjcmlwdD4vKg0KICAgIEQzLmpzIFNs%0AaWRlcg0KICAgIEluc3BpcmVkIGJ5IGpRdWVyeSBVSSBTbGlkZXINCiAgICBDb3B5%0AcmlnaHQgKGMpIDIwMTMsIEJqb3JuIFNhbmR2aWsgLSBodHRwOi8vYmxvZy50aGVt%0AYXRpY21hcHBpbmcub3JnDQogICAgQlNEIGxpY2Vuc2U6IGh0dHA6Ly9vcGVuc291%0AcmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UNCiovDQooZnVuY3Rpb24gKHJv%0Ab3QsIGZhY3RvcnkpIHsNCiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlv%0AbicgJiYgZGVmaW5lLmFtZCkgew0KICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4g%0AYW5vbnltb3VzIG1vZHVsZS4NCiAgICBkZWZpbmUoWydkMyddLCBmYWN0b3J5KTsN%0ACiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHsNCiAg%0AICBpZiAocHJvY2Vzcy5icm93c2VyKSB7DQogICAgICAvLyBCcm93c2VyaWZ5LiBJ%0AbXBvcnQgY3NzIHRvbyB1c2luZyBjc3NpZnkuDQogICAgICByZXF1aXJlKCcuL2Qz%0ALnNsaWRlci5jc3MnKTsNCiAgICB9DQogICAgLy8gTm9kZS4gRG9lcyBub3Qgd29y%0AayB3aXRoIHN0cmljdCBDb21tb25KUywgYnV0DQogICAgLy8gb25seSBDb21tb25K%0AUy1saWtlIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMs%0ADQogICAgLy8gbGlrZSBOb2RlLg0KICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9y%0AeShyZXF1aXJlKCdkMycpKTsNCiAgfSBlbHNlIHsNCiAgICAvLyBCcm93c2VyIGds%0Ab2JhbHMgKHJvb3QgaXMgd2luZG93KQ0KICAgIHJvb3QuZDMuc2xpZGVyID0gZmFj%0AdG9yeShyb290LmQzKTsNCiAgfQ0KfSh0aGlzLCBmdW5jdGlvbiAoZDMpIHsNCnJl%0AdHVybiBmdW5jdGlvbiBtb2R1bGUoKSB7DQogICJ1c2Ugc3RyaWN0IjsNCg0KICAv%0ALyBQdWJsaWMgdmFyaWFibGVzIHdpZHRoIGRlZmF1bHQgc2V0dGluZ3MNCiAgdmFy%0AIG1pbiA9IDAsDQogICAgICBtYXggPSAxMDAsDQogICAgICBzdGVwID0gMC4wMSwN%0ACiAgICAgIGFuaW1hdGUgPSB0cnVlLA0KICAgICAgb3JpZW50YXRpb24gPSAiaG9y%0AaXpvbnRhbCIsDQogICAgICBheGlzID0gZmFsc2UsDQogICAgICBtYXJnaW4gPSA1%0AMCwNCiAgICAgIHZhbHVlLA0KICAgICAgYWN0aXZlID0gMSwNCiAgICAgIHNjYWxl%0ALA0KICAgICAgaW50ZXJ2YWw9MTsNCg0KICAvLyBQcml2YXRlIHZhcmlhYmxlcw0K%0AICB2YXIgYXhpc1NjYWxlLA0KICAgICAgZGlzcGF0Y2ggPSBkMy5kaXNwYXRjaCgi%0Ac2xpZGUiLCAic2xpZGVlbmQiKSwNCiAgICAgIGZvcm1hdFBlcmNlbnQgPSBkMy5m%0Ab3JtYXQoIi4yJSIpLA0KICAgICAgdGlja0Zvcm1hdCA9IGQzLmZvcm1hdCgiLjAi%0AKSwNCiAgICAgIGhhbmRsZTEsDQogICAgICBoYW5kbGUyID0gbnVsbCwNCiAgICAg%0AIHNsaWRlckxlbmd0aDsNCg0KICBmdW5jdGlvbiBzbGlkZXIoc2VsZWN0aW9uKSB7%0ADQogICAgc2VsZWN0aW9uLmVhY2goZnVuY3Rpb24oKSB7DQoNCiAgICAgIC8vIENy%0AZWF0ZSBzY2FsZSBpZiBub3QgZGVmaW5lZCBieSB1c2VyDQogICAgICBpZiAoIXNj%0AYWxlKSB7DQogICAgICAgIHNjYWxlID0gZDMuc2NhbGUubGluZWFyKCkuZG9tYWlu%0AKFttaW4sIG1heF0pOw0KICAgICAgfQ0KDQogICAgICAvLyBTdGFydCB2YWx1ZQ0K%0AICAgICAgdmFsdWUgPSB2YWx1ZSB8fCBzY2FsZS5kb21haW4oKVswXTsNCg0KICAg%0AICAgLy8gRElWIGNvbnRhaW5lcg0KICAgICAgdmFyIGRpdiA9IGQzLnNlbGVjdCh0%0AaGlzKS5jbGFzc2VkKCJkMy1zbGlkZXIgZDMtc2xpZGVyLSIgKyBvcmllbnRhdGlv%0AbiwgdHJ1ZSk7DQogICAgICANCiAgICAgIHZhciBkcmFnID0gZDMuYmVoYXZpb3Iu%0AZHJhZygpOw0KICAgICAgZHJhZy5vbignZHJhZ2VuZCcsIGZ1bmN0aW9uICgpIHsN%0ACiAgICAgICAgZGlzcGF0Y2guc2xpZGVlbmQoZDMuZXZlbnQsIHZhbHVlKTsNCiAg%0AICAgIH0pDQoNCiAgICAgIC8vIFNsaWRlciBoYW5kbGUNCiAgICAgIC8vaWYgcmFu%0AZ2Ugc2xpZGVyLCBjcmVhdGUgdHdvDQogICAgICB2YXIgZGl2UmFuZ2U7DQoNCiAg%0AICAgIGlmICggdmFsdWUubGVuZ3RoID09IDIgKSB7DQogICAgICAgIGhhbmRsZTEg%0APSBkaXYuYXBwZW5kKCJhIikNCiAgICAgICAgICAuY2xhc3NlZCgiZDMtc2xpZGVy%0ALWhhbmRsZSIsIHRydWUpDQogICAgICAgICAgLmF0dHIoInhsaW5rOmhyZWYiLCAi%0AIyIpDQogICAgICAgICAgLmF0dHIoJ2lkJywgImhhbmRsZS1vbmUiKQ0KICAgICAg%0AICAgIC5vbigiY2xpY2siLCBzdG9wUHJvcGFnYXRpb24pDQogICAgICAgICAgLmNh%0AbGwoZHJhZyk7DQogICAgICAgIGhhbmRsZTIgPSBkaXYuYXBwZW5kKCJhIikNCiAg%0AICAgICAgICAuY2xhc3NlZCgiZDMtc2xpZGVyLWhhbmRsZSIsIHRydWUpDQogICAg%0AICAgICAgLmF0dHIoJ2lkJywgImhhbmRsZS10d28iKQ0KICAgICAgICAgIC5hdHRy%0AKCJ4bGluazpocmVmIiwgIiMiKQ0KICAgICAgICAgIC5vbigiY2xpY2siLCBzdG9w%0AUHJvcGFnYXRpb24pDQogICAgICAgICAgLmNhbGwoZHJhZyk7DQogICAgICB9IGVs%0Ac2Ugew0KICAgICAgICBoYW5kbGUxID0gZGl2LmFwcGVuZCgiYSIpDQogICAgICAg%0AICAgLmNsYXNzZWQoImQzLXNsaWRlci1oYW5kbGUiLCB0cnVlKQ0KICAgICAgICAg%0AIC5hdHRyKCJ4bGluazpocmVmIiwgIiMiKQ0KICAgICAgICAgIC5hdHRyKCdpZCcs%0AICJoYW5kbGUtb25lIikNCiAgICAgICAgICAub24oImNsaWNrIiwgc3RvcFByb3Bh%0AZ2F0aW9uKQ0KICAgICAgICAgIC5jYWxsKGRyYWcpOw0KICAgICAgfQ0KICAgICAg%0ALy8gSG9yaXpvbnRhbCBzbGlkZXINCiAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0g%0AImhvcml6b250YWwiKSB7DQoNCiAgICAgICAgZGl2Lm9uKCJjbGljayIsIG9uQ2xp%0AY2tIb3Jpem9udGFsKTsNCiAgICAgICAgDQogICAgICAgIGlmICggdmFsdWUubGVu%0AZ3RoID09IDIgKSB7DQogICAgICAgICAgZGl2UmFuZ2UgPSBkMy5zZWxlY3QodGhp%0AcykuYXBwZW5kKCdkaXYnKS5jbGFzc2VkKCJkMy1zbGlkZXItcmFuZ2UiLCB0cnVl%0AKTsNCg0KICAgICAgICAgIGhhbmRsZTEuc3R5bGUoImxlZnQiLCBmb3JtYXRQZXJj%0AZW50KHNjYWxlKHZhbHVlWyAwIF0pKSk7DQogICAgICAgICAgZGl2UmFuZ2Uuc3R5%0AbGUoImxlZnQiLCBmb3JtYXRQZXJjZW50KHNjYWxlKHZhbHVlWyAwIF0pKSk7DQog%0AICAgICAgICAgZHJhZy5vbigiZHJhZyIsIG9uRHJhZ0hvcml6b250YWwpOw0KDQog%0AICAgICAgICAgdmFyIHdpZHRoID0gMTAwIC0gcGFyc2VGbG9hdChmb3JtYXRQZXJj%0AZW50KHNjYWxlKHZhbHVlWyAxIF0pKSk7DQogICAgICAgICAgaGFuZGxlMi5zdHls%0AZSgibGVmdCIsIGZvcm1hdFBlcmNlbnQoc2NhbGUodmFsdWVbIDEgXSkpKTsNCiAg%0AICAgICAgICBkaXZSYW5nZS5zdHlsZSgicmlnaHQiLCB3aWR0aCsiJSIpOw0KICAg%0AICAgICAgIGRyYWcub24oImRyYWciLCBvbkRyYWdIb3Jpem9udGFsKTsNCg0KICAg%0AICAgICB9IGVsc2Ugew0KICAgICAgICAgIGhhbmRsZTEuc3R5bGUoImxlZnQiLCBm%0Ab3JtYXRQZXJjZW50KHNjYWxlKHZhbHVlKSkpOw0KICAgICAgICAgIGRyYWcub24o%0AImRyYWciLCBvbkRyYWdIb3Jpem9udGFsKTsNCiAgICAgICAgfQ0KICAgICAgICAN%0ACg0KICAgICAgICBzbGlkZXJMZW5ndGggPSBwYXJzZUludChkaXYuc3R5bGUoIndp%0AZHRoIiksIDEwKTsNCiAgICAgICAgaGFuZGxlMS5zdHlsZSgnd2lkdGgnLCAoKHNj%0AYWxlKGludGVydmFsK21pbikqc2xpZGVyTGVuZ3RoKSkrJ3B4JykNCg0KICAgICAg%0AfSBlbHNlIHsgLy8gVmVydGljYWwNCg0KICAgICAgICBkaXYub24oImNsaWNrIiwg%0Ab25DbGlja1ZlcnRpY2FsKTsNCiAgICAgICAgZHJhZy5vbigiZHJhZyIsIG9uRHJh%0AZ1ZlcnRpY2FsKTsNCiAgICAgICAgaWYgKCB2YWx1ZS5sZW5ndGggPT0gMiApIHsN%0ACiAgICAgICAgICBkaXZSYW5nZSA9IGQzLnNlbGVjdCh0aGlzKS5hcHBlbmQoJ2Rp%0AdicpLmNsYXNzZWQoImQzLXNsaWRlci1yYW5nZS12ZXJ0aWNhbCIsIHRydWUpOw0K%0ADQogICAgICAgICAgaGFuZGxlMS5zdHlsZSgiYm90dG9tIiwgZm9ybWF0UGVyY2Vu%0AdChzY2FsZSh2YWx1ZVsgMCBdKSkpOw0KICAgICAgICAgIGRpdlJhbmdlLnN0eWxl%0AKCJib3R0b20iLCBmb3JtYXRQZXJjZW50KHNjYWxlKHZhbHVlWyAwIF0pKSk7DQog%0AICAgICAgICAgZHJhZy5vbigiZHJhZyIsIG9uRHJhZ1ZlcnRpY2FsKTsNCg0KICAg%0AICAgICAgIHZhciB0b3AgPSAxMDAgLSBwYXJzZUZsb2F0KGZvcm1hdFBlcmNlbnQo%0Ac2NhbGUodmFsdWVbIDEgXSkpKTsNCiAgICAgICAgICBoYW5kbGUyLnN0eWxlKCJi%0Ab3R0b20iLCBmb3JtYXRQZXJjZW50KHNjYWxlKHZhbHVlWyAxIF0pKSk7DQogICAg%0AICAgICAgZGl2UmFuZ2Uuc3R5bGUoInRvcCIsIHRvcCsiJSIpOw0KICAgICAgICAg%0AIGRyYWcub24oImRyYWciLCBvbkRyYWdWZXJ0aWNhbCk7DQoNCiAgICAgICAgfSBl%0AbHNlIHsNCiAgICAgICAgICBoYW5kbGUxLnN0eWxlKCJib3R0b20iLCBmb3JtYXRQ%0AZXJjZW50KHNjYWxlKHZhbHVlKSkpOw0KICAgICAgICAgIGRyYWcub24oImRyYWci%0ALCBvbkRyYWdWZXJ0aWNhbCk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAg%0AIHNsaWRlckxlbmd0aCA9IHBhcnNlSW50KGRpdi5zdHlsZSgiaGVpZ2h0IiksIDEw%0AKTsNCg0KICAgICAgfQ0KICAgICAgDQogICAgICBpZiAoYXhpcykgew0KICAgICAg%0AICBjcmVhdGVBeGlzKGRpdik7DQogICAgICB9DQoNCg0KICAgICAgZnVuY3Rpb24g%0AY3JlYXRlQXhpcyhkb20pIHsNCg0KICAgICAgICAvLyBDcmVhdGUgYXhpcyBpZiBu%0Ab3QgZGVmaW5lZCBieSB1c2VyDQogICAgICAgIGlmICh0eXBlb2YgYXhpcyA9PT0g%0AImJvb2xlYW4iKSB7DQoNCiAgICAgICAgICBheGlzID0gZDMuc3ZnLmF4aXMoKQ0K%0AICAgICAgICAgICAgICAudGlja3MoTWF0aC5yb3VuZChzbGlkZXJMZW5ndGggLyAx%0AMDApKQ0KICAgICAgICAgICAgICAudGlja0Zvcm1hdCh0aWNrRm9ybWF0KQ0KICAg%0AICAgICAgICAgICAub3JpZW50KChvcmllbnRhdGlvbiA9PT0gImhvcml6b250YWwi%0AKSA/ICJib3R0b20iIDogICJyaWdodCIpOw0KDQogICAgICAgIH0NCg0KICAgICAg%0AICAvLyBDb3B5IHNsaWRlciBzY2FsZSB0byBtb3ZlIGZyb20gcGVyY2VudGFnZXMg%0AdG8gcGl4ZWxzDQogICAgICAgIGF4aXNTY2FsZSA9IHNjYWxlLmNvcHkoKS5yYW5n%0AZShbMCwgc2xpZGVyTGVuZ3RoXSk7DQogICAgICAgICAgYXhpcy5zY2FsZShheGlz%0AU2NhbGUpOw0KDQogICAgICAgICAgLy8gQ3JlYXRlIFNWRyBheGlzIGNvbnRhaW5l%0Acg0KICAgICAgICB2YXIgc3ZnID0gZG9tLmFwcGVuZCgic3ZnIikNCiAgICAgICAg%0AICAgIC5jbGFzc2VkKCJkMy1zbGlkZXItYXhpcyBkMy1zbGlkZXItYXhpcy0iICsg%0AYXhpcy5vcmllbnQoKSwgdHJ1ZSkNCiAgICAgICAgICAgIC5vbigiY2xpY2siLCBz%0AdG9wUHJvcGFnYXRpb24pOw0KDQogICAgICAgIHZhciBnID0gc3ZnLmFwcGVuZCgi%0AZyIpOw0KDQogICAgICAgIC8vIEhvcml6b250YWwgYXhpcw0KICAgICAgICBpZiAo%0Ab3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIikgew0KDQogICAgICAgICAgc3Zn%0ALnN0eWxlKCJtYXJnaW4tbGVmdCIsIC1tYXJnaW4gKyAicHgiKTsNCg0KICAgICAg%0AICAgIHN2Zy5hdHRyKHsNCiAgICAgICAgICAgIHdpZHRoOiBzbGlkZXJMZW5ndGgg%0AKyBtYXJnaW4gKiAyLA0KICAgICAgICAgICAgaGVpZ2h0OiBtYXJnaW4NCiAgICAg%0AICAgICB9KTsNCg0KICAgICAgICAgIGlmIChheGlzLm9yaWVudCgpID09PSAidG9w%0AIikgew0KICAgICAgICAgICAgc3ZnLnN0eWxlKCJ0b3AiLCAtbWFyZ2luICsgInB4%0AIik7DQogICAgICAgICAgICBnLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUo%0AIiArIG1hcmdpbiArICIsIiArIG1hcmdpbiArICIpIik7DQogICAgICAgICAgfSBl%0AbHNlIHsgLy8gYm90dG9tDQogICAgICAgICAgICBnLmF0dHIoInRyYW5zZm9ybSIs%0AICJ0cmFuc2xhdGUoIiArIG1hcmdpbiArICIsMCkiKTsNCiAgICAgICAgICB9DQoN%0ACiAgICAgICAgfSBlbHNlIHsgLy8gVmVydGljYWwNCg0KICAgICAgICAgIHN2Zy5z%0AdHlsZSgidG9wIiwgLW1hcmdpbiArICJweCIpOw0KDQogICAgICAgICAgc3ZnLmF0%0AdHIoew0KICAgICAgICAgICAgd2lkdGg6IG1hcmdpbiwNCiAgICAgICAgICAgIGhl%0AaWdodDogc2xpZGVyTGVuZ3RoICsgbWFyZ2luICogMg0KICAgICAgICAgIH0pOw0K%0ADQogICAgICAgICAgaWYgKGF4aXMub3JpZW50KCkgPT09ICJsZWZ0Iikgew0KICAg%0AICAgICAgICAgc3ZnLnN0eWxlKCJsZWZ0IiwgLW1hcmdpbiArICJweCIpOw0KICAg%0AICAgICAgICAgZy5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKCIgKyBtYXJn%0AaW4gKyAiLCIgKyBtYXJnaW4gKyAiKSIpOw0KICAgICAgICAgIH0gZWxzZSB7IC8v%0AIHJpZ2h0ICAgICAgICAgIA0KICAgICAgICAgICAgZy5hdHRyKCJ0cmFuc2Zvcm0i%0ALCAidHJhbnNsYXRlKCIgKyAwICsgIiwiICsgbWFyZ2luICsgIikiKTsNCiAgICAg%0AICAgICB9DQoNCiAgICAgICAgfQ0KDQogICAgICAgIGcuY2FsbChheGlzKTsNCg0K%0AICAgICAgfQ0KDQogICAgICBmdW5jdGlvbiBvbkNsaWNrSG9yaXpvbnRhbCgpIHsN%0ACiAgICAgICAgaWYgKCF2YWx1ZS5sZW5ndGgpIHsNCiAgICAgICAgICB2YXIgcG9z%0AID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2xpZGVyTGVuZ3RoLCBkMy5ldmVudC5v%0AZmZzZXRYIHx8IGQzLmV2ZW50LmxheWVyWCkpOw0KICAgICAgICAgIG1vdmVIYW5k%0AbGUoc3RlcFZhbHVlKHNjYWxlLmludmVydChwb3MgLyBzbGlkZXJMZW5ndGgpKSk7%0ADQogICAgICAgIH0NCiAgICAgIH0NCg0KICAgICAgZnVuY3Rpb24gb25DbGlja1Zl%0AcnRpY2FsKCkgew0KICAgICAgICBpZiAoIXZhbHVlLmxlbmd0aCkgew0KICAgICAg%0AICAgIHZhciBwb3MgPSBzbGlkZXJMZW5ndGggLSBNYXRoLm1heCgwLCBNYXRoLm1p%0AbihzbGlkZXJMZW5ndGgsIGQzLmV2ZW50Lm9mZnNldFkgfHwgZDMuZXZlbnQubGF5%0AZXJZKSk7DQogICAgICAgICAgbW92ZUhhbmRsZShzdGVwVmFsdWUoc2NhbGUuaW52%0AZXJ0KHBvcyAvIHNsaWRlckxlbmd0aCkpKTsNCiAgICAgICAgfQ0KICAgICAgfQ0K%0ADQogICAgICBmdW5jdGlvbiBvbkRyYWdIb3Jpem9udGFsKCkgew0KICAgICAgICBp%0AZiAoIGQzLmV2ZW50LnNvdXJjZUV2ZW50LnRhcmdldC5pZCA9PT0gImhhbmRsZS1v%0AbmUiKSB7DQogICAgICAgICAgYWN0aXZlID0gMTsNCiAgICAgICAgfSBlbHNlIGlm%0AICggZDMuZXZlbnQuc291cmNlRXZlbnQudGFyZ2V0LmlkID09ICJoYW5kbGUtdHdv%0AIiApIHsNCiAgICAgICAgICBhY3RpdmUgPSAyOw0KICAgICAgICB9DQogICAgICAg%0AIHZhciBwb3MgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzbGlkZXJMZW5ndGgsIGQz%0ALmV2ZW50LngpKTsNCiAgICAgICAgbW92ZUhhbmRsZShzdGVwVmFsdWUoc2NhbGUu%0AaW52ZXJ0KHBvcyAvIHNsaWRlckxlbmd0aCkpKTsNCiAgICAgIH0NCg0KICAgICAg%0AZnVuY3Rpb24gb25EcmFnVmVydGljYWwoKSB7DQogICAgICAgIGlmICggZDMuZXZl%0AbnQuc291cmNlRXZlbnQudGFyZ2V0LmlkID09PSAiaGFuZGxlLW9uZSIpIHsNCiAg%0AICAgICAgICBhY3RpdmUgPSAxOw0KICAgICAgICB9IGVsc2UgaWYgKCBkMy5ldmVu%0AdC5zb3VyY2VFdmVudC50YXJnZXQuaWQgPT0gImhhbmRsZS10d28iICkgew0KICAg%0AICAgICAgIGFjdGl2ZSA9IDI7DQogICAgICAgIH0NCiAgICAgICAgdmFyIHBvcyA9%0AIHNsaWRlckxlbmd0aCAtIE1hdGgubWF4KDAsIE1hdGgubWluKHNsaWRlckxlbmd0%0AaCwgZDMuZXZlbnQueSkpDQogICAgICAgIG1vdmVIYW5kbGUoc3RlcFZhbHVlKHNj%0AYWxlLmludmVydChwb3MgLyBzbGlkZXJMZW5ndGgpKSk7DQogICAgICB9DQoNCiAg%0AICAgIGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbigpIHsNCiAgICAgICAgZDMuZXZl%0AbnQuc3RvcFByb3BhZ2F0aW9uKCk7DQogICAgICB9DQoNCiAgICB9KTsNCg0KICB9%0ADQoNCiAgLy8gTW92ZSBzbGlkZXIgaGFuZGxlIG9uIGNsaWNrL2RyYWcNCiAgZnVu%0AY3Rpb24gbW92ZUhhbmRsZShuZXdWYWx1ZSkgeyANCiAgICBpZiAoc2xpZGVyLm1h%0AeCgpLXNsaWRlci5pbnRlcnZhbCgpIDwgbmV3VmFsdWUpIHsgDQogICAgICBuZXdW%0AYWx1ZSA9IHNsaWRlci5tYXgoKSAtIHNsaWRlci5pbnRlcnZhbCgpOw0KICAgIH0N%0ACg0KICAgIHZhciBjdXJyZW50VmFsdWUgPSB2YWx1ZS5sZW5ndGggPyB2YWx1ZVth%0AY3RpdmUgLSAxXTogdmFsdWU7DQoNCiAgICBpZiAoY3VycmVudFZhbHVlICE9PSBu%0AZXdWYWx1ZSkgew0KICAgICAgdmFyIG9sZFBvcyA9IGZvcm1hdFBlcmNlbnQoc2Nh%0AbGUoc3RlcFZhbHVlKGN1cnJlbnRWYWx1ZSkpKSwNCiAgICAgICAgICBuZXdQb3Mg%0APSBmb3JtYXRQZXJjZW50KHNjYWxlKHN0ZXBWYWx1ZShuZXdWYWx1ZSkpKSwNCiAg%0AICAgICAgICBwb3NpdGlvbiA9IChvcmllbnRhdGlvbiA9PT0gImhvcml6b250YWwi%0AKSA/ICJsZWZ0IiA6ICJib3R0b20iOw0KDQogICAgICBpZiAoIHZhbHVlLmxlbmd0%0AaCA9PT0gMikgew0KICAgICAgICB2YWx1ZVsgYWN0aXZlIC0gMSBdID0gbmV3VmFs%0AdWU7DQogICAgICAgIGlmIChkMy5ldmVudCkgew0KICAgICAgICAgIGRpc3BhdGNo%0ALnNsaWRlKGQzLmV2ZW50LCB2YWx1ZSApOw0KICAgICAgICB9Ow0KICAgICAgfSBl%0AbHNlIHsNCiAgICAgICAgaWYgKGQzLmV2ZW50KSB7DQogICAgICAgICAgZGlzcGF0%0AY2guc2xpZGUoZDMuZXZlbnQuc291cmNlRXZlbnQgfHwgZDMuZXZlbnQsIHZhbHVl%0AID0gbmV3VmFsdWUpOw0KICAgICAgICB9Ow0KICAgICAgfQ0KDQogICAgICBpZiAo%0AIHZhbHVlWyAwIF0gPj0gdmFsdWVbIDEgXSApIHJldHVybjsNCiAgICAgIGlmICgg%0AYWN0aXZlID09PSAxICkgew0KICAgICAgICANCiAgICAgICAgaWYgKHZhbHVlLmxl%0Abmd0aCA9PT0gMikgew0KICAgICAgICAgIChwb3NpdGlvbiA9PT0gImxlZnQiKSA/%0AIGRpdlJhbmdlLnN0eWxlKCJsZWZ0IiwgbmV3UG9zKSA6IGRpdlJhbmdlLnN0eWxl%0AKCJib3R0b20iLCBuZXdQb3MpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGFu%0AaW1hdGUpIHsNCiAgICAgICAgICBoYW5kbGUxLnRyYW5zaXRpb24oKQ0KICAgICAg%0AICAgICAgICAuc3R5bGVUd2Vlbihwb3NpdGlvbiwgZnVuY3Rpb24oKSB7IHJldHVy%0AbiBkMy5pbnRlcnBvbGF0ZShvbGRQb3MsIG5ld1Bvcyk7IH0pDQogICAgICAgICAg%0AICAgIC5kdXJhdGlvbigodHlwZW9mIGFuaW1hdGUgPT09ICJudW1iZXIiKSA/IGFu%0AaW1hdGUgOiAyNTApOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIGhhbmRs%0AZTEuc3R5bGUocG9zaXRpb24sIG5ld1Bvcyk7DQogICAgICAgIH0NCiAgICAgIH0g%0AZWxzZSB7DQogICAgICAgIA0KICAgICAgICB2YXIgd2lkdGggPSAxMDAgLSBwYXJz%0AZUZsb2F0KG5ld1Bvcyk7DQogICAgICAgIHZhciB0b3AgPSAxMDAgLSBwYXJzZUZs%0Ab2F0KG5ld1Bvcyk7DQoNCiAgICAgICAgKHBvc2l0aW9uID09PSAibGVmdCIpID8g%0AZGl2UmFuZ2Uuc3R5bGUoInJpZ2h0Iiwgd2lkdGggKyAiJSIpIDogZGl2UmFuZ2Uu%0Ac3R5bGUoInRvcCIsIHRvcCArICIlIik7DQogICAgICAgIA0KICAgICAgICBpZiAo%0AYW5pbWF0ZSkgew0KICAgICAgICAgIGhhbmRsZTIudHJhbnNpdGlvbigpDQogICAg%0AICAgICAgICAgIC5zdHlsZVR3ZWVuKHBvc2l0aW9uLCBmdW5jdGlvbigpIHsgcmV0%0AdXJuIGQzLmludGVycG9sYXRlKG9sZFBvcywgbmV3UG9zKTsgfSkNCiAgICAgICAg%0AICAgICAgLmR1cmF0aW9uKCh0eXBlb2YgYW5pbWF0ZSA9PT0gIm51bWJlciIpID8g%0AYW5pbWF0ZSA6IDI1MCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgaGFu%0AZGxlMi5zdHlsZShwb3NpdGlvbiwgbmV3UG9zKTsNCiAgICAgICAgfQ0KICAgICAg%0AfQ0KICAgIH0NCiAgfQ0KDQogIC8vIENhbGN1bGF0ZSBuZWFyZXN0IHN0ZXAgdmFs%0AdWUNCiAgZnVuY3Rpb24gc3RlcFZhbHVlKHZhbCkgew0KDQogICAgaWYgKHZhbCA9%0APT0gc2NhbGUuZG9tYWluKClbMF0gfHwgdmFsID09PSBzY2FsZS5kb21haW4oKVsx%0AXSkgew0KICAgICAgcmV0dXJuIHZhbDsNCiAgICB9DQoNCiAgICB2YXIgdmFsTW9k%0AU3RlcCA9ICh2YWwgLSBzY2FsZS5kb21haW4oKVswXSkgJSBzdGVwLA0KICAgICAg%0AICBhbGlnblZhbHVlID0gdmFsIC0gdmFsTW9kU3RlcDsNCg0KICAgIGlmIChNYXRo%0ALmFicyh2YWxNb2RTdGVwKSAqIDIgPj0gc3RlcCkgew0KICAgICAgYWxpZ25WYWx1%0AZSArPSAodmFsTW9kU3RlcCA+IDApID8gc3RlcCA6IC1zdGVwOw0KICAgIH0NCg0K%0AICAgIHJldHVybiBhbGlnblZhbHVlOw0KDQogIH0NCg0KICAvLyBHZXR0ZXIvc2V0%0AdGVyIGZ1bmN0aW9ucw0KICBzbGlkZXIubWluID0gZnVuY3Rpb24oXykgew0KICAg%0AIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG1pbjsNCiAgICBtaW4gPSBf%0AOw0KICAgIHJldHVybiBzbGlkZXI7DQogIH07DQoNCiAgc2xpZGVyLm1heCA9IGZ1%0AbmN0aW9uKF8pIHsNCiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBt%0AYXg7DQogICAgbWF4ID0gXzsNCiAgICByZXR1cm4gc2xpZGVyOw0KICB9Ow0KDQog%0AIHNsaWRlci5zdGVwID0gZnVuY3Rpb24oXykgew0KICAgIGlmICghYXJndW1lbnRz%0ALmxlbmd0aCkgcmV0dXJuIHN0ZXA7DQogICAgc3RlcCA9IF87DQogICAgcmV0dXJu%0AIHNsaWRlcjsNCiAgfTsNCg0KICBzbGlkZXIuYW5pbWF0ZSA9IGZ1bmN0aW9uKF8p%0AIHsNCiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBhbmltYXRlOw0K%0AICAgIGFuaW1hdGUgPSBfOw0KICAgIHJldHVybiBzbGlkZXI7DQogIH07DQoNCiAg%0Ac2xpZGVyLm9yaWVudGF0aW9uID0gZnVuY3Rpb24oXykgew0KICAgIGlmICghYXJn%0AdW1lbnRzLmxlbmd0aCkgcmV0dXJuIG9yaWVudGF0aW9uOw0KICAgIG9yaWVudGF0%0AaW9uID0gXzsNCiAgICByZXR1cm4gc2xpZGVyOw0KICB9Ow0KDQogIHNsaWRlci5h%0AeGlzID0gZnVuY3Rpb24oXykgew0KICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkg%0AcmV0dXJuIGF4aXM7DQogICAgYXhpcyA9IF87DQogICAgcmV0dXJuIHNsaWRlcjsN%0ACiAgfTsNCg0KICBzbGlkZXIubWFyZ2luID0gZnVuY3Rpb24oXykgew0KICAgIGlm%0AICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG1hcmdpbjsNCiAgICBtYXJnaW4g%0APSBfOw0KICAgIHJldHVybiBzbGlkZXI7DQogIH07DQoNCiAgc2xpZGVyLnZhbHVl%0AID0gZnVuY3Rpb24oXykgew0KICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0%0AdXJuIHZhbHVlOw0KICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7DQogICAg%0AICBtb3ZlSGFuZGxlKHN0ZXBWYWx1ZShfKSk7DQogICAgfTsNCiAgICB2YWx1ZSA9%0AIF87DQogICAgcmV0dXJuIHNsaWRlcjsNCiAgfTsNCg0KICBzbGlkZXIuc2NhbGUg%0APSBmdW5jdGlvbihfKSB7DQogICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1%0Acm4gc2NhbGU7DQogICAgc2NhbGUgPSBfOw0KICAgIHJldHVybiBzbGlkZXI7DQog%0AIH07DQoNCiAgc2xpZGVyLmludGVydmFsID0gZnVuY3Rpb24oXykgew0KICAgIGlm%0AICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGludGVydmFsOw0KICAgIGludGVy%0AdmFsID0gXzsNCiAgICByZXR1cm4gc2xpZGVyOw0KICB9Ow0KDQoNCiAgZDMucmVi%0AaW5kKHNsaWRlciwgZGlzcGF0Y2gsICJvbiIpOw0KDQogIHJldHVybiBzbGlkZXI7%0ADQoNCn0NCn0pKTsNCjwvc2NyaXB0Pg0KICAgICAgPCEtLSBuZHR2LWQzIGpzIGNv%0AZGUgLS0+DQogICAgICA8c2NyaXB0Pi8qKgpuZHR2LWQzIGlzIGEgZDMtYmFzZWQg%0ASFRNTDUgbmV0d29yayBhbmltYXRpb24gcGxheWVyIGZvciB0aGUgbmR0diBwYWNr%0AYWdlIChodHRwOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9uZHR2%0AL2luZGV4Lmh0bWwpCgpUaGUgbmR0di1kMyBsaWJyYXJ5IHdhcyBjcmVhdGVkIGJ5%0AIEdyZWcgTWljaGFsZWMgYW5kIFNreWUgQmVuZGVyLWRlTW9sbCBmb3IgdGhlIHN0%0AYXRuZXQgcHJvamVjdCBodHRwOi8vc3RhdG5ldC5vcmcgZnVuZGVkIGJ5IE5JQ0hE%0AIGdyYW50IFIwMUhEMDY4Mzk1LgoKVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRl%0AZCB1bmRlciB0aGUgR1BMLTMgbGljZW5zZSAoaHR0cDovL2Nob29zZWFsaWNlbnNl%0ALmNvbS9saWNlbnNlcy9ncGwtMy4wLykuICBJdCBpcyBmcmVlLCBvcGVuIHNvdXJj%0AZSwgYW5kIGhhcyB0aGUgYXR0cmlidXRpb24gcmVxdWlyZW1lbnRzIChHUEwgU2Vj%0AdGlvbiA3KSBhdCBodHRwOi8vc3RhdG5ldC5vcmcvYXR0cmlidXRpb246CgphLiB5%0Ab3UgYWdyZWUgdG8gcmV0YWluIGluIG5kdHYtZDMgYW5kIGFueSBtb2RpZmljYXRp%0Ab25zIHRvIG5kdHYtZDMgdGhlIGNvcHlyaWdodCwgYXV0aG9yIGF0dHJpYnV0aW9u%0AIGFuZCBVUkwgaW5mb3JtYXRpb24gYXMgcHJvdmlkZWQgYXQgYSBodHRwOi8vc3Rh%0AdG5ldHByb2plY3Qub3JnL2F0dHJpYnV0aW9uLgoKYi4geW91IGFncmVlIHRoYXQg%0AbmR0di1kMyBhbmQgYW55IG1vZGlmaWNhdGlvbnMgdG8gbmR0di1kMyB3aWxsLCB3%0AaGVuIHVzZWQsIGRpc3BsYXkgdGhlIGF0dHJpYnV0aW9uOgoKICAgIEJhc2VkIG9u%0AICdzdGF0bmV0JyBwcm9qZWN0IHNvZnR3YXJlIChodHRwOi8vc3RhdG5ldHByb2pl%0AY3Qub3JnKS4gRm9yIGxpY2Vuc2UgYW5kIGNpdGF0aW9uIGluZm9ybWF0aW9uIHNl%0AZSBodHRwOi8vc3RhdG5ldHByb2plY3Qub3JnL2F0dHJpYnV0aW9uCgpDb3B5cmln%0AaHQgMjAxNCBTdGF0bmV0IENvbW1vbnMgaHR0cDovL3N0YXRuZXQub3JnCgpUbyBj%0AaXRlIHRoaXMgcHJvamVjdCwgcGxlYXNlIHVzZToKCkdyZWcgTWljaGFsZWMsIFNr%0AeWUgQmVuZGVyLWRlTW9sbCwgTWFydGluYSBNb3JyaXMgKDIwMTQpICduZHR2LWQz%0AOiBhbiBIVE1MNSBuZXR3b3JrIGFuaW1hdGlvbiBwbGF5ZXIgZm9yIHRoZSBuZHR2%0AIHBhY2thZ2UnIFRoZSBzdGF0bmV0IHByb2plY3QuIGh0dHA6Ly9zdGF0bmV0Lm9y%0AZwpAbW9kdWxlCiovCgoKKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7CiAgLyoq%0AIEBjbGFzcyAqLwogIHJvb3QubmR0dl9kMyA9IGZhY3RvcnkoKTsKfSh0aGlzLCBm%0AdW5jdGlvbigpIHsKICAidXNlIHN0cmljdCI7CiAKICAvKioKICAqIFB1YmxpYyBv%0AcHRpb25zIHRvIGNvbnRyb2wgdmlzdWFsaXphdGlvbiBmdW5jdGlvbmFsaXR5CiAg%0AKiBAY29uc3RhbnQge29iamVjdH0KICAqIEBnbG9iYWwKICAqIEBkZWZhdWx0CiAg%0AKi8KICB2YXIgZGVmYXVsdF9vcHRpb25zID0gewogICAgYW5pbWF0aW9uRHVyYXRp%0Ab246IDgwMCwgICAgICAgLy9EdXJhdGlvbiBvZiBlYWNoIHN0ZXAgYW5pbWF0aW9u%0AIGR1cmluZyBwbGF5IG9yIHN0ZXAgYWN0aW9ucywgaW4gbWlsbGlzZWNvbmRzCiAg%0AICBlbnRlckV4aXRBbmltYXRpb25GYWN0b3I6IDAsICAvL1BlcmNlbnRhZ2UgKDAt%0AMSkgb2YgdG90YWwgc3RlcCBhbmltYXRpb24gdGltZSB0aGF0IGVudGVyL2V4aXQg%0AYW5pbWF0aW9ucyBzaG91bGQgdGFrZQogICAgbGFiZWxPZmZzZXQ6IHsgICAgICAg%0AICAgICAgICAgLy9waXhlbCBvZmZzZXQgb2YgbGFiZWxzCiAgICAgIHg6IDEyLAog%0AICAgICB5OiAwCiAgICB9LAogICAgYmFzZUZvbnRTaXplOiAnMTQnLCAgICAgICAg%0AICAgLy9Gb250IHNpemUsIGluIHBpeGVscywgZm9yIGxhYmVscyB3aXRoIGNleCB2%0AYWx1ZSBvZiAxCiAgICBub2RlU2l6ZUZhY3RvcjogMC4wMSwgICAgICAgICAvL1Bl%0AcmNlbnRhZ2UgKDAtMSkgb2Ygdmlld3BvcnQgc2l6ZSB0aGF0IGEgbm9kZSBvZiBz%0AaXplIDEgd2lsbCBiZSByZW5kZXJlZCBhdAogICAgZGF0YUNob29zZXI6IGZhbHNl%0ALCAgICAgICAgICAgLy9zaG93IGEgc2VsZWN0IGJveCBmb3IgY2hvb3NpbmcgZGlm%0AZmVyZW50IGdyYXBocz8KICAgIGRhdGFDaG9vc2VyRGlyOiAnZGF0YS8nLCAgICAg%0AIC8vd2ViIHBhdGggdG8gZGlyIGNvbnRhaW5pbmcgZGF0YSBqc29uIGZpbGVzCiAg%0AICBwbGF5Q29udHJvbHM6IHRydWUsICAgICAgICAgICAvL3Nob3cgdGhlIHBsYXll%0AciBjb250cm9scwogICAgc2xpZGVyOiB0cnVlLCAgICAgICAgICAgICAgICAgLy9z%0AaG93IHRoZSBzbGlkZXIgY29udHJvbAogICAgbWVudTogdHJ1ZSwgICAgICAgICAg%0AICAgICAgICAgLy9zaG93IGEgbWVudSBpbiB1cHBlci1yaWdodAogICAgYW5pbWF0%0AZU9uTG9hZDogZmFsc2UsICAgICAgICAgLy9wbGF5IHRoZSBncmFwaCBhbmltYXRp%0Ab24gb24gcGFnZSBsb2FkCiAgICBtYXJnaW46IHsgICAgICAgICAgICAgICAgICAg%0AICAvL2dyYXBoIHJlbmRlciBhcmVhIG1hcmdpbnMKICAgICAgeDogMjAsCiAgICAg%0AIHk6IDEwCiAgICB9LAogICAgZ3JhcGhEYXRhOiBudWxsLCAgICAgICAgICAgICAg%0ALy9ncmFwaCBkYXRhLCBlaXRoZXIgYXMgSlNPTiBvYmplY3Qgb3IgVVJMIHRvIGpz%0Ab24gZmlsZQogICAgZGVidWdGcmFtZUluZm86IGZhbHNlLCAgICAgICAgLy9TaG93%0AIHRoZSBzbGljZSBpbmZvIGluIGNvcm5lcgogICAgZHVyYXRpb25Db250cm9sOiB0%0AcnVlLCAgLy9TaG93IGEgY29udHJvbCB0byBjaGFuZ2UgZHVyYXRpb24gc3BlZWQK%0AICB9OwoKICAvKioKICAqIFN1cHBvcnRlZCBORFRWIG5ldHdvcmsgcHJvcGVydGll%0AcyBhbmQgdGhlaXIgZGVmYXVsdCB2YWx1ZXMKICAqIEBjb25zdGFudCB7b2JqZWN0%0AfQogICogQGdsb2JhbAogICogQGRlZmF1bHQKICAqLwogIHZhciBuZHR2UHJvcGVy%0AdGllcyA9IHsKICAgIGdyYXBoOiB7CiAgICAgIHhsYWI6IG51bGwsICAgICAgICAg%0AICAgICAgICAgICAgLy8gbGFiZWwgY2FwdGlvbiBiZWxvdyB0aGUgcmVuZGVyLCBv%0AbiB0aGUgeGF4aXMKICAgICAgbWFpbjogbnVsbCwgICAgICAgICAgICAgICAgICAg%0AICAvLyBtYWluIGhlYWRsaW5lIGFib3ZlIHRoZSByZW5kZXIKICAgICAgZGlzcGxh%0AeWxhYmVsczogZmFsc2UgLCAgICAgICAgICAvLyBzaG91bGQgdmVydGV4IGxhYmVs%0AcyBiZSBkaXNwbGF5ZWQKICAgICAgYmc6ICcjZmZmJywgICAgICAgICAgICAgICAg%0AICAgICAvLyBiYWNrZ3JvdW5kIGNvbG9yCiAgICAgIHVzZWFycm93czogdHJ1ZSwg%0AICAgICAgICAgICAgICAgLy8gc2hvdWxkIGFycm93cyBiZSBkcmF3biBvbiBlZGdl%0Acz8KICAgICAgeGxpbTogbnVsbCwgICAgICAgICAgICAgICAgICAgICAvLyByYW5n%0AZSBvZiB4IHZhbHVlcyAgICAgICAgICAgICAgICAgICAgIAogICAgICB5bGltOiBu%0AdWxsLCAgICAgICAgICAgICAgICAgICAgIC8vIHJhbmdlIG9mIHkgdmFsdWVzICAK%0AICAgICAgZWRnZU9mZnNldDogMCwgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQg%0Ab2YgZWRnZSBsZW5ndGggdG8gdmVydGV4IGJvcmRlcnMgIAogICAgICB0b29sdGlw%0AT2Zmc2V0OiAwLCAgICAgICAgICAgICAgIC8vIG9mZnNldCBvZiB0b29sdGlwcyB0%0AbyB2ZXJ0ZXggYm9yZGVycyAKICAgIH0sIAogICAgbm9kZTogewogICAgICBjb29y%0AZDogbnVsbCwgICAgICAgICAgICAgICAgICAgIC8vIGNvb3JkaW5hdGVzIGZvciBu%0Ab2RlcwogICAgICBsYWJlbDogbnVsbCwgICAgICAgICAgICAgICAgICAgIC8vIGxh%0AYmVscyBmb3IgdmVydGljZXMKICAgICAgJ2xhYmVsLmNvbCc6ICcjMDAwJywgICAg%0AICAgICAgICAvLyBjb2xvciBvZiBub2RlIGxhYmVsCiAgICAgICdsYWJlbC5jZXgn%0AOiAxLCAgICAgICAgICAgICAgICAgLy8gbGFiZWwgZm9udCBzaXplIHNjYWxlIGZh%0AY3RvcgogICAgICAndmVydGV4LmNleCc6IDEsICAgICAgICAgICAgICAgIC8vIHZl%0AcnRleCAobm9kZSkgZXhwYW5zaW9uIHNjYWxlIGZhY3RvcgogICAgICAndmVydGV4%0ALmNvbCc6ICcjRjAwJywgICAgICAgICAgIC8vIG5vZGUgZmlsbCBjb2xvcgogICAg%0AICAndmVydGV4LnNpZGVzJzogNTAsICAgICAgICAgICAgIC8vIG51bWJlciBvZiBz%0AaWRlcyBmb3IgdmVydGV4IHBvbHlnb24gKHNoYXBlKQogICAgICAndmVydGV4LnJv%0AdCc6IDAsICAgICAgICAgICAgICAgIC8vIHJvdGF0aW9uIGZvciB2ZXJ0ZXggcG9s%0AeWdvbgogICAgICAndmVydGV4LnRvb2x0aXAnOiAnJywgICAgICAgICAgIC8vIHZl%0AcnRleCB0b29sdGlwIHZhbHVlCiAgICAgICd2ZXJ0ZXguYm9yZGVyJzogJyMwMDAn%0ALCAgICAgICAgLy8gY29sb3Igb2YgdmVydGV4IGJvcmRlciBzdHJva2UKICAgICAg%0AJ3ZlcnRleC5sd2QnOiAxLCAgICAgICAgICAgICAgICAvLyB3aWR0aCBvZiB2ZXJ0%0AZXggYm9yZGVyIHN0cm9rZQogICAgICAndmVydGV4LmNzcy5jbGFzcyc6IG51bGws%0AICAgICAgIC8vIGNzcyBjbGFzcyBuYW1lIGFwcGxpZWQgdG8gbm9kZQogICAgICAn%0AdmVydGV4LmxhYmVsLmNzcy5jbGFzcyc6IG51bGwsIC8vIGNzcyBjbGFzcyBuYW1l%0AIGFwcGxpZWQgdG8gbm9kZSBsYWJlbAogICAgICAndmVydGV4LmNzcy5zdHlsZSc6%0AIG51bGwsICAgICAgIC8vIGNzcyBpbmxpbmUtc3R5bGUgYXBwbGllZCB0byBub2Rl%0AIChVTklNUExJTUVOVEVEKQogICAgICAndmVydGV4LmxhYmVsLmNzcy5zdHlsZSc6%0AIG51bGwsIC8vIGNzcyBpbmxpbmUgc3R5bGUgYXBwbGllZCB0byBub2RlIGxhYmVs%0AIChVTklNUExFTUVOVEVEKQogICAgICAnaW1hZ2UnOiBudWxsLCAgICAgICAgICAg%0AICAgICAgIC8vIGJhY2tncm91bmQgaW1hZ2UgZm9yIHZlcnRleAogICAgfSwKICAg%0AIGVkZ2U6IHsKICAgICAgJ2VkZ2UubHdkJzogMSwgICAgICAgICAgICAgICAgICAv%0ALyB3aWR0aCBvZiBlZGdlIHN0cm9rZQogICAgICAnZWRnZS5jb2wnOiAnIzAwMCcs%0AICAgICAgICAgICAgIC8vIGVkZ2Ugc3Ryb2tlIGNvbG9yCiAgICAgICdlZGdlLnRv%0Ab2x0aXAnOiBudWxsLCAgICAgICAgICAgLy8gZWRnZSB0b29sdGlwIHZhbHVlCiAg%0AICAgICdlZGdlLmNzcy5jbGFzcyc6IG51bGwsICAgICAgICAgLy8gY3NzIGNsYXNz%0AIG5hbWUgYXBwbGllZCB0byBlZGdlCiAgICAgICdlZGdlLmxhYmVsLmNzcy5jbGFz%0Acyc6IG51bGwsICAgLy8gY3NzIGNsYXNzIG5hbWUgYXBwbGllZCB0byBlZGdlIGxh%0AYmVsCiAgICAgICdlZGdlLmNzcy5zdHlsZSc6IG51bGwsICAgICAgICAgLy8gY3Nz%0AIGlubGluZS1zdHlsZSBhcHBsaWVkIHRvIGVkZ2UgKFVOSU1QTElNRU5URUQpCiAg%0AICAgICdlZGdlLmxhYmVsLmNzcy5zdHlsZSc6IG51bGwsICAgLy8gY3NzIGlubGlu%0AZSBzdHlsZSBhcHBsaWVkIHRvIGVkZ2UgbGFiZWwgKFVOSU1QTEVNRU5URUQpCiAg%0AICB9CiAgfQogIAoKICAvKioKICAqIEluaXRpYWxpemUgYSBuZXcgbmR0di1kMyBp%0AbnN0YW5jZQogICogQGNvbnN0cnVjdHMgbmR0dl9kMwogICogQHBhcmFtIHtvYmpl%0AY3R9IC0gQW4gb2JqZWN0IG9mIGRlZmF1bHQgb3B0aW9ucyBvdmVycmlkZXMKICAq%0AIEBwYXJhbSB7c3RyaW5nfEhUTUxFbGVtZW50fSAtIEEgQ1NTIHNlbGVjdG9yIHN0%0AcmluZyBvciBET00gZWxlbWVudCByZWZlcmVuY2Ugc3BlY2lmeWluZyB0aGUgdGFy%0AZ2V0IGRvbSBlbGVtZW50IHRoZSBuZXR3b3JrIHNob3VsZCBiZSBpbml0aWFsaXpl%0AZCB0bwogICovCiAgdmFyIG4zID0gZnVuY3Rpb24ob3B0aW9ucywgdGFyZ2V0KSB7%0ACiAgICB2YXIgbjMgPSB0aGlzOwogICAgCiAgICB2YXIgZ2xvYmFscyA9IHsKICAg%0AICAgc3ZnOiBudWxsLAogICAgICB4U2NhbGU6IG51bGwsCiAgICAgIHlTY2FsZTog%0AbnVsbCwKICAgICAgbWluVGltZTogbnVsbCwKICAgICAgaW50ZXJ2YWw6IG51bGws%0ACiAgICAgIG1heFRpbWU6IG51bGwsCiAgICAgIGFuaW1hdGU6IG51bGwsCiAgICAg%0AIGJhc2VOb2RlU2l6ZTogbnVsbCwKICAgICAgY3VyclRpbWU6IDAsCiAgICAgIGdy%0AYXBoOiBudWxsLAogICAgICB0aW1lSW5kZXg6bnVsbCwKICAgICAgZG9tVGFyZ2V0%0AOm51bGwsCiAgICAgIHNsaWRlcjpudWxsLAogICAgICBub2RlQ29vcmRzOiB7fSwK%0AICAgICAgb3B0aW9uczoge30KICAgIAp9CiAgICAvL2luaXRpYWxpemUgY2xhc3Mg%0AZ2xvYmFscwogICAgJC5leHRlbmQodHJ1ZSwgbjMsIGdsb2JhbHMpOwoKICAgIC8v%0AcmVwbGFjZSBkZWZhdWx0cyB3aXRoIHVzZXItc3BlY2lmaWVkIG9wdGlvbnMKICAg%0AICQuZXh0ZW5kKHRydWUsIG4zLm9wdGlvbnMsIGRlZmF1bHRfb3B0aW9ucyk7CiAg%0AICAkLmV4dGVuZCh0cnVlLCBuMy5vcHRpb25zLCBvcHRpb25zKTsKCiAgICBpZiAo%0AIXRhcmdldCkgewogICAgICB0YXJnZXQgPSBkMy5zZWxlY3QoJ2JvZHknKS5hcHBl%0AbmQoJ2RpdicpLnN0eWxlKHt3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJ30p%0ALm5vZGUoKTsKICAgICAgZDMuc2VsZWN0QWxsKCdodG1sLCBib2R5JykuY2xhc3Nl%0AZCh7J25kdHYtZnVsbHNjcmVlbic6IHRydWV9KQogICAgfQogICAgbjMuZG9tVGFy%0AZ2V0ID0gZDMuc2VsZWN0KHRhcmdldCk7CiAgICBuMy5kb21UYXJnZXQuY2xhc3Nl%0AZCh7J25kdHYtZDMtY29udGFpbmVyJzogdHJ1ZX0pOwogICAgbjMuU1ZHU2V0dXAo%0AbjMuZG9tVGFyZ2V0KTsKICAgIGlmIChuMy5vcHRpb25zLnBsYXlDb250cm9scyB8%0AfCBuMy5vcHRpb25zLnNsaWRlcikgewogICAgICBuMy5kb21UYXJnZXQuYXBwZW5k%0AKCdkaXYnKS5hdHRyKCdjbGFzcycsICdjb250cm9scycpOwogICAgfQogICAgaWYg%0AKG4zLm9wdGlvbnMuZGF0YUNob29zZXIpIHsgbjMuY3JlYXRlRGF0YUNob29zZXIo%0AKTsgfQogICAgaWYgKG4zLm9wdGlvbnMucGxheUNvbnRyb2xzKSB7IG4zLmNyZWF0%0AZVBsYXlDb250cm9scygpOyB9CiAgICBpZiAobjMub3B0aW9ucy5zbGlkZXIpIHsg%0AbjMuY3JlYXRlU2xpZGVyQ29udHJvbCgpOyB9CiAgICBpZiAobjMub3B0aW9ucy5t%0AZW51KSB7IG4zLmNyZWF0ZU1lbnUoKTsgfQoKCiAgICBuMy50b29sdGlwID0gbjMu%0AZG9tVGFyZ2V0LnNlbGVjdCgnLmdyYXBoJykuYXBwZW5kKCdkaXYnKS5hdHRyKCdj%0AbGFzcycsICd0b29sdGlwJyk7CiAgICBuMy5mcmFtZUluZm9EaXYgPSBuMy5kb21U%0AYXJnZXQuc2VsZWN0KCcuZ3JhcGgnKS5hcHBlbmQoJ2RpdicpLmF0dHIoJ2NsYXNz%0AJywgJ2ZyYW1lSW5mbycpCiAgICBpZiAobjMub3B0aW9ucy5kZWJ1Z0ZyYW1lSW5m%0AbykgeyBuMy5mcmFtZUluZm9EaXYuc3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKTsg%0AfQogICAgaWYobjMub3B0aW9ucy5ncmFwaERhdGEpIHsgbjMubG9hZERhdGEobjMu%0Ab3B0aW9ucy5ncmFwaERhdGEpOyB9CiAgfQoKICAvKioKICAqIEluaXRpYWxpemUg%0AdGhlIFNWRyBlbGVtZW50IGFuZCByZWxhdGVkIERPTSBlbGVtZW50cyBhbmQgbGlz%0AdGVuZXJzCiAgKiBAcGFyYW0ge0QzU2VsZWN0aW9ufSAtIERPTSBlbGVtZW50IHRv%0AIGluc2VydCBzdmcgaW50bwogICovCiAgbjMucHJvdG90eXBlLlNWR1NldHVwID0g%0AZnVuY3Rpb24oZG9tVGFyZ2V0KSB7CiAgICB2YXIgbjMgPSB0aGlzOwoKICAgICQo%0AZG9tVGFyZ2V0KS5yZXNpemUoZnVuY3Rpb24obikgeyAKICAgICAgbjMucmVzaXpl%0AR3JhcGgobik7CiAgICB9KTsKICAgICQod2luZG93KS5yZXNpemUoZnVuY3Rpb24o%0AbikgeyAKICAgICAgbjMucmVzaXplR3JhcGgobik7CiAgICB9KTsKIAogICAgZG9t%0AVGFyZ2V0CiAgICAgIC5hcHBlbmQoJ2RpdicpLmF0dHIoJ2NsYXNzJywgJ2dyYXBo%0AJykKICAgICAgLmFwcGVuZCgic3ZnOnN2ZyIpCiAgICAgIC5hcHBlbmQoImRlZnMi%0AKQoKICAgIHZhciBzdmcgPSBkb21UYXJnZXQuc2VsZWN0KCdzdmcnKQogICAgICAu%0AYXBwZW5kKCdnJykKCiAgICB2YXIgZHJhZ0V2ZW50OwogICAgdmFyIHJlY3QgPSBz%0AdmcuYXBwZW5kKCJyZWN0IikKICAgICAgLmF0dHIoJ2NsYXNzJywgJ2JhY2tncm91%0AbmQnKQogICAgICAuc3R5bGUoImZpbGwiLCAibm9uZSIpCiAgICAgIC5zdHlsZSgi%0AcG9pbnRlci1ldmVudHMiLCAiYWxsIikKICAgICAgLm9uKCdtb3VzZWRvd24nLCBm%0AdW5jdGlvbigpIHsgCiAgICAgICAgZHJhZ0V2ZW50ID0gZDMuZXZlbnQ7CiAgICAg%0AIH0pCiAgICAgIC5vbignbW91c2V1cCcsIGZ1bmN0aW9uKCkgeyAKICAgICAgICBp%0AZiAoTWF0aC5hYnMoZHJhZ0V2ZW50LnBhZ2VYIC0gZDMuZXZlbnQucGFnZVgpIDwg%0ANSAmJiBNYXRoLmFicyhkcmFnRXZlbnQucGFnZVkgLSBkMy5ldmVudC5wYWdlWSkg%0APCA1KSB7CiAgICAgICAgICBuMy5oaWRlVG9vbHRpcCgpOwogICAgICAgICAgbjMu%0AdW5TZWxlY3ROZXR3b3JrKCk7CiAgICAgICAgfQogICAgICB9KQoKICAgIG4zLmNv%0AbnRhaW5lciA9IHN2Zy5hcHBlbmQoImciKQogICAgICAuYXR0cignY2xhc3MnLCAn%0AY29udGFpbmVyJykKICAgIG4zLmNvbnRhaW5lci5hcHBlbmQoJ2cnKS5hdHRyKCdj%0AbGFzcycsICdlZGdlcycpOwogICAgbjMuY29udGFpbmVyLmFwcGVuZCgnZycpLmF0%0AdHIoJ2NsYXNzJywgJ25vZGVzJyk7CiAgICBuMy5jb250YWluZXIuYXBwZW5kKCdn%0AJykuYXR0cignY2xhc3MnLCAnbGFiZWxzJyk7CiAgICBuMy5jb250YWluZXIuYXBw%0AZW5kKCdyZWN0JykuYXR0cignY2xhc3MnLCAnc2NyZWVuJyk7CiAgICBuMy5jb250%0AYWluZXIuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAnZWRnZXNfc2VsZWN0ZWQn%0AKTsKICAgIG4zLmNvbnRhaW5lci5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsICdu%0Ab2Rlc19zZWxlY3RlZCcpOwogICAgbjMuY29udGFpbmVyLmFwcGVuZCgnZycpLmF0%0AdHIoJ2NsYXNzJywgJ2xhYmVsc19zZWxlY3RlZCcpOwoKICAgIHN2Zy5hcHBlbmQo%0AJ2cnKS5hdHRyKCdjbGFzcycsICdtYWluJykuYXBwZW5kKCd0ZXh0Jyk7CiAgICBz%0AdmcuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAneGxhYicpLmFwcGVuZCgndGV4%0AdCcpOwoKICAgIHN2Zy5vbignbW91c2Vkb3duJywgZnVuY3Rpb24oKSB7CiAgICAg%0AIHN2Zy5jbGFzc2VkKHsnZHJhZ2dpbmcnOiB0cnVlfSkKICAgIH0pCiAgICBzdmcu%0Ab24oJ21vdXNldXAnLCBmdW5jdGlvbigpIHsKICAgICAgc3ZnLmNsYXNzZWQoeydk%0AcmFnZ2luZyc6IGZhbHNlfSkKICAgIH0pCgogICAgbjMuem9vbSA9IGQzLmJlaGF2%0AaW9yLnpvb20oKQogICAgICAuc2NhbGVFeHRlbnQoWy41LCAxMF0pCiAgICAgIC5v%0Abigiem9vbSIsIGZ1bmN0aW9uIHpvb21lZCgpIHsKICAgICAgICBuMy5jb250YWlu%0AZXIuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgiICsgZDMuZXZlbnQudHJh%0AbnNsYXRlICsgIilzY2FsZSgiICsgZDMuZXZlbnQuc2NhbGUgKyAiKSIpOwogICAg%0AICAgIG4zLmN0bSA9IG4zLmNvbnRhaW5lci5ub2RlKCkuZ2V0U2NyZWVuQ1RNKCk7%0ACiAgICAgICAgbjMubW92ZVRvb2x0aXAoKTsKICAgICAgfSkKICAgIHN2Zy5jYWxs%0AKG4zLnpvb20pCiAgfQoKICAvKiogc2V0cyBwb3NpdGlvbmluZyBvbiBzdmcgZWxl%0AbWVudHMgYmFzZWQgb24gY3VycmVudCBET00gY29udGFpbmVyIHNpemUgYW5kIHNl%0AdHMgZGF0YSBzY2FsaW5nIGZhY3RvcnMgYWNjb3JkaW5nbHkgKi8KICBuMy5wcm90%0Ab3R5cGUudXBkYXRlRGltZW5zaW9ucyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIG4z%0AID0gdGhpczsKICAgIHZhciBkaXZfd2lkdGggPSBuMy5kb21UYXJnZXQubm9kZSgp%0ALm9mZnNldFdpZHRoCiAgICB2YXIgZGl2X2hlaWdodCA9IG4zLmRvbVRhcmdldC5u%0Ab2RlKCkub2Zmc2V0SGVpZ2h0IC0gJChuMy5kb21UYXJnZXQuc2VsZWN0KCcuY29u%0AdHJvbHMnKS5ub2RlKCkpLm91dGVySGVpZ2h0KHRydWUpOwoKICAgIHZhciB4bGFi%0AID0gbjMudGltZUluZGV4W24zLmN1cnJUaW1lXS5yZW5kZXJEYXRhLmdyYXBoLnhs%0AYWI7CiAgICB2YXIgbWFpbiA9IG4zLnRpbWVJbmRleFtuMy5jdXJyVGltZV0ucmVu%0AZGVyRGF0YS5ncmFwaC5tYWluOwogICAgdmFyIHhsYWJTaXplID0gcGFyc2VGbG9h%0AdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShuMy5kb21UYXJnZXQuc2VsZWN0KCcu%0AeGxhYicpLm5vZGUoKSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnZm9udC1zaXpl%0AJykpOwogICAgdmFyIG1haW5TaXplID0gcGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29t%0AcHV0ZWRTdHlsZShuMy5kb21UYXJnZXQuc2VsZWN0KCcubWFpbicpLm5vZGUoKSwg%0AbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnZm9udC1zaXplJykpOwogICAgdmFyIG1h%0AaW5NYXJnaW4gPSAwOwogICAgdmFyIHhsYWJNYXJnaW4gPSAwOwoKICAgIGlmICh4%0AbGFiKSB7CiAgICAgIHhsYWJNYXJnaW4gPSB4bGFiU2l6ZSooeGxhYi5sZW5ndGgr%0AMSkqMS4yOwogICAgfSAKICAgIGlmIChtYWluKSB7CiAgICAgIG1haW5NYXJnaW4g%0APSBtYWluU2l6ZSoobWFpbi5sZW5ndGgrMSkqMS4yOwogICAgfSAKICAgIAogICAg%0AdmFyIG1hcmdpbiA9IHsKICAgICAgeDogbjMub3B0aW9ucy5tYXJnaW4ueCwKICAg%0AICAgeTogbjMub3B0aW9ucy5tYXJnaW4ueQogICAgfQogICAgaWYgKGRpdl93aWR0%0AaCA+IGRpdl9oZWlnaHQpIHsgCiAgICAgIG1hcmdpbi54ID0gKGRpdl93aWR0aCAt%0AIGRpdl9oZWlnaHQpLzIKICAgIH0gZWxzZSB7CiAgICAgIG1hcmdpbi55ID0gKGRp%0Adl9oZWlnaHQgLSBkaXZfd2lkdGgpLzIKICAgIH0KCiAgICB2YXIgd2lkdGggPSBk%0AaXZfd2lkdGggLSAobWFyZ2luLngqMik7CiAgICB2YXIgaGVpZ2h0ID0gZGl2X2hl%0AaWdodCAtIChtYXJnaW4ueSoyKTsKCiAgICBuMy5kb21UYXJnZXQuc2VsZWN0QWxs%0AKCcuZ3JhcGg+c3ZnLCAuYmFja2dyb3VuZCwgLnNjcmVlbicpCiAgICAgIC5hdHRy%0AKHsKICAgICAgICB3aWR0aDogd2lkdGggKyBtYXJnaW4ueCAqIDIsCiAgICAgICAg%0AaGVpZ2h0OiBoZWlnaHQgKyBtYXJnaW4ueSAqIDIKICAgICAgfSkKICAgIAogICAg%0ALy9yZXNldCBoZWlnaHQgaW5jbHVkaW5nIG1haW4gJiB4bGFiIGZvciBncmFwaCBj%0Ab250YWluZXIgdHJhbnNsYXRpb24KICAgIGhlaWdodCA9IGhlaWdodCAtIG1haW5N%0AYXJnaW4gLSB4bGFiTWFyZ2luOwoKICAgIG4zLmNvbnRhaW5lci5hdHRyKCJ0cmFu%0Ac2Zvcm0iLCAidHJhbnNsYXRlKCIgKyBtYXJnaW4ueCArICIsIiArIChtYXJnaW4u%0AeSttYWluTWFyZ2luKSArICIpIik7CgogICAgdmFyIGNlbnRlciA9IG1hcmdpbi54%0AICsgd2lkdGgvMjsKICAgIG4zLmRvbVRhcmdldC5zZWxlY3QoJy54bGFiJykuYXR0%0AcigndHJhbnNmb3JtJywgInRyYW5zbGF0ZSgiK2NlbnRlcisiLCIrKGRpdl9oZWln%0AaHQtbWFyZ2luLnkpKyIpIikKICAgIG4zLmRvbVRhcmdldC5zZWxlY3QoJy5tYWlu%0AJykuYXR0cigndHJhbnNmb3JtJywgInRyYW5zbGF0ZSgiK2NlbnRlcisiLCIrKG1h%0Acmdpbi55K21haW5TaXplKSsiKSIpCgogICAgdmFyIHBpeGVsU3BhY2UgPSBoZWln%0AaHQgPiB3aWR0aCA/IHdpZHRoIDogaGVpZ2h0OwogICAgbjMuYmFzZU5vZGVTaXpl%0AID0gcGl4ZWxTcGFjZSAqIG4zLm9wdGlvbnMubm9kZVNpemVGYWN0b3I7CgogICAg%0ALy9zZXQgdGhlIFggYW5kIFkgc2NhbGVzCiAgICBuMy54U2NhbGUgPSBkMy5zY2Fs%0AZS5saW5lYXIoKQogICAgICAuZG9tYWluKFtuMy50aW1lSW5kZXhbMF0ucmVuZGVy%0ARGF0YS5ncmFwaC54bGltWzBdLG4zLnRpbWVJbmRleFswXS5yZW5kZXJEYXRhLmdy%0AYXBoLnhsaW1bMV1dKQogICAgICAucmFuZ2UoWzAsIHBpeGVsU3BhY2VdKTsKCiAg%0AICBuMy55U2NhbGUgPSBkMy5zY2FsZS5saW5lYXIoKQogICAgICAuZG9tYWluKFtu%0AMy50aW1lSW5kZXhbMF0ucmVuZGVyRGF0YS5ncmFwaC55bGltWzBdLG4zLnRpbWVJ%0AbmRleFswXS5yZW5kZXJEYXRhLmdyYXBoLnlsaW1bMV1dKQogICAgICAucmFuZ2Uo%0AW3BpeGVsU3BhY2UsIDBdKTsKCiAgICAvL3Jlc2V0IHpvb20gdHJhbnNsYXRlIGJh%0Ac2VkIG9uIG1hcmdpbnMKICAgIG4zLnpvb20udHJhbnNsYXRlKFttYXJnaW4ueCwg%0AbWFyZ2luLnkrbWFpbk1hcmdpbl0pCgogICAgLy9DYWNoZSBoZWlnaHQgYW5kIG9m%0AZnNldCB0byB1c2UgZm9yIHRvb2x0aXAgbW92ZW1lbnQKICAgIG4zLmhlaWdodCA9%0AIG4zLmRvbVRhcmdldC5zZWxlY3QoJy5ncmFwaCcpLm5vZGUoKS5vZmZzZXRIZWln%0AaHQKICAgIG4zLm9mZnNldCA9ICQobjMuZG9tVGFyZ2V0LnNlbGVjdCgnLmdyYXBo%0AJykubm9kZSgpKS5vZmZzZXQoKTsKICAgIG4zLmN0bSA9IG4zLmNvbnRhaW5lci5u%0Ab2RlKCkuZ2V0U2NyZWVuQ1RNKCk7CiAgfQogIAogIC8qKiBjcmVhdGVzIHRoZSBv%0AcHRpb25hbCBkYXRhQ2hvb3NlciBlbGVtZW50IHRvIGJlIHVzZWQgZm9yIHNsZWN0%0AaW5nIGFtb25nIG11bHRpcGxlIEpTT04gZmlsZXMgZm9yIGRlYnVnZ2luZyAqLwog%0AIG4zLnByb3RvdHlwZS5jcmVhdGVEYXRhQ2hvb3NlciA9IGZ1bmN0aW9uKCkgewog%0AICAgdmFyIG4zID0gdGhpczsKCiAgICB2YXIgZGl2ID0gbjMuZG9tVGFyZ2V0LmFw%0AcGVuZCgnZGl2JykuYXR0cignY2xhc3MnLCAnZGF0YV9jaG9vc2VyX2NvbnRhaW5l%0AcicpCiAgICBkaXYuYXBwZW5kKCdzZWxlY3QnKS5hdHRyKCdjbGFzcycsICdkYXRh%0AX2Nob29zZXInKQogICAgZGl2LmFwcGVuZCgnYScpLmF0dHIoeydjbGFzcyc6ICd2%0AaWRlb19saW5rJywgJ3RhcmdldCc6ICdfYmxhbmsnfSkuaHRtbCgnVmlkZW8nKTsK%0ACiAgICB2YXIgc2V0VmlkTGluayA9IGZ1bmN0aW9uKHVybCkgewogICAgICBkaXYu%0Ac2VsZWN0KCcudmlkZW9fbGluaycpLmF0dHIoJ2hyZWYnLCB1cmwucmVwbGFjZSgn%0ALmpzb24nLCAnLm1wNCcpKQogICAgfQogICAgJC5nZXQobjMub3B0aW9ucy5kYXRh%0AQ2hvb3NlckRpciwgZnVuY3Rpb24oZGF0YSl7CiAgICAgIGRpdi5zZWxlY3QoJy5k%0AYXRhX2Nob29zZXInKS5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7CiAgICAgICAg%0AdmFyIHVybCA9ICQodGhpcykudmFsKCk7CiAgICAgICAgbjMubG9hZERhdGEodXJs%0AKTsKICAgICAgICBzZXRWaWRMaW5rKHVybCkKICAgICAgfSkKICAgICAgdmFyIG1h%0AdGNoZXMgPSBkYXRhLm1hdGNoKC88dGQ+PGEgaHJlZj0iW14iXSoiL2cpOwogICAg%0AICAkLmVhY2gobWF0Y2hlcywgZnVuY3Rpb24oaSwgbSkgewogICAgICAgIHZhciB1%0AcmwgPSBtLm1hdGNoKC9ocmVmPSIoW14iXSopIi8pWzFdOwogICAgICAgIGlmICh1%0AcmwubWF0Y2goLy5qc29uJC8pKSB7CiAgICAgICAgICBkaXYuc2VsZWN0KCcuZGF0%0AYV9jaG9vc2VyJykuYXBwZW5kKCdvcHRpb24nKS5hdHRyKCd2YWx1ZScsIG4zLm9w%0AdGlvbnMuZGF0YUNob29zZXJEaXIrdXJsKS5odG1sKHVybCk7CiAgICAgICAgfQog%0AICAgICAgIGlmIChpID09IDEpIHsKICAgICAgICAgIHNldFZpZExpbmsodXJsKTsK%0AICAgICAgICB9CiAgICAgIH0pCiAgICB9KQogIH0KICAKICAvKiogY3JlYXRlcyB0%0AaGUgb3B0aW9uYWwgbWVudSBlbGVtZW50IHRvIGJlIHVzZWQgZm9yIGNvbnRyb2xs%0AaW5nIHNldHRpbmdzIGFuZCBkaXNwbGF5aW5nICdhYm91dCcgbGluayAqLwogIG4z%0ALnByb3RvdHlwZS5jcmVhdGVNZW51ID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgbjMg%0APSB0aGlzOwogICAgaWYgKGQzLnNlbGVjdCgnI25kdHYtc3ZnLW1lbnUtaWNvbnMn%0AKS5lbXB0eSgpKSB7CiAgICAgICQoJ2JvZHknKS5wcmVwZW5kKAogICAgICAnPHN2%0AZyBpZD0ibmR0di1zdmctbWVudS1pY29ucyIgZGlzcGxheT0ibm9uZSIgdmVyc2lv%0Abj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5z%0AOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTc2%0AIiBoZWlnaHQ9IjMyIiB2aWV3Qm94PSIwIDAgMTc2IDMyIj4nKwogICAgICAnICA8%0AZGVmcz4nKwogICAgICAnICAgIDxnIGlkPSJpY29uLWxpc3QiPjxwYXRoIGQ9Ik0y%0ANS42IDE0LjRoLTE5LjJjLTAuODgzIDAtMS42IDAuNzE3LTEuNiAxLjZzMC43MTcg%0AMS42IDEuNiAxLjZoMTkuMmMwLjg4NSAwIDEuNi0wLjcxNyAxLjYtMS42cy0wLjcx%0ANS0xLjYtMS42LTEuNnpNNi40IDExLjJoMTkuMmMwLjg4NSAwIDEuNi0wLjcxNyAx%0ALjYtMS42cy0wLjcxNS0xLjYtMS42LTEuNmgtMTkuMmMtMC44ODMgMC0xLjYgMC43%0AMTctMS42IDEuNnMwLjcxNyAxLjYgMS42IDEuNnpNMjUuNiAyMC44aC0xOS4yYy0w%0ALjg4MyAwLTEuNiAwLjcxNS0xLjYgMS42czAuNzE3IDEuNiAxLjYgMS42aDE5LjJj%0AMC44ODUgMCAxLjYtMC43MTUgMS42LTEuNnMtMC43MTUtMS42LTEuNi0xLjZ6Ij48%0AL3BhdGg+PC9nPicrCiAgICAgICcgIDwvZGVmcz4nKwogICAgICAnPC9zdmc+Jyk7%0ACiAgICB9CiAgICB2YXIgZGl2ID0gbjMuZG9tVGFyZ2V0LnNlbGVjdCgnLmdyYXBo%0AJykuYXBwZW5kKCdkaXYnKS5hdHRyKCdjbGFzcycsICduZHR2LW1lbnUtY29udGFp%0AbmVyJyk7CiAgICBkaXYuaHRtbCgKICAgICAgIjxkaXYgY2xhc3M9J25kdHYtbWVu%0AdS1pY29uJz4iKwogICAgICAiIDxzdmcgY2xhc3M9J2ljb24gbWVudS1jb250cm9s%0AJyB2aWV3Qm94PScwIDAgMzIgMzInPjx1c2UgeGxpbms6aHJlZj0nI2ljb24tbGlz%0AdCc+PC91c2U+PC9zdmc+IisKICAgICAgIjwvZGl2PiIrCiAgICAgICI8ZGl2IGNs%0AYXNzPSduZHR2LW1lbnUnPjwvZGl2PiIKICAgICkKICAgIHZhciBtZW51ID0gbjMu%0AZG9tVGFyZ2V0LnNlbGVjdCgnLm5kdHYtbWVudScpOwoKICAgIGlmIChuMy5vcHRp%0Ab25zLmR1cmF0aW9uQ29udHJvbCkgeyAKICAgICAgdmFyIGR1cmF0aW9uQ29udHJv%0AbCA9IG1lbnUuYXBwZW5kKCdkaXYnKS5hdHRyKCdjbGFzcycsICdtZW51LWl0ZW0g%0AZHVyYXRpb25Db250cm9sQ29udGFpbmVyJyk7CiAgICAgIGR1cmF0aW9uQ29udHJv%0AbC5hcHBlbmQoJ3NwYW4nKS5hdHRyKCdjbGFzcycsICdtZW51LWxhYmVsJykuaHRt%0AbCgnQW5pbWF0aW9uIER1cmF0aW9uJyk7CiAgICAgIHZhciBkdXJhdGlvblNsaWRl%0AciA9IGQzLnNsaWRlcigpLm1pbigwKS5tYXgoOCkuYXhpcyhuZXcgZDMuc3ZnLmF4%0AaXMoKS50aWNrcyg1KSkudmFsdWUobjMub3B0aW9ucy5hbmltYXRpb25EdXJhdGlv%0Abi8xMDAwKTsKICAgICAgZHVyYXRpb25Db250cm9sLmFwcGVuZCgnZGl2JykuYXR0%0AcignY2xhc3MnLCAnZHVyYXRpb25Db250cm9sJykuY2FsbChkdXJhdGlvblNsaWRl%0AcikKICAgICAgZHVyYXRpb25TbGlkZXIub24oJ3NsaWRlJywgZnVuY3Rpb24oZXZ0%0ALCB2YWx1ZSl7CiAgICAgICAgbjMub3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbiA9%0AIHZhbHVlKjEwMDA7CiAgICAgICAgaWYobjMub3B0aW9ucy5zbGlkZXIpIHsKICAg%0AICAgICAgIG4zLnNsaWRlci5hbmltYXRlKG4zLm9wdGlvbnMuYW5pbWF0aW9uRHVy%0AYXRpb24pCiAgICAgICAgfQogICAgICB9KQogICAgfQoKICAgIG1lbnUuYXBwZW5k%0AKCJkaXYiKS5hdHRyKCdjbGFzcycsICdtZW51LWl0ZW0nKS5odG1sKCI8YSBocmVm%0APSdodHRwczovL2dpdGh1Yi5jb20vbWljaGFsZ20vbmR0di1kMy9ibG9iL21hc3Rl%0Aci9SRUFETUUubWQnIHRhcmdldD0nX2JsYW5rJz5BYm91dCBORFRWLUQzPC9hPjwv%0AZGl2PiIpOwogICAgbjMuZG9tVGFyZ2V0LnNlbGVjdCgnLm5kdHYtbWVudS1pY29u%0AJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICQobWVudS5ub2RlKCkp%0ALmZhZGVUb2dnbGUoMjAwKTsKICAgICAgJCh0aGlzKS50b2dnbGVDbGFzcygnbWVu%0AdS1hY3RpdmUnKQogICAgfSkKICB9CgogIC8qKiBjcmVhdGVzIHRoZSBvcHRpb25h%0AbCBwbGF5IGNvbnRyb2xzIGRpdiB1c2luZyBzdmcgaWNvbnMgYW5kIGRlZmluZXMg%0AdGhlIGF0dGFjaGVkIGV2ZW50cyAqLwogIG4zLnByb3RvdHlwZS5jcmVhdGVQbGF5%0AQ29udHJvbHMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBuMyA9IHRoaXM7CgogICAg%0ALy9kZWZpbmUgU1ZHIGljb25zIHRvIGJlIHVzZWQgaW4gdGhlIHBsYXkgY29udHJv%0AbGxlcgogICAgaWYgKGQzLnNlbGVjdCgnI25kdHYtc3ZnLWljb25zJykuZW1wdHko%0AKSkgewogICAgICAkKCdib2R5JykucHJlcGVuZCgKICAgICAgJzxzdmcgaWQ9Im5k%0AdHYtc3ZnLWljb25zIiBkaXNwbGF5PSJub25lIiB2ZXJzaW9uPSIxLjEiIHhtbG5z%0APSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6%0ALy93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIxNzYiIGhlaWdodD0iMzIi%0AIHZpZXdCb3g9IjAgMCAxNzYgMzIiPicrCiAgICAgICcgIDxkZWZzPicrCiAgICAg%0AICcgICAgPGcgaWQ9Imljb24tcGxheSI+PHBhdGggY2xhc3M9InBhdGgxIiBkPSJN%0AMjYuNzE3IDE1LjE3OWwtMTMuNjk4LTguNDg2Yy0wLjk5OC0wLjY1NC0xLjgxNC0w%0ALjE3MS0xLjgxNCAxLjA3MnYxNi40NzRjMCAxLjI0MyAwLjgxOCAxLjcyNSAxLjgx%0ANCAxLjA3MGwxMy42OTktOC40ODZjMCAwIDAuNDg2LTAuMzQyIDAuNDg2LTAuODIy%0ALTAuMDAyLTAuNDc4LTAuNDg4LTAuODIxLTAuNDg4LTAuODIxeiI+PC9wYXRoPjwv%0AZz4nKwogICAgICAnICAgIDxnIGlkPSJpY29uLXBhdXNlIj48cGF0aCBjbGFzcz0i%0AcGF0aDEiIGQ9Ik0yMS42IDQuOGMtMS41OSAwLTIuODggMC40OS0yLjg4IDIuMDgw%0AdjE4LjI0YzAgMS41OSAxLjI5IDIuMDgwIDIuODggMi4wODBzMi44OC0wLjQ5IDIu%0AODgtMi4wODB2LTE4LjI0YzAtMS41OS0xLjI5LTIuMDgwLTIuODgtMi4wODB6TTEw%0ALjQgNC44Yy0xLjU5IDAtMi44OCAwLjQ5LTIuODggMi4wODB2MTguMjRjMCAxLjU5%0AIDEuMjkgMi4wODAgMi44OCAyLjA4MHMyLjg4LTAuNDkgMi44OC0yLjA4MHYtMTgu%0AMjRjMC0xLjU5LTEuMjktMi4wODAtMi44OC0yLjA4MHoiPjwvcGF0aD48L2c+JysK%0AICAgICAgJyAgICA8ZyBpZD0iaWNvbi1maXJzdCI+PHBhdGggY2xhc3M9InBhdGgx%0AIiBkPSJNMTEuOTc2IDE2YzAgMC40MTMgMC40MTkgMC43MDcgMC40MTkgMC43MDds%0AMTEuNjQgNy4zMWMwLjg2MiAwLjU2NSAxLjU2NSAwLjE0OSAxLjU2NS0wLjkydi0x%0ANC4xOTVjMC0xLjA3MC0wLjcwMi0xLjQ4Ni0xLjU2NS0wLjkyMmwtMTEuNjQgNy4z%0AMTJjMCAwLjAwMi0wLjQxOSAwLjI5NC0wLjQxOSAwLjcwN3pNNi40IDguNTcxdjE0%0ALjg1OGMwIDEuNDIxIDAuOTc5IDEuODU2IDIuNCAxLjg1NnMyLjQtMC40MzUgMi40%0ALTEuODU0di0xNC44NTljMC0xLjQyMi0wLjk3OS0xLjg1OC0yLjQtMS44NThzLTIu%0ANCAwLjQzNy0yLjQgMS44NTh6Ij48L3BhdGg+PC9nPicrCiAgICAgICcgIDwvZGVm%0Acz4nKwogICAgICAnPC9zdmc+Jyk7CiAgICB9CiAgICB2YXIgZGl2ID0gbjMuZG9t%0AVGFyZ2V0LnNlbGVjdCgnLmNvbnRyb2xzJykuYXBwZW5kKCdkaXYnKS5hdHRyKCdj%0AbGFzcycsICdwbGF5LWNvbnRyb2wtY29udGFpbmVyJyk7CiAgICBkaXYuaHRtbCgK%0AICAgICAgIjxkaXYgY2xhc3M9J3N0ZXAtYmFjay1jb250cm9sJz48c3ZnIGNsYXNz%0APSdpY29uJyB3aWR0aD0nMzInIGhlaWdodD0nMzInIHZpZXdCb3g9JzAgMCAzMiAz%0AMic+PHVzZSB4bGluazpocmVmPScjaWNvbi1maXJzdCc+PC91c2U+PC9zdmc+PC9k%0AaXY+IisKICAgICAgIjxkaXYgY2xhc3M9J3BsYXktYmFjay1jb250cm9sJz48c3Zn%0AIGNsYXNzPSdpY29uJyB3aWR0aD0nMzInIGhlaWdodD0nMzInIHZpZXdCb3g9JzAg%0AMCAzMiAzMic+PGcgdHJhbnNmb3JtPSdyb3RhdGUoMTgwLCAxNiwgMTYpJz48dXNl%0AIHhsaW5rOmhyZWY9JyNpY29uLXBsYXknPjwvdXNlPjwvZz48L3N2Zz48L2Rpdj4i%0AKwogICAgICAiPGRpdiBjbGFzcz0ncGF1c2UtY29udHJvbCc+PHN2ZyBjbGFzcz0n%0AaWNvbicgd2lkdGg9JzMyJyBoZWlnaHQ9JzMyJyB2aWV3Qm94PScwIDAgMzIgMzIn%0APjx1c2UgeGxpbms6aHJlZj0nI2ljb24tcGF1c2UnPjwvdXNlPjwvc3ZnPjwvZGl2%0APiIrCiAgICAgICI8ZGl2IGNsYXNzPSdwbGF5LWZvcndhcmQtY29udHJvbCc+PHN2%0AZyBjbGFzcz0naWNvbicgd2lkdGg9JzMyJyBoZWlnaHQ9JzMyJyB2aWV3Qm94PScw%0AIDAgMzIgMzInPjx1c2UgeGxpbms6aHJlZj0nI2ljb24tcGxheSc+PC91c2U+PC9z%0Admc+PC9kaXY+IisKICAgICAgIjxkaXYgY2xhc3M9J3N0ZXAtZm9yd2FyZC1jb250%0Acm9sJz48c3ZnIGNsYXNzPSdpY29uJyB3aWR0aD0nMzInIGhlaWdodD0nMzInIHZp%0AZXdCb3g9JzAgMCAzMiAzMic+PGcgdHJhbnNmb3JtPSdyb3RhdGUoMTgwLCAxNiwg%0AMTYpJz48dXNlIHhsaW5rOmhyZWY9JyNpY29uLWZpcnN0Jz48L3VzZT48L2c+PC9z%0Admc+PC9kaXY+IgogICAgKTsKCiAgICBkaXYuc2VsZWN0KCcuc3RlcC1iYWNrLWNv%0AbnRyb2wnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsgbjMuc3RlcEFuaW1hdGlv%0AbigxKTsgfSk7CiAgICBkaXYuc2VsZWN0KCcucGxheS1iYWNrLWNvbnRyb2wnKS5v%0AbignY2xpY2snLCBmdW5jdGlvbigpIHsgbjMucGxheUFuaW1hdGlvbigxKTsgfSk7%0ACiAgICBkaXYuc2VsZWN0KCcucGF1c2UtY29udHJvbCcpLm9uKCdjbGljaycsIGZ1%0AbmN0aW9uKCkgeyBuMy5lbmRBbmltYXRpb24oKTsgfSk7CiAgICBkaXYuc2VsZWN0%0AKCcucGxheS1mb3J3YXJkLWNvbnRyb2wnKS5vbignY2xpY2snLCBmdW5jdGlvbigp%0AIHsgbjMucGxheUFuaW1hdGlvbigpOyB9KTsKICAgIGRpdi5zZWxlY3QoJy5zdGVw%0ALWZvcndhcmQtY29udHJvbCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgeyBuMy5z%0AdGVwQW5pbWF0aW9uKCk7IH0pOwogIH0KICAKICAvKiogY3JlYXRlcyB0aGUgdGlt%0AZSBzbGlkZXIgY29udHJvbHMgYW5kIGRlZmluZXMgYXR0YWNoZWQgZXZlbnRzICov%0ACiAgbjMucHJvdG90eXBlLmNyZWF0ZVNsaWRlckNvbnRyb2wgPSBmdW5jdGlvbigp%0AIHsKICAgIHZhciBuMyA9IHRoaXM7CiAgICBuMy5kb21UYXJnZXQuc2VsZWN0KCcu%0AY29udHJvbHMnKS5hcHBlbmQoJ2RpdicpLmF0dHIoJ2NsYXNzJywgJ3NsaWRlci1j%0Ab250cm9sLWNvbnRhaW5lcicpLmFwcGVuZCgnZGl2JykuYXR0cignY2xhc3MnLCAn%0Ac2xpZGVyJyk7CiAgfQogCiAgLyoqIGxvYWQgYW5kIHByb2Nlc3MgdGhlIEpTT04g%0AZm9ybWF0dGVkIGRhdGEKICAqIEBwYXJhbSB7dXJsfEpTT059IC0gZWl0aGVyIGEg%0ATkRUVi1nZW5lcmF0ZWQgSlNPTiBvYmplY3QsIG9yIGEgVVJMIHBhdGggdG8gZmls%0AZSBjb250YWluaW5nIEpTT04gZGF0YQogICovCiAgbjMucHJvdG90eXBlLmxvYWRE%0AYXRhID0gZnVuY3Rpb24oZ3JhcGhEYXRhKSB7CiAgICB2YXIgbjMgPSB0aGlzOwog%0AICAgbjMuZW5kQW5pbWF0aW9uKCk7CiAgICBuMy5jdXJyVGltZSA9IDA7CiAgICBu%0AMy5zZWxlY3RlZE5ldHdvcmsgPSBudWxsOwogICAgbjMuc2VsZWN0ZWQgPSBudWxs%0AOwogICAgCiAgICB2YXIgcHJvY2Vzc0RhdGEgPSBmdW5jdGlvbihkYXRhKSB7CiAg%0AICAgIGNvbnNvbGUudGltZSgnbG9hZERhdGEnKTsKICAgICAgbjMuZ3JhcGggPSBk%0AYXRhLm5ldHdvcms7CiAgICAgIG4zLnRpbWVJbmRleCA9IGRhdGEucmVuZGVyOwog%0AICAgICBpZiAobjMub3B0aW9ucy5kYXRhQ2hvb3NlciAmJiAhICQuaXNQbGFpbk9i%0AamVjdChncmFwaERhdGEpKSB7CiAgICAgICAgJChuMy5kb21UYXJnZXQuc2VsZWN0%0AKCcuZGF0YV9jaG9vc2VyJykubm9kZSgpKS52YWwoZ3JhcGhEYXRhKTsKICAgICAg%0AICBuMy5kb21UYXJnZXQuc2VsZWN0KCcudmlkZW9fbGluaycpLmF0dHIoJ2hyZWYn%0ALCBncmFwaERhdGEucmVwbGFjZSgnLmpzb24nLCAnLm1wNCcpKQogICAgICB9CiAg%0AICAgIG4zLmNvbnRhaW5lci5zZWxlY3RBbGwoJy5lZGdlLCAubGFiZWwsIC5ub2Rl%0AJykucmVtb3ZlKCk7CgogICAgICBuMy5ub2RlQ29vcmRzID0ge307CgogICAgICAk%0ALmVhY2gobjMuZ3JhcGgudmFsLCBmdW5jdGlvbihpLCBuKSB7CiAgICAgICAgaWYg%0AKCEgJC5pc0VtcHR5T2JqZWN0KG4pKSB7CiAgICAgICAgICBuLmlkID0gaSsxOwog%0AICAgICAgIH0KICAgICAgICBuMy5ub2RlQ29vcmRzW24uaWRdID0gewogICAgICAg%0AICAgY29vcmQ6IFswLDBdLAogICAgICAgICAgYWN0aXZlOiBmYWxzZSwKICAgICAg%0AICAgIHNpemU6IDAsCiAgICAgICAgICBwb2ludHM6IFtdCiAgICAgICAgfQogICAg%0AICB9KQogICAgICAkLmVhY2gobjMuZ3JhcGgubWVsLCBmdW5jdGlvbihpLCBlKSB7%0ACiAgICAgICAgaWYgKCEgJC5pc0VtcHR5T2JqZWN0KGUpKSB7CiAgICAgICAgICBl%0ALmlkID0gaSsxOwogICAgICAgIH0KICAgICAgfSkKICAgICAgdmFyIHNsaWNlSW5m%0AbyA9IG4zLmdyYXBoLmdhbFsnc2xpY2UucGFyJ107CiAgICAgIAogICAgICBuMy5t%0AaW5UaW1lID0gc2xpY2VJbmZvLnN0YXJ0WzBdOwogICAgICBuMy5tYXhUaW1lID0g%0Ac2xpY2VJbmZvLmVuZFswXTsKICAgICAgbjMuaW50ZXJ2YWwgPSBzbGljZUluZm8u%0AaW50ZXJ2YWxbMF07CiAgICAgIHZhciB2YWxJbmRleCA9IHt9OwogICAgICAkLmVh%0AY2gobjMudGltZUluZGV4LCBmdW5jdGlvbihpLCB0KXsKICAgICAgICB2YWxJbmRl%0AeFt0LnN0YXJ0XSA9IGk7CiAgICAgICAgdC5yZW5kZXJEYXRhID0gbjMuZ2VuZXJh%0AdGVTbGljZVJlbmRlckRhdGEoaSk7CiAgICAgICAgZGVsZXRlIHQuZGF0YTsgLy9y%0AZW1vdmUgcmVkdW5kYW50IGRhdGEgdGhhdCB3ZSd2ZSBzdG9yZWQgaW4gcmVuZGVy%0ARGF0YQogICAgICB9KSAgICAgIAoKICAgICAgbjMudXBkYXRlRGltZW5zaW9ucygp%0AOwoKICAgICAgaWYobjMub3B0aW9ucy5zbGlkZXIpIHsKICAgICAgICB2YXIgc2xp%0AZGVyRGl2ID0gbjMuZG9tVGFyZ2V0LnNlbGVjdCgnLnNsaWRlcicpOwoKICAgICAg%0AICBzbGlkZXJEaXYuaHRtbCgnJyk7CgogICAgICAgIG4zLnNsaWRlciA9IGQzLnNs%0AaWRlcigpLmF4aXModHJ1ZSkuc3RlcChuMy5pbnRlcnZhbCk7CiAgICAgICAgbjMu%0Ac2xpZGVyLm1hcmdpbigzNSkKICAgICAgICBuMy5zbGlkZXIubWluKG4zLm1pblRp%0AbWUpCiAgICAgICAgbjMuc2xpZGVyLm1heChuMy5tYXhUaW1lK3NsaWNlSW5mb1sn%0AYWdncmVnYXRlLmR1ciddWzBdKQogICAgICAgIG4zLnNsaWRlci5hbmltYXRlKG4z%0ALm9wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb24pCiAgICAgICAgbjMuc2xpZGVyLnZh%0AbHVlKG4zLm1pblRpbWUpCiAgICAgICAgbjMuc2xpZGVyLmludGVydmFsKHNsaWNl%0ASW5mb1snYWdncmVnYXRlLmR1ciddWzBdKQogICAgICAgIG4zLnNsaWRlci5vbign%0Ac2xpZGUnLCBmdW5jdGlvbihleHQsIHZhbHVlKSB7CiAgICAgICAgICAvL0NoZWNr%0AIHRvIHNlZSBpZiBldmVudCBvcmlnaW5hdGVkIGZyb20gc2xpZGVyIGNvbnRyb2wg%0Ab3IgZWxzZXdoZXJlCiAgICAgICAgICB2YXIgZXZlbnQgPSBkMy5ldmVudDsKICAg%0AICAgICAgIGlmIChldmVudC50eXBlID09ICdkcmFnJyB8fCBkMy5zZWxlY3QoZXZl%0AbnQuY3VycmVudFRhcmdldCkuY2xhc3NlZCgnZDMtc2xpZGVyJykpIHsKICAgICAg%0AICAgICAgbjMuZW5kQW5pbWF0aW9uKCk7CiAgICAgICAgICAgIG4zLmFuaW1hdGVH%0AcmFwaChuMy5jdXJyVGltZSwgdmFsSW5kZXhbdmFsdWVdLCB0cnVlKTsKICAgICAg%0AICAgIH0KICAgICAgICB9KQogICAgICAgIAogICAgICAgIG4zLnNsaWRlci5vbign%0Ac2xpZGVlbmQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgIG4zLnNsaWRlci5hbmlt%0AYXRlKG4zLm9wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb24pOwogICAgICAgIH0pCiAg%0AICAgICAgc2xpZGVyRGl2Lm9uKCdtb3VzZWRvd24nLCBmdW5jdGlvbihlKSB7IAog%0AICAgICAgICAgbjMuc2xpZGVyLmFuaW1hdGUoMCk7CiAgICAgICAgfSkKCiAgICAg%0AICAgc2xpZGVyRGl2LmNhbGwobjMuc2xpZGVyKTsKICAgICAgfQogICAgICBjb25z%0Ab2xlLnRpbWVFbmQoJ2xvYWREYXRhJyk7CiAgICAgIGlmIChuMy5vcHRpb25zLmFu%0AaW1hdGVPbkxvYWQpIHsKICAgICAgICBuMy5wbGF5QW5pbWF0aW9uKCk7CiAgICAg%0AIH0gZWxzZSB7CiAgICAgICAgbjMudXBkYXRlR3JhcGgobjMub3B0aW9ucy5hbmlt%0AYXRpb25EdXJhdGlvbik7CiAgICAgIH0KICAgIH07CgogICAgaWYoJC5pc1BsYWlu%0AT2JqZWN0KGdyYXBoRGF0YSkpIHsKICAgICAgcHJvY2Vzc0RhdGEoZ3JhcGhEYXRh%0AKQogICAgfSBlbHNlIHsKICAgICAgJC5nZXRKU09OKGdyYXBoRGF0YSwgZnVuY3Rp%0Ab24oZGF0YSkgewogICAgICAgIHByb2Nlc3NEYXRhKGRhdGEpOwogICAgICB9KTsK%0AICAgIH0KICB9CgogIHZhciBjb2xvciA9IGQzLnNjYWxlLmNhdGVnb3J5MjAoKTsK%0ACiAgLyoqIEZvciBhIGdpdmVuIHRpbWUgc2xpY2UsIHByb2Nlc3MgdGltZUluZGV4%0AIGRhdGEgYW5kIGdlbmVyYXRlIHJlbmRlciBkYXRhLCBmaWxsaW5nIGluIGRlZmF1%0AbHRzIGFzIG5lY2Vzc2FyeQogICogQHBhcmFtIHtpbnRlZ2VyfSAtIHRoZSB0aW1l%0AIGluZGV4IHRvIHByb2Nlc3MKICAqIEBwcml2YXRlCiAgKi8KICBuMy5wcm90b3R5%0AcGUuZ2VuZXJhdGVTbGljZVJlbmRlckRhdGEgPSBmdW5jdGlvbih0aW1lKSB7CiAg%0AICB2YXIgbjMgPSB0aGlzOwoKICAgIHZhciBzbGljZVJlbmRlckRhdGEgPSB7CiAg%0AICAgIGdyYXBoOiB7fSwKICAgICAgbm9kZToge30sCiAgICAgIGVkZ2U6IHt9CiAg%0AICB9OwoKICAgIHZhciBkYXRhID0gbjMudGltZUluZGV4W3RpbWVdLmRhdGE7Cgog%0AICAgJC5lYWNoKFsnZ3JhcGgnLCAnbm9kZScsICdlZGdlJ10sIGZ1bmN0aW9uKGks%0AIHR5cGUpIHsKICAgICAgdmFyIHNvdXJjZUxpc3QgPSBbXTsKICAgICAgaWYgKHR5%0AcGUgPT0gJ2dyYXBoJykgewogICAgICAgIHNvdXJjZUxpc3QgPSBbbjMuZ3JhcGgu%0AZ2FsXTsKICAgICAgfSBlbHNlIGlmICh0eXBlID09ICdub2RlJykgewogICAgICAg%0AIHNvdXJjZUxpc3QgPSBuMy5ncmFwaC52YWw7CiAgICAgIH0gZWxzZSB7CiAgICAg%0AICAgc291cmNlTGlzdCA9IG4zLmdyYXBoLm1lbDsKICAgICAgfQoKICAgICAgJC5l%0AYWNoKHNvdXJjZUxpc3QsIGZ1bmN0aW9uKGksIGl0ZW0pIHsKICAgICAgICB2YXIg%0AaWQgPTA7CiAgICAgICAgdmFyIHByb3BlcnR5SW5kZXg7CiAgICAgICAgdmFyIGl0%0AZW1Qcm9wZXJ0aWVzID0ge307CgogICAgICAgIGlmICh0eXBlICE9ICdncmFwaCcp%0AIHsKICAgICAgICAgIGlkID0gaXRlbS5pZDsKICAgICAgICAgIHByb3BlcnR5SW5k%0AZXggPSBkYXRhLmFjdGl2ZVt0eXBlKydzJ11baWRdOwogICAgICAgIH0KCiAgICAg%0AICAgaWYgKHR5cGUgPT0gJ2dyYXBoJyB8fCBwcm9wZXJ0eUluZGV4ICE9PSB1bmRl%0AZmluZWQpIHsKICAgICAgICAgIGl0ZW1Qcm9wZXJ0aWVzLmlkID0gaWQ7CiAgICAg%0AICAgICAkLmVhY2gobmR0dlByb3BlcnRpZXNbdHlwZV0sIGZ1bmN0aW9uKHByb3Bl%0AcnR5LCBkZWYpIHsKICAgICAgICAgICAgdmFyIGxvb2t1cCA9IHByb3BlcnR5SW5k%0AZXg7CiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRlZjsKCiAgICAgICAgICAgIC8v%0ASWYgdGhlIHByb3BlcnR5IGxpc3QgaGFzIG9ubHkgb25lIHZhbHVlLCB3ZSBhcHBs%0AeSBpdCB0byBhbGwgaXRlbXMKICAgICAgICAgICAgaWYodHlwZW9mIGRhdGFbcHJv%0AcGVydHldICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhW3Byb3BlcnR5XS5sZW5ndGgg%0APT0gMSkgewogICAgICAgICAgICAgIGxvb2t1cCA9IDA7CiAgICAgICAgICAgIH0K%0AICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW3Byb3BlcnR5XSAhPT0gJ3VuZGVm%0AaW5lZCcgJiYgZGF0YVtwcm9wZXJ0eV1bbG9va3VwXSAhPT0gdW5kZWZpbmVkKSB7%0ACiAgICAgICAgICAgICAgdmFsdWUgPSBkYXRhW3Byb3BlcnR5XVtsb29rdXBdOwog%0AICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAocHJvcGVydHkgPT0gJ21haW4nIHx8%0AIHByb3BlcnR5ID09ICd4bGFiJykpIHsKICAgICAgICAgICAgICAgIHZhbHVlID0g%0AdmFsdWUuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgICAgfSBlbHNlIGlmICghIHZh%0AbHVlICYmIHByb3BlcnR5ID09ICdjb29yZCcpIHsKICAgICAgICAgICAgICAgIGNv%0AbnNvbGUubG9nKCdtaXNzaW5nIGNvb3JkaW5hdGVzIGZvciBub2RlICcraWQrICcg%0AYXQgdGltZSAnK3RpbWUrJyAoJytuMy50aW1lSW5kZXhbdGltZV0uc3RhcnQrJy0n%0AK24zLnRpbWVJbmRleFt0aW1lXS5lbmQrJyknKTsKICAgICAgICAgICAgICB9CiAg%0AICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAnZ3JhcGgnICYmIHR5cGVvZiBk%0AYXRhW3Byb3BlcnR5XSAhPT0gJ3VuZGVmaW5lZCcpIHsgLy9ncmFwaCBwcm9wZXJ0%0AaWVzIGdldCBhcHBsaWVkIGRpcmVjdGx5CiAgICAgICAgICAgICAgdmFsdWUgPSBk%0AYXRhW3Byb3BlcnR5XTsKICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eSA9%0APSAnbGFiZWwnICYmIHNsaWNlUmVuZGVyRGF0YS5ncmFwaC5kaXNwbGF5bGFiZWxz%0AKSB7CiAgICAgICAgICAgICAgdmFsdWUgPSBpZDsKICAgICAgICAgICAgfQogICAg%0AICAgICAgICBpZiAodmFsdWUgJiYgJC50eXBlKHZhbHVlKSA9PT0gJ3N0cmluZycg%0AJiYgdmFsdWUubWF0Y2goJ3JnYmEnKSkgewogICAgICAgICAgICAgIHZhciByZ2Jh%0AID0gdmFsdWUubWF0Y2goL15yZ2JhXCgoLiopLCA/KC4qKVwpJC8pOwogICAgICAg%0AICAgICAgIGlmIChyZ2JhKSB7CiAgICAgICAgICAgICAgICB2YWx1ZSA9ICJyZ2Io%0AIityZ2JhWzFdKyIpIjsKICAgICAgICAgICAgICAgIHZhciBvcGFjaXR5UHJvcCA9%0AIHByb3BlcnR5KyIuc3Ryb2tlLW9wYWNpdHkiOwogICAgICAgICAgICAgICAgaWYg%0AKHByb3BlcnR5ID09ICd2ZXJ0ZXguY29sJyB8fCBwcm9wZXJ0eSA9PSAnYmcnIHx8%0AIHByb3BlcnR5ID09ICdsYWJlbC5jb2wnKSB7CiAgICAgICAgICAgICAgICAgIG9w%0AYWNpdHlQcm9wID0gcHJvcGVydHkrIi5maWxsLW9wYWNpdHkiOwogICAgICAgICAg%0AICAgICAgfQogICAgICAgICAgICAgICAgaXRlbVByb3BlcnRpZXNbb3BhY2l0eVBy%0Ab3BdID0gcmdiYVsyXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAg%0AICAgICAgICAgLy8gaWYgKHByb3BlcnR5ID09ICdlZGdlLmx3ZCcpIHsKICAgICAg%0AICAgICAgICAvLyB2YWx1ZSA9IGlkKjAuMjsKICAgICAgICAgICAgLy8gfQogICAg%0AICAgICAgICAvLyBpZiAocHJvcGVydHkgPT0gJ2VkZ2UuY29sJyB8fCBwcm9wZXJ0%0AeSA9PSAndmVydGV4LmNvbCcgfHwgcHJvcGVydHkgPT0gJ2xhYmVsLmNvbCcpIHsK%0AICAgICAgICAgICAgLy8gICB2YWx1ZSA9IHR5cGUgPT0gJ2VkZ2UnID8gY29sb3Io%0AdGltZSkgOiBjb2xvcih0aW1lKzEpOwogICAgICAgICAgICAvLyB9CiAgICAgICAg%0AICAgIGl0ZW1Qcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IHZhbHVlOwogICAgICAgICAg%0AfSkKCiAgICAgICAgICBpZiAodHlwZSA9PSAnZWRnZScpIHsKICAgICAgICAgICAg%0AJC5lYWNoKFsnaW5sJywgJ291dGwnXSwgZnVuY3Rpb24oaSwgZGlyZWN0aW9uKSB7%0ACiAgICAgICAgICAgICAgdmFyIG90aGVyZGlyID0gZGlyZWN0aW9uID09ICdpbmwn%0AID8gJ291dGwnIDogJ2lubCc7CiAgICAgICAgICAgICAgaXRlbVByb3BlcnRpZXNb%0AZGlyZWN0aW9uXSA9IHsKICAgICAgICAgICAgICAgIGlkOiBpdGVtW2RpcmVjdGlv%0Abl1bMF0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc2xpY2VSZW5kZXJE%0AYXRhLm5vZGVbaXRlbVtkaXJlY3Rpb25dWzBdXS5saW5rc1tpdGVtW290aGVyZGly%0AXVswXV0gPSBpZDsKICAgICAgICAgICAgfSk7ICAgICAgCiAgICAgICAgICB9IGVs%0Ac2UgaWYgKHR5cGUgPT0gJ25vZGUnKSB7CiAgICAgICAgICAgIGl0ZW1Qcm9wZXJ0%0AaWVzLmxpbmtzID0ge307CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZSA9%0APSAnZ3JhcGgnKSB7CiAgICAgICAgICAgIHNsaWNlUmVuZGVyRGF0YVt0eXBlXSA9%0AIGl0ZW1Qcm9wZXJ0aWVzOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg%0Ac2xpY2VSZW5kZXJEYXRhW3R5cGVdW2lkXSA9IGl0ZW1Qcm9wZXJ0aWVzOwogICAg%0AICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAnbm9kZScpIHsKICAg%0AICAgICAgIG4zLm5vZGVDb29yZHNbaWRdLmFjdGl2ZSA9IGZhbHNlOwogICAgICAg%0AIH0KICAgICAgfSkKICAgIH0pCiAgICByZXR1cm4gc2xpY2VSZW5kZXJEYXRhOwog%0AIH0KCiAgLyoqIHVwZGF0ZXMgcmVuZGVyZGF0YSBub2RlIGNvb3JkaW5hdGVzIGJh%0Ac2VkIG9uIGN1cnJlbnQgc3RhdGUgb2YgZ3JhcGgsIGFuZCB1cGRhdGVzIG5vZGUg%0Ac3RhdGUgdHJhY2tlcgogICogQHBhcmFtIHtpbnRlZ2VyfSAtIHRoZSB0aW1lIGlu%0AZGV4IHRvIHByb2Nlc3MKICAqIEBwcml2YXRlCiAgKi8KICBuMy5wcm90b3R5cGUu%0AdXBkYXRlU2xpY2VSZW5kZXJEYXRhID0gZnVuY3Rpb24odGltZSkgewogICAgdmFy%0AIG4zID0gdGhpczsKCiAgICB2YXIgcHJldk5vZGVDb29yZHMgPSAkLmV4dGVuZCh7%0AfSwgbjMubm9kZUNvb3Jkcyk7CiAgICB2YXIgZGF0YSA9IG4zLnRpbWVJbmRleFt0%0AaW1lXS5yZW5kZXJEYXRhOwogICAgCiAgICAkLmVhY2gobjMubm9kZUNvb3Jkcywg%0AZnVuY3Rpb24oaWQsIG5vZGVDb29yZCkgewogICAgICB2YXIgbm9kZSA9IGRhdGEu%0Abm9kZVtpZF07CiAgICAgIGlmIChub2RlKSB7CiAgICAgICAgaWYgKCFub2RlLmNv%0Ab3JkKSB7CiAgICAgICAgICBub2RlLnJlbmRlckNvb3JkID0gbm9kZUNvb3JkLmNv%0Ab3JkOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBub2RlLnJlbmRlckNvb3Jk%0AID0gbm9kZS5jb29yZDsKICAgICAgICB9CiAgICAgICAgbjMubm9kZUNvb3Jkc1tp%0AZF0gPSB7CiAgICAgICAgICBjb29yZDogbm9kZS5yZW5kZXJDb29yZCwKICAgICAg%0AICAgIGFjdGl2ZTogdHJ1ZSwKICAgICAgICAgIHNpemU6IG5vZGVbJ3ZlcnRleC5j%0AZXgnXSwKICAgICAgICAgIHByZXZQb2ludHM6IHByZXZOb2RlQ29vcmRzW2lkXS5w%0Ab2ludHMsCiAgICAgICAgICAvL0ZJWE1FIC0gdGhpcyBjb3VsZCBicmVhayBpZiBh%0AIG5vZGUgaXMgZXZlciBjZW50ZXJlZCBhdCAwLDAKICAgICAgICAgIHByZXZDb29y%0AZDogcHJldk5vZGVDb29yZHNbaWRdLmNvb3JkWzBdICYmIHByZXZOb2RlQ29vcmRz%0AW2lkXS5jb29yZFsxXSA/IHByZXZOb2RlQ29vcmRzW2lkXS5jb29yZCA6IG51bGwK%0AICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbjMubm9kZUNvb3Jkc1tp%0AZF0uYWN0aXZlID0gZmFsc2U7CiAgICAgIH0KICAgIH0pOwogICAgJC5lYWNoKGRh%0AdGEuZWRnZSwgZnVuY3Rpb24oaWQsIGVkZ2UpewogICAgICAkLmVhY2goWydpbmwn%0ALCAnb3V0bCddLCBmdW5jdGlvbihpLCBkaXJlY3Rpb24pewogICAgICAgIHZhciBu%0Ab2RlaWQgPSBlZGdlW2RpcmVjdGlvbl0uaWQ7CiAgICAgICAgdmFyIHByZXZDb29y%0AZCA9IHByZXZOb2RlQ29vcmRzW25vZGVpZF07CiAgICAgICAgdmFyIGNvb3JkcyA9%0AIG4zLm5vZGVDb29yZHNbbm9kZWlkXSB8fCBwcmV2Q29vcmQ7CiAgICAgICAgZWRn%0AZVtkaXJlY3Rpb25dID0gewogICAgICAgICAgaWQ6IG5vZGVpZCwKICAgICAgICAg%0AIGNvb3JkczogY29vcmRzLAogICAgICAgICAgcHJldlBvaW50czpwcmV2Q29vcmQu%0AcG9pbnRzLAogICAgICAgICAgLy9JZiB0aGUgbm9kZSBpcyBuZXdseSBhY3RpdmUs%0AIHVzZSB0aGUgY3VycmVudCBjb29yZGluYXRlcyBmb3IgdGhlIHN0YXJ0IHZhbHVl%0AcwogICAgICAgICAgc3RhcnRDb29yZHM6ICEgcHJldkNvb3JkLmFjdGl2ZSA/IGNv%0Ab3JkcyA6IHByZXZDb29yZAogICAgICAgIH0KICAgICAgfSkKICAgIH0pCiAgICBy%0AZXR1cm4gZGF0YTsKICB9CgogIC8qKiBjcmVhdGUgYSBwYXRoIGRlc2NyaXB0aW9u%0AcyBvbiB0aGUgZ2l2ZW4gZGF0YSBzZWxlY3Rpb24KICAqIEBwYXJhbSB7b2JqZWN0%0AfSAtIHRoZSBEMyBkYXRhIHNlbGVjdGlvbgogICogQHBhcmFtIHtORFRWX0QzfQog%0AICogQHBhcmFtIHtib29sZWFufSAtIElmIHRydWUsIHBvc2l0aW9ucyBlbmQgb2Yg%0AbGluZSBvZmZzZXQgb2Ygbm9kZSByYWRpdXMgdG8gYWNjb21vZGF0ZSBhcnJvd2hl%0AYWQgCiAgKiBAcGFyYW0ge2Jvb2xlYW59IC0gSWYgdHJ1ZSwgZHJhd3MgcGF0aCB1%0Ac2luZyBjdXJyZW50IG5vZGUgcG9zaXRpb25zIChiZWZvcmUgYW5pbWF0aW9uIGJl%0AZ2lucykKICAqIEBwcml2YXRlCiAgKi8KICBuMy5wcm90b3R5cGUuZHJhd0VkZ2Ug%0APSBmdW5jdGlvbihzZWxlY3Rpb24sIG4zLCB1c2VhcnJvd3MsIHN0YXJ0KSB7CiAg%0AICBzZWxlY3Rpb24uYXR0cih7CiAgICAgIGQ6IGZ1bmN0aW9uKGQpIHsKICAgICAg%0AICB2YXIgdHlwZSA9IHN0YXJ0ID8gJ3N0YXJ0Q29vcmRzJyA6ICdjb29yZHMnOwoK%0AICAgICAgICB2YXIgc3RhcnROb2RlID0gZC5vdXRsW3R5cGVdOwogICAgICAgIHZh%0AciBlbmROb2RlID0gZC5pbmxbdHlwZV07CiAgICAgICAgdmFyIHN0YXJ0Q29vcmRz%0AID0gW24zLnhTY2FsZShzdGFydE5vZGUuY29vcmRbMF0pLCBuMy55U2NhbGUoc3Rh%0AcnROb2RlLmNvb3JkWzFdKV07CiAgICAgICAgdmFyIGVuZENvb3JkcyA9IFtuMy54%0AU2NhbGUoZW5kTm9kZS5jb29yZFswXSksIG4zLnlTY2FsZShlbmROb2RlLmNvb3Jk%0AWzFdKV07CgogICAgICAgIGlmKHVzZWFycm93cyB8fCBuZHR2UHJvcGVydGllcy5n%0AcmFwaC5lZGdlT2Zmc2V0KSB7CiAgICAgICAgICB2YXIgYXJyb3dPZmZzZXQgPSB1%0Ac2VhcnJvd3MgPyBzY2FsZUFycm93aGVhZHMoZCkqZFsnZWRnZS5sd2QnXSA6IDA7%0ACiAgICAgICAgICBzdGFydENvb3JkcyA9IGZpbmROb2RlSW50ZXJzZWN0aW9uKG4z%0ALCBkLm91dGwuaWQsIGVuZENvb3JkcywgbmR0dlByb3BlcnRpZXMuZ3JhcGguZWRn%0AZU9mZnNldCwgc3RhcnQpCiAgICAgICAgICBlbmRDb29yZHMgPSBmaW5kTm9kZUlu%0AdGVyc2VjdGlvbihuMywgZC5pbmwuaWQsIHN0YXJ0Q29vcmRzLCBhcnJvd09mZnNl%0AdCtuZHR2UHJvcGVydGllcy5ncmFwaC5lZGdlT2Zmc2V0LCBzdGFydCkKICAgICAg%0AICB9CiAgICAgICAgZFsnY3VycmVudENvb3JkcyddID0gW3N0YXJ0Q29vcmRzLCBl%0AbmRDb29yZHNdOwogICAgICAgIHJldHVybiAnTSAnK3N0YXJ0Q29vcmRzWzBdLnRv%0ARml4ZWQoMSkrJyAnK3N0YXJ0Q29vcmRzWzFdLnRvRml4ZWQoMSkrJyBMICcrZW5k%0AQ29vcmRzWzBdLnRvRml4ZWQoMSkrJyAnK2VuZENvb3Jkc1sxXS50b0ZpeGVkKDEp%0AOyAgICAgCiAgICAgIH0KICAgIH0pCiAgfQoKICAvKiogaW5pdGlhbGl6ZXMgYSBE%0AMyBsaW5lIGRyYXdpbmcgZnVuY3Rpb24KICAqIEBwcml2YXRlICovCiAgdmFyIGRy%0AYXdMaW5lID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gZDMuc3ZnLmxpbmUoKQog%0AICAgICAueChmdW5jdGlvbihkKXtyZXR1cm4gZFswXTt9KQogICAgICAueShmdW5j%0AdGlvbihkKXtyZXR1cm4gZFsxXTt9KQogIH0KICAKICAvKiogb2Zmc2V0IGEgbGlu%0AZSBiZXR3ZWVuIHR3byBnaXZlbiBwb2ludHMgYnkgdGhlIHNwZWNpZmllZCBhbW91%0AbnQuIHJldHVybnMgdGhlIG5ldyB0YXJnZXQgcG9pbnQKICAqIEBwYXJhbSB7cG9p%0AbnR9IC0gdGhlIG9yaWdpbiBwb2ludAogICogQHBhcmFtIHtwb2ludH0gLSB0aGUg%0AdGFyZ2V0IHBvaW50CiAgKiBAcGFyYW0ge251bWJlcn0gLSB0aGUgb2Zmc2V0IGFt%0Ab3VudCAoYXMgbGVuZ3RoIG9mIGxpbmUpCiAgKiBAcHJpdmF0ZSAqLwogIHZhciBv%0AZmZzZXRMaW5lID0gZnVuY3Rpb24ocG9pbnRBLCBwb2ludEIsIG9mZnNldCkgewog%0AICAgcG9pbnRBID0gcG9pbnRBLm1hcChwYXJzZUZsb2F0KTsKICAgIHBvaW50QiA9%0AIHBvaW50Qi5tYXAocGFyc2VGbG9hdCk7CgogICAgdmFyIHhsZW4gPSBwb2ludEJb%0AMF0gLSBwb2ludEFbMF07CiAgICB2YXIgeWxlbiA9IHBvaW50QlsxXSAtIHBvaW50%0AQVsxXTsKCiAgICAvLyBEZXRlcm1pbmUgaHlwb3RlbnVzZSBsZW5ndGgKICAgIHZh%0AciBobGVuID0gTWF0aC5zcXJ0KE1hdGgucG93KHhsZW4sMikgKyBNYXRoLnBvdyh5%0AbGVuLDIpKTsKCiAgICAvLyBEZXRlcm1pbmUgdGhlIHJhdGlvIGJldHdlZW4gdGhl%0AIHNob3J0ZW5lZCB2YWx1ZSBhbmQgdGhlIGZ1bGwgaHlwb3RlbnVzZS4KICAgIHZh%0AciByYXRpbyA9IChobGVuIC0gb2Zmc2V0KSAvIGhsZW47CgogICAgLy9JZiB0aGUg%0AcmF0aW8gaXMgaW52YWxpZCwganVzdCB1c2UgdGhlIG9yaWdpbmFsIGNvb3JkaW5h%0AdGVzCiAgICBpZiAoJC5pc051bWVyaWMocmF0aW8pKSB7IAogICAgICByZXR1cm4g%0AWwogICAgICAgIHBvaW50QVswXSArICh4bGVuICogcmF0aW8pLAogICAgICAgIHBv%0AaW50QVsxXSArICh5bGVuICogcmF0aW8pCiAgICAgIF07CiAgICB9IGVsc2Ugewog%0AICAgICByZXR1cm4gcG9pbnRCOwogICAgfQogIH0KCiAgdmFyIHNjYWxlQXJyb3do%0AZWFkcyA9IGZ1bmN0aW9uKGQpIHsKICAgIHJldHVybiA2LTIuNSpNYXRoLmF0YW4o%0AZFsnZWRnZS5sd2QnXSouNikKICB9CiAgLyoqIGZpbmQgdGhlIHBvaW50IGF0IHdo%0AaWNoIGEgbGluZSBkcmF3biBmcm9tIGEgcG9pbnQgdG8gdGhlIGNlbnRlciBvZiBh%0AIG5vZGUgaW50ZXJzZWN0cyB3aXRoIHRoZSBub2RlcyBib3JkZXIuCiAgKiByZXR1%0Acm5zIHRoZSBjb29yZGluYXRlLCBvcHRpb25hbGx5IGFwcGx5aW5nIGFuIG9mZnNl%0AdAogICogQHBhcmFtIHtuM30gbjMgLSB0aGUgbjMgb2JqZWN0CiAgKiBAcGFyYW0g%0Ae2lkfSBpZCAtIHRoZSBub2RlIGlkCiAgKiBAcGFyYW0ge3BvaW50fSBwb2ludCAt%0AIHRoZSBwb2ludCBvZiBvcmlnaW4gZm9yIHRoZSBsaW5lCiAgKiBAcGFyYW0geyBu%0AdW1iZXJ9IG9mZnNldCAtIHRoZSBvZmZzZXQgYW1vdW50IHRvIGFwcGx5CiAgKiBA%0AcGFyYW0ge2Jvb2xlYW59IHVzZVByZXYgLSBzaG91bGQgd2UgdXNlIHRoZSBjdXJy%0AZW50IHNsaWNlIGNvb3JkaW5hdGVzLCBvciB0aG9zZSBvZiB0aGUgcHJldmlvdXMg%0Ac3RhdGU/CiAgKiBAcHJpdmF0ZSAqLwogIHZhciBmaW5kTm9kZUludGVyc2VjdGlv%0AbiA9IGZ1bmN0aW9uKG4zLCBpZCwgcG9pbnQsIG9mZnNldCwgdXNlUHJldikgewog%0AICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7CiAgICB2YXIgbm9kZURhdGEgPSBuMy5u%0Ab2RlQ29vcmRzW2lkXTsKICAgIHZhciBjZW50ZXIgPSB1c2VQcmV2ICYmIG5vZGVE%0AYXRhLnByZXZDb29yZCA/IG5vZGVEYXRhLnByZXZDb29yZC5zbGljZSgpIDogbm9k%0AZURhdGEuY29vcmQuc2xpY2UoKTsKICAgIHZhciBpbnRlcnNlY3Rpb24gPSBbCiAg%0AICAgIG4zLnhTY2FsZShjZW50ZXJbMF0pLAogICAgICBuMy55U2NhbGUoY2VudGVy%0AWzFdKQogICAgXTsKCiAgICBpZiAobm9kZURhdGEucG9pbnRzKSB7CiAgICAgIHZh%0AciBwb2ludHMgPSB1c2VQcmV2ICYmIG5vZGVEYXRhLnByZXZQb2ludHMubGVuZ3Ro%0AID8gbm9kZURhdGEucHJldlBvaW50cyA6IG5vZGVEYXRhLnBvaW50czsKICAgICAg%0AaW50ZXJzZWN0aW9uID0gZmluZFBvbHlnb25JbnRlcnNlY3Rpb24ocG9pbnRzLCBp%0AbnRlcnNlY3Rpb24sIHBvaW50KTsKICAgIH0gZWxzZSB7CiAgICAgIG9mZnNldCAr%0APSBub2RlRGF0YS5zaXplICogbjMuYmFzZU5vZGVTaXplOwogICAgfQogICAgcmV0%0AdXJuIG9mZnNldExpbmUocG9pbnQsIGludGVyc2VjdGlvbiwgb2Zmc2V0KTsKICB9%0ACiAKICAvKiogZmluZCB0aGUgcG9pbnQgb2YgaW50ZXNlY3Rpb24gb2YgdHdvIGxp%0AbmVzIC0gYWRhcHRlZCBmcm9tIGh0dHA6Ly9wYXVsYm91cmtlLm5ldC9nZW9tZXRy%0AeS9wb2ludGxpbmVwbGFuZS8gCiAgKiBAcHJpdmF0ZSAqLwogIHZhciBmaW5kTGlu%0AZUludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGEsIGIsIGMsIGQpIHsKICAgIHZhciBk%0AZW5vbWluYXRvciA9IChkWzFdIC0gY1sxXSkgKiAoYlswXSAtIGFbMF0pIC0gKGRb%0AMF0gLSBjWzBdKSAqIChiWzFdIC0gYVsxXSk7CiAgICB2YXIgcHJlY2lzaW9uID0g%0AMTAwMDAwOwoKICAgIHZhciBvbmUgPSAoIChkWzBdIC0gY1swXSkgKiAoYVsxXSAt%0AIGNbMV0pIC0gKGRbMV0gLSBjWzFdKSAqIChhWzBdIC0gY1swXSkgKSAvIGRlbm9t%0AaW5hdG9yOwogICAgdmFyIHR3byA9ICggKGJbMF0gLSBhWzBdKSAqIChhWzFdIC0g%0AY1sxXSkgLSAoYlsxXSAtIGFbMV0pICogKGFbMF0gLSBjWzBdKSApIC8gZGVub21p%0AbmF0b3I7CiAgICBvbmUgPSBNYXRoLnJvdW5kKG9uZSAqIHByZWNpc2lvbikgLyBw%0AcmVjaXNpb247CiAgICB0d28gPSBNYXRoLnJvdW5kKHR3byAqIHByZWNpc2lvbikg%0ALyBwcmVjaXNpb247CgogICAgaWYgKG9uZSA8PSAxICYmIG9uZSA+PSAwICYmIHR3%0AbyA8PSAxICYmIHR3byA+PSAwKSB7CiAgICAgIHZhciB4ID0gYVswXSArIG9uZSAq%0AIChiWzBdIC0gYVswXSk7CiAgICAgIHZhciB5ID0gYVsxXSArIG9uZSAqIChiWzFd%0AIC0gYVsxXSk7IAogICAgICByZXR1cm4gW3gseV07CiAgICB9CiAgfQoKICAvKiog%0AZmluZCB0aGUgcG9pbnQgYXQgd2hpY2ggYSBsaW5lIGludGVyc2VjdCBhIHBvbHln%0Ab24KICAqIEBwcml2YXRlICovCiAgdmFyIGZpbmRQb2x5Z29uSW50ZXJzZWN0aW9u%0AID0gZnVuY3Rpb24ocG9pbnRzLCBjZW50ZXJBLCBjZW50ZXJCKSB7CiAgICB2YXIg%0AaW50ZXJzZWN0aW9uID0gW107CiAgICBmb3IodmFyIGkgPSAwOyBpPHBvaW50cy5s%0AZW5ndGgtMTsgaSsrKSB7CiAgICAgIHZhciByZXMgPSBmaW5kTGluZUludGVyc2Vj%0AdGlvbihwb2ludHNbaV0sIHBvaW50c1tpKzFdLCBjZW50ZXJBLCBjZW50ZXJCKTsK%0AICAgICAgaWYgKHJlcykgewogICAgICAgIGludGVyc2VjdGlvbiA9IHJlczsKICAg%0AICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKCEgaW50ZXJzZWN0aW9u%0ALmxlbmd0aCkgewogICAgICBpbnRlcnNlY3Rpb24gPSBmaW5kTGluZUludGVyc2Vj%0AdGlvbihwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSwgcG9pbnRzWzBdLCBjZW50ZXJB%0ALCBjZW50ZXJCKTsKICAgIH0KICAgIGlmICghIGludGVyc2VjdGlvbikgewogICAg%0AICBjb25zb2xlLmxvZygidW5hYmxlIHRvIGZpbmQgaW50ZXJzZWN0aW9uISB1c2lu%0AZyB0YXJnZXQgcG9pbnQiLCBwb2ludHMsIGNlbnRlckEsIGNlbnRlckIpOwoKICAg%0AICAgLy9kZWJ1Z2dpbmcgY29kZQogICAgICAvLyB2YXIgY29sb3IgPSBkMy5zY2Fs%0AZS5jYXRlZ29yeTEwKCkuZG9tYWluKGQzLnJhbmdlKDAsMTApKShncmFwaDIuY3Vy%0AclRpbWUpOwogICAgICAvLyBkMy5zZWxlY3QoJy5jb250YWluZXInKS5hcHBlbmQo%0AJ3BhdGgnKS5hdHRyKCdkJywgIk0gIitjZW50ZXJBWzBdICsgJyAnK2NlbnRlckFb%0AMV0gKyAnIEwgJysgY2VudGVyQlswXSArICcgJytjZW50ZXJCWzFdKS5zdHlsZSh7%0AJ3N0cm9rZSc6IGNvbG9yfSkKICAgICAgLy8gZm9yKGkgPSAwOyBpPHBvaW50cy5s%0AZW5ndGgtMTsgaSsrKSB7CiAgICAgIC8vICAgZDMuc2VsZWN0KCcuY29udGFpbmVy%0AJykuYXBwZW5kKCdwYXRoJykuYXR0cignZCcsICJNICIrcG9pbnRzW2ldWzBdICsg%0AJyAnK3BvaW50c1tpXVsxXSArICcgTCAnKyBwb2ludHNbaSsxXVswXSArICcgJytw%0Ab2ludHNbaSsxXVsxXSkuc3R5bGUoeydzdHJva2UnOiBjb2xvcn0pCiAgICAgIC8v%0AIH0KICAgICAgLy8gZDMuc2VsZWN0KCcuY29udGFpbmVyJykuYXBwZW5kKCdwYXRo%0AJykuYXR0cignZCcsICJNICIrcG9pbnRzW3BvaW50cy5sZW5ndGgtMV1bMF0gKyAn%0AICcrcG9pbnRzW3BvaW50cy5sZW5ndGgtMV1bMV0gKyAnIEwgJysgcG9pbnRzWzBd%0AWzBdICsgJyAnK3BvaW50c1swXVsxXSkuc3R5bGUoeydzdHJva2UnOiBjb2xvcn0p%0ACiAgICAgIHJldHVybiBjZW50ZXJCOyAvL0ZJWE1FIC0gdGhpcyBzaG91bGQgYmUg%0AZW5hYmxlZCBmb3IgcHJvZHVjdGlvbgoKICAgIH0KICAgIHJldHVybiBpbnRlcnNl%0AY3Rpb247CiAgfQoKICAvKiogY3JlYXRlcyBhIHBvbHlnb24tc2hhcGVkIHBhdGgg%0AYXR0cmlidXRlIGZvciBnaXZlbiBub2RlIHNlbGVjdGlvbgogICogQHBhcmFtIHtE%0AM3NlbGVjdGlvbn0KICAqIEBwYXJhbSB7TkRUVl9EM30KICAqIEBwcml2YXRlCiAg%0AKi8KICBuMy5wcm90b3R5cGUuZHJhd1BvbHlnb25Ob2RlID0gZnVuY3Rpb24oc2Vs%0AZWN0aW9uLCBuMyl7CiAgICAvLyBjb25zb2xlLnByb2ZpbGUoJ3BvbHltYXRoJykK%0AICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckRhdGEubikKICAgIHNlbGVjdGlvbi5h%0AdHRyKHsKICAgICAgcG9pbnRzOiBmdW5jdGlvbihkLCBpKSB7IAogICAgICAgIHZh%0AciBzaWRlcyA9IGRbJ3ZlcnRleC5zaWRlcyddOwogICAgICAgIHZhciBzaXplID0g%0AZFsndmVydGV4LmNleCddICogbjMuYmFzZU5vZGVTaXplOwogICAgICAgIHZhciBj%0Ab29yZHMgPSBkLnJlbmRlckNvb3JkOwogICAgICAgIHZhciByb3RhdGlvbiA9IGRb%0AJ3ZlcnRleC5yb3QnXTsKICAgICAgICB2YXIgY2VudGVyWCA9IG4zLnhTY2FsZShj%0Ab29yZHNbMF0pOwogICAgICAgIHZhciBjZW50ZXJZID0gbjMueVNjYWxlKGNvb3Jk%0Ac1sxXSk7CgogICAgICAgIHZhciByb3QgPSByb3RhdGlvbiAqIDIgKiBNYXRoLlBJ%0ALzM2MAogICAgICAgIHZhciBiYXNlID0gMS9zaWRlcyAqIDIgKiBNYXRoLlBJOwog%0AICAgICAgIG4zLm5vZGVDb29yZHNbZC5pZF0ucG9pbnRzID0gW107CgogICAgICAg%0AIGZvciAodmFyIGkgPSAxOyBpIDw9IHNpZGVzOyBpKyspIHsKICAgICAgICAgICAg%0AdmFyIGFuZyA9IGkgKiBiYXNlICsgcm90OwogICAgICAgICAgICB2YXIgeCA9IGNl%0AbnRlclggKyBzaXplICogTWF0aC5jb3MoYW5nKTsKICAgICAgICAgICAgdmFyIHkg%0APSBjZW50ZXJZICsgc2l6ZSAqIE1hdGguc2luKGFuZyk7CiAgICAgICAgICAgIG4z%0ALm5vZGVDb29yZHNbZC5pZF0ucG9pbnRzLnB1c2goW3gsIHldKTsKICAgICAgICB9%0ACiAgICAgICAgcmV0dXJuIG4zLm5vZGVDb29yZHNbZC5pZF0ucG9pbnRzLm1hcChm%0AdW5jdGlvbihwKSB7IHJldHVybiBwWzBdLnRvRml4ZWQoMSkrJywnK3BbMV0udG9G%0AaXhlZCgxKTsgfSkuam9pbignICcpOwogICAgICB9LAogICAgfSkKICAgIC8vIGNv%0AbnNvbGUucHJvZmlsZUVuZCgncG9seW1hdGgnKQogIH0KCiAgLyoqIGNyZWF0ZXMg%0AY2lyY2xlIGF0dHJpYnV0ZXMgZm9yIGdpdmVuIG5vZGUgc2VsZWN0aW9uCiAgKiBA%0AcGFyYW0ge0Qzc2VsZWN0aW9ufQogICogQHBhcmFtIHtORFRWX0QzfQogICogQHBy%0AaXZhdGUKICAqLwogIG4zLnByb3RvdHlwZS5kcmF3Q2lyY2xlTm9kZSA9IGZ1bmN0%0AaW9uKHNlbGVjdGlvbiwgbjMpewogICAgc2VsZWN0aW9uLmF0dHIoewogICAgICBj%0AeDogZnVuY3Rpb24oZCwgaSkgeyByZXR1cm4gbjMueFNjYWxlKGQucmVuZGVyQ29v%0AcmRbMF0pLnRvRml4ZWQoMSk7IH0sCiAgICAgIGN5OiBmdW5jdGlvbihkLCBpKSB7%0AIHJldHVybiBuMy55U2NhbGUoZC5yZW5kZXJDb29yZFsxXSkudG9GaXhlZCgxKTsg%0AfSwKICAgICAgcjogZnVuY3Rpb24oZCwgaSkgeyByZXR1cm4gKGRbJ3ZlcnRleC5j%0AZXgnXSAqIG4zLmJhc2VOb2RlU2l6ZSkudG9GaXhlZCgxKTsgfSwKICAgIH0pCiAg%0AfQoKICAvKiogcG9zaXRpb25zIHRoZSBub2RlIGxhYmVscwogICogQHBhcmFtIHtE%0AM3NlbGVjdGlvbn0KICAqIEBwYXJhbSB7TkRUVl9EM30KICAqIEBwcml2YXRlCiAg%0AKi8KICBuMy5wcm90b3R5cGUuZHJhd05vZGVMYWJlbCA9IGZ1bmN0aW9uKHNlbGVj%0AdGlvbiwgbjMpewogICAgc2VsZWN0aW9uLmF0dHIoewogICAgICB4OiBmdW5jdGlv%0AbihkLCBpKSB7IHJldHVybiAobjMueFNjYWxlKGQucmVuZGVyQ29vcmRbMF0pK24z%0ALm9wdGlvbnMubGFiZWxPZmZzZXQueCkudG9GaXhlZCgxKTsgfSwKICAgICAgeTog%0AZnVuY3Rpb24oZCwgaSkgeyByZXR1cm4gKG4zLnlTY2FsZShkLnJlbmRlckNvb3Jk%0AWzFdKStuMy5vcHRpb25zLmxhYmVsT2Zmc2V0LnkpLnRvRml4ZWQoMSk7IH0sCiAg%0AICB9KQogIH0KCiAgLyoqIGhpZ2hsaWdodHMgdGhlIGN1cnJlbnRseSBzZWxlY3Rl%0AZCBuZXR3b3JrICovCiAgbjMucHJvdG90eXBlLnVwZGF0ZVNlbGVjdGVkTmV0d29y%0AayA9IGZ1bmN0aW9uKCkgewogICAgdmFyIG4zID0gdGhpczsKICAgIHZhciBub2Rl%0AID0gbjMuc2VsZWN0ZWROZXR3b3JrOwogICAgJC5lYWNoKFsnbm9kZV9ncm91cCcs%0AICdlZGdlJywgJ2xhYmVsJ10sIGZ1bmN0aW9uKGksIGNsYXNzbmFtZSkgewogICAg%0AICB2YXIgc2VsZWN0aW9uID0gbjMuY29udGFpbmVyLnNlbGVjdEFsbCgnLicrY2xh%0Ac3NuYW1lKQogICAgICB2YXIgdHlwZSA9IGNsYXNzbmFtZSA9PSAnbm9kZV9ncm91%0AcCcgPyAnbm9kZScgOiBjbGFzc25hbWU7CiAgICAgIHZhciB1bnNlbGVjdGVkVGFy%0AZ2V0Q2xhc3MgPSAnLicrdHlwZSsncyc7CiAgICAgIHZhciBzZWxlY3RlZFRhcmdl%0AdENsYXNzID0gJy4nK3R5cGUrJ3Nfc2VsZWN0ZWQnOwogICAgICB2YXIgdW5zZWxl%0AY3RlZFRhcmdldCA9IG4zLmNvbnRhaW5lci5zZWxlY3QodW5zZWxlY3RlZFRhcmdl%0AdENsYXNzKS5ub2RlKCk7CiAgICAgIHZhciBzZWxlY3RlZFRhcmdldCA9IG4zLmNv%0AbnRhaW5lci5zZWxlY3Qoc2VsZWN0ZWRUYXJnZXRDbGFzcykubm9kZSgpOwoKICAg%0AICAgc2VsZWN0aW9uLmVhY2goZnVuY3Rpb24oZCl7CiAgICAgICAgdmFyIHRhcmdl%0AdCA9IHVuc2VsZWN0ZWRUYXJnZXQ7CiAgICAgICAgdmFyIHRhcmdldENsYXNzID0g%0AdW5zZWxlY3RlZFRhcmdldENsYXNzOwogICAgICAgIGlmICh0eXBlID09ICdlZGdl%0AJykgewogICAgICAgICAgaWYgKG5vZGUgJiYgKGQuaW5sLmlkID09IG5vZGUuaWQg%0AfHwgZC5vdXRsLmlkID09IG5vZGUuaWQpKSB7CiAgICAgICAgICAgIHRhcmdldCA9%0AIHNlbGVjdGVkVGFyZ2V0OwogICAgICAgICAgICB0YXJnZXRDbGFzcyA9IHNlbGVj%0AdGVkVGFyZ2V0Q2xhc3M7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAg%0AICAgICAgIGlmIChub2RlICYmIChub2RlLmxpbmtzW2QuaWRdICE9PSB1bmRlZmlu%0AZWQgfHwgZC5pZCA9PSBub2RlLmlkKSkgewogICAgICAgICAgICB0YXJnZXQgPSBz%0AZWxlY3RlZFRhcmdldDsKICAgICAgICAgICAgdGFyZ2V0Q2xhc3MgPSBzZWxlY3Rl%0AZFRhcmdldENsYXNzOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBj%0Ab25zb2xlLmxvZyh0YXJnZXRDbGFzcyk7CiAgICAgICAgaWYgKCEgJCh0aGlzKS5w%0AYXJlbnQodGFyZ2V0Q2xhc3MpLmxlbmd0aCkgewogICAgICAgICAgLy8gY29uc29s%0AZS5sb2cobjMuY3VyclRpbWUpCiAgICAgICAgICAkKHRhcmdldCkuYXBwZW5kKHRo%0AaXMpOwogICAgICAgIH0KICAgICAgfSkgICAgCiAgICB9KSAgICAKICB9CgogIC8q%0AKiB1bmhpZ2hsaWdodHMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBuZXR3b3JrICov%0ACiAgbjMucHJvdG90eXBlLnVuU2VsZWN0TmV0d29yayA9IGZ1bmN0aW9uKCkgewog%0AICAgdmFyIG4zID0gdGhpczsKICAgIG4zLnNlbGVjdGVkTmV0d29yayA9IG51bGw7%0ACiAgICBuMy5jb250YWluZXIuc2VsZWN0KCcuc2NyZWVuJykuY2xhc3NlZCh7J25l%0AdHdvcmstc2VsZWN0ZWQnOiBmYWxzZX0pOwogICAgbjMudXBkYXRlU2VsZWN0ZWRO%0AZXR3b3JrKCk7CiAgfQoKICAvKiogcmVuZGVyIHRoZSBncmFwaCB0byByZWZsZWN0%0AIHRoZSBzdGF0ZSBhdCBjdXJyVGltZSwgdHJhbnNpdGlvbmluZyBlbGVtZW50cyBv%0AdmVyIGEgZ2l2ZW4gZHVyYXRpb24KICAqIEBwYXJhbSB7bWlsbGlzZWNvbmRzfSAt%0AIHRoZSBhbW91bnQgb2YgdGltZSB0aGUgdHJhbnNpdGlvbiBhbmltYXRpb24gc2hv%0AdWxkIHRha2UKICAqLwogIG4zLnByb3RvdHlwZS51cGRhdGVHcmFwaCA9IGZ1bmN0%0AaW9uKGR1cmF0aW9uKSB7CiAgICB2YXIgbjMgPSB0aGlzOwogICAgLy8gY29uc29s%0AZS5wcm9maWxlKCd1cGRhdGUgJytuMy5jdXJyVGltZSk7CgogICAgdmFyIHJlbmRl%0AckRhdGEgPSBuMy51cGRhdGVTbGljZVJlbmRlckRhdGEobjMuY3VyclRpbWUpOwog%0AICAgbjMuZnJhbWVJbmZvRGl2Lmh0bWwobjMuY3VyclRpbWUrJzogJytuMy50aW1l%0ASW5kZXhbbjMuY3VyclRpbWVdLnN0YXJ0ICsgJy0nK24zLnRpbWVJbmRleFtuMy5j%0AdXJyVGltZV0uZW5kKQoKICAgIHZhciBlbnRlckV4aXREdXJhdGlvbiA9IGR1cmF0%0AaW9uICogbjMub3B0aW9ucy5lbnRlckV4aXRBbmltYXRpb25GYWN0b3I7CiAgICB2%0AYXIgdXBkYXRlRHVyYXRpb24gPSBkdXJhdGlvbiAqICgxLW4zLm9wdGlvbnMuZW50%0AZXJFeGl0QW5pbWF0aW9uRmFjdG9yKTsKCiAgICAkLmVhY2goWydtYWluJywgJ3hs%0AYWInXSwgZnVuY3Rpb24oaSwgdHlwZSl7CiAgICAgIHZhciB0ZXh0ID0gcmVuZGVy%0ARGF0YS5ncmFwaFt0eXBlXTsKICAgICAgdmFyIHRhcmdldCA9IG4zLmRvbVRhcmdl%0AdC5zZWxlY3QoJy4nK3R5cGUrJyB0ZXh0Jyk7CiAgICAgIHRhcmdldC5zZWxlY3RB%0AbGwoJyonKS5yZW1vdmUoKTsKCiAgICAgIGlmICh0ZXh0KSB7CiAgICAgICAgJC5l%0AYWNoKHRleHQsIGZ1bmN0aW9uKGksIHQpewogICAgICAgICAgdGFyZ2V0LmFwcGVu%0AZCgndHNwYW4nKS5hdHRyKHsKICAgICAgICAgICAgJ2R5JzogKGkgPyAnMS4yZW0n%0AIDogMCksCiAgICAgICAgICAgICd4JzogMCwKICAgICAgICAgIH0pLnRleHQodCk7%0ACiAgICAgICAgfSkKICAgICAgfQogICAgfSk7CgogICAgbjMuZG9tVGFyZ2V0LnNl%0AbGVjdEFsbCgnLmJhY2tncm91bmQsIC5zY3JlZW4nKS50cmFuc2l0aW9uKCkKICAg%0AICAgLnN0eWxlKHtmaWxsOiByZW5kZXJEYXRhLmdyYXBoWydiZyddLCAnZmlsbC1v%0AcGFjaXR5JzogcmVuZGVyRGF0YS5ncmFwaFsnYmcuZmlsbC1vcGFjaXR5J119KTsK%0ACiAgICB2YXIgc2hvd0luZm8gPSBmdW5jdGlvbihkKSB7CiAgICAgIGlmKCEgbjMu%0Ac2VsZWN0ZWQgfHwgbjMuc2VsZWN0ZWQuaWQgIT09IGQuaWQpIHsKICAgICAgICBu%0AMy5zZWxlY3RlZCA9IGQ7CiAgICAgICAgbjMubW92ZVRvb2x0aXAoKTsKICAgICAg%0AfSBlbHNlIHsKICAgICAgICBuMy5oaWRlVG9vbHRpcCgpOwogICAgICB9CiAgICB9%0ACgogICAgLy91cGRhdGUgc2VsZWN0ZWQgaXRlbQogICAgaWYgKG4zLnNlbGVjdGVk%0AKSB7CiAgICAgIG4zLnNlbGVjdGVkID0gbjMuc2VsZWN0ZWQuaW5sID8gcmVuZGVy%0ARGF0YS5lZGdlW24zLnNlbGVjdGVkLmlkXSA6IHJlbmRlckRhdGEubm9kZVtuMy5z%0AZWxlY3RlZC5pZF07CiAgICAgIGlmICghIG4zLnNlbGVjdGVkKSB7CiAgICAgICAg%0AbjMuaGlkZVRvb2x0aXAoKTsKICAgICAgfSAKICAgIH0KICAgIGlmIChuMy5zZWxl%0AY3RlZE5ldHdvcmspIHsKICAgICAgbjMuc2VsZWN0ZWROZXR3b3JrID0gcmVuZGVy%0ARGF0YS5ub2RlW24zLnNlbGVjdGVkTmV0d29yay5pZF07CiAgICB9CgogICAgLyoq%0AIGFwcGx5IHN0eWxlcyBhbmQgYXRycmlidXRlcyB0byBub2RlcwogICAgKiBAcHJp%0AdmF0ZQogICAgKi8KICAgIHZhciBzdHlsZU5vZGVzID0gZnVuY3Rpb24oc2VsZWN0%0AaW9uKSB7CiAgICAgIHNlbGVjdGlvbi5zdHlsZSh7CiAgICAgICAgLy8gJ2ZpbGwn%0AOiBmdW5jdGlvbihkLCBpKSB7cmV0dXJuIGRbJ3ZlcnRleC5jb2wnXTsgfSwKICAg%0AICAgICBmaWxsOiBmdW5jdGlvbihkKSB7CiAgICAgICAgICBpZiAoZC5pbWFnZSkg%0AeyAKICAgICAgICAgICAgcmV0dXJuICd1cmwoI2ltYWdlXycrcGFyc2VJbnQoZC5p%0AZCkrJyknOyAKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBk%0AWyd2ZXJ0ZXguY29sJ107CiAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAg%0AJ2ZpbGwtb3BhY2l0eSc6IGZ1bmN0aW9uKGQsIGkpIHtyZXR1cm4gZFsndmVydGV4%0ALmNvbC5maWxsLW9wYWNpdHknXTsgfSwKICAgICAgICAnc3Ryb2tlLXdpZHRoJzog%0AZnVuY3Rpb24oZCkge3JldHVybiBkWyd2ZXJ0ZXgubHdkJ107IH0sCiAgICAgICAg%0AJ3N0cm9rZSc6IGZ1bmN0aW9uKGQpIHtyZXR1cm4gZFsndmVydGV4LmJvcmRlcidd%0AOyB9LAogICAgICAgICdzdHJva2Utb3BhY2l0eSc6IGZ1bmN0aW9uKGQpIHtyZXR1%0Acm4gZFsndmVydGV4LmJvcmRlci5zdHJva2Utb3BhY2l0eSddOyB9LAogICAgICB9%0AKQogICAgICBzZWxlY3Rpb24uZmlsdGVyKCdjaXJjbGUnKS5jYWxsKG4zLmRyYXdD%0AaXJjbGVOb2RlLCBuMykKICAgICAgc2VsZWN0aW9uLmZpbHRlcigncG9seWdvbicp%0ALmNhbGwobjMuZHJhd1BvbHlnb25Ob2RlLCBuMykKICAgIH0KCiAgICAvKiogc2V0%0AIGF0dHJpYnV0ZXMgJiB0cmFuc2l0aW9ucyB0byBiZSBhcHBsaWVkIHRvIG5ldyBu%0Ab2RlcwogICAgKiBAcHJpdmF0ZQogICAgKi8KICAgIHZhciBjcmVhdGVOb2RlcyA9%0AIGZ1bmN0aW9uKHNlbGVjdGlvbikgewogICAgICBzZWxlY3Rpb24KICAgICAgICAu%0AYXR0cih7CiAgICAgICAgICBjbGFzczogZnVuY3Rpb24oZCkgeyByZXR1cm4gJ25v%0AZGUgbm9kZV8nK2QuaWQrJyAnKyhkWyd2ZXJ0ZXguY3NzLmNsYXNzJ10gfHwgJycp%0AOyB9LAogICAgICAgICAgb3BhY2l0eTogMCwKICAgICAgICAgIC8vIGZpbGw6IGZ1%0AbmN0aW9uKGQpIHsgcmV0dXJuICd1cmwoI2ltYWdlXycrZC5pZCsnKSc7IH0KICAg%0AICAgICB9KQogICAgICAgIC5jYWxsKHN0eWxlTm9kZXMpCiAgICAgICAgLm9uKCdj%0AbGljaycsIHNob3dJbmZvKQogICAgICAgIC5vbignZGJsY2xpY2snLCBmdW5jdGlv%0AbihkKSB7CiAgICAgICAgICBpZiAoISBuMy5zZWxlY3RlZE5ldHdvcmsgfHwgZC5p%0AZCAhPSBuMy5zZWxlY3RlZE5ldHdvcmsuaWQpIHsKICAgICAgICAgICAgbjMuc2Vs%0AZWN0ZWROZXR3b3JrID0gZDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg%0AIG4zLnNlbGVjdGVkTmV0d29yayA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAg%0AICBuMy51cGRhdGVTZWxlY3RlZE5ldHdvcmsoKQogICAgICAgICAgbjMuY29udGFp%0AbmVyLnNlbGVjdCgnLnNjcmVlbicpLmNsYXNzZWQoeyduZXR3b3JrLXNlbGVjdGVk%0AJzogbjMuc2VsZWN0ZWROZXR3b3JrfSkKICAgICAgICAgIG4zLnNlbGVjdGVkID0g%0AbjMuc2VsZWN0ZWROZXR3b3JrOwogICAgICAgICAgbjMubW92ZVRvb2x0aXAoKTsK%0AICAgICAgICAgIGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIH0p%0ACiAgICAgICAgLm9uKCdtb3VzZW92ZXInLCBmdW5jdGlvbihkKSB7CiAgICAgICAg%0AICBkMy5zZWxlY3QodGhpcykKICAgICAgICAgICAgLnRyYW5zaXRpb24oKQogICAg%0AICAgICAgICAuZHVyYXRpb24oMjAwKQogICAgICAgICAgICAuc3R5bGUoJ3N0cm9r%0AZS13aWR0aCcsIHBhcnNlRmxvYXQoZFsndmVydGV4Lmx3ZCddKSs1KTsKICAgICAg%0AICB9KQogICAgICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbihkKSB7CiAgICAg%0AICAgICBkMy5zZWxlY3QodGhpcykKICAgICAgICAgICAgLnRyYW5zaXRpb24oKQog%0AICAgICAgICAgICAuZHVyYXRpb24oMjAwKQogICAgICAgICAgICAuc3R5bGUoJ3N0%0Acm9rZS13aWR0aCcsIGRbJ3ZlcnRleC5sd2QnXSk7CiAgICAgICAgfSkKICAgICAg%0AICAudHJhbnNpdGlvbigpCiAgICAgICAgLmR1cmF0aW9uKGVudGVyRXhpdER1cmF0%0AaW9uKQogICAgICAgIC5hdHRyKCdvcGFjaXR5JywgMSkKCiAgICB9CgogICAgdmFy%0AIGltYWdlcyA9IG4zLmRvbVRhcmdldC5zZWxlY3QoJ2RlZnMnKS5zZWxlY3RBbGwo%0AJy5ub2RlLWltYWdlJykuZGF0YShkMy52YWx1ZXMocmVuZGVyRGF0YS5ub2RlKS5m%0AaWx0ZXIoZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5pbWFnZTsgfSksIGZ1bmN0aW9u%0AKG4pIHsgcmV0dXJuIG4uaWQ7IH0pCiAgICAgIGltYWdlcy5lbnRlcigpCiAgICAg%0AICAgLmFwcGVuZCgncGF0dGVybicpLmF0dHIoewogICAgICAgIGlkOiBmdW5jdGlv%0AbihkKSB7IHJldHVybiAnaW1hZ2VfJytkLmlkOyB9LAogICAgICAgIGNsYXNzOiAn%0Abm9kZS1pbWFnZScsCiAgICAgICAgdmlld0JveDoiMCAwIDEwMCAxMDAiLAogICAg%0AICAgIC8vIHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUiLCAKICAgICAgICAvLyAn%0AcGF0dGVyblVuaXRzJzogJ3VzZXJTcGFjZU9uVXNlJywKICAgICAgICB3aWR0aDog%0AMTAsCiAgICAgICAgaGVpZ2h0OjEwCiAgICAgIH0pLmFwcGVuZCgnaW1hZ2UnKS5h%0AdHRyKHsKICAgICAgICAneGxpbms6aHJlZic6IGZ1bmN0aW9uKGQpIHsgcmV0dXJu%0AIGQuaW1hZ2U7IH0sCiAgICAgICAgd2lkdGg6IDEwLAogICAgICAgIGhlaWdodDox%0AMCAgICAgICAgCiAgICAgIH0pCgogICAgICBpbWFnZXMuc2VsZWN0KCdpbWFnZScp%0ALnRyYW5zaXRpb24oKQogICAgICAgIC5kZWxheShlbnRlckV4aXREdXJhdGlvbikK%0AICAgICAgICAuZHVyYXRpb24odXBkYXRlRHVyYXRpb24pCiAgICAgICAgLmF0dHIo%0AewogICAgICAgICAgJ3hsaW5rOmhyZWYnOiBmdW5jdGlvbihkKSB7IHJldHVybiBk%0ALmltYWdlOyB9CiAgICAgICAgfSk7CgogICAgICBpbWFnZXMuZXhpdCgpCiAgICAg%0AICAgLnRyYW5zaXRpb24oKQogICAgICAgIC5kdXJhdGlvbihlbnRlckV4aXREdXJh%0AdGlvbikKICAgICAgICAucmVtb3ZlKCk7IAoKICAgIHZhciBub2RlcyA9IG4zLmNv%0AbnRhaW5lci5zZWxlY3RBbGwoJy5ub2RlJykuZGF0YShkMy52YWx1ZXMocmVuZGVy%0ARGF0YS5ub2RlKSwgZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5pZDsgfSkKCiAgICAg%0AIHZhciBub2RlX2dyb3VwcyA9IG5vZGVzLmVudGVyKCkuYXBwZW5kKCdnJykuY2xh%0Ac3NlZCh7J25vZGVfZ3JvdXAnIDogdHJ1ZX0pOwogICAgICBub2RlX2dyb3Vwcy5m%0AaWx0ZXIoZnVuY3Rpb24oZCkgeyByZXR1cm4gZFsndmVydGV4LnNpZGVzJ10gIT0g%0ANTA7IH0pLmFwcGVuZCgncG9seWdvbicpLmNhbGwoY3JlYXRlTm9kZXMpOwogICAg%0AICBub2RlX2dyb3Vwcy5maWx0ZXIoZnVuY3Rpb24oZCkgeyByZXR1cm4gZFsndmVy%0AdGV4LnNpZGVzJ10gPT0gNTA7IH0pLmFwcGVuZCgnY2lyY2xlJykuY2FsbChjcmVh%0AdGVOb2Rlcyk7CgogICAgICBpZiAoIWVudGVyRXhpdER1cmF0aW9uKSB7bm9kZXMu%0AYXR0cih7b3BhY2l0eTogMX0pOyB9CgogICAgICBub2Rlcy5maWx0ZXIoJy5ub2Rl%0AJykudHJhbnNpdGlvbigpCiAgICAgICAgLmRlbGF5KGVudGVyRXhpdER1cmF0aW9u%0AKQogICAgICAgIC5kdXJhdGlvbih1cGRhdGVEdXJhdGlvbikKICAgICAgICAuYXR0%0Acignb3BhY2l0eScsIDEpCiAgICAgICAgLmNhbGwoc3R5bGVOb2RlcykKCiAgICAg%0AIG5vZGVzLmV4aXQoKQogICAgICAgIC50cmFuc2l0aW9uKCkKICAgICAgICAuZHVy%0AYXRpb24oZW50ZXJFeGl0RHVyYXRpb24pCiAgICAgICAgLmF0dHIoJ29wYWNpdHkn%0ALCAwKQogICAgICAgIC5yZW1vdmUoKTsgCgogICAgaWYgKHJlbmRlckRhdGEuZ3Jh%0AcGgudXNlYXJyb3dzKSB7CiAgICAgIHZhciBtYXJrZXJzID0gbjMuZG9tVGFyZ2V0%0ALnNlbGVjdCgnZGVmcycpLnNlbGVjdEFsbCgnLmFycm93aGVhZCcpLmRhdGEoZDMu%0AdmFsdWVzKHJlbmRlckRhdGEuZWRnZSksIGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGUu%0AaWR9KQogICAgICAgIG1hcmtlcnMuZW50ZXIoKS5hcHBlbmQoJ21hcmtlcicpLmF0%0AdHIoewogICAgICAgICAgaWQ6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuICdhcnJvd2hl%0AYWRfJytkLmlkOyB9LAogICAgICAgICAgY2xhc3M6ICdhcnJvd2hlYWQnLAogICAg%0AICAgICAgdmlld0JveDogIjAgLTEgMiAyIiwKICAgICAgICAgIG1hcmtlcldpZHRo%0AOiBzY2FsZUFycm93aGVhZHMsCiAgICAgICAgICBtYXJrZXJIZWlnaHQ6IHNjYWxl%0AQXJyb3doZWFkcywKICAgICAgICAgIG9yaWVudDogImF1dG8iLAogICAgICAgIH0p%0ALmFwcGVuZCgic3ZnOnBhdGgiKQogICAgICAgICAgLmF0dHIoewogICAgICAgICAg%0AICBkOiAiTTAsLTFMMiwwTDAsMSIsCiAgICAgICAgICAgIGZpbGw6ICdncmVlbicK%0AICAgICAgICAgIH0pOwoKICAgICAgICBtYXJrZXJzLnNlbGVjdCgncGF0aCcpLnRy%0AYW5zaXRpb24oKQogICAgICAgICAgLmRlbGF5KGVudGVyRXhpdER1cmF0aW9uKQog%0AICAgICAgICAgLmR1cmF0aW9uKHVwZGF0ZUR1cmF0aW9uKQogICAgICAgICAgLmF0%0AdHIoewogICAgICAgICAgICBmaWxsOiBmdW5jdGlvbihkKSB7IHJldHVybiBkWydl%0AZGdlLmNvbCddOyB9LAogICAgICAgICAgICAnZmlsbC1vcGFjaXR5JzogZnVuY3Rp%0Ab24oZCkgeyByZXR1cm4gZFsnZWRnZS5jb2wuc3Ryb2tlLW9wYWNpdHknXTsgfQog%0AICAgICAgICAgfSkKCiAgICAgICAgbWFya2Vycy5leGl0KCkuc2VsZWN0QWxsKCdw%0AYXRoJykKICAgICAgICAgIC5hdHRyKHsKICAgICAgICAgICAgZmlsbDogJ3JlZCcK%0AICAgICAgICAgIH0pCiAgICAgICAgCiAgICAgICAgbWFya2Vycy5leGl0KCkudHJh%0AbnNpdGlvbigpCiAgICAgICAgICAuZGVsYXkoZHVyYXRpb24pCiAgICAgICAgICAu%0AZHVyYXRpb24oMCkKICAgICAgICAgIC5yZW1vdmUoKQogICAgfQoKICAgIHZhciBs%0AaW5lcyA9IG4zLmNvbnRhaW5lci5zZWxlY3RBbGwoJy5lZGdlJykuZGF0YShkMy52%0AYWx1ZXMocmVuZGVyRGF0YS5lZGdlKSwgZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5p%0AZH0pCiAgICAgIGxpbmVzLmVudGVyKCkuYXBwZW5kKCdwYXRoJykKICAgICAgICAu%0AYXR0cih7CiAgICAgICAgICBjbGFzczogZnVuY3Rpb24oZCkgeyByZXR1cm4gJ2Vk%0AZ2UgZWRnZV8nK2QuaWQrJyAnKyhkWydlZGdlLmNzcy5jbGFzcyddIHx8ICcnKTsg%0AfSwgICAgIAogICAgICAgICAgb3BhY2l0eTogMCwKICAgICAgICAgICJtYXJrZXIt%0AZW5kIjogZnVuY3Rpb24oZCkgeyBpZihyZW5kZXJEYXRhLmdyYXBoLnVzZWFycm93%0AcykgeyByZXR1cm4gInVybCgjYXJyb3doZWFkXyIrZC5pZCsiKSI7IH19CiAgICAg%0AICAgfSkKICAgICAgICAuc3R5bGUoewogICAgICAgICAgJ3N0cm9rZSc6ICdncmVl%0AbicsCiAgICAgICAgICAnc3Ryb2tlLXdpZHRoJzogZnVuY3Rpb24oZCkgeyByZXR1%0Acm4gZFsnZWRnZS5sd2QnXTsgfQogICAgICAgIH0pCiAgICAgICAgLmNhbGwobjMu%0AZHJhd0VkZ2UsIG4zLCByZW5kZXJEYXRhLmdyYXBoLnVzZWFycm93cywgMSkKICAg%0AICAgICAub24oJ2NsaWNrJywgc2hvd0luZm8pCiAgICAgICAgLm9uKCdtb3VzZW92%0AZXInLCBmdW5jdGlvbihkKSB7CiAgICAgICAgICB2YXIgZWRnZSA9IGQzLnNlbGVj%0AdCh0aGlzKTsKICAgICAgICAgIHZhciBsaW5lID0gJ00gJytkLmN1cnJlbnRDb29y%0AZHNbMF1bMF0udG9GaXhlZCgxKSsnICcrZC5jdXJyZW50Q29vcmRzWzBdWzFdLnRv%0ARml4ZWQoMSkrJyBMICcrZC5jdXJyZW50Q29vcmRzWzFdWzBdLnRvRml4ZWQoMSkr%0AJyAnK2QuY3VycmVudENvb3Jkc1sxXVsxXS50b0ZpeGVkKDEpOwogICAgICAgICAg%0AaWYgKHJlbmRlckRhdGEuZ3JhcGgudXNlYXJyb3dzKSB7CiAgICAgICAgICAgIHZh%0AciBvZmZzZXRQb2ludHMgPSBvZmZzZXRMaW5lKFtkLmN1cnJlbnRDb29yZHNbMF1b%0AMF0sIGQuY3VycmVudENvb3Jkc1swXVsxXV0sIFtkLmN1cnJlbnRDb29yZHNbMV1b%0AMF0sIGQuY3VycmVudENvb3Jkc1sxXVsxXV0sIChzY2FsZUFycm93aGVhZHMoZCkq%0ANSkpOwogICAgICAgICAgICBsaW5lID0gJ00gJytkLmN1cnJlbnRDb29yZHNbMF1b%0AMF0udG9GaXhlZCgxKSsnICcrZC5jdXJyZW50Q29vcmRzWzBdWzFdLnRvRml4ZWQo%0AMSkrJyBMICcrb2Zmc2V0UG9pbnRzWzBdLnRvRml4ZWQoMSkrJyAnK29mZnNldFBv%0AaW50c1sxXS50b0ZpeGVkKDEpOyAgICAgCiAgICAgICAgICB9CiAgICAgICAgICBl%0AZGdlLnRyYW5zaXRpb24oKQogICAgICAgICAgICAuZHVyYXRpb24oMjAwKQogICAg%0AICAgICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsIHBhcnNlRmxvYXQoZFsnZWRn%0AZS5sd2QnXSkrNSkKICAgICAgICAgICAgLmF0dHIoJ2QnLCBsaW5lKTsKICAgICAg%0AICB9KQogICAgICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbihkKSB7CiAgICAg%0AICAgICBkMy5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpCiAgICAgICAgICAgIC5k%0AdXJhdGlvbigyMDApCiAgICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywg%0AZFsnZWRnZS5sd2QnXSkKICAgICAgICAgICAgLmNhbGwobjMuZHJhd0VkZ2UsIG4z%0ALCByZW5kZXJEYXRhLmdyYXBoLnVzZWFycm93cywgZmFsc2UpCiAgICAgICAgfSkK%0AICAgICAgICAudHJhbnNpdGlvbigpCiAgICAgICAgLmR1cmF0aW9uKGVudGVyRXhp%0AdER1cmF0aW9uKQogICAgICAgIC5hdHRyKHtvcGFjaXR5OiAxfSkKCiAgICAgIGlm%0AICghZW50ZXJFeGl0RHVyYXRpb24pIHtsaW5lcy5hdHRyKHtvcGFjaXR5OiAxfSk7%0AIH0KICAgICAgCiAgICAgIGxpbmVzLnRyYW5zaXRpb24oKQogICAgICAgIC5kZWxh%0AeShlbnRlckV4aXREdXJhdGlvbikKICAgICAgICAuZHVyYXRpb24odXBkYXRlRHVy%0AYXRpb24pCiAgICAgICAgLnN0eWxlKHsKICAgICAgICAgICdzdHJva2UnOiBmdW5j%0AdGlvbihkKSB7IHJldHVybiBkWydlZGdlLmNvbCddfSwKICAgICAgICAgICdzdHJv%0Aa2Utb3BhY2l0eSc6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGRbJ2VkZ2UuY29sLnN0%0Acm9rZS1vcGFjaXR5J107IH0sCiAgICAgICAgICAnc3Ryb2tlLXdpZHRoJzogZnVu%0AY3Rpb24oZCkgeyByZXR1cm4gZFsnZWRnZS5sd2QnXTsgfSwKICAgICAgICB9KQog%0AICAgICAgIC5jYWxsKG4zLmRyYXdFZGdlLCBuMywgcmVuZGVyRGF0YS5ncmFwaC51%0Ac2VhcnJvd3MpCiAgICAgICAgLmF0dHIoe29wYWNpdHk6IDF9KQoKICAgICAgbGlu%0AZXMuZXhpdCgpCiAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAncmVkJykKICAgICAg%0AICAudHJhbnNpdGlvbigpCiAgICAgICAgLmR1cmF0aW9uKGVudGVyRXhpdER1cmF0%0AaW9uKQogICAgICAgIC5hdHRyKCdvcGFjaXR5JywgMCkgICAgICAgICAgCiAgICAg%0AICAgLnJlbW92ZSgpOwoKICAgIHZhciBsYWJlbHMgPSBuMy5jb250YWluZXIuc2Vs%0AZWN0KCcubGFiZWxzJykuc2VsZWN0QWxsKCd0ZXh0JykuZGF0YShkMy52YWx1ZXMo%0AcmVuZGVyRGF0YS5ub2RlKSwgZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5pZH0pOwog%0AICAgICBsYWJlbHMuZW50ZXIoKS5hcHBlbmQoJ3RleHQnKS5maWx0ZXIoZnVuY3Rp%0Ab24oZCkgeyByZXR1cm4gcmVuZGVyRGF0YS5ncmFwaC5kaXNwbGF5bGFiZWxzOyB9%0AKQogICAgICAgIC5hdHRyKHsKICAgICAgICAgIGNsYXNzOiBmdW5jdGlvbihkKSB7%0AIHJldHVybiAnbGFiZWwgbGFiZWxfJytkLmlkKyAnICcrIChkWyd2ZXJ0ZXgubGFi%0AZWwuY3NzLmNsYXNzJ10gfHwgJycpOyB9LAogICAgICAgICAgb3BhY2l0eTogMAog%0AICAgICAgIH0pCiAgICAgICAgLmNhbGwobjMuZHJhd05vZGVMYWJlbCwgbjMpCiAg%0AICAgICAgLnRleHQoZnVuY3Rpb24oZCwgaSkgeyByZXR1cm4gZC5sYWJlbDsgfSkK%0AICAgICAgICAuc3R5bGUoewogICAgICAgICAgJ2ZpbGwnOiBmdW5jdGlvbihkKSB7%0AcmV0dXJuIGRbJ2xhYmVsLmNvbCddOyB9LAogICAgICAgICAgJ2ZpbGwtb3BhY2l0%0AeSc6IGZ1bmN0aW9uKGQpIHtyZXR1cm4gZFsnbGFiZWwuY29sLmZpbGwtb3BhY2l0%0AeSddOyB9LAogICAgICAgICAgJ2ZvbnQtc2l6ZSc6IGZ1bmN0aW9uKGQpIHsgcmV0%0AdXJuIG4zLm9wdGlvbnMuYmFzZUZvbnRTaXplICogZFsnbGFiZWwuY2V4J10rJ3B4%0AJzt9CiAgICAgICAgfSkKICAgICAgICAudHJhbnNpdGlvbigpCiAgICAgICAgLmRl%0AbGF5KDApCiAgICAgICAgLmR1cmF0aW9uKGVudGVyRXhpdER1cmF0aW9uKQogICAg%0AICAgIC5hdHRyKHtvcGFjaXR5OiAxfSkKCiAgICAgIGlmICghZW50ZXJFeGl0RHVy%0AYXRpb24pIHtsYWJlbHMuYXR0cih7b3BhY2l0eTogMX0pOyB9CgogICAgICBsYWJl%0AbHMudHJhbnNpdGlvbigpLmZpbHRlcihmdW5jdGlvbihkKSB7IHJldHVybiByZW5k%0AZXJEYXRhLmdyYXBoLmRpc3BsYXlsYWJlbHM7IH0pCiAgICAgICAgLmRlbGF5KGVu%0AdGVyRXhpdER1cmF0aW9uKQogICAgICAgIC5kdXJhdGlvbih1cGRhdGVEdXJhdGlv%0AbikKICAgICAgICAuY2FsbChuMy5kcmF3Tm9kZUxhYmVsLCBuMykKICAgICAgICAv%0ALy5hdHRyKHtvcGFjaXR5OiAxfSkKICAgICAgICAudGV4dChmdW5jdGlvbihkLCBp%0AKSB7IHJldHVybiBkLmxhYmVsOyB9KQogICAgICAgIC5zdHlsZSh7CiAgICAgICAg%0AICAnZmlsbCc6IGZ1bmN0aW9uKGQpIHtyZXR1cm4gZFsnbGFiZWwuY29sJ107IH0s%0ACiAgICAgICAgICAnZmlsbC1vcGFjaXR5JzogZnVuY3Rpb24oZCkge3JldHVybiBk%0AWydsYWJlbC5jb2wuZmlsbC1vcGFjaXR5J107IH0sCiAgICAgICAgfSkKCiAgICAg%0AIGxhYmVscy5leGl0KCkKICAgICAgICAudHJhbnNpdGlvbigpCiAgICAgICAgLmR1%0AcmF0aW9uKGVudGVyRXhpdER1cmF0aW9uKQogICAgICAgIC5hdHRyKCdvcGFjaXR5%0AJywgMCkKICAgICAgICAucmVtb3ZlKCk7CgogICAgICBuMy51cGRhdGVTZWxlY3Rl%0AZE5ldHdvcmsoKTsKICAKICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKTsKICAg%0AICAgZDMudGltZXIoZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKG4zLnNlbGVjdGVk%0AICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgIG4zLm1vdmVUb29sdGlwKCk7CiAg%0AICAgICAgfQogICAgICAgIHJldHVybiBEYXRlLm5vdygpID49IHN0YXJ0ICtkdXJh%0AdGlvbjsgCiAgICAgIH0pCiAgICAgIC8vIGNvbnNvbGUucHJvZmlsZUVuZCgndXBk%0AYXRlICcrbjMuY3VyclRpbWUpOwogIH0KCiAgLyoqIHJlc2l6ZXMgZ3JhcGggYW5k%0AIG90aGVyIGRpc3BsYXkgZWxlbWVudHMgdG8gZmlsbCB0aGUgdGFyZ2V0IHZpZXdw%0Ab3J0ICovCiAgbjMucHJvdG90eXBlLnJlc2l6ZUdyYXBoID0gZnVuY3Rpb24oKSB7%0ACiAgICB2YXIgbjMgPSB0aGlzOwogICAgbjMudXBkYXRlRGltZW5zaW9ucygpOwoK%0ACiAgICBuMy5jb250YWluZXIuc2VsZWN0QWxsKCdjaXJjbGUubm9kZScpLmNhbGwo%0AbjMuZHJhd0NpcmNsZU5vZGUsIG4zKQogICAgbjMuY29udGFpbmVyLnNlbGVjdEFs%0AbCgncG9seWdvbi5ub2RlJykuY2FsbChuMy5kcmF3UG9seWdvbk5vZGUsIG4zKQoK%0AICAgIG4zLmNvbnRhaW5lci5zZWxlY3RBbGwoJy5lZGdlJykuY2FsbChuMy5kcmF3%0ARWRnZSwgbjMsIG4zLnRpbWVJbmRleFtuMy5jdXJyVGltZV0ucmVuZGVyRGF0YS5n%0AcmFwaC51c2VhcnJvd3MpCgogICAgbjMuY29udGFpbmVyLnNlbGVjdCgnLmxhYmVs%0AcycpLnNlbGVjdEFsbCgndGV4dCcpLmNhbGwobjMuZHJhd05vZGVMYWJlbCwgbjMp%0ACgogICAgbjMubW92ZVRvb2x0aXAoKTsKICAgIC8vcmVkcmF3IHRoZSBzbGlkZXIg%0AY29udHJvbCAKICAgIGlmIChuMy5vcHRpb25zLnNsaWRlcikgewogICAgICB2YXIg%0Ac2xpZGVyRGl2ID0gbjMuZG9tVGFyZ2V0LnNlbGVjdCgnLnNsaWRlcicpOwogICAg%0AICBzbGlkZXJEaXYuaHRtbCgnJyk7CiAgICAgIHNsaWRlckRpdi5jYWxsKG4zLnNs%0AaWRlcik7CiAgICB9IAogIH0KICAKICAvKiogZ3JhcGggYW5pbWF0aW9uIGNvbnRy%0Ab2xsZXIKICAqIEBwYXJhbSB7aW50ZWdlcn0gLSByZW5kZXIgdGhlIGdyYXBoIHRv%0AIHRoZSBzdGF0ZSBhdCB0aGlzIHRpbWVzbGljZSBpbmRleAogICogQHBhcmFtIHtp%0AbnRlZ2VyfSAtIGZ1bmN0aW9uIHdpbGwgcmVjdXJzaXZlbHkgY2FsbCBpdHNlbGYg%0AdW50aWwgdGltZSBlcXVhbHMgdGhpcyB2YWx1ZQogICogQHBhcmFtIHtib29sZWFu%0AfSAtIHNob3VsZCB0aGUgZ3JhcGggdXBkYXRlIGltbWVkaWF0ZWx5LCBvciBhbmlt%0AYXRlPwogICovCiAgbjMucHJvdG90eXBlLmFuaW1hdGVHcmFwaCA9IGZ1bmN0aW9u%0AKHRpbWUsIGVuZFRpbWUsIGltbWVkaWF0ZSkgewogICAgdmFyIG4zID0gdGhpczsK%0AICAgIGlmICh0aW1lID4gbjMudGltZUluZGV4Lmxlbmd0aCAtMSB8fCB0aW1lIDwg%0AMCkgeyByZXR1cm47IH0KCiAgICB2YXIgZHVyYXRpb24gPSBpbW1lZGlhdGUgPyAw%0AIDogbjMub3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbjsKICAgIGVuZFRpbWUgPSBl%0AbmRUaW1lID09PSB1bmRlZmluZWQgPyBuMy50aW1lSW5kZXgubGVuZ3RoIC0xIDog%0AZW5kVGltZTsKICAgIHZhciBuZXh0VGltZTsKICAgIGlmICh0aW1lID09IGVuZFRp%0AbWUpIHsKICAgICAgbmV4dFRpbWUgPSB0aW1lOwogICAgfSBlbHNlIGlmIChlbmRU%0AaW1lID4gdGltZSkgewogICAgICBuZXh0VGltZSA9IHRpbWUgKzE7CiAgICB9IGVs%0Ac2UgewogICAgICBuZXh0VGltZSA9IHRpbWUgLTE7CiAgICB9CgogICAgbjMuY3Vy%0AclRpbWUgPSB0aW1lID09IG4zLmN1cnJUaW1lID8gbmV4dFRpbWUgOiB0aW1lOwog%0AICAgLy9jb25zb2xlLmxvZyhuMy5jdXJyVGltZSArICcgJyt0aW1lKycgJytlbmRU%0AaW1lKyAnICcrbmV4dFRpbWUrICcgJytuMy5wcmV2VGltZSkKICAgIGlmKCEgaW1t%0AZWRpYXRlICYmIG4zLm9wdGlvbnMuc2xpZGVyKSB7CiAgICAgIG4zLnNsaWRlci52%0AYWx1ZShuMy50aW1lSW5kZXhbbjMuY3VyclRpbWVdLnN0YXJ0WzBdKTsKICAgIH0K%0AICAgIG4zLnVwZGF0ZUdyYXBoKGR1cmF0aW9uKTsKICAgIGlmIChuMy5jdXJyVGlt%0AZSAhPSBlbmRUaW1lKSB7CiAgICAgIG4zLmFuaW1hdGUgPSBzZXRUaW1lb3V0KGZ1%0AbmN0aW9uKCl7CiAgICAgICAgbjMuYW5pbWF0ZUdyYXBoKG5leHRUaW1lLCBlbmRU%0AaW1lLCBpbW1lZGlhdGUpOwogICAgICB9LCBkdXJhdGlvbikKICAgIH0KICB9Cgog%0AIC8qKiByZWRyYXcgdGhlIGluZm8gcG9wb3ZlciAvL0ZJWE1FIC0gbmVlZHMgcmVu%0AYW1lZCAqLwogIG4zLnByb3RvdHlwZS5tb3ZlVG9vbHRpcCA9IGZ1bmN0aW9uKCkg%0AewogICAgLy8gY29uc29sZS5wcm9maWxlKCdtb3ZlVG9vbHRpcCcpOwogICAgdmFy%0AIG4zID0gdGhpczsKICAgIGlmIChuMy5zZWxlY3RlZCkgewogICAgICB2YXIgaXRl%0AbSA9IG4zLnNlbGVjdGVkOwogICAgICB2YXIgdHlwZSA9IGl0ZW0uaW5sID8gJ2Vk%0AZ2UnIDogJ25vZGUnOwogICAgICB2YXIgbm9kZURPTSA9IG4zLmNvbnRhaW5lci5z%0AZWxlY3QoJy4nK3R5cGUrJ18nK2l0ZW0uaWQpLm5vZGUoKTsKICAgICAgaWYgKCFu%0Ab2RlRE9NKSB7CiAgICAgICAgbjMuaGlkZVRvb2x0aXAoKTsKICAgICAgfSBlbHNl%0AIHsKICAgICAgICB2YXIgY29vcmRzID0gbjMuY29udmVydENvb3JkcyhpdGVtKTsK%0AICAgICAgICB2YXIgcHJvcGVydHkgPSAndmVydGV4LnRvb2x0aXAnOwogICAgICAg%0AIGlmICh0eXBlID09ICdlZGdlJykgewogICAgICAgICAgcHJvcGVydHkgPSAnZWRn%0AZS50b29sdGlwJzsKICAgICAgICB9CiAgICAgICAgdmFyIGh0bWwgPSBuMy5zZWxl%0AY3RlZFtwcm9wZXJ0eV0gfHwgdHlwZSsiIGlkOiAiK24zLnNlbGVjdGVkLmlkOwog%0AICAgICAgIG4zLnRvb2x0aXAuc3R5bGUoewogICAgICAgICAgZGlzcGxheTogJ2Js%0Ab2NrJywKICAgICAgICAgIGJvdHRvbTogY29vcmRzWzFdKydweCcsCiAgICAgICAg%0AICBsZWZ0OiBjb29yZHNbMF0rJ3B4JywKICAgICAgICB9KS5odG1sKGh0bWwpCiAg%0AICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIG4zLmhpZGVUb29sdGlwKCk7CiAgICB9%0ACiAgICAvLyBjb25zb2xlLnByb2ZpbGVFbmQoJ21vdmVUb29sdGlwJyk7CiAgfQoK%0AICAvKiogZ2V0IGNlbnRlciBwb2ludCBvZiBlZGdlIG9yIG5vZGUsIGluIERPTSBw%0AaXhlbHMgKi8KICBuMy5wcm90b3R5cGUuY29udmVydENvb3JkcyA9IGZ1bmN0aW9u%0AKGl0ZW0pIHsKICAgIHZhciBuMyA9IHRoaXM7CiAgICB2YXIgdHlwZSA9IGl0ZW0u%0AaW5sID8gJ2VkZ2UnIDogJ25vZGUnOwogICAgdmFyIG5vZGVET00gPSBuMy5jb250%0AYWluZXIuc2VsZWN0KCcuJyt0eXBlKydfJytpdGVtLmlkKS5ub2RlKCk7CiAgICB2%0AYXIgY3RtID0gbjMuY3RtOwogICAgdmFyIHgsIHk7CiAgICB2YXIgYmJveCA9IG5v%0AZGVET00uZ2V0QkJveCgpOwogICAgdmFyIGNlbnRlciA9IHsKICAgICAgeDogYmJv%0AeC54ICsgYmJveC53aWR0aC8yLAogICAgICB5OiBiYm94LnkgKyBiYm94LmhlaWdo%0AdC8yCiAgICB9CiAgICBpZiAodHlwZSA9PSAnbm9kZScpIHsKICAgICAgaWYgKG5v%0AZGVET00udGFnTmFtZSA9PSAncG9seWdvbicpIHsKICAgICAgICB2YXIgcG9pbnRz%0AID0gJCgncG9seWdvbi5ub2RlXycraXRlbS5pZCkuYXR0cigncG9pbnRzJykuc3Bs%0AaXQoJyAnKS5tYXAoZnVuY3Rpb24ocCkgeyAKICAgICAgICAgIHJldHVybiBwLnNw%0AbGl0KCcsJykubWFwKHBhcnNlRmxvYXQpOwogICAgICAgIH0pCiAgICAgICAgdmFy%0AIHBvaW50ID0gZmluZFBvbHlnb25JbnRlcnNlY3Rpb24ocG9pbnRzLCBbYmJveC54%0AICsgYmJveC53aWR0aCwgYmJveC55XSwgW2NlbnRlci54LCBjZW50ZXIueV0pCiAg%0AICAgICAgeCA9IHBvaW50WzBdOwogICAgICAgIHkgPSBwb2ludFsxXTsKICAgICAg%0AfSBlbHNlIHsKICAgICAgICB2YXIgc2l6ZSA9IHBhcnNlRmxvYXQobm9kZURPTS5n%0AZXRBdHRyaWJ1dGUoJ3InKSk7CiAgICAgICAgdmFyIGFuZ2xlID0gLU1hdGguUEkv%0ANDsKICAgICAgICB4ID0gY2VudGVyLnggKyBzaXplICogTWF0aC5jb3MoYW5nbGUp%0AOwogICAgICAgIHkgPSBjZW50ZXIueSArIHNpemUgKiBNYXRoLnNpbihhbmdsZSk7%0ACiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHggPSBjZW50ZXIueDsKICAgICAg%0AeSA9IGNlbnRlci55OwogICAgfQogICAgLy8gdmFyIG9mZnNldENvb3JkcyA9IG9m%0AZnNldExpbmUoIFtjZW50ZXIueCwgY2VudGVyLnldLFt4LCB5XSxuZHR2UHJvcGVy%0AdGllcy5ncmFwaC50b29sdGlwT2Zmc2V0KQogICAgLy8geCA9IG9mZnNldENvb3Jk%0Ac1swXTsKICAgIC8vIHkgPSBvZmZzZXRDb29yZHNbMV07CgogICAgdmFyIGxlZnQg%0APSAoeCpjdG0uYSkgKyBjdG0uZSAtIG4zLm9mZnNldC5sZWZ0IC0gJCh3aW5kb3cp%0ALnNjcm9sbExlZnQoKSArMTsKICAgIHZhciBib3R0b20gPSBuMy5oZWlnaHQgLSh5%0AKmN0bS5kKS1jdG0uZiArIG4zLm9mZnNldC50b3AgLSAkKHdpbmRvdykuc2Nyb2xs%0AVG9wKCkgKzE7CiAgICByZXR1cm4gW2xlZnQsIGJvdHRvbV07CiAgfQoKICAvKiog%0AaGlkZSB0aGUgdG9vbHRpcCBhbmQgdW5zZXQgdGhlIHNlbGVjdGVkIGdsb2JhbCAq%0ALwogIG4zLnByb3RvdHlwZS5oaWRlVG9vbHRpcCA9IGZ1bmN0aW9uKCkgewogICAg%0AdmFyIG4zID0gdGhpczsKICAgIG4zLnNlbGVjdGVkID0gbnVsbDsKICAgIG4zLnRv%0Ab2x0aXAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpOwogIH0KCiAgLyoqIHN0b3Ag%0AdGhlIGN1cnJlbnQgYW5pbWF0aW9uIGN5Y2xlCiAgKiBAcGFyYW0ge2Jvb2xlYW59%0AIC0gaWYgdHJ1ZSwgaW1tZWRpYXRlIGhhbHQgYWxsIGFjdGl2ZSB0cmFuc2l0aW9u%0AcyAob3RoZXJ3aXNlLCBsZXQgYW5pbWF0aW9uIGNvbnRpbnVlIHRvIG5leHQgdGlt%0AZSBzbGljZSkKICAqLwogIG4zLnByb3RvdHlwZS5lbmRBbmltYXRpb24gPSBmdW5j%0AdGlvbihub0hhbHQpewogICAgdmFyIG4zID0gdGhpczsKICAgIGNsZWFyVGltZW91%0AdChuMy5hbmltYXRlKTsKICAgIGlmICghIG5vSGFsdCkgewogICAgICBuMy5kb21U%0AYXJnZXQuc2VsZWN0QWxsKCcubm9kZSwgLmVkZ2UsIC5sYWJlbCwgLmQzLXNsaWRl%0Aci1oYW5kbGUnKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkKICAgIH0KICB9Cgog%0AIC8qKiBzdGVwIHRoZSBhbmltYXRpb24gYnkgb25lIHRpbWUgc2xpY2UKICAqIEBw%0AYXJhbSB7Ym9vbGVhbn0gLSBpZiB0cnVlLCBnbyB0byBwcmV2aW91cyB0aW1lIHNs%0AaWNlLCBlbHNlIGdvIGZvcndhcmQKICAqLwogIG4zLnByb3RvdHlwZS5zdGVwQW5p%0AbWF0aW9uID0gZnVuY3Rpb24ocmV2ZXJzZSkgewogICAgdmFyIG4zID0gdGhpczsK%0ACiAgICBuMy5lbmRBbmltYXRpb24oMSk7CiAgICBpZiAocmV2ZXJzZSkgewogICAg%0AICBuMy5hbmltYXRlR3JhcGgobjMuY3VyclRpbWUtMSwgbjMuY3VyclRpbWUtMSk7%0AIAogICAgfSBlbHNlIHsKICAgICAgbjMuYW5pbWF0ZUdyYXBoKG4zLmN1cnJUaW1l%0AKzEsIG4zLmN1cnJUaW1lKzEpOyAKICAgIH0KICB9CgogIC8qKiBhbmltYXRlIHRo%0AZSBncmFwaCBvdmVyIGFsbCB0aW1lIHNsaWNlcywgc3RhcnRpbmcgYXQgY3VycmVu%0AdCBzbGljZQogICogQHBhcmFtIHtib29sZWFufSAtIGlmIHRydWUsIGFuaW1hdGUg%0Ac2xpY2VzIGJhY2t3YXJkcyB1bnRpbCBiZWdpbm5pbmcgb2YgdGltZSBpbmRleCwg%0Ab3RoZXIgcGxheSB1bnRpbCBlbmQKICAqLwogIG4zLnByb3RvdHlwZS5wbGF5QW5p%0AbWF0aW9uID0gZnVuY3Rpb24ocmV2ZXJzZSkgewogICAgdmFyIG4zID0gdGhpczsK%0ACiAgICBuMy5lbmRBbmltYXRpb24oMSk7CiAgICBpZiAocmV2ZXJzZSkgeyAKICAg%0AICAgbjMuYW5pbWF0ZUdyYXBoKG4zLmN1cnJUaW1lLTEsIDApOyAKICAgIH0gZWxz%0AZSB7CiAgICAgIG4zLmFuaW1hdGVHcmFwaChuMy5jdXJyVGltZSsxKTsgCiAgICB9%0ACiAgfQogIHJldHVybiBuMzsKfSkpOwo8L3NjcmlwdD48L2hlYWQ+DQogIDxib2R5%0APjxzY3JpcHQ+DQogICAgLy9JTklUIEdSQVBIIERBVEEgSEVSRQ0KICB2YXIgZ3Jh%0AcGhEYXRhID0geyJyZW5kZXIiOlt7InN0YXJ0IjpbMF0sImVuZCI6WzBdLCJkYXRh%0AIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0%0AIjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIx%0AMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwi%0AMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVkZ2VzIjp7IjEiOlswXSwi%0AMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwi%0AOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMi%0AOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdLCIx%0AOCI6WzE3XSwiMTkiOlsxOF0sIjIwIjpbMTldLCIyMSI6WzIwXSwiMjIiOlsyMV0s%0AIjIzIjpbMjJdLCIyNCI6WzIzXSwiMjUiOlsyNF0sIjI2IjpbMjVdLCIyNyI6WzI2%0AXSwiMjgiOlsyN10sIjI5IjpbMjhdLCIzMCI6WzI5XSwiMzEiOlszMF0sIjMyIjpb%0AMzFdLCIzMyI6WzMyXSwiMzQiOlszM10sIjM1IjpbMzRdLCIzNiI6WzM1XSwiMzci%0AOlszNl0sIjM4IjpbMzddLCIzOSI6WzM4XSwiNDAiOlszOV0sIjQxIjpbNDBdLCI0%0AMiI6WzQxXSwiNDMiOls0Ml0sIjQ0IjpbNDNdLCI0NSI6WzQ0XSwiNDYiOls0NV0s%0AIjQ3IjpbNDZdLCI0OCI6WzQ3XSwiNDkiOls0OF19fSwiY29vcmQiOltbLTAuMjM5%0AOCwwLjgxNjldLFswLjYzMDEsMS4zNzM1XSxbMC42NDQyLDAuMzQzXSxbLTAuMzE3%0ANywtMC4xNTA3XSxbLTAuMDM2NiwxLjQyNV0sWy0xLjEwNjksLTAuNDc0Ml0sWzEu%0ANjczNSwtMC4xNzg0XSxbMS44MzUsMC42ODA1XSxbMS4yMzM1LDEuODIxMl0sWzEu%0ANDQ4LDAuOTAwMl0sWzAuNzI5OSwtMC41MzEyXSxbMC4xMjg2LC0wLjc4MzhdLFsw%0ALjE4MzcsLTEuODIxMl0sWzEuMTQwOSwtMS4yNzhdLFstMS4wNDUsMC42NjM0XSxb%0ALTEuODM1LC0xLjI0NzZdLFstMC44MTM0LC0xLjMwNTJdXSwidXNlYXJyb3dzIjpb%0AZmFsc2VdLCJkaXNwbGF5bGFiZWxzIjpbZmFsc2VdLCJiZyI6WyJyZ2JhKDE3LDE3%0ALDE3LDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSgyNTUsMjU1LDI1NSwxKSIs%0AInJnYmEoMjU1LDI1NSwyNTUsMSkiLCJyZ2JhKDI1NSwyNTUsMjU1LDEpIiwicmdi%0AYSgyNTUsMjU1LDI1NSwxKSIsInJnYmEoMjU1LDI1NSwyNTUsMSkiLCJyZ2JhKDI1%0ANSwyNTUsMjU1LDEpIiwicmdiYSgyNTUsMjU1LDI1NSwxKSIsInJnYmEoMjU1LDI1%0ANSwyNTUsMSkiLCJyZ2JhKDI1NSwyNTUsMjU1LDEpIiwicmdiYSgyNTUsMjU1LDI1%0ANSwxKSIsInJnYmEoMjU1LDI1NSwyNTUsMSkiLCJyZ2JhKDI1NSwyNTUsMjU1LDEp%0AIiwicmdiYSgyNTUsMjU1LDI1NSwxKSIsInJnYmEoMjU1LDI1NSwyNTUsMSkiLCJy%0AZ2JhKDI1NSwyNTUsMjU1LDEpIiwicmdiYSgyNTUsMjU1LDI1NSwxKSIsInJnYmEo%0AMjU1LDI1NSwyNTUsMSkiXSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5%0ALDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSki%0ALCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJn%0AYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1%0ALDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwx%0AKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2Jh%0AKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1%0ALDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0s%0AInZlcnRleC5jZXgiOlsyLjUsMy4xMjUsMy43NSw0LDIuNSw2LjI1LDcsNC4yNSw3%0ALjUsMi44NzUsNC4yNSw0LjEyNSwyLjg3NSwxLjUsMywzLjUsNC4xMjVdLCJlZGdl%0ALmx3ZCI6WzcuMzMzMyw3LjMzMzMsNyw2LjY2NjcsNy42NjY3LDcsMC4zMzMzLDEu%0ANjY2Nyw3LDcuMzMzMywwLjMzMzMsMS4zMzMzLDAuNjY2NywwLjMzMzMsMC4zMzMz%0ALDcuNjY2NywwLjMzMzMsNy4zMzMzLDEsMC42NjY3LDAuMzMzMyw3LDAuNjY2Nyw3%0ALDAuMzMzMyw3LDcsMC4zMzMzLDcuMzMzMyw3LDEuMzMzMywwLjY2NjcsNyw3LjY2%0ANjcsNywwLjY2NjcsMC42NjY3LDcuMzMzMyw3LjMzMzMsNywwLjMzMzMsMC4zMzMz%0ALDcsNy4zMzMzLDAuMzMzMywxLjMzMzMsNy42NjY3LDcsMS4zMzMzXSwiZWRnZS5j%0Ab2wiOlsicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxi%0APk5hbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBl%0AciIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8%0AXC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJu%0AYWwgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4g%0AVVNBIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1l%0AOjxcL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8%0AYj5OYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5l%0Ad3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBU%0AViIsIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwi%0APGI+TmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8%0AYj5OYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1l%0AOjxcL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+%0AIFlhaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6%0APFwvYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxi%0APk5hbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGlu%0AZSIsIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4g%0APGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJy%0APiA8Yj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sImxhYmVsIjpb%0AInMwMSIsInMwMiIsInMwMyIsInMwNCIsInMwNSIsInMwNiIsInMwNyIsInMwOCIs%0AInMwOSIsInMxMCIsInMxMSIsInMxMiIsInMxMyIsInMxNCIsInMxNSIsInMxNiIs%0AInMxNyJdLCJqaXR0ZXIiOltmYWxzZV0sInhsaW0iOlstMS44MzUsMS44MzVdLCJ5%0AbGltIjpbLTEuODIxMiwxLjgyMTJdfX1dLCJuZXR3b3JrIjp7Im1lbCI6W3siaW5s%0AIjpbMl0sIm91dGwiOlsxXSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndl%0AaWdodCI6WzIyXSwibmEiOltmYWxzZV19fSx7ImlubCI6WzNdLCJvdXRsIjpbMV0s%0AImF0bCI6eyJ0eXBlIjpbImh5cGVybGluayJdLCJ3ZWlnaHQiOlsyMl0sIm5hIjpb%0AZmFsc2VdfX0seyJpbmwiOls0XSwib3V0bCI6WzFdLCJhdGwiOnsidHlwZSI6WyJo%0AeXBlcmxpbmsiXSwid2VpZ2h0IjpbMjFdLCJuYSI6W2ZhbHNlXX19LHsiaW5sIjpb%0AMTVdLCJvdXRsIjpbMV0sImF0bCI6eyJ0eXBlIjpbIm1lbnRpb24iXSwid2VpZ2h0%0AIjpbMjBdLCJuYSI6W2ZhbHNlXX19LHsiaW5sIjpbMV0sIm91dGwiOlsyXSwiYXRs%0AIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndlaWdodCI6WzIzXSwibmEiOltmYWxz%0AZV19fSx7ImlubCI6WzNdLCJvdXRsIjpbMl0sImF0bCI6eyJ0eXBlIjpbImh5cGVy%0AbGluayJdLCJ3ZWlnaHQiOlsyMV0sIm5hIjpbZmFsc2VdfX0seyJpbmwiOls5XSwi%0Ab3V0bCI6WzJdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsiXSwid2VpZ2h0Ijpb%0AMV0sIm5hIjpbZmFsc2VdfX0seyJpbmwiOlsxMF0sIm91dGwiOlsyXSwiYXRsIjp7%0AInR5cGUiOlsiaHlwZXJsaW5rIl0sIndlaWdodCI6WzVdLCJuYSI6W2ZhbHNlXX19%0ALHsiaW5sIjpbMV0sIm91dGwiOlszXSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5r%0AIl0sIndlaWdodCI6WzIxXSwibmEiOltmYWxzZV19fSx7ImlubCI6WzRdLCJvdXRs%0AIjpbM10sImF0bCI6eyJ0eXBlIjpbImh5cGVybGluayJdLCJ3ZWlnaHQiOlsyMl0s%0AIm5hIjpbZmFsc2VdfX0seyJpbmwiOls1XSwib3V0bCI6WzNdLCJhdGwiOnsidHlw%0AZSI6WyJoeXBlcmxpbmsiXSwid2VpZ2h0IjpbMV0sIm5hIjpbZmFsc2VdfX0seyJp%0AbmwiOls4XSwib3V0bCI6WzNdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsiXSwi%0Ad2VpZ2h0IjpbNF0sIm5hIjpbZmFsc2VdfX0seyJpbmwiOlsxMF0sIm91dGwiOlsz%0AXSwiYXRsIjp7InR5cGUiOlsibWVudGlvbiJdLCJ3ZWlnaHQiOlsyXSwibmEiOltm%0AYWxzZV19fSx7ImlubCI6WzExXSwib3V0bCI6WzNdLCJhdGwiOnsidHlwZSI6WyJo%0AeXBlcmxpbmsiXSwid2VpZ2h0IjpbMV0sIm5hIjpbZmFsc2VdfX0seyJpbmwiOlsx%0AMl0sIm91dGwiOlszXSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndlaWdo%0AdCI6WzFdLCJuYSI6W2ZhbHNlXX19LHsiaW5sIjpbM10sIm91dGwiOls0XSwiYXRs%0AIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndlaWdodCI6WzIzXSwibmEiOltmYWxz%0AZV19fSx7ImlubCI6WzZdLCJvdXRsIjpbNF0sImF0bCI6eyJ0eXBlIjpbIm1lbnRp%0Ab24iXSwid2VpZ2h0IjpbMV0sIm5hIjpbZmFsc2VdfX0seyJpbmwiOlsxMV0sIm91%0AdGwiOls0XSwiYXRsIjp7InR5cGUiOlsibWVudGlvbiJdLCJ3ZWlnaHQiOlsyMl0s%0AIm5hIjpbZmFsc2VdfX0seyJpbmwiOlsxMl0sIm91dGwiOls0XSwiYXRsIjp7InR5%0AcGUiOlsiaHlwZXJsaW5rIl0sIndlaWdodCI6WzNdLCJuYSI6W2ZhbHNlXX19LHsi%0AaW5sIjpbMTddLCJvdXRsIjpbNF0sImF0bCI6eyJ0eXBlIjpbIm1lbnRpb24iXSwi%0Ad2VpZ2h0IjpbMl0sIm5hIjpbZmFsc2VdfX0seyJpbmwiOlsxXSwib3V0bCI6WzVd%0ALCJhdGwiOnsidHlwZSI6WyJtZW50aW9uIl0sIndlaWdodCI6WzFdLCJuYSI6W2Zh%0AbHNlXX19LHsiaW5sIjpbMl0sIm91dGwiOls1XSwiYXRsIjp7InR5cGUiOlsiaHlw%0AZXJsaW5rIl0sIndlaWdodCI6WzIxXSwibmEiOltmYWxzZV19fSx7ImlubCI6Wzld%0ALCJvdXRsIjpbNV0sImF0bCI6eyJ0eXBlIjpbImh5cGVybGluayJdLCJ3ZWlnaHQi%0AOlsyXSwibmEiOltmYWxzZV19fSx7ImlubCI6WzE1XSwib3V0bCI6WzVdLCJhdGwi%0AOnsidHlwZSI6WyJtZW50aW9uIl0sIndlaWdodCI6WzIxXSwibmEiOltmYWxzZV19%0AfSx7ImlubCI6WzZdLCJvdXRsIjpbNl0sImF0bCI6eyJ0eXBlIjpbImh5cGVybGlu%0AayJdLCJ3ZWlnaHQiOlsxXSwibmEiOltmYWxzZV19fSx7ImlubCI6WzE2XSwib3V0%0AbCI6WzZdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsiXSwid2VpZ2h0IjpbMjFd%0ALCJuYSI6W2ZhbHNlXX19LHsiaW5sIjpbMTddLCJvdXRsIjpbNl0sImF0bCI6eyJ0%0AeXBlIjpbIm1lbnRpb24iXSwid2VpZ2h0IjpbMjFdLCJuYSI6W2ZhbHNlXX19LHsi%0AaW5sIjpbM10sIm91dGwiOls3XSwiYXRsIjp7InR5cGUiOlsibWVudGlvbiJdLCJ3%0AZWlnaHQiOlsxXSwibmEiOltmYWxzZV19fSx7ImlubCI6WzhdLCJvdXRsIjpbN10s%0AImF0bCI6eyJ0eXBlIjpbIm1lbnRpb24iXSwid2VpZ2h0IjpbMjJdLCJuYSI6W2Zh%0AbHNlXX19LHsiaW5sIjpbMTBdLCJvdXRsIjpbN10sImF0bCI6eyJ0eXBlIjpbImh5%0AcGVybGluayJdLCJ3ZWlnaHQiOlsyMV0sIm5hIjpbZmFsc2VdfX0seyJpbmwiOlsx%0ANF0sIm91dGwiOls3XSwiYXRsIjp7InR5cGUiOlsibWVudGlvbiJdLCJ3ZWlnaHQi%0AOls0XSwibmEiOltmYWxzZV19fSx7ImlubCI6WzNdLCJvdXRsIjpbOF0sImF0bCI6%0AeyJ0eXBlIjpbImh5cGVybGluayJdLCJ3ZWlnaHQiOlsyXSwibmEiOltmYWxzZV19%0AfSx7ImlubCI6WzddLCJvdXRsIjpbOF0sImF0bCI6eyJ0eXBlIjpbIm1lbnRpb24i%0AXSwid2VpZ2h0IjpbMjFdLCJuYSI6W2ZhbHNlXX19LHsiaW5sIjpbOV0sIm91dGwi%0AOls4XSwiYXRsIjp7InR5cGUiOlsibWVudGlvbiJdLCJ3ZWlnaHQiOlsyM10sIm5h%0AIjpbZmFsc2VdfX0seyJpbmwiOlsxMF0sIm91dGwiOls5XSwiYXRsIjp7InR5cGUi%0AOlsibWVudGlvbiJdLCJ3ZWlnaHQiOlsyMV0sIm5hIjpbZmFsc2VdfX0seyJpbmwi%0AOlszXSwib3V0bCI6WzEwXSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndl%0AaWdodCI6WzJdLCJuYSI6W2ZhbHNlXX19LHsiaW5sIjpbNl0sIm91dGwiOlsxMl0s%0AImF0bCI6eyJ0eXBlIjpbIm1lbnRpb24iXSwid2VpZ2h0IjpbMl0sIm5hIjpbZmFs%0Ac2VdfX0seyJpbmwiOlsxM10sIm91dGwiOlsxMl0sImF0bCI6eyJ0eXBlIjpbImh5%0AcGVybGluayJdLCJ3ZWlnaHQiOlsyMl0sIm5hIjpbZmFsc2VdfX0seyJpbmwiOlsx%0ANF0sIm91dGwiOlsxMl0sImF0bCI6eyJ0eXBlIjpbIm1lbnRpb24iXSwid2VpZ2h0%0AIjpbMjJdLCJuYSI6W2ZhbHNlXX19LHsiaW5sIjpbMTJdLCJvdXRsIjpbMTNdLCJh%0AdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsiXSwid2VpZ2h0IjpbMjFdLCJuYSI6W2Zh%0AbHNlXX19LHsiaW5sIjpbMTddLCJvdXRsIjpbMTNdLCJhdGwiOnsidHlwZSI6WyJt%0AZW50aW9uIl0sIndlaWdodCI6WzFdLCJuYSI6W2ZhbHNlXX19LHsiaW5sIjpbMTFd%0ALCJvdXRsIjpbMTRdLCJhdGwiOnsidHlwZSI6WyJtZW50aW9uIl0sIndlaWdodCI6%0AWzFdLCJuYSI6W2ZhbHNlXX19LHsiaW5sIjpbMTNdLCJvdXRsIjpbMTRdLCJhdGwi%0AOnsidHlwZSI6WyJtZW50aW9uIl0sIndlaWdodCI6WzIxXSwibmEiOltmYWxzZV19%0AfSx7ImlubCI6WzFdLCJvdXRsIjpbMTVdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxp%0AbmsiXSwid2VpZ2h0IjpbMjJdLCJuYSI6W2ZhbHNlXX19LHsiaW5sIjpbNF0sIm91%0AdGwiOlsxNV0sImF0bCI6eyJ0eXBlIjpbImh5cGVybGluayJdLCJ3ZWlnaHQiOlsx%0AXSwibmEiOltmYWxzZV19fSx7ImlubCI6WzZdLCJvdXRsIjpbMTVdLCJhdGwiOnsi%0AdHlwZSI6WyJoeXBlcmxpbmsiXSwid2VpZ2h0IjpbNF0sIm5hIjpbZmFsc2VdfX0s%0AeyJpbmwiOls2XSwib3V0bCI6WzE2XSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5r%0AIl0sIndlaWdodCI6WzIzXSwibmEiOltmYWxzZV19fSx7ImlubCI6WzE3XSwib3V0%0AbCI6WzE2XSwiYXRsIjp7InR5cGUiOlsibWVudGlvbiJdLCJ3ZWlnaHQiOlsyMV0s%0AIm5hIjpbZmFsc2VdfX0seyJpbmwiOls0XSwib3V0bCI6WzE3XSwiYXRsIjp7InR5%0AcGUiOlsiaHlwZXJsaW5rIl0sIndlaWdodCI6WzRdLCJuYSI6W2ZhbHNlXX19XSwi%0AZ2FsIjp7Im4iOlsxN10sIm1uZXh0IjpbNTBdLCJkaXJlY3RlZCI6W3RydWVdLCJo%0AeXBlciI6W2ZhbHNlXSwibG9vcHMiOltmYWxzZV0sIm11bHRpcGxlIjpbZmFsc2Vd%0ALCJiaXBhcnRpdGUiOltmYWxzZV0sIm5ldC5uYW1lIjpbIk1lZGlhIE5ldHdvcmsi%0AXSwic2xpY2UucGFyIjp7InN0YXJ0IjpbMF0sImVuZCI6WzBdLCJpbnRlcnZhbCI6%0AWzBdLCJhZ2dyZWdhdGUuZHVyIjpbMF0sInJ1bGUiOlsibGF0ZXN0Il19fSwidmFs%0AIjpbeyJuYSI6W2ZhbHNlXSwidmVydGV4Lm5hbWVzIjpbInMwMSJdLCJpZCI6WyJz%0AMDEiXSwibWVkaWEiOlsiTlkgVGltZXMiXSwibWVkaWEudHlwZSI6WzFdLCJ0eXBl%0ALmxhYmVsIjpbIk5ld3NwYXBlciJdLCJhdWRpZW5jZS5zaXplIjpbMjBdLCJjb2wi%0AOlsiZ3JheTcwIl19LHsibmEiOltmYWxzZV0sInZlcnRleC5uYW1lcyI6WyJzMDIi%0AXSwiaWQiOlsiczAyIl0sIm1lZGlhIjpbIldhc2hpbmd0b24gUG9zdCJdLCJtZWRp%0AYS50eXBlIjpbMV0sInR5cGUubGFiZWwiOlsiTmV3c3BhcGVyIl0sImF1ZGllbmNl%0ALnNpemUiOlsyNV0sImNvbCI6WyJncmF5NzAiXX0seyJuYSI6W2ZhbHNlXSwidmVy%0AdGV4Lm5hbWVzIjpbInMwMyJdLCJpZCI6WyJzMDMiXSwibWVkaWEiOlsiV2FsbCBT%0AdHJlZXQgSm91cm5hbCJdLCJtZWRpYS50eXBlIjpbMV0sInR5cGUubGFiZWwiOlsi%0ATmV3c3BhcGVyIl0sImF1ZGllbmNlLnNpemUiOlszMF0sImNvbCI6WyJncmF5NzAi%0AXX0seyJuYSI6W2ZhbHNlXSwidmVydGV4Lm5hbWVzIjpbInMwNCJdLCJpZCI6WyJz%0AMDQiXSwibWVkaWEiOlsiVVNBIFRvZGF5Il0sIm1lZGlhLnR5cGUiOlsxXSwidHlw%0AZS5sYWJlbCI6WyJOZXdzcGFwZXIiXSwiYXVkaWVuY2Uuc2l6ZSI6WzMyXSwiY29s%0AIjpbImdyYXk3MCJdfSx7Im5hIjpbZmFsc2VdLCJ2ZXJ0ZXgubmFtZXMiOlsiczA1%0AIl0sImlkIjpbInMwNSJdLCJtZWRpYSI6WyJMQSBUaW1lcyJdLCJtZWRpYS50eXBl%0AIjpbMV0sInR5cGUubGFiZWwiOlsiTmV3c3BhcGVyIl0sImF1ZGllbmNlLnNpemUi%0AOlsyMF0sImNvbCI6WyJncmF5NzAiXX0seyJuYSI6W2ZhbHNlXSwidmVydGV4Lm5h%0AbWVzIjpbInMwNiJdLCJpZCI6WyJzMDYiXSwibWVkaWEiOlsiTmV3IFlvcmsgUG9z%0AdCJdLCJtZWRpYS50eXBlIjpbMV0sInR5cGUubGFiZWwiOlsiTmV3c3BhcGVyIl0s%0AImF1ZGllbmNlLnNpemUiOls1MF0sImNvbCI6WyJncmF5NzAiXX0seyJuYSI6W2Zh%0AbHNlXSwidmVydGV4Lm5hbWVzIjpbInMwNyJdLCJpZCI6WyJzMDciXSwibWVkaWEi%0AOlsiQ05OIl0sIm1lZGlhLnR5cGUiOlsyXSwidHlwZS5sYWJlbCI6WyJUViJdLCJh%0AdWRpZW5jZS5zaXplIjpbNTZdLCJjb2wiOlsidG9tYXRvIl19LHsibmEiOltmYWxz%0AZV0sInZlcnRleC5uYW1lcyI6WyJzMDgiXSwiaWQiOlsiczA4Il0sIm1lZGlhIjpb%0AIk1TTkJDIl0sIm1lZGlhLnR5cGUiOlsyXSwidHlwZS5sYWJlbCI6WyJUViJdLCJh%0AdWRpZW5jZS5zaXplIjpbMzRdLCJjb2wiOlsidG9tYXRvIl19LHsibmEiOltmYWxz%0AZV0sInZlcnRleC5uYW1lcyI6WyJzMDkiXSwiaWQiOlsiczA5Il0sIm1lZGlhIjpb%0AIkZPWCBOZXdzIl0sIm1lZGlhLnR5cGUiOlsyXSwidHlwZS5sYWJlbCI6WyJUViJd%0ALCJhdWRpZW5jZS5zaXplIjpbNjBdLCJjb2wiOlsidG9tYXRvIl19LHsibmEiOltm%0AYWxzZV0sInZlcnRleC5uYW1lcyI6WyJzMTAiXSwiaWQiOlsiczEwIl0sIm1lZGlh%0AIjpbIkFCQyJdLCJtZWRpYS50eXBlIjpbMl0sInR5cGUubGFiZWwiOlsiVFYiXSwi%0AYXVkaWVuY2Uuc2l6ZSI6WzIzXSwiY29sIjpbInRvbWF0byJdfSx7Im5hIjpbZmFs%0Ac2VdLCJ2ZXJ0ZXgubmFtZXMiOlsiczExIl0sImlkIjpbInMxMSJdLCJtZWRpYSI6%0AWyJCQkMiXSwibWVkaWEudHlwZSI6WzJdLCJ0eXBlLmxhYmVsIjpbIlRWIl0sImF1%0AZGllbmNlLnNpemUiOlszNF0sImNvbCI6WyJ0b21hdG8iXX0seyJuYSI6W2ZhbHNl%0AXSwidmVydGV4Lm5hbWVzIjpbInMxMiJdLCJpZCI6WyJzMTIiXSwibWVkaWEiOlsi%0AWWFob28gTmV3cyJdLCJtZWRpYS50eXBlIjpbM10sInR5cGUubGFiZWwiOlsiT25s%0AaW5lIl0sImF1ZGllbmNlLnNpemUiOlszM10sImNvbCI6WyJnb2xkIl19LHsibmEi%0AOltmYWxzZV0sInZlcnRleC5uYW1lcyI6WyJzMTMiXSwiaWQiOlsiczEzIl0sIm1l%0AZGlhIjpbIkdvb2dsZSBOZXdzIl0sIm1lZGlhLnR5cGUiOlszXSwidHlwZS5sYWJl%0AbCI6WyJPbmxpbmUiXSwiYXVkaWVuY2Uuc2l6ZSI6WzIzXSwiY29sIjpbImdvbGQi%0AXX0seyJuYSI6W2ZhbHNlXSwidmVydGV4Lm5hbWVzIjpbInMxNCJdLCJpZCI6WyJz%0AMTQiXSwibWVkaWEiOlsiUmV1dGVycy5jb20iXSwibWVkaWEudHlwZSI6WzNdLCJ0%0AeXBlLmxhYmVsIjpbIk9ubGluZSJdLCJhdWRpZW5jZS5zaXplIjpbMTJdLCJjb2wi%0AOlsiZ29sZCJdfSx7Im5hIjpbZmFsc2VdLCJ2ZXJ0ZXgubmFtZXMiOlsiczE1Il0s%0AImlkIjpbInMxNSJdLCJtZWRpYSI6WyJOWVRpbWVzLmNvbSJdLCJtZWRpYS50eXBl%0AIjpbM10sInR5cGUubGFiZWwiOlsiT25saW5lIl0sImF1ZGllbmNlLnNpemUiOlsy%0ANF0sImNvbCI6WyJnb2xkIl19LHsibmEiOltmYWxzZV0sInZlcnRleC5uYW1lcyI6%0AWyJzMTYiXSwiaWQiOlsiczE2Il0sIm1lZGlhIjpbIldhc2hpbmd0b25Qb3N0LmNv%0AbSJdLCJtZWRpYS50eXBlIjpbM10sInR5cGUubGFiZWwiOlsiT25saW5lIl0sImF1%0AZGllbmNlLnNpemUiOlsyOF0sImNvbCI6WyJnb2xkIl19LHsibmEiOltmYWxzZV0s%0AInZlcnRleC5uYW1lcyI6WyJzMTciXSwiaWQiOlsiczE3Il0sIm1lZGlhIjpbIkFP%0ATC5jb20iXSwibWVkaWEudHlwZSI6WzNdLCJ0eXBlLmxhYmVsIjpbIk9ubGluZSJd%0ALCJhdWRpZW5jZS5zaXplIjpbMzNdLCJjb2wiOlsiZ29sZCJdfV0sImllbCI6W1s0%0ANCwyMSw5LDVdLFsxLDIyXSxbMiw2LDM2LDMyLDI4LDE2XSxbMywxMCw0OSw0NV0s%0AWzExXSxbMTcsNDcsNDYsMzcsMjVdLFszM10sWzEyLDI5XSxbNywyMywzNF0sWzgs%0AMTMsMzAsMzVdLFsxNCwxOCw0Ml0sWzE1LDE5LDQwXSxbMzgsNDNdLFszMSwzOV0s%0AWzQsMjRdLFsyNl0sWzIwLDI3LDQxLDQ4XV0sIm9lbCI6W1s0LDMsMiwxXSxbOCw3%0ALDYsNV0sWzE1LDE0LDEzLDEyLDExLDEwLDldLFsyMCwxOSwxOCwxNywxNl0sWzIx%0ALDI0LDIzLDIyXSxbMjcsMjYsMjVdLFszMSwzMCwyOSwyOF0sWzMyLDM0LDMzXSxb%0AMzVdLFszNl0sW10sWzM5LDM4LDM3XSxbNDEsNDBdLFs0Miw0M10sWzQ0LDQ1LDQ2%0AXSxbNDgsNDddLFs0OV1dfX07DQogIHZhciBvcHRpb25zID0geyJzbGlkZXIiOmZh%0AbHNlLCJwbGF5Q29udHJvbHMiOmZhbHNlLCJuZHR2LnZlcnNpb24iOiIwLjEyLjIs%0AMjAxOC01LTkifTsNCiAgLy9FTkQgR1JBUEggREFUQSBJTklUDQogIA0KICAvL0lu%0Ac2VydCBpbml0IEpTIEhlcmUNCiAgJChmdW5jdGlvbigpIHsNCiAgICBvcHRpb25z%0ALmdyYXBoRGF0YSA9IGdyYXBoRGF0YTsNCiAgICB2YXIgZ3JhcGggPSBuZXcgbmR0%0Adl9kMyhvcHRpb25zKTsgICAgICAgIA0KICB9KQ0KICA8L3NjcmlwdD48L2JvZHk+%0ADQo8L2h0bWw+(Line 1183)
Message:
loadData: 6.326171875ms
console-api debug URL: data:text/html;base64,PCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSdlbic+DQogIDxoZWFkPg0KICAg%0AIDxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4NCiAgICAgIDwhLS0gY3NzIGZvciBzdHls%0AaW5nIHRoZSBkMy5zbGlkZXIgbGliIC0tPg0KICAgICAgPHN0eWxlIHR5cGU9J3Rl%0AeHQvY3NzJz4uZDMtc2xpZGVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAg%0AIGZvbnQtZmFtaWx5OiBWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7CiAgICBmb250%0ALXNpemU6IDEuMWVtOwogICAgYm9yZGVyOiAxcHggc29saWQgI2FhYWFhYTsKICAg%0AIHotaW5kZXg6IDI7Cn0KCi5kMy1zbGlkZXItaG9yaXpvbnRhbCB7CiAgICBoZWln%0AaHQ6IC44ZW07Cn0gIAoKLmQzLXNsaWRlci1yYW5nZSB7CiAgYmFja2dyb3VuZDoj%0AMjk4MGI5OwogIGxlZnQ6MHB4OwogIHJpZ2h0OjBweDsKICBoZWlnaHQ6IDAuOGVt%0AOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKfQoKLmQzLXNsaWRlci1yYW5nZS12ZXJ0%0AaWNhbCB7CiAgYmFja2dyb3VuZDojMjk4MGI5OwogIGxlZnQ6MHB4OwogIHJpZ2h0%0AOjBweDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOjA7Cn0KCi5kMy1zbGlk%0AZXItdmVydGljYWwgewogICAgd2lkdGg6IC44ZW07CiAgICBoZWlnaHQ6IDEwMHB4%0AOwp9ICAgICAgCgouZDMtc2xpZGVyLWhhbmRsZSB7CiAgICBwb3NpdGlvbjogYWJz%0Ab2x1dGU7CiAgICB3aWR0aDogMS4yZW07CiAgICBoZWlnaHQ6IDEuMmVtOwogICAg%0AYm9yZGVyOiAxcHggc29saWQgI2QzZDNkMzsKICAgIGJvcmRlci1yYWRpdXM6IDRw%0AeDsKICAgIGJhY2tncm91bmQ6ICNlZWU7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXIt%0AZ3JhZGllbnQodG8gYm90dG9tLCAjZWVlIDAlLCAjZGRkIDEwMCUpOwogICAgei1p%0AbmRleDogMzsKICAgIGN1cnNvcjogbW92ZTsKfQoKLmQzLXNsaWRlci1oYW5kbGU6%0AaG92ZXIgewogICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTk5OTsKfQoKLmQzLXNs%0AaWRlci1ob3Jpem9udGFsIC5kMy1zbGlkZXItaGFuZGxlIHsKICAgIHRvcDogLS4z%0AZW07Cn0KCi5kMy1zbGlkZXItYXhpcyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7%0ACiAgICB6LWluZGV4OiAxOyAgICAKfQoKLmQzLXNsaWRlci1heGlzLWJvdHRvbSB7%0ACiAgICB0b3A6IC44ZW07Cn0KCi5kMy1zbGlkZXItYXhpcy1yaWdodCB7CiAgICBs%0AZWZ0OiAuOGVtOwp9CgouZDMtc2xpZGVyLWF4aXMgcGF0aCB7CiAgICBzdHJva2Ut%0Ad2lkdGg6IDA7CiAgICBmaWxsOiBub25lOwp9CgouZDMtc2xpZGVyLWF4aXMgbGlu%0AZSB7CiAgICBmaWxsOiBub25lOwogICAgc3Ryb2tlOiAjYWFhOwogICAgc2hhcGUt%0AcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwp9CgouZDMtc2xpZGVyLWF4aXMgdGV4dCB7%0ACiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5kMy1zbGlkZXItdmVydGljYWwgLmQz%0ALXNsaWRlci1oYW5kbGUgewogICAgbGVmdDogLS4yNWVtOwogICAgbWFyZ2luLWxl%0AZnQ6IDA7CiAgICBtYXJnaW4tYm90dG9tOiAtLjZlbTsgICAgICAKfTwvc3R5bGU+%0ADQogICAgICA8IS0tIGNzcyBmb3Igc3R5bGluZyB0aGUgbmR0di1kMyByZW5kZXIg%0AYW5kIGNvbXBvbmVudHMgLS0+DQogICAgICA8c3R5bGUgdHlwZT0ndGV4dC9jc3Mn%0APi5uZHR2LWZ1bGxzY3JlZW4geyAKICBwYWRkaW5nOiAwOwogIG1hcmdpbjogMDsK%0AICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KCi5uZHR2LWQzLWNvbnRh%0AaW5lciB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoubWFpbiwgLnhsYWIgewog%0AIHRleHQtYW5jaG9yOiBtaWRkbGU7Cn0KCi5sYWJlbCwgLm1haW4sIC54bGFiLCAu%0AdG9vbHRpcCB7CiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7Cn0KCi5kcmFnZ2lu%0AZyB7CiAgY3Vyc29yOiBtb3ZlOwp9Cgoubm9kZSB7CiAgc3Ryb2tlLXdpZHRoOiAx%0AcHg7CiAgZmlsbDogcmVkOwogIHN0cm9rZTogYmxhY2s7Cn0KCi5ub2RlLCAuZWRn%0AZSB7CiAgY3Vyc29yOiBwb2ludGVyOwogIC8qdHJhbnNpdGlvbjogc3Ryb2tlLXdp%0AZHRoIDAuMnMgZWFzZTsqLwp9CgovKi5ub2RlOmhvdmVyLCAuZWRnZTpob3ZlciB7%0ACiAgc3Ryb2tlLXdpZHRoOiA1cHggIWltcG9ydGFudDsKfSovCgouZWRnZSB7CiAg%0Ac3Ryb2tlOiBibGFjazsKfQoKLmxhYmVsIHsKICBwb2ludGVyLWV2ZW50czogbm9u%0AZTsKfQoKLmdyYXBoIHsgCiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG92ZXJmbG93%0AOiBoaWRkZW47Cn0KCi5rZXkgewogIHBhZGRpbmc6IDEwcHg7CiAgdGV4dC1hbGln%0AbjogY2VudGVyOwp9CgouY29udHJvbHMgeyAKICBtYXJnaW46IDEwcHggMjBweDsK%0AICBoZWlnaHQ6IDQwcHg7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBwb3Np%0AdGlvbjogYWJzb2x1dGU7CiAgYm90dG9tOiAwcHg7CiAgbGVmdDogMHB4OwogIHJp%0AZ2h0OiAwcHg7Cn0KCi5wbGF5LWNvbnRyb2wtY29udGFpbmVyPmRpdiB7CiAgd2lk%0AdGg6IDI1cHg7CiAgaGVpZ2h0OiAyNXB4OwogIG92ZXJmbG93OiBoaWRkZW47CiAg%0AZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgouY29udHJvbHMgLmljb24sIC5uZHR2%0ALW1lbnUtY29udGFpbmVyIC5pY29uIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6%0AIDEwMCU7CiAgY3Vyc29yOiBwb2ludGVyOwp9CgouY29udHJvbHMgLmljb246aG92%0AZXIgewogIGZpbGw6IGJsdWU7Cn0KCi5kYXRhX2Nob29zZXJfY29udGFpbmVyIHsK%0AICBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMTBweDsgbGVmdDogMTBweDsKfQoK%0ALnBsYXktY29udHJvbC1jb250YWluZXIgewogIGZsb2F0OiByaWdodDsgCiAgYmFj%0Aa2dyb3VuZDogI2NjYzsgCiAgYm9yZGVyLXJhZGl1czogNXB4OyAKICBwYWRkaW5n%0AOiA3cHg7CiAgcGFkZGluZy1ib3R0b206IDNweDsKICBib3gtc2l6aW5nOiBib3Jk%0AZXItYm94Owp9CgoubmR0di1kMy1jb250YWluZXIgeyAKICBwb3NpdGlvbjogcmVs%0AYXRpdmU7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBib3JkZXI6IDFweCBz%0Ab2xpZDsKfQoKLnNsaWRlci1jb250cm9sLWNvbnRhaW5lciB7IAogIG1hcmdpbi1y%0AaWdodDogMTYwcHg7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKLmQzLXNs%0AaWRlci1oYW5kbGUgewogIG1pbi13aWR0aDogMTBweDsKfQoKLmQzLXNsaWRlci1h%0AeGlzIHsKICBoZWlnaHQ6IDIwcHg7Cn0KCi50b29sdGlwIHsKICBkaXNwbGF5OiBu%0Ab25lOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiAxMDAwOwogIHBh%0AZGRpbmc6IDEwcHggMTBweDsKICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1%0ALCAxKTsKICBib3JkZXI6IDFweCBzb2xpZCAjNjY2OwogIG9wYWNpdHk6IDE7ICAv%0AKiB0aGlzIGlzIHRvIHByZXZlbnQgYm9vdHN0cmFwJ3MgdG9vbHRpcCBydWxlIGZy%0Ab20gb3ZlcnJkaW5nICovCn0KCi5mcmFtZUluZm8gewogIGRpc3BsYXk6IG5vbmU7%0ACiAgcG9zaXRpb246IGFic29sdXRlOwogIGJvdHRvbTogMHB4OwogIGxlZnQ6IDBw%0AeDsKICBwYWRkaW5nOiA1cHg7Cn0KCi5kdXJhdGlvbkNvbnRyb2wgewogIHdpZHRo%0AOiAxNTBweDsKICBtYXJnaW4tYm90dG9tOiAyMHB4OyAKfQoKLmNvbnRhaW5lciAu%0Ac2NyZWVuIHsKICBvcGFjaXR5OiAwOwogIHBvaW50ZXItZXZlbnRzOiBub25lOwog%0AIGZpbGw6IG5vbmU7Cn0KCi5jb250YWluZXIgLnNjcmVlbi5uZXR3b3JrLXNlbGVj%0AdGVkIHsKICBvcGFjaXR5OiAuNjsKfQoKLm5kdHYtbWVudS1jb250YWluZXIgewog%0AIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDVweDsKICByaWdodDogNXB4Owp9%0ACgoubmR0di1tZW51LWljb24gewogIHdpZHRoOiAyNXB4OwogIGhlaWdodDogMjVw%0AeDsKICBmbG9hdDogcmlnaHQ7CiAgei1pbmRleDogMTAwOwp9CgoubmR0di1tZW51%0ALWljb24ubWVudS1hY3RpdmUgewogIGJhY2tncm91bmQ6ICNmZmY7CiAgYm9yZGVy%0AOiAxcHggc29saWQgIzY2NjsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2Zm%0AZjsKfQoKLm5kdHYtbWVudSB7CiAgYmFja2dyb3VuZDogd2hpdGU7CiAgYm9yZGVy%0AOiAxcHggc29saWQgIzY2NjsKICBib3gtc2hhZG93OiAwcHggMnB4IDRweCByZ2Jh%0AKDAsMCwwLDAuMik7CiAgcGFkZGluZzogMTBweDsKICBtYXJnaW4tdG9wOiAyNXB4%0AOwogIGRpc3BsYXk6IG5vbmU7Cn0KCi5tZW51LWl0ZW0gewogIHBhZGRpbmc6IDEw%0AcHggMHB4OwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQ0NDOwp9CgoubWVu%0AdS1pdGVtOmZpcnN0LWNoaWxkIHsKICBwYWRkaW5nLXRvcDogMHB4Owp9CgoubWVu%0AdS1pdGVtOmxhc3QtY2hpbGQgewogIHBhZGRpbmctYm90dG9tOiAwcHg7CiAgYm9y%0AZGVyOiBub25lOwp9Cjwvc3R5bGU+DQogICAgPCEtLSBtaW5pbWl6ZWQgZDMuanMg%0AbGlicmFyeSAtLT4NCiAgICAgIDxzY3JpcHQ+IWZ1bmN0aW9uKCl7ZnVuY3Rpb24g%0AbihuLHQpe3JldHVybiB0Pm4/LTE6bj50PzE6bj49dD8wOjAvMH1mdW5jdGlvbiB0%0AKG4pe3JldHVybiBudWxsIT1uJiYhaXNOYU4obil9ZnVuY3Rpb24gZShuKXtyZXR1%0Acm57bGVmdDpmdW5jdGlvbih0LGUscix1KXtmb3IoYXJndW1lbnRzLmxlbmd0aDwz%0AJiYocj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJih1PXQubGVuZ3RoKTt1PnI7KXt2%0AYXIgaT1yK3U+Pj4xO24odFtpXSxlKTwwP3I9aSsxOnU9aX1yZXR1cm4gcn0scmln%0AaHQ6ZnVuY3Rpb24odCxlLHIsdSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9%0AMCksYXJndW1lbnRzLmxlbmd0aDw0JiYodT10Lmxlbmd0aCk7dT5yOyl7dmFyIGk9%0Acit1Pj4+MTtuKHRbaV0sZSk+MD91PWk6cj1pKzF9cmV0dXJuIHJ9fX1mdW5jdGlv%0AbiByKG4pe3JldHVybiBuLmxlbmd0aH1mdW5jdGlvbiB1KG4pe2Zvcih2YXIgdD0x%0AO24qdCUxOyl0Kj0xMDtyZXR1cm4gdH1mdW5jdGlvbiBpKG4sdCl7dHJ5e2Zvcih2%0AYXIgZSBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHt2%0AYWx1ZTp0W2VdLGVudW1lcmFibGU6ITF9KX1jYXRjaChyKXtuLnByb3RvdHlwZT10%0AfX1mdW5jdGlvbiBvKCl7fWZ1bmN0aW9uIGEobil7cmV0dXJuIG9hK24gaW4gdGhp%0Ac31mdW5jdGlvbiBjKG4pe3JldHVybiBuPW9hK24sbiBpbiB0aGlzJiZkZWxldGUg%0AdGhpc1tuXX1mdW5jdGlvbiBsKCl7dmFyIG49W107cmV0dXJuIHRoaXMuZm9yRWFj%0AaChmdW5jdGlvbih0KXtuLnB1c2godCl9KSxufWZ1bmN0aW9uIHMoKXt2YXIgbj0w%0AO2Zvcih2YXIgdCBpbiB0aGlzKXQuY2hhckNvZGVBdCgwKT09PWFhJiYrK247cmV0%0AdXJuIG59ZnVuY3Rpb24gZigpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG4uY2hhckNv%0AZGVBdCgwKT09PWFhKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGgoKXt9ZnVu%0AY3Rpb24gZyhuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0%0ALGFyZ3VtZW50cyk7cmV0dXJuIHI9PT10P246cn19ZnVuY3Rpb24gcChuLHQpe2lm%0AKHQgaW4gbilyZXR1cm4gdDt0PXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5z%0AbGljZSgxKTtmb3IodmFyIGU9MCxyPWNhLmxlbmd0aDtyPmU7KytlKXt2YXIgdT1j%0AYVtlXSt0O2lmKHUgaW4gbilyZXR1cm4gdX19ZnVuY3Rpb24gdigpe31mdW5jdGlv%0AbiBkKCl7fWZ1bmN0aW9uIG0obil7ZnVuY3Rpb24gdCgpe2Zvcih2YXIgdCxyPWUs%0AdT0tMSxpPXIubGVuZ3RoOysrdTxpOykodD1yW3VdLm9uKSYmdC5hcHBseSh0aGlz%0ALGFyZ3VtZW50cyk7cmV0dXJuIG59dmFyIGU9W10scj1uZXcgbztyZXR1cm4gdC5v%0Abj1mdW5jdGlvbih0LHUpe3ZhciBpLG89ci5nZXQodCk7cmV0dXJuIGFyZ3VtZW50%0Acy5sZW5ndGg8Mj9vJiZvLm9uOihvJiYoby5vbj1udWxsLGU9ZS5zbGljZSgwLGk9%0AZS5pbmRleE9mKG8pKS5jb25jYXQoZS5zbGljZShpKzEpKSxyLnJlbW92ZSh0KSks%0AdSYmZS5wdXNoKHIuc2V0KHQse29uOnV9KSksbil9LHR9ZnVuY3Rpb24geSgpe1Zv%0ALmV2ZW50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24geCgpe2Zvcih2YXIgbix0%0APVZvLmV2ZW50O249dC5zb3VyY2VFdmVudDspdD1uO3JldHVybiB0fWZ1bmN0aW9u%0AIE0obil7Zm9yKHZhciB0PW5ldyBkLGU9MCxyPWFyZ3VtZW50cy5sZW5ndGg7Kytl%0APHI7KXRbYXJndW1lbnRzW2VdXT1tKHQpO3JldHVybiB0Lm9mPWZ1bmN0aW9uKGUs%0Acil7cmV0dXJuIGZ1bmN0aW9uKHUpe3RyeXt2YXIgaT11LnNvdXJjZUV2ZW50PVZv%0ALmV2ZW50O3UudGFyZ2V0PW4sVm8uZXZlbnQ9dSx0W3UudHlwZV0uYXBwbHkoZSxy%0AKX1maW5hbGx5e1ZvLmV2ZW50PWl9fX0sdH1mdW5jdGlvbiBfKG4pe3JldHVybiBz%0AYShuLHZhKSxufWZ1bmN0aW9uIGIobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9m%0AIG4/bjpmdW5jdGlvbigpe3JldHVybiBmYShuLHRoaXMpfX1mdW5jdGlvbiB3KG4p%0Ae3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24oKXtyZXR1cm4g%0AaGEobix0aGlzKX19ZnVuY3Rpb24gUyhuLHQpe2Z1bmN0aW9uIGUoKXt0aGlzLnJl%0AbW92ZUF0dHJpYnV0ZShuKX1mdW5jdGlvbiByKCl7dGhpcy5yZW1vdmVBdHRyaWJ1%0AdGVOUyhuLnNwYWNlLG4ubG9jYWwpfWZ1bmN0aW9uIHUoKXt0aGlzLnNldEF0dHJp%0AYnV0ZShuLHQpfWZ1bmN0aW9uIGkoKXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3Bh%0AY2Usbi5sb2NhbCx0KX1mdW5jdGlvbiBvKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFy%0AZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZShuKTp0aGlzLnNl%0AdEF0dHJpYnV0ZShuLGUpfWZ1bmN0aW9uIGEoKXt2YXIgZT10LmFwcGx5KHRoaXMs%0AYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFj%0AZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxl%0AKX1yZXR1cm4gbj1Wby5ucy5xdWFsaWZ5KG4pLG51bGw9PXQ/bi5sb2NhbD9yOmU6%0AImZ1bmN0aW9uIj09dHlwZW9mIHQ/bi5sb2NhbD9hOm86bi5sb2NhbD9pOnV9ZnVu%0AY3Rpb24gayhuKXtyZXR1cm4gbi50cmltKCkucmVwbGFjZSgvXHMrL2csIiAiKX1m%0AdW5jdGlvbiBFKG4pe3JldHVybiBuZXcgUmVnRXhwKCIoPzpefFxccyspIitWby5y%0AZXF1b3RlKG4pKyIoPzpcXHMrfCQpIiwiZyIpfWZ1bmN0aW9uIEEobil7cmV0dXJu%0AKG4rIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBDKG4sdCl7ZnVu%0AY3Rpb24gZSgpe2Zvcih2YXIgZT0tMTsrK2U8dTspbltlXSh0aGlzLHQpfWZ1bmN0%0AaW9uIHIoKXtmb3IodmFyIGU9LTEscj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTsr%0AK2U8dTspbltlXSh0aGlzLHIpfW49QShuKS5tYXAoTik7dmFyIHU9bi5sZW5ndGg7%0AcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/cjplfWZ1bmN0aW9uIE4obil7dmFy%0AIHQ9RShuKTtyZXR1cm4gZnVuY3Rpb24oZSxyKXtpZih1PWUuY2xhc3NMaXN0KXJl%0AdHVybiByP3UuYWRkKG4pOnUucmVtb3ZlKG4pO3ZhciB1PWUuZ2V0QXR0cmlidXRl%0AKCJjbGFzcyIpfHwiIjtyPyh0Lmxhc3RJbmRleD0wLHQudGVzdCh1KXx8ZS5zZXRB%0AdHRyaWJ1dGUoImNsYXNzIixrKHUrIiAiK24pKSk6ZS5zZXRBdHRyaWJ1dGUoImNs%0AYXNzIixrKHUucmVwbGFjZSh0LCIgIikpKX19ZnVuY3Rpb24geihuLHQsZSl7ZnVu%0AY3Rpb24gcigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9ZnVuY3Rpb24g%0AdSgpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfWZ1bmN0aW9uIGkoKXt2%0AYXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUu%0AcmVtb3ZlUHJvcGVydHkobik6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLHIsZSl9%0AcmV0dXJuIG51bGw9PXQ/cjoiZnVuY3Rpb24iPT10eXBlb2YgdD9pOnV9ZnVuY3Rp%0Ab24gTChuLHQpe2Z1bmN0aW9uIGUoKXtkZWxldGUgdGhpc1tuXX1mdW5jdGlvbiBy%0AKCl7dGhpc1tuXT10fWZ1bmN0aW9uIHUoKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJn%0AdW1lbnRzKTtudWxsPT1lP2RlbGV0ZSB0aGlzW25dOnRoaXNbbl09ZX1yZXR1cm4g%0AbnVsbD09dD9lOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3U6cn1mdW5jdGlvbiBUKG4p%0Ae3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246KG49Vm8ubnMucXVhbGlmeShu%0AKSkubG9jYWw/ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNy%0AZWF0ZUVsZW1lbnROUyhuLnNwYWNlLG4ubG9jYWwpfTpmdW5jdGlvbigpe3JldHVy%0AbiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHRoaXMubmFtZXNw%0AYWNlVVJJLG4pfX1mdW5jdGlvbiBxKG4pe3JldHVybntfX2RhdGFfXzpufX1mdW5j%0AdGlvbiBSKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBwYSh0aGlzLG4pfX1m%0AdW5jdGlvbiBEKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RofHwodD1uKSxmdW5j%0AdGlvbihuLGUpe3JldHVybiBuJiZlP3Qobi5fX2RhdGFfXyxlLl9fZGF0YV9fKToh%0Abi0hZX19ZnVuY3Rpb24gUChuLHQpe2Zvcih2YXIgZT0wLHI9bi5sZW5ndGg7cj5l%0AO2UrKylmb3IodmFyIHUsaT1uW2VdLG89MCxhPWkubGVuZ3RoO2E+bztvKyspKHU9%0AaVtvXSkmJnQodSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFUobil7cmV0dXJuIHNh%0AKG4sbWEpLG59ZnVuY3Rpb24gaihuKXt2YXIgdCxlO3JldHVybiBmdW5jdGlvbihy%0ALHUsaSl7dmFyIG8sYT1uW2ldLnVwZGF0ZSxjPWEubGVuZ3RoO2ZvcihpIT1lJiYo%0AZT1pLHQ9MCksdT49dCYmKHQ9dSsxKTshKG89YVt0XSkmJisrdDxjOyk7cmV0dXJu%0AIG99fWZ1bmN0aW9uIEgoKXt2YXIgbj10aGlzLl9fdHJhbnNpdGlvbl9fO24mJisr%0Abi5hY3RpdmV9ZnVuY3Rpb24gRihuLHQsZSl7ZnVuY3Rpb24gcigpe3ZhciB0PXRo%0AaXNbb107dCYmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLHQsdC4kKSxkZWxl%0AdGUgdGhpc1tvXSl9ZnVuY3Rpb24gdSgpe3ZhciB1PWModCwkbyhhcmd1bWVudHMp%0AKTtyLmNhbGwodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKG4sdGhpc1tvXT11%0ALHUuJD1lKSx1Ll89dH1mdW5jdGlvbiBpKCl7dmFyIHQsZT1uZXcgUmVnRXhwKCJe%0AX19vbihbXi5dKykiK1ZvLnJlcXVvdGUobikrIiQiKTtmb3IodmFyIHIgaW4gdGhp%0AcylpZih0PXIubWF0Y2goZSkpe3ZhciB1PXRoaXNbcl07dGhpcy5yZW1vdmVFdmVu%0AdExpc3RlbmVyKHRbMV0sdSx1LiQpLGRlbGV0ZSB0aGlzW3JdfX12YXIgbz0iX19v%0AbiIrbixhPW4uaW5kZXhPZigiLiIpLGM9TzthPjAmJihuPW4uc2xpY2UoMCxhKSk7%0AdmFyIGw9eGEuZ2V0KG4pO3JldHVybiBsJiYobj1sLGM9WSksYT90P3U6cjp0P3Y6%0AaX1mdW5jdGlvbiBPKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPVZvLmV2%0AZW50O1ZvLmV2ZW50PWUsdFswXT10aGlzLl9fZGF0YV9fO3RyeXtuLmFwcGx5KHRo%0AaXMsdCl9ZmluYWxseXtWby5ldmVudD1yfX19ZnVuY3Rpb24gWShuLHQpe3ZhciBl%0APU8obix0KTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHQ9dGhpcyxyPW4ucmVsYXRl%0AZFRhcmdldDtyJiYocj09PXR8fDgmci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0%0AKSl8fGUuY2FsbCh0LG4pfX1mdW5jdGlvbiBJKCl7dmFyIG49Ii5kcmFnc3VwcHJl%0Ac3MtIisgKytfYSx0PSJjbGljayIrbixlPVZvLnNlbGVjdChKbykub24oInRvdWNo%0AbW92ZSIrbix5KS5vbigiZHJhZ3N0YXJ0IituLHkpLm9uKCJzZWxlY3RzdGFydCIr%0Abix5KTtpZihNYSl7dmFyIHI9V28uc3R5bGUsdT1yW01hXTtyW01hXT0ibm9uZSJ9%0AcmV0dXJuIGZ1bmN0aW9uKGkpe2Z1bmN0aW9uIG8oKXtlLm9uKHQsbnVsbCl9ZS5v%0AbihuLG51bGwpLE1hJiYocltNYV09dSksaSYmKGUub24odCxmdW5jdGlvbigpe3ko%0AKSxvKCl9LCEwKSxzZXRUaW1lb3V0KG8sMCkpfX1mdW5jdGlvbiBaKG4sdCl7dC5j%0AaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSk7dmFyIGU9bi5v%0Ad25lclNWR0VsZW1lbnR8fG47aWYoZS5jcmVhdGVTVkdQb2ludCl7dmFyIHI9ZS5j%0AcmVhdGVTVkdQb2ludCgpO2lmKDA+YmEmJihKby5zY3JvbGxYfHxKby5zY3JvbGxZ%0AKSl7ZT1Wby5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInN2ZyIpLnN0eWxlKHtwb3Np%0AdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxwYWRkaW5nOjAs%0AYm9yZGVyOiJub25lIn0sImltcG9ydGFudCIpO3ZhciB1PWVbMF1bMF0uZ2V0U2Ny%0AZWVuQ1RNKCk7YmE9ISh1LmZ8fHUuZSksZS5yZW1vdmUoKX1yZXR1cm4gYmE/KHIu%0AeD10LnBhZ2VYLHIueT10LnBhZ2VZKTooci54PXQuY2xpZW50WCxyLnk9dC5jbGll%0AbnRZKSxyPXIubWF0cml4VHJhbnNmb3JtKG4uZ2V0U2NyZWVuQ1RNKCkuaW52ZXJz%0AZSgpKSxbci54LHIueV19dmFyIGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTty%0AZXR1cm5bdC5jbGllbnRYLWkubGVmdC1uLmNsaWVudExlZnQsdC5jbGllbnRZLWku%0AdG9wLW4uY2xpZW50VG9wXX1mdW5jdGlvbiBWKCl7cmV0dXJuIFZvLmV2ZW50LmNo%0AYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXJ9ZnVuY3Rpb24gWCgpe3JldHVybiBW%0Aby5ldmVudC50YXJnZXR9ZnVuY3Rpb24gJCgpe3JldHVybiBKb31mdW5jdGlvbiBC%0AKG4pe3JldHVybiBuPjA/MTowPm4/LTE6MH1mdW5jdGlvbiBXKG4sdCxlKXtyZXR1%0Acm4odFswXS1uWzBdKSooZVsxXS1uWzFdKS0odFsxXS1uWzFdKSooZVswXS1uWzBd%0AKX1mdW5jdGlvbiBKKG4pe3JldHVybiBuPjE/MDotMT5uP3dhOk1hdGguYWNvcyhu%0AKX1mdW5jdGlvbiBHKG4pe3JldHVybiBuPjE/a2E6LTE+bj8ta2E6TWF0aC5hc2lu%0AKG4pfWZ1bmN0aW9uIEsobil7cmV0dXJuKChuPU1hdGguZXhwKG4pKS0xL24pLzJ9%0AZnVuY3Rpb24gUShuKXtyZXR1cm4oKG49TWF0aC5leHAobikpKzEvbikvMn1mdW5j%0AdGlvbiBudChuKXtyZXR1cm4oKG49TWF0aC5leHAoMipuKSktMSkvKG4rMSl9ZnVu%0AY3Rpb24gdHQobil7cmV0dXJuKG49TWF0aC5zaW4obi8yKSkqbn1mdW5jdGlvbiBl%0AdCgpe31mdW5jdGlvbiBydChuLHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBy%0AdD8odGhpcy5oPStuLHRoaXMucz0rdCx2b2lkKHRoaXMubD0rZSkpOmFyZ3VtZW50%0Acy5sZW5ndGg8Mj9uIGluc3RhbmNlb2YgcnQ/bmV3IHJ0KG4uaCxuLnMsbi5sKTpt%0AdCgiIituLHl0LHJ0KTpuZXcgcnQobix0LGUpfWZ1bmN0aW9uIHV0KG4sdCxlKXtm%0AdW5jdGlvbiByKG4pe3JldHVybiBuPjM2MD9uLT0zNjA6MD5uJiYobis9MzYwKSw2%0AMD5uP2krKG8taSkqbi82MDoxODA+bj9vOjI0MD5uP2krKG8taSkqKDI0MC1uKS82%0AMDppfWZ1bmN0aW9uIHUobil7cmV0dXJuIE1hdGgucm91bmQoMjU1KnIobikpfXZh%0AciBpLG87cmV0dXJuIG49aXNOYU4obik/MDoobiU9MzYwKTwwP24rMzYwOm4sdD1p%0Ac05hTih0KT8wOjA+dD8wOnQ+MT8xOnQsZT0wPmU/MDplPjE/MTplLG89LjU+PWU/%0AZSooMSt0KTplK3QtZSp0LGk9MiplLW8sbmV3IGd0KHUobisxMjApLHUobiksdShu%0ALTEyMCkpfWZ1bmN0aW9uIGl0KG4sdCxlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9m%0AIGl0Pyh0aGlzLmg9K24sdGhpcy5jPSt0LHZvaWQodGhpcy5sPStlKSk6YXJndW1l%0AbnRzLmxlbmd0aDwyP24gaW5zdGFuY2VvZiBpdD9uZXcgaXQobi5oLG4uYyxuLmwp%0AOm4gaW5zdGFuY2VvZiBhdD9sdChuLmwsbi5hLG4uYik6bHQoKG49eHQoKG49Vm8u%0AcmdiKG4pKS5yLG4uZyxuLmIpKS5sLG4uYSxuLmIpOm5ldyBpdChuLHQsZSl9ZnVu%0AY3Rpb24gb3Qobix0LGUpe3JldHVybiBpc05hTihuKSYmKG49MCksaXNOYU4odCkm%0AJih0PTApLG5ldyBhdChlLE1hdGguY29zKG4qPUNhKSp0LE1hdGguc2luKG4pKnQp%0AfWZ1bmN0aW9uIGF0KG4sdCxlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGF0Pyh0%0AaGlzLmw9K24sdGhpcy5hPSt0LHZvaWQodGhpcy5iPStlKSk6YXJndW1lbnRzLmxl%0Abmd0aDwyP24gaW5zdGFuY2VvZiBhdD9uZXcgYXQobi5sLG4uYSxuLmIpOm4gaW5z%0AdGFuY2VvZiBpdD9vdChuLmwsbi5jLG4uaCk6eHQoKG49Z3QobikpLnIsbi5nLG4u%0AYik6bmV3IGF0KG4sdCxlKX1mdW5jdGlvbiBjdChuLHQsZSl7dmFyIHI9KG4rMTYp%0ALzExNix1PXIrdC81MDAsaT1yLWUvMjAwO3JldHVybiB1PXN0KHUpKkhhLHI9c3Qo%0AcikqRmEsaT1zdChpKSpPYSxuZXcgZ3QoaHQoMy4yNDA0NTQyKnUtMS41MzcxMzg1%0AKnItLjQ5ODUzMTQqaSksaHQoLS45NjkyNjYqdSsxLjg3NjAxMDgqcisuMDQxNTU2%0AKmkpLGh0KC4wNTU2NDM0KnUtLjIwNDAyNTkqcisxLjA1NzIyNTIqaSkpfWZ1bmN0%0AaW9uIGx0KG4sdCxlKXtyZXR1cm4gbj4wP25ldyBpdChNYXRoLmF0YW4yKGUsdCkq%0ATmEsTWF0aC5zcXJ0KHQqdCtlKmUpLG4pOm5ldyBpdCgwLzAsMC8wLG4pfWZ1bmN0%0AaW9uIHN0KG4pe3JldHVybiBuPi4yMDY4OTMwMzQ/bipuKm46KG4tNC8yOSkvNy43%0AODcwMzd9ZnVuY3Rpb24gZnQobil7cmV0dXJuIG4+LjAwODg1Nj9NYXRoLnBvdyhu%0ALDEvMyk6Ny43ODcwMzcqbis0LzI5fWZ1bmN0aW9uIGh0KG4pe3JldHVybiBNYXRo%0ALnJvdW5kKDI1NSooLjAwMzA0Pj1uPzEyLjkyKm46MS4wNTUqTWF0aC5wb3cobiwx%0ALzIuNCktLjA1NSkpfWZ1bmN0aW9uIGd0KG4sdCxlKXtyZXR1cm4gdGhpcyBpbnN0%0AYW5jZW9mIGd0Pyh0aGlzLnI9fn5uLHRoaXMuZz1+fnQsdm9pZCh0aGlzLmI9fn5l%0AKSk6YXJndW1lbnRzLmxlbmd0aDwyP24gaW5zdGFuY2VvZiBndD9uZXcgZ3Qobi5y%0ALG4uZyxuLmIpOm10KCIiK24sZ3QsdXQpOm5ldyBndChuLHQsZSl9ZnVuY3Rpb24g%0AcHQobil7cmV0dXJuIG5ldyBndChuPj4xNiwyNTUmbj4+OCwyNTUmbil9ZnVuY3Rp%0Ab24gdnQobil7cmV0dXJuIHB0KG4pKyIifWZ1bmN0aW9uIGR0KG4pe3JldHVybiAx%0ANj5uPyIwIitNYXRoLm1heCgwLG4pLnRvU3RyaW5nKDE2KTpNYXRoLm1pbigyNTUs%0AbikudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIG10KG4sdCxlKXt2YXIgcix1LGksbz0w%0ALGE9MCxjPTA7aWYocj0vKFthLXpdKylcKCguKilcKS9pLmV4ZWMobikpc3dpdGNo%0AKHU9clsyXS5zcGxpdCgiLCIpLHJbMV0pe2Nhc2UiaHNsIjpyZXR1cm4gZShwYXJz%0AZUZsb2F0KHVbMF0pLHBhcnNlRmxvYXQodVsxXSkvMTAwLHBhcnNlRmxvYXQodVsy%0AXSkvMTAwKTtjYXNlInJnYiI6cmV0dXJuIHQoX3QodVswXSksX3QodVsxXSksX3Qo%0AdVsyXSkpfXJldHVybihpPVphLmdldChuKSk/dChpLnIsaS5nLGkuYik6KG51bGw9%0APW58fCIjIiE9PW4uY2hhckF0KDApfHxpc05hTihpPXBhcnNlSW50KG4uc2xpY2Uo%0AMSksMTYpKXx8KDQ9PT1uLmxlbmd0aD8obz0oMzg0MCZpKT4+NCxvPW8+PjR8byxh%0APTI0MCZpLGE9YT4+NHxhLGM9MTUmaSxjPWM8PDR8Yyk6Nz09PW4ubGVuZ3RoJiYo%0Abz0oMTY3MTE2ODAmaSk+PjE2LGE9KDY1MjgwJmkpPj44LGM9MjU1JmkpKSx0KG8s%0AYSxjKSl9ZnVuY3Rpb24geXQobix0LGUpe3ZhciByLHUsaT1NYXRoLm1pbihuLz0y%0ANTUsdC89MjU1LGUvPTI1NSksbz1NYXRoLm1heChuLHQsZSksYT1vLWksYz0obytp%0AKS8yO3JldHVybiBhPyh1PS41PmM/YS8obytpKTphLygyLW8taSkscj1uPT1vPyh0%0ALWUpL2ErKGU+dD82OjApOnQ9PW8/KGUtbikvYSsyOihuLXQpL2ErNCxyKj02MCk6%0AKHI9MC8wLHU9Yz4wJiYxPmM/MDpyKSxuZXcgcnQocix1LGMpfWZ1bmN0aW9uIHh0%0AKG4sdCxlKXtuPU10KG4pLHQ9TXQodCksZT1NdChlKTt2YXIgcj1mdCgoLjQxMjQ1%0ANjQqbisuMzU3NTc2MSp0Ky4xODA0Mzc1KmUpL0hhKSx1PWZ0KCguMjEyNjcyOSpu%0AKy43MTUxNTIyKnQrLjA3MjE3NSplKS9GYSksaT1mdCgoLjAxOTMzMzkqbisuMTE5%0AMTkyKnQrLjk1MDMwNDEqZSkvT2EpO3JldHVybiBhdCgxMTYqdS0xNiw1MDAqKHIt%0AdSksMjAwKih1LWkpKX1mdW5jdGlvbiBNdChuKXtyZXR1cm4obi89MjU1KTw9LjA0%0AMDQ1P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlv%0AbiBfdChuKXt2YXIgdD1wYXJzZUZsb2F0KG4pO3JldHVybiIlIj09PW4uY2hhckF0%0AKG4ubGVuZ3RoLTEpP01hdGgucm91bmQoMi41NSp0KTp0fWZ1bmN0aW9uIGJ0KG4p%0Ae3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24oKXtyZXR1cm4g%0Abn19ZnVuY3Rpb24gd3Qobil7cmV0dXJuIG59ZnVuY3Rpb24gU3Qobil7cmV0dXJu%0AIGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJm%0AdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lLGU9bnVsbCksa3QodCxlLG4scil9fWZ1%0AbmN0aW9uIGt0KG4sdCxlLHIpe2Z1bmN0aW9uIHUoKXt2YXIgbix0PWMuc3RhdHVz%0AO2lmKCF0JiZBdChjKXx8dD49MjAwJiYzMDA+dHx8MzA0PT09dCl7dHJ5e249ZS5j%0AYWxsKGksYyl9Y2F0Y2gocil7cmV0dXJuIG8uZXJyb3IuY2FsbChpLHIpLHZvaWQg%0AMH1vLmxvYWQuY2FsbChpLG4pfWVsc2Ugby5lcnJvci5jYWxsKGksYyl9dmFyIGk9%0Ae30sbz1Wby5kaXNwYXRjaCgiYmVmb3Jlc2VuZCIsInByb2dyZXNzIiwibG9hZCIs%0AImVycm9yIiksYT17fSxjPW5ldyBYTUxIdHRwUmVxdWVzdCxsPW51bGw7cmV0dXJu%0AIUpvLlhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIGN8fCEvXiho%0AdHRwKHMpPzopP1wvXC8vLnRlc3Qobil8fChjPW5ldyBYRG9tYWluUmVxdWVzdCks%0AIm9ubG9hZCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj11OmMub25yZWFkeXN0YXRl%0AY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJnUoKX0sYy5vbnByb2dy%0AZXNzPWZ1bmN0aW9uKG4pe3ZhciB0PVZvLmV2ZW50O1ZvLmV2ZW50PW47dHJ5e28u%0AcHJvZ3Jlc3MuY2FsbChpLGMpfWZpbmFsbHl7Vm8uZXZlbnQ9dH19LGkuaGVhZGVy%0APWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49KG4rIiIpLnRvTG93ZXJDYXNlKCksYXJn%0AdW1lbnRzLmxlbmd0aDwyP2Fbbl06KG51bGw9PXQ/ZGVsZXRlIGFbbl06YVtuXT10%0AKyIiLGkpfSxpLm1pbWVUeXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu%0AbGVuZ3RoPyh0PW51bGw9PW4/bnVsbDpuKyIiLGkpOnR9LGkucmVzcG9uc2VUeXBl%0APWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4saSk6bH0s%0AaS5yZXNwb25zZT1mdW5jdGlvbihuKXtyZXR1cm4gZT1uLGl9LFsiZ2V0IiwicG9z%0AdCJdLmZvckVhY2goZnVuY3Rpb24obil7aVtuXT1mdW5jdGlvbigpe3JldHVybiBp%0ALnNlbmQuYXBwbHkoaSxbbl0uY29uY2F0KCRvKGFyZ3VtZW50cykpKX19KSxpLnNl%0AbmQ9ZnVuY3Rpb24oZSxyLHUpe2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVu%0AY3Rpb24iPT10eXBlb2YgciYmKHU9cixyPW51bGwpLGMub3BlbihlLG4sITApLG51%0AbGw9PXR8fCJhY2NlcHQiaW4gYXx8KGEuYWNjZXB0PXQrIiwqLyoiKSxjLnNldFJl%0AcXVlc3RIZWFkZXIpZm9yKHZhciBzIGluIGEpYy5zZXRSZXF1ZXN0SGVhZGVyKHMs%0AYVtzXSk7cmV0dXJuIG51bGwhPXQmJmMub3ZlcnJpZGVNaW1lVHlwZSYmYy5vdmVy%0AcmlkZU1pbWVUeXBlKHQpLG51bGwhPWwmJihjLnJlc3BvbnNlVHlwZT1sKSxudWxs%0AIT11JiZpLm9uKCJlcnJvciIsdSkub24oImxvYWQiLGZ1bmN0aW9uKG4pe3UobnVs%0AbCxuKX0pLG8uYmVmb3Jlc2VuZC5jYWxsKGksYyksYy5zZW5kKG51bGw9PXI/bnVs%0AbDpyKSxpfSxpLmFib3J0PWZ1bmN0aW9uKCl7cmV0dXJuIGMuYWJvcnQoKSxpfSxW%0Aby5yZWJpbmQoaSxvLCJvbiIpLG51bGw9PXI/aTppLmdldChFdChyKSl9ZnVuY3Rp%0Ab24gRXQobil7cmV0dXJuIDE9PT1uLmxlbmd0aD9mdW5jdGlvbih0LGUpe24obnVs%0AbD09dD9lOm51bGwpfTpufWZ1bmN0aW9uIEF0KG4pe3ZhciB0PW4ucmVzcG9uc2VU%0AeXBlO3JldHVybiB0JiYidGV4dCIhPT10P24ucmVzcG9uc2U6bi5yZXNwb25zZVRl%0AeHR9ZnVuY3Rpb24gQ3QoKXt2YXIgbj1OdCgpLHQ9enQoKS1uO3Q+MjQ/KGlzRmlu%0AaXRlKHQpJiYoY2xlYXJUaW1lb3V0KEJhKSxCYT1zZXRUaW1lb3V0KEN0LHQpKSwk%0AYT0wKTooJGE9MSxKYShDdCkpfWZ1bmN0aW9uIE50KCl7dmFyIG49RGF0ZS5ub3co%0AKTtmb3IoV2E9VmE7V2E7KW4+PVdhLnQmJihXYS5mPVdhLmMobi1XYS50KSksV2E9%0AV2EubjtyZXR1cm4gbn1mdW5jdGlvbiB6dCgpe2Zvcih2YXIgbix0PVZhLGU9MS8w%0AO3Q7KXQuZj90PW4/bi5uPXQubjpWYT10Lm46KHQudDxlJiYoZT10LnQpLHQ9KG49%0AdCkubik7cmV0dXJuIFhhPW4sZX1mdW5jdGlvbiBMdChuLHQpe3JldHVybiB0LShu%0AP01hdGguY2VpbChNYXRoLmxvZyhuKS9NYXRoLkxOMTApOjEpfWZ1bmN0aW9uIFR0%0AKG4sdCl7dmFyIGU9TWF0aC5wb3coMTAsMyppYSg4LXQpKTtyZXR1cm57c2NhbGU6%0AdD44P2Z1bmN0aW9uKG4pe3JldHVybiBuL2V9OmZ1bmN0aW9uKG4pe3JldHVybiBu%0AKmV9LHN5bWJvbDpufX1mdW5jdGlvbiBxdChuKXt2YXIgdD1uLmRlY2ltYWwsZT1u%0ALnRob3VzYW5kcyxyPW4uZ3JvdXBpbmcsdT1uLmN1cnJlbmN5LGk9cj9mdW5jdGlv%0AbihuKXtmb3IodmFyIHQ9bi5sZW5ndGgsdT1bXSxpPTAsbz1yWzBdO28+MCYmdD4w%0AOyl1LnB1c2gobi5zdWJzdHJpbmcodC09byx0K28pKSxvPXJbaT0oaSsxKSVyLmxl%0Abmd0aF07cmV0dXJuIHUucmV2ZXJzZSgpLmpvaW4oZSl9Ond0O3JldHVybiBmdW5j%0AdGlvbihuKXt2YXIgZT1LYS5leGVjKG4pLHI9ZVsxXXx8IiAiLG89ZVsyXXx8Ij4i%0ALGE9ZVszXXx8IiIsYz1lWzRdfHwiIixsPWVbNV0scz0rZVs2XSxmPWVbN10saD1l%0AWzhdLGc9ZVs5XSxwPTEsdj0iIixkPSIiLG09ITE7c3dpdGNoKGgmJihoPStoLnN1%0AYnN0cmluZygxKSksKGx8fCIwIj09PXImJiI9Ij09PW8pJiYobD1yPSIwIixvPSI9%0AIixmJiYocy09TWF0aC5mbG9vcigocy0xKS80KSkpLGcpe2Nhc2UibiI6Zj0hMCxn%0APSJnIjticmVhaztjYXNlIiUiOnA9MTAwLGQ9IiUiLGc9ImYiO2JyZWFrO2Nhc2Ui%0AcCI6cD0xMDAsZD0iJSIsZz0iciI7YnJlYWs7Y2FzZSJiIjpjYXNlIm8iOmNhc2Ui%0AeCI6Y2FzZSJYIjoiIyI9PT1jJiYodj0iMCIrZy50b0xvd2VyQ2FzZSgpKTtjYXNl%0AImMiOmNhc2UiZCI6bT0hMCxoPTA7YnJlYWs7Y2FzZSJzIjpwPS0xLGc9InIifSIk%0AIj09PWMmJih2PXVbMF0sZD11WzFdKSwiciIhPWd8fGh8fChnPSJnIiksbnVsbCE9%0AaCYmKCJnIj09Zz9oPU1hdGgubWF4KDEsTWF0aC5taW4oMjEsaCkpOigiZSI9PWd8%0AfCJmIj09ZykmJihoPU1hdGgubWF4KDAsTWF0aC5taW4oMjAsaCkpKSksZz1RYS5n%0AZXQoZyl8fFJ0O3ZhciB5PWwmJmY7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlPWQ7%0AaWYobSYmbiUxKXJldHVybiIiO3ZhciB1PTA+bnx8MD09PW4mJjA+MS9uPyhuPS1u%0ALCItIik6YTtpZigwPnApe3ZhciBjPVZvLmZvcm1hdFByZWZpeChuLGgpO249Yy5z%0AY2FsZShuKSxlPWMuc3ltYm9sK2R9ZWxzZSBuKj1wO249ZyhuLGgpO3ZhciB4PW4u%0AbGFzdEluZGV4T2YoIi4iKSxNPTA+eD9uOm4uc3Vic3RyaW5nKDAseCksXz0wPng/%0AIiI6dCtuLnN1YnN0cmluZyh4KzEpOyFsJiZmJiYoTT1pKE0pKTt2YXIgYj12Lmxl%0Abmd0aCtNLmxlbmd0aCtfLmxlbmd0aCsoeT8wOnUubGVuZ3RoKSx3PXM+Yj9uZXcg%0AQXJyYXkoYj1zLWIrMSkuam9pbihyKToiIjtyZXR1cm4geSYmKE09aSh3K00pKSx1%0AKz12LG49TStfLCgiPCI9PT1vP3Urbit3OiI+Ij09PW8/dyt1K246Il4iPT09bz93%0ALnN1YnN0cmluZygwLGI+Pj0xKSt1K24rdy5zdWJzdHJpbmcoYik6dSsoeT9uOncr%0AbikpK2V9fX1mdW5jdGlvbiBSdChuKXtyZXR1cm4gbisiIn1mdW5jdGlvbiBEdCgp%0Ae3RoaXMuXz1uZXcgRGF0ZShhcmd1bWVudHMubGVuZ3RoPjE/RGF0ZS5VVEMuYXBw%0AbHkodGhpcyxhcmd1bWVudHMpOmFyZ3VtZW50c1swXSl9ZnVuY3Rpb24gUHQobix0%0ALGUpe2Z1bmN0aW9uIHIodCl7dmFyIGU9bih0KSxyPWkoZSwxKTtyZXR1cm4gci10%0APnQtZT9lOnJ9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdChlPW4obmV3IHRjKGUtMSkp%0ALDEpLGV9ZnVuY3Rpb24gaShuLGUpe3JldHVybiB0KG49bmV3IHRjKCtuKSxlKSxu%0AfWZ1bmN0aW9uIG8obixyLGkpe3ZhciBvPXUobiksYT1bXTtpZihpPjEpZm9yKDty%0APm87KWUobyklaXx8YS5wdXNoKG5ldyBEYXRlKCtvKSksdChvLDEpO2Vsc2UgZm9y%0AKDtyPm87KWEucHVzaChuZXcgRGF0ZSgrbykpLHQobywxKTtyZXR1cm4gYX1mdW5j%0AdGlvbiBhKG4sdCxlKXt0cnl7dGM9RHQ7dmFyIHI9bmV3IER0O3JldHVybiByLl89%0AbixvKHIsdCxlKX1maW5hbGx5e3RjPURhdGV9fW4uZmxvb3I9bixuLnJvdW5kPXIs%0Abi5jZWlsPXUsbi5vZmZzZXQ9aSxuLnJhbmdlPW87dmFyIGM9bi51dGM9VXQobik7%0AcmV0dXJuIGMuZmxvb3I9YyxjLnJvdW5kPVV0KHIpLGMuY2VpbD1VdCh1KSxjLm9m%0AZnNldD1VdChpKSxjLnJhbmdlPWEsbn1mdW5jdGlvbiBVdChuKXtyZXR1cm4gZnVu%0AY3Rpb24odCxlKXt0cnl7dGM9RHQ7dmFyIHI9bmV3IER0O3JldHVybiByLl89dCxu%0AKHIsZSkuX31maW5hbGx5e3RjPURhdGV9fX1mdW5jdGlvbiBqdChuKXtmdW5jdGlv%0AbiB0KG4pe2Z1bmN0aW9uIHQodCl7Zm9yKHZhciBlLHUsaSxvPVtdLGE9LTEsYz0w%0AOysrYTxyOykzNz09PW4uY2hhckNvZGVBdChhKSYmKG8ucHVzaChuLnNsaWNlKGMs%0AYSkpLG51bGwhPSh1PXJjW2U9bi5jaGFyQXQoKythKV0pJiYoZT1uLmNoYXJBdCgr%0AK2EpKSwoaT1DW2VdKSYmKGU9aSh0LG51bGw9PXU/ImUiPT09ZT8iICI6IjAiOnUp%0AKSxvLnB1c2goZSksYz1hKzEpO3JldHVybiBvLnB1c2gobi5zbGljZShjLGEpKSxv%0ALmpvaW4oIiIpfXZhciByPW4ubGVuZ3RoO3JldHVybiB0LnBhcnNlPWZ1bmN0aW9u%0AKHQpe3ZhciByPXt5OjE5MDAsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjAsWjpudWxs%0AfSx1PWUocixuLHQsMCk7aWYodSE9dC5sZW5ndGgpcmV0dXJuIG51bGw7InAiaW4g%0AciYmKHIuSD1yLkglMTIrMTIqci5wKTt2YXIgaT1udWxsIT1yLlomJnRjIT09RHQs%0Abz1uZXcoaT9EdDp0Yyk7cmV0dXJuImoiaW4gcj9vLnNldEZ1bGxZZWFyKHIueSww%0ALHIuaik6InciaW4gciYmKCJXImluIHJ8fCJVImluIHIpPyhvLnNldEZ1bGxZZWFy%0AKHIueSwwLDEpLG8uc2V0RnVsbFllYXIoci55LDAsIlciaW4gcj8oci53KzYpJTcr%0ANypyLlctKG8uZ2V0RGF5KCkrNSklNzpyLncrNypyLlUtKG8uZ2V0RGF5KCkrNikl%0ANykpOm8uc2V0RnVsbFllYXIoci55LHIubSxyLmQpLG8uc2V0SG91cnMoci5IKygw%0AfHIuWi8xMDApLHIuTStyLlolMTAwLHIuUyxyLkwpLGk/by5fOm99LHQudG9TdHJp%0Abmc9ZnVuY3Rpb24oKXtyZXR1cm4gbn0sdH1mdW5jdGlvbiBlKG4sdCxlLHIpe2Zv%0Acih2YXIgdSxpLG8sYT0wLGM9dC5sZW5ndGgsbD1lLmxlbmd0aDtjPmE7KXtpZihy%0APj1sKXJldHVybi0xO2lmKHU9dC5jaGFyQ29kZUF0KGErKyksMzc9PT11KXtpZihv%0APXQuY2hhckF0KGErKyksaT1OW28gaW4gcmM/dC5jaGFyQXQoYSsrKTpvXSwhaXx8%0AKHI9aShuLGUscikpPDApcmV0dXJuLTF9ZWxzZSBpZih1IT1lLmNoYXJDb2RlQXQo%0AcisrKSlyZXR1cm4tMX1yZXR1cm4gcn1mdW5jdGlvbiByKG4sdCxlKXtiLmxhc3RJ%0AbmRleD0wO3ZhciByPWIuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gcj8obi53PXcu%0AZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rp%0Ab24gdShuLHQsZSl7TS5sYXN0SW5kZXg9MDt2YXIgcj1NLmV4ZWModC5zbGljZShl%0AKSk7cmV0dXJuIHI/KG4udz1fLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclsw%0AXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGkobix0LGUpe0UubGFzdEluZGV4PTA7dmFy%0AIHI9RS5leGVjKHQuc2xpY2UoZSkpO3JldHVybiByPyhuLm09QS5nZXQoclswXS50%0Ab0xvd2VyQ2FzZSgpKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBvKG4sdCxl%0AKXtTLmxhc3RJbmRleD0wO3ZhciByPVMuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4g%0Acj8obi5tPWsuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6%0ALTF9ZnVuY3Rpb24gYShuLHQscil7cmV0dXJuIGUobixDLmMudG9TdHJpbmcoKSx0%0ALHIpfWZ1bmN0aW9uIGMobix0LHIpe3JldHVybiBlKG4sQy54LnRvU3RyaW5nKCks%0AdCxyKX1mdW5jdGlvbiBsKG4sdCxyKXtyZXR1cm4gZShuLEMuWC50b1N0cmluZygp%0ALHQscil9ZnVuY3Rpb24gcyhuLHQsZSl7dmFyIHI9eC5nZXQodC5zbGljZShlLGUr%0APTIpLnRvTG93ZXJDYXNlKCkpO3JldHVybiBudWxsPT1yPy0xOihuLnA9cixlKX12%0AYXIgZj1uLmRhdGVUaW1lLGg9bi5kYXRlLGc9bi50aW1lLHA9bi5wZXJpb2RzLHY9%0Abi5kYXlzLGQ9bi5zaG9ydERheXMsbT1uLm1vbnRocyx5PW4uc2hvcnRNb250aHM7%0AdC51dGM9ZnVuY3Rpb24obil7ZnVuY3Rpb24gZShuKXt0cnl7dGM9RHQ7dmFyIHQ9%0AbmV3IHRjO3JldHVybiB0Ll89bixyKHQpfWZpbmFsbHl7dGM9RGF0ZX19dmFyIHI9%0AdChuKTtyZXR1cm4gZS5wYXJzZT1mdW5jdGlvbihuKXt0cnl7dGM9RHQ7dmFyIHQ9%0Aci5wYXJzZShuKTtyZXR1cm4gdCYmdC5ffWZpbmFsbHl7dGM9RGF0ZX19LGUudG9T%0AdHJpbmc9ci50b1N0cmluZyxlfSx0Lm11bHRpPXQudXRjLm11bHRpPXVlO3ZhciB4%0APVZvLm1hcCgpLE09RnQodiksXz1PdCh2KSxiPUZ0KGQpLHc9T3QoZCksUz1GdCht%0AKSxrPU90KG0pLEU9RnQoeSksQT1PdCh5KTtwLmZvckVhY2goZnVuY3Rpb24obix0%0AKXt4LnNldChuLnRvTG93ZXJDYXNlKCksdCl9KTt2YXIgQz17YTpmdW5jdGlvbihu%0AKXtyZXR1cm4gZFtuLmdldERheSgpXX0sQTpmdW5jdGlvbihuKXtyZXR1cm4gdltu%0ALmdldERheSgpXX0sYjpmdW5jdGlvbihuKXtyZXR1cm4geVtuLmdldE1vbnRoKCld%0AfSxCOmZ1bmN0aW9uKG4pe3JldHVybiBtW24uZ2V0TW9udGgoKV19LGM6dChmKSxk%0AOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEh0KG4uZ2V0RGF0ZSgpLHQsMil9LGU6ZnVu%0AY3Rpb24obix0KXtyZXR1cm4gSHQobi5nZXREYXRlKCksdCwyKX0sSDpmdW5jdGlv%0AbihuLHQpe3JldHVybiBIdChuLmdldEhvdXJzKCksdCwyKX0sSTpmdW5jdGlvbihu%0ALHQpe3JldHVybiBIdChuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9LGo6ZnVuY3Rp%0Ab24obix0KXtyZXR1cm4gSHQoMStuYy5kYXlPZlllYXIobiksdCwzKX0sTDpmdW5j%0AdGlvbihuLHQpe3JldHVybiBIdChuLmdldE1pbGxpc2Vjb25kcygpLHQsMyl9LG06%0AZnVuY3Rpb24obix0KXtyZXR1cm4gSHQobi5nZXRNb250aCgpKzEsdCwyKX0sTTpm%0AdW5jdGlvbihuLHQpe3JldHVybiBIdChuLmdldE1pbnV0ZXMoKSx0LDIpfSxwOmZ1%0AbmN0aW9uKG4pe3JldHVybiBwWysobi5nZXRIb3VycygpPj0xMildfSxTOmZ1bmN0%0AaW9uKG4sdCl7cmV0dXJuIEh0KG4uZ2V0U2Vjb25kcygpLHQsMil9LFU6ZnVuY3Rp%0Ab24obix0KXtyZXR1cm4gSHQobmMuc3VuZGF5T2ZZZWFyKG4pLHQsMil9LHc6ZnVu%0AY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF5KCl9LFc6ZnVuY3Rpb24obix0KXtyZXR1%0Acm4gSHQobmMubW9uZGF5T2ZZZWFyKG4pLHQsMil9LHg6dChoKSxYOnQoZykseTpm%0AdW5jdGlvbihuLHQpe3JldHVybiBIdChuLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9%0ALFk6ZnVuY3Rpb24obix0KXtyZXR1cm4gSHQobi5nZXRGdWxsWWVhcigpJTFlNCx0%0ALDQpfSxaOmVlLCIlIjpmdW5jdGlvbigpe3JldHVybiIlIn19LE49e2E6cixBOnUs%0AYjppLEI6byxjOmEsZDpKdCxlOkp0LEg6S3QsSTpLdCxqOkd0LEw6dGUsbTpXdCxN%0AOlF0LHA6cyxTOm5lLFU6SXQsdzpZdCxXOlp0LHg6YyxYOmwseTpYdCxZOlZ0LFo6%0AJHQsIiUiOnJlfTtyZXR1cm4gdH1mdW5jdGlvbiBIdChuLHQsZSl7dmFyIHI9MD5u%0APyItIjoiIix1PShyPy1uOm4pKyIiLGk9dS5sZW5ndGg7cmV0dXJuIHIrKGU+aT9u%0AZXcgQXJyYXkoZS1pKzEpLmpvaW4odCkrdTp1KX1mdW5jdGlvbiBGdChuKXtyZXR1%0Acm4gbmV3IFJlZ0V4cCgiXig/OiIrbi5tYXAoVm8ucmVxdW90ZSkuam9pbigifCIp%0AKyIpIiwiaSIpfWZ1bmN0aW9uIE90KG4pe2Zvcih2YXIgdD1uZXcgbyxlPS0xLHI9%0Abi5sZW5ndGg7KytlPHI7KXQuc2V0KG5bZV0udG9Mb3dlckNhc2UoKSxlKTtyZXR1%0Acm4gdH1mdW5jdGlvbiBZdChuLHQsZSl7dWMubGFzdEluZGV4PTA7dmFyIHI9dWMu%0AZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIHI/KG4udz0rclswXSxlK3JbMF0u%0AbGVuZ3RoKTotMX1mdW5jdGlvbiBJdChuLHQsZSl7dWMubGFzdEluZGV4PTA7dmFy%0AIHI9dWMuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gcj8obi5VPStyWzBdLGUrclsw%0AXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFp0KG4sdCxlKXt1Yy5sYXN0SW5kZXg9MDt2%0AYXIgcj11Yy5leGVjKHQuc2xpY2UoZSkpO3JldHVybiByPyhuLlc9K3JbMF0sZSty%0AWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVnQobix0LGUpe3VjLmxhc3RJbmRleD0w%0AO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiByPyhuLnk9K3Jb%0AMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWHQobix0LGUpe3VjLmxhc3RJ%0AbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiByPyhu%0ALnk9QnQoK3JbMF0pLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICR0KG4sdCxl%0AKXtyZXR1cm4vXlsrLV1cZHs0fSQvLnRlc3QodD10LnNsaWNlKGUsZSs1KSk/KG4u%0AWj0tdCxlKzUpOi0xfWZ1bmN0aW9uIEJ0KG4pe3JldHVybiBuKyhuPjY4PzE5MDA6%0AMmUzKX1mdW5jdGlvbiBXdChuLHQsZSl7dWMubGFzdEluZGV4PTA7dmFyIHI9dWMu%0AZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KG4ubT1yWzBdLTEsZStyWzBd%0ALmxlbmd0aCk6LTF9ZnVuY3Rpb24gSnQobix0LGUpe3VjLmxhc3RJbmRleD0wO3Zh%0AciByPXVjLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiByPyhuLmQ9K3JbMF0s%0AZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gR3Qobix0LGUpe3VjLmxhc3RJbmRl%0AeD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrMykpO3JldHVybiByPyhuLmo9%0AK3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS3Qobix0LGUpe3VjLmxh%0Ac3RJbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBy%0APyhuLkg9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUXQobix0LGUp%0Ae3VjLmxhc3RJbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrMikpO3Jl%0AdHVybiByPyhuLk09K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbmUo%0Abix0LGUpe3VjLmxhc3RJbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUr%0AMikpO3JldHVybiByPyhuLlM9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rp%0Ab24gdGUobix0LGUpe3VjLmxhc3RJbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGlj%0AZShlLGUrMykpO3JldHVybiByPyhuLkw9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9%0AZnVuY3Rpb24gZWUobil7dmFyIHQ9bi5nZXRUaW1lem9uZU9mZnNldCgpLGU9dD4w%0APyItIjoiKyIscj0wfGlhKHQpLzYwLHU9aWEodCklNjA7cmV0dXJuIGUrSHQociwi%0AMCIsMikrSHQodSwiMCIsMil9ZnVuY3Rpb24gcmUobix0LGUpe2ljLmxhc3RJbmRl%0AeD0wO3ZhciByPWljLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiByP2Urclsw%0AXS5sZW5ndGg6LTF9ZnVuY3Rpb24gdWUobil7Zm9yKHZhciB0PW4ubGVuZ3RoLGU9%0ALTE7KytlPHQ7KW5bZV1bMF09dGhpcyhuW2VdWzBdKTtyZXR1cm4gZnVuY3Rpb24o%0AdCl7Zm9yKHZhciBlPTAscj1uW2VdOyFyWzFdKHQpOylyPW5bKytlXTtyZXR1cm4g%0AclswXSh0KX19ZnVuY3Rpb24gaWUoKXt9ZnVuY3Rpb24gb2Uobix0LGUpe3ZhciBy%0APWUucz1uK3QsdT1yLW4saT1yLXU7ZS50PW4taSsodC11KX1mdW5jdGlvbiBhZShu%0ALHQpe24mJmxjLmhhc093blByb3BlcnR5KG4udHlwZSkmJmxjW24udHlwZV0obix0%0AKX1mdW5jdGlvbiBjZShuLHQsZSl7dmFyIHIsdT0tMSxpPW4ubGVuZ3RoLWU7Zm9y%0AKHQubGluZVN0YXJ0KCk7Kyt1PGk7KXI9blt1XSx0LnBvaW50KHJbMF0sclsxXSxy%0AWzJdKTt0LmxpbmVFbmQoKX1mdW5jdGlvbiBsZShuLHQpe3ZhciBlPS0xLHI9bi5s%0AZW5ndGg7Zm9yKHQucG9seWdvblN0YXJ0KCk7KytlPHI7KWNlKG5bZV0sdCwxKTt0%0ALnBvbHlnb25FbmQoKX1mdW5jdGlvbiBzZSgpe2Z1bmN0aW9uIG4obix0KXtuKj1D%0AYSx0PXQqQ2EvMit3YS80O3ZhciBlPW4tcixvPWU+PTA/MTotMSxhPW8qZSxjPU1h%0AdGguY29zKHQpLGw9TWF0aC5zaW4odCkscz1pKmwsZj11KmMrcypNYXRoLmNvcyhh%0AKSxoPXMqbypNYXRoLnNpbihhKTtmYy5hZGQoTWF0aC5hdGFuMihoLGYpKSxyPW4s%0AdT1jLGk9bH12YXIgdCxlLHIsdSxpO2hjLnBvaW50PWZ1bmN0aW9uKG8sYSl7aGMu%0AcG9pbnQ9bixyPSh0PW8pKkNhLHU9TWF0aC5jb3MoYT0oZT1hKSpDYS8yK3dhLzQp%0ALGk9TWF0aC5zaW4oYSl9LGhjLmxpbmVFbmQ9ZnVuY3Rpb24oKXtuKHQsZSl9fWZ1%0AbmN0aW9uIGZlKG4pe3ZhciB0PW5bMF0sZT1uWzFdLHI9TWF0aC5jb3MoZSk7cmV0%0AdXJuW3IqTWF0aC5jb3ModCkscipNYXRoLnNpbih0KSxNYXRoLnNpbihlKV19ZnVu%0AY3Rpb24gaGUobix0KXtyZXR1cm4gblswXSp0WzBdK25bMV0qdFsxXStuWzJdKnRb%0AMl19ZnVuY3Rpb24gZ2Uobix0KXtyZXR1cm5bblsxXSp0WzJdLW5bMl0qdFsxXSxu%0AWzJdKnRbMF0tblswXSp0WzJdLG5bMF0qdFsxXS1uWzFdKnRbMF1dfWZ1bmN0aW9u%0AIHBlKG4sdCl7blswXSs9dFswXSxuWzFdKz10WzFdLG5bMl0rPXRbMl19ZnVuY3Rp%0Ab24gdmUobix0KXtyZXR1cm5bblswXSp0LG5bMV0qdCxuWzJdKnRdfWZ1bmN0aW9u%0AIGRlKG4pe3ZhciB0PU1hdGguc3FydChuWzBdKm5bMF0rblsxXSpuWzFdK25bMl0q%0AblsyXSk7blswXS89dCxuWzFdLz10LG5bMl0vPXR9ZnVuY3Rpb24gbWUobil7cmV0%0AdXJuW01hdGguYXRhbjIoblsxXSxuWzBdKSxHKG5bMl0pXX1mdW5jdGlvbiB5ZShu%0ALHQpe3JldHVybiBpYShuWzBdLXRbMF0pPEVhJiZpYShuWzFdLXRbMV0pPEVhfWZ1%0AbmN0aW9uIHhlKG4sdCl7bio9Q2E7dmFyIGU9TWF0aC5jb3ModCo9Q2EpO01lKGUq%0ATWF0aC5jb3MobiksZSpNYXRoLnNpbihuKSxNYXRoLnNpbih0KSl9ZnVuY3Rpb24g%0ATWUobix0LGUpeysrZ2MsdmMrPShuLXZjKS9nYyxkYys9KHQtZGMpL2djLG1jKz0o%0AZS1tYykvZ2N9ZnVuY3Rpb24gX2UoKXtmdW5jdGlvbiBuKG4sdSl7bio9Q2E7dmFy%0AIGk9TWF0aC5jb3ModSo9Q2EpLG89aSpNYXRoLmNvcyhuKSxhPWkqTWF0aC5zaW4o%0AbiksYz1NYXRoLnNpbih1KSxsPU1hdGguYXRhbjIoTWF0aC5zcXJ0KChsPWUqYy1y%0AKmEpKmwrKGw9cipvLXQqYykqbCsobD10KmEtZSpvKSpsKSx0Km8rZSphK3IqYyk7%0AcGMrPWwseWMrPWwqKHQrKHQ9bykpLHhjKz1sKihlKyhlPWEpKSxNYys9bCoociso%0Acj1jKSksTWUodCxlLHIpfXZhciB0LGUscjtTYy5wb2ludD1mdW5jdGlvbih1LGkp%0Ae3UqPUNhO3ZhciBvPU1hdGguY29zKGkqPUNhKTt0PW8qTWF0aC5jb3ModSksZT1v%0AKk1hdGguc2luKHUpLHI9TWF0aC5zaW4oaSksU2MucG9pbnQ9bixNZSh0LGUscil9%0AfWZ1bmN0aW9uIGJlKCl7U2MucG9pbnQ9eGV9ZnVuY3Rpb24gd2UoKXtmdW5jdGlv%0AbiBuKG4sdCl7bio9Q2E7dmFyIGU9TWF0aC5jb3ModCo9Q2EpLG89ZSpNYXRoLmNv%0AcyhuKSxhPWUqTWF0aC5zaW4obiksYz1NYXRoLnNpbih0KSxsPXUqYy1pKmEscz1p%0AKm8tcipjLGY9ciphLXUqbyxoPU1hdGguc3FydChsKmwrcypzK2YqZiksZz1yKm8r%0AdSphK2kqYyxwPWgmJi1KKGcpL2gsdj1NYXRoLmF0YW4yKGgsZyk7X2MrPXAqbCxi%0AYys9cCpzLHdjKz1wKmYscGMrPXYseWMrPXYqKHIrKHI9bykpLHhjKz12Kih1Kyh1%0APWEpKSxNYys9diooaSsoaT1jKSksTWUocix1LGkpfXZhciB0LGUscix1LGk7U2Mu%0AcG9pbnQ9ZnVuY3Rpb24obyxhKXt0PW8sZT1hLFNjLnBvaW50PW4sbyo9Q2E7dmFy%0AIGM9TWF0aC5jb3MoYSo9Q2EpO3I9YypNYXRoLmNvcyhvKSx1PWMqTWF0aC5zaW4o%0AbyksaT1NYXRoLnNpbihhKSxNZShyLHUsaSl9LFNjLmxpbmVFbmQ9ZnVuY3Rpb24o%0AKXtuKHQsZSksU2MubGluZUVuZD1iZSxTYy5wb2ludD14ZX19ZnVuY3Rpb24gU2Uo%0AKXtyZXR1cm4hMH1mdW5jdGlvbiBrZShuLHQsZSxyLHUpe3ZhciBpPVtdLG89W107%0AaWYobi5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCEoKHQ9bi5sZW5ndGgtMSk8PTAp%0AKXt2YXIgdCxlPW5bMF0scj1uW3RdO2lmKHllKGUscikpe3UubGluZVN0YXJ0KCk7%0AZm9yKHZhciBhPTA7dD5hOysrYSl1LnBvaW50KChlPW5bYV0pWzBdLGVbMV0pO3Jl%0AdHVybiB1LmxpbmVFbmQoKSx2b2lkIDB9dmFyIGM9bmV3IEFlKGUsbixudWxsLCEw%0AKSxsPW5ldyBBZShlLG51bGwsYywhMSk7Yy5vPWwsaS5wdXNoKGMpLG8ucHVzaChs%0AKSxjPW5ldyBBZShyLG4sbnVsbCwhMSksbD1uZXcgQWUocixudWxsLGMsITApLGMu%0Abz1sLGkucHVzaChjKSxvLnB1c2gobCl9fSksby5zb3J0KHQpLEVlKGkpLEVlKG8p%0ALGkubGVuZ3RoKXtmb3IodmFyIGE9MCxjPWUsbD1vLmxlbmd0aDtsPmE7KythKW9b%0AYV0uZT1jPSFjO2Zvcih2YXIgcyxmLGg9aVswXTs7KXtmb3IodmFyIGc9aCxwPSEw%0AO2cudjspaWYoKGc9Zy5uKT09PWgpcmV0dXJuO3M9Zy56LHUubGluZVN0YXJ0KCk7%0AZG97aWYoZy52PWcuby52PSEwLGcuZSl7aWYocClmb3IodmFyIGE9MCxsPXMubGVu%0AZ3RoO2w+YTsrK2EpdS5wb2ludCgoZj1zW2FdKVswXSxmWzFdKTtlbHNlIHIoZy54%0ALGcubi54LDEsdSk7Zz1nLm59ZWxzZXtpZihwKXtzPWcucC56O2Zvcih2YXIgYT1z%0ALmxlbmd0aC0xO2E+PTA7LS1hKXUucG9pbnQoKGY9c1thXSlbMF0sZlsxXSl9ZWxz%0AZSByKGcueCxnLnAueCwtMSx1KTtnPWcucH1nPWcubyxzPWcueixwPSFwfXdoaWxl%0AKCFnLnYpO3UubGluZUVuZCgpfX19ZnVuY3Rpb24gRWUobil7aWYodD1uLmxlbmd0%0AaCl7Zm9yKHZhciB0LGUscj0wLHU9blswXTsrK3I8dDspdS5uPWU9bltyXSxlLnA9%0AdSx1PWU7dS5uPWU9blswXSxlLnA9dX19ZnVuY3Rpb24gQWUobix0LGUscil7dGhp%0Acy54PW4sdGhpcy56PXQsdGhpcy5vPWUsdGhpcy5lPXIsdGhpcy52PSExLHRoaXMu%0Abj10aGlzLnA9bnVsbH1mdW5jdGlvbiBDZShuLHQsZSxyKXtyZXR1cm4gZnVuY3Rp%0Ab24odSxpKXtmdW5jdGlvbiBvKHQsZSl7dmFyIHI9dSh0LGUpO24odD1yWzBdLGU9%0AclsxXSkmJmkucG9pbnQodCxlKX1mdW5jdGlvbiBhKG4sdCl7dmFyIGU9dShuLHQp%0AO2QucG9pbnQoZVswXSxlWzFdKX1mdW5jdGlvbiBjKCl7eS5wb2ludD1hLGQubGlu%0AZVN0YXJ0KCl9ZnVuY3Rpb24gbCgpe3kucG9pbnQ9byxkLmxpbmVFbmQoKX1mdW5j%0AdGlvbiBzKG4sdCl7di5wdXNoKFtuLHRdKTt2YXIgZT11KG4sdCk7TS5wb2ludChl%0AWzBdLGVbMV0pfWZ1bmN0aW9uIGYoKXtNLmxpbmVTdGFydCgpLHY9W119ZnVuY3Rp%0Ab24gaCgpe3ModlswXVswXSx2WzBdWzFdKSxNLmxpbmVFbmQoKTt2YXIgbix0PU0u%0AY2xlYW4oKSxlPXguYnVmZmVyKCkscj1lLmxlbmd0aDtpZih2LnBvcCgpLHAucHVz%0AaCh2KSx2PW51bGwscilpZigxJnQpe249ZVswXTt2YXIgdSxyPW4ubGVuZ3RoLTEs%0Abz0tMTtpZihyPjApe2ZvcihffHwoaS5wb2x5Z29uU3RhcnQoKSxfPSEwKSxpLmxp%0AbmVTdGFydCgpOysrbzxyOylpLnBvaW50KCh1PW5bb10pWzBdLHVbMV0pO2kubGlu%0AZUVuZCgpfX1lbHNlIHI+MSYmMiZ0JiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5z%0AaGlmdCgpKSksZy5wdXNoKGUuZmlsdGVyKE5lKSl9dmFyIGcscCx2LGQ9dChpKSxt%0APXUuaW52ZXJ0KHJbMF0sclsxXSkseT17cG9pbnQ6byxsaW5lU3RhcnQ6YyxsaW5l%0ARW5kOmwscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eS5wb2ludD1zLHkubGluZVN0%0AYXJ0PWYseS5saW5lRW5kPWgsZz1bXSxwPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9u%0AKCl7eS5wb2ludD1vLHkubGluZVN0YXJ0PWMseS5saW5lRW5kPWwsZz1Wby5tZXJn%0AZShnKTt2YXIgbj1EZShtLHApO2cubGVuZ3RoPyhffHwoaS5wb2x5Z29uU3RhcnQo%0AKSxfPSEwKSxrZShnLExlLG4sZSxpKSk6biYmKF98fChpLnBvbHlnb25TdGFydCgp%0ALF89ITApLGkubGluZVN0YXJ0KCksZShudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQo%0AKSksXyYmKGkucG9seWdvbkVuZCgpLF89ITEpLGc9cD1udWxsfSxzcGhlcmU6ZnVu%0AY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCksZShudWxsLG51%0AbGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19LHg9emUoKSxNPXQo%0AeCksXz0hMTtyZXR1cm4geX19ZnVuY3Rpb24gTmUobil7cmV0dXJuIG4ubGVuZ3Ro%0APjF9ZnVuY3Rpb24gemUoKXt2YXIgbix0PVtdO3JldHVybntsaW5lU3RhcnQ6ZnVu%0AY3Rpb24oKXt0LnB1c2gobj1bXSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7bi5wdXNo%0AKFt0LGVdKX0sbGluZUVuZDp2LGJ1ZmZlcjpmdW5jdGlvbigpe3ZhciBlPXQ7cmV0%0AdXJuIHQ9W10sbj1udWxsLGV9LHJlam9pbjpmdW5jdGlvbigpe3QubGVuZ3RoPjEm%0AJnQucHVzaCh0LnBvcCgpLmNvbmNhdCh0LnNoaWZ0KCkpKX19fWZ1bmN0aW9uIExl%0AKG4sdCl7cmV0dXJuKChuPW4ueClbMF08MD9uWzFdLWthLUVhOmthLW5bMV0pLSgo%0AdD10LngpWzBdPDA/dFsxXS1rYS1FYTprYS10WzFdKX1mdW5jdGlvbiBUZShuKXt2%0AYXIgdCxlPTAvMCxyPTAvMCx1PTAvMDtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9u%0AKCl7bi5saW5lU3RhcnQoKSx0PTF9LHBvaW50OmZ1bmN0aW9uKGksbyl7dmFyIGE9%0AaT4wP3dhOi13YSxjPWlhKGktZSk7aWEoYy13YSk8RWE/KG4ucG9pbnQoZSxyPShy%0AK28pLzI+MD9rYTota2EpLG4ucG9pbnQodSxyKSxuLmxpbmVFbmQoKSxuLmxpbmVT%0AdGFydCgpLG4ucG9pbnQoYSxyKSxuLnBvaW50KGksciksdD0wKTp1IT09YSYmYz49%0Ad2EmJihpYShlLXUpPEVhJiYoZS09dSpFYSksaWEoaS1hKTxFYSYmKGktPWEqRWEp%0ALHI9cWUoZSxyLGksbyksbi5wb2ludCh1LHIpLG4ubGluZUVuZCgpLG4ubGluZVN0%0AYXJ0KCksbi5wb2ludChhLHIpLHQ9MCksbi5wb2ludChlPWkscj1vKSx1PWF9LGxp%0AbmVFbmQ6ZnVuY3Rpb24oKXtuLmxpbmVFbmQoKSxlPXI9MC8wfSxjbGVhbjpmdW5j%0AdGlvbigpe3JldHVybiAyLXR9fX1mdW5jdGlvbiBxZShuLHQsZSxyKXt2YXIgdSxp%0ALG89TWF0aC5zaW4obi1lKTtyZXR1cm4gaWEobyk+RWE/TWF0aC5hdGFuKChNYXRo%0ALnNpbih0KSooaT1NYXRoLmNvcyhyKSkqTWF0aC5zaW4oZSktTWF0aC5zaW4ocikq%0AKHU9TWF0aC5jb3ModCkpKk1hdGguc2luKG4pKS8odSppKm8pKToodCtyKS8yfWZ1%0AbmN0aW9uIFJlKG4sdCxlLHIpe3ZhciB1O2lmKG51bGw9PW4pdT1lKmthLHIucG9p%0AbnQoLXdhLHUpLHIucG9pbnQoMCx1KSxyLnBvaW50KHdhLHUpLHIucG9pbnQod2Es%0AMCksci5wb2ludCh3YSwtdSksci5wb2ludCgwLC11KSxyLnBvaW50KC13YSwtdSks%0Aci5wb2ludCgtd2EsMCksci5wb2ludCgtd2EsdSk7ZWxzZSBpZihpYShuWzBdLXRb%0AMF0pPkVhKXt2YXIgaT1uWzBdPHRbMF0/d2E6LXdhO3U9ZSppLzIsci5wb2ludCgt%0AaSx1KSxyLnBvaW50KDAsdSksci5wb2ludChpLHUpfWVsc2Ugci5wb2ludCh0WzBd%0ALHRbMV0pfWZ1bmN0aW9uIERlKG4sdCl7dmFyIGU9blswXSxyPW5bMV0sdT1bTWF0%0AaC5zaW4oZSksLU1hdGguY29zKGUpLDBdLGk9MCxvPTA7ZmMucmVzZXQoKTtmb3Io%0AdmFyIGE9MCxjPXQubGVuZ3RoO2M+YTsrK2Epe3ZhciBsPXRbYV0scz1sLmxlbmd0%0AaDtpZihzKWZvcih2YXIgZj1sWzBdLGg9ZlswXSxnPWZbMV0vMit3YS80LHA9TWF0%0AaC5zaW4oZyksdj1NYXRoLmNvcyhnKSxkPTE7Oyl7ZD09PXMmJihkPTApLG49bFtk%0AXTt2YXIgbT1uWzBdLHk9blsxXS8yK3dhLzQseD1NYXRoLnNpbih5KSxNPU1hdGgu%0AY29zKHkpLF89bS1oLGI9Xz49MD8xOi0xLHc9YipfLFM9dz53YSxrPXAqeDtpZihm%0AYy5hZGQoTWF0aC5hdGFuMihrKmIqTWF0aC5zaW4odyksdipNK2sqTWF0aC5jb3Mo%0AdykpKSxpKz1TP18rYipTYTpfLFNeaD49ZV5tPj1lKXt2YXIgRT1nZShmZShmKSxm%0AZShuKSk7ZGUoRSk7dmFyIEE9Z2UodSxFKTtkZShBKTt2YXIgQz0oU15fPj0wPy0x%0AOjEpKkcoQVsyXSk7KHI+Q3x8cj09PUMmJihFWzBdfHxFWzFdKSkmJihvKz1TXl8+%0APTA/MTotMSl9aWYoIWQrKylicmVhaztoPW0scD14LHY9TSxmPW59fXJldHVybigt%0ARWE+aXx8RWE+aSYmMD5mYyleMSZvfWZ1bmN0aW9uIFBlKG4pe2Z1bmN0aW9uIHQo%0Abix0KXtyZXR1cm4gTWF0aC5jb3MobikqTWF0aC5jb3ModCk+aX1mdW5jdGlvbiBl%0AKG4pe3ZhciBlLGksYyxsLHM7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2w9%0AYz0hMSxzPTF9LHBvaW50OmZ1bmN0aW9uKGYsaCl7dmFyIGcscD1bZixoXSx2PXQo%0AZixoKSxkPW8/dj8wOnUoZixoKTp2P3UoZisoMD5mP3dhOi13YSksaCk6MDtpZigh%0AZSYmKGw9Yz12KSYmbi5saW5lU3RhcnQoKSx2IT09YyYmKGc9cihlLHApLCh5ZShl%0ALGcpfHx5ZShwLGcpKSYmKHBbMF0rPUVhLHBbMV0rPUVhLHY9dChwWzBdLHBbMV0p%0AKSksdiE9PWMpcz0wLHY/KG4ubGluZVN0YXJ0KCksZz1yKHAsZSksbi5wb2ludChn%0AWzBdLGdbMV0pKTooZz1yKGUscCksbi5wb2ludChnWzBdLGdbMV0pLG4ubGluZUVu%0AZCgpKSxlPWc7ZWxzZSBpZihhJiZlJiZvXnYpe3ZhciBtO2QmaXx8IShtPXIocCxl%0ALCEwKSl8fChzPTAsbz8obi5saW5lU3RhcnQoKSxuLnBvaW50KG1bMF1bMF0sbVsw%0AXVsxXSksbi5wb2ludChtWzFdWzBdLG1bMV1bMV0pLG4ubGluZUVuZCgpKToobi5w%0Ab2ludChtWzFdWzBdLG1bMV1bMV0pLG4ubGluZUVuZCgpLG4ubGluZVN0YXJ0KCks%0Abi5wb2ludChtWzBdWzBdLG1bMF1bMV0pKSl9IXZ8fGUmJnllKGUscCl8fG4ucG9p%0AbnQocFswXSxwWzFdKSxlPXAsYz12LGk9ZH0sbGluZUVuZDpmdW5jdGlvbigpe2Mm%0AJm4ubGluZUVuZCgpLGU9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gc3wo%0AbCYmYyk8PDF9fX1mdW5jdGlvbiByKG4sdCxlKXt2YXIgcj1mZShuKSx1PWZlKHQp%0ALG89WzEsMCwwXSxhPWdlKHIsdSksYz1oZShhLGEpLGw9YVswXSxzPWMtbCpsO2lm%0AKCFzKXJldHVybiFlJiZuO3ZhciBmPWkqYy9zLGg9LWkqbC9zLGc9Z2UobyxhKSxw%0APXZlKG8sZiksdj12ZShhLGgpO3BlKHAsdik7dmFyIGQ9ZyxtPWhlKHAsZCkseT1o%0AZShkLGQpLHg9bSptLXkqKGhlKHAscCktMSk7aWYoISgwPngpKXt2YXIgTT1NYXRo%0ALnNxcnQoeCksXz12ZShkLCgtbS1NKS95KTtpZihwZShfLHApLF89bWUoXyksIWUp%0AcmV0dXJuIF87dmFyIGIsdz1uWzBdLFM9dFswXSxrPW5bMV0sRT10WzFdO3c+UyYm%0AKGI9dyx3PVMsUz1iKTt2YXIgQT1TLXcsQz1pYShBLXdhKTxFYSxOPUN8fEVhPkE7%0AaWYoIUMmJms+RSYmKGI9ayxrPUUsRT1iKSxOP0M/aytFPjBeX1sxXTwoaWEoX1sw%0AXS13KTxFYT9rOkUpOms8PV9bMV0mJl9bMV08PUU6QT53YV4odzw9X1swXSYmX1sw%0AXTw9Uykpe3ZhciB6PXZlKGQsKC1tK00pL3kpO3JldHVybiBwZSh6LHApLFtfLG1l%0AKHopXX19fWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1vP246d2Etbix1PTA7cmV0dXJu%0ALXI+dD91fD0xOnQ+ciYmKHV8PTIpLC1yPmU/dXw9NDplPnImJih1fD04KSx1fXZh%0AciBpPU1hdGguY29zKG4pLG89aT4wLGE9aWEoaSk+RWEsYz1zcihuLDYqQ2EpO3Jl%0AdHVybiBDZSh0LGUsYyxvP1swLC1uXTpbLXdhLG4td2FdKX1mdW5jdGlvbiBVZShu%0ALHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGksbz11LmEsYT11LmIsYz1v%0ALngsbD1vLnkscz1hLngsZj1hLnksaD0wLGc9MSxwPXMtYyx2PWYtbDtpZihpPW4t%0AYyxwfHwhKGk+MCkpe2lmKGkvPXAsMD5wKXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9%0AaSl9ZWxzZSBpZihwPjApe2lmKGk+ZylyZXR1cm47aT5oJiYoaD1pKX1pZihpPWUt%0AYyxwfHwhKDA+aSkpe2lmKGkvPXAsMD5wKXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9%0AaSl9ZWxzZSBpZihwPjApe2lmKGg+aSlyZXR1cm47Zz5pJiYoZz1pKX1pZihpPXQt%0AbCx2fHwhKGk+MCkpe2lmKGkvPXYsMD52KXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9%0AaSl9ZWxzZSBpZih2PjApe2lmKGk+ZylyZXR1cm47aT5oJiYoaD1pKX1pZihpPXIt%0AbCx2fHwhKDA+aSkpe2lmKGkvPXYsMD52KXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9%0AaSl9ZWxzZSBpZih2PjApe2lmKGg+aSlyZXR1cm47Zz5pJiYoZz1pKX1yZXR1cm4g%0AaD4wJiYodS5hPXt4OmMraCpwLHk6bCtoKnZ9KSwxPmcmJih1LmI9e3g6YytnKnAs%0AeTpsK2cqdn0pLHV9fX19fX1mdW5jdGlvbiBqZShuLHQsZSxyKXtmdW5jdGlvbiB1%0AKHIsdSl7cmV0dXJuIGlhKHJbMF0tbik8RWE/dT4wPzA6MzppYShyWzBdLWUpPEVh%0AP3U+MD8yOjE6aWEoclsxXS10KTxFYT91PjA/MTowOnU+MD8zOjJ9ZnVuY3Rpb24g%0AaShuLHQpe3JldHVybiBvKG4ueCx0LngpfWZ1bmN0aW9uIG8obix0KXt2YXIgZT11%0AKG4sMSkscj11KHQsMSk7cmV0dXJuIGUhPT1yP2UtcjowPT09ZT90WzFdLW5bMV06%0AMT09PWU/blswXS10WzBdOjI9PT1lP25bMV0tdFsxXTp0WzBdLW5bMF19cmV0dXJu%0AIGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMobil7Zm9yKHZhciB0PTAsZT1kLmxlbmd0%0AaCxyPW5bMV0sdT0wO2U+dTsrK3UpZm9yKHZhciBpLG89MSxhPWRbdV0sYz1hLmxl%0Abmd0aCxsPWFbMF07Yz5vOysrbylpPWFbb10sbFsxXTw9cj9pWzFdPnImJlcobCxp%0ALG4pPjAmJisrdDppWzFdPD1yJiZXKGwsaSxuKTwwJiYtLXQsbD1pO3JldHVybiAw%0AIT09dH1mdW5jdGlvbiBsKGksYSxjLGwpe3ZhciBzPTAsZj0wO2lmKG51bGw9PWl8%0AfChzPXUoaSxjKSkhPT0oZj11KGEsYykpfHxvKGksYSk8MF5jPjApe2RvIGwucG9p%0AbnQoMD09PXN8fDM9PT1zP246ZSxzPjE/cjp0KTt3aGlsZSgocz0ocytjKzQpJTQp%0AIT09Zil9ZWxzZSBsLnBvaW50KGFbMF0sYVsxXSl9ZnVuY3Rpb24gcyh1LGkpe3Jl%0AdHVybiB1Pj1uJiZlPj11JiZpPj10JiZyPj1pfWZ1bmN0aW9uIGYobix0KXtzKG4s%0AdCkmJmEucG9pbnQobix0KX1mdW5jdGlvbiBoKCl7Ti5wb2ludD1wLGQmJmQucHVz%0AaChtPVtdKSxTPSEwLHc9ITEsXz1iPTAvMH1mdW5jdGlvbiBnKCl7diYmKHAoeSx4%0AKSxNJiZ3JiZBLnJlam9pbigpLHYucHVzaChBLmJ1ZmZlcigpKSksTi5wb2ludD1m%0ALHcmJmEubGluZUVuZCgpfWZ1bmN0aW9uIHAobix0KXtuPU1hdGgubWF4KC1FYyxN%0AYXRoLm1pbihFYyxuKSksdD1NYXRoLm1heCgtRWMsTWF0aC5taW4oRWMsdCkpO3Zh%0AciBlPXMobix0KTtpZihkJiZtLnB1c2goW24sdF0pLFMpeT1uLHg9dCxNPWUsUz0h%0AMSxlJiYoYS5saW5lU3RhcnQoKSxhLnBvaW50KG4sdCkpO2Vsc2UgaWYoZSYmdylh%0ALnBvaW50KG4sdCk7ZWxzZXt2YXIgcj17YTp7eDpfLHk6Yn0sYjp7eDpuLHk6dH19%0AO0Mocik/KHd8fChhLmxpbmVTdGFydCgpLGEucG9pbnQoci5hLngsci5hLnkpKSxh%0ALnBvaW50KHIuYi54LHIuYi55KSxlfHxhLmxpbmVFbmQoKSxrPSExKTplJiYoYS5s%0AaW5lU3RhcnQoKSxhLnBvaW50KG4sdCksaz0hMSl9Xz1uLGI9dCx3PWV9dmFyIHYs%0AZCxtLHkseCxNLF8sYix3LFMsayxFPWEsQT16ZSgpLEM9VWUobix0LGUsciksTj17%0AcG9pbnQ6ZixsaW5lU3RhcnQ6aCxsaW5lRW5kOmcscG9seWdvblN0YXJ0OmZ1bmN0%0AaW9uKCl7YT1BLHY9W10sZD1bXSxrPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7%0AYT1FLHY9Vm8ubWVyZ2Uodik7dmFyIHQ9YyhbbixyXSksZT1rJiZ0LHU9di5sZW5n%0AdGg7KGV8fHUpJiYoYS5wb2x5Z29uU3RhcnQoKSxlJiYoYS5saW5lU3RhcnQoKSxs%0AKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgpKSx1JiZrZSh2LGksdCxsLGEpLGEu%0AcG9seWdvbkVuZCgpKSx2PWQ9bT1udWxsfX07cmV0dXJuIE59fWZ1bmN0aW9uIEhl%0AKG4sdCl7ZnVuY3Rpb24gZShlLHIpe3JldHVybiBlPW4oZSxyKSx0KGVbMF0sZVsx%0AXSl9cmV0dXJuIG4uaW52ZXJ0JiZ0LmludmVydCYmKGUuaW52ZXJ0PWZ1bmN0aW9u%0AKGUscil7cmV0dXJuIGU9dC5pbnZlcnQoZSxyKSxlJiZuLmludmVydChlWzBdLGVb%0AMV0pfSksZX1mdW5jdGlvbiBGZShuKXt2YXIgdD0wLGU9d2EvMyxyPWVyKG4pLHU9%0Acih0LGUpO3JldHVybiB1LnBhcmFsbGVscz1mdW5jdGlvbihuKXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aD9yKHQ9blswXSp3YS8xODAsZT1uWzFdKndhLzE4MCk6WzE4%0AMCoodC93YSksMTgwKihlL3dhKV19LHV9ZnVuY3Rpb24gT2Uobix0KXtmdW5jdGlv%0AbiBlKG4sdCl7dmFyIGU9TWF0aC5zcXJ0KGktMip1Kk1hdGguc2luKHQpKS91O3Jl%0AdHVybltlKk1hdGguc2luKG4qPXUpLG8tZSpNYXRoLmNvcyhuKV19dmFyIHI9TWF0%0AaC5zaW4obiksdT0ocitNYXRoLnNpbih0KSkvMixpPTErciooMip1LXIpLG89TWF0%0AaC5zcXJ0KGkpL3U7cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7dmFyIGU9%0Aby10O3JldHVybltNYXRoLmF0YW4yKG4sZSkvdSxHKChpLShuKm4rZSplKSp1KnUp%0ALygyKnUpKV19LGV9ZnVuY3Rpb24gWWUoKXtmdW5jdGlvbiBuKG4sdCl7Q2MrPXUq%0Abi1yKnQscj1uLHU9dH12YXIgdCxlLHIsdTtxYy5wb2ludD1mdW5jdGlvbihpLG8p%0Ae3FjLnBvaW50PW4sdD1yPWksZT11PW99LHFjLmxpbmVFbmQ9ZnVuY3Rpb24oKXtu%0AKHQsZSl9fWZ1bmN0aW9uIEllKG4sdCl7TmM+biYmKE5jPW4pLG4+TGMmJihMYz1u%0AKSx6Yz50JiYoemM9dCksdD5UYyYmKFRjPXQpfWZ1bmN0aW9uIFplKCl7ZnVuY3Rp%0Ab24gbihuLHQpe28ucHVzaCgiTSIsbiwiLCIsdCxpKX1mdW5jdGlvbiB0KG4sdCl7%0Aby5wdXNoKCJNIixuLCIsIix0KSxhLnBvaW50PWV9ZnVuY3Rpb24gZShuLHQpe28u%0AcHVzaCgiTCIsbiwiLCIsdCl9ZnVuY3Rpb24gcigpe2EucG9pbnQ9bn1mdW5jdGlv%0AbiB1KCl7by5wdXNoKCJaIil9dmFyIGk9VmUoNC41KSxvPVtdLGE9e3BvaW50Om4s%0AbGluZVN0YXJ0OmZ1bmN0aW9uKCl7YS5wb2ludD10fSxsaW5lRW5kOnIscG9seWdv%0AblN0YXJ0OmZ1bmN0aW9uKCl7YS5saW5lRW5kPXV9LHBvbHlnb25FbmQ6ZnVuY3Rp%0Ab24oKXthLmxpbmVFbmQ9cixhLnBvaW50PW59LHBvaW50UmFkaXVzOmZ1bmN0aW9u%0AKG4pe3JldHVybiBpPVZlKG4pLGF9LHJlc3VsdDpmdW5jdGlvbigpe2lmKG8ubGVu%0AZ3RoKXt2YXIgbj1vLmpvaW4oIiIpO3JldHVybiBvPVtdLG59fX07cmV0dXJuIGF9%0AZnVuY3Rpb24gVmUobil7cmV0dXJuIm0wLCIrbisiYSIrbisiLCIrbisiIDAgMSwx%0AIDAsIistMipuKyJhIituKyIsIituKyIgMCAxLDEgMCwiKzIqbisieiJ9ZnVuY3Rp%0Ab24gWGUobix0KXt2Yys9bixkYys9dCwrK21jfWZ1bmN0aW9uICRlKCl7ZnVuY3Rp%0Ab24gbihuLHIpe3ZhciB1PW4tdCxpPXItZSxvPU1hdGguc3FydCh1KnUraSppKTt5%0AYys9byoodCtuKS8yLHhjKz1vKihlK3IpLzIsTWMrPW8sWGUodD1uLGU9cil9dmFy%0AIHQsZTtEYy5wb2ludD1mdW5jdGlvbihyLHUpe0RjLnBvaW50PW4sWGUodD1yLGU9%0AdSl9fWZ1bmN0aW9uIEJlKCl7RGMucG9pbnQ9WGV9ZnVuY3Rpb24gV2UoKXtmdW5j%0AdGlvbiBuKG4sdCl7dmFyIGU9bi1yLGk9dC11LG89TWF0aC5zcXJ0KGUqZStpKmkp%0AO3ljKz1vKihyK24pLzIseGMrPW8qKHUrdCkvMixNYys9byxvPXUqbi1yKnQsX2Mr%0APW8qKHIrbiksYmMrPW8qKHUrdCksd2MrPTMqbyxYZShyPW4sdT10KX12YXIgdCxl%0ALHIsdTtEYy5wb2ludD1mdW5jdGlvbihpLG8pe0RjLnBvaW50PW4sWGUodD1yPWks%0AZT11PW8pfSxEYy5saW5lRW5kPWZ1bmN0aW9uKCl7bih0LGUpfX1mdW5jdGlvbiBK%0AZShuKXtmdW5jdGlvbiB0KHQsZSl7bi5tb3ZlVG8odCxlKSxuLmFyYyh0LGUsbyww%0ALFNhKX1mdW5jdGlvbiBlKHQsZSl7bi5tb3ZlVG8odCxlKSxhLnBvaW50PXJ9ZnVu%0AY3Rpb24gcih0LGUpe24ubGluZVRvKHQsZSl9ZnVuY3Rpb24gdSgpe2EucG9pbnQ9%0AdH1mdW5jdGlvbiBpKCl7bi5jbG9zZVBhdGgoKX12YXIgbz00LjUsYT17cG9pbnQ6%0AdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXthLnBvaW50PWV9LGxpbmVFbmQ6dSxwb2x5%0AZ29uU3RhcnQ6ZnVuY3Rpb24oKXthLmxpbmVFbmQ9aX0scG9seWdvbkVuZDpmdW5j%0AdGlvbigpe2EubGluZUVuZD11LGEucG9pbnQ9dH0scG9pbnRSYWRpdXM6ZnVuY3Rp%0Ab24obil7cmV0dXJuIG89bixhfSxyZXN1bHQ6dn07cmV0dXJuIGF9ZnVuY3Rpb24g%0AR2Uobil7ZnVuY3Rpb24gdChuKXtyZXR1cm4oYT9yOmUpKG4pfWZ1bmN0aW9uIGUo%0AdCl7cmV0dXJuIG5yKHQsZnVuY3Rpb24oZSxyKXtlPW4oZSxyKSx0LnBvaW50KGVb%0AMF0sZVsxXSl9KX1mdW5jdGlvbiByKHQpe2Z1bmN0aW9uIGUoZSxyKXtlPW4oZSxy%0AKSx0LnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gcigpe3g9MC8wLFMucG9pbnQ9%0AaSx0LmxpbmVTdGFydCgpfWZ1bmN0aW9uIGkoZSxyKXt2YXIgaT1mZShbZSxyXSks%0Abz1uKGUscik7dSh4LE0seSxfLGIsdyx4PW9bMF0sTT1vWzFdLHk9ZSxfPWlbMF0s%0AYj1pWzFdLHc9aVsyXSxhLHQpLHQucG9pbnQoeCxNKX1mdW5jdGlvbiBvKCl7Uy5w%0Ab2ludD1lLHQubGluZUVuZCgpfWZ1bmN0aW9uIGMoKXtyKCksUy5wb2ludD1sLFMu%0AbGluZUVuZD1zfWZ1bmN0aW9uIGwobix0KXtpKGY9bixoPXQpLGc9eCxwPU0sdj1f%0ALGQ9YixtPXcsUy5wb2ludD1pfWZ1bmN0aW9uIHMoKXt1KHgsTSx5LF8sYix3LGcs%0AcCxmLHYsZCxtLGEsdCksUy5saW5lRW5kPW8sbygpfXZhciBmLGgsZyxwLHYsZCxt%0ALHkseCxNLF8sYix3LFM9e3BvaW50OmUsbGluZVN0YXJ0OnIsbGluZUVuZDpvLHBv%0AbHlnb25TdGFydDpmdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCksUy5saW5lU3Rh%0AcnQ9Y30scG9seWdvbkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpLFMubGlu%0AZVN0YXJ0PXJ9fTtyZXR1cm4gU31mdW5jdGlvbiB1KHQsZSxyLGEsYyxsLHMsZixo%0ALGcscCx2LGQsbSl7dmFyIHk9cy10LHg9Zi1lLE09eSp5K3gqeDtpZihNPjQqaSYm%0AZC0tKXt2YXIgXz1hK2csYj1jK3Asdz1sK3YsUz1NYXRoLnNxcnQoXypfK2IqYit3%0AKncpLGs9TWF0aC5hc2luKHcvPVMpLEU9aWEoaWEodyktMSk8RWF8fGlhKHItaCk8%0ARWE/KHIraCkvMjpNYXRoLmF0YW4yKGIsXyksQT1uKEUsayksQz1BWzBdLE49QVsx%0AXSx6PUMtdCxMPU4tZSxUPXgqei15Kkw7KFQqVC9NPml8fGlhKCh5KnoreCpMKS9N%0ALS41KT4uM3x8bz5hKmcrYypwK2wqdikmJih1KHQsZSxyLGEsYyxsLEMsTixFLF8v%0APVMsYi89Uyx3LGQsbSksbS5wb2ludChDLE4pLHUoQyxOLEUsXyxiLHcscyxmLGgs%0AZyxwLHYsZCxtKSl9fXZhciBpPS41LG89TWF0aC5jb3MoMzAqQ2EpLGE9MTY7cmV0%0AdXJuIHQucHJlY2lzaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyhhPShpPW4qbik+MCYmMTYsdCk6TWF0aC5zcXJ0KGkpCn0sdH1mdW5jdGlv%0AbiBLZShuKXt2YXIgdD1HZShmdW5jdGlvbih0LGUpe3JldHVybiBuKFt0Kk5hLGUq%0ATmFdKX0pO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gcnIodChuKSl9fWZ1bmN0%0AaW9uIFFlKG4pe3RoaXMuc3RyZWFtPW59ZnVuY3Rpb24gbnIobix0KXtyZXR1cm57%0AcG9pbnQ6dCxzcGhlcmU6ZnVuY3Rpb24oKXtuLnNwaGVyZSgpfSxsaW5lU3RhcnQ6%0AZnVuY3Rpb24oKXtuLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7bi5s%0AaW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe24ucG9seWdvblN0YXJ0%0AKCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25FbmQoKX19fWZ1bmN0%0AaW9uIHRyKG4pe3JldHVybiBlcihmdW5jdGlvbigpe3JldHVybiBufSkoKX1mdW5j%0AdGlvbiBlcihuKXtmdW5jdGlvbiB0KG4pe3JldHVybiBuPWEoblswXSpDYSxuWzFd%0AKkNhKSxbblswXSpoK2MsbC1uWzFdKmhdfWZ1bmN0aW9uIGUobil7cmV0dXJuIG49%0AYS5pbnZlcnQoKG5bMF0tYykvaCwobC1uWzFdKS9oKSxuJiZbblswXSpOYSxuWzFd%0AKk5hXX1mdW5jdGlvbiByKCl7YT1IZShvPW9yKG0seSx4KSxpKTt2YXIgbj1pKHYs%0AZCk7cmV0dXJuIGM9Zy1uWzBdKmgsbD1wK25bMV0qaCx1KCl9ZnVuY3Rpb24gdSgp%0Ae3JldHVybiBzJiYocy52YWxpZD0hMSxzPW51bGwpLHR9dmFyIGksbyxhLGMsbCxz%0ALGY9R2UoZnVuY3Rpb24obix0KXtyZXR1cm4gbj1pKG4sdCksW25bMF0qaCtjLGwt%0AblsxXSpoXX0pLGg9MTUwLGc9NDgwLHA9MjUwLHY9MCxkPTAsbT0wLHk9MCx4PTAs%0ATT1rYyxfPXd0LGI9bnVsbCx3PW51bGw7cmV0dXJuIHQuc3RyZWFtPWZ1bmN0aW9u%0AKG4pe3JldHVybiBzJiYocy52YWxpZD0hMSkscz1ycihNKG8sZihfKG4pKSkpLHMu%0AdmFsaWQ9ITAsc30sdC5jbGlwQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KE09bnVsbD09bj8oYj1uLGtjKTpQZSgoYj0rbikqQ2EpLHUo%0AKSk6Yn0sdC5jbGlwRXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu%0AbGVuZ3RoPyh3PW4sXz1uP2plKG5bMF1bMF0sblswXVsxXSxuWzFdWzBdLG5bMV1b%0AMV0pOnd0LHUoKSk6d30sdC5zY2FsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1l%0AbnRzLmxlbmd0aD8oaD0rbixyKCkpOmh9LHQudHJhbnNsYXRlPWZ1bmN0aW9uKG4p%0Ae3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStuWzBdLHA9K25bMV0scigpKTpb%0AZyxwXX0sdC5jZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KHY9blswXSUzNjAqQ2EsZD1uWzFdJTM2MCpDYSxyKCkpOlt2Kk5hLGQqTmFd%0AfSx0LnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o%0AbT1uWzBdJTM2MCpDYSx5PW5bMV0lMzYwKkNhLHg9bi5sZW5ndGg+Mj9uWzJdJTM2%0AMCpDYTowLHIoKSk6W20qTmEseSpOYSx4Kk5hXX0sVm8ucmViaW5kKHQsZiwicHJl%0AY2lzaW9uIiksZnVuY3Rpb24oKXtyZXR1cm4gaT1uLmFwcGx5KHRoaXMsYXJndW1l%0AbnRzKSx0LmludmVydD1pLmludmVydCYmZSxyKCl9fWZ1bmN0aW9uIHJyKG4pe3Jl%0AdHVybiBucihuLGZ1bmN0aW9uKHQsZSl7bi5wb2ludCh0KkNhLGUqQ2EpfSl9ZnVu%0AY3Rpb24gdXIobix0KXtyZXR1cm5bbix0XX1mdW5jdGlvbiBpcihuLHQpe3JldHVy%0AbltuPndhP24tU2E6LXdhPm4/bitTYTpuLHRdfWZ1bmN0aW9uIG9yKG4sdCxlKXty%0AZXR1cm4gbj90fHxlP0hlKGNyKG4pLGxyKHQsZSkpOmNyKG4pOnR8fGU/bHIodCxl%0AKTppcn1mdW5jdGlvbiBhcihuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4g%0AdCs9bixbdD53YT90LVNhOi13YT50P3QrU2E6dCxlXX19ZnVuY3Rpb24gY3Iobil7%0AdmFyIHQ9YXIobik7cmV0dXJuIHQuaW52ZXJ0PWFyKC1uKSx0fWZ1bmN0aW9uIGxy%0AKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPU1hdGguY29zKHQpLGE9TWF0aC5j%0Ab3MobikqZSxjPU1hdGguc2luKG4pKmUsbD1NYXRoLnNpbih0KSxzPWwqcithKnU7%0AcmV0dXJuW01hdGguYXRhbjIoYyppLXMqbyxhKnItbCp1KSxHKHMqaStjKm8pXX12%0AYXIgcj1NYXRoLmNvcyhuKSx1PU1hdGguc2luKG4pLGk9TWF0aC5jb3ModCksbz1N%0AYXRoLnNpbih0KTtyZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1N%0AYXRoLmNvcyh0KSxhPU1hdGguY29zKG4pKmUsYz1NYXRoLnNpbihuKSplLGw9TWF0%0AaC5zaW4odCkscz1sKmktYypvO3JldHVybltNYXRoLmF0YW4yKGMqaStsKm8sYSpy%0AK3MqdSksRyhzKnItYSp1KV19LGV9ZnVuY3Rpb24gc3Iobix0KXt2YXIgZT1NYXRo%0ALmNvcyhuKSxyPU1hdGguc2luKG4pO3JldHVybiBmdW5jdGlvbih1LGksbyxhKXt2%0AYXIgYz1vKnQ7bnVsbCE9dT8odT1mcihlLHUpLGk9ZnIoZSxpKSwobz4wP2k+dTp1%0APmkpJiYodSs9bypTYSkpOih1PW4rbypTYSxpPW4tLjUqYyk7Zm9yKHZhciBsLHM9%0AdTtvPjA/cz5pOmk+cztzLT1jKWEucG9pbnQoKGw9bWUoW2UsLXIqTWF0aC5jb3Mo%0AcyksLXIqTWF0aC5zaW4ocyldKSlbMF0sbFsxXSl9fWZ1bmN0aW9uIGZyKG4sdCl7%0AdmFyIGU9ZmUodCk7ZVswXS09bixkZShlKTt2YXIgcj1KKC1lWzFdKTtyZXR1cm4o%0AKC1lWzJdPDA/LXI6cikrMipNYXRoLlBJLUVhKSUoMipNYXRoLlBJKX1mdW5jdGlv%0AbiBocihuLHQsZSl7dmFyIHI9Vm8ucmFuZ2Uobix0LUVhLGUpLmNvbmNhdCh0KTty%0AZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKHQpe3JldHVy%0AbltuLHRdfSl9fWZ1bmN0aW9uIGdyKG4sdCxlKXt2YXIgcj1Wby5yYW5nZShuLHQt%0ARWEsZSkuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gci5tYXAo%0AZnVuY3Rpb24odCl7cmV0dXJuW3Qsbl19KX19ZnVuY3Rpb24gcHIobil7cmV0dXJu%0AIG4uc291cmNlfWZ1bmN0aW9uIHZyKG4pe3JldHVybiBuLnRhcmdldH1mdW5jdGlv%0AbiBkcihuLHQsZSxyKXt2YXIgdT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLG89%0ATWF0aC5jb3MociksYT1NYXRoLnNpbihyKSxjPXUqTWF0aC5jb3MobiksbD11Kk1h%0AdGguc2luKG4pLHM9bypNYXRoLmNvcyhlKSxmPW8qTWF0aC5zaW4oZSksaD0yKk1h%0AdGguYXNpbihNYXRoLnNxcnQodHQoci10KSt1Km8qdHQoZS1uKSkpLGc9MS9NYXRo%0ALnNpbihoKSxwPWg/ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zaW4obio9aCkqZyxl%0APU1hdGguc2luKGgtbikqZyxyPWUqYyt0KnMsdT1lKmwrdCpmLG89ZSppK3QqYTty%0AZXR1cm5bTWF0aC5hdGFuMih1LHIpKk5hLE1hdGguYXRhbjIobyxNYXRoLnNxcnQo%0AcipyK3UqdSkpKk5hXX06ZnVuY3Rpb24oKXtyZXR1cm5bbipOYSx0Kk5hXX07cmV0%0AdXJuIHAuZGlzdGFuY2U9aCxwfWZ1bmN0aW9uIG1yKCl7ZnVuY3Rpb24gbihuLHUp%0Ae3ZhciBpPU1hdGguc2luKHUqPUNhKSxvPU1hdGguY29zKHUpLGE9aWEoKG4qPUNh%0AKS10KSxjPU1hdGguY29zKGEpO1BjKz1NYXRoLmF0YW4yKE1hdGguc3FydCgoYT1v%0AKk1hdGguc2luKGEpKSphKyhhPXIqaS1lKm8qYykqYSksZSppK3IqbypjKSx0PW4s%0AZT1pLHI9b312YXIgdCxlLHI7VWMucG9pbnQ9ZnVuY3Rpb24odSxpKXt0PXUqQ2Es%0AZT1NYXRoLnNpbihpKj1DYSkscj1NYXRoLmNvcyhpKSxVYy5wb2ludD1ufSxVYy5s%0AaW5lRW5kPWZ1bmN0aW9uKCl7VWMucG9pbnQ9VWMubGluZUVuZD12fX1mdW5jdGlv%0AbiB5cihuLHQpe2Z1bmN0aW9uIGUodCxlKXt2YXIgcj1NYXRoLmNvcyh0KSx1PU1h%0AdGguY29zKGUpLGk9bihyKnUpO3JldHVybltpKnUqTWF0aC5zaW4odCksaSpNYXRo%0ALnNpbihlKV19cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKG4sZSl7dmFyIHI9TWF0%0AaC5zcXJ0KG4qbitlKmUpLHU9dChyKSxpPU1hdGguc2luKHUpLG89TWF0aC5jb3Mo%0AdSk7cmV0dXJuW01hdGguYXRhbjIobippLHIqbyksTWF0aC5hc2luKHImJmUqaS9y%0AKV19LGV9ZnVuY3Rpb24geHIobix0KXtmdW5jdGlvbiBlKG4sdCl7bz4wPy1rYStF%0AYT50JiYodD0ta2ErRWEpOnQ+a2EtRWEmJih0PWthLUVhKTt2YXIgZT1vL01hdGgu%0AcG93KHUodCksaSk7cmV0dXJuW2UqTWF0aC5zaW4oaSpuKSxvLWUqTWF0aC5jb3Mo%0AaSpuKV19dmFyIHI9TWF0aC5jb3MobiksdT1mdW5jdGlvbihuKXtyZXR1cm4gTWF0%0AaC50YW4od2EvNCtuLzIpfSxpPW49PT10P01hdGguc2luKG4pOk1hdGgubG9nKHIv%0ATWF0aC5jb3ModCkpL01hdGgubG9nKHUodCkvdShuKSksbz1yKk1hdGgucG93KHUo%0AbiksaSkvaTtyZXR1cm4gaT8oZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1v%0ALXQscj1CKGkpKk1hdGguc3FydChuKm4rZSplKTtyZXR1cm5bTWF0aC5hdGFuMihu%0ALGUpL2ksMipNYXRoLmF0YW4oTWF0aC5wb3coby9yLDEvaSkpLWthXX0sZSk6X3J9%0AZnVuY3Rpb24gTXIobix0KXtmdW5jdGlvbiBlKG4sdCl7dmFyIGU9aS10O3JldHVy%0AbltlKk1hdGguc2luKHUqbiksaS1lKk1hdGguY29zKHUqbildfXZhciByPU1hdGgu%0AY29zKG4pLHU9bj09PXQ/TWF0aC5zaW4obik6KHItTWF0aC5jb3ModCkpLyh0LW4p%0ALGk9ci91K247cmV0dXJuIGlhKHUpPEVhP3VyOihlLmludmVydD1mdW5jdGlvbihu%0ALHQpe3ZhciBlPWktdDtyZXR1cm5bTWF0aC5hdGFuMihuLGUpL3UsaS1CKHUpKk1h%0AdGguc3FydChuKm4rZSplKV19LGUpfWZ1bmN0aW9uIF9yKG4sdCl7cmV0dXJuW24s%0ATWF0aC5sb2coTWF0aC50YW4od2EvNCt0LzIpKV19ZnVuY3Rpb24gYnIobil7dmFy%0AIHQsZT10cihuKSxyPWUuc2NhbGUsdT1lLnRyYW5zbGF0ZSxpPWUuY2xpcEV4dGVu%0AdDtyZXR1cm4gZS5zY2FsZT1mdW5jdGlvbigpe3ZhciBuPXIuYXBwbHkoZSxhcmd1%0AbWVudHMpO3JldHVybiBuPT09ZT90P2UuY2xpcEV4dGVudChudWxsKTplOm59LGUu%0AdHJhbnNsYXRlPWZ1bmN0aW9uKCl7dmFyIG49dS5hcHBseShlLGFyZ3VtZW50cyk7%0AcmV0dXJuIG49PT1lP3Q/ZS5jbGlwRXh0ZW50KG51bGwpOmU6bn0sZS5jbGlwRXh0%0AZW50PWZ1bmN0aW9uKG4pe3ZhciBvPWkuYXBwbHkoZSxhcmd1bWVudHMpO2lmKG89%0APT1lKXtpZih0PW51bGw9PW4pe3ZhciBhPXdhKnIoKSxjPXUoKTtpKFtbY1swXS1h%0ALGNbMV0tYV0sW2NbMF0rYSxjWzFdK2FdXSl9fWVsc2UgdCYmKG89bnVsbCk7cmV0%0AdXJuIG99LGUuY2xpcEV4dGVudChudWxsKX1mdW5jdGlvbiB3cihuLHQpe3JldHVy%0AbltNYXRoLmxvZyhNYXRoLnRhbih3YS80K3QvMikpLC1uXX1mdW5jdGlvbiBTcihu%0AKXtyZXR1cm4gblswXX1mdW5jdGlvbiBrcihuKXtyZXR1cm4gblsxXX1mdW5jdGlv%0AbiBFcihuKXtmb3IodmFyIHQ9bi5sZW5ndGgsZT1bMCwxXSxyPTIsdT0yO3Q+dTt1%0AKyspe2Zvcig7cj4xJiZXKG5bZVtyLTJdXSxuW2Vbci0xXV0sblt1XSk8PTA7KS0t%0AcjtlW3IrK109dX1yZXR1cm4gZS5zbGljZSgwLHIpfWZ1bmN0aW9uIEFyKG4sdCl7%0AcmV0dXJuIG5bMF0tdFswXXx8blsxXS10WzFdfWZ1bmN0aW9uIENyKG4sdCxlKXty%0AZXR1cm4oZVswXS10WzBdKSooblsxXS10WzFdKTwoZVsxXS10WzFdKSooblswXS10%0AWzBdKX1mdW5jdGlvbiBOcihuLHQsZSxyKXt2YXIgdT1uWzBdLGk9ZVswXSxvPXRb%0AMF0tdSxhPXJbMF0taSxjPW5bMV0sbD1lWzFdLHM9dFsxXS1jLGY9clsxXS1sLGg9%0AKGEqKGMtbCktZioodS1pKSkvKGYqby1hKnMpO3JldHVyblt1K2gqbyxjK2gqc119%0AZnVuY3Rpb24genIobil7dmFyIHQ9blswXSxlPW5bbi5sZW5ndGgtMV07cmV0dXJu%0AISh0WzBdLWVbMF18fHRbMV0tZVsxXSl9ZnVuY3Rpb24gTHIoKXtLcih0aGlzKSx0%0AaGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gVHIo%0Abil7dmFyIHQ9V2MucG9wKCl8fG5ldyBMcjtyZXR1cm4gdC5zaXRlPW4sdH1mdW5j%0AdGlvbiBxcihuKXtJcihuKSxYYy5yZW1vdmUobiksV2MucHVzaChuKSxLcihuKX1m%0AdW5jdGlvbiBScihuKXt2YXIgdD1uLmNpcmNsZSxlPXQueCxyPXQuY3ksdT17eDpl%0ALHk6cn0saT1uLlAsbz1uLk4sYT1bbl07cXIobik7Zm9yKHZhciBjPWk7Yy5jaXJj%0AbGUmJmlhKGUtYy5jaXJjbGUueCk8RWEmJmlhKHItYy5jaXJjbGUuY3kpPEVhOylp%0APWMuUCxhLnVuc2hpZnQoYykscXIoYyksYz1pO2EudW5zaGlmdChjKSxJcihjKTtm%0Ab3IodmFyIGw9bztsLmNpcmNsZSYmaWEoZS1sLmNpcmNsZS54KTxFYSYmaWEoci1s%0ALmNpcmNsZS5jeSk8RWE7KW89bC5OLGEucHVzaChsKSxxcihsKSxsPW87YS5wdXNo%0AKGwpLElyKGwpO3ZhciBzLGY9YS5sZW5ndGg7Zm9yKHM9MTtmPnM7KytzKWw9YVtz%0AXSxjPWFbcy0xXSxXcihsLmVkZ2UsYy5zaXRlLGwuc2l0ZSx1KTtjPWFbMF0sbD1h%0AW2YtMV0sbC5lZGdlPSRyKGMuc2l0ZSxsLnNpdGUsbnVsbCx1KSxZcihjKSxZcihs%0AKX1mdW5jdGlvbiBEcihuKXtmb3IodmFyIHQsZSxyLHUsaT1uLngsbz1uLnksYT1Y%0AYy5fO2E7KWlmKHI9UHIoYSxvKS1pLHI+RWEpYT1hLkw7ZWxzZXtpZih1PWktVXIo%0AYSxvKSwhKHU+RWEpKXtyPi1FYT8odD1hLlAsZT1hKTp1Pi1FYT8odD1hLGU9YS5O%0AKTp0PWU9YTticmVha31pZighYS5SKXt0PWE7YnJlYWt9YT1hLlJ9dmFyIGM9VHIo%0Abik7aWYoWGMuaW5zZXJ0KHQsYyksdHx8ZSl7aWYodD09PWUpcmV0dXJuIElyKHQp%0ALGU9VHIodC5zaXRlKSxYYy5pbnNlcnQoYyxlKSxjLmVkZ2U9ZS5lZGdlPSRyKHQu%0Ac2l0ZSxjLnNpdGUpLFlyKHQpLFlyKGUpLHZvaWQgMDtpZighZSlyZXR1cm4gYy5l%0AZGdlPSRyKHQuc2l0ZSxjLnNpdGUpLHZvaWQgMDtJcih0KSxJcihlKTt2YXIgbD10%0ALnNpdGUscz1sLngsZj1sLnksaD1uLngtcyxnPW4ueS1mLHA9ZS5zaXRlLHY9cC54%0ALXMsZD1wLnktZixtPTIqKGgqZC1nKnYpLHk9aCpoK2cqZyx4PXYqditkKmQsTT17%0AeDooZCp5LWcqeCkvbStzLHk6KGgqeC12KnkpL20rZn07V3IoZS5lZGdlLGwscCxN%0AKSxjLmVkZ2U9JHIobCxuLG51bGwsTSksZS5lZGdlPSRyKG4scCxudWxsLE0pLFly%0AKHQpLFlyKGUpfX1mdW5jdGlvbiBQcihuLHQpe3ZhciBlPW4uc2l0ZSxyPWUueCx1%0APWUueSxpPXUtdDtpZighaSlyZXR1cm4gcjt2YXIgbz1uLlA7aWYoIW8pcmV0dXJu%0ALTEvMDtlPW8uc2l0ZTt2YXIgYT1lLngsYz1lLnksbD1jLXQ7aWYoIWwpcmV0dXJu%0AIGE7dmFyIHM9YS1yLGY9MS9pLTEvbCxoPXMvbDtyZXR1cm4gZj8oLWgrTWF0aC5z%0AcXJ0KGgqaC0yKmYqKHMqcy8oLTIqbCktYytsLzIrdS1pLzIpKSkvZityOihyK2Ep%0ALzJ9ZnVuY3Rpb24gVXIobix0KXt2YXIgZT1uLk47aWYoZSlyZXR1cm4gUHIoZSx0%0AKTt2YXIgcj1uLnNpdGU7cmV0dXJuIHIueT09PXQ/ci54OjEvMH1mdW5jdGlvbiBq%0AcihuKXt0aGlzLnNpdGU9bix0aGlzLmVkZ2VzPVtdfWZ1bmN0aW9uIEhyKG4pe2Zv%0Acih2YXIgdCxlLHIsdSxpLG8sYSxjLGwscyxmPW5bMF1bMF0saD1uWzFdWzBdLGc9%0AblswXVsxXSxwPW5bMV1bMV0sdj1WYyxkPXYubGVuZ3RoO2QtLTspaWYoaT12W2Rd%0ALGkmJmkucHJlcGFyZSgpKWZvcihhPWkuZWRnZXMsYz1hLmxlbmd0aCxvPTA7Yz5v%0AOylzPWFbb10uZW5kKCkscj1zLngsdT1zLnksbD1hWysrbyVjXS5zdGFydCgpLHQ9%0AbC54LGU9bC55LChpYShyLXQpPkVhfHxpYSh1LWUpPkVhKSYmKGEuc3BsaWNlKG8s%0AMCxuZXcgSnIoQnIoaS5zaXRlLHMsaWEoci1mKTxFYSYmcC11PkVhP3t4OmYseTpp%0AYSh0LWYpPEVhP2U6cH06aWEodS1wKTxFYSYmaC1yPkVhP3t4OmlhKGUtcCk8RWE/%0AdDpoLHk6cH06aWEoci1oKTxFYSYmdS1nPkVhP3t4OmgseTppYSh0LWgpPEVhP2U6%0AZ306aWEodS1nKTxFYSYmci1mPkVhP3t4OmlhKGUtZyk8RWE/dDpmLHk6Z306bnVs%0AbCksaS5zaXRlLG51bGwpKSwrK2MpfWZ1bmN0aW9uIEZyKG4sdCl7cmV0dXJuIHQu%0AYW5nbGUtbi5hbmdsZX1mdW5jdGlvbiBPcigpe0tyKHRoaXMpLHRoaXMueD10aGlz%0ALnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBZcihu%0AKXt2YXIgdD1uLlAsZT1uLk47aWYodCYmZSl7dmFyIHI9dC5zaXRlLHU9bi5zaXRl%0ALGk9ZS5zaXRlO2lmKHIhPT1pKXt2YXIgbz11LngsYT11LnksYz1yLngtbyxsPXIu%0AeS1hLHM9aS54LW8sZj1pLnktYSxoPTIqKGMqZi1sKnMpO2lmKCEoaD49LUFhKSl7%0AdmFyIGc9YypjK2wqbCxwPXMqcytmKmYsdj0oZipnLWwqcCkvaCxkPShjKnAtcypn%0AKS9oLGY9ZCthLG09SmMucG9wKCl8fG5ldyBPcjttLmFyYz1uLG0uc2l0ZT11LG0u%0AeD12K28sbS55PWYrTWF0aC5zcXJ0KHYqditkKmQpLG0uY3k9ZixuLmNpcmNsZT1t%0AO2Zvcih2YXIgeT1udWxsLHg9QmMuXzt4OylpZihtLnk8eC55fHxtLnk9PT14Lnkm%0AJm0ueDw9eC54KXtpZigheC5MKXt5PXguUDticmVha314PXguTH1lbHNle2lmKCF4%0ALlIpe3k9eDticmVha314PXguUn1CYy5pbnNlcnQoeSxtKSx5fHwoJGM9bSl9fX19%0AZnVuY3Rpb24gSXIobil7dmFyIHQ9bi5jaXJjbGU7dCYmKHQuUHx8KCRjPXQuTiks%0AQmMucmVtb3ZlKHQpLEpjLnB1c2godCksS3IodCksbi5jaXJjbGU9bnVsbCl9ZnVu%0AY3Rpb24gWnIobil7Zm9yKHZhciB0LGU9WmMscj1VZShuWzBdWzBdLG5bMF1bMV0s%0AblsxXVswXSxuWzFdWzFdKSx1PWUubGVuZ3RoO3UtLTspdD1lW3VdLCghVnIodCxu%0AKXx8IXIodCl8fGlhKHQuYS54LXQuYi54KTxFYSYmaWEodC5hLnktdC5iLnkpPEVh%0AKSYmKHQuYT10LmI9bnVsbCxlLnNwbGljZSh1LDEpKX1mdW5jdGlvbiBWcihuLHQp%0Ae3ZhciBlPW4uYjtpZihlKXJldHVybiEwO3ZhciByLHUsaT1uLmEsbz10WzBdWzBd%0ALGE9dFsxXVswXSxjPXRbMF1bMV0sbD10WzFdWzFdLHM9bi5sLGY9bi5yLGg9cy54%0ALGc9cy55LHA9Zi54LHY9Zi55LGQ9KGgrcCkvMixtPShnK3YpLzI7aWYodj09PWcp%0Ae2lmKG8+ZHx8ZD49YSlyZXR1cm47aWYoaD5wKXtpZihpKXtpZihpLnk+PWwpcmV0%0AdXJufWVsc2UgaT17eDpkLHk6Y307ZT17eDpkLHk6bH19ZWxzZXtpZihpKXtpZihp%0ALnk8YylyZXR1cm59ZWxzZSBpPXt4OmQseTpsfTtlPXt4OmQseTpjfX19ZWxzZSBp%0AZihyPShoLXApLyh2LWcpLHU9bS1yKmQsLTE+cnx8cj4xKWlmKGg+cCl7aWYoaSl7%0AaWYoaS55Pj1sKXJldHVybn1lbHNlIGk9e3g6KGMtdSkvcix5OmN9O2U9e3g6KGwt%0AdSkvcix5Omx9fWVsc2V7aWYoaSl7aWYoaS55PGMpcmV0dXJufWVsc2UgaT17eDoo%0AbC11KS9yLHk6bH07ZT17eDooYy11KS9yLHk6Y319ZWxzZSBpZih2Pmcpe2lmKGkp%0Ae2lmKGkueD49YSlyZXR1cm59ZWxzZSBpPXt4Om8seTpyKm8rdX07ZT17eDphLHk6%0AciphK3V9fWVsc2V7aWYoaSl7aWYoaS54PG8pcmV0dXJufWVsc2UgaT17eDphLHk6%0AciphK3V9O2U9e3g6byx5OnIqbyt1fX1yZXR1cm4gbi5hPWksbi5iPWUsITB9ZnVu%0AY3Rpb24gWHIobix0KXt0aGlzLmw9bix0aGlzLnI9dCx0aGlzLmE9dGhpcy5iPW51%0AbGx9ZnVuY3Rpb24gJHIobix0LGUscil7dmFyIHU9bmV3IFhyKG4sdCk7cmV0dXJu%0AIFpjLnB1c2godSksZSYmV3IodSxuLHQsZSksciYmV3IodSx0LG4sciksVmNbbi5p%0AXS5lZGdlcy5wdXNoKG5ldyBKcih1LG4sdCkpLFZjW3QuaV0uZWRnZXMucHVzaChu%0AZXcgSnIodSx0LG4pKSx1fWZ1bmN0aW9uIEJyKG4sdCxlKXt2YXIgcj1uZXcgWHIo%0AbixudWxsKTtyZXR1cm4gci5hPXQsci5iPWUsWmMucHVzaChyKSxyfWZ1bmN0aW9u%0AIFdyKG4sdCxlLHIpe24uYXx8bi5iP24ubD09PWU/bi5iPXI6bi5hPXI6KG4uYT1y%0ALG4ubD10LG4ucj1lKX1mdW5jdGlvbiBKcihuLHQsZSl7dmFyIHI9bi5hLHU9bi5i%0AO3RoaXMuZWRnZT1uLHRoaXMuc2l0ZT10LHRoaXMuYW5nbGU9ZT9NYXRoLmF0YW4y%0AKGUueS10LnksZS54LXQueCk6bi5sPT09dD9NYXRoLmF0YW4yKHUueC1yLngsci55%0ALXUueSk6TWF0aC5hdGFuMihyLngtdS54LHUueS1yLnkpfWZ1bmN0aW9uIEdyKCl7%0AdGhpcy5fPW51bGx9ZnVuY3Rpb24gS3Iobil7bi5VPW4uQz1uLkw9bi5SPW4uUD1u%0ALk49bnVsbH1mdW5jdGlvbiBRcihuLHQpe3ZhciBlPXQscj10LlIsdT1lLlU7dT91%0ALkw9PT1lP3UuTD1yOnUuUj1yOm4uXz1yLHIuVT11LGUuVT1yLGUuUj1yLkwsZS5S%0AJiYoZS5SLlU9ZSksci5MPWV9ZnVuY3Rpb24gbnUobix0KXt2YXIgZT10LHI9dC5M%0ALHU9ZS5VO3U/dS5MPT09ZT91Lkw9cjp1LlI9cjpuLl89cixyLlU9dSxlLlU9cixl%0ALkw9ci5SLGUuTCYmKGUuTC5VPWUpLHIuUj1lfWZ1bmN0aW9uIHR1KG4pe2Zvcig7%0Abi5MOyluPW4uTDtyZXR1cm4gbn1mdW5jdGlvbiBldShuLHQpe3ZhciBlLHIsdSxp%0APW4uc29ydChydSkucG9wKCk7Zm9yKFpjPVtdLFZjPW5ldyBBcnJheShuLmxlbmd0%0AaCksWGM9bmV3IEdyLEJjPW5ldyBHcjs7KWlmKHU9JGMsaSYmKCF1fHxpLnk8dS55%0AfHxpLnk9PT11LnkmJmkueDx1LngpKShpLnghPT1lfHxpLnkhPT1yKSYmKFZjW2ku%0AaV09bmV3IGpyKGkpLERyKGkpLGU9aS54LHI9aS55KSxpPW4ucG9wKCk7ZWxzZXtp%0AZighdSlicmVhaztScih1LmFyYyl9dCYmKFpyKHQpLEhyKHQpKTt2YXIgbz17Y2Vs%0AbHM6VmMsZWRnZXM6WmN9O3JldHVybiBYYz1CYz1aYz1WYz1udWxsLG99ZnVuY3Rp%0Ab24gcnUobix0KXtyZXR1cm4gdC55LW4ueXx8dC54LW4ueH1mdW5jdGlvbiB1dShu%0ALHQsZSl7cmV0dXJuKG4ueC1lLngpKih0Lnktbi55KS0obi54LXQueCkqKGUueS1u%0ALnkpfWZ1bmN0aW9uIGl1KG4pe3JldHVybiBuLnh9ZnVuY3Rpb24gb3Uobil7cmV0%0AdXJuIG4ueX1mdW5jdGlvbiBhdSgpe3JldHVybntsZWFmOiEwLG5vZGVzOltdLHBv%0AaW50Om51bGwseDpudWxsLHk6bnVsbH19ZnVuY3Rpb24gY3Uobix0LGUscix1LGkp%0Ae2lmKCFuKHQsZSxyLHUsaSkpe3ZhciBvPS41KihlK3UpLGE9LjUqKHIraSksYz10%0ALm5vZGVzO2NbMF0mJmN1KG4sY1swXSxlLHIsbyxhKSxjWzFdJiZjdShuLGNbMV0s%0AbyxyLHUsYSksY1syXSYmY3UobixjWzJdLGUsYSxvLGkpLGNbM10mJmN1KG4sY1sz%0AXSxvLGEsdSxpKX19ZnVuY3Rpb24gbHUobix0KXtuPVZvLnJnYihuKSx0PVZvLnJn%0AYih0KTt2YXIgZT1uLnIscj1uLmcsdT1uLmIsaT10LnItZSxvPXQuZy1yLGE9dC5i%0ALXU7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiIjIitkdChNYXRoLnJvdW5kKGUr%0AaSpuKSkrZHQoTWF0aC5yb3VuZChyK28qbikpK2R0KE1hdGgucm91bmQodSthKm4p%0AKX19ZnVuY3Rpb24gc3Uobix0KXt2YXIgZSxyPXt9LHU9e307Zm9yKGUgaW4gbill%0AIGluIHQ/cltlXT1ndShuW2VdLHRbZV0pOnVbZV09bltlXTtmb3IoZSBpbiB0KWUg%0AaW4gbnx8KHVbZV09dFtlXSk7cmV0dXJuIGZ1bmN0aW9uKG4pe2ZvcihlIGluIHIp%0AdVtlXT1yW2VdKG4pO3JldHVybiB1fX1mdW5jdGlvbiBmdShuLHQpe3JldHVybiB0%0ALT1uPStuLGZ1bmN0aW9uKGUpe3JldHVybiBuK3QqZX19ZnVuY3Rpb24gaHUobix0%0AKXt2YXIgZSxyLHUsaT1LYy5sYXN0SW5kZXg9UWMubGFzdEluZGV4PTAsbz0tMSxh%0APVtdLGM9W107Zm9yKG4rPSIiLHQrPSIiOyhlPUtjLmV4ZWMobikpJiYocj1RYy5l%0AeGVjKHQpKTspKHU9ci5pbmRleCk+aSYmKHU9dC5zbGljZShpLHUpLGFbb10/YVtv%0AXSs9dTphWysrb109dSksKGU9ZVswXSk9PT0ocj1yWzBdKT9hW29dP2Fbb10rPXI6%0AYVsrK29dPXI6KGFbKytvXT1udWxsLGMucHVzaCh7aTpvLHg6ZnUoZSxyKX0pKSxp%0APVFjLmxhc3RJbmRleDtyZXR1cm4gaTx0Lmxlbmd0aCYmKHU9dC5zbGljZShpKSxh%0AW29dP2Fbb10rPXU6YVsrK29dPXUpLGEubGVuZ3RoPDI/Y1swXT8odD1jWzBdLngs%0AZnVuY3Rpb24obil7cmV0dXJuIHQobikrIiJ9KTpmdW5jdGlvbigpe3JldHVybiB0%0AfToodD1jLmxlbmd0aCxmdW5jdGlvbihuKXtmb3IodmFyIGUscj0wO3Q+cjsrK3Ip%0AYVsoZT1jW3JdKS5pXT1lLngobik7cmV0dXJuIGEuam9pbigiIil9KX1mdW5jdGlv%0AbiBndShuLHQpe2Zvcih2YXIgZSxyPVZvLmludGVycG9sYXRvcnMubGVuZ3RoOy0t%0Acj49MCYmIShlPVZvLmludGVycG9sYXRvcnNbcl0obix0KSk7KTtyZXR1cm4gZX1m%0AdW5jdGlvbiBwdShuLHQpe3ZhciBlLHI9W10sdT1bXSxpPW4ubGVuZ3RoLG89dC5s%0AZW5ndGgsYT1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0aCk7Zm9yKGU9MDthPmU7%0AKytlKXIucHVzaChndShuW2VdLHRbZV0pKTtmb3IoO2k+ZTsrK2UpdVtlXT1uW2Vd%0AO2Zvcig7bz5lOysrZSl1W2VdPXRbZV07cmV0dXJuIGZ1bmN0aW9uKG4pe2Zvcihl%0APTA7YT5lOysrZSl1W2VdPXJbZV0obik7cmV0dXJuIHV9fWZ1bmN0aW9uIHZ1KG4p%0Ae3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMD49dD8wOnQ+PTE/MTpuKHQpfX1m%0AdW5jdGlvbiBkdShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDEtbigxLXQp%0AfX1mdW5jdGlvbiBtdShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLjUqKC41%0APnQ/bigyKnQpOjItbigyLTIqdCkpfX1mdW5jdGlvbiB5dShuKXtyZXR1cm4gbipu%0AfWZ1bmN0aW9uIHh1KG4pe3JldHVybiBuKm4qbn1mdW5jdGlvbiBNdShuKXtpZigw%0APj1uKXJldHVybiAwO2lmKG4+PTEpcmV0dXJuIDE7dmFyIHQ9bipuLGU9dCpuO3Jl%0AdHVybiA0KiguNT5uP2U6Myoobi10KStlLS43NSl9ZnVuY3Rpb24gX3Uobil7cmV0%0AdXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LG4pfX1mdW5jdGlvbiBi%0AdShuKXtyZXR1cm4gMS1NYXRoLmNvcyhuKmthKX1mdW5jdGlvbiB3dShuKXtyZXR1%0Acm4gTWF0aC5wb3coMiwxMCoobi0xKSl9ZnVuY3Rpb24gU3Uobil7cmV0dXJuIDEt%0ATWF0aC5zcXJ0KDEtbipuKX1mdW5jdGlvbiBrdShuLHQpe3ZhciBlO3JldHVybiBh%0Acmd1bWVudHMubGVuZ3RoPDImJih0PS40NSksYXJndW1lbnRzLmxlbmd0aD9lPXQv%0AU2EqTWF0aC5hc2luKDEvbik6KG49MSxlPXQvNCksZnVuY3Rpb24ocil7cmV0dXJu%0AIDErbipNYXRoLnBvdygyLC0xMCpyKSpNYXRoLnNpbigoci1lKSpTYS90KX19ZnVu%0AY3Rpb24gRXUobil7cmV0dXJuIG58fChuPTEuNzAxNTgpLGZ1bmN0aW9uKHQpe3Jl%0AdHVybiB0KnQqKChuKzEpKnQtbil9fWZ1bmN0aW9uIEF1KG4pe3JldHVybiAxLzIu%0ANzU+bj83LjU2MjUqbipuOjIvMi43NT5uPzcuNTYyNSoobi09MS41LzIuNzUpKm4r%0ALjc1OjIuNS8yLjc1Pm4/Ny41NjI1KihuLT0yLjI1LzIuNzUpKm4rLjkzNzU6Ny41%0ANjI1KihuLT0yLjYyNS8yLjc1KSpuKy45ODQzNzV9ZnVuY3Rpb24gQ3Uobix0KXtu%0APVZvLmhjbChuKSx0PVZvLmhjbCh0KTt2YXIgZT1uLmgscj1uLmMsdT1uLmwsaT10%0ALmgtZSxvPXQuYy1yLGE9dC5sLXU7cmV0dXJuIGlzTmFOKG8pJiYobz0wLHI9aXNO%0AYU4ocik/dC5jOnIpLGlzTmFOKGkpPyhpPTAsZT1pc05hTihlKT90Lmg6ZSk6aT4x%0AODA/aS09MzYwOi0xODA+aSYmKGkrPTM2MCksZnVuY3Rpb24obil7cmV0dXJuIG90%0AKGUraSpuLHIrbypuLHUrYSpuKSsiIn19ZnVuY3Rpb24gTnUobix0KXtuPVZvLmhz%0AbChuKSx0PVZvLmhzbCh0KTt2YXIgZT1uLmgscj1uLnMsdT1uLmwsaT10LmgtZSxv%0APXQucy1yLGE9dC5sLXU7cmV0dXJuIGlzTmFOKG8pJiYobz0wLHI9aXNOYU4ocik/%0AdC5zOnIpLGlzTmFOKGkpPyhpPTAsZT1pc05hTihlKT90Lmg6ZSk6aT4xODA/aS09%0AMzYwOi0xODA+aSYmKGkrPTM2MCksZnVuY3Rpb24obil7cmV0dXJuIHV0KGUraSpu%0ALHIrbypuLHUrYSpuKSsiIn19ZnVuY3Rpb24genUobix0KXtuPVZvLmxhYihuKSx0%0APVZvLmxhYih0KTt2YXIgZT1uLmwscj1uLmEsdT1uLmIsaT10LmwtZSxvPXQuYS1y%0ALGE9dC5iLXU7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBjdChlK2kqbixyK28q%0Abix1K2EqbikrIiJ9fWZ1bmN0aW9uIEx1KG4sdCl7cmV0dXJuIHQtPW4sZnVuY3Rp%0Ab24oZSl7cmV0dXJuIE1hdGgucm91bmQobit0KmUpfX1mdW5jdGlvbiBUdShuKXt2%0AYXIgdD1bbi5hLG4uYl0sZT1bbi5jLG4uZF0scj1SdSh0KSx1PXF1KHQsZSksaT1S%0AdShEdShlLHQsLXUpKXx8MDt0WzBdKmVbMV08ZVswXSp0WzFdJiYodFswXSo9LTEs%0AdFsxXSo9LTEscio9LTEsdSo9LTEpLHRoaXMucm90YXRlPShyP01hdGguYXRhbjIo%0AdFsxXSx0WzBdKTpNYXRoLmF0YW4yKC1lWzBdLGVbMV0pKSpOYSx0aGlzLnRyYW5z%0AbGF0ZT1bbi5lLG4uZl0sdGhpcy5zY2FsZT1bcixpXSx0aGlzLnNrZXc9aT9NYXRo%0ALmF0YW4yKHUsaSkqTmE6MH1mdW5jdGlvbiBxdShuLHQpe3JldHVybiBuWzBdKnRb%0AMF0rblsxXSp0WzFdfWZ1bmN0aW9uIFJ1KG4pe3ZhciB0PU1hdGguc3FydChxdShu%0ALG4pKTtyZXR1cm4gdCYmKG5bMF0vPXQsblsxXS89dCksdH1mdW5jdGlvbiBEdShu%0ALHQsZSl7cmV0dXJuIG5bMF0rPWUqdFswXSxuWzFdKz1lKnRbMV0sbn1mdW5jdGlv%0AbiBQdShuLHQpe3ZhciBlLHI9W10sdT1bXSxpPVZvLnRyYW5zZm9ybShuKSxvPVZv%0ALnRyYW5zZm9ybSh0KSxhPWkudHJhbnNsYXRlLGM9by50cmFuc2xhdGUsbD1pLnJv%0AdGF0ZSxzPW8ucm90YXRlLGY9aS5za2V3LGg9by5za2V3LGc9aS5zY2FsZSxwPW8u%0Ac2NhbGU7cmV0dXJuIGFbMF0hPWNbMF18fGFbMV0hPWNbMV0/KHIucHVzaCgidHJh%0AbnNsYXRlKCIsbnVsbCwiLCIsbnVsbCwiKSIpLHUucHVzaCh7aToxLHg6ZnUoYVsw%0AXSxjWzBdKX0se2k6Myx4OmZ1KGFbMV0sY1sxXSl9KSk6Y1swXXx8Y1sxXT9yLnB1%0Ac2goInRyYW5zbGF0ZSgiK2MrIikiKTpyLnB1c2goIiIpLGwhPXM/KGwtcz4xODA/%0Acys9MzYwOnMtbD4xODAmJihsKz0zNjApLHUucHVzaCh7aTpyLnB1c2goci5wb3Ao%0AKSsicm90YXRlKCIsbnVsbCwiKSIpLTIseDpmdShsLHMpfSkpOnMmJnIucHVzaChy%0ALnBvcCgpKyJyb3RhdGUoIitzKyIpIiksZiE9aD91LnB1c2goe2k6ci5wdXNoKHIu%0AcG9wKCkrInNrZXdYKCIsbnVsbCwiKSIpLTIseDpmdShmLGgpfSk6aCYmci5wdXNo%0AKHIucG9wKCkrInNrZXdYKCIraCsiKSIpLGdbMF0hPXBbMF18fGdbMV0hPXBbMV0/%0AKGU9ci5wdXNoKHIucG9wKCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpLHUu%0AcHVzaCh7aTplLTQseDpmdShnWzBdLHBbMF0pfSx7aTplLTIseDpmdShnWzFdLHBb%0AMV0pfSkpOigxIT1wWzBdfHwxIT1wWzFdKSYmci5wdXNoKHIucG9wKCkrInNjYWxl%0AKCIrcCsiKSIpLGU9dS5sZW5ndGgsZnVuY3Rpb24obil7Zm9yKHZhciB0LGk9LTE7%0AKytpPGU7KXJbKHQ9dVtpXSkuaV09dC54KG4pO3JldHVybiByLmpvaW4oIiIpfX1m%0AdW5jdGlvbiBVdShuLHQpe3JldHVybiB0PXQtKG49K24pPzEvKHQtbik6MCxmdW5j%0AdGlvbihlKXtyZXR1cm4oZS1uKSp0fX1mdW5jdGlvbiBqdShuLHQpe3JldHVybiB0%0APXQtKG49K24pPzEvKHQtbik6MCxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgo%0AMCxNYXRoLm1pbigxLChlLW4pKnQpKX19ZnVuY3Rpb24gSHUobil7Zm9yKHZhciB0%0APW4uc291cmNlLGU9bi50YXJnZXQscj1PdSh0LGUpLHU9W3RdO3QhPT1yOyl0PXQu%0AcGFyZW50LHUucHVzaCh0KTtmb3IodmFyIGk9dS5sZW5ndGg7ZSE9PXI7KXUuc3Bs%0AaWNlKGksMCxlKSxlPWUucGFyZW50O3JldHVybiB1fWZ1bmN0aW9uIEZ1KG4pe2Zv%0Acih2YXIgdD1bXSxlPW4ucGFyZW50O251bGwhPWU7KXQucHVzaChuKSxuPWUsZT1l%0ALnBhcmVudDtyZXR1cm4gdC5wdXNoKG4pLHR9ZnVuY3Rpb24gT3Uobix0KXtpZihu%0APT09dClyZXR1cm4gbjtmb3IodmFyIGU9RnUobikscj1GdSh0KSx1PWUucG9wKCks%0AaT1yLnBvcCgpLG89bnVsbDt1PT09aTspbz11LHU9ZS5wb3AoKSxpPXIucG9wKCk7%0AcmV0dXJuIG99ZnVuY3Rpb24gWXUobil7bi5maXhlZHw9Mn1mdW5jdGlvbiBJdShu%0AKXtuLmZpeGVkJj0tN31mdW5jdGlvbiBadShuKXtuLmZpeGVkfD00LG4ucHg9bi54%0ALG4ucHk9bi55fWZ1bmN0aW9uIFZ1KG4pe24uZml4ZWQmPS01fWZ1bmN0aW9uIFh1%0AKG4sdCxlKXt2YXIgcj0wLHU9MDtpZihuLmNoYXJnZT0wLCFuLmxlYWYpZm9yKHZh%0AciBpLG89bi5ub2RlcyxhPW8ubGVuZ3RoLGM9LTE7KytjPGE7KWk9b1tjXSxudWxs%0AIT1pJiYoWHUoaSx0LGUpLG4uY2hhcmdlKz1pLmNoYXJnZSxyKz1pLmNoYXJnZSpp%0ALmN4LHUrPWkuY2hhcmdlKmkuY3kpO2lmKG4ucG9pbnQpe24ubGVhZnx8KG4ucG9p%0AbnQueCs9TWF0aC5yYW5kb20oKS0uNSxuLnBvaW50LnkrPU1hdGgucmFuZG9tKCkt%0ALjUpO3ZhciBsPXQqZVtuLnBvaW50LmluZGV4XTtuLmNoYXJnZSs9bi5wb2ludENo%0AYXJnZT1sLHIrPWwqbi5wb2ludC54LHUrPWwqbi5wb2ludC55fW4uY3g9ci9uLmNo%0AYXJnZSxuLmN5PXUvbi5jaGFyZ2V9ZnVuY3Rpb24gJHUobix0KXtyZXR1cm4gVm8u%0AcmViaW5kKG4sdCwic29ydCIsImNoaWxkcmVuIiwidmFsdWUiKSxuLm5vZGVzPW4s%0Abi5saW5rcz1RdSxufWZ1bmN0aW9uIEJ1KG4sdCl7Zm9yKHZhciBlPVtuXTtudWxs%0AIT0obj1lLnBvcCgpKTspaWYodChuKSwodT1uLmNoaWxkcmVuKSYmKHI9dS5sZW5n%0AdGgpKWZvcih2YXIgcix1Oy0tcj49MDspZS5wdXNoKHVbcl0pfWZ1bmN0aW9uIFd1%0AKG4sdCl7Zm9yKHZhciBlPVtuXSxyPVtdO251bGwhPShuPWUucG9wKCkpOylpZihy%0ALnB1c2gobiksKGk9bi5jaGlsZHJlbikmJih1PWkubGVuZ3RoKSlmb3IodmFyIHUs%0AaSxvPS0xOysrbzx1OyllLnB1c2goaVtvXSk7Zm9yKDtudWxsIT0obj1yLnBvcCgp%0AKTspdChuKX1mdW5jdGlvbiBKdShuKXtyZXR1cm4gbi5jaGlsZHJlbn1mdW5jdGlv%0AbiBHdShuKXtyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBLdShuLHQpe3JldHVybiB0%0ALnZhbHVlLW4udmFsdWV9ZnVuY3Rpb24gUXUobil7cmV0dXJuIFZvLm1lcmdlKG4u%0AbWFwKGZ1bmN0aW9uKG4pe3JldHVybihuLmNoaWxkcmVufHxbXSkubWFwKGZ1bmN0%0AaW9uKHQpe3JldHVybntzb3VyY2U6bix0YXJnZXQ6dH19KX0pKX1mdW5jdGlvbiBu%0AaShuKXtyZXR1cm4gbi54fWZ1bmN0aW9uIHRpKG4pe3JldHVybiBuLnl9ZnVuY3Rp%0Ab24gZWkobix0LGUpe24ueTA9dCxuLnk9ZX1mdW5jdGlvbiByaShuKXtyZXR1cm4g%0AVm8ucmFuZ2Uobi5sZW5ndGgpfWZ1bmN0aW9uIHVpKG4pe2Zvcih2YXIgdD0tMSxl%0APW5bMF0ubGVuZ3RoLHI9W107Kyt0PGU7KXJbdF09MDtyZXR1cm4gcn1mdW5jdGlv%0AbiBpaShuKXtmb3IodmFyIHQsZT0xLHI9MCx1PW5bMF1bMV0saT1uLmxlbmd0aDtp%0APmU7KytlKSh0PW5bZV1bMV0pPnUmJihyPWUsdT10KTtyZXR1cm4gcn1mdW5jdGlv%0AbiBvaShuKXtyZXR1cm4gbi5yZWR1Y2UoYWksMCl9ZnVuY3Rpb24gYWkobix0KXty%0AZXR1cm4gbit0WzFdfWZ1bmN0aW9uIGNpKG4sdCl7cmV0dXJuIGxpKG4sTWF0aC5j%0AZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMisxKSl9ZnVuY3Rpb24gbGko%0Abix0KXtmb3IodmFyIGU9LTEscj0rblswXSx1PShuWzFdLXIpL3QsaT1bXTsrK2U8%0APXQ7KWlbZV09dSplK3I7cmV0dXJuIGl9ZnVuY3Rpb24gc2kobil7cmV0dXJuW1Zv%0ALm1pbihuKSxWby5tYXgobildfWZ1bmN0aW9uIGZpKG4sdCl7cmV0dXJuIG4udmFs%0AdWUtdC52YWx1ZX1mdW5jdGlvbiBoaShuLHQpe3ZhciBlPW4uX3BhY2tfbmV4dDtu%0ALl9wYWNrX25leHQ9dCx0Ll9wYWNrX3ByZXY9bix0Ll9wYWNrX25leHQ9ZSxlLl9w%0AYWNrX3ByZXY9dH1mdW5jdGlvbiBnaShuLHQpe24uX3BhY2tfbmV4dD10LHQuX3Bh%0AY2tfcHJldj1ufWZ1bmN0aW9uIHBpKG4sdCl7dmFyIGU9dC54LW4ueCxyPXQueS1u%0ALnksdT1uLnIrdC5yO3JldHVybi45OTkqdSp1PmUqZStyKnJ9ZnVuY3Rpb24gdmko%0Abil7ZnVuY3Rpb24gdChuKXtzPU1hdGgubWluKG4ueC1uLnIscyksZj1NYXRoLm1h%0AeChuLngrbi5yLGYpLGg9TWF0aC5taW4obi55LW4ucixoKSxnPU1hdGgubWF4KG4u%0AeStuLnIsZyl9aWYoKGU9bi5jaGlsZHJlbikmJihsPWUubGVuZ3RoKSl7dmFyIGUs%0Acix1LGksbyxhLGMsbCxzPTEvMCxmPS0xLzAsaD0xLzAsZz0tMS8wO2lmKGUuZm9y%0ARWFjaChkaSkscj1lWzBdLHIueD0tci5yLHIueT0wLHQociksbD4xJiYodT1lWzFd%0ALHUueD11LnIsdS55PTAsdCh1KSxsPjIpKWZvcihpPWVbMl0seGkocix1LGkpLHQo%0AaSksaGkocixpKSxyLl9wYWNrX3ByZXY9aSxoaShpLHUpLHU9ci5fcGFja19uZXh0%0ALG89MztsPm87bysrKXt4aShyLHUsaT1lW29dKTt2YXIgcD0wLHY9MSxkPTE7Zm9y%0AKGE9dS5fcGFja19uZXh0O2EhPT11O2E9YS5fcGFja19uZXh0LHYrKylpZihwaShh%0ALGkpKXtwPTE7YnJlYWt9aWYoMT09cClmb3IoYz1yLl9wYWNrX3ByZXY7YyE9PWEu%0AX3BhY2tfcHJldiYmIXBpKGMsaSk7Yz1jLl9wYWNrX3ByZXYsZCsrKTtwPyhkPnZ8%0AfHY9PWQmJnUucjxyLnI/Z2kocix1PWEpOmdpKHI9Yyx1KSxvLS0pOihoaShyLGkp%0ALHU9aSx0KGkpKX12YXIgbT0ocytmKS8yLHk9KGgrZykvMix4PTA7Zm9yKG89MDts%0APm87bysrKWk9ZVtvXSxpLngtPW0saS55LT15LHg9TWF0aC5tYXgoeCxpLnIrTWF0%0AaC5zcXJ0KGkueCppLngraS55KmkueSkpO24ucj14LGUuZm9yRWFjaChtaSl9fWZ1%0AbmN0aW9uIGRpKG4pe24uX3BhY2tfbmV4dD1uLl9wYWNrX3ByZXY9bn1mdW5jdGlv%0AbiBtaShuKXtkZWxldGUgbi5fcGFja19uZXh0LGRlbGV0ZSBuLl9wYWNrX3ByZXZ9%0AZnVuY3Rpb24geWkobix0LGUscil7dmFyIHU9bi5jaGlsZHJlbjtpZihuLng9dCs9%0AcipuLngsbi55PWUrPXIqbi55LG4ucio9cix1KWZvcih2YXIgaT0tMSxvPXUubGVu%0AZ3RoOysraTxvOyl5aSh1W2ldLHQsZSxyKX1mdW5jdGlvbiB4aShuLHQsZSl7dmFy%0AIHI9bi5yK2Uucix1PXQueC1uLngsaT10Lnktbi55O2lmKHImJih1fHxpKSl7dmFy%0AIG89dC5yK2UucixhPXUqdStpKmk7byo9byxyKj1yO3ZhciBjPS41KyhyLW8pLygy%0AKmEpLGw9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihyK2EpLShyLT1hKSpyLW8q%0AbykpLygyKmEpO2UueD1uLngrYyp1K2wqaSxlLnk9bi55K2MqaS1sKnV9ZWxzZSBl%0ALng9bi54K3IsZS55PW4ueX1mdW5jdGlvbiBNaShuLHQpe3JldHVybiBuLnBhcmVu%0AdD09dC5wYXJlbnQ/MToyfWZ1bmN0aW9uIF9pKG4pe3ZhciB0PW4uY2hpbGRyZW47%0AcmV0dXJuIHQubGVuZ3RoP3RbMF06bi50fWZ1bmN0aW9uIGJpKG4pe3ZhciB0LGU9%0Abi5jaGlsZHJlbjtyZXR1cm4odD1lLmxlbmd0aCk/ZVt0LTFdOm4udH1mdW5jdGlv%0AbiB3aShuLHQsZSl7dmFyIHI9ZS8odC5pLW4uaSk7dC5jLT1yLHQucys9ZSxuLmMr%0APXIsdC56Kz1lLHQubSs9ZX1mdW5jdGlvbiBTaShuKXtmb3IodmFyIHQsZT0wLHI9%0AMCx1PW4uY2hpbGRyZW4saT11Lmxlbmd0aDstLWk+PTA7KXQ9dVtpXSx0LnorPWUs%0AdC5tKz1lLGUrPXQucysocis9dC5jKX1mdW5jdGlvbiBraShuLHQsZSl7cmV0dXJu%0AIG4uYS5wYXJlbnQ9PT10LnBhcmVudD9uLmE6ZX1mdW5jdGlvbiBFaShuKXtyZXR1%0Acm4gMStWby5tYXgobixmdW5jdGlvbihuKXtyZXR1cm4gbi55fSl9ZnVuY3Rpb24g%0AQWkobil7cmV0dXJuIG4ucmVkdWNlKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4rdC54%0AfSwwKS9uLmxlbmd0aH1mdW5jdGlvbiBDaShuKXt2YXIgdD1uLmNoaWxkcmVuO3Jl%0AdHVybiB0JiZ0Lmxlbmd0aD9DaSh0WzBdKTpufWZ1bmN0aW9uIE5pKG4pe3ZhciB0%0ALGU9bi5jaGlsZHJlbjtyZXR1cm4gZSYmKHQ9ZS5sZW5ndGgpP05pKGVbdC0xXSk6%0Abn1mdW5jdGlvbiB6aShuKXtyZXR1cm57eDpuLngseTpuLnksZHg6bi5keCxkeTpu%0ALmR5fX1mdW5jdGlvbiBMaShuLHQpe3ZhciBlPW4ueCt0WzNdLHI9bi55K3RbMF0s%0AdT1uLmR4LXRbMV0tdFszXSxpPW4uZHktdFswXS10WzJdO3JldHVybiAwPnUmJihl%0AKz11LzIsdT0wKSwwPmkmJihyKz1pLzIsaT0wKSx7eDplLHk6cixkeDp1LGR5Oml9%0AfWZ1bmN0aW9uIFRpKG4pe3ZhciB0PW5bMF0sZT1uW24ubGVuZ3RoLTFdO3JldHVy%0AbiBlPnQ/W3QsZV06W2UsdF19ZnVuY3Rpb24gcWkobil7cmV0dXJuIG4ucmFuZ2VF%0AeHRlbnQ/bi5yYW5nZUV4dGVudCgpOlRpKG4ucmFuZ2UoKSl9ZnVuY3Rpb24gUmko%0Abix0LGUscil7dmFyIHU9ZShuWzBdLG5bMV0pLGk9cih0WzBdLHRbMV0pO3JldHVy%0AbiBmdW5jdGlvbihuKXtyZXR1cm4gaSh1KG4pKX19ZnVuY3Rpb24gRGkobix0KXt2%0AYXIgZSxyPTAsdT1uLmxlbmd0aC0xLGk9bltyXSxvPW5bdV07cmV0dXJuIGk+byYm%0AKGU9cixyPXUsdT1lLGU9aSxpPW8sbz1lKSxuW3JdPXQuZmxvb3IoaSksblt1XT10%0ALmNlaWwobyksbn1mdW5jdGlvbiBQaShuKXtyZXR1cm4gbj97Zmxvb3I6ZnVuY3Rp%0Ab24odCl7cmV0dXJuIE1hdGguZmxvb3IodC9uKSpufSxjZWlsOmZ1bmN0aW9uKHQp%0Ae3JldHVybiBNYXRoLmNlaWwodC9uKSpufX06c2x9ZnVuY3Rpb24gVWkobix0LGUs%0Acil7dmFyIHU9W10saT1bXSxvPTAsYT1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0%0AaCktMTtmb3IoblthXTxuWzBdJiYobj1uLnNsaWNlKCkucmV2ZXJzZSgpLHQ9dC5z%0AbGljZSgpLnJldmVyc2UoKSk7KytvPD1hOyl1LnB1c2goZShuW28tMV0sbltvXSkp%0ALGkucHVzaChyKHRbby0xXSx0W29dKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBl%0APVZvLmJpc2VjdChuLHQsMSxhKS0xO3JldHVybiBpW2VdKHVbZV0odCkpfX1mdW5j%0AdGlvbiBqaShuLHQsZSxyKXtmdW5jdGlvbiB1KCl7dmFyIHU9TWF0aC5taW4obi5s%0AZW5ndGgsdC5sZW5ndGgpPjI/VWk6UmksYz1yP2p1OlV1O3JldHVybiBvPXUobix0%0ALGMsZSksYT11KHQsbixjLGd1KSxpfWZ1bmN0aW9uIGkobil7cmV0dXJuIG8obil9%0AdmFyIG8sYTtyZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24obil7cmV0dXJuIGEobil9%0ALGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhu%0APXQubWFwKE51bWJlciksdSgpKTpufSxpLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sdSgpKTp0fSxpLnJhbmdlUm91bmQ9ZnVu%0AY3Rpb24obil7cmV0dXJuIGkucmFuZ2UobikuaW50ZXJwb2xhdGUoTHUpfSxpLmNs%0AYW1wPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sdSgp%0AKTpyfSxpLmludGVycG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu%0AbGVuZ3RoPyhlPW4sdSgpKTplfSxpLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBZ%0AaShuLHQpfSxpLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSWkobix0%0ALGUpfSxpLm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIEZpKG4sdCksdSgpfSxpLmNv%0AcHk9ZnVuY3Rpb24oKXtyZXR1cm4gamkobix0LGUscil9LHUoKX1mdW5jdGlvbiBI%0AaShuLHQpe3JldHVybiBWby5yZWJpbmQobix0LCJyYW5nZSIsInJhbmdlUm91bmQi%0ALCJpbnRlcnBvbGF0ZSIsImNsYW1wIil9ZnVuY3Rpb24gRmkobix0KXtyZXR1cm4g%0ARGkobixQaShPaShuLHQpWzJdKSl9ZnVuY3Rpb24gT2kobix0KXtudWxsPT10JiYo%0AdD0xMCk7dmFyIGU9VGkobikscj1lWzFdLWVbMF0sdT1NYXRoLnBvdygxMCxNYXRo%0ALmZsb29yKE1hdGgubG9nKHIvdCkvTWF0aC5MTjEwKSksaT10L3IqdTtyZXR1cm4u%0AMTU+PWk/dSo9MTA6LjM1Pj1pP3UqPTU6Ljc1Pj1pJiYodSo9MiksZVswXT1NYXRo%0ALmNlaWwoZVswXS91KSp1LGVbMV09TWF0aC5mbG9vcihlWzFdL3UpKnUrLjUqdSxl%0AWzJdPXUsZX1mdW5jdGlvbiBZaShuLHQpe3JldHVybiBWby5yYW5nZS5hcHBseShW%0AbyxPaShuLHQpKX1mdW5jdGlvbiBJaShuLHQsZSl7dmFyIHI9T2kobix0KTtpZihl%0AKXt2YXIgdT1LYS5leGVjKGUpO2lmKHUuc2hpZnQoKSwicyI9PT11WzhdKXt2YXIg%0AaT1Wby5mb3JtYXRQcmVmaXgoTWF0aC5tYXgoaWEoclswXSksaWEoclsxXSkpKTty%0AZXR1cm4gdVs3XXx8KHVbN109Ii4iK1ppKGkuc2NhbGUoclsyXSkpKSx1WzhdPSJm%0AIixlPVZvLmZvcm1hdCh1LmpvaW4oIiIpKSxmdW5jdGlvbihuKXtyZXR1cm4gZShp%0ALnNjYWxlKG4pKStpLnN5bWJvbH19dVs3XXx8KHVbN109Ii4iK1ZpKHVbOF0scikp%0ALGU9dS5qb2luKCIiKX1lbHNlIGU9IiwuIitaaShyWzJdKSsiZiI7cmV0dXJuIFZv%0ALmZvcm1hdChlKX1mdW5jdGlvbiBaaShuKXtyZXR1cm4tTWF0aC5mbG9vcihNYXRo%0ALmxvZyhuKS9NYXRoLkxOMTArLjAxKX1mdW5jdGlvbiBWaShuLHQpe3ZhciBlPVpp%0AKHRbMl0pO3JldHVybiBuIGluIGZsP01hdGguYWJzKGUtWmkoTWF0aC5tYXgoaWEo%0AdFswXSksaWEodFsxXSkpKSkrICsoImUiIT09bik6ZS0yKigiJSI9PT1uKX1mdW5j%0AdGlvbiBYaShuLHQsZSxyKXtmdW5jdGlvbiB1KG4pe3JldHVybihlP01hdGgubG9n%0AKDA+bj8wOm4pOi1NYXRoLmxvZyhuPjA/MDotbikpL01hdGgubG9nKHQpfWZ1bmN0%0AaW9uIGkobil7cmV0dXJuIGU/TWF0aC5wb3codCxuKTotTWF0aC5wb3codCwtbil9%0AZnVuY3Rpb24gbyh0KXtyZXR1cm4gbih1KHQpKX1yZXR1cm4gby5pbnZlcnQ9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGkobi5pbnZlcnQodCkpfSxvLmRvbWFpbj1mdW5jdGlv%0Abih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10WzBdPj0wLG4uZG9tYWlu%0AKChyPXQubWFwKE51bWJlcikpLm1hcCh1KSksbyk6cn0sby5iYXNlPWZ1bmN0aW9u%0AKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlLG4uZG9tYWluKHIubWFw%0AKHUpKSxvKTp0fSxvLm5pY2U9ZnVuY3Rpb24oKXt2YXIgdD1EaShyLm1hcCh1KSxl%0AP01hdGg6Z2wpO3JldHVybiBuLmRvbWFpbih0KSxyPXQubWFwKGkpLG99LG8udGlj%0Aa3M9ZnVuY3Rpb24oKXt2YXIgbj1UaShyKSxvPVtdLGE9blswXSxjPW5bMV0sbD1N%0AYXRoLmZsb29yKHUoYSkpLHM9TWF0aC5jZWlsKHUoYykpLGY9dCUxPzI6dDtpZihp%0Ac0Zpbml0ZShzLWwpKXtpZihlKXtmb3IoO3M+bDtsKyspZm9yKHZhciBoPTE7Zj5o%0AO2grKylvLnB1c2goaShsKSpoKTtvLnB1c2goaShsKSl9ZWxzZSBmb3Ioby5wdXNo%0AKGkobCkpO2wrKzxzOylmb3IodmFyIGg9Zi0xO2g+MDtoLS0pby5wdXNoKGkobCkq%0AaCk7Zm9yKGw9MDtvW2xdPGE7bCsrKTtmb3Iocz1vLmxlbmd0aDtvW3MtMV0+Yztz%0ALS0pO289by5zbGljZShsLHMpfXJldHVybiBvfSxvLnRpY2tGb3JtYXQ9ZnVuY3Rp%0Ab24obix0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gaGw7YXJndW1lbnRz%0ALmxlbmd0aDwyP3Q9aGw6ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVZvLmZvcm1h%0AdCh0KSk7dmFyIHIsYT1NYXRoLm1heCguMSxuL28udGlja3MoKS5sZW5ndGgpLGM9%0AZT8ocj0xZS0xMixNYXRoLmNlaWwpOihyPS0xZS0xMixNYXRoLmZsb29yKTtyZXR1%0Acm4gZnVuY3Rpb24obil7cmV0dXJuIG4vaShjKHUobikrcikpPD1hP3Qobik6IiJ9%0AfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gWGkobi5jb3B5KCksdCxlLHIpfSxI%0AaShvLG4pfWZ1bmN0aW9uICRpKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBu%0AKHUodCkpfXZhciB1PUJpKHQpLGk9QmkoMS90KTtyZXR1cm4gci5pbnZlcnQ9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGkobi5pbnZlcnQodCkpfSxyLmRvbWFpbj1mdW5jdGlv%0Abih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obi5kb21haW4oKGU9dC5tYXAo%0ATnVtYmVyKSkubWFwKHUpKSxyKTplfSxyLnRpY2tzPWZ1bmN0aW9uKG4pe3JldHVy%0AbiBZaShlLG4pfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gSWko%0AZSxuLHQpfSxyLm5pY2U9ZnVuY3Rpb24obil7cmV0dXJuIHIuZG9tYWluKEZpKGUs%0AbikpfSxyLmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyh1PUJpKHQ9byksaT1CaSgxL3QpLG4uZG9tYWluKGUubWFwKHUpKSxyKTp0%0AfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gJGkobi5jb3B5KCksdCxlKX0sSGko%0AcixuKX1mdW5jdGlvbiBCaShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDA+%0AdD8tTWF0aC5wb3coLXQsbik6TWF0aC5wb3codCxuKX19ZnVuY3Rpb24gV2kobix0%0AKXtmdW5jdGlvbiBlKGUpe3JldHVybiBpWygodS5nZXQoZSl8fCgicmFuZ2UiPT09%0AdC50P3Uuc2V0KGUsbi5wdXNoKGUpKTowLzApKS0xKSVpLmxlbmd0aF19ZnVuY3Rp%0Ab24gcih0LGUpe3JldHVybiBWby5yYW5nZShuLmxlbmd0aCkubWFwKGZ1bmN0aW9u%0AKG4pe3JldHVybiB0K2Uqbn0pfXZhciB1LGksYTtyZXR1cm4gZS5kb21haW49ZnVu%0AY3Rpb24ocil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG47bj1bXSx1PW5l%0AdyBvO2Zvcih2YXIgaSxhPS0xLGM9ci5sZW5ndGg7KythPGM7KXUuaGFzKGk9clth%0AXSl8fHUuc2V0KGksbi5wdXNoKGkpKTtyZXR1cm4gZVt0LnRdLmFwcGx5KGUsdC5h%0AKX0sZS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o%0AaT1uLGE9MCx0PXt0OiJyYW5nZSIsYTphcmd1bWVudHN9LGUpOml9LGUucmFuZ2VQ%0Ab2ludHM9ZnVuY3Rpb24odSxvKXthcmd1bWVudHMubGVuZ3RoPDImJihvPTApO3Zh%0AciBjPXVbMF0sbD11WzFdLHM9KGwtYykvKE1hdGgubWF4KDEsbi5sZW5ndGgtMSkr%0Abyk7cmV0dXJuIGk9cihuLmxlbmd0aDwyPyhjK2wpLzI6YytzKm8vMixzKSxhPTAs%0AdD17dDoicmFuZ2VQb2ludHMiLGE6YXJndW1lbnRzfSxlfSxlLnJhbmdlQmFuZHM9%0AZnVuY3Rpb24odSxvLGMpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKG89MCksYXJndW1l%0AbnRzLmxlbmd0aDwzJiYoYz1vKTt2YXIgbD11WzFdPHVbMF0scz11W2wtMF0sZj11%0AWzEtbF0saD0oZi1zKS8obi5sZW5ndGgtbysyKmMpO3JldHVybiBpPXIocytoKmMs%0AaCksbCYmaS5yZXZlcnNlKCksYT1oKigxLW8pLHQ9e3Q6InJhbmdlQmFuZHMiLGE6%0AYXJndW1lbnRzfSxlfSxlLnJhbmdlUm91bmRCYW5kcz1mdW5jdGlvbih1LG8sYyl7%0AYXJndW1lbnRzLmxlbmd0aDwyJiYobz0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihj%0APW8pO3ZhciBsPXVbMV08dVswXSxzPXVbbC0wXSxmPXVbMS1sXSxoPU1hdGguZmxv%0Ab3IoKGYtcykvKG4ubGVuZ3RoLW8rMipjKSksZz1mLXMtKG4ubGVuZ3RoLW8pKmg7%0AcmV0dXJuIGk9cihzK01hdGgucm91bmQoZy8yKSxoKSxsJiZpLnJldmVyc2UoKSxh%0APU1hdGgucm91bmQoaCooMS1vKSksdD17dDoicmFuZ2VSb3VuZEJhbmRzIixhOmFy%0AZ3VtZW50c30sZX0sZS5yYW5nZUJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZS5y%0AYW5nZUV4dGVudD1mdW5jdGlvbigpe3JldHVybiBUaSh0LmFbMF0pfSxlLmNvcHk9%0AZnVuY3Rpb24oKXtyZXR1cm4gV2kobix0KX0sZS5kb21haW4obil9ZnVuY3Rpb24g%0ASmkoZSxyKXtmdW5jdGlvbiB1KCl7dmFyIG49MCx0PXIubGVuZ3RoO2ZvcihvPVtd%0AOysrbjx0OylvW24tMV09Vm8ucXVhbnRpbGUoZSxuL3QpO3JldHVybiBpfWZ1bmN0%0AaW9uIGkobil7cmV0dXJuIGlzTmFOKG49K24pP3ZvaWQgMDpyW1ZvLmJpc2VjdChv%0ALG4pXX12YXIgbztyZXR1cm4gaS5kb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIGFy%0AZ3VtZW50cy5sZW5ndGg/KGU9ci5maWx0ZXIodCkuc29ydChuKSx1KCkpOmV9LGku%0AcmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bix1%0AKCkpOnJ9LGkucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGkuaW52ZXJ0%0ARXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBuPXIuaW5kZXhPZihuKSwwPm4/WzAv%0AMCwwLzBdOltuPjA/b1tuLTFdOmVbMF0sbjxvLmxlbmd0aD9vW25dOmVbZS5sZW5n%0AdGgtMV1dfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSmkoZSxyKX0sdSgpfWZ1%0AbmN0aW9uIEdpKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlW01hdGgubWF4%0AKDAsTWF0aC5taW4obyxNYXRoLmZsb29yKGkqKHQtbikpKSldfWZ1bmN0aW9uIHUo%0AKXtyZXR1cm4gaT1lLmxlbmd0aC8odC1uKSxvPWUubGVuZ3RoLTEscn12YXIgaSxv%0AO3JldHVybiByLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl%0Abmd0aD8obj0rZVswXSx0PStlW2UubGVuZ3RoLTFdLHUoKSk6W24sdF19LHIucmFu%0AZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix1KCkp%0AOmV9LHIuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0PWUuaW5kZXhP%0AZih0KSx0PTA+dD8wLzA6dC9pK24sW3QsdCsxL2ldfSxyLmNvcHk9ZnVuY3Rpb24o%0AKXtyZXR1cm4gR2kobix0LGUpfSx1KCl9ZnVuY3Rpb24gS2kobix0KXtmdW5jdGlv%0AbiBlKGUpe3JldHVybiBlPj1lP3RbVm8uYmlzZWN0KG4sZSldOnZvaWQgMH1yZXR1%0Acm4gZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/%0AKG49dCxlKTpufSxlLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu%0AbGVuZ3RoPyh0PW4sZSk6dH0sZS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oZSl7cmV0%0AdXJuIGU9dC5pbmRleE9mKGUpLFtuW2UtMV0sbltlXV19LGUuY29weT1mdW5jdGlv%0Abigpe3JldHVybiBLaShuLHQpfSxlfWZ1bmN0aW9uIFFpKG4pe2Z1bmN0aW9uIHQo%0Abil7cmV0dXJuK259cmV0dXJuIHQuaW52ZXJ0PXQsdC5kb21haW49dC5yYW5nZT1m%0AdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLm1hcCh0KSx0%0AKTpufSx0LnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBZaShuLHQpfSx0LnRpY2tG%0Ab3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSWkobix0LGUpfSx0LmNvcHk9ZnVu%0AY3Rpb24oKXtyZXR1cm4gUWkobil9LHR9ZnVuY3Rpb24gbm8obil7cmV0dXJuIG4u%0AaW5uZXJSYWRpdXN9ZnVuY3Rpb24gdG8obil7cmV0dXJuIG4ub3V0ZXJSYWRpdXN9%0AZnVuY3Rpb24gZW8obil7cmV0dXJuIG4uc3RhcnRBbmdsZX1mdW5jdGlvbiBybyhu%0AKXtyZXR1cm4gbi5lbmRBbmdsZX1mdW5jdGlvbiB1byhuKXtmdW5jdGlvbiB0KHQp%0Ae2Z1bmN0aW9uIG8oKXtsLnB1c2goIk0iLGkobihzKSxhKSl9Zm9yKHZhciBjLGw9%0AW10scz1bXSxmPS0xLGg9dC5sZW5ndGgsZz1idChlKSxwPWJ0KHIpOysrZjxoOyl1%0ALmNhbGwodGhpcyxjPXRbZl0sZik/cy5wdXNoKFsrZy5jYWxsKHRoaXMsYyxmKSwr%0AcC5jYWxsKHRoaXMsYyxmKV0pOnMubGVuZ3RoJiYobygpLHM9W10pO3JldHVybiBz%0ALmxlbmd0aCYmbygpLGwubGVuZ3RoP2wuam9pbigiIik6bnVsbH12YXIgZT1Tcixy%0APWtyLHU9U2UsaT1pbyxvPWkua2V5LGE9Ljc7cmV0dXJuIHQueD1mdW5jdGlvbihu%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHQpOmV9LHQueT1mdW5jdGlv%0AbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHQpOnJ9LHQuZGVmaW5l%0AZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1uLHQpOnV9%0ALHQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIG4/aT1uOihpPU1sLmdldChuKXx8aW8p%0ALmtleSx0KTpvfSx0LnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50%0Acy5sZW5ndGg/KGE9bix0KTphfSx0fWZ1bmN0aW9uIGlvKG4pe3JldHVybiBuLmpv%0AaW4oIkwiKX1mdW5jdGlvbiBvbyhuKXtyZXR1cm4gaW8obikrIloifWZ1bmN0aW9u%0AIGFvKG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgscj1uWzBdLHU9W3JbMF0sIiwi%0ALHJbMV1dOysrdDxlOyl1LnB1c2goIkgiLChyWzBdKyhyPW5bdF0pWzBdKS8yLCJW%0AIixyWzFdKTtyZXR1cm4gZT4xJiZ1LnB1c2goIkgiLHJbMF0pLHUuam9pbigiIil9%0AZnVuY3Rpb24gY28obil7Zm9yKHZhciB0PTAsZT1uLmxlbmd0aCxyPW5bMF0sdT1b%0AclswXSwiLCIsclsxXV07Kyt0PGU7KXUucHVzaCgiViIsKHI9blt0XSlbMV0sIkgi%0ALHJbMF0pO3JldHVybiB1LmpvaW4oIiIpfWZ1bmN0aW9uIGxvKG4pe2Zvcih2YXIg%0AdD0wLGU9bi5sZW5ndGgscj1uWzBdLHU9W3JbMF0sIiwiLHJbMV1dOysrdDxlOyl1%0ALnB1c2goIkgiLChyPW5bdF0pWzBdLCJWIixyWzFdKTtyZXR1cm4gdS5qb2luKCIi%0AKX1mdW5jdGlvbiBzbyhuLHQpe3JldHVybiBuLmxlbmd0aDw0P2lvKG4pOm5bMV0r%0AZ28obi5zbGljZSgxLG4ubGVuZ3RoLTEpLHBvKG4sdCkpfWZ1bmN0aW9uIGZvKG4s%0AdCl7cmV0dXJuIG4ubGVuZ3RoPDM/aW8obik6blswXStnbygobi5wdXNoKG5bMF0p%0ALG4pLHBvKFtuW24ubGVuZ3RoLTJdXS5jb25jYXQobixbblsxXV0pLHQpKX1mdW5j%0AdGlvbiBobyhuLHQpe3JldHVybiBuLmxlbmd0aDwzP2lvKG4pOm5bMF0rZ28obixw%0AbyhuLHQpKX1mdW5jdGlvbiBnbyhuLHQpe2lmKHQubGVuZ3RoPDF8fG4ubGVuZ3Ro%0AIT10Lmxlbmd0aCYmbi5sZW5ndGghPXQubGVuZ3RoKzIpcmV0dXJuIGlvKG4pO3Zh%0AciBlPW4ubGVuZ3RoIT10Lmxlbmd0aCxyPSIiLHU9blswXSxpPW5bMV0sbz10WzBd%0ALGE9byxjPTE7aWYoZSYmKHIrPSJRIisoaVswXS0yKm9bMF0vMykrIiwiKyhpWzFd%0ALTIqb1sxXS8zKSsiLCIraVswXSsiLCIraVsxXSx1PW5bMV0sYz0yKSx0Lmxlbmd0%0AaD4xKXthPXRbMV0saT1uW2NdLGMrKyxyKz0iQyIrKHVbMF0rb1swXSkrIiwiKyh1%0AWzFdK29bMV0pKyIsIisoaVswXS1hWzBdKSsiLCIrKGlbMV0tYVsxXSkrIiwiK2lb%0AMF0rIiwiK2lbMV07Zm9yKHZhciBsPTI7bDx0Lmxlbmd0aDtsKyssYysrKWk9bltj%0AXSxhPXRbbF0scis9IlMiKyhpWzBdLWFbMF0pKyIsIisoaVsxXS1hWzFdKSsiLCIr%0AaVswXSsiLCIraVsxXX1pZihlKXt2YXIgcz1uW2NdO3IrPSJRIisoaVswXSsyKmFb%0AMF0vMykrIiwiKyhpWzFdKzIqYVsxXS8zKSsiLCIrc1swXSsiLCIrc1sxXX1yZXR1%0Acm4gcn1mdW5jdGlvbiBwbyhuLHQpe2Zvcih2YXIgZSxyPVtdLHU9KDEtdCkvMixp%0APW5bMF0sbz1uWzFdLGE9MSxjPW4ubGVuZ3RoOysrYTxjOyllPWksaT1vLG89blth%0AXSxyLnB1c2goW3UqKG9bMF0tZVswXSksdSoob1sxXS1lWzFdKV0pO3JldHVybiBy%0AfWZ1bmN0aW9uIHZvKG4pe2lmKG4ubGVuZ3RoPDMpcmV0dXJuIGlvKG4pO3ZhciB0%0APTEsZT1uLmxlbmd0aCxyPW5bMF0sdT1yWzBdLGk9clsxXSxvPVt1LHUsdSwocj1u%0AWzFdKVswXV0sYT1baSxpLGksclsxXV0sYz1bdSwiLCIsaSwiTCIsTW8od2wsbyks%0AIiwiLE1vKHdsLGEpXTtmb3Iobi5wdXNoKG5bZS0xXSk7Kyt0PD1lOylyPW5bdF0s%0Aby5zaGlmdCgpLG8ucHVzaChyWzBdKSxhLnNoaWZ0KCksYS5wdXNoKHJbMV0pLF9v%0AKGMsbyxhKTtyZXR1cm4gbi5wb3AoKSxjLnB1c2goIkwiLHIpLGMuam9pbigiIil9%0AZnVuY3Rpb24gbW8obil7aWYobi5sZW5ndGg8NClyZXR1cm4gaW8obik7Zm9yKHZh%0AciB0LGU9W10scj0tMSx1PW4ubGVuZ3RoLGk9WzBdLG89WzBdOysrcjwzOyl0PW5b%0Acl0saS5wdXNoKHRbMF0pLG8ucHVzaCh0WzFdKTtmb3IoZS5wdXNoKE1vKHdsLGkp%0AKyIsIitNbyh3bCxvKSksLS1yOysrcjx1Oyl0PW5bcl0saS5zaGlmdCgpLGkucHVz%0AaCh0WzBdKSxvLnNoaWZ0KCksby5wdXNoKHRbMV0pLF9vKGUsaSxvKTtyZXR1cm4g%0AZS5qb2luKCIiKX1mdW5jdGlvbiB5byhuKXtmb3IodmFyIHQsZSxyPS0xLHU9bi5s%0AZW5ndGgsaT11KzQsbz1bXSxhPVtdOysrcjw0OyllPW5bciV1XSxvLnB1c2goZVsw%0AXSksYS5wdXNoKGVbMV0pO2Zvcih0PVtNbyh3bCxvKSwiLCIsTW8od2wsYSldLC0t%0AcjsrK3I8aTspZT1uW3IldV0sby5zaGlmdCgpLG8ucHVzaChlWzBdKSxhLnNoaWZ0%0AKCksYS5wdXNoKGVbMV0pLF9vKHQsbyxhKTtyZXR1cm4gdC5qb2luKCIiKX1mdW5j%0AdGlvbiB4byhuLHQpe3ZhciBlPW4ubGVuZ3RoLTE7aWYoZSlmb3IodmFyIHIsdSxp%0APW5bMF1bMF0sbz1uWzBdWzFdLGE9bltlXVswXS1pLGM9bltlXVsxXS1vLGw9LTE7%0AKytsPD1lOylyPW5bbF0sdT1sL2UsclswXT10KnJbMF0rKDEtdCkqKGkrdSphKSxy%0AWzFdPXQqclsxXSsoMS10KSoobyt1KmMpO3JldHVybiB2byhuKX1mdW5jdGlvbiBN%0AbyhuLHQpe3JldHVybiBuWzBdKnRbMF0rblsxXSp0WzFdK25bMl0qdFsyXStuWzNd%0AKnRbM119ZnVuY3Rpb24gX28obix0LGUpe24ucHVzaCgiQyIsTW8oX2wsdCksIiwi%0ALE1vKF9sLGUpLCIsIixNbyhibCx0KSwiLCIsTW8oYmwsZSksIiwiLE1vKHdsLHQp%0ALCIsIixNbyh3bCxlKSl9ZnVuY3Rpb24gYm8obix0KXtyZXR1cm4odFsxXS1uWzFd%0AKS8odFswXS1uWzBdKX1mdW5jdGlvbiB3byhuKXtmb3IodmFyIHQ9MCxlPW4ubGVu%0AZ3RoLTEscj1bXSx1PW5bMF0saT1uWzFdLG89clswXT1ibyh1LGkpOysrdDxlOyly%0AW3RdPShvKyhvPWJvKHU9aSxpPW5bdCsxXSkpKS8yO3JldHVybiByW3RdPW8scn1m%0AdW5jdGlvbiBTbyhuKXtmb3IodmFyIHQsZSxyLHUsaT1bXSxvPXdvKG4pLGE9LTEs%0AYz1uLmxlbmd0aC0xOysrYTxjOyl0PWJvKG5bYV0sblthKzFdKSxpYSh0KTxFYT9v%0AW2FdPW9bYSsxXT0wOihlPW9bYV0vdCxyPW9bYSsxXS90LHU9ZSplK3Iqcix1Pjkm%0AJih1PTMqdC9NYXRoLnNxcnQodSksb1thXT11KmUsb1thKzFdPXUqcikpO2Zvcihh%0APS0xOysrYTw9YzspdT0obltNYXRoLm1pbihjLGErMSldWzBdLW5bTWF0aC5tYXgo%0AMCxhLTEpXVswXSkvKDYqKDErb1thXSpvW2FdKSksaS5wdXNoKFt1fHwwLG9bYV0q%0AdXx8MF0pO3JldHVybiBpfWZ1bmN0aW9uIGtvKG4pe3JldHVybiBuLmxlbmd0aDwz%0AP2lvKG4pOm5bMF0rZ28obixTbyhuKSl9ZnVuY3Rpb24gRW8obil7Zm9yKHZhciB0%0ALGUscix1PS0xLGk9bi5sZW5ndGg7Kyt1PGk7KXQ9blt1XSxlPXRbMF0scj10WzFd%0AK3lsLHRbMF09ZSpNYXRoLmNvcyhyKSx0WzFdPWUqTWF0aC5zaW4ocik7cmV0dXJu%0AIG59ZnVuY3Rpb24gQW8obil7ZnVuY3Rpb24gdCh0KXtmdW5jdGlvbiBjKCl7di5w%0AdXNoKCJNIixhKG4obSksZikscyxsKG4oZC5yZXZlcnNlKCkpLGYpLCJaIil9Zm9y%0AKHZhciBoLGcscCx2PVtdLGQ9W10sbT1bXSx5PS0xLHg9dC5sZW5ndGgsTT1idChl%0AKSxfPWJ0KHUpLGI9ZT09PXI/ZnVuY3Rpb24oKXtyZXR1cm4gZ306YnQociksdz11%0APT09aT9mdW5jdGlvbigpe3JldHVybiBwfTpidChpKTsrK3k8eDspby5jYWxsKHRo%0AaXMsaD10W3ldLHkpPyhkLnB1c2goW2c9K00uY2FsbCh0aGlzLGgseSkscD0rXy5j%0AYWxsKHRoaXMsaCx5KV0pLG0ucHVzaChbK2IuY2FsbCh0aGlzLGgseSksK3cuY2Fs%0AbCh0aGlzLGgseSldKSk6ZC5sZW5ndGgmJihjKCksZD1bXSxtPVtdKTtyZXR1cm4g%0AZC5sZW5ndGgmJmMoKSx2Lmxlbmd0aD92LmpvaW4oIiIpOm51bGx9dmFyIGU9U3Is%0Acj1Tcix1PTAsaT1rcixvPVNlLGE9aW8sYz1hLmtleSxsPWEscz0iTCIsZj0uNzty%0AZXR1cm4gdC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhl%0APXI9bix0KTpyfSx0LngwPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyhlPW4sdCk6ZX0sdC54MT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRz%0ALmxlbmd0aD8ocj1uLHQpOnJ9LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1l%0AbnRzLmxlbmd0aD8odT1pPW4sdCk6aX0sdC55MD1mdW5jdGlvbihuKXtyZXR1cm4g%0AYXJndW1lbnRzLmxlbmd0aD8odT1uLHQpOnV9LHQueTE9ZnVuY3Rpb24obil7cmV0%0AdXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bix0KTppfSx0LmRlZmluZWQ9ZnVuY3Rp%0Ab24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bix0KTpvfSx0LmludGVy%0AcG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJm%0AdW5jdGlvbiI9PXR5cGVvZiBuP2E9bjooYT1NbC5nZXQobil8fGlvKS5rZXksbD1h%0ALnJldmVyc2V8fGEscz1hLmNsb3NlZD8iTSI6IkwiLHQpOmN9LHQudGVuc2lvbj1m%0AdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1uLHQpOmZ9LHR9%0AZnVuY3Rpb24gQ28obil7cmV0dXJuIG4ucmFkaXVzfWZ1bmN0aW9uIE5vKG4pe3Jl%0AdHVybltuLngsbi55XX1mdW5jdGlvbiB6byhuKXtyZXR1cm4gZnVuY3Rpb24oKXt2%0AYXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlPXRbMF0scj10WzFdK3lsO3Jl%0AdHVybltlKk1hdGguY29zKHIpLGUqTWF0aC5zaW4ocildfX1mdW5jdGlvbiBMbygp%0Ae3JldHVybiA2NH1mdW5jdGlvbiBUbygpe3JldHVybiJjaXJjbGUifWZ1bmN0aW9u%0AIHFvKG4pe3ZhciB0PU1hdGguc3FydChuL3dhKTtyZXR1cm4iTTAsIit0KyJBIit0%0AKyIsIit0KyIgMCAxLDEgMCwiKy10KyJBIit0KyIsIit0KyIgMCAxLDEgMCwiK3Qr%0AIloifWZ1bmN0aW9uIFJvKG4sdCl7cmV0dXJuIHNhKG4sTmwpLG4uaWQ9dCxufWZ1%0AbmN0aW9uIERvKG4sdCxlLHIpe3ZhciB1PW4uaWQ7cmV0dXJuIFAobiwiZnVuY3Rp%0Ab24iPT10eXBlb2YgZT9mdW5jdGlvbihuLGksbyl7bi5fX3RyYW5zaXRpb25fX1t1%0AXS50d2Vlbi5zZXQodCxyKGUuY2FsbChuLG4uX19kYXRhX18saSxvKSkpfTooZT1y%0AKGUpLGZ1bmN0aW9uKG4pe24uX190cmFuc2l0aW9uX19bdV0udHdlZW4uc2V0KHQs%0AZSl9KSl9ZnVuY3Rpb24gUG8obil7cmV0dXJuIG51bGw9PW4mJihuPSIiKSxmdW5j%0AdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gVW8obix0LGUscil7%0AdmFyIHU9bi5fX3RyYW5zaXRpb25fX3x8KG4uX190cmFuc2l0aW9uX189e2FjdGl2%0AZTowLGNvdW50OjB9KSxpPXVbZV07aWYoIWkpe3ZhciBhPXIudGltZTtpPXVbZV09%0Ae3R3ZWVuOm5ldyBvLHRpbWU6YSxlYXNlOnIuZWFzZSxkZWxheTpyLmRlbGF5LGR1%0AcmF0aW9uOnIuZHVyYXRpb259LCsrdS5jb3VudCxWby50aW1lcihmdW5jdGlvbihy%0AKXtmdW5jdGlvbiBvKHIpe3JldHVybiB1LmFjdGl2ZT5lP2woKToodS5hY3RpdmU9%0AZSxpLmV2ZW50JiZpLmV2ZW50LnN0YXJ0LmNhbGwobixzLHQpLGkudHdlZW4uZm9y%0ARWFjaChmdW5jdGlvbihlLHIpeyhyPXIuY2FsbChuLHMsdCkpJiZ2LnB1c2gocil9%0AKSxWby50aW1lcihmdW5jdGlvbigpe3JldHVybiBwLmM9YyhyfHwxKT9TZTpjLDF9%0ALDAsYSksdm9pZCAwKX1mdW5jdGlvbiBjKHIpe2lmKHUuYWN0aXZlIT09ZSlyZXR1%0Acm4gbCgpO2Zvcih2YXIgbz1yL2csYT1mKG8pLGM9di5sZW5ndGg7Yz4wOyl2Wy0t%0AY10uY2FsbChuLGEpO3JldHVybiBvPj0xPyhpLmV2ZW50JiZpLmV2ZW50LmVuZC5j%0AYWxsKG4scyx0KSxsKCkpOnZvaWQgMAp9ZnVuY3Rpb24gbCgpe3JldHVybi0tdS5j%0Ab3VudD9kZWxldGUgdVtlXTpkZWxldGUgbi5fX3RyYW5zaXRpb25fXywxfXZhciBz%0APW4uX19kYXRhX18sZj1pLmVhc2UsaD1pLmRlbGF5LGc9aS5kdXJhdGlvbixwPVdh%0ALHY9W107cmV0dXJuIHAudD1oK2Escj49aD9vKHItaCk6KHAuYz1vLHZvaWQgMCl9%0ALDAsYSl9fWZ1bmN0aW9uIGpvKG4sdCl7bi5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0%0AaW9uKG4pe3JldHVybiJ0cmFuc2xhdGUoIit0KG4pKyIsMCkifSl9ZnVuY3Rpb24g%0ASG8obix0KXtuLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24obil7cmV0dXJuInRy%0AYW5zbGF0ZSgwLCIrdChuKSsiKSJ9KX1mdW5jdGlvbiBGbyhuKXtyZXR1cm4gbi50%0Ab0lTT1N0cmluZygpfWZ1bmN0aW9uIE9vKG4sdCxlKXtmdW5jdGlvbiByKHQpe3Jl%0AdHVybiBuKHQpfWZ1bmN0aW9uIHUobixlKXt2YXIgcj1uWzFdLW5bMF0sdT1yL2Us%0AaT1Wby5iaXNlY3QoamwsdSk7cmV0dXJuIGk9PWpsLmxlbmd0aD9bdC55ZWFyLE9p%0AKG4ubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLzMxNTM2ZTZ9KSxlKVsyXV06aT90%0AW3UvamxbaS0xXTxqbFtpXS91P2ktMTppXTpbT2wsT2kobixlKVsyXV19cmV0dXJu%0AIHIuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBZbyhuLmludmVydCh0KSl9LHIu%0AZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuLmRv%0AbWFpbih0KSxyKTpuLmRvbWFpbigpLm1hcChZbyl9LHIubmljZT1mdW5jdGlvbihu%0ALHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIWlzTmFOKGUpJiYhbi5yYW5nZShlLFlv%0AKCtlKzEpLHQpLmxlbmd0aH12YXIgaT1yLmRvbWFpbigpLG89VGkoaSksYT1udWxs%0APT1uP3UobywxMCk6Im51bWJlciI9PXR5cGVvZiBuJiZ1KG8sbik7cmV0dXJuIGEm%0AJihuPWFbMF0sdD1hWzFdKSxyLmRvbWFpbihEaShpLHQ+MT97Zmxvb3I6ZnVuY3Rp%0Ab24odCl7Zm9yKDtlKHQ9bi5mbG9vcih0KSk7KXQ9WW8odC0xKTtyZXR1cm4gdH0s%0AY2VpbDpmdW5jdGlvbih0KXtmb3IoO2UodD1uLmNlaWwodCkpOyl0PVlvKCt0KzEp%0AO3JldHVybiB0fX06bikpfSxyLnRpY2tzPWZ1bmN0aW9uKG4sdCl7dmFyIGU9VGko%0Aci5kb21haW4oKSksaT1udWxsPT1uP3UoZSwxMCk6Im51bWJlciI9PXR5cGVvZiBu%0AP3UoZSxuKTohbi5yYW5nZSYmW3tyYW5nZTpufSx0XTtyZXR1cm4gaSYmKG49aVsw%0AXSx0PWlbMV0pLG4ucmFuZ2UoZVswXSxZbygrZVsxXSsxKSwxPnQ/MTp0KX0sci50%0AaWNrRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHIuY29weT1mdW5jdGlvbigp%0Ae3JldHVybiBPbyhuLmNvcHkoKSx0LGUpfSxIaShyLG4pfWZ1bmN0aW9uIFlvKG4p%0Ae3JldHVybiBuZXcgRGF0ZShuKX1mdW5jdGlvbiBJbyhuKXtyZXR1cm4gSlNPTi5w%0AYXJzZShuLnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gWm8obil7dmFyIHQ9Qm8uY3Jl%0AYXRlUmFuZ2UoKTtyZXR1cm4gdC5zZWxlY3ROb2RlKEJvLmJvZHkpLHQuY3JlYXRl%0AQ29udGV4dHVhbEZyYWdtZW50KG4ucmVzcG9uc2VUZXh0KX12YXIgVm89e3ZlcnNp%0Ab246IjMuNC4xMiJ9O0RhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1%0Acm4rbmV3IERhdGV9KTt2YXIgWG89W10uc2xpY2UsJG89ZnVuY3Rpb24obil7cmV0%0AdXJuIFhvLmNhbGwobil9LEJvPWRvY3VtZW50LFdvPUJvLmRvY3VtZW50RWxlbWVu%0AdCxKbz13aW5kb3c7dHJ5eyRvKFdvLmNoaWxkTm9kZXMpWzBdLm5vZGVUeXBlfWNh%0AdGNoKEdvKXskbz1mdW5jdGlvbihuKXtmb3IodmFyIHQ9bi5sZW5ndGgsZT1uZXcg%0AQXJyYXkodCk7dC0tOyllW3RdPW5bdF07cmV0dXJuIGV9fXRyeXtCby5jcmVhdGVF%0AbGVtZW50KCJkaXYiKS5zdHlsZS5zZXRQcm9wZXJ0eSgib3BhY2l0eSIsMCwiIil9%0AY2F0Y2goS28pe3ZhciBRbz1Kby5FbGVtZW50LnByb3RvdHlwZSxuYT1Rby5zZXRB%0AdHRyaWJ1dGUsdGE9UW8uc2V0QXR0cmlidXRlTlMsZWE9Sm8uQ1NTU3R5bGVEZWNs%0AYXJhdGlvbi5wcm90b3R5cGUscmE9ZWEuc2V0UHJvcGVydHk7UW8uc2V0QXR0cmli%0AdXRlPWZ1bmN0aW9uKG4sdCl7bmEuY2FsbCh0aGlzLG4sdCsiIil9LFFvLnNldEF0%0AdHJpYnV0ZU5TPWZ1bmN0aW9uKG4sdCxlKXt0YS5jYWxsKHRoaXMsbix0LGUrIiIp%0AfSxlYS5zZXRQcm9wZXJ0eT1mdW5jdGlvbihuLHQsZSl7cmEuY2FsbCh0aGlzLG4s%0AdCsiIixlKX19Vm8uYXNjZW5kaW5nPW4sVm8uZGVzY2VuZGluZz1mdW5jdGlvbihu%0ALHQpe3JldHVybiBuPnQ/LTE6dD5uPzE6dD49bj8wOjAvMH0sVm8ubWluPWZ1bmN0%0AaW9uKG4sdCl7dmFyIGUscix1PS0xLGk9bi5sZW5ndGg7aWYoMT09PWFyZ3VtZW50%0Acy5sZW5ndGgpe2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9blt1XSkmJmU+PWUpOyll%0APXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj1uW3VdKSYmZT5yJiYoZT1yKX1l%0AbHNle2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9dC5jYWxsKG4sblt1XSx1KSkmJmU+%0APWUpOyllPXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj10LmNhbGwobixuW3Vd%0ALHUpKSYmZT5yJiYoZT1yKX1yZXR1cm4gZX0sVm8ubWF4PWZ1bmN0aW9uKG4sdCl7%0AdmFyIGUscix1PS0xLGk9bi5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgp%0Ae2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9blt1XSkmJmU+PWUpOyllPXZvaWQgMDtm%0Ab3IoOysrdTxpOyludWxsIT0ocj1uW3VdKSYmcj5lJiYoZT1yKX1lbHNle2Zvcig7%0AKyt1PGkmJiEobnVsbCE9KGU9dC5jYWxsKG4sblt1XSx1KSkmJmU+PWUpOyllPXZv%0AaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj10LmNhbGwobixuW3VdLHUpKSYmcj5l%0AJiYoZT1yKX1yZXR1cm4gZX0sVm8uZXh0ZW50PWZ1bmN0aW9uKG4sdCl7dmFyIGUs%0Acix1LGk9LTEsbz1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9y%0AKDsrK2k8byYmIShudWxsIT0oZT11PW5baV0pJiZlPj1lKTspZT11PXZvaWQgMDtm%0Ab3IoOysraTxvOyludWxsIT0ocj1uW2ldKSYmKGU+ciYmKGU9cikscj51JiYodT1y%0AKSl9ZWxzZXtmb3IoOysraTxvJiYhKG51bGwhPShlPXU9dC5jYWxsKG4sbltpXSxp%0AKSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysraTxvOyludWxsIT0ocj10LmNhbGwo%0AbixuW2ldLGkpKSYmKGU+ciYmKGU9cikscj51JiYodT1yKSl9cmV0dXJuW2UsdV19%0ALFZvLnN1bT1mdW5jdGlvbihuLHQpe3ZhciBlLHI9MCx1PW4ubGVuZ3RoLGk9LTE7%0AaWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2k8dTspaXNOYU4oZT0rbltp%0AXSl8fChyKz1lKTtlbHNlIGZvcig7KytpPHU7KWlzTmFOKGU9K3QuY2FsbChuLG5b%0AaV0saSkpfHwocis9ZSk7cmV0dXJuIHJ9LFZvLm1lYW49ZnVuY3Rpb24obixlKXt2%0AYXIgcix1PTAsaT1uLmxlbmd0aCxvPS0xLGE9aTtpZigxPT09YXJndW1lbnRzLmxl%0Abmd0aClmb3IoOysrbzxpOyl0KHI9bltvXSk/dSs9cjotLWE7ZWxzZSBmb3IoOysr%0AbzxpOyl0KHI9ZS5jYWxsKG4sbltvXSxvKSk/dSs9cjotLWE7cmV0dXJuIGE/dS9h%0AOnZvaWQgMH0sVm8ucXVhbnRpbGU9ZnVuY3Rpb24obix0KXt2YXIgZT0obi5sZW5n%0AdGgtMSkqdCsxLHI9TWF0aC5mbG9vcihlKSx1PStuW3ItMV0saT1lLXI7cmV0dXJu%0AIGk/dStpKihuW3JdLXUpOnV9LFZvLm1lZGlhbj1mdW5jdGlvbihlLHIpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPjEmJihlPWUubWFwKHIpKSxlPWUuZmlsdGVyKHQp%0ALGUubGVuZ3RoP1ZvLnF1YW50aWxlKGUuc29ydChuKSwuNSk6dm9pZCAwfTt2YXIg%0AdWE9ZShuKTtWby5iaXNlY3RMZWZ0PXVhLmxlZnQsVm8uYmlzZWN0PVZvLmJpc2Vj%0AdFJpZ2h0PXVhLnJpZ2h0LFZvLmJpc2VjdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBl%0AKDE9PT10Lmxlbmd0aD9mdW5jdGlvbihlLHIpe3JldHVybiBuKHQoZSkscil9OnQp%0AfSxWby5zaHVmZmxlPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdCxlLHI9bi5sZW5ndGg7%0AcjspZT0wfE1hdGgucmFuZG9tKCkqci0tLHQ9bltyXSxuW3JdPW5bZV0sbltlXT10%0AO3JldHVybiBufSxWby5wZXJtdXRlPWZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPXQu%0AbGVuZ3RoLHI9bmV3IEFycmF5KGUpO2UtLTspcltlXT1uW3RbZV1dO3JldHVybiBy%0AfSxWby5wYWlycz1mdW5jdGlvbihuKXtmb3IodmFyIHQsZT0wLHI9bi5sZW5ndGgt%0AMSx1PW5bMF0saT1uZXcgQXJyYXkoMD5yPzA6cik7cj5lOylpW2VdPVt0PXUsdT1u%0AWysrZV1dO3JldHVybiBpfSxWby56aXA9ZnVuY3Rpb24oKXtpZighKHU9YXJndW1l%0AbnRzLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBuPS0xLHQ9Vm8ubWluKGFyZ3Vt%0AZW50cyxyKSxlPW5ldyBBcnJheSh0KTsrK248dDspZm9yKHZhciB1LGk9LTEsbz1l%0AW25dPW5ldyBBcnJheSh1KTsrK2k8dTspb1tpXT1hcmd1bWVudHNbaV1bbl07cmV0%0AdXJuIGV9LFZvLnRyYW5zcG9zZT1mdW5jdGlvbihuKXtyZXR1cm4gVm8uemlwLmFw%0AcGx5KFZvLG4pfSxWby5rZXlzPWZ1bmN0aW9uKG4pe3ZhciB0PVtdO2Zvcih2YXIg%0AZSBpbiBuKXQucHVzaChlKTtyZXR1cm4gdH0sVm8udmFsdWVzPWZ1bmN0aW9uKG4p%0Ae3ZhciB0PVtdO2Zvcih2YXIgZSBpbiBuKXQucHVzaChuW2VdKTtyZXR1cm4gdH0s%0AVm8uZW50cmllcz1mdW5jdGlvbihuKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gbil0%0ALnB1c2goe2tleTplLHZhbHVlOm5bZV19KTtyZXR1cm4gdH0sVm8ubWVyZ2U9ZnVu%0AY3Rpb24obil7Zm9yKHZhciB0LGUscix1PW4ubGVuZ3RoLGk9LTEsbz0wOysraTx1%0AOylvKz1uW2ldLmxlbmd0aDtmb3IoZT1uZXcgQXJyYXkobyk7LS11Pj0wOylmb3Io%0Acj1uW3VdLHQ9ci5sZW5ndGg7LS10Pj0wOyllWy0tb109clt0XTtyZXR1cm4gZX07%0AdmFyIGlhPU1hdGguYWJzO1ZvLnJhbmdlPWZ1bmN0aW9uKG4sdCxlKXtpZihhcmd1%0AbWVudHMubGVuZ3RoPDMmJihlPTEsYXJndW1lbnRzLmxlbmd0aDwyJiYodD1uLG49%0AMCkpLDEvMD09PSh0LW4pL2UpdGhyb3cgbmV3IEVycm9yKCJpbmZpbml0ZSByYW5n%0AZSIpO3ZhciByLGk9W10sbz11KGlhKGUpKSxhPS0xO2lmKG4qPW8sdCo9byxlKj1v%0ALDA+ZSlmb3IoOyhyPW4rZSorK2EpPnQ7KWkucHVzaChyL28pO2Vsc2UgZm9yKDso%0Acj1uK2UqKythKTx0OylpLnB1c2goci9vKTtyZXR1cm4gaX0sVm8ubWFwPWZ1bmN0%0AaW9uKG4pe3ZhciB0PW5ldyBvO2lmKG4gaW5zdGFuY2VvZiBvKW4uZm9yRWFjaChm%0AdW5jdGlvbihuLGUpe3Quc2V0KG4sZSl9KTtlbHNlIGZvcih2YXIgZSBpbiBuKXQu%0Ac2V0KGUsbltlXSk7cmV0dXJuIHR9LGkobyx7aGFzOmEsZ2V0OmZ1bmN0aW9uKG4p%0Ae3JldHVybiB0aGlzW29hK25dfSxzZXQ6ZnVuY3Rpb24obix0KXtyZXR1cm4gdGhp%0Ac1tvYStuXT10fSxyZW1vdmU6YyxrZXlzOmwsdmFsdWVzOmZ1bmN0aW9uKCl7dmFy%0AIG49W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0LGUpe24ucHVzaChl%0AKX0pLG59LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtyZXR1cm4gdGhpcy5m%0Ab3JFYWNoKGZ1bmN0aW9uKHQsZSl7bi5wdXNoKHtrZXk6dCx2YWx1ZTplfSl9KSxu%0AfSxzaXplOnMsZW1wdHk6Zixmb3JFYWNoOmZ1bmN0aW9uKG4pe2Zvcih2YXIgdCBp%0AbiB0aGlzKXQuY2hhckNvZGVBdCgwKT09PWFhJiZuLmNhbGwodGhpcyx0LnNsaWNl%0AKDEpLHRoaXNbdF0pfX0pO3ZhciBvYT0iXHgwMCIsYWE9b2EuY2hhckNvZGVBdCgw%0AKTtWby5uZXN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0LGEsYyl7aWYoYz49aS5s%0AZW5ndGgpcmV0dXJuIHI/ci5jYWxsKHUsYSk6ZT9hLnNvcnQoZSk6YTtmb3IodmFy%0AIGwscyxmLGgsZz0tMSxwPWEubGVuZ3RoLHY9aVtjKytdLGQ9bmV3IG87KytnPHA7%0AKShoPWQuZ2V0KGw9dihzPWFbZ10pKSk/aC5wdXNoKHMpOmQuc2V0KGwsW3NdKTty%0AZXR1cm4gdD8ocz10KCksZj1mdW5jdGlvbihlLHIpe3Muc2V0KGUsbih0LHIsYykp%0AfSk6KHM9e30sZj1mdW5jdGlvbihlLHIpe3NbZV09bih0LHIsYyl9KSxkLmZvckVh%0AY2goZiksc31mdW5jdGlvbiB0KG4sZSl7aWYoZT49aS5sZW5ndGgpcmV0dXJuIG47%0AdmFyIHI9W10sdT1hW2UrK107cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihuLHUp%0Ae3IucHVzaCh7a2V5Om4sdmFsdWVzOnQodSxlKX0pfSksdT9yLnNvcnQoZnVuY3Rp%0Ab24obix0KXtyZXR1cm4gdShuLmtleSx0LmtleSl9KTpyfXZhciBlLHIsdT17fSxp%0APVtdLGE9W107cmV0dXJuIHUubWFwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oZSx0%0ALDApfSx1LmVudHJpZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobihWby5tYXAsZSww%0AKSwwKX0sdS5rZXk9ZnVuY3Rpb24obil7cmV0dXJuIGkucHVzaChuKSx1fSx1LnNv%0AcnRLZXlzPWZ1bmN0aW9uKG4pe3JldHVybiBhW2kubGVuZ3RoLTFdPW4sdX0sdS5z%0Ab3J0VmFsdWVzPWZ1bmN0aW9uKG4pe3JldHVybiBlPW4sdX0sdS5yb2xsdXA9ZnVu%0AY3Rpb24obil7cmV0dXJuIHI9bix1fSx1fSxWby5zZXQ9ZnVuY3Rpb24obil7dmFy%0AIHQ9bmV3IGg7aWYobilmb3IodmFyIGU9MCxyPW4ubGVuZ3RoO3I+ZTsrK2UpdC5h%0AZGQobltlXSk7cmV0dXJuIHR9LGkoaCx7aGFzOmEsYWRkOmZ1bmN0aW9uKG4pe3Jl%0AdHVybiB0aGlzW29hK25dPSEwLG59LHJlbW92ZTpmdW5jdGlvbihuKXtyZXR1cm4g%0Abj1vYStuLG4gaW4gdGhpcyYmZGVsZXRlIHRoaXNbbl19LHZhbHVlczpsLHNpemU6%0AcyxlbXB0eTpmLGZvckVhY2g6ZnVuY3Rpb24obil7Zm9yKHZhciB0IGluIHRoaXMp%0AdC5jaGFyQ29kZUF0KDApPT09YWEmJm4uY2FsbCh0aGlzLHQuc2xpY2UoMSkpfX0p%0ALFZvLmJlaGF2aW9yPXt9LFZvLnJlYmluZD1mdW5jdGlvbihuLHQpe2Zvcih2YXIg%0AZSxyPTEsdT1hcmd1bWVudHMubGVuZ3RoOysrcjx1OyluW2U9YXJndW1lbnRzW3Jd%0AXT1nKG4sdCx0W2VdKTtyZXR1cm4gbn07dmFyIGNhPVsid2Via2l0IiwibXMiLCJt%0Ab3oiLCJNb3oiLCJvIiwiTyJdO1ZvLmRpc3BhdGNoPWZ1bmN0aW9uKCl7Zm9yKHZh%0AciBuPW5ldyBkLHQ9LTEsZT1hcmd1bWVudHMubGVuZ3RoOysrdDxlOyluW2FyZ3Vt%0AZW50c1t0XV09bShuKTtyZXR1cm4gbn0sZC5wcm90b3R5cGUub249ZnVuY3Rpb24o%0Abix0KXt2YXIgZT1uLmluZGV4T2YoIi4iKSxyPSIiO2lmKGU+PTAmJihyPW4uc2xp%0AY2UoZSsxKSxuPW4uc2xpY2UoMCxlKSksbilyZXR1cm4gYXJndW1lbnRzLmxlbmd0%0AaDwyP3RoaXNbbl0ub24ocik6dGhpc1tuXS5vbihyLHQpO2lmKDI9PT1hcmd1bWVu%0AdHMubGVuZ3RoKXtpZihudWxsPT10KWZvcihuIGluIHRoaXMpdGhpcy5oYXNPd25Q%0Acm9wZXJ0eShuKSYmdGhpc1tuXS5vbihyLG51bGwpO3JldHVybiB0aGlzfX0sVm8u%0AZXZlbnQ9bnVsbCxWby5yZXF1b3RlPWZ1bmN0aW9uKG4pe3JldHVybiBuLnJlcGxh%0AY2UobGEsIlxcJCYiKX07dmFyIGxhPS9bXFxcXlwkXCpcK1w/XHxcW1xdXChcKVwu%0AXHtcfV0vZyxzYT17fS5fX3Byb3RvX18/ZnVuY3Rpb24obix0KXtuLl9fcHJvdG9f%0AXz10fTpmdW5jdGlvbihuLHQpe2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXX0sZmE9%0AZnVuY3Rpb24obix0KXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yKG4pfSxoYT1mdW5j%0AdGlvbihuLHQpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3JBbGwobil9LGdhPVdvLm1h%0AdGNoZXN8fFdvW3AoV28sIm1hdGNoZXNTZWxlY3RvciIpXSxwYT1mdW5jdGlvbihu%0ALHQpe3JldHVybiBnYS5jYWxsKG4sdCl9OyJmdW5jdGlvbiI9PXR5cGVvZiBTaXp6%0AbGUmJihmYT1mdW5jdGlvbihuLHQpe3JldHVybiBTaXp6bGUobix0KVswXXx8bnVs%0AbH0saGE9U2l6emxlLHBhPVNpenpsZS5tYXRjaGVzU2VsZWN0b3IpLFZvLnNlbGVj%0AdGlvbj1mdW5jdGlvbigpe3JldHVybiB5YX07dmFyIHZhPVZvLnNlbGVjdGlvbi5w%0Acm90b3R5cGU9W107dmEuc2VsZWN0PWZ1bmN0aW9uKG4pe3ZhciB0LGUscix1LGk9%0AW107bj1iKG4pO2Zvcih2YXIgbz0tMSxhPXRoaXMubGVuZ3RoOysrbzxhOyl7aS5w%0AdXNoKHQ9W10pLHQucGFyZW50Tm9kZT0ocj10aGlzW29dKS5wYXJlbnROb2RlO2Zv%0Acih2YXIgYz0tMSxsPXIubGVuZ3RoOysrYzxsOykodT1yW2NdKT8odC5wdXNoKGU9%0Abi5jYWxsKHUsdS5fX2RhdGFfXyxjLG8pKSxlJiYiX19kYXRhX18iaW4gdSYmKGUu%0AX19kYXRhX189dS5fX2RhdGFfXykpOnQucHVzaChudWxsKX1yZXR1cm4gXyhpKX0s%0AdmEuc2VsZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0LGUscj1bXTtuPXcobik7Zm9y%0AKHZhciB1PS0xLGk9dGhpcy5sZW5ndGg7Kyt1PGk7KWZvcih2YXIgbz10aGlzW3Vd%0ALGE9LTEsYz1vLmxlbmd0aDsrK2E8YzspKGU9b1thXSkmJihyLnB1c2godD0kbyhu%0ALmNhbGwoZSxlLl9fZGF0YV9fLGEsdSkpKSx0LnBhcmVudE5vZGU9ZSk7cmV0dXJu%0AIF8ocil9O3ZhciBkYT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIs%0AeGh0bWw6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHhsaW5rOiJodHRw%0AOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3Jn%0AL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIw%0AMDAveG1sbnMvIn07Vm8ubnM9e3ByZWZpeDpkYSxxdWFsaWZ5OmZ1bmN0aW9uKG4p%0Ae3ZhciB0PW4uaW5kZXhPZigiOiIpLGU9bjtyZXR1cm4gdD49MCYmKGU9bi5zbGlj%0AZSgwLHQpLG49bi5zbGljZSh0KzEpKSxkYS5oYXNPd25Qcm9wZXJ0eShlKT97c3Bh%0AY2U6ZGFbZV0sbG9jYWw6bn06bn19LHZhLmF0dHI9ZnVuY3Rpb24obix0KXtpZihh%0Acmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2Ygbil7dmFyIGU9%0AdGhpcy5ub2RlKCk7cmV0dXJuIG49Vm8ubnMucXVhbGlmeShuKSxuLmxvY2FsP2Uu%0AZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTplLmdldEF0dHJpYnV0ZShu%0AKX1mb3IodCBpbiBuKXRoaXMuZWFjaChTKHQsblt0XSkpO3JldHVybiB0aGlzfXJl%0AdHVybiB0aGlzLmVhY2goUyhuLHQpKX0sdmEuY2xhc3NlZD1mdW5jdGlvbihuLHQp%0Ae2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXt2%0AYXIgZT10aGlzLm5vZGUoKSxyPShuPUEobikpLmxlbmd0aCx1PS0xO2lmKHQ9ZS5j%0AbGFzc0xpc3Qpe2Zvcig7Kyt1PHI7KWlmKCF0LmNvbnRhaW5zKG5bdV0pKXJldHVy%0AbiExfWVsc2UgZm9yKHQ9ZS5nZXRBdHRyaWJ1dGUoImNsYXNzIik7Kyt1PHI7KWlm%0AKCFFKG5bdV0pLnRlc3QodCkpcmV0dXJuITE7cmV0dXJuITB9Zm9yKHQgaW4gbil0%0AaGlzLmVhY2goQyh0LG5bdF0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNo%0AKEMobix0KSl9LHZhLnN0eWxlPWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1hcmd1bWVu%0AdHMubGVuZ3RoO2lmKDM+cil7aWYoInN0cmluZyIhPXR5cGVvZiBuKXsyPnImJih0%0APSIiKTtmb3IoZSBpbiBuKXRoaXMuZWFjaCh6KGUsbltlXSx0KSk7cmV0dXJuIHRo%0AaXN9aWYoMj5yKXJldHVybiBKby5nZXRDb21wdXRlZFN0eWxlKHRoaXMubm9kZSgp%0ALG51bGwpLmdldFByb3BlcnR5VmFsdWUobik7ZT0iIn1yZXR1cm4gdGhpcy5lYWNo%0AKHoobix0LGUpKX0sdmEucHJvcGVydHk9ZnVuY3Rpb24obix0KXtpZihhcmd1bWVu%0AdHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gdGhpcy5u%0Ab2RlKClbbl07Zm9yKHQgaW4gbil0aGlzLmVhY2goTCh0LG5bdF0pKTtyZXR1cm4g%0AdGhpc31yZXR1cm4gdGhpcy5lYWNoKEwobix0KSl9LHZhLnRleHQ9ZnVuY3Rpb24o%0Abil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCJmdW5jdGlvbiI9%0APXR5cGVvZiBuP2Z1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50%0Acyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT10PyIiOnR9Om51bGw9PW4/ZnVuY3Rp%0Ab24oKXt0aGlzLnRleHRDb250ZW50PSIifTpmdW5jdGlvbigpe3RoaXMudGV4dENv%0AbnRlbnQ9bn0pOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSx2YS5odG1sPWZ1bmN0%0AaW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rp%0Ab24iPT10eXBlb2Ygbj9mdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1%0AbWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PXQ/IiI6dH06bnVsbD09bj9mdW5j%0AdGlvbigpe3RoaXMuaW5uZXJIVE1MPSIifTpmdW5jdGlvbigpe3RoaXMuaW5uZXJI%0AVE1MPW59KTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHZhLmFwcGVuZD1mdW5jdGlv%0AbihuKXtyZXR1cm4gbj1UKG4pLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJu%0AIHRoaXMuYXBwZW5kQ2hpbGQobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LHZh%0ALmluc2VydD1mdW5jdGlvbihuLHQpe3JldHVybiBuPVQobiksdD1iKHQpLHRoaXMu%0Ac2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBw%0AbHkodGhpcyxhcmd1bWVudHMpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxs%0AKX0pfSx2YS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0%0AaW9uKCl7dmFyIG49dGhpcy5wYXJlbnROb2RlO24mJm4ucmVtb3ZlQ2hpbGQodGhp%0Acyl9KX0sdmEuZGF0YT1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUobixlKXt2YXIg%0Acix1LGksYT1uLmxlbmd0aCxmPWUubGVuZ3RoLGg9TWF0aC5taW4oYSxmKSxnPW5l%0AdyBBcnJheShmKSxwPW5ldyBBcnJheShmKSx2PW5ldyBBcnJheShhKTtpZih0KXt2%0AYXIgZCxtPW5ldyBvLHk9bmV3IG8seD1bXTtmb3Iocj0tMTsrK3I8YTspZD10LmNh%0AbGwodT1uW3JdLHUuX19kYXRhX18sciksbS5oYXMoZCk/dltyXT11Om0uc2V0KGQs%0AdSkseC5wdXNoKGQpO2ZvcihyPS0xOysrcjxmOylkPXQuY2FsbChlLGk9ZVtyXSxy%0AKSwodT1tLmdldChkKSk/KGdbcl09dSx1Ll9fZGF0YV9fPWkpOnkuaGFzKGQpfHwo%0AcFtyXT1xKGkpKSx5LnNldChkLGkpLG0ucmVtb3ZlKGQpO2ZvcihyPS0xOysrcjxh%0AOyltLmhhcyh4W3JdKSYmKHZbcl09bltyXSl9ZWxzZXtmb3Iocj0tMTsrK3I8aDsp%0AdT1uW3JdLGk9ZVtyXSx1Pyh1Ll9fZGF0YV9fPWksZ1tyXT11KTpwW3JdPXEoaSk7%0AZm9yKDtmPnI7KytyKXBbcl09cShlW3JdKTtmb3IoO2E+cjsrK3IpdltyXT1uW3Jd%0AfXAudXBkYXRlPWcscC5wYXJlbnROb2RlPWcucGFyZW50Tm9kZT12LnBhcmVudE5v%0AZGU9bi5wYXJlbnROb2RlLGMucHVzaChwKSxsLnB1c2goZykscy5wdXNoKHYpfXZh%0AciByLHUsaT0tMSxhPXRoaXMubGVuZ3RoO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtm%0Ab3Iobj1uZXcgQXJyYXkoYT0ocj10aGlzWzBdKS5sZW5ndGgpOysraTxhOykodT1y%0AW2ldKSYmKG5baV09dS5fX2RhdGFfXyk7cmV0dXJuIG59dmFyIGM9VShbXSksbD1f%0AKFtdKSxzPV8oW10pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKWZvcig7KytpPGE7%0AKWUocj10aGlzW2ldLG4uY2FsbChyLHIucGFyZW50Tm9kZS5fX2RhdGFfXyxpKSk7%0AZWxzZSBmb3IoOysraTxhOyllKHI9dGhpc1tpXSxuKTtyZXR1cm4gbC5lbnRlcj1m%0AdW5jdGlvbigpe3JldHVybiBjfSxsLmV4aXQ9ZnVuY3Rpb24oKXtyZXR1cm4gc30s%0AbH0sdmEuZGF0dW09ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/%0AdGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLG4pOnRoaXMucHJvcGVydHkoIl9fZGF0%0AYV9fIil9LHZhLmZpbHRlcj1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdT1bXTsiZnVu%0AY3Rpb24iIT10eXBlb2YgbiYmKG49UihuKSk7Zm9yKHZhciBpPTAsbz10aGlzLmxl%0Abmd0aDtvPmk7aSsrKXt1LnB1c2godD1bXSksdC5wYXJlbnROb2RlPShlPXRoaXNb%0AaV0pLnBhcmVudE5vZGU7Zm9yKHZhciBhPTAsYz1lLmxlbmd0aDtjPmE7YSsrKShy%0APWVbYV0pJiZuLmNhbGwocixyLl9fZGF0YV9fLGEsaSkmJnQucHVzaChyKX1yZXR1%0Acm4gXyh1KX0sdmEub3JkZXI9ZnVuY3Rpb24oKXtmb3IodmFyIG49LTEsdD10aGlz%0ALmxlbmd0aDsrK248dDspZm9yKHZhciBlLHI9dGhpc1tuXSx1PXIubGVuZ3RoLTEs%0AaT1yW3VdOy0tdT49MDspKGU9clt1XSkmJihpJiZpIT09ZS5uZXh0U2libGluZyYm%0AaS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLGkpLGk9ZSk7cmV0dXJuIHRoaXN9%0ALHZhLnNvcnQ9ZnVuY3Rpb24obil7bj1ELmFwcGx5KHRoaXMsYXJndW1lbnRzKTtm%0Ab3IodmFyIHQ9LTEsZT10aGlzLmxlbmd0aDsrK3Q8ZTspdGhpc1t0XS5zb3J0KG4p%0AO3JldHVybiB0aGlzLm9yZGVyKCl9LHZhLmVhY2g9ZnVuY3Rpb24obil7cmV0dXJu%0AIFAodGhpcyxmdW5jdGlvbih0LGUscil7bi5jYWxsKHQsdC5fX2RhdGFfXyxlLHIp%0AfSl9LHZhLmNhbGw9ZnVuY3Rpb24obil7dmFyIHQ9JG8oYXJndW1lbnRzKTtyZXR1%0Acm4gbi5hcHBseSh0WzBdPXRoaXMsdCksdGhpc30sdmEuZW1wdHk9ZnVuY3Rpb24o%0AKXtyZXR1cm4hdGhpcy5ub2RlKCl9LHZhLm5vZGU9ZnVuY3Rpb24oKXtmb3IodmFy%0AIG49MCx0PXRoaXMubGVuZ3RoO3Q+bjtuKyspZm9yKHZhciBlPXRoaXNbbl0scj0w%0ALHU9ZS5sZW5ndGg7dT5yO3IrKyl7dmFyIGk9ZVtyXTtpZihpKXJldHVybiBpfXJl%0AdHVybiBudWxsfSx2YS5zaXplPWZ1bmN0aW9uKCl7dmFyIG49MDtyZXR1cm4gUCh0%0AaGlzLGZ1bmN0aW9uKCl7KytufSksbn07dmFyIG1hPVtdO1ZvLnNlbGVjdGlvbi5l%0AbnRlcj1VLFZvLnNlbGVjdGlvbi5lbnRlci5wcm90b3R5cGU9bWEsbWEuYXBwZW5k%0APXZhLmFwcGVuZCxtYS5lbXB0eT12YS5lbXB0eSxtYS5ub2RlPXZhLm5vZGUsbWEu%0AY2FsbD12YS5jYWxsLG1hLnNpemU9dmEuc2l6ZSxtYS5zZWxlY3Q9ZnVuY3Rpb24o%0Abil7Zm9yKHZhciB0LGUscix1LGksbz1bXSxhPS0xLGM9dGhpcy5sZW5ndGg7Kyth%0APGM7KXtyPSh1PXRoaXNbYV0pLnVwZGF0ZSxvLnB1c2godD1bXSksdC5wYXJlbnRO%0Ab2RlPXUucGFyZW50Tm9kZTtmb3IodmFyIGw9LTEscz11Lmxlbmd0aDsrK2w8czsp%0AKGk9dVtsXSk/KHQucHVzaChyW2xdPWU9bi5jYWxsKHUucGFyZW50Tm9kZSxpLl9f%0AZGF0YV9fLGwsYSkpLGUuX19kYXRhX189aS5fX2RhdGFfXyk6dC5wdXNoKG51bGwp%0AfXJldHVybiBfKG8pfSxtYS5pbnNlcnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aDwyJiYodD1qKHRoaXMpKSx2YS5pbnNlcnQuY2FsbCh0aGlz%0ALG4sdCl9LHZhLnRyYW5zaXRpb249ZnVuY3Rpb24oKXtmb3IodmFyIG4sdCxlPWts%0AfHwrK3psLHI9W10sdT1FbHx8e3RpbWU6RGF0ZS5ub3coKSxlYXNlOk11LGRlbGF5%0AOjAsZHVyYXRpb246MjUwfSxpPS0xLG89dGhpcy5sZW5ndGg7KytpPG87KXtyLnB1%0Ac2gobj1bXSk7Zm9yKHZhciBhPXRoaXNbaV0sYz0tMSxsPWEubGVuZ3RoOysrYzxs%0AOykodD1hW2NdKSYmVW8odCxjLGUsdSksbi5wdXNoKHQpfXJldHVybiBSbyhyLGUp%0AfSx2YS5pbnRlcnJ1cHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKEgpfSxW%0Aby5zZWxlY3Q9ZnVuY3Rpb24obil7dmFyIHQ9WyJzdHJpbmciPT10eXBlb2Ygbj9m%0AYShuLEJvKTpuXTtyZXR1cm4gdC5wYXJlbnROb2RlPVdvLF8oW3RdKX0sVm8uc2Vs%0AZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0PSRvKCJzdHJpbmciPT10eXBlb2Ygbj9o%0AYShuLEJvKTpuKTtyZXR1cm4gdC5wYXJlbnROb2RlPVdvLF8oW3RdKX07dmFyIHlh%0APVZvLnNlbGVjdChXbyk7dmEub249ZnVuY3Rpb24obix0LGUpe3ZhciByPWFyZ3Vt%0AZW50cy5sZW5ndGg7aWYoMz5yKXtpZigic3RyaW5nIiE9dHlwZW9mIG4pezI+ciYm%0AKHQ9ITEpO2ZvcihlIGluIG4pdGhpcy5lYWNoKEYoZSxuW2VdLHQpKTtyZXR1cm4g%0AdGhpc31pZigyPnIpcmV0dXJuKHI9dGhpcy5ub2RlKClbIl9fb24iK25dKSYmci5f%0AO2U9ITF9cmV0dXJuIHRoaXMuZWFjaChGKG4sdCxlKSl9O3ZhciB4YT1Wby5tYXAo%0Ae21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSk7%0AeGEuZm9yRWFjaChmdW5jdGlvbihuKXsib24iK24gaW4gQm8mJnhhLnJlbW92ZShu%0AKX0pO3ZhciBNYT0ib25zZWxlY3RzdGFydCJpbiBCbz9udWxsOnAoV28uc3R5bGUs%0AInVzZXJTZWxlY3QiKSxfYT0wO1ZvLm1vdXNlPWZ1bmN0aW9uKG4pe3JldHVybiBa%0AKG4seCgpKX07dmFyIGJhPS9XZWJLaXQvLnRlc3QoSm8ubmF2aWdhdG9yLnVzZXJB%0AZ2VudCk/LTE6MDtWby50b3VjaD1mdW5jdGlvbihuLHQsZSl7aWYoYXJndW1lbnRz%0ALmxlbmd0aDwzJiYoZT10LHQ9eCgpLmNoYW5nZWRUb3VjaGVzKSx0KWZvcih2YXIg%0Acix1PTAsaT10Lmxlbmd0aDtpPnU7Kyt1KWlmKChyPXRbdV0pLmlkZW50aWZpZXI9%0APT1lKXJldHVybiBaKG4scil9LFZvLmJlaGF2aW9yLmRyYWc9ZnVuY3Rpb24oKXtm%0AdW5jdGlvbiBuKCl7dGhpcy5vbigibW91c2Vkb3duLmRyYWciLHUpLm9uKCJ0b3Vj%0AaHN0YXJ0LmRyYWciLGkpfWZ1bmN0aW9uIHQobix0LHUsaSxvKXtyZXR1cm4gZnVu%0AY3Rpb24oKXtmdW5jdGlvbiBhKCl7dmFyIG4sZSxyPXQoaCx2KTtyJiYobj1yWzBd%0ALXhbMF0sZT1yWzFdLXhbMV0scHw9bnxlLHg9cixnKHt0eXBlOiJkcmFnIix4OnJb%0AMF0rbFswXSx5OnJbMV0rbFsxXSxkeDpuLGR5OmV9KSl9ZnVuY3Rpb24gYygpe3Qo%0AaCx2KSYmKG0ub24oaStkLG51bGwpLm9uKG8rZCxudWxsKSx5KHAmJlZvLmV2ZW50%0ALnRhcmdldD09PWYpLGcoe3R5cGU6ImRyYWdlbmQifSkpfXZhciBsLHM9dGhpcyxm%0APVZvLmV2ZW50LnRhcmdldCxoPXMucGFyZW50Tm9kZSxnPWUub2Yocyxhcmd1bWVu%0AdHMpLHA9MCx2PW4oKSxkPSIuZHJhZyIrKG51bGw9PXY/IiI6Ii0iK3YpLG09Vm8u%0Ac2VsZWN0KHUoKSkub24oaStkLGEpLm9uKG8rZCxjKSx5PUkoKSx4PXQoaCx2KTty%0APyhsPXIuYXBwbHkocyxhcmd1bWVudHMpLGw9W2wueC14WzBdLGwueS14WzFdXSk6%0AbD1bMCwwXSxnKHt0eXBlOiJkcmFnc3RhcnQifSl9fXZhciBlPU0obiwiZHJhZyIs%0AImRyYWdzdGFydCIsImRyYWdlbmQiKSxyPW51bGwsdT10KHYsVm8ubW91c2UsJCwi%0AbW91c2Vtb3ZlIiwibW91c2V1cCIpLGk9dChWLFZvLnRvdWNoLFgsInRvdWNobW92%0AZSIsInRvdWNoZW5kIik7cmV0dXJuIG4ub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sVm8ucmViaW5kKG4sZSwib24i%0AKX0sVm8udG91Y2hlcz1mdW5jdGlvbihuLHQpe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPDImJih0PXgoKS50b3VjaGVzKSx0PyRvKHQpLm1hcChmdW5jdGlvbih0KXt2%0AYXIgZT1aKG4sdCk7cmV0dXJuIGUuaWRlbnRpZmllcj10LmlkZW50aWZpZXIsZX0p%0AOltdfTt2YXIgd2E9TWF0aC5QSSxTYT0yKndhLGthPXdhLzIsRWE9MWUtNixBYT1F%0AYSpFYSxDYT13YS8xODAsTmE9MTgwL3dhLHphPU1hdGguU1FSVDIsTGE9MixUYT00%0AO1ZvLmludGVycG9sYXRlWm9vbT1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUobil7%0AdmFyIHQ9bip5O2lmKG0pe3ZhciBlPVEodiksbz1pLyhMYSpoKSooZSpudCh6YSp0%0AK3YpLUsodikpO3JldHVybltyK28qbCx1K28qcyxpKmUvUSh6YSp0K3YpXX1yZXR1%0Acm5bcituKmwsdStuKnMsaSpNYXRoLmV4cCh6YSp0KV19dmFyIHI9blswXSx1PW5b%0AMV0saT1uWzJdLG89dFswXSxhPXRbMV0sYz10WzJdLGw9by1yLHM9YS11LGY9bCps%0AK3MqcyxoPU1hdGguc3FydChmKSxnPShjKmMtaSppK1RhKmYpLygyKmkqTGEqaCks%0AcD0oYypjLWkqaS1UYSpmKS8oMipjKkxhKmgpLHY9TWF0aC5sb2coTWF0aC5zcXJ0%0AKGcqZysxKS1nKSxkPU1hdGgubG9nKE1hdGguc3FydChwKnArMSktcCksbT1kLXYs%0AeT0obXx8TWF0aC5sb2coYy9pKSkvemE7cmV0dXJuIGUuZHVyYXRpb249MWUzKnks%0AZX0sVm8uYmVoYXZpb3Iuem9vbT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obil7bi5v%0AbihBLGwpLm9uKERhKyIuem9vbSIsZikub24oImRibGNsaWNrLnpvb20iLGgpLm9u%0AKHoscyl9ZnVuY3Rpb24gdChuKXtyZXR1cm5bKG5bMF0tUy54KS9TLmssKG5bMV0t%0AUy55KS9TLmtdfWZ1bmN0aW9uIGUobil7cmV0dXJuW25bMF0qUy5rK1MueCxuWzFd%0AKlMuaytTLnldfWZ1bmN0aW9uIHIobil7Uy5rPU1hdGgubWF4KEVbMF0sTWF0aC5t%0AaW4oRVsxXSxuKSl9ZnVuY3Rpb24gdShuLHQpe3Q9ZSh0KSxTLngrPW5bMF0tdFsw%0AXSxTLnkrPW5bMV0tdFsxXX1mdW5jdGlvbiBpKCl7XyYmXy5kb21haW4oeC5yYW5n%0AZSgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4obi1TLngpL1Mua30pLm1hcCh4Lmlu%0AdmVydCkpLHcmJncuZG9tYWluKGIucmFuZ2UoKS5tYXAoZnVuY3Rpb24obil7cmV0%0AdXJuKG4tUy55KS9TLmt9KS5tYXAoYi5pbnZlcnQpKX1mdW5jdGlvbiBvKG4pe24o%0Ae3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBhKG4pe2koKSxuKHt0eXBlOiJ6%0Ab29tIixzY2FsZTpTLmssdHJhbnNsYXRlOltTLngsUy55XX0pfWZ1bmN0aW9uIGMo%0Abil7bih7dHlwZToiem9vbWVuZCJ9KX1mdW5jdGlvbiBsKCl7ZnVuY3Rpb24gbigp%0Ae3M9MSx1KFZvLm1vdXNlKHIpLGgpLGEobCl9ZnVuY3Rpb24gZSgpe2Yub24oQyxu%0AdWxsKS5vbihOLG51bGwpLGcocyYmVm8uZXZlbnQudGFyZ2V0PT09aSksYyhsKX12%0AYXIgcj10aGlzLGk9Vm8uZXZlbnQudGFyZ2V0LGw9TC5vZihyLGFyZ3VtZW50cyks%0Acz0wLGY9Vm8uc2VsZWN0KEpvKS5vbihDLG4pLm9uKE4sZSksaD10KFZvLm1vdXNl%0AKHIpKSxnPUkoKTtILmNhbGwociksbyhsKX1mdW5jdGlvbiBzKCl7ZnVuY3Rpb24g%0Abigpe3ZhciBuPVZvLnRvdWNoZXMoZyk7cmV0dXJuIGg9Uy5rLG4uZm9yRWFjaChm%0AdW5jdGlvbihuKXtuLmlkZW50aWZpZXIgaW4gdiYmKHZbbi5pZGVudGlmaWVyXT10%0AKG4pKX0pLG59ZnVuY3Rpb24gZSgpe3ZhciB0PVZvLmV2ZW50LnRhcmdldDtWby5z%0AZWxlY3QodCkub24oTSxpKS5vbihfLGYpLGIucHVzaCh0KTtmb3IodmFyIGU9Vm8u%0AZXZlbnQuY2hhbmdlZFRvdWNoZXMsbz0wLGM9ZS5sZW5ndGg7Yz5vOysrbyl2W2Vb%0Ab10uaWRlbnRpZmllcl09bnVsbDt2YXIgbD1uKCkscz1EYXRlLm5vdygpO2lmKDE9%0APT1sLmxlbmd0aCl7aWYoNTAwPnMtbSl7dmFyIGg9bFswXSxnPXZbaC5pZGVudGlm%0AaWVyXTtyKDIqUy5rKSx1KGgsZykseSgpLGEocCl9bT1zfWVsc2UgaWYobC5sZW5n%0AdGg+MSl7dmFyIGg9bFswXSx4PWxbMV0sdz1oWzBdLXhbMF0saz1oWzFdLXhbMV07%0AZD13KncrayprfX1mdW5jdGlvbiBpKCl7Zm9yKHZhciBuLHQsZSxpLG89Vm8udG91%0AY2hlcyhnKSxjPTAsbD1vLmxlbmd0aDtsPmM7KytjLGk9bnVsbClpZihlPW9bY10s%0AaT12W2UuaWRlbnRpZmllcl0pe2lmKHQpYnJlYWs7bj1lLHQ9aX1pZihpKXt2YXIg%0Acz0ocz1lWzBdLW5bMF0pKnMrKHM9ZVsxXS1uWzFdKSpzLGY9ZCYmTWF0aC5zcXJ0%0AKHMvZCk7bj1bKG5bMF0rZVswXSkvMiwoblsxXStlWzFdKS8yXSx0PVsodFswXStp%0AWzBdKS8yLCh0WzFdK2lbMV0pLzJdLHIoZipoKX1tPW51bGwsdShuLHQpLGEocCl9%0AZnVuY3Rpb24gZigpe2lmKFZvLmV2ZW50LnRvdWNoZXMubGVuZ3RoKXtmb3IodmFy%0AIHQ9Vm8uZXZlbnQuY2hhbmdlZFRvdWNoZXMsZT0wLHI9dC5sZW5ndGg7cj5lOysr%0AZSlkZWxldGUgdlt0W2VdLmlkZW50aWZpZXJdO2Zvcih2YXIgdSBpbiB2KXJldHVy%0AbiB2b2lkIG4oKX1Wby5zZWxlY3RBbGwoYikub24oeCxudWxsKSx3Lm9uKEEsbCku%0Ab24oeixzKSxrKCksYyhwKX12YXIgaCxnPXRoaXMscD1MLm9mKGcsYXJndW1lbnRz%0AKSx2PXt9LGQ9MCx4PSIuem9vbS0iK1ZvLmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBd%0ALmlkZW50aWZpZXIsTT0idG91Y2htb3ZlIit4LF89InRvdWNoZW5kIit4LGI9W10s%0Adz1Wby5zZWxlY3QoZyksaz1JKCk7SC5jYWxsKGcpLGUoKSxvKHApLHcub24oQSxu%0AdWxsKS5vbih6LGUpfWZ1bmN0aW9uIGYoKXt2YXIgbj1MLm9mKHRoaXMsYXJndW1l%0AbnRzKTtkP2NsZWFyVGltZW91dChkKTooZz10KHA9dnx8Vm8ubW91c2UodGhpcykp%0ALEguY2FsbCh0aGlzKSxvKG4pKSxkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkPW51%0AbGwsYyhuKX0sNTApLHkoKSxyKE1hdGgucG93KDIsLjAwMipxYSgpKSpTLmspLHUo%0AcCxnKSxhKG4pfWZ1bmN0aW9uIGgoKXt2YXIgbj1MLm9mKHRoaXMsYXJndW1lbnRz%0AKSxlPVZvLm1vdXNlKHRoaXMpLGk9dChlKSxsPU1hdGgubG9nKFMuaykvTWF0aC5M%0ATjI7byhuKSxyKE1hdGgucG93KDIsVm8uZXZlbnQuc2hpZnRLZXk/TWF0aC5jZWls%0AKGwpLTE6TWF0aC5mbG9vcihsKSsxKSksdShlLGkpLGEobiksYyhuKX12YXIgZyxw%0ALHYsZCxtLHgsXyxiLHcsUz17eDowLHk6MCxrOjF9LGs9Wzk2MCw1MDBdLEU9UmEs%0AQT0ibW91c2Vkb3duLnpvb20iLEM9Im1vdXNlbW92ZS56b29tIixOPSJtb3VzZXVw%0ALnpvb20iLHo9InRvdWNoc3RhcnQuem9vbSIsTD1NKG4sInpvb21zdGFydCIsInpv%0Ab20iLCJ6b29tZW5kIik7cmV0dXJuIG4uZXZlbnQ9ZnVuY3Rpb24obil7bi5lYWNo%0AKGZ1bmN0aW9uKCl7dmFyIG49TC5vZih0aGlzLGFyZ3VtZW50cyksdD1TO2tsP1Zv%0ALnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuem9vbSIsZnVu%0AY3Rpb24oKXtTPXRoaXMuX19jaGFydF9ffHx7eDowLHk6MCxrOjF9LG8obil9KS50%0Ad2Vlbigiem9vbTp6b29tIixmdW5jdGlvbigpe3ZhciBlPWtbMF0scj1rWzFdLHU9%0AZS8yLGk9ci8yLG89Vm8uaW50ZXJwb2xhdGVab29tKFsodS1TLngpL1MuaywoaS1T%0ALnkpL1MuayxlL1Mua10sWyh1LXQueCkvdC5rLChpLXQueSkvdC5rLGUvdC5rXSk7%0AcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPW8odCksYz1lL3JbMl07dGhpcy5fX2No%0AYXJ0X189Uz17eDp1LXJbMF0qYyx5OmktclsxXSpjLGs6Y30sYShuKX19KS5lYWNo%0AKCJlbmQuem9vbSIsZnVuY3Rpb24oKXtjKG4pfSk6KHRoaXMuX19jaGFydF9fPVMs%0AbyhuKSxhKG4pLGMobikpfSl9LG4udHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhTPXt4Oit0WzBdLHk6K3RbMV0sazpTLmt9LGko%0AKSxuKTpbUy54LFMueV19LG4uc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KFM9e3g6Uy54LHk6Uy55LGs6K3R9LGkoKSxuKTpTLmt9LG4u%0Ac2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/%0AKEU9bnVsbD09dD9SYTpbK3RbMF0sK3RbMV1dLG4pOkV9LG4uY2VudGVyPWZ1bmN0%0AaW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXQmJlsrdFswXSwrdFsx%0AXV0sbik6dn0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyhrPXQmJlsrdFswXSwrdFsxXV0sbik6a30sbi54PWZ1bmN0aW9uKHQpe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPXQseD10LmNvcHkoKSxTPXt4OjAseTow%0ALGs6MX0sbik6X30sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyh3PXQsYj10LmNvcHkoKSxTPXt4OjAseTowLGs6MX0sbik6d30sVm8ucmVi%0AaW5kKG4sTCwib24iKX07dmFyIHFhLFJhPVswLDEvMF0sRGE9Im9ud2hlZWwiaW4g%0AQm8/KHFhPWZ1bmN0aW9uKCl7cmV0dXJuLVZvLmV2ZW50LmRlbHRhWSooVm8uZXZl%0AbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiBC%0Abz8ocWE9ZnVuY3Rpb24oKXtyZXR1cm4gVm8uZXZlbnQud2hlZWxEZWx0YX0sIm1v%0AdXNld2hlZWwiKToocWE9ZnVuY3Rpb24oKXtyZXR1cm4tVm8uZXZlbnQuZGV0YWls%0AfSwiTW96TW91c2VQaXhlbFNjcm9sbCIpO1ZvLmNvbG9yPWV0LGV0LnByb3RvdHlw%0AZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifSxWby5o%0Ac2w9cnQ7dmFyIFBhPXJ0LnByb3RvdHlwZT1uZXcgZXQ7UGEuYnJpZ2h0ZXI9ZnVu%0AY3Rpb24obil7cmV0dXJuIG49TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9u%0AOjEpLG5ldyBydCh0aGlzLmgsdGhpcy5zLHRoaXMubC9uKX0sUGEuZGFya2VyPWZ1%0AbmN0aW9uKG4pe3JldHVybiBuPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/%0AbjoxKSxuZXcgcnQodGhpcy5oLHRoaXMucyxuKnRoaXMubCl9LFBhLnJnYj1mdW5j%0AdGlvbigpe3JldHVybiB1dCh0aGlzLmgsdGhpcy5zLHRoaXMubCl9LFZvLmhjbD1p%0AdDt2YXIgVWE9aXQucHJvdG90eXBlPW5ldyBldDtVYS5icmlnaHRlcj1mdW5jdGlv%0AbihuKXtyZXR1cm4gbmV3IGl0KHRoaXMuaCx0aGlzLmMsTWF0aC5taW4oMTAwLHRo%0AaXMubCtqYSooYXJndW1lbnRzLmxlbmd0aD9uOjEpKSl9LFVhLmRhcmtlcj1mdW5j%0AdGlvbihuKXtyZXR1cm4gbmV3IGl0KHRoaXMuaCx0aGlzLmMsTWF0aC5tYXgoMCx0%0AaGlzLmwtamEqKGFyZ3VtZW50cy5sZW5ndGg/bjoxKSkpfSxVYS5yZ2I9ZnVuY3Rp%0Ab24oKXtyZXR1cm4gb3QodGhpcy5oLHRoaXMuYyx0aGlzLmwpLnJnYigpfSxWby5s%0AYWI9YXQ7dmFyIGphPTE4LEhhPS45NTA0NyxGYT0xLE9hPTEuMDg4ODMsWWE9YXQu%0AcHJvdG90eXBlPW5ldyBldDtZYS5icmlnaHRlcj1mdW5jdGlvbihuKXtyZXR1cm4g%0AbmV3IGF0KE1hdGgubWluKDEwMCx0aGlzLmwramEqKGFyZ3VtZW50cy5sZW5ndGg/%0AbjoxKSksdGhpcy5hLHRoaXMuYil9LFlhLmRhcmtlcj1mdW5jdGlvbihuKXtyZXR1%0Acm4gbmV3IGF0KE1hdGgubWF4KDAsdGhpcy5sLWphKihhcmd1bWVudHMubGVuZ3Ro%0AP246MSkpLHRoaXMuYSx0aGlzLmIpfSxZYS5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4g%0AY3QodGhpcy5sLHRoaXMuYSx0aGlzLmIpfSxWby5yZ2I9Z3Q7dmFyIElhPWd0LnBy%0Ab3RvdHlwZT1uZXcgZXQ7SWEuYnJpZ2h0ZXI9ZnVuY3Rpb24obil7bj1NYXRoLnBv%0AdyguNyxhcmd1bWVudHMubGVuZ3RoP246MSk7dmFyIHQ9dGhpcy5yLGU9dGhpcy5n%0ALHI9dGhpcy5iLHU9MzA7cmV0dXJuIHR8fGV8fHI/KHQmJnU+dCYmKHQ9dSksZSYm%0AdT5lJiYoZT11KSxyJiZ1PnImJihyPXUpLG5ldyBndChNYXRoLm1pbigyNTUsdC9u%0AKSxNYXRoLm1pbigyNTUsZS9uKSxNYXRoLm1pbigyNTUsci9uKSkpOm5ldyBndCh1%0ALHUsdSl9LElhLmRhcmtlcj1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLnBvdygu%0ANyxhcmd1bWVudHMubGVuZ3RoP246MSksbmV3IGd0KG4qdGhpcy5yLG4qdGhpcy5n%0ALG4qdGhpcy5iKX0sSWEuaHNsPWZ1bmN0aW9uKCl7cmV0dXJuIHl0KHRoaXMucix0%0AaGlzLmcsdGhpcy5iKX0sSWEudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iIyIr%0AZHQodGhpcy5yKStkdCh0aGlzLmcpK2R0KHRoaXMuYil9O3ZhciBaYT1Wby5tYXAo%0Ae2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2%0ANTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYx%0AMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3%0ANzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0%0ALGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNl%0AOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5m%0AbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQy%0AMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJr%0AZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoy%0ANTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21h%0AZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6%0AMTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFy%0Aa3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVi%0AbHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6%0AMzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxk%0AZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgy%0ANjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6%0AMTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0%0AMixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRl%0AOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6%0AODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0%0AMjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5y%0AZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6%0AMTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2%0ANSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRi%0AbHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1%0ANTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4%0AMjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0%0AcGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVu%0AOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6Nzgz%0AMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0%0ANzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMz%0AMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4%0AODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVk%0AaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNl%0AYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3By%0AaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlv%0AbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbTox%0ANjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2%0AYWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2%0AZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFu%0AZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2%0ANTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYs%0AcGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNo%0AcHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bTox%0ANDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlZDox%0ANjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2Fk%0AZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAz%0AMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYTox%0AMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1%0AZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNu%0Ab3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAs%0AdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86%0AMTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0%0AOjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVs%0AbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSk7WmEuZm9yRWFjaChm%0AdW5jdGlvbihuLHQpe1phLnNldChuLHB0KHQpKX0pLFZvLmZ1bmN0b3I9YnQsVm8u%0AeGhyPVN0KHd0KSxWby5kc3Y9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKG4sZSxp%0AKXthcmd1bWVudHMubGVuZ3RoPDMmJihpPWUsZT1udWxsKTt2YXIgbz1rdChuLHQs%0AbnVsbD09ZT9yOnUoZSksaSk7cmV0dXJuIG8ucm93PWZ1bmN0aW9uKG4pe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoP28ucmVzcG9uc2UobnVsbD09KGU9bik/cjp1KG4p%0AKTplfSxvfWZ1bmN0aW9uIHIobil7cmV0dXJuIGUucGFyc2Uobi5yZXNwb25zZVRl%0AeHQpfWZ1bmN0aW9uIHUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLnBh%0AcnNlKHQucmVzcG9uc2VUZXh0LG4pfX1mdW5jdGlvbiBpKHQpe3JldHVybiB0Lm1h%0AcChvKS5qb2luKG4pfWZ1bmN0aW9uIG8obil7cmV0dXJuIGEudGVzdChuKT8nIicr%0Abi5yZXBsYWNlKC9cIi9nLCciIicpKyciJzpufXZhciBhPW5ldyBSZWdFeHAoJ1si%0AJytuKyJcbl0iKSxjPW4uY2hhckNvZGVBdCgwKTtyZXR1cm4gZS5wYXJzZT1mdW5j%0AdGlvbihuLHQpe3ZhciByO3JldHVybiBlLnBhcnNlUm93cyhuLGZ1bmN0aW9uKG4s%0AZSl7aWYocilyZXR1cm4gcihuLGUtMSk7dmFyIHU9bmV3IEZ1bmN0aW9uKCJkIiwi%0AcmV0dXJuIHsiK24ubWFwKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIEpTT04uc3RyaW5n%0AaWZ5KG4pKyI6IGRbIit0KyJdIn0pLmpvaW4oIiwiKSsifSIpO3I9dD9mdW5jdGlv%0AbihuLGUpe3JldHVybiB0KHUobiksZSl9OnV9KX0sZS5wYXJzZVJvd3M9ZnVuY3Rp%0Ab24obix0KXtmdW5jdGlvbiBlKCl7aWYocz49bClyZXR1cm4gbztpZih1KXJldHVy%0AbiB1PSExLGk7dmFyIHQ9cztpZigzND09PW4uY2hhckNvZGVBdCh0KSl7Zm9yKHZh%0AciBlPXQ7ZSsrPGw7KWlmKDM0PT09bi5jaGFyQ29kZUF0KGUpKXtpZigzNCE9PW4u%0AY2hhckNvZGVBdChlKzEpKWJyZWFrOysrZX1zPWUrMjt2YXIgcj1uLmNoYXJDb2Rl%0AQXQoZSsxKTtyZXR1cm4gMTM9PT1yPyh1PSEwLDEwPT09bi5jaGFyQ29kZUF0KGUr%0AMikmJisrcyk6MTA9PT1yJiYodT0hMCksbi5zbGljZSh0KzEsZSkucmVwbGFjZSgv%0AIiIvZywnIicpfWZvcig7bD5zOyl7dmFyIHI9bi5jaGFyQ29kZUF0KHMrKyksYT0x%0AO2lmKDEwPT09cil1PSEwO2Vsc2UgaWYoMTM9PT1yKXU9ITAsMTA9PT1uLmNoYXJD%0Ab2RlQXQocykmJigrK3MsKythKTtlbHNlIGlmKHIhPT1jKWNvbnRpbnVlO3JldHVy%0AbiBuLnNsaWNlKHQscy1hKX1yZXR1cm4gbi5zbGljZSh0KX1mb3IodmFyIHIsdSxp%0APXt9LG89e30sYT1bXSxsPW4ubGVuZ3RoLHM9MCxmPTA7KHI9ZSgpKSE9PW87KXtm%0Ab3IodmFyIGg9W107ciE9PWkmJnIhPT1vOyloLnB1c2gocikscj1lKCk7KCF0fHwo%0AaD10KGgsZisrKSkpJiZhLnB1c2goaCl9cmV0dXJuIGF9LGUuZm9ybWF0PWZ1bmN0%0AaW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodFswXSkpcmV0dXJuIGUuZm9ybWF0Um93%0Acyh0KTt2YXIgcj1uZXcgaCx1PVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24o%0Abil7Zm9yKHZhciB0IGluIG4pci5oYXModCl8fHUucHVzaChyLmFkZCh0KSl9KSxb%0AdS5tYXAobykuam9pbihuKV0uY29uY2F0KHQubWFwKGZ1bmN0aW9uKHQpe3JldHVy%0AbiB1Lm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbyh0W25dKX0pLmpvaW4obil9KSku%0Aam9pbigiXG4iKX0sZS5mb3JtYXRSb3dzPWZ1bmN0aW9uKG4pe3JldHVybiBuLm1h%0AcChpKS5qb2luKCJcbiIpfSxlfSxWby5jc3Y9Vm8uZHN2KCIsIiwidGV4dC9jc3Yi%0AKSxWby50c3Y9Vm8uZHN2KCIJIiwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIp%0AO3ZhciBWYSxYYSwkYSxCYSxXYSxKYT1Kb1twKEpvLCJyZXF1ZXN0QW5pbWF0aW9u%0ARnJhbWUiKV18fGZ1bmN0aW9uKG4pe3NldFRpbWVvdXQobiwxNyl9O1ZvLnRpbWVy%0APWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoOzI+ciYmKHQ9%0AMCksMz5yJiYoZT1EYXRlLm5vdygpKTt2YXIgdT1lK3QsaT17YzpuLHQ6dSxmOiEx%0ALG46bnVsbH07WGE/WGEubj1pOlZhPWksWGE9aSwkYXx8KEJhPWNsZWFyVGltZW91%0AdChCYSksJGE9MSxKYShDdCkpfSxWby50aW1lci5mbHVzaD1mdW5jdGlvbigpe050%0AKCksenQoKX0sVm8ucm91bmQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gdD9NYXRoLnJv%0AdW5kKG4qKHQ9TWF0aC5wb3coMTAsdCkpKS90Ok1hdGgucm91bmQobil9O3ZhciBH%0AYT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0i%0ALCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXS5tYXAoVHQpO1ZvLmZvcm1hdFByZWZp%0AeD1mdW5jdGlvbihuLHQpe3ZhciBlPTA7cmV0dXJuIG4mJigwPm4mJihuKj0tMSks%0AdCYmKG49Vm8ucm91bmQobixMdChuLHQpKSksZT0xK01hdGguZmxvb3IoMWUtMTIr%0ATWF0aC5sb2cobikvTWF0aC5MTjEwKSxlPU1hdGgubWF4KC0yNCxNYXRoLm1pbigy%0ANCwzKk1hdGguZmxvb3IoKGUtMSkvMykpKSksR2FbOCtlLzNdfTt2YXIgS2E9Lyg/%0AOihbXntdKT8oWzw+PV5dKSk/KFsrXC0gXSk/KFskI10pPygwKT8oXGQrKT8oLCk/%0AKFwuLT9cZCspPyhbYS16JV0pPy9pLFFhPVZvLm1hcCh7YjpmdW5jdGlvbihuKXty%0AZXR1cm4gbi50b1N0cmluZygyKX0sYzpmdW5jdGlvbihuKXtyZXR1cm4gU3RyaW5n%0ALmZyb21DaGFyQ29kZShuKX0sbzpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmlu%0AZyg4KX0seDpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmluZygxNil9LFg6ZnVu%0AY3Rpb24obil7cmV0dXJuIG4udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LGc6%0AZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b1ByZWNpc2lvbih0KX0sZTpmdW5jdGlv%0AbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0%0AKXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxyOmZ1bmN0aW9uKG4sdCl7cmV0dXJuKG49%0AVm8ucm91bmQobixMdChuLHQpKSkudG9GaXhlZChNYXRoLm1heCgwLE1hdGgubWlu%0AKDIwLEx0KG4qKDErMWUtMTUpLHQpKSkpfX0pLG5jPVZvLnRpbWU9e30sdGM9RGF0%0AZTtEdC5wcm90b3R5cGU9e2dldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f%0ALmdldFVUQ0RhdGUoKX0sZ2V0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5n%0AZXRVVENEYXkoKX0sZ2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f%0ALmdldFVUQ0Z1bGxZZWFyKCl9LGdldEhvdXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRo%0AaXMuXy5nZXRVVENIb3VycygpfSxnZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXty%0AZXR1cm4gdGhpcy5fLmdldFVUQ01pbGxpc2Vjb25kcygpfSxnZXRNaW51dGVzOmZ1%0AbmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaW51dGVzKCl9LGdldE1vbnRo%0AOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNb250aCgpfSxnZXRTZWNv%0AbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENTZWNvbmRzKCl9LGdl%0AdFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFRpbWUoKX0sZ2V0VGlt%0AZXpvbmVPZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdmFsdWVPZjpmdW5jdGlv%0Abigpe3JldHVybiB0aGlzLl8udmFsdWVPZigpfSxzZXREYXRlOmZ1bmN0aW9uKCl7%0AZWMuc2V0VVRDRGF0ZS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RGF5OmZ1%0AbmN0aW9uKCl7ZWMuc2V0VVRDRGF5LmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxz%0AZXRGdWxsWWVhcjpmdW5jdGlvbigpe2VjLnNldFVUQ0Z1bGxZZWFyLmFwcGx5KHRo%0AaXMuXyxhcmd1bWVudHMpfSxzZXRIb3VyczpmdW5jdGlvbigpe2VjLnNldFVUQ0hv%0AdXJzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaWxsaXNlY29uZHM6ZnVu%0AY3Rpb24oKXtlYy5zZXRVVENNaWxsaXNlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3Vt%0AZW50cyl9LHNldE1pbnV0ZXM6ZnVuY3Rpb24oKXtlYy5zZXRVVENNaW51dGVzLmFw%0AcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNb250aDpmdW5jdGlvbigpe2VjLnNl%0AdFVUQ01vbnRoLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRTZWNvbmRzOmZ1%0AbmN0aW9uKCl7ZWMuc2V0VVRDU2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRz%0AKX0sc2V0VGltZTpmdW5jdGlvbigpe2VjLnNldFRpbWUuYXBwbHkodGhpcy5fLGFy%0AZ3VtZW50cyl9fTt2YXIgZWM9RGF0ZS5wcm90b3R5cGU7bmMueWVhcj1QdChmdW5j%0AdGlvbihuKXtyZXR1cm4gbj1uYy5kYXkobiksbi5zZXRNb250aCgwLDEpLG59LGZ1%0AbmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1%0AbmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KSxuYy55ZWFycz1uYy55%0AZWFyLnJhbmdlLG5jLnllYXJzLnV0Yz1uYy55ZWFyLnV0Yy5yYW5nZSxuYy5kYXk9%0AUHQoZnVuY3Rpb24obil7dmFyIHQ9bmV3IHRjKDJlMywwKTtyZXR1cm4gdC5zZXRG%0AdWxsWWVhcihuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgp%0AKSx0fSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSt0KX0sZnVu%0AY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF0ZSgpLTF9KSxuYy5kYXlzPW5jLmRheS5y%0AYW5nZSxuYy5kYXlzLnV0Yz1uYy5kYXkudXRjLnJhbmdlLG5jLmRheU9mWWVhcj1m%0AdW5jdGlvbihuKXt2YXIgdD1uYy55ZWFyKG4pO3JldHVybiBNYXRoLmZsb29yKChu%0ALXQtNmU0KihuLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNl%0AdCgpKSkvODY0ZTUpfSxbInN1bmRheSIsIm1vbmRheSIsInR1ZXNkYXkiLCJ3ZWRu%0AZXNkYXkiLCJ0aHVyc2RheSIsImZyaWRheSIsInNhdHVyZGF5Il0uZm9yRWFjaChm%0AdW5jdGlvbihuLHQpe3Q9Ny10O3ZhciBlPW5jW25dPVB0KGZ1bmN0aW9uKG4pe3Jl%0AdHVybihuPW5jLmRheShuKSkuc2V0RGF0ZShuLmdldERhdGUoKS0obi5nZXREYXko%0AKSt0KSU3KSxufSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSs3%0AKk1hdGguZmxvb3IodCkpfSxmdW5jdGlvbihuKXt2YXIgZT1uYy55ZWFyKG4pLmdl%0AdERheSgpO3JldHVybiBNYXRoLmZsb29yKChuYy5kYXlPZlllYXIobikrKGUrdCkl%0ANykvNyktKGUhPT10KX0pO25jW24rInMiXT1lLnJhbmdlLG5jW24rInMiXS51dGM9%0AZS51dGMucmFuZ2UsbmNbbisiT2ZZZWFyIl09ZnVuY3Rpb24obil7dmFyIGU9bmMu%0AeWVhcihuKS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigobmMuZGF5T2ZZZWFy%0AKG4pKyhlK3QpJTcpLzcpfX0pLG5jLndlZWs9bmMuc3VuZGF5LG5jLndlZWtzPW5j%0ALnN1bmRheS5yYW5nZSxuYy53ZWVrcy51dGM9bmMuc3VuZGF5LnV0Yy5yYW5nZSxu%0AYy53ZWVrT2ZZZWFyPW5jLnN1bmRheU9mWWVhcjt2YXIgcmM9eyItIjoiIixfOiIg%0AIiwwOiIwIn0sdWM9L15ccypcZCsvLGljPS9eJS87Vm8ubG9jYWxlPWZ1bmN0aW9u%0AKG4pe3JldHVybntudW1iZXJGb3JtYXQ6cXQobiksdGltZUZvcm1hdDpqdChuKX19%0AO3ZhciBvYz1Wby5sb2NhbGUoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3Jv%0AdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLGRhdGVUaW1lOiIlYSAlYiAlZSAl%0AWCAlWSIsZGF0ZToiJW0vJWQvJVkiLHRpbWU6IiVIOiVNOiVTIixwZXJpb2RzOlsi%0AQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2Vk%0AbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5%0AczpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1v%0AbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXki%0ALCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJO%0Ab3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJN%0AYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJO%0Ab3YiLCJEZWMiXX0pO1ZvLmZvcm1hdD1vYy5udW1iZXJGb3JtYXQsVm8uZ2VvPXt9%0ALGllLnByb3RvdHlwZT17czowLHQ6MCxhZGQ6ZnVuY3Rpb24obil7b2Uobix0aGlz%0ALnQsYWMpLG9lKGFjLnMsdGhpcy5zLHRoaXMpLHRoaXMucz90aGlzLnQrPWFjLnQ6%0AdGhpcy5zPWFjLnR9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSx2%0AYWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBhYz1uZXcgaWU7%0AVm8uZ2VvLnN0cmVhbT1mdW5jdGlvbihuLHQpe24mJmNjLmhhc093blByb3BlcnR5%0AKG4udHlwZSk/Y2Nbbi50eXBlXShuLHQpOmFlKG4sdCl9O3ZhciBjYz17RmVhdHVy%0AZTpmdW5jdGlvbihuLHQpe2FlKG4uZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0%0AaW9uOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uZmVhdHVyZXMscj0tMSx1PWUu%0AbGVuZ3RoOysrcjx1OylhZShlW3JdLmdlb21ldHJ5LHQpfX0sbGM9e1NwaGVyZTpm%0AdW5jdGlvbihuLHQpe3Quc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKG4sdCl7bj1u%0ALmNvb3JkaW5hdGVzLHQucG9pbnQoblswXSxuWzFdLG5bMl0pfSxNdWx0aVBvaW50%0AOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRpbmF0ZXMscj0tMSx1PWUu%0AbGVuZ3RoOysrcjx1OyluPWVbcl0sdC5wb2ludChuWzBdLG5bMV0sblsyXSl9LExp%0AbmVTdHJpbmc6ZnVuY3Rpb24obix0KXtjZShuLmNvb3JkaW5hdGVzLHQsMCl9LE11%0AbHRpTGluZVN0cmluZzpmdW5jdGlvbihuLHQpe2Zvcih2YXIgZT1uLmNvb3JkaW5h%0AdGVzLHI9LTEsdT1lLmxlbmd0aDsrK3I8dTspY2UoZVtyXSx0LDApfSxQb2x5Z29u%0AOmZ1bmN0aW9uKG4sdCl7bGUobi5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29u%0AOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRpbmF0ZXMscj0tMSx1PWUu%0AbGVuZ3RoOysrcjx1OylsZShlW3JdLHQpfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVu%0AY3Rpb24obix0KXtmb3IodmFyIGU9bi5nZW9tZXRyaWVzLHI9LTEsdT1lLmxlbmd0%0AaDsrK3I8dTspYWUoZVtyXSx0KX19O1ZvLmdlby5hcmVhPWZ1bmN0aW9uKG4pe3Jl%0AdHVybiBzYz0wLFZvLmdlby5zdHJlYW0obixoYyksc2N9O3ZhciBzYyxmYz1uZXcg%0AaWUsaGM9e3NwaGVyZTpmdW5jdGlvbigpe3NjKz00KndhfSxwb2ludDp2LGxpbmVT%0AdGFydDp2LGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmYy5yZXNl%0AdCgpLGhjLmxpbmVTdGFydD1zZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciBu%0APTIqZmM7c2MrPTA+bj80KndhK246bixoYy5saW5lU3RhcnQ9aGMubGluZUVuZD1o%0AYy5wb2ludD12fX07Vm8uZ2VvLmJvdW5kcz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4o%0Abix0KXt4LnB1c2goTT1bcz1uLGg9bl0pLGY+dCYmKGY9dCksdD5nJiYoZz10KX1m%0AdW5jdGlvbiB0KHQsZSl7dmFyIHI9ZmUoW3QqQ2EsZSpDYV0pO2lmKG0pe3ZhciB1%0APWdlKG0sciksaT1bdVsxXSwtdVswXSwwXSxvPWdlKGksdSk7ZGUobyksbz1tZShv%0AKTt2YXIgYz10LXAsbD1jPjA/MTotMSx2PW9bMF0qTmEqbCxkPWlhKGMpPjE4MDtp%0AZihkXih2PmwqcCYmbCp0PnYpKXt2YXIgeT1vWzFdKk5hO3k+ZyYmKGc9eSl9ZWxz%0AZSBpZih2PSh2KzM2MCklMzYwLTE4MCxkXih2PmwqcCYmbCp0PnYpKXt2YXIgeT0t%0Ab1sxXSpOYTtmPnkmJihmPXkpfWVsc2UgZj5lJiYoZj1lKSxlPmcmJihnPWUpO2Q/%0AcD50P2Eocyx0KT5hKHMsaCkmJihoPXQpOmEodCxoKT5hKHMsaCkmJihzPXQpOmg+%0APXM/KHM+dCYmKHM9dCksdD5oJiYoaD10KSk6dD5wP2Eocyx0KT5hKHMsaCkmJiho%0APXQpOmEodCxoKT5hKHMsaCkmJihzPXQpfWVsc2Ugbih0LGUpO209cixwPXR9ZnVu%0AY3Rpb24gZSgpe18ucG9pbnQ9dH1mdW5jdGlvbiByKCl7TVswXT1zLE1bMV09aCxf%0ALnBvaW50PW4sbT1udWxsfWZ1bmN0aW9uIHUobixlKXtpZihtKXt2YXIgcj1uLXA7%0AeSs9aWEocik+MTgwP3IrKHI+MD8zNjA6LTM2MCk6cn1lbHNlIHY9bixkPWU7aGMu%0AcG9pbnQobixlKSx0KG4sZSl9ZnVuY3Rpb24gaSgpe2hjLmxpbmVTdGFydCgpfWZ1%0AbmN0aW9uIG8oKXt1KHYsZCksaGMubGluZUVuZCgpLGlhKHkpPkVhJiYocz0tKGg9%0AMTgwKSksTVswXT1zLE1bMV09aCxtPW51bGx9ZnVuY3Rpb24gYShuLHQpe3JldHVy%0Abih0LT1uKTwwP3QrMzYwOnR9ZnVuY3Rpb24gYyhuLHQpe3JldHVybiBuWzBdLXRb%0AMF19ZnVuY3Rpb24gbChuLHQpe3JldHVybiB0WzBdPD10WzFdP3RbMF08PW4mJm48%0APXRbMV06bjx0WzBdfHx0WzFdPG59dmFyIHMsZixoLGcscCx2LGQsbSx5LHgsTSxf%0APXtwb2ludDpuLGxpbmVTdGFydDplLGxpbmVFbmQ6cixwb2x5Z29uU3RhcnQ6ZnVu%0AY3Rpb24oKXtfLnBvaW50PXUsXy5saW5lU3RhcnQ9aSxfLmxpbmVFbmQ9byx5PTAs%0AaGMucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtoYy5wb2x5%0AZ29uRW5kKCksXy5wb2ludD1uLF8ubGluZVN0YXJ0PWUsXy5saW5lRW5kPXIsMD5m%0AYz8ocz0tKGg9MTgwKSxmPS0oZz05MCkpOnk+RWE/Zz05MDotRWE+eSYmKGY9LTkw%0AKSxNWzBdPXMsTVsxXT1ofX07cmV0dXJuIGZ1bmN0aW9uKG4pe2c9aD0tKHM9Zj0x%0ALzApLHg9W10sVm8uZ2VvLnN0cmVhbShuLF8pO3ZhciB0PXgubGVuZ3RoO2lmKHQp%0Ae3guc29ydChjKTtmb3IodmFyIGUscj0xLHU9eFswXSxpPVt1XTt0PnI7KytyKWU9%0AeFtyXSxsKGVbMF0sdSl8fGwoZVsxXSx1KT8oYSh1WzBdLGVbMV0pPmEodVswXSx1%0AWzFdKSYmKHVbMV09ZVsxXSksYShlWzBdLHVbMV0pPmEodVswXSx1WzFdKSYmKHVb%0AMF09ZVswXSkpOmkucHVzaCh1PWUpO2Zvcih2YXIgbyxlLHA9LTEvMCx0PWkubGVu%0AZ3RoLTEscj0wLHU9aVt0XTt0Pj1yO3U9ZSwrK3IpZT1pW3JdLChvPWEodVsxXSxl%0AWzBdKSk+cCYmKHA9byxzPWVbMF0saD11WzFdKQp9cmV0dXJuIHg9TT1udWxsLDEv%0AMD09PXN8fDEvMD09PWY/W1swLzAsMC8wXSxbMC8wLDAvMF1dOltbcyxmXSxbaCxn%0AXV19fSgpLFZvLmdlby5jZW50cm9pZD1mdW5jdGlvbihuKXtnYz1wYz12Yz1kYz1t%0AYz15Yz14Yz1NYz1fYz1iYz13Yz0wLFZvLmdlby5zdHJlYW0obixTYyk7dmFyIHQ9%0AX2MsZT1iYyxyPXdjLHU9dCp0K2UqZStyKnI7cmV0dXJuIEFhPnUmJih0PXljLGU9%0AeGMscj1NYyxFYT5wYyYmKHQ9dmMsZT1kYyxyPW1jKSx1PXQqdCtlKmUrcipyLEFh%0APnUpP1swLzAsMC8wXTpbTWF0aC5hdGFuMihlLHQpKk5hLEcoci9NYXRoLnNxcnQo%0AdSkpKk5hXX07dmFyIGdjLHBjLHZjLGRjLG1jLHljLHhjLE1jLF9jLGJjLHdjLFNj%0APXtzcGhlcmU6dixwb2ludDp4ZSxsaW5lU3RhcnQ6X2UsbGluZUVuZDpiZSxwb2x5%0AZ29uU3RhcnQ6ZnVuY3Rpb24oKXtTYy5saW5lU3RhcnQ9d2V9LHBvbHlnb25FbmQ6%0AZnVuY3Rpb24oKXtTYy5saW5lU3RhcnQ9X2V9fSxrYz1DZShTZSxUZSxSZSxbLXdh%0ALC13YS8yXSksRWM9MWU5O1ZvLmdlby5jbGlwRXh0ZW50PWZ1bmN0aW9uKCl7dmFy%0AIG4sdCxlLHIsdSxpLG89e3N0cmVhbTpmdW5jdGlvbihuKXtyZXR1cm4gdSYmKHUu%0AdmFsaWQ9ITEpLHU9aShuKSx1LnZhbGlkPSEwLHV9LGV4dGVudDpmdW5jdGlvbihh%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1qZShuPSthWzBdWzBdLHQ9K2Fb%0AMF1bMV0sZT0rYVsxXVswXSxyPSthWzFdWzFdKSx1JiYodS52YWxpZD0hMSx1PW51%0AbGwpLG8pOltbbix0XSxbZSxyXV19fTtyZXR1cm4gby5leHRlbnQoW1swLDBdLFs5%0ANjAsNTAwXV0pfSwoVm8uZ2VvLmNvbmljRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0%0AdXJuIEZlKE9lKX0pLnJhdz1PZSxWby5nZW8uYWxiZXJzPWZ1bmN0aW9uKCl7cmV0%0AdXJuIFZvLmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbOTYsMF0pLmNlbnRl%0AcihbLS42LDM4LjddKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzAp%0AfSxWby5nZW8uYWxiZXJzVXNhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXt2YXIg%0AaT1uWzBdLG89blsxXTtyZXR1cm4gdD1udWxsLGUoaSxvKSx0fHwocihpLG8pLHQp%0AfHx1KGksbyksdH12YXIgdCxlLHIsdSxpPVZvLmdlby5hbGJlcnMoKSxvPVZvLmdl%0Aby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4%0ALjVdKS5wYXJhbGxlbHMoWzU1LDY1XSksYT1Wby5nZW8uY29uaWNFcXVhbEFyZWEo%0AKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4%0ALDE4XSksYz17cG9pbnQ6ZnVuY3Rpb24obixlKXt0PVtuLGVdfX07cmV0dXJuIG4u%0AaW52ZXJ0PWZ1bmN0aW9uKG4pe3ZhciB0PWkuc2NhbGUoKSxlPWkudHJhbnNsYXRl%0AKCkscj0oblswXS1lWzBdKS90LHU9KG5bMV0tZVsxXSkvdDtyZXR1cm4odT49LjEy%0AJiYuMjM0PnUmJnI+PS0uNDI1JiYtLjIxND5yP286dT49LjE2NiYmLjIzND51JiZy%0APj0tLjIxNCYmLS4xMTU+cj9hOmkpLmludmVydChuKX0sbi5zdHJlYW09ZnVuY3Rp%0Ab24obil7dmFyIHQ9aS5zdHJlYW0obiksZT1vLnN0cmVhbShuKSxyPWEuc3RyZWFt%0AKG4pO3JldHVybntwb2ludDpmdW5jdGlvbihuLHUpe3QucG9pbnQobix1KSxlLnBv%0AaW50KG4sdSksci5wb2ludChuLHUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0LnNwaGVy%0AZSgpLGUuc3BoZXJlKCksci5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7%0AdC5saW5lU3RhcnQoKSxlLmxpbmVTdGFydCgpLHIubGluZVN0YXJ0KCl9LGxpbmVF%0AbmQ6ZnVuY3Rpb24oKXt0LmxpbmVFbmQoKSxlLmxpbmVFbmQoKSxyLmxpbmVFbmQo%0AKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dC5wb2x5Z29uU3RhcnQoKSxlLnBv%0AbHlnb25TdGFydCgpLHIucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rp%0Ab24oKXt0LnBvbHlnb25FbmQoKSxlLnBvbHlnb25FbmQoKSxyLnBvbHlnb25FbmQo%0AKX19fSxuLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxl%0Abmd0aD8oaS5wcmVjaXNpb24odCksby5wcmVjaXNpb24odCksYS5wcmVjaXNpb24o%0AdCksbik6aS5wcmVjaXNpb24oKX0sbi5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4g%0AYXJndW1lbnRzLmxlbmd0aD8oaS5zY2FsZSh0KSxvLnNjYWxlKC4zNSp0KSxhLnNj%0AYWxlKHQpLG4udHJhbnNsYXRlKGkudHJhbnNsYXRlKCkpKTppLnNjYWxlKCl9LG4u%0AdHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVy%0AbiBpLnRyYW5zbGF0ZSgpO3ZhciBsPWkuc2NhbGUoKSxzPSt0WzBdLGY9K3RbMV07%0AcmV0dXJuIGU9aS50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW3MtLjQ1NSpsLGYt%0ALjIzOCpsXSxbcysuNDU1KmwsZisuMjM4KmxdXSkuc3RyZWFtKGMpLnBvaW50LHI9%0Aby50cmFuc2xhdGUoW3MtLjMwNypsLGYrLjIwMSpsXSkuY2xpcEV4dGVudChbW3Mt%0ALjQyNSpsK0VhLGYrLjEyKmwrRWFdLFtzLS4yMTQqbC1FYSxmKy4yMzQqbC1FYV1d%0AKS5zdHJlYW0oYykucG9pbnQsdT1hLnRyYW5zbGF0ZShbcy0uMjA1KmwsZisuMjEy%0AKmxdKS5jbGlwRXh0ZW50KFtbcy0uMjE0KmwrRWEsZisuMTY2KmwrRWFdLFtzLS4x%0AMTUqbC1FYSxmKy4yMzQqbC1FYV1dKS5zdHJlYW0oYykucG9pbnQsbn0sbi5zY2Fs%0AZSgxMDcwKX07dmFyIEFjLENjLE5jLHpjLExjLFRjLHFjPXtwb2ludDp2LGxpbmVT%0AdGFydDp2LGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtDYz0wLHFj%0ALmxpbmVTdGFydD1ZZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3FjLmxpbmVTdGFy%0AdD1xYy5saW5lRW5kPXFjLnBvaW50PXYsQWMrPWlhKENjLzIpfX0sUmM9e3BvaW50%0AOkllLGxpbmVTdGFydDp2LGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6dixwb2x5Z29u%0ARW5kOnZ9LERjPXtwb2ludDpYZSxsaW5lU3RhcnQ6JGUsbGluZUVuZDpCZSxwb2x5%0AZ29uU3RhcnQ6ZnVuY3Rpb24oKXtEYy5saW5lU3RhcnQ9V2V9LHBvbHlnb25FbmQ6%0AZnVuY3Rpb24oKXtEYy5wb2ludD1YZSxEYy5saW5lU3RhcnQ9JGUsRGMubGluZUVu%0AZD1CZX19O1ZvLmdlby5wYXRoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtyZXR1%0Acm4gbiYmKCJmdW5jdGlvbiI9PXR5cGVvZiBhJiZpLnBvaW50UmFkaXVzKCthLmFw%0AcGx5KHRoaXMsYXJndW1lbnRzKSksbyYmby52YWxpZHx8KG89dShpKSksVm8uZ2Vv%0ALnN0cmVhbShuLG8pKSxpLnJlc3VsdCgpfWZ1bmN0aW9uIHQoKXtyZXR1cm4gbz1u%0AdWxsLG59dmFyIGUscix1LGksbyxhPTQuNTtyZXR1cm4gbi5hcmVhPWZ1bmN0aW9u%0AKG4pe3JldHVybiBBYz0wLFZvLmdlby5zdHJlYW0obix1KHFjKSksQWN9LG4uY2Vu%0AdHJvaWQ9ZnVuY3Rpb24obil7cmV0dXJuIHZjPWRjPW1jPXljPXhjPU1jPV9jPWJj%0APXdjPTAsVm8uZ2VvLnN0cmVhbShuLHUoRGMpKSx3Yz9bX2Mvd2MsYmMvd2NdOk1j%0AP1t5Yy9NYyx4Yy9NY106bWM/W3ZjL21jLGRjL21jXTpbMC8wLDAvMF19LG4uYm91%0AbmRzPWZ1bmN0aW9uKG4pe3JldHVybiBMYz1UYz0tKE5jPXpjPTEvMCksVm8uZ2Vv%0ALnN0cmVhbShuLHUoUmMpKSxbW05jLHpjXSxbTGMsVGNdXX0sbi5wcm9qZWN0aW9u%0APWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PShlPW4pP24u%0Ac3RyZWFtfHxLZShuKTp3dCx0KCkpOmV9LG4uY29udGV4dD1mdW5jdGlvbihuKXty%0AZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0ocj1uKT9uZXcgWmU6bmV3%0AIEplKG4pLCJmdW5jdGlvbiIhPXR5cGVvZiBhJiZpLnBvaW50UmFkaXVzKGEpLHQo%0AKSk6cn0sbi5wb2ludFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRz%0ALmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OihpLnBvaW50UmFkaXVz%0AKCt0KSwrdCksbik6YX0sbi5wcm9qZWN0aW9uKFZvLmdlby5hbGJlcnNVc2EoKSku%0AY29udGV4dChudWxsKX0sVm8uZ2VvLnRyYW5zZm9ybT1mdW5jdGlvbihuKXtyZXR1%0Acm57c3RyZWFtOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBRZSh0KTtmb3IodmFyIHIg%0AaW4gbillW3JdPW5bcl07cmV0dXJuIGV9fX0sUWUucHJvdG90eXBlPXtwb2ludDpm%0AdW5jdGlvbihuLHQpe3RoaXMuc3RyZWFtLnBvaW50KG4sdCl9LHNwaGVyZTpmdW5j%0AdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24o%0AKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3Ro%0AaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhp%0Acy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0%0AaGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fSxWby5nZW8ucHJvamVjdGlvbj10cixW%0Aby5nZW8ucHJvamVjdGlvbk11dGF0b3I9ZXIsKFZvLmdlby5lcXVpcmVjdGFuZ3Vs%0AYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdHIodXIpfSkucmF3PXVyLmludmVydD11cixW%0Aby5nZW8ucm90YXRpb249ZnVuY3Rpb24obil7ZnVuY3Rpb24gdCh0KXtyZXR1cm4g%0AdD1uKHRbMF0qQ2EsdFsxXSpDYSksdFswXSo9TmEsdFsxXSo9TmEsdH1yZXR1cm4g%0Abj1vcihuWzBdJTM2MCpDYSxuWzFdKkNhLG4ubGVuZ3RoPjI/blsyXSpDYTowKSx0%0ALmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdD1uLmludmVydCh0WzBdKkNhLHRb%0AMV0qQ2EpLHRbMF0qPU5hLHRbMV0qPU5hLHR9LHR9LGlyLmludmVydD11cixWby5n%0AZW8uY2lyY2xlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBuPSJmdW5jdGlv%0AbiI9PXR5cGVvZiByP3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnIsdD1vcigtblsw%0AXSpDYSwtblsxXSpDYSwwKS5pbnZlcnQsdT1bXTtyZXR1cm4gZShudWxsLG51bGws%0AMSx7cG9pbnQ6ZnVuY3Rpb24obixlKXt1LnB1c2gobj10KG4sZSkpLG5bMF0qPU5h%0ALG5bMV0qPU5hfX0pLHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbdV19fXZh%0AciB0LGUscj1bMCwwXSx1PTY7cmV0dXJuIG4ub3JpZ2luPWZ1bmN0aW9uKHQpe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5hbmdsZT1mdW5jdGlv%0AbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zcigodD0rcikqQ2EsdSpD%0AYSksbik6dH0sbi5wcmVjaXNpb249ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50%0Acy5sZW5ndGg/KGU9c3IodCpDYSwodT0rcikqQ2EpLG4pOnV9LG4uYW5nbGUoOTAp%0AfSxWby5nZW8uZGlzdGFuY2U9ZnVuY3Rpb24obix0KXt2YXIgZSxyPSh0WzBdLW5b%0AMF0pKkNhLHU9blsxXSpDYSxpPXRbMV0qQ2Esbz1NYXRoLnNpbihyKSxhPU1hdGgu%0AY29zKHIpLGM9TWF0aC5zaW4odSksbD1NYXRoLmNvcyh1KSxzPU1hdGguc2luKGkp%0ALGY9TWF0aC5jb3MoaSk7cmV0dXJuIE1hdGguYXRhbjIoTWF0aC5zcXJ0KChlPWYq%0AbykqZSsoZT1sKnMtYypmKmEpKmUpLGMqcytsKmYqYSl9LFZvLmdlby5ncmF0aWN1%0AbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7cmV0dXJue3R5cGU6Ik11bHRpTGlu%0AZVN0cmluZyIsY29vcmRpbmF0ZXM6dCgpfX1mdW5jdGlvbiB0KCl7cmV0dXJuIFZv%0ALnJhbmdlKE1hdGguY2VpbChpL2QpKmQsdSxkKS5tYXAoaCkuY29uY2F0KFZvLnJh%0AbmdlKE1hdGguY2VpbChsL20pKm0sYyxtKS5tYXAoZykpLmNvbmNhdChWby5yYW5n%0AZShNYXRoLmNlaWwoci9wKSpwLGUscCkuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVy%0AbiBpYShuJWQpPkVhfSkubWFwKHMpKS5jb25jYXQoVm8ucmFuZ2UoTWF0aC5jZWls%0AKGEvdikqdixvLHYpLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gaWEobiVtKT5F%0AYX0pLm1hcChmKSl9dmFyIGUscix1LGksbyxhLGMsbCxzLGYsaCxnLHA9MTAsdj1w%0ALGQ9OTAsbT0zNjAseT0yLjU7cmV0dXJuIG4ubGluZXM9ZnVuY3Rpb24oKXtyZXR1%0Acm4gdCgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIs%0AY29vcmRpbmF0ZXM6bn19KX0sbi5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5%0AcGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltoKGkpLmNvbmNhdChnKGMpLnNsaWNl%0AKDEpLGgodSkucmV2ZXJzZSgpLnNsaWNlKDEpLGcobCkucmV2ZXJzZSgpLnNsaWNl%0AKDEpKV19fSxuLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxl%0Abmd0aD9uLm1ham9yRXh0ZW50KHQpLm1pbm9yRXh0ZW50KHQpOm4ubWlub3JFeHRl%0AbnQoKX0sbi5tYWpvckV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRz%0ALmxlbmd0aD8oaT0rdFswXVswXSx1PSt0WzFdWzBdLGw9K3RbMF1bMV0sYz0rdFsx%0AXVsxXSxpPnUmJih0PWksaT11LHU9dCksbD5jJiYodD1sLGw9YyxjPXQpLG4ucHJl%0AY2lzaW9uKHkpKTpbW2ksbF0sW3UsY11dfSxuLm1pbm9yRXh0ZW50PWZ1bmN0aW9u%0AKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdWzBdLGU9K3RbMV1b%0AMF0sYT0rdFswXVsxXSxvPSt0WzFdWzFdLHI+ZSYmKHQ9cixyPWUsZT10KSxhPm8m%0AJih0PWEsYT1vLG89dCksbi5wcmVjaXNpb24oeSkpOltbcixhXSxbZSxvXV19LG4u%0Ac3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uLm1ham9y%0AU3RlcCh0KS5taW5vclN0ZXAodCk6bi5taW5vclN0ZXAoKX0sbi5tYWpvclN0ZXA9%0AZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9K3RbMF0sbT0r%0AdFsxXSxuKTpbZCxtXX0sbi5taW5vclN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFy%0AZ3VtZW50cy5sZW5ndGg/KHA9K3RbMF0sdj0rdFsxXSxuKTpbcCx2XX0sbi5wcmVj%0AaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9K3Qs%0Acz1ocihhLG8sOTApLGY9Z3IocixlLHkpLGg9aHIobCxjLDkwKSxnPWdyKGksdSx5%0AKSxuKTp5fSxuLm1ham9yRXh0ZW50KFtbLTE4MCwtOTArRWFdLFsxODAsOTAtRWFd%0AXSkubWlub3JFeHRlbnQoW1stMTgwLC04MC1FYV0sWzE4MCw4MCtFYV1dKX0sVm8u%0AZ2VvLmdyZWF0QXJjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3JldHVybnt0eXBl%0AOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpbdHx8ci5hcHBseSh0aGlzLGFyZ3Vt%0AZW50cyksZXx8dS5hcHBseSh0aGlzLGFyZ3VtZW50cyldfX12YXIgdCxlLHI9cHIs%0AdT12cjtyZXR1cm4gbi5kaXN0YW5jZT1mdW5jdGlvbigpe3JldHVybiBWby5nZW8u%0AZGlzdGFuY2UodHx8ci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZXx8dS5hcHBseSh0%0AaGlzLGFyZ3VtZW50cykpfSxuLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aD8ocj1lLHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/bnVsbDpl%0ALG4pOnJ9LG4udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyh1PXQsZT0iZnVuY3Rpb24iPT10eXBlb2YgdD9udWxsOnQsbik6dX0sbi5w%0AcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uOjB9%0ALG59LFZvLmdlby5pbnRlcnBvbGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBkcihu%0AWzBdKkNhLG5bMV0qQ2EsdFswXSpDYSx0WzFdKkNhKX0sVm8uZ2VvLmxlbmd0aD1m%0AdW5jdGlvbihuKXtyZXR1cm4gUGM9MCxWby5nZW8uc3RyZWFtKG4sVWMpLFBjfTt2%0AYXIgUGMsVWM9e3NwaGVyZTp2LHBvaW50OnYsbGluZVN0YXJ0Om1yLGxpbmVFbmQ6%0Adixwb2x5Z29uU3RhcnQ6dixwb2x5Z29uRW5kOnZ9LGpjPXlyKGZ1bmN0aW9uKG4p%0Ae3JldHVybiBNYXRoLnNxcnQoMi8oMStuKSl9LGZ1bmN0aW9uKG4pe3JldHVybiAy%0AKk1hdGguYXNpbihuLzIpfSk7KFZvLmdlby5hemltdXRoYWxFcXVhbEFyZWE9ZnVu%0AY3Rpb24oKXtyZXR1cm4gdHIoamMpfSkucmF3PWpjO3ZhciBIYz15cihmdW5jdGlv%0AbihuKXt2YXIgdD1NYXRoLmFjb3Mobik7cmV0dXJuIHQmJnQvTWF0aC5zaW4odCl9%0ALHd0KTsoVm8uZ2VvLmF6aW11dGhhbEVxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0%0AdXJuIHRyKEhjKX0pLnJhdz1IYywoVm8uZ2VvLmNvbmljQ29uZm9ybWFsPWZ1bmN0%0AaW9uKCl7cmV0dXJuIEZlKHhyKX0pLnJhdz14ciwoVm8uZ2VvLmNvbmljRXF1aWRp%0Ac3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gRmUoTXIpfSkucmF3PU1yO3ZhciBGYz15%0AcihmdW5jdGlvbihuKXtyZXR1cm4gMS9ufSxNYXRoLmF0YW4pOyhWby5nZW8uZ25v%0AbW9uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gdHIoRmMpfSkucmF3PUZjLF9yLmludmVy%0AdD1mdW5jdGlvbihuLHQpe3JldHVybltuLDIqTWF0aC5hdGFuKE1hdGguZXhwKHQp%0AKS1rYV19LChWby5nZW8ubWVyY2F0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gYnIoX3Ip%0AfSkucmF3PV9yO3ZhciBPYz15cihmdW5jdGlvbigpe3JldHVybiAxfSxNYXRoLmFz%0AaW4pOyhWby5nZW8ub3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIHRyKE9j%0AKX0pLnJhdz1PYzt2YXIgWWM9eXIoZnVuY3Rpb24obil7cmV0dXJuIDEvKDErbil9%0ALGZ1bmN0aW9uKG4pe3JldHVybiAyKk1hdGguYXRhbihuKX0pOyhWby5nZW8uc3Rl%0AcmVvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiB0cihZYyl9KS5yYXc9WWMsd3Iu%0AaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuWy10LDIqTWF0aC5hdGFuKE1hdGgu%0AZXhwKG4pKS1rYV19LChWby5nZW8udHJhbnN2ZXJzZU1lcmNhdG9yPWZ1bmN0aW9u%0AKCl7dmFyIG49YnIod3IpLHQ9bi5jZW50ZXIsZT1uLnJvdGF0ZTtyZXR1cm4gbi5j%0AZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIG4/dChbLW5bMV0sblswXV0pOihuPXQo%0AKSxbblsxXSwtblswXV0pfSxuLnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gbj9l%0AKFtuWzBdLG5bMV0sbi5sZW5ndGg+Mj9uWzJdKzkwOjkwXSk6KG49ZSgpLFtuWzBd%0ALG5bMV0sblsyXS05MF0pfSxlKFswLDAsOTBdKX0pLnJhdz13cixWby5nZW9tPXt9%0ALFZvLmdlb20uaHVsbD1mdW5jdGlvbihuKXtmdW5jdGlvbiB0KG4pe2lmKG4ubGVu%0AZ3RoPDMpcmV0dXJuW107dmFyIHQsdT1idChlKSxpPWJ0KHIpLG89bi5sZW5ndGgs%0AYT1bXSxjPVtdO2Zvcih0PTA7bz50O3QrKylhLnB1c2goWyt1LmNhbGwodGhpcyxu%0AW3RdLHQpLCtpLmNhbGwodGhpcyxuW3RdLHQpLHRdKTtmb3IoYS5zb3J0KEFyKSx0%0APTA7bz50O3QrKyljLnB1c2goW2FbdF1bMF0sLWFbdF1bMV1dKTt2YXIgbD1Fcihh%0AKSxzPUVyKGMpLGY9c1swXT09PWxbMF0saD1zW3MubGVuZ3RoLTFdPT09bFtsLmxl%0Abmd0aC0xXSxnPVtdO2Zvcih0PWwubGVuZ3RoLTE7dD49MDstLXQpZy5wdXNoKG5b%0AYVtsW3RdXVsyXV0pO2Zvcih0PStmO3Q8cy5sZW5ndGgtaDsrK3QpZy5wdXNoKG5b%0AYVtzW3RdXVsyXV0pO3JldHVybiBnfXZhciBlPVNyLHI9a3I7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/dChuKToodC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVu%0AdHMubGVuZ3RoPyhlPW4sdCk6ZX0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1%0AbWVudHMubGVuZ3RoPyhyPW4sdCk6cn0sdCl9LFZvLmdlb20ucG9seWdvbj1mdW5j%0AdGlvbihuKXtyZXR1cm4gc2EobixJYyksbn07dmFyIEljPVZvLmdlb20ucG9seWdv%0Abi5wcm90b3R5cGU9W107SWMuYXJlYT1mdW5jdGlvbigpe2Zvcih2YXIgbix0PS0x%0ALGU9dGhpcy5sZW5ndGgscj10aGlzW2UtMV0sdT0wOysrdDxlOyluPXIscj10aGlz%0AW3RdLHUrPW5bMV0qclswXS1uWzBdKnJbMV07cmV0dXJuLjUqdX0sSWMuY2VudHJv%0AaWQ9ZnVuY3Rpb24obil7dmFyIHQsZSxyPS0xLHU9dGhpcy5sZW5ndGgsaT0wLG89%0AMCxhPXRoaXNbdS0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KG49LTEvKDYqdGhp%0Acy5hcmVhKCkpKTsrK3I8dTspdD1hLGE9dGhpc1tyXSxlPXRbMF0qYVsxXS1hWzBd%0AKnRbMV0saSs9KHRbMF0rYVswXSkqZSxvKz0odFsxXSthWzFdKSplO3JldHVybltp%0AKm4sbypuXX0sSWMuY2xpcD1mdW5jdGlvbihuKXtmb3IodmFyIHQsZSxyLHUsaSxv%0ALGE9enIobiksYz0tMSxsPXRoaXMubGVuZ3RoLXpyKHRoaXMpLHM9dGhpc1tsLTFd%0AOysrYzxsOyl7Zm9yKHQ9bi5zbGljZSgpLG4ubGVuZ3RoPTAsdT10aGlzW2NdLGk9%0AdFsocj10Lmxlbmd0aC1hKS0xXSxlPS0xOysrZTxyOylvPXRbZV0sQ3IobyxzLHUp%0APyhDcihpLHMsdSl8fG4ucHVzaChOcihpLG8scyx1KSksbi5wdXNoKG8pKTpDcihp%0ALHMsdSkmJm4ucHVzaChOcihpLG8scyx1KSksaT1vO2EmJm4ucHVzaChuWzBdKSxz%0APXV9cmV0dXJuIG59O3ZhciBaYyxWYyxYYywkYyxCYyxXYz1bXSxKYz1bXTtqci5w%0Acm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2Zvcih2YXIgbix0PXRoaXMuZWRn%0AZXMsZT10Lmxlbmd0aDtlLS07KW49dFtlXS5lZGdlLG4uYiYmbi5hfHx0LnNwbGlj%0AZShlLDEpO3JldHVybiB0LnNvcnQoRnIpLHQubGVuZ3RofSxKci5wcm90b3R5cGU9%0Ae3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRl%0AP3RoaXMuZWRnZS5hOnRoaXMuZWRnZS5ifSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4g%0AdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmI6dGhpcy5lZGdlLmF9%0AfSxHci5wcm90b3R5cGU9e2luc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLHIsdTtp%0AZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7%0AZm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0%0AaGlzLl8/KG49dHUodGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1u%0AKToodC5QPXQuTj1udWxsLHRoaXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVs%0AbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzspcj1lLlUsZT09PXIuTD8odT1yLlIs%0AdSYmdS5DPyhlLkM9dS5DPSExLHIuQz0hMCxuPXIpOihuPT09ZS5SJiYoUXIodGhp%0AcyxlKSxuPWUsZT1uLlUpLGUuQz0hMSxyLkM9ITAsbnUodGhpcyxyKSkpOih1PXIu%0ATCx1JiZ1LkM/KGUuQz11LkM9ITEsci5DPSEwLG49cik6KG49PT1lLkwmJihudSh0%0AaGlzLGUpLG49ZSxlPW4uVSksZS5DPSExLHIuQz0hMCxRcih0aGlzLHIpKSksZT1u%0ALlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1u%0ALlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciB0LGUscix1PW4u%0AVSxpPW4uTCxvPW4uUjtpZihlPWk/bz90dShvKTppOm8sdT91Lkw9PT1uP3UuTD1l%0AOnUuUj1lOnRoaXMuXz1lLGkmJm8/KHI9ZS5DLGUuQz1uLkMsZS5MPWksaS5VPWUs%0AZSE9PW8/KHU9ZS5VLGUuVT1uLlUsbj1lLlIsdS5MPW4sZS5SPW8sby5VPWUpOihl%0ALlU9dSx1PWUsbj1lLlIpKToocj1uLkMsbj1lKSxuJiYobi5VPXUpLCFyKXtpZihu%0AJiZuLkMpcmV0dXJuIG4uQz0hMSx2b2lkIDA7ZG97aWYobj09PXRoaXMuXylicmVh%0AaztpZihuPT09dS5MKXtpZih0PXUuUix0LkMmJih0LkM9ITEsdS5DPSEwLFFyKHRo%0AaXMsdSksdD11LlIpLHQuTCYmdC5MLkN8fHQuUiYmdC5SLkMpe3QuUiYmdC5SLkN8%0AfCh0LkwuQz0hMSx0LkM9ITAsbnUodGhpcyx0KSx0PXUuUiksdC5DPXUuQyx1LkM9%0AdC5SLkM9ITEsUXIodGhpcyx1KSxuPXRoaXMuXzticmVha319ZWxzZSBpZih0PXUu%0ATCx0LkMmJih0LkM9ITEsdS5DPSEwLG51KHRoaXMsdSksdD11LkwpLHQuTCYmdC5M%0ALkN8fHQuUiYmdC5SLkMpe3QuTCYmdC5MLkN8fCh0LlIuQz0hMSx0LkM9ITAsUXIo%0AdGhpcyx0KSx0PXUuTCksdC5DPXUuQyx1LkM9dC5MLkM9ITEsbnUodGhpcyx1KSxu%0APXRoaXMuXzticmVha310LkM9ITAsbj11LHU9dS5VfXdoaWxlKCFuLkMpO24mJihu%0ALkM9ITEpfX19LFZvLmdlb20udm9yb25vaT1mdW5jdGlvbihuKXtmdW5jdGlvbiB0%0AKG4pe3ZhciB0PW5ldyBBcnJheShuLmxlbmd0aCkscj1hWzBdWzBdLHU9YVswXVsx%0AXSxpPWFbMV1bMF0sbz1hWzFdWzFdO3JldHVybiBldShlKG4pLGEpLmNlbGxzLmZv%0AckVhY2goZnVuY3Rpb24oZSxhKXt2YXIgYz1lLmVkZ2VzLGw9ZS5zaXRlLHM9dFth%0AXT1jLmxlbmd0aD9jLm1hcChmdW5jdGlvbihuKXt2YXIgdD1uLnN0YXJ0KCk7cmV0%0AdXJuW3QueCx0LnldfSk6bC54Pj1yJiZsLng8PWkmJmwueT49dSYmbC55PD1vP1tb%0AcixvXSxbaSxvXSxbaSx1XSxbcix1XV06W107cy5wb2ludD1uW2FdfSksdH1mdW5j%0AdGlvbiBlKG4pe3JldHVybiBuLm1hcChmdW5jdGlvbihuLHQpe3JldHVybnt4Ok1h%0AdGgucm91bmQoaShuLHQpL0VhKSpFYSx5Ok1hdGgucm91bmQobyhuLHQpL0VhKSpF%0AYSxpOnR9fSl9dmFyIHI9U3IsdT1rcixpPXIsbz11LGE9R2M7cmV0dXJuIG4/dChu%0AKToodC5saW5rcz1mdW5jdGlvbihuKXtyZXR1cm4gZXUoZShuKSkuZWRnZXMuZmls%0AdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLmwmJm4ucn0pLm1hcChmdW5jdGlvbih0%0AKXtyZXR1cm57c291cmNlOm5bdC5sLmldLHRhcmdldDpuW3Quci5pXX19KX0sdC50%0AcmlhbmdsZXM9ZnVuY3Rpb24obil7dmFyIHQ9W107cmV0dXJuIGV1KGUobikpLmNl%0AbGxzLmZvckVhY2goZnVuY3Rpb24oZSxyKXtmb3IodmFyIHUsaSxvPWUuc2l0ZSxh%0APWUuZWRnZXMuc29ydChGciksYz0tMSxsPWEubGVuZ3RoLHM9YVtsLTFdLmVkZ2Us%0AZj1zLmw9PT1vP3MucjpzLmw7KytjPGw7KXU9cyxpPWYscz1hW2NdLmVkZ2UsZj1z%0ALmw9PT1vP3MucjpzLmwscjxpLmkmJnI8Zi5pJiZ1dShvLGksZik8MCYmdC5wdXNo%0AKFtuW3JdLG5baS5pXSxuW2YuaV1dKX0pLHR9LHQueD1mdW5jdGlvbihuKXtyZXR1%0Acm4gYXJndW1lbnRzLmxlbmd0aD8oaT1idChyPW4pLHQpOnJ9LHQueT1mdW5jdGlv%0AbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1idCh1PW4pLHQpOnV9LHQu%0AY2xpcEV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o%0AYT1udWxsPT1uP0djOm4sdCk6YT09PUdjP251bGw6YX0sdC5zaXplPWZ1bmN0aW9u%0AKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QuY2xpcEV4dGVudChuJiZbWzAs%0AMF0sbl0pOmE9PT1HYz9udWxsOmEmJmFbMV19LHQpfTt2YXIgR2M9W1stMWU2LC0x%0AZTZdLFsxZTYsMWU2XV07Vm8uZ2VvbS5kZWxhdW5heT1mdW5jdGlvbihuKXtyZXR1%0Acm4gVm8uZ2VvbS52b3Jvbm9pKCkudHJpYW5nbGVzKG4pfSxWby5nZW9tLnF1YWR0%0AcmVlPWZ1bmN0aW9uKG4sdCxlLHIsdSl7ZnVuY3Rpb24gaShuKXtmdW5jdGlvbiBp%0AKG4sdCxlLHIsdSxpLG8sYSl7aWYoIWlzTmFOKGUpJiYhaXNOYU4ocikpaWYobi5s%0AZWFmKXt2YXIgYz1uLngscz1uLnk7aWYobnVsbCE9YylpZihpYShjLWUpK2lhKHMt%0Acik8LjAxKWwobix0LGUscix1LGksbyxhKTtlbHNle3ZhciBmPW4ucG9pbnQ7bi54%0APW4ueT1uLnBvaW50PW51bGwsbChuLGYsYyxzLHUsaSxvLGEpLGwobix0LGUscix1%0ALGksbyxhKX1lbHNlIG4ueD1lLG4ueT1yLG4ucG9pbnQ9dH1lbHNlIGwobix0LGUs%0Acix1LGksbyxhKX1mdW5jdGlvbiBsKG4sdCxlLHIsdSxvLGEsYyl7dmFyIGw9LjUq%0AKHUrYSkscz0uNSoobytjKSxmPWU+PWwsaD1yPj1zLGc9KGg8PDEpK2Y7bi5sZWFm%0APSExLG49bi5ub2Rlc1tnXXx8KG4ubm9kZXNbZ109YXUoKSksZj91PWw6YT1sLGg/%0Abz1zOmM9cyxpKG4sdCxlLHIsdSxvLGEsYyl9dmFyIHMsZixoLGcscCx2LGQsbSx5%0ALHg9YnQoYSksTT1idChjKTtpZihudWxsIT10KXY9dCxkPWUsbT1yLHk9dTtlbHNl%0AIGlmKG09eT0tKHY9ZD0xLzApLGY9W10saD1bXSxwPW4ubGVuZ3RoLG8pZm9yKGc9%0AMDtwPmc7KytnKXM9bltnXSxzLng8diYmKHY9cy54KSxzLnk8ZCYmKGQ9cy55KSxz%0ALng+bSYmKG09cy54KSxzLnk+eSYmKHk9cy55KSxmLnB1c2gocy54KSxoLnB1c2go%0Acy55KTtlbHNlIGZvcihnPTA7cD5nOysrZyl7dmFyIF89K3gocz1uW2ddLGcpLGI9%0AK00ocyxnKTt2Pl8mJih2PV8pLGQ+YiYmKGQ9YiksXz5tJiYobT1fKSxiPnkmJih5%0APWIpLGYucHVzaChfKSxoLnB1c2goYil9dmFyIHc9bS12LFM9eS1kO3c+Uz95PWQr%0AdzptPXYrUzt2YXIgaz1hdSgpO2lmKGsuYWRkPWZ1bmN0aW9uKG4pe2koayxuLCt4%0AKG4sKytnKSwrTShuLGcpLHYsZCxtLHkpfSxrLnZpc2l0PWZ1bmN0aW9uKG4pe2N1%0AKG4sayx2LGQsbSx5KX0sZz0tMSxudWxsPT10KXtmb3IoOysrZzxwOylpKGssbltn%0AXSxmW2ddLGhbZ10sdixkLG0seSk7LS1nfWVsc2Ugbi5mb3JFYWNoKGsuYWRkKTty%0AZXR1cm4gZj1oPW49cz1udWxsLGt9dmFyIG8sYT1TcixjPWtyO3JldHVybihvPWFy%0AZ3VtZW50cy5sZW5ndGgpPyhhPWl1LGM9b3UsMz09PW8mJih1PWUscj10LGU9dD0w%0AKSxpKG4pKTooaS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro%0APyhhPW4saSk6YX0saS55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyhjPW4saSk6Y30saS5leHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KG51bGw9PW4/dD1lPXI9dT1udWxsOih0PStuWzBdWzBdLGU9%0AK25bMF1bMV0scj0rblsxXVswXSx1PStuWzFdWzFdKSxpKTpudWxsPT10P251bGw6%0AW1t0LGVdLFtyLHVdXX0saS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVu%0AdHMubGVuZ3RoPyhudWxsPT1uP3Q9ZT1yPXU9bnVsbDoodD1lPTAscj0rblswXSx1%0APStuWzFdKSxpKTpudWxsPT10P251bGw6W3ItdCx1LWVdfSxpKX0sVm8uaW50ZXJw%0Ab2xhdGVSZ2I9bHUsVm8uaW50ZXJwb2xhdGVPYmplY3Q9c3UsVm8uaW50ZXJwb2xh%0AdGVOdW1iZXI9ZnUsVm8uaW50ZXJwb2xhdGVTdHJpbmc9aHU7dmFyIEtjPS9bLStd%0APyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxRYz1uZXcg%0AUmVnRXhwKEtjLnNvdXJjZSwiZyIpO1ZvLmludGVycG9sYXRlPWd1LFZvLmludGVy%0AcG9sYXRvcnM9W2Z1bmN0aW9uKG4sdCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuKCJz%0AdHJpbmciPT09ZT9aYS5oYXModCl8fC9eKCN8cmdiXCh8aHNsXCgpLy50ZXN0KHQp%0AP2x1Omh1OnQgaW5zdGFuY2VvZiBldD9sdTpBcnJheS5pc0FycmF5KHQpP3B1OiJv%0AYmplY3QiPT09ZSYmaXNOYU4odCk/c3U6ZnUpKG4sdCl9XSxWby5pbnRlcnBvbGF0%0AZUFycmF5PXB1O3ZhciBubD1mdW5jdGlvbigpe3JldHVybiB3dH0sdGw9Vm8ubWFw%0AKHtsaW5lYXI6bmwscG9seTpfdSxxdWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHl1fSxj%0AdWJpYzpmdW5jdGlvbigpe3JldHVybiB4dX0sc2luOmZ1bmN0aW9uKCl7cmV0dXJu%0AIGJ1fSxleHA6ZnVuY3Rpb24oKXtyZXR1cm4gd3V9LGNpcmNsZTpmdW5jdGlvbigp%0Ae3JldHVybiBTdX0sZWxhc3RpYzprdSxiYWNrOkV1LGJvdW5jZTpmdW5jdGlvbigp%0Ae3JldHVybiBBdX19KSxlbD1Wby5tYXAoeyJpbiI6d3Qsb3V0OmR1LCJpbi1vdXQi%0AOm11LCJvdXQtaW4iOmZ1bmN0aW9uKG4pe3JldHVybiBtdShkdShuKSl9fSk7Vm8u%0AZWFzZT1mdW5jdGlvbihuKXt2YXIgdD1uLmluZGV4T2YoIi0iKSxlPXQ+PTA/bi5z%0AbGljZSgwLHQpOm4scj10Pj0wP24uc2xpY2UodCsxKToiaW4iO3JldHVybiBlPXRs%0ALmdldChlKXx8bmwscj1lbC5nZXQocil8fHd0LHZ1KHIoZS5hcHBseShudWxsLFhv%0ALmNhbGwoYXJndW1lbnRzLDEpKSkpfSxWby5pbnRlcnBvbGF0ZUhjbD1DdSxWby5p%0AbnRlcnBvbGF0ZUhzbD1OdSxWby5pbnRlcnBvbGF0ZUxhYj16dSxWby5pbnRlcnBv%0AbGF0ZVJvdW5kPUx1LFZvLnRyYW5zZm9ybT1mdW5jdGlvbihuKXt2YXIgdD1Cby5j%0AcmVhdGVFbGVtZW50TlMoVm8ubnMucHJlZml4LnN2ZywiZyIpO3JldHVybihWby50%0AcmFuc2Zvcm09ZnVuY3Rpb24obil7aWYobnVsbCE9bil7dC5zZXRBdHRyaWJ1dGUo%0AInRyYW5zZm9ybSIsbik7dmFyIGU9dC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xp%0AZGF0ZSgpfXJldHVybiBuZXcgVHUoZT9lLm1hdHJpeDpybCl9KShuKX0sVHUucHJv%0AdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3Ro%0AaXMudHJhbnNsYXRlKyIpcm90YXRlKCIrdGhpcy5yb3RhdGUrIilza2V3WCgiK3Ro%0AaXMuc2tldysiKXNjYWxlKCIrdGhpcy5zY2FsZSsiKSJ9O3ZhciBybD17YToxLGI6%0AMCxjOjAsZDoxLGU6MCxmOjB9O1ZvLmludGVycG9sYXRlVHJhbnNmb3JtPVB1LFZv%0ALmxheW91dD17fSxWby5sYXlvdXQuYnVuZGxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1%0AbmN0aW9uKG4pe2Zvcih2YXIgdD1bXSxlPS0xLHI9bi5sZW5ndGg7KytlPHI7KXQu%0AcHVzaChIdShuW2VdKSk7cmV0dXJuIHR9fSxWby5sYXlvdXQuY2hvcmQ9ZnVuY3Rp%0Ab24oKXtmdW5jdGlvbiBuKCl7dmFyIG4sbCxmLGgsZyxwPXt9LHY9W10sZD1Wby5y%0AYW5nZShpKSxtPVtdO2ZvcihlPVtdLHI9W10sbj0wLGg9LTE7KytoPGk7KXtmb3Io%0AbD0wLGc9LTE7KytnPGk7KWwrPXVbaF1bZ107di5wdXNoKGwpLG0ucHVzaChWby5y%0AYW5nZShpKSksbis9bH1mb3IobyYmZC5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0dXJu%0AIG8odltuXSx2W3RdKX0pLGEmJm0uZm9yRWFjaChmdW5jdGlvbihuLHQpe24uc29y%0AdChmdW5jdGlvbihuLGUpe3JldHVybiBhKHVbdF1bbl0sdVt0XVtlXSl9KX0pLG49%0AKFNhLXMqaSkvbixsPTAsaD0tMTsrK2g8aTspe2ZvcihmPWwsZz0tMTsrK2c8aTsp%0Ae3ZhciB5PWRbaF0seD1tW3ldW2ddLE09dVt5XVt4XSxfPWwsYj1sKz1NKm47cFt5%0AKyItIit4XT17aW5kZXg6eSxzdWJpbmRleDp4LHN0YXJ0QW5nbGU6XyxlbmRBbmds%0AZTpiLHZhbHVlOk19fXJbeV09e2luZGV4Onksc3RhcnRBbmdsZTpmLGVuZEFuZ2xl%0AOmwsdmFsdWU6KGwtZikvbn0sbCs9c31mb3IoaD0tMTsrK2g8aTspZm9yKGc9aC0x%0AOysrZzxpOyl7dmFyIHc9cFtoKyItIitnXSxTPXBbZysiLSIraF07KHcudmFsdWV8%0AfFMudmFsdWUpJiZlLnB1c2gody52YWx1ZTxTLnZhbHVlP3tzb3VyY2U6Uyx0YXJn%0AZXQ6d306e3NvdXJjZTp3LHRhcmdldDpTfSl9YyYmdCgpfWZ1bmN0aW9uIHQoKXtl%0ALnNvcnQoZnVuY3Rpb24obix0KXtyZXR1cm4gYygobi5zb3VyY2UudmFsdWUrbi50%0AYXJnZXQudmFsdWUpLzIsKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlKS8y%0AKX0pfXZhciBlLHIsdSxpLG8sYSxjLGw9e30scz0wO3JldHVybiBsLm1hdHJpeD1m%0AdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0odT1uKSYmdS5s%0AZW5ndGgsZT1yPW51bGwsbCk6dX0sbC5wYWRkaW5nPWZ1bmN0aW9uKG4pe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhzPW4sZT1yPW51bGwsbCk6c30sbC5zb3J0R3Jv%0AdXBzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW4sZT1y%0APW51bGwsbCk6b30sbC5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKG4pe3JldHVybiBh%0Acmd1bWVudHMubGVuZ3RoPyhhPW4sZT1udWxsLGwpOmF9LGwuc29ydENob3Jkcz1m%0AdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uLGUmJnQoKSxs%0AKTpjfSxsLmNob3Jkcz1mdW5jdGlvbigpe3JldHVybiBlfHxuKCksZX0sbC5ncm91%0AcHM9ZnVuY3Rpb24oKXtyZXR1cm4gcnx8bigpLHJ9LGx9LFZvLmxheW91dC5mb3Jj%0AZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxy%0ALHUpe2lmKHQucG9pbnQhPT1uKXt2YXIgaT10LmN4LW4ueCxvPXQuY3ktbi55LGE9%0AdS1lLGM9aSppK28qbztpZihjPmEqYS9kKXtpZihwPmMpe3ZhciBsPXQuY2hhcmdl%0AL2M7bi5weC09aSpsLG4ucHktPW8qbH1yZXR1cm4hMH1pZih0LnBvaW50JiZjJiZw%0APmMpe3ZhciBsPXQucG9pbnRDaGFyZ2UvYztuLnB4LT1pKmwsbi5weS09bypsfX1y%0AZXR1cm4hdC5jaGFyZ2V9fWZ1bmN0aW9uIHQobil7bi5weD1Wby5ldmVudC54LG4u%0AcHk9Vm8uZXZlbnQueSxhLnJlc3VtZSgpfXZhciBlLHIsdSxpLG8sYT17fSxjPVZv%0ALmRpc3BhdGNoKCJzdGFydCIsInRpY2siLCJlbmQiKSxsPVsxLDFdLHM9LjksZj11%0AbCxoPWlsLGc9LTMwLHA9b2wsdj0uMSxkPS42NCxtPVtdLHk9W107cmV0dXJuIGEu%0AdGljaz1mdW5jdGlvbigpe2lmKChyKj0uOTkpPC4wMDUpcmV0dXJuIGMuZW5kKHt0%0AeXBlOiJlbmQiLGFscGhhOnI9MH0pLCEwO3ZhciB0LGUsYSxmLGgscCxkLHgsTSxf%0APW0ubGVuZ3RoLGI9eS5sZW5ndGg7Zm9yKGU9MDtiPmU7KytlKWE9eVtlXSxmPWEu%0Ac291cmNlLGg9YS50YXJnZXQseD1oLngtZi54LE09aC55LWYueSwocD14KngrTSpN%0AKSYmKHA9cippW2VdKigocD1NYXRoLnNxcnQocCkpLXVbZV0pL3AseCo9cCxNKj1w%0ALGgueC09eCooZD1mLndlaWdodC8oaC53ZWlnaHQrZi53ZWlnaHQpKSxoLnktPU0q%0AZCxmLngrPXgqKGQ9MS1kKSxmLnkrPU0qZCk7aWYoKGQ9cip2KSYmKHg9bFswXS8y%0ALE09bFsxXS8yLGU9LTEsZCkpZm9yKDsrK2U8XzspYT1tW2VdLGEueCs9KHgtYS54%0AKSpkLGEueSs9KE0tYS55KSpkO2lmKGcpZm9yKFh1KHQ9Vm8uZ2VvbS5xdWFkdHJl%0AZShtKSxyLG8pLGU9LTE7KytlPF87KShhPW1bZV0pLmZpeGVkfHx0LnZpc2l0KG4o%0AYSkpO2ZvcihlPS0xOysrZTxfOylhPW1bZV0sYS5maXhlZD8oYS54PWEucHgsYS55%0APWEucHkpOihhLngtPShhLnB4LShhLnB4PWEueCkpKnMsYS55LT0oYS5weS0oYS5w%0AeT1hLnkpKSpzKTtjLnRpY2soe3R5cGU6InRpY2siLGFscGhhOnJ9KX0sYS5ub2Rl%0Acz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1uLGEpOm19%0ALGEubGlua3M9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9%0AbixhKTp5fSxhLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KGw9bixhKTpsfSxhLmxpbmtEaXN0YW5jZT1mdW5jdGlvbihuKXtyZXR1cm4g%0AYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOituLGEp%0AOmZ9LGEuZGlzdGFuY2U9YS5saW5rRGlzdGFuY2UsYS5saW5rU3RyZW5ndGg9ZnVu%0AY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09%0AdHlwZW9mIG4/bjorbixhKTpofSxhLmZyaWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhzPStuLGEpOnN9LGEuY2hhcmdlPWZ1bmN0aW9u%0AKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSJmdW5jdGlvbiI9PXR5cGVv%0AZiBuP246K24sYSk6Z30sYS5jaGFyZ2VEaXN0YW5jZT1mdW5jdGlvbihuKXtyZXR1%0Acm4gYXJndW1lbnRzLmxlbmd0aD8ocD1uKm4sYSk6TWF0aC5zcXJ0KHApfSxhLmdy%0AYXZpdHk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9K24s%0AYSk6dn0sYS50aGV0YT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0%0AaD8oZD1uKm4sYSk6TWF0aC5zcXJ0KGQpfSxhLmFscGhhPWZ1bmN0aW9uKG4pe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStuLHI/cj1uPjA/bjowOm4+MCYmKGMu%0Ac3RhcnQoe3R5cGU6InN0YXJ0IixhbHBoYTpyPW59KSxWby50aW1lcihhLnRpY2sp%0AKSxhKTpyfSxhLnN0YXJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHIpe2lmKCFl%0AKXtmb3IoZT1uZXcgQXJyYXkoYyksYT0wO2M+YTsrK2EpZVthXT1bXTtmb3IoYT0w%0AO2w+YTsrK2Epe3ZhciB1PXlbYV07ZVt1LnNvdXJjZS5pbmRleF0ucHVzaCh1LnRh%0AcmdldCksZVt1LnRhcmdldC5pbmRleF0ucHVzaCh1LnNvdXJjZSl9fWZvcih2YXIg%0AaSxvPWVbdF0sYT0tMSxsPW8ubGVuZ3RoOysrYTxsOylpZighaXNOYU4oaT1vW2Fd%0AW25dKSlyZXR1cm4gaTtyZXR1cm4gTWF0aC5yYW5kb20oKSpyfXZhciB0LGUscixj%0APW0ubGVuZ3RoLHM9eS5sZW5ndGgscD1sWzBdLHY9bFsxXTtmb3IodD0wO2M+dDsr%0AK3QpKHI9bVt0XSkuaW5kZXg9dCxyLndlaWdodD0wO2Zvcih0PTA7cz50OysrdCly%0APXlbdF0sIm51bWJlciI9PXR5cGVvZiByLnNvdXJjZSYmKHIuc291cmNlPW1bci5z%0Ab3VyY2VdKSwibnVtYmVyIj09dHlwZW9mIHIudGFyZ2V0JiYoci50YXJnZXQ9bVty%0ALnRhcmdldF0pLCsrci5zb3VyY2Uud2VpZ2h0LCsrci50YXJnZXQud2VpZ2h0O2Zv%0Acih0PTA7Yz50OysrdClyPW1bdF0saXNOYU4oci54KSYmKHIueD1uKCJ4IixwKSks%0AaXNOYU4oci55KSYmKHIueT1uKCJ5Iix2KSksaXNOYU4oci5weCkmJihyLnB4PXIu%0AeCksaXNOYU4oci5weSkmJihyLnB5PXIueSk7aWYodT1bXSwiZnVuY3Rpb24iPT10%0AeXBlb2YgZilmb3IodD0wO3M+dDsrK3QpdVt0XT0rZi5jYWxsKHRoaXMseVt0XSx0%0AKTtlbHNlIGZvcih0PTA7cz50OysrdCl1W3RdPWY7aWYoaT1bXSwiZnVuY3Rpb24i%0APT10eXBlb2YgaClmb3IodD0wO3M+dDsrK3QpaVt0XT0raC5jYWxsKHRoaXMseVt0%0AXSx0KTtlbHNlIGZvcih0PTA7cz50OysrdClpW3RdPWg7aWYobz1bXSwiZnVuY3Rp%0Ab24iPT10eXBlb2YgZylmb3IodD0wO2M+dDsrK3Qpb1t0XT0rZy5jYWxsKHRoaXMs%0AbVt0XSx0KTtlbHNlIGZvcih0PTA7Yz50OysrdClvW3RdPWc7cmV0dXJuIGEucmVz%0AdW1lKCl9LGEucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYWxwaGEoLjEpfSxh%0ALnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hbHBoYSgwKX0sYS5kcmFnPWZ1bmN0%0AaW9uKCl7cmV0dXJuIGV8fChlPVZvLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4od3Qp%0ALm9uKCJkcmFnc3RhcnQuZm9yY2UiLFl1KS5vbigiZHJhZy5mb3JjZSIsdCkub24o%0AImRyYWdlbmQuZm9yY2UiLEl1KSksYXJndW1lbnRzLmxlbmd0aD8odGhpcy5vbigi%0AbW91c2VvdmVyLmZvcmNlIixadSkub24oIm1vdXNlb3V0LmZvcmNlIixWdSkuY2Fs%0AbChlKSx2b2lkIDApOmV9LFZvLnJlYmluZChhLGMsIm9uIil9O3ZhciB1bD0yMCxp%0AbD0xLG9sPTEvMDtWby5sYXlvdXQuaGllcmFyY2h5PWZ1bmN0aW9uKCl7ZnVuY3Rp%0Ab24gbih1KXt2YXIgaSxvPVt1XSxhPVtdO2Zvcih1LmRlcHRoPTA7bnVsbCE9KGk9%0Aby5wb3AoKSk7KWlmKGEucHVzaChpKSwobD1lLmNhbGwobixpLGkuZGVwdGgpKSYm%0AKGM9bC5sZW5ndGgpKXtmb3IodmFyIGMsbCxzOy0tYz49MDspby5wdXNoKHM9bFtj%0AXSkscy5wYXJlbnQ9aSxzLmRlcHRoPWkuZGVwdGgrMTtyJiYoaS52YWx1ZT0wKSxp%0ALmNoaWxkcmVuPWx9ZWxzZSByJiYoaS52YWx1ZT0rci5jYWxsKG4saSxpLmRlcHRo%0AKXx8MCksZGVsZXRlIGkuY2hpbGRyZW47cmV0dXJuIFd1KHUsZnVuY3Rpb24obil7%0AdmFyIGUsdTt0JiYoZT1uLmNoaWxkcmVuKSYmZS5zb3J0KHQpLHImJih1PW4ucGFy%0AZW50KSYmKHUudmFsdWUrPW4udmFsdWUpfSksYX12YXIgdD1LdSxlPUp1LHI9R3U7%0AcmV0dXJuIG4uc29ydD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0%0AaD8odD1lLG4pOnR9LG4uY2hpbGRyZW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5yZXZhbHVlPWZ1bmN0aW9u%0AKHQpe3JldHVybiByJiYoQnUodCxmdW5jdGlvbihuKXtuLmNoaWxkcmVuJiYobi52%0AYWx1ZT0wKX0pLFd1KHQsZnVuY3Rpb24odCl7dmFyIGU7dC5jaGlsZHJlbnx8KHQu%0AdmFsdWU9K3IuY2FsbChuLHQsdC5kZXB0aCl8fDApLChlPXQucGFyZW50KSYmKGUu%0AdmFsdWUrPXQudmFsdWUpfSkpLHR9LG59LFZvLmxheW91dC5wYXJ0aXRpb249ZnVu%0AY3Rpb24oKXtmdW5jdGlvbiBuKHQsZSxyLHUpe3ZhciBpPXQuY2hpbGRyZW47aWYo%0AdC54PWUsdC55PXQuZGVwdGgqdSx0LmR4PXIsdC5keT11LGkmJihvPWkubGVuZ3Ro%0AKSl7dmFyIG8sYSxjLGw9LTE7Zm9yKHI9dC52YWx1ZT9yL3QudmFsdWU6MDsrK2w8%0AbzspbihhPWlbbF0sZSxjPWEudmFsdWUqcix1KSxlKz1jfX1mdW5jdGlvbiB0KG4p%0Ae3ZhciBlPW4uY2hpbGRyZW4scj0wO2lmKGUmJih1PWUubGVuZ3RoKSlmb3IodmFy%0AIHUsaT0tMTsrK2k8dTspcj1NYXRoLm1heChyLHQoZVtpXSkpO3JldHVybiAxK3J9%0AZnVuY3Rpb24gZShlLGkpe3ZhciBvPXIuY2FsbCh0aGlzLGUsaSk7cmV0dXJuIG4o%0Ab1swXSwwLHVbMF0sdVsxXS90KG9bMF0pKSxvfXZhciByPVZvLmxheW91dC5oaWVy%0AYXJjaHkoKSx1PVsxLDFdO3JldHVybiBlLnNpemU9ZnVuY3Rpb24obil7cmV0dXJu%0AIGFyZ3VtZW50cy5sZW5ndGg/KHU9bixlKTp1fSwkdShlLHIpfSxWby5sYXlvdXQu%0AcGllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihpKXt2YXIgbz1pLm1hcChmdW5jdGlv%0AbihlLHIpe3JldHVybit0LmNhbGwobixlLHIpfSksYT0rKCJmdW5jdGlvbiI9PXR5%0AcGVvZiByP3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnIpLGM9KCgiZnVuY3Rpb24i%0APT10eXBlb2YgdT91LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp1KS1hKS9Wby5zdW0o%0AbyksbD1Wby5yYW5nZShpLmxlbmd0aCk7bnVsbCE9ZSYmbC5zb3J0KGU9PT1hbD9m%0AdW5jdGlvbihuLHQpe3JldHVybiBvW3RdLW9bbl19OmZ1bmN0aW9uKG4sdCl7cmV0%0AdXJuIGUoaVtuXSxpW3RdKX0pO3ZhciBzPVtdO3JldHVybiBsLmZvckVhY2goZnVu%0AY3Rpb24obil7dmFyIHQ7c1tuXT17ZGF0YTppW25dLHZhbHVlOnQ9b1tuXSxzdGFy%0AdEFuZ2xlOmEsZW5kQW5nbGU6YSs9dCpjfX0pLHN9dmFyIHQ9TnVtYmVyLGU9YWws%0Acj0wLHU9U2E7cmV0dXJuIG4udmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJu%0AIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnN0YXJ0QW5nbGU9ZnVuY3Rp%0Ab24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxuLmVuZEFu%0AZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbik6%0AdX0sbn07dmFyIGFsPXt9O1ZvLmxheW91dC5zdGFjaz1mdW5jdGlvbigpe2Z1bmN0%0AaW9uIG4oYSxjKXt2YXIgbD1hLm1hcChmdW5jdGlvbihlLHIpe3JldHVybiB0LmNh%0AbGwobixlLHIpfSkscz1sLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVu%0AY3Rpb24odCxlKXtyZXR1cm5baS5jYWxsKG4sdCxlKSxvLmNhbGwobix0LGUpXX0p%0AfSksZj1lLmNhbGwobixzLGMpO2w9Vm8ucGVybXV0ZShsLGYpLHM9Vm8ucGVybXV0%0AZShzLGYpO3ZhciBoLGcscCx2PXIuY2FsbChuLHMsYyksZD1sLmxlbmd0aCxtPWxb%0AMF0ubGVuZ3RoO2ZvcihnPTA7bT5nOysrZylmb3IodS5jYWxsKG4sbFswXVtnXSxw%0APXZbZ10sc1swXVtnXVsxXSksaD0xO2Q+aDsrK2gpdS5jYWxsKG4sbFtoXVtnXSxw%0AKz1zW2gtMV1bZ11bMV0sc1toXVtnXVsxXSk7cmV0dXJuIGF9dmFyIHQ9d3QsZT1y%0AaSxyPXVpLHU9ZWksaT1uaSxvPXRpO3JldHVybiBuLnZhbHVlcz1mdW5jdGlvbihl%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4ub3JkZXI9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09%0AdHlwZW9mIHQ/dDpjbC5nZXQodCl8fHJpLG4pOmV9LG4ub2Zmc2V0PWZ1bmN0aW9u%0AKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVv%0AZiB0P3Q6bGwuZ2V0KHQpfHx1aSxuKTpyfSxuLng9ZnVuY3Rpb24odCl7cmV0dXJu%0AIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxuKTppfSxuLnk9ZnVuY3Rpb24odCl7cmV0%0AdXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxuKTpvfSxuLm91dD1mdW5jdGlvbih0%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LG4pOnV9LG59O3ZhciBjbD1W%0Aby5tYXAoeyJpbnNpZGUtb3V0IjpmdW5jdGlvbihuKXt2YXIgdCxlLHI9bi5sZW5n%0AdGgsdT1uLm1hcChpaSksaT1uLm1hcChvaSksbz1Wby5yYW5nZShyKS5zb3J0KGZ1%0AbmN0aW9uKG4sdCl7cmV0dXJuIHVbbl0tdVt0XX0pLGE9MCxjPTAsbD1bXSxzPVtd%0AO2Zvcih0PTA7cj50OysrdCllPW9bdF0sYz5hPyhhKz1pW2VdLGwucHVzaChlKSk6%0AKGMrPWlbZV0scy5wdXNoKGUpKTtyZXR1cm4gcy5yZXZlcnNlKCkuY29uY2F0KGwp%0AfSxyZXZlcnNlOmZ1bmN0aW9uKG4pe3JldHVybiBWby5yYW5nZShuLmxlbmd0aCku%0AcmV2ZXJzZSgpfSwiZGVmYXVsdCI6cml9KSxsbD1Wby5tYXAoe3NpbGhvdWV0dGU6%0AZnVuY3Rpb24obil7dmFyIHQsZSxyLHU9bi5sZW5ndGgsaT1uWzBdLmxlbmd0aCxv%0APVtdLGE9MCxjPVtdO2ZvcihlPTA7aT5lOysrZSl7Zm9yKHQ9MCxyPTA7dT50O3Qr%0AKylyKz1uW3RdW2VdWzFdO3I+YSYmKGE9ciksby5wdXNoKHIpfWZvcihlPTA7aT5l%0AOysrZSljW2VdPShhLW9bZV0pLzI7cmV0dXJuIGN9LHdpZ2dsZTpmdW5jdGlvbihu%0AKXt2YXIgdCxlLHIsdSxpLG8sYSxjLGwscz1uLmxlbmd0aCxmPW5bMF0saD1mLmxl%0Abmd0aCxnPVtdO2ZvcihnWzBdPWM9bD0wLGU9MTtoPmU7KytlKXtmb3IodD0wLHU9%0AMDtzPnQ7Kyt0KXUrPW5bdF1bZV1bMV07Zm9yKHQ9MCxpPTAsYT1mW2VdWzBdLWZb%0AZS0xXVswXTtzPnQ7Kyt0KXtmb3Iocj0wLG89KG5bdF1bZV1bMV0tblt0XVtlLTFd%0AWzFdKS8oMiphKTt0PnI7KytyKW8rPShuW3JdW2VdWzFdLW5bcl1bZS0xXVsxXSkv%0AYTtpKz1vKm5bdF1bZV1bMV19Z1tlXT1jLT11P2kvdSphOjAsbD5jJiYobD1jKX1m%0Ab3IoZT0wO2g+ZTsrK2UpZ1tlXS09bDtyZXR1cm4gZ30sZXhwYW5kOmZ1bmN0aW9u%0AKG4pe3ZhciB0LGUscix1PW4ubGVuZ3RoLGk9blswXS5sZW5ndGgsbz0xL3UsYT1b%0AXTtmb3IoZT0wO2k+ZTsrK2Upe2Zvcih0PTAscj0wO3U+dDt0Kyspcis9blt0XVtl%0AXVsxXTtpZihyKWZvcih0PTA7dT50O3QrKyluW3RdW2VdWzFdLz1yO2Vsc2UgZm9y%0AKHQ9MDt1PnQ7dCsrKW5bdF1bZV1bMV09b31mb3IoZT0wO2k+ZTsrK2UpYVtlXT0w%0AO3JldHVybiBhfSx6ZXJvOnVpfSk7Vm8ubGF5b3V0Lmhpc3RvZ3JhbT1mdW5jdGlv%0Abigpe2Z1bmN0aW9uIG4obixpKXtmb3IodmFyIG8sYSxjPVtdLGw9bi5tYXAoZSx0%0AaGlzKSxzPXIuY2FsbCh0aGlzLGwsaSksZj11LmNhbGwodGhpcyxzLGwsaSksaT0t%0AMSxoPWwubGVuZ3RoLGc9Zi5sZW5ndGgtMSxwPXQ/MToxL2g7KytpPGc7KW89Y1tp%0AXT1bXSxvLmR4PWZbaSsxXS0oby54PWZbaV0pLG8ueT0wO2lmKGc+MClmb3IoaT0t%0AMTsrK2k8aDspYT1sW2ldLGE+PXNbMF0mJmE8PXNbMV0mJihvPWNbVm8uYmlzZWN0%0AKGYsYSwxLGcpLTFdLG8ueSs9cCxvLnB1c2gobltpXSkpO3JldHVybiBjfXZhciB0%0APSEwLGU9TnVtYmVyLHI9c2ksdT1jaTtyZXR1cm4gbi52YWx1ZT1mdW5jdGlvbih0%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4ucmFuZ2U9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9YnQodCksbik6cn0s%0Abi5iaW5zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJu%0AdW1iZXIiPT10eXBlb2YgdD9mdW5jdGlvbihuKXtyZXR1cm4gbGkobix0KX06YnQo%0AdCksbik6dX0sbi5mcmVxdWVuY3k9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50%0Acy5sZW5ndGg/KHQ9ISFlLG4pOnR9LG59LFZvLmxheW91dC5wYWNrPWZ1bmN0aW9u%0AKCl7ZnVuY3Rpb24gbihuLGkpe3ZhciBvPWUuY2FsbCh0aGlzLG4saSksYT1vWzBd%0ALGM9dVswXSxsPXVbMV0scz1udWxsPT10P01hdGguc3FydDoiZnVuY3Rpb24iPT10%0AeXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9O2lmKGEueD1hLnk9MCxXdShh%0ALGZ1bmN0aW9uKG4pe24ucj0rcyhuLnZhbHVlKX0pLFd1KGEsdmkpLHIpe3ZhciBm%0APXIqKHQ/MTpNYXRoLm1heCgyKmEuci9jLDIqYS5yL2wpKS8yO1d1KGEsZnVuY3Rp%0Ab24obil7bi5yKz1mfSksV3UoYSx2aSksV3UoYSxmdW5jdGlvbihuKXtuLnItPWZ9%0AKX1yZXR1cm4geWkoYSxjLzIsbC8yLHQ/MToxL01hdGgubWF4KDIqYS5yL2MsMiph%0ALnIvbCkpLG99dmFyIHQsZT1Wby5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChmaSks%0Acj0wLHU9WzEsMV07cmV0dXJuIG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aD8odT10LG4pOnV9LG4ucmFkaXVzPWZ1bmN0aW9uKGUpe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PWV8fCJmdW5jdGlvbiI9PXR5%0AcGVvZiBlP2U6K2Usbik6dH0sbi5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBh%0Acmd1bWVudHMubGVuZ3RoPyhyPSt0LG4pOnJ9LCR1KG4sZSl9LFZvLmxheW91dC50%0AcmVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHUpe3ZhciBzPW8uY2FsbCh0aGlz%0ALG4sdSksZj1zWzBdLGg9dChmKTtpZihXdShoLGUpLGgucGFyZW50Lm09LWgueixC%0AdShoLHIpLGwpQnUoZixpKTtlbHNle3ZhciBnPWYscD1mLHY9ZjtCdShmLGZ1bmN0%0AaW9uKG4pe24ueDxnLngmJihnPW4pLG4ueD5wLngmJihwPW4pLG4uZGVwdGg+di5k%0AZXB0aCYmKHY9bil9KTt2YXIgZD1hKGcscCkvMi1nLngsbT1jWzBdLyhwLngrYShw%0ALGcpLzIrZCkseT1jWzFdLyh2LmRlcHRofHwxKTtCdShmLGZ1bmN0aW9uKG4pe24u%0AeD0obi54K2QpKm0sbi55PW4uZGVwdGgqeX0pfXJldHVybiBzfWZ1bmN0aW9uIHQo%0Abil7Zm9yKHZhciB0LGU9e0E6bnVsbCxjaGlsZHJlbjpbbl19LHI9W2VdO251bGwh%0APSh0PXIucG9wKCkpOylmb3IodmFyIHUsaT10LmNoaWxkcmVuLG89MCxhPWkubGVu%0AZ3RoO2E+bzsrK28pci5wdXNoKChpW29dPXU9e186aVtvXSxwYXJlbnQ6dCxjaGls%0AZHJlbjoodT1pW29dLmNoaWxkcmVuKSYmdS5zbGljZSgpfHxbXSxBOm51bGwsYTpu%0AdWxsLHo6MCxtOjAsYzowLHM6MCx0Om51bGwsaTpvfSkuYT11KTtyZXR1cm4gZS5j%0AaGlsZHJlblswXX1mdW5jdGlvbiBlKG4pe3ZhciB0PW4uY2hpbGRyZW4sZT1uLnBh%0AcmVudC5jaGlsZHJlbixyPW4uaT9lW24uaS0xXTpudWxsO2lmKHQubGVuZ3RoKXtT%0AaShuKTt2YXIgaT0odFswXS56K3RbdC5sZW5ndGgtMV0ueikvMjtyPyhuLno9ci56%0AK2Eobi5fLHIuXyksbi5tPW4uei1pKTpuLno9aX1lbHNlIHImJihuLno9ci56K2Eo%0Abi5fLHIuXykpO24ucGFyZW50LkE9dShuLHIsbi5wYXJlbnQuQXx8ZVswXSl9ZnVu%0AY3Rpb24gcihuKXtuLl8ueD1uLnorbi5wYXJlbnQubSxuLm0rPW4ucGFyZW50Lm19%0AZnVuY3Rpb24gdShuLHQsZSl7aWYodCl7Zm9yKHZhciByLHU9bixpPW4sbz10LGM9%0AdS5wYXJlbnQuY2hpbGRyZW5bMF0sbD11Lm0scz1pLm0sZj1vLm0saD1jLm07bz1i%0AaShvKSx1PV9pKHUpLG8mJnU7KWM9X2koYyksaT1iaShpKSxpLmE9bixyPW8ueitm%0ALXUuei1sK2Eoby5fLHUuXykscj4wJiYod2koa2kobyxuLGUpLG4sciksbCs9cixz%0AKz1yKSxmKz1vLm0sbCs9dS5tLGgrPWMubSxzKz1pLm07byYmIWJpKGkpJiYoaS50%0APW8saS5tKz1mLXMpLHUmJiFfaShjKSYmKGMudD11LGMubSs9bC1oLGU9bil9cmV0%0AdXJuIGV9ZnVuY3Rpb24gaShuKXtuLngqPWNbMF0sbi55PW4uZGVwdGgqY1sxXX12%0AYXIgbz1Wby5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxs%0AKSxhPU1pLGM9WzEsMV0sbD1udWxsO3JldHVybiBuLnNlcGFyYXRpb249ZnVuY3Rp%0Ab24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxuKTphfSxuLnNpemU9%0AZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bnVsbD09KGM9%0AdCk/aTpudWxsLG4pOmw/bnVsbDpjfSxuLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW51bGw9PShjPXQpP251bGw6aSxuKTps%0AP2M6bnVsbH0sJHUobixvKX0sVm8ubGF5b3V0LmNsdXN0ZXI9ZnVuY3Rpb24oKXtm%0AdW5jdGlvbiBuKG4saSl7dmFyIG8sYT10LmNhbGwodGhpcyxuLGkpLGM9YVswXSxs%0APTA7V3UoYyxmdW5jdGlvbihuKXt2YXIgdD1uLmNoaWxkcmVuO3QmJnQubGVuZ3Ro%0APyhuLng9QWkodCksbi55PUVpKHQpKToobi54PW8/bCs9ZShuLG8pOjAsbi55PTAs%0Abz1uKX0pO3ZhciBzPUNpKGMpLGY9TmkoYyksaD1zLngtZShzLGYpLzIsZz1mLngr%0AZShmLHMpLzI7cmV0dXJuIFd1KGMsdT9mdW5jdGlvbihuKXtuLng9KG4ueC1jLngp%0AKnJbMF0sbi55PShjLnktbi55KSpyWzFdfTpmdW5jdGlvbihuKXtuLng9KG4ueC1o%0AKS8oZy1oKSpyWzBdLG4ueT0oMS0oYy55P24ueS9jLnk6MSkpKnJbMV19KSxhfXZh%0AciB0PVZvLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwp%0ALGU9TWkscj1bMSwxXSx1PSExO3JldHVybiBuLnNlcGFyYXRpb249ZnVuY3Rpb24o%0AdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnNpemU9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bnVsbD09KHI9dCks%0Abik6dT9udWxsOnJ9LG4ubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KHU9bnVsbCE9KHI9dCksbik6dT9yOm51bGx9LCR1KG4sdCl9%0ALFZvLmxheW91dC50cmVlbWFwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHQpe2Zv%0Acih2YXIgZSxyLHU9LTEsaT1uLmxlbmd0aDsrK3U8aTspcj0oZT1uW3VdKS52YWx1%0AZSooMD50PzA6dCksZS5hcmVhPWlzTmFOKHIpfHwwPj1yPzA6cn1mdW5jdGlvbiB0%0AKGUpe3ZhciBpPWUuY2hpbGRyZW47aWYoaSYmaS5sZW5ndGgpe3ZhciBvLGEsYyxs%0APWYoZSkscz1bXSxoPWkuc2xpY2UoKSxwPTEvMCx2PSJzbGljZSI9PT1nP2wuZHg6%0AImRpY2UiPT09Zz9sLmR5OiJzbGljZS1kaWNlIj09PWc/MSZlLmRlcHRoP2wuZHk6%0AbC5keDpNYXRoLm1pbihsLmR4LGwuZHkpO2ZvcihuKGgsbC5keCpsLmR5L2UudmFs%0AdWUpLHMuYXJlYT0wOyhjPWgubGVuZ3RoKT4wOylzLnB1c2gobz1oW2MtMV0pLHMu%0AYXJlYSs9by5hcmVhLCJzcXVhcmlmeSIhPT1nfHwoYT1yKHMsdikpPD1wPyhoLnBv%0AcCgpLHA9YSk6KHMuYXJlYS09cy5wb3AoKS5hcmVhLHUocyx2LGwsITEpLHY9TWF0%0AaC5taW4obC5keCxsLmR5KSxzLmxlbmd0aD1zLmFyZWE9MCxwPTEvMCk7cy5sZW5n%0AdGgmJih1KHMsdixsLCEwKSxzLmxlbmd0aD1zLmFyZWE9MCksaS5mb3JFYWNoKHQp%0AfX1mdW5jdGlvbiBlKHQpe3ZhciByPXQuY2hpbGRyZW47aWYociYmci5sZW5ndGgp%0Ae3ZhciBpLG89Zih0KSxhPXIuc2xpY2UoKSxjPVtdO2ZvcihuKGEsby5keCpvLmR5%0AL3QudmFsdWUpLGMuYXJlYT0wO2k9YS5wb3AoKTspYy5wdXNoKGkpLGMuYXJlYSs9%0AaS5hcmVhLG51bGwhPWkueiYmKHUoYyxpLno/by5keDpvLmR5LG8sIWEubGVuZ3Ro%0AKSxjLmxlbmd0aD1jLmFyZWE9MCk7ci5mb3JFYWNoKGUpfX1mdW5jdGlvbiByKG4s%0AdCl7Zm9yKHZhciBlLHI9bi5hcmVhLHU9MCxpPTEvMCxvPS0xLGE9bi5sZW5ndGg7%0AKytvPGE7KShlPW5bb10uYXJlYSkmJihpPmUmJihpPWUpLGU+dSYmKHU9ZSkpO3Jl%0AdHVybiByKj1yLHQqPXQscj9NYXRoLm1heCh0KnUqcC9yLHIvKHQqaSpwKSk6MS8w%0AfWZ1bmN0aW9uIHUobix0LGUscil7dmFyIHUsaT0tMSxvPW4ubGVuZ3RoLGE9ZS54%0ALGw9ZS55LHM9dD9jKG4uYXJlYS90KTowO2lmKHQ9PWUuZHgpe2Zvcigocnx8cz5l%0ALmR5KSYmKHM9ZS5keSk7KytpPG87KXU9bltpXSx1Lng9YSx1Lnk9bCx1LmR5PXMs%0AYSs9dS5keD1NYXRoLm1pbihlLngrZS5keC1hLHM/Yyh1LmFyZWEvcyk6MCk7dS56%0APSEwLHUuZHgrPWUueCtlLmR4LWEsZS55Kz1zLGUuZHktPXN9ZWxzZXtmb3IoKHJ8%0AfHM+ZS5keCkmJihzPWUuZHgpOysraTxvOyl1PW5baV0sdS54PWEsdS55PWwsdS5k%0AeD1zLGwrPXUuZHk9TWF0aC5taW4oZS55K2UuZHktbCxzP2ModS5hcmVhL3MpOjAp%0AO3Uuej0hMSx1LmR5Kz1lLnkrZS5keS1sLGUueCs9cyxlLmR4LT1zfX1mdW5jdGlv%0AbiBpKHIpe3ZhciB1PW98fGEociksaT11WzBdO3JldHVybiBpLng9MCxpLnk9MCxp%0ALmR4PWxbMF0saS5keT1sWzFdLG8mJmEucmV2YWx1ZShpKSxuKFtpXSxpLmR4Kmku%0AZHkvaS52YWx1ZSksKG8/ZTp0KShpKSxoJiYobz11KSx1fXZhciBvLGE9Vm8ubGF5%0Ab3V0LmhpZXJhcmNoeSgpLGM9TWF0aC5yb3VuZCxsPVsxLDFdLHM9bnVsbCxmPXpp%0ALGg9ITEsZz0ic3F1YXJpZnkiLHA9LjUqKDErTWF0aC5zcXJ0KDUpKTtyZXR1cm4g%0AaS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4s%0AaSk6bH0saS5wYWRkaW5nPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQodCl7dmFyIGU9%0Abi5jYWxsKGksdCx0LmRlcHRoKTtyZXR1cm4gbnVsbD09ZT96aSh0KTpMaSh0LCJu%0AdW1iZXIiPT10eXBlb2YgZT9bZSxlLGUsZV06ZSl9ZnVuY3Rpb24gZSh0KXtyZXR1%0Acm4gTGkodCxuKX1pZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gczt2YXIgcjty%0AZXR1cm4gZj1udWxsPT0ocz1uKT96aToiZnVuY3Rpb24iPT0ocj10eXBlb2Ygbik/%0AdDoibnVtYmVyIj09PXI/KG49W24sbixuLG5dLGUpOmUsaX0saS5yb3VuZD1mdW5j%0AdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uP01hdGgucm91bmQ6%0ATnVtYmVyLGkpOmMhPU51bWJlcn0saS5zdGlja3k9ZnVuY3Rpb24obil7cmV0dXJu%0AIGFyZ3VtZW50cy5sZW5ndGg/KGg9bixvPW51bGwsaSk6aH0saS5yYXRpbz1mdW5j%0AdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1uLGkpOnB9LGkubW9k%0AZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1uKyIiLGkp%0AOmd9LCR1KGksYSl9LFZvLnJhbmRvbT17bm9ybWFsOmZ1bmN0aW9uKG4sdCl7dmFy%0AIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gMj5lJiYodD0xKSwxPmUmJihuPTAp%0ALGZ1bmN0aW9uKCl7dmFyIGUscix1O2RvIGU9MipNYXRoLnJhbmRvbSgpLTEscj0y%0AKk1hdGgucmFuZG9tKCktMSx1PWUqZStyKnI7d2hpbGUoIXV8fHU+MSk7cmV0dXJu%0AIG4rdCplKk1hdGguc3FydCgtMipNYXRoLmxvZyh1KS91KX19LGxvZ05vcm1hbDpm%0AdW5jdGlvbigpe3ZhciBuPVZvLnJhbmRvbS5ub3JtYWwuYXBwbHkoVm8sYXJndW1l%0AbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19LGJh%0AdGVzOmZ1bmN0aW9uKG4pe3ZhciB0PVZvLnJhbmRvbS5pcndpbkhhbGwobik7cmV0%0AdXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQoKS9ufX0saXJ3aW5IYWxsOmZ1bmN0aW9u%0AKG4pe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9MDtuPmU7ZSsrKXQr%0APU1hdGgucmFuZG9tKCk7cmV0dXJuIHR9fX0sVm8uc2NhbGU9e307dmFyIHNsPXtm%0AbG9vcjp3dCxjZWlsOnd0fTtWby5zY2FsZS5saW5lYXI9ZnVuY3Rpb24oKXtyZXR1%0Acm4gamkoWzAsMV0sWzAsMV0sZ3UsITEpfTt2YXIgZmw9e3M6MSxnOjEscDoxLHI6%0AMSxlOjF9O1ZvLnNjYWxlLmxvZz1mdW5jdGlvbigpe3JldHVybiBYaShWby5zY2Fs%0AZS5saW5lYXIoKS5kb21haW4oWzAsMV0pLDEwLCEwLFsxLDEwXSl9O3ZhciBobD1W%0Aby5mb3JtYXQoIi4wZSIpLGdsPXtmbG9vcjpmdW5jdGlvbihuKXtyZXR1cm4tTWF0%0AaC5jZWlsKC1uKX0sY2VpbDpmdW5jdGlvbihuKXtyZXR1cm4tTWF0aC5mbG9vcigt%0Abil9fTtWby5zY2FsZS5wb3c9ZnVuY3Rpb24oKXtyZXR1cm4gJGkoVm8uc2NhbGUu%0AbGluZWFyKCksMSxbMCwxXSl9LFZvLnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1%0Acm4gVm8uc2NhbGUucG93KCkuZXhwb25lbnQoLjUpfSxWby5zY2FsZS5vcmRpbmFs%0APWZ1bmN0aW9uKCl7cmV0dXJuIFdpKFtdLHt0OiJyYW5nZSIsYTpbW11dfSl9LFZv%0ALnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rpb24oKXtyZXR1cm4gVm8uc2NhbGUub3Jk%0AaW5hbCgpLnJhbmdlKHBsKX0sVm8uc2NhbGUuY2F0ZWdvcnkyMD1mdW5jdGlvbigp%0Ae3JldHVybiBWby5zY2FsZS5vcmRpbmFsKCkucmFuZ2UodmwpfSxWby5zY2FsZS5j%0AYXRlZ29yeTIwYj1mdW5jdGlvbigpe3JldHVybiBWby5zY2FsZS5vcmRpbmFsKCku%0AcmFuZ2UoZGwpfSxWby5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVy%0AbiBWby5zY2FsZS5vcmRpbmFsKCkucmFuZ2UobWwpfTt2YXIgcGw9WzIwNjIyNjAs%0AMTY3NDQyMDYsMjkyNDU4OCwxNDAzNDcyOCw5NzI1ODg1LDkxOTcxMzEsMTQ5MDcz%0AMzAsODM1NTcxMSwxMjM2OTE4NiwxNTU2MTc1XS5tYXAodnQpLHZsPVsyMDYyMjYw%0ALDExNDU0NDQwLDE2NzQ0MjA2LDE2NzU5NjcyLDI5MjQ1ODgsMTAwMTg2OTgsMTQw%0AMzQ3MjgsMTY3NTA3NDIsOTcyNTg4NSwxMjk1NTg2MSw5MTk3MTMxLDEyODg1MTQw%0ALDE0OTA3MzMwLDE2MjM0MTk0LDgzNTU3MTEsMTMwOTI4MDcsMTIzNjkxODYsMTQ0%0AMDg1ODksMTU1NjE3NSwxMDQxMDcyNV0ubWFwKHZ0KSxkbD1bMzc1MDc3Nyw1Mzk1%0ANjE5LDcwNDA3MTksMTAyNjQyODYsNjUxOTA5Nyw5MjE2NTk0LDExOTE1MTE1LDEz%0ANTU2NjM2LDkyMDI5OTMsMTI0MjY4MDksMTUxODY1MTQsMTUxOTA5MzIsODY2NjE2%0AOSwxMTM1NjQ5MCwxNDA0OTY0MywxNTE3NzM3Miw4MDc3NjgzLDEwODM0MzI0LDEz%0ANTI4NTA5LDE0NTg5NjU0XS5tYXAodnQpLG1sPVszMjQ0NzMzLDcwNTcxMTAsMTA0%0AMDY2MjUsMTMwMzI0MzEsMTUwOTUwNTMsMTY2MTY3NjQsMTY2MjUyNTksMTY2MzQw%0AMTgsMzI1MzA3Niw3NjUyNDcwLDEwNjA3MDAzLDEzMTAxNTA0LDc2OTUyODEsMTAz%0AOTQzMTIsMTIzNjkzNzIsMTQzNDI4OTEsNjUxMzUwNyw5ODY4OTUwLDEyNDM0ODc3%0ALDE0Mjc3MDgxXS5tYXAodnQpO1ZvLnNjYWxlLnF1YW50aWxlPWZ1bmN0aW9uKCl7%0AcmV0dXJuIEppKFtdLFtdKX0sVm8uc2NhbGUucXVhbnRpemU9ZnVuY3Rpb24oKXty%0AZXR1cm4gR2koMCwxLFswLDFdKX0sVm8uc2NhbGUudGhyZXNob2xkPWZ1bmN0aW9u%0AKCl7cmV0dXJuIEtpKFsuNV0sWzAsMV0pfSxWby5zY2FsZS5pZGVudGl0eT1mdW5j%0AdGlvbigpe3JldHVybiBRaShbMCwxXSl9LFZvLnN2Zz17fSxWby5zdmcuYXJjPWZ1%0AbmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVu%0AdHMpLGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbz1yLmFwcGx5KHRoaXMsYXJn%0AdW1lbnRzKSt5bCxhPXUuYXBwbHkodGhpcyxhcmd1bWVudHMpK3lsLGM9KG8+YSYm%0AKGM9byxvPWEsYT1jKSxhLW8pLGw9d2E+Yz8iMCI6IjEiLHM9TWF0aC5jb3Mobyks%0AZj1NYXRoLnNpbihvKSxoPU1hdGguY29zKGEpLGc9TWF0aC5zaW4oYSk7CnJldHVy%0AbiBjPj14bD9uPyJNMCwiK2krIkEiK2krIiwiK2krIiAwIDEsMSAwLCIrLWkrIkEi%0AK2krIiwiK2krIiAwIDEsMSAwLCIraSsiTTAsIituKyJBIituKyIsIituKyIgMCAx%0ALDAgMCwiKy1uKyJBIituKyIsIituKyIgMCAxLDAgMCwiK24rIloiOiJNMCwiK2kr%0AIkEiK2krIiwiK2krIiAwIDEsMSAwLCIrLWkrIkEiK2krIiwiK2krIiAwIDEsMSAw%0ALCIraSsiWiI6bj8iTSIraSpzKyIsIitpKmYrIkEiK2krIiwiK2krIiAwICIrbCsi%0ALDEgIitpKmgrIiwiK2kqZysiTCIrbipoKyIsIituKmcrIkEiK24rIiwiK24rIiAw%0AICIrbCsiLDAgIituKnMrIiwiK24qZisiWiI6Ik0iK2kqcysiLCIraSpmKyJBIitp%0AKyIsIitpKyIgMCAiK2wrIiwxICIraSpoKyIsIitpKmcrIkwwLDAiKyJaIn12YXIg%0AdD1ubyxlPXRvLHI9ZW8sdT1ybztyZXR1cm4gbi5pbm5lclJhZGl1cz1mdW5jdGlv%0AbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1idChlKSxuKTp0fSxuLm91%0AdGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhl%0APWJ0KHQpLG4pOmV9LG4uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aD8ocj1idCh0KSxuKTpyfSxuLmVuZEFuZ2xlPWZ1bmN0aW9u%0AKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWJ0KHQpLG4pOnV9LG4uY2Vu%0AdHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0odC5hcHBseSh0aGlzLGFyZ3VtZW50cykr%0AZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsaT0oci5hcHBseSh0aGlzLGFyZ3Vt%0AZW50cykrdS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIreWw7cmV0dXJuW01hdGgu%0AY29zKGkpKm4sTWF0aC5zaW4oaSkqbl19LG59O3ZhciB5bD0ta2EseGw9U2EtRWE7%0AVm8uc3ZnLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdW8od3QpfTt2YXIgTWw9Vm8u%0AbWFwKHtsaW5lYXI6aW8sImxpbmVhci1jbG9zZWQiOm9vLHN0ZXA6YW8sInN0ZXAt%0AYmVmb3JlIjpjbywic3RlcC1hZnRlciI6bG8sYmFzaXM6dm8sImJhc2lzLW9wZW4i%0AOm1vLCJiYXNpcy1jbG9zZWQiOnlvLGJ1bmRsZTp4byxjYXJkaW5hbDpobywiY2Fy%0AZGluYWwtb3BlbiI6c28sImNhcmRpbmFsLWNsb3NlZCI6Zm8sbW9ub3RvbmU6a299%0AKTtNbC5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7dC5rZXk9bix0LmNsb3NlZD0vLWNs%0Ab3NlZCQvLnRlc3Qobil9KTt2YXIgX2w9WzAsMi8zLDEvMywwXSxibD1bMCwxLzMs%0AMi8zLDBdLHdsPVswLDEvNiwyLzMsMS82XTtWby5zdmcubGluZS5yYWRpYWw9ZnVu%0AY3Rpb24oKXt2YXIgbj11byhFbyk7cmV0dXJuIG4ucmFkaXVzPW4ueCxkZWxldGUg%0Abi54LG4uYW5nbGU9bi55LGRlbGV0ZSBuLnksbn0sY28ucmV2ZXJzZT1sbyxsby5y%0AZXZlcnNlPWNvLFZvLnN2Zy5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIEFvKHd0KX0s%0AVm8uc3ZnLmFyZWEucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIG49QW8oRW8pO3JldHVy%0AbiBuLnJhZGl1cz1uLngsZGVsZXRlIG4ueCxuLmlubmVyUmFkaXVzPW4ueDAsZGVs%0AZXRlIG4ueDAsbi5vdXRlclJhZGl1cz1uLngxLGRlbGV0ZSBuLngxLG4uYW5nbGU9%0Abi55LGRlbGV0ZSBuLnksbi5zdGFydEFuZ2xlPW4ueTAsZGVsZXRlIG4ueTAsbi5l%0AbmRBbmdsZT1uLnkxLGRlbGV0ZSBuLnkxLG59LFZvLnN2Zy5jaG9yZD1mdW5jdGlv%0Abigpe2Z1bmN0aW9uIG4obixhKXt2YXIgYz10KHRoaXMsaSxuLGEpLGw9dCh0aGlz%0ALG8sbixhKTtyZXR1cm4iTSIrYy5wMCtyKGMucixjLnAxLGMuYTEtYy5hMCkrKGUo%0AYyxsKT91KGMucixjLnAxLGMucixjLnAwKTp1KGMucixjLnAxLGwucixsLnAwKSty%0AKGwucixsLnAxLGwuYTEtbC5hMCkrdShsLnIsbC5wMSxjLnIsYy5wMCkpKyJaIn1m%0AdW5jdGlvbiB0KG4sdCxlLHIpe3ZhciB1PXQuY2FsbChuLGUsciksaT1hLmNhbGwo%0Abix1LHIpLG89Yy5jYWxsKG4sdSxyKSt5bCxzPWwuY2FsbChuLHUscikreWw7cmV0%0AdXJue3I6aSxhMDpvLGExOnMscDA6W2kqTWF0aC5jb3MobyksaSpNYXRoLnNpbihv%0AKV0scDE6W2kqTWF0aC5jb3MocyksaSpNYXRoLnNpbihzKV19fWZ1bmN0aW9uIGUo%0Abix0KXtyZXR1cm4gbi5hMD09dC5hMCYmbi5hMT09dC5hMX1mdW5jdGlvbiByKG4s%0AdCxlKXtyZXR1cm4iQSIrbisiLCIrbisiIDAgIisgKyhlPndhKSsiLDEgIit0fWZ1%0AbmN0aW9uIHUobix0LGUscil7cmV0dXJuIlEgMCwwICIrcn12YXIgaT1wcixvPXZy%0ALGE9Q28sYz1lbyxsPXJvO3JldHVybiBuLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1%0Acm4gYXJndW1lbnRzLmxlbmd0aD8oYT1idCh0KSxuKTphfSxuLnNvdXJjZT1mdW5j%0AdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1idCh0KSxuKTppfSxu%0ALnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1i%0AdCh0KSxuKTpvfSxuLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KGM9YnQodCksbik6Y30sbi5lbmRBbmdsZT1mdW5jdGlvbih0%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1idCh0KSxuKTpsfSxufSxWby5z%0AdmcuZGlhZ29uYWw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4sdSl7dmFyIGk9dC5j%0AYWxsKHRoaXMsbix1KSxvPWUuY2FsbCh0aGlzLG4sdSksYT0oaS55K28ueSkvMixj%0APVtpLHt4OmkueCx5OmF9LHt4Om8ueCx5OmF9LG9dO3JldHVybiBjPWMubWFwKHIp%0ALCJNIitjWzBdKyJDIitjWzFdKyIgIitjWzJdKyIgIitjWzNdfXZhciB0PXByLGU9%0AdnIscj1ObztyZXR1cm4gbi5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KHQ9YnQoZSksbik6dH0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7%0AcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YnQodCksbik6ZX0sbi5wcm9qZWN0%0AaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6%0Acn0sbn0sVm8uc3ZnLmRpYWdvbmFsLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBuPVZv%0ALnN2Zy5kaWFnb25hbCgpLHQ9Tm8sZT1uLnByb2plY3Rpb247cmV0dXJuIG4ucHJv%0AamVjdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHpv%0AKHQ9bikpOnR9LG59LFZvLnN2Zy5zeW1ib2w9ZnVuY3Rpb24oKXtmdW5jdGlvbiBu%0AKG4scil7cmV0dXJuKFNsLmdldCh0LmNhbGwodGhpcyxuLHIpKXx8cW8pKGUuY2Fs%0AbCh0aGlzLG4scikpfXZhciB0PVRvLGU9TG87cmV0dXJuIG4udHlwZT1mdW5jdGlv%0AbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1idChlKSxuKTp0fSxuLnNp%0AemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YnQodCks%0Abik6ZX0sbn07dmFyIFNsPVZvLm1hcCh7Y2lyY2xlOnFvLGNyb3NzOmZ1bmN0aW9u%0AKG4pe3ZhciB0PU1hdGguc3FydChuLzUpLzI7cmV0dXJuIk0iKy0zKnQrIiwiKy10%0AKyJIIistdCsiViIrLTMqdCsiSCIrdCsiViIrLXQrIkgiKzMqdCsiViIrdCsiSCIr%0AdCsiViIrMyp0KyJIIistdCsiViIrdCsiSCIrLTMqdCsiWiJ9LGRpYW1vbmQ6ZnVu%0AY3Rpb24obil7dmFyIHQ9TWF0aC5zcXJ0KG4vKDIqQ2wpKSxlPXQqQ2w7cmV0dXJu%0AIk0wLCIrLXQrIkwiK2UrIiwwIisiIDAsIit0KyIgIistZSsiLDAiKyJaIn0sc3F1%0AYXJlOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguc3FydChuKS8yO3JldHVybiJNIist%0AdCsiLCIrLXQrIkwiK3QrIiwiKy10KyIgIit0KyIsIit0KyIgIistdCsiLCIrdCsi%0AWiJ9LCJ0cmlhbmdsZS1kb3duIjpmdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQo%0Abi9BbCksZT10KkFsLzI7cmV0dXJuIk0wLCIrZSsiTCIrdCsiLCIrLWUrIiAiKy10%0AKyIsIistZSsiWiJ9LCJ0cmlhbmdsZS11cCI6ZnVuY3Rpb24obil7dmFyIHQ9TWF0%0AaC5zcXJ0KG4vQWwpLGU9dCpBbC8yO3JldHVybiJNMCwiKy1lKyJMIit0KyIsIitl%0AKyIgIistdCsiLCIrZSsiWiJ9fSk7Vm8uc3ZnLnN5bWJvbFR5cGVzPVNsLmtleXMo%0AKTt2YXIga2wsRWwsQWw9TWF0aC5zcXJ0KDMpLENsPU1hdGgudGFuKDMwKkNhKSxO%0AbD1bXSx6bD0wO05sLmNhbGw9dmEuY2FsbCxObC5lbXB0eT12YS5lbXB0eSxObC5u%0Ab2RlPXZhLm5vZGUsTmwuc2l6ZT12YS5zaXplLFZvLnRyYW5zaXRpb249ZnVuY3Rp%0Ab24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/a2w/bi50cmFuc2l0aW9uKCk6%0Abjp5YS50cmFuc2l0aW9uKCl9LFZvLnRyYW5zaXRpb24ucHJvdG90eXBlPU5sLE5s%0ALnNlbGVjdD1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdT10aGlzLmlkLGk9W107bj1i%0AKG4pO2Zvcih2YXIgbz0tMSxhPXRoaXMubGVuZ3RoOysrbzxhOyl7aS5wdXNoKHQ9%0AW10pO2Zvcih2YXIgYz10aGlzW29dLGw9LTEscz1jLmxlbmd0aDsrK2w8czspKHI9%0AY1tsXSkmJihlPW4uY2FsbChyLHIuX19kYXRhX18sbCxvKSk/KCJfX2RhdGFfXyJp%0AbiByJiYoZS5fX2RhdGFfXz1yLl9fZGF0YV9fKSxVbyhlLGwsdSxyLl9fdHJhbnNp%0AdGlvbl9fW3VdKSx0LnB1c2goZSkpOnQucHVzaChudWxsKX1yZXR1cm4gUm8oaSx1%0AKX0sTmwuc2VsZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0LGUscix1LGksbz10aGlz%0ALmlkLGE9W107bj13KG4pO2Zvcih2YXIgYz0tMSxsPXRoaXMubGVuZ3RoOysrYzxs%0AOylmb3IodmFyIHM9dGhpc1tjXSxmPS0xLGg9cy5sZW5ndGg7KytmPGg7KWlmKHI9%0Ac1tmXSl7aT1yLl9fdHJhbnNpdGlvbl9fW29dLGU9bi5jYWxsKHIsci5fX2RhdGFf%0AXyxmLGMpLGEucHVzaCh0PVtdKTtmb3IodmFyIGc9LTEscD1lLmxlbmd0aDsrK2c8%0AcDspKHU9ZVtnXSkmJlVvKHUsZyxvLGkpLHQucHVzaCh1KX1yZXR1cm4gUm8oYSxv%0AKX0sTmwuZmlsdGVyPWZ1bmN0aW9uKG4pe3ZhciB0LGUscix1PVtdOyJmdW5jdGlv%0AbiIhPXR5cGVvZiBuJiYobj1SKG4pKTtmb3IodmFyIGk9MCxvPXRoaXMubGVuZ3Ro%0AO28+aTtpKyspe3UucHVzaCh0PVtdKTtmb3IodmFyIGU9dGhpc1tpXSxhPTAsYz1l%0ALmxlbmd0aDtjPmE7YSsrKShyPWVbYV0pJiZuLmNhbGwocixyLl9fZGF0YV9fLGEs%0AaSkmJnQucHVzaChyKX1yZXR1cm4gUm8odSx0aGlzLmlkKX0sTmwudHdlZW49ZnVu%0AY3Rpb24obix0KXt2YXIgZT10aGlzLmlkO3JldHVybiBhcmd1bWVudHMubGVuZ3Ro%0APDI/dGhpcy5ub2RlKCkuX190cmFuc2l0aW9uX19bZV0udHdlZW4uZ2V0KG4pOlAo%0AdGhpcyxudWxsPT10P2Z1bmN0aW9uKHQpe3QuX190cmFuc2l0aW9uX19bZV0udHdl%0AZW4ucmVtb3ZlKG4pfTpmdW5jdGlvbihyKXtyLl9fdHJhbnNpdGlvbl9fW2VdLnR3%0AZWVuLnNldChuLHQpfSl9LE5sLmF0dHI9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBl%0AKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYSl9ZnVuY3Rpb24gcigpe3RoaXMucmVt%0Ab3ZlQXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsKX1mdW5jdGlvbiB1KG4pe3Jl%0AdHVybiBudWxsPT1uP2U6KG4rPSIiLGZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLmdl%0AdEF0dHJpYnV0ZShhKTtyZXR1cm4gZSE9PW4mJih0PW8oZSxuKSxmdW5jdGlvbihu%0AKXt0aGlzLnNldEF0dHJpYnV0ZShhLHQobikpfSl9KX1mdW5jdGlvbiBpKG4pe3Jl%0AdHVybiBudWxsPT1uP3I6KG4rPSIiLGZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLmdl%0AdEF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCk7cmV0dXJuIGUhPT1uJiYodD1v%0AKGUsbiksZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGVOUyhhLnNwYWNlLGEu%0AbG9jYWwsdChuKSl9KX0pfWlmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHQgaW4g%0Abil0aGlzLmF0dHIodCxuW3RdKTtyZXR1cm4gdGhpc312YXIgbz0idHJhbnNmb3Jt%0AIj09bj9QdTpndSxhPVZvLm5zLnF1YWxpZnkobik7cmV0dXJuIERvKHRoaXMsImF0%0AdHIuIituLHQsYS5sb2NhbD9pOnUpfSxObC5hdHRyVHdlZW49ZnVuY3Rpb24obix0%0AKXtmdW5jdGlvbiBlKG4sZSl7dmFyIHI9dC5jYWxsKHRoaXMsbixlLHRoaXMuZ2V0%0AQXR0cmlidXRlKHUpKTtyZXR1cm4gciYmZnVuY3Rpb24obil7dGhpcy5zZXRBdHRy%0AaWJ1dGUodSxyKG4pKX19ZnVuY3Rpb24gcihuLGUpe3ZhciByPXQuY2FsbCh0aGlz%0ALG4sZSx0aGlzLmdldEF0dHJpYnV0ZU5TKHUuc3BhY2UsdS5sb2NhbCkpO3JldHVy%0AbiByJiZmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHUuc3BhY2UsdS5s%0Ab2NhbCxyKG4pKX19dmFyIHU9Vm8ubnMucXVhbGlmeShuKTtyZXR1cm4gdGhpcy50%0Ad2VlbigiYXR0ci4iK24sdS5sb2NhbD9yOmUpfSxObC5zdHlsZT1mdW5jdGlvbihu%0ALHQsZSl7ZnVuY3Rpb24gcigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9%0AZnVuY3Rpb24gdSh0KXtyZXR1cm4gbnVsbD09dD9yOih0Kz0iIixmdW5jdGlvbigp%0Ae3ZhciByLHU9Sm8uZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3Bl%0AcnR5VmFsdWUobik7cmV0dXJuIHUhPT10JiYocj1ndSh1LHQpLGZ1bmN0aW9uKHQp%0Ae3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobixyKHQpLGUpfSl9KX12YXIgaT1hcmd1%0AbWVudHMubGVuZ3RoO2lmKDM+aSl7aWYoInN0cmluZyIhPXR5cGVvZiBuKXsyPmkm%0AJih0PSIiKTtmb3IoZSBpbiBuKXRoaXMuc3R5bGUoZSxuW2VdLHQpO3JldHVybiB0%0AaGlzfWU9IiJ9cmV0dXJuIERvKHRoaXMsInN0eWxlLiIrbix0LHUpfSxObC5zdHls%0AZVR3ZWVuPWZ1bmN0aW9uKG4sdCxlKXtmdW5jdGlvbiByKHIsdSl7dmFyIGk9dC5j%0AYWxsKHRoaXMscix1LEpvLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQ%0Acm9wZXJ0eVZhbHVlKG4pKTtyZXR1cm4gaSYmZnVuY3Rpb24odCl7dGhpcy5zdHls%0AZS5zZXRQcm9wZXJ0eShuLGkodCksZSl9fXJldHVybiBhcmd1bWVudHMubGVuZ3Ro%0APDMmJihlPSIiKSx0aGlzLnR3ZWVuKCJzdHlsZS4iK24scil9LE5sLnRleHQ9ZnVu%0AY3Rpb24obil7cmV0dXJuIERvKHRoaXMsInRleHQiLG4sUG8pfSxObC5yZW1vdmU9%0AZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKCJlbmQudHJhbnNpdGlvbiIsZnVu%0AY3Rpb24oKXt2YXIgbjt0aGlzLl9fdHJhbnNpdGlvbl9fLmNvdW50PDImJihuPXRo%0AaXMucGFyZW50Tm9kZSkmJm4ucmVtb3ZlQ2hpbGQodGhpcyl9KX0sTmwuZWFzZT1m%0AdW5jdGlvbihuKXt2YXIgdD10aGlzLmlkO3JldHVybiBhcmd1bWVudHMubGVuZ3Ro%0APDE/dGhpcy5ub2RlKCkuX190cmFuc2l0aW9uX19bdF0uZWFzZTooImZ1bmN0aW9u%0AIiE9dHlwZW9mIG4mJihuPVZvLmVhc2UuYXBwbHkoVm8sYXJndW1lbnRzKSksUCh0%0AaGlzLGZ1bmN0aW9uKGUpe2UuX190cmFuc2l0aW9uX19bdF0uZWFzZT1ufSkpfSxO%0AbC5kZWxheT1mdW5jdGlvbihuKXt2YXIgdD10aGlzLmlkO3JldHVybiBhcmd1bWVu%0AdHMubGVuZ3RoPDE/dGhpcy5ub2RlKCkuX190cmFuc2l0aW9uX19bdF0uZGVsYXk6%0AUCh0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKGUscix1KXtlLl9f%0AdHJhbnNpdGlvbl9fW3RdLmRlbGF5PStuLmNhbGwoZSxlLl9fZGF0YV9fLHIsdSl9%0AOihuPStuLGZ1bmN0aW9uKGUpe2UuX190cmFuc2l0aW9uX19bdF0uZGVsYXk9bn0p%0AKX0sTmwuZHVyYXRpb249ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5pZDtyZXR1cm4g%0AYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpLl9fdHJhbnNpdGlvbl9fW3Rd%0ALmR1cmF0aW9uOlAodGhpcywiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbihl%0ALHIsdSl7ZS5fX3RyYW5zaXRpb25fX1t0XS5kdXJhdGlvbj1NYXRoLm1heCgxLG4u%0AY2FsbChlLGUuX19kYXRhX18scix1KSl9OihuPU1hdGgubWF4KDEsbiksZnVuY3Rp%0Ab24oZSl7ZS5fX3RyYW5zaXRpb25fX1t0XS5kdXJhdGlvbj1ufSkpfSxObC5lYWNo%0APWZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5pZDtpZihhcmd1bWVudHMubGVuZ3Ro%0APDIpe3ZhciByPUVsLHU9a2w7a2w9ZSxQKHRoaXMsZnVuY3Rpb24odCxyLHUpe0Vs%0APXQuX190cmFuc2l0aW9uX19bZV0sbi5jYWxsKHQsdC5fX2RhdGFfXyxyLHUpfSks%0ARWw9cixrbD11fWVsc2UgUCh0aGlzLGZ1bmN0aW9uKHIpe3ZhciB1PXIuX190cmFu%0Ac2l0aW9uX19bZV07KHUuZXZlbnR8fCh1LmV2ZW50PVZvLmRpc3BhdGNoKCJzdGFy%0AdCIsImVuZCIpKSkub24obix0KX0pO3JldHVybiB0aGlzfSxObC50cmFuc2l0aW9u%0APWZ1bmN0aW9uKCl7Zm9yKHZhciBuLHQsZSxyLHU9dGhpcy5pZCxpPSsremwsbz1b%0AXSxhPTAsYz10aGlzLmxlbmd0aDtjPmE7YSsrKXtvLnB1c2gobj1bXSk7Zm9yKHZh%0AciB0PXRoaXNbYV0sbD0wLHM9dC5sZW5ndGg7cz5sO2wrKykoZT10W2xdKSYmKHI9%0AT2JqZWN0LmNyZWF0ZShlLl9fdHJhbnNpdGlvbl9fW3VdKSxyLmRlbGF5Kz1yLmR1%0AcmF0aW9uLFVvKGUsbCxpLHIpKSxuLnB1c2goZSl9cmV0dXJuIFJvKG8saSl9LFZv%0ALnN2Zy5heGlzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtuLmVhY2goZnVuY3Rp%0Ab24oKXt2YXIgbixsPVZvLnNlbGVjdCh0aGlzKSxzPXRoaXMuX19jaGFydF9ffHxl%0ALGY9dGhpcy5fX2NoYXJ0X189ZS5jb3B5KCksaD1udWxsPT1jP2YudGlja3M/Zi50%0AaWNrcy5hcHBseShmLGEpOmYuZG9tYWluKCk6YyxnPW51bGw9PXQ/Zi50aWNrRm9y%0AbWF0P2YudGlja0Zvcm1hdC5hcHBseShmLGEpOnd0OnQscD1sLnNlbGVjdEFsbCgi%0ALnRpY2siKS5kYXRhKGgsZiksdj1wLmVudGVyKCkuaW5zZXJ0KCJnIiwiLmRvbWFp%0AbiIpLmF0dHIoImNsYXNzIiwidGljayIpLnN0eWxlKCJvcGFjaXR5IixFYSksZD1W%0Aby50cmFuc2l0aW9uKHAuZXhpdCgpKS5zdHlsZSgib3BhY2l0eSIsRWEpLnJlbW92%0AZSgpLG09Vm8udHJhbnNpdGlvbihwLm9yZGVyKCkpLnN0eWxlKCJvcGFjaXR5Iiwx%0AKSx5PXFpKGYpLHg9bC5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFswXSksTT0o%0AeC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZG9tYWluIiks%0AVm8udHJhbnNpdGlvbih4KSk7di5hcHBlbmQoImxpbmUiKSx2LmFwcGVuZCgidGV4%0AdCIpO3ZhciBfPXYuc2VsZWN0KCJsaW5lIiksYj1tLnNlbGVjdCgibGluZSIpLHc9%0AcC5zZWxlY3QoInRleHQiKS50ZXh0KGcpLFM9di5zZWxlY3QoInRleHQiKSxrPW0u%0Ac2VsZWN0KCJ0ZXh0Iik7c3dpdGNoKHIpe2Nhc2UiYm90dG9tIjpuPWpvLF8uYXR0%0AcigieTIiLHUpLFMuYXR0cigieSIsTWF0aC5tYXgodSwwKStvKSxiLmF0dHIoIngy%0AIiwwKS5hdHRyKCJ5MiIsdSksay5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixNYXRoLm1h%0AeCh1LDApK28pLHcuYXR0cigiZHkiLCIuNzFlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hv%0AciIsIm1pZGRsZSIpLE0uYXR0cigiZCIsIk0iK3lbMF0rIiwiK2krIlYwSCIreVsx%0AXSsiViIraSk7YnJlYWs7Y2FzZSJ0b3AiOm49am8sXy5hdHRyKCJ5MiIsLXUpLFMu%0AYXR0cigieSIsLShNYXRoLm1heCh1LDApK28pKSxiLmF0dHIoIngyIiwwKS5hdHRy%0AKCJ5MiIsLXUpLGsuYXR0cigieCIsMCkuYXR0cigieSIsLShNYXRoLm1heCh1LDAp%0AK28pKSx3LmF0dHIoImR5IiwiMGVtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlk%0AZGxlIiksTS5hdHRyKCJkIiwiTSIreVswXSsiLCIrLWkrIlYwSCIreVsxXSsiViIr%0ALWkpO2JyZWFrO2Nhc2UibGVmdCI6bj1IbyxfLmF0dHIoIngyIiwtdSksUy5hdHRy%0AKCJ4IiwtKE1hdGgubWF4KHUsMCkrbykpLGIuYXR0cigieDIiLC11KS5hdHRyKCJ5%0AMiIsMCksay5hdHRyKCJ4IiwtKE1hdGgubWF4KHUsMCkrbykpLmF0dHIoInkiLDAp%0ALHcuYXR0cigiZHkiLCIuMzJlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImVuZCIp%0ALE0uYXR0cigiZCIsIk0iKy1pKyIsIit5WzBdKyJIMFYiK3lbMV0rIkgiKy1pKTti%0AcmVhaztjYXNlInJpZ2h0IjpuPUhvLF8uYXR0cigieDIiLHUpLFMuYXR0cigieCIs%0ATWF0aC5tYXgodSwwKStvKSxiLmF0dHIoIngyIix1KS5hdHRyKCJ5MiIsMCksay5h%0AdHRyKCJ4IixNYXRoLm1heCh1LDApK28pLmF0dHIoInkiLDApLHcuYXR0cigiZHki%0ALCIuMzJlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IiksTS5hdHRyKCJk%0AIiwiTSIraSsiLCIreVswXSsiSDBWIit5WzFdKyJIIitpKX1pZihmLnJhbmdlQmFu%0AZCl7dmFyIEU9ZixBPUUucmFuZ2VCYW5kKCkvMjtzPWY9ZnVuY3Rpb24obil7cmV0%0AdXJuIEUobikrQX19ZWxzZSBzLnJhbmdlQmFuZD9zPWY6ZC5jYWxsKG4sZik7di5j%0AYWxsKG4scyksbS5jYWxsKG4sZil9KX12YXIgdCxlPVZvLnNjYWxlLmxpbmVhcigp%0ALHI9TGwsdT02LGk9NixvPTMsYT1bMTBdLGM9bnVsbDtyZXR1cm4gbi5zY2FsZT1m%0AdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4u%0Ab3JpZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQg%0AaW4gVGw/dCsiIjpMbCxuKTpyfSxuLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGFy%0AZ3VtZW50cy5sZW5ndGg/KGE9YXJndW1lbnRzLG4pOmF9LG4udGlja1ZhbHVlcz1m%0AdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LG4pOmN9LG4u%0AdGlja0Zvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o%0AdD1lLG4pOnR9LG4udGlja1NpemU9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRz%0ALmxlbmd0aDtyZXR1cm4gZT8odT0rdCxpPSthcmd1bWVudHNbZS0xXSxuKTp1fSxu%0ALmlubmVyVGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KHU9K3Qsbik6dX0sbi5vdXRlclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LG4pOml9LG4udGlja1BhZGRpbmc9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3Qsbik6b30sbi50%0AaWNrU3ViZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgm%0AJm59LG59O3ZhciBMbD0iYm90dG9tIixUbD17dG9wOjEscmlnaHQ6MSxib3R0b206%0AMSxsZWZ0OjF9O1ZvLnN2Zy5icnVzaD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oaSl7%0AaS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9Vm8uc2VsZWN0KHRoaXMpLnN0eWxlKCJw%0Ab2ludGVyLWV2ZW50cyIsImFsbCIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGln%0AaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIikub24oIm1vdXNlZG93bi5icnVzaCIs%0AdSkub24oInRvdWNoc3RhcnQuYnJ1c2giLHUpLG89aS5zZWxlY3RBbGwoIi5iYWNr%0AZ3JvdW5kIikuZGF0YShbMF0pO28uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRy%0AKCJjbGFzcyIsImJhY2tncm91bmQiKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRl%0AbiIpLnN0eWxlKCJjdXJzb3IiLCJjcm9zc2hhaXIiKSxpLnNlbGVjdEFsbCgiLmV4%0AdGVudCIpLmRhdGEoWzBdKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNs%0AYXNzIiwiZXh0ZW50Iikuc3R5bGUoImN1cnNvciIsIm1vdmUiKTt2YXIgYT1pLnNl%0AbGVjdEFsbCgiLnJlc2l6ZSIpLmRhdGEocCx3dCk7YS5leGl0KCkucmVtb3ZlKCks%0AYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihuKXty%0AZXR1cm4icmVzaXplICIrbn0pLnN0eWxlKCJjdXJzb3IiLGZ1bmN0aW9uKG4pe3Jl%0AdHVybiBxbFtuXX0pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGZ1bmN0aW9uKG4p%0Ae3JldHVybi9bZXddJC8udGVzdChuKT8tMzpudWxsfSkuYXR0cigieSIsZnVuY3Rp%0Ab24obil7cmV0dXJuL15bbnNdLy50ZXN0KG4pPy0zOm51bGx9KS5hdHRyKCJ3aWR0%0AaCIsNikuYXR0cigiaGVpZ2h0Iiw2KS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRl%0AbiIpLGEuc3R5bGUoImRpc3BsYXkiLG4uZW1wdHkoKT8ibm9uZSI6bnVsbCk7dmFy%0AIHMsZj1Wby50cmFuc2l0aW9uKGkpLGg9Vm8udHJhbnNpdGlvbihvKTtjJiYocz1x%0AaShjKSxoLmF0dHIoIngiLHNbMF0pLmF0dHIoIndpZHRoIixzWzFdLXNbMF0pLGUo%0AZikpLGwmJihzPXFpKGwpLGguYXR0cigieSIsc1swXSkuYXR0cigiaGVpZ2h0Iixz%0AWzFdLXNbMF0pLHIoZikpLHQoZil9KX1mdW5jdGlvbiB0KG4pe24uc2VsZWN0QWxs%0AKCIucmVzaXplIikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihuKXtyZXR1cm4i%0AdHJhbnNsYXRlKCIrc1srL2UkLy50ZXN0KG4pXSsiLCIrZlsrL15zLy50ZXN0KG4p%0AXSsiKSJ9KX1mdW5jdGlvbiBlKG4pe24uc2VsZWN0KCIuZXh0ZW50IikuYXR0cigi%0AeCIsc1swXSksbi5zZWxlY3RBbGwoIi5leHRlbnQsLm4+cmVjdCwucz5yZWN0Iiku%0AYXR0cigid2lkdGgiLHNbMV0tc1swXSl9ZnVuY3Rpb24gcihuKXtuLnNlbGVjdCgi%0ALmV4dGVudCIpLmF0dHIoInkiLGZbMF0pLG4uc2VsZWN0QWxsKCIuZXh0ZW50LC5l%0APnJlY3QsLnc+cmVjdCIpLmF0dHIoImhlaWdodCIsZlsxXS1mWzBdKX1mdW5jdGlv%0AbiB1KCl7ZnVuY3Rpb24gdSgpezMyPT1Wby5ldmVudC5rZXlDb2RlJiYoQ3x8KHg9%0AbnVsbCx6WzBdLT1zWzFdLHpbMV0tPWZbMV0sQz0yKSx5KCkpfWZ1bmN0aW9uIHAo%0AKXszMj09Vm8uZXZlbnQua2V5Q29kZSYmMj09QyYmKHpbMF0rPXNbMV0selsxXSs9%0AZlsxXSxDPTAseSgpKX1mdW5jdGlvbiB2KCl7dmFyIG49Vm8ubW91c2UoXyksdT0h%0AMTtNJiYoblswXSs9TVswXSxuWzFdKz1NWzFdKSxDfHwoVm8uZXZlbnQuYWx0S2V5%0APyh4fHwoeD1bKHNbMF0rc1sxXSkvMiwoZlswXStmWzFdKS8yXSkselswXT1zWyso%0AblswXTx4WzBdKV0selsxXT1mWysoblsxXTx4WzFdKV0pOng9bnVsbCksRSYmZChu%0ALGMsMCkmJihlKFMpLHU9ITApLEEmJmQobixsLDEpJiYocihTKSx1PSEwKSx1JiYo%0AdChTKSx3KHt0eXBlOiJicnVzaCIsbW9kZTpDPyJtb3ZlIjoicmVzaXplIn0pKX1m%0AdW5jdGlvbiBkKG4sdCxlKXt2YXIgcix1LGE9cWkodCksYz1hWzBdLGw9YVsxXSxw%0APXpbZV0sdj1lP2Y6cyxkPXZbMV0tdlswXTtyZXR1cm4gQyYmKGMtPXAsbC09ZCtw%0AKSxyPShlP2c6aCk/TWF0aC5tYXgoYyxNYXRoLm1pbihsLG5bZV0pKTpuW2VdLEM/%0AdT0ocis9cCkrZDooeCYmKHA9TWF0aC5tYXgoYyxNYXRoLm1pbihsLDIqeFtlXS1y%0AKSkpLHI+cD8odT1yLHI9cCk6dT1wKSx2WzBdIT1yfHx2WzFdIT11PyhlP289bnVs%0AbDppPW51bGwsdlswXT1yLHZbMV09dSwhMCk6dm9pZCAwfWZ1bmN0aW9uIG0oKXt2%0AKCksUy5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zZWxlY3RBbGwoIi5y%0AZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbi5lbXB0eSgpPyJub25lIjpudWxsKSxW%0Aby5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIixudWxsKSxMLm9uKCJtb3Vz%0AZW1vdmUuYnJ1c2giLG51bGwpLm9uKCJtb3VzZXVwLmJydXNoIixudWxsKS5vbigi%0AdG91Y2htb3ZlLmJydXNoIixudWxsKS5vbigidG91Y2hlbmQuYnJ1c2giLG51bGwp%0ALm9uKCJrZXlkb3duLmJydXNoIixudWxsKS5vbigia2V5dXAuYnJ1c2giLG51bGwp%0ALE4oKSx3KHt0eXBlOiJicnVzaGVuZCJ9KX12YXIgeCxNLF89dGhpcyxiPVZvLnNl%0AbGVjdChWby5ldmVudC50YXJnZXQpLHc9YS5vZihfLGFyZ3VtZW50cyksUz1Wby5z%0AZWxlY3QoXyksaz1iLmRhdHVtKCksRT0hL14obnxzKSQvLnRlc3QoaykmJmMsQT0h%0AL14oZXx3KSQvLnRlc3QoaykmJmwsQz1iLmNsYXNzZWQoImV4dGVudCIpLE49SSgp%0ALHo9Vm8ubW91c2UoXyksTD1Wby5zZWxlY3QoSm8pLm9uKCJrZXlkb3duLmJydXNo%0AIix1KS5vbigia2V5dXAuYnJ1c2giLHApO2lmKFZvLmV2ZW50LmNoYW5nZWRUb3Vj%0AaGVzP0wub24oInRvdWNobW92ZS5icnVzaCIsdikub24oInRvdWNoZW5kLmJydXNo%0AIixtKTpMLm9uKCJtb3VzZW1vdmUuYnJ1c2giLHYpLm9uKCJtb3VzZXVwLmJydXNo%0AIixtKSxTLmludGVycnVwdCgpLnNlbGVjdEFsbCgiKiIpLmludGVycnVwdCgpLEMp%0AelswXT1zWzBdLXpbMF0selsxXT1mWzBdLXpbMV07ZWxzZSBpZihrKXt2YXIgVD0r%0AL3ckLy50ZXN0KGspLHE9Ky9ebi8udGVzdChrKTtNPVtzWzEtVF0telswXSxmWzEt%0AcV0telsxXV0selswXT1zW1RdLHpbMV09ZltxXX1lbHNlIFZvLmV2ZW50LmFsdEtl%0AeSYmKHg9ei5zbGljZSgpKTtTLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUi%0AKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksVm8u%0Ac2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIsYi5zdHlsZSgiY3Vyc29yIikp%0ALHcoe3R5cGU6ImJydXNoc3RhcnQifSksdigpfXZhciBpLG8sYT1NKG4sImJydXNo%0Ac3RhcnQiLCJicnVzaCIsImJydXNoZW5kIiksYz1udWxsLGw9bnVsbCxzPVswLDBd%0ALGY9WzAsMF0saD0hMCxnPSEwLHA9UmxbMF07cmV0dXJuIG4uZXZlbnQ9ZnVuY3Rp%0Ab24obil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49YS5vZih0aGlzLGFyZ3VtZW50%0AcyksdD17eDpzLHk6ZixpOmksajpvfSxlPXRoaXMuX19jaGFydF9ffHx0O3RoaXMu%0AX19jaGFydF9fPXQsa2w/Vm8uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNo%0AKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXtpPWUuaSxvPWUuaixzPWUueCxmPWUu%0AeSxuKHt0eXBlOiJicnVzaHN0YXJ0In0pfSkudHdlZW4oImJydXNoOmJydXNoIixm%0AdW5jdGlvbigpe3ZhciBlPXB1KHMsdC54KSxyPXB1KGYsdC55KTtyZXR1cm4gaT1v%0APW51bGwsZnVuY3Rpb24odSl7cz10Lng9ZSh1KSxmPXQueT1yKHUpLG4oe3R5cGU6%0AImJydXNoIixtb2RlOiJyZXNpemUifSl9fSkuZWFjaCgiZW5kLmJydXNoIixmdW5j%0AdGlvbigpe2k9dC5pLG89dC5qLG4oe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUi%0AfSksbih7dHlwZToiYnJ1c2hlbmQifSl9KToobih7dHlwZToiYnJ1c2hzdGFydCJ9%0AKSxuKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pLG4oe3R5cGU6ImJydXNo%0AZW5kIn0pKX0pfSxuLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KGM9dCxwPVJsWyFjPDwxfCFsXSxuKTpjfSxuLnk9ZnVuY3Rpb24odCl7cmV0%0AdXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxwPVJsWyFjPDwxfCFsXSxuKTpsfSxu%0ALmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjJiZs%0APyhoPSEhdFswXSxnPSEhdFsxXSk6Yz9oPSEhdDpsJiYoZz0hIXQpLG4pOmMmJmw/%0AW2gsZ106Yz9oOmw/ZzpudWxsfSxuLmV4dGVudD1mdW5jdGlvbih0KXt2YXIgZSxy%0ALHUsYSxoO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjJiYoZT10WzBdLHI9dFsx%0AXSxsJiYoZT1lWzBdLHI9clswXSksaT1bZSxyXSxjLmludmVydCYmKGU9YyhlKSxy%0APWMocikpLGU+ciYmKGg9ZSxlPXIscj1oKSwoZSE9c1swXXx8ciE9c1sxXSkmJihz%0APVtlLHJdKSksbCYmKHU9dFswXSxhPXRbMV0sYyYmKHU9dVsxXSxhPWFbMV0pLG89%0AW3UsYV0sbC5pbnZlcnQmJih1PWwodSksYT1sKGEpKSx1PmEmJihoPXUsdT1hLGE9%0AaCksKHUhPWZbMF18fGEhPWZbMV0pJiYoZj1bdSxhXSkpLG4pOihjJiYoaT8oZT1p%0AWzBdLHI9aVsxXSk6KGU9c1swXSxyPXNbMV0sYy5pbnZlcnQmJihlPWMuaW52ZXJ0%0AKGUpLHI9Yy5pbnZlcnQocikpLGU+ciYmKGg9ZSxlPXIscj1oKSkpLGwmJihvPyh1%0APW9bMF0sYT1vWzFdKToodT1mWzBdLGE9ZlsxXSxsLmludmVydCYmKHU9bC5pbnZl%0AcnQodSksYT1sLmludmVydChhKSksdT5hJiYoaD11LHU9YSxhPWgpKSksYyYmbD9b%0AW2UsdV0sW3IsYV1dOmM/W2Uscl06bCYmW3UsYV0pfSxuLmNsZWFyPWZ1bmN0aW9u%0AKCl7cmV0dXJuIG4uZW1wdHkoKXx8KHM9WzAsMF0sZj1bMCwwXSxpPW89bnVsbCks%0Abn0sbi5lbXB0eT1mdW5jdGlvbigpe3JldHVybiEhYyYmc1swXT09c1sxXXx8ISFs%0AJiZmWzBdPT1mWzFdfSxWby5yZWJpbmQobixhLCJvbiIpfTt2YXIgcWw9e246Im5z%0ALXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6%0AZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJl%0Ac2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sUmw9W1sibiIsImUiLCJzIiwidyIsIm53%0AIiwibmUiLCJzZSIsInN3Il0sWyJlIiwidyJdLFsibiIsInMiXSxbXV0sRGw9bmMu%0AZm9ybWF0PW9jLnRpbWVGb3JtYXQsUGw9RGwudXRjLFVsPVBsKCIlWS0lbS0lZFQl%0ASDolTTolUy4lTFoiKTtEbC5pc289RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcm%0AJituZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/Rm86VWwsRm8u%0AcGFyc2U9ZnVuY3Rpb24obil7dmFyIHQ9bmV3IERhdGUobik7cmV0dXJuIGlzTmFO%0AKHQpP251bGw6dH0sRm8udG9TdHJpbmc9VWwudG9TdHJpbmcsbmMuc2Vjb25kPVB0%0AKGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgdGMoMWUzKk1hdGguZmxvb3Iobi8xZTMp%0AKX0sZnVuY3Rpb24obix0KXtuLnNldFRpbWUobi5nZXRUaW1lKCkrMWUzKk1hdGgu%0AZmxvb3IodCkpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRTZWNvbmRzKCl9KSxu%0AYy5zZWNvbmRzPW5jLnNlY29uZC5yYW5nZSxuYy5zZWNvbmRzLnV0Yz1uYy5zZWNv%0AbmQudXRjLnJhbmdlLG5jLm1pbnV0ZT1QdChmdW5jdGlvbihuKXtyZXR1cm4gbmV3%0AIHRjKDZlNCpNYXRoLmZsb29yKG4vNmU0KSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRU%0AaW1lKG4uZ2V0VGltZSgpKzZlNCpNYXRoLmZsb29yKHQpKX0sZnVuY3Rpb24obil7%0AcmV0dXJuIG4uZ2V0TWludXRlcygpfSksbmMubWludXRlcz1uYy5taW51dGUucmFu%0AZ2UsbmMubWludXRlcy51dGM9bmMubWludXRlLnV0Yy5yYW5nZSxuYy5ob3VyPVB0%0AKGZ1bmN0aW9uKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKS82MDtyZXR1%0Acm4gbmV3IHRjKDM2ZTUqKE1hdGguZmxvb3Iobi8zNmU1LXQpK3QpKX0sZnVuY3Rp%0Ab24obix0KXtuLnNldFRpbWUobi5nZXRUaW1lKCkrMzZlNSpNYXRoLmZsb29yKHQp%0AKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLG5jLmhvdXJzPW5j%0ALmhvdXIucmFuZ2UsbmMuaG91cnMudXRjPW5jLmhvdXIudXRjLnJhbmdlLG5jLm1v%0AbnRoPVB0KGZ1bmN0aW9uKG4pe3JldHVybiBuPW5jLmRheShuKSxuLnNldERhdGUo%0AMSksbn0sZnVuY3Rpb24obix0KXtuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSt0KX0s%0AZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TW9udGgoKX0pLG5jLm1vbnRocz1uYy5t%0Ab250aC5yYW5nZSxuYy5tb250aHMudXRjPW5jLm1vbnRoLnV0Yy5yYW5nZTt2YXIg%0Aamw9WzFlMyw1ZTMsMTVlMywzZTQsNmU0LDNlNSw5ZTUsMThlNSwzNmU1LDEwOGU1%0ALDIxNmU1LDQzMmU1LDg2NGU1LDE3MjhlNSw2MDQ4ZTUsMjU5MmU2LDc3NzZlNiwz%0AMTUzNmU2XSxIbD1bW25jLnNlY29uZCwxXSxbbmMuc2Vjb25kLDVdLFtuYy5zZWNv%0AbmQsMTVdLFtuYy5zZWNvbmQsMzBdLFtuYy5taW51dGUsMV0sW25jLm1pbnV0ZSw1%0AXSxbbmMubWludXRlLDE1XSxbbmMubWludXRlLDMwXSxbbmMuaG91ciwxXSxbbmMu%0AaG91ciwzXSxbbmMuaG91ciw2XSxbbmMuaG91ciwxMl0sW25jLmRheSwxXSxbbmMu%0AZGF5LDJdLFtuYy53ZWVrLDFdLFtuYy5tb250aCwxXSxbbmMubW9udGgsM10sW25j%0ALnllYXIsMV1dLEZsPURsLm11bHRpKFtbIi4lTCIsZnVuY3Rpb24obil7cmV0dXJu%0AIG4uZ2V0TWlsbGlzZWNvbmRzKCl9XSxbIjolUyIsZnVuY3Rpb24obil7cmV0dXJu%0AIG4uZ2V0U2Vjb25kcygpfV0sWyIlSTolTSIsZnVuY3Rpb24obil7cmV0dXJuIG4u%0AZ2V0TWludXRlcygpfV0sWyIlSSAlcCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0%0ASG91cnMoKX1dLFsiJWEgJWQiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERheSgp%0AJiYxIT1uLmdldERhdGUoKX1dLFsiJWIgJWQiLGZ1bmN0aW9uKG4pe3JldHVybiAx%0AIT1uLmdldERhdGUoKX1dLFsiJUIiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1v%0AbnRoKCl9XSxbIiVZIixTZV1dKSxPbD17cmFuZ2U6ZnVuY3Rpb24obix0LGUpe3Jl%0AdHVybiBWby5yYW5nZShNYXRoLmNlaWwobi9lKSplLCt0LGUpLm1hcChZbyl9LGZs%0Ab29yOnd0LGNlaWw6d3R9O0hsLnllYXI9bmMueWVhcixuYy5zY2FsZT1mdW5jdGlv%0Abigpe3JldHVybiBPbyhWby5zY2FsZS5saW5lYXIoKSxIbCxGbCl9O3ZhciBZbD1I%0AbC5tYXAoZnVuY3Rpb24obil7cmV0dXJuW25bMF0udXRjLG5bMV1dfSksSWw9UGwu%0AbXVsdGkoW1siLiVMIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENNaWxsaXNl%0AY29uZHMoKX1dLFsiOiVTIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENTZWNv%0AbmRzKCl9XSxbIiVJOiVNIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENNaW51%0AdGVzKCl9XSxbIiVJICVwIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENIb3Vy%0AcygpfV0sWyIlYSAlZCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDRGF5KCkm%0AJjEhPW4uZ2V0VVRDRGF0ZSgpfV0sWyIlYiAlZCIsZnVuY3Rpb24obil7cmV0dXJu%0AIDEhPW4uZ2V0VVRDRGF0ZSgpfV0sWyIlQiIsZnVuY3Rpb24obil7cmV0dXJuIG4u%0AZ2V0VVRDTW9udGgoKX1dLFsiJVkiLFNlXV0pO1lsLnllYXI9bmMueWVhci51dGMs%0AbmMuc2NhbGUudXRjPWZ1bmN0aW9uKCl7cmV0dXJuIE9vKFZvLnNjYWxlLmxpbmVh%0AcigpLFlsLElsKX0sVm8udGV4dD1TdChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXNw%0Ab25zZVRleHR9KSxWby5qc29uPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGt0KG4sImFw%0AcGxpY2F0aW9uL2pzb24iLElvLHQpfSxWby5odG1sPWZ1bmN0aW9uKG4sdCl7cmV0%0AdXJuIGt0KG4sInRleHQvaHRtbCIsWm8sdCl9LFZvLnhtbD1TdChmdW5jdGlvbihu%0AKXtyZXR1cm4gbi5yZXNwb25zZVhNTH0pLCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZp%0AbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFZvKToib2JqZWN0Ij09dHlwZW9mIG1vZHVs%0AZSYmbW9kdWxlLmV4cG9ydHMmJihtb2R1bGUuZXhwb3J0cz1WbyksdGhpcy5kMz1W%0Ab30oKTs8L3NjcmlwdD4NCiAgICAgIDwhLS0gbWluaW1pemVkIGpxdWVyeSBqcyBs%0AaWJyYXJ5IC0tPg0KICAgICAgPHNjcmlwdD4vKiEgalF1ZXJ5IHYyLjEuMSB8IChj%0AKSAyMDA1LCAyMDE0IGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIHwganF1ZXJ5Lm9y%0AZy9saWNlbnNlICovCiFmdW5jdGlvbihhLGIpeyJvYmplY3QiPT10eXBlb2YgbW9k%0AdWxlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBv%0AcnRzPWEuZG9jdW1lbnQ/YihhLCEwKTpmdW5jdGlvbihhKXtpZighYS5kb2N1bWVu%0AdCl0aHJvdyBuZXcgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRo%0AIGEgZG9jdW1lbnQiKTtyZXR1cm4gYihhKX06YihhKX0oInVuZGVmaW5lZCIhPXR5%0AcGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxk%0APWMuc2xpY2UsZT1jLmNvbmNhdCxmPWMucHVzaCxnPWMuaW5kZXhPZixoPXt9LGk9%0AaC50b1N0cmluZyxqPWguaGFzT3duUHJvcGVydHksaz17fSxsPWEuZG9jdW1lbnQs%0AbT0iMi4xLjEiLG49ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IG4uZm4uaW5pdChh%0ALGIpfSxvPS9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZyxwPS9e%0ALW1zLS8scT0vLShbXGRhLXpdKS9naSxyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIu%0AdG9VcHBlckNhc2UoKX07bi5mbj1uLnByb3RvdHlwZT17anF1ZXJ5Om0sY29uc3Ry%0AdWN0b3I6bixzZWxlY3RvcjoiIixsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7%0AcmV0dXJuIGQuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBudWxs%0AIT1hPzA+YT90aGlzW2ErdGhpcy5sZW5ndGhdOnRoaXNbYV06ZC5jYWxsKHRoaXMp%0AfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSl7dmFyIGI9bi5tZXJnZSh0aGlzLmNvbnN0%0AcnVjdG9yKCksYSk7cmV0dXJuIGIucHJldk9iamVjdD10aGlzLGIuY29udGV4dD10%0AaGlzLmNvbnRleHQsYn0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBuLmVhY2go%0AdGhpcyxhLGIpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNr%0AKG4ubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0p%0AKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZC5hcHBs%0AeSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlz%0ALmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpm%0AdW5jdGlvbihhKXt2YXIgYj10aGlzLmxlbmd0aCxjPSthKygwPmE/YjowKTtyZXR1%0Acm4gdGhpcy5wdXNoU3RhY2soYz49MCYmYj5jP1t0aGlzW2NdXTpbXSl9LGVuZDpm%0AdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0%0Ab3IobnVsbCl9LHB1c2g6Zixzb3J0OmMuc29ydCxzcGxpY2U6Yy5zcGxpY2V9LG4u%0AZXh0ZW5kPW4uZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGc9%0AYXJndW1lbnRzWzBdfHx7fSxoPTEsaT1hcmd1bWVudHMubGVuZ3RoLGo9ITE7Zm9y%0AKCJib29sZWFuIj09dHlwZW9mIGcmJihqPWcsZz1hcmd1bWVudHNbaF18fHt9LGgr%0AKyksIm9iamVjdCI9PXR5cGVvZiBnfHxuLmlzRnVuY3Rpb24oZyl8fChnPXt9KSxo%0APT09aSYmKGc9dGhpcyxoLS0pO2k+aDtoKyspaWYobnVsbCE9KGE9YXJndW1lbnRz%0AW2hdKSlmb3IoYiBpbiBhKWM9Z1tiXSxkPWFbYl0sZyE9PWQmJihqJiZkJiYobi5p%0Ac1BsYWluT2JqZWN0KGQpfHwoZT1uLmlzQXJyYXkoZCkpKT8oZT8oZT0hMSxmPWMm%0AJm4uaXNBcnJheShjKT9jOltdKTpmPWMmJm4uaXNQbGFpbk9iamVjdChjKT9jOnt9%0ALGdbYl09bi5leHRlbmQoaixmLGQpKTp2b2lkIDAhPT1kJiYoZ1tiXT1kKSk7cmV0%0AdXJuIGd9LG4uZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhtK01hdGgucmFuZG9t%0AKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24o%0AYSl7dGhyb3cgbmV3IEVycm9yKGEpfSxub29wOmZ1bmN0aW9uKCl7fSxpc0Z1bmN0%0AaW9uOmZ1bmN0aW9uKGEpe3JldHVybiJmdW5jdGlvbiI9PT1uLnR5cGUoYSl9LGlz%0AQXJyYXk6QXJyYXkuaXNBcnJheSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4g%0AbnVsbCE9YSYmYT09PWEud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oYSl7cmV0%0AdXJuIW4uaXNBcnJheShhKSYmYS1wYXJzZUZsb2F0KGEpPj0wfSxpc1BsYWluT2Jq%0AZWN0OmZ1bmN0aW9uKGEpe3JldHVybiJvYmplY3QiIT09bi50eXBlKGEpfHxhLm5v%0AZGVUeXBlfHxuLmlzV2luZG93KGEpPyExOmEuY29uc3RydWN0b3ImJiFqLmNhbGwo%0AYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJvdG90eXBlT2YiKT8hMTohMH0s%0AaXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVy%0AbiExO3JldHVybiEwfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP2Er%0AIiI6Im9iamVjdCI9PXR5cGVvZiBhfHwiZnVuY3Rpb24iPT10eXBlb2YgYT9oW2ku%0AY2FsbChhKV18fCJvYmplY3QiOnR5cGVvZiBhfSxnbG9iYWxFdmFsOmZ1bmN0aW9u%0AKGEpe3ZhciBiLGM9ZXZhbDthPW4udHJpbShhKSxhJiYoMT09PWEuaW5kZXhPZigi%0AdXNlIHN0cmljdCIpPyhiPWwuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksYi50ZXh0%0APWEsbC5oZWFkLmFwcGVuZENoaWxkKGIpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo%0AYikpOmMoYSkpfSxjYW1lbENhc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFj%0AZShwLCJtcy0iKS5yZXBsYWNlKHEscil9LG5vZGVOYW1lOmZ1bmN0aW9uKGEsYil7%0AcmV0dXJuIGEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWIu%0AdG9Mb3dlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZT0wLGY9%0AYS5sZW5ndGgsZz1zKGEpO2lmKGMpe2lmKGcpe2Zvcig7Zj5lO2UrKylpZihkPWIu%0AYXBwbHkoYVtlXSxjKSxkPT09ITEpYnJlYWt9ZWxzZSBmb3IoZSBpbiBhKWlmKGQ9%0AYi5hcHBseShhW2VdLGMpLGQ9PT0hMSlicmVha31lbHNlIGlmKGcpe2Zvcig7Zj5l%0AO2UrKylpZihkPWIuY2FsbChhW2VdLGUsYVtlXSksZD09PSExKWJyZWFrfWVsc2Ug%0AZm9yKGUgaW4gYSlpZihkPWIuY2FsbChhW2VdLGUsYVtlXSksZD09PSExKWJyZWFr%0AO3JldHVybiBhfSx0cmltOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hPyIiOihh%0AKyIiKS5yZXBsYWNlKG8sIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oYSxiKXt2YXIg%0AYz1ifHxbXTtyZXR1cm4gbnVsbCE9YSYmKHMoT2JqZWN0KGEpKT9uLm1lcmdlKGMs%0AInN0cmluZyI9PXR5cGVvZiBhP1thXTphKTpmLmNhbGwoYyxhKSksY30saW5BcnJh%0AeTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGw9PWI/LTE6Zy5jYWxsKGIsYSxj%0AKX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9K2IubGVuZ3RoLGQ9MCxl%0APWEubGVuZ3RoO2M+ZDtkKyspYVtlKytdPWJbZF07cmV0dXJuIGEubGVuZ3RoPWUs%0AYX0sZ3JlcDpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkLGU9W10sZj0wLGc9YS5s%0AZW5ndGgsaD0hYztnPmY7ZisrKWQ9IWIoYVtmXSxmKSxkIT09aCYmZS5wdXNoKGFb%0AZl0pO3JldHVybiBlfSxtYXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9MCxnPWEu%0AbGVuZ3RoLGg9cyhhKSxpPVtdO2lmKGgpZm9yKDtnPmY7ZisrKWQ9YihhW2ZdLGYs%0AYyksbnVsbCE9ZCYmaS5wdXNoKGQpO2Vsc2UgZm9yKGYgaW4gYSlkPWIoYVtmXSxm%0ALGMpLG51bGwhPWQmJmkucHVzaChkKTtyZXR1cm4gZS5hcHBseShbXSxpKX0sZ3Vp%0AZDoxLHByb3h5OmZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmO3JldHVybiJzdHJpbmci%0APT10eXBlb2YgYiYmKGM9YVtiXSxiPWEsYT1jKSxuLmlzRnVuY3Rpb24oYSk/KGU9%0AZC5jYWxsKGFyZ3VtZW50cywyKSxmPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHko%0AYnx8dGhpcyxlLmNvbmNhdChkLmNhbGwoYXJndW1lbnRzKSkpfSxmLmd1aWQ9YS5n%0AdWlkPWEuZ3VpZHx8bi5ndWlkKyssZik6dm9pZCAwfSxub3c6RGF0ZS5ub3csc3Vw%0AcG9ydDprfSksbi5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24g%0AQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIi5zcGxpdCgiICIpLGZ1bmN0%0AaW9uKGEsYil7aFsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KTtm%0AdW5jdGlvbiBzKGEpe3ZhciBiPWEubGVuZ3RoLGM9bi50eXBlKGEpO3JldHVybiJm%0AdW5jdGlvbiI9PT1jfHxuLmlzV2luZG93KGEpPyExOjE9PT1hLm5vZGVUeXBlJiZi%0APyEwOiJhcnJheSI9PT1jfHwwPT09Ynx8Im51bWJlciI9PXR5cGVvZiBiJiZiPjAm%0AJmItMSBpbiBhfXZhciB0PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGks%0AaixrLGwsbSxuLG8scCxxLHIscyx0LHU9InNpenpsZSIrLW5ldyBEYXRlLHY9YS5k%0Ab2N1bWVudCx3PTAseD0wLHk9Z2IoKSx6PWdiKCksQT1nYigpLEI9ZnVuY3Rpb24o%0AYSxiKXtyZXR1cm4gYT09PWImJihsPSEwKSwwfSxDPSJ1bmRlZmluZWQiLEQ9MTw8%0AMzEsRT17fS5oYXNPd25Qcm9wZXJ0eSxGPVtdLEc9Ri5wb3AsSD1GLnB1c2gsST1G%0ALnB1c2gsSj1GLnNsaWNlLEs9Ri5pbmRleE9mfHxmdW5jdGlvbihhKXtmb3IodmFy%0AIGI9MCxjPXRoaXMubGVuZ3RoO2M+YjtiKyspaWYodGhpc1tiXT09PWEpcmV0dXJu%0AIGI7cmV0dXJuLTF9LEw9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3Vz%0AfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxs%0Ab29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixNPSJb%0AXFx4MjBcXHRcXHJcXG5cXGZdIixOPSIoPzpcXFxcLnxbXFx3LV18W15cXHgwMC1c%0AXHhhMF0pKyIsTz1OLnJlcGxhY2UoInciLCJ3IyIpLFA9IlxcWyIrTSsiKigiK04r%0AIikoPzoiK00rIiooWypeJHwhfl0/PSkiK00rIiooPzonKCg/OlxcXFwufFteXFxc%0AXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitPKyIpKXwpIitN%0AKyIqXFxdIixRPSI6KCIrTisiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkq%0AKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwo%0AKVtcXF1dfCIrUCsiKSopfC4qKVxcKXwpIixSPW5ldyBSZWdFeHAoIl4iK00rIit8%0AKCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTSsiKyQiLCJnIiksUz1uZXcgUmVn%0ARXhwKCJeIitNKyIqLCIrTSsiKiIpLFQ9bmV3IFJlZ0V4cCgiXiIrTSsiKihbPit+%0AXXwiK00rIikiK00rIioiKSxVPW5ldyBSZWdFeHAoIj0iK00rIiooW15cXF0nXCJd%0AKj8pIitNKyIqXFxdIiwiZyIpLFY9bmV3IFJlZ0V4cChRKSxXPW5ldyBSZWdFeHAo%0AIl4iK08rIiQiKSxYPXtJRDpuZXcgUmVnRXhwKCJeIygiK04rIikiKSxDTEFTUzpu%0AZXcgUmVnRXhwKCJeXFwuKCIrTisiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTi5y%0AZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrUCksUFNF%0AVURPOm5ldyBSZWdFeHAoIl4iK1EpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8%0AZmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIr%0ATSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCki%0AK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAo%0AIl4oPzoiK0wrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitN%0AKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpc%0AXCgiK00rIiooKD86LVxcZCk/XFxkKikiK00rIipcXCl8KSg/PVteLV18JCkiLCJp%0AIil9LFk9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxaPS9e%0AaFxkJC9pLCQ9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLF89L14oPzojKFtcdy1d%0AKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxhYj0vWyt+XS8sYmI9Lyd8XFwvZyxjYj1u%0AZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK00rIj98KCIrTSsiKXwuKSIs%0AImlnIiksZGI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIweCIrYi02NTUzNjtyZXR1%0Acm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpT%0AdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9O3Ry%0AeXtJLmFwcGx5KEY9Si5jYWxsKHYuY2hpbGROb2Rlcyksdi5jaGlsZE5vZGVzKSxG%0AW3YuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGViKXtJPXthcHBs%0AeTpGLmxlbmd0aD9mdW5jdGlvbihhLGIpe0guYXBwbHkoYSxKLmNhbGwoYikpfTpm%0AdW5jdGlvbihhLGIpe3ZhciBjPWEubGVuZ3RoLGQ9MDt3aGlsZShhW2MrK109Yltk%0AKytdKTthLmxlbmd0aD1jLTF9fX1mdW5jdGlvbiBmYihhLGIsZCxlKXt2YXIgZixo%0ALGosayxsLG8scixzLHcseDtpZigoYj9iLm93bmVyRG9jdW1lbnR8fGI6dikhPT1u%0AJiZtKGIpLGI9Ynx8bixkPWR8fFtdLCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0%0AdXJuIGQ7aWYoMSE9PShrPWIubm9kZVR5cGUpJiY5IT09aylyZXR1cm5bXTtpZihw%0AJiYhZSl7aWYoZj1fLmV4ZWMoYSkpaWYoaj1mWzFdKXtpZig5PT09ayl7aWYoaD1i%0ALmdldEVsZW1lbnRCeUlkKGopLCFofHwhaC5wYXJlbnROb2RlKXJldHVybiBkO2lm%0AKGguaWQ9PT1qKXJldHVybiBkLnB1c2goaCksZH1lbHNlIGlmKGIub3duZXJEb2N1%0AbWVudCYmKGg9Yi5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGopKSYmdChi%0ALGgpJiZoLmlkPT09ailyZXR1cm4gZC5wdXNoKGgpLGR9ZWxzZXtpZihmWzJdKXJl%0AdHVybiBJLmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSksZDtpZigo%0Aaj1mWzNdKSYmYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZiLmdldEVsZW1lbnRz%0AQnlDbGFzc05hbWUpcmV0dXJuIEkuYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFz%0Ac05hbWUoaikpLGR9aWYoYy5xc2EmJighcXx8IXEudGVzdChhKSkpe2lmKHM9cj11%0ALHc9Yix4PTk9PT1rJiZhLDE9PT1rJiYib2JqZWN0IiE9PWIubm9kZU5hbWUudG9M%0Ab3dlckNhc2UoKSl7bz1nKGEpLChyPWIuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXIu%0AcmVwbGFjZShiYiwiXFwkJiIpOmIuc2V0QXR0cmlidXRlKCJpZCIscykscz0iW2lk%0APSciK3MrIiddICIsbD1vLmxlbmd0aDt3aGlsZShsLS0pb1tsXT1zK3FiKG9bbF0p%0AO3c9YWIudGVzdChhKSYmb2IoYi5wYXJlbnROb2RlKXx8Yix4PW8uam9pbigiLCIp%0AfWlmKHgpdHJ5e3JldHVybiBJLmFwcGx5KGQsdy5xdWVyeVNlbGVjdG9yQWxsKHgp%0AKSxkfWNhdGNoKHkpe31maW5hbGx5e3J8fGIucmVtb3ZlQXR0cmlidXRlKCJpZCIp%0AfX19cmV0dXJuIGkoYS5yZXBsYWNlKFIsIiQxIiksYixkLGUpfWZ1bmN0aW9uIGdi%0AKCl7dmFyIGE9W107ZnVuY3Rpb24gYihjLGUpe3JldHVybiBhLnB1c2goYysiICIp%0APmQuY2FjaGVMZW5ndGgmJmRlbGV0ZSBiW2Euc2hpZnQoKV0sYltjKyIgIl09ZX1y%0AZXR1cm4gYn1mdW5jdGlvbiBoYihhKXtyZXR1cm4gYVt1XT0hMCxhfWZ1bmN0aW9u%0AIGliKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEh%0AYShiKX1jYXRjaChjKXtyZXR1cm4hMX1maW5hbGx5e2IucGFyZW50Tm9kZSYmYi5w%0AYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH19ZnVuY3Rpb24gamIoYSxi%0AKXt2YXIgYz1hLnNwbGl0KCJ8IiksZT1hLmxlbmd0aDt3aGlsZShlLS0pZC5hdHRy%0ASGFuZGxlW2NbZV1dPWJ9ZnVuY3Rpb24ga2IoYSxiKXt2YXIgYz1iJiZhLGQ9YyYm%0AMT09PWEubm9kZVR5cGUmJjE9PT1iLm5vZGVUeXBlJiYofmIuc291cmNlSW5kZXh8%0AfEQpLSh+YS5zb3VyY2VJbmRleHx8RCk7aWYoZClyZXR1cm4gZDtpZihjKXdoaWxl%0AKGM9Yy5uZXh0U2libGluZylpZihjPT09YilyZXR1cm4tMTtyZXR1cm4gYT8xOi0x%0AfWZ1bmN0aW9uIGxiKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVO%0AYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWMmJmIudHlwZT09PWF9%0AfWZ1bmN0aW9uIG1iKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVO%0AYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1jfHwiYnV0dG9uIj09%0APWMpJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBuYihhKXtyZXR1cm4gaGIoZnVuY3Rp%0Ab24oYil7cmV0dXJuIGI9K2IsaGIoZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEoW10s%0AYy5sZW5ndGgsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pY1tlPWZbZ11dJiYoY1tl%0AXT0hKGRbZV09Y1tlXSkpfSl9KX1mdW5jdGlvbiBvYihhKXtyZXR1cm4gYSYmdHlw%0AZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPT1DJiZhfWM9ZmIuc3VwcG9ydD17%0AfSxmPWZiLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJihhLm93bmVyRG9jdW1l%0AbnR8fGEpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj8iSFRNTCIhPT1iLm5vZGVO%0AYW1lOiExfSxtPWZiLnNldERvY3VtZW50PWZ1bmN0aW9uKGEpe3ZhciBiLGU9YT9h%0ALm93bmVyRG9jdW1lbnR8fGE6dixnPWUuZGVmYXVsdFZpZXc7cmV0dXJuIGUhPT1u%0AJiY5PT09ZS5ub2RlVHlwZSYmZS5kb2N1bWVudEVsZW1lbnQ/KG49ZSxvPWUuZG9j%0AdW1lbnRFbGVtZW50LHA9IWYoZSksZyYmZyE9PWcudG9wJiYoZy5hZGRFdmVudExp%0Ac3RlbmVyP2cuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixmdW5jdGlvbigpe20o%0AKX0sITEpOmcuYXR0YWNoRXZlbnQmJmcuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixm%0AdW5jdGlvbigpe20oKX0pKSxjLmF0dHJpYnV0ZXM9aWIoZnVuY3Rpb24oYSl7cmV0%0AdXJuIGEuY2xhc3NOYW1lPSJpIiwhYS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIp%0AfSksYy5nZXRFbGVtZW50c0J5VGFnTmFtZT1pYihmdW5jdGlvbihhKXtyZXR1cm4g%0AYS5hcHBlbmRDaGlsZChlLmNyZWF0ZUNvbW1lbnQoIiIpKSwhYS5nZXRFbGVtZW50%0Ac0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGMuZ2V0RWxlbWVudHNCeUNsYXNzTmFt%0AZT0kLnRlc3QoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSYmaWIoZnVuY3Rpb24o%0AYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSdhJz48L2Rpdj48ZGl2%0AIGNsYXNzPSdhIGknPjwvZGl2PiIsYS5maXJzdENoaWxkLmNsYXNzTmFtZT0iaSIs%0AMj09PWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaSIpLmxlbmd0aH0pLGMuZ2V0%0AQnlJZD1pYihmdW5jdGlvbihhKXtyZXR1cm4gby5hcHBlbmRDaGlsZChhKS5pZD11%0ALCFlLmdldEVsZW1lbnRzQnlOYW1lfHwhZS5nZXRFbGVtZW50c0J5TmFtZSh1KS5s%0AZW5ndGh9KSxjLmdldEJ5SWQ/KGQuZmluZC5JRD1mdW5jdGlvbihhLGIpe2lmKHR5%0AcGVvZiBiLmdldEVsZW1lbnRCeUlkIT09QyYmcCl7dmFyIGM9Yi5nZXRFbGVtZW50%0AQnlJZChhKTtyZXR1cm4gYyYmYy5wYXJlbnROb2RlP1tjXTpbXX19LGQuZmlsdGVy%0ALklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShjYixkYik7cmV0dXJuIGZ1%0AbmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaWQiKT09PWJ9fSk6KGRl%0AbGV0ZSBkLmZpbmQuSUQsZC5maWx0ZXIuSUQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5y%0AZXBsYWNlKGNiLGRiKTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGM9dHlwZW9mIGEu%0AZ2V0QXR0cmlidXRlTm9kZSE9PUMmJmEuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTty%0AZXR1cm4gYyYmYy52YWx1ZT09PWJ9fSksZC5maW5kLlRBRz1jLmdldEVsZW1lbnRz%0AQnlUYWdOYW1lP2Z1bmN0aW9uKGEsYil7cmV0dXJuIHR5cGVvZiBiLmdldEVsZW1l%0AbnRzQnlUYWdOYW1lIT09Qz9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOnZvaWQg%0AMH06ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9MCxmPWIuZ2V0RWxlbWVudHNC%0AeVRhZ05hbWUoYSk7aWYoIioiPT09YSl7d2hpbGUoYz1mW2UrK10pMT09PWMubm9k%0AZVR5cGUmJmQucHVzaChjKTtyZXR1cm4gZH1yZXR1cm4gZn0sZC5maW5kLkNMQVNT%0APWMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oYSxiKXtyZXR1cm4g%0AdHlwZW9mIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PUMmJnA/Yi5nZXRFbGVt%0AZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFzYT0kLnRl%0Ac3QoZS5xdWVyeVNlbGVjdG9yQWxsKSkmJihpYihmdW5jdGlvbihhKXthLmlubmVy%0ASFRNTD0iPHNlbGVjdCBtc2FsbG93Y2xpcD0nJz48b3B0aW9uIHNlbGVjdGVkPScn%0APjwvb3B0aW9uPjwvc2VsZWN0PiIsYS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxv%0Ad2NsaXBePScnXSIpLmxlbmd0aCYmcS5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xc%0AIlwiKSIpLGEucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8%0AcS5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK0wrIikiKSxhLnF1ZXJ5U2VsZWN0%0Ab3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxxLnB1c2goIjpjaGVja2VkIil9KSxp%0AYihmdW5jdGlvbihhKXt2YXIgYj1lLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Yi5z%0AZXRBdHRyaWJ1dGUoInR5cGUiLCJoaWRkZW4iKSxhLmFwcGVuZENoaWxkKGIpLnNl%0AdEF0dHJpYnV0ZSgibmFtZSIsIkQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1l%0APWRdIikubGVuZ3RoJiZxLnB1c2goIm5hbWUiK00rIipbKl4kfCF+XT89IiksYS5x%0AdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aHx8cS5wdXNoKCI6ZW5h%0AYmxlZCIsIjpkaXNhYmxlZCIpLGEucXVlcnlTZWxlY3RvckFsbCgiKiw6eCIpLHEu%0AcHVzaCgiLC4qOiIpfSkpLChjLm1hdGNoZXNTZWxlY3Rvcj0kLnRlc3Qocz1vLm1h%0AdGNoZXN8fG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxvLm1vek1hdGNoZXNTZWxl%0AY3Rvcnx8by5vTWF0Y2hlc1NlbGVjdG9yfHxvLm1zTWF0Y2hlc1NlbGVjdG9yKSkm%0AJmliKGZ1bmN0aW9uKGEpe2MuZGlzY29ubmVjdGVkTWF0Y2g9cy5jYWxsKGEsImRp%0AdiIpLHMuY2FsbChhLCJbcyE9JyddOngiKSxyLnB1c2goIiE9IixRKX0pLHE9cS5s%0AZW5ndGgmJm5ldyBSZWdFeHAocS5qb2luKCJ8IikpLHI9ci5sZW5ndGgmJm5ldyBS%0AZWdFeHAoci5qb2luKCJ8IikpLGI9JC50ZXN0KG8uY29tcGFyZURvY3VtZW50UG9z%0AaXRpb24pLHQ9Ynx8JC50ZXN0KG8uY29udGFpbnMpP2Z1bmN0aW9uKGEsYil7dmFy%0AIGM9OT09PWEubm9kZVR5cGU/YS5kb2N1bWVudEVsZW1lbnQ6YSxkPWImJmIucGFy%0AZW50Tm9kZTtyZXR1cm4gYT09PWR8fCEoIWR8fDEhPT1kLm5vZGVUeXBlfHwhKGMu%0AY29udGFpbnM/Yy5jb250YWlucyhkKTphLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9u%0AJiYxNiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQpKSl9OmZ1bmN0aW9uKGEs%0AYil7aWYoYil3aGlsZShiPWIucGFyZW50Tm9kZSlpZihiPT09YSlyZXR1cm4hMDty%0AZXR1cm4hMX0sQj1iP2Z1bmN0aW9uKGEsYil7aWYoYT09PWIpcmV0dXJuIGw9ITAs%0AMDt2YXIgZD0hYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hYi5jb21wYXJlRG9j%0AdW1lbnRQb3NpdGlvbjtyZXR1cm4gZD9kOihkPShhLm93bmVyRG9jdW1lbnR8fGEp%0APT09KGIub3duZXJEb2N1bWVudHx8Yik/YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlv%0AbihiKToxLDEmZHx8IWMuc29ydERldGFjaGVkJiZiLmNvbXBhcmVEb2N1bWVudFBv%0Ac2l0aW9uKGEpPT09ZD9hPT09ZXx8YS5vd25lckRvY3VtZW50PT09diYmdCh2LGEp%0APy0xOmI9PT1lfHxiLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYsYik/MTprP0suY2Fs%0AbChrLGEpLUsuY2FsbChrLGIpOjA6NCZkPy0xOjEpfTpmdW5jdGlvbihhLGIpe2lm%0AKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGMsZD0wLGY9YS5wYXJlbnROb2RlLGc9%0AYi5wYXJlbnROb2RlLGg9W2FdLGk9W2JdO2lmKCFmfHwhZylyZXR1cm4gYT09PWU/%0ALTE6Yj09PWU/MTpmPy0xOmc/MTprP0suY2FsbChrLGEpLUsuY2FsbChrLGIpOjA7%0AaWYoZj09PWcpcmV0dXJuIGtiKGEsYik7Yz1hO3doaWxlKGM9Yy5wYXJlbnROb2Rl%0AKWgudW5zaGlmdChjKTtjPWI7d2hpbGUoYz1jLnBhcmVudE5vZGUpaS51bnNoaWZ0%0AKGMpO3doaWxlKGhbZF09PT1pW2RdKWQrKztyZXR1cm4gZD9rYihoW2RdLGlbZF0p%0AOmhbZF09PT12Py0xOmlbZF09PT12PzE6MH0sZSk6bn0sZmIubWF0Y2hlcz1mdW5j%0AdGlvbihhLGIpe3JldHVybiBmYihhLG51bGwsbnVsbCxiKX0sZmIubWF0Y2hlc1Nl%0AbGVjdG9yPWZ1bmN0aW9uKGEsYil7aWYoKGEub3duZXJEb2N1bWVudHx8YSkhPT1u%0AJiZtKGEpLGI9Yi5yZXBsYWNlKFUsIj0nJDEnXSIpLCEoIWMubWF0Y2hlc1NlbGVj%0AdG9yfHwhcHx8ciYmci50ZXN0KGIpfHxxJiZxLnRlc3QoYikpKXRyeXt2YXIgZD1z%0ALmNhbGwoYSxiKTtpZihkfHxjLmRpc2Nvbm5lY3RlZE1hdGNofHxhLmRvY3VtZW50%0AJiYxMSE9PWEuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIGR9Y2F0Y2goZSl7fXJl%0AdHVybiBmYihiLG4sbnVsbCxbYV0pLmxlbmd0aD4wfSxmYi5jb250YWlucz1mdW5j%0AdGlvbihhLGIpe3JldHVybihhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKSx0%0AKGEsYil9LGZiLmF0dHI9ZnVuY3Rpb24oYSxiKXsoYS5vd25lckRvY3VtZW50fHxh%0AKSE9PW4mJm0oYSk7dmFyIGU9ZC5hdHRySGFuZGxlW2IudG9Mb3dlckNhc2UoKV0s%0AZj1lJiZFLmNhbGwoZC5hdHRySGFuZGxlLGIudG9Mb3dlckNhc2UoKSk/ZShhLGIs%0AIXApOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09Zj9mOmMuYXR0cmlidXRlc3x8IXA/%0AYS5nZXRBdHRyaWJ1dGUoYik6KGY9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSYmZi5z%0AcGVjaWZpZWQ/Zi52YWx1ZTpudWxsfSxmYi5lcnJvcj1mdW5jdGlvbihhKXt0aHJv%0AdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Np%0Ab246ICIrYSl9LGZiLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7dmFyIGIsZD1bXSxl%0APTAsZj0wO2lmKGw9IWMuZGV0ZWN0RHVwbGljYXRlcyxrPSFjLnNvcnRTdGFibGUm%0AJmEuc2xpY2UoMCksYS5zb3J0KEIpLGwpe3doaWxlKGI9YVtmKytdKWI9PT1hW2Zd%0AJiYoZT1kLnB1c2goZikpO3doaWxlKGUtLSlhLnNwbGljZShkW2VdLDEpfXJldHVy%0AbiBrPW51bGwsYX0sZT1mYi5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9IiIs%0AZD0wLGY9YS5ub2RlVHlwZTtpZihmKXtpZigxPT09Znx8OT09PWZ8fDExPT09Zil7%0AaWYoInN0cmluZyI9PXR5cGVvZiBhLnRleHRDb250ZW50KXJldHVybiBhLnRleHRD%0Ab250ZW50O2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyljKz1l%0AKGEpfWVsc2UgaWYoMz09PWZ8fDQ9PT1mKXJldHVybiBhLm5vZGVWYWx1ZX1lbHNl%0AIHdoaWxlKGI9YVtkKytdKWMrPWUoYik7cmV0dXJuIGN9LGQ9ZmIuc2VsZWN0b3Jz%0APXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86aGIsbWF0Y2g6WCxhdHRySGFu%0AZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixm%0AaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlv%0AdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9%0AfSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS5y%0AZXBsYWNlKGNiLGRiKSxhWzNdPShhWzNdfHxhWzRdfHxhWzVdfHwiIikucmVwbGFj%0AZShjYixkYiksIn49Ij09PWFbMl0mJihhWzNdPSIgIithWzNdKyIgIiksYS5zbGlj%0AZSgwLDQpfSxDSElMRDpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnRvTG93%0AZXJDYXNlKCksIm50aCI9PT1hWzFdLnNsaWNlKDAsMyk/KGFbM118fGZiLmVycm9y%0AKGFbMF0pLGFbNF09KyhhWzRdP2FbNV0rKGFbNl18fDEpOjIqKCJldmVuIj09PWFb%0AM118fCJvZGQiPT09YVszXSkpLGFbNV09KyhhWzddK2FbOF18fCJvZGQiPT09YVsz%0AXSkpOmFbM10mJmZiLmVycm9yKGFbMF0pLGF9LFBTRVVETzpmdW5jdGlvbihhKXt2%0AYXIgYixjPSFhWzZdJiZhWzJdO3JldHVybiBYLkNISUxELnRlc3QoYVswXSk/bnVs%0AbDooYVszXT9hWzJdPWFbNF18fGFbNV18fCIiOmMmJlYudGVzdChjKSYmKGI9Zyhj%0ALCEwKSkmJihiPWMuaW5kZXhPZigiKSIsYy5sZW5ndGgtYiktYy5sZW5ndGgpJiYo%0AYVswXT1hWzBdLnNsaWNlKDAsYiksYVsyXT1jLnNsaWNlKDAsYikpLGEuc2xpY2Uo%0AMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2Uo%0AY2IsZGIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09YT9mdW5jdGlvbigpe3Jl%0AdHVybiEwfTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFt%0AZS50b0xvd2VyQ2FzZSgpPT09Yn19LENMQVNTOmZ1bmN0aW9uKGEpe3ZhciBiPXlb%0AYSsiICJdO3JldHVybiBifHwoYj1uZXcgUmVnRXhwKCIoXnwiK00rIikiK2ErIigi%0AK00rInwkKSIpKSYmeShhLGZ1bmN0aW9uKGEpe3JldHVybiBiLnRlc3QoInN0cmlu%0AZyI9PXR5cGVvZiBhLmNsYXNzTmFtZSYmYS5jbGFzc05hbWV8fHR5cGVvZiBhLmdl%0AdEF0dHJpYnV0ZSE9PUMmJmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0s%0AQVRUUjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciBlPWZi%0ALmF0dHIoZCxhKTtyZXR1cm4gbnVsbD09ZT8iIT0iPT09YjpiPyhlKz0iIiwiPSI9%0APT1iP2U9PT1jOiIhPSI9PT1iP2UhPT1jOiJePSI9PT1iP2MmJjA9PT1lLmluZGV4%0AT2YoYyk6Iio9Ij09PWI/YyYmZS5pbmRleE9mKGMpPi0xOiIkPSI9PT1iP2MmJmUu%0Ac2xpY2UoLWMubGVuZ3RoKT09PWM6In49Ij09PWI/KCIgIitlKyIgIikuaW5kZXhP%0AZihjKT4tMToifD0iPT09Yj9lPT09Y3x8ZS5zbGljZSgwLGMubGVuZ3RoKzEpPT09%0AYysiLSI6ITEpOiEwfX0sQ0hJTEQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj0i%0AbnRoIiE9PWEuc2xpY2UoMCwzKSxnPSJsYXN0IiE9PWEuc2xpY2UoLTQpLGg9Im9m%0ALXR5cGUiPT09YjtyZXR1cm4gMT09PWQmJjA9PT1lP2Z1bmN0aW9uKGEpe3JldHVy%0AbiEhYS5wYXJlbnROb2RlfTpmdW5jdGlvbihiLGMsaSl7dmFyIGosayxsLG0sbixv%0ALHA9ZiE9PWc/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixxPWIucGFy%0AZW50Tm9kZSxyPWgmJmIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxzPSFpJiYhaDtp%0AZihxKXtpZihmKXt3aGlsZShwKXtsPWI7d2hpbGUobD1sW3BdKWlmKGg/bC5ub2Rl%0ATmFtZS50b0xvd2VyQ2FzZSgpPT09cjoxPT09bC5ub2RlVHlwZSlyZXR1cm4hMTtv%0APXA9Im9ubHkiPT09YSYmIW8mJiJuZXh0U2libGluZyJ9cmV0dXJuITB9aWYobz1b%0AZz9xLmZpcnN0Q2hpbGQ6cS5sYXN0Q2hpbGRdLGcmJnMpe2s9cVt1XXx8KHFbdV09%0Ae30pLGo9a1thXXx8W10sbj1qWzBdPT09dyYmalsxXSxtPWpbMF09PT13JiZqWzJd%0ALGw9biYmcS5jaGlsZE5vZGVzW25dO3doaWxlKGw9KytuJiZsJiZsW3BdfHwobT1u%0APTApfHxvLnBvcCgpKWlmKDE9PT1sLm5vZGVUeXBlJiYrK20mJmw9PT1iKXtrW2Fd%0APVt3LG4sbV07YnJlYWt9fWVsc2UgaWYocyYmKGo9KGJbdV18fChiW3VdPXt9KSlb%0AYV0pJiZqWzBdPT09dyltPWpbMV07ZWxzZSB3aGlsZShsPSsrbiYmbCYmbFtwXXx8%0AKG09bj0wKXx8by5wb3AoKSlpZigoaD9sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9%0APT1yOjE9PT1sLm5vZGVUeXBlKSYmKyttJiYocyYmKChsW3VdfHwobFt1XT17fSkp%0AW2FdPVt3LG1dKSxsPT09YikpYnJlYWs7cmV0dXJuIG0tPWUsbT09PWR8fG0lZD09%0APTAmJm0vZD49MH19fSxQU0VVRE86ZnVuY3Rpb24oYSxiKXt2YXIgYyxlPWQucHNl%0AdWRvc1thXXx8ZC5zZXRGaWx0ZXJzW2EudG9Mb3dlckNhc2UoKV18fGZiLmVycm9y%0AKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrYSk7cmV0dXJuIGVbdV0/ZShiKTplLmxl%0Abmd0aD4xPyhjPVthLGEsIiIsYl0sZC5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5%0AKGEudG9Mb3dlckNhc2UoKSk/aGIoZnVuY3Rpb24oYSxjKXt2YXIgZCxmPWUoYSxi%0AKSxnPWYubGVuZ3RoO3doaWxlKGctLSlkPUsuY2FsbChhLGZbZ10pLGFbZF09IShj%0AW2RdPWZbZ10pfSk6ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSwwLGMpfSk6ZX19LHBz%0AZXVkb3M6e25vdDpoYihmdW5jdGlvbihhKXt2YXIgYj1bXSxjPVtdLGQ9aChhLnJl%0AcGxhY2UoUiwiJDEiKSk7cmV0dXJuIGRbdV0/aGIoZnVuY3Rpb24oYSxiLGMsZSl7%0AdmFyIGYsZz1kKGEsbnVsbCxlLFtdKSxoPWEubGVuZ3RoO3doaWxlKGgtLSkoZj1n%0AW2hdKSYmKGFbaF09IShiW2hdPWYpKX0pOmZ1bmN0aW9uKGEsZSxmKXtyZXR1cm4g%0AYlswXT1hLGQoYixudWxsLGYsYyksIWMucG9wKCl9fSksaGFzOmhiKGZ1bmN0aW9u%0AKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZmIoYSxiKS5sZW5ndGg+MH19%0AKSxjb250YWluczpoYihmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0%0AdXJuKGIudGV4dENvbnRlbnR8fGIuaW5uZXJUZXh0fHxlKGIpKS5pbmRleE9mKGEp%0APi0xfX0pLGxhbmc6aGIoZnVuY3Rpb24oYSl7cmV0dXJuIFcudGVzdChhfHwiIil8%0AfGZiLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK2EpLGE9YS5yZXBsYWNlKGNi%0ALGRiKS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKGIpe3ZhciBjO2RvIGlmKGM9cD9i%0ALmxhbmc6Yi5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIil8fGIuZ2V0QXR0cmlidXRl%0AKCJsYW5nIikpcmV0dXJuIGM9Yy50b0xvd2VyQ2FzZSgpLGM9PT1hfHwwPT09Yy5p%0AbmRleE9mKGErIi0iKTt3aGlsZSgoYj1iLnBhcmVudE5vZGUpJiYxPT09Yi5ub2Rl%0AVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGIpe3ZhciBjPWEubG9j%0AYXRpb24mJmEubG9jYXRpb24uaGFzaDtyZXR1cm4gYyYmYy5zbGljZSgxKT09PWIu%0AaWR9LHJvb3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1vfSxmb2N1czpmdW5jdGlv%0AbihhKXtyZXR1cm4gYT09PW4uYWN0aXZlRWxlbWVudCYmKCFuLmhhc0ZvY3VzfHxu%0ALmhhc0ZvY3VzKCkpJiYhIShhLnR5cGV8fGEuaHJlZnx8fmEudGFiSW5kZXgpfSxl%0AbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITF9LGRpc2Fi%0AbGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6%0AZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVy%0AbiJpbnB1dCI9PT1iJiYhIWEuY2hlY2tlZHx8Im9wdGlvbiI9PT1iJiYhIWEuc2Vs%0AZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLnBhcmVudE5vZGUm%0AJmEucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LGEuc2VsZWN0ZWQ9PT0hMH0sZW1w%0AdHk6ZnVuY3Rpb24oYSl7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJs%0AaW5nKWlmKGEubm9kZVR5cGU8NilyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1%0AbmN0aW9uKGEpe3JldHVybiFkLnBzZXVkb3MuZW1wdHkoYSl9LGhlYWRlcjpmdW5j%0AdGlvbihhKXtyZXR1cm4gWi50ZXN0KGEubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlv%0AbihhKXtyZXR1cm4gWS50ZXN0KGEubm9kZU5hbWUpfSxidXR0b246ZnVuY3Rpb24o%0AYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9%0APT1iJiYiYnV0dG9uIj09PWEudHlwZXx8ImJ1dHRvbiI9PT1ifSx0ZXh0OmZ1bmN0%0AaW9uKGEpe3ZhciBiO3JldHVybiJpbnB1dCI9PT1hLm5vZGVOYW1lLnRvTG93ZXJD%0AYXNlKCkmJiJ0ZXh0Ij09PWEudHlwZSYmKG51bGw9PShiPWEuZ2V0QXR0cmlidXRl%0AKCJ0eXBlIikpfHwidGV4dCI9PT1iLnRvTG93ZXJDYXNlKCkpfSxmaXJzdDpuYihm%0AdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6bmIoZnVuY3Rpb24oYSxiKXtyZXR1%0Acm5bYi0xXX0pLGVxOm5iKGZ1bmN0aW9uKGEsYixjKXtyZXR1cm5bMD5jP2MrYjpj%0AXX0pLGV2ZW46bmIoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtiPmM7Yys9Milh%0ALnB1c2goYyk7cmV0dXJuIGF9KSxvZGQ6bmIoZnVuY3Rpb24oYSxiKXtmb3IodmFy%0AIGM9MTtiPmM7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxsdDpuYihmdW5jdGlv%0AbihhLGIsYyl7Zm9yKHZhciBkPTA+Yz9jK2I6YzstLWQ+PTA7KWEucHVzaChkKTty%0AZXR1cm4gYX0pLGd0Om5iKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MD5jP2Mr%0AYjpjOysrZDxiOylhLnB1c2goZCk7cmV0dXJuIGF9KX19LGQucHNldWRvcy5udGg9%0AZC5wc2V1ZG9zLmVxO2ZvcihiIGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6%0AITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KWQucHNldWRvc1tiXT1sYihiKTtmb3Io%0AYiBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KWQucHNldWRvc1tiXT1tYihiKTtmdW5j%0AdGlvbiBwYigpe31wYi5wcm90b3R5cGU9ZC5maWx0ZXJzPWQucHNldWRvcyxkLnNl%0AdEZpbHRlcnM9bmV3IHBiLGc9ZmIudG9rZW5pemU9ZnVuY3Rpb24oYSxiKXt2YXIg%0AYyxlLGYsZyxoLGksaixrPXpbYSsiICJdO2lmKGspcmV0dXJuIGI/MDprLnNsaWNl%0AKDApO2g9YSxpPVtdLGo9ZC5wcmVGaWx0ZXI7d2hpbGUoaCl7KCFjfHwoZT1TLmV4%0AZWMoaCkpKSYmKGUmJihoPWguc2xpY2UoZVswXS5sZW5ndGgpfHxoKSxpLnB1c2go%0AZj1bXSkpLGM9ITEsKGU9VC5leGVjKGgpKSYmKGM9ZS5zaGlmdCgpLGYucHVzaCh7%0AdmFsdWU6Yyx0eXBlOmVbMF0ucmVwbGFjZShSLCIgIil9KSxoPWguc2xpY2UoYy5s%0AZW5ndGgpKTtmb3IoZyBpbiBkLmZpbHRlcikhKGU9WFtnXS5leGVjKGgpKXx8altn%0AXSYmIShlPWpbZ10oZSkpfHwoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5%0AcGU6ZyxtYXRjaGVzOmV9KSxoPWguc2xpY2UoYy5sZW5ndGgpKTtpZighYylicmVh%0Aa31yZXR1cm4gYj9oLmxlbmd0aDpoP2ZiLmVycm9yKGEpOnooYSxpKS5zbGljZSgw%0AKX07ZnVuY3Rpb24gcWIoYSl7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aCxkPSIiO2M+%0AYjtiKyspZCs9YVtiXS52YWx1ZTtyZXR1cm4gZH1mdW5jdGlvbiByYihhLGIsYyl7%0AdmFyIGQ9Yi5kaXIsZT1jJiYicGFyZW50Tm9kZSI9PT1kLGY9eCsrO3JldHVybiBi%0ALmZpcnN0P2Z1bmN0aW9uKGIsYyxmKXt3aGlsZShiPWJbZF0paWYoMT09PWIubm9k%0AZVR5cGV8fGUpcmV0dXJuIGEoYixjLGYpfTpmdW5jdGlvbihiLGMsZyl7dmFyIGgs%0AaSxqPVt3LGZdO2lmKGcpe3doaWxlKGI9YltkXSlpZigoMT09PWIubm9kZVR5cGV8%0AfGUpJiZhKGIsYyxnKSlyZXR1cm4hMH1lbHNlIHdoaWxlKGI9YltkXSlpZigxPT09%0AYi5ub2RlVHlwZXx8ZSl7aWYoaT1iW3VdfHwoYlt1XT17fSksKGg9aVtkXSkmJmhb%0AMF09PT13JiZoWzFdPT09ZilyZXR1cm4galsyXT1oWzJdO2lmKGlbZF09aixqWzJd%0APWEoYixjLGcpKXJldHVybiEwfX19ZnVuY3Rpb24gc2IoYSl7cmV0dXJuIGEubGVu%0AZ3RoPjE/ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWEubGVuZ3RoO3doaWxlKGUtLSlp%0AZighYVtlXShiLGMsZCkpcmV0dXJuITE7cmV0dXJuITB9OmFbMF19ZnVuY3Rpb24g%0AdGIoYSxiLGMpe2Zvcih2YXIgZD0wLGU9Yi5sZW5ndGg7ZT5kO2QrKylmYihhLGJb%0AZF0sYyk7cmV0dXJuIGN9ZnVuY3Rpb24gdWIoYSxiLGMsZCxlKXtmb3IodmFyIGYs%0AZz1bXSxoPTAsaT1hLmxlbmd0aCxqPW51bGwhPWI7aT5oO2grKykoZj1hW2hdKSYm%0AKCFjfHxjKGYsZCxlKSkmJihnLnB1c2goZiksaiYmYi5wdXNoKGgpKTtyZXR1cm4g%0AZ31mdW5jdGlvbiB2YihhLGIsYyxkLGUsZil7cmV0dXJuIGQmJiFkW3VdJiYoZD12%0AYihkKSksZSYmIWVbdV0mJihlPXZiKGUsZikpLGhiKGZ1bmN0aW9uKGYsZyxoLGkp%0Ae3ZhciBqLGssbCxtPVtdLG49W10sbz1nLmxlbmd0aCxwPWZ8fHRiKGJ8fCIqIixo%0ALm5vZGVUeXBlP1toXTpoLFtdKSxxPSFhfHwhZiYmYj9wOnViKHAsbSxhLGgsaSks%0Acj1jP2V8fChmP2E6b3x8ZCk/W106ZzpxO2lmKGMmJmMocSxyLGgsaSksZCl7aj11%0AYihyLG4pLGQoaixbXSxoLGkpLGs9ai5sZW5ndGg7d2hpbGUoay0tKShsPWpba10p%0AJiYocltuW2tdXT0hKHFbbltrXV09bCkpfWlmKGYpe2lmKGV8fGEpe2lmKGUpe2o9%0AW10saz1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkmJmoucHVzaChxW2tdPWwp%0AO2UobnVsbCxyPVtdLGosaSl9az1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkm%0AJihqPWU/Sy5jYWxsKGYsbCk6bVtrXSk+LTEmJihmW2pdPSEoZ1tqXT1sKSl9fWVs%0Ac2Ugcj11YihyPT09Zz9yLnNwbGljZShvLHIubGVuZ3RoKTpyKSxlP2UobnVsbCxn%0ALHIsaSk6SS5hcHBseShnLHIpfSl9ZnVuY3Rpb24gd2IoYSl7Zm9yKHZhciBiLGMs%0AZSxmPWEubGVuZ3RoLGc9ZC5yZWxhdGl2ZVthWzBdLnR5cGVdLGg9Z3x8ZC5yZWxh%0AdGl2ZVsiICJdLGk9Zz8xOjAsaz1yYihmdW5jdGlvbihhKXtyZXR1cm4gYT09PWJ9%0ALGgsITApLGw9cmIoZnVuY3Rpb24oYSl7cmV0dXJuIEsuY2FsbChiLGEpPi0xfSxo%0ALCEwKSxtPVtmdW5jdGlvbihhLGMsZCl7cmV0dXJuIWcmJihkfHxjIT09ail8fCgo%0AYj1jKS5ub2RlVHlwZT9rKGEsYyxkKTpsKGEsYyxkKSl9XTtmPmk7aSsrKWlmKGM9%0AZC5yZWxhdGl2ZVthW2ldLnR5cGVdKW09W3JiKHNiKG0pLGMpXTtlbHNle2lmKGM9%0AZC5maWx0ZXJbYVtpXS50eXBlXS5hcHBseShudWxsLGFbaV0ubWF0Y2hlcyksY1t1%0AXSl7Zm9yKGU9KytpO2Y+ZTtlKyspaWYoZC5yZWxhdGl2ZVthW2VdLnR5cGVdKWJy%0AZWFrO3JldHVybiB2YihpPjEmJnNiKG0pLGk+MSYmcWIoYS5zbGljZSgwLGktMSku%0AY29uY2F0KHt2YWx1ZToiICI9PT1hW2ktMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFj%0AZShSLCIkMSIpLGMsZT5pJiZ3YihhLnNsaWNlKGksZSkpLGY+ZSYmd2IoYT1hLnNs%0AaWNlKGUpKSxmPmUmJnFiKGEpKX1tLnB1c2goYyl9cmV0dXJuIHNiKG0pfWZ1bmN0%0AaW9uIHhiKGEsYil7dmFyIGM9Yi5sZW5ndGg+MCxlPWEubGVuZ3RoPjAsZj1mdW5j%0AdGlvbihmLGcsaCxpLGspe3ZhciBsLG0sbyxwPTAscT0iMCIscj1mJiZbXSxzPVtd%0ALHQ9aix1PWZ8fGUmJmQuZmluZC5UQUcoIioiLGspLHY9dys9bnVsbD09dD8xOk1h%0AdGgucmFuZG9tKCl8fC4xLHg9dS5sZW5ndGg7Zm9yKGsmJihqPWchPT1uJiZnKTtx%0AIT09eCYmbnVsbCE9KGw9dVtxXSk7cSsrKXtpZihlJiZsKXttPTA7d2hpbGUobz1h%0AW20rK10paWYobyhsLGcsaCkpe2kucHVzaChsKTticmVha31rJiYodz12KX1jJiYo%0AKGw9IW8mJmwpJiZwLS0sZiYmci5wdXNoKGwpKX1pZihwKz1xLGMmJnEhPT1wKXtt%0APTA7d2hpbGUobz1iW20rK10pbyhyLHMsZyxoKTtpZihmKXtpZihwPjApd2hpbGUo%0AcS0tKXJbcV18fHNbcV18fChzW3FdPUcuY2FsbChpKSk7cz11YihzKX1JLmFwcGx5%0AKGkscyksayYmIWYmJnMubGVuZ3RoPjAmJnArYi5sZW5ndGg+MSYmZmIudW5pcXVl%0AU29ydChpKX1yZXR1cm4gayYmKHc9dixqPXQpLHJ9O3JldHVybiBjP2hiKGYpOmZ9%0AcmV0dXJuIGg9ZmIuY29tcGlsZT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1b%0AXSxmPUFbYSsiICJdO2lmKCFmKXtifHwoYj1nKGEpKSxjPWIubGVuZ3RoO3doaWxl%0AKGMtLSlmPXdiKGJbY10pLGZbdV0/ZC5wdXNoKGYpOmUucHVzaChmKTtmPUEoYSx4%0AYihlLGQpKSxmLnNlbGVjdG9yPWF9cmV0dXJuIGZ9LGk9ZmIuc2VsZWN0PWZ1bmN0%0AaW9uKGEsYixlLGYpe3ZhciBpLGosayxsLG0sbj0iZnVuY3Rpb24iPT10eXBlb2Yg%0AYSYmYSxvPSFmJiZnKGE9bi5zZWxlY3Rvcnx8YSk7aWYoZT1lfHxbXSwxPT09by5s%0AZW5ndGgpe2lmKGo9b1swXT1vWzBdLnNsaWNlKDApLGoubGVuZ3RoPjImJiJJRCI9%0APT0oaz1qWzBdKS50eXBlJiZjLmdldEJ5SWQmJjk9PT1iLm5vZGVUeXBlJiZwJiZk%0ALnJlbGF0aXZlW2pbMV0udHlwZV0pe2lmKGI9KGQuZmluZC5JRChrLm1hdGNoZXNb%0AMF0ucmVwbGFjZShjYixkYiksYil8fFtdKVswXSwhYilyZXR1cm4gZTtuJiYoYj1i%0ALnBhcmVudE5vZGUpLGE9YS5zbGljZShqLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1p%0APVgubmVlZHNDb250ZXh0LnRlc3QoYSk/MDpqLmxlbmd0aDt3aGlsZShpLS0pe2lm%0AKGs9altpXSxkLnJlbGF0aXZlW2w9ay50eXBlXSlicmVhaztpZigobT1kLmZpbmRb%0AbF0pJiYoZj1tKGsubWF0Y2hlc1swXS5yZXBsYWNlKGNiLGRiKSxhYi50ZXN0KGpb%0AMF0udHlwZSkmJm9iKGIucGFyZW50Tm9kZSl8fGIpKSl7aWYoai5zcGxpY2UoaSwx%0AKSxhPWYubGVuZ3RoJiZxYihqKSwhYSlyZXR1cm4gSS5hcHBseShlLGYpLGU7YnJl%0AYWt9fX1yZXR1cm4obnx8aChhLG8pKShmLGIsIXAsZSxhYi50ZXN0KGEpJiZvYihi%0ALnBhcmVudE5vZGUpfHxiKSxlfSxjLnNvcnRTdGFibGU9dS5zcGxpdCgiIikuc29y%0AdChCKS5qb2luKCIiKT09PXUsYy5kZXRlY3REdXBsaWNhdGVzPSEhbCxtKCksYy5z%0Ab3J0RGV0YWNoZWQ9aWIoZnVuY3Rpb24oYSl7cmV0dXJuIDEmYS5jb21wYXJlRG9j%0AdW1lbnRQb3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLGliKGZ1bmN0%0AaW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMi%0APT09YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGpiKCJ0eXBl%0AfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9p%0AZCAwOmEuZ2V0QXR0cmlidXRlKGIsInR5cGUiPT09Yi50b0xvd2VyQ2FzZSgpPzE6%0AMil9KSxjLmF0dHJpYnV0ZXMmJmliKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVy%0ASFRNTD0iPGlucHV0Lz4iLGEuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVl%0AIiwiIiksIiI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8%0AfGpiKCJ2YWx1ZSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjfHwiaW5wdXQiIT09%0AYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP3ZvaWQgMDphLmRlZmF1bHRWYWx1ZX0p%0ALGliKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hLmdldEF0dHJpYnV0ZSgiZGlz%0AYWJsZWQiKX0pfHxqYihMLGZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gYz92%0Ab2lkIDA6YVtiXT09PSEwP2IudG9Mb3dlckNhc2UoKTooZD1hLmdldEF0dHJpYnV0%0AZU5vZGUoYikpJiZkLnNwZWNpZmllZD9kLnZhbHVlOm51bGx9KSxmYn0oYSk7bi5m%0AaW5kPXQsbi5leHByPXQuc2VsZWN0b3JzLG4uZXhwclsiOiJdPW4uZXhwci5wc2V1%0AZG9zLG4udW5pcXVlPXQudW5pcXVlU29ydCxuLnRleHQ9dC5nZXRUZXh0LG4uaXNY%0ATUxEb2M9dC5pc1hNTCxuLmNvbnRhaW5zPXQuY29udGFpbnM7dmFyIHU9bi5leHBy%0ALm1hdGNoLm5lZWRzQ29udGV4dCx2PS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwp%0AJC8sdz0vXi5bXjojXFtcLixdKiQvO2Z1bmN0aW9uIHgoYSxiLGMpe2lmKG4uaXNG%0AdW5jdGlvbihiKSlyZXR1cm4gbi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4h%0AIWIuY2FsbChhLGQsYSkhPT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gbi5ncmVw%0AKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1iIT09Y30pO2lmKCJzdHJpbmciPT10%0AeXBlb2YgYil7aWYody50ZXN0KGIpKXJldHVybiBuLmZpbHRlcihiLGEsYyk7Yj1u%0ALmZpbHRlcihiLGEpfXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4g%0AZy5jYWxsKGIsYSk+PTAhPT1jfSl9bi5maWx0ZXI9ZnVuY3Rpb24oYSxiLGMpe3Zh%0AciBkPWJbMF07cmV0dXJuIGMmJihhPSI6bm90KCIrYSsiKSIpLDE9PT1iLmxlbmd0%0AaCYmMT09PWQubm9kZVR5cGU/bi5maW5kLm1hdGNoZXNTZWxlY3RvcihkLGEpP1tk%0AXTpbXTpuLmZpbmQubWF0Y2hlcyhhLG4uZ3JlcChiLGZ1bmN0aW9uKGEpe3JldHVy%0AbiAxPT09YS5ub2RlVHlwZX0pKX0sbi5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24o%0AYSl7dmFyIGIsYz10aGlzLmxlbmd0aCxkPVtdLGU9dGhpcztpZigic3RyaW5nIiE9%0AdHlwZW9mIGEpcmV0dXJuIHRoaXMucHVzaFN0YWNrKG4oYSkuZmlsdGVyKGZ1bmN0%0AaW9uKCl7Zm9yKGI9MDtjPmI7YisrKWlmKG4uY29udGFpbnMoZVtiXSx0aGlzKSly%0AZXR1cm4hMH0pKTtmb3IoYj0wO2M+YjtiKyspbi5maW5kKGEsZVtiXSxkKTtyZXR1%0Acm4gZD10aGlzLnB1c2hTdGFjayhjPjE/bi51bmlxdWUoZCk6ZCksZC5zZWxlY3Rv%0Acj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2E6YSxkfSxmaWx0ZXI6%0AZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgodGhpcyxhfHxbXSwh%0AMSkpfSxub3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgodGhp%0AcyxhfHxbXSwhMCkpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIXgodGhpcywic3Ry%0AaW5nIj09dHlwZW9mIGEmJnUudGVzdChhKT9uKGEpOmF8fFtdLCExKS5sZW5ndGh9%0AfSk7dmFyIHksej0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQv%0ALEE9bi5mbi5pbml0PWZ1bmN0aW9uKGEsYil7dmFyIGMsZDtpZighYSlyZXR1cm4g%0AdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGEpe2lmKGM9IjwiPT09YVswXSYmIj4i%0APT09YVthLmxlbmd0aC0xXSYmYS5sZW5ndGg+PTM/W251bGwsYSxudWxsXTp6LmV4%0AZWMoYSksIWN8fCFjWzFdJiZiKXJldHVybiFifHxiLmpxdWVyeT8oYnx8eSkuZmlu%0AZChhKTp0aGlzLmNvbnN0cnVjdG9yKGIpLmZpbmQoYSk7aWYoY1sxXSl7aWYoYj1i%0AIGluc3RhbmNlb2Ygbj9iWzBdOmIsbi5tZXJnZSh0aGlzLG4ucGFyc2VIVE1MKGNb%0AMV0sYiYmYi5ub2RlVHlwZT9iLm93bmVyRG9jdW1lbnR8fGI6bCwhMCkpLHYudGVz%0AdChjWzFdKSYmbi5pc1BsYWluT2JqZWN0KGIpKWZvcihjIGluIGIpbi5pc0Z1bmN0%0AaW9uKHRoaXNbY10pP3RoaXNbY10oYltjXSk6dGhpcy5hdHRyKGMsYltjXSk7cmV0%0AdXJuIHRoaXN9cmV0dXJuIGQ9bC5nZXRFbGVtZW50QnlJZChjWzJdKSxkJiZkLnBh%0AcmVudE5vZGUmJih0aGlzLmxlbmd0aD0xLHRoaXNbMF09ZCksdGhpcy5jb250ZXh0%0APWwsdGhpcy5zZWxlY3Rvcj1hLHRoaXN9cmV0dXJuIGEubm9kZVR5cGU/KHRoaXMu%0AY29udGV4dD10aGlzWzBdPWEsdGhpcy5sZW5ndGg9MSx0aGlzKTpuLmlzRnVuY3Rp%0Ab24oYSk/InVuZGVmaW5lZCIhPXR5cGVvZiB5LnJlYWR5P3kucmVhZHkoYSk6YShu%0AKToodm9pZCAwIT09YS5zZWxlY3RvciYmKHRoaXMuc2VsZWN0b3I9YS5zZWxlY3Rv%0Acix0aGlzLmNvbnRleHQ9YS5jb250ZXh0KSxuLm1ha2VBcnJheShhLHRoaXMpKX07%0AQS5wcm90b3R5cGU9bi5mbix5PW4obCk7dmFyIEI9L14oPzpwYXJlbnRzfHByZXYo%0APzpVbnRpbHxBbGwpKS8sQz17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDoh%0AMCxwcmV2OiEwfTtuLmV4dGVuZCh7ZGlyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1b%0AXSxlPXZvaWQgMCE9PWM7d2hpbGUoKGE9YVtiXSkmJjkhPT1hLm5vZGVUeXBlKWlm%0AKDE9PT1hLm5vZGVUeXBlKXtpZihlJiZuKGEpLmlzKGMpKWJyZWFrO2QucHVzaChh%0AKX1yZXR1cm4gZH0sc2libGluZzpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXTth%0AO2E9YS5uZXh0U2libGluZykxPT09YS5ub2RlVHlwZSYmYSE9PWImJmMucHVzaChh%0AKTtyZXR1cm4gY319KSxuLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGEpe3ZhciBi%0APW4oYSx0aGlzKSxjPWIubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlv%0Abigpe2Zvcih2YXIgYT0wO2M+YTthKyspaWYobi5jb250YWlucyh0aGlzLGJbYV0p%0AKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD0w%0ALGU9dGhpcy5sZW5ndGgsZj1bXSxnPXUudGVzdChhKXx8InN0cmluZyIhPXR5cGVv%0AZiBhP24oYSxifHx0aGlzLmNvbnRleHQpOjA7ZT5kO2QrKylmb3IoYz10aGlzW2Rd%0AO2MmJmMhPT1iO2M9Yy5wYXJlbnROb2RlKWlmKGMubm9kZVR5cGU8MTEmJihnP2cu%0AaW5kZXgoYyk+LTE6MT09PWMubm9kZVR5cGUmJm4uZmluZC5tYXRjaGVzU2VsZWN0%0Ab3IoYyxhKSkpe2YucHVzaChjKTticmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2so%0AZi5sZW5ndGg+MT9uLnVuaXF1ZShmKTpmKX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0%0AdXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP2cuY2FsbChuKGEpLHRoaXNbMF0pOmcu%0AY2FsbCh0aGlzLGEuanF1ZXJ5P2FbMF06YSk6dGhpc1swXSYmdGhpc1swXS5wYXJl%0AbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVu%0AY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobi51bmlxdWUobi5tZXJn%0AZSh0aGlzLmdldCgpLG4oYSxiKSkpKX0sYWRkQmFjazpmdW5jdGlvbihhKXtyZXR1%0Acm4gdGhpcy5hZGQobnVsbD09YT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2Jq%0AZWN0LmZpbHRlcihhKSl9fSk7ZnVuY3Rpb24gRChhLGIpe3doaWxlKChhPWFbYl0p%0AJiYxIT09YS5ub2RlVHlwZSk7cmV0dXJuIGF9bi5lYWNoKHtwYXJlbnQ6ZnVuY3Rp%0Ab24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiYxMSE9PWIubm9kZVR5%0AcGU/YjpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBuLmRpcihhLCJw%0AYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJu%0AIG4uZGlyKGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVy%0AbiBEKGEsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIEQo%0AYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJu%0AIG4uZGlyKGEsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oYSl7cmV0%0AdXJuIG4uZGlyKGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rp%0Ab24oYSxiLGMpe3JldHVybiBuLmRpcihhLCJuZXh0U2libGluZyIsYyl9LHByZXZV%0AbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG4uZGlyKGEsInByZXZpb3VzU2li%0AbGluZyIsYyl9LHNpYmxpbmdzOmZ1bmN0aW9uKGEpe3JldHVybiBuLnNpYmxpbmco%0AKGEucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1bmN0%0AaW9uKGEpe3JldHVybiBuLnNpYmxpbmcoYS5maXJzdENoaWxkKX0sY29udGVudHM6%0AZnVuY3Rpb24oYSl7cmV0dXJuIGEuY29udGVudERvY3VtZW50fHxuLm1lcmdlKFtd%0ALGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe24uZm5bYV09ZnVuY3Rpb24o%0AYyxkKXt2YXIgZT1uLm1hcCh0aGlzLGIsYyk7cmV0dXJuIlVudGlsIiE9PWEuc2xp%0AY2UoLTUpJiYoZD1jKSxkJiYic3RyaW5nIj09dHlwZW9mIGQmJihlPW4uZmlsdGVy%0AKGQsZSkpLHRoaXMubGVuZ3RoPjEmJihDW2FdfHxuLnVuaXF1ZShlKSxCLnRlc3Qo%0AYSkmJmUucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhlKX19KTt2YXIgRT0vXFMr%0AL2csRj17fTtmdW5jdGlvbiBHKGEpe3ZhciBiPUZbYV09e307cmV0dXJuIG4uZWFj%0AaChhLm1hdGNoKEUpfHxbXSxmdW5jdGlvbihhLGMpe2JbY109ITB9KSxifW4uQ2Fs%0AbGJhY2tzPWZ1bmN0aW9uKGEpe2E9InN0cmluZyI9PXR5cGVvZiBhP0ZbYV18fEco%0AYSk6bi5leHRlbmQoe30sYSk7dmFyIGIsYyxkLGUsZixnLGg9W10saT0hYS5vbmNl%0AJiZbXSxqPWZ1bmN0aW9uKGwpe2ZvcihiPWEubWVtb3J5JiZsLGM9ITAsZz1lfHww%0ALGU9MCxmPWgubGVuZ3RoLGQ9ITA7aCYmZj5nO2crKylpZihoW2ddLmFwcGx5KGxb%0AMF0sbFsxXSk9PT0hMSYmYS5zdG9wT25GYWxzZSl7Yj0hMTticmVha31kPSExLGgm%0AJihpP2kubGVuZ3RoJiZqKGkuc2hpZnQoKSk6Yj9oPVtdOmsuZGlzYWJsZSgpKX0s%0Aaz17YWRkOmZ1bmN0aW9uKCl7aWYoaCl7dmFyIGM9aC5sZW5ndGg7IWZ1bmN0aW9u%0AIGcoYil7bi5lYWNoKGIsZnVuY3Rpb24oYixjKXt2YXIgZD1uLnR5cGUoYyk7ImZ1%0AbmN0aW9uIj09PWQ/YS51bmlxdWUmJmsuaGFzKGMpfHxoLnB1c2goYyk6YyYmYy5s%0AZW5ndGgmJiJzdHJpbmciIT09ZCYmZyhjKX0pfShhcmd1bWVudHMpLGQ/Zj1oLmxl%0Abmd0aDpiJiYoZT1jLGooYikpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24o%0AKXtyZXR1cm4gaCYmbi5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihhLGIpe3ZhciBj%0AO3doaWxlKChjPW4uaW5BcnJheShiLGgsYykpPi0xKWguc3BsaWNlKGMsMSksZCYm%0AKGY+PWMmJmYtLSxnPj1jJiZnLS0pfSksdGhpc30saGFzOmZ1bmN0aW9uKGEpe3Jl%0AdHVybiBhP24uaW5BcnJheShhLGgpPi0xOiEoIWh8fCFoLmxlbmd0aCl9LGVtcHR5%0AOmZ1bmN0aW9uKCl7cmV0dXJuIGg9W10sZj0wLHRoaXN9LGRpc2FibGU6ZnVuY3Rp%0Ab24oKXtyZXR1cm4gaD1pPWI9dm9pZCAwLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9u%0AKCl7cmV0dXJuIWh9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gaT12b2lkIDAsYnx8%0Aay5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWl9LGZp%0AcmVXaXRoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIWh8fGMmJiFpfHwoYj1ifHxbXSxi%0APVthLGIuc2xpY2U/Yi5zbGljZSgpOmJdLGQ/aS5wdXNoKGIpOmooYikpLHRoaXN9%0ALGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gay5maXJlV2l0aCh0aGlzLGFyZ3VtZW50%0AcyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWN9fTtyZXR1cm4ga30s%0Abi5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGEpe3ZhciBiPVtbInJlc29sdmUi%0ALCJkb25lIixuLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVzb2x2ZWQiXSxb%0AInJlamVjdCIsImZhaWwiLG4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWpl%0AY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLG4uQ2FsbGJhY2tzKCJtZW1vcnki%0AKV1dLGM9InBlbmRpbmciLGQ9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGFs%0Ad2F5czpmdW5jdGlvbigpe3JldHVybiBlLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFy%0AZ3VtZW50cyksdGhpc30sdGhlbjpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50czty%0AZXR1cm4gbi5EZWZlcnJlZChmdW5jdGlvbihjKXtuLmVhY2goYixmdW5jdGlvbihi%0ALGYpe3ZhciBnPW4uaXNGdW5jdGlvbihhW2JdKSYmYVtiXTtlW2ZbMV1dKGZ1bmN0%0AaW9uKCl7dmFyIGE9ZyYmZy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7YSYmbi5pc0Z1%0AbmN0aW9uKGEucHJvbWlzZSk/YS5wcm9taXNlKCkuZG9uZShjLnJlc29sdmUpLmZh%0AaWwoYy5yZWplY3QpLnByb2dyZXNzKGMubm90aWZ5KTpjW2ZbMF0rIldpdGgiXSh0%0AaGlzPT09ZD9jLnByb21pc2UoKTp0aGlzLGc/W2FdOmFyZ3VtZW50cyl9KX0pLGE9%0AbnVsbH0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVs%0AbCE9YT9uLmV4dGVuZChhLGQpOmR9fSxlPXt9O3JldHVybiBkLnBpcGU9ZC50aGVu%0ALG4uZWFjaChiLGZ1bmN0aW9uKGEsZil7dmFyIGc9ZlsyXSxoPWZbM107ZFtmWzFd%0AXT1nLmFkZCxoJiZnLmFkZChmdW5jdGlvbigpe2M9aH0sYlsxXmFdWzJdLmRpc2Fi%0AbGUsYlsyXVsyXS5sb2NrKSxlW2ZbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIGVbZlsw%0AXSsiV2l0aCJdKHRoaXM9PT1lP2Q6dGhpcyxhcmd1bWVudHMpLHRoaXN9LGVbZlsw%0AXSsiV2l0aCJdPWcuZmlyZVdpdGh9KSxkLnByb21pc2UoZSksYSYmYS5jYWxsKGUs%0AZSksZX0sd2hlbjpmdW5jdGlvbihhKXt2YXIgYj0wLGM9ZC5jYWxsKGFyZ3VtZW50%0AcyksZT1jLmxlbmd0aCxmPTEhPT1lfHxhJiZuLmlzRnVuY3Rpb24oYS5wcm9taXNl%0AKT9lOjAsZz0xPT09Zj9hOm4uRGVmZXJyZWQoKSxoPWZ1bmN0aW9uKGEsYixjKXty%0AZXR1cm4gZnVuY3Rpb24oZSl7YlthXT10aGlzLGNbYV09YXJndW1lbnRzLmxlbmd0%0AaD4xP2QuY2FsbChhcmd1bWVudHMpOmUsYz09PWk/Zy5ub3RpZnlXaXRoKGIsYyk6%0ALS1mfHxnLnJlc29sdmVXaXRoKGIsYyl9fSxpLGosaztpZihlPjEpZm9yKGk9bmV3%0AIEFycmF5KGUpLGo9bmV3IEFycmF5KGUpLGs9bmV3IEFycmF5KGUpO2U+YjtiKysp%0AY1tiXSYmbi5pc0Z1bmN0aW9uKGNbYl0ucHJvbWlzZSk/Y1tiXS5wcm9taXNlKCku%0AZG9uZShoKGIsayxjKSkuZmFpbChnLnJlamVjdCkucHJvZ3Jlc3MoaChiLGosaSkp%0AOi0tZjtyZXR1cm4gZnx8Zy5yZXNvbHZlV2l0aChrLGMpLGcucHJvbWlzZSgpfX0p%0AO3ZhciBIO24uZm4ucmVhZHk9ZnVuY3Rpb24oYSl7cmV0dXJuIG4ucmVhZHkucHJv%0AbWlzZSgpLmRvbmUoYSksdGhpc30sbi5leHRlbmQoe2lzUmVhZHk6ITEscmVhZHlX%0AYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGEpe2E/bi5yZWFkeVdhaXQrKzpuLnJl%0AYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oYSl7KGE9PT0hMD8tLW4ucmVhZHlXYWl0%0AOm4uaXNSZWFkeSl8fChuLmlzUmVhZHk9ITAsYSE9PSEwJiYtLW4ucmVhZHlXYWl0%0APjB8fChILnJlc29sdmVXaXRoKGwsW25dKSxuLmZuLnRyaWdnZXJIYW5kbGVyJiYo%0AbihsKS50cmlnZ2VySGFuZGxlcigicmVhZHkiKSxuKGwpLm9mZigicmVhZHkiKSkp%0AKX19KTtmdW5jdGlvbiBJKCl7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250%0AZW50TG9hZGVkIixJLCExKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLEks%0AITEpLG4ucmVhZHkoKX1uLnJlYWR5LnByb21pc2U9ZnVuY3Rpb24oYil7cmV0dXJu%0AIEh8fChIPW4uRGVmZXJyZWQoKSwiY29tcGxldGUiPT09bC5yZWFkeVN0YXRlP3Nl%0AdFRpbWVvdXQobi5yZWFkeSk6KGwuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVu%0AdExvYWRlZCIsSSwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixJLCExKSkp%0ALEgucHJvbWlzZShiKX0sbi5yZWFkeS5wcm9taXNlKCk7dmFyIEo9bi5hY2Nlc3M9%0AZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9MCxpPWEubGVuZ3RoLGo9bnVs%0AbD09YztpZigib2JqZWN0Ij09PW4udHlwZShjKSl7ZT0hMDtmb3IoaCBpbiBjKW4u%0AYWNjZXNzKGEsYixoLGNbaF0sITAsZixnKX1lbHNlIGlmKHZvaWQgMCE9PWQmJihl%0APSEwLG4uaXNGdW5jdGlvbihkKXx8KGc9ITApLGomJihnPyhiLmNhbGwoYSxkKSxi%0APW51bGwpOihqPWIsYj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGouY2FsbChuKGEp%0ALGMpfSkpLGIpKWZvcig7aT5oO2grKyliKGFbaF0sYyxnP2Q6ZC5jYWxsKGFbaF0s%0AaCxiKGFbaF0sYykpKTtyZXR1cm4gZT9hOmo/Yi5jYWxsKGEpOmk/YihhWzBdLGMp%0AOmZ9O24uYWNjZXB0RGF0YT1mdW5jdGlvbihhKXtyZXR1cm4gMT09PWEubm9kZVR5%0AcGV8fDk9PT1hLm5vZGVUeXBlfHwhK2Eubm9kZVR5cGV9O2Z1bmN0aW9uIEsoKXtP%0AYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5jYWNoZT17fSwwLHtnZXQ6ZnVuY3Rp%0Ab24oKXtyZXR1cm57fX19KSx0aGlzLmV4cGFuZG89bi5leHBhbmRvK01hdGgucmFu%0AZG9tKCl9Sy51aWQ9MSxLLmFjY2VwdHM9bi5hY2NlcHREYXRhLEsucHJvdG90eXBl%0APXtrZXk6ZnVuY3Rpb24oYSl7aWYoIUsuYWNjZXB0cyhhKSlyZXR1cm4gMDt2YXIg%0AYj17fSxjPWFbdGhpcy5leHBhbmRvXTtpZighYyl7Yz1LLnVpZCsrO3RyeXtiW3Ro%0AaXMuZXhwYW5kb109e3ZhbHVlOmN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGEs%0AYil9Y2F0Y2goZCl7Ylt0aGlzLmV4cGFuZG9dPWMsbi5leHRlbmQoYSxiKX19cmV0%0AdXJuIHRoaXMuY2FjaGVbY118fCh0aGlzLmNhY2hlW2NdPXt9KSxjfSxzZXQ6ZnVu%0AY3Rpb24oYSxiLGMpe3ZhciBkLGU9dGhpcy5rZXkoYSksZj10aGlzLmNhY2hlW2Vd%0AO2lmKCJzdHJpbmciPT10eXBlb2YgYilmW2JdPWM7ZWxzZSBpZihuLmlzRW1wdHlP%0AYmplY3QoZikpbi5leHRlbmQodGhpcy5jYWNoZVtlXSxiKTtlbHNlIGZvcihkIGlu%0AIGIpZltkXT1iW2RdO3JldHVybiBmfSxnZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz10%0AaGlzLmNhY2hlW3RoaXMua2V5KGEpXTtyZXR1cm4gdm9pZCAwPT09Yj9jOmNbYl19%0ALGFjY2VzczpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIHZvaWQgMD09PWJ8%0AfGImJiJzdHJpbmciPT10eXBlb2YgYiYmdm9pZCAwPT09Yz8oZD10aGlzLmdldChh%0ALGIpLHZvaWQgMCE9PWQ/ZDp0aGlzLmdldChhLG4uY2FtZWxDYXNlKGIpKSk6KHRo%0AaXMuc2V0KGEsYixjKSx2b2lkIDAhPT1jP2M6Yil9LHJlbW92ZTpmdW5jdGlvbihh%0ALGIpe3ZhciBjLGQsZSxmPXRoaXMua2V5KGEpLGc9dGhpcy5jYWNoZVtmXTtpZih2%0Ab2lkIDA9PT1iKXRoaXMuY2FjaGVbZl09e307ZWxzZXtuLmlzQXJyYXkoYik/ZD1i%0ALmNvbmNhdChiLm1hcChuLmNhbWVsQ2FzZSkpOihlPW4uY2FtZWxDYXNlKGIpLGIg%0AaW4gZz9kPVtiLGVdOihkPWUsZD1kIGluIGc/W2RdOmQubWF0Y2goRSl8fFtdKSks%0AYz1kLmxlbmd0aDt3aGlsZShjLS0pZGVsZXRlIGdbZFtjXV19fSxoYXNEYXRhOmZ1%0AbmN0aW9uKGEpe3JldHVybiFuLmlzRW1wdHlPYmplY3QodGhpcy5jYWNoZVthW3Ro%0AaXMuZXhwYW5kb11dfHx7fSl9LGRpc2NhcmQ6ZnVuY3Rpb24oYSl7YVt0aGlzLmV4%0AcGFuZG9dJiZkZWxldGUgdGhpcy5jYWNoZVthW3RoaXMuZXhwYW5kb11dfX07dmFy%0AIEw9bmV3IEssTT1uZXcgSyxOPS9eKD86XHtbXHdcV10qXH18XFtbXHdcV10qXF0p%0AJC8sTz0vKFtBLVpdKS9nO2Z1bmN0aW9uIFAoYSxiLGMpe3ZhciBkO2lmKHZvaWQg%0AMD09PWMmJjE9PT1hLm5vZGVUeXBlKWlmKGQ9ImRhdGEtIitiLnJlcGxhY2UoTywi%0ALSQxIikudG9Mb3dlckNhc2UoKSxjPWEuZ2V0QXR0cmlidXRlKGQpLCJzdHJpbmci%0APT10eXBlb2YgYyl7dHJ5e2M9InRydWUiPT09Yz8hMDoiZmFsc2UiPT09Yz8hMToi%0AbnVsbCI9PT1jP251bGw6K2MrIiI9PT1jPytjOk4udGVzdChjKT9uLnBhcnNlSlNP%0ATihjKTpjfWNhdGNoKGUpe31NLnNldChhLGIsYyl9ZWxzZSBjPXZvaWQgMDtyZXR1%0Acm4gY31uLmV4dGVuZCh7aGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gTS5oYXNE%0AYXRhKGEpfHxMLmhhc0RhdGEoYSl9LGRhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVy%0AbiBNLmFjY2VzcyhhLGIsYyl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtNLnJl%0AbW92ZShhLGIpCn0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBMLmFjY2Vz%0AcyhhLGIsYyl9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7TC5yZW1vdmUoYSxi%0AKX19KSxuLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxm%0APXRoaXNbMF0sZz1mJiZmLmF0dHJpYnV0ZXM7aWYodm9pZCAwPT09YSl7aWYodGhp%0Acy5sZW5ndGgmJihlPU0uZ2V0KGYpLDE9PT1mLm5vZGVUeXBlJiYhTC5nZXQoZiwi%0AaGFzRGF0YUF0dHJzIikpKXtjPWcubGVuZ3RoO3doaWxlKGMtLSlnW2NdJiYoZD1n%0AW2NdLm5hbWUsMD09PWQuaW5kZXhPZigiZGF0YS0iKSYmKGQ9bi5jYW1lbENhc2Uo%0AZC5zbGljZSg1KSksUChmLGQsZVtkXSkpKTtMLnNldChmLCJoYXNEYXRhQXR0cnMi%0ALCEwKX1yZXR1cm4gZX1yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGE/dGhpcy5lYWNo%0AKGZ1bmN0aW9uKCl7TS5zZXQodGhpcyxhKX0pOkoodGhpcyxmdW5jdGlvbihiKXt2%0AYXIgYyxkPW4uY2FtZWxDYXNlKGEpO2lmKGYmJnZvaWQgMD09PWIpe2lmKGM9TS5n%0AZXQoZixhKSx2b2lkIDAhPT1jKXJldHVybiBjO2lmKGM9TS5nZXQoZixkKSx2b2lk%0AIDAhPT1jKXJldHVybiBjO2lmKGM9UChmLGQsdm9pZCAwKSx2b2lkIDAhPT1jKXJl%0AdHVybiBjfWVsc2UgdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9TS5nZXQodGhp%0AcyxkKTtNLnNldCh0aGlzLGQsYiksLTEhPT1hLmluZGV4T2YoIi0iKSYmdm9pZCAw%0AIT09YyYmTS5zZXQodGhpcyxhLGIpfSl9LG51bGwsYixhcmd1bWVudHMubGVuZ3Ro%0APjEsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMu%0AZWFjaChmdW5jdGlvbigpe00ucmVtb3ZlKHRoaXMsYSl9KX19KSxuLmV4dGVuZCh7%0AcXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBhPyhiPShifHwiZngi%0AKSsicXVldWUiLGQ9TC5nZXQoYSxiKSxjJiYoIWR8fG4uaXNBcnJheShjKT9kPUwu%0AYWNjZXNzKGEsYixuLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKSxkfHxbXSk6dm9p%0AZCAwfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPW4ucXVl%0AdWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9bi5fcXVldWVIb29rcyhh%0ALGIpLGc9ZnVuY3Rpb24oKXtuLmRlcXVldWUoYSxiKX07ImlucHJvZ3Jlc3MiPT09%0AZSYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKCJmeCI9PT1iJiZjLnVuc2hpZnQoImlu%0AcHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZm%0ALmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1i%0AKyJxdWV1ZUhvb2tzIjtyZXR1cm4gTC5nZXQoYSxjKXx8TC5hY2Nlc3MoYSxjLHtl%0AbXB0eTpuLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtM%0ALnJlbW92ZShhLFtiKyJxdWV1ZSIsY10pfSl9KX19KSxuLmZuLmV4dGVuZCh7cXVl%0AdWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVybiJzdHJpbmciIT10eXBlb2Yg%0AYSYmKGI9YSxhPSJmeCIsYy0tKSxhcmd1bWVudHMubGVuZ3RoPGM/bi5xdWV1ZSh0%0AaGlzWzBdLGEpOnZvaWQgMD09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2%0AYXIgYz1uLnF1ZXVlKHRoaXMsYSxiKTtuLl9xdWV1ZUhvb2tzKHRoaXMsYSksImZ4%0AIj09PWEmJiJpbnByb2dyZXNzIiE9PWNbMF0mJm4uZGVxdWV1ZSh0aGlzLGEpfSl9%0ALGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp%0Ae24uZGVxdWV1ZSh0aGlzLGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0%0AdXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxi%0AKXt2YXIgYyxkPTEsZT1uLkRlZmVycmVkKCksZj10aGlzLGc9dGhpcy5sZW5ndGgs%0AaD1mdW5jdGlvbigpey0tZHx8ZS5yZXNvbHZlV2l0aChmLFtmXSl9OyJzdHJpbmci%0AIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHwiZngiO3doaWxlKGctLSlj%0APUwuZ2V0KGZbZ10sYSsicXVldWVIb29rcyIpLGMmJmMuZW1wdHkmJihkKyssYy5l%0AbXB0eS5hZGQoaCkpO3JldHVybiBoKCksZS5wcm9taXNlKGIpfX0pO3ZhciBRPS9b%0AKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLFI9WyJU%0Ab3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxTPWZ1bmN0aW9uKGEsYil7cmV0%0AdXJuIGE9Ynx8YSwibm9uZSI9PT1uLmNzcyhhLCJkaXNwbGF5Iil8fCFuLmNvbnRh%0AaW5zKGEub3duZXJEb2N1bWVudCxhKX0sVD0vXig/OmNoZWNrYm94fHJhZGlvKSQv%0AaTshZnVuY3Rpb24oKXt2YXIgYT1sLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxi%0APWEuYXBwZW5kQ2hpbGQobC5jcmVhdGVFbGVtZW50KCJkaXYiKSksYz1sLmNyZWF0%0AZUVsZW1lbnQoImlucHV0Iik7Yy5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIp%0ALGMuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLGMuc2V0QXR0cmli%0AdXRlKCJuYW1lIiwidCIpLGIuYXBwZW5kQ2hpbGQoYyksay5jaGVja0Nsb25lPWIu%0AY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGIu%0AaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixrLm5vQ2xvbmVDaGVj%0Aa2VkPSEhYi5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWV9KCk7%0AdmFyIFU9InVuZGVmaW5lZCI7ay5mb2N1c2luQnViYmxlcz0ib25mb2N1c2luImlu%0AIGE7dmFyIFY9L15rZXkvLFc9L14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51%0AKXxjbGljay8sWD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sWT0v%0AXihbXi5dKikoPzpcLiguKyl8KSQvO2Z1bmN0aW9uIFooKXtyZXR1cm4hMH1mdW5j%0AdGlvbiAkKCl7cmV0dXJuITF9ZnVuY3Rpb24gXygpe3RyeXtyZXR1cm4gbC5hY3Rp%0AdmVFbGVtZW50fWNhdGNoKGEpe319bi5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5j%0AdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbyxwLHEscj1MLmdl%0AdChhKTtpZihyKXtjLmhhbmRsZXImJihmPWMsYz1mLmhhbmRsZXIsZT1mLnNlbGVj%0AdG9yKSxjLmd1aWR8fChjLmd1aWQ9bi5ndWlkKyspLChpPXIuZXZlbnRzKXx8KGk9%0Aci5ldmVudHM9e30pLChnPXIuaGFuZGxlKXx8KGc9ci5oYW5kbGU9ZnVuY3Rpb24o%0AYil7cmV0dXJuIHR5cGVvZiBuIT09VSYmbi5ldmVudC50cmlnZ2VyZWQhPT1iLnR5%0AcGU/bi5ldmVudC5kaXNwYXRjaC5hcHBseShhLGFyZ3VtZW50cyk6dm9pZCAwfSks%0AYj0oYnx8IiIpLm1hdGNoKEUpfHxbIiJdLGo9Yi5sZW5ndGg7d2hpbGUoai0tKWg9%0AWS5leGVjKGJbal0pfHxbXSxvPXE9aFsxXSxwPShoWzJdfHwiIikuc3BsaXQoIi4i%0AKS5zb3J0KCksbyYmKGw9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShlP2wuZGVs%0AZWdhdGVUeXBlOmwuYmluZFR5cGUpfHxvLGw9bi5ldmVudC5zcGVjaWFsW29dfHx7%0AfSxrPW4uZXh0ZW5kKHt0eXBlOm8sb3JpZ1R5cGU6cSxkYXRhOmQsaGFuZGxlcjpj%0ALGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJm4uZXhwci5t%0AYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3BhY2U6cC5qb2luKCIuIil9%0ALGYpLChtPWlbb10pfHwobT1pW29dPVtdLG0uZGVsZWdhdGVDb3VudD0wLGwuc2V0%0AdXAmJmwuc2V0dXAuY2FsbChhLGQscCxnKSE9PSExfHxhLmFkZEV2ZW50TGlzdGVu%0AZXImJmEuYWRkRXZlbnRMaXN0ZW5lcihvLGcsITEpKSxsLmFkZCYmKGwuYWRkLmNh%0AbGwoYSxrKSxrLmhhbmRsZXIuZ3VpZHx8KGsuaGFuZGxlci5ndWlkPWMuZ3VpZCkp%0ALGU/bS5zcGxpY2UobS5kZWxlZ2F0ZUNvdW50KyssMCxrKTptLnB1c2goayksbi5l%0AdmVudC5nbG9iYWxbb109ITApfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7%0AdmFyIGYsZyxoLGksaixrLGwsbSxvLHAscSxyPUwuaGFzRGF0YShhKSYmTC5nZXQo%0AYSk7aWYociYmKGk9ci5ldmVudHMpKXtiPShifHwiIikubWF0Y2goRSl8fFsiIl0s%0Aaj1iLmxlbmd0aDt3aGlsZShqLS0paWYoaD1ZLmV4ZWMoYltqXSl8fFtdLG89cT1o%0AWzFdLHA9KGhbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxvKXtsPW4uZXZlbnQu%0Ac3BlY2lhbFtvXXx8e30sbz0oZD9sLmRlbGVnYXRlVHlwZTpsLmJpbmRUeXBlKXx8%0AbyxtPWlbb118fFtdLGg9aFsyXSYmbmV3IFJlZ0V4cCgiKF58XFwuKSIrcC5qb2lu%0AKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKSxnPWY9bS5sZW5ndGg7d2hpbGUo%0AZi0tKWs9bVtmXSwhZSYmcSE9PWsub3JpZ1R5cGV8fGMmJmMuZ3VpZCE9PWsuZ3Vp%0AZHx8aCYmIWgudGVzdChrLm5hbWVzcGFjZSl8fGQmJmQhPT1rLnNlbGVjdG9yJiYo%0AIioqIiE9PWR8fCFrLnNlbGVjdG9yKXx8KG0uc3BsaWNlKGYsMSksay5zZWxlY3Rv%0AciYmbS5kZWxlZ2F0ZUNvdW50LS0sbC5yZW1vdmUmJmwucmVtb3ZlLmNhbGwoYSxr%0AKSk7ZyYmIW0ubGVuZ3RoJiYobC50ZWFyZG93biYmbC50ZWFyZG93bi5jYWxsKGEs%0AcCxyLmhhbmRsZSkhPT0hMXx8bi5yZW1vdmVFdmVudChhLG8sci5oYW5kbGUpLGRl%0AbGV0ZSBpW29dKX1lbHNlIGZvcihvIGluIGkpbi5ldmVudC5yZW1vdmUoYSxvK2Jb%0Aal0sYyxkLCEwKTtuLmlzRW1wdHlPYmplY3QoaSkmJihkZWxldGUgci5oYW5kbGUs%0ATC5yZW1vdmUoYSwiZXZlbnRzIikpfX0sdHJpZ2dlcjpmdW5jdGlvbihiLGMsZCxl%0AKXt2YXIgZixnLGgsaSxrLG0sbyxwPVtkfHxsXSxxPWouY2FsbChiLCJ0eXBlIik/%0AYi50eXBlOmIscj1qLmNhbGwoYiwibmFtZXNwYWNlIik/Yi5uYW1lc3BhY2Uuc3Bs%0AaXQoIi4iKTpbXTtpZihnPWg9ZD1kfHxsLDMhPT1kLm5vZGVUeXBlJiY4IT09ZC5u%0Ab2RlVHlwZSYmIVgudGVzdChxK24uZXZlbnQudHJpZ2dlcmVkKSYmKHEuaW5kZXhP%0AZigiLiIpPj0wJiYocj1xLnNwbGl0KCIuIikscT1yLnNoaWZ0KCksci5zb3J0KCkp%0ALGs9cS5pbmRleE9mKCI6Iik8MCYmIm9uIitxLGI9YltuLmV4cGFuZG9dP2I6bmV3%0AIG4uRXZlbnQocSwib2JqZWN0Ij09dHlwZW9mIGImJmIpLGIuaXNUcmlnZ2VyPWU/%0AMjozLGIubmFtZXNwYWNlPXIuam9pbigiLiIpLGIubmFtZXNwYWNlX3JlPWIubmFt%0AZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK3Iuam9pbigiXFwuKD86LipcXC58%0AKSIpKyIoXFwufCQpIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50YXJnZXR8fChi%0ALnRhcmdldD1kKSxjPW51bGw9PWM/W2JdOm4ubWFrZUFycmF5KGMsW2JdKSxvPW4u%0AZXZlbnQuc3BlY2lhbFtxXXx8e30sZXx8IW8udHJpZ2dlcnx8by50cmlnZ2VyLmFw%0AcGx5KGQsYykhPT0hMSkpe2lmKCFlJiYhby5ub0J1YmJsZSYmIW4uaXNXaW5kb3co%0AZCkpe2ZvcihpPW8uZGVsZWdhdGVUeXBlfHxxLFgudGVzdChpK3EpfHwoZz1nLnBh%0AcmVudE5vZGUpO2c7Zz1nLnBhcmVudE5vZGUpcC5wdXNoKGcpLGg9ZztoPT09KGQu%0Ab3duZXJEb2N1bWVudHx8bCkmJnAucHVzaChoLmRlZmF1bHRWaWV3fHxoLnBhcmVu%0AdFdpbmRvd3x8YSl9Zj0wO3doaWxlKChnPXBbZisrXSkmJiFiLmlzUHJvcGFnYXRp%0Ab25TdG9wcGVkKCkpYi50eXBlPWY+MT9pOm8uYmluZFR5cGV8fHEsbT0oTC5nZXQo%0AZywiZXZlbnRzIil8fHt9KVtiLnR5cGVdJiZMLmdldChnLCJoYW5kbGUiKSxtJiZt%0ALmFwcGx5KGcsYyksbT1rJiZnW2tdLG0mJm0uYXBwbHkmJm4uYWNjZXB0RGF0YShn%0AKSYmKGIucmVzdWx0PW0uYXBwbHkoZyxjKSxiLnJlc3VsdD09PSExJiZiLnByZXZl%0AbnREZWZhdWx0KCkpO3JldHVybiBiLnR5cGU9cSxlfHxiLmlzRGVmYXVsdFByZXZl%0AbnRlZCgpfHxvLl9kZWZhdWx0JiZvLl9kZWZhdWx0LmFwcGx5KHAucG9wKCksYykh%0APT0hMXx8IW4uYWNjZXB0RGF0YShkKXx8ayYmbi5pc0Z1bmN0aW9uKGRbcV0pJiYh%0Abi5pc1dpbmRvdyhkKSYmKGg9ZFtrXSxoJiYoZFtrXT1udWxsKSxuLmV2ZW50LnRy%0AaWdnZXJlZD1xLGRbcV0oKSxuLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsaCYmKGRb%0Aa109aCkpLGIucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YT1uLmV2ZW50%0ALmZpeChhKTt2YXIgYixjLGUsZixnLGg9W10saT1kLmNhbGwoYXJndW1lbnRzKSxq%0APShMLmdldCh0aGlzLCJldmVudHMiKXx8e30pW2EudHlwZV18fFtdLGs9bi5ldmVu%0AdC5zcGVjaWFsW2EudHlwZV18fHt9O2lmKGlbMF09YSxhLmRlbGVnYXRlVGFyZ2V0%0APXRoaXMsIWsucHJlRGlzcGF0Y2h8fGsucHJlRGlzcGF0Y2guY2FsbCh0aGlzLGEp%0AIT09ITEpe2g9bi5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsYSxqKSxiPTA7d2hp%0AbGUoKGY9aFtiKytdKSYmIWEuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7YS5jdXJy%0AZW50VGFyZ2V0PWYuZWxlbSxjPTA7d2hpbGUoKGc9Zi5oYW5kbGVyc1tjKytdKSYm%0AIWEuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkoIWEubmFtZXNwYWNl%0AX3JlfHxhLm5hbWVzcGFjZV9yZS50ZXN0KGcubmFtZXNwYWNlKSkmJihhLmhhbmRs%0AZU9iaj1nLGEuZGF0YT1nLmRhdGEsZT0oKG4uZXZlbnQuc3BlY2lhbFtnLm9yaWdU%0AeXBlXXx8e30pLmhhbmRsZXx8Zy5oYW5kbGVyKS5hcHBseShmLmVsZW0saSksdm9p%0AZCAwIT09ZSYmKGEucmVzdWx0PWUpPT09ITEmJihhLnByZXZlbnREZWZhdWx0KCks%0AYS5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBrLnBvc3REaXNwYXRjaCYmay5w%0Ab3N0RGlzcGF0Y2guY2FsbCh0aGlzLGEpLGEucmVzdWx0fX0saGFuZGxlcnM6ZnVu%0AY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnPVtdLGg9Yi5kZWxlZ2F0ZUNvdW50LGk9%0AYS50YXJnZXQ7aWYoaCYmaS5ub2RlVHlwZSYmKCFhLmJ1dHRvbnx8ImNsaWNrIiE9%0APWEudHlwZSkpZm9yKDtpIT09dGhpcztpPWkucGFyZW50Tm9kZXx8dGhpcylpZihp%0ALmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1hLnR5cGUpe2ZvcihkPVtdLGM9MDto%0APmM7YysrKWY9YltjXSxlPWYuc2VsZWN0b3IrIiAiLHZvaWQgMD09PWRbZV0mJihk%0AW2VdPWYubmVlZHNDb250ZXh0P24oZSx0aGlzKS5pbmRleChpKT49MDpuLmZpbmQo%0AZSx0aGlzLG51bGwsW2ldKS5sZW5ndGgpLGRbZV0mJmQucHVzaChmKTtkLmxlbmd0%0AaCYmZy5wdXNoKHtlbGVtOmksaGFuZGxlcnM6ZH0pfXJldHVybiBoPGIubGVuZ3Ro%0AJiZnLnB1c2goe2VsZW06dGhpcyxoYW5kbGVyczpiLnNsaWNlKGgpfSksZ30scHJv%0AcHM6ImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFy%0AZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRh%0AcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7%0AfSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNw%0AbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PWEud2hp%0AY2gmJihhLndoaWNoPW51bGwhPWIuY2hhckNvZGU/Yi5jaGFyQ29kZTpiLmtleUNv%0AZGUpLGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50%0AWCBjbGllbnRZIG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNj%0AcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGIp%0Ae3ZhciBjLGQsZSxmPWIuYnV0dG9uO3JldHVybiBudWxsPT1hLnBhZ2VYJiZudWxs%0AIT1iLmNsaWVudFgmJihjPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGwsZD1jLmRv%0AY3VtZW50RWxlbWVudCxlPWMuYm9keSxhLnBhZ2VYPWIuY2xpZW50WCsoZCYmZC5z%0AY3JvbGxMZWZ0fHxlJiZlLnNjcm9sbExlZnR8fDApLShkJiZkLmNsaWVudExlZnR8%0AfGUmJmUuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1iLmNsaWVudFkrKGQmJmQuc2Ny%0Ab2xsVG9wfHxlJiZlLnNjcm9sbFRvcHx8MCktKGQmJmQuY2xpZW50VG9wfHxlJiZl%0ALmNsaWVudFRvcHx8MCkpLGEud2hpY2h8fHZvaWQgMD09PWZ8fChhLndoaWNoPTEm%0AZj8xOjImZj8zOjQmZj8yOjApLGF9fSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtuLmV4%0AcGFuZG9dKXJldHVybiBhO3ZhciBiLGMsZCxlPWEudHlwZSxmPWEsZz10aGlzLmZp%0AeEhvb2tzW2VdO2d8fCh0aGlzLmZpeEhvb2tzW2VdPWc9Vy50ZXN0KGUpP3RoaXMu%0AbW91c2VIb29rczpWLnRlc3QoZSk/dGhpcy5rZXlIb29rczp7fSksZD1nLnByb3Bz%0AP3RoaXMucHJvcHMuY29uY2F0KGcucHJvcHMpOnRoaXMucHJvcHMsYT1uZXcgbi5F%0AdmVudChmKSxiPWQubGVuZ3RoO3doaWxlKGItLSljPWRbYl0sYVtjXT1mW2NdO3Jl%0AdHVybiBhLnRhcmdldHx8KGEudGFyZ2V0PWwpLDM9PT1hLnRhcmdldC5ub2RlVHlw%0AZSYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGcuZmlsdGVyP2cuZmls%0AdGVyKGEsZik6YX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0%0AcmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMhPT1fKCkmJnRoaXMuZm9jdXM/%0AKHRoaXMuZm9jdXMoKSwhMSk6dm9pZCAwfSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4i%0AfSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1fKCkmJnRo%0AaXMuYmx1cj8odGhpcy5ibHVyKCksITEpOnZvaWQgMH0sZGVsZWdhdGVUeXBlOiJm%0Ab2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuImNoZWNr%0AYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmbi5ub2RlTmFtZSh0aGlzLCJp%0AbnB1dCIpPyh0aGlzLmNsaWNrKCksITEpOnZvaWQgMH0sX2RlZmF1bHQ6ZnVuY3Rp%0Ab24oYSl7cmV0dXJuIG4ubm9kZU5hbWUoYS50YXJnZXQsImEiKX19LGJlZm9yZXVu%0AbG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGEpe3ZvaWQgMCE9PWEucmVzdWx0%0AJiZhLm9yaWdpbmFsRXZlbnQmJihhLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9%0AYS5yZXN1bHQpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW4u%0AZXh0ZW5kKG5ldyBuLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMCxvcmln%0AaW5hbEV2ZW50Ont9fSk7ZD9uLmV2ZW50LnRyaWdnZXIoZSxudWxsLGIpOm4uZXZl%0AbnQuZGlzcGF0Y2guY2FsbChiLGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkmJmMu%0AcHJldmVudERlZmF1bHQoKX19LG4ucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oYSxiLGMp%0Ae2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIs%0AYywhMSl9LG4uRXZlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcyBpbnN0YW5j%0AZW9mIG4uRXZlbnQ/KGEmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhp%0Acy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQ%0AcmV2ZW50ZWR8fHZvaWQgMD09PWEuZGVmYXVsdFByZXZlbnRlZCYmYS5yZXR1cm5W%0AYWx1ZT09PSExP1o6JCk6dGhpcy50eXBlPWEsYiYmbi5leHRlbmQodGhpcyxiKSx0%0AaGlzLnRpbWVTdGFtcD1hJiZhLnRpbWVTdGFtcHx8bi5ub3coKSx2b2lkKHRoaXNb%0Abi5leHBhbmRvXT0hMCkpOm5ldyBuLkV2ZW50KGEsYil9LG4uRXZlbnQucHJvdG90%0AeXBlPXtpc0RlZmF1bHRQcmV2ZW50ZWQ6JCxpc1Byb3BhZ2F0aW9uU3RvcHBlZDok%0ALGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiQscHJldmVudERlZmF1bHQ6%0AZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1%0AbHRQcmV2ZW50ZWQ9WixhJiZhLnByZXZlbnREZWZhdWx0JiZhLnByZXZlbnREZWZh%0AdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3Jp%0AZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPVosYSYmYS5zdG9w%0AUHJvcGFnYXRpb24mJmEuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQ%0Acm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0%0AaGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPVosYSYmYS5zdG9wSW1t%0AZWRpYXRlUHJvcGFnYXRpb24mJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCks%0AdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LG4uZWFjaCh7bW91c2VlbnRlcjoibW91%0Ac2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2lu%0AdGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oYSxi%0AKXtuLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIs%0AaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdl%0AdCxmPWEuaGFuZGxlT2JqO3JldHVybighZXx8ZSE9PWQmJiFuLmNvbnRhaW5zKGQs%0AZSkpJiYoYS50eXBlPWYub3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxh%0Acmd1bWVudHMpLGEudHlwZT1iKSxjfX19KSxrLmZvY3VzaW5CdWJibGVzfHxuLmVh%0AY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEs%0AYil7dmFyIGM9ZnVuY3Rpb24oYSl7bi5ldmVudC5zaW11bGF0ZShiLGEudGFyZ2V0%0ALG4uZXZlbnQuZml4KGEpLCEwKX07bi5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpm%0AdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPUwuYWNj%0AZXNzKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCksTC5hY2Nlc3Mo%0AZCxiLChlfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93%0AbmVyRG9jdW1lbnR8fHRoaXMsZT1MLmFjY2VzcyhkLGIpLTE7ZT9MLmFjY2Vzcyhk%0ALGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLEwucmVtb3ZlKGQs%0AYikpfX19KSxuLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIg%0AZixnO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7InN0cmluZyIhPXR5cGVvZiBiJiYo%0AYz1jfHxiLGI9dm9pZCAwKTtmb3IoZyBpbiBhKXRoaXMub24oZyxiLGMsYVtnXSxl%0AKTtyZXR1cm4gdGhpc31pZihudWxsPT1jJiZudWxsPT1kPyhkPWIsYz1iPXZvaWQg%0AMCk6bnVsbD09ZCYmKCJzdHJpbmciPT10eXBlb2YgYj8oZD1jLGM9dm9pZCAwKToo%0AZD1jLGM9YixiPXZvaWQgMCkpLGQ9PT0hMSlkPSQ7ZWxzZSBpZighZClyZXR1cm4g%0AdGhpcztyZXR1cm4gMT09PWUmJihmPWQsZD1mdW5jdGlvbihhKXtyZXR1cm4gbigp%0ALm9mZihhKSxmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5ndWlkPWYuZ3VpZHx8%0AKGYuZ3VpZD1uLmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe24uZXZlbnQu%0AYWRkKHRoaXMsYSxkLGMsYil9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVy%0AbiB0aGlzLm9uKGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQs%0AZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1h%0ALmhhbmRsZU9iaixuKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9k%0ALm9yaWdUeXBlKyIuIitkLm5hbWVzcGFjZTpkLm9yaWdUeXBlLGQuc2VsZWN0b3Is%0AZC5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7Zm9yKGUgaW4g%0AYSl0aGlzLm9mZihlLGIsYVtlXSk7cmV0dXJuIHRoaXN9cmV0dXJuKGI9PT0hMXx8%0AImZ1bmN0aW9uIj09dHlwZW9mIGIpJiYoYz1iLGI9dm9pZCAwKSxjPT09ITEmJihj%0APSQpLHRoaXMuZWFjaChmdW5jdGlvbigpe24uZXZlbnQucmVtb3ZlKHRoaXMsYSxj%0ALGIpfSl9LHRyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1%0AbmN0aW9uKCl7bi5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFu%0AZGxlcjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXNbMF07cmV0dXJuIGM/bi5ldmVu%0AdC50cmlnZ2VyKGEsYixjLCEwKTp2b2lkIDB9fSk7dmFyIGFiPS88KD8hYXJlYXxi%0Acnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpd%0AKylbXj5dKilcLz4vZ2ksYmI9LzwoW1x3Ol0rKS8sY2I9Lzx8JiM/XHcrOy8sZGI9%0ALzwoPzpzY3JpcHR8c3R5bGV8bGluaykvaSxlYj0vY2hlY2tlZFxzKig/OltePV18%0APVxzKi5jaGVja2VkLikvaSxmYj0vXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ks%0AZ2I9L150cnVlXC8oLiopLyxoYj0vXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpc%0AXVxdfC0tKT5ccyokL2csaWI9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0n%0AbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90%0AYWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48%0AL3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJs%0AZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5Pjwv%0AdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtpYi5vcHRncm91cD1pYi5vcHRp%0Ab24saWIudGJvZHk9aWIudGZvb3Q9aWIuY29sZ3JvdXA9aWIuY2FwdGlvbj1pYi50%0AaGVhZCxpYi50aD1pYi50ZDtmdW5jdGlvbiBqYihhLGIpe3JldHVybiBuLm5vZGVO%0AYW1lKGEsInRhYmxlIikmJm4ubm9kZU5hbWUoMTEhPT1iLm5vZGVUeXBlP2I6Yi5m%0AaXJzdENoaWxkLCJ0ciIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5Iilb%0AMF18fGEuYXBwZW5kQ2hpbGQoYS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo%0AInRib2R5IikpOmF9ZnVuY3Rpb24ga2IoYSl7cmV0dXJuIGEudHlwZT0obnVsbCE9%0APWEuZ2V0QXR0cmlidXRlKCJ0eXBlIikpKyIvIithLnR5cGUsYX1mdW5jdGlvbiBs%0AYihhKXt2YXIgYj1nYi5leGVjKGEudHlwZSk7cmV0dXJuIGI/YS50eXBlPWJbMV06%0AYS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxhfWZ1bmN0aW9uIG1iKGEsYil7Zm9y%0AKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKUwuc2V0KGFbY10sImdsb2JhbEV2%0AYWwiLCFifHxMLmdldChiW2NdLCJnbG9iYWxFdmFsIikpfWZ1bmN0aW9uIG5iKGEs%0AYil7dmFyIGMsZCxlLGYsZyxoLGksajtpZigxPT09Yi5ub2RlVHlwZSl7aWYoTC5o%0AYXNEYXRhKGEpJiYoZj1MLmFjY2VzcyhhKSxnPUwuc2V0KGIsZiksaj1mLmV2ZW50%0Acykpe2RlbGV0ZSBnLmhhbmRsZSxnLmV2ZW50cz17fTtmb3IoZSBpbiBqKWZvcihj%0APTAsZD1qW2VdLmxlbmd0aDtkPmM7YysrKW4uZXZlbnQuYWRkKGIsZSxqW2VdW2Nd%0AKX1NLmhhc0RhdGEoYSkmJihoPU0uYWNjZXNzKGEpLGk9bi5leHRlbmQoe30saCks%0ATS5zZXQoYixpKSl9fWZ1bmN0aW9uIG9iKGEsYil7dmFyIGM9YS5nZXRFbGVtZW50%0Ac0J5VGFnTmFtZT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKGJ8fCIqIik6YS5xdWVy%0AeVNlbGVjdG9yQWxsP2EucXVlcnlTZWxlY3RvckFsbChifHwiKiIpOltdO3JldHVy%0AbiB2b2lkIDA9PT1ifHxiJiZuLm5vZGVOYW1lKGEsYik/bi5tZXJnZShbYV0sYyk6%0AY31mdW5jdGlvbiBwYihhLGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2Uo%0AKTsiaW5wdXQiPT09YyYmVC50ZXN0KGEudHlwZSk/Yi5jaGVja2VkPWEuY2hlY2tl%0AZDooImlucHV0Ij09PWN8fCJ0ZXh0YXJlYSI9PT1jKSYmKGIuZGVmYXVsdFZhbHVl%0APWEuZGVmYXVsdFZhbHVlKX1uLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMp%0Ae3ZhciBkLGUsZixnLGg9YS5jbG9uZU5vZGUoITApLGk9bi5jb250YWlucyhhLm93%0AbmVyRG9jdW1lbnQsYSk7aWYoIShrLm5vQ2xvbmVDaGVja2VkfHwxIT09YS5ub2Rl%0AVHlwZSYmMTEhPT1hLm5vZGVUeXBlfHxuLmlzWE1MRG9jKGEpKSlmb3IoZz1vYiho%0AKSxmPW9iKGEpLGQ9MCxlPWYubGVuZ3RoO2U+ZDtkKyspcGIoZltkXSxnW2RdKTtp%0AZihiKWlmKGMpZm9yKGY9Znx8b2IoYSksZz1nfHxvYihoKSxkPTAsZT1mLmxlbmd0%0AaDtlPmQ7ZCsrKW5iKGZbZF0sZ1tkXSk7ZWxzZSBuYihhLGgpO3JldHVybiBnPW9i%0AKGgsInNjcmlwdCIpLGcubGVuZ3RoPjAmJm1iKGcsIWkmJm9iKGEsInNjcmlwdCIp%0AKSxofSxidWlsZEZyYWdtZW50OmZ1bmN0aW9uKGEsYixjLGQpe2Zvcih2YXIgZSxm%0ALGcsaCxpLGosaz1iLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxsPVtdLG09MCxv%0APWEubGVuZ3RoO28+bTttKyspaWYoZT1hW21dLGV8fDA9PT1lKWlmKCJvYmplY3Qi%0APT09bi50eXBlKGUpKW4ubWVyZ2UobCxlLm5vZGVUeXBlP1tlXTplKTtlbHNlIGlm%0AKGNiLnRlc3QoZSkpe2Y9Znx8ay5hcHBlbmRDaGlsZChiLmNyZWF0ZUVsZW1lbnQo%0AImRpdiIpKSxnPShiYi5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgp%0ALGg9aWJbZ118fGliLl9kZWZhdWx0LGYuaW5uZXJIVE1MPWhbMV0rZS5yZXBsYWNl%0AKGFiLCI8JDE+PC8kMj4iKStoWzJdLGo9aFswXTt3aGlsZShqLS0pZj1mLmxhc3RD%0AaGlsZDtuLm1lcmdlKGwsZi5jaGlsZE5vZGVzKSxmPWsuZmlyc3RDaGlsZCxmLnRl%0AeHRDb250ZW50PSIifWVsc2UgbC5wdXNoKGIuY3JlYXRlVGV4dE5vZGUoZSkpO2su%0AdGV4dENvbnRlbnQ9IiIsbT0wO3doaWxlKGU9bFttKytdKWlmKCghZHx8LTE9PT1u%0ALmluQXJyYXkoZSxkKSkmJihpPW4uY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUp%0ALGY9b2Ioay5hcHBlbmRDaGlsZChlKSwic2NyaXB0IiksaSYmbWIoZiksYykpe2o9%0AMDt3aGlsZShlPWZbaisrXSlmYi50ZXN0KGUudHlwZXx8IiIpJiZjLnB1c2goZSl9%0AcmV0dXJuIGt9LGNsZWFuRGF0YTpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGUs%0AZj1uLmV2ZW50LnNwZWNpYWwsZz0wO3ZvaWQgMCE9PShjPWFbZ10pO2crKyl7aWYo%0Abi5hY2NlcHREYXRhKGMpJiYoZT1jW0wuZXhwYW5kb10sZSYmKGI9TC5jYWNoZVtl%0AXSkpKXtpZihiLmV2ZW50cylmb3IoZCBpbiBiLmV2ZW50cylmW2RdP24uZXZlbnQu%0AcmVtb3ZlKGMsZCk6bi5yZW1vdmVFdmVudChjLGQsYi5oYW5kbGUpO0wuY2FjaGVb%0AZV0mJmRlbGV0ZSBMLmNhY2hlW2VdfWRlbGV0ZSBNLmNhY2hlW2NbTS5leHBhbmRv%0AXV19fX0pLG4uZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBKKHRo%0AaXMsZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/bi50ZXh0KHRoaXMpOnRo%0AaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7KDE9PT10aGlzLm5vZGVUeXBlfHwx%0AMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKSYmKHRoaXMudGV4%0AdENvbnRlbnQ9YSl9KX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6%0AZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rp%0Ab24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8%0AOT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPWpiKHRoaXMsYSk7Yi5hcHBlbmRDaGls%0AZChhKX19KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlw%0AKGFyZ3VtZW50cyxmdW5jdGlvbihhKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9%0APT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIGI9amIodGhp%0AcyxhKTtiLmluc2VydEJlZm9yZShhLGIuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpm%0AdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlv%0AbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZv%0AcmUoYSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1h%0AbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMu%0AcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzLm5leHRTaWJsaW5nKX0pfSxy%0AZW1vdmU6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD1hP24uZmlsdGVyKGEsdGhp%0Acyk6dGhpcyxlPTA7bnVsbCE9KGM9ZFtlXSk7ZSsrKWJ8fDEhPT1jLm5vZGVUeXBl%0AfHxuLmNsZWFuRGF0YShvYihjKSksYy5wYXJlbnROb2RlJiYoYiYmbi5jb250YWlu%0AcyhjLm93bmVyRG9jdW1lbnQsYykmJm1iKG9iKGMsInNjcmlwdCIpKSxjLnBhcmVu%0AdE5vZGUucmVtb3ZlQ2hpbGQoYykpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlv%0Abigpe2Zvcih2YXIgYSxiPTA7bnVsbCE9KGE9dGhpc1tiXSk7YisrKTE9PT1hLm5v%0AZGVUeXBlJiYobi5jbGVhbkRhdGEob2IoYSwhMSkpLGEudGV4dENvbnRlbnQ9IiIp%0AO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihhLGIpe3JldHVybiBhPW51bGw9%0APWE/ITE6YSxiPW51bGw9PWI/YTpiLHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJu%0AIG4uY2xvbmUodGhpcyxhLGIpfSl9LGh0bWw6ZnVuY3Rpb24oYSl7cmV0dXJuIEoo%0AdGhpcyxmdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdfHx7fSxjPTAsZD10aGlzLmxl%0Abmd0aDtpZih2b2lkIDA9PT1hJiYxPT09Yi5ub2RlVHlwZSlyZXR1cm4gYi5pbm5l%0AckhUTUw7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYhZGIudGVzdChhKSYmIWliWyhi%0AYi5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1hLnJlcGxh%0AY2UoYWIsIjwkMT48LyQyPiIpO3RyeXtmb3IoO2Q+YztjKyspYj10aGlzW2NdfHx7%0AfSwxPT09Yi5ub2RlVHlwZSYmKG4uY2xlYW5EYXRhKG9iKGIsITEpKSxiLmlubmVy%0ASFRNTD1hKTtiPTB9Y2F0Y2goZSl7fX1iJiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGEp%0AfSxudWxsLGEsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9u%0AKCl7dmFyIGE9YXJndW1lbnRzWzBdO3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3Vt%0AZW50cyxmdW5jdGlvbihiKXthPXRoaXMucGFyZW50Tm9kZSxuLmNsZWFuRGF0YShv%0AYih0aGlzKSksYSYmYS5yZXBsYWNlQ2hpbGQoYix0aGlzKX0pLGEmJihhLmxlbmd0%0AaHx8YS5ub2RlVHlwZSk/dGhpczp0aGlzLnJlbW92ZSgpfSxkZXRhY2g6ZnVuY3Rp%0Ab24oYSl7cmV0dXJuIHRoaXMucmVtb3ZlKGEsITApfSxkb21NYW5pcDpmdW5jdGlv%0AbihhLGIpe2E9ZS5hcHBseShbXSxhKTt2YXIgYyxkLGYsZyxoLGksaj0wLGw9dGhp%0Acy5sZW5ndGgsbT10aGlzLG89bC0xLHA9YVswXSxxPW4uaXNGdW5jdGlvbihwKTtp%0AZihxfHxsPjEmJiJzdHJpbmciPT10eXBlb2YgcCYmIWsuY2hlY2tDbG9uZSYmZWIu%0AdGVzdChwKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe3ZhciBkPW0uZXEo%0AYyk7cSYmKGFbMF09cC5jYWxsKHRoaXMsYyxkLmh0bWwoKSkpLGQuZG9tTWFuaXAo%0AYSxiKX0pO2lmKGwmJihjPW4uYnVpbGRGcmFnbWVudChhLHRoaXNbMF0ub3duZXJE%0Ab2N1bWVudCwhMSx0aGlzKSxkPWMuZmlyc3RDaGlsZCwxPT09Yy5jaGlsZE5vZGVz%0ALmxlbmd0aCYmKGM9ZCksZCkpe2ZvcihmPW4ubWFwKG9iKGMsInNjcmlwdCIpLGti%0AKSxnPWYubGVuZ3RoO2w+ajtqKyspaD1jLGohPT1vJiYoaD1uLmNsb25lKGgsITAs%0AITApLGcmJm4ubWVyZ2UoZixvYihoLCJzY3JpcHQiKSkpLGIuY2FsbCh0aGlzW2pd%0ALGgsaik7aWYoZylmb3IoaT1mW2YubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsbi5t%0AYXAoZixsYiksaj0wO2c+ajtqKyspaD1mW2pdLGZiLnRlc3QoaC50eXBlfHwiIikm%0AJiFMLmFjY2VzcyhoLCJnbG9iYWxFdmFsIikmJm4uY29udGFpbnMoaSxoKSYmKGgu%0Ac3JjP24uX2V2YWxVcmwmJm4uX2V2YWxVcmwoaC5zcmMpOm4uZ2xvYmFsRXZhbCho%0ALnRleHRDb250ZW50LnJlcGxhY2UoaGIsIiIpKSl9cmV0dXJuIHRoaXN9fSksbi5l%0AYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2Vy%0AdEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6%0AInJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXtuLmZuW2FdPWZ1bmN0aW9uKGEp%0Ae2Zvcih2YXIgYyxkPVtdLGU9bihhKSxnPWUubGVuZ3RoLTEsaD0wO2c+PWg7aCsr%0AKWM9aD09PWc/dGhpczp0aGlzLmNsb25lKCEwKSxuKGVbaF0pW2JdKGMpLGYuYXBw%0AbHkoZCxjLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZCl9fSk7dmFyIHFi%0ALHJiPXt9O2Z1bmN0aW9uIHNiKGIsYyl7dmFyIGQsZT1uKGMuY3JlYXRlRWxlbWVu%0AdChiKSkuYXBwZW5kVG8oYy5ib2R5KSxmPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5%0AbGUmJihkPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUoZVswXSkpP2QuZGlzcGxh%0AeTpuLmNzcyhlWzBdLCJkaXNwbGF5Iik7cmV0dXJuIGUuZGV0YWNoKCksZn1mdW5j%0AdGlvbiB0YihhKXt2YXIgYj1sLGM9cmJbYV07cmV0dXJuIGN8fChjPXNiKGEsYiks%0AIm5vbmUiIT09YyYmY3x8KHFiPShxYnx8bigiPGlmcmFtZSBmcmFtZWJvcmRlcj0n%0AMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpKS5hcHBlbmRUbyhiLmRvY3VtZW50%0ARWxlbWVudCksYj1xYlswXS5jb250ZW50RG9jdW1lbnQsYi53cml0ZSgpLGIuY2xv%0Ac2UoKSxjPXNiKGEsYikscWIuZGV0YWNoKCkpLHJiW2FdPWMpLGN9dmFyIHViPS9e%0AbWFyZ2luLyx2Yj1uZXcgUmVnRXhwKCJeKCIrUSsiKSg/IXB4KVthLXolXSskIiwi%0AaSIpLHdiPWZ1bmN0aW9uKGEpe3JldHVybiBhLm93bmVyRG9jdW1lbnQuZGVmYXVs%0AdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpfTtmdW5jdGlvbiB4YihhLGIs%0AYyl7dmFyIGQsZSxmLGcsaD1hLnN0eWxlO3JldHVybiBjPWN8fHdiKGEpLGMmJihn%0APWMuZ2V0UHJvcGVydHlWYWx1ZShiKXx8Y1tiXSksYyYmKCIiIT09Z3x8bi5jb250%0AYWlucyhhLm93bmVyRG9jdW1lbnQsYSl8fChnPW4uc3R5bGUoYSxiKSksdmIudGVz%0AdChnKSYmdWIudGVzdChiKSYmKGQ9aC53aWR0aCxlPWgubWluV2lkdGgsZj1oLm1h%0AeFdpZHRoLGgubWluV2lkdGg9aC5tYXhXaWR0aD1oLndpZHRoPWcsZz1jLndpZHRo%0ALGgud2lkdGg9ZCxoLm1pbldpZHRoPWUsaC5tYXhXaWR0aD1mKSksdm9pZCAwIT09%0AZz9nKyIiOmd9ZnVuY3Rpb24geWIoYSxiKXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7%0AcmV0dXJuIGEoKT92b2lkIGRlbGV0ZSB0aGlzLmdldDoodGhpcy5nZXQ9YikuYXBw%0AbHkodGhpcyxhcmd1bWVudHMpfX19IWZ1bmN0aW9uKCl7dmFyIGIsYyxkPWwuZG9j%0AdW1lbnRFbGVtZW50LGU9bC5jcmVhdGVFbGVtZW50KCJkaXYiKSxmPWwuY3JlYXRl%0ARWxlbWVudCgiZGl2Iik7aWYoZi5zdHlsZSl7Zi5zdHlsZS5iYWNrZ3JvdW5kQ2xp%0AcD0iY29udGVudC1ib3giLGYuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5k%0AQ2xpcD0iIixrLmNsZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09Zi5zdHls%0AZS5iYWNrZ3JvdW5kQ2xpcCxlLnN0eWxlLmNzc1RleHQ9ImJvcmRlcjowO3dpZHRo%0AOjA7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4O3Bv%0Ac2l0aW9uOmFic29sdXRlIixlLmFwcGVuZENoaWxkKGYpO2Z1bmN0aW9uIGcoKXtm%0ALnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1t%0Ab3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtk%0AaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MSU7dG9wOjElO2JvcmRlcjoxcHg7cGFk%0AZGluZzoxcHg7d2lkdGg6NHB4O3Bvc2l0aW9uOmFic29sdXRlIixmLmlubmVySFRN%0ATD0iIixkLmFwcGVuZENoaWxkKGUpO3ZhciBnPWEuZ2V0Q29tcHV0ZWRTdHlsZShm%0ALG51bGwpO2I9IjElIiE9PWcudG9wLGM9IjRweCI9PT1nLndpZHRoLGQucmVtb3Zl%0AQ2hpbGQoZSl9YS5nZXRDb21wdXRlZFN0eWxlJiZuLmV4dGVuZChrLHtwaXhlbFBv%0Ac2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGcoKSxifSxib3hTaXppbmdSZWxpYWJs%0AZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT1jJiZnKCksY30scmVsaWFibGVNYXJn%0AaW5SaWdodDpmdW5jdGlvbigpe3ZhciBiLGM9Zi5hcHBlbmRDaGlsZChsLmNyZWF0%0AZUVsZW1lbnQoImRpdiIpKTtyZXR1cm4gYy5zdHlsZS5jc3NUZXh0PWYuc3R5bGUu%0AY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94%0ALXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3Bs%0AYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowIixjLnN0eWxlLm1h%0AcmdpblJpZ2h0PWMuc3R5bGUud2lkdGg9IjAiLGYuc3R5bGUud2lkdGg9IjFweCIs%0AZC5hcHBlbmRDaGlsZChlKSxiPSFwYXJzZUZsb2F0KGEuZ2V0Q29tcHV0ZWRTdHls%0AZShjLG51bGwpLm1hcmdpblJpZ2h0KSxkLnJlbW92ZUNoaWxkKGUpLGJ9fSl9fSgp%0ALG4uc3dhcD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGc9e307Zm9yKGYgaW4g%0AYilnW2ZdPWEuc3R5bGVbZl0sYS5zdHlsZVtmXT1iW2ZdO2U9Yy5hcHBseShhLGR8%0AfFtdKTtmb3IoZiBpbiBiKWEuc3R5bGVbZl09Z1tmXTtyZXR1cm4gZX07dmFyIHpi%0APS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxBYj1uZXcgUmVnRXhwKCJeKCIr%0AUSsiKSguKikkIiwiaSIpLEJiPW5ldyBSZWdFeHAoIl4oWystXSk9KCIrUSsiKSIs%0AImkiKSxDYj17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4i%0ALGRpc3BsYXk6ImJsb2NrIn0sRGI9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWln%0AaHQ6IjQwMCJ9LEViPVsiV2Via2l0IiwiTyIsIk1veiIsIm1zIl07ZnVuY3Rpb24g%0ARmIoYSxiKXtpZihiIGluIGEpcmV0dXJuIGI7dmFyIGM9YlswXS50b1VwcGVyQ2Fz%0AZSgpK2Iuc2xpY2UoMSksZD1iLGU9RWIubGVuZ3RoO3doaWxlKGUtLSlpZihiPUVi%0AW2VdK2MsYiBpbiBhKXJldHVybiBiO3JldHVybiBkfWZ1bmN0aW9uIEdiKGEsYixj%0AKXt2YXIgZD1BYi5leGVjKGIpO3JldHVybiBkP01hdGgubWF4KDAsZFsxXS0oY3x8%0AMCkpKyhkWzJdfHwicHgiKTpifWZ1bmN0aW9uIEhiKGEsYixjLGQsZSl7Zm9yKHZh%0AciBmPWM9PT0oZD8iYm9yZGVyIjoiY29udGVudCIpPzQ6IndpZHRoIj09PWI/MTow%0ALGc9MDs0PmY7Zis9MikibWFyZ2luIj09PWMmJihnKz1uLmNzcyhhLGMrUltmXSwh%0AMCxlKSksZD8oImNvbnRlbnQiPT09YyYmKGctPW4uY3NzKGEsInBhZGRpbmciK1Jb%0AZl0sITAsZSkpLCJtYXJnaW4iIT09YyYmKGctPW4uY3NzKGEsImJvcmRlciIrUltm%0AXSsiV2lkdGgiLCEwLGUpKSk6KGcrPW4uY3NzKGEsInBhZGRpbmciK1JbZl0sITAs%0AZSksInBhZGRpbmciIT09YyYmKGcrPW4uY3NzKGEsImJvcmRlciIrUltmXSsiV2lk%0AdGgiLCEwLGUpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gSWIoYSxiLGMpe3ZhciBkPSEw%0ALGU9IndpZHRoIj09PWI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxmPXdi%0AKGEpLGc9ImJvcmRlci1ib3giPT09bi5jc3MoYSwiYm94U2l6aW5nIiwhMSxmKTtp%0AZigwPj1lfHxudWxsPT1lKXtpZihlPXhiKGEsYixmKSwoMD5lfHxudWxsPT1lKSYm%0AKGU9YS5zdHlsZVtiXSksdmIudGVzdChlKSlyZXR1cm4gZTtkPWcmJihrLmJveFNp%0AemluZ1JlbGlhYmxlKCl8fGU9PT1hLnN0eWxlW2JdKSxlPXBhcnNlRmxvYXQoZSl8%0AfDB9cmV0dXJuIGUrSGIoYSxiLGN8fChnPyJib3JkZXIiOiJjb250ZW50IiksZCxm%0AKSsicHgifWZ1bmN0aW9uIEpiKGEsYil7Zm9yKHZhciBjLGQsZSxmPVtdLGc9MCxo%0APWEubGVuZ3RoO2g+ZztnKyspZD1hW2ddLGQuc3R5bGUmJihmW2ddPUwuZ2V0KGQs%0AIm9sZGRpc3BsYXkiKSxjPWQuc3R5bGUuZGlzcGxheSxiPyhmW2ddfHwibm9uZSIh%0APT1jfHwoZC5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PWQuc3R5bGUuZGlzcGxheSYm%0AUyhkKSYmKGZbZ109TC5hY2Nlc3MoZCwib2xkZGlzcGxheSIsdGIoZC5ub2RlTmFt%0AZSkpKSk6KGU9UyhkKSwibm9uZSI9PT1jJiZlfHxMLnNldChkLCJvbGRkaXNwbGF5%0AIixlP2M6bi5jc3MoZCwiZGlzcGxheSIpKSkpO2ZvcihnPTA7aD5nO2crKylkPWFb%0AZ10sZC5zdHlsZSYmKGImJiJub25lIiE9PWQuc3R5bGUuZGlzcGxheSYmIiIhPT1k%0ALnN0eWxlLmRpc3BsYXl8fChkLnN0eWxlLmRpc3BsYXk9Yj9mW2ddfHwiIjoibm9u%0AZSIpKTtyZXR1cm4gYX1uLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpm%0AdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPXhiKGEsIm9wYWNpdHkiKTtyZXR1cm4i%0AIj09PWM/IjEiOmN9fX19LGNzc051bWJlcjp7Y29sdW1uQ291bnQ6ITAsZmlsbE9w%0AYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEw%0ALGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdp%0AZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6ImNz%0Ac0Zsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYSYmMyE9PWEubm9k%0AZVR5cGUmJjghPT1hLm5vZGVUeXBlJiZhLnN0eWxlKXt2YXIgZSxmLGcsaD1uLmNh%0AbWVsQ2FzZShiKSxpPWEuc3R5bGU7cmV0dXJuIGI9bi5jc3NQcm9wc1toXXx8KG4u%0AY3NzUHJvcHNbaF09RmIoaSxoKSksZz1uLmNzc0hvb2tzW2JdfHxuLmNzc0hvb2tz%0AW2hdLHZvaWQgMD09PWM/ZyYmImdldCJpbiBnJiZ2b2lkIDAhPT0oZT1nLmdldChh%0ALCExLGQpKT9lOmlbYl06KGY9dHlwZW9mIGMsInN0cmluZyI9PT1mJiYoZT1CYi5l%0AeGVjKGMpKSYmKGM9KGVbMV0rMSkqZVsyXStwYXJzZUZsb2F0KG4uY3NzKGEsYikp%0ALGY9Im51bWJlciIpLG51bGwhPWMmJmM9PT1jJiYoIm51bWJlciIhPT1mfHxuLmNz%0Ac051bWJlcltoXXx8KGMrPSJweCIpLGsuY2xlYXJDbG9uZVN0eWxlfHwiIiE9PWN8%0AfDAhPT1iLmluZGV4T2YoImJhY2tncm91bmQiKXx8KGlbYl09ImluaGVyaXQiKSxn%0AJiYic2V0ImluIGcmJnZvaWQgMD09PShjPWcuc2V0KGEsYyxkKSl8fChpW2JdPWMp%0AKSx2b2lkIDApfX0sY3NzOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoPW4u%0AY2FtZWxDYXNlKGIpO3JldHVybiBiPW4uY3NzUHJvcHNbaF18fChuLmNzc1Byb3Bz%0AW2hdPUZiKGEuc3R5bGUsaCkpLGc9bi5jc3NIb29rc1tiXXx8bi5jc3NIb29rc1to%0AXSxnJiYiZ2V0ImluIGcmJihlPWcuZ2V0KGEsITAsYykpLHZvaWQgMD09PWUmJihl%0APXhiKGEsYixkKSksIm5vcm1hbCI9PT1lJiZiIGluIERiJiYoZT1EYltiXSksIiI9%0APT1jfHxjPyhmPXBhcnNlRmxvYXQoZSksYz09PSEwfHxuLmlzTnVtZXJpYyhmKT9m%0AfHwwOmUpOmV9fSksbi5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihh%0ALGIpe24uY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGM/%0AemIudGVzdChuLmNzcyhhLCJkaXNwbGF5IikpJiYwPT09YS5vZmZzZXRXaWR0aD9u%0ALnN3YXAoYSxDYixmdW5jdGlvbigpe3JldHVybiBJYihhLGIsZCl9KTpJYihhLGIs%0AZCk6dm9pZCAwfSxzZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWQmJndiKGEpO3Jl%0AdHVybiBHYihhLGMsZD9IYihhLGIsZCwiYm9yZGVyLWJveCI9PT1uLmNzcyhhLCJi%0Ab3hTaXppbmciLCExLGUpLGUpOjApfX19KSxuLmNzc0hvb2tzLm1hcmdpblJpZ2h0%0APXliKGsucmVsaWFibGVNYXJnaW5SaWdodCxmdW5jdGlvbihhLGIpe3JldHVybiBi%0AP24uc3dhcChhLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSx4YixbYSwibWFyZ2lu%0AUmlnaHQiXSk6dm9pZCAwfSksbi5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixi%0Ab3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2ErYl09e2V4%0AcGFuZDpmdW5jdGlvbihjKXtmb3IodmFyIGQ9MCxlPXt9LGY9InN0cmluZyI9PXR5%0AcGVvZiBjP2Muc3BsaXQoIiAiKTpbY107ND5kO2QrKyllW2ErUltkXStiXT1mW2Rd%0AfHxmW2QtMl18fGZbMF07cmV0dXJuIGV9fSx1Yi50ZXN0KGEpfHwobi5jc3NIb29r%0Ac1thK2JdLnNldD1HYil9KSxuLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGEsYil7%0AcmV0dXJuIEoodGhpcyxmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXt9LGc9MDtp%0AZihuLmlzQXJyYXkoYikpe2ZvcihkPXdiKGEpLGU9Yi5sZW5ndGg7ZT5nO2crKylm%0AW2JbZ11dPW4uY3NzKGEsYltnXSwhMSxkKTtyZXR1cm4gZn1yZXR1cm4gdm9pZCAw%0AIT09Yz9uLnN0eWxlKGEsYixjKTpuLmNzcyhhLGIpfSxhLGIsYXJndW1lbnRzLmxl%0Abmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBKYih0aGlzLCEwKX0saGlk%0AZTpmdW5jdGlvbigpe3JldHVybiBKYih0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGEp%0Ae3JldHVybiJib29sZWFuIj09dHlwZW9mIGE/YT90aGlzLnNob3coKTp0aGlzLmhp%0AZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtTKHRoaXMpP24odGhpcykuc2hvdygp%0AOm4odGhpcykuaGlkZSgpfSl9fSk7ZnVuY3Rpb24gS2IoYSxiLGMsZCxlKXtyZXR1%0Acm4gbmV3IEtiLnByb3RvdHlwZS5pbml0KGEsYixjLGQsZSl9bi5Ud2Vlbj1LYixL%0AYi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOktiLGluaXQ6ZnVuY3Rpb24oYSxiLGMs%0AZCxlLGYpe3RoaXMuZWxlbT1hLHRoaXMucHJvcD1jLHRoaXMuZWFzaW5nPWV8fCJz%0Ad2luZyIsdGhpcy5vcHRpb25zPWIsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1%0AcigpLHRoaXMuZW5kPWQsdGhpcy51bml0PWZ8fChuLmNzc051bWJlcltjXT8iIjoi%0AcHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGE9S2IucHJvcEhvb2tzW3RoaXMucHJv%0AcF07cmV0dXJuIGEmJmEuZ2V0P2EuZ2V0KHRoaXMpOktiLnByb3BIb29rcy5fZGVm%0AYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihhKXt2YXIgYixjPUtiLnByb3BI%0Ab29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLnBvcz1iPXRoaXMub3B0aW9ucy5k%0AdXJhdGlvbj9uLmVhc2luZ1t0aGlzLmVhc2luZ10oYSx0aGlzLm9wdGlvbnMuZHVy%0AYXRpb24qYSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTphLHRoaXMubm93PSh0%0AaGlzLmVuZC10aGlzLnN0YXJ0KSpiK3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0%0AZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRo%0AaXMpLGMmJmMuc2V0P2Muc2V0KHRoaXMpOktiLnByb3BIb29rcy5fZGVmYXVsdC5z%0AZXQodGhpcyksdGhpc319LEtiLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1LYi5w%0Acm90b3R5cGUsS2IucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGEp%0Ae3ZhciBiO3JldHVybiBudWxsPT1hLmVsZW1bYS5wcm9wXXx8YS5lbGVtLnN0eWxl%0AJiZudWxsIT1hLmVsZW0uc3R5bGVbYS5wcm9wXT8oYj1uLmNzcyhhLmVsZW0sYS5w%0Acm9wLCIiKSxiJiYiYXV0byIhPT1iP2I6MCk6YS5lbGVtW2EucHJvcF19LHNldDpm%0AdW5jdGlvbihhKXtuLmZ4LnN0ZXBbYS5wcm9wXT9uLmZ4LnN0ZXBbYS5wcm9wXShh%0AKTphLmVsZW0uc3R5bGUmJihudWxsIT1hLmVsZW0uc3R5bGVbbi5jc3NQcm9wc1th%0ALnByb3BdXXx8bi5jc3NIb29rc1thLnByb3BdKT9uLnN0eWxlKGEuZWxlbSxhLnBy%0Ab3AsYS5ub3crYS51bml0KTphLmVsZW1bYS5wcm9wXT1hLm5vd319fSxLYi5wcm9w%0ASG9va3Muc2Nyb2xsVG9wPUtiLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVu%0AY3Rpb24oYSl7YS5lbGVtLm5vZGVUeXBlJiZhLmVsZW0ucGFyZW50Tm9kZSYmKGEu%0AZWxlbVthLnByb3BdPWEubm93KX19LG4uZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24o%0AYSl7cmV0dXJuIGF9LHN3aW5nOmZ1bmN0aW9uKGEpe3JldHVybi41LU1hdGguY29z%0AKGEqTWF0aC5QSSkvMn19LG4uZng9S2IucHJvdG90eXBlLmluaXQsbi5meC5zdGVw%0APXt9O3ZhciBMYixNYixOYj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sT2I9bmV3%0AIFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK1ErIikoW2EteiVdKikkIiwiaSIpLFBi%0APS9xdWV1ZUhvb2tzJC8sUWI9W1ZiXSxSYj17IioiOltmdW5jdGlvbihhLGIpe3Zh%0AciBjPXRoaXMuY3JlYXRlVHdlZW4oYSxiKSxkPWMuY3VyKCksZT1PYi5leGVjKGIp%0ALGY9ZSYmZVszXXx8KG4uY3NzTnVtYmVyW2FdPyIiOiJweCIpLGc9KG4uY3NzTnVt%0AYmVyW2FdfHwicHgiIT09ZiYmK2QpJiZPYi5leGVjKG4uY3NzKGMuZWxlbSxhKSks%0AaD0xLGk9MjA7aWYoZyYmZ1szXSE9PWYpe2Y9Znx8Z1szXSxlPWV8fFtdLGc9K2R8%0AfDE7ZG8gaD1ofHwiLjUiLGcvPWgsbi5zdHlsZShjLmVsZW0sYSxnK2YpO3doaWxl%0AKGghPT0oaD1jLmN1cigpL2QpJiYxIT09aCYmLS1pKX1yZXR1cm4gZSYmKGc9Yy5z%0AdGFydD0rZ3x8K2R8fDAsYy51bml0PWYsYy5lbmQ9ZVsxXT9nKyhlWzFdKzEpKmVb%0AMl06K2VbMl0pLGN9XX07ZnVuY3Rpb24gU2IoKXtyZXR1cm4gc2V0VGltZW91dChm%0AdW5jdGlvbigpe0xiPXZvaWQgMH0pLExiPW4ubm93KCl9ZnVuY3Rpb24gVGIoYSxi%0AKXt2YXIgYyxkPTAsZT17aGVpZ2h0OmF9O2ZvcihiPWI/MTowOzQ+ZDtkKz0yLWIp%0AYz1SW2RdLGVbIm1hcmdpbiIrY109ZVsicGFkZGluZyIrY109YTtyZXR1cm4gYiYm%0AKGUub3BhY2l0eT1lLndpZHRoPWEpLGV9ZnVuY3Rpb24gVWIoYSxiLGMpe2Zvcih2%0AYXIgZCxlPShSYltiXXx8W10pLmNvbmNhdChSYlsiKiJdKSxmPTAsZz1lLmxlbmd0%0AaDtnPmY7ZisrKWlmKGQ9ZVtmXS5jYWxsKGMsYixhKSlyZXR1cm4gZH1mdW5jdGlv%0AbiBWYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsPXRoaXMsbT17fSxvPWEu%0Ac3R5bGUscD1hLm5vZGVUeXBlJiZTKGEpLHE9TC5nZXQoYSwiZnhzaG93Iik7Yy5x%0AdWV1ZXx8KGg9bi5fcXVldWVIb29rcyhhLCJmeCIpLG51bGw9PWgudW5xdWV1ZWQm%0AJihoLnVucXVldWVkPTAsaT1oLmVtcHR5LmZpcmUsaC5lbXB0eS5maXJlPWZ1bmN0%0AaW9uKCl7aC51bnF1ZXVlZHx8aSgpfSksaC51bnF1ZXVlZCsrLGwuYWx3YXlzKGZ1%0AbmN0aW9uKCl7bC5hbHdheXMoZnVuY3Rpb24oKXtoLnVucXVldWVkLS0sbi5xdWV1%0AZShhLCJmeCIpLmxlbmd0aHx8aC5lbXB0eS5maXJlKCl9KX0pKSwxPT09YS5ub2Rl%0AVHlwZSYmKCJoZWlnaHQiaW4gYnx8IndpZHRoImluIGIpJiYoYy5vdmVyZmxvdz1b%0Aby5vdmVyZmxvdyxvLm92ZXJmbG93WCxvLm92ZXJmbG93WV0saj1uLmNzcyhhLCJk%0AaXNwbGF5Iiksaz0ibm9uZSI9PT1qP0wuZ2V0KGEsIm9sZGRpc3BsYXkiKXx8dGIo%0AYS5ub2RlTmFtZSk6aiwiaW5saW5lIj09PWsmJiJub25lIj09PW4uY3NzKGEsImZs%0Ab2F0IikmJihvLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxjLm92ZXJmbG93JiYo%0Aby5vdmVyZmxvdz0iaGlkZGVuIixsLmFsd2F5cyhmdW5jdGlvbigpe28ub3ZlcmZs%0Ab3c9Yy5vdmVyZmxvd1swXSxvLm92ZXJmbG93WD1jLm92ZXJmbG93WzFdLG8ub3Zl%0AcmZsb3dZPWMub3ZlcmZsb3dbMl19KSk7Zm9yKGQgaW4gYilpZihlPWJbZF0sTmIu%0AZXhlYyhlKSl7aWYoZGVsZXRlIGJbZF0sZj1mfHwidG9nZ2xlIj09PWUsZT09PShw%0APyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1lfHwhcXx8dm9pZCAwPT09cVtk%0AXSljb250aW51ZTtwPSEwfW1bZF09cSYmcVtkXXx8bi5zdHlsZShhLGQpfWVsc2Ug%0Aaj12b2lkIDA7aWYobi5pc0VtcHR5T2JqZWN0KG0pKSJpbmxpbmUiPT09KCJub25l%0AIj09PWo/dGIoYS5ub2RlTmFtZSk6aikmJihvLmRpc3BsYXk9aik7ZWxzZXtxPyJo%0AaWRkZW4iaW4gcSYmKHA9cS5oaWRkZW4pOnE9TC5hY2Nlc3MoYSwiZnhzaG93Iix7%0AfSksZiYmKHEuaGlkZGVuPSFwKSxwP24oYSkuc2hvdygpOmwuZG9uZShmdW5jdGlv%0Abigpe24oYSkuaGlkZSgpfSksbC5kb25lKGZ1bmN0aW9uKCl7dmFyIGI7TC5yZW1v%0AdmUoYSwiZnhzaG93Iik7Zm9yKGIgaW4gbSluLnN0eWxlKGEsYixtW2JdKX0pO2Zv%0AcihkIGluIG0pZz1VYihwP3FbZF06MCxkLGwpLGQgaW4gcXx8KHFbZF09Zy5zdGFy%0AdCxwJiYoZy5lbmQ9Zy5zdGFydCxnLnN0YXJ0PSJ3aWR0aCI9PT1kfHwiaGVpZ2h0%0AIj09PWQ/MTowKSl9fWZ1bmN0aW9uIFdiKGEsYil7dmFyIGMsZCxlLGYsZztmb3Io%0AYyBpbiBhKWlmKGQ9bi5jYW1lbENhc2UoYyksZT1iW2RdLGY9YVtjXSxuLmlzQXJy%0AYXkoZikmJihlPWZbMV0sZj1hW2NdPWZbMF0pLGMhPT1kJiYoYVtkXT1mLGRlbGV0%0AZSBhW2NdKSxnPW4uY3NzSG9va3NbZF0sZyYmImV4cGFuZCJpbiBnKXtmPWcuZXhw%0AYW5kKGYpLGRlbGV0ZSBhW2RdO2ZvcihjIGluIGYpYyBpbiBhfHwoYVtjXT1mW2Nd%0ALGJbY109ZSl9ZWxzZSBiW2RdPWV9ZnVuY3Rpb24gWGIoYSxiLGMpe3ZhciBkLGUs%0AZj0wLGc9UWIubGVuZ3RoLGg9bi5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigp%0Ae2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7aWYoZSlyZXR1cm4hMTtmb3Io%0AdmFyIGI9TGJ8fFNiKCksYz1NYXRoLm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRp%0Ab24tYiksZD1jL2ouZHVyYXRpb258fDAsZj0xLWQsZz0wLGk9ai50d2VlbnMubGVu%0AZ3RoO2k+ZztnKyspai50d2VlbnNbZ10ucnVuKGYpO3JldHVybiBoLm5vdGlmeVdp%0AdGgoYSxbaixmLGNdKSwxPmYmJmk/YzooaC5yZXNvbHZlV2l0aChhLFtqXSksITEp%0AfSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOm4uZXh0ZW5kKHt9LGIpLG9wdHM6%0Abi5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LGMpLG9yaWdpbmFsUHJvcGVy%0AdGllczpiLG9yaWdpbmFsT3B0aW9uczpjLHN0YXJ0VGltZTpMYnx8U2IoKSxkdXJh%0AdGlvbjpjLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihi%0ALGMpe3ZhciBkPW4uVHdlZW4oYSxqLm9wdHMsYixjLGoub3B0cy5zcGVjaWFsRWFz%0AaW5nW2JdfHxqLm9wdHMuZWFzaW5nKTtyZXR1cm4gai50d2VlbnMucHVzaChkKSxk%0AfSxzdG9wOmZ1bmN0aW9uKGIpe3ZhciBjPTAsZD1iP2oudHdlZW5zLmxlbmd0aDow%0AO2lmKGUpcmV0dXJuIHRoaXM7Zm9yKGU9ITA7ZD5jO2MrKylqLnR3ZWVuc1tjXS5y%0AdW4oMSk7cmV0dXJuIGI/aC5yZXNvbHZlV2l0aChhLFtqLGJdKTpoLnJlamVjdFdp%0AdGgoYSxbaixiXSksdGhpc319KSxrPWoucHJvcHM7Zm9yKFdiKGssai5vcHRzLnNw%0AZWNpYWxFYXNpbmcpO2c+ZjtmKyspaWYoZD1RYltmXS5jYWxsKGosYSxrLGoub3B0%0AcykpcmV0dXJuIGQ7cmV0dXJuIG4ubWFwKGssVWIsaiksbi5pc0Z1bmN0aW9uKGou%0Ab3B0cy5zdGFydCkmJmoub3B0cy5zdGFydC5jYWxsKGEsaiksbi5meC50aW1lcihu%0ALmV4dGVuZChpLHtlbGVtOmEsYW5pbTpqLHF1ZXVlOmoub3B0cy5xdWV1ZX0pKSxq%0ALnByb2dyZXNzKGoub3B0cy5wcm9ncmVzcykuZG9uZShqLm9wdHMuZG9uZSxqLm9w%0AdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3%0AYXlzKX1uLkFuaW1hdGlvbj1uLmV4dGVuZChYYix7dHdlZW5lcjpmdW5jdGlvbihh%0ALGIpe24uaXNGdW5jdGlvbihhKT8oYj1hLGE9WyIqIl0pOmE9YS5zcGxpdCgiICIp%0AO2Zvcih2YXIgYyxkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWM9YVtkXSxSYltjXT1S%0AYltjXXx8W10sUmJbY10udW5zaGlmdChiKX0scHJlZmlsdGVyOmZ1bmN0aW9uKGEs%0AYil7Yj9RYi51bnNoaWZ0KGEpOlFiLnB1c2goYSl9fSksbi5zcGVlZD1mdW5jdGlv%0AbihhLGIsYyl7dmFyIGQ9YSYmIm9iamVjdCI9PXR5cGVvZiBhP24uZXh0ZW5kKHt9%0ALGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8bi5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0%0AaW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFuLmlzRnVuY3Rpb24oYikmJmJ9O3JldHVy%0AbiBkLmR1cmF0aW9uPW4uZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiBkLmR1cmF0%0AaW9uP2QuZHVyYXRpb246ZC5kdXJhdGlvbiBpbiBuLmZ4LnNwZWVkcz9uLmZ4LnNw%0AZWVkc1tkLmR1cmF0aW9uXTpuLmZ4LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ZC5x%0AdWV1ZXx8ZC5xdWV1ZT09PSEwKSYmKGQucXVldWU9ImZ4IiksZC5vbGQ9ZC5jb21w%0AbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bi5pc0Z1bmN0aW9uKGQub2xkKSYm%0AZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZuLmRlcXVldWUodGhpcyxkLnF1ZXVl%0AKX0sZH0sbi5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1%0Acm4gdGhpcy5maWx0ZXIoUykuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCku%0AYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxi%0ALGMsZCl7dmFyIGU9bi5pc0VtcHR5T2JqZWN0KGEpLGY9bi5zcGVlZChiLGMsZCks%0AZz1mdW5jdGlvbigpe3ZhciBiPVhiKHRoaXMsbi5leHRlbmQoe30sYSksZik7KGV8%0AfEwuZ2V0KHRoaXMsImZpbmlzaCIpKSYmYi5zdG9wKCEwKX07cmV0dXJuIGcuZmlu%0AaXNoPWcsZXx8Zi5xdWV1ZT09PSExP3RoaXMuZWFjaChnKTp0aGlzLnF1ZXVlKGYu%0AcXVldWUsZyl9LHN0b3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWZ1bmN0aW9uKGEp%0Ae3ZhciBiPWEuc3RvcDtkZWxldGUgYS5zdG9wLGIoYyl9O3JldHVybiJzdHJpbmci%0AIT10eXBlb2YgYSYmKGM9YixiPWEsYT12b2lkIDApLGImJmEhPT0hMSYmdGhpcy5x%0AdWV1ZShhfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj0hMCxl%0APW51bGwhPWEmJmErInF1ZXVlSG9va3MiLGY9bi50aW1lcnMsZz1MLmdldCh0aGlz%0AKTtpZihlKWdbZV0mJmdbZV0uc3RvcCYmZChnW2VdKTtlbHNlIGZvcihlIGluIGcp%0AZ1tlXSYmZ1tlXS5zdG9wJiZQYi50ZXN0KGUpJiZkKGdbZV0pO2ZvcihlPWYubGVu%0AZ3RoO2UtLTspZltlXS5lbGVtIT09dGhpc3x8bnVsbCE9YSYmZltlXS5xdWV1ZSE9%0APWF8fChmW2VdLmFuaW0uc3RvcChjKSxiPSExLGYuc3BsaWNlKGUsMSkpOyhifHwh%0AYykmJm4uZGVxdWV1ZSh0aGlzLGEpfSl9LGZpbmlzaDpmdW5jdGlvbihhKXtyZXR1%0Acm4gYSE9PSExJiYoYT1hfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIg%0AYixjPUwuZ2V0KHRoaXMpLGQ9Y1thKyJxdWV1ZSJdLGU9Y1thKyJxdWV1ZUhvb2tz%0AIl0sZj1uLnRpbWVycyxnPWQ/ZC5sZW5ndGg6MDtmb3IoYy5maW5pc2g9ITAsbi5x%0AdWV1ZSh0aGlzLGEsW10pLGUmJmUuc3RvcCYmZS5zdG9wLmNhbGwodGhpcywhMCks%0AYj1mLmxlbmd0aDtiLS07KWZbYl0uZWxlbT09PXRoaXMmJmZbYl0ucXVldWU9PT1h%0AJiYoZltiXS5hbmltLnN0b3AoITApLGYuc3BsaWNlKGIsMSkpO2ZvcihiPTA7Zz5i%0AO2IrKylkW2JdJiZkW2JdLmZpbmlzaCYmZFtiXS5maW5pc2guY2FsbCh0aGlzKTtk%0AZWxldGUgYy5maW5pc2h9KX19KSxuLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlk%0AZSJdLGZ1bmN0aW9uKGEsYil7dmFyIGM9bi5mbltiXTtuLmZuW2JdPWZ1bmN0aW9u%0AKGEsZCxlKXtyZXR1cm4gbnVsbD09YXx8ImJvb2xlYW4iPT10eXBlb2YgYT9jLmFw%0AcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoVGIoYiwhMCksYSxkLGUp%0AfX0pLG4uZWFjaCh7c2xpZGVEb3duOlRiKCJzaG93Iiksc2xpZGVVcDpUYigiaGlk%0AZSIpLHNsaWRlVG9nZ2xlOlRiKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNo%0Ab3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0%0AeToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7bi5mblthXT1mdW5jdGlvbihhLGMs%0AZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxuLnRpbWVycz1bXSxu%0ALmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPTAsYz1uLnRpbWVycztmb3IoTGI9%0Abi5ub3coKTtiPGMubGVuZ3RoO2IrKylhPWNbYl0sYSgpfHxjW2JdIT09YXx8Yy5z%0AcGxpY2UoYi0tLDEpO2MubGVuZ3RofHxuLmZ4LnN0b3AoKSxMYj12b2lkIDB9LG4u%0AZngudGltZXI9ZnVuY3Rpb24oYSl7bi50aW1lcnMucHVzaChhKSxhKCk/bi5meC5z%0AdGFydCgpOm4udGltZXJzLnBvcCgpfSxuLmZ4LmludGVydmFsPTEzLG4uZnguc3Rh%0AcnQ9ZnVuY3Rpb24oKXtNYnx8KE1iPXNldEludGVydmFsKG4uZngudGljayxuLmZ4%0ALmludGVydmFsKSl9LG4uZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwo%0ATWIpLE1iPW51bGx9LG4uZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVm%0AYXVsdDo0MDB9LG4uZm4uZGVsYXk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1uLmZ4%0AP24uZnguc3BlZWRzW2FdfHxhOmEsYj1ifHwiZngiLHRoaXMucXVldWUoYixmdW5j%0AdGlvbihiLGMpe3ZhciBkPXNldFRpbWVvdXQoYixhKTtjLnN0b3A9ZnVuY3Rpb24o%0AKXtjbGVhclRpbWVvdXQoZCl9fSl9LGZ1bmN0aW9uKCl7dmFyIGE9bC5jcmVhdGVF%0AbGVtZW50KCJpbnB1dCIpLGI9bC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxjPWIu%0AYXBwZW5kQ2hpbGQobC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7YS50eXBlPSJj%0AaGVja2JveCIsay5jaGVja09uPSIiIT09YS52YWx1ZSxrLm9wdFNlbGVjdGVkPWMu%0Ac2VsZWN0ZWQsYi5kaXNhYmxlZD0hMCxrLm9wdERpc2FibGVkPSFjLmRpc2FibGVk%0ALGE9bC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGEudmFsdWU9InQiLGEudHlwZT0i%0AcmFkaW8iLGsucmFkaW9WYWx1ZT0idCI9PT1hLnZhbHVlfSgpO3ZhciBZYixaYiwk%0AYj1uLmV4cHIuYXR0ckhhbmRsZTtuLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihh%0ALGIpe3JldHVybiBKKHRoaXMsbi5hdHRyLGEsYixhcmd1bWVudHMubGVuZ3RoPjEp%0AfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rp%0Ab24oKXtuLnJlbW92ZUF0dHIodGhpcyxhKX0pfX0pLG4uZXh0ZW5kKHthdHRyOmZ1%0AbmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9YS5ub2RlVHlwZTtpZihhJiYzIT09ZiYm%0AOCE9PWYmJjIhPT1mKXJldHVybiB0eXBlb2YgYS5nZXRBdHRyaWJ1dGU9PT1VP24u%0AcHJvcChhLGIsYyk6KDE9PT1mJiZuLmlzWE1MRG9jKGEpfHwoYj1iLnRvTG93ZXJD%0AYXNlKCksZD1uLmF0dHJIb29rc1tiXXx8KG4uZXhwci5tYXRjaC5ib29sLnRlc3Qo%0AYik/WmI6WWIpKSx2b2lkIDA9PT1jP2QmJiJnZXQiaW4gZCYmbnVsbCE9PShlPWQu%0AZ2V0KGEsYikpP2U6KGU9bi5maW5kLmF0dHIoYSxiKSxudWxsPT1lP3ZvaWQgMDpl%0AKTpudWxsIT09Yz9kJiYic2V0ImluIGQmJnZvaWQgMCE9PShlPWQuc2V0KGEsYyxi%0AKSk/ZTooYS5zZXRBdHRyaWJ1dGUoYixjKyIiKSxjKTp2b2lkIG4ucmVtb3ZlQXR0%0AcihhLGIpKQp9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9MCxm%0APWImJmIubWF0Y2goRSk7aWYoZiYmMT09PWEubm9kZVR5cGUpd2hpbGUoYz1mW2Ur%0AK10pZD1uLnByb3BGaXhbY118fGMsbi5leHByLm1hdGNoLmJvb2wudGVzdChjKSYm%0AKGFbZF09ITEpLGEucmVtb3ZlQXR0cmlidXRlKGMpfSxhdHRySG9va3M6e3R5cGU6%0Ae3NldDpmdW5jdGlvbihhLGIpe2lmKCFrLnJhZGlvVmFsdWUmJiJyYWRpbyI9PT1i%0AJiZuLm5vZGVOYW1lKGEsImlucHV0Iikpe3ZhciBjPWEudmFsdWU7cmV0dXJuIGEu%0Ac2V0QXR0cmlidXRlKCJ0eXBlIixiKSxjJiYoYS52YWx1ZT1jKSxifX19fX0pLFpi%0APXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPT09ITE/bi5yZW1vdmVBdHRy%0AKGEsYyk6YS5zZXRBdHRyaWJ1dGUoYyxjKSxjfX0sbi5lYWNoKG4uZXhwci5tYXRj%0AaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGEsYil7dmFyIGM9%0AJGJbYl18fG4uZmluZC5hdHRyOyRiW2JdPWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxm%0AO3JldHVybiBkfHwoZj0kYltiXSwkYltiXT1lLGU9bnVsbCE9YyhhLGIsZCk/Yi50%0Ab0xvd2VyQ2FzZSgpOm51bGwsJGJbYl09ZiksZX19KTt2YXIgX2I9L14oPzppbnB1%0AdHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaTtuLmZuLmV4dGVuZCh7cHJvcDpm%0AdW5jdGlvbihhLGIpe3JldHVybiBKKHRoaXMsbi5wcm9wLGEsYixhcmd1bWVudHMu%0AbGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVh%0AY2goZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tuLnByb3BGaXhbYV18fGFdfSl9fSks%0Abi5leHRlbmQoe3Byb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFz%0Ac05hbWUifSxwcm9wOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZz1hLm5vZGVU%0AeXBlO2lmKGEmJjMhPT1nJiY4IT09ZyYmMiE9PWcpcmV0dXJuIGY9MSE9PWd8fCFu%0ALmlzWE1MRG9jKGEpLGYmJihiPW4ucHJvcEZpeFtiXXx8YixlPW4ucHJvcEhvb2tz%0AW2JdKSx2b2lkIDAhPT1jP2UmJiJzZXQiaW4gZSYmdm9pZCAwIT09KGQ9ZS5zZXQo%0AYSxjLGIpKT9kOmFbYl09YzplJiYiZ2V0ImluIGUmJm51bGwhPT0oZD1lLmdldChh%0ALGIpKT9kOmFbYl19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihh%0AKXtyZXR1cm4gYS5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fF9iLnRlc3QoYS5u%0Ab2RlTmFtZSl8fGEuaHJlZj9hLnRhYkluZGV4Oi0xfX19fSksay5vcHRTZWxlY3Rl%0AZHx8KG4ucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9%0AYS5wYXJlbnROb2RlO3JldHVybiBiJiZiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9k%0AZS5zZWxlY3RlZEluZGV4LG51bGx9fSksbi5lYWNoKFsidGFiSW5kZXgiLCJyZWFk%0AT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJy%0Ab3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVu%0AdEVkaXRhYmxlIl0sZnVuY3Rpb24oKXtuLnByb3BGaXhbdGhpcy50b0xvd2VyQ2Fz%0AZSgpXT10aGlzfSk7dmFyIGFjPS9bXHRcclxuXGZdL2c7bi5mbi5leHRlbmQoe2Fk%0AZENsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPSJzdHJpbmciPT10%0AeXBlb2YgYSYmYSxpPTAsaj10aGlzLmxlbmd0aDtpZihuLmlzRnVuY3Rpb24oYSkp%0AcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLmFkZENsYXNzKGEu%0AY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGgpZm9yKGI9KGF8fCIi%0AKS5tYXRjaChFKXx8W107aj5pO2krKylpZihjPXRoaXNbaV0sZD0xPT09Yy5ub2Rl%0AVHlwZSYmKGMuY2xhc3NOYW1lPygiICIrYy5jbGFzc05hbWUrIiAiKS5yZXBsYWNl%0AKGFjLCIgIik6IiAiKSl7Zj0wO3doaWxlKGU9YltmKytdKWQuaW5kZXhPZigiICIr%0AZSsiICIpPDAmJihkKz1lKyIgIik7Zz1uLnRyaW0oZCksYy5jbGFzc05hbWUhPT1n%0AJiYoYy5jbGFzc05hbWU9Zyl9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0%0AaW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPTA9PT1hcmd1bWVudHMubGVuZ3RofHwi%0Ac3RyaW5nIj09dHlwZW9mIGEmJmEsaT0wLGo9dGhpcy5sZW5ndGg7aWYobi5pc0Z1%0AbmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bih0aGlzKS5y%0AZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZiho%0AKWZvcihiPShhfHwiIikubWF0Y2goRSl8fFtdO2o+aTtpKyspaWYoYz10aGlzW2ld%0ALGQ9MT09PWMubm9kZVR5cGUmJihjLmNsYXNzTmFtZT8oIiAiK2MuY2xhc3NOYW1l%0AKyIgIikucmVwbGFjZShhYywiICIpOiIiKSl7Zj0wO3doaWxlKGU9YltmKytdKXdo%0AaWxlKGQuaW5kZXhPZigiICIrZSsiICIpPj0wKWQ9ZC5yZXBsYWNlKCIgIitlKyIg%0AIiwiICIpO2c9YT9uLnRyaW0oZCk6IiIsYy5jbGFzc05hbWUhPT1nJiYoYy5jbGFz%0Ac05hbWU9Zyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7%0AdmFyIGM9dHlwZW9mIGE7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYiYmInN0cmlu%0AZyI9PT1jP2I/dGhpcy5hZGRDbGFzcyhhKTp0aGlzLnJlbW92ZUNsYXNzKGEpOnRo%0AaXMuZWFjaChuLmlzRnVuY3Rpb24oYSk/ZnVuY3Rpb24oYyl7bih0aGlzKS50b2dn%0AbGVDbGFzcyhhLmNhbGwodGhpcyxjLHRoaXMuY2xhc3NOYW1lLGIpLGIpfTpmdW5j%0AdGlvbigpe2lmKCJzdHJpbmciPT09Yyl7dmFyIGIsZD0wLGU9bih0aGlzKSxmPWEu%0AbWF0Y2goRSl8fFtdO3doaWxlKGI9ZltkKytdKWUuaGFzQ2xhc3MoYik/ZS5yZW1v%0AdmVDbGFzcyhiKTplLmFkZENsYXNzKGIpfWVsc2UoYz09PVV8fCJib29sZWFuIj09%0APWMpJiYodGhpcy5jbGFzc05hbWUmJkwuc2V0KHRoaXMsIl9fY2xhc3NOYW1lX18i%0ALHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8%0AYT09PSExPyIiOkwuZ2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpfSl9LGhh%0Ac0NsYXNzOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iICIrYSsiICIsYz0wLGQ9dGhp%0Acy5sZW5ndGg7ZD5jO2MrKylpZigxPT09dGhpc1tjXS5ub2RlVHlwZSYmKCIgIit0%0AaGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoYWMsIiAiKS5pbmRleE9mKGIp%0APj0wKXJldHVybiEwO3JldHVybiExfX0pO3ZhciBiYz0vXHIvZztuLmZuLmV4dGVu%0AZCh7dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07e2lmKGFyZ3Vt%0AZW50cy5sZW5ndGgpcmV0dXJuIGQ9bi5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChm%0AdW5jdGlvbihjKXt2YXIgZTsxPT09dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwo%0AdGhpcyxjLG4odGhpcykudmFsKCkpOmEsbnVsbD09ZT9lPSIiOiJudW1iZXIiPT10%0AeXBlb2YgZT9lKz0iIjpuLmlzQXJyYXkoZSkmJihlPW4ubWFwKGUsZnVuY3Rpb24o%0AYSl7cmV0dXJuIG51bGw9PWE/IiI6YSsiIn0pKSxiPW4udmFsSG9va3NbdGhpcy50%0AeXBlXXx8bi52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGIm%0AJiJzZXQiaW4gYiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLCJ2YWx1ZSIpfHwodGhp%0Acy52YWx1ZT1lKSl9KTtpZihlKXJldHVybiBiPW4udmFsSG9va3NbZS50eXBlXXx8%0Abi52YWxIb29rc1tlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJnZXQiaW4g%0AYiYmdm9pZCAwIT09KGM9Yi5nZXQoZSwidmFsdWUiKSk/YzooYz1lLnZhbHVlLCJz%0AdHJpbmciPT10eXBlb2YgYz9jLnJlcGxhY2UoYmMsIiIpOm51bGw9PWM/IiI6Yyl9%0AfX0pLG4uZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7%0AdmFyIGI9bi5maW5kLmF0dHIoYSwidmFsdWUiKTtyZXR1cm4gbnVsbCE9Yj9iOm4u%0AdHJpbShuLnRleHQoYSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZh%0AciBiLGMsZD1hLm9wdGlvbnMsZT1hLnNlbGVjdGVkSW5kZXgsZj0ic2VsZWN0LW9u%0AZSI9PT1hLnR5cGV8fDA+ZSxnPWY/bnVsbDpbXSxoPWY/ZSsxOmQubGVuZ3RoLGk9%0AMD5lP2g6Zj9lOjA7aD5pO2krKylpZihjPWRbaV0sISghYy5zZWxlY3RlZCYmaSE9%0APWV8fChrLm9wdERpc2FibGVkP2MuZGlzYWJsZWQ6bnVsbCE9PWMuZ2V0QXR0cmli%0AdXRlKCJkaXNhYmxlZCIpKXx8Yy5wYXJlbnROb2RlLmRpc2FibGVkJiZuLm5vZGVO%0AYW1lKGMucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKGI9bihjKS52YWwoKSxm%0AKXJldHVybiBiO2cucHVzaChiKX1yZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKGEsYil7%0AdmFyIGMsZCxlPWEub3B0aW9ucyxmPW4ubWFrZUFycmF5KGIpLGc9ZS5sZW5ndGg7%0Ad2hpbGUoZy0tKWQ9ZVtnXSwoZC5zZWxlY3RlZD1uLmluQXJyYXkoZC52YWx1ZSxm%0AKT49MCkmJihjPSEwKTtyZXR1cm4gY3x8KGEuc2VsZWN0ZWRJbmRleD0tMSksZn19%0AfX0pLG4uZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe24udmFs%0ASG9va3NbdGhpc109e3NldDpmdW5jdGlvbihhLGIpe3JldHVybiBuLmlzQXJyYXko%0AYik/YS5jaGVja2VkPW4uaW5BcnJheShuKGEpLnZhbCgpLGIpPj0wOnZvaWQgMH19%0ALGsuY2hlY2tPbnx8KG4udmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGEpe3Jl%0AdHVybiBudWxsPT09YS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjphLnZhbHVl%0AfSl9KSxuLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJl%0Ac2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3Vz%0AZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3Vz%0AZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5%0AdXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtu%0ALmZuW2JdPWZ1bmN0aW9uKGEsYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90%0AaGlzLm9uKGIsbnVsbCxhLGMpOnRoaXMudHJpZ2dlcihiKX19KSxuLmZuLmV4dGVu%0AZCh7aG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEp%0ALm1vdXNlbGVhdmUoYnx8YSl9LGJpbmQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0%0AaGlzLm9uKGEsbnVsbCxiLGMpfSx1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4g%0AdGhpcy5vZmYoYSxudWxsLGIpfSxkZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyxkKXty%0AZXR1cm4gdGhpcy5vbihiLGEsYyxkKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIs%0AYyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGEsIioqIik6%0AdGhpcy5vZmYoYixhfHwiKioiLGMpfX0pO3ZhciBjYz1uLm5vdygpLGRjPS9cPy87%0Abi5wYXJzZUpTT049ZnVuY3Rpb24oYSl7cmV0dXJuIEpTT04ucGFyc2UoYSsiIil9%0ALG4ucGFyc2VYTUw9ZnVuY3Rpb24oYSl7dmFyIGIsYztpZighYXx8InN0cmluZyIh%0APXR5cGVvZiBhKXJldHVybiBudWxsO3RyeXtjPW5ldyBET01QYXJzZXIsYj1jLnBh%0AcnNlRnJvbVN0cmluZyhhLCJ0ZXh0L3htbCIpfWNhdGNoKGQpe2I9dm9pZCAwfXJl%0AdHVybighYnx8Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5s%0AZW5ndGgpJiZuLmVycm9yKCJJbnZhbGlkIFhNTDogIithKSxifTt2YXIgZWMsZmMs%0AZ2M9LyMuKiQvLGhjPS8oWz8mXSlfPVteJl0qLyxpYz0vXiguKj8pOlsgXHRdKihb%0AXlxyXG5dKikkL2dtLGpjPS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4%0AdGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLGtjPS9eKD86R0VUfEhFQUQpJC8s%0AbGM9L15cL1wvLyxtYz0vXihbXHcuKy1dKzopKD86XC9cLyg/OlteXC8/I10qQHwp%0AKFteXC8/IzpdKikoPzo6KFxkKyl8KXwpLyxuYz17fSxvYz17fSxwYz0iKi8iLmNv%0AbmNhdCgiKiIpO3RyeXtmYz1sb2NhdGlvbi5ocmVmfWNhdGNoKHFjKXtmYz1sLmNy%0AZWF0ZUVsZW1lbnQoImEiKSxmYy5ocmVmPSIiLGZjPWZjLmhyZWZ9ZWM9bWMuZXhl%0AYyhmYy50b0xvd2VyQ2FzZSgpKXx8W107ZnVuY3Rpb24gcmMoYSl7cmV0dXJuIGZ1%0AbmN0aW9uKGIsYyl7InN0cmluZyIhPXR5cGVvZiBiJiYoYz1iLGI9IioiKTt2YXIg%0AZCxlPTAsZj1iLnRvTG93ZXJDYXNlKCkubWF0Y2goRSl8fFtdO2lmKG4uaXNGdW5j%0AdGlvbihjKSl3aGlsZShkPWZbZSsrXSkiKyI9PT1kWzBdPyhkPWQuc2xpY2UoMSl8%0AfCIqIiwoYVtkXT1hW2RdfHxbXSkudW5zaGlmdChjKSk6KGFbZF09YVtkXXx8W10p%0ALnB1c2goYyl9fWZ1bmN0aW9uIHNjKGEsYixjLGQpe3ZhciBlPXt9LGY9YT09PW9j%0AO2Z1bmN0aW9uIGcoaCl7dmFyIGk7cmV0dXJuIGVbaF09ITAsbi5lYWNoKGFbaF18%0AfFtdLGZ1bmN0aW9uKGEsaCl7dmFyIGo9aChiLGMsZCk7cmV0dXJuInN0cmluZyIh%0APXR5cGVvZiBqfHxmfHxlW2pdP2Y/IShpPWopOnZvaWQgMDooYi5kYXRhVHlwZXMu%0AdW5zaGlmdChqKSxnKGopLCExKX0pLGl9cmV0dXJuIGcoYi5kYXRhVHlwZXNbMF0p%0AfHwhZVsiKiJdJiZnKCIqIil9ZnVuY3Rpb24gdGMoYSxiKXt2YXIgYyxkLGU9bi5h%0AamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihjIGluIGIpdm9pZCAwIT09%0AYltjXSYmKChlW2NdP2E6ZHx8KGQ9e30pKVtjXT1iW2NdKTtyZXR1cm4gZCYmbi5l%0AeHRlbmQoITAsYSxkKSxhfWZ1bmN0aW9uIHVjKGEsYixjKXt2YXIgZCxlLGYsZyxo%0APWEuY29udGVudHMsaT1hLmRhdGFUeXBlczt3aGlsZSgiKiI9PT1pWzBdKWkuc2hp%0AZnQoKSx2b2lkIDA9PT1kJiYoZD1hLm1pbWVUeXBlfHxiLmdldFJlc3BvbnNlSGVh%0AZGVyKCJDb250ZW50LVR5cGUiKSk7aWYoZClmb3IoZSBpbiBoKWlmKGhbZV0mJmhb%0AZV0udGVzdChkKSl7aS51bnNoaWZ0KGUpO2JyZWFrfWlmKGlbMF1pbiBjKWY9aVsw%0AXTtlbHNle2ZvcihlIGluIGMpe2lmKCFpWzBdfHxhLmNvbnZlcnRlcnNbZSsiICIr%0AaVswXV0pe2Y9ZTticmVha31nfHwoZz1lKX1mPWZ8fGd9cmV0dXJuIGY/KGYhPT1p%0AWzBdJiZpLnVuc2hpZnQoZiksY1tmXSk6dm9pZCAwfWZ1bmN0aW9uIHZjKGEsYixj%0ALGQpe3ZhciBlLGYsZyxoLGksaj17fSxrPWEuZGF0YVR5cGVzLnNsaWNlKCk7aWYo%0Aa1sxXSlmb3IoZyBpbiBhLmNvbnZlcnRlcnMpaltnLnRvTG93ZXJDYXNlKCldPWEu%0AY29udmVydGVyc1tnXTtmPWsuc2hpZnQoKTt3aGlsZShmKWlmKGEucmVzcG9uc2VG%0AaWVsZHNbZl0mJihjW2EucmVzcG9uc2VGaWVsZHNbZl1dPWIpLCFpJiZkJiZhLmRh%0AdGFGaWx0ZXImJihiPWEuZGF0YUZpbHRlcihiLGEuZGF0YVR5cGUpKSxpPWYsZj1r%0ALnNoaWZ0KCkpaWYoIioiPT09ZilmPWk7ZWxzZSBpZigiKiIhPT1pJiZpIT09Zil7%0AaWYoZz1qW2krIiAiK2ZdfHxqWyIqICIrZl0sIWcpZm9yKGUgaW4gailpZihoPWUu%0Ac3BsaXQoIiAiKSxoWzFdPT09ZiYmKGc9altpKyIgIitoWzBdXXx8alsiKiAiK2hb%0AMF1dKSl7Zz09PSEwP2c9altlXTpqW2VdIT09ITAmJihmPWhbMF0say51bnNoaWZ0%0AKGhbMV0pKTticmVha31pZihnIT09ITApaWYoZyYmYVsidGhyb3dzIl0pYj1nKGIp%0AO2Vsc2UgdHJ5e2I9ZyhiKX1jYXRjaChsKXtyZXR1cm57c3RhdGU6InBhcnNlcmVy%0Acm9yIixlcnJvcjpnP2w6Ik5vIGNvbnZlcnNpb24gZnJvbSAiK2krIiB0byAiK2Z9%0AfX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6Yn19bi5leHRlbmQoe2FjdGl2%0AZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOmZj%0ALHR5cGU6IkdFVCIsaXNMb2NhbDpqYy50ZXN0KGVjWzFdKSxnbG9iYWw6ITAscHJv%0AY2Vzc0RhdGE6ITAsYXN5bmM6ITAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gt%0Ad3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIsYWNjZXB0czp7Iioi%0AOnBjLHRleHQ6InRleHQvcGxhaW4iLGh0bWw6InRleHQvaHRtbCIseG1sOiJhcHBs%0AaWNhdGlvbi94bWwsIHRleHQveG1sIixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0%0AZXh0L2phdmFzY3JpcHQifSxjb250ZW50czp7eG1sOi94bWwvLGh0bWw6L2h0bWwv%0ALGpzb246L2pzb24vfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIs%0AdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25zZUpTT04ifSxjb252ZXJ0%0AZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6%0Abi5wYXJzZUpTT04sInRleHQgeG1sIjpuLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7%0AdXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtyZXR1%0Acm4gYj90Yyh0YyhhLG4uYWpheFNldHRpbmdzKSxiKTp0YyhuLmFqYXhTZXR0aW5n%0AcyxhKX0sYWpheFByZWZpbHRlcjpyYyhuYyksYWpheFRyYW5zcG9ydDpyYyhvYyks%0AYWpheDpmdW5jdGlvbihhLGIpeyJvYmplY3QiPT10eXBlb2YgYSYmKGI9YSxhPXZv%0AaWQgMCksYj1ifHx7fTt2YXIgYyxkLGUsZixnLGgsaSxqLGs9bi5hamF4U2V0dXAo%0Ae30sYiksbD1rLmNvbnRleHR8fGssbT1rLmNvbnRleHQmJihsLm5vZGVUeXBlfHxs%0ALmpxdWVyeSk/bihsKTpuLmV2ZW50LG89bi5EZWZlcnJlZCgpLHA9bi5DYWxsYmFj%0Aa3MoIm9uY2UgbWVtb3J5IikscT1rLnN0YXR1c0NvZGV8fHt9LHI9e30scz17fSx0%0APTAsdT0iY2FuY2VsZWQiLHY9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRl%0AcjpmdW5jdGlvbihhKXt2YXIgYjtpZigyPT09dCl7aWYoIWYpe2Y9e307d2hpbGUo%0AYj1pYy5leGVjKGUpKWZbYlsxXS50b0xvd2VyQ2FzZSgpXT1iWzJdfWI9ZlthLnRv%0ATG93ZXJDYXNlKCldfXJldHVybiBudWxsPT1iP251bGw6Yn0sZ2V0QWxsUmVzcG9u%0Ac2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIDI9PT10P2U6bnVsbH0sc2V0UmVx%0AdWVzdEhlYWRlcjpmdW5jdGlvbihhLGIpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTty%0AZXR1cm4gdHx8KGE9c1tjXT1zW2NdfHxhLHJbYV09YiksdGhpc30sb3ZlcnJpZGVN%0AaW1lVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gdHx8KGsubWltZVR5cGU9YSksdGhp%0Ac30sc3RhdHVzQ29kZTpmdW5jdGlvbihhKXt2YXIgYjtpZihhKWlmKDI+dClmb3Io%0AYiBpbiBhKXFbYl09W3FbYl0sYVtiXV07ZWxzZSB2LmFsd2F5cyhhW3Yuc3RhdHVz%0AXSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGEpe3ZhciBiPWF8fHU7cmV0%0AdXJuIGMmJmMuYWJvcnQoYikseCgwLGIpLHRoaXN9fTtpZihvLnByb21pc2Uodiku%0AY29tcGxldGU9cC5hZGQsdi5zdWNjZXNzPXYuZG9uZSx2LmVycm9yPXYuZmFpbCxr%0ALnVybD0oKGF8fGsudXJsfHxmYykrIiIpLnJlcGxhY2UoZ2MsIiIpLnJlcGxhY2Uo%0AbGMsZWNbMV0rIi8vIiksay50eXBlPWIubWV0aG9kfHxiLnR5cGV8fGsubWV0aG9k%0AfHxrLnR5cGUsay5kYXRhVHlwZXM9bi50cmltKGsuZGF0YVR5cGV8fCIqIikudG9M%0Ab3dlckNhc2UoKS5tYXRjaChFKXx8WyIiXSxudWxsPT1rLmNyb3NzRG9tYWluJiYo%0AaD1tYy5leGVjKGsudXJsLnRvTG93ZXJDYXNlKCkpLGsuY3Jvc3NEb21haW49ISgh%0AaHx8aFsxXT09PWVjWzFdJiZoWzJdPT09ZWNbMl0mJihoWzNdfHwoImh0dHA6Ij09%0APWhbMV0/IjgwIjoiNDQzIikpPT09KGVjWzNdfHwoImh0dHA6Ij09PWVjWzFdPyI4%0AMCI6IjQ0MyIpKSkpLGsuZGF0YSYmay5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5%0AcGVvZiBrLmRhdGEmJihrLmRhdGE9bi5wYXJhbShrLmRhdGEsay50cmFkaXRpb25h%0AbCkpLHNjKG5jLGssYix2KSwyPT09dClyZXR1cm4gdjtpPWsuZ2xvYmFsLGkmJjA9%0APT1uLmFjdGl2ZSsrJiZuLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLGsudHlw%0AZT1rLnR5cGUudG9VcHBlckNhc2UoKSxrLmhhc0NvbnRlbnQ9IWtjLnRlc3Qoay50%0AeXBlKSxkPWsudXJsLGsuaGFzQ29udGVudHx8KGsuZGF0YSYmKGQ9ay51cmwrPShk%0AYy50ZXN0KGQpPyImIjoiPyIpK2suZGF0YSxkZWxldGUgay5kYXRhKSxrLmNhY2hl%0APT09ITEmJihrLnVybD1oYy50ZXN0KGQpP2QucmVwbGFjZShoYywiJDFfPSIrY2Mr%0AKyk6ZCsoZGMudGVzdChkKT8iJiI6Ij8iKSsiXz0iK2NjKyspKSxrLmlmTW9kaWZp%0AZWQmJihuLmxhc3RNb2RpZmllZFtkXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1N%0Ab2RpZmllZC1TaW5jZSIsbi5sYXN0TW9kaWZpZWRbZF0pLG4uZXRhZ1tkXSYmdi5z%0AZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixuLmV0YWdbZF0pKSwoay5k%0AYXRhJiZrLmhhc0NvbnRlbnQmJmsuY29udGVudFR5cGUhPT0hMXx8Yi5jb250ZW50%0AVHlwZSkmJnYuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixrLmNvbnRl%0AbnRUeXBlKSx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsay5kYXRhVHlwZXNb%0AMF0mJmsuYWNjZXB0c1trLmRhdGFUeXBlc1swXV0/ay5hY2NlcHRzW2suZGF0YVR5%0AcGVzWzBdXSsoIioiIT09ay5kYXRhVHlwZXNbMF0/IiwgIitwYysiOyBxPTAuMDEi%0AOiIiKTprLmFjY2VwdHNbIioiXSk7Zm9yKGogaW4gay5oZWFkZXJzKXYuc2V0UmVx%0AdWVzdEhlYWRlcihqLGsuaGVhZGVyc1tqXSk7aWYoay5iZWZvcmVTZW5kJiYoay5i%0AZWZvcmVTZW5kLmNhbGwobCx2LGspPT09ITF8fDI9PT10KSlyZXR1cm4gdi5hYm9y%0AdCgpO3U9ImFib3J0Ijtmb3IoaiBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0%0AZToxfSl2W2pdKGtbal0pO2lmKGM9c2Mob2MsayxiLHYpKXt2LnJlYWR5U3RhdGU9%0AMSxpJiZtLnRyaWdnZXIoImFqYXhTZW5kIixbdixrXSksay5hc3luYyYmay50aW1l%0Ab3V0PjAmJihnPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2LmFib3J0KCJ0aW1lb3V0%0AIil9LGsudGltZW91dCkpO3RyeXt0PTEsYy5zZW5kKHIseCl9Y2F0Y2godyl7aWYo%0AISgyPnQpKXRocm93IHc7eCgtMSx3KX19ZWxzZSB4KC0xLCJObyBUcmFuc3BvcnQi%0AKTtmdW5jdGlvbiB4KGEsYixmLGgpe3ZhciBqLHIscyx1LHcseD1iOzIhPT10JiYo%0AdD0yLGcmJmNsZWFyVGltZW91dChnKSxjPXZvaWQgMCxlPWh8fCIiLHYucmVhZHlT%0AdGF0ZT1hPjA/NDowLGo9YT49MjAwJiYzMDA+YXx8MzA0PT09YSxmJiYodT11Yyhr%0ALHYsZikpLHU9dmMoayx1LHYsaiksaj8oay5pZk1vZGlmaWVkJiYodz12LmdldFJl%0Ac3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIiksdyYmKG4ubGFzdE1vZGlmaWVk%0AW2RdPXcpLHc9di5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpLHcmJihuLmV0YWdb%0AZF09dykpLDIwND09PWF8fCJIRUFEIj09PWsudHlwZT94PSJub2NvbnRlbnQiOjMw%0AND09PWE/eD0ibm90bW9kaWZpZWQiOih4PXUuc3RhdGUscj11LmRhdGEscz11LmVy%0Acm9yLGo9IXMpKToocz14LChhfHwheCkmJih4PSJlcnJvciIsMD5hJiYoYT0wKSkp%0ALHYuc3RhdHVzPWEsdi5zdGF0dXNUZXh0PShifHx4KSsiIixqP28ucmVzb2x2ZVdp%0AdGgobCxbcix4LHZdKTpvLnJlamVjdFdpdGgobCxbdix4LHNdKSx2LnN0YXR1c0Nv%0AZGUocSkscT12b2lkIDAsaSYmbS50cmlnZ2VyKGo/ImFqYXhTdWNjZXNzIjoiYWph%0AeEVycm9yIixbdixrLGo/cjpzXSkscC5maXJlV2l0aChsLFt2LHhdKSxpJiYobS50%0AcmlnZ2VyKCJhamF4Q29tcGxldGUiLFt2LGtdKSwtLW4uYWN0aXZlfHxuLmV2ZW50%0ALnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gdn0sZ2V0SlNPTjpmdW5jdGlv%0AbihhLGIsYyl7cmV0dXJuIG4uZ2V0KGEsYixjLCJqc29uIil9LGdldFNjcmlwdDpm%0AdW5jdGlvbihhLGIpe3JldHVybiBuLmdldChhLHZvaWQgMCxiLCJzY3JpcHQiKX19%0AKSxuLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxiKXtuW2JdPWZ1bmN0%0AaW9uKGEsYyxkLGUpe3JldHVybiBuLmlzRnVuY3Rpb24oYykmJihlPWV8fGQsZD1j%0ALGM9dm9pZCAwKSxuLmFqYXgoe3VybDphLHR5cGU6YixkYXRhVHlwZTplLGRhdGE6%0AYyxzdWNjZXNzOmR9KX19KSxuLmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3RvcCIs%0AImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNl%0AbmQiXSxmdW5jdGlvbihhLGIpe24uZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIHRo%0AaXMub24oYixhKX19KSxuLl9ldmFsVXJsPWZ1bmN0aW9uKGEpe3JldHVybiBuLmFq%0AYXgoe3VybDphLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsYXN5bmM6ITEs%0AZ2xvYmFsOiExLCJ0aHJvd3MiOiEwfSl9LG4uZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1%0AbmN0aW9uKGEpe3ZhciBiO3JldHVybiBuLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNo%0AKGZ1bmN0aW9uKGIpe24odGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxiKSl9KToo%0AdGhpc1swXSYmKGI9bihhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xv%0AbmUoITApLHRoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1sw%0AXSksYi5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RFbGVt%0AZW50Q2hpbGQpYT1hLmZpcnN0RWxlbWVudENoaWxkO3JldHVybiBhfSkuYXBwZW5k%0AKHRoaXMpKSx0aGlzKX0sd3JhcElubmVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlz%0ALmVhY2gobi5pc0Z1bmN0aW9uKGEpP2Z1bmN0aW9uKGIpe24odGhpcykud3JhcElu%0AbmVyKGEuY2FsbCh0aGlzLGIpKX06ZnVuY3Rpb24oKXt2YXIgYj1uKHRoaXMpLGM9%0AYi5jb250ZW50cygpO2MubGVuZ3RoP2Mud3JhcEFsbChhKTpiLmFwcGVuZChhKX0p%0AfSx3cmFwOmZ1bmN0aW9uKGEpe3ZhciBiPW4uaXNGdW5jdGlvbihhKTtyZXR1cm4g%0AdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe24odGhpcykud3JhcEFsbChiP2EuY2FsbCh0%0AaGlzLGMpOmEpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVu%0AdCgpLmVhY2goZnVuY3Rpb24oKXtuLm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8bih0%0AaGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9fSksbi5l%0AeHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGEpe3JldHVybiBhLm9mZnNldFdp%0AZHRoPD0wJiZhLm9mZnNldEhlaWdodDw9MH0sbi5leHByLmZpbHRlcnMudmlzaWJs%0AZT1mdW5jdGlvbihhKXtyZXR1cm4hbi5leHByLmZpbHRlcnMuaGlkZGVuKGEpfTt2%0AYXIgd2M9LyUyMC9nLHhjPS9cW1xdJC8seWM9L1xyP1xuL2csemM9L14oPzpzdWJt%0AaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLEFjPS9eKD86aW5wdXR8c2Vs%0AZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiBCYyhhLGIsYyxkKXt2YXIg%0AZTtpZihuLmlzQXJyYXkoYikpbi5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHx4Yy50%0AZXN0KGEpP2QoYSxlKTpCYyhhKyJbIisoIm9iamVjdCI9PXR5cGVvZiBlP2I6IiIp%0AKyJdIixlLGMsZCl9KTtlbHNlIGlmKGN8fCJvYmplY3QiIT09bi50eXBlKGIpKWQo%0AYSxiKTtlbHNlIGZvcihlIGluIGIpQmMoYSsiWyIrZSsiXSIsYltlXSxjLGQpfW4u%0AcGFyYW09ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9ZnVuY3Rpb24oYSxiKXti%0APW4uaXNGdW5jdGlvbihiKT9iKCk6bnVsbD09Yj8iIjpiLGRbZC5sZW5ndGhdPWVu%0AY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtp%0AZih2b2lkIDA9PT1iJiYoYj1uLmFqYXhTZXR0aW5ncyYmbi5hamF4U2V0dGluZ3Mu%0AdHJhZGl0aW9uYWwpLG4uaXNBcnJheShhKXx8YS5qcXVlcnkmJiFuLmlzUGxhaW5P%0AYmplY3QoYSkpbi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZh%0AbHVlKX0pO2Vsc2UgZm9yKGMgaW4gYSlCYyhjLGFbY10sYixlKTtyZXR1cm4gZC5q%0Ab2luKCImIikucmVwbGFjZSh3YywiKyIpfSxuLmZuLmV4dGVuZCh7c2VyaWFsaXpl%0AOmZ1bmN0aW9uKCl7cmV0dXJuIG4ucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgp%0AKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVu%0AY3Rpb24oKXt2YXIgYT1uLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gYT9u%0ALm1ha2VBcnJheShhKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGE9dGhp%0Acy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFuKHRoaXMpLmlzKCI6ZGlzYWJsZWQi%0AKSYmQWMudGVzdCh0aGlzLm5vZGVOYW1lKSYmIXpjLnRlc3QoYSkmJih0aGlzLmNo%0AZWNrZWR8fCFULnRlc3QoYSkpfSkubWFwKGZ1bmN0aW9uKGEsYil7dmFyIGM9bih0%0AaGlzKS52YWwoKTtyZXR1cm4gbnVsbD09Yz9udWxsOm4uaXNBcnJheShjKT9uLm1h%0AcChjLGZ1bmN0aW9uKGEpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxh%0AY2UoeWMsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKHlj%0ALCJcclxuIil9fSkuZ2V0KCl9fSksbi5hamF4U2V0dGluZ3MueGhyPWZ1bmN0aW9u%0AKCl7dHJ5e3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9Y2F0Y2goYSl7fX07dmFy%0AIENjPTAsRGM9e30sRWM9ezA6MjAwLDEyMjM6MjA0fSxGYz1uLmFqYXhTZXR0aW5n%0Acy54aHIoKTthLkFjdGl2ZVhPYmplY3QmJm4oYSkub24oInVubG9hZCIsZnVuY3Rp%0Ab24oKXtmb3IodmFyIGEgaW4gRGMpRGNbYV0oKX0pLGsuY29ycz0hIUZjJiYid2l0%0AaENyZWRlbnRpYWxzImluIEZjLGsuYWpheD1GYz0hIUZjLG4uYWpheFRyYW5zcG9y%0AdChmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gay5jb3JzfHxGYyYmIWEuY3Jvc3NE%0Ab21haW4/e3NlbmQ6ZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEueGhyKCksZz0rK0Nj%0AO2lmKGYub3BlbihhLnR5cGUsYS51cmwsYS5hc3luYyxhLnVzZXJuYW1lLGEucGFz%0Ac3dvcmQpLGEueGhyRmllbGRzKWZvcihlIGluIGEueGhyRmllbGRzKWZbZV09YS54%0AaHJGaWVsZHNbZV07YS5taW1lVHlwZSYmZi5vdmVycmlkZU1pbWVUeXBlJiZmLm92%0AZXJyaWRlTWltZVR5cGUoYS5taW1lVHlwZSksYS5jcm9zc0RvbWFpbnx8Y1siWC1S%0AZXF1ZXN0ZWQtV2l0aCJdfHwoY1siWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRw%0AUmVxdWVzdCIpO2ZvcihlIGluIGMpZi5zZXRSZXF1ZXN0SGVhZGVyKGUsY1tlXSk7%0AYj1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXtiJiYoZGVsZXRlIERjW2dd%0ALGI9Zi5vbmxvYWQ9Zi5vbmVycm9yPW51bGwsImFib3J0Ij09PWE/Zi5hYm9ydCgp%0AOiJlcnJvciI9PT1hP2QoZi5zdGF0dXMsZi5zdGF0dXNUZXh0KTpkKEVjW2Yuc3Rh%0AdHVzXXx8Zi5zdGF0dXMsZi5zdGF0dXNUZXh0LCJzdHJpbmciPT10eXBlb2YgZi5y%0AZXNwb25zZVRleHQ/e3RleHQ6Zi5yZXNwb25zZVRleHR9OnZvaWQgMCxmLmdldEFs%0AbFJlc3BvbnNlSGVhZGVycygpKSl9fSxmLm9ubG9hZD1iKCksZi5vbmVycm9yPWIo%0AImVycm9yIiksYj1EY1tnXT1iKCJhYm9ydCIpO3RyeXtmLnNlbmQoYS5oYXNDb250%0AZW50JiZhLmRhdGF8fG51bGwpfWNhdGNoKGgpe2lmKGIpdGhyb3cgaH19LGFib3J0%0AOmZ1bmN0aW9uKCl7YiYmYigpfX06dm9pZCAwfSksbi5hamF4U2V0dXAoe2FjY2Vw%0AdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2Ny%0AaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFz%0AY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi8oPzpqYXZhfGVjbWEpc2NyaXB0L30s%0AY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihhKXtyZXR1cm4gbi5n%0AbG9iYWxFdmFsKGEpLGF9fX0pLG4uYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5j%0AdGlvbihhKXt2b2lkIDA9PT1hLmNhY2hlJiYoYS5jYWNoZT0hMSksYS5jcm9zc0Rv%0AbWFpbiYmKGEudHlwZT0iR0VUIil9KSxuLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIs%0AZnVuY3Rpb24oYSl7aWYoYS5jcm9zc0RvbWFpbil7dmFyIGIsYztyZXR1cm57c2Vu%0AZDpmdW5jdGlvbihkLGUpe2I9bigiPHNjcmlwdD4iKS5wcm9wKHthc3luYzohMCxj%0AaGFyc2V0OmEuc2NyaXB0Q2hhcnNldCxzcmM6YS51cmx9KS5vbigibG9hZCBlcnJv%0AciIsYz1mdW5jdGlvbihhKXtiLnJlbW92ZSgpLGM9bnVsbCxhJiZlKCJlcnJvciI9%0APT1hLnR5cGU/NDA0OjIwMCxhLnR5cGUpfSksbC5oZWFkLmFwcGVuZENoaWxkKGJb%0AMF0pfSxhYm9ydDpmdW5jdGlvbigpe2MmJmMoKX19fX0pO3ZhciBHYz1bXSxIYz0v%0AKD0pXD8oPz0mfCQpfFw/XD8vO24uYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2si%0ALGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgYT1HYy5wb3AoKXx8bi5leHBh%0AbmRvKyJfIitjYysrO3JldHVybiB0aGlzW2FdPSEwLGF9fSksbi5hamF4UHJlZmls%0AdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihiLGMsZCl7dmFyIGUsZixnLGg9Yi5q%0Ac29ucCE9PSExJiYoSGMudGVzdChiLnVybCk/InVybCI6InN0cmluZyI9PXR5cGVv%0AZiBiLmRhdGEmJiEoYi5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0%0AaW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZIYy50ZXN0KGIuZGF0YSkmJiJk%0AYXRhIik7cmV0dXJuIGh8fCJqc29ucCI9PT1iLmRhdGFUeXBlc1swXT8oZT1iLmpz%0Ab25wQ2FsbGJhY2s9bi5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29u%0AcENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGg/YltoXT1iW2hdLnJlcGxhY2Uo%0ASGMsIiQxIitlKTpiLmpzb25wIT09ITEmJihiLnVybCs9KGRjLnRlc3QoYi51cmwp%0APyImIjoiPyIpK2IuanNvbnArIj0iK2UpLGIuY29udmVydGVyc1sic2NyaXB0IGpz%0Ab24iXT1mdW5jdGlvbigpe3JldHVybiBnfHxuLmVycm9yKGUrIiB3YXMgbm90IGNh%0AbGxlZCIpLGdbMF19LGIuZGF0YVR5cGVzWzBdPSJqc29uIixmPWFbZV0sYVtlXT1m%0AdW5jdGlvbigpe2c9YXJndW1lbnRzfSxkLmFsd2F5cyhmdW5jdGlvbigpe2FbZV09%0AZixiW2VdJiYoYi5qc29ucENhbGxiYWNrPWMuanNvbnBDYWxsYmFjayxHYy5wdXNo%0AKGUpKSxnJiZuLmlzRnVuY3Rpb24oZikmJmYoZ1swXSksZz1mPXZvaWQgMH0pLCJz%0AY3JpcHQiKTp2b2lkIDB9KSxuLnBhcnNlSFRNTD1mdW5jdGlvbihhLGIsYyl7aWYo%0AIWF8fCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gbnVsbDsiYm9vbGVhbiI9PXR5%0AcGVvZiBiJiYoYz1iLGI9ITEpLGI9Ynx8bDt2YXIgZD12LmV4ZWMoYSksZT0hYyYm%0AW107cmV0dXJuIGQ/W2IuY3JlYXRlRWxlbWVudChkWzFdKV06KGQ9bi5idWlsZEZy%0AYWdtZW50KFthXSxiLGUpLGUmJmUubGVuZ3RoJiZuKGUpLnJlbW92ZSgpLG4ubWVy%0AZ2UoW10sZC5jaGlsZE5vZGVzKSl9O3ZhciBJYz1uLmZuLmxvYWQ7bi5mbi5sb2Fk%0APWZ1bmN0aW9uKGEsYixjKXtpZigic3RyaW5nIiE9dHlwZW9mIGEmJkljKXJldHVy%0AbiBJYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGQsZSxmLGc9dGhpcyxoPWEu%0AaW5kZXhPZigiICIpO3JldHVybiBoPj0wJiYoZD1uLnRyaW0oYS5zbGljZShoKSks%0AYT1hLnNsaWNlKDAsaCkpLG4uaXNGdW5jdGlvbihiKT8oYz1iLGI9dm9pZCAwKTpi%0AJiYib2JqZWN0Ij09dHlwZW9mIGImJihlPSJQT1NUIiksZy5sZW5ndGg+MCYmbi5h%0AamF4KHt1cmw6YSx0eXBlOmUsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yn0pLmRvbmUo%0AZnVuY3Rpb24oYSl7Zj1hcmd1bWVudHMsZy5odG1sKGQ/bigiPGRpdj4iKS5hcHBl%0AbmQobi5wYXJzZUhUTUwoYSkpLmZpbmQoZCk6YSl9KS5jb21wbGV0ZShjJiZmdW5j%0AdGlvbihhLGIpe2cuZWFjaChjLGZ8fFthLnJlc3BvbnNlVGV4dCxiLGFdKX0pLHRo%0AaXN9LG4uZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGEpe3JldHVybiBu%0ALmdyZXAobi50aW1lcnMsZnVuY3Rpb24oYil7cmV0dXJuIGE9PT1iLmVsZW19KS5s%0AZW5ndGh9O3ZhciBKYz1hLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtmdW5jdGlv%0AbiBLYyhhKXtyZXR1cm4gbi5pc1dpbmRvdyhhKT9hOjk9PT1hLm5vZGVUeXBlJiZh%0ALmRlZmF1bHRWaWV3fW4ub2Zmc2V0PXtzZXRPZmZzZXQ6ZnVuY3Rpb24oYSxiLGMp%0Ae3ZhciBkLGUsZixnLGgsaSxqLGs9bi5jc3MoYSwicG9zaXRpb24iKSxsPW4oYSks%0AbT17fTsic3RhdGljIj09PWsmJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIp%0ALGg9bC5vZmZzZXQoKSxmPW4uY3NzKGEsInRvcCIpLGk9bi5jc3MoYSwibGVmdCIp%0ALGo9KCJhYnNvbHV0ZSI9PT1rfHwiZml4ZWQiPT09aykmJihmK2kpLmluZGV4T2Yo%0AImF1dG8iKT4tMSxqPyhkPWwucG9zaXRpb24oKSxnPWQudG9wLGU9ZC5sZWZ0KToo%0AZz1wYXJzZUZsb2F0KGYpfHwwLGU9cGFyc2VGbG9hdChpKXx8MCksbi5pc0Z1bmN0%0AaW9uKGIpJiYoYj1iLmNhbGwoYSxjLGgpKSxudWxsIT1iLnRvcCYmKG0udG9wPWIu%0AdG9wLWgudG9wK2cpLG51bGwhPWIubGVmdCYmKG0ubGVmdD1iLmxlZnQtaC5sZWZ0%0AK2UpLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLG0pOmwuY3NzKG0pfX0sbi5m%0Abi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3Ro%0AKXJldHVybiB2b2lkIDA9PT1hP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe24u%0Ab2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTt2YXIgYixjLGQ9dGhpc1swXSxl%0APXt0b3A6MCxsZWZ0OjB9LGY9ZCYmZC5vd25lckRvY3VtZW50O2lmKGYpcmV0dXJu%0AIGI9Zi5kb2N1bWVudEVsZW1lbnQsbi5jb250YWlucyhiLGQpPyh0eXBlb2YgZC5n%0AZXRCb3VuZGluZ0NsaWVudFJlY3QhPT1VJiYoZT1kLmdldEJvdW5kaW5nQ2xpZW50%0AUmVjdCgpKSxjPUtjKGYpLHt0b3A6ZS50b3ArYy5wYWdlWU9mZnNldC1iLmNsaWVu%0AdFRvcCxsZWZ0OmUubGVmdCtjLnBhZ2VYT2Zmc2V0LWIuY2xpZW50TGVmdH0pOmV9%0ALHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGEsYixjPXRoaXNb%0AMF0sZD17dG9wOjAsbGVmdDowfTtyZXR1cm4iZml4ZWQiPT09bi5jc3MoYywicG9z%0AaXRpb24iKT9iPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6KGE9dGhpcy5vZmZz%0AZXRQYXJlbnQoKSxiPXRoaXMub2Zmc2V0KCksbi5ub2RlTmFtZShhWzBdLCJodG1s%0AIil8fChkPWEub2Zmc2V0KCkpLGQudG9wKz1uLmNzcyhhWzBdLCJib3JkZXJUb3BX%0AaWR0aCIsITApLGQubGVmdCs9bi5jc3MoYVswXSwiYm9yZGVyTGVmdFdpZHRoIiwh%0AMCkpLHt0b3A6Yi50b3AtZC50b3Atbi5jc3MoYywibWFyZ2luVG9wIiwhMCksbGVm%0AdDpiLmxlZnQtZC5sZWZ0LW4uY3NzKGMsIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZz%0AZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2%0AYXIgYT10aGlzLm9mZnNldFBhcmVudHx8SmM7d2hpbGUoYSYmIW4ubm9kZU5hbWUo%0AYSwiaHRtbCIpJiYic3RhdGljIj09PW4uY3NzKGEsInBvc2l0aW9uIikpYT1hLm9m%0AZnNldFBhcmVudDtyZXR1cm4gYXx8SmN9KX19KSxuLmVhY2goe3Njcm9sbExlZnQ6%0AInBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24o%0AYixjKXt2YXIgZD0icGFnZVlPZmZzZXQiPT09YztuLmZuW2JdPWZ1bmN0aW9uKGUp%0Ae3JldHVybiBKKHRoaXMsZnVuY3Rpb24oYixlLGYpe3ZhciBnPUtjKGIpO3JldHVy%0AbiB2b2lkIDA9PT1mP2c/Z1tjXTpiW2VdOnZvaWQoZz9nLnNjcm9sbFRvKGQ/YS5w%0AYWdlWE9mZnNldDpmLGQ/ZjphLnBhZ2VZT2Zmc2V0KTpiW2VdPWYpfSxiLGUsYXJn%0AdW1lbnRzLmxlbmd0aCxudWxsKX19KSxuLmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVu%0AY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2JdPXliKGsucGl4ZWxQb3NpdGlvbixmdW5j%0AdGlvbihhLGMpe3JldHVybiBjPyhjPXhiKGEsYiksdmIudGVzdChjKT9uKGEpLnBv%0Ac2l0aW9uKClbYl0rInB4IjpjKTp2b2lkIDB9KX0pLG4uZWFjaCh7SGVpZ2h0OiJo%0AZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGEsYil7bi5lYWNoKHtwYWRk%0AaW5nOiJpbm5lciIrYSxjb250ZW50OmIsIiI6Im91dGVyIithfSxmdW5jdGlvbihj%0ALGQpe24uZm5bZF09ZnVuY3Rpb24oZCxlKXt2YXIgZj1hcmd1bWVudHMubGVuZ3Ro%0AJiYoY3x8ImJvb2xlYW4iIT10eXBlb2YgZCksZz1jfHwoZD09PSEwfHxlPT09ITA/%0AIm1hcmdpbiI6ImJvcmRlciIpO3JldHVybiBKKHRoaXMsZnVuY3Rpb24oYixjLGQp%0Ae3ZhciBlO3JldHVybiBuLmlzV2luZG93KGIpP2IuZG9jdW1lbnQuZG9jdW1lbnRF%0AbGVtZW50WyJjbGllbnQiK2FdOjk9PT1iLm5vZGVUeXBlPyhlPWIuZG9jdW1lbnRF%0AbGVtZW50LE1hdGgubWF4KGIuYm9keVsic2Nyb2xsIithXSxlWyJzY3JvbGwiK2Fd%0ALGIuYm9keVsib2Zmc2V0IithXSxlWyJvZmZzZXQiK2FdLGVbImNsaWVudCIrYV0p%0AKTp2b2lkIDA9PT1kP24uY3NzKGIsYyxnKTpuLnN0eWxlKGIsYyxkLGcpfSxiLGY/%0AZDp2b2lkIDAsZixudWxsKX19KX0pLG4uZm4uc2l6ZT1mdW5jdGlvbigpe3JldHVy%0AbiB0aGlzLmxlbmd0aH0sbi5mbi5hbmRTZWxmPW4uZm4uYWRkQmFjaywiZnVuY3Rp%0Ab24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIs%0AW10sZnVuY3Rpb24oKXtyZXR1cm4gbn0pO3ZhciBMYz1hLmpRdWVyeSxNYz1hLiQ7%0AcmV0dXJuIG4ubm9Db25mbGljdD1mdW5jdGlvbihiKXtyZXR1cm4gYS4kPT09biYm%0AKGEuJD1NYyksYiYmYS5qUXVlcnk9PT1uJiYoYS5qUXVlcnk9TGMpLG59LHR5cGVv%0AZiBiPT09VSYmKGEualF1ZXJ5PWEuJD1uKSxufSk7Ci8vIyBzb3VyY2VNYXBwaW5n%0AVVJMPWpxdWVyeS5taW4ubWFwPC9zY3JpcHQ+DQogICAgICA8IS0tIGQzLnNsaWRl%0Aci5qcyBsaWJyYXJ5IC0tPg0KICAgICAgPHNjcmlwdD4vKg0KICAgIEQzLmpzIFNs%0AaWRlcg0KICAgIEluc3BpcmVkIGJ5IGpRdWVyeSBVSSBTbGlkZXINCiAgICBDb3B5%0AcmlnaHQgKGMpIDIwMTMsIEJqb3JuIFNhbmR2aWsgLSBodHRwOi8vYmxvZy50aGVt%0AYXRpY21hcHBpbmcub3JnDQogICAgQlNEIGxpY2Vuc2U6IGh0dHA6Ly9vcGVuc291%0AcmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UNCiovDQooZnVuY3Rpb24gKHJv%0Ab3QsIGZhY3RvcnkpIHsNCiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlv%0AbicgJiYgZGVmaW5lLmFtZCkgew0KICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4g%0AYW5vbnltb3VzIG1vZHVsZS4NCiAgICBkZWZpbmUoWydkMyddLCBmYWN0b3J5KTsN%0ACiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHsNCiAg%0AICBpZiAocHJvY2Vzcy5icm93c2VyKSB7DQogICAgICAvLyBCcm93c2VyaWZ5LiBJ%0AbXBvcnQgY3NzIHRvbyB1c2luZyBjc3NpZnkuDQogICAgICByZXF1aXJlKCcuL2Qz%0ALnNsaWRlci5jc3MnKTsNCiAgICB9DQogICAgLy8gTm9kZS4gRG9lcyBub3Qgd29y%0AayB3aXRoIHN0cmljdCBDb21tb25KUywgYnV0DQogICAgLy8gb25seSBDb21tb25K%0AUy1saWtlIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMs%0ADQogICAgLy8gbGlrZSBOb2RlLg0KICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9y%0AeShyZXF1aXJlKCdkMycpKTsNCiAgfSBlbHNlIHsNCiAgICAvLyBCcm93c2VyIGds%0Ab2JhbHMgKHJvb3QgaXMgd2luZG93KQ0KICAgIHJvb3QuZDMuc2xpZGVyID0gZmFj%0AdG9yeShyb290LmQzKTsNCiAgfQ0KfSh0aGlzLCBmdW5jdGlvbiAoZDMpIHsNCnJl%0AdHVybiBmdW5jdGlvbiBtb2R1bGUoKSB7DQogICJ1c2Ugc3RyaWN0IjsNCg0KICAv%0ALyBQdWJsaWMgdmFyaWFibGVzIHdpZHRoIGRlZmF1bHQgc2V0dGluZ3MNCiAgdmFy%0AIG1pbiA9IDAsDQogICAgICBtYXggPSAxMDAsDQogICAgICBzdGVwID0gMC4wMSwN%0ACiAgICAgIGFuaW1hdGUgPSB0cnVlLA0KICAgICAgb3JpZW50YXRpb24gPSAiaG9y%0AaXpvbnRhbCIsDQogICAgICBheGlzID0gZmFsc2UsDQogICAgICBtYXJnaW4gPSA1%0AMCwNCiAgICAgIHZhbHVlLA0KICAgICAgYWN0aXZlID0gMSwNCiAgICAgIHNjYWxl%0ALA0KICAgICAgaW50ZXJ2YWw9MTsNCg0KICAvLyBQcml2YXRlIHZhcmlhYmxlcw0K%0AICB2YXIgYXhpc1NjYWxlLA0KICAgICAgZGlzcGF0Y2ggPSBkMy5kaXNwYXRjaCgi%0Ac2xpZGUiLCAic2xpZGVlbmQiKSwNCiAgICAgIGZvcm1hdFBlcmNlbnQgPSBkMy5m%0Ab3JtYXQoIi4yJSIpLA0KICAgICAgdGlja0Zvcm1hdCA9IGQzLmZvcm1hdCgiLjAi%0AKSwNCiAgICAgIGhhbmRsZTEsDQogICAgICBoYW5kbGUyID0gbnVsbCwNCiAgICAg%0AIHNsaWRlckxlbmd0aDsNCg0KICBmdW5jdGlvbiBzbGlkZXIoc2VsZWN0aW9uKSB7%0ADQogICAgc2VsZWN0aW9uLmVhY2goZnVuY3Rpb24oKSB7DQoNCiAgICAgIC8vIENy%0AZWF0ZSBzY2FsZSBpZiBub3QgZGVmaW5lZCBieSB1c2VyDQogICAgICBpZiAoIXNj%0AYWxlKSB7DQogICAgICAgIHNjYWxlID0gZDMuc2NhbGUubGluZWFyKCkuZG9tYWlu%0AKFttaW4sIG1heF0pOw0KICAgICAgfQ0KDQogICAgICAvLyBTdGFydCB2YWx1ZQ0K%0AICAgICAgdmFsdWUgPSB2YWx1ZSB8fCBzY2FsZS5kb21haW4oKVswXTsNCg0KICAg%0AICAgLy8gRElWIGNvbnRhaW5lcg0KICAgICAgdmFyIGRpdiA9IGQzLnNlbGVjdCh0%0AaGlzKS5jbGFzc2VkKCJkMy1zbGlkZXIgZDMtc2xpZGVyLSIgKyBvcmllbnRhdGlv%0AbiwgdHJ1ZSk7DQogICAgICANCiAgICAgIHZhciBkcmFnID0gZDMuYmVoYXZpb3Iu%0AZHJhZygpOw0KICAgICAgZHJhZy5vbignZHJhZ2VuZCcsIGZ1bmN0aW9uICgpIHsN%0ACiAgICAgICAgZGlzcGF0Y2guc2xpZGVlbmQoZDMuZXZlbnQsIHZhbHVlKTsNCiAg%0AICAgIH0pDQoNCiAgICAgIC8vIFNsaWRlciBoYW5kbGUNCiAgICAgIC8vaWYgcmFu%0AZ2Ugc2xpZGVyLCBjcmVhdGUgdHdvDQogICAgICB2YXIgZGl2UmFuZ2U7DQoNCiAg%0AICAgIGlmICggdmFsdWUubGVuZ3RoID09IDIgKSB7DQogICAgICAgIGhhbmRsZTEg%0APSBkaXYuYXBwZW5kKCJhIikNCiAgICAgICAgICAuY2xhc3NlZCgiZDMtc2xpZGVy%0ALWhhbmRsZSIsIHRydWUpDQogICAgICAgICAgLmF0dHIoInhsaW5rOmhyZWYiLCAi%0AIyIpDQogICAgICAgICAgLmF0dHIoJ2lkJywgImhhbmRsZS1vbmUiKQ0KICAgICAg%0AICAgIC5vbigiY2xpY2siLCBzdG9wUHJvcGFnYXRpb24pDQogICAgICAgICAgLmNh%0AbGwoZHJhZyk7DQogICAgICAgIGhhbmRsZTIgPSBkaXYuYXBwZW5kKCJhIikNCiAg%0AICAgICAgICAuY2xhc3NlZCgiZDMtc2xpZGVyLWhhbmRsZSIsIHRydWUpDQogICAg%0AICAgICAgLmF0dHIoJ2lkJywgImhhbmRsZS10d28iKQ0KICAgICAgICAgIC5hdHRy%0AKCJ4bGluazpocmVmIiwgIiMiKQ0KICAgICAgICAgIC5vbigiY2xpY2siLCBzdG9w%0AUHJvcGFnYXRpb24pDQogICAgICAgICAgLmNhbGwoZHJhZyk7DQogICAgICB9IGVs%0Ac2Ugew0KICAgICAgICBoYW5kbGUxID0gZGl2LmFwcGVuZCgiYSIpDQogICAgICAg%0AICAgLmNsYXNzZWQoImQzLXNsaWRlci1oYW5kbGUiLCB0cnVlKQ0KICAgICAgICAg%0AIC5hdHRyKCJ4bGluazpocmVmIiwgIiMiKQ0KICAgICAgICAgIC5hdHRyKCdpZCcs%0AICJoYW5kbGUtb25lIikNCiAgICAgICAgICAub24oImNsaWNrIiwgc3RvcFByb3Bh%0AZ2F0aW9uKQ0KICAgICAgICAgIC5jYWxsKGRyYWcpOw0KICAgICAgfQ0KICAgICAg%0ALy8gSG9yaXpvbnRhbCBzbGlkZXINCiAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0g%0AImhvcml6b250YWwiKSB7DQoNCiAgICAgICAgZGl2Lm9uKCJjbGljayIsIG9uQ2xp%0AY2tIb3Jpem9udGFsKTsNCiAgICAgICAgDQogICAgICAgIGlmICggdmFsdWUubGVu%0AZ3RoID09IDIgKSB7DQogICAgICAgICAgZGl2UmFuZ2UgPSBkMy5zZWxlY3QodGhp%0AcykuYXBwZW5kKCdkaXYnKS5jbGFzc2VkKCJkMy1zbGlkZXItcmFuZ2UiLCB0cnVl%0AKTsNCg0KICAgICAgICAgIGhhbmRsZTEuc3R5bGUoImxlZnQiLCBmb3JtYXRQZXJj%0AZW50KHNjYWxlKHZhbHVlWyAwIF0pKSk7DQogICAgICAgICAgZGl2UmFuZ2Uuc3R5%0AbGUoImxlZnQiLCBmb3JtYXRQZXJjZW50KHNjYWxlKHZhbHVlWyAwIF0pKSk7DQog%0AICAgICAgICAgZHJhZy5vbigiZHJhZyIsIG9uRHJhZ0hvcml6b250YWwpOw0KDQog%0AICAgICAgICAgdmFyIHdpZHRoID0gMTAwIC0gcGFyc2VGbG9hdChmb3JtYXRQZXJj%0AZW50KHNjYWxlKHZhbHVlWyAxIF0pKSk7DQogICAgICAgICAgaGFuZGxlMi5zdHls%0AZSgibGVmdCIsIGZvcm1hdFBlcmNlbnQoc2NhbGUodmFsdWVbIDEgXSkpKTsNCiAg%0AICAgICAgICBkaXZSYW5nZS5zdHlsZSgicmlnaHQiLCB3aWR0aCsiJSIpOw0KICAg%0AICAgICAgIGRyYWcub24oImRyYWciLCBvbkRyYWdIb3Jpem9udGFsKTsNCg0KICAg%0AICAgICB9IGVsc2Ugew0KICAgICAgICAgIGhhbmRsZTEuc3R5bGUoImxlZnQiLCBm%0Ab3JtYXRQZXJjZW50KHNjYWxlKHZhbHVlKSkpOw0KICAgICAgICAgIGRyYWcub24o%0AImRyYWciLCBvbkRyYWdIb3Jpem9udGFsKTsNCiAgICAgICAgfQ0KICAgICAgICAN%0ACg0KICAgICAgICBzbGlkZXJMZW5ndGggPSBwYXJzZUludChkaXYuc3R5bGUoIndp%0AZHRoIiksIDEwKTsNCiAgICAgICAgaGFuZGxlMS5zdHlsZSgnd2lkdGgnLCAoKHNj%0AYWxlKGludGVydmFsK21pbikqc2xpZGVyTGVuZ3RoKSkrJ3B4JykNCg0KICAgICAg%0AfSBlbHNlIHsgLy8gVmVydGljYWwNCg0KICAgICAgICBkaXYub24oImNsaWNrIiwg%0Ab25DbGlja1ZlcnRpY2FsKTsNCiAgICAgICAgZHJhZy5vbigiZHJhZyIsIG9uRHJh%0AZ1ZlcnRpY2FsKTsNCiAgICAgICAgaWYgKCB2YWx1ZS5sZW5ndGggPT0gMiApIHsN%0ACiAgICAgICAgICBkaXZSYW5nZSA9IGQzLnNlbGVjdCh0aGlzKS5hcHBlbmQoJ2Rp%0AdicpLmNsYXNzZWQoImQzLXNsaWRlci1yYW5nZS12ZXJ0aWNhbCIsIHRydWUpOw0K%0ADQogICAgICAgICAgaGFuZGxlMS5zdHlsZSgiYm90dG9tIiwgZm9ybWF0UGVyY2Vu%0AdChzY2FsZSh2YWx1ZVsgMCBdKSkpOw0KICAgICAgICAgIGRpdlJhbmdlLnN0eWxl%0AKCJib3R0b20iLCBmb3JtYXRQZXJjZW50KHNjYWxlKHZhbHVlWyAwIF0pKSk7DQog%0AICAgICAgICAgZHJhZy5vbigiZHJhZyIsIG9uRHJhZ1ZlcnRpY2FsKTsNCg0KICAg%0AICAgICAgIHZhciB0b3AgPSAxMDAgLSBwYXJzZUZsb2F0KGZvcm1hdFBlcmNlbnQo%0Ac2NhbGUodmFsdWVbIDEgXSkpKTsNCiAgICAgICAgICBoYW5kbGUyLnN0eWxlKCJi%0Ab3R0b20iLCBmb3JtYXRQZXJjZW50KHNjYWxlKHZhbHVlWyAxIF0pKSk7DQogICAg%0AICAgICAgZGl2UmFuZ2Uuc3R5bGUoInRvcCIsIHRvcCsiJSIpOw0KICAgICAgICAg%0AIGRyYWcub24oImRyYWciLCBvbkRyYWdWZXJ0aWNhbCk7DQoNCiAgICAgICAgfSBl%0AbHNlIHsNCiAgICAgICAgICBoYW5kbGUxLnN0eWxlKCJib3R0b20iLCBmb3JtYXRQ%0AZXJjZW50KHNjYWxlKHZhbHVlKSkpOw0KICAgICAgICAgIGRyYWcub24oImRyYWci%0ALCBvbkRyYWdWZXJ0aWNhbCk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAg%0AIHNsaWRlckxlbmd0aCA9IHBhcnNlSW50KGRpdi5zdHlsZSgiaGVpZ2h0IiksIDEw%0AKTsNCg0KICAgICAgfQ0KICAgICAgDQogICAgICBpZiAoYXhpcykgew0KICAgICAg%0AICBjcmVhdGVBeGlzKGRpdik7DQogICAgICB9DQoNCg0KICAgICAgZnVuY3Rpb24g%0AY3JlYXRlQXhpcyhkb20pIHsNCg0KICAgICAgICAvLyBDcmVhdGUgYXhpcyBpZiBu%0Ab3QgZGVmaW5lZCBieSB1c2VyDQogICAgICAgIGlmICh0eXBlb2YgYXhpcyA9PT0g%0AImJvb2xlYW4iKSB7DQoNCiAgICAgICAgICBheGlzID0gZDMuc3ZnLmF4aXMoKQ0K%0AICAgICAgICAgICAgICAudGlja3MoTWF0aC5yb3VuZChzbGlkZXJMZW5ndGggLyAx%0AMDApKQ0KICAgICAgICAgICAgICAudGlja0Zvcm1hdCh0aWNrRm9ybWF0KQ0KICAg%0AICAgICAgICAgICAub3JpZW50KChvcmllbnRhdGlvbiA9PT0gImhvcml6b250YWwi%0AKSA/ICJib3R0b20iIDogICJyaWdodCIpOw0KDQogICAgICAgIH0NCg0KICAgICAg%0AICAvLyBDb3B5IHNsaWRlciBzY2FsZSB0byBtb3ZlIGZyb20gcGVyY2VudGFnZXMg%0AdG8gcGl4ZWxzDQogICAgICAgIGF4aXNTY2FsZSA9IHNjYWxlLmNvcHkoKS5yYW5n%0AZShbMCwgc2xpZGVyTGVuZ3RoXSk7DQogICAgICAgICAgYXhpcy5zY2FsZShheGlz%0AU2NhbGUpOw0KDQogICAgICAgICAgLy8gQ3JlYXRlIFNWRyBheGlzIGNvbnRhaW5l%0Acg0KICAgICAgICB2YXIgc3ZnID0gZG9tLmFwcGVuZCgic3ZnIikNCiAgICAgICAg%0AICAgIC5jbGFzc2VkKCJkMy1zbGlkZXItYXhpcyBkMy1zbGlkZXItYXhpcy0iICsg%0AYXhpcy5vcmllbnQoKSwgdHJ1ZSkNCiAgICAgICAgICAgIC5vbigiY2xpY2siLCBz%0AdG9wUHJvcGFnYXRpb24pOw0KDQogICAgICAgIHZhciBnID0gc3ZnLmFwcGVuZCgi%0AZyIpOw0KDQogICAgICAgIC8vIEhvcml6b250YWwgYXhpcw0KICAgICAgICBpZiAo%0Ab3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIikgew0KDQogICAgICAgICAgc3Zn%0ALnN0eWxlKCJtYXJnaW4tbGVmdCIsIC1tYXJnaW4gKyAicHgiKTsNCg0KICAgICAg%0AICAgIHN2Zy5hdHRyKHsNCiAgICAgICAgICAgIHdpZHRoOiBzbGlkZXJMZW5ndGgg%0AKyBtYXJnaW4gKiAyLA0KICAgICAgICAgICAgaGVpZ2h0OiBtYXJnaW4NCiAgICAg%0AICAgICB9KTsNCg0KICAgICAgICAgIGlmIChheGlzLm9yaWVudCgpID09PSAidG9w%0AIikgew0KICAgICAgICAgICAgc3ZnLnN0eWxlKCJ0b3AiLCAtbWFyZ2luICsgInB4%0AIik7DQogICAgICAgICAgICBnLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUo%0AIiArIG1hcmdpbiArICIsIiArIG1hcmdpbiArICIpIik7DQogICAgICAgICAgfSBl%0AbHNlIHsgLy8gYm90dG9tDQogICAgICAgICAgICBnLmF0dHIoInRyYW5zZm9ybSIs%0AICJ0cmFuc2xhdGUoIiArIG1hcmdpbiArICIsMCkiKTsNCiAgICAgICAgICB9DQoN%0ACiAgICAgICAgfSBlbHNlIHsgLy8gVmVydGljYWwNCg0KICAgICAgICAgIHN2Zy5z%0AdHlsZSgidG9wIiwgLW1hcmdpbiArICJweCIpOw0KDQogICAgICAgICAgc3ZnLmF0%0AdHIoew0KICAgICAgICAgICAgd2lkdGg6IG1hcmdpbiwNCiAgICAgICAgICAgIGhl%0AaWdodDogc2xpZGVyTGVuZ3RoICsgbWFyZ2luICogMg0KICAgICAgICAgIH0pOw0K%0ADQogICAgICAgICAgaWYgKGF4aXMub3JpZW50KCkgPT09ICJsZWZ0Iikgew0KICAg%0AICAgICAgICAgc3ZnLnN0eWxlKCJsZWZ0IiwgLW1hcmdpbiArICJweCIpOw0KICAg%0AICAgICAgICAgZy5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKCIgKyBtYXJn%0AaW4gKyAiLCIgKyBtYXJnaW4gKyAiKSIpOw0KICAgICAgICAgIH0gZWxzZSB7IC8v%0AIHJpZ2h0ICAgICAgICAgIA0KICAgICAgICAgICAgZy5hdHRyKCJ0cmFuc2Zvcm0i%0ALCAidHJhbnNsYXRlKCIgKyAwICsgIiwiICsgbWFyZ2luICsgIikiKTsNCiAgICAg%0AICAgICB9DQoNCiAgICAgICAgfQ0KDQogICAgICAgIGcuY2FsbChheGlzKTsNCg0K%0AICAgICAgfQ0KDQogICAgICBmdW5jdGlvbiBvbkNsaWNrSG9yaXpvbnRhbCgpIHsN%0ACiAgICAgICAgaWYgKCF2YWx1ZS5sZW5ndGgpIHsNCiAgICAgICAgICB2YXIgcG9z%0AID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2xpZGVyTGVuZ3RoLCBkMy5ldmVudC5v%0AZmZzZXRYIHx8IGQzLmV2ZW50LmxheWVyWCkpOw0KICAgICAgICAgIG1vdmVIYW5k%0AbGUoc3RlcFZhbHVlKHNjYWxlLmludmVydChwb3MgLyBzbGlkZXJMZW5ndGgpKSk7%0ADQogICAgICAgIH0NCiAgICAgIH0NCg0KICAgICAgZnVuY3Rpb24gb25DbGlja1Zl%0AcnRpY2FsKCkgew0KICAgICAgICBpZiAoIXZhbHVlLmxlbmd0aCkgew0KICAgICAg%0AICAgIHZhciBwb3MgPSBzbGlkZXJMZW5ndGggLSBNYXRoLm1heCgwLCBNYXRoLm1p%0AbihzbGlkZXJMZW5ndGgsIGQzLmV2ZW50Lm9mZnNldFkgfHwgZDMuZXZlbnQubGF5%0AZXJZKSk7DQogICAgICAgICAgbW92ZUhhbmRsZShzdGVwVmFsdWUoc2NhbGUuaW52%0AZXJ0KHBvcyAvIHNsaWRlckxlbmd0aCkpKTsNCiAgICAgICAgfQ0KICAgICAgfQ0K%0ADQogICAgICBmdW5jdGlvbiBvbkRyYWdIb3Jpem9udGFsKCkgew0KICAgICAgICBp%0AZiAoIGQzLmV2ZW50LnNvdXJjZUV2ZW50LnRhcmdldC5pZCA9PT0gImhhbmRsZS1v%0AbmUiKSB7DQogICAgICAgICAgYWN0aXZlID0gMTsNCiAgICAgICAgfSBlbHNlIGlm%0AICggZDMuZXZlbnQuc291cmNlRXZlbnQudGFyZ2V0LmlkID09ICJoYW5kbGUtdHdv%0AIiApIHsNCiAgICAgICAgICBhY3RpdmUgPSAyOw0KICAgICAgICB9DQogICAgICAg%0AIHZhciBwb3MgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzbGlkZXJMZW5ndGgsIGQz%0ALmV2ZW50LngpKTsNCiAgICAgICAgbW92ZUhhbmRsZShzdGVwVmFsdWUoc2NhbGUu%0AaW52ZXJ0KHBvcyAvIHNsaWRlckxlbmd0aCkpKTsNCiAgICAgIH0NCg0KICAgICAg%0AZnVuY3Rpb24gb25EcmFnVmVydGljYWwoKSB7DQogICAgICAgIGlmICggZDMuZXZl%0AbnQuc291cmNlRXZlbnQudGFyZ2V0LmlkID09PSAiaGFuZGxlLW9uZSIpIHsNCiAg%0AICAgICAgICBhY3RpdmUgPSAxOw0KICAgICAgICB9IGVsc2UgaWYgKCBkMy5ldmVu%0AdC5zb3VyY2VFdmVudC50YXJnZXQuaWQgPT0gImhhbmRsZS10d28iICkgew0KICAg%0AICAgICAgIGFjdGl2ZSA9IDI7DQogICAgICAgIH0NCiAgICAgICAgdmFyIHBvcyA9%0AIHNsaWRlckxlbmd0aCAtIE1hdGgubWF4KDAsIE1hdGgubWluKHNsaWRlckxlbmd0%0AaCwgZDMuZXZlbnQueSkpDQogICAgICAgIG1vdmVIYW5kbGUoc3RlcFZhbHVlKHNj%0AYWxlLmludmVydChwb3MgLyBzbGlkZXJMZW5ndGgpKSk7DQogICAgICB9DQoNCiAg%0AICAgIGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbigpIHsNCiAgICAgICAgZDMuZXZl%0AbnQuc3RvcFByb3BhZ2F0aW9uKCk7DQogICAgICB9DQoNCiAgICB9KTsNCg0KICB9%0ADQoNCiAgLy8gTW92ZSBzbGlkZXIgaGFuZGxlIG9uIGNsaWNrL2RyYWcNCiAgZnVu%0AY3Rpb24gbW92ZUhhbmRsZShuZXdWYWx1ZSkgeyANCiAgICBpZiAoc2xpZGVyLm1h%0AeCgpLXNsaWRlci5pbnRlcnZhbCgpIDwgbmV3VmFsdWUpIHsgDQogICAgICBuZXdW%0AYWx1ZSA9IHNsaWRlci5tYXgoKSAtIHNsaWRlci5pbnRlcnZhbCgpOw0KICAgIH0N%0ACg0KICAgIHZhciBjdXJyZW50VmFsdWUgPSB2YWx1ZS5sZW5ndGggPyB2YWx1ZVth%0AY3RpdmUgLSAxXTogdmFsdWU7DQoNCiAgICBpZiAoY3VycmVudFZhbHVlICE9PSBu%0AZXdWYWx1ZSkgew0KICAgICAgdmFyIG9sZFBvcyA9IGZvcm1hdFBlcmNlbnQoc2Nh%0AbGUoc3RlcFZhbHVlKGN1cnJlbnRWYWx1ZSkpKSwNCiAgICAgICAgICBuZXdQb3Mg%0APSBmb3JtYXRQZXJjZW50KHNjYWxlKHN0ZXBWYWx1ZShuZXdWYWx1ZSkpKSwNCiAg%0AICAgICAgICBwb3NpdGlvbiA9IChvcmllbnRhdGlvbiA9PT0gImhvcml6b250YWwi%0AKSA/ICJsZWZ0IiA6ICJib3R0b20iOw0KDQogICAgICBpZiAoIHZhbHVlLmxlbmd0%0AaCA9PT0gMikgew0KICAgICAgICB2YWx1ZVsgYWN0aXZlIC0gMSBdID0gbmV3VmFs%0AdWU7DQogICAgICAgIGlmIChkMy5ldmVudCkgew0KICAgICAgICAgIGRpc3BhdGNo%0ALnNsaWRlKGQzLmV2ZW50LCB2YWx1ZSApOw0KICAgICAgICB9Ow0KICAgICAgfSBl%0AbHNlIHsNCiAgICAgICAgaWYgKGQzLmV2ZW50KSB7DQogICAgICAgICAgZGlzcGF0%0AY2guc2xpZGUoZDMuZXZlbnQuc291cmNlRXZlbnQgfHwgZDMuZXZlbnQsIHZhbHVl%0AID0gbmV3VmFsdWUpOw0KICAgICAgICB9Ow0KICAgICAgfQ0KDQogICAgICBpZiAo%0AIHZhbHVlWyAwIF0gPj0gdmFsdWVbIDEgXSApIHJldHVybjsNCiAgICAgIGlmICgg%0AYWN0aXZlID09PSAxICkgew0KICAgICAgICANCiAgICAgICAgaWYgKHZhbHVlLmxl%0Abmd0aCA9PT0gMikgew0KICAgICAgICAgIChwb3NpdGlvbiA9PT0gImxlZnQiKSA/%0AIGRpdlJhbmdlLnN0eWxlKCJsZWZ0IiwgbmV3UG9zKSA6IGRpdlJhbmdlLnN0eWxl%0AKCJib3R0b20iLCBuZXdQb3MpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGFu%0AaW1hdGUpIHsNCiAgICAgICAgICBoYW5kbGUxLnRyYW5zaXRpb24oKQ0KICAgICAg%0AICAgICAgICAuc3R5bGVUd2Vlbihwb3NpdGlvbiwgZnVuY3Rpb24oKSB7IHJldHVy%0AbiBkMy5pbnRlcnBvbGF0ZShvbGRQb3MsIG5ld1Bvcyk7IH0pDQogICAgICAgICAg%0AICAgIC5kdXJhdGlvbigodHlwZW9mIGFuaW1hdGUgPT09ICJudW1iZXIiKSA/IGFu%0AaW1hdGUgOiAyNTApOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIGhhbmRs%0AZTEuc3R5bGUocG9zaXRpb24sIG5ld1Bvcyk7DQogICAgICAgIH0NCiAgICAgIH0g%0AZWxzZSB7DQogICAgICAgIA0KICAgICAgICB2YXIgd2lkdGggPSAxMDAgLSBwYXJz%0AZUZsb2F0KG5ld1Bvcyk7DQogICAgICAgIHZhciB0b3AgPSAxMDAgLSBwYXJzZUZs%0Ab2F0KG5ld1Bvcyk7DQoNCiAgICAgICAgKHBvc2l0aW9uID09PSAibGVmdCIpID8g%0AZGl2UmFuZ2Uuc3R5bGUoInJpZ2h0Iiwgd2lkdGggKyAiJSIpIDogZGl2UmFuZ2Uu%0Ac3R5bGUoInRvcCIsIHRvcCArICIlIik7DQogICAgICAgIA0KICAgICAgICBpZiAo%0AYW5pbWF0ZSkgew0KICAgICAgICAgIGhhbmRsZTIudHJhbnNpdGlvbigpDQogICAg%0AICAgICAgICAgIC5zdHlsZVR3ZWVuKHBvc2l0aW9uLCBmdW5jdGlvbigpIHsgcmV0%0AdXJuIGQzLmludGVycG9sYXRlKG9sZFBvcywgbmV3UG9zKTsgfSkNCiAgICAgICAg%0AICAgICAgLmR1cmF0aW9uKCh0eXBlb2YgYW5pbWF0ZSA9PT0gIm51bWJlciIpID8g%0AYW5pbWF0ZSA6IDI1MCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgaGFu%0AZGxlMi5zdHlsZShwb3NpdGlvbiwgbmV3UG9zKTsNCiAgICAgICAgfQ0KICAgICAg%0AfQ0KICAgIH0NCiAgfQ0KDQogIC8vIENhbGN1bGF0ZSBuZWFyZXN0IHN0ZXAgdmFs%0AdWUNCiAgZnVuY3Rpb24gc3RlcFZhbHVlKHZhbCkgew0KDQogICAgaWYgKHZhbCA9%0APT0gc2NhbGUuZG9tYWluKClbMF0gfHwgdmFsID09PSBzY2FsZS5kb21haW4oKVsx%0AXSkgew0KICAgICAgcmV0dXJuIHZhbDsNCiAgICB9DQoNCiAgICB2YXIgdmFsTW9k%0AU3RlcCA9ICh2YWwgLSBzY2FsZS5kb21haW4oKVswXSkgJSBzdGVwLA0KICAgICAg%0AICBhbGlnblZhbHVlID0gdmFsIC0gdmFsTW9kU3RlcDsNCg0KICAgIGlmIChNYXRo%0ALmFicyh2YWxNb2RTdGVwKSAqIDIgPj0gc3RlcCkgew0KICAgICAgYWxpZ25WYWx1%0AZSArPSAodmFsTW9kU3RlcCA+IDApID8gc3RlcCA6IC1zdGVwOw0KICAgIH0NCg0K%0AICAgIHJldHVybiBhbGlnblZhbHVlOw0KDQogIH0NCg0KICAvLyBHZXR0ZXIvc2V0%0AdGVyIGZ1bmN0aW9ucw0KICBzbGlkZXIubWluID0gZnVuY3Rpb24oXykgew0KICAg%0AIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG1pbjsNCiAgICBtaW4gPSBf%0AOw0KICAgIHJldHVybiBzbGlkZXI7DQogIH07DQoNCiAgc2xpZGVyLm1heCA9IGZ1%0AbmN0aW9uKF8pIHsNCiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBt%0AYXg7DQogICAgbWF4ID0gXzsNCiAgICByZXR1cm4gc2xpZGVyOw0KICB9Ow0KDQog%0AIHNsaWRlci5zdGVwID0gZnVuY3Rpb24oXykgew0KICAgIGlmICghYXJndW1lbnRz%0ALmxlbmd0aCkgcmV0dXJuIHN0ZXA7DQogICAgc3RlcCA9IF87DQogICAgcmV0dXJu%0AIHNsaWRlcjsNCiAgfTsNCg0KICBzbGlkZXIuYW5pbWF0ZSA9IGZ1bmN0aW9uKF8p%0AIHsNCiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBhbmltYXRlOw0K%0AICAgIGFuaW1hdGUgPSBfOw0KICAgIHJldHVybiBzbGlkZXI7DQogIH07DQoNCiAg%0Ac2xpZGVyLm9yaWVudGF0aW9uID0gZnVuY3Rpb24oXykgew0KICAgIGlmICghYXJn%0AdW1lbnRzLmxlbmd0aCkgcmV0dXJuIG9yaWVudGF0aW9uOw0KICAgIG9yaWVudGF0%0AaW9uID0gXzsNCiAgICByZXR1cm4gc2xpZGVyOw0KICB9Ow0KDQogIHNsaWRlci5h%0AeGlzID0gZnVuY3Rpb24oXykgew0KICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkg%0AcmV0dXJuIGF4aXM7DQogICAgYXhpcyA9IF87DQogICAgcmV0dXJuIHNsaWRlcjsN%0ACiAgfTsNCg0KICBzbGlkZXIubWFyZ2luID0gZnVuY3Rpb24oXykgew0KICAgIGlm%0AICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG1hcmdpbjsNCiAgICBtYXJnaW4g%0APSBfOw0KICAgIHJldHVybiBzbGlkZXI7DQogIH07DQoNCiAgc2xpZGVyLnZhbHVl%0AID0gZnVuY3Rpb24oXykgew0KICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0%0AdXJuIHZhbHVlOw0KICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7DQogICAg%0AICBtb3ZlSGFuZGxlKHN0ZXBWYWx1ZShfKSk7DQogICAgfTsNCiAgICB2YWx1ZSA9%0AIF87DQogICAgcmV0dXJuIHNsaWRlcjsNCiAgfTsNCg0KICBzbGlkZXIuc2NhbGUg%0APSBmdW5jdGlvbihfKSB7DQogICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1%0Acm4gc2NhbGU7DQogICAgc2NhbGUgPSBfOw0KICAgIHJldHVybiBzbGlkZXI7DQog%0AIH07DQoNCiAgc2xpZGVyLmludGVydmFsID0gZnVuY3Rpb24oXykgew0KICAgIGlm%0AICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGludGVydmFsOw0KICAgIGludGVy%0AdmFsID0gXzsNCiAgICByZXR1cm4gc2xpZGVyOw0KICB9Ow0KDQoNCiAgZDMucmVi%0AaW5kKHNsaWRlciwgZGlzcGF0Y2gsICJvbiIpOw0KDQogIHJldHVybiBzbGlkZXI7%0ADQoNCn0NCn0pKTsNCjwvc2NyaXB0Pg0KICAgICAgPCEtLSBuZHR2LWQzIGpzIGNv%0AZGUgLS0+DQogICAgICA8c2NyaXB0Pi8qKgpuZHR2LWQzIGlzIGEgZDMtYmFzZWQg%0ASFRNTDUgbmV0d29yayBhbmltYXRpb24gcGxheWVyIGZvciB0aGUgbmR0diBwYWNr%0AYWdlIChodHRwOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9uZHR2%0AL2luZGV4Lmh0bWwpCgpUaGUgbmR0di1kMyBsaWJyYXJ5IHdhcyBjcmVhdGVkIGJ5%0AIEdyZWcgTWljaGFsZWMgYW5kIFNreWUgQmVuZGVyLWRlTW9sbCBmb3IgdGhlIHN0%0AYXRuZXQgcHJvamVjdCBodHRwOi8vc3RhdG5ldC5vcmcgZnVuZGVkIGJ5IE5JQ0hE%0AIGdyYW50IFIwMUhEMDY4Mzk1LgoKVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRl%0AZCB1bmRlciB0aGUgR1BMLTMgbGljZW5zZSAoaHR0cDovL2Nob29zZWFsaWNlbnNl%0ALmNvbS9saWNlbnNlcy9ncGwtMy4wLykuICBJdCBpcyBmcmVlLCBvcGVuIHNvdXJj%0AZSwgYW5kIGhhcyB0aGUgYXR0cmlidXRpb24gcmVxdWlyZW1lbnRzIChHUEwgU2Vj%0AdGlvbiA3KSBhdCBodHRwOi8vc3RhdG5ldC5vcmcvYXR0cmlidXRpb246CgphLiB5%0Ab3UgYWdyZWUgdG8gcmV0YWluIGluIG5kdHYtZDMgYW5kIGFueSBtb2RpZmljYXRp%0Ab25zIHRvIG5kdHYtZDMgdGhlIGNvcHlyaWdodCwgYXV0aG9yIGF0dHJpYnV0aW9u%0AIGFuZCBVUkwgaW5mb3JtYXRpb24gYXMgcHJvdmlkZWQgYXQgYSBodHRwOi8vc3Rh%0AdG5ldHByb2plY3Qub3JnL2F0dHJpYnV0aW9uLgoKYi4geW91IGFncmVlIHRoYXQg%0AbmR0di1kMyBhbmQgYW55IG1vZGlmaWNhdGlvbnMgdG8gbmR0di1kMyB3aWxsLCB3%0AaGVuIHVzZWQsIGRpc3BsYXkgdGhlIGF0dHJpYnV0aW9uOgoKICAgIEJhc2VkIG9u%0AICdzdGF0bmV0JyBwcm9qZWN0IHNvZnR3YXJlIChodHRwOi8vc3RhdG5ldHByb2pl%0AY3Qub3JnKS4gRm9yIGxpY2Vuc2UgYW5kIGNpdGF0aW9uIGluZm9ybWF0aW9uIHNl%0AZSBodHRwOi8vc3RhdG5ldHByb2plY3Qub3JnL2F0dHJpYnV0aW9uCgpDb3B5cmln%0AaHQgMjAxNCBTdGF0bmV0IENvbW1vbnMgaHR0cDovL3N0YXRuZXQub3JnCgpUbyBj%0AaXRlIHRoaXMgcHJvamVjdCwgcGxlYXNlIHVzZToKCkdyZWcgTWljaGFsZWMsIFNr%0AeWUgQmVuZGVyLWRlTW9sbCwgTWFydGluYSBNb3JyaXMgKDIwMTQpICduZHR2LWQz%0AOiBhbiBIVE1MNSBuZXR3b3JrIGFuaW1hdGlvbiBwbGF5ZXIgZm9yIHRoZSBuZHR2%0AIHBhY2thZ2UnIFRoZSBzdGF0bmV0IHByb2plY3QuIGh0dHA6Ly9zdGF0bmV0Lm9y%0AZwpAbW9kdWxlCiovCgoKKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7CiAgLyoq%0AIEBjbGFzcyAqLwogIHJvb3QubmR0dl9kMyA9IGZhY3RvcnkoKTsKfSh0aGlzLCBm%0AdW5jdGlvbigpIHsKICAidXNlIHN0cmljdCI7CiAKICAvKioKICAqIFB1YmxpYyBv%0AcHRpb25zIHRvIGNvbnRyb2wgdmlzdWFsaXphdGlvbiBmdW5jdGlvbmFsaXR5CiAg%0AKiBAY29uc3RhbnQge29iamVjdH0KICAqIEBnbG9iYWwKICAqIEBkZWZhdWx0CiAg%0AKi8KICB2YXIgZGVmYXVsdF9vcHRpb25zID0gewogICAgYW5pbWF0aW9uRHVyYXRp%0Ab246IDgwMCwgICAgICAgLy9EdXJhdGlvbiBvZiBlYWNoIHN0ZXAgYW5pbWF0aW9u%0AIGR1cmluZyBwbGF5IG9yIHN0ZXAgYWN0aW9ucywgaW4gbWlsbGlzZWNvbmRzCiAg%0AICBlbnRlckV4aXRBbmltYXRpb25GYWN0b3I6IDAsICAvL1BlcmNlbnRhZ2UgKDAt%0AMSkgb2YgdG90YWwgc3RlcCBhbmltYXRpb24gdGltZSB0aGF0IGVudGVyL2V4aXQg%0AYW5pbWF0aW9ucyBzaG91bGQgdGFrZQogICAgbGFiZWxPZmZzZXQ6IHsgICAgICAg%0AICAgICAgICAgLy9waXhlbCBvZmZzZXQgb2YgbGFiZWxzCiAgICAgIHg6IDEyLAog%0AICAgICB5OiAwCiAgICB9LAogICAgYmFzZUZvbnRTaXplOiAnMTQnLCAgICAgICAg%0AICAgLy9Gb250IHNpemUsIGluIHBpeGVscywgZm9yIGxhYmVscyB3aXRoIGNleCB2%0AYWx1ZSBvZiAxCiAgICBub2RlU2l6ZUZhY3RvcjogMC4wMSwgICAgICAgICAvL1Bl%0AcmNlbnRhZ2UgKDAtMSkgb2Ygdmlld3BvcnQgc2l6ZSB0aGF0IGEgbm9kZSBvZiBz%0AaXplIDEgd2lsbCBiZSByZW5kZXJlZCBhdAogICAgZGF0YUNob29zZXI6IGZhbHNl%0ALCAgICAgICAgICAgLy9zaG93IGEgc2VsZWN0IGJveCBmb3IgY2hvb3NpbmcgZGlm%0AZmVyZW50IGdyYXBocz8KICAgIGRhdGFDaG9vc2VyRGlyOiAnZGF0YS8nLCAgICAg%0AIC8vd2ViIHBhdGggdG8gZGlyIGNvbnRhaW5pbmcgZGF0YSBqc29uIGZpbGVzCiAg%0AICBwbGF5Q29udHJvbHM6IHRydWUsICAgICAgICAgICAvL3Nob3cgdGhlIHBsYXll%0AciBjb250cm9scwogICAgc2xpZGVyOiB0cnVlLCAgICAgICAgICAgICAgICAgLy9z%0AaG93IHRoZSBzbGlkZXIgY29udHJvbAogICAgbWVudTogdHJ1ZSwgICAgICAgICAg%0AICAgICAgICAgLy9zaG93IGEgbWVudSBpbiB1cHBlci1yaWdodAogICAgYW5pbWF0%0AZU9uTG9hZDogZmFsc2UsICAgICAgICAgLy9wbGF5IHRoZSBncmFwaCBhbmltYXRp%0Ab24gb24gcGFnZSBsb2FkCiAgICBtYXJnaW46IHsgICAgICAgICAgICAgICAgICAg%0AICAvL2dyYXBoIHJlbmRlciBhcmVhIG1hcmdpbnMKICAgICAgeDogMjAsCiAgICAg%0AIHk6IDEwCiAgICB9LAogICAgZ3JhcGhEYXRhOiBudWxsLCAgICAgICAgICAgICAg%0ALy9ncmFwaCBkYXRhLCBlaXRoZXIgYXMgSlNPTiBvYmplY3Qgb3IgVVJMIHRvIGpz%0Ab24gZmlsZQogICAgZGVidWdGcmFtZUluZm86IGZhbHNlLCAgICAgICAgLy9TaG93%0AIHRoZSBzbGljZSBpbmZvIGluIGNvcm5lcgogICAgZHVyYXRpb25Db250cm9sOiB0%0AcnVlLCAgLy9TaG93IGEgY29udHJvbCB0byBjaGFuZ2UgZHVyYXRpb24gc3BlZWQK%0AICB9OwoKICAvKioKICAqIFN1cHBvcnRlZCBORFRWIG5ldHdvcmsgcHJvcGVydGll%0AcyBhbmQgdGhlaXIgZGVmYXVsdCB2YWx1ZXMKICAqIEBjb25zdGFudCB7b2JqZWN0%0AfQogICogQGdsb2JhbAogICogQGRlZmF1bHQKICAqLwogIHZhciBuZHR2UHJvcGVy%0AdGllcyA9IHsKICAgIGdyYXBoOiB7CiAgICAgIHhsYWI6IG51bGwsICAgICAgICAg%0AICAgICAgICAgICAgLy8gbGFiZWwgY2FwdGlvbiBiZWxvdyB0aGUgcmVuZGVyLCBv%0AbiB0aGUgeGF4aXMKICAgICAgbWFpbjogbnVsbCwgICAgICAgICAgICAgICAgICAg%0AICAvLyBtYWluIGhlYWRsaW5lIGFib3ZlIHRoZSByZW5kZXIKICAgICAgZGlzcGxh%0AeWxhYmVsczogZmFsc2UgLCAgICAgICAgICAvLyBzaG91bGQgdmVydGV4IGxhYmVs%0AcyBiZSBkaXNwbGF5ZWQKICAgICAgYmc6ICcjZmZmJywgICAgICAgICAgICAgICAg%0AICAgICAvLyBiYWNrZ3JvdW5kIGNvbG9yCiAgICAgIHVzZWFycm93czogdHJ1ZSwg%0AICAgICAgICAgICAgICAgLy8gc2hvdWxkIGFycm93cyBiZSBkcmF3biBvbiBlZGdl%0Acz8KICAgICAgeGxpbTogbnVsbCwgICAgICAgICAgICAgICAgICAgICAvLyByYW5n%0AZSBvZiB4IHZhbHVlcyAgICAgICAgICAgICAgICAgICAgIAogICAgICB5bGltOiBu%0AdWxsLCAgICAgICAgICAgICAgICAgICAgIC8vIHJhbmdlIG9mIHkgdmFsdWVzICAK%0AICAgICAgZWRnZU9mZnNldDogMCwgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQg%0Ab2YgZWRnZSBsZW5ndGggdG8gdmVydGV4IGJvcmRlcnMgIAogICAgICB0b29sdGlw%0AT2Zmc2V0OiAwLCAgICAgICAgICAgICAgIC8vIG9mZnNldCBvZiB0b29sdGlwcyB0%0AbyB2ZXJ0ZXggYm9yZGVycyAKICAgIH0sIAogICAgbm9kZTogewogICAgICBjb29y%0AZDogbnVsbCwgICAgICAgICAgICAgICAgICAgIC8vIGNvb3JkaW5hdGVzIGZvciBu%0Ab2RlcwogICAgICBsYWJlbDogbnVsbCwgICAgICAgICAgICAgICAgICAgIC8vIGxh%0AYmVscyBmb3IgdmVydGljZXMKICAgICAgJ2xhYmVsLmNvbCc6ICcjMDAwJywgICAg%0AICAgICAgICAvLyBjb2xvciBvZiBub2RlIGxhYmVsCiAgICAgICdsYWJlbC5jZXgn%0AOiAxLCAgICAgICAgICAgICAgICAgLy8gbGFiZWwgZm9udCBzaXplIHNjYWxlIGZh%0AY3RvcgogICAgICAndmVydGV4LmNleCc6IDEsICAgICAgICAgICAgICAgIC8vIHZl%0AcnRleCAobm9kZSkgZXhwYW5zaW9uIHNjYWxlIGZhY3RvcgogICAgICAndmVydGV4%0ALmNvbCc6ICcjRjAwJywgICAgICAgICAgIC8vIG5vZGUgZmlsbCBjb2xvcgogICAg%0AICAndmVydGV4LnNpZGVzJzogNTAsICAgICAgICAgICAgIC8vIG51bWJlciBvZiBz%0AaWRlcyBmb3IgdmVydGV4IHBvbHlnb24gKHNoYXBlKQogICAgICAndmVydGV4LnJv%0AdCc6IDAsICAgICAgICAgICAgICAgIC8vIHJvdGF0aW9uIGZvciB2ZXJ0ZXggcG9s%0AeWdvbgogICAgICAndmVydGV4LnRvb2x0aXAnOiAnJywgICAgICAgICAgIC8vIHZl%0AcnRleCB0b29sdGlwIHZhbHVlCiAgICAgICd2ZXJ0ZXguYm9yZGVyJzogJyMwMDAn%0ALCAgICAgICAgLy8gY29sb3Igb2YgdmVydGV4IGJvcmRlciBzdHJva2UKICAgICAg%0AJ3ZlcnRleC5sd2QnOiAxLCAgICAgICAgICAgICAgICAvLyB3aWR0aCBvZiB2ZXJ0%0AZXggYm9yZGVyIHN0cm9rZQogICAgICAndmVydGV4LmNzcy5jbGFzcyc6IG51bGws%0AICAgICAgIC8vIGNzcyBjbGFzcyBuYW1lIGFwcGxpZWQgdG8gbm9kZQogICAgICAn%0AdmVydGV4LmxhYmVsLmNzcy5jbGFzcyc6IG51bGwsIC8vIGNzcyBjbGFzcyBuYW1l%0AIGFwcGxpZWQgdG8gbm9kZSBsYWJlbAogICAgICAndmVydGV4LmNzcy5zdHlsZSc6%0AIG51bGwsICAgICAgIC8vIGNzcyBpbmxpbmUtc3R5bGUgYXBwbGllZCB0byBub2Rl%0AIChVTklNUExJTUVOVEVEKQogICAgICAndmVydGV4LmxhYmVsLmNzcy5zdHlsZSc6%0AIG51bGwsIC8vIGNzcyBpbmxpbmUgc3R5bGUgYXBwbGllZCB0byBub2RlIGxhYmVs%0AIChVTklNUExFTUVOVEVEKQogICAgICAnaW1hZ2UnOiBudWxsLCAgICAgICAgICAg%0AICAgICAgIC8vIGJhY2tncm91bmQgaW1hZ2UgZm9yIHZlcnRleAogICAgfSwKICAg%0AIGVkZ2U6IHsKICAgICAgJ2VkZ2UubHdkJzogMSwgICAgICAgICAgICAgICAgICAv%0ALyB3aWR0aCBvZiBlZGdlIHN0cm9rZQogICAgICAnZWRnZS5jb2wnOiAnIzAwMCcs%0AICAgICAgICAgICAgIC8vIGVkZ2Ugc3Ryb2tlIGNvbG9yCiAgICAgICdlZGdlLnRv%0Ab2x0aXAnOiBudWxsLCAgICAgICAgICAgLy8gZWRnZSB0b29sdGlwIHZhbHVlCiAg%0AICAgICdlZGdlLmNzcy5jbGFzcyc6IG51bGwsICAgICAgICAgLy8gY3NzIGNsYXNz%0AIG5hbWUgYXBwbGllZCB0byBlZGdlCiAgICAgICdlZGdlLmxhYmVsLmNzcy5jbGFz%0Acyc6IG51bGwsICAgLy8gY3NzIGNsYXNzIG5hbWUgYXBwbGllZCB0byBlZGdlIGxh%0AYmVsCiAgICAgICdlZGdlLmNzcy5zdHlsZSc6IG51bGwsICAgICAgICAgLy8gY3Nz%0AIGlubGluZS1zdHlsZSBhcHBsaWVkIHRvIGVkZ2UgKFVOSU1QTElNRU5URUQpCiAg%0AICAgICdlZGdlLmxhYmVsLmNzcy5zdHlsZSc6IG51bGwsICAgLy8gY3NzIGlubGlu%0AZSBzdHlsZSBhcHBsaWVkIHRvIGVkZ2UgbGFiZWwgKFVOSU1QTEVNRU5URUQpCiAg%0AICB9CiAgfQogIAoKICAvKioKICAqIEluaXRpYWxpemUgYSBuZXcgbmR0di1kMyBp%0AbnN0YW5jZQogICogQGNvbnN0cnVjdHMgbmR0dl9kMwogICogQHBhcmFtIHtvYmpl%0AY3R9IC0gQW4gb2JqZWN0IG9mIGRlZmF1bHQgb3B0aW9ucyBvdmVycmlkZXMKICAq%0AIEBwYXJhbSB7c3RyaW5nfEhUTUxFbGVtZW50fSAtIEEgQ1NTIHNlbGVjdG9yIHN0%0AcmluZyBvciBET00gZWxlbWVudCByZWZlcmVuY2Ugc3BlY2lmeWluZyB0aGUgdGFy%0AZ2V0IGRvbSBlbGVtZW50IHRoZSBuZXR3b3JrIHNob3VsZCBiZSBpbml0aWFsaXpl%0AZCB0bwogICovCiAgdmFyIG4zID0gZnVuY3Rpb24ob3B0aW9ucywgdGFyZ2V0KSB7%0ACiAgICB2YXIgbjMgPSB0aGlzOwogICAgCiAgICB2YXIgZ2xvYmFscyA9IHsKICAg%0AICAgc3ZnOiBudWxsLAogICAgICB4U2NhbGU6IG51bGwsCiAgICAgIHlTY2FsZTog%0AbnVsbCwKICAgICAgbWluVGltZTogbnVsbCwKICAgICAgaW50ZXJ2YWw6IG51bGws%0ACiAgICAgIG1heFRpbWU6IG51bGwsCiAgICAgIGFuaW1hdGU6IG51bGwsCiAgICAg%0AIGJhc2VOb2RlU2l6ZTogbnVsbCwKICAgICAgY3VyclRpbWU6IDAsCiAgICAgIGdy%0AYXBoOiBudWxsLAogICAgICB0aW1lSW5kZXg6bnVsbCwKICAgICAgZG9tVGFyZ2V0%0AOm51bGwsCiAgICAgIHNsaWRlcjpudWxsLAogICAgICBub2RlQ29vcmRzOiB7fSwK%0AICAgICAgb3B0aW9uczoge30KICAgIAp9CiAgICAvL2luaXRpYWxpemUgY2xhc3Mg%0AZ2xvYmFscwogICAgJC5leHRlbmQodHJ1ZSwgbjMsIGdsb2JhbHMpOwoKICAgIC8v%0AcmVwbGFjZSBkZWZhdWx0cyB3aXRoIHVzZXItc3BlY2lmaWVkIG9wdGlvbnMKICAg%0AICQuZXh0ZW5kKHRydWUsIG4zLm9wdGlvbnMsIGRlZmF1bHRfb3B0aW9ucyk7CiAg%0AICAkLmV4dGVuZCh0cnVlLCBuMy5vcHRpb25zLCBvcHRpb25zKTsKCiAgICBpZiAo%0AIXRhcmdldCkgewogICAgICB0YXJnZXQgPSBkMy5zZWxlY3QoJ2JvZHknKS5hcHBl%0AbmQoJ2RpdicpLnN0eWxlKHt3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJ30p%0ALm5vZGUoKTsKICAgICAgZDMuc2VsZWN0QWxsKCdodG1sLCBib2R5JykuY2xhc3Nl%0AZCh7J25kdHYtZnVsbHNjcmVlbic6IHRydWV9KQogICAgfQogICAgbjMuZG9tVGFy%0AZ2V0ID0gZDMuc2VsZWN0KHRhcmdldCk7CiAgICBuMy5kb21UYXJnZXQuY2xhc3Nl%0AZCh7J25kdHYtZDMtY29udGFpbmVyJzogdHJ1ZX0pOwogICAgbjMuU1ZHU2V0dXAo%0AbjMuZG9tVGFyZ2V0KTsKICAgIGlmIChuMy5vcHRpb25zLnBsYXlDb250cm9scyB8%0AfCBuMy5vcHRpb25zLnNsaWRlcikgewogICAgICBuMy5kb21UYXJnZXQuYXBwZW5k%0AKCdkaXYnKS5hdHRyKCdjbGFzcycsICdjb250cm9scycpOwogICAgfQogICAgaWYg%0AKG4zLm9wdGlvbnMuZGF0YUNob29zZXIpIHsgbjMuY3JlYXRlRGF0YUNob29zZXIo%0AKTsgfQogICAgaWYgKG4zLm9wdGlvbnMucGxheUNvbnRyb2xzKSB7IG4zLmNyZWF0%0AZVBsYXlDb250cm9scygpOyB9CiAgICBpZiAobjMub3B0aW9ucy5zbGlkZXIpIHsg%0AbjMuY3JlYXRlU2xpZGVyQ29udHJvbCgpOyB9CiAgICBpZiAobjMub3B0aW9ucy5t%0AZW51KSB7IG4zLmNyZWF0ZU1lbnUoKTsgfQoKCiAgICBuMy50b29sdGlwID0gbjMu%0AZG9tVGFyZ2V0LnNlbGVjdCgnLmdyYXBoJykuYXBwZW5kKCdkaXYnKS5hdHRyKCdj%0AbGFzcycsICd0b29sdGlwJyk7CiAgICBuMy5mcmFtZUluZm9EaXYgPSBuMy5kb21U%0AYXJnZXQuc2VsZWN0KCcuZ3JhcGgnKS5hcHBlbmQoJ2RpdicpLmF0dHIoJ2NsYXNz%0AJywgJ2ZyYW1lSW5mbycpCiAgICBpZiAobjMub3B0aW9ucy5kZWJ1Z0ZyYW1lSW5m%0AbykgeyBuMy5mcmFtZUluZm9EaXYuc3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKTsg%0AfQogICAgaWYobjMub3B0aW9ucy5ncmFwaERhdGEpIHsgbjMubG9hZERhdGEobjMu%0Ab3B0aW9ucy5ncmFwaERhdGEpOyB9CiAgfQoKICAvKioKICAqIEluaXRpYWxpemUg%0AdGhlIFNWRyBlbGVtZW50IGFuZCByZWxhdGVkIERPTSBlbGVtZW50cyBhbmQgbGlz%0AdGVuZXJzCiAgKiBAcGFyYW0ge0QzU2VsZWN0aW9ufSAtIERPTSBlbGVtZW50IHRv%0AIGluc2VydCBzdmcgaW50bwogICovCiAgbjMucHJvdG90eXBlLlNWR1NldHVwID0g%0AZnVuY3Rpb24oZG9tVGFyZ2V0KSB7CiAgICB2YXIgbjMgPSB0aGlzOwoKICAgICQo%0AZG9tVGFyZ2V0KS5yZXNpemUoZnVuY3Rpb24obikgeyAKICAgICAgbjMucmVzaXpl%0AR3JhcGgobik7CiAgICB9KTsKICAgICQod2luZG93KS5yZXNpemUoZnVuY3Rpb24o%0AbikgeyAKICAgICAgbjMucmVzaXplR3JhcGgobik7CiAgICB9KTsKIAogICAgZG9t%0AVGFyZ2V0CiAgICAgIC5hcHBlbmQoJ2RpdicpLmF0dHIoJ2NsYXNzJywgJ2dyYXBo%0AJykKICAgICAgLmFwcGVuZCgic3ZnOnN2ZyIpCiAgICAgIC5hcHBlbmQoImRlZnMi%0AKQoKICAgIHZhciBzdmcgPSBkb21UYXJnZXQuc2VsZWN0KCdzdmcnKQogICAgICAu%0AYXBwZW5kKCdnJykKCiAgICB2YXIgZHJhZ0V2ZW50OwogICAgdmFyIHJlY3QgPSBz%0AdmcuYXBwZW5kKCJyZWN0IikKICAgICAgLmF0dHIoJ2NsYXNzJywgJ2JhY2tncm91%0AbmQnKQogICAgICAuc3R5bGUoImZpbGwiLCAibm9uZSIpCiAgICAgIC5zdHlsZSgi%0AcG9pbnRlci1ldmVudHMiLCAiYWxsIikKICAgICAgLm9uKCdtb3VzZWRvd24nLCBm%0AdW5jdGlvbigpIHsgCiAgICAgICAgZHJhZ0V2ZW50ID0gZDMuZXZlbnQ7CiAgICAg%0AIH0pCiAgICAgIC5vbignbW91c2V1cCcsIGZ1bmN0aW9uKCkgeyAKICAgICAgICBp%0AZiAoTWF0aC5hYnMoZHJhZ0V2ZW50LnBhZ2VYIC0gZDMuZXZlbnQucGFnZVgpIDwg%0ANSAmJiBNYXRoLmFicyhkcmFnRXZlbnQucGFnZVkgLSBkMy5ldmVudC5wYWdlWSkg%0APCA1KSB7CiAgICAgICAgICBuMy5oaWRlVG9vbHRpcCgpOwogICAgICAgICAgbjMu%0AdW5TZWxlY3ROZXR3b3JrKCk7CiAgICAgICAgfQogICAgICB9KQoKICAgIG4zLmNv%0AbnRhaW5lciA9IHN2Zy5hcHBlbmQoImciKQogICAgICAuYXR0cignY2xhc3MnLCAn%0AY29udGFpbmVyJykKICAgIG4zLmNvbnRhaW5lci5hcHBlbmQoJ2cnKS5hdHRyKCdj%0AbGFzcycsICdlZGdlcycpOwogICAgbjMuY29udGFpbmVyLmFwcGVuZCgnZycpLmF0%0AdHIoJ2NsYXNzJywgJ25vZGVzJyk7CiAgICBuMy5jb250YWluZXIuYXBwZW5kKCdn%0AJykuYXR0cignY2xhc3MnLCAnbGFiZWxzJyk7CiAgICBuMy5jb250YWluZXIuYXBw%0AZW5kKCdyZWN0JykuYXR0cignY2xhc3MnLCAnc2NyZWVuJyk7CiAgICBuMy5jb250%0AYWluZXIuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAnZWRnZXNfc2VsZWN0ZWQn%0AKTsKICAgIG4zLmNvbnRhaW5lci5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsICdu%0Ab2Rlc19zZWxlY3RlZCcpOwogICAgbjMuY29udGFpbmVyLmFwcGVuZCgnZycpLmF0%0AdHIoJ2NsYXNzJywgJ2xhYmVsc19zZWxlY3RlZCcpOwoKICAgIHN2Zy5hcHBlbmQo%0AJ2cnKS5hdHRyKCdjbGFzcycsICdtYWluJykuYXBwZW5kKCd0ZXh0Jyk7CiAgICBz%0AdmcuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAneGxhYicpLmFwcGVuZCgndGV4%0AdCcpOwoKICAgIHN2Zy5vbignbW91c2Vkb3duJywgZnVuY3Rpb24oKSB7CiAgICAg%0AIHN2Zy5jbGFzc2VkKHsnZHJhZ2dpbmcnOiB0cnVlfSkKICAgIH0pCiAgICBzdmcu%0Ab24oJ21vdXNldXAnLCBmdW5jdGlvbigpIHsKICAgICAgc3ZnLmNsYXNzZWQoeydk%0AcmFnZ2luZyc6IGZhbHNlfSkKICAgIH0pCgogICAgbjMuem9vbSA9IGQzLmJlaGF2%0AaW9yLnpvb20oKQogICAgICAuc2NhbGVFeHRlbnQoWy41LCAxMF0pCiAgICAgIC5v%0Abigiem9vbSIsIGZ1bmN0aW9uIHpvb21lZCgpIHsKICAgICAgICBuMy5jb250YWlu%0AZXIuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgiICsgZDMuZXZlbnQudHJh%0AbnNsYXRlICsgIilzY2FsZSgiICsgZDMuZXZlbnQuc2NhbGUgKyAiKSIpOwogICAg%0AICAgIG4zLmN0bSA9IG4zLmNvbnRhaW5lci5ub2RlKCkuZ2V0U2NyZWVuQ1RNKCk7%0ACiAgICAgICAgbjMubW92ZVRvb2x0aXAoKTsKICAgICAgfSkKICAgIHN2Zy5jYWxs%0AKG4zLnpvb20pCiAgfQoKICAvKiogc2V0cyBwb3NpdGlvbmluZyBvbiBzdmcgZWxl%0AbWVudHMgYmFzZWQgb24gY3VycmVudCBET00gY29udGFpbmVyIHNpemUgYW5kIHNl%0AdHMgZGF0YSBzY2FsaW5nIGZhY3RvcnMgYWNjb3JkaW5nbHkgKi8KICBuMy5wcm90%0Ab3R5cGUudXBkYXRlRGltZW5zaW9ucyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIG4z%0AID0gdGhpczsKICAgIHZhciBkaXZfd2lkdGggPSBuMy5kb21UYXJnZXQubm9kZSgp%0ALm9mZnNldFdpZHRoCiAgICB2YXIgZGl2X2hlaWdodCA9IG4zLmRvbVRhcmdldC5u%0Ab2RlKCkub2Zmc2V0SGVpZ2h0IC0gJChuMy5kb21UYXJnZXQuc2VsZWN0KCcuY29u%0AdHJvbHMnKS5ub2RlKCkpLm91dGVySGVpZ2h0KHRydWUpOwoKICAgIHZhciB4bGFi%0AID0gbjMudGltZUluZGV4W24zLmN1cnJUaW1lXS5yZW5kZXJEYXRhLmdyYXBoLnhs%0AYWI7CiAgICB2YXIgbWFpbiA9IG4zLnRpbWVJbmRleFtuMy5jdXJyVGltZV0ucmVu%0AZGVyRGF0YS5ncmFwaC5tYWluOwogICAgdmFyIHhsYWJTaXplID0gcGFyc2VGbG9h%0AdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShuMy5kb21UYXJnZXQuc2VsZWN0KCcu%0AeGxhYicpLm5vZGUoKSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnZm9udC1zaXpl%0AJykpOwogICAgdmFyIG1haW5TaXplID0gcGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29t%0AcHV0ZWRTdHlsZShuMy5kb21UYXJnZXQuc2VsZWN0KCcubWFpbicpLm5vZGUoKSwg%0AbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnZm9udC1zaXplJykpOwogICAgdmFyIG1h%0AaW5NYXJnaW4gPSAwOwogICAgdmFyIHhsYWJNYXJnaW4gPSAwOwoKICAgIGlmICh4%0AbGFiKSB7CiAgICAgIHhsYWJNYXJnaW4gPSB4bGFiU2l6ZSooeGxhYi5sZW5ndGgr%0AMSkqMS4yOwogICAgfSAKICAgIGlmIChtYWluKSB7CiAgICAgIG1haW5NYXJnaW4g%0APSBtYWluU2l6ZSoobWFpbi5sZW5ndGgrMSkqMS4yOwogICAgfSAKICAgIAogICAg%0AdmFyIG1hcmdpbiA9IHsKICAgICAgeDogbjMub3B0aW9ucy5tYXJnaW4ueCwKICAg%0AICAgeTogbjMub3B0aW9ucy5tYXJnaW4ueQogICAgfQogICAgaWYgKGRpdl93aWR0%0AaCA+IGRpdl9oZWlnaHQpIHsgCiAgICAgIG1hcmdpbi54ID0gKGRpdl93aWR0aCAt%0AIGRpdl9oZWlnaHQpLzIKICAgIH0gZWxzZSB7CiAgICAgIG1hcmdpbi55ID0gKGRp%0Adl9oZWlnaHQgLSBkaXZfd2lkdGgpLzIKICAgIH0KCiAgICB2YXIgd2lkdGggPSBk%0AaXZfd2lkdGggLSAobWFyZ2luLngqMik7CiAgICB2YXIgaGVpZ2h0ID0gZGl2X2hl%0AaWdodCAtIChtYXJnaW4ueSoyKTsKCiAgICBuMy5kb21UYXJnZXQuc2VsZWN0QWxs%0AKCcuZ3JhcGg+c3ZnLCAuYmFja2dyb3VuZCwgLnNjcmVlbicpCiAgICAgIC5hdHRy%0AKHsKICAgICAgICB3aWR0aDogd2lkdGggKyBtYXJnaW4ueCAqIDIsCiAgICAgICAg%0AaGVpZ2h0OiBoZWlnaHQgKyBtYXJnaW4ueSAqIDIKICAgICAgfSkKICAgIAogICAg%0ALy9yZXNldCBoZWlnaHQgaW5jbHVkaW5nIG1haW4gJiB4bGFiIGZvciBncmFwaCBj%0Ab250YWluZXIgdHJhbnNsYXRpb24KICAgIGhlaWdodCA9IGhlaWdodCAtIG1haW5N%0AYXJnaW4gLSB4bGFiTWFyZ2luOwoKICAgIG4zLmNvbnRhaW5lci5hdHRyKCJ0cmFu%0Ac2Zvcm0iLCAidHJhbnNsYXRlKCIgKyBtYXJnaW4ueCArICIsIiArIChtYXJnaW4u%0AeSttYWluTWFyZ2luKSArICIpIik7CgogICAgdmFyIGNlbnRlciA9IG1hcmdpbi54%0AICsgd2lkdGgvMjsKICAgIG4zLmRvbVRhcmdldC5zZWxlY3QoJy54bGFiJykuYXR0%0AcigndHJhbnNmb3JtJywgInRyYW5zbGF0ZSgiK2NlbnRlcisiLCIrKGRpdl9oZWln%0AaHQtbWFyZ2luLnkpKyIpIikKICAgIG4zLmRvbVRhcmdldC5zZWxlY3QoJy5tYWlu%0AJykuYXR0cigndHJhbnNmb3JtJywgInRyYW5zbGF0ZSgiK2NlbnRlcisiLCIrKG1h%0Acmdpbi55K21haW5TaXplKSsiKSIpCgogICAgdmFyIHBpeGVsU3BhY2UgPSBoZWln%0AaHQgPiB3aWR0aCA/IHdpZHRoIDogaGVpZ2h0OwogICAgbjMuYmFzZU5vZGVTaXpl%0AID0gcGl4ZWxTcGFjZSAqIG4zLm9wdGlvbnMubm9kZVNpemVGYWN0b3I7CgogICAg%0ALy9zZXQgdGhlIFggYW5kIFkgc2NhbGVzCiAgICBuMy54U2NhbGUgPSBkMy5zY2Fs%0AZS5saW5lYXIoKQogICAgICAuZG9tYWluKFtuMy50aW1lSW5kZXhbMF0ucmVuZGVy%0ARGF0YS5ncmFwaC54bGltWzBdLG4zLnRpbWVJbmRleFswXS5yZW5kZXJEYXRhLmdy%0AYXBoLnhsaW1bMV1dKQogICAgICAucmFuZ2UoWzAsIHBpeGVsU3BhY2VdKTsKCiAg%0AICBuMy55U2NhbGUgPSBkMy5zY2FsZS5saW5lYXIoKQogICAgICAuZG9tYWluKFtu%0AMy50aW1lSW5kZXhbMF0ucmVuZGVyRGF0YS5ncmFwaC55bGltWzBdLG4zLnRpbWVJ%0AbmRleFswXS5yZW5kZXJEYXRhLmdyYXBoLnlsaW1bMV1dKQogICAgICAucmFuZ2Uo%0AW3BpeGVsU3BhY2UsIDBdKTsKCiAgICAvL3Jlc2V0IHpvb20gdHJhbnNsYXRlIGJh%0Ac2VkIG9uIG1hcmdpbnMKICAgIG4zLnpvb20udHJhbnNsYXRlKFttYXJnaW4ueCwg%0AbWFyZ2luLnkrbWFpbk1hcmdpbl0pCgogICAgLy9DYWNoZSBoZWlnaHQgYW5kIG9m%0AZnNldCB0byB1c2UgZm9yIHRvb2x0aXAgbW92ZW1lbnQKICAgIG4zLmhlaWdodCA9%0AIG4zLmRvbVRhcmdldC5zZWxlY3QoJy5ncmFwaCcpLm5vZGUoKS5vZmZzZXRIZWln%0AaHQKICAgIG4zLm9mZnNldCA9ICQobjMuZG9tVGFyZ2V0LnNlbGVjdCgnLmdyYXBo%0AJykubm9kZSgpKS5vZmZzZXQoKTsKICAgIG4zLmN0bSA9IG4zLmNvbnRhaW5lci5u%0Ab2RlKCkuZ2V0U2NyZWVuQ1RNKCk7CiAgfQogIAogIC8qKiBjcmVhdGVzIHRoZSBv%0AcHRpb25hbCBkYXRhQ2hvb3NlciBlbGVtZW50IHRvIGJlIHVzZWQgZm9yIHNsZWN0%0AaW5nIGFtb25nIG11bHRpcGxlIEpTT04gZmlsZXMgZm9yIGRlYnVnZ2luZyAqLwog%0AIG4zLnByb3RvdHlwZS5jcmVhdGVEYXRhQ2hvb3NlciA9IGZ1bmN0aW9uKCkgewog%0AICAgdmFyIG4zID0gdGhpczsKCiAgICB2YXIgZGl2ID0gbjMuZG9tVGFyZ2V0LmFw%0AcGVuZCgnZGl2JykuYXR0cignY2xhc3MnLCAnZGF0YV9jaG9vc2VyX2NvbnRhaW5l%0AcicpCiAgICBkaXYuYXBwZW5kKCdzZWxlY3QnKS5hdHRyKCdjbGFzcycsICdkYXRh%0AX2Nob29zZXInKQogICAgZGl2LmFwcGVuZCgnYScpLmF0dHIoeydjbGFzcyc6ICd2%0AaWRlb19saW5rJywgJ3RhcmdldCc6ICdfYmxhbmsnfSkuaHRtbCgnVmlkZW8nKTsK%0ACiAgICB2YXIgc2V0VmlkTGluayA9IGZ1bmN0aW9uKHVybCkgewogICAgICBkaXYu%0Ac2VsZWN0KCcudmlkZW9fbGluaycpLmF0dHIoJ2hyZWYnLCB1cmwucmVwbGFjZSgn%0ALmpzb24nLCAnLm1wNCcpKQogICAgfQogICAgJC5nZXQobjMub3B0aW9ucy5kYXRh%0AQ2hvb3NlckRpciwgZnVuY3Rpb24oZGF0YSl7CiAgICAgIGRpdi5zZWxlY3QoJy5k%0AYXRhX2Nob29zZXInKS5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7CiAgICAgICAg%0AdmFyIHVybCA9ICQodGhpcykudmFsKCk7CiAgICAgICAgbjMubG9hZERhdGEodXJs%0AKTsKICAgICAgICBzZXRWaWRMaW5rKHVybCkKICAgICAgfSkKICAgICAgdmFyIG1h%0AdGNoZXMgPSBkYXRhLm1hdGNoKC88dGQ+PGEgaHJlZj0iW14iXSoiL2cpOwogICAg%0AICAkLmVhY2gobWF0Y2hlcywgZnVuY3Rpb24oaSwgbSkgewogICAgICAgIHZhciB1%0AcmwgPSBtLm1hdGNoKC9ocmVmPSIoW14iXSopIi8pWzFdOwogICAgICAgIGlmICh1%0AcmwubWF0Y2goLy5qc29uJC8pKSB7CiAgICAgICAgICBkaXYuc2VsZWN0KCcuZGF0%0AYV9jaG9vc2VyJykuYXBwZW5kKCdvcHRpb24nKS5hdHRyKCd2YWx1ZScsIG4zLm9w%0AdGlvbnMuZGF0YUNob29zZXJEaXIrdXJsKS5odG1sKHVybCk7CiAgICAgICAgfQog%0AICAgICAgIGlmIChpID09IDEpIHsKICAgICAgICAgIHNldFZpZExpbmsodXJsKTsK%0AICAgICAgICB9CiAgICAgIH0pCiAgICB9KQogIH0KICAKICAvKiogY3JlYXRlcyB0%0AaGUgb3B0aW9uYWwgbWVudSBlbGVtZW50IHRvIGJlIHVzZWQgZm9yIGNvbnRyb2xs%0AaW5nIHNldHRpbmdzIGFuZCBkaXNwbGF5aW5nICdhYm91dCcgbGluayAqLwogIG4z%0ALnByb3RvdHlwZS5jcmVhdGVNZW51ID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgbjMg%0APSB0aGlzOwogICAgaWYgKGQzLnNlbGVjdCgnI25kdHYtc3ZnLW1lbnUtaWNvbnMn%0AKS5lbXB0eSgpKSB7CiAgICAgICQoJ2JvZHknKS5wcmVwZW5kKAogICAgICAnPHN2%0AZyBpZD0ibmR0di1zdmctbWVudS1pY29ucyIgZGlzcGxheT0ibm9uZSIgdmVyc2lv%0Abj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5z%0AOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTc2%0AIiBoZWlnaHQ9IjMyIiB2aWV3Qm94PSIwIDAgMTc2IDMyIj4nKwogICAgICAnICA8%0AZGVmcz4nKwogICAgICAnICAgIDxnIGlkPSJpY29uLWxpc3QiPjxwYXRoIGQ9Ik0y%0ANS42IDE0LjRoLTE5LjJjLTAuODgzIDAtMS42IDAuNzE3LTEuNiAxLjZzMC43MTcg%0AMS42IDEuNiAxLjZoMTkuMmMwLjg4NSAwIDEuNi0wLjcxNyAxLjYtMS42cy0wLjcx%0ANS0xLjYtMS42LTEuNnpNNi40IDExLjJoMTkuMmMwLjg4NSAwIDEuNi0wLjcxNyAx%0ALjYtMS42cy0wLjcxNS0xLjYtMS42LTEuNmgtMTkuMmMtMC44ODMgMC0xLjYgMC43%0AMTctMS42IDEuNnMwLjcxNyAxLjYgMS42IDEuNnpNMjUuNiAyMC44aC0xOS4yYy0w%0ALjg4MyAwLTEuNiAwLjcxNS0xLjYgMS42czAuNzE3IDEuNiAxLjYgMS42aDE5LjJj%0AMC44ODUgMCAxLjYtMC43MTUgMS42LTEuNnMtMC43MTUtMS42LTEuNi0xLjZ6Ij48%0AL3BhdGg+PC9nPicrCiAgICAgICcgIDwvZGVmcz4nKwogICAgICAnPC9zdmc+Jyk7%0ACiAgICB9CiAgICB2YXIgZGl2ID0gbjMuZG9tVGFyZ2V0LnNlbGVjdCgnLmdyYXBo%0AJykuYXBwZW5kKCdkaXYnKS5hdHRyKCdjbGFzcycsICduZHR2LW1lbnUtY29udGFp%0AbmVyJyk7CiAgICBkaXYuaHRtbCgKICAgICAgIjxkaXYgY2xhc3M9J25kdHYtbWVu%0AdS1pY29uJz4iKwogICAgICAiIDxzdmcgY2xhc3M9J2ljb24gbWVudS1jb250cm9s%0AJyB2aWV3Qm94PScwIDAgMzIgMzInPjx1c2UgeGxpbms6aHJlZj0nI2ljb24tbGlz%0AdCc+PC91c2U+PC9zdmc+IisKICAgICAgIjwvZGl2PiIrCiAgICAgICI8ZGl2IGNs%0AYXNzPSduZHR2LW1lbnUnPjwvZGl2PiIKICAgICkKICAgIHZhciBtZW51ID0gbjMu%0AZG9tVGFyZ2V0LnNlbGVjdCgnLm5kdHYtbWVudScpOwoKICAgIGlmIChuMy5vcHRp%0Ab25zLmR1cmF0aW9uQ29udHJvbCkgeyAKICAgICAgdmFyIGR1cmF0aW9uQ29udHJv%0AbCA9IG1lbnUuYXBwZW5kKCdkaXYnKS5hdHRyKCdjbGFzcycsICdtZW51LWl0ZW0g%0AZHVyYXRpb25Db250cm9sQ29udGFpbmVyJyk7CiAgICAgIGR1cmF0aW9uQ29udHJv%0AbC5hcHBlbmQoJ3NwYW4nKS5hdHRyKCdjbGFzcycsICdtZW51LWxhYmVsJykuaHRt%0AbCgnQW5pbWF0aW9uIER1cmF0aW9uJyk7CiAgICAgIHZhciBkdXJhdGlvblNsaWRl%0AciA9IGQzLnNsaWRlcigpLm1pbigwKS5tYXgoOCkuYXhpcyhuZXcgZDMuc3ZnLmF4%0AaXMoKS50aWNrcyg1KSkudmFsdWUobjMub3B0aW9ucy5hbmltYXRpb25EdXJhdGlv%0Abi8xMDAwKTsKICAgICAgZHVyYXRpb25Db250cm9sLmFwcGVuZCgnZGl2JykuYXR0%0AcignY2xhc3MnLCAnZHVyYXRpb25Db250cm9sJykuY2FsbChkdXJhdGlvblNsaWRl%0AcikKICAgICAgZHVyYXRpb25TbGlkZXIub24oJ3NsaWRlJywgZnVuY3Rpb24oZXZ0%0ALCB2YWx1ZSl7CiAgICAgICAgbjMub3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbiA9%0AIHZhbHVlKjEwMDA7CiAgICAgICAgaWYobjMub3B0aW9ucy5zbGlkZXIpIHsKICAg%0AICAgICAgIG4zLnNsaWRlci5hbmltYXRlKG4zLm9wdGlvbnMuYW5pbWF0aW9uRHVy%0AYXRpb24pCiAgICAgICAgfQogICAgICB9KQogICAgfQoKICAgIG1lbnUuYXBwZW5k%0AKCJkaXYiKS5hdHRyKCdjbGFzcycsICdtZW51LWl0ZW0nKS5odG1sKCI8YSBocmVm%0APSdodHRwczovL2dpdGh1Yi5jb20vbWljaGFsZ20vbmR0di1kMy9ibG9iL21hc3Rl%0Aci9SRUFETUUubWQnIHRhcmdldD0nX2JsYW5rJz5BYm91dCBORFRWLUQzPC9hPjwv%0AZGl2PiIpOwogICAgbjMuZG9tVGFyZ2V0LnNlbGVjdCgnLm5kdHYtbWVudS1pY29u%0AJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICQobWVudS5ub2RlKCkp%0ALmZhZGVUb2dnbGUoMjAwKTsKICAgICAgJCh0aGlzKS50b2dnbGVDbGFzcygnbWVu%0AdS1hY3RpdmUnKQogICAgfSkKICB9CgogIC8qKiBjcmVhdGVzIHRoZSBvcHRpb25h%0AbCBwbGF5IGNvbnRyb2xzIGRpdiB1c2luZyBzdmcgaWNvbnMgYW5kIGRlZmluZXMg%0AdGhlIGF0dGFjaGVkIGV2ZW50cyAqLwogIG4zLnByb3RvdHlwZS5jcmVhdGVQbGF5%0AQ29udHJvbHMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBuMyA9IHRoaXM7CgogICAg%0ALy9kZWZpbmUgU1ZHIGljb25zIHRvIGJlIHVzZWQgaW4gdGhlIHBsYXkgY29udHJv%0AbGxlcgogICAgaWYgKGQzLnNlbGVjdCgnI25kdHYtc3ZnLWljb25zJykuZW1wdHko%0AKSkgewogICAgICAkKCdib2R5JykucHJlcGVuZCgKICAgICAgJzxzdmcgaWQ9Im5k%0AdHYtc3ZnLWljb25zIiBkaXNwbGF5PSJub25lIiB2ZXJzaW9uPSIxLjEiIHhtbG5z%0APSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6%0ALy93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIxNzYiIGhlaWdodD0iMzIi%0AIHZpZXdCb3g9IjAgMCAxNzYgMzIiPicrCiAgICAgICcgIDxkZWZzPicrCiAgICAg%0AICcgICAgPGcgaWQ9Imljb24tcGxheSI+PHBhdGggY2xhc3M9InBhdGgxIiBkPSJN%0AMjYuNzE3IDE1LjE3OWwtMTMuNjk4LTguNDg2Yy0wLjk5OC0wLjY1NC0xLjgxNC0w%0ALjE3MS0xLjgxNCAxLjA3MnYxNi40NzRjMCAxLjI0MyAwLjgxOCAxLjcyNSAxLjgx%0ANCAxLjA3MGwxMy42OTktOC40ODZjMCAwIDAuNDg2LTAuMzQyIDAuNDg2LTAuODIy%0ALTAuMDAyLTAuNDc4LTAuNDg4LTAuODIxLTAuNDg4LTAuODIxeiI+PC9wYXRoPjwv%0AZz4nKwogICAgICAnICAgIDxnIGlkPSJpY29uLXBhdXNlIj48cGF0aCBjbGFzcz0i%0AcGF0aDEiIGQ9Ik0yMS42IDQuOGMtMS41OSAwLTIuODggMC40OS0yLjg4IDIuMDgw%0AdjE4LjI0YzAgMS41OSAxLjI5IDIuMDgwIDIuODggMi4wODBzMi44OC0wLjQ5IDIu%0AODgtMi4wODB2LTE4LjI0YzAtMS41OS0xLjI5LTIuMDgwLTIuODgtMi4wODB6TTEw%0ALjQgNC44Yy0xLjU5IDAtMi44OCAwLjQ5LTIuODggMi4wODB2MTguMjRjMCAxLjU5%0AIDEuMjkgMi4wODAgMi44OCAyLjA4MHMyLjg4LTAuNDkgMi44OC0yLjA4MHYtMTgu%0AMjRjMC0xLjU5LTEuMjktMi4wODAtMi44OC0yLjA4MHoiPjwvcGF0aD48L2c+JysK%0AICAgICAgJyAgICA8ZyBpZD0iaWNvbi1maXJzdCI+PHBhdGggY2xhc3M9InBhdGgx%0AIiBkPSJNMTEuOTc2IDE2YzAgMC40MTMgMC40MTkgMC43MDcgMC40MTkgMC43MDds%0AMTEuNjQgNy4zMWMwLjg2MiAwLjU2NSAxLjU2NSAwLjE0OSAxLjU2NS0wLjkydi0x%0ANC4xOTVjMC0xLjA3MC0wLjcwMi0xLjQ4Ni0xLjU2NS0wLjkyMmwtMTEuNjQgNy4z%0AMTJjMCAwLjAwMi0wLjQxOSAwLjI5NC0wLjQxOSAwLjcwN3pNNi40IDguNTcxdjE0%0ALjg1OGMwIDEuNDIxIDAuOTc5IDEuODU2IDIuNCAxLjg1NnMyLjQtMC40MzUgMi40%0ALTEuODU0di0xNC44NTljMC0xLjQyMi0wLjk3OS0xLjg1OC0yLjQtMS44NThzLTIu%0ANCAwLjQzNy0yLjQgMS44NTh6Ij48L3BhdGg+PC9nPicrCiAgICAgICcgIDwvZGVm%0Acz4nKwogICAgICAnPC9zdmc+Jyk7CiAgICB9CiAgICB2YXIgZGl2ID0gbjMuZG9t%0AVGFyZ2V0LnNlbGVjdCgnLmNvbnRyb2xzJykuYXBwZW5kKCdkaXYnKS5hdHRyKCdj%0AbGFzcycsICdwbGF5LWNvbnRyb2wtY29udGFpbmVyJyk7CiAgICBkaXYuaHRtbCgK%0AICAgICAgIjxkaXYgY2xhc3M9J3N0ZXAtYmFjay1jb250cm9sJz48c3ZnIGNsYXNz%0APSdpY29uJyB3aWR0aD0nMzInIGhlaWdodD0nMzInIHZpZXdCb3g9JzAgMCAzMiAz%0AMic+PHVzZSB4bGluazpocmVmPScjaWNvbi1maXJzdCc+PC91c2U+PC9zdmc+PC9k%0AaXY+IisKICAgICAgIjxkaXYgY2xhc3M9J3BsYXktYmFjay1jb250cm9sJz48c3Zn%0AIGNsYXNzPSdpY29uJyB3aWR0aD0nMzInIGhlaWdodD0nMzInIHZpZXdCb3g9JzAg%0AMCAzMiAzMic+PGcgdHJhbnNmb3JtPSdyb3RhdGUoMTgwLCAxNiwgMTYpJz48dXNl%0AIHhsaW5rOmhyZWY9JyNpY29uLXBsYXknPjwvdXNlPjwvZz48L3N2Zz48L2Rpdj4i%0AKwogICAgICAiPGRpdiBjbGFzcz0ncGF1c2UtY29udHJvbCc+PHN2ZyBjbGFzcz0n%0AaWNvbicgd2lkdGg9JzMyJyBoZWlnaHQ9JzMyJyB2aWV3Qm94PScwIDAgMzIgMzIn%0APjx1c2UgeGxpbms6aHJlZj0nI2ljb24tcGF1c2UnPjwvdXNlPjwvc3ZnPjwvZGl2%0APiIrCiAgICAgICI8ZGl2IGNsYXNzPSdwbGF5LWZvcndhcmQtY29udHJvbCc+PHN2%0AZyBjbGFzcz0naWNvbicgd2lkdGg9JzMyJyBoZWlnaHQ9JzMyJyB2aWV3Qm94PScw%0AIDAgMzIgMzInPjx1c2UgeGxpbms6aHJlZj0nI2ljb24tcGxheSc+PC91c2U+PC9z%0Admc+PC9kaXY+IisKICAgICAgIjxkaXYgY2xhc3M9J3N0ZXAtZm9yd2FyZC1jb250%0Acm9sJz48c3ZnIGNsYXNzPSdpY29uJyB3aWR0aD0nMzInIGhlaWdodD0nMzInIHZp%0AZXdCb3g9JzAgMCAzMiAzMic+PGcgdHJhbnNmb3JtPSdyb3RhdGUoMTgwLCAxNiwg%0AMTYpJz48dXNlIHhsaW5rOmhyZWY9JyNpY29uLWZpcnN0Jz48L3VzZT48L2c+PC9z%0Admc+PC9kaXY+IgogICAgKTsKCiAgICBkaXYuc2VsZWN0KCcuc3RlcC1iYWNrLWNv%0AbnRyb2wnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsgbjMuc3RlcEFuaW1hdGlv%0AbigxKTsgfSk7CiAgICBkaXYuc2VsZWN0KCcucGxheS1iYWNrLWNvbnRyb2wnKS5v%0AbignY2xpY2snLCBmdW5jdGlvbigpIHsgbjMucGxheUFuaW1hdGlvbigxKTsgfSk7%0ACiAgICBkaXYuc2VsZWN0KCcucGF1c2UtY29udHJvbCcpLm9uKCdjbGljaycsIGZ1%0AbmN0aW9uKCkgeyBuMy5lbmRBbmltYXRpb24oKTsgfSk7CiAgICBkaXYuc2VsZWN0%0AKCcucGxheS1mb3J3YXJkLWNvbnRyb2wnKS5vbignY2xpY2snLCBmdW5jdGlvbigp%0AIHsgbjMucGxheUFuaW1hdGlvbigpOyB9KTsKICAgIGRpdi5zZWxlY3QoJy5zdGVw%0ALWZvcndhcmQtY29udHJvbCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgeyBuMy5z%0AdGVwQW5pbWF0aW9uKCk7IH0pOwogIH0KICAKICAvKiogY3JlYXRlcyB0aGUgdGlt%0AZSBzbGlkZXIgY29udHJvbHMgYW5kIGRlZmluZXMgYXR0YWNoZWQgZXZlbnRzICov%0ACiAgbjMucHJvdG90eXBlLmNyZWF0ZVNsaWRlckNvbnRyb2wgPSBmdW5jdGlvbigp%0AIHsKICAgIHZhciBuMyA9IHRoaXM7CiAgICBuMy5kb21UYXJnZXQuc2VsZWN0KCcu%0AY29udHJvbHMnKS5hcHBlbmQoJ2RpdicpLmF0dHIoJ2NsYXNzJywgJ3NsaWRlci1j%0Ab250cm9sLWNvbnRhaW5lcicpLmFwcGVuZCgnZGl2JykuYXR0cignY2xhc3MnLCAn%0Ac2xpZGVyJyk7CiAgfQogCiAgLyoqIGxvYWQgYW5kIHByb2Nlc3MgdGhlIEpTT04g%0AZm9ybWF0dGVkIGRhdGEKICAqIEBwYXJhbSB7dXJsfEpTT059IC0gZWl0aGVyIGEg%0ATkRUVi1nZW5lcmF0ZWQgSlNPTiBvYmplY3QsIG9yIGEgVVJMIHBhdGggdG8gZmls%0AZSBjb250YWluaW5nIEpTT04gZGF0YQogICovCiAgbjMucHJvdG90eXBlLmxvYWRE%0AYXRhID0gZnVuY3Rpb24oZ3JhcGhEYXRhKSB7CiAgICB2YXIgbjMgPSB0aGlzOwog%0AICAgbjMuZW5kQW5pbWF0aW9uKCk7CiAgICBuMy5jdXJyVGltZSA9IDA7CiAgICBu%0AMy5zZWxlY3RlZE5ldHdvcmsgPSBudWxsOwogICAgbjMuc2VsZWN0ZWQgPSBudWxs%0AOwogICAgCiAgICB2YXIgcHJvY2Vzc0RhdGEgPSBmdW5jdGlvbihkYXRhKSB7CiAg%0AICAgIGNvbnNvbGUudGltZSgnbG9hZERhdGEnKTsKICAgICAgbjMuZ3JhcGggPSBk%0AYXRhLm5ldHdvcms7CiAgICAgIG4zLnRpbWVJbmRleCA9IGRhdGEucmVuZGVyOwog%0AICAgICBpZiAobjMub3B0aW9ucy5kYXRhQ2hvb3NlciAmJiAhICQuaXNQbGFpbk9i%0AamVjdChncmFwaERhdGEpKSB7CiAgICAgICAgJChuMy5kb21UYXJnZXQuc2VsZWN0%0AKCcuZGF0YV9jaG9vc2VyJykubm9kZSgpKS52YWwoZ3JhcGhEYXRhKTsKICAgICAg%0AICBuMy5kb21UYXJnZXQuc2VsZWN0KCcudmlkZW9fbGluaycpLmF0dHIoJ2hyZWYn%0ALCBncmFwaERhdGEucmVwbGFjZSgnLmpzb24nLCAnLm1wNCcpKQogICAgICB9CiAg%0AICAgIG4zLmNvbnRhaW5lci5zZWxlY3RBbGwoJy5lZGdlLCAubGFiZWwsIC5ub2Rl%0AJykucmVtb3ZlKCk7CgogICAgICBuMy5ub2RlQ29vcmRzID0ge307CgogICAgICAk%0ALmVhY2gobjMuZ3JhcGgudmFsLCBmdW5jdGlvbihpLCBuKSB7CiAgICAgICAgaWYg%0AKCEgJC5pc0VtcHR5T2JqZWN0KG4pKSB7CiAgICAgICAgICBuLmlkID0gaSsxOwog%0AICAgICAgIH0KICAgICAgICBuMy5ub2RlQ29vcmRzW24uaWRdID0gewogICAgICAg%0AICAgY29vcmQ6IFswLDBdLAogICAgICAgICAgYWN0aXZlOiBmYWxzZSwKICAgICAg%0AICAgIHNpemU6IDAsCiAgICAgICAgICBwb2ludHM6IFtdCiAgICAgICAgfQogICAg%0AICB9KQogICAgICAkLmVhY2gobjMuZ3JhcGgubWVsLCBmdW5jdGlvbihpLCBlKSB7%0ACiAgICAgICAgaWYgKCEgJC5pc0VtcHR5T2JqZWN0KGUpKSB7CiAgICAgICAgICBl%0ALmlkID0gaSsxOwogICAgICAgIH0KICAgICAgfSkKICAgICAgdmFyIHNsaWNlSW5m%0AbyA9IG4zLmdyYXBoLmdhbFsnc2xpY2UucGFyJ107CiAgICAgIAogICAgICBuMy5t%0AaW5UaW1lID0gc2xpY2VJbmZvLnN0YXJ0WzBdOwogICAgICBuMy5tYXhUaW1lID0g%0Ac2xpY2VJbmZvLmVuZFswXTsKICAgICAgbjMuaW50ZXJ2YWwgPSBzbGljZUluZm8u%0AaW50ZXJ2YWxbMF07CiAgICAgIHZhciB2YWxJbmRleCA9IHt9OwogICAgICAkLmVh%0AY2gobjMudGltZUluZGV4LCBmdW5jdGlvbihpLCB0KXsKICAgICAgICB2YWxJbmRl%0AeFt0LnN0YXJ0XSA9IGk7CiAgICAgICAgdC5yZW5kZXJEYXRhID0gbjMuZ2VuZXJh%0AdGVTbGljZVJlbmRlckRhdGEoaSk7CiAgICAgICAgZGVsZXRlIHQuZGF0YTsgLy9y%0AZW1vdmUgcmVkdW5kYW50IGRhdGEgdGhhdCB3ZSd2ZSBzdG9yZWQgaW4gcmVuZGVy%0ARGF0YQogICAgICB9KSAgICAgIAoKICAgICAgbjMudXBkYXRlRGltZW5zaW9ucygp%0AOwoKICAgICAgaWYobjMub3B0aW9ucy5zbGlkZXIpIHsKICAgICAgICB2YXIgc2xp%0AZGVyRGl2ID0gbjMuZG9tVGFyZ2V0LnNlbGVjdCgnLnNsaWRlcicpOwoKICAgICAg%0AICBzbGlkZXJEaXYuaHRtbCgnJyk7CgogICAgICAgIG4zLnNsaWRlciA9IGQzLnNs%0AaWRlcigpLmF4aXModHJ1ZSkuc3RlcChuMy5pbnRlcnZhbCk7CiAgICAgICAgbjMu%0Ac2xpZGVyLm1hcmdpbigzNSkKICAgICAgICBuMy5zbGlkZXIubWluKG4zLm1pblRp%0AbWUpCiAgICAgICAgbjMuc2xpZGVyLm1heChuMy5tYXhUaW1lK3NsaWNlSW5mb1sn%0AYWdncmVnYXRlLmR1ciddWzBdKQogICAgICAgIG4zLnNsaWRlci5hbmltYXRlKG4z%0ALm9wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb24pCiAgICAgICAgbjMuc2xpZGVyLnZh%0AbHVlKG4zLm1pblRpbWUpCiAgICAgICAgbjMuc2xpZGVyLmludGVydmFsKHNsaWNl%0ASW5mb1snYWdncmVnYXRlLmR1ciddWzBdKQogICAgICAgIG4zLnNsaWRlci5vbign%0Ac2xpZGUnLCBmdW5jdGlvbihleHQsIHZhbHVlKSB7CiAgICAgICAgICAvL0NoZWNr%0AIHRvIHNlZSBpZiBldmVudCBvcmlnaW5hdGVkIGZyb20gc2xpZGVyIGNvbnRyb2wg%0Ab3IgZWxzZXdoZXJlCiAgICAgICAgICB2YXIgZXZlbnQgPSBkMy5ldmVudDsKICAg%0AICAgICAgIGlmIChldmVudC50eXBlID09ICdkcmFnJyB8fCBkMy5zZWxlY3QoZXZl%0AbnQuY3VycmVudFRhcmdldCkuY2xhc3NlZCgnZDMtc2xpZGVyJykpIHsKICAgICAg%0AICAgICAgbjMuZW5kQW5pbWF0aW9uKCk7CiAgICAgICAgICAgIG4zLmFuaW1hdGVH%0AcmFwaChuMy5jdXJyVGltZSwgdmFsSW5kZXhbdmFsdWVdLCB0cnVlKTsKICAgICAg%0AICAgIH0KICAgICAgICB9KQogICAgICAgIAogICAgICAgIG4zLnNsaWRlci5vbign%0Ac2xpZGVlbmQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgIG4zLnNsaWRlci5hbmlt%0AYXRlKG4zLm9wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb24pOwogICAgICAgIH0pCiAg%0AICAgICAgc2xpZGVyRGl2Lm9uKCdtb3VzZWRvd24nLCBmdW5jdGlvbihlKSB7IAog%0AICAgICAgICAgbjMuc2xpZGVyLmFuaW1hdGUoMCk7CiAgICAgICAgfSkKCiAgICAg%0AICAgc2xpZGVyRGl2LmNhbGwobjMuc2xpZGVyKTsKICAgICAgfQogICAgICBjb25z%0Ab2xlLnRpbWVFbmQoJ2xvYWREYXRhJyk7CiAgICAgIGlmIChuMy5vcHRpb25zLmFu%0AaW1hdGVPbkxvYWQpIHsKICAgICAgICBuMy5wbGF5QW5pbWF0aW9uKCk7CiAgICAg%0AIH0gZWxzZSB7CiAgICAgICAgbjMudXBkYXRlR3JhcGgobjMub3B0aW9ucy5hbmlt%0AYXRpb25EdXJhdGlvbik7CiAgICAgIH0KICAgIH07CgogICAgaWYoJC5pc1BsYWlu%0AT2JqZWN0KGdyYXBoRGF0YSkpIHsKICAgICAgcHJvY2Vzc0RhdGEoZ3JhcGhEYXRh%0AKQogICAgfSBlbHNlIHsKICAgICAgJC5nZXRKU09OKGdyYXBoRGF0YSwgZnVuY3Rp%0Ab24oZGF0YSkgewogICAgICAgIHByb2Nlc3NEYXRhKGRhdGEpOwogICAgICB9KTsK%0AICAgIH0KICB9CgogIHZhciBjb2xvciA9IGQzLnNjYWxlLmNhdGVnb3J5MjAoKTsK%0ACiAgLyoqIEZvciBhIGdpdmVuIHRpbWUgc2xpY2UsIHByb2Nlc3MgdGltZUluZGV4%0AIGRhdGEgYW5kIGdlbmVyYXRlIHJlbmRlciBkYXRhLCBmaWxsaW5nIGluIGRlZmF1%0AbHRzIGFzIG5lY2Vzc2FyeQogICogQHBhcmFtIHtpbnRlZ2VyfSAtIHRoZSB0aW1l%0AIGluZGV4IHRvIHByb2Nlc3MKICAqIEBwcml2YXRlCiAgKi8KICBuMy5wcm90b3R5%0AcGUuZ2VuZXJhdGVTbGljZVJlbmRlckRhdGEgPSBmdW5jdGlvbih0aW1lKSB7CiAg%0AICB2YXIgbjMgPSB0aGlzOwoKICAgIHZhciBzbGljZVJlbmRlckRhdGEgPSB7CiAg%0AICAgIGdyYXBoOiB7fSwKICAgICAgbm9kZToge30sCiAgICAgIGVkZ2U6IHt9CiAg%0AICB9OwoKICAgIHZhciBkYXRhID0gbjMudGltZUluZGV4W3RpbWVdLmRhdGE7Cgog%0AICAgJC5lYWNoKFsnZ3JhcGgnLCAnbm9kZScsICdlZGdlJ10sIGZ1bmN0aW9uKGks%0AIHR5cGUpIHsKICAgICAgdmFyIHNvdXJjZUxpc3QgPSBbXTsKICAgICAgaWYgKHR5%0AcGUgPT0gJ2dyYXBoJykgewogICAgICAgIHNvdXJjZUxpc3QgPSBbbjMuZ3JhcGgu%0AZ2FsXTsKICAgICAgfSBlbHNlIGlmICh0eXBlID09ICdub2RlJykgewogICAgICAg%0AIHNvdXJjZUxpc3QgPSBuMy5ncmFwaC52YWw7CiAgICAgIH0gZWxzZSB7CiAgICAg%0AICAgc291cmNlTGlzdCA9IG4zLmdyYXBoLm1lbDsKICAgICAgfQoKICAgICAgJC5l%0AYWNoKHNvdXJjZUxpc3QsIGZ1bmN0aW9uKGksIGl0ZW0pIHsKICAgICAgICB2YXIg%0AaWQgPTA7CiAgICAgICAgdmFyIHByb3BlcnR5SW5kZXg7CiAgICAgICAgdmFyIGl0%0AZW1Qcm9wZXJ0aWVzID0ge307CgogICAgICAgIGlmICh0eXBlICE9ICdncmFwaCcp%0AIHsKICAgICAgICAgIGlkID0gaXRlbS5pZDsKICAgICAgICAgIHByb3BlcnR5SW5k%0AZXggPSBkYXRhLmFjdGl2ZVt0eXBlKydzJ11baWRdOwogICAgICAgIH0KCiAgICAg%0AICAgaWYgKHR5cGUgPT0gJ2dyYXBoJyB8fCBwcm9wZXJ0eUluZGV4ICE9PSB1bmRl%0AZmluZWQpIHsKICAgICAgICAgIGl0ZW1Qcm9wZXJ0aWVzLmlkID0gaWQ7CiAgICAg%0AICAgICAkLmVhY2gobmR0dlByb3BlcnRpZXNbdHlwZV0sIGZ1bmN0aW9uKHByb3Bl%0AcnR5LCBkZWYpIHsKICAgICAgICAgICAgdmFyIGxvb2t1cCA9IHByb3BlcnR5SW5k%0AZXg7CiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRlZjsKCiAgICAgICAgICAgIC8v%0ASWYgdGhlIHByb3BlcnR5IGxpc3QgaGFzIG9ubHkgb25lIHZhbHVlLCB3ZSBhcHBs%0AeSBpdCB0byBhbGwgaXRlbXMKICAgICAgICAgICAgaWYodHlwZW9mIGRhdGFbcHJv%0AcGVydHldICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhW3Byb3BlcnR5XS5sZW5ndGgg%0APT0gMSkgewogICAgICAgICAgICAgIGxvb2t1cCA9IDA7CiAgICAgICAgICAgIH0K%0AICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW3Byb3BlcnR5XSAhPT0gJ3VuZGVm%0AaW5lZCcgJiYgZGF0YVtwcm9wZXJ0eV1bbG9va3VwXSAhPT0gdW5kZWZpbmVkKSB7%0ACiAgICAgICAgICAgICAgdmFsdWUgPSBkYXRhW3Byb3BlcnR5XVtsb29rdXBdOwog%0AICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAocHJvcGVydHkgPT0gJ21haW4nIHx8%0AIHByb3BlcnR5ID09ICd4bGFiJykpIHsKICAgICAgICAgICAgICAgIHZhbHVlID0g%0AdmFsdWUuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgICAgfSBlbHNlIGlmICghIHZh%0AbHVlICYmIHByb3BlcnR5ID09ICdjb29yZCcpIHsKICAgICAgICAgICAgICAgIGNv%0AbnNvbGUubG9nKCdtaXNzaW5nIGNvb3JkaW5hdGVzIGZvciBub2RlICcraWQrICcg%0AYXQgdGltZSAnK3RpbWUrJyAoJytuMy50aW1lSW5kZXhbdGltZV0uc3RhcnQrJy0n%0AK24zLnRpbWVJbmRleFt0aW1lXS5lbmQrJyknKTsKICAgICAgICAgICAgICB9CiAg%0AICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAnZ3JhcGgnICYmIHR5cGVvZiBk%0AYXRhW3Byb3BlcnR5XSAhPT0gJ3VuZGVmaW5lZCcpIHsgLy9ncmFwaCBwcm9wZXJ0%0AaWVzIGdldCBhcHBsaWVkIGRpcmVjdGx5CiAgICAgICAgICAgICAgdmFsdWUgPSBk%0AYXRhW3Byb3BlcnR5XTsKICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eSA9%0APSAnbGFiZWwnICYmIHNsaWNlUmVuZGVyRGF0YS5ncmFwaC5kaXNwbGF5bGFiZWxz%0AKSB7CiAgICAgICAgICAgICAgdmFsdWUgPSBpZDsKICAgICAgICAgICAgfQogICAg%0AICAgICAgICBpZiAodmFsdWUgJiYgJC50eXBlKHZhbHVlKSA9PT0gJ3N0cmluZycg%0AJiYgdmFsdWUubWF0Y2goJ3JnYmEnKSkgewogICAgICAgICAgICAgIHZhciByZ2Jh%0AID0gdmFsdWUubWF0Y2goL15yZ2JhXCgoLiopLCA/KC4qKVwpJC8pOwogICAgICAg%0AICAgICAgIGlmIChyZ2JhKSB7CiAgICAgICAgICAgICAgICB2YWx1ZSA9ICJyZ2Io%0AIityZ2JhWzFdKyIpIjsKICAgICAgICAgICAgICAgIHZhciBvcGFjaXR5UHJvcCA9%0AIHByb3BlcnR5KyIuc3Ryb2tlLW9wYWNpdHkiOwogICAgICAgICAgICAgICAgaWYg%0AKHByb3BlcnR5ID09ICd2ZXJ0ZXguY29sJyB8fCBwcm9wZXJ0eSA9PSAnYmcnIHx8%0AIHByb3BlcnR5ID09ICdsYWJlbC5jb2wnKSB7CiAgICAgICAgICAgICAgICAgIG9w%0AYWNpdHlQcm9wID0gcHJvcGVydHkrIi5maWxsLW9wYWNpdHkiOwogICAgICAgICAg%0AICAgICAgfQogICAgICAgICAgICAgICAgaXRlbVByb3BlcnRpZXNbb3BhY2l0eVBy%0Ab3BdID0gcmdiYVsyXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAg%0AICAgICAgICAgLy8gaWYgKHByb3BlcnR5ID09ICdlZGdlLmx3ZCcpIHsKICAgICAg%0AICAgICAgICAvLyB2YWx1ZSA9IGlkKjAuMjsKICAgICAgICAgICAgLy8gfQogICAg%0AICAgICAgICAvLyBpZiAocHJvcGVydHkgPT0gJ2VkZ2UuY29sJyB8fCBwcm9wZXJ0%0AeSA9PSAndmVydGV4LmNvbCcgfHwgcHJvcGVydHkgPT0gJ2xhYmVsLmNvbCcpIHsK%0AICAgICAgICAgICAgLy8gICB2YWx1ZSA9IHR5cGUgPT0gJ2VkZ2UnID8gY29sb3Io%0AdGltZSkgOiBjb2xvcih0aW1lKzEpOwogICAgICAgICAgICAvLyB9CiAgICAgICAg%0AICAgIGl0ZW1Qcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IHZhbHVlOwogICAgICAgICAg%0AfSkKCiAgICAgICAgICBpZiAodHlwZSA9PSAnZWRnZScpIHsKICAgICAgICAgICAg%0AJC5lYWNoKFsnaW5sJywgJ291dGwnXSwgZnVuY3Rpb24oaSwgZGlyZWN0aW9uKSB7%0ACiAgICAgICAgICAgICAgdmFyIG90aGVyZGlyID0gZGlyZWN0aW9uID09ICdpbmwn%0AID8gJ291dGwnIDogJ2lubCc7CiAgICAgICAgICAgICAgaXRlbVByb3BlcnRpZXNb%0AZGlyZWN0aW9uXSA9IHsKICAgICAgICAgICAgICAgIGlkOiBpdGVtW2RpcmVjdGlv%0Abl1bMF0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc2xpY2VSZW5kZXJE%0AYXRhLm5vZGVbaXRlbVtkaXJlY3Rpb25dWzBdXS5saW5rc1tpdGVtW290aGVyZGly%0AXVswXV0gPSBpZDsKICAgICAgICAgICAgfSk7ICAgICAgCiAgICAgICAgICB9IGVs%0Ac2UgaWYgKHR5cGUgPT0gJ25vZGUnKSB7CiAgICAgICAgICAgIGl0ZW1Qcm9wZXJ0%0AaWVzLmxpbmtzID0ge307CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZSA9%0APSAnZ3JhcGgnKSB7CiAgICAgICAgICAgIHNsaWNlUmVuZGVyRGF0YVt0eXBlXSA9%0AIGl0ZW1Qcm9wZXJ0aWVzOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg%0Ac2xpY2VSZW5kZXJEYXRhW3R5cGVdW2lkXSA9IGl0ZW1Qcm9wZXJ0aWVzOwogICAg%0AICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAnbm9kZScpIHsKICAg%0AICAgICAgIG4zLm5vZGVDb29yZHNbaWRdLmFjdGl2ZSA9IGZhbHNlOwogICAgICAg%0AIH0KICAgICAgfSkKICAgIH0pCiAgICByZXR1cm4gc2xpY2VSZW5kZXJEYXRhOwog%0AIH0KCiAgLyoqIHVwZGF0ZXMgcmVuZGVyZGF0YSBub2RlIGNvb3JkaW5hdGVzIGJh%0Ac2VkIG9uIGN1cnJlbnQgc3RhdGUgb2YgZ3JhcGgsIGFuZCB1cGRhdGVzIG5vZGUg%0Ac3RhdGUgdHJhY2tlcgogICogQHBhcmFtIHtpbnRlZ2VyfSAtIHRoZSB0aW1lIGlu%0AZGV4IHRvIHByb2Nlc3MKICAqIEBwcml2YXRlCiAgKi8KICBuMy5wcm90b3R5cGUu%0AdXBkYXRlU2xpY2VSZW5kZXJEYXRhID0gZnVuY3Rpb24odGltZSkgewogICAgdmFy%0AIG4zID0gdGhpczsKCiAgICB2YXIgcHJldk5vZGVDb29yZHMgPSAkLmV4dGVuZCh7%0AfSwgbjMubm9kZUNvb3Jkcyk7CiAgICB2YXIgZGF0YSA9IG4zLnRpbWVJbmRleFt0%0AaW1lXS5yZW5kZXJEYXRhOwogICAgCiAgICAkLmVhY2gobjMubm9kZUNvb3Jkcywg%0AZnVuY3Rpb24oaWQsIG5vZGVDb29yZCkgewogICAgICB2YXIgbm9kZSA9IGRhdGEu%0Abm9kZVtpZF07CiAgICAgIGlmIChub2RlKSB7CiAgICAgICAgaWYgKCFub2RlLmNv%0Ab3JkKSB7CiAgICAgICAgICBub2RlLnJlbmRlckNvb3JkID0gbm9kZUNvb3JkLmNv%0Ab3JkOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBub2RlLnJlbmRlckNvb3Jk%0AID0gbm9kZS5jb29yZDsKICAgICAgICB9CiAgICAgICAgbjMubm9kZUNvb3Jkc1tp%0AZF0gPSB7CiAgICAgICAgICBjb29yZDogbm9kZS5yZW5kZXJDb29yZCwKICAgICAg%0AICAgIGFjdGl2ZTogdHJ1ZSwKICAgICAgICAgIHNpemU6IG5vZGVbJ3ZlcnRleC5j%0AZXgnXSwKICAgICAgICAgIHByZXZQb2ludHM6IHByZXZOb2RlQ29vcmRzW2lkXS5w%0Ab2ludHMsCiAgICAgICAgICAvL0ZJWE1FIC0gdGhpcyBjb3VsZCBicmVhayBpZiBh%0AIG5vZGUgaXMgZXZlciBjZW50ZXJlZCBhdCAwLDAKICAgICAgICAgIHByZXZDb29y%0AZDogcHJldk5vZGVDb29yZHNbaWRdLmNvb3JkWzBdICYmIHByZXZOb2RlQ29vcmRz%0AW2lkXS5jb29yZFsxXSA/IHByZXZOb2RlQ29vcmRzW2lkXS5jb29yZCA6IG51bGwK%0AICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbjMubm9kZUNvb3Jkc1tp%0AZF0uYWN0aXZlID0gZmFsc2U7CiAgICAgIH0KICAgIH0pOwogICAgJC5lYWNoKGRh%0AdGEuZWRnZSwgZnVuY3Rpb24oaWQsIGVkZ2UpewogICAgICAkLmVhY2goWydpbmwn%0ALCAnb3V0bCddLCBmdW5jdGlvbihpLCBkaXJlY3Rpb24pewogICAgICAgIHZhciBu%0Ab2RlaWQgPSBlZGdlW2RpcmVjdGlvbl0uaWQ7CiAgICAgICAgdmFyIHByZXZDb29y%0AZCA9IHByZXZOb2RlQ29vcmRzW25vZGVpZF07CiAgICAgICAgdmFyIGNvb3JkcyA9%0AIG4zLm5vZGVDb29yZHNbbm9kZWlkXSB8fCBwcmV2Q29vcmQ7CiAgICAgICAgZWRn%0AZVtkaXJlY3Rpb25dID0gewogICAgICAgICAgaWQ6IG5vZGVpZCwKICAgICAgICAg%0AIGNvb3JkczogY29vcmRzLAogICAgICAgICAgcHJldlBvaW50czpwcmV2Q29vcmQu%0AcG9pbnRzLAogICAgICAgICAgLy9JZiB0aGUgbm9kZSBpcyBuZXdseSBhY3RpdmUs%0AIHVzZSB0aGUgY3VycmVudCBjb29yZGluYXRlcyBmb3IgdGhlIHN0YXJ0IHZhbHVl%0AcwogICAgICAgICAgc3RhcnRDb29yZHM6ICEgcHJldkNvb3JkLmFjdGl2ZSA/IGNv%0Ab3JkcyA6IHByZXZDb29yZAogICAgICAgIH0KICAgICAgfSkKICAgIH0pCiAgICBy%0AZXR1cm4gZGF0YTsKICB9CgogIC8qKiBjcmVhdGUgYSBwYXRoIGRlc2NyaXB0aW9u%0AcyBvbiB0aGUgZ2l2ZW4gZGF0YSBzZWxlY3Rpb24KICAqIEBwYXJhbSB7b2JqZWN0%0AfSAtIHRoZSBEMyBkYXRhIHNlbGVjdGlvbgogICogQHBhcmFtIHtORFRWX0QzfQog%0AICogQHBhcmFtIHtib29sZWFufSAtIElmIHRydWUsIHBvc2l0aW9ucyBlbmQgb2Yg%0AbGluZSBvZmZzZXQgb2Ygbm9kZSByYWRpdXMgdG8gYWNjb21vZGF0ZSBhcnJvd2hl%0AYWQgCiAgKiBAcGFyYW0ge2Jvb2xlYW59IC0gSWYgdHJ1ZSwgZHJhd3MgcGF0aCB1%0Ac2luZyBjdXJyZW50IG5vZGUgcG9zaXRpb25zIChiZWZvcmUgYW5pbWF0aW9uIGJl%0AZ2lucykKICAqIEBwcml2YXRlCiAgKi8KICBuMy5wcm90b3R5cGUuZHJhd0VkZ2Ug%0APSBmdW5jdGlvbihzZWxlY3Rpb24sIG4zLCB1c2VhcnJvd3MsIHN0YXJ0KSB7CiAg%0AICBzZWxlY3Rpb24uYXR0cih7CiAgICAgIGQ6IGZ1bmN0aW9uKGQpIHsKICAgICAg%0AICB2YXIgdHlwZSA9IHN0YXJ0ID8gJ3N0YXJ0Q29vcmRzJyA6ICdjb29yZHMnOwoK%0AICAgICAgICB2YXIgc3RhcnROb2RlID0gZC5vdXRsW3R5cGVdOwogICAgICAgIHZh%0AciBlbmROb2RlID0gZC5pbmxbdHlwZV07CiAgICAgICAgdmFyIHN0YXJ0Q29vcmRz%0AID0gW24zLnhTY2FsZShzdGFydE5vZGUuY29vcmRbMF0pLCBuMy55U2NhbGUoc3Rh%0AcnROb2RlLmNvb3JkWzFdKV07CiAgICAgICAgdmFyIGVuZENvb3JkcyA9IFtuMy54%0AU2NhbGUoZW5kTm9kZS5jb29yZFswXSksIG4zLnlTY2FsZShlbmROb2RlLmNvb3Jk%0AWzFdKV07CgogICAgICAgIGlmKHVzZWFycm93cyB8fCBuZHR2UHJvcGVydGllcy5n%0AcmFwaC5lZGdlT2Zmc2V0KSB7CiAgICAgICAgICB2YXIgYXJyb3dPZmZzZXQgPSB1%0Ac2VhcnJvd3MgPyBzY2FsZUFycm93aGVhZHMoZCkqZFsnZWRnZS5sd2QnXSA6IDA7%0ACiAgICAgICAgICBzdGFydENvb3JkcyA9IGZpbmROb2RlSW50ZXJzZWN0aW9uKG4z%0ALCBkLm91dGwuaWQsIGVuZENvb3JkcywgbmR0dlByb3BlcnRpZXMuZ3JhcGguZWRn%0AZU9mZnNldCwgc3RhcnQpCiAgICAgICAgICBlbmRDb29yZHMgPSBmaW5kTm9kZUlu%0AdGVyc2VjdGlvbihuMywgZC5pbmwuaWQsIHN0YXJ0Q29vcmRzLCBhcnJvd09mZnNl%0AdCtuZHR2UHJvcGVydGllcy5ncmFwaC5lZGdlT2Zmc2V0LCBzdGFydCkKICAgICAg%0AICB9CiAgICAgICAgZFsnY3VycmVudENvb3JkcyddID0gW3N0YXJ0Q29vcmRzLCBl%0AbmRDb29yZHNdOwogICAgICAgIHJldHVybiAnTSAnK3N0YXJ0Q29vcmRzWzBdLnRv%0ARml4ZWQoMSkrJyAnK3N0YXJ0Q29vcmRzWzFdLnRvRml4ZWQoMSkrJyBMICcrZW5k%0AQ29vcmRzWzBdLnRvRml4ZWQoMSkrJyAnK2VuZENvb3Jkc1sxXS50b0ZpeGVkKDEp%0AOyAgICAgCiAgICAgIH0KICAgIH0pCiAgfQoKICAvKiogaW5pdGlhbGl6ZXMgYSBE%0AMyBsaW5lIGRyYXdpbmcgZnVuY3Rpb24KICAqIEBwcml2YXRlICovCiAgdmFyIGRy%0AYXdMaW5lID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gZDMuc3ZnLmxpbmUoKQog%0AICAgICAueChmdW5jdGlvbihkKXtyZXR1cm4gZFswXTt9KQogICAgICAueShmdW5j%0AdGlvbihkKXtyZXR1cm4gZFsxXTt9KQogIH0KICAKICAvKiogb2Zmc2V0IGEgbGlu%0AZSBiZXR3ZWVuIHR3byBnaXZlbiBwb2ludHMgYnkgdGhlIHNwZWNpZmllZCBhbW91%0AbnQuIHJldHVybnMgdGhlIG5ldyB0YXJnZXQgcG9pbnQKICAqIEBwYXJhbSB7cG9p%0AbnR9IC0gdGhlIG9yaWdpbiBwb2ludAogICogQHBhcmFtIHtwb2ludH0gLSB0aGUg%0AdGFyZ2V0IHBvaW50CiAgKiBAcGFyYW0ge251bWJlcn0gLSB0aGUgb2Zmc2V0IGFt%0Ab3VudCAoYXMgbGVuZ3RoIG9mIGxpbmUpCiAgKiBAcHJpdmF0ZSAqLwogIHZhciBv%0AZmZzZXRMaW5lID0gZnVuY3Rpb24ocG9pbnRBLCBwb2ludEIsIG9mZnNldCkgewog%0AICAgcG9pbnRBID0gcG9pbnRBLm1hcChwYXJzZUZsb2F0KTsKICAgIHBvaW50QiA9%0AIHBvaW50Qi5tYXAocGFyc2VGbG9hdCk7CgogICAgdmFyIHhsZW4gPSBwb2ludEJb%0AMF0gLSBwb2ludEFbMF07CiAgICB2YXIgeWxlbiA9IHBvaW50QlsxXSAtIHBvaW50%0AQVsxXTsKCiAgICAvLyBEZXRlcm1pbmUgaHlwb3RlbnVzZSBsZW5ndGgKICAgIHZh%0AciBobGVuID0gTWF0aC5zcXJ0KE1hdGgucG93KHhsZW4sMikgKyBNYXRoLnBvdyh5%0AbGVuLDIpKTsKCiAgICAvLyBEZXRlcm1pbmUgdGhlIHJhdGlvIGJldHdlZW4gdGhl%0AIHNob3J0ZW5lZCB2YWx1ZSBhbmQgdGhlIGZ1bGwgaHlwb3RlbnVzZS4KICAgIHZh%0AciByYXRpbyA9IChobGVuIC0gb2Zmc2V0KSAvIGhsZW47CgogICAgLy9JZiB0aGUg%0AcmF0aW8gaXMgaW52YWxpZCwganVzdCB1c2UgdGhlIG9yaWdpbmFsIGNvb3JkaW5h%0AdGVzCiAgICBpZiAoJC5pc051bWVyaWMocmF0aW8pKSB7IAogICAgICByZXR1cm4g%0AWwogICAgICAgIHBvaW50QVswXSArICh4bGVuICogcmF0aW8pLAogICAgICAgIHBv%0AaW50QVsxXSArICh5bGVuICogcmF0aW8pCiAgICAgIF07CiAgICB9IGVsc2Ugewog%0AICAgICByZXR1cm4gcG9pbnRCOwogICAgfQogIH0KCiAgdmFyIHNjYWxlQXJyb3do%0AZWFkcyA9IGZ1bmN0aW9uKGQpIHsKICAgIHJldHVybiA2LTIuNSpNYXRoLmF0YW4o%0AZFsnZWRnZS5sd2QnXSouNikKICB9CiAgLyoqIGZpbmQgdGhlIHBvaW50IGF0IHdo%0AaWNoIGEgbGluZSBkcmF3biBmcm9tIGEgcG9pbnQgdG8gdGhlIGNlbnRlciBvZiBh%0AIG5vZGUgaW50ZXJzZWN0cyB3aXRoIHRoZSBub2RlcyBib3JkZXIuCiAgKiByZXR1%0Acm5zIHRoZSBjb29yZGluYXRlLCBvcHRpb25hbGx5IGFwcGx5aW5nIGFuIG9mZnNl%0AdAogICogQHBhcmFtIHtuM30gbjMgLSB0aGUgbjMgb2JqZWN0CiAgKiBAcGFyYW0g%0Ae2lkfSBpZCAtIHRoZSBub2RlIGlkCiAgKiBAcGFyYW0ge3BvaW50fSBwb2ludCAt%0AIHRoZSBwb2ludCBvZiBvcmlnaW4gZm9yIHRoZSBsaW5lCiAgKiBAcGFyYW0geyBu%0AdW1iZXJ9IG9mZnNldCAtIHRoZSBvZmZzZXQgYW1vdW50IHRvIGFwcGx5CiAgKiBA%0AcGFyYW0ge2Jvb2xlYW59IHVzZVByZXYgLSBzaG91bGQgd2UgdXNlIHRoZSBjdXJy%0AZW50IHNsaWNlIGNvb3JkaW5hdGVzLCBvciB0aG9zZSBvZiB0aGUgcHJldmlvdXMg%0Ac3RhdGU/CiAgKiBAcHJpdmF0ZSAqLwogIHZhciBmaW5kTm9kZUludGVyc2VjdGlv%0AbiA9IGZ1bmN0aW9uKG4zLCBpZCwgcG9pbnQsIG9mZnNldCwgdXNlUHJldikgewog%0AICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7CiAgICB2YXIgbm9kZURhdGEgPSBuMy5u%0Ab2RlQ29vcmRzW2lkXTsKICAgIHZhciBjZW50ZXIgPSB1c2VQcmV2ICYmIG5vZGVE%0AYXRhLnByZXZDb29yZCA/IG5vZGVEYXRhLnByZXZDb29yZC5zbGljZSgpIDogbm9k%0AZURhdGEuY29vcmQuc2xpY2UoKTsKICAgIHZhciBpbnRlcnNlY3Rpb24gPSBbCiAg%0AICAgIG4zLnhTY2FsZShjZW50ZXJbMF0pLAogICAgICBuMy55U2NhbGUoY2VudGVy%0AWzFdKQogICAgXTsKCiAgICBpZiAobm9kZURhdGEucG9pbnRzKSB7CiAgICAgIHZh%0AciBwb2ludHMgPSB1c2VQcmV2ICYmIG5vZGVEYXRhLnByZXZQb2ludHMubGVuZ3Ro%0AID8gbm9kZURhdGEucHJldlBvaW50cyA6IG5vZGVEYXRhLnBvaW50czsKICAgICAg%0AaW50ZXJzZWN0aW9uID0gZmluZFBvbHlnb25JbnRlcnNlY3Rpb24ocG9pbnRzLCBp%0AbnRlcnNlY3Rpb24sIHBvaW50KTsKICAgIH0gZWxzZSB7CiAgICAgIG9mZnNldCAr%0APSBub2RlRGF0YS5zaXplICogbjMuYmFzZU5vZGVTaXplOwogICAgfQogICAgcmV0%0AdXJuIG9mZnNldExpbmUocG9pbnQsIGludGVyc2VjdGlvbiwgb2Zmc2V0KTsKICB9%0ACiAKICAvKiogZmluZCB0aGUgcG9pbnQgb2YgaW50ZXNlY3Rpb24gb2YgdHdvIGxp%0AbmVzIC0gYWRhcHRlZCBmcm9tIGh0dHA6Ly9wYXVsYm91cmtlLm5ldC9nZW9tZXRy%0AeS9wb2ludGxpbmVwbGFuZS8gCiAgKiBAcHJpdmF0ZSAqLwogIHZhciBmaW5kTGlu%0AZUludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGEsIGIsIGMsIGQpIHsKICAgIHZhciBk%0AZW5vbWluYXRvciA9IChkWzFdIC0gY1sxXSkgKiAoYlswXSAtIGFbMF0pIC0gKGRb%0AMF0gLSBjWzBdKSAqIChiWzFdIC0gYVsxXSk7CiAgICB2YXIgcHJlY2lzaW9uID0g%0AMTAwMDAwOwoKICAgIHZhciBvbmUgPSAoIChkWzBdIC0gY1swXSkgKiAoYVsxXSAt%0AIGNbMV0pIC0gKGRbMV0gLSBjWzFdKSAqIChhWzBdIC0gY1swXSkgKSAvIGRlbm9t%0AaW5hdG9yOwogICAgdmFyIHR3byA9ICggKGJbMF0gLSBhWzBdKSAqIChhWzFdIC0g%0AY1sxXSkgLSAoYlsxXSAtIGFbMV0pICogKGFbMF0gLSBjWzBdKSApIC8gZGVub21p%0AbmF0b3I7CiAgICBvbmUgPSBNYXRoLnJvdW5kKG9uZSAqIHByZWNpc2lvbikgLyBw%0AcmVjaXNpb247CiAgICB0d28gPSBNYXRoLnJvdW5kKHR3byAqIHByZWNpc2lvbikg%0ALyBwcmVjaXNpb247CgogICAgaWYgKG9uZSA8PSAxICYmIG9uZSA+PSAwICYmIHR3%0AbyA8PSAxICYmIHR3byA+PSAwKSB7CiAgICAgIHZhciB4ID0gYVswXSArIG9uZSAq%0AIChiWzBdIC0gYVswXSk7CiAgICAgIHZhciB5ID0gYVsxXSArIG9uZSAqIChiWzFd%0AIC0gYVsxXSk7IAogICAgICByZXR1cm4gW3gseV07CiAgICB9CiAgfQoKICAvKiog%0AZmluZCB0aGUgcG9pbnQgYXQgd2hpY2ggYSBsaW5lIGludGVyc2VjdCBhIHBvbHln%0Ab24KICAqIEBwcml2YXRlICovCiAgdmFyIGZpbmRQb2x5Z29uSW50ZXJzZWN0aW9u%0AID0gZnVuY3Rpb24ocG9pbnRzLCBjZW50ZXJBLCBjZW50ZXJCKSB7CiAgICB2YXIg%0AaW50ZXJzZWN0aW9uID0gW107CiAgICBmb3IodmFyIGkgPSAwOyBpPHBvaW50cy5s%0AZW5ndGgtMTsgaSsrKSB7CiAgICAgIHZhciByZXMgPSBmaW5kTGluZUludGVyc2Vj%0AdGlvbihwb2ludHNbaV0sIHBvaW50c1tpKzFdLCBjZW50ZXJBLCBjZW50ZXJCKTsK%0AICAgICAgaWYgKHJlcykgewogICAgICAgIGludGVyc2VjdGlvbiA9IHJlczsKICAg%0AICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKCEgaW50ZXJzZWN0aW9u%0ALmxlbmd0aCkgewogICAgICBpbnRlcnNlY3Rpb24gPSBmaW5kTGluZUludGVyc2Vj%0AdGlvbihwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSwgcG9pbnRzWzBdLCBjZW50ZXJB%0ALCBjZW50ZXJCKTsKICAgIH0KICAgIGlmICghIGludGVyc2VjdGlvbikgewogICAg%0AICBjb25zb2xlLmxvZygidW5hYmxlIHRvIGZpbmQgaW50ZXJzZWN0aW9uISB1c2lu%0AZyB0YXJnZXQgcG9pbnQiLCBwb2ludHMsIGNlbnRlckEsIGNlbnRlckIpOwoKICAg%0AICAgLy9kZWJ1Z2dpbmcgY29kZQogICAgICAvLyB2YXIgY29sb3IgPSBkMy5zY2Fs%0AZS5jYXRlZ29yeTEwKCkuZG9tYWluKGQzLnJhbmdlKDAsMTApKShncmFwaDIuY3Vy%0AclRpbWUpOwogICAgICAvLyBkMy5zZWxlY3QoJy5jb250YWluZXInKS5hcHBlbmQo%0AJ3BhdGgnKS5hdHRyKCdkJywgIk0gIitjZW50ZXJBWzBdICsgJyAnK2NlbnRlckFb%0AMV0gKyAnIEwgJysgY2VudGVyQlswXSArICcgJytjZW50ZXJCWzFdKS5zdHlsZSh7%0AJ3N0cm9rZSc6IGNvbG9yfSkKICAgICAgLy8gZm9yKGkgPSAwOyBpPHBvaW50cy5s%0AZW5ndGgtMTsgaSsrKSB7CiAgICAgIC8vICAgZDMuc2VsZWN0KCcuY29udGFpbmVy%0AJykuYXBwZW5kKCdwYXRoJykuYXR0cignZCcsICJNICIrcG9pbnRzW2ldWzBdICsg%0AJyAnK3BvaW50c1tpXVsxXSArICcgTCAnKyBwb2ludHNbaSsxXVswXSArICcgJytw%0Ab2ludHNbaSsxXVsxXSkuc3R5bGUoeydzdHJva2UnOiBjb2xvcn0pCiAgICAgIC8v%0AIH0KICAgICAgLy8gZDMuc2VsZWN0KCcuY29udGFpbmVyJykuYXBwZW5kKCdwYXRo%0AJykuYXR0cignZCcsICJNICIrcG9pbnRzW3BvaW50cy5sZW5ndGgtMV1bMF0gKyAn%0AICcrcG9pbnRzW3BvaW50cy5sZW5ndGgtMV1bMV0gKyAnIEwgJysgcG9pbnRzWzBd%0AWzBdICsgJyAnK3BvaW50c1swXVsxXSkuc3R5bGUoeydzdHJva2UnOiBjb2xvcn0p%0ACiAgICAgIHJldHVybiBjZW50ZXJCOyAvL0ZJWE1FIC0gdGhpcyBzaG91bGQgYmUg%0AZW5hYmxlZCBmb3IgcHJvZHVjdGlvbgoKICAgIH0KICAgIHJldHVybiBpbnRlcnNl%0AY3Rpb247CiAgfQoKICAvKiogY3JlYXRlcyBhIHBvbHlnb24tc2hhcGVkIHBhdGgg%0AYXR0cmlidXRlIGZvciBnaXZlbiBub2RlIHNlbGVjdGlvbgogICogQHBhcmFtIHtE%0AM3NlbGVjdGlvbn0KICAqIEBwYXJhbSB7TkRUVl9EM30KICAqIEBwcml2YXRlCiAg%0AKi8KICBuMy5wcm90b3R5cGUuZHJhd1BvbHlnb25Ob2RlID0gZnVuY3Rpb24oc2Vs%0AZWN0aW9uLCBuMyl7CiAgICAvLyBjb25zb2xlLnByb2ZpbGUoJ3BvbHltYXRoJykK%0AICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckRhdGEubikKICAgIHNlbGVjdGlvbi5h%0AdHRyKHsKICAgICAgcG9pbnRzOiBmdW5jdGlvbihkLCBpKSB7IAogICAgICAgIHZh%0AciBzaWRlcyA9IGRbJ3ZlcnRleC5zaWRlcyddOwogICAgICAgIHZhciBzaXplID0g%0AZFsndmVydGV4LmNleCddICogbjMuYmFzZU5vZGVTaXplOwogICAgICAgIHZhciBj%0Ab29yZHMgPSBkLnJlbmRlckNvb3JkOwogICAgICAgIHZhciByb3RhdGlvbiA9IGRb%0AJ3ZlcnRleC5yb3QnXTsKICAgICAgICB2YXIgY2VudGVyWCA9IG4zLnhTY2FsZShj%0Ab29yZHNbMF0pOwogICAgICAgIHZhciBjZW50ZXJZID0gbjMueVNjYWxlKGNvb3Jk%0Ac1sxXSk7CgogICAgICAgIHZhciByb3QgPSByb3RhdGlvbiAqIDIgKiBNYXRoLlBJ%0ALzM2MAogICAgICAgIHZhciBiYXNlID0gMS9zaWRlcyAqIDIgKiBNYXRoLlBJOwog%0AICAgICAgIG4zLm5vZGVDb29yZHNbZC5pZF0ucG9pbnRzID0gW107CgogICAgICAg%0AIGZvciAodmFyIGkgPSAxOyBpIDw9IHNpZGVzOyBpKyspIHsKICAgICAgICAgICAg%0AdmFyIGFuZyA9IGkgKiBiYXNlICsgcm90OwogICAgICAgICAgICB2YXIgeCA9IGNl%0AbnRlclggKyBzaXplICogTWF0aC5jb3MoYW5nKTsKICAgICAgICAgICAgdmFyIHkg%0APSBjZW50ZXJZICsgc2l6ZSAqIE1hdGguc2luKGFuZyk7CiAgICAgICAgICAgIG4z%0ALm5vZGVDb29yZHNbZC5pZF0ucG9pbnRzLnB1c2goW3gsIHldKTsKICAgICAgICB9%0ACiAgICAgICAgcmV0dXJuIG4zLm5vZGVDb29yZHNbZC5pZF0ucG9pbnRzLm1hcChm%0AdW5jdGlvbihwKSB7IHJldHVybiBwWzBdLnRvRml4ZWQoMSkrJywnK3BbMV0udG9G%0AaXhlZCgxKTsgfSkuam9pbignICcpOwogICAgICB9LAogICAgfSkKICAgIC8vIGNv%0AbnNvbGUucHJvZmlsZUVuZCgncG9seW1hdGgnKQogIH0KCiAgLyoqIGNyZWF0ZXMg%0AY2lyY2xlIGF0dHJpYnV0ZXMgZm9yIGdpdmVuIG5vZGUgc2VsZWN0aW9uCiAgKiBA%0AcGFyYW0ge0Qzc2VsZWN0aW9ufQogICogQHBhcmFtIHtORFRWX0QzfQogICogQHBy%0AaXZhdGUKICAqLwogIG4zLnByb3RvdHlwZS5kcmF3Q2lyY2xlTm9kZSA9IGZ1bmN0%0AaW9uKHNlbGVjdGlvbiwgbjMpewogICAgc2VsZWN0aW9uLmF0dHIoewogICAgICBj%0AeDogZnVuY3Rpb24oZCwgaSkgeyByZXR1cm4gbjMueFNjYWxlKGQucmVuZGVyQ29v%0AcmRbMF0pLnRvRml4ZWQoMSk7IH0sCiAgICAgIGN5OiBmdW5jdGlvbihkLCBpKSB7%0AIHJldHVybiBuMy55U2NhbGUoZC5yZW5kZXJDb29yZFsxXSkudG9GaXhlZCgxKTsg%0AfSwKICAgICAgcjogZnVuY3Rpb24oZCwgaSkgeyByZXR1cm4gKGRbJ3ZlcnRleC5j%0AZXgnXSAqIG4zLmJhc2VOb2RlU2l6ZSkudG9GaXhlZCgxKTsgfSwKICAgIH0pCiAg%0AfQoKICAvKiogcG9zaXRpb25zIHRoZSBub2RlIGxhYmVscwogICogQHBhcmFtIHtE%0AM3NlbGVjdGlvbn0KICAqIEBwYXJhbSB7TkRUVl9EM30KICAqIEBwcml2YXRlCiAg%0AKi8KICBuMy5wcm90b3R5cGUuZHJhd05vZGVMYWJlbCA9IGZ1bmN0aW9uKHNlbGVj%0AdGlvbiwgbjMpewogICAgc2VsZWN0aW9uLmF0dHIoewogICAgICB4OiBmdW5jdGlv%0AbihkLCBpKSB7IHJldHVybiAobjMueFNjYWxlKGQucmVuZGVyQ29vcmRbMF0pK24z%0ALm9wdGlvbnMubGFiZWxPZmZzZXQueCkudG9GaXhlZCgxKTsgfSwKICAgICAgeTog%0AZnVuY3Rpb24oZCwgaSkgeyByZXR1cm4gKG4zLnlTY2FsZShkLnJlbmRlckNvb3Jk%0AWzFdKStuMy5vcHRpb25zLmxhYmVsT2Zmc2V0LnkpLnRvRml4ZWQoMSk7IH0sCiAg%0AICB9KQogIH0KCiAgLyoqIGhpZ2hsaWdodHMgdGhlIGN1cnJlbnRseSBzZWxlY3Rl%0AZCBuZXR3b3JrICovCiAgbjMucHJvdG90eXBlLnVwZGF0ZVNlbGVjdGVkTmV0d29y%0AayA9IGZ1bmN0aW9uKCkgewogICAgdmFyIG4zID0gdGhpczsKICAgIHZhciBub2Rl%0AID0gbjMuc2VsZWN0ZWROZXR3b3JrOwogICAgJC5lYWNoKFsnbm9kZV9ncm91cCcs%0AICdlZGdlJywgJ2xhYmVsJ10sIGZ1bmN0aW9uKGksIGNsYXNzbmFtZSkgewogICAg%0AICB2YXIgc2VsZWN0aW9uID0gbjMuY29udGFpbmVyLnNlbGVjdEFsbCgnLicrY2xh%0Ac3NuYW1lKQogICAgICB2YXIgdHlwZSA9IGNsYXNzbmFtZSA9PSAnbm9kZV9ncm91%0AcCcgPyAnbm9kZScgOiBjbGFzc25hbWU7CiAgICAgIHZhciB1bnNlbGVjdGVkVGFy%0AZ2V0Q2xhc3MgPSAnLicrdHlwZSsncyc7CiAgICAgIHZhciBzZWxlY3RlZFRhcmdl%0AdENsYXNzID0gJy4nK3R5cGUrJ3Nfc2VsZWN0ZWQnOwogICAgICB2YXIgdW5zZWxl%0AY3RlZFRhcmdldCA9IG4zLmNvbnRhaW5lci5zZWxlY3QodW5zZWxlY3RlZFRhcmdl%0AdENsYXNzKS5ub2RlKCk7CiAgICAgIHZhciBzZWxlY3RlZFRhcmdldCA9IG4zLmNv%0AbnRhaW5lci5zZWxlY3Qoc2VsZWN0ZWRUYXJnZXRDbGFzcykubm9kZSgpOwoKICAg%0AICAgc2VsZWN0aW9uLmVhY2goZnVuY3Rpb24oZCl7CiAgICAgICAgdmFyIHRhcmdl%0AdCA9IHVuc2VsZWN0ZWRUYXJnZXQ7CiAgICAgICAgdmFyIHRhcmdldENsYXNzID0g%0AdW5zZWxlY3RlZFRhcmdldENsYXNzOwogICAgICAgIGlmICh0eXBlID09ICdlZGdl%0AJykgewogICAgICAgICAgaWYgKG5vZGUgJiYgKGQuaW5sLmlkID09IG5vZGUuaWQg%0AfHwgZC5vdXRsLmlkID09IG5vZGUuaWQpKSB7CiAgICAgICAgICAgIHRhcmdldCA9%0AIHNlbGVjdGVkVGFyZ2V0OwogICAgICAgICAgICB0YXJnZXRDbGFzcyA9IHNlbGVj%0AdGVkVGFyZ2V0Q2xhc3M7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAg%0AICAgICAgIGlmIChub2RlICYmIChub2RlLmxpbmtzW2QuaWRdICE9PSB1bmRlZmlu%0AZWQgfHwgZC5pZCA9PSBub2RlLmlkKSkgewogICAgICAgICAgICB0YXJnZXQgPSBz%0AZWxlY3RlZFRhcmdldDsKICAgICAgICAgICAgdGFyZ2V0Q2xhc3MgPSBzZWxlY3Rl%0AZFRhcmdldENsYXNzOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBj%0Ab25zb2xlLmxvZyh0YXJnZXRDbGFzcyk7CiAgICAgICAgaWYgKCEgJCh0aGlzKS5w%0AYXJlbnQodGFyZ2V0Q2xhc3MpLmxlbmd0aCkgewogICAgICAgICAgLy8gY29uc29s%0AZS5sb2cobjMuY3VyclRpbWUpCiAgICAgICAgICAkKHRhcmdldCkuYXBwZW5kKHRo%0AaXMpOwogICAgICAgIH0KICAgICAgfSkgICAgCiAgICB9KSAgICAKICB9CgogIC8q%0AKiB1bmhpZ2hsaWdodHMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBuZXR3b3JrICov%0ACiAgbjMucHJvdG90eXBlLnVuU2VsZWN0TmV0d29yayA9IGZ1bmN0aW9uKCkgewog%0AICAgdmFyIG4zID0gdGhpczsKICAgIG4zLnNlbGVjdGVkTmV0d29yayA9IG51bGw7%0ACiAgICBuMy5jb250YWluZXIuc2VsZWN0KCcuc2NyZWVuJykuY2xhc3NlZCh7J25l%0AdHdvcmstc2VsZWN0ZWQnOiBmYWxzZX0pOwogICAgbjMudXBkYXRlU2VsZWN0ZWRO%0AZXR3b3JrKCk7CiAgfQoKICAvKiogcmVuZGVyIHRoZSBncmFwaCB0byByZWZsZWN0%0AIHRoZSBzdGF0ZSBhdCBjdXJyVGltZSwgdHJhbnNpdGlvbmluZyBlbGVtZW50cyBv%0AdmVyIGEgZ2l2ZW4gZHVyYXRpb24KICAqIEBwYXJhbSB7bWlsbGlzZWNvbmRzfSAt%0AIHRoZSBhbW91bnQgb2YgdGltZSB0aGUgdHJhbnNpdGlvbiBhbmltYXRpb24gc2hv%0AdWxkIHRha2UKICAqLwogIG4zLnByb3RvdHlwZS51cGRhdGVHcmFwaCA9IGZ1bmN0%0AaW9uKGR1cmF0aW9uKSB7CiAgICB2YXIgbjMgPSB0aGlzOwogICAgLy8gY29uc29s%0AZS5wcm9maWxlKCd1cGRhdGUgJytuMy5jdXJyVGltZSk7CgogICAgdmFyIHJlbmRl%0AckRhdGEgPSBuMy51cGRhdGVTbGljZVJlbmRlckRhdGEobjMuY3VyclRpbWUpOwog%0AICAgbjMuZnJhbWVJbmZvRGl2Lmh0bWwobjMuY3VyclRpbWUrJzogJytuMy50aW1l%0ASW5kZXhbbjMuY3VyclRpbWVdLnN0YXJ0ICsgJy0nK24zLnRpbWVJbmRleFtuMy5j%0AdXJyVGltZV0uZW5kKQoKICAgIHZhciBlbnRlckV4aXREdXJhdGlvbiA9IGR1cmF0%0AaW9uICogbjMub3B0aW9ucy5lbnRlckV4aXRBbmltYXRpb25GYWN0b3I7CiAgICB2%0AYXIgdXBkYXRlRHVyYXRpb24gPSBkdXJhdGlvbiAqICgxLW4zLm9wdGlvbnMuZW50%0AZXJFeGl0QW5pbWF0aW9uRmFjdG9yKTsKCiAgICAkLmVhY2goWydtYWluJywgJ3hs%0AYWInXSwgZnVuY3Rpb24oaSwgdHlwZSl7CiAgICAgIHZhciB0ZXh0ID0gcmVuZGVy%0ARGF0YS5ncmFwaFt0eXBlXTsKICAgICAgdmFyIHRhcmdldCA9IG4zLmRvbVRhcmdl%0AdC5zZWxlY3QoJy4nK3R5cGUrJyB0ZXh0Jyk7CiAgICAgIHRhcmdldC5zZWxlY3RB%0AbGwoJyonKS5yZW1vdmUoKTsKCiAgICAgIGlmICh0ZXh0KSB7CiAgICAgICAgJC5l%0AYWNoKHRleHQsIGZ1bmN0aW9uKGksIHQpewogICAgICAgICAgdGFyZ2V0LmFwcGVu%0AZCgndHNwYW4nKS5hdHRyKHsKICAgICAgICAgICAgJ2R5JzogKGkgPyAnMS4yZW0n%0AIDogMCksCiAgICAgICAgICAgICd4JzogMCwKICAgICAgICAgIH0pLnRleHQodCk7%0ACiAgICAgICAgfSkKICAgICAgfQogICAgfSk7CgogICAgbjMuZG9tVGFyZ2V0LnNl%0AbGVjdEFsbCgnLmJhY2tncm91bmQsIC5zY3JlZW4nKS50cmFuc2l0aW9uKCkKICAg%0AICAgLnN0eWxlKHtmaWxsOiByZW5kZXJEYXRhLmdyYXBoWydiZyddLCAnZmlsbC1v%0AcGFjaXR5JzogcmVuZGVyRGF0YS5ncmFwaFsnYmcuZmlsbC1vcGFjaXR5J119KTsK%0ACiAgICB2YXIgc2hvd0luZm8gPSBmdW5jdGlvbihkKSB7CiAgICAgIGlmKCEgbjMu%0Ac2VsZWN0ZWQgfHwgbjMuc2VsZWN0ZWQuaWQgIT09IGQuaWQpIHsKICAgICAgICBu%0AMy5zZWxlY3RlZCA9IGQ7CiAgICAgICAgbjMubW92ZVRvb2x0aXAoKTsKICAgICAg%0AfSBlbHNlIHsKICAgICAgICBuMy5oaWRlVG9vbHRpcCgpOwogICAgICB9CiAgICB9%0ACgogICAgLy91cGRhdGUgc2VsZWN0ZWQgaXRlbQogICAgaWYgKG4zLnNlbGVjdGVk%0AKSB7CiAgICAgIG4zLnNlbGVjdGVkID0gbjMuc2VsZWN0ZWQuaW5sID8gcmVuZGVy%0ARGF0YS5lZGdlW24zLnNlbGVjdGVkLmlkXSA6IHJlbmRlckRhdGEubm9kZVtuMy5z%0AZWxlY3RlZC5pZF07CiAgICAgIGlmICghIG4zLnNlbGVjdGVkKSB7CiAgICAgICAg%0AbjMuaGlkZVRvb2x0aXAoKTsKICAgICAgfSAKICAgIH0KICAgIGlmIChuMy5zZWxl%0AY3RlZE5ldHdvcmspIHsKICAgICAgbjMuc2VsZWN0ZWROZXR3b3JrID0gcmVuZGVy%0ARGF0YS5ub2RlW24zLnNlbGVjdGVkTmV0d29yay5pZF07CiAgICB9CgogICAgLyoq%0AIGFwcGx5IHN0eWxlcyBhbmQgYXRycmlidXRlcyB0byBub2RlcwogICAgKiBAcHJp%0AdmF0ZQogICAgKi8KICAgIHZhciBzdHlsZU5vZGVzID0gZnVuY3Rpb24oc2VsZWN0%0AaW9uKSB7CiAgICAgIHNlbGVjdGlvbi5zdHlsZSh7CiAgICAgICAgLy8gJ2ZpbGwn%0AOiBmdW5jdGlvbihkLCBpKSB7cmV0dXJuIGRbJ3ZlcnRleC5jb2wnXTsgfSwKICAg%0AICAgICBmaWxsOiBmdW5jdGlvbihkKSB7CiAgICAgICAgICBpZiAoZC5pbWFnZSkg%0AeyAKICAgICAgICAgICAgcmV0dXJuICd1cmwoI2ltYWdlXycrcGFyc2VJbnQoZC5p%0AZCkrJyknOyAKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBk%0AWyd2ZXJ0ZXguY29sJ107CiAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAg%0AJ2ZpbGwtb3BhY2l0eSc6IGZ1bmN0aW9uKGQsIGkpIHtyZXR1cm4gZFsndmVydGV4%0ALmNvbC5maWxsLW9wYWNpdHknXTsgfSwKICAgICAgICAnc3Ryb2tlLXdpZHRoJzog%0AZnVuY3Rpb24oZCkge3JldHVybiBkWyd2ZXJ0ZXgubHdkJ107IH0sCiAgICAgICAg%0AJ3N0cm9rZSc6IGZ1bmN0aW9uKGQpIHtyZXR1cm4gZFsndmVydGV4LmJvcmRlcidd%0AOyB9LAogICAgICAgICdzdHJva2Utb3BhY2l0eSc6IGZ1bmN0aW9uKGQpIHtyZXR1%0Acm4gZFsndmVydGV4LmJvcmRlci5zdHJva2Utb3BhY2l0eSddOyB9LAogICAgICB9%0AKQogICAgICBzZWxlY3Rpb24uZmlsdGVyKCdjaXJjbGUnKS5jYWxsKG4zLmRyYXdD%0AaXJjbGVOb2RlLCBuMykKICAgICAgc2VsZWN0aW9uLmZpbHRlcigncG9seWdvbicp%0ALmNhbGwobjMuZHJhd1BvbHlnb25Ob2RlLCBuMykKICAgIH0KCiAgICAvKiogc2V0%0AIGF0dHJpYnV0ZXMgJiB0cmFuc2l0aW9ucyB0byBiZSBhcHBsaWVkIHRvIG5ldyBu%0Ab2RlcwogICAgKiBAcHJpdmF0ZQogICAgKi8KICAgIHZhciBjcmVhdGVOb2RlcyA9%0AIGZ1bmN0aW9uKHNlbGVjdGlvbikgewogICAgICBzZWxlY3Rpb24KICAgICAgICAu%0AYXR0cih7CiAgICAgICAgICBjbGFzczogZnVuY3Rpb24oZCkgeyByZXR1cm4gJ25v%0AZGUgbm9kZV8nK2QuaWQrJyAnKyhkWyd2ZXJ0ZXguY3NzLmNsYXNzJ10gfHwgJycp%0AOyB9LAogICAgICAgICAgb3BhY2l0eTogMCwKICAgICAgICAgIC8vIGZpbGw6IGZ1%0AbmN0aW9uKGQpIHsgcmV0dXJuICd1cmwoI2ltYWdlXycrZC5pZCsnKSc7IH0KICAg%0AICAgICB9KQogICAgICAgIC5jYWxsKHN0eWxlTm9kZXMpCiAgICAgICAgLm9uKCdj%0AbGljaycsIHNob3dJbmZvKQogICAgICAgIC5vbignZGJsY2xpY2snLCBmdW5jdGlv%0AbihkKSB7CiAgICAgICAgICBpZiAoISBuMy5zZWxlY3RlZE5ldHdvcmsgfHwgZC5p%0AZCAhPSBuMy5zZWxlY3RlZE5ldHdvcmsuaWQpIHsKICAgICAgICAgICAgbjMuc2Vs%0AZWN0ZWROZXR3b3JrID0gZDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg%0AIG4zLnNlbGVjdGVkTmV0d29yayA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAg%0AICBuMy51cGRhdGVTZWxlY3RlZE5ldHdvcmsoKQogICAgICAgICAgbjMuY29udGFp%0AbmVyLnNlbGVjdCgnLnNjcmVlbicpLmNsYXNzZWQoeyduZXR3b3JrLXNlbGVjdGVk%0AJzogbjMuc2VsZWN0ZWROZXR3b3JrfSkKICAgICAgICAgIG4zLnNlbGVjdGVkID0g%0AbjMuc2VsZWN0ZWROZXR3b3JrOwogICAgICAgICAgbjMubW92ZVRvb2x0aXAoKTsK%0AICAgICAgICAgIGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIH0p%0ACiAgICAgICAgLm9uKCdtb3VzZW92ZXInLCBmdW5jdGlvbihkKSB7CiAgICAgICAg%0AICBkMy5zZWxlY3QodGhpcykKICAgICAgICAgICAgLnRyYW5zaXRpb24oKQogICAg%0AICAgICAgICAuZHVyYXRpb24oMjAwKQogICAgICAgICAgICAuc3R5bGUoJ3N0cm9r%0AZS13aWR0aCcsIHBhcnNlRmxvYXQoZFsndmVydGV4Lmx3ZCddKSs1KTsKICAgICAg%0AICB9KQogICAgICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbihkKSB7CiAgICAg%0AICAgICBkMy5zZWxlY3QodGhpcykKICAgICAgICAgICAgLnRyYW5zaXRpb24oKQog%0AICAgICAgICAgICAuZHVyYXRpb24oMjAwKQogICAgICAgICAgICAuc3R5bGUoJ3N0%0Acm9rZS13aWR0aCcsIGRbJ3ZlcnRleC5sd2QnXSk7CiAgICAgICAgfSkKICAgICAg%0AICAudHJhbnNpdGlvbigpCiAgICAgICAgLmR1cmF0aW9uKGVudGVyRXhpdER1cmF0%0AaW9uKQogICAgICAgIC5hdHRyKCdvcGFjaXR5JywgMSkKCiAgICB9CgogICAgdmFy%0AIGltYWdlcyA9IG4zLmRvbVRhcmdldC5zZWxlY3QoJ2RlZnMnKS5zZWxlY3RBbGwo%0AJy5ub2RlLWltYWdlJykuZGF0YShkMy52YWx1ZXMocmVuZGVyRGF0YS5ub2RlKS5m%0AaWx0ZXIoZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5pbWFnZTsgfSksIGZ1bmN0aW9u%0AKG4pIHsgcmV0dXJuIG4uaWQ7IH0pCiAgICAgIGltYWdlcy5lbnRlcigpCiAgICAg%0AICAgLmFwcGVuZCgncGF0dGVybicpLmF0dHIoewogICAgICAgIGlkOiBmdW5jdGlv%0AbihkKSB7IHJldHVybiAnaW1hZ2VfJytkLmlkOyB9LAogICAgICAgIGNsYXNzOiAn%0Abm9kZS1pbWFnZScsCiAgICAgICAgdmlld0JveDoiMCAwIDEwMCAxMDAiLAogICAg%0AICAgIC8vIHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUiLCAKICAgICAgICAvLyAn%0AcGF0dGVyblVuaXRzJzogJ3VzZXJTcGFjZU9uVXNlJywKICAgICAgICB3aWR0aDog%0AMTAsCiAgICAgICAgaGVpZ2h0OjEwCiAgICAgIH0pLmFwcGVuZCgnaW1hZ2UnKS5h%0AdHRyKHsKICAgICAgICAneGxpbms6aHJlZic6IGZ1bmN0aW9uKGQpIHsgcmV0dXJu%0AIGQuaW1hZ2U7IH0sCiAgICAgICAgd2lkdGg6IDEwLAogICAgICAgIGhlaWdodDox%0AMCAgICAgICAgCiAgICAgIH0pCgogICAgICBpbWFnZXMuc2VsZWN0KCdpbWFnZScp%0ALnRyYW5zaXRpb24oKQogICAgICAgIC5kZWxheShlbnRlckV4aXREdXJhdGlvbikK%0AICAgICAgICAuZHVyYXRpb24odXBkYXRlRHVyYXRpb24pCiAgICAgICAgLmF0dHIo%0AewogICAgICAgICAgJ3hsaW5rOmhyZWYnOiBmdW5jdGlvbihkKSB7IHJldHVybiBk%0ALmltYWdlOyB9CiAgICAgICAgfSk7CgogICAgICBpbWFnZXMuZXhpdCgpCiAgICAg%0AICAgLnRyYW5zaXRpb24oKQogICAgICAgIC5kdXJhdGlvbihlbnRlckV4aXREdXJh%0AdGlvbikKICAgICAgICAucmVtb3ZlKCk7IAoKICAgIHZhciBub2RlcyA9IG4zLmNv%0AbnRhaW5lci5zZWxlY3RBbGwoJy5ub2RlJykuZGF0YShkMy52YWx1ZXMocmVuZGVy%0ARGF0YS5ub2RlKSwgZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5pZDsgfSkKCiAgICAg%0AIHZhciBub2RlX2dyb3VwcyA9IG5vZGVzLmVudGVyKCkuYXBwZW5kKCdnJykuY2xh%0Ac3NlZCh7J25vZGVfZ3JvdXAnIDogdHJ1ZX0pOwogICAgICBub2RlX2dyb3Vwcy5m%0AaWx0ZXIoZnVuY3Rpb24oZCkgeyByZXR1cm4gZFsndmVydGV4LnNpZGVzJ10gIT0g%0ANTA7IH0pLmFwcGVuZCgncG9seWdvbicpLmNhbGwoY3JlYXRlTm9kZXMpOwogICAg%0AICBub2RlX2dyb3Vwcy5maWx0ZXIoZnVuY3Rpb24oZCkgeyByZXR1cm4gZFsndmVy%0AdGV4LnNpZGVzJ10gPT0gNTA7IH0pLmFwcGVuZCgnY2lyY2xlJykuY2FsbChjcmVh%0AdGVOb2Rlcyk7CgogICAgICBpZiAoIWVudGVyRXhpdER1cmF0aW9uKSB7bm9kZXMu%0AYXR0cih7b3BhY2l0eTogMX0pOyB9CgogICAgICBub2Rlcy5maWx0ZXIoJy5ub2Rl%0AJykudHJhbnNpdGlvbigpCiAgICAgICAgLmRlbGF5KGVudGVyRXhpdER1cmF0aW9u%0AKQogICAgICAgIC5kdXJhdGlvbih1cGRhdGVEdXJhdGlvbikKICAgICAgICAuYXR0%0Acignb3BhY2l0eScsIDEpCiAgICAgICAgLmNhbGwoc3R5bGVOb2RlcykKCiAgICAg%0AIG5vZGVzLmV4aXQoKQogICAgICAgIC50cmFuc2l0aW9uKCkKICAgICAgICAuZHVy%0AYXRpb24oZW50ZXJFeGl0RHVyYXRpb24pCiAgICAgICAgLmF0dHIoJ29wYWNpdHkn%0ALCAwKQogICAgICAgIC5yZW1vdmUoKTsgCgogICAgaWYgKHJlbmRlckRhdGEuZ3Jh%0AcGgudXNlYXJyb3dzKSB7CiAgICAgIHZhciBtYXJrZXJzID0gbjMuZG9tVGFyZ2V0%0ALnNlbGVjdCgnZGVmcycpLnNlbGVjdEFsbCgnLmFycm93aGVhZCcpLmRhdGEoZDMu%0AdmFsdWVzKHJlbmRlckRhdGEuZWRnZSksIGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGUu%0AaWR9KQogICAgICAgIG1hcmtlcnMuZW50ZXIoKS5hcHBlbmQoJ21hcmtlcicpLmF0%0AdHIoewogICAgICAgICAgaWQ6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuICdhcnJvd2hl%0AYWRfJytkLmlkOyB9LAogICAgICAgICAgY2xhc3M6ICdhcnJvd2hlYWQnLAogICAg%0AICAgICAgdmlld0JveDogIjAgLTEgMiAyIiwKICAgICAgICAgIG1hcmtlcldpZHRo%0AOiBzY2FsZUFycm93aGVhZHMsCiAgICAgICAgICBtYXJrZXJIZWlnaHQ6IHNjYWxl%0AQXJyb3doZWFkcywKICAgICAgICAgIG9yaWVudDogImF1dG8iLAogICAgICAgIH0p%0ALmFwcGVuZCgic3ZnOnBhdGgiKQogICAgICAgICAgLmF0dHIoewogICAgICAgICAg%0AICBkOiAiTTAsLTFMMiwwTDAsMSIsCiAgICAgICAgICAgIGZpbGw6ICdncmVlbicK%0AICAgICAgICAgIH0pOwoKICAgICAgICBtYXJrZXJzLnNlbGVjdCgncGF0aCcpLnRy%0AYW5zaXRpb24oKQogICAgICAgICAgLmRlbGF5KGVudGVyRXhpdER1cmF0aW9uKQog%0AICAgICAgICAgLmR1cmF0aW9uKHVwZGF0ZUR1cmF0aW9uKQogICAgICAgICAgLmF0%0AdHIoewogICAgICAgICAgICBmaWxsOiBmdW5jdGlvbihkKSB7IHJldHVybiBkWydl%0AZGdlLmNvbCddOyB9LAogICAgICAgICAgICAnZmlsbC1vcGFjaXR5JzogZnVuY3Rp%0Ab24oZCkgeyByZXR1cm4gZFsnZWRnZS5jb2wuc3Ryb2tlLW9wYWNpdHknXTsgfQog%0AICAgICAgICAgfSkKCiAgICAgICAgbWFya2Vycy5leGl0KCkuc2VsZWN0QWxsKCdw%0AYXRoJykKICAgICAgICAgIC5hdHRyKHsKICAgICAgICAgICAgZmlsbDogJ3JlZCcK%0AICAgICAgICAgIH0pCiAgICAgICAgCiAgICAgICAgbWFya2Vycy5leGl0KCkudHJh%0AbnNpdGlvbigpCiAgICAgICAgICAuZGVsYXkoZHVyYXRpb24pCiAgICAgICAgICAu%0AZHVyYXRpb24oMCkKICAgICAgICAgIC5yZW1vdmUoKQogICAgfQoKICAgIHZhciBs%0AaW5lcyA9IG4zLmNvbnRhaW5lci5zZWxlY3RBbGwoJy5lZGdlJykuZGF0YShkMy52%0AYWx1ZXMocmVuZGVyRGF0YS5lZGdlKSwgZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5p%0AZH0pCiAgICAgIGxpbmVzLmVudGVyKCkuYXBwZW5kKCdwYXRoJykKICAgICAgICAu%0AYXR0cih7CiAgICAgICAgICBjbGFzczogZnVuY3Rpb24oZCkgeyByZXR1cm4gJ2Vk%0AZ2UgZWRnZV8nK2QuaWQrJyAnKyhkWydlZGdlLmNzcy5jbGFzcyddIHx8ICcnKTsg%0AfSwgICAgIAogICAgICAgICAgb3BhY2l0eTogMCwKICAgICAgICAgICJtYXJrZXIt%0AZW5kIjogZnVuY3Rpb24oZCkgeyBpZihyZW5kZXJEYXRhLmdyYXBoLnVzZWFycm93%0AcykgeyByZXR1cm4gInVybCgjYXJyb3doZWFkXyIrZC5pZCsiKSI7IH19CiAgICAg%0AICAgfSkKICAgICAgICAuc3R5bGUoewogICAgICAgICAgJ3N0cm9rZSc6ICdncmVl%0AbicsCiAgICAgICAgICAnc3Ryb2tlLXdpZHRoJzogZnVuY3Rpb24oZCkgeyByZXR1%0Acm4gZFsnZWRnZS5sd2QnXTsgfQogICAgICAgIH0pCiAgICAgICAgLmNhbGwobjMu%0AZHJhd0VkZ2UsIG4zLCByZW5kZXJEYXRhLmdyYXBoLnVzZWFycm93cywgMSkKICAg%0AICAgICAub24oJ2NsaWNrJywgc2hvd0luZm8pCiAgICAgICAgLm9uKCdtb3VzZW92%0AZXInLCBmdW5jdGlvbihkKSB7CiAgICAgICAgICB2YXIgZWRnZSA9IGQzLnNlbGVj%0AdCh0aGlzKTsKICAgICAgICAgIHZhciBsaW5lID0gJ00gJytkLmN1cnJlbnRDb29y%0AZHNbMF1bMF0udG9GaXhlZCgxKSsnICcrZC5jdXJyZW50Q29vcmRzWzBdWzFdLnRv%0ARml4ZWQoMSkrJyBMICcrZC5jdXJyZW50Q29vcmRzWzFdWzBdLnRvRml4ZWQoMSkr%0AJyAnK2QuY3VycmVudENvb3Jkc1sxXVsxXS50b0ZpeGVkKDEpOwogICAgICAgICAg%0AaWYgKHJlbmRlckRhdGEuZ3JhcGgudXNlYXJyb3dzKSB7CiAgICAgICAgICAgIHZh%0AciBvZmZzZXRQb2ludHMgPSBvZmZzZXRMaW5lKFtkLmN1cnJlbnRDb29yZHNbMF1b%0AMF0sIGQuY3VycmVudENvb3Jkc1swXVsxXV0sIFtkLmN1cnJlbnRDb29yZHNbMV1b%0AMF0sIGQuY3VycmVudENvb3Jkc1sxXVsxXV0sIChzY2FsZUFycm93aGVhZHMoZCkq%0ANSkpOwogICAgICAgICAgICBsaW5lID0gJ00gJytkLmN1cnJlbnRDb29yZHNbMF1b%0AMF0udG9GaXhlZCgxKSsnICcrZC5jdXJyZW50Q29vcmRzWzBdWzFdLnRvRml4ZWQo%0AMSkrJyBMICcrb2Zmc2V0UG9pbnRzWzBdLnRvRml4ZWQoMSkrJyAnK29mZnNldFBv%0AaW50c1sxXS50b0ZpeGVkKDEpOyAgICAgCiAgICAgICAgICB9CiAgICAgICAgICBl%0AZGdlLnRyYW5zaXRpb24oKQogICAgICAgICAgICAuZHVyYXRpb24oMjAwKQogICAg%0AICAgICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsIHBhcnNlRmxvYXQoZFsnZWRn%0AZS5sd2QnXSkrNSkKICAgICAgICAgICAgLmF0dHIoJ2QnLCBsaW5lKTsKICAgICAg%0AICB9KQogICAgICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbihkKSB7CiAgICAg%0AICAgICBkMy5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpCiAgICAgICAgICAgIC5k%0AdXJhdGlvbigyMDApCiAgICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywg%0AZFsnZWRnZS5sd2QnXSkKICAgICAgICAgICAgLmNhbGwobjMuZHJhd0VkZ2UsIG4z%0ALCByZW5kZXJEYXRhLmdyYXBoLnVzZWFycm93cywgZmFsc2UpCiAgICAgICAgfSkK%0AICAgICAgICAudHJhbnNpdGlvbigpCiAgICAgICAgLmR1cmF0aW9uKGVudGVyRXhp%0AdER1cmF0aW9uKQogICAgICAgIC5hdHRyKHtvcGFjaXR5OiAxfSkKCiAgICAgIGlm%0AICghZW50ZXJFeGl0RHVyYXRpb24pIHtsaW5lcy5hdHRyKHtvcGFjaXR5OiAxfSk7%0AIH0KICAgICAgCiAgICAgIGxpbmVzLnRyYW5zaXRpb24oKQogICAgICAgIC5kZWxh%0AeShlbnRlckV4aXREdXJhdGlvbikKICAgICAgICAuZHVyYXRpb24odXBkYXRlRHVy%0AYXRpb24pCiAgICAgICAgLnN0eWxlKHsKICAgICAgICAgICdzdHJva2UnOiBmdW5j%0AdGlvbihkKSB7IHJldHVybiBkWydlZGdlLmNvbCddfSwKICAgICAgICAgICdzdHJv%0Aa2Utb3BhY2l0eSc6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGRbJ2VkZ2UuY29sLnN0%0Acm9rZS1vcGFjaXR5J107IH0sCiAgICAgICAgICAnc3Ryb2tlLXdpZHRoJzogZnVu%0AY3Rpb24oZCkgeyByZXR1cm4gZFsnZWRnZS5sd2QnXTsgfSwKICAgICAgICB9KQog%0AICAgICAgIC5jYWxsKG4zLmRyYXdFZGdlLCBuMywgcmVuZGVyRGF0YS5ncmFwaC51%0Ac2VhcnJvd3MpCiAgICAgICAgLmF0dHIoe29wYWNpdHk6IDF9KQoKICAgICAgbGlu%0AZXMuZXhpdCgpCiAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAncmVkJykKICAgICAg%0AICAudHJhbnNpdGlvbigpCiAgICAgICAgLmR1cmF0aW9uKGVudGVyRXhpdER1cmF0%0AaW9uKQogICAgICAgIC5hdHRyKCdvcGFjaXR5JywgMCkgICAgICAgICAgCiAgICAg%0AICAgLnJlbW92ZSgpOwoKICAgIHZhciBsYWJlbHMgPSBuMy5jb250YWluZXIuc2Vs%0AZWN0KCcubGFiZWxzJykuc2VsZWN0QWxsKCd0ZXh0JykuZGF0YShkMy52YWx1ZXMo%0AcmVuZGVyRGF0YS5ub2RlKSwgZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5pZH0pOwog%0AICAgICBsYWJlbHMuZW50ZXIoKS5hcHBlbmQoJ3RleHQnKS5maWx0ZXIoZnVuY3Rp%0Ab24oZCkgeyByZXR1cm4gcmVuZGVyRGF0YS5ncmFwaC5kaXNwbGF5bGFiZWxzOyB9%0AKQogICAgICAgIC5hdHRyKHsKICAgICAgICAgIGNsYXNzOiBmdW5jdGlvbihkKSB7%0AIHJldHVybiAnbGFiZWwgbGFiZWxfJytkLmlkKyAnICcrIChkWyd2ZXJ0ZXgubGFi%0AZWwuY3NzLmNsYXNzJ10gfHwgJycpOyB9LAogICAgICAgICAgb3BhY2l0eTogMAog%0AICAgICAgIH0pCiAgICAgICAgLmNhbGwobjMuZHJhd05vZGVMYWJlbCwgbjMpCiAg%0AICAgICAgLnRleHQoZnVuY3Rpb24oZCwgaSkgeyByZXR1cm4gZC5sYWJlbDsgfSkK%0AICAgICAgICAuc3R5bGUoewogICAgICAgICAgJ2ZpbGwnOiBmdW5jdGlvbihkKSB7%0AcmV0dXJuIGRbJ2xhYmVsLmNvbCddOyB9LAogICAgICAgICAgJ2ZpbGwtb3BhY2l0%0AeSc6IGZ1bmN0aW9uKGQpIHtyZXR1cm4gZFsnbGFiZWwuY29sLmZpbGwtb3BhY2l0%0AeSddOyB9LAogICAgICAgICAgJ2ZvbnQtc2l6ZSc6IGZ1bmN0aW9uKGQpIHsgcmV0%0AdXJuIG4zLm9wdGlvbnMuYmFzZUZvbnRTaXplICogZFsnbGFiZWwuY2V4J10rJ3B4%0AJzt9CiAgICAgICAgfSkKICAgICAgICAudHJhbnNpdGlvbigpCiAgICAgICAgLmRl%0AbGF5KDApCiAgICAgICAgLmR1cmF0aW9uKGVudGVyRXhpdER1cmF0aW9uKQogICAg%0AICAgIC5hdHRyKHtvcGFjaXR5OiAxfSkKCiAgICAgIGlmICghZW50ZXJFeGl0RHVy%0AYXRpb24pIHtsYWJlbHMuYXR0cih7b3BhY2l0eTogMX0pOyB9CgogICAgICBsYWJl%0AbHMudHJhbnNpdGlvbigpLmZpbHRlcihmdW5jdGlvbihkKSB7IHJldHVybiByZW5k%0AZXJEYXRhLmdyYXBoLmRpc3BsYXlsYWJlbHM7IH0pCiAgICAgICAgLmRlbGF5KGVu%0AdGVyRXhpdER1cmF0aW9uKQogICAgICAgIC5kdXJhdGlvbih1cGRhdGVEdXJhdGlv%0AbikKICAgICAgICAuY2FsbChuMy5kcmF3Tm9kZUxhYmVsLCBuMykKICAgICAgICAv%0ALy5hdHRyKHtvcGFjaXR5OiAxfSkKICAgICAgICAudGV4dChmdW5jdGlvbihkLCBp%0AKSB7IHJldHVybiBkLmxhYmVsOyB9KQogICAgICAgIC5zdHlsZSh7CiAgICAgICAg%0AICAnZmlsbCc6IGZ1bmN0aW9uKGQpIHtyZXR1cm4gZFsnbGFiZWwuY29sJ107IH0s%0ACiAgICAgICAgICAnZmlsbC1vcGFjaXR5JzogZnVuY3Rpb24oZCkge3JldHVybiBk%0AWydsYWJlbC5jb2wuZmlsbC1vcGFjaXR5J107IH0sCiAgICAgICAgfSkKCiAgICAg%0AIGxhYmVscy5leGl0KCkKICAgICAgICAudHJhbnNpdGlvbigpCiAgICAgICAgLmR1%0AcmF0aW9uKGVudGVyRXhpdER1cmF0aW9uKQogICAgICAgIC5hdHRyKCdvcGFjaXR5%0AJywgMCkKICAgICAgICAucmVtb3ZlKCk7CgogICAgICBuMy51cGRhdGVTZWxlY3Rl%0AZE5ldHdvcmsoKTsKICAKICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKTsKICAg%0AICAgZDMudGltZXIoZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKG4zLnNlbGVjdGVk%0AICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgIG4zLm1vdmVUb29sdGlwKCk7CiAg%0AICAgICAgfQogICAgICAgIHJldHVybiBEYXRlLm5vdygpID49IHN0YXJ0ICtkdXJh%0AdGlvbjsgCiAgICAgIH0pCiAgICAgIC8vIGNvbnNvbGUucHJvZmlsZUVuZCgndXBk%0AYXRlICcrbjMuY3VyclRpbWUpOwogIH0KCiAgLyoqIHJlc2l6ZXMgZ3JhcGggYW5k%0AIG90aGVyIGRpc3BsYXkgZWxlbWVudHMgdG8gZmlsbCB0aGUgdGFyZ2V0IHZpZXdw%0Ab3J0ICovCiAgbjMucHJvdG90eXBlLnJlc2l6ZUdyYXBoID0gZnVuY3Rpb24oKSB7%0ACiAgICB2YXIgbjMgPSB0aGlzOwogICAgbjMudXBkYXRlRGltZW5zaW9ucygpOwoK%0ACiAgICBuMy5jb250YWluZXIuc2VsZWN0QWxsKCdjaXJjbGUubm9kZScpLmNhbGwo%0AbjMuZHJhd0NpcmNsZU5vZGUsIG4zKQogICAgbjMuY29udGFpbmVyLnNlbGVjdEFs%0AbCgncG9seWdvbi5ub2RlJykuY2FsbChuMy5kcmF3UG9seWdvbk5vZGUsIG4zKQoK%0AICAgIG4zLmNvbnRhaW5lci5zZWxlY3RBbGwoJy5lZGdlJykuY2FsbChuMy5kcmF3%0ARWRnZSwgbjMsIG4zLnRpbWVJbmRleFtuMy5jdXJyVGltZV0ucmVuZGVyRGF0YS5n%0AcmFwaC51c2VhcnJvd3MpCgogICAgbjMuY29udGFpbmVyLnNlbGVjdCgnLmxhYmVs%0AcycpLnNlbGVjdEFsbCgndGV4dCcpLmNhbGwobjMuZHJhd05vZGVMYWJlbCwgbjMp%0ACgogICAgbjMubW92ZVRvb2x0aXAoKTsKICAgIC8vcmVkcmF3IHRoZSBzbGlkZXIg%0AY29udHJvbCAKICAgIGlmIChuMy5vcHRpb25zLnNsaWRlcikgewogICAgICB2YXIg%0Ac2xpZGVyRGl2ID0gbjMuZG9tVGFyZ2V0LnNlbGVjdCgnLnNsaWRlcicpOwogICAg%0AICBzbGlkZXJEaXYuaHRtbCgnJyk7CiAgICAgIHNsaWRlckRpdi5jYWxsKG4zLnNs%0AaWRlcik7CiAgICB9IAogIH0KICAKICAvKiogZ3JhcGggYW5pbWF0aW9uIGNvbnRy%0Ab2xsZXIKICAqIEBwYXJhbSB7aW50ZWdlcn0gLSByZW5kZXIgdGhlIGdyYXBoIHRv%0AIHRoZSBzdGF0ZSBhdCB0aGlzIHRpbWVzbGljZSBpbmRleAogICogQHBhcmFtIHtp%0AbnRlZ2VyfSAtIGZ1bmN0aW9uIHdpbGwgcmVjdXJzaXZlbHkgY2FsbCBpdHNlbGYg%0AdW50aWwgdGltZSBlcXVhbHMgdGhpcyB2YWx1ZQogICogQHBhcmFtIHtib29sZWFu%0AfSAtIHNob3VsZCB0aGUgZ3JhcGggdXBkYXRlIGltbWVkaWF0ZWx5LCBvciBhbmlt%0AYXRlPwogICovCiAgbjMucHJvdG90eXBlLmFuaW1hdGVHcmFwaCA9IGZ1bmN0aW9u%0AKHRpbWUsIGVuZFRpbWUsIGltbWVkaWF0ZSkgewogICAgdmFyIG4zID0gdGhpczsK%0AICAgIGlmICh0aW1lID4gbjMudGltZUluZGV4Lmxlbmd0aCAtMSB8fCB0aW1lIDwg%0AMCkgeyByZXR1cm47IH0KCiAgICB2YXIgZHVyYXRpb24gPSBpbW1lZGlhdGUgPyAw%0AIDogbjMub3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbjsKICAgIGVuZFRpbWUgPSBl%0AbmRUaW1lID09PSB1bmRlZmluZWQgPyBuMy50aW1lSW5kZXgubGVuZ3RoIC0xIDog%0AZW5kVGltZTsKICAgIHZhciBuZXh0VGltZTsKICAgIGlmICh0aW1lID09IGVuZFRp%0AbWUpIHsKICAgICAgbmV4dFRpbWUgPSB0aW1lOwogICAgfSBlbHNlIGlmIChlbmRU%0AaW1lID4gdGltZSkgewogICAgICBuZXh0VGltZSA9IHRpbWUgKzE7CiAgICB9IGVs%0Ac2UgewogICAgICBuZXh0VGltZSA9IHRpbWUgLTE7CiAgICB9CgogICAgbjMuY3Vy%0AclRpbWUgPSB0aW1lID09IG4zLmN1cnJUaW1lID8gbmV4dFRpbWUgOiB0aW1lOwog%0AICAgLy9jb25zb2xlLmxvZyhuMy5jdXJyVGltZSArICcgJyt0aW1lKycgJytlbmRU%0AaW1lKyAnICcrbmV4dFRpbWUrICcgJytuMy5wcmV2VGltZSkKICAgIGlmKCEgaW1t%0AZWRpYXRlICYmIG4zLm9wdGlvbnMuc2xpZGVyKSB7CiAgICAgIG4zLnNsaWRlci52%0AYWx1ZShuMy50aW1lSW5kZXhbbjMuY3VyclRpbWVdLnN0YXJ0WzBdKTsKICAgIH0K%0AICAgIG4zLnVwZGF0ZUdyYXBoKGR1cmF0aW9uKTsKICAgIGlmIChuMy5jdXJyVGlt%0AZSAhPSBlbmRUaW1lKSB7CiAgICAgIG4zLmFuaW1hdGUgPSBzZXRUaW1lb3V0KGZ1%0AbmN0aW9uKCl7CiAgICAgICAgbjMuYW5pbWF0ZUdyYXBoKG5leHRUaW1lLCBlbmRU%0AaW1lLCBpbW1lZGlhdGUpOwogICAgICB9LCBkdXJhdGlvbikKICAgIH0KICB9Cgog%0AIC8qKiByZWRyYXcgdGhlIGluZm8gcG9wb3ZlciAvL0ZJWE1FIC0gbmVlZHMgcmVu%0AYW1lZCAqLwogIG4zLnByb3RvdHlwZS5tb3ZlVG9vbHRpcCA9IGZ1bmN0aW9uKCkg%0AewogICAgLy8gY29uc29sZS5wcm9maWxlKCdtb3ZlVG9vbHRpcCcpOwogICAgdmFy%0AIG4zID0gdGhpczsKICAgIGlmIChuMy5zZWxlY3RlZCkgewogICAgICB2YXIgaXRl%0AbSA9IG4zLnNlbGVjdGVkOwogICAgICB2YXIgdHlwZSA9IGl0ZW0uaW5sID8gJ2Vk%0AZ2UnIDogJ25vZGUnOwogICAgICB2YXIgbm9kZURPTSA9IG4zLmNvbnRhaW5lci5z%0AZWxlY3QoJy4nK3R5cGUrJ18nK2l0ZW0uaWQpLm5vZGUoKTsKICAgICAgaWYgKCFu%0Ab2RlRE9NKSB7CiAgICAgICAgbjMuaGlkZVRvb2x0aXAoKTsKICAgICAgfSBlbHNl%0AIHsKICAgICAgICB2YXIgY29vcmRzID0gbjMuY29udmVydENvb3JkcyhpdGVtKTsK%0AICAgICAgICB2YXIgcHJvcGVydHkgPSAndmVydGV4LnRvb2x0aXAnOwogICAgICAg%0AIGlmICh0eXBlID09ICdlZGdlJykgewogICAgICAgICAgcHJvcGVydHkgPSAnZWRn%0AZS50b29sdGlwJzsKICAgICAgICB9CiAgICAgICAgdmFyIGh0bWwgPSBuMy5zZWxl%0AY3RlZFtwcm9wZXJ0eV0gfHwgdHlwZSsiIGlkOiAiK24zLnNlbGVjdGVkLmlkOwog%0AICAgICAgIG4zLnRvb2x0aXAuc3R5bGUoewogICAgICAgICAgZGlzcGxheTogJ2Js%0Ab2NrJywKICAgICAgICAgIGJvdHRvbTogY29vcmRzWzFdKydweCcsCiAgICAgICAg%0AICBsZWZ0OiBjb29yZHNbMF0rJ3B4JywKICAgICAgICB9KS5odG1sKGh0bWwpCiAg%0AICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIG4zLmhpZGVUb29sdGlwKCk7CiAgICB9%0ACiAgICAvLyBjb25zb2xlLnByb2ZpbGVFbmQoJ21vdmVUb29sdGlwJyk7CiAgfQoK%0AICAvKiogZ2V0IGNlbnRlciBwb2ludCBvZiBlZGdlIG9yIG5vZGUsIGluIERPTSBw%0AaXhlbHMgKi8KICBuMy5wcm90b3R5cGUuY29udmVydENvb3JkcyA9IGZ1bmN0aW9u%0AKGl0ZW0pIHsKICAgIHZhciBuMyA9IHRoaXM7CiAgICB2YXIgdHlwZSA9IGl0ZW0u%0AaW5sID8gJ2VkZ2UnIDogJ25vZGUnOwogICAgdmFyIG5vZGVET00gPSBuMy5jb250%0AYWluZXIuc2VsZWN0KCcuJyt0eXBlKydfJytpdGVtLmlkKS5ub2RlKCk7CiAgICB2%0AYXIgY3RtID0gbjMuY3RtOwogICAgdmFyIHgsIHk7CiAgICB2YXIgYmJveCA9IG5v%0AZGVET00uZ2V0QkJveCgpOwogICAgdmFyIGNlbnRlciA9IHsKICAgICAgeDogYmJv%0AeC54ICsgYmJveC53aWR0aC8yLAogICAgICB5OiBiYm94LnkgKyBiYm94LmhlaWdo%0AdC8yCiAgICB9CiAgICBpZiAodHlwZSA9PSAnbm9kZScpIHsKICAgICAgaWYgKG5v%0AZGVET00udGFnTmFtZSA9PSAncG9seWdvbicpIHsKICAgICAgICB2YXIgcG9pbnRz%0AID0gJCgncG9seWdvbi5ub2RlXycraXRlbS5pZCkuYXR0cigncG9pbnRzJykuc3Bs%0AaXQoJyAnKS5tYXAoZnVuY3Rpb24ocCkgeyAKICAgICAgICAgIHJldHVybiBwLnNw%0AbGl0KCcsJykubWFwKHBhcnNlRmxvYXQpOwogICAgICAgIH0pCiAgICAgICAgdmFy%0AIHBvaW50ID0gZmluZFBvbHlnb25JbnRlcnNlY3Rpb24ocG9pbnRzLCBbYmJveC54%0AICsgYmJveC53aWR0aCwgYmJveC55XSwgW2NlbnRlci54LCBjZW50ZXIueV0pCiAg%0AICAgICAgeCA9IHBvaW50WzBdOwogICAgICAgIHkgPSBwb2ludFsxXTsKICAgICAg%0AfSBlbHNlIHsKICAgICAgICB2YXIgc2l6ZSA9IHBhcnNlRmxvYXQobm9kZURPTS5n%0AZXRBdHRyaWJ1dGUoJ3InKSk7CiAgICAgICAgdmFyIGFuZ2xlID0gLU1hdGguUEkv%0ANDsKICAgICAgICB4ID0gY2VudGVyLnggKyBzaXplICogTWF0aC5jb3MoYW5nbGUp%0AOwogICAgICAgIHkgPSBjZW50ZXIueSArIHNpemUgKiBNYXRoLnNpbihhbmdsZSk7%0ACiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHggPSBjZW50ZXIueDsKICAgICAg%0AeSA9IGNlbnRlci55OwogICAgfQogICAgLy8gdmFyIG9mZnNldENvb3JkcyA9IG9m%0AZnNldExpbmUoIFtjZW50ZXIueCwgY2VudGVyLnldLFt4LCB5XSxuZHR2UHJvcGVy%0AdGllcy5ncmFwaC50b29sdGlwT2Zmc2V0KQogICAgLy8geCA9IG9mZnNldENvb3Jk%0Ac1swXTsKICAgIC8vIHkgPSBvZmZzZXRDb29yZHNbMV07CgogICAgdmFyIGxlZnQg%0APSAoeCpjdG0uYSkgKyBjdG0uZSAtIG4zLm9mZnNldC5sZWZ0IC0gJCh3aW5kb3cp%0ALnNjcm9sbExlZnQoKSArMTsKICAgIHZhciBib3R0b20gPSBuMy5oZWlnaHQgLSh5%0AKmN0bS5kKS1jdG0uZiArIG4zLm9mZnNldC50b3AgLSAkKHdpbmRvdykuc2Nyb2xs%0AVG9wKCkgKzE7CiAgICByZXR1cm4gW2xlZnQsIGJvdHRvbV07CiAgfQoKICAvKiog%0AaGlkZSB0aGUgdG9vbHRpcCBhbmQgdW5zZXQgdGhlIHNlbGVjdGVkIGdsb2JhbCAq%0ALwogIG4zLnByb3RvdHlwZS5oaWRlVG9vbHRpcCA9IGZ1bmN0aW9uKCkgewogICAg%0AdmFyIG4zID0gdGhpczsKICAgIG4zLnNlbGVjdGVkID0gbnVsbDsKICAgIG4zLnRv%0Ab2x0aXAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpOwogIH0KCiAgLyoqIHN0b3Ag%0AdGhlIGN1cnJlbnQgYW5pbWF0aW9uIGN5Y2xlCiAgKiBAcGFyYW0ge2Jvb2xlYW59%0AIC0gaWYgdHJ1ZSwgaW1tZWRpYXRlIGhhbHQgYWxsIGFjdGl2ZSB0cmFuc2l0aW9u%0AcyAob3RoZXJ3aXNlLCBsZXQgYW5pbWF0aW9uIGNvbnRpbnVlIHRvIG5leHQgdGlt%0AZSBzbGljZSkKICAqLwogIG4zLnByb3RvdHlwZS5lbmRBbmltYXRpb24gPSBmdW5j%0AdGlvbihub0hhbHQpewogICAgdmFyIG4zID0gdGhpczsKICAgIGNsZWFyVGltZW91%0AdChuMy5hbmltYXRlKTsKICAgIGlmICghIG5vSGFsdCkgewogICAgICBuMy5kb21U%0AYXJnZXQuc2VsZWN0QWxsKCcubm9kZSwgLmVkZ2UsIC5sYWJlbCwgLmQzLXNsaWRl%0Aci1oYW5kbGUnKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkKICAgIH0KICB9Cgog%0AIC8qKiBzdGVwIHRoZSBhbmltYXRpb24gYnkgb25lIHRpbWUgc2xpY2UKICAqIEBw%0AYXJhbSB7Ym9vbGVhbn0gLSBpZiB0cnVlLCBnbyB0byBwcmV2aW91cyB0aW1lIHNs%0AaWNlLCBlbHNlIGdvIGZvcndhcmQKICAqLwogIG4zLnByb3RvdHlwZS5zdGVwQW5p%0AbWF0aW9uID0gZnVuY3Rpb24ocmV2ZXJzZSkgewogICAgdmFyIG4zID0gdGhpczsK%0ACiAgICBuMy5lbmRBbmltYXRpb24oMSk7CiAgICBpZiAocmV2ZXJzZSkgewogICAg%0AICBuMy5hbmltYXRlR3JhcGgobjMuY3VyclRpbWUtMSwgbjMuY3VyclRpbWUtMSk7%0AIAogICAgfSBlbHNlIHsKICAgICAgbjMuYW5pbWF0ZUdyYXBoKG4zLmN1cnJUaW1l%0AKzEsIG4zLmN1cnJUaW1lKzEpOyAKICAgIH0KICB9CgogIC8qKiBhbmltYXRlIHRo%0AZSBncmFwaCBvdmVyIGFsbCB0aW1lIHNsaWNlcywgc3RhcnRpbmcgYXQgY3VycmVu%0AdCBzbGljZQogICogQHBhcmFtIHtib29sZWFufSAtIGlmIHRydWUsIGFuaW1hdGUg%0Ac2xpY2VzIGJhY2t3YXJkcyB1bnRpbCBiZWdpbm5pbmcgb2YgdGltZSBpbmRleCwg%0Ab3RoZXIgcGxheSB1bnRpbCBlbmQKICAqLwogIG4zLnByb3RvdHlwZS5wbGF5QW5p%0AbWF0aW9uID0gZnVuY3Rpb24ocmV2ZXJzZSkgewogICAgdmFyIG4zID0gdGhpczsK%0ACiAgICBuMy5lbmRBbmltYXRpb24oMSk7CiAgICBpZiAocmV2ZXJzZSkgeyAKICAg%0AICAgbjMuYW5pbWF0ZUdyYXBoKG4zLmN1cnJUaW1lLTEsIDApOyAKICAgIH0gZWxz%0AZSB7CiAgICAgIG4zLmFuaW1hdGVHcmFwaChuMy5jdXJyVGltZSsxKTsgCiAgICB9%0ACiAgfQogIHJldHVybiBuMzsKfSkpOwo8L3NjcmlwdD48L2hlYWQ+DQogIDxib2R5%0APjxzY3JpcHQ+DQogICAgLy9JTklUIEdSQVBIIERBVEEgSEVSRQ0KICB2YXIgZ3Jh%0AcGhEYXRhID0geyJyZW5kZXIiOlt7InN0YXJ0IjpbMF0sImVuZCI6WzFdLCJkYXRh%0AIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0%0AIjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIx%0AMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwi%0AMTUiOlsxNF0sIjE2IjpbMTVdfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMi%0AOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjki%0AOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQi%0AOlsxM10sIjE1IjpbMTRdfX0sImNvb3JkIjpbWy0xLjk2MDgsLTIuMDM0N10sWzIu%0ANzQ1MSwtMC4yNzAxXSxbLTAuNzM0NCwxLjUzNDJdLFsxLjMyMDIsMS41NDU5XSxb%0ALTAuMTM3NywyLjM2MjddLFstMC45NDU3LDAuNjEyNF0sWzEuOTMwNCwyLjI5MjRd%0ALFswLjkwNTgsMi4zODg3XSxbLTEuNzMwNSwxLjExNjNdLFstMi4xMTA2LDAuMDQ3%0AN10sWzAuMzAzOCwxLjU4OTddLFswLjgxNDgsLTIuMTU4MV0sWzEuOTE3NywtMS40%0ANDk4XSxbLTIuNzQ1MSwwLjg4MDRdLFstMC40ODg3LC0yLjM4ODddLFstMi4zMjI3%0ALDEuOTY5XV0sImRpc3BsYXlsYWJlbHMiOlt0cnVlXSwiYmciOlsicmdiYSgyNTUs%0AMjU1LDI1NSwxKSJdLCJsYWJlbCI6WyJBY2NpYWl1b2xpIiwiQWxiaXp6aSIsIkJh%0AcmJhZG9yaSIsIkJpc2NoZXJpIiwiQ2FzdGVsbGFuaSIsIkdpbm9yaSIsIkd1YWRh%0AZ25pIiwiTGFtYmVydGVzY2hpIiwiTWVkaWNpIiwiUGF6emkiLCJQZXJ1enppIiwi%0AUHVjY2kiLCJSaWRvbGZpIiwiU2FsdmlhdGkiLCJTdHJvenppIiwiVG9ybmFidW9u%0AaSJdLCJ4bGFiIjpbInQ9MC0xIl0sImppdHRlciI6W2ZhbHNlXSwidXNlYXJyb3dz%0AIjpbZmFsc2VdLCJ4bGltIjpbLTIuOTg4LDIuOTg4XSwieWxpbSI6Wy0yLjgyMzQs%0AMi44MjM0XX19LHsic3RhcnQiOlsxXSwiZW5kIjpbMl0sImRhdGEiOnsiYWN0aXZl%0AIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6%0AWzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjEx%0AIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwi%0AMTYiOlsxNV19LCJlZGdlcyI6eyIyIjpbMF0sIjQiOlsxXSwiNSI6WzJdLCI2Ijpb%0AM10sIjciOls0XSwiOCI6WzVdLCI5IjpbNl0sIjEwIjpbN10sIjExIjpbOF0sIjEy%0AIjpbOV0sIjEzIjpbMTBdLCIxNCI6WzExXSwiMTUiOlsxMl0sIjE2IjpbMTNdLCIx%0ANyI6WzE0XX19LCJjb29yZCI6W1stMS41MjI0LC0yLjM2NDJdLFsyLjgzMSwtMC44%0AMjg0XSxbLTAuMDY4NSwxLjUwOTRdLFsxLjc2NjQsMS4xMDY2XSxbMC44MTMyLDIu%0ANTkyMV0sWy0wLjk2MDQsMS4wNDU0XSxbMi4xNDQzLDEuODk3NF0sWzEuMDg2OSwx%0ALjgzOTldLFstMS44MzMxLDAuNDg1N10sWy0yLjAxNjEsLTAuNTc5XSxbMC43NTA5%0ALDEuMzEzNV0sWzAuOTI2LC0yLjQyODRdLFsxLjk1NzgsLTEuODMyM10sWy0yLjgz%0AMSwwLjI5MDRdLFstMC4yNDI3LC0yLjU5MjFdLFstMi42MTgyLDEuMTMxN11dLCJk%0AaXNwbGF5bGFiZWxzIjpbdHJ1ZV0sImJnIjpbInJnYmEoMjU1LDI1NSwyNTUsMSki%0AXSwibGFiZWwiOlsiQWNjaWFpdW9saSIsIkFsYml6emkiLCJCYXJiYWRvcmkiLCJC%0AaXNjaGVyaSIsIkNhc3RlbGxhbmkiLCJHaW5vcmkiLCJHdWFkYWduaSIsIkxhbWJl%0AcnRlc2NoaSIsIk1lZGljaSIsIlBhenppIiwiUGVydXp6aSIsIlB1Y2NpIiwiUmlk%0Ab2xmaSIsIlNhbHZpYXRpIiwiU3Ryb3p6aSIsIlRvcm5hYnVvbmkiXSwieGxhYiI6%0AWyJ0PTEtMiJdLCJqaXR0ZXIiOltmYWxzZV0sInVzZWFycm93cyI6W2ZhbHNlXSwi%0AeGxpbSI6Wy0yLjk4OCwyLjk4OF0sInlsaW0iOlstMi44MjM0LDIuODIzNF19fSx7%0AInN0YXJ0IjpbMl0sImVuZCI6WzNdLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6%0AeyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVd%0ALCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIi%0AOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdfSwi%0AZWRnZXMiOnsiMiI6WzBdLCIzIjpbMV0sIjQiOlsyXSwiNSI6WzNdLCI3IjpbNF0s%0AIjgiOls1XSwiOSI6WzZdLCIxMCI6WzddLCIxMSI6WzhdLCIxMiI6WzldLCIxMyI6%0AWzEwXSwiMTUiOlsxMV0sIjE2IjpbMTJdLCIxNyI6WzEzXX19LCJjb29yZCI6W1st%0AMS43NDM4LC0yLjIyNzJdLFsyLjk4OCwtMC41NjAzXSxbLTAuMzIyNSwxLjM4MDFd%0ALFsxLjY3MDIsMS4wMjA4XSxbMC45NjAxLDIuNjE5Ml0sWy0xLjE5NzgsMS43OTg1%0AXSxbMS42NjEsMS45MzAzXSxbMC40MDMzLDIuMDgzMV0sWy0xLjIwNzksMC44Mzkz%0AXSxbLTEuMTQyLC0wLjE5NTRdLFswLjY4NTQsMS4zODczXSxbMC45ODY0LC0yLjQx%0ANzJdLFsyLjEwMTMsLTEuNzM4OV0sWy0yLjk4OCwwLjAwOTNdLFstMC4zMTA0LC0y%0ALjYxOTJdLFstMi4yNTM5LDAuNzAzNF1dLCJkaXNwbGF5bGFiZWxzIjpbdHJ1ZV0s%0AImJnIjpbInJnYmEoMjU1LDI1NSwyNTUsMSkiXSwibGFiZWwiOlsiQWNjaWFpdW9s%0AaSIsIkFsYml6emkiLCJCYXJiYWRvcmkiLCJCaXNjaGVyaSIsIkNhc3RlbGxhbmki%0ALCJHaW5vcmkiLCJHdWFkYWduaSIsIkxhbWJlcnRlc2NoaSIsIk1lZGljaSIsIlBh%0AenppIiwiUGVydXp6aSIsIlB1Y2NpIiwiUmlkb2xmaSIsIlNhbHZpYXRpIiwiU3Ry%0Ab3p6aSIsIlRvcm5hYnVvbmkiXSwieGxhYiI6WyJ0PTItMyJdLCJqaXR0ZXIiOltm%0AYWxzZV0sInVzZWFycm93cyI6W2ZhbHNlXSwieGxpbSI6Wy0yLjk4OCwyLjk4OF0s%0AInlsaW0iOlstMi44MjM0LDIuODIzNF19fSx7InN0YXJ0IjpbM10sImVuZCI6WzRd%0ALCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6%0AWzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6%0AWzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6%0AWzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdfSwiZWRnZXMiOnsiMiI6WzBdLCIzIjpb%0AMV0sIjQiOlsyXSwiNSI6WzNdLCI3IjpbNF0sIjgiOls1XSwiOSI6WzZdLCIxMSI6%0AWzddLCIxMyI6WzhdLCIxNCI6WzldLCIxNSI6WzEwXSwiMTYiOlsxMV0sIjE3Ijpb%0AMTJdLCIxOCI6WzEzXX19LCJjb29yZCI6W1stMS45MTc5LC0yLjQyMzddLFsyLjc3%0ANTMsMC4xMTYyXSxbLTEuMDE3MSwxLjMzODldLFsxLjAyMzEsMS4wMzc3XSxbMC4z%0AMTY3LDIuNjM2OF0sWy0xLjcxNzYsMi4xNjI5XSxbMC44MzkzLDEuODk3Ml0sWy0w%0ALjM0NjgsMi4xMTQ4XSxbLTEuNzQ2OSwwLjUyODddLFstMS41MTQ0LC0wLjUwNTRd%0ALFswLjA3MzYsMS40MTcyXSxbMS4wMDUyLC0yLjIyMDVdLFsyLjA2NjcsLTEuMzQ4%0ANl0sWy0yLjYyODgsLTAuMDQ5Ml0sWy0wLjI5OTIsLTIuNjM2OF0sWy0yLjc3NTMs%0AMC43NjQ0XV0sImRpc3BsYXlsYWJlbHMiOlt0cnVlXSwiYmciOlsicmdiYSgyNTUs%0AMjU1LDI1NSwxKSJdLCJsYWJlbCI6WyJBY2NpYWl1b2xpIiwiQWxiaXp6aSIsIkJh%0AcmJhZG9yaSIsIkJpc2NoZXJpIiwiQ2FzdGVsbGFuaSIsIkdpbm9yaSIsIkd1YWRh%0AZ25pIiwiTGFtYmVydGVzY2hpIiwiTWVkaWNpIiwiUGF6emkiLCJQZXJ1enppIiwi%0AUHVjY2kiLCJSaWRvbGZpIiwiU2FsdmlhdGkiLCJTdHJvenppIiwiVG9ybmFidW9u%0AaSJdLCJ4bGFiIjpbInQ9My00Il0sImppdHRlciI6W2ZhbHNlXSwidXNlYXJyb3dz%0AIjpbZmFsc2VdLCJ4bGltIjpbLTIuOTg4LDIuOTg4XSwieWxpbSI6Wy0yLjgyMzQs%0AMi44MjM0XX19LHsic3RhcnQiOls0XSwiZW5kIjpbNV0sImRhdGEiOnsiYWN0aXZl%0AIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6%0AWzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjEx%0AIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwi%0AMTYiOlsxNV19LCJlZGdlcyI6eyIyIjpbMF0sIjMiOlsxXSwiNSI6WzJdLCI3Ijpb%0AM10sIjgiOls0XSwiOSI6WzVdLCIxMiI6WzZdLCIxMyI6WzddLCIxNCI6WzhdLCIx%0ANSI6WzldLCIxNiI6WzEwXSwiMTciOlsxMV0sIjE4IjpbMTJdLCIxOSI6WzEzXX19%0ALCJjb29yZCI6W1stMS43OTk1LC0yLjA4MjddLFsyLjc0MTEsLTAuNzM1Nl0sWy0w%0ALjg1MjQsMS40MzA3XSxbMi4xMjk4LDEuMTk3Ml0sWzAuNjkwMSwyLjQ1MThdLFst%0AMS4zMjI3LDIuMzU5M10sWzIuMTY0LDIuMDY2OF0sWzAuMiwxLjYxODJdLFstMS43%0ANTY0LDAuODUyOV0sWy0wLjk1ODYsMC40NV0sWzEuMjI0NiwxLjY2MzFdLFswLjc3%0AODEsLTIuMzEzXSxbMS44NTQ1LC0xLjcyNjJdLFstMi40MDk2LDAuMDE3OF0sWy0w%0ALjQ2MTYsLTIuNDUxOF0sWy0yLjc0MTEsMC44MzE2XV0sImRpc3BsYXlsYWJlbHMi%0AOlt0cnVlXSwiYmciOlsicmdiYSgyNTUsMjU1LDI1NSwxKSJdLCJsYWJlbCI6WyJB%0AY2NpYWl1b2xpIiwiQWxiaXp6aSIsIkJhcmJhZG9yaSIsIkJpc2NoZXJpIiwiQ2Fz%0AdGVsbGFuaSIsIkdpbm9yaSIsIkd1YWRhZ25pIiwiTGFtYmVydGVzY2hpIiwiTWVk%0AaWNpIiwiUGF6emkiLCJQZXJ1enppIiwiUHVjY2kiLCJSaWRvbGZpIiwiU2Fsdmlh%0AdGkiLCJTdHJvenppIiwiVG9ybmFidW9uaSJdLCJ4bGFiIjpbInQ9NC01Il0sImpp%0AdHRlciI6W2ZhbHNlXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJ4bGltIjpbLTIuOTg4%0ALDIuOTg4XSwieWxpbSI6Wy0yLjgyMzQsMi44MjM0XX19LHsic3RhcnQiOls1XSwi%0AZW5kIjpbNl0sImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6%0AWzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6%0AWzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsx%0AMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV19LCJlZGdlcyI6eyIyIjpb%0AMF0sIjMiOlsxXSwiNSI6WzJdLCI4IjpbM10sIjkiOls0XSwiMTIiOls1XSwiMTMi%0AOls2XSwiMTUiOls3XSwiMTYiOls4XSwiMTciOls5XSwiMTgiOlsxMF0sIjE5Ijpb%0AMTFdLCIyMCI6WzEyXSwiMjEiOlsxM119fSwiY29vcmQiOltbLTAuODkwNywtMi42%0AMzk5XSxbMi4zNDU0LC0xLjI5NjFdLFstMS4xNDYxLDAuOTI1M10sWzEuMzA0LDIu%0ANjM5OV0sWzAuMzE1OCwyLjI5NzldLFstMS4yMjE5LDEuODU4OF0sWzEuNzE1NCwx%0ALjc1NzVdLFstMC4zMDQ5LDEuNTE4XSxbLTEuOTgzMywwLjMzMzZdLFstMS4xMjc1%0ALC0wLjAzNTddLFswLjcwNSwxLjQxODRdLFswLjM4NjIsLTIuNjIyM10sWzEuNTA3%0AMSwtMi4xNTk0XSxbLTIuODk4LC0xLjQzNF0sWzIuODk4LC0wLjA5NDFdLFstMi42%0AMTgxLC0wLjQ2MDVdXSwiZGlzcGxheWxhYmVscyI6W3RydWVdLCJiZyI6WyJyZ2Jh%0AKDI1NSwyNTUsMjU1LDEpIl0sImxhYmVsIjpbIkFjY2lhaXVvbGkiLCJBbGJpenpp%0AIiwiQmFyYmFkb3JpIiwiQmlzY2hlcmkiLCJDYXN0ZWxsYW5pIiwiR2lub3JpIiwi%0AR3VhZGFnbmkiLCJMYW1iZXJ0ZXNjaGkiLCJNZWRpY2kiLCJQYXp6aSIsIlBlcnV6%0AemkiLCJQdWNjaSIsIlJpZG9sZmkiLCJTYWx2aWF0aSIsIlN0cm96emkiLCJUb3Ju%0AYWJ1b25pIl0sInhsYWIiOlsidD01LTYiXSwiaml0dGVyIjpbZmFsc2VdLCJ1c2Vh%0AcnJvd3MiOltmYWxzZV0sInhsaW0iOlstMi45ODgsMi45ODhdLCJ5bGltIjpbLTIu%0AODIzNCwyLjgyMzRdfX0seyJzdGFydCI6WzZdLCJlbmQiOls3XSwiZGF0YSI6eyJh%0AY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNd%0ALCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5%0AXSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1Ijpb%0AMTRdLCIxNiI6WzE1XX0sImVkZ2VzIjp7IjIiOlswXSwiMyI6WzFdLCI3IjpbMl0s%0AIjgiOlszXSwiOSI6WzRdLCIxMiI6WzVdLCIxMyI6WzZdLCIxNCI6WzddLCIxNSI6%0AWzhdLCIxNiI6WzldLCIxNyI6WzEwXSwiMTgiOlsxMV0sIjE5IjpbMTJdLCIyMCI6%0AWzEzXSwiMjEiOlsxNF19fSwiY29vcmQiOltbLTEuNDIyNiwtMi40Njg2XSxbMi4x%0ANzY2LC0xLjQ0NjVdLFstMS4wNTg1LDEuMDA5NF0sWzEuMjk0NSwyLjYwNTVdLFsw%0ALjM0NTcsMi4zOTQ2XSxbLTEuMDkwOSwxLjk1MjddLFsxLjg1NTMsMS4zNjk0XSxb%0ALTAuMTg2NCwxLjU0OTZdLFstMS45MjU4LDAuNDU3Ml0sWy0xLjA5MywwLjA0MTFd%0ALFswLjg2MDUsMS42NTkzXSxbLTAuMDA5NCwtMi42MDU1XSxbMS4yMDQ3LC0yLjIz%0AODZdLFstMi44ODgzLDAuMzk1M10sWzIuODg4MywtMC4yNDg0XSxbLTIuNTE2Nywt%0AMC40MTc4XV0sImRpc3BsYXlsYWJlbHMiOlt0cnVlXSwiYmciOlsicmdiYSgyNTUs%0AMjU1LDI1NSwxKSJdLCJsYWJlbCI6WyJBY2NpYWl1b2xpIiwiQWxiaXp6aSIsIkJh%0AcmJhZG9yaSIsIkJpc2NoZXJpIiwiQ2FzdGVsbGFuaSIsIkdpbm9yaSIsIkd1YWRh%0AZ25pIiwiTGFtYmVydGVzY2hpIiwiTWVkaWNpIiwiUGF6emkiLCJQZXJ1enppIiwi%0AUHVjY2kiLCJSaWRvbGZpIiwiU2FsdmlhdGkiLCJTdHJvenppIiwiVG9ybmFidW9u%0AaSJdLCJ4bGFiIjpbInQ9Ni03Il0sImppdHRlciI6W2ZhbHNlXSwidXNlYXJyb3dz%0AIjpbZmFsc2VdLCJ4bGltIjpbLTIuOTg4LDIuOTg4XSwieWxpbSI6Wy0yLjgyMzQs%0AMi44MjM0XX19LHsic3RhcnQiOls3XSwiZW5kIjpbOF0sImRhdGEiOnsiYWN0aXZl%0AIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6%0AWzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjEx%0AIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwi%0AMTYiOlsxNV19LCJlZGdlcyI6eyIyIjpbMF0sIjMiOlsxXSwiNyI6WzJdLCI4Ijpb%0AM10sIjkiOls0XSwiMTIiOls1XSwiMTMiOls2XSwiMTQiOls3XSwiMTUiOls4XSwi%0AMTYiOls5XSwiMTciOlsxMF0sIjE4IjpbMTFdLCIxOSI6WzEyXSwiMjAiOlsxM10s%0AIjIxIjpbMTRdfX0sImNvb3JkIjpbWy0xLjQzMjgsLTIuNDU4OF0sWzIuMTcyOSwt%0AMS40NTQ2XSxbLTEuMDUwMywxLjAxNzhdLFsxLjMxMTIsMi42MDA3XSxbMC4zNjE0%0ALDIuMzkyNl0sWy0xLjA3NiwxLjk2MDddLFsxLjg2OSwxLjM1OTldLFstMC4xNzQx%0ALDEuNTUwOV0sWy0xLjkyMDcsMC40NjkyXSxbLTEuMDg5OCwwLjA0ODddLFswLjg3%0ANTMsMS42NTYxXSxbLTAuMDI1NCwtMi42MDA3XSxbMS4xOTU5LC0yLjI0MjhdLFst%0AMi44ODQ4LDAuNDExNF0sWzIuODg0OCwtMC4yNjc1XSxbLTIuNTE0MywtMC40MDQ2%0AXV0sImRpc3BsYXlsYWJlbHMiOlt0cnVlXSwiYmciOlsicmdiYSgyNTUsMjU1LDI1%0ANSwxKSJdLCJsYWJlbCI6WyJBY2NpYWl1b2xpIiwiQWxiaXp6aSIsIkJhcmJhZG9y%0AaSIsIkJpc2NoZXJpIiwiQ2FzdGVsbGFuaSIsIkdpbm9yaSIsIkd1YWRhZ25pIiwi%0ATGFtYmVydGVzY2hpIiwiTWVkaWNpIiwiUGF6emkiLCJQZXJ1enppIiwiUHVjY2ki%0ALCJSaWRvbGZpIiwiU2FsdmlhdGkiLCJTdHJvenppIiwiVG9ybmFidW9uaSJdLCJ4%0AbGFiIjpbInQ9Ny04Il0sImppdHRlciI6W2ZhbHNlXSwidXNlYXJyb3dzIjpbZmFs%0Ac2VdLCJ4bGltIjpbLTIuOTg4LDIuOTg4XSwieWxpbSI6Wy0yLjgyMzQsMi44MjM0%0AXX19LHsic3RhcnQiOls4XSwiZW5kIjpbOV0sImRhdGEiOnsiYWN0aXZlIjp7Im5v%0AZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2%0AIjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBd%0ALCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsx%0ANV19LCJlZGdlcyI6eyIyIjpbMF0sIjMiOlsxXSwiNyI6WzJdLCI4IjpbM10sIjki%0AOls0XSwiMTMiOls1XSwiMTQiOls2XSwiMTUiOls3XSwiMTYiOls4XSwiMTciOls5%0AXSwiMTgiOlsxMF0sIjE5IjpbMTFdLCIyMCI6WzEyXSwiMjEiOlsxM119fSwiY29v%0AcmQiOltbLTAuOTg2NCwtMi41Njg5XSxbMi4yNzgzLC0xLjQ0MDRdLFstMS4xMTk5%0ALDAuOTIzOV0sWzEuMjA3OSwyLjU5NDRdLFswLjcwNjcsMS43Njk4XSxbLTEuMTEz%0ANSwxLjg4MTFdLFsyLjcyNTgsMS43NzE0XSxbLTAuMjUzNSwxLjQ2OTJdLFstMS45%0AMzA2LDAuMjg1XSxbLTEuMDcyMiwtMC4wNDMyXSxbMS43MTc1LDEuODA3NV0sWzAu%0AMzA4NSwtMi41OTQ0XSxbMS40NDI1LC0yLjI0NjhdLFstMi44NzIsMC4xMDg1XSxb%0AMi44NzIsLTAuNDAyXSxbLTIuNDI1LC0wLjY2MzJdXSwiZGlzcGxheWxhYmVscyI6%0AW3RydWVdLCJiZyI6WyJyZ2JhKDI1NSwyNTUsMjU1LDEpIl0sImxhYmVsIjpbIkFj%0AY2lhaXVvbGkiLCJBbGJpenppIiwiQmFyYmFkb3JpIiwiQmlzY2hlcmkiLCJDYXN0%0AZWxsYW5pIiwiR2lub3JpIiwiR3VhZGFnbmkiLCJMYW1iZXJ0ZXNjaGkiLCJNZWRp%0AY2kiLCJQYXp6aSIsIlBlcnV6emkiLCJQdWNjaSIsIlJpZG9sZmkiLCJTYWx2aWF0%0AaSIsIlN0cm96emkiLCJUb3JuYWJ1b25pIl0sInhsYWIiOlsidD04LTkiXSwiaml0%0AdGVyIjpbZmFsc2VdLCJ1c2VhcnJvd3MiOltmYWxzZV0sInhsaW0iOlstMi45ODgs%0AMi45ODhdLCJ5bGltIjpbLTIuODIzNCwyLjgyMzRdfX0seyJzdGFydCI6WzldLCJl%0AbmQiOlsxMF0sImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6%0AWzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6%0AWzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsx%0AMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV19LCJlZGdlcyI6eyIyIjpb%0AMF0sIjMiOlsxXSwiNyI6WzJdLCI4IjpbM10sIjkiOls0XSwiMTMiOls1XSwiMTQi%0AOls2XSwiMTYiOls3XSwiMTgiOls4XSwiMTkiOls5XSwiMjAiOlsxMF0sIjIyIjpb%0AMTFdfX0sImNvb3JkIjpbWy0xLjc5NTMsLTIuMTE3N10sWzIuMjg3NywtMS4wNjQx%0AXSxbLTEuNDY2MywxLjA4MTRdLFswLjYxMTMsMi42NjMzXSxbMC4xMTczLDEuODMy%0AOF0sWy0wLjQzODQsMC45NTkxXSxbMi4xMTk1LDEuOTYxN10sWy0wLjkyNDQsMS45%0AODI3XSxbLTIuMTYxMywwLjM0MTJdLFstMi40MjA3LDEuMjE5OV0sWzEuMTI4Mywx%0ALjkwNV0sWzAuNDMzLC0xLjkzXSxbMS41OTkyLC0yLjE3MzZdLFstMi44MzA3LC0w%0ALjM5MDVdLFsyLjgzMDcsMC4wNzU4XSxbLTAuNTI2LC0yLjY2MzNdXSwiZGlzcGxh%0AeWxhYmVscyI6W3RydWVdLCJiZyI6WyJyZ2JhKDI1NSwyNTUsMjU1LDEpIl0sImxh%0AYmVsIjpbIkFjY2lhaXVvbGkiLCJBbGJpenppIiwiQmFyYmFkb3JpIiwiQmlzY2hl%0AcmkiLCJDYXN0ZWxsYW5pIiwiR2lub3JpIiwiR3VhZGFnbmkiLCJMYW1iZXJ0ZXNj%0AaGkiLCJNZWRpY2kiLCJQYXp6aSIsIlBlcnV6emkiLCJQdWNjaSIsIlJpZG9sZmki%0ALCJTYWx2aWF0aSIsIlN0cm96emkiLCJUb3JuYWJ1b25pIl0sInhsYWIiOlsidD05%0ALTEwIl0sImppdHRlciI6W2ZhbHNlXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJ4bGlt%0AIjpbLTIuOTg4LDIuOTg4XSwieWxpbSI6Wy0yLjgyMzQsMi44MjM0XX19LHsic3Rh%0AcnQiOlsxMF0sImVuZCI6WzExXSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsi%0AMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwi%0ANyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpb%0AMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XX0sImVk%0AZ2VzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjciOlszXSwiOSI6WzRdLCIx%0AMyI6WzVdLCIxNCI6WzZdLCIxNiI6WzddLCIxOCI6WzhdLCIxOSI6WzldLCIyMCI6%0AWzEwXSwiMjIiOlsxMV19fSwiY29vcmQiOltbLTIuMTU5OSwtMi4wNzgyXSxbMi4z%0AOTY0LC0wLjk5OTFdLFstMS4xNTA5LDEuMjI1Ml0sWzAuMTc0MiwyLjU2ODZdLFst%0AMC4yMDkyLDEuNjkxOF0sWy0wLjI1OCwwLjc5MjVdLFsxLjc2NTgsMi4wMTI2XSxb%0ALTEuNzU5LDIuMDU4OF0sWy0yLjA3LDAuNzM3OF0sWy0xLjM3NjMsMC4yMTIxXSxb%0AMC43OTI5LDEuODk0XSxbMC40NzUsLTIuNTA2NF0sWzEuNTg0NywtMS45NTYyXSxb%0ALTIuODQ4NiwwLjExMjVdLFsyLjg0ODYsMC4zMDg3XSxbLTAuODAxNiwtMi41Njg2%0AXV0sImRpc3BsYXlsYWJlbHMiOlt0cnVlXSwiYmciOlsicmdiYSgyNTUsMjU1LDI1%0ANSwxKSJdLCJsYWJlbCI6WyJBY2NpYWl1b2xpIiwiQWxiaXp6aSIsIkJhcmJhZG9y%0AaSIsIkJpc2NoZXJpIiwiQ2FzdGVsbGFuaSIsIkdpbm9yaSIsIkd1YWRhZ25pIiwi%0ATGFtYmVydGVzY2hpIiwiTWVkaWNpIiwiUGF6emkiLCJQZXJ1enppIiwiUHVjY2ki%0ALCJSaWRvbGZpIiwiU2FsdmlhdGkiLCJTdHJvenppIiwiVG9ybmFidW9uaSJdLCJ4%0AbGFiIjpbInQ9MTAtMTEiXSwiaml0dGVyIjpbZmFsc2VdLCJ1c2VhcnJvd3MiOltm%0AYWxzZV0sInhsaW0iOlstMi45ODgsMi45ODhdLCJ5bGltIjpbLTIuODIzNCwyLjgy%0AMzRdfX0seyJzdGFydCI6WzExXSwiZW5kIjpbMTJdLCJkYXRhIjp7ImFjdGl2ZSI6%0AeyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0%0AXSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6%0AWzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2%0AIjpbMTVdfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNyI6WzNd%0ALCIxMCI6WzRdLCIxMyI6WzVdLCIxNCI6WzZdLCIxNiI6WzddLCIxOCI6WzhdLCIx%0AOSI6WzldLCIyMCI6WzEwXSwiMjIiOlsxMV19fSwiY29vcmQiOltbLTEuMTA4NCwt%0AMi42ODkxXSxbMi41ODQyLC0wLjIyMDJdLFstMS43MDU1LDAuODQ5XSxbLTAuMTEy%0AMSwyLjAwNF0sWy0wLjc3MTYsMS4yODM2XSxbLTAuOTU4NSwwLjMxOF0sWzEuNjYy%0AOCwyLjY4OTFdLFstMi4yNjIsMS42NzY2XSxbLTEuODQwOSwtMC4xNzZdLFstMi41%0AODQyLDAuMzY1OF0sWzAuNzA4NiwyLjQ5NDJdLFsxLjM2NDQsLTIuMTY1Nl0sWzIu%0AMTE0OCwtMS4yNzk0XSxbLTIuMjg2MiwtMS4wOTQ2XSxbMi41Mjk5LDAuOTk1XSxb%0AMC4yNDA1LC0yLjU5MjddXSwiZGlzcGxheWxhYmVscyI6W3RydWVdLCJiZyI6WyJy%0AZ2JhKDI1NSwyNTUsMjU1LDEpIl0sImxhYmVsIjpbIkFjY2lhaXVvbGkiLCJBbGJp%0AenppIiwiQmFyYmFkb3JpIiwiQmlzY2hlcmkiLCJDYXN0ZWxsYW5pIiwiR2lub3Jp%0AIiwiR3VhZGFnbmkiLCJMYW1iZXJ0ZXNjaGkiLCJNZWRpY2kiLCJQYXp6aSIsIlBl%0AcnV6emkiLCJQdWNjaSIsIlJpZG9sZmkiLCJTYWx2aWF0aSIsIlN0cm96emkiLCJU%0Ab3JuYWJ1b25pIl0sInhsYWIiOlsidD0xMS0xMiJdLCJqaXR0ZXIiOltmYWxzZV0s%0AInVzZWFycm93cyI6W2ZhbHNlXSwieGxpbSI6Wy0yLjk4OCwyLjk4OF0sInlsaW0i%0AOlstMi44MjM0LDIuODIzNF19fSx7InN0YXJ0IjpbMTJdLCJlbmQiOlsxM10sImRh%0AdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0s%0AIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0s%0AIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNd%0ALCIxNSI6WzE0XSwiMTYiOlsxNV19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwi%0AMyI6WzJdLCI3IjpbM10sIjEwIjpbNF0sIjEzIjpbNV0sIjE0IjpbNl0sIjE2Ijpb%0AN10sIjE4IjpbOF0sIjIwIjpbOV0sIjIyIjpbMTBdfX0sImNvb3JkIjpbWy0wLjgw%0AOTUsLTIuNzU3MV0sWzIuODIyOCwtMC4zNjE0XSxbLTEuNjUxNCwwLjkwODhdLFst%0AMC4wNzEzLDIuMDg4M10sWy0wLjcyNywxLjM1OTFdLFstMC45ODg5LDAuMzgyNF0s%0AWzEuNzM0MywyLjc1NzFdLFstMi4zNDM2LDEuNTY4OF0sWy0xLjg3NTEsLTAuMTI2%0ANl0sWy0yLjgyMjgsLTAuNDgzXSxbMC43NzM3LDIuNTU2N10sWzEuODM0LC0yLjEx%0AMDRdLFsxLjY2NTIsLTAuODU2NV0sWy0xLjgxMjgsLTEuMTczM10sWzIuNTU4Nyww%0ALjk5NzRdLFswLjUyOTEsLTIuNTY0Ml1dLCJkaXNwbGF5bGFiZWxzIjpbdHJ1ZV0s%0AImJnIjpbInJnYmEoMjU1LDI1NSwyNTUsMSkiXSwibGFiZWwiOlsiQWNjaWFpdW9s%0AaSIsIkFsYml6emkiLCJCYXJiYWRvcmkiLCJCaXNjaGVyaSIsIkNhc3RlbGxhbmki%0ALCJHaW5vcmkiLCJHdWFkYWduaSIsIkxhbWJlcnRlc2NoaSIsIk1lZGljaSIsIlBh%0AenppIiwiUGVydXp6aSIsIlB1Y2NpIiwiUmlkb2xmaSIsIlNhbHZpYXRpIiwiU3Ry%0Ab3p6aSIsIlRvcm5hYnVvbmkiXSwieGxhYiI6WyJ0PTEyLTEzIl0sImppdHRlciI6%0AW2ZhbHNlXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJ4bGltIjpbLTIuOTg4LDIuOTg4%0AXSwieWxpbSI6Wy0yLjgyMzQsMi44MjM0XX19LHsic3RhcnQiOlsxM10sImVuZCI6%0AWzE0XSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0s%0AIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10s%0AIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwi%0AMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XX0sImVkZ2VzIjp7IjEiOlswXSwi%0AMiI6WzFdLCIzIjpbMl0sIjciOlszXSwiOSI6WzRdLCIxMCI6WzVdLCIxMyI6WzZd%0ALCIxNCI6WzddLCIxNiI6WzhdLCIxOCI6WzldLCIyMCI6WzEwXSwiMjIiOlsxMV0s%0AIjIzIjpbMTJdLCIyNCI6WzEzXSwiMjUiOlsxNF19fSwiY29vcmQiOltbLTEuMTA5%0ANiwtMi41OTE2XSxbMi4zMjgsLTAuNjM4Nl0sWy0xLjUzMDUsMS4yMzgzXSxbLTAu%0AMTIzMSwyLjU5MTZdLFstMC41NDc5LDEuNjUwNF0sWy0wLjg2MzMsMC42NDYzXSxb%0AMS4zNzk1LDIuMzYxXSxbLTIuNTAyOCwxLjYxMThdLFstMS43ODg5LDAuMjEwOF0s%0AWy0yLjY4NzgsLTAuMzAxOF0sWzAuNDYxMSwxLjkxNTNdLFsxLjU1NTQsLTEuNzA1%0ANl0sWy0xLjM2MzQsMi4xODk4XSxbLTEuOTczMSwtMC43OTM0XSxbMi42ODc4LDAu%0ANzY5Nl0sWzAuNDA1LC0yLjM4MTddXSwiZGlzcGxheWxhYmVscyI6W3RydWVdLCJi%0AZyI6WyJyZ2JhKDI1NSwyNTUsMjU1LDEpIl0sImxhYmVsIjpbIkFjY2lhaXVvbGki%0ALCJBbGJpenppIiwiQmFyYmFkb3JpIiwiQmlzY2hlcmkiLCJDYXN0ZWxsYW5pIiwi%0AR2lub3JpIiwiR3VhZGFnbmkiLCJMYW1iZXJ0ZXNjaGkiLCJNZWRpY2kiLCJQYXp6%0AaSIsIlBlcnV6emkiLCJQdWNjaSIsIlJpZG9sZmkiLCJTYWx2aWF0aSIsIlN0cm96%0AemkiLCJUb3JuYWJ1b25pIl0sInhsYWIiOlsidD0xMy0xNCJdLCJqaXR0ZXIiOltm%0AYWxzZV0sInVzZWFycm93cyI6W2ZhbHNlXSwieGxpbSI6Wy0yLjk4OCwyLjk4OF0s%0AInlsaW0iOlstMi44MjM0LDIuODIzNF19fSx7InN0YXJ0IjpbMTRdLCJlbmQiOlsx%0ANV0sImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIz%0AIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5%0AIjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0%0AIjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV19LCJlZGdlcyI6eyIxIjpbMF0sIjIi%0AOlsxXSwiMyI6WzJdLCI3IjpbM10sIjkiOls0XSwiMTAiOls1XSwiMTMiOls2XSwi%0AMTQiOls3XSwiMTYiOls4XSwiMTgiOls5XSwiMjAiOlsxMF0sIjIzIjpbMTFdLCIy%0ANCI6WzEyXSwiMjUiOlsxM119fSwiY29vcmQiOltbLTAuOTA4NywtMi42NDc2XSxb%0AMi40MTEsLTAuNjU3Ml0sWy0xLjMwOCwxLjA4Nl0sWy0wLjAyNTYsMi42NDc2XSxb%0ALTAuMzg0NCwxLjY4MzddLFstMC45NDY1LDAuMTYzNF0sWzEuNTIyMSwyLjM4ODJd%0ALFstMi4yODQ2LDEuNTcwMl0sWy0xLjg0MTMsMC4xNTYzXSxbLTIuNzM2NywtMC4z%0AMDI4XSxbMC41OTM3LDEuOTc5NV0sWzEuNjY0NSwtMS43MTExXSxbLTEuMjI3Miwy%0ALjAyOThdLFstMi4wNzI5LC0wLjg2NzRdLFsyLjczNjcsMC43MDA3XSxbMC41NTk3%0ALC0yLjQwNzZdXSwiZGlzcGxheWxhYmVscyI6W3RydWVdLCJiZyI6WyJyZ2JhKDI1%0ANSwyNTUsMjU1LDEpIl0sImxhYmVsIjpbIkFjY2lhaXVvbGkiLCJBbGJpenppIiwi%0AQmFyYmFkb3JpIiwiQmlzY2hlcmkiLCJDYXN0ZWxsYW5pIiwiR2lub3JpIiwiR3Vh%0AZGFnbmkiLCJMYW1iZXJ0ZXNjaGkiLCJNZWRpY2kiLCJQYXp6aSIsIlBlcnV6emki%0ALCJQdWNjaSIsIlJpZG9sZmkiLCJTYWx2aWF0aSIsIlN0cm96emkiLCJUb3JuYWJ1%0Ab25pIl0sInhsYWIiOlsidD0xNC0xNSJdLCJqaXR0ZXIiOltmYWxzZV0sInVzZWFy%0Acm93cyI6W2ZhbHNlXSwieGxpbSI6Wy0yLjk4OCwyLjk4OF0sInlsaW0iOlstMi44%0AMjM0LDIuODIzNF19fSx7InN0YXJ0IjpbMTVdLCJlbmQiOlsxNl0sImRhdGEiOnsi%0AYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlsz%0AXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpb%0AOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6%0AWzE0XSwiMTYiOlsxNV19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJd%0ALCI3IjpbM10sIjkiOls0XSwiMTAiOls1XSwiMTMiOls2XSwiMTQiOls3XSwiMTgi%0AOls4XSwiMjAiOls5XSwiMjMiOlsxMF0sIjI0IjpbMTFdLCIyNSI6WzEyXX19LCJj%0Ab29yZCI6W1stMS4yNDA0LC0yLjU5NDFdLFsyLjY1MDYsLTAuMjcyOV0sWy0xLjE2%0AMzgsMC45NzE0XSxbLTAuMTc5NiwyLjYyMzZdLFstMC40NjczLDEuNjkxOF0sWy0w%0ALjkyODIsMC4wMzkxXSxbMS4zODcxLDIuNDAzOF0sWzIuMTk3MiwtMS4zODQ5XSxb%0ALTEuODQ2NSwwLjIzNjhdLFstMi43NzIxLC0wLjAwMTddLFswLjQ4NTIsMS45OTI5%0AXSxbMS4zMDgzLC0yLjE5MTFdLFstMS40MTcsMS44NzU5XSxbLTIuMjQwNCwtMC43%0AMTQyXSxbMi43NzIxLDEuMDM1NF0sWzAuMTU1MywtMi42MjM2XV0sImRpc3BsYXls%0AYWJlbHMiOlt0cnVlXSwiYmciOlsicmdiYSgyNTUsMjU1LDI1NSwxKSJdLCJsYWJl%0AbCI6WyJBY2NpYWl1b2xpIiwiQWxiaXp6aSIsIkJhcmJhZG9yaSIsIkJpc2NoZXJp%0AIiwiQ2FzdGVsbGFuaSIsIkdpbm9yaSIsIkd1YWRhZ25pIiwiTGFtYmVydGVzY2hp%0AIiwiTWVkaWNpIiwiUGF6emkiLCJQZXJ1enppIiwiUHVjY2kiLCJSaWRvbGZpIiwi%0AU2FsdmlhdGkiLCJTdHJvenppIiwiVG9ybmFidW9uaSJdLCJ4bGFiIjpbInQ9MTUt%0AMTYiXSwiaml0dGVyIjpbZmFsc2VdLCJ1c2VhcnJvd3MiOltmYWxzZV0sInhsaW0i%0AOlstMi45ODgsMi45ODhdLCJ5bGltIjpbLTIuODIzNCwyLjgyMzRdfX0seyJzdGFy%0AdCI6WzE2XSwiZW5kIjpbMTddLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIx%0AIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3%0AIjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsx%0AMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdfSwiZWRn%0AZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNSI6WzNdLCI3IjpbNF0sIjki%0AOls1XSwiMTAiOls2XSwiMTMiOls3XSwiMTQiOls4XSwiMTgiOls5XSwiMjAiOlsx%0AMF0sIjIzIjpbMTFdLCIyNSI6WzEyXX19LCJjb29yZCI6W1stMS41NDkzLC0yLjQw%0AODZdLFsyLjU0NjUsLTAuNDY4NF0sWy0xLjE5MTgsMS4yNzI2XSxbMC43Mjk1LDEu%0ANzg1N10sWy0wLjI3ODgsMS43NjIxXSxbLTAuOTc3LDAuMzExMl0sWzEuMzMxMSwy%0ALjU1OTVdLFsxLjk2ODUsLTEuNTI1N10sWy0xLjg2MTksMC40NzYzXSxbLTIuNzkw%0ANiwwLjIwNTJdLFswLjMxNDQsMi41NjA2XSxbMS4wMTgzLC0yLjI0MjddLFstMS44%0AMzk4LDIuMDUyXSxbLTIuMjUyLC0wLjQ4NTFdLFsyLjc5MDYsMC44NDYzXSxbLTAu%0AMTY2OSwtMi41NjA2XV0sImRpc3BsYXlsYWJlbHMiOlt0cnVlXSwiYmciOlsicmdi%0AYSgyNTUsMjU1LDI1NSwxKSJdLCJsYWJlbCI6WyJBY2NpYWl1b2xpIiwiQWxiaXp6%0AaSIsIkJhcmJhZG9yaSIsIkJpc2NoZXJpIiwiQ2FzdGVsbGFuaSIsIkdpbm9yaSIs%0AIkd1YWRhZ25pIiwiTGFtYmVydGVzY2hpIiwiTWVkaWNpIiwiUGF6emkiLCJQZXJ1%0AenppIiwiUHVjY2kiLCJSaWRvbGZpIiwiU2FsdmlhdGkiLCJTdHJvenppIiwiVG9y%0AbmFidW9uaSJdLCJ4bGFiIjpbInQ9MTYtMTciXSwiaml0dGVyIjpbZmFsc2VdLCJ1%0Ac2VhcnJvd3MiOltmYWxzZV0sInhsaW0iOlstMi45ODgsMi45ODhdLCJ5bGltIjpb%0ALTIuODIzNCwyLjgyMzRdfX0seyJzdGFydCI6WzE3XSwiZW5kIjpbMThdLCJkYXRh%0AIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0%0AIjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIx%0AMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwi%0AMTUiOlsxNF0sIjE2IjpbMTVdfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMi%0AOlsyXSwiNSI6WzNdLCI3IjpbNF0sIjkiOls1XSwiMTAiOls2XSwiMTMiOls3XSwi%0AMjAiOls4XSwiMjMiOls5XSwiMjUiOlsxMF0sIjI2IjpbMTFdLCIyNyI6WzEyXX19%0ALCJjb29yZCI6W1stMS4zMTU2LC0yLjUzNjVdLFsyLjUzMjYsMC4wODk1XSxbLTEu%0ANjQ4MywxLjUyNTJdLFswLjIwNDQsMS45MjE1XSxbLTAuNjkxMSwxLjQ5ODhdLFst%0AMi4zNTU0LDAuOTEzMV0sWzAuOTk0NiwyLjUzNjVdLFsxLjI4LC0xLjk0NThdLFst%0AMS4zMjM4LDAuNjY3XSxbLTEuNTY4LC0wLjMyODNdLFstMC40OTI2LDIuNTAxOV0s%0AWzIuMDk1OCwtMS4wNjIyXSxbLTIuNTM2MiwxLjgzOF0sWy0yLjI2ODIsLTEuMDY3%0AMl0sWzIuNTM2MiwxLjQ4ODhdLFswLjE0MzEsLTIuNDYzOV1dLCJkaXNwbGF5bGFi%0AZWxzIjpbdHJ1ZV0sImJnIjpbInJnYmEoMjU1LDI1NSwyNTUsMSkiXSwibGFiZWwi%0AOlsiQWNjaWFpdW9saSIsIkFsYml6emkiLCJCYXJiYWRvcmkiLCJCaXNjaGVyaSIs%0AIkNhc3RlbGxhbmkiLCJHaW5vcmkiLCJHdWFkYWduaSIsIkxhbWJlcnRlc2NoaSIs%0AIk1lZGljaSIsIlBhenppIiwiUGVydXp6aSIsIlB1Y2NpIiwiUmlkb2xmaSIsIlNh%0AbHZpYXRpIiwiU3Ryb3p6aSIsIlRvcm5hYnVvbmkiXSwieGxhYiI6WyJ0PTE3LTE4%0AIl0sImppdHRlciI6W2ZhbHNlXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJ4bGltIjpb%0ALTIuOTg4LDIuOTg4XSwieWxpbSI6Wy0yLjgyMzQsMi44MjM0XX19LHsic3RhcnQi%0AOlsxOF0sImVuZCI6WzE5XSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6%0AWzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6%0AWzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFd%0ALCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XX0sImVkZ2Vz%0AIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjUiOlszXSwiNyI6WzRdLCI5Ijpb%0ANV0sIjEwIjpbNl0sIjEzIjpbN10sIjIzIjpbOF0sIjI1IjpbOV0sIjI2IjpbMTBd%0ALCIyNyI6WzExXX19LCJjb29yZCI6W1stMC44OTY1LC0yLjc3NTZdLFsyLjYyOTUs%0ALTAuMjM2N10sWy0xLjgxMiwxLjE0ODZdLFswLjQyNjQsMi40NzQ3XSxbLTAuODg3%0AOSwxLjAxNjRdLFstMi41NzI2LDAuNjA1NV0sWzEuMzU4LDIuNzc1Nl0sWzEuNjk2%0ALC0yLjA2MTldLFstMS41OTc3LDAuMjQwNF0sWy0xLjg4NTcsLTAuNzQ2NV0sWy0w%0ALjI2NywxLjgwMzldLFsxLjUxNTEsLTAuODM3NF0sWy0yLjYyOTUsMS41NzIyXSxb%0ALTIuNDA4OSwtMS41OTQ4XSxbMi4zNTM4LDEuMTI4OV0sWzAuNDAyNSwtMi41NDZd%0AXSwiZGlzcGxheWxhYmVscyI6W3RydWVdLCJiZyI6WyJyZ2JhKDI1NSwyNTUsMjU1%0ALDEpIl0sImxhYmVsIjpbIkFjY2lhaXVvbGkiLCJBbGJpenppIiwiQmFyYmFkb3Jp%0AIiwiQmlzY2hlcmkiLCJDYXN0ZWxsYW5pIiwiR2lub3JpIiwiR3VhZGFnbmkiLCJM%0AYW1iZXJ0ZXNjaGkiLCJNZWRpY2kiLCJQYXp6aSIsIlBlcnV6emkiLCJQdWNjaSIs%0AIlJpZG9sZmkiLCJTYWx2aWF0aSIsIlN0cm96emkiLCJUb3JuYWJ1b25pIl0sInhs%0AYWIiOlsidD0xOC0xOSJdLCJqaXR0ZXIiOltmYWxzZV0sInVzZWFycm93cyI6W2Zh%0AbHNlXSwieGxpbSI6Wy0yLjk4OCwyLjk4OF0sInlsaW0iOlstMi44MjM0LDIuODIz%0ANF19fSx7InN0YXJ0IjpbMTldLCJlbmQiOlsyMF0sImRhdGEiOnsiYWN0aXZlIjp7%0AIm5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRd%0ALCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpb%0AMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYi%0AOlsxNV19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI1IjpbM10s%0AIjciOls0XSwiOSI6WzVdLCIxMCI6WzZdLCIxMyI6WzddLCIxNCI6WzhdLCIyMCI6%0AWzldLCIyMyI6WzEwXSwiMjUiOlsxMV0sIjI2IjpbMTJdLCIyNyI6WzEzXX19LCJj%0Ab29yZCI6W1stMS41OTIsLTIuNzE0N10sWzIuNjExMywwLjE1NzddLFstMS43NDU1%0ALDEuMjEwMl0sWy0wLjI4NjksMi4wMzA4XSxbLTAuODA5LDEuMTYyMV0sWy0yLjQ3%0ANjMsMC42MDk0XSxbMC4zNjgyLDIuNzUyOV0sWzEuMzg5NCwtMi4xNDEyXSxbLTEu%0ANDYxNCwwLjMxOTRdLFstMS45NDk2LC0wLjYxNDJdLFswLjE1NTIsMS4yMTQ4XSxb%0AMi4yMzgyLC0xLjEyOTJdLFstMi42MTEzLDEuNTU2N10sWy0xLjA4ODcsLTAuNjA5%0AN10sWzIuMzk2MiwxLjY5MTddLFswLjEzMSwtMi43NTI5XV0sImRpc3BsYXlsYWJl%0AbHMiOlt0cnVlXSwiYmciOlsicmdiYSgyNTUsMjU1LDI1NSwxKSJdLCJsYWJlbCI6%0AWyJBY2NpYWl1b2xpIiwiQWxiaXp6aSIsIkJhcmJhZG9yaSIsIkJpc2NoZXJpIiwi%0AQ2FzdGVsbGFuaSIsIkdpbm9yaSIsIkd1YWRhZ25pIiwiTGFtYmVydGVzY2hpIiwi%0ATWVkaWNpIiwiUGF6emkiLCJQZXJ1enppIiwiUHVjY2kiLCJSaWRvbGZpIiwiU2Fs%0AdmlhdGkiLCJTdHJvenppIiwiVG9ybmFidW9uaSJdLCJ4bGFiIjpbInQ9MTktMjAi%0AXSwiaml0dGVyIjpbZmFsc2VdLCJ1c2VhcnJvd3MiOltmYWxzZV0sInhsaW0iOlst%0AMi45ODgsMi45ODhdLCJ5bGltIjpbLTIuODIzNCwyLjgyMzRdfX0seyJzdGFydCI6%0AWzIwXSwiZW5kIjpbMjFdLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpb%0AMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3Ijpb%0ANl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0s%0AIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdfSwiZWRnZXMi%0AOnsiMiI6WzBdLCIzIjpbMV0sIjUiOlsyXSwiOSI6WzNdLCIxMCI6WzRdLCIxMyI6%0AWzVdLCIxNCI6WzZdLCIyMCI6WzddLCIyMyI6WzhdLCIyNSI6WzldLCIyNyI6WzEw%0AXX19LCJjb29yZCI6W1sxLjEzNTUsLTAuMjM3N10sWzIuNjc1MiwtMC4yMjE2XSxb%0ALTEuODIzNSwwLjM0OThdLFswLjQ3MzcsMi4yMTE0XSxbLTAuMTc2MSwyLjgyMzRd%0ALFstMi42NzUyLDAuMDk1OF0sWzEuMzQ4MSwyLjMyNjddLFswLjk4MTIsLTIuMzU4%0AOV0sWy0yLjAxOTgsLTAuNTc5OF0sWy0yLjE2MTgsLTEuNDkyXSxbLTEuMDY2MSwy%0ALjczNDldLFsyLjA3MzUsLTEuNjA5OF0sWy0yLjQ4MzksMS4wMjk4XSxbLTEuMzE1%0AMSwtMS4yMDFdLFsyLjQ3MDYsMS4xODY3XSxbLTAuMjg4MSwtMi44MjM0XV0sImRp%0Ac3BsYXlsYWJlbHMiOlt0cnVlXSwiYmciOlsicmdiYSgyNTUsMjU1LDI1NSwxKSJd%0ALCJsYWJlbCI6WyJBY2NpYWl1b2xpIiwiQWxiaXp6aSIsIkJhcmJhZG9yaSIsIkJp%0Ac2NoZXJpIiwiQ2FzdGVsbGFuaSIsIkdpbm9yaSIsIkd1YWRhZ25pIiwiTGFtYmVy%0AdGVzY2hpIiwiTWVkaWNpIiwiUGF6emkiLCJQZXJ1enppIiwiUHVjY2kiLCJSaWRv%0AbGZpIiwiU2FsdmlhdGkiLCJTdHJvenppIiwiVG9ybmFidW9uaSJdLCJ4bGFiIjpb%0AInQ9MjAtMjEiXSwiaml0dGVyIjpbZmFsc2VdLCJ1c2VhcnJvd3MiOltmYWxzZV0s%0AInhsaW0iOlstMi45ODgsMi45ODhdLCJ5bGltIjpbLTIuODIzNCwyLjgyMzRdfX0s%0AeyJzdGFydCI6WzIxXSwiZW5kIjpbMjJdLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2Rl%0AcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6%0AWzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwi%0AMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVd%0AfSwiZWRnZXMiOnsiMiI6WzBdLCIzIjpbMV0sIjUiOlsyXSwiNyI6WzNdLCI5Ijpb%0ANF0sIjEwIjpbNV0sIjE0IjpbNl0sIjIwIjpbN10sIjI1IjpbOF0sIjI3IjpbOV0s%0AIjI4IjpbMTBdLCIyOSI6WzExXX19LCJjb29yZCI6W1sxLjk0MzgsMC40MTg1XSxb%0AMi43MDg3LC0wLjc0NDldLFstMi43MDg3LC0wLjI1NDldLFswLjQ2NzMsMi41OTI2%0AXSxbLTAuNDIyNywyLjc4ODldLFstMi4xMDM3LDAuNDI5OF0sWzEuMzI5MiwyLjM0%0AMzFdLFswLjc1MDUsLTIuMDUyNF0sWy0xLjgxMDYsLTAuNDIxXSxbLTEuNTM5LC0y%0ALjEwNjNdLFstMC4xNTcxLDEuOTM0MV0sWzIuMDI0MSwtMS44NDE5XSxbLTIuMjk5%0AOCwxLjMyMV0sWy0xLjM5MDUsLTEuMjExNV0sWzIuNjQ2MiwwLjk3MjldLFswLjI2%0AOTksLTIuNzg4OV1dLCJkaXNwbGF5bGFiZWxzIjpbdHJ1ZV0sImJnIjpbInJnYmEo%0AMjU1LDI1NSwyNTUsMSkiXSwibGFiZWwiOlsiQWNjaWFpdW9saSIsIkFsYml6emki%0ALCJCYXJiYWRvcmkiLCJCaXNjaGVyaSIsIkNhc3RlbGxhbmkiLCJHaW5vcmkiLCJH%0AdWFkYWduaSIsIkxhbWJlcnRlc2NoaSIsIk1lZGljaSIsIlBhenppIiwiUGVydXp6%0AaSIsIlB1Y2NpIiwiUmlkb2xmaSIsIlNhbHZpYXRpIiwiU3Ryb3p6aSIsIlRvcm5h%0AYnVvbmkiXSwieGxhYiI6WyJ0PTIxLTIyIl0sImppdHRlciI6W2ZhbHNlXSwidXNl%0AYXJyb3dzIjpbZmFsc2VdLCJ4bGltIjpbLTIuOTg4LDIuOTg4XSwieWxpbSI6Wy0y%0ALjgyMzQsMi44MjM0XX19LHsic3RhcnQiOlsyMl0sImVuZCI6WzIzXSwiZGF0YSI6%0AeyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6%0AWzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAi%0AOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1%0AIjpbMTRdLCIxNiI6WzE1XX0sImVkZ2VzIjp7IjIiOlswXSwiMyI6WzFdLCI1Ijpb%0AMl0sIjciOlszXSwiOSI6WzRdLCIxMyI6WzVdLCIxNCI6WzZdLCIyMCI6WzddLCIy%0ANSI6WzhdLCIyNyI6WzldLCIyOCI6WzEwXSwiMjkiOlsxMV19fSwiY29vcmQiOltb%0AMi41NzQsMC4wMDM0XSxbMC45MDMzLC0wLjQ4NjFdLFstMi41NzQsLTAuMTQ5N10s%0AWzAuNDM2MywyLjUwNDNdLFstMC40Mjc3LDIuNzc0MV0sWy0yLjQ1MTUsMC43Mjkx%0AXSxbMS4yODA1LDIuMjE2XSxbMC44NzQsLTIuNDU3MV0sWy0yLjA5NTksLTAuOTAz%0AOF0sWy0yLjExNzgsLTEuODE5Ml0sWy0wLjI0NzEsMS44OTk5XSxbMi4xOTI1LC0x%0ALjU4MzJdLFstMi40MzIxLDEuNjE5OV0sWy0xLjMyNTYsLTEuNDA0N10sWzIuNDc2%0AMywwLjg4NDddLFswLjA0NjMsLTIuNzc0MV1dLCJkaXNwbGF5bGFiZWxzIjpbdHJ1%0AZV0sImJnIjpbInJnYmEoMjU1LDI1NSwyNTUsMSkiXSwibGFiZWwiOlsiQWNjaWFp%0AdW9saSIsIkFsYml6emkiLCJCYXJiYWRvcmkiLCJCaXNjaGVyaSIsIkNhc3RlbGxh%0AbmkiLCJHaW5vcmkiLCJHdWFkYWduaSIsIkxhbWJlcnRlc2NoaSIsIk1lZGljaSIs%0AIlBhenppIiwiUGVydXp6aSIsIlB1Y2NpIiwiUmlkb2xmaSIsIlNhbHZpYXRpIiwi%0AU3Ryb3p6aSIsIlRvcm5hYnVvbmkiXSwieGxhYiI6WyJ0PTIyLTIzIl0sImppdHRl%0AciI6W2ZhbHNlXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJ4bGltIjpbLTIuOTg4LDIu%0AOTg4XSwieWxpbSI6Wy0yLjgyMzQsMi44MjM0XX19LHsic3RhcnQiOlsyM10sImVu%0AZCI6WzI0XSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpb%0AMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4Ijpb%0AN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEy%0AXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XX0sImVkZ2VzIjp7IjIiOlsw%0AXSwiMyI6WzFdLCI1IjpbMl0sIjYiOlszXSwiNyI6WzRdLCI5IjpbNV0sIjEwIjpb%0ANl0sIjEzIjpbN10sIjIwIjpbOF0sIjI1IjpbOV0sIjI3IjpbMTBdLCIyOCI6WzEx%0AXSwiMjkiOlsxMl0sIjMwIjpbMTNdLCIzMSI6WzE0XX19LCJjb29yZCI6W1syLjUw%0AMzcsMS40NjM2XSxbLTAuNzQxOCwyLjQ3NjhdLFstMi41MjU4LC0wLjE0XSxbMS42%0ANTYyLC0xLjU0NzJdLFsxLjA4MjgsLTIuMzkwM10sWy0xLjY4MTEsMC4xOTkxXSxb%0AMi4zOTQyLC0yLjEwODddLFsxLjkyMzYsLTAuNTY4Ml0sWy0xLjgyNjEsLTAuNzE2%0ANV0sWy0xLjg1MzksLTEuNjM1N10sWzAuNzQ0NCwtMS41ODM3XSxbMC41MTY4LDIu%0ANDI2OV0sWy0xLjY0NzMsMS4xMjAxXSxbLTEuNDY3NiwtMi40NzY4XSxbMS43NTAx%0ALDEuOTI0M10sWzIuNTI1OCwtMS4yMDM0XV0sImRpc3BsYXlsYWJlbHMiOlt0cnVl%0AXSwiYmciOlsicmdiYSgyNTUsMjU1LDI1NSwxKSJdLCJsYWJlbCI6WyJBY2NpYWl1%0Ab2xpIiwiQWxiaXp6aSIsIkJhcmJhZG9yaSIsIkJpc2NoZXJpIiwiQ2FzdGVsbGFu%0AaSIsIkdpbm9yaSIsIkd1YWRhZ25pIiwiTGFtYmVydGVzY2hpIiwiTWVkaWNpIiwi%0AUGF6emkiLCJQZXJ1enppIiwiUHVjY2kiLCJSaWRvbGZpIiwiU2FsdmlhdGkiLCJT%0AdHJvenppIiwiVG9ybmFidW9uaSJdLCJ4bGFiIjpbInQ9MjMtMjQiXSwiaml0dGVy%0AIjpbZmFsc2VdLCJ1c2VhcnJvd3MiOltmYWxzZV0sInhsaW0iOlstMi45ODgsMi45%0AODhdLCJ5bGltIjpbLTIuODIzNCwyLjgyMzRdfX0seyJzdGFydCI6WzI0XSwiZW5k%0AIjpbMjVdLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsx%0AXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3%0AXSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJd%0ALCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdfSwiZWRnZXMiOnsiMiI6WzBd%0ALCIzIjpbMV0sIjUiOlsyXSwiNiI6WzNdLCI3IjpbNF0sIjkiOls1XSwiMTAiOls2%0AXSwiMTMiOls3XSwiMjAiOls4XSwiMjUiOls5XSwiMjciOlsxMF0sIjI4IjpbMTFd%0ALCIyOSI6WzEyXSwiMzAiOlsxM10sIjMxIjpbMTRdLCIzMiI6WzE1XX19LCJjb29y%0AZCI6W1syLjQyNzQsMS41ODM3XSxbLTAuOTY5NSwyLjQ2MjJdLFstMi42NTkzLC0w%0ALjEwODddLFsxLjY5OCwtMS41ODA3XSxbMS41NzIzLC0yLjU0NTZdLFstMS45OTA1%0ALDAuNDcxM10sWzIuNjU5MywtMS41Mjk3XSxbMS4zOTczLC0wLjY0MDddLFstMS44%0AMDUyLC0wLjQ3ODZdLFstMS44MTIxLC0xLjQyOTddLFswLjg2ODgsLTIuMTI3OF0s%0AWzAuMzUwNSwyLjU0NTZdLFstMS4xNDA3LDAuMjM4M10sWy0xLjUzNywtMi4zMDc0%0AXSxbMS42NzkyLDIuMDU5OF0sWzIuMjU4MywtMC43NzE5XV0sImRpc3BsYXlsYWJl%0AbHMiOlt0cnVlXSwiYmciOlsicmdiYSgyNTUsMjU1LDI1NSwxKSJdLCJsYWJlbCI6%0AWyJBY2NpYWl1b2xpIiwiQWxiaXp6aSIsIkJhcmJhZG9yaSIsIkJpc2NoZXJpIiwi%0AQ2FzdGVsbGFuaSIsIkdpbm9yaSIsIkd1YWRhZ25pIiwiTGFtYmVydGVzY2hpIiwi%0ATWVkaWNpIiwiUGF6emkiLCJQZXJ1enppIiwiUHVjY2kiLCJSaWRvbGZpIiwiU2Fs%0AdmlhdGkiLCJTdHJvenppIiwiVG9ybmFidW9uaSJdLCJ4bGFiIjpbInQ9MjQtMjUi%0AXSwiaml0dGVyIjpbZmFsc2VdLCJ1c2VhcnJvd3MiOltmYWxzZV0sInhsaW0iOlst%0AMi45ODgsMi45ODhdLCJ5bGltIjpbLTIuODIzNCwyLjgyMzRdfX1dLCJuZXR3b3Jr%0AIjp7Im1lbCI6W3siaW5sIjpbNV0sIm91dGwiOlszXSwiYXRsIjp7Im5hIjpbZmFs%0Ac2VdLCJhY3RpdmUiOltbMCwxXSxbMTAsMjBdXX19LHsiaW5sIjpbNl0sIm91dGwi%0AOlszXSwiYXRsIjp7Im5hIjpbZmFsc2VdLCJhY3RpdmUiOltbMCwyNV1dfX0seyJp%0AbmwiOls5XSwib3V0bCI6WzNdLCJhdGwiOnsibmEiOltmYWxzZV0sImFjdGl2ZSI6%0AW1swLDFdLFsyLDI1XV19fSx7ImlubCI6WzExXSwib3V0bCI6WzNdLCJhdGwiOnsi%0AbmEiOltmYWxzZV0sImFjdGl2ZSI6W1swLDRdXX19LHsiaW5sIjpbN10sIm91dGwi%0AOls0XSwiYXRsIjp7Im5hIjpbZmFsc2VdLCJhY3RpdmUiOltbMCw2XSxbMTYsMjVd%0AXX19LHsiaW5sIjpbOF0sIm91dGwiOls0XSwiYXRsIjp7Im5hIjpbZmFsc2VdLCJh%0AY3RpdmUiOltbMCwyXSxbMjMsMjVdXX19LHsiaW5sIjpbMTFdLCJvdXRsIjpbNF0s%0AImF0bCI6eyJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzAsNV0sWzYsMjBdLFsyMSwy%0ANV1dfX0seyJpbmwiOls4XSwib3V0bCI6WzVdLCJhdGwiOnsibmEiOltmYWxzZV0s%0AImFjdGl2ZSI6W1swLDEwXV19fSx7ImlubCI6WzExXSwib3V0bCI6WzVdLCJhdGwi%0AOnsibmEiOltmYWxzZV0sImFjdGl2ZSI6W1swLDExXSxbMTMsMjVdXX19LHsiaW5s%0AIjpbOV0sIm91dGwiOls2XSwiYXRsIjp7Im5hIjpbZmFsc2VdLCJhY3RpdmUiOltb%0AMCwzXSxbMTEsMjJdLFsyMywyNV1dfX0seyJpbmwiOls4XSwib3V0bCI6WzddLCJh%0AdGwiOnsibmEiOltmYWxzZV0sImFjdGl2ZSI6W1swLDRdXX19LHsiaW5sIjpbMTFd%0ALCJvdXRsIjpbOF0sImF0bCI6eyJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzAsM10s%0AWzQsOF1dfX0seyJpbmwiOlsxMF0sIm91dGwiOls5XSwiYXRsIjp7Im5hIjpbZmFs%0Ac2VdLCJhY3RpdmUiOltbMCwyMV0sWzIyLDI1XV19fSx7ImlubCI6WzE0XSwib3V0%0AbCI6WzldLCJhdGwiOnsibmEiOltmYWxzZV0sImFjdGl2ZSI6W1swLDJdLFszLDVd%0ALFs2LDE3XSxbMTksMjNdXX19LHsiaW5sIjpbMTZdLCJvdXRsIjpbOV0sImF0bCI6%0AeyJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzAsOV1dfX0seyJpbmwiOls4XSwib3V0%0AbCI6WzNdLCJhdGwiOnsibmEiOltmYWxzZV0sImFjdGl2ZSI6W1sxLDE1XV19fSx7%0AImlubCI6WzE2XSwib3V0bCI6WzE0XSwiYXRsIjp7Im5hIjpbZmFsc2VdLCJhY3Rp%0AdmUiOltbMSw5XV19fSx7ImlubCI6WzExXSwib3V0bCI6WzddLCJhdGwiOnsibmEi%0AOltmYWxzZV0sImFjdGl2ZSI6W1szLDE3XV19fSx7ImlubCI6WzEwXSwib3V0bCI6%0AWzNdLCJhdGwiOnsibmEiOltmYWxzZV0sImFjdGl2ZSI6W1s0LDEyXV19fSx7Imlu%0AbCI6WzVdLCJvdXRsIjpbNF0sImF0bCI6eyJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpb%0AWzUsMThdLFsxOSwyNV1dfX0seyJpbmwiOls4XSwib3V0bCI6WzZdLCJhdGwiOnsi%0AbmEiOltmYWxzZV0sImFjdGl2ZSI6W1s1LDldXX19LHsiaW5sIjpbNl0sIm91dGwi%0AOls1XSwiYXRsIjp7Im5hIjpbZmFsc2VdLCJhY3RpdmUiOltbOSwxNF1dfX0seyJp%0AbmwiOlsxM10sIm91dGwiOlszXSwiYXRsIjp7Im5hIjpbZmFsc2VdLCJhY3RpdmUi%0AOltbMTMsMjFdXX19LHsiaW5sIjpbMTNdLCJvdXRsIjpbNV0sImF0bCI6eyJuYSI6%0AW2ZhbHNlXSwiYWN0aXZlIjpbWzEzLDE2XV19fSx7ImlubCI6WzE0XSwib3V0bCI6%0AWzEwXSwiYXRsIjp7Im5hIjpbZmFsc2VdLCJhY3RpdmUiOltbMTMsMjVdXX19LHsi%0AaW5sIjpbOV0sIm91dGwiOls1XSwiYXRsIjp7Im5hIjpbZmFsc2VdLCJhY3RpdmUi%0AOltbMTcsMjBdXX19LHsiaW5sIjpbMTNdLCJvdXRsIjpbNl0sImF0bCI6eyJuYSI6%0AW2ZhbHNlXSwiYWN0aXZlIjpbWzE3LDI1XV19fSx7ImlubCI6WzE1XSwib3V0bCI6%0AWzFdLCJhdGwiOnsibmEiOltmYWxzZV0sImFjdGl2ZSI6W1syMSwyNV1dfX0seyJp%0AbmwiOlsxNl0sIm91dGwiOls4XSwiYXRsIjp7Im5hIjpbZmFsc2VdLCJhY3RpdmUi%0AOltbMjEsMjVdXX19LHsiaW5sIjpbMTZdLCJvdXRsIjpbNF0sImF0bCI6eyJuYSI6%0AW2ZhbHNlXSwiYWN0aXZlIjpbWzIzLDI1XV19fSx7ImlubCI6WzE2XSwib3V0bCI6%0AWzddLCJhdGwiOnsibmEiOltmYWxzZV0sImFjdGl2ZSI6W1syMywyNV1dfX0seyJp%0AbmwiOlsxM10sIm91dGwiOls5XSwiYXRsIjp7Im5hIjpbZmFsc2VdLCJhY3RpdmUi%0AOltbMjQsMjVdXX19XSwiZ2FsIjp7Im4iOlsxNl0sIm1uZXh0IjpbMzNdLCJkaXJl%0AY3RlZCI6W2ZhbHNlXSwiaHlwZXIiOltmYWxzZV0sImxvb3BzIjpbZmFsc2VdLCJt%0AdWx0aXBsZSI6W2ZhbHNlXSwiYmlwYXJ0aXRlIjpbZmFsc2VdLCJuZXQub2JzLnBl%0AcmlvZCI6eyJvYnNlcnZhdGlvbnMiOltbMCwyNV1dLCJtb2RlIjpbImRpc2NyZXRl%0AIl0sInRpbWUuaW5jcmVtZW50IjpbMV0sInRpbWUudW5pdCI6WyJzdGVwIl19LCJz%0AbGljZS5wYXIiOnsic3RhcnQiOlswXSwiZW5kIjpbMjVdLCJpbnRlcnZhbCI6WzFd%0ALCJhZ2dyZWdhdGUuZHVyIjpbMV0sInJ1bGUiOlsibGF0ZXN0Il19fSwidmFsIjpb%0AeyJuYSI6W2ZhbHNlXSwidmVydGV4Lm5hbWVzIjpbIkFjY2lhaXVvbGkiXSwicHJp%0Ab3JhdGVzIjpbNTNdLCJ3ZWFsdGgiOlsxMF0sInRvdGFsdGllcyI6WzJdLCJhY3Rp%0AdmUiOltbMCwyNV1dfSx7Im5hIjpbZmFsc2VdLCJ2ZXJ0ZXgubmFtZXMiOlsiQWxi%0AaXp6aSJdLCJwcmlvcmF0ZXMiOls2NV0sIndlYWx0aCI6WzM2XSwidG90YWx0aWVz%0AIjpbM10sImFjdGl2ZSI6W1swLDI1XV19LHsibmEiOltmYWxzZV0sInZlcnRleC5u%0AYW1lcyI6WyJCYXJiYWRvcmkiXSwicHJpb3JhdGVzIjpbMF0sIndlYWx0aCI6WzU1%0AXSwidG90YWx0aWVzIjpbMTRdLCJhY3RpdmUiOltbMCwyNV1dfSx7Im5hIjpbZmFs%0Ac2VdLCJ2ZXJ0ZXgubmFtZXMiOlsiQmlzY2hlcmkiXSwicHJpb3JhdGVzIjpbMTJd%0ALCJ3ZWFsdGgiOls0NF0sInRvdGFsdGllcyI6WzldLCJhY3RpdmUiOltbMCwyNV1d%0AfSx7Im5hIjpbZmFsc2VdLCJ2ZXJ0ZXgubmFtZXMiOlsiQ2FzdGVsbGFuaSJdLCJw%0AcmlvcmF0ZXMiOlsyMl0sIndlYWx0aCI6WzIwXSwidG90YWx0aWVzIjpbMThdLCJh%0AY3RpdmUiOltbMCwyNV1dfSx7Im5hIjpbZmFsc2VdLCJ2ZXJ0ZXgubmFtZXMiOlsi%0AR2lub3JpIl0sInByaW9yYXRlcyI6WzBdLCJ3ZWFsdGgiOlszMl0sInRvdGFsdGll%0AcyI6WzldLCJhY3RpdmUiOltbMCwyNV1dfSx7Im5hIjpbZmFsc2VdLCJ2ZXJ0ZXgu%0AbmFtZXMiOlsiR3VhZGFnbmkiXSwicHJpb3JhdGVzIjpbMjFdLCJ3ZWFsdGgiOls4%0AXSwidG90YWx0aWVzIjpbMTRdLCJhY3RpdmUiOltbMCwyNV1dfSx7Im5hIjpbZmFs%0Ac2VdLCJ2ZXJ0ZXgubmFtZXMiOlsiTGFtYmVydGVzY2hpIl0sInByaW9yYXRlcyI6%0AWzBdLCJ3ZWFsdGgiOls0Ml0sInRvdGFsdGllcyI6WzE0XSwiYWN0aXZlIjpbWzAs%0AMjVdXX0seyJuYSI6W2ZhbHNlXSwidmVydGV4Lm5hbWVzIjpbIk1lZGljaSJdLCJw%0AcmlvcmF0ZXMiOls1M10sIndlYWx0aCI6WzEwM10sInRvdGFsdGllcyI6WzU0XSwi%0AYWN0aXZlIjpbWzAsMjVdXX0seyJuYSI6W2ZhbHNlXSwidmVydGV4Lm5hbWVzIjpb%0AIlBhenppIl0sInByaW9yYXRlcyI6WzBdLCJ3ZWFsdGgiOls0OF0sInRvdGFsdGll%0AcyI6WzddLCJhY3RpdmUiOltbMCwyNV1dfSx7Im5hIjpbZmFsc2VdLCJ2ZXJ0ZXgu%0AbmFtZXMiOlsiUGVydXp6aSJdLCJwcmlvcmF0ZXMiOls0Ml0sIndlYWx0aCI6WzQ5%0AXSwidG90YWx0aWVzIjpbMzJdLCJhY3RpdmUiOltbMCwyNV1dfSx7Im5hIjpbZmFs%0Ac2VdLCJ2ZXJ0ZXgubmFtZXMiOlsiUHVjY2kiXSwicHJpb3JhdGVzIjpbMF0sIndl%0AYWx0aCI6WzNdLCJ0b3RhbHRpZXMiOlsxXSwiYWN0aXZlIjpbWzAsMjVdXX0seyJu%0AYSI6W2ZhbHNlXSwidmVydGV4Lm5hbWVzIjpbIlJpZG9sZmkiXSwicHJpb3JhdGVz%0AIjpbMzhdLCJ3ZWFsdGgiOlsyN10sInRvdGFsdGllcyI6WzRdLCJhY3RpdmUiOltb%0AMCwyNV1dfSx7Im5hIjpbZmFsc2VdLCJ2ZXJ0ZXgubmFtZXMiOlsiU2FsdmlhdGki%0AXSwicHJpb3JhdGVzIjpbMzVdLCJ3ZWFsdGgiOlsxMF0sInRvdGFsdGllcyI6WzVd%0ALCJhY3RpdmUiOltbMCwyNV1dfSx7Im5hIjpbZmFsc2VdLCJ2ZXJ0ZXgubmFtZXMi%0AOlsiU3Ryb3p6aSJdLCJwcmlvcmF0ZXMiOls3NF0sIndlYWx0aCI6WzE0Nl0sInRv%0AdGFsdGllcyI6WzI5XSwiYWN0aXZlIjpbWzAsMjVdXX0seyJuYSI6W2ZhbHNlXSwi%0AdmVydGV4Lm5hbWVzIjpbIlRvcm5hYnVvbmkiXSwicHJpb3JhdGVzIjpbMF0sIndl%0AYWx0aCI6WzQ4XSwidG90YWx0aWVzIjpbN10sImFjdGl2ZSI6W1swLDI1XV19XSwi%0AaWVsIjpbW10sW10sW10sW10sWzEsMjBdLFsyLDIyXSxbNV0sWzYsOCwyMSwxNiwx%0AMV0sWzMsMTAsMjZdLFsxMywxOV0sWzQsNyw5LDEyLDE4XSxbXSxbMjMsMjQsMjcs%0AMzJdLFsxNCwyNV0sWzI4XSxbMTUsMTcsMjksMzAsMzFdXSwib2VsIjpbWzI4XSxb%0AXSxbMjMsMTksMTYsNCwzLDIsMV0sWzMwLDIwLDcsNiw1XSxbMjYsMjQsMjIsOSw4%0AXSxbMjcsMjEsMTBdLFszMSwxOCwxMV0sWzI5LDEyXSxbMTUsMzIsMTQsMTNdLFsy%0ANV0sW10sW10sW10sWzE3XSxbXSxbXV19fTsNCiAgdmFyIG9wdGlvbnMgPSB7Im5k%0AdHYudmVyc2lvbiI6IjAuMTIuMiwyMDE4LTUtOSJ9Ow0KICAvL0VORCBHUkFQSCBE%0AQVRBIElOSVQNCiAgDQogIC8vSW5zZXJ0IGluaXQgSlMgSGVyZQ0KICAkKGZ1bmN0%0AaW9uKCkgew0KICAgIG9wdGlvbnMuZ3JhcGhEYXRhID0gZ3JhcGhEYXRhOw0KICAg%0AIHZhciBncmFwaCA9IG5ldyBuZHR2X2QzKG9wdGlvbnMpOyAgICAgICAgDQogIH0p%0ADQogIDwvc2NyaXB0PjwvYm9keT4NCjwvaHRtbD4=(Line 1183)
Message:
loadData: 31.1279296875ms
console-api log URL: data:application/x-javascript;base64,LyoqCiAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCiAqLwoKVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWwgPSBmdW5jdGlvbiAoIHBhcmFtZXRlcnMgKSB7CgoJVEhSRUUuTWF0ZXJpYWwuY2FsbCggdGhpcyApOwoKCXRoaXMudHlwZSA9ICdTcHJpdGVDYW52YXNNYXRlcmlhbCc7CgoJdGhpcy5jb2xvciA9IG5ldyBUSFJFRS5Db2xvciggMHhmZmZmZmYgKTsKCXRoaXMucHJvZ3JhbSA9IGZ1bmN0aW9uICggY29udGV4dCwgY29sb3IgKSB7fTsKCgl0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApOwoKfTsKClRIUkVFLlNwcml0ZUNhbnZhc01hdGVyaWFsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFRIUkVFLk1hdGVyaWFsLnByb3RvdHlwZSApOwpUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbDsKClRIUkVFLlNwcml0ZUNhbnZhc01hdGVyaWFsLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKCgl2YXIgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWwoKTsKCgltYXRlcmlhbC5jb3B5KCB0aGlzICk7CgltYXRlcmlhbC5jb2xvci5jb3B5KCB0aGlzLmNvbG9yICk7CgltYXRlcmlhbC5wcm9ncmFtID0gdGhpcy5wcm9ncmFtOwoKCXJldHVybiBtYXRlcmlhbDsKCn07CgovLwoKVEhSRUUuQ2FudmFzUmVuZGVyZXIgPSBmdW5jdGlvbiAoIHBhcmFtZXRlcnMgKSB7CgoJY29uc29sZS5sb2coICdUSFJFRS5DYW52YXNSZW5kZXJlcicsIFRIUkVFLlJFVklTSU9OICk7CgoJcGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgfHwge307CgoJdmFyIF90aGlzID0gdGhpcywKCV9yZW5kZXJEYXRhLCBfZWxlbWVudHMsIF9saWdodHMsCglfcHJvamVjdG9yID0gbmV3IFRIUkVFLlByb2plY3RvcigpLAoKCV9jYW52YXMgPSBwYXJhbWV0ZXJzLmNhbnZhcyAhPT0gdW5kZWZpbmVkCgkJCSA/IHBhcmFtZXRlcnMuY2FudmFzCgkJCSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdjYW52YXMnICksCgoJX2NhbnZhc1dpZHRoID0gX2NhbnZhcy53aWR0aCwKCV9jYW52YXNIZWlnaHQgPSBfY2FudmFzLmhlaWdodCwKCV9jYW52YXNXaWR0aEhhbGYgPSBNYXRoLmZsb29yKCBfY2FudmFzV2lkdGggLyAyICksCglfY2FudmFzSGVpZ2h0SGFsZiA9IE1hdGguZmxvb3IoIF9jYW52YXNIZWlnaHQgLyAyICksCgoJX3ZpZXdwb3J0WCA9IDAsCglfdmlld3BvcnRZID0gMCwKCV92aWV3cG9ydFdpZHRoID0gX2NhbnZhc1dpZHRoLAoJX3ZpZXdwb3J0SGVpZ2h0ID0gX2NhbnZhc0hlaWdodCwKCglfcGl4ZWxSYXRpbyA9IDEsCgoJX2NvbnRleHQgPSBfY2FudmFzLmdldENvbnRleHQoICcyZCcsIHsKCQlhbHBoYTogcGFyYW1ldGVycy5hbHBoYSA9PT0gdHJ1ZQoJfSApLAoKCV9jbGVhckNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKCAweDAwMDAwMCApLAoJX2NsZWFyQWxwaGEgPSBwYXJhbWV0ZXJzLmFscGhhID09PSB0cnVlID8gMCA6IDEsCgoJX2NvbnRleHRHbG9iYWxBbHBoYSA9IDEsCglfY29udGV4dEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IDAsCglfY29udGV4dFN0cm9rZVN0eWxlID0gbnVsbCwKCV9jb250ZXh0RmlsbFN0eWxlID0gbnVsbCwKCV9jb250ZXh0TGluZVdpZHRoID0gbnVsbCwKCV9jb250ZXh0TGluZUNhcCA9IG51bGwsCglfY29udGV4dExpbmVKb2luID0gbnVsbCwKCV9jb250ZXh0TGluZURhc2ggPSBbXSwKCglfY2FtZXJhLAoKCV92MSwgX3YyLCBfdjMsIF92NCwKCV92NSA9IG5ldyBUSFJFRS5SZW5kZXJhYmxlVmVydGV4KCksCglfdjYgPSBuZXcgVEhSRUUuUmVuZGVyYWJsZVZlcnRleCgpLAoKCV92MXgsIF92MXksIF92MngsIF92MnksIF92M3gsIF92M3ksCglfdjR4LCBfdjR5LCBfdjV4LCBfdjV5LCBfdjZ4LCBfdjZ5LAoKCV9jb2xvciA9IG5ldyBUSFJFRS5Db2xvcigpLAoJX2NvbG9yMSA9IG5ldyBUSFJFRS5Db2xvcigpLAoJX2NvbG9yMiA9IG5ldyBUSFJFRS5Db2xvcigpLAoJX2NvbG9yMyA9IG5ldyBUSFJFRS5Db2xvcigpLAoJX2NvbG9yNCA9IG5ldyBUSFJFRS5Db2xvcigpLAoKCV9kaWZmdXNlQ29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoKSwKCV9lbWlzc2l2ZUNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKCksCgoJX2xpZ2h0Q29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoKSwKCglfcGF0dGVybnMgPSB7fSwKCglfaW1hZ2UsIF91dnMsCglfdXYxeCwgX3V2MXksIF91djJ4LCBfdXYyeSwgX3V2M3gsIF91djN5LAoKCV9jbGlwQm94ID0gbmV3IFRIUkVFLkJveDIoKSwKCV9jbGVhckJveCA9IG5ldyBUSFJFRS5Cb3gyKCksCglfZWxlbUJveCA9IG5ldyBUSFJFRS5Cb3gyKCksCgoJX2FtYmllbnRMaWdodCA9IG5ldyBUSFJFRS5Db2xvcigpLAoJX2RpcmVjdGlvbmFsTGlnaHRzID0gbmV3IFRIUkVFLkNvbG9yKCksCglfcG9pbnRMaWdodHMgPSBuZXcgVEhSRUUuQ29sb3IoKSwKCglfdmVjdG9yMyA9IG5ldyBUSFJFRS5WZWN0b3IzKCksIC8vIE5lZWRlZCBmb3IgUG9pbnRMaWdodAoJX2NlbnRyb2lkID0gbmV3IFRIUkVFLlZlY3RvcjMoKSwKCV9ub3JtYWwgPSBuZXcgVEhSRUUuVmVjdG9yMygpLAoJX25vcm1hbFZpZXdNYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4MygpOwoKCS8qIFRPRE8KCV9jYW52YXMubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7CglfY2FudmFzLndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlOwoJX2NhbnZhcy5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlOwoJX2NhbnZhcy5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTsKCSovCgoJLy8gZGFzaCtnYXAgZmFsbGJhY2tzIGZvciBGaXJlZm94IGFuZCBldmVyeXRoaW5nIGVsc2UKCglpZiAoIF9jb250ZXh0LnNldExpbmVEYXNoID09PSB1bmRlZmluZWQgKSB7CgoJCV9jb250ZXh0LnNldExpbmVEYXNoID0gZnVuY3Rpb24gKCkge307CgoJfQoKCXRoaXMuZG9tRWxlbWVudCA9IF9jYW52YXM7CgoJdGhpcy5hdXRvQ2xlYXIgPSB0cnVlOwoJdGhpcy5zb3J0T2JqZWN0cyA9IHRydWU7Cgl0aGlzLnNvcnRFbGVtZW50cyA9IHRydWU7CgoJdGhpcy5pbmZvID0gewoKCQlyZW5kZXI6IHsKCgkJCXZlcnRpY2VzOiAwLAoJCQlmYWNlczogMAoKCQl9CgoJfTsKCgkvLyBXZWJHTFJlbmRlcmVyIGNvbXBhdGliaWxpdHkKCgl0aGlzLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMgPSBmdW5jdGlvbiAoKSB7fTsKCXRoaXMuc2V0RmFjZUN1bGxpbmcgPSBmdW5jdGlvbiAoKSB7fTsKCgkvLyBBUEkKCgl0aGlzLmdldENvbnRleHQgPSBmdW5jdGlvbiAoKSB7CgoJCXJldHVybiBfY29udGV4dDsKCgl9OwoKCXRoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoKSB7CgoJCXJldHVybiBfY29udGV4dC5nZXRDb250ZXh0QXR0cmlidXRlcygpOwoKCX07CgoJdGhpcy5nZXRQaXhlbFJhdGlvID0gZnVuY3Rpb24gKCkgewoKCQlyZXR1cm4gX3BpeGVsUmF0aW87CgoJfTsKCgl0aGlzLnNldFBpeGVsUmF0aW8gPSBmdW5jdGlvbiAoIHZhbHVlICkgewoKCQlpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSBfcGl4ZWxSYXRpbyA9IHZhbHVlOwoKCX07CgoJdGhpcy5zZXRTaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0LCB1cGRhdGVTdHlsZSApIHsKCgkJX2NhbnZhc1dpZHRoID0gd2lkdGggKiBfcGl4ZWxSYXRpbzsKCQlfY2FudmFzSGVpZ2h0ID0gaGVpZ2h0ICogX3BpeGVsUmF0aW87CgoJCV9jYW52YXMud2lkdGggPSBfY2FudmFzV2lkdGg7CgkJX2NhbnZhcy5oZWlnaHQgPSBfY2FudmFzSGVpZ2h0OwoKCQlfY2FudmFzV2lkdGhIYWxmID0gTWF0aC5mbG9vciggX2NhbnZhc1dpZHRoIC8gMiApOwoJCV9jYW52YXNIZWlnaHRIYWxmID0gTWF0aC5mbG9vciggX2NhbnZhc0hlaWdodCAvIDIgKTsKCgkJaWYgKCB1cGRhdGVTdHlsZSAhPT0gZmFsc2UgKSB7CgoJCQlfY2FudmFzLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnOwoJCQlfY2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7CgoJCX0KCgkJX2NsaXBCb3gubWluLnNldCggLSBfY2FudmFzV2lkdGhIYWxmLCAtIF9jYW52YXNIZWlnaHRIYWxmICk7CgkJX2NsaXBCb3gubWF4LnNldCggICBfY2FudmFzV2lkdGhIYWxmLCAgIF9jYW52YXNIZWlnaHRIYWxmICk7CgoJCV9jbGVhckJveC5taW4uc2V0KCAtIF9jYW52YXNXaWR0aEhhbGYsIC0gX2NhbnZhc0hlaWdodEhhbGYgKTsKCQlfY2xlYXJCb3gubWF4LnNldCggICBfY2FudmFzV2lkdGhIYWxmLCAgIF9jYW52YXNIZWlnaHRIYWxmICk7CgoJCV9jb250ZXh0R2xvYmFsQWxwaGEgPSAxOwoJCV9jb250ZXh0R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gMDsKCQlfY29udGV4dFN0cm9rZVN0eWxlID0gbnVsbDsKCQlfY29udGV4dEZpbGxTdHlsZSA9IG51bGw7CgkJX2NvbnRleHRMaW5lV2lkdGggPSBudWxsOwoJCV9jb250ZXh0TGluZUNhcCA9IG51bGw7CgkJX2NvbnRleHRMaW5lSm9pbiA9IG51bGw7CgoJCXRoaXMuc2V0Vmlld3BvcnQoIDAsIDAsIHdpZHRoLCBoZWlnaHQgKTsKCgl9OwoKCXRoaXMuc2V0Vmlld3BvcnQgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQgKSB7CgoJCV92aWV3cG9ydFggPSB4ICogX3BpeGVsUmF0aW87CgkJX3ZpZXdwb3J0WSA9IHkgKiBfcGl4ZWxSYXRpbzsKCgkJX3ZpZXdwb3J0V2lkdGggPSB3aWR0aCAqIF9waXhlbFJhdGlvOwoJCV92aWV3cG9ydEhlaWdodCA9IGhlaWdodCAqIF9waXhlbFJhdGlvOwoKCX07CgoJdGhpcy5zZXRTY2lzc29yID0gZnVuY3Rpb24gKCkge307Cgl0aGlzLnNldFNjaXNzb3JUZXN0ID0gZnVuY3Rpb24gKCkge307CgoJdGhpcy5zZXRDbGVhckNvbG9yID0gZnVuY3Rpb24gKCBjb2xvciwgYWxwaGEgKSB7CgoJCV9jbGVhckNvbG9yLnNldCggY29sb3IgKTsKCQlfY2xlYXJBbHBoYSA9IGFscGhhICE9PSB1bmRlZmluZWQgPyBhbHBoYSA6IDE7CgoJCV9jbGVhckJveC5taW4uc2V0KCAtIF9jYW52YXNXaWR0aEhhbGYsIC0gX2NhbnZhc0hlaWdodEhhbGYgKTsKCQlfY2xlYXJCb3gubWF4LnNldCggICBfY2FudmFzV2lkdGhIYWxmLCAgIF9jYW52YXNIZWlnaHRIYWxmICk7CgoJfTsKCgl0aGlzLnNldENsZWFyQ29sb3JIZXggPSBmdW5jdGlvbiAoIGhleCwgYWxwaGEgKSB7CgoJCWNvbnNvbGUud2FybiggJ1RIUkVFLkNhbnZhc1JlbmRlcmVyOiAuc2V0Q2xlYXJDb2xvckhleCgpIGlzIGJlaW5nIHJlbW92ZWQuIFVzZSAuc2V0Q2xlYXJDb2xvcigpIGluc3RlYWQuJyApOwoJCXRoaXMuc2V0Q2xlYXJDb2xvciggaGV4LCBhbHBoYSApOwoKCX07CgoJdGhpcy5nZXRDbGVhckNvbG9yID0gZnVuY3Rpb24gKCkgewoKCQlyZXR1cm4gX2NsZWFyQ29sb3I7CgoJfTsKCgl0aGlzLmdldENsZWFyQWxwaGEgPSBmdW5jdGlvbiAoKSB7CgoJCXJldHVybiBfY2xlYXJBbHBoYTsKCgl9OwoKCXRoaXMuZ2V0TWF4QW5pc290cm9weSA9IGZ1bmN0aW9uICgpIHsKCgkJcmV0dXJuIDA7CgoJfTsKCgl0aGlzLmNsZWFyID0gZnVuY3Rpb24gKCkgewoKCQlpZiAoIF9jbGVhckJveC5pc0VtcHR5KCkgPT09IGZhbHNlICkgewoKCQkJX2NsZWFyQm94LmludGVyc2VjdCggX2NsaXBCb3ggKTsKCQkJX2NsZWFyQm94LmV4cGFuZEJ5U2NhbGFyKCAyICk7CgoJCQlfY2xlYXJCb3gubWluLnggPSBfY2xlYXJCb3gubWluLnggKyBfY2FudmFzV2lkdGhIYWxmOwoJCQlfY2xlYXJCb3gubWluLnkgPSAgLSBfY2xlYXJCb3gubWluLnkgKyBfY2FudmFzSGVpZ2h0SGFsZjsJCS8vIGhpZ2hlciB5IHZhbHVlICEKCQkJX2NsZWFyQm94Lm1heC54ID0gX2NsZWFyQm94Lm1heC54ICsgX2NhbnZhc1dpZHRoSGFsZjsKCQkJX2NsZWFyQm94Lm1heC55ID0gIC0gX2NsZWFyQm94Lm1heC55ICsgX2NhbnZhc0hlaWdodEhhbGY7CQkvLyBsb3dlciB5IHZhbHVlICEKCgkJCWlmICggX2NsZWFyQWxwaGEgPCAxICkgewoKCQkJCV9jb250ZXh0LmNsZWFyUmVjdCgKCQkJCQlfY2xlYXJCb3gubWluLnggfCAwLAoJCQkJCV9jbGVhckJveC5tYXgueSB8IDAsCgkJCQkJKCBfY2xlYXJCb3gubWF4LnggLSBfY2xlYXJCb3gubWluLnggKSB8IDAsCgkJCQkJKCBfY2xlYXJCb3gubWluLnkgLSBfY2xlYXJCb3gubWF4LnkgKSB8IDAKCQkJCSk7CgoJCQl9CgoJCQlpZiAoIF9jbGVhckFscGhhID4gMCApIHsKCgkJCQlzZXRCbGVuZGluZyggVEhSRUUuTm9ybWFsQmxlbmRpbmcgKTsKCQkJCXNldE9wYWNpdHkoIDEgKTsKCgkJCQlzZXRGaWxsU3R5bGUoICdyZ2JhKCcgKyBNYXRoLmZsb29yKCBfY2xlYXJDb2xvci5yICogMjU1ICkgKyAnLCcgKyBNYXRoLmZsb29yKCBfY2xlYXJDb2xvci5nICogMjU1ICkgKyAnLCcgKyBNYXRoLmZsb29yKCBfY2xlYXJDb2xvci5iICogMjU1ICkgKyAnLCcgKyBfY2xlYXJBbHBoYSArICcpJyApOwoKCQkJCV9jb250ZXh0LmZpbGxSZWN0KAoJCQkJCV9jbGVhckJveC5taW4ueCB8IDAsCgkJCQkJX2NsZWFyQm94Lm1heC55IHwgMCwKCQkJCQkoIF9jbGVhckJveC5tYXgueCAtIF9jbGVhckJveC5taW4ueCApIHwgMCwKCQkJCQkoIF9jbGVhckJveC5taW4ueSAtIF9jbGVhckJveC5tYXgueSApIHwgMAoJCQkJKTsKCgkJCX0KCgkJCV9jbGVhckJveC5tYWtlRW1wdHkoKTsKCgkJfQoKCX07CgoJLy8gY29tcGF0aWJpbGl0eQoKCXRoaXMuY2xlYXJDb2xvciA9IGZ1bmN0aW9uICgpIHt9OwoJdGhpcy5jbGVhckRlcHRoID0gZnVuY3Rpb24gKCkge307Cgl0aGlzLmNsZWFyU3RlbmNpbCA9IGZ1bmN0aW9uICgpIHt9OwoKCXRoaXMucmVuZGVyID0gZnVuY3Rpb24gKCBzY2VuZSwgY2FtZXJhICkgewoKCQlpZiAoIGNhbWVyYSBpbnN0YW5jZW9mIFRIUkVFLkNhbWVyYSA9PT0gZmFsc2UgKSB7CgoJCQljb25zb2xlLmVycm9yKCAnVEhSRUUuQ2FudmFzUmVuZGVyZXIucmVuZGVyOiBjYW1lcmEgaXMgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkNhbWVyYS4nICk7CgkJCXJldHVybjsKCgkJfQoKCQl2YXIgYmFja2dyb3VuZCA9IHNjZW5lLmJhY2tncm91bmQ7CgoJCWlmICggYmFja2dyb3VuZCAmJiBiYWNrZ3JvdW5kLmlzQ29sb3IgKSB7CgoJCQlzZXRGaWxsU3R5bGUoICdyZ2IoJyArIE1hdGguZmxvb3IoIGJhY2tncm91bmQuciAqIDI1NSApICsgJywnICsgTWF0aC5mbG9vciggYmFja2dyb3VuZC5nICogMjU1ICkgKyAnLCcgKyBNYXRoLmZsb29yKCBiYWNrZ3JvdW5kLmIgKiAyNTUgKSArICcpJyApOwoJCQlfY29udGV4dC5maWxsUmVjdCggMCwgMCwgX2NhbnZhc1dpZHRoLCBfY2FudmFzSGVpZ2h0ICk7CgoJCX0gZWxzZSBpZiAoIHRoaXMuYXV0b0NsZWFyID09PSB0cnVlICkgewoKCQkJdGhpcy5jbGVhcigpOwoKCQl9CgoJCV90aGlzLmluZm8ucmVuZGVyLnZlcnRpY2VzID0gMDsKCQlfdGhpcy5pbmZvLnJlbmRlci5mYWNlcyA9IDA7CgoJCV9jb250ZXh0LnNldFRyYW5zZm9ybSggX3ZpZXdwb3J0V2lkdGggLyBfY2FudmFzV2lkdGgsIDAsIDAsIC0gX3ZpZXdwb3J0SGVpZ2h0IC8gX2NhbnZhc0hlaWdodCwgX3ZpZXdwb3J0WCwgX2NhbnZhc0hlaWdodCAtIF92aWV3cG9ydFkgKTsKCQlfY29udGV4dC50cmFuc2xhdGUoIF9jYW52YXNXaWR0aEhhbGYsIF9jYW52YXNIZWlnaHRIYWxmICk7CgoJCV9yZW5kZXJEYXRhID0gX3Byb2plY3Rvci5wcm9qZWN0U2NlbmUoIHNjZW5lLCBjYW1lcmEsIHRoaXMuc29ydE9iamVjdHMsIHRoaXMuc29ydEVsZW1lbnRzICk7CgkJX2VsZW1lbnRzID0gX3JlbmRlckRhdGEuZWxlbWVudHM7CgkJX2xpZ2h0cyA9IF9yZW5kZXJEYXRhLmxpZ2h0czsKCQlfY2FtZXJhID0gY2FtZXJhOwoKCQlfbm9ybWFsVmlld01hdHJpeC5nZXROb3JtYWxNYXRyaXgoIGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UgKTsKCgkJLyogREVCVUcKCQlzZXRGaWxsU3R5bGUoICdyZ2JhKCAwLCAyNTUsIDI1NSwgMC41ICknICk7CgkJX2NvbnRleHQuZmlsbFJlY3QoIF9jbGlwQm94Lm1pbi54LCBfY2xpcEJveC5taW4ueSwgX2NsaXBCb3gubWF4LnggLSBfY2xpcEJveC5taW4ueCwgX2NsaXBCb3gubWF4LnkgLSBfY2xpcEJveC5taW4ueSApOwoJCSovCgoJCWNhbGN1bGF0ZUxpZ2h0cygpOwoKCQlmb3IgKCB2YXIgZSA9IDAsIGVsID0gX2VsZW1lbnRzLmxlbmd0aDsgZSA8IGVsOyBlICsrICkgewoKCQkJdmFyIGVsZW1lbnQgPSBfZWxlbWVudHNbIGUgXTsKCgkJCXZhciBtYXRlcmlhbCA9IGVsZW1lbnQubWF0ZXJpYWw7CgoJCQlpZiAoIG1hdGVyaWFsID09PSB1bmRlZmluZWQgfHwgbWF0ZXJpYWwub3BhY2l0eSA9PT0gMCApIGNvbnRpbnVlOwoKCQkJX2VsZW1Cb3gubWFrZUVtcHR5KCk7CgoJCQlpZiAoIGVsZW1lbnQgaW5zdGFuY2VvZiBUSFJFRS5SZW5kZXJhYmxlU3ByaXRlICkgewoKCQkJCV92MSA9IGVsZW1lbnQ7CgkJCQlfdjEueCAqPSBfY2FudmFzV2lkdGhIYWxmOyBfdjEueSAqPSBfY2FudmFzSGVpZ2h0SGFsZjsKCgkJCQlyZW5kZXJTcHJpdGUoIF92MSwgZWxlbWVudCwgbWF0ZXJpYWwgKTsKCgkJCX0gZWxzZSBpZiAoIGVsZW1lbnQgaW5zdGFuY2VvZiBUSFJFRS5SZW5kZXJhYmxlTGluZSApIHsKCgkJCQlfdjEgPSBlbGVtZW50LnYxOyBfdjIgPSBlbGVtZW50LnYyOwoKCQkJCV92MS5wb3NpdGlvblNjcmVlbi54ICo9IF9jYW52YXNXaWR0aEhhbGY7IF92MS5wb3NpdGlvblNjcmVlbi55ICo9IF9jYW52YXNIZWlnaHRIYWxmOwoJCQkJX3YyLnBvc2l0aW9uU2NyZWVuLnggKj0gX2NhbnZhc1dpZHRoSGFsZjsgX3YyLnBvc2l0aW9uU2NyZWVuLnkgKj0gX2NhbnZhc0hlaWdodEhhbGY7CgoJCQkJX2VsZW1Cb3guc2V0RnJvbVBvaW50cyggWwoJCQkJCV92MS5wb3NpdGlvblNjcmVlbiwKCQkJCQlfdjIucG9zaXRpb25TY3JlZW4KCQkJCV0gKTsKCgkJCQlpZiAoIF9jbGlwQm94LmludGVyc2VjdHNCb3goIF9lbGVtQm94ICkgPT09IHRydWUgKSB7CgoJCQkJCXJlbmRlckxpbmUoIF92MSwgX3YyLCBlbGVtZW50LCBtYXRlcmlhbCApOwoKCQkJCX0KCgkJCX0gZWxzZSBpZiAoIGVsZW1lbnQgaW5zdGFuY2VvZiBUSFJFRS5SZW5kZXJhYmxlRmFjZSApIHsKCgkJCQlfdjEgPSBlbGVtZW50LnYxOyBfdjIgPSBlbGVtZW50LnYyOyBfdjMgPSBlbGVtZW50LnYzOwoKCQkJCWlmICggX3YxLnBvc2l0aW9uU2NyZWVuLnogPCAtIDEgfHwgX3YxLnBvc2l0aW9uU2NyZWVuLnogPiAxICkgY29udGludWU7CgkJCQlpZiAoIF92Mi5wb3NpdGlvblNjcmVlbi56IDwgLSAxIHx8IF92Mi5wb3NpdGlvblNjcmVlbi56ID4gMSApIGNvbnRpbnVlOwoJCQkJaWYgKCBfdjMucG9zaXRpb25TY3JlZW4ueiA8IC0gMSB8fCBfdjMucG9zaXRpb25TY3JlZW4ueiA+IDEgKSBjb250aW51ZTsKCgkJCQlfdjEucG9zaXRpb25TY3JlZW4ueCAqPSBfY2FudmFzV2lkdGhIYWxmOyBfdjEucG9zaXRpb25TY3JlZW4ueSAqPSBfY2FudmFzSGVpZ2h0SGFsZjsKCQkJCV92Mi5wb3NpdGlvblNjcmVlbi54ICo9IF9jYW52YXNXaWR0aEhhbGY7IF92Mi5wb3NpdGlvblNjcmVlbi55ICo9IF9jYW52YXNIZWlnaHRIYWxmOwoJCQkJX3YzLnBvc2l0aW9uU2NyZWVuLnggKj0gX2NhbnZhc1dpZHRoSGFsZjsgX3YzLnBvc2l0aW9uU2NyZWVuLnkgKj0gX2NhbnZhc0hlaWdodEhhbGY7CgoJCQkJaWYgKCBtYXRlcmlhbC5vdmVyZHJhdyA+IDAgKSB7CgoJCQkJCWV4cGFuZCggX3YxLnBvc2l0aW9uU2NyZWVuLCBfdjIucG9zaXRpb25TY3JlZW4sIG1hdGVyaWFsLm92ZXJkcmF3ICk7CgkJCQkJZXhwYW5kKCBfdjIucG9zaXRpb25TY3JlZW4sIF92My5wb3NpdGlvblNjcmVlbiwgbWF0ZXJpYWwub3ZlcmRyYXcgKTsKCQkJCQlleHBhbmQoIF92My5wb3NpdGlvblNjcmVlbiwgX3YxLnBvc2l0aW9uU2NyZWVuLCBtYXRlcmlhbC5vdmVyZHJhdyApOwoKCQkJCX0KCgkJCQlfZWxlbUJveC5zZXRGcm9tUG9pbnRzKCBbCgkJCQkJX3YxLnBvc2l0aW9uU2NyZWVuLAoJCQkJCV92Mi5wb3NpdGlvblNjcmVlbiwKCQkJCQlfdjMucG9zaXRpb25TY3JlZW4KCQkJCV0gKTsKCgkJCQlpZiAoIF9jbGlwQm94LmludGVyc2VjdHNCb3goIF9lbGVtQm94ICkgPT09IHRydWUgKSB7CgoJCQkJCXJlbmRlckZhY2UzKCBfdjEsIF92MiwgX3YzLCAwLCAxLCAyLCBlbGVtZW50LCBtYXRlcmlhbCApOwoKCQkJCX0KCgkJCX0KCgkJCS8qIERFQlVHCgkJCXNldExpbmVXaWR0aCggMSApOwoJCQlzZXRTdHJva2VTdHlsZSggJ3JnYmEoIDAsIDI1NSwgMCwgMC41ICknICk7CgkJCV9jb250ZXh0LnN0cm9rZVJlY3QoIF9lbGVtQm94Lm1pbi54LCBfZWxlbUJveC5taW4ueSwgX2VsZW1Cb3gubWF4LnggLSBfZWxlbUJveC5taW4ueCwgX2VsZW1Cb3gubWF4LnkgLSBfZWxlbUJveC5taW4ueSApOwoJCQkqLwoKCQkJX2NsZWFyQm94LnVuaW9uKCBfZWxlbUJveCApOwoKCQl9CgoJCS8qIERFQlVHCgkJc2V0TGluZVdpZHRoKCAxICk7CgkJc2V0U3Ryb2tlU3R5bGUoICdyZ2JhKCAyNTUsIDAsIDAsIDAuNSApJyApOwoJCV9jb250ZXh0LnN0cm9rZVJlY3QoIF9jbGVhckJveC5taW4ueCwgX2NsZWFyQm94Lm1pbi55LCBfY2xlYXJCb3gubWF4LnggLSBfY2xlYXJCb3gubWluLngsIF9jbGVhckJveC5tYXgueSAtIF9jbGVhckJveC5taW4ueSApOwoJCSovCgoJCV9jb250ZXh0LnNldFRyYW5zZm9ybSggMSwgMCwgMCwgMSwgMCwgMCApOwoKCX07CgoJLy8KCglmdW5jdGlvbiBjYWxjdWxhdGVMaWdodHMoKSB7CgoJCV9hbWJpZW50TGlnaHQuc2V0UkdCKCAwLCAwLCAwICk7CgkJX2RpcmVjdGlvbmFsTGlnaHRzLnNldFJHQiggMCwgMCwgMCApOwoJCV9wb2ludExpZ2h0cy5zZXRSR0IoIDAsIDAsIDAgKTsKCgkJZm9yICggdmFyIGwgPSAwLCBsbCA9IF9saWdodHMubGVuZ3RoOyBsIDwgbGw7IGwgKysgKSB7CgoJCQl2YXIgbGlnaHQgPSBfbGlnaHRzWyBsIF07CgkJCXZhciBsaWdodENvbG9yID0gbGlnaHQuY29sb3I7CgoJCQlpZiAoIGxpZ2h0IGluc3RhbmNlb2YgVEhSRUUuQW1iaWVudExpZ2h0ICkgewoKCQkJCV9hbWJpZW50TGlnaHQuYWRkKCBsaWdodENvbG9yICk7CgoJCQl9IGVsc2UgaWYgKCBsaWdodCBpbnN0YW5jZW9mIFRIUkVFLkRpcmVjdGlvbmFsTGlnaHQgKSB7CgoJCQkJLy8gZm9yIHNwcml0ZXMKCgkJCQlfZGlyZWN0aW9uYWxMaWdodHMuYWRkKCBsaWdodENvbG9yICk7CgoJCQl9IGVsc2UgaWYgKCBsaWdodCBpbnN0YW5jZW9mIFRIUkVFLlBvaW50TGlnaHQgKSB7CgoJCQkJLy8gZm9yIHNwcml0ZXMKCgkJCQlfcG9pbnRMaWdodHMuYWRkKCBsaWdodENvbG9yICk7CgoJCQl9CgoJCX0KCgl9CgoJZnVuY3Rpb24gY2FsY3VsYXRlTGlnaHQoIHBvc2l0aW9uLCBub3JtYWwsIGNvbG9yICkgewoKCQlmb3IgKCB2YXIgbCA9IDAsIGxsID0gX2xpZ2h0cy5sZW5ndGg7IGwgPCBsbDsgbCArKyApIHsKCgkJCXZhciBsaWdodCA9IF9saWdodHNbIGwgXTsKCgkJCV9saWdodENvbG9yLmNvcHkoIGxpZ2h0LmNvbG9yICk7CgoJCQlpZiAoIGxpZ2h0IGluc3RhbmNlb2YgVEhSRUUuRGlyZWN0aW9uYWxMaWdodCApIHsKCgkJCQl2YXIgbGlnaHRQb3NpdGlvbiA9IF92ZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQubWF0cml4V29ybGQgKS5ub3JtYWxpemUoKTsKCgkJCQl2YXIgYW1vdW50ID0gbm9ybWFsLmRvdCggbGlnaHRQb3NpdGlvbiApOwoKCQkJCWlmICggYW1vdW50IDw9IDAgKSBjb250aW51ZTsKCgkJCQlhbW91bnQgKj0gbGlnaHQuaW50ZW5zaXR5OwoKCQkJCWNvbG9yLmFkZCggX2xpZ2h0Q29sb3IubXVsdGlwbHlTY2FsYXIoIGFtb3VudCApICk7CgoJCQl9IGVsc2UgaWYgKCBsaWdodCBpbnN0YW5jZW9mIFRIUkVFLlBvaW50TGlnaHQgKSB7CgoJCQkJdmFyIGxpZ2h0UG9zaXRpb24gPSBfdmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGxpZ2h0Lm1hdHJpeFdvcmxkICk7CgoJCQkJdmFyIGFtb3VudCA9IG5vcm1hbC5kb3QoIF92ZWN0b3IzLnN1YlZlY3RvcnMoIGxpZ2h0UG9zaXRpb24sIHBvc2l0aW9uICkubm9ybWFsaXplKCkgKTsKCgkJCQlpZiAoIGFtb3VudCA8PSAwICkgY29udGludWU7CgoJCQkJYW1vdW50ICo9IGxpZ2h0LmRpc3RhbmNlID09IDAgPyAxIDogMSAtIE1hdGgubWluKCBwb3NpdGlvbi5kaXN0YW5jZVRvKCBsaWdodFBvc2l0aW9uICkgLyBsaWdodC5kaXN0YW5jZSwgMSApOwoKCQkJCWlmICggYW1vdW50ID09IDAgKSBjb250aW51ZTsKCgkJCQlhbW91bnQgKj0gbGlnaHQuaW50ZW5zaXR5OwoKCQkJCWNvbG9yLmFkZCggX2xpZ2h0Q29sb3IubXVsdGlwbHlTY2FsYXIoIGFtb3VudCApICk7CgoJCQl9CgoJCX0KCgl9CgoJZnVuY3Rpb24gcmVuZGVyU3ByaXRlKCB2MSwgZWxlbWVudCwgbWF0ZXJpYWwgKSB7CgoJCXNldE9wYWNpdHkoIG1hdGVyaWFsLm9wYWNpdHkgKTsKCQlzZXRCbGVuZGluZyggbWF0ZXJpYWwuYmxlbmRpbmcgKTsKCgkJdmFyIHNjYWxlWCA9IGVsZW1lbnQuc2NhbGUueCAqIF9jYW52YXNXaWR0aEhhbGY7CgkJdmFyIHNjYWxlWSA9IGVsZW1lbnQuc2NhbGUueSAqIF9jYW52YXNIZWlnaHRIYWxmOwoKCQl2YXIgZGlzdCA9IDAuNSAqIE1hdGguc3FydCggc2NhbGVYICogc2NhbGVYICsgc2NhbGVZICogc2NhbGVZICk7IC8vIGFsbG93IGZvciByb3RhdGVkIHNwcml0ZQoJCV9lbGVtQm94Lm1pbi5zZXQoIHYxLnggLSBkaXN0LCB2MS55IC0gZGlzdCApOwoJCV9lbGVtQm94Lm1heC5zZXQoIHYxLnggKyBkaXN0LCB2MS55ICsgZGlzdCApOwoKCQlpZiAoIG1hdGVyaWFsIGluc3RhbmNlb2YgVEhSRUUuU3ByaXRlTWF0ZXJpYWwgKSB7CgoJCQl2YXIgdGV4dHVyZSA9IG1hdGVyaWFsLm1hcDsKCgkJCWlmICggdGV4dHVyZSAhPT0gbnVsbCApIHsKCgkJCQl2YXIgcGF0dGVybiA9IF9wYXR0ZXJuc1sgdGV4dHVyZS5pZCBdOwoKCQkJCWlmICggcGF0dGVybiA9PT0gdW5kZWZpbmVkIHx8IHBhdHRlcm4udmVyc2lvbiAhPT0gdGV4dHVyZS52ZXJzaW9uICkgewoKCQkJCQlwYXR0ZXJuID0gdGV4dHVyZVRvUGF0dGVybiggdGV4dHVyZSApOwoJCQkJCV9wYXR0ZXJuc1sgdGV4dHVyZS5pZCBdID0gcGF0dGVybjsKCgkJCQl9CgoJCQkJaWYgKCBwYXR0ZXJuLmNhbnZhcyAhPT0gdW5kZWZpbmVkICkgewoKCQkJCQlzZXRGaWxsU3R5bGUoIHBhdHRlcm4uY2FudmFzICk7CgoJCQkJCXZhciBiaXRtYXAgPSB0ZXh0dXJlLmltYWdlOwoKCQkJCQl2YXIgb3ggPSBiaXRtYXAud2lkdGggKiB0ZXh0dXJlLm9mZnNldC54OwoJCQkJCXZhciBveSA9IGJpdG1hcC5oZWlnaHQgKiB0ZXh0dXJlLm9mZnNldC55OwoKCQkJCQl2YXIgc3ggPSBiaXRtYXAud2lkdGggKiB0ZXh0dXJlLnJlcGVhdC54OwoJCQkJCXZhciBzeSA9IGJpdG1hcC5oZWlnaHQgKiB0ZXh0dXJlLnJlcGVhdC55OwoKCQkJCQl2YXIgY3ggPSBzY2FsZVggLyBzeDsKCQkJCQl2YXIgY3kgPSBzY2FsZVkgLyBzeTsKCgkJCQkJX2NvbnRleHQuc2F2ZSgpOwoJCQkJCV9jb250ZXh0LnRyYW5zbGF0ZSggdjEueCwgdjEueSApOwoJCQkJCWlmICggbWF0ZXJpYWwucm90YXRpb24gIT09IDAgKSBfY29udGV4dC5yb3RhdGUoIG1hdGVyaWFsLnJvdGF0aW9uICk7CgkJCQkJX2NvbnRleHQudHJhbnNsYXRlKCAtIHNjYWxlWCAvIDIsIC0gc2NhbGVZIC8gMiApOwoJCQkJCV9jb250ZXh0LnNjYWxlKCBjeCwgY3kgKTsKCQkJCQlfY29udGV4dC50cmFuc2xhdGUoIC0gb3gsIC0gb3kgKTsKCQkJCQlfY29udGV4dC5maWxsUmVjdCggb3gsIG95LCBzeCwgc3kgKTsKCQkJCQlfY29udGV4dC5yZXN0b3JlKCk7CgoJCQkJfQoKCQkJfSBlbHNlIHsKCgkJCQkvLyBubyB0ZXh0dXJlCgoJCQkJc2V0RmlsbFN0eWxlKCBtYXRlcmlhbC5jb2xvci5nZXRTdHlsZSgpICk7CgoJCQkJX2NvbnRleHQuc2F2ZSgpOwoJCQkJX2NvbnRleHQudHJhbnNsYXRlKCB2MS54LCB2MS55ICk7CgkJCQlpZiAoIG1hdGVyaWFsLnJvdGF0aW9uICE9PSAwICkgX2NvbnRleHQucm90YXRlKCBtYXRlcmlhbC5yb3RhdGlvbiApOwoJCQkJX2NvbnRleHQuc2NhbGUoIHNjYWxlWCwgLSBzY2FsZVkgKTsKCQkJCV9jb250ZXh0LmZpbGxSZWN0KCAtIDAuNSwgLSAwLjUsIDEsIDEgKTsKCQkJCV9jb250ZXh0LnJlc3RvcmUoKTsKCgkJCX0KCgkJfSBlbHNlIGlmICggbWF0ZXJpYWwgaW5zdGFuY2VvZiBUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbCApIHsKCgkJCXNldFN0cm9rZVN0eWxlKCBtYXRlcmlhbC5jb2xvci5nZXRTdHlsZSgpICk7CgkJCXNldEZpbGxTdHlsZSggbWF0ZXJpYWwuY29sb3IuZ2V0U3R5bGUoKSApOwoKCQkJX2NvbnRleHQuc2F2ZSgpOwoJCQlfY29udGV4dC50cmFuc2xhdGUoIHYxLngsIHYxLnkgKTsKCQkJaWYgKCBtYXRlcmlhbC5yb3RhdGlvbiAhPT0gMCApIF9jb250ZXh0LnJvdGF0ZSggbWF0ZXJpYWwucm90YXRpb24gKTsKCQkJX2NvbnRleHQuc2NhbGUoIHNjYWxlWCwgc2NhbGVZICk7CgoJCQltYXRlcmlhbC5wcm9ncmFtKCBfY29udGV4dCApOwoKCQkJX2NvbnRleHQucmVzdG9yZSgpOwoKCQl9CgoJCS8qIERFQlVHCgkJc2V0U3Ryb2tlU3R5bGUoICdyZ2IoMjU1LDI1NSwwKScgKTsKCQlfY29udGV4dC5iZWdpblBhdGgoKTsKCQlfY29udGV4dC5tb3ZlVG8oIHYxLnggLSAxMCwgdjEueSApOwoJCV9jb250ZXh0LmxpbmVUbyggdjEueCArIDEwLCB2MS55ICk7CgkJX2NvbnRleHQubW92ZVRvKCB2MS54LCB2MS55IC0gMTAgKTsKCQlfY29udGV4dC5saW5lVG8oIHYxLngsIHYxLnkgKyAxMCApOwoJCV9jb250ZXh0LnN0cm9rZSgpOwoJCSovCgoJfQoKCWZ1bmN0aW9uIHJlbmRlckxpbmUoIHYxLCB2MiwgZWxlbWVudCwgbWF0ZXJpYWwgKSB7CgoJCXNldE9wYWNpdHkoIG1hdGVyaWFsLm9wYWNpdHkgKTsKCQlzZXRCbGVuZGluZyggbWF0ZXJpYWwuYmxlbmRpbmcgKTsKCgkJX2NvbnRleHQuYmVnaW5QYXRoKCk7CgkJX2NvbnRleHQubW92ZVRvKCB2MS5wb3NpdGlvblNjcmVlbi54LCB2MS5wb3NpdGlvblNjcmVlbi55ICk7CgkJX2NvbnRleHQubGluZVRvKCB2Mi5wb3NpdGlvblNjcmVlbi54LCB2Mi5wb3NpdGlvblNjcmVlbi55ICk7CgoJCWlmICggbWF0ZXJpYWwgaW5zdGFuY2VvZiBUSFJFRS5MaW5lQmFzaWNNYXRlcmlhbCApIHsKCgkJCXNldExpbmVXaWR0aCggbWF0ZXJpYWwubGluZXdpZHRoICk7CgkJCXNldExpbmVDYXAoIG1hdGVyaWFsLmxpbmVjYXAgKTsKCQkJc2V0TGluZUpvaW4oIG1hdGVyaWFsLmxpbmVqb2luICk7CgoJCQlpZiAoIG1hdGVyaWFsLnZlcnRleENvbG9ycyAhPT0gVEhSRUUuVmVydGV4Q29sb3JzICkgewoKCQkJCXNldFN0cm9rZVN0eWxlKCBtYXRlcmlhbC5jb2xvci5nZXRTdHlsZSgpICk7CgoJCQl9IGVsc2UgewoKCQkJCXZhciBjb2xvclN0eWxlMSA9IGVsZW1lbnQudmVydGV4Q29sb3JzWyAwIF0uZ2V0U3R5bGUoKTsKCQkJCXZhciBjb2xvclN0eWxlMiA9IGVsZW1lbnQudmVydGV4Q29sb3JzWyAxIF0uZ2V0U3R5bGUoKTsKCgkJCQlpZiAoIGNvbG9yU3R5bGUxID09PSBjb2xvclN0eWxlMiApIHsKCgkJCQkJc2V0U3Ryb2tlU3R5bGUoIGNvbG9yU3R5bGUxICk7CgoJCQkJfSBlbHNlIHsKCgkJCQkJdHJ5IHsKCgkJCQkJCXZhciBncmFkID0gX2NvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQoCgkJCQkJCQl2MS5wb3NpdGlvblNjcmVlbi54LAoJCQkJCQkJdjEucG9zaXRpb25TY3JlZW4ueSwKCQkJCQkJCXYyLnBvc2l0aW9uU2NyZWVuLngsCgkJCQkJCQl2Mi5wb3NpdGlvblNjcmVlbi55CgkJCQkJCSk7CgkJCQkJCWdyYWQuYWRkQ29sb3JTdG9wKCAwLCBjb2xvclN0eWxlMSApOwoJCQkJCQlncmFkLmFkZENvbG9yU3RvcCggMSwgY29sb3JTdHlsZTIgKTsKCgkJCQkJfSBjYXRjaCAoIGV4Y2VwdGlvbiApIHsKCgkJCQkJCWdyYWQgPSBjb2xvclN0eWxlMTsKCgkJCQkJfQoKCQkJCQlzZXRTdHJva2VTdHlsZSggZ3JhZCApOwoKCQkJCX0KCgkJCX0KCgkJCV9jb250ZXh0LnN0cm9rZSgpOwoJCQlfZWxlbUJveC5leHBhbmRCeVNjYWxhciggbWF0ZXJpYWwubGluZXdpZHRoICogMiApOwoKCQl9IGVsc2UgaWYgKCBtYXRlcmlhbCBpbnN0YW5jZW9mIFRIUkVFLkxpbmVEYXNoZWRNYXRlcmlhbCApIHsKCgkJCXNldExpbmVXaWR0aCggbWF0ZXJpYWwubGluZXdpZHRoICk7CgkJCXNldExpbmVDYXAoIG1hdGVyaWFsLmxpbmVjYXAgKTsKCQkJc2V0TGluZUpvaW4oIG1hdGVyaWFsLmxpbmVqb2luICk7CgkJCXNldFN0cm9rZVN0eWxlKCBtYXRlcmlhbC5jb2xvci5nZXRTdHlsZSgpICk7CgkJCXNldExpbmVEYXNoKCBbIG1hdGVyaWFsLmRhc2hTaXplLCBtYXRlcmlhbC5nYXBTaXplIF0gKTsKCgkJCV9jb250ZXh0LnN0cm9rZSgpOwoKCQkJX2VsZW1Cb3guZXhwYW5kQnlTY2FsYXIoIG1hdGVyaWFsLmxpbmV3aWR0aCAqIDIgKTsKCgkJCXNldExpbmVEYXNoKCBbXSApOwoKCQl9CgoJfQoKCWZ1bmN0aW9uIHJlbmRlckZhY2UzKCB2MSwgdjIsIHYzLCB1djEsIHV2MiwgdXYzLCBlbGVtZW50LCBtYXRlcmlhbCApIHsKCgkJX3RoaXMuaW5mby5yZW5kZXIudmVydGljZXMgKz0gMzsKCQlfdGhpcy5pbmZvLnJlbmRlci5mYWNlcyArKzsKCgkJc2V0T3BhY2l0eSggbWF0ZXJpYWwub3BhY2l0eSApOwoJCXNldEJsZW5kaW5nKCBtYXRlcmlhbC5ibGVuZGluZyApOwoKCQlfdjF4ID0gdjEucG9zaXRpb25TY3JlZW4ueDsgX3YxeSA9IHYxLnBvc2l0aW9uU2NyZWVuLnk7CgkJX3YyeCA9IHYyLnBvc2l0aW9uU2NyZWVuLng7IF92MnkgPSB2Mi5wb3NpdGlvblNjcmVlbi55OwoJCV92M3ggPSB2My5wb3NpdGlvblNjcmVlbi54OyBfdjN5ID0gdjMucG9zaXRpb25TY3JlZW4ueTsKCgkJZHJhd1RyaWFuZ2xlKCBfdjF4LCBfdjF5LCBfdjJ4LCBfdjJ5LCBfdjN4LCBfdjN5ICk7CgoJCWlmICggKCBtYXRlcmlhbCBpbnN0YW5jZW9mIFRIUkVFLk1lc2hMYW1iZXJ0TWF0ZXJpYWwgfHwgbWF0ZXJpYWwgaW5zdGFuY2VvZiBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCApICYmIG1hdGVyaWFsLm1hcCA9PT0gbnVsbCApIHsKCgkJCV9kaWZmdXNlQ29sb3IuY29weSggbWF0ZXJpYWwuY29sb3IgKTsKCQkJX2VtaXNzaXZlQ29sb3IuY29weSggbWF0ZXJpYWwuZW1pc3NpdmUgKTsKCgkJCWlmICggbWF0ZXJpYWwudmVydGV4Q29sb3JzID09PSBUSFJFRS5GYWNlQ29sb3JzICkgewoKCQkJCV9kaWZmdXNlQ29sb3IubXVsdGlwbHkoIGVsZW1lbnQuY29sb3IgKTsKCgkJCX0KCgkJCV9jb2xvci5jb3B5KCBfYW1iaWVudExpZ2h0ICk7CgoJCQlfY2VudHJvaWQuY29weSggdjEucG9zaXRpb25Xb3JsZCApLmFkZCggdjIucG9zaXRpb25Xb3JsZCApLmFkZCggdjMucG9zaXRpb25Xb3JsZCApLmRpdmlkZVNjYWxhciggMyApOwoKCQkJY2FsY3VsYXRlTGlnaHQoIF9jZW50cm9pZCwgZWxlbWVudC5ub3JtYWxNb2RlbCwgX2NvbG9yICk7CgoJCQlfY29sb3IubXVsdGlwbHkoIF9kaWZmdXNlQ29sb3IgKS5hZGQoIF9lbWlzc2l2ZUNvbG9yICk7CgoJCQltYXRlcmlhbC53aXJlZnJhbWUgPT09IHRydWUKCQkJCSA/IHN0cm9rZVBhdGgoIF9jb2xvciwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZXdpZHRoLCBtYXRlcmlhbC53aXJlZnJhbWVMaW5lY2FwLCBtYXRlcmlhbC53aXJlZnJhbWVMaW5lam9pbiApCgkJCQkgOiBmaWxsUGF0aCggX2NvbG9yICk7CgoJCX0gZWxzZSBpZiAoIG1hdGVyaWFsIGluc3RhbmNlb2YgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwgfHwKCQkJCSAgICBtYXRlcmlhbCBpbnN0YW5jZW9mIFRIUkVFLk1lc2hMYW1iZXJ0TWF0ZXJpYWwgfHwKCQkJCSAgICBtYXRlcmlhbCBpbnN0YW5jZW9mIFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsICkgewoKCQkJaWYgKCBtYXRlcmlhbC5tYXAgIT09IG51bGwgKSB7CgoJCQkJdmFyIG1hcHBpbmcgPSBtYXRlcmlhbC5tYXAubWFwcGluZzsKCgkJCQlpZiAoIG1hcHBpbmcgPT09IFRIUkVFLlVWTWFwcGluZyApIHsKCgkJCQkJX3V2cyA9IGVsZW1lbnQudXZzOwoJCQkJCXBhdHRlcm5QYXRoKCBfdjF4LCBfdjF5LCBfdjJ4LCBfdjJ5LCBfdjN4LCBfdjN5LCBfdXZzWyB1djEgXS54LCBfdXZzWyB1djEgXS55LCBfdXZzWyB1djIgXS54LCBfdXZzWyB1djIgXS55LCBfdXZzWyB1djMgXS54LCBfdXZzWyB1djMgXS55LCBtYXRlcmlhbC5tYXAgKTsKCgkJCQl9CgoJCQl9IGVsc2UgaWYgKCBtYXRlcmlhbC5lbnZNYXAgIT09IG51bGwgKSB7CgoJCQkJaWYgKCBtYXRlcmlhbC5lbnZNYXAubWFwcGluZyA9PT0gVEhSRUUuU3BoZXJpY2FsUmVmbGVjdGlvbk1hcHBpbmcgKSB7CgoJCQkJCV9ub3JtYWwuY29weSggZWxlbWVudC52ZXJ0ZXhOb3JtYWxzTW9kZWxbIHV2MSBdICkuYXBwbHlNYXRyaXgzKCBfbm9ybWFsVmlld01hdHJpeCApOwoJCQkJCV91djF4ID0gMC41ICogX25vcm1hbC54ICsgMC41OwoJCQkJCV91djF5ID0gMC41ICogX25vcm1hbC55ICsgMC41OwoKCQkJCQlfbm9ybWFsLmNvcHkoIGVsZW1lbnQudmVydGV4Tm9ybWFsc01vZGVsWyB1djIgXSApLmFwcGx5TWF0cml4MyggX25vcm1hbFZpZXdNYXRyaXggKTsKCQkJCQlfdXYyeCA9IDAuNSAqIF9ub3JtYWwueCArIDAuNTsKCQkJCQlfdXYyeSA9IDAuNSAqIF9ub3JtYWwueSArIDAuNTsKCgkJCQkJX25vcm1hbC5jb3B5KCBlbGVtZW50LnZlcnRleE5vcm1hbHNNb2RlbFsgdXYzIF0gKS5hcHBseU1hdHJpeDMoIF9ub3JtYWxWaWV3TWF0cml4ICk7CgkJCQkJX3V2M3ggPSAwLjUgKiBfbm9ybWFsLnggKyAwLjU7CgkJCQkJX3V2M3kgPSAwLjUgKiBfbm9ybWFsLnkgKyAwLjU7CgoJCQkJCXBhdHRlcm5QYXRoKCBfdjF4LCBfdjF5LCBfdjJ4LCBfdjJ5LCBfdjN4LCBfdjN5LCBfdXYxeCwgX3V2MXksIF91djJ4LCBfdXYyeSwgX3V2M3gsIF91djN5LCBtYXRlcmlhbC5lbnZNYXAgKTsKCgkJCQl9CgoJCQl9IGVsc2UgewoKCQkJCV9jb2xvci5jb3B5KCBtYXRlcmlhbC5jb2xvciApOwoKCQkJCWlmICggbWF0ZXJpYWwudmVydGV4Q29sb3JzID09PSBUSFJFRS5GYWNlQ29sb3JzICkgewoKCQkJCQlfY29sb3IubXVsdGlwbHkoIGVsZW1lbnQuY29sb3IgKTsKCgkJCQl9CgoJCQkJbWF0ZXJpYWwud2lyZWZyYW1lID09PSB0cnVlCgkJCQkJID8gc3Ryb2tlUGF0aCggX2NvbG9yLCBtYXRlcmlhbC53aXJlZnJhbWVMaW5ld2lkdGgsIG1hdGVyaWFsLndpcmVmcmFtZUxpbmVjYXAsIG1hdGVyaWFsLndpcmVmcmFtZUxpbmVqb2luICkKCQkJCQkgOiBmaWxsUGF0aCggX2NvbG9yICk7CgoJCQl9CgoJCX0gZWxzZSBpZiAoIG1hdGVyaWFsIGluc3RhbmNlb2YgVEhSRUUuTWVzaE5vcm1hbE1hdGVyaWFsICkgewoKCQkJX25vcm1hbC5jb3B5KCBlbGVtZW50Lm5vcm1hbE1vZGVsICkuYXBwbHlNYXRyaXgzKCBfbm9ybWFsVmlld01hdHJpeCApOwoKCQkJX2NvbG9yLnNldFJHQiggX25vcm1hbC54LCBfbm9ybWFsLnksIF9ub3JtYWwueiApLm11bHRpcGx5U2NhbGFyKCAwLjUgKS5hZGRTY2FsYXIoIDAuNSApOwoKCQkJbWF0ZXJpYWwud2lyZWZyYW1lID09PSB0cnVlCgkJCQkgPyBzdHJva2VQYXRoKCBfY29sb3IsIG1hdGVyaWFsLndpcmVmcmFtZUxpbmV3aWR0aCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWNhcCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWpvaW4gKQoJCQkJIDogZmlsbFBhdGgoIF9jb2xvciApOwoKCQl9IGVsc2UgewoKCQkJX2NvbG9yLnNldFJHQiggMSwgMSwgMSApOwoKCQkJbWF0ZXJpYWwud2lyZWZyYW1lID09PSB0cnVlCgkJCQkgPyBzdHJva2VQYXRoKCBfY29sb3IsIG1hdGVyaWFsLndpcmVmcmFtZUxpbmV3aWR0aCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWNhcCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWpvaW4gKQoJCQkJIDogZmlsbFBhdGgoIF9jb2xvciApOwoKCQl9CgoJfQoKCS8vCgoJZnVuY3Rpb24gZHJhd1RyaWFuZ2xlKCB4MCwgeTAsIHgxLCB5MSwgeDIsIHkyICkgewoKCQlfY29udGV4dC5iZWdpblBhdGgoKTsKCQlfY29udGV4dC5tb3ZlVG8oIHgwLCB5MCApOwoJCV9jb250ZXh0LmxpbmVUbyggeDEsIHkxICk7CgkJX2NvbnRleHQubGluZVRvKCB4MiwgeTIgKTsKCQlfY29udGV4dC5jbG9zZVBhdGgoKTsKCgl9CgoJZnVuY3Rpb24gc3Ryb2tlUGF0aCggY29sb3IsIGxpbmV3aWR0aCwgbGluZWNhcCwgbGluZWpvaW4gKSB7CgoJCXNldExpbmVXaWR0aCggbGluZXdpZHRoICk7CgkJc2V0TGluZUNhcCggbGluZWNhcCApOwoJCXNldExpbmVKb2luKCBsaW5lam9pbiApOwoJCXNldFN0cm9rZVN0eWxlKCBjb2xvci5nZXRTdHlsZSgpICk7CgoJCV9jb250ZXh0LnN0cm9rZSgpOwoKCQlfZWxlbUJveC5leHBhbmRCeVNjYWxhciggbGluZXdpZHRoICogMiApOwoKCX0KCglmdW5jdGlvbiBmaWxsUGF0aCggY29sb3IgKSB7CgoJCXNldEZpbGxTdHlsZSggY29sb3IuZ2V0U3R5bGUoKSApOwoJCV9jb250ZXh0LmZpbGwoKTsKCgl9CgoJZnVuY3Rpb24gdGV4dHVyZVRvUGF0dGVybiggdGV4dHVyZSApIHsKCgkJaWYgKCB0ZXh0dXJlLnZlcnNpb24gPT09IDAgfHwKCQkJdGV4dHVyZSBpbnN0YW5jZW9mIFRIUkVFLkNvbXByZXNzZWRUZXh0dXJlIHx8CgkJCXRleHR1cmUgaW5zdGFuY2VvZiBUSFJFRS5EYXRhVGV4dHVyZSApIHsKCgkJCXJldHVybiB7CgkJCQljYW52YXM6IHVuZGVmaW5lZCwKCQkJCXZlcnNpb246IHRleHR1cmUudmVyc2lvbgoJCQl9OwoKCQl9CgoJCXZhciBpbWFnZSA9IHRleHR1cmUuaW1hZ2U7CgoJCWlmICggaW1hZ2UuY29tcGxldGUgPT09IGZhbHNlICkgewoKCQkJcmV0dXJuIHsKCQkJCWNhbnZhczogdW5kZWZpbmVkLAoJCQkJdmVyc2lvbjogMAoJCQl9OwoKCQl9CgoJCXZhciByZXBlYXRYID0gdGV4dHVyZS53cmFwUyA9PT0gVEhSRUUuUmVwZWF0V3JhcHBpbmcgfHwgdGV4dHVyZS53cmFwUyA9PT0gVEhSRUUuTWlycm9yZWRSZXBlYXRXcmFwcGluZzsKCQl2YXIgcmVwZWF0WSA9IHRleHR1cmUud3JhcFQgPT09IFRIUkVFLlJlcGVhdFdyYXBwaW5nIHx8IHRleHR1cmUud3JhcFQgPT09IFRIUkVFLk1pcnJvcmVkUmVwZWF0V3JhcHBpbmc7CgoJCXZhciBtaXJyb3JYID0gdGV4dHVyZS53cmFwUyA9PT0gVEhSRUUuTWlycm9yZWRSZXBlYXRXcmFwcGluZzsKCQl2YXIgbWlycm9yWSA9IHRleHR1cmUud3JhcFQgPT09IFRIUkVFLk1pcnJvcmVkUmVwZWF0V3JhcHBpbmc7CgoJCS8vCgoJCXZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnY2FudmFzJyApOwoJCWNhbnZhcy53aWR0aCA9IGltYWdlLndpZHRoICogKCBtaXJyb3JYID8gMiA6IDEgKTsKCQljYW52YXMuaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0ICogKCBtaXJyb3JZID8gMiA6IDEgKTsKCgkJdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApOwoJCWNvbnRleHQuc2V0VHJhbnNmb3JtKCAxLCAwLCAwLCAtIDEsIDAsIGltYWdlLmhlaWdodCApOwoJCWNvbnRleHQuZHJhd0ltYWdlKCBpbWFnZSwgMCwgMCApOwoKCQlpZiAoIG1pcnJvclggPT09IHRydWUgKSB7CgoJCQljb250ZXh0LnNldFRyYW5zZm9ybSggLSAxLCAwLCAwLCAtIDEsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQgKTsKCQkJY29udGV4dC5kcmF3SW1hZ2UoIGltYWdlLCAtIGltYWdlLndpZHRoLCAwICk7CgoJCX0KCgkJaWYgKCBtaXJyb3JZID09PSB0cnVlICkgewoKCQkJY29udGV4dC5zZXRUcmFuc2Zvcm0oIDEsIDAsIDAsIDEsIDAsIDAgKTsKCQkJY29udGV4dC5kcmF3SW1hZ2UoIGltYWdlLCAwLCBpbWFnZS5oZWlnaHQgKTsKCgkJfQoKCQlpZiAoIG1pcnJvclggPT09IHRydWUgJiYgbWlycm9yWSA9PT0gdHJ1ZSApIHsKCgkJCWNvbnRleHQuc2V0VHJhbnNmb3JtKCAtIDEsIDAsIDAsIDEsIGltYWdlLndpZHRoLCAwICk7CgkJCWNvbnRleHQuZHJhd0ltYWdlKCBpbWFnZSwgLSBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0ICk7CgoJCX0KCgkJdmFyIHJlcGVhdCA9ICduby1yZXBlYXQnOwoKCQlpZiAoIHJlcGVhdFggPT09IHRydWUgJiYgcmVwZWF0WSA9PT0gdHJ1ZSApIHsKCgkJCXJlcGVhdCA9ICdyZXBlYXQnOwoKCQl9IGVsc2UgaWYgKCByZXBlYXRYID09PSB0cnVlICkgewoKCQkJcmVwZWF0ID0gJ3JlcGVhdC14JzsKCgkJfSBlbHNlIGlmICggcmVwZWF0WSA9PT0gdHJ1ZSApIHsKCgkJCXJlcGVhdCA9ICdyZXBlYXQteSc7CgoJCX0KCgkJdmFyIHBhdHRlcm4gPSBfY29udGV4dC5jcmVhdGVQYXR0ZXJuKCBjYW52YXMsIHJlcGVhdCApOwoKCQlpZiAoIHRleHR1cmUub25VcGRhdGUgKSB0ZXh0dXJlLm9uVXBkYXRlKCB0ZXh0dXJlICk7CgoJCXJldHVybiB7CgkJCWNhbnZhczogcGF0dGVybiwKCQkJdmVyc2lvbjogdGV4dHVyZS52ZXJzaW9uCgkJfTsKCgl9CgoJZnVuY3Rpb24gcGF0dGVyblBhdGgoIHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIsIHUwLCB2MCwgdTEsIHYxLCB1MiwgdjIsIHRleHR1cmUgKSB7CgoJCXZhciBwYXR0ZXJuID0gX3BhdHRlcm5zWyB0ZXh0dXJlLmlkIF07CgoJCWlmICggcGF0dGVybiA9PT0gdW5kZWZpbmVkIHx8IHBhdHRlcm4udmVyc2lvbiAhPT0gdGV4dHVyZS52ZXJzaW9uICkgewoKCQkJcGF0dGVybiA9IHRleHR1cmVUb1BhdHRlcm4oIHRleHR1cmUgKTsKCQkJX3BhdHRlcm5zWyB0ZXh0dXJlLmlkIF0gPSBwYXR0ZXJuOwoKCQl9CgoJCWlmICggcGF0dGVybi5jYW52YXMgIT09IHVuZGVmaW5lZCApIHsKCgkJCXNldEZpbGxTdHlsZSggcGF0dGVybi5jYW52YXMgKTsKCgkJfSBlbHNlIHsKCgkJCXNldEZpbGxTdHlsZSggJ3JnYmEoIDAsIDAsIDAsIDEpJyApOwoJCQlfY29udGV4dC5maWxsKCk7CgkJCXJldHVybjsKCgkJfQoKCQkvLyBodHRwOi8vZXh0cmVtZWx5c2F0aXNmYWN0b3J5dG90YWxpdGFyaWFuaXNtLmNvbS9ibG9nLz9wPTIxMjAKCgkJdmFyIGEsIGIsIGMsIGQsIGUsIGYsIGRldCwgaWRldCwKCQlvZmZzZXRYID0gdGV4dHVyZS5vZmZzZXQueCAvIHRleHR1cmUucmVwZWF0LngsCgkJb2Zmc2V0WSA9IHRleHR1cmUub2Zmc2V0LnkgLyB0ZXh0dXJlLnJlcGVhdC55LAoJCXdpZHRoID0gdGV4dHVyZS5pbWFnZS53aWR0aCAqIHRleHR1cmUucmVwZWF0LngsCgkJaGVpZ2h0ID0gdGV4dHVyZS5pbWFnZS5oZWlnaHQgKiB0ZXh0dXJlLnJlcGVhdC55OwoKCQl1MCA9ICggdTAgKyBvZmZzZXRYICkgKiB3aWR0aDsKCQl2MCA9ICggdjAgKyBvZmZzZXRZICkgKiBoZWlnaHQ7CgoJCXUxID0gKCB1MSArIG9mZnNldFggKSAqIHdpZHRoOwoJCXYxID0gKCB2MSArIG9mZnNldFkgKSAqIGhlaWdodDsKCgkJdTIgPSAoIHUyICsgb2Zmc2V0WCApICogd2lkdGg7CgkJdjIgPSAoIHYyICsgb2Zmc2V0WSApICogaGVpZ2h0OwoKCQl4MSAtPSB4MDsgeTEgLT0geTA7CgkJeDIgLT0geDA7IHkyIC09IHkwOwoKCQl1MSAtPSB1MDsgdjEgLT0gdjA7CgkJdTIgLT0gdTA7IHYyIC09IHYwOwoKCQlkZXQgPSB1MSAqIHYyIC0gdTIgKiB2MTsKCgkJaWYgKCBkZXQgPT09IDAgKSByZXR1cm47CgoJCWlkZXQgPSAxIC8gZGV0OwoKCQlhID0gKCB2MiAqIHgxIC0gdjEgKiB4MiApICogaWRldDsKCQliID0gKCB2MiAqIHkxIC0gdjEgKiB5MiApICogaWRldDsKCQljID0gKCB1MSAqIHgyIC0gdTIgKiB4MSApICogaWRldDsKCQlkID0gKCB1MSAqIHkyIC0gdTIgKiB5MSApICogaWRldDsKCgkJZSA9IHgwIC0gYSAqIHUwIC0gYyAqIHYwOwoJCWYgPSB5MCAtIGIgKiB1MCAtIGQgKiB2MDsKCgkJX2NvbnRleHQuc2F2ZSgpOwoJCV9jb250ZXh0LnRyYW5zZm9ybSggYSwgYiwgYywgZCwgZSwgZiApOwoJCV9jb250ZXh0LmZpbGwoKTsKCQlfY29udGV4dC5yZXN0b3JlKCk7CgoJfQoKCWZ1bmN0aW9uIGNsaXBJbWFnZSggeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgdTAsIHYwLCB1MSwgdjEsIHUyLCB2MiwgaW1hZ2UgKSB7CgoJCS8vIGh0dHA6Ly9leHRyZW1lbHlzYXRpc2ZhY3Rvcnl0b3RhbGl0YXJpYW5pc20uY29tL2Jsb2cvP3A9MjEyMAoKCQl2YXIgYSwgYiwgYywgZCwgZSwgZiwgZGV0LCBpZGV0LAoJCXdpZHRoID0gaW1hZ2Uud2lkdGggLSAxLAoJCWhlaWdodCA9IGltYWdlLmhlaWdodCAtIDE7CgoJCXUwICo9IHdpZHRoOyB2MCAqPSBoZWlnaHQ7CgkJdTEgKj0gd2lkdGg7IHYxICo9IGhlaWdodDsKCQl1MiAqPSB3aWR0aDsgdjIgKj0gaGVpZ2h0OwoKCQl4MSAtPSB4MDsgeTEgLT0geTA7CgkJeDIgLT0geDA7IHkyIC09IHkwOwoKCQl1MSAtPSB1MDsgdjEgLT0gdjA7CgkJdTIgLT0gdTA7IHYyIC09IHYwOwoKCQlkZXQgPSB1MSAqIHYyIC0gdTIgKiB2MTsKCgkJaWRldCA9IDEgLyBkZXQ7CgoJCWEgPSAoIHYyICogeDEgLSB2MSAqIHgyICkgKiBpZGV0OwoJCWIgPSAoIHYyICogeTEgLSB2MSAqIHkyICkgKiBpZGV0OwoJCWMgPSAoIHUxICogeDIgLSB1MiAqIHgxICkgKiBpZGV0OwoJCWQgPSAoIHUxICogeTIgLSB1MiAqIHkxICkgKiBpZGV0OwoKCQllID0geDAgLSBhICogdTAgLSBjICogdjA7CgkJZiA9IHkwIC0gYiAqIHUwIC0gZCAqIHYwOwoKCQlfY29udGV4dC5zYXZlKCk7CgkJX2NvbnRleHQudHJhbnNmb3JtKCBhLCBiLCBjLCBkLCBlLCBmICk7CgkJX2NvbnRleHQuY2xpcCgpOwoJCV9jb250ZXh0LmRyYXdJbWFnZSggaW1hZ2UsIDAsIDAgKTsKCQlfY29udGV4dC5yZXN0b3JlKCk7CgoJfQoKCS8vIEhpZGUgYW50aS1hbGlhcyBnYXBzCgoJZnVuY3Rpb24gZXhwYW5kKCB2MSwgdjIsIHBpeGVscyApIHsKCgkJdmFyIHggPSB2Mi54IC0gdjEueCwgeSA9IHYyLnkgLSB2MS55LAoJCWRldCA9IHggKiB4ICsgeSAqIHksIGlkZXQ7CgoJCWlmICggZGV0ID09PSAwICkgcmV0dXJuOwoKCQlpZGV0ID0gcGl4ZWxzIC8gTWF0aC5zcXJ0KCBkZXQgKTsKCgkJeCAqPSBpZGV0OyB5ICo9IGlkZXQ7CgoJCXYyLnggKz0geDsgdjIueSArPSB5OwoJCXYxLnggLT0geDsgdjEueSAtPSB5OwoKCX0KCgkvLyBDb250ZXh0IGNhY2hlZCBtZXRob2RzLgoKCWZ1bmN0aW9uIHNldE9wYWNpdHkoIHZhbHVlICkgewoKCQlpZiAoIF9jb250ZXh0R2xvYmFsQWxwaGEgIT09IHZhbHVlICkgewoKCQkJX2NvbnRleHQuZ2xvYmFsQWxwaGEgPSB2YWx1ZTsKCQkJX2NvbnRleHRHbG9iYWxBbHBoYSA9IHZhbHVlOwoKCQl9CgoJfQoKCWZ1bmN0aW9uIHNldEJsZW5kaW5nKCB2YWx1ZSApIHsKCgkJaWYgKCBfY29udGV4dEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gdmFsdWUgKSB7CgoJCQlpZiAoIHZhbHVlID09PSBUSFJFRS5Ob3JtYWxCbGVuZGluZyApIHsKCgkJCQlfY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnc291cmNlLW92ZXInOwoKCQkJfSBlbHNlIGlmICggdmFsdWUgPT09IFRIUkVFLkFkZGl0aXZlQmxlbmRpbmcgKSB7CgoJCQkJX2NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2xpZ2h0ZXInOwoKCQkJfSBlbHNlIGlmICggdmFsdWUgPT09IFRIUkVFLlN1YnRyYWN0aXZlQmxlbmRpbmcgKSB7CgoJCQkJX2NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rhcmtlcic7CgoJCQl9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gVEhSRUUuTXVsdGlwbHlCbGVuZGluZyApIHsKCgkJCQlfY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknOwoKCQkJfQoKCQkJX2NvbnRleHRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSB2YWx1ZTsKCgkJfQoKCX0KCglmdW5jdGlvbiBzZXRMaW5lV2lkdGgoIHZhbHVlICkgewoKCQlpZiAoIF9jb250ZXh0TGluZVdpZHRoICE9PSB2YWx1ZSApIHsKCgkJCV9jb250ZXh0LmxpbmVXaWR0aCA9IHZhbHVlOwoJCQlfY29udGV4dExpbmVXaWR0aCA9IHZhbHVlOwoKCQl9CgoJfQoKCWZ1bmN0aW9uIHNldExpbmVDYXAoIHZhbHVlICkgewoKCQkvLyAiYnV0dCIsICJyb3VuZCIsICJzcXVhcmUiCgoJCWlmICggX2NvbnRleHRMaW5lQ2FwICE9PSB2YWx1ZSApIHsKCgkJCV9jb250ZXh0LmxpbmVDYXAgPSB2YWx1ZTsKCQkJX2NvbnRleHRMaW5lQ2FwID0gdmFsdWU7CgoJCX0KCgl9CgoJZnVuY3Rpb24gc2V0TGluZUpvaW4oIHZhbHVlICkgewoKCQkvLyAicm91bmQiLCAiYmV2ZWwiLCAibWl0ZXIiCgoJCWlmICggX2NvbnRleHRMaW5lSm9pbiAhPT0gdmFsdWUgKSB7CgoJCQlfY29udGV4dC5saW5lSm9pbiA9IHZhbHVlOwoJCQlfY29udGV4dExpbmVKb2luID0gdmFsdWU7CgoJCX0KCgl9CgoJZnVuY3Rpb24gc2V0U3Ryb2tlU3R5bGUoIHZhbHVlICkgewoKCQlpZiAoIF9jb250ZXh0U3Ryb2tlU3R5bGUgIT09IHZhbHVlICkgewoKCQkJX2NvbnRleHQuc3Ryb2tlU3R5bGUgPSB2YWx1ZTsKCQkJX2NvbnRleHRTdHJva2VTdHlsZSA9IHZhbHVlOwoKCQl9CgoJfQoKCWZ1bmN0aW9uIHNldEZpbGxTdHlsZSggdmFsdWUgKSB7CgoJCWlmICggX2NvbnRleHRGaWxsU3R5bGUgIT09IHZhbHVlICkgewoKCQkJX2NvbnRleHQuZmlsbFN0eWxlID0gdmFsdWU7CgkJCV9jb250ZXh0RmlsbFN0eWxlID0gdmFsdWU7CgoJCX0KCgl9CgoJZnVuY3Rpb24gc2V0TGluZURhc2goIHZhbHVlICkgewoKCQlpZiAoIF9jb250ZXh0TGluZURhc2gubGVuZ3RoICE9PSB2YWx1ZS5sZW5ndGggKSB7CgoJCQlfY29udGV4dC5zZXRMaW5lRGFzaCggdmFsdWUgKTsKCQkJX2NvbnRleHRMaW5lRGFzaCA9IHZhbHVlOwoKCQl9CgoJfQoKfTsK(Line 37)
Message:
THREE.CanvasRenderer
console-api warning URL: data:application/x-javascript;base64,Ly8gdGhyZWVqcy5vcmcvbGljZW5zZQooZnVuY3Rpb24obCxzYSl7Im9iamVjdCI9PT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPT10eXBlb2YgbW9kdWxlP3NhKGV4cG9ydHMpOiJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiXSxzYSk6c2EobC5USFJFRT1sLlRIUkVFfHx7fSl9KSh0aGlzLGZ1bmN0aW9uKGwpe2Z1bmN0aW9uIHNhKCl7fWZ1bmN0aW9uIEQoYSxiKXt0aGlzLng9YXx8MDt0aGlzLnk9Ynx8MH1mdW5jdGlvbiBYKGEsYixjLGQsZSxmLGcsaCxrLG0pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOmpmKyt9KTt0aGlzLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKTt0aGlzLm5hbWU9IiI7dGhpcy5pbWFnZT12b2lkIDAhPT1hP2E6WC5ERUZBVUxUX0lNQUdFO3RoaXMubWlwbWFwcz1bXTt0aGlzLm1hcHBpbmc9dm9pZCAwIT09Yj9iOlguREVGQVVMVF9NQVBQSU5HO3RoaXMud3JhcFM9dm9pZCAwIT09Yz9jOjEwMDE7dGhpcy53cmFwVD0Kdm9pZCAwIT09ZD9kOjEwMDE7dGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09ZT9lOjEwMDY7dGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09Zj9mOjEwMDg7dGhpcy5hbmlzb3Ryb3B5PXZvaWQgMCE9PWs/azoxO3RoaXMuZm9ybWF0PXZvaWQgMCE9PWc/ZzoxMDIzO3RoaXMudHlwZT12b2lkIDAhPT1oP2g6MTAwOTt0aGlzLm9mZnNldD1uZXcgRCgwLDApO3RoaXMucmVwZWF0PW5ldyBEKDEsMSk7dGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITA7dGhpcy5wcmVtdWx0aXBseUFscGhhPSExO3RoaXMuZmxpcFk9ITA7dGhpcy51bnBhY2tBbGlnbm1lbnQ9NDt0aGlzLmVuY29kaW5nPXZvaWQgMCE9PW0/bTozRTM7dGhpcy52ZXJzaW9uPTA7dGhpcy5vblVwZGF0ZT1udWxsfWZ1bmN0aW9uIGdhKGEsYixjLGQpe3RoaXMueD1hfHwwO3RoaXMueT1ifHwwO3RoaXMuej1jfHwwO3RoaXMudz12b2lkIDAhPT1kP2Q6MX1mdW5jdGlvbiBEYihhLGIsYyl7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7dGhpcy53aWR0aD0KYTt0aGlzLmhlaWdodD1iO3RoaXMuc2Npc3Nvcj1uZXcgZ2EoMCwwLGEsYik7dGhpcy5zY2lzc29yVGVzdD0hMTt0aGlzLnZpZXdwb3J0PW5ldyBnYSgwLDAsYSxiKTtjPWN8fHt9O3ZvaWQgMD09PWMubWluRmlsdGVyJiYoYy5taW5GaWx0ZXI9MTAwNik7dGhpcy50ZXh0dXJlPW5ldyBYKHZvaWQgMCx2b2lkIDAsYy53cmFwUyxjLndyYXBULGMubWFnRmlsdGVyLGMubWluRmlsdGVyLGMuZm9ybWF0LGMudHlwZSxjLmFuaXNvdHJvcHksYy5lbmNvZGluZyk7dGhpcy5kZXB0aEJ1ZmZlcj12b2lkIDAhPT1jLmRlcHRoQnVmZmVyP2MuZGVwdGhCdWZmZXI6ITA7dGhpcy5zdGVuY2lsQnVmZmVyPXZvaWQgMCE9PWMuc3RlbmNpbEJ1ZmZlcj9jLnN0ZW5jaWxCdWZmZXI6ITA7dGhpcy5kZXB0aFRleHR1cmU9dm9pZCAwIT09Yy5kZXB0aFRleHR1cmU/Yy5kZXB0aFRleHR1cmU6bnVsbH1mdW5jdGlvbiBFYihhLGIsYyl7RGIuY2FsbCh0aGlzLGEsYixjKTt0aGlzLmFjdGl2ZU1pcE1hcExldmVsPQp0aGlzLmFjdGl2ZUN1YmVGYWNlPTB9ZnVuY3Rpb24gcWEoYSxiLGMsZCl7dGhpcy5feD1hfHwwO3RoaXMuX3k9Ynx8MDt0aGlzLl96PWN8fDA7dGhpcy5fdz12b2lkIDAhPT1kP2Q6MX1mdW5jdGlvbiBwKGEsYixjKXt0aGlzLng9YXx8MDt0aGlzLnk9Ynx8MDt0aGlzLno9Y3x8MH1mdW5jdGlvbiBKKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07MDxhcmd1bWVudHMubGVuZ3RoJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfWZ1bmN0aW9uIGViKGEsYixjLGQsZSxmLGcsaCxrLG0sdSxxKXtYLmNhbGwodGhpcyxudWxsLGYsZyxoLGssbSxkLGUsdSxxKTt0aGlzLmltYWdlPXtkYXRhOmEsd2lkdGg6YixoZWlnaHQ6Y307dGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09az9rOjEwMDM7dGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09Cm0/bToxMDAzO3RoaXMuZmxpcFk9dGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITE7dGhpcy51bnBhY2tBbGlnbm1lbnQ9MX1mdW5jdGlvbiBaYShhLGIsYyxkLGUsZixnLGgsayxtKXthPXZvaWQgMCE9PWE/YTpbXTtYLmNhbGwodGhpcyxhLHZvaWQgMCE9PWI/YjozMDEsYyxkLGUsZixnLGgsayxtKTt0aGlzLmZsaXBZPSExfWZ1bmN0aW9uIEZiKGEsYixjKXt2YXIgZD1hWzBdO2lmKDA+PWR8fDA8ZClyZXR1cm4gYTt2YXIgZT1iKmMsZj15ZVtlXTt2b2lkIDA9PT1mJiYoZj1uZXcgRmxvYXQzMkFycmF5KGUpLHllW2VdPWYpO2lmKDAhPT1iKWZvcihkLnRvQXJyYXkoZiwwKSxkPTEsZT0wO2QhPT1iOysrZCllKz1jLGFbZF0udG9BcnJheShmLGUpO3JldHVybiBmfWZ1bmN0aW9uIHplKGEsYil7dmFyIGM9QWVbYl07dm9pZCAwPT09YyYmKGM9bmV3IEludDMyQXJyYXkoYiksQWVbYl09Yyk7Zm9yKHZhciBkPTA7ZCE9PWI7KytkKWNbZF09YS5hbGxvY1RleHR1cmVVbml0KCk7cmV0dXJuIGN9ZnVuY3Rpb24ga2YoYSwKYil7YS51bmlmb3JtMWYodGhpcy5hZGRyLGIpfWZ1bmN0aW9uIGxmKGEsYil7YS51bmlmb3JtMWkodGhpcy5hZGRyLGIpfWZ1bmN0aW9uIG1mKGEsYil7dm9pZCAwPT09Yi54P2EudW5pZm9ybTJmdih0aGlzLmFkZHIsYik6YS51bmlmb3JtMmYodGhpcy5hZGRyLGIueCxiLnkpfWZ1bmN0aW9uIG5mKGEsYil7dm9pZCAwIT09Yi54P2EudW5pZm9ybTNmKHRoaXMuYWRkcixiLngsYi55LGIueik6dm9pZCAwIT09Yi5yP2EudW5pZm9ybTNmKHRoaXMuYWRkcixiLnIsYi5nLGIuYik6YS51bmlmb3JtM2Z2KHRoaXMuYWRkcixiKX1mdW5jdGlvbiBvZihhLGIpe3ZvaWQgMD09PWIueD9hLnVuaWZvcm00ZnYodGhpcy5hZGRyLGIpOmEudW5pZm9ybTRmKHRoaXMuYWRkcixiLngsYi55LGIueixiLncpfWZ1bmN0aW9uIHBmKGEsYil7YS51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxiLmVsZW1lbnRzfHxiKX1mdW5jdGlvbiBxZihhLGIpe3ZvaWQgMD09PWIuZWxlbWVudHM/YS51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwKITEsYik6KEJlLnNldChiLmVsZW1lbnRzKSxhLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLEJlKSl9ZnVuY3Rpb24gcmYoYSxiKXt2b2lkIDA9PT1iLmVsZW1lbnRzP2EudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsYik6KENlLnNldChiLmVsZW1lbnRzKSxhLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLENlKSl9ZnVuY3Rpb24gc2YoYSxiLGMpe3ZhciBkPWMuYWxsb2NUZXh0dXJlVW5pdCgpO2EudW5pZm9ybTFpKHRoaXMuYWRkcixkKTtjLnNldFRleHR1cmUyRChifHxEZSxkKX1mdW5jdGlvbiB0ZihhLGIsYyl7dmFyIGQ9Yy5hbGxvY1RleHR1cmVVbml0KCk7YS51bmlmb3JtMWkodGhpcy5hZGRyLGQpO2Muc2V0VGV4dHVyZUN1YmUoYnx8RWUsZCl9ZnVuY3Rpb24gRmUoYSxiKXthLnVuaWZvcm0yaXYodGhpcy5hZGRyLGIpfWZ1bmN0aW9uIEdlKGEsYil7YS51bmlmb3JtM2l2KHRoaXMuYWRkcixiKX1mdW5jdGlvbiBIZShhLGIpe2EudW5pZm9ybTRpdih0aGlzLmFkZHIsCmIpfWZ1bmN0aW9uIHVmKGEpe3N3aXRjaChhKXtjYXNlIDUxMjY6cmV0dXJuIGtmO2Nhc2UgMzU2NjQ6cmV0dXJuIG1mO2Nhc2UgMzU2NjU6cmV0dXJuIG5mO2Nhc2UgMzU2NjY6cmV0dXJuIG9mO2Nhc2UgMzU2NzQ6cmV0dXJuIHBmO2Nhc2UgMzU2NzU6cmV0dXJuIHFmO2Nhc2UgMzU2NzY6cmV0dXJuIHJmO2Nhc2UgMzU2Nzg6cmV0dXJuIHNmO2Nhc2UgMzU2ODA6cmV0dXJuIHRmO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBsZjtjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIEZlO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gR2U7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBIZX19ZnVuY3Rpb24gdmYoYSxiKXthLnVuaWZvcm0xZnYodGhpcy5hZGRyLGIpfWZ1bmN0aW9uIHdmKGEsYil7YS51bmlmb3JtMWl2KHRoaXMuYWRkcixiKX1mdW5jdGlvbiB4ZihhLGIpe2EudW5pZm9ybTJmdih0aGlzLmFkZHIsRmIoYix0aGlzLnNpemUsMikpfWZ1bmN0aW9uIHlmKGEsCmIpe2EudW5pZm9ybTNmdih0aGlzLmFkZHIsRmIoYix0aGlzLnNpemUsMykpfWZ1bmN0aW9uIHpmKGEsYil7YS51bmlmb3JtNGZ2KHRoaXMuYWRkcixGYihiLHRoaXMuc2l6ZSw0KSl9ZnVuY3Rpb24gQWYoYSxiKXthLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLEZiKGIsdGhpcy5zaXplLDQpKX1mdW5jdGlvbiBCZihhLGIpe2EudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsRmIoYix0aGlzLnNpemUsOSkpfWZ1bmN0aW9uIENmKGEsYil7YS51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxGYihiLHRoaXMuc2l6ZSwxNikpfWZ1bmN0aW9uIERmKGEsYixjKXt2YXIgZD1iLmxlbmd0aCxlPXplKGMsZCk7YS51bmlmb3JtMWl2KHRoaXMuYWRkcixlKTtmb3IoYT0wO2EhPT1kOysrYSljLnNldFRleHR1cmUyRChiW2FdfHxEZSxlW2FdKX1mdW5jdGlvbiBFZihhLGIsYyl7dmFyIGQ9Yi5sZW5ndGgsZT16ZShjLGQpO2EudW5pZm9ybTFpdih0aGlzLmFkZHIsZSk7Zm9yKGE9CjA7YSE9PWQ7KythKWMuc2V0VGV4dHVyZUN1YmUoYlthXXx8RWUsZVthXSl9ZnVuY3Rpb24gRmYoYSl7c3dpdGNoKGEpe2Nhc2UgNTEyNjpyZXR1cm4gdmY7Y2FzZSAzNTY2NDpyZXR1cm4geGY7Y2FzZSAzNTY2NTpyZXR1cm4geWY7Y2FzZSAzNTY2NjpyZXR1cm4gemY7Y2FzZSAzNTY3NDpyZXR1cm4gQWY7Y2FzZSAzNTY3NTpyZXR1cm4gQmY7Y2FzZSAzNTY3NjpyZXR1cm4gQ2Y7Y2FzZSAzNTY3ODpyZXR1cm4gRGY7Y2FzZSAzNTY4MDpyZXR1cm4gRWY7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIHdmO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gRmU7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBHZTtjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIEhlfX1mdW5jdGlvbiBHZihhLGIsYyl7dGhpcy5pZD1hO3RoaXMuYWRkcj1jO3RoaXMuc2V0VmFsdWU9dWYoYi50eXBlKX1mdW5jdGlvbiBIZihhLGIsYyl7dGhpcy5pZD1hO3RoaXMuYWRkcj1jO3RoaXMuc2l6ZT0KYi5zaXplO3RoaXMuc2V0VmFsdWU9RmYoYi50eXBlKX1mdW5jdGlvbiBJZShhKXt0aGlzLmlkPWE7dGhpcy5zZXE9W107dGhpcy5tYXA9e319ZnVuY3Rpb24gZmIoYSxiLGMpe3RoaXMuc2VxPVtdO3RoaXMubWFwPXt9O3RoaXMucmVuZGVyZXI9YztjPWEuZ2V0UHJvZ3JhbVBhcmFtZXRlcihiLGEuQUNUSVZFX1VOSUZPUk1TKTtmb3IodmFyIGQ9MDtkPGM7KytkKXt2YXIgZT1hLmdldEFjdGl2ZVVuaWZvcm0oYixkKSxmPWEuZ2V0VW5pZm9ybUxvY2F0aW9uKGIsZS5uYW1lKSxnPXRoaXMsaD1lLm5hbWUsaz1oLmxlbmd0aDtmb3IoUWQubGFzdEluZGV4PTA7Oyl7dmFyIG09UWQuZXhlYyhoKSx1PVFkLmxhc3RJbmRleCxxPW1bMV0sbj1tWzNdOyJdIj09PW1bMl0mJihxfD0wKTtpZih2b2lkIDA9PT1ufHwiWyI9PT1uJiZ1KzI9PT1rKXtoPWc7ZT12b2lkIDA9PT1uP25ldyBHZihxLGUsZik6bmV3IEhmKHEsZSxmKTtoLnNlcS5wdXNoKGUpO2gubWFwW2UuaWRdPWU7YnJlYWt9ZWxzZSBuPQpnLm1hcFtxXSx2b2lkIDA9PT1uJiYobj1uZXcgSWUocSkscT1nLGc9bixxLnNlcS5wdXNoKGcpLHEubWFwW2cuaWRdPWcpLGc9bn19fWZ1bmN0aW9uIEgoYSxiLGMpe3JldHVybiB2b2lkIDA9PT1iJiZ2b2lkIDA9PT1jP3RoaXMuc2V0KGEpOnRoaXMuc2V0UkdCKGEsYixjKX1mdW5jdGlvbiBpZChhLGIpe3RoaXMubWluPXZvaWQgMCE9PWE/YTpuZXcgRChJbmZpbml0eSxJbmZpbml0eSk7dGhpcy5tYXg9dm9pZCAwIT09Yj9iOm5ldyBEKC1JbmZpbml0eSwtSW5maW5pdHkpfWZ1bmN0aW9uIElmKGEsYil7dmFyIGMsZCxlLGYsZyxoLGssbSx1LHEsbj1hLmNvbnRleHQscj1hLnN0YXRlLGwsdCx5LHgsdixHO3RoaXMucmVuZGVyPWZ1bmN0aW9uKHcsTyxTKXtpZigwIT09Yi5sZW5ndGgpe3c9bmV3IHA7dmFyIEU9Uy53L1MueixGPS41KlMueixhYT0uNSpTLncsUj0xNi9TLncsY2E9bmV3IEQoUipFLFIpLGxhPW5ldyBwKDEsMSwwKSxnYj1uZXcgRCgxLDEpLEdiPW5ldyBpZDtHYi5taW4uc2V0KFMueCwKUy55KTtHYi5tYXguc2V0KFMueCsoUy56LTE2KSxTLnkrKFMudy0xNikpO2lmKHZvaWQgMD09PXgpe3ZhciBSPW5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLDAsMCwxLC0xLDEsMCwxLDEsMSwxLC0xLDEsMCwxXSksamE9bmV3IFVpbnQxNkFycmF5KFswLDEsMiwwLDIsM10pO2w9bi5jcmVhdGVCdWZmZXIoKTt0PW4uY3JlYXRlQnVmZmVyKCk7bi5iaW5kQnVmZmVyKG4uQVJSQVlfQlVGRkVSLGwpO24uYnVmZmVyRGF0YShuLkFSUkFZX0JVRkZFUixSLG4uU1RBVElDX0RSQVcpO24uYmluZEJ1ZmZlcihuLkVMRU1FTlRfQVJSQVlfQlVGRkVSLHQpO24uYnVmZmVyRGF0YShuLkVMRU1FTlRfQVJSQVlfQlVGRkVSLGphLG4uU1RBVElDX0RSQVcpO3Y9bi5jcmVhdGVUZXh0dXJlKCk7Rz1uLmNyZWF0ZVRleHR1cmUoKTtyLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCx2KTtuLnRleEltYWdlMkQobi5URVhUVVJFXzJELDAsbi5SR0IsMTYsMTYsMCxuLlJHQixuLlVOU0lHTkVEX0JZVEUsbnVsbCk7Cm4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfUyxuLkNMQU1QX1RPX0VER0UpO24udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfVCxuLkNMQU1QX1RPX0VER0UpO24udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01BR19GSUxURVIsbi5ORUFSRVNUKTtuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTkVBUkVTVCk7ci5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsRyk7bi50ZXhJbWFnZTJEKG4uVEVYVFVSRV8yRCwwLG4uUkdCQSwxNiwxNiwwLG4uUkdCQSxuLlVOU0lHTkVEX0JZVEUsbnVsbCk7bi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9TLG4uQ0xBTVBfVE9fRURHRSk7bi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9ULG4uQ0xBTVBfVE9fRURHRSk7bi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCwKbi5URVhUVVJFX01BR19GSUxURVIsbi5ORUFSRVNUKTtuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTkVBUkVTVCk7dmFyIFI9eT17dmVydGV4U2hhZGVyOiJ1bmlmb3JtIGxvd3AgaW50IHJlbmRlclR5cGU7XG51bmlmb3JtIHZlYzMgc2NyZWVuUG9zaXRpb247XG51bmlmb3JtIHZlYzIgc2NhbGU7XG51bmlmb3JtIGZsb2F0IHJvdGF0aW9uO1xudW5pZm9ybSBzYW1wbGVyMkQgb2NjbHVzaW9uTWFwO1xuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMiB1djtcbnZhcnlpbmcgdmVjMiB2VVY7XG52YXJ5aW5nIGZsb2F0IHZWaXNpYmlsaXR5O1xudm9pZCBtYWluKCkge1xudlVWID0gdXY7XG52ZWMyIHBvcyA9IHBvc2l0aW9uO1xuaWYgKCByZW5kZXJUeXBlID09IDIgKSB7XG52ZWM0IHZpc2liaWxpdHkgPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC4xLCAwLjEgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC41LCAwLjEgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC45LCAwLjEgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC45LCAwLjUgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC45LCAwLjkgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC41LCAwLjkgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC4xLCAwLjkgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC4xLCAwLjUgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC41LCAwLjUgKSApO1xudlZpc2liaWxpdHkgPSAgICAgICAgdmlzaWJpbGl0eS5yIC8gOS4wO1xudlZpc2liaWxpdHkgKj0gMS4wIC0gdmlzaWJpbGl0eS5nIC8gOS4wO1xudlZpc2liaWxpdHkgKj0gICAgICAgdmlzaWJpbGl0eS5iIC8gOS4wO1xudlZpc2liaWxpdHkgKj0gMS4wIC0gdmlzaWJpbGl0eS5hIC8gOS4wO1xucG9zLnggPSBjb3MoIHJvdGF0aW9uICkgKiBwb3NpdGlvbi54IC0gc2luKCByb3RhdGlvbiApICogcG9zaXRpb24ueTtcbnBvcy55ID0gc2luKCByb3RhdGlvbiApICogcG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIHBvc2l0aW9uLnk7XG59XG5nbF9Qb3NpdGlvbiA9IHZlYzQoICggcG9zICogc2NhbGUgKyBzY3JlZW5Qb3NpdGlvbi54eSApLnh5LCBzY3JlZW5Qb3NpdGlvbi56LCAxLjAgKTtcbn0iLApmcmFnbWVudFNoYWRlcjoidW5pZm9ybSBsb3dwIGludCByZW5kZXJUeXBlO1xudW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSB2ZWMzIGNvbG9yO1xudmFyeWluZyB2ZWMyIHZVVjtcbnZhcnlpbmcgZmxvYXQgdlZpc2liaWxpdHk7XG52b2lkIG1haW4oKSB7XG5pZiAoIHJlbmRlclR5cGUgPT0gMCApIHtcbmdsX0ZyYWdDb2xvciA9IHZlYzQoIDEuMCwgMC4wLCAxLjAsIDAuMCApO1xufSBlbHNlIGlmICggcmVuZGVyVHlwZSA9PSAxICkge1xuZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCBtYXAsIHZVViApO1xufSBlbHNlIHtcbnZlYzQgdGV4dHVyZSA9IHRleHR1cmUyRCggbWFwLCB2VVYgKTtcbnRleHR1cmUuYSAqPSBvcGFjaXR5ICogdlZpc2liaWxpdHk7XG5nbF9GcmFnQ29sb3IgPSB0ZXh0dXJlO1xuZ2xfRnJhZ0NvbG9yLnJnYiAqPSBjb2xvcjtcbn1cbn0ifSxqYT1uLmNyZWF0ZVByb2dyYW0oKSxQPW4uY3JlYXRlU2hhZGVyKG4uRlJBR01FTlRfU0hBREVSKSwKSz1uLmNyZWF0ZVNoYWRlcihuLlZFUlRFWF9TSEFERVIpLFc9InByZWNpc2lvbiAiK2EuZ2V0UHJlY2lzaW9uKCkrIiBmbG9hdDtcbiI7bi5zaGFkZXJTb3VyY2UoUCxXK1IuZnJhZ21lbnRTaGFkZXIpO24uc2hhZGVyU291cmNlKEssVytSLnZlcnRleFNoYWRlcik7bi5jb21waWxlU2hhZGVyKFApO24uY29tcGlsZVNoYWRlcihLKTtuLmF0dGFjaFNoYWRlcihqYSxQKTtuLmF0dGFjaFNoYWRlcihqYSxLKTtuLmxpbmtQcm9ncmFtKGphKTt4PWphO3U9bi5nZXRBdHRyaWJMb2NhdGlvbih4LCJwb3NpdGlvbiIpO3E9bi5nZXRBdHRyaWJMb2NhdGlvbih4LCJ1diIpO2M9bi5nZXRVbmlmb3JtTG9jYXRpb24oeCwicmVuZGVyVHlwZSIpO2Q9bi5nZXRVbmlmb3JtTG9jYXRpb24oeCwibWFwIik7ZT1uLmdldFVuaWZvcm1Mb2NhdGlvbih4LCJvY2NsdXNpb25NYXAiKTtmPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKHgsIm9wYWNpdHkiKTtnPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKHgsImNvbG9yIik7Cmg9bi5nZXRVbmlmb3JtTG9jYXRpb24oeCwic2NhbGUiKTtrPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKHgsInJvdGF0aW9uIik7bT1uLmdldFVuaWZvcm1Mb2NhdGlvbih4LCJzY3JlZW5Qb3NpdGlvbiIpfW4udXNlUHJvZ3JhbSh4KTtyLmluaXRBdHRyaWJ1dGVzKCk7ci5lbmFibGVBdHRyaWJ1dGUodSk7ci5lbmFibGVBdHRyaWJ1dGUocSk7ci5kaXNhYmxlVW51c2VkQXR0cmlidXRlcygpO24udW5pZm9ybTFpKGUsMCk7bi51bmlmb3JtMWkoZCwxKTtuLmJpbmRCdWZmZXIobi5BUlJBWV9CVUZGRVIsbCk7bi52ZXJ0ZXhBdHRyaWJQb2ludGVyKHUsMixuLkZMT0FULCExLDE2LDApO24udmVydGV4QXR0cmliUG9pbnRlcihxLDIsbi5GTE9BVCwhMSwxNiw4KTtuLmJpbmRCdWZmZXIobi5FTEVNRU5UX0FSUkFZX0JVRkZFUix0KTtyLmRpc2FibGUobi5DVUxMX0ZBQ0UpO3IuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCExKTtqYT0wO2ZvcihQPWIubGVuZ3RoO2phPFA7amErKylpZihSPTE2L1MudywKY2Euc2V0KFIqRSxSKSxLPWJbamFdLHcuc2V0KEsubWF0cml4V29ybGQuZWxlbWVudHNbMTJdLEsubWF0cml4V29ybGQuZWxlbWVudHNbMTNdLEsubWF0cml4V29ybGQuZWxlbWVudHNbMTRdKSx3LmFwcGx5TWF0cml4NChPLm1hdHJpeFdvcmxkSW52ZXJzZSksdy5hcHBseU1hdHJpeDQoTy5wcm9qZWN0aW9uTWF0cml4KSxsYS5jb3B5KHcpLGdiLng9Uy54K2xhLngqRitGLTgsZ2IueT1TLnkrbGEueSphYSthYS04LCEwPT09R2IuY29udGFpbnNQb2ludChnYikpe3IuYWN0aXZlVGV4dHVyZShuLlRFWFRVUkUwKTtyLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCxudWxsKTtyLmFjdGl2ZVRleHR1cmUobi5URVhUVVJFMSk7ci5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsdik7bi5jb3B5VGV4SW1hZ2UyRChuLlRFWFRVUkVfMkQsMCxuLlJHQixnYi54LGdiLnksMTYsMTYsMCk7bi51bmlmb3JtMWkoYywwKTtuLnVuaWZvcm0yZihoLGNhLngsY2EueSk7bi51bmlmb3JtM2YobSxsYS54LGxhLnksCmxhLnopO3IuZGlzYWJsZShuLkJMRU5EKTtyLmVuYWJsZShuLkRFUFRIX1RFU1QpO24uZHJhd0VsZW1lbnRzKG4uVFJJQU5HTEVTLDYsbi5VTlNJR05FRF9TSE9SVCwwKTtyLmFjdGl2ZVRleHR1cmUobi5URVhUVVJFMCk7ci5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsRyk7bi5jb3B5VGV4SW1hZ2UyRChuLlRFWFRVUkVfMkQsMCxuLlJHQkEsZ2IueCxnYi55LDE2LDE2LDApO24udW5pZm9ybTFpKGMsMSk7ci5kaXNhYmxlKG4uREVQVEhfVEVTVCk7ci5hY3RpdmVUZXh0dXJlKG4uVEVYVFVSRTEpO3IuYmluZFRleHR1cmUobi5URVhUVVJFXzJELHYpO24uZHJhd0VsZW1lbnRzKG4uVFJJQU5HTEVTLDYsbi5VTlNJR05FRF9TSE9SVCwwKTtLLnBvc2l0aW9uU2NyZWVuLmNvcHkobGEpO0suY3VzdG9tVXBkYXRlQ2FsbGJhY2s/Sy5jdXN0b21VcGRhdGVDYWxsYmFjayhLKTpLLnVwZGF0ZUxlbnNGbGFyZXMoKTtuLnVuaWZvcm0xaShjLDIpO3IuZW5hYmxlKG4uQkxFTkQpO2Zvcih2YXIgVz0KMCxiYT1LLmxlbnNGbGFyZXMubGVuZ3RoO1c8YmE7VysrKXt2YXIgVD1LLmxlbnNGbGFyZXNbV107LjAwMTxULm9wYWNpdHkmJi4wMDE8VC5zY2FsZSYmKGxhLng9VC54LGxhLnk9VC55LGxhLno9VC56LFI9VC5zaXplKlQuc2NhbGUvUy53LGNhLng9UipFLGNhLnk9UixuLnVuaWZvcm0zZihtLGxhLngsbGEueSxsYS56KSxuLnVuaWZvcm0yZihoLGNhLngsY2EueSksbi51bmlmb3JtMWYoayxULnJvdGF0aW9uKSxuLnVuaWZvcm0xZihmLFQub3BhY2l0eSksbi51bmlmb3JtM2YoZyxULmNvbG9yLnIsVC5jb2xvci5nLFQuY29sb3IuYiksci5zZXRCbGVuZGluZyhULmJsZW5kaW5nLFQuYmxlbmRFcXVhdGlvbixULmJsZW5kU3JjLFQuYmxlbmREc3QpLGEuc2V0VGV4dHVyZTJEKFQudGV4dHVyZSwxKSxuLmRyYXdFbGVtZW50cyhuLlRSSUFOR0xFUyw2LG4uVU5TSUdORURfU0hPUlQsMCkpfX1yLmVuYWJsZShuLkNVTExfRkFDRSk7ci5lbmFibGUobi5ERVBUSF9URVNUKTtyLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayghMCk7CmEucmVzZXRHTFN0YXRlKCl9fX1mdW5jdGlvbiBKZihhLGIpe3ZhciBjLGQsZSxmLGcsaCxrLG0sdSxxLG4scixsLHQseSx4LHY7ZnVuY3Rpb24gRyhhLGIpe3JldHVybiBhLnJlbmRlck9yZGVyIT09Yi5yZW5kZXJPcmRlcj9hLnJlbmRlck9yZGVyLWIucmVuZGVyT3JkZXI6YS56IT09Yi56P2Iuei1hLno6Yi5pZC1hLmlkfXZhciB3PWEuY29udGV4dCxPPWEuc3RhdGUsUyxFLEYsYWEsUj1uZXcgcCxjYT1uZXcgcWEsbGE9bmV3IHA7dGhpcy5yZW5kZXI9ZnVuY3Rpb24ocCxHYil7aWYoMCE9PWIubGVuZ3RoKXtpZih2b2lkIDA9PT1GKXt2YXIgamE9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsLjUsLS41LDEsMCwuNSwuNSwxLDEsLS41LC41LDAsMV0pLFA9bmV3IFVpbnQxNkFycmF5KFswLDEsMiwwLDIsM10pO1M9dy5jcmVhdGVCdWZmZXIoKTtFPXcuY3JlYXRlQnVmZmVyKCk7dy5iaW5kQnVmZmVyKHcuQVJSQVlfQlVGRkVSLFMpO3cuYnVmZmVyRGF0YSh3LkFSUkFZX0JVRkZFUiwKamEsdy5TVEFUSUNfRFJBVyk7dy5iaW5kQnVmZmVyKHcuRUxFTUVOVF9BUlJBWV9CVUZGRVIsRSk7dy5idWZmZXJEYXRhKHcuRUxFTUVOVF9BUlJBWV9CVUZGRVIsUCx3LlNUQVRJQ19EUkFXKTt2YXIgamE9dy5jcmVhdGVQcm9ncmFtKCksUD13LmNyZWF0ZVNoYWRlcih3LlZFUlRFWF9TSEFERVIpLEs9dy5jcmVhdGVTaGFkZXIody5GUkFHTUVOVF9TSEFERVIpO3cuc2hhZGVyU291cmNlKFAsWyJwcmVjaXNpb24gIithLmdldFByZWNpc2lvbigpKyIgZmxvYXQ7IiwidW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDtcbnVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4O1xudW5pZm9ybSBmbG9hdCByb3RhdGlvbjtcbnVuaWZvcm0gdmVjMiBzY2FsZTtcbnVuaWZvcm0gdmVjMiB1dk9mZnNldDtcbnVuaWZvcm0gdmVjMiB1dlNjYWxlO1xuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMiB1djtcbnZhcnlpbmcgdmVjMiB2VVY7XG52b2lkIG1haW4oKSB7XG52VVYgPSB1dk9mZnNldCArIHV2ICogdXZTY2FsZTtcbnZlYzIgYWxpZ25lZFBvc2l0aW9uID0gcG9zaXRpb24gKiBzY2FsZTtcbnZlYzIgcm90YXRlZFBvc2l0aW9uO1xucm90YXRlZFBvc2l0aW9uLnggPSBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xucm90YXRlZFBvc2l0aW9uLnkgPSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xudmVjNCBmaW5hbFBvc2l0aW9uO1xuZmluYWxQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuZmluYWxQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247XG5maW5hbFBvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIGZpbmFsUG9zaXRpb247XG5nbF9Qb3NpdGlvbiA9IGZpbmFsUG9zaXRpb247XG59Il0uam9pbigiXG4iKSk7Cncuc2hhZGVyU291cmNlKEssWyJwcmVjaXNpb24gIithLmdldFByZWNpc2lvbigpKyIgZmxvYXQ7IiwidW5pZm9ybSB2ZWMzIGNvbG9yO1xudW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBpbnQgZm9nVHlwZTtcbnVuaWZvcm0gdmVjMyBmb2dDb2xvcjtcbnVuaWZvcm0gZmxvYXQgZm9nRGVuc2l0eTtcbnVuaWZvcm0gZmxvYXQgZm9nTmVhcjtcbnVuaWZvcm0gZmxvYXQgZm9nRmFyO1xudW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7XG52YXJ5aW5nIHZlYzIgdlVWO1xudm9pZCBtYWluKCkge1xudmVjNCB0ZXh0dXJlID0gdGV4dHVyZTJEKCBtYXAsIHZVViApO1xuaWYgKCB0ZXh0dXJlLmEgPCBhbHBoYVRlc3QgKSBkaXNjYXJkO1xuZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IgKiB0ZXh0dXJlLnh5eiwgdGV4dHVyZS5hICogb3BhY2l0eSApO1xuaWYgKCBmb2dUeXBlID4gMCApIHtcbmZsb2F0IGRlcHRoID0gZ2xfRnJhZ0Nvb3JkLnogLyBnbF9GcmFnQ29vcmQudztcbmZsb2F0IGZvZ0ZhY3RvciA9IDAuMDtcbmlmICggZm9nVHlwZSA9PSAxICkge1xuZm9nRmFjdG9yID0gc21vb3Roc3RlcCggZm9nTmVhciwgZm9nRmFyLCBkZXB0aCApO1xufSBlbHNlIHtcbmNvbnN0IGZsb2F0IExPRzIgPSAxLjQ0MjY5NTtcbmZvZ0ZhY3RvciA9IGV4cDIoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiBkZXB0aCAqIGRlcHRoICogTE9HMiApO1xuZm9nRmFjdG9yID0gMS4wIC0gY2xhbXAoIGZvZ0ZhY3RvciwgMC4wLCAxLjAgKTtcbn1cbmdsX0ZyYWdDb2xvciA9IG1peCggZ2xfRnJhZ0NvbG9yLCB2ZWM0KCBmb2dDb2xvciwgZ2xfRnJhZ0NvbG9yLncgKSwgZm9nRmFjdG9yICk7XG59XG59Il0uam9pbigiXG4iKSk7CncuY29tcGlsZVNoYWRlcihQKTt3LmNvbXBpbGVTaGFkZXIoSyk7dy5hdHRhY2hTaGFkZXIoamEsUCk7dy5hdHRhY2hTaGFkZXIoamEsSyk7dy5saW5rUHJvZ3JhbShqYSk7Rj1qYTt4PXcuZ2V0QXR0cmliTG9jYXRpb24oRiwicG9zaXRpb24iKTt2PXcuZ2V0QXR0cmliTG9jYXRpb24oRiwidXYiKTtjPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsInV2T2Zmc2V0Iik7ZD13LmdldFVuaWZvcm1Mb2NhdGlvbihGLCJ1dlNjYWxlIik7ZT13LmdldFVuaWZvcm1Mb2NhdGlvbihGLCJyb3RhdGlvbiIpO2Y9dy5nZXRVbmlmb3JtTG9jYXRpb24oRiwic2NhbGUiKTtnPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImNvbG9yIik7aD13LmdldFVuaWZvcm1Mb2NhdGlvbihGLCJtYXAiKTtrPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsIm9wYWNpdHkiKTttPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsIm1vZGVsVmlld01hdHJpeCIpO3U9dy5nZXRVbmlmb3JtTG9jYXRpb24oRiwicHJvamVjdGlvbk1hdHJpeCIpOwpxPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImZvZ1R5cGUiKTtuPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImZvZ0RlbnNpdHkiKTtyPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImZvZ05lYXIiKTtsPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImZvZ0ZhciIpO3Q9dy5nZXRVbmlmb3JtTG9jYXRpb24oRiwiZm9nQ29sb3IiKTt5PXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImFscGhhVGVzdCIpO2phPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImNhbnZhcyIpO2phLndpZHRoPTg7amEuaGVpZ2h0PTg7UD1qYS5nZXRDb250ZXh0KCIyZCIpO1AuZmlsbFN0eWxlPSJ3aGl0ZSI7UC5maWxsUmVjdCgwLDAsOCw4KTthYT1uZXcgWChqYSk7YWEubmVlZHNVcGRhdGU9ITB9dy51c2VQcm9ncmFtKEYpO08uaW5pdEF0dHJpYnV0ZXMoKTtPLmVuYWJsZUF0dHJpYnV0ZSh4KTtPLmVuYWJsZUF0dHJpYnV0ZSh2KTtPLmRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzKCk7Ck8uZGlzYWJsZSh3LkNVTExfRkFDRSk7Ty5lbmFibGUody5CTEVORCk7dy5iaW5kQnVmZmVyKHcuQVJSQVlfQlVGRkVSLFMpO3cudmVydGV4QXR0cmliUG9pbnRlcih4LDIsdy5GTE9BVCwhMSwxNiwwKTt3LnZlcnRleEF0dHJpYlBvaW50ZXIodiwyLHcuRkxPQVQsITEsMTYsOCk7dy5iaW5kQnVmZmVyKHcuRUxFTUVOVF9BUlJBWV9CVUZGRVIsRSk7dy51bmlmb3JtTWF0cml4NGZ2KHUsITEsR2IucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyk7Ty5hY3RpdmVUZXh0dXJlKHcuVEVYVFVSRTApO3cudW5pZm9ybTFpKGgsMCk7UD1qYT0wOyhLPXAuZm9nKT8ody51bmlmb3JtM2YodCxLLmNvbG9yLnIsSy5jb2xvci5nLEsuY29sb3IuYiksSy5pc0ZvZz8ody51bmlmb3JtMWYocixLLm5lYXIpLHcudW5pZm9ybTFmKGwsSy5mYXIpLHcudW5pZm9ybTFpKHEsMSksUD1qYT0xKTpLLmlzRm9nRXhwMiYmKHcudW5pZm9ybTFmKG4sSy5kZW5zaXR5KSx3LnVuaWZvcm0xaShxLDIpLFA9amE9MikpOgoody51bmlmb3JtMWkocSwwKSxQPWphPTApO2Zvcih2YXIgSz0wLFc9Yi5sZW5ndGg7SzxXO0srKyl7dmFyIGJhPWJbS107YmEubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoR2IubWF0cml4V29ybGRJbnZlcnNlLGJhLm1hdHJpeFdvcmxkKTtiYS56PS1iYS5tb2RlbFZpZXdNYXRyaXguZWxlbWVudHNbMTRdfWIuc29ydChHKTtmb3IodmFyIFQ9W10sSz0wLFc9Yi5sZW5ndGg7SzxXO0srKyl7dmFyIGJhPWJbS10sUT1iYS5tYXRlcmlhbDshMSE9PVEudmlzaWJsZSYmKHcudW5pZm9ybTFmKHksUS5hbHBoYVRlc3QpLHcudW5pZm9ybU1hdHJpeDRmdihtLCExLGJhLm1vZGVsVmlld01hdHJpeC5lbGVtZW50cyksYmEubWF0cml4V29ybGQuZGVjb21wb3NlKFIsY2EsbGEpLFRbMF09bGEueCxUWzFdPWxhLnksYmE9MCxwLmZvZyYmUS5mb2cmJihiYT1QKSxqYSE9PWJhJiYody51bmlmb3JtMWkocSxiYSksamE9YmEpLG51bGwhPT1RLm1hcD8ody51bmlmb3JtMmYoYyxRLm1hcC5vZmZzZXQueCwKUS5tYXAub2Zmc2V0LnkpLHcudW5pZm9ybTJmKGQsUS5tYXAucmVwZWF0LngsUS5tYXAucmVwZWF0LnkpKToody51bmlmb3JtMmYoYywwLDApLHcudW5pZm9ybTJmKGQsMSwxKSksdy51bmlmb3JtMWYoayxRLm9wYWNpdHkpLHcudW5pZm9ybTNmKGcsUS5jb2xvci5yLFEuY29sb3IuZyxRLmNvbG9yLmIpLHcudW5pZm9ybTFmKGUsUS5yb3RhdGlvbiksdy51bmlmb3JtMmZ2KGYsVCksTy5zZXRCbGVuZGluZyhRLmJsZW5kaW5nLFEuYmxlbmRFcXVhdGlvbixRLmJsZW5kU3JjLFEuYmxlbmREc3QpLE8uYnVmZmVycy5kZXB0aC5zZXRUZXN0KFEuZGVwdGhUZXN0KSxPLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayhRLmRlcHRoV3JpdGUpLFEubWFwP2Euc2V0VGV4dHVyZTJEKFEubWFwLDApOmEuc2V0VGV4dHVyZTJEKGFhLDApLHcuZHJhd0VsZW1lbnRzKHcuVFJJQU5HTEVTLDYsdy5VTlNJR05FRF9TSE9SVCwwKSl9Ty5lbmFibGUody5DVUxMX0ZBQ0UpO2EucmVzZXRHTFN0YXRlKCl9fX1mdW5jdGlvbiBaKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsCiJpZCIse3ZhbHVlOktmKyt9KTt0aGlzLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKTt0aGlzLm5hbWU9IiI7dGhpcy50eXBlPSJNYXRlcmlhbCI7dGhpcy5saWdodHM9dGhpcy5mb2c9ITA7dGhpcy5ibGVuZGluZz0xO3RoaXMuc2lkZT0wO3RoaXMuc2hhZGluZz0yO3RoaXMudmVydGV4Q29sb3JzPTA7dGhpcy5vcGFjaXR5PTE7dGhpcy50cmFuc3BhcmVudD0hMTt0aGlzLmJsZW5kU3JjPTIwNDt0aGlzLmJsZW5kRHN0PTIwNTt0aGlzLmJsZW5kRXF1YXRpb249MTAwO3RoaXMuYmxlbmRFcXVhdGlvbkFscGhhPXRoaXMuYmxlbmREc3RBbHBoYT10aGlzLmJsZW5kU3JjQWxwaGE9bnVsbDt0aGlzLmRlcHRoRnVuYz0zO3RoaXMuZGVwdGhXcml0ZT10aGlzLmRlcHRoVGVzdD0hMDt0aGlzLmNsaXBwaW5nUGxhbmVzPW51bGw7dGhpcy5jbGlwU2hhZG93cz10aGlzLmNsaXBJbnRlcnNlY3Rpb249ITE7dGhpcy5jb2xvcldyaXRlPSEwO3RoaXMucHJlY2lzaW9uPW51bGw7dGhpcy5wb2x5Z29uT2Zmc2V0PQohMTt0aGlzLnBvbHlnb25PZmZzZXRVbml0cz10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9MDt0aGlzLmRpdGhlcmluZz0hMTt0aGlzLmFscGhhVGVzdD0wO3RoaXMucHJlbXVsdGlwbGllZEFscGhhPSExO3RoaXMub3ZlcmRyYXc9MDt0aGlzLm5lZWRzVXBkYXRlPXRoaXMudmlzaWJsZT0hMH1mdW5jdGlvbiBFYShhKXtaLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTaGFkZXJNYXRlcmlhbCI7dGhpcy5kZWZpbmVzPXt9O3RoaXMudW5pZm9ybXM9e307dGhpcy52ZXJ0ZXhTaGFkZXI9InZvaWQgbWFpbigpIHtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSI7dGhpcy5mcmFnbWVudFNoYWRlcj0idm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTtcbn0iO3RoaXMubGluZXdpZHRoPTE7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9CjE7dGhpcy5tb3JwaE5vcm1hbHM9dGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz10aGlzLmNsaXBwaW5nPXRoaXMubGlnaHRzPXRoaXMuZm9nPSExO3RoaXMuZXh0ZW5zaW9ucz17ZGVyaXZhdGl2ZXM6ITEsZnJhZ0RlcHRoOiExLGRyYXdCdWZmZXJzOiExLHNoYWRlclRleHR1cmVMT0Q6ITF9O3RoaXMuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcz17Y29sb3I6WzEsMSwxXSx1djpbMCwwXSx1djI6WzAsMF19O3RoaXMuaW5kZXgwQXR0cmlidXRlTmFtZT12b2lkIDA7dm9pZCAwIT09YSYmKHZvaWQgMCE9PWEuYXR0cmlidXRlcyYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXMoYSkpfWZ1bmN0aW9uICRhKGEpe1ouY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ik1lc2hEZXB0aE1hdGVyaWFsIjt0aGlzLmRlcHRoUGFja2luZz0KMzIwMDt0aGlzLm1vcnBoVGFyZ2V0cz10aGlzLnNraW5uaW5nPSExO3RoaXMuZGlzcGxhY2VtZW50TWFwPXRoaXMuYWxwaGFNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTE7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPTA7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLmxpZ2h0cz10aGlzLmZvZz0hMTt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiBUYShhLGIpe3RoaXMubWluPXZvaWQgMCE9PWE/YTpuZXcgcChJbmZpbml0eSxJbmZpbml0eSxJbmZpbml0eSk7dGhpcy5tYXg9dm9pZCAwIT09Yj9iOm5ldyBwKC1JbmZpbml0eSwtSW5maW5pdHksLUluZmluaXR5KX1mdW5jdGlvbiBHYShhLGIpe3RoaXMuY2VudGVyPXZvaWQgMCE9PWE/YTpuZXcgcDt0aGlzLnJhZGl1cz12b2lkIDAhPT1iP2I6MH1mdW5jdGlvbiBLYSgpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMSwwLDAsMCwxXTswPGFyZ3VtZW50cy5sZW5ndGgmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9CmZ1bmN0aW9uIHdhKGEsYil7dGhpcy5ub3JtYWw9dm9pZCAwIT09YT9hOm5ldyBwKDEsMCwwKTt0aGlzLmNvbnN0YW50PXZvaWQgMCE9PWI/YjowfWZ1bmN0aW9uIGpkKGEsYixjLGQsZSxmKXt0aGlzLnBsYW5lcz1bdm9pZCAwIT09YT9hOm5ldyB3YSx2b2lkIDAhPT1iP2I6bmV3IHdhLHZvaWQgMCE9PWM/YzpuZXcgd2Esdm9pZCAwIT09ZD9kOm5ldyB3YSx2b2lkIDAhPT1lP2U6bmV3IHdhLHZvaWQgMCE9PWY/ZjpuZXcgd2FdfWZ1bmN0aW9uIEplKGEsYixjLGQpe2Z1bmN0aW9uIGUoYixjLGQsZSl7dmFyIGY9Yi5nZW9tZXRyeSxnO2c9dDt2YXIgaD1iLmN1c3RvbURlcHRoTWF0ZXJpYWw7ZCYmKGc9eSxoPWIuY3VzdG9tRGlzdGFuY2VNYXRlcmlhbCk7aD9nPWg6KGg9ITEsYy5tb3JwaFRhcmdldHMmJihmJiZmLmlzQnVmZmVyR2VvbWV0cnk/aD1mLm1vcnBoQXR0cmlidXRlcyYmZi5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24mJjA8Zi5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOgpmJiZmLmlzR2VvbWV0cnkmJihoPWYubW9ycGhUYXJnZXRzJiYwPGYubW9ycGhUYXJnZXRzLmxlbmd0aCkpLGIuaXNTa2lubmVkTWVzaCYmITE9PT1jLnNraW5uaW5nJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiBUSFJFRS5Ta2lubmVkTWVzaCB3aXRoIG1hdGVyaWFsLnNraW5uaW5nIHNldCB0byBmYWxzZToiLGIpLGI9Yi5pc1NraW5uZWRNZXNoJiZjLnNraW5uaW5nLGY9MCxoJiYoZnw9MSksYiYmKGZ8PTIpLGc9Z1tmXSk7YS5sb2NhbENsaXBwaW5nRW5hYmxlZCYmITA9PT1jLmNsaXBTaGFkb3dzJiYwIT09Yy5jbGlwcGluZ1BsYW5lcy5sZW5ndGgmJihmPWcudXVpZCxoPWMudXVpZCxiPXhbZl0sdm9pZCAwPT09YiYmKGI9e30seFtmXT1iKSxmPWJbaF0sdm9pZCAwPT09ZiYmKGY9Zy5jbG9uZSgpLGJbaF09ZiksZz1mKTtnLnZpc2libGU9Yy52aXNpYmxlO2cud2lyZWZyYW1lPWMud2lyZWZyYW1lO2g9Yy5zaWRlO1IucmVuZGVyU2luZ2xlU2lkZWQmJjI9PWgmJgooaD0wKTtSLnJlbmRlclJldmVyc2VTaWRlZCYmKDA9PT1oP2g9MToxPT09aCYmKGg9MCkpO2cuc2lkZT1oO2cuY2xpcFNoYWRvd3M9Yy5jbGlwU2hhZG93cztnLmNsaXBwaW5nUGxhbmVzPWMuY2xpcHBpbmdQbGFuZXM7Zy53aXJlZnJhbWVMaW5ld2lkdGg9Yy53aXJlZnJhbWVMaW5ld2lkdGg7Zy5saW5ld2lkdGg9Yy5saW5ld2lkdGg7ZCYmdm9pZCAwIT09Zy51bmlmb3Jtcy5saWdodFBvcyYmZy51bmlmb3Jtcy5saWdodFBvcy52YWx1ZS5jb3B5KGUpO3JldHVybiBnfWZ1bmN0aW9uIGYoYixkLGcsaCl7aWYoITEhPT1iLnZpc2libGUpe2lmKGIubGF5ZXJzLnRlc3QoZC5sYXllcnMpJiYoYi5pc01lc2h8fGIuaXNMaW5lfHxiLmlzUG9pbnRzKSYmYi5jYXN0U2hhZG93JiYoIWIuZnJ1c3R1bUN1bGxlZHx8ay5pbnRlcnNlY3RzT2JqZWN0KGIpKSl7Yi5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhnLm1hdHJpeFdvcmxkSW52ZXJzZSxiLm1hdHJpeFdvcmxkKTt2YXIgbT0KYy51cGRhdGUoYiksbj1iLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHZhciB1PW0uZ3JvdXBzLHE9MCxyPXUubGVuZ3RoO3E8cjtxKyspe3ZhciB4PXVbcV0sdj1uW3gubWF0ZXJpYWxJbmRleF07diYmdi52aXNpYmxlJiYodj1lKGIsdixoLGwpLGEucmVuZGVyQnVmZmVyRGlyZWN0KGcsbnVsbCxtLHYsYix4KSl9ZWxzZSBuLnZpc2libGUmJih2PWUoYixuLGgsbCksYS5yZW5kZXJCdWZmZXJEaXJlY3QoZyxudWxsLG0sdixiLG51bGwpKX1iPWIuY2hpbGRyZW47bT0wO2ZvcihuPWIubGVuZ3RoO208bjttKyspZihiW21dLGQsZyxoKX19dmFyIGc9YS5jb250ZXh0LGg9YS5zdGF0ZSxrPW5ldyBqZCxtPW5ldyBKLHU9Yi5zaGFkb3dzLHE9bmV3IEQsbj1uZXcgRChkLm1heFRleHR1cmVTaXplLGQubWF4VGV4dHVyZVNpemUpLHI9bmV3IHAsbD1uZXcgcCx0PUFycmF5KDQpLHk9QXJyYXkoNCkseD17fSx2PVtuZXcgcCgxLDAsMCksbmV3IHAoLTEsMCwwKSxuZXcgcCgwLDAsCjEpLG5ldyBwKDAsMCwtMSksbmV3IHAoMCwxLDApLG5ldyBwKDAsLTEsMCldLEc9W25ldyBwKDAsMSwwKSxuZXcgcCgwLDEsMCksbmV3IHAoMCwxLDApLG5ldyBwKDAsMSwwKSxuZXcgcCgwLDAsMSksbmV3IHAoMCwwLC0xKV0sdz1bbmV3IGdhLG5ldyBnYSxuZXcgZ2EsbmV3IGdhLG5ldyBnYSxuZXcgZ2FdO2I9bmV3ICRhO2IuZGVwdGhQYWNraW5nPTMyMDE7Yi5jbGlwcGluZz0hMDtkPWFiLmRpc3RhbmNlUkdCQTtmb3IodmFyIE89SGEuY2xvbmUoZC51bmlmb3JtcyksUz0wOzQhPT1TOysrUyl7dmFyIEU9MCE9PShTJjEpLEY9MCE9PShTJjIpLGFhPWIuY2xvbmUoKTthYS5tb3JwaFRhcmdldHM9RTthYS5za2lubmluZz1GO3RbU109YWE7RT1uZXcgRWEoe2RlZmluZXM6e1VTRV9TSEFET1dNQVA6IiJ9LHVuaWZvcm1zOk8sdmVydGV4U2hhZGVyOmQudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmQuZnJhZ21lbnRTaGFkZXIsbW9ycGhUYXJnZXRzOkUsc2tpbm5pbmc6RixjbGlwcGluZzohMH0pOwp5W1NdPUV9dmFyIFI9dGhpczt0aGlzLmVuYWJsZWQ9ITE7dGhpcy5hdXRvVXBkYXRlPSEwO3RoaXMubmVlZHNVcGRhdGU9ITE7dGhpcy50eXBlPTE7dGhpcy5yZW5kZXJTaW5nbGVTaWRlZD10aGlzLnJlbmRlclJldmVyc2VTaWRlZD0hMDt0aGlzLnJlbmRlcj1mdW5jdGlvbihiLGMpe2lmKCExIT09Ui5lbmFibGVkJiYoITEhPT1SLmF1dG9VcGRhdGV8fCExIT09Ui5uZWVkc1VwZGF0ZSkmJjAhPT11Lmxlbmd0aCl7aC5kaXNhYmxlKGcuQkxFTkQpO2guYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKTtoLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCk7aC5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKHZhciBkLGUseD0wLHQ9dS5sZW5ndGg7eDx0O3grKyl7dmFyIHA9dVt4XSx5PXAuc2hhZG93O2lmKHZvaWQgMD09PXkpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLHAsImhhcyBubyBzaGFkb3cuIik7ZWxzZXt2YXIgTz15LmNhbWVyYSxFPXkubWF0cml4O2wuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHAubWF0cml4V29ybGQpOwpPLnBvc2l0aW9uLmNvcHkobCk7cS5jb3B5KHkubWFwU2l6ZSk7cS5taW4obik7aWYocCYmcC5pc1BvaW50TGlnaHQpe2Q9NjtlPSEwO3ZhciBTPXEueCxGPXEueTt3WzBdLnNldCgyKlMsRixTLEYpO3dbMV0uc2V0KDAsRixTLEYpO3dbMl0uc2V0KDMqUyxGLFMsRik7d1szXS5zZXQoUyxGLFMsRik7d1s0XS5zZXQoMypTLDAsUyxGKTt3WzVdLnNldChTLDAsUyxGKTtxLngqPTQ7cS55Kj0yO0UubWFrZVRyYW5zbGF0aW9uKC1sLngsLWwueSwtbC56KX1lbHNlIGQ9MSxlPSExLHIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHAudGFyZ2V0Lm1hdHJpeFdvcmxkKSxPLmxvb2tBdChyKSxPLnVwZGF0ZU1hdHJpeFdvcmxkKCksTy5tYXRyaXhXb3JsZEludmVyc2UuZ2V0SW52ZXJzZShPLm1hdHJpeFdvcmxkKSxFLnNldCguNSwwLDAsLjUsMCwuNSwwLC41LDAsMCwuNSwuNSwwLDAsMCwxKSxFLm11bHRpcGx5KE8ucHJvamVjdGlvbk1hdHJpeCksRS5tdWx0aXBseShPLm1hdHJpeFdvcmxkSW52ZXJzZSk7Cm51bGw9PT15Lm1hcCYmKHkubWFwPW5ldyBEYihxLngscS55LHttaW5GaWx0ZXI6MTAwMyxtYWdGaWx0ZXI6MTAwMyxmb3JtYXQ6MTAyM30pLHkubWFwLnRleHR1cmUubmFtZT1wLm5hbWUrIi5zaGFkb3dNYXAiLE8udXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKTt5LmlzU3BvdExpZ2h0U2hhZG93JiZ5LnVwZGF0ZShwKTthLnNldFJlbmRlclRhcmdldCh5Lm1hcCk7YS5jbGVhcigpO2ZvcihwPTA7cDxkO3ArKyllJiYoci5jb3B5KE8ucG9zaXRpb24pLHIuYWRkKHZbcF0pLE8udXAuY29weShHW3BdKSxPLmxvb2tBdChyKSxPLnVwZGF0ZU1hdHJpeFdvcmxkKCksTy5tYXRyaXhXb3JsZEludmVyc2UuZ2V0SW52ZXJzZShPLm1hdHJpeFdvcmxkKSxoLnZpZXdwb3J0KHdbcF0pKSxtLm11bHRpcGx5TWF0cmljZXMoTy5wcm9qZWN0aW9uTWF0cml4LE8ubWF0cml4V29ybGRJbnZlcnNlKSxrLnNldEZyb21NYXRyaXgobSksZihiLGMsTyxlKX19ZD1hLmdldENsZWFyQ29sb3IoKTtlPWEuZ2V0Q2xlYXJBbHBoYSgpOwphLnNldENsZWFyQ29sb3IoZCxlKTtSLm5lZWRzVXBkYXRlPSExfX19ZnVuY3Rpb24gaGIoYSxiKXt0aGlzLm9yaWdpbj12b2lkIDAhPT1hP2E6bmV3IHA7dGhpcy5kaXJlY3Rpb249dm9pZCAwIT09Yj9iOm5ldyBwfWZ1bmN0aW9uIGJiKGEsYixjLGQpe3RoaXMuX3g9YXx8MDt0aGlzLl95PWJ8fDA7dGhpcy5fej1jfHwwO3RoaXMuX29yZGVyPWR8fGJiLkRlZmF1bHRPcmRlcn1mdW5jdGlvbiBSZCgpe3RoaXMubWFzaz0xfWZ1bmN0aW9uIEIoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpMZisrfSk7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7dGhpcy5uYW1lPSIiO3RoaXMudHlwZT0iT2JqZWN0M0QiO3RoaXMucGFyZW50PW51bGw7dGhpcy5jaGlsZHJlbj1bXTt0aGlzLnVwPUIuRGVmYXVsdFVwLmNsb25lKCk7dmFyIGE9bmV3IHAsYj1uZXcgYmIsYz1uZXcgcWEsZD1uZXcgcCgxLDEsMSk7Yi5vbkNoYW5nZShmdW5jdGlvbigpe2Muc2V0RnJvbUV1bGVyKGIsCiExKX0pO2Mub25DaGFuZ2UoZnVuY3Rpb24oKXtiLnNldEZyb21RdWF0ZXJuaW9uKGMsdm9pZCAwLCExKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3Bvc2l0aW9uOntlbnVtZXJhYmxlOiEwLHZhbHVlOmF9LHJvdGF0aW9uOntlbnVtZXJhYmxlOiEwLHZhbHVlOmJ9LHF1YXRlcm5pb246e2VudW1lcmFibGU6ITAsdmFsdWU6Y30sc2NhbGU6e2VudW1lcmFibGU6ITAsdmFsdWU6ZH0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgSn0sbm9ybWFsTWF0cml4Ont2YWx1ZTpuZXcgS2F9fSk7dGhpcy5tYXRyaXg9bmV3IEo7dGhpcy5tYXRyaXhXb3JsZD1uZXcgSjt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9Qi5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZTt0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITE7dGhpcy5sYXllcnM9bmV3IFJkO3RoaXMudmlzaWJsZT0hMDt0aGlzLnJlY2VpdmVTaGFkb3c9dGhpcy5jYXN0U2hhZG93PSExO3RoaXMuZnJ1c3R1bUN1bGxlZD0hMDt0aGlzLnJlbmRlck9yZGVyPQowO3RoaXMudXNlckRhdGE9e307dGhpcy5vbkJlZm9yZVJlbmRlcj1mdW5jdGlvbigpe307dGhpcy5vbkFmdGVyUmVuZGVyPWZ1bmN0aW9uKCl7fX1mdW5jdGlvbiBIYihhLGIpe3RoaXMuc3RhcnQ9dm9pZCAwIT09YT9hOm5ldyBwO3RoaXMuZW5kPXZvaWQgMCE9PWI/YjpuZXcgcH1mdW5jdGlvbiBVYShhLGIsYyl7dGhpcy5hPXZvaWQgMCE9PWE/YTpuZXcgcDt0aGlzLmI9dm9pZCAwIT09Yj9iOm5ldyBwO3RoaXMuYz12b2lkIDAhPT1jP2M6bmV3IHB9ZnVuY3Rpb24gVmEoYSxiLGMsZCxlLGYpe3RoaXMuYT1hO3RoaXMuYj1iO3RoaXMuYz1jO3RoaXMubm9ybWFsPWQmJmQuaXNWZWN0b3IzP2Q6bmV3IHA7dGhpcy52ZXJ0ZXhOb3JtYWxzPUFycmF5LmlzQXJyYXkoZCk/ZDpbXTt0aGlzLmNvbG9yPWUmJmUuaXNDb2xvcj9lOm5ldyBIO3RoaXMudmVydGV4Q29sb3JzPUFycmF5LmlzQXJyYXkoZSk/ZTpbXTt0aGlzLm1hdGVyaWFsSW5kZXg9dm9pZCAwIT09Zj9mOjB9ZnVuY3Rpb24gTmEoYSl7Wi5jYWxsKHRoaXMpOwp0aGlzLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBIKDE2Nzc3MjE1KTt0aGlzLmxpZ2h0TWFwPXRoaXMubWFwPW51bGw7dGhpcy5saWdodE1hcEludGVuc2l0eT0xO3RoaXMuYW9NYXA9bnVsbDt0aGlzLmFvTWFwSW50ZW5zaXR5PTE7dGhpcy5lbnZNYXA9dGhpcy5hbHBoYU1hcD10aGlzLnNwZWN1bGFyTWFwPW51bGw7dGhpcy5jb21iaW5lPTA7dGhpcy5yZWZsZWN0aXZpdHk9MTt0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTg7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiO3RoaXMubGlnaHRzPXRoaXMubW9ycGhUYXJnZXRzPXRoaXMuc2tpbm5pbmc9ITE7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24gTChhLGIsYyl7aWYoQXJyYXkuaXNBcnJheShhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpOwp0aGlzLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKTt0aGlzLmFycmF5PWE7dGhpcy5pdGVtU2l6ZT1iO3RoaXMuY291bnQ9dm9pZCAwIT09YT9hLmxlbmd0aC9iOjA7dGhpcy5ub3JtYWxpemVkPSEwPT09Yzt0aGlzLmR5bmFtaWM9ITE7dGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9O3RoaXMub25VcGxvYWRDYWxsYmFjaz1mdW5jdGlvbigpe307dGhpcy52ZXJzaW9uPTB9ZnVuY3Rpb24gcmMoYSxiKXtMLmNhbGwodGhpcyxuZXcgSW50OEFycmF5KGEpLGIpfWZ1bmN0aW9uIHNjKGEsYil7TC5jYWxsKHRoaXMsbmV3IFVpbnQ4QXJyYXkoYSksYil9ZnVuY3Rpb24gdGMoYSxiKXtMLmNhbGwodGhpcyxuZXcgVWludDhDbGFtcGVkQXJyYXkoYSksYil9ZnVuY3Rpb24gdWMoYSxiKXtMLmNhbGwodGhpcyxuZXcgSW50MTZBcnJheShhKSxiKX1mdW5jdGlvbiBpYihhLGIpe0wuY2FsbCh0aGlzLG5ldyBVaW50MTZBcnJheShhKSxiKX1mdW5jdGlvbiB2YyhhLGIpe0wuY2FsbCh0aGlzLApuZXcgSW50MzJBcnJheShhKSxiKX1mdW5jdGlvbiBqYihhLGIpe0wuY2FsbCh0aGlzLG5ldyBVaW50MzJBcnJheShhKSxiKX1mdW5jdGlvbiBDKGEsYil7TC5jYWxsKHRoaXMsbmV3IEZsb2F0MzJBcnJheShhKSxiKX1mdW5jdGlvbiB3YyhhLGIpe0wuY2FsbCh0aGlzLG5ldyBGbG9hdDY0QXJyYXkoYSksYil9ZnVuY3Rpb24gS2UoKXt0aGlzLmluZGljZXM9W107dGhpcy52ZXJ0aWNlcz1bXTt0aGlzLm5vcm1hbHM9W107dGhpcy5jb2xvcnM9W107dGhpcy51dnM9W107dGhpcy51dnMyPVtdO3RoaXMuZ3JvdXBzPVtdO3RoaXMubW9ycGhUYXJnZXRzPXt9O3RoaXMuc2tpbldlaWdodHM9W107dGhpcy5za2luSW5kaWNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLmdyb3Vwc05lZWRVcGRhdGU9dGhpcy51dnNOZWVkVXBkYXRlPXRoaXMuY29sb3JzTmVlZFVwZGF0ZT10aGlzLm5vcm1hbHNOZWVkVXBkYXRlPXRoaXMudmVydGljZXNOZWVkVXBkYXRlPQohMX1mdW5jdGlvbiBTZChhKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuLUluZmluaXR5O2Zvcih2YXIgYj1hWzBdLGM9MSxkPWEubGVuZ3RoO2M8ZDsrK2MpYVtjXT5iJiYoYj1hW2NdKTtyZXR1cm4gYn1mdW5jdGlvbiBNKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6VGQrK30pO3RoaXMudXVpZD1ZLmdlbmVyYXRlVVVJRCgpO3RoaXMubmFtZT0iIjt0aGlzLnR5cGU9Ikdlb21ldHJ5Ijt0aGlzLnZlcnRpY2VzPVtdO3RoaXMuY29sb3JzPVtdO3RoaXMuZmFjZXM9W107dGhpcy5mYWNlVmVydGV4VXZzPVtbXV07dGhpcy5tb3JwaFRhcmdldHM9W107dGhpcy5tb3JwaE5vcm1hbHM9W107dGhpcy5za2luV2VpZ2h0cz1bXTt0aGlzLnNraW5JbmRpY2VzPVtdO3RoaXMubGluZURpc3RhbmNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLmdyb3Vwc05lZWRVcGRhdGU9dGhpcy5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZT0KdGhpcy5jb2xvcnNOZWVkVXBkYXRlPXRoaXMubm9ybWFsc05lZWRVcGRhdGU9dGhpcy51dnNOZWVkVXBkYXRlPXRoaXMudmVydGljZXNOZWVkVXBkYXRlPXRoaXMuZWxlbWVudHNOZWVkVXBkYXRlPSExfWZ1bmN0aW9uIEkoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpUZCsrfSk7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7dGhpcy5uYW1lPSIiO3RoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiO3RoaXMuaW5kZXg9bnVsbDt0aGlzLmF0dHJpYnV0ZXM9e307dGhpcy5tb3JwaEF0dHJpYnV0ZXM9e307dGhpcy5ncm91cHM9W107dGhpcy5ib3VuZGluZ1NwaGVyZT10aGlzLmJvdW5kaW5nQm94PW51bGw7dGhpcy5kcmF3UmFuZ2U9e3N0YXJ0OjAsY291bnQ6SW5maW5pdHl9fWZ1bmN0aW9uIENhKGEsYil7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTWVzaCI7dGhpcy5nZW9tZXRyeT12b2lkIDAhPT1hP2E6bmV3IEk7dGhpcy5tYXRlcmlhbD12b2lkIDAhPT1iPwpiOm5ldyBOYSh7Y29sb3I6MTY3NzcyMTUqTWF0aC5yYW5kb20oKX0pO3RoaXMuZHJhd01vZGU9MDt0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWZ1bmN0aW9uIEliKGEsYixjLGQsZSxmKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJCb3hHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDphLGhlaWdodDpiLGRlcHRoOmMsd2lkdGhTZWdtZW50czpkLGhlaWdodFNlZ21lbnRzOmUsZGVwdGhTZWdtZW50czpmfTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcga2IoYSxiLGMsZCxlLGYpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBrYihhLGIsYyxkLGUsZil7ZnVuY3Rpb24gZyhhLGIsYyxkLGUsZixnLGwsUyxFLEYpe3ZhciBhYT1mL1MsUj1nL0UsY2E9Zi8yLGxhPWcvMixEPWwvMjtnPVMrMTt2YXIgQz1FKzEsQj1mPTAsUCxLLFc9bmV3IHA7Zm9yKEs9MDtLPEM7SysrKXt2YXIgYmE9SypSLWxhO2ZvcihQPTA7UDxnO1ArKylXW2FdPShQKmFhLWNhKSpkLFdbYl09CmJhKmUsV1tjXT1ELG0ucHVzaChXLngsVy55LFcueiksV1thXT0wLFdbYl09MCxXW2NdPTA8bD8xOi0xLHUucHVzaChXLngsVy55LFcueikscS5wdXNoKFAvUykscS5wdXNoKDEtSy9FKSxmKz0xfWZvcihLPTA7SzxFO0srKylmb3IoUD0wO1A8UztQKyspYT1uK1ArZyooSysxKSxiPW4rKFArMSkrZyooSysxKSxjPW4rKFArMSkrZypLLGsucHVzaChuK1ArZypLLGEsYyksay5wdXNoKGEsYixjKSxCKz02O2guYWRkR3JvdXAocixCLEYpO3IrPUI7bis9Zn1JLmNhbGwodGhpcyk7dGhpcy50eXBlPSJCb3hCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDphLGhlaWdodDpiLGRlcHRoOmMsd2lkdGhTZWdtZW50czpkLGhlaWdodFNlZ21lbnRzOmUsZGVwdGhTZWdtZW50czpmfTt2YXIgaD10aGlzO2Q9TWF0aC5mbG9vcihkKXx8MTtlPU1hdGguZmxvb3IoZSl8fDE7Zj1NYXRoLmZsb29yKGYpfHwxO3ZhciBrPVtdLG09W10sdT1bXSxxPVtdLG49MCxyPTA7ZygieiIsInkiLAoieCIsLTEsLTEsYyxiLGEsZixlLDApO2coInoiLCJ5IiwieCIsMSwtMSxjLGIsLWEsZixlLDEpO2coIngiLCJ6IiwieSIsMSwxLGEsYyxiLGQsZiwyKTtnKCJ4IiwieiIsInkiLDEsLTEsYSxjLC1iLGQsZiwzKTtnKCJ4IiwieSIsInoiLDEsLTEsYSxiLGMsZCxlLDQpO2coIngiLCJ5IiwieiIsLTEsLTEsYSxiLC1jLGQsZSw1KTt0aGlzLnNldEluZGV4KGspO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMobSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEModSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhxLDIpKX1mdW5jdGlvbiB4YyhhLGIsYyxkKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQbGFuZUdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3dpZHRoOmEsaGVpZ2h0OmIsd2lkdGhTZWdtZW50czpjLGhlaWdodFNlZ21lbnRzOmR9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBsYihhLGIsYyxkKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9CmZ1bmN0aW9uIGxiKGEsYixjLGQpe0kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBsYW5lQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17d2lkdGg6YSxoZWlnaHQ6Yix3aWR0aFNlZ21lbnRzOmMsaGVpZ2h0U2VnbWVudHM6ZH07dmFyIGU9YS8yLGY9Yi8yO2M9TWF0aC5mbG9vcihjKXx8MTtkPU1hdGguZmxvb3IoZCl8fDE7dmFyIGc9YysxLGg9ZCsxLGs9YS9jLG09Yi9kLHU9W10scT1bXSxuPVtdLHI9W107Zm9yKGE9MDthPGg7YSsrKXt2YXIgbD1hKm0tZjtmb3IoYj0wO2I8ZztiKyspcS5wdXNoKGIqay1lLC1sLDApLG4ucHVzaCgwLDAsMSksci5wdXNoKGIvYyksci5wdXNoKDEtYS9kKX1mb3IoYT0wO2E8ZDthKyspZm9yKGI9MDtiPGM7YisrKWU9YitnKihhKzEpLGY9YisxK2cqKGErMSksaD1iKzErZyphLHUucHVzaChiK2cqYSxlLGgpLHUucHVzaChlLGYsaCk7dGhpcy5zZXRJbmRleCh1KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKHEsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLApuZXcgQyhuLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKHIsMikpfWZ1bmN0aW9uIE9hKCl7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ2FtZXJhIjt0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZT1uZXcgSjt0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IEp9ZnVuY3Rpb24geGEoYSxiLGMsZCl7T2EuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBlcnNwZWN0aXZlQ2FtZXJhIjt0aGlzLmZvdj12b2lkIDAhPT1hP2E6NTA7dGhpcy56b29tPTE7dGhpcy5uZWFyPXZvaWQgMCE9PWM/YzouMTt0aGlzLmZhcj12b2lkIDAhPT1kP2Q6MkUzO3RoaXMuZm9jdXM9MTA7dGhpcy5hc3BlY3Q9dm9pZCAwIT09Yj9iOjE7dGhpcy52aWV3PW51bGw7dGhpcy5maWxtR2F1Z2U9MzU7dGhpcy5maWxtT2Zmc2V0PTA7dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9ZnVuY3Rpb24gSmIoYSxiLGMsZCxlLGYpe09hLmNhbGwodGhpcyk7dGhpcy50eXBlPSJPcnRob2dyYXBoaWNDYW1lcmEiO3RoaXMuem9vbT0KMTt0aGlzLnZpZXc9bnVsbDt0aGlzLmxlZnQ9YTt0aGlzLnJpZ2h0PWI7dGhpcy50b3A9Yzt0aGlzLmJvdHRvbT1kO3RoaXMubmVhcj12b2lkIDAhPT1lP2U6LjE7dGhpcy5mYXI9dm9pZCAwIT09Zj9mOjJFMzt0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1mdW5jdGlvbiBNZihhKXt2YXIgYj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGEpe2EuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGE9YS5kYXRhKTtyZXR1cm4gYlthLnV1aWRdfSxyZW1vdmU6ZnVuY3Rpb24oYyl7dmFyIGQ9YltjLnV1aWRdO2QmJihhLmRlbGV0ZUJ1ZmZlcihkLmJ1ZmZlciksZGVsZXRlIGJbYy51dWlkXSl9LHVwZGF0ZTpmdW5jdGlvbihjLGQpe2MuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTt2YXIgZT1iW2MudXVpZF07aWYodm9pZCAwPT09ZSl7dmFyIGU9Yy51dWlkLGY9YyxnPWYuYXJyYXksaD1mLmR5bmFtaWM/YS5EWU5BTUlDX0RSQVc6YS5TVEFUSUNfRFJBVywKaz1hLmNyZWF0ZUJ1ZmZlcigpO2EuYmluZEJ1ZmZlcihkLGspO2EuYnVmZmVyRGF0YShkLGcsaCk7Zi5vblVwbG9hZENhbGxiYWNrKCk7aD1hLkZMT0FUO2cgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXk/aD1hLkZMT0FUOmcgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXk/Y29uc29sZS53YXJuKCJVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheSIpOmcgaW5zdGFuY2VvZiBVaW50MTZBcnJheT9oPWEuVU5TSUdORURfU0hPUlQ6ZyBpbnN0YW5jZW9mIEludDE2QXJyYXk/aD1hLlNIT1JUOmcgaW5zdGFuY2VvZiBVaW50MzJBcnJheT9oPWEuVU5TSUdORURfSU5UOmcgaW5zdGFuY2VvZiBJbnQzMkFycmF5P2g9YS5JTlQ6ZyBpbnN0YW5jZW9mIEludDhBcnJheT9oPWEuQllURTpnIGluc3RhbmNlb2YgVWludDhBcnJheSYmKGg9YS5VTlNJR05FRF9CWVRFKTtiW2VdPXtidWZmZXI6ayx0eXBlOmgsYnl0ZXNQZXJFbGVtZW50OmcuQllURVNfUEVSX0VMRU1FTlQsdmVyc2lvbjpmLnZlcnNpb259fWVsc2UgZS52ZXJzaW9uPApjLnZlcnNpb24mJihmPWMsZz1mLmFycmF5LGs9Zi51cGRhdGVSYW5nZSxhLmJpbmRCdWZmZXIoZCxlLmJ1ZmZlciksITE9PT1mLmR5bmFtaWM/YS5idWZmZXJEYXRhKGQsZyxhLlNUQVRJQ19EUkFXKTotMT09PWsuY291bnQ/YS5idWZmZXJTdWJEYXRhKGQsMCxnKTowPT09ay5jb3VudD9jb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTE9iamVjdHMudXBkYXRlQnVmZmVyOiBkeW5hbWljIFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSBtYXJrZWQgYXMgbmVlZHNVcGRhdGUgYnV0IHVwZGF0ZVJhbmdlLmNvdW50IGlzIDAsIGVuc3VyZSB5b3UgYXJlIHVzaW5nIHNldCBtZXRob2RzIG9yIHVwZGF0aW5nIG1hbnVhbGx5LiIpOihhLmJ1ZmZlclN1YkRhdGEoZCxrLm9mZnNldCpnLkJZVEVTX1BFUl9FTEVNRU5ULGcuc3ViYXJyYXkoay5vZmZzZXQsay5vZmZzZXQray5jb3VudCkpLGsuY291bnQ9MCksZS52ZXJzaW9uPWMudmVyc2lvbil9fX1mdW5jdGlvbiBOZihhLGIpe3JldHVybiBhLnJlbmRlck9yZGVyIT09CmIucmVuZGVyT3JkZXI/YS5yZW5kZXJPcmRlci1iLnJlbmRlck9yZGVyOmEucHJvZ3JhbSYmYi5wcm9ncmFtJiZhLnByb2dyYW0hPT1iLnByb2dyYW0/YS5wcm9ncmFtLmlkLWIucHJvZ3JhbS5pZDphLm1hdGVyaWFsLmlkIT09Yi5tYXRlcmlhbC5pZD9hLm1hdGVyaWFsLmlkLWIubWF0ZXJpYWwuaWQ6YS56IT09Yi56P2Euei1iLno6YS5pZC1iLmlkfWZ1bmN0aW9uIE9mKGEsYil7cmV0dXJuIGEucmVuZGVyT3JkZXIhPT1iLnJlbmRlck9yZGVyP2EucmVuZGVyT3JkZXItYi5yZW5kZXJPcmRlcjphLnohPT1iLno/Yi56LWEuejphLmlkLWIuaWR9ZnVuY3Rpb24gUGYoKXt2YXIgYT1bXSxiPS0xLGM9W10sZD0tMTtyZXR1cm57b3BhcXVlOmEsdHJhbnNwYXJlbnQ6Yyxpbml0OmZ1bmN0aW9uKCl7ZD1iPS0xfSxwdXNoOmZ1bmN0aW9uKGUsZixnLGgsayl7dmFyIG0sdTtnLnRyYW5zcGFyZW50PyhtPWMsdT0rK2QpOihtPWEsdT0rK2IpOyh1PW1bdV0pPyh1LmlkPWUuaWQsdS5vYmplY3Q9ZSwKdS5nZW9tZXRyeT1mLHUubWF0ZXJpYWw9Zyx1LnByb2dyYW09Zy5wcm9ncmFtLHUucmVuZGVyT3JkZXI9ZS5yZW5kZXJPcmRlcix1Lno9aCx1Lmdyb3VwPWspOih1PXtpZDplLmlkLG9iamVjdDplLGdlb21ldHJ5OmYsbWF0ZXJpYWw6Zyxwcm9ncmFtOmcucHJvZ3JhbSxyZW5kZXJPcmRlcjplLnJlbmRlck9yZGVyLHo6aCxncm91cDprfSxtLnB1c2godSkpfSxmaW5pc2g6ZnVuY3Rpb24oKXthLmxlbmd0aD1iKzE7Yy5sZW5ndGg9ZCsxfSxzb3J0OmZ1bmN0aW9uKCl7YS5zb3J0KE5mKTtjLnNvcnQoT2YpfX19ZnVuY3Rpb24gUWYoKXt2YXIgYT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGIsYyl7dmFyIGQ9Yi5pZCsiLCIrYy5pZCxlPWFbZF07dm9pZCAwPT09ZSYmKGU9bmV3IFBmLGFbZF09ZSk7cmV0dXJuIGV9LGRpc3Bvc2U6ZnVuY3Rpb24oKXthPXt9fX19ZnVuY3Rpb24gUmYoYSxiLGMpe3ZhciBkLGUsZjt0aGlzLnNldE1vZGU9ZnVuY3Rpb24oYSl7ZD1hfTt0aGlzLnNldEluZGV4PQpmdW5jdGlvbihjKXtjLmFycmF5IGluc3RhbmNlb2YgVWludDMyQXJyYXkmJmIuZ2V0KCJPRVNfZWxlbWVudF9pbmRleF91aW50Iik/KGU9YS5VTlNJR05FRF9JTlQsZj00KTpjLmFycmF5IGluc3RhbmNlb2YgVWludDE2QXJyYXk/KGU9YS5VTlNJR05FRF9TSE9SVCxmPTIpOihlPWEuVU5TSUdORURfQllURSxmPTEpfTt0aGlzLnJlbmRlcj1mdW5jdGlvbihiLGgpe2EuZHJhd0VsZW1lbnRzKGQsaCxlLGIqZik7Yy5jYWxscysrO2MudmVydGljZXMrPWg7ZD09PWEuVFJJQU5HTEVTJiYoYy5mYWNlcys9aC8zKX07dGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24oZyxoLGspe3ZhciBtPWIuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7bnVsbD09PW0/Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpOgoobS5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShkLGssZSxoKmYsZy5tYXhJbnN0YW5jZWRDb3VudCksYy5jYWxscysrLGMudmVydGljZXMrPWsqZy5tYXhJbnN0YW5jZWRDb3VudCxkPT09YS5UUklBTkdMRVMmJihjLmZhY2VzKz1nLm1heEluc3RhbmNlZENvdW50KmsvMykpfX1mdW5jdGlvbiBTZihhLGIsYyl7dmFyIGQ7dGhpcy5zZXRNb2RlPWZ1bmN0aW9uKGEpe2Q9YX07dGhpcy5yZW5kZXI9ZnVuY3Rpb24oYixmKXthLmRyYXdBcnJheXMoZCxiLGYpO2MuY2FsbHMrKztjLnZlcnRpY2VzKz1mO2Q9PT1hLlRSSUFOR0xFUyYmKGMuZmFjZXMrPWYvMyl9O3RoaXMucmVuZGVySW5zdGFuY2VzPWZ1bmN0aW9uKGUsZixnKXt2YXIgaD1iLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpO2lmKG51bGw9PT1oKWNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpOwplbHNle3ZhciBrPWUuYXR0cmlidXRlcy5wb3NpdGlvbjtrLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/KGc9ay5kYXRhLmNvdW50LGguZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKGQsMCxnLGUubWF4SW5zdGFuY2VkQ291bnQpKTpoLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShkLGYsZyxlLm1heEluc3RhbmNlZENvdW50KTtjLmNhbGxzKys7Yy52ZXJ0aWNlcys9ZyplLm1heEluc3RhbmNlZENvdW50O2Q9PT1hLlRSSUFOR0xFUyYmKGMuZmFjZXMrPWUubWF4SW5zdGFuY2VkQ291bnQqZy8zKX19fWZ1bmN0aW9uIFRmKGEsYixjKXtmdW5jdGlvbiBkKGEpe2E9YS50YXJnZXQ7dmFyIGg9ZVthLmlkXTtudWxsIT09aC5pbmRleCYmYi5yZW1vdmUoaC5pbmRleCk7Zm9yKHZhciBrIGluIGguYXR0cmlidXRlcyliLnJlbW92ZShoLmF0dHJpYnV0ZXNba10pO2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsZCk7ZGVsZXRlIGVbYS5pZF07aWYoaz1mW2EuaWRdKWIucmVtb3ZlKGspLApkZWxldGUgZlthLmlkXTtpZihrPWZbaC5pZF0pYi5yZW1vdmUoayksZGVsZXRlIGZbaC5pZF07Yy5nZW9tZXRyaWVzLS19dmFyIGU9e30sZj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGEsYil7dmFyIGY9ZVtiLmlkXTtpZihmKXJldHVybiBmO2IuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsZCk7Yi5pc0J1ZmZlckdlb21ldHJ5P2Y9YjpiLmlzR2VvbWV0cnkmJih2b2lkIDA9PT1iLl9idWZmZXJHZW9tZXRyeSYmKGIuX2J1ZmZlckdlb21ldHJ5PShuZXcgSSkuc2V0RnJvbU9iamVjdChhKSksZj1iLl9idWZmZXJHZW9tZXRyeSk7ZVtiLmlkXT1mO2MuZ2VvbWV0cmllcysrO3JldHVybiBmfSx1cGRhdGU6ZnVuY3Rpb24oYyl7dmFyIGQ9Yy5pbmRleCxlPWMuYXR0cmlidXRlcztudWxsIT09ZCYmYi51cGRhdGUoZCxhLkVMRU1FTlRfQVJSQVlfQlVGRkVSKTtmb3IodmFyIGYgaW4gZSliLnVwZGF0ZShlW2ZdLGEuQVJSQVlfQlVGRkVSKTtjPWMubW9ycGhBdHRyaWJ1dGVzO2ZvcihmIGluIGMpZm9yKHZhciBkPQpjW2ZdLGU9MCx1PWQubGVuZ3RoO2U8dTtlKyspYi51cGRhdGUoZFtlXSxhLkFSUkFZX0JVRkZFUil9LGdldFdpcmVmcmFtZUF0dHJpYnV0ZTpmdW5jdGlvbihjKXt2YXIgZD1mW2MuaWRdO2lmKGQpcmV0dXJuIGQ7dmFyIGQ9W10sZT1jLmluZGV4LG09Yy5hdHRyaWJ1dGVzO2lmKG51bGwhPT1lKWZvcih2YXIgZT1lLmFycmF5LG09MCx1PWUubGVuZ3RoO208dTttKz0zKXt2YXIgcT1lW20rMF0sbj1lW20rMV0scj1lW20rMl07ZC5wdXNoKHEsbixuLHIscixxKX1lbHNlIGZvcihlPW0ucG9zaXRpb24uYXJyYXksbT0wLHU9ZS5sZW5ndGgvMy0xO208dTttKz0zKXE9bSswLG49bSsxLHI9bSsyLGQucHVzaChxLG4sbixyLHIscSk7ZD1uZXcgKDY1NTM1PFNkKGQpP2piOmliKShkLDEpO2IudXBkYXRlKGQsYS5FTEVNRU5UX0FSUkFZX0JVRkZFUik7cmV0dXJuIGZbYy5pZF09ZH19fWZ1bmN0aW9uIFVmKCl7dmFyIGE9e307cmV0dXJue2dldDpmdW5jdGlvbihiKXtpZih2b2lkIDAhPT1hW2IuaWRdKXJldHVybiBhW2IuaWRdOwp2YXIgYztzd2l0Y2goYi50eXBlKXtjYXNlICJEaXJlY3Rpb25hbExpZ2h0IjpjPXtkaXJlY3Rpb246bmV3IHAsY29sb3I6bmV3IEgsc2hhZG93OiExLHNoYWRvd0JpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBEfTticmVhaztjYXNlICJTcG90TGlnaHQiOmM9e3Bvc2l0aW9uOm5ldyBwLGRpcmVjdGlvbjpuZXcgcCxjb2xvcjpuZXcgSCxkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjAsc2hhZG93OiExLHNoYWRvd0JpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBEfTticmVhaztjYXNlICJQb2ludExpZ2h0IjpjPXtwb3NpdGlvbjpuZXcgcCxjb2xvcjpuZXcgSCxkaXN0YW5jZTowLGRlY2F5OjAsc2hhZG93OiExLHNoYWRvd0JpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBEfTticmVhaztjYXNlICJIZW1pc3BoZXJlTGlnaHQiOmM9e2RpcmVjdGlvbjpuZXcgcCxza3lDb2xvcjpuZXcgSCwKZ3JvdW5kQ29sb3I6bmV3IEh9O2JyZWFrO2Nhc2UgIlJlY3RBcmVhTGlnaHQiOmM9e2NvbG9yOm5ldyBILHBvc2l0aW9uOm5ldyBwLGhhbGZXaWR0aDpuZXcgcCxoYWxmSGVpZ2h0Om5ldyBwfX1yZXR1cm4gYVtiLmlkXT1jfX19ZnVuY3Rpb24gVmYoYSxiLGMpe3ZhciBkPXt9O3JldHVybnt1cGRhdGU6ZnVuY3Rpb24oYSl7dmFyIGY9Yy5mcmFtZSxnPWEuZ2VvbWV0cnksaD1iLmdldChhLGcpO2RbaC5pZF0hPT1mJiYoZy5pc0dlb21ldHJ5JiZoLnVwZGF0ZUZyb21PYmplY3QoYSksYi51cGRhdGUoaCksZFtoLmlkXT1mKTtyZXR1cm4gaH0sY2xlYXI6ZnVuY3Rpb24oKXtkPXt9fX19ZnVuY3Rpb24gV2YoYSl7YT1hLnNwbGl0KCJcbiIpO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKWFbYl09YisxKyI6ICIrYVtiXTtyZXR1cm4gYS5qb2luKCJcbiIpfWZ1bmN0aW9uIExlKGEsYixjKXt2YXIgZD1hLmNyZWF0ZVNoYWRlcihiKTthLnNoYWRlclNvdXJjZShkLGMpO2EuY29tcGlsZVNoYWRlcihkKTsKITE9PT1hLmdldFNoYWRlclBhcmFtZXRlcihkLGEuQ09NUElMRV9TVEFUVVMpJiZjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFNoYWRlcjogU2hhZGVyIGNvdWxkbid0IGNvbXBpbGUuIik7IiIhPT1hLmdldFNoYWRlckluZm9Mb2coZCkmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xTaGFkZXI6IGdsLmdldFNoYWRlckluZm9Mb2coKSIsYj09PWEuVkVSVEVYX1NIQURFUj8idmVydGV4IjoiZnJhZ21lbnQiLGEuZ2V0U2hhZGVySW5mb0xvZyhkKSxXZihjKSk7cmV0dXJuIGR9ZnVuY3Rpb24gTWUoYSl7c3dpdGNoKGEpe2Nhc2UgM0UzOnJldHVyblsiTGluZWFyIiwiKCB2YWx1ZSApIl07Y2FzZSAzMDAxOnJldHVyblsic1JHQiIsIiggdmFsdWUgKSJdO2Nhc2UgMzAwMjpyZXR1cm5bIlJHQkUiLCIoIHZhbHVlICkiXTtjYXNlIDMwMDQ6cmV0dXJuWyJSR0JNIiwiKCB2YWx1ZSwgNy4wICkiXTtjYXNlIDMwMDU6cmV0dXJuWyJSR0JNIiwiKCB2YWx1ZSwgMTYuMCApIl07Y2FzZSAzMDA2OnJldHVyblsiUkdCRCIsCiIoIHZhbHVlLCAyNTYuMCApIl07Y2FzZSAzMDA3OnJldHVyblsiR2FtbWEiLCIoIHZhbHVlLCBmbG9hdCggR0FNTUFfRkFDVE9SICkgKSJdO2RlZmF1bHQ6dGhyb3cgRXJyb3IoInVuc3VwcG9ydGVkIGVuY29kaW5nOiAiK2EpO319ZnVuY3Rpb24gVWQoYSxiKXt2YXIgYz1NZShiKTtyZXR1cm4idmVjNCAiK2ErIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuICIrY1swXSsiVG9MaW5lYXIiK2NbMV0rIjsgfSJ9ZnVuY3Rpb24gWGYoYSxiKXt2YXIgYz1NZShiKTtyZXR1cm4idmVjNCAiK2ErIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuIExpbmVhclRvIitjWzBdK2NbMV0rIjsgfSJ9ZnVuY3Rpb24gWWYoYSxiKXt2YXIgYztzd2l0Y2goYil7Y2FzZSAxOmM9IkxpbmVhciI7YnJlYWs7Y2FzZSAyOmM9IlJlaW5oYXJkIjticmVhaztjYXNlIDM6Yz0iVW5jaGFydGVkMiI7YnJlYWs7Y2FzZSA0OmM9Ik9wdGltaXplZENpbmVvbiI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigidW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6ICIrCmIpO31yZXR1cm4idmVjMyAiK2ErIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrYysiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIFpmKGEsYixjKXthPWF8fHt9O3JldHVyblthLmRlcml2YXRpdmVzfHxiLmVudk1hcEN1YmVVVnx8Yi5idW1wTWFwfHxiLm5vcm1hbE1hcHx8Yi5mbGF0U2hhZGluZz8iI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGUiOiIiLChhLmZyYWdEZXB0aHx8Yi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyKSYmYy5nZXQoIkVYVF9mcmFnX2RlcHRoIik/IiNleHRlbnNpb24gR0xfRVhUX2ZyYWdfZGVwdGggOiBlbmFibGUiOiIiLGEuZHJhd0J1ZmZlcnMmJmMuZ2V0KCJXRUJHTF9kcmF3X2J1ZmZlcnMiKT8iI2V4dGVuc2lvbiBHTF9FWFRfZHJhd19idWZmZXJzIDogcmVxdWlyZSI6IiIsKGEuc2hhZGVyVGV4dHVyZUxPRHx8Yi5lbnZNYXApJiZjLmdldCgiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOgoiIl0uZmlsdGVyKHljKS5qb2luKCJcbiIpfWZ1bmN0aW9uICRmKGEpe3ZhciBiPVtdLGM7Zm9yKGMgaW4gYSl7dmFyIGQ9YVtjXTshMSE9PWQmJmIucHVzaCgiI2RlZmluZSAiK2MrIiAiK2QpfXJldHVybiBiLmpvaW4oIlxuIil9ZnVuY3Rpb24geWMoYSl7cmV0dXJuIiIhPT1hfWZ1bmN0aW9uIE5lKGEsYil7cmV0dXJuIGEucmVwbGFjZSgvTlVNX0RJUl9MSUdIVFMvZyxiLm51bURpckxpZ2h0cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRTL2csYi5udW1TcG90TGlnaHRzKS5yZXBsYWNlKC9OVU1fUkVDVF9BUkVBX0xJR0hUUy9nLGIubnVtUmVjdEFyZWFMaWdodHMpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVFMvZyxiLm51bVBvaW50TGlnaHRzKS5yZXBsYWNlKC9OVU1fSEVNSV9MSUdIVFMvZyxiLm51bUhlbWlMaWdodHMpfWZ1bmN0aW9uIFZkKGEpe3JldHVybiBhLnJlcGxhY2UoL15bIFx0XSojaW5jbHVkZSArPChbXHdcZC5dKyk+L2dtLGZ1bmN0aW9uKGEsYyl7dmFyIGQ9VVtjXTsKaWYodm9pZCAwPT09ZCl0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK2MrIj4iKTtyZXR1cm4gVmQoZCl9KX1mdW5jdGlvbiBPZShhKXtyZXR1cm4gYS5yZXBsYWNlKC9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyxmdW5jdGlvbihhLGMsZCxlKXthPSIiO2ZvcihjPXBhcnNlSW50KGMpO2M8cGFyc2VJbnQoZCk7YysrKWErPWUucmVwbGFjZSgvXFsgaSBcXS9nLCJbICIrYysiIF0iKTtyZXR1cm4gYX0pfWZ1bmN0aW9uIGFnKGEsYixjLGQpe3ZhciBlPWEuY29udGV4dCxmPWMuZXh0ZW5zaW9ucyxnPWMuZGVmaW5lcyxoPWMuX193ZWJnbFNoYWRlci52ZXJ0ZXhTaGFkZXIsaz1jLl9fd2ViZ2xTaGFkZXIuZnJhZ21lbnRTaGFkZXIsbT0iU0hBRE9XTUFQX1RZUEVfQkFTSUMiOzE9PT1kLnNoYWRvd01hcFR5cGU/bT0iU0hBRE9XTUFQX1RZUEVfUENGIjoyPT09ZC5zaGFkb3dNYXBUeXBlJiYKKG09IlNIQURPV01BUF9UWVBFX1BDRl9TT0ZUIik7dmFyIHU9IkVOVk1BUF9UWVBFX0NVQkUiLHE9IkVOVk1BUF9NT0RFX1JFRkxFQ1RJT04iLG49IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7aWYoZC5lbnZNYXApe3N3aXRjaChjLmVudk1hcC5tYXBwaW5nKXtjYXNlIDMwMTpjYXNlIDMwMjp1PSJFTlZNQVBfVFlQRV9DVUJFIjticmVhaztjYXNlIDMwNjpjYXNlIDMwNzp1PSJFTlZNQVBfVFlQRV9DVUJFX1VWIjticmVhaztjYXNlIDMwMzpjYXNlIDMwNDp1PSJFTlZNQVBfVFlQRV9FUVVJUkVDIjticmVhaztjYXNlIDMwNTp1PSJFTlZNQVBfVFlQRV9TUEhFUkUifXN3aXRjaChjLmVudk1hcC5tYXBwaW5nKXtjYXNlIDMwMjpjYXNlIDMwNDpxPSJFTlZNQVBfTU9ERV9SRUZSQUNUSU9OIn1zd2l0Y2goYy5jb21iaW5lKXtjYXNlIDA6bj0iRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZIjticmVhaztjYXNlIDE6bj0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSAyOm49IkVOVk1BUF9CTEVORElOR19BREQifX12YXIgcj0KMDxhLmdhbW1hRmFjdG9yP2EuZ2FtbWFGYWN0b3I6MSxmPVpmKGYsZCxhLmV4dGVuc2lvbnMpLGw9JGYoZyksdD1lLmNyZWF0ZVByb2dyYW0oKTtjLmlzUmF3U2hhZGVyTWF0ZXJpYWw/KGc9W2wsIlxuIl0uZmlsdGVyKHljKS5qb2luKCJcbiIpLG09W2YsbCwiXG4iXS5maWx0ZXIoeWMpLmpvaW4oIlxuIikpOihnPVsicHJlY2lzaW9uICIrZC5wcmVjaXNpb24rIiBmbG9hdDsiLCJwcmVjaXNpb24gIitkLnByZWNpc2lvbisiIGludDsiLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrYy5fX3dlYmdsU2hhZGVyLm5hbWUsbCxkLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVkVSVEVYX1RFWFRVUkVTIjoiIiwiI2RlZmluZSBHQU1NQV9GQUNUT1IgIityLCIjZGVmaW5lIE1BWF9CT05FUyAiK2QubWF4Qm9uZXMsZC51c2VGb2cmJmQuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLGQudXNlRm9nJiZkLmZvZ0V4cD8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZC5tYXA/IiNkZWZpbmUgVVNFX01BUCI6CiIiLGQuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGQuZW52TWFwPyIjZGVmaW5lICIrcToiIixkLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsZC5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLGQuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixkLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLGQubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLGQuZGlzcGxhY2VtZW50TWFwJiZkLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVVNFX0RJU1BMQUNFTUVOVE1BUCI6IiIsZC5zcGVjdWxhck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAiOiIiLGQucm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAiOiIiLGQubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLGQuYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIixkLnZlcnRleENvbG9ycz8KIiNkZWZpbmUgVVNFX0NPTE9SIjoiIixkLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixkLnNraW5uaW5nPyIjZGVmaW5lIFVTRV9TS0lOTklORyI6IiIsZC51c2VWZXJ0ZXhUZXh0dXJlPyIjZGVmaW5lIEJPTkVfVEVYVFVSRSI6IiIsZC5tb3JwaFRhcmdldHM/IiNkZWZpbmUgVVNFX01PUlBIVEFSR0VUUyI6IiIsZC5tb3JwaE5vcm1hbHMmJiExPT09ZC5mbGF0U2hhZGluZz8iI2RlZmluZSBVU0VfTU9SUEhOT1JNQUxTIjoiIixkLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZC5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsIiNkZWZpbmUgTlVNX0NMSVBQSU5HX1BMQU5FUyAiK2QubnVtQ2xpcHBpbmdQbGFuZXMsZC5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGQuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK206IiIsZC5zaXplQXR0ZW51YXRpb24/IiNkZWZpbmUgVVNFX1NJWkVBVFRFTlVBVElPTiI6CiIiLGQubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGQubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmYS5leHRlbnNpb25zLmdldCgiRVhUX2ZyYWdfZGVwdGgiKT8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OyIsInVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgbm9ybWFsOyIsImF0dHJpYnV0ZSB2ZWMyIHV2OyIsIiNpZmRlZiBVU0VfQ09MT1IiLCJcdGF0dHJpYnV0ZSB2ZWMzIGNvbG9yOyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTIiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwKIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQxOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOyIsIlx0I2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOyIsIlx0I2Vsc2UiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ3OyIsIlx0I2VuZGlmIiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9TS0lOTklORyIsIlx0YXR0cmlidXRlIHZlYzQgc2tpbkluZGV4OyIsIlx0YXR0cmlidXRlIHZlYzQgc2tpbldlaWdodDsiLAoiI2VuZGlmIiwiXG4iXS5maWx0ZXIoeWMpLmpvaW4oIlxuIiksbT1bZiwicHJlY2lzaW9uICIrZC5wcmVjaXNpb24rIiBmbG9hdDsiLCJwcmVjaXNpb24gIitkLnByZWNpc2lvbisiIGludDsiLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrYy5fX3dlYmdsU2hhZGVyLm5hbWUsbCxkLmFscGhhVGVzdD8iI2RlZmluZSBBTFBIQVRFU1QgIitkLmFscGhhVGVzdDoiIiwiI2RlZmluZSBHQU1NQV9GQUNUT1IgIityLGQudXNlRm9nJiZkLmZvZz8iI2RlZmluZSBVU0VfRk9HIjoiIixkLnVzZUZvZyYmZC5mb2dFeHA/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLGQubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLGQuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGQuZW52TWFwPyIjZGVmaW5lICIrdToiIixkLmVudk1hcD8iI2RlZmluZSAiK3E6IiIsZC5lbnZNYXA/IiNkZWZpbmUgIituOiIiLGQubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixkLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6CiIiLGQuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixkLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLGQubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLGQuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixkLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixkLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixkLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZC52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixkLmdyYWRpZW50TWFwPyIjZGVmaW5lIFVTRV9HUkFESUVOVE1BUCI6IiIsZC5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsZC5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLGQuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLCIjZGVmaW5lIE5VTV9DTElQUElOR19QTEFORVMgIisKZC5udW1DbGlwcGluZ1BsYW5lcywiI2RlZmluZSBVTklPTl9DTElQUElOR19QTEFORVMgIisoZC5udW1DbGlwcGluZ1BsYW5lcy1kLm51bUNsaXBJbnRlcnNlY3Rpb24pLGQuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixkLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIittOiIiLGQucHJlbXVsdGlwbGllZEFscGhhPyIjZGVmaW5lIFBSRU1VTFRJUExJRURfQUxQSEEiOiIiLGQucGh5c2ljYWxseUNvcnJlY3RMaWdodHM/IiNkZWZpbmUgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyI6IiIsZC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsZC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZhLmV4dGVuc2lvbnMuZ2V0KCJFWFRfZnJhZ19kZXB0aCIpPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLGQuZW52TWFwJiZhLmV4dGVuc2lvbnMuZ2V0KCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIik/IiNkZWZpbmUgVEVYVFVSRV9MT0RfRVhUIjoKIiIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLDAhPT1kLnRvbmVNYXBwaW5nPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsMCE9PWQudG9uZU1hcHBpbmc/VS50b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIiLDAhPT1kLnRvbmVNYXBwaW5nP1lmKCJ0b25lTWFwcGluZyIsZC50b25lTWFwcGluZyk6IiIsZC5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixkLm91dHB1dEVuY29kaW5nfHxkLm1hcEVuY29kaW5nfHxkLmVudk1hcEVuY29kaW5nfHxkLmVtaXNzaXZlTWFwRW5jb2Rpbmc/VS5lbmNvZGluZ3NfcGFyc19mcmFnbWVudDoiIixkLm1hcEVuY29kaW5nP1VkKCJtYXBUZXhlbFRvTGluZWFyIixkLm1hcEVuY29kaW5nKToiIixkLmVudk1hcEVuY29kaW5nP1VkKCJlbnZNYXBUZXhlbFRvTGluZWFyIixkLmVudk1hcEVuY29kaW5nKToiIixkLmVtaXNzaXZlTWFwRW5jb2Rpbmc/VWQoImVtaXNzaXZlTWFwVGV4ZWxUb0xpbmVhciIsCmQuZW1pc3NpdmVNYXBFbmNvZGluZyk6IiIsZC5vdXRwdXRFbmNvZGluZz9YZigibGluZWFyVG9PdXRwdXRUZXhlbCIsZC5vdXRwdXRFbmNvZGluZyk6IiIsZC5kZXB0aFBhY2tpbmc/IiNkZWZpbmUgREVQVEhfUEFDS0lORyAiK2MuZGVwdGhQYWNraW5nOiIiLCJcbiJdLmZpbHRlcih5Yykuam9pbigiXG4iKSk7aD1WZChoLGQpO2g9TmUoaCxkKTtrPVZkKGssZCk7az1OZShrLGQpO2MuaXNTaGFkZXJNYXRlcmlhbHx8KGg9T2UoaCksaz1PZShrKSk7az1tK2s7aD1MZShlLGUuVkVSVEVYX1NIQURFUixnK2gpO2s9TGUoZSxlLkZSQUdNRU5UX1NIQURFUixrKTtlLmF0dGFjaFNoYWRlcih0LGgpO2UuYXR0YWNoU2hhZGVyKHQsayk7dm9pZCAwIT09Yy5pbmRleDBBdHRyaWJ1dGVOYW1lP2UuYmluZEF0dHJpYkxvY2F0aW9uKHQsMCxjLmluZGV4MEF0dHJpYnV0ZU5hbWUpOiEwPT09ZC5tb3JwaFRhcmdldHMmJmUuYmluZEF0dHJpYkxvY2F0aW9uKHQsMCwicG9zaXRpb24iKTtlLmxpbmtQcm9ncmFtKHQpOwpkPWUuZ2V0UHJvZ3JhbUluZm9Mb2codCk7dT1lLmdldFNoYWRlckluZm9Mb2coaCk7cT1lLmdldFNoYWRlckluZm9Mb2coayk7cj1uPSEwO2lmKCExPT09ZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsZS5MSU5LX1NUQVRVUykpbj0hMSxjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFByb2dyYW06IHNoYWRlciBlcnJvcjogIixlLmdldEVycm9yKCksImdsLlZBTElEQVRFX1NUQVRVUyIsZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsZS5WQUxJREFURV9TVEFUVVMpLCJnbC5nZXRQcm9ncmFtSW5mb0xvZyIsZCx1LHEpO2Vsc2UgaWYoIiIhPT1kKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpIixkKTtlbHNlIGlmKCIiPT09dXx8IiI9PT1xKXI9ITE7ciYmKHRoaXMuZGlhZ25vc3RpY3M9e3J1bm5hYmxlOm4sbWF0ZXJpYWw6Yyxwcm9ncmFtTG9nOmQsdmVydGV4U2hhZGVyOntsb2c6dSxwcmVmaXg6Z30sZnJhZ21lbnRTaGFkZXI6e2xvZzpxLApwcmVmaXg6bX19KTtlLmRlbGV0ZVNoYWRlcihoKTtlLmRlbGV0ZVNoYWRlcihrKTt2YXIgcDt0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7dm9pZCAwPT09cCYmKHA9bmV3IGZiKGUsdCxhKSk7cmV0dXJuIHB9O3ZhciB4O3RoaXMuZ2V0QXR0cmlidXRlcz1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXgpe2Zvcih2YXIgYT17fSxiPWUuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0LGUuQUNUSVZFX0FUVFJJQlVURVMpLGM9MDtjPGI7YysrKXt2YXIgZD1lLmdldEFjdGl2ZUF0dHJpYih0LGMpLm5hbWU7YVtkXT1lLmdldEF0dHJpYkxvY2F0aW9uKHQsZCl9eD1hfXJldHVybiB4fTt0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtlLmRlbGV0ZVByb2dyYW0odCk7dGhpcy5wcm9ncmFtPXZvaWQgMH07T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7dW5pZm9ybXM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiAudW5pZm9ybXMgaXMgbm93IC5nZXRVbmlmb3JtcygpLiIpOwpyZXR1cm4gdGhpcy5nZXRVbmlmb3JtcygpfX0sYXR0cmlidXRlczp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IC5hdHRyaWJ1dGVzIGlzIG5vdyAuZ2V0QXR0cmlidXRlcygpLiIpO3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZXMoKX19fSk7dGhpcy5pZD1iZysrO3RoaXMuY29kZT1iO3RoaXMudXNlZFRpbWVzPTE7dGhpcy5wcm9ncmFtPXQ7dGhpcy52ZXJ0ZXhTaGFkZXI9aDt0aGlzLmZyYWdtZW50U2hhZGVyPWs7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gY2coYSxiKXtmdW5jdGlvbiBjKGEsYil7dmFyIGM7YT9hLmlzVGV4dHVyZT9jPWEuZW5jb2Rpbmc6YS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW1zLmdldFRleHR1cmVFbmNvZGluZ0Zyb21NYXA6IGRvbid0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksYz0KYS50ZXh0dXJlLmVuY29kaW5nKTpjPTNFMzszRTM9PT1jJiZiJiYoYz0zMDA3KTtyZXR1cm4gY312YXIgZD1bXSxlPXtNZXNoRGVwdGhNYXRlcmlhbDoiZGVwdGgiLE1lc2hOb3JtYWxNYXRlcmlhbDoibm9ybWFsIixNZXNoQmFzaWNNYXRlcmlhbDoiYmFzaWMiLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6ImxhbWJlcnQiLE1lc2hQaG9uZ01hdGVyaWFsOiJwaG9uZyIsTWVzaFRvb25NYXRlcmlhbDoicGhvbmciLE1lc2hTdGFuZGFyZE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6InBoeXNpY2FsIixMaW5lQmFzaWNNYXRlcmlhbDoiYmFzaWMiLExpbmVEYXNoZWRNYXRlcmlhbDoiZGFzaGVkIixQb2ludHNNYXRlcmlhbDoicG9pbnRzIn0sZj0icHJlY2lzaW9uIHN1cHBvcnRzVmVydGV4VGV4dHVyZXMgbWFwIG1hcEVuY29kaW5nIGVudk1hcCBlbnZNYXBNb2RlIGVudk1hcEVuY29kaW5nIGxpZ2h0TWFwIGFvTWFwIGVtaXNzaXZlTWFwIGVtaXNzaXZlTWFwRW5jb2RpbmcgYnVtcE1hcCBub3JtYWxNYXAgZGlzcGxhY2VtZW50TWFwIHNwZWN1bGFyTWFwIHJvdWdobmVzc01hcCBtZXRhbG5lc3NNYXAgZ3JhZGllbnRNYXAgYWxwaGFNYXAgY29tYmluZSB2ZXJ0ZXhDb2xvcnMgZm9nIHVzZUZvZyBmb2dFeHAgZmxhdFNoYWRpbmcgc2l6ZUF0dGVudWF0aW9uIGxvZ2FyaXRobWljRGVwdGhCdWZmZXIgc2tpbm5pbmcgbWF4Qm9uZXMgdXNlVmVydGV4VGV4dHVyZSBtb3JwaFRhcmdldHMgbW9ycGhOb3JtYWxzIG1heE1vcnBoVGFyZ2V0cyBtYXhNb3JwaE5vcm1hbHMgcHJlbXVsdGlwbGllZEFscGhhIG51bURpckxpZ2h0cyBudW1Qb2ludExpZ2h0cyBudW1TcG90TGlnaHRzIG51bUhlbWlMaWdodHMgbnVtUmVjdEFyZWFMaWdodHMgc2hhZG93TWFwRW5hYmxlZCBzaGFkb3dNYXBUeXBlIHRvbmVNYXBwaW5nIHBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzIGFscGhhVGVzdCBkb3VibGVTaWRlZCBmbGlwU2lkZWQgbnVtQ2xpcHBpbmdQbGFuZXMgbnVtQ2xpcEludGVyc2VjdGlvbiBkZXB0aFBhY2tpbmcgZGl0aGVyaW5nIi5zcGxpdCgiICIpOwp0aGlzLmdldFBhcmFtZXRlcnM9ZnVuY3Rpb24oZCxmLGssbSx1LHEpe3ZhciBuPWVbZC50eXBlXSxyO2lmKHEuaXNTa2lubmVkTWVzaClpZihyPXEuc2tlbGV0b24uYm9uZXMsYi5mbG9hdFZlcnRleFRleHR1cmVzKXI9MTAyNDtlbHNle3ZhciBsPU1hdGgubWluKE1hdGguZmxvb3IoKGIubWF4VmVydGV4VW5pZm9ybXMtMjApLzQpLHIubGVuZ3RoKTtsPHIubGVuZ3RoPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFNrZWxldG9uIGhhcyAiK3IubGVuZ3RoKyIgYm9uZXMuIFRoaXMgR1BVIHN1cHBvcnRzICIrbCsiLiIpLHI9MCk6cj1sfWVsc2Ugcj0wO2w9YS5nZXRQcmVjaXNpb24oKTtudWxsIT09ZC5wcmVjaXNpb24mJihsPWIuZ2V0TWF4UHJlY2lzaW9uKGQucHJlY2lzaW9uKSxsIT09ZC5wcmVjaXNpb24mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6IixkLnByZWNpc2lvbiwibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIikpOwp2YXIgdD1hLmdldFJlbmRlclRhcmdldCgpO3JldHVybntzaGFkZXJJRDpuLHByZWNpc2lvbjpsLHN1cHBvcnRzVmVydGV4VGV4dHVyZXM6Yi52ZXJ0ZXhUZXh0dXJlcyxvdXRwdXRFbmNvZGluZzpjKHQ/dC50ZXh0dXJlOm51bGwsYS5nYW1tYU91dHB1dCksbWFwOiEhZC5tYXAsbWFwRW5jb2Rpbmc6YyhkLm1hcCxhLmdhbW1hSW5wdXQpLGVudk1hcDohIWQuZW52TWFwLGVudk1hcE1vZGU6ZC5lbnZNYXAmJmQuZW52TWFwLm1hcHBpbmcsZW52TWFwRW5jb2Rpbmc6YyhkLmVudk1hcCxhLmdhbW1hSW5wdXQpLGVudk1hcEN1YmVVVjohIWQuZW52TWFwJiYoMzA2PT09ZC5lbnZNYXAubWFwcGluZ3x8MzA3PT09ZC5lbnZNYXAubWFwcGluZyksbGlnaHRNYXA6ISFkLmxpZ2h0TWFwLGFvTWFwOiEhZC5hb01hcCxlbWlzc2l2ZU1hcDohIWQuZW1pc3NpdmVNYXAsZW1pc3NpdmVNYXBFbmNvZGluZzpjKGQuZW1pc3NpdmVNYXAsYS5nYW1tYUlucHV0KSxidW1wTWFwOiEhZC5idW1wTWFwLG5vcm1hbE1hcDohIWQubm9ybWFsTWFwLApkaXNwbGFjZW1lbnRNYXA6ISFkLmRpc3BsYWNlbWVudE1hcCxyb3VnaG5lc3NNYXA6ISFkLnJvdWdobmVzc01hcCxtZXRhbG5lc3NNYXA6ISFkLm1ldGFsbmVzc01hcCxzcGVjdWxhck1hcDohIWQuc3BlY3VsYXJNYXAsYWxwaGFNYXA6ISFkLmFscGhhTWFwLGdyYWRpZW50TWFwOiEhZC5ncmFkaWVudE1hcCxjb21iaW5lOmQuY29tYmluZSx2ZXJ0ZXhDb2xvcnM6ZC52ZXJ0ZXhDb2xvcnMsZm9nOiEhayx1c2VGb2c6ZC5mb2csZm9nRXhwOmsmJmsuaXNGb2dFeHAyLGZsYXRTaGFkaW5nOjE9PT1kLnNoYWRpbmcsc2l6ZUF0dGVudWF0aW9uOmQuc2l6ZUF0dGVudWF0aW9uLGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6Yi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLHNraW5uaW5nOmQuc2tpbm5pbmcmJjA8cixtYXhCb25lczpyLHVzZVZlcnRleFRleHR1cmU6Yi5mbG9hdFZlcnRleFRleHR1cmVzLG1vcnBoVGFyZ2V0czpkLm1vcnBoVGFyZ2V0cyxtb3JwaE5vcm1hbHM6ZC5tb3JwaE5vcm1hbHMsCm1heE1vcnBoVGFyZ2V0czphLm1heE1vcnBoVGFyZ2V0cyxtYXhNb3JwaE5vcm1hbHM6YS5tYXhNb3JwaE5vcm1hbHMsbnVtRGlyTGlnaHRzOmYuZGlyZWN0aW9uYWwubGVuZ3RoLG51bVBvaW50TGlnaHRzOmYucG9pbnQubGVuZ3RoLG51bVNwb3RMaWdodHM6Zi5zcG90Lmxlbmd0aCxudW1SZWN0QXJlYUxpZ2h0czpmLnJlY3RBcmVhLmxlbmd0aCxudW1IZW1pTGlnaHRzOmYuaGVtaS5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6bSxudW1DbGlwSW50ZXJzZWN0aW9uOnUsZGl0aGVyaW5nOmQuZGl0aGVyaW5nLHNoYWRvd01hcEVuYWJsZWQ6YS5zaGFkb3dNYXAuZW5hYmxlZCYmcS5yZWNlaXZlU2hhZG93JiYwPGYuc2hhZG93cy5sZW5ndGgsc2hhZG93TWFwVHlwZTphLnNoYWRvd01hcC50eXBlLHRvbmVNYXBwaW5nOmEudG9uZU1hcHBpbmcscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6YS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6ZC5wcmVtdWx0aXBsaWVkQWxwaGEsCmFscGhhVGVzdDpkLmFscGhhVGVzdCxkb3VibGVTaWRlZDoyPT09ZC5zaWRlLGZsaXBTaWRlZDoxPT09ZC5zaWRlLGRlcHRoUGFja2luZzp2b2lkIDAhPT1kLmRlcHRoUGFja2luZz9kLmRlcHRoUGFja2luZzohMX19O3RoaXMuZ2V0UHJvZ3JhbUNvZGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtiLnNoYWRlcklEP2MucHVzaChiLnNoYWRlcklEKTooYy5wdXNoKGEuZnJhZ21lbnRTaGFkZXIpLGMucHVzaChhLnZlcnRleFNoYWRlcikpO2lmKHZvaWQgMCE9PWEuZGVmaW5lcylmb3IodmFyIGQgaW4gYS5kZWZpbmVzKWMucHVzaChkKSxjLnB1c2goYS5kZWZpbmVzW2RdKTtmb3IoZD0wO2Q8Zi5sZW5ndGg7ZCsrKWMucHVzaChiW2ZbZF1dKTtyZXR1cm4gYy5qb2luKCl9O3RoaXMuYWNxdWlyZVByb2dyYW09ZnVuY3Rpb24oYixjLGUpe2Zvcih2YXIgZix1PTAscT1kLmxlbmd0aDt1PHE7dSsrKXt2YXIgbj1kW3VdO2lmKG4uY29kZT09PWUpe2Y9bjsrK2YudXNlZFRpbWVzO2JyZWFrfX12b2lkIDA9PT0KZiYmKGY9bmV3IGFnKGEsZSxiLGMpLGQucHVzaChmKSk7cmV0dXJuIGZ9O3RoaXMucmVsZWFzZVByb2dyYW09ZnVuY3Rpb24oYSl7aWYoMD09PS0tYS51c2VkVGltZXMpe3ZhciBiPWQuaW5kZXhPZihhKTtkW2JdPWRbZC5sZW5ndGgtMV07ZC5wb3AoKTthLmRlc3Ryb3koKX19O3RoaXMucHJvZ3JhbXM9ZH1mdW5jdGlvbiBkZyhhLGIsYyxkLGUsZixnKXtmdW5jdGlvbiBoKGEsYil7aWYoYS53aWR0aD5ifHxhLmhlaWdodD5iKXt2YXIgYz1iL01hdGgubWF4KGEud2lkdGgsYS5oZWlnaHQpLGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7ZC53aWR0aD1NYXRoLmZsb29yKGEud2lkdGgqYyk7ZC5oZWlnaHQ9TWF0aC5mbG9vcihhLmhlaWdodCpjKTtkLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKGEsMCwwLGEud2lkdGgsYS5oZWlnaHQsMCwwLGQud2lkdGgsZC5oZWlnaHQpO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogaW1hZ2UgaXMgdG9vIGJpZyAoIisKYS53aWR0aCsieCIrYS5oZWlnaHQrIikuIFJlc2l6ZWQgdG8gIitkLndpZHRoKyJ4IitkLmhlaWdodCxhKTtyZXR1cm4gZH1yZXR1cm4gYX1mdW5jdGlvbiBrKGEpe3JldHVybiBZLmlzUG93ZXJPZlR3byhhLndpZHRoKSYmWS5pc1Bvd2VyT2ZUd28oYS5oZWlnaHQpfWZ1bmN0aW9uIG0oYil7cmV0dXJuIDEwMDM9PT1ifHwxMDA0PT09Ynx8MTAwNT09PWI/YS5ORUFSRVNUOmEuTElORUFSfWZ1bmN0aW9uIHUoYil7Yj1iLnRhcmdldDtiLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHUpO2E6e3ZhciBjPWQuZ2V0KGIpO2lmKGIuaW1hZ2UmJmMuX19pbWFnZV9fd2ViZ2xUZXh0dXJlQ3ViZSlhLmRlbGV0ZVRleHR1cmUoYy5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlKTtlbHNle2lmKHZvaWQgMD09PWMuX193ZWJnbEluaXQpYnJlYWsgYTthLmRlbGV0ZVRleHR1cmUoYy5fX3dlYmdsVGV4dHVyZSl9ZC5yZW1vdmUoYil9Zy50ZXh0dXJlcy0tfWZ1bmN0aW9uIHEoYil7Yj1iLnRhcmdldDsKYi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixxKTt2YXIgYz1kLmdldChiKSxlPWQuZ2V0KGIudGV4dHVyZSk7aWYoYil7dm9pZCAwIT09ZS5fX3dlYmdsVGV4dHVyZSYmYS5kZWxldGVUZXh0dXJlKGUuX193ZWJnbFRleHR1cmUpO2IuZGVwdGhUZXh0dXJlJiZiLmRlcHRoVGV4dHVyZS5kaXNwb3NlKCk7aWYoYi5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZSlmb3IoZT0wOzY+ZTtlKyspYS5kZWxldGVGcmFtZWJ1ZmZlcihjLl9fd2ViZ2xGcmFtZWJ1ZmZlcltlXSksYy5fX3dlYmdsRGVwdGhidWZmZXImJmEuZGVsZXRlUmVuZGVyYnVmZmVyKGMuX193ZWJnbERlcHRoYnVmZmVyW2VdKTtlbHNlIGEuZGVsZXRlRnJhbWVidWZmZXIoYy5fX3dlYmdsRnJhbWVidWZmZXIpLGMuX193ZWJnbERlcHRoYnVmZmVyJiZhLmRlbGV0ZVJlbmRlcmJ1ZmZlcihjLl9fd2ViZ2xEZXB0aGJ1ZmZlcik7ZC5yZW1vdmUoYi50ZXh0dXJlKTtkLnJlbW92ZShiKX1nLnRleHR1cmVzLS19ZnVuY3Rpb24gbihiLAptKXt2YXIgbj1kLmdldChiKTtpZigwPGIudmVyc2lvbiYmbi5fX3ZlcnNpb24hPT1iLnZlcnNpb24pe3ZhciBxPWIuaW1hZ2U7aWYodm9pZCAwPT09cSljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCIsYik7ZWxzZSBpZighMT09PXEuY29tcGxldGUpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyBpbmNvbXBsZXRlIixiKTtlbHNle3ZvaWQgMD09PW4uX193ZWJnbEluaXQmJihuLl9fd2ViZ2xJbml0PSEwLGIuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdSksbi5fX3dlYmdsVGV4dHVyZT1hLmNyZWF0ZVRleHR1cmUoKSxnLnRleHR1cmVzKyspO2MuYWN0aXZlVGV4dHVyZShhLlRFWFRVUkUwK20pO2MuYmluZFRleHR1cmUoYS5URVhUVVJFXzJELG4uX193ZWJnbFRleHR1cmUpO2EucGl4ZWxTdG9yZWkoYS5VTlBBQ0tfRkxJUF9ZX1dFQkdMLApiLmZsaXBZKTthLnBpeGVsU3RvcmVpKGEuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLGIucHJlbXVsdGlwbHlBbHBoYSk7YS5waXhlbFN0b3JlaShhLlVOUEFDS19BTElHTk1FTlQsYi51bnBhY2tBbGlnbm1lbnQpO3ZhciBsPWgoYi5pbWFnZSxlLm1heFRleHR1cmVTaXplKTtpZigoMTAwMSE9PWIud3JhcFN8fDEwMDEhPT1iLndyYXBUfHwxMDAzIT09Yi5taW5GaWx0ZXImJjEwMDYhPT1iLm1pbkZpbHRlcikmJiExPT09ayhsKSlpZihxPWwscSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHEgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7dC53aWR0aD1ZLm5lYXJlc3RQb3dlck9mVHdvKHEud2lkdGgpO3QuaGVpZ2h0PVkubmVhcmVzdFBvd2VyT2ZUd28ocS5oZWlnaHQpO3QuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UocSwwLDAsCnQud2lkdGgsdC5oZWlnaHQpO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogaW1hZ2UgaXMgbm90IHBvd2VyIG9mIHR3byAoIitxLndpZHRoKyJ4IitxLmhlaWdodCsiKS4gUmVzaXplZCB0byAiK3Qud2lkdGgrIngiK3QuaGVpZ2h0LHEpO2w9dH1lbHNlIGw9cTt2YXIgcT1rKGwpLHQ9ZihiLmZvcm1hdCksej1mKGIudHlwZSk7cihhLlRFWFRVUkVfMkQsYixxKTt2YXIgRj1iLm1pcG1hcHM7aWYoYi5pc0RlcHRoVGV4dHVyZSl7Rj1hLkRFUFRIX0NPTVBPTkVOVDtpZigxMDE1PT09Yi50eXBlKXtpZighcCl0aHJvdyBFcnJvcigiRmxvYXQgRGVwdGggVGV4dHVyZSBvbmx5IHN1cHBvcnRlZCBpbiBXZWJHTDIuMCIpO0Y9YS5ERVBUSF9DT01QT05FTlQzMkZ9ZWxzZSBwJiYoRj1hLkRFUFRIX0NPTVBPTkVOVDE2KTsxMDI2PT09Yi5mb3JtYXQmJkY9PT1hLkRFUFRIX0NPTVBPTkVOVCYmMTAxMiE9PWIudHlwZSYmMTAxNCE9PWIudHlwZSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLApiLnR5cGU9MTAxMix6PWYoYi50eXBlKSk7MTAyNz09PWIuZm9ybWF0JiYoRj1hLkRFUFRIX1NURU5DSUwsMTAyMCE9PWIudHlwZSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkSW50MjQ4VHlwZSBmb3IgRGVwdGhTdGVuY2lsRm9ybWF0IERlcHRoVGV4dHVyZS4iKSxiLnR5cGU9MTAyMCx6PWYoYi50eXBlKSkpO2MudGV4SW1hZ2UyRChhLlRFWFRVUkVfMkQsMCxGLGwud2lkdGgsbC5oZWlnaHQsMCx0LHosbnVsbCl9ZWxzZSBpZihiLmlzRGF0YVRleHR1cmUpaWYoMDxGLmxlbmd0aCYmcSl7Zm9yKHZhciBhYT0wLFI9Ri5sZW5ndGg7YWE8UjthYSsrKWw9RlthYV0sYy50ZXhJbWFnZTJEKGEuVEVYVFVSRV8yRCxhYSx0LGwud2lkdGgsbC5oZWlnaHQsMCx0LHosbC5kYXRhKTtiLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIGMudGV4SW1hZ2UyRChhLlRFWFRVUkVfMkQsMCx0LGwud2lkdGgsbC5oZWlnaHQsMCx0LHosbC5kYXRhKTtlbHNlIGlmKGIuaXNDb21wcmVzc2VkVGV4dHVyZSlmb3IoYWE9CjAsUj1GLmxlbmd0aDthYTxSO2FhKyspbD1GW2FhXSwxMDIzIT09Yi5mb3JtYXQmJjEwMjIhPT1iLmZvcm1hdD8tMTxjLmdldENvbXByZXNzZWRUZXh0dXJlRm9ybWF0cygpLmluZGV4T2YodCk/Yy5jb21wcmVzc2VkVGV4SW1hZ2UyRChhLlRFWFRVUkVfMkQsYWEsdCxsLndpZHRoLGwuaGVpZ2h0LDAsbC5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC51cGxvYWRUZXh0dXJlKCkiKTpjLnRleEltYWdlMkQoYS5URVhUVVJFXzJELGFhLHQsbC53aWR0aCxsLmhlaWdodCwwLHQseixsLmRhdGEpO2Vsc2UgaWYoMDxGLmxlbmd0aCYmcSl7YWE9MDtmb3IoUj1GLmxlbmd0aDthYTxSO2FhKyspbD1GW2FhXSxjLnRleEltYWdlMkQoYS5URVhUVVJFXzJELGFhLHQsdCx6LGwpO2IuZ2VuZXJhdGVNaXBtYXBzPSExfWVsc2UgYy50ZXhJbWFnZTJEKGEuVEVYVFVSRV8yRCwKMCx0LHQseixsKTtiLmdlbmVyYXRlTWlwbWFwcyYmcSYmYS5nZW5lcmF0ZU1pcG1hcChhLlRFWFRVUkVfMkQpO24uX192ZXJzaW9uPWIudmVyc2lvbjtpZihiLm9uVXBkYXRlKWIub25VcGRhdGUoYik7cmV0dXJufX1jLmFjdGl2ZVRleHR1cmUoYS5URVhUVVJFMCttKTtjLmJpbmRUZXh0dXJlKGEuVEVYVFVSRV8yRCxuLl9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiByKGMsZyxoKXtoPyhhLnRleFBhcmFtZXRlcmkoYyxhLlRFWFRVUkVfV1JBUF9TLGYoZy53cmFwUykpLGEudGV4UGFyYW1ldGVyaShjLGEuVEVYVFVSRV9XUkFQX1QsZihnLndyYXBUKSksYS50ZXhQYXJhbWV0ZXJpKGMsYS5URVhUVVJFX01BR19GSUxURVIsZihnLm1hZ0ZpbHRlcikpLGEudGV4UGFyYW1ldGVyaShjLGEuVEVYVFVSRV9NSU5fRklMVEVSLGYoZy5taW5GaWx0ZXIpKSk6KGEudGV4UGFyYW1ldGVyaShjLGEuVEVYVFVSRV9XUkFQX1MsYS5DTEFNUF9UT19FREdFKSxhLnRleFBhcmFtZXRlcmkoYyxhLlRFWFRVUkVfV1JBUF9ULAphLkNMQU1QX1RPX0VER0UpLDEwMDE9PT1nLndyYXBTJiYxMDAxPT09Zy53cmFwVHx8Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIsZyksYS50ZXhQYXJhbWV0ZXJpKGMsYS5URVhUVVJFX01BR19GSUxURVIsbShnLm1hZ0ZpbHRlcikpLGEudGV4UGFyYW1ldGVyaShjLGEuVEVYVFVSRV9NSU5fRklMVEVSLG0oZy5taW5GaWx0ZXIpKSwxMDAzIT09Zy5taW5GaWx0ZXImJjEwMDYhPT1nLm1pbkZpbHRlciYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUubWluRmlsdGVyIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuTmVhcmVzdEZpbHRlciBvciBUSFJFRS5MaW5lYXJGaWx0ZXIuIixnKSk7IShoPWIuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSl8fAoxMDE1PT09Zy50eXBlJiZudWxsPT09Yi5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpfHwxMDE2PT09Zy50eXBlJiZudWxsPT09Yi5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIil8fCEoMTxnLmFuaXNvdHJvcHl8fGQuZ2V0KGcpLl9fY3VycmVudEFuaXNvdHJvcHkpfHwoYS50ZXhQYXJhbWV0ZXJmKGMsaC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbihnLmFuaXNvdHJvcHksZS5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxkLmdldChnKS5fX2N1cnJlbnRBbmlzb3Ryb3B5PWcuYW5pc290cm9weSl9ZnVuY3Rpb24gbChiLGUsZyxoKXt2YXIgaz1mKGUudGV4dHVyZS5mb3JtYXQpLG09ZihlLnRleHR1cmUudHlwZSk7Yy50ZXhJbWFnZTJEKGgsMCxrLGUud2lkdGgsZS5oZWlnaHQsMCxrLG0sbnVsbCk7YS5iaW5kRnJhbWVidWZmZXIoYS5GUkFNRUJVRkZFUixiKTthLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGEuRlJBTUVCVUZGRVIsZyxoLGQuZ2V0KGUudGV4dHVyZSkuX193ZWJnbFRleHR1cmUsCjApO2EuYmluZEZyYW1lYnVmZmVyKGEuRlJBTUVCVUZGRVIsbnVsbCl9ZnVuY3Rpb24gdChiLGMpe2EuYmluZFJlbmRlcmJ1ZmZlcihhLlJFTkRFUkJVRkZFUixiKTtjLmRlcHRoQnVmZmVyJiYhYy5zdGVuY2lsQnVmZmVyPyhhLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoYS5SRU5ERVJCVUZGRVIsYS5ERVBUSF9DT01QT05FTlQxNixjLndpZHRoLGMuaGVpZ2h0KSxhLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGEuRlJBTUVCVUZGRVIsYS5ERVBUSF9BVFRBQ0hNRU5ULGEuUkVOREVSQlVGRkVSLGIpKTpjLmRlcHRoQnVmZmVyJiZjLnN0ZW5jaWxCdWZmZXI/KGEucmVuZGVyYnVmZmVyU3RvcmFnZShhLlJFTkRFUkJVRkZFUixhLkRFUFRIX1NURU5DSUwsYy53aWR0aCxjLmhlaWdodCksYS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihhLkZSQU1FQlVGRkVSLGEuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULGEuUkVOREVSQlVGRkVSLGIpKTphLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoYS5SRU5ERVJCVUZGRVIsCmEuUkdCQTQsYy53aWR0aCxjLmhlaWdodCk7YS5iaW5kUmVuZGVyYnVmZmVyKGEuUkVOREVSQlVGRkVSLG51bGwpfXZhciBwPSJ1bmRlZmluZWQiIT09dHlwZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQmJmEgaW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0O3RoaXMuc2V0VGV4dHVyZTJEPW47dGhpcy5zZXRUZXh0dXJlQ3ViZT1mdW5jdGlvbihiLG0pe3ZhciBuPWQuZ2V0KGIpO2lmKDY9PT1iLmltYWdlLmxlbmd0aClpZigwPGIudmVyc2lvbiYmbi5fX3ZlcnNpb24hPT1iLnZlcnNpb24pe24uX19pbWFnZV9fd2ViZ2xUZXh0dXJlQ3ViZXx8KGIuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdSksbi5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlPWEuY3JlYXRlVGV4dHVyZSgpLGcudGV4dHVyZXMrKyk7Yy5hY3RpdmVUZXh0dXJlKGEuVEVYVFVSRTArbSk7Yy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfQ1VCRV9NQVAsbi5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlKTthLnBpeGVsU3RvcmVpKGEuVU5QQUNLX0ZMSVBfWV9XRUJHTCwKYi5mbGlwWSk7Zm9yKHZhciBxPWImJmIuaXNDb21wcmVzc2VkVGV4dHVyZSxsPWIuaW1hZ2VbMF0mJmIuaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSx0PVtdLHo9MDs2Pno7eisrKXRbel09cXx8bD9sP2IuaW1hZ2Vbel0uaW1hZ2U6Yi5pbWFnZVt6XTpoKGIuaW1hZ2Vbel0sZS5tYXhDdWJlbWFwU2l6ZSk7dmFyIHA9ayh0WzBdKSx5PWYoYi5mb3JtYXQpLFI9ZihiLnR5cGUpO3IoYS5URVhUVVJFX0NVQkVfTUFQLGIscCk7Zm9yKHo9MDs2Pno7eisrKWlmKHEpZm9yKHZhciBjYSxsYT10W3pdLm1pcG1hcHMsRD0wLEI9bGEubGVuZ3RoO0Q8QjtEKyspY2E9bGFbRF0sMTAyMyE9PWIuZm9ybWF0JiYxMDIyIT09Yi5mb3JtYXQ/LTE8Yy5nZXRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMoKS5pbmRleE9mKHkpP2MuY29tcHJlc3NlZFRleEltYWdlMkQoYS5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1greixELHksY2Eud2lkdGgsY2EuaGVpZ2h0LDAsY2EuZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAuc2V0VGV4dHVyZUN1YmUoKSIpOgpjLnRleEltYWdlMkQoYS5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1greixELHksY2Eud2lkdGgsY2EuaGVpZ2h0LDAseSxSLGNhLmRhdGEpO2Vsc2UgbD9jLnRleEltYWdlMkQoYS5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1greiwwLHksdFt6XS53aWR0aCx0W3pdLmhlaWdodCwwLHksUix0W3pdLmRhdGEpOmMudGV4SW1hZ2UyRChhLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCt6LDAseSx5LFIsdFt6XSk7Yi5nZW5lcmF0ZU1pcG1hcHMmJnAmJmEuZ2VuZXJhdGVNaXBtYXAoYS5URVhUVVJFX0NVQkVfTUFQKTtuLl9fdmVyc2lvbj1iLnZlcnNpb247aWYoYi5vblVwZGF0ZSliLm9uVXBkYXRlKGIpfWVsc2UgYy5hY3RpdmVUZXh0dXJlKGEuVEVYVFVSRTArbSksYy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfQ1VCRV9NQVAsbi5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlKX07dGhpcy5zZXRUZXh0dXJlQ3ViZUR5bmFtaWM9ZnVuY3Rpb24oYixlKXtjLmFjdGl2ZVRleHR1cmUoYS5URVhUVVJFMCsKZSk7Yy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfQ1VCRV9NQVAsZC5nZXQoYikuX193ZWJnbFRleHR1cmUpfTt0aGlzLnNldHVwUmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKGIpe3ZhciBlPWQuZ2V0KGIpLGY9ZC5nZXQoYi50ZXh0dXJlKTtiLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHEpO2YuX193ZWJnbFRleHR1cmU9YS5jcmVhdGVUZXh0dXJlKCk7Zy50ZXh0dXJlcysrO3ZhciBoPSEwPT09Yi5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZSxtPWsoYik7aWYoaCl7ZS5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKHZhciB1PTA7Nj51O3UrKyllLl9fd2ViZ2xGcmFtZWJ1ZmZlclt1XT1hLmNyZWF0ZUZyYW1lYnVmZmVyKCl9ZWxzZSBlLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1hLmNyZWF0ZUZyYW1lYnVmZmVyKCk7aWYoaCl7Yy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfQ1VCRV9NQVAsZi5fX3dlYmdsVGV4dHVyZSk7cihhLlRFWFRVUkVfQ1VCRV9NQVAsYi50ZXh0dXJlLG0pO2Zvcih1PTA7Nj51O3UrKylsKGUuX193ZWJnbEZyYW1lYnVmZmVyW3VdLApiLGEuQ09MT1JfQVRUQUNITUVOVDAsYS5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1grdSk7Yi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyYmbSYmYS5nZW5lcmF0ZU1pcG1hcChhLlRFWFRVUkVfQ1VCRV9NQVApO2MuYmluZFRleHR1cmUoYS5URVhUVVJFX0NVQkVfTUFQLG51bGwpfWVsc2UgYy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfMkQsZi5fX3dlYmdsVGV4dHVyZSkscihhLlRFWFRVUkVfMkQsYi50ZXh0dXJlLG0pLGwoZS5fX3dlYmdsRnJhbWVidWZmZXIsYixhLkNPTE9SX0FUVEFDSE1FTlQwLGEuVEVYVFVSRV8yRCksYi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyYmbSYmYS5nZW5lcmF0ZU1pcG1hcChhLlRFWFRVUkVfMkQpLGMuYmluZFRleHR1cmUoYS5URVhUVVJFXzJELG51bGwpO2lmKGIuZGVwdGhCdWZmZXIpe2U9ZC5nZXQoYik7Zj0hMD09PWIuaXNXZWJHTFJlbmRlclRhcmdldEN1YmU7aWYoYi5kZXB0aFRleHR1cmUpe2lmKGYpdGhyb3cgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7CmlmKGImJmIuaXNXZWJHTFJlbmRlclRhcmdldEN1YmUpdGhyb3cgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQhIik7YS5iaW5kRnJhbWVidWZmZXIoYS5GUkFNRUJVRkZFUixlLl9fd2ViZ2xGcmFtZWJ1ZmZlcik7aWYoIWIuZGVwdGhUZXh0dXJlfHwhYi5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpdGhyb3cgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTtkLmdldChiLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUmJmIuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPT09Yi53aWR0aCYmYi5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0PT09Yi5oZWlnaHR8fChiLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD1iLndpZHRoLGIuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD1iLmhlaWdodCxiLmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0KITApO24oYi5kZXB0aFRleHR1cmUsMCk7ZT1kLmdldChiLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU7aWYoMTAyNj09PWIuZGVwdGhUZXh0dXJlLmZvcm1hdClhLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGEuRlJBTUVCVUZGRVIsYS5ERVBUSF9BVFRBQ0hNRU5ULGEuVEVYVFVSRV8yRCxlLDApO2Vsc2UgaWYoMTAyNz09PWIuZGVwdGhUZXh0dXJlLmZvcm1hdClhLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGEuRlJBTUVCVUZGRVIsYS5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsYS5URVhUVVJFXzJELGUsMCk7ZWxzZSB0aHJvdyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iik7fWVsc2UgaWYoZilmb3IoZS5fX3dlYmdsRGVwdGhidWZmZXI9W10sZj0wOzY+ZjtmKyspYS5iaW5kRnJhbWVidWZmZXIoYS5GUkFNRUJVRkZFUixlLl9fd2ViZ2xGcmFtZWJ1ZmZlcltmXSksZS5fX3dlYmdsRGVwdGhidWZmZXJbZl09YS5jcmVhdGVSZW5kZXJidWZmZXIoKSx0KGUuX193ZWJnbERlcHRoYnVmZmVyW2ZdLApiKTtlbHNlIGEuYmluZEZyYW1lYnVmZmVyKGEuRlJBTUVCVUZGRVIsZS5fX3dlYmdsRnJhbWVidWZmZXIpLGUuX193ZWJnbERlcHRoYnVmZmVyPWEuY3JlYXRlUmVuZGVyYnVmZmVyKCksdChlLl9fd2ViZ2xEZXB0aGJ1ZmZlcixiKTthLmJpbmRGcmFtZWJ1ZmZlcihhLkZSQU1FQlVGRkVSLG51bGwpfX07dGhpcy51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXA9ZnVuY3Rpb24oYil7dmFyIGU9Yi50ZXh0dXJlO2UuZ2VuZXJhdGVNaXBtYXBzJiZrKGIpJiYxMDAzIT09ZS5taW5GaWx0ZXImJjEwMDYhPT1lLm1pbkZpbHRlciYmKGI9YiYmYi5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZT9hLlRFWFRVUkVfQ1VCRV9NQVA6YS5URVhUVVJFXzJELGU9ZC5nZXQoZSkuX193ZWJnbFRleHR1cmUsYy5iaW5kVGV4dHVyZShiLGUpLGEuZ2VuZXJhdGVNaXBtYXAoYiksYy5iaW5kVGV4dHVyZShiLG51bGwpKX19ZnVuY3Rpb24gZWcoKXt2YXIgYT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGIpe2I9Yi51dWlkOwp2YXIgYz1hW2JdO3ZvaWQgMD09PWMmJihjPXt9LGFbYl09Yyk7cmV0dXJuIGN9LHJlbW92ZTpmdW5jdGlvbihiKXtkZWxldGUgYVtiLnV1aWRdfSxjbGVhcjpmdW5jdGlvbigpe2E9e319fX1mdW5jdGlvbiBmZyhhLGIsYyl7ZnVuY3Rpb24gZChiLGMsZCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoNCksZj1hLmNyZWF0ZVRleHR1cmUoKTthLmJpbmRUZXh0dXJlKGIsZik7YS50ZXhQYXJhbWV0ZXJpKGIsYS5URVhUVVJFX01JTl9GSUxURVIsYS5ORUFSRVNUKTthLnRleFBhcmFtZXRlcmkoYixhLlRFWFRVUkVfTUFHX0ZJTFRFUixhLk5FQVJFU1QpO2ZvcihiPTA7YjxkO2IrKylhLnRleEltYWdlMkQoYytiLDAsYS5SR0JBLDEsMSwwLGEuUkdCQSxhLlVOU0lHTkVEX0JZVEUsZSk7cmV0dXJuIGZ9ZnVuY3Rpb24gZShiKXshMCE9PXZbYl0mJihhLmVuYWJsZShiKSx2W2JdPSEwKX1mdW5jdGlvbiBmKGIpeyExIT09dltiXSYmKGEuZGlzYWJsZShiKSx2W2JdPSExKX1mdW5jdGlvbiBnKGIsZCwKZyxoLGssbSxuLHUpezAhPT1iP2UoYS5CTEVORCk6ZihhLkJMRU5EKTtpZihiIT09d3x8dSE9PWNhKTI9PT1iP3U/KGEuYmxlbmRFcXVhdGlvblNlcGFyYXRlKGEuRlVOQ19BREQsYS5GVU5DX0FERCksYS5ibGVuZEZ1bmNTZXBhcmF0ZShhLk9ORSxhLk9ORSxhLk9ORSxhLk9ORSkpOihhLmJsZW5kRXF1YXRpb24oYS5GVU5DX0FERCksYS5ibGVuZEZ1bmMoYS5TUkNfQUxQSEEsYS5PTkUpKTozPT09Yj91PyhhLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShhLkZVTkNfQURELGEuRlVOQ19BREQpLGEuYmxlbmRGdW5jU2VwYXJhdGUoYS5aRVJPLGEuWkVSTyxhLk9ORV9NSU5VU19TUkNfQ09MT1IsYS5PTkVfTUlOVVNfU1JDX0FMUEhBKSk6KGEuYmxlbmRFcXVhdGlvbihhLkZVTkNfQUREKSxhLmJsZW5kRnVuYyhhLlpFUk8sYS5PTkVfTUlOVVNfU1JDX0NPTE9SKSk6ND09PWI/dT8oYS5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoYS5GVU5DX0FERCxhLkZVTkNfQUREKSxhLmJsZW5kRnVuY1NlcGFyYXRlKGEuWkVSTywKYS5TUkNfQ09MT1IsYS5aRVJPLGEuU1JDX0FMUEhBKSk6KGEuYmxlbmRFcXVhdGlvbihhLkZVTkNfQUREKSxhLmJsZW5kRnVuYyhhLlpFUk8sYS5TUkNfQ09MT1IpKTp1PyhhLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShhLkZVTkNfQURELGEuRlVOQ19BREQpLGEuYmxlbmRGdW5jU2VwYXJhdGUoYS5PTkUsYS5PTkVfTUlOVVNfU1JDX0FMUEhBLGEuT05FLGEuT05FX01JTlVTX1NSQ19BTFBIQSkpOihhLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShhLkZVTkNfQURELGEuRlVOQ19BREQpLGEuYmxlbmRGdW5jU2VwYXJhdGUoYS5TUkNfQUxQSEEsYS5PTkVfTUlOVVNfU1JDX0FMUEhBLGEuT05FLGEuT05FX01JTlVTX1NSQ19BTFBIQSkpLHc9YixjYT11O2lmKDU9PT1iKXtrPWt8fGQ7bT1tfHxnO249bnx8aDtpZihkIT09T3x8ayE9PUYpYS5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoYyhkKSxjKGspKSxPPWQsRj1rO2lmKGchPT1TfHxoIT09RXx8bSE9PWFhfHxuIT09UilhLmJsZW5kRnVuY1NlcGFyYXRlKGMoZyksCmMoaCksYyhtKSxjKG4pKSxTPWcsRT1oLGFhPW0sUj1ufWVsc2UgUj1hYT1GPUU9Uz1PPW51bGx9ZnVuY3Rpb24gaChiKXtsYSE9PWImJihiP2EuZnJvbnRGYWNlKGEuQ1cpOmEuZnJvbnRGYWNlKGEuQ0NXKSxsYT1iKX1mdW5jdGlvbiBrKGIpezAhPT1iPyhlKGEuQ1VMTF9GQUNFKSxiIT09RCYmKDE9PT1iP2EuY3VsbEZhY2UoYS5CQUNLKToyPT09Yj9hLmN1bGxGYWNlKGEuRlJPTlQpOmEuY3VsbEZhY2UoYS5GUk9OVF9BTkRfQkFDSykpKTpmKGEuQ1VMTF9GQUNFKTtEPWJ9ZnVuY3Rpb24gbShiLGMsZCl7aWYoYil7aWYoZShhLlBPTFlHT05fT0ZGU0VUX0ZJTEwpLEMhPT1jfHxQIT09ZClhLnBvbHlnb25PZmZzZXQoYyxkKSxDPWMsUD1kfWVsc2UgZihhLlBPTFlHT05fT0ZGU0VUX0ZJTEwpfWZ1bmN0aW9uIHUoYil7dm9pZCAwPT09YiYmKGI9YS5URVhUVVJFMCtXLTEpO1QhPT1iJiYoYS5hY3RpdmVUZXh0dXJlKGIpLFQ9Yil9dmFyIHE9bmV3IGZ1bmN0aW9uKCl7dmFyIGI9ITEsYz0KbmV3IGdhLGQ9bnVsbCxlPW5ldyBnYTtyZXR1cm57c2V0TWFzazpmdW5jdGlvbihjKXtkPT09Y3x8Ynx8KGEuY29sb3JNYXNrKGMsYyxjLGMpLGQ9Yyl9LHNldExvY2tlZDpmdW5jdGlvbihhKXtiPWF9LHNldENsZWFyOmZ1bmN0aW9uKGIsZCxmLGcsaCl7ITA9PT1oJiYoYio9ZyxkKj1nLGYqPWcpO2Muc2V0KGIsZCxmLGcpOyExPT09ZS5lcXVhbHMoYykmJihhLmNsZWFyQ29sb3IoYixkLGYsZyksZS5jb3B5KGMpKX0scmVzZXQ6ZnVuY3Rpb24oKXtiPSExO2Q9bnVsbDtlLnNldCgwLDAsMCwxKX19fSxuPW5ldyBmdW5jdGlvbigpe3ZhciBiPSExLGM9bnVsbCxkPW51bGwsZz1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKGIpe2I/ZShhLkRFUFRIX1RFU1QpOmYoYS5ERVBUSF9URVNUKX0sc2V0TWFzazpmdW5jdGlvbihkKXtjPT09ZHx8Ynx8KGEuZGVwdGhNYXNrKGQpLGM9ZCl9LHNldEZ1bmM6ZnVuY3Rpb24oYil7aWYoZCE9PWIpe2lmKGIpc3dpdGNoKGIpe2Nhc2UgMDphLmRlcHRoRnVuYyhhLk5FVkVSKTsKYnJlYWs7Y2FzZSAxOmEuZGVwdGhGdW5jKGEuQUxXQVlTKTticmVhaztjYXNlIDI6YS5kZXB0aEZ1bmMoYS5MRVNTKTticmVhaztjYXNlIDM6YS5kZXB0aEZ1bmMoYS5MRVFVQUwpO2JyZWFrO2Nhc2UgNDphLmRlcHRoRnVuYyhhLkVRVUFMKTticmVhaztjYXNlIDU6YS5kZXB0aEZ1bmMoYS5HRVFVQUwpO2JyZWFrO2Nhc2UgNjphLmRlcHRoRnVuYyhhLkdSRUFURVIpO2JyZWFrO2Nhc2UgNzphLmRlcHRoRnVuYyhhLk5PVEVRVUFMKTticmVhaztkZWZhdWx0OmEuZGVwdGhGdW5jKGEuTEVRVUFMKX1lbHNlIGEuZGVwdGhGdW5jKGEuTEVRVUFMKTtkPWJ9fSxzZXRMb2NrZWQ6ZnVuY3Rpb24oYSl7Yj1hfSxzZXRDbGVhcjpmdW5jdGlvbihiKXtnIT09YiYmKGEuY2xlYXJEZXB0aChiKSxnPWIpfSxyZXNldDpmdW5jdGlvbigpe2I9ITE7Zz1kPWM9bnVsbH19fSxyPW5ldyBmdW5jdGlvbigpe3ZhciBiPSExLGM9bnVsbCxkPW51bGwsZz1udWxsLGg9bnVsbCxrPW51bGwsbT1udWxsLG49bnVsbCwKdT1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKGIpe2I/ZShhLlNURU5DSUxfVEVTVCk6ZihhLlNURU5DSUxfVEVTVCl9LHNldE1hc2s6ZnVuY3Rpb24oZCl7Yz09PWR8fGJ8fChhLnN0ZW5jaWxNYXNrKGQpLGM9ZCl9LHNldEZ1bmM6ZnVuY3Rpb24oYixjLGUpe2lmKGQhPT1ifHxnIT09Y3x8aCE9PWUpYS5zdGVuY2lsRnVuYyhiLGMsZSksZD1iLGc9YyxoPWV9LHNldE9wOmZ1bmN0aW9uKGIsYyxkKXtpZihrIT09Ynx8bSE9PWN8fG4hPT1kKWEuc3RlbmNpbE9wKGIsYyxkKSxrPWIsbT1jLG49ZH0sc2V0TG9ja2VkOmZ1bmN0aW9uKGEpe2I9YX0sc2V0Q2xlYXI6ZnVuY3Rpb24oYil7dSE9PWImJihhLmNsZWFyU3RlbmNpbChiKSx1PWIpfSxyZXNldDpmdW5jdGlvbigpe2I9ITE7dT1uPW09az1oPWc9ZD1jPW51bGx9fX0sbD1hLmdldFBhcmFtZXRlcihhLk1BWF9WRVJURVhfQVRUUklCUyksdD1uZXcgVWludDhBcnJheShsKSxwPW5ldyBVaW50OEFycmF5KGwpLHg9bmV3IFVpbnQ4QXJyYXkobCksCnY9e30sRz1udWxsLHc9bnVsbCxPPW51bGwsUz1udWxsLEU9bnVsbCxGPW51bGwsYWE9bnVsbCxSPW51bGwsY2E9ITEsbGE9bnVsbCxEPW51bGwsQj1udWxsLEM9bnVsbCxQPW51bGwsSz1udWxsLFc9YS5nZXRQYXJhbWV0ZXIoYS5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyksbD1wYXJzZUZsb2F0KC9eV2ViR0xcIChbMC05XSkvLmV4ZWMoYS5nZXRQYXJhbWV0ZXIoYS5WRVJTSU9OKSlbMV0pLGJhPTE8PXBhcnNlRmxvYXQobCksVD1udWxsLFE9e30sST1uZXcgZ2EsSD1uZXcgZ2EsSj17fTtKW2EuVEVYVFVSRV8yRF09ZChhLlRFWFRVUkVfMkQsYS5URVhUVVJFXzJELDEpO0pbYS5URVhUVVJFX0NVQkVfTUFQXT1kKGEuVEVYVFVSRV9DVUJFX01BUCxhLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCw2KTtyZXR1cm57YnVmZmVyczp7Y29sb3I6cSxkZXB0aDpuLHN0ZW5jaWw6cn0saW5pdDpmdW5jdGlvbigpe3Euc2V0Q2xlYXIoMCwwLDAsMSk7bi5zZXRDbGVhcigxKTtyLnNldENsZWFyKDApOwplKGEuREVQVEhfVEVTVCk7bi5zZXRGdW5jKDMpO2goITEpO2soMSk7ZShhLkNVTExfRkFDRSk7ZShhLkJMRU5EKTtnKDEpfSxpbml0QXR0cmlidXRlczpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI9dC5sZW5ndGg7YTxiO2ErKyl0W2FdPTB9LGVuYWJsZUF0dHJpYnV0ZTpmdW5jdGlvbihjKXt0W2NdPTE7MD09PXBbY10mJihhLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGMpLHBbY109MSk7MCE9PXhbY10mJihiLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShjLDApLHhbY109MCl9LGVuYWJsZUF0dHJpYnV0ZUFuZERpdmlzb3I6ZnVuY3Rpb24oYyxkKXt0W2NdPTE7MD09PXBbY10mJihhLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGMpLHBbY109MSk7eFtjXSE9PWQmJihiLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShjLGQpLHhbY109ZCl9LGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPQowLGM9cC5sZW5ndGg7YiE9PWM7KytiKXBbYl0hPT10W2JdJiYoYS5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoYikscFtiXT0wKX0sZW5hYmxlOmUsZGlzYWJsZTpmLGdldENvbXByZXNzZWRUZXh0dXJlRm9ybWF0czpmdW5jdGlvbigpe2lmKG51bGw9PT1HJiYoRz1bXSxiLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fGIuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxiLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSkpZm9yKHZhciBjPWEuZ2V0UGFyYW1ldGVyKGEuQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMpLGQ9MDtkPGMubGVuZ3RoO2QrKylHLnB1c2goY1tkXSk7cmV0dXJuIEd9LHNldEJsZW5kaW5nOmcsc2V0TWF0ZXJpYWw6ZnVuY3Rpb24oYil7Mj09PWIuc2lkZT9mKGEuQ1VMTF9GQUNFKTplKGEuQ1VMTF9GQUNFKTtoKDE9PT1iLnNpZGUpOyEwPT09Yi50cmFuc3BhcmVudD9nKGIuYmxlbmRpbmcsYi5ibGVuZEVxdWF0aW9uLApiLmJsZW5kU3JjLGIuYmxlbmREc3QsYi5ibGVuZEVxdWF0aW9uQWxwaGEsYi5ibGVuZFNyY0FscGhhLGIuYmxlbmREc3RBbHBoYSxiLnByZW11bHRpcGxpZWRBbHBoYSk6ZygwKTtuLnNldEZ1bmMoYi5kZXB0aEZ1bmMpO24uc2V0VGVzdChiLmRlcHRoVGVzdCk7bi5zZXRNYXNrKGIuZGVwdGhXcml0ZSk7cS5zZXRNYXNrKGIuY29sb3JXcml0ZSk7bShiLnBvbHlnb25PZmZzZXQsYi5wb2x5Z29uT2Zmc2V0RmFjdG9yLGIucG9seWdvbk9mZnNldFVuaXRzKX0sc2V0RmxpcFNpZGVkOmgsc2V0Q3VsbEZhY2U6ayxzZXRMaW5lV2lkdGg6ZnVuY3Rpb24oYil7YiE9PUImJihiYSYmYS5saW5lV2lkdGgoYiksQj1iKX0sc2V0UG9seWdvbk9mZnNldDptLGdldFNjaXNzb3JUZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIEt9LHNldFNjaXNzb3JUZXN0OmZ1bmN0aW9uKGIpeyhLPWIpP2UoYS5TQ0lTU09SX1RFU1QpOmYoYS5TQ0lTU09SX1RFU1QpfSxhY3RpdmVUZXh0dXJlOnUsYmluZFRleHR1cmU6ZnVuY3Rpb24oYiwKYyl7bnVsbD09PVQmJnUoKTt2YXIgZD1RW1RdO3ZvaWQgMD09PWQmJihkPXt0eXBlOnZvaWQgMCx0ZXh0dXJlOnZvaWQgMH0sUVtUXT1kKTtpZihkLnR5cGUhPT1ifHxkLnRleHR1cmUhPT1jKWEuYmluZFRleHR1cmUoYixjfHxKW2JdKSxkLnR5cGU9YixkLnRleHR1cmU9Y30sY29tcHJlc3NlZFRleEltYWdlMkQ6ZnVuY3Rpb24oKXt0cnl7YS5jb21wcmVzc2VkVGV4SW1hZ2UyRC5hcHBseShhLGFyZ3VtZW50cyl9Y2F0Y2goYil7Y29uc29sZS5lcnJvcihiKX19LHRleEltYWdlMkQ6ZnVuY3Rpb24oKXt0cnl7YS50ZXhJbWFnZTJELmFwcGx5KGEsYXJndW1lbnRzKX1jYXRjaChiKXtjb25zb2xlLmVycm9yKGIpfX0sc2Npc3NvcjpmdW5jdGlvbihiKXshMT09PUkuZXF1YWxzKGIpJiYoYS5zY2lzc29yKGIueCxiLnksYi56LGIudyksSS5jb3B5KGIpKX0sdmlld3BvcnQ6ZnVuY3Rpb24oYil7ITE9PT1ILmVxdWFscyhiKSYmKGEudmlld3BvcnQoYi54LGIueSxiLnosYi53KSxILmNvcHkoYikpfSwKcmVzZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKykxPT09cFtiXSYmKGEuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGIpLHBbYl09MCk7dj17fTtUPUc9bnVsbDtRPXt9O0Q9bGE9dz1udWxsO3EucmVzZXQoKTtuLnJlc2V0KCk7ci5yZXNldCgpfX19ZnVuY3Rpb24gZ2coYSxiLGMpe2Z1bmN0aW9uIGQoYil7aWYoImhpZ2hwIj09PWIpe2lmKDA8YS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoYS5WRVJURVhfU0hBREVSLGEuSElHSF9GTE9BVCkucHJlY2lzaW9uJiYwPGEuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KGEuRlJBR01FTlRfU0hBREVSLGEuSElHSF9GTE9BVCkucHJlY2lzaW9uKXJldHVybiJoaWdocCI7Yj0ibWVkaXVtcCJ9cmV0dXJuIm1lZGl1bXAiPT09YiYmMDxhLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChhLlZFUlRFWF9TSEFERVIsYS5NRURJVU1fRkxPQVQpLnByZWNpc2lvbiYmMDxhLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChhLkZSQUdNRU5UX1NIQURFUiwKYS5NRURJVU1fRkxPQVQpLnByZWNpc2lvbj8ibWVkaXVtcCI6Imxvd3AifXZhciBlLGY9dm9pZCAwIT09Yy5wcmVjaXNpb24/Yy5wcmVjaXNpb246ImhpZ2hwIixnPWQoZik7ZyE9PWYmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IixmLCJub3Qgc3VwcG9ydGVkLCB1c2luZyIsZywiaW5zdGVhZC4iKSxmPWcpO2M9ITA9PT1jLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJiEhYi5nZXQoIkVYVF9mcmFnX2RlcHRoIik7dmFyIGc9YS5nZXRQYXJhbWV0ZXIoYS5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyksaD1hLmdldFBhcmFtZXRlcihhLk1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyksaz1hLmdldFBhcmFtZXRlcihhLk1BWF9URVhUVVJFX1NJWkUpLG09YS5nZXRQYXJhbWV0ZXIoYS5NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFKSx1PWEuZ2V0UGFyYW1ldGVyKGEuTUFYX1ZFUlRFWF9BVFRSSUJTKSxxPWEuZ2V0UGFyYW1ldGVyKGEuTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMpLApuPWEuZ2V0UGFyYW1ldGVyKGEuTUFYX1ZBUllJTkdfVkVDVE9SUykscj1hLmdldFBhcmFtZXRlcihhLk1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMpLGw9MDxoLHQ9ISFiLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKTtyZXR1cm57Z2V0TWF4QW5pc290cm9weTpmdW5jdGlvbigpe2lmKHZvaWQgMCE9PWUpcmV0dXJuIGU7dmFyIGM9Yi5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO3JldHVybiBlPW51bGwhPT1jP2EuZ2V0UGFyYW1ldGVyKGMuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTowfSxnZXRNYXhQcmVjaXNpb246ZCxwcmVjaXNpb246Zixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmMsbWF4VGV4dHVyZXM6ZyxtYXhWZXJ0ZXhUZXh0dXJlczpoLG1heFRleHR1cmVTaXplOmssbWF4Q3ViZW1hcFNpemU6bSxtYXhBdHRyaWJ1dGVzOnUsbWF4VmVydGV4VW5pZm9ybXM6cSxtYXhWYXJ5aW5nczpuLG1heEZyYWdtZW50VW5pZm9ybXM6cix2ZXJ0ZXhUZXh0dXJlczpsLApmbG9hdEZyYWdtZW50VGV4dHVyZXM6dCxmbG9hdFZlcnRleFRleHR1cmVzOmwmJnR9fWZ1bmN0aW9uIGhnKGEpe3ZhciBiPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24oYyl7aWYodm9pZCAwIT09YltjXSlyZXR1cm4gYltjXTt2YXIgZDtzd2l0Y2goYyl7Y2FzZSAiV0VCR0xfZGVwdGhfdGV4dHVyZSI6ZD1hLmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxhLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2RlcHRoX3RleHR1cmUiKXx8YS5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlIik7YnJlYWs7Y2FzZSAiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjpkPWEuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8YS5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8YS5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTsKYnJlYWs7Y2FzZSAiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiOmQ9YS5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fGEuZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8YS5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpO2JyZWFrO2Nhc2UgIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6ZD1hLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fGEuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7Y2FzZSAiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiOmQ9YS5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIik7YnJlYWs7ZGVmYXVsdDpkPWEuZ2V0RXh0ZW5zaW9uKGMpfW51bGw9PT1kJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrCmMrIiBleHRlbnNpb24gbm90IHN1cHBvcnRlZC4iKTtyZXR1cm4gYltjXT1kfX19ZnVuY3Rpb24gaWcoKXtmdW5jdGlvbiBhKCl7bS52YWx1ZSE9PWQmJihtLnZhbHVlPWQsbS5uZWVkc1VwZGF0ZT0wPGUpO2MubnVtUGxhbmVzPWU7Yy5udW1JbnRlcnNlY3Rpb249MH1mdW5jdGlvbiBiKGEsYixkLGUpe3ZhciBmPW51bGwhPT1hP2EubGVuZ3RoOjAsZz1udWxsO2lmKDAhPT1mKXtnPW0udmFsdWU7aWYoITAhPT1lfHxudWxsPT09Zyl7ZT1kKzQqZjtiPWIubWF0cml4V29ybGRJbnZlcnNlO2suZ2V0Tm9ybWFsTWF0cml4KGIpO2lmKG51bGw9PT1nfHxnLmxlbmd0aDxlKWc9bmV3IEZsb2F0MzJBcnJheShlKTtmb3IoZT0wO2UhPT1mOysrZSxkKz00KWguY29weShhW2VdKS5hcHBseU1hdHJpeDQoYixrKSxoLm5vcm1hbC50b0FycmF5KGcsZCksZ1tkKzNdPWguY29uc3RhbnR9bS52YWx1ZT1nO20ubmVlZHNVcGRhdGU9ITB9Yy5udW1QbGFuZXM9ZjtyZXR1cm4gZ312YXIgYz10aGlzLGQ9bnVsbCwKZT0wLGY9ITEsZz0hMSxoPW5ldyB3YSxrPW5ldyBLYSxtPXt2YWx1ZTpudWxsLG5lZWRzVXBkYXRlOiExfTt0aGlzLnVuaWZvcm09bTt0aGlzLm51bUludGVyc2VjdGlvbj10aGlzLm51bVBsYW5lcz0wO3RoaXMuaW5pdD1mdW5jdGlvbihhLGMsZyl7dmFyIGg9MCE9PWEubGVuZ3RofHxjfHwwIT09ZXx8ZjtmPWM7ZD1iKGEsZywwKTtlPWEubGVuZ3RoO3JldHVybiBofTt0aGlzLmJlZ2luU2hhZG93cz1mdW5jdGlvbigpe2c9ITA7YihudWxsKX07dGhpcy5lbmRTaGFkb3dzPWZ1bmN0aW9uKCl7Zz0hMTthKCl9O3RoaXMuc2V0U3RhdGU9ZnVuY3Rpb24oYyxoLGsscixsLHQpe2lmKCFmfHxudWxsPT09Y3x8MD09PWMubGVuZ3RofHxnJiYhaylnP2IobnVsbCk6YSgpO2Vsc2V7az1nPzA6ZTt2YXIgcD00KmsseD1sLmNsaXBwaW5nU3RhdGV8fG51bGw7bS52YWx1ZT14O3g9YihjLHIscCx0KTtmb3IoYz0wO2MhPT1wOysrYyl4W2NdPWRbY107bC5jbGlwcGluZ1N0YXRlPXg7dGhpcy5udW1JbnRlcnNlY3Rpb249Cmg/dGhpcy5udW1QbGFuZXM6MDt0aGlzLm51bVBsYW5lcys9a319fWZ1bmN0aW9uIFhkKGEpe2Z1bmN0aW9uIGIoKXtmYS5pbml0KCk7ZmEuc2Npc3NvcihRLmNvcHkoaGEpLm11bHRpcGx5U2NhbGFyKGthKSk7ZmEudmlld3BvcnQoWi5jb3B5KHpjKS5tdWx0aXBseVNjYWxhcihrYSkpO2ZhLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoSWEucixJYS5nLElhLmIsWCxFKX1mdW5jdGlvbiBjKCl7VD1NPW51bGw7YmE9IiI7Vz0tMTtmYS5yZXNldCgpfWZ1bmN0aW9uIGQoYSl7YS5wcmV2ZW50RGVmYXVsdCgpO2MoKTtiKCk7aWEuY2xlYXIoKTt3YS5jbGVhcigpfWZ1bmN0aW9uIGUoYSl7YT1hLnRhcmdldDthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGUpO2YoYSk7aWEucmVtb3ZlKGEpfWZ1bmN0aW9uIGYoYSl7dmFyIGI9aWEuZ2V0KGEpLnByb2dyYW07YS5wcm9ncmFtPXZvaWQgMDt2b2lkIDAhPT1iJiZ5YS5yZWxlYXNlUHJvZ3JhbShiKX1mdW5jdGlvbiBnKGEsYixjKXthLnJlbmRlcihmdW5jdGlvbihhKXtDLnJlbmRlckJ1ZmZlckltbWVkaWF0ZShhLApiLGMpfSl9ZnVuY3Rpb24gaChhLGIpe3JldHVybiBNYXRoLmFicyhiWzBdKS1NYXRoLmFicyhhWzBdKX1mdW5jdGlvbiBrKGEsYixjKXtpZihhLnZpc2libGUpe2lmKGEubGF5ZXJzLnRlc3QoYi5sYXllcnMpKWlmKGEuaXNMaWdodClhYS5wdXNoKGEpO2Vsc2UgaWYoYS5pc1Nwcml0ZSlhLmZydXN0dW1DdWxsZWQmJiFtYS5pbnRlcnNlY3RzU3ByaXRlKGEpfHxELnB1c2goYSk7ZWxzZSBpZihhLmlzTGVuc0ZsYXJlKUIucHVzaChhKTtlbHNlIGlmKGEuaXNJbW1lZGlhdGVSZW5kZXJPYmplY3QpYyYmUWEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGEubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChsZCksUi5wdXNoKGEsbnVsbCxhLm1hdGVyaWFsLFFhLnosbnVsbCk7ZWxzZSBpZihhLmlzTWVzaHx8YS5pc0xpbmV8fGEuaXNQb2ludHMpaWYoYS5pc1NraW5uZWRNZXNoJiZhLnNrZWxldG9uLnVwZGF0ZSgpLCFhLmZydXN0dW1DdWxsZWR8fG1hLmludGVyc2VjdHNPYmplY3QoYSkpe2MmJlFhLnNldEZyb21NYXRyaXhQb3NpdGlvbihhLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQobGQpOwp2YXIgZD13YS51cGRhdGUoYSksZT1hLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBmPWQuZ3JvdXBzLGc9MCxoPWYubGVuZ3RoO2c8aDtnKyspe3ZhciBtPWZbZ10sbj1lW20ubWF0ZXJpYWxJbmRleF07biYmbi52aXNpYmxlJiZSLnB1c2goYSxkLG4sUWEueixtKX1lbHNlIGUudmlzaWJsZSYmUi5wdXNoKGEsZCxlLFFhLnosbnVsbCl9YT1hLmNoaWxkcmVuO2c9MDtmb3IoaD1hLmxlbmd0aDtnPGg7ZysrKWsoYVtnXSxiLGMpfX1mdW5jdGlvbiBtKGEsYixjLGQpe2Zvcih2YXIgZT0wLGY9YS5sZW5ndGg7ZTxmO2UrKyl7dmFyIGc9YVtlXSxoPWcub2JqZWN0LGs9Zy5nZW9tZXRyeSxtPXZvaWQgMD09PWQ/Zy5tYXRlcmlhbDpkLGc9Zy5ncm91cDtoLm9uQmVmb3JlUmVuZGVyKEMsYixjLGssbSxnKTtpZihjLmlzQXJyYXlDYW1lcmEmJmMuZW5hYmxlZClmb3IodmFyIG49Yy5jYW1lcmFzLHE9MCxyPW4ubGVuZ3RoO3E8cjtxKyspe3ZhciBsPW5bcV0sdD1sLmJvdW5kczsKQy5zZXRWaWV3cG9ydCh0LngqTiprYSx0LnkqZGEqa2EsdC56Kk4qa2EsdC53KmRhKmthKTtDLnNldFNjaXNzb3IodC54Kk4qa2EsdC55KmRhKmthLHQueipOKmthLHQudypkYSprYSk7Qy5zZXRTY2lzc29yVGVzdCghMCk7dShoLGIsbCxrLG0sZyl9ZWxzZSB1KGgsYixjLGssbSxnKTtoLm9uQWZ0ZXJSZW5kZXIoQyxiLGMsayxtLGcpfX1mdW5jdGlvbiB1KGEsYixjLGQsZSxmKXthLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKGMubWF0cml4V29ybGRJbnZlcnNlLGEubWF0cml4V29ybGQpO2Eubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeChhLm1vZGVsVmlld01hdHJpeCk7YS5pc0ltbWVkaWF0ZVJlbmRlck9iamVjdD8oZmEuc2V0TWF0ZXJpYWwoZSksYj1uKGMsYi5mb2csZSxhKSxiYT0iIixnKGEsYixlKSk6Qy5yZW5kZXJCdWZmZXJEaXJlY3QoYyxiLmZvZyxkLGUsYSxmKX1mdW5jdGlvbiBxKGEsYixjKXt2YXIgZD1pYS5nZXQoYSk7Yz15YS5nZXRQYXJhbWV0ZXJzKGEsCmVhLGIsUGEubnVtUGxhbmVzLFBhLm51bUludGVyc2VjdGlvbixjKTt2YXIgZz15YS5nZXRQcm9ncmFtQ29kZShhLGMpLGg9ZC5wcm9ncmFtLGs9ITA7aWYodm9pZCAwPT09aClhLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGUpO2Vsc2UgaWYoaC5jb2RlIT09ZylmKGEpO2Vsc2V7aWYodm9pZCAwIT09Yy5zaGFkZXJJRClyZXR1cm47az0hMX1rJiYoYy5zaGFkZXJJRD8oaD1hYltjLnNoYWRlcklEXSxkLl9fd2ViZ2xTaGFkZXI9e25hbWU6YS50eXBlLHVuaWZvcm1zOkhhLmNsb25lKGgudW5pZm9ybXMpLHZlcnRleFNoYWRlcjpoLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpoLmZyYWdtZW50U2hhZGVyfSk6ZC5fX3dlYmdsU2hhZGVyPXtuYW1lOmEudHlwZSx1bmlmb3JtczphLnVuaWZvcm1zLHZlcnRleFNoYWRlcjphLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjphLmZyYWdtZW50U2hhZGVyfSxhLl9fd2ViZ2xTaGFkZXI9ZC5fX3dlYmdsU2hhZGVyLGg9eWEuYWNxdWlyZVByb2dyYW0oYSwKYyxnKSxkLnByb2dyYW09aCxhLnByb2dyYW09aCk7Yz1oLmdldEF0dHJpYnV0ZXMoKTtpZihhLm1vcnBoVGFyZ2V0cylmb3IoZz1hLm51bVN1cHBvcnRlZE1vcnBoVGFyZ2V0cz0wO2c8Qy5tYXhNb3JwaFRhcmdldHM7ZysrKTA8PWNbIm1vcnBoVGFyZ2V0IitnXSYmYS5udW1TdXBwb3J0ZWRNb3JwaFRhcmdldHMrKztpZihhLm1vcnBoTm9ybWFscylmb3IoZz1hLm51bVN1cHBvcnRlZE1vcnBoTm9ybWFscz0wO2c8Qy5tYXhNb3JwaE5vcm1hbHM7ZysrKTA8PWNbIm1vcnBoTm9ybWFsIitnXSYmYS5udW1TdXBwb3J0ZWRNb3JwaE5vcm1hbHMrKztjPWQuX193ZWJnbFNoYWRlci51bmlmb3JtcztpZighYS5pc1NoYWRlck1hdGVyaWFsJiYhYS5pc1Jhd1NoYWRlck1hdGVyaWFsfHwhMD09PWEuY2xpcHBpbmcpZC5udW1DbGlwcGluZ1BsYW5lcz1QYS5udW1QbGFuZXMsZC5udW1JbnRlcnNlY3Rpb249UGEubnVtSW50ZXJzZWN0aW9uLGMuY2xpcHBpbmdQbGFuZXM9UGEudW5pZm9ybTtkLmZvZz0KYjtkLmxpZ2h0c0hhc2g9ZWEuaGFzaDthLmxpZ2h0cyYmKGMuYW1iaWVudExpZ2h0Q29sb3IudmFsdWU9ZWEuYW1iaWVudCxjLmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPWVhLmRpcmVjdGlvbmFsLGMuc3BvdExpZ2h0cy52YWx1ZT1lYS5zcG90LGMucmVjdEFyZWFMaWdodHMudmFsdWU9ZWEucmVjdEFyZWEsYy5wb2ludExpZ2h0cy52YWx1ZT1lYS5wb2ludCxjLmhlbWlzcGhlcmVMaWdodHMudmFsdWU9ZWEuaGVtaSxjLmRpcmVjdGlvbmFsU2hhZG93TWFwLnZhbHVlPWVhLmRpcmVjdGlvbmFsU2hhZG93TWFwLGMuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWU9ZWEuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsYy5zcG90U2hhZG93TWFwLnZhbHVlPWVhLnNwb3RTaGFkb3dNYXAsYy5zcG90U2hhZG93TWF0cml4LnZhbHVlPWVhLnNwb3RTaGFkb3dNYXRyaXgsYy5wb2ludFNoYWRvd01hcC52YWx1ZT1lYS5wb2ludFNoYWRvd01hcCxjLnBvaW50U2hhZG93TWF0cml4LnZhbHVlPWVhLnBvaW50U2hhZG93TWF0cml4KTsKYT1kLnByb2dyYW0uZ2V0VW5pZm9ybXMoKTthPWZiLnNlcVdpdGhWYWx1ZShhLnNlcSxjKTtkLnVuaWZvcm1zTGlzdD1hfWZ1bmN0aW9uIG4oYSxiLGMsZCl7VT0wO3ZhciBlPWlhLmdldChjKTtrZCYmKFdkfHxhIT09VCkmJlBhLnNldFN0YXRlKGMuY2xpcHBpbmdQbGFuZXMsYy5jbGlwSW50ZXJzZWN0aW9uLGMuY2xpcFNoYWRvd3MsYSxlLGE9PT1UJiZjLmlkPT09Vyk7ITE9PT1jLm5lZWRzVXBkYXRlJiYodm9pZCAwPT09ZS5wcm9ncmFtP2MubmVlZHNVcGRhdGU9ITA6Yy5mb2cmJmUuZm9nIT09Yj9jLm5lZWRzVXBkYXRlPSEwOmMubGlnaHRzJiZlLmxpZ2h0c0hhc2ghPT1lYS5oYXNoP2MubmVlZHNVcGRhdGU9ITA6dm9pZCAwPT09ZS5udW1DbGlwcGluZ1BsYW5lc3x8ZS5udW1DbGlwcGluZ1BsYW5lcz09PVBhLm51bVBsYW5lcyYmZS5udW1JbnRlcnNlY3Rpb249PT1QYS5udW1JbnRlcnNlY3Rpb258fChjLm5lZWRzVXBkYXRlPSEwKSk7Yy5uZWVkc1VwZGF0ZSYmKHEoYyxiLGQpLApjLm5lZWRzVXBkYXRlPSExKTt2YXIgZj0hMSxnPSExLGg9ITEsaz1lLnByb2dyYW0sbT1rLmdldFVuaWZvcm1zKCksbj1lLl9fd2ViZ2xTaGFkZXIudW5pZm9ybXM7ay5pZCE9PU0mJihBLnVzZVByb2dyYW0oay5wcm9ncmFtKSxNPWsuaWQsaD1nPWY9ITApO2MuaWQhPT1XJiYoVz1jLmlkLGc9ITApO2lmKGZ8fGEhPT1UKXttLnNldFZhbHVlKEEsInByb2plY3Rpb25NYXRyaXgiLGEucHJvamVjdGlvbk1hdHJpeCk7bmEubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmbS5zZXRWYWx1ZShBLCJsb2dEZXB0aEJ1ZkZDIiwyLyhNYXRoLmxvZyhhLmZhcisxKS9NYXRoLkxOMikpO2EhPT1UJiYoVD1hLGg9Zz0hMCk7aWYoYy5pc1NoYWRlck1hdGVyaWFsfHxjLmlzTWVzaFBob25nTWF0ZXJpYWx8fGMuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8Yy5lbnZNYXApZj1tLm1hcC5jYW1lcmFQb3NpdGlvbix2b2lkIDAhPT1mJiZmLnNldFZhbHVlKEEsUWEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGEubWF0cml4V29ybGQpKTsKKGMuaXNNZXNoUGhvbmdNYXRlcmlhbHx8Yy5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fGMuaXNNZXNoQmFzaWNNYXRlcmlhbHx8Yy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxjLmlzU2hhZGVyTWF0ZXJpYWx8fGMuc2tpbm5pbmcpJiZtLnNldFZhbHVlKEEsInZpZXdNYXRyaXgiLGEubWF0cml4V29ybGRJbnZlcnNlKTttLnNldFZhbHVlKEEsInRvbmVNYXBwaW5nRXhwb3N1cmUiLEMudG9uZU1hcHBpbmdFeHBvc3VyZSk7bS5zZXRWYWx1ZShBLCJ0b25lTWFwcGluZ1doaXRlUG9pbnQiLEMudG9uZU1hcHBpbmdXaGl0ZVBvaW50KX1pZihjLnNraW5uaW5nJiYobS5zZXRPcHRpb25hbChBLGQsImJpbmRNYXRyaXgiKSxtLnNldE9wdGlvbmFsKEEsZCwiYmluZE1hdHJpeEludmVyc2UiKSxhPWQuc2tlbGV0b24pKWlmKGY9YS5ib25lcyxuYS5mbG9hdFZlcnRleFRleHR1cmVzKXtpZih2b2lkIDA9PT1hLmJvbmVUZXh0dXJlKXt2YXIgZj1NYXRoLnNxcnQoNCpmLmxlbmd0aCksZj1ZLm5leHRQb3dlck9mVHdvKE1hdGguY2VpbChmKSksCmY9TWF0aC5tYXgoZiw0KSx1PW5ldyBGbG9hdDMyQXJyYXkoZipmKjQpO3Uuc2V0KGEuYm9uZU1hdHJpY2VzKTt2YXIgdD1uZXcgZWIodSxmLGYsMTAyMywxMDE1KTthLmJvbmVNYXRyaWNlcz11O2EuYm9uZVRleHR1cmU9dDthLmJvbmVUZXh0dXJlU2l6ZT1mfW0uc2V0VmFsdWUoQSwiYm9uZVRleHR1cmUiLGEuYm9uZVRleHR1cmUpO20uc2V0VmFsdWUoQSwiYm9uZVRleHR1cmVTaXplIixhLmJvbmVUZXh0dXJlU2l6ZSl9ZWxzZSBtLnNldE9wdGlvbmFsKEEsYSwiYm9uZU1hdHJpY2VzIik7aWYoZyl7Yy5saWdodHMmJihnPWgsbi5hbWJpZW50TGlnaHRDb2xvci5uZWVkc1VwZGF0ZT1nLG4uZGlyZWN0aW9uYWxMaWdodHMubmVlZHNVcGRhdGU9ZyxuLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPWcsbi5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPWcsbi5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1nLG4uaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1nKTtiJiZjLmZvZyYmKG4uZm9nQ29sb3IudmFsdWU9CmIuY29sb3IsYi5pc0ZvZz8obi5mb2dOZWFyLnZhbHVlPWIubmVhcixuLmZvZ0Zhci52YWx1ZT1iLmZhcik6Yi5pc0ZvZ0V4cDImJihuLmZvZ0RlbnNpdHkudmFsdWU9Yi5kZW5zaXR5KSk7aWYoYy5pc01lc2hCYXNpY01hdGVyaWFsfHxjLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8Yy5pc01lc2hQaG9uZ01hdGVyaWFsfHxjLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fGMuaXNNZXNoTm9ybWFsTWF0ZXJpYWx8fGMuaXNNZXNoRGVwdGhNYXRlcmlhbCl7bi5vcGFjaXR5LnZhbHVlPWMub3BhY2l0eTtuLmRpZmZ1c2UudmFsdWU9Yy5jb2xvcjtjLmVtaXNzaXZlJiZuLmVtaXNzaXZlLnZhbHVlLmNvcHkoYy5lbWlzc2l2ZSkubXVsdGlwbHlTY2FsYXIoYy5lbWlzc2l2ZUludGVuc2l0eSk7bi5tYXAudmFsdWU9Yy5tYXA7bi5zcGVjdWxhck1hcC52YWx1ZT1jLnNwZWN1bGFyTWFwO24uYWxwaGFNYXAudmFsdWU9Yy5hbHBoYU1hcDtjLmxpZ2h0TWFwJiYobi5saWdodE1hcC52YWx1ZT1jLmxpZ2h0TWFwLApuLmxpZ2h0TWFwSW50ZW5zaXR5LnZhbHVlPWMubGlnaHRNYXBJbnRlbnNpdHkpO2MuYW9NYXAmJihuLmFvTWFwLnZhbHVlPWMuYW9NYXAsbi5hb01hcEludGVuc2l0eS52YWx1ZT1jLmFvTWFwSW50ZW5zaXR5KTt2YXIgcDtjLm1hcD9wPWMubWFwOmMuc3BlY3VsYXJNYXA/cD1jLnNwZWN1bGFyTWFwOmMuZGlzcGxhY2VtZW50TWFwP3A9Yy5kaXNwbGFjZW1lbnRNYXA6Yy5ub3JtYWxNYXA/cD1jLm5vcm1hbE1hcDpjLmJ1bXBNYXA/cD1jLmJ1bXBNYXA6Yy5yb3VnaG5lc3NNYXA/cD1jLnJvdWdobmVzc01hcDpjLm1ldGFsbmVzc01hcD9wPWMubWV0YWxuZXNzTWFwOmMuYWxwaGFNYXA/cD1jLmFscGhhTWFwOmMuZW1pc3NpdmVNYXAmJihwPWMuZW1pc3NpdmVNYXApO3ZvaWQgMCE9PXAmJihwLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihwPXAudGV4dHVyZSksYj1wLm9mZnNldCxwPXAucmVwZWF0LG4ub2Zmc2V0UmVwZWF0LnZhbHVlLnNldChiLngsYi55LHAueCxwLnkpKTtuLmVudk1hcC52YWx1ZT0KYy5lbnZNYXA7bi5mbGlwRW52TWFwLnZhbHVlPWMuZW52TWFwJiZjLmVudk1hcC5pc0N1YmVUZXh0dXJlPy0xOjE7bi5yZWZsZWN0aXZpdHkudmFsdWU9Yy5yZWZsZWN0aXZpdHk7bi5yZWZyYWN0aW9uUmF0aW8udmFsdWU9Yy5yZWZyYWN0aW9uUmF0aW99Yy5pc0xpbmVCYXNpY01hdGVyaWFsPyhuLmRpZmZ1c2UudmFsdWU9Yy5jb2xvcixuLm9wYWNpdHkudmFsdWU9Yy5vcGFjaXR5KTpjLmlzTGluZURhc2hlZE1hdGVyaWFsPyhuLmRpZmZ1c2UudmFsdWU9Yy5jb2xvcixuLm9wYWNpdHkudmFsdWU9Yy5vcGFjaXR5LG4uZGFzaFNpemUudmFsdWU9Yy5kYXNoU2l6ZSxuLnRvdGFsU2l6ZS52YWx1ZT1jLmRhc2hTaXplK2MuZ2FwU2l6ZSxuLnNjYWxlLnZhbHVlPWMuc2NhbGUpOmMuaXNQb2ludHNNYXRlcmlhbD8obi5kaWZmdXNlLnZhbHVlPWMuY29sb3Isbi5vcGFjaXR5LnZhbHVlPWMub3BhY2l0eSxuLnNpemUudmFsdWU9Yy5zaXplKmthLG4uc2NhbGUudmFsdWU9LjUqZGEsbi5tYXAudmFsdWU9CmMubWFwLG51bGwhPT1jLm1hcCYmKHA9Yy5tYXAub2Zmc2V0LGM9Yy5tYXAucmVwZWF0LG4ub2Zmc2V0UmVwZWF0LnZhbHVlLnNldChwLngscC55LGMueCxjLnkpKSk6Yy5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/Yy5lbWlzc2l2ZU1hcCYmKG4uZW1pc3NpdmVNYXAudmFsdWU9Yy5lbWlzc2l2ZU1hcCk6Yy5pc01lc2hUb29uTWF0ZXJpYWw/KHIobixjKSxjLmdyYWRpZW50TWFwJiYobi5ncmFkaWVudE1hcC52YWx1ZT1jLmdyYWRpZW50TWFwKSk6Yy5pc01lc2hQaG9uZ01hdGVyaWFsP3IobixjKTpjLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/KG4uY2xlYXJDb2F0LnZhbHVlPWMuY2xlYXJDb2F0LG4uY2xlYXJDb2F0Um91Z2huZXNzLnZhbHVlPWMuY2xlYXJDb2F0Um91Z2huZXNzLGwobixjKSk6Yy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2wobixjKTpjLmlzTWVzaERlcHRoTWF0ZXJpYWw/Yy5kaXNwbGFjZW1lbnRNYXAmJihuLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1jLmRpc3BsYWNlbWVudE1hcCwKbi5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1jLmRpc3BsYWNlbWVudFNjYWxlLG4uZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1jLmRpc3BsYWNlbWVudEJpYXMpOmMuaXNNZXNoTm9ybWFsTWF0ZXJpYWwmJihjLmJ1bXBNYXAmJihuLmJ1bXBNYXAudmFsdWU9Yy5idW1wTWFwLG4uYnVtcFNjYWxlLnZhbHVlPWMuYnVtcFNjYWxlKSxjLm5vcm1hbE1hcCYmKG4ubm9ybWFsTWFwLnZhbHVlPWMubm9ybWFsTWFwLG4ubm9ybWFsU2NhbGUudmFsdWUuY29weShjLm5vcm1hbFNjYWxlKSksYy5kaXNwbGFjZW1lbnRNYXAmJihuLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1jLmRpc3BsYWNlbWVudE1hcCxuLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWMuZGlzcGxhY2VtZW50U2NhbGUsbi5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWMuZGlzcGxhY2VtZW50QmlhcykpO3ZvaWQgMCE9PW4ubHRjTWF0JiYobi5sdGNNYXQudmFsdWU9Vi5MVENfTUFUX1RFWFRVUkUpO3ZvaWQgMCE9PW4ubHRjTWFnJiYobi5sdGNNYWcudmFsdWU9ClYuTFRDX01BR19URVhUVVJFKTtmYi51cGxvYWQoQSxlLnVuaWZvcm1zTGlzdCxuLEMpfW0uc2V0VmFsdWUoQSwibW9kZWxWaWV3TWF0cml4IixkLm1vZGVsVmlld01hdHJpeCk7bS5zZXRWYWx1ZShBLCJub3JtYWxNYXRyaXgiLGQubm9ybWFsTWF0cml4KTttLnNldFZhbHVlKEEsIm1vZGVsTWF0cml4IixkLm1hdHJpeFdvcmxkKTtyZXR1cm4ga31mdW5jdGlvbiByKGEsYil7YS5zcGVjdWxhci52YWx1ZT1iLnNwZWN1bGFyO2Euc2hpbmluZXNzLnZhbHVlPU1hdGgubWF4KGIuc2hpbmluZXNzLDFFLTQpO2IuZW1pc3NpdmVNYXAmJihhLmVtaXNzaXZlTWFwLnZhbHVlPWIuZW1pc3NpdmVNYXApO2IuYnVtcE1hcCYmKGEuYnVtcE1hcC52YWx1ZT1iLmJ1bXBNYXAsYS5idW1wU2NhbGUudmFsdWU9Yi5idW1wU2NhbGUpO2Iubm9ybWFsTWFwJiYoYS5ub3JtYWxNYXAudmFsdWU9Yi5ub3JtYWxNYXAsYS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGIubm9ybWFsU2NhbGUpKTtiLmRpc3BsYWNlbWVudE1hcCYmCihhLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1iLmRpc3BsYWNlbWVudE1hcCxhLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWIuZGlzcGxhY2VtZW50U2NhbGUsYS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWIuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gbChhLGIpe2Eucm91Z2huZXNzLnZhbHVlPWIucm91Z2huZXNzO2EubWV0YWxuZXNzLnZhbHVlPWIubWV0YWxuZXNzO2Iucm91Z2huZXNzTWFwJiYoYS5yb3VnaG5lc3NNYXAudmFsdWU9Yi5yb3VnaG5lc3NNYXApO2IubWV0YWxuZXNzTWFwJiYoYS5tZXRhbG5lc3NNYXAudmFsdWU9Yi5tZXRhbG5lc3NNYXApO2IuZW1pc3NpdmVNYXAmJihhLmVtaXNzaXZlTWFwLnZhbHVlPWIuZW1pc3NpdmVNYXApO2IuYnVtcE1hcCYmKGEuYnVtcE1hcC52YWx1ZT1iLmJ1bXBNYXAsYS5idW1wU2NhbGUudmFsdWU9Yi5idW1wU2NhbGUpO2Iubm9ybWFsTWFwJiYoYS5ub3JtYWxNYXAudmFsdWU9Yi5ub3JtYWxNYXAsYS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGIubm9ybWFsU2NhbGUpKTsKYi5kaXNwbGFjZW1lbnRNYXAmJihhLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1iLmRpc3BsYWNlbWVudE1hcCxhLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWIuZGlzcGxhY2VtZW50U2NhbGUsYS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWIuZGlzcGxhY2VtZW50Qmlhcyk7Yi5lbnZNYXAmJihhLmVudk1hcEludGVuc2l0eS52YWx1ZT1iLmVudk1hcEludGVuc2l0eSl9ZnVuY3Rpb24gdChhLGIpe3ZhciBjLGQsZSxmLGc9MCxoPTAsaz0wLG0sbix1LHE9Yi5tYXRyaXhXb3JsZEludmVyc2UsbD0wLHI9MCx0PTAsej0wLHA9MDtjPTA7Zm9yKGQ9YS5sZW5ndGg7YzxkO2MrKylpZihlPWFbY10sZj1lLmNvbG9yLG09ZS5pbnRlbnNpdHksbj1lLmRpc3RhbmNlLHU9ZS5zaGFkb3cmJmUuc2hhZG93Lm1hcD9lLnNoYWRvdy5tYXAudGV4dHVyZTpudWxsLGUuaXNBbWJpZW50TGlnaHQpZys9Zi5yKm0saCs9Zi5nKm0says9Zi5iKm07ZWxzZSBpZihlLmlzRGlyZWN0aW9uYWxMaWdodCl7dmFyIHY9CkJhLmdldChlKTt2LmNvbG9yLmNvcHkoZS5jb2xvcikubXVsdGlwbHlTY2FsYXIoZS5pbnRlbnNpdHkpO3YuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihlLm1hdHJpeFdvcmxkKTtRYS5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS50YXJnZXQubWF0cml4V29ybGQpO3YuZGlyZWN0aW9uLnN1YihRYSk7di5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHEpO2lmKHYuc2hhZG93PWUuY2FzdFNoYWRvdylmPWUuc2hhZG93LHYuc2hhZG93Qmlhcz1mLmJpYXMsdi5zaGFkb3dSYWRpdXM9Zi5yYWRpdXMsdi5zaGFkb3dNYXBTaXplPWYubWFwU2l6ZTtlYS5kaXJlY3Rpb25hbFNoYWRvd01hcFtsXT11O2VhLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4W2xdPWUuc2hhZG93Lm1hdHJpeDtlYS5kaXJlY3Rpb25hbFtsXT12O2wrK31lbHNlIGlmKGUuaXNTcG90TGlnaHQpe3Y9QmEuZ2V0KGUpO3YucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUubWF0cml4V29ybGQpO3YucG9zaXRpb24uYXBwbHlNYXRyaXg0KHEpOwp2LmNvbG9yLmNvcHkoZikubXVsdGlwbHlTY2FsYXIobSk7di5kaXN0YW5jZT1uO3YuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihlLm1hdHJpeFdvcmxkKTtRYS5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS50YXJnZXQubWF0cml4V29ybGQpO3YuZGlyZWN0aW9uLnN1YihRYSk7di5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHEpO3YuY29uZUNvcz1NYXRoLmNvcyhlLmFuZ2xlKTt2LnBlbnVtYnJhQ29zPU1hdGguY29zKGUuYW5nbGUqKDEtZS5wZW51bWJyYSkpO3YuZGVjYXk9MD09PWUuZGlzdGFuY2U/MDplLmRlY2F5O2lmKHYuc2hhZG93PWUuY2FzdFNoYWRvdylmPWUuc2hhZG93LHYuc2hhZG93Qmlhcz1mLmJpYXMsdi5zaGFkb3dSYWRpdXM9Zi5yYWRpdXMsdi5zaGFkb3dNYXBTaXplPWYubWFwU2l6ZTtlYS5zcG90U2hhZG93TWFwW3RdPXU7ZWEuc3BvdFNoYWRvd01hdHJpeFt0XT1lLnNoYWRvdy5tYXRyaXg7ZWEuc3BvdFt0XT12O3QrK31lbHNlIGlmKGUuaXNSZWN0QXJlYUxpZ2h0KXY9CkJhLmdldChlKSx2LmNvbG9yLmNvcHkoZikubXVsdGlwbHlTY2FsYXIobS8oZS53aWR0aCplLmhlaWdodCkpLHYucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUubWF0cml4V29ybGQpLHYucG9zaXRpb24uYXBwbHlNYXRyaXg0KHEpLHJhLmlkZW50aXR5KCkscWEuY29weShlLm1hdHJpeFdvcmxkKSxxYS5wcmVtdWx0aXBseShxKSxyYS5leHRyYWN0Um90YXRpb24ocWEpLHYuaGFsZldpZHRoLnNldCguNSplLndpZHRoLDAsMCksdi5oYWxmSGVpZ2h0LnNldCgwLC41KmUuaGVpZ2h0LDApLHYuaGFsZldpZHRoLmFwcGx5TWF0cml4NChyYSksdi5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChyYSksZWEucmVjdEFyZWFbel09dix6Kys7ZWxzZSBpZihlLmlzUG9pbnRMaWdodCl7dj1CYS5nZXQoZSk7di5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCk7di5wb3NpdGlvbi5hcHBseU1hdHJpeDQocSk7di5jb2xvci5jb3B5KGUuY29sb3IpLm11bHRpcGx5U2NhbGFyKGUuaW50ZW5zaXR5KTsKdi5kaXN0YW5jZT1lLmRpc3RhbmNlO3YuZGVjYXk9MD09PWUuZGlzdGFuY2U/MDplLmRlY2F5O2lmKHYuc2hhZG93PWUuY2FzdFNoYWRvdylmPWUuc2hhZG93LHYuc2hhZG93Qmlhcz1mLmJpYXMsdi5zaGFkb3dSYWRpdXM9Zi5yYWRpdXMsdi5zaGFkb3dNYXBTaXplPWYubWFwU2l6ZTtlYS5wb2ludFNoYWRvd01hcFtyXT11O2VhLnBvaW50U2hhZG93TWF0cml4W3JdPWUuc2hhZG93Lm1hdHJpeDtlYS5wb2ludFtyXT12O3IrK31lbHNlIGUuaXNIZW1pc3BoZXJlTGlnaHQmJih2PUJhLmdldChlKSx2LmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCksdi5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHEpLHYuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLHYuc2t5Q29sb3IuY29weShlLmNvbG9yKS5tdWx0aXBseVNjYWxhcihtKSx2Lmdyb3VuZENvbG9yLmNvcHkoZS5ncm91bmRDb2xvcikubXVsdGlwbHlTY2FsYXIobSksZWEuaGVtaVtwXT12LHArKyk7CmVhLmFtYmllbnRbMF09ZztlYS5hbWJpZW50WzFdPWg7ZWEuYW1iaWVudFsyXT1rO2VhLmRpcmVjdGlvbmFsLmxlbmd0aD1sO2VhLnNwb3QubGVuZ3RoPXQ7ZWEucmVjdEFyZWEubGVuZ3RoPXo7ZWEucG9pbnQubGVuZ3RoPXI7ZWEuaGVtaS5sZW5ndGg9cDtlYS5oYXNoPWwrIiwiK3IrIiwiK3QrIiwiK3orIiwiK3ArIiwiK2VhLnNoYWRvd3MubGVuZ3RofWZ1bmN0aW9uIHkoYSl7dmFyIGI7aWYoMUUzPT09YSlyZXR1cm4gQS5SRVBFQVQ7aWYoMTAwMT09PWEpcmV0dXJuIEEuQ0xBTVBfVE9fRURHRTtpZigxMDAyPT09YSlyZXR1cm4gQS5NSVJST1JFRF9SRVBFQVQ7aWYoMTAwMz09PWEpcmV0dXJuIEEuTkVBUkVTVDtpZigxMDA0PT09YSlyZXR1cm4gQS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUO2lmKDEwMDU9PT1hKXJldHVybiBBLk5FQVJFU1RfTUlQTUFQX0xJTkVBUjtpZigxMDA2PT09YSlyZXR1cm4gQS5MSU5FQVI7aWYoMTAwNz09PWEpcmV0dXJuIEEuTElORUFSX01JUE1BUF9ORUFSRVNUOwppZigxMDA4PT09YSlyZXR1cm4gQS5MSU5FQVJfTUlQTUFQX0xJTkVBUjtpZigxMDA5PT09YSlyZXR1cm4gQS5VTlNJR05FRF9CWVRFO2lmKDEwMTc9PT1hKXJldHVybiBBLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ7aWYoMTAxOD09PWEpcmV0dXJuIEEuVU5TSUdORURfU0hPUlRfNV81XzVfMTtpZigxMDE5PT09YSlyZXR1cm4gQS5VTlNJR05FRF9TSE9SVF81XzZfNTtpZigxMDEwPT09YSlyZXR1cm4gQS5CWVRFO2lmKDEwMTE9PT1hKXJldHVybiBBLlNIT1JUO2lmKDEwMTI9PT1hKXJldHVybiBBLlVOU0lHTkVEX1NIT1JUO2lmKDEwMTM9PT1hKXJldHVybiBBLklOVDtpZigxMDE0PT09YSlyZXR1cm4gQS5VTlNJR05FRF9JTlQ7aWYoMTAxNT09PWEpcmV0dXJuIEEuRkxPQVQ7aWYoMTAxNj09PWEmJihiPXBhLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLG51bGwhPT1iKSlyZXR1cm4gYi5IQUxGX0ZMT0FUX09FUztpZigxMDIxPT09YSlyZXR1cm4gQS5BTFBIQTtpZigxMDIyPT09CmEpcmV0dXJuIEEuUkdCO2lmKDEwMjM9PT1hKXJldHVybiBBLlJHQkE7aWYoMTAyND09PWEpcmV0dXJuIEEuTFVNSU5BTkNFO2lmKDEwMjU9PT1hKXJldHVybiBBLkxVTUlOQU5DRV9BTFBIQTtpZigxMDI2PT09YSlyZXR1cm4gQS5ERVBUSF9DT01QT05FTlQ7aWYoMTAyNz09PWEpcmV0dXJuIEEuREVQVEhfU1RFTkNJTDtpZigxMDA9PT1hKXJldHVybiBBLkZVTkNfQUREO2lmKDEwMT09PWEpcmV0dXJuIEEuRlVOQ19TVUJUUkFDVDtpZigxMDI9PT1hKXJldHVybiBBLkZVTkNfUkVWRVJTRV9TVUJUUkFDVDtpZigyMDA9PT1hKXJldHVybiBBLlpFUk87aWYoMjAxPT09YSlyZXR1cm4gQS5PTkU7aWYoMjAyPT09YSlyZXR1cm4gQS5TUkNfQ09MT1I7aWYoMjAzPT09YSlyZXR1cm4gQS5PTkVfTUlOVVNfU1JDX0NPTE9SO2lmKDIwND09PWEpcmV0dXJuIEEuU1JDX0FMUEhBO2lmKDIwNT09PWEpcmV0dXJuIEEuT05FX01JTlVTX1NSQ19BTFBIQTtpZigyMDY9PT1hKXJldHVybiBBLkRTVF9BTFBIQTsKaWYoMjA3PT09YSlyZXR1cm4gQS5PTkVfTUlOVVNfRFNUX0FMUEhBO2lmKDIwOD09PWEpcmV0dXJuIEEuRFNUX0NPTE9SO2lmKDIwOT09PWEpcmV0dXJuIEEuT05FX01JTlVTX0RTVF9DT0xPUjtpZigyMTA9PT1hKXJldHVybiBBLlNSQ19BTFBIQV9TQVRVUkFURTtpZigyMDAxPT09YXx8MjAwMj09PWF8fDIwMDM9PT1hfHwyMDA0PT09YSlpZihiPXBhLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKSxudWxsIT09Yil7aWYoMjAwMT09PWEpcmV0dXJuIGIuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZigyMDAyPT09YSlyZXR1cm4gYi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDtpZigyMDAzPT09YSlyZXR1cm4gYi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtpZigyMDA0PT09YSlyZXR1cm4gYi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1pZigyMTAwPT09YXx8MjEwMT09PWF8fDIxMDI9PT1hfHwyMTAzPT09YSlpZihiPXBhLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIiksCm51bGwhPT1iKXtpZigyMTAwPT09YSlyZXR1cm4gYi5DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HO2lmKDIxMDE9PT1hKXJldHVybiBiLkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc7aWYoMjEwMj09PWEpcmV0dXJuIGIuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYoMjEwMz09PWEpcmV0dXJuIGIuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUd9aWYoMjE1MT09PWEmJihiPXBhLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxudWxsIT09YikpcmV0dXJuIGIuQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDtpZigxMDM9PT1hfHwxMDQ9PT1hKWlmKGI9cGEuZ2V0KCJFWFRfYmxlbmRfbWlubWF4IiksbnVsbCE9PWIpe2lmKDEwMz09PWEpcmV0dXJuIGIuTUlOX0VYVDtpZigxMDQ9PT1hKXJldHVybiBiLk1BWF9FWFR9cmV0dXJuIDEwMjA9PT1hJiYoYj1wYS5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxudWxsIT09Yik/CmIuVU5TSUdORURfSU5UXzI0XzhfV0VCR0w6MH1jb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlciIsIjg1Iik7YT1hfHx7fTt2YXIgeD12b2lkIDAhPT1hLmNhbnZhcz9hLmNhbnZhczpkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJjYW52YXMiKSx2PXZvaWQgMCE9PWEuY29udGV4dD9hLmNvbnRleHQ6bnVsbCxHPXZvaWQgMCE9PWEuYWxwaGE/YS5hbHBoYTohMSx3PXZvaWQgMCE9PWEuZGVwdGg/YS5kZXB0aDohMCxPPXZvaWQgMCE9PWEuc3RlbmNpbD9hLnN0ZW5jaWw6ITAsUz12b2lkIDAhPT1hLmFudGlhbGlhcz9hLmFudGlhbGlhczohMSxFPXZvaWQgMCE9PWEucHJlbXVsdGlwbGllZEFscGhhP2EucHJlbXVsdGlwbGllZEFscGhhOiEwLEY9dm9pZCAwIT09YS5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI/YS5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEsYWE9W10sUj1udWxsLGNhPW5ldyBGbG9hdDMyQXJyYXkoOCksRD1bXSwKQj1bXTt0aGlzLmRvbUVsZW1lbnQ9eDt0aGlzLmNvbnRleHQ9bnVsbDt0aGlzLnNvcnRPYmplY3RzPXRoaXMuYXV0b0NsZWFyU3RlbmNpbD10aGlzLmF1dG9DbGVhckRlcHRoPXRoaXMuYXV0b0NsZWFyQ29sb3I9dGhpcy5hdXRvQ2xlYXI9ITA7dGhpcy5jbGlwcGluZ1BsYW5lcz1bXTt0aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkPSExO3RoaXMuZ2FtbWFGYWN0b3I9Mjt0aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPXRoaXMuZ2FtbWFPdXRwdXQ9dGhpcy5nYW1tYUlucHV0PSExO3RoaXMudG9uZU1hcHBpbmdXaGl0ZVBvaW50PXRoaXMudG9uZU1hcHBpbmdFeHBvc3VyZT10aGlzLnRvbmVNYXBwaW5nPTE7dGhpcy5tYXhNb3JwaFRhcmdldHM9ODt0aGlzLm1heE1vcnBoTm9ybWFscz00O3ZhciBDPXRoaXMsTT1udWxsLFA9bnVsbCxLPW51bGwsVz0tMSxiYT0iIixUPW51bGwsUT1uZXcgZ2EsTD1udWxsLFo9bmV3IGdhLFU9MCxJYT1uZXcgSCgwKSxYPTAsTj14LndpZHRoLGRhPXguaGVpZ2h0LAprYT0xLGhhPW5ldyBnYSgwLDAsTixkYSksUGU9ITEsemM9bmV3IGdhKDAsMCxOLGRhKSxtYT1uZXcgamQsUGE9bmV3IGlnLGtkPSExLFdkPSExLGxkPW5ldyBKLFFhPW5ldyBwLHFhPW5ldyBKLHJhPW5ldyBKLGVhPXtoYXNoOiIiLGFtYmllbnQ6WzAsMCwwXSxkaXJlY3Rpb25hbDpbXSxkaXJlY3Rpb25hbFNoYWRvd01hcDpbXSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDpbXSxzcG90OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxwb2ludDpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdLHNoYWRvd3M6W119LHZhPXtnZW9tZXRyaWVzOjAsdGV4dHVyZXM6MH0sb2E9e2ZyYW1lOjAsY2FsbHM6MCx2ZXJ0aWNlczowLGZhY2VzOjAscG9pbnRzOjB9O3RoaXMuaW5mbz17cmVuZGVyOm9hLG1lbW9yeTp2YSxwcm9ncmFtczpudWxsfTt2YXIgQTt0cnl7Rz17YWxwaGE6RyxkZXB0aDp3LHN0ZW5jaWw6TywKYW50aWFsaWFzOlMscHJlbXVsdGlwbGllZEFscGhhOkUscHJlc2VydmVEcmF3aW5nQnVmZmVyOkZ9O0E9dnx8eC5nZXRDb250ZXh0KCJ3ZWJnbCIsRyl8fHguZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixHKTtpZihudWxsPT09QSl7aWYobnVsbCE9PXguZ2V0Q29udGV4dCgid2ViZ2wiKSl0aHJvdyJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLiI7dGhyb3ciRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4iO312b2lkIDA9PT1BLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCYmKEEuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJue3JhbmdlTWluOjEscmFuZ2VNYXg6MSxwcmVjaXNpb246MX19KTt4LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGQsITEpfWNhdGNoKGpnKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK2pnKX12YXIgcGE9bmV3IGhnKEEpOwpwYS5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKTtwYS5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iik7cGEuZ2V0KCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKTtwYS5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTtwYS5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik7cGEuZ2V0KCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTtwYS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKTtwYS5nZXQoIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKSYmKEkuTWF4SW5kZXg9NDI5NDk2NzI5Nik7dmFyIG5hPW5ldyBnZyhBLHBhLGEpLGZhPW5ldyBmZyhBLHBhLHkpLGlhPW5ldyBlZyxzYT1uZXcgZGcoQSxwYSxmYSxpYSxuYSx5LHZhKSxBYT1uZXcgTWYoQSksRGE9bmV3IFRmKEEsQWEsdmEpLHdhPW5ldyBWZihBLERhLG9hKSx5YT1uZXcgY2codGhpcyxuYSksQmE9bmV3IFVmLEdhPW5ldyBRZjt0aGlzLmluZm8ucHJvZ3JhbXM9eWEucHJvZ3JhbXM7dmFyIEthPW5ldyBTZihBLApwYSxvYSksTGE9bmV3IFJmKEEscGEsb2EpLEZhLHphLHRhLHVhO2IoKTt0aGlzLmNvbnRleHQ9QTt0aGlzLmNhcGFiaWxpdGllcz1uYTt0aGlzLmV4dGVuc2lvbnM9cGE7dGhpcy5wcm9wZXJ0aWVzPWlhO3RoaXMuc3RhdGU9ZmE7dmFyIEphPW5ldyBKZSh0aGlzLGVhLHdhLG5hKTt0aGlzLnNoYWRvd01hcD1KYTt2YXIgTWE9bmV3IEpmKHRoaXMsRCksT2E9bmV3IElmKHRoaXMsQik7dGhpcy5nZXRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIEF9O3RoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gQS5nZXRDb250ZXh0QXR0cmlidXRlcygpfTt0aGlzLmZvcmNlQ29udGV4dExvc3M9ZnVuY3Rpb24oKXt2YXIgYT1wYS5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO2EmJmEubG9zZUNvbnRleHQoKX07dGhpcy5nZXRNYXhBbmlzb3Ryb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG5hLmdldE1heEFuaXNvdHJvcHkoKX07dGhpcy5nZXRQcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gbmEucHJlY2lzaW9ufTsKdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIGthfTt0aGlzLnNldFBpeGVsUmF0aW89ZnVuY3Rpb24oYSl7dm9pZCAwIT09YSYmKGthPWEsdGhpcy5zZXRTaXplKHpjLnosemMudywhMSkpfTt0aGlzLmdldFNpemU9ZnVuY3Rpb24oKXtyZXR1cm57d2lkdGg6TixoZWlnaHQ6ZGF9fTt0aGlzLnNldFNpemU9ZnVuY3Rpb24oYSxiLGMpe049YTtkYT1iO3gud2lkdGg9YSprYTt4LmhlaWdodD1iKmthOyExIT09YyYmKHguc3R5bGUud2lkdGg9YSsicHgiLHguc3R5bGUuaGVpZ2h0PWIrInB4Iik7dGhpcy5zZXRWaWV3cG9ydCgwLDAsYSxiKX07dGhpcy5zZXRWaWV3cG9ydD1mdW5jdGlvbihhLGIsYyxkKXtmYS52aWV3cG9ydCh6Yy5zZXQoYSxiLGMsZCkpfTt0aGlzLnNldFNjaXNzb3I9ZnVuY3Rpb24oYSxiLGMsZCl7ZmEuc2Npc3NvcihoYS5zZXQoYSxiLGMsZCkpfTt0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKGEpe2ZhLnNldFNjaXNzb3JUZXN0KFBlPWEpfTt0aGlzLmdldENsZWFyQ29sb3I9CmZ1bmN0aW9uKCl7cmV0dXJuIElhfTt0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oYSxiKXtJYS5zZXQoYSk7WD12b2lkIDAhPT1iP2I6MTtmYS5idWZmZXJzLmNvbG9yLnNldENsZWFyKElhLnIsSWEuZyxJYS5iLFgsRSl9O3RoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBYfTt0aGlzLnNldENsZWFyQWxwaGE9ZnVuY3Rpb24oYSl7WD1hO2ZhLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoSWEucixJYS5nLElhLmIsWCxFKX07dGhpcy5jbGVhcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9MDtpZih2b2lkIDA9PT1hfHxhKWR8PUEuQ09MT1JfQlVGRkVSX0JJVDtpZih2b2lkIDA9PT1ifHxiKWR8PUEuREVQVEhfQlVGRkVSX0JJVDtpZih2b2lkIDA9PT1jfHxjKWR8PUEuU1RFTkNJTF9CVUZGRVJfQklUO0EuY2xlYXIoZCl9O3RoaXMuY2xlYXJDb2xvcj1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITAsITEsITEpfTt0aGlzLmNsZWFyRGVwdGg9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLAohMCwhMSl9O3RoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMSwhMCl9O3RoaXMuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24oYSxiLGMsZCl7dGhpcy5zZXRSZW5kZXJUYXJnZXQoYSk7dGhpcy5jbGVhcihiLGMsZCl9O3RoaXMucmVzZXRHTFN0YXRlPWM7dGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7eC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixkLCExKTtHYS5kaXNwb3NlKCl9O3RoaXMucmVuZGVyQnVmZmVySW1tZWRpYXRlPWZ1bmN0aW9uKGEsYixjKXtmYS5pbml0QXR0cmlidXRlcygpO3ZhciBkPWlhLmdldChhKTthLmhhc1Bvc2l0aW9ucyYmIWQucG9zaXRpb24mJihkLnBvc2l0aW9uPUEuY3JlYXRlQnVmZmVyKCkpO2EuaGFzTm9ybWFscyYmIWQubm9ybWFsJiYoZC5ub3JtYWw9QS5jcmVhdGVCdWZmZXIoKSk7YS5oYXNVdnMmJiFkLnV2JiYoZC51dj1BLmNyZWF0ZUJ1ZmZlcigpKTthLmhhc0NvbG9ycyYmIWQuY29sb3ImJihkLmNvbG9yPQpBLmNyZWF0ZUJ1ZmZlcigpKTtiPWIuZ2V0QXR0cmlidXRlcygpO2EuaGFzUG9zaXRpb25zJiYoQS5iaW5kQnVmZmVyKEEuQVJSQVlfQlVGRkVSLGQucG9zaXRpb24pLEEuYnVmZmVyRGF0YShBLkFSUkFZX0JVRkZFUixhLnBvc2l0aW9uQXJyYXksQS5EWU5BTUlDX0RSQVcpLGZhLmVuYWJsZUF0dHJpYnV0ZShiLnBvc2l0aW9uKSxBLnZlcnRleEF0dHJpYlBvaW50ZXIoYi5wb3NpdGlvbiwzLEEuRkxPQVQsITEsMCwwKSk7aWYoYS5oYXNOb3JtYWxzKXtBLmJpbmRCdWZmZXIoQS5BUlJBWV9CVUZGRVIsZC5ub3JtYWwpO2lmKCFjLmlzTWVzaFBob25nTWF0ZXJpYWwmJiFjLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwmJiFjLmlzTWVzaE5vcm1hbE1hdGVyaWFsJiYxPT09Yy5zaGFkaW5nKWZvcih2YXIgZT0wLGY9MyphLmNvdW50O2U8ZjtlKz05KXt2YXIgZz1hLm5vcm1hbEFycmF5LGg9KGdbZSswXStnW2UrM10rZ1tlKzZdKS8zLGs9KGdbZSsxXStnW2UrNF0rZ1tlKzddKS8zLG09KGdbZSsKMl0rZ1tlKzVdK2dbZSs4XSkvMztnW2UrMF09aDtnW2UrMV09aztnW2UrMl09bTtnW2UrM109aDtnW2UrNF09aztnW2UrNV09bTtnW2UrNl09aDtnW2UrN109aztnW2UrOF09bX1BLmJ1ZmZlckRhdGEoQS5BUlJBWV9CVUZGRVIsYS5ub3JtYWxBcnJheSxBLkRZTkFNSUNfRFJBVyk7ZmEuZW5hYmxlQXR0cmlidXRlKGIubm9ybWFsKTtBLnZlcnRleEF0dHJpYlBvaW50ZXIoYi5ub3JtYWwsMyxBLkZMT0FULCExLDAsMCl9YS5oYXNVdnMmJmMubWFwJiYoQS5iaW5kQnVmZmVyKEEuQVJSQVlfQlVGRkVSLGQudXYpLEEuYnVmZmVyRGF0YShBLkFSUkFZX0JVRkZFUixhLnV2QXJyYXksQS5EWU5BTUlDX0RSQVcpLGZhLmVuYWJsZUF0dHJpYnV0ZShiLnV2KSxBLnZlcnRleEF0dHJpYlBvaW50ZXIoQWEudXYsMixBLkZMT0FULCExLDAsMCkpO2EuaGFzQ29sb3JzJiYwIT09Yy52ZXJ0ZXhDb2xvcnMmJihBLmJpbmRCdWZmZXIoQS5BUlJBWV9CVUZGRVIsZC5jb2xvciksQS5idWZmZXJEYXRhKEEuQVJSQVlfQlVGRkVSLAphLmNvbG9yQXJyYXksQS5EWU5BTUlDX0RSQVcpLGZhLmVuYWJsZUF0dHJpYnV0ZShiLmNvbG9yKSxBLnZlcnRleEF0dHJpYlBvaW50ZXIoYi5jb2xvciwzLEEuRkxPQVQsITEsMCwwKSk7ZmEuZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXMoKTtBLmRyYXdBcnJheXMoQS5UUklBTkdMRVMsMCxhLmNvdW50KTthLmNvdW50PTB9O3RoaXMucmVuZGVyQnVmZmVyRGlyZWN0PWZ1bmN0aW9uKGEsYixjLGQsZSxmKXtmYS5zZXRNYXRlcmlhbChkKTt2YXIgZz1uKGEsYixkLGUpO2E9Yy5pZCsiXyIrZy5pZCsiXyIrKCEwPT09ZC53aXJlZnJhbWUpO3ZhciBrPSExO2EhPT1iYSYmKGJhPWEsaz0hMCk7Yj1lLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih2b2lkIDAhPT1iKXt2YXIgbT1bXTthPTA7Zm9yKHZhciB1PWIubGVuZ3RoO2E8dTthKyspaz1iW2FdLG0ucHVzaChbayxhXSk7bS5zb3J0KGgpOzg8bS5sZW5ndGgmJihtLmxlbmd0aD04KTt2YXIgcT1jLm1vcnBoQXR0cmlidXRlczthPTA7Zm9yKHU9Cm0ubGVuZ3RoO2E8dTthKyspaz1tW2FdLGNhW2FdPWtbMF0sMCE9PWtbMF0/KGI9a1sxXSwhMD09PWQubW9ycGhUYXJnZXRzJiZxLnBvc2l0aW9uJiZjLmFkZEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK2EscS5wb3NpdGlvbltiXSksITA9PT1kLm1vcnBoTm9ybWFscyYmcS5ub3JtYWwmJmMuYWRkQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrYSxxLm5vcm1hbFtiXSkpOighMD09PWQubW9ycGhUYXJnZXRzJiZjLnJlbW92ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK2EpLCEwPT09ZC5tb3JwaE5vcm1hbHMmJmMucmVtb3ZlQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrYSkpO2E9bS5sZW5ndGg7Zm9yKGI9Y2EubGVuZ3RoO2E8YjthKyspY2FbYV09MDtnLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUoQSwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixjYSk7az0hMH1iPWMuaW5kZXg7dT1jLmF0dHJpYnV0ZXMucG9zaXRpb247bT0xOyEwPT09ZC53aXJlZnJhbWUmJihiPURhLmdldFdpcmVmcmFtZUF0dHJpYnV0ZShjKSwKbT0yKTthPUthO251bGwhPT1iJiYoYT1MYSxhLnNldEluZGV4KGIpKTtpZihrKXtrPXZvaWQgMDtpZihjJiZjLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkmJm51bGw9PT1wYS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSljb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnNldHVwVmVydGV4QXR0cmlidXRlczogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7ZWxzZXt2b2lkIDA9PT1rJiYoaz0wKTtmYS5pbml0QXR0cmlidXRlcygpO3ZhciBxPWMuYXR0cmlidXRlcyxnPWcuZ2V0QXR0cmlidXRlcygpLGw9ZC5kZWZhdWx0QXR0cmlidXRlVmFsdWVzLHI7Zm9yKHIgaW4gZyl7dmFyIHQ9Z1tyXTtpZigwPD10KXt2YXIgdj1xW3JdO2lmKHZvaWQgMCE9PXYpe3ZhciB6PXYubm9ybWFsaXplZCxwPXYuaXRlbVNpemUsdz1BYS5nZXQodiksCng9dy5idWZmZXIseT13LnR5cGUsdz13LmJ5dGVzUGVyRWxlbWVudDtpZih2LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe3ZhciBHPXYuZGF0YSxPPUcuc3RyaWRlLHY9di5vZmZzZXQ7RyYmRy5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPyhmYS5lbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yKHQsRy5tZXNoUGVyQXR0cmlidXRlKSx2b2lkIDA9PT1jLm1heEluc3RhbmNlZENvdW50JiYoYy5tYXhJbnN0YW5jZWRDb3VudD1HLm1lc2hQZXJBdHRyaWJ1dGUqRy5jb3VudCkpOmZhLmVuYWJsZUF0dHJpYnV0ZSh0KTtBLmJpbmRCdWZmZXIoQS5BUlJBWV9CVUZGRVIseCk7QS52ZXJ0ZXhBdHRyaWJQb2ludGVyKHQscCx5LHosTyp3LChrKk8rdikqdyl9ZWxzZSB2LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPyhmYS5lbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yKHQsdi5tZXNoUGVyQXR0cmlidXRlKSx2b2lkIDA9PT1jLm1heEluc3RhbmNlZENvdW50JiYoYy5tYXhJbnN0YW5jZWRDb3VudD0Kdi5tZXNoUGVyQXR0cmlidXRlKnYuY291bnQpKTpmYS5lbmFibGVBdHRyaWJ1dGUodCksQS5iaW5kQnVmZmVyKEEuQVJSQVlfQlVGRkVSLHgpLEEudmVydGV4QXR0cmliUG9pbnRlcih0LHAseSx6LDAsaypwKncpfWVsc2UgaWYodm9pZCAwIT09bCYmKHo9bFtyXSx2b2lkIDAhPT16KSlzd2l0Y2goei5sZW5ndGgpe2Nhc2UgMjpBLnZlcnRleEF0dHJpYjJmdih0LHopO2JyZWFrO2Nhc2UgMzpBLnZlcnRleEF0dHJpYjNmdih0LHopO2JyZWFrO2Nhc2UgNDpBLnZlcnRleEF0dHJpYjRmdih0LHopO2JyZWFrO2RlZmF1bHQ6QS52ZXJ0ZXhBdHRyaWIxZnYodCx6KX19fWZhLmRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzKCl9bnVsbCE9PWImJkEuYmluZEJ1ZmZlcihBLkVMRU1FTlRfQVJSQVlfQlVGRkVSLEFhLmdldChiKS5idWZmZXIpfXI9MDtudWxsIT09Yj9yPWIuY291bnQ6dm9pZCAwIT09dSYmKHI9dS5jb3VudCk7dT1jLmRyYXdSYW5nZS5zdGFydCptO2s9bnVsbCE9PWY/Zi5zdGFydCptOgowO2I9TWF0aC5tYXgodSxrKTtmPU1hdGgubWF4KDAsTWF0aC5taW4ocix1K2MuZHJhd1JhbmdlLmNvdW50Km0saysobnVsbCE9PWY/Zi5jb3VudCptOkluZmluaXR5KSktMS1iKzEpO2lmKDAhPT1mKXtpZihlLmlzTWVzaClpZighMD09PWQud2lyZWZyYW1lKWZhLnNldExpbmVXaWR0aChkLndpcmVmcmFtZUxpbmV3aWR0aCoobnVsbD09PVA/a2E6MSkpLGEuc2V0TW9kZShBLkxJTkVTKTtlbHNlIHN3aXRjaChlLmRyYXdNb2RlKXtjYXNlIDA6YS5zZXRNb2RlKEEuVFJJQU5HTEVTKTticmVhaztjYXNlIDE6YS5zZXRNb2RlKEEuVFJJQU5HTEVfU1RSSVApO2JyZWFrO2Nhc2UgMjphLnNldE1vZGUoQS5UUklBTkdMRV9GQU4pfWVsc2UgZS5pc0xpbmU/KGQ9ZC5saW5ld2lkdGgsdm9pZCAwPT09ZCYmKGQ9MSksZmEuc2V0TGluZVdpZHRoKGQqKG51bGw9PT1QP2thOjEpKSxlLmlzTGluZVNlZ21lbnRzP2Euc2V0TW9kZShBLkxJTkVTKTplLmlzTGluZUxvb3A/YS5zZXRNb2RlKEEuTElORV9MT09QKToKYS5zZXRNb2RlKEEuTElORV9TVFJJUCkpOmUuaXNQb2ludHMmJmEuc2V0TW9kZShBLlBPSU5UUyk7YyYmYy5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PzA8Yy5tYXhJbnN0YW5jZWRDb3VudCYmYS5yZW5kZXJJbnN0YW5jZXMoYyxiLGYpOmEucmVuZGVyKGIsZil9fTt0aGlzLmNvbXBpbGU9ZnVuY3Rpb24oYSxiKXthYT1bXTthLnRyYXZlcnNlKGZ1bmN0aW9uKGEpe2EuaXNMaWdodCYmYWEucHVzaChhKX0pO3QoYWEsYik7YS50cmF2ZXJzZShmdW5jdGlvbihiKXtpZihiLm1hdGVyaWFsKWlmKEFycmF5LmlzQXJyYXkoYi5tYXRlcmlhbCkpZm9yKHZhciBjPTA7YzxiLm1hdGVyaWFsLmxlbmd0aDtjKyspcShiLm1hdGVyaWFsW2NdLGEuZm9nLGIpO2Vsc2UgcShiLm1hdGVyaWFsLGEuZm9nLGIpfSl9O3RoaXMucmVuZGVyPWZ1bmN0aW9uKGEsYixjLGQpe2lmKHZvaWQgMCE9PWImJiEwIT09Yi5pc0NhbWVyYSljb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIik7CmVsc2V7YmE9IiI7Vz0tMTtUPW51bGw7ITA9PT1hLmF1dG9VcGRhdGUmJmEudXBkYXRlTWF0cml4V29ybGQoKTtiLm9uQmVmb3JlUmVuZGVyKEMpO251bGw9PT1iLnBhcmVudCYmYi51cGRhdGVNYXRyaXhXb3JsZCgpO2IubWF0cml4V29ybGRJbnZlcnNlLmdldEludmVyc2UoYi5tYXRyaXhXb3JsZCk7bGQubXVsdGlwbHlNYXRyaWNlcyhiLnByb2plY3Rpb25NYXRyaXgsYi5tYXRyaXhXb3JsZEludmVyc2UpO21hLnNldEZyb21NYXRyaXgobGQpO2FhLmxlbmd0aD0wO0QubGVuZ3RoPTA7Qi5sZW5ndGg9MDtXZD10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkO2tkPVBhLmluaXQodGhpcy5jbGlwcGluZ1BsYW5lcyxXZCxiKTtSPUdhLmdldChhLGIpO1IuaW5pdCgpO2soYSxiLEMuc29ydE9iamVjdHMpO1IuZmluaXNoKCk7ITA9PT1DLnNvcnRPYmplY3RzJiZSLnNvcnQoKTtrZCYmUGEuYmVnaW5TaGFkb3dzKCk7Zm9yKHZhciBlPWFhLGY9MCxnPTAsaD1lLmxlbmd0aDtnPGg7ZysrKXt2YXIgbj0KZVtnXTtuLmNhc3RTaGFkb3cmJihlYS5zaGFkb3dzW2ZdPW4sZisrKX1lYS5zaGFkb3dzLmxlbmd0aD1mO0phLnJlbmRlcihhLGIpO3QoYWEsYik7a2QmJlBhLmVuZFNoYWRvd3MoKTtvYS5mcmFtZSsrO29hLmNhbGxzPTA7b2EudmVydGljZXM9MDtvYS5mYWNlcz0wO29hLnBvaW50cz0wO3ZvaWQgMD09PWMmJihjPW51bGwpO3RoaXMuc2V0UmVuZGVyVGFyZ2V0KGMpO2U9YS5iYWNrZ3JvdW5kO251bGw9PT1lP2ZhLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoSWEucixJYS5nLElhLmIsWCxFKTplJiZlLmlzQ29sb3ImJihmYS5idWZmZXJzLmNvbG9yLnNldENsZWFyKGUucixlLmcsZS5iLDEsRSksZD0hMCk7KHRoaXMuYXV0b0NsZWFyfHxkKSYmdGhpcy5jbGVhcih0aGlzLmF1dG9DbGVhckNvbG9yLHRoaXMuYXV0b0NsZWFyRGVwdGgsdGhpcy5hdXRvQ2xlYXJTdGVuY2lsKTtlJiZlLmlzQ3ViZVRleHR1cmU/KHZvaWQgMD09PXRhJiYodGE9bmV3IHhhLHVhPW5ldyBDYShuZXcga2IoNSw1LAo1KSxuZXcgRWEoe3VuaWZvcm1zOmFiLmN1YmUudW5pZm9ybXMsdmVydGV4U2hhZGVyOmFiLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmFiLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZToxLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSksdGEucHJvamVjdGlvbk1hdHJpeC5jb3B5KGIucHJvamVjdGlvbk1hdHJpeCksdGEubWF0cml4V29ybGQuZXh0cmFjdFJvdGF0aW9uKGIubWF0cml4V29ybGQpLHRhLm1hdHJpeFdvcmxkSW52ZXJzZS5nZXRJbnZlcnNlKHRhLm1hdHJpeFdvcmxkKSx1YS5tYXRlcmlhbC51bmlmb3Jtcy50Q3ViZS52YWx1ZT1lLHVhLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHRhLm1hdHJpeFdvcmxkSW52ZXJzZSx1YS5tYXRyaXhXb3JsZCksd2EudXBkYXRlKHVhKSxDLnJlbmRlckJ1ZmZlckRpcmVjdCh0YSxudWxsLHVhLmdlb21ldHJ5LHVhLm1hdGVyaWFsLHVhLG51bGwpKTplJiZlLmlzVGV4dHVyZSYmKHZvaWQgMD09PQpGYSYmKEZhPW5ldyBKYigtMSwxLDEsLTEsMCwxKSx6YT1uZXcgQ2EobmV3IGxiKDIsMiksbmV3IE5hKHtkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSkpLHphLm1hdGVyaWFsLm1hcD1lLHdhLnVwZGF0ZSh6YSksQy5yZW5kZXJCdWZmZXJEaXJlY3QoRmEsbnVsbCx6YS5nZW9tZXRyeSx6YS5tYXRlcmlhbCx6YSxudWxsKSk7ZD1SLm9wYXF1ZTtlPVIudHJhbnNwYXJlbnQ7YS5vdmVycmlkZU1hdGVyaWFsPyhmPWEub3ZlcnJpZGVNYXRlcmlhbCxkLmxlbmd0aCYmbShkLGEsYixmKSxlLmxlbmd0aCYmbShlLGEsYixmKSk6KGQubGVuZ3RoJiZtKGQsYSxiKSxlLmxlbmd0aCYmbShlLGEsYikpO01hLnJlbmRlcihhLGIpO09hLnJlbmRlcihhLGIsWik7YyYmc2EudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKGMpO2ZhLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCk7ZmEuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKTtmYS5idWZmZXJzLmNvbG9yLnNldE1hc2soITApO2IuaXNBcnJheUNhbWVyYSYmCmIuZW5hYmxlZCYmQy5zZXRTY2lzc29yVGVzdCghMSk7Yi5vbkFmdGVyUmVuZGVyKEMpfX07dGhpcy5zZXRGYWNlQ3VsbGluZz1mdW5jdGlvbihhLGIpe2ZhLnNldEN1bGxGYWNlKGEpO2ZhLnNldEZsaXBTaWRlZCgwPT09Yil9O3RoaXMuYWxsb2NUZXh0dXJlVW5pdD1mdW5jdGlvbigpe3ZhciBhPVU7YT49bmEubWF4VGV4dHVyZXMmJmNvbnNvbGUud2FybigiV2ViR0xSZW5kZXJlcjogdHJ5aW5nIHRvIHVzZSAiK2ErIiB0ZXh0dXJlIHVuaXRzIHdoaWxlIHRoaXMgR1BVIHN1cHBvcnRzIG9ubHkgIituYS5tYXhUZXh0dXJlcyk7VSs9MTtyZXR1cm4gYX07dGhpcy5zZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oKXt2YXIgYT0hMTtyZXR1cm4gZnVuY3Rpb24oYixjKXtiJiZiLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihhfHwoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnNldFRleHR1cmUyRDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSwKYT0hMCksYj1iLnRleHR1cmUpO3NhLnNldFRleHR1cmUyRChiLGMpfX0oKTt0aGlzLnNldFRleHR1cmU9ZnVuY3Rpb24oKXt2YXIgYT0hMTtyZXR1cm4gZnVuY3Rpb24oYixjKXthfHwoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSBpcyBkZXByZWNhdGVkLCB1c2Ugc2V0VGV4dHVyZTJEIGluc3RlYWQuIiksYT0hMCk7c2Euc2V0VGV4dHVyZTJEKGIsYyl9fSgpO3RoaXMuc2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXt2YXIgYT0hMTtyZXR1cm4gZnVuY3Rpb24oYixjKXtiJiZiLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlJiYoYXx8KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5zZXRUZXh0dXJlQ3ViZTogZG9uJ3QgdXNlIGN1YmUgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLGE9ITApLGI9Yi50ZXh0dXJlKTtiJiZiLmlzQ3ViZVRleHR1cmV8fEFycmF5LmlzQXJyYXkoYi5pbWFnZSkmJgo2PT09Yi5pbWFnZS5sZW5ndGg/c2Euc2V0VGV4dHVyZUN1YmUoYixjKTpzYS5zZXRUZXh0dXJlQ3ViZUR5bmFtaWMoYixjKX19KCk7dGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gUH07dGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oYSl7KFA9YSkmJnZvaWQgMD09PWlhLmdldChhKS5fX3dlYmdsRnJhbWVidWZmZXImJnNhLnNldHVwUmVuZGVyVGFyZ2V0KGEpO3ZhciBiPWEmJmEuaXNXZWJHTFJlbmRlclRhcmdldEN1YmUsYzthPyhjPWlhLmdldChhKSxjPWI/Yy5fX3dlYmdsRnJhbWVidWZmZXJbYS5hY3RpdmVDdWJlRmFjZV06Yy5fX3dlYmdsRnJhbWVidWZmZXIsUS5jb3B5KGEuc2Npc3NvciksTD1hLnNjaXNzb3JUZXN0LFouY29weShhLnZpZXdwb3J0KSk6KGM9bnVsbCxRLmNvcHkoaGEpLm11bHRpcGx5U2NhbGFyKGthKSxMPVBlLFouY29weSh6YykubXVsdGlwbHlTY2FsYXIoa2EpKTtLIT09YyYmKEEuYmluZEZyYW1lYnVmZmVyKEEuRlJBTUVCVUZGRVIsCmMpLEs9Yyk7ZmEuc2Npc3NvcihRKTtmYS5zZXRTY2lzc29yVGVzdChMKTtmYS52aWV3cG9ydChaKTtiJiYoYj1pYS5nZXQoYS50ZXh0dXJlKSxBLmZyYW1lYnVmZmVyVGV4dHVyZTJEKEEuRlJBTUVCVUZGRVIsQS5DT0xPUl9BVFRBQ0hNRU5UMCxBLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCthLmFjdGl2ZUN1YmVGYWNlLGIuX193ZWJnbFRleHR1cmUsYS5hY3RpdmVNaXBNYXBMZXZlbCkpfTt0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2lmKCExPT09KGEmJmEuaXNXZWJHTFJlbmRlclRhcmdldCkpY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO2Vsc2V7dmFyIGc9aWEuZ2V0KGEpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihnKXt2YXIgaD0hMTtnIT09SyYmKEEuYmluZEZyYW1lYnVmZmVyKEEuRlJBTUVCVUZGRVIsCmcpLGg9ITApO3RyeXt2YXIgaz1hLnRleHR1cmUsbT1rLmZvcm1hdCxuPWsudHlwZTsxMDIzIT09bSYmeShtKSE9PUEuZ2V0UGFyYW1ldGVyKEEuSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQpP2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZm9ybWF0LiIpOjEwMDk9PT1ufHx5KG4pPT09QS5nZXRQYXJhbWV0ZXIoQS5JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEUpfHwxMDE1PT09biYmKHBhLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKXx8cGEuZ2V0KCJXRUJHTF9jb2xvcl9idWZmZXJfZmxvYXQiKSl8fDEwMTY9PT1uJiZwYS5nZXQoIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpP0EuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhBLkZSQU1FQlVGRkVSKT09PUEuRlJBTUVCVUZGRVJfQ09NUExFVEU/MDw9YiYmCmI8PWEud2lkdGgtZCYmMDw9YyYmYzw9YS5oZWlnaHQtZSYmQS5yZWFkUGl4ZWxzKGIsYyxkLGUseShtKSx5KG4pLGYpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVhZFBpeGVscyBmcm9tIHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZS4iKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gVW5zaWduZWRCeXRlVHlwZSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHR5cGUuIil9ZmluYWxseXtoJiZBLmJpbmRGcmFtZWJ1ZmZlcihBLkZSQU1FQlVGRkVSLEspfX19fX1mdW5jdGlvbiBLYihhLGIpe3RoaXMubmFtZT0iIjt0aGlzLmNvbG9yPW5ldyBIKGEpO3RoaXMuZGVuc2l0eT12b2lkIDAhPT1iP2I6Mi41RS00fWZ1bmN0aW9uIExiKGEsYixjKXt0aGlzLm5hbWU9IiI7dGhpcy5jb2xvcj0KbmV3IEgoYSk7dGhpcy5uZWFyPXZvaWQgMCE9PWI/YjoxO3RoaXMuZmFyPXZvaWQgMCE9PWM/YzoxRTN9ZnVuY3Rpb24gbWQoKXtCLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTY2VuZSI7dGhpcy5vdmVycmlkZU1hdGVyaWFsPXRoaXMuZm9nPXRoaXMuYmFja2dyb3VuZD1udWxsO3RoaXMuYXV0b1VwZGF0ZT0hMH1mdW5jdGlvbiBZZChhLGIsYyxkLGUpe0IuY2FsbCh0aGlzKTt0aGlzLmxlbnNGbGFyZXM9W107dGhpcy5wb3NpdGlvblNjcmVlbj1uZXcgcDt0aGlzLmN1c3RvbVVwZGF0ZUNhbGxiYWNrPXZvaWQgMDt2b2lkIDAhPT1hJiZ0aGlzLmFkZChhLGIsYyxkLGUpfWZ1bmN0aW9uIGNiKGEpe1ouY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBIKDE2Nzc3MjE1KTt0aGlzLm1hcD1udWxsO3RoaXMucm90YXRpb249MDt0aGlzLmxpZ2h0cz10aGlzLmZvZz0hMTt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiBBYyhhKXtCLmNhbGwodGhpcyk7CnRoaXMudHlwZT0iU3ByaXRlIjt0aGlzLm1hdGVyaWFsPXZvaWQgMCE9PWE/YTpuZXcgY2J9ZnVuY3Rpb24gQmMoKXtCLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMT0QiO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse2xldmVsczp7ZW51bWVyYWJsZTohMCx2YWx1ZTpbXX19KX1mdW5jdGlvbiBDYyhhLGIpe2E9YXx8W107dGhpcy5ib25lcz1hLnNsaWNlKDApO3RoaXMuYm9uZU1hdHJpY2VzPW5ldyBGbG9hdDMyQXJyYXkoMTYqdGhpcy5ib25lcy5sZW5ndGgpO2lmKHZvaWQgMD09PWIpdGhpcy5jYWxjdWxhdGVJbnZlcnNlcygpO2Vsc2UgaWYodGhpcy5ib25lcy5sZW5ndGg9PT1iLmxlbmd0aCl0aGlzLmJvbmVJbnZlcnNlcz1iLnNsaWNlKDApO2Vsc2V7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbiBib25lSW52ZXJzZXMgaXMgdGhlIHdyb25nIGxlbmd0aC4iKTt0aGlzLmJvbmVJbnZlcnNlcz1bXTtmb3IodmFyIGM9MCxkPXRoaXMuYm9uZXMubGVuZ3RoO2M8ZDtjKyspdGhpcy5ib25lSW52ZXJzZXMucHVzaChuZXcgSil9fQpmdW5jdGlvbiBuZCgpe0IuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkJvbmUifWZ1bmN0aW9uIG9kKGEsYil7Q2EuY2FsbCh0aGlzLGEsYik7dGhpcy50eXBlPSJTa2lubmVkTWVzaCI7dGhpcy5iaW5kTW9kZT0iYXR0YWNoZWQiO3RoaXMuYmluZE1hdHJpeD1uZXcgSjt0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyBKO3ZhciBjPXRoaXMuaW5pdEJvbmVzKCksYz1uZXcgQ2MoYyk7dGhpcy5iaW5kKGMsdGhpcy5tYXRyaXhXb3JsZCk7dGhpcy5ub3JtYWxpemVTa2luV2VpZ2h0cygpfWZ1bmN0aW9uIGhhKGEpe1ouY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBIKDE2Nzc3MjE1KTt0aGlzLmxpbmV3aWR0aD0xO3RoaXMubGluZWpvaW49dGhpcy5saW5lY2FwPSJyb3VuZCI7dGhpcy5saWdodHM9ITE7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24geWEoYSxiLGMpe2lmKDE9PT1jKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmU6IHBhcmFtZXRlciBUSFJFRS5MaW5lUGllY2VzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIENyZWF0ZWQgVEhSRUUuTGluZVNlZ21lbnRzIGluc3RlYWQuIiksCm5ldyBkYShhLGIpO0IuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkxpbmUiO3RoaXMuZ2VvbWV0cnk9dm9pZCAwIT09YT9hOm5ldyBJO3RoaXMubWF0ZXJpYWw9dm9pZCAwIT09Yj9iOm5ldyBoYSh7Y29sb3I6MTY3NzcyMTUqTWF0aC5yYW5kb20oKX0pfWZ1bmN0aW9uIGRhKGEsYil7eWEuY2FsbCh0aGlzLGEsYik7dGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWZ1bmN0aW9uIHBkKGEsYil7eWEuY2FsbCh0aGlzLGEsYik7dGhpcy50eXBlPSJMaW5lTG9vcCJ9ZnVuY3Rpb24gTGEoYSl7Wi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUG9pbnRzTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMubWFwPW51bGw7dGhpcy5zaXplPTE7dGhpcy5zaXplQXR0ZW51YXRpb249ITA7dGhpcy5saWdodHM9ITE7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24gTWIoYSxiKXtCLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQb2ludHMiO3RoaXMuZ2VvbWV0cnk9dm9pZCAwIT09YT9hOm5ldyBJOwp0aGlzLm1hdGVyaWFsPXZvaWQgMCE9PWI/YjpuZXcgTGEoe2NvbG9yOjE2Nzc3MjE1Kk1hdGgucmFuZG9tKCl9KX1mdW5jdGlvbiBEYygpe0IuY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ikdyb3VwIn1mdW5jdGlvbiBxZChhLGIsYyxkLGUsZixnLGgsayl7ZnVuY3Rpb24gbSgpe3JlcXVlc3RBbmltYXRpb25GcmFtZShtKTthLnJlYWR5U3RhdGU+PWEuSEFWRV9DVVJSRU5UX0RBVEEmJih1Lm5lZWRzVXBkYXRlPSEwKX1YLmNhbGwodGhpcyxhLGIsYyxkLGUsZixnLGgsayk7dGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITE7dmFyIHU9dGhpczttKCl9ZnVuY3Rpb24gTmIoYSxiLGMsZCxlLGYsZyxoLGssbSx1LHEpe1guY2FsbCh0aGlzLG51bGwsZixnLGgsayxtLGQsZSx1LHEpO3RoaXMuaW1hZ2U9e3dpZHRoOmIsaGVpZ2h0OmN9O3RoaXMubWlwbWFwcz1hO3RoaXMuZ2VuZXJhdGVNaXBtYXBzPXRoaXMuZmxpcFk9ITF9ZnVuY3Rpb24gcmQoYSxiLGMsZCxlLGYsZyxoLGspe1guY2FsbCh0aGlzLGEsCmIsYyxkLGUsZixnLGgsayk7dGhpcy5uZWVkc1VwZGF0ZT0hMH1mdW5jdGlvbiBFYyhhLGIsYyxkLGUsZixnLGgsayxtKXttPXZvaWQgMCE9PW0/bToxMDI2O2lmKDEwMjYhPT1tJiYxMDI3IT09bSl0aHJvdyBFcnJvcigiRGVwdGhUZXh0dXJlIGZvcm1hdCBtdXN0IGJlIGVpdGhlciBUSFJFRS5EZXB0aEZvcm1hdCBvciBUSFJFRS5EZXB0aFN0ZW5jaWxGb3JtYXQiKTt2b2lkIDA9PT1jJiYxMDI2PT09bSYmKGM9MTAxMik7dm9pZCAwPT09YyYmMTAyNz09PW0mJihjPTEwMjApO1guY2FsbCh0aGlzLG51bGwsZCxlLGYsZyxoLG0sYyxrKTt0aGlzLmltYWdlPXt3aWR0aDphLGhlaWdodDpifTt0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1nP2c6MTAwMzt0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT1oP2g6MTAwMzt0aGlzLmdlbmVyYXRlTWlwbWFwcz10aGlzLmZsaXBZPSExfWZ1bmN0aW9uIE9iKGEpe0kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IldpcmVmcmFtZUdlb21ldHJ5Ijt2YXIgYj1bXSwKYyxkLGUsZixnPVswLDBdLGg9e30sayxtLHU9WyJhIiwiYiIsImMiXTtpZihhJiZhLmlzR2VvbWV0cnkpe3ZhciBxPWEuZmFjZXM7Yz0wO2ZvcihlPXEubGVuZ3RoO2M8ZTtjKyspe3ZhciBuPXFbY107Zm9yKGQ9MDszPmQ7ZCsrKWs9blt1W2RdXSxtPW5bdVsoZCsxKSUzXV0sZ1swXT1NYXRoLm1pbihrLG0pLGdbMV09TWF0aC5tYXgoayxtKSxrPWdbMF0rIiwiK2dbMV0sdm9pZCAwPT09aFtrXSYmKGhba109e2luZGV4MTpnWzBdLGluZGV4MjpnWzFdfSl9Zm9yKGsgaW4gaCljPWhba10sdT1hLnZlcnRpY2VzW2MuaW5kZXgxXSxiLnB1c2godS54LHUueSx1LnopLHU9YS52ZXJ0aWNlc1tjLmluZGV4Ml0sYi5wdXNoKHUueCx1LnksdS56KX1lbHNlIGlmKGEmJmEuaXNCdWZmZXJHZW9tZXRyeSl7dmFyIHIsdT1uZXcgcDtpZihudWxsIT09YS5pbmRleCl7cT1hLmF0dHJpYnV0ZXMucG9zaXRpb247bj1hLmluZGV4O3I9YS5ncm91cHM7MD09PXIubGVuZ3RoJiYocj1be3N0YXJ0OjAsY291bnQ6bi5jb3VudCwKbWF0ZXJpYWxJbmRleDowfV0pO2E9MDtmb3IoZj1yLmxlbmd0aDthPGY7KythKWZvcihjPXJbYV0sZD1jLnN0YXJ0LGU9Yy5jb3VudCxjPWQsZT1kK2U7YzxlO2MrPTMpZm9yKGQ9MDszPmQ7ZCsrKWs9bi5nZXRYKGMrZCksbT1uLmdldFgoYysoZCsxKSUzKSxnWzBdPU1hdGgubWluKGssbSksZ1sxXT1NYXRoLm1heChrLG0pLGs9Z1swXSsiLCIrZ1sxXSx2b2lkIDA9PT1oW2tdJiYoaFtrXT17aW5kZXgxOmdbMF0saW5kZXgyOmdbMV19KTtmb3IoayBpbiBoKWM9aFtrXSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUocSxjLmluZGV4MSksYi5wdXNoKHUueCx1LnksdS56KSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUocSxjLmluZGV4MiksYi5wdXNoKHUueCx1LnksdS56KX1lbHNlIGZvcihxPWEuYXR0cmlidXRlcy5wb3NpdGlvbixjPTAsZT1xLmNvdW50LzM7YzxlO2MrKylmb3IoZD0wOzM+ZDtkKyspaD0zKmMrZCx1LmZyb21CdWZmZXJBdHRyaWJ1dGUocSxoKSxiLnB1c2godS54LHUueSx1LnopLApoPTMqYysoZCsxKSUzLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShxLGgpLGIucHVzaCh1LngsdS55LHUueil9dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhiLDMpKX1mdW5jdGlvbiBGYyhhLGIsYyl7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUGFyYW1ldHJpY0dlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e2Z1bmM6YSxzbGljZXM6YixzdGFja3M6Y307dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFBiKGEsYixjKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gUGIoYSxiLGMpe0kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBhcmFtZXRyaWNCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtmdW5jOmEsc2xpY2VzOmIsc3RhY2tzOmN9O3ZhciBkPVtdLGU9W10sZj1bXSxnPVtdLGg9bmV3IHAsaz1uZXcgcCxtPW5ldyBwLHU9bmV3IHAscT1uZXcgcCxuLHIsbD1iKzE7Zm9yKG49MDtuPD1jO24rKyl7dmFyIHQ9bi9jO2ZvcihyPTA7cjw9YjtyKyspe3ZhciB5PQpyL2Isaz1hKHksdCxrKTtlLnB1c2goay54LGsueSxrLnopOzA8PXktMUUtNT8obT1hKHktMUUtNSx0LG0pLHUuc3ViVmVjdG9ycyhrLG0pKToobT1hKHkrMUUtNSx0LG0pLHUuc3ViVmVjdG9ycyhtLGspKTswPD10LTFFLTU/KG09YSh5LHQtMUUtNSxtKSxxLnN1YlZlY3RvcnMoayxtKSk6KG09YSh5LHQrMUUtNSxtKSxxLnN1YlZlY3RvcnMobSxrKSk7aC5jcm9zc1ZlY3RvcnModSxxKS5ub3JtYWxpemUoKTtmLnB1c2goaC54LGgueSxoLnopO2cucHVzaCh5LHQpfX1mb3Iobj0wO248YztuKyspZm9yKHI9MDtyPGI7cisrKWE9bipsK3IrMSxoPShuKzEpKmwrcisxLGs9KG4rMSkqbCtyLGQucHVzaChuKmwrcixhLGspLGQucHVzaChhLGgsayk7dGhpcy5zZXRJbmRleChkKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGUsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBDKGYsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IEMoZywyKSl9ZnVuY3Rpb24gR2MoYSwKYixjLGQpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBvbHloZWRyb25HZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt2ZXJ0aWNlczphLGluZGljZXM6YixyYWRpdXM6YyxkZXRhaWw6ZH07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IGlhKGEsYixjLGQpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBpYShhLGIsYyxkKXtmdW5jdGlvbiBlKGEpe2gucHVzaChhLngsYS55LGEueil9ZnVuY3Rpb24gZihiLGMpe3ZhciBkPTMqYjtjLng9YVtkKzBdO2MueT1hW2QrMV07Yy56PWFbZCsyXX1mdW5jdGlvbiBnKGEsYixjLGQpezA+ZCYmMT09PWEueCYmKGtbYl09YS54LTEpOzA9PT1jLngmJjA9PT1jLnomJihrW2JdPWQvMi9NYXRoLlBJKy41KX1JLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17dmVydGljZXM6YSxpbmRpY2VzOmIscmFkaXVzOmMsZGV0YWlsOmR9O2M9Y3x8MTt2YXIgaD1bXSxrPVtdOyhmdW5jdGlvbihhKXtmb3IodmFyIGM9Cm5ldyBwLGQ9bmV3IHAsZz1uZXcgcCxoPTA7aDxiLmxlbmd0aDtoKz0zKXtmKGJbaCswXSxjKTtmKGJbaCsxXSxkKTtmKGJbaCsyXSxnKTt2YXIgaz1jLGw9ZCx5PWcseD1NYXRoLnBvdygyLGEpLHY9W10sRyx3O2ZvcihHPTA7Rzw9eDtHKyspe3ZbR109W107dmFyIE89ay5jbG9uZSgpLmxlcnAoeSxHL3gpLFM9bC5jbG9uZSgpLmxlcnAoeSxHL3gpLEU9eC1HO2Zvcih3PTA7dzw9RTt3KyspdltHXVt3XT0wPT09dyYmRz09PXg/TzpPLmNsb25lKCkubGVycChTLHcvRSl9Zm9yKEc9MDtHPHg7RysrKWZvcih3PTA7dzwyKih4LUcpLTE7dysrKWs9TWF0aC5mbG9vcih3LzIpLDA9PT13JTI/KGUodltHXVtrKzFdKSxlKHZbRysxXVtrXSksZSh2W0ddW2tdKSk6KGUodltHXVtrKzFdKSxlKHZbRysxXVtrKzFdKSxlKHZbRysxXVtrXSkpfX0pKGR8fDApOyhmdW5jdGlvbihhKXtmb3IodmFyIGI9bmV3IHAsYz0wO2M8aC5sZW5ndGg7Yys9MyliLng9aFtjKzBdLGIueT1oW2MrMV0sYi56PWhbYysKMl0sYi5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcihhKSxoW2MrMF09Yi54LGhbYysxXT1iLnksaFtjKzJdPWIuen0pKGMpOyhmdW5jdGlvbigpe2Zvcih2YXIgYT1uZXcgcCxiPTA7YjxoLmxlbmd0aDtiKz0zKWEueD1oW2IrMF0sYS55PWhbYisxXSxhLno9aFtiKzJdLGsucHVzaChNYXRoLmF0YW4yKGEueiwtYS54KS8yL01hdGguUEkrLjUsMS0oTWF0aC5hdGFuMigtYS55LE1hdGguc3FydChhLngqYS54K2EueiphLnopKS9NYXRoLlBJKy41KSk7Zm9yKHZhciBhPW5ldyBwLGI9bmV3IHAsYz1uZXcgcCxkPW5ldyBwLGU9bmV3IEQsZj1uZXcgRCxsPW5ldyBELHk9MCx4PTA7eTxoLmxlbmd0aDt5Kz05LHgrPTYpe2Euc2V0KGhbeSswXSxoW3krMV0saFt5KzJdKTtiLnNldChoW3krM10saFt5KzRdLGhbeSs1XSk7Yy5zZXQoaFt5KzZdLGhbeSs3XSxoW3krOF0pO2Uuc2V0KGtbeCswXSxrW3grMV0pO2Yuc2V0KGtbeCsyXSxrW3grM10pO2wuc2V0KGtbeCs0XSxrW3grNV0pO2QuY29weShhKS5hZGQoYikuYWRkKGMpLmRpdmlkZVNjYWxhcigzKTsKdmFyIHY9TWF0aC5hdGFuMihkLnosLWQueCk7ZyhlLHgrMCxhLHYpO2coZix4KzIsYix2KTtnKGwseCs0LGMsdil9Zm9yKGE9MDthPGsubGVuZ3RoO2ErPTYpYj1rW2ErMF0sYz1rW2ErMl0sZD1rW2ErNF0sZT1NYXRoLm1pbihiLGMsZCksLjk8TWF0aC5tYXgoYixjLGQpJiYuMT5lJiYoLjI+YiYmKGtbYSswXSs9MSksLjI+YyYmKGtbYSsyXSs9MSksLjI+ZCYmKGtbYSs0XSs9MSkpfSkoKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGgsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBDKGguc2xpY2UoKSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhrLDIpKTt0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKX1mdW5jdGlvbiBIYyhhLGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlRldHJhaGVkcm9uR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsZGV0YWlsOmJ9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBRYihhLGIpKTsKdGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gUWIoYSxiKXtpYS5jYWxsKHRoaXMsWzEsMSwxLC0xLC0xLDEsLTEsMSwtMSwxLC0xLC0xXSxbMiwxLDAsMCwzLDIsMSwzLDAsMiwzLDFdLGEsYik7dGhpcy50eXBlPSJUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGRldGFpbDpifX1mdW5jdGlvbiBJYyhhLGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ik9jdGFoZWRyb25HZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSxkZXRhaWw6Yn07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IG1iKGEsYikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIG1iKGEsYil7aWEuY2FsbCh0aGlzLFsxLDAsMCwtMSwwLDAsMCwxLDAsMCwtMSwwLDAsMCwxLDAsMCwtMV0sWzAsMiw0LDAsNCwzLDAsMyw1LDAsNSwyLDEsMiw1LDEsNSwzLDEsMyw0LDEsNCwyXSxhLGIpO3RoaXMudHlwZT0iT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5IjsKdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSxkZXRhaWw6Yn19ZnVuY3Rpb24gSmMoYSxiKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJJY29zYWhlZHJvbkdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGRldGFpbDpifTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgUmIoYSxiKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gUmIoYSxiKXt2YXIgYz0oMStNYXRoLnNxcnQoNSkpLzI7aWEuY2FsbCh0aGlzLFstMSxjLDAsMSxjLDAsLTEsLWMsMCwxLC1jLDAsMCwtMSxjLDAsMSxjLDAsLTEsLWMsMCwxLC1jLGMsMCwtMSxjLDAsMSwtYywwLC0xLC1jLDAsMV0sWzAsMTEsNSwwLDUsMSwwLDEsNywwLDcsMTAsMCwxMCwxMSwxLDUsOSw1LDExLDQsMTEsMTAsMiwxMCw3LDYsNywxLDgsMyw5LDQsMyw0LDIsMywyLDYsMyw2LDgsMyw4LDksNCw5LDUsMiw0LDExLDYsMiwxMCw4LDYsNyw5LDgsMV0sYSxiKTt0aGlzLnR5cGU9Ikljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnkiOwp0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGRldGFpbDpifX1mdW5jdGlvbiBLYyhhLGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkRvZGVjYWhlZHJvbkdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGRldGFpbDpifTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgU2IoYSxiKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gU2IoYSxiKXt2YXIgYz0oMStNYXRoLnNxcnQoNSkpLzIsZD0xL2M7aWEuY2FsbCh0aGlzLFstMSwtMSwtMSwtMSwtMSwxLC0xLDEsLTEsLTEsMSwxLDEsLTEsLTEsMSwtMSwxLDEsMSwtMSwxLDEsMSwwLC1kLC1jLDAsLWQsYywwLGQsLWMsMCxkLGMsLWQsLWMsMCwtZCxjLDAsZCwtYywwLGQsYywwLC1jLDAsLWQsYywwLC1kLC1jLDAsZCxjLDAsZF0sWzMsMTEsNywzLDcsMTUsMywxNSwxMyw3LDE5LDE3LDcsMTcsNiw3LDYsMTUsMTcsNCw4LDE3LDgsMTAsMTcsMTAsNiw4LDAsMTYsOCwxNiwyLDgsMiwxMCwwLDEyLDEsMCwxLDE4LAowLDE4LDE2LDYsMTAsMiw2LDIsMTMsNiwxMywxNSwyLDE2LDE4LDIsMTgsMywyLDMsMTMsMTgsMSw5LDE4LDksMTEsMTgsMTEsMyw0LDE0LDEyLDQsMTIsMCw0LDAsOCwxMSw5LDUsMTEsNSwxOSwxMSwxOSw3LDE5LDUsMTQsMTksMTQsNCwxOSw0LDE3LDEsMTIsMTQsMSwxNCw1LDEsNSw5XSxhLGIpO3RoaXMudHlwZT0iRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsZGV0YWlsOmJ9fWZ1bmN0aW9uIExjKGEsYixjLGQsZSxmKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJUdWJlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cGF0aDphLHR1YnVsYXJTZWdtZW50czpiLHJhZGl1czpjLHJhZGlhbFNlZ21lbnRzOmQsY2xvc2VkOmV9O3ZvaWQgMCE9PWYmJmNvbnNvbGUud2FybigiVEhSRUUuVHViZUdlb21ldHJ5OiB0YXBlciBoYXMgYmVlbiByZW1vdmVkLiIpO2E9bmV3IFRiKGEsYixjLGQsZSk7dGhpcy50YW5nZW50cz1hLnRhbmdlbnRzOwp0aGlzLm5vcm1hbHM9YS5ub3JtYWxzO3RoaXMuYmlub3JtYWxzPWEuYmlub3JtYWxzO3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KGEpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFRiKGEsYixjLGQsZSl7ZnVuY3Rpb24gZihlKXt2YXIgZj1hLmdldFBvaW50QXQoZS9iKSxtPWcubm9ybWFsc1tlXTtlPWcuYmlub3JtYWxzW2VdO2ZvcihxPTA7cTw9ZDtxKyspe3ZhciB1PXEvZCpNYXRoLlBJKjIsdD1NYXRoLnNpbih1KSx1PS1NYXRoLmNvcyh1KTtrLng9dSptLngrdCplLng7ay55PXUqbS55K3QqZS55O2suej11Km0ueit0KmUuejtrLm5vcm1hbGl6ZSgpO2wucHVzaChrLngsay55LGsueik7aC54PWYueCtjKmsueDtoLnk9Zi55K2Mqay55O2guej1mLnorYyprLno7bi5wdXNoKGgueCxoLnksaC56KX19SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVHViZUJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3BhdGg6YSx0dWJ1bGFyU2VnbWVudHM6YixyYWRpdXM6YyxyYWRpYWxTZWdtZW50czpkLApjbG9zZWQ6ZX07Yj1ifHw2NDtjPWN8fDE7ZD1kfHw4O2U9ZXx8ITE7dmFyIGc9YS5jb21wdXRlRnJlbmV0RnJhbWVzKGIsZSk7dGhpcy50YW5nZW50cz1nLnRhbmdlbnRzO3RoaXMubm9ybWFscz1nLm5vcm1hbHM7dGhpcy5iaW5vcm1hbHM9Zy5iaW5vcm1hbHM7dmFyIGg9bmV3IHAsaz1uZXcgcCxtPW5ldyBELHUscSxuPVtdLGw9W10sej1bXSx0PVtdO2Zvcih1PTA7dTxiO3UrKylmKHUpO2YoITE9PT1lP2I6MCk7Zm9yKHU9MDt1PD1iO3UrKylmb3IocT0wO3E8PWQ7cSsrKW0ueD11L2IsbS55PXEvZCx6LnB1c2gobS54LG0ueSk7KGZ1bmN0aW9uKCl7Zm9yKHE9MTtxPD1iO3ErKylmb3IodT0xO3U8PWQ7dSsrKXt2YXIgYT0oZCsxKSpxKyh1LTEpLGM9KGQrMSkqcSt1LGU9KGQrMSkqKHEtMSkrdTt0LnB1c2goKGQrMSkqKHEtMSkrKHUtMSksYSxlKTt0LnB1c2goYSxjLGUpfX0pKCk7dGhpcy5zZXRJbmRleCh0KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKG4sMykpOwp0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgQyhsLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKHosMikpfWZ1bmN0aW9uIE1jKGEsYixjLGQsZSxmLGcpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlRvcnVzS25vdEdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLHR1YmU6Yix0dWJ1bGFyU2VnbWVudHM6YyxyYWRpYWxTZWdtZW50czpkLHA6ZSxxOmZ9O3ZvaWQgMCE9PWcmJmNvbnNvbGUud2FybigiVEhSRUUuVG9ydXNLbm90R2VvbWV0cnk6IGhlaWdodFNjYWxlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2NhbGUoIHgsIHksIHogKSBpbnN0ZWFkLiIpO3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBVYihhLGIsYyxkLGUsZikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFViKGEsYixjLGQsZSxmKXtmdW5jdGlvbiBnKGEsYixjLGQsZSl7dmFyIGY9TWF0aC5zaW4oYSk7Yj1jL2IqYTtjPU1hdGguY29zKGIpO2UueD1kKigyK2MpKgouNSpNYXRoLmNvcyhhKTtlLnk9ZCooMitjKSpmKi41O2Uuej1kKk1hdGguc2luKGIpKi41fUkuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLHR1YmU6Yix0dWJ1bGFyU2VnbWVudHM6YyxyYWRpYWxTZWdtZW50czpkLHA6ZSxxOmZ9O2E9YXx8MTAwO2I9Ynx8NDA7Yz1NYXRoLmZsb29yKGMpfHw2NDtkPU1hdGguZmxvb3IoZCl8fDg7ZT1lfHwyO2Y9Znx8Mzt2YXIgaD1bXSxrPVtdLG09W10sdT1bXSxxLG4sbD1uZXcgcCx6PW5ldyBwLHQ9bmV3IHAseT1uZXcgcCx4PW5ldyBwLHY9bmV3IHAsRz1uZXcgcDtmb3IocT0wO3E8PWM7KytxKWZvcihuPXEvYyplKk1hdGguUEkqMixnKG4sZSxmLGEsdCksZyhuKy4wMSxlLGYsYSx5KSx2LnN1YlZlY3RvcnMoeSx0KSxHLmFkZFZlY3RvcnMoeSx0KSx4LmNyb3NzVmVjdG9ycyh2LEcpLEcuY3Jvc3NWZWN0b3JzKHgsdikseC5ub3JtYWxpemUoKSxHLm5vcm1hbGl6ZSgpLApuPTA7bjw9ZDsrK24pe3ZhciB3PW4vZCpNYXRoLlBJKjIsTz0tYipNYXRoLmNvcyh3KSx3PWIqTWF0aC5zaW4odyk7bC54PXQueCsoTypHLngrdyp4LngpO2wueT10LnkrKE8qRy55K3cqeC55KTtsLno9dC56KyhPKkcueit3Kngueik7ay5wdXNoKGwueCxsLnksbC56KTt6LnN1YlZlY3RvcnMobCx0KS5ub3JtYWxpemUoKTttLnB1c2goei54LHoueSx6LnopO3UucHVzaChxL2MpO3UucHVzaChuL2QpfWZvcihuPTE7bjw9YztuKyspZm9yKHE9MTtxPD1kO3ErKylhPShkKzEpKm4rKHEtMSksYj0oZCsxKSpuK3EsZT0oZCsxKSoobi0xKStxLGgucHVzaCgoZCsxKSoobi0xKSsocS0xKSxhLGUpLGgucHVzaChhLGIsZSk7dGhpcy5zZXRJbmRleChoKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGssMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBDKG0sMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IEModSwyKSl9ZnVuY3Rpb24gTmMoYSxiLGMsZCwKZSl7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVG9ydXNHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSx0dWJlOmIscmFkaWFsU2VnbWVudHM6Yyx0dWJ1bGFyU2VnbWVudHM6ZCxhcmM6ZX07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFZiKGEsYixjLGQsZSkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFZiKGEsYixjLGQsZSl7SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVG9ydXNCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSx0dWJlOmIscmFkaWFsU2VnbWVudHM6Yyx0dWJ1bGFyU2VnbWVudHM6ZCxhcmM6ZX07YT1hfHwxMDA7Yj1ifHw0MDtjPU1hdGguZmxvb3IoYyl8fDg7ZD1NYXRoLmZsb29yKGQpfHw2O2U9ZXx8MipNYXRoLlBJO3ZhciBmPVtdLGc9W10saD1bXSxrPVtdLG09bmV3IHAsdT1uZXcgcCxxPW5ldyBwLG4sbDtmb3Iobj0wO248PWM7bisrKWZvcihsPTA7bDw9ZDtsKyspe3ZhciB6PWwvZCplLHQ9bi9jKk1hdGguUEkqCjI7dS54PShhK2IqTWF0aC5jb3ModCkpKk1hdGguY29zKHopO3UueT0oYStiKk1hdGguY29zKHQpKSpNYXRoLnNpbih6KTt1Lno9YipNYXRoLnNpbih0KTtnLnB1c2godS54LHUueSx1LnopO20ueD1hKk1hdGguY29zKHopO20ueT1hKk1hdGguc2luKHopO3Euc3ViVmVjdG9ycyh1LG0pLm5vcm1hbGl6ZSgpO2gucHVzaChxLngscS55LHEueik7ay5wdXNoKGwvZCk7ay5wdXNoKG4vYyl9Zm9yKG49MTtuPD1jO24rKylmb3IobD0xO2w8PWQ7bCsrKWE9KGQrMSkqKG4tMSkrbC0xLGI9KGQrMSkqKG4tMSkrbCxlPShkKzEpKm4rbCxmLnB1c2goKGQrMSkqbitsLTEsYSxlKSxmLnB1c2goYSxiLGUpO3RoaXMuc2V0SW5kZXgoZik7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhnLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgQyhoLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKGssMikpfWZ1bmN0aW9uIGRiKGEsYil7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0KIkV4dHJ1ZGVHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6YSxvcHRpb25zOmJ9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBGYShhLGIpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBGYShhLGIpeyJ1bmRlZmluZWQiIT09dHlwZW9mIGEmJihJLmNhbGwodGhpcyksdGhpcy50eXBlPSJFeHRydWRlQnVmZmVyR2VvbWV0cnkiLGE9QXJyYXkuaXNBcnJheShhKT9hOlthXSx0aGlzLmFkZFNoYXBlTGlzdChhLGIpLHRoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKSl9ZnVuY3Rpb24gT2MoYSxiKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJUZXh0R2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17dGV4dDphLHBhcmFtZXRlcnM6Yn07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFdiKGEsYikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFdiKGEsYil7Yj1ifHx7fTt2YXIgYz1iLmZvbnQ7aWYoITE9PT0oYyYmYy5pc0ZvbnQpKXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5UZXh0R2VvbWV0cnk6IGZvbnQgcGFyYW1ldGVyIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5Gb250LiIpLApuZXcgTTtjPWMuZ2VuZXJhdGVTaGFwZXMoYSxiLnNpemUsYi5jdXJ2ZVNlZ21lbnRzKTtiLmFtb3VudD12b2lkIDAhPT1iLmhlaWdodD9iLmhlaWdodDo1MDt2b2lkIDA9PT1iLmJldmVsVGhpY2tuZXNzJiYoYi5iZXZlbFRoaWNrbmVzcz0xMCk7dm9pZCAwPT09Yi5iZXZlbFNpemUmJihiLmJldmVsU2l6ZT04KTt2b2lkIDA9PT1iLmJldmVsRW5hYmxlZCYmKGIuYmV2ZWxFbmFibGVkPSExKTtGYS5jYWxsKHRoaXMsYyxiKTt0aGlzLnR5cGU9IlRleHRCdWZmZXJHZW9tZXRyeSJ9ZnVuY3Rpb24gUGMoYSxiLGMsZCxlLGYsZyl7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iU3BoZXJlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsd2lkdGhTZWdtZW50czpiLGhlaWdodFNlZ21lbnRzOmMscGhpU3RhcnQ6ZCxwaGlMZW5ndGg6ZSx0aGV0YVN0YXJ0OmYsdGhldGFMZW5ndGg6Z307dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IG5iKGEsYixjLGQsZSxmLGcpKTt0aGlzLm1lcmdlVmVydGljZXMoKX0KZnVuY3Rpb24gbmIoYSxiLGMsZCxlLGYsZyl7SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iU3BoZXJlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsd2lkdGhTZWdtZW50czpiLGhlaWdodFNlZ21lbnRzOmMscGhpU3RhcnQ6ZCxwaGlMZW5ndGg6ZSx0aGV0YVN0YXJ0OmYsdGhldGFMZW5ndGg6Z307YT1hfHw1MDtiPU1hdGgubWF4KDMsTWF0aC5mbG9vcihiKXx8OCk7Yz1NYXRoLm1heCgyLE1hdGguZmxvb3IoYyl8fDYpO2Q9dm9pZCAwIT09ZD9kOjA7ZT12b2lkIDAhPT1lP2U6MipNYXRoLlBJO2Y9dm9pZCAwIT09Zj9mOjA7Zz12b2lkIDAhPT1nP2c6TWF0aC5QSTt2YXIgaD1mK2csayxtLHU9MCxxPVtdLG49bmV3IHAsbD1uZXcgcCx6PVtdLHQ9W10seT1bXSx4PVtdO2ZvcihtPTA7bTw9YzttKyspe3ZhciB2PVtdLEc9bS9jO2ZvcihrPTA7azw9YjtrKyspe3ZhciB3PWsvYjtuLng9LWEqTWF0aC5jb3MoZCt3KmUpKk1hdGguc2luKGYrRypnKTtuLnk9YSpNYXRoLmNvcyhmKwpHKmcpO24uej1hKk1hdGguc2luKGQrdyplKSpNYXRoLnNpbihmK0cqZyk7dC5wdXNoKG4ueCxuLnksbi56KTtsLnNldChuLngsbi55LG4ueikubm9ybWFsaXplKCk7eS5wdXNoKGwueCxsLnksbC56KTt4LnB1c2godywxLUcpO3YucHVzaCh1KyspfXEucHVzaCh2KX1mb3IobT0wO208YzttKyspZm9yKGs9MDtrPGI7aysrKWE9cVttXVtrKzFdLGQ9cVttXVtrXSxlPXFbbSsxXVtrXSxnPXFbbSsxXVtrKzFdLCgwIT09bXx8MDxmKSYmei5wdXNoKGEsZCxnKSwobSE9PWMtMXx8aDxNYXRoLlBJKSYmei5wdXNoKGQsZSxnKTt0aGlzLnNldEluZGV4KHopO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEModCwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEMoeSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyh4LDIpKX1mdW5jdGlvbiBRYyhhLGIsYyxkLGUsZil7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUmluZ0dlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9Cntpbm5lclJhZGl1czphLG91dGVyUmFkaXVzOmIsdGhldGFTZWdtZW50czpjLHBoaVNlZ21lbnRzOmQsdGhldGFTdGFydDplLHRoZXRhTGVuZ3RoOmZ9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBYYihhLGIsYyxkLGUsZikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFhiKGEsYixjLGQsZSxmKXtJLmNhbGwodGhpcyk7dGhpcy50eXBlPSJSaW5nQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17aW5uZXJSYWRpdXM6YSxvdXRlclJhZGl1czpiLHRoZXRhU2VnbWVudHM6YyxwaGlTZWdtZW50czpkLHRoZXRhU3RhcnQ6ZSx0aGV0YUxlbmd0aDpmfTthPWF8fDIwO2I9Ynx8NTA7ZT12b2lkIDAhPT1lP2U6MDtmPXZvaWQgMCE9PWY/ZjoyKk1hdGguUEk7Yz12b2lkIDAhPT1jP01hdGgubWF4KDMsYyk6ODtkPXZvaWQgMCE9PWQ/TWF0aC5tYXgoMSxkKToxO3ZhciBnPVtdLGg9W10saz1bXSxtPVtdLHU9YSxxPShiLWEpL2Qsbj1uZXcgcCxsPW5ldyBELHosdDtmb3Ioej0KMDt6PD1kO3orKyl7Zm9yKHQ9MDt0PD1jO3QrKylhPWUrdC9jKmYsbi54PXUqTWF0aC5jb3MoYSksbi55PXUqTWF0aC5zaW4oYSksaC5wdXNoKG4ueCxuLnksbi56KSxrLnB1c2goMCwwLDEpLGwueD0obi54L2IrMSkvMixsLnk9KG4ueS9iKzEpLzIsbS5wdXNoKGwueCxsLnkpO3UrPXF9Zm9yKHo9MDt6PGQ7eisrKWZvcihiPXoqKGMrMSksdD0wO3Q8Yzt0KyspYT10K2IsZT1hK2MrMSxmPWErYysyLHU9YSsxLGcucHVzaChhLGUsdSksZy5wdXNoKGUsZix1KTt0aGlzLnNldEluZGV4KGcpO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMoaCwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEMoaywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhtLDIpKX1mdW5jdGlvbiBSYyhhLGIsYyxkKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMYXRoZUdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3BvaW50czphLHNlZ21lbnRzOmIscGhpU3RhcnQ6YyxwaGlMZW5ndGg6ZH07CnRoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBZYihhLGIsYyxkKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gWWIoYSxiLGMsZCl7SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTGF0aGVCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtwb2ludHM6YSxzZWdtZW50czpiLHBoaVN0YXJ0OmMscGhpTGVuZ3RoOmR9O2I9TWF0aC5mbG9vcihiKXx8MTI7Yz1jfHwwO2Q9ZHx8MipNYXRoLlBJO2Q9WS5jbGFtcChkLDAsMipNYXRoLlBJKTt2YXIgZT1bXSxmPVtdLGc9W10saD0xL2Isaz1uZXcgcCxtPW5ldyBELHUscTtmb3IodT0wO3U8PWI7dSsrKXtxPWMrdSpoKmQ7dmFyIG49TWF0aC5zaW4ocSksbD1NYXRoLmNvcyhxKTtmb3IocT0wO3E8PWEubGVuZ3RoLTE7cSsrKWsueD1hW3FdLngqbixrLnk9YVtxXS55LGsuej1hW3FdLngqbCxmLnB1c2goay54LGsueSxrLnopLG0ueD11L2IsbS55PXEvKGEubGVuZ3RoLTEpLGcucHVzaChtLngsbS55KX1mb3IodT0wO3U8Yjt1KyspZm9yKHE9CjA7cTxhLmxlbmd0aC0xO3ErKyljPXErdSphLmxlbmd0aCxoPWMrYS5sZW5ndGgsaz1jK2EubGVuZ3RoKzEsbT1jKzEsZS5wdXNoKGMsaCxtKSxlLnB1c2goaCxrLG0pO3RoaXMuc2V0SW5kZXgoZSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhmLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKGcsMikpO3RoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtpZihkPT09MipNYXRoLlBJKWZvcihkPXRoaXMuYXR0cmlidXRlcy5ub3JtYWwuYXJyYXksZT1uZXcgcCxmPW5ldyBwLGc9bmV3IHAsYz1iKmEubGVuZ3RoKjMscT11PTA7dTxhLmxlbmd0aDt1KysscSs9MyllLng9ZFtxKzBdLGUueT1kW3ErMV0sZS56PWRbcSsyXSxmLng9ZFtjK3ErMF0sZi55PWRbYytxKzFdLGYuej1kW2MrcSsyXSxnLmFkZFZlY3RvcnMoZSxmKS5ub3JtYWxpemUoKSxkW3ErMF09ZFtjK3ErMF09Zy54LGRbcSsxXT1kW2MrcSsxXT1nLnksZFtxKzJdPWRbYytxKzJdPWcuen1mdW5jdGlvbiBaYihhLApiKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTaGFwZUdlb21ldHJ5Ijsib2JqZWN0Ij09PXR5cGVvZiBiJiYoY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZUdlb21ldHJ5OiBPcHRpb25zIHBhcmFtZXRlciBoYXMgYmVlbiByZW1vdmVkLiIpLGI9Yi5jdXJ2ZVNlZ21lbnRzKTt0aGlzLnBhcmFtZXRlcnM9e3NoYXBlczphLGN1cnZlU2VnbWVudHM6Yn07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3ICRiKGEsYikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uICRiKGEsYil7ZnVuY3Rpb24gYyhhKXt2YXIgYyxoLG09ZS5sZW5ndGgvMzthPWEuZXh0cmFjdFBvaW50cyhiKTt2YXIgbD1hLnNoYXBlLHQ9YS5ob2xlcztpZighMT09PXphLmlzQ2xvY2tXaXNlKGwpKWZvcihsPWwucmV2ZXJzZSgpLGE9MCxjPXQubGVuZ3RoO2E8YzthKyspaD10W2FdLCEwPT09emEuaXNDbG9ja1dpc2UoaCkmJih0W2FdPWgucmV2ZXJzZSgpKTt2YXIgcD16YS50cmlhbmd1bGF0ZVNoYXBlKGwsdCk7CmE9MDtmb3IoYz10Lmxlbmd0aDthPGM7YSsrKWg9dFthXSxsPWwuY29uY2F0KGgpO2E9MDtmb3IoYz1sLmxlbmd0aDthPGM7YSsrKWg9bFthXSxlLnB1c2goaC54LGgueSwwKSxmLnB1c2goMCwwLDEpLGcucHVzaChoLngsaC55KTthPTA7Zm9yKGM9cC5sZW5ndGg7YTxjO2ErKylsPXBbYV0sZC5wdXNoKGxbMF0rbSxsWzFdK20sbFsyXSttKSxrKz0zfUkuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlNoYXBlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17c2hhcGVzOmEsY3VydmVTZWdtZW50czpifTtiPWJ8fDEyO3ZhciBkPVtdLGU9W10sZj1bXSxnPVtdLGg9MCxrPTA7aWYoITE9PT1BcnJheS5pc0FycmF5KGEpKWMoYSk7ZWxzZSBmb3IodmFyIG09MDttPGEubGVuZ3RoO20rKyljKGFbbV0pLHRoaXMuYWRkR3JvdXAoaCxrLG0pLGgrPWssaz0wO3RoaXMuc2V0SW5kZXgoZCk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhlLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIiwKbmV3IEMoZiwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhnLDIpKX1mdW5jdGlvbiBhYyhhLGIpe0kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkVkZ2VzR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17dGhyZXNob2xkQW5nbGU6Yn07dmFyIGM9W10sZD1NYXRoLmNvcyhZLkRFRzJSQUQqKHZvaWQgMCE9PWI/YjoxKSksZT1bMCwwXSxmPXt9LGcsaCxrPVsiYSIsImIiLCJjIl0sbTthLmlzQnVmZmVyR2VvbWV0cnk/KG09bmV3IE0sbS5mcm9tQnVmZmVyR2VvbWV0cnkoYSkpOm09YS5jbG9uZSgpO20ubWVyZ2VWZXJ0aWNlcygpO20uY29tcHV0ZUZhY2VOb3JtYWxzKCk7dmFyIHU9bS52ZXJ0aWNlczttPW0uZmFjZXM7Zm9yKHZhciBsPTAsbj1tLmxlbmd0aDtsPG47bCsrKWZvcih2YXIgcj1tW2xdLHA9MDszPnA7cCsrKWc9cltrW3BdXSxoPXJba1socCsxKSUzXV0sZVswXT1NYXRoLm1pbihnLGgpLGVbMV09TWF0aC5tYXgoZyxoKSxnPWVbMF0rIiwiK2VbMV0sdm9pZCAwPT09CmZbZ10/ZltnXT17aW5kZXgxOmVbMF0saW5kZXgyOmVbMV0sZmFjZTE6bCxmYWNlMjp2b2lkIDB9OmZbZ10uZmFjZTI9bDtmb3IoZyBpbiBmKWlmKGU9ZltnXSx2b2lkIDA9PT1lLmZhY2UyfHxtW2UuZmFjZTFdLm5vcm1hbC5kb3QobVtlLmZhY2UyXS5ub3JtYWwpPD1kKWs9dVtlLmluZGV4MV0sYy5wdXNoKGsueCxrLnksay56KSxrPXVbZS5pbmRleDJdLGMucHVzaChrLngsay55LGsueik7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhjLDMpKX1mdW5jdGlvbiBvYihhLGIsYyxkLGUsZixnLGgpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN5bGluZGVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzVG9wOmEscmFkaXVzQm90dG9tOmIsaGVpZ2h0OmMscmFkaWFsU2VnbWVudHM6ZCxoZWlnaHRTZWdtZW50czplLG9wZW5FbmRlZDpmLHRoZXRhU3RhcnQ6Zyx0aGV0YUxlbmd0aDpofTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgV2EoYSxiLGMsZCxlLApmLGcsaCkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFdhKGEsYixjLGQsZSxmLGcsaCl7ZnVuY3Rpb24gayhjKXt2YXIgZSxmLGssdD1uZXcgRCxFPW5ldyBwLEY9MCxhYT0hMD09PWM/YTpiLFI9ITA9PT1jPzE6LTE7Zj16O2ZvcihlPTE7ZTw9ZDtlKyspbC5wdXNoKDAseSpSLDApLG4ucHVzaCgwLFIsMCksci5wdXNoKC41LC41KSx6Kys7az16O2ZvcihlPTA7ZTw9ZDtlKyspe3ZhciBDPWUvZCpoK2csQj1NYXRoLmNvcyhDKSxDPU1hdGguc2luKEMpO0UueD1hYSpDO0UueT15KlI7RS56PWFhKkI7bC5wdXNoKEUueCxFLnksRS56KTtuLnB1c2goMCxSLDApO3QueD0uNSpCKy41O3QueT0uNSpDKlIrLjU7ci5wdXNoKHQueCx0LnkpO3orK31mb3IoZT0wO2U8ZDtlKyspdD1mK2UsRT1rK2UsITA9PT1jP3UucHVzaChFLEUrMSx0KTp1LnB1c2goRSsxLEUsdCksRis9MzttLmFkZEdyb3VwKHgsRiwhMD09PWM/MToyKTt4Kz1GfUkuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN5bGluZGVyQnVmZmVyR2VvbWV0cnkiOwp0aGlzLnBhcmFtZXRlcnM9e3JhZGl1c1RvcDphLHJhZGl1c0JvdHRvbTpiLGhlaWdodDpjLHJhZGlhbFNlZ21lbnRzOmQsaGVpZ2h0U2VnbWVudHM6ZSxvcGVuRW5kZWQ6Zix0aGV0YVN0YXJ0OmcsdGhldGFMZW5ndGg6aH07dmFyIG09dGhpczthPXZvaWQgMCE9PWE/YToyMDtiPXZvaWQgMCE9PWI/YjoyMDtjPXZvaWQgMCE9PWM/YzoxMDA7ZD1NYXRoLmZsb29yKGQpfHw4O2U9TWF0aC5mbG9vcihlKXx8MTtmPXZvaWQgMCE9PWY/ZjohMTtnPXZvaWQgMCE9PWc/ZzowO2g9dm9pZCAwIT09aD9oOjIqTWF0aC5QSTt2YXIgdT1bXSxsPVtdLG49W10scj1bXSx6PTAsdD1bXSx5PWMvMix4PTA7KGZ1bmN0aW9uKCl7dmFyIGYsayx3PW5ldyBwLE89bmV3IHAsUz0wLEU9KGItYSkvYztmb3Ioaz0wO2s8PWU7aysrKXt2YXIgRj1bXSxhYT1rL2UsQz1hYSooYi1hKSthO2ZvcihmPTA7Zjw9ZDtmKyspe3ZhciBEPWYvZCxCPUQqaCtnLEk9TWF0aC5zaW4oQiksQj1NYXRoLmNvcyhCKTtPLng9QyoKSTtPLnk9LWFhKmMreTtPLno9QypCO2wucHVzaChPLngsTy55LE8ueik7dy5zZXQoSSxFLEIpLm5vcm1hbGl6ZSgpO24ucHVzaCh3Lngsdy55LHcueik7ci5wdXNoKEQsMS1hYSk7Ri5wdXNoKHorKyl9dC5wdXNoKEYpfWZvcihmPTA7ZjxkO2YrKylmb3Ioaz0wO2s8ZTtrKyspdz10W2srMV1bZl0sTz10W2srMV1bZisxXSxFPXRba11bZisxXSx1LnB1c2godFtrXVtmXSx3LEUpLHUucHVzaCh3LE8sRSksUys9NjttLmFkZEdyb3VwKHgsUywwKTt4Kz1TfSkoKTshMT09PWYmJigwPGEmJmsoITApLDA8YiYmayghMSkpO3RoaXMuc2V0SW5kZXgodSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhsLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgQyhuLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKHIsMikpfWZ1bmN0aW9uIFNjKGEsYixjLGQsZSxmLGcpe29iLmNhbGwodGhpcywwLGEsYixjLGQsZSxmLGcpO3RoaXMudHlwZT0iQ29uZUdlb21ldHJ5IjsKdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSxoZWlnaHQ6YixyYWRpYWxTZWdtZW50czpjLGhlaWdodFNlZ21lbnRzOmQsb3BlbkVuZGVkOmUsdGhldGFTdGFydDpmLHRoZXRhTGVuZ3RoOmd9fWZ1bmN0aW9uIFRjKGEsYixjLGQsZSxmLGcpe1dhLmNhbGwodGhpcywwLGEsYixjLGQsZSxmLGcpO3RoaXMudHlwZT0iQ29uZUJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGhlaWdodDpiLHJhZGlhbFNlZ21lbnRzOmMsaGVpZ2h0U2VnbWVudHM6ZCxvcGVuRW5kZWQ6ZSx0aGV0YVN0YXJ0OmYsdGhldGFMZW5ndGg6Z319ZnVuY3Rpb24gVWMoYSxiLGMsZCl7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsc2VnbWVudHM6Yix0aGV0YVN0YXJ0OmMsdGhldGFMZW5ndGg6ZH07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IGJjKGEsYixjLGQpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBiYyhhLApiLGMsZCl7SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ2lyY2xlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsc2VnbWVudHM6Yix0aGV0YVN0YXJ0OmMsdGhldGFMZW5ndGg6ZH07YT1hfHw1MDtiPXZvaWQgMCE9PWI/TWF0aC5tYXgoMyxiKTo4O2M9dm9pZCAwIT09Yz9jOjA7ZD12b2lkIDAhPT1kP2Q6MipNYXRoLlBJO3ZhciBlPVtdLGY9W10sZz1bXSxoPVtdLGssbSx1PW5ldyBwLGw9bmV3IEQ7Zi5wdXNoKDAsMCwwKTtnLnB1c2goMCwwLDEpO2gucHVzaCguNSwuNSk7bT0wO2ZvcihrPTM7bTw9YjttKyssays9Myl7dmFyIG49YyttL2IqZDt1Lng9YSpNYXRoLmNvcyhuKTt1Lnk9YSpNYXRoLnNpbihuKTtmLnB1c2godS54LHUueSx1LnopO2cucHVzaCgwLDAsMSk7bC54PShmW2tdL2ErMSkvMjtsLnk9KGZbaysxXS9hKzEpLzI7aC5wdXNoKGwueCxsLnkpfWZvcihrPTE7azw9YjtrKyspZS5wdXNoKGssaysxLDApO3RoaXMuc2V0SW5kZXgoZSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIiwKbmV3IEMoZiwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEMoZywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhoLDIpKX1mdW5jdGlvbiBjYyhhKXtFYS5jYWxsKHRoaXMse3VuaWZvcm1zOkhhLm1lcmdlKFtWLmxpZ2h0cyx7b3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOlUuc2hhZG93X3ZlcnQsZnJhZ21lbnRTaGFkZXI6VS5zaGFkb3dfZnJhZ30pO3RoaXMudHJhbnNwYXJlbnQ9dGhpcy5saWdodHM9ITA7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7b3BhY2l0eTp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5vcGFjaXR5LnZhbHVlfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy51bmlmb3Jtcy5vcGFjaXR5LnZhbHVlPWF9fX0pO3RoaXMuc2V0VmFsdWVzKGEpfWZ1bmN0aW9uIGRjKGEpe0VhLmNhbGwodGhpcyxhKTt0aGlzLnR5cGU9IlJhd1NoYWRlck1hdGVyaWFsIn1mdW5jdGlvbiBSYShhKXtaLmNhbGwodGhpcyk7CnRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9O3RoaXMudHlwZT0iTWVzaFN0YW5kYXJkTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMubWV0YWxuZXNzPXRoaXMucm91Z2huZXNzPS41O3RoaXMubGlnaHRNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTE7dGhpcy5hb01hcD1udWxsO3RoaXMuYW9NYXBJbnRlbnNpdHk9MTt0aGlzLmVtaXNzaXZlPW5ldyBIKDApO3RoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MTt0aGlzLmJ1bXBNYXA9dGhpcy5lbWlzc2l2ZU1hcD1udWxsO3RoaXMuYnVtcFNjYWxlPTE7dGhpcy5ub3JtYWxNYXA9bnVsbDt0aGlzLm5vcm1hbFNjYWxlPW5ldyBEKDEsMSk7dGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTE7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPTA7dGhpcy5lbnZNYXA9dGhpcy5hbHBoYU1hcD10aGlzLm1ldGFsbmVzc01hcD10aGlzLnJvdWdobmVzc01hcD1udWxsOwp0aGlzLmVudk1hcEludGVuc2l0eT0xO3RoaXMucmVmcmFjdGlvblJhdGlvPS45ODt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xO3RoaXMud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCI7dGhpcy5tb3JwaE5vcm1hbHM9dGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz0hMTt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiBwYihhKXtSYS5jYWxsKHRoaXMpO3RoaXMuZGVmaW5lcz17UEhZU0lDQUw6IiJ9O3RoaXMudHlwZT0iTWVzaFBoeXNpY2FsTWF0ZXJpYWwiO3RoaXMucmVmbGVjdGl2aXR5PS41O3RoaXMuY2xlYXJDb2F0Um91Z2huZXNzPXRoaXMuY2xlYXJDb2F0PTA7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24gdGEoYSl7Wi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTWVzaFBob25nTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMuc3BlY3VsYXI9bmV3IEgoMTExODQ4MSk7dGhpcy5zaGluaW5lc3M9CjMwO3RoaXMubGlnaHRNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTE7dGhpcy5hb01hcD1udWxsO3RoaXMuYW9NYXBJbnRlbnNpdHk9MTt0aGlzLmVtaXNzaXZlPW5ldyBIKDApO3RoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MTt0aGlzLmJ1bXBNYXA9dGhpcy5lbWlzc2l2ZU1hcD1udWxsO3RoaXMuYnVtcFNjYWxlPTE7dGhpcy5ub3JtYWxNYXA9bnVsbDt0aGlzLm5vcm1hbFNjYWxlPW5ldyBEKDEsMSk7dGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTE7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPTA7dGhpcy5lbnZNYXA9dGhpcy5hbHBoYU1hcD10aGlzLnNwZWN1bGFyTWFwPW51bGw7dGhpcy5jb21iaW5lPTA7dGhpcy5yZWZsZWN0aXZpdHk9MTt0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTg7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWNhcD0KInJvdW5kIjt0aGlzLm1vcnBoTm9ybWFscz10aGlzLm1vcnBoVGFyZ2V0cz10aGlzLnNraW5uaW5nPSExO3RoaXMuc2V0VmFsdWVzKGEpfWZ1bmN0aW9uIHFiKGEpe3RhLmNhbGwodGhpcyk7dGhpcy5kZWZpbmVzPXtUT09OOiIifTt0aGlzLnR5cGU9Ik1lc2hUb29uTWF0ZXJpYWwiO3RoaXMuZ3JhZGllbnRNYXA9bnVsbDt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiByYihhKXtaLmNhbGwodGhpcyxhKTt0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCI7dGhpcy5idW1wTWFwPW51bGw7dGhpcy5idW1wU2NhbGU9MTt0aGlzLm5vcm1hbE1hcD1udWxsO3RoaXMubm9ybWFsU2NhbGU9bmV3IEQoMSwxKTt0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9MTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9MDt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xO3RoaXMubW9ycGhOb3JtYWxzPXRoaXMubW9ycGhUYXJnZXRzPXRoaXMuc2tpbm5pbmc9CnRoaXMubGlnaHRzPXRoaXMuZm9nPSExO3RoaXMuc2V0VmFsdWVzKGEpfWZ1bmN0aW9uIHNiKGEpe1ouY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ik1lc2hMYW1iZXJ0TWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMubGlnaHRNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTE7dGhpcy5hb01hcD1udWxsO3RoaXMuYW9NYXBJbnRlbnNpdHk9MTt0aGlzLmVtaXNzaXZlPW5ldyBIKDApO3RoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MTt0aGlzLmVudk1hcD10aGlzLmFscGhhTWFwPXRoaXMuc3BlY3VsYXJNYXA9dGhpcy5lbWlzc2l2ZU1hcD1udWxsO3RoaXMuY29tYmluZT0wO3RoaXMucmVmbGVjdGl2aXR5PTE7dGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4O3RoaXMud2lyZWZyYW1lPSExO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPTE7dGhpcy53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIjt0aGlzLm1vcnBoTm9ybWFscz0KdGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz0hMTt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiB0YihhKXtaLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMaW5lRGFzaGVkTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMuc2NhbGU9dGhpcy5saW5ld2lkdGg9MTt0aGlzLmRhc2hTaXplPTM7dGhpcy5nYXBTaXplPTE7dGhpcy5saWdodHM9ITE7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24gWmQoYSxiLGMpe3ZhciBkPXRoaXMsZT0hMSxmPTAsZz0wO3RoaXMub25TdGFydD12b2lkIDA7dGhpcy5vbkxvYWQ9YTt0aGlzLm9uUHJvZ3Jlc3M9Yjt0aGlzLm9uRXJyb3I9Yzt0aGlzLml0ZW1TdGFydD1mdW5jdGlvbihhKXtnKys7aWYoITE9PT1lJiZ2b2lkIDAhPT1kLm9uU3RhcnQpZC5vblN0YXJ0KGEsZixnKTtlPSEwfTt0aGlzLml0ZW1FbmQ9ZnVuY3Rpb24oYSl7ZisrO2lmKHZvaWQgMCE9PWQub25Qcm9ncmVzcylkLm9uUHJvZ3Jlc3MoYSxmLGcpO2lmKGY9PT0KZyYmKGU9ITEsdm9pZCAwIT09ZC5vbkxvYWQpKWQub25Mb2FkKCl9O3RoaXMuaXRlbUVycm9yPWZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PWQub25FcnJvcilkLm9uRXJyb3IoYSl9fWZ1bmN0aW9uIHVhKGEpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1hP2E6QWF9ZnVuY3Rpb24gUWUoYSl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWE/YTpBYTt0aGlzLl9wYXJzZXI9bnVsbH1mdW5jdGlvbiAkZChhKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09YT9hOkFhO3RoaXMuX3BhcnNlcj1udWxsfWZ1bmN0aW9uIFZjKGEpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1hP2E6QWF9ZnVuY3Rpb24gYWUoYSl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWE/YTpBYX1mdW5jdGlvbiBzZChhKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09YT9hOkFhfWZ1bmN0aW9uIG1hKGEsYil7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTGlnaHQiO3RoaXMuY29sb3I9bmV3IEgoYSk7dGhpcy5pbnRlbnNpdHk9dm9pZCAwIT09Yj9iOjE7CnRoaXMucmVjZWl2ZVNoYWRvdz12b2lkIDB9ZnVuY3Rpb24gdGQoYSxiLGMpe21hLmNhbGwodGhpcyxhLGMpO3RoaXMudHlwZT0iSGVtaXNwaGVyZUxpZ2h0Ijt0aGlzLmNhc3RTaGFkb3c9dm9pZCAwO3RoaXMucG9zaXRpb24uY29weShCLkRlZmF1bHRVcCk7dGhpcy51cGRhdGVNYXRyaXgoKTt0aGlzLmdyb3VuZENvbG9yPW5ldyBIKGIpfWZ1bmN0aW9uIHViKGEpe3RoaXMuY2FtZXJhPWE7dGhpcy5iaWFzPTA7dGhpcy5yYWRpdXM9MTt0aGlzLm1hcFNpemU9bmV3IEQoNTEyLDUxMik7dGhpcy5tYXA9bnVsbDt0aGlzLm1hdHJpeD1uZXcgSn1mdW5jdGlvbiB1ZCgpe3ViLmNhbGwodGhpcyxuZXcgeGEoNTAsMSwuNSw1MDApKX1mdW5jdGlvbiB2ZChhLGIsYyxkLGUsZil7bWEuY2FsbCh0aGlzLGEsYik7dGhpcy50eXBlPSJTcG90TGlnaHQiO3RoaXMucG9zaXRpb24uY29weShCLkRlZmF1bHRVcCk7dGhpcy51cGRhdGVNYXRyaXgoKTt0aGlzLnRhcmdldD1uZXcgQjtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywKInBvd2VyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9LHNldDpmdW5jdGlvbihhKXt0aGlzLmludGVuc2l0eT1hL01hdGguUEl9fSk7dGhpcy5kaXN0YW5jZT12b2lkIDAhPT1jP2M6MDt0aGlzLmFuZ2xlPXZvaWQgMCE9PWQ/ZDpNYXRoLlBJLzM7dGhpcy5wZW51bWJyYT12b2lkIDAhPT1lP2U6MDt0aGlzLmRlY2F5PXZvaWQgMCE9PWY/ZjoxO3RoaXMuc2hhZG93PW5ldyB1ZH1mdW5jdGlvbiB3ZChhLGIsYyxkKXttYS5jYWxsKHRoaXMsYSxiKTt0aGlzLnR5cGU9IlBvaW50TGlnaHQiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwb3dlciIse2dldDpmdW5jdGlvbigpe3JldHVybiA0KnRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9LHNldDpmdW5jdGlvbihhKXt0aGlzLmludGVuc2l0eT1hLyg0Kk1hdGguUEkpfX0pO3RoaXMuZGlzdGFuY2U9dm9pZCAwIT09Yz9jOjA7dGhpcy5kZWNheT12b2lkIDAhPT1kP2Q6MTt0aGlzLnNoYWRvdz1uZXcgdWIobmV3IHhhKDkwLAoxLC41LDUwMCkpfWZ1bmN0aW9uIHhkKCl7dWIuY2FsbCh0aGlzLG5ldyBKYigtNSw1LDUsLTUsLjUsNTAwKSl9ZnVuY3Rpb24geWQoYSxiKXttYS5jYWxsKHRoaXMsYSxiKTt0aGlzLnR5cGU9IkRpcmVjdGlvbmFsTGlnaHQiO3RoaXMucG9zaXRpb24uY29weShCLkRlZmF1bHRVcCk7dGhpcy51cGRhdGVNYXRyaXgoKTt0aGlzLnRhcmdldD1uZXcgQjt0aGlzLnNoYWRvdz1uZXcgeGR9ZnVuY3Rpb24gemQoYSxiKXttYS5jYWxsKHRoaXMsYSxiKTt0aGlzLnR5cGU9IkFtYmllbnRMaWdodCI7dGhpcy5jYXN0U2hhZG93PXZvaWQgMH1mdW5jdGlvbiBBZChhLGIsYyxkKXttYS5jYWxsKHRoaXMsYSxiKTt0aGlzLnR5cGU9IlJlY3RBcmVhTGlnaHQiO3RoaXMucG9zaXRpb24uc2V0KDAsMSwwKTt0aGlzLnVwZGF0ZU1hdHJpeCgpO3RoaXMud2lkdGg9dm9pZCAwIT09Yz9jOjEwO3RoaXMuaGVpZ2h0PXZvaWQgMCE9PWQ/ZDoxMH1mdW5jdGlvbiBEYShhLGIsYyxkKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz0KYTt0aGlzLl9jYWNoZWRJbmRleD0wO3RoaXMucmVzdWx0QnVmZmVyPXZvaWQgMCE9PWQ/ZDpuZXcgYi5jb25zdHJ1Y3RvcihjKTt0aGlzLnNhbXBsZVZhbHVlcz1iO3RoaXMudmFsdWVTaXplPWN9ZnVuY3Rpb24gQmQoYSxiLGMsZCl7RGEuY2FsbCh0aGlzLGEsYixjLGQpO3RoaXMuX29mZnNldE5leHQ9dGhpcy5fd2VpZ2h0TmV4dD10aGlzLl9vZmZzZXRQcmV2PXRoaXMuX3dlaWdodFByZXY9LTB9ZnVuY3Rpb24gV2MoYSxiLGMsZCl7RGEuY2FsbCh0aGlzLGEsYixjLGQpfWZ1bmN0aW9uIENkKGEsYixjLGQpe0RhLmNhbGwodGhpcyxhLGIsYyxkKX1mdW5jdGlvbiB2YihhLGIsYyxkKXtpZih2b2lkIDA9PT1hKXRocm93IEVycm9yKCJ0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCIpO2lmKHZvaWQgMD09PWJ8fDA9PT1iLmxlbmd0aCl0aHJvdyBFcnJvcigibm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrYSk7dGhpcy5uYW1lPWE7dGhpcy50aW1lcz12YS5jb252ZXJ0QXJyYXkoYix0aGlzLlRpbWVCdWZmZXJUeXBlKTsKdGhpcy52YWx1ZXM9dmEuY29udmVydEFycmF5KGMsdGhpcy5WYWx1ZUJ1ZmZlclR5cGUpO3RoaXMuc2V0SW50ZXJwb2xhdGlvbihkfHx0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKTt0aGlzLnZhbGlkYXRlKCk7dGhpcy5vcHRpbWl6ZSgpfWZ1bmN0aW9uIGVjKGEsYixjLGQpe3ZiLmNhbGwodGhpcyxhLGIsYyxkKX1mdW5jdGlvbiBEZChhLGIsYyxkKXtEYS5jYWxsKHRoaXMsYSxiLGMsZCl9ZnVuY3Rpb24gWGMoYSxiLGMsZCl7dmIuY2FsbCh0aGlzLGEsYixjLGQpfWZ1bmN0aW9uIGZjKGEsYixjLGQpe3ZiLmNhbGwodGhpcyxhLGIsYyxkKX1mdW5jdGlvbiBFZChhLGIsYyxkKXt2Yi5jYWxsKHRoaXMsYSxiLGMsZCl9ZnVuY3Rpb24gRmQoYSxiLGMpe3ZiLmNhbGwodGhpcyxhLGIsYyl9ZnVuY3Rpb24gR2QoYSxiLGMsZCl7dmIuY2FsbCh0aGlzLGEsYixjLGQpfWZ1bmN0aW9uIHdiKGEsYixjLGQpe3ZiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBCYShhLGIsYyl7dGhpcy5uYW1lPQphO3RoaXMudHJhY2tzPWM7dGhpcy5kdXJhdGlvbj12b2lkIDAhPT1iP2I6LTE7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7MD50aGlzLmR1cmF0aW9uJiZ0aGlzLnJlc2V0RHVyYXRpb24oKTt0aGlzLm9wdGltaXplKCl9ZnVuY3Rpb24gSGQoYSl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWE/YTpBYTt0aGlzLnRleHR1cmVzPXt9fWZ1bmN0aW9uIGJlKGEpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1hP2E6QWF9ZnVuY3Rpb24gZ2MoKXt0aGlzLm9uTG9hZFN0YXJ0PWZ1bmN0aW9uKCl7fTt0aGlzLm9uTG9hZFByb2dyZXNzPWZ1bmN0aW9uKCl7fTt0aGlzLm9uTG9hZENvbXBsZXRlPWZ1bmN0aW9uKCl7fX1mdW5jdGlvbiBjZShhKXsiYm9vbGVhbiI9PT10eXBlb2YgYSYmKGNvbnNvbGUud2FybigiVEhSRUUuSlNPTkxvYWRlcjogc2hvd1N0YXR1cyBwYXJhbWV0ZXIgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGNvbnN0cnVjdG9yLiIpLGE9dm9pZCAwKTt0aGlzLm1hbmFnZXI9dm9pZCAwIT09CmE/YTpBYTt0aGlzLndpdGhDcmVkZW50aWFscz0hMX1mdW5jdGlvbiBSZShhKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09YT9hOkFhO3RoaXMudGV4dHVyZVBhdGg9IiJ9ZnVuY3Rpb24gU2UoYSxiLGMsZCxlKXtiPS41KihkLWIpO2U9LjUqKGUtYyk7dmFyIGY9YSphO3JldHVybigyKmMtMipkK2IrZSkqYSpmKygtMypjKzMqZC0yKmItZSkqZitiKmErY31mdW5jdGlvbiB4YihhLGIsYyxkKXt2YXIgZT0xLWE7cmV0dXJuIGUqZSpiKzIqKDEtYSkqYSpjK2EqYSpkfWZ1bmN0aW9uIHliKGEsYixjLGQsZSl7dmFyIGY9MS1hLGc9MS1hO3JldHVybiBmKmYqZipiKzMqZypnKmEqYyszKigxLWEpKmEqYSpkK2EqYSphKmV9ZnVuY3Rpb24gbmEoKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDB9ZnVuY3Rpb24gU2EoYSxiKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDA7dGhpcy52MT1hO3RoaXMudjI9Yn1mdW5jdGlvbiBZYygpe3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMDt0aGlzLmN1cnZlcz0KW107dGhpcy5hdXRvQ2xvc2U9ITF9ZnVuY3Rpb24gWGEoYSxiLGMsZCxlLGYsZyxoKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDA7dGhpcy5hWD1hO3RoaXMuYVk9Yjt0aGlzLnhSYWRpdXM9Yzt0aGlzLnlSYWRpdXM9ZDt0aGlzLmFTdGFydEFuZ2xlPWU7dGhpcy5hRW5kQW5nbGU9Zjt0aGlzLmFDbG9ja3dpc2U9Zzt0aGlzLmFSb3RhdGlvbj1ofHwwfWZ1bmN0aW9uIHpiKGEpe3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMDt0aGlzLnBvaW50cz12b2lkIDA9PT1hP1tdOmF9ZnVuY3Rpb24gaGMoYSxiLGMsZCl7dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwO3RoaXMudjA9YTt0aGlzLnYxPWI7dGhpcy52Mj1jO3RoaXMudjM9ZH1mdW5jdGlvbiBpYyhhLGIsYyl7dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwO3RoaXMudjA9YTt0aGlzLnYxPWI7dGhpcy52Mj1jfWZ1bmN0aW9uIFpjKGEpe1ljLmNhbGwodGhpcyk7dGhpcy5jdXJyZW50UG9pbnQ9bmV3IEQ7YSYmdGhpcy5mcm9tUG9pbnRzKGEpfQpmdW5jdGlvbiBBYigpe1pjLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmhvbGVzPVtdfWZ1bmN0aW9uIGRlKCl7dGhpcy5zdWJQYXRocz1bXTt0aGlzLmN1cnJlbnRQYXRoPW51bGx9ZnVuY3Rpb24gZWUoYSl7dGhpcy5kYXRhPWF9ZnVuY3Rpb24gVGUoYSl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWE/YTpBYX1mdW5jdGlvbiBmZShhKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09YT9hOkFhfWZ1bmN0aW9uIFVlKCl7dGhpcy50eXBlPSJTdGVyZW9DYW1lcmEiO3RoaXMuYXNwZWN0PTE7dGhpcy5leWVTZXA9LjA2NDt0aGlzLmNhbWVyYUw9bmV3IHhhO3RoaXMuY2FtZXJhTC5sYXllcnMuZW5hYmxlKDEpO3RoaXMuY2FtZXJhTC5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMuY2FtZXJhUj1uZXcgeGE7dGhpcy5jYW1lcmFSLmxheWVycy5lbmFibGUoMik7dGhpcy5jYW1lcmFSLm1hdHJpeEF1dG9VcGRhdGU9ITF9ZnVuY3Rpb24gSWQoYSxiLGMpe0IuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN1YmVDYW1lcmEiOwp2YXIgZD1uZXcgeGEoOTAsMSxhLGIpO2QudXAuc2V0KDAsLTEsMCk7ZC5sb29rQXQobmV3IHAoMSwwLDApKTt0aGlzLmFkZChkKTt2YXIgZT1uZXcgeGEoOTAsMSxhLGIpO2UudXAuc2V0KDAsLTEsMCk7ZS5sb29rQXQobmV3IHAoLTEsMCwwKSk7dGhpcy5hZGQoZSk7dmFyIGY9bmV3IHhhKDkwLDEsYSxiKTtmLnVwLnNldCgwLDAsMSk7Zi5sb29rQXQobmV3IHAoMCwxLDApKTt0aGlzLmFkZChmKTt2YXIgZz1uZXcgeGEoOTAsMSxhLGIpO2cudXAuc2V0KDAsMCwtMSk7Zy5sb29rQXQobmV3IHAoMCwtMSwwKSk7dGhpcy5hZGQoZyk7dmFyIGg9bmV3IHhhKDkwLDEsYSxiKTtoLnVwLnNldCgwLC0xLDApO2gubG9va0F0KG5ldyBwKDAsMCwxKSk7dGhpcy5hZGQoaCk7dmFyIGs9bmV3IHhhKDkwLDEsYSxiKTtrLnVwLnNldCgwLC0xLDApO2subG9va0F0KG5ldyBwKDAsMCwtMSkpO3RoaXMuYWRkKGspO3RoaXMucmVuZGVyVGFyZ2V0PW5ldyBFYihjLGMse2Zvcm1hdDoxMDIyLG1hZ0ZpbHRlcjoxMDA2LAptaW5GaWx0ZXI6MTAwNn0pO3RoaXMucmVuZGVyVGFyZ2V0LnRleHR1cmUubmFtZT0iQ3ViZUNhbWVyYSI7dGhpcy51cGRhdGVDdWJlTWFwPWZ1bmN0aW9uKGEsYil7bnVsbD09PXRoaXMucGFyZW50JiZ0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCk7dmFyIGM9dGhpcy5yZW5kZXJUYXJnZXQsbj1jLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO2MudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITE7Yy5hY3RpdmVDdWJlRmFjZT0wO2EucmVuZGVyKGIsZCxjKTtjLmFjdGl2ZUN1YmVGYWNlPTE7YS5yZW5kZXIoYixlLGMpO2MuYWN0aXZlQ3ViZUZhY2U9MjthLnJlbmRlcihiLGYsYyk7Yy5hY3RpdmVDdWJlRmFjZT0zO2EucmVuZGVyKGIsZyxjKTtjLmFjdGl2ZUN1YmVGYWNlPTQ7YS5yZW5kZXIoYixoLGMpO2MudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9bjtjLmFjdGl2ZUN1YmVGYWNlPTU7YS5yZW5kZXIoYixrLGMpO2Euc2V0UmVuZGVyVGFyZ2V0KG51bGwpfX1mdW5jdGlvbiBnZShhKXt4YS5jYWxsKHRoaXMpOwp0aGlzLmVuYWJsZWQ9ITE7dGhpcy5jYW1lcmFzPWF8fFtdfWZ1bmN0aW9uIGhlKCl7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQXVkaW9MaXN0ZW5lciI7dGhpcy5jb250ZXh0PWllLmdldENvbnRleHQoKTt0aGlzLmdhaW49dGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTt0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO3RoaXMuZmlsdGVyPW51bGx9ZnVuY3Rpb24gamMoYSl7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQXVkaW8iO3RoaXMuY29udGV4dD1hLmNvbnRleHQ7dGhpcy5nYWluPXRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7dGhpcy5nYWluLmNvbm5lY3QoYS5nZXRJbnB1dCgpKTt0aGlzLmF1dG9wbGF5PSExO3RoaXMuYnVmZmVyPW51bGw7dGhpcy5sb29wPSExO3RoaXMuc3RhcnRUaW1lPTA7dGhpcy5wbGF5YmFja1JhdGU9MTt0aGlzLmlzUGxheWluZz0hMTt0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMDt0aGlzLnNvdXJjZVR5cGU9ImVtcHR5IjsKdGhpcy5maWx0ZXJzPVtdfWZ1bmN0aW9uIGplKGEpe2pjLmNhbGwodGhpcyxhKTt0aGlzLnBhbm5lcj10aGlzLmNvbnRleHQuY3JlYXRlUGFubmVyKCk7dGhpcy5wYW5uZXIuY29ubmVjdCh0aGlzLmdhaW4pfWZ1bmN0aW9uIGtlKGEsYil7dGhpcy5hbmFseXNlcj1hLmNvbnRleHQuY3JlYXRlQW5hbHlzZXIoKTt0aGlzLmFuYWx5c2VyLmZmdFNpemU9dm9pZCAwIT09Yj9iOjIwNDg7dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KHRoaXMuYW5hbHlzZXIuZnJlcXVlbmN5QmluQ291bnQpO2EuZ2V0T3V0cHV0KCkuY29ubmVjdCh0aGlzLmFuYWx5c2VyKX1mdW5jdGlvbiBsZShhLGIsYyl7dGhpcy5iaW5kaW5nPWE7dGhpcy52YWx1ZVNpemU9YzthPUZsb2F0NjRBcnJheTtzd2l0Y2goYil7Y2FzZSAicXVhdGVybmlvbiI6Yj10aGlzLl9zbGVycDticmVhaztjYXNlICJzdHJpbmciOmNhc2UgImJvb2wiOmE9QXJyYXk7Yj10aGlzLl9zZWxlY3Q7YnJlYWs7ZGVmYXVsdDpiPXRoaXMuX2xlcnB9dGhpcy5idWZmZXI9Cm5ldyBhKDQqYyk7dGhpcy5fbWl4QnVmZmVyUmVnaW9uPWI7dGhpcy5yZWZlcmVuY2VDb3VudD10aGlzLnVzZUNvdW50PXRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wfWZ1bmN0aW9uIFZlKGEsYixjKXtjPWN8fG9hLnBhcnNlVHJhY2tOYW1lKGIpO3RoaXMuX3RhcmdldEdyb3VwPWE7dGhpcy5fYmluZGluZ3M9YS5zdWJzY3JpYmVfKGIsYyl9ZnVuY3Rpb24gb2EoYSxiLGMpe3RoaXMucGF0aD1iO3RoaXMucGFyc2VkUGF0aD1jfHxvYS5wYXJzZVRyYWNrTmFtZShiKTt0aGlzLm5vZGU9b2EuZmluZE5vZGUoYSx0aGlzLnBhcnNlZFBhdGgubm9kZU5hbWUpfHxhO3RoaXMucm9vdE5vZGU9YX1mdW5jdGlvbiBXZShhKXt0aGlzLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKTt0aGlzLl9vYmplY3RzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5uQ2FjaGVkT2JqZWN0c189MDt2YXIgYj17fTt0aGlzLl9pbmRpY2VzQnlVVUlEPWI7Zm9yKHZhciBjPTAsZD1hcmd1bWVudHMubGVuZ3RoO2MhPT0KZDsrK2MpYlthcmd1bWVudHNbY10udXVpZF09Yzt0aGlzLl9wYXRocz1bXTt0aGlzLl9wYXJzZWRQYXRocz1bXTt0aGlzLl9iaW5kaW5ncz1bXTt0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGg9e307dmFyIGU9dGhpczt0aGlzLnN0YXRzPXtvYmplY3RzOntnZXQgdG90YWwoKXtyZXR1cm4gZS5fb2JqZWN0cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0aGlzLnRvdGFsLWUubkNhY2hlZE9iamVjdHNffX0sZ2V0IGJpbmRpbmdzUGVyT2JqZWN0KCl7cmV0dXJuIGUuX2JpbmRpbmdzLmxlbmd0aH19fWZ1bmN0aW9uIFhlKGEsYixjKXt0aGlzLl9taXhlcj1hO3RoaXMuX2NsaXA9Yjt0aGlzLl9sb2NhbFJvb3Q9Y3x8bnVsbDthPWIudHJhY2tzO2I9YS5sZW5ndGg7Yz1BcnJheShiKTtmb3IodmFyIGQ9e2VuZGluZ1N0YXJ0OjI0MDAsZW5kaW5nRW5kOjI0MDB9LGU9MDtlIT09YjsrK2Upe3ZhciBmPWFbZV0uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7Y1tlXT1mO2Yuc2V0dGluZ3M9CmR9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncz1kO3RoaXMuX2ludGVycG9sYW50cz1jO3RoaXMuX3Byb3BlcnR5QmluZGluZ3M9QXJyYXkoYik7dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9dGhpcy5fYnlDbGlwQ2FjaGVJbmRleD10aGlzLl9jYWNoZUluZGV4PW51bGw7dGhpcy5sb29wPTIyMDE7dGhpcy5fbG9vcENvdW50PS0xO3RoaXMuX3N0YXJ0VGltZT1udWxsO3RoaXMudGltZT0wO3RoaXMuX2VmZmVjdGl2ZVdlaWdodD10aGlzLndlaWdodD10aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy50aW1lU2NhbGU9MTt0aGlzLnJlcGV0aXRpb25zPUluZmluaXR5O3RoaXMucGF1c2VkPSExO3RoaXMuZW5hYmxlZD0hMDt0aGlzLmNsYW1wV2hlbkZpbmlzaGVkPSExO3RoaXMuemVyb1Nsb3BlQXRFbmQ9dGhpcy56ZXJvU2xvcGVBdFN0YXJ0PSEwfWZ1bmN0aW9uIFllKGEpe3RoaXMuX3Jvb3Q9YTt0aGlzLl9pbml0TWVtb3J5TWFuYWdlcigpOwp0aGlzLnRpbWU9dGhpcy5fYWNjdUluZGV4PTA7dGhpcy50aW1lU2NhbGU9MX1mdW5jdGlvbiBKZChhLGIpeyJzdHJpbmciPT09dHlwZW9mIGEmJihjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IFR5cGUgcGFyYW1ldGVyIGlzIG5vIGxvbmdlciBuZWVkZWQuIiksYT1iKTt0aGlzLnZhbHVlPWF9ZnVuY3Rpb24gbWUoKXtJLmNhbGwodGhpcyk7dGhpcy50eXBlPSJJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSI7dGhpcy5tYXhJbnN0YW5jZWRDb3VudD12b2lkIDB9ZnVuY3Rpb24gbmUoYSxiLGMsZCl7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7dGhpcy5kYXRhPWE7dGhpcy5pdGVtU2l6ZT1iO3RoaXMub2Zmc2V0PWM7dGhpcy5ub3JtYWxpemVkPSEwPT09ZH1mdW5jdGlvbiBrYyhhLGIpe3RoaXMudXVpZD1ZLmdlbmVyYXRlVVVJRCgpO3RoaXMuYXJyYXk9YTt0aGlzLnN0cmlkZT1iO3RoaXMuY291bnQ9dm9pZCAwIT09YT9hLmxlbmd0aC9iOjA7dGhpcy5keW5hbWljPSExO3RoaXMudXBkYXRlUmFuZ2U9CntvZmZzZXQ6MCxjb3VudDotMX07dGhpcy5vblVwbG9hZENhbGxiYWNrPWZ1bmN0aW9uKCl7fTt0aGlzLnZlcnNpb249MH1mdW5jdGlvbiBvZShhLGIsYyl7a2MuY2FsbCh0aGlzLGEsYik7dGhpcy5tZXNoUGVyQXR0cmlidXRlPWN8fDF9ZnVuY3Rpb24gcGUoYSxiLGMpe0wuY2FsbCh0aGlzLGEsYik7dGhpcy5tZXNoUGVyQXR0cmlidXRlPWN8fDF9ZnVuY3Rpb24gWmUoYSxiLGMsZCl7dGhpcy5yYXk9bmV3IGhiKGEsYik7dGhpcy5uZWFyPWN8fDA7dGhpcy5mYXI9ZHx8SW5maW5pdHk7dGhpcy5wYXJhbXM9e01lc2g6e30sTGluZTp7fSxMT0Q6e30sUG9pbnRzOnt0aHJlc2hvbGQ6MX0sU3ByaXRlOnt9fTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLnBhcmFtcyx7UG9pbnRDbG91ZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5SYXljYXN0ZXI6IHBhcmFtcy5Qb2ludENsb3VkIGhhcyBiZWVuIHJlbmFtZWQgdG8gcGFyYW1zLlBvaW50cy4iKTtyZXR1cm4gdGhpcy5Qb2ludHN9fX0pfQpmdW5jdGlvbiAkZShhLGIpe3JldHVybiBhLmRpc3RhbmNlLWIuZGlzdGFuY2V9ZnVuY3Rpb24gcWUoYSxiLGMsZCl7aWYoITEhPT1hLnZpc2libGUmJihhLnJheWNhc3QoYixjKSwhMD09PWQpKXthPWEuY2hpbGRyZW47ZD0wO2Zvcih2YXIgZT1hLmxlbmd0aDtkPGU7ZCsrKXFlKGFbZF0sYixjLCEwKX19ZnVuY3Rpb24gYWYoYSl7dGhpcy5hdXRvU3RhcnQ9dm9pZCAwIT09YT9hOiEwO3RoaXMuZWxhcHNlZFRpbWU9dGhpcy5vbGRUaW1lPXRoaXMuc3RhcnRUaW1lPTA7dGhpcy5ydW5uaW5nPSExfWZ1bmN0aW9uIGJmKGEsYixjKXt0aGlzLnJhZGl1cz12b2lkIDAhPT1hP2E6MTt0aGlzLnBoaT12b2lkIDAhPT1iP2I6MDt0aGlzLnRoZXRhPXZvaWQgMCE9PWM/YzowO3JldHVybiB0aGlzfWZ1bmN0aW9uIGNmKGEsYixjKXt0aGlzLnJhZGl1cz12b2lkIDAhPT1hP2E6MTt0aGlzLnRoZXRhPXZvaWQgMCE9PWI/YjowO3RoaXMueT12b2lkIDAhPT1jP2M6MDtyZXR1cm4gdGhpc31mdW5jdGlvbiByYShhLApiKXtDYS5jYWxsKHRoaXMsYSxiKTt0aGlzLmFuaW1hdGlvbnNNYXA9e307dGhpcy5hbmltYXRpb25zTGlzdD1bXTt2YXIgYz10aGlzLmdlb21ldHJ5Lm1vcnBoVGFyZ2V0cy5sZW5ndGg7dGhpcy5jcmVhdGVBbmltYXRpb24oIl9fZGVmYXVsdCIsMCxjLTEsYy8xKTt0aGlzLnNldEFuaW1hdGlvbldlaWdodCgiX19kZWZhdWx0IiwxKX1mdW5jdGlvbiAkYyhhKXtCLmNhbGwodGhpcyk7dGhpcy5tYXRlcmlhbD1hO3RoaXMucmVuZGVyPWZ1bmN0aW9uKGEpe319ZnVuY3Rpb24gYWQoYSxiLGMsZCl7dGhpcy5vYmplY3Q9YTt0aGlzLnNpemU9dm9pZCAwIT09Yj9iOjE7YT12b2lkIDAhPT1jP2M6MTY3MTE2ODA7ZD12b2lkIDAhPT1kP2Q6MTtiPTA7KGM9dGhpcy5vYmplY3QuZ2VvbWV0cnkpJiZjLmlzR2VvbWV0cnk/Yj0zKmMuZmFjZXMubGVuZ3RoOmMmJmMuaXNCdWZmZXJHZW9tZXRyeSYmKGI9Yy5hdHRyaWJ1dGVzLm5vcm1hbC5jb3VudCk7Yz1uZXcgSTtiPW5ldyBDKDYqYiwzKTtjLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLApiKTtkYS5jYWxsKHRoaXMsYyxuZXcgaGEoe2NvbG9yOmEsbGluZXdpZHRoOmR9KSk7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gbGMoYSl7Qi5jYWxsKHRoaXMpO3RoaXMubGlnaHQ9YTt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7dGhpcy5tYXRyaXg9YS5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7YT1uZXcgSTtmb3IodmFyIGI9WzAsMCwwLDAsMCwxLDAsMCwwLDEsMCwxLDAsMCwwLC0xLDAsMSwwLDAsMCwwLDEsMSwwLDAsMCwwLC0xLDFdLGM9MCxkPTE7MzI+YztjKyssZCsrKXt2YXIgZT1jLzMyKk1hdGguUEkqMixmPWQvMzIqTWF0aC5QSSoyO2IucHVzaChNYXRoLmNvcyhlKSxNYXRoLnNpbihlKSwxLE1hdGguY29zKGYpLE1hdGguc2luKGYpLDEpfWEuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMoYiwzKSk7Yj1uZXcgaGEoe2ZvZzohMX0pO3RoaXMuY29uZT1uZXcgZGEoYSxiKTt0aGlzLmFkZCh0aGlzLmNvbmUpOwp0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIG1jKGEpe3RoaXMuYm9uZXM9dGhpcy5nZXRCb25lTGlzdChhKTtmb3IodmFyIGI9bmV3IEksYz1bXSxkPVtdLGU9bmV3IEgoMCwwLDEpLGY9bmV3IEgoMCwxLDApLGc9MDtnPHRoaXMuYm9uZXMubGVuZ3RoO2crKyl7dmFyIGg9dGhpcy5ib25lc1tnXTtoLnBhcmVudCYmaC5wYXJlbnQuaXNCb25lJiYoYy5wdXNoKDAsMCwwKSxjLnB1c2goMCwwLDApLGQucHVzaChlLnIsZS5nLGUuYiksZC5wdXNoKGYucixmLmcsZi5iKSl9Yi5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhjLDMpKTtiLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBDKGQsMykpO2M9bmV3IGhhKHt2ZXJ0ZXhDb2xvcnM6MixkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0cmFuc3BhcmVudDohMH0pO2RhLmNhbGwodGhpcyxiLGMpO3RoaXMucm9vdD1hO3RoaXMubWF0cml4PWEubWF0cml4V29ybGQ7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gbmMoYSwKYil7dGhpcy5saWdodD1hO3RoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTt2YXIgYz1uZXcgbmIoYiw0LDIpLGQ9bmV3IE5hKHt3aXJlZnJhbWU6ITAsZm9nOiExfSk7ZC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpO0NhLmNhbGwodGhpcyxjLGQpO3RoaXMubWF0cml4PXRoaXMubGlnaHQubWF0cml4V29ybGQ7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExfWZ1bmN0aW9uIG9jKGEpe0IuY2FsbCh0aGlzKTt0aGlzLmxpZ2h0PWE7dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO3RoaXMubWF0cml4PWEubWF0cml4V29ybGQ7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO2E9bmV3IGhhKHtjb2xvcjphLmNvbG9yfSk7dmFyIGI9bmV3IEk7Yi5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgTChuZXcgRmxvYXQzMkFycmF5KDE1KSwzKSk7dGhpcy5hZGQobmV3IHlhKGIsYSkpO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gcGMoYSxiKXtCLmNhbGwodGhpcyk7dGhpcy5saWdodD0KYTt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7dGhpcy5tYXRyaXg9YS5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7dmFyIGM9bmV3IG1iKGIpO2Mucm90YXRlWSguNSpNYXRoLlBJKTt2YXIgZD1uZXcgTmEoe3ZlcnRleENvbG9yczoyLHdpcmVmcmFtZTohMH0pLGU9Yy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIiksZT1uZXcgRmxvYXQzMkFycmF5KDMqZS5jb3VudCk7Yy5hZGRBdHRyaWJ1dGUoImNvbG9yIixuZXcgTChlLDMpKTt0aGlzLmFkZChuZXcgQ2EoYyxkKSk7dGhpcy51cGRhdGUoKX1mdW5jdGlvbiBiZChhLGIsYyxkKXthPWF8fDEwO2I9Ynx8MTA7Yz1uZXcgSCh2b2lkIDAhPT1jP2M6NDQ3MzkyNCk7ZD1uZXcgSCh2b2lkIDAhPT1kP2Q6ODk0Nzg0OCk7dmFyIGU9Yi8yLGY9YS9iLGc9YS8yO2E9W107Zm9yKHZhciBoPVtdLGs9MCxtPTAsdT0tZztrPD1iO2srKyx1Kz1mKXthLnB1c2goLWcsMCx1LGcsMCx1KTthLnB1c2godSwwLC1nLHUsMCxnKTsKdmFyIGw9az09PWU/YzpkO2wudG9BcnJheShoLG0pO20rPTM7bC50b0FycmF5KGgsbSk7bSs9MztsLnRvQXJyYXkoaCxtKTttKz0zO2wudG9BcnJheShoLG0pO20rPTN9Yj1uZXcgSTtiLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGEsMykpO2IuYWRkQXR0cmlidXRlKCJjb2xvciIsbmV3IEMoaCwzKSk7Yz1uZXcgaGEoe3ZlcnRleENvbG9yczoyfSk7ZGEuY2FsbCh0aGlzLGIsYyl9ZnVuY3Rpb24gS2QoYSxiLGMsZCxlLGYpe2E9YXx8MTA7Yj1ifHwxNjtjPWN8fDg7ZD1kfHw2NDtlPW5ldyBIKHZvaWQgMCE9PWU/ZTo0NDczOTI0KTtmPW5ldyBIKHZvaWQgMCE9PWY/Zjo4OTQ3ODQ4KTt2YXIgZz1bXSxoPVtdLGssbSx1LGwsbjtmb3IodT0wO3U8PWI7dSsrKW09dS9iKjIqTWF0aC5QSSxrPU1hdGguc2luKG0pKmEsbT1NYXRoLmNvcyhtKSphLGcucHVzaCgwLDAsMCksZy5wdXNoKGssMCxtKSxuPXUmMT9lOmYsaC5wdXNoKG4ucixuLmcsbi5iKSxoLnB1c2gobi5yLG4uZyxuLmIpOwpmb3IodT0wO3U8PWM7dSsrKWZvcihuPXUmMT9lOmYsbD1hLWEvYyp1LGI9MDtiPGQ7YisrKW09Yi9kKjIqTWF0aC5QSSxrPU1hdGguc2luKG0pKmwsbT1NYXRoLmNvcyhtKSpsLGcucHVzaChrLDAsbSksaC5wdXNoKG4ucixuLmcsbi5iKSxtPShiKzEpL2QqMipNYXRoLlBJLGs9TWF0aC5zaW4obSkqbCxtPU1hdGguY29zKG0pKmwsZy5wdXNoKGssMCxtKSxoLnB1c2gobi5yLG4uZyxuLmIpO2E9bmV3IEk7YS5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhnLDMpKTthLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBDKGgsMykpO2c9bmV3IGhhKHt2ZXJ0ZXhDb2xvcnM6Mn0pO2RhLmNhbGwodGhpcyxhLGcpfWZ1bmN0aW9uIGNkKGEsYixjLGQpe3RoaXMub2JqZWN0PWE7dGhpcy5zaXplPXZvaWQgMCE9PWI/YjoxO2E9dm9pZCAwIT09Yz9jOjE2Nzc2OTYwO2Q9dm9pZCAwIT09ZD9kOjE7Yj0wOyhjPXRoaXMub2JqZWN0Lmdlb21ldHJ5KSYmYy5pc0dlb21ldHJ5P2I9Yy5mYWNlcy5sZW5ndGg6CmNvbnNvbGUud2FybigiVEhSRUUuRmFjZU5vcm1hbHNIZWxwZXI6IG9ubHkgVEhSRUUuR2VvbWV0cnkgaXMgc3VwcG9ydGVkLiBVc2UgVEhSRUUuVmVydGV4Tm9ybWFsc0hlbHBlciwgaW5zdGVhZC4iKTtjPW5ldyBJO2I9bmV3IEMoNipiLDMpO2MuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsYik7ZGEuY2FsbCh0aGlzLGMsbmV3IGhhKHtjb2xvcjphLGxpbmV3aWR0aDpkfSkpO3RoaXMubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIHFjKGEsYil7Qi5jYWxsKHRoaXMpO3RoaXMubGlnaHQ9YTt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7dGhpcy5tYXRyaXg9YS5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7dm9pZCAwPT09YiYmKGI9MSk7dmFyIGM9bmV3IEk7Yy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhbLWIsYiwwLGIsYiwwLGIsLWIsMCwtYiwtYiwwLC1iLGIsMF0sMykpO3ZhciBkPW5ldyBoYSh7Zm9nOiExfSk7CnRoaXMuYWRkKG5ldyB5YShjLGQpKTtjPW5ldyBJO2MuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMoWzAsMCwwLDAsMCwxXSwzKSk7dGhpcy5hZGQobmV3IHlhKGMsZCkpO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gZGQoYSl7ZnVuY3Rpb24gYihhLGIsZCl7YyhhLGQpO2MoYixkKX1mdW5jdGlvbiBjKGEsYil7Zi5wdXNoKDAsMCwwKTtnLnB1c2goYi5yLGIuZyxiLmIpO3ZvaWQgMD09PWhbYV0mJihoW2FdPVtdKTtoW2FdLnB1c2goZi5sZW5ndGgvMy0xKX12YXIgZD1uZXcgSSxlPW5ldyBoYSh7Y29sb3I6MTY3NzcyMTUsdmVydGV4Q29sb3JzOjF9KSxmPVtdLGc9W10saD17fSxrPW5ldyBIKDE2NzU1MjAwKSxtPW5ldyBIKDE2NzExNjgwKSx1PW5ldyBIKDQzNzc1KSxsPW5ldyBIKDE2Nzc3MjE1KSxuPW5ldyBIKDMzNTU0NDMpO2IoIm4xIiwibjIiLGspO2IoIm4yIiwibjQiLGspO2IoIm40IiwibjMiLGspO2IoIm4zIiwibjEiLGspO2IoImYxIiwiZjIiLGspO2IoImYyIiwiZjQiLAprKTtiKCJmNCIsImYzIixrKTtiKCJmMyIsImYxIixrKTtiKCJuMSIsImYxIixrKTtiKCJuMiIsImYyIixrKTtiKCJuMyIsImYzIixrKTtiKCJuNCIsImY0IixrKTtiKCJwIiwibjEiLG0pO2IoInAiLCJuMiIsbSk7YigicCIsIm4zIixtKTtiKCJwIiwibjQiLG0pO2IoInUxIiwidTIiLHUpO2IoInUyIiwidTMiLHUpO2IoInUzIiwidTEiLHUpO2IoImMiLCJ0IixsKTtiKCJwIiwiYyIsbik7YigiY24xIiwiY24yIixuKTtiKCJjbjMiLCJjbjQiLG4pO2IoImNmMSIsImNmMiIsbik7YigiY2YzIiwiY2Y0IixuKTtkLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGYsMykpO2QuYWRkQXR0cmlidXRlKCJjb2xvciIsbmV3IEMoZywzKSk7ZGEuY2FsbCh0aGlzLGQsZSk7dGhpcy5jYW1lcmE9YTt0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4JiZ0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7dGhpcy5tYXRyaXg9YS5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9CiExO3RoaXMucG9pbnRNYXA9aDt0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIEJiKGEsYil7dGhpcy5vYmplY3Q9YTt2b2lkIDA9PT1iJiYoYj0xNjc3Njk2MCk7dmFyIGM9bmV3IFVpbnQxNkFycmF5KFswLDEsMSwyLDIsMywzLDAsNCw1LDUsNiw2LDcsNyw0LDAsNCwxLDUsMiw2LDMsN10pLGQ9bmV3IEZsb2F0MzJBcnJheSgyNCksZT1uZXcgSTtlLnNldEluZGV4KG5ldyBMKGMsMSkpO2UuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEwoZCwzKSk7ZGEuY2FsbCh0aGlzLGUsbmV3IGhhKHtjb2xvcjpifSkpO3RoaXMubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIENiKGEsYixjLGQsZSxmKXtCLmNhbGwodGhpcyk7dm9pZCAwPT09ZCYmKGQ9MTY3NzY5NjApO3ZvaWQgMD09PWMmJihjPTEpO3ZvaWQgMD09PWUmJihlPS4yKmMpO3ZvaWQgMD09PWYmJihmPS4yKmUpO3ZvaWQgMD09PUxkJiYoTGQ9bmV3IEksTGQuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMoWzAsCjAsMCwwLDEsMF0sMykpLHJlPW5ldyBXYSgwLC41LDEsNSwxKSxyZS50cmFuc2xhdGUoMCwtLjUsMCkpO3RoaXMucG9zaXRpb24uY29weShiKTt0aGlzLmxpbmU9bmV3IHlhKExkLG5ldyBoYSh7Y29sb3I6ZH0pKTt0aGlzLmxpbmUubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLmFkZCh0aGlzLmxpbmUpO3RoaXMuY29uZT1uZXcgQ2EocmUsbmV3IE5hKHtjb2xvcjpkfSkpO3RoaXMuY29uZS5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMuYWRkKHRoaXMuY29uZSk7dGhpcy5zZXREaXJlY3Rpb24oYSk7dGhpcy5zZXRMZW5ndGgoYyxlLGYpfWZ1bmN0aW9uIE1kKGEpe2E9YXx8MTt2YXIgYj1bMCwwLDAsYSwwLDAsMCwwLDAsMCxhLDAsMCwwLDAsMCwwLGFdO2E9bmV3IEk7YS5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhiLDMpKTthLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBDKFsxLDAsMCwxLC42LDAsMCwxLDAsLjYsMSwwLDAsMCwxLDAsLjYsMV0sMykpO2I9bmV3IGhhKHt2ZXJ0ZXhDb2xvcnM6Mn0pOwpkYS5jYWxsKHRoaXMsYSxiKX1mdW5jdGlvbiBzZSgpe3ZhciBhPTAsYj0wLGM9MCxkPTA7cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKGUsZixnLGgsayl7ZT1rKihnLWUpO2g9ayooaC1mKTthPWY7Yj1lO2M9LTMqZiszKmctMiplLWg7ZD0yKmYtMipnK2UraH0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKGUsZixnLGgsayxtLHUpe2U9KChmLWUpL2stKGctZSkvKGsrbSkrKGctZikvbSkqbTtoPSgoZy1mKS9tLShoLWYpLyhtK3UpKyhoLWcpL3UpKm07YT1mO2I9ZTtjPS0zKmYrMypnLTIqZS1oO2Q9MipmLTIqZytlK2h9LGNhbGM6ZnVuY3Rpb24oZSl7dmFyIGY9ZSplO3JldHVybiBhK2IqZStjKmYrZCpmKmV9fX1mdW5jdGlvbiBKYShhKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDA7dGhpcy5wb2ludHM9YXx8W107dGhpcy5jbG9zZWQ9ITF9ZnVuY3Rpb24gZWQoYSxiLGMsZCl7dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwO3RoaXMudjA9YTt0aGlzLnYxPQpiO3RoaXMudjI9Yzt0aGlzLnYzPWR9ZnVuY3Rpb24gZmQoYSxiLGMpe3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMDt0aGlzLnYwPWE7dGhpcy52MT1iO3RoaXMudjI9Y31mdW5jdGlvbiBnZChhLGIpe3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMDt0aGlzLnYxPWE7dGhpcy52Mj1ifWZ1bmN0aW9uIE5kKGEsYixjLGQsZSxmKXtYYS5jYWxsKHRoaXMsYSxiLGMsYyxkLGUsZil9ZnVuY3Rpb24gZGYoYSl7Y29uc29sZS53YXJuKCJUSFJFRS5DbG9zZWRTcGxpbmVDdXJ2ZTMgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkNhdG11bGxSb21DdXJ2ZTMgaW5zdGVhZC4iKTtKYS5jYWxsKHRoaXMsYSk7dGhpcy50eXBlPSJjYXRtdWxscm9tIjt0aGlzLmNsb3NlZD0hMH1mdW5jdGlvbiBlZihhKXtjb25zb2xlLndhcm4oIlRIUkVFLlNwbGluZUN1cnZlMyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ2F0bXVsbFJvbUN1cnZlMyBpbnN0ZWFkLiIpO0phLmNhbGwodGhpcywKYSk7dGhpcy50eXBlPSJjYXRtdWxscm9tIn1mdW5jdGlvbiB0ZShhKXtjb25zb2xlLndhcm4oIlRIUkVFLlNwbGluZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuQ2F0bXVsbFJvbUN1cnZlMyBpbnN0ZWFkLiIpO0phLmNhbGwodGhpcyxhKTt0aGlzLnR5cGU9ImNhdG11bGxyb20ifXZvaWQgMD09PU51bWJlci5FUFNJTE9OJiYoTnVtYmVyLkVQU0lMT049TWF0aC5wb3coMiwtNTIpKTt2b2lkIDA9PT1OdW1iZXIuaXNJbnRlZ2VyJiYoTnVtYmVyLmlzSW50ZWdlcj1mdW5jdGlvbihhKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBhJiZpc0Zpbml0ZShhKSYmTWF0aC5mbG9vcihhKT09PWF9KTt2b2lkIDA9PT1NYXRoLnNpZ24mJihNYXRoLnNpZ249ZnVuY3Rpb24oYSl7cmV0dXJuIDA+YT8tMTowPGE/MTorYX0pO3ZvaWQgMD09PUZ1bmN0aW9uLnByb3RvdHlwZS5uYW1lJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCJuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoKS5tYXRjaCgvXlxzKmZ1bmN0aW9uXHMqKFteXChcc10qKS8pWzFdfX0pOwp2b2lkIDA9PT1PYmplY3QuYXNzaWduJiZmdW5jdGlvbigpe09iamVjdC5hc3NpZ249ZnVuY3Rpb24oYSl7aWYodm9pZCAwPT09YXx8bnVsbD09PWEpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Iik7Zm9yKHZhciBiPU9iamVjdChhKSxjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7dmFyIGQ9YXJndW1lbnRzW2NdO2lmKHZvaWQgMCE9PWQmJm51bGwhPT1kKWZvcih2YXIgZSBpbiBkKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLGUpJiYoYltlXT1kW2VdKX1yZXR1cm4gYn19KCk7T2JqZWN0LmFzc2lnbihzYS5wcm90b3R5cGUse2FkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMmJih0aGlzLl9saXN0ZW5lcnM9e30pO3ZhciBjPXRoaXMuX2xpc3RlbmVyczt2b2lkIDA9PT1jW2FdJiYoY1thXT1bXSk7LTE9PT1jW2FdLmluZGV4T2YoYikmJmNbYV0ucHVzaChiKX0sCmhhc0V2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuITE7dmFyIGM9dGhpcy5fbGlzdGVuZXJzO3JldHVybiB2b2lkIDAhPT1jW2FdJiYtMSE9PWNbYV0uaW5kZXhPZihiKX0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe2lmKHZvaWQgMCE9PXRoaXMuX2xpc3RlbmVycyl7dmFyIGM9dGhpcy5fbGlzdGVuZXJzW2FdO2lmKHZvaWQgMCE9PWMpe3ZhciBkPWMuaW5kZXhPZihiKTstMSE9PWQmJmMuc3BsaWNlKGQsMSl9fX0sZGlzcGF0Y2hFdmVudDpmdW5jdGlvbihhKXtpZih2b2lkIDAhPT10aGlzLl9saXN0ZW5lcnMpe3ZhciBiPXRoaXMuX2xpc3RlbmVyc1thLnR5cGVdO2lmKHZvaWQgMCE9PWIpe2EudGFyZ2V0PXRoaXM7dmFyIGM9W10sZCxlPWIubGVuZ3RoO2ZvcihkPTA7ZDxlO2QrKyljW2RdPWJbZF07Zm9yKGQ9MDtkPGU7ZCsrKWNbZF0uY2FsbCh0aGlzLGEpfX19fSk7dmFyIFk9e0RFRzJSQUQ6TWF0aC5QSS8KMTgwLFJBRDJERUc6MTgwL01hdGguUEksZ2VuZXJhdGVVVUlEOmZ1bmN0aW9uKCl7dmFyIGE9IjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ii5zcGxpdCgiIiksYj1BcnJheSgzNiksYz0wLGQ7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7MzY+ZTtlKyspOD09PWV8fDEzPT09ZXx8MTg9PT1lfHwyMz09PWU/YltlXT0iLSI6MTQ9PT1lP2JbZV09IjQiOigyPj1jJiYoYz0zMzU1NDQzMisxNjc3NzIxNipNYXRoLnJhbmRvbSgpfDApLGQ9YyYxNSxjPj49NCxiW2VdPWFbMTk9PT1lP2QmM3w4OmRdKTtyZXR1cm4gYi5qb2luKCIiKX19KCksY2xhbXA6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBNYXRoLm1heChiLE1hdGgubWluKGMsYSkpfSxldWNsaWRlYW5Nb2R1bG86ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYSViK2IpJWJ9LG1hcExpbmVhcjpmdW5jdGlvbihhLGIsYyxkLGUpe3JldHVybiBkKyhhLWIpKihlLWQpLyhjLQpiKX0sbGVycDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuKDEtYykqYStjKmJ9LHNtb290aHN0ZXA6ZnVuY3Rpb24oYSxiLGMpe2lmKGE8PWIpcmV0dXJuIDA7aWYoYT49YylyZXR1cm4gMTthPShhLWIpLyhjLWIpO3JldHVybiBhKmEqKDMtMiphKX0sc21vb3RoZXJzdGVwOmZ1bmN0aW9uKGEsYixjKXtpZihhPD1iKXJldHVybiAwO2lmKGE+PWMpcmV0dXJuIDE7YT0oYS1iKS8oYy1iKTtyZXR1cm4gYSphKmEqKGEqKDYqYS0xNSkrMTApfSxyYW5kSW50OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGErTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihiLWErMSkpfSxyYW5kRmxvYXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYStNYXRoLnJhbmRvbSgpKihiLWEpfSxyYW5kRmxvYXRTcHJlYWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEqKC41LU1hdGgucmFuZG9tKCkpfSxkZWdUb1JhZDpmdW5jdGlvbihhKXtyZXR1cm4gYSpZLkRFRzJSQUR9LHJhZFRvRGVnOmZ1bmN0aW9uKGEpe3JldHVybiBhKlkuUkFEMkRFR30sCmlzUG93ZXJPZlR3bzpmdW5jdGlvbihhKXtyZXR1cm4gMD09PShhJmEtMSkmJjAhPT1hfSxuZWFyZXN0UG93ZXJPZlR3bzpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLnJvdW5kKE1hdGgubG9nKGEpL01hdGguTE4yKSl9LG5leHRQb3dlck9mVHdvOmZ1bmN0aW9uKGEpe2EtLTthfD1hPj4xO2F8PWE+PjI7YXw9YT4+NDthfD1hPj44O2F8PWE+PjE2O2ErKztyZXR1cm4gYX19O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEQucHJvdG90eXBlLHt3aWR0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMueD1hfX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy55PWF9fX0pO09iamVjdC5hc3NpZ24oRC5wcm90b3R5cGUse2lzVmVjdG9yMjohMCxzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLng9YTt0aGlzLnk9YjtyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueT0KdGhpcy54PWE7cmV0dXJuIHRoaXN9LHNldFg6ZnVuY3Rpb24oYSl7dGhpcy54PWE7cmV0dXJuIHRoaXN9LHNldFk6ZnVuY3Rpb24oYSl7dGhpcy55PWE7cmV0dXJuIHRoaXN9LHNldENvbXBvbmVudDpmdW5jdGlvbihhLGIpe3N3aXRjaChhKXtjYXNlIDA6dGhpcy54PWI7YnJlYWs7Y2FzZSAxOnRoaXMueT1iO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIithKTt9cmV0dXJuIHRoaXN9LGdldENvbXBvbmVudDpmdW5jdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK2EpO319LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnkpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMueD1hLng7dGhpcy55PWEueTtyZXR1cm4gdGhpc30sYWRkOmZ1bmN0aW9uKGEsCmIpe2lmKHZvaWQgMCE9PWIpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyhhLGIpO3RoaXMueCs9YS54O3RoaXMueSs9YS55O3JldHVybiB0aGlzfSxhZGRTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy54Kz1hO3RoaXMueSs9YTtyZXR1cm4gdGhpc30sYWRkVmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngrYi54O3RoaXMueT1hLnkrYi55O3JldHVybiB0aGlzfSxhZGRTY2FsZWRWZWN0b3I6ZnVuY3Rpb24oYSxiKXt0aGlzLngrPWEueCpiO3RoaXMueSs9YS55KmI7cmV0dXJuIHRoaXN9LHN1YjpmdW5jdGlvbihhLGIpe2lmKHZvaWQgMCE9PWIpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLAp0aGlzLnN1YlZlY3RvcnMoYSxiKTt0aGlzLngtPWEueDt0aGlzLnktPWEueTtyZXR1cm4gdGhpc30sc3ViU2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueC09YTt0aGlzLnktPWE7cmV0dXJuIHRoaXN9LHN1YlZlY3RvcnM6ZnVuY3Rpb24oYSxiKXt0aGlzLng9YS54LWIueDt0aGlzLnk9YS55LWIueTtyZXR1cm4gdGhpc30sbXVsdGlwbHk6ZnVuY3Rpb24oYSl7dGhpcy54Kj1hLng7dGhpcy55Kj1hLnk7cmV0dXJuIHRoaXN9LG11bHRpcGx5U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueCo9YTt0aGlzLnkqPWE7cmV0dXJuIHRoaXN9LGRpdmlkZTpmdW5jdGlvbihhKXt0aGlzLngvPWEueDt0aGlzLnkvPWEueTtyZXR1cm4gdGhpc30sZGl2aWRlU2NhbGFyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvYSl9LG1pbjpmdW5jdGlvbihhKXt0aGlzLng9TWF0aC5taW4odGhpcy54LGEueCk7dGhpcy55PU1hdGgubWluKHRoaXMueSxhLnkpO3JldHVybiB0aGlzfSxtYXg6ZnVuY3Rpb24oYSl7dGhpcy54PQpNYXRoLm1heCh0aGlzLngsYS54KTt0aGlzLnk9TWF0aC5tYXgodGhpcy55LGEueSk7cmV0dXJuIHRoaXN9LGNsYW1wOmZ1bmN0aW9uKGEsYil7dGhpcy54PU1hdGgubWF4KGEueCxNYXRoLm1pbihiLngsdGhpcy54KSk7dGhpcy55PU1hdGgubWF4KGEueSxNYXRoLm1pbihiLnksdGhpcy55KSk7cmV0dXJuIHRoaXN9LGNsYW1wU2NhbGFyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEQsYj1uZXcgRDtyZXR1cm4gZnVuY3Rpb24oYyxkKXthLnNldChjLGMpO2Iuc2V0KGQsZCk7cmV0dXJuIHRoaXMuY2xhbXAoYSxiKX19KCksY2xhbXBMZW5ndGg6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KGEsTWF0aC5taW4oYixjKSkvYyl9LGZsb29yOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGguZmxvb3IodGhpcy54KTt0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpO3JldHVybiB0aGlzfSxjZWlsOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGguY2VpbCh0aGlzLngpOwp0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSk7cmV0dXJuIHRoaXN9LHJvdW5kOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGgucm91bmQodGhpcy54KTt0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpO3JldHVybiB0aGlzfSxyb3VuZFRvWmVybzpmdW5jdGlvbigpe3RoaXMueD0wPnRoaXMueD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCk7dGhpcy55PTA+dGhpcy55P01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KTtyZXR1cm4gdGhpc30sbmVnYXRlOmZ1bmN0aW9uKCl7dGhpcy54PS10aGlzLng7dGhpcy55PS10aGlzLnk7cmV0dXJuIHRoaXN9LGRvdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy54KmEueCt0aGlzLnkqYS55fSxsZW5ndGhTcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnl9LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55KX0sbGVuZ3RoTWFuaGF0dGFuOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrCk1hdGguYWJzKHRoaXMueSl9LG5vcm1hbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpKX0sYW5nbGU6ZnVuY3Rpb24oKXt2YXIgYT1NYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpOzA+YSYmKGErPTIqTWF0aC5QSSk7cmV0dXJuIGF9LGRpc3RhbmNlVG86ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKGEpKX0sZGlzdGFuY2VUb1NxdWFyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54LWEueDthPXRoaXMueS1hLnk7cmV0dXJuIGIqYithKmF9LGRpc3RhbmNlVG9NYW5oYXR0YW46ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC1hLngpK01hdGguYWJzKHRoaXMueS1hLnkpfSxzZXRMZW5ndGg6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoYS90aGlzLmxlbmd0aCgpKX0sbGVycDpmdW5jdGlvbihhLGIpe3RoaXMueCs9KGEueC10aGlzLngpKmI7dGhpcy55Kz0KKGEueS10aGlzLnkpKmI7cmV0dXJuIHRoaXN9LGxlcnBWZWN0b3JzOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5zdWJWZWN0b3JzKGIsYSkubXVsdGlwbHlTY2FsYXIoYykuYWRkKGEpfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEueD09PXRoaXMueCYmYS55PT09dGhpcy55fSxmcm9tQXJyYXk6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0wKTt0aGlzLng9YVtiXTt0aGlzLnk9YVtiKzFdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YSYmKGE9W10pO3ZvaWQgMD09PWImJihiPTApO2FbYl09dGhpcy54O2FbYisxXT10aGlzLnk7cmV0dXJuIGF9LGZyb21CdWZmZXJBdHRyaWJ1dGU6ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMCE9PWMmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpO3RoaXMueD1hLmdldFgoYik7dGhpcy55PWEuZ2V0WShiKTsKcmV0dXJuIHRoaXN9LHJvdGF0ZUFyb3VuZDpmdW5jdGlvbihhLGIpe3ZhciBjPU1hdGguY29zKGIpLGQ9TWF0aC5zaW4oYiksZT10aGlzLngtYS54LGY9dGhpcy55LWEueTt0aGlzLng9ZSpjLWYqZCthLng7dGhpcy55PWUqZCtmKmMrYS55O3JldHVybiB0aGlzfX0pO3ZhciBqZj0wO1guREVGQVVMVF9JTUFHRT12b2lkIDA7WC5ERUZBVUxUX01BUFBJTkc9MzAwO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLnByb3RvdHlwZSwibmVlZHNVcGRhdGUiLHtzZXQ6ZnVuY3Rpb24oYSl7ITA9PT1hJiZ0aGlzLnZlcnNpb24rK319KTtPYmplY3QuYXNzaWduKFgucHJvdG90eXBlLHNhLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6WCxpc1RleHR1cmU6ITAsY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5uYW1lPWEubmFtZTt0aGlzLmltYWdlPWEuaW1hZ2U7dGhpcy5taXBtYXBzPWEubWlwbWFwcy5zbGljZSgwKTsKdGhpcy5tYXBwaW5nPWEubWFwcGluZzt0aGlzLndyYXBTPWEud3JhcFM7dGhpcy53cmFwVD1hLndyYXBUO3RoaXMubWFnRmlsdGVyPWEubWFnRmlsdGVyO3RoaXMubWluRmlsdGVyPWEubWluRmlsdGVyO3RoaXMuYW5pc290cm9weT1hLmFuaXNvdHJvcHk7dGhpcy5mb3JtYXQ9YS5mb3JtYXQ7dGhpcy50eXBlPWEudHlwZTt0aGlzLm9mZnNldC5jb3B5KGEub2Zmc2V0KTt0aGlzLnJlcGVhdC5jb3B5KGEucmVwZWF0KTt0aGlzLmdlbmVyYXRlTWlwbWFwcz1hLmdlbmVyYXRlTWlwbWFwczt0aGlzLnByZW11bHRpcGx5QWxwaGE9YS5wcmVtdWx0aXBseUFscGhhO3RoaXMuZmxpcFk9YS5mbGlwWTt0aGlzLnVucGFja0FsaWdubWVudD1hLnVucGFja0FsaWdubWVudDt0aGlzLmVuY29kaW5nPWEuZW5jb2Rpbmc7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihhKXtpZih2b2lkIDAhPT1hLnRleHR1cmVzW3RoaXMudXVpZF0pcmV0dXJuIGEudGV4dHVyZXNbdGhpcy51dWlkXTt2YXIgYj17bWV0YWRhdGE6e3ZlcnNpb246NC41LAp0eXBlOiJUZXh0dXJlIixnZW5lcmF0b3I6IlRleHR1cmUudG9KU09OIn0sdXVpZDp0aGlzLnV1aWQsbmFtZTp0aGlzLm5hbWUsbWFwcGluZzp0aGlzLm1hcHBpbmcscmVwZWF0Olt0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnldLG9mZnNldDpbdGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55XSx3cmFwOlt0aGlzLndyYXBTLHRoaXMud3JhcFRdLG1pbkZpbHRlcjp0aGlzLm1pbkZpbHRlcixtYWdGaWx0ZXI6dGhpcy5tYWdGaWx0ZXIsYW5pc290cm9weTp0aGlzLmFuaXNvdHJvcHksZmxpcFk6dGhpcy5mbGlwWX07aWYodm9pZCAwIT09dGhpcy5pbWFnZSl7dmFyIGM9dGhpcy5pbWFnZTt2b2lkIDA9PT1jLnV1aWQmJihjLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKSk7aWYodm9pZCAwPT09YS5pbWFnZXNbYy51dWlkXSl7dmFyIGQ9YS5pbWFnZXMsZT1jLnV1aWQsZj1jLnV1aWQsZzt2b2lkIDAhPT1jLnRvRGF0YVVSTD9nPWM6KGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwKImNhbnZhcyIpLGcud2lkdGg9Yy53aWR0aCxnLmhlaWdodD1jLmhlaWdodCxnLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKGMsMCwwLGMud2lkdGgsYy5oZWlnaHQpKTtnPTIwNDg8Zy53aWR0aHx8MjA0ODxnLmhlaWdodD9nLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpOmcudG9EYXRhVVJMKCJpbWFnZS9wbmciKTtkW2VdPXt1dWlkOmYsdXJsOmd9fWIuaW1hZ2U9Yy51dWlkfXJldHVybiBhLnRleHR1cmVzW3RoaXMudXVpZF09Yn0sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX0sdHJhbnNmb3JtVXY6ZnVuY3Rpb24oYSl7aWYoMzAwPT09dGhpcy5tYXBwaW5nKXthLm11bHRpcGx5KHRoaXMucmVwZWF0KTthLmFkZCh0aGlzLm9mZnNldCk7aWYoMD5hLnh8fDE8YS54KXN3aXRjaCh0aGlzLndyYXBTKXtjYXNlIDFFMzphLngtPU1hdGguZmxvb3IoYS54KTticmVhaztjYXNlIDEwMDE6YS54PTA+YS54PzA6MTticmVhaztjYXNlIDEwMDI6YS54PQoxPT09TWF0aC5hYnMoTWF0aC5mbG9vcihhLngpJTIpP01hdGguY2VpbChhLngpLWEueDphLngtTWF0aC5mbG9vcihhLngpfWlmKDA+YS55fHwxPGEueSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSAxRTM6YS55LT1NYXRoLmZsb29yKGEueSk7YnJlYWs7Y2FzZSAxMDAxOmEueT0wPmEueT8wOjE7YnJlYWs7Y2FzZSAxMDAyOmEueT0xPT09TWF0aC5hYnMoTWF0aC5mbG9vcihhLnkpJTIpP01hdGguY2VpbChhLnkpLWEueTphLnktTWF0aC5mbG9vcihhLnkpfXRoaXMuZmxpcFkmJihhLnk9MS1hLnkpfX19KTtPYmplY3QuYXNzaWduKGdhLnByb3RvdHlwZSx7aXNWZWN0b3I0OiEwLHNldDpmdW5jdGlvbihhLGIsYyxkKXt0aGlzLng9YTt0aGlzLnk9Yjt0aGlzLno9Yzt0aGlzLnc9ZDtyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMudz10aGlzLno9dGhpcy55PXRoaXMueD1hO3JldHVybiB0aGlzfSxzZXRYOmZ1bmN0aW9uKGEpe3RoaXMueD1hO3JldHVybiB0aGlzfSwKc2V0WTpmdW5jdGlvbihhKXt0aGlzLnk9YTtyZXR1cm4gdGhpc30sc2V0WjpmdW5jdGlvbihhKXt0aGlzLno9YTtyZXR1cm4gdGhpc30sc2V0VzpmdW5jdGlvbihhKXt0aGlzLnc9YTtyZXR1cm4gdGhpc30sc2V0Q29tcG9uZW50OmZ1bmN0aW9uKGEsYil7c3dpdGNoKGEpe2Nhc2UgMDp0aGlzLng9YjticmVhaztjYXNlIDE6dGhpcy55PWI7YnJlYWs7Y2FzZSAyOnRoaXMuej1iO2JyZWFrO2Nhc2UgMzp0aGlzLnc9YjticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrYSk7fXJldHVybiB0aGlzfSxnZXRDb21wb25lbnQ6ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIithKTt9fSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsCnRoaXMueSx0aGlzLnosdGhpcy53KX0sY29weTpmdW5jdGlvbihhKXt0aGlzLng9YS54O3RoaXMueT1hLnk7dGhpcy56PWEuejt0aGlzLnc9dm9pZCAwIT09YS53P2EudzoxO3JldHVybiB0aGlzfSxhZGQ6ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDAhPT1iKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnMoYSxiKTt0aGlzLngrPWEueDt0aGlzLnkrPWEueTt0aGlzLnorPWEuejt0aGlzLncrPWEudztyZXR1cm4gdGhpc30sYWRkU2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueCs9YTt0aGlzLnkrPWE7dGhpcy56Kz1hO3RoaXMudys9YTtyZXR1cm4gdGhpc30sYWRkVmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngrYi54O3RoaXMueT1hLnkrYi55O3RoaXMuej1hLnorYi56O3RoaXMudz1hLncrYi53O3JldHVybiB0aGlzfSwKYWRkU2NhbGVkVmVjdG9yOmZ1bmN0aW9uKGEsYil7dGhpcy54Kz1hLngqYjt0aGlzLnkrPWEueSpiO3RoaXMueis9YS56KmI7dGhpcy53Kz1hLncqYjtyZXR1cm4gdGhpc30sc3ViOmZ1bmN0aW9uKGEsYil7aWYodm9pZCAwIT09YilyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKGEsYik7dGhpcy54LT1hLng7dGhpcy55LT1hLnk7dGhpcy56LT1hLno7dGhpcy53LT1hLnc7cmV0dXJuIHRoaXN9LHN1YlNjYWxhcjpmdW5jdGlvbihhKXt0aGlzLngtPWE7dGhpcy55LT1hO3RoaXMuei09YTt0aGlzLnctPWE7cmV0dXJuIHRoaXN9LHN1YlZlY3RvcnM6ZnVuY3Rpb24oYSxiKXt0aGlzLng9YS54LWIueDt0aGlzLnk9YS55LWIueTt0aGlzLno9YS56LWIuejt0aGlzLnc9YS53LWIudztyZXR1cm4gdGhpc30sbXVsdGlwbHlTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy54Kj0KYTt0aGlzLnkqPWE7dGhpcy56Kj1hO3RoaXMudyo9YTtyZXR1cm4gdGhpc30sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMueCxjPXRoaXMueSxkPXRoaXMueixlPXRoaXMudzthPWEuZWxlbWVudHM7dGhpcy54PWFbMF0qYithWzRdKmMrYVs4XSpkK2FbMTJdKmU7dGhpcy55PWFbMV0qYithWzVdKmMrYVs5XSpkK2FbMTNdKmU7dGhpcy56PWFbMl0qYithWzZdKmMrYVsxMF0qZCthWzE0XSplO3RoaXMudz1hWzNdKmIrYVs3XSpjK2FbMTFdKmQrYVsxNV0qZTtyZXR1cm4gdGhpc30sZGl2aWRlU2NhbGFyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvYSl9LHNldEF4aXNBbmdsZUZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKGEpe3RoaXMudz0yKk1hdGguYWNvcyhhLncpO3ZhciBiPU1hdGguc3FydCgxLWEudyphLncpOzFFLTQ+Yj8odGhpcy54PTEsdGhpcy56PXRoaXMueT0wKToodGhpcy54PWEueC9iLHRoaXMueT1hLnkvYix0aGlzLno9YS56LwpiKTtyZXR1cm4gdGhpc30sc2V0QXhpc0FuZ2xlRnJvbVJvdGF0aW9uTWF0cml4OmZ1bmN0aW9uKGEpe3ZhciBiLGMsZDthPWEuZWxlbWVudHM7dmFyIGU9YVswXTtkPWFbNF07dmFyIGY9YVs4XSxnPWFbMV0saD1hWzVdLGs9YVs5XTtjPWFbMl07Yj1hWzZdO3ZhciBtPWFbMTBdO2lmKC4wMT5NYXRoLmFicyhkLWcpJiYuMDE+TWF0aC5hYnMoZi1jKSYmLjAxPk1hdGguYWJzKGstYikpe2lmKC4xPk1hdGguYWJzKGQrZykmJi4xPk1hdGguYWJzKGYrYykmJi4xPk1hdGguYWJzKGsrYikmJi4xPk1hdGguYWJzKGUraCttLTMpKXJldHVybiB0aGlzLnNldCgxLDAsMCwwKSx0aGlzO2E9TWF0aC5QSTtlPShlKzEpLzI7aD0oaCsxKS8yO209KG0rMSkvMjtkPShkK2cpLzQ7Zj0oZitjKS80O2s9KGsrYikvNDtlPmgmJmU+bT8uMDE+ZT8oYj0wLGQ9Yz0uNzA3MTA2NzgxKTooYj1NYXRoLnNxcnQoZSksYz1kL2IsZD1mL2IpOmg+bT8uMDE+aD8oYj0uNzA3MTA2NzgxLGM9MCxkPS43MDcxMDY3ODEpOgooYz1NYXRoLnNxcnQoaCksYj1kL2MsZD1rL2MpOi4wMT5tPyhjPWI9LjcwNzEwNjc4MSxkPTApOihkPU1hdGguc3FydChtKSxiPWYvZCxjPWsvZCk7dGhpcy5zZXQoYixjLGQsYSk7cmV0dXJuIHRoaXN9YT1NYXRoLnNxcnQoKGItaykqKGItaykrKGYtYykqKGYtYykrKGctZCkqKGctZCkpOy4wMDE+TWF0aC5hYnMoYSkmJihhPTEpO3RoaXMueD0oYi1rKS9hO3RoaXMueT0oZi1jKS9hO3RoaXMuej0oZy1kKS9hO3RoaXMudz1NYXRoLmFjb3MoKGUraCttLTEpLzIpO3JldHVybiB0aGlzfSxtaW46ZnVuY3Rpb24oYSl7dGhpcy54PU1hdGgubWluKHRoaXMueCxhLngpO3RoaXMueT1NYXRoLm1pbih0aGlzLnksYS55KTt0aGlzLno9TWF0aC5taW4odGhpcy56LGEueik7dGhpcy53PU1hdGgubWluKHRoaXMudyxhLncpO3JldHVybiB0aGlzfSxtYXg6ZnVuY3Rpb24oYSl7dGhpcy54PU1hdGgubWF4KHRoaXMueCxhLngpO3RoaXMueT1NYXRoLm1heCh0aGlzLnksYS55KTt0aGlzLno9TWF0aC5tYXgodGhpcy56LAphLnopO3RoaXMudz1NYXRoLm1heCh0aGlzLncsYS53KTtyZXR1cm4gdGhpc30sY2xhbXA6ZnVuY3Rpb24oYSxiKXt0aGlzLng9TWF0aC5tYXgoYS54LE1hdGgubWluKGIueCx0aGlzLngpKTt0aGlzLnk9TWF0aC5tYXgoYS55LE1hdGgubWluKGIueSx0aGlzLnkpKTt0aGlzLno9TWF0aC5tYXgoYS56LE1hdGgubWluKGIueix0aGlzLnopKTt0aGlzLnc9TWF0aC5tYXgoYS53LE1hdGgubWluKGIudyx0aGlzLncpKTtyZXR1cm4gdGhpc30sY2xhbXBTY2FsYXI6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZ2EsYj1uZXcgZ2E7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7YS5zZXQoYyxjLGMsYyk7Yi5zZXQoZCxkLGQsZCk7cmV0dXJuIHRoaXMuY2xhbXAoYSxiKX19KCksZmxvb3I6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpO3RoaXMueT1NYXRoLmZsb29yKHRoaXMueSk7dGhpcy56PU1hdGguZmxvb3IodGhpcy56KTt0aGlzLnc9TWF0aC5mbG9vcih0aGlzLncpO3JldHVybiB0aGlzfSwKY2VpbDpmdW5jdGlvbigpe3RoaXMueD1NYXRoLmNlaWwodGhpcy54KTt0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSk7dGhpcy56PU1hdGguY2VpbCh0aGlzLnopO3RoaXMudz1NYXRoLmNlaWwodGhpcy53KTtyZXR1cm4gdGhpc30scm91bmQ6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpO3RoaXMueT1NYXRoLnJvdW5kKHRoaXMueSk7dGhpcy56PU1hdGgucm91bmQodGhpcy56KTt0aGlzLnc9TWF0aC5yb3VuZCh0aGlzLncpO3JldHVybiB0aGlzfSxyb3VuZFRvWmVybzpmdW5jdGlvbigpe3RoaXMueD0wPnRoaXMueD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCk7dGhpcy55PTA+dGhpcy55P01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KTt0aGlzLno9MD50aGlzLno/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopO3RoaXMudz0wPnRoaXMudz9NYXRoLmNlaWwodGhpcy53KTpNYXRoLmZsb29yKHRoaXMudyk7cmV0dXJuIHRoaXN9LApuZWdhdGU6ZnVuY3Rpb24oKXt0aGlzLng9LXRoaXMueDt0aGlzLnk9LXRoaXMueTt0aGlzLno9LXRoaXMuejt0aGlzLnc9LXRoaXMudztyZXR1cm4gdGhpc30sZG90OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLngqYS54K3RoaXMueSphLnkrdGhpcy56KmEueit0aGlzLncqYS53fSxsZW5ndGhTcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53fSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLncpfSxsZW5ndGhNYW5oYXR0YW46ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueikrTWF0aC5hYnModGhpcy53KX0sbm9ybWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCkpfSwKc2V0TGVuZ3RoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKGEvdGhpcy5sZW5ndGgoKSl9LGxlcnA6ZnVuY3Rpb24oYSxiKXt0aGlzLngrPShhLngtdGhpcy54KSpiO3RoaXMueSs9KGEueS10aGlzLnkpKmI7dGhpcy56Kz0oYS56LXRoaXMueikqYjt0aGlzLncrPShhLnctdGhpcy53KSpiO3JldHVybiB0aGlzfSxsZXJwVmVjdG9yczpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuc3ViVmVjdG9ycyhiLGEpLm11bHRpcGx5U2NhbGFyKGMpLmFkZChhKX0sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLng9PT10aGlzLngmJmEueT09PXRoaXMueSYmYS56PT09dGhpcy56JiZhLnc9PT10aGlzLnd9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO3RoaXMueD1hW2JdO3RoaXMueT1hW2IrMV07dGhpcy56PWFbYisyXTt0aGlzLnc9YVtiKzNdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YSYmKGE9CltdKTt2b2lkIDA9PT1iJiYoYj0wKTthW2JdPXRoaXMueDthW2IrMV09dGhpcy55O2FbYisyXT10aGlzLno7YVtiKzNdPXRoaXMudztyZXR1cm4gYX0sZnJvbUJ1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbihhLGIsYyl7dm9pZCAwIT09YyYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7dGhpcy54PWEuZ2V0WChiKTt0aGlzLnk9YS5nZXRZKGIpO3RoaXMuej1hLmdldFooYik7dGhpcy53PWEuZ2V0VyhiKTtyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKERiLnByb3RvdHlwZSxzYS5wcm90b3R5cGUse2lzV2ViR0xSZW5kZXJUYXJnZXQ6ITAsc2V0U2l6ZTpmdW5jdGlvbihhLGIpe2lmKHRoaXMud2lkdGghPT1hfHx0aGlzLmhlaWdodCE9PWIpdGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWIsdGhpcy5kaXNwb3NlKCk7dGhpcy52aWV3cG9ydC5zZXQoMCwwLGEsYik7dGhpcy5zY2lzc29yLnNldCgwLAowLGEsYil9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMud2lkdGg9YS53aWR0aDt0aGlzLmhlaWdodD1hLmhlaWdodDt0aGlzLnZpZXdwb3J0LmNvcHkoYS52aWV3cG9ydCk7dGhpcy50ZXh0dXJlPWEudGV4dHVyZS5jbG9uZSgpO3RoaXMuZGVwdGhCdWZmZXI9YS5kZXB0aEJ1ZmZlcjt0aGlzLnN0ZW5jaWxCdWZmZXI9YS5zdGVuY2lsQnVmZmVyO3RoaXMuZGVwdGhUZXh0dXJlPWEuZGVwdGhUZXh0dXJlO3JldHVybiB0aGlzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX0pO0ViLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKERiLnByb3RvdHlwZSk7RWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUViO0ViLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZT0hMDtPYmplY3QuYXNzaWduKHFhLHtzbGVycDpmdW5jdGlvbihhLGIsCmMsZCl7cmV0dXJuIGMuY29weShhKS5zbGVycChiLGQpfSxzbGVycEZsYXQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9Y1tkKzBdLGs9Y1tkKzFdLG09Y1tkKzJdO2M9Y1tkKzNdO2Q9ZVtmKzBdO3ZhciB1PWVbZisxXSxsPWVbZisyXTtlPWVbZiszXTtpZihjIT09ZXx8aCE9PWR8fGshPT11fHxtIT09bCl7Zj0xLWc7dmFyIG49aCpkK2sqdSttKmwrYyplLHI9MDw9bj8xOi0xLHA9MS1uKm47cD5OdW1iZXIuRVBTSUxPTiYmKHA9TWF0aC5zcXJ0KHApLG49TWF0aC5hdGFuMihwLG4qciksZj1NYXRoLnNpbihmKm4pL3AsZz1NYXRoLnNpbihnKm4pL3ApO3IqPWc7aD1oKmYrZCpyO2s9aypmK3UqcjttPW0qZitsKnI7Yz1jKmYrZSpyO2Y9PT0xLWcmJihnPTEvTWF0aC5zcXJ0KGgqaCtrKmsrbSptK2MqYyksaCo9ZyxrKj1nLG0qPWcsYyo9Zyl9YVtiXT1oO2FbYisxXT1rO2FbYisyXT1tO2FbYiszXT1jfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHFhLnByb3RvdHlwZSx7eDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LApzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feD1hO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpfX0seTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihhKXt0aGlzLl95PWE7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9fSx6OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fen0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3o9YTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKX19LHc6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5fdz1hO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpfX19KTtPYmplY3QuYXNzaWduKHFhLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuX3g9YTt0aGlzLl95PWI7dGhpcy5fej1jO3RoaXMuX3c9ZDt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osCnRoaXMuX3cpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMuX3g9YS54O3RoaXMuX3k9YS55O3RoaXMuX3o9YS56O3RoaXMuX3c9YS53O3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzZXRGcm9tRXVsZXI6ZnVuY3Rpb24oYSxiKXtpZighMT09PShhJiZhLmlzRXVsZXIpKXRocm93IEVycm9yKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTt2YXIgYz1hLl94LGQ9YS5feSxlPWEuX3osZj1hLm9yZGVyLGc9TWF0aC5jb3MsaD1NYXRoLnNpbixrPWcoYy8yKSxtPWcoZC8yKSxnPWcoZS8yKSxjPWgoYy8yKSxkPWgoZC8yKSxlPWgoZS8yKTsiWFlaIj09PWY/KHRoaXMuX3g9YyptKmcraypkKmUsdGhpcy5feT1rKmQqZy1jKm0qZSx0aGlzLl96PWsqbSplK2MqZCpnLHRoaXMuX3c9ayptKmctYypkKmUpOiJZWFoiPT09Zj8odGhpcy5feD1jKm0qZysKaypkKmUsdGhpcy5feT1rKmQqZy1jKm0qZSx0aGlzLl96PWsqbSplLWMqZCpnLHRoaXMuX3c9ayptKmcrYypkKmUpOiJaWFkiPT09Zj8odGhpcy5feD1jKm0qZy1rKmQqZSx0aGlzLl95PWsqZCpnK2MqbSplLHRoaXMuX3o9ayptKmUrYypkKmcsdGhpcy5fdz1rKm0qZy1jKmQqZSk6IlpZWCI9PT1mPyh0aGlzLl94PWMqbSpnLWsqZCplLHRoaXMuX3k9aypkKmcrYyptKmUsdGhpcy5fej1rKm0qZS1jKmQqZyx0aGlzLl93PWsqbSpnK2MqZCplKToiWVpYIj09PWY/KHRoaXMuX3g9YyptKmcraypkKmUsdGhpcy5feT1rKmQqZytjKm0qZSx0aGlzLl96PWsqbSplLWMqZCpnLHRoaXMuX3c9ayptKmctYypkKmUpOiJYWlkiPT09ZiYmKHRoaXMuX3g9YyptKmctaypkKmUsdGhpcy5feT1rKmQqZy1jKm0qZSx0aGlzLl96PWsqbSplK2MqZCpnLHRoaXMuX3c9ayptKmcrYypkKmUpO2lmKCExIT09Yil0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sc2V0RnJvbUF4aXNBbmdsZTpmdW5jdGlvbihhLApiKXt2YXIgYz1iLzIsZD1NYXRoLnNpbihjKTt0aGlzLl94PWEueCpkO3RoaXMuX3k9YS55KmQ7dGhpcy5fej1hLnoqZDt0aGlzLl93PU1hdGguY29zKGMpO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzZXRGcm9tUm90YXRpb25NYXRyaXg6ZnVuY3Rpb24oYSl7dmFyIGI9YS5lbGVtZW50cyxjPWJbMF07YT1iWzRdO3ZhciBkPWJbOF0sZT1iWzFdLGY9Yls1XSxnPWJbOV0saD1iWzJdLGs9Yls2XSxiPWJbMTBdLG09YytmK2I7MDxtPyhjPS41L01hdGguc3FydChtKzEpLHRoaXMuX3c9LjI1L2MsdGhpcy5feD0oay1nKSpjLHRoaXMuX3k9KGQtaCkqYyx0aGlzLl96PShlLWEpKmMpOmM+ZiYmYz5iPyhjPTIqTWF0aC5zcXJ0KDErYy1mLWIpLHRoaXMuX3c9KGstZykvYyx0aGlzLl94PS4yNSpjLHRoaXMuX3k9KGErZSkvYyx0aGlzLl96PShkK2gpL2MpOmY+Yj8oYz0yKk1hdGguc3FydCgxK2YtYy1iKSx0aGlzLl93PShkLWgpL2MsdGhpcy5feD0oYStlKS9jLHRoaXMuX3k9Ci4yNSpjLHRoaXMuX3o9KGcraykvYyk6KGM9MipNYXRoLnNxcnQoMStiLWMtZiksdGhpcy5fdz0oZS1hKS9jLHRoaXMuX3g9KGQraCkvYyx0aGlzLl95PShnK2spL2MsdGhpcy5fej0uMjUqYyk7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7cmV0dXJuIHRoaXN9LHNldEZyb21Vbml0VmVjdG9yczpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7dm9pZCAwPT09YSYmKGE9bmV3IHApO2I9Yy5kb3QoZCkrMTsxRS02PmI/KGI9MCxNYXRoLmFicyhjLngpPk1hdGguYWJzKGMueik/YS5zZXQoLWMueSxjLngsMCk6YS5zZXQoMCwtYy56LGMueSkpOmEuY3Jvc3NWZWN0b3JzKGMsZCk7dGhpcy5feD1hLng7dGhpcy5feT1hLnk7dGhpcy5fej1hLno7dGhpcy5fdz1iO3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpfX0oKSxpbnZlcnNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCkubm9ybWFsaXplKCl9LGNvbmp1Z2F0ZTpmdW5jdGlvbigpe3RoaXMuX3gqPQotMTt0aGlzLl95Kj0tMTt0aGlzLl96Kj0tMTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sZG90OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl94KmEuX3grdGhpcy5feSphLl95K3RoaXMuX3oqYS5feit0aGlzLl93KmEuX3d9LGxlbmd0aFNxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fd30sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3cpfSxub3JtYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmxlbmd0aCgpOzA9PT1hPyh0aGlzLl96PXRoaXMuX3k9dGhpcy5feD0wLHRoaXMuX3c9MSk6KGE9MS9hLHRoaXMuX3gqPWEsdGhpcy5feSo9YSx0aGlzLl96Kj1hLHRoaXMuX3cqPWEpO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSwKbXVsdGlwbHk6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdm9pZCAwIT09Yj8oY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5UXVhdGVybmlvbnMoYSxiKSk6dGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsYSl9LHByZW11bHRpcGx5OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5UXVhdGVybmlvbnMoYSx0aGlzKX0sbXVsdGlwbHlRdWF0ZXJuaW9uczpmdW5jdGlvbihhLGIpe3ZhciBjPWEuX3gsZD1hLl95LGU9YS5feixmPWEuX3csZz1iLl94LGg9Yi5feSxrPWIuX3osbT1iLl93O3RoaXMuX3g9YyptK2YqZytkKmstZSpoO3RoaXMuX3k9ZCptK2YqaCtlKmctYyprO3RoaXMuX3o9ZSptK2YqaytjKmgtZCpnO3RoaXMuX3c9ZiptLWMqZy1kKmgtZSprO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpOwpyZXR1cm4gdGhpc30sc2xlcnA6ZnVuY3Rpb24oYSxiKXtpZigwPT09YilyZXR1cm4gdGhpcztpZigxPT09YilyZXR1cm4gdGhpcy5jb3B5KGEpO3ZhciBjPXRoaXMuX3gsZD10aGlzLl95LGU9dGhpcy5feixmPXRoaXMuX3csZz1mKmEuX3crYyphLl94K2QqYS5feStlKmEuX3o7MD5nPyh0aGlzLl93PS1hLl93LHRoaXMuX3g9LWEuX3gsdGhpcy5feT0tYS5feSx0aGlzLl96PS1hLl96LGc9LWcpOnRoaXMuY29weShhKTtpZigxPD1nKXJldHVybiB0aGlzLl93PWYsdGhpcy5feD1jLHRoaXMuX3k9ZCx0aGlzLl96PWUsdGhpczt2YXIgaD1NYXRoLnNxcnQoMS1nKmcpO2lmKC4wMDE+TWF0aC5hYnMoaCkpcmV0dXJuIHRoaXMuX3c9LjUqKGYrdGhpcy5fdyksdGhpcy5feD0uNSooYyt0aGlzLl94KSx0aGlzLl95PS41KihkK3RoaXMuX3kpLHRoaXMuX3o9LjUqKGUrdGhpcy5feiksdGhpczt2YXIgaz1NYXRoLmF0YW4yKGgsZyksZz1NYXRoLnNpbigoMS1iKSprKS9oLGg9TWF0aC5zaW4oYioKaykvaDt0aGlzLl93PWYqZyt0aGlzLl93Kmg7dGhpcy5feD1jKmcrdGhpcy5feCpoO3RoaXMuX3k9ZCpnK3RoaXMuX3kqaDt0aGlzLl96PWUqZyt0aGlzLl96Kmg7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihhKXtyZXR1cm4gYS5feD09PXRoaXMuX3gmJmEuX3k9PT10aGlzLl95JiZhLl96PT09dGhpcy5feiYmYS5fdz09PXRoaXMuX3d9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO3RoaXMuX3g9YVtiXTt0aGlzLl95PWFbYisxXTt0aGlzLl96PWFbYisyXTt0aGlzLl93PWFbYiszXTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWEmJihhPVtdKTt2b2lkIDA9PT1iJiYoYj0wKTthW2JdPXRoaXMuX3g7YVtiKzFdPXRoaXMuX3k7YVtiKzJdPXRoaXMuX3o7YVtiKzNdPXRoaXMuX3c7cmV0dXJuIGF9LG9uQ2hhbmdlOmZ1bmN0aW9uKGEpe3RoaXMub25DaGFuZ2VDYWxsYmFjaz0KYTtyZXR1cm4gdGhpc30sb25DaGFuZ2VDYWxsYmFjazpmdW5jdGlvbigpe319KTtPYmplY3QuYXNzaWduKHAucHJvdG90eXBlLHtpc1ZlY3RvcjM6ITAsc2V0OmZ1bmN0aW9uKGEsYixjKXt0aGlzLng9YTt0aGlzLnk9Yjt0aGlzLno9YztyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMuej10aGlzLnk9dGhpcy54PWE7cmV0dXJuIHRoaXN9LHNldFg6ZnVuY3Rpb24oYSl7dGhpcy54PWE7cmV0dXJuIHRoaXN9LHNldFk6ZnVuY3Rpb24oYSl7dGhpcy55PWE7cmV0dXJuIHRoaXN9LHNldFo6ZnVuY3Rpb24oYSl7dGhpcy56PWE7cmV0dXJuIHRoaXN9LHNldENvbXBvbmVudDpmdW5jdGlvbihhLGIpe3N3aXRjaChhKXtjYXNlIDA6dGhpcy54PWI7YnJlYWs7Y2FzZSAxOnRoaXMueT1iO2JyZWFrO2Nhc2UgMjp0aGlzLno9YjticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrYSk7fXJldHVybiB0aGlzfSxnZXRDb21wb25lbnQ6ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gdGhpcy54OwpjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtkZWZhdWx0OnRocm93IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrYSk7fX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMueD1hLng7dGhpcy55PWEueTt0aGlzLno9YS56O3JldHVybiB0aGlzfSxhZGQ6ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDAhPT1iKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnMoYSxiKTt0aGlzLngrPWEueDt0aGlzLnkrPWEueTt0aGlzLnorPWEuejtyZXR1cm4gdGhpc30sYWRkU2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueCs9YTt0aGlzLnkrPWE7dGhpcy56Kz1hO3JldHVybiB0aGlzfSwKYWRkVmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngrYi54O3RoaXMueT1hLnkrYi55O3RoaXMuej1hLnorYi56O3JldHVybiB0aGlzfSxhZGRTY2FsZWRWZWN0b3I6ZnVuY3Rpb24oYSxiKXt0aGlzLngrPWEueCpiO3RoaXMueSs9YS55KmI7dGhpcy56Kz1hLnoqYjtyZXR1cm4gdGhpc30sc3ViOmZ1bmN0aW9uKGEsYil7aWYodm9pZCAwIT09YilyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKGEsYik7dGhpcy54LT1hLng7dGhpcy55LT1hLnk7dGhpcy56LT1hLno7cmV0dXJuIHRoaXN9LHN1YlNjYWxhcjpmdW5jdGlvbihhKXt0aGlzLngtPWE7dGhpcy55LT1hO3RoaXMuei09YTtyZXR1cm4gdGhpc30sc3ViVmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngtYi54O3RoaXMueT1hLnktYi55O3RoaXMuej0KYS56LWIuejtyZXR1cm4gdGhpc30sbXVsdGlwbHk6ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDAhPT1iKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnMoYSxiKTt0aGlzLngqPWEueDt0aGlzLnkqPWEueTt0aGlzLnoqPWEuejtyZXR1cm4gdGhpc30sbXVsdGlwbHlTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy54Kj1hO3RoaXMueSo9YTt0aGlzLnoqPWE7cmV0dXJuIHRoaXN9LG11bHRpcGx5VmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngqYi54O3RoaXMueT1hLnkqYi55O3RoaXMuej1hLnoqYi56O3JldHVybiB0aGlzfSxhcHBseUV1bGVyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHFhO3JldHVybiBmdW5jdGlvbihiKXshMT09PShiJiZiLmlzRXVsZXIpJiZjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlFdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7CnJldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihhLnNldEZyb21FdWxlcihiKSl9fSgpLGFwcGx5QXhpc0FuZ2xlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHFhO3JldHVybiBmdW5jdGlvbihiLGMpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihhLnNldEZyb21BeGlzQW5nbGUoYixjKSl9fSgpLGFwcGx5TWF0cml4MzpmdW5jdGlvbihhKXt2YXIgYj10aGlzLngsYz10aGlzLnksZD10aGlzLno7YT1hLmVsZW1lbnRzO3RoaXMueD1hWzBdKmIrYVszXSpjK2FbNl0qZDt0aGlzLnk9YVsxXSpiK2FbNF0qYythWzddKmQ7dGhpcy56PWFbMl0qYithWzVdKmMrYVs4XSpkO3JldHVybiB0aGlzfSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54LGM9dGhpcy55LGQ9dGhpcy56O2E9YS5lbGVtZW50czt0aGlzLng9YVswXSpiK2FbNF0qYythWzhdKmQrYVsxMl07dGhpcy55PWFbMV0qYithWzVdKmMrYVs5XSpkK2FbMTNdO3RoaXMuej1hWzJdKmIrYVs2XSpjK2FbMTBdKmQrYVsxNF07CnJldHVybiB0aGlzLmRpdmlkZVNjYWxhcihhWzNdKmIrYVs3XSpjK2FbMTFdKmQrYVsxNV0pfSxhcHBseVF1YXRlcm5pb246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54LGM9dGhpcy55LGQ9dGhpcy56LGU9YS54LGY9YS55LGc9YS56O2E9YS53O3ZhciBoPWEqYitmKmQtZypjLGs9YSpjK2cqYi1lKmQsbT1hKmQrZSpjLWYqYixiPS1lKmItZipjLWcqZDt0aGlzLng9aCphK2IqLWUrayotZy1tKi1mO3RoaXMueT1rKmErYiotZittKi1lLWgqLWc7dGhpcy56PW0qYStiKi1nK2gqLWYtayotZTtyZXR1cm4gdGhpc30scHJvamVjdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBKO3JldHVybiBmdW5jdGlvbihiKXthLm11bHRpcGx5TWF0cmljZXMoYi5wcm9qZWN0aW9uTWF0cml4LGEuZ2V0SW52ZXJzZShiLm1hdHJpeFdvcmxkKSk7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KGEpfX0oKSx1bnByb2plY3Q6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYil7YS5tdWx0aXBseU1hdHJpY2VzKGIubWF0cml4V29ybGQsCmEuZ2V0SW52ZXJzZShiLnByb2plY3Rpb25NYXRyaXgpKTtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQoYSl9fSgpLHRyYW5zZm9ybURpcmVjdGlvbjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLngsYz10aGlzLnksZD10aGlzLno7YT1hLmVsZW1lbnRzO3RoaXMueD1hWzBdKmIrYVs0XSpjK2FbOF0qZDt0aGlzLnk9YVsxXSpiK2FbNV0qYythWzldKmQ7dGhpcy56PWFbMl0qYithWzZdKmMrYVsxMF0qZDtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKX0sZGl2aWRlOmZ1bmN0aW9uKGEpe3RoaXMueC89YS54O3RoaXMueS89YS55O3RoaXMuei89YS56O3JldHVybiB0aGlzfSxkaXZpZGVTY2FsYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS9hKX0sbWluOmZ1bmN0aW9uKGEpe3RoaXMueD1NYXRoLm1pbih0aGlzLngsYS54KTt0aGlzLnk9TWF0aC5taW4odGhpcy55LGEueSk7dGhpcy56PU1hdGgubWluKHRoaXMueixhLnopO3JldHVybiB0aGlzfSxtYXg6ZnVuY3Rpb24oYSl7dGhpcy54PQpNYXRoLm1heCh0aGlzLngsYS54KTt0aGlzLnk9TWF0aC5tYXgodGhpcy55LGEueSk7dGhpcy56PU1hdGgubWF4KHRoaXMueixhLnopO3JldHVybiB0aGlzfSxjbGFtcDpmdW5jdGlvbihhLGIpe3RoaXMueD1NYXRoLm1heChhLngsTWF0aC5taW4oYi54LHRoaXMueCkpO3RoaXMueT1NYXRoLm1heChhLnksTWF0aC5taW4oYi55LHRoaXMueSkpO3RoaXMuej1NYXRoLm1heChhLnosTWF0aC5taW4oYi56LHRoaXMueikpO3JldHVybiB0aGlzfSxjbGFtcFNjYWxhcjpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7YS5zZXQoYyxjLGMpO2Iuc2V0KGQsZCxkKTtyZXR1cm4gdGhpcy5jbGFtcChhLGIpfX0oKSxjbGFtcExlbmd0aDpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgoYSxNYXRoLm1pbihiLGMpKS9jKX0sZmxvb3I6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpOwp0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpO3RoaXMuej1NYXRoLmZsb29yKHRoaXMueik7cmV0dXJuIHRoaXN9LGNlaWw6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5jZWlsKHRoaXMueCk7dGhpcy55PU1hdGguY2VpbCh0aGlzLnkpO3RoaXMuej1NYXRoLmNlaWwodGhpcy56KTtyZXR1cm4gdGhpc30scm91bmQ6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpO3RoaXMueT1NYXRoLnJvdW5kKHRoaXMueSk7dGhpcy56PU1hdGgucm91bmQodGhpcy56KTtyZXR1cm4gdGhpc30scm91bmRUb1plcm86ZnVuY3Rpb24oKXt0aGlzLng9MD50aGlzLng/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpO3RoaXMueT0wPnRoaXMueT9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSk7dGhpcy56PTA+dGhpcy56P01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KTtyZXR1cm4gdGhpc30sbmVnYXRlOmZ1bmN0aW9uKCl7dGhpcy54PS10aGlzLng7CnRoaXMueT0tdGhpcy55O3RoaXMuej0tdGhpcy56O3JldHVybiB0aGlzfSxkb3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMueCphLngrdGhpcy55KmEueSt0aGlzLnoqYS56fSxsZW5ndGhTcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen0sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueil9LGxlbmd0aE1hbmhhdHRhbjpmdW5jdGlvbigpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KX0sbm9ybWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCkpfSxzZXRMZW5ndGg6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoYS90aGlzLmxlbmd0aCgpKX0sbGVycDpmdW5jdGlvbihhLGIpe3RoaXMueCs9KGEueC10aGlzLngpKgpiO3RoaXMueSs9KGEueS10aGlzLnkpKmI7dGhpcy56Kz0oYS56LXRoaXMueikqYjtyZXR1cm4gdGhpc30sbGVycFZlY3RvcnM6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLnN1YlZlY3RvcnMoYixhKS5tdWx0aXBseVNjYWxhcihjKS5hZGQoYSl9LGNyb3NzOmZ1bmN0aW9uKGEsYil7aWYodm9pZCAwIT09YilyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuY3Jvc3MoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5jcm9zc1ZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuY3Jvc3NWZWN0b3JzKGEsYik7dmFyIGM9dGhpcy54LGQ9dGhpcy55LGU9dGhpcy56O3RoaXMueD1kKmEuei1lKmEueTt0aGlzLnk9ZSphLngtYyphLno7dGhpcy56PWMqYS55LWQqYS54O3JldHVybiB0aGlzfSxjcm9zc1ZlY3RvcnM6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLngsZD1hLnksZT1hLnosZj1iLngsZz1iLnksaD1iLno7dGhpcy54PWQqaC1lKmc7dGhpcy55PQplKmYtYypoO3RoaXMuej1jKmctZCpmO3JldHVybiB0aGlzfSxwcm9qZWN0T25WZWN0b3I6ZnVuY3Rpb24oYSl7dmFyIGI9YS5kb3QodGhpcykvYS5sZW5ndGhTcSgpO3JldHVybiB0aGlzLmNvcHkoYSkubXVsdGlwbHlTY2FsYXIoYil9LHByb2plY3RPblBsYW5lOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe2EuY29weSh0aGlzKS5wcm9qZWN0T25WZWN0b3IoYik7cmV0dXJuIHRoaXMuc3ViKGEpfX0oKSxyZWZsZWN0OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnN1YihhLmNvcHkoYikubXVsdGlwbHlTY2FsYXIoMip0aGlzLmRvdChiKSkpfX0oKSxhbmdsZVRvOmZ1bmN0aW9uKGEpe2E9dGhpcy5kb3QoYSkvTWF0aC5zcXJ0KHRoaXMubGVuZ3RoU3EoKSphLmxlbmd0aFNxKCkpO3JldHVybiBNYXRoLmFjb3MoWS5jbGFtcChhLC0xLDEpKX0sZGlzdGFuY2VUbzpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQoYSkpfSwKZGlzdGFuY2VUb1NxdWFyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54LWEueCxjPXRoaXMueS1hLnk7YT10aGlzLnotYS56O3JldHVybiBiKmIrYypjK2EqYX0sZGlzdGFuY2VUb01hbmhhdHRhbjpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5hYnModGhpcy54LWEueCkrTWF0aC5hYnModGhpcy55LWEueSkrTWF0aC5hYnModGhpcy56LWEueil9LHNldEZyb21TcGhlcmljYWw6ZnVuY3Rpb24oYSl7dmFyIGI9TWF0aC5zaW4oYS5waGkpKmEucmFkaXVzO3RoaXMueD1iKk1hdGguc2luKGEudGhldGEpO3RoaXMueT1NYXRoLmNvcyhhLnBoaSkqYS5yYWRpdXM7dGhpcy56PWIqTWF0aC5jb3MoYS50aGV0YSk7cmV0dXJuIHRoaXN9LHNldEZyb21DeWxpbmRyaWNhbDpmdW5jdGlvbihhKXt0aGlzLng9YS5yYWRpdXMqTWF0aC5zaW4oYS50aGV0YSk7dGhpcy55PWEueTt0aGlzLno9YS5yYWRpdXMqTWF0aC5jb3MoYS50aGV0YSk7cmV0dXJuIHRoaXN9LHNldEZyb21NYXRyaXhQb3NpdGlvbjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKGEsCjMpfSxzZXRGcm9tTWF0cml4U2NhbGU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKGEsMCkubGVuZ3RoKCksYz10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oYSwxKS5sZW5ndGgoKTthPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbihhLDIpLmxlbmd0aCgpO3RoaXMueD1iO3RoaXMueT1jO3RoaXMuej1hO3JldHVybiB0aGlzfSxzZXRGcm9tTWF0cml4Q29sdW1uOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZnJvbUFycmF5KGEuZWxlbWVudHMsNCpiKX0sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLng9PT10aGlzLngmJmEueT09PXRoaXMueSYmYS56PT09dGhpcy56fSxmcm9tQXJyYXk6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0wKTt0aGlzLng9YVtiXTt0aGlzLnk9YVtiKzFdO3RoaXMuej1hW2IrMl07cmV0dXJuIHRoaXN9LHRvQXJyYXk6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1hJiYoYT1bXSk7dm9pZCAwPT09YiYmKGI9MCk7YVtiXT0KdGhpcy54O2FbYisxXT10aGlzLnk7YVtiKzJdPXRoaXMuejtyZXR1cm4gYX0sZnJvbUJ1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbihhLGIsYyl7dm9pZCAwIT09YyYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7dGhpcy54PWEuZ2V0WChiKTt0aGlzLnk9YS5nZXRZKGIpO3RoaXMuej1hLmdldFooYik7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihKLnByb3RvdHlwZSx7aXNNYXRyaXg0OiEwLHNldDpmdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsayxtLHUsbCxuLHIscCx0KXt2YXIgeT10aGlzLmVsZW1lbnRzO3lbMF09YTt5WzRdPWI7eVs4XT1jO3lbMTJdPWQ7eVsxXT1lO3lbNV09Zjt5WzldPWc7eVsxM109aDt5WzJdPWs7eVs2XT1tO3lbMTBdPXU7eVsxNF09bDt5WzNdPW47eVs3XT1yO3lbMTFdPXA7eVsxNV09dDtyZXR1cm4gdGhpc30saWRlbnRpdHk6ZnVuY3Rpb24oKXt0aGlzLnNldCgxLAowLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBKKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9LGNvcHk6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbGVtZW50czthPWEuZWxlbWVudHM7YlswXT1hWzBdO2JbMV09YVsxXTtiWzJdPWFbMl07YlszXT1hWzNdO2JbNF09YVs0XTtiWzVdPWFbNV07Yls2XT1hWzZdO2JbN109YVs3XTtiWzhdPWFbOF07Yls5XT1hWzldO2JbMTBdPWFbMTBdO2JbMTFdPWFbMTFdO2JbMTJdPWFbMTJdO2JbMTNdPWFbMTNdO2JbMTRdPWFbMTRdO2JbMTVdPWFbMTVdO3JldHVybiB0aGlzfSxjb3B5UG9zaXRpb246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbGVtZW50czthPWEuZWxlbWVudHM7YlsxMl09YVsxMl07YlsxM109YVsxM107YlsxNF09YVsxNF07cmV0dXJuIHRoaXN9LGV4dHJhY3RCYXNpczpmdW5jdGlvbihhLGIsYyl7YS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMCk7CmIuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpO2Muc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpO3JldHVybiB0aGlzfSxtYWtlQmFzaXM6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuc2V0KGEueCxiLngsYy54LDAsYS55LGIueSxjLnksMCxhLnosYi56LGMueiwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxleHRyYWN0Um90YXRpb246ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5lbGVtZW50cyxkPWIuZWxlbWVudHMsZT0xL2Euc2V0RnJvbU1hdHJpeENvbHVtbihiLDApLmxlbmd0aCgpLGY9MS9hLnNldEZyb21NYXRyaXhDb2x1bW4oYiwxKS5sZW5ndGgoKTtiPTEvYS5zZXRGcm9tTWF0cml4Q29sdW1uKGIsMikubGVuZ3RoKCk7Y1swXT1kWzBdKmU7Y1sxXT1kWzFdKmU7Y1syXT1kWzJdKmU7Y1s0XT1kWzRdKmY7Y1s1XT1kWzVdKmY7Y1s2XT1kWzZdKmY7Y1s4XT1kWzhdKmI7Y1s5XT1kWzldKmI7Y1sxMF09ZFsxMF0qYjtyZXR1cm4gdGhpc319KCksCm1ha2VSb3RhdGlvbkZyb21FdWxlcjpmdW5jdGlvbihhKXshMT09PShhJiZhLmlzRXVsZXIpJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7dmFyIGI9dGhpcy5lbGVtZW50cyxjPWEueCxkPWEueSxlPWEueixmPU1hdGguY29zKGMpLGM9TWF0aC5zaW4oYyksZz1NYXRoLmNvcyhkKSxkPU1hdGguc2luKGQpLGg9TWF0aC5jb3MoZSksZT1NYXRoLnNpbihlKTtpZigiWFlaIj09PWEub3JkZXIpe2E9ZipoO3ZhciBrPWYqZSxtPWMqaCx1PWMqZTtiWzBdPWcqaDtiWzRdPS1nKmU7Yls4XT1kO2JbMV09ayttKmQ7Yls1XT1hLXUqZDtiWzldPS1jKmc7YlsyXT11LWEqZDtiWzZdPW0raypkO2JbMTBdPWYqZ31lbHNlIllYWiI9PT1hLm9yZGVyPyhhPWcqaCxrPWcqZSxtPWQqaCx1PWQqZSxiWzBdPWErdSpjLGJbNF09bSpjLWssYls4XT0KZipkLGJbMV09ZiplLGJbNV09ZipoLGJbOV09LWMsYlsyXT1rKmMtbSxiWzZdPXUrYSpjLGJbMTBdPWYqZyk6IlpYWSI9PT1hLm9yZGVyPyhhPWcqaCxrPWcqZSxtPWQqaCx1PWQqZSxiWzBdPWEtdSpjLGJbNF09LWYqZSxiWzhdPW0raypjLGJbMV09ayttKmMsYls1XT1mKmgsYls5XT11LWEqYyxiWzJdPS1mKmQsYls2XT1jLGJbMTBdPWYqZyk6IlpZWCI9PT1hLm9yZGVyPyhhPWYqaCxrPWYqZSxtPWMqaCx1PWMqZSxiWzBdPWcqaCxiWzRdPW0qZC1rLGJbOF09YSpkK3UsYlsxXT1nKmUsYls1XT11KmQrYSxiWzldPWsqZC1tLGJbMl09LWQsYls2XT1jKmcsYlsxMF09ZipnKToiWVpYIj09PWEub3JkZXI/KGE9ZipnLGs9ZipkLG09YypnLHU9YypkLGJbMF09ZypoLGJbNF09dS1hKmUsYls4XT1tKmUrayxiWzFdPWUsYls1XT1mKmgsYls5XT0tYypoLGJbMl09LWQqaCxiWzZdPWsqZSttLGJbMTBdPWEtdSplKToiWFpZIj09PWEub3JkZXImJihhPWYqZyxrPWYqZCxtPWMqZyx1PWMqZCxiWzBdPQpnKmgsYls0XT0tZSxiWzhdPWQqaCxiWzFdPWEqZSt1LGJbNV09ZipoLGJbOV09ayplLW0sYlsyXT1tKmUtayxiWzZdPWMqaCxiWzEwXT11KmUrYSk7YlszXT0wO2JbN109MDtiWzExXT0wO2JbMTJdPTA7YlsxM109MDtiWzE0XT0wO2JbMTVdPTE7cmV0dXJuIHRoaXN9LG1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWxlbWVudHMsYz1hLl94LGQ9YS5feSxlPWEuX3osZj1hLl93LGc9YytjLGg9ZCtkLGs9ZStlO2E9YypnO3ZhciBtPWMqaCxjPWMqayx1PWQqaCxkPWQqayxlPWUqayxnPWYqZyxoPWYqaCxmPWYqaztiWzBdPTEtKHUrZSk7Yls0XT1tLWY7Yls4XT1jK2g7YlsxXT1tK2Y7Yls1XT0xLShhK2UpO2JbOV09ZC1nO2JbMl09Yy1oO2JbNl09ZCtnO2JbMTBdPTEtKGErdSk7YlszXT0wO2JbN109MDtiWzExXT0wO2JbMTJdPTA7YlsxM109MDtiWzE0XT0wO2JbMTVdPTE7cmV0dXJuIHRoaXN9LGxvb2tBdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLApiPW5ldyBwLGM9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGQsZSxmKXt2YXIgZz10aGlzLmVsZW1lbnRzO2Muc3ViVmVjdG9ycyhkLGUpOzA9PT1jLmxlbmd0aFNxKCkmJihjLno9MSk7Yy5ub3JtYWxpemUoKTthLmNyb3NzVmVjdG9ycyhmLGMpOzA9PT1hLmxlbmd0aFNxKCkmJihjLnorPTFFLTQsYS5jcm9zc1ZlY3RvcnMoZixjKSk7YS5ub3JtYWxpemUoKTtiLmNyb3NzVmVjdG9ycyhjLGEpO2dbMF09YS54O2dbNF09Yi54O2dbOF09Yy54O2dbMV09YS55O2dbNV09Yi55O2dbOV09Yy55O2dbMl09YS56O2dbNl09Yi56O2dbMTBdPWMuejtyZXR1cm4gdGhpc319KCksbXVsdGlwbHk6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdm9pZCAwIT09Yj8oY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseU1hdHJpY2VzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5TWF0cmljZXMoYSxiKSk6CnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLGEpfSxwcmVtdWx0aXBseTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKGEsdGhpcyl9LG11bHRpcGx5TWF0cmljZXM6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmVsZW1lbnRzLGQ9Yi5lbGVtZW50cyxlPXRoaXMuZWxlbWVudHMsZj1jWzBdLGc9Y1s0XSxoPWNbOF0saz1jWzEyXSxtPWNbMV0sdT1jWzVdLGw9Y1s5XSxuPWNbMTNdLHI9Y1syXSxwPWNbNl0sdD1jWzEwXSx5PWNbMTRdLHg9Y1szXSx2PWNbN10sRz1jWzExXSxjPWNbMTVdLHc9ZFswXSxPPWRbNF0sUz1kWzhdLEU9ZFsxMl0sRj1kWzFdLEM9ZFs1XSxSPWRbOV0sRD1kWzEzXSxCPWRbMl0sST1kWzZdLEg9ZFsxMF0sSj1kWzE0XSxQPWRbM10sSz1kWzddLFc9ZFsxMV0sZD1kWzE1XTtlWzBdPWYqdytnKkYraCpCK2sqUDtlWzRdPWYqTytnKkMraCpJK2sqSztlWzhdPWYqUytnKlIraCpIK2sqVztlWzEyXT1mKkUrZypEK2gqSitrKmQ7ZVsxXT1tKncrdSoKRitsKkIrbipQO2VbNV09bSpPK3UqQytsKkkrbipLO2VbOV09bSpTK3UqUitsKkgrbipXO2VbMTNdPW0qRSt1KkQrbCpKK24qZDtlWzJdPXIqdytwKkYrdCpCK3kqUDtlWzZdPXIqTytwKkMrdCpJK3kqSztlWzEwXT1yKlMrcCpSK3QqSCt5Klc7ZVsxNF09cipFK3AqRCt0KkoreSpkO2VbM109eCp3K3YqRitHKkIrYypQO2VbN109eCpPK3YqQytHKkkrYypLO2VbMTFdPXgqUyt2KlIrRypIK2MqVztlWzE1XT14KkUrdipEK0cqSitjKmQ7cmV0dXJuIHRoaXN9LG11bHRpcGx5U2NhbGFyOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWxlbWVudHM7YlswXSo9YTtiWzRdKj1hO2JbOF0qPWE7YlsxMl0qPWE7YlsxXSo9YTtiWzVdKj1hO2JbOV0qPWE7YlsxM10qPWE7YlsyXSo9YTtiWzZdKj1hO2JbMTBdKj1hO2JbMTRdKj1hO2JbM10qPWE7Yls3XSo9YTtiWzExXSo9YTtiWzE1XSo9YTtyZXR1cm4gdGhpc30sYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiKXtmb3IodmFyIGM9CjAsZD1iLmNvdW50O2M8ZDtjKyspYS54PWIuZ2V0WChjKSxhLnk9Yi5nZXRZKGMpLGEuej1iLmdldFooYyksYS5hcHBseU1hdHJpeDQodGhpcyksYi5zZXRYWVooYyxhLngsYS55LGEueik7cmV0dXJuIGJ9fSgpLGRldGVybWluYW50OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5lbGVtZW50cyxiPWFbMF0sYz1hWzRdLGQ9YVs4XSxlPWFbMTJdLGY9YVsxXSxnPWFbNV0saD1hWzldLGs9YVsxM10sbT1hWzJdLHU9YVs2XSxsPWFbMTBdLG49YVsxNF07cmV0dXJuIGFbM10qKCtlKmgqdS1kKmsqdS1lKmcqbCtjKmsqbCtkKmcqbi1jKmgqbikrYVs3XSooK2IqaCpuLWIqaypsK2UqZipsLWQqZipuK2QqayptLWUqaCptKSthWzExXSooK2Iqayp1LWIqZypuLWUqZip1K2MqZipuK2UqZyptLWMqayptKSthWzE1XSooLWQqZyptLWIqaCp1K2IqZypsK2QqZip1LWMqZipsK2MqaCptKX0sdHJhbnNwb3NlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5lbGVtZW50cyxiO2I9YVsxXTthWzFdPWFbNF07YVs0XT0KYjtiPWFbMl07YVsyXT1hWzhdO2FbOF09YjtiPWFbNl07YVs2XT1hWzldO2FbOV09YjtiPWFbM107YVszXT1hWzEyXTthWzEyXT1iO2I9YVs3XTthWzddPWFbMTNdO2FbMTNdPWI7Yj1hWzExXTthWzExXT1hWzE0XTthWzE0XT1iO3JldHVybiB0aGlzfSxzZXRQb3NpdGlvbjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmVsZW1lbnRzO2JbMTJdPWEueDtiWzEzXT1hLnk7YlsxNF09YS56O3JldHVybiB0aGlzfSxnZXRJbnZlcnNlOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5lbGVtZW50cyxkPWEuZWxlbWVudHMsZT1kWzBdLGY9ZFsxXSxnPWRbMl0saD1kWzNdLGs9ZFs0XSxtPWRbNV0sbD1kWzZdLHE9ZFs3XSxuPWRbOF0scj1kWzldLHA9ZFsxMF0sdD1kWzExXSx5PWRbMTJdLHg9ZFsxM10sdj1kWzE0XSxkPWRbMTVdLEc9cip2KnEteCpwKnEreCpsKnQtbSp2KnQtcipsKmQrbSpwKmQsdz15KnAqcS1uKnYqcS15KmwqdCtrKnYqdCtuKmwqZC1rKnAqZCxPPW4qeCpxLXkqcipxK3kqbSp0LQprKngqdC1uKm0qZCtrKnIqZCxTPXkqcipsLW4qeCpsLXkqbSpwK2sqeCpwK24qbSp2LWsqcip2LEU9ZSpHK2YqdytnKk8raCpTO2lmKDA9PT1FKXtpZighMD09PWIpdGhyb3cgRXJyb3IoIlRIUkVFLk1hdHJpeDQuZ2V0SW52ZXJzZSgpOiBjYW4ndCBpbnZlcnQgbWF0cml4LCBkZXRlcm1pbmFudCBpcyAwIik7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0LmdldEludmVyc2UoKTogY2FuJ3QgaW52ZXJ0IG1hdHJpeCwgZGV0ZXJtaW5hbnQgaXMgMCIpO3JldHVybiB0aGlzLmlkZW50aXR5KCl9RT0xL0U7Y1swXT1HKkU7Y1sxXT0oeCpwKmgtcip2KmgteCpnKnQrZip2KnQrcipnKmQtZipwKmQpKkU7Y1syXT0obSp2KmgteCpsKmgreCpnKnEtZip2KnEtbSpnKmQrZipsKmQpKkU7Y1szXT0ocipsKmgtbSpwKmgtcipnKnErZipwKnErbSpnKnQtZipsKnQpKkU7Y1s0XT13KkU7Y1s1XT0obip2KmgteSpwKmgreSpnKnQtZSp2KnQtbipnKmQrZSpwKmQpKkU7Y1s2XT0oeSpsKmgtayp2KmgtCnkqZypxK2UqdipxK2sqZypkLWUqbCpkKSpFO2NbN109KGsqcCpoLW4qbCpoK24qZypxLWUqcCpxLWsqZyp0K2UqbCp0KSpFO2NbOF09TypFO2NbOV09KHkqcipoLW4qeCpoLXkqZip0K2UqeCp0K24qZipkLWUqcipkKSpFO2NbMTBdPShrKngqaC15Km0qaCt5KmYqcS1lKngqcS1rKmYqZCtlKm0qZCkqRTtjWzExXT0obiptKmgtaypyKmgtbipmKnErZSpyKnEraypmKnQtZSptKnQpKkU7Y1sxMl09UypFO2NbMTNdPShuKngqZy15KnIqZyt5KmYqcC1lKngqcC1uKmYqditlKnIqdikqRTtjWzE0XT0oeSptKmctayp4KmcteSpmKmwrZSp4KmwraypmKnYtZSptKnYpKkU7Y1sxNV09KGsqcipnLW4qbSpnK24qZipsLWUqcipsLWsqZipwK2UqbSpwKSpFO3JldHVybiB0aGlzfSxzY2FsZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmVsZW1lbnRzLGM9YS54LGQ9YS55O2E9YS56O2JbMF0qPWM7Yls0XSo9ZDtiWzhdKj1hO2JbMV0qPWM7Yls1XSo9ZDtiWzldKj1hO2JbMl0qPWM7Yls2XSo9ZDtiWzEwXSo9CmE7YlszXSo9YztiWzddKj1kO2JbMTFdKj1hO3JldHVybiB0aGlzfSxnZXRNYXhTY2FsZU9uQXhpczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZWxlbWVudHM7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heChhWzBdKmFbMF0rYVsxXSphWzFdK2FbMl0qYVsyXSxhWzRdKmFbNF0rYVs1XSphWzVdK2FbNl0qYVs2XSxhWzhdKmFbOF0rYVs5XSphWzldK2FbMTBdKmFbMTBdKSl9LG1ha2VUcmFuc2xhdGlvbjpmdW5jdGlvbihhLGIsYyl7dGhpcy5zZXQoMSwwLDAsYSwwLDEsMCxiLDAsMCwxLGMsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LG1ha2VSb3RhdGlvblg6ZnVuY3Rpb24oYSl7dmFyIGI9TWF0aC5jb3MoYSk7YT1NYXRoLnNpbihhKTt0aGlzLnNldCgxLDAsMCwwLDAsYiwtYSwwLDAsYSxiLDAsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LG1ha2VSb3RhdGlvblk6ZnVuY3Rpb24oYSl7dmFyIGI9TWF0aC5jb3MoYSk7YT1NYXRoLnNpbihhKTt0aGlzLnNldChiLDAsYSwwLDAsMSwwLDAsLWEsMCxiLAowLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlUm90YXRpb25aOmZ1bmN0aW9uKGEpe3ZhciBiPU1hdGguY29zKGEpO2E9TWF0aC5zaW4oYSk7dGhpcy5zZXQoYiwtYSwwLDAsYSxiLDAsMCwwLDAsMSwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlUm90YXRpb25BeGlzOmZ1bmN0aW9uKGEsYil7dmFyIGM9TWF0aC5jb3MoYiksZD1NYXRoLnNpbihiKSxlPTEtYyxmPWEueCxnPWEueSxoPWEueixrPWUqZixtPWUqZzt0aGlzLnNldChrKmYrYyxrKmctZCpoLGsqaCtkKmcsMCxrKmcrZCpoLG0qZytjLG0qaC1kKmYsMCxrKmgtZCpnLG0qaCtkKmYsZSpoKmgrYywwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlU2NhbGU6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuc2V0KGEsMCwwLDAsMCxiLDAsMCwwLDAsYywwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlU2hlYXI6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuc2V0KDEsYixjLDAsYSwxLGMsMCxhLGIsMSwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSwKY29tcG9zZTpmdW5jdGlvbihhLGIsYyl7dGhpcy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihiKTt0aGlzLnNjYWxlKGMpO3RoaXMuc2V0UG9zaXRpb24oYSk7cmV0dXJuIHRoaXN9LGRlY29tcG9zZTpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGMsZCxlKXt2YXIgZj10aGlzLmVsZW1lbnRzLGc9YS5zZXQoZlswXSxmWzFdLGZbMl0pLmxlbmd0aCgpLGg9YS5zZXQoZls0XSxmWzVdLGZbNl0pLmxlbmd0aCgpLGs9YS5zZXQoZls4XSxmWzldLGZbMTBdKS5sZW5ndGgoKTswPnRoaXMuZGV0ZXJtaW5hbnQoKSYmKGc9LWcpO2MueD1mWzEyXTtjLnk9ZlsxM107Yy56PWZbMTRdO2IuY29weSh0aGlzKTtjPTEvZzt2YXIgZj0xL2gsbT0xL2s7Yi5lbGVtZW50c1swXSo9YztiLmVsZW1lbnRzWzFdKj1jO2IuZWxlbWVudHNbMl0qPWM7Yi5lbGVtZW50c1s0XSo9ZjtiLmVsZW1lbnRzWzVdKj1mO2IuZWxlbWVudHNbNl0qPWY7Yi5lbGVtZW50c1s4XSo9Cm07Yi5lbGVtZW50c1s5XSo9bTtiLmVsZW1lbnRzWzEwXSo9bTtkLnNldEZyb21Sb3RhdGlvbk1hdHJpeChiKTtlLng9ZztlLnk9aDtlLno9aztyZXR1cm4gdGhpc319KCksbWFrZVBlcnNwZWN0aXZlOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2b2lkIDA9PT1mJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUGVyc3BlY3RpdmUoKSBoYXMgYmVlbiByZWRlZmluZWQgYW5kIGhhcyBhIG5ldyBzaWduYXR1cmUuIFBsZWFzZSBjaGVjayB0aGUgZG9jcy4iKTt2YXIgZz10aGlzLmVsZW1lbnRzO2dbMF09MiplLyhiLWEpO2dbNF09MDtnWzhdPShiK2EpLyhiLWEpO2dbMTJdPTA7Z1sxXT0wO2dbNV09MiplLyhjLWQpO2dbOV09KGMrZCkvKGMtZCk7Z1sxM109MDtnWzJdPTA7Z1s2XT0wO2dbMTBdPS0oZitlKS8oZi1lKTtnWzE0XT0tMipmKmUvKGYtZSk7Z1szXT0wO2dbN109MDtnWzExXT0tMTtnWzE1XT0wO3JldHVybiB0aGlzfSxtYWtlT3J0aG9ncmFwaGljOmZ1bmN0aW9uKGEsCmIsYyxkLGUsZil7dmFyIGc9dGhpcy5lbGVtZW50cyxoPTEvKGItYSksaz0xLyhjLWQpLG09MS8oZi1lKTtnWzBdPTIqaDtnWzRdPTA7Z1s4XT0wO2dbMTJdPS0oKGIrYSkqaCk7Z1sxXT0wO2dbNV09MiprO2dbOV09MDtnWzEzXT0tKChjK2QpKmspO2dbMl09MDtnWzZdPTA7Z1sxMF09LTIqbTtnWzE0XT0tKChmK2UpKm0pO2dbM109MDtnWzddPTA7Z1sxMV09MDtnWzE1XT0xO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbGVtZW50czthPWEuZWxlbWVudHM7Zm9yKHZhciBjPTA7MTY+YztjKyspaWYoYltjXSE9PWFbY10pcmV0dXJuITE7cmV0dXJuITB9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO2Zvcih2YXIgYz0wOzE2PmM7YysrKXRoaXMuZWxlbWVudHNbY109YVtjK2JdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YSYmKGE9W10pO3ZvaWQgMD09PWImJihiPTApO3ZhciBjPXRoaXMuZWxlbWVudHM7CmFbYl09Y1swXTthW2IrMV09Y1sxXTthW2IrMl09Y1syXTthW2IrM109Y1szXTthW2IrNF09Y1s0XTthW2IrNV09Y1s1XTthW2IrNl09Y1s2XTthW2IrN109Y1s3XTthW2IrOF09Y1s4XTthW2IrOV09Y1s5XTthW2IrMTBdPWNbMTBdO2FbYisxMV09Y1sxMV07YVtiKzEyXT1jWzEyXTthW2IrMTNdPWNbMTNdO2FbYisxNF09Y1sxNF07YVtiKzE1XT1jWzE1XTtyZXR1cm4gYX19KTtlYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShYLnByb3RvdHlwZSk7ZWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWViO2ViLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO1phLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFgucHJvdG90eXBlKTtaYS5wcm90b3R5cGUuY29uc3RydWN0b3I9WmE7WmEucHJvdG90eXBlLmlzQ3ViZVRleHR1cmU9ITA7T2JqZWN0LmRlZmluZVByb3BlcnR5KFphLnByb3RvdHlwZSwiaW1hZ2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW1hZ2V9LHNldDpmdW5jdGlvbihhKXt0aGlzLmltYWdlPQphfX0pO3ZhciBEZT1uZXcgWCxFZT1uZXcgWmEseWU9W10sQWU9W10sQ2U9bmV3IEZsb2F0MzJBcnJheSgxNiksQmU9bmV3IEZsb2F0MzJBcnJheSg5KTtJZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9dGhpcy5zZXEsZD0wLGU9Yy5sZW5ndGg7ZCE9PWU7KytkKXt2YXIgZj1jW2RdO2Yuc2V0VmFsdWUoYSxiW2YuaWRdKX19O3ZhciBRZD0vKFtcd1xkX10rKShcXSk/KFxbfFwuKT8vZztmYi5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oYSxiLGMpe2I9dGhpcy5tYXBbYl07dm9pZCAwIT09YiYmYi5zZXRWYWx1ZShhLGMsdGhpcy5yZW5kZXJlcil9O2ZiLnByb3RvdHlwZS5zZXRPcHRpb25hbD1mdW5jdGlvbihhLGIsYyl7Yj1iW2NdO3ZvaWQgMCE9PWImJnRoaXMuc2V0VmFsdWUoYSxjLGIpfTtmYi51cGxvYWQ9ZnVuY3Rpb24oYSxiLGMsZCl7Zm9yKHZhciBlPTAsZj1iLmxlbmd0aDtlIT09ZjsrK2Upe3ZhciBnPWJbZV0saD1jW2cuaWRdOyExIT09CmgubmVlZHNVcGRhdGUmJmcuc2V0VmFsdWUoYSxoLnZhbHVlLGQpfX07ZmIuc2VxV2l0aFZhbHVlPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdLGQ9MCxlPWEubGVuZ3RoO2QhPT1lOysrZCl7dmFyIGY9YVtkXTtmLmlkIGluIGImJmMucHVzaChmKX1yZXR1cm4gY307dmFyIGtnPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSwKZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLApmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MiwKbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LApuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsCnNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtPYmplY3QuYXNzaWduKEgucHJvdG90eXBlLHtpc0NvbG9yOiEwLHI6MSxnOjEsYjoxLHNldDpmdW5jdGlvbihhKXthJiZhLmlzQ29sb3I/dGhpcy5jb3B5KGEpOiJudW1iZXIiPT09dHlwZW9mIGE/dGhpcy5zZXRIZXgoYSk6InN0cmluZyI9PT10eXBlb2YgYSYmdGhpcy5zZXRTdHlsZShhKTtyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMuYj10aGlzLmc9dGhpcy5yPQphO3JldHVybiB0aGlzfSxzZXRIZXg6ZnVuY3Rpb24oYSl7YT1NYXRoLmZsb29yKGEpO3RoaXMucj0oYT4+MTYmMjU1KS8yNTU7dGhpcy5nPShhPj44JjI1NSkvMjU1O3RoaXMuYj0oYSYyNTUpLzI1NTtyZXR1cm4gdGhpc30sc2V0UkdCOmZ1bmN0aW9uKGEsYixjKXt0aGlzLnI9YTt0aGlzLmc9Yjt0aGlzLmI9YztyZXR1cm4gdGhpc30sc2V0SFNMOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGMsZCl7MD5kJiYoZCs9MSk7MTxkJiYtLWQ7cmV0dXJuIGQ8MS82P2ErNiooYy1hKSpkOi41PmQ/YzpkPDIvMz9hKzYqKGMtYSkqKDIvMy1kKTphfXJldHVybiBmdW5jdGlvbihiLGMsZCl7Yj1ZLmV1Y2xpZGVhbk1vZHVsbyhiLDEpO2M9WS5jbGFtcChjLDAsMSk7ZD1ZLmNsYW1wKGQsMCwxKTswPT09Yz90aGlzLnI9dGhpcy5nPXRoaXMuYj1kOihjPS41Pj1kP2QqKDErYyk6ZCtjLWQqYyxkPTIqZC1jLHRoaXMucj1hKGQsYyxiKzEvMyksdGhpcy5nPWEoZCxjLGIpLHRoaXMuYj1hKGQsYyxiLTEvCjMpKTtyZXR1cm4gdGhpc319KCksc2V0U3R5bGU6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXt2b2lkIDAhPT1iJiYxPnBhcnNlRmxvYXQoYikmJmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IEFscGhhIGNvbXBvbmVudCBvZiAiK2ErIiB3aWxsIGJlIGlnbm9yZWQuIil9dmFyIGM7aWYoYz0vXigoPzpyZ2J8aHNsKWE/KVwoXHMqKFteXCldKilcKS8uZXhlYyhhKSl7dmFyIGQ9Y1syXTtzd2l0Y2goY1sxXSl7Y2FzZSAicmdiIjpjYXNlICJyZ2JhIjppZihjPS9eKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccyooLFxzKihbMC05XSpcLj9bMC05XSspXHMqKT8kLy5leGVjKGQpKXJldHVybiB0aGlzLnI9TWF0aC5taW4oMjU1LHBhcnNlSW50KGNbMV0sMTApKS8yNTUsdGhpcy5nPU1hdGgubWluKDI1NSxwYXJzZUludChjWzJdLDEwKSkvMjU1LHRoaXMuYj1NYXRoLm1pbigyNTUscGFyc2VJbnQoY1szXSwxMCkpLzI1NSxiKGNbNV0pLHRoaXM7aWYoYz0vXihcZCspXCVccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKCxccyooWzAtOV0qXC4/WzAtOV0rKVxzKik/JC8uZXhlYyhkKSlyZXR1cm4gdGhpcy5yPQpNYXRoLm1pbigxMDAscGFyc2VJbnQoY1sxXSwxMCkpLzEwMCx0aGlzLmc9TWF0aC5taW4oMTAwLHBhcnNlSW50KGNbMl0sMTApKS8xMDAsdGhpcy5iPU1hdGgubWluKDEwMCxwYXJzZUludChjWzNdLDEwKSkvMTAwLGIoY1s1XSksdGhpczticmVhaztjYXNlICJoc2wiOmNhc2UgImhzbGEiOmlmKGM9L14oWzAtOV0qXC4/WzAtOV0rKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooLFxzKihbMC05XSpcLj9bMC05XSspXHMqKT8kLy5leGVjKGQpKXt2YXIgZD1wYXJzZUZsb2F0KGNbMV0pLzM2MCxlPXBhcnNlSW50KGNbMl0sMTApLzEwMCxmPXBhcnNlSW50KGNbM10sMTApLzEwMDtiKGNbNV0pO3JldHVybiB0aGlzLnNldEhTTChkLGUsZil9fX1lbHNlIGlmKGM9L15cIyhbQS1GYS1mMC05XSspJC8uZXhlYyhhKSl7Yz1jWzFdO2Q9Yy5sZW5ndGg7aWYoMz09PWQpcmV0dXJuIHRoaXMucj1wYXJzZUludChjLmNoYXJBdCgwKStjLmNoYXJBdCgwKSwxNikvMjU1LHRoaXMuZz1wYXJzZUludChjLmNoYXJBdCgxKSsKYy5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoYy5jaGFyQXQoMikrYy5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKDY9PT1kKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoYy5jaGFyQXQoMCkrYy5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoYy5jaGFyQXQoMikrYy5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoYy5jaGFyQXQoNCkrYy5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfWEmJjA8YS5sZW5ndGgmJihjPWtnW2FdLHZvaWQgMCE9PWM/dGhpcy5zZXRIZXgoYyk6Y29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogVW5rbm93biBjb2xvciAiK2EpKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5yLHRoaXMuZyx0aGlzLmIpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMucj1hLnI7dGhpcy5nPWEuZzt0aGlzLmI9YS5iO3JldHVybiB0aGlzfSxjb3B5R2FtbWFUb0xpbmVhcjpmdW5jdGlvbihhLApiKXt2b2lkIDA9PT1iJiYoYj0yKTt0aGlzLnI9TWF0aC5wb3coYS5yLGIpO3RoaXMuZz1NYXRoLnBvdyhhLmcsYik7dGhpcy5iPU1hdGgucG93KGEuYixiKTtyZXR1cm4gdGhpc30sY29weUxpbmVhclRvR2FtbWE6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0yKTt2YXIgYz0wPGI/MS9iOjE7dGhpcy5yPU1hdGgucG93KGEucixjKTt0aGlzLmc9TWF0aC5wb3coYS5nLGMpO3RoaXMuYj1NYXRoLnBvdyhhLmIsYyk7cmV0dXJuIHRoaXN9LGNvbnZlcnRHYW1tYVRvTGluZWFyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yLGI9dGhpcy5nLGM9dGhpcy5iO3RoaXMucj1hKmE7dGhpcy5nPWIqYjt0aGlzLmI9YypjO3JldHVybiB0aGlzfSxjb252ZXJ0TGluZWFyVG9HYW1tYTpmdW5jdGlvbigpe3RoaXMucj1NYXRoLnNxcnQodGhpcy5yKTt0aGlzLmc9TWF0aC5zcXJ0KHRoaXMuZyk7dGhpcy5iPU1hdGguc3FydCh0aGlzLmIpO3JldHVybiB0aGlzfSxnZXRIZXg6ZnVuY3Rpb24oKXtyZXR1cm4gMjU1Kgp0aGlzLnI8PDE2XjI1NSp0aGlzLmc8PDheMjU1KnRoaXMuYjw8MH0sZ2V0SGV4U3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuKCIwMDAwMDAiK3RoaXMuZ2V0SGV4KCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNil9LGdldEhTTDpmdW5jdGlvbihhKXthPWF8fHtoOjAsczowLGw6MH07dmFyIGI9dGhpcy5yLGM9dGhpcy5nLGQ9dGhpcy5iLGU9TWF0aC5tYXgoYixjLGQpLGY9TWF0aC5taW4oYixjLGQpLGcsaD0oZitlKS8yO2lmKGY9PT1lKWY9Zz0wO2Vsc2V7dmFyIGs9ZS1mLGY9LjU+PWg/ay8oZStmKTprLygyLWUtZik7c3dpdGNoKGUpe2Nhc2UgYjpnPShjLWQpL2srKGM8ZD82OjApO2JyZWFrO2Nhc2UgYzpnPShkLWIpL2srMjticmVhaztjYXNlIGQ6Zz0oYi1jKS9rKzR9Zy89Nn1hLmg9ZzthLnM9ZjthLmw9aDtyZXR1cm4gYX0sZ2V0U3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4icmdiKCIrKDI1NSp0aGlzLnJ8MCkrIiwiKygyNTUqdGhpcy5nfDApKyIsIisoMjU1KnRoaXMuYnwwKSsiKSJ9LApvZmZzZXRIU0w6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuZ2V0SFNMKCk7ZC5oKz1hO2Qucys9YjtkLmwrPWM7dGhpcy5zZXRIU0woZC5oLGQucyxkLmwpO3JldHVybiB0aGlzfSxhZGQ6ZnVuY3Rpb24oYSl7dGhpcy5yKz1hLnI7dGhpcy5nKz1hLmc7dGhpcy5iKz1hLmI7cmV0dXJuIHRoaXN9LGFkZENvbG9yczpmdW5jdGlvbihhLGIpe3RoaXMucj1hLnIrYi5yO3RoaXMuZz1hLmcrYi5nO3RoaXMuYj1hLmIrYi5iO3JldHVybiB0aGlzfSxhZGRTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy5yKz1hO3RoaXMuZys9YTt0aGlzLmIrPWE7cmV0dXJuIHRoaXN9LHN1YjpmdW5jdGlvbihhKXt0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItYS5yKTt0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctYS5nKTt0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItYS5iKTtyZXR1cm4gdGhpc30sbXVsdGlwbHk6ZnVuY3Rpb24oYSl7dGhpcy5yKj1hLnI7dGhpcy5nKj1hLmc7dGhpcy5iKj1hLmI7cmV0dXJuIHRoaXN9LAptdWx0aXBseVNjYWxhcjpmdW5jdGlvbihhKXt0aGlzLnIqPWE7dGhpcy5nKj1hO3RoaXMuYio9YTtyZXR1cm4gdGhpc30sbGVycDpmdW5jdGlvbihhLGIpe3RoaXMucis9KGEuci10aGlzLnIpKmI7dGhpcy5nKz0oYS5nLXRoaXMuZykqYjt0aGlzLmIrPShhLmItdGhpcy5iKSpiO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucj09PXRoaXMuciYmYS5nPT09dGhpcy5nJiZhLmI9PT10aGlzLmJ9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO3RoaXMucj1hW2JdO3RoaXMuZz1hW2IrMV07dGhpcy5iPWFbYisyXTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWEmJihhPVtdKTt2b2lkIDA9PT1iJiYoYj0wKTthW2JdPXRoaXMucjthW2IrMV09dGhpcy5nO2FbYisyXT10aGlzLmI7cmV0dXJuIGF9LHRvSlNPTjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEhleCgpfX0pO3ZhciBWPXtjb21tb246e2RpZmZ1c2U6e3ZhbHVlOm5ldyBIKDE1NjU4NzM0KX0sCm9wYWNpdHk6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sb2Zmc2V0UmVwZWF0Ont2YWx1ZTpuZXcgZ2EoMCwwLDEsMSl9LHNwZWN1bGFyTWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxyZWZyYWN0aW9uUmF0aW86e3ZhbHVlOi45OH19LGFvbWFwOnthb01hcDp7dmFsdWU6bnVsbH0sYW9NYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxsaWdodG1hcDp7bGlnaHRNYXA6e3ZhbHVlOm51bGx9LGxpZ2h0TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sZW1pc3NpdmVtYXA6e2VtaXNzaXZlTWFwOnt2YWx1ZTpudWxsfX0sYnVtcG1hcDp7YnVtcE1hcDp7dmFsdWU6bnVsbH0sYnVtcFNjYWxlOnt2YWx1ZToxfX0sbm9ybWFsbWFwOntub3JtYWxNYXA6e3ZhbHVlOm51bGx9LG5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgRCgxLDEpfX0sZGlzcGxhY2VtZW50bWFwOntkaXNwbGFjZW1lbnRNYXA6e3ZhbHVlOm51bGx9LApkaXNwbGFjZW1lbnRTY2FsZTp7dmFsdWU6MX0sZGlzcGxhY2VtZW50Qmlhczp7dmFsdWU6MH19LHJvdWdobmVzc21hcDp7cm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfX0sbWV0YWxuZXNzbWFwOnttZXRhbG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxncmFkaWVudG1hcDp7Z3JhZGllbnRNYXA6e3ZhbHVlOm51bGx9fSxmb2c6e2ZvZ0RlbnNpdHk6e3ZhbHVlOjIuNUUtNH0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyRTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgSCgxNjc3NzIxNSl9fSxsaWdodHM6e2FtYmllbnRMaWdodENvbG9yOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxjb2xvcjp7fSxzaGFkb3c6e30sc2hhZG93Qmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSwKc3BvdExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGlyZWN0aW9uOnt9LGRpc3RhbmNlOnt9LGNvbmVDb3M6e30scGVudW1icmFDb3M6e30sZGVjYXk6e30sc2hhZG93Ont9LHNoYWRvd0JpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e319fSxzcG90U2hhZG93TWFwOnt2YWx1ZTpbXX0sc3BvdFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHBvaW50TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkZWNheTp7fSxkaXN0YW5jZTp7fSxzaGFkb3c6e30sc2hhZG93Qmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10sCnByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LHdpZHRoOnt9LGhlaWdodDp7fX19fSxwb2ludHM6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBIKDE1NjU4NzM0KX0sb3BhY2l0eTp7dmFsdWU6MX0sc2l6ZTp7dmFsdWU6MX0sc2NhbGU6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sb2Zmc2V0UmVwZWF0Ont2YWx1ZTpuZXcgZ2EoMCwwLDEsMSl9fX0sSGE9e21lcmdlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj17fSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuY2xvbmUoYVtjXSksZTtmb3IoZSBpbiBkKWJbZV09ZFtlXX1yZXR1cm4gYn0sY2xvbmU6ZnVuY3Rpb24oYSl7dmFyIGI9e30sYztmb3IoYyBpbiBhKXtiW2NdPXt9O2Zvcih2YXIgZCBpbiBhW2NdKXt2YXIgZT1hW2NdW2RdO2UmJihlLmlzQ29sb3J8fGUuaXNNYXRyaXgzfHxlLmlzTWF0cml4NHx8ZS5pc1ZlY3RvcjJ8fGUuaXNWZWN0b3IzfHxlLmlzVmVjdG9yNHx8ZS5pc1RleHR1cmUpP2JbY11bZF09ZS5jbG9uZSgpOgpBcnJheS5pc0FycmF5KGUpP2JbY11bZF09ZS5zbGljZSgpOmJbY11bZF09ZX19cmV0dXJuIGJ9fSxVPXthbHBoYW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xuI2VuZGlmXG4iLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XG4jZW5kaWZcbiIsYWxwaGF0ZXN0X2ZyYWdtZW50OiIjaWZkZWYgQUxQSEFURVNUXG5cdGlmICggZGlmZnVzZUNvbG9yLmEgPCBBTFBIQVRFU1QgKSBkaXNjYXJkO1xuI2VuZGlmXG4iLGFvbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGFtYmllbnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUEhZU0lDQUwgKVxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuI2VuZGlmXG4iLAphb21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwO1xuXHR1bmlmb3JtIGZsb2F0IGFvTWFwSW50ZW5zaXR5O1xuI2VuZGlmIixiZWdpbl92ZXJ0ZXg6IlxudmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9uICk7XG4iLGJlZ2lubm9ybWFsX3ZlcnRleDoiXG52ZWMzIG9iamVjdE5vcm1hbCA9IHZlYzMoIG5vcm1hbCApO1xuIixic2RmczoiZmxvYXQgcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7XG5cdGlmKCBkZWNheUV4cG9uZW50ID4gMC4wICkge1xuI2lmIGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcblx0XHRmbG9hdCBkaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0YW5jZSwgZGVjYXlFeHBvbmVudCApLCAwLjAxICk7XG5cdFx0ZmxvYXQgbWF4RGlzdGFuY2VDdXRvZmZGYWN0b3IgPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApO1xuXHRcdHJldHVybiBkaXN0YW5jZUZhbGxvZmYgKiBtYXhEaXN0YW5jZUN1dG9mZkZhY3RvcjtcbiNlbHNlXG5cdFx0cmV0dXJuIHBvdyggc2F0dXJhdGUoIC1saWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApO1xuI2VuZGlmXG5cdH1cblx0cmV0dXJuIDEuMDtcbn1cbnZlYzMgQlJERl9EaWZmdXNlX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcbn1cbnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IGRvdExIICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtNS41NTQ3MyAqIGRvdExIIC0gNi45ODMxNiApICogZG90TEggKTtcblx0cmV0dXJuICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogZnJlc25lbCArIHNwZWN1bGFyQ29sb3I7XG59XG5mbG9hdCBHX0dHWF9TbWl0aCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5MLCBjb25zdCBpbiBmbG9hdCBkb3ROViApIHtcblx0ZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApO1xuXHRmbG9hdCBnbCA9IGRvdE5MICsgc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdGZsb2F0IGd2ID0gZG90TlYgKyBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0cmV0dXJuIDEuMCAvICggZ2wgKiBndiApO1xufVxuZmxvYXQgR19HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGd2ID0gZG90TkwgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0ZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApO1xuXHRyZXR1cm4gMC41IC8gbWF4KCBndiArIGdsLCBFUFNJTE9OICk7XG59XG5mbG9hdCBEX0dHWCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGRlbm9tID0gcG93MiggZG90TkggKSAqICggYTIgLSAxLjAgKSArIDEuMDtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9tICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfR0dYKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGluY2lkZW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uICsgZ2VvbWV0cnkudmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24gKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90TEggPSBzYXR1cmF0ZSggZG90KCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiwgaGFsZkRpciApICk7XG5cdHZlYzMgRiA9IEZfU2NobGljayggc3BlY3VsYXJDb2xvciwgZG90TEggKTtcblx0ZmxvYXQgRyA9IEdfR0dYX1NtaXRoQ29ycmVsYXRlZCggYWxwaGEsIGRvdE5MLCBkb3ROViApO1xuXHRmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbnZlYzIgTFRDX1V2KCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRjb25zdCBmbG9hdCBMVVRfU0laRSAgPSA2NC4wO1xuXHRjb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTtcblx0Y29uc3QgZmxvYXQgTFVUX0JJQVMgID0gMC41IC8gTFVUX1NJWkU7XG5cdGZsb2F0IHRoZXRhID0gYWNvcyggZG90KCBOLCBWICkgKTtcblx0dmVjMiB1diA9IHZlYzIoXG5cdFx0c3FydCggc2F0dXJhdGUoIHJvdWdobmVzcyApICksXG5cdFx0c2F0dXJhdGUoIHRoZXRhIC8gKCAwLjUgKiBQSSApICkgKTtcblx0dXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xuXHRyZXR1cm4gdXY7XG59XG5mbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHtcblx0ZmxvYXQgbCA9IGxlbmd0aCggZiApO1xuXHRyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAoIGwgKyAxLjAgKSwgMC4wICk7XG59XG52ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHtcblx0ZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7XG5cdGZsb2F0IHkgPSBhYnMoIHggKTtcblx0ZmxvYXQgYSA9IDAuODYyNjcgKyAoMC40OTc4OCArIDAuMDE0MzYgKiB5ICkgKiB5O1xuXHRmbG9hdCBiID0gMy40NTA2OCArICg0LjE4ODE0ICsgeSkgKiB5O1xuXHRmbG9hdCB2ID0gYSAvIGI7XG5cdGZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKHggPiAwLjApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCAxLjAgLSB4ICogeCApIC0gdjtcblx0cmV0dXJuIGNyb3NzKCB2MSwgdjIgKSAqIHRoZXRhX3NpbnRoZXRhO1xufVxudmVjMyBMVENfRXZhbHVhdGUoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiB2ZWMzIFAsIGNvbnN0IGluIG1hdDMgbUludiwgY29uc3QgaW4gdmVjMyByZWN0Q29vcmRzWyA0IF0gKSB7XG5cdHZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgdjIgPSByZWN0Q29vcmRzWyAzIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgbGlnaHROb3JtYWwgPSBjcm9zcyggdjEsIHYyICk7XG5cdGlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7XG5cdHZlYzMgVDEsIFQyO1xuXHRUMSA9IG5vcm1hbGl6ZSggViAtIE4gKiBkb3QoIFYsIE4gKSApO1xuXHRUMiA9IC0gY3Jvc3MoIE4sIFQxICk7XG5cdG1hdDMgbWF0ID0gbUludiAqIHRyYW5zcG9zZSggbWF0MyggVDEsIFQyLCBOICkgKTtcblx0dmVjMyBjb29yZHNbIDQgXTtcblx0Y29vcmRzWyAwIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDAgXSAtIFAgKTtcblx0Y29vcmRzWyAxIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDEgXSAtIFAgKTtcblx0Y29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTtcblx0Y29vcmRzWyAzIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDMgXSAtIFAgKTtcblx0Y29vcmRzWyAwIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMCBdICk7XG5cdGNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApO1xuXHRjb29yZHNbIDIgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAyIF0gKTtcblx0Y29vcmRzWyAzIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMyBdICk7XG5cdHZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAwIF0sIGNvb3Jkc1sgMSBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDEgXSwgY29vcmRzWyAyIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAzIF0sIGNvb3Jkc1sgMCBdICk7XG5cdHZlYzMgcmVzdWx0ID0gdmVjMyggTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICkgKTtcblx0cmV0dXJuIHJlc3VsdDtcbn1cbnZlYzMgQlJERl9TcGVjdWxhcl9HR1hfRW52aXJvbm1lbnQoIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdGNvbnN0IHZlYzQgYzAgPSB2ZWM0KCAtIDEsIC0gMC4wMjc1LCAtIDAuNTcyLCAwLjAyMiApO1xuXHRjb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTtcblx0dmVjNCByID0gcm91Z2huZXNzICogYzAgKyBjMTtcblx0ZmxvYXQgYTAwNCA9IG1pbiggci54ICogci54LCBleHAyKCAtIDkuMjggKiBkb3ROViApICkgKiByLnggKyByLnk7XG5cdHZlYzIgQUIgPSB2ZWMyKCAtMS4wNCwgMS4wNCApICogYTAwNCArIHIuenc7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogQUIueCArIEFCLnk7XG59XG5mbG9hdCBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICkge1xuXHRyZXR1cm4gMC4yNTtcbn1cbmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KCBkb3ROSCwgc2hpbmluZXNzICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBpbmNpZGVudExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiArIGdlb21ldHJ5LnZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RMSCA9IHNhdHVyYXRlKCBkb3QoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCBkb3RMSCApO1xuXHRmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApO1xuXHRmbG9hdCBEID0gRF9CbGlublBob25nKCBzaGluaW5lc3MsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBHICogRCApO1xufVxuZmxvYXQgR0dYUm91Z2huZXNzVG9CbGlubkV4cG9uZW50KCBjb25zdCBpbiBmbG9hdCBnZ3hSb3VnaG5lc3MgKSB7XG5cdHJldHVybiAoIDIuMCAvIHBvdzIoIGdneFJvdWdobmVzcyArIDAuMDAwMSApIC0gMi4wICk7XG59XG5mbG9hdCBCbGlubkV4cG9uZW50VG9HR1hSb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IGJsaW5uRXhwb25lbnQgKSB7XG5cdHJldHVybiBzcXJ0KCAyLjAgLyAoIGJsaW5uRXhwb25lbnQgKyAyLjAgKSApO1xufVxuIiwKYnVtcG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0JVTVBNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtcblx0dW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7XG5cdHZlYzIgZEhkeHlfZndkKCkge1xuXHRcdHZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTtcblx0XHR2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7XG5cdFx0ZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54O1xuXHRcdGZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsO1xuXHRcdGZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsO1xuXHRcdHJldHVybiB2ZWMyKCBkQngsIGRCeSApO1xuXHR9XG5cdHZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHkgKSB7XG5cdFx0dmVjMyB2U2lnbWFYID0gZEZkeCggc3VyZl9wb3MgKTtcblx0XHR2ZWMzIHZTaWdtYVkgPSBkRmR5KCBzdXJmX3BvcyApO1xuXHRcdHZlYzMgdk4gPSBzdXJmX25vcm07XG5cdFx0dmVjMyBSMSA9IGNyb3NzKCB2U2lnbWFZLCB2TiApO1xuXHRcdHZlYzMgUjIgPSBjcm9zcyggdk4sIHZTaWdtYVggKTtcblx0XHRmbG9hdCBmRGV0ID0gZG90KCB2U2lnbWFYLCBSMSApO1xuXHRcdHZlYzMgdkdyYWQgPSBzaWduKCBmRGV0ICkgKiAoIGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApO1xuXHRcdHJldHVybiBub3JtYWxpemUoIGFicyggZkRldCApICogc3VyZl9ub3JtIC0gdkdyYWQgKTtcblx0fVxuI2VuZGlmXG4iLApjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQUElOR19QTEFORVM7ICsrIGkgKSB7XG5cdFx0dmVjNCBwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07XG5cdFx0aWYgKCBkb3QoIHZWaWV3UG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApIGRpc2NhcmQ7XG5cdH1cblx0XHRcblx0I2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyA8IE5VTV9DTElQUElOR19QTEFORVNcblx0XHRib29sIGNsaXBwZWQgPSB0cnVlO1xuXHRcdGZvciAoIGludCBpID0gVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpIDwgTlVNX0NMSVBQSU5HX1BMQU5FUzsgKysgaSApIHtcblx0XHRcdHZlYzQgcGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdO1xuXHRcdFx0Y2xpcHBlZCA9ICggZG90KCB2Vmlld1Bvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSAmJiBjbGlwcGVkO1xuXHRcdH1cblx0XHRpZiAoIGNsaXBwZWQgKSBkaXNjYXJkO1xuXHRcblx0I2VuZGlmXG4jZW5kaWZcbiIsCmNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0I2lmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAhIGRlZmluZWQoIFBIT05HIClcblx0XHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcblx0I2VuZGlmXG5cdHVuaWZvcm0gdmVjNCBjbGlwcGluZ1BsYW5lc1sgTlVNX0NMSVBQSU5HX1BMQU5FUyBdO1xuI2VuZGlmXG4iLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwICYmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAhIGRlZmluZWQoIFBIT05HIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiIsY2xpcHBpbmdfcGxhbmVzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwICYmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAhIGRlZmluZWQoIFBIT05HIClcblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWZcbiIsCmNvbG9yX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0NPTE9SXG5cdGRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yO1xuI2VuZGlmIixjb2xvcl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0NPTE9SXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWZcbiIsY29sb3JfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfQ09MT1Jcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfdmVydGV4OiIjaWZkZWYgVVNFX0NPTE9SXG5cdHZDb2xvci54eXogPSBjb2xvci54eXo7XG4jZW5kaWYiLGNvbW1vbjoiI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU5XG4jZGVmaW5lIFBJMiA2LjI4MzE4NTMwNzE4XG4jZGVmaW5lIFBJX0hBTEYgMS41NzA3OTYzMjY3OTQ5XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxOFxuI2RlZmluZSBSRUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0XG4jZGVmaW5lIExPRzIgMS40NDI2OTVcbiNkZWZpbmUgRVBTSUxPTiAxZS02XG4jZGVmaW5lIHNhdHVyYXRlKGEpIGNsYW1wKCBhLCAwLjAsIDEuMCApXG4jZGVmaW5lIHdoaXRlQ29tcGxpbWVudChhKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKVxuZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfVxuZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9XG5mbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9XG5mbG9hdCBhdmVyYWdlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgeyByZXR1cm4gZG90KCBjb2xvciwgdmVjMyggMC4zMzMzICkgKTsgfVxuaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHtcblx0Y29uc3QgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTgsIGIgPSA3OC4yMzMsIGMgPSA0Mzc1OC41NDUzO1xuXHRoaWdocCBmbG9hdCBkdCA9IGRvdCggdXYueHksIHZlYzIoIGEsYiApICksIHNuID0gbW9kKCBkdCwgUEkgKTtcblx0cmV0dXJuIGZyYWN0KHNpbihzbikgKiBjKTtcbn1cbnN0cnVjdCBJbmNpZGVudExpZ2h0IHtcblx0dmVjMyBjb2xvcjtcblx0dmVjMyBkaXJlY3Rpb247XG5cdGJvb2wgdmlzaWJsZTtcbn07XG5zdHJ1Y3QgUmVmbGVjdGVkTGlnaHQge1xuXHR2ZWMzIGRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgZGlyZWN0U3BlY3VsYXI7XG5cdHZlYzMgaW5kaXJlY3REaWZmdXNlO1xuXHR2ZWMzIGluZGlyZWN0U3BlY3VsYXI7XG59O1xuc3RydWN0IEdlb21ldHJpY0NvbnRleHQge1xuXHR2ZWMzIHBvc2l0aW9uO1xuXHR2ZWMzIG5vcm1hbDtcblx0dmVjMyB2aWV3RGlyO1xufTtcbnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xufVxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xufVxudmVjMyBwcm9qZWN0T25QbGFuZShpbiB2ZWMzIHBvaW50LCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0ZmxvYXQgZGlzdGFuY2UgPSBkb3QoIHBsYW5lTm9ybWFsLCBwb2ludCAtIHBvaW50T25QbGFuZSApO1xuXHRyZXR1cm4gLSBkaXN0YW5jZSAqIHBsYW5lTm9ybWFsICsgcG9pbnQ7XG59XG5mbG9hdCBzaWRlT2ZQbGFuZSggaW4gdmVjMyBwb2ludCwgaW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdHJldHVybiBzaWduKCBkb3QoIHBvaW50IC0gcG9pbnRPblBsYW5lLCBwbGFuZU5vcm1hbCApICk7XG59XG52ZWMzIGxpbmVQbGFuZUludGVyc2VjdCggaW4gdmVjMyBwb2ludE9uTGluZSwgaW4gdmVjMyBsaW5lRGlyZWN0aW9uLCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0cmV0dXJuIGxpbmVEaXJlY3Rpb24gKiAoIGRvdCggcGxhbmVOb3JtYWwsIHBvaW50T25QbGFuZSAtIHBvaW50T25MaW5lICkgLyBkb3QoIHBsYW5lTm9ybWFsLCBsaW5lRGlyZWN0aW9uICkgKSArIHBvaW50T25MaW5lO1xufVxubWF0MyB0cmFuc3Bvc2UoIGNvbnN0IGluIG1hdDMgdiApIHtcblx0bWF0MyB0bXA7XG5cdHRtcFswXSA9IHZlYzModlswXS54LCB2WzFdLngsIHZbMl0ueCk7XG5cdHRtcFsxXSA9IHZlYzModlswXS55LCB2WzFdLnksIHZbMl0ueSk7XG5cdHRtcFsyXSA9IHZlYzModlswXS56LCB2WzFdLnosIHZbMl0ueik7XG5cdHJldHVybiB0bXA7XG59XG4iLApjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6IiNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWXG4jZGVmaW5lIGN1YmVVVl90ZXh0dXJlU2l6ZSAoMTAyNC4wKVxuaW50IGdldEZhY2VGcm9tRGlyZWN0aW9uKHZlYzMgZGlyZWN0aW9uKSB7XG5cdHZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKGRpcmVjdGlvbik7XG5cdGludCBmYWNlID0gLTE7XG5cdGlmKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkge1xuXHRcdGlmKGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMCA6IDM7XG5cdFx0ZWxzZVxuXHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMSA6IDQ7XG5cdH1cblx0ZWxzZSB7XG5cdFx0aWYoYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApXG5cdFx0XHRmYWNlID0gZGlyZWN0aW9uLnogPiAwLjAgPyAyIDogNTtcblx0XHRlbHNlXG5cdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxIDogNDtcblx0fVxuXHRyZXR1cm4gZmFjZTtcbn1cbiNkZWZpbmUgY3ViZVVWX21heExvZHMxICAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAxLjApXG4jZGVmaW5lIGN1YmVVVl9yYW5nZUNsYW1wIChleHAyKCg2LjAgLSAxLjApICogMi4wKSlcbnZlYzIgTWlwTGV2ZWxJbmZvKCB2ZWMzIHZlYywgZmxvYXQgcm91Z2huZXNzTGV2ZWwsIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgc2NhbGUgPSBleHAyKGN1YmVVVl9tYXhMb2RzMSAtIHJvdWdobmVzc0xldmVsKTtcblx0ZmxvYXQgZHhSb3VnaG5lc3MgPSBkRmR4KHJvdWdobmVzcyk7XG5cdGZsb2F0IGR5Um91Z2huZXNzID0gZEZkeShyb3VnaG5lc3MpO1xuXHR2ZWMzIGR4ID0gZEZkeCggdmVjICogc2NhbGUgKiBkeFJvdWdobmVzcyApO1xuXHR2ZWMzIGR5ID0gZEZkeSggdmVjICogc2NhbGUgKiBkeVJvdWdobmVzcyApO1xuXHRmbG9hdCBkID0gbWF4KCBkb3QoIGR4LCBkeCApLCBkb3QoIGR5LCBkeSApICk7XG5cdGQgPSBjbGFtcChkLCAxLjAsIGN1YmVVVl9yYW5nZUNsYW1wKTtcblx0ZmxvYXQgbWlwTGV2ZWwgPSAwLjUgKiBsb2cyKGQpO1xuXHRyZXR1cm4gdmVjMihmbG9vcihtaXBMZXZlbCksIGZyYWN0KG1pcExldmVsKSk7XG59XG4jZGVmaW5lIGN1YmVVVl9tYXhMb2RzMiAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAyLjApXG4jZGVmaW5lIGN1YmVVVl9yY3BUZXh0dXJlU2l6ZSAoMS4wIC8gY3ViZVVWX3RleHR1cmVTaXplKVxudmVjMiBnZXRDdWJlVVYodmVjMyBkaXJlY3Rpb24sIGZsb2F0IHJvdWdobmVzc0xldmVsLCBmbG9hdCBtaXBMZXZlbCkge1xuXHRtaXBMZXZlbCA9IHJvdWdobmVzc0xldmVsID4gY3ViZVVWX21heExvZHMyIC0gMy4wID8gMC4wIDogbWlwTGV2ZWw7XG5cdGZsb2F0IGEgPSAxNi4wICogY3ViZVVWX3JjcFRleHR1cmVTaXplO1xuXHR2ZWMyIGV4cDJfcGFja2VkID0gZXhwMiggdmVjMiggcm91Z2huZXNzTGV2ZWwsIG1pcExldmVsICkgKTtcblx0dmVjMiByY3BfZXhwMl9wYWNrZWQgPSB2ZWMyKCAxLjAgKSAvIGV4cDJfcGFja2VkO1xuXHRmbG9hdCBwb3dTY2FsZSA9IGV4cDJfcGFja2VkLnggKiBleHAyX3BhY2tlZC55O1xuXHRmbG9hdCBzY2FsZSA9IHJjcF9leHAyX3BhY2tlZC54ICogcmNwX2V4cDJfcGFja2VkLnkgKiAwLjI1O1xuXHRmbG9hdCBtaXBPZmZzZXQgPSAwLjc1KigxLjAgLSByY3BfZXhwMl9wYWNrZWQueSkgKiByY3BfZXhwMl9wYWNrZWQueDtcblx0Ym9vbCBiUmVzID0gbWlwTGV2ZWwgPT0gMC4wO1xuXHRzY2FsZSA9ICBiUmVzICYmIChzY2FsZSA8IGEpID8gYSA6IHNjYWxlO1xuXHR2ZWMzIHI7XG5cdHZlYzIgb2Zmc2V0O1xuXHRpbnQgZmFjZSA9IGdldEZhY2VGcm9tRGlyZWN0aW9uKGRpcmVjdGlvbik7XG5cdGZsb2F0IHJjcFBvd1NjYWxlID0gMS4wIC8gcG93U2NhbGU7XG5cdGlmKCBmYWNlID09IDApIHtcblx0XHRyID0gdmVjMyhkaXJlY3Rpb24ueCwgLWRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSk7XG5cdFx0b2Zmc2V0ID0gdmVjMigwLjArbWlwT2Zmc2V0LDAuNzUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVzICYmIChvZmZzZXQueSA8IDIuMCphKSA/IGEgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNlIGlmKCBmYWNlID09IDEpIHtcblx0XHRyID0gdmVjMyhkaXJlY3Rpb24ueSwgZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56KTtcblx0XHRvZmZzZXQgPSB2ZWMyKHNjYWxlK21pcE9mZnNldCwgMC43NSAqIHJjcFBvd1NjYWxlKTtcblx0XHRvZmZzZXQueSA9IGJSZXMgJiYgKG9mZnNldC55IDwgMi4wKmEpID8gYSA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgPT0gMikge1xuXHRcdHIgPSB2ZWMzKGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCA9IHZlYzIoMi4wKnNjYWxlK21pcE9mZnNldCwgMC43NSAqIHJjcFBvd1NjYWxlKTtcblx0XHRvZmZzZXQueSA9IGJSZXMgJiYgKG9mZnNldC55IDwgMi4wKmEpID8gYSA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgPT0gMykge1xuXHRcdHIgPSB2ZWMzKGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCA9IHZlYzIoMC4wK21pcE9mZnNldCwwLjUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVzICYmIChvZmZzZXQueSA8IDIuMCphKSA/IDAuMCA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgPT0gNCkge1xuXHRcdHIgPSB2ZWMzKGRpcmVjdGlvbi55LCBkaXJlY3Rpb24ueCwgLWRpcmVjdGlvbi56KTtcblx0XHRvZmZzZXQgPSB2ZWMyKHNjYWxlK21pcE9mZnNldCwgMC41ICogcmNwUG93U2NhbGUpO1xuXHRcdG9mZnNldC55ID0gYlJlcyAmJiAob2Zmc2V0LnkgPCAyLjAqYSkgPyAwLjAgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNlIHtcblx0XHRyID0gdmVjMyhkaXJlY3Rpb24ueiwgLWRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueSk7XG5cdFx0b2Zmc2V0ID0gdmVjMigyLjAqc2NhbGUrbWlwT2Zmc2V0LCAwLjUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVzICYmIChvZmZzZXQueSA8IDIuMCphKSA/IDAuMCA6IG9mZnNldC55O1xuXHR9XG5cdHIgPSBub3JtYWxpemUocik7XG5cdGZsb2F0IHRleGVsT2Zmc2V0ID0gMC41ICogY3ViZVVWX3JjcFRleHR1cmVTaXplO1xuXHR2ZWMyIHMgPSAoIHIueXogLyBhYnMoIHIueCApICsgdmVjMiggMS4wICkgKSAqIDAuNTtcblx0dmVjMiBiYXNlID0gb2Zmc2V0ICsgdmVjMiggdGV4ZWxPZmZzZXQgKTtcblx0cmV0dXJuIGJhc2UgKyBzICogKCBzY2FsZSAtIDIuMCAqIHRleGVsT2Zmc2V0ICk7XG59XG4jZGVmaW5lIGN1YmVVVl9tYXhMb2RzMyAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAzLjApXG52ZWM0IHRleHR1cmVDdWJlVVYodmVjMyByZWZsZWN0ZWREaXJlY3Rpb24sIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgcm91Z2huZXNzVmFsID0gcm91Z2huZXNzKiBjdWJlVVZfbWF4TG9kczM7XG5cdGZsb2F0IHIxID0gZmxvb3Iocm91Z2huZXNzVmFsKTtcblx0ZmxvYXQgcjIgPSByMSArIDEuMDtcblx0ZmxvYXQgdCA9IGZyYWN0KHJvdWdobmVzc1ZhbCk7XG5cdHZlYzIgbWlwSW5mbyA9IE1pcExldmVsSW5mbyhyZWZsZWN0ZWREaXJlY3Rpb24sIHIxLCByb3VnaG5lc3MpO1xuXHRmbG9hdCBzID0gbWlwSW5mby55O1xuXHRmbG9hdCBsZXZlbDAgPSBtaXBJbmZvLng7XG5cdGZsb2F0IGxldmVsMSA9IGxldmVsMCArIDEuMDtcblx0bGV2ZWwxID0gbGV2ZWwxID4gNS4wID8gNS4wIDogbGV2ZWwxO1xuXHRsZXZlbDAgKz0gbWluKCBmbG9vciggcyArIDAuNSApLCA1LjAgKTtcblx0dmVjMiB1dl8xMCA9IGdldEN1YmVVVihyZWZsZWN0ZWREaXJlY3Rpb24sIHIxLCBsZXZlbDApO1xuXHR2ZWM0IGNvbG9yMTAgPSBlbnZNYXBUZXhlbFRvTGluZWFyKHRleHR1cmUyRChlbnZNYXAsIHV2XzEwKSk7XG5cdHZlYzIgdXZfMjAgPSBnZXRDdWJlVVYocmVmbGVjdGVkRGlyZWN0aW9uLCByMiwgbGV2ZWwwKTtcblx0dmVjNCBjb2xvcjIwID0gZW52TWFwVGV4ZWxUb0xpbmVhcih0ZXh0dXJlMkQoZW52TWFwLCB1dl8yMCkpO1xuXHR2ZWM0IHJlc3VsdCA9IG1peChjb2xvcjEwLCBjb2xvcjIwLCB0KTtcblx0cmV0dXJuIHZlYzQocmVzdWx0LnJnYiwgMS4wKTtcbn1cbiNlbmRpZlxuIiwKZGVmYXVsdG5vcm1hbF92ZXJ0ZXg6IiNpZmRlZiBGTElQX1NJREVEXG5cdG9iamVjdE5vcm1hbCA9IC1vYmplY3ROb3JtYWw7XG4jZW5kaWZcbnZlYzMgdHJhbnNmb3JtZWROb3JtYWwgPSBub3JtYWxNYXRyaXggKiBvYmplY3ROb3JtYWw7XG4iLGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZGlzcGxhY2VtZW50TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxlO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudEJpYXM7XG4jZW5kaWZcbiIsZGlzcGxhY2VtZW50bWFwX3ZlcnRleDoiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dHJhbnNmb3JtZWQgKz0gbm9ybWFsICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7XG4jZW5kaWZcbiIsZW1pc3NpdmVtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcblx0dmVjNCBlbWlzc2l2ZUNvbG9yID0gdGV4dHVyZTJEKCBlbWlzc2l2ZU1hcCwgdlV2ICk7XG5cdGVtaXNzaXZlQ29sb3IucmdiID0gZW1pc3NpdmVNYXBUZXhlbFRvTGluZWFyKCBlbWlzc2l2ZUNvbG9yICkucmdiO1xuXHR0b3RhbEVtaXNzaXZlUmFkaWFuY2UgKj0gZW1pc3NpdmVDb2xvci5yZ2I7XG4jZW5kaWZcbiIsCmVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZW1pc3NpdmVNYXA7XG4jZW5kaWZcbiIsZW5jb2RpbmdzX2ZyYWdtZW50OiIgIGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApO1xuIixlbmNvZGluZ3NfcGFyc19mcmFnbWVudDoiXG52ZWM0IExpbmVhclRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmFsdWU7XG59XG52ZWM0IEdhbW1hVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IGdhbW1hRmFjdG9yICkge1xuXHRyZXR1cm4gdmVjNCggcG93KCB2YWx1ZS54eXosIHZlYzMoIGdhbW1hRmFjdG9yICkgKSwgdmFsdWUudyApO1xufVxudmVjNCBMaW5lYXJUb0dhbW1hKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBnYW1tYUZhY3RvciApIHtcblx0cmV0dXJuIHZlYzQoIHBvdyggdmFsdWUueHl6LCB2ZWMzKCAxLjAgLyBnYW1tYUZhY3RvciApICksIHZhbHVlLncgKTtcbn1cbnZlYzQgc1JHQlRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoIDAuMDUyMTMyNzAxNCApLCB2ZWMzKCAyLjQgKSApLCB2YWx1ZS5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMyggMC4wNDA0NSApICkgKSApLCB2YWx1ZS53ICk7XG59XG52ZWM0IExpbmVhclRvc1JHQiggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IsIHZlYzMoIDAuNDE2NjYgKSApICogMS4wNTUgLSB2ZWMzKCAwLjA1NSApLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMyggbGVzc1RoYW5FcXVhbCggdmFsdWUucmdiLCB2ZWMzKCAwLjAwMzEzMDggKSApICkgKSwgdmFsdWUudyApO1xufVxudmVjNCBSR0JFVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgKiBleHAyKCB2YWx1ZS5hICogMjU1LjAgLSAxMjguMCApLCAxLjAgKTtcbn1cbnZlYzQgTGluZWFyVG9SR0JFKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRmbG9hdCBtYXhDb21wb25lbnQgPSBtYXgoIG1heCggdmFsdWUuciwgdmFsdWUuZyApLCB2YWx1ZS5iICk7XG5cdGZsb2F0IGZFeHAgPSBjbGFtcCggY2VpbCggbG9nMiggbWF4Q29tcG9uZW50ICkgKSwgLTEyOC4wLCAxMjcuMCApO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiIC8gZXhwMiggZkV4cCApLCAoIGZFeHAgKyAxMjguMCApIC8gMjU1LjAgKTtcbn1cbnZlYzQgUkdCTVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBtYXhSYW5nZSApIHtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnh5eiAqIHZhbHVlLncgKiBtYXhSYW5nZSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCTSggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdGZsb2F0IG1heFJHQiA9IG1heCggdmFsdWUueCwgbWF4KCB2YWx1ZS5nLCB2YWx1ZS5iICkgKTtcblx0ZmxvYXQgTSAgICAgID0gY2xhbXAoIG1heFJHQiAvIG1heFJhbmdlLCAwLjAsIDEuMCApO1xuXHRNICAgICAgICAgICAgPSBjZWlsKCBNICogMjU1LjAgKSAvIDI1NS4wO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiIC8gKCBNICogbWF4UmFuZ2UgKSwgTSApO1xufVxudmVjNCBSR0JEVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogKCAoIG1heFJhbmdlIC8gMjU1LjAgKSAvIHZhbHVlLmEgKSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCRCggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdGZsb2F0IG1heFJHQiA9IG1heCggdmFsdWUueCwgbWF4KCB2YWx1ZS5nLCB2YWx1ZS5iICkgKTtcblx0ZmxvYXQgRCAgICAgID0gbWF4KCBtYXhSYW5nZSAvIG1heFJHQiwgMS4wICk7XG5cdEQgICAgICAgICAgICA9IG1pbiggZmxvb3IoIEQgKSAvIDI1NS4wLCAxLjAgKTtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAqICggRCAqICggMjU1LjAgLyBtYXhSYW5nZSApICksIEQgKTtcbn1cbmNvbnN0IG1hdDMgY0xvZ0x1dk0gPSBtYXQzKCAwLjIyMDksIDAuMzM5MCwgMC40MTg0LCAwLjExMzgsIDAuNjc4MCwgMC43MzE5LCAwLjAxMDIsIDAuMTEzMCwgMC4yOTY5ICk7XG52ZWM0IExpbmVhclRvTG9nTHV2KCBpbiB2ZWM0IHZhbHVlICkgIHtcblx0dmVjMyBYcF9ZX1hZWnAgPSB2YWx1ZS5yZ2IgKiBjTG9nTHV2TTtcblx0WHBfWV9YWVpwID0gbWF4KFhwX1lfWFlacCwgdmVjMygxZS02LCAxZS02LCAxZS02KSk7XG5cdHZlYzQgdlJlc3VsdDtcblx0dlJlc3VsdC54eSA9IFhwX1lfWFlacC54eSAvIFhwX1lfWFlacC56O1xuXHRmbG9hdCBMZSA9IDIuMCAqIGxvZzIoWHBfWV9YWVpwLnkpICsgMTI3LjA7XG5cdHZSZXN1bHQudyA9IGZyYWN0KExlKTtcblx0dlJlc3VsdC56ID0gKExlIC0gKGZsb29yKHZSZXN1bHQudyoyNTUuMCkpLzI1NS4wKS8yNTUuMDtcblx0cmV0dXJuIHZSZXN1bHQ7XG59XG5jb25zdCBtYXQzIGNMb2dMdXZJbnZlcnNlTSA9IG1hdDMoIDYuMDAxNCwgLTIuNzAwOCwgLTEuNzk5NiwgLTEuMzMyMCwgMy4xMDI5LCAtNS43NzIxLCAwLjMwMDgsIC0xLjA4ODIsIDUuNjI2OCApO1xudmVjNCBMb2dMdXZUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0ZmxvYXQgTGUgPSB2YWx1ZS56ICogMjU1LjAgKyB2YWx1ZS53O1xuXHR2ZWMzIFhwX1lfWFlacDtcblx0WHBfWV9YWVpwLnkgPSBleHAyKChMZSAtIDEyNy4wKSAvIDIuMCk7XG5cdFhwX1lfWFlacC56ID0gWHBfWV9YWVpwLnkgLyB2YWx1ZS55O1xuXHRYcF9ZX1hZWnAueCA9IHZhbHVlLnggKiBYcF9ZX1hZWnAuejtcblx0dmVjMyB2UkdCID0gWHBfWV9YWVpwLnJnYiAqIGNMb2dMdXZJbnZlcnNlTTtcblx0cmV0dXJuIHZlYzQoIG1heCh2UkdCLCAwLjApLCAxLjAgKTtcbn1cbiIsCmVudm1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HIClcblx0XHR2ZWMzIGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2Vsc2Vcblx0XHR2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIGZsaXBOb3JtYWwgKiB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfRVFVSVJFQyApXG5cdFx0dmVjMiBzYW1wbGVVVjtcblx0XHRzYW1wbGVVVi55ID0gc2F0dXJhdGUoIGZsaXBOb3JtYWwgKiByZWZsZWN0VmVjLnkgKiAwLjUgKyAwLjUgKTtcblx0XHRzYW1wbGVVVi54ID0gYXRhbiggZmxpcE5vcm1hbCAqIHJlZmxlY3RWZWMueiwgZmxpcE5vcm1hbCAqIHJlZmxlY3RWZWMueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7XG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmUyRCggZW52TWFwLCBzYW1wbGVVViApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9TUEhFUkUgKVxuXHRcdHZlYzMgcmVmbGVjdFZpZXcgPSBmbGlwTm9ybWFsICogbm9ybWFsaXplKCAoIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZsZWN0VmVjLCAwLjAgKSApLnh5eiArIHZlYzMoIDAuMCwgMC4wLCAxLjAgKSApO1xuXHRcdHZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlMkQoIGVudk1hcCwgcmVmbGVjdFZpZXcueHkgKiAwLjUgKyAwLjUgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7XG5cdCNlbmRpZlxuXHRlbnZDb2xvciA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudkNvbG9yICk7XG5cdCNpZmRlZiBFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFlcblx0XHRvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBvdXRnb2luZ0xpZ2h0ICogZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19NSVggKVxuXHRcdG91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfQUREIClcblx0XHRvdXRnb2luZ0xpZ2h0ICs9IGVudkNvbG9yLnh5eiAqIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHk7XG5cdCNlbmRpZlxuI2VuZGlmXG4iLAplbnZtYXBfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkKCBQSFlTSUNBTCApXG5cdHVuaWZvcm0gZmxvYXQgcmVmbGVjdGl2aXR5O1xuXHR1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAoIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HICkgKVxuXHRcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHQjZW5kaWZcblx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKSB8fCBkZWZpbmVkKCBQSFlTSUNBTCApXG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHQjZW5kaWZcbiNlbmRpZlxuIiwKZW52bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKVxuXHRcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbmRpZlxuI2VuZGlmXG4iLGVudm1hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApXG5cdFx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcblx0I2Vsc2Vcblx0XHR2ZWMzIGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZSZWZsZWN0ID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWZcbiIsCmZvZ192ZXJ0ZXg6IlxuI2lmZGVmIFVTRV9GT0dcbmZvZ0RlcHRoID0gLW12UG9zaXRpb24uejtcbiNlbmRpZiIsZm9nX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0ZPR1xuICB2YXJ5aW5nIGZsb2F0IGZvZ0RlcHRoO1xuI2VuZGlmXG4iLGZvZ19mcmFnbWVudDoiI2lmZGVmIFVTRV9GT0dcblx0I2lmZGVmIEZPR19FWFAyXG5cdFx0ZmxvYXQgZm9nRmFjdG9yID0gd2hpdGVDb21wbGltZW50KCBleHAyKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogZm9nRGVwdGggKiBmb2dEZXB0aCAqIExPRzIgKSApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgZm9nRGVwdGggKTtcblx0I2VuZGlmXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTtcbiNlbmRpZlxuIixmb2dfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9GT0dcblx0dW5pZm9ybSB2ZWMzIGZvZ0NvbG9yO1xuXHR2YXJ5aW5nIGZsb2F0IGZvZ0RlcHRoO1xuXHQjaWZkZWYgRk9HX0VYUDJcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dOZWFyO1xuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRmFyO1xuXHQjZW5kaWZcbiNlbmRpZlxuIiwKZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFRPT05cblx0dW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnRNYXA7XG5cdHZlYzMgZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCB2ZWMzIG5vcm1hbCwgdmVjMyBsaWdodERpcmVjdGlvbiApIHtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApO1xuXHRcdHZlYzIgY29vcmQgPSB2ZWMyKCBkb3ROTCAqIDAuNSArIDAuNSwgMC4wICk7XG5cdFx0I2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkucmdiO1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gKCBjb29yZC54IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWZcbiIsbGlnaHRtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IFBJICogdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApLnh5eiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xuI2VuZGlmXG4iLApsaWdodG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5O1xuI2VuZGlmIixsaWdodHNfbGFtYmVydF92ZXJ0ZXg6InZlYzMgZGlmZnVzZSA9IHZlYzMoIDEuMCApO1xuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uID0gbXZQb3NpdGlvbi54eXo7XG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5nZW9tZXRyeS52aWV3RGlyID0gbm9ybWFsaXplKCAtbXZQb3NpdGlvbi54eXogKTtcbkdlb21ldHJpY0NvbnRleHQgYmFja0dlb21ldHJ5O1xuYmFja0dlb21ldHJ5LnBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247XG5iYWNrR2VvbWV0cnkubm9ybWFsID0gLWdlb21ldHJ5Lm5vcm1hbDtcbmJhY2tHZW9tZXRyeS52aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjtcbnZMaWdodEZyb250ID0gdmVjMyggMC4wICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTtcbiNlbmRpZlxuSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDtcbmZsb2F0IGRvdE5MO1xudmVjMyBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRQb2ludERpcmVjdExpZ2h0SXJyYWRpYW5jZSggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gUEkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjZW5kaWZcblx0fVxuI2VuZGlmXG4jaWYgTlVNX1NQT1RfTElHSFRTID4gMFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0U3BvdERpcmVjdExpZ2h0SXJyYWRpYW5jZSggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBQSSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdHZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC1kb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWZcbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodElycmFkaWFuY2UoIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IFBJICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLWRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xuXHRcdHZMaWdodEZyb250ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5ICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZlxuIiwKbGlnaHRzX3BhcnM6InVuaWZvcm0gdmVjMyBhbWJpZW50TGlnaHRDb2xvcjtcbnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHtcblx0dmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHRyZXR1cm4gaXJyYWRpYW5jZTtcbn1cbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0aW50IHNoYWRvdztcblx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdH07XG5cdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0c1sgTlVNX0RJUl9MSUdIVFMgXTtcblx0dm9pZCBnZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCApIHtcblx0XHRkaXJlY3RMaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7XG5cdFx0ZGlyZWN0TGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247XG5cdFx0ZGlyZWN0TGlnaHQudmlzaWJsZSA9IHRydWU7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBQb2ludExpZ2h0IHtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdFx0aW50IHNoYWRvdztcblx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdH07XG5cdHVuaWZvcm0gUG9pbnRMaWdodCBwb2ludExpZ2h0c1sgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFBvaW50RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICkge1xuXHRcdHZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IHB1bmN0dWFsTGlnaHRJbnRlbnNpdHlUb0lycmFkaWFuY2VGYWN0b3IoIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTtcblx0XHRkaXJlY3RMaWdodC52aXNpYmxlID0gKCBkaXJlY3RMaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBTcG90TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRmbG9hdCBjb25lQ29zO1xuXHRcdGZsb2F0IHBlbnVtYnJhQ29zO1xuXHRcdGludCBzaGFkb3c7XG5cdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHR9O1xuXHR1bmlmb3JtIFNwb3RMaWdodCBzcG90TGlnaHRzWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCAgKSB7XG5cdFx0dmVjMyBsVmVjdG9yID0gc3BvdExpZ2h0LnBvc2l0aW9uIC0gZ2VvbWV0cnkucG9zaXRpb247XG5cdFx0ZGlyZWN0TGlnaHQuZGlyZWN0aW9uID0gbm9ybWFsaXplKCBsVmVjdG9yICk7XG5cdFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xuXHRcdGZsb2F0IGFuZ2xlQ29zID0gZG90KCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRpZiAoIGFuZ2xlQ29zID4gc3BvdExpZ2h0LmNvbmVDb3MgKSB7XG5cdFx0XHRmbG9hdCBzcG90RWZmZWN0ID0gc21vb3Roc3RlcCggc3BvdExpZ2h0LmNvbmVDb3MsIHNwb3RMaWdodC5wZW51bWJyYUNvcywgYW5nbGVDb3MgKTtcblx0XHRcdGRpcmVjdExpZ2h0LmNvbG9yID0gc3BvdExpZ2h0LmNvbG9yO1xuXHRcdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gc3BvdEVmZmVjdCAqIHB1bmN0dWFsTGlnaHRJbnRlbnNpdHlUb0lycmFkaWFuY2VGYWN0b3IoIGxpZ2h0RGlzdGFuY2UsIHNwb3RMaWdodC5kaXN0YW5jZSwgc3BvdExpZ2h0LmRlY2F5ICk7XG5cdFx0XHRkaXJlY3RMaWdodC52aXNpYmxlID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGlyZWN0TGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTtcblx0XHRcdGRpcmVjdExpZ2h0LnZpc2libGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHRzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7XG5cdFx0dmVjMyBjb2xvcjtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodDtcblx0fTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgbHRjTWF0O1x0dW5pZm9ybSBzYW1wbGVyMkQgbHRjTWFnO1xuXHR1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07XG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwXG5cdHN0cnVjdCBIZW1pc3BoZXJlTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgc2t5Q29sb3I7XG5cdFx0dmVjMyBncm91bmRDb2xvcjtcblx0fTtcblx0dW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07XG5cdHZlYzMgZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gSGVtaXNwaGVyZUxpZ2h0IGhlbWlMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSApIHtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTtcblx0XHR2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApO1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdFx0aXJyYWRpYW5jZSAqPSBQSTtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gaXJyYWRpYW5jZTtcblx0fVxuI2VuZGlmXG4jaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFBIWVNJQ0FMIClcblx0dmVjMyBnZXRMaWdodFByb2JlSW5kaXJlY3RJcnJhZGlhbmNlKCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBpbnQgbWF4TUlQTGV2ZWwgKSB7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGdlb21ldHJ5Lm5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0XHR2ZWMzIHF1ZXJ5VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHdvcmxkTm9ybWFsLngsIHdvcmxkTm9ybWFsLnl6ICk7XG5cdFx0XHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZUxvZEVYVCggZW52TWFwLCBxdWVyeVZlYywgZmxvYXQoIG1heE1JUExldmVsICkgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCBxdWVyeVZlYywgZmxvYXQoIG1heE1JUExldmVsICkgKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiID0gZW52TWFwVGV4ZWxUb0xpbmVhciggZW52TWFwQ29sb3IgKS5yZ2I7XG5cdFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0XHR2ZWMzIHF1ZXJ5VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHdvcmxkTm9ybWFsLngsIHdvcmxkTm9ybWFsLnl6ICk7XG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggcXVlcnlWZWMsIDEuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdmVjNCggMC4wICk7XG5cdFx0I2VuZGlmXG5cdFx0cmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHR9XG5cdGZsb2F0IGdldFNwZWN1bGFyTUlQTGV2ZWwoIGNvbnN0IGluIGZsb2F0IGJsaW5uU2hpbmluZXNzRXhwb25lbnQsIGNvbnN0IGluIGludCBtYXhNSVBMZXZlbCApIHtcblx0XHRmbG9hdCBtYXhNSVBMZXZlbFNjYWxhciA9IGZsb2F0KCBtYXhNSVBMZXZlbCApO1xuXHRcdGZsb2F0IGRlc2lyZWRNSVBMZXZlbCA9IG1heE1JUExldmVsU2NhbGFyIC0gMC43OTI0OCAtIDAuNSAqIGxvZzIoIHBvdzIoIGJsaW5uU2hpbmluZXNzRXhwb25lbnQgKSArIDEuMCApO1xuXHRcdHJldHVybiBjbGFtcCggZGVzaXJlZE1JUExldmVsLCAwLjAsIG1heE1JUExldmVsU2NhbGFyICk7XG5cdH1cblx0dmVjMyBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gZmxvYXQgYmxpbm5TaGluaW5lc3NFeHBvbmVudCwgY29uc3QgaW4gaW50IG1heE1JUExldmVsICkge1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCAtZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZlYzMgcmVmbGVjdFZlYyA9IHJlZnJhY3QoIC1nZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApO1xuXHRcdCNlbmRpZlxuXHRcdHJlZmxlY3RWZWMgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCByZWZsZWN0VmVjLCB2aWV3TWF0cml4ICk7XG5cdFx0ZmxvYXQgc3BlY3VsYXJNSVBMZXZlbCA9IGdldFNwZWN1bGFyTUlQTGV2ZWwoIGJsaW5uU2hpbmluZXNzRXhwb25lbnQsIG1heE1JUExldmVsICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0XHRcdHZlYzMgcXVlcnlSZWZsZWN0VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApO1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVMb2RFWFQoIGVudk1hcCwgcXVlcnlSZWZsZWN0VmVjLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgcXVlcnlSZWZsZWN0VmVjLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjMyBxdWVyeVJlZmxlY3RWZWMgPSB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICk7XG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVVihxdWVyeVJlZmxlY3RWZWMsIEJsaW5uRXhwb25lbnRUb0dHWFJvdWdobmVzcyhibGlublNoaW5pbmVzc0V4cG9uZW50KSk7XG5cdFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfRVFVSVJFQyApXG5cdFx0XHR2ZWMyIHNhbXBsZVVWO1xuXHRcdFx0c2FtcGxlVVYueSA9IHNhdHVyYXRlKCByZWZsZWN0VmVjLnkgKiAwLjUgKyAwLjUgKTtcblx0XHRcdHNhbXBsZVVWLnggPSBhdGFuKCByZWZsZWN0VmVjLnosIHJlZmxlY3RWZWMueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7XG5cdFx0XHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlMkRMb2RFWFQoIGVudk1hcCwgc2FtcGxlVVYsIHNwZWN1bGFyTUlQTGV2ZWwgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlMkQoIGVudk1hcCwgc2FtcGxlVVYsIHNwZWN1bGFyTUlQTGV2ZWwgKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiID0gZW52TWFwVGV4ZWxUb0xpbmVhciggZW52TWFwQ29sb3IgKS5yZ2I7XG5cdFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfU1BIRVJFIClcblx0XHRcdHZlYzMgcmVmbGVjdFZpZXcgPSBub3JtYWxpemUoICggdmlld01hdHJpeCAqIHZlYzQoIHJlZmxlY3RWZWMsIDAuMCApICkueHl6ICsgdmVjMyggMC4wLDAuMCwxLjAgKSApO1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZTJETG9kRVhUKCBlbnZNYXAsIHJlZmxlY3RWaWV3Lnh5ICogMC41ICsgMC41LCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZTJEKCBlbnZNYXAsIHJlZmxlY3RWaWV3Lnh5ICogMC41ICsgMC41LCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbmRpZlxuXHRcdHJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7XG5cdH1cbiNlbmRpZlxuIiwKbGlnaHRzX3Bob25nX2ZyYWdtZW50OiJCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiO1xubWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IHNwZWN1bGFyO1xubWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgPSBzaGluaW5lc3M7XG5tYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtcbiIsbGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ6InZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuc3RydWN0IEJsaW5uUGhvbmdNYXRlcmlhbCB7XG5cdHZlYzNcdGRpZmZ1c2VDb2xvcjtcblx0dmVjM1x0c3BlY3VsYXJDb2xvcjtcblx0ZmxvYXRcdHNwZWN1bGFyU2hpbmluZXNzO1xuXHRmbG9hdFx0c3BlY3VsYXJTdHJlbmd0aDtcbn07XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX0JsaW5uUGhvbmcoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0XHR2ZWMzIG5vcm1hbCA9IGdlb21ldHJ5Lm5vcm1hbDtcblx0XHR2ZWMzIHZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xuXHRcdHZlYzMgcG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHR2ZWMzIGxpZ2h0UG9zID0gcmVjdEFyZWFMaWdodC5wb3NpdGlvbjtcblx0XHR2ZWMzIGhhbGZXaWR0aCA9IHJlY3RBcmVhTGlnaHQuaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodCA9IHJlY3RBcmVhTGlnaHQuaGFsZkhlaWdodDtcblx0XHR2ZWMzIGxpZ2h0Q29sb3IgPSByZWN0QXJlYUxpZ2h0LmNvbG9yO1xuXHRcdGZsb2F0IHJvdWdobmVzcyA9IEJsaW5uRXhwb25lbnRUb0dHWFJvdWdobmVzcyggbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKTtcblx0XHR2ZWMzIHJlY3RDb29yZHNbIDQgXTtcblx0XHRyZWN0Q29vcmRzWyAwIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7XHRcdHJlY3RDb29yZHNbIDEgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAyIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0cmVjdENvb3Jkc1sgMyBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0O1xuXHRcdHZlYzIgdXYgPSBMVENfVXYoIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XG5cdFx0ZmxvYXQgbm9ybSA9IHRleHR1cmUyRCggbHRjTWFnLCB1diApLmE7XG5cdFx0dmVjNCB0ID0gdGV4dHVyZTJEKCBsdGNNYXQsIHV2ICk7XG5cdFx0bWF0MyBtSW52ID0gbWF0Myhcblx0XHRcdHZlYzMoICAgMSwgICAwLCB0LnkgKSxcblx0XHRcdHZlYzMoICAgMCwgdC56LCAgIDAgKSxcblx0XHRcdHZlYzMoIHQudywgICAwLCB0LnggKVxuXHRcdCk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiBub3JtICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtSW52LCByZWN0Q29vcmRzICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBsaWdodENvbG9yICogbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtYXQzKCAxICksIHJlY3RDb29yZHMgKTtcblx0fVxuI2VuZGlmXG52b2lkIFJFX0RpcmVjdF9CbGlublBob25nKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHQjaWZkZWYgVE9PTlxuXHRcdHZlYzMgaXJyYWRpYW5jZSA9IGdldEdyYWRpZW50SXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHRcdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNlbmRpZlxuXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRpcnJhZGlhbmNlICo9IFBJO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TcGVjdWxhcl9CbGlublBob25nKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzICkgKiBtYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoO1xufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbiNkZWZpbmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9EaXJlY3RfQmxpbm5QaG9uZ1xuI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWFcdFx0UkVfRGlyZWN0X1JlY3RBcmVhX0JsaW5uUGhvbmdcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nXG4jZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsIClcdCgwKVxuIiwKbGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50OiJQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYiAqICggMS4wIC0gbWV0YWxuZXNzRmFjdG9yICk7XG5tYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyA9IGNsYW1wKCByb3VnaG5lc3NGYWN0b3IsIDAuMDQsIDEuMCApO1xuI2lmZGVmIFNUQU5EQVJEXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG4jZWxzZVxuXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCBNQVhJTVVNX1NQRUNVTEFSX0NPRUZGSUNJRU5UICogcG93MiggcmVmbGVjdGl2aXR5ICkgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG5cdG1hdGVyaWFsLmNsZWFyQ29hdCA9IHNhdHVyYXRlKCBjbGVhckNvYXQgKTtcdG1hdGVyaWFsLmNsZWFyQ29hdFJvdWdobmVzcyA9IGNsYW1wKCBjbGVhckNvYXRSb3VnaG5lc3MsIDAuMDQsIDEuMCApO1xuI2VuZGlmXG4iLApsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudDoic3RydWN0IFBoeXNpY2FsTWF0ZXJpYWwge1xuXHR2ZWMzXHRkaWZmdXNlQ29sb3I7XG5cdGZsb2F0XHRzcGVjdWxhclJvdWdobmVzcztcblx0dmVjM1x0c3BlY3VsYXJDb2xvcjtcblx0I2lmbmRlZiBTVEFOREFSRFxuXHRcdGZsb2F0IGNsZWFyQ29hdDtcblx0XHRmbG9hdCBjbGVhckNvYXRSb3VnaG5lc3M7XG5cdCNlbmRpZlxufTtcbiNkZWZpbmUgTUFYSU1VTV9TUEVDVUxBUl9DT0VGRklDSUVOVCAwLjE2XG4jZGVmaW5lIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgMC4wNFxuZmxvYXQgY2xlYXJDb2F0REhSQXBwcm94KCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5MICkge1xuXHRyZXR1cm4gREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCArICggMS4wIC0gREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApICogKCBwb3coIDEuMCAtIGRvdE5MLCA1LjAgKSAqIHBvdyggMS4wIC0gcm91Z2huZXNzLCAyLjAgKSApO1xufVxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHR2b2lkIFJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbCggY29uc3QgaW4gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0XHR2ZWMzIG5vcm1hbCA9IGdlb21ldHJ5Lm5vcm1hbDtcblx0XHR2ZWMzIHZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xuXHRcdHZlYzMgcG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHR2ZWMzIGxpZ2h0UG9zID0gcmVjdEFyZWFMaWdodC5wb3NpdGlvbjtcblx0XHR2ZWMzIGhhbGZXaWR0aCA9IHJlY3RBcmVhTGlnaHQuaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodCA9IHJlY3RBcmVhTGlnaHQuaGFsZkhlaWdodDtcblx0XHR2ZWMzIGxpZ2h0Q29sb3IgPSByZWN0QXJlYUxpZ2h0LmNvbG9yO1xuXHRcdGZsb2F0IHJvdWdobmVzcyA9IG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzO1xuXHRcdHZlYzMgcmVjdENvb3Jkc1sgNCBdO1xuXHRcdHJlY3RDb29yZHNbIDAgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcdFx0cmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0dmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcblx0XHRmbG9hdCBub3JtID0gdGV4dHVyZTJEKCBsdGNNYWcsIHV2ICkuYTtcblx0XHR2ZWM0IHQgPSB0ZXh0dXJlMkQoIGx0Y01hdCwgdXYgKTtcblx0XHRtYXQzIG1JbnYgPSBtYXQzKFxuXHRcdFx0dmVjMyggICAxLCAgIDAsIHQueSApLFxuXHRcdFx0dmVjMyggICAwLCB0LnosICAgMCApLFxuXHRcdFx0dmVjMyggdC53LCAgIDAsIHQueCApXG5cdFx0KTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciAqIG5vcm0gKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1JbnYsIHJlY3RDb29yZHMgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGxpZ2h0Q29sb3IgKiBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1hdDMoIDEgKSwgcmVjdENvb3JkcyApO1xuXHR9XG4jZW5kaWZcbnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSID0gbWF0ZXJpYWwuY2xlYXJDb2F0ICogY2xlYXJDb2F0REhSQXBwcm94KCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MsIGRvdE5MICk7XG5cdCNlbHNlXG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSID0gMC4wO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gKCAxLjAgLSBjbGVhckNvYXRESFIgKSAqIGlycmFkaWFuY2UgKiBCUkRGX1NwZWN1bGFyX0dHWCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyApO1xuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9ICggMS4wIC0gY2xlYXJDb2F0REhSICkgKiBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyQ29hdCAqIEJSREZfU3BlY3VsYXJfR0dYKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzICk7XG5cdCNlbmRpZlxufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxudm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGNsZWFyQ29hdFJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0I2lmbmRlZiBTVEFOREFSRFxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdE5WO1xuXHRcdGZsb2F0IGNsZWFyQ29hdERIUiA9IG1hdGVyaWFsLmNsZWFyQ29hdCAqIGNsZWFyQ29hdERIUkFwcHJveCggbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzLCBkb3ROTCApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGNsZWFyQ29hdERIUiA9IDAuMDtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gKCAxLjAgLSBjbGVhckNvYXRESFIgKSAqIHJhZGlhbmNlICogQlJERl9TcGVjdWxhcl9HR1hfRW52aXJvbm1lbnQoIGdlb21ldHJ5LCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyApO1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBjbGVhckNvYXRSYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyQ29hdCAqIEJSREZfU3BlY3VsYXJfR0dYX0Vudmlyb25tZW50KCBnZW9tZXRyeSwgdmVjMyggREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApLCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG59XG4jZGVmaW5lIFJFX0RpcmVjdFx0XHRcdFx0UkVfRGlyZWN0X1BoeXNpY2FsXG4jZGVmaW5lIFJFX0RpcmVjdF9SZWN0QXJlYVx0XHRSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbFxuI2RlZmluZSBSRV9JbmRpcmVjdFNwZWN1bGFyXHRcdFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWxcbiNkZWZpbmUgTWF0ZXJpYWxfQmxpbm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSAgIEdHWFJvdWdobmVzc1RvQmxpbm5FeHBvbmVudCggbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgKVxuI2RlZmluZSBNYXRlcmlhbF9DbGVhckNvYXRfQmxpbm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSAgIEdHWFJvdWdobmVzc1RvQmxpbm5FeHBvbmVudCggbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzIClcbmZsb2F0IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IGFtYmllbnRPY2NsdXNpb24sIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0cmV0dXJuIHNhdHVyYXRlKCBwb3coIGRvdE5WICsgYW1iaWVudE9jY2x1c2lvbiwgZXhwMiggLSAxNi4wICogcm91Z2huZXNzIC0gMS4wICkgKSAtIDEuMCArIGFtYmllbnRPY2NsdXNpb24gKTtcbn1cbiIsCmxpZ2h0c190ZW1wbGF0ZToiXG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24gPSAtIHZWaWV3UG9zaXRpb247XG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWw7XG5nZW9tZXRyeS52aWV3RGlyID0gbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7XG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRzWyBpIF07XG5cdFx0Z2V0UG9pbnREaXJlY3RMaWdodElycmFkaWFuY2UoIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggcG9pbnRMaWdodC5zaGFkb3csIGRpcmVjdExpZ2h0LnZpc2libGUgKSApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuI2VuZGlmXG4jaWYgKCBOVU1fU1BPVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0U3BvdExpZ2h0IHNwb3RMaWdodDtcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xuXHRcdHNwb3RMaWdodCA9IHNwb3RMaWdodHNbIGkgXTtcblx0XHRnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBzcG90TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggc3BvdExpZ2h0LnNoYWRvdywgZGlyZWN0TGlnaHQudmlzaWJsZSApICkgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cbiNlbmRpZlxuI2lmICggTlVNX0RJUl9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0RGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0O1xuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcblx0XHRnZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SXJyYWRpYW5jZSggZGlyZWN0aW9uYWxMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmZGVmIFVTRV9TSEFET1dNQVBcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvdywgZGlyZWN0TGlnaHQudmlzaWJsZSApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuI2VuZGlmXG4jaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKVxuXHRSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9SRUNUX0FSRUFfTElHSFRTOyBpICsrICkge1xuXHRcdHJlY3RBcmVhTGlnaHQgPSByZWN0QXJlYUxpZ2h0c1sgaSBdO1xuXHRcdFJFX0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFx0dmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICkueHl6ICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0XHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XG5cdFx0I2VuZGlmXG5cdFx0aXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG5cdCNlbmRpZlxuXHQjaWYgKCBOVU1fSEVNSV9MSUdIVFMgPiAwIClcblx0XHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0XHRpcnJhZGlhbmNlICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkgKTtcblx0XHR9XG5cdCNlbmRpZlxuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFBIWVNJQ0FMICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0aXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSW5kaXJlY3RJcnJhZGlhbmNlKCBnZW9tZXRyeSwgOCApO1xuXHQjZW5kaWZcblx0UkVfSW5kaXJlY3REaWZmdXNlKCBpcnJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHZlYzMgcmFkaWFuY2UgPSBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggZ2VvbWV0cnksIE1hdGVyaWFsX0JsaW5uU2hpbmluZXNzRXhwb25lbnQoIG1hdGVyaWFsICksIDggKTtcblx0I2lmbmRlZiBTVEFOREFSRFxuXHRcdHZlYzMgY2xlYXJDb2F0UmFkaWFuY2UgPSBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggZ2VvbWV0cnksIE1hdGVyaWFsX0NsZWFyQ29hdF9CbGlublNoaW5pbmVzc0V4cG9uZW50KCBtYXRlcmlhbCApLCA4ICk7XG5cdCNlbHNlXG5cdFx0dmVjMyBjbGVhckNvYXRSYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHQjZW5kaWZcblx0UkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGNsZWFyQ29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG4jZW5kaWZcbiIsCmxvZ2RlcHRoYnVmX2ZyYWdtZW50OiIjaWYgZGVmaW5lZChVU0VfTE9HREVQVEhCVUYpICYmIGRlZmluZWQoVVNFX0xPR0RFUFRIQlVGX0VYVClcblx0Z2xfRnJhZ0RlcHRoRVhUID0gbG9nMih2RnJhZ0RlcHRoKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcblx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDtcblx0I2VuZGlmXG4jZW5kaWZcbiIsbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcblx0I2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFRcblx0XHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdCNlbmRpZlxuXHR1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3ZlcnRleDoiI2lmZGVmIFVTRV9MT0dERVBUSEJVRlxuXHRnbF9Qb3NpdGlvbi56ID0gbG9nMihtYXgoIEVQU0lMT04sIGdsX1Bvc2l0aW9uLncgKyAxLjAgKSkgKiBsb2dEZXB0aEJ1ZkZDO1xuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZGcmFnRGVwdGggPSAxLjAgKyBnbF9Qb3NpdGlvbi53O1xuXHQjZWxzZVxuXHRcdGdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiAtIDEuMCkgKiBnbF9Qb3NpdGlvbi53O1xuXHQjZW5kaWZcbiNlbmRpZlxuIiwKbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IHRleGVsQ29sb3IgPSB0ZXh0dXJlMkQoIG1hcCwgdlV2ICk7XG5cdHRleGVsQ29sb3IgPSBtYXBUZXhlbFRvTGluZWFyKCB0ZXhlbENvbG9yICk7XG5cdGRpZmZ1c2VDb2xvciAqPSB0ZXhlbENvbG9yO1xuI2VuZGlmXG4iLG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWZcbiIsbWFwX3BhcnRpY2xlX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IG1hcFRleGVsID0gdGV4dHVyZTJEKCBtYXAsIHZlYzIoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55ICkgKiBvZmZzZXRSZXBlYXQuencgKyBvZmZzZXRSZXBlYXQueHkgKTtcblx0ZGlmZnVzZUNvbG9yICo9IG1hcFRleGVsVG9MaW5lYXIoIG1hcFRleGVsICk7XG4jZW5kaWZcbiIsbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTUFQXG5cdHVuaWZvcm0gdmVjNCBvZmZzZXRSZXBlYXQ7XG5cdHVuaWZvcm0gc2FtcGxlcjJEIG1hcDtcbiNlbmRpZlxuIiwKbWV0YWxuZXNzbWFwX2ZyYWdtZW50OiJmbG9hdCBtZXRhbG5lc3NGYWN0b3IgPSBtZXRhbG5lc3M7XG4jaWZkZWYgVVNFX01FVEFMTkVTU01BUFxuXHR2ZWM0IHRleGVsTWV0YWxuZXNzID0gdGV4dHVyZTJEKCBtZXRhbG5lc3NNYXAsIHZVdiApO1xuXHRtZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjtcbiNlbmRpZlxuIixtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xuI2VuZGlmIixtb3JwaG5vcm1hbF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdG9iamVjdE5vcm1hbCArPSAoIG1vcnBoTm9ybWFsMCAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdG9iamVjdE5vcm1hbCArPSAoIG1vcnBoTm9ybWFsMSAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07XG5cdG9iamVjdE5vcm1hbCArPSAoIG1vcnBoTm9ybWFsMiAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdG9iamVjdE5vcm1hbCArPSAoIG1vcnBoTm9ybWFsMyAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG4jZW5kaWZcbiIsCm1vcnBodGFyZ2V0X3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX01PUlBIVEFSR0VUU1xuXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTtcblx0I2Vsc2Vcblx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcblx0I2VuZGlmXG4jZW5kaWYiLG1vcnBodGFyZ2V0X3ZlcnRleDoiI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFNcblx0dHJhbnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDAgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdHRyYW5zZm9ybWVkICs9ICggbW9ycGhUYXJnZXQxIC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xuXHR0cmFuc2Zvcm1lZCArPSAoIG1vcnBoVGFyZ2V0MiAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcblx0dHJhbnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDMgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG5cdCNpZm5kZWYgVVNFX01PUlBITk9STUFMU1xuXHR0cmFuc2Zvcm1lZCArPSAoIG1vcnBoVGFyZ2V0NCAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcblx0dHJhbnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDUgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07XG5cdHRyYW5zZm9ybWVkICs9ICggbW9ycGhUYXJnZXQ2IC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNiBdO1xuXHR0cmFuc2Zvcm1lZCArPSAoIG1vcnBoVGFyZ2V0NyAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDcgXTtcblx0I2VuZGlmXG4jZW5kaWZcbiIsCm5vcm1hbF9mbGlwOiIjaWZkZWYgRE9VQkxFX1NJREVEXG5cdGZsb2F0IGZsaXBOb3JtYWwgPSAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG4jZWxzZVxuXHRmbG9hdCBmbGlwTm9ybWFsID0gMS4wO1xuI2VuZGlmXG4iLG5vcm1hbF9mcmFnbWVudDoiI2lmZGVmIEZMQVRfU0hBREVEXG5cdHZlYzMgZmR4ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xuXHR2ZWMzIGZkeSA9IHZlYzMoIGRGZHkoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeSggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKCBmZHgsIGZkeSApICk7XG4jZWxzZVxuXHR2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggdk5vcm1hbCApICogZmxpcE5vcm1hbDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9OT1JNQUxNQVBcblx0bm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC12Vmlld1Bvc2l0aW9uLCBub3JtYWwgKTtcbiNlbGlmIGRlZmluZWQoIFVTRV9CVU1QTUFQIClcblx0bm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLXZWaWV3UG9zaXRpb24sIG5vcm1hbCwgZEhkeHlfZndkKCkgKTtcbiNlbmRpZlxuIiwKbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlO1xuXHR2ZWMzIHBlcnR1cmJOb3JtYWwyQXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtICkge1xuXHRcdHZlYzMgcTAgPSBkRmR4KCBleWVfcG9zLnh5eiApO1xuXHRcdHZlYzMgcTEgPSBkRmR5KCBleWVfcG9zLnh5eiApO1xuXHRcdHZlYzIgc3QwID0gZEZkeCggdlV2LnN0ICk7XG5cdFx0dmVjMiBzdDEgPSBkRmR5KCB2VXYuc3QgKTtcblx0XHR2ZWMzIFMgPSBub3JtYWxpemUoIHEwICogc3QxLnQgLSBxMSAqIHN0MC50ICk7XG5cdFx0dmVjMyBUID0gbm9ybWFsaXplKCAtcTAgKiBzdDEucyArIHExICogc3QwLnMgKTtcblx0XHR2ZWMzIE4gPSBub3JtYWxpemUoIHN1cmZfbm9ybSApO1xuXHRcdHZlYzMgbWFwTiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdFx0bWFwTi54eSA9IG5vcm1hbFNjYWxlICogbWFwTi54eTtcblx0XHRtYXQzIHRzbiA9IG1hdDMoIFMsIFQsIE4gKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKCB0c24gKiBtYXBOICk7XG5cdH1cbiNlbmRpZlxuIiwKcGFja2luZzoidmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCBub3JtYWwgKSAqIDAuNSArIDAuNTtcbn1cbnZlYzMgdW5wYWNrUkdCVG9Ob3JtYWwoIGNvbnN0IGluIHZlYzMgcmdiICkge1xuXHRyZXR1cm4gMS4wIC0gMi4wICogcmdiLnh5ejtcbn1cbmNvbnN0IGZsb2F0IFBhY2tVcHNjYWxlID0gMjU2LiAvIDI1NS47Y29uc3QgZmxvYXQgVW5wYWNrRG93bnNjYWxlID0gMjU1LiAvIDI1Ni47XG5jb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgIDI1Ni4gKTtcbmNvbnN0IHZlYzQgVW5wYWNrRmFjdG9ycyA9IFVucGFja0Rvd25zY2FsZSAvIHZlYzQoIFBhY2tGYWN0b3JzLCAxLiApO1xuY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47XG52ZWM0IHBhY2tEZXB0aFRvUkdCQSggY29uc3QgaW4gZmxvYXQgdiApIHtcblx0dmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7XG5cdHIueXp3IC09IHIueHl6ICogU2hpZnRSaWdodDg7XHRyZXR1cm4gciAqIFBhY2tVcHNjYWxlO1xufVxuZmxvYXQgdW5wYWNrUkdCQVRvRGVwdGgoIGNvbnN0IGluIHZlYzQgdiApIHtcblx0cmV0dXJuIGRvdCggdiwgVW5wYWNrRmFjdG9ycyApO1xufVxuZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCB2aWV3WiArIG5lYXIgKSAvICggbmVhciAtIGZhciApO1xufVxuZmxvYXQgb3J0aG9ncmFwaGljRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBsaW5lYXJDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7XG59XG5mbG9hdCB2aWV3WlRvUGVyc3BlY3RpdmVEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICgoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoKCBmYXIgLSBuZWFyICkgKiB2aWV3WiApO1xufVxuZmxvYXQgcGVyc3BlY3RpdmVEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGludkNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApO1xufVxuIiwKcHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudDoiI2lmZGVmIFBSRU1VTFRJUExJRURfQUxQSEFcblx0Z2xfRnJhZ0NvbG9yLnJnYiAqPSBnbF9GcmFnQ29sb3IuYTtcbiNlbmRpZlxuIixwcm9qZWN0X3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiBza2lubmVkO1xuI2Vsc2Vcblx0dmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuI2VuZGlmXG5nbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuIixkaXRoZXJpbmdfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBESVRIRVJJTkcgKVxuICBnbF9GcmFnQ29sb3IucmdiID0gZGl0aGVyaW5nKCBnbF9GcmFnQ29sb3IucmdiICk7XG4jZW5kaWZcbiIsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBESVRIRVJJTkcgKVxuXHR2ZWMzIGRpdGhlcmluZyggdmVjMyBjb2xvciApIHtcblx0XHRmbG9hdCBncmlkX3Bvc2l0aW9uID0gcmFuZCggZ2xfRnJhZ0Nvb3JkLnh5ICk7XG5cdFx0dmVjMyBkaXRoZXJfc2hpZnRfUkdCID0gdmVjMyggMC4yNSAvIDI1NS4wLCAtMC4yNSAvIDI1NS4wLCAwLjI1IC8gMjU1LjAgKTtcblx0XHRkaXRoZXJfc2hpZnRfUkdCID0gbWl4KCAyLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCAtMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgZ3JpZF9wb3NpdGlvbiApO1xuXHRcdHJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7XG5cdH1cbiNlbmRpZlxuIiwKcm91Z2huZXNzbWFwX2ZyYWdtZW50OiJmbG9hdCByb3VnaG5lc3NGYWN0b3IgPSByb3VnaG5lc3M7XG4jaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR2ZWM0IHRleGVsUm91Z2huZXNzID0gdGV4dHVyZTJEKCByb3VnaG5lc3NNYXAsIHZVdiApO1xuXHRyb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZztcbiNlbmRpZlxuIixyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgcm91Z2huZXNzTWFwO1xuI2VuZGlmIixzaGFkb3dtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVFMgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgc3BvdFNoYWRvd01hcFsgTlVNX1NQT1RfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0I2VuZGlmXG5cdGZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7XG5cdFx0cmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7XG5cdH1cblx0ZmxvYXQgdGV4dHVyZTJEU2hhZG93TGVycCggc2FtcGxlcjJEIGRlcHRocywgdmVjMiBzaXplLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkge1xuXHRcdGNvbnN0IHZlYzIgb2Zmc2V0ID0gdmVjMiggMC4wLCAxLjAgKTtcblx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2l6ZTtcblx0XHR2ZWMyIGNlbnRyb2lkVVYgPSBmbG9vciggdXYgKiBzaXplICsgMC41ICkgLyBzaXplO1xuXHRcdGZsb2F0IGxiID0gdGV4dHVyZTJEQ29tcGFyZSggZGVwdGhzLCBjZW50cm9pZFVWICsgdGV4ZWxTaXplICogb2Zmc2V0Lnh4LCBjb21wYXJlICk7XG5cdFx0ZmxvYXQgbHQgPSB0ZXh0dXJlMkRDb21wYXJlKCBkZXB0aHMsIGNlbnRyb2lkVVYgKyB0ZXhlbFNpemUgKiBvZmZzZXQueHksIGNvbXBhcmUgKTtcblx0XHRmbG9hdCByYiA9IHRleHR1cmUyRENvbXBhcmUoIGRlcHRocywgY2VudHJvaWRVViArIHRleGVsU2l6ZSAqIG9mZnNldC55eCwgY29tcGFyZSApO1xuXHRcdGZsb2F0IHJ0ID0gdGV4dHVyZTJEQ29tcGFyZSggZGVwdGhzLCBjZW50cm9pZFVWICsgdGV4ZWxTaXplICogb2Zmc2V0Lnl5LCBjb21wYXJlICk7XG5cdFx0dmVjMiBmID0gZnJhY3QoIHV2ICogc2l6ZSArIDAuNSApO1xuXHRcdGZsb2F0IGEgPSBtaXgoIGxiLCBsdCwgZi55ICk7XG5cdFx0ZmxvYXQgYiA9IG1peCggcmIsIHJ0LCBmLnkgKTtcblx0XHRmbG9hdCBjID0gbWl4KCBhLCBiLCBmLnggKTtcblx0XHRyZXR1cm4gYztcblx0fVxuXHRmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkge1xuXHRcdHNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53O1xuXHRcdHNoYWRvd0Nvb3JkLnogKz0gc2hhZG93Qmlhcztcblx0XHRidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7XG5cdFx0Ym9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApO1xuXHRcdGJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTtcblx0XHRib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApO1xuXHRcdGlmICggZnJ1c3R1bVRlc3QgKSB7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkxICksIHNoYWRvd0Nvb3JkLnogKVxuXHRcdFx0KSAqICggMS4wIC8gOS4wICk7XG5cdFx0I2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKVxuXHRcdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBkeDAgPSAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR4MSA9ICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTEgPSArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56IClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbmRpZlxuXHRcdH1cblx0XHRyZXR1cm4gMS4wO1xuXHR9XG5cdHZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHtcblx0XHR2ZWMzIGFic1YgPSBhYnMoIHYgKTtcblx0XHRmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTtcblx0XHRhYnNWICo9IHNjYWxlVG9DdWJlO1xuXHRcdHYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTtcblx0XHR2ZWMyIHBsYW5hciA9IHYueHk7XG5cdFx0ZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTtcblx0XHRmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7XG5cdFx0aWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkge1xuXHRcdFx0aWYgKCB2LnogPiAwLjAgKVxuXHRcdFx0XHRwbGFuYXIueCA9IDQuMCAtIHYueDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTtcblx0XHRcdHBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTtcblx0XHRcdHBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7XG5cdFx0XHRwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wO1xuXHRcdH1cblx0XHRyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7XG5cdH1cblx0ZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkge1xuXHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUgKiB2ZWMyKCA0LjAsIDIuMCApICk7XG5cdFx0dmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dDb29yZC54eXo7XG5cdFx0dmVjMyBiZDNEID0gbm9ybWFsaXplKCBsaWdodFRvUG9zaXRpb24gKTtcblx0XHRmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0JpYXMgKSAvIDEwMDAuMDtcblx0XHQjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKVxuXHRcdFx0dmVjMiBvZmZzZXQgPSB2ZWMyKCAtIDEsIDEgKSAqIHNoYWRvd1JhZGl1cyAqIHRleGVsU2l6ZS55O1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHgsIHRleGVsU2l6ZS55ICksIGRwIClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKTtcblx0XHQjZW5kaWZcblx0fVxuI2VuZGlmXG4iLApzaGFkb3dtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIE5VTV9ESVJfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdFx0dW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRTIF07XG5cdCNlbmRpZlxuI2VuZGlmXG4iLApzaGFkb3dtYXBfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVFMgPiAwXG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogd29ybGRQb3NpdGlvbjtcblx0fVxuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xuXHRcdHZTcG90U2hhZG93Q29vcmRbIGkgXSA9IHNwb3RTaGFkb3dNYXRyaXhbIGkgXSAqIHdvcmxkUG9zaXRpb247XG5cdH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRTID4gMFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogd29ybGRQb3NpdGlvbjtcblx0fVxuXHQjZW5kaWZcbiNlbmRpZlxuIiwKc2hhZG93bWFza19wYXJzX2ZyYWdtZW50OiJmbG9hdCBnZXRTaGFkb3dNYXNrKCkge1xuXHRmbG9hdCBzaGFkb3cgPSAxLjA7XG5cdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0RGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0O1xuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcblx0XHRzaGFkb3cgKj0gYm9vbCggZGlyZWN0aW9uYWxMaWdodC5zaGFkb3cgKSA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdFNwb3RMaWdodCBzcG90TGlnaHQ7XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07XG5cdFx0c2hhZG93ICo9IGJvb2woIHNwb3RMaWdodC5zaGFkb3cgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHR9XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0UG9pbnRMaWdodCBwb2ludExpZ2h0O1xuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdHBvaW50TGlnaHQgPSBwb2ludExpZ2h0c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSBib29sKCBwb2ludExpZ2h0LnNoYWRvdyApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHR9XG5cdCNlbmRpZlxuXHQjZW5kaWZcblx0cmV0dXJuIHNoYWRvdztcbn1cbiIsCnNraW5iYXNlX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IGJvbmVNYXRYID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnggKTtcblx0bWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7XG5cdG1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApO1xuXHRtYXQ0IGJvbmVNYXRXID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LncgKTtcbiNlbmRpZiIsc2tpbm5pbmdfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXg7XG5cdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTtcblx0I2lmZGVmIEJPTkVfVEVYVFVSRVxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGJvbmVUZXh0dXJlO1xuXHRcdHVuaWZvcm0gaW50IGJvbmVUZXh0dXJlU2l6ZTtcblx0XHRtYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7XG5cdFx0XHRmbG9hdCBqID0gaSAqIDQuMDtcblx0XHRcdGZsb2F0IHggPSBtb2QoIGosIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApO1xuXHRcdFx0ZmxvYXQgeSA9IGZsb29yKCBqIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcblx0XHRcdGZsb2F0IGR5ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0eSA9IGR5ICogKCB5ICsgMC41ICk7XG5cdFx0XHR2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYyID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAxLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYzID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAyLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7XG5cdFx0XHRtYXQ0IGJvbmUgPSBtYXQ0KCB2MSwgdjIsIHYzLCB2NCApO1xuXHRcdFx0cmV0dXJuIGJvbmU7XG5cdFx0fVxuXHQjZWxzZVxuXHRcdHVuaWZvcm0gbWF0NCBib25lTWF0cmljZXNbIE1BWF9CT05FUyBdO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdG1hdDQgYm9uZSA9IGJvbmVNYXRyaWNlc1sgaW50KGkpIF07XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbmRpZlxuI2VuZGlmXG4iLApza2lubmluZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dmVjNCBza2luVmVydGV4ID0gYmluZE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcblx0dmVjNCBza2lubmVkID0gdmVjNCggMC4wICk7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54O1xuXHRza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTtcblx0c2tpbm5lZCArPSBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53O1xuXHRza2lubmVkICA9IGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbm5lZDtcbiNlbmRpZlxuIixza2lubm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnkgKiBib25lTWF0WTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0Wjtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0Vztcblx0c2tpbk1hdHJpeCAgPSBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4O1xuXHRvYmplY3ROb3JtYWwgPSB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0Tm9ybWFsLCAwLjAgKSApLnh5ejtcbiNlbmRpZlxuIiwKc3BlY3VsYXJtYXBfZnJhZ21lbnQ6ImZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG4jaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHZlYzQgdGV4ZWxTcGVjdWxhciA9IHRleHR1cmUyRCggc3BlY3VsYXJNYXAsIHZVdiApO1xuXHRzcGVjdWxhclN0cmVuZ3RoID0gdGV4ZWxTcGVjdWxhci5yO1xuI2Vsc2Vcblx0c3BlY3VsYXJTdHJlbmd0aCA9IDEuMDtcbiNlbmRpZiIsc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9TUEVDVUxBUk1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhck1hcDtcbiNlbmRpZiIsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBUT05FX01BUFBJTkcgKVxuICBnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZlxuIix0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIjZGVmaW5lIHNhdHVyYXRlKGEpIGNsYW1wKCBhLCAwLjAsIDEuMCApXG51bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG51bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nV2hpdGVQb2ludDtcbnZlYzMgTGluZWFyVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdHJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7XG59XG52ZWMzIFJlaW5oYXJkVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdHJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApO1xufVxuI2RlZmluZSBVbmNoYXJ0ZWQySGVscGVyKCB4ICkgbWF4KCAoICggeCAqICggMC4xNSAqIHggKyAwLjEwICogMC41MCApICsgMC4yMCAqIDAuMDIgKSAvICggeCAqICggMC4xNSAqIHggKyAwLjUwICkgKyAwLjIwICogMC4zMCApICkgLSAwLjAyIC8gMC4zMCwgdmVjMyggMC4wICkgKVxudmVjMyBVbmNoYXJ0ZWQyVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdHJldHVybiBzYXR1cmF0ZSggVW5jaGFydGVkMkhlbHBlciggY29sb3IgKSAvIFVuY2hhcnRlZDJIZWxwZXIoIHZlYzMoIHRvbmVNYXBwaW5nV2hpdGVQb2ludCApICkgKTtcbn1cbnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdGNvbG9yID0gbWF4KCB2ZWMzKCAwLjAgKSwgY29sb3IgLSAwLjAwNCApO1xuXHRyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApO1xufVxuIiwKdXZfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfU1BFQ1VMQVJNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKSB8fCBkZWZpbmVkKCBVU0VfRU1JU1NJVkVNQVAgKSB8fCBkZWZpbmVkKCBVU0VfUk9VR0hORVNTTUFQICkgfHwgZGVmaW5lZCggVVNFX01FVEFMTkVTU01BUCApXG5cdHZhcnlpbmcgdmVjMiB2VXY7XG4jZW5kaWYiLHV2X3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9TUEVDVUxBUk1BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApIHx8IGRlZmluZWQoIFVTRV9FTUlTU0lWRU1BUCApIHx8IGRlZmluZWQoIFVTRV9ST1VHSE5FU1NNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTUVUQUxORVNTTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjtcblx0dW5pZm9ybSB2ZWM0IG9mZnNldFJlcGVhdDtcbiNlbmRpZlxuIiwKdXZfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9TUEVDVUxBUk1BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApIHx8IGRlZmluZWQoIFVTRV9FTUlTU0lWRU1BUCApIHx8IGRlZmluZWQoIFVTRV9ST1VHSE5FU1NNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTUVUQUxORVNTTUFQIClcblx0dlV2ID0gdXYgKiBvZmZzZXRSZXBlYXQuencgKyBvZmZzZXRSZXBlYXQueHk7XG4jZW5kaWYiLHV2Ml9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLHV2Ml9wYXJzX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdGF0dHJpYnV0ZSB2ZWMyIHV2Mjtcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLAp1djJfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dlV2MiA9IHV2MjtcbiNlbmRpZiIsd29ybGRwb3NfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQoIFBIT05HICkgfHwgZGVmaW5lZCggUEhZU0lDQUwgKSB8fCBkZWZpbmVkKCBMQU1CRVJUICkgfHwgZGVmaW5lZCAoIFVTRV9TSEFET1dNQVAgKVxuXHQjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdFx0dmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWxNYXRyaXggKiBza2lubmVkO1xuXHQjZWxzZVxuXHRcdHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHQjZW5kaWZcbiNlbmRpZlxuIixjdWJlX2ZyYWc6InVuaWZvcm0gc2FtcGxlckN1YmUgdEN1YmU7XG51bmlmb3JtIGZsb2F0IHRGbGlwO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZUN1YmUoIHRDdWJlLCB2ZWMzKCB0RmxpcCAqIHZXb3JsZFBvc2l0aW9uLngsIHZXb3JsZFBvc2l0aW9uLnl6ICkgKTtcblx0Z2xfRnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTtcbn1cbiIsCmN1YmVfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0dldvcmxkUG9zaXRpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG59XG4iLGRlcHRoX2ZyYWc6IiNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0dW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7XG5cdCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0XHRkaWZmdXNlQ29sb3IuYSA9IG9wYWNpdHk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIGdsX0ZyYWdDb29yZC56ICksIG9wYWNpdHkgKTtcblx0I2VsaWYgREVQVEhfUEFDS0lORyA9PSAzMjAxXG5cdFx0Z2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBnbF9GcmFnQ29vcmQueiApO1xuXHQjZW5kaWZcbn1cbiIsCmRlcHRoX3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG59XG4iLApkaXN0YW5jZVJHQkFfZnJhZzoidW5pZm9ybSB2ZWMzIGxpZ2h0UG9zO1xudmFyeWluZyB2ZWM0IHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluICgpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBsZW5ndGgoIHZXb3JsZFBvc2l0aW9uLnh5eiAtIGxpZ2h0UG9zLnh5eiApIC8gMTAwMC4wICk7XG59XG4iLGRpc3RhbmNlUkdCQV92ZXJ0OiJ2YXJ5aW5nIHZlYzQgdldvcmxkUG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uO1xufVxuIiwKZXF1aXJlY3RfZnJhZzoidW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xudW5pZm9ybSBmbG9hdCB0RmxpcDtcbnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiApO1xuXHR2ZWMyIHNhbXBsZVVWO1xuXHRzYW1wbGVVVi55ID0gc2F0dXJhdGUoIHRGbGlwICogZGlyZWN0aW9uLnkgKiAtMC41ICsgMC41ICk7XG5cdHNhbXBsZVVWLnggPSBhdGFuKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnggKSAqIFJFQ0lQUk9DQUxfUEkyICsgMC41O1xuXHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTtcbn1cbiIsZXF1aXJlY3RfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0dldvcmxkUG9zaXRpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG59XG4iLApsaW5lZGFzaGVkX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTaXplO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdGlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkge1xuXHRcdGRpc2NhcmQ7XG5cdH1cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59XG4iLApsaW5lZGFzaGVkX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2NhbGU7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZURpc3RhbmNlO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHR2TGluZURpc3RhbmNlID0gc2NhbGUgKiBsaW5lRGlzdGFuY2U7XG5cdHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufVxuIiwKbWVzaGJhc2ljX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKS54eXogKiBsaWdodE1hcEludGVuc2l0eTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdCNpbmNsdWRlIDxub3JtYWxfZmxpcD5cblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cbn1cbiIsCm1lc2hiYXNpY192ZXJ0OiIjaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufVxuIiwKbWVzaGxhbWJlcnRfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnM+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHQjaW5jbHVkZSA8bGlnaHRtYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0RpZmZ1c2VfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApO1xuXHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZMaWdodEZyb250IDogdkxpZ2h0QmFjaztcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gdkxpZ2h0RnJvbnQ7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICo9IEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPG5vcm1hbF9mbGlwPlxuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufVxuIiwKbWVzaGxhbWJlcnRfdmVydDoiI2RlZmluZSBMQU1CRVJUXG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnM+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn1cbiIsCm1lc2hwaG9uZ19mcmFnOiIjZGVmaW5lIFBIT05HXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gdmVjMyBzcGVjdWxhcjtcbnVuaWZvcm0gZmxvYXQgc2hpbmluZXNzO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnM+XG4jaW5jbHVkZSA8bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mbGlwPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfcGhvbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfdGVtcGxhdGU+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn1cbiIsCm1lc2hwaG9uZ192ZXJ0OiIjZGVmaW5lIFBIT05HXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbiNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59XG4iLAptZXNocGh5c2ljYWxfZnJhZzoiI2RlZmluZSBQSFlTSUNBTFxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcztcbnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBTVEFOREFSRFxuXHR1bmlmb3JtIGZsb2F0IGNsZWFyQ29hdDtcblx0dW5pZm9ybSBmbG9hdCBjbGVhckNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfcGFycz5cbiNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8cm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mbGlwPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfdGVtcGxhdGU+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn1cbiIsCm1lc2hwaHlzaWNhbF92ZXJ0OiIjZGVmaW5lIFBIWVNJQ0FMXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59XG4iLApub3JtYWxfZnJhZzoiI2RlZmluZSBOT1JNQUxcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmXG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZmxpcD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggcGFja05vcm1hbFRvUkdCKCBub3JtYWwgKSwgb3BhY2l0eSApO1xufVxuIiwKbm9ybWFsX3ZlcnQ6IiNkZWZpbmUgTk9STUFMXG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKVxuXHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNlbmRpZlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApXG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuI2VuZGlmXG59XG4iLApwb2ludHNfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cbn1cbiIsCnBvaW50c192ZXJ0OiJ1bmlmb3JtIGZsb2F0IHNpemU7XG51bmlmb3JtIGZsb2F0IHNjYWxlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaWZkZWYgVVNFX1NJWkVBVFRFTlVBVElPTlxuXHRcdGdsX1BvaW50U2l6ZSA9IHNpemUgKiAoIHNjYWxlIC8gLSBtdlBvc2l0aW9uLnogKTtcblx0I2Vsc2Vcblx0XHRnbF9Qb2ludFNpemUgPSBzaXplO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn1cbiIsCnNoYWRvd19mcmFnOiJ1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnM+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAwLjAsIDAuMCwgMC4wLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xufVxuIixzaGFkb3dfdmVydDoiI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cbn1cbiJ9LGFiPXtiYXNpYzp7dW5pZm9ybXM6SGEubWVyZ2UoW1YuY29tbW9uLApWLmFvbWFwLFYubGlnaHRtYXAsVi5mb2ddKSx2ZXJ0ZXhTaGFkZXI6VS5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpVLm1lc2hiYXNpY19mcmFnfSxsYW1iZXJ0Ont1bmlmb3JtczpIYS5tZXJnZShbVi5jb21tb24sVi5hb21hcCxWLmxpZ2h0bWFwLFYuZW1pc3NpdmVtYXAsVi5mb2csVi5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgSCgwKX19XSksdmVydGV4U2hhZGVyOlUubWVzaGxhbWJlcnRfdmVydCxmcmFnbWVudFNoYWRlcjpVLm1lc2hsYW1iZXJ0X2ZyYWd9LHBob25nOnt1bmlmb3JtczpIYS5tZXJnZShbVi5jb21tb24sVi5hb21hcCxWLmxpZ2h0bWFwLFYuZW1pc3NpdmVtYXAsVi5idW1wbWFwLFYubm9ybWFsbWFwLFYuZGlzcGxhY2VtZW50bWFwLFYuZ3JhZGllbnRtYXAsVi5mb2csVi5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgSCgwKX0sc3BlY3VsYXI6e3ZhbHVlOm5ldyBIKDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6VS5tZXNocGhvbmdfdmVydCwKZnJhZ21lbnRTaGFkZXI6VS5tZXNocGhvbmdfZnJhZ30sc3RhbmRhcmQ6e3VuaWZvcm1zOkhhLm1lcmdlKFtWLmNvbW1vbixWLmFvbWFwLFYubGlnaHRtYXAsVi5lbWlzc2l2ZW1hcCxWLmJ1bXBtYXAsVi5ub3JtYWxtYXAsVi5kaXNwbGFjZW1lbnRtYXAsVi5yb3VnaG5lc3NtYXAsVi5tZXRhbG5lc3NtYXAsVi5mb2csVi5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgSCgwKX0scm91Z2huZXNzOnt2YWx1ZTouNX0sbWV0YWxuZXNzOnt2YWx1ZTouNX0sZW52TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6VS5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpVLm1lc2hwaHlzaWNhbF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOkhhLm1lcmdlKFtWLnBvaW50cyxWLmZvZ10pLHZlcnRleFNoYWRlcjpVLnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOlUucG9pbnRzX2ZyYWd9LGRhc2hlZDp7dW5pZm9ybXM6SGEubWVyZ2UoW1YuY29tbW9uLFYuZm9nLHtzY2FsZTp7dmFsdWU6MX0sCmRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjpVLmxpbmVkYXNoZWRfdmVydCxmcmFnbWVudFNoYWRlcjpVLmxpbmVkYXNoZWRfZnJhZ30sZGVwdGg6e3VuaWZvcm1zOkhhLm1lcmdlKFtWLmNvbW1vbixWLmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpVLmRlcHRoX3ZlcnQsZnJhZ21lbnRTaGFkZXI6VS5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOkhhLm1lcmdlKFtWLmNvbW1vbixWLmJ1bXBtYXAsVi5ub3JtYWxtYXAsVi5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpVLm5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOlUubm9ybWFsX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOnt0Q3ViZTp7dmFsdWU6bnVsbH0sdEZsaXA6e3ZhbHVlOi0xfSxvcGFjaXR5Ont2YWx1ZToxfX0sdmVydGV4U2hhZGVyOlUuY3ViZV92ZXJ0LGZyYWdtZW50U2hhZGVyOlUuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH0sCnRGbGlwOnt2YWx1ZTotMX19LHZlcnRleFNoYWRlcjpVLmVxdWlyZWN0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6VS5lcXVpcmVjdF9mcmFnfSxkaXN0YW5jZVJHQkE6e3VuaWZvcm1zOntsaWdodFBvczp7dmFsdWU6bmV3IHB9fSx2ZXJ0ZXhTaGFkZXI6VS5kaXN0YW5jZVJHQkFfdmVydCxmcmFnbWVudFNoYWRlcjpVLmRpc3RhbmNlUkdCQV9mcmFnfX07YWIucGh5c2ljYWw9e3VuaWZvcm1zOkhhLm1lcmdlKFthYi5zdGFuZGFyZC51bmlmb3Jtcyx7Y2xlYXJDb2F0Ont2YWx1ZTowfSxjbGVhckNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9fV0pLHZlcnRleFNoYWRlcjpVLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOlUubWVzaHBoeXNpY2FsX2ZyYWd9O09iamVjdC5hc3NpZ24oaWQucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLm1pbi5jb3B5KGEpO3RoaXMubWF4LmNvcHkoYik7cmV0dXJuIHRoaXN9LHNldEZyb21Qb2ludHM6ZnVuY3Rpb24oYSl7dGhpcy5tYWtlRW1wdHkoKTsKZm9yKHZhciBiPTAsYz1hLmxlbmd0aDtiPGM7YisrKXRoaXMuZXhwYW5kQnlQb2ludChhW2JdKTtyZXR1cm4gdGhpc30sc2V0RnJvbUNlbnRlckFuZFNpemU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgRDtyZXR1cm4gZnVuY3Rpb24oYixjKXt2YXIgZD1hLmNvcHkoYykubXVsdGlwbHlTY2FsYXIoLjUpO3RoaXMubWluLmNvcHkoYikuc3ViKGQpO3RoaXMubWF4LmNvcHkoYikuYWRkKGQpO3JldHVybiB0aGlzfX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLm1pbi5jb3B5KGEubWluKTt0aGlzLm1heC5jb3B5KGEubWF4KTtyZXR1cm4gdGhpc30sbWFrZUVtcHR5OmZ1bmN0aW9uKCl7dGhpcy5taW4ueD10aGlzLm1pbi55PUluZmluaXR5O3RoaXMubWF4Lng9dGhpcy5tYXgueT0tSW5maW5pdHk7cmV0dXJuIHRoaXN9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHwKdGhpcy5tYXgueTx0aGlzLm1pbi55fSxnZXRDZW50ZXI6ZnVuY3Rpb24oYSl7YT1hfHxuZXcgRDtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/YS5zZXQoMCwwKTphLmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX0sZ2V0U2l6ZTpmdW5jdGlvbihhKXthPWF8fG5ldyBEO3JldHVybiB0aGlzLmlzRW1wdHkoKT9hLnNldCgwLDApOmEuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9LGV4cGFuZEJ5UG9pbnQ6ZnVuY3Rpb24oYSl7dGhpcy5taW4ubWluKGEpO3RoaXMubWF4Lm1heChhKTtyZXR1cm4gdGhpc30sZXhwYW5kQnlWZWN0b3I6ZnVuY3Rpb24oYSl7dGhpcy5taW4uc3ViKGEpO3RoaXMubWF4LmFkZChhKTtyZXR1cm4gdGhpc30sZXhwYW5kQnlTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy5taW4uYWRkU2NhbGFyKC1hKTt0aGlzLm1heC5hZGRTY2FsYXIoYSk7cmV0dXJuIHRoaXN9LGNvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEueDwKdGhpcy5taW4ueHx8YS54PnRoaXMubWF4Lnh8fGEueTx0aGlzLm1pbi55fHxhLnk+dGhpcy5tYXgueT8hMTohMH0sY29udGFpbnNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubWluLng8PWEubWluLngmJmEubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PWEubWluLnkmJmEubWF4Lnk8PXRoaXMubWF4Lnl9LGdldFBhcmFtZXRlcjpmdW5jdGlvbihhLGIpe3JldHVybihifHxuZXcgRCkuc2V0KChhLngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKGEueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSl9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWF4Lng8dGhpcy5taW4ueHx8YS5taW4ueD50aGlzLm1heC54fHxhLm1heC55PHRoaXMubWluLnl8fGEubWluLnk+dGhpcy5tYXgueT8hMTohMH0sY2xhbXBQb2ludDpmdW5jdGlvbihhLGIpe3JldHVybihifHxuZXcgRCkuY29weShhKS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9LApkaXN0YW5jZVRvUG9pbnQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgRDtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGEuY29weShiKS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKGIpLmxlbmd0aCgpfX0oKSxpbnRlcnNlY3Q6ZnVuY3Rpb24oYSl7dGhpcy5taW4ubWF4KGEubWluKTt0aGlzLm1heC5taW4oYS5tYXgpO3JldHVybiB0aGlzfSx1bmlvbjpmdW5jdGlvbihhKXt0aGlzLm1pbi5taW4oYS5taW4pO3RoaXMubWF4Lm1heChhLm1heCk7cmV0dXJuIHRoaXN9LHRyYW5zbGF0ZTpmdW5jdGlvbihhKXt0aGlzLm1pbi5hZGQoYSk7dGhpcy5tYXguYWRkKGEpO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWluLmVxdWFscyh0aGlzLm1pbikmJmEubWF4LmVxdWFscyh0aGlzLm1heCl9fSk7dmFyIEtmPTA7T2JqZWN0LmFzc2lnbihaLnByb3RvdHlwZSxzYS5wcm90b3R5cGUse2lzTWF0ZXJpYWw6ITAsc2V0VmFsdWVzOmZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PQphKWZvcih2YXIgYiBpbiBhKXt2YXIgYz1hW2JdO2lmKHZvaWQgMD09PWMpY29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrYisiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2Vsc2V7dmFyIGQ9dGhpc1tiXTt2b2lkIDA9PT1kP2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogJyIrYisiJyBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGlzIG1hdGVyaWFsLiIpOmQmJmQuaXNDb2xvcj9kLnNldChjKTpkJiZkLmlzVmVjdG9yMyYmYyYmYy5pc1ZlY3RvcjM/ZC5jb3B5KGMpOnRoaXNbYl09Im92ZXJkcmF3Ij09PWI/TnVtYmVyKGMpOmN9fX0sdG9KU09OOmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSl7dmFyIGI9W10sYztmb3IoYyBpbiBhKXt2YXIgZD1hW2NdO2RlbGV0ZSBkLm1ldGFkYXRhO2IucHVzaChkKX1yZXR1cm4gYn12YXIgYz12b2lkIDA9PT1hO2MmJihhPXt0ZXh0dXJlczp7fSxpbWFnZXM6e319KTt2YXIgZD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6Ik1hdGVyaWFsIiwKZ2VuZXJhdG9yOiJNYXRlcmlhbC50b0pTT04ifX07ZC51dWlkPXRoaXMudXVpZDtkLnR5cGU9dGhpcy50eXBlOyIiIT09dGhpcy5uYW1lJiYoZC5uYW1lPXRoaXMubmFtZSk7dGhpcy5jb2xvciYmdGhpcy5jb2xvci5pc0NvbG9yJiYoZC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpKTt2b2lkIDAhPT10aGlzLnJvdWdobmVzcyYmKGQucm91Z2huZXNzPXRoaXMucm91Z2huZXNzKTt2b2lkIDAhPT10aGlzLm1ldGFsbmVzcyYmKGQubWV0YWxuZXNzPXRoaXMubWV0YWxuZXNzKTt0aGlzLmVtaXNzaXZlJiZ0aGlzLmVtaXNzaXZlLmlzQ29sb3ImJihkLmVtaXNzaXZlPXRoaXMuZW1pc3NpdmUuZ2V0SGV4KCkpO3RoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKGQuc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSk7dm9pZCAwIT09dGhpcy5zaGluaW5lc3MmJihkLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyk7dm9pZCAwIT09dGhpcy5jbGVhckNvYXQmJihkLmNsZWFyQ29hdD0KdGhpcy5jbGVhckNvYXQpO3ZvaWQgMCE9PXRoaXMuY2xlYXJDb2F0Um91Z2huZXNzJiYoZC5jbGVhckNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhckNvYXRSb3VnaG5lc3MpO3RoaXMubWFwJiZ0aGlzLm1hcC5pc1RleHR1cmUmJihkLm1hcD10aGlzLm1hcC50b0pTT04oYSkudXVpZCk7dGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihkLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKGEpLnV1aWQpO3RoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYoZC5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTihhKS51dWlkKTt0aGlzLmJ1bXBNYXAmJnRoaXMuYnVtcE1hcC5pc1RleHR1cmUmJihkLmJ1bXBNYXA9dGhpcy5idW1wTWFwLnRvSlNPTihhKS51dWlkLGQuYnVtcFNjYWxlPXRoaXMuYnVtcFNjYWxlKTt0aGlzLm5vcm1hbE1hcCYmdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlJiYoZC5ub3JtYWxNYXA9dGhpcy5ub3JtYWxNYXAudG9KU09OKGEpLnV1aWQsCmQubm9ybWFsU2NhbGU9dGhpcy5ub3JtYWxTY2FsZS50b0FycmF5KCkpO3RoaXMuZGlzcGxhY2VtZW50TWFwJiZ0aGlzLmRpc3BsYWNlbWVudE1hcC5pc1RleHR1cmUmJihkLmRpc3BsYWNlbWVudE1hcD10aGlzLmRpc3BsYWNlbWVudE1hcC50b0pTT04oYSkudXVpZCxkLmRpc3BsYWNlbWVudFNjYWxlPXRoaXMuZGlzcGxhY2VtZW50U2NhbGUsZC5kaXNwbGFjZW1lbnRCaWFzPXRoaXMuZGlzcGxhY2VtZW50Qmlhcyk7dGhpcy5yb3VnaG5lc3NNYXAmJnRoaXMucm91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKGQucm91Z2huZXNzTWFwPXRoaXMucm91Z2huZXNzTWFwLnRvSlNPTihhKS51dWlkKTt0aGlzLm1ldGFsbmVzc01hcCYmdGhpcy5tZXRhbG5lc3NNYXAuaXNUZXh0dXJlJiYoZC5tZXRhbG5lc3NNYXA9dGhpcy5tZXRhbG5lc3NNYXAudG9KU09OKGEpLnV1aWQpO3RoaXMuZW1pc3NpdmVNYXAmJnRoaXMuZW1pc3NpdmVNYXAuaXNUZXh0dXJlJiYoZC5lbWlzc2l2ZU1hcD10aGlzLmVtaXNzaXZlTWFwLnRvSlNPTihhKS51dWlkKTsKdGhpcy5zcGVjdWxhck1hcCYmdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUmJihkLnNwZWN1bGFyTWFwPXRoaXMuc3BlY3VsYXJNYXAudG9KU09OKGEpLnV1aWQpO3RoaXMuZW52TWFwJiZ0aGlzLmVudk1hcC5pc1RleHR1cmUmJihkLmVudk1hcD10aGlzLmVudk1hcC50b0pTT04oYSkudXVpZCxkLnJlZmxlY3Rpdml0eT10aGlzLnJlZmxlY3Rpdml0eSk7dGhpcy5ncmFkaWVudE1hcCYmdGhpcy5ncmFkaWVudE1hcC5pc1RleHR1cmUmJihkLmdyYWRpZW50TWFwPXRoaXMuZ3JhZGllbnRNYXAudG9KU09OKGEpLnV1aWQpO3ZvaWQgMCE9PXRoaXMuc2l6ZSYmKGQuc2l6ZT10aGlzLnNpemUpO3ZvaWQgMCE9PXRoaXMuc2l6ZUF0dGVudWF0aW9uJiYoZC5zaXplQXR0ZW51YXRpb249dGhpcy5zaXplQXR0ZW51YXRpb24pOzEhPT10aGlzLmJsZW5kaW5nJiYoZC5ibGVuZGluZz10aGlzLmJsZW5kaW5nKTsyIT09dGhpcy5zaGFkaW5nJiYoZC5zaGFkaW5nPXRoaXMuc2hhZGluZyk7MCE9PXRoaXMuc2lkZSYmCihkLnNpZGU9dGhpcy5zaWRlKTswIT09dGhpcy52ZXJ0ZXhDb2xvcnMmJihkLnZlcnRleENvbG9ycz10aGlzLnZlcnRleENvbG9ycyk7MT50aGlzLm9wYWNpdHkmJihkLm9wYWNpdHk9dGhpcy5vcGFjaXR5KTshMD09PXRoaXMudHJhbnNwYXJlbnQmJihkLnRyYW5zcGFyZW50PXRoaXMudHJhbnNwYXJlbnQpO2QuZGVwdGhGdW5jPXRoaXMuZGVwdGhGdW5jO2QuZGVwdGhUZXN0PXRoaXMuZGVwdGhUZXN0O2QuZGVwdGhXcml0ZT10aGlzLmRlcHRoV3JpdGU7MDx0aGlzLmFscGhhVGVzdCYmKGQuYWxwaGFUZXN0PXRoaXMuYWxwaGFUZXN0KTshMD09PXRoaXMucHJlbXVsdGlwbGllZEFscGhhJiYoZC5wcmVtdWx0aXBsaWVkQWxwaGE9dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEpOyEwPT09dGhpcy53aXJlZnJhbWUmJihkLndpcmVmcmFtZT10aGlzLndpcmVmcmFtZSk7MTx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCYmKGQud2lyZWZyYW1lTGluZXdpZHRoPXRoaXMud2lyZWZyYW1lTGluZXdpZHRoKTsKInJvdW5kIiE9PXRoaXMud2lyZWZyYW1lTGluZWNhcCYmKGQud2lyZWZyYW1lTGluZWNhcD10aGlzLndpcmVmcmFtZUxpbmVjYXApOyJyb3VuZCIhPT10aGlzLndpcmVmcmFtZUxpbmVqb2luJiYoZC53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVqb2luKTtkLnNraW5uaW5nPXRoaXMuc2tpbm5pbmc7ZC5tb3JwaFRhcmdldHM9dGhpcy5tb3JwaFRhcmdldHM7ZC5kaXRoZXJpbmc9dGhpcy5kaXRoZXJpbmc7YyYmKGM9YihhLnRleHR1cmVzKSxhPWIoYS5pbWFnZXMpLDA8Yy5sZW5ndGgmJihkLnRleHR1cmVzPWMpLDA8YS5sZW5ndGgmJihkLmltYWdlcz1hKSk7cmV0dXJuIGR9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMubmFtZT1hLm5hbWU7dGhpcy5mb2c9YS5mb2c7dGhpcy5saWdodHM9YS5saWdodHM7dGhpcy5ibGVuZGluZz1hLmJsZW5kaW5nO3RoaXMuc2lkZT1hLnNpZGU7CnRoaXMuc2hhZGluZz1hLnNoYWRpbmc7dGhpcy52ZXJ0ZXhDb2xvcnM9YS52ZXJ0ZXhDb2xvcnM7dGhpcy5vcGFjaXR5PWEub3BhY2l0eTt0aGlzLnRyYW5zcGFyZW50PWEudHJhbnNwYXJlbnQ7dGhpcy5ibGVuZFNyYz1hLmJsZW5kU3JjO3RoaXMuYmxlbmREc3Q9YS5ibGVuZERzdDt0aGlzLmJsZW5kRXF1YXRpb249YS5ibGVuZEVxdWF0aW9uO3RoaXMuYmxlbmRTcmNBbHBoYT1hLmJsZW5kU3JjQWxwaGE7dGhpcy5ibGVuZERzdEFscGhhPWEuYmxlbmREc3RBbHBoYTt0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT1hLmJsZW5kRXF1YXRpb25BbHBoYTt0aGlzLmRlcHRoRnVuYz1hLmRlcHRoRnVuYzt0aGlzLmRlcHRoVGVzdD1hLmRlcHRoVGVzdDt0aGlzLmRlcHRoV3JpdGU9YS5kZXB0aFdyaXRlO3RoaXMuY29sb3JXcml0ZT1hLmNvbG9yV3JpdGU7dGhpcy5wcmVjaXNpb249YS5wcmVjaXNpb247dGhpcy5wb2x5Z29uT2Zmc2V0PWEucG9seWdvbk9mZnNldDt0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9CmEucG9seWdvbk9mZnNldEZhY3Rvcjt0aGlzLnBvbHlnb25PZmZzZXRVbml0cz1hLnBvbHlnb25PZmZzZXRVbml0czt0aGlzLmRpdGhlcmluZz1hLmRpdGhlcmluZzt0aGlzLmFscGhhVGVzdD1hLmFscGhhVGVzdDt0aGlzLnByZW11bHRpcGxpZWRBbHBoYT1hLnByZW11bHRpcGxpZWRBbHBoYTt0aGlzLm92ZXJkcmF3PWEub3ZlcmRyYXc7dGhpcy52aXNpYmxlPWEudmlzaWJsZTt0aGlzLmNsaXBTaGFkb3dzPWEuY2xpcFNoYWRvd3M7dGhpcy5jbGlwSW50ZXJzZWN0aW9uPWEuY2xpcEludGVyc2VjdGlvbjthPWEuY2xpcHBpbmdQbGFuZXM7dmFyIGI9bnVsbDtpZihudWxsIT09YSlmb3IodmFyIGM9YS5sZW5ndGgsYj1BcnJheShjKSxkPTA7ZCE9PWM7KytkKWJbZF09YVtkXS5jbG9uZSgpO3RoaXMuY2xpcHBpbmdQbGFuZXM9YjtyZXR1cm4gdGhpc30sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KTtFYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShaLnByb3RvdHlwZSk7CkVhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FYTtFYS5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMDtFYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtaLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLmZyYWdtZW50U2hhZGVyPWEuZnJhZ21lbnRTaGFkZXI7dGhpcy52ZXJ0ZXhTaGFkZXI9YS52ZXJ0ZXhTaGFkZXI7dGhpcy51bmlmb3Jtcz1IYS5jbG9uZShhLnVuaWZvcm1zKTt0aGlzLmRlZmluZXM9YS5kZWZpbmVzO3RoaXMud2lyZWZyYW1lPWEud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWEud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMubGlnaHRzPWEubGlnaHRzO3RoaXMuY2xpcHBpbmc9YS5jbGlwcGluZzt0aGlzLnNraW5uaW5nPWEuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9YS5tb3JwaFRhcmdldHM7dGhpcy5tb3JwaE5vcm1hbHM9YS5tb3JwaE5vcm1hbHM7dGhpcy5leHRlbnNpb25zPWEuZXh0ZW5zaW9ucztyZXR1cm4gdGhpc307RWEucHJvdG90eXBlLnRvSlNPTj0KZnVuY3Rpb24oYSl7YT1aLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGEpO2EudW5pZm9ybXM9dGhpcy51bmlmb3JtczthLnZlcnRleFNoYWRlcj10aGlzLnZlcnRleFNoYWRlcjthLmZyYWdtZW50U2hhZGVyPXRoaXMuZnJhZ21lbnRTaGFkZXI7cmV0dXJuIGF9OyRhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTskYS5wcm90b3R5cGUuY29uc3RydWN0b3I9JGE7JGEucHJvdG90eXBlLmlzTWVzaERlcHRoTWF0ZXJpYWw9ITA7JGEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5kZXB0aFBhY2tpbmc9YS5kZXB0aFBhY2tpbmc7dGhpcy5za2lubmluZz1hLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWEubW9ycGhUYXJnZXRzO3RoaXMubWFwPWEubWFwO3RoaXMuYWxwaGFNYXA9YS5hbHBoYU1hcDt0aGlzLmRpc3BsYWNlbWVudE1hcD1hLmRpc3BsYWNlbWVudE1hcDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPQphLmRpc3BsYWNlbWVudFNjYWxlO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz1hLmRpc3BsYWNlbWVudEJpYXM7dGhpcy53aXJlZnJhbWU9YS53aXJlZnJhbWU7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9YS53aXJlZnJhbWVMaW5ld2lkdGg7cmV0dXJuIHRoaXN9O09iamVjdC5hc3NpZ24oVGEucHJvdG90eXBlLHtpc0JveDM6ITAsc2V0OmZ1bmN0aW9uKGEsYil7dGhpcy5taW4uY29weShhKTt0aGlzLm1heC5jb3B5KGIpO3JldHVybiB0aGlzfSxzZXRGcm9tQXJyYXk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPUluZmluaXR5LGM9SW5maW5pdHksZD1JbmZpbml0eSxlPS1JbmZpbml0eSxmPS1JbmZpbml0eSxnPS1JbmZpbml0eSxoPTAsaz1hLmxlbmd0aDtoPGs7aCs9Myl7dmFyIG09YVtoXSxsPWFbaCsxXSxxPWFbaCsyXTttPGImJihiPW0pO2w8YyYmKGM9bCk7cTxkJiYoZD1xKTttPmUmJihlPW0pO2w+ZiYmKGY9bCk7cT5nJiYoZz1xKX10aGlzLm1pbi5zZXQoYixjLGQpO3RoaXMubWF4LnNldChlLApmLGcpO3JldHVybiB0aGlzfSxzZXRGcm9tQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1JbmZpbml0eSxjPUluZmluaXR5LGQ9SW5maW5pdHksZT0tSW5maW5pdHksZj0tSW5maW5pdHksZz0tSW5maW5pdHksaD0wLGs9YS5jb3VudDtoPGs7aCsrKXt2YXIgbT1hLmdldFgoaCksbD1hLmdldFkoaCkscT1hLmdldFooaCk7bTxiJiYoYj1tKTtsPGMmJihjPWwpO3E8ZCYmKGQ9cSk7bT5lJiYoZT1tKTtsPmYmJihmPWwpO3E+ZyYmKGc9cSl9dGhpcy5taW4uc2V0KGIsYyxkKTt0aGlzLm1heC5zZXQoZSxmLGcpO3JldHVybiB0aGlzfSxzZXRGcm9tUG9pbnRzOmZ1bmN0aW9uKGEpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aDtiPGM7YisrKXRoaXMuZXhwYW5kQnlQb2ludChhW2JdKTtyZXR1cm4gdGhpc30sc2V0RnJvbUNlbnRlckFuZFNpemU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYixjKXt2YXIgZD1hLmNvcHkoYykubXVsdGlwbHlTY2FsYXIoLjUpOwp0aGlzLm1pbi5jb3B5KGIpLnN1YihkKTt0aGlzLm1heC5jb3B5KGIpLmFkZChkKTtyZXR1cm4gdGhpc319KCksc2V0RnJvbU9iamVjdDpmdW5jdGlvbihhKXt0aGlzLm1ha2VFbXB0eSgpO3JldHVybiB0aGlzLmV4cGFuZEJ5T2JqZWN0KGEpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLm1pbi5jb3B5KGEubWluKTt0aGlzLm1heC5jb3B5KGEubWF4KTtyZXR1cm4gdGhpc30sbWFrZUVtcHR5OmZ1bmN0aW9uKCl7dGhpcy5taW4ueD10aGlzLm1pbi55PXRoaXMubWluLno9SW5maW5pdHk7dGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LUluZmluaXR5O3JldHVybiB0aGlzfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fHx0aGlzLm1heC56PHRoaXMubWluLnp9LGdldENlbnRlcjpmdW5jdGlvbihhKXthPQphfHxuZXcgcDtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/YS5zZXQoMCwwLDApOmEuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfSxnZXRTaXplOmZ1bmN0aW9uKGEpe2E9YXx8bmV3IHA7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP2Euc2V0KDAsMCwwKTphLnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfSxleHBhbmRCeVBvaW50OmZ1bmN0aW9uKGEpe3RoaXMubWluLm1pbihhKTt0aGlzLm1heC5tYXgoYSk7cmV0dXJuIHRoaXN9LGV4cGFuZEJ5VmVjdG9yOmZ1bmN0aW9uKGEpe3RoaXMubWluLnN1YihhKTt0aGlzLm1heC5hZGQoYSk7cmV0dXJuIHRoaXN9LGV4cGFuZEJ5U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMubWluLmFkZFNjYWxhcigtYSk7dGhpcy5tYXguYWRkU2NhbGFyKGEpO3JldHVybiB0aGlzfSxleHBhbmRCeU9iamVjdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz10aGlzO2IudXBkYXRlTWF0cml4V29ybGQoITApOwpiLnRyYXZlcnNlKGZ1bmN0aW9uKGIpe3ZhciBlLGY7ZT1iLmdlb21ldHJ5O2lmKHZvaWQgMCE9PWUpaWYoZS5pc0dlb21ldHJ5KXt2YXIgZz1lLnZlcnRpY2VzO2U9MDtmb3IoZj1nLmxlbmd0aDtlPGY7ZSsrKWEuY29weShnW2VdKSxhLmFwcGx5TWF0cml4NChiLm1hdHJpeFdvcmxkKSxjLmV4cGFuZEJ5UG9pbnQoYSl9ZWxzZSBpZihlLmlzQnVmZmVyR2VvbWV0cnkmJihnPWUuYXR0cmlidXRlcy5wb3NpdGlvbix2b2lkIDAhPT1nKSlmb3IoZT0wLGY9Zy5jb3VudDtlPGY7ZSsrKWEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShnLGUpLmFwcGx5TWF0cml4NChiLm1hdHJpeFdvcmxkKSxjLmV4cGFuZEJ5UG9pbnQoYSl9KTtyZXR1cm4gdGhpc319KCksY29udGFpbnNQb2ludDpmdW5jdGlvbihhKXtyZXR1cm4gYS54PHRoaXMubWluLnh8fGEueD50aGlzLm1heC54fHxhLnk8dGhpcy5taW4ueXx8YS55PnRoaXMubWF4Lnl8fGEuejx0aGlzLm1pbi56fHxhLno+dGhpcy5tYXguej8hMTohMH0sY29udGFpbnNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubWluLng8PQphLm1pbi54JiZhLm1heC54PD10aGlzLm1heC54JiZ0aGlzLm1pbi55PD1hLm1pbi55JiZhLm1heC55PD10aGlzLm1heC55JiZ0aGlzLm1pbi56PD1hLm1pbi56JiZhLm1heC56PD10aGlzLm1heC56fSxnZXRQYXJhbWV0ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYnx8bmV3IHApLnNldCgoYS54LXRoaXMubWluLngpLyh0aGlzLm1heC54LXRoaXMubWluLngpLChhLnktdGhpcy5taW4ueSkvKHRoaXMubWF4LnktdGhpcy5taW4ueSksKGEuei10aGlzLm1pbi56KS8odGhpcy5tYXguei10aGlzLm1pbi56KSl9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWF4Lng8dGhpcy5taW4ueHx8YS5taW4ueD50aGlzLm1heC54fHxhLm1heC55PHRoaXMubWluLnl8fGEubWluLnk+dGhpcy5tYXgueXx8YS5tYXguejx0aGlzLm1pbi56fHxhLm1pbi56PnRoaXMubWF4Lno/ITE6ITB9LGludGVyc2VjdHNTcGhlcmU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYil7dGhpcy5jbGFtcFBvaW50KGIuY2VudGVyLAphKTtyZXR1cm4gYS5kaXN0YW5jZVRvU3F1YXJlZChiLmNlbnRlcik8PWIucmFkaXVzKmIucmFkaXVzfX0oKSxpbnRlcnNlY3RzUGxhbmU6ZnVuY3Rpb24oYSl7dmFyIGIsYzswPGEubm9ybWFsLng/KGI9YS5ub3JtYWwueCp0aGlzLm1pbi54LGM9YS5ub3JtYWwueCp0aGlzLm1heC54KTooYj1hLm5vcm1hbC54KnRoaXMubWF4LngsYz1hLm5vcm1hbC54KnRoaXMubWluLngpOzA8YS5ub3JtYWwueT8oYis9YS5ub3JtYWwueSp0aGlzLm1pbi55LGMrPWEubm9ybWFsLnkqdGhpcy5tYXgueSk6KGIrPWEubm9ybWFsLnkqdGhpcy5tYXgueSxjKz1hLm5vcm1hbC55KnRoaXMubWluLnkpOzA8YS5ub3JtYWwuej8oYis9YS5ub3JtYWwueip0aGlzLm1pbi56LGMrPWEubm9ybWFsLnoqdGhpcy5tYXgueik6KGIrPWEubm9ybWFsLnoqdGhpcy5tYXgueixjKz1hLm5vcm1hbC56KnRoaXMubWluLnopO3JldHVybiBiPD1hLmNvbnN0YW50JiZjPj1hLmNvbnN0YW50fSxjbGFtcFBvaW50OmZ1bmN0aW9uKGEsCmIpe3JldHVybihifHxuZXcgcCkuY29weShhKS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9LGRpc3RhbmNlVG9Qb2ludDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gYS5jb3B5KGIpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIoYikubGVuZ3RoKCl9fSgpLGdldEJvdW5kaW5nU3BoZXJlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe2I9Ynx8bmV3IEdhO3RoaXMuZ2V0Q2VudGVyKGIuY2VudGVyKTtiLnJhZGl1cz0uNSp0aGlzLmdldFNpemUoYSkubGVuZ3RoKCk7cmV0dXJuIGJ9fSgpLGludGVyc2VjdDpmdW5jdGlvbihhKXt0aGlzLm1pbi5tYXgoYS5taW4pO3RoaXMubWF4Lm1pbihhLm1heCk7dGhpcy5pc0VtcHR5KCkmJnRoaXMubWFrZUVtcHR5KCk7cmV0dXJuIHRoaXN9LHVuaW9uOmZ1bmN0aW9uKGEpe3RoaXMubWluLm1pbihhLm1pbik7dGhpcy5tYXgubWF4KGEubWF4KTtyZXR1cm4gdGhpc30sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKCl7dmFyIGE9CltuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcF07cmV0dXJuIGZ1bmN0aW9uKGIpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiB0aGlzO2FbMF0uc2V0KHRoaXMubWluLngsdGhpcy5taW4ueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQoYik7YVsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NChiKTthWzJdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KGIpO2FbM10uc2V0KHRoaXMubWluLngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQoYik7YVs0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NChiKTthWzVdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KGIpO2FbNl0uc2V0KHRoaXMubWF4LngsdGhpcy5tYXgueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQoYik7CmFbN10uc2V0KHRoaXMubWF4LngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQoYik7dGhpcy5zZXRGcm9tUG9pbnRzKGEpO3JldHVybiB0aGlzfX0oKSx0cmFuc2xhdGU6ZnVuY3Rpb24oYSl7dGhpcy5taW4uYWRkKGEpO3RoaXMubWF4LmFkZChhKTtyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLm1pbi5lcXVhbHModGhpcy5taW4pJiZhLm1heC5lcXVhbHModGhpcy5tYXgpfX0pO09iamVjdC5hc3NpZ24oR2EucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLmNlbnRlci5jb3B5KGEpO3RoaXMucmFkaXVzPWI7cmV0dXJuIHRoaXN9LHNldEZyb21Qb2ludHM6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgVGE7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcy5jZW50ZXI7dm9pZCAwIT09Yz9kLmNvcHkoYyk6YS5zZXRGcm9tUG9pbnRzKGIpLmdldENlbnRlcihkKTtmb3IodmFyIGU9MCxmPTAsZz1iLmxlbmd0aDtmPGc7ZisrKWU9TWF0aC5tYXgoZSwKZC5kaXN0YW5jZVRvU3F1YXJlZChiW2ZdKSk7dGhpcy5yYWRpdXM9TWF0aC5zcXJ0KGUpO3JldHVybiB0aGlzfX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLmNlbnRlci5jb3B5KGEuY2VudGVyKTt0aGlzLnJhZGl1cz1hLnJhZGl1cztyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gMD49dGhpcy5yYWRpdXN9LGNvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c30sZGlzdGFuY2VUb1BvaW50OmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucmFkaXVzK2EucmFkaXVzO3JldHVybiBhLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmNlbnRlcik8PQpiKmJ9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX0saW50ZXJzZWN0c1BsYW5lOmZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLmFicyh0aGlzLmNlbnRlci5kb3QoYS5ub3JtYWwpLWEuY29uc3RhbnQpPD10aGlzLnJhZGl1c30sY2xhbXBQb2ludDpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKGEpLGQ9Ynx8bmV3IHA7ZC5jb3B5KGEpO2M+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihkLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZC5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSk7cmV0dXJuIGR9LGdldEJvdW5kaW5nQm94OmZ1bmN0aW9uKGEpe2E9YXx8bmV3IFRhO2Euc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKTthLmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKTtyZXR1cm4gYX0sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKGEpe3RoaXMuY2VudGVyLmFwcGx5TWF0cml4NChhKTsKdGhpcy5yYWRpdXMqPWEuZ2V0TWF4U2NhbGVPbkF4aXMoKTtyZXR1cm4gdGhpc30sdHJhbnNsYXRlOmZ1bmN0aW9uKGEpe3RoaXMuY2VudGVyLmFkZChhKTtyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpJiZhLnJhZGl1cz09PXRoaXMucmFkaXVzfX0pO09iamVjdC5hc3NpZ24oS2EucHJvdG90eXBlLHtpc01hdHJpeDM6ITAsc2V0OmZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxrKXt2YXIgbT10aGlzLmVsZW1lbnRzO21bMF09YTttWzFdPWQ7bVsyXT1nO21bM109YjttWzRdPWU7bVs1XT1oO21bNl09YzttWzddPWY7bVs4XT1rO3JldHVybiB0aGlzfSxpZGVudGl0eTpmdW5jdGlvbigpe3RoaXMuc2V0KDEsMCwwLDAsMSwwLDAsMCwxKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX0sY29weTpmdW5jdGlvbihhKXt2YXIgYj0KdGhpcy5lbGVtZW50czthPWEuZWxlbWVudHM7YlswXT1hWzBdO2JbMV09YVsxXTtiWzJdPWFbMl07YlszXT1hWzNdO2JbNF09YVs0XTtiWzVdPWFbNV07Yls2XT1hWzZdO2JbN109YVs3XTtiWzhdPWFbOF07cmV0dXJuIHRoaXN9LHNldEZyb21NYXRyaXg0OmZ1bmN0aW9uKGEpe2E9YS5lbGVtZW50czt0aGlzLnNldChhWzBdLGFbNF0sYVs4XSxhWzFdLGFbNV0sYVs5XSxhWzJdLGFbNl0sYVsxMF0pO3JldHVybiB0aGlzfSxhcHBseVRvQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe2Zvcih2YXIgYz0wLGQ9Yi5jb3VudDtjPGQ7YysrKWEueD1iLmdldFgoYyksYS55PWIuZ2V0WShjKSxhLno9Yi5nZXRaKGMpLGEuYXBwbHlNYXRyaXgzKHRoaXMpLGIuc2V0WFlaKGMsYS54LGEueSxhLnopO3JldHVybiBifX0oKSxtdWx0aXBseTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsYSl9LHByZW11bHRpcGx5OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXMoYSwKdGhpcyl9LG11bHRpcGx5TWF0cmljZXM6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmVsZW1lbnRzLGQ9Yi5lbGVtZW50cyxlPXRoaXMuZWxlbWVudHMsZj1jWzBdLGc9Y1szXSxoPWNbNl0saz1jWzFdLG09Y1s0XSxsPWNbN10scT1jWzJdLG49Y1s1XSxjPWNbOF0scj1kWzBdLHA9ZFszXSx0PWRbNl0seT1kWzFdLHg9ZFs0XSx2PWRbN10sRz1kWzJdLHc9ZFs1XSxkPWRbOF07ZVswXT1mKnIrZyp5K2gqRztlWzNdPWYqcCtnKngraCp3O2VbNl09Zip0K2cqditoKmQ7ZVsxXT1rKnIrbSp5K2wqRztlWzRdPWsqcCttKngrbCp3O2VbN109ayp0K20qditsKmQ7ZVsyXT1xKnIrbip5K2MqRztlWzVdPXEqcCtuKngrYyp3O2VbOF09cSp0K24qditjKmQ7cmV0dXJuIHRoaXN9LG11bHRpcGx5U2NhbGFyOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWxlbWVudHM7YlswXSo9YTtiWzNdKj1hO2JbNl0qPWE7YlsxXSo9YTtiWzRdKj1hO2JbN10qPWE7YlsyXSo9YTtiWzVdKj1hO2JbOF0qPWE7cmV0dXJuIHRoaXN9LApkZXRlcm1pbmFudDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZWxlbWVudHMsYj1hWzBdLGM9YVsxXSxkPWFbMl0sZT1hWzNdLGY9YVs0XSxnPWFbNV0saD1hWzZdLGs9YVs3XSxhPWFbOF07cmV0dXJuIGIqZiphLWIqZyprLWMqZSphK2MqZypoK2QqZSprLWQqZipofSxnZXRJbnZlcnNlOmZ1bmN0aW9uKGEsYil7YSYmYS5pc01hdHJpeDQmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDMuZ2V0SW52ZXJzZSBubyBsb25nZXIgdGFrZXMgYSBNYXRyaXg0IGFyZ3VtZW50LiIpO3ZhciBjPWEuZWxlbWVudHMsZD10aGlzLmVsZW1lbnRzLGU9Y1swXSxmPWNbMV0sZz1jWzJdLGg9Y1szXSxrPWNbNF0sbT1jWzVdLGw9Y1s2XSxxPWNbN10sYz1jWzhdLG49YyprLW0qcSxyPW0qbC1jKmgscD1xKmgtaypsLHQ9ZSpuK2YqcitnKnA7aWYoMD09PXQpe2lmKCEwPT09Yil0aHJvdyBFcnJvcigiVEhSRUUuTWF0cml4My5nZXRJbnZlcnNlKCk6IGNhbid0IGludmVydCBtYXRyaXgsIGRldGVybWluYW50IGlzIDAiKTsKY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzLmdldEludmVyc2UoKTogY2FuJ3QgaW52ZXJ0IG1hdHJpeCwgZGV0ZXJtaW5hbnQgaXMgMCIpO3JldHVybiB0aGlzLmlkZW50aXR5KCl9dD0xL3Q7ZFswXT1uKnQ7ZFsxXT0oZypxLWMqZikqdDtkWzJdPShtKmYtZyprKSp0O2RbM109cip0O2RbNF09KGMqZS1nKmwpKnQ7ZFs1XT0oZypoLW0qZSkqdDtkWzZdPXAqdDtkWzddPShmKmwtcSplKSp0O2RbOF09KGsqZS1mKmgpKnQ7cmV0dXJuIHRoaXN9LHRyYW5zcG9zZTpmdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5lbGVtZW50czthPWJbMV07YlsxXT1iWzNdO2JbM109YTthPWJbMl07YlsyXT1iWzZdO2JbNl09YTthPWJbNV07Yls1XT1iWzddO2JbN109YTtyZXR1cm4gdGhpc30sZ2V0Tm9ybWFsTWF0cml4OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KGEpLmdldEludmVyc2UodGhpcykudHJhbnNwb3NlKCl9LHRyYW5zcG9zZUludG9BcnJheTpmdW5jdGlvbihhKXt2YXIgYj0KdGhpcy5lbGVtZW50czthWzBdPWJbMF07YVsxXT1iWzNdO2FbMl09Yls2XTthWzNdPWJbMV07YVs0XT1iWzRdO2FbNV09Yls3XTthWzZdPWJbMl07YVs3XT1iWzVdO2FbOF09Yls4XTtyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWxlbWVudHM7YT1hLmVsZW1lbnRzO2Zvcih2YXIgYz0wOzk+YztjKyspaWYoYltjXSE9PWFbY10pcmV0dXJuITE7cmV0dXJuITB9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO2Zvcih2YXIgYz0wOzk+YztjKyspdGhpcy5lbGVtZW50c1tjXT1hW2MrYl07cmV0dXJuIHRoaXN9LHRvQXJyYXk6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1hJiYoYT1bXSk7dm9pZCAwPT09YiYmKGI9MCk7dmFyIGM9dGhpcy5lbGVtZW50czthW2JdPWNbMF07YVtiKzFdPWNbMV07YVtiKzJdPWNbMl07YVtiKzNdPWNbM107YVtiKzRdPWNbNF07YVtiKzVdPWNbNV07YVtiKzZdPWNbNl07YVtiKzddPWNbN107YVtiKzhdPQpjWzhdO3JldHVybiBhfX0pO09iamVjdC5hc3NpZ24od2EucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLm5vcm1hbC5jb3B5KGEpO3RoaXMuY29uc3RhbnQ9YjtyZXR1cm4gdGhpc30sc2V0Q29tcG9uZW50czpmdW5jdGlvbihhLGIsYyxkKXt0aGlzLm5vcm1hbC5zZXQoYSxiLGMpO3RoaXMuY29uc3RhbnQ9ZDtyZXR1cm4gdGhpc30sc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQ6ZnVuY3Rpb24oYSxiKXt0aGlzLm5vcm1hbC5jb3B5KGEpO3RoaXMuY29uc3RhbnQ9LWIuZG90KHRoaXMubm9ybWFsKTtyZXR1cm4gdGhpc30sc2V0RnJvbUNvcGxhbmFyUG9pbnRzOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYyxkLGUpe2Q9YS5zdWJWZWN0b3JzKGUsZCkuY3Jvc3MoYi5zdWJWZWN0b3JzKGMsZCkpLm5vcm1hbGl6ZSgpO3RoaXMuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQoZCxjKTtyZXR1cm4gdGhpc319KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LApjb3B5OmZ1bmN0aW9uKGEpe3RoaXMubm9ybWFsLmNvcHkoYS5ub3JtYWwpO3RoaXMuY29uc3RhbnQ9YS5jb25zdGFudDtyZXR1cm4gdGhpc30sbm9ybWFsaXplOmZ1bmN0aW9uKCl7dmFyIGE9MS90aGlzLm5vcm1hbC5sZW5ndGgoKTt0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcihhKTt0aGlzLmNvbnN0YW50Kj1hO3JldHVybiB0aGlzfSxuZWdhdGU6ZnVuY3Rpb24oKXt0aGlzLmNvbnN0YW50Kj0tMTt0aGlzLm5vcm1hbC5uZWdhdGUoKTtyZXR1cm4gdGhpc30sZGlzdGFuY2VUb1BvaW50OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QoYSkrdGhpcy5jb25zdGFudH0sZGlzdGFuY2VUb1NwaGVyZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQoYS5jZW50ZXIpLWEucmFkaXVzfSxwcm9qZWN0UG9pbnQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5vcnRob1BvaW50KGEsYikuc3ViKGEpLm5lZ2F0ZSgpfSxvcnRob1BvaW50OmZ1bmN0aW9uKGEsCmIpe3ZhciBjPXRoaXMuZGlzdGFuY2VUb1BvaW50KGEpO3JldHVybihifHxuZXcgcCkuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoYyl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYixjKXt2YXIgZD1jfHxuZXcgcCxlPWIuZGVsdGEoYSksZj10aGlzLm5vcm1hbC5kb3QoZSk7aWYoMD09PWYpe2lmKDA9PT10aGlzLmRpc3RhbmNlVG9Qb2ludChiLnN0YXJ0KSlyZXR1cm4gZC5jb3B5KGIuc3RhcnQpfWVsc2UgcmV0dXJuIGY9LShiLnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvZiwwPmZ8fDE8Zj92b2lkIDA6ZC5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKGYpLmFkZChiLnN0YXJ0KX19KCksaW50ZXJzZWN0c0xpbmU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kaXN0YW5jZVRvUG9pbnQoYS5zdGFydCk7YT10aGlzLmRpc3RhbmNlVG9Qb2ludChhLmVuZCk7cmV0dXJuIDA+YiYmMDxhfHwwPmEmJjA8Yn0sCmludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW50ZXJzZWN0c1BsYW5lKHRoaXMpfSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmludGVyc2VjdHNQbGFuZSh0aGlzKX0sY29wbGFuYXJQb2ludDpmdW5jdGlvbihhKXtyZXR1cm4oYXx8bmV3IHApLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX0sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgS2E7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7dmFyIGU9dGhpcy5jb3BsYW5hclBvaW50KGEpLmFwcGx5TWF0cml4NChjKSxmPWR8fGIuZ2V0Tm9ybWFsTWF0cml4KGMpLGY9dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKGYpLm5vcm1hbGl6ZSgpO3RoaXMuY29uc3RhbnQ9LWUuZG90KGYpO3JldHVybiB0aGlzfX0oKSx0cmFuc2xhdGU6ZnVuY3Rpb24oYSl7dGhpcy5jb25zdGFudC09YS5kb3QodGhpcy5ub3JtYWwpO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9ybWFsLmVxdWFscyh0aGlzLm5vcm1hbCkmJgphLmNvbnN0YW50PT09dGhpcy5jb25zdGFudH19KTtPYmplY3QuYXNzaWduKGpkLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz10aGlzLnBsYW5lcztnWzBdLmNvcHkoYSk7Z1sxXS5jb3B5KGIpO2dbMl0uY29weShjKTtnWzNdLmNvcHkoZCk7Z1s0XS5jb3B5KGUpO2dbNV0uY29weShmKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMucGxhbmVzLGM9MDs2PmM7YysrKWJbY10uY29weShhLnBsYW5lc1tjXSk7cmV0dXJuIHRoaXN9LHNldEZyb21NYXRyaXg6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wbGFuZXMsYz1hLmVsZW1lbnRzO2E9Y1swXTt2YXIgZD1jWzFdLGU9Y1syXSxmPWNbM10sZz1jWzRdLGg9Y1s1XSxrPWNbNl0sbT1jWzddLGw9Y1s4XSxxPWNbOV0sbj1jWzEwXSxyPWNbMTFdLHA9Y1sxMl0sdD1jWzEzXSwKeT1jWzE0XSxjPWNbMTVdO2JbMF0uc2V0Q29tcG9uZW50cyhmLWEsbS1nLHItbCxjLXApLm5vcm1hbGl6ZSgpO2JbMV0uc2V0Q29tcG9uZW50cyhmK2EsbStnLHIrbCxjK3ApLm5vcm1hbGl6ZSgpO2JbMl0uc2V0Q29tcG9uZW50cyhmK2QsbStoLHIrcSxjK3QpLm5vcm1hbGl6ZSgpO2JbM10uc2V0Q29tcG9uZW50cyhmLWQsbS1oLHItcSxjLXQpLm5vcm1hbGl6ZSgpO2JbNF0uc2V0Q29tcG9uZW50cyhmLWUsbS1rLHItbixjLXkpLm5vcm1hbGl6ZSgpO2JbNV0uc2V0Q29tcG9uZW50cyhmK2UsbStrLHIrbixjK3kpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxpbnRlcnNlY3RzT2JqZWN0OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEdhO3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLmdlb21ldHJ5O251bGw9PT1jLmJvdW5kaW5nU3BoZXJlJiZjLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO2EuY29weShjLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQoYi5tYXRyaXhXb3JsZCk7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShhKX19KCksCmludGVyc2VjdHNTcHJpdGU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgR2E7cmV0dXJuIGZ1bmN0aW9uKGIpe2EuY2VudGVyLnNldCgwLDAsMCk7YS5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzY7YS5hcHBseU1hdHJpeDQoYi5tYXRyaXhXb3JsZCk7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShhKX19KCksaW50ZXJzZWN0c1NwaGVyZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnBsYW5lcyxjPWEuY2VudGVyO2E9LWEucmFkaXVzO2Zvcih2YXIgZD0wOzY+ZDtkKyspaWYoYltkXS5kaXN0YW5jZVRvUG9pbnQoYyk8YSlyZXR1cm4hMTtyZXR1cm4hMH0saW50ZXJzZWN0c0JveDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGMpe2Zvcih2YXIgZD10aGlzLnBsYW5lcyxlPTA7Nj5lO2UrKyl7dmFyIGY9ZFtlXTthLng9MDxmLm5vcm1hbC54P2MubWluLng6Yy5tYXgueDtiLng9MDxmLm5vcm1hbC54P2MubWF4Lng6Yy5taW4ueDthLnk9MDxmLm5vcm1hbC55PwpjLm1pbi55OmMubWF4Lnk7Yi55PTA8Zi5ub3JtYWwueT9jLm1heC55OmMubWluLnk7YS56PTA8Zi5ub3JtYWwuej9jLm1pbi56OmMubWF4Lno7Yi56PTA8Zi5ub3JtYWwuej9jLm1heC56OmMubWluLno7dmFyIGc9Zi5kaXN0YW5jZVRvUG9pbnQoYSksZj1mLmRpc3RhbmNlVG9Qb2ludChiKTtpZigwPmcmJjA+ZilyZXR1cm4hMX1yZXR1cm4hMH19KCksY29udGFpbnNQb2ludDpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5wbGFuZXMsYz0wOzY+YztjKyspaWYoMD5iW2NdLmRpc3RhbmNlVG9Qb2ludChhKSlyZXR1cm4hMTtyZXR1cm4hMH19KTtPYmplY3QuYXNzaWduKGhiLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGEsYil7dGhpcy5vcmlnaW4uY29weShhKTt0aGlzLmRpcmVjdGlvbi5jb3B5KGIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLm9yaWdpbi5jb3B5KGEub3JpZ2luKTsKdGhpcy5kaXJlY3Rpb24uY29weShhLmRpcmVjdGlvbik7cmV0dXJuIHRoaXN9LGF0OmZ1bmN0aW9uKGEsYil7cmV0dXJuKGJ8fG5ldyBwKS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihhKS5hZGQodGhpcy5vcmlnaW4pfSxsb29rQXQ6ZnVuY3Rpb24oYSl7dGhpcy5kaXJlY3Rpb24uY29weShhKS5zdWIodGhpcy5vcmlnaW4pLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxyZWNhc3Q6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYil7dGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KGIsYSkpO3JldHVybiB0aGlzfX0oKSxjbG9zZXN0UG9pbnRUb1BvaW50OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8bmV3IHA7Yy5zdWJWZWN0b3JzKGEsdGhpcy5vcmlnaW4pO3ZhciBkPWMuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gMD5kP2MuY29weSh0aGlzLm9yaWdpbik6Yy5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihkKS5hZGQodGhpcy5vcmlnaW4pfSwKZGlzdGFuY2VUb1BvaW50OmZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVNxVG9Qb2ludChhKSl9LGRpc3RhbmNlU3FUb1BvaW50OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEuc3ViVmVjdG9ycyhiLHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKDA+YylyZXR1cm4gdGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQoYik7YS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihjKS5hZGQodGhpcy5vcmlnaW4pO3JldHVybiBhLmRpc3RhbmNlVG9TcXVhcmVkKGIpfX0oKSxkaXN0YW5jZVNxVG9TZWdtZW50OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcCxjPW5ldyBwO3JldHVybiBmdW5jdGlvbihkLGUsZixnKXthLmNvcHkoZCkuYWRkKGUpLm11bHRpcGx5U2NhbGFyKC41KTtiLmNvcHkoZSkuc3ViKGQpLm5vcm1hbGl6ZSgpO2MuY29weSh0aGlzLm9yaWdpbikuc3ViKGEpOwp2YXIgaD0uNSpkLmRpc3RhbmNlVG8oZSksaz0tdGhpcy5kaXJlY3Rpb24uZG90KGIpLG09Yy5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LWMuZG90KGIpLHE9Yy5sZW5ndGhTcSgpLG49TWF0aC5hYnMoMS1rKmspLHI7MDxuPyhkPWsqbC1tLGU9ayptLWwscj1oKm4sMDw9ZD9lPj0tcj9lPD1yPyhoPTEvbixkKj1oLGUqPWgsaz1kKihkK2sqZSsyKm0pK2UqKGsqZCtlKzIqbCkrcSk6KGU9aCxkPU1hdGgubWF4KDAsLShrKmUrbSkpLGs9LWQqZCtlKihlKzIqbCkrcSk6KGU9LWgsZD1NYXRoLm1heCgwLC0oayplK20pKSxrPS1kKmQrZSooZSsyKmwpK3EpOmU8PS1yPyhkPU1hdGgubWF4KDAsLSgtaypoK20pKSxlPTA8ZD8taDpNYXRoLm1pbihNYXRoLm1heCgtaCwtbCksaCksaz0tZCpkK2UqKGUrMipsKStxKTplPD1yPyhkPTAsZT1NYXRoLm1pbihNYXRoLm1heCgtaCwtbCksaCksaz1lKihlKzIqbCkrcSk6KGQ9TWF0aC5tYXgoMCwtKGsqaCttKSksZT0wPGQ/aDpNYXRoLm1pbihNYXRoLm1heCgtaCwKLWwpLGgpLGs9LWQqZCtlKihlKzIqbCkrcSkpOihlPTA8az8taDpoLGQ9TWF0aC5tYXgoMCwtKGsqZSttKSksaz0tZCpkK2UqKGUrMipsKStxKTtmJiZmLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGQpLmFkZCh0aGlzLm9yaWdpbik7ZyYmZy5jb3B5KGIpLm11bHRpcGx5U2NhbGFyKGUpLmFkZChhKTtyZXR1cm4ga319KCksaW50ZXJzZWN0U3BoZXJlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7YS5zdWJWZWN0b3JzKGIuY2VudGVyLHRoaXMub3JpZ2luKTt2YXIgZD1hLmRvdCh0aGlzLmRpcmVjdGlvbiksZT1hLmRvdChhKS1kKmQsZj1iLnJhZGl1cypiLnJhZGl1cztpZihlPmYpcmV0dXJuIG51bGw7Zj1NYXRoLnNxcnQoZi1lKTtlPWQtZjtkKz1mO3JldHVybiAwPmUmJjA+ZD9udWxsOjA+ZT90aGlzLmF0KGQsYyk6dGhpcy5hdChlLGMpfX0oKSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludChhLmNlbnRlcik8PQphLnJhZGl1c30sZGlzdGFuY2VUb1BsYW5lOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbik7aWYoMD09PWIpcmV0dXJuIDA9PT1hLmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik/MDpudWxsO2E9LSh0aGlzLm9yaWdpbi5kb3QoYS5ub3JtYWwpK2EuY29uc3RhbnQpL2I7cmV0dXJuIDA8PWE/YTpudWxsfSxpbnRlcnNlY3RQbGFuZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZGlzdGFuY2VUb1BsYW5lKGEpO3JldHVybiBudWxsPT09Yz9udWxsOnRoaXMuYXQoYyxiKX0saW50ZXJzZWN0c1BsYW5lOmZ1bmN0aW9uKGEpe3ZhciBiPWEuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTtyZXR1cm4gMD09PWJ8fDA+YS5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKSpiPyEwOiExfSxpbnRlcnNlY3RCb3g6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnO2Q9MS90aGlzLmRpcmVjdGlvbi54O2Y9MS90aGlzLmRpcmVjdGlvbi55O2c9MS90aGlzLmRpcmVjdGlvbi56Owp2YXIgaD10aGlzLm9yaWdpbjswPD1kPyhjPShhLm1pbi54LWgueCkqZCxkKj1hLm1heC54LWgueCk6KGM9KGEubWF4LngtaC54KSpkLGQqPWEubWluLngtaC54KTswPD1mPyhlPShhLm1pbi55LWgueSkqZixmKj1hLm1heC55LWgueSk6KGU9KGEubWF4LnktaC55KSpmLGYqPWEubWluLnktaC55KTtpZihjPmZ8fGU+ZClyZXR1cm4gbnVsbDtpZihlPmN8fGMhPT1jKWM9ZTtpZihmPGR8fGQhPT1kKWQ9ZjswPD1nPyhlPShhLm1pbi56LWgueikqZyxnKj1hLm1heC56LWgueik6KGU9KGEubWF4LnotaC56KSpnLGcqPWEubWluLnotaC56KTtpZihjPmd8fGU+ZClyZXR1cm4gbnVsbDtpZihlPmN8fGMhPT1jKWM9ZTtpZihnPGR8fGQhPT1kKWQ9ZztyZXR1cm4gMD5kP251bGw6dGhpcy5hdCgwPD1jP2M6ZCxiKX0saW50ZXJzZWN0c0JveDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gbnVsbCE9PXRoaXMuaW50ZXJzZWN0Qm94KGIsYSl9fSgpLGludGVyc2VjdFRyaWFuZ2xlOmZ1bmN0aW9uKCl7dmFyIGE9Cm5ldyBwLGI9bmV3IHAsYz1uZXcgcCxkPW5ldyBwO3JldHVybiBmdW5jdGlvbihlLGYsZyxoLGspe2Iuc3ViVmVjdG9ycyhmLGUpO2Muc3ViVmVjdG9ycyhnLGUpO2QuY3Jvc3NWZWN0b3JzKGIsYyk7Zj10aGlzLmRpcmVjdGlvbi5kb3QoZCk7aWYoMDxmKXtpZihoKXJldHVybiBudWxsO2g9MX1lbHNlIGlmKDA+ZiloPS0xLGY9LWY7ZWxzZSByZXR1cm4gbnVsbDthLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sZSk7ZT1oKnRoaXMuZGlyZWN0aW9uLmRvdChjLmNyb3NzVmVjdG9ycyhhLGMpKTtpZigwPmUpcmV0dXJuIG51bGw7Zz1oKnRoaXMuZGlyZWN0aW9uLmRvdChiLmNyb3NzKGEpKTtpZigwPmd8fGUrZz5mKXJldHVybiBudWxsO2U9LWgqYS5kb3QoZCk7cmV0dXJuIDA+ZT9udWxsOnRoaXMuYXQoZS9mLGspfX0oKSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24oYSl7dGhpcy5kaXJlY3Rpb24uYWRkKHRoaXMub3JpZ2luKS5hcHBseU1hdHJpeDQoYSk7dGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KGEpOwp0aGlzLmRpcmVjdGlvbi5zdWIodGhpcy5vcmlnaW4pO3RoaXMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEub3JpZ2luLmVxdWFscyh0aGlzLm9yaWdpbikmJmEuZGlyZWN0aW9uLmVxdWFscyh0aGlzLmRpcmVjdGlvbil9fSk7YmIuUm90YXRpb25PcmRlcnM9IlhZWiBZWlggWlhZIFhaWSBZWFogWllYIi5zcGxpdCgiICIpO2JiLkRlZmF1bHRPcmRlcj0iWFlaIjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhiYi5wcm90b3R5cGUse3g6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feD1hO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpfX0seTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihhKXt0aGlzLl95PWE7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9fSx6OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fen0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3o9CmE7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9fSxvcmRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yZGVyfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5fb3JkZXI9YTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKX19fSk7T2JqZWN0LmFzc2lnbihiYi5wcm90b3R5cGUse2lzRXVsZXI6ITAsc2V0OmZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuX3g9YTt0aGlzLl95PWI7dGhpcy5fej1jO3RoaXMuX29yZGVyPWR8fHRoaXMuX29yZGVyO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5feD1hLl94O3RoaXMuX3k9YS5feTt0aGlzLl96PWEuX3o7dGhpcy5fb3JkZXI9YS5fb3JkZXI7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7cmV0dXJuIHRoaXN9LHNldEZyb21Sb3RhdGlvbk1hdHJpeDpmdW5jdGlvbihhLApiLGMpe3ZhciBkPVkuY2xhbXAsZT1hLmVsZW1lbnRzO2E9ZVswXTt2YXIgZj1lWzRdLGc9ZVs4XSxoPWVbMV0saz1lWzVdLG09ZVs5XSxsPWVbMl0scT1lWzZdLGU9ZVsxMF07Yj1ifHx0aGlzLl9vcmRlcjsiWFlaIj09PWI/KHRoaXMuX3k9TWF0aC5hc2luKGQoZywtMSwxKSksLjk5OTk5Pk1hdGguYWJzKGcpPyh0aGlzLl94PU1hdGguYXRhbjIoLW0sZSksdGhpcy5fej1NYXRoLmF0YW4yKC1mLGEpKToodGhpcy5feD1NYXRoLmF0YW4yKHEsayksdGhpcy5fej0wKSk6IllYWiI9PT1iPyh0aGlzLl94PU1hdGguYXNpbigtZChtLC0xLDEpKSwuOTk5OTk+TWF0aC5hYnMobSk/KHRoaXMuX3k9TWF0aC5hdGFuMihnLGUpLHRoaXMuX3o9TWF0aC5hdGFuMihoLGspKToodGhpcy5feT1NYXRoLmF0YW4yKC1sLGEpLHRoaXMuX3o9MCkpOiJaWFkiPT09Yj8odGhpcy5feD1NYXRoLmFzaW4oZChxLC0xLDEpKSwuOTk5OTk+TWF0aC5hYnMocSk/KHRoaXMuX3k9TWF0aC5hdGFuMigtbCxlKSx0aGlzLl96PQpNYXRoLmF0YW4yKC1mLGspKToodGhpcy5feT0wLHRoaXMuX3o9TWF0aC5hdGFuMihoLGEpKSk6IlpZWCI9PT1iPyh0aGlzLl95PU1hdGguYXNpbigtZChsLC0xLDEpKSwuOTk5OTk+TWF0aC5hYnMobCk/KHRoaXMuX3g9TWF0aC5hdGFuMihxLGUpLHRoaXMuX3o9TWF0aC5hdGFuMihoLGEpKToodGhpcy5feD0wLHRoaXMuX3o9TWF0aC5hdGFuMigtZixrKSkpOiJZWlgiPT09Yj8odGhpcy5fej1NYXRoLmFzaW4oZChoLC0xLDEpKSwuOTk5OTk+TWF0aC5hYnMoaCk/KHRoaXMuX3g9TWF0aC5hdGFuMigtbSxrKSx0aGlzLl95PU1hdGguYXRhbjIoLWwsYSkpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKGcsZSkpKToiWFpZIj09PWI/KHRoaXMuX3o9TWF0aC5hc2luKC1kKGYsLTEsMSkpLC45OTk5OT5NYXRoLmFicyhmKT8odGhpcy5feD1NYXRoLmF0YW4yKHEsayksdGhpcy5feT1NYXRoLmF0YW4yKGcsYSkpOih0aGlzLl94PU1hdGguYXRhbjIoLW0sZSksdGhpcy5feT0wKSk6Y29uc29sZS53YXJuKCJUSFJFRS5FdWxlcjogLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGdpdmVuIHVuc3VwcG9ydGVkIG9yZGVyOiAiKwpiKTt0aGlzLl9vcmRlcj1iO2lmKCExIT09Yyl0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sc2V0RnJvbVF1YXRlcm5pb246ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYixjLGQpe2EubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oYik7cmV0dXJuIHRoaXMuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGEsYyxkKX19KCksc2V0RnJvbVZlY3RvcjM6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5zZXQoYS54LGEueSxhLnosYnx8dGhpcy5fb3JkZXIpfSxyZW9yZGVyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHFhO3JldHVybiBmdW5jdGlvbihiKXthLnNldEZyb21FdWxlcih0aGlzKTtyZXR1cm4gdGhpcy5zZXRGcm9tUXVhdGVybmlvbihhLGIpfX0oKSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX3g9PT10aGlzLl94JiZhLl95PT09dGhpcy5feSYmYS5fej09PXRoaXMuX3omJmEuX29yZGVyPT09dGhpcy5fb3JkZXJ9LGZyb21BcnJheTpmdW5jdGlvbihhKXt0aGlzLl94PQphWzBdO3RoaXMuX3k9YVsxXTt0aGlzLl96PWFbMl07dm9pZCAwIT09YVszXSYmKHRoaXMuX29yZGVyPWFbM10pO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YSYmKGE9W10pO3ZvaWQgMD09PWImJihiPTApO2FbYl09dGhpcy5feDthW2IrMV09dGhpcy5feTthW2IrMl09dGhpcy5fejthW2IrM109dGhpcy5fb3JkZXI7cmV0dXJuIGF9LHRvVmVjdG9yMzpmdW5jdGlvbihhKXtyZXR1cm4gYT9hLnNldCh0aGlzLl94LHRoaXMuX3ksdGhpcy5feik6bmV3IHAodGhpcy5feCx0aGlzLl95LHRoaXMuX3opfSxvbkNoYW5nZTpmdW5jdGlvbihhKXt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2s9YTtyZXR1cm4gdGhpc30sb25DaGFuZ2VDYWxsYmFjazpmdW5jdGlvbigpe319KTtPYmplY3QuYXNzaWduKFJkLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGEpe3RoaXMubWFzaz0xPDxhfDB9LGVuYWJsZTpmdW5jdGlvbihhKXt0aGlzLm1hc2s9CnRoaXMubWFza3wxPDxhfDB9LHRvZ2dsZTpmdW5jdGlvbihhKXt0aGlzLm1hc2tePTE8PGF8MH0sZGlzYWJsZTpmdW5jdGlvbihhKXt0aGlzLm1hc2smPX4oMTw8YXwwKX0sdGVzdDpmdW5jdGlvbihhKXtyZXR1cm4gMCE9PSh0aGlzLm1hc2smYS5tYXNrKX19KTt2YXIgTGY9MDtCLkRlZmF1bHRVcD1uZXcgcCgwLDEsMCk7Qi5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZT0hMDtPYmplY3QuYXNzaWduKEIucHJvdG90eXBlLHNhLnByb3RvdHlwZSx7aXNPYmplY3QzRDohMCxhcHBseU1hdHJpeDpmdW5jdGlvbihhKXt0aGlzLm1hdHJpeC5tdWx0aXBseU1hdHJpY2VzKGEsdGhpcy5tYXRyaXgpO3RoaXMubWF0cml4LmRlY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKX0sc2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlOmZ1bmN0aW9uKGEsYil7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoYSxiKX0sc2V0Um90YXRpb25Gcm9tRXVsZXI6ZnVuY3Rpb24oYSl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21FdWxlcihhLAohMCl9LHNldFJvdGF0aW9uRnJvbU1hdHJpeDpmdW5jdGlvbihhKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KGEpfSxzZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKGEpe3RoaXMucXVhdGVybmlvbi5jb3B5KGEpfSxyb3RhdGVPbkF4aXM6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcWE7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7YS5zZXRGcm9tQXhpc0FuZ2xlKGIsYyk7dGhpcy5xdWF0ZXJuaW9uLm11bHRpcGx5KGEpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVYOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAoMSwwLDApO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoYSxiKX19KCkscm90YXRlWTpmdW5jdGlvbigpe3ZhciBhPW5ldyBwKDAsMSwwKTtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKGEsYil9fSgpLHJvdGF0ZVo6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCgwLDAsMSk7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhhLApiKX19KCksdHJhbnNsYXRlT25BeGlzOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7YS5jb3B5KGIpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pO3RoaXMucG9zaXRpb24uYWRkKGEubXVsdGlwbHlTY2FsYXIoYykpO3JldHVybiB0aGlzfX0oKSx0cmFuc2xhdGVYOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAoMSwwLDApO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoYSxiKX19KCksdHJhbnNsYXRlWTpmdW5jdGlvbigpe3ZhciBhPW5ldyBwKDAsMSwwKTtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKGEsYil9fSgpLHRyYW5zbGF0ZVo6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCgwLDAsMSk7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhhLGIpfX0oKSxsb2NhbFRvV29ybGQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpfSwKd29ybGRUb0xvY2FsOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBiLmFwcGx5TWF0cml4NChhLmdldEludmVyc2UodGhpcy5tYXRyaXhXb3JsZCkpfX0oKSxsb29rQXQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYil7dGhpcy5pc0NhbWVyYT9hLmxvb2tBdCh0aGlzLnBvc2l0aW9uLGIsdGhpcy51cCk6YS5sb29rQXQoYix0aGlzLnBvc2l0aW9uLHRoaXMudXApO3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoYSl9fSgpLGFkZDpmdW5jdGlvbihhKXtpZigxPGFyZ3VtZW50cy5sZW5ndGgpe2Zvcih2YXIgYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspdGhpcy5hZGQoYXJndW1lbnRzW2JdKTtyZXR1cm4gdGhpc31pZihhPT09dGhpcylyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3QgY2FuJ3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBvZiBpdHNlbGYuIixhKSx0aGlzOwphJiZhLmlzT2JqZWN0M0Q/KG51bGwhPT1hLnBhcmVudCYmYS5wYXJlbnQucmVtb3ZlKGEpLGEucGFyZW50PXRoaXMsYS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJhZGRlZCJ9KSx0aGlzLmNoaWxkcmVuLnB1c2goYSkpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5PYmplY3QzRC4iLGEpO3JldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oYSl7aWYoMTxhcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW2JdKTtiPXRoaXMuY2hpbGRyZW4uaW5kZXhPZihhKTstMSE9PWImJihhLnBhcmVudD1udWxsLGEuZGlzcGF0Y2hFdmVudCh7dHlwZToicmVtb3ZlZCJ9KSx0aGlzLmNoaWxkcmVuLnNwbGljZShiLDEpKX0sZ2V0T2JqZWN0QnlJZDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJpZCIsYSl9LGdldE9iamVjdEJ5TmFtZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJuYW1lIiwKYSl9LGdldE9iamVjdEJ5UHJvcGVydHk6ZnVuY3Rpb24oYSxiKXtpZih0aGlzW2FdPT09YilyZXR1cm4gdGhpcztmb3IodmFyIGM9MCxkPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2M8ZDtjKyspe3ZhciBlPXRoaXMuY2hpbGRyZW5bY10uZ2V0T2JqZWN0QnlQcm9wZXJ0eShhLGIpO2lmKHZvaWQgMCE9PWUpcmV0dXJuIGV9fSxnZXRXb3JsZFBvc2l0aW9uOmZ1bmN0aW9uKGEpe2E9YXx8bmV3IHA7dGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCk7cmV0dXJuIGEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpfSxnZXRXb3JsZFF1YXRlcm5pb246ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwO3JldHVybiBmdW5jdGlvbihjKXtjPWN8fG5ldyBxYTt0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTt0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShhLGMsYik7cmV0dXJuIGN9fSgpLGdldFdvcmxkUm90YXRpb246ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcWE7cmV0dXJuIGZ1bmN0aW9uKGIpe2I9CmJ8fG5ldyBiYjt0aGlzLmdldFdvcmxkUXVhdGVybmlvbihhKTtyZXR1cm4gYi5zZXRGcm9tUXVhdGVybmlvbihhLHRoaXMucm90YXRpb24ub3JkZXIsITEpfX0oKSxnZXRXb3JsZFNjYWxlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcWE7cmV0dXJuIGZ1bmN0aW9uKGMpe2M9Y3x8bmV3IHA7dGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCk7dGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoYSxiLGMpO3JldHVybiBjfX0oKSxnZXRXb3JsZERpcmVjdGlvbjpmdW5jdGlvbigpe3ZhciBhPW5ldyBxYTtyZXR1cm4gZnVuY3Rpb24oYil7Yj1ifHxuZXcgcDt0aGlzLmdldFdvcmxkUXVhdGVybmlvbihhKTtyZXR1cm4gYi5zZXQoMCwwLDEpLmFwcGx5UXVhdGVybmlvbihhKX19KCkscmF5Y2FzdDpmdW5jdGlvbigpe30sdHJhdmVyc2U6ZnVuY3Rpb24oYSl7YSh0aGlzKTtmb3IodmFyIGI9dGhpcy5jaGlsZHJlbixjPTAsZD1iLmxlbmd0aDtjPGQ7YysrKWJbY10udHJhdmVyc2UoYSl9LAp0cmF2ZXJzZVZpc2libGU6ZnVuY3Rpb24oYSl7aWYoITEhPT10aGlzLnZpc2libGUpe2EodGhpcyk7Zm9yKHZhciBiPXRoaXMuY2hpbGRyZW4sYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrKyliW2NdLnRyYXZlcnNlVmlzaWJsZShhKX19LHRyYXZlcnNlQW5jZXN0b3JzOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucGFyZW50O251bGwhPT1iJiYoYShiKSxiLnRyYXZlcnNlQW5jZXN0b3JzKGEpKX0sdXBkYXRlTWF0cml4OmZ1bmN0aW9uKCl7dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKTt0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9LHVwZGF0ZU1hdHJpeFdvcmxkOmZ1bmN0aW9uKGEpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKTtpZih0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGV8fGEpbnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLAp0aGlzLm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLGE9ITA7Zm9yKHZhciBiPXRoaXMuY2hpbGRyZW4sYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrKyliW2NdLnVwZGF0ZU1hdHJpeFdvcmxkKGEpfSx0b0pTT046ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiLGMpe3ZvaWQgMD09PWJbYy51dWlkXSYmKGJbYy51dWlkXT1jLnRvSlNPTihhKSk7cmV0dXJuIGMudXVpZH1mdW5jdGlvbiBjKGEpe3ZhciBiPVtdLGM7Zm9yKGMgaW4gYSl7dmFyIGQ9YVtjXTtkZWxldGUgZC5tZXRhZGF0YTtiLnB1c2goZCl9cmV0dXJuIGJ9dmFyIGQ9dm9pZCAwPT09YXx8IiI9PT1hLGU9e307ZCYmKGE9e2dlb21ldHJpZXM6e30sbWF0ZXJpYWxzOnt9LHRleHR1cmVzOnt9LGltYWdlczp7fX0sZS5tZXRhZGF0YT17dmVyc2lvbjo0LjUsdHlwZToiT2JqZWN0IixnZW5lcmF0b3I6Ik9iamVjdDNELnRvSlNPTiJ9KTt2YXIgZj17fTtmLnV1aWQ9dGhpcy51dWlkO2YudHlwZT10aGlzLnR5cGU7IiIhPT0KdGhpcy5uYW1lJiYoZi5uYW1lPXRoaXMubmFtZSk7Int9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYoZi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKTshMD09PXRoaXMuY2FzdFNoYWRvdyYmKGYuY2FzdFNoYWRvdz0hMCk7ITA9PT10aGlzLnJlY2VpdmVTaGFkb3cmJihmLnJlY2VpdmVTaGFkb3c9ITApOyExPT09dGhpcy52aXNpYmxlJiYoZi52aXNpYmxlPSExKTtmLm1hdHJpeD10aGlzLm1hdHJpeC50b0FycmF5KCk7dm9pZCAwIT09dGhpcy5nZW9tZXRyeSYmKGYuZ2VvbWV0cnk9YihhLmdlb21ldHJpZXMsdGhpcy5nZW9tZXRyeSkpO2lmKHZvaWQgMCE9PXRoaXMubWF0ZXJpYWwpaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7Zm9yKHZhciBnPVtdLGg9MCxrPXRoaXMubWF0ZXJpYWwubGVuZ3RoO2g8aztoKyspZy5wdXNoKGIoYS5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbFtoXSkpO2YubWF0ZXJpYWw9Z31lbHNlIGYubWF0ZXJpYWw9YihhLm1hdGVyaWFscywKdGhpcy5tYXRlcmlhbCk7aWYoMDx0aGlzLmNoaWxkcmVuLmxlbmd0aClmb3IoZi5jaGlsZHJlbj1bXSxoPTA7aDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtoKyspZi5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5baF0udG9KU09OKGEpLm9iamVjdCk7ZCYmKGQ9YyhhLmdlb21ldHJpZXMpLGc9YyhhLm1hdGVyaWFscyksaD1jKGEudGV4dHVyZXMpLGs9YyhhLmltYWdlcyksMDxkLmxlbmd0aCYmKGUuZ2VvbWV0cmllcz1kKSwwPGcubGVuZ3RoJiYoZS5tYXRlcmlhbHM9ZyksMDxoLmxlbmd0aCYmKGUudGV4dHVyZXM9aCksMDxrLmxlbmd0aCYmKGUuaW1hZ2VzPWspKTtlLm9iamVjdD1mO3JldHVybiBlfSxjbG9uZTpmdW5jdGlvbihhKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyxhKX0sY29weTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPSEwKTt0aGlzLm5hbWU9YS5uYW1lO3RoaXMudXAuY29weShhLnVwKTt0aGlzLnBvc2l0aW9uLmNvcHkoYS5wb3NpdGlvbik7CnRoaXMucXVhdGVybmlvbi5jb3B5KGEucXVhdGVybmlvbik7dGhpcy5zY2FsZS5jb3B5KGEuc2NhbGUpO3RoaXMubWF0cml4LmNvcHkoYS5tYXRyaXgpO3RoaXMubWF0cml4V29ybGQuY29weShhLm1hdHJpeFdvcmxkKTt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9YS5tYXRyaXhBdXRvVXBkYXRlO3RoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT1hLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU7dGhpcy5sYXllcnMubWFzaz1hLmxheWVycy5tYXNrO3RoaXMudmlzaWJsZT1hLnZpc2libGU7dGhpcy5jYXN0U2hhZG93PWEuY2FzdFNoYWRvdzt0aGlzLnJlY2VpdmVTaGFkb3c9YS5yZWNlaXZlU2hhZG93O3RoaXMuZnJ1c3R1bUN1bGxlZD1hLmZydXN0dW1DdWxsZWQ7dGhpcy5yZW5kZXJPcmRlcj1hLnJlbmRlck9yZGVyO3RoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhLnVzZXJEYXRhKSk7aWYoITA9PT1iKWZvcih2YXIgYz0wO2M8YS5jaGlsZHJlbi5sZW5ndGg7YysrKXRoaXMuYWRkKGEuY2hpbGRyZW5bY10uY2xvbmUoKSk7CnJldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oSGIucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLnN0YXJ0LmNvcHkoYSk7dGhpcy5lbmQuY29weShiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5zdGFydC5jb3B5KGEuc3RhcnQpO3RoaXMuZW5kLmNvcHkoYS5lbmQpO3JldHVybiB0aGlzfSxnZXRDZW50ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fG5ldyBwKS5hZGRWZWN0b3JzKHRoaXMuc3RhcnQsdGhpcy5lbmQpLm11bHRpcGx5U2NhbGFyKC41KX0sZGVsdGE6ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fG5ldyBwKS5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpfSxkaXN0YW5jZVNxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5lbmQpfSxkaXN0YW5jZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG8odGhpcy5lbmQpfSwKYXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1ifHxuZXcgcDtyZXR1cm4gdGhpcy5kZWx0YShjKS5tdWx0aXBseVNjYWxhcihhKS5hZGQodGhpcy5zdGFydCl9LGNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXI6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwO3JldHVybiBmdW5jdGlvbihjLGQpe2Euc3ViVmVjdG9ycyhjLHRoaXMuc3RhcnQpO2Iuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KTt2YXIgZT1iLmRvdChiKSxlPWIuZG90KGEpL2U7ZCYmKGU9WS5jbGFtcChlLDAsMSkpO3JldHVybiBlfX0oKSxjbG9zZXN0UG9pbnRUb1BvaW50OmZ1bmN0aW9uKGEsYixjKXthPXRoaXMuY2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlcihhLGIpO2M9Y3x8bmV3IHA7cmV0dXJuIHRoaXMuZGVsdGEoYykubXVsdGlwbHlTY2FsYXIoYSkuYWRkKHRoaXMuc3RhcnQpfSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24oYSl7dGhpcy5zdGFydC5hcHBseU1hdHJpeDQoYSk7dGhpcy5lbmQuYXBwbHlNYXRyaXg0KGEpOwpyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSYmYS5lbmQuZXF1YWxzKHRoaXMuZW5kKX19KTtPYmplY3QuYXNzaWduKFVhLHtub3JtYWw6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYixjLGQsZSl7ZT1lfHxuZXcgcDtlLnN1YlZlY3RvcnMoZCxjKTthLnN1YlZlY3RvcnMoYixjKTtlLmNyb3NzKGEpO2I9ZS5sZW5ndGhTcSgpO3JldHVybiAwPGI/ZS5tdWx0aXBseVNjYWxhcigxL01hdGguc3FydChiKSk6ZS5zZXQoMCwwLDApfX0oKSxiYXJ5Y29vcmRGcm9tUG9pbnQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwLGM9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGQsZSxmLGcsaCl7YS5zdWJWZWN0b3JzKGcsZSk7Yi5zdWJWZWN0b3JzKGYsZSk7Yy5zdWJWZWN0b3JzKGQsZSk7ZD1hLmRvdChhKTtlPWEuZG90KGIpO2Y9YS5kb3QoYyk7dmFyIGs9Yi5kb3QoYik7Zz1iLmRvdChjKTt2YXIgbT0KZCprLWUqZTtoPWh8fG5ldyBwO2lmKDA9PT1tKXJldHVybiBoLnNldCgtMiwtMSwtMSk7bT0xL207az0oaypmLWUqZykqbTtkPShkKmctZSpmKSptO3JldHVybiBoLnNldCgxLWstZCxkLGspfX0oKSxjb250YWluc1BvaW50OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIsYyxkLGUpe2I9VWEuYmFyeWNvb3JkRnJvbVBvaW50KGIsYyxkLGUsYSk7cmV0dXJuIDA8PWIueCYmMDw9Yi55JiYxPj1iLngrYi55fX0oKX0pO09iamVjdC5hc3NpZ24oVWEucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuYS5jb3B5KGEpO3RoaXMuYi5jb3B5KGIpO3RoaXMuYy5jb3B5KGMpO3JldHVybiB0aGlzfSxzZXRGcm9tUG9pbnRzQW5kSW5kaWNlczpmdW5jdGlvbihhLGIsYyxkKXt0aGlzLmEuY29weShhW2JdKTt0aGlzLmIuY29weShhW2NdKTt0aGlzLmMuY29weShhW2RdKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LApjb3B5OmZ1bmN0aW9uKGEpe3RoaXMuYS5jb3B5KGEuYSk7dGhpcy5iLmNvcHkoYS5iKTt0aGlzLmMuY29weShhLmMpO3JldHVybiB0aGlzfSxhcmVhOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oKXthLnN1YlZlY3RvcnModGhpcy5jLHRoaXMuYik7Yi5zdWJWZWN0b3JzKHRoaXMuYSx0aGlzLmIpO3JldHVybi41KmEuY3Jvc3MoYikubGVuZ3RoKCl9fSgpLG1pZHBvaW50OmZ1bmN0aW9uKGEpe3JldHVybihhfHxuZXcgcCkuYWRkVmVjdG9ycyh0aGlzLmEsdGhpcy5iKS5hZGQodGhpcy5jKS5tdWx0aXBseVNjYWxhcigxLzMpfSxub3JtYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIFVhLm5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyxhKX0scGxhbmU6ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fG5ldyB3YSkuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX0sYmFyeWNvb3JkRnJvbVBvaW50OmZ1bmN0aW9uKGEsYil7cmV0dXJuIFVhLmJhcnljb29yZEZyb21Qb2ludChhLAp0aGlzLmEsdGhpcy5iLHRoaXMuYyxiKX0sY29udGFpbnNQb2ludDpmdW5jdGlvbihhKXtyZXR1cm4gVWEuY29udGFpbnNQb2ludChhLHRoaXMuYSx0aGlzLmIsdGhpcy5jKX0sY2xvc2VzdFBvaW50VG9Qb2ludDpmdW5jdGlvbigpe3ZhciBhPW5ldyB3YSxiPVtuZXcgSGIsbmV3IEhiLG5ldyBIYl0sYz1uZXcgcCxkPW5ldyBwO3JldHVybiBmdW5jdGlvbihlLGYpe3ZhciBnPWZ8fG5ldyBwLGg9SW5maW5pdHk7YS5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpO2EucHJvamVjdFBvaW50KGUsYyk7aWYoITA9PT10aGlzLmNvbnRhaW5zUG9pbnQoYykpZy5jb3B5KGMpO2Vsc2V7YlswXS5zZXQodGhpcy5hLHRoaXMuYik7YlsxXS5zZXQodGhpcy5iLHRoaXMuYyk7YlsyXS5zZXQodGhpcy5jLHRoaXMuYSk7Zm9yKHZhciBrPTA7azxiLmxlbmd0aDtrKyspe2Jba10uY2xvc2VzdFBvaW50VG9Qb2ludChjLCEwLGQpO3ZhciBtPWMuZGlzdGFuY2VUb1NxdWFyZWQoZCk7Cm08aCYmKGg9bSxnLmNvcHkoZCkpfX1yZXR1cm4gZ319KCksZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLmEuZXF1YWxzKHRoaXMuYSkmJmEuYi5lcXVhbHModGhpcy5iKSYmYS5jLmVxdWFscyh0aGlzLmMpfX0pO09iamVjdC5hc3NpZ24oVmEucHJvdG90eXBlLHtjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLmE9YS5hO3RoaXMuYj1hLmI7dGhpcy5jPWEuYzt0aGlzLm5vcm1hbC5jb3B5KGEubm9ybWFsKTt0aGlzLmNvbG9yLmNvcHkoYS5jb2xvcik7dGhpcy5tYXRlcmlhbEluZGV4PWEubWF0ZXJpYWxJbmRleDtmb3IodmFyIGI9MCxjPWEudmVydGV4Tm9ybWFscy5sZW5ndGg7YjxjO2IrKyl0aGlzLnZlcnRleE5vcm1hbHNbYl09YS52ZXJ0ZXhOb3JtYWxzW2JdLmNsb25lKCk7Yj0wO2ZvcihjPWEudmVydGV4Q29sb3JzLmxlbmd0aDtiPGM7YisrKXRoaXMudmVydGV4Q29sb3JzW2JdPQphLnZlcnRleENvbG9yc1tiXS5jbG9uZSgpO3JldHVybiB0aGlzfX0pO05hLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTtOYS5wcm90b3R5cGUuY29uc3RydWN0b3I9TmE7TmEucHJvdG90eXBlLmlzTWVzaEJhc2ljTWF0ZXJpYWw9ITA7TmEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5jb2xvci5jb3B5KGEuY29sb3IpO3RoaXMubWFwPWEubWFwO3RoaXMubGlnaHRNYXA9YS5saWdodE1hcDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PWEubGlnaHRNYXBJbnRlbnNpdHk7dGhpcy5hb01hcD1hLmFvTWFwO3RoaXMuYW9NYXBJbnRlbnNpdHk9YS5hb01hcEludGVuc2l0eTt0aGlzLnNwZWN1bGFyTWFwPWEuc3BlY3VsYXJNYXA7dGhpcy5hbHBoYU1hcD1hLmFscGhhTWFwO3RoaXMuZW52TWFwPWEuZW52TWFwO3RoaXMuY29tYmluZT1hLmNvbWJpbmU7dGhpcy5yZWZsZWN0aXZpdHk9YS5yZWZsZWN0aXZpdHk7CnRoaXMucmVmcmFjdGlvblJhdGlvPWEucmVmcmFjdGlvblJhdGlvO3RoaXMud2lyZWZyYW1lPWEud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWEud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMud2lyZWZyYW1lTGluZWNhcD1hLndpcmVmcmFtZUxpbmVjYXA7dGhpcy53aXJlZnJhbWVMaW5lam9pbj1hLndpcmVmcmFtZUxpbmVqb2luO3RoaXMuc2tpbm5pbmc9YS5za2lubmluZzt0aGlzLm1vcnBoVGFyZ2V0cz1hLm1vcnBoVGFyZ2V0cztyZXR1cm4gdGhpc307T2JqZWN0LmRlZmluZVByb3BlcnR5KEwucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbihhKXshMD09PWEmJnRoaXMudmVyc2lvbisrfX0pO09iamVjdC5hc3NpZ24oTC5wcm90b3R5cGUse2lzQnVmZmVyQXR0cmlidXRlOiEwLHNldEFycmF5OmZ1bmN0aW9uKGEpe2lmKEFycmF5LmlzQXJyYXkoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4iKTsKdGhpcy5jb3VudD12b2lkIDAhPT1hP2EubGVuZ3RoL3RoaXMuaXRlbVNpemU6MDt0aGlzLmFycmF5PWF9LHNldER5bmFtaWM6ZnVuY3Rpb24oYSl7dGhpcy5keW5hbWljPWE7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5hcnJheT1uZXcgYS5hcnJheS5jb25zdHJ1Y3RvcihhLmFycmF5KTt0aGlzLml0ZW1TaXplPWEuaXRlbVNpemU7dGhpcy5jb3VudD1hLmNvdW50O3RoaXMubm9ybWFsaXplZD1hLm5vcm1hbGl6ZWQ7dGhpcy5keW5hbWljPWEuZHluYW1pYztyZXR1cm4gdGhpc30sY29weUF0OmZ1bmN0aW9uKGEsYixjKXthKj10aGlzLml0ZW1TaXplO2MqPWIuaXRlbVNpemU7Zm9yKHZhciBkPTAsZT10aGlzLml0ZW1TaXplO2Q8ZTtkKyspdGhpcy5hcnJheVthK2RdPWIuYXJyYXlbYytkXTtyZXR1cm4gdGhpc30sY29weUFycmF5OmZ1bmN0aW9uKGEpe3RoaXMuYXJyYXkuc2V0KGEpO3JldHVybiB0aGlzfSxjb3B5Q29sb3JzQXJyYXk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPQp0aGlzLmFycmF5LGM9MCxkPTAsZT1hLmxlbmd0aDtkPGU7ZCsrKXt2YXIgZj1hW2RdO3ZvaWQgMD09PWYmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5Q29sb3JzQXJyYXkoKTogY29sb3IgaXMgdW5kZWZpbmVkIixkKSxmPW5ldyBIKTtiW2MrK109Zi5yO2JbYysrXT1mLmc7YltjKytdPWYuYn1yZXR1cm4gdGhpc30sY29weUluZGljZXNBcnJheTpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5hcnJheSxjPTAsZD0wLGU9YS5sZW5ndGg7ZDxlO2QrKyl7dmFyIGY9YVtkXTtiW2MrK109Zi5hO2JbYysrXT1mLmI7YltjKytdPWYuY31yZXR1cm4gdGhpc30sY29weVZlY3RvcjJzQXJyYXk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuYXJyYXksYz0wLGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspe3ZhciBmPWFbZF07dm9pZCAwPT09ZiYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Iyc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLApkKSxmPW5ldyBEKTtiW2MrK109Zi54O2JbYysrXT1mLnl9cmV0dXJuIHRoaXN9LGNvcHlWZWN0b3Izc0FycmF5OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLmFycmF5LGM9MCxkPTAsZT1hLmxlbmd0aDtkPGU7ZCsrKXt2YXIgZj1hW2RdO3ZvaWQgMD09PWYmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yM3NBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkIixkKSxmPW5ldyBwKTtiW2MrK109Zi54O2JbYysrXT1mLnk7YltjKytdPWYuen1yZXR1cm4gdGhpc30sY29weVZlY3RvcjRzQXJyYXk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuYXJyYXksYz0wLGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspe3ZhciBmPWFbZF07dm9pZCAwPT09ZiYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3I0c0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGQpLGY9bmV3IGdhKTtiW2MrK109Zi54O2JbYysrXT1mLnk7CmJbYysrXT1mLno7YltjKytdPWYud31yZXR1cm4gdGhpc30sc2V0OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9MCk7dGhpcy5hcnJheS5zZXQoYSxiKTtyZXR1cm4gdGhpc30sZ2V0WDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hcnJheVthKnRoaXMuaXRlbVNpemVdfSxzZXRYOmZ1bmN0aW9uKGEsYil7dGhpcy5hcnJheVthKnRoaXMuaXRlbVNpemVdPWI7cmV0dXJuIHRoaXN9LGdldFk6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYXJyYXlbYSp0aGlzLml0ZW1TaXplKzFdfSxzZXRZOmZ1bmN0aW9uKGEsYil7dGhpcy5hcnJheVthKnRoaXMuaXRlbVNpemUrMV09YjtyZXR1cm4gdGhpc30sZ2V0WjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hcnJheVthKnRoaXMuaXRlbVNpemUrMl19LHNldFo6ZnVuY3Rpb24oYSxiKXt0aGlzLmFycmF5W2EqdGhpcy5pdGVtU2l6ZSsyXT1iO3JldHVybiB0aGlzfSxnZXRXOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFycmF5W2EqdGhpcy5pdGVtU2l6ZSsKM119LHNldFc6ZnVuY3Rpb24oYSxiKXt0aGlzLmFycmF5W2EqdGhpcy5pdGVtU2l6ZSszXT1iO3JldHVybiB0aGlzfSxzZXRYWTpmdW5jdGlvbihhLGIsYyl7YSo9dGhpcy5pdGVtU2l6ZTt0aGlzLmFycmF5W2ErMF09Yjt0aGlzLmFycmF5W2ErMV09YztyZXR1cm4gdGhpc30sc2V0WFlaOmZ1bmN0aW9uKGEsYixjLGQpe2EqPXRoaXMuaXRlbVNpemU7dGhpcy5hcnJheVthKzBdPWI7dGhpcy5hcnJheVthKzFdPWM7dGhpcy5hcnJheVthKzJdPWQ7cmV0dXJuIHRoaXN9LHNldFhZWlc6ZnVuY3Rpb24oYSxiLGMsZCxlKXthKj10aGlzLml0ZW1TaXplO3RoaXMuYXJyYXlbYSswXT1iO3RoaXMuYXJyYXlbYSsxXT1jO3RoaXMuYXJyYXlbYSsyXT1kO3RoaXMuYXJyYXlbYSszXT1lO3JldHVybiB0aGlzfSxvblVwbG9hZDpmdW5jdGlvbihhKXt0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9YTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5hcnJheSwKdGhpcy5pdGVtU2l6ZSkpLmNvcHkodGhpcyl9fSk7cmMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTC5wcm90b3R5cGUpO3JjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yYztzYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShMLnByb3RvdHlwZSk7c2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPXNjO3RjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEwucHJvdG90eXBlKTt0Yy5wcm90b3R5cGUuY29uc3RydWN0b3I9dGM7dWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTC5wcm90b3R5cGUpO3VjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj11YztpYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShMLnByb3RvdHlwZSk7aWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWliO3ZjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEwucHJvdG90eXBlKTt2Yy5wcm90b3R5cGUuY29uc3RydWN0b3I9dmM7amIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTC5wcm90b3R5cGUpO2piLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0KamI7Qy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShMLnByb3RvdHlwZSk7Qy5wcm90b3R5cGUuY29uc3RydWN0b3I9Qzt3Yy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShMLnByb3RvdHlwZSk7d2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPXdjO09iamVjdC5hc3NpZ24oS2UucHJvdG90eXBlLHtjb21wdXRlR3JvdXBzOmZ1bmN0aW9uKGEpe3ZhciBiLGM9W10sZD12b2lkIDA7YT1hLmZhY2VzO2Zvcih2YXIgZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgZj1hW2VdO2YubWF0ZXJpYWxJbmRleCE9PWQmJihkPWYubWF0ZXJpYWxJbmRleCx2b2lkIDAhPT1iJiYoYi5jb3VudD0zKmUtYi5zdGFydCxjLnB1c2goYikpLGI9e3N0YXJ0OjMqZSxtYXRlcmlhbEluZGV4OmR9KX12b2lkIDAhPT1iJiYoYi5jb3VudD0zKmUtYi5zdGFydCxjLnB1c2goYikpO3RoaXMuZ3JvdXBzPWN9LGZyb21HZW9tZXRyeTpmdW5jdGlvbihhKXt2YXIgYj1hLmZhY2VzLGM9YS52ZXJ0aWNlcyxkPWEuZmFjZVZlcnRleFV2cywKZT1kWzBdJiYwPGRbMF0ubGVuZ3RoLGY9ZFsxXSYmMDxkWzFdLmxlbmd0aCxnPWEubW9ycGhUYXJnZXRzLGg9Zy5sZW5ndGgsaztpZigwPGgpe2s9W107Zm9yKHZhciBtPTA7bTxoO20rKylrW21dPVtdO3RoaXMubW9ycGhUYXJnZXRzLnBvc2l0aW9uPWt9dmFyIGw9YS5tb3JwaE5vcm1hbHMscT1sLmxlbmd0aCxuO2lmKDA8cSl7bj1bXTtmb3IobT0wO208cTttKyspblttXT1bXTt0aGlzLm1vcnBoVGFyZ2V0cy5ub3JtYWw9bn1mb3IodmFyIHI9YS5za2luSW5kaWNlcyxwPWEuc2tpbldlaWdodHMsdD1yLmxlbmd0aD09PWMubGVuZ3RoLHk9cC5sZW5ndGg9PT1jLmxlbmd0aCxtPTA7bTxiLmxlbmd0aDttKyspe3ZhciB4PWJbbV07dGhpcy52ZXJ0aWNlcy5wdXNoKGNbeC5hXSxjW3guYl0sY1t4LmNdKTt2YXIgdj14LnZlcnRleE5vcm1hbHM7Mz09PXYubGVuZ3RoP3RoaXMubm9ybWFscy5wdXNoKHZbMF0sdlsxXSx2WzJdKToodj14Lm5vcm1hbCx0aGlzLm5vcm1hbHMucHVzaCh2LHYsCnYpKTt2PXgudmVydGV4Q29sb3JzOzM9PT12Lmxlbmd0aD90aGlzLmNvbG9ycy5wdXNoKHZbMF0sdlsxXSx2WzJdKToodj14LmNvbG9yLHRoaXMuY29sb3JzLnB1c2godix2LHYpKTshMD09PWUmJih2PWRbMF1bbV0sdm9pZCAwIT09dj90aGlzLnV2cy5wdXNoKHZbMF0sdlsxXSx2WzJdKTooY29uc29sZS53YXJuKCJUSFJFRS5EaXJlY3RHZW9tZXRyeS5mcm9tR2VvbWV0cnkoKTogVW5kZWZpbmVkIHZlcnRleFV2ICIsbSksdGhpcy51dnMucHVzaChuZXcgRCxuZXcgRCxuZXcgRCkpKTshMD09PWYmJih2PWRbMV1bbV0sdm9pZCAwIT09dj90aGlzLnV2czIucHVzaCh2WzBdLHZbMV0sdlsyXSk6KGNvbnNvbGUud2FybigiVEhSRUUuRGlyZWN0R2VvbWV0cnkuZnJvbUdlb21ldHJ5KCk6IFVuZGVmaW5lZCB2ZXJ0ZXhVdjIgIixtKSx0aGlzLnV2czIucHVzaChuZXcgRCxuZXcgRCxuZXcgRCkpKTtmb3Iodj0wO3Y8aDt2Kyspe3ZhciBHPWdbdl0udmVydGljZXM7a1t2XS5wdXNoKEdbeC5hXSwKR1t4LmJdLEdbeC5jXSl9Zm9yKHY9MDt2PHE7disrKUc9bFt2XS52ZXJ0ZXhOb3JtYWxzW21dLG5bdl0ucHVzaChHLmEsRy5iLEcuYyk7dCYmdGhpcy5za2luSW5kaWNlcy5wdXNoKHJbeC5hXSxyW3guYl0sclt4LmNdKTt5JiZ0aGlzLnNraW5XZWlnaHRzLnB1c2gocFt4LmFdLHBbeC5iXSxwW3guY10pfXRoaXMuY29tcHV0ZUdyb3VwcyhhKTt0aGlzLnZlcnRpY2VzTmVlZFVwZGF0ZT1hLnZlcnRpY2VzTmVlZFVwZGF0ZTt0aGlzLm5vcm1hbHNOZWVkVXBkYXRlPWEubm9ybWFsc05lZWRVcGRhdGU7dGhpcy5jb2xvcnNOZWVkVXBkYXRlPWEuY29sb3JzTmVlZFVwZGF0ZTt0aGlzLnV2c05lZWRVcGRhdGU9YS51dnNOZWVkVXBkYXRlO3RoaXMuZ3JvdXBzTmVlZFVwZGF0ZT1hLmdyb3Vwc05lZWRVcGRhdGU7cmV0dXJuIHRoaXN9fSk7dmFyIFRkPTA7T2JqZWN0LmFzc2lnbihNLnByb3RvdHlwZSxzYS5wcm90b3R5cGUse2lzR2VvbWV0cnk6ITAsYXBwbHlNYXRyaXg6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPQoobmV3IEthKS5nZXROb3JtYWxNYXRyaXgoYSksYz0wLGQ9dGhpcy52ZXJ0aWNlcy5sZW5ndGg7YzxkO2MrKyl0aGlzLnZlcnRpY2VzW2NdLmFwcGx5TWF0cml4NChhKTtjPTA7Zm9yKGQ9dGhpcy5mYWNlcy5sZW5ndGg7YzxkO2MrKyl7YT10aGlzLmZhY2VzW2NdO2Eubm9ybWFsLmFwcGx5TWF0cml4MyhiKS5ub3JtYWxpemUoKTtmb3IodmFyIGU9MCxmPWEudmVydGV4Tm9ybWFscy5sZW5ndGg7ZTxmO2UrKylhLnZlcnRleE5vcm1hbHNbZV0uYXBwbHlNYXRyaXgzKGIpLm5vcm1hbGl6ZSgpfW51bGwhPT10aGlzLmJvdW5kaW5nQm94JiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO251bGwhPT10aGlzLmJvdW5kaW5nU3BoZXJlJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO3RoaXMubm9ybWFsc05lZWRVcGRhdGU9dGhpcy52ZXJ0aWNlc05lZWRVcGRhdGU9ITA7cmV0dXJuIHRoaXN9LHJvdGF0ZVg6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYil7YS5tYWtlUm90YXRpb25YKGIpOwp0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVZOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe2EubWFrZVJvdGF0aW9uWShiKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVaOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe2EubWFrZVJvdGF0aW9uWihiKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSx0cmFuc2xhdGU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYixjLGQpe2EubWFrZVRyYW5zbGF0aW9uKGIsYyxkKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxzY2FsZTpmdW5jdGlvbigpe3ZhciBhPW5ldyBKO3JldHVybiBmdW5jdGlvbihiLGMsZCl7YS5tYWtlU2NhbGUoYixjLGQpO3RoaXMuYXBwbHlNYXRyaXgoYSk7cmV0dXJuIHRoaXN9fSgpLGxvb2tBdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBCO3JldHVybiBmdW5jdGlvbihiKXthLmxvb2tBdChiKTsKYS51cGRhdGVNYXRyaXgoKTt0aGlzLmFwcGx5TWF0cml4KGEubWF0cml4KX19KCksZnJvbUJ1ZmZlckdlb21ldHJ5OmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiLGQsZSl7dmFyIGY9dm9pZCAwIT09Zz9bbFthXS5jbG9uZSgpLGxbYl0uY2xvbmUoKSxsW2RdLmNsb25lKCldOltdLHI9dm9pZCAwIT09aD9bYy5jb2xvcnNbYV0uY2xvbmUoKSxjLmNvbG9yc1tiXS5jbG9uZSgpLGMuY29sb3JzW2RdLmNsb25lKCldOltdO2U9bmV3IFZhKGEsYixkLGYscixlKTtjLmZhY2VzLnB1c2goZSk7dm9pZCAwIT09ayYmYy5mYWNlVmVydGV4VXZzWzBdLnB1c2goW3FbYV0uY2xvbmUoKSxxW2JdLmNsb25lKCkscVtkXS5jbG9uZSgpXSk7dm9pZCAwIT09bSYmYy5mYWNlVmVydGV4VXZzWzFdLnB1c2goW25bYV0uY2xvbmUoKSxuW2JdLmNsb25lKCksbltkXS5jbG9uZSgpXSl9dmFyIGM9dGhpcyxkPW51bGwhPT1hLmluZGV4P2EuaW5kZXguYXJyYXk6dm9pZCAwLGU9YS5hdHRyaWJ1dGVzLGY9ZS5wb3NpdGlvbi5hcnJheSwKZz12b2lkIDAhPT1lLm5vcm1hbD9lLm5vcm1hbC5hcnJheTp2b2lkIDAsaD12b2lkIDAhPT1lLmNvbG9yP2UuY29sb3IuYXJyYXk6dm9pZCAwLGs9dm9pZCAwIT09ZS51dj9lLnV2LmFycmF5OnZvaWQgMCxtPXZvaWQgMCE9PWUudXYyP2UudXYyLmFycmF5OnZvaWQgMDt2b2lkIDAhPT1tJiYodGhpcy5mYWNlVmVydGV4VXZzWzFdPVtdKTtmb3IodmFyIGw9W10scT1bXSxuPVtdLHI9ZT0wO2U8Zi5sZW5ndGg7ZSs9MyxyKz0yKWMudmVydGljZXMucHVzaChuZXcgcChmW2VdLGZbZSsxXSxmW2UrMl0pKSx2b2lkIDAhPT1nJiZsLnB1c2gobmV3IHAoZ1tlXSxnW2UrMV0sZ1tlKzJdKSksdm9pZCAwIT09aCYmYy5jb2xvcnMucHVzaChuZXcgSChoW2VdLGhbZSsxXSxoW2UrMl0pKSx2b2lkIDAhPT1rJiZxLnB1c2gobmV3IEQoa1tyXSxrW3IrMV0pKSx2b2lkIDAhPT1tJiZuLnB1c2gobmV3IEQobVtyXSxtW3IrMV0pKTt2YXIgej1hLmdyb3VwcztpZigwPHoubGVuZ3RoKWZvcihlPTA7ZTx6Lmxlbmd0aDtlKyspZm9yKHZhciBmPQp6W2VdLHQ9Zi5zdGFydCx5PWYuY291bnQscj10LHQ9dCt5O3I8dDtyKz0zKXZvaWQgMCE9PWQ/YihkW3JdLGRbcisxXSxkW3IrMl0sZi5tYXRlcmlhbEluZGV4KTpiKHIscisxLHIrMixmLm1hdGVyaWFsSW5kZXgpO2Vsc2UgaWYodm9pZCAwIT09ZClmb3IoZT0wO2U8ZC5sZW5ndGg7ZSs9MyliKGRbZV0sZFtlKzFdLGRbZSsyXSk7ZWxzZSBmb3IoZT0wO2U8Zi5sZW5ndGgvMztlKz0zKWIoZSxlKzEsZSsyKTt0aGlzLmNvbXB1dGVGYWNlTm9ybWFscygpO251bGwhPT1hLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1hLmJvdW5kaW5nQm94LmNsb25lKCkpO251bGwhPT1hLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1hLmJvdW5kaW5nU3BoZXJlLmNsb25lKCkpO3JldHVybiB0aGlzfSxjZW50ZXI6ZnVuY3Rpb24oKXt0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO3ZhciBhPXRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKCkubmVnYXRlKCk7dGhpcy50cmFuc2xhdGUoYS54LAphLnksYS56KTtyZXR1cm4gYX0sbm9ybWFsaXplOmZ1bmN0aW9uKCl7dGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTt2YXIgYT10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcixiPXRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzLGI9MD09PWI/MToxL2IsYz1uZXcgSjtjLnNldChiLDAsMCwtYiphLngsMCxiLDAsLWIqYS55LDAsMCxiLC1iKmEueiwwLDAsMCwxKTt0aGlzLmFwcGx5TWF0cml4KGMpO3JldHVybiB0aGlzfSxjb21wdXRlRmFjZU5vcm1hbHM6ZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IHAsYj1uZXcgcCxjPTAsZD10aGlzLmZhY2VzLmxlbmd0aDtjPGQ7YysrKXt2YXIgZT10aGlzLmZhY2VzW2NdLGY9dGhpcy52ZXJ0aWNlc1tlLmFdLGc9dGhpcy52ZXJ0aWNlc1tlLmJdO2Euc3ViVmVjdG9ycyh0aGlzLnZlcnRpY2VzW2UuY10sZyk7Yi5zdWJWZWN0b3JzKGYsZyk7YS5jcm9zcyhiKTthLm5vcm1hbGl6ZSgpO2Uubm9ybWFsLmNvcHkoYSl9fSxjb21wdXRlVmVydGV4Tm9ybWFsczpmdW5jdGlvbihhKXt2b2lkIDA9PT0KYSYmKGE9ITApO3ZhciBiLGMsZDtkPUFycmF5KHRoaXMudmVydGljZXMubGVuZ3RoKTtiPTA7Zm9yKGM9dGhpcy52ZXJ0aWNlcy5sZW5ndGg7YjxjO2IrKylkW2JdPW5ldyBwO2lmKGEpe3ZhciBlLGYsZyxoPW5ldyBwLGs9bmV3IHA7YT0wO2ZvcihiPXRoaXMuZmFjZXMubGVuZ3RoO2E8YjthKyspYz10aGlzLmZhY2VzW2FdLGU9dGhpcy52ZXJ0aWNlc1tjLmFdLGY9dGhpcy52ZXJ0aWNlc1tjLmJdLGc9dGhpcy52ZXJ0aWNlc1tjLmNdLGguc3ViVmVjdG9ycyhnLGYpLGsuc3ViVmVjdG9ycyhlLGYpLGguY3Jvc3MoayksZFtjLmFdLmFkZChoKSxkW2MuYl0uYWRkKGgpLGRbYy5jXS5hZGQoaCl9ZWxzZSBmb3IodGhpcy5jb21wdXRlRmFjZU5vcm1hbHMoKSxhPTAsYj10aGlzLmZhY2VzLmxlbmd0aDthPGI7YSsrKWM9dGhpcy5mYWNlc1thXSxkW2MuYV0uYWRkKGMubm9ybWFsKSxkW2MuYl0uYWRkKGMubm9ybWFsKSxkW2MuY10uYWRkKGMubm9ybWFsKTtiPTA7Zm9yKGM9dGhpcy52ZXJ0aWNlcy5sZW5ndGg7YjwKYztiKyspZFtiXS5ub3JtYWxpemUoKTthPTA7Zm9yKGI9dGhpcy5mYWNlcy5sZW5ndGg7YTxiO2ErKyljPXRoaXMuZmFjZXNbYV0sZT1jLnZlcnRleE5vcm1hbHMsMz09PWUubGVuZ3RoPyhlWzBdLmNvcHkoZFtjLmFdKSxlWzFdLmNvcHkoZFtjLmJdKSxlWzJdLmNvcHkoZFtjLmNdKSk6KGVbMF09ZFtjLmFdLmNsb25lKCksZVsxXT1kW2MuYl0uY2xvbmUoKSxlWzJdPWRbYy5jXS5jbG9uZSgpKTswPHRoaXMuZmFjZXMubGVuZ3RoJiYodGhpcy5ub3JtYWxzTmVlZFVwZGF0ZT0hMCl9LGNvbXB1dGVGbGF0VmVydGV4Tm9ybWFsczpmdW5jdGlvbigpe3ZhciBhLGIsYzt0aGlzLmNvbXB1dGVGYWNlTm9ybWFscygpO2E9MDtmb3IoYj10aGlzLmZhY2VzLmxlbmd0aDthPGI7YSsrKXtjPXRoaXMuZmFjZXNbYV07dmFyIGQ9Yy52ZXJ0ZXhOb3JtYWxzOzM9PT1kLmxlbmd0aD8oZFswXS5jb3B5KGMubm9ybWFsKSxkWzFdLmNvcHkoYy5ub3JtYWwpLGRbMl0uY29weShjLm5vcm1hbCkpOihkWzBdPQpjLm5vcm1hbC5jbG9uZSgpLGRbMV09Yy5ub3JtYWwuY2xvbmUoKSxkWzJdPWMubm9ybWFsLmNsb25lKCkpfTA8dGhpcy5mYWNlcy5sZW5ndGgmJih0aGlzLm5vcm1hbHNOZWVkVXBkYXRlPSEwKX0sY29tcHV0ZU1vcnBoTm9ybWFsczpmdW5jdGlvbigpe3ZhciBhLGIsYyxkLGU7Yz0wO2ZvcihkPXRoaXMuZmFjZXMubGVuZ3RoO2M8ZDtjKyspZm9yKGU9dGhpcy5mYWNlc1tjXSxlLl9fb3JpZ2luYWxGYWNlTm9ybWFsP2UuX19vcmlnaW5hbEZhY2VOb3JtYWwuY29weShlLm5vcm1hbCk6ZS5fX29yaWdpbmFsRmFjZU5vcm1hbD1lLm5vcm1hbC5jbG9uZSgpLGUuX19vcmlnaW5hbFZlcnRleE5vcm1hbHN8fChlLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzPVtdKSxhPTAsYj1lLnZlcnRleE5vcm1hbHMubGVuZ3RoO2E8YjthKyspZS5fX29yaWdpbmFsVmVydGV4Tm9ybWFsc1thXT9lLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzW2FdLmNvcHkoZS52ZXJ0ZXhOb3JtYWxzW2FdKTplLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzW2FdPQplLnZlcnRleE5vcm1hbHNbYV0uY2xvbmUoKTt2YXIgZj1uZXcgTTtmLmZhY2VzPXRoaXMuZmFjZXM7YT0wO2ZvcihiPXRoaXMubW9ycGhUYXJnZXRzLmxlbmd0aDthPGI7YSsrKXtpZighdGhpcy5tb3JwaE5vcm1hbHNbYV0pe3RoaXMubW9ycGhOb3JtYWxzW2FdPXt9O3RoaXMubW9ycGhOb3JtYWxzW2FdLmZhY2VOb3JtYWxzPVtdO3RoaXMubW9ycGhOb3JtYWxzW2FdLnZlcnRleE5vcm1hbHM9W107ZT10aGlzLm1vcnBoTm9ybWFsc1thXS5mYWNlTm9ybWFsczt2YXIgZz10aGlzLm1vcnBoTm9ybWFsc1thXS52ZXJ0ZXhOb3JtYWxzLGgsaztjPTA7Zm9yKGQ9dGhpcy5mYWNlcy5sZW5ndGg7YzxkO2MrKyloPW5ldyBwLGs9e2E6bmV3IHAsYjpuZXcgcCxjOm5ldyBwfSxlLnB1c2goaCksZy5wdXNoKGspfWc9dGhpcy5tb3JwaE5vcm1hbHNbYV07Zi52ZXJ0aWNlcz10aGlzLm1vcnBoVGFyZ2V0c1thXS52ZXJ0aWNlcztmLmNvbXB1dGVGYWNlTm9ybWFscygpO2YuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTsKYz0wO2ZvcihkPXRoaXMuZmFjZXMubGVuZ3RoO2M8ZDtjKyspZT10aGlzLmZhY2VzW2NdLGg9Zy5mYWNlTm9ybWFsc1tjXSxrPWcudmVydGV4Tm9ybWFsc1tjXSxoLmNvcHkoZS5ub3JtYWwpLGsuYS5jb3B5KGUudmVydGV4Tm9ybWFsc1swXSksay5iLmNvcHkoZS52ZXJ0ZXhOb3JtYWxzWzFdKSxrLmMuY29weShlLnZlcnRleE5vcm1hbHNbMl0pfWM9MDtmb3IoZD10aGlzLmZhY2VzLmxlbmd0aDtjPGQ7YysrKWU9dGhpcy5mYWNlc1tjXSxlLm5vcm1hbD1lLl9fb3JpZ2luYWxGYWNlTm9ybWFsLGUudmVydGV4Tm9ybWFscz1lLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzfSxjb21wdXRlTGluZURpc3RhbmNlczpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI9dGhpcy52ZXJ0aWNlcyxjPTAsZD1iLmxlbmd0aDtjPGQ7YysrKTA8YyYmKGErPWJbY10uZGlzdGFuY2VUbyhiW2MtMV0pKSx0aGlzLmxpbmVEaXN0YW5jZXNbY109YX0sY29tcHV0ZUJvdW5kaW5nQm94OmZ1bmN0aW9uKCl7bnVsbD09PQp0aGlzLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1uZXcgVGEpO3RoaXMuYm91bmRpbmdCb3guc2V0RnJvbVBvaW50cyh0aGlzLnZlcnRpY2VzKX0sY29tcHV0ZUJvdW5kaW5nU3BoZXJlOmZ1bmN0aW9uKCl7bnVsbD09PXRoaXMuYm91bmRpbmdTcGhlcmUmJih0aGlzLmJvdW5kaW5nU3BoZXJlPW5ldyBHYSk7dGhpcy5ib3VuZGluZ1NwaGVyZS5zZXRGcm9tUG9pbnRzKHRoaXMudmVydGljZXMpfSxtZXJnZTpmdW5jdGlvbihhLGIsYyl7aWYoITE9PT0oYSYmYS5pc0dlb21ldHJ5KSljb25zb2xlLmVycm9yKCJUSFJFRS5HZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuR2VvbWV0cnkuIixhKTtlbHNle3ZhciBkLGU9dGhpcy52ZXJ0aWNlcy5sZW5ndGgsZj10aGlzLnZlcnRpY2VzLGc9YS52ZXJ0aWNlcyxoPXRoaXMuZmFjZXMsaz1hLmZhY2VzLG09dGhpcy5mYWNlVmVydGV4VXZzWzBdLGw9YS5mYWNlVmVydGV4VXZzWzBdLHE9dGhpcy5jb2xvcnMsCm49YS5jb2xvcnM7dm9pZCAwPT09YyYmKGM9MCk7dm9pZCAwIT09YiYmKGQ9KG5ldyBLYSkuZ2V0Tm9ybWFsTWF0cml4KGIpKTthPTA7Zm9yKHZhciByPWcubGVuZ3RoO2E8cjthKyspe3ZhciBwPWdbYV0uY2xvbmUoKTt2b2lkIDAhPT1iJiZwLmFwcGx5TWF0cml4NChiKTtmLnB1c2gocCl9YT0wO2ZvcihyPW4ubGVuZ3RoO2E8cjthKyspcS5wdXNoKG5bYV0uY2xvbmUoKSk7YT0wO2ZvcihyPWsubGVuZ3RoO2E8cjthKyspe3ZhciBnPWtbYV0sdD1nLnZlcnRleE5vcm1hbHMsbj1nLnZlcnRleENvbG9ycyxxPW5ldyBWYShnLmErZSxnLmIrZSxnLmMrZSk7cS5ub3JtYWwuY29weShnLm5vcm1hbCk7dm9pZCAwIT09ZCYmcS5ub3JtYWwuYXBwbHlNYXRyaXgzKGQpLm5vcm1hbGl6ZSgpO2I9MDtmb3IoZj10Lmxlbmd0aDtiPGY7YisrKXA9dFtiXS5jbG9uZSgpLHZvaWQgMCE9PWQmJnAuYXBwbHlNYXRyaXgzKGQpLm5vcm1hbGl6ZSgpLHEudmVydGV4Tm9ybWFscy5wdXNoKHApO3EuY29sb3IuY29weShnLmNvbG9yKTsKYj0wO2ZvcihmPW4ubGVuZ3RoO2I8ZjtiKyspcD1uW2JdLHEudmVydGV4Q29sb3JzLnB1c2gocC5jbG9uZSgpKTtxLm1hdGVyaWFsSW5kZXg9Zy5tYXRlcmlhbEluZGV4K2M7aC5wdXNoKHEpfWE9MDtmb3Iocj1sLmxlbmd0aDthPHI7YSsrKWlmKGM9bFthXSxkPVtdLHZvaWQgMCE9PWMpe2I9MDtmb3IoZj1jLmxlbmd0aDtiPGY7YisrKWQucHVzaChjW2JdLmNsb25lKCkpO20ucHVzaChkKX19fSxtZXJnZU1lc2g6ZnVuY3Rpb24oYSl7ITE9PT0oYSYmYS5pc01lc2gpP2NvbnNvbGUuZXJyb3IoIlRIUkVFLkdlb21ldHJ5Lm1lcmdlTWVzaCgpOiBtZXNoIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5NZXNoLiIsYSk6KGEubWF0cml4QXV0b1VwZGF0ZSYmYS51cGRhdGVNYXRyaXgoKSx0aGlzLm1lcmdlKGEuZ2VvbWV0cnksYS5tYXRyaXgpKX0sbWVyZ2VWZXJ0aWNlczpmdW5jdGlvbigpe3ZhciBhPXt9LGI9W10sYz1bXSxkLGU9TWF0aC5wb3coMTAsNCksZixnO2Y9MDtmb3IoZz10aGlzLnZlcnRpY2VzLmxlbmd0aDtmPApnO2YrKylkPXRoaXMudmVydGljZXNbZl0sZD1NYXRoLnJvdW5kKGQueCplKSsiXyIrTWF0aC5yb3VuZChkLnkqZSkrIl8iK01hdGgucm91bmQoZC56KmUpLHZvaWQgMD09PWFbZF0/KGFbZF09ZixiLnB1c2godGhpcy52ZXJ0aWNlc1tmXSksY1tmXT1iLmxlbmd0aC0xKTpjW2ZdPWNbYVtkXV07YT1bXTtmPTA7Zm9yKGc9dGhpcy5mYWNlcy5sZW5ndGg7ZjxnO2YrKylmb3IoZT10aGlzLmZhY2VzW2ZdLGUuYT1jW2UuYV0sZS5iPWNbZS5iXSxlLmM9Y1tlLmNdLGU9W2UuYSxlLmIsZS5jXSxkPTA7Mz5kO2QrKylpZihlW2RdPT09ZVsoZCsxKSUzXSl7YS5wdXNoKGYpO2JyZWFrfWZvcihmPWEubGVuZ3RoLTE7MDw9ZjtmLS0pZm9yKGU9YVtmXSx0aGlzLmZhY2VzLnNwbGljZShlLDEpLGM9MCxnPXRoaXMuZmFjZVZlcnRleFV2cy5sZW5ndGg7YzxnO2MrKyl0aGlzLmZhY2VWZXJ0ZXhVdnNbY10uc3BsaWNlKGUsMSk7Zj10aGlzLnZlcnRpY2VzLmxlbmd0aC1iLmxlbmd0aDt0aGlzLnZlcnRpY2VzPQpiO3JldHVybiBmfSxzb3J0RmFjZXNCeU1hdGVyaWFsSW5kZXg6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5mYWNlcyxiPWEubGVuZ3RoLGM9MDtjPGI7YysrKWFbY10uX2lkPWM7YS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEubWF0ZXJpYWxJbmRleC1iLm1hdGVyaWFsSW5kZXh9KTt2YXIgZD10aGlzLmZhY2VWZXJ0ZXhVdnNbMF0sZT10aGlzLmZhY2VWZXJ0ZXhVdnNbMV0sZixnO2QmJmQubGVuZ3RoPT09YiYmKGY9W10pO2UmJmUubGVuZ3RoPT09YiYmKGc9W10pO2ZvcihjPTA7YzxiO2MrKyl7dmFyIGg9YVtjXS5faWQ7ZiYmZi5wdXNoKGRbaF0pO2cmJmcucHVzaChlW2hdKX1mJiYodGhpcy5mYWNlVmVydGV4VXZzWzBdPWYpO2cmJih0aGlzLmZhY2VWZXJ0ZXhVdnNbMV09Zyl9LHRvSlNPTjpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiLGMpe3JldHVybiBjP2F8MTw8YjphJn4oMTw8Yil9ZnVuY3Rpb24gYihhKXt2YXIgYj1hLngudG9TdHJpbmcoKSthLnkudG9TdHJpbmcoKSsKYS56LnRvU3RyaW5nKCk7aWYodm9pZCAwIT09bVtiXSlyZXR1cm4gbVtiXTttW2JdPWsubGVuZ3RoLzM7ay5wdXNoKGEueCxhLnksYS56KTtyZXR1cm4gbVtiXX1mdW5jdGlvbiBjKGEpe3ZhciBiPWEuci50b1N0cmluZygpK2EuZy50b1N0cmluZygpK2EuYi50b1N0cmluZygpO2lmKHZvaWQgMCE9PXFbYl0pcmV0dXJuIHFbYl07cVtiXT1sLmxlbmd0aDtsLnB1c2goYS5nZXRIZXgoKSk7cmV0dXJuIHFbYl19ZnVuY3Rpb24gZChhKXt2YXIgYj1hLngudG9TdHJpbmcoKSthLnkudG9TdHJpbmcoKTtpZih2b2lkIDAhPT1yW2JdKXJldHVybiByW2JdO3JbYl09bi5sZW5ndGgvMjtuLnB1c2goYS54LGEueSk7cmV0dXJuIHJbYl19dmFyIGU9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJHZW9tZXRyeSIsZ2VuZXJhdG9yOiJHZW9tZXRyeS50b0pTT04ifX07ZS51dWlkPXRoaXMudXVpZDtlLnR5cGU9dGhpcy50eXBlOyIiIT09dGhpcy5uYW1lJiYoZS5uYW1lPXRoaXMubmFtZSk7aWYodm9pZCAwIT09CnRoaXMucGFyYW1ldGVycyl7dmFyIGY9dGhpcy5wYXJhbWV0ZXJzLGc7Zm9yKGcgaW4gZil2b2lkIDAhPT1mW2ddJiYoZVtnXT1mW2ddKTtyZXR1cm4gZX1mPVtdO2ZvcihnPTA7Zzx0aGlzLnZlcnRpY2VzLmxlbmd0aDtnKyspe3ZhciBoPXRoaXMudmVydGljZXNbZ107Zi5wdXNoKGgueCxoLnksaC56KX12YXIgaD1bXSxrPVtdLG09e30sbD1bXSxxPXt9LG49W10scj17fTtmb3IoZz0wO2c8dGhpcy5mYWNlcy5sZW5ndGg7ZysrKXt2YXIgcD10aGlzLmZhY2VzW2ddLHQ9dm9pZCAwIT09dGhpcy5mYWNlVmVydGV4VXZzWzBdW2ddLHk9MDxwLm5vcm1hbC5sZW5ndGgoKSx4PTA8cC52ZXJ0ZXhOb3JtYWxzLmxlbmd0aCx2PTEhPT1wLmNvbG9yLnJ8fDEhPT1wLmNvbG9yLmd8fDEhPT1wLmNvbG9yLmIsRz0wPHAudmVydGV4Q29sb3JzLmxlbmd0aCx3PTAsdz1hKHcsMCwwKSx3PWEodywxLCEwKSx3PWEodywyLCExKSx3PWEodywzLHQpLHc9YSh3LDQseSksdz1hKHcsNSx4KSx3PWEodyw2LAp2KSx3PWEodyw3LEcpO2gucHVzaCh3KTtoLnB1c2gocC5hLHAuYixwLmMpO2gucHVzaChwLm1hdGVyaWFsSW5kZXgpO3QmJih0PXRoaXMuZmFjZVZlcnRleFV2c1swXVtnXSxoLnB1c2goZCh0WzBdKSxkKHRbMV0pLGQodFsyXSkpKTt5JiZoLnB1c2goYihwLm5vcm1hbCkpO3gmJih5PXAudmVydGV4Tm9ybWFscyxoLnB1c2goYih5WzBdKSxiKHlbMV0pLGIoeVsyXSkpKTt2JiZoLnB1c2goYyhwLmNvbG9yKSk7RyYmKHA9cC52ZXJ0ZXhDb2xvcnMsaC5wdXNoKGMocFswXSksYyhwWzFdKSxjKHBbMl0pKSl9ZS5kYXRhPXt9O2UuZGF0YS52ZXJ0aWNlcz1mO2UuZGF0YS5ub3JtYWxzPWs7MDxsLmxlbmd0aCYmKGUuZGF0YS5jb2xvcnM9bCk7MDxuLmxlbmd0aCYmKGUuZGF0YS51dnM9W25dKTtlLmRhdGEuZmFjZXM9aDtyZXR1cm4gZX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IE0pLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnO3RoaXMudmVydGljZXM9CltdO3RoaXMuY29sb3JzPVtdO3RoaXMuZmFjZXM9W107dGhpcy5mYWNlVmVydGV4VXZzPVtbXV07dGhpcy5tb3JwaFRhcmdldHM9W107dGhpcy5tb3JwaE5vcm1hbHM9W107dGhpcy5za2luV2VpZ2h0cz1bXTt0aGlzLnNraW5JbmRpY2VzPVtdO3RoaXMubGluZURpc3RhbmNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLm5hbWU9YS5uYW1lO2Q9YS52ZXJ0aWNlcztiPTA7Zm9yKGM9ZC5sZW5ndGg7YjxjO2IrKyl0aGlzLnZlcnRpY2VzLnB1c2goZFtiXS5jbG9uZSgpKTtkPWEuY29sb3JzO2I9MDtmb3IoYz1kLmxlbmd0aDtiPGM7YisrKXRoaXMuY29sb3JzLnB1c2goZFtiXS5jbG9uZSgpKTtkPWEuZmFjZXM7Yj0wO2ZvcihjPWQubGVuZ3RoO2I8YztiKyspdGhpcy5mYWNlcy5wdXNoKGRbYl0uY2xvbmUoKSk7Yj0wO2ZvcihjPWEuZmFjZVZlcnRleFV2cy5sZW5ndGg7YjxjO2IrKyl7dmFyIGg9YS5mYWNlVmVydGV4VXZzW2JdO3ZvaWQgMD09PQp0aGlzLmZhY2VWZXJ0ZXhVdnNbYl0mJih0aGlzLmZhY2VWZXJ0ZXhVdnNbYl09W10pO2Q9MDtmb3IoZT1oLmxlbmd0aDtkPGU7ZCsrKXt2YXIgaz1oW2RdLG09W107Zj0wO2ZvcihnPWsubGVuZ3RoO2Y8ZztmKyspbS5wdXNoKGtbZl0uY2xvbmUoKSk7dGhpcy5mYWNlVmVydGV4VXZzW2JdLnB1c2gobSl9fWY9YS5tb3JwaFRhcmdldHM7Yj0wO2ZvcihjPWYubGVuZ3RoO2I8YztiKyspe2c9e307Zy5uYW1lPWZbYl0ubmFtZTtpZih2b2lkIDAhPT1mW2JdLnZlcnRpY2VzKWZvcihnLnZlcnRpY2VzPVtdLGQ9MCxlPWZbYl0udmVydGljZXMubGVuZ3RoO2Q8ZTtkKyspZy52ZXJ0aWNlcy5wdXNoKGZbYl0udmVydGljZXNbZF0uY2xvbmUoKSk7aWYodm9pZCAwIT09ZltiXS5ub3JtYWxzKWZvcihnLm5vcm1hbHM9W10sZD0wLGU9ZltiXS5ub3JtYWxzLmxlbmd0aDtkPGU7ZCsrKWcubm9ybWFscy5wdXNoKGZbYl0ubm9ybWFsc1tkXS5jbG9uZSgpKTt0aGlzLm1vcnBoVGFyZ2V0cy5wdXNoKGcpfWY9CmEubW9ycGhOb3JtYWxzO2I9MDtmb3IoYz1mLmxlbmd0aDtiPGM7YisrKXtnPXt9O2lmKHZvaWQgMCE9PWZbYl0udmVydGV4Tm9ybWFscylmb3IoZy52ZXJ0ZXhOb3JtYWxzPVtdLGQ9MCxlPWZbYl0udmVydGV4Tm9ybWFscy5sZW5ndGg7ZDxlO2QrKyloPWZbYl0udmVydGV4Tm9ybWFsc1tkXSxrPXt9LGsuYT1oLmEuY2xvbmUoKSxrLmI9aC5iLmNsb25lKCksay5jPWguYy5jbG9uZSgpLGcudmVydGV4Tm9ybWFscy5wdXNoKGspO2lmKHZvaWQgMCE9PWZbYl0uZmFjZU5vcm1hbHMpZm9yKGcuZmFjZU5vcm1hbHM9W10sZD0wLGU9ZltiXS5mYWNlTm9ybWFscy5sZW5ndGg7ZDxlO2QrKylnLmZhY2VOb3JtYWxzLnB1c2goZltiXS5mYWNlTm9ybWFsc1tkXS5jbG9uZSgpKTt0aGlzLm1vcnBoTm9ybWFscy5wdXNoKGcpfWQ9YS5za2luV2VpZ2h0cztiPTA7Zm9yKGM9ZC5sZW5ndGg7YjxjO2IrKyl0aGlzLnNraW5XZWlnaHRzLnB1c2goZFtiXS5jbG9uZSgpKTtkPWEuc2tpbkluZGljZXM7Yj0KMDtmb3IoYz1kLmxlbmd0aDtiPGM7YisrKXRoaXMuc2tpbkluZGljZXMucHVzaChkW2JdLmNsb25lKCkpO2Q9YS5saW5lRGlzdGFuY2VzO2I9MDtmb3IoYz1kLmxlbmd0aDtiPGM7YisrKXRoaXMubGluZURpc3RhbmNlcy5wdXNoKGRbYl0pO2I9YS5ib3VuZGluZ0JveDtudWxsIT09YiYmKHRoaXMuYm91bmRpbmdCb3g9Yi5jbG9uZSgpKTtiPWEuYm91bmRpbmdTcGhlcmU7bnVsbCE9PWImJih0aGlzLmJvdW5kaW5nU3BoZXJlPWIuY2xvbmUoKSk7dGhpcy5lbGVtZW50c05lZWRVcGRhdGU9YS5lbGVtZW50c05lZWRVcGRhdGU7dGhpcy52ZXJ0aWNlc05lZWRVcGRhdGU9YS52ZXJ0aWNlc05lZWRVcGRhdGU7dGhpcy51dnNOZWVkVXBkYXRlPWEudXZzTmVlZFVwZGF0ZTt0aGlzLm5vcm1hbHNOZWVkVXBkYXRlPWEubm9ybWFsc05lZWRVcGRhdGU7dGhpcy5jb2xvcnNOZWVkVXBkYXRlPWEuY29sb3JzTmVlZFVwZGF0ZTt0aGlzLmxpbmVEaXN0YW5jZXNOZWVkVXBkYXRlPWEubGluZURpc3RhbmNlc05lZWRVcGRhdGU7CnRoaXMuZ3JvdXBzTmVlZFVwZGF0ZT1hLmdyb3Vwc05lZWRVcGRhdGU7cmV0dXJuIHRoaXN9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fSk7SS5NYXhJbmRleD02NTUzNTtPYmplY3QuYXNzaWduKEkucHJvdG90eXBlLHNhLnByb3RvdHlwZSx7aXNCdWZmZXJHZW9tZXRyeTohMCxnZXRJbmRleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZGV4fSxzZXRJbmRleDpmdW5jdGlvbihhKXtBcnJheS5pc0FycmF5KGEpP3RoaXMuaW5kZXg9bmV3ICg2NTUzNTxTZChhKT9qYjppYikoYSwxKTp0aGlzLmluZGV4PWF9LGFkZEF0dHJpYnV0ZTpmdW5jdGlvbihhLGIsYyl7aWYoITE9PT0oYiYmYi5pc0J1ZmZlckF0dHJpYnV0ZSkmJiExPT09KGImJmIuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSkpY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEF0dHJpYnV0ZSgpIG5vdyBleHBlY3RzICggbmFtZSwgYXR0cmlidXRlICkuIiksCnRoaXMuYWRkQXR0cmlidXRlKGEsbmV3IEwoYixjKSk7ZWxzZSBpZigiaW5kZXgiPT09YSljb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleChiKTtlbHNlIHJldHVybiB0aGlzLmF0dHJpYnV0ZXNbYV09Yix0aGlzfSxnZXRBdHRyaWJ1dGU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1thXX0scmVtb3ZlQXR0cmlidXRlOmZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbYV07cmV0dXJuIHRoaXN9LGFkZEdyb3VwOmZ1bmN0aW9uKGEsYixjKXt0aGlzLmdyb3Vwcy5wdXNoKHtzdGFydDphLGNvdW50OmIsbWF0ZXJpYWxJbmRleDp2b2lkIDAhPT1jP2M6MH0pfSxjbGVhckdyb3VwczpmdW5jdGlvbigpe3RoaXMuZ3JvdXBzPVtdfSxzZXREcmF3UmFuZ2U6ZnVuY3Rpb24oYSxiKXt0aGlzLmRyYXdSYW5nZS5zdGFydD1hO3RoaXMuZHJhd1JhbmdlLmNvdW50PQpifSxhcHBseU1hdHJpeDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247dm9pZCAwIT09YiYmKGEuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZShiKSxiLm5lZWRzVXBkYXRlPSEwKTtiPXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7dm9pZCAwIT09YiYmKChuZXcgS2EpLmdldE5vcm1hbE1hdHJpeChhKS5hcHBseVRvQnVmZmVyQXR0cmlidXRlKGIpLGIubmVlZHNVcGRhdGU9ITApO251bGwhPT10aGlzLmJvdW5kaW5nQm94JiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO251bGwhPT10aGlzLmJvdW5kaW5nU3BoZXJlJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO3JldHVybiB0aGlzfSxyb3RhdGVYOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe2EubWFrZVJvdGF0aW9uWChiKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVZOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe2EubWFrZVJvdGF0aW9uWShiKTsKdGhpcy5hcHBseU1hdHJpeChhKTtyZXR1cm4gdGhpc319KCkscm90YXRlWjpmdW5jdGlvbigpe3ZhciBhPW5ldyBKO3JldHVybiBmdW5jdGlvbihiKXthLm1ha2VSb3RhdGlvblooYik7dGhpcy5hcHBseU1hdHJpeChhKTtyZXR1cm4gdGhpc319KCksdHJhbnNsYXRlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXthLm1ha2VUcmFuc2xhdGlvbihiLGMsZCk7dGhpcy5hcHBseU1hdHJpeChhKTtyZXR1cm4gdGhpc319KCksc2NhbGU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYixjLGQpe2EubWFrZVNjYWxlKGIsYyxkKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxsb29rQXQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgQjtyZXR1cm4gZnVuY3Rpb24oYil7YS5sb29rQXQoYik7YS51cGRhdGVNYXRyaXgoKTt0aGlzLmFwcGx5TWF0cml4KGEubWF0cml4KX19KCksY2VudGVyOmZ1bmN0aW9uKCl7dGhpcy5jb21wdXRlQm91bmRpbmdCb3goKTsKdmFyIGE9dGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIoKS5uZWdhdGUoKTt0aGlzLnRyYW5zbGF0ZShhLngsYS55LGEueik7cmV0dXJuIGF9LHNldEZyb21PYmplY3Q6ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZW9tZXRyeTtpZihhLmlzUG9pbnRzfHxhLmlzTGluZSl7YT1uZXcgQygzKmIudmVydGljZXMubGVuZ3RoLDMpO3ZhciBjPW5ldyBDKDMqYi5jb2xvcnMubGVuZ3RoLDMpO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsYS5jb3B5VmVjdG9yM3NBcnJheShiLnZlcnRpY2VzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoImNvbG9yIixjLmNvcHlDb2xvcnNBcnJheShiLmNvbG9ycykpO2IubGluZURpc3RhbmNlcyYmYi5saW5lRGlzdGFuY2VzLmxlbmd0aD09PWIudmVydGljZXMubGVuZ3RoJiYoYT1uZXcgQyhiLmxpbmVEaXN0YW5jZXMubGVuZ3RoLDEpLHRoaXMuYWRkQXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLGEuY29weUFycmF5KGIubGluZURpc3RhbmNlcykpKTtudWxsIT09Yi5ib3VuZGluZ1NwaGVyZSYmCih0aGlzLmJvdW5kaW5nU3BoZXJlPWIuYm91bmRpbmdTcGhlcmUuY2xvbmUoKSk7bnVsbCE9PWIuYm91bmRpbmdCb3gmJih0aGlzLmJvdW5kaW5nQm94PWIuYm91bmRpbmdCb3guY2xvbmUoKSl9ZWxzZSBhLmlzTWVzaCYmYiYmYi5pc0dlb21ldHJ5JiZ0aGlzLmZyb21HZW9tZXRyeShiKTtyZXR1cm4gdGhpc30sdXBkYXRlRnJvbU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYj1hLmdlb21ldHJ5O2lmKGEuaXNNZXNoKXt2YXIgYz1iLl9fZGlyZWN0R2VvbWV0cnk7ITA9PT1iLmVsZW1lbnRzTmVlZFVwZGF0ZSYmKGM9dm9pZCAwLGIuZWxlbWVudHNOZWVkVXBkYXRlPSExKTtpZih2b2lkIDA9PT1jKXJldHVybiB0aGlzLmZyb21HZW9tZXRyeShiKTtjLnZlcnRpY2VzTmVlZFVwZGF0ZT1iLnZlcnRpY2VzTmVlZFVwZGF0ZTtjLm5vcm1hbHNOZWVkVXBkYXRlPWIubm9ybWFsc05lZWRVcGRhdGU7Yy5jb2xvcnNOZWVkVXBkYXRlPWIuY29sb3JzTmVlZFVwZGF0ZTtjLnV2c05lZWRVcGRhdGU9Yi51dnNOZWVkVXBkYXRlOwpjLmdyb3Vwc05lZWRVcGRhdGU9Yi5ncm91cHNOZWVkVXBkYXRlO2IudmVydGljZXNOZWVkVXBkYXRlPSExO2Iubm9ybWFsc05lZWRVcGRhdGU9ITE7Yi5jb2xvcnNOZWVkVXBkYXRlPSExO2IudXZzTmVlZFVwZGF0ZT0hMTtiLmdyb3Vwc05lZWRVcGRhdGU9ITE7Yj1jfSEwPT09Yi52ZXJ0aWNlc05lZWRVcGRhdGUmJihjPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbix2b2lkIDAhPT1jJiYoYy5jb3B5VmVjdG9yM3NBcnJheShiLnZlcnRpY2VzKSxjLm5lZWRzVXBkYXRlPSEwKSxiLnZlcnRpY2VzTmVlZFVwZGF0ZT0hMSk7ITA9PT1iLm5vcm1hbHNOZWVkVXBkYXRlJiYoYz10aGlzLmF0dHJpYnV0ZXMubm9ybWFsLHZvaWQgMCE9PWMmJihjLmNvcHlWZWN0b3Izc0FycmF5KGIubm9ybWFscyksYy5uZWVkc1VwZGF0ZT0hMCksYi5ub3JtYWxzTmVlZFVwZGF0ZT0hMSk7ITA9PT1iLmNvbG9yc05lZWRVcGRhdGUmJihjPXRoaXMuYXR0cmlidXRlcy5jb2xvcix2b2lkIDAhPT1jJiYoYy5jb3B5Q29sb3JzQXJyYXkoYi5jb2xvcnMpLApjLm5lZWRzVXBkYXRlPSEwKSxiLmNvbG9yc05lZWRVcGRhdGU9ITEpO2IudXZzTmVlZFVwZGF0ZSYmKGM9dGhpcy5hdHRyaWJ1dGVzLnV2LHZvaWQgMCE9PWMmJihjLmNvcHlWZWN0b3Iyc0FycmF5KGIudXZzKSxjLm5lZWRzVXBkYXRlPSEwKSxiLnV2c05lZWRVcGRhdGU9ITEpO2IubGluZURpc3RhbmNlc05lZWRVcGRhdGUmJihjPXRoaXMuYXR0cmlidXRlcy5saW5lRGlzdGFuY2Usdm9pZCAwIT09YyYmKGMuY29weUFycmF5KGIubGluZURpc3RhbmNlcyksYy5uZWVkc1VwZGF0ZT0hMCksYi5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZT0hMSk7Yi5ncm91cHNOZWVkVXBkYXRlJiYoYi5jb21wdXRlR3JvdXBzKGEuZ2VvbWV0cnkpLHRoaXMuZ3JvdXBzPWIuZ3JvdXBzLGIuZ3JvdXBzTmVlZFVwZGF0ZT0hMSk7cmV0dXJuIHRoaXN9LGZyb21HZW9tZXRyeTpmdW5jdGlvbihhKXthLl9fZGlyZWN0R2VvbWV0cnk9KG5ldyBLZSkuZnJvbUdlb21ldHJ5KGEpO3JldHVybiB0aGlzLmZyb21EaXJlY3RHZW9tZXRyeShhLl9fZGlyZWN0R2VvbWV0cnkpfSwKZnJvbURpcmVjdEdlb21ldHJ5OmZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBGbG9hdDMyQXJyYXkoMyphLnZlcnRpY2VzLmxlbmd0aCk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIiwobmV3IEwoYiwzKSkuY29weVZlY3RvcjNzQXJyYXkoYS52ZXJ0aWNlcykpOzA8YS5ub3JtYWxzLmxlbmd0aCYmKGI9bmV3IEZsb2F0MzJBcnJheSgzKmEubm9ybWFscy5sZW5ndGgpLHRoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLChuZXcgTChiLDMpKS5jb3B5VmVjdG9yM3NBcnJheShhLm5vcm1hbHMpKSk7MDxhLmNvbG9ycy5sZW5ndGgmJihiPW5ldyBGbG9hdDMyQXJyYXkoMyphLmNvbG9ycy5sZW5ndGgpLHRoaXMuYWRkQXR0cmlidXRlKCJjb2xvciIsKG5ldyBMKGIsMykpLmNvcHlDb2xvcnNBcnJheShhLmNvbG9ycykpKTswPGEudXZzLmxlbmd0aCYmKGI9bmV3IEZsb2F0MzJBcnJheSgyKmEudXZzLmxlbmd0aCksdGhpcy5hZGRBdHRyaWJ1dGUoInV2IiwobmV3IEwoYiwyKSkuY29weVZlY3RvcjJzQXJyYXkoYS51dnMpKSk7CjA8YS51dnMyLmxlbmd0aCYmKGI9bmV3IEZsb2F0MzJBcnJheSgyKmEudXZzMi5sZW5ndGgpLHRoaXMuYWRkQXR0cmlidXRlKCJ1djIiLChuZXcgTChiLDIpKS5jb3B5VmVjdG9yMnNBcnJheShhLnV2czIpKSk7MDxhLmluZGljZXMubGVuZ3RoJiYoYj1uZXcgKDY1NTM1PFNkKGEuaW5kaWNlcyk/VWludDMyQXJyYXk6VWludDE2QXJyYXkpKDMqYS5pbmRpY2VzLmxlbmd0aCksdGhpcy5zZXRJbmRleCgobmV3IEwoYiwxKSkuY29weUluZGljZXNBcnJheShhLmluZGljZXMpKSk7dGhpcy5ncm91cHM9YS5ncm91cHM7Zm9yKHZhciBjIGluIGEubW9ycGhUYXJnZXRzKXtmb3IodmFyIGI9W10sZD1hLm1vcnBoVGFyZ2V0c1tjXSxlPTAsZj1kLmxlbmd0aDtlPGY7ZSsrKXt2YXIgZz1kW2VdLGg9bmV3IEMoMypnLmxlbmd0aCwzKTtiLnB1c2goaC5jb3B5VmVjdG9yM3NBcnJheShnKSl9dGhpcy5tb3JwaEF0dHJpYnV0ZXNbY109Yn0wPGEuc2tpbkluZGljZXMubGVuZ3RoJiYoYz1uZXcgQyg0KgphLnNraW5JbmRpY2VzLmxlbmd0aCw0KSx0aGlzLmFkZEF0dHJpYnV0ZSgic2tpbkluZGV4IixjLmNvcHlWZWN0b3I0c0FycmF5KGEuc2tpbkluZGljZXMpKSk7MDxhLnNraW5XZWlnaHRzLmxlbmd0aCYmKGM9bmV3IEMoNCphLnNraW5XZWlnaHRzLmxlbmd0aCw0KSx0aGlzLmFkZEF0dHJpYnV0ZSgic2tpbldlaWdodCIsYy5jb3B5VmVjdG9yNHNBcnJheShhLnNraW5XZWlnaHRzKSkpO251bGwhPT1hLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1hLmJvdW5kaW5nU3BoZXJlLmNsb25lKCkpO251bGwhPT1hLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1hLmJvdW5kaW5nQm94LmNsb25lKCkpO3JldHVybiB0aGlzfSxjb21wdXRlQm91bmRpbmdCb3g6ZnVuY3Rpb24oKXtudWxsPT09dGhpcy5ib3VuZGluZ0JveCYmKHRoaXMuYm91bmRpbmdCb3g9bmV3IFRhKTt2YXIgYT10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247dm9pZCAwIT09YT90aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoYSk6CnRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7KGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLngpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3g6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfSxjb21wdXRlQm91bmRpbmdTcGhlcmU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgVGEsYj1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oKXtudWxsPT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bmV3IEdhKTt2YXIgYz10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoYyl7dmFyIGQ9dGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXI7YS5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKGMpOwphLmdldENlbnRlcihkKTtmb3IodmFyIGU9MCxmPTAsZz1jLmNvdW50O2Y8ZztmKyspYi54PWMuZ2V0WChmKSxiLnk9Yy5nZXRZKGYpLGIuej1jLmdldFooZiksZT1NYXRoLm1heChlLGQuZGlzdGFuY2VUb1NxdWFyZWQoYikpO3RoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzPU1hdGguc3FydChlKTtpc05hTih0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cykmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBDb21wdXRlZCByYWRpdXMgaXMgTmFOLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfX19KCksY29tcHV0ZUZhY2VOb3JtYWxzOmZ1bmN0aW9uKCl7fSxjb21wdXRlVmVydGV4Tm9ybWFsczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuaW5kZXgsYj10aGlzLmF0dHJpYnV0ZXMsYz10aGlzLmdyb3VwcztpZihiLnBvc2l0aW9uKXt2YXIgZD1iLnBvc2l0aW9uLmFycmF5OwppZih2b2lkIDA9PT1iLm5vcm1hbCl0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgTChuZXcgRmxvYXQzMkFycmF5KGQubGVuZ3RoKSwzKSk7ZWxzZSBmb3IodmFyIGU9Yi5ub3JtYWwuYXJyYXksZj0wLGc9ZS5sZW5ndGg7ZjxnO2YrKyllW2ZdPTA7dmFyIGU9Yi5ub3JtYWwuYXJyYXksaCxrLG0sbD1uZXcgcCxxPW5ldyBwLG49bmV3IHAscj1uZXcgcCx6PW5ldyBwO2lmKGEpe2E9YS5hcnJheTswPT09Yy5sZW5ndGgmJnRoaXMuYWRkR3JvdXAoMCxhLmxlbmd0aCk7Zm9yKHZhciB0PTAseT1jLmxlbmd0aDt0PHk7Kyt0KWZvcihmPWNbdF0sZz1mLnN0YXJ0LGg9Zi5jb3VudCxmPWcsZys9aDtmPGc7Zis9MyloPTMqYVtmKzBdLGs9MyphW2YrMV0sbT0zKmFbZisyXSxsLmZyb21BcnJheShkLGgpLHEuZnJvbUFycmF5KGQsayksbi5mcm9tQXJyYXkoZCxtKSxyLnN1YlZlY3RvcnMobixxKSx6LnN1YlZlY3RvcnMobCxxKSxyLmNyb3NzKHopLGVbaF0rPXIueCxlW2grMV0rPXIueSwKZVtoKzJdKz1yLnosZVtrXSs9ci54LGVbaysxXSs9ci55LGVbaysyXSs9ci56LGVbbV0rPXIueCxlW20rMV0rPXIueSxlW20rMl0rPXIuen1lbHNlIGZvcihmPTAsZz1kLmxlbmd0aDtmPGc7Zis9OSlsLmZyb21BcnJheShkLGYpLHEuZnJvbUFycmF5KGQsZiszKSxuLmZyb21BcnJheShkLGYrNiksci5zdWJWZWN0b3JzKG4scSksei5zdWJWZWN0b3JzKGwscSksci5jcm9zcyh6KSxlW2ZdPXIueCxlW2YrMV09ci55LGVbZisyXT1yLnosZVtmKzNdPXIueCxlW2YrNF09ci55LGVbZis1XT1yLnosZVtmKzZdPXIueCxlW2YrN109ci55LGVbZis4XT1yLno7dGhpcy5ub3JtYWxpemVOb3JtYWxzKCk7Yi5ub3JtYWwubmVlZHNVcGRhdGU9ITB9fSxtZXJnZTpmdW5jdGlvbihhLGIpe2lmKCExPT09KGEmJmEuaXNCdWZmZXJHZW9tZXRyeSkpY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVyZ2UoKTogZ2VvbWV0cnkgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5LiIsCmEpO2Vsc2V7dm9pZCAwPT09YiYmKGI9MCk7dmFyIGM9dGhpcy5hdHRyaWJ1dGVzLGQ7Zm9yKGQgaW4gYylpZih2b2lkIDAhPT1hLmF0dHJpYnV0ZXNbZF0pZm9yKHZhciBlPWNbZF0uYXJyYXksZj1hLmF0dHJpYnV0ZXNbZF0sZz1mLmFycmF5LGg9MCxmPWYuaXRlbVNpemUqYjtoPGcubGVuZ3RoO2grKyxmKyspZVtmXT1nW2hdO3JldHVybiB0aGlzfX0sbm9ybWFsaXplTm9ybWFsczpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsLGIsYyxkLGUsZj0wLGc9YS5jb3VudDtmPGc7ZisrKWI9YS5nZXRYKGYpLGM9YS5nZXRZKGYpLGQ9YS5nZXRaKGYpLGU9MS9NYXRoLnNxcnQoYipiK2MqYytkKmQpLGEuc2V0WFlaKGYsYiplLGMqZSxkKmUpfSx0b05vbkluZGV4ZWQ6ZnVuY3Rpb24oKXtpZihudWxsPT09dGhpcy5pbmRleClyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS50b05vbkluZGV4ZWQoKTogR2VvbWV0cnkgaXMgYWxyZWFkeSBub24taW5kZXhlZC4iKSwKdGhpczt2YXIgYT1uZXcgSSxiPXRoaXMuaW5kZXguYXJyYXksYz10aGlzLmF0dHJpYnV0ZXMsZDtmb3IoZCBpbiBjKXtmb3IodmFyIGU9Y1tkXSxmPWUuYXJyYXksZT1lLml0ZW1TaXplLGc9bmV3IGYuY29uc3RydWN0b3IoYi5sZW5ndGgqZSksaCxrPTAsbT0wLGw9Yi5sZW5ndGg7bTxsO20rKyl7aD1iW21dKmU7Zm9yKHZhciBxPTA7cTxlO3ErKylnW2srK109ZltoKytdfWEuYWRkQXR0cmlidXRlKGQsbmV3IEwoZyxlKSl9cmV0dXJuIGF9LHRvSlNPTjpmdW5jdGlvbigpe3ZhciBhPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQnVmZmVyR2VvbWV0cnkiLGdlbmVyYXRvcjoiQnVmZmVyR2VvbWV0cnkudG9KU09OIn19O2EudXVpZD10aGlzLnV1aWQ7YS50eXBlPXRoaXMudHlwZTsiIiE9PXRoaXMubmFtZSYmKGEubmFtZT10aGlzLm5hbWUpO2lmKHZvaWQgMCE9PXRoaXMucGFyYW1ldGVycyl7dmFyIGI9dGhpcy5wYXJhbWV0ZXJzLGM7Zm9yKGMgaW4gYil2b2lkIDAhPT1iW2NdJiYKKGFbY109YltjXSk7cmV0dXJuIGF9YS5kYXRhPXthdHRyaWJ1dGVzOnt9fTt2YXIgZD10aGlzLmluZGV4O251bGwhPT1kJiYoYj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkLmFycmF5KSxhLmRhdGEuaW5kZXg9e3R5cGU6ZC5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OmJ9KTtkPXRoaXMuYXR0cmlidXRlcztmb3IoYyBpbiBkKXt2YXIgZT1kW2NdLGI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5hcnJheSk7YS5kYXRhLmF0dHJpYnV0ZXNbY109e2l0ZW1TaXplOmUuaXRlbVNpemUsdHlwZTplLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6Yixub3JtYWxpemVkOmUubm9ybWFsaXplZH19Yz10aGlzLmdyb3VwczswPGMubGVuZ3RoJiYoYS5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGMpKSk7Yz10aGlzLmJvdW5kaW5nU3BoZXJlO251bGwhPT1jJiYoYS5kYXRhLmJvdW5kaW5nU3BoZXJlPXtjZW50ZXI6Yy5jZW50ZXIudG9BcnJheSgpLApyYWRpdXM6Yy5yYWRpdXN9KTtyZXR1cm4gYX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IEkpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkO3RoaXMuaW5kZXg9bnVsbDt0aGlzLmF0dHJpYnV0ZXM9e307dGhpcy5tb3JwaEF0dHJpYnV0ZXM9e307dGhpcy5ncm91cHM9W107dGhpcy5ib3VuZGluZ1NwaGVyZT10aGlzLmJvdW5kaW5nQm94PW51bGw7dGhpcy5uYW1lPWEubmFtZTtjPWEuaW5kZXg7bnVsbCE9PWMmJnRoaXMuc2V0SW5kZXgoYy5jbG9uZSgpKTtjPWEuYXR0cmlidXRlcztmb3IoYiBpbiBjKXRoaXMuYWRkQXR0cmlidXRlKGIsY1tiXS5jbG9uZSgpKTt2YXIgZT1hLm1vcnBoQXR0cmlidXRlcztmb3IoYiBpbiBlKXt2YXIgZj1bXSxnPWVbYl07Yz0wO2ZvcihkPWcubGVuZ3RoO2M8ZDtjKyspZi5wdXNoKGdbY10uY2xvbmUoKSk7dGhpcy5tb3JwaEF0dHJpYnV0ZXNbYl09Zn1iPWEuZ3JvdXBzO2M9MDtmb3IoZD1iLmxlbmd0aDtjPGQ7YysrKWU9CmJbY10sdGhpcy5hZGRHcm91cChlLnN0YXJ0LGUuY291bnQsZS5tYXRlcmlhbEluZGV4KTtiPWEuYm91bmRpbmdCb3g7bnVsbCE9PWImJih0aGlzLmJvdW5kaW5nQm94PWIuY2xvbmUoKSk7Yj1hLmJvdW5kaW5nU3BoZXJlO251bGwhPT1iJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1iLmNsb25lKCkpO3RoaXMuZHJhd1JhbmdlLnN0YXJ0PWEuZHJhd1JhbmdlLnN0YXJ0O3RoaXMuZHJhd1JhbmdlLmNvdW50PWEuZHJhd1JhbmdlLmNvdW50O3JldHVybiB0aGlzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX0pO0NhLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpDYSxpc01lc2g6ITAsc2V0RHJhd01vZGU6ZnVuY3Rpb24oYSl7dGhpcy5kcmF3TW9kZT1hfSxjb3B5OmZ1bmN0aW9uKGEpe0IucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMuZHJhd01vZGU9YS5kcmF3TW9kZTsKcmV0dXJuIHRoaXN9LHVwZGF0ZU1vcnBoVGFyZ2V0czpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2VvbWV0cnkubW9ycGhUYXJnZXRzO2lmKHZvaWQgMCE9PWEmJjA8YS5sZW5ndGgpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdO3RoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2Zvcih2YXIgYj0wLGM9YS5sZW5ndGg7YjxjO2IrKyl0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2FbYl0ubmFtZV09Yn19LHJheWNhc3Q6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYixjLGQsZSxmLGcpe1VhLmJhcnljb29yZEZyb21Qb2ludChhLGIsYyxkLHQpO2UubXVsdGlwbHlTY2FsYXIodC54KTtmLm11bHRpcGx5U2NhbGFyKHQueSk7Zy5tdWx0aXBseVNjYWxhcih0LnopO2UuYWRkKGYpLmFkZChnKTtyZXR1cm4gZS5jbG9uZSgpfWZ1bmN0aW9uIGIoYSxiLGMsZCxlLGYsZyl7dmFyIGg9YS5tYXRlcmlhbDtpZihudWxsPT09CigxPT09aC5zaWRlP2MuaW50ZXJzZWN0VHJpYW5nbGUoZixlLGQsITAsZyk6Yy5pbnRlcnNlY3RUcmlhbmdsZShkLGUsZiwyIT09aC5zaWRlLGcpKSlyZXR1cm4gbnVsbDt4LmNvcHkoZyk7eC5hcHBseU1hdHJpeDQoYS5tYXRyaXhXb3JsZCk7Yz1iLnJheS5vcmlnaW4uZGlzdGFuY2VUbyh4KTtyZXR1cm4gYzxiLm5lYXJ8fGM+Yi5mYXI/bnVsbDp7ZGlzdGFuY2U6Yyxwb2ludDp4LmNsb25lKCksb2JqZWN0OmF9fWZ1bmN0aW9uIGMoYyxkLGUsZixtLGwsdSxxKXtnLmZyb21CdWZmZXJBdHRyaWJ1dGUoZixsKTtoLmZyb21CdWZmZXJBdHRyaWJ1dGUoZix1KTtrLmZyb21CdWZmZXJBdHRyaWJ1dGUoZixxKTtpZihjPWIoYyxkLGUsZyxoLGsseSkpbSYmKG4uZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLGwpLHIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLHUpLHouZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLHEpLGMudXY9YSh5LGcsaCxrLG4scix6KSksYy5mYWNlPW5ldyBWYShsLHUscSxVYS5ub3JtYWwoZywKaCxrKSksYy5mYWNlSW5kZXg9bDtyZXR1cm4gY312YXIgZD1uZXcgSixlPW5ldyBoYixmPW5ldyBHYSxnPW5ldyBwLGg9bmV3IHAsaz1uZXcgcCxtPW5ldyBwLGw9bmV3IHAscT1uZXcgcCxuPW5ldyBELHI9bmV3IEQsej1uZXcgRCx0PW5ldyBwLHk9bmV3IHAseD1uZXcgcDtyZXR1cm4gZnVuY3Rpb24ocCx0KXt2YXIgdz10aGlzLmdlb21ldHJ5LHg9dGhpcy5tYXRlcmlhbCxDPXRoaXMubWF0cml4V29ybGQ7aWYodm9pZCAwIT09eCYmKG51bGw9PT13LmJvdW5kaW5nU3BoZXJlJiZ3LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLGYuY29weSh3LmJvdW5kaW5nU3BoZXJlKSxmLmFwcGx5TWF0cml4NChDKSwhMSE9PXAucmF5LmludGVyc2VjdHNTcGhlcmUoZikmJihkLmdldEludmVyc2UoQyksZS5jb3B5KHAucmF5KS5hcHBseU1hdHJpeDQoZCksbnVsbD09PXcuYm91bmRpbmdCb3h8fCExIT09ZS5pbnRlcnNlY3RzQm94KHcuYm91bmRpbmdCb3gpKSkpe3ZhciBFO2lmKHcuaXNCdWZmZXJHZW9tZXRyeSl7dmFyIEYsCkQseD13LmluZGV4LEI9dy5hdHRyaWJ1dGVzLnBvc2l0aW9uLEM9dy5hdHRyaWJ1dGVzLnV2LGNhLEk7aWYobnVsbCE9PXgpZm9yKGNhPTAsST14LmNvdW50O2NhPEk7Y2ErPTMpe2lmKHc9eC5nZXRYKGNhKSxGPXguZ2V0WChjYSsxKSxEPXguZ2V0WChjYSsyKSxFPWModGhpcyxwLGUsQixDLHcsRixEKSlFLmZhY2VJbmRleD1NYXRoLmZsb29yKGNhLzMpLHQucHVzaChFKX1lbHNlIGZvcihjYT0wLEk9Qi5jb3VudDtjYTxJO2NhKz0zKWlmKHc9Y2EsRj1jYSsxLEQ9Y2ErMixFPWModGhpcyxwLGUsQixDLHcsRixEKSlFLmluZGV4PXcsdC5wdXNoKEUpfWVsc2UgaWYody5pc0dlb21ldHJ5KXt2YXIgSCxDPUFycmF5LmlzQXJyYXkoeCk7Y2E9dy52ZXJ0aWNlcztJPXcuZmFjZXM7Rj13LmZhY2VWZXJ0ZXhVdnNbMF07MDxGLmxlbmd0aCYmKEI9Rik7Zm9yKHZhciBKPTAsTT1JLmxlbmd0aDtKPE07SisrKXt2YXIgUD1JW0pdO0U9Qz94W1AubWF0ZXJpYWxJbmRleF06eDtpZih2b2lkIDAhPT0KRSl7Rj1jYVtQLmFdO0Q9Y2FbUC5iXTtIPWNhW1AuY107aWYoITA9PT1FLm1vcnBoVGFyZ2V0cyl7RT13Lm1vcnBoVGFyZ2V0czt2YXIgSz10aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztnLnNldCgwLDAsMCk7aC5zZXQoMCwwLDApO2suc2V0KDAsMCwwKTtmb3IodmFyIFc9MCxiYT1FLmxlbmd0aDtXPGJhO1crKyl7dmFyIFQ9S1tXXTtpZigwIT09VCl7dmFyIFE9RVtXXS52ZXJ0aWNlcztnLmFkZFNjYWxlZFZlY3RvcihtLnN1YlZlY3RvcnMoUVtQLmFdLEYpLFQpO2guYWRkU2NhbGVkVmVjdG9yKGwuc3ViVmVjdG9ycyhRW1AuYl0sRCksVCk7ay5hZGRTY2FsZWRWZWN0b3IocS5zdWJWZWN0b3JzKFFbUC5jXSxIKSxUKX19Zy5hZGQoRik7aC5hZGQoRCk7ay5hZGQoSCk7Rj1nO0Q9aDtIPWt9aWYoRT1iKHRoaXMscCxlLEYsRCxILHkpKUImJkJbSl0mJihLPUJbSl0sbi5jb3B5KEtbMF0pLHIuY29weShLWzFdKSx6LmNvcHkoS1syXSksRS51dj1hKHksRixELEgsbixyLHopKSxFLmZhY2U9ClAsRS5mYWNlSW5kZXg9Six0LnB1c2goRSl9fX19fX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmdlb21ldHJ5LHRoaXMubWF0ZXJpYWwpKS5jb3B5KHRoaXMpfX0pO0liLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtJYi5wcm90b3R5cGUuY29uc3RydWN0b3I9SWI7a2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO2tiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1rYjt4Yy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7eGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPXhjO2xiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlKTtsYi5wcm90b3R5cGUuY29uc3RydWN0b3I9bGI7T2EucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOk9hLGlzQ2FtZXJhOiEwLGNvcHk6ZnVuY3Rpb24oYSl7Qi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsCmEpO3RoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoYS5tYXRyaXhXb3JsZEludmVyc2UpO3RoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KGEucHJvamVjdGlvbk1hdHJpeCk7cmV0dXJuIHRoaXN9LGdldFdvcmxkRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHFhO3JldHVybiBmdW5jdGlvbihiKXtiPWJ8fG5ldyBwO3RoaXMuZ2V0V29ybGRRdWF0ZXJuaW9uKGEpO3JldHVybiBiLnNldCgwLDAsLTEpLmFwcGx5UXVhdGVybmlvbihhKX19KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSk7eGEucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp4YSxpc1BlcnNwZWN0aXZlQ2FtZXJhOiEwLGNvcHk6ZnVuY3Rpb24oYSl7T2EucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMuZm92PWEuZm92O3RoaXMuem9vbT1hLnpvb207dGhpcy5uZWFyPQphLm5lYXI7dGhpcy5mYXI9YS5mYXI7dGhpcy5mb2N1cz1hLmZvY3VzO3RoaXMuYXNwZWN0PWEuYXNwZWN0O3RoaXMudmlldz1udWxsPT09YS52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSxhLnZpZXcpO3RoaXMuZmlsbUdhdWdlPWEuZmlsbUdhdWdlO3RoaXMuZmlsbU9mZnNldD1hLmZpbG1PZmZzZXQ7cmV0dXJuIHRoaXN9LHNldEZvY2FsTGVuZ3RoOmZ1bmN0aW9uKGEpe2E9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvYTt0aGlzLmZvdj0yKlkuUkFEMkRFRypNYXRoLmF0YW4oYSk7dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LGdldEZvY2FsTGVuZ3RoOmZ1bmN0aW9uKCl7dmFyIGE9TWF0aC50YW4oLjUqWS5ERUcyUkFEKnRoaXMuZm92KTtyZXR1cm4uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS9hfSxnZXRFZmZlY3RpdmVGT1Y6ZnVuY3Rpb24oKXtyZXR1cm4gMipZLlJBRDJERUcqTWF0aC5hdGFuKE1hdGgudGFuKC41KlkuREVHMlJBRCp0aGlzLmZvdikvdGhpcy56b29tKX0sCmdldEZpbG1XaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbG1HYXVnZSpNYXRoLm1pbih0aGlzLmFzcGVjdCwxKX0sZ2V0RmlsbUhlaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX0sc2V0Vmlld09mZnNldDpmdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5hc3BlY3Q9YS9iO3RoaXMudmlldz17ZnVsbFdpZHRoOmEsZnVsbEhlaWdodDpiLG9mZnNldFg6YyxvZmZzZXRZOmQsd2lkdGg6ZSxoZWlnaHQ6Zn07dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LGNsZWFyVmlld09mZnNldDpmdW5jdGlvbigpe3RoaXMudmlldz1udWxsO3RoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSx1cGRhdGVQcm9qZWN0aW9uTWF0cml4OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5uZWFyLGI9YSpNYXRoLnRhbiguNSpZLkRFRzJSQUQqdGhpcy5mb3YpL3RoaXMuem9vbSxjPTIqYixkPXRoaXMuYXNwZWN0KmMsZT0tLjUqZCxmPQp0aGlzLnZpZXc7aWYobnVsbCE9PWYpdmFyIGc9Zi5mdWxsV2lkdGgsaD1mLmZ1bGxIZWlnaHQsZT1lK2Yub2Zmc2V0WCpkL2csYj1iLWYub2Zmc2V0WSpjL2gsZD1mLndpZHRoL2cqZCxjPWYuaGVpZ2h0L2gqYztmPXRoaXMuZmlsbU9mZnNldDswIT09ZiYmKGUrPWEqZi90aGlzLmdldEZpbG1XaWR0aCgpKTt0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKGUsZStkLGIsYi1jLGEsdGhpcy5mYXIpfSx0b0pTT046ZnVuY3Rpb24oYSl7YT1CLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGEpO2Eub2JqZWN0LmZvdj10aGlzLmZvdjthLm9iamVjdC56b29tPXRoaXMuem9vbTthLm9iamVjdC5uZWFyPXRoaXMubmVhcjthLm9iamVjdC5mYXI9dGhpcy5mYXI7YS5vYmplY3QuZm9jdXM9dGhpcy5mb2N1czthLm9iamVjdC5hc3BlY3Q9dGhpcy5hc3BlY3Q7bnVsbCE9PXRoaXMudmlldyYmKGEub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKTthLm9iamVjdC5maWxtR2F1Z2U9CnRoaXMuZmlsbUdhdWdlO2Eub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0O3JldHVybiBhfX0pO0piLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoT2EucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6SmIsaXNPcnRob2dyYXBoaWNDYW1lcmE6ITAsY29weTpmdW5jdGlvbihhKXtPYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5sZWZ0PWEubGVmdDt0aGlzLnJpZ2h0PWEucmlnaHQ7dGhpcy50b3A9YS50b3A7dGhpcy5ib3R0b209YS5ib3R0b207dGhpcy5uZWFyPWEubmVhcjt0aGlzLmZhcj1hLmZhcjt0aGlzLnpvb209YS56b29tO3RoaXMudmlldz1udWxsPT09YS52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSxhLnZpZXcpO3JldHVybiB0aGlzfSxzZXRWaWV3T2Zmc2V0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLnZpZXc9e2Z1bGxXaWR0aDphLGZ1bGxIZWlnaHQ6YixvZmZzZXRYOmMsb2Zmc2V0WTpkLHdpZHRoOmUsaGVpZ2h0OmZ9Owp0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX0sY2xlYXJWaWV3T2Zmc2V0OmZ1bmN0aW9uKCl7dGhpcy52aWV3PW51bGw7dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LHVwZGF0ZVByb2plY3Rpb25NYXRyaXg6ZnVuY3Rpb24oKXt2YXIgYT0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksYj0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksYz0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIsZD0odGhpcy50b3ArdGhpcy5ib3R0b20pLzIsZT1jLWEsYz1jK2EsYT1kK2IsYj1kLWI7aWYobnVsbCE9PXRoaXMudmlldyl2YXIgYz10aGlzLnpvb20vKHRoaXMudmlldy53aWR0aC90aGlzLnZpZXcuZnVsbFdpZHRoKSxiPXRoaXMuem9vbS8odGhpcy52aWV3LmhlaWdodC90aGlzLnZpZXcuZnVsbEhlaWdodCksZj0odGhpcy5yaWdodC10aGlzLmxlZnQpL3RoaXMudmlldy53aWR0aCxkPSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvdGhpcy52aWV3LmhlaWdodCwKZT1lK3RoaXMudmlldy5vZmZzZXRYL2MqZixjPWUrdGhpcy52aWV3LndpZHRoL2MqZixhPWEtdGhpcy52aWV3Lm9mZnNldFkvYipkLGI9YS10aGlzLnZpZXcuaGVpZ2h0L2IqZDt0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZU9ydGhvZ3JhcGhpYyhlLGMsYSxiLHRoaXMubmVhcix0aGlzLmZhcil9LHRvSlNPTjpmdW5jdGlvbihhKXthPUIucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsYSk7YS5vYmplY3Quem9vbT10aGlzLnpvb207YS5vYmplY3QubGVmdD10aGlzLmxlZnQ7YS5vYmplY3QucmlnaHQ9dGhpcy5yaWdodDthLm9iamVjdC50b3A9dGhpcy50b3A7YS5vYmplY3QuYm90dG9tPXRoaXMuYm90dG9tO2Eub2JqZWN0Lm5lYXI9dGhpcy5uZWFyO2Eub2JqZWN0LmZhcj10aGlzLmZhcjtudWxsIT09dGhpcy52aWV3JiYoYS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpO3JldHVybiBhfX0pO3ZhciBiZz0wO0tiLnByb3RvdHlwZS5pc0ZvZ0V4cDI9ITA7CktiLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgS2IodGhpcy5jb2xvci5nZXRIZXgoKSx0aGlzLmRlbnNpdHkpfTtLYi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGEpe3JldHVybnt0eXBlOiJGb2dFeHAyIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLGRlbnNpdHk6dGhpcy5kZW5zaXR5fX07TGIucHJvdG90eXBlLmlzRm9nPSEwO0xiLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgTGIodGhpcy5jb2xvci5nZXRIZXgoKSx0aGlzLm5lYXIsdGhpcy5mYXIpfTtMYi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGEpe3JldHVybnt0eXBlOiJGb2ciLGNvbG9yOnRoaXMuY29sb3IuZ2V0SGV4KCksbmVhcjp0aGlzLm5lYXIsZmFyOnRoaXMuZmFyfX07bWQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOm1kLGNvcHk6ZnVuY3Rpb24oYSxiKXtCLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcywKYSxiKTtudWxsIT09YS5iYWNrZ3JvdW5kJiYodGhpcy5iYWNrZ3JvdW5kPWEuYmFja2dyb3VuZC5jbG9uZSgpKTtudWxsIT09YS5mb2cmJih0aGlzLmZvZz1hLmZvZy5jbG9uZSgpKTtudWxsIT09YS5vdmVycmlkZU1hdGVyaWFsJiYodGhpcy5vdmVycmlkZU1hdGVyaWFsPWEub3ZlcnJpZGVNYXRlcmlhbC5jbG9uZSgpKTt0aGlzLmF1dG9VcGRhdGU9YS5hdXRvVXBkYXRlO3RoaXMubWF0cml4QXV0b1VwZGF0ZT1hLm1hdHJpeEF1dG9VcGRhdGU7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihhKXt2YXIgYj1CLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGEpO251bGwhPT10aGlzLmJhY2tncm91bmQmJihiLm9iamVjdC5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04oYSkpO251bGwhPT10aGlzLmZvZyYmKGIub2JqZWN0LmZvZz10aGlzLmZvZy50b0pTT04oKSk7cmV0dXJuIGJ9fSk7WWQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSksCntjb25zdHJ1Y3RvcjpZZCxpc0xlbnNGbGFyZTohMCxjb3B5OmZ1bmN0aW9uKGEpe0IucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMucG9zaXRpb25TY3JlZW4uY29weShhLnBvc2l0aW9uU2NyZWVuKTt0aGlzLmN1c3RvbVVwZGF0ZUNhbGxiYWNrPWEuY3VzdG9tVXBkYXRlQ2FsbGJhY2s7Zm9yKHZhciBiPTAsYz1hLmxlbnNGbGFyZXMubGVuZ3RoO2I8YztiKyspdGhpcy5sZW5zRmxhcmVzLnB1c2goYS5sZW5zRmxhcmVzW2JdKTtyZXR1cm4gdGhpc30sYWRkOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2b2lkIDA9PT1iJiYoYj0tMSk7dm9pZCAwPT09YyYmKGM9MCk7dm9pZCAwPT09ZiYmKGY9MSk7dm9pZCAwPT09ZSYmKGU9bmV3IEgoMTY3NzcyMTUpKTt2b2lkIDA9PT1kJiYoZD0xKTtjPU1hdGgubWluKGMsTWF0aC5tYXgoMCxjKSk7dGhpcy5sZW5zRmxhcmVzLnB1c2goe3RleHR1cmU6YSxzaXplOmIsZGlzdGFuY2U6Yyx4OjAseTowLHo6MCxzY2FsZToxLHJvdGF0aW9uOjAsCm9wYWNpdHk6Zixjb2xvcjplLGJsZW5kaW5nOmR9KX0sdXBkYXRlTGVuc0ZsYXJlczpmdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5sZW5zRmxhcmVzLmxlbmd0aCxjLGQ9MiotdGhpcy5wb3NpdGlvblNjcmVlbi54LGU9MiotdGhpcy5wb3NpdGlvblNjcmVlbi55O2ZvcihhPTA7YTxiO2ErKyljPXRoaXMubGVuc0ZsYXJlc1thXSxjLng9dGhpcy5wb3NpdGlvblNjcmVlbi54K2QqYy5kaXN0YW5jZSxjLnk9dGhpcy5wb3NpdGlvblNjcmVlbi55K2UqYy5kaXN0YW5jZSxjLndhbnRlZFJvdGF0aW9uPWMueCpNYXRoLlBJKi4yNSxjLnJvdGF0aW9uKz0uMjUqKGMud2FudGVkUm90YXRpb24tYy5yb3RhdGlvbil9fSk7Y2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWi5wcm90b3R5cGUpO2NiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jYjtjYi5wcm90b3R5cGUuaXNTcHJpdGVNYXRlcmlhbD0hMDtjYi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtaLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcywKYSk7dGhpcy5jb2xvci5jb3B5KGEuY29sb3IpO3RoaXMubWFwPWEubWFwO3RoaXMucm90YXRpb249YS5yb3RhdGlvbjtyZXR1cm4gdGhpc307QWMucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkFjLGlzU3ByaXRlOiEwLHJheWNhc3Q6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwLGM9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGQsZSl7Yi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7ZC5yYXkuY2xvc2VzdFBvaW50VG9Qb2ludChiLGEpO2Muc2V0RnJvbU1hdHJpeFNjYWxlKHRoaXMubWF0cml4V29ybGQpO3ZhciBmPWMueCpjLnkvNDtiLmRpc3RhbmNlVG9TcXVhcmVkKGEpPmZ8fChmPWQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGEpLGY8ZC5uZWFyfHxmPmQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOmYscG9pbnQ6YS5jbG9uZSgpLGZhY2U6bnVsbCxvYmplY3Q6dGhpc30pKX19KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5tYXRlcmlhbCkpLmNvcHkodGhpcyl9fSk7CkJjLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpCYyxjb3B5OmZ1bmN0aW9uKGEpe0IucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEsITEpO2E9YS5sZXZlbHM7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aDtiPGM7YisrKXt2YXIgZD1hW2JdO3RoaXMuYWRkTGV2ZWwoZC5vYmplY3QuY2xvbmUoKSxkLmRpc3RhbmNlKX1yZXR1cm4gdGhpc30sYWRkTGV2ZWw6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0wKTtiPU1hdGguYWJzKGIpO2Zvcih2YXIgYz10aGlzLmxldmVscyxkPTA7ZDxjLmxlbmd0aCYmIShiPGNbZF0uZGlzdGFuY2UpO2QrKyk7Yy5zcGxpY2UoZCwwLHtkaXN0YW5jZTpiLG9iamVjdDphfSk7dGhpcy5hZGQoYSl9LGdldE9iamVjdEZvckRpc3RhbmNlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLmxldmVscyxjPTEsZD1iLmxlbmd0aDtjPGQmJiEoYTxiW2NdLmRpc3RhbmNlKTtjKyspO3JldHVybiBiW2MtCjFdLm9iamVjdH0scmF5Y2FzdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiLGMpe2Euc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpO3ZhciBkPWIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGEpO3RoaXMuZ2V0T2JqZWN0Rm9yRGlzdGFuY2UoZCkucmF5Y2FzdChiLGMpfX0oKSx1cGRhdGU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwO3JldHVybiBmdW5jdGlvbihjKXt2YXIgZD10aGlzLmxldmVscztpZigxPGQubGVuZ3RoKXthLnNldEZyb21NYXRyaXhQb3NpdGlvbihjLm1hdHJpeFdvcmxkKTtiLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtjPWEuZGlzdGFuY2VUbyhiKTtkWzBdLm9iamVjdC52aXNpYmxlPSEwO2Zvcih2YXIgZT0xLGY9ZC5sZW5ndGg7ZTxmO2UrKylpZihjPj1kW2VdLmRpc3RhbmNlKWRbZS0xXS5vYmplY3QudmlzaWJsZT0hMSxkW2VdLm9iamVjdC52aXNpYmxlPSEwO2Vsc2UgYnJlYWs7CmZvcig7ZTxmO2UrKylkW2VdLm9iamVjdC52aXNpYmxlPSExfX19KCksdG9KU09OOmZ1bmN0aW9uKGEpe2E9Qi5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxhKTthLm9iamVjdC5sZXZlbHM9W107Zm9yKHZhciBiPXRoaXMubGV2ZWxzLGM9MCxkPWIubGVuZ3RoO2M8ZDtjKyspe3ZhciBlPWJbY107YS5vYmplY3QubGV2ZWxzLnB1c2goe29iamVjdDplLm9iamVjdC51dWlkLGRpc3RhbmNlOmUuZGlzdGFuY2V9KX1yZXR1cm4gYX19KTtPYmplY3QuYXNzaWduKENjLnByb3RvdHlwZSx7Y2FsY3VsYXRlSW52ZXJzZXM6ZnVuY3Rpb24oKXt0aGlzLmJvbmVJbnZlcnNlcz1bXTtmb3IodmFyIGE9MCxiPXRoaXMuYm9uZXMubGVuZ3RoO2E8YjthKyspe3ZhciBjPW5ldyBKO3RoaXMuYm9uZXNbYV0mJmMuZ2V0SW52ZXJzZSh0aGlzLmJvbmVzW2FdLm1hdHJpeFdvcmxkKTt0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKGMpfX0scG9zZTpmdW5jdGlvbigpe3ZhciBhLGIsYztiPTA7Zm9yKGM9dGhpcy5ib25lcy5sZW5ndGg7YjwKYztiKyspKGE9dGhpcy5ib25lc1tiXSkmJmEubWF0cml4V29ybGQuZ2V0SW52ZXJzZSh0aGlzLmJvbmVJbnZlcnNlc1tiXSk7Yj0wO2ZvcihjPXRoaXMuYm9uZXMubGVuZ3RoO2I8YztiKyspaWYoYT10aGlzLmJvbmVzW2JdKWEucGFyZW50JiZhLnBhcmVudC5pc0JvbmU/KGEubWF0cml4LmdldEludmVyc2UoYS5wYXJlbnQubWF0cml4V29ybGQpLGEubWF0cml4Lm11bHRpcGx5KGEubWF0cml4V29ybGQpKTphLm1hdHJpeC5jb3B5KGEubWF0cml4V29ybGQpLGEubWF0cml4LmRlY29tcG9zZShhLnBvc2l0aW9uLGEucXVhdGVybmlvbixhLnNjYWxlKX0sdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEosYj1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGM9dGhpcy5ib25lcyxkPXRoaXMuYm9uZUludmVyc2VzLGU9dGhpcy5ib25lTWF0cmljZXMsZj10aGlzLmJvbmVUZXh0dXJlLGc9MCxoPWMubGVuZ3RoO2c8aDtnKyspYS5tdWx0aXBseU1hdHJpY2VzKGNbZ10/Y1tnXS5tYXRyaXhXb3JsZDoKYixkW2ddKSxhLnRvQXJyYXkoZSwxNipnKTt2b2lkIDAhPT1mJiYoZi5uZWVkc1VwZGF0ZT0hMCl9fSgpLGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDYyh0aGlzLmJvbmVzLHRoaXMuYm9uZUludmVyc2VzKX19KTtuZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6bmQsaXNCb25lOiEwfSk7b2QucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShDYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpvZCxpc1NraW5uZWRNZXNoOiEwLGluaXRCb25lczpmdW5jdGlvbigpe3ZhciBhPVtdLGIsYyxkLGU7aWYodGhpcy5nZW9tZXRyeSYmdm9pZCAwIT09dGhpcy5nZW9tZXRyeS5ib25lcyl7ZD0wO2ZvcihlPXRoaXMuZ2VvbWV0cnkuYm9uZXMubGVuZ3RoO2Q8ZTtkKyspYz10aGlzLmdlb21ldHJ5LmJvbmVzW2RdLGI9bmV3IG5kLGEucHVzaChiKSxiLm5hbWU9Yy5uYW1lLGIucG9zaXRpb24uZnJvbUFycmF5KGMucG9zKSwKYi5xdWF0ZXJuaW9uLmZyb21BcnJheShjLnJvdHEpLHZvaWQgMCE9PWMuc2NsJiZiLnNjYWxlLmZyb21BcnJheShjLnNjbCk7ZD0wO2ZvcihlPXRoaXMuZ2VvbWV0cnkuYm9uZXMubGVuZ3RoO2Q8ZTtkKyspYz10aGlzLmdlb21ldHJ5LmJvbmVzW2RdLC0xIT09Yy5wYXJlbnQmJm51bGwhPT1jLnBhcmVudCYmdm9pZCAwIT09YVtjLnBhcmVudF0/YVtjLnBhcmVudF0uYWRkKGFbZF0pOnRoaXMuYWRkKGFbZF0pfXRoaXMudXBkYXRlTWF0cml4V29ybGQoITApO3JldHVybiBhfSxiaW5kOmZ1bmN0aW9uKGEsYil7dGhpcy5za2VsZXRvbj1hO3ZvaWQgMD09PWImJih0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKSx0aGlzLnNrZWxldG9uLmNhbGN1bGF0ZUludmVyc2VzKCksYj10aGlzLm1hdHJpeFdvcmxkKTt0aGlzLmJpbmRNYXRyaXguY29weShiKTt0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmdldEludmVyc2UoYil9LHBvc2U6ZnVuY3Rpb24oKXt0aGlzLnNrZWxldG9uLnBvc2UoKX0sbm9ybWFsaXplU2tpbldlaWdodHM6ZnVuY3Rpb24oKXt2YXIgYSwKYjtpZih0aGlzLmdlb21ldHJ5JiZ0aGlzLmdlb21ldHJ5LmlzR2VvbWV0cnkpZm9yKGI9MDtiPHRoaXMuZ2VvbWV0cnkuc2tpbldlaWdodHMubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5nZW9tZXRyeS5za2luV2VpZ2h0c1tiXTthPTEvYy5sZW5ndGhNYW5oYXR0YW4oKTtJbmZpbml0eSE9PWE/Yy5tdWx0aXBseVNjYWxhcihhKTpjLnNldCgxLDAsMCwwKX1lbHNlIGlmKHRoaXMuZ2VvbWV0cnkmJnRoaXMuZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSl7dmFyIGM9bmV3IGdhLGQ9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7Zm9yKGI9MDtiPGQuY291bnQ7YisrKWMueD1kLmdldFgoYiksYy55PWQuZ2V0WShiKSxjLno9ZC5nZXRaKGIpLGMudz1kLmdldFcoYiksYT0xL2MubGVuZ3RoTWFuaGF0dGFuKCksSW5maW5pdHkhPT1hP2MubXVsdGlwbHlTY2FsYXIoYSk6Yy5zZXQoMSwwLDAsMCksZC5zZXRYWVpXKGIsYy54LGMueSxjLnosYy53KX19LHVwZGF0ZU1hdHJpeFdvcmxkOmZ1bmN0aW9uKGEpe0NhLnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZC5jYWxsKHRoaXMsCmEpOyJhdHRhY2hlZCI9PT10aGlzLmJpbmRNb2RlP3RoaXMuYmluZE1hdHJpeEludmVyc2UuZ2V0SW52ZXJzZSh0aGlzLm1hdHJpeFdvcmxkKToiZGV0YWNoZWQiPT09dGhpcy5iaW5kTW9kZT90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmdldEludmVyc2UodGhpcy5iaW5kTWF0cml4KTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuZ2VvbWV0cnksdGhpcy5tYXRlcmlhbCkpLmNvcHkodGhpcyl9fSk7aGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWi5wcm90b3R5cGUpO2hhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1oYTtoYS5wcm90b3R5cGUuaXNMaW5lQmFzaWNNYXRlcmlhbD0hMDtoYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtaLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLmNvbG9yLmNvcHkoYS5jb2xvcik7CnRoaXMubGluZXdpZHRoPWEubGluZXdpZHRoO3RoaXMubGluZWNhcD1hLmxpbmVjYXA7dGhpcy5saW5lam9pbj1hLmxpbmVqb2luO3JldHVybiB0aGlzfTt5YS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6eWEsaXNMaW5lOiEwLHJheWNhc3Q6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSixiPW5ldyBoYixjPW5ldyBHYTtyZXR1cm4gZnVuY3Rpb24oZCxlKXt2YXIgZj1kLmxpbmVQcmVjaXNpb24sZj1mKmYsZz10aGlzLmdlb21ldHJ5LGg9dGhpcy5tYXRyaXhXb3JsZDtudWxsPT09Zy5ib3VuZGluZ1NwaGVyZSYmZy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtjLmNvcHkoZy5ib3VuZGluZ1NwaGVyZSk7Yy5hcHBseU1hdHJpeDQoaCk7aWYoITEhPT1kLnJheS5pbnRlcnNlY3RzU3BoZXJlKGMpKXthLmdldEludmVyc2UoaCk7Yi5jb3B5KGQucmF5KS5hcHBseU1hdHJpeDQoYSk7dmFyIGs9bmV3IHAsbT1uZXcgcCxoPW5ldyBwLApsPW5ldyBwLHE9dGhpcyYmdGhpcy5pc0xpbmVTZWdtZW50cz8yOjE7aWYoZy5pc0J1ZmZlckdlb21ldHJ5KXt2YXIgbj1nLmluZGV4LHI9Zy5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O2lmKG51bGwhPT1uKWZvcih2YXIgbj1uLmFycmF5LGc9MCx6PW4ubGVuZ3RoLTE7Zzx6O2crPXEpe3ZhciB0PW5bZysxXTtrLmZyb21BcnJheShyLDMqbltnXSk7bS5mcm9tQXJyYXkociwzKnQpO3Q9Yi5kaXN0YW5jZVNxVG9TZWdtZW50KGssbSxsLGgpO3Q+Znx8KGwuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLHQ9ZC5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCksdDxkLm5lYXJ8fHQ+ZC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6dCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OmcsZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSkpfWVsc2UgZm9yKGc9MCx6PXIubGVuZ3RoLzMtMTtnPHo7Zys9cSlrLmZyb21BcnJheShyLAozKmcpLG0uZnJvbUFycmF5KHIsMypnKzMpLHQ9Yi5kaXN0YW5jZVNxVG9TZWdtZW50KGssbSxsLGgpLHQ+Znx8KGwuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLHQ9ZC5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCksdDxkLm5lYXJ8fHQ+ZC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6dCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OmcsZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSkpfWVsc2UgaWYoZy5pc0dlb21ldHJ5KWZvcihrPWcudmVydGljZXMsbT1rLmxlbmd0aCxnPTA7ZzxtLTE7Zys9cSl0PWIuZGlzdGFuY2VTcVRvU2VnbWVudChrW2ddLGtbZysxXSxsLGgpLHQ+Znx8KGwuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLHQ9ZC5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCksdDxkLm5lYXJ8fHQ+ZC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6dCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLAppbmRleDpnLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pKX19fSgpLGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuZ2VvbWV0cnksdGhpcy5tYXRlcmlhbCkpLmNvcHkodGhpcyl9fSk7ZGEucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZSh5YS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpkYSxpc0xpbmVTZWdtZW50czohMH0pO3BkLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoeWEucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6cGQsaXNMaW5lTG9vcDohMH0pO0xhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTtMYS5wcm90b3R5cGUuY29uc3RydWN0b3I9TGE7TGEucHJvdG90eXBlLmlzUG9pbnRzTWF0ZXJpYWw9ITA7TGEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5jb2xvci5jb3B5KGEuY29sb3IpOwp0aGlzLm1hcD1hLm1hcDt0aGlzLnNpemU9YS5zaXplO3RoaXMuc2l6ZUF0dGVudWF0aW9uPWEuc2l6ZUF0dGVudWF0aW9uO3JldHVybiB0aGlzfTtNYi5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6TWIsaXNQb2ludHM6ITAscmF5Y2FzdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBKLGI9bmV3IGhiLGM9bmV3IEdhO3JldHVybiBmdW5jdGlvbihkLGUpe2Z1bmN0aW9uIGYoYSxjKXt2YXIgZj1iLmRpc3RhbmNlU3FUb1BvaW50KGEpO2lmKGY8bCl7dmFyIGg9Yi5jbG9zZXN0UG9pbnRUb1BvaW50KGEpO2guYXBwbHlNYXRyaXg0KGspO3ZhciBtPWQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGgpO208ZC5uZWFyfHxtPmQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOm0sZGlzdGFuY2VUb1JheTpNYXRoLnNxcnQoZikscG9pbnQ6aC5jbG9uZSgpLGluZGV4OmMsZmFjZTpudWxsLG9iamVjdDpnfSl9fXZhciBnPXRoaXMsaD10aGlzLmdlb21ldHJ5LAprPXRoaXMubWF0cml4V29ybGQsbT1kLnBhcmFtcy5Qb2ludHMudGhyZXNob2xkO251bGw9PT1oLmJvdW5kaW5nU3BoZXJlJiZoLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO2MuY29weShoLmJvdW5kaW5nU3BoZXJlKTtjLmFwcGx5TWF0cml4NChrKTtjLnJhZGl1cys9bTtpZighMSE9PWQucmF5LmludGVyc2VjdHNTcGhlcmUoYykpe2EuZ2V0SW52ZXJzZShrKTtiLmNvcHkoZC5yYXkpLmFwcGx5TWF0cml4NChhKTt2YXIgbT1tLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLGw9bSptLG09bmV3IHA7aWYoaC5pc0J1ZmZlckdlb21ldHJ5KXt2YXIgcT1oLmluZGV4LGg9aC5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O2lmKG51bGwhPT1xKWZvcih2YXIgbj1xLmFycmF5LHE9MCxyPW4ubGVuZ3RoO3E8cjtxKyspe3ZhciB6PW5bcV07bS5mcm9tQXJyYXkoaCwzKnopO2YobSx6KX1lbHNlIGZvcihxPTAsbj1oLmxlbmd0aC8zO3E8bjtxKyspbS5mcm9tQXJyYXkoaCwKMypxKSxmKG0scSl9ZWxzZSBmb3IobT1oLnZlcnRpY2VzLHE9MCxuPW0ubGVuZ3RoO3E8bjtxKyspZihtW3FdLHEpfX19KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5nZW9tZXRyeSx0aGlzLm1hdGVyaWFsKSkuY29weSh0aGlzKX19KTtEYy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6RGN9KTtxZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShYLnByb3RvdHlwZSk7cWQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXFkO05iLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFgucHJvdG90eXBlKTtOYi5wcm90b3R5cGUuY29uc3RydWN0b3I9TmI7TmIucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITA7cmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWC5wcm90b3R5cGUpO3JkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yZDtFYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShYLnByb3RvdHlwZSk7CkVjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FYztFYy5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7T2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO09iLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1PYjtGYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7RmMucHJvdG90eXBlLmNvbnN0cnVjdG9yPUZjO1BiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlKTtQYi5wcm90b3R5cGUuY29uc3RydWN0b3I9UGI7R2MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO0djLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1HYztpYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7aWEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWlhO0hjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtIYy5wcm90b3R5cGUuY29uc3RydWN0b3I9SGM7UWIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaWEucHJvdG90eXBlKTsKUWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVFiO0ljLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtJYy5wcm90b3R5cGUuY29uc3RydWN0b3I9SWM7bWIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaWEucHJvdG90eXBlKTttYi5wcm90b3R5cGUuY29uc3RydWN0b3I9bWI7SmMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO0pjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1KYztSYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpYS5wcm90b3R5cGUpO1JiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1SYjtLYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7S2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPUtjO1NiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGlhLnByb3RvdHlwZSk7U2IucHJvdG90eXBlLmNvbnN0cnVjdG9yPVNiO0xjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtMYy5wcm90b3R5cGUuY29uc3RydWN0b3I9CkxjO1RiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlKTtUYi5wcm90b3R5cGUuY29uc3RydWN0b3I9VGI7TWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO01jLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1NYztVYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7VWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVViO05jLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtOYy5wcm90b3R5cGUuY29uc3RydWN0b3I9TmM7VmIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO1ZiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WYjt2YXIgemE9e2FyZWE6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEubGVuZ3RoLGM9MCxkPWItMSxlPTA7ZTxiO2Q9ZSsrKWMrPWFbZF0ueCphW2VdLnktYVtlXS54KmFbZF0ueTtyZXR1cm4uNSpjfSx0cmlhbmd1bGF0ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihhLGIpe3ZhciBjPQphLmxlbmd0aDtpZigzPmMpcmV0dXJuIG51bGw7dmFyIGQ9W10sZT1bXSxmPVtdLGcsaCxrO2lmKDA8emEuYXJlYShhKSlmb3IoaD0wO2g8YztoKyspZVtoXT1oO2Vsc2UgZm9yKGg9MDtoPGM7aCsrKWVbaF09Yy0xLWg7dmFyIG09MipjO2ZvcihoPWMtMTsyPGM7KXtpZigwPj1tLS0pe2NvbnNvbGUud2FybigiVEhSRUUuU2hhcGVVdGlsczogVW5hYmxlIHRvIHRyaWFuZ3VsYXRlIHBvbHlnb24hIGluIHRyaWFuZ3VsYXRlKCkiKTticmVha31nPWg7Yzw9ZyYmKGc9MCk7aD1nKzE7Yzw9aCYmKGg9MCk7az1oKzE7Yzw9ayYmKGs9MCk7dmFyIGw7YTp7dmFyIHEsbixyLHAsdCx5LHgsdjtxPWFbZVtnXV0ueDtuPWFbZVtnXV0ueTtyPWFbZVtoXV0ueDtwPWFbZVtoXV0ueTt0PWFbZVtrXV0ueDt5PWFbZVtrXV0ueTtpZigwPj0oci1xKSooeS1uKS0ocC1uKSoodC1xKSlsPSExO2Vsc2V7dmFyIEcsdyxPLEMsRSxGLEQsQixJLEg7Rz10LXI7dz15LXA7Tz1xLXQ7Qz1uLXk7RT1yLXE7Rj1wLW47CmZvcihsPTA7bDxjO2wrKylpZih4PWFbZVtsXV0ueCx2PWFbZVtsXV0ueSwhKHg9PT1xJiZ2PT09bnx8eD09PXImJnY9PT1wfHx4PT09dCYmdj09PXkpJiYoRD14LXEsQj12LW4sST14LXIsSD12LXAseC09dCx2LT15LEk9RypILXcqSSxEPUUqQi1GKkQsQj1PKnYtQyp4LEk+PS1OdW1iZXIuRVBTSUxPTiYmQj49LU51bWJlci5FUFNJTE9OJiZEPj0tTnVtYmVyLkVQU0lMT04pKXtsPSExO2JyZWFrIGF9bD0hMH19aWYobCl7ZC5wdXNoKFthW2VbZ11dLGFbZVtoXV0sYVtlW2tdXV0pO2YucHVzaChbZVtnXSxlW2hdLGVba11dKTtnPWg7Zm9yKGs9aCsxO2s8YztnKyssaysrKWVbZ109ZVtrXTtjLS07bT0yKmN9fXJldHVybiBiP2Y6ZH19KCksdHJpYW5ndWxhdGVTaGFwZTpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7dmFyIGI9YS5sZW5ndGg7MjxiJiZhW2ItMV0uZXF1YWxzKGFbMF0pJiZhLnBvcCgpfWZ1bmN0aW9uIGQoYSxiLGMpe3JldHVybiBhLnghPT1iLng/YS54PGIueD9hLng8PQpjLngmJmMueDw9Yi54OmIueDw9Yy54JiZjLng8PWEueDphLnk8Yi55P2EueTw9Yy55JiZjLnk8PWIueTpiLnk8PWMueSYmYy55PD1hLnl9ZnVuY3Rpb24gZShhLGIsYyxlLGYpe3ZhciBnPWIueC1hLngsaD1iLnktYS55LGs9ZS54LWMueCxtPWUueS1jLnksbD1hLngtYy54LG49YS55LWMueSxxPWgqay1nKm0sdT1oKmwtZypuO2lmKE1hdGguYWJzKHEpPk51bWJlci5FUFNJTE9OKXtpZigwPHEpe2lmKDA+dXx8dT5xKXJldHVybltdO2s9bSpsLWsqbjtpZigwPmt8fGs+cSlyZXR1cm5bXX1lbHNle2lmKDA8dXx8dTxxKXJldHVybltdO2s9bSpsLWsqbjtpZigwPGt8fGs8cSlyZXR1cm5bXX1pZigwPT09aylyZXR1cm4hZnx8MCE9PXUmJnUhPT1xP1thXTpbXTtpZihrPT09cSlyZXR1cm4hZnx8MCE9PXUmJnUhPT1xP1tiXTpbXTtpZigwPT09dSlyZXR1cm5bY107aWYodT09PXEpcmV0dXJuW2VdO2Y9ay9xO3JldHVyblt7eDphLngrZipnLHk6YS55K2YqaH1dfWlmKDAhPT11fHxtKmwhPT0KaypuKXJldHVybltdO2g9MD09PWcmJjA9PT1oO2s9MD09PWsmJjA9PT1tO2lmKGgmJmspcmV0dXJuIGEueCE9PWMueHx8YS55IT09Yy55P1tdOlthXTtpZihoKXJldHVybiBkKGMsZSxhKT9bYV06W107aWYoaylyZXR1cm4gZChhLGIsYyk/W2NdOltdOzAhPT1nPyhhLng8Yi54PyhnPWEsaz1hLngsaD1iLGE9Yi54KTooZz1iLGs9Yi54LGg9YSxhPWEueCksYy54PGUueD8oYj1jLHE9Yy54LG09ZSxjPWUueCk6KGI9ZSxxPWUueCxtPWMsYz1jLngpKTooYS55PGIueT8oZz1hLGs9YS55LGg9YixhPWIueSk6KGc9YixrPWIueSxoPWEsYT1hLnkpLGMueTxlLnk/KGI9YyxxPWMueSxtPWUsYz1lLnkpOihiPWUscT1lLnksbT1jLGM9Yy55KSk7cmV0dXJuIGs8PXE/YTxxP1tdOmE9PT1xP2Y/W106W2JdOmE8PWM/W2IsaF06W2IsbV06az5jP1tdOms9PT1jP2Y/W106W2ddOmE8PWM/W2csaF06W2csbV19ZnVuY3Rpb24gZihhLGIsYyxkKXt2YXIgZT1iLngtYS54LGY9Yi55LWEueTtiPWMueC1hLng7CmM9Yy55LWEueTt2YXIgZz1kLngtYS54O2Q9ZC55LWEueTthPWUqYy1mKmI7ZT1lKmQtZipnO3JldHVybiBNYXRoLmFicyhhKT5OdW1iZXIuRVBTSUxPTj8oYj1nKmMtZCpiLDA8YT8wPD1lJiYwPD1iOjA8PWV8fDA8PWIpOjA8ZX1jKGEpO2IuZm9yRWFjaChjKTt2YXIgZyxoLGssbSxsLHE9e307az1hLmNvbmNhdCgpO2c9MDtmb3IoaD1iLmxlbmd0aDtnPGg7ZysrKUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGssYltnXSk7Zz0wO2ZvcihoPWsubGVuZ3RoO2c8aDtnKyspbD1rW2ddLngrIjoiK2tbZ10ueSx2b2lkIDAhPT1xW2xdJiZjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlVXRpbHM6IER1cGxpY2F0ZSBwb2ludCIsbCxnKSxxW2xdPWc7Zz1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXt2YXIgZD1oLmxlbmd0aC0xLGU9YS0xOzA+ZSYmKGU9ZCk7dmFyIGc9YSsxO2c+ZCYmKGc9MCk7ZD1mKGhbYV0saFtlXSxoW2ddLGtbYl0pO2lmKCFkKXJldHVybiExO2Q9ay5sZW5ndGgtCjE7ZT1iLTE7MD5lJiYoZT1kKTtnPWIrMTtnPmQmJihnPTApO3JldHVybihkPWYoa1tiXSxrW2VdLGtbZ10saFthXSkpPyEwOiExfWZ1bmN0aW9uIGQoYSxiKXt2YXIgYyxmO2ZvcihjPTA7YzxoLmxlbmd0aDtjKyspaWYoZj1jKzEsZiU9aC5sZW5ndGgsZj1lKGEsYixoW2NdLGhbZl0sITApLDA8Zi5sZW5ndGgpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZyhhLGMpe3ZhciBkLGYsaCxrO2ZvcihkPTA7ZDxtLmxlbmd0aDtkKyspZm9yKGY9YlttW2RdXSxoPTA7aDxmLmxlbmd0aDtoKyspaWYoaz1oKzEsayU9Zi5sZW5ndGgsaz1lKGEsYyxmW2hdLGZba10sITApLDA8ay5sZW5ndGgpcmV0dXJuITA7cmV0dXJuITF9dmFyIGg9YS5jb25jYXQoKSxrLG09W10sbCxuLHEsdSxwLEM9W10sRCxCLEksSD0wO2ZvcihsPWIubGVuZ3RoO0g8bDtIKyspbS5wdXNoKEgpO0Q9MDtmb3IodmFyIEo9MiptLmxlbmd0aDswPG0ubGVuZ3RoOyl7Si0tO2lmKDA+Sil7Y29uc29sZS5sb2coIkluZmluaXRlIExvb3AhIEhvbGVzIGxlZnQ6IisKbS5sZW5ndGgrIiwgUHJvYmFibHkgSG9sZSBvdXRzaWRlIFNoYXBlISIpO2JyZWFrfWZvcihuPUQ7bjxoLmxlbmd0aDtuKyspe3E9aFtuXTtsPS0xO2ZvcihIPTA7SDxtLmxlbmd0aDtIKyspaWYodT1tW0hdLHA9cS54KyI6IitxLnkrIjoiK3Usdm9pZCAwPT09Q1twXSl7az1iW3VdO2ZvcihCPTA7QjxrLmxlbmd0aDtCKyspaWYodT1rW0JdLGMobixCKSYmIWQocSx1KSYmIWcocSx1KSl7bD1CO20uc3BsaWNlKEgsMSk7RD1oLnNsaWNlKDAsbisxKTt1PWguc2xpY2Uobik7Qj1rLnNsaWNlKGwpO0k9ay5zbGljZSgwLGwrMSk7aD1ELmNvbmNhdChCKS5jb25jYXQoSSkuY29uY2F0KHUpO0Q9bjticmVha31pZigwPD1sKWJyZWFrO0NbcF09ITB9aWYoMDw9bClicmVha319cmV0dXJuIGh9KGEsYik7dmFyIG49emEudHJpYW5ndWxhdGUoZywhMSk7Zz0wO2ZvcihoPW4ubGVuZ3RoO2c8aDtnKyspZm9yKG09bltnXSxrPTA7Mz5rO2srKylsPW1ba10ueCsiOiIrbVtrXS55LGw9cVtsXSx2b2lkIDAhPT0KbCYmKG1ba109bCk7cmV0dXJuIG4uY29uY2F0KCl9LGlzQ2xvY2tXaXNlOmZ1bmN0aW9uKGEpe3JldHVybiAwPnphLmFyZWEoYSl9fTtkYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7ZGIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWRiO0ZhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlKTtGYS5wcm90b3R5cGUuY29uc3RydWN0b3I9RmE7RmEucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLGE9YT9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhLmFycmF5KTpbXSxiPXRoaXMuZ2V0QXR0cmlidXRlKCJ1diIpLGI9Yj9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChiLmFycmF5KTpbXSxjPXRoaXMuaW5kZXgsYz1jP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGMuYXJyYXkpOltdO3JldHVybntwb3NpdGlvbjphLHV2OmIsaW5kZXg6Y319O0ZhLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9CmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5sZW5ndGg7Yi5hcnJheXM9dGhpcy5nZXRBcnJheXMoKTtmb3IodmFyIGQ9MDtkPGM7ZCsrKXRoaXMuYWRkU2hhcGUoYVtkXSxiKTt0aGlzLnNldEluZGV4KGIuYXJyYXlzLmluZGV4KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGIuYXJyYXlzLnBvc2l0aW9uLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKGIuYXJyYXlzLnV2LDIpKX07RmEucHJvdG90eXBlLmFkZFNoYXBlPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIsYyl7Ynx8Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QiKTtyZXR1cm4gYi5jbG9uZSgpLm11bHRpcGx5U2NhbGFyKGMpLmFkZChhKX1mdW5jdGlvbiBkKGEsYixjKXt2YXIgZCxlLGY7ZT1hLngtYi54O2Y9YS55LWIueTtkPWMueC1hLng7dmFyIGc9Yy55LWEueSxoPWUqZStmKmY7aWYoTWF0aC5hYnMoZSpnLWYqZCk+TnVtYmVyLkVQU0lMT04pe3ZhciBrPQpNYXRoLnNxcnQoaCksbT1NYXRoLnNxcnQoZCpkK2cqZyksaD1iLngtZi9rO2I9Yi55K2UvaztnPSgoYy54LWcvbS1oKSpnLShjLnkrZC9tLWIpKmQpLyhlKmctZipkKTtkPWgrZSpnLWEueDtlPWIrZipnLWEueTtmPWQqZCtlKmU7aWYoMj49ZilyZXR1cm4gbmV3IEQoZCxlKTtmPU1hdGguc3FydChmLzIpfWVsc2UgYT0hMSxlPk51bWJlci5FUFNJTE9OP2Q+TnVtYmVyLkVQU0lMT04mJihhPSEwKTplPC1OdW1iZXIuRVBTSUxPTj9kPC1OdW1iZXIuRVBTSUxPTiYmKGE9ITApOk1hdGguc2lnbihmKT09PU1hdGguc2lnbihnKSYmKGE9ITApLGE/KGQ9LWYsZj1NYXRoLnNxcnQoaCkpOihkPWUsZT1mLGY9TWF0aC5zcXJ0KGgvMikpO3JldHVybiBuZXcgRChkL2YsZS9mKX1mdW5jdGlvbiBlKGEsYil7dmFyIGMsZDtmb3IoTj1hLmxlbmd0aDswPD0tLU47KXtjPU47ZD1OLTE7MD5kJiYoZD1hLmxlbmd0aC0xKTt2YXIgZSxmPUcrMip5O2ZvcihlPTA7ZTxmO2UrKyl7dmFyIGc9ZGEqZSxtPWRhKgooZSsxKSxuPWIrZCtnLHE9YitkK20sbT1iK2MrbTtoKGIrYytnKTtoKG4pO2gobSk7aChuKTtoKHEpO2gobSk7Zz1sLmxlbmd0aC8zO2c9RS5nZW5lcmF0ZVNpZGVXYWxsVVYoWixsLGctNixnLTMsZy0yLGctMSk7ayhnWzBdKTtrKGdbMV0pO2soZ1szXSk7ayhnWzFdKTtrKGdbMl0pO2soZ1szXSl9fX1mdW5jdGlvbiBmKGEsYixjKXtyLnB1c2goYSk7ci5wdXNoKGIpO3IucHVzaChjKX1mdW5jdGlvbiBnKGEsYixjKXtoKGEpO2goYik7aChjKTthPWwubGVuZ3RoLzM7YT1FLmdlbmVyYXRlVG9wVVYoWixsLGEtMyxhLTIsYS0xKTtrKGFbMF0pO2soYVsxXSk7ayhhWzJdKX1mdW5jdGlvbiBoKGEpe3EucHVzaChsLmxlbmd0aC8zKTtsLnB1c2goclszKmErMF0pO2wucHVzaChyWzMqYSsxXSk7bC5wdXNoKHJbMyphKzJdKX1mdW5jdGlvbiBrKGEpe24ucHVzaChhLngpO24ucHVzaChhLnkpfXZhciBtPWIuYXJyYXlzP2IuYXJyYXlzOnRoaXMuZ2V0QXJyYXlzKCksbD1tLnBvc2l0aW9uLHE9Cm0uaW5kZXgsbj1tLnV2LHI9W10sbT12b2lkIDAhPT1iLmFtb3VudD9iLmFtb3VudDoxMDAsej12b2lkIDAhPT1iLmJldmVsVGhpY2tuZXNzP2IuYmV2ZWxUaGlja25lc3M6Nix0PXZvaWQgMCE9PWIuYmV2ZWxTaXplP2IuYmV2ZWxTaXplOnotMix5PXZvaWQgMCE9PWIuYmV2ZWxTZWdtZW50cz9iLmJldmVsU2VnbWVudHM6Myx4PXZvaWQgMCE9PWIuYmV2ZWxFbmFibGVkP2IuYmV2ZWxFbmFibGVkOiEwLHY9dm9pZCAwIT09Yi5jdXJ2ZVNlZ21lbnRzP2IuY3VydmVTZWdtZW50czoxMixHPXZvaWQgMCE9PWIuc3RlcHM/Yi5zdGVwczoxLHc9Yi5leHRydWRlUGF0aCxCLEk9ITEsRT12b2lkIDAhPT1iLlVWR2VuZXJhdG9yP2IuVVZHZW5lcmF0b3I6ZGIuV29ybGRVVkdlbmVyYXRvcixGLEgsUixKO3cmJihCPXcuZ2V0U3BhY2VkUG9pbnRzKEcpLEk9ITAseD0hMSxGPXZvaWQgMCE9PWIuZnJhbWVzP2IuZnJhbWVzOncuY29tcHV0ZUZyZW5ldEZyYW1lcyhHLCExKSxIPW5ldyBwLFI9bmV3IHAsCko9bmV3IHApO3h8fCh0PXo9eT0wKTt2YXIgTSxMLFYsWj10aGlzLHc9YS5leHRyYWN0UG9pbnRzKHYpLHY9dy5zaGFwZSxQPXcuaG9sZXM7aWYodz0hemEuaXNDbG9ja1dpc2Uodikpe3Y9di5yZXZlcnNlKCk7TD0wO2ZvcihWPVAubGVuZ3RoO0w8VjtMKyspTT1QW0xdLHphLmlzQ2xvY2tXaXNlKE0pJiYoUFtMXT1NLnJldmVyc2UoKSk7dz0hMX12YXIgSz16YS50cmlhbmd1bGF0ZVNoYXBlKHYsUCksVz12O0w9MDtmb3IoVj1QLmxlbmd0aDtMPFY7TCsrKU09UFtMXSx2PXYuY29uY2F0KE0pO3ZhciBiYSxULFEsWSxVLGRhPXYubGVuZ3RoLFgsZ2E9Sy5sZW5ndGgsdz1bXSxOPTA7UT1XLmxlbmd0aDtiYT1RLTE7Zm9yKFQ9TisxO048UTtOKyssYmErKyxUKyspYmE9PT1RJiYoYmE9MCksVD09PVEmJihUPTApLHdbTl09ZChXW05dLFdbYmFdLFdbVF0pO3ZhciBpYT1bXSxrYSxoYT13LmNvbmNhdCgpO0w9MDtmb3IoVj1QLmxlbmd0aDtMPFY7TCsrKXtNPVBbTF07a2E9W107Tj0wO1E9TS5sZW5ndGg7CmJhPVEtMTtmb3IoVD1OKzE7TjxRO04rKyxiYSsrLFQrKyliYT09PVEmJihiYT0wKSxUPT09USYmKFQ9MCksa2FbTl09ZChNW05dLE1bYmFdLE1bVF0pO2lhLnB1c2goa2EpO2hhPWhhLmNvbmNhdChrYSl9Zm9yKGJhPTA7YmE8eTtiYSsrKXtRPWJhL3k7WT16Kk1hdGguY29zKFEqTWF0aC5QSS8yKTtUPXQqTWF0aC5zaW4oUSpNYXRoLlBJLzIpO049MDtmb3IoUT1XLmxlbmd0aDtOPFE7TisrKVU9YyhXW05dLHdbTl0sVCksZihVLngsVS55LC1ZKTtMPTA7Zm9yKFY9UC5sZW5ndGg7TDxWO0wrKylmb3IoTT1QW0xdLGthPWlhW0xdLE49MCxRPU0ubGVuZ3RoO048UTtOKyspVT1jKE1bTl0sa2FbTl0sVCksZihVLngsVS55LC1ZKX1UPXQ7Zm9yKE49MDtOPGRhO04rKylVPXg/Yyh2W05dLGhhW05dLFQpOnZbTl0sST8oUi5jb3B5KEYubm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIoVS54KSxILmNvcHkoRi5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKFUueSksSi5jb3B5KEJbMF0pLmFkZChSKS5hZGQoSCksCmYoSi54LEoueSxKLnopKTpmKFUueCxVLnksMCk7Zm9yKFE9MTtRPD1HO1ErKylmb3IoTj0wO048ZGE7TisrKVU9eD9jKHZbTl0saGFbTl0sVCk6dltOXSxJPyhSLmNvcHkoRi5ub3JtYWxzW1FdKS5tdWx0aXBseVNjYWxhcihVLngpLEguY29weShGLmJpbm9ybWFsc1tRXSkubXVsdGlwbHlTY2FsYXIoVS55KSxKLmNvcHkoQltRXSkuYWRkKFIpLmFkZChIKSxmKEoueCxKLnksSi56KSk6ZihVLngsVS55LG0vRypRKTtmb3IoYmE9eS0xOzA8PWJhO2JhLS0pe1E9YmEveTtZPXoqTWF0aC5jb3MoUSpNYXRoLlBJLzIpO1Q9dCpNYXRoLnNpbihRKk1hdGguUEkvMik7Tj0wO2ZvcihRPVcubGVuZ3RoO048UTtOKyspVT1jKFdbTl0sd1tOXSxUKSxmKFUueCxVLnksbStZKTtMPTA7Zm9yKFY9UC5sZW5ndGg7TDxWO0wrKylmb3IoTT1QW0xdLGthPWlhW0xdLE49MCxRPU0ubGVuZ3RoO048UTtOKyspVT1jKE1bTl0sa2FbTl0sVCksST9mKFUueCxVLnkrQltHLTFdLnksQltHLTFdLngrWSk6ZihVLngsClUueSxtK1kpfShmdW5jdGlvbigpe3ZhciBhPWwubGVuZ3RoLzM7aWYoeCl7dmFyIGM9MCpkYTtmb3IoTj0wO048Z2E7TisrKVg9S1tOXSxnKFhbMl0rYyxYWzFdK2MsWFswXStjKTtjPWRhKihHKzIqeSk7Zm9yKE49MDtOPGdhO04rKylYPUtbTl0sZyhYWzBdK2MsWFsxXStjLFhbMl0rYyl9ZWxzZXtmb3IoTj0wO048Z2E7TisrKVg9S1tOXSxnKFhbMl0sWFsxXSxYWzBdKTtmb3IoTj0wO048Z2E7TisrKVg9S1tOXSxnKFhbMF0rZGEqRyxYWzFdK2RhKkcsWFsyXStkYSpHKX1aLmFkZEdyb3VwKGEsbC5sZW5ndGgvMy1hLHZvaWQgMCE9PWIubWF0ZXJpYWw/Yi5tYXRlcmlhbDowKX0pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9bC5sZW5ndGgvMyxjPTA7ZShXLGMpO2MrPVcubGVuZ3RoO0w9MDtmb3IoVj1QLmxlbmd0aDtMPFY7TCsrKU09UFtMXSxlKE0sYyksYys9TS5sZW5ndGg7Wi5hZGRHcm91cChhLGwubGVuZ3RoLzMtYSx2b2lkIDAhPT1iLmV4dHJ1ZGVNYXRlcmlhbD9iLmV4dHJ1ZGVNYXRlcmlhbDoKMSl9KSgpO2IuYXJyYXlzfHwodGhpcy5zZXRJbmRleChxKSx0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGwsMykpLHRoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IEMoYi5hcnJheXMudXYsMikpKX07ZGIuV29ybGRVVkdlbmVyYXRvcj17Z2VuZXJhdGVUb3BVVjpmdW5jdGlvbihhLGIsYyxkLGUpe2E9YlszKmRdO2Q9YlszKmQrMV07dmFyIGY9YlszKmVdO2U9YlszKmUrMV07cmV0dXJuW25ldyBEKGJbMypjXSxiWzMqYysxXSksbmV3IEQoYSxkKSxuZXcgRChmLGUpXX0sZ2VuZXJhdGVTaWRlV2FsbFVWOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXthPWJbMypjXTt2YXIgZz1iWzMqYysxXTtjPWJbMypjKzJdO3ZhciBoPWJbMypkXSxrPWJbMypkKzFdO2Q9YlszKmQrMl07dmFyIG09YlszKmVdLGw9YlszKmUrMV07ZT1iWzMqZSsyXTt2YXIgcT1iWzMqZl0sbj1iWzMqZisxXTtiPWJbMypmKzJdO3JldHVybi4wMT5NYXRoLmFicyhnLWspP1tuZXcgRChhLDEtYyksbmV3IEQoaCwKMS1kKSxuZXcgRChtLDEtZSksbmV3IEQocSwxLWIpXTpbbmV3IEQoZywxLWMpLG5ldyBEKGssMS1kKSxuZXcgRChsLDEtZSksbmV3IEQobiwxLWIpXX19O09jLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtPYy5wcm90b3R5cGUuY29uc3RydWN0b3I9T2M7V2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRmEucHJvdG90eXBlKTtXYi5wcm90b3R5cGUuY29uc3RydWN0b3I9V2I7UGMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO1BjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1QYztuYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7bmIucHJvdG90eXBlLmNvbnN0cnVjdG9yPW5iO1FjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtRYy5wcm90b3R5cGUuY29uc3RydWN0b3I9UWM7WGIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO1hiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1YYjtSYy5wcm90b3R5cGU9Ck9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO1JjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1SYztZYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7WWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVliO1piLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtaYi5wcm90b3R5cGUuY29uc3RydWN0b3I9WmI7JGIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpOyRiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0kYjthYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7YWMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWFjO29iLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtvYi5wcm90b3R5cGUuY29uc3RydWN0b3I9b2I7V2EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO1dhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1XYTtTYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShvYi5wcm90b3R5cGUpOwpTYy5wcm90b3R5cGUuY29uc3RydWN0b3I9U2M7VGMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoV2EucHJvdG90eXBlKTtUYy5wcm90b3R5cGUuY29uc3RydWN0b3I9VGM7VWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO1VjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1VYztiYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7YmMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWJjO3ZhciBNYT1PYmplY3QuZnJlZXplKHtXaXJlZnJhbWVHZW9tZXRyeTpPYixQYXJhbWV0cmljR2VvbWV0cnk6RmMsUGFyYW1ldHJpY0J1ZmZlckdlb21ldHJ5OlBiLFRldHJhaGVkcm9uR2VvbWV0cnk6SGMsVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeTpRYixPY3RhaGVkcm9uR2VvbWV0cnk6SWMsT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5Om1iLEljb3NhaGVkcm9uR2VvbWV0cnk6SmMsSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeTpSYixEb2RlY2FoZWRyb25HZW9tZXRyeTpLYywKRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnk6U2IsUG9seWhlZHJvbkdlb21ldHJ5OkdjLFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeTppYSxUdWJlR2VvbWV0cnk6TGMsVHViZUJ1ZmZlckdlb21ldHJ5OlRiLFRvcnVzS25vdEdlb21ldHJ5Ok1jLFRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5OlViLFRvcnVzR2VvbWV0cnk6TmMsVG9ydXNCdWZmZXJHZW9tZXRyeTpWYixUZXh0R2VvbWV0cnk6T2MsVGV4dEJ1ZmZlckdlb21ldHJ5OldiLFNwaGVyZUdlb21ldHJ5OlBjLFNwaGVyZUJ1ZmZlckdlb21ldHJ5Om5iLFJpbmdHZW9tZXRyeTpRYyxSaW5nQnVmZmVyR2VvbWV0cnk6WGIsUGxhbmVHZW9tZXRyeTp4YyxQbGFuZUJ1ZmZlckdlb21ldHJ5OmxiLExhdGhlR2VvbWV0cnk6UmMsTGF0aGVCdWZmZXJHZW9tZXRyeTpZYixTaGFwZUdlb21ldHJ5OlpiLFNoYXBlQnVmZmVyR2VvbWV0cnk6JGIsRXh0cnVkZUdlb21ldHJ5OmRiLEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTpGYSxFZGdlc0dlb21ldHJ5OmFjLApDb25lR2VvbWV0cnk6U2MsQ29uZUJ1ZmZlckdlb21ldHJ5OlRjLEN5bGluZGVyR2VvbWV0cnk6b2IsQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeTpXYSxDaXJjbGVHZW9tZXRyeTpVYyxDaXJjbGVCdWZmZXJHZW9tZXRyeTpiYyxCb3hHZW9tZXRyeTpJYixCb3hCdWZmZXJHZW9tZXRyeTprYn0pO2NjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVhLnByb3RvdHlwZSk7Y2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPWNjO2NjLnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO2RjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVhLnByb3RvdHlwZSk7ZGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWRjO2RjLnByb3RvdHlwZS5pc1Jhd1NoYWRlck1hdGVyaWFsPSEwO1JhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTtSYS5wcm90b3R5cGUuY29uc3RydWN0b3I9UmE7UmEucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw9ITA7UmEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsCmEpO3RoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9O3RoaXMuY29sb3IuY29weShhLmNvbG9yKTt0aGlzLnJvdWdobmVzcz1hLnJvdWdobmVzczt0aGlzLm1ldGFsbmVzcz1hLm1ldGFsbmVzczt0aGlzLm1hcD1hLm1hcDt0aGlzLmxpZ2h0TWFwPWEubGlnaHRNYXA7dGhpcy5saWdodE1hcEludGVuc2l0eT1hLmxpZ2h0TWFwSW50ZW5zaXR5O3RoaXMuYW9NYXA9YS5hb01hcDt0aGlzLmFvTWFwSW50ZW5zaXR5PWEuYW9NYXBJbnRlbnNpdHk7dGhpcy5lbWlzc2l2ZS5jb3B5KGEuZW1pc3NpdmUpO3RoaXMuZW1pc3NpdmVNYXA9YS5lbWlzc2l2ZU1hcDt0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PWEuZW1pc3NpdmVJbnRlbnNpdHk7dGhpcy5idW1wTWFwPWEuYnVtcE1hcDt0aGlzLmJ1bXBTY2FsZT1hLmJ1bXBTY2FsZTt0aGlzLm5vcm1hbE1hcD1hLm5vcm1hbE1hcDt0aGlzLm5vcm1hbFNjYWxlLmNvcHkoYS5ub3JtYWxTY2FsZSk7dGhpcy5kaXNwbGFjZW1lbnRNYXA9YS5kaXNwbGFjZW1lbnRNYXA7CnRoaXMuZGlzcGxhY2VtZW50U2NhbGU9YS5kaXNwbGFjZW1lbnRTY2FsZTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9YS5kaXNwbGFjZW1lbnRCaWFzO3RoaXMucm91Z2huZXNzTWFwPWEucm91Z2huZXNzTWFwO3RoaXMubWV0YWxuZXNzTWFwPWEubWV0YWxuZXNzTWFwO3RoaXMuYWxwaGFNYXA9YS5hbHBoYU1hcDt0aGlzLmVudk1hcD1hLmVudk1hcDt0aGlzLmVudk1hcEludGVuc2l0eT1hLmVudk1hcEludGVuc2l0eTt0aGlzLnJlZnJhY3Rpb25SYXRpbz1hLnJlZnJhY3Rpb25SYXRpbzt0aGlzLndpcmVmcmFtZT1hLndpcmVmcmFtZTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD1hLndpcmVmcmFtZUxpbmV3aWR0aDt0aGlzLndpcmVmcmFtZUxpbmVjYXA9YS53aXJlZnJhbWVMaW5lY2FwO3RoaXMud2lyZWZyYW1lTGluZWpvaW49YS53aXJlZnJhbWVMaW5lam9pbjt0aGlzLnNraW5uaW5nPWEuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9YS5tb3JwaFRhcmdldHM7dGhpcy5tb3JwaE5vcm1hbHM9CmEubW9ycGhOb3JtYWxzO3JldHVybiB0aGlzfTtwYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSYS5wcm90b3R5cGUpO3BiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1wYjtwYi5wcm90b3R5cGUuaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD0hMDtwYi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtSYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5kZWZpbmVzPXtQSFlTSUNBTDoiIn07dGhpcy5yZWZsZWN0aXZpdHk9YS5yZWZsZWN0aXZpdHk7dGhpcy5jbGVhckNvYXQ9YS5jbGVhckNvYXQ7dGhpcy5jbGVhckNvYXRSb3VnaG5lc3M9YS5jbGVhckNvYXRSb3VnaG5lc3M7cmV0dXJuIHRoaXN9O3RhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTt0YS5wcm90b3R5cGUuY29uc3RydWN0b3I9dGE7dGEucHJvdG90eXBlLmlzTWVzaFBob25nTWF0ZXJpYWw9ITA7dGEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsCmEpO3RoaXMuY29sb3IuY29weShhLmNvbG9yKTt0aGlzLnNwZWN1bGFyLmNvcHkoYS5zcGVjdWxhcik7dGhpcy5zaGluaW5lc3M9YS5zaGluaW5lc3M7dGhpcy5tYXA9YS5tYXA7dGhpcy5saWdodE1hcD1hLmxpZ2h0TWFwO3RoaXMubGlnaHRNYXBJbnRlbnNpdHk9YS5saWdodE1hcEludGVuc2l0eTt0aGlzLmFvTWFwPWEuYW9NYXA7dGhpcy5hb01hcEludGVuc2l0eT1hLmFvTWFwSW50ZW5zaXR5O3RoaXMuZW1pc3NpdmUuY29weShhLmVtaXNzaXZlKTt0aGlzLmVtaXNzaXZlTWFwPWEuZW1pc3NpdmVNYXA7dGhpcy5lbWlzc2l2ZUludGVuc2l0eT1hLmVtaXNzaXZlSW50ZW5zaXR5O3RoaXMuYnVtcE1hcD1hLmJ1bXBNYXA7dGhpcy5idW1wU2NhbGU9YS5idW1wU2NhbGU7dGhpcy5ub3JtYWxNYXA9YS5ub3JtYWxNYXA7dGhpcy5ub3JtYWxTY2FsZS5jb3B5KGEubm9ybWFsU2NhbGUpO3RoaXMuZGlzcGxhY2VtZW50TWFwPWEuZGlzcGxhY2VtZW50TWFwO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9CmEuZGlzcGxhY2VtZW50U2NhbGU7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPWEuZGlzcGxhY2VtZW50Qmlhczt0aGlzLnNwZWN1bGFyTWFwPWEuc3BlY3VsYXJNYXA7dGhpcy5hbHBoYU1hcD1hLmFscGhhTWFwO3RoaXMuZW52TWFwPWEuZW52TWFwO3RoaXMuY29tYmluZT1hLmNvbWJpbmU7dGhpcy5yZWZsZWN0aXZpdHk9YS5yZWZsZWN0aXZpdHk7dGhpcy5yZWZyYWN0aW9uUmF0aW89YS5yZWZyYWN0aW9uUmF0aW87dGhpcy53aXJlZnJhbWU9YS53aXJlZnJhbWU7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9YS53aXJlZnJhbWVMaW5ld2lkdGg7dGhpcy53aXJlZnJhbWVMaW5lY2FwPWEud2lyZWZyYW1lTGluZWNhcDt0aGlzLndpcmVmcmFtZUxpbmVqb2luPWEud2lyZWZyYW1lTGluZWpvaW47dGhpcy5za2lubmluZz1hLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWEubW9ycGhUYXJnZXRzO3RoaXMubW9ycGhOb3JtYWxzPWEubW9ycGhOb3JtYWxzO3JldHVybiB0aGlzfTtxYi5wcm90b3R5cGU9Ck9iamVjdC5jcmVhdGUodGEucHJvdG90eXBlKTtxYi5wcm90b3R5cGUuY29uc3RydWN0b3I9cWI7cWIucHJvdG90eXBlLmlzTWVzaFRvb25NYXRlcmlhbD0hMDtxYi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXt0YS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5ncmFkaWVudE1hcD1hLmdyYWRpZW50TWFwO3JldHVybiB0aGlzfTtyYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShaLnByb3RvdHlwZSk7cmIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXJiO3JiLnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbD0hMDtyYi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtaLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLmJ1bXBNYXA9YS5idW1wTWFwO3RoaXMuYnVtcFNjYWxlPWEuYnVtcFNjYWxlO3RoaXMubm9ybWFsTWFwPWEubm9ybWFsTWFwO3RoaXMubm9ybWFsU2NhbGUuY29weShhLm5vcm1hbFNjYWxlKTt0aGlzLmRpc3BsYWNlbWVudE1hcD1hLmRpc3BsYWNlbWVudE1hcDsKdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT1hLmRpc3BsYWNlbWVudFNjYWxlO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz1hLmRpc3BsYWNlbWVudEJpYXM7dGhpcy53aXJlZnJhbWU9YS53aXJlZnJhbWU7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9YS53aXJlZnJhbWVMaW5ld2lkdGg7dGhpcy5za2lubmluZz1hLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWEubW9ycGhUYXJnZXRzO3RoaXMubW9ycGhOb3JtYWxzPWEubW9ycGhOb3JtYWxzO3JldHVybiB0aGlzfTtzYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShaLnByb3RvdHlwZSk7c2IucHJvdG90eXBlLmNvbnN0cnVjdG9yPXNiO3NiLnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITA7c2IucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5jb2xvci5jb3B5KGEuY29sb3IpO3RoaXMubWFwPWEubWFwO3RoaXMubGlnaHRNYXA9YS5saWdodE1hcDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PQphLmxpZ2h0TWFwSW50ZW5zaXR5O3RoaXMuYW9NYXA9YS5hb01hcDt0aGlzLmFvTWFwSW50ZW5zaXR5PWEuYW9NYXBJbnRlbnNpdHk7dGhpcy5lbWlzc2l2ZS5jb3B5KGEuZW1pc3NpdmUpO3RoaXMuZW1pc3NpdmVNYXA9YS5lbWlzc2l2ZU1hcDt0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PWEuZW1pc3NpdmVJbnRlbnNpdHk7dGhpcy5zcGVjdWxhck1hcD1hLnNwZWN1bGFyTWFwO3RoaXMuYWxwaGFNYXA9YS5hbHBoYU1hcDt0aGlzLmVudk1hcD1hLmVudk1hcDt0aGlzLmNvbWJpbmU9YS5jb21iaW5lO3RoaXMucmVmbGVjdGl2aXR5PWEucmVmbGVjdGl2aXR5O3RoaXMucmVmcmFjdGlvblJhdGlvPWEucmVmcmFjdGlvblJhdGlvO3RoaXMud2lyZWZyYW1lPWEud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWEud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMud2lyZWZyYW1lTGluZWNhcD1hLndpcmVmcmFtZUxpbmVjYXA7dGhpcy53aXJlZnJhbWVMaW5lam9pbj1hLndpcmVmcmFtZUxpbmVqb2luOwp0aGlzLnNraW5uaW5nPWEuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9YS5tb3JwaFRhcmdldHM7dGhpcy5tb3JwaE5vcm1hbHM9YS5tb3JwaE5vcm1hbHM7cmV0dXJuIHRoaXN9O3RiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTt0Yi5wcm90b3R5cGUuY29uc3RydWN0b3I9dGI7dGIucHJvdG90eXBlLmlzTGluZURhc2hlZE1hdGVyaWFsPSEwO3RiLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGEpe1oucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMuY29sb3IuY29weShhLmNvbG9yKTt0aGlzLmxpbmV3aWR0aD1hLmxpbmV3aWR0aDt0aGlzLnNjYWxlPWEuc2NhbGU7dGhpcy5kYXNoU2l6ZT1hLmRhc2hTaXplO3RoaXMuZ2FwU2l6ZT1hLmdhcFNpemU7cmV0dXJuIHRoaXN9O3ZhciBsZz1PYmplY3QuZnJlZXplKHtTaGFkb3dNYXRlcmlhbDpjYyxTcHJpdGVNYXRlcmlhbDpjYixSYXdTaGFkZXJNYXRlcmlhbDpkYyxTaGFkZXJNYXRlcmlhbDpFYSxQb2ludHNNYXRlcmlhbDpMYSwKTWVzaFBoeXNpY2FsTWF0ZXJpYWw6cGIsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6UmEsTWVzaFBob25nTWF0ZXJpYWw6dGEsTWVzaFRvb25NYXRlcmlhbDpxYixNZXNoTm9ybWFsTWF0ZXJpYWw6cmIsTWVzaExhbWJlcnRNYXRlcmlhbDpzYixNZXNoRGVwdGhNYXRlcmlhbDokYSxNZXNoQmFzaWNNYXRlcmlhbDpOYSxMaW5lRGFzaGVkTWF0ZXJpYWw6dGIsTGluZUJhc2ljTWF0ZXJpYWw6aGEsTWF0ZXJpYWw6Wn0pLGhkPXtlbmFibGVkOiExLGZpbGVzOnt9LGFkZDpmdW5jdGlvbihhLGIpeyExIT09dGhpcy5lbmFibGVkJiYodGhpcy5maWxlc1thXT1iKX0sZ2V0OmZ1bmN0aW9uKGEpe2lmKCExIT09dGhpcy5lbmFibGVkKXJldHVybiB0aGlzLmZpbGVzW2FdfSxyZW1vdmU6ZnVuY3Rpb24oYSl7ZGVsZXRlIHRoaXMuZmlsZXNbYV19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5maWxlcz17fX19LEFhPW5ldyBaZDtPYmplY3QuYXNzaWduKHVhLnByb3RvdHlwZSx7bG9hZDpmdW5jdGlvbihhLGIsCmMsZCl7dm9pZCAwPT09YSYmKGE9IiIpO3ZvaWQgMCE9PXRoaXMucGF0aCYmKGE9dGhpcy5wYXRoK2EpO3ZhciBlPXRoaXMsZj1oZC5nZXQoYSk7aWYodm9pZCAwIT09ZilyZXR1cm4gZS5tYW5hZ2VyLml0ZW1TdGFydChhKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YiYmYihmKTtlLm1hbmFnZXIuaXRlbUVuZChhKX0sMCksZjt2YXIgZz1hLm1hdGNoKC9eZGF0YTooLio/KSg7YmFzZTY0KT8sKC4qKSQvKTtpZihnKXt2YXIgaD1nWzFdLGs9ISFnWzJdLGc9Z1szXSxnPXdpbmRvdy5kZWNvZGVVUklDb21wb25lbnQoZyk7ayYmKGc9d2luZG93LmF0b2IoZykpO3RyeXt2YXIgbSxsPSh0aGlzLnJlc3BvbnNlVHlwZXx8IiIpLnRvTG93ZXJDYXNlKCk7c3dpdGNoKGwpe2Nhc2UgImFycmF5YnVmZmVyIjpjYXNlICJibG9iIjptPW5ldyBBcnJheUJ1ZmZlcihnLmxlbmd0aCk7Zm9yKHZhciBxPW5ldyBVaW50OEFycmF5KG0pLGs9MDtrPGcubGVuZ3RoO2srKylxW2tdPWcuY2hhckNvZGVBdChrKTsKImJsb2IiPT09bCYmKG09bmV3IEJsb2IoW21dLHt0eXBlOmh9KSk7YnJlYWs7Y2FzZSAiZG9jdW1lbnQiOm09KG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhnLGgpO2JyZWFrO2Nhc2UgImpzb24iOm09SlNPTi5wYXJzZShnKTticmVhaztkZWZhdWx0Om09Z313aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2ImJmIobSk7ZS5tYW5hZ2VyLml0ZW1FbmQoYSl9LDApfWNhdGNoKHApe3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZCYmZChwKTtlLm1hbmFnZXIuaXRlbUVuZChhKTtlLm1hbmFnZXIuaXRlbUVycm9yKGEpfSwwKX19ZWxzZXt2YXIgbj1uZXcgWE1MSHR0cFJlcXVlc3Q7bi5vcGVuKCJHRVQiLGEsITApO24uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oYyl7dmFyIGY9Yy50YXJnZXQucmVzcG9uc2U7aGQuYWRkKGEsZik7MjAwPT09dGhpcy5zdGF0dXM/KGImJmIoZiksZS5tYW5hZ2VyLml0ZW1FbmQoYSkpOjA9PT10aGlzLnN0YXR1cz8oY29uc29sZS53YXJuKCJUSFJFRS5GaWxlTG9hZGVyOiBIVFRQIFN0YXR1cyAwIHJlY2VpdmVkLiIpLApiJiZiKGYpLGUubWFuYWdlci5pdGVtRW5kKGEpKTooZCYmZChjKSxlLm1hbmFnZXIuaXRlbUVuZChhKSxlLm1hbmFnZXIuaXRlbUVycm9yKGEpKX0sITEpO3ZvaWQgMCE9PWMmJm4uYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGZ1bmN0aW9uKGEpe2MoYSl9LCExKTtuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihiKXtkJiZkKGIpO2UubWFuYWdlci5pdGVtRW5kKGEpO2UubWFuYWdlci5pdGVtRXJyb3IoYSl9LCExKTt2b2lkIDAhPT10aGlzLnJlc3BvbnNlVHlwZSYmKG4ucmVzcG9uc2VUeXBlPXRoaXMucmVzcG9uc2VUeXBlKTt2b2lkIDAhPT10aGlzLndpdGhDcmVkZW50aWFscyYmKG4ud2l0aENyZWRlbnRpYWxzPXRoaXMud2l0aENyZWRlbnRpYWxzKTtuLm92ZXJyaWRlTWltZVR5cGUmJm4ub3ZlcnJpZGVNaW1lVHlwZSh2b2lkIDAhPT10aGlzLm1pbWVUeXBlP3RoaXMubWltZVR5cGU6InRleHQvcGxhaW4iKTtmb3IoaCBpbiB0aGlzLnJlcXVlc3RIZWFkZXIpbi5zZXRSZXF1ZXN0SGVhZGVyKGgsCnRoaXMucmVxdWVzdEhlYWRlcltoXSk7bi5zZW5kKG51bGwpfWUubWFuYWdlci5pdGVtU3RhcnQoYSk7cmV0dXJuIG59LHNldFBhdGg6ZnVuY3Rpb24oYSl7dGhpcy5wYXRoPWE7cmV0dXJuIHRoaXN9LHNldFJlc3BvbnNlVHlwZTpmdW5jdGlvbihhKXt0aGlzLnJlc3BvbnNlVHlwZT1hO3JldHVybiB0aGlzfSxzZXRXaXRoQ3JlZGVudGlhbHM6ZnVuY3Rpb24oYSl7dGhpcy53aXRoQ3JlZGVudGlhbHM9YTtyZXR1cm4gdGhpc30sc2V0TWltZVR5cGU6ZnVuY3Rpb24oYSl7dGhpcy5taW1lVHlwZT1hO3JldHVybiB0aGlzfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEpe3RoaXMucmVxdWVzdEhlYWRlcj1hO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oUWUucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGUoZSl7ay5sb2FkKGFbZV0sZnVuY3Rpb24oYSl7YT1mLl9wYXJzZXIoYSwhMCk7Z1tlXT17d2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHQsCmZvcm1hdDphLmZvcm1hdCxtaXBtYXBzOmEubWlwbWFwc307bSs9MTs2PT09bSYmKDE9PT1hLm1pcG1hcENvdW50JiYoaC5taW5GaWx0ZXI9MTAwNiksaC5mb3JtYXQ9YS5mb3JtYXQsaC5uZWVkc1VwZGF0ZT0hMCxiJiZiKGgpKX0sYyxkKX12YXIgZj10aGlzLGc9W10saD1uZXcgTmI7aC5pbWFnZT1nO3ZhciBrPW5ldyB1YSh0aGlzLm1hbmFnZXIpO2suc2V0UGF0aCh0aGlzLnBhdGgpO2suc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpO2lmKEFycmF5LmlzQXJyYXkoYSkpZm9yKHZhciBtPTAsbD0wLHE9YS5sZW5ndGg7bDxxOysrbCllKGwpO2Vsc2Ugay5sb2FkKGEsZnVuY3Rpb24oYSl7YT1mLl9wYXJzZXIoYSwhMCk7aWYoYS5pc0N1YmVtYXApZm9yKHZhciBjPWEubWlwbWFwcy5sZW5ndGgvYS5taXBtYXBDb3VudCxkPTA7ZDxjO2QrKyl7Z1tkXT17bWlwbWFwczpbXX07Zm9yKHZhciBlPTA7ZTxhLm1pcG1hcENvdW50O2UrKylnW2RdLm1pcG1hcHMucHVzaChhLm1pcG1hcHNbZCoKYS5taXBtYXBDb3VudCtlXSksZ1tkXS5mb3JtYXQ9YS5mb3JtYXQsZ1tkXS53aWR0aD1hLndpZHRoLGdbZF0uaGVpZ2h0PWEuaGVpZ2h0fWVsc2UgaC5pbWFnZS53aWR0aD1hLndpZHRoLGguaW1hZ2UuaGVpZ2h0PWEuaGVpZ2h0LGgubWlwbWFwcz1hLm1pcG1hcHM7MT09PWEubWlwbWFwQ291bnQmJihoLm1pbkZpbHRlcj0xMDA2KTtoLmZvcm1hdD1hLmZvcm1hdDtoLm5lZWRzVXBkYXRlPSEwO2ImJmIoaCl9LGMsZCk7cmV0dXJuIGh9LHNldFBhdGg6ZnVuY3Rpb24oYSl7dGhpcy5wYXRoPWE7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbigkZC5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcyxmPW5ldyBlYixnPW5ldyB1YSh0aGlzLm1hbmFnZXIpO2cuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpO2cubG9hZChhLGZ1bmN0aW9uKGEpe2lmKGE9ZS5fcGFyc2VyKGEpKXZvaWQgMCE9PWEuaW1hZ2U/Zi5pbWFnZT1hLmltYWdlOnZvaWQgMCE9PQphLmRhdGEmJihmLmltYWdlLndpZHRoPWEud2lkdGgsZi5pbWFnZS5oZWlnaHQ9YS5oZWlnaHQsZi5pbWFnZS5kYXRhPWEuZGF0YSksZi53cmFwUz12b2lkIDAhPT1hLndyYXBTP2Eud3JhcFM6MTAwMSxmLndyYXBUPXZvaWQgMCE9PWEud3JhcFQ/YS53cmFwVDoxMDAxLGYubWFnRmlsdGVyPXZvaWQgMCE9PWEubWFnRmlsdGVyP2EubWFnRmlsdGVyOjEwMDYsZi5taW5GaWx0ZXI9dm9pZCAwIT09YS5taW5GaWx0ZXI/YS5taW5GaWx0ZXI6MTAwOCxmLmFuaXNvdHJvcHk9dm9pZCAwIT09YS5hbmlzb3Ryb3B5P2EuYW5pc290cm9weToxLHZvaWQgMCE9PWEuZm9ybWF0JiYoZi5mb3JtYXQ9YS5mb3JtYXQpLHZvaWQgMCE9PWEudHlwZSYmKGYudHlwZT1hLnR5cGUpLHZvaWQgMCE9PWEubWlwbWFwcyYmKGYubWlwbWFwcz1hLm1pcG1hcHMpLDE9PT1hLm1pcG1hcENvdW50JiYoZi5taW5GaWx0ZXI9MTAwNiksZi5uZWVkc1VwZGF0ZT0hMCxiJiZiKGYsYSl9LGMsZCk7cmV0dXJuIGZ9fSk7T2JqZWN0LmFzc2lnbihWYy5wcm90b3R5cGUsCntsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe3ZvaWQgMD09PWEmJihhPSIiKTt2b2lkIDAhPT10aGlzLnBhdGgmJihhPXRoaXMucGF0aCthKTt2YXIgZT10aGlzLGY9aGQuZ2V0KGEpO2lmKHZvaWQgMCE9PWYpcmV0dXJuIGUubWFuYWdlci5pdGVtU3RhcnQoYSksc2V0VGltZW91dChmdW5jdGlvbigpe2ImJmIoZik7ZS5tYW5hZ2VyLml0ZW1FbmQoYSl9LDApLGY7Yz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJpbWciKTtjLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7aGQuYWRkKGEsdGhpcyk7YiYmYih0aGlzKTtlLm1hbmFnZXIuaXRlbUVuZChhKX0sITEpO2MuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKGIpe2QmJmQoYik7ZS5tYW5hZ2VyLml0ZW1FbmQoYSk7ZS5tYW5hZ2VyLml0ZW1FcnJvcihhKX0sITEpOyJkYXRhOiIhPT1hLnN1YnN0cigwLDUpJiZ2b2lkIDAhPT10aGlzLmNyb3NzT3JpZ2luJiYKKGMuY3Jvc3NPcmlnaW49dGhpcy5jcm9zc09yaWdpbik7ZS5tYW5hZ2VyLml0ZW1TdGFydChhKTtjLnNyYz1hO3JldHVybiBjfSxzZXRDcm9zc09yaWdpbjpmdW5jdGlvbihhKXt0aGlzLmNyb3NzT3JpZ2luPWE7cmV0dXJuIHRoaXN9LHNldFBhdGg6ZnVuY3Rpb24oYSl7dGhpcy5wYXRoPWE7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihhZS5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYSxiLGMsZCl7ZnVuY3Rpb24gZShjKXtnLmxvYWQoYVtjXSxmdW5jdGlvbihhKXtmLmltYWdlc1tjXT1hO2grKzs2PT09aCYmKGYubmVlZHNVcGRhdGU9ITAsYiYmYihmKSl9LHZvaWQgMCxkKX12YXIgZj1uZXcgWmEsZz1uZXcgVmModGhpcy5tYW5hZ2VyKTtnLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2cuc2V0UGF0aCh0aGlzLnBhdGgpO3ZhciBoPTA7Zm9yKGM9MDtjPGEubGVuZ3RoOysrYyllKGMpO3JldHVybiBmfSxzZXRDcm9zc09yaWdpbjpmdW5jdGlvbihhKXt0aGlzLmNyb3NzT3JpZ2luPQphO3JldHVybiB0aGlzfSxzZXRQYXRoOmZ1bmN0aW9uKGEpe3RoaXMucGF0aD1hO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oc2QucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW5ldyBWYyh0aGlzLm1hbmFnZXIpO2Uuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7ZS5zZXRQYXRoKHRoaXMucGF0aCk7dmFyIGY9bmV3IFg7Zi5pbWFnZT1lLmxvYWQoYSxmdW5jdGlvbigpe3ZhciBjPTA8YS5zZWFyY2goL1wuKGpwZ3xqcGVnKSQvKXx8MD09PWEuc2VhcmNoKC9eZGF0YVw6aW1hZ2VcL2pwZWcvKTtmLmZvcm1hdD1jPzEwMjI6MTAyMztmLm5lZWRzVXBkYXRlPSEwO3ZvaWQgMCE9PWImJmIoZil9LGMsZCk7cmV0dXJuIGZ9LHNldENyb3NzT3JpZ2luOmZ1bmN0aW9uKGEpe3RoaXMuY3Jvc3NPcmlnaW49YTtyZXR1cm4gdGhpc30sc2V0UGF0aDpmdW5jdGlvbihhKXt0aGlzLnBhdGg9YTtyZXR1cm4gdGhpc319KTttYS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSwKe2NvbnN0cnVjdG9yOm1hLGlzTGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXtCLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLmNvbG9yLmNvcHkoYS5jb2xvcik7dGhpcy5pbnRlbnNpdHk9YS5pbnRlbnNpdHk7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihhKXthPUIucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsYSk7YS5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKTthLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHk7dm9pZCAwIT09dGhpcy5ncm91bmRDb2xvciYmKGEub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpO3ZvaWQgMCE9PXRoaXMuZGlzdGFuY2UmJihhLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKTt2b2lkIDAhPT10aGlzLmFuZ2xlJiYoYS5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSk7dm9pZCAwIT09dGhpcy5kZWNheSYmKGEub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpO3ZvaWQgMCE9PQp0aGlzLnBlbnVtYnJhJiYoYS5vYmplY3QucGVudW1icmE9dGhpcy5wZW51bWJyYSk7dm9pZCAwIT09dGhpcy5zaGFkb3cmJihhLm9iamVjdC5zaGFkb3c9dGhpcy5zaGFkb3cudG9KU09OKCkpO3JldHVybiBhfX0pO3RkLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobWEucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6dGQsaXNIZW1pc3BoZXJlTGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXttYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5ncm91bmRDb2xvci5jb3B5KGEuZ3JvdW5kQ29sb3IpO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24odWIucHJvdG90eXBlLHtjb3B5OmZ1bmN0aW9uKGEpe3RoaXMuY2FtZXJhPWEuY2FtZXJhLmNsb25lKCk7dGhpcy5iaWFzPWEuYmlhczt0aGlzLnJhZGl1cz1hLnJhZGl1czt0aGlzLm1hcFNpemUuY29weShhLm1hcFNpemUpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sCnRvSlNPTjpmdW5jdGlvbigpe3ZhciBhPXt9OzAhPT10aGlzLmJpYXMmJihhLmJpYXM9dGhpcy5iaWFzKTsxIT09dGhpcy5yYWRpdXMmJihhLnJhZGl1cz10aGlzLnJhZGl1cyk7aWYoNTEyIT09dGhpcy5tYXBTaXplLnh8fDUxMiE9PXRoaXMubWFwU2l6ZS55KWEubWFwU2l6ZT10aGlzLm1hcFNpemUudG9BcnJheSgpO2EuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0O2RlbGV0ZSBhLmNhbWVyYS5tYXRyaXg7cmV0dXJuIGF9fSk7dWQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZSh1Yi5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp1ZCxpc1Nwb3RMaWdodFNoYWRvdzohMCx1cGRhdGU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jYW1lcmEsYz0yKlkuUkFEMkRFRyphLmFuZ2xlLGQ9dGhpcy5tYXBTaXplLndpZHRoL3RoaXMubWFwU2l6ZS5oZWlnaHQ7YT1hLmRpc3RhbmNlfHxiLmZhcjtpZihjIT09Yi5mb3Z8fGQhPT1iLmFzcGVjdHx8YSE9PWIuZmFyKWIuZm92PQpjLGIuYXNwZWN0PWQsYi5mYXI9YSxiLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX19KTt2ZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG1hLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnZkLGlzU3BvdExpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24oYSl7bWEucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMuZGlzdGFuY2U9YS5kaXN0YW5jZTt0aGlzLmFuZ2xlPWEuYW5nbGU7dGhpcy5wZW51bWJyYT1hLnBlbnVtYnJhO3RoaXMuZGVjYXk9YS5kZWNheTt0aGlzLnRhcmdldD1hLnRhcmdldC5jbG9uZSgpO3RoaXMuc2hhZG93PWEuc2hhZG93LmNsb25lKCk7cmV0dXJuIHRoaXN9fSk7d2QucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShtYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp3ZCxpc1BvaW50TGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXttYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5kaXN0YW5jZT1hLmRpc3RhbmNlOwp0aGlzLmRlY2F5PWEuZGVjYXk7dGhpcy5zaGFkb3c9YS5zaGFkb3cuY2xvbmUoKTtyZXR1cm4gdGhpc319KTt4ZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHViLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnhkfSk7eWQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShtYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp5ZCxpc0RpcmVjdGlvbmFsTGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXttYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy50YXJnZXQ9YS50YXJnZXQuY2xvbmUoKTt0aGlzLnNoYWRvdz1hLnNoYWRvdy5jbG9uZSgpO3JldHVybiB0aGlzfX0pO3pkLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobWEucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6emQsaXNBbWJpZW50TGlnaHQ6ITB9KTtBZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG1hLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkFkLAppc1JlY3RBcmVhTGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXttYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy53aWR0aD1hLndpZHRoO3RoaXMuaGVpZ2h0PWEuaGVpZ2h0O3JldHVybiB0aGlzfSx0b0pTT046ZnVuY3Rpb24oYSl7YT1tYS5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxhKTthLm9iamVjdC53aWR0aD10aGlzLndpZHRoO2Eub2JqZWN0LmhlaWdodD10aGlzLmhlaWdodDtyZXR1cm4gYX19KTt2YXIgdmE9e2FycmF5U2xpY2U6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB2YS5pc1R5cGVkQXJyYXkoYSk/bmV3IGEuY29uc3RydWN0b3IoYS5zdWJhcnJheShiLHZvaWQgMCE9PWM/YzphLmxlbmd0aCkpOmEuc2xpY2UoYixjKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4hYXx8IWMmJmEuY29uc3RydWN0b3I9PT1iP2E6Im51bWJlciI9PT10eXBlb2YgYi5CWVRFU19QRVJfRUxFTUVOVD9uZXcgYihhKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhKX0sCmlzVHlwZWRBcnJheTpmdW5jdGlvbihhKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGEpJiYhKGEgaW5zdGFuY2VvZiBEYXRhVmlldyl9LGdldEtleWZyYW1lT3JkZXI6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEubGVuZ3RoLGM9QXJyYXkoYiksZD0wO2QhPT1iOysrZCljW2RdPWQ7Yy5zb3J0KGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGFbYl0tYVtjXX0pO3JldHVybiBjfSxzb3J0ZWRBcnJheTpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPWEubGVuZ3RoLGU9bmV3IGEuY29uc3RydWN0b3IoZCksZj0wLGc9MDtnIT09ZDsrK2YpZm9yKHZhciBoPWNbZl0qYixrPTA7ayE9PWI7KytrKWVbZysrXT1hW2gra107cmV0dXJuIGV9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKGEsYixjLGQpe2Zvcih2YXIgZT0xLGY9YVswXTt2b2lkIDAhPT1mJiZ2b2lkIDA9PT1mW2RdOylmPWFbZSsrXTtpZih2b2lkIDAhPT1mKXt2YXIgZz1mW2RdO2lmKHZvaWQgMCE9PWcpaWYoQXJyYXkuaXNBcnJheShnKSl7ZG8gZz0KZltkXSx2b2lkIDAhPT1nJiYoYi5wdXNoKGYudGltZSksYy5wdXNoLmFwcGx5KGMsZykpLGY9YVtlKytdO3doaWxlKHZvaWQgMCE9PWYpfWVsc2UgaWYodm9pZCAwIT09Zy50b0FycmF5KXtkbyBnPWZbZF0sdm9pZCAwIT09ZyYmKGIucHVzaChmLnRpbWUpLGcudG9BcnJheShjLGMubGVuZ3RoKSksZj1hW2UrK107d2hpbGUodm9pZCAwIT09Zil9ZWxzZXtkbyBnPWZbZF0sdm9pZCAwIT09ZyYmKGIucHVzaChmLnRpbWUpLGMucHVzaChnKSksZj1hW2UrK107d2hpbGUodm9pZCAwIT09Zil9fX19O09iamVjdC5hc3NpZ24oRGEucHJvdG90eXBlLHtldmFsdWF0ZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxjPXRoaXMuX2NhY2hlZEluZGV4LGQ9YltjXSxlPWJbYy0xXTthOntiOntjOntkOmlmKCEoYTxkKSl7Zm9yKHZhciBmPWMrMjs7KXtpZih2b2lkIDA9PT1kKXtpZihhPGUpYnJlYWsgZDt0aGlzLl9jYWNoZWRJbmRleD1jPWIubGVuZ3RoO3JldHVybiB0aGlzLmFmdGVyRW5kXyhjLQoxLGEsZSl9aWYoYz09PWYpYnJlYWs7ZT1kO2Q9YlsrK2NdO2lmKGE8ZClicmVhayBifWQ9Yi5sZW5ndGg7YnJlYWsgY31pZihhPj1lKWJyZWFrIGE7ZWxzZXtmPWJbMV07YTxmJiYoYz0yLGU9Zik7Zm9yKGY9Yy0yOzspe2lmKHZvaWQgMD09PWUpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCxhLGQpO2lmKGM9PT1mKWJyZWFrO2Q9ZTtlPWJbLS1jLTFdO2lmKGE+PWUpYnJlYWsgYn1kPWM7Yz0wfX1mb3IoO2M8ZDspZT1jK2Q+Pj4xLGE8YltlXT9kPWU6Yz1lKzE7ZD1iW2NdO2U9YltjLTFdO2lmKHZvaWQgMD09PWUpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCxhLGQpO2lmKHZvaWQgMD09PWQpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PWM9Yi5sZW5ndGgsdGhpcy5hZnRlckVuZF8oYy0xLGUsYSl9dGhpcy5fY2FjaGVkSW5kZXg9Yzt0aGlzLmludGVydmFsQ2hhbmdlZF8oYyxlLGQpfXJldHVybiB0aGlzLmludGVycG9sYXRlXyhjLAplLGEsZCl9LHNldHRpbmdzOm51bGwsRGVmYXVsdFNldHRpbmdzXzp7fSxnZXRTZXR0aW5nc186ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffSxjb3B5U2FtcGxlVmFsdWVfOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucmVzdWx0QnVmZmVyLGM9dGhpcy5zYW1wbGVWYWx1ZXMsZD10aGlzLnZhbHVlU2l6ZTthKj1kO2Zvcih2YXIgZT0wO2UhPT1kOysrZSliW2VdPWNbYStlXTtyZXR1cm4gYn0saW50ZXJwb2xhdGVfOmZ1bmN0aW9uKGEsYixjLGQpe3Rocm93IEVycm9yKCJjYWxsIHRvIGFic3RyYWN0IG1ldGhvZCIpO30saW50ZXJ2YWxDaGFuZ2VkXzpmdW5jdGlvbihhLGIsYyl7fX0pO09iamVjdC5hc3NpZ24oRGEucHJvdG90eXBlLHtiZWZvcmVTdGFydF86RGEucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV8sYWZ0ZXJFbmRfOkRhLnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVffSk7QmQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShEYS5wcm90b3R5cGUpLAp7Y29uc3RydWN0b3I6QmQsRGVmYXVsdFNldHRpbmdzXzp7ZW5kaW5nU3RhcnQ6MjQwMCxlbmRpbmdFbmQ6MjQwMH0saW50ZXJ2YWxDaGFuZ2VkXzpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMsZT1hLTIsZj1hKzEsZz1kW2VdLGg9ZFtmXTtpZih2b2lkIDA9PT1nKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0KXtjYXNlIDI0MDE6ZT1hO2c9MipiLWM7YnJlYWs7Y2FzZSAyNDAyOmU9ZC5sZW5ndGgtMjtnPWIrZFtlXS1kW2UrMV07YnJlYWs7ZGVmYXVsdDplPWEsZz1jfWlmKHZvaWQgMD09PWgpc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nRW5kKXtjYXNlIDI0MDE6Zj1hO2g9MipjLWI7YnJlYWs7Y2FzZSAyNDAyOmY9MTtoPWMrZFsxXS1kWzBdO2JyZWFrO2RlZmF1bHQ6Zj1hLTEsaD1ifWE9LjUqKGMtYik7ZD10aGlzLnZhbHVlU2l6ZTt0aGlzLl93ZWlnaHRQcmV2PWEvKGItZyk7dGhpcy5fd2VpZ2h0TmV4dD0KYS8oaC1jKTt0aGlzLl9vZmZzZXRQcmV2PWUqZDt0aGlzLl9vZmZzZXROZXh0PWYqZH0saW50ZXJwb2xhdGVfOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMucmVzdWx0QnVmZmVyLGY9dGhpcy5zYW1wbGVWYWx1ZXMsZz10aGlzLnZhbHVlU2l6ZTthKj1nO3ZhciBoPWEtZyxrPXRoaXMuX29mZnNldFByZXYsbT10aGlzLl9vZmZzZXROZXh0LGw9dGhpcy5fd2VpZ2h0UHJldixxPXRoaXMuX3dlaWdodE5leHQsbj0oYy1iKS8oZC1iKTtjPW4qbjtkPWMqbjtiPS1sKmQrMipsKmMtbCpuO2w9KDErbCkqZCsoLTEuNS0yKmwpKmMrKC0uNStsKSpuKzE7bj0oLTEtcSkqZCsoMS41K3EpKmMrLjUqbjtxPXEqZC1xKmM7Zm9yKGM9MDtjIT09ZzsrK2MpZVtjXT1iKmZbaytjXStsKmZbaCtjXStuKmZbYStjXStxKmZbbStjXTtyZXR1cm4gZX19KTtXYy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKERhLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOldjLGludGVycG9sYXRlXzpmdW5jdGlvbihhLApiLGMsZCl7dmFyIGU9dGhpcy5yZXN1bHRCdWZmZXIsZj10aGlzLnNhbXBsZVZhbHVlcyxnPXRoaXMudmFsdWVTaXplO2EqPWc7dmFyIGg9YS1nO2I9KGMtYikvKGQtYik7Yz0xLWI7Zm9yKGQ9MDtkIT09ZzsrK2QpZVtkXT1mW2grZF0qYytmW2ErZF0qYjtyZXR1cm4gZX19KTtDZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKERhLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkNkLGludGVycG9sYXRlXzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5jb3B5U2FtcGxlVmFsdWVfKGEtMSl9fSk7dmFyIFlhO1lhPXtUaW1lQnVmZmVyVHlwZTpGbG9hdDMyQXJyYXksVmFsdWVCdWZmZXJUeXBlOkZsb2F0MzJBcnJheSxEZWZhdWx0SW50ZXJwb2xhdGlvbjoyMzAxLEludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgQ2QodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLGEpfSxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBXYyh0aGlzLnRpbWVzLAp0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLGEpfSxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBCZCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksYSl9LHNldEludGVycG9sYXRpb246ZnVuY3Rpb24oYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMjMwMDpiPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU7YnJlYWs7Y2FzZSAyMzAxOmI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSAyMzAyOmI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09Yil7Yj0idW5zdXBwb3J0ZWQgaW50ZXJwb2xhdGlvbiBmb3IgIit0aGlzLlZhbHVlVHlwZU5hbWUrIiBrZXlmcmFtZSB0cmFjayBuYW1lZCAiK3RoaXMubmFtZTtpZih2b2lkIDA9PT10aGlzLmNyZWF0ZUludGVycG9sYW50KWlmKGEhPT10aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKXRoaXMuc2V0SW50ZXJwb2xhdGlvbih0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKTsKZWxzZSB0aHJvdyBFcnJvcihiKTtjb25zb2xlLndhcm4oYil9ZWxzZSB0aGlzLmNyZWF0ZUludGVycG9sYW50PWJ9LGdldEludGVycG9sYXRpb246ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiAyMzAwO2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6cmV0dXJuIDIzMDE7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gMjMwMn19LGdldFZhbHVlU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGgvdGhpcy50aW1lcy5sZW5ndGh9LHNoaWZ0OmZ1bmN0aW9uKGEpe2lmKDAhPT1hKWZvcih2YXIgYj10aGlzLnRpbWVzLGM9MCxkPWIubGVuZ3RoO2MhPT1kOysrYyliW2NdKz1hO3JldHVybiB0aGlzfSxzY2FsZTpmdW5jdGlvbihhKXtpZigxIT09YSlmb3IodmFyIGI9dGhpcy50aW1lcyxjPQowLGQ9Yi5sZW5ndGg7YyE9PWQ7KytjKWJbY10qPWE7cmV0dXJuIHRoaXN9LHRyaW06ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9dGhpcy50aW1lcyxkPWMubGVuZ3RoLGU9MCxmPWQtMTtlIT09ZCYmY1tlXTxhOykrK2U7Zm9yKDstMSE9PWYmJmNbZl0+YjspLS1mOysrZjtpZigwIT09ZXx8ZiE9PWQpZT49ZiYmKGY9TWF0aC5tYXgoZiwxKSxlPWYtMSksZD10aGlzLmdldFZhbHVlU2l6ZSgpLHRoaXMudGltZXM9dmEuYXJyYXlTbGljZShjLGUsZiksdGhpcy52YWx1ZXM9dmEuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyxlKmQsZipkKTtyZXR1cm4gdGhpc30sdmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgYT0hMCxiPXRoaXMuZ2V0VmFsdWVTaXplKCk7MCE9PWItTWF0aC5mbG9vcihiKSYmKGNvbnNvbGUuZXJyb3IoImludmFsaWQgdmFsdWUgc2l6ZSBpbiB0cmFjayIsdGhpcyksYT0hMSk7dmFyIGM9dGhpcy50aW1lcyxiPXRoaXMudmFsdWVzLGQ9Yy5sZW5ndGg7MD09PWQmJihjb25zb2xlLmVycm9yKCJ0cmFjayBpcyBlbXB0eSIsCnRoaXMpLGE9ITEpO2Zvcih2YXIgZT1udWxsLGY9MDtmIT09ZDtmKyspe3ZhciBnPWNbZl07aWYoIm51bWJlciI9PT10eXBlb2YgZyYmaXNOYU4oZykpe2NvbnNvbGUuZXJyb3IoInRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyIix0aGlzLGYsZyk7YT0hMTticmVha31pZihudWxsIT09ZSYmZT5nKXtjb25zb2xlLmVycm9yKCJvdXQgb2Ygb3JkZXIga2V5cyIsdGhpcyxmLGcsZSk7YT0hMTticmVha31lPWd9aWYodm9pZCAwIT09YiYmdmEuaXNUeXBlZEFycmF5KGIpKWZvcihmPTAsYz1iLmxlbmd0aDtmIT09YzsrK2YpaWYoZD1iW2ZdLGlzTmFOKGQpKXtjb25zb2xlLmVycm9yKCJ2YWx1ZSBpcyBub3QgYSB2YWxpZCBudW1iZXIiLHRoaXMsZixkKTthPSExO2JyZWFrfXJldHVybiBhfSxvcHRpbWl6ZTpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLnRpbWVzLGI9dGhpcy52YWx1ZXMsYz10aGlzLmdldFZhbHVlU2l6ZSgpLGQ9MjMwMj09PXRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpLGU9MSwKZj1hLmxlbmd0aC0xLGc9MTtnPGY7KytnKXt2YXIgaD0hMSxrPWFbZ107aWYoayE9PWFbZysxXSYmKDEhPT1nfHxrIT09a1swXSkpaWYoZCloPSEwO2Vsc2UgZm9yKHZhciBtPWcqYyxsPW0tYyxxPW0rYyxrPTA7ayE9PWM7KytrKXt2YXIgbj1iW20ra107aWYobiE9PWJbbCtrXXx8biE9PWJbcStrXSl7aD0hMDticmVha319aWYoaCl7aWYoZyE9PWUpZm9yKGFbZV09YVtnXSxoPWcqYyxtPWUqYyxrPTA7ayE9PWM7KytrKWJbbStrXT1iW2gra107KytlfX1pZigwPGYpe2FbZV09YVtmXTtoPWYqYzttPWUqYztmb3Ioaz0wO2shPT1jOysrayliW20ra109YltoK2tdOysrZX1lIT09YS5sZW5ndGgmJih0aGlzLnRpbWVzPXZhLmFycmF5U2xpY2UoYSwwLGUpLHRoaXMudmFsdWVzPXZhLmFycmF5U2xpY2UoYiwwLGUqYykpO3JldHVybiB0aGlzfX07ZWMucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShZYSkse2NvbnN0cnVjdG9yOmVjLFZhbHVlVHlwZU5hbWU6InZlY3RvciJ9KTsKRGQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShEYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpEZCxpbnRlcnBvbGF0ZV86ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5yZXN1bHRCdWZmZXIsZj10aGlzLnNhbXBsZVZhbHVlcyxnPXRoaXMudmFsdWVTaXplO2EqPWc7Yj0oYy1iKS8oZC1iKTtmb3IoYz1hK2c7YSE9PWM7YSs9NClxYS5zbGVycEZsYXQoZSwwLGYsYS1nLGYsYSxiKTtyZXR1cm4gZX19KTtYYy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFlhKSx7Y29uc3RydWN0b3I6WGMsVmFsdWVUeXBlTmFtZToicXVhdGVybmlvbiIsRGVmYXVsdEludGVycG9sYXRpb246MjMwMSxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBEZCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksYSl9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KTsKZmMucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShZYSkse2NvbnN0cnVjdG9yOmZjLFZhbHVlVHlwZU5hbWU6Im51bWJlciJ9KTtFZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFlhKSx7Y29uc3RydWN0b3I6RWQsVmFsdWVUeXBlTmFtZToic3RyaW5nIixWYWx1ZUJ1ZmZlclR5cGU6QXJyYXksRGVmYXVsdEludGVycG9sYXRpb246MjMwMCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6dm9pZCAwLEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KTtGZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFlhKSx7Y29uc3RydWN0b3I6RmQsVmFsdWVUeXBlTmFtZToiYm9vbCIsVmFsdWVCdWZmZXJUeXBlOkFycmF5LERlZmF1bHRJbnRlcnBvbGF0aW9uOjIzMDAsSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnZvaWQgMCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg6dm9pZCAwfSk7CkdkLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoWWEpLHtjb25zdHJ1Y3RvcjpHZCxWYWx1ZVR5cGVOYW1lOiJjb2xvciJ9KTt3Yi5wcm90b3R5cGU9WWE7WWEuY29uc3RydWN0b3I9d2I7T2JqZWN0LmFzc2lnbih3Yix7cGFyc2U6ZnVuY3Rpb24oYSl7aWYodm9pZCAwPT09YS50eXBlKXRocm93IEVycm9yKCJ0cmFjayB0eXBlIHVuZGVmaW5lZCwgY2FuIG5vdCBwYXJzZSIpO3ZhciBiPXdiLl9nZXRUcmFja1R5cGVGb3JWYWx1ZVR5cGVOYW1lKGEudHlwZSk7aWYodm9pZCAwPT09YS50aW1lcyl7dmFyIGM9W10sZD1bXTt2YS5mbGF0dGVuSlNPTihhLmtleXMsYyxkLCJ2YWx1ZSIpO2EudGltZXM9YzthLnZhbHVlcz1kfXJldHVybiB2b2lkIDAhPT1iLnBhcnNlP2IucGFyc2UoYSk6bmV3IGIoYS5uYW1lLGEudGltZXMsYS52YWx1ZXMsYS5pbnRlcnBvbGF0aW9uKX0sdG9KU09OOmZ1bmN0aW9uKGEpe3ZhciBiPWEuY29uc3RydWN0b3I7aWYodm9pZCAwIT09Yi50b0pTT04pYj0KYi50b0pTT04oYSk7ZWxzZXt2YXIgYj17bmFtZTphLm5hbWUsdGltZXM6dmEuY29udmVydEFycmF5KGEudGltZXMsQXJyYXkpLHZhbHVlczp2YS5jb252ZXJ0QXJyYXkoYS52YWx1ZXMsQXJyYXkpfSxjPWEuZ2V0SW50ZXJwb2xhdGlvbigpO2MhPT1hLkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYoYi5pbnRlcnBvbGF0aW9uPWMpfWIudHlwZT1hLlZhbHVlVHlwZU5hbWU7cmV0dXJuIGJ9LF9nZXRUcmFja1R5cGVGb3JWYWx1ZVR5cGVOYW1lOmZ1bmN0aW9uKGEpe3N3aXRjaChhLnRvTG93ZXJDYXNlKCkpe2Nhc2UgInNjYWxhciI6Y2FzZSAiZG91YmxlIjpjYXNlICJmbG9hdCI6Y2FzZSAibnVtYmVyIjpjYXNlICJpbnRlZ2VyIjpyZXR1cm4gZmM7Y2FzZSAidmVjdG9yIjpjYXNlICJ2ZWN0b3IyIjpjYXNlICJ2ZWN0b3IzIjpjYXNlICJ2ZWN0b3I0IjpyZXR1cm4gZWM7Y2FzZSAiY29sb3IiOnJldHVybiBHZDtjYXNlICJxdWF0ZXJuaW9uIjpyZXR1cm4gWGM7Y2FzZSAiYm9vbCI6Y2FzZSAiYm9vbGVhbiI6cmV0dXJuIEZkOwpjYXNlICJzdHJpbmciOnJldHVybiBFZH10aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgdHlwZU5hbWU6ICIrYSk7fX0pO09iamVjdC5hc3NpZ24oQmEse3BhcnNlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPWEudHJhY2tzLGQ9MS8oYS5mcHN8fDEpLGU9MCxmPWMubGVuZ3RoO2UhPT1mOysrZSliLnB1c2god2IucGFyc2UoY1tlXSkuc2NhbGUoZCkpO3JldHVybiBuZXcgQmEoYS5uYW1lLGEuZHVyYXRpb24sYil9LHRvSlNPTjpmdW5jdGlvbihhKXt2YXIgYj1bXSxjPWEudHJhY2tzO2E9e25hbWU6YS5uYW1lLGR1cmF0aW9uOmEuZHVyYXRpb24sdHJhY2tzOmJ9O2Zvcih2YXIgZD0wLGU9Yy5sZW5ndGg7ZCE9PWU7KytkKWIucHVzaCh3Yi50b0pTT04oY1tkXSkpO3JldHVybiBhfSxDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZTpmdW5jdGlvbihhLGIsYyxkKXtmb3IodmFyIGU9Yi5sZW5ndGgsZj1bXSxnPTA7ZzxlO2crKyl7dmFyIGg9W10saz1bXTtoLnB1c2goKGcrZS0xKSUKZSxnLChnKzEpJWUpO2sucHVzaCgwLDEsMCk7dmFyIG09dmEuZ2V0S2V5ZnJhbWVPcmRlcihoKSxoPXZhLnNvcnRlZEFycmF5KGgsMSxtKSxrPXZhLnNvcnRlZEFycmF5KGssMSxtKTtkfHwwIT09aFswXXx8KGgucHVzaChlKSxrLnB1c2goa1swXSkpO2YucHVzaCgobmV3IGZjKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrYltnXS5uYW1lKyJdIixoLGspKS5zY2FsZSgxL2MpKX1yZXR1cm4gbmV3IEJhKGEsLTEsZil9LGZpbmRCeU5hbWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hO0FycmF5LmlzQXJyYXkoYSl8fChjPWEuZ2VvbWV0cnkmJmEuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8YS5hbmltYXRpb25zKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKylpZihjW2RdLm5hbWU9PT1iKXJldHVybiBjW2RdO3JldHVybiBudWxsfSxDcmVhdGVDbGlwc0Zyb21Nb3JwaFRhcmdldFNlcXVlbmNlczpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXt9LGU9L14oW1x3LV0qPykoW1xkXSspJC8sZj0wLApnPWEubGVuZ3RoO2Y8ZztmKyspe3ZhciBoPWFbZl0saz1oLm5hbWUubWF0Y2goZSk7aWYoayYmMTxrLmxlbmd0aCl7dmFyIG09a1sxXTsoaz1kW21dKXx8KGRbbV09az1bXSk7ay5wdXNoKGgpfX1hPVtdO2ZvcihtIGluIGQpYS5wdXNoKEJhLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKG0sZFttXSxiLGMpKTtyZXR1cm4gYX0scGFyc2VBbmltYXRpb246ZnVuY3Rpb24oYSxiKXtpZighYSlyZXR1cm4gY29uc29sZS5lcnJvcigiICBubyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhIiksbnVsbDtmb3IodmFyIGM9ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZigwIT09Yy5sZW5ndGgpe3ZhciBmPVtdLGc9W107dmEuZmxhdHRlbkpTT04oYyxmLGcsZCk7MCE9PWYubGVuZ3RoJiZlLnB1c2gobmV3IGEoYixmLGcpKX19LGQ9W10sZT1hLm5hbWV8fCJkZWZhdWx0IixmPWEubGVuZ3RofHwtMSxnPWEuZnBzfHwzMCxoPWEuaGllcmFyY2h5fHxbXSxrPTA7azxoLmxlbmd0aDtrKyspe3ZhciBtPQpoW2tdLmtleXM7aWYobSYmMCE9PW0ubGVuZ3RoKWlmKG1bMF0ubW9ycGhUYXJnZXRzKXtmb3IodmFyIGY9e30sbD0wO2w8bS5sZW5ndGg7bCsrKWlmKG1bbF0ubW9ycGhUYXJnZXRzKWZvcih2YXIgcT0wO3E8bVtsXS5tb3JwaFRhcmdldHMubGVuZ3RoO3ErKylmW21bbF0ubW9ycGhUYXJnZXRzW3FdXT0tMTtmb3IodmFyIG4gaW4gZil7Zm9yKHZhciBwPVtdLHo9W10scT0wO3EhPT1tW2xdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7KytxKXt2YXIgdD1tW2xdO3AucHVzaCh0LnRpbWUpO3oucHVzaCh0Lm1vcnBoVGFyZ2V0PT09bj8xOjApfWQucHVzaChuZXcgZmMoIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK24rIl0iLHAseikpfWY9Zi5sZW5ndGgqKGd8fDEpfWVsc2UgbD0iLmJvbmVzWyIrYltrXS5uYW1lKyJdIixjKGVjLGwrIi5wb3NpdGlvbiIsbSwicG9zIixkKSxjKFhjLGwrIi5xdWF0ZXJuaW9uIixtLCJyb3QiLGQpLGMoZWMsbCsiLnNjYWxlIixtLCJzY2wiLGQpfXJldHVybiAwPT09CmQubGVuZ3RoP251bGw6bmV3IEJhKGUsZixkKX19KTtPYmplY3QuYXNzaWduKEJhLnByb3RvdHlwZSx7cmVzZXREdXJhdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI9MCxjPXRoaXMudHJhY2tzLmxlbmd0aDtiIT09YzsrK2IpdmFyIGQ9dGhpcy50cmFja3NbYl0sYT1NYXRoLm1heChhLGQudGltZXNbZC50aW1lcy5sZW5ndGgtMV0pO3RoaXMuZHVyYXRpb249YX0sdHJpbTpmdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8dGhpcy50cmFja3MubGVuZ3RoO2ErKyl0aGlzLnRyYWNrc1thXS50cmltKDAsdGhpcy5kdXJhdGlvbik7cmV0dXJuIHRoaXN9LG9wdGltaXplOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTx0aGlzLnRyYWNrcy5sZW5ndGg7YSsrKXRoaXMudHJhY2tzW2FdLm9wdGltaXplKCk7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihIZC5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcyxmPW5ldyB1YShlLm1hbmFnZXIpO2Yuc2V0UmVzcG9uc2VUeXBlKCJqc29uIik7CmYubG9hZChhLGZ1bmN0aW9uKGEpe2IoZS5wYXJzZShhKSl9LGMsZCl9LHNldFRleHR1cmVzOmZ1bmN0aW9uKGEpe3RoaXMudGV4dHVyZXM9YX0scGFyc2U6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2b2lkIDA9PT1jW2FdJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsTG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsYSk7cmV0dXJuIGNbYV19dmFyIGM9dGhpcy50ZXh0dXJlcyxkPW5ldyBsZ1thLnR5cGVdO3ZvaWQgMCE9PWEudXVpZCYmKGQudXVpZD1hLnV1aWQpO3ZvaWQgMCE9PWEubmFtZSYmKGQubmFtZT1hLm5hbWUpO3ZvaWQgMCE9PWEuY29sb3ImJmQuY29sb3Iuc2V0SGV4KGEuY29sb3IpO3ZvaWQgMCE9PWEucm91Z2huZXNzJiYoZC5yb3VnaG5lc3M9YS5yb3VnaG5lc3MpO3ZvaWQgMCE9PWEubWV0YWxuZXNzJiYoZC5tZXRhbG5lc3M9YS5tZXRhbG5lc3MpO3ZvaWQgMCE9PWEuZW1pc3NpdmUmJmQuZW1pc3NpdmUuc2V0SGV4KGEuZW1pc3NpdmUpO3ZvaWQgMCE9PQphLnNwZWN1bGFyJiZkLnNwZWN1bGFyLnNldEhleChhLnNwZWN1bGFyKTt2b2lkIDAhPT1hLnNoaW5pbmVzcyYmKGQuc2hpbmluZXNzPWEuc2hpbmluZXNzKTt2b2lkIDAhPT1hLmNsZWFyQ29hdCYmKGQuY2xlYXJDb2F0PWEuY2xlYXJDb2F0KTt2b2lkIDAhPT1hLmNsZWFyQ29hdFJvdWdobmVzcyYmKGQuY2xlYXJDb2F0Um91Z2huZXNzPWEuY2xlYXJDb2F0Um91Z2huZXNzKTt2b2lkIDAhPT1hLnVuaWZvcm1zJiYoZC51bmlmb3Jtcz1hLnVuaWZvcm1zKTt2b2lkIDAhPT1hLnZlcnRleFNoYWRlciYmKGQudmVydGV4U2hhZGVyPWEudmVydGV4U2hhZGVyKTt2b2lkIDAhPT1hLmZyYWdtZW50U2hhZGVyJiYoZC5mcmFnbWVudFNoYWRlcj1hLmZyYWdtZW50U2hhZGVyKTt2b2lkIDAhPT1hLnZlcnRleENvbG9ycyYmKGQudmVydGV4Q29sb3JzPWEudmVydGV4Q29sb3JzKTt2b2lkIDAhPT1hLmZvZyYmKGQuZm9nPWEuZm9nKTt2b2lkIDAhPT1hLnNoYWRpbmcmJihkLnNoYWRpbmc9YS5zaGFkaW5nKTsKdm9pZCAwIT09YS5ibGVuZGluZyYmKGQuYmxlbmRpbmc9YS5ibGVuZGluZyk7dm9pZCAwIT09YS5zaWRlJiYoZC5zaWRlPWEuc2lkZSk7dm9pZCAwIT09YS5vcGFjaXR5JiYoZC5vcGFjaXR5PWEub3BhY2l0eSk7dm9pZCAwIT09YS50cmFuc3BhcmVudCYmKGQudHJhbnNwYXJlbnQ9YS50cmFuc3BhcmVudCk7dm9pZCAwIT09YS5hbHBoYVRlc3QmJihkLmFscGhhVGVzdD1hLmFscGhhVGVzdCk7dm9pZCAwIT09YS5kZXB0aFRlc3QmJihkLmRlcHRoVGVzdD1hLmRlcHRoVGVzdCk7dm9pZCAwIT09YS5kZXB0aFdyaXRlJiYoZC5kZXB0aFdyaXRlPWEuZGVwdGhXcml0ZSk7dm9pZCAwIT09YS5jb2xvcldyaXRlJiYoZC5jb2xvcldyaXRlPWEuY29sb3JXcml0ZSk7dm9pZCAwIT09YS53aXJlZnJhbWUmJihkLndpcmVmcmFtZT1hLndpcmVmcmFtZSk7dm9pZCAwIT09YS53aXJlZnJhbWVMaW5ld2lkdGgmJihkLndpcmVmcmFtZUxpbmV3aWR0aD1hLndpcmVmcmFtZUxpbmV3aWR0aCk7dm9pZCAwIT09CmEud2lyZWZyYW1lTGluZWNhcCYmKGQud2lyZWZyYW1lTGluZWNhcD1hLndpcmVmcmFtZUxpbmVjYXApO3ZvaWQgMCE9PWEud2lyZWZyYW1lTGluZWpvaW4mJihkLndpcmVmcmFtZUxpbmVqb2luPWEud2lyZWZyYW1lTGluZWpvaW4pO3ZvaWQgMCE9PWEuc2tpbm5pbmcmJihkLnNraW5uaW5nPWEuc2tpbm5pbmcpO3ZvaWQgMCE9PWEubW9ycGhUYXJnZXRzJiYoZC5tb3JwaFRhcmdldHM9YS5tb3JwaFRhcmdldHMpO3ZvaWQgMCE9PWEuc2l6ZSYmKGQuc2l6ZT1hLnNpemUpO3ZvaWQgMCE9PWEuc2l6ZUF0dGVudWF0aW9uJiYoZC5zaXplQXR0ZW51YXRpb249YS5zaXplQXR0ZW51YXRpb24pO3ZvaWQgMCE9PWEubWFwJiYoZC5tYXA9YihhLm1hcCkpO3ZvaWQgMCE9PWEuYWxwaGFNYXAmJihkLmFscGhhTWFwPWIoYS5hbHBoYU1hcCksZC50cmFuc3BhcmVudD0hMCk7dm9pZCAwIT09YS5idW1wTWFwJiYoZC5idW1wTWFwPWIoYS5idW1wTWFwKSk7dm9pZCAwIT09YS5idW1wU2NhbGUmJihkLmJ1bXBTY2FsZT0KYS5idW1wU2NhbGUpO3ZvaWQgMCE9PWEubm9ybWFsTWFwJiYoZC5ub3JtYWxNYXA9YihhLm5vcm1hbE1hcCkpO2lmKHZvaWQgMCE9PWEubm9ybWFsU2NhbGUpe3ZhciBlPWEubm9ybWFsU2NhbGU7ITE9PT1BcnJheS5pc0FycmF5KGUpJiYoZT1bZSxlXSk7ZC5ub3JtYWxTY2FsZT0obmV3IEQpLmZyb21BcnJheShlKX12b2lkIDAhPT1hLmRpc3BsYWNlbWVudE1hcCYmKGQuZGlzcGxhY2VtZW50TWFwPWIoYS5kaXNwbGFjZW1lbnRNYXApKTt2b2lkIDAhPT1hLmRpc3BsYWNlbWVudFNjYWxlJiYoZC5kaXNwbGFjZW1lbnRTY2FsZT1hLmRpc3BsYWNlbWVudFNjYWxlKTt2b2lkIDAhPT1hLmRpc3BsYWNlbWVudEJpYXMmJihkLmRpc3BsYWNlbWVudEJpYXM9YS5kaXNwbGFjZW1lbnRCaWFzKTt2b2lkIDAhPT1hLnJvdWdobmVzc01hcCYmKGQucm91Z2huZXNzTWFwPWIoYS5yb3VnaG5lc3NNYXApKTt2b2lkIDAhPT1hLm1ldGFsbmVzc01hcCYmKGQubWV0YWxuZXNzTWFwPWIoYS5tZXRhbG5lc3NNYXApKTsKdm9pZCAwIT09YS5lbWlzc2l2ZU1hcCYmKGQuZW1pc3NpdmVNYXA9YihhLmVtaXNzaXZlTWFwKSk7dm9pZCAwIT09YS5lbWlzc2l2ZUludGVuc2l0eSYmKGQuZW1pc3NpdmVJbnRlbnNpdHk9YS5lbWlzc2l2ZUludGVuc2l0eSk7dm9pZCAwIT09YS5zcGVjdWxhck1hcCYmKGQuc3BlY3VsYXJNYXA9YihhLnNwZWN1bGFyTWFwKSk7dm9pZCAwIT09YS5lbnZNYXAmJihkLmVudk1hcD1iKGEuZW52TWFwKSk7dm9pZCAwIT09YS5yZWZsZWN0aXZpdHkmJihkLnJlZmxlY3Rpdml0eT1hLnJlZmxlY3Rpdml0eSk7dm9pZCAwIT09YS5saWdodE1hcCYmKGQubGlnaHRNYXA9YihhLmxpZ2h0TWFwKSk7dm9pZCAwIT09YS5saWdodE1hcEludGVuc2l0eSYmKGQubGlnaHRNYXBJbnRlbnNpdHk9YS5saWdodE1hcEludGVuc2l0eSk7dm9pZCAwIT09YS5hb01hcCYmKGQuYW9NYXA9YihhLmFvTWFwKSk7dm9pZCAwIT09YS5hb01hcEludGVuc2l0eSYmKGQuYW9NYXBJbnRlbnNpdHk9YS5hb01hcEludGVuc2l0eSk7CnZvaWQgMCE9PWEuZ3JhZGllbnRNYXAmJihkLmdyYWRpZW50TWFwPWIoYS5ncmFkaWVudE1hcCkpO3JldHVybiBkfX0pO09iamVjdC5hc3NpZ24oYmUucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMsZj1uZXcgdWEoZS5tYW5hZ2VyKTtmLnNldFJlc3BvbnNlVHlwZSgianNvbiIpO2YubG9hZChhLGZ1bmN0aW9uKGEpe2IoZS5wYXJzZShhKSl9LGMsZCl9LHBhcnNlOmZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBJLGM9YS5kYXRhLmluZGV4O3ZvaWQgMCE9PWMmJihjPW5ldyBmZltjLnR5cGVdKGMuYXJyYXkpLGIuc2V0SW5kZXgobmV3IEwoYywxKSkpO3ZhciBkPWEuZGF0YS5hdHRyaWJ1dGVzLGU7Zm9yKGUgaW4gZCl7dmFyIGY9ZFtlXSxjPW5ldyBmZltmLnR5cGVdKGYuYXJyYXkpO2IuYWRkQXR0cmlidXRlKGUsbmV3IEwoYyxmLml0ZW1TaXplLGYubm9ybWFsaXplZCkpfWU9YS5kYXRhLmdyb3Vwc3x8YS5kYXRhLmRyYXdjYWxsc3x8YS5kYXRhLm9mZnNldHM7CmlmKHZvaWQgMCE9PWUpZm9yKGM9MCxkPWUubGVuZ3RoO2MhPT1kOysrYylmPWVbY10sYi5hZGRHcm91cChmLnN0YXJ0LGYuY291bnQsZi5tYXRlcmlhbEluZGV4KTthPWEuZGF0YS5ib3VuZGluZ1NwaGVyZTt2b2lkIDAhPT1hJiYoZT1uZXcgcCx2b2lkIDAhPT1hLmNlbnRlciYmZS5mcm9tQXJyYXkoYS5jZW50ZXIpLGIuYm91bmRpbmdTcGhlcmU9bmV3IEdhKGUsYS5yYWRpdXMpKTtyZXR1cm4gYn19KTt2YXIgZmY9e0ludDhBcnJheTpJbnQ4QXJyYXksVWludDhBcnJheTpVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5OlVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXk6SW50MTZBcnJheSxVaW50MTZBcnJheTpVaW50MTZBcnJheSxJbnQzMkFycmF5OkludDMyQXJyYXksVWludDMyQXJyYXk6VWludDMyQXJyYXksRmxvYXQzMkFycmF5OkZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXk6RmxvYXQ2NEFycmF5fTtnYy5IYW5kbGVycz17aGFuZGxlcnM6W10sYWRkOmZ1bmN0aW9uKGEsYil7dGhpcy5oYW5kbGVycy5wdXNoKGEsCmIpfSxnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuaGFuZGxlcnMsYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrPTIpe3ZhciBlPWJbYysxXTtpZihiW2NdLnRlc3QoYSkpcmV0dXJuIGV9cmV0dXJuIG51bGx9fTtPYmplY3QuYXNzaWduKGdjLnByb3RvdHlwZSx7Y3Jvc3NPcmlnaW46dm9pZCAwLGV4dHJhY3RVcmxCYXNlOmZ1bmN0aW9uKGEpe2E9YS5zcGxpdCgiLyIpO2lmKDE9PT1hLmxlbmd0aClyZXR1cm4iLi8iO2EucG9wKCk7cmV0dXJuIGEuam9pbigiLyIpKyIvIn0saW5pdE1hdGVyaWFsczpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPVtdLGU9MDtlPGEubGVuZ3RoOysrZSlkW2VdPXRoaXMuY3JlYXRlTWF0ZXJpYWwoYVtlXSxiLGMpO3JldHVybiBkfSxjcmVhdGVNYXRlcmlhbDpmdW5jdGlvbigpe3ZhciBhPXtOb0JsZW5kaW5nOjAsTm9ybWFsQmxlbmRpbmc6MSxBZGRpdGl2ZUJsZW5kaW5nOjIsU3VidHJhY3RpdmVCbGVuZGluZzozLE11bHRpcGx5QmxlbmRpbmc6NCxDdXN0b21CbGVuZGluZzo1fSwKYj1uZXcgSCxjPW5ldyBzZCxkPW5ldyBIZDtyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe2Z1bmN0aW9uIGgoYSxiLGQsZSxoKXthPWYrYTt2YXIgbT1nYy5IYW5kbGVycy5nZXQoYSk7bnVsbCE9PW0/YT1tLmxvYWQoYSk6KGMuc2V0Q3Jvc3NPcmlnaW4oZyksYT1jLmxvYWQoYSkpO3ZvaWQgMCE9PWImJihhLnJlcGVhdC5mcm9tQXJyYXkoYiksMSE9PWJbMF0mJihhLndyYXBTPTFFMyksMSE9PWJbMV0mJihhLndyYXBUPTFFMykpO3ZvaWQgMCE9PWQmJmEub2Zmc2V0LmZyb21BcnJheShkKTt2b2lkIDAhPT1lJiYoInJlcGVhdCI9PT1lWzBdJiYoYS53cmFwUz0xRTMpLCJtaXJyb3IiPT09ZVswXSYmKGEud3JhcFM9MTAwMiksInJlcGVhdCI9PT1lWzFdJiYoYS53cmFwVD0xRTMpLCJtaXJyb3IiPT09ZVsxXSYmKGEud3JhcFQ9MTAwMikpO3ZvaWQgMCE9PWgmJihhLmFuaXNvdHJvcHk9aCk7Yj1ZLmdlbmVyYXRlVVVJRCgpO2tbYl09YTtyZXR1cm4gYn12YXIgaz17fSxtPXt1dWlkOlkuZ2VuZXJhdGVVVUlEKCksCnR5cGU6Ik1lc2hMYW1iZXJ0TWF0ZXJpYWwifSxsO2ZvcihsIGluIGUpe3ZhciBxPWVbbF07c3dpdGNoKGwpe2Nhc2UgIkRiZ0NvbG9yIjpjYXNlICJEYmdJbmRleCI6Y2FzZSAib3B0aWNhbERlbnNpdHkiOmNhc2UgImlsbHVtaW5hdGlvbiI6YnJlYWs7Y2FzZSAiRGJnTmFtZSI6bS5uYW1lPXE7YnJlYWs7Y2FzZSAiYmxlbmRpbmciOm0uYmxlbmRpbmc9YVtxXTticmVhaztjYXNlICJjb2xvckFtYmllbnQiOmNhc2UgIm1hcEFtYmllbnQiOmNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyLmNyZWF0ZU1hdGVyaWFsOiIsbCwiaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4iKTticmVhaztjYXNlICJjb2xvckRpZmZ1c2UiOm0uY29sb3I9Yi5mcm9tQXJyYXkocSkuZ2V0SGV4KCk7YnJlYWs7Y2FzZSAiY29sb3JTcGVjdWxhciI6bS5zcGVjdWxhcj1iLmZyb21BcnJheShxKS5nZXRIZXgoKTticmVhaztjYXNlICJjb2xvckVtaXNzaXZlIjptLmVtaXNzaXZlPWIuZnJvbUFycmF5KHEpLmdldEhleCgpOwpicmVhaztjYXNlICJzcGVjdWxhckNvZWYiOm0uc2hpbmluZXNzPXE7YnJlYWs7Y2FzZSAic2hhZGluZyI6ImJhc2ljIj09PXEudG9Mb3dlckNhc2UoKSYmKG0udHlwZT0iTWVzaEJhc2ljTWF0ZXJpYWwiKTsicGhvbmciPT09cS50b0xvd2VyQ2FzZSgpJiYobS50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIpOyJzdGFuZGFyZCI9PT1xLnRvTG93ZXJDYXNlKCkmJihtLnR5cGU9Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIik7YnJlYWs7Y2FzZSAibWFwRGlmZnVzZSI6bS5tYXA9aChxLGUubWFwRGlmZnVzZVJlcGVhdCxlLm1hcERpZmZ1c2VPZmZzZXQsZS5tYXBEaWZmdXNlV3JhcCxlLm1hcERpZmZ1c2VBbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBEaWZmdXNlUmVwZWF0IjpjYXNlICJtYXBEaWZmdXNlT2Zmc2V0IjpjYXNlICJtYXBEaWZmdXNlV3JhcCI6Y2FzZSAibWFwRGlmZnVzZUFuaXNvdHJvcHkiOmJyZWFrO2Nhc2UgIm1hcEVtaXNzaXZlIjptLmVtaXNzaXZlTWFwPWgocSxlLm1hcEVtaXNzaXZlUmVwZWF0LAplLm1hcEVtaXNzaXZlT2Zmc2V0LGUubWFwRW1pc3NpdmVXcmFwLGUubWFwRW1pc3NpdmVBbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBFbWlzc2l2ZVJlcGVhdCI6Y2FzZSAibWFwRW1pc3NpdmVPZmZzZXQiOmNhc2UgIm1hcEVtaXNzaXZlV3JhcCI6Y2FzZSAibWFwRW1pc3NpdmVBbmlzb3Ryb3B5IjpicmVhaztjYXNlICJtYXBMaWdodCI6bS5saWdodE1hcD1oKHEsZS5tYXBMaWdodFJlcGVhdCxlLm1hcExpZ2h0T2Zmc2V0LGUubWFwTGlnaHRXcmFwLGUubWFwTGlnaHRBbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBMaWdodFJlcGVhdCI6Y2FzZSAibWFwTGlnaHRPZmZzZXQiOmNhc2UgIm1hcExpZ2h0V3JhcCI6Y2FzZSAibWFwTGlnaHRBbmlzb3Ryb3B5IjpicmVhaztjYXNlICJtYXBBTyI6bS5hb01hcD1oKHEsZS5tYXBBT1JlcGVhdCxlLm1hcEFPT2Zmc2V0LGUubWFwQU9XcmFwLGUubWFwQU9Bbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBBT1JlcGVhdCI6Y2FzZSAibWFwQU9PZmZzZXQiOmNhc2UgIm1hcEFPV3JhcCI6Y2FzZSAibWFwQU9Bbmlzb3Ryb3B5IjpicmVhazsKY2FzZSAibWFwQnVtcCI6bS5idW1wTWFwPWgocSxlLm1hcEJ1bXBSZXBlYXQsZS5tYXBCdW1wT2Zmc2V0LGUubWFwQnVtcFdyYXAsZS5tYXBCdW1wQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwQnVtcFNjYWxlIjptLmJ1bXBTY2FsZT1xO2JyZWFrO2Nhc2UgIm1hcEJ1bXBSZXBlYXQiOmNhc2UgIm1hcEJ1bXBPZmZzZXQiOmNhc2UgIm1hcEJ1bXBXcmFwIjpjYXNlICJtYXBCdW1wQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwTm9ybWFsIjptLm5vcm1hbE1hcD1oKHEsZS5tYXBOb3JtYWxSZXBlYXQsZS5tYXBOb3JtYWxPZmZzZXQsZS5tYXBOb3JtYWxXcmFwLGUubWFwTm9ybWFsQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwTm9ybWFsRmFjdG9yIjptLm5vcm1hbFNjYWxlPVtxLHFdO2JyZWFrO2Nhc2UgIm1hcE5vcm1hbFJlcGVhdCI6Y2FzZSAibWFwTm9ybWFsT2Zmc2V0IjpjYXNlICJtYXBOb3JtYWxXcmFwIjpjYXNlICJtYXBOb3JtYWxBbmlzb3Ryb3B5IjpicmVhaztjYXNlICJtYXBTcGVjdWxhciI6bS5zcGVjdWxhck1hcD0KaChxLGUubWFwU3BlY3VsYXJSZXBlYXQsZS5tYXBTcGVjdWxhck9mZnNldCxlLm1hcFNwZWN1bGFyV3JhcCxlLm1hcFNwZWN1bGFyQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwU3BlY3VsYXJSZXBlYXQiOmNhc2UgIm1hcFNwZWN1bGFyT2Zmc2V0IjpjYXNlICJtYXBTcGVjdWxhcldyYXAiOmNhc2UgIm1hcFNwZWN1bGFyQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwTWV0YWxuZXNzIjptLm1ldGFsbmVzc01hcD1oKHEsZS5tYXBNZXRhbG5lc3NSZXBlYXQsZS5tYXBNZXRhbG5lc3NPZmZzZXQsZS5tYXBNZXRhbG5lc3NXcmFwLGUubWFwTWV0YWxuZXNzQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwTWV0YWxuZXNzUmVwZWF0IjpjYXNlICJtYXBNZXRhbG5lc3NPZmZzZXQiOmNhc2UgIm1hcE1ldGFsbmVzc1dyYXAiOmNhc2UgIm1hcE1ldGFsbmVzc0FuaXNvdHJvcHkiOmJyZWFrO2Nhc2UgIm1hcFJvdWdobmVzcyI6bS5yb3VnaG5lc3NNYXA9aChxLGUubWFwUm91Z2huZXNzUmVwZWF0LAplLm1hcFJvdWdobmVzc09mZnNldCxlLm1hcFJvdWdobmVzc1dyYXAsZS5tYXBSb3VnaG5lc3NBbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBSb3VnaG5lc3NSZXBlYXQiOmNhc2UgIm1hcFJvdWdobmVzc09mZnNldCI6Y2FzZSAibWFwUm91Z2huZXNzV3JhcCI6Y2FzZSAibWFwUm91Z2huZXNzQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwQWxwaGEiOm0uYWxwaGFNYXA9aChxLGUubWFwQWxwaGFSZXBlYXQsZS5tYXBBbHBoYU9mZnNldCxlLm1hcEFscGhhV3JhcCxlLm1hcEFscGhhQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwQWxwaGFSZXBlYXQiOmNhc2UgIm1hcEFscGhhT2Zmc2V0IjpjYXNlICJtYXBBbHBoYVdyYXAiOmNhc2UgIm1hcEFscGhhQW5pc290cm9weSI6YnJlYWs7Y2FzZSAiZmxpcFNpZGVkIjptLnNpZGU9MTticmVhaztjYXNlICJkb3VibGVTaWRlZCI6bS5zaWRlPTI7YnJlYWs7Y2FzZSAidHJhbnNwYXJlbmN5Ijpjb25zb2xlLndhcm4oIlRIUkVFLkxvYWRlci5jcmVhdGVNYXRlcmlhbDogdHJhbnNwYXJlbmN5IGhhcyBiZWVuIHJlbmFtZWQgdG8gb3BhY2l0eSIpOwptLm9wYWNpdHk9cTticmVhaztjYXNlICJkZXB0aFRlc3QiOmNhc2UgImRlcHRoV3JpdGUiOmNhc2UgImNvbG9yV3JpdGUiOmNhc2UgIm9wYWNpdHkiOmNhc2UgInJlZmxlY3Rpdml0eSI6Y2FzZSAidHJhbnNwYXJlbnQiOmNhc2UgInZpc2libGUiOmNhc2UgIndpcmVmcmFtZSI6bVtsXT1xO2JyZWFrO2Nhc2UgInZlcnRleENvbG9ycyI6ITA9PT1xJiYobS52ZXJ0ZXhDb2xvcnM9Mik7ImZhY2UiPT09cSYmKG0udmVydGV4Q29sb3JzPTEpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyLmNyZWF0ZU1hdGVyaWFsOiBVbnN1cHBvcnRlZCIsbCxxKX19Ik1lc2hCYXNpY01hdGVyaWFsIj09PW0udHlwZSYmZGVsZXRlIG0uZW1pc3NpdmU7Ik1lc2hQaG9uZ01hdGVyaWFsIiE9PW0udHlwZSYmZGVsZXRlIG0uc3BlY3VsYXI7MT5tLm9wYWNpdHkmJihtLnRyYW5zcGFyZW50PSEwKTtkLnNldFRleHR1cmVzKGspO3JldHVybiBkLnBhcnNlKG0pfX0oKX0pO09iamVjdC5hc3NpZ24oY2UucHJvdG90eXBlLAp7bG9hZDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLGY9dGhpcy50ZXh0dXJlUGF0aCYmInN0cmluZyI9PT10eXBlb2YgdGhpcy50ZXh0dXJlUGF0aD90aGlzLnRleHR1cmVQYXRoOmdjLnByb3RvdHlwZS5leHRyYWN0VXJsQmFzZShhKSxnPW5ldyB1YSh0aGlzLm1hbmFnZXIpO2cuc2V0UmVzcG9uc2VUeXBlKCJqc29uIik7Zy5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpO2cubG9hZChhLGZ1bmN0aW9uKGMpe3ZhciBkPWMubWV0YWRhdGE7aWYodm9pZCAwIT09ZCYmKGQ9ZC50eXBlLHZvaWQgMCE9PWQpKXtpZigib2JqZWN0Ij09PWQudG9Mb3dlckNhc2UoKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuSlNPTkxvYWRlcjogIithKyIgc2hvdWxkIGJlIGxvYWRlZCB3aXRoIFRIUkVFLk9iamVjdExvYWRlciBpbnN0ZWFkLiIpO3JldHVybn1pZigic2NlbmUiPT09ZC50b0xvd2VyQ2FzZSgpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5KU09OTG9hZGVyOiAiK2ErCiIgc2hvdWxkIGJlIGxvYWRlZCB3aXRoIFRIUkVFLlNjZW5lTG9hZGVyIGluc3RlYWQuIik7cmV0dXJufX1jPWUucGFyc2UoYyxmKTtiKGMuZ2VvbWV0cnksYy5tYXRlcmlhbHMpfSxjLGQpfSxzZXRUZXh0dXJlUGF0aDpmdW5jdGlvbihhKXt0aGlzLnRleHR1cmVQYXRoPWF9LHBhcnNlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGEsYil7dm9pZCAwIT09YS5kYXRhJiYoYT1hLmRhdGEpO2Euc2NhbGU9dm9pZCAwIT09YS5zY2FsZT8xL2Euc2NhbGU6MTt2YXIgYz1uZXcgTSxkPWEsZSxmLGcsaCxrLG0sbCxxLG4scix6LHQseSx4LHY9ZC5mYWNlcztuPWQudmVydGljZXM7dmFyIEc9ZC5ub3JtYWxzLHc9ZC5jb2xvcnM7bT1kLnNjYWxlO3ZhciBCPTA7aWYodm9pZCAwIT09ZC51dnMpe2ZvcihlPTA7ZTxkLnV2cy5sZW5ndGg7ZSsrKWQudXZzW2VdLmxlbmd0aCYmQisrO2ZvcihlPTA7ZTxCO2UrKyljLmZhY2VWZXJ0ZXhVdnNbZV09W119aD0wO2ZvcihrPW4ubGVuZ3RoO2g8azspZT0KbmV3IHAsZS54PW5baCsrXSptLGUueT1uW2grK10qbSxlLno9bltoKytdKm0sYy52ZXJ0aWNlcy5wdXNoKGUpO2g9MDtmb3Ioaz12Lmxlbmd0aDtoPGs7KWlmKG49dltoKytdLHI9biYxLGc9biYyLGU9biY4LGw9biYxNix6PW4mMzIsbT1uJjY0LG4mPTEyOCxyKXtyPW5ldyBWYTtyLmE9dltoXTtyLmI9dltoKzFdO3IuYz12W2grM107dD1uZXcgVmE7dC5hPXZbaCsxXTt0LmI9dltoKzJdO3QuYz12W2grM107aCs9NDtnJiYoZz12W2grK10sci5tYXRlcmlhbEluZGV4PWcsdC5tYXRlcmlhbEluZGV4PWcpO2c9Yy5mYWNlcy5sZW5ndGg7aWYoZSlmb3IoZT0wO2U8QjtlKyspZm9yKHk9ZC51dnNbZV0sYy5mYWNlVmVydGV4VXZzW2VdW2ddPVtdLGMuZmFjZVZlcnRleFV2c1tlXVtnKzFdPVtdLGY9MDs0PmY7ZisrKXE9dltoKytdLHg9eVsyKnFdLHE9eVsyKnErMV0seD1uZXcgRCh4LHEpLDIhPT1mJiZjLmZhY2VWZXJ0ZXhVdnNbZV1bZ10ucHVzaCh4KSwwIT09ZiYmYy5mYWNlVmVydGV4VXZzW2VdW2crCjFdLnB1c2goeCk7bCYmKGw9Myp2W2grK10sci5ub3JtYWwuc2V0KEdbbCsrXSxHW2wrK10sR1tsXSksdC5ub3JtYWwuY29weShyLm5vcm1hbCkpO2lmKHopZm9yKGU9MDs0PmU7ZSsrKWw9Myp2W2grK10sej1uZXcgcChHW2wrK10sR1tsKytdLEdbbF0pLDIhPT1lJiZyLnZlcnRleE5vcm1hbHMucHVzaCh6KSwwIT09ZSYmdC52ZXJ0ZXhOb3JtYWxzLnB1c2goeik7bSYmKG09dltoKytdLG09d1ttXSxyLmNvbG9yLnNldEhleChtKSx0LmNvbG9yLnNldEhleChtKSk7aWYobilmb3IoZT0wOzQ+ZTtlKyspbT12W2grK10sbT13W21dLDIhPT1lJiZyLnZlcnRleENvbG9ycy5wdXNoKG5ldyBIKG0pKSwwIT09ZSYmdC52ZXJ0ZXhDb2xvcnMucHVzaChuZXcgSChtKSk7Yy5mYWNlcy5wdXNoKHIpO2MuZmFjZXMucHVzaCh0KX1lbHNle3I9bmV3IFZhO3IuYT12W2grK107ci5iPXZbaCsrXTtyLmM9dltoKytdO2cmJihnPXZbaCsrXSxyLm1hdGVyaWFsSW5kZXg9Zyk7Zz1jLmZhY2VzLmxlbmd0aDsKaWYoZSlmb3IoZT0wO2U8QjtlKyspZm9yKHk9ZC51dnNbZV0sYy5mYWNlVmVydGV4VXZzW2VdW2ddPVtdLGY9MDszPmY7ZisrKXE9dltoKytdLHg9eVsyKnFdLHE9eVsyKnErMV0seD1uZXcgRCh4LHEpLGMuZmFjZVZlcnRleFV2c1tlXVtnXS5wdXNoKHgpO2wmJihsPTMqdltoKytdLHIubm9ybWFsLnNldChHW2wrK10sR1tsKytdLEdbbF0pKTtpZih6KWZvcihlPTA7Mz5lO2UrKylsPTMqdltoKytdLHo9bmV3IHAoR1tsKytdLEdbbCsrXSxHW2xdKSxyLnZlcnRleE5vcm1hbHMucHVzaCh6KTttJiYobT12W2grK10sci5jb2xvci5zZXRIZXgod1ttXSkpO2lmKG4pZm9yKGU9MDszPmU7ZSsrKW09dltoKytdLHIudmVydGV4Q29sb3JzLnB1c2gobmV3IEgod1ttXSkpO2MuZmFjZXMucHVzaChyKX1kPWE7aD12b2lkIDAhPT1kLmluZmx1ZW5jZXNQZXJWZXJ0ZXg/ZC5pbmZsdWVuY2VzUGVyVmVydGV4OjI7aWYoZC5za2luV2VpZ2h0cylmb3Ioaz0wLHY9ZC5za2luV2VpZ2h0cy5sZW5ndGg7azwKdjtrKz1oKWMuc2tpbldlaWdodHMucHVzaChuZXcgZ2EoZC5za2luV2VpZ2h0c1trXSwxPGg/ZC5za2luV2VpZ2h0c1trKzFdOjAsMjxoP2Quc2tpbldlaWdodHNbaysyXTowLDM8aD9kLnNraW5XZWlnaHRzW2srM106MCkpO2lmKGQuc2tpbkluZGljZXMpZm9yKGs9MCx2PWQuc2tpbkluZGljZXMubGVuZ3RoO2s8djtrKz1oKWMuc2tpbkluZGljZXMucHVzaChuZXcgZ2EoZC5za2luSW5kaWNlc1trXSwxPGg/ZC5za2luSW5kaWNlc1trKzFdOjAsMjxoP2Quc2tpbkluZGljZXNbaysyXTowLDM8aD9kLnNraW5JbmRpY2VzW2srM106MCkpO2MuYm9uZXM9ZC5ib25lcztjLmJvbmVzJiYwPGMuYm9uZXMubGVuZ3RoJiYoYy5za2luV2VpZ2h0cy5sZW5ndGghPT1jLnNraW5JbmRpY2VzLmxlbmd0aHx8Yy5za2luSW5kaWNlcy5sZW5ndGghPT1jLnZlcnRpY2VzLmxlbmd0aCkmJmNvbnNvbGUud2FybigiV2hlbiBza2lubmluZywgbnVtYmVyIG9mIHZlcnRpY2VzICgiK2MudmVydGljZXMubGVuZ3RoKwoiKSwgc2tpbkluZGljZXMgKCIrYy5za2luSW5kaWNlcy5sZW5ndGgrIiksIGFuZCBza2luV2VpZ2h0cyAoIitjLnNraW5XZWlnaHRzLmxlbmd0aCsiKSBzaG91bGQgbWF0Y2guIik7az1hO3Y9ay5zY2FsZTtpZih2b2lkIDAhPT1rLm1vcnBoVGFyZ2V0cylmb3IoZD0wLGg9ay5tb3JwaFRhcmdldHMubGVuZ3RoO2Q8aDtkKyspZm9yKGMubW9ycGhUYXJnZXRzW2RdPXt9LGMubW9ycGhUYXJnZXRzW2RdLm5hbWU9ay5tb3JwaFRhcmdldHNbZF0ubmFtZSxjLm1vcnBoVGFyZ2V0c1tkXS52ZXJ0aWNlcz1bXSxHPWMubW9ycGhUYXJnZXRzW2RdLnZlcnRpY2VzLHc9ay5tb3JwaFRhcmdldHNbZF0udmVydGljZXMsQj0wLG49dy5sZW5ndGg7QjxuO0IrPTMpbT1uZXcgcCxtLng9d1tCXSp2LG0ueT13W0IrMV0qdixtLno9d1tCKzJdKnYsRy5wdXNoKG0pO2lmKHZvaWQgMCE9PWsubW9ycGhDb2xvcnMmJjA8ay5tb3JwaENvbG9ycy5sZW5ndGgpZm9yKGNvbnNvbGUud2FybignVEhSRUUuSlNPTkxvYWRlcjogIm1vcnBoQ29sb3JzIiBubyBsb25nZXIgc3VwcG9ydGVkLiBVc2luZyB0aGVtIGFzIGZhY2UgY29sb3JzLicpLAp2PWMuZmFjZXMsaz1rLm1vcnBoQ29sb3JzWzBdLmNvbG9ycyxkPTAsaD12Lmxlbmd0aDtkPGg7ZCsrKXZbZF0uY29sb3IuZnJvbUFycmF5KGssMypkKTtrPWE7ZD1bXTtoPVtdO3ZvaWQgMCE9PWsuYW5pbWF0aW9uJiZoLnB1c2goay5hbmltYXRpb24pO3ZvaWQgMCE9PWsuYW5pbWF0aW9ucyYmKGsuYW5pbWF0aW9ucy5sZW5ndGg/aD1oLmNvbmNhdChrLmFuaW1hdGlvbnMpOmgucHVzaChrLmFuaW1hdGlvbnMpKTtmb3Ioaz0wO2s8aC5sZW5ndGg7aysrKSh2PUJhLnBhcnNlQW5pbWF0aW9uKGhba10sYy5ib25lcykpJiZkLnB1c2godik7Yy5tb3JwaFRhcmdldHMmJihoPUJhLkNyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKGMubW9ycGhUYXJnZXRzLDEwKSxkPWQuY29uY2F0KGgpKTswPGQubGVuZ3RoJiYoYy5hbmltYXRpb25zPWQpO2MuY29tcHV0ZUZhY2VOb3JtYWxzKCk7Yy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtpZih2b2lkIDA9PT1hLm1hdGVyaWFsc3x8MD09PQphLm1hdGVyaWFscy5sZW5ndGgpcmV0dXJue2dlb21ldHJ5OmN9O2Q9Z2MucHJvdG90eXBlLmluaXRNYXRlcmlhbHMoYS5tYXRlcmlhbHMsYix0aGlzLmNyb3NzT3JpZ2luKTtyZXR1cm57Z2VvbWV0cnk6YyxtYXRlcmlhbHM6ZH19fSgpfSk7T2JqZWN0LmFzc2lnbihSZS5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYSxiLGMsZCl7IiI9PT10aGlzLnRleHR1cmVQYXRoJiYodGhpcy50ZXh0dXJlUGF0aD1hLnN1YnN0cmluZygwLGEubGFzdEluZGV4T2YoIi8iKSsxKSk7dmFyIGU9dGhpczsobmV3IHVhKGUubWFuYWdlcikpLmxvYWQoYSxmdW5jdGlvbihjKXt2YXIgZz1udWxsO3RyeXtnPUpTT04ucGFyc2UoYyl9Y2F0Y2goaCl7dm9pZCAwIT09ZCYmZChoKTtjb25zb2xlLmVycm9yKCJUSFJFRTpPYmplY3RMb2FkZXI6IENhbid0IHBhcnNlICIrYSsiLiIsaC5tZXNzYWdlKTtyZXR1cm59Yz1nLm1ldGFkYXRhO3ZvaWQgMD09PWN8fHZvaWQgMD09PWMudHlwZXx8Imdlb21ldHJ5Ij09PWMudHlwZS50b0xvd2VyQ2FzZSgpPwpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3RMb2FkZXI6IENhbid0IGxvYWQgIithKyIuIFVzZSBUSFJFRS5KU09OTG9hZGVyIGluc3RlYWQuIik6ZS5wYXJzZShnLGIpfSxjLGQpfSxzZXRUZXh0dXJlUGF0aDpmdW5jdGlvbihhKXt0aGlzLnRleHR1cmVQYXRoPWF9LHNldENyb3NzT3JpZ2luOmZ1bmN0aW9uKGEpe3RoaXMuY3Jvc3NPcmlnaW49YX0scGFyc2U6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLnBhcnNlR2VvbWV0cmllcyhhLmdlb21ldHJpZXMpLGQ9dGhpcy5wYXJzZUltYWdlcyhhLmltYWdlcyxmdW5jdGlvbigpe3ZvaWQgMCE9PWImJmIoZSl9KSxkPXRoaXMucGFyc2VUZXh0dXJlcyhhLnRleHR1cmVzLGQpLGQ9dGhpcy5wYXJzZU1hdGVyaWFscyhhLm1hdGVyaWFscyxkKSxlPXRoaXMucGFyc2VPYmplY3QoYS5vYmplY3QsYyxkKTthLmFuaW1hdGlvbnMmJihlLmFuaW1hdGlvbnM9dGhpcy5wYXJzZUFuaW1hdGlvbnMoYS5hbmltYXRpb25zKSk7dm9pZCAwIT09YS5pbWFnZXMmJgowIT09YS5pbWFnZXMubGVuZ3RofHx2b2lkIDA9PT1ifHxiKGUpO3JldHVybiBlfSxwYXJzZUdlb21ldHJpZXM6ZnVuY3Rpb24oYSl7dmFyIGI9e307aWYodm9pZCAwIT09YSlmb3IodmFyIGM9bmV3IGNlLGQ9bmV3IGJlLGU9MCxmPWEubGVuZ3RoO2U8ZjtlKyspe3ZhciBnLGg9YVtlXTtzd2l0Y2goaC50eXBlKXtjYXNlICJQbGFuZUdlb21ldHJ5IjpjYXNlICJQbGFuZUJ1ZmZlckdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgud2lkdGgsaC5oZWlnaHQsaC53aWR0aFNlZ21lbnRzLGguaGVpZ2h0U2VnbWVudHMpO2JyZWFrO2Nhc2UgIkJveEdlb21ldHJ5IjpjYXNlICJCb3hCdWZmZXJHZW9tZXRyeSI6Y2FzZSAiQ3ViZUdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgud2lkdGgsaC5oZWlnaHQsaC5kZXB0aCxoLndpZHRoU2VnbWVudHMsaC5oZWlnaHRTZWdtZW50cyxoLmRlcHRoU2VnbWVudHMpO2JyZWFrO2Nhc2UgIkNpcmNsZUdlb21ldHJ5IjpjYXNlICJDaXJjbGVCdWZmZXJHZW9tZXRyeSI6Zz0KbmV3IE1hW2gudHlwZV0oaC5yYWRpdXMsaC5zZWdtZW50cyxoLnRoZXRhU3RhcnQsaC50aGV0YUxlbmd0aCk7YnJlYWs7Y2FzZSAiQ3lsaW5kZXJHZW9tZXRyeSI6Y2FzZSAiQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeSI6Zz1uZXcgTWFbaC50eXBlXShoLnJhZGl1c1RvcCxoLnJhZGl1c0JvdHRvbSxoLmhlaWdodCxoLnJhZGlhbFNlZ21lbnRzLGguaGVpZ2h0U2VnbWVudHMsaC5vcGVuRW5kZWQsaC50aGV0YVN0YXJ0LGgudGhldGFMZW5ndGgpO2JyZWFrO2Nhc2UgIkNvbmVHZW9tZXRyeSI6Y2FzZSAiQ29uZUJ1ZmZlckdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgucmFkaXVzLGguaGVpZ2h0LGgucmFkaWFsU2VnbWVudHMsaC5oZWlnaHRTZWdtZW50cyxoLm9wZW5FbmRlZCxoLnRoZXRhU3RhcnQsaC50aGV0YUxlbmd0aCk7YnJlYWs7Y2FzZSAiU3BoZXJlR2VvbWV0cnkiOmNhc2UgIlNwaGVyZUJ1ZmZlckdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgucmFkaXVzLGgud2lkdGhTZWdtZW50cywKaC5oZWlnaHRTZWdtZW50cyxoLnBoaVN0YXJ0LGgucGhpTGVuZ3RoLGgudGhldGFTdGFydCxoLnRoZXRhTGVuZ3RoKTticmVhaztjYXNlICJEb2RlY2FoZWRyb25HZW9tZXRyeSI6Y2FzZSAiSWNvc2FoZWRyb25HZW9tZXRyeSI6Y2FzZSAiT2N0YWhlZHJvbkdlb21ldHJ5IjpjYXNlICJUZXRyYWhlZHJvbkdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgucmFkaXVzLGguZGV0YWlsKTticmVhaztjYXNlICJSaW5nR2VvbWV0cnkiOmNhc2UgIlJpbmdCdWZmZXJHZW9tZXRyeSI6Zz1uZXcgTWFbaC50eXBlXShoLmlubmVyUmFkaXVzLGgub3V0ZXJSYWRpdXMsaC50aGV0YVNlZ21lbnRzLGgucGhpU2VnbWVudHMsaC50aGV0YVN0YXJ0LGgudGhldGFMZW5ndGgpO2JyZWFrO2Nhc2UgIlRvcnVzR2VvbWV0cnkiOmNhc2UgIlRvcnVzQnVmZmVyR2VvbWV0cnkiOmc9bmV3IE1hW2gudHlwZV0oaC5yYWRpdXMsaC50dWJlLGgucmFkaWFsU2VnbWVudHMsaC50dWJ1bGFyU2VnbWVudHMsaC5hcmMpOwpicmVhaztjYXNlICJUb3J1c0tub3RHZW9tZXRyeSI6Y2FzZSAiVG9ydXNLbm90QnVmZmVyR2VvbWV0cnkiOmc9bmV3IE1hW2gudHlwZV0oaC5yYWRpdXMsaC50dWJlLGgudHVidWxhclNlZ21lbnRzLGgucmFkaWFsU2VnbWVudHMsaC5wLGgucSk7YnJlYWs7Y2FzZSAiTGF0aGVHZW9tZXRyeSI6Y2FzZSAiTGF0aGVCdWZmZXJHZW9tZXRyeSI6Zz1uZXcgTWFbaC50eXBlXShoLnBvaW50cyxoLnNlZ21lbnRzLGgucGhpU3RhcnQsaC5waGlMZW5ndGgpO2JyZWFrO2Nhc2UgIkJ1ZmZlckdlb21ldHJ5IjpnPWQucGFyc2UoaCk7YnJlYWs7Y2FzZSAiR2VvbWV0cnkiOmc9Yy5wYXJzZShoLHRoaXMudGV4dHVyZVBhdGgpLmdlb21ldHJ5O2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCdUSFJFRS5PYmplY3RMb2FkZXI6IFVuc3VwcG9ydGVkIGdlb21ldHJ5IHR5cGUgIicraC50eXBlKyciJyk7Y29udGludWV9Zy51dWlkPWgudXVpZDt2b2lkIDAhPT1oLm5hbWUmJihnLm5hbWU9aC5uYW1lKTsKYltoLnV1aWRdPWd9cmV0dXJuIGJ9LHBhcnNlTWF0ZXJpYWxzOmZ1bmN0aW9uKGEsYil7dmFyIGM9e307aWYodm9pZCAwIT09YSl7dmFyIGQ9bmV3IEhkO2Quc2V0VGV4dHVyZXMoYik7Zm9yKHZhciBlPTAsZj1hLmxlbmd0aDtlPGY7ZSsrKXt2YXIgZz1hW2VdO2lmKCJNdWx0aU1hdGVyaWFsIj09PWcudHlwZSl7Zm9yKHZhciBoPVtdLGs9MDtrPGcubWF0ZXJpYWxzLmxlbmd0aDtrKyspaC5wdXNoKGQucGFyc2UoZy5tYXRlcmlhbHNba10pKTtjW2cudXVpZF09aH1lbHNlIGNbZy51dWlkXT1kLnBhcnNlKGcpfX1yZXR1cm4gY30scGFyc2VBbmltYXRpb25zOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPUJhLnBhcnNlKGFbY10pO2IucHVzaChkKX1yZXR1cm4gYn0scGFyc2VJbWFnZXM6ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2QubWFuYWdlci5pdGVtU3RhcnQoYSk7cmV0dXJuIGcubG9hZChhLGZ1bmN0aW9uKCl7ZC5tYW5hZ2VyLml0ZW1FbmQoYSl9LAp2b2lkIDAsZnVuY3Rpb24oKXtkLm1hbmFnZXIuaXRlbUVuZChhKTtkLm1hbmFnZXIuaXRlbUVycm9yKGEpfSl9dmFyIGQ9dGhpcyxlPXt9O2lmKHZvaWQgMCE9PWEmJjA8YS5sZW5ndGgpe3ZhciBmPW5ldyBaZChiKSxnPW5ldyBWYyhmKTtnLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2Zvcih2YXIgZj0wLGg9YS5sZW5ndGg7ZjxoO2YrKyl7dmFyIGs9YVtmXSxsPS9eKFwvXC8pfChbYS16XSs6KFwvXC8pPykvaS50ZXN0KGsudXJsKT9rLnVybDpkLnRleHR1cmVQYXRoK2sudXJsO2Vbay51dWlkXT1jKGwpfX1yZXR1cm4gZX0scGFyc2VUZXh0dXJlczpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtpZigibnVtYmVyIj09PXR5cGVvZiBhKXJldHVybiBhO2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyLnBhcnNlVGV4dHVyZTogQ29uc3RhbnQgc2hvdWxkIGJlIGluIG51bWVyaWMgZm9ybS4iLGEpO3JldHVybiBiW2FdfXZhciBkPXt9O2lmKHZvaWQgMCE9PQphKWZvcih2YXIgZT0wLGY9YS5sZW5ndGg7ZTxmO2UrKyl7dmFyIGc9YVtlXTt2b2lkIDA9PT1nLmltYWdlJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogTm8gImltYWdlIiBzcGVjaWZpZWQgZm9yJyxnLnV1aWQpO3ZvaWQgMD09PWJbZy5pbWFnZV0mJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgaW1hZ2UiLGcuaW1hZ2UpO3ZhciBoPW5ldyBYKGJbZy5pbWFnZV0pO2gubmVlZHNVcGRhdGU9ITA7aC51dWlkPWcudXVpZDt2b2lkIDAhPT1nLm5hbWUmJihoLm5hbWU9Zy5uYW1lKTt2b2lkIDAhPT1nLm1hcHBpbmcmJihoLm1hcHBpbmc9YyhnLm1hcHBpbmcsbWcpKTt2b2lkIDAhPT1nLm9mZnNldCYmaC5vZmZzZXQuZnJvbUFycmF5KGcub2Zmc2V0KTt2b2lkIDAhPT1nLnJlcGVhdCYmaC5yZXBlYXQuZnJvbUFycmF5KGcucmVwZWF0KTt2b2lkIDAhPT1nLndyYXAmJihoLndyYXBTPWMoZy53cmFwWzBdLGdmKSxoLndyYXBUPWMoZy53cmFwWzFdLApnZikpO3ZvaWQgMCE9PWcubWluRmlsdGVyJiYoaC5taW5GaWx0ZXI9YyhnLm1pbkZpbHRlcixoZikpO3ZvaWQgMCE9PWcubWFnRmlsdGVyJiYoaC5tYWdGaWx0ZXI9YyhnLm1hZ0ZpbHRlcixoZikpO3ZvaWQgMCE9PWcuYW5pc290cm9weSYmKGguYW5pc290cm9weT1nLmFuaXNvdHJvcHkpO3ZvaWQgMCE9PWcuZmxpcFkmJihoLmZsaXBZPWcuZmxpcFkpO2RbZy51dWlkXT1ofXJldHVybiBkfSxwYXJzZU9iamVjdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBKO3JldHVybiBmdW5jdGlvbihiLGMsZCl7ZnVuY3Rpb24gZShhKXt2b2lkIDA9PT1jW2FdJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIGdlb21ldHJ5IixhKTtyZXR1cm4gY1thXX1mdW5jdGlvbiBmKGEpe2lmKHZvaWQgMCE9PWEpe2lmKEFycmF5LmlzQXJyYXkoYSkpe2Zvcih2YXIgYj1bXSxjPTAsZT1hLmxlbmd0aDtjPGU7YysrKXt2YXIgZj1hW2NdO3ZvaWQgMD09PWRbZl0mJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgbWF0ZXJpYWwiLApmKTtiLnB1c2goZFtmXSl9cmV0dXJuIGJ9dm9pZCAwPT09ZFthXSYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBtYXRlcmlhbCIsYSk7cmV0dXJuIGRbYV19fXZhciBnO3N3aXRjaChiLnR5cGUpe2Nhc2UgIlNjZW5lIjpnPW5ldyBtZDt2b2lkIDAhPT1iLmJhY2tncm91bmQmJk51bWJlci5pc0ludGVnZXIoYi5iYWNrZ3JvdW5kKSYmKGcuYmFja2dyb3VuZD1uZXcgSChiLmJhY2tncm91bmQpKTt2b2lkIDAhPT1iLmZvZyYmKCJGb2ciPT09Yi5mb2cudHlwZT9nLmZvZz1uZXcgTGIoYi5mb2cuY29sb3IsYi5mb2cubmVhcixiLmZvZy5mYXIpOiJGb2dFeHAyIj09PWIuZm9nLnR5cGUmJihnLmZvZz1uZXcgS2IoYi5mb2cuY29sb3IsYi5mb2cuZGVuc2l0eSkpKTticmVhaztjYXNlICJQZXJzcGVjdGl2ZUNhbWVyYSI6Zz1uZXcgeGEoYi5mb3YsYi5hc3BlY3QsYi5uZWFyLGIuZmFyKTt2b2lkIDAhPT1iLmZvY3VzJiYoZy5mb2N1cz1iLmZvY3VzKTt2b2lkIDAhPT0KYi56b29tJiYoZy56b29tPWIuem9vbSk7dm9pZCAwIT09Yi5maWxtR2F1Z2UmJihnLmZpbG1HYXVnZT1iLmZpbG1HYXVnZSk7dm9pZCAwIT09Yi5maWxtT2Zmc2V0JiYoZy5maWxtT2Zmc2V0PWIuZmlsbU9mZnNldCk7dm9pZCAwIT09Yi52aWV3JiYoZy52aWV3PU9iamVjdC5hc3NpZ24oe30sYi52aWV3KSk7YnJlYWs7Y2FzZSAiT3J0aG9ncmFwaGljQ2FtZXJhIjpnPW5ldyBKYihiLmxlZnQsYi5yaWdodCxiLnRvcCxiLmJvdHRvbSxiLm5lYXIsYi5mYXIpO2JyZWFrO2Nhc2UgIkFtYmllbnRMaWdodCI6Zz1uZXcgemQoYi5jb2xvcixiLmludGVuc2l0eSk7YnJlYWs7Y2FzZSAiRGlyZWN0aW9uYWxMaWdodCI6Zz1uZXcgeWQoYi5jb2xvcixiLmludGVuc2l0eSk7YnJlYWs7Y2FzZSAiUG9pbnRMaWdodCI6Zz1uZXcgd2QoYi5jb2xvcixiLmludGVuc2l0eSxiLmRpc3RhbmNlLGIuZGVjYXkpO2JyZWFrO2Nhc2UgIlJlY3RBcmVhTGlnaHQiOmc9bmV3IEFkKGIuY29sb3IsYi5pbnRlbnNpdHksCmIud2lkdGgsYi5oZWlnaHQpO2JyZWFrO2Nhc2UgIlNwb3RMaWdodCI6Zz1uZXcgdmQoYi5jb2xvcixiLmludGVuc2l0eSxiLmRpc3RhbmNlLGIuYW5nbGUsYi5wZW51bWJyYSxiLmRlY2F5KTticmVhaztjYXNlICJIZW1pc3BoZXJlTGlnaHQiOmc9bmV3IHRkKGIuY29sb3IsYi5ncm91bmRDb2xvcixiLmludGVuc2l0eSk7YnJlYWs7Y2FzZSAiU2tpbm5lZE1lc2giOmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyLnBhcnNlT2JqZWN0KCkgZG9lcyBub3Qgc3VwcG9ydCBTa2lubmVkTWVzaCB5ZXQuIik7Y2FzZSAiTWVzaCI6Zz1lKGIuZ2VvbWV0cnkpO3ZhciBoPWYoYi5tYXRlcmlhbCk7Zz1nLmJvbmVzJiYwPGcuYm9uZXMubGVuZ3RoP25ldyBvZChnLGgpOm5ldyBDYShnLGgpO2JyZWFrO2Nhc2UgIkxPRCI6Zz1uZXcgQmM7YnJlYWs7Y2FzZSAiTGluZSI6Zz1uZXcgeWEoZShiLmdlb21ldHJ5KSxmKGIubWF0ZXJpYWwpLGIubW9kZSk7YnJlYWs7Y2FzZSAiTGluZUxvb3AiOmc9Cm5ldyBwZChlKGIuZ2VvbWV0cnkpLGYoYi5tYXRlcmlhbCkpO2JyZWFrO2Nhc2UgIkxpbmVTZWdtZW50cyI6Zz1uZXcgZGEoZShiLmdlb21ldHJ5KSxmKGIubWF0ZXJpYWwpKTticmVhaztjYXNlICJQb2ludENsb3VkIjpjYXNlICJQb2ludHMiOmc9bmV3IE1iKGUoYi5nZW9tZXRyeSksZihiLm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSAiU3ByaXRlIjpnPW5ldyBBYyhmKGIubWF0ZXJpYWwpKTticmVhaztjYXNlICJHcm91cCI6Zz1uZXcgRGM7YnJlYWs7ZGVmYXVsdDpnPW5ldyBCfWcudXVpZD1iLnV1aWQ7dm9pZCAwIT09Yi5uYW1lJiYoZy5uYW1lPWIubmFtZSk7dm9pZCAwIT09Yi5tYXRyaXg/KGEuZnJvbUFycmF5KGIubWF0cml4KSxhLmRlY29tcG9zZShnLnBvc2l0aW9uLGcucXVhdGVybmlvbixnLnNjYWxlKSk6KHZvaWQgMCE9PWIucG9zaXRpb24mJmcucG9zaXRpb24uZnJvbUFycmF5KGIucG9zaXRpb24pLHZvaWQgMCE9PWIucm90YXRpb24mJmcucm90YXRpb24uZnJvbUFycmF5KGIucm90YXRpb24pLAp2b2lkIDAhPT1iLnF1YXRlcm5pb24mJmcucXVhdGVybmlvbi5mcm9tQXJyYXkoYi5xdWF0ZXJuaW9uKSx2b2lkIDAhPT1iLnNjYWxlJiZnLnNjYWxlLmZyb21BcnJheShiLnNjYWxlKSk7dm9pZCAwIT09Yi5jYXN0U2hhZG93JiYoZy5jYXN0U2hhZG93PWIuY2FzdFNoYWRvdyk7dm9pZCAwIT09Yi5yZWNlaXZlU2hhZG93JiYoZy5yZWNlaXZlU2hhZG93PWIucmVjZWl2ZVNoYWRvdyk7Yi5zaGFkb3cmJih2b2lkIDAhPT1iLnNoYWRvdy5iaWFzJiYoZy5zaGFkb3cuYmlhcz1iLnNoYWRvdy5iaWFzKSx2b2lkIDAhPT1iLnNoYWRvdy5yYWRpdXMmJihnLnNoYWRvdy5yYWRpdXM9Yi5zaGFkb3cucmFkaXVzKSx2b2lkIDAhPT1iLnNoYWRvdy5tYXBTaXplJiZnLnNoYWRvdy5tYXBTaXplLmZyb21BcnJheShiLnNoYWRvdy5tYXBTaXplKSx2b2lkIDAhPT1iLnNoYWRvdy5jYW1lcmEmJihnLnNoYWRvdy5jYW1lcmE9dGhpcy5wYXJzZU9iamVjdChiLnNoYWRvdy5jYW1lcmEpKSk7dm9pZCAwIT09CmIudmlzaWJsZSYmKGcudmlzaWJsZT1iLnZpc2libGUpO3ZvaWQgMCE9PWIudXNlckRhdGEmJihnLnVzZXJEYXRhPWIudXNlckRhdGEpO2lmKHZvaWQgMCE9PWIuY2hpbGRyZW4pZm9yKHZhciBrIGluIGIuY2hpbGRyZW4pZy5hZGQodGhpcy5wYXJzZU9iamVjdChiLmNoaWxkcmVuW2tdLGMsZCkpO2lmKCJMT0QiPT09Yi50eXBlKWZvcihiPWIubGV2ZWxzLGg9MDtoPGIubGVuZ3RoO2grKyl7dmFyIGw9YltoXTtrPWcuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgidXVpZCIsbC5vYmplY3QpO3ZvaWQgMCE9PWsmJmcuYWRkTGV2ZWwoayxsLmRpc3RhbmNlKX1yZXR1cm4gZ319KCl9KTt2YXIgbWc9e1VWTWFwcGluZzozMDAsQ3ViZVJlZmxlY3Rpb25NYXBwaW5nOjMwMSxDdWJlUmVmcmFjdGlvbk1hcHBpbmc6MzAyLEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOjMwMyxFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZzozMDQsU3BoZXJpY2FsUmVmbGVjdGlvbk1hcHBpbmc6MzA1LApDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzozMDYsQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6MzA3fSxnZj17UmVwZWF0V3JhcHBpbmc6MUUzLENsYW1wVG9FZGdlV3JhcHBpbmc6MTAwMSxNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOjEwMDJ9LGhmPXtOZWFyZXN0RmlsdGVyOjEwMDMsTmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXI6MTAwNCxOZWFyZXN0TWlwTWFwTGluZWFyRmlsdGVyOjEwMDUsTGluZWFyRmlsdGVyOjEwMDYsTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcjoxMDA3LExpbmVhck1pcE1hcExpbmVhckZpbHRlcjoxMDA4fTtPYmplY3QuYXNzaWduKG5hLnByb3RvdHlwZSx7Z2V0UG9pbnQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIik7cmV0dXJuIG51bGx9LGdldFBvaW50QXQ6ZnVuY3Rpb24oYSl7YT10aGlzLmdldFV0b1RtYXBwaW5nKGEpO3JldHVybiB0aGlzLmdldFBvaW50KGEpfSxnZXRQb2ludHM6ZnVuY3Rpb24oYSl7dm9pZCAwPT09CmEmJihhPTUpO2Zvcih2YXIgYj1bXSxjPTA7Yzw9YTtjKyspYi5wdXNoKHRoaXMuZ2V0UG9pbnQoYy9hKSk7cmV0dXJuIGJ9LGdldFNwYWNlZFBvaW50czpmdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT01KTtmb3IodmFyIGI9W10sYz0wO2M8PWE7YysrKWIucHVzaCh0aGlzLmdldFBvaW50QXQoYy9hKSk7cmV0dXJuIGJ9LGdldExlbmd0aDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0TGVuZ3RocygpO3JldHVybiBhW2EubGVuZ3RoLTFdfSxnZXRMZW5ndGhzOmZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKTtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09YSsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTt2YXIgYj1bXSxjLGQ9dGhpcy5nZXRQb2ludCgwKSxlLGY9MDtiLnB1c2goMCk7Zm9yKGU9MTtlPD1hO2UrKyljPQp0aGlzLmdldFBvaW50KGUvYSksZis9Yy5kaXN0YW5jZVRvKGQpLGIucHVzaChmKSxkPWM7cmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzPWJ9LHVwZGF0ZUFyY0xlbmd0aHM6ZnVuY3Rpb24oKXt0aGlzLm5lZWRzVXBkYXRlPSEwO3RoaXMuZ2V0TGVuZ3RocygpfSxnZXRVdG9UbWFwcGluZzpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0TGVuZ3RocygpLGQsZT1jLmxlbmd0aCxmO2Y9Yj9iOmEqY1tlLTFdO2Zvcih2YXIgZz0wLGg9ZS0xLGs7Zzw9aDspaWYoZD1NYXRoLmZsb29yKGcrKGgtZykvMiksaz1jW2RdLWYsMD5rKWc9ZCsxO2Vsc2UgaWYoMDxrKWg9ZC0xO2Vsc2V7aD1kO2JyZWFrfWQ9aDtpZihjW2RdPT09ZilyZXR1cm4gZC8oZS0xKTtnPWNbZF07cmV0dXJuKGQrKGYtZykvKGNbZCsxXS1nKSkvKGUtMSl9LGdldFRhbmdlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS0xRS00O2ErPTFFLTQ7MD5iJiYoYj0wKTsxPGEmJihhPTEpO2I9dGhpcy5nZXRQb2ludChiKTtyZXR1cm4gdGhpcy5nZXRQb2ludChhKS5jbG9uZSgpLnN1YihiKS5ub3JtYWxpemUoKX0sCmdldFRhbmdlbnRBdDpmdW5jdGlvbihhKXthPXRoaXMuZ2V0VXRvVG1hcHBpbmcoYSk7cmV0dXJuIHRoaXMuZ2V0VGFuZ2VudChhKX0sY29tcHV0ZUZyZW5ldEZyYW1lczpmdW5jdGlvbihhLGIpe3ZhciBjPW5ldyBwLGQ9W10sZT1bXSxmPVtdLGc9bmV3IHAsaD1uZXcgSixrLGw7Zm9yKGs9MDtrPD1hO2srKylsPWsvYSxkW2tdPXRoaXMuZ2V0VGFuZ2VudEF0KGwpLGRba10ubm9ybWFsaXplKCk7ZVswXT1uZXcgcDtmWzBdPW5ldyBwO2s9TnVtYmVyLk1BWF9WQUxVRTtsPU1hdGguYWJzKGRbMF0ueCk7dmFyIHU9TWF0aC5hYnMoZFswXS55KSxxPU1hdGguYWJzKGRbMF0ueik7bDw9ayYmKGs9bCxjLnNldCgxLDAsMCkpO3U8PWsmJihrPXUsYy5zZXQoMCwxLDApKTtxPD1rJiZjLnNldCgwLDAsMSk7Zy5jcm9zc1ZlY3RvcnMoZFswXSxjKS5ub3JtYWxpemUoKTtlWzBdLmNyb3NzVmVjdG9ycyhkWzBdLGcpO2ZbMF0uY3Jvc3NWZWN0b3JzKGRbMF0sZVswXSk7Zm9yKGs9MTtrPD1hO2srKyllW2tdPQplW2stMV0uY2xvbmUoKSxmW2tdPWZbay0xXS5jbG9uZSgpLGcuY3Jvc3NWZWN0b3JzKGRbay0xXSxkW2tdKSxnLmxlbmd0aCgpPk51bWJlci5FUFNJTE9OJiYoZy5ub3JtYWxpemUoKSxjPU1hdGguYWNvcyhZLmNsYW1wKGRbay0xXS5kb3QoZFtrXSksLTEsMSkpLGVba10uYXBwbHlNYXRyaXg0KGgubWFrZVJvdGF0aW9uQXhpcyhnLGMpKSksZltrXS5jcm9zc1ZlY3RvcnMoZFtrXSxlW2tdKTtpZighMD09PWIpZm9yKGM9TWF0aC5hY29zKFkuY2xhbXAoZVswXS5kb3QoZVthXSksLTEsMSkpLGMvPWEsMDxkWzBdLmRvdChnLmNyb3NzVmVjdG9ycyhlWzBdLGVbYV0pKSYmKGM9LWMpLGs9MTtrPD1hO2srKyllW2tdLmFwcGx5TWF0cml4NChoLm1ha2VSb3RhdGlvbkF4aXMoZFtrXSxjKmspKSxmW2tdLmNyb3NzVmVjdG9ycyhkW2tdLGVba10pO3JldHVybnt0YW5nZW50czpkLG5vcm1hbHM6ZSxiaW5vcm1hbHM6Zn19fSk7U2EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTsKU2EucHJvdG90eXBlLmNvbnN0cnVjdG9yPVNhO1NhLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDtTYS5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYSl7aWYoMT09PWEpcmV0dXJuIHRoaXMudjIuY2xvbmUoKTt2YXIgYj10aGlzLnYyLmNsb25lKCkuc3ViKHRoaXMudjEpO2IubXVsdGlwbHlTY2FsYXIoYSkuYWRkKHRoaXMudjEpO3JldHVybiBifTtTYS5wcm90b3R5cGUuZ2V0UG9pbnRBdD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nZXRQb2ludChhKX07U2EucHJvdG90eXBlLmdldFRhbmdlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMudjIuY2xvbmUoKS5zdWIodGhpcy52MSkubm9ybWFsaXplKCl9O1ljLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6WWMsYWRkOmZ1bmN0aW9uKGEpe3RoaXMuY3VydmVzLnB1c2goYSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY3VydmVzWzBdLmdldFBvaW50KDApLApiPXRoaXMuY3VydmVzW3RoaXMuY3VydmVzLmxlbmd0aC0xXS5nZXRQb2ludCgxKTthLmVxdWFscyhiKXx8dGhpcy5jdXJ2ZXMucHVzaChuZXcgU2EoYixhKSl9LGdldFBvaW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEqdGhpcy5nZXRMZW5ndGgoKSxjPXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7Zm9yKGE9MDthPGMubGVuZ3RoOyl7aWYoY1thXT49YilyZXR1cm4gYj1jW2FdLWIsYT10aGlzLmN1cnZlc1thXSxjPWEuZ2V0TGVuZ3RoKCksYS5nZXRQb2ludEF0KDA9PT1jPzA6MS1iL2MpO2ErK31yZXR1cm4gbnVsbH0sZ2V0TGVuZ3RoOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtyZXR1cm4gYVthLmxlbmd0aC0xXX0sdXBkYXRlQXJjTGVuZ3RoczpmdW5jdGlvbigpe3RoaXMubmVlZHNVcGRhdGU9ITA7dGhpcy5jYWNoZUxlbmd0aHM9bnVsbDt0aGlzLmdldEN1cnZlTGVuZ3RocygpfSxnZXRDdXJ2ZUxlbmd0aHM6ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlTGVuZ3RocyYmCnRoaXMuY2FjaGVMZW5ndGhzLmxlbmd0aD09PXRoaXMuY3VydmVzLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM7Zm9yKHZhciBhPVtdLGI9MCxjPTAsZD10aGlzLmN1cnZlcy5sZW5ndGg7YzxkO2MrKyliKz10aGlzLmN1cnZlc1tjXS5nZXRMZW5ndGgoKSxhLnB1c2goYik7cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzPWF9LGdldFNwYWNlZFBvaW50czpmdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT00MCk7Zm9yKHZhciBiPVtdLGM9MDtjPD1hO2MrKyliLnB1c2godGhpcy5nZXRQb2ludChjL2EpKTt0aGlzLmF1dG9DbG9zZSYmYi5wdXNoKGJbMF0pO3JldHVybiBifSxnZXRQb2ludHM6ZnVuY3Rpb24oYSl7YT1hfHwxMjtmb3IodmFyIGI9W10sYyxkPTAsZT10aGlzLmN1cnZlcztkPGUubGVuZ3RoO2QrKylmb3IodmFyIGY9ZVtkXSxmPWYuZ2V0UG9pbnRzKGYmJmYuaXNFbGxpcHNlQ3VydmU/MiphOmYmJmYuaXNMaW5lQ3VydmU/MTpmJiZmLmlzU3BsaW5lQ3VydmU/YSpmLnBvaW50cy5sZW5ndGg6CmEpLGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIGg9ZltnXTtjJiZjLmVxdWFscyhoKXx8KGIucHVzaChoKSxjPWgpfXRoaXMuYXV0b0Nsb3NlJiYxPGIubGVuZ3RoJiYhYltiLmxlbmd0aC0xXS5lcXVhbHMoYlswXSkmJmIucHVzaChiWzBdKTtyZXR1cm4gYn0sY3JlYXRlUG9pbnRzR2VvbWV0cnk6ZnVuY3Rpb24oYSl7YT10aGlzLmdldFBvaW50cyhhKTtyZXR1cm4gdGhpcy5jcmVhdGVHZW9tZXRyeShhKX0sY3JlYXRlU3BhY2VkUG9pbnRzR2VvbWV0cnk6ZnVuY3Rpb24oYSl7YT10aGlzLmdldFNwYWNlZFBvaW50cyhhKTtyZXR1cm4gdGhpcy5jcmVhdGVHZW9tZXRyeShhKX0sY3JlYXRlR2VvbWV0cnk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPW5ldyBNLGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspe3ZhciBlPWFbY107Yi52ZXJ0aWNlcy5wdXNoKG5ldyBwKGUueCxlLnksZS56fHwwKSl9cmV0dXJuIGJ9fSk7WGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTtYYS5wcm90b3R5cGUuY29uc3RydWN0b3I9ClhhO1hhLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMDtYYS5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTIqTWF0aC5QSSxjPXRoaXMuYUVuZEFuZ2xlLXRoaXMuYVN0YXJ0QW5nbGUsZD1NYXRoLmFicyhjKTxOdW1iZXIuRVBTSUxPTjswPmM7KWMrPWI7Zm9yKDtjPmI7KWMtPWI7YzxOdW1iZXIuRVBTSUxPTiYmKGM9ZD8wOmIpOyEwIT09dGhpcy5hQ2xvY2t3aXNlfHxkfHwoYz1jPT09Yj8tYjpjLWIpO2I9dGhpcy5hU3RhcnRBbmdsZSthKmM7YT10aGlzLmFYK3RoaXMueFJhZGl1cypNYXRoLmNvcyhiKTt2YXIgZT10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihiKTswIT09dGhpcy5hUm90YXRpb24mJihiPU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxjPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxkPWEtdGhpcy5hWCxlLT10aGlzLmFZLGE9ZCpiLWUqYyt0aGlzLmFYLGU9ZCpjK2UqYit0aGlzLmFZKTtyZXR1cm4gbmV3IEQoYSxlKX07emIucHJvdG90eXBlPQpPYmplY3QuY3JlYXRlKG5hLnByb3RvdHlwZSk7emIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXpiO3piLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO3piLnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnBvaW50cyxjPShiLmxlbmd0aC0xKSphO2E9TWF0aC5mbG9vcihjKTt2YXIgYz1jLWEsZD1iWzA9PT1hP2E6YS0xXSxlPWJbYV0sZj1iW2E+Yi5sZW5ndGgtMj9iLmxlbmd0aC0xOmErMV0sYj1iW2E+Yi5sZW5ndGgtMz9iLmxlbmd0aC0xOmErMl07cmV0dXJuIG5ldyBEKFNlKGMsZC54LGUueCxmLngsYi54KSxTZShjLGQueSxlLnksZi55LGIueSkpfTtoYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuYS5wcm90b3R5cGUpO2hjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1oYztoYy5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy52MCxjPXRoaXMudjEsZD10aGlzLnYyLGU9dGhpcy52MztyZXR1cm4gbmV3IEQoeWIoYSxiLngsYy54LApkLngsZS54KSx5YihhLGIueSxjLnksZC55LGUueSkpfTtpYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuYS5wcm90b3R5cGUpO2ljLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1pYztpYy5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy52MCxjPXRoaXMudjEsZD10aGlzLnYyO3JldHVybiBuZXcgRCh4YihhLGIueCxjLngsZC54KSx4YihhLGIueSxjLnksZC55KSl9O3ZhciB1ZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoWWMucHJvdG90eXBlKSx7ZnJvbVBvaW50czpmdW5jdGlvbihhKXt0aGlzLm1vdmVUbyhhWzBdLngsYVswXS55KTtmb3IodmFyIGI9MSxjPWEubGVuZ3RoO2I8YztiKyspdGhpcy5saW5lVG8oYVtiXS54LGFbYl0ueSl9LG1vdmVUbzpmdW5jdGlvbihhLGIpe3RoaXMuY3VycmVudFBvaW50LnNldChhLGIpfSxsaW5lVG86ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgU2EodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgRChhLGIpKTsKdGhpcy5jdXJ2ZXMucHVzaChjKTt0aGlzLmN1cnJlbnRQb2ludC5zZXQoYSxiKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihhLGIsYyxkKXthPW5ldyBpYyh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBEKGEsYiksbmV3IEQoYyxkKSk7dGhpcy5jdXJ2ZXMucHVzaChhKTt0aGlzLmN1cnJlbnRQb2ludC5zZXQoYyxkKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihhLGIsYyxkLGUsZil7YT1uZXcgaGModGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgRChhLGIpLG5ldyBEKGMsZCksbmV3IEQoZSxmKSk7dGhpcy5jdXJ2ZXMucHVzaChhKTt0aGlzLmN1cnJlbnRQb2ludC5zZXQoZSxmKX0sc3BsaW5lVGhydTpmdW5jdGlvbihhKXt2YXIgYj1bdGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKV0uY29uY2F0KGEpLGI9bmV3IHpiKGIpO3RoaXMuY3VydmVzLnB1c2goYik7dGhpcy5jdXJyZW50UG9pbnQuY29weShhW2EubGVuZ3RoLTFdKX0sYXJjOmZ1bmN0aW9uKGEsYixjLGQsCmUsZil7dGhpcy5hYnNhcmMoYSt0aGlzLmN1cnJlbnRQb2ludC54LGIrdGhpcy5jdXJyZW50UG9pbnQueSxjLGQsZSxmKX0sYWJzYXJjOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmFic2VsbGlwc2UoYSxiLGMsYyxkLGUsZil9LGVsbGlwc2U6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXt0aGlzLmFic2VsbGlwc2UoYSt0aGlzLmN1cnJlbnRQb2ludC54LGIrdGhpcy5jdXJyZW50UG9pbnQueSxjLGQsZSxmLGcsaCl9LGFic2VsbGlwc2U6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXthPW5ldyBYYShhLGIsYyxkLGUsZixnLGgpOzA8dGhpcy5jdXJ2ZXMubGVuZ3RoJiYoYj1hLmdldFBvaW50KDApLGIuZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KXx8dGhpcy5saW5lVG8oYi54LGIueSkpO3RoaXMuY3VydmVzLnB1c2goYSk7YT1hLmdldFBvaW50KDEpO3RoaXMuY3VycmVudFBvaW50LmNvcHkoYSl9fSk7WmMucHJvdG90eXBlPXVlO3VlLmNvbnN0cnVjdG9yPVpjO0FiLnByb3RvdHlwZT0KT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHVlKSx7Y29uc3RydWN0b3I6QWIsZ2V0UG9pbnRzSG9sZXM6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MCxkPXRoaXMuaG9sZXMubGVuZ3RoO2M8ZDtjKyspYltjXT10aGlzLmhvbGVzW2NdLmdldFBvaW50cyhhKTtyZXR1cm4gYn0sZXh0cmFjdEFsbFBvaW50czpmdW5jdGlvbihhKXtyZXR1cm57c2hhcGU6dGhpcy5nZXRQb2ludHMoYSksaG9sZXM6dGhpcy5nZXRQb2ludHNIb2xlcyhhKX19LGV4dHJhY3RQb2ludHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZXh0cmFjdEFsbFBvaW50cyhhKX19KTtPYmplY3QuYXNzaWduKGRlLnByb3RvdHlwZSx7bW92ZVRvOmZ1bmN0aW9uKGEsYil7dGhpcy5jdXJyZW50UGF0aD1uZXcgWmM7dGhpcy5zdWJQYXRocy5wdXNoKHRoaXMuY3VycmVudFBhdGgpO3RoaXMuY3VycmVudFBhdGgubW92ZVRvKGEsYil9LGxpbmVUbzpmdW5jdGlvbihhLGIpe3RoaXMuY3VycmVudFBhdGgubGluZVRvKGEsCmIpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuY3VycmVudFBhdGgucXVhZHJhdGljQ3VydmVUbyhhLGIsYyxkKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5jdXJyZW50UGF0aC5iZXppZXJDdXJ2ZVRvKGEsYixjLGQsZSxmKX0sc3BsaW5lVGhydTpmdW5jdGlvbihhKXt0aGlzLmN1cnJlbnRQYXRoLnNwbGluZVRocnUoYSl9LHRvU2hhcGVzOmZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtmb3IodmFyIGI9W10sYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKyl7dmFyIGU9YVtjXSxmPW5ldyBBYjtmLmN1cnZlcz1lLmN1cnZlcztiLnB1c2goZil9cmV0dXJuIGJ9ZnVuY3Rpb24gZChhLGIpe2Zvcih2YXIgYz1iLmxlbmd0aCxkPSExLGU9Yy0xLGY9MDtmPGM7ZT1mKyspe3ZhciBnPWJbZV0saD1iW2ZdLGs9aC54LWcueCxsPWgueS1nLnk7aWYoTWF0aC5hYnMobCk+TnVtYmVyLkVQU0lMT04pe2lmKDA+bCYmKGc9YltmXSxrPS1rLApoPWJbZV0sbD0tbCksIShhLnk8Zy55fHxhLnk+aC55KSlpZihhLnk9PT1nLnkpe2lmKGEueD09PWcueClyZXR1cm4hMH1lbHNle2U9bCooYS54LWcueCktayooYS55LWcueSk7aWYoMD09PWUpcmV0dXJuITA7MD5lfHwoZD0hZCl9fWVsc2UgaWYoYS55PT09Zy55JiYoaC54PD1hLngmJmEueDw9Zy54fHxnLng8PWEueCYmYS54PD1oLngpKXJldHVybiEwfXJldHVybiBkfXZhciBlPXphLmlzQ2xvY2tXaXNlLGY9dGhpcy5zdWJQYXRocztpZigwPT09Zi5sZW5ndGgpcmV0dXJuW107aWYoITA9PT1iKXJldHVybiBjKGYpO3ZhciBnLGgsayxsPVtdO2lmKDE9PT1mLmxlbmd0aClyZXR1cm4gaD1mWzBdLGs9bmV3IEFiLGsuY3VydmVzPWguY3VydmVzLGwucHVzaChrKSxsO3ZhciBwPSFlKGZbMF0uZ2V0UG9pbnRzKCkpLHA9YT8hcDpwO2s9W107dmFyIHE9W10sbj1bXSxyPTAsejtxW3JdPXZvaWQgMDtuW3JdPVtdO2Zvcih2YXIgdD0wLHk9Zi5sZW5ndGg7dDx5O3QrKyloPWZbdF0sej1oLmdldFBvaW50cygpLApnPWUoeiksKGc9YT8hZzpnKT8oIXAmJnFbcl0mJnIrKyxxW3JdPXtzOm5ldyBBYixwOnp9LHFbcl0ucy5jdXJ2ZXM9aC5jdXJ2ZXMscCYmcisrLG5bcl09W10pOm5bcl0ucHVzaCh7aDpoLHA6elswXX0pO2lmKCFxWzBdKXJldHVybiBjKGYpO2lmKDE8cS5sZW5ndGgpe3Q9ITE7aD1bXTtlPTA7Zm9yKGY9cS5sZW5ndGg7ZTxmO2UrKylrW2VdPVtdO2U9MDtmb3IoZj1xLmxlbmd0aDtlPGY7ZSsrKWZvcihnPW5bZV0scD0wO3A8Zy5sZW5ndGg7cCsrKXtyPWdbcF07ej0hMDtmb3IoeT0wO3k8cS5sZW5ndGg7eSsrKWQoci5wLHFbeV0ucCkmJihlIT09eSYmaC5wdXNoKHtmcm9tczplLHRvczp5LGhvbGU6cH0pLHo/KHo9ITEsa1t5XS5wdXNoKHIpKTp0PSEwKTt6JiZrW2VdLnB1c2gocil9MDxoLmxlbmd0aCYmKHR8fChuPWspKX10PTA7Zm9yKGU9cS5sZW5ndGg7dDxlO3QrKylmb3Ioaz1xW3RdLnMsbC5wdXNoKGspLGg9blt0XSxmPTAsZz1oLmxlbmd0aDtmPGc7ZisrKWsuaG9sZXMucHVzaChoW2ZdLmgpOwpyZXR1cm4gbH19KTtPYmplY3QuYXNzaWduKGVlLnByb3RvdHlwZSx7aXNGb250OiEwLGdlbmVyYXRlU2hhcGVzOmZ1bmN0aW9uKGEsYixjKXt2b2lkIDA9PT1iJiYoYj0xMDApO3ZvaWQgMD09PWMmJihjPTQpO3ZhciBkPXRoaXMuZGF0YTthPVN0cmluZyhhKS5zcGxpdCgiIik7dmFyIGU9Yi9kLnJlc29sdXRpb24sZj0oZC5ib3VuZGluZ0JveC55TWF4LWQuYm91bmRpbmdCb3gueU1pbitkLnVuZGVybGluZVRoaWNrbmVzcykqZSxnPTAsaD0wO2I9W107Zm9yKHZhciBrPTA7azxhLmxlbmd0aDtrKyspe3ZhciBsPWFba107aWYoIlxuIj09PWwpZz0wLGgtPWY7ZWxzZXt2YXIgcDtwPWU7dmFyIHE9ZyxuPWg7aWYobD1kLmdseXBoc1tsXXx8ZC5nbHlwaHNbIj8iXSl7dmFyIHI9bmV3IGRlLHo9W10sdCx5LHgsdixCLHcsQyxEO2lmKGwubylmb3IodmFyIEU9bC5fY2FjaGVkT3V0bGluZXx8KGwuX2NhY2hlZE91dGxpbmU9bC5vLnNwbGl0KCIgIikpLEY9MCxJPUUubGVuZ3RoO0Y8STspc3dpdGNoKEVbRisrXSl7Y2FzZSAibSI6dD0KRVtGKytdKnArcTt5PUVbRisrXSpwK247ci5tb3ZlVG8odCx5KTticmVhaztjYXNlICJsIjp0PUVbRisrXSpwK3E7eT1FW0YrK10qcCtuO3IubGluZVRvKHQseSk7YnJlYWs7Y2FzZSAicSI6dD1FW0YrK10qcCtxO3k9RVtGKytdKnArbjtCPUVbRisrXSpwK3E7dz1FW0YrK10qcCtuO3IucXVhZHJhdGljQ3VydmVUbyhCLHcsdCx5KTtpZih2PXpbei5sZW5ndGgtMV0pe3g9di54O3Y9di55O2Zvcih2YXIgSD0xO0g8PWM7SCsrKXt2YXIgSj1IL2M7eGIoSix4LEIsdCk7eGIoSix2LHcseSl9fWJyZWFrO2Nhc2UgImIiOmlmKHQ9RVtGKytdKnArcSx5PUVbRisrXSpwK24sQj1FW0YrK10qcCtxLHc9RVtGKytdKnArbixDPUVbRisrXSpwK3EsRD1FW0YrK10qcCtuLHIuYmV6aWVyQ3VydmVUbyhCLHcsQyxELHQseSksdj16W3oubGVuZ3RoLTFdKWZvcih4PXYueCx2PXYueSxIPTE7SDw9YztIKyspSj1IL2MseWIoSix4LEIsQyx0KSx5YihKLHYsdyxELHkpfXA9e29mZnNldFg6bC5oYSpwLHBhdGg6cn19ZWxzZSBwPQp2b2lkIDA7Zys9cC5vZmZzZXRYO2IucHVzaChwLnBhdGgpfX1jPVtdO2Q9MDtmb3IoYT1iLmxlbmd0aDtkPGE7ZCsrKUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGMsYltkXS50b1NoYXBlcygpKTtyZXR1cm4gY319KTtPYmplY3QuYXNzaWduKFRlLnByb3RvdHlwZSx7bG9hZDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzOyhuZXcgdWEodGhpcy5tYW5hZ2VyKSkubG9hZChhLGZ1bmN0aW9uKGEpe3ZhciBjO3RyeXtjPUpTT04ucGFyc2UoYSl9Y2F0Y2goZCl7Y29uc29sZS53YXJuKCJUSFJFRS5Gb250TG9hZGVyOiB0eXBlZmFjZS5qcyBzdXBwb3J0IGlzIGJlaW5nIGRlcHJlY2F0ZWQuIFVzZSB0eXBlZmFjZS5qc29uIGluc3RlYWQuIiksYz1KU09OLnBhcnNlKGEuc3Vic3RyaW5nKDY1LGEubGVuZ3RoLTIpKX1hPWUucGFyc2UoYyk7YiYmYihhKX0sYyxkKX0scGFyc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBlZShhKX19KTt2YXIgT2QsaWU9e2dldENvbnRleHQ6ZnVuY3Rpb24oKXt2b2lkIDA9PT0KT2QmJihPZD1uZXcgKHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKTtyZXR1cm4gT2R9LHNldENvbnRleHQ6ZnVuY3Rpb24oYSl7T2Q9YX19O09iamVjdC5hc3NpZ24oZmUucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW5ldyB1YSh0aGlzLm1hbmFnZXIpO2Uuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpO2UubG9hZChhLGZ1bmN0aW9uKGEpe2llLmdldENvbnRleHQoKS5kZWNvZGVBdWRpb0RhdGEoYSxmdW5jdGlvbihhKXtiKGEpfSl9LGMsZCl9fSk7T2JqZWN0LmFzc2lnbihVZS5wcm90b3R5cGUse3VwZGF0ZTpmdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZixnLGgsaz1uZXcgSixsPW5ldyBKO3JldHVybiBmdW5jdGlvbihwKXtpZihhIT09dGhpc3x8YiE9PXAuZm9jdXN8fGMhPT1wLmZvdnx8ZCE9PXAuYXNwZWN0KnRoaXMuYXNwZWN0fHxlIT09cC5uZWFyfHxmIT09cC5mYXJ8fGchPT1wLnpvb218fGghPT10aGlzLmV5ZVNlcCl7YT0KdGhpcztiPXAuZm9jdXM7Yz1wLmZvdjtkPXAuYXNwZWN0KnRoaXMuYXNwZWN0O2U9cC5uZWFyO2Y9cC5mYXI7Zz1wLnpvb207dmFyIHE9cC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7aD10aGlzLmV5ZVNlcC8yO3ZhciBuPWgqZS9iLHI9ZSpNYXRoLnRhbihZLkRFRzJSQUQqYyouNSkvZyx6LHQ7bC5lbGVtZW50c1sxMl09LWg7ay5lbGVtZW50c1sxMl09aDt6PS1yKmQrbjt0PXIqZCtuO3EuZWxlbWVudHNbMF09MiplLyh0LXopO3EuZWxlbWVudHNbOF09KHQreikvKHQteik7dGhpcy5jYW1lcmFMLnByb2plY3Rpb25NYXRyaXguY29weShxKTt6PS1yKmQtbjt0PXIqZC1uO3EuZWxlbWVudHNbMF09MiplLyh0LXopO3EuZWxlbWVudHNbOF09KHQreikvKHQteik7dGhpcy5jYW1lcmFSLnByb2plY3Rpb25NYXRyaXguY29weShxKX10aGlzLmNhbWVyYUwubWF0cml4V29ybGQuY29weShwLm1hdHJpeFdvcmxkKS5tdWx0aXBseShsKTt0aGlzLmNhbWVyYVIubWF0cml4V29ybGQuY29weShwLm1hdHJpeFdvcmxkKS5tdWx0aXBseShrKX19KCl9KTsKSWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpO0lkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1JZDtnZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmdlLGlzQXJyYXlDYW1lcmE6ITB9KTtoZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6aGUsZ2V0SW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYWlufSxyZW1vdmVGaWx0ZXI6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5maWx0ZXImJih0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmZpbHRlciksdGhpcy5maWx0ZXIuZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5maWx0ZXI9bnVsbCl9LGdldEZpbHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbHRlcn0sc2V0RmlsdGVyOmZ1bmN0aW9uKGEpe251bGwhPT0KdGhpcy5maWx0ZXI/KHRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbikpOnRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbik7dGhpcy5maWx0ZXI9YTt0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmZpbHRlcik7dGhpcy5maWx0ZXIuY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pfSxnZXRNYXN0ZXJWb2x1bWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9LHNldE1hc3RlclZvbHVtZTpmdW5jdGlvbihhKXt0aGlzLmdhaW4uZ2Fpbi52YWx1ZT1hfSx1cGRhdGVNYXRyaXhXb3JsZDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHFhLGM9bmV3IHAsZD1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oZSl7Qi5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCh0aGlzLGUpO2U9dGhpcy5jb250ZXh0Lmxpc3RlbmVyO3ZhciBmPQp0aGlzLnVwO3RoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGEsYixjKTtkLnNldCgwLDAsLTEpLmFwcGx5UXVhdGVybmlvbihiKTtlLnBvc2l0aW9uWD8oZS5wb3NpdGlvblguc2V0VmFsdWVBdFRpbWUoYS54LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS5wb3NpdGlvblkuc2V0VmFsdWVBdFRpbWUoYS55LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS5wb3NpdGlvblouc2V0VmFsdWVBdFRpbWUoYS56LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS5mb3J3YXJkWC5zZXRWYWx1ZUF0VGltZShkLngsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lKSxlLmZvcndhcmRZLnNldFZhbHVlQXRUaW1lKGQueSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpLGUuZm9yd2FyZFouc2V0VmFsdWVBdFRpbWUoZC56LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS51cFguc2V0VmFsdWVBdFRpbWUoZi54LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS51cFkuc2V0VmFsdWVBdFRpbWUoZi55LAp0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpLGUudXBaLnNldFZhbHVlQXRUaW1lKGYueix0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpKTooZS5zZXRQb3NpdGlvbihhLngsYS55LGEueiksZS5zZXRPcmllbnRhdGlvbihkLngsZC55LGQueixmLngsZi55LGYueikpfX0oKX0pO2pjLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpqYyxnZXRPdXRwdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYWlufSxzZXROb2RlU291cmNlOmZ1bmN0aW9uKGEpe3RoaXMuaGFzUGxheWJhY2tDb250cm9sPSExO3RoaXMuc291cmNlVHlwZT0iYXVkaW9Ob2RlIjt0aGlzLnNvdXJjZT1hO3RoaXMuY29ubmVjdCgpO3JldHVybiB0aGlzfSxzZXRCdWZmZXI6ZnVuY3Rpb24oYSl7dGhpcy5idWZmZXI9YTt0aGlzLnNvdXJjZVR5cGU9ImJ1ZmZlciI7dGhpcy5hdXRvcGxheSYmdGhpcy5wbGF5KCk7cmV0dXJuIHRoaXN9LHBsYXk6ZnVuY3Rpb24oKXtpZighMD09PQp0aGlzLmlzUGxheWluZyljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiBBdWRpbyBpcyBhbHJlYWR5IHBsYXlpbmcuIik7ZWxzZSBpZighMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKWNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7ZWxzZXt2YXIgYT10aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7YS5idWZmZXI9dGhpcy5idWZmZXI7YS5sb29wPXRoaXMubG9vcDthLm9uZW5kZWQ9dGhpcy5vbkVuZGVkLmJpbmQodGhpcyk7YS5wbGF5YmFja1JhdGUuc2V0VmFsdWVBdFRpbWUodGhpcy5wbGF5YmFja1JhdGUsdGhpcy5zdGFydFRpbWUpO2Euc3RhcnQoMCx0aGlzLnN0YXJ0VGltZSk7dGhpcy5pc1BsYXlpbmc9ITA7dGhpcy5zb3VyY2U9YTtyZXR1cm4gdGhpcy5jb25uZWN0KCl9fSxwYXVzZTpmdW5jdGlvbigpe2lmKCExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTsKZWxzZSByZXR1cm4gdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc3RhcnRUaW1lPXRoaXMuY29udGV4dC5jdXJyZW50VGltZSx0aGlzLmlzUGxheWluZz0hMSx0aGlzfSxzdG9wOmZ1bmN0aW9uKCl7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO2Vsc2UgcmV0dXJuIHRoaXMuc291cmNlLnN0b3AoKSx0aGlzLnN0YXJ0VGltZT0wLHRoaXMuaXNQbGF5aW5nPSExLHRoaXN9LGNvbm5lY3Q6ZnVuY3Rpb24oKXtpZigwPHRoaXMuZmlsdGVycy5sZW5ndGgpe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IodmFyIGE9MSxiPXRoaXMuZmlsdGVycy5sZW5ndGg7YTxiO2ErKyl0aGlzLmZpbHRlcnNbYS0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1thXSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7CnJldHVybiB0aGlzfSxkaXNjb25uZWN0OmZ1bmN0aW9uKCl7aWYoMDx0aGlzLmZpbHRlcnMubGVuZ3RoKXt0aGlzLnNvdXJjZS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1swXSk7Zm9yKHZhciBhPTEsYj10aGlzLmZpbHRlcnMubGVuZ3RoO2E8YjthKyspdGhpcy5maWx0ZXJzW2EtMV0uZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbYV0pO3RoaXMuZmlsdGVyc1t0aGlzLmZpbHRlcnMubGVuZ3RoLTFdLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSl9ZWxzZSB0aGlzLnNvdXJjZS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpO3JldHVybiB0aGlzfSxnZXRGaWx0ZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsdGVyc30sc2V0RmlsdGVyczpmdW5jdGlvbihhKXthfHwoYT1bXSk7ITA9PT10aGlzLmlzUGxheWluZz8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPWEsdGhpcy5jb25uZWN0KCkpOnRoaXMuZmlsdGVycz1hO3JldHVybiB0aGlzfSxnZXRGaWx0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJzKClbMF19LApzZXRGaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyhhP1thXTpbXSl9LHNldFBsYXliYWNrUmF0ZTpmdW5jdGlvbihhKXtpZighMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKWNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7ZWxzZSByZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9YSwhMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VmFsdWVBdFRpbWUodGhpcy5wbGF5YmFja1JhdGUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lKSx0aGlzfSxnZXRQbGF5YmFja1JhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9LG9uRW5kZWQ6ZnVuY3Rpb24oKXt0aGlzLmlzUGxheWluZz0hMX0sZ2V0TG9vcDpmdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2w/KGNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIiksCiExKTp0aGlzLmxvb3B9LHNldExvb3A6ZnVuY3Rpb24oYSl7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO2Vsc2UgcmV0dXJuIHRoaXMubG9vcD1hLCEwPT09dGhpcy5pc1BsYXlpbmcmJih0aGlzLnNvdXJjZS5sb29wPXRoaXMubG9vcCksdGhpc30sZ2V0Vm9sdW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnZhbHVlfSxzZXRWb2x1bWU6ZnVuY3Rpb24oYSl7dGhpcy5nYWluLmdhaW4udmFsdWU9YTtyZXR1cm4gdGhpc319KTtqZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGpjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmplLGdldE91dHB1dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbm5lcn0sZ2V0UmVmRGlzdGFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYW5uZXIucmVmRGlzdGFuY2V9LHNldFJlZkRpc3RhbmNlOmZ1bmN0aW9uKGEpe3RoaXMucGFubmVyLnJlZkRpc3RhbmNlPQphfSxnZXRSb2xsb2ZmRmFjdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFubmVyLnJvbGxvZmZGYWN0b3J9LHNldFJvbGxvZmZGYWN0b3I6ZnVuY3Rpb24oYSl7dGhpcy5wYW5uZXIucm9sbG9mZkZhY3Rvcj1hfSxnZXREaXN0YW5jZU1vZGVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFubmVyLmRpc3RhbmNlTW9kZWx9LHNldERpc3RhbmNlTW9kZWw6ZnVuY3Rpb24oYSl7dGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbD1hfSxnZXRNYXhEaXN0YW5jZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbm5lci5tYXhEaXN0YW5jZX0sc2V0TWF4RGlzdGFuY2U6ZnVuY3Rpb24oYSl7dGhpcy5wYW5uZXIubWF4RGlzdGFuY2U9YX0sdXBkYXRlTWF0cml4V29ybGQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYil7Qi5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCh0aGlzLGIpO2Euc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpO3RoaXMucGFubmVyLnNldFBvc2l0aW9uKGEueCwKYS55LGEueil9fSgpfSk7T2JqZWN0LmFzc2lnbihrZS5wcm90b3R5cGUse2dldEZyZXF1ZW5jeURhdGE6ZnVuY3Rpb24oKXt0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSk7cmV0dXJuIHRoaXMuZGF0YX0sZ2V0QXZlcmFnZUZyZXF1ZW5jeTpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCksYz0wO2M8Yi5sZW5ndGg7YysrKWErPWJbY107cmV0dXJuIGEvYi5sZW5ndGh9fSk7T2JqZWN0LmFzc2lnbihsZS5wcm90b3R5cGUse2FjY3VtdWxhdGU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmJ1ZmZlcixkPXRoaXMudmFsdWVTaXplLGU9YSpkK2QsZj10aGlzLmN1bXVsYXRpdmVXZWlnaHQ7aWYoMD09PWYpe2ZvcihmPTA7ZiE9PWQ7KytmKWNbZStmXT1jW2ZdO2Y9Yn1lbHNlIGYrPWIsdGhpcy5fbWl4QnVmZmVyUmVnaW9uKGMsZSwwLGIvZixkKTt0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9Zn0sYXBwbHk6ZnVuY3Rpb24oYSl7dmFyIGI9CnRoaXMudmFsdWVTaXplLGM9dGhpcy5idWZmZXI7YT1hKmIrYjt2YXIgZD10aGlzLmN1bXVsYXRpdmVXZWlnaHQsZT10aGlzLmJpbmRpbmc7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PTA7MT5kJiZ0aGlzLl9taXhCdWZmZXJSZWdpb24oYyxhLDMqYiwxLWQsYik7Zm9yKHZhciBkPWIsZj1iK2I7ZCE9PWY7KytkKWlmKGNbZF0hPT1jW2QrYl0pe2Uuc2V0VmFsdWUoYyxhKTticmVha319LHNhdmVPcmlnaW5hbFN0YXRlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5idWZmZXIsYj10aGlzLnZhbHVlU2l6ZSxjPTMqYjt0aGlzLmJpbmRpbmcuZ2V0VmFsdWUoYSxjKTtmb3IodmFyIGQ9YjtkIT09YzsrK2QpYVtkXT1hW2MrZCViXTt0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MH0scmVzdG9yZU9yaWdpbmFsU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLmJpbmRpbmcuc2V0VmFsdWUodGhpcy5idWZmZXIsMyp0aGlzLnZhbHVlU2l6ZSl9LF9zZWxlY3Q6ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZiguNTw9ZClmb3IoZD0KMDtkIT09ZTsrK2QpYVtiK2RdPWFbYytkXX0sX3NsZXJwOmZ1bmN0aW9uKGEsYixjLGQpe3FhLnNsZXJwRmxhdChhLGIsYSxiLGEsYyxkKX0sX2xlcnA6ZnVuY3Rpb24oYSxiLGMsZCxlKXtmb3IodmFyIGY9MS1kLGc9MDtnIT09ZTsrK2cpe3ZhciBoPWIrZzthW2hdPWFbaF0qZithW2MrZ10qZH19fSk7T2JqZWN0LmFzc2lnbihWZS5wcm90b3R5cGUse2dldFZhbHVlOmZ1bmN0aW9uKGEsYil7dGhpcy5iaW5kKCk7dmFyIGM9dGhpcy5fYmluZGluZ3NbdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfXTt2b2lkIDAhPT1jJiZjLmdldFZhbHVlKGEsYil9LHNldFZhbHVlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMuX2JpbmRpbmdzLGQ9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGU9Yy5sZW5ndGg7ZCE9PWU7KytkKWNbZF0uc2V0VmFsdWUoYSxiKX0sYmluZDpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLl9iaW5kaW5ncyxiPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXywKYz1hLmxlbmd0aDtiIT09YzsrK2IpYVtiXS5iaW5kKCl9LHVuYmluZDpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLl9iaW5kaW5ncyxiPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxjPWEubGVuZ3RoO2IhPT1jOysrYilhW2JdLnVuYmluZCgpfX0pO09iamVjdC5hc3NpZ24ob2Ese0NvbXBvc2l0ZTpWZSxjcmVhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhJiZhLmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IG9hLkNvbXBvc2l0ZShhLGIsYyk6bmV3IG9hKGEsYixjKX0scGFyc2VUcmFja05hbWU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgUmVnRXhwKCJeIisvKCg/Oltcdy1dK1tcLzpdKSopLy5zb3VyY2UrLyhbXHctXC5dKyk/Ly5zb3VyY2UrLyg/OlwuKFtcdy1dKykoPzpcWyguKylcXSk/KT8vLnNvdXJjZSsvXC4oW1x3LV0rKSg/OlxbKC4rKVxdKT8vLnNvdXJjZSsiJCIpLGI9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl07cmV0dXJuIGZ1bmN0aW9uKGMpe3ZhciBkPQphLmV4ZWMoYyk7aWYoIWQpdGhyb3cgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIitjKTt2YXIgZD17bm9kZU5hbWU6ZFsyXSxvYmplY3ROYW1lOmRbM10sb2JqZWN0SW5kZXg6ZFs0XSxwcm9wZXJ0eU5hbWU6ZFs1XSxwcm9wZXJ0eUluZGV4OmRbNl19LGU9ZC5ub2RlTmFtZSYmZC5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHZvaWQgMCE9PWUmJi0xIT09ZSl7dmFyIGY9ZC5ub2RlTmFtZS5zdWJzdHJpbmcoZSsxKTstMSE9PWIuaW5kZXhPZihmKSYmKGQubm9kZU5hbWU9ZC5ub2RlTmFtZS5zdWJzdHJpbmcoMCxlKSxkLm9iamVjdE5hbWU9Zil9aWYobnVsbD09PWQucHJvcGVydHlOYW1lfHwwPT09ZC5wcm9wZXJ0eU5hbWUubGVuZ3RoKXRocm93IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK2MpO3JldHVybiBkfX0oKSxmaW5kTm9kZTpmdW5jdGlvbihhLGIpe2lmKCFifHwKIiI9PT1ifHwicm9vdCI9PT1ifHwiLiI9PT1ifHwtMT09PWJ8fGI9PT1hLm5hbWV8fGI9PT1hLnV1aWQpcmV0dXJuIGE7aWYoYS5za2VsZXRvbil7dmFyIGM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPTA7YzxhLmJvbmVzLmxlbmd0aDtjKyspe3ZhciBkPWEuYm9uZXNbY107aWYoZC5uYW1lPT09YilyZXR1cm4gZH1yZXR1cm4gbnVsbH0oYS5za2VsZXRvbik7aWYoYylyZXR1cm4gY31pZihhLmNoaWxkcmVuKXt2YXIgZD1mdW5jdGlvbihhKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGc9YVtjXTtpZihnLm5hbWU9PT1ifHxnLnV1aWQ9PT1ifHwoZz1kKGcuY2hpbGRyZW4pKSlyZXR1cm4gZ31yZXR1cm4gbnVsbH07aWYoYz1kKGEuY2hpbGRyZW4pKXJldHVybiBjfXJldHVybiBudWxsfX0pO09iamVjdC5hc3NpZ24ob2EucHJvdG90eXBlLHtfZ2V0VmFsdWVfdW5hdmFpbGFibGU6ZnVuY3Rpb24oKXt9LF9zZXRWYWx1ZV91bmF2YWlsYWJsZTpmdW5jdGlvbigpe30sQmluZGluZ1R5cGU6e0RpcmVjdDowLApFbnRpcmVBcnJheToxLEFycmF5RWxlbWVudDoyLEhhc0Zyb21Ub0FycmF5OjN9LFZlcnNpb25pbmc6e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn0sR2V0dGVyQnlCaW5kaW5nVHlwZTpbZnVuY3Rpb24oYSxiKXthW2JdPXRoaXMubm9kZVt0aGlzLnByb3BlcnR5TmFtZV19LGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxkPTAsZT1jLmxlbmd0aDtkIT09ZTsrK2QpYVtiKytdPWNbZF19LGZ1bmN0aW9uKGEsYil7YVtiXT10aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XX0sZnVuY3Rpb24oYSxiKXt0aGlzLnJlc29sdmVkUHJvcGVydHkudG9BcnJheShhLGIpfV0sU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc6W1tmdW5jdGlvbihhLGIpe3RoaXMubm9kZVt0aGlzLnByb3BlcnR5TmFtZV09YVtiXX0sZnVuY3Rpb24oYSxiKXt0aGlzLm5vZGVbdGhpcy5wcm9wZXJ0eU5hbWVdPWFbYl07CnRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfSxmdW5jdGlvbihhLGIpe3RoaXMubm9kZVt0aGlzLnByb3BlcnR5TmFtZV09YVtiXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV0sW2Z1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxkPTAsZT1jLmxlbmd0aDtkIT09ZTsrK2QpY1tkXT1hW2IrK119LGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxkPTAsZT1jLmxlbmd0aDtkIT09ZTsrK2QpY1tkXT1hW2IrK107dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9LGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxkPTAsZT1jLmxlbmd0aDtkIT09ZTsrK2QpY1tkXT1hW2IrK107dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1dLFtmdW5jdGlvbihhLGIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPQphW2JdfSxmdW5jdGlvbihhLGIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWFbYl07dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9LGZ1bmN0aW9uKGEsYil7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09YVtiXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV0sW2Z1bmN0aW9uKGEsYil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShhLGIpfSxmdW5jdGlvbihhLGIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkoYSxiKTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH0sZnVuY3Rpb24oYSxiKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGEsYik7dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1dXSxnZXRWYWx1ZTpmdW5jdGlvbihhLGIpe3RoaXMuYmluZCgpO3RoaXMuZ2V0VmFsdWUoYSxiKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYSwKYil7dGhpcy5iaW5kKCk7dGhpcy5zZXRWYWx1ZShhLGIpfSxiaW5kOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ub2RlLGI9dGhpcy5wYXJzZWRQYXRoLGM9Yi5vYmplY3ROYW1lLGQ9Yi5wcm9wZXJ0eU5hbWUsZT1iLnByb3BlcnR5SW5kZXg7YXx8KHRoaXMubm9kZT1hPW9hLmZpbmROb2RlKHRoaXMucm9vdE5vZGUsYi5ub2RlTmFtZSl8fHRoaXMucm9vdE5vZGUpO3RoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5hdmFpbGFibGU7dGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZTtpZihhKXtpZihjKXt2YXIgZj1iLm9iamVjdEluZGV4O3N3aXRjaChjKXtjYXNlICJtYXRlcmlhbHMiOmlmKCFhLm1hdGVyaWFsKXtjb25zb2xlLmVycm9yKCIgIGNhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbCIsdGhpcyk7cmV0dXJufWlmKCFhLm1hdGVyaWFsLm1hdGVyaWFscyl7Y29uc29sZS5lcnJvcigiICBjYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwubWF0ZXJpYWxzIGFzIG5vZGUubWF0ZXJpYWwgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFscyBhcnJheSIsCnRoaXMpO3JldHVybn1hPWEubWF0ZXJpYWwubWF0ZXJpYWxzO2JyZWFrO2Nhc2UgImJvbmVzIjppZighYS5za2VsZXRvbil7Y29uc29sZS5lcnJvcigiICBjYW4gbm90IGJpbmQgdG8gYm9uZXMgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgc2tlbGV0b24iLHRoaXMpO3JldHVybn1hPWEuc2tlbGV0b24uYm9uZXM7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKylpZihhW2NdLm5hbWU9PT1mKXtmPWM7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih2b2lkIDA9PT1hW2NdKXtjb25zb2xlLmVycm9yKCIgIGNhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUsIHVuZGVmaW5lZCIsdGhpcyk7cmV0dXJufWE9YVtjXX1pZih2b2lkIDAhPT1mKXtpZih2b2lkIDA9PT1hW2ZdKXtjb25zb2xlLmVycm9yKCIgIHRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQ6Iix0aGlzLGEpO3JldHVybn1hPWFbZl19fWY9YVtkXTtpZih2b2lkIDA9PT1mKWNvbnNvbGUuZXJyb3IoIiAgdHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICIrCmIubm9kZU5hbWUrIi4iK2QrIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIsYSk7ZWxzZXtiPXRoaXMuVmVyc2lvbmluZy5Ob25lO3ZvaWQgMCE9PWEubmVlZHNVcGRhdGU/KGI9dGhpcy5WZXJzaW9uaW5nLk5lZWRzVXBkYXRlLHRoaXMudGFyZ2V0T2JqZWN0PWEpOnZvaWQgMCE9PWEubWF0cml4V29ybGROZWVkc1VwZGF0ZSYmKGI9dGhpcy5WZXJzaW9uaW5nLk1hdHJpeFdvcmxkTmVlZHNVcGRhdGUsdGhpcy50YXJnZXRPYmplY3Q9YSk7Yz10aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtpZih2b2lkIDAhPT1lKXtpZigibW9ycGhUYXJnZXRJbmZsdWVuY2VzIj09PWQpe2lmKCFhLmdlb21ldHJ5KXtjb25zb2xlLmVycm9yKCIgIGNhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXN1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkiLHRoaXMpO3JldHVybn1pZighYS5nZW9tZXRyeS5tb3JwaFRhcmdldHMpe2NvbnNvbGUuZXJyb3IoIiAgY2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhc3VzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaFRhcmdldHMiLAp0aGlzKTtyZXR1cm59Zm9yKGM9MDtjPHRoaXMubm9kZS5nZW9tZXRyeS5tb3JwaFRhcmdldHMubGVuZ3RoO2MrKylpZihhLmdlb21ldHJ5Lm1vcnBoVGFyZ2V0c1tjXS5uYW1lPT09ZSl7ZT1jO2JyZWFrfX1jPXRoaXMuQmluZGluZ1R5cGUuQXJyYXlFbGVtZW50O3RoaXMucmVzb2x2ZWRQcm9wZXJ0eT1mO3RoaXMucHJvcGVydHlJbmRleD1lfWVsc2Ugdm9pZCAwIT09Zi5mcm9tQXJyYXkmJnZvaWQgMCE9PWYudG9BcnJheT8oYz10aGlzLkJpbmRpbmdUeXBlLkhhc0Zyb21Ub0FycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1mKTpBcnJheS5pc0FycmF5KGYpPyhjPXRoaXMuQmluZGluZ1R5cGUuRW50aXJlQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PWYpOnRoaXMucHJvcGVydHlOYW1lPWQ7dGhpcy5nZXRWYWx1ZT10aGlzLkdldHRlckJ5QmluZGluZ1R5cGVbY107dGhpcy5zZXRWYWx1ZT10aGlzLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nW2NdW2JdfX1lbHNlIGNvbnNvbGUuZXJyb3IoIiAgdHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogIisKdGhpcy5wYXRoKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iKX0sdW5iaW5kOmZ1bmN0aW9uKCl7dGhpcy5ub2RlPW51bGw7dGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kO3RoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19KTtPYmplY3QuYXNzaWduKG9hLnByb3RvdHlwZSx7X2dldFZhbHVlX3VuYm91bmQ6b2EucHJvdG90eXBlLmdldFZhbHVlLF9zZXRWYWx1ZV91bmJvdW5kOm9hLnByb3RvdHlwZS5zZXRWYWx1ZX0pO09iamVjdC5hc3NpZ24oV2UucHJvdG90eXBlLHtpc0FuaW1hdGlvbk9iamVjdEdyb3VwOiEwLGFkZDpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5fb2JqZWN0cyxjPWIubGVuZ3RoLGQ9dGhpcy5uQ2FjaGVkT2JqZWN0c18sZT10aGlzLl9pbmRpY2VzQnlVVUlELGY9dGhpcy5fcGF0aHMsZz10aGlzLl9wYXJzZWRQYXRocyxoPXRoaXMuX2JpbmRpbmdzLGs9aC5sZW5ndGgsbD0wLHA9YXJndW1lbnRzLmxlbmd0aDtsIT09cDsrK2wpe3ZhciBxPQphcmd1bWVudHNbbF0sbj1xLnV1aWQscj1lW25dO2lmKHZvaWQgMD09PXIpe3I9YysrO2Vbbl09cjtiLnB1c2gocSk7Zm9yKHZhciBuPTAsej1rO24hPT16OysrbiloW25dLnB1c2gobmV3IG9hKHEsZltuXSxnW25dKSl9ZWxzZSBpZihyPGQpe3ZhciB0PS0tZCx6PWJbdF07ZVt6LnV1aWRdPXI7YltyXT16O2Vbbl09dDtiW3RdPXE7bj0wO2Zvcih6PWs7biE9PXo7KytuKXt2YXIgeT1oW25dLHg9eVtyXTt5W3JdPXlbdF07dm9pZCAwPT09eCYmKHg9bmV3IG9hKHEsZltuXSxnW25dKSk7eVt0XT14fX1lbHNlIHZvaWQgMCE9PWJbcl0mJmNvbnNvbGUuZXJyb3IoIkRpZmZlcmVudCBvYmplY3RzIHdpdGggdGhlIHNhbWUgVVVJRCBkZXRlY3RlZC4gQ2xlYW4gdGhlIGNhY2hlcyBvciByZWNyZWF0ZSB5b3VyIGluZnJhc3RydWN0dXJlIHdoZW4gcmVsb2FkaW5nIHNjZW5lcy4uLiIpfXRoaXMubkNhY2hlZE9iamVjdHNfPWR9LHJlbW92ZTpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5fb2JqZWN0cywKYz10aGlzLm5DYWNoZWRPYmplY3RzXyxkPXRoaXMuX2luZGljZXNCeVVVSUQsZT10aGlzLl9iaW5kaW5ncyxmPWUubGVuZ3RoLGc9MCxoPWFyZ3VtZW50cy5sZW5ndGg7ZyE9PWg7KytnKXt2YXIgaz1hcmd1bWVudHNbZ10sbD1rLnV1aWQscD1kW2xdO2lmKHZvaWQgMCE9PXAmJnA+PWMpe3ZhciBxPWMrKyxuPWJbcV07ZFtuLnV1aWRdPXA7YltwXT1uO2RbbF09cTtiW3FdPWs7az0wO2ZvcihsPWY7ayE9PWw7KytrKXt2YXIgbj1lW2tdLHI9bltwXTtuW3BdPW5bcV07bltxXT1yfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189Y30sdW5jYWNoZTpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5fb2JqZWN0cyxjPWIubGVuZ3RoLGQ9dGhpcy5uQ2FjaGVkT2JqZWN0c18sZT10aGlzLl9pbmRpY2VzQnlVVUlELGY9dGhpcy5fYmluZGluZ3MsZz1mLmxlbmd0aCxoPTAsaz1hcmd1bWVudHMubGVuZ3RoO2ghPT1rOysraCl7dmFyIGw9YXJndW1lbnRzW2hdLnV1aWQscD1lW2xdO2lmKHZvaWQgMCE9PQpwKWlmKGRlbGV0ZSBlW2xdLHA8ZCl7dmFyIGw9LS1kLHE9YltsXSxuPS0tYyxyPWJbbl07ZVtxLnV1aWRdPXA7YltwXT1xO2Vbci51dWlkXT1sO2JbbF09cjtiLnBvcCgpO3E9MDtmb3Iocj1nO3EhPT1yOysrcSl7dmFyIHo9ZltxXSx0PXpbbl07eltwXT16W2xdO3pbbF09dDt6LnBvcCgpfX1lbHNlIGZvcihuPS0tYyxyPWJbbl0sZVtyLnV1aWRdPXAsYltwXT1yLGIucG9wKCkscT0wLHI9ZztxIT09cjsrK3Epej1mW3FdLHpbcF09eltuXSx6LnBvcCgpfXRoaXMubkNhY2hlZE9iamVjdHNfPWR9LHN1YnNjcmliZV86ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGgsZD1jW2FdLGU9dGhpcy5fYmluZGluZ3M7aWYodm9pZCAwIT09ZClyZXR1cm4gZVtkXTt2YXIgZj10aGlzLl9wYXRocyxnPXRoaXMuX3BhcnNlZFBhdGhzLGg9dGhpcy5fb2JqZWN0cyxrPXRoaXMubkNhY2hlZE9iamVjdHNfLGw9QXJyYXkoaC5sZW5ndGgpLGQ9ZS5sZW5ndGg7Y1thXT0KZDtmLnB1c2goYSk7Zy5wdXNoKGIpO2UucHVzaChsKTtjPWs7Zm9yKGQ9aC5sZW5ndGg7YyE9PWQ7KytjKWxbY109bmV3IG9hKGhbY10sYSxiKTtyZXR1cm4gbH0sdW5zdWJzY3JpYmVfOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxjPWJbYV07aWYodm9pZCAwIT09Yyl7dmFyIGQ9dGhpcy5fcGF0aHMsZT10aGlzLl9wYXJzZWRQYXRocyxmPXRoaXMuX2JpbmRpbmdzLGc9Zi5sZW5ndGgtMSxoPWZbZ107YlthW2ddXT1jO2ZbY109aDtmLnBvcCgpO2VbY109ZVtnXTtlLnBvcCgpO2RbY109ZFtnXTtkLnBvcCgpfX19KTtPYmplY3QuYXNzaWduKFhlLnByb3RvdHlwZSx7cGxheTpmdW5jdGlvbigpe3RoaXMuX21peGVyLl9hY3RpdmF0ZUFjdGlvbih0aGlzKTtyZXR1cm4gdGhpc30sc3RvcDpmdW5jdGlvbigpe3RoaXMuX21peGVyLl9kZWFjdGl2YXRlQWN0aW9uKHRoaXMpO3JldHVybiB0aGlzLnJlc2V0KCl9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5wYXVzZWQ9CiExO3RoaXMuZW5hYmxlZD0hMDt0aGlzLnRpbWU9MDt0aGlzLl9sb29wQ291bnQ9LTE7dGhpcy5fc3RhcnRUaW1lPW51bGw7cmV0dXJuIHRoaXMuc3RvcEZhZGluZygpLnN0b3BXYXJwaW5nKCl9LGlzUnVubmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLnBhdXNlZCYmMCE9PXRoaXMudGltZVNjYWxlJiZudWxsPT09dGhpcy5fc3RhcnRUaW1lJiZ0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9LGlzU2NoZWR1bGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX0sc3RhcnRBdDpmdW5jdGlvbihhKXt0aGlzLl9zdGFydFRpbWU9YTtyZXR1cm4gdGhpc30sc2V0TG9vcDpmdW5jdGlvbihhLGIpe3RoaXMubG9vcD1hO3RoaXMucmVwZXRpdGlvbnM9YjtyZXR1cm4gdGhpc30sc2V0RWZmZWN0aXZlV2VpZ2h0OmZ1bmN0aW9uKGEpe3RoaXMud2VpZ2h0PWE7dGhpcy5fZWZmZWN0aXZlV2VpZ2h0PXRoaXMuZW5hYmxlZD8KYTowO3JldHVybiB0aGlzLnN0b3BGYWRpbmcoKX0sZ2V0RWZmZWN0aXZlV2VpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodH0sZmFkZUluOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyhhLDAsMSl9LGZhZGVPdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKGEsMSwwKX0sY3Jvc3NGYWRlRnJvbTpmdW5jdGlvbihhLGIsYyl7YS5mYWRlT3V0KGIpO3RoaXMuZmFkZUluKGIpO2lmKGMpe2M9dGhpcy5fY2xpcC5kdXJhdGlvbjt2YXIgZD1hLl9jbGlwLmR1cmF0aW9uLGU9Yy9kO2Eud2FycCgxLGQvYyxiKTt0aGlzLndhcnAoZSwxLGIpfXJldHVybiB0aGlzfSxjcm9zc0ZhZGVUbzpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEuY3Jvc3NGYWRlRnJvbSh0aGlzLGIsYyl9LHN0b3BGYWRpbmc6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtudWxsIT09YSYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PQpudWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudChhKSk7cmV0dXJuIHRoaXN9LHNldEVmZmVjdGl2ZVRpbWVTY2FsZTpmdW5jdGlvbihhKXt0aGlzLnRpbWVTY2FsZT1hO3RoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT10aGlzLnBhdXNlZD8wOmE7cmV0dXJuIHRoaXMuc3RvcFdhcnBpbmcoKX0sZ2V0RWZmZWN0aXZlVGltZVNjYWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZX0sc2V0RHVyYXRpb246ZnVuY3Rpb24oYSl7dGhpcy50aW1lU2NhbGU9dGhpcy5fY2xpcC5kdXJhdGlvbi9hO3JldHVybiB0aGlzLnN0b3BXYXJwaW5nKCl9LHN5bmNXaXRoOmZ1bmN0aW9uKGEpe3RoaXMudGltZT1hLnRpbWU7dGhpcy50aW1lU2NhbGU9YS50aW1lU2NhbGU7cmV0dXJuIHRoaXMuc3RvcFdhcnBpbmcoKX0saGFsdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy53YXJwKHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSwwLGEpfSx3YXJwOmZ1bmN0aW9uKGEsCmIsYyl7dmFyIGQ9dGhpcy5fbWl4ZXIsZT1kLnRpbWUsZj10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudCxnPXRoaXMudGltZVNjYWxlO251bGw9PT1mJiYodGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9Zj1kLl9sZW5kQ29udHJvbEludGVycG9sYW50KCkpO2Q9Zi5wYXJhbWV0ZXJQb3NpdGlvbnM7Zj1mLnNhbXBsZVZhbHVlcztkWzBdPWU7ZFsxXT1lK2M7ZlswXT1hL2c7ZlsxXT1iL2c7cmV0dXJuIHRoaXN9LHN0b3BXYXJwaW5nOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7bnVsbCE9PWEmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudChhKSk7cmV0dXJuIHRoaXN9LGdldE1peGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21peGVyfSxnZXRDbGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NsaXB9LGdldFJvb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9jYWxSb290fHwKdGhpcy5fbWl4ZXIuX3Jvb3R9LF91cGRhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYodGhpcy5lbmFibGVkKXt2YXIgZT10aGlzLl9zdGFydFRpbWU7aWYobnVsbCE9PWUpe2I9KGEtZSkqYztpZigwPmJ8fDA9PT1jKXJldHVybjt0aGlzLl9zdGFydFRpbWU9bnVsbDtiKj1jfWIqPXRoaXMuX3VwZGF0ZVRpbWVTY2FsZShhKTtjPXRoaXMuX3VwZGF0ZVRpbWUoYik7YT10aGlzLl91cGRhdGVXZWlnaHQoYSk7aWYoMDxhKXtiPXRoaXMuX2ludGVycG9sYW50cztmb3IodmFyIGU9dGhpcy5fcHJvcGVydHlCaW5kaW5ncyxmPTAsZz1iLmxlbmd0aDtmIT09ZzsrK2YpYltmXS5ldmFsdWF0ZShjKSxlW2ZdLmFjY3VtdWxhdGUoZCxhKX19ZWxzZSB0aGlzLl91cGRhdGVXZWlnaHQoYSl9LF91cGRhdGVXZWlnaHQ6ZnVuY3Rpb24oYSl7dmFyIGI9MDtpZih0aGlzLmVuYWJsZWQpe3ZhciBiPXRoaXMud2VpZ2h0LGM9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobnVsbCE9PWMpe3ZhciBkPWMuZXZhbHVhdGUoYSlbMF0sCmI9YipkO2E+Yy5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BGYWRpbmcoKSwwPT09ZCYmKHRoaXMuZW5hYmxlZD0hMSkpfX1yZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PWJ9LF91cGRhdGVUaW1lU2NhbGU6ZnVuY3Rpb24oYSl7dmFyIGI9MDtpZighdGhpcy5wYXVzZWQpe3ZhciBiPXRoaXMudGltZVNjYWxlLGM9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7aWYobnVsbCE9PWMpe3ZhciBkPWMuZXZhbHVhdGUoYSlbMF0sYj1iKmQ7YT5jLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSwwPT09Yj90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1iKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1ifSxfdXBkYXRlVGltZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnRpbWUrYTtpZigwPT09YSlyZXR1cm4gYjt2YXIgYz10aGlzLl9jbGlwLmR1cmF0aW9uLGQ9dGhpcy5sb29wLGU9dGhpcy5fbG9vcENvdW50O2lmKDIyMDA9PT0KZClhOntpZigtMT09PWUmJih0aGlzLl9sb29wQ291bnQ9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLCEwLCExKSksYj49YyliPWM7ZWxzZSBpZigwPmIpYj0wO2Vsc2UgYnJlYWsgYTt0aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMTt0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOjA+YT8tMToxfSl9ZWxzZXtkPTIyMDI9PT1kOy0xPT09ZSYmKDA8PWE/KGU9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLDA9PT10aGlzLnJlcGV0aXRpb25zLGQpKTp0aGlzLl9zZXRFbmRpbmdzKDA9PT10aGlzLnJlcGV0aXRpb25zLCEwLGQpKTtpZihiPj1jfHwwPmIpe3ZhciBmPU1hdGguZmxvb3IoYi9jKSxiPWItYypmLGU9ZStNYXRoLmFicyhmKSxnPXRoaXMucmVwZXRpdGlvbnMtZTswPmc/KHRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLGI9MDxhPwpjOjAsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjowPGE/MTotMX0pKTooMD09PWc/KGE9MD5hLHRoaXMuX3NldEVuZGluZ3MoYSwhYSxkKSk6dGhpcy5fc2V0RW5kaW5ncyghMSwhMSxkKSx0aGlzLl9sb29wQ291bnQ9ZSx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJsb29wIixhY3Rpb246dGhpcyxsb29wRGVsdGE6Zn0pKX1pZihkJiYxPT09KGUmMSkpcmV0dXJuIHRoaXMudGltZT1iLGMtYn1yZXR1cm4gdGhpcy50aW1lPWJ9LF9zZXRFbmRpbmdzOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzO2M/KGQuZW5kaW5nU3RhcnQ9MjQwMSxkLmVuZGluZ0VuZD0yNDAxKTooZC5lbmRpbmdTdGFydD1hP3RoaXMuemVyb1Nsb3BlQXRTdGFydD8yNDAxOjI0MDA6MjQwMixkLmVuZGluZ0VuZD1iP3RoaXMuemVyb1Nsb3BlQXRFbmQ/MjQwMToyNDAwOjI0MDIpfSxfc2NoZWR1bGVGYWRpbmc6ZnVuY3Rpb24oYSwKYixjKXt2YXIgZD10aGlzLl9taXhlcixlPWQudGltZSxmPXRoaXMuX3dlaWdodEludGVycG9sYW50O251bGw9PT1mJiYodGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9Zj1kLl9sZW5kQ29udHJvbEludGVycG9sYW50KCkpO2Q9Zi5wYXJhbWV0ZXJQb3NpdGlvbnM7Zj1mLnNhbXBsZVZhbHVlcztkWzBdPWU7ZlswXT1iO2RbMV09ZSthO2ZbMV09YztyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKFllLnByb3RvdHlwZSxzYS5wcm90b3R5cGUse19iaW5kQWN0aW9uOmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5fbG9jYWxSb290fHx0aGlzLl9yb290LGQ9YS5fY2xpcC50cmFja3MsZT1kLmxlbmd0aCxmPWEuX3Byb3BlcnR5QmluZGluZ3MsZz1hLl9pbnRlcnBvbGFudHMsaD1jLnV1aWQsaz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsbD1rW2hdO3ZvaWQgMD09PWwmJihsPXt9LGtbaF09bCk7Zm9yKGs9MDtrIT09ZTsrK2spe3ZhciBwPWRba10scT1wLm5hbWUsbj1sW3FdO2lmKHZvaWQgMD09PQpuKXtuPWZba107aWYodm9pZCAwIT09bil7bnVsbD09PW4uX2NhY2hlSW5kZXgmJigrK24ucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKG4saCxxKSk7Y29udGludWV9bj1uZXcgbGUob2EuY3JlYXRlKGMscSxiJiZiLl9wcm9wZXJ0eUJpbmRpbmdzW2tdLmJpbmRpbmcucGFyc2VkUGF0aCkscC5WYWx1ZVR5cGVOYW1lLHAuZ2V0VmFsdWVTaXplKCkpOysrbi5yZWZlcmVuY2VDb3VudDt0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcobixoLHEpfWZba109bjtnW2tdLnJlc3VsdEJ1ZmZlcj1uLmJ1ZmZlcn19LF9hY3RpdmF0ZUFjdGlvbjpmdW5jdGlvbihhKXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24oYSkpe2lmKG51bGw9PT1hLl9jYWNoZUluZGV4KXt2YXIgYj0oYS5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLGM9YS5fY2xpcC51dWlkLGQ9dGhpcy5fYWN0aW9uc0J5Q2xpcFtjXTt0aGlzLl9iaW5kQWN0aW9uKGEsZCYmZC5rbm93bkFjdGlvbnNbMF0pO3RoaXMuX2FkZEluYWN0aXZlQWN0aW9uKGEsCmMsYil9Yj1hLl9wcm9wZXJ0eUJpbmRpbmdzO2M9MDtmb3IoZD1iLmxlbmd0aDtjIT09ZDsrK2Mpe3ZhciBlPWJbY107MD09PWUudXNlQ291bnQrKyYmKHRoaXMuX2xlbmRCaW5kaW5nKGUpLGUuc2F2ZU9yaWdpbmFsU3RhdGUoKSl9dGhpcy5fbGVuZEFjdGlvbihhKX19LF9kZWFjdGl2YXRlQWN0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2lzQWN0aXZlQWN0aW9uKGEpKXtmb3IodmFyIGI9YS5fcHJvcGVydHlCaW5kaW5ncyxjPTAsZD1iLmxlbmd0aDtjIT09ZDsrK2Mpe3ZhciBlPWJbY107MD09PS0tZS51c2VDb3VudCYmKGUucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl90YWtlQmFja0JpbmRpbmcoZSkpfXRoaXMuX3Rha2VCYWNrQWN0aW9uKGEpfX0sX2luaXRNZW1vcnlNYW5hZ2VyOmZ1bmN0aW9uKCl7dGhpcy5fYWN0aW9ucz1bXTt0aGlzLl9uQWN0aXZlQWN0aW9ucz0wO3RoaXMuX2FjdGlvbnNCeUNsaXA9e307dGhpcy5fYmluZGluZ3M9W107dGhpcy5fbkFjdGl2ZUJpbmRpbmdzPQowO3RoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fTt0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdO3RoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7dmFyIGE9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gYS5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiBhLl9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gYS5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gYS5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIGEuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gYS5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19LF9pc0FjdGl2ZUFjdGlvbjpmdW5jdGlvbihhKXthPWEuX2NhY2hlSW5kZXg7cmV0dXJuIG51bGwhPT1hJiZhPHRoaXMuX25BY3RpdmVBY3Rpb25zfSwKX2FkZEluYWN0aXZlQWN0aW9uOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLl9hY3Rpb25zLGU9dGhpcy5fYWN0aW9uc0J5Q2xpcCxmPWVbYl07dm9pZCAwPT09Zj8oZj17a25vd25BY3Rpb25zOlthXSxhY3Rpb25CeVJvb3Q6e319LGEuX2J5Q2xpcENhY2hlSW5kZXg9MCxlW2JdPWYpOihiPWYua25vd25BY3Rpb25zLGEuX2J5Q2xpcENhY2hlSW5kZXg9Yi5sZW5ndGgsYi5wdXNoKGEpKTthLl9jYWNoZUluZGV4PWQubGVuZ3RoO2QucHVzaChhKTtmLmFjdGlvbkJ5Um9vdFtjXT1hfSxfcmVtb3ZlSW5hY3RpdmVBY3Rpb246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fYWN0aW9ucyxjPWJbYi5sZW5ndGgtMV0sZD1hLl9jYWNoZUluZGV4O2MuX2NhY2hlSW5kZXg9ZDtiW2RdPWM7Yi5wb3AoKTthLl9jYWNoZUluZGV4PW51bGw7dmFyIGI9YS5fY2xpcC51dWlkLGM9dGhpcy5fYWN0aW9uc0J5Q2xpcCxkPWNbYl0sZT1kLmtub3duQWN0aW9ucyxmPWVbZS5sZW5ndGgtMV0sZz1hLl9ieUNsaXBDYWNoZUluZGV4OwpmLl9ieUNsaXBDYWNoZUluZGV4PWc7ZVtnXT1mO2UucG9wKCk7YS5fYnlDbGlwQ2FjaGVJbmRleD1udWxsO2RlbGV0ZSBkLmFjdGlvbkJ5Um9vdFsoYS5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkXTswPT09ZS5sZW5ndGgmJmRlbGV0ZSBjW2JdO3RoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24oYSl9LF9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uOmZ1bmN0aW9uKGEpe2E9YS5fcHJvcGVydHlCaW5kaW5ncztmb3IodmFyIGI9MCxjPWEubGVuZ3RoO2IhPT1jOysrYil7dmFyIGQ9YVtiXTswPT09LS1kLnJlZmVyZW5jZUNvdW50JiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcoZCl9fSxfbGVuZEFjdGlvbjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLl9hY3Rpb25zLGM9YS5fY2FjaGVJbmRleCxkPXRoaXMuX25BY3RpdmVBY3Rpb25zKyssZT1iW2RdO2EuX2NhY2hlSW5kZXg9ZDtiW2RdPWE7ZS5fY2FjaGVJbmRleD1jO2JbY109ZX0sX3Rha2VCYWNrQWN0aW9uOmZ1bmN0aW9uKGEpe3ZhciBiPQp0aGlzLl9hY3Rpb25zLGM9YS5fY2FjaGVJbmRleCxkPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMsZT1iW2RdO2EuX2NhY2hlSW5kZXg9ZDtiW2RdPWE7ZS5fY2FjaGVJbmRleD1jO2JbY109ZX0sX2FkZEluYWN0aXZlQmluZGluZzpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLGU9ZFtiXSxmPXRoaXMuX2JpbmRpbmdzO3ZvaWQgMD09PWUmJihlPXt9LGRbYl09ZSk7ZVtjXT1hO2EuX2NhY2hlSW5kZXg9Zi5sZW5ndGg7Zi5wdXNoKGEpfSxfcmVtb3ZlSW5hY3RpdmVCaW5kaW5nOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2JpbmRpbmdzLGM9YS5iaW5kaW5nLGQ9Yy5yb290Tm9kZS51dWlkLGM9Yy5wYXRoLGU9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLGY9ZVtkXSxnPWJbYi5sZW5ndGgtMV07YT1hLl9jYWNoZUluZGV4O2cuX2NhY2hlSW5kZXg9YTtiW2FdPWc7Yi5wb3AoKTtkZWxldGUgZltjXTthOntmb3IodmFyIGggaW4gZilicmVhayBhOwpkZWxldGUgZVtkXX19LF9sZW5kQmluZGluZzpmdW5jdGlvbihhKXt2YXIgYj10aGlzLl9iaW5kaW5ncyxjPWEuX2NhY2hlSW5kZXgsZD10aGlzLl9uQWN0aXZlQmluZGluZ3MrKyxlPWJbZF07YS5fY2FjaGVJbmRleD1kO2JbZF09YTtlLl9jYWNoZUluZGV4PWM7YltjXT1lfSxfdGFrZUJhY2tCaW5kaW5nOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2JpbmRpbmdzLGM9YS5fY2FjaGVJbmRleCxkPS0tdGhpcy5fbkFjdGl2ZUJpbmRpbmdzLGU9YltkXTthLl9jYWNoZUluZGV4PWQ7YltkXT1hO2UuX2NhY2hlSW5kZXg9YztiW2NdPWV9LF9sZW5kQ29udHJvbEludGVycG9sYW50OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxiPXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzKyssYz1hW2JdO3ZvaWQgMD09PWMmJihjPW5ldyBXYyhuZXcgRmxvYXQzMkFycmF5KDIpLG5ldyBGbG9hdDMyQXJyYXkoMiksMSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyKSwKYy5fX2NhY2hlSW5kZXg9YixhW2JdPWMpO3JldHVybiBjfSxfdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxjPWEuX19jYWNoZUluZGV4LGQ9LS10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cyxlPWJbZF07YS5fX2NhY2hlSW5kZXg9ZDtiW2RdPWE7ZS5fX2NhY2hlSW5kZXg9YztiW2NdPWV9LF9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyOm5ldyBGbG9hdDMyQXJyYXkoMSksY2xpcEFjdGlvbjpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fHRoaXMuX3Jvb3QsZD1jLnV1aWQsZT0ic3RyaW5nIj09PXR5cGVvZiBhP0JhLmZpbmRCeU5hbWUoYyxhKTphLGM9bnVsbCE9PWU/ZS51dWlkOmEsZj10aGlzLl9hY3Rpb25zQnlDbGlwW2NdLGc9bnVsbDtpZih2b2lkIDAhPT1mKXtnPWYuYWN0aW9uQnlSb290W2RdO2lmKHZvaWQgMCE9PWcpcmV0dXJuIGc7Zz1mLmtub3duQWN0aW9uc1swXTtudWxsPT09CmUmJihlPWcuX2NsaXApfWlmKG51bGw9PT1lKXJldHVybiBudWxsO2U9bmV3IFhlKHRoaXMsZSxiKTt0aGlzLl9iaW5kQWN0aW9uKGUsZyk7dGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24oZSxjLGQpO3JldHVybiBlfSxleGlzdGluZ0FjdGlvbjpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fHRoaXMuX3Jvb3QsZD1jLnV1aWQsYz0ic3RyaW5nIj09PXR5cGVvZiBhP0JhLmZpbmRCeU5hbWUoYyxhKTphLGM9dGhpcy5fYWN0aW9uc0J5Q2xpcFtjP2MudXVpZDphXTtyZXR1cm4gdm9pZCAwIT09Yz9jLmFjdGlvbkJ5Um9vdFtkXXx8bnVsbDpudWxsfSxzdG9wQWxsQWN0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuX2FjdGlvbnMsYj10aGlzLl9uQWN0aXZlQWN0aW9ucyxjPXRoaXMuX2JpbmRpbmdzLGQ9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzLGU9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzPXRoaXMuX25BY3RpdmVBY3Rpb25zPTA7ZSE9PWI7KytlKWFbZV0ucmVzZXQoKTtmb3IoZT0wO2UhPT1kOysrZSljW2VdLnVzZUNvdW50PQowO3JldHVybiB0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oYSl7YSo9dGhpcy50aW1lU2NhbGU7Zm9yKHZhciBiPXRoaXMuX2FjdGlvbnMsYz10aGlzLl9uQWN0aXZlQWN0aW9ucyxkPXRoaXMudGltZSs9YSxlPU1hdGguc2lnbihhKSxmPXRoaXMuX2FjY3VJbmRleF49MSxnPTA7ZyE9PWM7KytnKWJbZ10uX3VwZGF0ZShkLGEsZSxmKTthPXRoaXMuX2JpbmRpbmdzO2I9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihnPTA7ZyE9PWI7KytnKWFbZ10uYXBwbHkoZik7cmV0dXJuIHRoaXN9LGdldFJvb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sdW5jYWNoZUNsaXA6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fYWN0aW9uczthPWEudXVpZDt2YXIgYz10aGlzLl9hY3Rpb25zQnlDbGlwLGQ9Y1thXTtpZih2b2lkIDAhPT1kKXtmb3IodmFyIGQ9ZC5rbm93bkFjdGlvbnMsZT0wLGY9ZC5sZW5ndGg7ZSE9PWY7KytlKXt2YXIgZz1kW2VdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oZyk7dmFyIGg9CmcuX2NhY2hlSW5kZXgsaz1iW2IubGVuZ3RoLTFdO2cuX2NhY2hlSW5kZXg9bnVsbDtnLl9ieUNsaXBDYWNoZUluZGV4PW51bGw7ay5fY2FjaGVJbmRleD1oO2JbaF09aztiLnBvcCgpO3RoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24oZyl9ZGVsZXRlIGNbYV19fSx1bmNhY2hlUm9vdDpmdW5jdGlvbihhKXthPWEudXVpZDt2YXIgYj10aGlzLl9hY3Rpb25zQnlDbGlwLGM7Zm9yKGMgaW4gYil7dmFyIGQ9YltjXS5hY3Rpb25CeVJvb3RbYV07dm9pZCAwIT09ZCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oZCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oZCkpfWM9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lW2FdO2lmKHZvaWQgMCE9PWMpZm9yKHZhciBlIGluIGMpYT1jW2VdLGEucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcoYSl9LHVuY2FjaGVBY3Rpb246ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmV4aXN0aW5nQWN0aW9uKGEsCmIpO251bGwhPT1jJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihjKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihjKSl9fSk7SmQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKZCh2b2lkIDA9PT10aGlzLnZhbHVlLmNsb25lP3RoaXMudmFsdWU6dGhpcy52YWx1ZS5jbG9uZSgpKX07bWUucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOm1lLGlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk6ITAsYWRkR3JvdXA6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OmEsY291bnQ6YixtYXRlcmlhbEluZGV4OmN9KX0sY29weTpmdW5jdGlvbihhKXt2YXIgYj1hLmluZGV4O251bGwhPT1iJiZ0aGlzLnNldEluZGV4KGIuY2xvbmUoKSk7dmFyIGI9YS5hdHRyaWJ1dGVzLGM7Zm9yKGMgaW4gYil0aGlzLmFkZEF0dHJpYnV0ZShjLGJbY10uY2xvbmUoKSk7YT1hLmdyb3VwcztjPTA7Zm9yKGI9CmEubGVuZ3RoO2M8YjtjKyspe3ZhciBkPWFbY107dGhpcy5hZGRHcm91cChkLnN0YXJ0LGQuY291bnQsZC5tYXRlcmlhbEluZGV4KX1yZXR1cm4gdGhpc319KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuZS5wcm90b3R5cGUse2NvdW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmNvdW50fX0sYXJyYXk6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuYXJyYXl9fX0pO09iamVjdC5hc3NpZ24obmUucHJvdG90eXBlLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLHNldFg6ZnVuY3Rpb24oYSxiKXt0aGlzLmRhdGEuYXJyYXlbYSp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1iO3JldHVybiB0aGlzfSxzZXRZOmZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhLmFycmF5W2EqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXT1iO3JldHVybiB0aGlzfSxzZXRaOmZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhLmFycmF5W2EqdGhpcy5kYXRhLnN0cmlkZSsKdGhpcy5vZmZzZXQrMl09YjtyZXR1cm4gdGhpc30sc2V0VzpmdW5jdGlvbihhLGIpe3RoaXMuZGF0YS5hcnJheVthKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM109YjtyZXR1cm4gdGhpc30sZ2V0WDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W2EqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19LGdldFk6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVthKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV19LGdldFo6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVthKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl19LGdldFc6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVthKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119LHNldFhZOmZ1bmN0aW9uKGEsYixjKXthPWEqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDt0aGlzLmRhdGEuYXJyYXlbYSswXT1iO3RoaXMuZGF0YS5hcnJheVthKwoxXT1jO3JldHVybiB0aGlzfSxzZXRYWVo6ZnVuY3Rpb24oYSxiLGMsZCl7YT1hKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7dGhpcy5kYXRhLmFycmF5W2ErMF09Yjt0aGlzLmRhdGEuYXJyYXlbYSsxXT1jO3RoaXMuZGF0YS5hcnJheVthKzJdPWQ7cmV0dXJuIHRoaXN9LHNldFhZWlc6ZnVuY3Rpb24oYSxiLGMsZCxlKXthPWEqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDt0aGlzLmRhdGEuYXJyYXlbYSswXT1iO3RoaXMuZGF0YS5hcnJheVthKzFdPWM7dGhpcy5kYXRhLmFycmF5W2ErMl09ZDt0aGlzLmRhdGEuYXJyYXlbYSszXT1lO3JldHVybiB0aGlzfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrYy5wcm90b3R5cGUsIm5lZWRzVXBkYXRlIix7c2V0OmZ1bmN0aW9uKGEpeyEwPT09YSYmdGhpcy52ZXJzaW9uKyt9fSk7T2JqZWN0LmFzc2lnbihrYy5wcm90b3R5cGUse2lzSW50ZXJsZWF2ZWRCdWZmZXI6ITAsc2V0QXJyYXk6ZnVuY3Rpb24oYSl7aWYoQXJyYXkuaXNBcnJheShhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpOwp0aGlzLmNvdW50PXZvaWQgMCE9PWE/YS5sZW5ndGgvdGhpcy5zdHJpZGU6MDt0aGlzLmFycmF5PWF9LHNldER5bmFtaWM6ZnVuY3Rpb24oYSl7dGhpcy5keW5hbWljPWE7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5hcnJheT1uZXcgYS5hcnJheS5jb25zdHJ1Y3RvcihhLmFycmF5KTt0aGlzLmNvdW50PWEuY291bnQ7dGhpcy5zdHJpZGU9YS5zdHJpZGU7dGhpcy5keW5hbWljPWEuZHluYW1pYztyZXR1cm4gdGhpc30sY29weUF0OmZ1bmN0aW9uKGEsYixjKXthKj10aGlzLnN0cmlkZTtjKj1iLnN0cmlkZTtmb3IodmFyIGQ9MCxlPXRoaXMuc3RyaWRlO2Q8ZTtkKyspdGhpcy5hcnJheVthK2RdPWIuYXJyYXlbYytkXTtyZXR1cm4gdGhpc30sc2V0OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9MCk7dGhpcy5hcnJheS5zZXQoYSxiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LG9uVXBsb2FkOmZ1bmN0aW9uKGEpe3RoaXMub25VcGxvYWRDYWxsYmFjaz0KYTtyZXR1cm4gdGhpc319KTtvZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGtjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOm9lLGlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXI6ITAsY29weTpmdW5jdGlvbihhKXtrYy5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5tZXNoUGVyQXR0cmlidXRlPWEubWVzaFBlckF0dHJpYnV0ZTtyZXR1cm4gdGhpc319KTtwZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEwucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6cGUsaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6ITAsY29weTpmdW5jdGlvbihhKXtMLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9YS5tZXNoUGVyQXR0cmlidXRlO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oWmUucHJvdG90eXBlLHtsaW5lUHJlY2lzaW9uOjEsc2V0OmZ1bmN0aW9uKGEsYil7dGhpcy5yYXkuc2V0KGEsCmIpfSxzZXRGcm9tQ2FtZXJhOmZ1bmN0aW9uKGEsYil7YiYmYi5pc1BlcnNwZWN0aXZlQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGIubWF0cml4V29ybGQpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQoYS54LGEueSwuNSkudW5wcm9qZWN0KGIpLnN1Yih0aGlzLnJheS5vcmlnaW4pLm5vcm1hbGl6ZSgpKTpiJiZiLmlzT3J0aG9ncmFwaGljQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0KGEueCxhLnksKGIubmVhcitiLmZhcikvKGIubmVhci1iLmZhcikpLnVucHJvamVjdChiKSx0aGlzLnJheS5kaXJlY3Rpb24uc2V0KDAsMCwtMSkudHJhbnNmb3JtRGlyZWN0aW9uKGIubWF0cml4V29ybGQpKTpjb25zb2xlLmVycm9yKCJUSFJFRS5SYXljYXN0ZXI6IFVuc3VwcG9ydGVkIGNhbWVyYSB0eXBlLiIpfSxpbnRlcnNlY3RPYmplY3Q6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtxZShhLHRoaXMsYyxiKTtjLnNvcnQoJGUpO3JldHVybiBjfSxpbnRlcnNlY3RPYmplY3RzOmZ1bmN0aW9uKGEsCmIpe3ZhciBjPVtdO2lmKCExPT09QXJyYXkuaXNBcnJheShhKSlyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0czogb2JqZWN0cyBpcyBub3QgYW4gQXJyYXkuIiksYztmb3IodmFyIGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspcWUoYVtkXSx0aGlzLGMsYik7Yy5zb3J0KCRlKTtyZXR1cm4gY319KTtPYmplY3QuYXNzaWduKGFmLnByb3RvdHlwZSx7c3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLm9sZFRpbWU9dGhpcy5zdGFydFRpbWU9KCJ1bmRlZmluZWQiPT09dHlwZW9mIHBlcmZvcm1hbmNlP0RhdGU6cGVyZm9ybWFuY2UpLm5vdygpO3RoaXMuZWxhcHNlZFRpbWU9MDt0aGlzLnJ1bm5pbmc9ITB9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmdldEVsYXBzZWRUaW1lKCk7dGhpcy5ydW5uaW5nPSExfSxnZXRFbGFwc2VkVGltZTpmdW5jdGlvbigpe3RoaXMuZ2V0RGVsdGEoKTtyZXR1cm4gdGhpcy5lbGFwc2VkVGltZX0sZ2V0RGVsdGE6ZnVuY3Rpb24oKXt2YXIgYT0KMDtpZih0aGlzLmF1dG9TdGFydCYmIXRoaXMucnVubmluZylyZXR1cm4gdGhpcy5zdGFydCgpLDA7aWYodGhpcy5ydW5uaW5nKXt2YXIgYj0oInVuZGVmaW5lZCI9PT10eXBlb2YgcGVyZm9ybWFuY2U/RGF0ZTpwZXJmb3JtYW5jZSkubm93KCksYT0oYi10aGlzLm9sZFRpbWUpLzFFMzt0aGlzLm9sZFRpbWU9Yjt0aGlzLmVsYXBzZWRUaW1lKz1hfXJldHVybiBhfX0pO09iamVjdC5hc3NpZ24oYmYucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3RoaXMucmFkaXVzPWE7dGhpcy5waGk9Yjt0aGlzLnRoZXRhPWM7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMucmFkaXVzPWEucmFkaXVzO3RoaXMucGhpPWEucGhpO3RoaXMudGhldGE9YS50aGV0YTtyZXR1cm4gdGhpc30sbWFrZVNhZmU6ZnVuY3Rpb24oKXt0aGlzLnBoaT1NYXRoLm1heCgxRS02LE1hdGgubWluKE1hdGguUEktCjFFLTYsdGhpcy5waGkpKTtyZXR1cm4gdGhpc30sc2V0RnJvbVZlY3RvcjM6ZnVuY3Rpb24oYSl7dGhpcy5yYWRpdXM9YS5sZW5ndGgoKTswPT09dGhpcy5yYWRpdXM/dGhpcy5waGk9dGhpcy50aGV0YT0wOih0aGlzLnRoZXRhPU1hdGguYXRhbjIoYS54LGEueiksdGhpcy5waGk9TWF0aC5hY29zKFkuY2xhbXAoYS55L3RoaXMucmFkaXVzLC0xLDEpKSk7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihjZi5wcm90b3R5cGUse3NldDpmdW5jdGlvbihhLGIsYyl7dGhpcy5yYWRpdXM9YTt0aGlzLnRoZXRhPWI7dGhpcy55PWM7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMucmFkaXVzPWEucmFkaXVzO3RoaXMudGhldGE9YS50aGV0YTt0aGlzLnk9YS55O3JldHVybiB0aGlzfSxzZXRGcm9tVmVjdG9yMzpmdW5jdGlvbihhKXt0aGlzLnJhZGl1cz1NYXRoLnNxcnQoYS54KgphLngrYS56KmEueik7dGhpcy50aGV0YT1NYXRoLmF0YW4yKGEueCxhLnopO3RoaXMueT1hLnk7cmV0dXJuIHRoaXN9fSk7cmEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQ2EucHJvdG90eXBlKTtyYS5wcm90b3R5cGUuY29uc3RydWN0b3I9cmE7cmEucHJvdG90eXBlLmNyZWF0ZUFuaW1hdGlvbj1mdW5jdGlvbihhLGIsYyxkKXtiPXtzdGFydDpiLGVuZDpjLGxlbmd0aDpjLWIrMSxmcHM6ZCxkdXJhdGlvbjooYy1iKS9kLGxhc3RGcmFtZTowLGN1cnJlbnRGcmFtZTowLGFjdGl2ZTohMSx0aW1lOjAsZGlyZWN0aW9uOjEsd2VpZ2h0OjEsZGlyZWN0aW9uQmFja3dhcmRzOiExLG1pcnJvcmVkTG9vcDohMX07dGhpcy5hbmltYXRpb25zTWFwW2FdPWI7dGhpcy5hbmltYXRpb25zTGlzdC5wdXNoKGIpfTtyYS5wcm90b3R5cGUuYXV0b0NyZWF0ZUFuaW1hdGlvbnM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPS8oW2Etel0rKV8/KFxkKykvaSxjLGQ9e30sZT10aGlzLmdlb21ldHJ5LGY9MCxnPWUubW9ycGhUYXJnZXRzLmxlbmd0aDtmPApnO2YrKyl7dmFyIGg9ZS5tb3JwaFRhcmdldHNbZl0ubmFtZS5tYXRjaChiKTtpZihoJiYxPGgubGVuZ3RoKXt2YXIgaz1oWzFdO2Rba118fChkW2tdPXtzdGFydDpJbmZpbml0eSxlbmQ6LUluZmluaXR5fSk7aD1kW2tdO2Y8aC5zdGFydCYmKGguc3RhcnQ9Zik7Zj5oLmVuZCYmKGguZW5kPWYpO2N8fChjPWspfX1mb3IoayBpbiBkKWg9ZFtrXSx0aGlzLmNyZWF0ZUFuaW1hdGlvbihrLGguc3RhcnQsaC5lbmQsYSk7dGhpcy5maXJzdEFuaW1hdGlvbj1jfTtyYS5wcm90b3R5cGUuc2V0QW5pbWF0aW9uRGlyZWN0aW9uRm9yd2FyZD1mdW5jdGlvbihhKXtpZihhPXRoaXMuYW5pbWF0aW9uc01hcFthXSlhLmRpcmVjdGlvbj0xLGEuZGlyZWN0aW9uQmFja3dhcmRzPSExfTtyYS5wcm90b3R5cGUuc2V0QW5pbWF0aW9uRGlyZWN0aW9uQmFja3dhcmQ9ZnVuY3Rpb24oYSl7aWYoYT10aGlzLmFuaW1hdGlvbnNNYXBbYV0pYS5kaXJlY3Rpb249LTEsYS5kaXJlY3Rpb25CYWNrd2FyZHM9ITB9O3JhLnByb3RvdHlwZS5zZXRBbmltYXRpb25GUFM9CmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5hbmltYXRpb25zTWFwW2FdO2MmJihjLmZwcz1iLGMuZHVyYXRpb249KGMuZW5kLWMuc3RhcnQpL2MuZnBzKX07cmEucHJvdG90eXBlLnNldEFuaW1hdGlvbkR1cmF0aW9uPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5hbmltYXRpb25zTWFwW2FdO2MmJihjLmR1cmF0aW9uPWIsYy5mcHM9KGMuZW5kLWMuc3RhcnQpL2MuZHVyYXRpb24pfTtyYS5wcm90b3R5cGUuc2V0QW5pbWF0aW9uV2VpZ2h0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5hbmltYXRpb25zTWFwW2FdO2MmJihjLndlaWdodD1iKX07cmEucHJvdG90eXBlLnNldEFuaW1hdGlvblRpbWU9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmFuaW1hdGlvbnNNYXBbYV07YyYmKGMudGltZT1iKX07cmEucHJvdG90eXBlLmdldEFuaW1hdGlvblRpbWU9ZnVuY3Rpb24oYSl7dmFyIGI9MDtpZihhPXRoaXMuYW5pbWF0aW9uc01hcFthXSliPWEudGltZTtyZXR1cm4gYn07cmEucHJvdG90eXBlLmdldEFuaW1hdGlvbkR1cmF0aW9uPQpmdW5jdGlvbihhKXt2YXIgYj0tMTtpZihhPXRoaXMuYW5pbWF0aW9uc01hcFthXSliPWEuZHVyYXRpb247cmV0dXJuIGJ9O3JhLnByb3RvdHlwZS5wbGF5QW5pbWF0aW9uPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYW5pbWF0aW9uc01hcFthXTtiPyhiLnRpbWU9MCxiLmFjdGl2ZT0hMCk6Y29uc29sZS53YXJuKCJUSFJFRS5Nb3JwaEJsZW5kTWVzaDogYW5pbWF0aW9uWyIrYSsiXSB1bmRlZmluZWQgaW4gLnBsYXlBbmltYXRpb24oKSIpfTtyYS5wcm90b3R5cGUuc3RvcEFuaW1hdGlvbj1mdW5jdGlvbihhKXtpZihhPXRoaXMuYW5pbWF0aW9uc01hcFthXSlhLmFjdGl2ZT0hMX07cmEucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPXRoaXMuYW5pbWF0aW9uc0xpc3QubGVuZ3RoO2I8YztiKyspe3ZhciBkPXRoaXMuYW5pbWF0aW9uc0xpc3RbYl07aWYoZC5hY3RpdmUpe3ZhciBlPWQuZHVyYXRpb24vZC5sZW5ndGg7ZC50aW1lKz1kLmRpcmVjdGlvbiphO2lmKGQubWlycm9yZWRMb29wKXtpZihkLnRpbWU+CmQuZHVyYXRpb258fDA+ZC50aW1lKWQuZGlyZWN0aW9uKj0tMSxkLnRpbWU+ZC5kdXJhdGlvbiYmKGQudGltZT1kLmR1cmF0aW9uLGQuZGlyZWN0aW9uQmFja3dhcmRzPSEwKSwwPmQudGltZSYmKGQudGltZT0wLGQuZGlyZWN0aW9uQmFja3dhcmRzPSExKX1lbHNlIGQudGltZSU9ZC5kdXJhdGlvbiwwPmQudGltZSYmKGQudGltZSs9ZC5kdXJhdGlvbik7dmFyIGY9ZC5zdGFydCtZLmNsYW1wKE1hdGguZmxvb3IoZC50aW1lL2UpLDAsZC5sZW5ndGgtMSksZz1kLndlaWdodDtmIT09ZC5jdXJyZW50RnJhbWUmJih0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1tkLmxhc3RGcmFtZV09MCx0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1tkLmN1cnJlbnRGcmFtZV09MSpnLHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzW2ZdPTAsZC5sYXN0RnJhbWU9ZC5jdXJyZW50RnJhbWUsZC5jdXJyZW50RnJhbWU9Zik7ZT1kLnRpbWUlZS9lO2QuZGlyZWN0aW9uQmFja3dhcmRzJiYoZT0xLWUpO2QuY3VycmVudEZyYW1lIT09CmQubGFzdEZyYW1lPyh0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1tkLmN1cnJlbnRGcmFtZV09ZSpnLHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzW2QubGFzdEZyYW1lXT0oMS1lKSpnKTp0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1tkLmN1cnJlbnRGcmFtZV09Z319fTskYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSk7JGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPSRjOyRjLnByb3RvdHlwZS5pc0ltbWVkaWF0ZVJlbmRlck9iamVjdD0hMDthZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkYS5wcm90b3R5cGUpO2FkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hZDthZC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcCxjPW5ldyBLYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD1bImEiLCJiIiwiYyJdO3RoaXMub2JqZWN0LnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtjLmdldE5vcm1hbE1hdHJpeCh0aGlzLm9iamVjdC5tYXRyaXhXb3JsZCk7CnZhciBlPXRoaXMub2JqZWN0Lm1hdHJpeFdvcmxkLGY9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLGc9dGhpcy5vYmplY3QuZ2VvbWV0cnk7aWYoZyYmZy5pc0dlb21ldHJ5KWZvcih2YXIgaD1nLnZlcnRpY2VzLGs9Zy5mYWNlcyxsPWc9MCxwPWsubGVuZ3RoO2w8cDtsKyspZm9yKHZhciBxPWtbbF0sbj0wLHI9cS52ZXJ0ZXhOb3JtYWxzLmxlbmd0aDtuPHI7bisrKXt2YXIgej1xLnZlcnRleE5vcm1hbHNbbl07YS5jb3B5KGhbcVtkW25dXV0pLmFwcGx5TWF0cml4NChlKTtiLmNvcHkoeikuYXBwbHlNYXRyaXgzKGMpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHRoaXMuc2l6ZSkuYWRkKGEpO2Yuc2V0WFlaKGcsYS54LGEueSxhLnopO2crPTE7Zi5zZXRYWVooZyxiLngsYi55LGIueik7Zys9MX1lbHNlIGlmKGcmJmcuaXNCdWZmZXJHZW9tZXRyeSlmb3IoZD1nLmF0dHJpYnV0ZXMucG9zaXRpb24saD1nLmF0dHJpYnV0ZXMubm9ybWFsLG49Zz0wLHI9ZC5jb3VudDtuPApyO24rKylhLnNldChkLmdldFgobiksZC5nZXRZKG4pLGQuZ2V0WihuKSkuYXBwbHlNYXRyaXg0KGUpLGIuc2V0KGguZ2V0WChuKSxoLmdldFkobiksaC5nZXRaKG4pKSxiLmFwcGx5TWF0cml4MyhjKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0aGlzLnNpemUpLmFkZChhKSxmLnNldFhZWihnLGEueCxhLnksYS56KSxnKz0xLGYuc2V0WFlaKGcsYi54LGIueSxiLnopLGcrPTE7Zi5uZWVkc1VwZGF0ZT0hMH19KCk7bGMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpO2xjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1sYztsYy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuY29uZS5nZW9tZXRyeS5kaXNwb3NlKCk7dGhpcy5jb25lLm1hdGVyaWFsLmRpc3Bvc2UoKX07bGMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5saWdodC5kaXN0YW5jZT90aGlzLmxpZ2h0LmRpc3RhbmNlOgoxRTMsZD1jKk1hdGgudGFuKHRoaXMubGlnaHQuYW5nbGUpO3RoaXMuY29uZS5zY2FsZS5zZXQoZCxkLGMpO2Euc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQubWF0cml4V29ybGQpO2Iuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQudGFyZ2V0Lm1hdHJpeFdvcmxkKTt0aGlzLmNvbmUubG9va0F0KGIuc3ViKGEpKTt0aGlzLmNvbmUubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKX19KCk7bWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGEucHJvdG90eXBlKTttYy5wcm90b3R5cGUuY29uc3RydWN0b3I9bWM7bWMucHJvdG90eXBlLmdldEJvbmVMaXN0PWZ1bmN0aW9uKGEpe3ZhciBiPVtdO2EmJmEuaXNCb25lJiZiLnB1c2goYSk7Zm9yKHZhciBjPTA7YzxhLmNoaWxkcmVuLmxlbmd0aDtjKyspYi5wdXNoLmFwcGx5KGIsdGhpcy5nZXRCb25lTGlzdChhLmNoaWxkcmVuW2NdKSk7cmV0dXJuIGJ9O21jLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYT0KbmV3IHAsYj1uZXcgSixjPW5ldyBKO3JldHVybiBmdW5jdGlvbigpe3ZhciBkPXRoaXMuZ2VvbWV0cnksZT1kLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtjLmdldEludmVyc2UodGhpcy5yb290Lm1hdHJpeFdvcmxkKTtmb3IodmFyIGY9MCxnPTA7Zjx0aGlzLmJvbmVzLmxlbmd0aDtmKyspe3ZhciBoPXRoaXMuYm9uZXNbZl07aC5wYXJlbnQmJmgucGFyZW50LmlzQm9uZSYmKGIubXVsdGlwbHlNYXRyaWNlcyhjLGgubWF0cml4V29ybGQpLGEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGIpLGUuc2V0WFlaKGcsYS54LGEueSxhLnopLGIubXVsdGlwbHlNYXRyaWNlcyhjLGgucGFyZW50Lm1hdHJpeFdvcmxkKSxhLnNldEZyb21NYXRyaXhQb3NpdGlvbihiKSxlLnNldFhZWihnKzEsYS54LGEueSxhLnopLGcrPTIpfWQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwfX0oKTtuYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShDYS5wcm90b3R5cGUpO25jLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0KbmM7bmMucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKTt0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX07bmMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3RoaXMubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKX07b2MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpO29jLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1vYztvYy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuY2hpbGRyZW5bMF0uZ2VvbWV0cnkuZGlzcG9zZSgpO3RoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuZGlzcG9zZSgpfTtvYy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jaGlsZHJlblswXTthLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcik7dmFyIGI9LjUqdGhpcy5saWdodC53aWR0aCxjPS41KnRoaXMubGlnaHQuaGVpZ2h0LGE9YS5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLApkPWEuYXJyYXk7ZFswXT1iO2RbMV09LWM7ZFsyXT0wO2RbM109YjtkWzRdPWM7ZFs1XT0wO2RbNl09LWI7ZFs3XT1jO2RbOF09MDtkWzldPS1iO2RbMTBdPS1jO2RbMTFdPTA7ZFsxMl09YjtkWzEzXT0tYztkWzE0XT0wO2EubmVlZHNVcGRhdGU9ITB9O3BjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKTtwYy5wcm90b3R5cGUuY29uc3RydWN0b3I9cGM7cGMucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmNoaWxkcmVuWzBdLmdlb21ldHJ5LmRpc3Bvc2UoKTt0aGlzLmNoaWxkcmVuWzBdLm1hdGVyaWFsLmRpc3Bvc2UoKX07cGMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IEgsYz1uZXcgSDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD10aGlzLmNoaWxkcmVuWzBdLGU9ZC5nZW9tZXRyeS5nZXRBdHRyaWJ1dGUoImNvbG9yIik7Yi5jb3B5KHRoaXMubGlnaHQuY29sb3IpO2MuY29weSh0aGlzLmxpZ2h0Lmdyb3VuZENvbG9yKTsKZm9yKHZhciBmPTAsZz1lLmNvdW50O2Y8ZztmKyspe3ZhciBoPWY8Zy8yP2I6YztlLnNldFhZWihmLGgucixoLmcsaC5iKX1kLmxvb2tBdChhLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKS5uZWdhdGUoKSk7ZS5uZWVkc1VwZGF0ZT0hMH19KCk7YmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGEucHJvdG90eXBlKTtiZC5wcm90b3R5cGUuY29uc3RydWN0b3I9YmQ7S2QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGEucHJvdG90eXBlKTtLZC5wcm90b3R5cGUuY29uc3RydWN0b3I9S2Q7Y2QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGEucHJvdG90eXBlKTtjZC5wcm90b3R5cGUuY29uc3RydWN0b3I9Y2Q7Y2QucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHAsYz1uZXcgS2E7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5vYmplY3QudXBkYXRlTWF0cml4V29ybGQoITApO2MuZ2V0Tm9ybWFsTWF0cml4KHRoaXMub2JqZWN0Lm1hdHJpeFdvcmxkKTsKZm9yKHZhciBkPXRoaXMub2JqZWN0Lm1hdHJpeFdvcmxkLGU9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLGY9dGhpcy5vYmplY3QuZ2VvbWV0cnksZz1mLnZlcnRpY2VzLGY9Zi5mYWNlcyxoPTAsaz0wLGw9Zi5sZW5ndGg7azxsO2srKyl7dmFyIHA9ZltrXSxxPXAubm9ybWFsO2EuY29weShnW3AuYV0pLmFkZChnW3AuYl0pLmFkZChnW3AuY10pLmRpdmlkZVNjYWxhcigzKS5hcHBseU1hdHJpeDQoZCk7Yi5jb3B5KHEpLmFwcGx5TWF0cml4MyhjKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0aGlzLnNpemUpLmFkZChhKTtlLnNldFhZWihoLGEueCxhLnksYS56KTtoKz0xO2Uuc2V0WFlaKGgsYi54LGIueSxiLnopO2grPTF9ZS5uZWVkc1VwZGF0ZT0hMH19KCk7cWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpO3FjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1xYztxYy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuY2hpbGRyZW5bMF0sCmI9dGhpcy5jaGlsZHJlblsxXTthLmdlb21ldHJ5LmRpc3Bvc2UoKTthLm1hdGVyaWFsLmRpc3Bvc2UoKTtiLmdlb21ldHJ5LmRpc3Bvc2UoKTtiLm1hdGVyaWFsLmRpc3Bvc2UoKX07cWMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHAsYz1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oKXthLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKTtiLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCk7Yy5zdWJWZWN0b3JzKGIsYSk7dmFyIGQ9dGhpcy5jaGlsZHJlblswXSxlPXRoaXMuY2hpbGRyZW5bMV07ZC5sb29rQXQoYyk7ZC5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpO2UubG9va0F0KGMpO2Uuc2NhbGUuej1jLmxlbmd0aCgpfX0oKTtkZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkYS5wcm90b3R5cGUpO2RkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1kZDsKZGQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxnLGgsayl7ZC5zZXQoZyxoLGspLnVucHJvamVjdChlKTthPWNbYV07aWYodm9pZCAwIT09YSlmb3IoZz1iLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKSxoPTAsaz1hLmxlbmd0aDtoPGs7aCsrKWcuc2V0WFlaKGFbaF0sZC54LGQueSxkLnopfXZhciBiLGMsZD1uZXcgcCxlPW5ldyBPYTtyZXR1cm4gZnVuY3Rpb24oKXtiPXRoaXMuZ2VvbWV0cnk7Yz10aGlzLnBvaW50TWFwO2UucHJvamVjdGlvbk1hdHJpeC5jb3B5KHRoaXMuY2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO2EoImMiLDAsMCwtMSk7YSgidCIsMCwwLDEpO2EoIm4xIiwtMSwtMSwtMSk7YSgibjIiLDEsLTEsLTEpO2EoIm4zIiwtMSwxLC0xKTthKCJuNCIsMSwxLC0xKTthKCJmMSIsLTEsLTEsMSk7YSgiZjIiLDEsLTEsMSk7YSgiZjMiLC0xLDEsMSk7YSgiZjQiLDEsMSwxKTthKCJ1MSIsLjcsMS4xLC0xKTthKCJ1MiIsLS43LDEuMSwtMSk7YSgidTMiLAowLDIsLTEpO2EoImNmMSIsLTEsMCwxKTthKCJjZjIiLDEsMCwxKTthKCJjZjMiLDAsLTEsMSk7YSgiY2Y0IiwwLDEsMSk7YSgiY24xIiwtMSwwLC0xKTthKCJjbjIiLDEsMCwtMSk7YSgiY24zIiwwLC0xLC0xKTthKCJjbjQiLDAsMSwtMSk7Yi5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIikubmVlZHNVcGRhdGU9ITB9fSgpO0JiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGRhLnByb3RvdHlwZSk7QmIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUJiO0JiLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgVGE7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZvaWQgMCE9PWImJmNvbnNvbGUud2FybigiVEhSRUUuQm94SGVscGVyOiAudXBkYXRlKCkgaGFzIG5vIGxvbmdlciBhcmd1bWVudHMuIik7dm9pZCAwIT09dGhpcy5vYmplY3QmJmEuc2V0RnJvbU9iamVjdCh0aGlzLm9iamVjdCk7aWYoIWEuaXNFbXB0eSgpKXtiPWEubWluO3ZhciBjPWEubWF4LGQ9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLAplPWQuYXJyYXk7ZVswXT1jLng7ZVsxXT1jLnk7ZVsyXT1jLno7ZVszXT1iLng7ZVs0XT1jLnk7ZVs1XT1jLno7ZVs2XT1iLng7ZVs3XT1iLnk7ZVs4XT1jLno7ZVs5XT1jLng7ZVsxMF09Yi55O2VbMTFdPWMuejtlWzEyXT1jLng7ZVsxM109Yy55O2VbMTRdPWIuejtlWzE1XT1iLng7ZVsxNl09Yy55O2VbMTddPWIuejtlWzE4XT1iLng7ZVsxOV09Yi55O2VbMjBdPWIuejtlWzIxXT1jLng7ZVsyMl09Yi55O2VbMjNdPWIuejtkLm5lZWRzVXBkYXRlPSEwO3RoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9fX0oKTtCYi5wcm90b3R5cGUuc2V0RnJvbU9iamVjdD1mdW5jdGlvbihhKXt0aGlzLm9iamVjdD1hO3RoaXMudXBkYXRlKCk7cmV0dXJuIHRoaXN9O3ZhciBMZCxyZTtDYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSk7Q2IucHJvdG90eXBlLmNvbnN0cnVjdG9yPUNiO0NiLnByb3RvdHlwZS5zZXREaXJlY3Rpb249ZnVuY3Rpb24oKXt2YXIgYT0KbmV3IHAsYjtyZXR1cm4gZnVuY3Rpb24oYyl7Ljk5OTk5PGMueT90aGlzLnF1YXRlcm5pb24uc2V0KDAsMCwwLDEpOi0uOTk5OTk+Yy55P3RoaXMucXVhdGVybmlvbi5zZXQoMSwwLDAsMCk6KGEuc2V0KGMueiwwLC1jLngpLm5vcm1hbGl6ZSgpLGI9TWF0aC5hY29zKGMueSksdGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoYSxiKSl9fSgpO0NiLnByb3RvdHlwZS5zZXRMZW5ndGg9ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMD09PWImJihiPS4yKmEpO3ZvaWQgMD09PWMmJihjPS4yKmIpO3RoaXMubGluZS5zY2FsZS5zZXQoMSxNYXRoLm1heCgwLGEtYiksMSk7dGhpcy5saW5lLnVwZGF0ZU1hdHJpeCgpO3RoaXMuY29uZS5zY2FsZS5zZXQoYyxiLGMpO3RoaXMuY29uZS5wb3NpdGlvbi55PWE7dGhpcy5jb25lLnVwZGF0ZU1hdHJpeCgpfTtDYi5wcm90b3R5cGUuc2V0Q29sb3I9ZnVuY3Rpb24oYSl7dGhpcy5saW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkoYSk7dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLmNvcHkoYSl9OwpNZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkYS5wcm90b3R5cGUpO01kLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1NZDt2YXIgUGQ9bmV3IHAsdmU9bmV3IHNlLHdlPW5ldyBzZSx4ZT1uZXcgc2U7SmEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTtKYS5wcm90b3R5cGUuY29uc3RydWN0b3I9SmE7SmEucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucG9pbnRzLGM9Yi5sZW5ndGg7Mj5jJiZjb25zb2xlLmxvZygiZHVoLCB5b3UgbmVlZCBhdCBsZWFzdCAyIHBvaW50cyIpO2EqPWMtKHRoaXMuY2xvc2VkPzA6MSk7dmFyIGQ9TWF0aC5mbG9vcihhKTthLT1kO3RoaXMuY2xvc2VkP2QrPTA8ZD8wOihNYXRoLmZsb29yKE1hdGguYWJzKGQpL2IubGVuZ3RoKSsxKSpiLmxlbmd0aDowPT09YSYmZD09PWMtMSYmKGQ9Yy0yLGE9MSk7dmFyIGUsZixnO3RoaXMuY2xvc2VkfHwwPGQ/ZT1iWyhkLTEpJWNdOihQZC5zdWJWZWN0b3JzKGJbMF0sYlsxXSkuYWRkKGJbMF0pLAplPVBkKTtmPWJbZCVjXTtnPWJbKGQrMSklY107dGhpcy5jbG9zZWR8fGQrMjxjP2I9YlsoZCsyKSVjXTooUGQuc3ViVmVjdG9ycyhiW2MtMV0sYltjLTJdKS5hZGQoYltjLTFdKSxiPVBkKTtpZih2b2lkIDA9PT10aGlzLnR5cGV8fCJjZW50cmlwZXRhbCI9PT10aGlzLnR5cGV8fCJjaG9yZGFsIj09PXRoaXMudHlwZSl7dmFyIGg9ImNob3JkYWwiPT09dGhpcy50eXBlPy41Oi4yNSxjPU1hdGgucG93KGUuZGlzdGFuY2VUb1NxdWFyZWQoZiksaCksZD1NYXRoLnBvdyhmLmRpc3RhbmNlVG9TcXVhcmVkKGcpLGgpLGg9TWF0aC5wb3coZy5kaXN0YW5jZVRvU3F1YXJlZChiKSxoKTsxRS00PmQmJihkPTEpOzFFLTQ+YyYmKGM9ZCk7MUUtND5oJiYoaD1kKTt2ZS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oZS54LGYueCxnLngsYi54LGMsZCxoKTt3ZS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oZS55LGYueSxnLnksYi55LGMsZCxoKTt4ZS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oZS56LApmLnosZy56LGIueixjLGQsaCl9ZWxzZSJjYXRtdWxscm9tIj09PXRoaXMudHlwZSYmKGM9dm9pZCAwIT09dGhpcy50ZW5zaW9uP3RoaXMudGVuc2lvbjouNSx2ZS5pbml0Q2F0bXVsbFJvbShlLngsZi54LGcueCxiLngsYyksd2UuaW5pdENhdG11bGxSb20oZS55LGYueSxnLnksYi55LGMpLHhlLmluaXRDYXRtdWxsUm9tKGUueixmLnosZy56LGIueixjKSk7cmV0dXJuIG5ldyBwKHZlLmNhbGMoYSksd2UuY2FsYyhhKSx4ZS5jYWxjKGEpKX07ZWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTtlZC5wcm90b3R5cGUuY29uc3RydWN0b3I9ZWQ7ZWQucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudjAsYz10aGlzLnYxLGQ9dGhpcy52MixlPXRoaXMudjM7cmV0dXJuIG5ldyBwKHliKGEsYi54LGMueCxkLngsZS54KSx5YihhLGIueSxjLnksZC55LGUueSkseWIoYSxiLnosYy56LGQueixlLnopKX07ZmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTsKZmQucHJvdG90eXBlLmNvbnN0cnVjdG9yPWZkO2ZkLnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnYwLGM9dGhpcy52MSxkPXRoaXMudjI7cmV0dXJuIG5ldyBwKHhiKGEsYi54LGMueCxkLngpLHhiKGEsYi55LGMueSxkLnkpLHhiKGEsYi56LGMueixkLnopKX07Z2QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTtnZC5wcm90b3R5cGUuY29uc3RydWN0b3I9Z2Q7Z2QucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGEpe2lmKDE9PT1hKXJldHVybiB0aGlzLnYyLmNsb25lKCk7dmFyIGI9bmV3IHA7Yi5zdWJWZWN0b3JzKHRoaXMudjIsdGhpcy52MSk7Yi5tdWx0aXBseVNjYWxhcihhKTtiLmFkZCh0aGlzLnYxKTtyZXR1cm4gYn07TmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWGEucHJvdG90eXBlKTtOZC5wcm90b3R5cGUuY29uc3RydWN0b3I9TmQ7bmEuY3JlYXRlPWZ1bmN0aW9uKGEsYil7Y29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKTsKYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuYS5wcm90b3R5cGUpO2EucHJvdG90eXBlLmNvbnN0cnVjdG9yPWE7YS5wcm90b3R5cGUuZ2V0UG9pbnQ9YjtyZXR1cm4gYX07ZGYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSmEucHJvdG90eXBlKTtlZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShKYS5wcm90b3R5cGUpO3RlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEphLnByb3RvdHlwZSk7T2JqZWN0LmFzc2lnbih0ZS5wcm90b3R5cGUse2luaXRGcm9tQXJyYXk6ZnVuY3Rpb24oYSl7Y29uc29sZS5lcnJvcigiVEhSRUUuU3BsaW5lOiAuaW5pdEZyb21BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGdldENvbnRyb2xQb2ludHNBcnJheTpmdW5jdGlvbihhKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TcGxpbmU6IC5nZXRDb250cm9sUG9pbnRzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyZXBhcmFtZXRyaXplQnlBcmNMZW5ndGg6ZnVuY3Rpb24oYSl7Y29uc29sZS5lcnJvcigiVEhSRUUuU3BsaW5lOiAucmVwYXJhbWV0cml6ZUJ5QXJjTGVuZ3RoKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX19KTsKYmQucHJvdG90eXBlLnNldENvbG9ycz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkdyaWRIZWxwZXI6IHNldENvbG9ycygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHBhc3MgdGhlbSBpbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZC4iKX07T2JqZWN0LmFzc2lnbihpZC5wcm90b3R5cGUse2NlbnRlcjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKTtyZXR1cm4gdGhpcy5nZXRDZW50ZXIoYSl9LGVtcHR5OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIik7cmV0dXJuIHRoaXMuaXNFbXB0eSgpfSxpc0ludGVyc2VjdGlvbkJveDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKTsKcmV0dXJuIHRoaXMuaW50ZXJzZWN0c0JveChhKX0sc2l6ZTpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpO3JldHVybiB0aGlzLmdldFNpemUoYSl9fSk7T2JqZWN0LmFzc2lnbihUYS5wcm90b3R5cGUse2NlbnRlcjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKTtyZXR1cm4gdGhpcy5nZXRDZW50ZXIoYSl9LGVtcHR5OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIik7cmV0dXJuIHRoaXMuaXNFbXB0eSgpfSxpc0ludGVyc2VjdGlvbkJveDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKTsKcmV0dXJuIHRoaXMuaW50ZXJzZWN0c0JveChhKX0saXNJbnRlcnNlY3Rpb25TcGhlcmU6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIik7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShhKX0sc2l6ZTpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpO3JldHVybiB0aGlzLmdldFNpemUoYSl9fSk7SGIucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIik7cmV0dXJuIHRoaXMuZ2V0Q2VudGVyKGEpfTtZLnJhbmRvbTE2PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRoLnJhbmRvbTE2KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIE1hdGgucmFuZG9tKCkgaW5zdGVhZC4iKTsKcmV0dXJuIE1hdGgucmFuZG9tKCl9O09iamVjdC5hc3NpZ24oS2EucHJvdG90eXBlLHtmbGF0dGVuVG9BcnJheU9mZnNldDpmdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpcy50b0FycmF5KGEsYil9LG11bHRpcGx5VmVjdG9yMzpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKTtyZXR1cm4gYS5hcHBseU1hdHJpeDModGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVuYW1lZC4gVXNlIG1hdHJpeC5hcHBseVRvVmVjdG9yM0FycmF5KCBhcnJheSApIGluc3RlYWQuIik7CnJldHVybiB0aGlzLmFwcGx5VG9WZWN0b3IzQXJyYXkoYSl9LGFwcGx5VG9CdWZmZXI6ZnVuY3Rpb24oYSxiLGMpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXIoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4LmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSApIGluc3RlYWQuIik7cmV0dXJuIHRoaXMuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZShhKX0sYXBwbHlUb1ZlY3RvcjNBcnJheTpmdW5jdGlvbihhLGIsYyl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfX0pO09iamVjdC5hc3NpZ24oSi5wcm90b3R5cGUse2V4dHJhY3RQb3NpdGlvbjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5leHRyYWN0UG9zaXRpb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5jb3B5UG9zaXRpb24oKS4iKTtyZXR1cm4gdGhpcy5jb3B5UG9zaXRpb24oYSl9LApmbGF0dGVuVG9BcnJheU9mZnNldDpmdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpcy50b0FycmF5KGEsYil9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuIGZ1bmN0aW9uKCl7dm9pZCAwPT09YSYmKGE9bmV3IHApO2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpO3JldHVybiBhLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywzKX19KCksc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKS4iKTsKcmV0dXJuIHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oYSl9LG11bHRpcGx5VG9BcnJheTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VG9BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LG11bHRpcGx5VmVjdG9yMzpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKTtyZXR1cm4gYS5hcHBseU1hdHJpeDQodGhpcyl9LG11bHRpcGx5VmVjdG9yNDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKTtyZXR1cm4gYS5hcHBseU1hdHJpeDQodGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVuYW1lZC4gVXNlIG1hdHJpeC5hcHBseVRvVmVjdG9yM0FycmF5KCBhcnJheSApIGluc3RlYWQuIik7CnJldHVybiB0aGlzLmFwcGx5VG9WZWN0b3IzQXJyYXkoYSl9LHJvdGF0ZUF4aXM6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnRyYW5zZm9ybURpcmVjdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKTthLnRyYW5zZm9ybURpcmVjdGlvbih0aGlzKX0sY3Jvc3NWZWN0b3I6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKTtyZXR1cm4gYS5hcHBseU1hdHJpeDQodGhpcyl9LHRyYW5zbGF0ZTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyb3RhdGVYOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSwKcm90YXRlWTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVZKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scm90YXRlWjpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVaKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scm90YXRlQnlBeGlzOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUJ5QXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFwcGx5VG9CdWZmZXI6ZnVuY3Rpb24oYSxiLGMpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9CdWZmZXIoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4LmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSApIGluc3RlYWQuIik7cmV0dXJuIHRoaXMuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZShhKX0sYXBwbHlUb1ZlY3RvcjNBcnJheTpmdW5jdGlvbihhLGIsYyl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSwKbWFrZUZydXN0dW06ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VGcnVzdHVtKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5tYWtlUGVyc3BlY3RpdmUoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpcy5tYWtlUGVyc3BlY3RpdmUoYSxiLGQsYyxlLGYpfX0pO3dhLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkxpbmU9ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmlzSW50ZXJzZWN0aW9uTGluZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNMaW5lKCkuIik7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c0xpbmUoYSl9O3FhLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKTsKcmV0dXJuIGEuYXBwbHlRdWF0ZXJuaW9uKHRoaXMpfTtPYmplY3QuYXNzaWduKGhiLnByb3RvdHlwZSx7aXNJbnRlcnNlY3Rpb25Cb3g6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKTtyZXR1cm4gdGhpcy5pbnRlcnNlY3RzQm94KGEpfSxpc0ludGVyc2VjdGlvblBsYW5lOmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpO3JldHVybiB0aGlzLmludGVyc2VjdHNQbGFuZShhKX0saXNJbnRlcnNlY3Rpb25TcGhlcmU6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKTtyZXR1cm4gdGhpcy5pbnRlcnNlY3RzU3BoZXJlKGEpfX0pOwpPYmplY3QuYXNzaWduKEFiLnByb3RvdHlwZSx7ZXh0cnVkZTpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgZGIodGhpcyxhKX0sbWFrZUdlb21ldHJ5OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBaYih0aGlzLGEpfX0pO09iamVjdC5hc3NpZ24oRC5wcm90b3R5cGUse2Zyb21BdHRyaWJ1dGU6ZnVuY3Rpb24oYSxiLGMpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpO3JldHVybiB0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxiLGMpfX0pO09iamVjdC5hc3NpZ24ocC5wcm90b3R5cGUsCntzZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLiIpfSxzZXRFdWxlckZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVF1YXRlcm5pb24oKSBpbnN0ZWFkLiIpfSxnZXRQb3NpdGlvbkZyb21NYXRyaXg6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuIik7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGEpfSxnZXRTY2FsZUZyb21NYXRyaXg6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0U2NhbGVGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFNjYWxlKCkuIik7CnJldHVybiB0aGlzLnNldEZyb21NYXRyaXhTY2FsZShhKX0sZ2V0Q29sdW1uRnJvbU1hdHJpeDpmdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldENvbHVtbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4Q29sdW1uKCkuIik7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbihiLGEpfSxhcHBseVByb2plY3Rpb246ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlQcm9qZWN0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5hcHBseU1hdHJpeDQoIG0gKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLmFwcGx5TWF0cml4NChhKX0sZnJvbUF0dHJpYnV0ZTpmdW5jdGlvbihhLGIsYyl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7cmV0dXJuIHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLApiLGMpfX0pO09iamVjdC5hc3NpZ24oZ2EucHJvdG90eXBlLHtmcm9tQXR0cmlidXRlOmZ1bmN0aW9uKGEsYixjKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3I0OiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKTtyZXR1cm4gdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKGEsYixjKX19KTtNLnByb3RvdHlwZS5jb21wdXRlVGFuZ2VudHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07T2JqZWN0LmFzc2lnbihCLnByb3RvdHlwZSx7Z2V0Q2hpbGRCeU5hbWU6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldENoaWxkQnlOYW1lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0T2JqZWN0QnlOYW1lKCkuIik7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlOYW1lKGEpfSxyZW5kZXJEZXB0aDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLiIpfSwKdHJhbnNsYXRlOmZ1bmN0aW9uKGEsYil7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIGluc3RlYWQuIik7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKGIsYSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQi5wcm90b3R5cGUse2V1bGVyT3JkZXI6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIik7cmV0dXJuIHRoaXMucm90YXRpb24ub3JkZXJ9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpO3RoaXMucm90YXRpb24ub3JkZXI9YX19LHVzZVF1YXRlcm5pb246e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9LApzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhCYy5wcm90b3R5cGUse29iamVjdHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTE9EOiAub2JqZWN0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5sZXZlbHMuIik7cmV0dXJuIHRoaXMubGV2ZWxzfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2MucHJvdG90eXBlLCJ1c2VWZXJ0ZXhUZXh0dXJlIix7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogdXNlVmVydGV4VGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlNrZWxldG9uOiB1c2VWZXJ0ZXhUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7Ck9iamVjdC5kZWZpbmVQcm9wZXJ0eShuYS5wcm90b3R5cGUsIl9fYXJjTGVuZ3RoRGl2aXNpb25zIix7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLl9fYXJjTGVuZ3RoRGl2aXNpb25zIGlzIG5vdyAuYXJjTGVuZ3RoRGl2aXNpb25zLiIpO3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9uc30sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuQ3VydmU6IC5fX2FyY0xlbmd0aERpdmlzaW9ucyBpcyBub3cgLmFyY0xlbmd0aERpdmlzaW9ucy4iKTt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz1hfX0pO3hhLnByb3RvdHlwZS5zZXRMZW5zPWZ1bmN0aW9uKGEsYil7Y29uc29sZS53YXJuKCJUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYS5zZXRMZW5zIGlzIGRlcHJlY2F0ZWQuIFVzZSAuc2V0Rm9jYWxMZW5ndGggYW5kIC5maWxtR2F1Z2UgZm9yIGEgcGhvdG9ncmFwaGljIHNldHVwLiIpO3ZvaWQgMCE9PWImJih0aGlzLmZpbG1HYXVnZT1iKTt0aGlzLnNldEZvY2FsTGVuZ3RoKGEpfTsKT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobWEucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpO3RoaXMuc2hhZG93LmNhbWVyYS5mb3Y9YX19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKTt0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1hfX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpOwp0aGlzLnNoYWRvdy5jYW1lcmEucmlnaHQ9YX19LHNoYWRvd0NhbWVyYVRvcDp7c2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFUb3AgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnRvcC4iKTt0aGlzLnNoYWRvdy5jYW1lcmEudG9wPWF9fSxzaGFkb3dDYW1lcmFCb3R0b206e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhQm90dG9tIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5ib3R0b20uIik7dGhpcy5zaGFkb3cuY2FtZXJhLmJvdHRvbT1hfX0sc2hhZG93Q2FtZXJhTmVhcjp7c2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFOZWFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5uZWFyLiIpO3RoaXMuc2hhZG93LmNhbWVyYS5uZWFyPWF9fSxzaGFkb3dDYW1lcmFGYXI6e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhRmFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5mYXIuIik7CnRoaXMuc2hhZG93LmNhbWVyYS5mYXI9YX19LHNoYWRvd0NhbWVyYVZpc2libGU6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFWaXNpYmxlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuQ2FtZXJhSGVscGVyKCBsaWdodC5zaGFkb3cuY2FtZXJhICkgaW5zdGVhZC4iKX19LHNoYWRvd0JpYXM6e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93QmlhcyBpcyBub3cgLnNoYWRvdy5iaWFzLiIpO3RoaXMuc2hhZG93LmJpYXM9YX19LHNoYWRvd0RhcmtuZXNzOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93RGFya25lc3MgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHNoYWRvd01hcFdpZHRoOntzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd01hcFdpZHRoIGlzIG5vdyAuc2hhZG93Lm1hcFNpemUud2lkdGguIik7CnRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9YX19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIik7dGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9YX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTC5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5sZW5ndGggaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5jb3VudCBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLmFycmF5Lmxlbmd0aH19fSk7T2JqZWN0LmFzc2lnbihJLnByb3RvdHlwZSx7YWRkSW5kZXg6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEluZGV4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0SW5kZXgoKS4iKTt0aGlzLnNldEluZGV4KGEpfSxhZGREcmF3Q2FsbDpmdW5jdGlvbihhLApiLGMpe3ZvaWQgMCE9PWMmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKTtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIik7dGhpcy5hZGRHcm91cChhLGIpfSxjbGVhckRyYXdDYWxsczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jbGVhckRyYXdDYWxscygpIGlzIG5vdyAuY2xlYXJHcm91cHMoKS4iKTt0aGlzLmNsZWFyR3JvdXBzKCl9LGNvbXB1dGVUYW5nZW50czpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlVGFuZ2VudHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxjb21wdXRlT2Zmc2V0czpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlT2Zmc2V0cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7Ck9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEkucHJvdG90eXBlLHtkcmF3Y2FsbHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuZHJhd2NhbGxzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKTtyZXR1cm4gdGhpcy5ncm91cHN9fSxvZmZzZXRzOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAub2Zmc2V0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIik7cmV0dXJuIHRoaXMuZ3JvdXBzfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhKZC5wcm90b3R5cGUse2R5bmFtaWM6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLmR5bmFtaWMgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIil9fSxvblVwZGF0ZTp7dmFsdWU6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IC5vblVwZGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBvYmplY3Qub25CZWZvcmVSZW5kZXIoKSBpbnN0ZWFkLiIpOwpyZXR1cm4gdGhpc319fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWi5wcm90b3R5cGUse3dyYXBBcm91bmQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9fSx3cmFwUkdCOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpO3JldHVybiBuZXcgSH19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGEucHJvdG90eXBlLHttZXRhbDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbDogLm1ldGFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCBpbnN0ZWFkLiIpO3JldHVybiExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsOiAubWV0YWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsIGluc3RlYWQiKX19fSk7Ck9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEVhLnByb3RvdHlwZSx7ZGVyaXZhdGl2ZXM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzfSxzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS4gU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKTt0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXM9YX19fSk7T2JqZWN0LmFzc2lnbihYZC5wcm90b3R5cGUse2dldEN1cnJlbnRSZW5kZXJUYXJnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4iKTtyZXR1cm4gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKX0sCnN1cHBvcnRzRmxvYXRUZXh0dXJlczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKX0sc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpfSxzdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXM6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpOwpyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIil9LHN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICkuIik7cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9LHN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQzpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnICkuIik7cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfSwKc3VwcG9ydHNCbGVuZE1pbk1heDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQmxlbmRNaW5NYXgoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnRVhUX2JsZW5kX21pbm1heCcgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfSxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpO3JldHVybiB0aGlzLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlc30sc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0luc3RhbmNlZEFycmF5cygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyApLiIpOwpyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpfSxlbmFibGVTY2lzc29yVGVzdDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKTt0aGlzLnNldFNjaXNzb3JUZXN0KGEpfSxpbml0TWF0ZXJpYWw6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5pbml0TWF0ZXJpYWwoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxhZGRQcmVQbHVnaW46ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQcmVQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxhZGRQb3N0UGx1Z2luOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHVwZGF0ZVNoYWRvd01hcDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnVwZGF0ZVNoYWRvd01hcCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7Ck9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFhkLnByb3RvdHlwZSx7c2hhZG93TWFwRW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLmVuYWJsZWR9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuIik7dGhpcy5zaGFkb3dNYXAuZW5hYmxlZD1hfX0sc2hhZG93TWFwVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLnR5cGV9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuIik7dGhpcy5zaGFkb3dNYXAudHlwZT1hfX0sc2hhZG93TWFwQ3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC5jdWxsRmFjZX0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGlzIG5vdyAuc2hhZG93TWFwLmN1bGxGYWNlLiIpOwp0aGlzLnNoYWRvd01hcC5jdWxsRmFjZT1hfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhKZS5wcm90b3R5cGUse2N1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJSZXZlcnNlU2lkZWQ/MjoxfSxzZXQ6ZnVuY3Rpb24oYSl7YT0xIT09YTtjb25zb2xlLndhcm4oIldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaXMgZGVwcmVjYXRlZC4gU2V0IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIHRvICIrYSsiLiIpO3RoaXMucmVuZGVyUmV2ZXJzZVNpZGVkPWF9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERiLnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIik7cmV0dXJuIHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIik7CnRoaXMudGV4dHVyZS53cmFwUz1hfX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIik7cmV0dXJuIHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIik7dGhpcy50ZXh0dXJlLndyYXBUPWF9fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKTtyZXR1cm4gdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKTt0aGlzLnRleHR1cmUubWFnRmlsdGVyPQphfX0sbWluRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIik7cmV0dXJuIHRoaXMudGV4dHVyZS5taW5GaWx0ZXJ9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIik7dGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1hfX0sYW5pc290cm9weTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIik7cmV0dXJuIHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5fSxzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIik7dGhpcy50ZXh0dXJlLmFuaXNvdHJvcHk9CmF9fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKTtyZXR1cm4gdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKTt0aGlzLnRleHR1cmUub2Zmc2V0PWF9fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKTtyZXR1cm4gdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKTt0aGlzLnRleHR1cmUucmVwZWF0PWF9fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKTsKcmV0dXJuIHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIik7dGhpcy50ZXh0dXJlLmZvcm1hdD1hfX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIik7cmV0dXJuIHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIik7dGhpcy50ZXh0dXJlLnR5cGU9YX19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpO3JldHVybiB0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSwKc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKTt0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPWF9fX0pO2pjLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IC5sb2FkIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5BdWRpb0xvYWRlciBpbnN0ZWFkLiIpO3ZhciBiPXRoaXM7KG5ldyBmZSkubG9hZChhLGZ1bmN0aW9uKGEpe2Iuc2V0QnVmZmVyKGEpfSk7cmV0dXJuIHRoaXN9O2tlLnByb3RvdHlwZS5nZXREYXRhPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpb0FuYWx5c2VyOiAuZ2V0RGF0YSgpIGlzIG5vdyAuZ2V0RnJlcXVlbmN5RGF0YSgpLiIpO3JldHVybiB0aGlzLmdldEZyZXF1ZW5jeURhdGEoKX07bC5XZWJHTFJlbmRlclRhcmdldEN1YmU9RWI7bC5XZWJHTFJlbmRlclRhcmdldD0KRGI7bC5XZWJHTFJlbmRlcmVyPVhkO2wuU2hhZGVyTGliPWFiO2wuVW5pZm9ybXNMaWI9VjtsLlVuaWZvcm1zVXRpbHM9SGE7bC5TaGFkZXJDaHVuaz1VO2wuRm9nRXhwMj1LYjtsLkZvZz1MYjtsLlNjZW5lPW1kO2wuTGVuc0ZsYXJlPVlkO2wuU3ByaXRlPUFjO2wuTE9EPUJjO2wuU2tpbm5lZE1lc2g9b2Q7bC5Ta2VsZXRvbj1DYztsLkJvbmU9bmQ7bC5NZXNoPUNhO2wuTGluZVNlZ21lbnRzPWRhO2wuTGluZUxvb3A9cGQ7bC5MaW5lPXlhO2wuUG9pbnRzPU1iO2wuR3JvdXA9RGM7bC5WaWRlb1RleHR1cmU9cWQ7bC5EYXRhVGV4dHVyZT1lYjtsLkNvbXByZXNzZWRUZXh0dXJlPU5iO2wuQ3ViZVRleHR1cmU9WmE7bC5DYW52YXNUZXh0dXJlPXJkO2wuRGVwdGhUZXh0dXJlPUVjO2wuVGV4dHVyZT1YO2wuQ29tcHJlc3NlZFRleHR1cmVMb2FkZXI9UWU7bC5EYXRhVGV4dHVyZUxvYWRlcj0kZDtsLkN1YmVUZXh0dXJlTG9hZGVyPWFlO2wuVGV4dHVyZUxvYWRlcj1zZDtsLk9iamVjdExvYWRlcj0KUmU7bC5NYXRlcmlhbExvYWRlcj1IZDtsLkJ1ZmZlckdlb21ldHJ5TG9hZGVyPWJlO2wuRGVmYXVsdExvYWRpbmdNYW5hZ2VyPUFhO2wuTG9hZGluZ01hbmFnZXI9WmQ7bC5KU09OTG9hZGVyPWNlO2wuSW1hZ2VMb2FkZXI9VmM7bC5Gb250TG9hZGVyPVRlO2wuRmlsZUxvYWRlcj11YTtsLkxvYWRlcj1nYztsLkNhY2hlPWhkO2wuQXVkaW9Mb2FkZXI9ZmU7bC5TcG90TGlnaHRTaGFkb3c9dWQ7bC5TcG90TGlnaHQ9dmQ7bC5Qb2ludExpZ2h0PXdkO2wuUmVjdEFyZWFMaWdodD1BZDtsLkhlbWlzcGhlcmVMaWdodD10ZDtsLkRpcmVjdGlvbmFsTGlnaHRTaGFkb3c9eGQ7bC5EaXJlY3Rpb25hbExpZ2h0PXlkO2wuQW1iaWVudExpZ2h0PXpkO2wuTGlnaHRTaGFkb3c9dWI7bC5MaWdodD1tYTtsLlN0ZXJlb0NhbWVyYT1VZTtsLlBlcnNwZWN0aXZlQ2FtZXJhPXhhO2wuT3J0aG9ncmFwaGljQ2FtZXJhPUpiO2wuQ3ViZUNhbWVyYT1JZDtsLkFycmF5Q2FtZXJhPWdlO2wuQ2FtZXJhPU9hO2wuQXVkaW9MaXN0ZW5lcj0KaGU7bC5Qb3NpdGlvbmFsQXVkaW89amU7bC5BdWRpb0NvbnRleHQ9aWU7bC5BdWRpb0FuYWx5c2VyPWtlO2wuQXVkaW89amM7bC5WZWN0b3JLZXlmcmFtZVRyYWNrPWVjO2wuU3RyaW5nS2V5ZnJhbWVUcmFjaz1FZDtsLlF1YXRlcm5pb25LZXlmcmFtZVRyYWNrPVhjO2wuTnVtYmVyS2V5ZnJhbWVUcmFjaz1mYztsLkNvbG9yS2V5ZnJhbWVUcmFjaz1HZDtsLkJvb2xlYW5LZXlmcmFtZVRyYWNrPUZkO2wuUHJvcGVydHlNaXhlcj1sZTtsLlByb3BlcnR5QmluZGluZz1vYTtsLktleWZyYW1lVHJhY2s9d2I7bC5BbmltYXRpb25VdGlscz12YTtsLkFuaW1hdGlvbk9iamVjdEdyb3VwPVdlO2wuQW5pbWF0aW9uTWl4ZXI9WWU7bC5BbmltYXRpb25DbGlwPUJhO2wuVW5pZm9ybT1KZDtsLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PW1lO2wuQnVmZmVyR2VvbWV0cnk9STtsLkdlb21ldHJ5SWRDb3VudD1mdW5jdGlvbigpe3JldHVybiBUZCsrfTtsLkdlb21ldHJ5PU07bC5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT0KbmU7bC5JbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj1vZTtsLkludGVybGVhdmVkQnVmZmVyPWtjO2wuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPXBlO2wuRmFjZTM9VmE7bC5PYmplY3QzRD1CO2wuUmF5Y2FzdGVyPVplO2wuTGF5ZXJzPVJkO2wuRXZlbnREaXNwYXRjaGVyPXNhO2wuQ2xvY2s9YWY7bC5RdWF0ZXJuaW9uTGluZWFySW50ZXJwb2xhbnQ9RGQ7bC5MaW5lYXJJbnRlcnBvbGFudD1XYztsLkRpc2NyZXRlSW50ZXJwb2xhbnQ9Q2Q7bC5DdWJpY0ludGVycG9sYW50PUJkO2wuSW50ZXJwb2xhbnQ9RGE7bC5UcmlhbmdsZT1VYTtsLk1hdGg9WTtsLlNwaGVyaWNhbD1iZjtsLkN5bGluZHJpY2FsPWNmO2wuUGxhbmU9d2E7bC5GcnVzdHVtPWpkO2wuU3BoZXJlPUdhO2wuUmF5PWhiO2wuTWF0cml4ND1KO2wuTWF0cml4Mz1LYTtsLkJveDM9VGE7bC5Cb3gyPWlkO2wuTGluZTM9SGI7bC5FdWxlcj1iYjtsLlZlY3RvcjQ9Z2E7bC5WZWN0b3IzPXA7bC5WZWN0b3IyPUQ7bC5RdWF0ZXJuaW9uPQpxYTtsLkNvbG9yPUg7bC5Nb3JwaEJsZW5kTWVzaD1yYTtsLkltbWVkaWF0ZVJlbmRlck9iamVjdD0kYztsLlZlcnRleE5vcm1hbHNIZWxwZXI9YWQ7bC5TcG90TGlnaHRIZWxwZXI9bGM7bC5Ta2VsZXRvbkhlbHBlcj1tYztsLlBvaW50TGlnaHRIZWxwZXI9bmM7bC5SZWN0QXJlYUxpZ2h0SGVscGVyPW9jO2wuSGVtaXNwaGVyZUxpZ2h0SGVscGVyPXBjO2wuR3JpZEhlbHBlcj1iZDtsLlBvbGFyR3JpZEhlbHBlcj1LZDtsLkZhY2VOb3JtYWxzSGVscGVyPWNkO2wuRGlyZWN0aW9uYWxMaWdodEhlbHBlcj1xYztsLkNhbWVyYUhlbHBlcj1kZDtsLkJveEhlbHBlcj1CYjtsLkFycm93SGVscGVyPUNiO2wuQXhpc0hlbHBlcj1NZDtsLkNhdG11bGxSb21DdXJ2ZTM9SmE7bC5DdWJpY0JlemllckN1cnZlMz1lZDtsLlF1YWRyYXRpY0JlemllckN1cnZlMz1mZDtsLkxpbmVDdXJ2ZTM9Z2Q7bC5BcmNDdXJ2ZT1OZDtsLkVsbGlwc2VDdXJ2ZT1YYTtsLlNwbGluZUN1cnZlPXpiO2wuQ3ViaWNCZXppZXJDdXJ2ZT0KaGM7bC5RdWFkcmF0aWNCZXppZXJDdXJ2ZT1pYztsLkxpbmVDdXJ2ZT1TYTtsLlNoYXBlPUFiO2wuUGF0aD1aYztsLlNoYXBlUGF0aD1kZTtsLkZvbnQ9ZWU7bC5DdXJ2ZVBhdGg9WWM7bC5DdXJ2ZT1uYTtsLlNoYXBlVXRpbHM9emE7bC5TY2VuZVV0aWxzPXtjcmVhdGVNdWx0aU1hdGVyaWFsT2JqZWN0OmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPW5ldyBEYyxkPTAsZT1iLmxlbmd0aDtkPGU7ZCsrKWMuYWRkKG5ldyBDYShhLGJbZF0pKTtyZXR1cm4gY30sZGV0YWNoOmZ1bmN0aW9uKGEsYixjKXthLmFwcGx5TWF0cml4KGIubWF0cml4V29ybGQpO2IucmVtb3ZlKGEpO2MuYWRkKGEpfSxhdHRhY2g6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPW5ldyBKO2QuZ2V0SW52ZXJzZShjLm1hdHJpeFdvcmxkKTthLmFwcGx5TWF0cml4KGQpO2IucmVtb3ZlKGEpO2MuYWRkKGEpfX07bC5XaXJlZnJhbWVHZW9tZXRyeT1PYjtsLlBhcmFtZXRyaWNHZW9tZXRyeT1GYztsLlBhcmFtZXRyaWNCdWZmZXJHZW9tZXRyeT0KUGI7bC5UZXRyYWhlZHJvbkdlb21ldHJ5PUhjO2wuVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeT1RYjtsLk9jdGFoZWRyb25HZW9tZXRyeT1JYztsLk9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeT1tYjtsLkljb3NhaGVkcm9uR2VvbWV0cnk9SmM7bC5JY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5PVJiO2wuRG9kZWNhaGVkcm9uR2VvbWV0cnk9S2M7bC5Eb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeT1TYjtsLlBvbHloZWRyb25HZW9tZXRyeT1HYztsLlBvbHloZWRyb25CdWZmZXJHZW9tZXRyeT1pYTtsLlR1YmVHZW9tZXRyeT1MYztsLlR1YmVCdWZmZXJHZW9tZXRyeT1UYjtsLlRvcnVzS25vdEdlb21ldHJ5PU1jO2wuVG9ydXNLbm90QnVmZmVyR2VvbWV0cnk9VWI7bC5Ub3J1c0dlb21ldHJ5PU5jO2wuVG9ydXNCdWZmZXJHZW9tZXRyeT1WYjtsLlRleHRHZW9tZXRyeT1PYztsLlRleHRCdWZmZXJHZW9tZXRyeT1XYjtsLlNwaGVyZUdlb21ldHJ5PVBjO2wuU3BoZXJlQnVmZmVyR2VvbWV0cnk9Cm5iO2wuUmluZ0dlb21ldHJ5PVFjO2wuUmluZ0J1ZmZlckdlb21ldHJ5PVhiO2wuUGxhbmVHZW9tZXRyeT14YztsLlBsYW5lQnVmZmVyR2VvbWV0cnk9bGI7bC5MYXRoZUdlb21ldHJ5PVJjO2wuTGF0aGVCdWZmZXJHZW9tZXRyeT1ZYjtsLlNoYXBlR2VvbWV0cnk9WmI7bC5TaGFwZUJ1ZmZlckdlb21ldHJ5PSRiO2wuRXh0cnVkZUdlb21ldHJ5PWRiO2wuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5PUZhO2wuRWRnZXNHZW9tZXRyeT1hYztsLkNvbmVHZW9tZXRyeT1TYztsLkNvbmVCdWZmZXJHZW9tZXRyeT1UYztsLkN5bGluZGVyR2VvbWV0cnk9b2I7bC5DeWxpbmRlckJ1ZmZlckdlb21ldHJ5PVdhO2wuQ2lyY2xlR2VvbWV0cnk9VWM7bC5DaXJjbGVCdWZmZXJHZW9tZXRyeT1iYztsLkJveEdlb21ldHJ5PUliO2wuQm94QnVmZmVyR2VvbWV0cnk9a2I7bC5TaGFkb3dNYXRlcmlhbD1jYztsLlNwcml0ZU1hdGVyaWFsPWNiO2wuUmF3U2hhZGVyTWF0ZXJpYWw9ZGM7bC5TaGFkZXJNYXRlcmlhbD0KRWE7bC5Qb2ludHNNYXRlcmlhbD1MYTtsLk1lc2hQaHlzaWNhbE1hdGVyaWFsPXBiO2wuTWVzaFN0YW5kYXJkTWF0ZXJpYWw9UmE7bC5NZXNoUGhvbmdNYXRlcmlhbD10YTtsLk1lc2hUb29uTWF0ZXJpYWw9cWI7bC5NZXNoTm9ybWFsTWF0ZXJpYWw9cmI7bC5NZXNoTGFtYmVydE1hdGVyaWFsPXNiO2wuTWVzaERlcHRoTWF0ZXJpYWw9JGE7bC5NZXNoQmFzaWNNYXRlcmlhbD1OYTtsLkxpbmVEYXNoZWRNYXRlcmlhbD10YjtsLkxpbmVCYXNpY01hdGVyaWFsPWhhO2wuTWF0ZXJpYWw9WjtsLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGU9d2M7bC5GbG9hdDMyQnVmZmVyQXR0cmlidXRlPUM7bC5VaW50MzJCdWZmZXJBdHRyaWJ1dGU9amI7bC5JbnQzMkJ1ZmZlckF0dHJpYnV0ZT12YztsLlVpbnQxNkJ1ZmZlckF0dHJpYnV0ZT1pYjtsLkludDE2QnVmZmVyQXR0cmlidXRlPXVjO2wuVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlPXRjO2wuVWludDhCdWZmZXJBdHRyaWJ1dGU9c2M7bC5JbnQ4QnVmZmVyQXR0cmlidXRlPQpyYztsLkJ1ZmZlckF0dHJpYnV0ZT1MO2wuUkVWSVNJT049Ijg1IjtsLk1PVVNFPXtMRUZUOjAsTUlERExFOjEsUklHSFQ6Mn07bC5DdWxsRmFjZU5vbmU9MDtsLkN1bGxGYWNlQmFjaz0xO2wuQ3VsbEZhY2VGcm9udD0yO2wuQ3VsbEZhY2VGcm9udEJhY2s9MztsLkZyb250RmFjZURpcmVjdGlvbkNXPTA7bC5Gcm9udEZhY2VEaXJlY3Rpb25DQ1c9MTtsLkJhc2ljU2hhZG93TWFwPTA7bC5QQ0ZTaGFkb3dNYXA9MTtsLlBDRlNvZnRTaGFkb3dNYXA9MjtsLkZyb250U2lkZT0wO2wuQmFja1NpZGU9MTtsLkRvdWJsZVNpZGU9MjtsLkZsYXRTaGFkaW5nPTE7bC5TbW9vdGhTaGFkaW5nPTI7bC5Ob0NvbG9ycz0wO2wuRmFjZUNvbG9ycz0xO2wuVmVydGV4Q29sb3JzPTI7bC5Ob0JsZW5kaW5nPTA7bC5Ob3JtYWxCbGVuZGluZz0xO2wuQWRkaXRpdmVCbGVuZGluZz0yO2wuU3VidHJhY3RpdmVCbGVuZGluZz0zO2wuTXVsdGlwbHlCbGVuZGluZz00O2wuQ3VzdG9tQmxlbmRpbmc9NTtsLkFkZEVxdWF0aW9uPQoxMDA7bC5TdWJ0cmFjdEVxdWF0aW9uPTEwMTtsLlJldmVyc2VTdWJ0cmFjdEVxdWF0aW9uPTEwMjtsLk1pbkVxdWF0aW9uPTEwMztsLk1heEVxdWF0aW9uPTEwNDtsLlplcm9GYWN0b3I9MjAwO2wuT25lRmFjdG9yPTIwMTtsLlNyY0NvbG9yRmFjdG9yPTIwMjtsLk9uZU1pbnVzU3JjQ29sb3JGYWN0b3I9MjAzO2wuU3JjQWxwaGFGYWN0b3I9MjA0O2wuT25lTWludXNTcmNBbHBoYUZhY3Rvcj0yMDU7bC5Ec3RBbHBoYUZhY3Rvcj0yMDY7bC5PbmVNaW51c0RzdEFscGhhRmFjdG9yPTIwNztsLkRzdENvbG9yRmFjdG9yPTIwODtsLk9uZU1pbnVzRHN0Q29sb3JGYWN0b3I9MjA5O2wuU3JjQWxwaGFTYXR1cmF0ZUZhY3Rvcj0yMTA7bC5OZXZlckRlcHRoPTA7bC5BbHdheXNEZXB0aD0xO2wuTGVzc0RlcHRoPTI7bC5MZXNzRXF1YWxEZXB0aD0zO2wuRXF1YWxEZXB0aD00O2wuR3JlYXRlckVxdWFsRGVwdGg9NTtsLkdyZWF0ZXJEZXB0aD02O2wuTm90RXF1YWxEZXB0aD03O2wuTXVsdGlwbHlPcGVyYXRpb249CjA7bC5NaXhPcGVyYXRpb249MTtsLkFkZE9wZXJhdGlvbj0yO2wuTm9Ub25lTWFwcGluZz0wO2wuTGluZWFyVG9uZU1hcHBpbmc9MTtsLlJlaW5oYXJkVG9uZU1hcHBpbmc9MjtsLlVuY2hhcnRlZDJUb25lTWFwcGluZz0zO2wuQ2luZW9uVG9uZU1hcHBpbmc9NDtsLlVWTWFwcGluZz0zMDA7bC5DdWJlUmVmbGVjdGlvbk1hcHBpbmc9MzAxO2wuQ3ViZVJlZnJhY3Rpb25NYXBwaW5nPTMwMjtsLkVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nPTMwMztsLkVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nPTMwNDtsLlNwaGVyaWNhbFJlZmxlY3Rpb25NYXBwaW5nPTMwNTtsLkN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nPTMwNjtsLkN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nPTMwNztsLlJlcGVhdFdyYXBwaW5nPTFFMztsLkNsYW1wVG9FZGdlV3JhcHBpbmc9MTAwMTtsLk1pcnJvcmVkUmVwZWF0V3JhcHBpbmc9MTAwMjtsLk5lYXJlc3RGaWx0ZXI9MTAwMztsLk5lYXJlc3RNaXBNYXBOZWFyZXN0RmlsdGVyPQoxMDA0O2wuTmVhcmVzdE1pcE1hcExpbmVhckZpbHRlcj0xMDA1O2wuTGluZWFyRmlsdGVyPTEwMDY7bC5MaW5lYXJNaXBNYXBOZWFyZXN0RmlsdGVyPTEwMDc7bC5MaW5lYXJNaXBNYXBMaW5lYXJGaWx0ZXI9MTAwODtsLlVuc2lnbmVkQnl0ZVR5cGU9MTAwOTtsLkJ5dGVUeXBlPTEwMTA7bC5TaG9ydFR5cGU9MTAxMTtsLlVuc2lnbmVkU2hvcnRUeXBlPTEwMTI7bC5JbnRUeXBlPTEwMTM7bC5VbnNpZ25lZEludFR5cGU9MTAxNDtsLkZsb2F0VHlwZT0xMDE1O2wuSGFsZkZsb2F0VHlwZT0xMDE2O2wuVW5zaWduZWRTaG9ydDQ0NDRUeXBlPTEwMTc7bC5VbnNpZ25lZFNob3J0NTU1MVR5cGU9MTAxODtsLlVuc2lnbmVkU2hvcnQ1NjVUeXBlPTEwMTk7bC5VbnNpZ25lZEludDI0OFR5cGU9MTAyMDtsLkFscGhhRm9ybWF0PTEwMjE7bC5SR0JGb3JtYXQ9MTAyMjtsLlJHQkFGb3JtYXQ9MTAyMztsLkx1bWluYW5jZUZvcm1hdD0xMDI0O2wuTHVtaW5hbmNlQWxwaGFGb3JtYXQ9MTAyNTtsLlJHQkVGb3JtYXQ9CjEwMjM7bC5EZXB0aEZvcm1hdD0xMDI2O2wuRGVwdGhTdGVuY2lsRm9ybWF0PTEwMjc7bC5SR0JfUzNUQ19EWFQxX0Zvcm1hdD0yMDAxO2wuUkdCQV9TM1RDX0RYVDFfRm9ybWF0PTIwMDI7bC5SR0JBX1MzVENfRFhUM19Gb3JtYXQ9MjAwMztsLlJHQkFfUzNUQ19EWFQ1X0Zvcm1hdD0yMDA0O2wuUkdCX1BWUlRDXzRCUFBWMV9Gb3JtYXQ9MjEwMDtsLlJHQl9QVlJUQ18yQlBQVjFfRm9ybWF0PTIxMDE7bC5SR0JBX1BWUlRDXzRCUFBWMV9Gb3JtYXQ9MjEwMjtsLlJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdD0yMTAzO2wuUkdCX0VUQzFfRm9ybWF0PTIxNTE7bC5Mb29wT25jZT0yMjAwO2wuTG9vcFJlcGVhdD0yMjAxO2wuTG9vcFBpbmdQb25nPTIyMDI7bC5JbnRlcnBvbGF0ZURpc2NyZXRlPTIzMDA7bC5JbnRlcnBvbGF0ZUxpbmVhcj0yMzAxO2wuSW50ZXJwb2xhdGVTbW9vdGg9MjMwMjtsLlplcm9DdXJ2YXR1cmVFbmRpbmc9MjQwMDtsLlplcm9TbG9wZUVuZGluZz0yNDAxO2wuV3JhcEFyb3VuZEVuZGluZz0KMjQwMjtsLlRyaWFuZ2xlc0RyYXdNb2RlPTA7bC5UcmlhbmdsZVN0cmlwRHJhd01vZGU9MTtsLlRyaWFuZ2xlRmFuRHJhd01vZGU9MjtsLkxpbmVhckVuY29kaW5nPTNFMztsLnNSR0JFbmNvZGluZz0zMDAxO2wuR2FtbWFFbmNvZGluZz0zMDA3O2wuUkdCRUVuY29kaW5nPTMwMDI7bC5Mb2dMdXZFbmNvZGluZz0zMDAzO2wuUkdCTTdFbmNvZGluZz0zMDA0O2wuUkdCTTE2RW5jb2Rpbmc9MzAwNTtsLlJHQkRFbmNvZGluZz0zMDA2O2wuQmFzaWNEZXB0aFBhY2tpbmc9MzIwMDtsLlJHQkFEZXB0aFBhY2tpbmc9MzIwMTtsLkN1YmVHZW9tZXRyeT1JYjtsLkZhY2U0PWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe2NvbnNvbGUud2FybigiVEhSRUUuRmFjZTQgaGFzIGJlZW4gcmVtb3ZlZC4gQSBUSFJFRS5GYWNlMyB3aWxsIGJlIGNyZWF0ZWQgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IFZhKGEsYixjLGUsZixnKX07bC5MaW5lU3RyaXA9MDtsLkxpbmVQaWVjZXM9MTtsLk1lc2hGYWNlTWF0ZXJpYWw9CmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTWVzaEZhY2VNYXRlcmlhbCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYW4gQXJyYXkgaW5zdGVhZC4iKTtyZXR1cm4gYX07bC5NdWx0aU1hdGVyaWFsPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPVtdKTtjb25zb2xlLndhcm4oIlRIUkVFLk11bHRpTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuIik7YS5pc011bHRpTWF0ZXJpYWw9ITA7YS5tYXRlcmlhbHM9YTthLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGEuc2xpY2UoKX07cmV0dXJuIGF9O2wuUG9pbnRDbG91ZD1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuUG9pbnRDbG91ZCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50cy4iKTtyZXR1cm4gbmV3IE1iKGEsYil9O2wuUGFydGljbGU9ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZSBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlNwcml0ZS4iKTsKcmV0dXJuIG5ldyBBYyhhKX07bC5QYXJ0aWNsZVN5c3RlbT1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVTeXN0ZW0gaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHMuIik7cmV0dXJuIG5ldyBNYihhLGIpfTtsLlBvaW50Q2xvdWRNYXRlcmlhbD1mdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLlBvaW50Q2xvdWRNYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpO3JldHVybiBuZXcgTGEoYSl9O2wuUGFydGljbGVCYXNpY01hdGVyaWFsPWZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVCYXNpY01hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIik7cmV0dXJuIG5ldyBMYShhKX07bC5QYXJ0aWNsZVN5c3RlbU1hdGVyaWFsPWZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVTeXN0ZW1NYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpOwpyZXR1cm4gbmV3IExhKGEpfTtsLlZlcnRleD1mdW5jdGlvbihhLGIsYyl7Y29uc29sZS53YXJuKCJUSFJFRS5WZXJ0ZXggaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLlZlY3RvcjMgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IHAoYSxiLGMpfTtsLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUoKS5zZXREeW5hbWljKCB0cnVlICkgaW5zdGVhZC4iKTtyZXR1cm4obmV3IEwoYSxiKSkuc2V0RHluYW1pYyghMCl9O2wuSW50OEF0dHJpYnV0ZT1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuSW50OEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDhCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgcmMoYSxiKX07bC5VaW50OEF0dHJpYnV0ZT0KZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQ4QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDhCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgc2MoYSxiKX07bC5VaW50OENsYW1wZWRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQ4Q2xhbXBlZEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyB0YyhhLGIpfTtsLkludDE2QXR0cmlidXRlPWZ1bmN0aW9uKGEsYil7Y29uc29sZS53YXJuKCJUSFJFRS5JbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDE2QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IHVjKGEsYil9O2wuVWludDE2QXR0cmlidXRlPWZ1bmN0aW9uKGEsYil7Y29uc29sZS53YXJuKCJUSFJFRS5VaW50MTZBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpOwpyZXR1cm4gbmV3IGliKGEsYil9O2wuSW50MzJBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLkludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50MzJCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgdmMoYSxiKX07bC5VaW50MzJBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBqYihhLGIpfTtsLkZsb2F0MzJBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLkZsb2F0MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5GbG9hdDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IEMoYSxiKX07bC5GbG9hdDY0QXR0cmlidXRlPQpmdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuRmxvYXQ2NEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgd2MoYSxiKX07bC5DbG9zZWRTcGxpbmVDdXJ2ZTM9ZGY7bC5TcGxpbmVDdXJ2ZTM9ZWY7bC5TcGxpbmU9dGU7bC5Cb3VuZGluZ0JveEhlbHBlcj1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuQm91bmRpbmdCb3hIZWxwZXIgaGFzIGJlZW4gZGVwcmVjYXRlZC4gQ3JlYXRpbmcgYSBUSFJFRS5Cb3hIZWxwZXIgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IEJiKGEsYil9O2wuRWRnZXNIZWxwZXI9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLkVkZ2VzSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5FZGdlc0dlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIG5ldyBkYShuZXcgYWMoYS5nZW9tZXRyeSksbmV3IGhhKHtjb2xvcjp2b2lkIDAhPT0KYj9iOjE2Nzc3MjE1fSkpfTtsLldpcmVmcmFtZUhlbHBlcj1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuV2lyZWZyYW1lSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5XaXJlZnJhbWVHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgZGEobmV3IE9iKGEuZ2VvbWV0cnkpLG5ldyBoYSh7Y29sb3I6dm9pZCAwIT09Yj9iOjE2Nzc3MjE1fSkpfTtsLlhIUkxvYWRlcj1mdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLlhIUkxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkZpbGVMb2FkZXIuIik7cmV0dXJuIG5ldyB1YShhKX07bC5CaW5hcnlUZXh0dXJlTG9hZGVyPWZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuQmluYXJ5VGV4dHVyZUxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkRhdGFUZXh0dXJlTG9hZGVyLiIpO3JldHVybiBuZXcgJGQoYSl9O2wuR2VvbWV0cnlVdGlscz17bWVyZ2U6ZnVuY3Rpb24oYSxiLApjKXtjb25zb2xlLndhcm4oIlRIUkVFLkdlb21ldHJ5VXRpbHM6IC5tZXJnZSgpIGhhcyBiZWVuIG1vdmVkIHRvIEdlb21ldHJ5LiBVc2UgZ2VvbWV0cnkubWVyZ2UoIGdlb21ldHJ5MiwgbWF0cml4LCBtYXRlcmlhbEluZGV4T2Zmc2V0ICkgaW5zdGVhZC4iKTt2YXIgZDtiLmlzTWVzaCYmKGIubWF0cml4QXV0b1VwZGF0ZSYmYi51cGRhdGVNYXRyaXgoKSxkPWIubWF0cml4LGI9Yi5nZW9tZXRyeSk7YS5tZXJnZShiLGQsYyl9LGNlbnRlcjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkdlb21ldHJ5VXRpbHM6IC5jZW50ZXIoKSBoYXMgYmVlbiBtb3ZlZCB0byBHZW9tZXRyeS4gVXNlIGdlb21ldHJ5LmNlbnRlcigpIGluc3RlYWQuIik7cmV0dXJuIGEuY2VudGVyKCl9fTtsLkltYWdlVXRpbHM9e2Nyb3NzT3JpZ2luOnZvaWQgMCxsb2FkVGV4dHVyZTpmdW5jdGlvbihhLGIsYyxkKXtjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMubG9hZFRleHR1cmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLlRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLiIpOwp2YXIgZT1uZXcgc2Q7ZS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTthPWUubG9hZChhLGMsdm9pZCAwLGQpO2ImJihhLm1hcHBpbmc9Yik7cmV0dXJuIGF9LGxvYWRUZXh0dXJlQ3ViZTpmdW5jdGlvbihhLGIsYyxkKXtjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMubG9hZFRleHR1cmVDdWJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5DdWJlVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7dmFyIGU9bmV3IGFlO2Uuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7YT1lLmxvYWQoYSxjLHZvaWQgMCxkKTtiJiYoYS5tYXBwaW5nPWIpO3JldHVybiBhfSxsb2FkQ29tcHJlc3NlZFRleHR1cmU6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LGxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfX07CmwuUHJvamVjdG9yPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvamVjdG9yIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qcy9yZW5kZXJlcnMvUHJvamVjdG9yLmpzLiIpO3RoaXMucHJvamVjdFZlY3Rvcj1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuUHJvamVjdG9yOiAucHJvamVjdFZlY3RvcigpIGlzIG5vdyB2ZWN0b3IucHJvamVjdCgpLiIpO2EucHJvamVjdChiKX07dGhpcy51bnByb2plY3RWZWN0b3I9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLlByb2plY3RvcjogLnVucHJvamVjdFZlY3RvcigpIGlzIG5vdyB2ZWN0b3IudW5wcm9qZWN0KCkuIik7YS51bnByb2plY3QoYil9O3RoaXMucGlja2luZ1JheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb2plY3RvcjogLnBpY2tpbmdSYXkoKSBpcyBub3cgcmF5Y2FzdGVyLnNldEZyb21DYW1lcmEoKS4iKX19O2wuQ2FudmFzUmVuZGVyZXI9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5DYW52YXNSZW5kZXJlciBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanMvcmVuZGVyZXJzL0NhbnZhc1JlbmRlcmVyLmpzIik7CnRoaXMuZG9tRWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJjYW52YXMiKTt0aGlzLmNsZWFyPWZ1bmN0aW9uKCl7fTt0aGlzLnJlbmRlcj1mdW5jdGlvbigpe307dGhpcy5zZXRDbGVhckNvbG9yPWZ1bmN0aW9uKCl7fTt0aGlzLnNldFNpemU9ZnVuY3Rpb24oKXt9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkobCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KTsK(Line 354)
Message:
THREE.Color: Unknown color gray10
console-api warning URL: data:application/x-javascript;base64,Ly8gdGhyZWVqcy5vcmcvbGljZW5zZQooZnVuY3Rpb24obCxzYSl7Im9iamVjdCI9PT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPT10eXBlb2YgbW9kdWxlP3NhKGV4cG9ydHMpOiJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiXSxzYSk6c2EobC5USFJFRT1sLlRIUkVFfHx7fSl9KSh0aGlzLGZ1bmN0aW9uKGwpe2Z1bmN0aW9uIHNhKCl7fWZ1bmN0aW9uIEQoYSxiKXt0aGlzLng9YXx8MDt0aGlzLnk9Ynx8MH1mdW5jdGlvbiBYKGEsYixjLGQsZSxmLGcsaCxrLG0pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOmpmKyt9KTt0aGlzLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKTt0aGlzLm5hbWU9IiI7dGhpcy5pbWFnZT12b2lkIDAhPT1hP2E6WC5ERUZBVUxUX0lNQUdFO3RoaXMubWlwbWFwcz1bXTt0aGlzLm1hcHBpbmc9dm9pZCAwIT09Yj9iOlguREVGQVVMVF9NQVBQSU5HO3RoaXMud3JhcFM9dm9pZCAwIT09Yz9jOjEwMDE7dGhpcy53cmFwVD0Kdm9pZCAwIT09ZD9kOjEwMDE7dGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09ZT9lOjEwMDY7dGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09Zj9mOjEwMDg7dGhpcy5hbmlzb3Ryb3B5PXZvaWQgMCE9PWs/azoxO3RoaXMuZm9ybWF0PXZvaWQgMCE9PWc/ZzoxMDIzO3RoaXMudHlwZT12b2lkIDAhPT1oP2g6MTAwOTt0aGlzLm9mZnNldD1uZXcgRCgwLDApO3RoaXMucmVwZWF0PW5ldyBEKDEsMSk7dGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITA7dGhpcy5wcmVtdWx0aXBseUFscGhhPSExO3RoaXMuZmxpcFk9ITA7dGhpcy51bnBhY2tBbGlnbm1lbnQ9NDt0aGlzLmVuY29kaW5nPXZvaWQgMCE9PW0/bTozRTM7dGhpcy52ZXJzaW9uPTA7dGhpcy5vblVwZGF0ZT1udWxsfWZ1bmN0aW9uIGdhKGEsYixjLGQpe3RoaXMueD1hfHwwO3RoaXMueT1ifHwwO3RoaXMuej1jfHwwO3RoaXMudz12b2lkIDAhPT1kP2Q6MX1mdW5jdGlvbiBEYihhLGIsYyl7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7dGhpcy53aWR0aD0KYTt0aGlzLmhlaWdodD1iO3RoaXMuc2Npc3Nvcj1uZXcgZ2EoMCwwLGEsYik7dGhpcy5zY2lzc29yVGVzdD0hMTt0aGlzLnZpZXdwb3J0PW5ldyBnYSgwLDAsYSxiKTtjPWN8fHt9O3ZvaWQgMD09PWMubWluRmlsdGVyJiYoYy5taW5GaWx0ZXI9MTAwNik7dGhpcy50ZXh0dXJlPW5ldyBYKHZvaWQgMCx2b2lkIDAsYy53cmFwUyxjLndyYXBULGMubWFnRmlsdGVyLGMubWluRmlsdGVyLGMuZm9ybWF0LGMudHlwZSxjLmFuaXNvdHJvcHksYy5lbmNvZGluZyk7dGhpcy5kZXB0aEJ1ZmZlcj12b2lkIDAhPT1jLmRlcHRoQnVmZmVyP2MuZGVwdGhCdWZmZXI6ITA7dGhpcy5zdGVuY2lsQnVmZmVyPXZvaWQgMCE9PWMuc3RlbmNpbEJ1ZmZlcj9jLnN0ZW5jaWxCdWZmZXI6ITA7dGhpcy5kZXB0aFRleHR1cmU9dm9pZCAwIT09Yy5kZXB0aFRleHR1cmU/Yy5kZXB0aFRleHR1cmU6bnVsbH1mdW5jdGlvbiBFYihhLGIsYyl7RGIuY2FsbCh0aGlzLGEsYixjKTt0aGlzLmFjdGl2ZU1pcE1hcExldmVsPQp0aGlzLmFjdGl2ZUN1YmVGYWNlPTB9ZnVuY3Rpb24gcWEoYSxiLGMsZCl7dGhpcy5feD1hfHwwO3RoaXMuX3k9Ynx8MDt0aGlzLl96PWN8fDA7dGhpcy5fdz12b2lkIDAhPT1kP2Q6MX1mdW5jdGlvbiBwKGEsYixjKXt0aGlzLng9YXx8MDt0aGlzLnk9Ynx8MDt0aGlzLno9Y3x8MH1mdW5jdGlvbiBKKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07MDxhcmd1bWVudHMubGVuZ3RoJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfWZ1bmN0aW9uIGViKGEsYixjLGQsZSxmLGcsaCxrLG0sdSxxKXtYLmNhbGwodGhpcyxudWxsLGYsZyxoLGssbSxkLGUsdSxxKTt0aGlzLmltYWdlPXtkYXRhOmEsd2lkdGg6YixoZWlnaHQ6Y307dGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09az9rOjEwMDM7dGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09Cm0/bToxMDAzO3RoaXMuZmxpcFk9dGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITE7dGhpcy51bnBhY2tBbGlnbm1lbnQ9MX1mdW5jdGlvbiBaYShhLGIsYyxkLGUsZixnLGgsayxtKXthPXZvaWQgMCE9PWE/YTpbXTtYLmNhbGwodGhpcyxhLHZvaWQgMCE9PWI/YjozMDEsYyxkLGUsZixnLGgsayxtKTt0aGlzLmZsaXBZPSExfWZ1bmN0aW9uIEZiKGEsYixjKXt2YXIgZD1hWzBdO2lmKDA+PWR8fDA8ZClyZXR1cm4gYTt2YXIgZT1iKmMsZj15ZVtlXTt2b2lkIDA9PT1mJiYoZj1uZXcgRmxvYXQzMkFycmF5KGUpLHllW2VdPWYpO2lmKDAhPT1iKWZvcihkLnRvQXJyYXkoZiwwKSxkPTEsZT0wO2QhPT1iOysrZCllKz1jLGFbZF0udG9BcnJheShmLGUpO3JldHVybiBmfWZ1bmN0aW9uIHplKGEsYil7dmFyIGM9QWVbYl07dm9pZCAwPT09YyYmKGM9bmV3IEludDMyQXJyYXkoYiksQWVbYl09Yyk7Zm9yKHZhciBkPTA7ZCE9PWI7KytkKWNbZF09YS5hbGxvY1RleHR1cmVVbml0KCk7cmV0dXJuIGN9ZnVuY3Rpb24ga2YoYSwKYil7YS51bmlmb3JtMWYodGhpcy5hZGRyLGIpfWZ1bmN0aW9uIGxmKGEsYil7YS51bmlmb3JtMWkodGhpcy5hZGRyLGIpfWZ1bmN0aW9uIG1mKGEsYil7dm9pZCAwPT09Yi54P2EudW5pZm9ybTJmdih0aGlzLmFkZHIsYik6YS51bmlmb3JtMmYodGhpcy5hZGRyLGIueCxiLnkpfWZ1bmN0aW9uIG5mKGEsYil7dm9pZCAwIT09Yi54P2EudW5pZm9ybTNmKHRoaXMuYWRkcixiLngsYi55LGIueik6dm9pZCAwIT09Yi5yP2EudW5pZm9ybTNmKHRoaXMuYWRkcixiLnIsYi5nLGIuYik6YS51bmlmb3JtM2Z2KHRoaXMuYWRkcixiKX1mdW5jdGlvbiBvZihhLGIpe3ZvaWQgMD09PWIueD9hLnVuaWZvcm00ZnYodGhpcy5hZGRyLGIpOmEudW5pZm9ybTRmKHRoaXMuYWRkcixiLngsYi55LGIueixiLncpfWZ1bmN0aW9uIHBmKGEsYil7YS51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxiLmVsZW1lbnRzfHxiKX1mdW5jdGlvbiBxZihhLGIpe3ZvaWQgMD09PWIuZWxlbWVudHM/YS51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwKITEsYik6KEJlLnNldChiLmVsZW1lbnRzKSxhLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLEJlKSl9ZnVuY3Rpb24gcmYoYSxiKXt2b2lkIDA9PT1iLmVsZW1lbnRzP2EudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsYik6KENlLnNldChiLmVsZW1lbnRzKSxhLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLENlKSl9ZnVuY3Rpb24gc2YoYSxiLGMpe3ZhciBkPWMuYWxsb2NUZXh0dXJlVW5pdCgpO2EudW5pZm9ybTFpKHRoaXMuYWRkcixkKTtjLnNldFRleHR1cmUyRChifHxEZSxkKX1mdW5jdGlvbiB0ZihhLGIsYyl7dmFyIGQ9Yy5hbGxvY1RleHR1cmVVbml0KCk7YS51bmlmb3JtMWkodGhpcy5hZGRyLGQpO2Muc2V0VGV4dHVyZUN1YmUoYnx8RWUsZCl9ZnVuY3Rpb24gRmUoYSxiKXthLnVuaWZvcm0yaXYodGhpcy5hZGRyLGIpfWZ1bmN0aW9uIEdlKGEsYil7YS51bmlmb3JtM2l2KHRoaXMuYWRkcixiKX1mdW5jdGlvbiBIZShhLGIpe2EudW5pZm9ybTRpdih0aGlzLmFkZHIsCmIpfWZ1bmN0aW9uIHVmKGEpe3N3aXRjaChhKXtjYXNlIDUxMjY6cmV0dXJuIGtmO2Nhc2UgMzU2NjQ6cmV0dXJuIG1mO2Nhc2UgMzU2NjU6cmV0dXJuIG5mO2Nhc2UgMzU2NjY6cmV0dXJuIG9mO2Nhc2UgMzU2NzQ6cmV0dXJuIHBmO2Nhc2UgMzU2NzU6cmV0dXJuIHFmO2Nhc2UgMzU2NzY6cmV0dXJuIHJmO2Nhc2UgMzU2Nzg6cmV0dXJuIHNmO2Nhc2UgMzU2ODA6cmV0dXJuIHRmO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBsZjtjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIEZlO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gR2U7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBIZX19ZnVuY3Rpb24gdmYoYSxiKXthLnVuaWZvcm0xZnYodGhpcy5hZGRyLGIpfWZ1bmN0aW9uIHdmKGEsYil7YS51bmlmb3JtMWl2KHRoaXMuYWRkcixiKX1mdW5jdGlvbiB4ZihhLGIpe2EudW5pZm9ybTJmdih0aGlzLmFkZHIsRmIoYix0aGlzLnNpemUsMikpfWZ1bmN0aW9uIHlmKGEsCmIpe2EudW5pZm9ybTNmdih0aGlzLmFkZHIsRmIoYix0aGlzLnNpemUsMykpfWZ1bmN0aW9uIHpmKGEsYil7YS51bmlmb3JtNGZ2KHRoaXMuYWRkcixGYihiLHRoaXMuc2l6ZSw0KSl9ZnVuY3Rpb24gQWYoYSxiKXthLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLEZiKGIsdGhpcy5zaXplLDQpKX1mdW5jdGlvbiBCZihhLGIpe2EudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsRmIoYix0aGlzLnNpemUsOSkpfWZ1bmN0aW9uIENmKGEsYil7YS51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxGYihiLHRoaXMuc2l6ZSwxNikpfWZ1bmN0aW9uIERmKGEsYixjKXt2YXIgZD1iLmxlbmd0aCxlPXplKGMsZCk7YS51bmlmb3JtMWl2KHRoaXMuYWRkcixlKTtmb3IoYT0wO2EhPT1kOysrYSljLnNldFRleHR1cmUyRChiW2FdfHxEZSxlW2FdKX1mdW5jdGlvbiBFZihhLGIsYyl7dmFyIGQ9Yi5sZW5ndGgsZT16ZShjLGQpO2EudW5pZm9ybTFpdih0aGlzLmFkZHIsZSk7Zm9yKGE9CjA7YSE9PWQ7KythKWMuc2V0VGV4dHVyZUN1YmUoYlthXXx8RWUsZVthXSl9ZnVuY3Rpb24gRmYoYSl7c3dpdGNoKGEpe2Nhc2UgNTEyNjpyZXR1cm4gdmY7Y2FzZSAzNTY2NDpyZXR1cm4geGY7Y2FzZSAzNTY2NTpyZXR1cm4geWY7Y2FzZSAzNTY2NjpyZXR1cm4gemY7Y2FzZSAzNTY3NDpyZXR1cm4gQWY7Y2FzZSAzNTY3NTpyZXR1cm4gQmY7Y2FzZSAzNTY3NjpyZXR1cm4gQ2Y7Y2FzZSAzNTY3ODpyZXR1cm4gRGY7Y2FzZSAzNTY4MDpyZXR1cm4gRWY7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIHdmO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gRmU7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBHZTtjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIEhlfX1mdW5jdGlvbiBHZihhLGIsYyl7dGhpcy5pZD1hO3RoaXMuYWRkcj1jO3RoaXMuc2V0VmFsdWU9dWYoYi50eXBlKX1mdW5jdGlvbiBIZihhLGIsYyl7dGhpcy5pZD1hO3RoaXMuYWRkcj1jO3RoaXMuc2l6ZT0KYi5zaXplO3RoaXMuc2V0VmFsdWU9RmYoYi50eXBlKX1mdW5jdGlvbiBJZShhKXt0aGlzLmlkPWE7dGhpcy5zZXE9W107dGhpcy5tYXA9e319ZnVuY3Rpb24gZmIoYSxiLGMpe3RoaXMuc2VxPVtdO3RoaXMubWFwPXt9O3RoaXMucmVuZGVyZXI9YztjPWEuZ2V0UHJvZ3JhbVBhcmFtZXRlcihiLGEuQUNUSVZFX1VOSUZPUk1TKTtmb3IodmFyIGQ9MDtkPGM7KytkKXt2YXIgZT1hLmdldEFjdGl2ZVVuaWZvcm0oYixkKSxmPWEuZ2V0VW5pZm9ybUxvY2F0aW9uKGIsZS5uYW1lKSxnPXRoaXMsaD1lLm5hbWUsaz1oLmxlbmd0aDtmb3IoUWQubGFzdEluZGV4PTA7Oyl7dmFyIG09UWQuZXhlYyhoKSx1PVFkLmxhc3RJbmRleCxxPW1bMV0sbj1tWzNdOyJdIj09PW1bMl0mJihxfD0wKTtpZih2b2lkIDA9PT1ufHwiWyI9PT1uJiZ1KzI9PT1rKXtoPWc7ZT12b2lkIDA9PT1uP25ldyBHZihxLGUsZik6bmV3IEhmKHEsZSxmKTtoLnNlcS5wdXNoKGUpO2gubWFwW2UuaWRdPWU7YnJlYWt9ZWxzZSBuPQpnLm1hcFtxXSx2b2lkIDA9PT1uJiYobj1uZXcgSWUocSkscT1nLGc9bixxLnNlcS5wdXNoKGcpLHEubWFwW2cuaWRdPWcpLGc9bn19fWZ1bmN0aW9uIEgoYSxiLGMpe3JldHVybiB2b2lkIDA9PT1iJiZ2b2lkIDA9PT1jP3RoaXMuc2V0KGEpOnRoaXMuc2V0UkdCKGEsYixjKX1mdW5jdGlvbiBpZChhLGIpe3RoaXMubWluPXZvaWQgMCE9PWE/YTpuZXcgRChJbmZpbml0eSxJbmZpbml0eSk7dGhpcy5tYXg9dm9pZCAwIT09Yj9iOm5ldyBEKC1JbmZpbml0eSwtSW5maW5pdHkpfWZ1bmN0aW9uIElmKGEsYil7dmFyIGMsZCxlLGYsZyxoLGssbSx1LHEsbj1hLmNvbnRleHQscj1hLnN0YXRlLGwsdCx5LHgsdixHO3RoaXMucmVuZGVyPWZ1bmN0aW9uKHcsTyxTKXtpZigwIT09Yi5sZW5ndGgpe3c9bmV3IHA7dmFyIEU9Uy53L1MueixGPS41KlMueixhYT0uNSpTLncsUj0xNi9TLncsY2E9bmV3IEQoUipFLFIpLGxhPW5ldyBwKDEsMSwwKSxnYj1uZXcgRCgxLDEpLEdiPW5ldyBpZDtHYi5taW4uc2V0KFMueCwKUy55KTtHYi5tYXguc2V0KFMueCsoUy56LTE2KSxTLnkrKFMudy0xNikpO2lmKHZvaWQgMD09PXgpe3ZhciBSPW5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLDAsMCwxLC0xLDEsMCwxLDEsMSwxLC0xLDEsMCwxXSksamE9bmV3IFVpbnQxNkFycmF5KFswLDEsMiwwLDIsM10pO2w9bi5jcmVhdGVCdWZmZXIoKTt0PW4uY3JlYXRlQnVmZmVyKCk7bi5iaW5kQnVmZmVyKG4uQVJSQVlfQlVGRkVSLGwpO24uYnVmZmVyRGF0YShuLkFSUkFZX0JVRkZFUixSLG4uU1RBVElDX0RSQVcpO24uYmluZEJ1ZmZlcihuLkVMRU1FTlRfQVJSQVlfQlVGRkVSLHQpO24uYnVmZmVyRGF0YShuLkVMRU1FTlRfQVJSQVlfQlVGRkVSLGphLG4uU1RBVElDX0RSQVcpO3Y9bi5jcmVhdGVUZXh0dXJlKCk7Rz1uLmNyZWF0ZVRleHR1cmUoKTtyLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCx2KTtuLnRleEltYWdlMkQobi5URVhUVVJFXzJELDAsbi5SR0IsMTYsMTYsMCxuLlJHQixuLlVOU0lHTkVEX0JZVEUsbnVsbCk7Cm4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfUyxuLkNMQU1QX1RPX0VER0UpO24udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfVCxuLkNMQU1QX1RPX0VER0UpO24udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01BR19GSUxURVIsbi5ORUFSRVNUKTtuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTkVBUkVTVCk7ci5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsRyk7bi50ZXhJbWFnZTJEKG4uVEVYVFVSRV8yRCwwLG4uUkdCQSwxNiwxNiwwLG4uUkdCQSxuLlVOU0lHTkVEX0JZVEUsbnVsbCk7bi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9TLG4uQ0xBTVBfVE9fRURHRSk7bi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9ULG4uQ0xBTVBfVE9fRURHRSk7bi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCwKbi5URVhUVVJFX01BR19GSUxURVIsbi5ORUFSRVNUKTtuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTkVBUkVTVCk7dmFyIFI9eT17dmVydGV4U2hhZGVyOiJ1bmlmb3JtIGxvd3AgaW50IHJlbmRlclR5cGU7XG51bmlmb3JtIHZlYzMgc2NyZWVuUG9zaXRpb247XG51bmlmb3JtIHZlYzIgc2NhbGU7XG51bmlmb3JtIGZsb2F0IHJvdGF0aW9uO1xudW5pZm9ybSBzYW1wbGVyMkQgb2NjbHVzaW9uTWFwO1xuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMiB1djtcbnZhcnlpbmcgdmVjMiB2VVY7XG52YXJ5aW5nIGZsb2F0IHZWaXNpYmlsaXR5O1xudm9pZCBtYWluKCkge1xudlVWID0gdXY7XG52ZWMyIHBvcyA9IHBvc2l0aW9uO1xuaWYgKCByZW5kZXJUeXBlID09IDIgKSB7XG52ZWM0IHZpc2liaWxpdHkgPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC4xLCAwLjEgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC41LCAwLjEgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC45LCAwLjEgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC45LCAwLjUgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC45LCAwLjkgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC41LCAwLjkgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC4xLCAwLjkgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC4xLCAwLjUgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC41LCAwLjUgKSApO1xudlZpc2liaWxpdHkgPSAgICAgICAgdmlzaWJpbGl0eS5yIC8gOS4wO1xudlZpc2liaWxpdHkgKj0gMS4wIC0gdmlzaWJpbGl0eS5nIC8gOS4wO1xudlZpc2liaWxpdHkgKj0gICAgICAgdmlzaWJpbGl0eS5iIC8gOS4wO1xudlZpc2liaWxpdHkgKj0gMS4wIC0gdmlzaWJpbGl0eS5hIC8gOS4wO1xucG9zLnggPSBjb3MoIHJvdGF0aW9uICkgKiBwb3NpdGlvbi54IC0gc2luKCByb3RhdGlvbiApICogcG9zaXRpb24ueTtcbnBvcy55ID0gc2luKCByb3RhdGlvbiApICogcG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIHBvc2l0aW9uLnk7XG59XG5nbF9Qb3NpdGlvbiA9IHZlYzQoICggcG9zICogc2NhbGUgKyBzY3JlZW5Qb3NpdGlvbi54eSApLnh5LCBzY3JlZW5Qb3NpdGlvbi56LCAxLjAgKTtcbn0iLApmcmFnbWVudFNoYWRlcjoidW5pZm9ybSBsb3dwIGludCByZW5kZXJUeXBlO1xudW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSB2ZWMzIGNvbG9yO1xudmFyeWluZyB2ZWMyIHZVVjtcbnZhcnlpbmcgZmxvYXQgdlZpc2liaWxpdHk7XG52b2lkIG1haW4oKSB7XG5pZiAoIHJlbmRlclR5cGUgPT0gMCApIHtcbmdsX0ZyYWdDb2xvciA9IHZlYzQoIDEuMCwgMC4wLCAxLjAsIDAuMCApO1xufSBlbHNlIGlmICggcmVuZGVyVHlwZSA9PSAxICkge1xuZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCBtYXAsIHZVViApO1xufSBlbHNlIHtcbnZlYzQgdGV4dHVyZSA9IHRleHR1cmUyRCggbWFwLCB2VVYgKTtcbnRleHR1cmUuYSAqPSBvcGFjaXR5ICogdlZpc2liaWxpdHk7XG5nbF9GcmFnQ29sb3IgPSB0ZXh0dXJlO1xuZ2xfRnJhZ0NvbG9yLnJnYiAqPSBjb2xvcjtcbn1cbn0ifSxqYT1uLmNyZWF0ZVByb2dyYW0oKSxQPW4uY3JlYXRlU2hhZGVyKG4uRlJBR01FTlRfU0hBREVSKSwKSz1uLmNyZWF0ZVNoYWRlcihuLlZFUlRFWF9TSEFERVIpLFc9InByZWNpc2lvbiAiK2EuZ2V0UHJlY2lzaW9uKCkrIiBmbG9hdDtcbiI7bi5zaGFkZXJTb3VyY2UoUCxXK1IuZnJhZ21lbnRTaGFkZXIpO24uc2hhZGVyU291cmNlKEssVytSLnZlcnRleFNoYWRlcik7bi5jb21waWxlU2hhZGVyKFApO24uY29tcGlsZVNoYWRlcihLKTtuLmF0dGFjaFNoYWRlcihqYSxQKTtuLmF0dGFjaFNoYWRlcihqYSxLKTtuLmxpbmtQcm9ncmFtKGphKTt4PWphO3U9bi5nZXRBdHRyaWJMb2NhdGlvbih4LCJwb3NpdGlvbiIpO3E9bi5nZXRBdHRyaWJMb2NhdGlvbih4LCJ1diIpO2M9bi5nZXRVbmlmb3JtTG9jYXRpb24oeCwicmVuZGVyVHlwZSIpO2Q9bi5nZXRVbmlmb3JtTG9jYXRpb24oeCwibWFwIik7ZT1uLmdldFVuaWZvcm1Mb2NhdGlvbih4LCJvY2NsdXNpb25NYXAiKTtmPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKHgsIm9wYWNpdHkiKTtnPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKHgsImNvbG9yIik7Cmg9bi5nZXRVbmlmb3JtTG9jYXRpb24oeCwic2NhbGUiKTtrPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKHgsInJvdGF0aW9uIik7bT1uLmdldFVuaWZvcm1Mb2NhdGlvbih4LCJzY3JlZW5Qb3NpdGlvbiIpfW4udXNlUHJvZ3JhbSh4KTtyLmluaXRBdHRyaWJ1dGVzKCk7ci5lbmFibGVBdHRyaWJ1dGUodSk7ci5lbmFibGVBdHRyaWJ1dGUocSk7ci5kaXNhYmxlVW51c2VkQXR0cmlidXRlcygpO24udW5pZm9ybTFpKGUsMCk7bi51bmlmb3JtMWkoZCwxKTtuLmJpbmRCdWZmZXIobi5BUlJBWV9CVUZGRVIsbCk7bi52ZXJ0ZXhBdHRyaWJQb2ludGVyKHUsMixuLkZMT0FULCExLDE2LDApO24udmVydGV4QXR0cmliUG9pbnRlcihxLDIsbi5GTE9BVCwhMSwxNiw4KTtuLmJpbmRCdWZmZXIobi5FTEVNRU5UX0FSUkFZX0JVRkZFUix0KTtyLmRpc2FibGUobi5DVUxMX0ZBQ0UpO3IuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCExKTtqYT0wO2ZvcihQPWIubGVuZ3RoO2phPFA7amErKylpZihSPTE2L1MudywKY2Euc2V0KFIqRSxSKSxLPWJbamFdLHcuc2V0KEsubWF0cml4V29ybGQuZWxlbWVudHNbMTJdLEsubWF0cml4V29ybGQuZWxlbWVudHNbMTNdLEsubWF0cml4V29ybGQuZWxlbWVudHNbMTRdKSx3LmFwcGx5TWF0cml4NChPLm1hdHJpeFdvcmxkSW52ZXJzZSksdy5hcHBseU1hdHJpeDQoTy5wcm9qZWN0aW9uTWF0cml4KSxsYS5jb3B5KHcpLGdiLng9Uy54K2xhLngqRitGLTgsZ2IueT1TLnkrbGEueSphYSthYS04LCEwPT09R2IuY29udGFpbnNQb2ludChnYikpe3IuYWN0aXZlVGV4dHVyZShuLlRFWFRVUkUwKTtyLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCxudWxsKTtyLmFjdGl2ZVRleHR1cmUobi5URVhUVVJFMSk7ci5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsdik7bi5jb3B5VGV4SW1hZ2UyRChuLlRFWFRVUkVfMkQsMCxuLlJHQixnYi54LGdiLnksMTYsMTYsMCk7bi51bmlmb3JtMWkoYywwKTtuLnVuaWZvcm0yZihoLGNhLngsY2EueSk7bi51bmlmb3JtM2YobSxsYS54LGxhLnksCmxhLnopO3IuZGlzYWJsZShuLkJMRU5EKTtyLmVuYWJsZShuLkRFUFRIX1RFU1QpO24uZHJhd0VsZW1lbnRzKG4uVFJJQU5HTEVTLDYsbi5VTlNJR05FRF9TSE9SVCwwKTtyLmFjdGl2ZVRleHR1cmUobi5URVhUVVJFMCk7ci5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsRyk7bi5jb3B5VGV4SW1hZ2UyRChuLlRFWFRVUkVfMkQsMCxuLlJHQkEsZ2IueCxnYi55LDE2LDE2LDApO24udW5pZm9ybTFpKGMsMSk7ci5kaXNhYmxlKG4uREVQVEhfVEVTVCk7ci5hY3RpdmVUZXh0dXJlKG4uVEVYVFVSRTEpO3IuYmluZFRleHR1cmUobi5URVhUVVJFXzJELHYpO24uZHJhd0VsZW1lbnRzKG4uVFJJQU5HTEVTLDYsbi5VTlNJR05FRF9TSE9SVCwwKTtLLnBvc2l0aW9uU2NyZWVuLmNvcHkobGEpO0suY3VzdG9tVXBkYXRlQ2FsbGJhY2s/Sy5jdXN0b21VcGRhdGVDYWxsYmFjayhLKTpLLnVwZGF0ZUxlbnNGbGFyZXMoKTtuLnVuaWZvcm0xaShjLDIpO3IuZW5hYmxlKG4uQkxFTkQpO2Zvcih2YXIgVz0KMCxiYT1LLmxlbnNGbGFyZXMubGVuZ3RoO1c8YmE7VysrKXt2YXIgVD1LLmxlbnNGbGFyZXNbV107LjAwMTxULm9wYWNpdHkmJi4wMDE8VC5zY2FsZSYmKGxhLng9VC54LGxhLnk9VC55LGxhLno9VC56LFI9VC5zaXplKlQuc2NhbGUvUy53LGNhLng9UipFLGNhLnk9UixuLnVuaWZvcm0zZihtLGxhLngsbGEueSxsYS56KSxuLnVuaWZvcm0yZihoLGNhLngsY2EueSksbi51bmlmb3JtMWYoayxULnJvdGF0aW9uKSxuLnVuaWZvcm0xZihmLFQub3BhY2l0eSksbi51bmlmb3JtM2YoZyxULmNvbG9yLnIsVC5jb2xvci5nLFQuY29sb3IuYiksci5zZXRCbGVuZGluZyhULmJsZW5kaW5nLFQuYmxlbmRFcXVhdGlvbixULmJsZW5kU3JjLFQuYmxlbmREc3QpLGEuc2V0VGV4dHVyZTJEKFQudGV4dHVyZSwxKSxuLmRyYXdFbGVtZW50cyhuLlRSSUFOR0xFUyw2LG4uVU5TSUdORURfU0hPUlQsMCkpfX1yLmVuYWJsZShuLkNVTExfRkFDRSk7ci5lbmFibGUobi5ERVBUSF9URVNUKTtyLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayghMCk7CmEucmVzZXRHTFN0YXRlKCl9fX1mdW5jdGlvbiBKZihhLGIpe3ZhciBjLGQsZSxmLGcsaCxrLG0sdSxxLG4scixsLHQseSx4LHY7ZnVuY3Rpb24gRyhhLGIpe3JldHVybiBhLnJlbmRlck9yZGVyIT09Yi5yZW5kZXJPcmRlcj9hLnJlbmRlck9yZGVyLWIucmVuZGVyT3JkZXI6YS56IT09Yi56P2Iuei1hLno6Yi5pZC1hLmlkfXZhciB3PWEuY29udGV4dCxPPWEuc3RhdGUsUyxFLEYsYWEsUj1uZXcgcCxjYT1uZXcgcWEsbGE9bmV3IHA7dGhpcy5yZW5kZXI9ZnVuY3Rpb24ocCxHYil7aWYoMCE9PWIubGVuZ3RoKXtpZih2b2lkIDA9PT1GKXt2YXIgamE9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsLjUsLS41LDEsMCwuNSwuNSwxLDEsLS41LC41LDAsMV0pLFA9bmV3IFVpbnQxNkFycmF5KFswLDEsMiwwLDIsM10pO1M9dy5jcmVhdGVCdWZmZXIoKTtFPXcuY3JlYXRlQnVmZmVyKCk7dy5iaW5kQnVmZmVyKHcuQVJSQVlfQlVGRkVSLFMpO3cuYnVmZmVyRGF0YSh3LkFSUkFZX0JVRkZFUiwKamEsdy5TVEFUSUNfRFJBVyk7dy5iaW5kQnVmZmVyKHcuRUxFTUVOVF9BUlJBWV9CVUZGRVIsRSk7dy5idWZmZXJEYXRhKHcuRUxFTUVOVF9BUlJBWV9CVUZGRVIsUCx3LlNUQVRJQ19EUkFXKTt2YXIgamE9dy5jcmVhdGVQcm9ncmFtKCksUD13LmNyZWF0ZVNoYWRlcih3LlZFUlRFWF9TSEFERVIpLEs9dy5jcmVhdGVTaGFkZXIody5GUkFHTUVOVF9TSEFERVIpO3cuc2hhZGVyU291cmNlKFAsWyJwcmVjaXNpb24gIithLmdldFByZWNpc2lvbigpKyIgZmxvYXQ7IiwidW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDtcbnVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4O1xudW5pZm9ybSBmbG9hdCByb3RhdGlvbjtcbnVuaWZvcm0gdmVjMiBzY2FsZTtcbnVuaWZvcm0gdmVjMiB1dk9mZnNldDtcbnVuaWZvcm0gdmVjMiB1dlNjYWxlO1xuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMiB1djtcbnZhcnlpbmcgdmVjMiB2VVY7XG52b2lkIG1haW4oKSB7XG52VVYgPSB1dk9mZnNldCArIHV2ICogdXZTY2FsZTtcbnZlYzIgYWxpZ25lZFBvc2l0aW9uID0gcG9zaXRpb24gKiBzY2FsZTtcbnZlYzIgcm90YXRlZFBvc2l0aW9uO1xucm90YXRlZFBvc2l0aW9uLnggPSBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xucm90YXRlZFBvc2l0aW9uLnkgPSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xudmVjNCBmaW5hbFBvc2l0aW9uO1xuZmluYWxQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuZmluYWxQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247XG5maW5hbFBvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIGZpbmFsUG9zaXRpb247XG5nbF9Qb3NpdGlvbiA9IGZpbmFsUG9zaXRpb247XG59Il0uam9pbigiXG4iKSk7Cncuc2hhZGVyU291cmNlKEssWyJwcmVjaXNpb24gIithLmdldFByZWNpc2lvbigpKyIgZmxvYXQ7IiwidW5pZm9ybSB2ZWMzIGNvbG9yO1xudW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBpbnQgZm9nVHlwZTtcbnVuaWZvcm0gdmVjMyBmb2dDb2xvcjtcbnVuaWZvcm0gZmxvYXQgZm9nRGVuc2l0eTtcbnVuaWZvcm0gZmxvYXQgZm9nTmVhcjtcbnVuaWZvcm0gZmxvYXQgZm9nRmFyO1xudW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7XG52YXJ5aW5nIHZlYzIgdlVWO1xudm9pZCBtYWluKCkge1xudmVjNCB0ZXh0dXJlID0gdGV4dHVyZTJEKCBtYXAsIHZVViApO1xuaWYgKCB0ZXh0dXJlLmEgPCBhbHBoYVRlc3QgKSBkaXNjYXJkO1xuZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IgKiB0ZXh0dXJlLnh5eiwgdGV4dHVyZS5hICogb3BhY2l0eSApO1xuaWYgKCBmb2dUeXBlID4gMCApIHtcbmZsb2F0IGRlcHRoID0gZ2xfRnJhZ0Nvb3JkLnogLyBnbF9GcmFnQ29vcmQudztcbmZsb2F0IGZvZ0ZhY3RvciA9IDAuMDtcbmlmICggZm9nVHlwZSA9PSAxICkge1xuZm9nRmFjdG9yID0gc21vb3Roc3RlcCggZm9nTmVhciwgZm9nRmFyLCBkZXB0aCApO1xufSBlbHNlIHtcbmNvbnN0IGZsb2F0IExPRzIgPSAxLjQ0MjY5NTtcbmZvZ0ZhY3RvciA9IGV4cDIoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiBkZXB0aCAqIGRlcHRoICogTE9HMiApO1xuZm9nRmFjdG9yID0gMS4wIC0gY2xhbXAoIGZvZ0ZhY3RvciwgMC4wLCAxLjAgKTtcbn1cbmdsX0ZyYWdDb2xvciA9IG1peCggZ2xfRnJhZ0NvbG9yLCB2ZWM0KCBmb2dDb2xvciwgZ2xfRnJhZ0NvbG9yLncgKSwgZm9nRmFjdG9yICk7XG59XG59Il0uam9pbigiXG4iKSk7CncuY29tcGlsZVNoYWRlcihQKTt3LmNvbXBpbGVTaGFkZXIoSyk7dy5hdHRhY2hTaGFkZXIoamEsUCk7dy5hdHRhY2hTaGFkZXIoamEsSyk7dy5saW5rUHJvZ3JhbShqYSk7Rj1qYTt4PXcuZ2V0QXR0cmliTG9jYXRpb24oRiwicG9zaXRpb24iKTt2PXcuZ2V0QXR0cmliTG9jYXRpb24oRiwidXYiKTtjPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsInV2T2Zmc2V0Iik7ZD13LmdldFVuaWZvcm1Mb2NhdGlvbihGLCJ1dlNjYWxlIik7ZT13LmdldFVuaWZvcm1Mb2NhdGlvbihGLCJyb3RhdGlvbiIpO2Y9dy5nZXRVbmlmb3JtTG9jYXRpb24oRiwic2NhbGUiKTtnPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImNvbG9yIik7aD13LmdldFVuaWZvcm1Mb2NhdGlvbihGLCJtYXAiKTtrPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsIm9wYWNpdHkiKTttPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsIm1vZGVsVmlld01hdHJpeCIpO3U9dy5nZXRVbmlmb3JtTG9jYXRpb24oRiwicHJvamVjdGlvbk1hdHJpeCIpOwpxPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImZvZ1R5cGUiKTtuPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImZvZ0RlbnNpdHkiKTtyPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImZvZ05lYXIiKTtsPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImZvZ0ZhciIpO3Q9dy5nZXRVbmlmb3JtTG9jYXRpb24oRiwiZm9nQ29sb3IiKTt5PXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImFscGhhVGVzdCIpO2phPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImNhbnZhcyIpO2phLndpZHRoPTg7amEuaGVpZ2h0PTg7UD1qYS5nZXRDb250ZXh0KCIyZCIpO1AuZmlsbFN0eWxlPSJ3aGl0ZSI7UC5maWxsUmVjdCgwLDAsOCw4KTthYT1uZXcgWChqYSk7YWEubmVlZHNVcGRhdGU9ITB9dy51c2VQcm9ncmFtKEYpO08uaW5pdEF0dHJpYnV0ZXMoKTtPLmVuYWJsZUF0dHJpYnV0ZSh4KTtPLmVuYWJsZUF0dHJpYnV0ZSh2KTtPLmRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzKCk7Ck8uZGlzYWJsZSh3LkNVTExfRkFDRSk7Ty5lbmFibGUody5CTEVORCk7dy5iaW5kQnVmZmVyKHcuQVJSQVlfQlVGRkVSLFMpO3cudmVydGV4QXR0cmliUG9pbnRlcih4LDIsdy5GTE9BVCwhMSwxNiwwKTt3LnZlcnRleEF0dHJpYlBvaW50ZXIodiwyLHcuRkxPQVQsITEsMTYsOCk7dy5iaW5kQnVmZmVyKHcuRUxFTUVOVF9BUlJBWV9CVUZGRVIsRSk7dy51bmlmb3JtTWF0cml4NGZ2KHUsITEsR2IucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyk7Ty5hY3RpdmVUZXh0dXJlKHcuVEVYVFVSRTApO3cudW5pZm9ybTFpKGgsMCk7UD1qYT0wOyhLPXAuZm9nKT8ody51bmlmb3JtM2YodCxLLmNvbG9yLnIsSy5jb2xvci5nLEsuY29sb3IuYiksSy5pc0ZvZz8ody51bmlmb3JtMWYocixLLm5lYXIpLHcudW5pZm9ybTFmKGwsSy5mYXIpLHcudW5pZm9ybTFpKHEsMSksUD1qYT0xKTpLLmlzRm9nRXhwMiYmKHcudW5pZm9ybTFmKG4sSy5kZW5zaXR5KSx3LnVuaWZvcm0xaShxLDIpLFA9amE9MikpOgoody51bmlmb3JtMWkocSwwKSxQPWphPTApO2Zvcih2YXIgSz0wLFc9Yi5sZW5ndGg7SzxXO0srKyl7dmFyIGJhPWJbS107YmEubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoR2IubWF0cml4V29ybGRJbnZlcnNlLGJhLm1hdHJpeFdvcmxkKTtiYS56PS1iYS5tb2RlbFZpZXdNYXRyaXguZWxlbWVudHNbMTRdfWIuc29ydChHKTtmb3IodmFyIFQ9W10sSz0wLFc9Yi5sZW5ndGg7SzxXO0srKyl7dmFyIGJhPWJbS10sUT1iYS5tYXRlcmlhbDshMSE9PVEudmlzaWJsZSYmKHcudW5pZm9ybTFmKHksUS5hbHBoYVRlc3QpLHcudW5pZm9ybU1hdHJpeDRmdihtLCExLGJhLm1vZGVsVmlld01hdHJpeC5lbGVtZW50cyksYmEubWF0cml4V29ybGQuZGVjb21wb3NlKFIsY2EsbGEpLFRbMF09bGEueCxUWzFdPWxhLnksYmE9MCxwLmZvZyYmUS5mb2cmJihiYT1QKSxqYSE9PWJhJiYody51bmlmb3JtMWkocSxiYSksamE9YmEpLG51bGwhPT1RLm1hcD8ody51bmlmb3JtMmYoYyxRLm1hcC5vZmZzZXQueCwKUS5tYXAub2Zmc2V0LnkpLHcudW5pZm9ybTJmKGQsUS5tYXAucmVwZWF0LngsUS5tYXAucmVwZWF0LnkpKToody51bmlmb3JtMmYoYywwLDApLHcudW5pZm9ybTJmKGQsMSwxKSksdy51bmlmb3JtMWYoayxRLm9wYWNpdHkpLHcudW5pZm9ybTNmKGcsUS5jb2xvci5yLFEuY29sb3IuZyxRLmNvbG9yLmIpLHcudW5pZm9ybTFmKGUsUS5yb3RhdGlvbiksdy51bmlmb3JtMmZ2KGYsVCksTy5zZXRCbGVuZGluZyhRLmJsZW5kaW5nLFEuYmxlbmRFcXVhdGlvbixRLmJsZW5kU3JjLFEuYmxlbmREc3QpLE8uYnVmZmVycy5kZXB0aC5zZXRUZXN0KFEuZGVwdGhUZXN0KSxPLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayhRLmRlcHRoV3JpdGUpLFEubWFwP2Euc2V0VGV4dHVyZTJEKFEubWFwLDApOmEuc2V0VGV4dHVyZTJEKGFhLDApLHcuZHJhd0VsZW1lbnRzKHcuVFJJQU5HTEVTLDYsdy5VTlNJR05FRF9TSE9SVCwwKSl9Ty5lbmFibGUody5DVUxMX0ZBQ0UpO2EucmVzZXRHTFN0YXRlKCl9fX1mdW5jdGlvbiBaKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsCiJpZCIse3ZhbHVlOktmKyt9KTt0aGlzLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKTt0aGlzLm5hbWU9IiI7dGhpcy50eXBlPSJNYXRlcmlhbCI7dGhpcy5saWdodHM9dGhpcy5mb2c9ITA7dGhpcy5ibGVuZGluZz0xO3RoaXMuc2lkZT0wO3RoaXMuc2hhZGluZz0yO3RoaXMudmVydGV4Q29sb3JzPTA7dGhpcy5vcGFjaXR5PTE7dGhpcy50cmFuc3BhcmVudD0hMTt0aGlzLmJsZW5kU3JjPTIwNDt0aGlzLmJsZW5kRHN0PTIwNTt0aGlzLmJsZW5kRXF1YXRpb249MTAwO3RoaXMuYmxlbmRFcXVhdGlvbkFscGhhPXRoaXMuYmxlbmREc3RBbHBoYT10aGlzLmJsZW5kU3JjQWxwaGE9bnVsbDt0aGlzLmRlcHRoRnVuYz0zO3RoaXMuZGVwdGhXcml0ZT10aGlzLmRlcHRoVGVzdD0hMDt0aGlzLmNsaXBwaW5nUGxhbmVzPW51bGw7dGhpcy5jbGlwU2hhZG93cz10aGlzLmNsaXBJbnRlcnNlY3Rpb249ITE7dGhpcy5jb2xvcldyaXRlPSEwO3RoaXMucHJlY2lzaW9uPW51bGw7dGhpcy5wb2x5Z29uT2Zmc2V0PQohMTt0aGlzLnBvbHlnb25PZmZzZXRVbml0cz10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9MDt0aGlzLmRpdGhlcmluZz0hMTt0aGlzLmFscGhhVGVzdD0wO3RoaXMucHJlbXVsdGlwbGllZEFscGhhPSExO3RoaXMub3ZlcmRyYXc9MDt0aGlzLm5lZWRzVXBkYXRlPXRoaXMudmlzaWJsZT0hMH1mdW5jdGlvbiBFYShhKXtaLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTaGFkZXJNYXRlcmlhbCI7dGhpcy5kZWZpbmVzPXt9O3RoaXMudW5pZm9ybXM9e307dGhpcy52ZXJ0ZXhTaGFkZXI9InZvaWQgbWFpbigpIHtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSI7dGhpcy5mcmFnbWVudFNoYWRlcj0idm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTtcbn0iO3RoaXMubGluZXdpZHRoPTE7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9CjE7dGhpcy5tb3JwaE5vcm1hbHM9dGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz10aGlzLmNsaXBwaW5nPXRoaXMubGlnaHRzPXRoaXMuZm9nPSExO3RoaXMuZXh0ZW5zaW9ucz17ZGVyaXZhdGl2ZXM6ITEsZnJhZ0RlcHRoOiExLGRyYXdCdWZmZXJzOiExLHNoYWRlclRleHR1cmVMT0Q6ITF9O3RoaXMuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcz17Y29sb3I6WzEsMSwxXSx1djpbMCwwXSx1djI6WzAsMF19O3RoaXMuaW5kZXgwQXR0cmlidXRlTmFtZT12b2lkIDA7dm9pZCAwIT09YSYmKHZvaWQgMCE9PWEuYXR0cmlidXRlcyYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXMoYSkpfWZ1bmN0aW9uICRhKGEpe1ouY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ik1lc2hEZXB0aE1hdGVyaWFsIjt0aGlzLmRlcHRoUGFja2luZz0KMzIwMDt0aGlzLm1vcnBoVGFyZ2V0cz10aGlzLnNraW5uaW5nPSExO3RoaXMuZGlzcGxhY2VtZW50TWFwPXRoaXMuYWxwaGFNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTE7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPTA7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLmxpZ2h0cz10aGlzLmZvZz0hMTt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiBUYShhLGIpe3RoaXMubWluPXZvaWQgMCE9PWE/YTpuZXcgcChJbmZpbml0eSxJbmZpbml0eSxJbmZpbml0eSk7dGhpcy5tYXg9dm9pZCAwIT09Yj9iOm5ldyBwKC1JbmZpbml0eSwtSW5maW5pdHksLUluZmluaXR5KX1mdW5jdGlvbiBHYShhLGIpe3RoaXMuY2VudGVyPXZvaWQgMCE9PWE/YTpuZXcgcDt0aGlzLnJhZGl1cz12b2lkIDAhPT1iP2I6MH1mdW5jdGlvbiBLYSgpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMSwwLDAsMCwxXTswPGFyZ3VtZW50cy5sZW5ndGgmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9CmZ1bmN0aW9uIHdhKGEsYil7dGhpcy5ub3JtYWw9dm9pZCAwIT09YT9hOm5ldyBwKDEsMCwwKTt0aGlzLmNvbnN0YW50PXZvaWQgMCE9PWI/YjowfWZ1bmN0aW9uIGpkKGEsYixjLGQsZSxmKXt0aGlzLnBsYW5lcz1bdm9pZCAwIT09YT9hOm5ldyB3YSx2b2lkIDAhPT1iP2I6bmV3IHdhLHZvaWQgMCE9PWM/YzpuZXcgd2Esdm9pZCAwIT09ZD9kOm5ldyB3YSx2b2lkIDAhPT1lP2U6bmV3IHdhLHZvaWQgMCE9PWY/ZjpuZXcgd2FdfWZ1bmN0aW9uIEplKGEsYixjLGQpe2Z1bmN0aW9uIGUoYixjLGQsZSl7dmFyIGY9Yi5nZW9tZXRyeSxnO2c9dDt2YXIgaD1iLmN1c3RvbURlcHRoTWF0ZXJpYWw7ZCYmKGc9eSxoPWIuY3VzdG9tRGlzdGFuY2VNYXRlcmlhbCk7aD9nPWg6KGg9ITEsYy5tb3JwaFRhcmdldHMmJihmJiZmLmlzQnVmZmVyR2VvbWV0cnk/aD1mLm1vcnBoQXR0cmlidXRlcyYmZi5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24mJjA8Zi5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOgpmJiZmLmlzR2VvbWV0cnkmJihoPWYubW9ycGhUYXJnZXRzJiYwPGYubW9ycGhUYXJnZXRzLmxlbmd0aCkpLGIuaXNTa2lubmVkTWVzaCYmITE9PT1jLnNraW5uaW5nJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiBUSFJFRS5Ta2lubmVkTWVzaCB3aXRoIG1hdGVyaWFsLnNraW5uaW5nIHNldCB0byBmYWxzZToiLGIpLGI9Yi5pc1NraW5uZWRNZXNoJiZjLnNraW5uaW5nLGY9MCxoJiYoZnw9MSksYiYmKGZ8PTIpLGc9Z1tmXSk7YS5sb2NhbENsaXBwaW5nRW5hYmxlZCYmITA9PT1jLmNsaXBTaGFkb3dzJiYwIT09Yy5jbGlwcGluZ1BsYW5lcy5sZW5ndGgmJihmPWcudXVpZCxoPWMudXVpZCxiPXhbZl0sdm9pZCAwPT09YiYmKGI9e30seFtmXT1iKSxmPWJbaF0sdm9pZCAwPT09ZiYmKGY9Zy5jbG9uZSgpLGJbaF09ZiksZz1mKTtnLnZpc2libGU9Yy52aXNpYmxlO2cud2lyZWZyYW1lPWMud2lyZWZyYW1lO2g9Yy5zaWRlO1IucmVuZGVyU2luZ2xlU2lkZWQmJjI9PWgmJgooaD0wKTtSLnJlbmRlclJldmVyc2VTaWRlZCYmKDA9PT1oP2g9MToxPT09aCYmKGg9MCkpO2cuc2lkZT1oO2cuY2xpcFNoYWRvd3M9Yy5jbGlwU2hhZG93cztnLmNsaXBwaW5nUGxhbmVzPWMuY2xpcHBpbmdQbGFuZXM7Zy53aXJlZnJhbWVMaW5ld2lkdGg9Yy53aXJlZnJhbWVMaW5ld2lkdGg7Zy5saW5ld2lkdGg9Yy5saW5ld2lkdGg7ZCYmdm9pZCAwIT09Zy51bmlmb3Jtcy5saWdodFBvcyYmZy51bmlmb3Jtcy5saWdodFBvcy52YWx1ZS5jb3B5KGUpO3JldHVybiBnfWZ1bmN0aW9uIGYoYixkLGcsaCl7aWYoITEhPT1iLnZpc2libGUpe2lmKGIubGF5ZXJzLnRlc3QoZC5sYXllcnMpJiYoYi5pc01lc2h8fGIuaXNMaW5lfHxiLmlzUG9pbnRzKSYmYi5jYXN0U2hhZG93JiYoIWIuZnJ1c3R1bUN1bGxlZHx8ay5pbnRlcnNlY3RzT2JqZWN0KGIpKSl7Yi5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhnLm1hdHJpeFdvcmxkSW52ZXJzZSxiLm1hdHJpeFdvcmxkKTt2YXIgbT0KYy51cGRhdGUoYiksbj1iLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHZhciB1PW0uZ3JvdXBzLHE9MCxyPXUubGVuZ3RoO3E8cjtxKyspe3ZhciB4PXVbcV0sdj1uW3gubWF0ZXJpYWxJbmRleF07diYmdi52aXNpYmxlJiYodj1lKGIsdixoLGwpLGEucmVuZGVyQnVmZmVyRGlyZWN0KGcsbnVsbCxtLHYsYix4KSl9ZWxzZSBuLnZpc2libGUmJih2PWUoYixuLGgsbCksYS5yZW5kZXJCdWZmZXJEaXJlY3QoZyxudWxsLG0sdixiLG51bGwpKX1iPWIuY2hpbGRyZW47bT0wO2ZvcihuPWIubGVuZ3RoO208bjttKyspZihiW21dLGQsZyxoKX19dmFyIGc9YS5jb250ZXh0LGg9YS5zdGF0ZSxrPW5ldyBqZCxtPW5ldyBKLHU9Yi5zaGFkb3dzLHE9bmV3IEQsbj1uZXcgRChkLm1heFRleHR1cmVTaXplLGQubWF4VGV4dHVyZVNpemUpLHI9bmV3IHAsbD1uZXcgcCx0PUFycmF5KDQpLHk9QXJyYXkoNCkseD17fSx2PVtuZXcgcCgxLDAsMCksbmV3IHAoLTEsMCwwKSxuZXcgcCgwLDAsCjEpLG5ldyBwKDAsMCwtMSksbmV3IHAoMCwxLDApLG5ldyBwKDAsLTEsMCldLEc9W25ldyBwKDAsMSwwKSxuZXcgcCgwLDEsMCksbmV3IHAoMCwxLDApLG5ldyBwKDAsMSwwKSxuZXcgcCgwLDAsMSksbmV3IHAoMCwwLC0xKV0sdz1bbmV3IGdhLG5ldyBnYSxuZXcgZ2EsbmV3IGdhLG5ldyBnYSxuZXcgZ2FdO2I9bmV3ICRhO2IuZGVwdGhQYWNraW5nPTMyMDE7Yi5jbGlwcGluZz0hMDtkPWFiLmRpc3RhbmNlUkdCQTtmb3IodmFyIE89SGEuY2xvbmUoZC51bmlmb3JtcyksUz0wOzQhPT1TOysrUyl7dmFyIEU9MCE9PShTJjEpLEY9MCE9PShTJjIpLGFhPWIuY2xvbmUoKTthYS5tb3JwaFRhcmdldHM9RTthYS5za2lubmluZz1GO3RbU109YWE7RT1uZXcgRWEoe2RlZmluZXM6e1VTRV9TSEFET1dNQVA6IiJ9LHVuaWZvcm1zOk8sdmVydGV4U2hhZGVyOmQudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmQuZnJhZ21lbnRTaGFkZXIsbW9ycGhUYXJnZXRzOkUsc2tpbm5pbmc6RixjbGlwcGluZzohMH0pOwp5W1NdPUV9dmFyIFI9dGhpczt0aGlzLmVuYWJsZWQ9ITE7dGhpcy5hdXRvVXBkYXRlPSEwO3RoaXMubmVlZHNVcGRhdGU9ITE7dGhpcy50eXBlPTE7dGhpcy5yZW5kZXJTaW5nbGVTaWRlZD10aGlzLnJlbmRlclJldmVyc2VTaWRlZD0hMDt0aGlzLnJlbmRlcj1mdW5jdGlvbihiLGMpe2lmKCExIT09Ui5lbmFibGVkJiYoITEhPT1SLmF1dG9VcGRhdGV8fCExIT09Ui5uZWVkc1VwZGF0ZSkmJjAhPT11Lmxlbmd0aCl7aC5kaXNhYmxlKGcuQkxFTkQpO2guYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKTtoLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCk7aC5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKHZhciBkLGUseD0wLHQ9dS5sZW5ndGg7eDx0O3grKyl7dmFyIHA9dVt4XSx5PXAuc2hhZG93O2lmKHZvaWQgMD09PXkpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLHAsImhhcyBubyBzaGFkb3cuIik7ZWxzZXt2YXIgTz15LmNhbWVyYSxFPXkubWF0cml4O2wuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHAubWF0cml4V29ybGQpOwpPLnBvc2l0aW9uLmNvcHkobCk7cS5jb3B5KHkubWFwU2l6ZSk7cS5taW4obik7aWYocCYmcC5pc1BvaW50TGlnaHQpe2Q9NjtlPSEwO3ZhciBTPXEueCxGPXEueTt3WzBdLnNldCgyKlMsRixTLEYpO3dbMV0uc2V0KDAsRixTLEYpO3dbMl0uc2V0KDMqUyxGLFMsRik7d1szXS5zZXQoUyxGLFMsRik7d1s0XS5zZXQoMypTLDAsUyxGKTt3WzVdLnNldChTLDAsUyxGKTtxLngqPTQ7cS55Kj0yO0UubWFrZVRyYW5zbGF0aW9uKC1sLngsLWwueSwtbC56KX1lbHNlIGQ9MSxlPSExLHIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHAudGFyZ2V0Lm1hdHJpeFdvcmxkKSxPLmxvb2tBdChyKSxPLnVwZGF0ZU1hdHJpeFdvcmxkKCksTy5tYXRyaXhXb3JsZEludmVyc2UuZ2V0SW52ZXJzZShPLm1hdHJpeFdvcmxkKSxFLnNldCguNSwwLDAsLjUsMCwuNSwwLC41LDAsMCwuNSwuNSwwLDAsMCwxKSxFLm11bHRpcGx5KE8ucHJvamVjdGlvbk1hdHJpeCksRS5tdWx0aXBseShPLm1hdHJpeFdvcmxkSW52ZXJzZSk7Cm51bGw9PT15Lm1hcCYmKHkubWFwPW5ldyBEYihxLngscS55LHttaW5GaWx0ZXI6MTAwMyxtYWdGaWx0ZXI6MTAwMyxmb3JtYXQ6MTAyM30pLHkubWFwLnRleHR1cmUubmFtZT1wLm5hbWUrIi5zaGFkb3dNYXAiLE8udXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKTt5LmlzU3BvdExpZ2h0U2hhZG93JiZ5LnVwZGF0ZShwKTthLnNldFJlbmRlclRhcmdldCh5Lm1hcCk7YS5jbGVhcigpO2ZvcihwPTA7cDxkO3ArKyllJiYoci5jb3B5KE8ucG9zaXRpb24pLHIuYWRkKHZbcF0pLE8udXAuY29weShHW3BdKSxPLmxvb2tBdChyKSxPLnVwZGF0ZU1hdHJpeFdvcmxkKCksTy5tYXRyaXhXb3JsZEludmVyc2UuZ2V0SW52ZXJzZShPLm1hdHJpeFdvcmxkKSxoLnZpZXdwb3J0KHdbcF0pKSxtLm11bHRpcGx5TWF0cmljZXMoTy5wcm9qZWN0aW9uTWF0cml4LE8ubWF0cml4V29ybGRJbnZlcnNlKSxrLnNldEZyb21NYXRyaXgobSksZihiLGMsTyxlKX19ZD1hLmdldENsZWFyQ29sb3IoKTtlPWEuZ2V0Q2xlYXJBbHBoYSgpOwphLnNldENsZWFyQ29sb3IoZCxlKTtSLm5lZWRzVXBkYXRlPSExfX19ZnVuY3Rpb24gaGIoYSxiKXt0aGlzLm9yaWdpbj12b2lkIDAhPT1hP2E6bmV3IHA7dGhpcy5kaXJlY3Rpb249dm9pZCAwIT09Yj9iOm5ldyBwfWZ1bmN0aW9uIGJiKGEsYixjLGQpe3RoaXMuX3g9YXx8MDt0aGlzLl95PWJ8fDA7dGhpcy5fej1jfHwwO3RoaXMuX29yZGVyPWR8fGJiLkRlZmF1bHRPcmRlcn1mdW5jdGlvbiBSZCgpe3RoaXMubWFzaz0xfWZ1bmN0aW9uIEIoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpMZisrfSk7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7dGhpcy5uYW1lPSIiO3RoaXMudHlwZT0iT2JqZWN0M0QiO3RoaXMucGFyZW50PW51bGw7dGhpcy5jaGlsZHJlbj1bXTt0aGlzLnVwPUIuRGVmYXVsdFVwLmNsb25lKCk7dmFyIGE9bmV3IHAsYj1uZXcgYmIsYz1uZXcgcWEsZD1uZXcgcCgxLDEsMSk7Yi5vbkNoYW5nZShmdW5jdGlvbigpe2Muc2V0RnJvbUV1bGVyKGIsCiExKX0pO2Mub25DaGFuZ2UoZnVuY3Rpb24oKXtiLnNldEZyb21RdWF0ZXJuaW9uKGMsdm9pZCAwLCExKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3Bvc2l0aW9uOntlbnVtZXJhYmxlOiEwLHZhbHVlOmF9LHJvdGF0aW9uOntlbnVtZXJhYmxlOiEwLHZhbHVlOmJ9LHF1YXRlcm5pb246e2VudW1lcmFibGU6ITAsdmFsdWU6Y30sc2NhbGU6e2VudW1lcmFibGU6ITAsdmFsdWU6ZH0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgSn0sbm9ybWFsTWF0cml4Ont2YWx1ZTpuZXcgS2F9fSk7dGhpcy5tYXRyaXg9bmV3IEo7dGhpcy5tYXRyaXhXb3JsZD1uZXcgSjt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9Qi5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZTt0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITE7dGhpcy5sYXllcnM9bmV3IFJkO3RoaXMudmlzaWJsZT0hMDt0aGlzLnJlY2VpdmVTaGFkb3c9dGhpcy5jYXN0U2hhZG93PSExO3RoaXMuZnJ1c3R1bUN1bGxlZD0hMDt0aGlzLnJlbmRlck9yZGVyPQowO3RoaXMudXNlckRhdGE9e307dGhpcy5vbkJlZm9yZVJlbmRlcj1mdW5jdGlvbigpe307dGhpcy5vbkFmdGVyUmVuZGVyPWZ1bmN0aW9uKCl7fX1mdW5jdGlvbiBIYihhLGIpe3RoaXMuc3RhcnQ9dm9pZCAwIT09YT9hOm5ldyBwO3RoaXMuZW5kPXZvaWQgMCE9PWI/YjpuZXcgcH1mdW5jdGlvbiBVYShhLGIsYyl7dGhpcy5hPXZvaWQgMCE9PWE/YTpuZXcgcDt0aGlzLmI9dm9pZCAwIT09Yj9iOm5ldyBwO3RoaXMuYz12b2lkIDAhPT1jP2M6bmV3IHB9ZnVuY3Rpb24gVmEoYSxiLGMsZCxlLGYpe3RoaXMuYT1hO3RoaXMuYj1iO3RoaXMuYz1jO3RoaXMubm9ybWFsPWQmJmQuaXNWZWN0b3IzP2Q6bmV3IHA7dGhpcy52ZXJ0ZXhOb3JtYWxzPUFycmF5LmlzQXJyYXkoZCk/ZDpbXTt0aGlzLmNvbG9yPWUmJmUuaXNDb2xvcj9lOm5ldyBIO3RoaXMudmVydGV4Q29sb3JzPUFycmF5LmlzQXJyYXkoZSk/ZTpbXTt0aGlzLm1hdGVyaWFsSW5kZXg9dm9pZCAwIT09Zj9mOjB9ZnVuY3Rpb24gTmEoYSl7Wi5jYWxsKHRoaXMpOwp0aGlzLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBIKDE2Nzc3MjE1KTt0aGlzLmxpZ2h0TWFwPXRoaXMubWFwPW51bGw7dGhpcy5saWdodE1hcEludGVuc2l0eT0xO3RoaXMuYW9NYXA9bnVsbDt0aGlzLmFvTWFwSW50ZW5zaXR5PTE7dGhpcy5lbnZNYXA9dGhpcy5hbHBoYU1hcD10aGlzLnNwZWN1bGFyTWFwPW51bGw7dGhpcy5jb21iaW5lPTA7dGhpcy5yZWZsZWN0aXZpdHk9MTt0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTg7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiO3RoaXMubGlnaHRzPXRoaXMubW9ycGhUYXJnZXRzPXRoaXMuc2tpbm5pbmc9ITE7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24gTChhLGIsYyl7aWYoQXJyYXkuaXNBcnJheShhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpOwp0aGlzLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKTt0aGlzLmFycmF5PWE7dGhpcy5pdGVtU2l6ZT1iO3RoaXMuY291bnQ9dm9pZCAwIT09YT9hLmxlbmd0aC9iOjA7dGhpcy5ub3JtYWxpemVkPSEwPT09Yzt0aGlzLmR5bmFtaWM9ITE7dGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9O3RoaXMub25VcGxvYWRDYWxsYmFjaz1mdW5jdGlvbigpe307dGhpcy52ZXJzaW9uPTB9ZnVuY3Rpb24gcmMoYSxiKXtMLmNhbGwodGhpcyxuZXcgSW50OEFycmF5KGEpLGIpfWZ1bmN0aW9uIHNjKGEsYil7TC5jYWxsKHRoaXMsbmV3IFVpbnQ4QXJyYXkoYSksYil9ZnVuY3Rpb24gdGMoYSxiKXtMLmNhbGwodGhpcyxuZXcgVWludDhDbGFtcGVkQXJyYXkoYSksYil9ZnVuY3Rpb24gdWMoYSxiKXtMLmNhbGwodGhpcyxuZXcgSW50MTZBcnJheShhKSxiKX1mdW5jdGlvbiBpYihhLGIpe0wuY2FsbCh0aGlzLG5ldyBVaW50MTZBcnJheShhKSxiKX1mdW5jdGlvbiB2YyhhLGIpe0wuY2FsbCh0aGlzLApuZXcgSW50MzJBcnJheShhKSxiKX1mdW5jdGlvbiBqYihhLGIpe0wuY2FsbCh0aGlzLG5ldyBVaW50MzJBcnJheShhKSxiKX1mdW5jdGlvbiBDKGEsYil7TC5jYWxsKHRoaXMsbmV3IEZsb2F0MzJBcnJheShhKSxiKX1mdW5jdGlvbiB3YyhhLGIpe0wuY2FsbCh0aGlzLG5ldyBGbG9hdDY0QXJyYXkoYSksYil9ZnVuY3Rpb24gS2UoKXt0aGlzLmluZGljZXM9W107dGhpcy52ZXJ0aWNlcz1bXTt0aGlzLm5vcm1hbHM9W107dGhpcy5jb2xvcnM9W107dGhpcy51dnM9W107dGhpcy51dnMyPVtdO3RoaXMuZ3JvdXBzPVtdO3RoaXMubW9ycGhUYXJnZXRzPXt9O3RoaXMuc2tpbldlaWdodHM9W107dGhpcy5za2luSW5kaWNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLmdyb3Vwc05lZWRVcGRhdGU9dGhpcy51dnNOZWVkVXBkYXRlPXRoaXMuY29sb3JzTmVlZFVwZGF0ZT10aGlzLm5vcm1hbHNOZWVkVXBkYXRlPXRoaXMudmVydGljZXNOZWVkVXBkYXRlPQohMX1mdW5jdGlvbiBTZChhKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuLUluZmluaXR5O2Zvcih2YXIgYj1hWzBdLGM9MSxkPWEubGVuZ3RoO2M8ZDsrK2MpYVtjXT5iJiYoYj1hW2NdKTtyZXR1cm4gYn1mdW5jdGlvbiBNKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6VGQrK30pO3RoaXMudXVpZD1ZLmdlbmVyYXRlVVVJRCgpO3RoaXMubmFtZT0iIjt0aGlzLnR5cGU9Ikdlb21ldHJ5Ijt0aGlzLnZlcnRpY2VzPVtdO3RoaXMuY29sb3JzPVtdO3RoaXMuZmFjZXM9W107dGhpcy5mYWNlVmVydGV4VXZzPVtbXV07dGhpcy5tb3JwaFRhcmdldHM9W107dGhpcy5tb3JwaE5vcm1hbHM9W107dGhpcy5za2luV2VpZ2h0cz1bXTt0aGlzLnNraW5JbmRpY2VzPVtdO3RoaXMubGluZURpc3RhbmNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLmdyb3Vwc05lZWRVcGRhdGU9dGhpcy5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZT0KdGhpcy5jb2xvcnNOZWVkVXBkYXRlPXRoaXMubm9ybWFsc05lZWRVcGRhdGU9dGhpcy51dnNOZWVkVXBkYXRlPXRoaXMudmVydGljZXNOZWVkVXBkYXRlPXRoaXMuZWxlbWVudHNOZWVkVXBkYXRlPSExfWZ1bmN0aW9uIEkoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpUZCsrfSk7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7dGhpcy5uYW1lPSIiO3RoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiO3RoaXMuaW5kZXg9bnVsbDt0aGlzLmF0dHJpYnV0ZXM9e307dGhpcy5tb3JwaEF0dHJpYnV0ZXM9e307dGhpcy5ncm91cHM9W107dGhpcy5ib3VuZGluZ1NwaGVyZT10aGlzLmJvdW5kaW5nQm94PW51bGw7dGhpcy5kcmF3UmFuZ2U9e3N0YXJ0OjAsY291bnQ6SW5maW5pdHl9fWZ1bmN0aW9uIENhKGEsYil7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTWVzaCI7dGhpcy5nZW9tZXRyeT12b2lkIDAhPT1hP2E6bmV3IEk7dGhpcy5tYXRlcmlhbD12b2lkIDAhPT1iPwpiOm5ldyBOYSh7Y29sb3I6MTY3NzcyMTUqTWF0aC5yYW5kb20oKX0pO3RoaXMuZHJhd01vZGU9MDt0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWZ1bmN0aW9uIEliKGEsYixjLGQsZSxmKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJCb3hHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDphLGhlaWdodDpiLGRlcHRoOmMsd2lkdGhTZWdtZW50czpkLGhlaWdodFNlZ21lbnRzOmUsZGVwdGhTZWdtZW50czpmfTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcga2IoYSxiLGMsZCxlLGYpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBrYihhLGIsYyxkLGUsZil7ZnVuY3Rpb24gZyhhLGIsYyxkLGUsZixnLGwsUyxFLEYpe3ZhciBhYT1mL1MsUj1nL0UsY2E9Zi8yLGxhPWcvMixEPWwvMjtnPVMrMTt2YXIgQz1FKzEsQj1mPTAsUCxLLFc9bmV3IHA7Zm9yKEs9MDtLPEM7SysrKXt2YXIgYmE9SypSLWxhO2ZvcihQPTA7UDxnO1ArKylXW2FdPShQKmFhLWNhKSpkLFdbYl09CmJhKmUsV1tjXT1ELG0ucHVzaChXLngsVy55LFcueiksV1thXT0wLFdbYl09MCxXW2NdPTA8bD8xOi0xLHUucHVzaChXLngsVy55LFcueikscS5wdXNoKFAvUykscS5wdXNoKDEtSy9FKSxmKz0xfWZvcihLPTA7SzxFO0srKylmb3IoUD0wO1A8UztQKyspYT1uK1ArZyooSysxKSxiPW4rKFArMSkrZyooSysxKSxjPW4rKFArMSkrZypLLGsucHVzaChuK1ArZypLLGEsYyksay5wdXNoKGEsYixjKSxCKz02O2guYWRkR3JvdXAocixCLEYpO3IrPUI7bis9Zn1JLmNhbGwodGhpcyk7dGhpcy50eXBlPSJCb3hCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDphLGhlaWdodDpiLGRlcHRoOmMsd2lkdGhTZWdtZW50czpkLGhlaWdodFNlZ21lbnRzOmUsZGVwdGhTZWdtZW50czpmfTt2YXIgaD10aGlzO2Q9TWF0aC5mbG9vcihkKXx8MTtlPU1hdGguZmxvb3IoZSl8fDE7Zj1NYXRoLmZsb29yKGYpfHwxO3ZhciBrPVtdLG09W10sdT1bXSxxPVtdLG49MCxyPTA7ZygieiIsInkiLAoieCIsLTEsLTEsYyxiLGEsZixlLDApO2coInoiLCJ5IiwieCIsMSwtMSxjLGIsLWEsZixlLDEpO2coIngiLCJ6IiwieSIsMSwxLGEsYyxiLGQsZiwyKTtnKCJ4IiwieiIsInkiLDEsLTEsYSxjLC1iLGQsZiwzKTtnKCJ4IiwieSIsInoiLDEsLTEsYSxiLGMsZCxlLDQpO2coIngiLCJ5IiwieiIsLTEsLTEsYSxiLC1jLGQsZSw1KTt0aGlzLnNldEluZGV4KGspO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMobSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEModSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhxLDIpKX1mdW5jdGlvbiB4YyhhLGIsYyxkKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQbGFuZUdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3dpZHRoOmEsaGVpZ2h0OmIsd2lkdGhTZWdtZW50czpjLGhlaWdodFNlZ21lbnRzOmR9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBsYihhLGIsYyxkKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9CmZ1bmN0aW9uIGxiKGEsYixjLGQpe0kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBsYW5lQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17d2lkdGg6YSxoZWlnaHQ6Yix3aWR0aFNlZ21lbnRzOmMsaGVpZ2h0U2VnbWVudHM6ZH07dmFyIGU9YS8yLGY9Yi8yO2M9TWF0aC5mbG9vcihjKXx8MTtkPU1hdGguZmxvb3IoZCl8fDE7dmFyIGc9YysxLGg9ZCsxLGs9YS9jLG09Yi9kLHU9W10scT1bXSxuPVtdLHI9W107Zm9yKGE9MDthPGg7YSsrKXt2YXIgbD1hKm0tZjtmb3IoYj0wO2I8ZztiKyspcS5wdXNoKGIqay1lLC1sLDApLG4ucHVzaCgwLDAsMSksci5wdXNoKGIvYyksci5wdXNoKDEtYS9kKX1mb3IoYT0wO2E8ZDthKyspZm9yKGI9MDtiPGM7YisrKWU9YitnKihhKzEpLGY9YisxK2cqKGErMSksaD1iKzErZyphLHUucHVzaChiK2cqYSxlLGgpLHUucHVzaChlLGYsaCk7dGhpcy5zZXRJbmRleCh1KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKHEsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLApuZXcgQyhuLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKHIsMikpfWZ1bmN0aW9uIE9hKCl7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ2FtZXJhIjt0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZT1uZXcgSjt0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IEp9ZnVuY3Rpb24geGEoYSxiLGMsZCl7T2EuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBlcnNwZWN0aXZlQ2FtZXJhIjt0aGlzLmZvdj12b2lkIDAhPT1hP2E6NTA7dGhpcy56b29tPTE7dGhpcy5uZWFyPXZvaWQgMCE9PWM/YzouMTt0aGlzLmZhcj12b2lkIDAhPT1kP2Q6MkUzO3RoaXMuZm9jdXM9MTA7dGhpcy5hc3BlY3Q9dm9pZCAwIT09Yj9iOjE7dGhpcy52aWV3PW51bGw7dGhpcy5maWxtR2F1Z2U9MzU7dGhpcy5maWxtT2Zmc2V0PTA7dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9ZnVuY3Rpb24gSmIoYSxiLGMsZCxlLGYpe09hLmNhbGwodGhpcyk7dGhpcy50eXBlPSJPcnRob2dyYXBoaWNDYW1lcmEiO3RoaXMuem9vbT0KMTt0aGlzLnZpZXc9bnVsbDt0aGlzLmxlZnQ9YTt0aGlzLnJpZ2h0PWI7dGhpcy50b3A9Yzt0aGlzLmJvdHRvbT1kO3RoaXMubmVhcj12b2lkIDAhPT1lP2U6LjE7dGhpcy5mYXI9dm9pZCAwIT09Zj9mOjJFMzt0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1mdW5jdGlvbiBNZihhKXt2YXIgYj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGEpe2EuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGE9YS5kYXRhKTtyZXR1cm4gYlthLnV1aWRdfSxyZW1vdmU6ZnVuY3Rpb24oYyl7dmFyIGQ9YltjLnV1aWRdO2QmJihhLmRlbGV0ZUJ1ZmZlcihkLmJ1ZmZlciksZGVsZXRlIGJbYy51dWlkXSl9LHVwZGF0ZTpmdW5jdGlvbihjLGQpe2MuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTt2YXIgZT1iW2MudXVpZF07aWYodm9pZCAwPT09ZSl7dmFyIGU9Yy51dWlkLGY9YyxnPWYuYXJyYXksaD1mLmR5bmFtaWM/YS5EWU5BTUlDX0RSQVc6YS5TVEFUSUNfRFJBVywKaz1hLmNyZWF0ZUJ1ZmZlcigpO2EuYmluZEJ1ZmZlcihkLGspO2EuYnVmZmVyRGF0YShkLGcsaCk7Zi5vblVwbG9hZENhbGxiYWNrKCk7aD1hLkZMT0FUO2cgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXk/aD1hLkZMT0FUOmcgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXk/Y29uc29sZS53YXJuKCJVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheSIpOmcgaW5zdGFuY2VvZiBVaW50MTZBcnJheT9oPWEuVU5TSUdORURfU0hPUlQ6ZyBpbnN0YW5jZW9mIEludDE2QXJyYXk/aD1hLlNIT1JUOmcgaW5zdGFuY2VvZiBVaW50MzJBcnJheT9oPWEuVU5TSUdORURfSU5UOmcgaW5zdGFuY2VvZiBJbnQzMkFycmF5P2g9YS5JTlQ6ZyBpbnN0YW5jZW9mIEludDhBcnJheT9oPWEuQllURTpnIGluc3RhbmNlb2YgVWludDhBcnJheSYmKGg9YS5VTlNJR05FRF9CWVRFKTtiW2VdPXtidWZmZXI6ayx0eXBlOmgsYnl0ZXNQZXJFbGVtZW50OmcuQllURVNfUEVSX0VMRU1FTlQsdmVyc2lvbjpmLnZlcnNpb259fWVsc2UgZS52ZXJzaW9uPApjLnZlcnNpb24mJihmPWMsZz1mLmFycmF5LGs9Zi51cGRhdGVSYW5nZSxhLmJpbmRCdWZmZXIoZCxlLmJ1ZmZlciksITE9PT1mLmR5bmFtaWM/YS5idWZmZXJEYXRhKGQsZyxhLlNUQVRJQ19EUkFXKTotMT09PWsuY291bnQ/YS5idWZmZXJTdWJEYXRhKGQsMCxnKTowPT09ay5jb3VudD9jb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTE9iamVjdHMudXBkYXRlQnVmZmVyOiBkeW5hbWljIFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSBtYXJrZWQgYXMgbmVlZHNVcGRhdGUgYnV0IHVwZGF0ZVJhbmdlLmNvdW50IGlzIDAsIGVuc3VyZSB5b3UgYXJlIHVzaW5nIHNldCBtZXRob2RzIG9yIHVwZGF0aW5nIG1hbnVhbGx5LiIpOihhLmJ1ZmZlclN1YkRhdGEoZCxrLm9mZnNldCpnLkJZVEVTX1BFUl9FTEVNRU5ULGcuc3ViYXJyYXkoay5vZmZzZXQsay5vZmZzZXQray5jb3VudCkpLGsuY291bnQ9MCksZS52ZXJzaW9uPWMudmVyc2lvbil9fX1mdW5jdGlvbiBOZihhLGIpe3JldHVybiBhLnJlbmRlck9yZGVyIT09CmIucmVuZGVyT3JkZXI/YS5yZW5kZXJPcmRlci1iLnJlbmRlck9yZGVyOmEucHJvZ3JhbSYmYi5wcm9ncmFtJiZhLnByb2dyYW0hPT1iLnByb2dyYW0/YS5wcm9ncmFtLmlkLWIucHJvZ3JhbS5pZDphLm1hdGVyaWFsLmlkIT09Yi5tYXRlcmlhbC5pZD9hLm1hdGVyaWFsLmlkLWIubWF0ZXJpYWwuaWQ6YS56IT09Yi56P2Euei1iLno6YS5pZC1iLmlkfWZ1bmN0aW9uIE9mKGEsYil7cmV0dXJuIGEucmVuZGVyT3JkZXIhPT1iLnJlbmRlck9yZGVyP2EucmVuZGVyT3JkZXItYi5yZW5kZXJPcmRlcjphLnohPT1iLno/Yi56LWEuejphLmlkLWIuaWR9ZnVuY3Rpb24gUGYoKXt2YXIgYT1bXSxiPS0xLGM9W10sZD0tMTtyZXR1cm57b3BhcXVlOmEsdHJhbnNwYXJlbnQ6Yyxpbml0OmZ1bmN0aW9uKCl7ZD1iPS0xfSxwdXNoOmZ1bmN0aW9uKGUsZixnLGgsayl7dmFyIG0sdTtnLnRyYW5zcGFyZW50PyhtPWMsdT0rK2QpOihtPWEsdT0rK2IpOyh1PW1bdV0pPyh1LmlkPWUuaWQsdS5vYmplY3Q9ZSwKdS5nZW9tZXRyeT1mLHUubWF0ZXJpYWw9Zyx1LnByb2dyYW09Zy5wcm9ncmFtLHUucmVuZGVyT3JkZXI9ZS5yZW5kZXJPcmRlcix1Lno9aCx1Lmdyb3VwPWspOih1PXtpZDplLmlkLG9iamVjdDplLGdlb21ldHJ5OmYsbWF0ZXJpYWw6Zyxwcm9ncmFtOmcucHJvZ3JhbSxyZW5kZXJPcmRlcjplLnJlbmRlck9yZGVyLHo6aCxncm91cDprfSxtLnB1c2godSkpfSxmaW5pc2g6ZnVuY3Rpb24oKXthLmxlbmd0aD1iKzE7Yy5sZW5ndGg9ZCsxfSxzb3J0OmZ1bmN0aW9uKCl7YS5zb3J0KE5mKTtjLnNvcnQoT2YpfX19ZnVuY3Rpb24gUWYoKXt2YXIgYT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGIsYyl7dmFyIGQ9Yi5pZCsiLCIrYy5pZCxlPWFbZF07dm9pZCAwPT09ZSYmKGU9bmV3IFBmLGFbZF09ZSk7cmV0dXJuIGV9LGRpc3Bvc2U6ZnVuY3Rpb24oKXthPXt9fX19ZnVuY3Rpb24gUmYoYSxiLGMpe3ZhciBkLGUsZjt0aGlzLnNldE1vZGU9ZnVuY3Rpb24oYSl7ZD1hfTt0aGlzLnNldEluZGV4PQpmdW5jdGlvbihjKXtjLmFycmF5IGluc3RhbmNlb2YgVWludDMyQXJyYXkmJmIuZ2V0KCJPRVNfZWxlbWVudF9pbmRleF91aW50Iik/KGU9YS5VTlNJR05FRF9JTlQsZj00KTpjLmFycmF5IGluc3RhbmNlb2YgVWludDE2QXJyYXk/KGU9YS5VTlNJR05FRF9TSE9SVCxmPTIpOihlPWEuVU5TSUdORURfQllURSxmPTEpfTt0aGlzLnJlbmRlcj1mdW5jdGlvbihiLGgpe2EuZHJhd0VsZW1lbnRzKGQsaCxlLGIqZik7Yy5jYWxscysrO2MudmVydGljZXMrPWg7ZD09PWEuVFJJQU5HTEVTJiYoYy5mYWNlcys9aC8zKX07dGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24oZyxoLGspe3ZhciBtPWIuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7bnVsbD09PW0/Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpOgoobS5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShkLGssZSxoKmYsZy5tYXhJbnN0YW5jZWRDb3VudCksYy5jYWxscysrLGMudmVydGljZXMrPWsqZy5tYXhJbnN0YW5jZWRDb3VudCxkPT09YS5UUklBTkdMRVMmJihjLmZhY2VzKz1nLm1heEluc3RhbmNlZENvdW50KmsvMykpfX1mdW5jdGlvbiBTZihhLGIsYyl7dmFyIGQ7dGhpcy5zZXRNb2RlPWZ1bmN0aW9uKGEpe2Q9YX07dGhpcy5yZW5kZXI9ZnVuY3Rpb24oYixmKXthLmRyYXdBcnJheXMoZCxiLGYpO2MuY2FsbHMrKztjLnZlcnRpY2VzKz1mO2Q9PT1hLlRSSUFOR0xFUyYmKGMuZmFjZXMrPWYvMyl9O3RoaXMucmVuZGVySW5zdGFuY2VzPWZ1bmN0aW9uKGUsZixnKXt2YXIgaD1iLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpO2lmKG51bGw9PT1oKWNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpOwplbHNle3ZhciBrPWUuYXR0cmlidXRlcy5wb3NpdGlvbjtrLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/KGc9ay5kYXRhLmNvdW50LGguZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKGQsMCxnLGUubWF4SW5zdGFuY2VkQ291bnQpKTpoLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShkLGYsZyxlLm1heEluc3RhbmNlZENvdW50KTtjLmNhbGxzKys7Yy52ZXJ0aWNlcys9ZyplLm1heEluc3RhbmNlZENvdW50O2Q9PT1hLlRSSUFOR0xFUyYmKGMuZmFjZXMrPWUubWF4SW5zdGFuY2VkQ291bnQqZy8zKX19fWZ1bmN0aW9uIFRmKGEsYixjKXtmdW5jdGlvbiBkKGEpe2E9YS50YXJnZXQ7dmFyIGg9ZVthLmlkXTtudWxsIT09aC5pbmRleCYmYi5yZW1vdmUoaC5pbmRleCk7Zm9yKHZhciBrIGluIGguYXR0cmlidXRlcyliLnJlbW92ZShoLmF0dHJpYnV0ZXNba10pO2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsZCk7ZGVsZXRlIGVbYS5pZF07aWYoaz1mW2EuaWRdKWIucmVtb3ZlKGspLApkZWxldGUgZlthLmlkXTtpZihrPWZbaC5pZF0pYi5yZW1vdmUoayksZGVsZXRlIGZbaC5pZF07Yy5nZW9tZXRyaWVzLS19dmFyIGU9e30sZj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGEsYil7dmFyIGY9ZVtiLmlkXTtpZihmKXJldHVybiBmO2IuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsZCk7Yi5pc0J1ZmZlckdlb21ldHJ5P2Y9YjpiLmlzR2VvbWV0cnkmJih2b2lkIDA9PT1iLl9idWZmZXJHZW9tZXRyeSYmKGIuX2J1ZmZlckdlb21ldHJ5PShuZXcgSSkuc2V0RnJvbU9iamVjdChhKSksZj1iLl9idWZmZXJHZW9tZXRyeSk7ZVtiLmlkXT1mO2MuZ2VvbWV0cmllcysrO3JldHVybiBmfSx1cGRhdGU6ZnVuY3Rpb24oYyl7dmFyIGQ9Yy5pbmRleCxlPWMuYXR0cmlidXRlcztudWxsIT09ZCYmYi51cGRhdGUoZCxhLkVMRU1FTlRfQVJSQVlfQlVGRkVSKTtmb3IodmFyIGYgaW4gZSliLnVwZGF0ZShlW2ZdLGEuQVJSQVlfQlVGRkVSKTtjPWMubW9ycGhBdHRyaWJ1dGVzO2ZvcihmIGluIGMpZm9yKHZhciBkPQpjW2ZdLGU9MCx1PWQubGVuZ3RoO2U8dTtlKyspYi51cGRhdGUoZFtlXSxhLkFSUkFZX0JVRkZFUil9LGdldFdpcmVmcmFtZUF0dHJpYnV0ZTpmdW5jdGlvbihjKXt2YXIgZD1mW2MuaWRdO2lmKGQpcmV0dXJuIGQ7dmFyIGQ9W10sZT1jLmluZGV4LG09Yy5hdHRyaWJ1dGVzO2lmKG51bGwhPT1lKWZvcih2YXIgZT1lLmFycmF5LG09MCx1PWUubGVuZ3RoO208dTttKz0zKXt2YXIgcT1lW20rMF0sbj1lW20rMV0scj1lW20rMl07ZC5wdXNoKHEsbixuLHIscixxKX1lbHNlIGZvcihlPW0ucG9zaXRpb24uYXJyYXksbT0wLHU9ZS5sZW5ndGgvMy0xO208dTttKz0zKXE9bSswLG49bSsxLHI9bSsyLGQucHVzaChxLG4sbixyLHIscSk7ZD1uZXcgKDY1NTM1PFNkKGQpP2piOmliKShkLDEpO2IudXBkYXRlKGQsYS5FTEVNRU5UX0FSUkFZX0JVRkZFUik7cmV0dXJuIGZbYy5pZF09ZH19fWZ1bmN0aW9uIFVmKCl7dmFyIGE9e307cmV0dXJue2dldDpmdW5jdGlvbihiKXtpZih2b2lkIDAhPT1hW2IuaWRdKXJldHVybiBhW2IuaWRdOwp2YXIgYztzd2l0Y2goYi50eXBlKXtjYXNlICJEaXJlY3Rpb25hbExpZ2h0IjpjPXtkaXJlY3Rpb246bmV3IHAsY29sb3I6bmV3IEgsc2hhZG93OiExLHNoYWRvd0JpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBEfTticmVhaztjYXNlICJTcG90TGlnaHQiOmM9e3Bvc2l0aW9uOm5ldyBwLGRpcmVjdGlvbjpuZXcgcCxjb2xvcjpuZXcgSCxkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjAsc2hhZG93OiExLHNoYWRvd0JpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBEfTticmVhaztjYXNlICJQb2ludExpZ2h0IjpjPXtwb3NpdGlvbjpuZXcgcCxjb2xvcjpuZXcgSCxkaXN0YW5jZTowLGRlY2F5OjAsc2hhZG93OiExLHNoYWRvd0JpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBEfTticmVhaztjYXNlICJIZW1pc3BoZXJlTGlnaHQiOmM9e2RpcmVjdGlvbjpuZXcgcCxza3lDb2xvcjpuZXcgSCwKZ3JvdW5kQ29sb3I6bmV3IEh9O2JyZWFrO2Nhc2UgIlJlY3RBcmVhTGlnaHQiOmM9e2NvbG9yOm5ldyBILHBvc2l0aW9uOm5ldyBwLGhhbGZXaWR0aDpuZXcgcCxoYWxmSGVpZ2h0Om5ldyBwfX1yZXR1cm4gYVtiLmlkXT1jfX19ZnVuY3Rpb24gVmYoYSxiLGMpe3ZhciBkPXt9O3JldHVybnt1cGRhdGU6ZnVuY3Rpb24oYSl7dmFyIGY9Yy5mcmFtZSxnPWEuZ2VvbWV0cnksaD1iLmdldChhLGcpO2RbaC5pZF0hPT1mJiYoZy5pc0dlb21ldHJ5JiZoLnVwZGF0ZUZyb21PYmplY3QoYSksYi51cGRhdGUoaCksZFtoLmlkXT1mKTtyZXR1cm4gaH0sY2xlYXI6ZnVuY3Rpb24oKXtkPXt9fX19ZnVuY3Rpb24gV2YoYSl7YT1hLnNwbGl0KCJcbiIpO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKWFbYl09YisxKyI6ICIrYVtiXTtyZXR1cm4gYS5qb2luKCJcbiIpfWZ1bmN0aW9uIExlKGEsYixjKXt2YXIgZD1hLmNyZWF0ZVNoYWRlcihiKTthLnNoYWRlclNvdXJjZShkLGMpO2EuY29tcGlsZVNoYWRlcihkKTsKITE9PT1hLmdldFNoYWRlclBhcmFtZXRlcihkLGEuQ09NUElMRV9TVEFUVVMpJiZjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFNoYWRlcjogU2hhZGVyIGNvdWxkbid0IGNvbXBpbGUuIik7IiIhPT1hLmdldFNoYWRlckluZm9Mb2coZCkmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xTaGFkZXI6IGdsLmdldFNoYWRlckluZm9Mb2coKSIsYj09PWEuVkVSVEVYX1NIQURFUj8idmVydGV4IjoiZnJhZ21lbnQiLGEuZ2V0U2hhZGVySW5mb0xvZyhkKSxXZihjKSk7cmV0dXJuIGR9ZnVuY3Rpb24gTWUoYSl7c3dpdGNoKGEpe2Nhc2UgM0UzOnJldHVyblsiTGluZWFyIiwiKCB2YWx1ZSApIl07Y2FzZSAzMDAxOnJldHVyblsic1JHQiIsIiggdmFsdWUgKSJdO2Nhc2UgMzAwMjpyZXR1cm5bIlJHQkUiLCIoIHZhbHVlICkiXTtjYXNlIDMwMDQ6cmV0dXJuWyJSR0JNIiwiKCB2YWx1ZSwgNy4wICkiXTtjYXNlIDMwMDU6cmV0dXJuWyJSR0JNIiwiKCB2YWx1ZSwgMTYuMCApIl07Y2FzZSAzMDA2OnJldHVyblsiUkdCRCIsCiIoIHZhbHVlLCAyNTYuMCApIl07Y2FzZSAzMDA3OnJldHVyblsiR2FtbWEiLCIoIHZhbHVlLCBmbG9hdCggR0FNTUFfRkFDVE9SICkgKSJdO2RlZmF1bHQ6dGhyb3cgRXJyb3IoInVuc3VwcG9ydGVkIGVuY29kaW5nOiAiK2EpO319ZnVuY3Rpb24gVWQoYSxiKXt2YXIgYz1NZShiKTtyZXR1cm4idmVjNCAiK2ErIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuICIrY1swXSsiVG9MaW5lYXIiK2NbMV0rIjsgfSJ9ZnVuY3Rpb24gWGYoYSxiKXt2YXIgYz1NZShiKTtyZXR1cm4idmVjNCAiK2ErIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuIExpbmVhclRvIitjWzBdK2NbMV0rIjsgfSJ9ZnVuY3Rpb24gWWYoYSxiKXt2YXIgYztzd2l0Y2goYil7Y2FzZSAxOmM9IkxpbmVhciI7YnJlYWs7Y2FzZSAyOmM9IlJlaW5oYXJkIjticmVhaztjYXNlIDM6Yz0iVW5jaGFydGVkMiI7YnJlYWs7Y2FzZSA0OmM9Ik9wdGltaXplZENpbmVvbiI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigidW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6ICIrCmIpO31yZXR1cm4idmVjMyAiK2ErIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrYysiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIFpmKGEsYixjKXthPWF8fHt9O3JldHVyblthLmRlcml2YXRpdmVzfHxiLmVudk1hcEN1YmVVVnx8Yi5idW1wTWFwfHxiLm5vcm1hbE1hcHx8Yi5mbGF0U2hhZGluZz8iI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGUiOiIiLChhLmZyYWdEZXB0aHx8Yi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyKSYmYy5nZXQoIkVYVF9mcmFnX2RlcHRoIik/IiNleHRlbnNpb24gR0xfRVhUX2ZyYWdfZGVwdGggOiBlbmFibGUiOiIiLGEuZHJhd0J1ZmZlcnMmJmMuZ2V0KCJXRUJHTF9kcmF3X2J1ZmZlcnMiKT8iI2V4dGVuc2lvbiBHTF9FWFRfZHJhd19idWZmZXJzIDogcmVxdWlyZSI6IiIsKGEuc2hhZGVyVGV4dHVyZUxPRHx8Yi5lbnZNYXApJiZjLmdldCgiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOgoiIl0uZmlsdGVyKHljKS5qb2luKCJcbiIpfWZ1bmN0aW9uICRmKGEpe3ZhciBiPVtdLGM7Zm9yKGMgaW4gYSl7dmFyIGQ9YVtjXTshMSE9PWQmJmIucHVzaCgiI2RlZmluZSAiK2MrIiAiK2QpfXJldHVybiBiLmpvaW4oIlxuIil9ZnVuY3Rpb24geWMoYSl7cmV0dXJuIiIhPT1hfWZ1bmN0aW9uIE5lKGEsYil7cmV0dXJuIGEucmVwbGFjZSgvTlVNX0RJUl9MSUdIVFMvZyxiLm51bURpckxpZ2h0cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRTL2csYi5udW1TcG90TGlnaHRzKS5yZXBsYWNlKC9OVU1fUkVDVF9BUkVBX0xJR0hUUy9nLGIubnVtUmVjdEFyZWFMaWdodHMpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVFMvZyxiLm51bVBvaW50TGlnaHRzKS5yZXBsYWNlKC9OVU1fSEVNSV9MSUdIVFMvZyxiLm51bUhlbWlMaWdodHMpfWZ1bmN0aW9uIFZkKGEpe3JldHVybiBhLnJlcGxhY2UoL15bIFx0XSojaW5jbHVkZSArPChbXHdcZC5dKyk+L2dtLGZ1bmN0aW9uKGEsYyl7dmFyIGQ9VVtjXTsKaWYodm9pZCAwPT09ZCl0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK2MrIj4iKTtyZXR1cm4gVmQoZCl9KX1mdW5jdGlvbiBPZShhKXtyZXR1cm4gYS5yZXBsYWNlKC9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyxmdW5jdGlvbihhLGMsZCxlKXthPSIiO2ZvcihjPXBhcnNlSW50KGMpO2M8cGFyc2VJbnQoZCk7YysrKWErPWUucmVwbGFjZSgvXFsgaSBcXS9nLCJbICIrYysiIF0iKTtyZXR1cm4gYX0pfWZ1bmN0aW9uIGFnKGEsYixjLGQpe3ZhciBlPWEuY29udGV4dCxmPWMuZXh0ZW5zaW9ucyxnPWMuZGVmaW5lcyxoPWMuX193ZWJnbFNoYWRlci52ZXJ0ZXhTaGFkZXIsaz1jLl9fd2ViZ2xTaGFkZXIuZnJhZ21lbnRTaGFkZXIsbT0iU0hBRE9XTUFQX1RZUEVfQkFTSUMiOzE9PT1kLnNoYWRvd01hcFR5cGU/bT0iU0hBRE9XTUFQX1RZUEVfUENGIjoyPT09ZC5zaGFkb3dNYXBUeXBlJiYKKG09IlNIQURPV01BUF9UWVBFX1BDRl9TT0ZUIik7dmFyIHU9IkVOVk1BUF9UWVBFX0NVQkUiLHE9IkVOVk1BUF9NT0RFX1JFRkxFQ1RJT04iLG49IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7aWYoZC5lbnZNYXApe3N3aXRjaChjLmVudk1hcC5tYXBwaW5nKXtjYXNlIDMwMTpjYXNlIDMwMjp1PSJFTlZNQVBfVFlQRV9DVUJFIjticmVhaztjYXNlIDMwNjpjYXNlIDMwNzp1PSJFTlZNQVBfVFlQRV9DVUJFX1VWIjticmVhaztjYXNlIDMwMzpjYXNlIDMwNDp1PSJFTlZNQVBfVFlQRV9FUVVJUkVDIjticmVhaztjYXNlIDMwNTp1PSJFTlZNQVBfVFlQRV9TUEhFUkUifXN3aXRjaChjLmVudk1hcC5tYXBwaW5nKXtjYXNlIDMwMjpjYXNlIDMwNDpxPSJFTlZNQVBfTU9ERV9SRUZSQUNUSU9OIn1zd2l0Y2goYy5jb21iaW5lKXtjYXNlIDA6bj0iRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZIjticmVhaztjYXNlIDE6bj0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSAyOm49IkVOVk1BUF9CTEVORElOR19BREQifX12YXIgcj0KMDxhLmdhbW1hRmFjdG9yP2EuZ2FtbWFGYWN0b3I6MSxmPVpmKGYsZCxhLmV4dGVuc2lvbnMpLGw9JGYoZyksdD1lLmNyZWF0ZVByb2dyYW0oKTtjLmlzUmF3U2hhZGVyTWF0ZXJpYWw/KGc9W2wsIlxuIl0uZmlsdGVyKHljKS5qb2luKCJcbiIpLG09W2YsbCwiXG4iXS5maWx0ZXIoeWMpLmpvaW4oIlxuIikpOihnPVsicHJlY2lzaW9uICIrZC5wcmVjaXNpb24rIiBmbG9hdDsiLCJwcmVjaXNpb24gIitkLnByZWNpc2lvbisiIGludDsiLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrYy5fX3dlYmdsU2hhZGVyLm5hbWUsbCxkLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVkVSVEVYX1RFWFRVUkVTIjoiIiwiI2RlZmluZSBHQU1NQV9GQUNUT1IgIityLCIjZGVmaW5lIE1BWF9CT05FUyAiK2QubWF4Qm9uZXMsZC51c2VGb2cmJmQuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLGQudXNlRm9nJiZkLmZvZ0V4cD8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZC5tYXA/IiNkZWZpbmUgVVNFX01BUCI6CiIiLGQuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGQuZW52TWFwPyIjZGVmaW5lICIrcToiIixkLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsZC5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLGQuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixkLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLGQubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLGQuZGlzcGxhY2VtZW50TWFwJiZkLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVVNFX0RJU1BMQUNFTUVOVE1BUCI6IiIsZC5zcGVjdWxhck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAiOiIiLGQucm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAiOiIiLGQubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLGQuYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIixkLnZlcnRleENvbG9ycz8KIiNkZWZpbmUgVVNFX0NPTE9SIjoiIixkLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixkLnNraW5uaW5nPyIjZGVmaW5lIFVTRV9TS0lOTklORyI6IiIsZC51c2VWZXJ0ZXhUZXh0dXJlPyIjZGVmaW5lIEJPTkVfVEVYVFVSRSI6IiIsZC5tb3JwaFRhcmdldHM/IiNkZWZpbmUgVVNFX01PUlBIVEFSR0VUUyI6IiIsZC5tb3JwaE5vcm1hbHMmJiExPT09ZC5mbGF0U2hhZGluZz8iI2RlZmluZSBVU0VfTU9SUEhOT1JNQUxTIjoiIixkLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZC5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsIiNkZWZpbmUgTlVNX0NMSVBQSU5HX1BMQU5FUyAiK2QubnVtQ2xpcHBpbmdQbGFuZXMsZC5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGQuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK206IiIsZC5zaXplQXR0ZW51YXRpb24/IiNkZWZpbmUgVVNFX1NJWkVBVFRFTlVBVElPTiI6CiIiLGQubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGQubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmYS5leHRlbnNpb25zLmdldCgiRVhUX2ZyYWdfZGVwdGgiKT8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OyIsInVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgbm9ybWFsOyIsImF0dHJpYnV0ZSB2ZWMyIHV2OyIsIiNpZmRlZiBVU0VfQ09MT1IiLCJcdGF0dHJpYnV0ZSB2ZWMzIGNvbG9yOyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTIiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwKIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQxOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOyIsIlx0I2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOyIsIlx0I2Vsc2UiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ3OyIsIlx0I2VuZGlmIiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9TS0lOTklORyIsIlx0YXR0cmlidXRlIHZlYzQgc2tpbkluZGV4OyIsIlx0YXR0cmlidXRlIHZlYzQgc2tpbldlaWdodDsiLAoiI2VuZGlmIiwiXG4iXS5maWx0ZXIoeWMpLmpvaW4oIlxuIiksbT1bZiwicHJlY2lzaW9uICIrZC5wcmVjaXNpb24rIiBmbG9hdDsiLCJwcmVjaXNpb24gIitkLnByZWNpc2lvbisiIGludDsiLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrYy5fX3dlYmdsU2hhZGVyLm5hbWUsbCxkLmFscGhhVGVzdD8iI2RlZmluZSBBTFBIQVRFU1QgIitkLmFscGhhVGVzdDoiIiwiI2RlZmluZSBHQU1NQV9GQUNUT1IgIityLGQudXNlRm9nJiZkLmZvZz8iI2RlZmluZSBVU0VfRk9HIjoiIixkLnVzZUZvZyYmZC5mb2dFeHA/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLGQubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLGQuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGQuZW52TWFwPyIjZGVmaW5lICIrdToiIixkLmVudk1hcD8iI2RlZmluZSAiK3E6IiIsZC5lbnZNYXA/IiNkZWZpbmUgIituOiIiLGQubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixkLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6CiIiLGQuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixkLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLGQubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLGQuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixkLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixkLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixkLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZC52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixkLmdyYWRpZW50TWFwPyIjZGVmaW5lIFVTRV9HUkFESUVOVE1BUCI6IiIsZC5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsZC5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLGQuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLCIjZGVmaW5lIE5VTV9DTElQUElOR19QTEFORVMgIisKZC5udW1DbGlwcGluZ1BsYW5lcywiI2RlZmluZSBVTklPTl9DTElQUElOR19QTEFORVMgIisoZC5udW1DbGlwcGluZ1BsYW5lcy1kLm51bUNsaXBJbnRlcnNlY3Rpb24pLGQuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixkLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIittOiIiLGQucHJlbXVsdGlwbGllZEFscGhhPyIjZGVmaW5lIFBSRU1VTFRJUExJRURfQUxQSEEiOiIiLGQucGh5c2ljYWxseUNvcnJlY3RMaWdodHM/IiNkZWZpbmUgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyI6IiIsZC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsZC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZhLmV4dGVuc2lvbnMuZ2V0KCJFWFRfZnJhZ19kZXB0aCIpPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLGQuZW52TWFwJiZhLmV4dGVuc2lvbnMuZ2V0KCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIik/IiNkZWZpbmUgVEVYVFVSRV9MT0RfRVhUIjoKIiIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLDAhPT1kLnRvbmVNYXBwaW5nPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsMCE9PWQudG9uZU1hcHBpbmc/VS50b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIiLDAhPT1kLnRvbmVNYXBwaW5nP1lmKCJ0b25lTWFwcGluZyIsZC50b25lTWFwcGluZyk6IiIsZC5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixkLm91dHB1dEVuY29kaW5nfHxkLm1hcEVuY29kaW5nfHxkLmVudk1hcEVuY29kaW5nfHxkLmVtaXNzaXZlTWFwRW5jb2Rpbmc/VS5lbmNvZGluZ3NfcGFyc19mcmFnbWVudDoiIixkLm1hcEVuY29kaW5nP1VkKCJtYXBUZXhlbFRvTGluZWFyIixkLm1hcEVuY29kaW5nKToiIixkLmVudk1hcEVuY29kaW5nP1VkKCJlbnZNYXBUZXhlbFRvTGluZWFyIixkLmVudk1hcEVuY29kaW5nKToiIixkLmVtaXNzaXZlTWFwRW5jb2Rpbmc/VWQoImVtaXNzaXZlTWFwVGV4ZWxUb0xpbmVhciIsCmQuZW1pc3NpdmVNYXBFbmNvZGluZyk6IiIsZC5vdXRwdXRFbmNvZGluZz9YZigibGluZWFyVG9PdXRwdXRUZXhlbCIsZC5vdXRwdXRFbmNvZGluZyk6IiIsZC5kZXB0aFBhY2tpbmc/IiNkZWZpbmUgREVQVEhfUEFDS0lORyAiK2MuZGVwdGhQYWNraW5nOiIiLCJcbiJdLmZpbHRlcih5Yykuam9pbigiXG4iKSk7aD1WZChoLGQpO2g9TmUoaCxkKTtrPVZkKGssZCk7az1OZShrLGQpO2MuaXNTaGFkZXJNYXRlcmlhbHx8KGg9T2UoaCksaz1PZShrKSk7az1tK2s7aD1MZShlLGUuVkVSVEVYX1NIQURFUixnK2gpO2s9TGUoZSxlLkZSQUdNRU5UX1NIQURFUixrKTtlLmF0dGFjaFNoYWRlcih0LGgpO2UuYXR0YWNoU2hhZGVyKHQsayk7dm9pZCAwIT09Yy5pbmRleDBBdHRyaWJ1dGVOYW1lP2UuYmluZEF0dHJpYkxvY2F0aW9uKHQsMCxjLmluZGV4MEF0dHJpYnV0ZU5hbWUpOiEwPT09ZC5tb3JwaFRhcmdldHMmJmUuYmluZEF0dHJpYkxvY2F0aW9uKHQsMCwicG9zaXRpb24iKTtlLmxpbmtQcm9ncmFtKHQpOwpkPWUuZ2V0UHJvZ3JhbUluZm9Mb2codCk7dT1lLmdldFNoYWRlckluZm9Mb2coaCk7cT1lLmdldFNoYWRlckluZm9Mb2coayk7cj1uPSEwO2lmKCExPT09ZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsZS5MSU5LX1NUQVRVUykpbj0hMSxjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFByb2dyYW06IHNoYWRlciBlcnJvcjogIixlLmdldEVycm9yKCksImdsLlZBTElEQVRFX1NUQVRVUyIsZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsZS5WQUxJREFURV9TVEFUVVMpLCJnbC5nZXRQcm9ncmFtSW5mb0xvZyIsZCx1LHEpO2Vsc2UgaWYoIiIhPT1kKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpIixkKTtlbHNlIGlmKCIiPT09dXx8IiI9PT1xKXI9ITE7ciYmKHRoaXMuZGlhZ25vc3RpY3M9e3J1bm5hYmxlOm4sbWF0ZXJpYWw6Yyxwcm9ncmFtTG9nOmQsdmVydGV4U2hhZGVyOntsb2c6dSxwcmVmaXg6Z30sZnJhZ21lbnRTaGFkZXI6e2xvZzpxLApwcmVmaXg6bX19KTtlLmRlbGV0ZVNoYWRlcihoKTtlLmRlbGV0ZVNoYWRlcihrKTt2YXIgcDt0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7dm9pZCAwPT09cCYmKHA9bmV3IGZiKGUsdCxhKSk7cmV0dXJuIHB9O3ZhciB4O3RoaXMuZ2V0QXR0cmlidXRlcz1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXgpe2Zvcih2YXIgYT17fSxiPWUuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0LGUuQUNUSVZFX0FUVFJJQlVURVMpLGM9MDtjPGI7YysrKXt2YXIgZD1lLmdldEFjdGl2ZUF0dHJpYih0LGMpLm5hbWU7YVtkXT1lLmdldEF0dHJpYkxvY2F0aW9uKHQsZCl9eD1hfXJldHVybiB4fTt0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtlLmRlbGV0ZVByb2dyYW0odCk7dGhpcy5wcm9ncmFtPXZvaWQgMH07T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7dW5pZm9ybXM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiAudW5pZm9ybXMgaXMgbm93IC5nZXRVbmlmb3JtcygpLiIpOwpyZXR1cm4gdGhpcy5nZXRVbmlmb3JtcygpfX0sYXR0cmlidXRlczp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IC5hdHRyaWJ1dGVzIGlzIG5vdyAuZ2V0QXR0cmlidXRlcygpLiIpO3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZXMoKX19fSk7dGhpcy5pZD1iZysrO3RoaXMuY29kZT1iO3RoaXMudXNlZFRpbWVzPTE7dGhpcy5wcm9ncmFtPXQ7dGhpcy52ZXJ0ZXhTaGFkZXI9aDt0aGlzLmZyYWdtZW50U2hhZGVyPWs7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gY2coYSxiKXtmdW5jdGlvbiBjKGEsYil7dmFyIGM7YT9hLmlzVGV4dHVyZT9jPWEuZW5jb2Rpbmc6YS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW1zLmdldFRleHR1cmVFbmNvZGluZ0Zyb21NYXA6IGRvbid0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksYz0KYS50ZXh0dXJlLmVuY29kaW5nKTpjPTNFMzszRTM9PT1jJiZiJiYoYz0zMDA3KTtyZXR1cm4gY312YXIgZD1bXSxlPXtNZXNoRGVwdGhNYXRlcmlhbDoiZGVwdGgiLE1lc2hOb3JtYWxNYXRlcmlhbDoibm9ybWFsIixNZXNoQmFzaWNNYXRlcmlhbDoiYmFzaWMiLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6ImxhbWJlcnQiLE1lc2hQaG9uZ01hdGVyaWFsOiJwaG9uZyIsTWVzaFRvb25NYXRlcmlhbDoicGhvbmciLE1lc2hTdGFuZGFyZE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6InBoeXNpY2FsIixMaW5lQmFzaWNNYXRlcmlhbDoiYmFzaWMiLExpbmVEYXNoZWRNYXRlcmlhbDoiZGFzaGVkIixQb2ludHNNYXRlcmlhbDoicG9pbnRzIn0sZj0icHJlY2lzaW9uIHN1cHBvcnRzVmVydGV4VGV4dHVyZXMgbWFwIG1hcEVuY29kaW5nIGVudk1hcCBlbnZNYXBNb2RlIGVudk1hcEVuY29kaW5nIGxpZ2h0TWFwIGFvTWFwIGVtaXNzaXZlTWFwIGVtaXNzaXZlTWFwRW5jb2RpbmcgYnVtcE1hcCBub3JtYWxNYXAgZGlzcGxhY2VtZW50TWFwIHNwZWN1bGFyTWFwIHJvdWdobmVzc01hcCBtZXRhbG5lc3NNYXAgZ3JhZGllbnRNYXAgYWxwaGFNYXAgY29tYmluZSB2ZXJ0ZXhDb2xvcnMgZm9nIHVzZUZvZyBmb2dFeHAgZmxhdFNoYWRpbmcgc2l6ZUF0dGVudWF0aW9uIGxvZ2FyaXRobWljRGVwdGhCdWZmZXIgc2tpbm5pbmcgbWF4Qm9uZXMgdXNlVmVydGV4VGV4dHVyZSBtb3JwaFRhcmdldHMgbW9ycGhOb3JtYWxzIG1heE1vcnBoVGFyZ2V0cyBtYXhNb3JwaE5vcm1hbHMgcHJlbXVsdGlwbGllZEFscGhhIG51bURpckxpZ2h0cyBudW1Qb2ludExpZ2h0cyBudW1TcG90TGlnaHRzIG51bUhlbWlMaWdodHMgbnVtUmVjdEFyZWFMaWdodHMgc2hhZG93TWFwRW5hYmxlZCBzaGFkb3dNYXBUeXBlIHRvbmVNYXBwaW5nIHBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzIGFscGhhVGVzdCBkb3VibGVTaWRlZCBmbGlwU2lkZWQgbnVtQ2xpcHBpbmdQbGFuZXMgbnVtQ2xpcEludGVyc2VjdGlvbiBkZXB0aFBhY2tpbmcgZGl0aGVyaW5nIi5zcGxpdCgiICIpOwp0aGlzLmdldFBhcmFtZXRlcnM9ZnVuY3Rpb24oZCxmLGssbSx1LHEpe3ZhciBuPWVbZC50eXBlXSxyO2lmKHEuaXNTa2lubmVkTWVzaClpZihyPXEuc2tlbGV0b24uYm9uZXMsYi5mbG9hdFZlcnRleFRleHR1cmVzKXI9MTAyNDtlbHNle3ZhciBsPU1hdGgubWluKE1hdGguZmxvb3IoKGIubWF4VmVydGV4VW5pZm9ybXMtMjApLzQpLHIubGVuZ3RoKTtsPHIubGVuZ3RoPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFNrZWxldG9uIGhhcyAiK3IubGVuZ3RoKyIgYm9uZXMuIFRoaXMgR1BVIHN1cHBvcnRzICIrbCsiLiIpLHI9MCk6cj1sfWVsc2Ugcj0wO2w9YS5nZXRQcmVjaXNpb24oKTtudWxsIT09ZC5wcmVjaXNpb24mJihsPWIuZ2V0TWF4UHJlY2lzaW9uKGQucHJlY2lzaW9uKSxsIT09ZC5wcmVjaXNpb24mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6IixkLnByZWNpc2lvbiwibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIikpOwp2YXIgdD1hLmdldFJlbmRlclRhcmdldCgpO3JldHVybntzaGFkZXJJRDpuLHByZWNpc2lvbjpsLHN1cHBvcnRzVmVydGV4VGV4dHVyZXM6Yi52ZXJ0ZXhUZXh0dXJlcyxvdXRwdXRFbmNvZGluZzpjKHQ/dC50ZXh0dXJlOm51bGwsYS5nYW1tYU91dHB1dCksbWFwOiEhZC5tYXAsbWFwRW5jb2Rpbmc6YyhkLm1hcCxhLmdhbW1hSW5wdXQpLGVudk1hcDohIWQuZW52TWFwLGVudk1hcE1vZGU6ZC5lbnZNYXAmJmQuZW52TWFwLm1hcHBpbmcsZW52TWFwRW5jb2Rpbmc6YyhkLmVudk1hcCxhLmdhbW1hSW5wdXQpLGVudk1hcEN1YmVVVjohIWQuZW52TWFwJiYoMzA2PT09ZC5lbnZNYXAubWFwcGluZ3x8MzA3PT09ZC5lbnZNYXAubWFwcGluZyksbGlnaHRNYXA6ISFkLmxpZ2h0TWFwLGFvTWFwOiEhZC5hb01hcCxlbWlzc2l2ZU1hcDohIWQuZW1pc3NpdmVNYXAsZW1pc3NpdmVNYXBFbmNvZGluZzpjKGQuZW1pc3NpdmVNYXAsYS5nYW1tYUlucHV0KSxidW1wTWFwOiEhZC5idW1wTWFwLG5vcm1hbE1hcDohIWQubm9ybWFsTWFwLApkaXNwbGFjZW1lbnRNYXA6ISFkLmRpc3BsYWNlbWVudE1hcCxyb3VnaG5lc3NNYXA6ISFkLnJvdWdobmVzc01hcCxtZXRhbG5lc3NNYXA6ISFkLm1ldGFsbmVzc01hcCxzcGVjdWxhck1hcDohIWQuc3BlY3VsYXJNYXAsYWxwaGFNYXA6ISFkLmFscGhhTWFwLGdyYWRpZW50TWFwOiEhZC5ncmFkaWVudE1hcCxjb21iaW5lOmQuY29tYmluZSx2ZXJ0ZXhDb2xvcnM6ZC52ZXJ0ZXhDb2xvcnMsZm9nOiEhayx1c2VGb2c6ZC5mb2csZm9nRXhwOmsmJmsuaXNGb2dFeHAyLGZsYXRTaGFkaW5nOjE9PT1kLnNoYWRpbmcsc2l6ZUF0dGVudWF0aW9uOmQuc2l6ZUF0dGVudWF0aW9uLGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6Yi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLHNraW5uaW5nOmQuc2tpbm5pbmcmJjA8cixtYXhCb25lczpyLHVzZVZlcnRleFRleHR1cmU6Yi5mbG9hdFZlcnRleFRleHR1cmVzLG1vcnBoVGFyZ2V0czpkLm1vcnBoVGFyZ2V0cyxtb3JwaE5vcm1hbHM6ZC5tb3JwaE5vcm1hbHMsCm1heE1vcnBoVGFyZ2V0czphLm1heE1vcnBoVGFyZ2V0cyxtYXhNb3JwaE5vcm1hbHM6YS5tYXhNb3JwaE5vcm1hbHMsbnVtRGlyTGlnaHRzOmYuZGlyZWN0aW9uYWwubGVuZ3RoLG51bVBvaW50TGlnaHRzOmYucG9pbnQubGVuZ3RoLG51bVNwb3RMaWdodHM6Zi5zcG90Lmxlbmd0aCxudW1SZWN0QXJlYUxpZ2h0czpmLnJlY3RBcmVhLmxlbmd0aCxudW1IZW1pTGlnaHRzOmYuaGVtaS5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6bSxudW1DbGlwSW50ZXJzZWN0aW9uOnUsZGl0aGVyaW5nOmQuZGl0aGVyaW5nLHNoYWRvd01hcEVuYWJsZWQ6YS5zaGFkb3dNYXAuZW5hYmxlZCYmcS5yZWNlaXZlU2hhZG93JiYwPGYuc2hhZG93cy5sZW5ndGgsc2hhZG93TWFwVHlwZTphLnNoYWRvd01hcC50eXBlLHRvbmVNYXBwaW5nOmEudG9uZU1hcHBpbmcscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6YS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6ZC5wcmVtdWx0aXBsaWVkQWxwaGEsCmFscGhhVGVzdDpkLmFscGhhVGVzdCxkb3VibGVTaWRlZDoyPT09ZC5zaWRlLGZsaXBTaWRlZDoxPT09ZC5zaWRlLGRlcHRoUGFja2luZzp2b2lkIDAhPT1kLmRlcHRoUGFja2luZz9kLmRlcHRoUGFja2luZzohMX19O3RoaXMuZ2V0UHJvZ3JhbUNvZGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtiLnNoYWRlcklEP2MucHVzaChiLnNoYWRlcklEKTooYy5wdXNoKGEuZnJhZ21lbnRTaGFkZXIpLGMucHVzaChhLnZlcnRleFNoYWRlcikpO2lmKHZvaWQgMCE9PWEuZGVmaW5lcylmb3IodmFyIGQgaW4gYS5kZWZpbmVzKWMucHVzaChkKSxjLnB1c2goYS5kZWZpbmVzW2RdKTtmb3IoZD0wO2Q8Zi5sZW5ndGg7ZCsrKWMucHVzaChiW2ZbZF1dKTtyZXR1cm4gYy5qb2luKCl9O3RoaXMuYWNxdWlyZVByb2dyYW09ZnVuY3Rpb24oYixjLGUpe2Zvcih2YXIgZix1PTAscT1kLmxlbmd0aDt1PHE7dSsrKXt2YXIgbj1kW3VdO2lmKG4uY29kZT09PWUpe2Y9bjsrK2YudXNlZFRpbWVzO2JyZWFrfX12b2lkIDA9PT0KZiYmKGY9bmV3IGFnKGEsZSxiLGMpLGQucHVzaChmKSk7cmV0dXJuIGZ9O3RoaXMucmVsZWFzZVByb2dyYW09ZnVuY3Rpb24oYSl7aWYoMD09PS0tYS51c2VkVGltZXMpe3ZhciBiPWQuaW5kZXhPZihhKTtkW2JdPWRbZC5sZW5ndGgtMV07ZC5wb3AoKTthLmRlc3Ryb3koKX19O3RoaXMucHJvZ3JhbXM9ZH1mdW5jdGlvbiBkZyhhLGIsYyxkLGUsZixnKXtmdW5jdGlvbiBoKGEsYil7aWYoYS53aWR0aD5ifHxhLmhlaWdodD5iKXt2YXIgYz1iL01hdGgubWF4KGEud2lkdGgsYS5oZWlnaHQpLGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7ZC53aWR0aD1NYXRoLmZsb29yKGEud2lkdGgqYyk7ZC5oZWlnaHQ9TWF0aC5mbG9vcihhLmhlaWdodCpjKTtkLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKGEsMCwwLGEud2lkdGgsYS5oZWlnaHQsMCwwLGQud2lkdGgsZC5oZWlnaHQpO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogaW1hZ2UgaXMgdG9vIGJpZyAoIisKYS53aWR0aCsieCIrYS5oZWlnaHQrIikuIFJlc2l6ZWQgdG8gIitkLndpZHRoKyJ4IitkLmhlaWdodCxhKTtyZXR1cm4gZH1yZXR1cm4gYX1mdW5jdGlvbiBrKGEpe3JldHVybiBZLmlzUG93ZXJPZlR3byhhLndpZHRoKSYmWS5pc1Bvd2VyT2ZUd28oYS5oZWlnaHQpfWZ1bmN0aW9uIG0oYil7cmV0dXJuIDEwMDM9PT1ifHwxMDA0PT09Ynx8MTAwNT09PWI/YS5ORUFSRVNUOmEuTElORUFSfWZ1bmN0aW9uIHUoYil7Yj1iLnRhcmdldDtiLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHUpO2E6e3ZhciBjPWQuZ2V0KGIpO2lmKGIuaW1hZ2UmJmMuX19pbWFnZV9fd2ViZ2xUZXh0dXJlQ3ViZSlhLmRlbGV0ZVRleHR1cmUoYy5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlKTtlbHNle2lmKHZvaWQgMD09PWMuX193ZWJnbEluaXQpYnJlYWsgYTthLmRlbGV0ZVRleHR1cmUoYy5fX3dlYmdsVGV4dHVyZSl9ZC5yZW1vdmUoYil9Zy50ZXh0dXJlcy0tfWZ1bmN0aW9uIHEoYil7Yj1iLnRhcmdldDsKYi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixxKTt2YXIgYz1kLmdldChiKSxlPWQuZ2V0KGIudGV4dHVyZSk7aWYoYil7dm9pZCAwIT09ZS5fX3dlYmdsVGV4dHVyZSYmYS5kZWxldGVUZXh0dXJlKGUuX193ZWJnbFRleHR1cmUpO2IuZGVwdGhUZXh0dXJlJiZiLmRlcHRoVGV4dHVyZS5kaXNwb3NlKCk7aWYoYi5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZSlmb3IoZT0wOzY+ZTtlKyspYS5kZWxldGVGcmFtZWJ1ZmZlcihjLl9fd2ViZ2xGcmFtZWJ1ZmZlcltlXSksYy5fX3dlYmdsRGVwdGhidWZmZXImJmEuZGVsZXRlUmVuZGVyYnVmZmVyKGMuX193ZWJnbERlcHRoYnVmZmVyW2VdKTtlbHNlIGEuZGVsZXRlRnJhbWVidWZmZXIoYy5fX3dlYmdsRnJhbWVidWZmZXIpLGMuX193ZWJnbERlcHRoYnVmZmVyJiZhLmRlbGV0ZVJlbmRlcmJ1ZmZlcihjLl9fd2ViZ2xEZXB0aGJ1ZmZlcik7ZC5yZW1vdmUoYi50ZXh0dXJlKTtkLnJlbW92ZShiKX1nLnRleHR1cmVzLS19ZnVuY3Rpb24gbihiLAptKXt2YXIgbj1kLmdldChiKTtpZigwPGIudmVyc2lvbiYmbi5fX3ZlcnNpb24hPT1iLnZlcnNpb24pe3ZhciBxPWIuaW1hZ2U7aWYodm9pZCAwPT09cSljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCIsYik7ZWxzZSBpZighMT09PXEuY29tcGxldGUpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyBpbmNvbXBsZXRlIixiKTtlbHNle3ZvaWQgMD09PW4uX193ZWJnbEluaXQmJihuLl9fd2ViZ2xJbml0PSEwLGIuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdSksbi5fX3dlYmdsVGV4dHVyZT1hLmNyZWF0ZVRleHR1cmUoKSxnLnRleHR1cmVzKyspO2MuYWN0aXZlVGV4dHVyZShhLlRFWFRVUkUwK20pO2MuYmluZFRleHR1cmUoYS5URVhUVVJFXzJELG4uX193ZWJnbFRleHR1cmUpO2EucGl4ZWxTdG9yZWkoYS5VTlBBQ0tfRkxJUF9ZX1dFQkdMLApiLmZsaXBZKTthLnBpeGVsU3RvcmVpKGEuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLGIucHJlbXVsdGlwbHlBbHBoYSk7YS5waXhlbFN0b3JlaShhLlVOUEFDS19BTElHTk1FTlQsYi51bnBhY2tBbGlnbm1lbnQpO3ZhciBsPWgoYi5pbWFnZSxlLm1heFRleHR1cmVTaXplKTtpZigoMTAwMSE9PWIud3JhcFN8fDEwMDEhPT1iLndyYXBUfHwxMDAzIT09Yi5taW5GaWx0ZXImJjEwMDYhPT1iLm1pbkZpbHRlcikmJiExPT09ayhsKSlpZihxPWwscSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHEgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7dC53aWR0aD1ZLm5lYXJlc3RQb3dlck9mVHdvKHEud2lkdGgpO3QuaGVpZ2h0PVkubmVhcmVzdFBvd2VyT2ZUd28ocS5oZWlnaHQpO3QuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UocSwwLDAsCnQud2lkdGgsdC5oZWlnaHQpO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogaW1hZ2UgaXMgbm90IHBvd2VyIG9mIHR3byAoIitxLndpZHRoKyJ4IitxLmhlaWdodCsiKS4gUmVzaXplZCB0byAiK3Qud2lkdGgrIngiK3QuaGVpZ2h0LHEpO2w9dH1lbHNlIGw9cTt2YXIgcT1rKGwpLHQ9ZihiLmZvcm1hdCksej1mKGIudHlwZSk7cihhLlRFWFRVUkVfMkQsYixxKTt2YXIgRj1iLm1pcG1hcHM7aWYoYi5pc0RlcHRoVGV4dHVyZSl7Rj1hLkRFUFRIX0NPTVBPTkVOVDtpZigxMDE1PT09Yi50eXBlKXtpZighcCl0aHJvdyBFcnJvcigiRmxvYXQgRGVwdGggVGV4dHVyZSBvbmx5IHN1cHBvcnRlZCBpbiBXZWJHTDIuMCIpO0Y9YS5ERVBUSF9DT01QT05FTlQzMkZ9ZWxzZSBwJiYoRj1hLkRFUFRIX0NPTVBPTkVOVDE2KTsxMDI2PT09Yi5mb3JtYXQmJkY9PT1hLkRFUFRIX0NPTVBPTkVOVCYmMTAxMiE9PWIudHlwZSYmMTAxNCE9PWIudHlwZSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLApiLnR5cGU9MTAxMix6PWYoYi50eXBlKSk7MTAyNz09PWIuZm9ybWF0JiYoRj1hLkRFUFRIX1NURU5DSUwsMTAyMCE9PWIudHlwZSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkSW50MjQ4VHlwZSBmb3IgRGVwdGhTdGVuY2lsRm9ybWF0IERlcHRoVGV4dHVyZS4iKSxiLnR5cGU9MTAyMCx6PWYoYi50eXBlKSkpO2MudGV4SW1hZ2UyRChhLlRFWFRVUkVfMkQsMCxGLGwud2lkdGgsbC5oZWlnaHQsMCx0LHosbnVsbCl9ZWxzZSBpZihiLmlzRGF0YVRleHR1cmUpaWYoMDxGLmxlbmd0aCYmcSl7Zm9yKHZhciBhYT0wLFI9Ri5sZW5ndGg7YWE8UjthYSsrKWw9RlthYV0sYy50ZXhJbWFnZTJEKGEuVEVYVFVSRV8yRCxhYSx0LGwud2lkdGgsbC5oZWlnaHQsMCx0LHosbC5kYXRhKTtiLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIGMudGV4SW1hZ2UyRChhLlRFWFRVUkVfMkQsMCx0LGwud2lkdGgsbC5oZWlnaHQsMCx0LHosbC5kYXRhKTtlbHNlIGlmKGIuaXNDb21wcmVzc2VkVGV4dHVyZSlmb3IoYWE9CjAsUj1GLmxlbmd0aDthYTxSO2FhKyspbD1GW2FhXSwxMDIzIT09Yi5mb3JtYXQmJjEwMjIhPT1iLmZvcm1hdD8tMTxjLmdldENvbXByZXNzZWRUZXh0dXJlRm9ybWF0cygpLmluZGV4T2YodCk/Yy5jb21wcmVzc2VkVGV4SW1hZ2UyRChhLlRFWFRVUkVfMkQsYWEsdCxsLndpZHRoLGwuaGVpZ2h0LDAsbC5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC51cGxvYWRUZXh0dXJlKCkiKTpjLnRleEltYWdlMkQoYS5URVhUVVJFXzJELGFhLHQsbC53aWR0aCxsLmhlaWdodCwwLHQseixsLmRhdGEpO2Vsc2UgaWYoMDxGLmxlbmd0aCYmcSl7YWE9MDtmb3IoUj1GLmxlbmd0aDthYTxSO2FhKyspbD1GW2FhXSxjLnRleEltYWdlMkQoYS5URVhUVVJFXzJELGFhLHQsdCx6LGwpO2IuZ2VuZXJhdGVNaXBtYXBzPSExfWVsc2UgYy50ZXhJbWFnZTJEKGEuVEVYVFVSRV8yRCwKMCx0LHQseixsKTtiLmdlbmVyYXRlTWlwbWFwcyYmcSYmYS5nZW5lcmF0ZU1pcG1hcChhLlRFWFRVUkVfMkQpO24uX192ZXJzaW9uPWIudmVyc2lvbjtpZihiLm9uVXBkYXRlKWIub25VcGRhdGUoYik7cmV0dXJufX1jLmFjdGl2ZVRleHR1cmUoYS5URVhUVVJFMCttKTtjLmJpbmRUZXh0dXJlKGEuVEVYVFVSRV8yRCxuLl9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiByKGMsZyxoKXtoPyhhLnRleFBhcmFtZXRlcmkoYyxhLlRFWFRVUkVfV1JBUF9TLGYoZy53cmFwUykpLGEudGV4UGFyYW1ldGVyaShjLGEuVEVYVFVSRV9XUkFQX1QsZihnLndyYXBUKSksYS50ZXhQYXJhbWV0ZXJpKGMsYS5URVhUVVJFX01BR19GSUxURVIsZihnLm1hZ0ZpbHRlcikpLGEudGV4UGFyYW1ldGVyaShjLGEuVEVYVFVSRV9NSU5fRklMVEVSLGYoZy5taW5GaWx0ZXIpKSk6KGEudGV4UGFyYW1ldGVyaShjLGEuVEVYVFVSRV9XUkFQX1MsYS5DTEFNUF9UT19FREdFKSxhLnRleFBhcmFtZXRlcmkoYyxhLlRFWFRVUkVfV1JBUF9ULAphLkNMQU1QX1RPX0VER0UpLDEwMDE9PT1nLndyYXBTJiYxMDAxPT09Zy53cmFwVHx8Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIsZyksYS50ZXhQYXJhbWV0ZXJpKGMsYS5URVhUVVJFX01BR19GSUxURVIsbShnLm1hZ0ZpbHRlcikpLGEudGV4UGFyYW1ldGVyaShjLGEuVEVYVFVSRV9NSU5fRklMVEVSLG0oZy5taW5GaWx0ZXIpKSwxMDAzIT09Zy5taW5GaWx0ZXImJjEwMDYhPT1nLm1pbkZpbHRlciYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUubWluRmlsdGVyIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuTmVhcmVzdEZpbHRlciBvciBUSFJFRS5MaW5lYXJGaWx0ZXIuIixnKSk7IShoPWIuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSl8fAoxMDE1PT09Zy50eXBlJiZudWxsPT09Yi5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpfHwxMDE2PT09Zy50eXBlJiZudWxsPT09Yi5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIil8fCEoMTxnLmFuaXNvdHJvcHl8fGQuZ2V0KGcpLl9fY3VycmVudEFuaXNvdHJvcHkpfHwoYS50ZXhQYXJhbWV0ZXJmKGMsaC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbihnLmFuaXNvdHJvcHksZS5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxkLmdldChnKS5fX2N1cnJlbnRBbmlzb3Ryb3B5PWcuYW5pc290cm9weSl9ZnVuY3Rpb24gbChiLGUsZyxoKXt2YXIgaz1mKGUudGV4dHVyZS5mb3JtYXQpLG09ZihlLnRleHR1cmUudHlwZSk7Yy50ZXhJbWFnZTJEKGgsMCxrLGUud2lkdGgsZS5oZWlnaHQsMCxrLG0sbnVsbCk7YS5iaW5kRnJhbWVidWZmZXIoYS5GUkFNRUJVRkZFUixiKTthLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGEuRlJBTUVCVUZGRVIsZyxoLGQuZ2V0KGUudGV4dHVyZSkuX193ZWJnbFRleHR1cmUsCjApO2EuYmluZEZyYW1lYnVmZmVyKGEuRlJBTUVCVUZGRVIsbnVsbCl9ZnVuY3Rpb24gdChiLGMpe2EuYmluZFJlbmRlcmJ1ZmZlcihhLlJFTkRFUkJVRkZFUixiKTtjLmRlcHRoQnVmZmVyJiYhYy5zdGVuY2lsQnVmZmVyPyhhLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoYS5SRU5ERVJCVUZGRVIsYS5ERVBUSF9DT01QT05FTlQxNixjLndpZHRoLGMuaGVpZ2h0KSxhLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGEuRlJBTUVCVUZGRVIsYS5ERVBUSF9BVFRBQ0hNRU5ULGEuUkVOREVSQlVGRkVSLGIpKTpjLmRlcHRoQnVmZmVyJiZjLnN0ZW5jaWxCdWZmZXI/KGEucmVuZGVyYnVmZmVyU3RvcmFnZShhLlJFTkRFUkJVRkZFUixhLkRFUFRIX1NURU5DSUwsYy53aWR0aCxjLmhlaWdodCksYS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihhLkZSQU1FQlVGRkVSLGEuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULGEuUkVOREVSQlVGRkVSLGIpKTphLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoYS5SRU5ERVJCVUZGRVIsCmEuUkdCQTQsYy53aWR0aCxjLmhlaWdodCk7YS5iaW5kUmVuZGVyYnVmZmVyKGEuUkVOREVSQlVGRkVSLG51bGwpfXZhciBwPSJ1bmRlZmluZWQiIT09dHlwZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQmJmEgaW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0O3RoaXMuc2V0VGV4dHVyZTJEPW47dGhpcy5zZXRUZXh0dXJlQ3ViZT1mdW5jdGlvbihiLG0pe3ZhciBuPWQuZ2V0KGIpO2lmKDY9PT1iLmltYWdlLmxlbmd0aClpZigwPGIudmVyc2lvbiYmbi5fX3ZlcnNpb24hPT1iLnZlcnNpb24pe24uX19pbWFnZV9fd2ViZ2xUZXh0dXJlQ3ViZXx8KGIuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdSksbi5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlPWEuY3JlYXRlVGV4dHVyZSgpLGcudGV4dHVyZXMrKyk7Yy5hY3RpdmVUZXh0dXJlKGEuVEVYVFVSRTArbSk7Yy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfQ1VCRV9NQVAsbi5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlKTthLnBpeGVsU3RvcmVpKGEuVU5QQUNLX0ZMSVBfWV9XRUJHTCwKYi5mbGlwWSk7Zm9yKHZhciBxPWImJmIuaXNDb21wcmVzc2VkVGV4dHVyZSxsPWIuaW1hZ2VbMF0mJmIuaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSx0PVtdLHo9MDs2Pno7eisrKXRbel09cXx8bD9sP2IuaW1hZ2Vbel0uaW1hZ2U6Yi5pbWFnZVt6XTpoKGIuaW1hZ2Vbel0sZS5tYXhDdWJlbWFwU2l6ZSk7dmFyIHA9ayh0WzBdKSx5PWYoYi5mb3JtYXQpLFI9ZihiLnR5cGUpO3IoYS5URVhUVVJFX0NVQkVfTUFQLGIscCk7Zm9yKHo9MDs2Pno7eisrKWlmKHEpZm9yKHZhciBjYSxsYT10W3pdLm1pcG1hcHMsRD0wLEI9bGEubGVuZ3RoO0Q8QjtEKyspY2E9bGFbRF0sMTAyMyE9PWIuZm9ybWF0JiYxMDIyIT09Yi5mb3JtYXQ/LTE8Yy5nZXRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMoKS5pbmRleE9mKHkpP2MuY29tcHJlc3NlZFRleEltYWdlMkQoYS5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1greixELHksY2Eud2lkdGgsY2EuaGVpZ2h0LDAsY2EuZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAuc2V0VGV4dHVyZUN1YmUoKSIpOgpjLnRleEltYWdlMkQoYS5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1greixELHksY2Eud2lkdGgsY2EuaGVpZ2h0LDAseSxSLGNhLmRhdGEpO2Vsc2UgbD9jLnRleEltYWdlMkQoYS5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1greiwwLHksdFt6XS53aWR0aCx0W3pdLmhlaWdodCwwLHksUix0W3pdLmRhdGEpOmMudGV4SW1hZ2UyRChhLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCt6LDAseSx5LFIsdFt6XSk7Yi5nZW5lcmF0ZU1pcG1hcHMmJnAmJmEuZ2VuZXJhdGVNaXBtYXAoYS5URVhUVVJFX0NVQkVfTUFQKTtuLl9fdmVyc2lvbj1iLnZlcnNpb247aWYoYi5vblVwZGF0ZSliLm9uVXBkYXRlKGIpfWVsc2UgYy5hY3RpdmVUZXh0dXJlKGEuVEVYVFVSRTArbSksYy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfQ1VCRV9NQVAsbi5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlKX07dGhpcy5zZXRUZXh0dXJlQ3ViZUR5bmFtaWM9ZnVuY3Rpb24oYixlKXtjLmFjdGl2ZVRleHR1cmUoYS5URVhUVVJFMCsKZSk7Yy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfQ1VCRV9NQVAsZC5nZXQoYikuX193ZWJnbFRleHR1cmUpfTt0aGlzLnNldHVwUmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKGIpe3ZhciBlPWQuZ2V0KGIpLGY9ZC5nZXQoYi50ZXh0dXJlKTtiLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHEpO2YuX193ZWJnbFRleHR1cmU9YS5jcmVhdGVUZXh0dXJlKCk7Zy50ZXh0dXJlcysrO3ZhciBoPSEwPT09Yi5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZSxtPWsoYik7aWYoaCl7ZS5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKHZhciB1PTA7Nj51O3UrKyllLl9fd2ViZ2xGcmFtZWJ1ZmZlclt1XT1hLmNyZWF0ZUZyYW1lYnVmZmVyKCl9ZWxzZSBlLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1hLmNyZWF0ZUZyYW1lYnVmZmVyKCk7aWYoaCl7Yy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfQ1VCRV9NQVAsZi5fX3dlYmdsVGV4dHVyZSk7cihhLlRFWFRVUkVfQ1VCRV9NQVAsYi50ZXh0dXJlLG0pO2Zvcih1PTA7Nj51O3UrKylsKGUuX193ZWJnbEZyYW1lYnVmZmVyW3VdLApiLGEuQ09MT1JfQVRUQUNITUVOVDAsYS5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1grdSk7Yi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyYmbSYmYS5nZW5lcmF0ZU1pcG1hcChhLlRFWFRVUkVfQ1VCRV9NQVApO2MuYmluZFRleHR1cmUoYS5URVhUVVJFX0NVQkVfTUFQLG51bGwpfWVsc2UgYy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfMkQsZi5fX3dlYmdsVGV4dHVyZSkscihhLlRFWFRVUkVfMkQsYi50ZXh0dXJlLG0pLGwoZS5fX3dlYmdsRnJhbWVidWZmZXIsYixhLkNPTE9SX0FUVEFDSE1FTlQwLGEuVEVYVFVSRV8yRCksYi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyYmbSYmYS5nZW5lcmF0ZU1pcG1hcChhLlRFWFRVUkVfMkQpLGMuYmluZFRleHR1cmUoYS5URVhUVVJFXzJELG51bGwpO2lmKGIuZGVwdGhCdWZmZXIpe2U9ZC5nZXQoYik7Zj0hMD09PWIuaXNXZWJHTFJlbmRlclRhcmdldEN1YmU7aWYoYi5kZXB0aFRleHR1cmUpe2lmKGYpdGhyb3cgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7CmlmKGImJmIuaXNXZWJHTFJlbmRlclRhcmdldEN1YmUpdGhyb3cgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQhIik7YS5iaW5kRnJhbWVidWZmZXIoYS5GUkFNRUJVRkZFUixlLl9fd2ViZ2xGcmFtZWJ1ZmZlcik7aWYoIWIuZGVwdGhUZXh0dXJlfHwhYi5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpdGhyb3cgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTtkLmdldChiLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUmJmIuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPT09Yi53aWR0aCYmYi5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0PT09Yi5oZWlnaHR8fChiLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD1iLndpZHRoLGIuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD1iLmhlaWdodCxiLmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0KITApO24oYi5kZXB0aFRleHR1cmUsMCk7ZT1kLmdldChiLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU7aWYoMTAyNj09PWIuZGVwdGhUZXh0dXJlLmZvcm1hdClhLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGEuRlJBTUVCVUZGRVIsYS5ERVBUSF9BVFRBQ0hNRU5ULGEuVEVYVFVSRV8yRCxlLDApO2Vsc2UgaWYoMTAyNz09PWIuZGVwdGhUZXh0dXJlLmZvcm1hdClhLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGEuRlJBTUVCVUZGRVIsYS5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsYS5URVhUVVJFXzJELGUsMCk7ZWxzZSB0aHJvdyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iik7fWVsc2UgaWYoZilmb3IoZS5fX3dlYmdsRGVwdGhidWZmZXI9W10sZj0wOzY+ZjtmKyspYS5iaW5kRnJhbWVidWZmZXIoYS5GUkFNRUJVRkZFUixlLl9fd2ViZ2xGcmFtZWJ1ZmZlcltmXSksZS5fX3dlYmdsRGVwdGhidWZmZXJbZl09YS5jcmVhdGVSZW5kZXJidWZmZXIoKSx0KGUuX193ZWJnbERlcHRoYnVmZmVyW2ZdLApiKTtlbHNlIGEuYmluZEZyYW1lYnVmZmVyKGEuRlJBTUVCVUZGRVIsZS5fX3dlYmdsRnJhbWVidWZmZXIpLGUuX193ZWJnbERlcHRoYnVmZmVyPWEuY3JlYXRlUmVuZGVyYnVmZmVyKCksdChlLl9fd2ViZ2xEZXB0aGJ1ZmZlcixiKTthLmJpbmRGcmFtZWJ1ZmZlcihhLkZSQU1FQlVGRkVSLG51bGwpfX07dGhpcy51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXA9ZnVuY3Rpb24oYil7dmFyIGU9Yi50ZXh0dXJlO2UuZ2VuZXJhdGVNaXBtYXBzJiZrKGIpJiYxMDAzIT09ZS5taW5GaWx0ZXImJjEwMDYhPT1lLm1pbkZpbHRlciYmKGI9YiYmYi5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZT9hLlRFWFRVUkVfQ1VCRV9NQVA6YS5URVhUVVJFXzJELGU9ZC5nZXQoZSkuX193ZWJnbFRleHR1cmUsYy5iaW5kVGV4dHVyZShiLGUpLGEuZ2VuZXJhdGVNaXBtYXAoYiksYy5iaW5kVGV4dHVyZShiLG51bGwpKX19ZnVuY3Rpb24gZWcoKXt2YXIgYT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGIpe2I9Yi51dWlkOwp2YXIgYz1hW2JdO3ZvaWQgMD09PWMmJihjPXt9LGFbYl09Yyk7cmV0dXJuIGN9LHJlbW92ZTpmdW5jdGlvbihiKXtkZWxldGUgYVtiLnV1aWRdfSxjbGVhcjpmdW5jdGlvbigpe2E9e319fX1mdW5jdGlvbiBmZyhhLGIsYyl7ZnVuY3Rpb24gZChiLGMsZCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoNCksZj1hLmNyZWF0ZVRleHR1cmUoKTthLmJpbmRUZXh0dXJlKGIsZik7YS50ZXhQYXJhbWV0ZXJpKGIsYS5URVhUVVJFX01JTl9GSUxURVIsYS5ORUFSRVNUKTthLnRleFBhcmFtZXRlcmkoYixhLlRFWFRVUkVfTUFHX0ZJTFRFUixhLk5FQVJFU1QpO2ZvcihiPTA7YjxkO2IrKylhLnRleEltYWdlMkQoYytiLDAsYS5SR0JBLDEsMSwwLGEuUkdCQSxhLlVOU0lHTkVEX0JZVEUsZSk7cmV0dXJuIGZ9ZnVuY3Rpb24gZShiKXshMCE9PXZbYl0mJihhLmVuYWJsZShiKSx2W2JdPSEwKX1mdW5jdGlvbiBmKGIpeyExIT09dltiXSYmKGEuZGlzYWJsZShiKSx2W2JdPSExKX1mdW5jdGlvbiBnKGIsZCwKZyxoLGssbSxuLHUpezAhPT1iP2UoYS5CTEVORCk6ZihhLkJMRU5EKTtpZihiIT09d3x8dSE9PWNhKTI9PT1iP3U/KGEuYmxlbmRFcXVhdGlvblNlcGFyYXRlKGEuRlVOQ19BREQsYS5GVU5DX0FERCksYS5ibGVuZEZ1bmNTZXBhcmF0ZShhLk9ORSxhLk9ORSxhLk9ORSxhLk9ORSkpOihhLmJsZW5kRXF1YXRpb24oYS5GVU5DX0FERCksYS5ibGVuZEZ1bmMoYS5TUkNfQUxQSEEsYS5PTkUpKTozPT09Yj91PyhhLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShhLkZVTkNfQURELGEuRlVOQ19BREQpLGEuYmxlbmRGdW5jU2VwYXJhdGUoYS5aRVJPLGEuWkVSTyxhLk9ORV9NSU5VU19TUkNfQ09MT1IsYS5PTkVfTUlOVVNfU1JDX0FMUEhBKSk6KGEuYmxlbmRFcXVhdGlvbihhLkZVTkNfQUREKSxhLmJsZW5kRnVuYyhhLlpFUk8sYS5PTkVfTUlOVVNfU1JDX0NPTE9SKSk6ND09PWI/dT8oYS5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoYS5GVU5DX0FERCxhLkZVTkNfQUREKSxhLmJsZW5kRnVuY1NlcGFyYXRlKGEuWkVSTywKYS5TUkNfQ09MT1IsYS5aRVJPLGEuU1JDX0FMUEhBKSk6KGEuYmxlbmRFcXVhdGlvbihhLkZVTkNfQUREKSxhLmJsZW5kRnVuYyhhLlpFUk8sYS5TUkNfQ09MT1IpKTp1PyhhLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShhLkZVTkNfQURELGEuRlVOQ19BREQpLGEuYmxlbmRGdW5jU2VwYXJhdGUoYS5PTkUsYS5PTkVfTUlOVVNfU1JDX0FMUEhBLGEuT05FLGEuT05FX01JTlVTX1NSQ19BTFBIQSkpOihhLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShhLkZVTkNfQURELGEuRlVOQ19BREQpLGEuYmxlbmRGdW5jU2VwYXJhdGUoYS5TUkNfQUxQSEEsYS5PTkVfTUlOVVNfU1JDX0FMUEhBLGEuT05FLGEuT05FX01JTlVTX1NSQ19BTFBIQSkpLHc9YixjYT11O2lmKDU9PT1iKXtrPWt8fGQ7bT1tfHxnO249bnx8aDtpZihkIT09T3x8ayE9PUYpYS5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoYyhkKSxjKGspKSxPPWQsRj1rO2lmKGchPT1TfHxoIT09RXx8bSE9PWFhfHxuIT09UilhLmJsZW5kRnVuY1NlcGFyYXRlKGMoZyksCmMoaCksYyhtKSxjKG4pKSxTPWcsRT1oLGFhPW0sUj1ufWVsc2UgUj1hYT1GPUU9Uz1PPW51bGx9ZnVuY3Rpb24gaChiKXtsYSE9PWImJihiP2EuZnJvbnRGYWNlKGEuQ1cpOmEuZnJvbnRGYWNlKGEuQ0NXKSxsYT1iKX1mdW5jdGlvbiBrKGIpezAhPT1iPyhlKGEuQ1VMTF9GQUNFKSxiIT09RCYmKDE9PT1iP2EuY3VsbEZhY2UoYS5CQUNLKToyPT09Yj9hLmN1bGxGYWNlKGEuRlJPTlQpOmEuY3VsbEZhY2UoYS5GUk9OVF9BTkRfQkFDSykpKTpmKGEuQ1VMTF9GQUNFKTtEPWJ9ZnVuY3Rpb24gbShiLGMsZCl7aWYoYil7aWYoZShhLlBPTFlHT05fT0ZGU0VUX0ZJTEwpLEMhPT1jfHxQIT09ZClhLnBvbHlnb25PZmZzZXQoYyxkKSxDPWMsUD1kfWVsc2UgZihhLlBPTFlHT05fT0ZGU0VUX0ZJTEwpfWZ1bmN0aW9uIHUoYil7dm9pZCAwPT09YiYmKGI9YS5URVhUVVJFMCtXLTEpO1QhPT1iJiYoYS5hY3RpdmVUZXh0dXJlKGIpLFQ9Yil9dmFyIHE9bmV3IGZ1bmN0aW9uKCl7dmFyIGI9ITEsYz0KbmV3IGdhLGQ9bnVsbCxlPW5ldyBnYTtyZXR1cm57c2V0TWFzazpmdW5jdGlvbihjKXtkPT09Y3x8Ynx8KGEuY29sb3JNYXNrKGMsYyxjLGMpLGQ9Yyl9LHNldExvY2tlZDpmdW5jdGlvbihhKXtiPWF9LHNldENsZWFyOmZ1bmN0aW9uKGIsZCxmLGcsaCl7ITA9PT1oJiYoYio9ZyxkKj1nLGYqPWcpO2Muc2V0KGIsZCxmLGcpOyExPT09ZS5lcXVhbHMoYykmJihhLmNsZWFyQ29sb3IoYixkLGYsZyksZS5jb3B5KGMpKX0scmVzZXQ6ZnVuY3Rpb24oKXtiPSExO2Q9bnVsbDtlLnNldCgwLDAsMCwxKX19fSxuPW5ldyBmdW5jdGlvbigpe3ZhciBiPSExLGM9bnVsbCxkPW51bGwsZz1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKGIpe2I/ZShhLkRFUFRIX1RFU1QpOmYoYS5ERVBUSF9URVNUKX0sc2V0TWFzazpmdW5jdGlvbihkKXtjPT09ZHx8Ynx8KGEuZGVwdGhNYXNrKGQpLGM9ZCl9LHNldEZ1bmM6ZnVuY3Rpb24oYil7aWYoZCE9PWIpe2lmKGIpc3dpdGNoKGIpe2Nhc2UgMDphLmRlcHRoRnVuYyhhLk5FVkVSKTsKYnJlYWs7Y2FzZSAxOmEuZGVwdGhGdW5jKGEuQUxXQVlTKTticmVhaztjYXNlIDI6YS5kZXB0aEZ1bmMoYS5MRVNTKTticmVhaztjYXNlIDM6YS5kZXB0aEZ1bmMoYS5MRVFVQUwpO2JyZWFrO2Nhc2UgNDphLmRlcHRoRnVuYyhhLkVRVUFMKTticmVhaztjYXNlIDU6YS5kZXB0aEZ1bmMoYS5HRVFVQUwpO2JyZWFrO2Nhc2UgNjphLmRlcHRoRnVuYyhhLkdSRUFURVIpO2JyZWFrO2Nhc2UgNzphLmRlcHRoRnVuYyhhLk5PVEVRVUFMKTticmVhaztkZWZhdWx0OmEuZGVwdGhGdW5jKGEuTEVRVUFMKX1lbHNlIGEuZGVwdGhGdW5jKGEuTEVRVUFMKTtkPWJ9fSxzZXRMb2NrZWQ6ZnVuY3Rpb24oYSl7Yj1hfSxzZXRDbGVhcjpmdW5jdGlvbihiKXtnIT09YiYmKGEuY2xlYXJEZXB0aChiKSxnPWIpfSxyZXNldDpmdW5jdGlvbigpe2I9ITE7Zz1kPWM9bnVsbH19fSxyPW5ldyBmdW5jdGlvbigpe3ZhciBiPSExLGM9bnVsbCxkPW51bGwsZz1udWxsLGg9bnVsbCxrPW51bGwsbT1udWxsLG49bnVsbCwKdT1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKGIpe2I/ZShhLlNURU5DSUxfVEVTVCk6ZihhLlNURU5DSUxfVEVTVCl9LHNldE1hc2s6ZnVuY3Rpb24oZCl7Yz09PWR8fGJ8fChhLnN0ZW5jaWxNYXNrKGQpLGM9ZCl9LHNldEZ1bmM6ZnVuY3Rpb24oYixjLGUpe2lmKGQhPT1ifHxnIT09Y3x8aCE9PWUpYS5zdGVuY2lsRnVuYyhiLGMsZSksZD1iLGc9YyxoPWV9LHNldE9wOmZ1bmN0aW9uKGIsYyxkKXtpZihrIT09Ynx8bSE9PWN8fG4hPT1kKWEuc3RlbmNpbE9wKGIsYyxkKSxrPWIsbT1jLG49ZH0sc2V0TG9ja2VkOmZ1bmN0aW9uKGEpe2I9YX0sc2V0Q2xlYXI6ZnVuY3Rpb24oYil7dSE9PWImJihhLmNsZWFyU3RlbmNpbChiKSx1PWIpfSxyZXNldDpmdW5jdGlvbigpe2I9ITE7dT1uPW09az1oPWc9ZD1jPW51bGx9fX0sbD1hLmdldFBhcmFtZXRlcihhLk1BWF9WRVJURVhfQVRUUklCUyksdD1uZXcgVWludDhBcnJheShsKSxwPW5ldyBVaW50OEFycmF5KGwpLHg9bmV3IFVpbnQ4QXJyYXkobCksCnY9e30sRz1udWxsLHc9bnVsbCxPPW51bGwsUz1udWxsLEU9bnVsbCxGPW51bGwsYWE9bnVsbCxSPW51bGwsY2E9ITEsbGE9bnVsbCxEPW51bGwsQj1udWxsLEM9bnVsbCxQPW51bGwsSz1udWxsLFc9YS5nZXRQYXJhbWV0ZXIoYS5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyksbD1wYXJzZUZsb2F0KC9eV2ViR0xcIChbMC05XSkvLmV4ZWMoYS5nZXRQYXJhbWV0ZXIoYS5WRVJTSU9OKSlbMV0pLGJhPTE8PXBhcnNlRmxvYXQobCksVD1udWxsLFE9e30sST1uZXcgZ2EsSD1uZXcgZ2EsSj17fTtKW2EuVEVYVFVSRV8yRF09ZChhLlRFWFRVUkVfMkQsYS5URVhUVVJFXzJELDEpO0pbYS5URVhUVVJFX0NVQkVfTUFQXT1kKGEuVEVYVFVSRV9DVUJFX01BUCxhLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCw2KTtyZXR1cm57YnVmZmVyczp7Y29sb3I6cSxkZXB0aDpuLHN0ZW5jaWw6cn0saW5pdDpmdW5jdGlvbigpe3Euc2V0Q2xlYXIoMCwwLDAsMSk7bi5zZXRDbGVhcigxKTtyLnNldENsZWFyKDApOwplKGEuREVQVEhfVEVTVCk7bi5zZXRGdW5jKDMpO2goITEpO2soMSk7ZShhLkNVTExfRkFDRSk7ZShhLkJMRU5EKTtnKDEpfSxpbml0QXR0cmlidXRlczpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI9dC5sZW5ndGg7YTxiO2ErKyl0W2FdPTB9LGVuYWJsZUF0dHJpYnV0ZTpmdW5jdGlvbihjKXt0W2NdPTE7MD09PXBbY10mJihhLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGMpLHBbY109MSk7MCE9PXhbY10mJihiLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShjLDApLHhbY109MCl9LGVuYWJsZUF0dHJpYnV0ZUFuZERpdmlzb3I6ZnVuY3Rpb24oYyxkKXt0W2NdPTE7MD09PXBbY10mJihhLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGMpLHBbY109MSk7eFtjXSE9PWQmJihiLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShjLGQpLHhbY109ZCl9LGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPQowLGM9cC5sZW5ndGg7YiE9PWM7KytiKXBbYl0hPT10W2JdJiYoYS5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoYikscFtiXT0wKX0sZW5hYmxlOmUsZGlzYWJsZTpmLGdldENvbXByZXNzZWRUZXh0dXJlRm9ybWF0czpmdW5jdGlvbigpe2lmKG51bGw9PT1HJiYoRz1bXSxiLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fGIuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxiLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSkpZm9yKHZhciBjPWEuZ2V0UGFyYW1ldGVyKGEuQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMpLGQ9MDtkPGMubGVuZ3RoO2QrKylHLnB1c2goY1tkXSk7cmV0dXJuIEd9LHNldEJsZW5kaW5nOmcsc2V0TWF0ZXJpYWw6ZnVuY3Rpb24oYil7Mj09PWIuc2lkZT9mKGEuQ1VMTF9GQUNFKTplKGEuQ1VMTF9GQUNFKTtoKDE9PT1iLnNpZGUpOyEwPT09Yi50cmFuc3BhcmVudD9nKGIuYmxlbmRpbmcsYi5ibGVuZEVxdWF0aW9uLApiLmJsZW5kU3JjLGIuYmxlbmREc3QsYi5ibGVuZEVxdWF0aW9uQWxwaGEsYi5ibGVuZFNyY0FscGhhLGIuYmxlbmREc3RBbHBoYSxiLnByZW11bHRpcGxpZWRBbHBoYSk6ZygwKTtuLnNldEZ1bmMoYi5kZXB0aEZ1bmMpO24uc2V0VGVzdChiLmRlcHRoVGVzdCk7bi5zZXRNYXNrKGIuZGVwdGhXcml0ZSk7cS5zZXRNYXNrKGIuY29sb3JXcml0ZSk7bShiLnBvbHlnb25PZmZzZXQsYi5wb2x5Z29uT2Zmc2V0RmFjdG9yLGIucG9seWdvbk9mZnNldFVuaXRzKX0sc2V0RmxpcFNpZGVkOmgsc2V0Q3VsbEZhY2U6ayxzZXRMaW5lV2lkdGg6ZnVuY3Rpb24oYil7YiE9PUImJihiYSYmYS5saW5lV2lkdGgoYiksQj1iKX0sc2V0UG9seWdvbk9mZnNldDptLGdldFNjaXNzb3JUZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIEt9LHNldFNjaXNzb3JUZXN0OmZ1bmN0aW9uKGIpeyhLPWIpP2UoYS5TQ0lTU09SX1RFU1QpOmYoYS5TQ0lTU09SX1RFU1QpfSxhY3RpdmVUZXh0dXJlOnUsYmluZFRleHR1cmU6ZnVuY3Rpb24oYiwKYyl7bnVsbD09PVQmJnUoKTt2YXIgZD1RW1RdO3ZvaWQgMD09PWQmJihkPXt0eXBlOnZvaWQgMCx0ZXh0dXJlOnZvaWQgMH0sUVtUXT1kKTtpZihkLnR5cGUhPT1ifHxkLnRleHR1cmUhPT1jKWEuYmluZFRleHR1cmUoYixjfHxKW2JdKSxkLnR5cGU9YixkLnRleHR1cmU9Y30sY29tcHJlc3NlZFRleEltYWdlMkQ6ZnVuY3Rpb24oKXt0cnl7YS5jb21wcmVzc2VkVGV4SW1hZ2UyRC5hcHBseShhLGFyZ3VtZW50cyl9Y2F0Y2goYil7Y29uc29sZS5lcnJvcihiKX19LHRleEltYWdlMkQ6ZnVuY3Rpb24oKXt0cnl7YS50ZXhJbWFnZTJELmFwcGx5KGEsYXJndW1lbnRzKX1jYXRjaChiKXtjb25zb2xlLmVycm9yKGIpfX0sc2Npc3NvcjpmdW5jdGlvbihiKXshMT09PUkuZXF1YWxzKGIpJiYoYS5zY2lzc29yKGIueCxiLnksYi56LGIudyksSS5jb3B5KGIpKX0sdmlld3BvcnQ6ZnVuY3Rpb24oYil7ITE9PT1ILmVxdWFscyhiKSYmKGEudmlld3BvcnQoYi54LGIueSxiLnosYi53KSxILmNvcHkoYikpfSwKcmVzZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKykxPT09cFtiXSYmKGEuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGIpLHBbYl09MCk7dj17fTtUPUc9bnVsbDtRPXt9O0Q9bGE9dz1udWxsO3EucmVzZXQoKTtuLnJlc2V0KCk7ci5yZXNldCgpfX19ZnVuY3Rpb24gZ2coYSxiLGMpe2Z1bmN0aW9uIGQoYil7aWYoImhpZ2hwIj09PWIpe2lmKDA8YS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoYS5WRVJURVhfU0hBREVSLGEuSElHSF9GTE9BVCkucHJlY2lzaW9uJiYwPGEuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KGEuRlJBR01FTlRfU0hBREVSLGEuSElHSF9GTE9BVCkucHJlY2lzaW9uKXJldHVybiJoaWdocCI7Yj0ibWVkaXVtcCJ9cmV0dXJuIm1lZGl1bXAiPT09YiYmMDxhLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChhLlZFUlRFWF9TSEFERVIsYS5NRURJVU1fRkxPQVQpLnByZWNpc2lvbiYmMDxhLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChhLkZSQUdNRU5UX1NIQURFUiwKYS5NRURJVU1fRkxPQVQpLnByZWNpc2lvbj8ibWVkaXVtcCI6Imxvd3AifXZhciBlLGY9dm9pZCAwIT09Yy5wcmVjaXNpb24/Yy5wcmVjaXNpb246ImhpZ2hwIixnPWQoZik7ZyE9PWYmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IixmLCJub3Qgc3VwcG9ydGVkLCB1c2luZyIsZywiaW5zdGVhZC4iKSxmPWcpO2M9ITA9PT1jLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJiEhYi5nZXQoIkVYVF9mcmFnX2RlcHRoIik7dmFyIGc9YS5nZXRQYXJhbWV0ZXIoYS5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyksaD1hLmdldFBhcmFtZXRlcihhLk1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyksaz1hLmdldFBhcmFtZXRlcihhLk1BWF9URVhUVVJFX1NJWkUpLG09YS5nZXRQYXJhbWV0ZXIoYS5NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFKSx1PWEuZ2V0UGFyYW1ldGVyKGEuTUFYX1ZFUlRFWF9BVFRSSUJTKSxxPWEuZ2V0UGFyYW1ldGVyKGEuTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMpLApuPWEuZ2V0UGFyYW1ldGVyKGEuTUFYX1ZBUllJTkdfVkVDVE9SUykscj1hLmdldFBhcmFtZXRlcihhLk1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMpLGw9MDxoLHQ9ISFiLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKTtyZXR1cm57Z2V0TWF4QW5pc290cm9weTpmdW5jdGlvbigpe2lmKHZvaWQgMCE9PWUpcmV0dXJuIGU7dmFyIGM9Yi5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO3JldHVybiBlPW51bGwhPT1jP2EuZ2V0UGFyYW1ldGVyKGMuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTowfSxnZXRNYXhQcmVjaXNpb246ZCxwcmVjaXNpb246Zixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmMsbWF4VGV4dHVyZXM6ZyxtYXhWZXJ0ZXhUZXh0dXJlczpoLG1heFRleHR1cmVTaXplOmssbWF4Q3ViZW1hcFNpemU6bSxtYXhBdHRyaWJ1dGVzOnUsbWF4VmVydGV4VW5pZm9ybXM6cSxtYXhWYXJ5aW5nczpuLG1heEZyYWdtZW50VW5pZm9ybXM6cix2ZXJ0ZXhUZXh0dXJlczpsLApmbG9hdEZyYWdtZW50VGV4dHVyZXM6dCxmbG9hdFZlcnRleFRleHR1cmVzOmwmJnR9fWZ1bmN0aW9uIGhnKGEpe3ZhciBiPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24oYyl7aWYodm9pZCAwIT09YltjXSlyZXR1cm4gYltjXTt2YXIgZDtzd2l0Y2goYyl7Y2FzZSAiV0VCR0xfZGVwdGhfdGV4dHVyZSI6ZD1hLmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxhLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2RlcHRoX3RleHR1cmUiKXx8YS5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlIik7YnJlYWs7Y2FzZSAiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjpkPWEuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8YS5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8YS5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTsKYnJlYWs7Y2FzZSAiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiOmQ9YS5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fGEuZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8YS5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpO2JyZWFrO2Nhc2UgIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6ZD1hLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fGEuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7Y2FzZSAiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiOmQ9YS5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIik7YnJlYWs7ZGVmYXVsdDpkPWEuZ2V0RXh0ZW5zaW9uKGMpfW51bGw9PT1kJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrCmMrIiBleHRlbnNpb24gbm90IHN1cHBvcnRlZC4iKTtyZXR1cm4gYltjXT1kfX19ZnVuY3Rpb24gaWcoKXtmdW5jdGlvbiBhKCl7bS52YWx1ZSE9PWQmJihtLnZhbHVlPWQsbS5uZWVkc1VwZGF0ZT0wPGUpO2MubnVtUGxhbmVzPWU7Yy5udW1JbnRlcnNlY3Rpb249MH1mdW5jdGlvbiBiKGEsYixkLGUpe3ZhciBmPW51bGwhPT1hP2EubGVuZ3RoOjAsZz1udWxsO2lmKDAhPT1mKXtnPW0udmFsdWU7aWYoITAhPT1lfHxudWxsPT09Zyl7ZT1kKzQqZjtiPWIubWF0cml4V29ybGRJbnZlcnNlO2suZ2V0Tm9ybWFsTWF0cml4KGIpO2lmKG51bGw9PT1nfHxnLmxlbmd0aDxlKWc9bmV3IEZsb2F0MzJBcnJheShlKTtmb3IoZT0wO2UhPT1mOysrZSxkKz00KWguY29weShhW2VdKS5hcHBseU1hdHJpeDQoYixrKSxoLm5vcm1hbC50b0FycmF5KGcsZCksZ1tkKzNdPWguY29uc3RhbnR9bS52YWx1ZT1nO20ubmVlZHNVcGRhdGU9ITB9Yy5udW1QbGFuZXM9ZjtyZXR1cm4gZ312YXIgYz10aGlzLGQ9bnVsbCwKZT0wLGY9ITEsZz0hMSxoPW5ldyB3YSxrPW5ldyBLYSxtPXt2YWx1ZTpudWxsLG5lZWRzVXBkYXRlOiExfTt0aGlzLnVuaWZvcm09bTt0aGlzLm51bUludGVyc2VjdGlvbj10aGlzLm51bVBsYW5lcz0wO3RoaXMuaW5pdD1mdW5jdGlvbihhLGMsZyl7dmFyIGg9MCE9PWEubGVuZ3RofHxjfHwwIT09ZXx8ZjtmPWM7ZD1iKGEsZywwKTtlPWEubGVuZ3RoO3JldHVybiBofTt0aGlzLmJlZ2luU2hhZG93cz1mdW5jdGlvbigpe2c9ITA7YihudWxsKX07dGhpcy5lbmRTaGFkb3dzPWZ1bmN0aW9uKCl7Zz0hMTthKCl9O3RoaXMuc2V0U3RhdGU9ZnVuY3Rpb24oYyxoLGsscixsLHQpe2lmKCFmfHxudWxsPT09Y3x8MD09PWMubGVuZ3RofHxnJiYhaylnP2IobnVsbCk6YSgpO2Vsc2V7az1nPzA6ZTt2YXIgcD00KmsseD1sLmNsaXBwaW5nU3RhdGV8fG51bGw7bS52YWx1ZT14O3g9YihjLHIscCx0KTtmb3IoYz0wO2MhPT1wOysrYyl4W2NdPWRbY107bC5jbGlwcGluZ1N0YXRlPXg7dGhpcy5udW1JbnRlcnNlY3Rpb249Cmg/dGhpcy5udW1QbGFuZXM6MDt0aGlzLm51bVBsYW5lcys9a319fWZ1bmN0aW9uIFhkKGEpe2Z1bmN0aW9uIGIoKXtmYS5pbml0KCk7ZmEuc2Npc3NvcihRLmNvcHkoaGEpLm11bHRpcGx5U2NhbGFyKGthKSk7ZmEudmlld3BvcnQoWi5jb3B5KHpjKS5tdWx0aXBseVNjYWxhcihrYSkpO2ZhLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoSWEucixJYS5nLElhLmIsWCxFKX1mdW5jdGlvbiBjKCl7VD1NPW51bGw7YmE9IiI7Vz0tMTtmYS5yZXNldCgpfWZ1bmN0aW9uIGQoYSl7YS5wcmV2ZW50RGVmYXVsdCgpO2MoKTtiKCk7aWEuY2xlYXIoKTt3YS5jbGVhcigpfWZ1bmN0aW9uIGUoYSl7YT1hLnRhcmdldDthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGUpO2YoYSk7aWEucmVtb3ZlKGEpfWZ1bmN0aW9uIGYoYSl7dmFyIGI9aWEuZ2V0KGEpLnByb2dyYW07YS5wcm9ncmFtPXZvaWQgMDt2b2lkIDAhPT1iJiZ5YS5yZWxlYXNlUHJvZ3JhbShiKX1mdW5jdGlvbiBnKGEsYixjKXthLnJlbmRlcihmdW5jdGlvbihhKXtDLnJlbmRlckJ1ZmZlckltbWVkaWF0ZShhLApiLGMpfSl9ZnVuY3Rpb24gaChhLGIpe3JldHVybiBNYXRoLmFicyhiWzBdKS1NYXRoLmFicyhhWzBdKX1mdW5jdGlvbiBrKGEsYixjKXtpZihhLnZpc2libGUpe2lmKGEubGF5ZXJzLnRlc3QoYi5sYXllcnMpKWlmKGEuaXNMaWdodClhYS5wdXNoKGEpO2Vsc2UgaWYoYS5pc1Nwcml0ZSlhLmZydXN0dW1DdWxsZWQmJiFtYS5pbnRlcnNlY3RzU3ByaXRlKGEpfHxELnB1c2goYSk7ZWxzZSBpZihhLmlzTGVuc0ZsYXJlKUIucHVzaChhKTtlbHNlIGlmKGEuaXNJbW1lZGlhdGVSZW5kZXJPYmplY3QpYyYmUWEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGEubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChsZCksUi5wdXNoKGEsbnVsbCxhLm1hdGVyaWFsLFFhLnosbnVsbCk7ZWxzZSBpZihhLmlzTWVzaHx8YS5pc0xpbmV8fGEuaXNQb2ludHMpaWYoYS5pc1NraW5uZWRNZXNoJiZhLnNrZWxldG9uLnVwZGF0ZSgpLCFhLmZydXN0dW1DdWxsZWR8fG1hLmludGVyc2VjdHNPYmplY3QoYSkpe2MmJlFhLnNldEZyb21NYXRyaXhQb3NpdGlvbihhLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQobGQpOwp2YXIgZD13YS51cGRhdGUoYSksZT1hLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBmPWQuZ3JvdXBzLGc9MCxoPWYubGVuZ3RoO2c8aDtnKyspe3ZhciBtPWZbZ10sbj1lW20ubWF0ZXJpYWxJbmRleF07biYmbi52aXNpYmxlJiZSLnB1c2goYSxkLG4sUWEueixtKX1lbHNlIGUudmlzaWJsZSYmUi5wdXNoKGEsZCxlLFFhLnosbnVsbCl9YT1hLmNoaWxkcmVuO2c9MDtmb3IoaD1hLmxlbmd0aDtnPGg7ZysrKWsoYVtnXSxiLGMpfX1mdW5jdGlvbiBtKGEsYixjLGQpe2Zvcih2YXIgZT0wLGY9YS5sZW5ndGg7ZTxmO2UrKyl7dmFyIGc9YVtlXSxoPWcub2JqZWN0LGs9Zy5nZW9tZXRyeSxtPXZvaWQgMD09PWQ/Zy5tYXRlcmlhbDpkLGc9Zy5ncm91cDtoLm9uQmVmb3JlUmVuZGVyKEMsYixjLGssbSxnKTtpZihjLmlzQXJyYXlDYW1lcmEmJmMuZW5hYmxlZClmb3IodmFyIG49Yy5jYW1lcmFzLHE9MCxyPW4ubGVuZ3RoO3E8cjtxKyspe3ZhciBsPW5bcV0sdD1sLmJvdW5kczsKQy5zZXRWaWV3cG9ydCh0LngqTiprYSx0LnkqZGEqa2EsdC56Kk4qa2EsdC53KmRhKmthKTtDLnNldFNjaXNzb3IodC54Kk4qa2EsdC55KmRhKmthLHQueipOKmthLHQudypkYSprYSk7Qy5zZXRTY2lzc29yVGVzdCghMCk7dShoLGIsbCxrLG0sZyl9ZWxzZSB1KGgsYixjLGssbSxnKTtoLm9uQWZ0ZXJSZW5kZXIoQyxiLGMsayxtLGcpfX1mdW5jdGlvbiB1KGEsYixjLGQsZSxmKXthLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKGMubWF0cml4V29ybGRJbnZlcnNlLGEubWF0cml4V29ybGQpO2Eubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeChhLm1vZGVsVmlld01hdHJpeCk7YS5pc0ltbWVkaWF0ZVJlbmRlck9iamVjdD8oZmEuc2V0TWF0ZXJpYWwoZSksYj1uKGMsYi5mb2csZSxhKSxiYT0iIixnKGEsYixlKSk6Qy5yZW5kZXJCdWZmZXJEaXJlY3QoYyxiLmZvZyxkLGUsYSxmKX1mdW5jdGlvbiBxKGEsYixjKXt2YXIgZD1pYS5nZXQoYSk7Yz15YS5nZXRQYXJhbWV0ZXJzKGEsCmVhLGIsUGEubnVtUGxhbmVzLFBhLm51bUludGVyc2VjdGlvbixjKTt2YXIgZz15YS5nZXRQcm9ncmFtQ29kZShhLGMpLGg9ZC5wcm9ncmFtLGs9ITA7aWYodm9pZCAwPT09aClhLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGUpO2Vsc2UgaWYoaC5jb2RlIT09ZylmKGEpO2Vsc2V7aWYodm9pZCAwIT09Yy5zaGFkZXJJRClyZXR1cm47az0hMX1rJiYoYy5zaGFkZXJJRD8oaD1hYltjLnNoYWRlcklEXSxkLl9fd2ViZ2xTaGFkZXI9e25hbWU6YS50eXBlLHVuaWZvcm1zOkhhLmNsb25lKGgudW5pZm9ybXMpLHZlcnRleFNoYWRlcjpoLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpoLmZyYWdtZW50U2hhZGVyfSk6ZC5fX3dlYmdsU2hhZGVyPXtuYW1lOmEudHlwZSx1bmlmb3JtczphLnVuaWZvcm1zLHZlcnRleFNoYWRlcjphLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjphLmZyYWdtZW50U2hhZGVyfSxhLl9fd2ViZ2xTaGFkZXI9ZC5fX3dlYmdsU2hhZGVyLGg9eWEuYWNxdWlyZVByb2dyYW0oYSwKYyxnKSxkLnByb2dyYW09aCxhLnByb2dyYW09aCk7Yz1oLmdldEF0dHJpYnV0ZXMoKTtpZihhLm1vcnBoVGFyZ2V0cylmb3IoZz1hLm51bVN1cHBvcnRlZE1vcnBoVGFyZ2V0cz0wO2c8Qy5tYXhNb3JwaFRhcmdldHM7ZysrKTA8PWNbIm1vcnBoVGFyZ2V0IitnXSYmYS5udW1TdXBwb3J0ZWRNb3JwaFRhcmdldHMrKztpZihhLm1vcnBoTm9ybWFscylmb3IoZz1hLm51bVN1cHBvcnRlZE1vcnBoTm9ybWFscz0wO2c8Qy5tYXhNb3JwaE5vcm1hbHM7ZysrKTA8PWNbIm1vcnBoTm9ybWFsIitnXSYmYS5udW1TdXBwb3J0ZWRNb3JwaE5vcm1hbHMrKztjPWQuX193ZWJnbFNoYWRlci51bmlmb3JtcztpZighYS5pc1NoYWRlck1hdGVyaWFsJiYhYS5pc1Jhd1NoYWRlck1hdGVyaWFsfHwhMD09PWEuY2xpcHBpbmcpZC5udW1DbGlwcGluZ1BsYW5lcz1QYS5udW1QbGFuZXMsZC5udW1JbnRlcnNlY3Rpb249UGEubnVtSW50ZXJzZWN0aW9uLGMuY2xpcHBpbmdQbGFuZXM9UGEudW5pZm9ybTtkLmZvZz0KYjtkLmxpZ2h0c0hhc2g9ZWEuaGFzaDthLmxpZ2h0cyYmKGMuYW1iaWVudExpZ2h0Q29sb3IudmFsdWU9ZWEuYW1iaWVudCxjLmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPWVhLmRpcmVjdGlvbmFsLGMuc3BvdExpZ2h0cy52YWx1ZT1lYS5zcG90LGMucmVjdEFyZWFMaWdodHMudmFsdWU9ZWEucmVjdEFyZWEsYy5wb2ludExpZ2h0cy52YWx1ZT1lYS5wb2ludCxjLmhlbWlzcGhlcmVMaWdodHMudmFsdWU9ZWEuaGVtaSxjLmRpcmVjdGlvbmFsU2hhZG93TWFwLnZhbHVlPWVhLmRpcmVjdGlvbmFsU2hhZG93TWFwLGMuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWU9ZWEuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsYy5zcG90U2hhZG93TWFwLnZhbHVlPWVhLnNwb3RTaGFkb3dNYXAsYy5zcG90U2hhZG93TWF0cml4LnZhbHVlPWVhLnNwb3RTaGFkb3dNYXRyaXgsYy5wb2ludFNoYWRvd01hcC52YWx1ZT1lYS5wb2ludFNoYWRvd01hcCxjLnBvaW50U2hhZG93TWF0cml4LnZhbHVlPWVhLnBvaW50U2hhZG93TWF0cml4KTsKYT1kLnByb2dyYW0uZ2V0VW5pZm9ybXMoKTthPWZiLnNlcVdpdGhWYWx1ZShhLnNlcSxjKTtkLnVuaWZvcm1zTGlzdD1hfWZ1bmN0aW9uIG4oYSxiLGMsZCl7VT0wO3ZhciBlPWlhLmdldChjKTtrZCYmKFdkfHxhIT09VCkmJlBhLnNldFN0YXRlKGMuY2xpcHBpbmdQbGFuZXMsYy5jbGlwSW50ZXJzZWN0aW9uLGMuY2xpcFNoYWRvd3MsYSxlLGE9PT1UJiZjLmlkPT09Vyk7ITE9PT1jLm5lZWRzVXBkYXRlJiYodm9pZCAwPT09ZS5wcm9ncmFtP2MubmVlZHNVcGRhdGU9ITA6Yy5mb2cmJmUuZm9nIT09Yj9jLm5lZWRzVXBkYXRlPSEwOmMubGlnaHRzJiZlLmxpZ2h0c0hhc2ghPT1lYS5oYXNoP2MubmVlZHNVcGRhdGU9ITA6dm9pZCAwPT09ZS5udW1DbGlwcGluZ1BsYW5lc3x8ZS5udW1DbGlwcGluZ1BsYW5lcz09PVBhLm51bVBsYW5lcyYmZS5udW1JbnRlcnNlY3Rpb249PT1QYS5udW1JbnRlcnNlY3Rpb258fChjLm5lZWRzVXBkYXRlPSEwKSk7Yy5uZWVkc1VwZGF0ZSYmKHEoYyxiLGQpLApjLm5lZWRzVXBkYXRlPSExKTt2YXIgZj0hMSxnPSExLGg9ITEsaz1lLnByb2dyYW0sbT1rLmdldFVuaWZvcm1zKCksbj1lLl9fd2ViZ2xTaGFkZXIudW5pZm9ybXM7ay5pZCE9PU0mJihBLnVzZVByb2dyYW0oay5wcm9ncmFtKSxNPWsuaWQsaD1nPWY9ITApO2MuaWQhPT1XJiYoVz1jLmlkLGc9ITApO2lmKGZ8fGEhPT1UKXttLnNldFZhbHVlKEEsInByb2plY3Rpb25NYXRyaXgiLGEucHJvamVjdGlvbk1hdHJpeCk7bmEubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmbS5zZXRWYWx1ZShBLCJsb2dEZXB0aEJ1ZkZDIiwyLyhNYXRoLmxvZyhhLmZhcisxKS9NYXRoLkxOMikpO2EhPT1UJiYoVD1hLGg9Zz0hMCk7aWYoYy5pc1NoYWRlck1hdGVyaWFsfHxjLmlzTWVzaFBob25nTWF0ZXJpYWx8fGMuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8Yy5lbnZNYXApZj1tLm1hcC5jYW1lcmFQb3NpdGlvbix2b2lkIDAhPT1mJiZmLnNldFZhbHVlKEEsUWEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGEubWF0cml4V29ybGQpKTsKKGMuaXNNZXNoUGhvbmdNYXRlcmlhbHx8Yy5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fGMuaXNNZXNoQmFzaWNNYXRlcmlhbHx8Yy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxjLmlzU2hhZGVyTWF0ZXJpYWx8fGMuc2tpbm5pbmcpJiZtLnNldFZhbHVlKEEsInZpZXdNYXRyaXgiLGEubWF0cml4V29ybGRJbnZlcnNlKTttLnNldFZhbHVlKEEsInRvbmVNYXBwaW5nRXhwb3N1cmUiLEMudG9uZU1hcHBpbmdFeHBvc3VyZSk7bS5zZXRWYWx1ZShBLCJ0b25lTWFwcGluZ1doaXRlUG9pbnQiLEMudG9uZU1hcHBpbmdXaGl0ZVBvaW50KX1pZihjLnNraW5uaW5nJiYobS5zZXRPcHRpb25hbChBLGQsImJpbmRNYXRyaXgiKSxtLnNldE9wdGlvbmFsKEEsZCwiYmluZE1hdHJpeEludmVyc2UiKSxhPWQuc2tlbGV0b24pKWlmKGY9YS5ib25lcyxuYS5mbG9hdFZlcnRleFRleHR1cmVzKXtpZih2b2lkIDA9PT1hLmJvbmVUZXh0dXJlKXt2YXIgZj1NYXRoLnNxcnQoNCpmLmxlbmd0aCksZj1ZLm5leHRQb3dlck9mVHdvKE1hdGguY2VpbChmKSksCmY9TWF0aC5tYXgoZiw0KSx1PW5ldyBGbG9hdDMyQXJyYXkoZipmKjQpO3Uuc2V0KGEuYm9uZU1hdHJpY2VzKTt2YXIgdD1uZXcgZWIodSxmLGYsMTAyMywxMDE1KTthLmJvbmVNYXRyaWNlcz11O2EuYm9uZVRleHR1cmU9dDthLmJvbmVUZXh0dXJlU2l6ZT1mfW0uc2V0VmFsdWUoQSwiYm9uZVRleHR1cmUiLGEuYm9uZVRleHR1cmUpO20uc2V0VmFsdWUoQSwiYm9uZVRleHR1cmVTaXplIixhLmJvbmVUZXh0dXJlU2l6ZSl9ZWxzZSBtLnNldE9wdGlvbmFsKEEsYSwiYm9uZU1hdHJpY2VzIik7aWYoZyl7Yy5saWdodHMmJihnPWgsbi5hbWJpZW50TGlnaHRDb2xvci5uZWVkc1VwZGF0ZT1nLG4uZGlyZWN0aW9uYWxMaWdodHMubmVlZHNVcGRhdGU9ZyxuLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPWcsbi5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPWcsbi5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1nLG4uaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1nKTtiJiZjLmZvZyYmKG4uZm9nQ29sb3IudmFsdWU9CmIuY29sb3IsYi5pc0ZvZz8obi5mb2dOZWFyLnZhbHVlPWIubmVhcixuLmZvZ0Zhci52YWx1ZT1iLmZhcik6Yi5pc0ZvZ0V4cDImJihuLmZvZ0RlbnNpdHkudmFsdWU9Yi5kZW5zaXR5KSk7aWYoYy5pc01lc2hCYXNpY01hdGVyaWFsfHxjLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8Yy5pc01lc2hQaG9uZ01hdGVyaWFsfHxjLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fGMuaXNNZXNoTm9ybWFsTWF0ZXJpYWx8fGMuaXNNZXNoRGVwdGhNYXRlcmlhbCl7bi5vcGFjaXR5LnZhbHVlPWMub3BhY2l0eTtuLmRpZmZ1c2UudmFsdWU9Yy5jb2xvcjtjLmVtaXNzaXZlJiZuLmVtaXNzaXZlLnZhbHVlLmNvcHkoYy5lbWlzc2l2ZSkubXVsdGlwbHlTY2FsYXIoYy5lbWlzc2l2ZUludGVuc2l0eSk7bi5tYXAudmFsdWU9Yy5tYXA7bi5zcGVjdWxhck1hcC52YWx1ZT1jLnNwZWN1bGFyTWFwO24uYWxwaGFNYXAudmFsdWU9Yy5hbHBoYU1hcDtjLmxpZ2h0TWFwJiYobi5saWdodE1hcC52YWx1ZT1jLmxpZ2h0TWFwLApuLmxpZ2h0TWFwSW50ZW5zaXR5LnZhbHVlPWMubGlnaHRNYXBJbnRlbnNpdHkpO2MuYW9NYXAmJihuLmFvTWFwLnZhbHVlPWMuYW9NYXAsbi5hb01hcEludGVuc2l0eS52YWx1ZT1jLmFvTWFwSW50ZW5zaXR5KTt2YXIgcDtjLm1hcD9wPWMubWFwOmMuc3BlY3VsYXJNYXA/cD1jLnNwZWN1bGFyTWFwOmMuZGlzcGxhY2VtZW50TWFwP3A9Yy5kaXNwbGFjZW1lbnRNYXA6Yy5ub3JtYWxNYXA/cD1jLm5vcm1hbE1hcDpjLmJ1bXBNYXA/cD1jLmJ1bXBNYXA6Yy5yb3VnaG5lc3NNYXA/cD1jLnJvdWdobmVzc01hcDpjLm1ldGFsbmVzc01hcD9wPWMubWV0YWxuZXNzTWFwOmMuYWxwaGFNYXA/cD1jLmFscGhhTWFwOmMuZW1pc3NpdmVNYXAmJihwPWMuZW1pc3NpdmVNYXApO3ZvaWQgMCE9PXAmJihwLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihwPXAudGV4dHVyZSksYj1wLm9mZnNldCxwPXAucmVwZWF0LG4ub2Zmc2V0UmVwZWF0LnZhbHVlLnNldChiLngsYi55LHAueCxwLnkpKTtuLmVudk1hcC52YWx1ZT0KYy5lbnZNYXA7bi5mbGlwRW52TWFwLnZhbHVlPWMuZW52TWFwJiZjLmVudk1hcC5pc0N1YmVUZXh0dXJlPy0xOjE7bi5yZWZsZWN0aXZpdHkudmFsdWU9Yy5yZWZsZWN0aXZpdHk7bi5yZWZyYWN0aW9uUmF0aW8udmFsdWU9Yy5yZWZyYWN0aW9uUmF0aW99Yy5pc0xpbmVCYXNpY01hdGVyaWFsPyhuLmRpZmZ1c2UudmFsdWU9Yy5jb2xvcixuLm9wYWNpdHkudmFsdWU9Yy5vcGFjaXR5KTpjLmlzTGluZURhc2hlZE1hdGVyaWFsPyhuLmRpZmZ1c2UudmFsdWU9Yy5jb2xvcixuLm9wYWNpdHkudmFsdWU9Yy5vcGFjaXR5LG4uZGFzaFNpemUudmFsdWU9Yy5kYXNoU2l6ZSxuLnRvdGFsU2l6ZS52YWx1ZT1jLmRhc2hTaXplK2MuZ2FwU2l6ZSxuLnNjYWxlLnZhbHVlPWMuc2NhbGUpOmMuaXNQb2ludHNNYXRlcmlhbD8obi5kaWZmdXNlLnZhbHVlPWMuY29sb3Isbi5vcGFjaXR5LnZhbHVlPWMub3BhY2l0eSxuLnNpemUudmFsdWU9Yy5zaXplKmthLG4uc2NhbGUudmFsdWU9LjUqZGEsbi5tYXAudmFsdWU9CmMubWFwLG51bGwhPT1jLm1hcCYmKHA9Yy5tYXAub2Zmc2V0LGM9Yy5tYXAucmVwZWF0LG4ub2Zmc2V0UmVwZWF0LnZhbHVlLnNldChwLngscC55LGMueCxjLnkpKSk6Yy5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/Yy5lbWlzc2l2ZU1hcCYmKG4uZW1pc3NpdmVNYXAudmFsdWU9Yy5lbWlzc2l2ZU1hcCk6Yy5pc01lc2hUb29uTWF0ZXJpYWw/KHIobixjKSxjLmdyYWRpZW50TWFwJiYobi5ncmFkaWVudE1hcC52YWx1ZT1jLmdyYWRpZW50TWFwKSk6Yy5pc01lc2hQaG9uZ01hdGVyaWFsP3IobixjKTpjLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/KG4uY2xlYXJDb2F0LnZhbHVlPWMuY2xlYXJDb2F0LG4uY2xlYXJDb2F0Um91Z2huZXNzLnZhbHVlPWMuY2xlYXJDb2F0Um91Z2huZXNzLGwobixjKSk6Yy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2wobixjKTpjLmlzTWVzaERlcHRoTWF0ZXJpYWw/Yy5kaXNwbGFjZW1lbnRNYXAmJihuLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1jLmRpc3BsYWNlbWVudE1hcCwKbi5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1jLmRpc3BsYWNlbWVudFNjYWxlLG4uZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1jLmRpc3BsYWNlbWVudEJpYXMpOmMuaXNNZXNoTm9ybWFsTWF0ZXJpYWwmJihjLmJ1bXBNYXAmJihuLmJ1bXBNYXAudmFsdWU9Yy5idW1wTWFwLG4uYnVtcFNjYWxlLnZhbHVlPWMuYnVtcFNjYWxlKSxjLm5vcm1hbE1hcCYmKG4ubm9ybWFsTWFwLnZhbHVlPWMubm9ybWFsTWFwLG4ubm9ybWFsU2NhbGUudmFsdWUuY29weShjLm5vcm1hbFNjYWxlKSksYy5kaXNwbGFjZW1lbnRNYXAmJihuLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1jLmRpc3BsYWNlbWVudE1hcCxuLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWMuZGlzcGxhY2VtZW50U2NhbGUsbi5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWMuZGlzcGxhY2VtZW50QmlhcykpO3ZvaWQgMCE9PW4ubHRjTWF0JiYobi5sdGNNYXQudmFsdWU9Vi5MVENfTUFUX1RFWFRVUkUpO3ZvaWQgMCE9PW4ubHRjTWFnJiYobi5sdGNNYWcudmFsdWU9ClYuTFRDX01BR19URVhUVVJFKTtmYi51cGxvYWQoQSxlLnVuaWZvcm1zTGlzdCxuLEMpfW0uc2V0VmFsdWUoQSwibW9kZWxWaWV3TWF0cml4IixkLm1vZGVsVmlld01hdHJpeCk7bS5zZXRWYWx1ZShBLCJub3JtYWxNYXRyaXgiLGQubm9ybWFsTWF0cml4KTttLnNldFZhbHVlKEEsIm1vZGVsTWF0cml4IixkLm1hdHJpeFdvcmxkKTtyZXR1cm4ga31mdW5jdGlvbiByKGEsYil7YS5zcGVjdWxhci52YWx1ZT1iLnNwZWN1bGFyO2Euc2hpbmluZXNzLnZhbHVlPU1hdGgubWF4KGIuc2hpbmluZXNzLDFFLTQpO2IuZW1pc3NpdmVNYXAmJihhLmVtaXNzaXZlTWFwLnZhbHVlPWIuZW1pc3NpdmVNYXApO2IuYnVtcE1hcCYmKGEuYnVtcE1hcC52YWx1ZT1iLmJ1bXBNYXAsYS5idW1wU2NhbGUudmFsdWU9Yi5idW1wU2NhbGUpO2Iubm9ybWFsTWFwJiYoYS5ub3JtYWxNYXAudmFsdWU9Yi5ub3JtYWxNYXAsYS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGIubm9ybWFsU2NhbGUpKTtiLmRpc3BsYWNlbWVudE1hcCYmCihhLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1iLmRpc3BsYWNlbWVudE1hcCxhLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWIuZGlzcGxhY2VtZW50U2NhbGUsYS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWIuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gbChhLGIpe2Eucm91Z2huZXNzLnZhbHVlPWIucm91Z2huZXNzO2EubWV0YWxuZXNzLnZhbHVlPWIubWV0YWxuZXNzO2Iucm91Z2huZXNzTWFwJiYoYS5yb3VnaG5lc3NNYXAudmFsdWU9Yi5yb3VnaG5lc3NNYXApO2IubWV0YWxuZXNzTWFwJiYoYS5tZXRhbG5lc3NNYXAudmFsdWU9Yi5tZXRhbG5lc3NNYXApO2IuZW1pc3NpdmVNYXAmJihhLmVtaXNzaXZlTWFwLnZhbHVlPWIuZW1pc3NpdmVNYXApO2IuYnVtcE1hcCYmKGEuYnVtcE1hcC52YWx1ZT1iLmJ1bXBNYXAsYS5idW1wU2NhbGUudmFsdWU9Yi5idW1wU2NhbGUpO2Iubm9ybWFsTWFwJiYoYS5ub3JtYWxNYXAudmFsdWU9Yi5ub3JtYWxNYXAsYS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGIubm9ybWFsU2NhbGUpKTsKYi5kaXNwbGFjZW1lbnRNYXAmJihhLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1iLmRpc3BsYWNlbWVudE1hcCxhLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWIuZGlzcGxhY2VtZW50U2NhbGUsYS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWIuZGlzcGxhY2VtZW50Qmlhcyk7Yi5lbnZNYXAmJihhLmVudk1hcEludGVuc2l0eS52YWx1ZT1iLmVudk1hcEludGVuc2l0eSl9ZnVuY3Rpb24gdChhLGIpe3ZhciBjLGQsZSxmLGc9MCxoPTAsaz0wLG0sbix1LHE9Yi5tYXRyaXhXb3JsZEludmVyc2UsbD0wLHI9MCx0PTAsej0wLHA9MDtjPTA7Zm9yKGQ9YS5sZW5ndGg7YzxkO2MrKylpZihlPWFbY10sZj1lLmNvbG9yLG09ZS5pbnRlbnNpdHksbj1lLmRpc3RhbmNlLHU9ZS5zaGFkb3cmJmUuc2hhZG93Lm1hcD9lLnNoYWRvdy5tYXAudGV4dHVyZTpudWxsLGUuaXNBbWJpZW50TGlnaHQpZys9Zi5yKm0saCs9Zi5nKm0says9Zi5iKm07ZWxzZSBpZihlLmlzRGlyZWN0aW9uYWxMaWdodCl7dmFyIHY9CkJhLmdldChlKTt2LmNvbG9yLmNvcHkoZS5jb2xvcikubXVsdGlwbHlTY2FsYXIoZS5pbnRlbnNpdHkpO3YuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihlLm1hdHJpeFdvcmxkKTtRYS5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS50YXJnZXQubWF0cml4V29ybGQpO3YuZGlyZWN0aW9uLnN1YihRYSk7di5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHEpO2lmKHYuc2hhZG93PWUuY2FzdFNoYWRvdylmPWUuc2hhZG93LHYuc2hhZG93Qmlhcz1mLmJpYXMsdi5zaGFkb3dSYWRpdXM9Zi5yYWRpdXMsdi5zaGFkb3dNYXBTaXplPWYubWFwU2l6ZTtlYS5kaXJlY3Rpb25hbFNoYWRvd01hcFtsXT11O2VhLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4W2xdPWUuc2hhZG93Lm1hdHJpeDtlYS5kaXJlY3Rpb25hbFtsXT12O2wrK31lbHNlIGlmKGUuaXNTcG90TGlnaHQpe3Y9QmEuZ2V0KGUpO3YucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUubWF0cml4V29ybGQpO3YucG9zaXRpb24uYXBwbHlNYXRyaXg0KHEpOwp2LmNvbG9yLmNvcHkoZikubXVsdGlwbHlTY2FsYXIobSk7di5kaXN0YW5jZT1uO3YuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihlLm1hdHJpeFdvcmxkKTtRYS5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS50YXJnZXQubWF0cml4V29ybGQpO3YuZGlyZWN0aW9uLnN1YihRYSk7di5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHEpO3YuY29uZUNvcz1NYXRoLmNvcyhlLmFuZ2xlKTt2LnBlbnVtYnJhQ29zPU1hdGguY29zKGUuYW5nbGUqKDEtZS5wZW51bWJyYSkpO3YuZGVjYXk9MD09PWUuZGlzdGFuY2U/MDplLmRlY2F5O2lmKHYuc2hhZG93PWUuY2FzdFNoYWRvdylmPWUuc2hhZG93LHYuc2hhZG93Qmlhcz1mLmJpYXMsdi5zaGFkb3dSYWRpdXM9Zi5yYWRpdXMsdi5zaGFkb3dNYXBTaXplPWYubWFwU2l6ZTtlYS5zcG90U2hhZG93TWFwW3RdPXU7ZWEuc3BvdFNoYWRvd01hdHJpeFt0XT1lLnNoYWRvdy5tYXRyaXg7ZWEuc3BvdFt0XT12O3QrK31lbHNlIGlmKGUuaXNSZWN0QXJlYUxpZ2h0KXY9CkJhLmdldChlKSx2LmNvbG9yLmNvcHkoZikubXVsdGlwbHlTY2FsYXIobS8oZS53aWR0aCplLmhlaWdodCkpLHYucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUubWF0cml4V29ybGQpLHYucG9zaXRpb24uYXBwbHlNYXRyaXg0KHEpLHJhLmlkZW50aXR5KCkscWEuY29weShlLm1hdHJpeFdvcmxkKSxxYS5wcmVtdWx0aXBseShxKSxyYS5leHRyYWN0Um90YXRpb24ocWEpLHYuaGFsZldpZHRoLnNldCguNSplLndpZHRoLDAsMCksdi5oYWxmSGVpZ2h0LnNldCgwLC41KmUuaGVpZ2h0LDApLHYuaGFsZldpZHRoLmFwcGx5TWF0cml4NChyYSksdi5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChyYSksZWEucmVjdEFyZWFbel09dix6Kys7ZWxzZSBpZihlLmlzUG9pbnRMaWdodCl7dj1CYS5nZXQoZSk7di5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCk7di5wb3NpdGlvbi5hcHBseU1hdHJpeDQocSk7di5jb2xvci5jb3B5KGUuY29sb3IpLm11bHRpcGx5U2NhbGFyKGUuaW50ZW5zaXR5KTsKdi5kaXN0YW5jZT1lLmRpc3RhbmNlO3YuZGVjYXk9MD09PWUuZGlzdGFuY2U/MDplLmRlY2F5O2lmKHYuc2hhZG93PWUuY2FzdFNoYWRvdylmPWUuc2hhZG93LHYuc2hhZG93Qmlhcz1mLmJpYXMsdi5zaGFkb3dSYWRpdXM9Zi5yYWRpdXMsdi5zaGFkb3dNYXBTaXplPWYubWFwU2l6ZTtlYS5wb2ludFNoYWRvd01hcFtyXT11O2VhLnBvaW50U2hhZG93TWF0cml4W3JdPWUuc2hhZG93Lm1hdHJpeDtlYS5wb2ludFtyXT12O3IrK31lbHNlIGUuaXNIZW1pc3BoZXJlTGlnaHQmJih2PUJhLmdldChlKSx2LmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCksdi5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHEpLHYuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLHYuc2t5Q29sb3IuY29weShlLmNvbG9yKS5tdWx0aXBseVNjYWxhcihtKSx2Lmdyb3VuZENvbG9yLmNvcHkoZS5ncm91bmRDb2xvcikubXVsdGlwbHlTY2FsYXIobSksZWEuaGVtaVtwXT12LHArKyk7CmVhLmFtYmllbnRbMF09ZztlYS5hbWJpZW50WzFdPWg7ZWEuYW1iaWVudFsyXT1rO2VhLmRpcmVjdGlvbmFsLmxlbmd0aD1sO2VhLnNwb3QubGVuZ3RoPXQ7ZWEucmVjdEFyZWEubGVuZ3RoPXo7ZWEucG9pbnQubGVuZ3RoPXI7ZWEuaGVtaS5sZW5ndGg9cDtlYS5oYXNoPWwrIiwiK3IrIiwiK3QrIiwiK3orIiwiK3ArIiwiK2VhLnNoYWRvd3MubGVuZ3RofWZ1bmN0aW9uIHkoYSl7dmFyIGI7aWYoMUUzPT09YSlyZXR1cm4gQS5SRVBFQVQ7aWYoMTAwMT09PWEpcmV0dXJuIEEuQ0xBTVBfVE9fRURHRTtpZigxMDAyPT09YSlyZXR1cm4gQS5NSVJST1JFRF9SRVBFQVQ7aWYoMTAwMz09PWEpcmV0dXJuIEEuTkVBUkVTVDtpZigxMDA0PT09YSlyZXR1cm4gQS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUO2lmKDEwMDU9PT1hKXJldHVybiBBLk5FQVJFU1RfTUlQTUFQX0xJTkVBUjtpZigxMDA2PT09YSlyZXR1cm4gQS5MSU5FQVI7aWYoMTAwNz09PWEpcmV0dXJuIEEuTElORUFSX01JUE1BUF9ORUFSRVNUOwppZigxMDA4PT09YSlyZXR1cm4gQS5MSU5FQVJfTUlQTUFQX0xJTkVBUjtpZigxMDA5PT09YSlyZXR1cm4gQS5VTlNJR05FRF9CWVRFO2lmKDEwMTc9PT1hKXJldHVybiBBLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ7aWYoMTAxOD09PWEpcmV0dXJuIEEuVU5TSUdORURfU0hPUlRfNV81XzVfMTtpZigxMDE5PT09YSlyZXR1cm4gQS5VTlNJR05FRF9TSE9SVF81XzZfNTtpZigxMDEwPT09YSlyZXR1cm4gQS5CWVRFO2lmKDEwMTE9PT1hKXJldHVybiBBLlNIT1JUO2lmKDEwMTI9PT1hKXJldHVybiBBLlVOU0lHTkVEX1NIT1JUO2lmKDEwMTM9PT1hKXJldHVybiBBLklOVDtpZigxMDE0PT09YSlyZXR1cm4gQS5VTlNJR05FRF9JTlQ7aWYoMTAxNT09PWEpcmV0dXJuIEEuRkxPQVQ7aWYoMTAxNj09PWEmJihiPXBhLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLG51bGwhPT1iKSlyZXR1cm4gYi5IQUxGX0ZMT0FUX09FUztpZigxMDIxPT09YSlyZXR1cm4gQS5BTFBIQTtpZigxMDIyPT09CmEpcmV0dXJuIEEuUkdCO2lmKDEwMjM9PT1hKXJldHVybiBBLlJHQkE7aWYoMTAyND09PWEpcmV0dXJuIEEuTFVNSU5BTkNFO2lmKDEwMjU9PT1hKXJldHVybiBBLkxVTUlOQU5DRV9BTFBIQTtpZigxMDI2PT09YSlyZXR1cm4gQS5ERVBUSF9DT01QT05FTlQ7aWYoMTAyNz09PWEpcmV0dXJuIEEuREVQVEhfU1RFTkNJTDtpZigxMDA9PT1hKXJldHVybiBBLkZVTkNfQUREO2lmKDEwMT09PWEpcmV0dXJuIEEuRlVOQ19TVUJUUkFDVDtpZigxMDI9PT1hKXJldHVybiBBLkZVTkNfUkVWRVJTRV9TVUJUUkFDVDtpZigyMDA9PT1hKXJldHVybiBBLlpFUk87aWYoMjAxPT09YSlyZXR1cm4gQS5PTkU7aWYoMjAyPT09YSlyZXR1cm4gQS5TUkNfQ09MT1I7aWYoMjAzPT09YSlyZXR1cm4gQS5PTkVfTUlOVVNfU1JDX0NPTE9SO2lmKDIwND09PWEpcmV0dXJuIEEuU1JDX0FMUEhBO2lmKDIwNT09PWEpcmV0dXJuIEEuT05FX01JTlVTX1NSQ19BTFBIQTtpZigyMDY9PT1hKXJldHVybiBBLkRTVF9BTFBIQTsKaWYoMjA3PT09YSlyZXR1cm4gQS5PTkVfTUlOVVNfRFNUX0FMUEhBO2lmKDIwOD09PWEpcmV0dXJuIEEuRFNUX0NPTE9SO2lmKDIwOT09PWEpcmV0dXJuIEEuT05FX01JTlVTX0RTVF9DT0xPUjtpZigyMTA9PT1hKXJldHVybiBBLlNSQ19BTFBIQV9TQVRVUkFURTtpZigyMDAxPT09YXx8MjAwMj09PWF8fDIwMDM9PT1hfHwyMDA0PT09YSlpZihiPXBhLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKSxudWxsIT09Yil7aWYoMjAwMT09PWEpcmV0dXJuIGIuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZigyMDAyPT09YSlyZXR1cm4gYi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDtpZigyMDAzPT09YSlyZXR1cm4gYi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtpZigyMDA0PT09YSlyZXR1cm4gYi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1pZigyMTAwPT09YXx8MjEwMT09PWF8fDIxMDI9PT1hfHwyMTAzPT09YSlpZihiPXBhLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIiksCm51bGwhPT1iKXtpZigyMTAwPT09YSlyZXR1cm4gYi5DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HO2lmKDIxMDE9PT1hKXJldHVybiBiLkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc7aWYoMjEwMj09PWEpcmV0dXJuIGIuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYoMjEwMz09PWEpcmV0dXJuIGIuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUd9aWYoMjE1MT09PWEmJihiPXBhLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxudWxsIT09YikpcmV0dXJuIGIuQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDtpZigxMDM9PT1hfHwxMDQ9PT1hKWlmKGI9cGEuZ2V0KCJFWFRfYmxlbmRfbWlubWF4IiksbnVsbCE9PWIpe2lmKDEwMz09PWEpcmV0dXJuIGIuTUlOX0VYVDtpZigxMDQ9PT1hKXJldHVybiBiLk1BWF9FWFR9cmV0dXJuIDEwMjA9PT1hJiYoYj1wYS5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxudWxsIT09Yik/CmIuVU5TSUdORURfSU5UXzI0XzhfV0VCR0w6MH1jb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlciIsIjg1Iik7YT1hfHx7fTt2YXIgeD12b2lkIDAhPT1hLmNhbnZhcz9hLmNhbnZhczpkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJjYW52YXMiKSx2PXZvaWQgMCE9PWEuY29udGV4dD9hLmNvbnRleHQ6bnVsbCxHPXZvaWQgMCE9PWEuYWxwaGE/YS5hbHBoYTohMSx3PXZvaWQgMCE9PWEuZGVwdGg/YS5kZXB0aDohMCxPPXZvaWQgMCE9PWEuc3RlbmNpbD9hLnN0ZW5jaWw6ITAsUz12b2lkIDAhPT1hLmFudGlhbGlhcz9hLmFudGlhbGlhczohMSxFPXZvaWQgMCE9PWEucHJlbXVsdGlwbGllZEFscGhhP2EucHJlbXVsdGlwbGllZEFscGhhOiEwLEY9dm9pZCAwIT09YS5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI/YS5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEsYWE9W10sUj1udWxsLGNhPW5ldyBGbG9hdDMyQXJyYXkoOCksRD1bXSwKQj1bXTt0aGlzLmRvbUVsZW1lbnQ9eDt0aGlzLmNvbnRleHQ9bnVsbDt0aGlzLnNvcnRPYmplY3RzPXRoaXMuYXV0b0NsZWFyU3RlbmNpbD10aGlzLmF1dG9DbGVhckRlcHRoPXRoaXMuYXV0b0NsZWFyQ29sb3I9dGhpcy5hdXRvQ2xlYXI9ITA7dGhpcy5jbGlwcGluZ1BsYW5lcz1bXTt0aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkPSExO3RoaXMuZ2FtbWFGYWN0b3I9Mjt0aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPXRoaXMuZ2FtbWFPdXRwdXQ9dGhpcy5nYW1tYUlucHV0PSExO3RoaXMudG9uZU1hcHBpbmdXaGl0ZVBvaW50PXRoaXMudG9uZU1hcHBpbmdFeHBvc3VyZT10aGlzLnRvbmVNYXBwaW5nPTE7dGhpcy5tYXhNb3JwaFRhcmdldHM9ODt0aGlzLm1heE1vcnBoTm9ybWFscz00O3ZhciBDPXRoaXMsTT1udWxsLFA9bnVsbCxLPW51bGwsVz0tMSxiYT0iIixUPW51bGwsUT1uZXcgZ2EsTD1udWxsLFo9bmV3IGdhLFU9MCxJYT1uZXcgSCgwKSxYPTAsTj14LndpZHRoLGRhPXguaGVpZ2h0LAprYT0xLGhhPW5ldyBnYSgwLDAsTixkYSksUGU9ITEsemM9bmV3IGdhKDAsMCxOLGRhKSxtYT1uZXcgamQsUGE9bmV3IGlnLGtkPSExLFdkPSExLGxkPW5ldyBKLFFhPW5ldyBwLHFhPW5ldyBKLHJhPW5ldyBKLGVhPXtoYXNoOiIiLGFtYmllbnQ6WzAsMCwwXSxkaXJlY3Rpb25hbDpbXSxkaXJlY3Rpb25hbFNoYWRvd01hcDpbXSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDpbXSxzcG90OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxwb2ludDpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdLHNoYWRvd3M6W119LHZhPXtnZW9tZXRyaWVzOjAsdGV4dHVyZXM6MH0sb2E9e2ZyYW1lOjAsY2FsbHM6MCx2ZXJ0aWNlczowLGZhY2VzOjAscG9pbnRzOjB9O3RoaXMuaW5mbz17cmVuZGVyOm9hLG1lbW9yeTp2YSxwcm9ncmFtczpudWxsfTt2YXIgQTt0cnl7Rz17YWxwaGE6RyxkZXB0aDp3LHN0ZW5jaWw6TywKYW50aWFsaWFzOlMscHJlbXVsdGlwbGllZEFscGhhOkUscHJlc2VydmVEcmF3aW5nQnVmZmVyOkZ9O0E9dnx8eC5nZXRDb250ZXh0KCJ3ZWJnbCIsRyl8fHguZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixHKTtpZihudWxsPT09QSl7aWYobnVsbCE9PXguZ2V0Q29udGV4dCgid2ViZ2wiKSl0aHJvdyJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLiI7dGhyb3ciRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4iO312b2lkIDA9PT1BLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCYmKEEuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJue3JhbmdlTWluOjEscmFuZ2VNYXg6MSxwcmVjaXNpb246MX19KTt4LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGQsITEpfWNhdGNoKGpnKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK2pnKX12YXIgcGE9bmV3IGhnKEEpOwpwYS5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKTtwYS5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iik7cGEuZ2V0KCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKTtwYS5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTtwYS5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik7cGEuZ2V0KCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTtwYS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKTtwYS5nZXQoIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKSYmKEkuTWF4SW5kZXg9NDI5NDk2NzI5Nik7dmFyIG5hPW5ldyBnZyhBLHBhLGEpLGZhPW5ldyBmZyhBLHBhLHkpLGlhPW5ldyBlZyxzYT1uZXcgZGcoQSxwYSxmYSxpYSxuYSx5LHZhKSxBYT1uZXcgTWYoQSksRGE9bmV3IFRmKEEsQWEsdmEpLHdhPW5ldyBWZihBLERhLG9hKSx5YT1uZXcgY2codGhpcyxuYSksQmE9bmV3IFVmLEdhPW5ldyBRZjt0aGlzLmluZm8ucHJvZ3JhbXM9eWEucHJvZ3JhbXM7dmFyIEthPW5ldyBTZihBLApwYSxvYSksTGE9bmV3IFJmKEEscGEsb2EpLEZhLHphLHRhLHVhO2IoKTt0aGlzLmNvbnRleHQ9QTt0aGlzLmNhcGFiaWxpdGllcz1uYTt0aGlzLmV4dGVuc2lvbnM9cGE7dGhpcy5wcm9wZXJ0aWVzPWlhO3RoaXMuc3RhdGU9ZmE7dmFyIEphPW5ldyBKZSh0aGlzLGVhLHdhLG5hKTt0aGlzLnNoYWRvd01hcD1KYTt2YXIgTWE9bmV3IEpmKHRoaXMsRCksT2E9bmV3IElmKHRoaXMsQik7dGhpcy5nZXRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIEF9O3RoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gQS5nZXRDb250ZXh0QXR0cmlidXRlcygpfTt0aGlzLmZvcmNlQ29udGV4dExvc3M9ZnVuY3Rpb24oKXt2YXIgYT1wYS5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO2EmJmEubG9zZUNvbnRleHQoKX07dGhpcy5nZXRNYXhBbmlzb3Ryb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG5hLmdldE1heEFuaXNvdHJvcHkoKX07dGhpcy5nZXRQcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gbmEucHJlY2lzaW9ufTsKdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIGthfTt0aGlzLnNldFBpeGVsUmF0aW89ZnVuY3Rpb24oYSl7dm9pZCAwIT09YSYmKGthPWEsdGhpcy5zZXRTaXplKHpjLnosemMudywhMSkpfTt0aGlzLmdldFNpemU9ZnVuY3Rpb24oKXtyZXR1cm57d2lkdGg6TixoZWlnaHQ6ZGF9fTt0aGlzLnNldFNpemU9ZnVuY3Rpb24oYSxiLGMpe049YTtkYT1iO3gud2lkdGg9YSprYTt4LmhlaWdodD1iKmthOyExIT09YyYmKHguc3R5bGUud2lkdGg9YSsicHgiLHguc3R5bGUuaGVpZ2h0PWIrInB4Iik7dGhpcy5zZXRWaWV3cG9ydCgwLDAsYSxiKX07dGhpcy5zZXRWaWV3cG9ydD1mdW5jdGlvbihhLGIsYyxkKXtmYS52aWV3cG9ydCh6Yy5zZXQoYSxiLGMsZCkpfTt0aGlzLnNldFNjaXNzb3I9ZnVuY3Rpb24oYSxiLGMsZCl7ZmEuc2Npc3NvcihoYS5zZXQoYSxiLGMsZCkpfTt0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKGEpe2ZhLnNldFNjaXNzb3JUZXN0KFBlPWEpfTt0aGlzLmdldENsZWFyQ29sb3I9CmZ1bmN0aW9uKCl7cmV0dXJuIElhfTt0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oYSxiKXtJYS5zZXQoYSk7WD12b2lkIDAhPT1iP2I6MTtmYS5idWZmZXJzLmNvbG9yLnNldENsZWFyKElhLnIsSWEuZyxJYS5iLFgsRSl9O3RoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBYfTt0aGlzLnNldENsZWFyQWxwaGE9ZnVuY3Rpb24oYSl7WD1hO2ZhLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoSWEucixJYS5nLElhLmIsWCxFKX07dGhpcy5jbGVhcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9MDtpZih2b2lkIDA9PT1hfHxhKWR8PUEuQ09MT1JfQlVGRkVSX0JJVDtpZih2b2lkIDA9PT1ifHxiKWR8PUEuREVQVEhfQlVGRkVSX0JJVDtpZih2b2lkIDA9PT1jfHxjKWR8PUEuU1RFTkNJTF9CVUZGRVJfQklUO0EuY2xlYXIoZCl9O3RoaXMuY2xlYXJDb2xvcj1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITAsITEsITEpfTt0aGlzLmNsZWFyRGVwdGg9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLAohMCwhMSl9O3RoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMSwhMCl9O3RoaXMuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24oYSxiLGMsZCl7dGhpcy5zZXRSZW5kZXJUYXJnZXQoYSk7dGhpcy5jbGVhcihiLGMsZCl9O3RoaXMucmVzZXRHTFN0YXRlPWM7dGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7eC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixkLCExKTtHYS5kaXNwb3NlKCl9O3RoaXMucmVuZGVyQnVmZmVySW1tZWRpYXRlPWZ1bmN0aW9uKGEsYixjKXtmYS5pbml0QXR0cmlidXRlcygpO3ZhciBkPWlhLmdldChhKTthLmhhc1Bvc2l0aW9ucyYmIWQucG9zaXRpb24mJihkLnBvc2l0aW9uPUEuY3JlYXRlQnVmZmVyKCkpO2EuaGFzTm9ybWFscyYmIWQubm9ybWFsJiYoZC5ub3JtYWw9QS5jcmVhdGVCdWZmZXIoKSk7YS5oYXNVdnMmJiFkLnV2JiYoZC51dj1BLmNyZWF0ZUJ1ZmZlcigpKTthLmhhc0NvbG9ycyYmIWQuY29sb3ImJihkLmNvbG9yPQpBLmNyZWF0ZUJ1ZmZlcigpKTtiPWIuZ2V0QXR0cmlidXRlcygpO2EuaGFzUG9zaXRpb25zJiYoQS5iaW5kQnVmZmVyKEEuQVJSQVlfQlVGRkVSLGQucG9zaXRpb24pLEEuYnVmZmVyRGF0YShBLkFSUkFZX0JVRkZFUixhLnBvc2l0aW9uQXJyYXksQS5EWU5BTUlDX0RSQVcpLGZhLmVuYWJsZUF0dHJpYnV0ZShiLnBvc2l0aW9uKSxBLnZlcnRleEF0dHJpYlBvaW50ZXIoYi5wb3NpdGlvbiwzLEEuRkxPQVQsITEsMCwwKSk7aWYoYS5oYXNOb3JtYWxzKXtBLmJpbmRCdWZmZXIoQS5BUlJBWV9CVUZGRVIsZC5ub3JtYWwpO2lmKCFjLmlzTWVzaFBob25nTWF0ZXJpYWwmJiFjLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwmJiFjLmlzTWVzaE5vcm1hbE1hdGVyaWFsJiYxPT09Yy5zaGFkaW5nKWZvcih2YXIgZT0wLGY9MyphLmNvdW50O2U8ZjtlKz05KXt2YXIgZz1hLm5vcm1hbEFycmF5LGg9KGdbZSswXStnW2UrM10rZ1tlKzZdKS8zLGs9KGdbZSsxXStnW2UrNF0rZ1tlKzddKS8zLG09KGdbZSsKMl0rZ1tlKzVdK2dbZSs4XSkvMztnW2UrMF09aDtnW2UrMV09aztnW2UrMl09bTtnW2UrM109aDtnW2UrNF09aztnW2UrNV09bTtnW2UrNl09aDtnW2UrN109aztnW2UrOF09bX1BLmJ1ZmZlckRhdGEoQS5BUlJBWV9CVUZGRVIsYS5ub3JtYWxBcnJheSxBLkRZTkFNSUNfRFJBVyk7ZmEuZW5hYmxlQXR0cmlidXRlKGIubm9ybWFsKTtBLnZlcnRleEF0dHJpYlBvaW50ZXIoYi5ub3JtYWwsMyxBLkZMT0FULCExLDAsMCl9YS5oYXNVdnMmJmMubWFwJiYoQS5iaW5kQnVmZmVyKEEuQVJSQVlfQlVGRkVSLGQudXYpLEEuYnVmZmVyRGF0YShBLkFSUkFZX0JVRkZFUixhLnV2QXJyYXksQS5EWU5BTUlDX0RSQVcpLGZhLmVuYWJsZUF0dHJpYnV0ZShiLnV2KSxBLnZlcnRleEF0dHJpYlBvaW50ZXIoQWEudXYsMixBLkZMT0FULCExLDAsMCkpO2EuaGFzQ29sb3JzJiYwIT09Yy52ZXJ0ZXhDb2xvcnMmJihBLmJpbmRCdWZmZXIoQS5BUlJBWV9CVUZGRVIsZC5jb2xvciksQS5idWZmZXJEYXRhKEEuQVJSQVlfQlVGRkVSLAphLmNvbG9yQXJyYXksQS5EWU5BTUlDX0RSQVcpLGZhLmVuYWJsZUF0dHJpYnV0ZShiLmNvbG9yKSxBLnZlcnRleEF0dHJpYlBvaW50ZXIoYi5jb2xvciwzLEEuRkxPQVQsITEsMCwwKSk7ZmEuZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXMoKTtBLmRyYXdBcnJheXMoQS5UUklBTkdMRVMsMCxhLmNvdW50KTthLmNvdW50PTB9O3RoaXMucmVuZGVyQnVmZmVyRGlyZWN0PWZ1bmN0aW9uKGEsYixjLGQsZSxmKXtmYS5zZXRNYXRlcmlhbChkKTt2YXIgZz1uKGEsYixkLGUpO2E9Yy5pZCsiXyIrZy5pZCsiXyIrKCEwPT09ZC53aXJlZnJhbWUpO3ZhciBrPSExO2EhPT1iYSYmKGJhPWEsaz0hMCk7Yj1lLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih2b2lkIDAhPT1iKXt2YXIgbT1bXTthPTA7Zm9yKHZhciB1PWIubGVuZ3RoO2E8dTthKyspaz1iW2FdLG0ucHVzaChbayxhXSk7bS5zb3J0KGgpOzg8bS5sZW5ndGgmJihtLmxlbmd0aD04KTt2YXIgcT1jLm1vcnBoQXR0cmlidXRlczthPTA7Zm9yKHU9Cm0ubGVuZ3RoO2E8dTthKyspaz1tW2FdLGNhW2FdPWtbMF0sMCE9PWtbMF0/KGI9a1sxXSwhMD09PWQubW9ycGhUYXJnZXRzJiZxLnBvc2l0aW9uJiZjLmFkZEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK2EscS5wb3NpdGlvbltiXSksITA9PT1kLm1vcnBoTm9ybWFscyYmcS5ub3JtYWwmJmMuYWRkQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrYSxxLm5vcm1hbFtiXSkpOighMD09PWQubW9ycGhUYXJnZXRzJiZjLnJlbW92ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK2EpLCEwPT09ZC5tb3JwaE5vcm1hbHMmJmMucmVtb3ZlQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrYSkpO2E9bS5sZW5ndGg7Zm9yKGI9Y2EubGVuZ3RoO2E8YjthKyspY2FbYV09MDtnLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUoQSwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixjYSk7az0hMH1iPWMuaW5kZXg7dT1jLmF0dHJpYnV0ZXMucG9zaXRpb247bT0xOyEwPT09ZC53aXJlZnJhbWUmJihiPURhLmdldFdpcmVmcmFtZUF0dHJpYnV0ZShjKSwKbT0yKTthPUthO251bGwhPT1iJiYoYT1MYSxhLnNldEluZGV4KGIpKTtpZihrKXtrPXZvaWQgMDtpZihjJiZjLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkmJm51bGw9PT1wYS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSljb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnNldHVwVmVydGV4QXR0cmlidXRlczogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7ZWxzZXt2b2lkIDA9PT1rJiYoaz0wKTtmYS5pbml0QXR0cmlidXRlcygpO3ZhciBxPWMuYXR0cmlidXRlcyxnPWcuZ2V0QXR0cmlidXRlcygpLGw9ZC5kZWZhdWx0QXR0cmlidXRlVmFsdWVzLHI7Zm9yKHIgaW4gZyl7dmFyIHQ9Z1tyXTtpZigwPD10KXt2YXIgdj1xW3JdO2lmKHZvaWQgMCE9PXYpe3ZhciB6PXYubm9ybWFsaXplZCxwPXYuaXRlbVNpemUsdz1BYS5nZXQodiksCng9dy5idWZmZXIseT13LnR5cGUsdz13LmJ5dGVzUGVyRWxlbWVudDtpZih2LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe3ZhciBHPXYuZGF0YSxPPUcuc3RyaWRlLHY9di5vZmZzZXQ7RyYmRy5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPyhmYS5lbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yKHQsRy5tZXNoUGVyQXR0cmlidXRlKSx2b2lkIDA9PT1jLm1heEluc3RhbmNlZENvdW50JiYoYy5tYXhJbnN0YW5jZWRDb3VudD1HLm1lc2hQZXJBdHRyaWJ1dGUqRy5jb3VudCkpOmZhLmVuYWJsZUF0dHJpYnV0ZSh0KTtBLmJpbmRCdWZmZXIoQS5BUlJBWV9CVUZGRVIseCk7QS52ZXJ0ZXhBdHRyaWJQb2ludGVyKHQscCx5LHosTyp3LChrKk8rdikqdyl9ZWxzZSB2LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPyhmYS5lbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yKHQsdi5tZXNoUGVyQXR0cmlidXRlKSx2b2lkIDA9PT1jLm1heEluc3RhbmNlZENvdW50JiYoYy5tYXhJbnN0YW5jZWRDb3VudD0Kdi5tZXNoUGVyQXR0cmlidXRlKnYuY291bnQpKTpmYS5lbmFibGVBdHRyaWJ1dGUodCksQS5iaW5kQnVmZmVyKEEuQVJSQVlfQlVGRkVSLHgpLEEudmVydGV4QXR0cmliUG9pbnRlcih0LHAseSx6LDAsaypwKncpfWVsc2UgaWYodm9pZCAwIT09bCYmKHo9bFtyXSx2b2lkIDAhPT16KSlzd2l0Y2goei5sZW5ndGgpe2Nhc2UgMjpBLnZlcnRleEF0dHJpYjJmdih0LHopO2JyZWFrO2Nhc2UgMzpBLnZlcnRleEF0dHJpYjNmdih0LHopO2JyZWFrO2Nhc2UgNDpBLnZlcnRleEF0dHJpYjRmdih0LHopO2JyZWFrO2RlZmF1bHQ6QS52ZXJ0ZXhBdHRyaWIxZnYodCx6KX19fWZhLmRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzKCl9bnVsbCE9PWImJkEuYmluZEJ1ZmZlcihBLkVMRU1FTlRfQVJSQVlfQlVGRkVSLEFhLmdldChiKS5idWZmZXIpfXI9MDtudWxsIT09Yj9yPWIuY291bnQ6dm9pZCAwIT09dSYmKHI9dS5jb3VudCk7dT1jLmRyYXdSYW5nZS5zdGFydCptO2s9bnVsbCE9PWY/Zi5zdGFydCptOgowO2I9TWF0aC5tYXgodSxrKTtmPU1hdGgubWF4KDAsTWF0aC5taW4ocix1K2MuZHJhd1JhbmdlLmNvdW50Km0saysobnVsbCE9PWY/Zi5jb3VudCptOkluZmluaXR5KSktMS1iKzEpO2lmKDAhPT1mKXtpZihlLmlzTWVzaClpZighMD09PWQud2lyZWZyYW1lKWZhLnNldExpbmVXaWR0aChkLndpcmVmcmFtZUxpbmV3aWR0aCoobnVsbD09PVA/a2E6MSkpLGEuc2V0TW9kZShBLkxJTkVTKTtlbHNlIHN3aXRjaChlLmRyYXdNb2RlKXtjYXNlIDA6YS5zZXRNb2RlKEEuVFJJQU5HTEVTKTticmVhaztjYXNlIDE6YS5zZXRNb2RlKEEuVFJJQU5HTEVfU1RSSVApO2JyZWFrO2Nhc2UgMjphLnNldE1vZGUoQS5UUklBTkdMRV9GQU4pfWVsc2UgZS5pc0xpbmU/KGQ9ZC5saW5ld2lkdGgsdm9pZCAwPT09ZCYmKGQ9MSksZmEuc2V0TGluZVdpZHRoKGQqKG51bGw9PT1QP2thOjEpKSxlLmlzTGluZVNlZ21lbnRzP2Euc2V0TW9kZShBLkxJTkVTKTplLmlzTGluZUxvb3A/YS5zZXRNb2RlKEEuTElORV9MT09QKToKYS5zZXRNb2RlKEEuTElORV9TVFJJUCkpOmUuaXNQb2ludHMmJmEuc2V0TW9kZShBLlBPSU5UUyk7YyYmYy5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PzA8Yy5tYXhJbnN0YW5jZWRDb3VudCYmYS5yZW5kZXJJbnN0YW5jZXMoYyxiLGYpOmEucmVuZGVyKGIsZil9fTt0aGlzLmNvbXBpbGU9ZnVuY3Rpb24oYSxiKXthYT1bXTthLnRyYXZlcnNlKGZ1bmN0aW9uKGEpe2EuaXNMaWdodCYmYWEucHVzaChhKX0pO3QoYWEsYik7YS50cmF2ZXJzZShmdW5jdGlvbihiKXtpZihiLm1hdGVyaWFsKWlmKEFycmF5LmlzQXJyYXkoYi5tYXRlcmlhbCkpZm9yKHZhciBjPTA7YzxiLm1hdGVyaWFsLmxlbmd0aDtjKyspcShiLm1hdGVyaWFsW2NdLGEuZm9nLGIpO2Vsc2UgcShiLm1hdGVyaWFsLGEuZm9nLGIpfSl9O3RoaXMucmVuZGVyPWZ1bmN0aW9uKGEsYixjLGQpe2lmKHZvaWQgMCE9PWImJiEwIT09Yi5pc0NhbWVyYSljb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIik7CmVsc2V7YmE9IiI7Vz0tMTtUPW51bGw7ITA9PT1hLmF1dG9VcGRhdGUmJmEudXBkYXRlTWF0cml4V29ybGQoKTtiLm9uQmVmb3JlUmVuZGVyKEMpO251bGw9PT1iLnBhcmVudCYmYi51cGRhdGVNYXRyaXhXb3JsZCgpO2IubWF0cml4V29ybGRJbnZlcnNlLmdldEludmVyc2UoYi5tYXRyaXhXb3JsZCk7bGQubXVsdGlwbHlNYXRyaWNlcyhiLnByb2plY3Rpb25NYXRyaXgsYi5tYXRyaXhXb3JsZEludmVyc2UpO21hLnNldEZyb21NYXRyaXgobGQpO2FhLmxlbmd0aD0wO0QubGVuZ3RoPTA7Qi5sZW5ndGg9MDtXZD10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkO2tkPVBhLmluaXQodGhpcy5jbGlwcGluZ1BsYW5lcyxXZCxiKTtSPUdhLmdldChhLGIpO1IuaW5pdCgpO2soYSxiLEMuc29ydE9iamVjdHMpO1IuZmluaXNoKCk7ITA9PT1DLnNvcnRPYmplY3RzJiZSLnNvcnQoKTtrZCYmUGEuYmVnaW5TaGFkb3dzKCk7Zm9yKHZhciBlPWFhLGY9MCxnPTAsaD1lLmxlbmd0aDtnPGg7ZysrKXt2YXIgbj0KZVtnXTtuLmNhc3RTaGFkb3cmJihlYS5zaGFkb3dzW2ZdPW4sZisrKX1lYS5zaGFkb3dzLmxlbmd0aD1mO0phLnJlbmRlcihhLGIpO3QoYWEsYik7a2QmJlBhLmVuZFNoYWRvd3MoKTtvYS5mcmFtZSsrO29hLmNhbGxzPTA7b2EudmVydGljZXM9MDtvYS5mYWNlcz0wO29hLnBvaW50cz0wO3ZvaWQgMD09PWMmJihjPW51bGwpO3RoaXMuc2V0UmVuZGVyVGFyZ2V0KGMpO2U9YS5iYWNrZ3JvdW5kO251bGw9PT1lP2ZhLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoSWEucixJYS5nLElhLmIsWCxFKTplJiZlLmlzQ29sb3ImJihmYS5idWZmZXJzLmNvbG9yLnNldENsZWFyKGUucixlLmcsZS5iLDEsRSksZD0hMCk7KHRoaXMuYXV0b0NsZWFyfHxkKSYmdGhpcy5jbGVhcih0aGlzLmF1dG9DbGVhckNvbG9yLHRoaXMuYXV0b0NsZWFyRGVwdGgsdGhpcy5hdXRvQ2xlYXJTdGVuY2lsKTtlJiZlLmlzQ3ViZVRleHR1cmU/KHZvaWQgMD09PXRhJiYodGE9bmV3IHhhLHVhPW5ldyBDYShuZXcga2IoNSw1LAo1KSxuZXcgRWEoe3VuaWZvcm1zOmFiLmN1YmUudW5pZm9ybXMsdmVydGV4U2hhZGVyOmFiLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmFiLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZToxLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSksdGEucHJvamVjdGlvbk1hdHJpeC5jb3B5KGIucHJvamVjdGlvbk1hdHJpeCksdGEubWF0cml4V29ybGQuZXh0cmFjdFJvdGF0aW9uKGIubWF0cml4V29ybGQpLHRhLm1hdHJpeFdvcmxkSW52ZXJzZS5nZXRJbnZlcnNlKHRhLm1hdHJpeFdvcmxkKSx1YS5tYXRlcmlhbC51bmlmb3Jtcy50Q3ViZS52YWx1ZT1lLHVhLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHRhLm1hdHJpeFdvcmxkSW52ZXJzZSx1YS5tYXRyaXhXb3JsZCksd2EudXBkYXRlKHVhKSxDLnJlbmRlckJ1ZmZlckRpcmVjdCh0YSxudWxsLHVhLmdlb21ldHJ5LHVhLm1hdGVyaWFsLHVhLG51bGwpKTplJiZlLmlzVGV4dHVyZSYmKHZvaWQgMD09PQpGYSYmKEZhPW5ldyBKYigtMSwxLDEsLTEsMCwxKSx6YT1uZXcgQ2EobmV3IGxiKDIsMiksbmV3IE5hKHtkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSkpLHphLm1hdGVyaWFsLm1hcD1lLHdhLnVwZGF0ZSh6YSksQy5yZW5kZXJCdWZmZXJEaXJlY3QoRmEsbnVsbCx6YS5nZW9tZXRyeSx6YS5tYXRlcmlhbCx6YSxudWxsKSk7ZD1SLm9wYXF1ZTtlPVIudHJhbnNwYXJlbnQ7YS5vdmVycmlkZU1hdGVyaWFsPyhmPWEub3ZlcnJpZGVNYXRlcmlhbCxkLmxlbmd0aCYmbShkLGEsYixmKSxlLmxlbmd0aCYmbShlLGEsYixmKSk6KGQubGVuZ3RoJiZtKGQsYSxiKSxlLmxlbmd0aCYmbShlLGEsYikpO01hLnJlbmRlcihhLGIpO09hLnJlbmRlcihhLGIsWik7YyYmc2EudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKGMpO2ZhLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCk7ZmEuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKTtmYS5idWZmZXJzLmNvbG9yLnNldE1hc2soITApO2IuaXNBcnJheUNhbWVyYSYmCmIuZW5hYmxlZCYmQy5zZXRTY2lzc29yVGVzdCghMSk7Yi5vbkFmdGVyUmVuZGVyKEMpfX07dGhpcy5zZXRGYWNlQ3VsbGluZz1mdW5jdGlvbihhLGIpe2ZhLnNldEN1bGxGYWNlKGEpO2ZhLnNldEZsaXBTaWRlZCgwPT09Yil9O3RoaXMuYWxsb2NUZXh0dXJlVW5pdD1mdW5jdGlvbigpe3ZhciBhPVU7YT49bmEubWF4VGV4dHVyZXMmJmNvbnNvbGUud2FybigiV2ViR0xSZW5kZXJlcjogdHJ5aW5nIHRvIHVzZSAiK2ErIiB0ZXh0dXJlIHVuaXRzIHdoaWxlIHRoaXMgR1BVIHN1cHBvcnRzIG9ubHkgIituYS5tYXhUZXh0dXJlcyk7VSs9MTtyZXR1cm4gYX07dGhpcy5zZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oKXt2YXIgYT0hMTtyZXR1cm4gZnVuY3Rpb24oYixjKXtiJiZiLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihhfHwoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnNldFRleHR1cmUyRDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSwKYT0hMCksYj1iLnRleHR1cmUpO3NhLnNldFRleHR1cmUyRChiLGMpfX0oKTt0aGlzLnNldFRleHR1cmU9ZnVuY3Rpb24oKXt2YXIgYT0hMTtyZXR1cm4gZnVuY3Rpb24oYixjKXthfHwoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSBpcyBkZXByZWNhdGVkLCB1c2Ugc2V0VGV4dHVyZTJEIGluc3RlYWQuIiksYT0hMCk7c2Euc2V0VGV4dHVyZTJEKGIsYyl9fSgpO3RoaXMuc2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXt2YXIgYT0hMTtyZXR1cm4gZnVuY3Rpb24oYixjKXtiJiZiLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlJiYoYXx8KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5zZXRUZXh0dXJlQ3ViZTogZG9uJ3QgdXNlIGN1YmUgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLGE9ITApLGI9Yi50ZXh0dXJlKTtiJiZiLmlzQ3ViZVRleHR1cmV8fEFycmF5LmlzQXJyYXkoYi5pbWFnZSkmJgo2PT09Yi5pbWFnZS5sZW5ndGg/c2Euc2V0VGV4dHVyZUN1YmUoYixjKTpzYS5zZXRUZXh0dXJlQ3ViZUR5bmFtaWMoYixjKX19KCk7dGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gUH07dGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oYSl7KFA9YSkmJnZvaWQgMD09PWlhLmdldChhKS5fX3dlYmdsRnJhbWVidWZmZXImJnNhLnNldHVwUmVuZGVyVGFyZ2V0KGEpO3ZhciBiPWEmJmEuaXNXZWJHTFJlbmRlclRhcmdldEN1YmUsYzthPyhjPWlhLmdldChhKSxjPWI/Yy5fX3dlYmdsRnJhbWVidWZmZXJbYS5hY3RpdmVDdWJlRmFjZV06Yy5fX3dlYmdsRnJhbWVidWZmZXIsUS5jb3B5KGEuc2Npc3NvciksTD1hLnNjaXNzb3JUZXN0LFouY29weShhLnZpZXdwb3J0KSk6KGM9bnVsbCxRLmNvcHkoaGEpLm11bHRpcGx5U2NhbGFyKGthKSxMPVBlLFouY29weSh6YykubXVsdGlwbHlTY2FsYXIoa2EpKTtLIT09YyYmKEEuYmluZEZyYW1lYnVmZmVyKEEuRlJBTUVCVUZGRVIsCmMpLEs9Yyk7ZmEuc2Npc3NvcihRKTtmYS5zZXRTY2lzc29yVGVzdChMKTtmYS52aWV3cG9ydChaKTtiJiYoYj1pYS5nZXQoYS50ZXh0dXJlKSxBLmZyYW1lYnVmZmVyVGV4dHVyZTJEKEEuRlJBTUVCVUZGRVIsQS5DT0xPUl9BVFRBQ0hNRU5UMCxBLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCthLmFjdGl2ZUN1YmVGYWNlLGIuX193ZWJnbFRleHR1cmUsYS5hY3RpdmVNaXBNYXBMZXZlbCkpfTt0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2lmKCExPT09KGEmJmEuaXNXZWJHTFJlbmRlclRhcmdldCkpY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO2Vsc2V7dmFyIGc9aWEuZ2V0KGEpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihnKXt2YXIgaD0hMTtnIT09SyYmKEEuYmluZEZyYW1lYnVmZmVyKEEuRlJBTUVCVUZGRVIsCmcpLGg9ITApO3RyeXt2YXIgaz1hLnRleHR1cmUsbT1rLmZvcm1hdCxuPWsudHlwZTsxMDIzIT09bSYmeShtKSE9PUEuZ2V0UGFyYW1ldGVyKEEuSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQpP2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZm9ybWF0LiIpOjEwMDk9PT1ufHx5KG4pPT09QS5nZXRQYXJhbWV0ZXIoQS5JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEUpfHwxMDE1PT09biYmKHBhLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKXx8cGEuZ2V0KCJXRUJHTF9jb2xvcl9idWZmZXJfZmxvYXQiKSl8fDEwMTY9PT1uJiZwYS5nZXQoIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpP0EuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhBLkZSQU1FQlVGRkVSKT09PUEuRlJBTUVCVUZGRVJfQ09NUExFVEU/MDw9YiYmCmI8PWEud2lkdGgtZCYmMDw9YyYmYzw9YS5oZWlnaHQtZSYmQS5yZWFkUGl4ZWxzKGIsYyxkLGUseShtKSx5KG4pLGYpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVhZFBpeGVscyBmcm9tIHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZS4iKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gVW5zaWduZWRCeXRlVHlwZSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHR5cGUuIil9ZmluYWxseXtoJiZBLmJpbmRGcmFtZWJ1ZmZlcihBLkZSQU1FQlVGRkVSLEspfX19fX1mdW5jdGlvbiBLYihhLGIpe3RoaXMubmFtZT0iIjt0aGlzLmNvbG9yPW5ldyBIKGEpO3RoaXMuZGVuc2l0eT12b2lkIDAhPT1iP2I6Mi41RS00fWZ1bmN0aW9uIExiKGEsYixjKXt0aGlzLm5hbWU9IiI7dGhpcy5jb2xvcj0KbmV3IEgoYSk7dGhpcy5uZWFyPXZvaWQgMCE9PWI/YjoxO3RoaXMuZmFyPXZvaWQgMCE9PWM/YzoxRTN9ZnVuY3Rpb24gbWQoKXtCLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTY2VuZSI7dGhpcy5vdmVycmlkZU1hdGVyaWFsPXRoaXMuZm9nPXRoaXMuYmFja2dyb3VuZD1udWxsO3RoaXMuYXV0b1VwZGF0ZT0hMH1mdW5jdGlvbiBZZChhLGIsYyxkLGUpe0IuY2FsbCh0aGlzKTt0aGlzLmxlbnNGbGFyZXM9W107dGhpcy5wb3NpdGlvblNjcmVlbj1uZXcgcDt0aGlzLmN1c3RvbVVwZGF0ZUNhbGxiYWNrPXZvaWQgMDt2b2lkIDAhPT1hJiZ0aGlzLmFkZChhLGIsYyxkLGUpfWZ1bmN0aW9uIGNiKGEpe1ouY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBIKDE2Nzc3MjE1KTt0aGlzLm1hcD1udWxsO3RoaXMucm90YXRpb249MDt0aGlzLmxpZ2h0cz10aGlzLmZvZz0hMTt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiBBYyhhKXtCLmNhbGwodGhpcyk7CnRoaXMudHlwZT0iU3ByaXRlIjt0aGlzLm1hdGVyaWFsPXZvaWQgMCE9PWE/YTpuZXcgY2J9ZnVuY3Rpb24gQmMoKXtCLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMT0QiO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse2xldmVsczp7ZW51bWVyYWJsZTohMCx2YWx1ZTpbXX19KX1mdW5jdGlvbiBDYyhhLGIpe2E9YXx8W107dGhpcy5ib25lcz1hLnNsaWNlKDApO3RoaXMuYm9uZU1hdHJpY2VzPW5ldyBGbG9hdDMyQXJyYXkoMTYqdGhpcy5ib25lcy5sZW5ndGgpO2lmKHZvaWQgMD09PWIpdGhpcy5jYWxjdWxhdGVJbnZlcnNlcygpO2Vsc2UgaWYodGhpcy5ib25lcy5sZW5ndGg9PT1iLmxlbmd0aCl0aGlzLmJvbmVJbnZlcnNlcz1iLnNsaWNlKDApO2Vsc2V7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbiBib25lSW52ZXJzZXMgaXMgdGhlIHdyb25nIGxlbmd0aC4iKTt0aGlzLmJvbmVJbnZlcnNlcz1bXTtmb3IodmFyIGM9MCxkPXRoaXMuYm9uZXMubGVuZ3RoO2M8ZDtjKyspdGhpcy5ib25lSW52ZXJzZXMucHVzaChuZXcgSil9fQpmdW5jdGlvbiBuZCgpe0IuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkJvbmUifWZ1bmN0aW9uIG9kKGEsYil7Q2EuY2FsbCh0aGlzLGEsYik7dGhpcy50eXBlPSJTa2lubmVkTWVzaCI7dGhpcy5iaW5kTW9kZT0iYXR0YWNoZWQiO3RoaXMuYmluZE1hdHJpeD1uZXcgSjt0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyBKO3ZhciBjPXRoaXMuaW5pdEJvbmVzKCksYz1uZXcgQ2MoYyk7dGhpcy5iaW5kKGMsdGhpcy5tYXRyaXhXb3JsZCk7dGhpcy5ub3JtYWxpemVTa2luV2VpZ2h0cygpfWZ1bmN0aW9uIGhhKGEpe1ouY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBIKDE2Nzc3MjE1KTt0aGlzLmxpbmV3aWR0aD0xO3RoaXMubGluZWpvaW49dGhpcy5saW5lY2FwPSJyb3VuZCI7dGhpcy5saWdodHM9ITE7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24geWEoYSxiLGMpe2lmKDE9PT1jKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmU6IHBhcmFtZXRlciBUSFJFRS5MaW5lUGllY2VzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIENyZWF0ZWQgVEhSRUUuTGluZVNlZ21lbnRzIGluc3RlYWQuIiksCm5ldyBkYShhLGIpO0IuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkxpbmUiO3RoaXMuZ2VvbWV0cnk9dm9pZCAwIT09YT9hOm5ldyBJO3RoaXMubWF0ZXJpYWw9dm9pZCAwIT09Yj9iOm5ldyBoYSh7Y29sb3I6MTY3NzcyMTUqTWF0aC5yYW5kb20oKX0pfWZ1bmN0aW9uIGRhKGEsYil7eWEuY2FsbCh0aGlzLGEsYik7dGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWZ1bmN0aW9uIHBkKGEsYil7eWEuY2FsbCh0aGlzLGEsYik7dGhpcy50eXBlPSJMaW5lTG9vcCJ9ZnVuY3Rpb24gTGEoYSl7Wi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUG9pbnRzTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMubWFwPW51bGw7dGhpcy5zaXplPTE7dGhpcy5zaXplQXR0ZW51YXRpb249ITA7dGhpcy5saWdodHM9ITE7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24gTWIoYSxiKXtCLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQb2ludHMiO3RoaXMuZ2VvbWV0cnk9dm9pZCAwIT09YT9hOm5ldyBJOwp0aGlzLm1hdGVyaWFsPXZvaWQgMCE9PWI/YjpuZXcgTGEoe2NvbG9yOjE2Nzc3MjE1Kk1hdGgucmFuZG9tKCl9KX1mdW5jdGlvbiBEYygpe0IuY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ikdyb3VwIn1mdW5jdGlvbiBxZChhLGIsYyxkLGUsZixnLGgsayl7ZnVuY3Rpb24gbSgpe3JlcXVlc3RBbmltYXRpb25GcmFtZShtKTthLnJlYWR5U3RhdGU+PWEuSEFWRV9DVVJSRU5UX0RBVEEmJih1Lm5lZWRzVXBkYXRlPSEwKX1YLmNhbGwodGhpcyxhLGIsYyxkLGUsZixnLGgsayk7dGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITE7dmFyIHU9dGhpczttKCl9ZnVuY3Rpb24gTmIoYSxiLGMsZCxlLGYsZyxoLGssbSx1LHEpe1guY2FsbCh0aGlzLG51bGwsZixnLGgsayxtLGQsZSx1LHEpO3RoaXMuaW1hZ2U9e3dpZHRoOmIsaGVpZ2h0OmN9O3RoaXMubWlwbWFwcz1hO3RoaXMuZ2VuZXJhdGVNaXBtYXBzPXRoaXMuZmxpcFk9ITF9ZnVuY3Rpb24gcmQoYSxiLGMsZCxlLGYsZyxoLGspe1guY2FsbCh0aGlzLGEsCmIsYyxkLGUsZixnLGgsayk7dGhpcy5uZWVkc1VwZGF0ZT0hMH1mdW5jdGlvbiBFYyhhLGIsYyxkLGUsZixnLGgsayxtKXttPXZvaWQgMCE9PW0/bToxMDI2O2lmKDEwMjYhPT1tJiYxMDI3IT09bSl0aHJvdyBFcnJvcigiRGVwdGhUZXh0dXJlIGZvcm1hdCBtdXN0IGJlIGVpdGhlciBUSFJFRS5EZXB0aEZvcm1hdCBvciBUSFJFRS5EZXB0aFN0ZW5jaWxGb3JtYXQiKTt2b2lkIDA9PT1jJiYxMDI2PT09bSYmKGM9MTAxMik7dm9pZCAwPT09YyYmMTAyNz09PW0mJihjPTEwMjApO1guY2FsbCh0aGlzLG51bGwsZCxlLGYsZyxoLG0sYyxrKTt0aGlzLmltYWdlPXt3aWR0aDphLGhlaWdodDpifTt0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1nP2c6MTAwMzt0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT1oP2g6MTAwMzt0aGlzLmdlbmVyYXRlTWlwbWFwcz10aGlzLmZsaXBZPSExfWZ1bmN0aW9uIE9iKGEpe0kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IldpcmVmcmFtZUdlb21ldHJ5Ijt2YXIgYj1bXSwKYyxkLGUsZixnPVswLDBdLGg9e30sayxtLHU9WyJhIiwiYiIsImMiXTtpZihhJiZhLmlzR2VvbWV0cnkpe3ZhciBxPWEuZmFjZXM7Yz0wO2ZvcihlPXEubGVuZ3RoO2M8ZTtjKyspe3ZhciBuPXFbY107Zm9yKGQ9MDszPmQ7ZCsrKWs9blt1W2RdXSxtPW5bdVsoZCsxKSUzXV0sZ1swXT1NYXRoLm1pbihrLG0pLGdbMV09TWF0aC5tYXgoayxtKSxrPWdbMF0rIiwiK2dbMV0sdm9pZCAwPT09aFtrXSYmKGhba109e2luZGV4MTpnWzBdLGluZGV4MjpnWzFdfSl9Zm9yKGsgaW4gaCljPWhba10sdT1hLnZlcnRpY2VzW2MuaW5kZXgxXSxiLnB1c2godS54LHUueSx1LnopLHU9YS52ZXJ0aWNlc1tjLmluZGV4Ml0sYi5wdXNoKHUueCx1LnksdS56KX1lbHNlIGlmKGEmJmEuaXNCdWZmZXJHZW9tZXRyeSl7dmFyIHIsdT1uZXcgcDtpZihudWxsIT09YS5pbmRleCl7cT1hLmF0dHJpYnV0ZXMucG9zaXRpb247bj1hLmluZGV4O3I9YS5ncm91cHM7MD09PXIubGVuZ3RoJiYocj1be3N0YXJ0OjAsY291bnQ6bi5jb3VudCwKbWF0ZXJpYWxJbmRleDowfV0pO2E9MDtmb3IoZj1yLmxlbmd0aDthPGY7KythKWZvcihjPXJbYV0sZD1jLnN0YXJ0LGU9Yy5jb3VudCxjPWQsZT1kK2U7YzxlO2MrPTMpZm9yKGQ9MDszPmQ7ZCsrKWs9bi5nZXRYKGMrZCksbT1uLmdldFgoYysoZCsxKSUzKSxnWzBdPU1hdGgubWluKGssbSksZ1sxXT1NYXRoLm1heChrLG0pLGs9Z1swXSsiLCIrZ1sxXSx2b2lkIDA9PT1oW2tdJiYoaFtrXT17aW5kZXgxOmdbMF0saW5kZXgyOmdbMV19KTtmb3IoayBpbiBoKWM9aFtrXSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUocSxjLmluZGV4MSksYi5wdXNoKHUueCx1LnksdS56KSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUocSxjLmluZGV4MiksYi5wdXNoKHUueCx1LnksdS56KX1lbHNlIGZvcihxPWEuYXR0cmlidXRlcy5wb3NpdGlvbixjPTAsZT1xLmNvdW50LzM7YzxlO2MrKylmb3IoZD0wOzM+ZDtkKyspaD0zKmMrZCx1LmZyb21CdWZmZXJBdHRyaWJ1dGUocSxoKSxiLnB1c2godS54LHUueSx1LnopLApoPTMqYysoZCsxKSUzLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShxLGgpLGIucHVzaCh1LngsdS55LHUueil9dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhiLDMpKX1mdW5jdGlvbiBGYyhhLGIsYyl7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUGFyYW1ldHJpY0dlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e2Z1bmM6YSxzbGljZXM6YixzdGFja3M6Y307dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFBiKGEsYixjKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gUGIoYSxiLGMpe0kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBhcmFtZXRyaWNCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtmdW5jOmEsc2xpY2VzOmIsc3RhY2tzOmN9O3ZhciBkPVtdLGU9W10sZj1bXSxnPVtdLGg9bmV3IHAsaz1uZXcgcCxtPW5ldyBwLHU9bmV3IHAscT1uZXcgcCxuLHIsbD1iKzE7Zm9yKG49MDtuPD1jO24rKyl7dmFyIHQ9bi9jO2ZvcihyPTA7cjw9YjtyKyspe3ZhciB5PQpyL2Isaz1hKHksdCxrKTtlLnB1c2goay54LGsueSxrLnopOzA8PXktMUUtNT8obT1hKHktMUUtNSx0LG0pLHUuc3ViVmVjdG9ycyhrLG0pKToobT1hKHkrMUUtNSx0LG0pLHUuc3ViVmVjdG9ycyhtLGspKTswPD10LTFFLTU/KG09YSh5LHQtMUUtNSxtKSxxLnN1YlZlY3RvcnMoayxtKSk6KG09YSh5LHQrMUUtNSxtKSxxLnN1YlZlY3RvcnMobSxrKSk7aC5jcm9zc1ZlY3RvcnModSxxKS5ub3JtYWxpemUoKTtmLnB1c2goaC54LGgueSxoLnopO2cucHVzaCh5LHQpfX1mb3Iobj0wO248YztuKyspZm9yKHI9MDtyPGI7cisrKWE9bipsK3IrMSxoPShuKzEpKmwrcisxLGs9KG4rMSkqbCtyLGQucHVzaChuKmwrcixhLGspLGQucHVzaChhLGgsayk7dGhpcy5zZXRJbmRleChkKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGUsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBDKGYsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IEMoZywyKSl9ZnVuY3Rpb24gR2MoYSwKYixjLGQpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBvbHloZWRyb25HZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt2ZXJ0aWNlczphLGluZGljZXM6YixyYWRpdXM6YyxkZXRhaWw6ZH07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IGlhKGEsYixjLGQpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBpYShhLGIsYyxkKXtmdW5jdGlvbiBlKGEpe2gucHVzaChhLngsYS55LGEueil9ZnVuY3Rpb24gZihiLGMpe3ZhciBkPTMqYjtjLng9YVtkKzBdO2MueT1hW2QrMV07Yy56PWFbZCsyXX1mdW5jdGlvbiBnKGEsYixjLGQpezA+ZCYmMT09PWEueCYmKGtbYl09YS54LTEpOzA9PT1jLngmJjA9PT1jLnomJihrW2JdPWQvMi9NYXRoLlBJKy41KX1JLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17dmVydGljZXM6YSxpbmRpY2VzOmIscmFkaXVzOmMsZGV0YWlsOmR9O2M9Y3x8MTt2YXIgaD1bXSxrPVtdOyhmdW5jdGlvbihhKXtmb3IodmFyIGM9Cm5ldyBwLGQ9bmV3IHAsZz1uZXcgcCxoPTA7aDxiLmxlbmd0aDtoKz0zKXtmKGJbaCswXSxjKTtmKGJbaCsxXSxkKTtmKGJbaCsyXSxnKTt2YXIgaz1jLGw9ZCx5PWcseD1NYXRoLnBvdygyLGEpLHY9W10sRyx3O2ZvcihHPTA7Rzw9eDtHKyspe3ZbR109W107dmFyIE89ay5jbG9uZSgpLmxlcnAoeSxHL3gpLFM9bC5jbG9uZSgpLmxlcnAoeSxHL3gpLEU9eC1HO2Zvcih3PTA7dzw9RTt3KyspdltHXVt3XT0wPT09dyYmRz09PXg/TzpPLmNsb25lKCkubGVycChTLHcvRSl9Zm9yKEc9MDtHPHg7RysrKWZvcih3PTA7dzwyKih4LUcpLTE7dysrKWs9TWF0aC5mbG9vcih3LzIpLDA9PT13JTI/KGUodltHXVtrKzFdKSxlKHZbRysxXVtrXSksZSh2W0ddW2tdKSk6KGUodltHXVtrKzFdKSxlKHZbRysxXVtrKzFdKSxlKHZbRysxXVtrXSkpfX0pKGR8fDApOyhmdW5jdGlvbihhKXtmb3IodmFyIGI9bmV3IHAsYz0wO2M8aC5sZW5ndGg7Yys9MyliLng9aFtjKzBdLGIueT1oW2MrMV0sYi56PWhbYysKMl0sYi5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcihhKSxoW2MrMF09Yi54LGhbYysxXT1iLnksaFtjKzJdPWIuen0pKGMpOyhmdW5jdGlvbigpe2Zvcih2YXIgYT1uZXcgcCxiPTA7YjxoLmxlbmd0aDtiKz0zKWEueD1oW2IrMF0sYS55PWhbYisxXSxhLno9aFtiKzJdLGsucHVzaChNYXRoLmF0YW4yKGEueiwtYS54KS8yL01hdGguUEkrLjUsMS0oTWF0aC5hdGFuMigtYS55LE1hdGguc3FydChhLngqYS54K2EueiphLnopKS9NYXRoLlBJKy41KSk7Zm9yKHZhciBhPW5ldyBwLGI9bmV3IHAsYz1uZXcgcCxkPW5ldyBwLGU9bmV3IEQsZj1uZXcgRCxsPW5ldyBELHk9MCx4PTA7eTxoLmxlbmd0aDt5Kz05LHgrPTYpe2Euc2V0KGhbeSswXSxoW3krMV0saFt5KzJdKTtiLnNldChoW3krM10saFt5KzRdLGhbeSs1XSk7Yy5zZXQoaFt5KzZdLGhbeSs3XSxoW3krOF0pO2Uuc2V0KGtbeCswXSxrW3grMV0pO2Yuc2V0KGtbeCsyXSxrW3grM10pO2wuc2V0KGtbeCs0XSxrW3grNV0pO2QuY29weShhKS5hZGQoYikuYWRkKGMpLmRpdmlkZVNjYWxhcigzKTsKdmFyIHY9TWF0aC5hdGFuMihkLnosLWQueCk7ZyhlLHgrMCxhLHYpO2coZix4KzIsYix2KTtnKGwseCs0LGMsdil9Zm9yKGE9MDthPGsubGVuZ3RoO2ErPTYpYj1rW2ErMF0sYz1rW2ErMl0sZD1rW2ErNF0sZT1NYXRoLm1pbihiLGMsZCksLjk8TWF0aC5tYXgoYixjLGQpJiYuMT5lJiYoLjI+YiYmKGtbYSswXSs9MSksLjI+YyYmKGtbYSsyXSs9MSksLjI+ZCYmKGtbYSs0XSs9MSkpfSkoKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGgsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBDKGguc2xpY2UoKSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhrLDIpKTt0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKX1mdW5jdGlvbiBIYyhhLGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlRldHJhaGVkcm9uR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsZGV0YWlsOmJ9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBRYihhLGIpKTsKdGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gUWIoYSxiKXtpYS5jYWxsKHRoaXMsWzEsMSwxLC0xLC0xLDEsLTEsMSwtMSwxLC0xLC0xXSxbMiwxLDAsMCwzLDIsMSwzLDAsMiwzLDFdLGEsYik7dGhpcy50eXBlPSJUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGRldGFpbDpifX1mdW5jdGlvbiBJYyhhLGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ik9jdGFoZWRyb25HZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSxkZXRhaWw6Yn07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IG1iKGEsYikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIG1iKGEsYil7aWEuY2FsbCh0aGlzLFsxLDAsMCwtMSwwLDAsMCwxLDAsMCwtMSwwLDAsMCwxLDAsMCwtMV0sWzAsMiw0LDAsNCwzLDAsMyw1LDAsNSwyLDEsMiw1LDEsNSwzLDEsMyw0LDEsNCwyXSxhLGIpO3RoaXMudHlwZT0iT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5IjsKdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSxkZXRhaWw6Yn19ZnVuY3Rpb24gSmMoYSxiKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJJY29zYWhlZHJvbkdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGRldGFpbDpifTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgUmIoYSxiKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gUmIoYSxiKXt2YXIgYz0oMStNYXRoLnNxcnQoNSkpLzI7aWEuY2FsbCh0aGlzLFstMSxjLDAsMSxjLDAsLTEsLWMsMCwxLC1jLDAsMCwtMSxjLDAsMSxjLDAsLTEsLWMsMCwxLC1jLGMsMCwtMSxjLDAsMSwtYywwLC0xLC1jLDAsMV0sWzAsMTEsNSwwLDUsMSwwLDEsNywwLDcsMTAsMCwxMCwxMSwxLDUsOSw1LDExLDQsMTEsMTAsMiwxMCw3LDYsNywxLDgsMyw5LDQsMyw0LDIsMywyLDYsMyw2LDgsMyw4LDksNCw5LDUsMiw0LDExLDYsMiwxMCw4LDYsNyw5LDgsMV0sYSxiKTt0aGlzLnR5cGU9Ikljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnkiOwp0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGRldGFpbDpifX1mdW5jdGlvbiBLYyhhLGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkRvZGVjYWhlZHJvbkdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGRldGFpbDpifTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgU2IoYSxiKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gU2IoYSxiKXt2YXIgYz0oMStNYXRoLnNxcnQoNSkpLzIsZD0xL2M7aWEuY2FsbCh0aGlzLFstMSwtMSwtMSwtMSwtMSwxLC0xLDEsLTEsLTEsMSwxLDEsLTEsLTEsMSwtMSwxLDEsMSwtMSwxLDEsMSwwLC1kLC1jLDAsLWQsYywwLGQsLWMsMCxkLGMsLWQsLWMsMCwtZCxjLDAsZCwtYywwLGQsYywwLC1jLDAsLWQsYywwLC1kLC1jLDAsZCxjLDAsZF0sWzMsMTEsNywzLDcsMTUsMywxNSwxMyw3LDE5LDE3LDcsMTcsNiw3LDYsMTUsMTcsNCw4LDE3LDgsMTAsMTcsMTAsNiw4LDAsMTYsOCwxNiwyLDgsMiwxMCwwLDEyLDEsMCwxLDE4LAowLDE4LDE2LDYsMTAsMiw2LDIsMTMsNiwxMywxNSwyLDE2LDE4LDIsMTgsMywyLDMsMTMsMTgsMSw5LDE4LDksMTEsMTgsMTEsMyw0LDE0LDEyLDQsMTIsMCw0LDAsOCwxMSw5LDUsMTEsNSwxOSwxMSwxOSw3LDE5LDUsMTQsMTksMTQsNCwxOSw0LDE3LDEsMTIsMTQsMSwxNCw1LDEsNSw5XSxhLGIpO3RoaXMudHlwZT0iRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsZGV0YWlsOmJ9fWZ1bmN0aW9uIExjKGEsYixjLGQsZSxmKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJUdWJlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cGF0aDphLHR1YnVsYXJTZWdtZW50czpiLHJhZGl1czpjLHJhZGlhbFNlZ21lbnRzOmQsY2xvc2VkOmV9O3ZvaWQgMCE9PWYmJmNvbnNvbGUud2FybigiVEhSRUUuVHViZUdlb21ldHJ5OiB0YXBlciBoYXMgYmVlbiByZW1vdmVkLiIpO2E9bmV3IFRiKGEsYixjLGQsZSk7dGhpcy50YW5nZW50cz1hLnRhbmdlbnRzOwp0aGlzLm5vcm1hbHM9YS5ub3JtYWxzO3RoaXMuYmlub3JtYWxzPWEuYmlub3JtYWxzO3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KGEpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFRiKGEsYixjLGQsZSl7ZnVuY3Rpb24gZihlKXt2YXIgZj1hLmdldFBvaW50QXQoZS9iKSxtPWcubm9ybWFsc1tlXTtlPWcuYmlub3JtYWxzW2VdO2ZvcihxPTA7cTw9ZDtxKyspe3ZhciB1PXEvZCpNYXRoLlBJKjIsdD1NYXRoLnNpbih1KSx1PS1NYXRoLmNvcyh1KTtrLng9dSptLngrdCplLng7ay55PXUqbS55K3QqZS55O2suej11Km0ueit0KmUuejtrLm5vcm1hbGl6ZSgpO2wucHVzaChrLngsay55LGsueik7aC54PWYueCtjKmsueDtoLnk9Zi55K2Mqay55O2guej1mLnorYyprLno7bi5wdXNoKGgueCxoLnksaC56KX19SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVHViZUJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3BhdGg6YSx0dWJ1bGFyU2VnbWVudHM6YixyYWRpdXM6YyxyYWRpYWxTZWdtZW50czpkLApjbG9zZWQ6ZX07Yj1ifHw2NDtjPWN8fDE7ZD1kfHw4O2U9ZXx8ITE7dmFyIGc9YS5jb21wdXRlRnJlbmV0RnJhbWVzKGIsZSk7dGhpcy50YW5nZW50cz1nLnRhbmdlbnRzO3RoaXMubm9ybWFscz1nLm5vcm1hbHM7dGhpcy5iaW5vcm1hbHM9Zy5iaW5vcm1hbHM7dmFyIGg9bmV3IHAsaz1uZXcgcCxtPW5ldyBELHUscSxuPVtdLGw9W10sej1bXSx0PVtdO2Zvcih1PTA7dTxiO3UrKylmKHUpO2YoITE9PT1lP2I6MCk7Zm9yKHU9MDt1PD1iO3UrKylmb3IocT0wO3E8PWQ7cSsrKW0ueD11L2IsbS55PXEvZCx6LnB1c2gobS54LG0ueSk7KGZ1bmN0aW9uKCl7Zm9yKHE9MTtxPD1iO3ErKylmb3IodT0xO3U8PWQ7dSsrKXt2YXIgYT0oZCsxKSpxKyh1LTEpLGM9KGQrMSkqcSt1LGU9KGQrMSkqKHEtMSkrdTt0LnB1c2goKGQrMSkqKHEtMSkrKHUtMSksYSxlKTt0LnB1c2goYSxjLGUpfX0pKCk7dGhpcy5zZXRJbmRleCh0KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKG4sMykpOwp0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgQyhsLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKHosMikpfWZ1bmN0aW9uIE1jKGEsYixjLGQsZSxmLGcpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlRvcnVzS25vdEdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLHR1YmU6Yix0dWJ1bGFyU2VnbWVudHM6YyxyYWRpYWxTZWdtZW50czpkLHA6ZSxxOmZ9O3ZvaWQgMCE9PWcmJmNvbnNvbGUud2FybigiVEhSRUUuVG9ydXNLbm90R2VvbWV0cnk6IGhlaWdodFNjYWxlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2NhbGUoIHgsIHksIHogKSBpbnN0ZWFkLiIpO3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBVYihhLGIsYyxkLGUsZikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFViKGEsYixjLGQsZSxmKXtmdW5jdGlvbiBnKGEsYixjLGQsZSl7dmFyIGY9TWF0aC5zaW4oYSk7Yj1jL2IqYTtjPU1hdGguY29zKGIpO2UueD1kKigyK2MpKgouNSpNYXRoLmNvcyhhKTtlLnk9ZCooMitjKSpmKi41O2Uuej1kKk1hdGguc2luKGIpKi41fUkuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLHR1YmU6Yix0dWJ1bGFyU2VnbWVudHM6YyxyYWRpYWxTZWdtZW50czpkLHA6ZSxxOmZ9O2E9YXx8MTAwO2I9Ynx8NDA7Yz1NYXRoLmZsb29yKGMpfHw2NDtkPU1hdGguZmxvb3IoZCl8fDg7ZT1lfHwyO2Y9Znx8Mzt2YXIgaD1bXSxrPVtdLG09W10sdT1bXSxxLG4sbD1uZXcgcCx6PW5ldyBwLHQ9bmV3IHAseT1uZXcgcCx4PW5ldyBwLHY9bmV3IHAsRz1uZXcgcDtmb3IocT0wO3E8PWM7KytxKWZvcihuPXEvYyplKk1hdGguUEkqMixnKG4sZSxmLGEsdCksZyhuKy4wMSxlLGYsYSx5KSx2LnN1YlZlY3RvcnMoeSx0KSxHLmFkZFZlY3RvcnMoeSx0KSx4LmNyb3NzVmVjdG9ycyh2LEcpLEcuY3Jvc3NWZWN0b3JzKHgsdikseC5ub3JtYWxpemUoKSxHLm5vcm1hbGl6ZSgpLApuPTA7bjw9ZDsrK24pe3ZhciB3PW4vZCpNYXRoLlBJKjIsTz0tYipNYXRoLmNvcyh3KSx3PWIqTWF0aC5zaW4odyk7bC54PXQueCsoTypHLngrdyp4LngpO2wueT10LnkrKE8qRy55K3cqeC55KTtsLno9dC56KyhPKkcueit3Kngueik7ay5wdXNoKGwueCxsLnksbC56KTt6LnN1YlZlY3RvcnMobCx0KS5ub3JtYWxpemUoKTttLnB1c2goei54LHoueSx6LnopO3UucHVzaChxL2MpO3UucHVzaChuL2QpfWZvcihuPTE7bjw9YztuKyspZm9yKHE9MTtxPD1kO3ErKylhPShkKzEpKm4rKHEtMSksYj0oZCsxKSpuK3EsZT0oZCsxKSoobi0xKStxLGgucHVzaCgoZCsxKSoobi0xKSsocS0xKSxhLGUpLGgucHVzaChhLGIsZSk7dGhpcy5zZXRJbmRleChoKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGssMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBDKG0sMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IEModSwyKSl9ZnVuY3Rpb24gTmMoYSxiLGMsZCwKZSl7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVG9ydXNHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSx0dWJlOmIscmFkaWFsU2VnbWVudHM6Yyx0dWJ1bGFyU2VnbWVudHM6ZCxhcmM6ZX07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFZiKGEsYixjLGQsZSkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFZiKGEsYixjLGQsZSl7SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVG9ydXNCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSx0dWJlOmIscmFkaWFsU2VnbWVudHM6Yyx0dWJ1bGFyU2VnbWVudHM6ZCxhcmM6ZX07YT1hfHwxMDA7Yj1ifHw0MDtjPU1hdGguZmxvb3IoYyl8fDg7ZD1NYXRoLmZsb29yKGQpfHw2O2U9ZXx8MipNYXRoLlBJO3ZhciBmPVtdLGc9W10saD1bXSxrPVtdLG09bmV3IHAsdT1uZXcgcCxxPW5ldyBwLG4sbDtmb3Iobj0wO248PWM7bisrKWZvcihsPTA7bDw9ZDtsKyspe3ZhciB6PWwvZCplLHQ9bi9jKk1hdGguUEkqCjI7dS54PShhK2IqTWF0aC5jb3ModCkpKk1hdGguY29zKHopO3UueT0oYStiKk1hdGguY29zKHQpKSpNYXRoLnNpbih6KTt1Lno9YipNYXRoLnNpbih0KTtnLnB1c2godS54LHUueSx1LnopO20ueD1hKk1hdGguY29zKHopO20ueT1hKk1hdGguc2luKHopO3Euc3ViVmVjdG9ycyh1LG0pLm5vcm1hbGl6ZSgpO2gucHVzaChxLngscS55LHEueik7ay5wdXNoKGwvZCk7ay5wdXNoKG4vYyl9Zm9yKG49MTtuPD1jO24rKylmb3IobD0xO2w8PWQ7bCsrKWE9KGQrMSkqKG4tMSkrbC0xLGI9KGQrMSkqKG4tMSkrbCxlPShkKzEpKm4rbCxmLnB1c2goKGQrMSkqbitsLTEsYSxlKSxmLnB1c2goYSxiLGUpO3RoaXMuc2V0SW5kZXgoZik7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhnLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgQyhoLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKGssMikpfWZ1bmN0aW9uIGRiKGEsYil7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0KIkV4dHJ1ZGVHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6YSxvcHRpb25zOmJ9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBGYShhLGIpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBGYShhLGIpeyJ1bmRlZmluZWQiIT09dHlwZW9mIGEmJihJLmNhbGwodGhpcyksdGhpcy50eXBlPSJFeHRydWRlQnVmZmVyR2VvbWV0cnkiLGE9QXJyYXkuaXNBcnJheShhKT9hOlthXSx0aGlzLmFkZFNoYXBlTGlzdChhLGIpLHRoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKSl9ZnVuY3Rpb24gT2MoYSxiKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJUZXh0R2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17dGV4dDphLHBhcmFtZXRlcnM6Yn07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFdiKGEsYikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFdiKGEsYil7Yj1ifHx7fTt2YXIgYz1iLmZvbnQ7aWYoITE9PT0oYyYmYy5pc0ZvbnQpKXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5UZXh0R2VvbWV0cnk6IGZvbnQgcGFyYW1ldGVyIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5Gb250LiIpLApuZXcgTTtjPWMuZ2VuZXJhdGVTaGFwZXMoYSxiLnNpemUsYi5jdXJ2ZVNlZ21lbnRzKTtiLmFtb3VudD12b2lkIDAhPT1iLmhlaWdodD9iLmhlaWdodDo1MDt2b2lkIDA9PT1iLmJldmVsVGhpY2tuZXNzJiYoYi5iZXZlbFRoaWNrbmVzcz0xMCk7dm9pZCAwPT09Yi5iZXZlbFNpemUmJihiLmJldmVsU2l6ZT04KTt2b2lkIDA9PT1iLmJldmVsRW5hYmxlZCYmKGIuYmV2ZWxFbmFibGVkPSExKTtGYS5jYWxsKHRoaXMsYyxiKTt0aGlzLnR5cGU9IlRleHRCdWZmZXJHZW9tZXRyeSJ9ZnVuY3Rpb24gUGMoYSxiLGMsZCxlLGYsZyl7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iU3BoZXJlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsd2lkdGhTZWdtZW50czpiLGhlaWdodFNlZ21lbnRzOmMscGhpU3RhcnQ6ZCxwaGlMZW5ndGg6ZSx0aGV0YVN0YXJ0OmYsdGhldGFMZW5ndGg6Z307dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IG5iKGEsYixjLGQsZSxmLGcpKTt0aGlzLm1lcmdlVmVydGljZXMoKX0KZnVuY3Rpb24gbmIoYSxiLGMsZCxlLGYsZyl7SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iU3BoZXJlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsd2lkdGhTZWdtZW50czpiLGhlaWdodFNlZ21lbnRzOmMscGhpU3RhcnQ6ZCxwaGlMZW5ndGg6ZSx0aGV0YVN0YXJ0OmYsdGhldGFMZW5ndGg6Z307YT1hfHw1MDtiPU1hdGgubWF4KDMsTWF0aC5mbG9vcihiKXx8OCk7Yz1NYXRoLm1heCgyLE1hdGguZmxvb3IoYyl8fDYpO2Q9dm9pZCAwIT09ZD9kOjA7ZT12b2lkIDAhPT1lP2U6MipNYXRoLlBJO2Y9dm9pZCAwIT09Zj9mOjA7Zz12b2lkIDAhPT1nP2c6TWF0aC5QSTt2YXIgaD1mK2csayxtLHU9MCxxPVtdLG49bmV3IHAsbD1uZXcgcCx6PVtdLHQ9W10seT1bXSx4PVtdO2ZvcihtPTA7bTw9YzttKyspe3ZhciB2PVtdLEc9bS9jO2ZvcihrPTA7azw9YjtrKyspe3ZhciB3PWsvYjtuLng9LWEqTWF0aC5jb3MoZCt3KmUpKk1hdGguc2luKGYrRypnKTtuLnk9YSpNYXRoLmNvcyhmKwpHKmcpO24uej1hKk1hdGguc2luKGQrdyplKSpNYXRoLnNpbihmK0cqZyk7dC5wdXNoKG4ueCxuLnksbi56KTtsLnNldChuLngsbi55LG4ueikubm9ybWFsaXplKCk7eS5wdXNoKGwueCxsLnksbC56KTt4LnB1c2godywxLUcpO3YucHVzaCh1KyspfXEucHVzaCh2KX1mb3IobT0wO208YzttKyspZm9yKGs9MDtrPGI7aysrKWE9cVttXVtrKzFdLGQ9cVttXVtrXSxlPXFbbSsxXVtrXSxnPXFbbSsxXVtrKzFdLCgwIT09bXx8MDxmKSYmei5wdXNoKGEsZCxnKSwobSE9PWMtMXx8aDxNYXRoLlBJKSYmei5wdXNoKGQsZSxnKTt0aGlzLnNldEluZGV4KHopO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEModCwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEMoeSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyh4LDIpKX1mdW5jdGlvbiBRYyhhLGIsYyxkLGUsZil7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUmluZ0dlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9Cntpbm5lclJhZGl1czphLG91dGVyUmFkaXVzOmIsdGhldGFTZWdtZW50czpjLHBoaVNlZ21lbnRzOmQsdGhldGFTdGFydDplLHRoZXRhTGVuZ3RoOmZ9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBYYihhLGIsYyxkLGUsZikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFhiKGEsYixjLGQsZSxmKXtJLmNhbGwodGhpcyk7dGhpcy50eXBlPSJSaW5nQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17aW5uZXJSYWRpdXM6YSxvdXRlclJhZGl1czpiLHRoZXRhU2VnbWVudHM6YyxwaGlTZWdtZW50czpkLHRoZXRhU3RhcnQ6ZSx0aGV0YUxlbmd0aDpmfTthPWF8fDIwO2I9Ynx8NTA7ZT12b2lkIDAhPT1lP2U6MDtmPXZvaWQgMCE9PWY/ZjoyKk1hdGguUEk7Yz12b2lkIDAhPT1jP01hdGgubWF4KDMsYyk6ODtkPXZvaWQgMCE9PWQ/TWF0aC5tYXgoMSxkKToxO3ZhciBnPVtdLGg9W10saz1bXSxtPVtdLHU9YSxxPShiLWEpL2Qsbj1uZXcgcCxsPW5ldyBELHosdDtmb3Ioej0KMDt6PD1kO3orKyl7Zm9yKHQ9MDt0PD1jO3QrKylhPWUrdC9jKmYsbi54PXUqTWF0aC5jb3MoYSksbi55PXUqTWF0aC5zaW4oYSksaC5wdXNoKG4ueCxuLnksbi56KSxrLnB1c2goMCwwLDEpLGwueD0obi54L2IrMSkvMixsLnk9KG4ueS9iKzEpLzIsbS5wdXNoKGwueCxsLnkpO3UrPXF9Zm9yKHo9MDt6PGQ7eisrKWZvcihiPXoqKGMrMSksdD0wO3Q8Yzt0KyspYT10K2IsZT1hK2MrMSxmPWErYysyLHU9YSsxLGcucHVzaChhLGUsdSksZy5wdXNoKGUsZix1KTt0aGlzLnNldEluZGV4KGcpO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMoaCwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEMoaywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhtLDIpKX1mdW5jdGlvbiBSYyhhLGIsYyxkKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMYXRoZUdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3BvaW50czphLHNlZ21lbnRzOmIscGhpU3RhcnQ6YyxwaGlMZW5ndGg6ZH07CnRoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBZYihhLGIsYyxkKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gWWIoYSxiLGMsZCl7SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTGF0aGVCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtwb2ludHM6YSxzZWdtZW50czpiLHBoaVN0YXJ0OmMscGhpTGVuZ3RoOmR9O2I9TWF0aC5mbG9vcihiKXx8MTI7Yz1jfHwwO2Q9ZHx8MipNYXRoLlBJO2Q9WS5jbGFtcChkLDAsMipNYXRoLlBJKTt2YXIgZT1bXSxmPVtdLGc9W10saD0xL2Isaz1uZXcgcCxtPW5ldyBELHUscTtmb3IodT0wO3U8PWI7dSsrKXtxPWMrdSpoKmQ7dmFyIG49TWF0aC5zaW4ocSksbD1NYXRoLmNvcyhxKTtmb3IocT0wO3E8PWEubGVuZ3RoLTE7cSsrKWsueD1hW3FdLngqbixrLnk9YVtxXS55LGsuej1hW3FdLngqbCxmLnB1c2goay54LGsueSxrLnopLG0ueD11L2IsbS55PXEvKGEubGVuZ3RoLTEpLGcucHVzaChtLngsbS55KX1mb3IodT0wO3U8Yjt1KyspZm9yKHE9CjA7cTxhLmxlbmd0aC0xO3ErKyljPXErdSphLmxlbmd0aCxoPWMrYS5sZW5ndGgsaz1jK2EubGVuZ3RoKzEsbT1jKzEsZS5wdXNoKGMsaCxtKSxlLnB1c2goaCxrLG0pO3RoaXMuc2V0SW5kZXgoZSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhmLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKGcsMikpO3RoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtpZihkPT09MipNYXRoLlBJKWZvcihkPXRoaXMuYXR0cmlidXRlcy5ub3JtYWwuYXJyYXksZT1uZXcgcCxmPW5ldyBwLGc9bmV3IHAsYz1iKmEubGVuZ3RoKjMscT11PTA7dTxhLmxlbmd0aDt1KysscSs9MyllLng9ZFtxKzBdLGUueT1kW3ErMV0sZS56PWRbcSsyXSxmLng9ZFtjK3ErMF0sZi55PWRbYytxKzFdLGYuej1kW2MrcSsyXSxnLmFkZFZlY3RvcnMoZSxmKS5ub3JtYWxpemUoKSxkW3ErMF09ZFtjK3ErMF09Zy54LGRbcSsxXT1kW2MrcSsxXT1nLnksZFtxKzJdPWRbYytxKzJdPWcuen1mdW5jdGlvbiBaYihhLApiKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTaGFwZUdlb21ldHJ5Ijsib2JqZWN0Ij09PXR5cGVvZiBiJiYoY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZUdlb21ldHJ5OiBPcHRpb25zIHBhcmFtZXRlciBoYXMgYmVlbiByZW1vdmVkLiIpLGI9Yi5jdXJ2ZVNlZ21lbnRzKTt0aGlzLnBhcmFtZXRlcnM9e3NoYXBlczphLGN1cnZlU2VnbWVudHM6Yn07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3ICRiKGEsYikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uICRiKGEsYil7ZnVuY3Rpb24gYyhhKXt2YXIgYyxoLG09ZS5sZW5ndGgvMzthPWEuZXh0cmFjdFBvaW50cyhiKTt2YXIgbD1hLnNoYXBlLHQ9YS5ob2xlcztpZighMT09PXphLmlzQ2xvY2tXaXNlKGwpKWZvcihsPWwucmV2ZXJzZSgpLGE9MCxjPXQubGVuZ3RoO2E8YzthKyspaD10W2FdLCEwPT09emEuaXNDbG9ja1dpc2UoaCkmJih0W2FdPWgucmV2ZXJzZSgpKTt2YXIgcD16YS50cmlhbmd1bGF0ZVNoYXBlKGwsdCk7CmE9MDtmb3IoYz10Lmxlbmd0aDthPGM7YSsrKWg9dFthXSxsPWwuY29uY2F0KGgpO2E9MDtmb3IoYz1sLmxlbmd0aDthPGM7YSsrKWg9bFthXSxlLnB1c2goaC54LGgueSwwKSxmLnB1c2goMCwwLDEpLGcucHVzaChoLngsaC55KTthPTA7Zm9yKGM9cC5sZW5ndGg7YTxjO2ErKylsPXBbYV0sZC5wdXNoKGxbMF0rbSxsWzFdK20sbFsyXSttKSxrKz0zfUkuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlNoYXBlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17c2hhcGVzOmEsY3VydmVTZWdtZW50czpifTtiPWJ8fDEyO3ZhciBkPVtdLGU9W10sZj1bXSxnPVtdLGg9MCxrPTA7aWYoITE9PT1BcnJheS5pc0FycmF5KGEpKWMoYSk7ZWxzZSBmb3IodmFyIG09MDttPGEubGVuZ3RoO20rKyljKGFbbV0pLHRoaXMuYWRkR3JvdXAoaCxrLG0pLGgrPWssaz0wO3RoaXMuc2V0SW5kZXgoZCk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhlLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIiwKbmV3IEMoZiwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhnLDIpKX1mdW5jdGlvbiBhYyhhLGIpe0kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkVkZ2VzR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17dGhyZXNob2xkQW5nbGU6Yn07dmFyIGM9W10sZD1NYXRoLmNvcyhZLkRFRzJSQUQqKHZvaWQgMCE9PWI/YjoxKSksZT1bMCwwXSxmPXt9LGcsaCxrPVsiYSIsImIiLCJjIl0sbTthLmlzQnVmZmVyR2VvbWV0cnk/KG09bmV3IE0sbS5mcm9tQnVmZmVyR2VvbWV0cnkoYSkpOm09YS5jbG9uZSgpO20ubWVyZ2VWZXJ0aWNlcygpO20uY29tcHV0ZUZhY2VOb3JtYWxzKCk7dmFyIHU9bS52ZXJ0aWNlczttPW0uZmFjZXM7Zm9yKHZhciBsPTAsbj1tLmxlbmd0aDtsPG47bCsrKWZvcih2YXIgcj1tW2xdLHA9MDszPnA7cCsrKWc9cltrW3BdXSxoPXJba1socCsxKSUzXV0sZVswXT1NYXRoLm1pbihnLGgpLGVbMV09TWF0aC5tYXgoZyxoKSxnPWVbMF0rIiwiK2VbMV0sdm9pZCAwPT09CmZbZ10/ZltnXT17aW5kZXgxOmVbMF0saW5kZXgyOmVbMV0sZmFjZTE6bCxmYWNlMjp2b2lkIDB9OmZbZ10uZmFjZTI9bDtmb3IoZyBpbiBmKWlmKGU9ZltnXSx2b2lkIDA9PT1lLmZhY2UyfHxtW2UuZmFjZTFdLm5vcm1hbC5kb3QobVtlLmZhY2UyXS5ub3JtYWwpPD1kKWs9dVtlLmluZGV4MV0sYy5wdXNoKGsueCxrLnksay56KSxrPXVbZS5pbmRleDJdLGMucHVzaChrLngsay55LGsueik7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhjLDMpKX1mdW5jdGlvbiBvYihhLGIsYyxkLGUsZixnLGgpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN5bGluZGVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzVG9wOmEscmFkaXVzQm90dG9tOmIsaGVpZ2h0OmMscmFkaWFsU2VnbWVudHM6ZCxoZWlnaHRTZWdtZW50czplLG9wZW5FbmRlZDpmLHRoZXRhU3RhcnQ6Zyx0aGV0YUxlbmd0aDpofTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgV2EoYSxiLGMsZCxlLApmLGcsaCkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFdhKGEsYixjLGQsZSxmLGcsaCl7ZnVuY3Rpb24gayhjKXt2YXIgZSxmLGssdD1uZXcgRCxFPW5ldyBwLEY9MCxhYT0hMD09PWM/YTpiLFI9ITA9PT1jPzE6LTE7Zj16O2ZvcihlPTE7ZTw9ZDtlKyspbC5wdXNoKDAseSpSLDApLG4ucHVzaCgwLFIsMCksci5wdXNoKC41LC41KSx6Kys7az16O2ZvcihlPTA7ZTw9ZDtlKyspe3ZhciBDPWUvZCpoK2csQj1NYXRoLmNvcyhDKSxDPU1hdGguc2luKEMpO0UueD1hYSpDO0UueT15KlI7RS56PWFhKkI7bC5wdXNoKEUueCxFLnksRS56KTtuLnB1c2goMCxSLDApO3QueD0uNSpCKy41O3QueT0uNSpDKlIrLjU7ci5wdXNoKHQueCx0LnkpO3orK31mb3IoZT0wO2U8ZDtlKyspdD1mK2UsRT1rK2UsITA9PT1jP3UucHVzaChFLEUrMSx0KTp1LnB1c2goRSsxLEUsdCksRis9MzttLmFkZEdyb3VwKHgsRiwhMD09PWM/MToyKTt4Kz1GfUkuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN5bGluZGVyQnVmZmVyR2VvbWV0cnkiOwp0aGlzLnBhcmFtZXRlcnM9e3JhZGl1c1RvcDphLHJhZGl1c0JvdHRvbTpiLGhlaWdodDpjLHJhZGlhbFNlZ21lbnRzOmQsaGVpZ2h0U2VnbWVudHM6ZSxvcGVuRW5kZWQ6Zix0aGV0YVN0YXJ0OmcsdGhldGFMZW5ndGg6aH07dmFyIG09dGhpczthPXZvaWQgMCE9PWE/YToyMDtiPXZvaWQgMCE9PWI/YjoyMDtjPXZvaWQgMCE9PWM/YzoxMDA7ZD1NYXRoLmZsb29yKGQpfHw4O2U9TWF0aC5mbG9vcihlKXx8MTtmPXZvaWQgMCE9PWY/ZjohMTtnPXZvaWQgMCE9PWc/ZzowO2g9dm9pZCAwIT09aD9oOjIqTWF0aC5QSTt2YXIgdT1bXSxsPVtdLG49W10scj1bXSx6PTAsdD1bXSx5PWMvMix4PTA7KGZ1bmN0aW9uKCl7dmFyIGYsayx3PW5ldyBwLE89bmV3IHAsUz0wLEU9KGItYSkvYztmb3Ioaz0wO2s8PWU7aysrKXt2YXIgRj1bXSxhYT1rL2UsQz1hYSooYi1hKSthO2ZvcihmPTA7Zjw9ZDtmKyspe3ZhciBEPWYvZCxCPUQqaCtnLEk9TWF0aC5zaW4oQiksQj1NYXRoLmNvcyhCKTtPLng9QyoKSTtPLnk9LWFhKmMreTtPLno9QypCO2wucHVzaChPLngsTy55LE8ueik7dy5zZXQoSSxFLEIpLm5vcm1hbGl6ZSgpO24ucHVzaCh3Lngsdy55LHcueik7ci5wdXNoKEQsMS1hYSk7Ri5wdXNoKHorKyl9dC5wdXNoKEYpfWZvcihmPTA7ZjxkO2YrKylmb3Ioaz0wO2s8ZTtrKyspdz10W2srMV1bZl0sTz10W2srMV1bZisxXSxFPXRba11bZisxXSx1LnB1c2godFtrXVtmXSx3LEUpLHUucHVzaCh3LE8sRSksUys9NjttLmFkZEdyb3VwKHgsUywwKTt4Kz1TfSkoKTshMT09PWYmJigwPGEmJmsoITApLDA8YiYmayghMSkpO3RoaXMuc2V0SW5kZXgodSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhsLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgQyhuLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKHIsMikpfWZ1bmN0aW9uIFNjKGEsYixjLGQsZSxmLGcpe29iLmNhbGwodGhpcywwLGEsYixjLGQsZSxmLGcpO3RoaXMudHlwZT0iQ29uZUdlb21ldHJ5IjsKdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSxoZWlnaHQ6YixyYWRpYWxTZWdtZW50czpjLGhlaWdodFNlZ21lbnRzOmQsb3BlbkVuZGVkOmUsdGhldGFTdGFydDpmLHRoZXRhTGVuZ3RoOmd9fWZ1bmN0aW9uIFRjKGEsYixjLGQsZSxmLGcpe1dhLmNhbGwodGhpcywwLGEsYixjLGQsZSxmLGcpO3RoaXMudHlwZT0iQ29uZUJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGhlaWdodDpiLHJhZGlhbFNlZ21lbnRzOmMsaGVpZ2h0U2VnbWVudHM6ZCxvcGVuRW5kZWQ6ZSx0aGV0YVN0YXJ0OmYsdGhldGFMZW5ndGg6Z319ZnVuY3Rpb24gVWMoYSxiLGMsZCl7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsc2VnbWVudHM6Yix0aGV0YVN0YXJ0OmMsdGhldGFMZW5ndGg6ZH07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IGJjKGEsYixjLGQpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBiYyhhLApiLGMsZCl7SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ2lyY2xlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsc2VnbWVudHM6Yix0aGV0YVN0YXJ0OmMsdGhldGFMZW5ndGg6ZH07YT1hfHw1MDtiPXZvaWQgMCE9PWI/TWF0aC5tYXgoMyxiKTo4O2M9dm9pZCAwIT09Yz9jOjA7ZD12b2lkIDAhPT1kP2Q6MipNYXRoLlBJO3ZhciBlPVtdLGY9W10sZz1bXSxoPVtdLGssbSx1PW5ldyBwLGw9bmV3IEQ7Zi5wdXNoKDAsMCwwKTtnLnB1c2goMCwwLDEpO2gucHVzaCguNSwuNSk7bT0wO2ZvcihrPTM7bTw9YjttKyssays9Myl7dmFyIG49YyttL2IqZDt1Lng9YSpNYXRoLmNvcyhuKTt1Lnk9YSpNYXRoLnNpbihuKTtmLnB1c2godS54LHUueSx1LnopO2cucHVzaCgwLDAsMSk7bC54PShmW2tdL2ErMSkvMjtsLnk9KGZbaysxXS9hKzEpLzI7aC5wdXNoKGwueCxsLnkpfWZvcihrPTE7azw9YjtrKyspZS5wdXNoKGssaysxLDApO3RoaXMuc2V0SW5kZXgoZSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIiwKbmV3IEMoZiwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEMoZywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhoLDIpKX1mdW5jdGlvbiBjYyhhKXtFYS5jYWxsKHRoaXMse3VuaWZvcm1zOkhhLm1lcmdlKFtWLmxpZ2h0cyx7b3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOlUuc2hhZG93X3ZlcnQsZnJhZ21lbnRTaGFkZXI6VS5zaGFkb3dfZnJhZ30pO3RoaXMudHJhbnNwYXJlbnQ9dGhpcy5saWdodHM9ITA7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7b3BhY2l0eTp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5vcGFjaXR5LnZhbHVlfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy51bmlmb3Jtcy5vcGFjaXR5LnZhbHVlPWF9fX0pO3RoaXMuc2V0VmFsdWVzKGEpfWZ1bmN0aW9uIGRjKGEpe0VhLmNhbGwodGhpcyxhKTt0aGlzLnR5cGU9IlJhd1NoYWRlck1hdGVyaWFsIn1mdW5jdGlvbiBSYShhKXtaLmNhbGwodGhpcyk7CnRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9O3RoaXMudHlwZT0iTWVzaFN0YW5kYXJkTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMubWV0YWxuZXNzPXRoaXMucm91Z2huZXNzPS41O3RoaXMubGlnaHRNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTE7dGhpcy5hb01hcD1udWxsO3RoaXMuYW9NYXBJbnRlbnNpdHk9MTt0aGlzLmVtaXNzaXZlPW5ldyBIKDApO3RoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MTt0aGlzLmJ1bXBNYXA9dGhpcy5lbWlzc2l2ZU1hcD1udWxsO3RoaXMuYnVtcFNjYWxlPTE7dGhpcy5ub3JtYWxNYXA9bnVsbDt0aGlzLm5vcm1hbFNjYWxlPW5ldyBEKDEsMSk7dGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTE7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPTA7dGhpcy5lbnZNYXA9dGhpcy5hbHBoYU1hcD10aGlzLm1ldGFsbmVzc01hcD10aGlzLnJvdWdobmVzc01hcD1udWxsOwp0aGlzLmVudk1hcEludGVuc2l0eT0xO3RoaXMucmVmcmFjdGlvblJhdGlvPS45ODt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xO3RoaXMud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCI7dGhpcy5tb3JwaE5vcm1hbHM9dGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz0hMTt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiBwYihhKXtSYS5jYWxsKHRoaXMpO3RoaXMuZGVmaW5lcz17UEhZU0lDQUw6IiJ9O3RoaXMudHlwZT0iTWVzaFBoeXNpY2FsTWF0ZXJpYWwiO3RoaXMucmVmbGVjdGl2aXR5PS41O3RoaXMuY2xlYXJDb2F0Um91Z2huZXNzPXRoaXMuY2xlYXJDb2F0PTA7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24gdGEoYSl7Wi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTWVzaFBob25nTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMuc3BlY3VsYXI9bmV3IEgoMTExODQ4MSk7dGhpcy5zaGluaW5lc3M9CjMwO3RoaXMubGlnaHRNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTE7dGhpcy5hb01hcD1udWxsO3RoaXMuYW9NYXBJbnRlbnNpdHk9MTt0aGlzLmVtaXNzaXZlPW5ldyBIKDApO3RoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MTt0aGlzLmJ1bXBNYXA9dGhpcy5lbWlzc2l2ZU1hcD1udWxsO3RoaXMuYnVtcFNjYWxlPTE7dGhpcy5ub3JtYWxNYXA9bnVsbDt0aGlzLm5vcm1hbFNjYWxlPW5ldyBEKDEsMSk7dGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTE7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPTA7dGhpcy5lbnZNYXA9dGhpcy5hbHBoYU1hcD10aGlzLnNwZWN1bGFyTWFwPW51bGw7dGhpcy5jb21iaW5lPTA7dGhpcy5yZWZsZWN0aXZpdHk9MTt0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTg7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWNhcD0KInJvdW5kIjt0aGlzLm1vcnBoTm9ybWFscz10aGlzLm1vcnBoVGFyZ2V0cz10aGlzLnNraW5uaW5nPSExO3RoaXMuc2V0VmFsdWVzKGEpfWZ1bmN0aW9uIHFiKGEpe3RhLmNhbGwodGhpcyk7dGhpcy5kZWZpbmVzPXtUT09OOiIifTt0aGlzLnR5cGU9Ik1lc2hUb29uTWF0ZXJpYWwiO3RoaXMuZ3JhZGllbnRNYXA9bnVsbDt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiByYihhKXtaLmNhbGwodGhpcyxhKTt0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCI7dGhpcy5idW1wTWFwPW51bGw7dGhpcy5idW1wU2NhbGU9MTt0aGlzLm5vcm1hbE1hcD1udWxsO3RoaXMubm9ybWFsU2NhbGU9bmV3IEQoMSwxKTt0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9MTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9MDt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xO3RoaXMubW9ycGhOb3JtYWxzPXRoaXMubW9ycGhUYXJnZXRzPXRoaXMuc2tpbm5pbmc9CnRoaXMubGlnaHRzPXRoaXMuZm9nPSExO3RoaXMuc2V0VmFsdWVzKGEpfWZ1bmN0aW9uIHNiKGEpe1ouY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ik1lc2hMYW1iZXJ0TWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMubGlnaHRNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTE7dGhpcy5hb01hcD1udWxsO3RoaXMuYW9NYXBJbnRlbnNpdHk9MTt0aGlzLmVtaXNzaXZlPW5ldyBIKDApO3RoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MTt0aGlzLmVudk1hcD10aGlzLmFscGhhTWFwPXRoaXMuc3BlY3VsYXJNYXA9dGhpcy5lbWlzc2l2ZU1hcD1udWxsO3RoaXMuY29tYmluZT0wO3RoaXMucmVmbGVjdGl2aXR5PTE7dGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4O3RoaXMud2lyZWZyYW1lPSExO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPTE7dGhpcy53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIjt0aGlzLm1vcnBoTm9ybWFscz0KdGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz0hMTt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiB0YihhKXtaLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMaW5lRGFzaGVkTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMuc2NhbGU9dGhpcy5saW5ld2lkdGg9MTt0aGlzLmRhc2hTaXplPTM7dGhpcy5nYXBTaXplPTE7dGhpcy5saWdodHM9ITE7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24gWmQoYSxiLGMpe3ZhciBkPXRoaXMsZT0hMSxmPTAsZz0wO3RoaXMub25TdGFydD12b2lkIDA7dGhpcy5vbkxvYWQ9YTt0aGlzLm9uUHJvZ3Jlc3M9Yjt0aGlzLm9uRXJyb3I9Yzt0aGlzLml0ZW1TdGFydD1mdW5jdGlvbihhKXtnKys7aWYoITE9PT1lJiZ2b2lkIDAhPT1kLm9uU3RhcnQpZC5vblN0YXJ0KGEsZixnKTtlPSEwfTt0aGlzLml0ZW1FbmQ9ZnVuY3Rpb24oYSl7ZisrO2lmKHZvaWQgMCE9PWQub25Qcm9ncmVzcylkLm9uUHJvZ3Jlc3MoYSxmLGcpO2lmKGY9PT0KZyYmKGU9ITEsdm9pZCAwIT09ZC5vbkxvYWQpKWQub25Mb2FkKCl9O3RoaXMuaXRlbUVycm9yPWZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PWQub25FcnJvcilkLm9uRXJyb3IoYSl9fWZ1bmN0aW9uIHVhKGEpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1hP2E6QWF9ZnVuY3Rpb24gUWUoYSl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWE/YTpBYTt0aGlzLl9wYXJzZXI9bnVsbH1mdW5jdGlvbiAkZChhKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09YT9hOkFhO3RoaXMuX3BhcnNlcj1udWxsfWZ1bmN0aW9uIFZjKGEpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1hP2E6QWF9ZnVuY3Rpb24gYWUoYSl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWE/YTpBYX1mdW5jdGlvbiBzZChhKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09YT9hOkFhfWZ1bmN0aW9uIG1hKGEsYil7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTGlnaHQiO3RoaXMuY29sb3I9bmV3IEgoYSk7dGhpcy5pbnRlbnNpdHk9dm9pZCAwIT09Yj9iOjE7CnRoaXMucmVjZWl2ZVNoYWRvdz12b2lkIDB9ZnVuY3Rpb24gdGQoYSxiLGMpe21hLmNhbGwodGhpcyxhLGMpO3RoaXMudHlwZT0iSGVtaXNwaGVyZUxpZ2h0Ijt0aGlzLmNhc3RTaGFkb3c9dm9pZCAwO3RoaXMucG9zaXRpb24uY29weShCLkRlZmF1bHRVcCk7dGhpcy51cGRhdGVNYXRyaXgoKTt0aGlzLmdyb3VuZENvbG9yPW5ldyBIKGIpfWZ1bmN0aW9uIHViKGEpe3RoaXMuY2FtZXJhPWE7dGhpcy5iaWFzPTA7dGhpcy5yYWRpdXM9MTt0aGlzLm1hcFNpemU9bmV3IEQoNTEyLDUxMik7dGhpcy5tYXA9bnVsbDt0aGlzLm1hdHJpeD1uZXcgSn1mdW5jdGlvbiB1ZCgpe3ViLmNhbGwodGhpcyxuZXcgeGEoNTAsMSwuNSw1MDApKX1mdW5jdGlvbiB2ZChhLGIsYyxkLGUsZil7bWEuY2FsbCh0aGlzLGEsYik7dGhpcy50eXBlPSJTcG90TGlnaHQiO3RoaXMucG9zaXRpb24uY29weShCLkRlZmF1bHRVcCk7dGhpcy51cGRhdGVNYXRyaXgoKTt0aGlzLnRhcmdldD1uZXcgQjtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywKInBvd2VyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9LHNldDpmdW5jdGlvbihhKXt0aGlzLmludGVuc2l0eT1hL01hdGguUEl9fSk7dGhpcy5kaXN0YW5jZT12b2lkIDAhPT1jP2M6MDt0aGlzLmFuZ2xlPXZvaWQgMCE9PWQ/ZDpNYXRoLlBJLzM7dGhpcy5wZW51bWJyYT12b2lkIDAhPT1lP2U6MDt0aGlzLmRlY2F5PXZvaWQgMCE9PWY/ZjoxO3RoaXMuc2hhZG93PW5ldyB1ZH1mdW5jdGlvbiB3ZChhLGIsYyxkKXttYS5jYWxsKHRoaXMsYSxiKTt0aGlzLnR5cGU9IlBvaW50TGlnaHQiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwb3dlciIse2dldDpmdW5jdGlvbigpe3JldHVybiA0KnRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9LHNldDpmdW5jdGlvbihhKXt0aGlzLmludGVuc2l0eT1hLyg0Kk1hdGguUEkpfX0pO3RoaXMuZGlzdGFuY2U9dm9pZCAwIT09Yz9jOjA7dGhpcy5kZWNheT12b2lkIDAhPT1kP2Q6MTt0aGlzLnNoYWRvdz1uZXcgdWIobmV3IHhhKDkwLAoxLC41LDUwMCkpfWZ1bmN0aW9uIHhkKCl7dWIuY2FsbCh0aGlzLG5ldyBKYigtNSw1LDUsLTUsLjUsNTAwKSl9ZnVuY3Rpb24geWQoYSxiKXttYS5jYWxsKHRoaXMsYSxiKTt0aGlzLnR5cGU9IkRpcmVjdGlvbmFsTGlnaHQiO3RoaXMucG9zaXRpb24uY29weShCLkRlZmF1bHRVcCk7dGhpcy51cGRhdGVNYXRyaXgoKTt0aGlzLnRhcmdldD1uZXcgQjt0aGlzLnNoYWRvdz1uZXcgeGR9ZnVuY3Rpb24gemQoYSxiKXttYS5jYWxsKHRoaXMsYSxiKTt0aGlzLnR5cGU9IkFtYmllbnRMaWdodCI7dGhpcy5jYXN0U2hhZG93PXZvaWQgMH1mdW5jdGlvbiBBZChhLGIsYyxkKXttYS5jYWxsKHRoaXMsYSxiKTt0aGlzLnR5cGU9IlJlY3RBcmVhTGlnaHQiO3RoaXMucG9zaXRpb24uc2V0KDAsMSwwKTt0aGlzLnVwZGF0ZU1hdHJpeCgpO3RoaXMud2lkdGg9dm9pZCAwIT09Yz9jOjEwO3RoaXMuaGVpZ2h0PXZvaWQgMCE9PWQ/ZDoxMH1mdW5jdGlvbiBEYShhLGIsYyxkKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz0KYTt0aGlzLl9jYWNoZWRJbmRleD0wO3RoaXMucmVzdWx0QnVmZmVyPXZvaWQgMCE9PWQ/ZDpuZXcgYi5jb25zdHJ1Y3RvcihjKTt0aGlzLnNhbXBsZVZhbHVlcz1iO3RoaXMudmFsdWVTaXplPWN9ZnVuY3Rpb24gQmQoYSxiLGMsZCl7RGEuY2FsbCh0aGlzLGEsYixjLGQpO3RoaXMuX29mZnNldE5leHQ9dGhpcy5fd2VpZ2h0TmV4dD10aGlzLl9vZmZzZXRQcmV2PXRoaXMuX3dlaWdodFByZXY9LTB9ZnVuY3Rpb24gV2MoYSxiLGMsZCl7RGEuY2FsbCh0aGlzLGEsYixjLGQpfWZ1bmN0aW9uIENkKGEsYixjLGQpe0RhLmNhbGwodGhpcyxhLGIsYyxkKX1mdW5jdGlvbiB2YihhLGIsYyxkKXtpZih2b2lkIDA9PT1hKXRocm93IEVycm9yKCJ0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCIpO2lmKHZvaWQgMD09PWJ8fDA9PT1iLmxlbmd0aCl0aHJvdyBFcnJvcigibm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrYSk7dGhpcy5uYW1lPWE7dGhpcy50aW1lcz12YS5jb252ZXJ0QXJyYXkoYix0aGlzLlRpbWVCdWZmZXJUeXBlKTsKdGhpcy52YWx1ZXM9dmEuY29udmVydEFycmF5KGMsdGhpcy5WYWx1ZUJ1ZmZlclR5cGUpO3RoaXMuc2V0SW50ZXJwb2xhdGlvbihkfHx0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKTt0aGlzLnZhbGlkYXRlKCk7dGhpcy5vcHRpbWl6ZSgpfWZ1bmN0aW9uIGVjKGEsYixjLGQpe3ZiLmNhbGwodGhpcyxhLGIsYyxkKX1mdW5jdGlvbiBEZChhLGIsYyxkKXtEYS5jYWxsKHRoaXMsYSxiLGMsZCl9ZnVuY3Rpb24gWGMoYSxiLGMsZCl7dmIuY2FsbCh0aGlzLGEsYixjLGQpfWZ1bmN0aW9uIGZjKGEsYixjLGQpe3ZiLmNhbGwodGhpcyxhLGIsYyxkKX1mdW5jdGlvbiBFZChhLGIsYyxkKXt2Yi5jYWxsKHRoaXMsYSxiLGMsZCl9ZnVuY3Rpb24gRmQoYSxiLGMpe3ZiLmNhbGwodGhpcyxhLGIsYyl9ZnVuY3Rpb24gR2QoYSxiLGMsZCl7dmIuY2FsbCh0aGlzLGEsYixjLGQpfWZ1bmN0aW9uIHdiKGEsYixjLGQpe3ZiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBCYShhLGIsYyl7dGhpcy5uYW1lPQphO3RoaXMudHJhY2tzPWM7dGhpcy5kdXJhdGlvbj12b2lkIDAhPT1iP2I6LTE7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7MD50aGlzLmR1cmF0aW9uJiZ0aGlzLnJlc2V0RHVyYXRpb24oKTt0aGlzLm9wdGltaXplKCl9ZnVuY3Rpb24gSGQoYSl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWE/YTpBYTt0aGlzLnRleHR1cmVzPXt9fWZ1bmN0aW9uIGJlKGEpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1hP2E6QWF9ZnVuY3Rpb24gZ2MoKXt0aGlzLm9uTG9hZFN0YXJ0PWZ1bmN0aW9uKCl7fTt0aGlzLm9uTG9hZFByb2dyZXNzPWZ1bmN0aW9uKCl7fTt0aGlzLm9uTG9hZENvbXBsZXRlPWZ1bmN0aW9uKCl7fX1mdW5jdGlvbiBjZShhKXsiYm9vbGVhbiI9PT10eXBlb2YgYSYmKGNvbnNvbGUud2FybigiVEhSRUUuSlNPTkxvYWRlcjogc2hvd1N0YXR1cyBwYXJhbWV0ZXIgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGNvbnN0cnVjdG9yLiIpLGE9dm9pZCAwKTt0aGlzLm1hbmFnZXI9dm9pZCAwIT09CmE/YTpBYTt0aGlzLndpdGhDcmVkZW50aWFscz0hMX1mdW5jdGlvbiBSZShhKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09YT9hOkFhO3RoaXMudGV4dHVyZVBhdGg9IiJ9ZnVuY3Rpb24gU2UoYSxiLGMsZCxlKXtiPS41KihkLWIpO2U9LjUqKGUtYyk7dmFyIGY9YSphO3JldHVybigyKmMtMipkK2IrZSkqYSpmKygtMypjKzMqZC0yKmItZSkqZitiKmErY31mdW5jdGlvbiB4YihhLGIsYyxkKXt2YXIgZT0xLWE7cmV0dXJuIGUqZSpiKzIqKDEtYSkqYSpjK2EqYSpkfWZ1bmN0aW9uIHliKGEsYixjLGQsZSl7dmFyIGY9MS1hLGc9MS1hO3JldHVybiBmKmYqZipiKzMqZypnKmEqYyszKigxLWEpKmEqYSpkK2EqYSphKmV9ZnVuY3Rpb24gbmEoKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDB9ZnVuY3Rpb24gU2EoYSxiKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDA7dGhpcy52MT1hO3RoaXMudjI9Yn1mdW5jdGlvbiBZYygpe3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMDt0aGlzLmN1cnZlcz0KW107dGhpcy5hdXRvQ2xvc2U9ITF9ZnVuY3Rpb24gWGEoYSxiLGMsZCxlLGYsZyxoKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDA7dGhpcy5hWD1hO3RoaXMuYVk9Yjt0aGlzLnhSYWRpdXM9Yzt0aGlzLnlSYWRpdXM9ZDt0aGlzLmFTdGFydEFuZ2xlPWU7dGhpcy5hRW5kQW5nbGU9Zjt0aGlzLmFDbG9ja3dpc2U9Zzt0aGlzLmFSb3RhdGlvbj1ofHwwfWZ1bmN0aW9uIHpiKGEpe3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMDt0aGlzLnBvaW50cz12b2lkIDA9PT1hP1tdOmF9ZnVuY3Rpb24gaGMoYSxiLGMsZCl7dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwO3RoaXMudjA9YTt0aGlzLnYxPWI7dGhpcy52Mj1jO3RoaXMudjM9ZH1mdW5jdGlvbiBpYyhhLGIsYyl7dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwO3RoaXMudjA9YTt0aGlzLnYxPWI7dGhpcy52Mj1jfWZ1bmN0aW9uIFpjKGEpe1ljLmNhbGwodGhpcyk7dGhpcy5jdXJyZW50UG9pbnQ9bmV3IEQ7YSYmdGhpcy5mcm9tUG9pbnRzKGEpfQpmdW5jdGlvbiBBYigpe1pjLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmhvbGVzPVtdfWZ1bmN0aW9uIGRlKCl7dGhpcy5zdWJQYXRocz1bXTt0aGlzLmN1cnJlbnRQYXRoPW51bGx9ZnVuY3Rpb24gZWUoYSl7dGhpcy5kYXRhPWF9ZnVuY3Rpb24gVGUoYSl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWE/YTpBYX1mdW5jdGlvbiBmZShhKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09YT9hOkFhfWZ1bmN0aW9uIFVlKCl7dGhpcy50eXBlPSJTdGVyZW9DYW1lcmEiO3RoaXMuYXNwZWN0PTE7dGhpcy5leWVTZXA9LjA2NDt0aGlzLmNhbWVyYUw9bmV3IHhhO3RoaXMuY2FtZXJhTC5sYXllcnMuZW5hYmxlKDEpO3RoaXMuY2FtZXJhTC5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMuY2FtZXJhUj1uZXcgeGE7dGhpcy5jYW1lcmFSLmxheWVycy5lbmFibGUoMik7dGhpcy5jYW1lcmFSLm1hdHJpeEF1dG9VcGRhdGU9ITF9ZnVuY3Rpb24gSWQoYSxiLGMpe0IuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN1YmVDYW1lcmEiOwp2YXIgZD1uZXcgeGEoOTAsMSxhLGIpO2QudXAuc2V0KDAsLTEsMCk7ZC5sb29rQXQobmV3IHAoMSwwLDApKTt0aGlzLmFkZChkKTt2YXIgZT1uZXcgeGEoOTAsMSxhLGIpO2UudXAuc2V0KDAsLTEsMCk7ZS5sb29rQXQobmV3IHAoLTEsMCwwKSk7dGhpcy5hZGQoZSk7dmFyIGY9bmV3IHhhKDkwLDEsYSxiKTtmLnVwLnNldCgwLDAsMSk7Zi5sb29rQXQobmV3IHAoMCwxLDApKTt0aGlzLmFkZChmKTt2YXIgZz1uZXcgeGEoOTAsMSxhLGIpO2cudXAuc2V0KDAsMCwtMSk7Zy5sb29rQXQobmV3IHAoMCwtMSwwKSk7dGhpcy5hZGQoZyk7dmFyIGg9bmV3IHhhKDkwLDEsYSxiKTtoLnVwLnNldCgwLC0xLDApO2gubG9va0F0KG5ldyBwKDAsMCwxKSk7dGhpcy5hZGQoaCk7dmFyIGs9bmV3IHhhKDkwLDEsYSxiKTtrLnVwLnNldCgwLC0xLDApO2subG9va0F0KG5ldyBwKDAsMCwtMSkpO3RoaXMuYWRkKGspO3RoaXMucmVuZGVyVGFyZ2V0PW5ldyBFYihjLGMse2Zvcm1hdDoxMDIyLG1hZ0ZpbHRlcjoxMDA2LAptaW5GaWx0ZXI6MTAwNn0pO3RoaXMucmVuZGVyVGFyZ2V0LnRleHR1cmUubmFtZT0iQ3ViZUNhbWVyYSI7dGhpcy51cGRhdGVDdWJlTWFwPWZ1bmN0aW9uKGEsYil7bnVsbD09PXRoaXMucGFyZW50JiZ0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCk7dmFyIGM9dGhpcy5yZW5kZXJUYXJnZXQsbj1jLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO2MudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITE7Yy5hY3RpdmVDdWJlRmFjZT0wO2EucmVuZGVyKGIsZCxjKTtjLmFjdGl2ZUN1YmVGYWNlPTE7YS5yZW5kZXIoYixlLGMpO2MuYWN0aXZlQ3ViZUZhY2U9MjthLnJlbmRlcihiLGYsYyk7Yy5hY3RpdmVDdWJlRmFjZT0zO2EucmVuZGVyKGIsZyxjKTtjLmFjdGl2ZUN1YmVGYWNlPTQ7YS5yZW5kZXIoYixoLGMpO2MudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9bjtjLmFjdGl2ZUN1YmVGYWNlPTU7YS5yZW5kZXIoYixrLGMpO2Euc2V0UmVuZGVyVGFyZ2V0KG51bGwpfX1mdW5jdGlvbiBnZShhKXt4YS5jYWxsKHRoaXMpOwp0aGlzLmVuYWJsZWQ9ITE7dGhpcy5jYW1lcmFzPWF8fFtdfWZ1bmN0aW9uIGhlKCl7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQXVkaW9MaXN0ZW5lciI7dGhpcy5jb250ZXh0PWllLmdldENvbnRleHQoKTt0aGlzLmdhaW49dGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTt0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO3RoaXMuZmlsdGVyPW51bGx9ZnVuY3Rpb24gamMoYSl7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQXVkaW8iO3RoaXMuY29udGV4dD1hLmNvbnRleHQ7dGhpcy5nYWluPXRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7dGhpcy5nYWluLmNvbm5lY3QoYS5nZXRJbnB1dCgpKTt0aGlzLmF1dG9wbGF5PSExO3RoaXMuYnVmZmVyPW51bGw7dGhpcy5sb29wPSExO3RoaXMuc3RhcnRUaW1lPTA7dGhpcy5wbGF5YmFja1JhdGU9MTt0aGlzLmlzUGxheWluZz0hMTt0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMDt0aGlzLnNvdXJjZVR5cGU9ImVtcHR5IjsKdGhpcy5maWx0ZXJzPVtdfWZ1bmN0aW9uIGplKGEpe2pjLmNhbGwodGhpcyxhKTt0aGlzLnBhbm5lcj10aGlzLmNvbnRleHQuY3JlYXRlUGFubmVyKCk7dGhpcy5wYW5uZXIuY29ubmVjdCh0aGlzLmdhaW4pfWZ1bmN0aW9uIGtlKGEsYil7dGhpcy5hbmFseXNlcj1hLmNvbnRleHQuY3JlYXRlQW5hbHlzZXIoKTt0aGlzLmFuYWx5c2VyLmZmdFNpemU9dm9pZCAwIT09Yj9iOjIwNDg7dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KHRoaXMuYW5hbHlzZXIuZnJlcXVlbmN5QmluQ291bnQpO2EuZ2V0T3V0cHV0KCkuY29ubmVjdCh0aGlzLmFuYWx5c2VyKX1mdW5jdGlvbiBsZShhLGIsYyl7dGhpcy5iaW5kaW5nPWE7dGhpcy52YWx1ZVNpemU9YzthPUZsb2F0NjRBcnJheTtzd2l0Y2goYil7Y2FzZSAicXVhdGVybmlvbiI6Yj10aGlzLl9zbGVycDticmVhaztjYXNlICJzdHJpbmciOmNhc2UgImJvb2wiOmE9QXJyYXk7Yj10aGlzLl9zZWxlY3Q7YnJlYWs7ZGVmYXVsdDpiPXRoaXMuX2xlcnB9dGhpcy5idWZmZXI9Cm5ldyBhKDQqYyk7dGhpcy5fbWl4QnVmZmVyUmVnaW9uPWI7dGhpcy5yZWZlcmVuY2VDb3VudD10aGlzLnVzZUNvdW50PXRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wfWZ1bmN0aW9uIFZlKGEsYixjKXtjPWN8fG9hLnBhcnNlVHJhY2tOYW1lKGIpO3RoaXMuX3RhcmdldEdyb3VwPWE7dGhpcy5fYmluZGluZ3M9YS5zdWJzY3JpYmVfKGIsYyl9ZnVuY3Rpb24gb2EoYSxiLGMpe3RoaXMucGF0aD1iO3RoaXMucGFyc2VkUGF0aD1jfHxvYS5wYXJzZVRyYWNrTmFtZShiKTt0aGlzLm5vZGU9b2EuZmluZE5vZGUoYSx0aGlzLnBhcnNlZFBhdGgubm9kZU5hbWUpfHxhO3RoaXMucm9vdE5vZGU9YX1mdW5jdGlvbiBXZShhKXt0aGlzLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKTt0aGlzLl9vYmplY3RzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5uQ2FjaGVkT2JqZWN0c189MDt2YXIgYj17fTt0aGlzLl9pbmRpY2VzQnlVVUlEPWI7Zm9yKHZhciBjPTAsZD1hcmd1bWVudHMubGVuZ3RoO2MhPT0KZDsrK2MpYlthcmd1bWVudHNbY10udXVpZF09Yzt0aGlzLl9wYXRocz1bXTt0aGlzLl9wYXJzZWRQYXRocz1bXTt0aGlzLl9iaW5kaW5ncz1bXTt0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGg9e307dmFyIGU9dGhpczt0aGlzLnN0YXRzPXtvYmplY3RzOntnZXQgdG90YWwoKXtyZXR1cm4gZS5fb2JqZWN0cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0aGlzLnRvdGFsLWUubkNhY2hlZE9iamVjdHNffX0sZ2V0IGJpbmRpbmdzUGVyT2JqZWN0KCl7cmV0dXJuIGUuX2JpbmRpbmdzLmxlbmd0aH19fWZ1bmN0aW9uIFhlKGEsYixjKXt0aGlzLl9taXhlcj1hO3RoaXMuX2NsaXA9Yjt0aGlzLl9sb2NhbFJvb3Q9Y3x8bnVsbDthPWIudHJhY2tzO2I9YS5sZW5ndGg7Yz1BcnJheShiKTtmb3IodmFyIGQ9e2VuZGluZ1N0YXJ0OjI0MDAsZW5kaW5nRW5kOjI0MDB9LGU9MDtlIT09YjsrK2Upe3ZhciBmPWFbZV0uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7Y1tlXT1mO2Yuc2V0dGluZ3M9CmR9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncz1kO3RoaXMuX2ludGVycG9sYW50cz1jO3RoaXMuX3Byb3BlcnR5QmluZGluZ3M9QXJyYXkoYik7dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9dGhpcy5fYnlDbGlwQ2FjaGVJbmRleD10aGlzLl9jYWNoZUluZGV4PW51bGw7dGhpcy5sb29wPTIyMDE7dGhpcy5fbG9vcENvdW50PS0xO3RoaXMuX3N0YXJ0VGltZT1udWxsO3RoaXMudGltZT0wO3RoaXMuX2VmZmVjdGl2ZVdlaWdodD10aGlzLndlaWdodD10aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy50aW1lU2NhbGU9MTt0aGlzLnJlcGV0aXRpb25zPUluZmluaXR5O3RoaXMucGF1c2VkPSExO3RoaXMuZW5hYmxlZD0hMDt0aGlzLmNsYW1wV2hlbkZpbmlzaGVkPSExO3RoaXMuemVyb1Nsb3BlQXRFbmQ9dGhpcy56ZXJvU2xvcGVBdFN0YXJ0PSEwfWZ1bmN0aW9uIFllKGEpe3RoaXMuX3Jvb3Q9YTt0aGlzLl9pbml0TWVtb3J5TWFuYWdlcigpOwp0aGlzLnRpbWU9dGhpcy5fYWNjdUluZGV4PTA7dGhpcy50aW1lU2NhbGU9MX1mdW5jdGlvbiBKZChhLGIpeyJzdHJpbmciPT09dHlwZW9mIGEmJihjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IFR5cGUgcGFyYW1ldGVyIGlzIG5vIGxvbmdlciBuZWVkZWQuIiksYT1iKTt0aGlzLnZhbHVlPWF9ZnVuY3Rpb24gbWUoKXtJLmNhbGwodGhpcyk7dGhpcy50eXBlPSJJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSI7dGhpcy5tYXhJbnN0YW5jZWRDb3VudD12b2lkIDB9ZnVuY3Rpb24gbmUoYSxiLGMsZCl7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7dGhpcy5kYXRhPWE7dGhpcy5pdGVtU2l6ZT1iO3RoaXMub2Zmc2V0PWM7dGhpcy5ub3JtYWxpemVkPSEwPT09ZH1mdW5jdGlvbiBrYyhhLGIpe3RoaXMudXVpZD1ZLmdlbmVyYXRlVVVJRCgpO3RoaXMuYXJyYXk9YTt0aGlzLnN0cmlkZT1iO3RoaXMuY291bnQ9dm9pZCAwIT09YT9hLmxlbmd0aC9iOjA7dGhpcy5keW5hbWljPSExO3RoaXMudXBkYXRlUmFuZ2U9CntvZmZzZXQ6MCxjb3VudDotMX07dGhpcy5vblVwbG9hZENhbGxiYWNrPWZ1bmN0aW9uKCl7fTt0aGlzLnZlcnNpb249MH1mdW5jdGlvbiBvZShhLGIsYyl7a2MuY2FsbCh0aGlzLGEsYik7dGhpcy5tZXNoUGVyQXR0cmlidXRlPWN8fDF9ZnVuY3Rpb24gcGUoYSxiLGMpe0wuY2FsbCh0aGlzLGEsYik7dGhpcy5tZXNoUGVyQXR0cmlidXRlPWN8fDF9ZnVuY3Rpb24gWmUoYSxiLGMsZCl7dGhpcy5yYXk9bmV3IGhiKGEsYik7dGhpcy5uZWFyPWN8fDA7dGhpcy5mYXI9ZHx8SW5maW5pdHk7dGhpcy5wYXJhbXM9e01lc2g6e30sTGluZTp7fSxMT0Q6e30sUG9pbnRzOnt0aHJlc2hvbGQ6MX0sU3ByaXRlOnt9fTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLnBhcmFtcyx7UG9pbnRDbG91ZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5SYXljYXN0ZXI6IHBhcmFtcy5Qb2ludENsb3VkIGhhcyBiZWVuIHJlbmFtZWQgdG8gcGFyYW1zLlBvaW50cy4iKTtyZXR1cm4gdGhpcy5Qb2ludHN9fX0pfQpmdW5jdGlvbiAkZShhLGIpe3JldHVybiBhLmRpc3RhbmNlLWIuZGlzdGFuY2V9ZnVuY3Rpb24gcWUoYSxiLGMsZCl7aWYoITEhPT1hLnZpc2libGUmJihhLnJheWNhc3QoYixjKSwhMD09PWQpKXthPWEuY2hpbGRyZW47ZD0wO2Zvcih2YXIgZT1hLmxlbmd0aDtkPGU7ZCsrKXFlKGFbZF0sYixjLCEwKX19ZnVuY3Rpb24gYWYoYSl7dGhpcy5hdXRvU3RhcnQ9dm9pZCAwIT09YT9hOiEwO3RoaXMuZWxhcHNlZFRpbWU9dGhpcy5vbGRUaW1lPXRoaXMuc3RhcnRUaW1lPTA7dGhpcy5ydW5uaW5nPSExfWZ1bmN0aW9uIGJmKGEsYixjKXt0aGlzLnJhZGl1cz12b2lkIDAhPT1hP2E6MTt0aGlzLnBoaT12b2lkIDAhPT1iP2I6MDt0aGlzLnRoZXRhPXZvaWQgMCE9PWM/YzowO3JldHVybiB0aGlzfWZ1bmN0aW9uIGNmKGEsYixjKXt0aGlzLnJhZGl1cz12b2lkIDAhPT1hP2E6MTt0aGlzLnRoZXRhPXZvaWQgMCE9PWI/YjowO3RoaXMueT12b2lkIDAhPT1jP2M6MDtyZXR1cm4gdGhpc31mdW5jdGlvbiByYShhLApiKXtDYS5jYWxsKHRoaXMsYSxiKTt0aGlzLmFuaW1hdGlvbnNNYXA9e307dGhpcy5hbmltYXRpb25zTGlzdD1bXTt2YXIgYz10aGlzLmdlb21ldHJ5Lm1vcnBoVGFyZ2V0cy5sZW5ndGg7dGhpcy5jcmVhdGVBbmltYXRpb24oIl9fZGVmYXVsdCIsMCxjLTEsYy8xKTt0aGlzLnNldEFuaW1hdGlvbldlaWdodCgiX19kZWZhdWx0IiwxKX1mdW5jdGlvbiAkYyhhKXtCLmNhbGwodGhpcyk7dGhpcy5tYXRlcmlhbD1hO3RoaXMucmVuZGVyPWZ1bmN0aW9uKGEpe319ZnVuY3Rpb24gYWQoYSxiLGMsZCl7dGhpcy5vYmplY3Q9YTt0aGlzLnNpemU9dm9pZCAwIT09Yj9iOjE7YT12b2lkIDAhPT1jP2M6MTY3MTE2ODA7ZD12b2lkIDAhPT1kP2Q6MTtiPTA7KGM9dGhpcy5vYmplY3QuZ2VvbWV0cnkpJiZjLmlzR2VvbWV0cnk/Yj0zKmMuZmFjZXMubGVuZ3RoOmMmJmMuaXNCdWZmZXJHZW9tZXRyeSYmKGI9Yy5hdHRyaWJ1dGVzLm5vcm1hbC5jb3VudCk7Yz1uZXcgSTtiPW5ldyBDKDYqYiwzKTtjLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLApiKTtkYS5jYWxsKHRoaXMsYyxuZXcgaGEoe2NvbG9yOmEsbGluZXdpZHRoOmR9KSk7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gbGMoYSl7Qi5jYWxsKHRoaXMpO3RoaXMubGlnaHQ9YTt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7dGhpcy5tYXRyaXg9YS5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7YT1uZXcgSTtmb3IodmFyIGI9WzAsMCwwLDAsMCwxLDAsMCwwLDEsMCwxLDAsMCwwLC0xLDAsMSwwLDAsMCwwLDEsMSwwLDAsMCwwLC0xLDFdLGM9MCxkPTE7MzI+YztjKyssZCsrKXt2YXIgZT1jLzMyKk1hdGguUEkqMixmPWQvMzIqTWF0aC5QSSoyO2IucHVzaChNYXRoLmNvcyhlKSxNYXRoLnNpbihlKSwxLE1hdGguY29zKGYpLE1hdGguc2luKGYpLDEpfWEuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMoYiwzKSk7Yj1uZXcgaGEoe2ZvZzohMX0pO3RoaXMuY29uZT1uZXcgZGEoYSxiKTt0aGlzLmFkZCh0aGlzLmNvbmUpOwp0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIG1jKGEpe3RoaXMuYm9uZXM9dGhpcy5nZXRCb25lTGlzdChhKTtmb3IodmFyIGI9bmV3IEksYz1bXSxkPVtdLGU9bmV3IEgoMCwwLDEpLGY9bmV3IEgoMCwxLDApLGc9MDtnPHRoaXMuYm9uZXMubGVuZ3RoO2crKyl7dmFyIGg9dGhpcy5ib25lc1tnXTtoLnBhcmVudCYmaC5wYXJlbnQuaXNCb25lJiYoYy5wdXNoKDAsMCwwKSxjLnB1c2goMCwwLDApLGQucHVzaChlLnIsZS5nLGUuYiksZC5wdXNoKGYucixmLmcsZi5iKSl9Yi5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhjLDMpKTtiLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBDKGQsMykpO2M9bmV3IGhhKHt2ZXJ0ZXhDb2xvcnM6MixkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0cmFuc3BhcmVudDohMH0pO2RhLmNhbGwodGhpcyxiLGMpO3RoaXMucm9vdD1hO3RoaXMubWF0cml4PWEubWF0cml4V29ybGQ7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gbmMoYSwKYil7dGhpcy5saWdodD1hO3RoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTt2YXIgYz1uZXcgbmIoYiw0LDIpLGQ9bmV3IE5hKHt3aXJlZnJhbWU6ITAsZm9nOiExfSk7ZC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpO0NhLmNhbGwodGhpcyxjLGQpO3RoaXMubWF0cml4PXRoaXMubGlnaHQubWF0cml4V29ybGQ7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExfWZ1bmN0aW9uIG9jKGEpe0IuY2FsbCh0aGlzKTt0aGlzLmxpZ2h0PWE7dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO3RoaXMubWF0cml4PWEubWF0cml4V29ybGQ7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO2E9bmV3IGhhKHtjb2xvcjphLmNvbG9yfSk7dmFyIGI9bmV3IEk7Yi5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgTChuZXcgRmxvYXQzMkFycmF5KDE1KSwzKSk7dGhpcy5hZGQobmV3IHlhKGIsYSkpO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gcGMoYSxiKXtCLmNhbGwodGhpcyk7dGhpcy5saWdodD0KYTt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7dGhpcy5tYXRyaXg9YS5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7dmFyIGM9bmV3IG1iKGIpO2Mucm90YXRlWSguNSpNYXRoLlBJKTt2YXIgZD1uZXcgTmEoe3ZlcnRleENvbG9yczoyLHdpcmVmcmFtZTohMH0pLGU9Yy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIiksZT1uZXcgRmxvYXQzMkFycmF5KDMqZS5jb3VudCk7Yy5hZGRBdHRyaWJ1dGUoImNvbG9yIixuZXcgTChlLDMpKTt0aGlzLmFkZChuZXcgQ2EoYyxkKSk7dGhpcy51cGRhdGUoKX1mdW5jdGlvbiBiZChhLGIsYyxkKXthPWF8fDEwO2I9Ynx8MTA7Yz1uZXcgSCh2b2lkIDAhPT1jP2M6NDQ3MzkyNCk7ZD1uZXcgSCh2b2lkIDAhPT1kP2Q6ODk0Nzg0OCk7dmFyIGU9Yi8yLGY9YS9iLGc9YS8yO2E9W107Zm9yKHZhciBoPVtdLGs9MCxtPTAsdT0tZztrPD1iO2srKyx1Kz1mKXthLnB1c2goLWcsMCx1LGcsMCx1KTthLnB1c2godSwwLC1nLHUsMCxnKTsKdmFyIGw9az09PWU/YzpkO2wudG9BcnJheShoLG0pO20rPTM7bC50b0FycmF5KGgsbSk7bSs9MztsLnRvQXJyYXkoaCxtKTttKz0zO2wudG9BcnJheShoLG0pO20rPTN9Yj1uZXcgSTtiLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGEsMykpO2IuYWRkQXR0cmlidXRlKCJjb2xvciIsbmV3IEMoaCwzKSk7Yz1uZXcgaGEoe3ZlcnRleENvbG9yczoyfSk7ZGEuY2FsbCh0aGlzLGIsYyl9ZnVuY3Rpb24gS2QoYSxiLGMsZCxlLGYpe2E9YXx8MTA7Yj1ifHwxNjtjPWN8fDg7ZD1kfHw2NDtlPW5ldyBIKHZvaWQgMCE9PWU/ZTo0NDczOTI0KTtmPW5ldyBIKHZvaWQgMCE9PWY/Zjo4OTQ3ODQ4KTt2YXIgZz1bXSxoPVtdLGssbSx1LGwsbjtmb3IodT0wO3U8PWI7dSsrKW09dS9iKjIqTWF0aC5QSSxrPU1hdGguc2luKG0pKmEsbT1NYXRoLmNvcyhtKSphLGcucHVzaCgwLDAsMCksZy5wdXNoKGssMCxtKSxuPXUmMT9lOmYsaC5wdXNoKG4ucixuLmcsbi5iKSxoLnB1c2gobi5yLG4uZyxuLmIpOwpmb3IodT0wO3U8PWM7dSsrKWZvcihuPXUmMT9lOmYsbD1hLWEvYyp1LGI9MDtiPGQ7YisrKW09Yi9kKjIqTWF0aC5QSSxrPU1hdGguc2luKG0pKmwsbT1NYXRoLmNvcyhtKSpsLGcucHVzaChrLDAsbSksaC5wdXNoKG4ucixuLmcsbi5iKSxtPShiKzEpL2QqMipNYXRoLlBJLGs9TWF0aC5zaW4obSkqbCxtPU1hdGguY29zKG0pKmwsZy5wdXNoKGssMCxtKSxoLnB1c2gobi5yLG4uZyxuLmIpO2E9bmV3IEk7YS5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhnLDMpKTthLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBDKGgsMykpO2c9bmV3IGhhKHt2ZXJ0ZXhDb2xvcnM6Mn0pO2RhLmNhbGwodGhpcyxhLGcpfWZ1bmN0aW9uIGNkKGEsYixjLGQpe3RoaXMub2JqZWN0PWE7dGhpcy5zaXplPXZvaWQgMCE9PWI/YjoxO2E9dm9pZCAwIT09Yz9jOjE2Nzc2OTYwO2Q9dm9pZCAwIT09ZD9kOjE7Yj0wOyhjPXRoaXMub2JqZWN0Lmdlb21ldHJ5KSYmYy5pc0dlb21ldHJ5P2I9Yy5mYWNlcy5sZW5ndGg6CmNvbnNvbGUud2FybigiVEhSRUUuRmFjZU5vcm1hbHNIZWxwZXI6IG9ubHkgVEhSRUUuR2VvbWV0cnkgaXMgc3VwcG9ydGVkLiBVc2UgVEhSRUUuVmVydGV4Tm9ybWFsc0hlbHBlciwgaW5zdGVhZC4iKTtjPW5ldyBJO2I9bmV3IEMoNipiLDMpO2MuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsYik7ZGEuY2FsbCh0aGlzLGMsbmV3IGhhKHtjb2xvcjphLGxpbmV3aWR0aDpkfSkpO3RoaXMubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIHFjKGEsYil7Qi5jYWxsKHRoaXMpO3RoaXMubGlnaHQ9YTt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7dGhpcy5tYXRyaXg9YS5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7dm9pZCAwPT09YiYmKGI9MSk7dmFyIGM9bmV3IEk7Yy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhbLWIsYiwwLGIsYiwwLGIsLWIsMCwtYiwtYiwwLC1iLGIsMF0sMykpO3ZhciBkPW5ldyBoYSh7Zm9nOiExfSk7CnRoaXMuYWRkKG5ldyB5YShjLGQpKTtjPW5ldyBJO2MuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMoWzAsMCwwLDAsMCwxXSwzKSk7dGhpcy5hZGQobmV3IHlhKGMsZCkpO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gZGQoYSl7ZnVuY3Rpb24gYihhLGIsZCl7YyhhLGQpO2MoYixkKX1mdW5jdGlvbiBjKGEsYil7Zi5wdXNoKDAsMCwwKTtnLnB1c2goYi5yLGIuZyxiLmIpO3ZvaWQgMD09PWhbYV0mJihoW2FdPVtdKTtoW2FdLnB1c2goZi5sZW5ndGgvMy0xKX12YXIgZD1uZXcgSSxlPW5ldyBoYSh7Y29sb3I6MTY3NzcyMTUsdmVydGV4Q29sb3JzOjF9KSxmPVtdLGc9W10saD17fSxrPW5ldyBIKDE2NzU1MjAwKSxtPW5ldyBIKDE2NzExNjgwKSx1PW5ldyBIKDQzNzc1KSxsPW5ldyBIKDE2Nzc3MjE1KSxuPW5ldyBIKDMzNTU0NDMpO2IoIm4xIiwibjIiLGspO2IoIm4yIiwibjQiLGspO2IoIm40IiwibjMiLGspO2IoIm4zIiwibjEiLGspO2IoImYxIiwiZjIiLGspO2IoImYyIiwiZjQiLAprKTtiKCJmNCIsImYzIixrKTtiKCJmMyIsImYxIixrKTtiKCJuMSIsImYxIixrKTtiKCJuMiIsImYyIixrKTtiKCJuMyIsImYzIixrKTtiKCJuNCIsImY0IixrKTtiKCJwIiwibjEiLG0pO2IoInAiLCJuMiIsbSk7YigicCIsIm4zIixtKTtiKCJwIiwibjQiLG0pO2IoInUxIiwidTIiLHUpO2IoInUyIiwidTMiLHUpO2IoInUzIiwidTEiLHUpO2IoImMiLCJ0IixsKTtiKCJwIiwiYyIsbik7YigiY24xIiwiY24yIixuKTtiKCJjbjMiLCJjbjQiLG4pO2IoImNmMSIsImNmMiIsbik7YigiY2YzIiwiY2Y0IixuKTtkLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGYsMykpO2QuYWRkQXR0cmlidXRlKCJjb2xvciIsbmV3IEMoZywzKSk7ZGEuY2FsbCh0aGlzLGQsZSk7dGhpcy5jYW1lcmE9YTt0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4JiZ0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7dGhpcy5tYXRyaXg9YS5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9CiExO3RoaXMucG9pbnRNYXA9aDt0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIEJiKGEsYil7dGhpcy5vYmplY3Q9YTt2b2lkIDA9PT1iJiYoYj0xNjc3Njk2MCk7dmFyIGM9bmV3IFVpbnQxNkFycmF5KFswLDEsMSwyLDIsMywzLDAsNCw1LDUsNiw2LDcsNyw0LDAsNCwxLDUsMiw2LDMsN10pLGQ9bmV3IEZsb2F0MzJBcnJheSgyNCksZT1uZXcgSTtlLnNldEluZGV4KG5ldyBMKGMsMSkpO2UuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEwoZCwzKSk7ZGEuY2FsbCh0aGlzLGUsbmV3IGhhKHtjb2xvcjpifSkpO3RoaXMubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIENiKGEsYixjLGQsZSxmKXtCLmNhbGwodGhpcyk7dm9pZCAwPT09ZCYmKGQ9MTY3NzY5NjApO3ZvaWQgMD09PWMmJihjPTEpO3ZvaWQgMD09PWUmJihlPS4yKmMpO3ZvaWQgMD09PWYmJihmPS4yKmUpO3ZvaWQgMD09PUxkJiYoTGQ9bmV3IEksTGQuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMoWzAsCjAsMCwwLDEsMF0sMykpLHJlPW5ldyBXYSgwLC41LDEsNSwxKSxyZS50cmFuc2xhdGUoMCwtLjUsMCkpO3RoaXMucG9zaXRpb24uY29weShiKTt0aGlzLmxpbmU9bmV3IHlhKExkLG5ldyBoYSh7Y29sb3I6ZH0pKTt0aGlzLmxpbmUubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLmFkZCh0aGlzLmxpbmUpO3RoaXMuY29uZT1uZXcgQ2EocmUsbmV3IE5hKHtjb2xvcjpkfSkpO3RoaXMuY29uZS5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMuYWRkKHRoaXMuY29uZSk7dGhpcy5zZXREaXJlY3Rpb24oYSk7dGhpcy5zZXRMZW5ndGgoYyxlLGYpfWZ1bmN0aW9uIE1kKGEpe2E9YXx8MTt2YXIgYj1bMCwwLDAsYSwwLDAsMCwwLDAsMCxhLDAsMCwwLDAsMCwwLGFdO2E9bmV3IEk7YS5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhiLDMpKTthLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBDKFsxLDAsMCwxLC42LDAsMCwxLDAsLjYsMSwwLDAsMCwxLDAsLjYsMV0sMykpO2I9bmV3IGhhKHt2ZXJ0ZXhDb2xvcnM6Mn0pOwpkYS5jYWxsKHRoaXMsYSxiKX1mdW5jdGlvbiBzZSgpe3ZhciBhPTAsYj0wLGM9MCxkPTA7cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKGUsZixnLGgsayl7ZT1rKihnLWUpO2g9ayooaC1mKTthPWY7Yj1lO2M9LTMqZiszKmctMiplLWg7ZD0yKmYtMipnK2UraH0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKGUsZixnLGgsayxtLHUpe2U9KChmLWUpL2stKGctZSkvKGsrbSkrKGctZikvbSkqbTtoPSgoZy1mKS9tLShoLWYpLyhtK3UpKyhoLWcpL3UpKm07YT1mO2I9ZTtjPS0zKmYrMypnLTIqZS1oO2Q9MipmLTIqZytlK2h9LGNhbGM6ZnVuY3Rpb24oZSl7dmFyIGY9ZSplO3JldHVybiBhK2IqZStjKmYrZCpmKmV9fX1mdW5jdGlvbiBKYShhKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDA7dGhpcy5wb2ludHM9YXx8W107dGhpcy5jbG9zZWQ9ITF9ZnVuY3Rpb24gZWQoYSxiLGMsZCl7dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwO3RoaXMudjA9YTt0aGlzLnYxPQpiO3RoaXMudjI9Yzt0aGlzLnYzPWR9ZnVuY3Rpb24gZmQoYSxiLGMpe3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMDt0aGlzLnYwPWE7dGhpcy52MT1iO3RoaXMudjI9Y31mdW5jdGlvbiBnZChhLGIpe3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMDt0aGlzLnYxPWE7dGhpcy52Mj1ifWZ1bmN0aW9uIE5kKGEsYixjLGQsZSxmKXtYYS5jYWxsKHRoaXMsYSxiLGMsYyxkLGUsZil9ZnVuY3Rpb24gZGYoYSl7Y29uc29sZS53YXJuKCJUSFJFRS5DbG9zZWRTcGxpbmVDdXJ2ZTMgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkNhdG11bGxSb21DdXJ2ZTMgaW5zdGVhZC4iKTtKYS5jYWxsKHRoaXMsYSk7dGhpcy50eXBlPSJjYXRtdWxscm9tIjt0aGlzLmNsb3NlZD0hMH1mdW5jdGlvbiBlZihhKXtjb25zb2xlLndhcm4oIlRIUkVFLlNwbGluZUN1cnZlMyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ2F0bXVsbFJvbUN1cnZlMyBpbnN0ZWFkLiIpO0phLmNhbGwodGhpcywKYSk7dGhpcy50eXBlPSJjYXRtdWxscm9tIn1mdW5jdGlvbiB0ZShhKXtjb25zb2xlLndhcm4oIlRIUkVFLlNwbGluZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuQ2F0bXVsbFJvbUN1cnZlMyBpbnN0ZWFkLiIpO0phLmNhbGwodGhpcyxhKTt0aGlzLnR5cGU9ImNhdG11bGxyb20ifXZvaWQgMD09PU51bWJlci5FUFNJTE9OJiYoTnVtYmVyLkVQU0lMT049TWF0aC5wb3coMiwtNTIpKTt2b2lkIDA9PT1OdW1iZXIuaXNJbnRlZ2VyJiYoTnVtYmVyLmlzSW50ZWdlcj1mdW5jdGlvbihhKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBhJiZpc0Zpbml0ZShhKSYmTWF0aC5mbG9vcihhKT09PWF9KTt2b2lkIDA9PT1NYXRoLnNpZ24mJihNYXRoLnNpZ249ZnVuY3Rpb24oYSl7cmV0dXJuIDA+YT8tMTowPGE/MTorYX0pO3ZvaWQgMD09PUZ1bmN0aW9uLnByb3RvdHlwZS5uYW1lJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCJuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoKS5tYXRjaCgvXlxzKmZ1bmN0aW9uXHMqKFteXChcc10qKS8pWzFdfX0pOwp2b2lkIDA9PT1PYmplY3QuYXNzaWduJiZmdW5jdGlvbigpe09iamVjdC5hc3NpZ249ZnVuY3Rpb24oYSl7aWYodm9pZCAwPT09YXx8bnVsbD09PWEpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Iik7Zm9yKHZhciBiPU9iamVjdChhKSxjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7dmFyIGQ9YXJndW1lbnRzW2NdO2lmKHZvaWQgMCE9PWQmJm51bGwhPT1kKWZvcih2YXIgZSBpbiBkKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLGUpJiYoYltlXT1kW2VdKX1yZXR1cm4gYn19KCk7T2JqZWN0LmFzc2lnbihzYS5wcm90b3R5cGUse2FkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMmJih0aGlzLl9saXN0ZW5lcnM9e30pO3ZhciBjPXRoaXMuX2xpc3RlbmVyczt2b2lkIDA9PT1jW2FdJiYoY1thXT1bXSk7LTE9PT1jW2FdLmluZGV4T2YoYikmJmNbYV0ucHVzaChiKX0sCmhhc0V2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuITE7dmFyIGM9dGhpcy5fbGlzdGVuZXJzO3JldHVybiB2b2lkIDAhPT1jW2FdJiYtMSE9PWNbYV0uaW5kZXhPZihiKX0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe2lmKHZvaWQgMCE9PXRoaXMuX2xpc3RlbmVycyl7dmFyIGM9dGhpcy5fbGlzdGVuZXJzW2FdO2lmKHZvaWQgMCE9PWMpe3ZhciBkPWMuaW5kZXhPZihiKTstMSE9PWQmJmMuc3BsaWNlKGQsMSl9fX0sZGlzcGF0Y2hFdmVudDpmdW5jdGlvbihhKXtpZih2b2lkIDAhPT10aGlzLl9saXN0ZW5lcnMpe3ZhciBiPXRoaXMuX2xpc3RlbmVyc1thLnR5cGVdO2lmKHZvaWQgMCE9PWIpe2EudGFyZ2V0PXRoaXM7dmFyIGM9W10sZCxlPWIubGVuZ3RoO2ZvcihkPTA7ZDxlO2QrKyljW2RdPWJbZF07Zm9yKGQ9MDtkPGU7ZCsrKWNbZF0uY2FsbCh0aGlzLGEpfX19fSk7dmFyIFk9e0RFRzJSQUQ6TWF0aC5QSS8KMTgwLFJBRDJERUc6MTgwL01hdGguUEksZ2VuZXJhdGVVVUlEOmZ1bmN0aW9uKCl7dmFyIGE9IjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ii5zcGxpdCgiIiksYj1BcnJheSgzNiksYz0wLGQ7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7MzY+ZTtlKyspOD09PWV8fDEzPT09ZXx8MTg9PT1lfHwyMz09PWU/YltlXT0iLSI6MTQ9PT1lP2JbZV09IjQiOigyPj1jJiYoYz0zMzU1NDQzMisxNjc3NzIxNipNYXRoLnJhbmRvbSgpfDApLGQ9YyYxNSxjPj49NCxiW2VdPWFbMTk9PT1lP2QmM3w4OmRdKTtyZXR1cm4gYi5qb2luKCIiKX19KCksY2xhbXA6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBNYXRoLm1heChiLE1hdGgubWluKGMsYSkpfSxldWNsaWRlYW5Nb2R1bG86ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYSViK2IpJWJ9LG1hcExpbmVhcjpmdW5jdGlvbihhLGIsYyxkLGUpe3JldHVybiBkKyhhLWIpKihlLWQpLyhjLQpiKX0sbGVycDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuKDEtYykqYStjKmJ9LHNtb290aHN0ZXA6ZnVuY3Rpb24oYSxiLGMpe2lmKGE8PWIpcmV0dXJuIDA7aWYoYT49YylyZXR1cm4gMTthPShhLWIpLyhjLWIpO3JldHVybiBhKmEqKDMtMiphKX0sc21vb3RoZXJzdGVwOmZ1bmN0aW9uKGEsYixjKXtpZihhPD1iKXJldHVybiAwO2lmKGE+PWMpcmV0dXJuIDE7YT0oYS1iKS8oYy1iKTtyZXR1cm4gYSphKmEqKGEqKDYqYS0xNSkrMTApfSxyYW5kSW50OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGErTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihiLWErMSkpfSxyYW5kRmxvYXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYStNYXRoLnJhbmRvbSgpKihiLWEpfSxyYW5kRmxvYXRTcHJlYWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEqKC41LU1hdGgucmFuZG9tKCkpfSxkZWdUb1JhZDpmdW5jdGlvbihhKXtyZXR1cm4gYSpZLkRFRzJSQUR9LHJhZFRvRGVnOmZ1bmN0aW9uKGEpe3JldHVybiBhKlkuUkFEMkRFR30sCmlzUG93ZXJPZlR3bzpmdW5jdGlvbihhKXtyZXR1cm4gMD09PShhJmEtMSkmJjAhPT1hfSxuZWFyZXN0UG93ZXJPZlR3bzpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLnJvdW5kKE1hdGgubG9nKGEpL01hdGguTE4yKSl9LG5leHRQb3dlck9mVHdvOmZ1bmN0aW9uKGEpe2EtLTthfD1hPj4xO2F8PWE+PjI7YXw9YT4+NDthfD1hPj44O2F8PWE+PjE2O2ErKztyZXR1cm4gYX19O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEQucHJvdG90eXBlLHt3aWR0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMueD1hfX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy55PWF9fX0pO09iamVjdC5hc3NpZ24oRC5wcm90b3R5cGUse2lzVmVjdG9yMjohMCxzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLng9YTt0aGlzLnk9YjtyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueT0KdGhpcy54PWE7cmV0dXJuIHRoaXN9LHNldFg6ZnVuY3Rpb24oYSl7dGhpcy54PWE7cmV0dXJuIHRoaXN9LHNldFk6ZnVuY3Rpb24oYSl7dGhpcy55PWE7cmV0dXJuIHRoaXN9LHNldENvbXBvbmVudDpmdW5jdGlvbihhLGIpe3N3aXRjaChhKXtjYXNlIDA6dGhpcy54PWI7YnJlYWs7Y2FzZSAxOnRoaXMueT1iO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIithKTt9cmV0dXJuIHRoaXN9LGdldENvbXBvbmVudDpmdW5jdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK2EpO319LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnkpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMueD1hLng7dGhpcy55PWEueTtyZXR1cm4gdGhpc30sYWRkOmZ1bmN0aW9uKGEsCmIpe2lmKHZvaWQgMCE9PWIpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyhhLGIpO3RoaXMueCs9YS54O3RoaXMueSs9YS55O3JldHVybiB0aGlzfSxhZGRTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy54Kz1hO3RoaXMueSs9YTtyZXR1cm4gdGhpc30sYWRkVmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngrYi54O3RoaXMueT1hLnkrYi55O3JldHVybiB0aGlzfSxhZGRTY2FsZWRWZWN0b3I6ZnVuY3Rpb24oYSxiKXt0aGlzLngrPWEueCpiO3RoaXMueSs9YS55KmI7cmV0dXJuIHRoaXN9LHN1YjpmdW5jdGlvbihhLGIpe2lmKHZvaWQgMCE9PWIpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLAp0aGlzLnN1YlZlY3RvcnMoYSxiKTt0aGlzLngtPWEueDt0aGlzLnktPWEueTtyZXR1cm4gdGhpc30sc3ViU2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueC09YTt0aGlzLnktPWE7cmV0dXJuIHRoaXN9LHN1YlZlY3RvcnM6ZnVuY3Rpb24oYSxiKXt0aGlzLng9YS54LWIueDt0aGlzLnk9YS55LWIueTtyZXR1cm4gdGhpc30sbXVsdGlwbHk6ZnVuY3Rpb24oYSl7dGhpcy54Kj1hLng7dGhpcy55Kj1hLnk7cmV0dXJuIHRoaXN9LG11bHRpcGx5U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueCo9YTt0aGlzLnkqPWE7cmV0dXJuIHRoaXN9LGRpdmlkZTpmdW5jdGlvbihhKXt0aGlzLngvPWEueDt0aGlzLnkvPWEueTtyZXR1cm4gdGhpc30sZGl2aWRlU2NhbGFyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvYSl9LG1pbjpmdW5jdGlvbihhKXt0aGlzLng9TWF0aC5taW4odGhpcy54LGEueCk7dGhpcy55PU1hdGgubWluKHRoaXMueSxhLnkpO3JldHVybiB0aGlzfSxtYXg6ZnVuY3Rpb24oYSl7dGhpcy54PQpNYXRoLm1heCh0aGlzLngsYS54KTt0aGlzLnk9TWF0aC5tYXgodGhpcy55LGEueSk7cmV0dXJuIHRoaXN9LGNsYW1wOmZ1bmN0aW9uKGEsYil7dGhpcy54PU1hdGgubWF4KGEueCxNYXRoLm1pbihiLngsdGhpcy54KSk7dGhpcy55PU1hdGgubWF4KGEueSxNYXRoLm1pbihiLnksdGhpcy55KSk7cmV0dXJuIHRoaXN9LGNsYW1wU2NhbGFyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEQsYj1uZXcgRDtyZXR1cm4gZnVuY3Rpb24oYyxkKXthLnNldChjLGMpO2Iuc2V0KGQsZCk7cmV0dXJuIHRoaXMuY2xhbXAoYSxiKX19KCksY2xhbXBMZW5ndGg6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KGEsTWF0aC5taW4oYixjKSkvYyl9LGZsb29yOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGguZmxvb3IodGhpcy54KTt0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpO3JldHVybiB0aGlzfSxjZWlsOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGguY2VpbCh0aGlzLngpOwp0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSk7cmV0dXJuIHRoaXN9LHJvdW5kOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGgucm91bmQodGhpcy54KTt0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpO3JldHVybiB0aGlzfSxyb3VuZFRvWmVybzpmdW5jdGlvbigpe3RoaXMueD0wPnRoaXMueD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCk7dGhpcy55PTA+dGhpcy55P01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KTtyZXR1cm4gdGhpc30sbmVnYXRlOmZ1bmN0aW9uKCl7dGhpcy54PS10aGlzLng7dGhpcy55PS10aGlzLnk7cmV0dXJuIHRoaXN9LGRvdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy54KmEueCt0aGlzLnkqYS55fSxsZW5ndGhTcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnl9LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55KX0sbGVuZ3RoTWFuaGF0dGFuOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrCk1hdGguYWJzKHRoaXMueSl9LG5vcm1hbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpKX0sYW5nbGU6ZnVuY3Rpb24oKXt2YXIgYT1NYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpOzA+YSYmKGErPTIqTWF0aC5QSSk7cmV0dXJuIGF9LGRpc3RhbmNlVG86ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKGEpKX0sZGlzdGFuY2VUb1NxdWFyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54LWEueDthPXRoaXMueS1hLnk7cmV0dXJuIGIqYithKmF9LGRpc3RhbmNlVG9NYW5oYXR0YW46ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC1hLngpK01hdGguYWJzKHRoaXMueS1hLnkpfSxzZXRMZW5ndGg6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoYS90aGlzLmxlbmd0aCgpKX0sbGVycDpmdW5jdGlvbihhLGIpe3RoaXMueCs9KGEueC10aGlzLngpKmI7dGhpcy55Kz0KKGEueS10aGlzLnkpKmI7cmV0dXJuIHRoaXN9LGxlcnBWZWN0b3JzOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5zdWJWZWN0b3JzKGIsYSkubXVsdGlwbHlTY2FsYXIoYykuYWRkKGEpfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEueD09PXRoaXMueCYmYS55PT09dGhpcy55fSxmcm9tQXJyYXk6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0wKTt0aGlzLng9YVtiXTt0aGlzLnk9YVtiKzFdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YSYmKGE9W10pO3ZvaWQgMD09PWImJihiPTApO2FbYl09dGhpcy54O2FbYisxXT10aGlzLnk7cmV0dXJuIGF9LGZyb21CdWZmZXJBdHRyaWJ1dGU6ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMCE9PWMmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpO3RoaXMueD1hLmdldFgoYik7dGhpcy55PWEuZ2V0WShiKTsKcmV0dXJuIHRoaXN9LHJvdGF0ZUFyb3VuZDpmdW5jdGlvbihhLGIpe3ZhciBjPU1hdGguY29zKGIpLGQ9TWF0aC5zaW4oYiksZT10aGlzLngtYS54LGY9dGhpcy55LWEueTt0aGlzLng9ZSpjLWYqZCthLng7dGhpcy55PWUqZCtmKmMrYS55O3JldHVybiB0aGlzfX0pO3ZhciBqZj0wO1guREVGQVVMVF9JTUFHRT12b2lkIDA7WC5ERUZBVUxUX01BUFBJTkc9MzAwO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLnByb3RvdHlwZSwibmVlZHNVcGRhdGUiLHtzZXQ6ZnVuY3Rpb24oYSl7ITA9PT1hJiZ0aGlzLnZlcnNpb24rK319KTtPYmplY3QuYXNzaWduKFgucHJvdG90eXBlLHNhLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6WCxpc1RleHR1cmU6ITAsY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5uYW1lPWEubmFtZTt0aGlzLmltYWdlPWEuaW1hZ2U7dGhpcy5taXBtYXBzPWEubWlwbWFwcy5zbGljZSgwKTsKdGhpcy5tYXBwaW5nPWEubWFwcGluZzt0aGlzLndyYXBTPWEud3JhcFM7dGhpcy53cmFwVD1hLndyYXBUO3RoaXMubWFnRmlsdGVyPWEubWFnRmlsdGVyO3RoaXMubWluRmlsdGVyPWEubWluRmlsdGVyO3RoaXMuYW5pc290cm9weT1hLmFuaXNvdHJvcHk7dGhpcy5mb3JtYXQ9YS5mb3JtYXQ7dGhpcy50eXBlPWEudHlwZTt0aGlzLm9mZnNldC5jb3B5KGEub2Zmc2V0KTt0aGlzLnJlcGVhdC5jb3B5KGEucmVwZWF0KTt0aGlzLmdlbmVyYXRlTWlwbWFwcz1hLmdlbmVyYXRlTWlwbWFwczt0aGlzLnByZW11bHRpcGx5QWxwaGE9YS5wcmVtdWx0aXBseUFscGhhO3RoaXMuZmxpcFk9YS5mbGlwWTt0aGlzLnVucGFja0FsaWdubWVudD1hLnVucGFja0FsaWdubWVudDt0aGlzLmVuY29kaW5nPWEuZW5jb2Rpbmc7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihhKXtpZih2b2lkIDAhPT1hLnRleHR1cmVzW3RoaXMudXVpZF0pcmV0dXJuIGEudGV4dHVyZXNbdGhpcy51dWlkXTt2YXIgYj17bWV0YWRhdGE6e3ZlcnNpb246NC41LAp0eXBlOiJUZXh0dXJlIixnZW5lcmF0b3I6IlRleHR1cmUudG9KU09OIn0sdXVpZDp0aGlzLnV1aWQsbmFtZTp0aGlzLm5hbWUsbWFwcGluZzp0aGlzLm1hcHBpbmcscmVwZWF0Olt0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnldLG9mZnNldDpbdGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55XSx3cmFwOlt0aGlzLndyYXBTLHRoaXMud3JhcFRdLG1pbkZpbHRlcjp0aGlzLm1pbkZpbHRlcixtYWdGaWx0ZXI6dGhpcy5tYWdGaWx0ZXIsYW5pc290cm9weTp0aGlzLmFuaXNvdHJvcHksZmxpcFk6dGhpcy5mbGlwWX07aWYodm9pZCAwIT09dGhpcy5pbWFnZSl7dmFyIGM9dGhpcy5pbWFnZTt2b2lkIDA9PT1jLnV1aWQmJihjLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKSk7aWYodm9pZCAwPT09YS5pbWFnZXNbYy51dWlkXSl7dmFyIGQ9YS5pbWFnZXMsZT1jLnV1aWQsZj1jLnV1aWQsZzt2b2lkIDAhPT1jLnRvRGF0YVVSTD9nPWM6KGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwKImNhbnZhcyIpLGcud2lkdGg9Yy53aWR0aCxnLmhlaWdodD1jLmhlaWdodCxnLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKGMsMCwwLGMud2lkdGgsYy5oZWlnaHQpKTtnPTIwNDg8Zy53aWR0aHx8MjA0ODxnLmhlaWdodD9nLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpOmcudG9EYXRhVVJMKCJpbWFnZS9wbmciKTtkW2VdPXt1dWlkOmYsdXJsOmd9fWIuaW1hZ2U9Yy51dWlkfXJldHVybiBhLnRleHR1cmVzW3RoaXMudXVpZF09Yn0sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX0sdHJhbnNmb3JtVXY6ZnVuY3Rpb24oYSl7aWYoMzAwPT09dGhpcy5tYXBwaW5nKXthLm11bHRpcGx5KHRoaXMucmVwZWF0KTthLmFkZCh0aGlzLm9mZnNldCk7aWYoMD5hLnh8fDE8YS54KXN3aXRjaCh0aGlzLndyYXBTKXtjYXNlIDFFMzphLngtPU1hdGguZmxvb3IoYS54KTticmVhaztjYXNlIDEwMDE6YS54PTA+YS54PzA6MTticmVhaztjYXNlIDEwMDI6YS54PQoxPT09TWF0aC5hYnMoTWF0aC5mbG9vcihhLngpJTIpP01hdGguY2VpbChhLngpLWEueDphLngtTWF0aC5mbG9vcihhLngpfWlmKDA+YS55fHwxPGEueSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSAxRTM6YS55LT1NYXRoLmZsb29yKGEueSk7YnJlYWs7Y2FzZSAxMDAxOmEueT0wPmEueT8wOjE7YnJlYWs7Y2FzZSAxMDAyOmEueT0xPT09TWF0aC5hYnMoTWF0aC5mbG9vcihhLnkpJTIpP01hdGguY2VpbChhLnkpLWEueTphLnktTWF0aC5mbG9vcihhLnkpfXRoaXMuZmxpcFkmJihhLnk9MS1hLnkpfX19KTtPYmplY3QuYXNzaWduKGdhLnByb3RvdHlwZSx7aXNWZWN0b3I0OiEwLHNldDpmdW5jdGlvbihhLGIsYyxkKXt0aGlzLng9YTt0aGlzLnk9Yjt0aGlzLno9Yzt0aGlzLnc9ZDtyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMudz10aGlzLno9dGhpcy55PXRoaXMueD1hO3JldHVybiB0aGlzfSxzZXRYOmZ1bmN0aW9uKGEpe3RoaXMueD1hO3JldHVybiB0aGlzfSwKc2V0WTpmdW5jdGlvbihhKXt0aGlzLnk9YTtyZXR1cm4gdGhpc30sc2V0WjpmdW5jdGlvbihhKXt0aGlzLno9YTtyZXR1cm4gdGhpc30sc2V0VzpmdW5jdGlvbihhKXt0aGlzLnc9YTtyZXR1cm4gdGhpc30sc2V0Q29tcG9uZW50OmZ1bmN0aW9uKGEsYil7c3dpdGNoKGEpe2Nhc2UgMDp0aGlzLng9YjticmVhaztjYXNlIDE6dGhpcy55PWI7YnJlYWs7Y2FzZSAyOnRoaXMuej1iO2JyZWFrO2Nhc2UgMzp0aGlzLnc9YjticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrYSk7fXJldHVybiB0aGlzfSxnZXRDb21wb25lbnQ6ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIithKTt9fSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsCnRoaXMueSx0aGlzLnosdGhpcy53KX0sY29weTpmdW5jdGlvbihhKXt0aGlzLng9YS54O3RoaXMueT1hLnk7dGhpcy56PWEuejt0aGlzLnc9dm9pZCAwIT09YS53P2EudzoxO3JldHVybiB0aGlzfSxhZGQ6ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDAhPT1iKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnMoYSxiKTt0aGlzLngrPWEueDt0aGlzLnkrPWEueTt0aGlzLnorPWEuejt0aGlzLncrPWEudztyZXR1cm4gdGhpc30sYWRkU2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueCs9YTt0aGlzLnkrPWE7dGhpcy56Kz1hO3RoaXMudys9YTtyZXR1cm4gdGhpc30sYWRkVmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngrYi54O3RoaXMueT1hLnkrYi55O3RoaXMuej1hLnorYi56O3RoaXMudz1hLncrYi53O3JldHVybiB0aGlzfSwKYWRkU2NhbGVkVmVjdG9yOmZ1bmN0aW9uKGEsYil7dGhpcy54Kz1hLngqYjt0aGlzLnkrPWEueSpiO3RoaXMueis9YS56KmI7dGhpcy53Kz1hLncqYjtyZXR1cm4gdGhpc30sc3ViOmZ1bmN0aW9uKGEsYil7aWYodm9pZCAwIT09YilyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKGEsYik7dGhpcy54LT1hLng7dGhpcy55LT1hLnk7dGhpcy56LT1hLno7dGhpcy53LT1hLnc7cmV0dXJuIHRoaXN9LHN1YlNjYWxhcjpmdW5jdGlvbihhKXt0aGlzLngtPWE7dGhpcy55LT1hO3RoaXMuei09YTt0aGlzLnctPWE7cmV0dXJuIHRoaXN9LHN1YlZlY3RvcnM6ZnVuY3Rpb24oYSxiKXt0aGlzLng9YS54LWIueDt0aGlzLnk9YS55LWIueTt0aGlzLno9YS56LWIuejt0aGlzLnc9YS53LWIudztyZXR1cm4gdGhpc30sbXVsdGlwbHlTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy54Kj0KYTt0aGlzLnkqPWE7dGhpcy56Kj1hO3RoaXMudyo9YTtyZXR1cm4gdGhpc30sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMueCxjPXRoaXMueSxkPXRoaXMueixlPXRoaXMudzthPWEuZWxlbWVudHM7dGhpcy54PWFbMF0qYithWzRdKmMrYVs4XSpkK2FbMTJdKmU7dGhpcy55PWFbMV0qYithWzVdKmMrYVs5XSpkK2FbMTNdKmU7dGhpcy56PWFbMl0qYithWzZdKmMrYVsxMF0qZCthWzE0XSplO3RoaXMudz1hWzNdKmIrYVs3XSpjK2FbMTFdKmQrYVsxNV0qZTtyZXR1cm4gdGhpc30sZGl2aWRlU2NhbGFyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvYSl9LHNldEF4aXNBbmdsZUZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKGEpe3RoaXMudz0yKk1hdGguYWNvcyhhLncpO3ZhciBiPU1hdGguc3FydCgxLWEudyphLncpOzFFLTQ+Yj8odGhpcy54PTEsdGhpcy56PXRoaXMueT0wKToodGhpcy54PWEueC9iLHRoaXMueT1hLnkvYix0aGlzLno9YS56LwpiKTtyZXR1cm4gdGhpc30sc2V0QXhpc0FuZ2xlRnJvbVJvdGF0aW9uTWF0cml4OmZ1bmN0aW9uKGEpe3ZhciBiLGMsZDthPWEuZWxlbWVudHM7dmFyIGU9YVswXTtkPWFbNF07dmFyIGY9YVs4XSxnPWFbMV0saD1hWzVdLGs9YVs5XTtjPWFbMl07Yj1hWzZdO3ZhciBtPWFbMTBdO2lmKC4wMT5NYXRoLmFicyhkLWcpJiYuMDE+TWF0aC5hYnMoZi1jKSYmLjAxPk1hdGguYWJzKGstYikpe2lmKC4xPk1hdGguYWJzKGQrZykmJi4xPk1hdGguYWJzKGYrYykmJi4xPk1hdGguYWJzKGsrYikmJi4xPk1hdGguYWJzKGUraCttLTMpKXJldHVybiB0aGlzLnNldCgxLDAsMCwwKSx0aGlzO2E9TWF0aC5QSTtlPShlKzEpLzI7aD0oaCsxKS8yO209KG0rMSkvMjtkPShkK2cpLzQ7Zj0oZitjKS80O2s9KGsrYikvNDtlPmgmJmU+bT8uMDE+ZT8oYj0wLGQ9Yz0uNzA3MTA2NzgxKTooYj1NYXRoLnNxcnQoZSksYz1kL2IsZD1mL2IpOmg+bT8uMDE+aD8oYj0uNzA3MTA2NzgxLGM9MCxkPS43MDcxMDY3ODEpOgooYz1NYXRoLnNxcnQoaCksYj1kL2MsZD1rL2MpOi4wMT5tPyhjPWI9LjcwNzEwNjc4MSxkPTApOihkPU1hdGguc3FydChtKSxiPWYvZCxjPWsvZCk7dGhpcy5zZXQoYixjLGQsYSk7cmV0dXJuIHRoaXN9YT1NYXRoLnNxcnQoKGItaykqKGItaykrKGYtYykqKGYtYykrKGctZCkqKGctZCkpOy4wMDE+TWF0aC5hYnMoYSkmJihhPTEpO3RoaXMueD0oYi1rKS9hO3RoaXMueT0oZi1jKS9hO3RoaXMuej0oZy1kKS9hO3RoaXMudz1NYXRoLmFjb3MoKGUraCttLTEpLzIpO3JldHVybiB0aGlzfSxtaW46ZnVuY3Rpb24oYSl7dGhpcy54PU1hdGgubWluKHRoaXMueCxhLngpO3RoaXMueT1NYXRoLm1pbih0aGlzLnksYS55KTt0aGlzLno9TWF0aC5taW4odGhpcy56LGEueik7dGhpcy53PU1hdGgubWluKHRoaXMudyxhLncpO3JldHVybiB0aGlzfSxtYXg6ZnVuY3Rpb24oYSl7dGhpcy54PU1hdGgubWF4KHRoaXMueCxhLngpO3RoaXMueT1NYXRoLm1heCh0aGlzLnksYS55KTt0aGlzLno9TWF0aC5tYXgodGhpcy56LAphLnopO3RoaXMudz1NYXRoLm1heCh0aGlzLncsYS53KTtyZXR1cm4gdGhpc30sY2xhbXA6ZnVuY3Rpb24oYSxiKXt0aGlzLng9TWF0aC5tYXgoYS54LE1hdGgubWluKGIueCx0aGlzLngpKTt0aGlzLnk9TWF0aC5tYXgoYS55LE1hdGgubWluKGIueSx0aGlzLnkpKTt0aGlzLno9TWF0aC5tYXgoYS56LE1hdGgubWluKGIueix0aGlzLnopKTt0aGlzLnc9TWF0aC5tYXgoYS53LE1hdGgubWluKGIudyx0aGlzLncpKTtyZXR1cm4gdGhpc30sY2xhbXBTY2FsYXI6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZ2EsYj1uZXcgZ2E7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7YS5zZXQoYyxjLGMsYyk7Yi5zZXQoZCxkLGQsZCk7cmV0dXJuIHRoaXMuY2xhbXAoYSxiKX19KCksZmxvb3I6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpO3RoaXMueT1NYXRoLmZsb29yKHRoaXMueSk7dGhpcy56PU1hdGguZmxvb3IodGhpcy56KTt0aGlzLnc9TWF0aC5mbG9vcih0aGlzLncpO3JldHVybiB0aGlzfSwKY2VpbDpmdW5jdGlvbigpe3RoaXMueD1NYXRoLmNlaWwodGhpcy54KTt0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSk7dGhpcy56PU1hdGguY2VpbCh0aGlzLnopO3RoaXMudz1NYXRoLmNlaWwodGhpcy53KTtyZXR1cm4gdGhpc30scm91bmQ6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpO3RoaXMueT1NYXRoLnJvdW5kKHRoaXMueSk7dGhpcy56PU1hdGgucm91bmQodGhpcy56KTt0aGlzLnc9TWF0aC5yb3VuZCh0aGlzLncpO3JldHVybiB0aGlzfSxyb3VuZFRvWmVybzpmdW5jdGlvbigpe3RoaXMueD0wPnRoaXMueD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCk7dGhpcy55PTA+dGhpcy55P01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KTt0aGlzLno9MD50aGlzLno/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopO3RoaXMudz0wPnRoaXMudz9NYXRoLmNlaWwodGhpcy53KTpNYXRoLmZsb29yKHRoaXMudyk7cmV0dXJuIHRoaXN9LApuZWdhdGU6ZnVuY3Rpb24oKXt0aGlzLng9LXRoaXMueDt0aGlzLnk9LXRoaXMueTt0aGlzLno9LXRoaXMuejt0aGlzLnc9LXRoaXMudztyZXR1cm4gdGhpc30sZG90OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLngqYS54K3RoaXMueSphLnkrdGhpcy56KmEueit0aGlzLncqYS53fSxsZW5ndGhTcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53fSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLncpfSxsZW5ndGhNYW5oYXR0YW46ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueikrTWF0aC5hYnModGhpcy53KX0sbm9ybWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCkpfSwKc2V0TGVuZ3RoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKGEvdGhpcy5sZW5ndGgoKSl9LGxlcnA6ZnVuY3Rpb24oYSxiKXt0aGlzLngrPShhLngtdGhpcy54KSpiO3RoaXMueSs9KGEueS10aGlzLnkpKmI7dGhpcy56Kz0oYS56LXRoaXMueikqYjt0aGlzLncrPShhLnctdGhpcy53KSpiO3JldHVybiB0aGlzfSxsZXJwVmVjdG9yczpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuc3ViVmVjdG9ycyhiLGEpLm11bHRpcGx5U2NhbGFyKGMpLmFkZChhKX0sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLng9PT10aGlzLngmJmEueT09PXRoaXMueSYmYS56PT09dGhpcy56JiZhLnc9PT10aGlzLnd9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO3RoaXMueD1hW2JdO3RoaXMueT1hW2IrMV07dGhpcy56PWFbYisyXTt0aGlzLnc9YVtiKzNdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YSYmKGE9CltdKTt2b2lkIDA9PT1iJiYoYj0wKTthW2JdPXRoaXMueDthW2IrMV09dGhpcy55O2FbYisyXT10aGlzLno7YVtiKzNdPXRoaXMudztyZXR1cm4gYX0sZnJvbUJ1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbihhLGIsYyl7dm9pZCAwIT09YyYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7dGhpcy54PWEuZ2V0WChiKTt0aGlzLnk9YS5nZXRZKGIpO3RoaXMuej1hLmdldFooYik7dGhpcy53PWEuZ2V0VyhiKTtyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKERiLnByb3RvdHlwZSxzYS5wcm90b3R5cGUse2lzV2ViR0xSZW5kZXJUYXJnZXQ6ITAsc2V0U2l6ZTpmdW5jdGlvbihhLGIpe2lmKHRoaXMud2lkdGghPT1hfHx0aGlzLmhlaWdodCE9PWIpdGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWIsdGhpcy5kaXNwb3NlKCk7dGhpcy52aWV3cG9ydC5zZXQoMCwwLGEsYik7dGhpcy5zY2lzc29yLnNldCgwLAowLGEsYil9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMud2lkdGg9YS53aWR0aDt0aGlzLmhlaWdodD1hLmhlaWdodDt0aGlzLnZpZXdwb3J0LmNvcHkoYS52aWV3cG9ydCk7dGhpcy50ZXh0dXJlPWEudGV4dHVyZS5jbG9uZSgpO3RoaXMuZGVwdGhCdWZmZXI9YS5kZXB0aEJ1ZmZlcjt0aGlzLnN0ZW5jaWxCdWZmZXI9YS5zdGVuY2lsQnVmZmVyO3RoaXMuZGVwdGhUZXh0dXJlPWEuZGVwdGhUZXh0dXJlO3JldHVybiB0aGlzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX0pO0ViLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKERiLnByb3RvdHlwZSk7RWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUViO0ViLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZT0hMDtPYmplY3QuYXNzaWduKHFhLHtzbGVycDpmdW5jdGlvbihhLGIsCmMsZCl7cmV0dXJuIGMuY29weShhKS5zbGVycChiLGQpfSxzbGVycEZsYXQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9Y1tkKzBdLGs9Y1tkKzFdLG09Y1tkKzJdO2M9Y1tkKzNdO2Q9ZVtmKzBdO3ZhciB1PWVbZisxXSxsPWVbZisyXTtlPWVbZiszXTtpZihjIT09ZXx8aCE9PWR8fGshPT11fHxtIT09bCl7Zj0xLWc7dmFyIG49aCpkK2sqdSttKmwrYyplLHI9MDw9bj8xOi0xLHA9MS1uKm47cD5OdW1iZXIuRVBTSUxPTiYmKHA9TWF0aC5zcXJ0KHApLG49TWF0aC5hdGFuMihwLG4qciksZj1NYXRoLnNpbihmKm4pL3AsZz1NYXRoLnNpbihnKm4pL3ApO3IqPWc7aD1oKmYrZCpyO2s9aypmK3UqcjttPW0qZitsKnI7Yz1jKmYrZSpyO2Y9PT0xLWcmJihnPTEvTWF0aC5zcXJ0KGgqaCtrKmsrbSptK2MqYyksaCo9ZyxrKj1nLG0qPWcsYyo9Zyl9YVtiXT1oO2FbYisxXT1rO2FbYisyXT1tO2FbYiszXT1jfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHFhLnByb3RvdHlwZSx7eDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LApzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feD1hO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpfX0seTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihhKXt0aGlzLl95PWE7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9fSx6OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fen0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3o9YTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKX19LHc6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5fdz1hO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpfX19KTtPYmplY3QuYXNzaWduKHFhLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuX3g9YTt0aGlzLl95PWI7dGhpcy5fej1jO3RoaXMuX3c9ZDt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osCnRoaXMuX3cpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMuX3g9YS54O3RoaXMuX3k9YS55O3RoaXMuX3o9YS56O3RoaXMuX3c9YS53O3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzZXRGcm9tRXVsZXI6ZnVuY3Rpb24oYSxiKXtpZighMT09PShhJiZhLmlzRXVsZXIpKXRocm93IEVycm9yKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTt2YXIgYz1hLl94LGQ9YS5feSxlPWEuX3osZj1hLm9yZGVyLGc9TWF0aC5jb3MsaD1NYXRoLnNpbixrPWcoYy8yKSxtPWcoZC8yKSxnPWcoZS8yKSxjPWgoYy8yKSxkPWgoZC8yKSxlPWgoZS8yKTsiWFlaIj09PWY/KHRoaXMuX3g9YyptKmcraypkKmUsdGhpcy5feT1rKmQqZy1jKm0qZSx0aGlzLl96PWsqbSplK2MqZCpnLHRoaXMuX3c9ayptKmctYypkKmUpOiJZWFoiPT09Zj8odGhpcy5feD1jKm0qZysKaypkKmUsdGhpcy5feT1rKmQqZy1jKm0qZSx0aGlzLl96PWsqbSplLWMqZCpnLHRoaXMuX3c9ayptKmcrYypkKmUpOiJaWFkiPT09Zj8odGhpcy5feD1jKm0qZy1rKmQqZSx0aGlzLl95PWsqZCpnK2MqbSplLHRoaXMuX3o9ayptKmUrYypkKmcsdGhpcy5fdz1rKm0qZy1jKmQqZSk6IlpZWCI9PT1mPyh0aGlzLl94PWMqbSpnLWsqZCplLHRoaXMuX3k9aypkKmcrYyptKmUsdGhpcy5fej1rKm0qZS1jKmQqZyx0aGlzLl93PWsqbSpnK2MqZCplKToiWVpYIj09PWY/KHRoaXMuX3g9YyptKmcraypkKmUsdGhpcy5feT1rKmQqZytjKm0qZSx0aGlzLl96PWsqbSplLWMqZCpnLHRoaXMuX3c9ayptKmctYypkKmUpOiJYWlkiPT09ZiYmKHRoaXMuX3g9YyptKmctaypkKmUsdGhpcy5feT1rKmQqZy1jKm0qZSx0aGlzLl96PWsqbSplK2MqZCpnLHRoaXMuX3c9ayptKmcrYypkKmUpO2lmKCExIT09Yil0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sc2V0RnJvbUF4aXNBbmdsZTpmdW5jdGlvbihhLApiKXt2YXIgYz1iLzIsZD1NYXRoLnNpbihjKTt0aGlzLl94PWEueCpkO3RoaXMuX3k9YS55KmQ7dGhpcy5fej1hLnoqZDt0aGlzLl93PU1hdGguY29zKGMpO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzZXRGcm9tUm90YXRpb25NYXRyaXg6ZnVuY3Rpb24oYSl7dmFyIGI9YS5lbGVtZW50cyxjPWJbMF07YT1iWzRdO3ZhciBkPWJbOF0sZT1iWzFdLGY9Yls1XSxnPWJbOV0saD1iWzJdLGs9Yls2XSxiPWJbMTBdLG09YytmK2I7MDxtPyhjPS41L01hdGguc3FydChtKzEpLHRoaXMuX3c9LjI1L2MsdGhpcy5feD0oay1nKSpjLHRoaXMuX3k9KGQtaCkqYyx0aGlzLl96PShlLWEpKmMpOmM+ZiYmYz5iPyhjPTIqTWF0aC5zcXJ0KDErYy1mLWIpLHRoaXMuX3c9KGstZykvYyx0aGlzLl94PS4yNSpjLHRoaXMuX3k9KGErZSkvYyx0aGlzLl96PShkK2gpL2MpOmY+Yj8oYz0yKk1hdGguc3FydCgxK2YtYy1iKSx0aGlzLl93PShkLWgpL2MsdGhpcy5feD0oYStlKS9jLHRoaXMuX3k9Ci4yNSpjLHRoaXMuX3o9KGcraykvYyk6KGM9MipNYXRoLnNxcnQoMStiLWMtZiksdGhpcy5fdz0oZS1hKS9jLHRoaXMuX3g9KGQraCkvYyx0aGlzLl95PShnK2spL2MsdGhpcy5fej0uMjUqYyk7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7cmV0dXJuIHRoaXN9LHNldEZyb21Vbml0VmVjdG9yczpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7dm9pZCAwPT09YSYmKGE9bmV3IHApO2I9Yy5kb3QoZCkrMTsxRS02PmI/KGI9MCxNYXRoLmFicyhjLngpPk1hdGguYWJzKGMueik/YS5zZXQoLWMueSxjLngsMCk6YS5zZXQoMCwtYy56LGMueSkpOmEuY3Jvc3NWZWN0b3JzKGMsZCk7dGhpcy5feD1hLng7dGhpcy5feT1hLnk7dGhpcy5fej1hLno7dGhpcy5fdz1iO3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpfX0oKSxpbnZlcnNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCkubm9ybWFsaXplKCl9LGNvbmp1Z2F0ZTpmdW5jdGlvbigpe3RoaXMuX3gqPQotMTt0aGlzLl95Kj0tMTt0aGlzLl96Kj0tMTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sZG90OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl94KmEuX3grdGhpcy5feSphLl95K3RoaXMuX3oqYS5feit0aGlzLl93KmEuX3d9LGxlbmd0aFNxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fd30sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3cpfSxub3JtYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmxlbmd0aCgpOzA9PT1hPyh0aGlzLl96PXRoaXMuX3k9dGhpcy5feD0wLHRoaXMuX3c9MSk6KGE9MS9hLHRoaXMuX3gqPWEsdGhpcy5feSo9YSx0aGlzLl96Kj1hLHRoaXMuX3cqPWEpO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSwKbXVsdGlwbHk6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdm9pZCAwIT09Yj8oY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5UXVhdGVybmlvbnMoYSxiKSk6dGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsYSl9LHByZW11bHRpcGx5OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5UXVhdGVybmlvbnMoYSx0aGlzKX0sbXVsdGlwbHlRdWF0ZXJuaW9uczpmdW5jdGlvbihhLGIpe3ZhciBjPWEuX3gsZD1hLl95LGU9YS5feixmPWEuX3csZz1iLl94LGg9Yi5feSxrPWIuX3osbT1iLl93O3RoaXMuX3g9YyptK2YqZytkKmstZSpoO3RoaXMuX3k9ZCptK2YqaCtlKmctYyprO3RoaXMuX3o9ZSptK2YqaytjKmgtZCpnO3RoaXMuX3c9ZiptLWMqZy1kKmgtZSprO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpOwpyZXR1cm4gdGhpc30sc2xlcnA6ZnVuY3Rpb24oYSxiKXtpZigwPT09YilyZXR1cm4gdGhpcztpZigxPT09YilyZXR1cm4gdGhpcy5jb3B5KGEpO3ZhciBjPXRoaXMuX3gsZD10aGlzLl95LGU9dGhpcy5feixmPXRoaXMuX3csZz1mKmEuX3crYyphLl94K2QqYS5feStlKmEuX3o7MD5nPyh0aGlzLl93PS1hLl93LHRoaXMuX3g9LWEuX3gsdGhpcy5feT0tYS5feSx0aGlzLl96PS1hLl96LGc9LWcpOnRoaXMuY29weShhKTtpZigxPD1nKXJldHVybiB0aGlzLl93PWYsdGhpcy5feD1jLHRoaXMuX3k9ZCx0aGlzLl96PWUsdGhpczt2YXIgaD1NYXRoLnNxcnQoMS1nKmcpO2lmKC4wMDE+TWF0aC5hYnMoaCkpcmV0dXJuIHRoaXMuX3c9LjUqKGYrdGhpcy5fdyksdGhpcy5feD0uNSooYyt0aGlzLl94KSx0aGlzLl95PS41KihkK3RoaXMuX3kpLHRoaXMuX3o9LjUqKGUrdGhpcy5feiksdGhpczt2YXIgaz1NYXRoLmF0YW4yKGgsZyksZz1NYXRoLnNpbigoMS1iKSprKS9oLGg9TWF0aC5zaW4oYioKaykvaDt0aGlzLl93PWYqZyt0aGlzLl93Kmg7dGhpcy5feD1jKmcrdGhpcy5feCpoO3RoaXMuX3k9ZCpnK3RoaXMuX3kqaDt0aGlzLl96PWUqZyt0aGlzLl96Kmg7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihhKXtyZXR1cm4gYS5feD09PXRoaXMuX3gmJmEuX3k9PT10aGlzLl95JiZhLl96PT09dGhpcy5feiYmYS5fdz09PXRoaXMuX3d9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO3RoaXMuX3g9YVtiXTt0aGlzLl95PWFbYisxXTt0aGlzLl96PWFbYisyXTt0aGlzLl93PWFbYiszXTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWEmJihhPVtdKTt2b2lkIDA9PT1iJiYoYj0wKTthW2JdPXRoaXMuX3g7YVtiKzFdPXRoaXMuX3k7YVtiKzJdPXRoaXMuX3o7YVtiKzNdPXRoaXMuX3c7cmV0dXJuIGF9LG9uQ2hhbmdlOmZ1bmN0aW9uKGEpe3RoaXMub25DaGFuZ2VDYWxsYmFjaz0KYTtyZXR1cm4gdGhpc30sb25DaGFuZ2VDYWxsYmFjazpmdW5jdGlvbigpe319KTtPYmplY3QuYXNzaWduKHAucHJvdG90eXBlLHtpc1ZlY3RvcjM6ITAsc2V0OmZ1bmN0aW9uKGEsYixjKXt0aGlzLng9YTt0aGlzLnk9Yjt0aGlzLno9YztyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMuej10aGlzLnk9dGhpcy54PWE7cmV0dXJuIHRoaXN9LHNldFg6ZnVuY3Rpb24oYSl7dGhpcy54PWE7cmV0dXJuIHRoaXN9LHNldFk6ZnVuY3Rpb24oYSl7dGhpcy55PWE7cmV0dXJuIHRoaXN9LHNldFo6ZnVuY3Rpb24oYSl7dGhpcy56PWE7cmV0dXJuIHRoaXN9LHNldENvbXBvbmVudDpmdW5jdGlvbihhLGIpe3N3aXRjaChhKXtjYXNlIDA6dGhpcy54PWI7YnJlYWs7Y2FzZSAxOnRoaXMueT1iO2JyZWFrO2Nhc2UgMjp0aGlzLno9YjticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrYSk7fXJldHVybiB0aGlzfSxnZXRDb21wb25lbnQ6ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gdGhpcy54OwpjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtkZWZhdWx0OnRocm93IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrYSk7fX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMueD1hLng7dGhpcy55PWEueTt0aGlzLno9YS56O3JldHVybiB0aGlzfSxhZGQ6ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDAhPT1iKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnMoYSxiKTt0aGlzLngrPWEueDt0aGlzLnkrPWEueTt0aGlzLnorPWEuejtyZXR1cm4gdGhpc30sYWRkU2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueCs9YTt0aGlzLnkrPWE7dGhpcy56Kz1hO3JldHVybiB0aGlzfSwKYWRkVmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngrYi54O3RoaXMueT1hLnkrYi55O3RoaXMuej1hLnorYi56O3JldHVybiB0aGlzfSxhZGRTY2FsZWRWZWN0b3I6ZnVuY3Rpb24oYSxiKXt0aGlzLngrPWEueCpiO3RoaXMueSs9YS55KmI7dGhpcy56Kz1hLnoqYjtyZXR1cm4gdGhpc30sc3ViOmZ1bmN0aW9uKGEsYil7aWYodm9pZCAwIT09YilyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKGEsYik7dGhpcy54LT1hLng7dGhpcy55LT1hLnk7dGhpcy56LT1hLno7cmV0dXJuIHRoaXN9LHN1YlNjYWxhcjpmdW5jdGlvbihhKXt0aGlzLngtPWE7dGhpcy55LT1hO3RoaXMuei09YTtyZXR1cm4gdGhpc30sc3ViVmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngtYi54O3RoaXMueT1hLnktYi55O3RoaXMuej0KYS56LWIuejtyZXR1cm4gdGhpc30sbXVsdGlwbHk6ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDAhPT1iKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnMoYSxiKTt0aGlzLngqPWEueDt0aGlzLnkqPWEueTt0aGlzLnoqPWEuejtyZXR1cm4gdGhpc30sbXVsdGlwbHlTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy54Kj1hO3RoaXMueSo9YTt0aGlzLnoqPWE7cmV0dXJuIHRoaXN9LG11bHRpcGx5VmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngqYi54O3RoaXMueT1hLnkqYi55O3RoaXMuej1hLnoqYi56O3JldHVybiB0aGlzfSxhcHBseUV1bGVyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHFhO3JldHVybiBmdW5jdGlvbihiKXshMT09PShiJiZiLmlzRXVsZXIpJiZjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlFdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7CnJldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihhLnNldEZyb21FdWxlcihiKSl9fSgpLGFwcGx5QXhpc0FuZ2xlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHFhO3JldHVybiBmdW5jdGlvbihiLGMpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihhLnNldEZyb21BeGlzQW5nbGUoYixjKSl9fSgpLGFwcGx5TWF0cml4MzpmdW5jdGlvbihhKXt2YXIgYj10aGlzLngsYz10aGlzLnksZD10aGlzLno7YT1hLmVsZW1lbnRzO3RoaXMueD1hWzBdKmIrYVszXSpjK2FbNl0qZDt0aGlzLnk9YVsxXSpiK2FbNF0qYythWzddKmQ7dGhpcy56PWFbMl0qYithWzVdKmMrYVs4XSpkO3JldHVybiB0aGlzfSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54LGM9dGhpcy55LGQ9dGhpcy56O2E9YS5lbGVtZW50czt0aGlzLng9YVswXSpiK2FbNF0qYythWzhdKmQrYVsxMl07dGhpcy55PWFbMV0qYithWzVdKmMrYVs5XSpkK2FbMTNdO3RoaXMuej1hWzJdKmIrYVs2XSpjK2FbMTBdKmQrYVsxNF07CnJldHVybiB0aGlzLmRpdmlkZVNjYWxhcihhWzNdKmIrYVs3XSpjK2FbMTFdKmQrYVsxNV0pfSxhcHBseVF1YXRlcm5pb246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54LGM9dGhpcy55LGQ9dGhpcy56LGU9YS54LGY9YS55LGc9YS56O2E9YS53O3ZhciBoPWEqYitmKmQtZypjLGs9YSpjK2cqYi1lKmQsbT1hKmQrZSpjLWYqYixiPS1lKmItZipjLWcqZDt0aGlzLng9aCphK2IqLWUrayotZy1tKi1mO3RoaXMueT1rKmErYiotZittKi1lLWgqLWc7dGhpcy56PW0qYStiKi1nK2gqLWYtayotZTtyZXR1cm4gdGhpc30scHJvamVjdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBKO3JldHVybiBmdW5jdGlvbihiKXthLm11bHRpcGx5TWF0cmljZXMoYi5wcm9qZWN0aW9uTWF0cml4LGEuZ2V0SW52ZXJzZShiLm1hdHJpeFdvcmxkKSk7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KGEpfX0oKSx1bnByb2plY3Q6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYil7YS5tdWx0aXBseU1hdHJpY2VzKGIubWF0cml4V29ybGQsCmEuZ2V0SW52ZXJzZShiLnByb2plY3Rpb25NYXRyaXgpKTtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQoYSl9fSgpLHRyYW5zZm9ybURpcmVjdGlvbjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLngsYz10aGlzLnksZD10aGlzLno7YT1hLmVsZW1lbnRzO3RoaXMueD1hWzBdKmIrYVs0XSpjK2FbOF0qZDt0aGlzLnk9YVsxXSpiK2FbNV0qYythWzldKmQ7dGhpcy56PWFbMl0qYithWzZdKmMrYVsxMF0qZDtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKX0sZGl2aWRlOmZ1bmN0aW9uKGEpe3RoaXMueC89YS54O3RoaXMueS89YS55O3RoaXMuei89YS56O3JldHVybiB0aGlzfSxkaXZpZGVTY2FsYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS9hKX0sbWluOmZ1bmN0aW9uKGEpe3RoaXMueD1NYXRoLm1pbih0aGlzLngsYS54KTt0aGlzLnk9TWF0aC5taW4odGhpcy55LGEueSk7dGhpcy56PU1hdGgubWluKHRoaXMueixhLnopO3JldHVybiB0aGlzfSxtYXg6ZnVuY3Rpb24oYSl7dGhpcy54PQpNYXRoLm1heCh0aGlzLngsYS54KTt0aGlzLnk9TWF0aC5tYXgodGhpcy55LGEueSk7dGhpcy56PU1hdGgubWF4KHRoaXMueixhLnopO3JldHVybiB0aGlzfSxjbGFtcDpmdW5jdGlvbihhLGIpe3RoaXMueD1NYXRoLm1heChhLngsTWF0aC5taW4oYi54LHRoaXMueCkpO3RoaXMueT1NYXRoLm1heChhLnksTWF0aC5taW4oYi55LHRoaXMueSkpO3RoaXMuej1NYXRoLm1heChhLnosTWF0aC5taW4oYi56LHRoaXMueikpO3JldHVybiB0aGlzfSxjbGFtcFNjYWxhcjpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7YS5zZXQoYyxjLGMpO2Iuc2V0KGQsZCxkKTtyZXR1cm4gdGhpcy5jbGFtcChhLGIpfX0oKSxjbGFtcExlbmd0aDpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgoYSxNYXRoLm1pbihiLGMpKS9jKX0sZmxvb3I6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpOwp0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpO3RoaXMuej1NYXRoLmZsb29yKHRoaXMueik7cmV0dXJuIHRoaXN9LGNlaWw6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5jZWlsKHRoaXMueCk7dGhpcy55PU1hdGguY2VpbCh0aGlzLnkpO3RoaXMuej1NYXRoLmNlaWwodGhpcy56KTtyZXR1cm4gdGhpc30scm91bmQ6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpO3RoaXMueT1NYXRoLnJvdW5kKHRoaXMueSk7dGhpcy56PU1hdGgucm91bmQodGhpcy56KTtyZXR1cm4gdGhpc30scm91bmRUb1plcm86ZnVuY3Rpb24oKXt0aGlzLng9MD50aGlzLng/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpO3RoaXMueT0wPnRoaXMueT9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSk7dGhpcy56PTA+dGhpcy56P01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KTtyZXR1cm4gdGhpc30sbmVnYXRlOmZ1bmN0aW9uKCl7dGhpcy54PS10aGlzLng7CnRoaXMueT0tdGhpcy55O3RoaXMuej0tdGhpcy56O3JldHVybiB0aGlzfSxkb3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMueCphLngrdGhpcy55KmEueSt0aGlzLnoqYS56fSxsZW5ndGhTcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen0sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueil9LGxlbmd0aE1hbmhhdHRhbjpmdW5jdGlvbigpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KX0sbm9ybWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCkpfSxzZXRMZW5ndGg6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoYS90aGlzLmxlbmd0aCgpKX0sbGVycDpmdW5jdGlvbihhLGIpe3RoaXMueCs9KGEueC10aGlzLngpKgpiO3RoaXMueSs9KGEueS10aGlzLnkpKmI7dGhpcy56Kz0oYS56LXRoaXMueikqYjtyZXR1cm4gdGhpc30sbGVycFZlY3RvcnM6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLnN1YlZlY3RvcnMoYixhKS5tdWx0aXBseVNjYWxhcihjKS5hZGQoYSl9LGNyb3NzOmZ1bmN0aW9uKGEsYil7aWYodm9pZCAwIT09YilyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuY3Jvc3MoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5jcm9zc1ZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuY3Jvc3NWZWN0b3JzKGEsYik7dmFyIGM9dGhpcy54LGQ9dGhpcy55LGU9dGhpcy56O3RoaXMueD1kKmEuei1lKmEueTt0aGlzLnk9ZSphLngtYyphLno7dGhpcy56PWMqYS55LWQqYS54O3JldHVybiB0aGlzfSxjcm9zc1ZlY3RvcnM6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLngsZD1hLnksZT1hLnosZj1iLngsZz1iLnksaD1iLno7dGhpcy54PWQqaC1lKmc7dGhpcy55PQplKmYtYypoO3RoaXMuej1jKmctZCpmO3JldHVybiB0aGlzfSxwcm9qZWN0T25WZWN0b3I6ZnVuY3Rpb24oYSl7dmFyIGI9YS5kb3QodGhpcykvYS5sZW5ndGhTcSgpO3JldHVybiB0aGlzLmNvcHkoYSkubXVsdGlwbHlTY2FsYXIoYil9LHByb2plY3RPblBsYW5lOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe2EuY29weSh0aGlzKS5wcm9qZWN0T25WZWN0b3IoYik7cmV0dXJuIHRoaXMuc3ViKGEpfX0oKSxyZWZsZWN0OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnN1YihhLmNvcHkoYikubXVsdGlwbHlTY2FsYXIoMip0aGlzLmRvdChiKSkpfX0oKSxhbmdsZVRvOmZ1bmN0aW9uKGEpe2E9dGhpcy5kb3QoYSkvTWF0aC5zcXJ0KHRoaXMubGVuZ3RoU3EoKSphLmxlbmd0aFNxKCkpO3JldHVybiBNYXRoLmFjb3MoWS5jbGFtcChhLC0xLDEpKX0sZGlzdGFuY2VUbzpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQoYSkpfSwKZGlzdGFuY2VUb1NxdWFyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54LWEueCxjPXRoaXMueS1hLnk7YT10aGlzLnotYS56O3JldHVybiBiKmIrYypjK2EqYX0sZGlzdGFuY2VUb01hbmhhdHRhbjpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5hYnModGhpcy54LWEueCkrTWF0aC5hYnModGhpcy55LWEueSkrTWF0aC5hYnModGhpcy56LWEueil9LHNldEZyb21TcGhlcmljYWw6ZnVuY3Rpb24oYSl7dmFyIGI9TWF0aC5zaW4oYS5waGkpKmEucmFkaXVzO3RoaXMueD1iKk1hdGguc2luKGEudGhldGEpO3RoaXMueT1NYXRoLmNvcyhhLnBoaSkqYS5yYWRpdXM7dGhpcy56PWIqTWF0aC5jb3MoYS50aGV0YSk7cmV0dXJuIHRoaXN9LHNldEZyb21DeWxpbmRyaWNhbDpmdW5jdGlvbihhKXt0aGlzLng9YS5yYWRpdXMqTWF0aC5zaW4oYS50aGV0YSk7dGhpcy55PWEueTt0aGlzLno9YS5yYWRpdXMqTWF0aC5jb3MoYS50aGV0YSk7cmV0dXJuIHRoaXN9LHNldEZyb21NYXRyaXhQb3NpdGlvbjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKGEsCjMpfSxzZXRGcm9tTWF0cml4U2NhbGU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKGEsMCkubGVuZ3RoKCksYz10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oYSwxKS5sZW5ndGgoKTthPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbihhLDIpLmxlbmd0aCgpO3RoaXMueD1iO3RoaXMueT1jO3RoaXMuej1hO3JldHVybiB0aGlzfSxzZXRGcm9tTWF0cml4Q29sdW1uOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZnJvbUFycmF5KGEuZWxlbWVudHMsNCpiKX0sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLng9PT10aGlzLngmJmEueT09PXRoaXMueSYmYS56PT09dGhpcy56fSxmcm9tQXJyYXk6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0wKTt0aGlzLng9YVtiXTt0aGlzLnk9YVtiKzFdO3RoaXMuej1hW2IrMl07cmV0dXJuIHRoaXN9LHRvQXJyYXk6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1hJiYoYT1bXSk7dm9pZCAwPT09YiYmKGI9MCk7YVtiXT0KdGhpcy54O2FbYisxXT10aGlzLnk7YVtiKzJdPXRoaXMuejtyZXR1cm4gYX0sZnJvbUJ1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbihhLGIsYyl7dm9pZCAwIT09YyYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7dGhpcy54PWEuZ2V0WChiKTt0aGlzLnk9YS5nZXRZKGIpO3RoaXMuej1hLmdldFooYik7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihKLnByb3RvdHlwZSx7aXNNYXRyaXg0OiEwLHNldDpmdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsayxtLHUsbCxuLHIscCx0KXt2YXIgeT10aGlzLmVsZW1lbnRzO3lbMF09YTt5WzRdPWI7eVs4XT1jO3lbMTJdPWQ7eVsxXT1lO3lbNV09Zjt5WzldPWc7eVsxM109aDt5WzJdPWs7eVs2XT1tO3lbMTBdPXU7eVsxNF09bDt5WzNdPW47eVs3XT1yO3lbMTFdPXA7eVsxNV09dDtyZXR1cm4gdGhpc30saWRlbnRpdHk6ZnVuY3Rpb24oKXt0aGlzLnNldCgxLAowLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBKKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9LGNvcHk6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbGVtZW50czthPWEuZWxlbWVudHM7YlswXT1hWzBdO2JbMV09YVsxXTtiWzJdPWFbMl07YlszXT1hWzNdO2JbNF09YVs0XTtiWzVdPWFbNV07Yls2XT1hWzZdO2JbN109YVs3XTtiWzhdPWFbOF07Yls5XT1hWzldO2JbMTBdPWFbMTBdO2JbMTFdPWFbMTFdO2JbMTJdPWFbMTJdO2JbMTNdPWFbMTNdO2JbMTRdPWFbMTRdO2JbMTVdPWFbMTVdO3JldHVybiB0aGlzfSxjb3B5UG9zaXRpb246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbGVtZW50czthPWEuZWxlbWVudHM7YlsxMl09YVsxMl07YlsxM109YVsxM107YlsxNF09YVsxNF07cmV0dXJuIHRoaXN9LGV4dHJhY3RCYXNpczpmdW5jdGlvbihhLGIsYyl7YS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMCk7CmIuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpO2Muc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpO3JldHVybiB0aGlzfSxtYWtlQmFzaXM6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuc2V0KGEueCxiLngsYy54LDAsYS55LGIueSxjLnksMCxhLnosYi56LGMueiwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxleHRyYWN0Um90YXRpb246ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5lbGVtZW50cyxkPWIuZWxlbWVudHMsZT0xL2Euc2V0RnJvbU1hdHJpeENvbHVtbihiLDApLmxlbmd0aCgpLGY9MS9hLnNldEZyb21NYXRyaXhDb2x1bW4oYiwxKS5sZW5ndGgoKTtiPTEvYS5zZXRGcm9tTWF0cml4Q29sdW1uKGIsMikubGVuZ3RoKCk7Y1swXT1kWzBdKmU7Y1sxXT1kWzFdKmU7Y1syXT1kWzJdKmU7Y1s0XT1kWzRdKmY7Y1s1XT1kWzVdKmY7Y1s2XT1kWzZdKmY7Y1s4XT1kWzhdKmI7Y1s5XT1kWzldKmI7Y1sxMF09ZFsxMF0qYjtyZXR1cm4gdGhpc319KCksCm1ha2VSb3RhdGlvbkZyb21FdWxlcjpmdW5jdGlvbihhKXshMT09PShhJiZhLmlzRXVsZXIpJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7dmFyIGI9dGhpcy5lbGVtZW50cyxjPWEueCxkPWEueSxlPWEueixmPU1hdGguY29zKGMpLGM9TWF0aC5zaW4oYyksZz1NYXRoLmNvcyhkKSxkPU1hdGguc2luKGQpLGg9TWF0aC5jb3MoZSksZT1NYXRoLnNpbihlKTtpZigiWFlaIj09PWEub3JkZXIpe2E9ZipoO3ZhciBrPWYqZSxtPWMqaCx1PWMqZTtiWzBdPWcqaDtiWzRdPS1nKmU7Yls4XT1kO2JbMV09ayttKmQ7Yls1XT1hLXUqZDtiWzldPS1jKmc7YlsyXT11LWEqZDtiWzZdPW0raypkO2JbMTBdPWYqZ31lbHNlIllYWiI9PT1hLm9yZGVyPyhhPWcqaCxrPWcqZSxtPWQqaCx1PWQqZSxiWzBdPWErdSpjLGJbNF09bSpjLWssYls4XT0KZipkLGJbMV09ZiplLGJbNV09ZipoLGJbOV09LWMsYlsyXT1rKmMtbSxiWzZdPXUrYSpjLGJbMTBdPWYqZyk6IlpYWSI9PT1hLm9yZGVyPyhhPWcqaCxrPWcqZSxtPWQqaCx1PWQqZSxiWzBdPWEtdSpjLGJbNF09LWYqZSxiWzhdPW0raypjLGJbMV09ayttKmMsYls1XT1mKmgsYls5XT11LWEqYyxiWzJdPS1mKmQsYls2XT1jLGJbMTBdPWYqZyk6IlpZWCI9PT1hLm9yZGVyPyhhPWYqaCxrPWYqZSxtPWMqaCx1PWMqZSxiWzBdPWcqaCxiWzRdPW0qZC1rLGJbOF09YSpkK3UsYlsxXT1nKmUsYls1XT11KmQrYSxiWzldPWsqZC1tLGJbMl09LWQsYls2XT1jKmcsYlsxMF09ZipnKToiWVpYIj09PWEub3JkZXI/KGE9ZipnLGs9ZipkLG09YypnLHU9YypkLGJbMF09ZypoLGJbNF09dS1hKmUsYls4XT1tKmUrayxiWzFdPWUsYls1XT1mKmgsYls5XT0tYypoLGJbMl09LWQqaCxiWzZdPWsqZSttLGJbMTBdPWEtdSplKToiWFpZIj09PWEub3JkZXImJihhPWYqZyxrPWYqZCxtPWMqZyx1PWMqZCxiWzBdPQpnKmgsYls0XT0tZSxiWzhdPWQqaCxiWzFdPWEqZSt1LGJbNV09ZipoLGJbOV09ayplLW0sYlsyXT1tKmUtayxiWzZdPWMqaCxiWzEwXT11KmUrYSk7YlszXT0wO2JbN109MDtiWzExXT0wO2JbMTJdPTA7YlsxM109MDtiWzE0XT0wO2JbMTVdPTE7cmV0dXJuIHRoaXN9LG1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWxlbWVudHMsYz1hLl94LGQ9YS5feSxlPWEuX3osZj1hLl93LGc9YytjLGg9ZCtkLGs9ZStlO2E9YypnO3ZhciBtPWMqaCxjPWMqayx1PWQqaCxkPWQqayxlPWUqayxnPWYqZyxoPWYqaCxmPWYqaztiWzBdPTEtKHUrZSk7Yls0XT1tLWY7Yls4XT1jK2g7YlsxXT1tK2Y7Yls1XT0xLShhK2UpO2JbOV09ZC1nO2JbMl09Yy1oO2JbNl09ZCtnO2JbMTBdPTEtKGErdSk7YlszXT0wO2JbN109MDtiWzExXT0wO2JbMTJdPTA7YlsxM109MDtiWzE0XT0wO2JbMTVdPTE7cmV0dXJuIHRoaXN9LGxvb2tBdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLApiPW5ldyBwLGM9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGQsZSxmKXt2YXIgZz10aGlzLmVsZW1lbnRzO2Muc3ViVmVjdG9ycyhkLGUpOzA9PT1jLmxlbmd0aFNxKCkmJihjLno9MSk7Yy5ub3JtYWxpemUoKTthLmNyb3NzVmVjdG9ycyhmLGMpOzA9PT1hLmxlbmd0aFNxKCkmJihjLnorPTFFLTQsYS5jcm9zc1ZlY3RvcnMoZixjKSk7YS5ub3JtYWxpemUoKTtiLmNyb3NzVmVjdG9ycyhjLGEpO2dbMF09YS54O2dbNF09Yi54O2dbOF09Yy54O2dbMV09YS55O2dbNV09Yi55O2dbOV09Yy55O2dbMl09YS56O2dbNl09Yi56O2dbMTBdPWMuejtyZXR1cm4gdGhpc319KCksbXVsdGlwbHk6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdm9pZCAwIT09Yj8oY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseU1hdHJpY2VzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5TWF0cmljZXMoYSxiKSk6CnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLGEpfSxwcmVtdWx0aXBseTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKGEsdGhpcyl9LG11bHRpcGx5TWF0cmljZXM6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmVsZW1lbnRzLGQ9Yi5lbGVtZW50cyxlPXRoaXMuZWxlbWVudHMsZj1jWzBdLGc9Y1s0XSxoPWNbOF0saz1jWzEyXSxtPWNbMV0sdT1jWzVdLGw9Y1s5XSxuPWNbMTNdLHI9Y1syXSxwPWNbNl0sdD1jWzEwXSx5PWNbMTRdLHg9Y1szXSx2PWNbN10sRz1jWzExXSxjPWNbMTVdLHc9ZFswXSxPPWRbNF0sUz1kWzhdLEU9ZFsxMl0sRj1kWzFdLEM9ZFs1XSxSPWRbOV0sRD1kWzEzXSxCPWRbMl0sST1kWzZdLEg9ZFsxMF0sSj1kWzE0XSxQPWRbM10sSz1kWzddLFc9ZFsxMV0sZD1kWzE1XTtlWzBdPWYqdytnKkYraCpCK2sqUDtlWzRdPWYqTytnKkMraCpJK2sqSztlWzhdPWYqUytnKlIraCpIK2sqVztlWzEyXT1mKkUrZypEK2gqSitrKmQ7ZVsxXT1tKncrdSoKRitsKkIrbipQO2VbNV09bSpPK3UqQytsKkkrbipLO2VbOV09bSpTK3UqUitsKkgrbipXO2VbMTNdPW0qRSt1KkQrbCpKK24qZDtlWzJdPXIqdytwKkYrdCpCK3kqUDtlWzZdPXIqTytwKkMrdCpJK3kqSztlWzEwXT1yKlMrcCpSK3QqSCt5Klc7ZVsxNF09cipFK3AqRCt0KkoreSpkO2VbM109eCp3K3YqRitHKkIrYypQO2VbN109eCpPK3YqQytHKkkrYypLO2VbMTFdPXgqUyt2KlIrRypIK2MqVztlWzE1XT14KkUrdipEK0cqSitjKmQ7cmV0dXJuIHRoaXN9LG11bHRpcGx5U2NhbGFyOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWxlbWVudHM7YlswXSo9YTtiWzRdKj1hO2JbOF0qPWE7YlsxMl0qPWE7YlsxXSo9YTtiWzVdKj1hO2JbOV0qPWE7YlsxM10qPWE7YlsyXSo9YTtiWzZdKj1hO2JbMTBdKj1hO2JbMTRdKj1hO2JbM10qPWE7Yls3XSo9YTtiWzExXSo9YTtiWzE1XSo9YTtyZXR1cm4gdGhpc30sYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiKXtmb3IodmFyIGM9CjAsZD1iLmNvdW50O2M8ZDtjKyspYS54PWIuZ2V0WChjKSxhLnk9Yi5nZXRZKGMpLGEuej1iLmdldFooYyksYS5hcHBseU1hdHJpeDQodGhpcyksYi5zZXRYWVooYyxhLngsYS55LGEueik7cmV0dXJuIGJ9fSgpLGRldGVybWluYW50OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5lbGVtZW50cyxiPWFbMF0sYz1hWzRdLGQ9YVs4XSxlPWFbMTJdLGY9YVsxXSxnPWFbNV0saD1hWzldLGs9YVsxM10sbT1hWzJdLHU9YVs2XSxsPWFbMTBdLG49YVsxNF07cmV0dXJuIGFbM10qKCtlKmgqdS1kKmsqdS1lKmcqbCtjKmsqbCtkKmcqbi1jKmgqbikrYVs3XSooK2IqaCpuLWIqaypsK2UqZipsLWQqZipuK2QqayptLWUqaCptKSthWzExXSooK2Iqayp1LWIqZypuLWUqZip1K2MqZipuK2UqZyptLWMqayptKSthWzE1XSooLWQqZyptLWIqaCp1K2IqZypsK2QqZip1LWMqZipsK2MqaCptKX0sdHJhbnNwb3NlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5lbGVtZW50cyxiO2I9YVsxXTthWzFdPWFbNF07YVs0XT0KYjtiPWFbMl07YVsyXT1hWzhdO2FbOF09YjtiPWFbNl07YVs2XT1hWzldO2FbOV09YjtiPWFbM107YVszXT1hWzEyXTthWzEyXT1iO2I9YVs3XTthWzddPWFbMTNdO2FbMTNdPWI7Yj1hWzExXTthWzExXT1hWzE0XTthWzE0XT1iO3JldHVybiB0aGlzfSxzZXRQb3NpdGlvbjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmVsZW1lbnRzO2JbMTJdPWEueDtiWzEzXT1hLnk7YlsxNF09YS56O3JldHVybiB0aGlzfSxnZXRJbnZlcnNlOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5lbGVtZW50cyxkPWEuZWxlbWVudHMsZT1kWzBdLGY9ZFsxXSxnPWRbMl0saD1kWzNdLGs9ZFs0XSxtPWRbNV0sbD1kWzZdLHE9ZFs3XSxuPWRbOF0scj1kWzldLHA9ZFsxMF0sdD1kWzExXSx5PWRbMTJdLHg9ZFsxM10sdj1kWzE0XSxkPWRbMTVdLEc9cip2KnEteCpwKnEreCpsKnQtbSp2KnQtcipsKmQrbSpwKmQsdz15KnAqcS1uKnYqcS15KmwqdCtrKnYqdCtuKmwqZC1rKnAqZCxPPW4qeCpxLXkqcipxK3kqbSp0LQprKngqdC1uKm0qZCtrKnIqZCxTPXkqcipsLW4qeCpsLXkqbSpwK2sqeCpwK24qbSp2LWsqcip2LEU9ZSpHK2YqdytnKk8raCpTO2lmKDA9PT1FKXtpZighMD09PWIpdGhyb3cgRXJyb3IoIlRIUkVFLk1hdHJpeDQuZ2V0SW52ZXJzZSgpOiBjYW4ndCBpbnZlcnQgbWF0cml4LCBkZXRlcm1pbmFudCBpcyAwIik7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0LmdldEludmVyc2UoKTogY2FuJ3QgaW52ZXJ0IG1hdHJpeCwgZGV0ZXJtaW5hbnQgaXMgMCIpO3JldHVybiB0aGlzLmlkZW50aXR5KCl9RT0xL0U7Y1swXT1HKkU7Y1sxXT0oeCpwKmgtcip2KmgteCpnKnQrZip2KnQrcipnKmQtZipwKmQpKkU7Y1syXT0obSp2KmgteCpsKmgreCpnKnEtZip2KnEtbSpnKmQrZipsKmQpKkU7Y1szXT0ocipsKmgtbSpwKmgtcipnKnErZipwKnErbSpnKnQtZipsKnQpKkU7Y1s0XT13KkU7Y1s1XT0obip2KmgteSpwKmgreSpnKnQtZSp2KnQtbipnKmQrZSpwKmQpKkU7Y1s2XT0oeSpsKmgtayp2KmgtCnkqZypxK2UqdipxK2sqZypkLWUqbCpkKSpFO2NbN109KGsqcCpoLW4qbCpoK24qZypxLWUqcCpxLWsqZyp0K2UqbCp0KSpFO2NbOF09TypFO2NbOV09KHkqcipoLW4qeCpoLXkqZip0K2UqeCp0K24qZipkLWUqcipkKSpFO2NbMTBdPShrKngqaC15Km0qaCt5KmYqcS1lKngqcS1rKmYqZCtlKm0qZCkqRTtjWzExXT0obiptKmgtaypyKmgtbipmKnErZSpyKnEraypmKnQtZSptKnQpKkU7Y1sxMl09UypFO2NbMTNdPShuKngqZy15KnIqZyt5KmYqcC1lKngqcC1uKmYqditlKnIqdikqRTtjWzE0XT0oeSptKmctayp4KmcteSpmKmwrZSp4KmwraypmKnYtZSptKnYpKkU7Y1sxNV09KGsqcipnLW4qbSpnK24qZipsLWUqcipsLWsqZipwK2UqbSpwKSpFO3JldHVybiB0aGlzfSxzY2FsZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmVsZW1lbnRzLGM9YS54LGQ9YS55O2E9YS56O2JbMF0qPWM7Yls0XSo9ZDtiWzhdKj1hO2JbMV0qPWM7Yls1XSo9ZDtiWzldKj1hO2JbMl0qPWM7Yls2XSo9ZDtiWzEwXSo9CmE7YlszXSo9YztiWzddKj1kO2JbMTFdKj1hO3JldHVybiB0aGlzfSxnZXRNYXhTY2FsZU9uQXhpczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZWxlbWVudHM7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heChhWzBdKmFbMF0rYVsxXSphWzFdK2FbMl0qYVsyXSxhWzRdKmFbNF0rYVs1XSphWzVdK2FbNl0qYVs2XSxhWzhdKmFbOF0rYVs5XSphWzldK2FbMTBdKmFbMTBdKSl9LG1ha2VUcmFuc2xhdGlvbjpmdW5jdGlvbihhLGIsYyl7dGhpcy5zZXQoMSwwLDAsYSwwLDEsMCxiLDAsMCwxLGMsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LG1ha2VSb3RhdGlvblg6ZnVuY3Rpb24oYSl7dmFyIGI9TWF0aC5jb3MoYSk7YT1NYXRoLnNpbihhKTt0aGlzLnNldCgxLDAsMCwwLDAsYiwtYSwwLDAsYSxiLDAsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LG1ha2VSb3RhdGlvblk6ZnVuY3Rpb24oYSl7dmFyIGI9TWF0aC5jb3MoYSk7YT1NYXRoLnNpbihhKTt0aGlzLnNldChiLDAsYSwwLDAsMSwwLDAsLWEsMCxiLAowLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlUm90YXRpb25aOmZ1bmN0aW9uKGEpe3ZhciBiPU1hdGguY29zKGEpO2E9TWF0aC5zaW4oYSk7dGhpcy5zZXQoYiwtYSwwLDAsYSxiLDAsMCwwLDAsMSwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlUm90YXRpb25BeGlzOmZ1bmN0aW9uKGEsYil7dmFyIGM9TWF0aC5jb3MoYiksZD1NYXRoLnNpbihiKSxlPTEtYyxmPWEueCxnPWEueSxoPWEueixrPWUqZixtPWUqZzt0aGlzLnNldChrKmYrYyxrKmctZCpoLGsqaCtkKmcsMCxrKmcrZCpoLG0qZytjLG0qaC1kKmYsMCxrKmgtZCpnLG0qaCtkKmYsZSpoKmgrYywwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlU2NhbGU6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuc2V0KGEsMCwwLDAsMCxiLDAsMCwwLDAsYywwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlU2hlYXI6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuc2V0KDEsYixjLDAsYSwxLGMsMCxhLGIsMSwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSwKY29tcG9zZTpmdW5jdGlvbihhLGIsYyl7dGhpcy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihiKTt0aGlzLnNjYWxlKGMpO3RoaXMuc2V0UG9zaXRpb24oYSk7cmV0dXJuIHRoaXN9LGRlY29tcG9zZTpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGMsZCxlKXt2YXIgZj10aGlzLmVsZW1lbnRzLGc9YS5zZXQoZlswXSxmWzFdLGZbMl0pLmxlbmd0aCgpLGg9YS5zZXQoZls0XSxmWzVdLGZbNl0pLmxlbmd0aCgpLGs9YS5zZXQoZls4XSxmWzldLGZbMTBdKS5sZW5ndGgoKTswPnRoaXMuZGV0ZXJtaW5hbnQoKSYmKGc9LWcpO2MueD1mWzEyXTtjLnk9ZlsxM107Yy56PWZbMTRdO2IuY29weSh0aGlzKTtjPTEvZzt2YXIgZj0xL2gsbT0xL2s7Yi5lbGVtZW50c1swXSo9YztiLmVsZW1lbnRzWzFdKj1jO2IuZWxlbWVudHNbMl0qPWM7Yi5lbGVtZW50c1s0XSo9ZjtiLmVsZW1lbnRzWzVdKj1mO2IuZWxlbWVudHNbNl0qPWY7Yi5lbGVtZW50c1s4XSo9Cm07Yi5lbGVtZW50c1s5XSo9bTtiLmVsZW1lbnRzWzEwXSo9bTtkLnNldEZyb21Sb3RhdGlvbk1hdHJpeChiKTtlLng9ZztlLnk9aDtlLno9aztyZXR1cm4gdGhpc319KCksbWFrZVBlcnNwZWN0aXZlOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2b2lkIDA9PT1mJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUGVyc3BlY3RpdmUoKSBoYXMgYmVlbiByZWRlZmluZWQgYW5kIGhhcyBhIG5ldyBzaWduYXR1cmUuIFBsZWFzZSBjaGVjayB0aGUgZG9jcy4iKTt2YXIgZz10aGlzLmVsZW1lbnRzO2dbMF09MiplLyhiLWEpO2dbNF09MDtnWzhdPShiK2EpLyhiLWEpO2dbMTJdPTA7Z1sxXT0wO2dbNV09MiplLyhjLWQpO2dbOV09KGMrZCkvKGMtZCk7Z1sxM109MDtnWzJdPTA7Z1s2XT0wO2dbMTBdPS0oZitlKS8oZi1lKTtnWzE0XT0tMipmKmUvKGYtZSk7Z1szXT0wO2dbN109MDtnWzExXT0tMTtnWzE1XT0wO3JldHVybiB0aGlzfSxtYWtlT3J0aG9ncmFwaGljOmZ1bmN0aW9uKGEsCmIsYyxkLGUsZil7dmFyIGc9dGhpcy5lbGVtZW50cyxoPTEvKGItYSksaz0xLyhjLWQpLG09MS8oZi1lKTtnWzBdPTIqaDtnWzRdPTA7Z1s4XT0wO2dbMTJdPS0oKGIrYSkqaCk7Z1sxXT0wO2dbNV09MiprO2dbOV09MDtnWzEzXT0tKChjK2QpKmspO2dbMl09MDtnWzZdPTA7Z1sxMF09LTIqbTtnWzE0XT0tKChmK2UpKm0pO2dbM109MDtnWzddPTA7Z1sxMV09MDtnWzE1XT0xO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbGVtZW50czthPWEuZWxlbWVudHM7Zm9yKHZhciBjPTA7MTY+YztjKyspaWYoYltjXSE9PWFbY10pcmV0dXJuITE7cmV0dXJuITB9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO2Zvcih2YXIgYz0wOzE2PmM7YysrKXRoaXMuZWxlbWVudHNbY109YVtjK2JdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YSYmKGE9W10pO3ZvaWQgMD09PWImJihiPTApO3ZhciBjPXRoaXMuZWxlbWVudHM7CmFbYl09Y1swXTthW2IrMV09Y1sxXTthW2IrMl09Y1syXTthW2IrM109Y1szXTthW2IrNF09Y1s0XTthW2IrNV09Y1s1XTthW2IrNl09Y1s2XTthW2IrN109Y1s3XTthW2IrOF09Y1s4XTthW2IrOV09Y1s5XTthW2IrMTBdPWNbMTBdO2FbYisxMV09Y1sxMV07YVtiKzEyXT1jWzEyXTthW2IrMTNdPWNbMTNdO2FbYisxNF09Y1sxNF07YVtiKzE1XT1jWzE1XTtyZXR1cm4gYX19KTtlYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShYLnByb3RvdHlwZSk7ZWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWViO2ViLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO1phLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFgucHJvdG90eXBlKTtaYS5wcm90b3R5cGUuY29uc3RydWN0b3I9WmE7WmEucHJvdG90eXBlLmlzQ3ViZVRleHR1cmU9ITA7T2JqZWN0LmRlZmluZVByb3BlcnR5KFphLnByb3RvdHlwZSwiaW1hZ2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW1hZ2V9LHNldDpmdW5jdGlvbihhKXt0aGlzLmltYWdlPQphfX0pO3ZhciBEZT1uZXcgWCxFZT1uZXcgWmEseWU9W10sQWU9W10sQ2U9bmV3IEZsb2F0MzJBcnJheSgxNiksQmU9bmV3IEZsb2F0MzJBcnJheSg5KTtJZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9dGhpcy5zZXEsZD0wLGU9Yy5sZW5ndGg7ZCE9PWU7KytkKXt2YXIgZj1jW2RdO2Yuc2V0VmFsdWUoYSxiW2YuaWRdKX19O3ZhciBRZD0vKFtcd1xkX10rKShcXSk/KFxbfFwuKT8vZztmYi5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oYSxiLGMpe2I9dGhpcy5tYXBbYl07dm9pZCAwIT09YiYmYi5zZXRWYWx1ZShhLGMsdGhpcy5yZW5kZXJlcil9O2ZiLnByb3RvdHlwZS5zZXRPcHRpb25hbD1mdW5jdGlvbihhLGIsYyl7Yj1iW2NdO3ZvaWQgMCE9PWImJnRoaXMuc2V0VmFsdWUoYSxjLGIpfTtmYi51cGxvYWQ9ZnVuY3Rpb24oYSxiLGMsZCl7Zm9yKHZhciBlPTAsZj1iLmxlbmd0aDtlIT09ZjsrK2Upe3ZhciBnPWJbZV0saD1jW2cuaWRdOyExIT09CmgubmVlZHNVcGRhdGUmJmcuc2V0VmFsdWUoYSxoLnZhbHVlLGQpfX07ZmIuc2VxV2l0aFZhbHVlPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdLGQ9MCxlPWEubGVuZ3RoO2QhPT1lOysrZCl7dmFyIGY9YVtkXTtmLmlkIGluIGImJmMucHVzaChmKX1yZXR1cm4gY307dmFyIGtnPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSwKZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLApmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MiwKbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LApuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsCnNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtPYmplY3QuYXNzaWduKEgucHJvdG90eXBlLHtpc0NvbG9yOiEwLHI6MSxnOjEsYjoxLHNldDpmdW5jdGlvbihhKXthJiZhLmlzQ29sb3I/dGhpcy5jb3B5KGEpOiJudW1iZXIiPT09dHlwZW9mIGE/dGhpcy5zZXRIZXgoYSk6InN0cmluZyI9PT10eXBlb2YgYSYmdGhpcy5zZXRTdHlsZShhKTtyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMuYj10aGlzLmc9dGhpcy5yPQphO3JldHVybiB0aGlzfSxzZXRIZXg6ZnVuY3Rpb24oYSl7YT1NYXRoLmZsb29yKGEpO3RoaXMucj0oYT4+MTYmMjU1KS8yNTU7dGhpcy5nPShhPj44JjI1NSkvMjU1O3RoaXMuYj0oYSYyNTUpLzI1NTtyZXR1cm4gdGhpc30sc2V0UkdCOmZ1bmN0aW9uKGEsYixjKXt0aGlzLnI9YTt0aGlzLmc9Yjt0aGlzLmI9YztyZXR1cm4gdGhpc30sc2V0SFNMOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGMsZCl7MD5kJiYoZCs9MSk7MTxkJiYtLWQ7cmV0dXJuIGQ8MS82P2ErNiooYy1hKSpkOi41PmQ/YzpkPDIvMz9hKzYqKGMtYSkqKDIvMy1kKTphfXJldHVybiBmdW5jdGlvbihiLGMsZCl7Yj1ZLmV1Y2xpZGVhbk1vZHVsbyhiLDEpO2M9WS5jbGFtcChjLDAsMSk7ZD1ZLmNsYW1wKGQsMCwxKTswPT09Yz90aGlzLnI9dGhpcy5nPXRoaXMuYj1kOihjPS41Pj1kP2QqKDErYyk6ZCtjLWQqYyxkPTIqZC1jLHRoaXMucj1hKGQsYyxiKzEvMyksdGhpcy5nPWEoZCxjLGIpLHRoaXMuYj1hKGQsYyxiLTEvCjMpKTtyZXR1cm4gdGhpc319KCksc2V0U3R5bGU6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXt2b2lkIDAhPT1iJiYxPnBhcnNlRmxvYXQoYikmJmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IEFscGhhIGNvbXBvbmVudCBvZiAiK2ErIiB3aWxsIGJlIGlnbm9yZWQuIil9dmFyIGM7aWYoYz0vXigoPzpyZ2J8aHNsKWE/KVwoXHMqKFteXCldKilcKS8uZXhlYyhhKSl7dmFyIGQ9Y1syXTtzd2l0Y2goY1sxXSl7Y2FzZSAicmdiIjpjYXNlICJyZ2JhIjppZihjPS9eKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccyooLFxzKihbMC05XSpcLj9bMC05XSspXHMqKT8kLy5leGVjKGQpKXJldHVybiB0aGlzLnI9TWF0aC5taW4oMjU1LHBhcnNlSW50KGNbMV0sMTApKS8yNTUsdGhpcy5nPU1hdGgubWluKDI1NSxwYXJzZUludChjWzJdLDEwKSkvMjU1LHRoaXMuYj1NYXRoLm1pbigyNTUscGFyc2VJbnQoY1szXSwxMCkpLzI1NSxiKGNbNV0pLHRoaXM7aWYoYz0vXihcZCspXCVccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKCxccyooWzAtOV0qXC4/WzAtOV0rKVxzKik/JC8uZXhlYyhkKSlyZXR1cm4gdGhpcy5yPQpNYXRoLm1pbigxMDAscGFyc2VJbnQoY1sxXSwxMCkpLzEwMCx0aGlzLmc9TWF0aC5taW4oMTAwLHBhcnNlSW50KGNbMl0sMTApKS8xMDAsdGhpcy5iPU1hdGgubWluKDEwMCxwYXJzZUludChjWzNdLDEwKSkvMTAwLGIoY1s1XSksdGhpczticmVhaztjYXNlICJoc2wiOmNhc2UgImhzbGEiOmlmKGM9L14oWzAtOV0qXC4/WzAtOV0rKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooLFxzKihbMC05XSpcLj9bMC05XSspXHMqKT8kLy5leGVjKGQpKXt2YXIgZD1wYXJzZUZsb2F0KGNbMV0pLzM2MCxlPXBhcnNlSW50KGNbMl0sMTApLzEwMCxmPXBhcnNlSW50KGNbM10sMTApLzEwMDtiKGNbNV0pO3JldHVybiB0aGlzLnNldEhTTChkLGUsZil9fX1lbHNlIGlmKGM9L15cIyhbQS1GYS1mMC05XSspJC8uZXhlYyhhKSl7Yz1jWzFdO2Q9Yy5sZW5ndGg7aWYoMz09PWQpcmV0dXJuIHRoaXMucj1wYXJzZUludChjLmNoYXJBdCgwKStjLmNoYXJBdCgwKSwxNikvMjU1LHRoaXMuZz1wYXJzZUludChjLmNoYXJBdCgxKSsKYy5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoYy5jaGFyQXQoMikrYy5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKDY9PT1kKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoYy5jaGFyQXQoMCkrYy5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoYy5jaGFyQXQoMikrYy5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoYy5jaGFyQXQoNCkrYy5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfWEmJjA8YS5sZW5ndGgmJihjPWtnW2FdLHZvaWQgMCE9PWM/dGhpcy5zZXRIZXgoYyk6Y29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogVW5rbm93biBjb2xvciAiK2EpKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5yLHRoaXMuZyx0aGlzLmIpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMucj1hLnI7dGhpcy5nPWEuZzt0aGlzLmI9YS5iO3JldHVybiB0aGlzfSxjb3B5R2FtbWFUb0xpbmVhcjpmdW5jdGlvbihhLApiKXt2b2lkIDA9PT1iJiYoYj0yKTt0aGlzLnI9TWF0aC5wb3coYS5yLGIpO3RoaXMuZz1NYXRoLnBvdyhhLmcsYik7dGhpcy5iPU1hdGgucG93KGEuYixiKTtyZXR1cm4gdGhpc30sY29weUxpbmVhclRvR2FtbWE6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0yKTt2YXIgYz0wPGI/MS9iOjE7dGhpcy5yPU1hdGgucG93KGEucixjKTt0aGlzLmc9TWF0aC5wb3coYS5nLGMpO3RoaXMuYj1NYXRoLnBvdyhhLmIsYyk7cmV0dXJuIHRoaXN9LGNvbnZlcnRHYW1tYVRvTGluZWFyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yLGI9dGhpcy5nLGM9dGhpcy5iO3RoaXMucj1hKmE7dGhpcy5nPWIqYjt0aGlzLmI9YypjO3JldHVybiB0aGlzfSxjb252ZXJ0TGluZWFyVG9HYW1tYTpmdW5jdGlvbigpe3RoaXMucj1NYXRoLnNxcnQodGhpcy5yKTt0aGlzLmc9TWF0aC5zcXJ0KHRoaXMuZyk7dGhpcy5iPU1hdGguc3FydCh0aGlzLmIpO3JldHVybiB0aGlzfSxnZXRIZXg6ZnVuY3Rpb24oKXtyZXR1cm4gMjU1Kgp0aGlzLnI8PDE2XjI1NSp0aGlzLmc8PDheMjU1KnRoaXMuYjw8MH0sZ2V0SGV4U3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuKCIwMDAwMDAiK3RoaXMuZ2V0SGV4KCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNil9LGdldEhTTDpmdW5jdGlvbihhKXthPWF8fHtoOjAsczowLGw6MH07dmFyIGI9dGhpcy5yLGM9dGhpcy5nLGQ9dGhpcy5iLGU9TWF0aC5tYXgoYixjLGQpLGY9TWF0aC5taW4oYixjLGQpLGcsaD0oZitlKS8yO2lmKGY9PT1lKWY9Zz0wO2Vsc2V7dmFyIGs9ZS1mLGY9LjU+PWg/ay8oZStmKTprLygyLWUtZik7c3dpdGNoKGUpe2Nhc2UgYjpnPShjLWQpL2srKGM8ZD82OjApO2JyZWFrO2Nhc2UgYzpnPShkLWIpL2srMjticmVhaztjYXNlIGQ6Zz0oYi1jKS9rKzR9Zy89Nn1hLmg9ZzthLnM9ZjthLmw9aDtyZXR1cm4gYX0sZ2V0U3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4icmdiKCIrKDI1NSp0aGlzLnJ8MCkrIiwiKygyNTUqdGhpcy5nfDApKyIsIisoMjU1KnRoaXMuYnwwKSsiKSJ9LApvZmZzZXRIU0w6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuZ2V0SFNMKCk7ZC5oKz1hO2Qucys9YjtkLmwrPWM7dGhpcy5zZXRIU0woZC5oLGQucyxkLmwpO3JldHVybiB0aGlzfSxhZGQ6ZnVuY3Rpb24oYSl7dGhpcy5yKz1hLnI7dGhpcy5nKz1hLmc7dGhpcy5iKz1hLmI7cmV0dXJuIHRoaXN9LGFkZENvbG9yczpmdW5jdGlvbihhLGIpe3RoaXMucj1hLnIrYi5yO3RoaXMuZz1hLmcrYi5nO3RoaXMuYj1hLmIrYi5iO3JldHVybiB0aGlzfSxhZGRTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy5yKz1hO3RoaXMuZys9YTt0aGlzLmIrPWE7cmV0dXJuIHRoaXN9LHN1YjpmdW5jdGlvbihhKXt0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItYS5yKTt0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctYS5nKTt0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItYS5iKTtyZXR1cm4gdGhpc30sbXVsdGlwbHk6ZnVuY3Rpb24oYSl7dGhpcy5yKj1hLnI7dGhpcy5nKj1hLmc7dGhpcy5iKj1hLmI7cmV0dXJuIHRoaXN9LAptdWx0aXBseVNjYWxhcjpmdW5jdGlvbihhKXt0aGlzLnIqPWE7dGhpcy5nKj1hO3RoaXMuYio9YTtyZXR1cm4gdGhpc30sbGVycDpmdW5jdGlvbihhLGIpe3RoaXMucis9KGEuci10aGlzLnIpKmI7dGhpcy5nKz0oYS5nLXRoaXMuZykqYjt0aGlzLmIrPShhLmItdGhpcy5iKSpiO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucj09PXRoaXMuciYmYS5nPT09dGhpcy5nJiZhLmI9PT10aGlzLmJ9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO3RoaXMucj1hW2JdO3RoaXMuZz1hW2IrMV07dGhpcy5iPWFbYisyXTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWEmJihhPVtdKTt2b2lkIDA9PT1iJiYoYj0wKTthW2JdPXRoaXMucjthW2IrMV09dGhpcy5nO2FbYisyXT10aGlzLmI7cmV0dXJuIGF9LHRvSlNPTjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEhleCgpfX0pO3ZhciBWPXtjb21tb246e2RpZmZ1c2U6e3ZhbHVlOm5ldyBIKDE1NjU4NzM0KX0sCm9wYWNpdHk6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sb2Zmc2V0UmVwZWF0Ont2YWx1ZTpuZXcgZ2EoMCwwLDEsMSl9LHNwZWN1bGFyTWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxyZWZyYWN0aW9uUmF0aW86e3ZhbHVlOi45OH19LGFvbWFwOnthb01hcDp7dmFsdWU6bnVsbH0sYW9NYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxsaWdodG1hcDp7bGlnaHRNYXA6e3ZhbHVlOm51bGx9LGxpZ2h0TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sZW1pc3NpdmVtYXA6e2VtaXNzaXZlTWFwOnt2YWx1ZTpudWxsfX0sYnVtcG1hcDp7YnVtcE1hcDp7dmFsdWU6bnVsbH0sYnVtcFNjYWxlOnt2YWx1ZToxfX0sbm9ybWFsbWFwOntub3JtYWxNYXA6e3ZhbHVlOm51bGx9LG5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgRCgxLDEpfX0sZGlzcGxhY2VtZW50bWFwOntkaXNwbGFjZW1lbnRNYXA6e3ZhbHVlOm51bGx9LApkaXNwbGFjZW1lbnRTY2FsZTp7dmFsdWU6MX0sZGlzcGxhY2VtZW50Qmlhczp7dmFsdWU6MH19LHJvdWdobmVzc21hcDp7cm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfX0sbWV0YWxuZXNzbWFwOnttZXRhbG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxncmFkaWVudG1hcDp7Z3JhZGllbnRNYXA6e3ZhbHVlOm51bGx9fSxmb2c6e2ZvZ0RlbnNpdHk6e3ZhbHVlOjIuNUUtNH0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyRTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgSCgxNjc3NzIxNSl9fSxsaWdodHM6e2FtYmllbnRMaWdodENvbG9yOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxjb2xvcjp7fSxzaGFkb3c6e30sc2hhZG93Qmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSwKc3BvdExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGlyZWN0aW9uOnt9LGRpc3RhbmNlOnt9LGNvbmVDb3M6e30scGVudW1icmFDb3M6e30sZGVjYXk6e30sc2hhZG93Ont9LHNoYWRvd0JpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e319fSxzcG90U2hhZG93TWFwOnt2YWx1ZTpbXX0sc3BvdFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHBvaW50TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkZWNheTp7fSxkaXN0YW5jZTp7fSxzaGFkb3c6e30sc2hhZG93Qmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10sCnByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LHdpZHRoOnt9LGhlaWdodDp7fX19fSxwb2ludHM6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBIKDE1NjU4NzM0KX0sb3BhY2l0eTp7dmFsdWU6MX0sc2l6ZTp7dmFsdWU6MX0sc2NhbGU6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sb2Zmc2V0UmVwZWF0Ont2YWx1ZTpuZXcgZ2EoMCwwLDEsMSl9fX0sSGE9e21lcmdlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj17fSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuY2xvbmUoYVtjXSksZTtmb3IoZSBpbiBkKWJbZV09ZFtlXX1yZXR1cm4gYn0sY2xvbmU6ZnVuY3Rpb24oYSl7dmFyIGI9e30sYztmb3IoYyBpbiBhKXtiW2NdPXt9O2Zvcih2YXIgZCBpbiBhW2NdKXt2YXIgZT1hW2NdW2RdO2UmJihlLmlzQ29sb3J8fGUuaXNNYXRyaXgzfHxlLmlzTWF0cml4NHx8ZS5pc1ZlY3RvcjJ8fGUuaXNWZWN0b3IzfHxlLmlzVmVjdG9yNHx8ZS5pc1RleHR1cmUpP2JbY11bZF09ZS5jbG9uZSgpOgpBcnJheS5pc0FycmF5KGUpP2JbY11bZF09ZS5zbGljZSgpOmJbY11bZF09ZX19cmV0dXJuIGJ9fSxVPXthbHBoYW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xuI2VuZGlmXG4iLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XG4jZW5kaWZcbiIsYWxwaGF0ZXN0X2ZyYWdtZW50OiIjaWZkZWYgQUxQSEFURVNUXG5cdGlmICggZGlmZnVzZUNvbG9yLmEgPCBBTFBIQVRFU1QgKSBkaXNjYXJkO1xuI2VuZGlmXG4iLGFvbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGFtYmllbnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUEhZU0lDQUwgKVxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuI2VuZGlmXG4iLAphb21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwO1xuXHR1bmlmb3JtIGZsb2F0IGFvTWFwSW50ZW5zaXR5O1xuI2VuZGlmIixiZWdpbl92ZXJ0ZXg6IlxudmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9uICk7XG4iLGJlZ2lubm9ybWFsX3ZlcnRleDoiXG52ZWMzIG9iamVjdE5vcm1hbCA9IHZlYzMoIG5vcm1hbCApO1xuIixic2RmczoiZmxvYXQgcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7XG5cdGlmKCBkZWNheUV4cG9uZW50ID4gMC4wICkge1xuI2lmIGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcblx0XHRmbG9hdCBkaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0YW5jZSwgZGVjYXlFeHBvbmVudCApLCAwLjAxICk7XG5cdFx0ZmxvYXQgbWF4RGlzdGFuY2VDdXRvZmZGYWN0b3IgPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApO1xuXHRcdHJldHVybiBkaXN0YW5jZUZhbGxvZmYgKiBtYXhEaXN0YW5jZUN1dG9mZkZhY3RvcjtcbiNlbHNlXG5cdFx0cmV0dXJuIHBvdyggc2F0dXJhdGUoIC1saWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApO1xuI2VuZGlmXG5cdH1cblx0cmV0dXJuIDEuMDtcbn1cbnZlYzMgQlJERl9EaWZmdXNlX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcbn1cbnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IGRvdExIICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtNS41NTQ3MyAqIGRvdExIIC0gNi45ODMxNiApICogZG90TEggKTtcblx0cmV0dXJuICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogZnJlc25lbCArIHNwZWN1bGFyQ29sb3I7XG59XG5mbG9hdCBHX0dHWF9TbWl0aCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5MLCBjb25zdCBpbiBmbG9hdCBkb3ROViApIHtcblx0ZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApO1xuXHRmbG9hdCBnbCA9IGRvdE5MICsgc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdGZsb2F0IGd2ID0gZG90TlYgKyBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0cmV0dXJuIDEuMCAvICggZ2wgKiBndiApO1xufVxuZmxvYXQgR19HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGd2ID0gZG90TkwgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0ZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApO1xuXHRyZXR1cm4gMC41IC8gbWF4KCBndiArIGdsLCBFUFNJTE9OICk7XG59XG5mbG9hdCBEX0dHWCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGRlbm9tID0gcG93MiggZG90TkggKSAqICggYTIgLSAxLjAgKSArIDEuMDtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9tICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfR0dYKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGluY2lkZW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uICsgZ2VvbWV0cnkudmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24gKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90TEggPSBzYXR1cmF0ZSggZG90KCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiwgaGFsZkRpciApICk7XG5cdHZlYzMgRiA9IEZfU2NobGljayggc3BlY3VsYXJDb2xvciwgZG90TEggKTtcblx0ZmxvYXQgRyA9IEdfR0dYX1NtaXRoQ29ycmVsYXRlZCggYWxwaGEsIGRvdE5MLCBkb3ROViApO1xuXHRmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbnZlYzIgTFRDX1V2KCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRjb25zdCBmbG9hdCBMVVRfU0laRSAgPSA2NC4wO1xuXHRjb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTtcblx0Y29uc3QgZmxvYXQgTFVUX0JJQVMgID0gMC41IC8gTFVUX1NJWkU7XG5cdGZsb2F0IHRoZXRhID0gYWNvcyggZG90KCBOLCBWICkgKTtcblx0dmVjMiB1diA9IHZlYzIoXG5cdFx0c3FydCggc2F0dXJhdGUoIHJvdWdobmVzcyApICksXG5cdFx0c2F0dXJhdGUoIHRoZXRhIC8gKCAwLjUgKiBQSSApICkgKTtcblx0dXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xuXHRyZXR1cm4gdXY7XG59XG5mbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHtcblx0ZmxvYXQgbCA9IGxlbmd0aCggZiApO1xuXHRyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAoIGwgKyAxLjAgKSwgMC4wICk7XG59XG52ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHtcblx0ZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7XG5cdGZsb2F0IHkgPSBhYnMoIHggKTtcblx0ZmxvYXQgYSA9IDAuODYyNjcgKyAoMC40OTc4OCArIDAuMDE0MzYgKiB5ICkgKiB5O1xuXHRmbG9hdCBiID0gMy40NTA2OCArICg0LjE4ODE0ICsgeSkgKiB5O1xuXHRmbG9hdCB2ID0gYSAvIGI7XG5cdGZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKHggPiAwLjApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCAxLjAgLSB4ICogeCApIC0gdjtcblx0cmV0dXJuIGNyb3NzKCB2MSwgdjIgKSAqIHRoZXRhX3NpbnRoZXRhO1xufVxudmVjMyBMVENfRXZhbHVhdGUoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiB2ZWMzIFAsIGNvbnN0IGluIG1hdDMgbUludiwgY29uc3QgaW4gdmVjMyByZWN0Q29vcmRzWyA0IF0gKSB7XG5cdHZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgdjIgPSByZWN0Q29vcmRzWyAzIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgbGlnaHROb3JtYWwgPSBjcm9zcyggdjEsIHYyICk7XG5cdGlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7XG5cdHZlYzMgVDEsIFQyO1xuXHRUMSA9IG5vcm1hbGl6ZSggViAtIE4gKiBkb3QoIFYsIE4gKSApO1xuXHRUMiA9IC0gY3Jvc3MoIE4sIFQxICk7XG5cdG1hdDMgbWF0ID0gbUludiAqIHRyYW5zcG9zZSggbWF0MyggVDEsIFQyLCBOICkgKTtcblx0dmVjMyBjb29yZHNbIDQgXTtcblx0Y29vcmRzWyAwIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDAgXSAtIFAgKTtcblx0Y29vcmRzWyAxIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDEgXSAtIFAgKTtcblx0Y29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTtcblx0Y29vcmRzWyAzIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDMgXSAtIFAgKTtcblx0Y29vcmRzWyAwIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMCBdICk7XG5cdGNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApO1xuXHRjb29yZHNbIDIgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAyIF0gKTtcblx0Y29vcmRzWyAzIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMyBdICk7XG5cdHZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAwIF0sIGNvb3Jkc1sgMSBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDEgXSwgY29vcmRzWyAyIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAzIF0sIGNvb3Jkc1sgMCBdICk7XG5cdHZlYzMgcmVzdWx0ID0gdmVjMyggTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICkgKTtcblx0cmV0dXJuIHJlc3VsdDtcbn1cbnZlYzMgQlJERl9TcGVjdWxhcl9HR1hfRW52aXJvbm1lbnQoIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdGNvbnN0IHZlYzQgYzAgPSB2ZWM0KCAtIDEsIC0gMC4wMjc1LCAtIDAuNTcyLCAwLjAyMiApO1xuXHRjb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTtcblx0dmVjNCByID0gcm91Z2huZXNzICogYzAgKyBjMTtcblx0ZmxvYXQgYTAwNCA9IG1pbiggci54ICogci54LCBleHAyKCAtIDkuMjggKiBkb3ROViApICkgKiByLnggKyByLnk7XG5cdHZlYzIgQUIgPSB2ZWMyKCAtMS4wNCwgMS4wNCApICogYTAwNCArIHIuenc7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogQUIueCArIEFCLnk7XG59XG5mbG9hdCBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICkge1xuXHRyZXR1cm4gMC4yNTtcbn1cbmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KCBkb3ROSCwgc2hpbmluZXNzICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBpbmNpZGVudExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiArIGdlb21ldHJ5LnZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RMSCA9IHNhdHVyYXRlKCBkb3QoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCBkb3RMSCApO1xuXHRmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApO1xuXHRmbG9hdCBEID0gRF9CbGlublBob25nKCBzaGluaW5lc3MsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBHICogRCApO1xufVxuZmxvYXQgR0dYUm91Z2huZXNzVG9CbGlubkV4cG9uZW50KCBjb25zdCBpbiBmbG9hdCBnZ3hSb3VnaG5lc3MgKSB7XG5cdHJldHVybiAoIDIuMCAvIHBvdzIoIGdneFJvdWdobmVzcyArIDAuMDAwMSApIC0gMi4wICk7XG59XG5mbG9hdCBCbGlubkV4cG9uZW50VG9HR1hSb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IGJsaW5uRXhwb25lbnQgKSB7XG5cdHJldHVybiBzcXJ0KCAyLjAgLyAoIGJsaW5uRXhwb25lbnQgKyAyLjAgKSApO1xufVxuIiwKYnVtcG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0JVTVBNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtcblx0dW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7XG5cdHZlYzIgZEhkeHlfZndkKCkge1xuXHRcdHZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTtcblx0XHR2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7XG5cdFx0ZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54O1xuXHRcdGZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsO1xuXHRcdGZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsO1xuXHRcdHJldHVybiB2ZWMyKCBkQngsIGRCeSApO1xuXHR9XG5cdHZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHkgKSB7XG5cdFx0dmVjMyB2U2lnbWFYID0gZEZkeCggc3VyZl9wb3MgKTtcblx0XHR2ZWMzIHZTaWdtYVkgPSBkRmR5KCBzdXJmX3BvcyApO1xuXHRcdHZlYzMgdk4gPSBzdXJmX25vcm07XG5cdFx0dmVjMyBSMSA9IGNyb3NzKCB2U2lnbWFZLCB2TiApO1xuXHRcdHZlYzMgUjIgPSBjcm9zcyggdk4sIHZTaWdtYVggKTtcblx0XHRmbG9hdCBmRGV0ID0gZG90KCB2U2lnbWFYLCBSMSApO1xuXHRcdHZlYzMgdkdyYWQgPSBzaWduKCBmRGV0ICkgKiAoIGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApO1xuXHRcdHJldHVybiBub3JtYWxpemUoIGFicyggZkRldCApICogc3VyZl9ub3JtIC0gdkdyYWQgKTtcblx0fVxuI2VuZGlmXG4iLApjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQUElOR19QTEFORVM7ICsrIGkgKSB7XG5cdFx0dmVjNCBwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07XG5cdFx0aWYgKCBkb3QoIHZWaWV3UG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApIGRpc2NhcmQ7XG5cdH1cblx0XHRcblx0I2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyA8IE5VTV9DTElQUElOR19QTEFORVNcblx0XHRib29sIGNsaXBwZWQgPSB0cnVlO1xuXHRcdGZvciAoIGludCBpID0gVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpIDwgTlVNX0NMSVBQSU5HX1BMQU5FUzsgKysgaSApIHtcblx0XHRcdHZlYzQgcGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdO1xuXHRcdFx0Y2xpcHBlZCA9ICggZG90KCB2Vmlld1Bvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSAmJiBjbGlwcGVkO1xuXHRcdH1cblx0XHRpZiAoIGNsaXBwZWQgKSBkaXNjYXJkO1xuXHRcblx0I2VuZGlmXG4jZW5kaWZcbiIsCmNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0I2lmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAhIGRlZmluZWQoIFBIT05HIClcblx0XHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcblx0I2VuZGlmXG5cdHVuaWZvcm0gdmVjNCBjbGlwcGluZ1BsYW5lc1sgTlVNX0NMSVBQSU5HX1BMQU5FUyBdO1xuI2VuZGlmXG4iLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwICYmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAhIGRlZmluZWQoIFBIT05HIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiIsY2xpcHBpbmdfcGxhbmVzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwICYmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAhIGRlZmluZWQoIFBIT05HIClcblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWZcbiIsCmNvbG9yX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0NPTE9SXG5cdGRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yO1xuI2VuZGlmIixjb2xvcl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0NPTE9SXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWZcbiIsY29sb3JfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfQ09MT1Jcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfdmVydGV4OiIjaWZkZWYgVVNFX0NPTE9SXG5cdHZDb2xvci54eXogPSBjb2xvci54eXo7XG4jZW5kaWYiLGNvbW1vbjoiI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU5XG4jZGVmaW5lIFBJMiA2LjI4MzE4NTMwNzE4XG4jZGVmaW5lIFBJX0hBTEYgMS41NzA3OTYzMjY3OTQ5XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxOFxuI2RlZmluZSBSRUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0XG4jZGVmaW5lIExPRzIgMS40NDI2OTVcbiNkZWZpbmUgRVBTSUxPTiAxZS02XG4jZGVmaW5lIHNhdHVyYXRlKGEpIGNsYW1wKCBhLCAwLjAsIDEuMCApXG4jZGVmaW5lIHdoaXRlQ29tcGxpbWVudChhKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKVxuZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfVxuZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9XG5mbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9XG5mbG9hdCBhdmVyYWdlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgeyByZXR1cm4gZG90KCBjb2xvciwgdmVjMyggMC4zMzMzICkgKTsgfVxuaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHtcblx0Y29uc3QgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTgsIGIgPSA3OC4yMzMsIGMgPSA0Mzc1OC41NDUzO1xuXHRoaWdocCBmbG9hdCBkdCA9IGRvdCggdXYueHksIHZlYzIoIGEsYiApICksIHNuID0gbW9kKCBkdCwgUEkgKTtcblx0cmV0dXJuIGZyYWN0KHNpbihzbikgKiBjKTtcbn1cbnN0cnVjdCBJbmNpZGVudExpZ2h0IHtcblx0dmVjMyBjb2xvcjtcblx0dmVjMyBkaXJlY3Rpb247XG5cdGJvb2wgdmlzaWJsZTtcbn07XG5zdHJ1Y3QgUmVmbGVjdGVkTGlnaHQge1xuXHR2ZWMzIGRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgZGlyZWN0U3BlY3VsYXI7XG5cdHZlYzMgaW5kaXJlY3REaWZmdXNlO1xuXHR2ZWMzIGluZGlyZWN0U3BlY3VsYXI7XG59O1xuc3RydWN0IEdlb21ldHJpY0NvbnRleHQge1xuXHR2ZWMzIHBvc2l0aW9uO1xuXHR2ZWMzIG5vcm1hbDtcblx0dmVjMyB2aWV3RGlyO1xufTtcbnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xufVxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xufVxudmVjMyBwcm9qZWN0T25QbGFuZShpbiB2ZWMzIHBvaW50LCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0ZmxvYXQgZGlzdGFuY2UgPSBkb3QoIHBsYW5lTm9ybWFsLCBwb2ludCAtIHBvaW50T25QbGFuZSApO1xuXHRyZXR1cm4gLSBkaXN0YW5jZSAqIHBsYW5lTm9ybWFsICsgcG9pbnQ7XG59XG5mbG9hdCBzaWRlT2ZQbGFuZSggaW4gdmVjMyBwb2ludCwgaW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdHJldHVybiBzaWduKCBkb3QoIHBvaW50IC0gcG9pbnRPblBsYW5lLCBwbGFuZU5vcm1hbCApICk7XG59XG52ZWMzIGxpbmVQbGFuZUludGVyc2VjdCggaW4gdmVjMyBwb2ludE9uTGluZSwgaW4gdmVjMyBsaW5lRGlyZWN0aW9uLCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0cmV0dXJuIGxpbmVEaXJlY3Rpb24gKiAoIGRvdCggcGxhbmVOb3JtYWwsIHBvaW50T25QbGFuZSAtIHBvaW50T25MaW5lICkgLyBkb3QoIHBsYW5lTm9ybWFsLCBsaW5lRGlyZWN0aW9uICkgKSArIHBvaW50T25MaW5lO1xufVxubWF0MyB0cmFuc3Bvc2UoIGNvbnN0IGluIG1hdDMgdiApIHtcblx0bWF0MyB0bXA7XG5cdHRtcFswXSA9IHZlYzModlswXS54LCB2WzFdLngsIHZbMl0ueCk7XG5cdHRtcFsxXSA9IHZlYzModlswXS55LCB2WzFdLnksIHZbMl0ueSk7XG5cdHRtcFsyXSA9IHZlYzModlswXS56LCB2WzFdLnosIHZbMl0ueik7XG5cdHJldHVybiB0bXA7XG59XG4iLApjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6IiNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWXG4jZGVmaW5lIGN1YmVVVl90ZXh0dXJlU2l6ZSAoMTAyNC4wKVxuaW50IGdldEZhY2VGcm9tRGlyZWN0aW9uKHZlYzMgZGlyZWN0aW9uKSB7XG5cdHZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKGRpcmVjdGlvbik7XG5cdGludCBmYWNlID0gLTE7XG5cdGlmKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkge1xuXHRcdGlmKGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMCA6IDM7XG5cdFx0ZWxzZVxuXHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMSA6IDQ7XG5cdH1cblx0ZWxzZSB7XG5cdFx0aWYoYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApXG5cdFx0XHRmYWNlID0gZGlyZWN0aW9uLnogPiAwLjAgPyAyIDogNTtcblx0XHRlbHNlXG5cdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxIDogNDtcblx0fVxuXHRyZXR1cm4gZmFjZTtcbn1cbiNkZWZpbmUgY3ViZVVWX21heExvZHMxICAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAxLjApXG4jZGVmaW5lIGN1YmVVVl9yYW5nZUNsYW1wIChleHAyKCg2LjAgLSAxLjApICogMi4wKSlcbnZlYzIgTWlwTGV2ZWxJbmZvKCB2ZWMzIHZlYywgZmxvYXQgcm91Z2huZXNzTGV2ZWwsIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgc2NhbGUgPSBleHAyKGN1YmVVVl9tYXhMb2RzMSAtIHJvdWdobmVzc0xldmVsKTtcblx0ZmxvYXQgZHhSb3VnaG5lc3MgPSBkRmR4KHJvdWdobmVzcyk7XG5cdGZsb2F0IGR5Um91Z2huZXNzID0gZEZkeShyb3VnaG5lc3MpO1xuXHR2ZWMzIGR4ID0gZEZkeCggdmVjICogc2NhbGUgKiBkeFJvdWdobmVzcyApO1xuXHR2ZWMzIGR5ID0gZEZkeSggdmVjICogc2NhbGUgKiBkeVJvdWdobmVzcyApO1xuXHRmbG9hdCBkID0gbWF4KCBkb3QoIGR4LCBkeCApLCBkb3QoIGR5LCBkeSApICk7XG5cdGQgPSBjbGFtcChkLCAxLjAsIGN1YmVVVl9yYW5nZUNsYW1wKTtcblx0ZmxvYXQgbWlwTGV2ZWwgPSAwLjUgKiBsb2cyKGQpO1xuXHRyZXR1cm4gdmVjMihmbG9vcihtaXBMZXZlbCksIGZyYWN0KG1pcExldmVsKSk7XG59XG4jZGVmaW5lIGN1YmVVVl9tYXhMb2RzMiAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAyLjApXG4jZGVmaW5lIGN1YmVVVl9yY3BUZXh0dXJlU2l6ZSAoMS4wIC8gY3ViZVVWX3RleHR1cmVTaXplKVxudmVjMiBnZXRDdWJlVVYodmVjMyBkaXJlY3Rpb24sIGZsb2F0IHJvdWdobmVzc0xldmVsLCBmbG9hdCBtaXBMZXZlbCkge1xuXHRtaXBMZXZlbCA9IHJvdWdobmVzc0xldmVsID4gY3ViZVVWX21heExvZHMyIC0gMy4wID8gMC4wIDogbWlwTGV2ZWw7XG5cdGZsb2F0IGEgPSAxNi4wICogY3ViZVVWX3JjcFRleHR1cmVTaXplO1xuXHR2ZWMyIGV4cDJfcGFja2VkID0gZXhwMiggdmVjMiggcm91Z2huZXNzTGV2ZWwsIG1pcExldmVsICkgKTtcblx0dmVjMiByY3BfZXhwMl9wYWNrZWQgPSB2ZWMyKCAxLjAgKSAvIGV4cDJfcGFja2VkO1xuXHRmbG9hdCBwb3dTY2FsZSA9IGV4cDJfcGFja2VkLnggKiBleHAyX3BhY2tlZC55O1xuXHRmbG9hdCBzY2FsZSA9IHJjcF9leHAyX3BhY2tlZC54ICogcmNwX2V4cDJfcGFja2VkLnkgKiAwLjI1O1xuXHRmbG9hdCBtaXBPZmZzZXQgPSAwLjc1KigxLjAgLSByY3BfZXhwMl9wYWNrZWQueSkgKiByY3BfZXhwMl9wYWNrZWQueDtcblx0Ym9vbCBiUmVzID0gbWlwTGV2ZWwgPT0gMC4wO1xuXHRzY2FsZSA9ICBiUmVzICYmIChzY2FsZSA8IGEpID8gYSA6IHNjYWxlO1xuXHR2ZWMzIHI7XG5cdHZlYzIgb2Zmc2V0O1xuXHRpbnQgZmFjZSA9IGdldEZhY2VGcm9tRGlyZWN0aW9uKGRpcmVjdGlvbik7XG5cdGZsb2F0IHJjcFBvd1NjYWxlID0gMS4wIC8gcG93U2NhbGU7XG5cdGlmKCBmYWNlID09IDApIHtcblx0XHRyID0gdmVjMyhkaXJlY3Rpb24ueCwgLWRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSk7XG5cdFx0b2Zmc2V0ID0gdmVjMigwLjArbWlwT2Zmc2V0LDAuNzUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVzICYmIChvZmZzZXQueSA8IDIuMCphKSA/IGEgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNlIGlmKCBmYWNlID09IDEpIHtcblx0XHRyID0gdmVjMyhkaXJlY3Rpb24ueSwgZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56KTtcblx0XHRvZmZzZXQgPSB2ZWMyKHNjYWxlK21pcE9mZnNldCwgMC43NSAqIHJjcFBvd1NjYWxlKTtcblx0XHRvZmZzZXQueSA9IGJSZXMgJiYgKG9mZnNldC55IDwgMi4wKmEpID8gYSA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgPT0gMikge1xuXHRcdHIgPSB2ZWMzKGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCA9IHZlYzIoMi4wKnNjYWxlK21pcE9mZnNldCwgMC43NSAqIHJjcFBvd1NjYWxlKTtcblx0XHRvZmZzZXQueSA9IGJSZXMgJiYgKG9mZnNldC55IDwgMi4wKmEpID8gYSA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgPT0gMykge1xuXHRcdHIgPSB2ZWMzKGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCA9IHZlYzIoMC4wK21pcE9mZnNldCwwLjUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVzICYmIChvZmZzZXQueSA8IDIuMCphKSA/IDAuMCA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgPT0gNCkge1xuXHRcdHIgPSB2ZWMzKGRpcmVjdGlvbi55LCBkaXJlY3Rpb24ueCwgLWRpcmVjdGlvbi56KTtcblx0XHRvZmZzZXQgPSB2ZWMyKHNjYWxlK21pcE9mZnNldCwgMC41ICogcmNwUG93U2NhbGUpO1xuXHRcdG9mZnNldC55ID0gYlJlcyAmJiAob2Zmc2V0LnkgPCAyLjAqYSkgPyAwLjAgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNlIHtcblx0XHRyID0gdmVjMyhkaXJlY3Rpb24ueiwgLWRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueSk7XG5cdFx0b2Zmc2V0ID0gdmVjMigyLjAqc2NhbGUrbWlwT2Zmc2V0LCAwLjUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVzICYmIChvZmZzZXQueSA8IDIuMCphKSA/IDAuMCA6IG9mZnNldC55O1xuXHR9XG5cdHIgPSBub3JtYWxpemUocik7XG5cdGZsb2F0IHRleGVsT2Zmc2V0ID0gMC41ICogY3ViZVVWX3JjcFRleHR1cmVTaXplO1xuXHR2ZWMyIHMgPSAoIHIueXogLyBhYnMoIHIueCApICsgdmVjMiggMS4wICkgKSAqIDAuNTtcblx0dmVjMiBiYXNlID0gb2Zmc2V0ICsgdmVjMiggdGV4ZWxPZmZzZXQgKTtcblx0cmV0dXJuIGJhc2UgKyBzICogKCBzY2FsZSAtIDIuMCAqIHRleGVsT2Zmc2V0ICk7XG59XG4jZGVmaW5lIGN1YmVVVl9tYXhMb2RzMyAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAzLjApXG52ZWM0IHRleHR1cmVDdWJlVVYodmVjMyByZWZsZWN0ZWREaXJlY3Rpb24sIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgcm91Z2huZXNzVmFsID0gcm91Z2huZXNzKiBjdWJlVVZfbWF4TG9kczM7XG5cdGZsb2F0IHIxID0gZmxvb3Iocm91Z2huZXNzVmFsKTtcblx0ZmxvYXQgcjIgPSByMSArIDEuMDtcblx0ZmxvYXQgdCA9IGZyYWN0KHJvdWdobmVzc1ZhbCk7XG5cdHZlYzIgbWlwSW5mbyA9IE1pcExldmVsSW5mbyhyZWZsZWN0ZWREaXJlY3Rpb24sIHIxLCByb3VnaG5lc3MpO1xuXHRmbG9hdCBzID0gbWlwSW5mby55O1xuXHRmbG9hdCBsZXZlbDAgPSBtaXBJbmZvLng7XG5cdGZsb2F0IGxldmVsMSA9IGxldmVsMCArIDEuMDtcblx0bGV2ZWwxID0gbGV2ZWwxID4gNS4wID8gNS4wIDogbGV2ZWwxO1xuXHRsZXZlbDAgKz0gbWluKCBmbG9vciggcyArIDAuNSApLCA1LjAgKTtcblx0dmVjMiB1dl8xMCA9IGdldEN1YmVVVihyZWZsZWN0ZWREaXJlY3Rpb24sIHIxLCBsZXZlbDApO1xuXHR2ZWM0IGNvbG9yMTAgPSBlbnZNYXBUZXhlbFRvTGluZWFyKHRleHR1cmUyRChlbnZNYXAsIHV2XzEwKSk7XG5cdHZlYzIgdXZfMjAgPSBnZXRDdWJlVVYocmVmbGVjdGVkRGlyZWN0aW9uLCByMiwgbGV2ZWwwKTtcblx0dmVjNCBjb2xvcjIwID0gZW52TWFwVGV4ZWxUb0xpbmVhcih0ZXh0dXJlMkQoZW52TWFwLCB1dl8yMCkpO1xuXHR2ZWM0IHJlc3VsdCA9IG1peChjb2xvcjEwLCBjb2xvcjIwLCB0KTtcblx0cmV0dXJuIHZlYzQocmVzdWx0LnJnYiwgMS4wKTtcbn1cbiNlbmRpZlxuIiwKZGVmYXVsdG5vcm1hbF92ZXJ0ZXg6IiNpZmRlZiBGTElQX1NJREVEXG5cdG9iamVjdE5vcm1hbCA9IC1vYmplY3ROb3JtYWw7XG4jZW5kaWZcbnZlYzMgdHJhbnNmb3JtZWROb3JtYWwgPSBub3JtYWxNYXRyaXggKiBvYmplY3ROb3JtYWw7XG4iLGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZGlzcGxhY2VtZW50TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxlO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudEJpYXM7XG4jZW5kaWZcbiIsZGlzcGxhY2VtZW50bWFwX3ZlcnRleDoiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dHJhbnNmb3JtZWQgKz0gbm9ybWFsICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7XG4jZW5kaWZcbiIsZW1pc3NpdmVtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcblx0dmVjNCBlbWlzc2l2ZUNvbG9yID0gdGV4dHVyZTJEKCBlbWlzc2l2ZU1hcCwgdlV2ICk7XG5cdGVtaXNzaXZlQ29sb3IucmdiID0gZW1pc3NpdmVNYXBUZXhlbFRvTGluZWFyKCBlbWlzc2l2ZUNvbG9yICkucmdiO1xuXHR0b3RhbEVtaXNzaXZlUmFkaWFuY2UgKj0gZW1pc3NpdmVDb2xvci5yZ2I7XG4jZW5kaWZcbiIsCmVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZW1pc3NpdmVNYXA7XG4jZW5kaWZcbiIsZW5jb2RpbmdzX2ZyYWdtZW50OiIgIGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApO1xuIixlbmNvZGluZ3NfcGFyc19mcmFnbWVudDoiXG52ZWM0IExpbmVhclRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmFsdWU7XG59XG52ZWM0IEdhbW1hVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IGdhbW1hRmFjdG9yICkge1xuXHRyZXR1cm4gdmVjNCggcG93KCB2YWx1ZS54eXosIHZlYzMoIGdhbW1hRmFjdG9yICkgKSwgdmFsdWUudyApO1xufVxudmVjNCBMaW5lYXJUb0dhbW1hKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBnYW1tYUZhY3RvciApIHtcblx0cmV0dXJuIHZlYzQoIHBvdyggdmFsdWUueHl6LCB2ZWMzKCAxLjAgLyBnYW1tYUZhY3RvciApICksIHZhbHVlLncgKTtcbn1cbnZlYzQgc1JHQlRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoIDAuMDUyMTMyNzAxNCApLCB2ZWMzKCAyLjQgKSApLCB2YWx1ZS5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMyggMC4wNDA0NSApICkgKSApLCB2YWx1ZS53ICk7XG59XG52ZWM0IExpbmVhclRvc1JHQiggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IsIHZlYzMoIDAuNDE2NjYgKSApICogMS4wNTUgLSB2ZWMzKCAwLjA1NSApLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMyggbGVzc1RoYW5FcXVhbCggdmFsdWUucmdiLCB2ZWMzKCAwLjAwMzEzMDggKSApICkgKSwgdmFsdWUudyApO1xufVxudmVjNCBSR0JFVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgKiBleHAyKCB2YWx1ZS5hICogMjU1LjAgLSAxMjguMCApLCAxLjAgKTtcbn1cbnZlYzQgTGluZWFyVG9SR0JFKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRmbG9hdCBtYXhDb21wb25lbnQgPSBtYXgoIG1heCggdmFsdWUuciwgdmFsdWUuZyApLCB2YWx1ZS5iICk7XG5cdGZsb2F0IGZFeHAgPSBjbGFtcCggY2VpbCggbG9nMiggbWF4Q29tcG9uZW50ICkgKSwgLTEyOC4wLCAxMjcuMCApO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiIC8gZXhwMiggZkV4cCApLCAoIGZFeHAgKyAxMjguMCApIC8gMjU1LjAgKTtcbn1cbnZlYzQgUkdCTVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBtYXhSYW5nZSApIHtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnh5eiAqIHZhbHVlLncgKiBtYXhSYW5nZSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCTSggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdGZsb2F0IG1heFJHQiA9IG1heCggdmFsdWUueCwgbWF4KCB2YWx1ZS5nLCB2YWx1ZS5iICkgKTtcblx0ZmxvYXQgTSAgICAgID0gY2xhbXAoIG1heFJHQiAvIG1heFJhbmdlLCAwLjAsIDEuMCApO1xuXHRNICAgICAgICAgICAgPSBjZWlsKCBNICogMjU1LjAgKSAvIDI1NS4wO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiIC8gKCBNICogbWF4UmFuZ2UgKSwgTSApO1xufVxudmVjNCBSR0JEVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogKCAoIG1heFJhbmdlIC8gMjU1LjAgKSAvIHZhbHVlLmEgKSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCRCggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdGZsb2F0IG1heFJHQiA9IG1heCggdmFsdWUueCwgbWF4KCB2YWx1ZS5nLCB2YWx1ZS5iICkgKTtcblx0ZmxvYXQgRCAgICAgID0gbWF4KCBtYXhSYW5nZSAvIG1heFJHQiwgMS4wICk7XG5cdEQgICAgICAgICAgICA9IG1pbiggZmxvb3IoIEQgKSAvIDI1NS4wLCAxLjAgKTtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAqICggRCAqICggMjU1LjAgLyBtYXhSYW5nZSApICksIEQgKTtcbn1cbmNvbnN0IG1hdDMgY0xvZ0x1dk0gPSBtYXQzKCAwLjIyMDksIDAuMzM5MCwgMC40MTg0LCAwLjExMzgsIDAuNjc4MCwgMC43MzE5LCAwLjAxMDIsIDAuMTEzMCwgMC4yOTY5ICk7XG52ZWM0IExpbmVhclRvTG9nTHV2KCBpbiB2ZWM0IHZhbHVlICkgIHtcblx0dmVjMyBYcF9ZX1hZWnAgPSB2YWx1ZS5yZ2IgKiBjTG9nTHV2TTtcblx0WHBfWV9YWVpwID0gbWF4KFhwX1lfWFlacCwgdmVjMygxZS02LCAxZS02LCAxZS02KSk7XG5cdHZlYzQgdlJlc3VsdDtcblx0dlJlc3VsdC54eSA9IFhwX1lfWFlacC54eSAvIFhwX1lfWFlacC56O1xuXHRmbG9hdCBMZSA9IDIuMCAqIGxvZzIoWHBfWV9YWVpwLnkpICsgMTI3LjA7XG5cdHZSZXN1bHQudyA9IGZyYWN0KExlKTtcblx0dlJlc3VsdC56ID0gKExlIC0gKGZsb29yKHZSZXN1bHQudyoyNTUuMCkpLzI1NS4wKS8yNTUuMDtcblx0cmV0dXJuIHZSZXN1bHQ7XG59XG5jb25zdCBtYXQzIGNMb2dMdXZJbnZlcnNlTSA9IG1hdDMoIDYuMDAxNCwgLTIuNzAwOCwgLTEuNzk5NiwgLTEuMzMyMCwgMy4xMDI5LCAtNS43NzIxLCAwLjMwMDgsIC0xLjA4ODIsIDUuNjI2OCApO1xudmVjNCBMb2dMdXZUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0ZmxvYXQgTGUgPSB2YWx1ZS56ICogMjU1LjAgKyB2YWx1ZS53O1xuXHR2ZWMzIFhwX1lfWFlacDtcblx0WHBfWV9YWVpwLnkgPSBleHAyKChMZSAtIDEyNy4wKSAvIDIuMCk7XG5cdFhwX1lfWFlacC56ID0gWHBfWV9YWVpwLnkgLyB2YWx1ZS55O1xuXHRYcF9ZX1hZWnAueCA9IHZhbHVlLnggKiBYcF9ZX1hZWnAuejtcblx0dmVjMyB2UkdCID0gWHBfWV9YWVpwLnJnYiAqIGNMb2dMdXZJbnZlcnNlTTtcblx0cmV0dXJuIHZlYzQoIG1heCh2UkdCLCAwLjApLCAxLjAgKTtcbn1cbiIsCmVudm1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HIClcblx0XHR2ZWMzIGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2Vsc2Vcblx0XHR2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIGZsaXBOb3JtYWwgKiB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfRVFVSVJFQyApXG5cdFx0dmVjMiBzYW1wbGVVVjtcblx0XHRzYW1wbGVVVi55ID0gc2F0dXJhdGUoIGZsaXBOb3JtYWwgKiByZWZsZWN0VmVjLnkgKiAwLjUgKyAwLjUgKTtcblx0XHRzYW1wbGVVVi54ID0gYXRhbiggZmxpcE5vcm1hbCAqIHJlZmxlY3RWZWMueiwgZmxpcE5vcm1hbCAqIHJlZmxlY3RWZWMueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7XG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmUyRCggZW52TWFwLCBzYW1wbGVVViApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9TUEhFUkUgKVxuXHRcdHZlYzMgcmVmbGVjdFZpZXcgPSBmbGlwTm9ybWFsICogbm9ybWFsaXplKCAoIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZsZWN0VmVjLCAwLjAgKSApLnh5eiArIHZlYzMoIDAuMCwgMC4wLCAxLjAgKSApO1xuXHRcdHZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlMkQoIGVudk1hcCwgcmVmbGVjdFZpZXcueHkgKiAwLjUgKyAwLjUgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7XG5cdCNlbmRpZlxuXHRlbnZDb2xvciA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudkNvbG9yICk7XG5cdCNpZmRlZiBFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFlcblx0XHRvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBvdXRnb2luZ0xpZ2h0ICogZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19NSVggKVxuXHRcdG91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfQUREIClcblx0XHRvdXRnb2luZ0xpZ2h0ICs9IGVudkNvbG9yLnh5eiAqIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHk7XG5cdCNlbmRpZlxuI2VuZGlmXG4iLAplbnZtYXBfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkKCBQSFlTSUNBTCApXG5cdHVuaWZvcm0gZmxvYXQgcmVmbGVjdGl2aXR5O1xuXHR1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAoIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HICkgKVxuXHRcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHQjZW5kaWZcblx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKSB8fCBkZWZpbmVkKCBQSFlTSUNBTCApXG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHQjZW5kaWZcbiNlbmRpZlxuIiwKZW52bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKVxuXHRcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbmRpZlxuI2VuZGlmXG4iLGVudm1hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApXG5cdFx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcblx0I2Vsc2Vcblx0XHR2ZWMzIGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZSZWZsZWN0ID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWZcbiIsCmZvZ192ZXJ0ZXg6IlxuI2lmZGVmIFVTRV9GT0dcbmZvZ0RlcHRoID0gLW12UG9zaXRpb24uejtcbiNlbmRpZiIsZm9nX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0ZPR1xuICB2YXJ5aW5nIGZsb2F0IGZvZ0RlcHRoO1xuI2VuZGlmXG4iLGZvZ19mcmFnbWVudDoiI2lmZGVmIFVTRV9GT0dcblx0I2lmZGVmIEZPR19FWFAyXG5cdFx0ZmxvYXQgZm9nRmFjdG9yID0gd2hpdGVDb21wbGltZW50KCBleHAyKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogZm9nRGVwdGggKiBmb2dEZXB0aCAqIExPRzIgKSApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgZm9nRGVwdGggKTtcblx0I2VuZGlmXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTtcbiNlbmRpZlxuIixmb2dfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9GT0dcblx0dW5pZm9ybSB2ZWMzIGZvZ0NvbG9yO1xuXHR2YXJ5aW5nIGZsb2F0IGZvZ0RlcHRoO1xuXHQjaWZkZWYgRk9HX0VYUDJcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dOZWFyO1xuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRmFyO1xuXHQjZW5kaWZcbiNlbmRpZlxuIiwKZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFRPT05cblx0dW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnRNYXA7XG5cdHZlYzMgZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCB2ZWMzIG5vcm1hbCwgdmVjMyBsaWdodERpcmVjdGlvbiApIHtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApO1xuXHRcdHZlYzIgY29vcmQgPSB2ZWMyKCBkb3ROTCAqIDAuNSArIDAuNSwgMC4wICk7XG5cdFx0I2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkucmdiO1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gKCBjb29yZC54IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWZcbiIsbGlnaHRtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IFBJICogdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApLnh5eiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xuI2VuZGlmXG4iLApsaWdodG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5O1xuI2VuZGlmIixsaWdodHNfbGFtYmVydF92ZXJ0ZXg6InZlYzMgZGlmZnVzZSA9IHZlYzMoIDEuMCApO1xuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uID0gbXZQb3NpdGlvbi54eXo7XG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5nZW9tZXRyeS52aWV3RGlyID0gbm9ybWFsaXplKCAtbXZQb3NpdGlvbi54eXogKTtcbkdlb21ldHJpY0NvbnRleHQgYmFja0dlb21ldHJ5O1xuYmFja0dlb21ldHJ5LnBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247XG5iYWNrR2VvbWV0cnkubm9ybWFsID0gLWdlb21ldHJ5Lm5vcm1hbDtcbmJhY2tHZW9tZXRyeS52aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjtcbnZMaWdodEZyb250ID0gdmVjMyggMC4wICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTtcbiNlbmRpZlxuSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDtcbmZsb2F0IGRvdE5MO1xudmVjMyBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRQb2ludERpcmVjdExpZ2h0SXJyYWRpYW5jZSggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gUEkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjZW5kaWZcblx0fVxuI2VuZGlmXG4jaWYgTlVNX1NQT1RfTElHSFRTID4gMFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0U3BvdERpcmVjdExpZ2h0SXJyYWRpYW5jZSggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBQSSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdHZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC1kb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWZcbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodElycmFkaWFuY2UoIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IFBJICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLWRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xuXHRcdHZMaWdodEZyb250ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5ICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZlxuIiwKbGlnaHRzX3BhcnM6InVuaWZvcm0gdmVjMyBhbWJpZW50TGlnaHRDb2xvcjtcbnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHtcblx0dmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHRyZXR1cm4gaXJyYWRpYW5jZTtcbn1cbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0aW50IHNoYWRvdztcblx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdH07XG5cdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0c1sgTlVNX0RJUl9MSUdIVFMgXTtcblx0dm9pZCBnZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCApIHtcblx0XHRkaXJlY3RMaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7XG5cdFx0ZGlyZWN0TGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247XG5cdFx0ZGlyZWN0TGlnaHQudmlzaWJsZSA9IHRydWU7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBQb2ludExpZ2h0IHtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdFx0aW50IHNoYWRvdztcblx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdH07XG5cdHVuaWZvcm0gUG9pbnRMaWdodCBwb2ludExpZ2h0c1sgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFBvaW50RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICkge1xuXHRcdHZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IHB1bmN0dWFsTGlnaHRJbnRlbnNpdHlUb0lycmFkaWFuY2VGYWN0b3IoIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTtcblx0XHRkaXJlY3RMaWdodC52aXNpYmxlID0gKCBkaXJlY3RMaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBTcG90TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRmbG9hdCBjb25lQ29zO1xuXHRcdGZsb2F0IHBlbnVtYnJhQ29zO1xuXHRcdGludCBzaGFkb3c7XG5cdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHR9O1xuXHR1bmlmb3JtIFNwb3RMaWdodCBzcG90TGlnaHRzWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCAgKSB7XG5cdFx0dmVjMyBsVmVjdG9yID0gc3BvdExpZ2h0LnBvc2l0aW9uIC0gZ2VvbWV0cnkucG9zaXRpb247XG5cdFx0ZGlyZWN0TGlnaHQuZGlyZWN0aW9uID0gbm9ybWFsaXplKCBsVmVjdG9yICk7XG5cdFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xuXHRcdGZsb2F0IGFuZ2xlQ29zID0gZG90KCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRpZiAoIGFuZ2xlQ29zID4gc3BvdExpZ2h0LmNvbmVDb3MgKSB7XG5cdFx0XHRmbG9hdCBzcG90RWZmZWN0ID0gc21vb3Roc3RlcCggc3BvdExpZ2h0LmNvbmVDb3MsIHNwb3RMaWdodC5wZW51bWJyYUNvcywgYW5nbGVDb3MgKTtcblx0XHRcdGRpcmVjdExpZ2h0LmNvbG9yID0gc3BvdExpZ2h0LmNvbG9yO1xuXHRcdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gc3BvdEVmZmVjdCAqIHB1bmN0dWFsTGlnaHRJbnRlbnNpdHlUb0lycmFkaWFuY2VGYWN0b3IoIGxpZ2h0RGlzdGFuY2UsIHNwb3RMaWdodC5kaXN0YW5jZSwgc3BvdExpZ2h0LmRlY2F5ICk7XG5cdFx0XHRkaXJlY3RMaWdodC52aXNpYmxlID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGlyZWN0TGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTtcblx0XHRcdGRpcmVjdExpZ2h0LnZpc2libGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHRzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7XG5cdFx0dmVjMyBjb2xvcjtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodDtcblx0fTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgbHRjTWF0O1x0dW5pZm9ybSBzYW1wbGVyMkQgbHRjTWFnO1xuXHR1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07XG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwXG5cdHN0cnVjdCBIZW1pc3BoZXJlTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgc2t5Q29sb3I7XG5cdFx0dmVjMyBncm91bmRDb2xvcjtcblx0fTtcblx0dW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07XG5cdHZlYzMgZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gSGVtaXNwaGVyZUxpZ2h0IGhlbWlMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSApIHtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTtcblx0XHR2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApO1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdFx0aXJyYWRpYW5jZSAqPSBQSTtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gaXJyYWRpYW5jZTtcblx0fVxuI2VuZGlmXG4jaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFBIWVNJQ0FMIClcblx0dmVjMyBnZXRMaWdodFByb2JlSW5kaXJlY3RJcnJhZGlhbmNlKCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBpbnQgbWF4TUlQTGV2ZWwgKSB7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGdlb21ldHJ5Lm5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0XHR2ZWMzIHF1ZXJ5VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHdvcmxkTm9ybWFsLngsIHdvcmxkTm9ybWFsLnl6ICk7XG5cdFx0XHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZUxvZEVYVCggZW52TWFwLCBxdWVyeVZlYywgZmxvYXQoIG1heE1JUExldmVsICkgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCBxdWVyeVZlYywgZmxvYXQoIG1heE1JUExldmVsICkgKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiID0gZW52TWFwVGV4ZWxUb0xpbmVhciggZW52TWFwQ29sb3IgKS5yZ2I7XG5cdFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0XHR2ZWMzIHF1ZXJ5VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHdvcmxkTm9ybWFsLngsIHdvcmxkTm9ybWFsLnl6ICk7XG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggcXVlcnlWZWMsIDEuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdmVjNCggMC4wICk7XG5cdFx0I2VuZGlmXG5cdFx0cmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHR9XG5cdGZsb2F0IGdldFNwZWN1bGFyTUlQTGV2ZWwoIGNvbnN0IGluIGZsb2F0IGJsaW5uU2hpbmluZXNzRXhwb25lbnQsIGNvbnN0IGluIGludCBtYXhNSVBMZXZlbCApIHtcblx0XHRmbG9hdCBtYXhNSVBMZXZlbFNjYWxhciA9IGZsb2F0KCBtYXhNSVBMZXZlbCApO1xuXHRcdGZsb2F0IGRlc2lyZWRNSVBMZXZlbCA9IG1heE1JUExldmVsU2NhbGFyIC0gMC43OTI0OCAtIDAuNSAqIGxvZzIoIHBvdzIoIGJsaW5uU2hpbmluZXNzRXhwb25lbnQgKSArIDEuMCApO1xuXHRcdHJldHVybiBjbGFtcCggZGVzaXJlZE1JUExldmVsLCAwLjAsIG1heE1JUExldmVsU2NhbGFyICk7XG5cdH1cblx0dmVjMyBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gZmxvYXQgYmxpbm5TaGluaW5lc3NFeHBvbmVudCwgY29uc3QgaW4gaW50IG1heE1JUExldmVsICkge1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCAtZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZlYzMgcmVmbGVjdFZlYyA9IHJlZnJhY3QoIC1nZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApO1xuXHRcdCNlbmRpZlxuXHRcdHJlZmxlY3RWZWMgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCByZWZsZWN0VmVjLCB2aWV3TWF0cml4ICk7XG5cdFx0ZmxvYXQgc3BlY3VsYXJNSVBMZXZlbCA9IGdldFNwZWN1bGFyTUlQTGV2ZWwoIGJsaW5uU2hpbmluZXNzRXhwb25lbnQsIG1heE1JUExldmVsICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0XHRcdHZlYzMgcXVlcnlSZWZsZWN0VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApO1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVMb2RFWFQoIGVudk1hcCwgcXVlcnlSZWZsZWN0VmVjLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgcXVlcnlSZWZsZWN0VmVjLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjMyBxdWVyeVJlZmxlY3RWZWMgPSB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICk7XG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVVihxdWVyeVJlZmxlY3RWZWMsIEJsaW5uRXhwb25lbnRUb0dHWFJvdWdobmVzcyhibGlublNoaW5pbmVzc0V4cG9uZW50KSk7XG5cdFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfRVFVSVJFQyApXG5cdFx0XHR2ZWMyIHNhbXBsZVVWO1xuXHRcdFx0c2FtcGxlVVYueSA9IHNhdHVyYXRlKCByZWZsZWN0VmVjLnkgKiAwLjUgKyAwLjUgKTtcblx0XHRcdHNhbXBsZVVWLnggPSBhdGFuKCByZWZsZWN0VmVjLnosIHJlZmxlY3RWZWMueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7XG5cdFx0XHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlMkRMb2RFWFQoIGVudk1hcCwgc2FtcGxlVVYsIHNwZWN1bGFyTUlQTGV2ZWwgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlMkQoIGVudk1hcCwgc2FtcGxlVVYsIHNwZWN1bGFyTUlQTGV2ZWwgKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiID0gZW52TWFwVGV4ZWxUb0xpbmVhciggZW52TWFwQ29sb3IgKS5yZ2I7XG5cdFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfU1BIRVJFIClcblx0XHRcdHZlYzMgcmVmbGVjdFZpZXcgPSBub3JtYWxpemUoICggdmlld01hdHJpeCAqIHZlYzQoIHJlZmxlY3RWZWMsIDAuMCApICkueHl6ICsgdmVjMyggMC4wLDAuMCwxLjAgKSApO1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZTJETG9kRVhUKCBlbnZNYXAsIHJlZmxlY3RWaWV3Lnh5ICogMC41ICsgMC41LCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZTJEKCBlbnZNYXAsIHJlZmxlY3RWaWV3Lnh5ICogMC41ICsgMC41LCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbmRpZlxuXHRcdHJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7XG5cdH1cbiNlbmRpZlxuIiwKbGlnaHRzX3Bob25nX2ZyYWdtZW50OiJCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiO1xubWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IHNwZWN1bGFyO1xubWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgPSBzaGluaW5lc3M7XG5tYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtcbiIsbGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ6InZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuc3RydWN0IEJsaW5uUGhvbmdNYXRlcmlhbCB7XG5cdHZlYzNcdGRpZmZ1c2VDb2xvcjtcblx0dmVjM1x0c3BlY3VsYXJDb2xvcjtcblx0ZmxvYXRcdHNwZWN1bGFyU2hpbmluZXNzO1xuXHRmbG9hdFx0c3BlY3VsYXJTdHJlbmd0aDtcbn07XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX0JsaW5uUGhvbmcoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0XHR2ZWMzIG5vcm1hbCA9IGdlb21ldHJ5Lm5vcm1hbDtcblx0XHR2ZWMzIHZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xuXHRcdHZlYzMgcG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHR2ZWMzIGxpZ2h0UG9zID0gcmVjdEFyZWFMaWdodC5wb3NpdGlvbjtcblx0XHR2ZWMzIGhhbGZXaWR0aCA9IHJlY3RBcmVhTGlnaHQuaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodCA9IHJlY3RBcmVhTGlnaHQuaGFsZkhlaWdodDtcblx0XHR2ZWMzIGxpZ2h0Q29sb3IgPSByZWN0QXJlYUxpZ2h0LmNvbG9yO1xuXHRcdGZsb2F0IHJvdWdobmVzcyA9IEJsaW5uRXhwb25lbnRUb0dHWFJvdWdobmVzcyggbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKTtcblx0XHR2ZWMzIHJlY3RDb29yZHNbIDQgXTtcblx0XHRyZWN0Q29vcmRzWyAwIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7XHRcdHJlY3RDb29yZHNbIDEgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAyIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0cmVjdENvb3Jkc1sgMyBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0O1xuXHRcdHZlYzIgdXYgPSBMVENfVXYoIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XG5cdFx0ZmxvYXQgbm9ybSA9IHRleHR1cmUyRCggbHRjTWFnLCB1diApLmE7XG5cdFx0dmVjNCB0ID0gdGV4dHVyZTJEKCBsdGNNYXQsIHV2ICk7XG5cdFx0bWF0MyBtSW52ID0gbWF0Myhcblx0XHRcdHZlYzMoICAgMSwgICAwLCB0LnkgKSxcblx0XHRcdHZlYzMoICAgMCwgdC56LCAgIDAgKSxcblx0XHRcdHZlYzMoIHQudywgICAwLCB0LnggKVxuXHRcdCk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiBub3JtICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtSW52LCByZWN0Q29vcmRzICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBsaWdodENvbG9yICogbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtYXQzKCAxICksIHJlY3RDb29yZHMgKTtcblx0fVxuI2VuZGlmXG52b2lkIFJFX0RpcmVjdF9CbGlublBob25nKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHQjaWZkZWYgVE9PTlxuXHRcdHZlYzMgaXJyYWRpYW5jZSA9IGdldEdyYWRpZW50SXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHRcdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNlbmRpZlxuXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRpcnJhZGlhbmNlICo9IFBJO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TcGVjdWxhcl9CbGlublBob25nKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzICkgKiBtYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoO1xufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbiNkZWZpbmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9EaXJlY3RfQmxpbm5QaG9uZ1xuI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWFcdFx0UkVfRGlyZWN0X1JlY3RBcmVhX0JsaW5uUGhvbmdcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nXG4jZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsIClcdCgwKVxuIiwKbGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50OiJQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYiAqICggMS4wIC0gbWV0YWxuZXNzRmFjdG9yICk7XG5tYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyA9IGNsYW1wKCByb3VnaG5lc3NGYWN0b3IsIDAuMDQsIDEuMCApO1xuI2lmZGVmIFNUQU5EQVJEXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG4jZWxzZVxuXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCBNQVhJTVVNX1NQRUNVTEFSX0NPRUZGSUNJRU5UICogcG93MiggcmVmbGVjdGl2aXR5ICkgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG5cdG1hdGVyaWFsLmNsZWFyQ29hdCA9IHNhdHVyYXRlKCBjbGVhckNvYXQgKTtcdG1hdGVyaWFsLmNsZWFyQ29hdFJvdWdobmVzcyA9IGNsYW1wKCBjbGVhckNvYXRSb3VnaG5lc3MsIDAuMDQsIDEuMCApO1xuI2VuZGlmXG4iLApsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudDoic3RydWN0IFBoeXNpY2FsTWF0ZXJpYWwge1xuXHR2ZWMzXHRkaWZmdXNlQ29sb3I7XG5cdGZsb2F0XHRzcGVjdWxhclJvdWdobmVzcztcblx0dmVjM1x0c3BlY3VsYXJDb2xvcjtcblx0I2lmbmRlZiBTVEFOREFSRFxuXHRcdGZsb2F0IGNsZWFyQ29hdDtcblx0XHRmbG9hdCBjbGVhckNvYXRSb3VnaG5lc3M7XG5cdCNlbmRpZlxufTtcbiNkZWZpbmUgTUFYSU1VTV9TUEVDVUxBUl9DT0VGRklDSUVOVCAwLjE2XG4jZGVmaW5lIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgMC4wNFxuZmxvYXQgY2xlYXJDb2F0REhSQXBwcm94KCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5MICkge1xuXHRyZXR1cm4gREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCArICggMS4wIC0gREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApICogKCBwb3coIDEuMCAtIGRvdE5MLCA1LjAgKSAqIHBvdyggMS4wIC0gcm91Z2huZXNzLCAyLjAgKSApO1xufVxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHR2b2lkIFJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbCggY29uc3QgaW4gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0XHR2ZWMzIG5vcm1hbCA9IGdlb21ldHJ5Lm5vcm1hbDtcblx0XHR2ZWMzIHZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xuXHRcdHZlYzMgcG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHR2ZWMzIGxpZ2h0UG9zID0gcmVjdEFyZWFMaWdodC5wb3NpdGlvbjtcblx0XHR2ZWMzIGhhbGZXaWR0aCA9IHJlY3RBcmVhTGlnaHQuaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodCA9IHJlY3RBcmVhTGlnaHQuaGFsZkhlaWdodDtcblx0XHR2ZWMzIGxpZ2h0Q29sb3IgPSByZWN0QXJlYUxpZ2h0LmNvbG9yO1xuXHRcdGZsb2F0IHJvdWdobmVzcyA9IG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzO1xuXHRcdHZlYzMgcmVjdENvb3Jkc1sgNCBdO1xuXHRcdHJlY3RDb29yZHNbIDAgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcdFx0cmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0dmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcblx0XHRmbG9hdCBub3JtID0gdGV4dHVyZTJEKCBsdGNNYWcsIHV2ICkuYTtcblx0XHR2ZWM0IHQgPSB0ZXh0dXJlMkQoIGx0Y01hdCwgdXYgKTtcblx0XHRtYXQzIG1JbnYgPSBtYXQzKFxuXHRcdFx0dmVjMyggICAxLCAgIDAsIHQueSApLFxuXHRcdFx0dmVjMyggICAwLCB0LnosICAgMCApLFxuXHRcdFx0dmVjMyggdC53LCAgIDAsIHQueCApXG5cdFx0KTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciAqIG5vcm0gKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1JbnYsIHJlY3RDb29yZHMgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGxpZ2h0Q29sb3IgKiBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1hdDMoIDEgKSwgcmVjdENvb3JkcyApO1xuXHR9XG4jZW5kaWZcbnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSID0gbWF0ZXJpYWwuY2xlYXJDb2F0ICogY2xlYXJDb2F0REhSQXBwcm94KCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MsIGRvdE5MICk7XG5cdCNlbHNlXG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSID0gMC4wO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gKCAxLjAgLSBjbGVhckNvYXRESFIgKSAqIGlycmFkaWFuY2UgKiBCUkRGX1NwZWN1bGFyX0dHWCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyApO1xuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9ICggMS4wIC0gY2xlYXJDb2F0REhSICkgKiBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyQ29hdCAqIEJSREZfU3BlY3VsYXJfR0dYKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzICk7XG5cdCNlbmRpZlxufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxudm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGNsZWFyQ29hdFJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0I2lmbmRlZiBTVEFOREFSRFxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdE5WO1xuXHRcdGZsb2F0IGNsZWFyQ29hdERIUiA9IG1hdGVyaWFsLmNsZWFyQ29hdCAqIGNsZWFyQ29hdERIUkFwcHJveCggbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzLCBkb3ROTCApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGNsZWFyQ29hdERIUiA9IDAuMDtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gKCAxLjAgLSBjbGVhckNvYXRESFIgKSAqIHJhZGlhbmNlICogQlJERl9TcGVjdWxhcl9HR1hfRW52aXJvbm1lbnQoIGdlb21ldHJ5LCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyApO1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBjbGVhckNvYXRSYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyQ29hdCAqIEJSREZfU3BlY3VsYXJfR0dYX0Vudmlyb25tZW50KCBnZW9tZXRyeSwgdmVjMyggREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApLCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG59XG4jZGVmaW5lIFJFX0RpcmVjdFx0XHRcdFx0UkVfRGlyZWN0X1BoeXNpY2FsXG4jZGVmaW5lIFJFX0RpcmVjdF9SZWN0QXJlYVx0XHRSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbFxuI2RlZmluZSBSRV9JbmRpcmVjdFNwZWN1bGFyXHRcdFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWxcbiNkZWZpbmUgTWF0ZXJpYWxfQmxpbm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSAgIEdHWFJvdWdobmVzc1RvQmxpbm5FeHBvbmVudCggbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgKVxuI2RlZmluZSBNYXRlcmlhbF9DbGVhckNvYXRfQmxpbm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSAgIEdHWFJvdWdobmVzc1RvQmxpbm5FeHBvbmVudCggbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzIClcbmZsb2F0IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IGFtYmllbnRPY2NsdXNpb24sIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0cmV0dXJuIHNhdHVyYXRlKCBwb3coIGRvdE5WICsgYW1iaWVudE9jY2x1c2lvbiwgZXhwMiggLSAxNi4wICogcm91Z2huZXNzIC0gMS4wICkgKSAtIDEuMCArIGFtYmllbnRPY2NsdXNpb24gKTtcbn1cbiIsCmxpZ2h0c190ZW1wbGF0ZToiXG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24gPSAtIHZWaWV3UG9zaXRpb247XG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWw7XG5nZW9tZXRyeS52aWV3RGlyID0gbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7XG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRzWyBpIF07XG5cdFx0Z2V0UG9pbnREaXJlY3RMaWdodElycmFkaWFuY2UoIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggcG9pbnRMaWdodC5zaGFkb3csIGRpcmVjdExpZ2h0LnZpc2libGUgKSApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuI2VuZGlmXG4jaWYgKCBOVU1fU1BPVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0U3BvdExpZ2h0IHNwb3RMaWdodDtcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xuXHRcdHNwb3RMaWdodCA9IHNwb3RMaWdodHNbIGkgXTtcblx0XHRnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBzcG90TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggc3BvdExpZ2h0LnNoYWRvdywgZGlyZWN0TGlnaHQudmlzaWJsZSApICkgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cbiNlbmRpZlxuI2lmICggTlVNX0RJUl9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0RGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0O1xuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcblx0XHRnZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SXJyYWRpYW5jZSggZGlyZWN0aW9uYWxMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmZGVmIFVTRV9TSEFET1dNQVBcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvdywgZGlyZWN0TGlnaHQudmlzaWJsZSApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuI2VuZGlmXG4jaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKVxuXHRSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9SRUNUX0FSRUFfTElHSFRTOyBpICsrICkge1xuXHRcdHJlY3RBcmVhTGlnaHQgPSByZWN0QXJlYUxpZ2h0c1sgaSBdO1xuXHRcdFJFX0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFx0dmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICkueHl6ICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0XHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XG5cdFx0I2VuZGlmXG5cdFx0aXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG5cdCNlbmRpZlxuXHQjaWYgKCBOVU1fSEVNSV9MSUdIVFMgPiAwIClcblx0XHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0XHRpcnJhZGlhbmNlICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkgKTtcblx0XHR9XG5cdCNlbmRpZlxuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFBIWVNJQ0FMICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0aXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSW5kaXJlY3RJcnJhZGlhbmNlKCBnZW9tZXRyeSwgOCApO1xuXHQjZW5kaWZcblx0UkVfSW5kaXJlY3REaWZmdXNlKCBpcnJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHZlYzMgcmFkaWFuY2UgPSBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggZ2VvbWV0cnksIE1hdGVyaWFsX0JsaW5uU2hpbmluZXNzRXhwb25lbnQoIG1hdGVyaWFsICksIDggKTtcblx0I2lmbmRlZiBTVEFOREFSRFxuXHRcdHZlYzMgY2xlYXJDb2F0UmFkaWFuY2UgPSBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggZ2VvbWV0cnksIE1hdGVyaWFsX0NsZWFyQ29hdF9CbGlublNoaW5pbmVzc0V4cG9uZW50KCBtYXRlcmlhbCApLCA4ICk7XG5cdCNlbHNlXG5cdFx0dmVjMyBjbGVhckNvYXRSYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHQjZW5kaWZcblx0UkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGNsZWFyQ29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG4jZW5kaWZcbiIsCmxvZ2RlcHRoYnVmX2ZyYWdtZW50OiIjaWYgZGVmaW5lZChVU0VfTE9HREVQVEhCVUYpICYmIGRlZmluZWQoVVNFX0xPR0RFUFRIQlVGX0VYVClcblx0Z2xfRnJhZ0RlcHRoRVhUID0gbG9nMih2RnJhZ0RlcHRoKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcblx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDtcblx0I2VuZGlmXG4jZW5kaWZcbiIsbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcblx0I2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFRcblx0XHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdCNlbmRpZlxuXHR1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3ZlcnRleDoiI2lmZGVmIFVTRV9MT0dERVBUSEJVRlxuXHRnbF9Qb3NpdGlvbi56ID0gbG9nMihtYXgoIEVQU0lMT04sIGdsX1Bvc2l0aW9uLncgKyAxLjAgKSkgKiBsb2dEZXB0aEJ1ZkZDO1xuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZGcmFnRGVwdGggPSAxLjAgKyBnbF9Qb3NpdGlvbi53O1xuXHQjZWxzZVxuXHRcdGdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiAtIDEuMCkgKiBnbF9Qb3NpdGlvbi53O1xuXHQjZW5kaWZcbiNlbmRpZlxuIiwKbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IHRleGVsQ29sb3IgPSB0ZXh0dXJlMkQoIG1hcCwgdlV2ICk7XG5cdHRleGVsQ29sb3IgPSBtYXBUZXhlbFRvTGluZWFyKCB0ZXhlbENvbG9yICk7XG5cdGRpZmZ1c2VDb2xvciAqPSB0ZXhlbENvbG9yO1xuI2VuZGlmXG4iLG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWZcbiIsbWFwX3BhcnRpY2xlX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IG1hcFRleGVsID0gdGV4dHVyZTJEKCBtYXAsIHZlYzIoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55ICkgKiBvZmZzZXRSZXBlYXQuencgKyBvZmZzZXRSZXBlYXQueHkgKTtcblx0ZGlmZnVzZUNvbG9yICo9IG1hcFRleGVsVG9MaW5lYXIoIG1hcFRleGVsICk7XG4jZW5kaWZcbiIsbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTUFQXG5cdHVuaWZvcm0gdmVjNCBvZmZzZXRSZXBlYXQ7XG5cdHVuaWZvcm0gc2FtcGxlcjJEIG1hcDtcbiNlbmRpZlxuIiwKbWV0YWxuZXNzbWFwX2ZyYWdtZW50OiJmbG9hdCBtZXRhbG5lc3NGYWN0b3IgPSBtZXRhbG5lc3M7XG4jaWZkZWYgVVNFX01FVEFMTkVTU01BUFxuXHR2ZWM0IHRleGVsTWV0YWxuZXNzID0gdGV4dHVyZTJEKCBtZXRhbG5lc3NNYXAsIHZVdiApO1xuXHRtZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjtcbiNlbmRpZlxuIixtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xuI2VuZGlmIixtb3JwaG5vcm1hbF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdG9iamVjdE5vcm1hbCArPSAoIG1vcnBoTm9ybWFsMCAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdG9iamVjdE5vcm1hbCArPSAoIG1vcnBoTm9ybWFsMSAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07XG5cdG9iamVjdE5vcm1hbCArPSAoIG1vcnBoTm9ybWFsMiAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdG9iamVjdE5vcm1hbCArPSAoIG1vcnBoTm9ybWFsMyAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG4jZW5kaWZcbiIsCm1vcnBodGFyZ2V0X3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX01PUlBIVEFSR0VUU1xuXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTtcblx0I2Vsc2Vcblx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcblx0I2VuZGlmXG4jZW5kaWYiLG1vcnBodGFyZ2V0X3ZlcnRleDoiI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFNcblx0dHJhbnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDAgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdHRyYW5zZm9ybWVkICs9ICggbW9ycGhUYXJnZXQxIC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xuXHR0cmFuc2Zvcm1lZCArPSAoIG1vcnBoVGFyZ2V0MiAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcblx0dHJhbnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDMgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG5cdCNpZm5kZWYgVVNFX01PUlBITk9STUFMU1xuXHR0cmFuc2Zvcm1lZCArPSAoIG1vcnBoVGFyZ2V0NCAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcblx0dHJhbnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDUgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07XG5cdHRyYW5zZm9ybWVkICs9ICggbW9ycGhUYXJnZXQ2IC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNiBdO1xuXHR0cmFuc2Zvcm1lZCArPSAoIG1vcnBoVGFyZ2V0NyAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDcgXTtcblx0I2VuZGlmXG4jZW5kaWZcbiIsCm5vcm1hbF9mbGlwOiIjaWZkZWYgRE9VQkxFX1NJREVEXG5cdGZsb2F0IGZsaXBOb3JtYWwgPSAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG4jZWxzZVxuXHRmbG9hdCBmbGlwTm9ybWFsID0gMS4wO1xuI2VuZGlmXG4iLG5vcm1hbF9mcmFnbWVudDoiI2lmZGVmIEZMQVRfU0hBREVEXG5cdHZlYzMgZmR4ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xuXHR2ZWMzIGZkeSA9IHZlYzMoIGRGZHkoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeSggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKCBmZHgsIGZkeSApICk7XG4jZWxzZVxuXHR2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggdk5vcm1hbCApICogZmxpcE5vcm1hbDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9OT1JNQUxNQVBcblx0bm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC12Vmlld1Bvc2l0aW9uLCBub3JtYWwgKTtcbiNlbGlmIGRlZmluZWQoIFVTRV9CVU1QTUFQIClcblx0bm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLXZWaWV3UG9zaXRpb24sIG5vcm1hbCwgZEhkeHlfZndkKCkgKTtcbiNlbmRpZlxuIiwKbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlO1xuXHR2ZWMzIHBlcnR1cmJOb3JtYWwyQXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtICkge1xuXHRcdHZlYzMgcTAgPSBkRmR4KCBleWVfcG9zLnh5eiApO1xuXHRcdHZlYzMgcTEgPSBkRmR5KCBleWVfcG9zLnh5eiApO1xuXHRcdHZlYzIgc3QwID0gZEZkeCggdlV2LnN0ICk7XG5cdFx0dmVjMiBzdDEgPSBkRmR5KCB2VXYuc3QgKTtcblx0XHR2ZWMzIFMgPSBub3JtYWxpemUoIHEwICogc3QxLnQgLSBxMSAqIHN0MC50ICk7XG5cdFx0dmVjMyBUID0gbm9ybWFsaXplKCAtcTAgKiBzdDEucyArIHExICogc3QwLnMgKTtcblx0XHR2ZWMzIE4gPSBub3JtYWxpemUoIHN1cmZfbm9ybSApO1xuXHRcdHZlYzMgbWFwTiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdFx0bWFwTi54eSA9IG5vcm1hbFNjYWxlICogbWFwTi54eTtcblx0XHRtYXQzIHRzbiA9IG1hdDMoIFMsIFQsIE4gKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKCB0c24gKiBtYXBOICk7XG5cdH1cbiNlbmRpZlxuIiwKcGFja2luZzoidmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCBub3JtYWwgKSAqIDAuNSArIDAuNTtcbn1cbnZlYzMgdW5wYWNrUkdCVG9Ob3JtYWwoIGNvbnN0IGluIHZlYzMgcmdiICkge1xuXHRyZXR1cm4gMS4wIC0gMi4wICogcmdiLnh5ejtcbn1cbmNvbnN0IGZsb2F0IFBhY2tVcHNjYWxlID0gMjU2LiAvIDI1NS47Y29uc3QgZmxvYXQgVW5wYWNrRG93bnNjYWxlID0gMjU1LiAvIDI1Ni47XG5jb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgIDI1Ni4gKTtcbmNvbnN0IHZlYzQgVW5wYWNrRmFjdG9ycyA9IFVucGFja0Rvd25zY2FsZSAvIHZlYzQoIFBhY2tGYWN0b3JzLCAxLiApO1xuY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47XG52ZWM0IHBhY2tEZXB0aFRvUkdCQSggY29uc3QgaW4gZmxvYXQgdiApIHtcblx0dmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7XG5cdHIueXp3IC09IHIueHl6ICogU2hpZnRSaWdodDg7XHRyZXR1cm4gciAqIFBhY2tVcHNjYWxlO1xufVxuZmxvYXQgdW5wYWNrUkdCQVRvRGVwdGgoIGNvbnN0IGluIHZlYzQgdiApIHtcblx0cmV0dXJuIGRvdCggdiwgVW5wYWNrRmFjdG9ycyApO1xufVxuZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCB2aWV3WiArIG5lYXIgKSAvICggbmVhciAtIGZhciApO1xufVxuZmxvYXQgb3J0aG9ncmFwaGljRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBsaW5lYXJDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7XG59XG5mbG9hdCB2aWV3WlRvUGVyc3BlY3RpdmVEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICgoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoKCBmYXIgLSBuZWFyICkgKiB2aWV3WiApO1xufVxuZmxvYXQgcGVyc3BlY3RpdmVEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGludkNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApO1xufVxuIiwKcHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudDoiI2lmZGVmIFBSRU1VTFRJUExJRURfQUxQSEFcblx0Z2xfRnJhZ0NvbG9yLnJnYiAqPSBnbF9GcmFnQ29sb3IuYTtcbiNlbmRpZlxuIixwcm9qZWN0X3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiBza2lubmVkO1xuI2Vsc2Vcblx0dmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuI2VuZGlmXG5nbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuIixkaXRoZXJpbmdfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBESVRIRVJJTkcgKVxuICBnbF9GcmFnQ29sb3IucmdiID0gZGl0aGVyaW5nKCBnbF9GcmFnQ29sb3IucmdiICk7XG4jZW5kaWZcbiIsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBESVRIRVJJTkcgKVxuXHR2ZWMzIGRpdGhlcmluZyggdmVjMyBjb2xvciApIHtcblx0XHRmbG9hdCBncmlkX3Bvc2l0aW9uID0gcmFuZCggZ2xfRnJhZ0Nvb3JkLnh5ICk7XG5cdFx0dmVjMyBkaXRoZXJfc2hpZnRfUkdCID0gdmVjMyggMC4yNSAvIDI1NS4wLCAtMC4yNSAvIDI1NS4wLCAwLjI1IC8gMjU1LjAgKTtcblx0XHRkaXRoZXJfc2hpZnRfUkdCID0gbWl4KCAyLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCAtMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgZ3JpZF9wb3NpdGlvbiApO1xuXHRcdHJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7XG5cdH1cbiNlbmRpZlxuIiwKcm91Z2huZXNzbWFwX2ZyYWdtZW50OiJmbG9hdCByb3VnaG5lc3NGYWN0b3IgPSByb3VnaG5lc3M7XG4jaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR2ZWM0IHRleGVsUm91Z2huZXNzID0gdGV4dHVyZTJEKCByb3VnaG5lc3NNYXAsIHZVdiApO1xuXHRyb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZztcbiNlbmRpZlxuIixyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgcm91Z2huZXNzTWFwO1xuI2VuZGlmIixzaGFkb3dtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVFMgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgc3BvdFNoYWRvd01hcFsgTlVNX1NQT1RfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0I2VuZGlmXG5cdGZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7XG5cdFx0cmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7XG5cdH1cblx0ZmxvYXQgdGV4dHVyZTJEU2hhZG93TGVycCggc2FtcGxlcjJEIGRlcHRocywgdmVjMiBzaXplLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkge1xuXHRcdGNvbnN0IHZlYzIgb2Zmc2V0ID0gdmVjMiggMC4wLCAxLjAgKTtcblx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2l6ZTtcblx0XHR2ZWMyIGNlbnRyb2lkVVYgPSBmbG9vciggdXYgKiBzaXplICsgMC41ICkgLyBzaXplO1xuXHRcdGZsb2F0IGxiID0gdGV4dHVyZTJEQ29tcGFyZSggZGVwdGhzLCBjZW50cm9pZFVWICsgdGV4ZWxTaXplICogb2Zmc2V0Lnh4LCBjb21wYXJlICk7XG5cdFx0ZmxvYXQgbHQgPSB0ZXh0dXJlMkRDb21wYXJlKCBkZXB0aHMsIGNlbnRyb2lkVVYgKyB0ZXhlbFNpemUgKiBvZmZzZXQueHksIGNvbXBhcmUgKTtcblx0XHRmbG9hdCByYiA9IHRleHR1cmUyRENvbXBhcmUoIGRlcHRocywgY2VudHJvaWRVViArIHRleGVsU2l6ZSAqIG9mZnNldC55eCwgY29tcGFyZSApO1xuXHRcdGZsb2F0IHJ0ID0gdGV4dHVyZTJEQ29tcGFyZSggZGVwdGhzLCBjZW50cm9pZFVWICsgdGV4ZWxTaXplICogb2Zmc2V0Lnl5LCBjb21wYXJlICk7XG5cdFx0dmVjMiBmID0gZnJhY3QoIHV2ICogc2l6ZSArIDAuNSApO1xuXHRcdGZsb2F0IGEgPSBtaXgoIGxiLCBsdCwgZi55ICk7XG5cdFx0ZmxvYXQgYiA9IG1peCggcmIsIHJ0LCBmLnkgKTtcblx0XHRmbG9hdCBjID0gbWl4KCBhLCBiLCBmLnggKTtcblx0XHRyZXR1cm4gYztcblx0fVxuXHRmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkge1xuXHRcdHNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53O1xuXHRcdHNoYWRvd0Nvb3JkLnogKz0gc2hhZG93Qmlhcztcblx0XHRidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7XG5cdFx0Ym9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApO1xuXHRcdGJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTtcblx0XHRib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApO1xuXHRcdGlmICggZnJ1c3R1bVRlc3QgKSB7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkxICksIHNoYWRvd0Nvb3JkLnogKVxuXHRcdFx0KSAqICggMS4wIC8gOS4wICk7XG5cdFx0I2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKVxuXHRcdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBkeDAgPSAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR4MSA9ICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTEgPSArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56IClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbmRpZlxuXHRcdH1cblx0XHRyZXR1cm4gMS4wO1xuXHR9XG5cdHZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHtcblx0XHR2ZWMzIGFic1YgPSBhYnMoIHYgKTtcblx0XHRmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTtcblx0XHRhYnNWICo9IHNjYWxlVG9DdWJlO1xuXHRcdHYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTtcblx0XHR2ZWMyIHBsYW5hciA9IHYueHk7XG5cdFx0ZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTtcblx0XHRmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7XG5cdFx0aWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkge1xuXHRcdFx0aWYgKCB2LnogPiAwLjAgKVxuXHRcdFx0XHRwbGFuYXIueCA9IDQuMCAtIHYueDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTtcblx0XHRcdHBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTtcblx0XHRcdHBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7XG5cdFx0XHRwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wO1xuXHRcdH1cblx0XHRyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7XG5cdH1cblx0ZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkge1xuXHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUgKiB2ZWMyKCA0LjAsIDIuMCApICk7XG5cdFx0dmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dDb29yZC54eXo7XG5cdFx0dmVjMyBiZDNEID0gbm9ybWFsaXplKCBsaWdodFRvUG9zaXRpb24gKTtcblx0XHRmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0JpYXMgKSAvIDEwMDAuMDtcblx0XHQjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKVxuXHRcdFx0dmVjMiBvZmZzZXQgPSB2ZWMyKCAtIDEsIDEgKSAqIHNoYWRvd1JhZGl1cyAqIHRleGVsU2l6ZS55O1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHgsIHRleGVsU2l6ZS55ICksIGRwIClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKTtcblx0XHQjZW5kaWZcblx0fVxuI2VuZGlmXG4iLApzaGFkb3dtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIE5VTV9ESVJfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdFx0dW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRTIF07XG5cdCNlbmRpZlxuI2VuZGlmXG4iLApzaGFkb3dtYXBfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVFMgPiAwXG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogd29ybGRQb3NpdGlvbjtcblx0fVxuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xuXHRcdHZTcG90U2hhZG93Q29vcmRbIGkgXSA9IHNwb3RTaGFkb3dNYXRyaXhbIGkgXSAqIHdvcmxkUG9zaXRpb247XG5cdH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRTID4gMFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogd29ybGRQb3NpdGlvbjtcblx0fVxuXHQjZW5kaWZcbiNlbmRpZlxuIiwKc2hhZG93bWFza19wYXJzX2ZyYWdtZW50OiJmbG9hdCBnZXRTaGFkb3dNYXNrKCkge1xuXHRmbG9hdCBzaGFkb3cgPSAxLjA7XG5cdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0RGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0O1xuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcblx0XHRzaGFkb3cgKj0gYm9vbCggZGlyZWN0aW9uYWxMaWdodC5zaGFkb3cgKSA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdFNwb3RMaWdodCBzcG90TGlnaHQ7XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07XG5cdFx0c2hhZG93ICo9IGJvb2woIHNwb3RMaWdodC5zaGFkb3cgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHR9XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0UG9pbnRMaWdodCBwb2ludExpZ2h0O1xuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdHBvaW50TGlnaHQgPSBwb2ludExpZ2h0c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSBib29sKCBwb2ludExpZ2h0LnNoYWRvdyApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHR9XG5cdCNlbmRpZlxuXHQjZW5kaWZcblx0cmV0dXJuIHNoYWRvdztcbn1cbiIsCnNraW5iYXNlX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IGJvbmVNYXRYID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnggKTtcblx0bWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7XG5cdG1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApO1xuXHRtYXQ0IGJvbmVNYXRXID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LncgKTtcbiNlbmRpZiIsc2tpbm5pbmdfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXg7XG5cdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTtcblx0I2lmZGVmIEJPTkVfVEVYVFVSRVxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGJvbmVUZXh0dXJlO1xuXHRcdHVuaWZvcm0gaW50IGJvbmVUZXh0dXJlU2l6ZTtcblx0XHRtYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7XG5cdFx0XHRmbG9hdCBqID0gaSAqIDQuMDtcblx0XHRcdGZsb2F0IHggPSBtb2QoIGosIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApO1xuXHRcdFx0ZmxvYXQgeSA9IGZsb29yKCBqIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcblx0XHRcdGZsb2F0IGR5ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0eSA9IGR5ICogKCB5ICsgMC41ICk7XG5cdFx0XHR2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYyID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAxLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYzID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAyLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7XG5cdFx0XHRtYXQ0IGJvbmUgPSBtYXQ0KCB2MSwgdjIsIHYzLCB2NCApO1xuXHRcdFx0cmV0dXJuIGJvbmU7XG5cdFx0fVxuXHQjZWxzZVxuXHRcdHVuaWZvcm0gbWF0NCBib25lTWF0cmljZXNbIE1BWF9CT05FUyBdO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdG1hdDQgYm9uZSA9IGJvbmVNYXRyaWNlc1sgaW50KGkpIF07XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbmRpZlxuI2VuZGlmXG4iLApza2lubmluZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dmVjNCBza2luVmVydGV4ID0gYmluZE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcblx0dmVjNCBza2lubmVkID0gdmVjNCggMC4wICk7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54O1xuXHRza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTtcblx0c2tpbm5lZCArPSBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53O1xuXHRza2lubmVkICA9IGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbm5lZDtcbiNlbmRpZlxuIixza2lubm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnkgKiBib25lTWF0WTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0Wjtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0Vztcblx0c2tpbk1hdHJpeCAgPSBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4O1xuXHRvYmplY3ROb3JtYWwgPSB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0Tm9ybWFsLCAwLjAgKSApLnh5ejtcbiNlbmRpZlxuIiwKc3BlY3VsYXJtYXBfZnJhZ21lbnQ6ImZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG4jaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHZlYzQgdGV4ZWxTcGVjdWxhciA9IHRleHR1cmUyRCggc3BlY3VsYXJNYXAsIHZVdiApO1xuXHRzcGVjdWxhclN0cmVuZ3RoID0gdGV4ZWxTcGVjdWxhci5yO1xuI2Vsc2Vcblx0c3BlY3VsYXJTdHJlbmd0aCA9IDEuMDtcbiNlbmRpZiIsc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9TUEVDVUxBUk1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhck1hcDtcbiNlbmRpZiIsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBUT05FX01BUFBJTkcgKVxuICBnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZlxuIix0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIjZGVmaW5lIHNhdHVyYXRlKGEpIGNsYW1wKCBhLCAwLjAsIDEuMCApXG51bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG51bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nV2hpdGVQb2ludDtcbnZlYzMgTGluZWFyVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdHJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7XG59XG52ZWMzIFJlaW5oYXJkVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdHJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApO1xufVxuI2RlZmluZSBVbmNoYXJ0ZWQySGVscGVyKCB4ICkgbWF4KCAoICggeCAqICggMC4xNSAqIHggKyAwLjEwICogMC41MCApICsgMC4yMCAqIDAuMDIgKSAvICggeCAqICggMC4xNSAqIHggKyAwLjUwICkgKyAwLjIwICogMC4zMCApICkgLSAwLjAyIC8gMC4zMCwgdmVjMyggMC4wICkgKVxudmVjMyBVbmNoYXJ0ZWQyVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdHJldHVybiBzYXR1cmF0ZSggVW5jaGFydGVkMkhlbHBlciggY29sb3IgKSAvIFVuY2hhcnRlZDJIZWxwZXIoIHZlYzMoIHRvbmVNYXBwaW5nV2hpdGVQb2ludCApICkgKTtcbn1cbnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdGNvbG9yID0gbWF4KCB2ZWMzKCAwLjAgKSwgY29sb3IgLSAwLjAwNCApO1xuXHRyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApO1xufVxuIiwKdXZfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfU1BFQ1VMQVJNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKSB8fCBkZWZpbmVkKCBVU0VfRU1JU1NJVkVNQVAgKSB8fCBkZWZpbmVkKCBVU0VfUk9VR0hORVNTTUFQICkgfHwgZGVmaW5lZCggVVNFX01FVEFMTkVTU01BUCApXG5cdHZhcnlpbmcgdmVjMiB2VXY7XG4jZW5kaWYiLHV2X3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9TUEVDVUxBUk1BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApIHx8IGRlZmluZWQoIFVTRV9FTUlTU0lWRU1BUCApIHx8IGRlZmluZWQoIFVTRV9ST1VHSE5FU1NNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTUVUQUxORVNTTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjtcblx0dW5pZm9ybSB2ZWM0IG9mZnNldFJlcGVhdDtcbiNlbmRpZlxuIiwKdXZfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9TUEVDVUxBUk1BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApIHx8IGRlZmluZWQoIFVTRV9FTUlTU0lWRU1BUCApIHx8IGRlZmluZWQoIFVTRV9ST1VHSE5FU1NNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTUVUQUxORVNTTUFQIClcblx0dlV2ID0gdXYgKiBvZmZzZXRSZXBlYXQuencgKyBvZmZzZXRSZXBlYXQueHk7XG4jZW5kaWYiLHV2Ml9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLHV2Ml9wYXJzX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdGF0dHJpYnV0ZSB2ZWMyIHV2Mjtcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLAp1djJfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dlV2MiA9IHV2MjtcbiNlbmRpZiIsd29ybGRwb3NfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQoIFBIT05HICkgfHwgZGVmaW5lZCggUEhZU0lDQUwgKSB8fCBkZWZpbmVkKCBMQU1CRVJUICkgfHwgZGVmaW5lZCAoIFVTRV9TSEFET1dNQVAgKVxuXHQjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdFx0dmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWxNYXRyaXggKiBza2lubmVkO1xuXHQjZWxzZVxuXHRcdHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHQjZW5kaWZcbiNlbmRpZlxuIixjdWJlX2ZyYWc6InVuaWZvcm0gc2FtcGxlckN1YmUgdEN1YmU7XG51bmlmb3JtIGZsb2F0IHRGbGlwO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZUN1YmUoIHRDdWJlLCB2ZWMzKCB0RmxpcCAqIHZXb3JsZFBvc2l0aW9uLngsIHZXb3JsZFBvc2l0aW9uLnl6ICkgKTtcblx0Z2xfRnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTtcbn1cbiIsCmN1YmVfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0dldvcmxkUG9zaXRpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG59XG4iLGRlcHRoX2ZyYWc6IiNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0dW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7XG5cdCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0XHRkaWZmdXNlQ29sb3IuYSA9IG9wYWNpdHk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIGdsX0ZyYWdDb29yZC56ICksIG9wYWNpdHkgKTtcblx0I2VsaWYgREVQVEhfUEFDS0lORyA9PSAzMjAxXG5cdFx0Z2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBnbF9GcmFnQ29vcmQueiApO1xuXHQjZW5kaWZcbn1cbiIsCmRlcHRoX3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG59XG4iLApkaXN0YW5jZVJHQkFfZnJhZzoidW5pZm9ybSB2ZWMzIGxpZ2h0UG9zO1xudmFyeWluZyB2ZWM0IHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluICgpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBsZW5ndGgoIHZXb3JsZFBvc2l0aW9uLnh5eiAtIGxpZ2h0UG9zLnh5eiApIC8gMTAwMC4wICk7XG59XG4iLGRpc3RhbmNlUkdCQV92ZXJ0OiJ2YXJ5aW5nIHZlYzQgdldvcmxkUG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uO1xufVxuIiwKZXF1aXJlY3RfZnJhZzoidW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xudW5pZm9ybSBmbG9hdCB0RmxpcDtcbnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiApO1xuXHR2ZWMyIHNhbXBsZVVWO1xuXHRzYW1wbGVVVi55ID0gc2F0dXJhdGUoIHRGbGlwICogZGlyZWN0aW9uLnkgKiAtMC41ICsgMC41ICk7XG5cdHNhbXBsZVVWLnggPSBhdGFuKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnggKSAqIFJFQ0lQUk9DQUxfUEkyICsgMC41O1xuXHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTtcbn1cbiIsZXF1aXJlY3RfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0dldvcmxkUG9zaXRpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG59XG4iLApsaW5lZGFzaGVkX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTaXplO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdGlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkge1xuXHRcdGRpc2NhcmQ7XG5cdH1cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59XG4iLApsaW5lZGFzaGVkX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2NhbGU7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZURpc3RhbmNlO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHR2TGluZURpc3RhbmNlID0gc2NhbGUgKiBsaW5lRGlzdGFuY2U7XG5cdHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufVxuIiwKbWVzaGJhc2ljX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKS54eXogKiBsaWdodE1hcEludGVuc2l0eTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdCNpbmNsdWRlIDxub3JtYWxfZmxpcD5cblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cbn1cbiIsCm1lc2hiYXNpY192ZXJ0OiIjaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufVxuIiwKbWVzaGxhbWJlcnRfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnM+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHQjaW5jbHVkZSA8bGlnaHRtYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0RpZmZ1c2VfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApO1xuXHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZMaWdodEZyb250IDogdkxpZ2h0QmFjaztcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gdkxpZ2h0RnJvbnQ7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICo9IEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPG5vcm1hbF9mbGlwPlxuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufVxuIiwKbWVzaGxhbWJlcnRfdmVydDoiI2RlZmluZSBMQU1CRVJUXG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnM+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn1cbiIsCm1lc2hwaG9uZ19mcmFnOiIjZGVmaW5lIFBIT05HXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gdmVjMyBzcGVjdWxhcjtcbnVuaWZvcm0gZmxvYXQgc2hpbmluZXNzO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnM+XG4jaW5jbHVkZSA8bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mbGlwPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfcGhvbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfdGVtcGxhdGU+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn1cbiIsCm1lc2hwaG9uZ192ZXJ0OiIjZGVmaW5lIFBIT05HXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbiNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59XG4iLAptZXNocGh5c2ljYWxfZnJhZzoiI2RlZmluZSBQSFlTSUNBTFxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcztcbnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBTVEFOREFSRFxuXHR1bmlmb3JtIGZsb2F0IGNsZWFyQ29hdDtcblx0dW5pZm9ybSBmbG9hdCBjbGVhckNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfcGFycz5cbiNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8cm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mbGlwPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfdGVtcGxhdGU+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn1cbiIsCm1lc2hwaHlzaWNhbF92ZXJ0OiIjZGVmaW5lIFBIWVNJQ0FMXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59XG4iLApub3JtYWxfZnJhZzoiI2RlZmluZSBOT1JNQUxcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmXG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZmxpcD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggcGFja05vcm1hbFRvUkdCKCBub3JtYWwgKSwgb3BhY2l0eSApO1xufVxuIiwKbm9ybWFsX3ZlcnQ6IiNkZWZpbmUgTk9STUFMXG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKVxuXHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNlbmRpZlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApXG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuI2VuZGlmXG59XG4iLApwb2ludHNfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cbn1cbiIsCnBvaW50c192ZXJ0OiJ1bmlmb3JtIGZsb2F0IHNpemU7XG51bmlmb3JtIGZsb2F0IHNjYWxlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaWZkZWYgVVNFX1NJWkVBVFRFTlVBVElPTlxuXHRcdGdsX1BvaW50U2l6ZSA9IHNpemUgKiAoIHNjYWxlIC8gLSBtdlBvc2l0aW9uLnogKTtcblx0I2Vsc2Vcblx0XHRnbF9Qb2ludFNpemUgPSBzaXplO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn1cbiIsCnNoYWRvd19mcmFnOiJ1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnM+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAwLjAsIDAuMCwgMC4wLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xufVxuIixzaGFkb3dfdmVydDoiI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cbn1cbiJ9LGFiPXtiYXNpYzp7dW5pZm9ybXM6SGEubWVyZ2UoW1YuY29tbW9uLApWLmFvbWFwLFYubGlnaHRtYXAsVi5mb2ddKSx2ZXJ0ZXhTaGFkZXI6VS5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpVLm1lc2hiYXNpY19mcmFnfSxsYW1iZXJ0Ont1bmlmb3JtczpIYS5tZXJnZShbVi5jb21tb24sVi5hb21hcCxWLmxpZ2h0bWFwLFYuZW1pc3NpdmVtYXAsVi5mb2csVi5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgSCgwKX19XSksdmVydGV4U2hhZGVyOlUubWVzaGxhbWJlcnRfdmVydCxmcmFnbWVudFNoYWRlcjpVLm1lc2hsYW1iZXJ0X2ZyYWd9LHBob25nOnt1bmlmb3JtczpIYS5tZXJnZShbVi5jb21tb24sVi5hb21hcCxWLmxpZ2h0bWFwLFYuZW1pc3NpdmVtYXAsVi5idW1wbWFwLFYubm9ybWFsbWFwLFYuZGlzcGxhY2VtZW50bWFwLFYuZ3JhZGllbnRtYXAsVi5mb2csVi5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgSCgwKX0sc3BlY3VsYXI6e3ZhbHVlOm5ldyBIKDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6VS5tZXNocGhvbmdfdmVydCwKZnJhZ21lbnRTaGFkZXI6VS5tZXNocGhvbmdfZnJhZ30sc3RhbmRhcmQ6e3VuaWZvcm1zOkhhLm1lcmdlKFtWLmNvbW1vbixWLmFvbWFwLFYubGlnaHRtYXAsVi5lbWlzc2l2ZW1hcCxWLmJ1bXBtYXAsVi5ub3JtYWxtYXAsVi5kaXNwbGFjZW1lbnRtYXAsVi5yb3VnaG5lc3NtYXAsVi5tZXRhbG5lc3NtYXAsVi5mb2csVi5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgSCgwKX0scm91Z2huZXNzOnt2YWx1ZTouNX0sbWV0YWxuZXNzOnt2YWx1ZTouNX0sZW52TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6VS5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpVLm1lc2hwaHlzaWNhbF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOkhhLm1lcmdlKFtWLnBvaW50cyxWLmZvZ10pLHZlcnRleFNoYWRlcjpVLnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOlUucG9pbnRzX2ZyYWd9LGRhc2hlZDp7dW5pZm9ybXM6SGEubWVyZ2UoW1YuY29tbW9uLFYuZm9nLHtzY2FsZTp7dmFsdWU6MX0sCmRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjpVLmxpbmVkYXNoZWRfdmVydCxmcmFnbWVudFNoYWRlcjpVLmxpbmVkYXNoZWRfZnJhZ30sZGVwdGg6e3VuaWZvcm1zOkhhLm1lcmdlKFtWLmNvbW1vbixWLmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpVLmRlcHRoX3ZlcnQsZnJhZ21lbnRTaGFkZXI6VS5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOkhhLm1lcmdlKFtWLmNvbW1vbixWLmJ1bXBtYXAsVi5ub3JtYWxtYXAsVi5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpVLm5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOlUubm9ybWFsX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOnt0Q3ViZTp7dmFsdWU6bnVsbH0sdEZsaXA6e3ZhbHVlOi0xfSxvcGFjaXR5Ont2YWx1ZToxfX0sdmVydGV4U2hhZGVyOlUuY3ViZV92ZXJ0LGZyYWdtZW50U2hhZGVyOlUuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH0sCnRGbGlwOnt2YWx1ZTotMX19LHZlcnRleFNoYWRlcjpVLmVxdWlyZWN0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6VS5lcXVpcmVjdF9mcmFnfSxkaXN0YW5jZVJHQkE6e3VuaWZvcm1zOntsaWdodFBvczp7dmFsdWU6bmV3IHB9fSx2ZXJ0ZXhTaGFkZXI6VS5kaXN0YW5jZVJHQkFfdmVydCxmcmFnbWVudFNoYWRlcjpVLmRpc3RhbmNlUkdCQV9mcmFnfX07YWIucGh5c2ljYWw9e3VuaWZvcm1zOkhhLm1lcmdlKFthYi5zdGFuZGFyZC51bmlmb3Jtcyx7Y2xlYXJDb2F0Ont2YWx1ZTowfSxjbGVhckNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9fV0pLHZlcnRleFNoYWRlcjpVLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOlUubWVzaHBoeXNpY2FsX2ZyYWd9O09iamVjdC5hc3NpZ24oaWQucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLm1pbi5jb3B5KGEpO3RoaXMubWF4LmNvcHkoYik7cmV0dXJuIHRoaXN9LHNldEZyb21Qb2ludHM6ZnVuY3Rpb24oYSl7dGhpcy5tYWtlRW1wdHkoKTsKZm9yKHZhciBiPTAsYz1hLmxlbmd0aDtiPGM7YisrKXRoaXMuZXhwYW5kQnlQb2ludChhW2JdKTtyZXR1cm4gdGhpc30sc2V0RnJvbUNlbnRlckFuZFNpemU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgRDtyZXR1cm4gZnVuY3Rpb24oYixjKXt2YXIgZD1hLmNvcHkoYykubXVsdGlwbHlTY2FsYXIoLjUpO3RoaXMubWluLmNvcHkoYikuc3ViKGQpO3RoaXMubWF4LmNvcHkoYikuYWRkKGQpO3JldHVybiB0aGlzfX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLm1pbi5jb3B5KGEubWluKTt0aGlzLm1heC5jb3B5KGEubWF4KTtyZXR1cm4gdGhpc30sbWFrZUVtcHR5OmZ1bmN0aW9uKCl7dGhpcy5taW4ueD10aGlzLm1pbi55PUluZmluaXR5O3RoaXMubWF4Lng9dGhpcy5tYXgueT0tSW5maW5pdHk7cmV0dXJuIHRoaXN9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHwKdGhpcy5tYXgueTx0aGlzLm1pbi55fSxnZXRDZW50ZXI6ZnVuY3Rpb24oYSl7YT1hfHxuZXcgRDtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/YS5zZXQoMCwwKTphLmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX0sZ2V0U2l6ZTpmdW5jdGlvbihhKXthPWF8fG5ldyBEO3JldHVybiB0aGlzLmlzRW1wdHkoKT9hLnNldCgwLDApOmEuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9LGV4cGFuZEJ5UG9pbnQ6ZnVuY3Rpb24oYSl7dGhpcy5taW4ubWluKGEpO3RoaXMubWF4Lm1heChhKTtyZXR1cm4gdGhpc30sZXhwYW5kQnlWZWN0b3I6ZnVuY3Rpb24oYSl7dGhpcy5taW4uc3ViKGEpO3RoaXMubWF4LmFkZChhKTtyZXR1cm4gdGhpc30sZXhwYW5kQnlTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy5taW4uYWRkU2NhbGFyKC1hKTt0aGlzLm1heC5hZGRTY2FsYXIoYSk7cmV0dXJuIHRoaXN9LGNvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEueDwKdGhpcy5taW4ueHx8YS54PnRoaXMubWF4Lnh8fGEueTx0aGlzLm1pbi55fHxhLnk+dGhpcy5tYXgueT8hMTohMH0sY29udGFpbnNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubWluLng8PWEubWluLngmJmEubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PWEubWluLnkmJmEubWF4Lnk8PXRoaXMubWF4Lnl9LGdldFBhcmFtZXRlcjpmdW5jdGlvbihhLGIpe3JldHVybihifHxuZXcgRCkuc2V0KChhLngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKGEueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSl9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWF4Lng8dGhpcy5taW4ueHx8YS5taW4ueD50aGlzLm1heC54fHxhLm1heC55PHRoaXMubWluLnl8fGEubWluLnk+dGhpcy5tYXgueT8hMTohMH0sY2xhbXBQb2ludDpmdW5jdGlvbihhLGIpe3JldHVybihifHxuZXcgRCkuY29weShhKS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9LApkaXN0YW5jZVRvUG9pbnQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgRDtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGEuY29weShiKS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKGIpLmxlbmd0aCgpfX0oKSxpbnRlcnNlY3Q6ZnVuY3Rpb24oYSl7dGhpcy5taW4ubWF4KGEubWluKTt0aGlzLm1heC5taW4oYS5tYXgpO3JldHVybiB0aGlzfSx1bmlvbjpmdW5jdGlvbihhKXt0aGlzLm1pbi5taW4oYS5taW4pO3RoaXMubWF4Lm1heChhLm1heCk7cmV0dXJuIHRoaXN9LHRyYW5zbGF0ZTpmdW5jdGlvbihhKXt0aGlzLm1pbi5hZGQoYSk7dGhpcy5tYXguYWRkKGEpO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWluLmVxdWFscyh0aGlzLm1pbikmJmEubWF4LmVxdWFscyh0aGlzLm1heCl9fSk7dmFyIEtmPTA7T2JqZWN0LmFzc2lnbihaLnByb3RvdHlwZSxzYS5wcm90b3R5cGUse2lzTWF0ZXJpYWw6ITAsc2V0VmFsdWVzOmZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PQphKWZvcih2YXIgYiBpbiBhKXt2YXIgYz1hW2JdO2lmKHZvaWQgMD09PWMpY29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrYisiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2Vsc2V7dmFyIGQ9dGhpc1tiXTt2b2lkIDA9PT1kP2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogJyIrYisiJyBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGlzIG1hdGVyaWFsLiIpOmQmJmQuaXNDb2xvcj9kLnNldChjKTpkJiZkLmlzVmVjdG9yMyYmYyYmYy5pc1ZlY3RvcjM/ZC5jb3B5KGMpOnRoaXNbYl09Im92ZXJkcmF3Ij09PWI/TnVtYmVyKGMpOmN9fX0sdG9KU09OOmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSl7dmFyIGI9W10sYztmb3IoYyBpbiBhKXt2YXIgZD1hW2NdO2RlbGV0ZSBkLm1ldGFkYXRhO2IucHVzaChkKX1yZXR1cm4gYn12YXIgYz12b2lkIDA9PT1hO2MmJihhPXt0ZXh0dXJlczp7fSxpbWFnZXM6e319KTt2YXIgZD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6Ik1hdGVyaWFsIiwKZ2VuZXJhdG9yOiJNYXRlcmlhbC50b0pTT04ifX07ZC51dWlkPXRoaXMudXVpZDtkLnR5cGU9dGhpcy50eXBlOyIiIT09dGhpcy5uYW1lJiYoZC5uYW1lPXRoaXMubmFtZSk7dGhpcy5jb2xvciYmdGhpcy5jb2xvci5pc0NvbG9yJiYoZC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpKTt2b2lkIDAhPT10aGlzLnJvdWdobmVzcyYmKGQucm91Z2huZXNzPXRoaXMucm91Z2huZXNzKTt2b2lkIDAhPT10aGlzLm1ldGFsbmVzcyYmKGQubWV0YWxuZXNzPXRoaXMubWV0YWxuZXNzKTt0aGlzLmVtaXNzaXZlJiZ0aGlzLmVtaXNzaXZlLmlzQ29sb3ImJihkLmVtaXNzaXZlPXRoaXMuZW1pc3NpdmUuZ2V0SGV4KCkpO3RoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKGQuc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSk7dm9pZCAwIT09dGhpcy5zaGluaW5lc3MmJihkLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyk7dm9pZCAwIT09dGhpcy5jbGVhckNvYXQmJihkLmNsZWFyQ29hdD0KdGhpcy5jbGVhckNvYXQpO3ZvaWQgMCE9PXRoaXMuY2xlYXJDb2F0Um91Z2huZXNzJiYoZC5jbGVhckNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhckNvYXRSb3VnaG5lc3MpO3RoaXMubWFwJiZ0aGlzLm1hcC5pc1RleHR1cmUmJihkLm1hcD10aGlzLm1hcC50b0pTT04oYSkudXVpZCk7dGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihkLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKGEpLnV1aWQpO3RoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYoZC5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTihhKS51dWlkKTt0aGlzLmJ1bXBNYXAmJnRoaXMuYnVtcE1hcC5pc1RleHR1cmUmJihkLmJ1bXBNYXA9dGhpcy5idW1wTWFwLnRvSlNPTihhKS51dWlkLGQuYnVtcFNjYWxlPXRoaXMuYnVtcFNjYWxlKTt0aGlzLm5vcm1hbE1hcCYmdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlJiYoZC5ub3JtYWxNYXA9dGhpcy5ub3JtYWxNYXAudG9KU09OKGEpLnV1aWQsCmQubm9ybWFsU2NhbGU9dGhpcy5ub3JtYWxTY2FsZS50b0FycmF5KCkpO3RoaXMuZGlzcGxhY2VtZW50TWFwJiZ0aGlzLmRpc3BsYWNlbWVudE1hcC5pc1RleHR1cmUmJihkLmRpc3BsYWNlbWVudE1hcD10aGlzLmRpc3BsYWNlbWVudE1hcC50b0pTT04oYSkudXVpZCxkLmRpc3BsYWNlbWVudFNjYWxlPXRoaXMuZGlzcGxhY2VtZW50U2NhbGUsZC5kaXNwbGFjZW1lbnRCaWFzPXRoaXMuZGlzcGxhY2VtZW50Qmlhcyk7dGhpcy5yb3VnaG5lc3NNYXAmJnRoaXMucm91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKGQucm91Z2huZXNzTWFwPXRoaXMucm91Z2huZXNzTWFwLnRvSlNPTihhKS51dWlkKTt0aGlzLm1ldGFsbmVzc01hcCYmdGhpcy5tZXRhbG5lc3NNYXAuaXNUZXh0dXJlJiYoZC5tZXRhbG5lc3NNYXA9dGhpcy5tZXRhbG5lc3NNYXAudG9KU09OKGEpLnV1aWQpO3RoaXMuZW1pc3NpdmVNYXAmJnRoaXMuZW1pc3NpdmVNYXAuaXNUZXh0dXJlJiYoZC5lbWlzc2l2ZU1hcD10aGlzLmVtaXNzaXZlTWFwLnRvSlNPTihhKS51dWlkKTsKdGhpcy5zcGVjdWxhck1hcCYmdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUmJihkLnNwZWN1bGFyTWFwPXRoaXMuc3BlY3VsYXJNYXAudG9KU09OKGEpLnV1aWQpO3RoaXMuZW52TWFwJiZ0aGlzLmVudk1hcC5pc1RleHR1cmUmJihkLmVudk1hcD10aGlzLmVudk1hcC50b0pTT04oYSkudXVpZCxkLnJlZmxlY3Rpdml0eT10aGlzLnJlZmxlY3Rpdml0eSk7dGhpcy5ncmFkaWVudE1hcCYmdGhpcy5ncmFkaWVudE1hcC5pc1RleHR1cmUmJihkLmdyYWRpZW50TWFwPXRoaXMuZ3JhZGllbnRNYXAudG9KU09OKGEpLnV1aWQpO3ZvaWQgMCE9PXRoaXMuc2l6ZSYmKGQuc2l6ZT10aGlzLnNpemUpO3ZvaWQgMCE9PXRoaXMuc2l6ZUF0dGVudWF0aW9uJiYoZC5zaXplQXR0ZW51YXRpb249dGhpcy5zaXplQXR0ZW51YXRpb24pOzEhPT10aGlzLmJsZW5kaW5nJiYoZC5ibGVuZGluZz10aGlzLmJsZW5kaW5nKTsyIT09dGhpcy5zaGFkaW5nJiYoZC5zaGFkaW5nPXRoaXMuc2hhZGluZyk7MCE9PXRoaXMuc2lkZSYmCihkLnNpZGU9dGhpcy5zaWRlKTswIT09dGhpcy52ZXJ0ZXhDb2xvcnMmJihkLnZlcnRleENvbG9ycz10aGlzLnZlcnRleENvbG9ycyk7MT50aGlzLm9wYWNpdHkmJihkLm9wYWNpdHk9dGhpcy5vcGFjaXR5KTshMD09PXRoaXMudHJhbnNwYXJlbnQmJihkLnRyYW5zcGFyZW50PXRoaXMudHJhbnNwYXJlbnQpO2QuZGVwdGhGdW5jPXRoaXMuZGVwdGhGdW5jO2QuZGVwdGhUZXN0PXRoaXMuZGVwdGhUZXN0O2QuZGVwdGhXcml0ZT10aGlzLmRlcHRoV3JpdGU7MDx0aGlzLmFscGhhVGVzdCYmKGQuYWxwaGFUZXN0PXRoaXMuYWxwaGFUZXN0KTshMD09PXRoaXMucHJlbXVsdGlwbGllZEFscGhhJiYoZC5wcmVtdWx0aXBsaWVkQWxwaGE9dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEpOyEwPT09dGhpcy53aXJlZnJhbWUmJihkLndpcmVmcmFtZT10aGlzLndpcmVmcmFtZSk7MTx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCYmKGQud2lyZWZyYW1lTGluZXdpZHRoPXRoaXMud2lyZWZyYW1lTGluZXdpZHRoKTsKInJvdW5kIiE9PXRoaXMud2lyZWZyYW1lTGluZWNhcCYmKGQud2lyZWZyYW1lTGluZWNhcD10aGlzLndpcmVmcmFtZUxpbmVjYXApOyJyb3VuZCIhPT10aGlzLndpcmVmcmFtZUxpbmVqb2luJiYoZC53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVqb2luKTtkLnNraW5uaW5nPXRoaXMuc2tpbm5pbmc7ZC5tb3JwaFRhcmdldHM9dGhpcy5tb3JwaFRhcmdldHM7ZC5kaXRoZXJpbmc9dGhpcy5kaXRoZXJpbmc7YyYmKGM9YihhLnRleHR1cmVzKSxhPWIoYS5pbWFnZXMpLDA8Yy5sZW5ndGgmJihkLnRleHR1cmVzPWMpLDA8YS5sZW5ndGgmJihkLmltYWdlcz1hKSk7cmV0dXJuIGR9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMubmFtZT1hLm5hbWU7dGhpcy5mb2c9YS5mb2c7dGhpcy5saWdodHM9YS5saWdodHM7dGhpcy5ibGVuZGluZz1hLmJsZW5kaW5nO3RoaXMuc2lkZT1hLnNpZGU7CnRoaXMuc2hhZGluZz1hLnNoYWRpbmc7dGhpcy52ZXJ0ZXhDb2xvcnM9YS52ZXJ0ZXhDb2xvcnM7dGhpcy5vcGFjaXR5PWEub3BhY2l0eTt0aGlzLnRyYW5zcGFyZW50PWEudHJhbnNwYXJlbnQ7dGhpcy5ibGVuZFNyYz1hLmJsZW5kU3JjO3RoaXMuYmxlbmREc3Q9YS5ibGVuZERzdDt0aGlzLmJsZW5kRXF1YXRpb249YS5ibGVuZEVxdWF0aW9uO3RoaXMuYmxlbmRTcmNBbHBoYT1hLmJsZW5kU3JjQWxwaGE7dGhpcy5ibGVuZERzdEFscGhhPWEuYmxlbmREc3RBbHBoYTt0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT1hLmJsZW5kRXF1YXRpb25BbHBoYTt0aGlzLmRlcHRoRnVuYz1hLmRlcHRoRnVuYzt0aGlzLmRlcHRoVGVzdD1hLmRlcHRoVGVzdDt0aGlzLmRlcHRoV3JpdGU9YS5kZXB0aFdyaXRlO3RoaXMuY29sb3JXcml0ZT1hLmNvbG9yV3JpdGU7dGhpcy5wcmVjaXNpb249YS5wcmVjaXNpb247dGhpcy5wb2x5Z29uT2Zmc2V0PWEucG9seWdvbk9mZnNldDt0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9CmEucG9seWdvbk9mZnNldEZhY3Rvcjt0aGlzLnBvbHlnb25PZmZzZXRVbml0cz1hLnBvbHlnb25PZmZzZXRVbml0czt0aGlzLmRpdGhlcmluZz1hLmRpdGhlcmluZzt0aGlzLmFscGhhVGVzdD1hLmFscGhhVGVzdDt0aGlzLnByZW11bHRpcGxpZWRBbHBoYT1hLnByZW11bHRpcGxpZWRBbHBoYTt0aGlzLm92ZXJkcmF3PWEub3ZlcmRyYXc7dGhpcy52aXNpYmxlPWEudmlzaWJsZTt0aGlzLmNsaXBTaGFkb3dzPWEuY2xpcFNoYWRvd3M7dGhpcy5jbGlwSW50ZXJzZWN0aW9uPWEuY2xpcEludGVyc2VjdGlvbjthPWEuY2xpcHBpbmdQbGFuZXM7dmFyIGI9bnVsbDtpZihudWxsIT09YSlmb3IodmFyIGM9YS5sZW5ndGgsYj1BcnJheShjKSxkPTA7ZCE9PWM7KytkKWJbZF09YVtkXS5jbG9uZSgpO3RoaXMuY2xpcHBpbmdQbGFuZXM9YjtyZXR1cm4gdGhpc30sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KTtFYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShaLnByb3RvdHlwZSk7CkVhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FYTtFYS5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMDtFYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtaLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLmZyYWdtZW50U2hhZGVyPWEuZnJhZ21lbnRTaGFkZXI7dGhpcy52ZXJ0ZXhTaGFkZXI9YS52ZXJ0ZXhTaGFkZXI7dGhpcy51bmlmb3Jtcz1IYS5jbG9uZShhLnVuaWZvcm1zKTt0aGlzLmRlZmluZXM9YS5kZWZpbmVzO3RoaXMud2lyZWZyYW1lPWEud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWEud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMubGlnaHRzPWEubGlnaHRzO3RoaXMuY2xpcHBpbmc9YS5jbGlwcGluZzt0aGlzLnNraW5uaW5nPWEuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9YS5tb3JwaFRhcmdldHM7dGhpcy5tb3JwaE5vcm1hbHM9YS5tb3JwaE5vcm1hbHM7dGhpcy5leHRlbnNpb25zPWEuZXh0ZW5zaW9ucztyZXR1cm4gdGhpc307RWEucHJvdG90eXBlLnRvSlNPTj0KZnVuY3Rpb24oYSl7YT1aLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGEpO2EudW5pZm9ybXM9dGhpcy51bmlmb3JtczthLnZlcnRleFNoYWRlcj10aGlzLnZlcnRleFNoYWRlcjthLmZyYWdtZW50U2hhZGVyPXRoaXMuZnJhZ21lbnRTaGFkZXI7cmV0dXJuIGF9OyRhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTskYS5wcm90b3R5cGUuY29uc3RydWN0b3I9JGE7JGEucHJvdG90eXBlLmlzTWVzaERlcHRoTWF0ZXJpYWw9ITA7JGEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5kZXB0aFBhY2tpbmc9YS5kZXB0aFBhY2tpbmc7dGhpcy5za2lubmluZz1hLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWEubW9ycGhUYXJnZXRzO3RoaXMubWFwPWEubWFwO3RoaXMuYWxwaGFNYXA9YS5hbHBoYU1hcDt0aGlzLmRpc3BsYWNlbWVudE1hcD1hLmRpc3BsYWNlbWVudE1hcDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPQphLmRpc3BsYWNlbWVudFNjYWxlO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz1hLmRpc3BsYWNlbWVudEJpYXM7dGhpcy53aXJlZnJhbWU9YS53aXJlZnJhbWU7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9YS53aXJlZnJhbWVMaW5ld2lkdGg7cmV0dXJuIHRoaXN9O09iamVjdC5hc3NpZ24oVGEucHJvdG90eXBlLHtpc0JveDM6ITAsc2V0OmZ1bmN0aW9uKGEsYil7dGhpcy5taW4uY29weShhKTt0aGlzLm1heC5jb3B5KGIpO3JldHVybiB0aGlzfSxzZXRGcm9tQXJyYXk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPUluZmluaXR5LGM9SW5maW5pdHksZD1JbmZpbml0eSxlPS1JbmZpbml0eSxmPS1JbmZpbml0eSxnPS1JbmZpbml0eSxoPTAsaz1hLmxlbmd0aDtoPGs7aCs9Myl7dmFyIG09YVtoXSxsPWFbaCsxXSxxPWFbaCsyXTttPGImJihiPW0pO2w8YyYmKGM9bCk7cTxkJiYoZD1xKTttPmUmJihlPW0pO2w+ZiYmKGY9bCk7cT5nJiYoZz1xKX10aGlzLm1pbi5zZXQoYixjLGQpO3RoaXMubWF4LnNldChlLApmLGcpO3JldHVybiB0aGlzfSxzZXRGcm9tQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1JbmZpbml0eSxjPUluZmluaXR5LGQ9SW5maW5pdHksZT0tSW5maW5pdHksZj0tSW5maW5pdHksZz0tSW5maW5pdHksaD0wLGs9YS5jb3VudDtoPGs7aCsrKXt2YXIgbT1hLmdldFgoaCksbD1hLmdldFkoaCkscT1hLmdldFooaCk7bTxiJiYoYj1tKTtsPGMmJihjPWwpO3E8ZCYmKGQ9cSk7bT5lJiYoZT1tKTtsPmYmJihmPWwpO3E+ZyYmKGc9cSl9dGhpcy5taW4uc2V0KGIsYyxkKTt0aGlzLm1heC5zZXQoZSxmLGcpO3JldHVybiB0aGlzfSxzZXRGcm9tUG9pbnRzOmZ1bmN0aW9uKGEpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aDtiPGM7YisrKXRoaXMuZXhwYW5kQnlQb2ludChhW2JdKTtyZXR1cm4gdGhpc30sc2V0RnJvbUNlbnRlckFuZFNpemU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYixjKXt2YXIgZD1hLmNvcHkoYykubXVsdGlwbHlTY2FsYXIoLjUpOwp0aGlzLm1pbi5jb3B5KGIpLnN1YihkKTt0aGlzLm1heC5jb3B5KGIpLmFkZChkKTtyZXR1cm4gdGhpc319KCksc2V0RnJvbU9iamVjdDpmdW5jdGlvbihhKXt0aGlzLm1ha2VFbXB0eSgpO3JldHVybiB0aGlzLmV4cGFuZEJ5T2JqZWN0KGEpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLm1pbi5jb3B5KGEubWluKTt0aGlzLm1heC5jb3B5KGEubWF4KTtyZXR1cm4gdGhpc30sbWFrZUVtcHR5OmZ1bmN0aW9uKCl7dGhpcy5taW4ueD10aGlzLm1pbi55PXRoaXMubWluLno9SW5maW5pdHk7dGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LUluZmluaXR5O3JldHVybiB0aGlzfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fHx0aGlzLm1heC56PHRoaXMubWluLnp9LGdldENlbnRlcjpmdW5jdGlvbihhKXthPQphfHxuZXcgcDtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/YS5zZXQoMCwwLDApOmEuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfSxnZXRTaXplOmZ1bmN0aW9uKGEpe2E9YXx8bmV3IHA7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP2Euc2V0KDAsMCwwKTphLnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfSxleHBhbmRCeVBvaW50OmZ1bmN0aW9uKGEpe3RoaXMubWluLm1pbihhKTt0aGlzLm1heC5tYXgoYSk7cmV0dXJuIHRoaXN9LGV4cGFuZEJ5VmVjdG9yOmZ1bmN0aW9uKGEpe3RoaXMubWluLnN1YihhKTt0aGlzLm1heC5hZGQoYSk7cmV0dXJuIHRoaXN9LGV4cGFuZEJ5U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMubWluLmFkZFNjYWxhcigtYSk7dGhpcy5tYXguYWRkU2NhbGFyKGEpO3JldHVybiB0aGlzfSxleHBhbmRCeU9iamVjdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz10aGlzO2IudXBkYXRlTWF0cml4V29ybGQoITApOwpiLnRyYXZlcnNlKGZ1bmN0aW9uKGIpe3ZhciBlLGY7ZT1iLmdlb21ldHJ5O2lmKHZvaWQgMCE9PWUpaWYoZS5pc0dlb21ldHJ5KXt2YXIgZz1lLnZlcnRpY2VzO2U9MDtmb3IoZj1nLmxlbmd0aDtlPGY7ZSsrKWEuY29weShnW2VdKSxhLmFwcGx5TWF0cml4NChiLm1hdHJpeFdvcmxkKSxjLmV4cGFuZEJ5UG9pbnQoYSl9ZWxzZSBpZihlLmlzQnVmZmVyR2VvbWV0cnkmJihnPWUuYXR0cmlidXRlcy5wb3NpdGlvbix2b2lkIDAhPT1nKSlmb3IoZT0wLGY9Zy5jb3VudDtlPGY7ZSsrKWEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShnLGUpLmFwcGx5TWF0cml4NChiLm1hdHJpeFdvcmxkKSxjLmV4cGFuZEJ5UG9pbnQoYSl9KTtyZXR1cm4gdGhpc319KCksY29udGFpbnNQb2ludDpmdW5jdGlvbihhKXtyZXR1cm4gYS54PHRoaXMubWluLnh8fGEueD50aGlzLm1heC54fHxhLnk8dGhpcy5taW4ueXx8YS55PnRoaXMubWF4Lnl8fGEuejx0aGlzLm1pbi56fHxhLno+dGhpcy5tYXguej8hMTohMH0sY29udGFpbnNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubWluLng8PQphLm1pbi54JiZhLm1heC54PD10aGlzLm1heC54JiZ0aGlzLm1pbi55PD1hLm1pbi55JiZhLm1heC55PD10aGlzLm1heC55JiZ0aGlzLm1pbi56PD1hLm1pbi56JiZhLm1heC56PD10aGlzLm1heC56fSxnZXRQYXJhbWV0ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYnx8bmV3IHApLnNldCgoYS54LXRoaXMubWluLngpLyh0aGlzLm1heC54LXRoaXMubWluLngpLChhLnktdGhpcy5taW4ueSkvKHRoaXMubWF4LnktdGhpcy5taW4ueSksKGEuei10aGlzLm1pbi56KS8odGhpcy5tYXguei10aGlzLm1pbi56KSl9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWF4Lng8dGhpcy5taW4ueHx8YS5taW4ueD50aGlzLm1heC54fHxhLm1heC55PHRoaXMubWluLnl8fGEubWluLnk+dGhpcy5tYXgueXx8YS5tYXguejx0aGlzLm1pbi56fHxhLm1pbi56PnRoaXMubWF4Lno/ITE6ITB9LGludGVyc2VjdHNTcGhlcmU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYil7dGhpcy5jbGFtcFBvaW50KGIuY2VudGVyLAphKTtyZXR1cm4gYS5kaXN0YW5jZVRvU3F1YXJlZChiLmNlbnRlcik8PWIucmFkaXVzKmIucmFkaXVzfX0oKSxpbnRlcnNlY3RzUGxhbmU6ZnVuY3Rpb24oYSl7dmFyIGIsYzswPGEubm9ybWFsLng/KGI9YS5ub3JtYWwueCp0aGlzLm1pbi54LGM9YS5ub3JtYWwueCp0aGlzLm1heC54KTooYj1hLm5vcm1hbC54KnRoaXMubWF4LngsYz1hLm5vcm1hbC54KnRoaXMubWluLngpOzA8YS5ub3JtYWwueT8oYis9YS5ub3JtYWwueSp0aGlzLm1pbi55LGMrPWEubm9ybWFsLnkqdGhpcy5tYXgueSk6KGIrPWEubm9ybWFsLnkqdGhpcy5tYXgueSxjKz1hLm5vcm1hbC55KnRoaXMubWluLnkpOzA8YS5ub3JtYWwuej8oYis9YS5ub3JtYWwueip0aGlzLm1pbi56LGMrPWEubm9ybWFsLnoqdGhpcy5tYXgueik6KGIrPWEubm9ybWFsLnoqdGhpcy5tYXgueixjKz1hLm5vcm1hbC56KnRoaXMubWluLnopO3JldHVybiBiPD1hLmNvbnN0YW50JiZjPj1hLmNvbnN0YW50fSxjbGFtcFBvaW50OmZ1bmN0aW9uKGEsCmIpe3JldHVybihifHxuZXcgcCkuY29weShhKS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9LGRpc3RhbmNlVG9Qb2ludDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gYS5jb3B5KGIpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIoYikubGVuZ3RoKCl9fSgpLGdldEJvdW5kaW5nU3BoZXJlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe2I9Ynx8bmV3IEdhO3RoaXMuZ2V0Q2VudGVyKGIuY2VudGVyKTtiLnJhZGl1cz0uNSp0aGlzLmdldFNpemUoYSkubGVuZ3RoKCk7cmV0dXJuIGJ9fSgpLGludGVyc2VjdDpmdW5jdGlvbihhKXt0aGlzLm1pbi5tYXgoYS5taW4pO3RoaXMubWF4Lm1pbihhLm1heCk7dGhpcy5pc0VtcHR5KCkmJnRoaXMubWFrZUVtcHR5KCk7cmV0dXJuIHRoaXN9LHVuaW9uOmZ1bmN0aW9uKGEpe3RoaXMubWluLm1pbihhLm1pbik7dGhpcy5tYXgubWF4KGEubWF4KTtyZXR1cm4gdGhpc30sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKCl7dmFyIGE9CltuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcF07cmV0dXJuIGZ1bmN0aW9uKGIpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiB0aGlzO2FbMF0uc2V0KHRoaXMubWluLngsdGhpcy5taW4ueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQoYik7YVsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NChiKTthWzJdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KGIpO2FbM10uc2V0KHRoaXMubWluLngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQoYik7YVs0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NChiKTthWzVdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KGIpO2FbNl0uc2V0KHRoaXMubWF4LngsdGhpcy5tYXgueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQoYik7CmFbN10uc2V0KHRoaXMubWF4LngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQoYik7dGhpcy5zZXRGcm9tUG9pbnRzKGEpO3JldHVybiB0aGlzfX0oKSx0cmFuc2xhdGU6ZnVuY3Rpb24oYSl7dGhpcy5taW4uYWRkKGEpO3RoaXMubWF4LmFkZChhKTtyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLm1pbi5lcXVhbHModGhpcy5taW4pJiZhLm1heC5lcXVhbHModGhpcy5tYXgpfX0pO09iamVjdC5hc3NpZ24oR2EucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLmNlbnRlci5jb3B5KGEpO3RoaXMucmFkaXVzPWI7cmV0dXJuIHRoaXN9LHNldEZyb21Qb2ludHM6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgVGE7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcy5jZW50ZXI7dm9pZCAwIT09Yz9kLmNvcHkoYyk6YS5zZXRGcm9tUG9pbnRzKGIpLmdldENlbnRlcihkKTtmb3IodmFyIGU9MCxmPTAsZz1iLmxlbmd0aDtmPGc7ZisrKWU9TWF0aC5tYXgoZSwKZC5kaXN0YW5jZVRvU3F1YXJlZChiW2ZdKSk7dGhpcy5yYWRpdXM9TWF0aC5zcXJ0KGUpO3JldHVybiB0aGlzfX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLmNlbnRlci5jb3B5KGEuY2VudGVyKTt0aGlzLnJhZGl1cz1hLnJhZGl1cztyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gMD49dGhpcy5yYWRpdXN9LGNvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c30sZGlzdGFuY2VUb1BvaW50OmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucmFkaXVzK2EucmFkaXVzO3JldHVybiBhLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmNlbnRlcik8PQpiKmJ9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX0saW50ZXJzZWN0c1BsYW5lOmZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLmFicyh0aGlzLmNlbnRlci5kb3QoYS5ub3JtYWwpLWEuY29uc3RhbnQpPD10aGlzLnJhZGl1c30sY2xhbXBQb2ludDpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKGEpLGQ9Ynx8bmV3IHA7ZC5jb3B5KGEpO2M+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihkLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZC5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSk7cmV0dXJuIGR9LGdldEJvdW5kaW5nQm94OmZ1bmN0aW9uKGEpe2E9YXx8bmV3IFRhO2Euc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKTthLmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKTtyZXR1cm4gYX0sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKGEpe3RoaXMuY2VudGVyLmFwcGx5TWF0cml4NChhKTsKdGhpcy5yYWRpdXMqPWEuZ2V0TWF4U2NhbGVPbkF4aXMoKTtyZXR1cm4gdGhpc30sdHJhbnNsYXRlOmZ1bmN0aW9uKGEpe3RoaXMuY2VudGVyLmFkZChhKTtyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpJiZhLnJhZGl1cz09PXRoaXMucmFkaXVzfX0pO09iamVjdC5hc3NpZ24oS2EucHJvdG90eXBlLHtpc01hdHJpeDM6ITAsc2V0OmZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxrKXt2YXIgbT10aGlzLmVsZW1lbnRzO21bMF09YTttWzFdPWQ7bVsyXT1nO21bM109YjttWzRdPWU7bVs1XT1oO21bNl09YzttWzddPWY7bVs4XT1rO3JldHVybiB0aGlzfSxpZGVudGl0eTpmdW5jdGlvbigpe3RoaXMuc2V0KDEsMCwwLDAsMSwwLDAsMCwxKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX0sY29weTpmdW5jdGlvbihhKXt2YXIgYj0KdGhpcy5lbGVtZW50czthPWEuZWxlbWVudHM7YlswXT1hWzBdO2JbMV09YVsxXTtiWzJdPWFbMl07YlszXT1hWzNdO2JbNF09YVs0XTtiWzVdPWFbNV07Yls2XT1hWzZdO2JbN109YVs3XTtiWzhdPWFbOF07cmV0dXJuIHRoaXN9LHNldEZyb21NYXRyaXg0OmZ1bmN0aW9uKGEpe2E9YS5lbGVtZW50czt0aGlzLnNldChhWzBdLGFbNF0sYVs4XSxhWzFdLGFbNV0sYVs5XSxhWzJdLGFbNl0sYVsxMF0pO3JldHVybiB0aGlzfSxhcHBseVRvQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe2Zvcih2YXIgYz0wLGQ9Yi5jb3VudDtjPGQ7YysrKWEueD1iLmdldFgoYyksYS55PWIuZ2V0WShjKSxhLno9Yi5nZXRaKGMpLGEuYXBwbHlNYXRyaXgzKHRoaXMpLGIuc2V0WFlaKGMsYS54LGEueSxhLnopO3JldHVybiBifX0oKSxtdWx0aXBseTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsYSl9LHByZW11bHRpcGx5OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXMoYSwKdGhpcyl9LG11bHRpcGx5TWF0cmljZXM6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmVsZW1lbnRzLGQ9Yi5lbGVtZW50cyxlPXRoaXMuZWxlbWVudHMsZj1jWzBdLGc9Y1szXSxoPWNbNl0saz1jWzFdLG09Y1s0XSxsPWNbN10scT1jWzJdLG49Y1s1XSxjPWNbOF0scj1kWzBdLHA9ZFszXSx0PWRbNl0seT1kWzFdLHg9ZFs0XSx2PWRbN10sRz1kWzJdLHc9ZFs1XSxkPWRbOF07ZVswXT1mKnIrZyp5K2gqRztlWzNdPWYqcCtnKngraCp3O2VbNl09Zip0K2cqditoKmQ7ZVsxXT1rKnIrbSp5K2wqRztlWzRdPWsqcCttKngrbCp3O2VbN109ayp0K20qditsKmQ7ZVsyXT1xKnIrbip5K2MqRztlWzVdPXEqcCtuKngrYyp3O2VbOF09cSp0K24qditjKmQ7cmV0dXJuIHRoaXN9LG11bHRpcGx5U2NhbGFyOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWxlbWVudHM7YlswXSo9YTtiWzNdKj1hO2JbNl0qPWE7YlsxXSo9YTtiWzRdKj1hO2JbN10qPWE7YlsyXSo9YTtiWzVdKj1hO2JbOF0qPWE7cmV0dXJuIHRoaXN9LApkZXRlcm1pbmFudDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZWxlbWVudHMsYj1hWzBdLGM9YVsxXSxkPWFbMl0sZT1hWzNdLGY9YVs0XSxnPWFbNV0saD1hWzZdLGs9YVs3XSxhPWFbOF07cmV0dXJuIGIqZiphLWIqZyprLWMqZSphK2MqZypoK2QqZSprLWQqZipofSxnZXRJbnZlcnNlOmZ1bmN0aW9uKGEsYil7YSYmYS5pc01hdHJpeDQmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDMuZ2V0SW52ZXJzZSBubyBsb25nZXIgdGFrZXMgYSBNYXRyaXg0IGFyZ3VtZW50LiIpO3ZhciBjPWEuZWxlbWVudHMsZD10aGlzLmVsZW1lbnRzLGU9Y1swXSxmPWNbMV0sZz1jWzJdLGg9Y1szXSxrPWNbNF0sbT1jWzVdLGw9Y1s2XSxxPWNbN10sYz1jWzhdLG49YyprLW0qcSxyPW0qbC1jKmgscD1xKmgtaypsLHQ9ZSpuK2YqcitnKnA7aWYoMD09PXQpe2lmKCEwPT09Yil0aHJvdyBFcnJvcigiVEhSRUUuTWF0cml4My5nZXRJbnZlcnNlKCk6IGNhbid0IGludmVydCBtYXRyaXgsIGRldGVybWluYW50IGlzIDAiKTsKY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzLmdldEludmVyc2UoKTogY2FuJ3QgaW52ZXJ0IG1hdHJpeCwgZGV0ZXJtaW5hbnQgaXMgMCIpO3JldHVybiB0aGlzLmlkZW50aXR5KCl9dD0xL3Q7ZFswXT1uKnQ7ZFsxXT0oZypxLWMqZikqdDtkWzJdPShtKmYtZyprKSp0O2RbM109cip0O2RbNF09KGMqZS1nKmwpKnQ7ZFs1XT0oZypoLW0qZSkqdDtkWzZdPXAqdDtkWzddPShmKmwtcSplKSp0O2RbOF09KGsqZS1mKmgpKnQ7cmV0dXJuIHRoaXN9LHRyYW5zcG9zZTpmdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5lbGVtZW50czthPWJbMV07YlsxXT1iWzNdO2JbM109YTthPWJbMl07YlsyXT1iWzZdO2JbNl09YTthPWJbNV07Yls1XT1iWzddO2JbN109YTtyZXR1cm4gdGhpc30sZ2V0Tm9ybWFsTWF0cml4OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KGEpLmdldEludmVyc2UodGhpcykudHJhbnNwb3NlKCl9LHRyYW5zcG9zZUludG9BcnJheTpmdW5jdGlvbihhKXt2YXIgYj0KdGhpcy5lbGVtZW50czthWzBdPWJbMF07YVsxXT1iWzNdO2FbMl09Yls2XTthWzNdPWJbMV07YVs0XT1iWzRdO2FbNV09Yls3XTthWzZdPWJbMl07YVs3XT1iWzVdO2FbOF09Yls4XTtyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWxlbWVudHM7YT1hLmVsZW1lbnRzO2Zvcih2YXIgYz0wOzk+YztjKyspaWYoYltjXSE9PWFbY10pcmV0dXJuITE7cmV0dXJuITB9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO2Zvcih2YXIgYz0wOzk+YztjKyspdGhpcy5lbGVtZW50c1tjXT1hW2MrYl07cmV0dXJuIHRoaXN9LHRvQXJyYXk6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1hJiYoYT1bXSk7dm9pZCAwPT09YiYmKGI9MCk7dmFyIGM9dGhpcy5lbGVtZW50czthW2JdPWNbMF07YVtiKzFdPWNbMV07YVtiKzJdPWNbMl07YVtiKzNdPWNbM107YVtiKzRdPWNbNF07YVtiKzVdPWNbNV07YVtiKzZdPWNbNl07YVtiKzddPWNbN107YVtiKzhdPQpjWzhdO3JldHVybiBhfX0pO09iamVjdC5hc3NpZ24od2EucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLm5vcm1hbC5jb3B5KGEpO3RoaXMuY29uc3RhbnQ9YjtyZXR1cm4gdGhpc30sc2V0Q29tcG9uZW50czpmdW5jdGlvbihhLGIsYyxkKXt0aGlzLm5vcm1hbC5zZXQoYSxiLGMpO3RoaXMuY29uc3RhbnQ9ZDtyZXR1cm4gdGhpc30sc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQ6ZnVuY3Rpb24oYSxiKXt0aGlzLm5vcm1hbC5jb3B5KGEpO3RoaXMuY29uc3RhbnQ9LWIuZG90KHRoaXMubm9ybWFsKTtyZXR1cm4gdGhpc30sc2V0RnJvbUNvcGxhbmFyUG9pbnRzOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYyxkLGUpe2Q9YS5zdWJWZWN0b3JzKGUsZCkuY3Jvc3MoYi5zdWJWZWN0b3JzKGMsZCkpLm5vcm1hbGl6ZSgpO3RoaXMuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQoZCxjKTtyZXR1cm4gdGhpc319KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LApjb3B5OmZ1bmN0aW9uKGEpe3RoaXMubm9ybWFsLmNvcHkoYS5ub3JtYWwpO3RoaXMuY29uc3RhbnQ9YS5jb25zdGFudDtyZXR1cm4gdGhpc30sbm9ybWFsaXplOmZ1bmN0aW9uKCl7dmFyIGE9MS90aGlzLm5vcm1hbC5sZW5ndGgoKTt0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcihhKTt0aGlzLmNvbnN0YW50Kj1hO3JldHVybiB0aGlzfSxuZWdhdGU6ZnVuY3Rpb24oKXt0aGlzLmNvbnN0YW50Kj0tMTt0aGlzLm5vcm1hbC5uZWdhdGUoKTtyZXR1cm4gdGhpc30sZGlzdGFuY2VUb1BvaW50OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QoYSkrdGhpcy5jb25zdGFudH0sZGlzdGFuY2VUb1NwaGVyZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQoYS5jZW50ZXIpLWEucmFkaXVzfSxwcm9qZWN0UG9pbnQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5vcnRob1BvaW50KGEsYikuc3ViKGEpLm5lZ2F0ZSgpfSxvcnRob1BvaW50OmZ1bmN0aW9uKGEsCmIpe3ZhciBjPXRoaXMuZGlzdGFuY2VUb1BvaW50KGEpO3JldHVybihifHxuZXcgcCkuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoYyl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYixjKXt2YXIgZD1jfHxuZXcgcCxlPWIuZGVsdGEoYSksZj10aGlzLm5vcm1hbC5kb3QoZSk7aWYoMD09PWYpe2lmKDA9PT10aGlzLmRpc3RhbmNlVG9Qb2ludChiLnN0YXJ0KSlyZXR1cm4gZC5jb3B5KGIuc3RhcnQpfWVsc2UgcmV0dXJuIGY9LShiLnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvZiwwPmZ8fDE8Zj92b2lkIDA6ZC5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKGYpLmFkZChiLnN0YXJ0KX19KCksaW50ZXJzZWN0c0xpbmU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kaXN0YW5jZVRvUG9pbnQoYS5zdGFydCk7YT10aGlzLmRpc3RhbmNlVG9Qb2ludChhLmVuZCk7cmV0dXJuIDA+YiYmMDxhfHwwPmEmJjA8Yn0sCmludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW50ZXJzZWN0c1BsYW5lKHRoaXMpfSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmludGVyc2VjdHNQbGFuZSh0aGlzKX0sY29wbGFuYXJQb2ludDpmdW5jdGlvbihhKXtyZXR1cm4oYXx8bmV3IHApLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX0sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgS2E7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7dmFyIGU9dGhpcy5jb3BsYW5hclBvaW50KGEpLmFwcGx5TWF0cml4NChjKSxmPWR8fGIuZ2V0Tm9ybWFsTWF0cml4KGMpLGY9dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKGYpLm5vcm1hbGl6ZSgpO3RoaXMuY29uc3RhbnQ9LWUuZG90KGYpO3JldHVybiB0aGlzfX0oKSx0cmFuc2xhdGU6ZnVuY3Rpb24oYSl7dGhpcy5jb25zdGFudC09YS5kb3QodGhpcy5ub3JtYWwpO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9ybWFsLmVxdWFscyh0aGlzLm5vcm1hbCkmJgphLmNvbnN0YW50PT09dGhpcy5jb25zdGFudH19KTtPYmplY3QuYXNzaWduKGpkLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz10aGlzLnBsYW5lcztnWzBdLmNvcHkoYSk7Z1sxXS5jb3B5KGIpO2dbMl0uY29weShjKTtnWzNdLmNvcHkoZCk7Z1s0XS5jb3B5KGUpO2dbNV0uY29weShmKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMucGxhbmVzLGM9MDs2PmM7YysrKWJbY10uY29weShhLnBsYW5lc1tjXSk7cmV0dXJuIHRoaXN9LHNldEZyb21NYXRyaXg6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wbGFuZXMsYz1hLmVsZW1lbnRzO2E9Y1swXTt2YXIgZD1jWzFdLGU9Y1syXSxmPWNbM10sZz1jWzRdLGg9Y1s1XSxrPWNbNl0sbT1jWzddLGw9Y1s4XSxxPWNbOV0sbj1jWzEwXSxyPWNbMTFdLHA9Y1sxMl0sdD1jWzEzXSwKeT1jWzE0XSxjPWNbMTVdO2JbMF0uc2V0Q29tcG9uZW50cyhmLWEsbS1nLHItbCxjLXApLm5vcm1hbGl6ZSgpO2JbMV0uc2V0Q29tcG9uZW50cyhmK2EsbStnLHIrbCxjK3ApLm5vcm1hbGl6ZSgpO2JbMl0uc2V0Q29tcG9uZW50cyhmK2QsbStoLHIrcSxjK3QpLm5vcm1hbGl6ZSgpO2JbM10uc2V0Q29tcG9uZW50cyhmLWQsbS1oLHItcSxjLXQpLm5vcm1hbGl6ZSgpO2JbNF0uc2V0Q29tcG9uZW50cyhmLWUsbS1rLHItbixjLXkpLm5vcm1hbGl6ZSgpO2JbNV0uc2V0Q29tcG9uZW50cyhmK2UsbStrLHIrbixjK3kpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxpbnRlcnNlY3RzT2JqZWN0OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEdhO3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLmdlb21ldHJ5O251bGw9PT1jLmJvdW5kaW5nU3BoZXJlJiZjLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO2EuY29weShjLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQoYi5tYXRyaXhXb3JsZCk7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShhKX19KCksCmludGVyc2VjdHNTcHJpdGU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgR2E7cmV0dXJuIGZ1bmN0aW9uKGIpe2EuY2VudGVyLnNldCgwLDAsMCk7YS5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzY7YS5hcHBseU1hdHJpeDQoYi5tYXRyaXhXb3JsZCk7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShhKX19KCksaW50ZXJzZWN0c1NwaGVyZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnBsYW5lcyxjPWEuY2VudGVyO2E9LWEucmFkaXVzO2Zvcih2YXIgZD0wOzY+ZDtkKyspaWYoYltkXS5kaXN0YW5jZVRvUG9pbnQoYyk8YSlyZXR1cm4hMTtyZXR1cm4hMH0saW50ZXJzZWN0c0JveDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGMpe2Zvcih2YXIgZD10aGlzLnBsYW5lcyxlPTA7Nj5lO2UrKyl7dmFyIGY9ZFtlXTthLng9MDxmLm5vcm1hbC54P2MubWluLng6Yy5tYXgueDtiLng9MDxmLm5vcm1hbC54P2MubWF4Lng6Yy5taW4ueDthLnk9MDxmLm5vcm1hbC55PwpjLm1pbi55OmMubWF4Lnk7Yi55PTA8Zi5ub3JtYWwueT9jLm1heC55OmMubWluLnk7YS56PTA8Zi5ub3JtYWwuej9jLm1pbi56OmMubWF4Lno7Yi56PTA8Zi5ub3JtYWwuej9jLm1heC56OmMubWluLno7dmFyIGc9Zi5kaXN0YW5jZVRvUG9pbnQoYSksZj1mLmRpc3RhbmNlVG9Qb2ludChiKTtpZigwPmcmJjA+ZilyZXR1cm4hMX1yZXR1cm4hMH19KCksY29udGFpbnNQb2ludDpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5wbGFuZXMsYz0wOzY+YztjKyspaWYoMD5iW2NdLmRpc3RhbmNlVG9Qb2ludChhKSlyZXR1cm4hMTtyZXR1cm4hMH19KTtPYmplY3QuYXNzaWduKGhiLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGEsYil7dGhpcy5vcmlnaW4uY29weShhKTt0aGlzLmRpcmVjdGlvbi5jb3B5KGIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLm9yaWdpbi5jb3B5KGEub3JpZ2luKTsKdGhpcy5kaXJlY3Rpb24uY29weShhLmRpcmVjdGlvbik7cmV0dXJuIHRoaXN9LGF0OmZ1bmN0aW9uKGEsYil7cmV0dXJuKGJ8fG5ldyBwKS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihhKS5hZGQodGhpcy5vcmlnaW4pfSxsb29rQXQ6ZnVuY3Rpb24oYSl7dGhpcy5kaXJlY3Rpb24uY29weShhKS5zdWIodGhpcy5vcmlnaW4pLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxyZWNhc3Q6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYil7dGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KGIsYSkpO3JldHVybiB0aGlzfX0oKSxjbG9zZXN0UG9pbnRUb1BvaW50OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8bmV3IHA7Yy5zdWJWZWN0b3JzKGEsdGhpcy5vcmlnaW4pO3ZhciBkPWMuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gMD5kP2MuY29weSh0aGlzLm9yaWdpbik6Yy5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihkKS5hZGQodGhpcy5vcmlnaW4pfSwKZGlzdGFuY2VUb1BvaW50OmZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVNxVG9Qb2ludChhKSl9LGRpc3RhbmNlU3FUb1BvaW50OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEuc3ViVmVjdG9ycyhiLHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKDA+YylyZXR1cm4gdGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQoYik7YS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihjKS5hZGQodGhpcy5vcmlnaW4pO3JldHVybiBhLmRpc3RhbmNlVG9TcXVhcmVkKGIpfX0oKSxkaXN0YW5jZVNxVG9TZWdtZW50OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcCxjPW5ldyBwO3JldHVybiBmdW5jdGlvbihkLGUsZixnKXthLmNvcHkoZCkuYWRkKGUpLm11bHRpcGx5U2NhbGFyKC41KTtiLmNvcHkoZSkuc3ViKGQpLm5vcm1hbGl6ZSgpO2MuY29weSh0aGlzLm9yaWdpbikuc3ViKGEpOwp2YXIgaD0uNSpkLmRpc3RhbmNlVG8oZSksaz0tdGhpcy5kaXJlY3Rpb24uZG90KGIpLG09Yy5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LWMuZG90KGIpLHE9Yy5sZW5ndGhTcSgpLG49TWF0aC5hYnMoMS1rKmspLHI7MDxuPyhkPWsqbC1tLGU9ayptLWwscj1oKm4sMDw9ZD9lPj0tcj9lPD1yPyhoPTEvbixkKj1oLGUqPWgsaz1kKihkK2sqZSsyKm0pK2UqKGsqZCtlKzIqbCkrcSk6KGU9aCxkPU1hdGgubWF4KDAsLShrKmUrbSkpLGs9LWQqZCtlKihlKzIqbCkrcSk6KGU9LWgsZD1NYXRoLm1heCgwLC0oayplK20pKSxrPS1kKmQrZSooZSsyKmwpK3EpOmU8PS1yPyhkPU1hdGgubWF4KDAsLSgtaypoK20pKSxlPTA8ZD8taDpNYXRoLm1pbihNYXRoLm1heCgtaCwtbCksaCksaz0tZCpkK2UqKGUrMipsKStxKTplPD1yPyhkPTAsZT1NYXRoLm1pbihNYXRoLm1heCgtaCwtbCksaCksaz1lKihlKzIqbCkrcSk6KGQ9TWF0aC5tYXgoMCwtKGsqaCttKSksZT0wPGQ/aDpNYXRoLm1pbihNYXRoLm1heCgtaCwKLWwpLGgpLGs9LWQqZCtlKihlKzIqbCkrcSkpOihlPTA8az8taDpoLGQ9TWF0aC5tYXgoMCwtKGsqZSttKSksaz0tZCpkK2UqKGUrMipsKStxKTtmJiZmLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGQpLmFkZCh0aGlzLm9yaWdpbik7ZyYmZy5jb3B5KGIpLm11bHRpcGx5U2NhbGFyKGUpLmFkZChhKTtyZXR1cm4ga319KCksaW50ZXJzZWN0U3BoZXJlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7YS5zdWJWZWN0b3JzKGIuY2VudGVyLHRoaXMub3JpZ2luKTt2YXIgZD1hLmRvdCh0aGlzLmRpcmVjdGlvbiksZT1hLmRvdChhKS1kKmQsZj1iLnJhZGl1cypiLnJhZGl1cztpZihlPmYpcmV0dXJuIG51bGw7Zj1NYXRoLnNxcnQoZi1lKTtlPWQtZjtkKz1mO3JldHVybiAwPmUmJjA+ZD9udWxsOjA+ZT90aGlzLmF0KGQsYyk6dGhpcy5hdChlLGMpfX0oKSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludChhLmNlbnRlcik8PQphLnJhZGl1c30sZGlzdGFuY2VUb1BsYW5lOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbik7aWYoMD09PWIpcmV0dXJuIDA9PT1hLmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik/MDpudWxsO2E9LSh0aGlzLm9yaWdpbi5kb3QoYS5ub3JtYWwpK2EuY29uc3RhbnQpL2I7cmV0dXJuIDA8PWE/YTpudWxsfSxpbnRlcnNlY3RQbGFuZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZGlzdGFuY2VUb1BsYW5lKGEpO3JldHVybiBudWxsPT09Yz9udWxsOnRoaXMuYXQoYyxiKX0saW50ZXJzZWN0c1BsYW5lOmZ1bmN0aW9uKGEpe3ZhciBiPWEuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTtyZXR1cm4gMD09PWJ8fDA+YS5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKSpiPyEwOiExfSxpbnRlcnNlY3RCb3g6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnO2Q9MS90aGlzLmRpcmVjdGlvbi54O2Y9MS90aGlzLmRpcmVjdGlvbi55O2c9MS90aGlzLmRpcmVjdGlvbi56Owp2YXIgaD10aGlzLm9yaWdpbjswPD1kPyhjPShhLm1pbi54LWgueCkqZCxkKj1hLm1heC54LWgueCk6KGM9KGEubWF4LngtaC54KSpkLGQqPWEubWluLngtaC54KTswPD1mPyhlPShhLm1pbi55LWgueSkqZixmKj1hLm1heC55LWgueSk6KGU9KGEubWF4LnktaC55KSpmLGYqPWEubWluLnktaC55KTtpZihjPmZ8fGU+ZClyZXR1cm4gbnVsbDtpZihlPmN8fGMhPT1jKWM9ZTtpZihmPGR8fGQhPT1kKWQ9ZjswPD1nPyhlPShhLm1pbi56LWgueikqZyxnKj1hLm1heC56LWgueik6KGU9KGEubWF4LnotaC56KSpnLGcqPWEubWluLnotaC56KTtpZihjPmd8fGU+ZClyZXR1cm4gbnVsbDtpZihlPmN8fGMhPT1jKWM9ZTtpZihnPGR8fGQhPT1kKWQ9ZztyZXR1cm4gMD5kP251bGw6dGhpcy5hdCgwPD1jP2M6ZCxiKX0saW50ZXJzZWN0c0JveDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gbnVsbCE9PXRoaXMuaW50ZXJzZWN0Qm94KGIsYSl9fSgpLGludGVyc2VjdFRyaWFuZ2xlOmZ1bmN0aW9uKCl7dmFyIGE9Cm5ldyBwLGI9bmV3IHAsYz1uZXcgcCxkPW5ldyBwO3JldHVybiBmdW5jdGlvbihlLGYsZyxoLGspe2Iuc3ViVmVjdG9ycyhmLGUpO2Muc3ViVmVjdG9ycyhnLGUpO2QuY3Jvc3NWZWN0b3JzKGIsYyk7Zj10aGlzLmRpcmVjdGlvbi5kb3QoZCk7aWYoMDxmKXtpZihoKXJldHVybiBudWxsO2g9MX1lbHNlIGlmKDA+ZiloPS0xLGY9LWY7ZWxzZSByZXR1cm4gbnVsbDthLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sZSk7ZT1oKnRoaXMuZGlyZWN0aW9uLmRvdChjLmNyb3NzVmVjdG9ycyhhLGMpKTtpZigwPmUpcmV0dXJuIG51bGw7Zz1oKnRoaXMuZGlyZWN0aW9uLmRvdChiLmNyb3NzKGEpKTtpZigwPmd8fGUrZz5mKXJldHVybiBudWxsO2U9LWgqYS5kb3QoZCk7cmV0dXJuIDA+ZT9udWxsOnRoaXMuYXQoZS9mLGspfX0oKSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24oYSl7dGhpcy5kaXJlY3Rpb24uYWRkKHRoaXMub3JpZ2luKS5hcHBseU1hdHJpeDQoYSk7dGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KGEpOwp0aGlzLmRpcmVjdGlvbi5zdWIodGhpcy5vcmlnaW4pO3RoaXMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEub3JpZ2luLmVxdWFscyh0aGlzLm9yaWdpbikmJmEuZGlyZWN0aW9uLmVxdWFscyh0aGlzLmRpcmVjdGlvbil9fSk7YmIuUm90YXRpb25PcmRlcnM9IlhZWiBZWlggWlhZIFhaWSBZWFogWllYIi5zcGxpdCgiICIpO2JiLkRlZmF1bHRPcmRlcj0iWFlaIjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhiYi5wcm90b3R5cGUse3g6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feD1hO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpfX0seTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihhKXt0aGlzLl95PWE7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9fSx6OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fen0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3o9CmE7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9fSxvcmRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yZGVyfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5fb3JkZXI9YTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKX19fSk7T2JqZWN0LmFzc2lnbihiYi5wcm90b3R5cGUse2lzRXVsZXI6ITAsc2V0OmZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuX3g9YTt0aGlzLl95PWI7dGhpcy5fej1jO3RoaXMuX29yZGVyPWR8fHRoaXMuX29yZGVyO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5feD1hLl94O3RoaXMuX3k9YS5feTt0aGlzLl96PWEuX3o7dGhpcy5fb3JkZXI9YS5fb3JkZXI7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7cmV0dXJuIHRoaXN9LHNldEZyb21Sb3RhdGlvbk1hdHJpeDpmdW5jdGlvbihhLApiLGMpe3ZhciBkPVkuY2xhbXAsZT1hLmVsZW1lbnRzO2E9ZVswXTt2YXIgZj1lWzRdLGc9ZVs4XSxoPWVbMV0saz1lWzVdLG09ZVs5XSxsPWVbMl0scT1lWzZdLGU9ZVsxMF07Yj1ifHx0aGlzLl9vcmRlcjsiWFlaIj09PWI/KHRoaXMuX3k9TWF0aC5hc2luKGQoZywtMSwxKSksLjk5OTk5Pk1hdGguYWJzKGcpPyh0aGlzLl94PU1hdGguYXRhbjIoLW0sZSksdGhpcy5fej1NYXRoLmF0YW4yKC1mLGEpKToodGhpcy5feD1NYXRoLmF0YW4yKHEsayksdGhpcy5fej0wKSk6IllYWiI9PT1iPyh0aGlzLl94PU1hdGguYXNpbigtZChtLC0xLDEpKSwuOTk5OTk+TWF0aC5hYnMobSk/KHRoaXMuX3k9TWF0aC5hdGFuMihnLGUpLHRoaXMuX3o9TWF0aC5hdGFuMihoLGspKToodGhpcy5feT1NYXRoLmF0YW4yKC1sLGEpLHRoaXMuX3o9MCkpOiJaWFkiPT09Yj8odGhpcy5feD1NYXRoLmFzaW4oZChxLC0xLDEpKSwuOTk5OTk+TWF0aC5hYnMocSk/KHRoaXMuX3k9TWF0aC5hdGFuMigtbCxlKSx0aGlzLl96PQpNYXRoLmF0YW4yKC1mLGspKToodGhpcy5feT0wLHRoaXMuX3o9TWF0aC5hdGFuMihoLGEpKSk6IlpZWCI9PT1iPyh0aGlzLl95PU1hdGguYXNpbigtZChsLC0xLDEpKSwuOTk5OTk+TWF0aC5hYnMobCk/KHRoaXMuX3g9TWF0aC5hdGFuMihxLGUpLHRoaXMuX3o9TWF0aC5hdGFuMihoLGEpKToodGhpcy5feD0wLHRoaXMuX3o9TWF0aC5hdGFuMigtZixrKSkpOiJZWlgiPT09Yj8odGhpcy5fej1NYXRoLmFzaW4oZChoLC0xLDEpKSwuOTk5OTk+TWF0aC5hYnMoaCk/KHRoaXMuX3g9TWF0aC5hdGFuMigtbSxrKSx0aGlzLl95PU1hdGguYXRhbjIoLWwsYSkpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKGcsZSkpKToiWFpZIj09PWI/KHRoaXMuX3o9TWF0aC5hc2luKC1kKGYsLTEsMSkpLC45OTk5OT5NYXRoLmFicyhmKT8odGhpcy5feD1NYXRoLmF0YW4yKHEsayksdGhpcy5feT1NYXRoLmF0YW4yKGcsYSkpOih0aGlzLl94PU1hdGguYXRhbjIoLW0sZSksdGhpcy5feT0wKSk6Y29uc29sZS53YXJuKCJUSFJFRS5FdWxlcjogLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGdpdmVuIHVuc3VwcG9ydGVkIG9yZGVyOiAiKwpiKTt0aGlzLl9vcmRlcj1iO2lmKCExIT09Yyl0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sc2V0RnJvbVF1YXRlcm5pb246ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYixjLGQpe2EubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oYik7cmV0dXJuIHRoaXMuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGEsYyxkKX19KCksc2V0RnJvbVZlY3RvcjM6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5zZXQoYS54LGEueSxhLnosYnx8dGhpcy5fb3JkZXIpfSxyZW9yZGVyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHFhO3JldHVybiBmdW5jdGlvbihiKXthLnNldEZyb21FdWxlcih0aGlzKTtyZXR1cm4gdGhpcy5zZXRGcm9tUXVhdGVybmlvbihhLGIpfX0oKSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX3g9PT10aGlzLl94JiZhLl95PT09dGhpcy5feSYmYS5fej09PXRoaXMuX3omJmEuX29yZGVyPT09dGhpcy5fb3JkZXJ9LGZyb21BcnJheTpmdW5jdGlvbihhKXt0aGlzLl94PQphWzBdO3RoaXMuX3k9YVsxXTt0aGlzLl96PWFbMl07dm9pZCAwIT09YVszXSYmKHRoaXMuX29yZGVyPWFbM10pO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YSYmKGE9W10pO3ZvaWQgMD09PWImJihiPTApO2FbYl09dGhpcy5feDthW2IrMV09dGhpcy5feTthW2IrMl09dGhpcy5fejthW2IrM109dGhpcy5fb3JkZXI7cmV0dXJuIGF9LHRvVmVjdG9yMzpmdW5jdGlvbihhKXtyZXR1cm4gYT9hLnNldCh0aGlzLl94LHRoaXMuX3ksdGhpcy5feik6bmV3IHAodGhpcy5feCx0aGlzLl95LHRoaXMuX3opfSxvbkNoYW5nZTpmdW5jdGlvbihhKXt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2s9YTtyZXR1cm4gdGhpc30sb25DaGFuZ2VDYWxsYmFjazpmdW5jdGlvbigpe319KTtPYmplY3QuYXNzaWduKFJkLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGEpe3RoaXMubWFzaz0xPDxhfDB9LGVuYWJsZTpmdW5jdGlvbihhKXt0aGlzLm1hc2s9CnRoaXMubWFza3wxPDxhfDB9LHRvZ2dsZTpmdW5jdGlvbihhKXt0aGlzLm1hc2tePTE8PGF8MH0sZGlzYWJsZTpmdW5jdGlvbihhKXt0aGlzLm1hc2smPX4oMTw8YXwwKX0sdGVzdDpmdW5jdGlvbihhKXtyZXR1cm4gMCE9PSh0aGlzLm1hc2smYS5tYXNrKX19KTt2YXIgTGY9MDtCLkRlZmF1bHRVcD1uZXcgcCgwLDEsMCk7Qi5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZT0hMDtPYmplY3QuYXNzaWduKEIucHJvdG90eXBlLHNhLnByb3RvdHlwZSx7aXNPYmplY3QzRDohMCxhcHBseU1hdHJpeDpmdW5jdGlvbihhKXt0aGlzLm1hdHJpeC5tdWx0aXBseU1hdHJpY2VzKGEsdGhpcy5tYXRyaXgpO3RoaXMubWF0cml4LmRlY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKX0sc2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlOmZ1bmN0aW9uKGEsYil7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoYSxiKX0sc2V0Um90YXRpb25Gcm9tRXVsZXI6ZnVuY3Rpb24oYSl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21FdWxlcihhLAohMCl9LHNldFJvdGF0aW9uRnJvbU1hdHJpeDpmdW5jdGlvbihhKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KGEpfSxzZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKGEpe3RoaXMucXVhdGVybmlvbi5jb3B5KGEpfSxyb3RhdGVPbkF4aXM6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcWE7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7YS5zZXRGcm9tQXhpc0FuZ2xlKGIsYyk7dGhpcy5xdWF0ZXJuaW9uLm11bHRpcGx5KGEpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVYOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAoMSwwLDApO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoYSxiKX19KCkscm90YXRlWTpmdW5jdGlvbigpe3ZhciBhPW5ldyBwKDAsMSwwKTtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKGEsYil9fSgpLHJvdGF0ZVo6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCgwLDAsMSk7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhhLApiKX19KCksdHJhbnNsYXRlT25BeGlzOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7YS5jb3B5KGIpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pO3RoaXMucG9zaXRpb24uYWRkKGEubXVsdGlwbHlTY2FsYXIoYykpO3JldHVybiB0aGlzfX0oKSx0cmFuc2xhdGVYOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAoMSwwLDApO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoYSxiKX19KCksdHJhbnNsYXRlWTpmdW5jdGlvbigpe3ZhciBhPW5ldyBwKDAsMSwwKTtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKGEsYil9fSgpLHRyYW5zbGF0ZVo6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCgwLDAsMSk7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhhLGIpfX0oKSxsb2NhbFRvV29ybGQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpfSwKd29ybGRUb0xvY2FsOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBiLmFwcGx5TWF0cml4NChhLmdldEludmVyc2UodGhpcy5tYXRyaXhXb3JsZCkpfX0oKSxsb29rQXQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYil7dGhpcy5pc0NhbWVyYT9hLmxvb2tBdCh0aGlzLnBvc2l0aW9uLGIsdGhpcy51cCk6YS5sb29rQXQoYix0aGlzLnBvc2l0aW9uLHRoaXMudXApO3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoYSl9fSgpLGFkZDpmdW5jdGlvbihhKXtpZigxPGFyZ3VtZW50cy5sZW5ndGgpe2Zvcih2YXIgYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspdGhpcy5hZGQoYXJndW1lbnRzW2JdKTtyZXR1cm4gdGhpc31pZihhPT09dGhpcylyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3QgY2FuJ3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBvZiBpdHNlbGYuIixhKSx0aGlzOwphJiZhLmlzT2JqZWN0M0Q/KG51bGwhPT1hLnBhcmVudCYmYS5wYXJlbnQucmVtb3ZlKGEpLGEucGFyZW50PXRoaXMsYS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJhZGRlZCJ9KSx0aGlzLmNoaWxkcmVuLnB1c2goYSkpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5PYmplY3QzRC4iLGEpO3JldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oYSl7aWYoMTxhcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW2JdKTtiPXRoaXMuY2hpbGRyZW4uaW5kZXhPZihhKTstMSE9PWImJihhLnBhcmVudD1udWxsLGEuZGlzcGF0Y2hFdmVudCh7dHlwZToicmVtb3ZlZCJ9KSx0aGlzLmNoaWxkcmVuLnNwbGljZShiLDEpKX0sZ2V0T2JqZWN0QnlJZDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJpZCIsYSl9LGdldE9iamVjdEJ5TmFtZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJuYW1lIiwKYSl9LGdldE9iamVjdEJ5UHJvcGVydHk6ZnVuY3Rpb24oYSxiKXtpZih0aGlzW2FdPT09YilyZXR1cm4gdGhpcztmb3IodmFyIGM9MCxkPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2M8ZDtjKyspe3ZhciBlPXRoaXMuY2hpbGRyZW5bY10uZ2V0T2JqZWN0QnlQcm9wZXJ0eShhLGIpO2lmKHZvaWQgMCE9PWUpcmV0dXJuIGV9fSxnZXRXb3JsZFBvc2l0aW9uOmZ1bmN0aW9uKGEpe2E9YXx8bmV3IHA7dGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCk7cmV0dXJuIGEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpfSxnZXRXb3JsZFF1YXRlcm5pb246ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwO3JldHVybiBmdW5jdGlvbihjKXtjPWN8fG5ldyBxYTt0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTt0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShhLGMsYik7cmV0dXJuIGN9fSgpLGdldFdvcmxkUm90YXRpb246ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcWE7cmV0dXJuIGZ1bmN0aW9uKGIpe2I9CmJ8fG5ldyBiYjt0aGlzLmdldFdvcmxkUXVhdGVybmlvbihhKTtyZXR1cm4gYi5zZXRGcm9tUXVhdGVybmlvbihhLHRoaXMucm90YXRpb24ub3JkZXIsITEpfX0oKSxnZXRXb3JsZFNjYWxlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcWE7cmV0dXJuIGZ1bmN0aW9uKGMpe2M9Y3x8bmV3IHA7dGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCk7dGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoYSxiLGMpO3JldHVybiBjfX0oKSxnZXRXb3JsZERpcmVjdGlvbjpmdW5jdGlvbigpe3ZhciBhPW5ldyBxYTtyZXR1cm4gZnVuY3Rpb24oYil7Yj1ifHxuZXcgcDt0aGlzLmdldFdvcmxkUXVhdGVybmlvbihhKTtyZXR1cm4gYi5zZXQoMCwwLDEpLmFwcGx5UXVhdGVybmlvbihhKX19KCkscmF5Y2FzdDpmdW5jdGlvbigpe30sdHJhdmVyc2U6ZnVuY3Rpb24oYSl7YSh0aGlzKTtmb3IodmFyIGI9dGhpcy5jaGlsZHJlbixjPTAsZD1iLmxlbmd0aDtjPGQ7YysrKWJbY10udHJhdmVyc2UoYSl9LAp0cmF2ZXJzZVZpc2libGU6ZnVuY3Rpb24oYSl7aWYoITEhPT10aGlzLnZpc2libGUpe2EodGhpcyk7Zm9yKHZhciBiPXRoaXMuY2hpbGRyZW4sYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrKyliW2NdLnRyYXZlcnNlVmlzaWJsZShhKX19LHRyYXZlcnNlQW5jZXN0b3JzOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucGFyZW50O251bGwhPT1iJiYoYShiKSxiLnRyYXZlcnNlQW5jZXN0b3JzKGEpKX0sdXBkYXRlTWF0cml4OmZ1bmN0aW9uKCl7dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKTt0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9LHVwZGF0ZU1hdHJpeFdvcmxkOmZ1bmN0aW9uKGEpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKTtpZih0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGV8fGEpbnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLAp0aGlzLm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLGE9ITA7Zm9yKHZhciBiPXRoaXMuY2hpbGRyZW4sYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrKyliW2NdLnVwZGF0ZU1hdHJpeFdvcmxkKGEpfSx0b0pTT046ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiLGMpe3ZvaWQgMD09PWJbYy51dWlkXSYmKGJbYy51dWlkXT1jLnRvSlNPTihhKSk7cmV0dXJuIGMudXVpZH1mdW5jdGlvbiBjKGEpe3ZhciBiPVtdLGM7Zm9yKGMgaW4gYSl7dmFyIGQ9YVtjXTtkZWxldGUgZC5tZXRhZGF0YTtiLnB1c2goZCl9cmV0dXJuIGJ9dmFyIGQ9dm9pZCAwPT09YXx8IiI9PT1hLGU9e307ZCYmKGE9e2dlb21ldHJpZXM6e30sbWF0ZXJpYWxzOnt9LHRleHR1cmVzOnt9LGltYWdlczp7fX0sZS5tZXRhZGF0YT17dmVyc2lvbjo0LjUsdHlwZToiT2JqZWN0IixnZW5lcmF0b3I6Ik9iamVjdDNELnRvSlNPTiJ9KTt2YXIgZj17fTtmLnV1aWQ9dGhpcy51dWlkO2YudHlwZT10aGlzLnR5cGU7IiIhPT0KdGhpcy5uYW1lJiYoZi5uYW1lPXRoaXMubmFtZSk7Int9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYoZi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKTshMD09PXRoaXMuY2FzdFNoYWRvdyYmKGYuY2FzdFNoYWRvdz0hMCk7ITA9PT10aGlzLnJlY2VpdmVTaGFkb3cmJihmLnJlY2VpdmVTaGFkb3c9ITApOyExPT09dGhpcy52aXNpYmxlJiYoZi52aXNpYmxlPSExKTtmLm1hdHJpeD10aGlzLm1hdHJpeC50b0FycmF5KCk7dm9pZCAwIT09dGhpcy5nZW9tZXRyeSYmKGYuZ2VvbWV0cnk9YihhLmdlb21ldHJpZXMsdGhpcy5nZW9tZXRyeSkpO2lmKHZvaWQgMCE9PXRoaXMubWF0ZXJpYWwpaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7Zm9yKHZhciBnPVtdLGg9MCxrPXRoaXMubWF0ZXJpYWwubGVuZ3RoO2g8aztoKyspZy5wdXNoKGIoYS5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbFtoXSkpO2YubWF0ZXJpYWw9Z31lbHNlIGYubWF0ZXJpYWw9YihhLm1hdGVyaWFscywKdGhpcy5tYXRlcmlhbCk7aWYoMDx0aGlzLmNoaWxkcmVuLmxlbmd0aClmb3IoZi5jaGlsZHJlbj1bXSxoPTA7aDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtoKyspZi5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5baF0udG9KU09OKGEpLm9iamVjdCk7ZCYmKGQ9YyhhLmdlb21ldHJpZXMpLGc9YyhhLm1hdGVyaWFscyksaD1jKGEudGV4dHVyZXMpLGs9YyhhLmltYWdlcyksMDxkLmxlbmd0aCYmKGUuZ2VvbWV0cmllcz1kKSwwPGcubGVuZ3RoJiYoZS5tYXRlcmlhbHM9ZyksMDxoLmxlbmd0aCYmKGUudGV4dHVyZXM9aCksMDxrLmxlbmd0aCYmKGUuaW1hZ2VzPWspKTtlLm9iamVjdD1mO3JldHVybiBlfSxjbG9uZTpmdW5jdGlvbihhKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyxhKX0sY29weTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPSEwKTt0aGlzLm5hbWU9YS5uYW1lO3RoaXMudXAuY29weShhLnVwKTt0aGlzLnBvc2l0aW9uLmNvcHkoYS5wb3NpdGlvbik7CnRoaXMucXVhdGVybmlvbi5jb3B5KGEucXVhdGVybmlvbik7dGhpcy5zY2FsZS5jb3B5KGEuc2NhbGUpO3RoaXMubWF0cml4LmNvcHkoYS5tYXRyaXgpO3RoaXMubWF0cml4V29ybGQuY29weShhLm1hdHJpeFdvcmxkKTt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9YS5tYXRyaXhBdXRvVXBkYXRlO3RoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT1hLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU7dGhpcy5sYXllcnMubWFzaz1hLmxheWVycy5tYXNrO3RoaXMudmlzaWJsZT1hLnZpc2libGU7dGhpcy5jYXN0U2hhZG93PWEuY2FzdFNoYWRvdzt0aGlzLnJlY2VpdmVTaGFkb3c9YS5yZWNlaXZlU2hhZG93O3RoaXMuZnJ1c3R1bUN1bGxlZD1hLmZydXN0dW1DdWxsZWQ7dGhpcy5yZW5kZXJPcmRlcj1hLnJlbmRlck9yZGVyO3RoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhLnVzZXJEYXRhKSk7aWYoITA9PT1iKWZvcih2YXIgYz0wO2M8YS5jaGlsZHJlbi5sZW5ndGg7YysrKXRoaXMuYWRkKGEuY2hpbGRyZW5bY10uY2xvbmUoKSk7CnJldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oSGIucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLnN0YXJ0LmNvcHkoYSk7dGhpcy5lbmQuY29weShiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5zdGFydC5jb3B5KGEuc3RhcnQpO3RoaXMuZW5kLmNvcHkoYS5lbmQpO3JldHVybiB0aGlzfSxnZXRDZW50ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fG5ldyBwKS5hZGRWZWN0b3JzKHRoaXMuc3RhcnQsdGhpcy5lbmQpLm11bHRpcGx5U2NhbGFyKC41KX0sZGVsdGE6ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fG5ldyBwKS5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpfSxkaXN0YW5jZVNxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5lbmQpfSxkaXN0YW5jZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG8odGhpcy5lbmQpfSwKYXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1ifHxuZXcgcDtyZXR1cm4gdGhpcy5kZWx0YShjKS5tdWx0aXBseVNjYWxhcihhKS5hZGQodGhpcy5zdGFydCl9LGNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXI6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwO3JldHVybiBmdW5jdGlvbihjLGQpe2Euc3ViVmVjdG9ycyhjLHRoaXMuc3RhcnQpO2Iuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KTt2YXIgZT1iLmRvdChiKSxlPWIuZG90KGEpL2U7ZCYmKGU9WS5jbGFtcChlLDAsMSkpO3JldHVybiBlfX0oKSxjbG9zZXN0UG9pbnRUb1BvaW50OmZ1bmN0aW9uKGEsYixjKXthPXRoaXMuY2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlcihhLGIpO2M9Y3x8bmV3IHA7cmV0dXJuIHRoaXMuZGVsdGEoYykubXVsdGlwbHlTY2FsYXIoYSkuYWRkKHRoaXMuc3RhcnQpfSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24oYSl7dGhpcy5zdGFydC5hcHBseU1hdHJpeDQoYSk7dGhpcy5lbmQuYXBwbHlNYXRyaXg0KGEpOwpyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSYmYS5lbmQuZXF1YWxzKHRoaXMuZW5kKX19KTtPYmplY3QuYXNzaWduKFVhLHtub3JtYWw6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYixjLGQsZSl7ZT1lfHxuZXcgcDtlLnN1YlZlY3RvcnMoZCxjKTthLnN1YlZlY3RvcnMoYixjKTtlLmNyb3NzKGEpO2I9ZS5sZW5ndGhTcSgpO3JldHVybiAwPGI/ZS5tdWx0aXBseVNjYWxhcigxL01hdGguc3FydChiKSk6ZS5zZXQoMCwwLDApfX0oKSxiYXJ5Y29vcmRGcm9tUG9pbnQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwLGM9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGQsZSxmLGcsaCl7YS5zdWJWZWN0b3JzKGcsZSk7Yi5zdWJWZWN0b3JzKGYsZSk7Yy5zdWJWZWN0b3JzKGQsZSk7ZD1hLmRvdChhKTtlPWEuZG90KGIpO2Y9YS5kb3QoYyk7dmFyIGs9Yi5kb3QoYik7Zz1iLmRvdChjKTt2YXIgbT0KZCprLWUqZTtoPWh8fG5ldyBwO2lmKDA9PT1tKXJldHVybiBoLnNldCgtMiwtMSwtMSk7bT0xL207az0oaypmLWUqZykqbTtkPShkKmctZSpmKSptO3JldHVybiBoLnNldCgxLWstZCxkLGspfX0oKSxjb250YWluc1BvaW50OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIsYyxkLGUpe2I9VWEuYmFyeWNvb3JkRnJvbVBvaW50KGIsYyxkLGUsYSk7cmV0dXJuIDA8PWIueCYmMDw9Yi55JiYxPj1iLngrYi55fX0oKX0pO09iamVjdC5hc3NpZ24oVWEucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuYS5jb3B5KGEpO3RoaXMuYi5jb3B5KGIpO3RoaXMuYy5jb3B5KGMpO3JldHVybiB0aGlzfSxzZXRGcm9tUG9pbnRzQW5kSW5kaWNlczpmdW5jdGlvbihhLGIsYyxkKXt0aGlzLmEuY29weShhW2JdKTt0aGlzLmIuY29weShhW2NdKTt0aGlzLmMuY29weShhW2RdKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LApjb3B5OmZ1bmN0aW9uKGEpe3RoaXMuYS5jb3B5KGEuYSk7dGhpcy5iLmNvcHkoYS5iKTt0aGlzLmMuY29weShhLmMpO3JldHVybiB0aGlzfSxhcmVhOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oKXthLnN1YlZlY3RvcnModGhpcy5jLHRoaXMuYik7Yi5zdWJWZWN0b3JzKHRoaXMuYSx0aGlzLmIpO3JldHVybi41KmEuY3Jvc3MoYikubGVuZ3RoKCl9fSgpLG1pZHBvaW50OmZ1bmN0aW9uKGEpe3JldHVybihhfHxuZXcgcCkuYWRkVmVjdG9ycyh0aGlzLmEsdGhpcy5iKS5hZGQodGhpcy5jKS5tdWx0aXBseVNjYWxhcigxLzMpfSxub3JtYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIFVhLm5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyxhKX0scGxhbmU6ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fG5ldyB3YSkuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX0sYmFyeWNvb3JkRnJvbVBvaW50OmZ1bmN0aW9uKGEsYil7cmV0dXJuIFVhLmJhcnljb29yZEZyb21Qb2ludChhLAp0aGlzLmEsdGhpcy5iLHRoaXMuYyxiKX0sY29udGFpbnNQb2ludDpmdW5jdGlvbihhKXtyZXR1cm4gVWEuY29udGFpbnNQb2ludChhLHRoaXMuYSx0aGlzLmIsdGhpcy5jKX0sY2xvc2VzdFBvaW50VG9Qb2ludDpmdW5jdGlvbigpe3ZhciBhPW5ldyB3YSxiPVtuZXcgSGIsbmV3IEhiLG5ldyBIYl0sYz1uZXcgcCxkPW5ldyBwO3JldHVybiBmdW5jdGlvbihlLGYpe3ZhciBnPWZ8fG5ldyBwLGg9SW5maW5pdHk7YS5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpO2EucHJvamVjdFBvaW50KGUsYyk7aWYoITA9PT10aGlzLmNvbnRhaW5zUG9pbnQoYykpZy5jb3B5KGMpO2Vsc2V7YlswXS5zZXQodGhpcy5hLHRoaXMuYik7YlsxXS5zZXQodGhpcy5iLHRoaXMuYyk7YlsyXS5zZXQodGhpcy5jLHRoaXMuYSk7Zm9yKHZhciBrPTA7azxiLmxlbmd0aDtrKyspe2Jba10uY2xvc2VzdFBvaW50VG9Qb2ludChjLCEwLGQpO3ZhciBtPWMuZGlzdGFuY2VUb1NxdWFyZWQoZCk7Cm08aCYmKGg9bSxnLmNvcHkoZCkpfX1yZXR1cm4gZ319KCksZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLmEuZXF1YWxzKHRoaXMuYSkmJmEuYi5lcXVhbHModGhpcy5iKSYmYS5jLmVxdWFscyh0aGlzLmMpfX0pO09iamVjdC5hc3NpZ24oVmEucHJvdG90eXBlLHtjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLmE9YS5hO3RoaXMuYj1hLmI7dGhpcy5jPWEuYzt0aGlzLm5vcm1hbC5jb3B5KGEubm9ybWFsKTt0aGlzLmNvbG9yLmNvcHkoYS5jb2xvcik7dGhpcy5tYXRlcmlhbEluZGV4PWEubWF0ZXJpYWxJbmRleDtmb3IodmFyIGI9MCxjPWEudmVydGV4Tm9ybWFscy5sZW5ndGg7YjxjO2IrKyl0aGlzLnZlcnRleE5vcm1hbHNbYl09YS52ZXJ0ZXhOb3JtYWxzW2JdLmNsb25lKCk7Yj0wO2ZvcihjPWEudmVydGV4Q29sb3JzLmxlbmd0aDtiPGM7YisrKXRoaXMudmVydGV4Q29sb3JzW2JdPQphLnZlcnRleENvbG9yc1tiXS5jbG9uZSgpO3JldHVybiB0aGlzfX0pO05hLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTtOYS5wcm90b3R5cGUuY29uc3RydWN0b3I9TmE7TmEucHJvdG90eXBlLmlzTWVzaEJhc2ljTWF0ZXJpYWw9ITA7TmEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5jb2xvci5jb3B5KGEuY29sb3IpO3RoaXMubWFwPWEubWFwO3RoaXMubGlnaHRNYXA9YS5saWdodE1hcDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PWEubGlnaHRNYXBJbnRlbnNpdHk7dGhpcy5hb01hcD1hLmFvTWFwO3RoaXMuYW9NYXBJbnRlbnNpdHk9YS5hb01hcEludGVuc2l0eTt0aGlzLnNwZWN1bGFyTWFwPWEuc3BlY3VsYXJNYXA7dGhpcy5hbHBoYU1hcD1hLmFscGhhTWFwO3RoaXMuZW52TWFwPWEuZW52TWFwO3RoaXMuY29tYmluZT1hLmNvbWJpbmU7dGhpcy5yZWZsZWN0aXZpdHk9YS5yZWZsZWN0aXZpdHk7CnRoaXMucmVmcmFjdGlvblJhdGlvPWEucmVmcmFjdGlvblJhdGlvO3RoaXMud2lyZWZyYW1lPWEud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWEud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMud2lyZWZyYW1lTGluZWNhcD1hLndpcmVmcmFtZUxpbmVjYXA7dGhpcy53aXJlZnJhbWVMaW5lam9pbj1hLndpcmVmcmFtZUxpbmVqb2luO3RoaXMuc2tpbm5pbmc9YS5za2lubmluZzt0aGlzLm1vcnBoVGFyZ2V0cz1hLm1vcnBoVGFyZ2V0cztyZXR1cm4gdGhpc307T2JqZWN0LmRlZmluZVByb3BlcnR5KEwucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbihhKXshMD09PWEmJnRoaXMudmVyc2lvbisrfX0pO09iamVjdC5hc3NpZ24oTC5wcm90b3R5cGUse2lzQnVmZmVyQXR0cmlidXRlOiEwLHNldEFycmF5OmZ1bmN0aW9uKGEpe2lmKEFycmF5LmlzQXJyYXkoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4iKTsKdGhpcy5jb3VudD12b2lkIDAhPT1hP2EubGVuZ3RoL3RoaXMuaXRlbVNpemU6MDt0aGlzLmFycmF5PWF9LHNldER5bmFtaWM6ZnVuY3Rpb24oYSl7dGhpcy5keW5hbWljPWE7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5hcnJheT1uZXcgYS5hcnJheS5jb25zdHJ1Y3RvcihhLmFycmF5KTt0aGlzLml0ZW1TaXplPWEuaXRlbVNpemU7dGhpcy5jb3VudD1hLmNvdW50O3RoaXMubm9ybWFsaXplZD1hLm5vcm1hbGl6ZWQ7dGhpcy5keW5hbWljPWEuZHluYW1pYztyZXR1cm4gdGhpc30sY29weUF0OmZ1bmN0aW9uKGEsYixjKXthKj10aGlzLml0ZW1TaXplO2MqPWIuaXRlbVNpemU7Zm9yKHZhciBkPTAsZT10aGlzLml0ZW1TaXplO2Q8ZTtkKyspdGhpcy5hcnJheVthK2RdPWIuYXJyYXlbYytkXTtyZXR1cm4gdGhpc30sY29weUFycmF5OmZ1bmN0aW9uKGEpe3RoaXMuYXJyYXkuc2V0KGEpO3JldHVybiB0aGlzfSxjb3B5Q29sb3JzQXJyYXk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPQp0aGlzLmFycmF5LGM9MCxkPTAsZT1hLmxlbmd0aDtkPGU7ZCsrKXt2YXIgZj1hW2RdO3ZvaWQgMD09PWYmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5Q29sb3JzQXJyYXkoKTogY29sb3IgaXMgdW5kZWZpbmVkIixkKSxmPW5ldyBIKTtiW2MrK109Zi5yO2JbYysrXT1mLmc7YltjKytdPWYuYn1yZXR1cm4gdGhpc30sY29weUluZGljZXNBcnJheTpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5hcnJheSxjPTAsZD0wLGU9YS5sZW5ndGg7ZDxlO2QrKyl7dmFyIGY9YVtkXTtiW2MrK109Zi5hO2JbYysrXT1mLmI7YltjKytdPWYuY31yZXR1cm4gdGhpc30sY29weVZlY3RvcjJzQXJyYXk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuYXJyYXksYz0wLGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspe3ZhciBmPWFbZF07dm9pZCAwPT09ZiYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Iyc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLApkKSxmPW5ldyBEKTtiW2MrK109Zi54O2JbYysrXT1mLnl9cmV0dXJuIHRoaXN9LGNvcHlWZWN0b3Izc0FycmF5OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLmFycmF5LGM9MCxkPTAsZT1hLmxlbmd0aDtkPGU7ZCsrKXt2YXIgZj1hW2RdO3ZvaWQgMD09PWYmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yM3NBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkIixkKSxmPW5ldyBwKTtiW2MrK109Zi54O2JbYysrXT1mLnk7YltjKytdPWYuen1yZXR1cm4gdGhpc30sY29weVZlY3RvcjRzQXJyYXk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuYXJyYXksYz0wLGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspe3ZhciBmPWFbZF07dm9pZCAwPT09ZiYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3I0c0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGQpLGY9bmV3IGdhKTtiW2MrK109Zi54O2JbYysrXT1mLnk7CmJbYysrXT1mLno7YltjKytdPWYud31yZXR1cm4gdGhpc30sc2V0OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9MCk7dGhpcy5hcnJheS5zZXQoYSxiKTtyZXR1cm4gdGhpc30sZ2V0WDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hcnJheVthKnRoaXMuaXRlbVNpemVdfSxzZXRYOmZ1bmN0aW9uKGEsYil7dGhpcy5hcnJheVthKnRoaXMuaXRlbVNpemVdPWI7cmV0dXJuIHRoaXN9LGdldFk6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYXJyYXlbYSp0aGlzLml0ZW1TaXplKzFdfSxzZXRZOmZ1bmN0aW9uKGEsYil7dGhpcy5hcnJheVthKnRoaXMuaXRlbVNpemUrMV09YjtyZXR1cm4gdGhpc30sZ2V0WjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hcnJheVthKnRoaXMuaXRlbVNpemUrMl19LHNldFo6ZnVuY3Rpb24oYSxiKXt0aGlzLmFycmF5W2EqdGhpcy5pdGVtU2l6ZSsyXT1iO3JldHVybiB0aGlzfSxnZXRXOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFycmF5W2EqdGhpcy5pdGVtU2l6ZSsKM119LHNldFc6ZnVuY3Rpb24oYSxiKXt0aGlzLmFycmF5W2EqdGhpcy5pdGVtU2l6ZSszXT1iO3JldHVybiB0aGlzfSxzZXRYWTpmdW5jdGlvbihhLGIsYyl7YSo9dGhpcy5pdGVtU2l6ZTt0aGlzLmFycmF5W2ErMF09Yjt0aGlzLmFycmF5W2ErMV09YztyZXR1cm4gdGhpc30sc2V0WFlaOmZ1bmN0aW9uKGEsYixjLGQpe2EqPXRoaXMuaXRlbVNpemU7dGhpcy5hcnJheVthKzBdPWI7dGhpcy5hcnJheVthKzFdPWM7dGhpcy5hcnJheVthKzJdPWQ7cmV0dXJuIHRoaXN9LHNldFhZWlc6ZnVuY3Rpb24oYSxiLGMsZCxlKXthKj10aGlzLml0ZW1TaXplO3RoaXMuYXJyYXlbYSswXT1iO3RoaXMuYXJyYXlbYSsxXT1jO3RoaXMuYXJyYXlbYSsyXT1kO3RoaXMuYXJyYXlbYSszXT1lO3JldHVybiB0aGlzfSxvblVwbG9hZDpmdW5jdGlvbihhKXt0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9YTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5hcnJheSwKdGhpcy5pdGVtU2l6ZSkpLmNvcHkodGhpcyl9fSk7cmMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTC5wcm90b3R5cGUpO3JjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yYztzYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShMLnByb3RvdHlwZSk7c2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPXNjO3RjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEwucHJvdG90eXBlKTt0Yy5wcm90b3R5cGUuY29uc3RydWN0b3I9dGM7dWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTC5wcm90b3R5cGUpO3VjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj11YztpYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShMLnByb3RvdHlwZSk7aWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWliO3ZjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEwucHJvdG90eXBlKTt2Yy5wcm90b3R5cGUuY29uc3RydWN0b3I9dmM7amIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTC5wcm90b3R5cGUpO2piLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0KamI7Qy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShMLnByb3RvdHlwZSk7Qy5wcm90b3R5cGUuY29uc3RydWN0b3I9Qzt3Yy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShMLnByb3RvdHlwZSk7d2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPXdjO09iamVjdC5hc3NpZ24oS2UucHJvdG90eXBlLHtjb21wdXRlR3JvdXBzOmZ1bmN0aW9uKGEpe3ZhciBiLGM9W10sZD12b2lkIDA7YT1hLmZhY2VzO2Zvcih2YXIgZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgZj1hW2VdO2YubWF0ZXJpYWxJbmRleCE9PWQmJihkPWYubWF0ZXJpYWxJbmRleCx2b2lkIDAhPT1iJiYoYi5jb3VudD0zKmUtYi5zdGFydCxjLnB1c2goYikpLGI9e3N0YXJ0OjMqZSxtYXRlcmlhbEluZGV4OmR9KX12b2lkIDAhPT1iJiYoYi5jb3VudD0zKmUtYi5zdGFydCxjLnB1c2goYikpO3RoaXMuZ3JvdXBzPWN9LGZyb21HZW9tZXRyeTpmdW5jdGlvbihhKXt2YXIgYj1hLmZhY2VzLGM9YS52ZXJ0aWNlcyxkPWEuZmFjZVZlcnRleFV2cywKZT1kWzBdJiYwPGRbMF0ubGVuZ3RoLGY9ZFsxXSYmMDxkWzFdLmxlbmd0aCxnPWEubW9ycGhUYXJnZXRzLGg9Zy5sZW5ndGgsaztpZigwPGgpe2s9W107Zm9yKHZhciBtPTA7bTxoO20rKylrW21dPVtdO3RoaXMubW9ycGhUYXJnZXRzLnBvc2l0aW9uPWt9dmFyIGw9YS5tb3JwaE5vcm1hbHMscT1sLmxlbmd0aCxuO2lmKDA8cSl7bj1bXTtmb3IobT0wO208cTttKyspblttXT1bXTt0aGlzLm1vcnBoVGFyZ2V0cy5ub3JtYWw9bn1mb3IodmFyIHI9YS5za2luSW5kaWNlcyxwPWEuc2tpbldlaWdodHMsdD1yLmxlbmd0aD09PWMubGVuZ3RoLHk9cC5sZW5ndGg9PT1jLmxlbmd0aCxtPTA7bTxiLmxlbmd0aDttKyspe3ZhciB4PWJbbV07dGhpcy52ZXJ0aWNlcy5wdXNoKGNbeC5hXSxjW3guYl0sY1t4LmNdKTt2YXIgdj14LnZlcnRleE5vcm1hbHM7Mz09PXYubGVuZ3RoP3RoaXMubm9ybWFscy5wdXNoKHZbMF0sdlsxXSx2WzJdKToodj14Lm5vcm1hbCx0aGlzLm5vcm1hbHMucHVzaCh2LHYsCnYpKTt2PXgudmVydGV4Q29sb3JzOzM9PT12Lmxlbmd0aD90aGlzLmNvbG9ycy5wdXNoKHZbMF0sdlsxXSx2WzJdKToodj14LmNvbG9yLHRoaXMuY29sb3JzLnB1c2godix2LHYpKTshMD09PWUmJih2PWRbMF1bbV0sdm9pZCAwIT09dj90aGlzLnV2cy5wdXNoKHZbMF0sdlsxXSx2WzJdKTooY29uc29sZS53YXJuKCJUSFJFRS5EaXJlY3RHZW9tZXRyeS5mcm9tR2VvbWV0cnkoKTogVW5kZWZpbmVkIHZlcnRleFV2ICIsbSksdGhpcy51dnMucHVzaChuZXcgRCxuZXcgRCxuZXcgRCkpKTshMD09PWYmJih2PWRbMV1bbV0sdm9pZCAwIT09dj90aGlzLnV2czIucHVzaCh2WzBdLHZbMV0sdlsyXSk6KGNvbnNvbGUud2FybigiVEhSRUUuRGlyZWN0R2VvbWV0cnkuZnJvbUdlb21ldHJ5KCk6IFVuZGVmaW5lZCB2ZXJ0ZXhVdjIgIixtKSx0aGlzLnV2czIucHVzaChuZXcgRCxuZXcgRCxuZXcgRCkpKTtmb3Iodj0wO3Y8aDt2Kyspe3ZhciBHPWdbdl0udmVydGljZXM7a1t2XS5wdXNoKEdbeC5hXSwKR1t4LmJdLEdbeC5jXSl9Zm9yKHY9MDt2PHE7disrKUc9bFt2XS52ZXJ0ZXhOb3JtYWxzW21dLG5bdl0ucHVzaChHLmEsRy5iLEcuYyk7dCYmdGhpcy5za2luSW5kaWNlcy5wdXNoKHJbeC5hXSxyW3guYl0sclt4LmNdKTt5JiZ0aGlzLnNraW5XZWlnaHRzLnB1c2gocFt4LmFdLHBbeC5iXSxwW3guY10pfXRoaXMuY29tcHV0ZUdyb3VwcyhhKTt0aGlzLnZlcnRpY2VzTmVlZFVwZGF0ZT1hLnZlcnRpY2VzTmVlZFVwZGF0ZTt0aGlzLm5vcm1hbHNOZWVkVXBkYXRlPWEubm9ybWFsc05lZWRVcGRhdGU7dGhpcy5jb2xvcnNOZWVkVXBkYXRlPWEuY29sb3JzTmVlZFVwZGF0ZTt0aGlzLnV2c05lZWRVcGRhdGU9YS51dnNOZWVkVXBkYXRlO3RoaXMuZ3JvdXBzTmVlZFVwZGF0ZT1hLmdyb3Vwc05lZWRVcGRhdGU7cmV0dXJuIHRoaXN9fSk7dmFyIFRkPTA7T2JqZWN0LmFzc2lnbihNLnByb3RvdHlwZSxzYS5wcm90b3R5cGUse2lzR2VvbWV0cnk6ITAsYXBwbHlNYXRyaXg6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPQoobmV3IEthKS5nZXROb3JtYWxNYXRyaXgoYSksYz0wLGQ9dGhpcy52ZXJ0aWNlcy5sZW5ndGg7YzxkO2MrKyl0aGlzLnZlcnRpY2VzW2NdLmFwcGx5TWF0cml4NChhKTtjPTA7Zm9yKGQ9dGhpcy5mYWNlcy5sZW5ndGg7YzxkO2MrKyl7YT10aGlzLmZhY2VzW2NdO2Eubm9ybWFsLmFwcGx5TWF0cml4MyhiKS5ub3JtYWxpemUoKTtmb3IodmFyIGU9MCxmPWEudmVydGV4Tm9ybWFscy5sZW5ndGg7ZTxmO2UrKylhLnZlcnRleE5vcm1hbHNbZV0uYXBwbHlNYXRyaXgzKGIpLm5vcm1hbGl6ZSgpfW51bGwhPT10aGlzLmJvdW5kaW5nQm94JiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO251bGwhPT10aGlzLmJvdW5kaW5nU3BoZXJlJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO3RoaXMubm9ybWFsc05lZWRVcGRhdGU9dGhpcy52ZXJ0aWNlc05lZWRVcGRhdGU9ITA7cmV0dXJuIHRoaXN9LHJvdGF0ZVg6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYil7YS5tYWtlUm90YXRpb25YKGIpOwp0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVZOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe2EubWFrZVJvdGF0aW9uWShiKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVaOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe2EubWFrZVJvdGF0aW9uWihiKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSx0cmFuc2xhdGU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYixjLGQpe2EubWFrZVRyYW5zbGF0aW9uKGIsYyxkKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxzY2FsZTpmdW5jdGlvbigpe3ZhciBhPW5ldyBKO3JldHVybiBmdW5jdGlvbihiLGMsZCl7YS5tYWtlU2NhbGUoYixjLGQpO3RoaXMuYXBwbHlNYXRyaXgoYSk7cmV0dXJuIHRoaXN9fSgpLGxvb2tBdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBCO3JldHVybiBmdW5jdGlvbihiKXthLmxvb2tBdChiKTsKYS51cGRhdGVNYXRyaXgoKTt0aGlzLmFwcGx5TWF0cml4KGEubWF0cml4KX19KCksZnJvbUJ1ZmZlckdlb21ldHJ5OmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiLGQsZSl7dmFyIGY9dm9pZCAwIT09Zz9bbFthXS5jbG9uZSgpLGxbYl0uY2xvbmUoKSxsW2RdLmNsb25lKCldOltdLHI9dm9pZCAwIT09aD9bYy5jb2xvcnNbYV0uY2xvbmUoKSxjLmNvbG9yc1tiXS5jbG9uZSgpLGMuY29sb3JzW2RdLmNsb25lKCldOltdO2U9bmV3IFZhKGEsYixkLGYscixlKTtjLmZhY2VzLnB1c2goZSk7dm9pZCAwIT09ayYmYy5mYWNlVmVydGV4VXZzWzBdLnB1c2goW3FbYV0uY2xvbmUoKSxxW2JdLmNsb25lKCkscVtkXS5jbG9uZSgpXSk7dm9pZCAwIT09bSYmYy5mYWNlVmVydGV4VXZzWzFdLnB1c2goW25bYV0uY2xvbmUoKSxuW2JdLmNsb25lKCksbltkXS5jbG9uZSgpXSl9dmFyIGM9dGhpcyxkPW51bGwhPT1hLmluZGV4P2EuaW5kZXguYXJyYXk6dm9pZCAwLGU9YS5hdHRyaWJ1dGVzLGY9ZS5wb3NpdGlvbi5hcnJheSwKZz12b2lkIDAhPT1lLm5vcm1hbD9lLm5vcm1hbC5hcnJheTp2b2lkIDAsaD12b2lkIDAhPT1lLmNvbG9yP2UuY29sb3IuYXJyYXk6dm9pZCAwLGs9dm9pZCAwIT09ZS51dj9lLnV2LmFycmF5OnZvaWQgMCxtPXZvaWQgMCE9PWUudXYyP2UudXYyLmFycmF5OnZvaWQgMDt2b2lkIDAhPT1tJiYodGhpcy5mYWNlVmVydGV4VXZzWzFdPVtdKTtmb3IodmFyIGw9W10scT1bXSxuPVtdLHI9ZT0wO2U8Zi5sZW5ndGg7ZSs9MyxyKz0yKWMudmVydGljZXMucHVzaChuZXcgcChmW2VdLGZbZSsxXSxmW2UrMl0pKSx2b2lkIDAhPT1nJiZsLnB1c2gobmV3IHAoZ1tlXSxnW2UrMV0sZ1tlKzJdKSksdm9pZCAwIT09aCYmYy5jb2xvcnMucHVzaChuZXcgSChoW2VdLGhbZSsxXSxoW2UrMl0pKSx2b2lkIDAhPT1rJiZxLnB1c2gobmV3IEQoa1tyXSxrW3IrMV0pKSx2b2lkIDAhPT1tJiZuLnB1c2gobmV3IEQobVtyXSxtW3IrMV0pKTt2YXIgej1hLmdyb3VwcztpZigwPHoubGVuZ3RoKWZvcihlPTA7ZTx6Lmxlbmd0aDtlKyspZm9yKHZhciBmPQp6W2VdLHQ9Zi5zdGFydCx5PWYuY291bnQscj10LHQ9dCt5O3I8dDtyKz0zKXZvaWQgMCE9PWQ/YihkW3JdLGRbcisxXSxkW3IrMl0sZi5tYXRlcmlhbEluZGV4KTpiKHIscisxLHIrMixmLm1hdGVyaWFsSW5kZXgpO2Vsc2UgaWYodm9pZCAwIT09ZClmb3IoZT0wO2U8ZC5sZW5ndGg7ZSs9MyliKGRbZV0sZFtlKzFdLGRbZSsyXSk7ZWxzZSBmb3IoZT0wO2U8Zi5sZW5ndGgvMztlKz0zKWIoZSxlKzEsZSsyKTt0aGlzLmNvbXB1dGVGYWNlTm9ybWFscygpO251bGwhPT1hLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1hLmJvdW5kaW5nQm94LmNsb25lKCkpO251bGwhPT1hLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1hLmJvdW5kaW5nU3BoZXJlLmNsb25lKCkpO3JldHVybiB0aGlzfSxjZW50ZXI6ZnVuY3Rpb24oKXt0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO3ZhciBhPXRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKCkubmVnYXRlKCk7dGhpcy50cmFuc2xhdGUoYS54LAphLnksYS56KTtyZXR1cm4gYX0sbm9ybWFsaXplOmZ1bmN0aW9uKCl7dGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTt2YXIgYT10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcixiPXRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzLGI9MD09PWI/MToxL2IsYz1uZXcgSjtjLnNldChiLDAsMCwtYiphLngsMCxiLDAsLWIqYS55LDAsMCxiLC1iKmEueiwwLDAsMCwxKTt0aGlzLmFwcGx5TWF0cml4KGMpO3JldHVybiB0aGlzfSxjb21wdXRlRmFjZU5vcm1hbHM6ZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IHAsYj1uZXcgcCxjPTAsZD10aGlzLmZhY2VzLmxlbmd0aDtjPGQ7YysrKXt2YXIgZT10aGlzLmZhY2VzW2NdLGY9dGhpcy52ZXJ0aWNlc1tlLmFdLGc9dGhpcy52ZXJ0aWNlc1tlLmJdO2Euc3ViVmVjdG9ycyh0aGlzLnZlcnRpY2VzW2UuY10sZyk7Yi5zdWJWZWN0b3JzKGYsZyk7YS5jcm9zcyhiKTthLm5vcm1hbGl6ZSgpO2Uubm9ybWFsLmNvcHkoYSl9fSxjb21wdXRlVmVydGV4Tm9ybWFsczpmdW5jdGlvbihhKXt2b2lkIDA9PT0KYSYmKGE9ITApO3ZhciBiLGMsZDtkPUFycmF5KHRoaXMudmVydGljZXMubGVuZ3RoKTtiPTA7Zm9yKGM9dGhpcy52ZXJ0aWNlcy5sZW5ndGg7YjxjO2IrKylkW2JdPW5ldyBwO2lmKGEpe3ZhciBlLGYsZyxoPW5ldyBwLGs9bmV3IHA7YT0wO2ZvcihiPXRoaXMuZmFjZXMubGVuZ3RoO2E8YjthKyspYz10aGlzLmZhY2VzW2FdLGU9dGhpcy52ZXJ0aWNlc1tjLmFdLGY9dGhpcy52ZXJ0aWNlc1tjLmJdLGc9dGhpcy52ZXJ0aWNlc1tjLmNdLGguc3ViVmVjdG9ycyhnLGYpLGsuc3ViVmVjdG9ycyhlLGYpLGguY3Jvc3MoayksZFtjLmFdLmFkZChoKSxkW2MuYl0uYWRkKGgpLGRbYy5jXS5hZGQoaCl9ZWxzZSBmb3IodGhpcy5jb21wdXRlRmFjZU5vcm1hbHMoKSxhPTAsYj10aGlzLmZhY2VzLmxlbmd0aDthPGI7YSsrKWM9dGhpcy5mYWNlc1thXSxkW2MuYV0uYWRkKGMubm9ybWFsKSxkW2MuYl0uYWRkKGMubm9ybWFsKSxkW2MuY10uYWRkKGMubm9ybWFsKTtiPTA7Zm9yKGM9dGhpcy52ZXJ0aWNlcy5sZW5ndGg7YjwKYztiKyspZFtiXS5ub3JtYWxpemUoKTthPTA7Zm9yKGI9dGhpcy5mYWNlcy5sZW5ndGg7YTxiO2ErKyljPXRoaXMuZmFjZXNbYV0sZT1jLnZlcnRleE5vcm1hbHMsMz09PWUubGVuZ3RoPyhlWzBdLmNvcHkoZFtjLmFdKSxlWzFdLmNvcHkoZFtjLmJdKSxlWzJdLmNvcHkoZFtjLmNdKSk6KGVbMF09ZFtjLmFdLmNsb25lKCksZVsxXT1kW2MuYl0uY2xvbmUoKSxlWzJdPWRbYy5jXS5jbG9uZSgpKTswPHRoaXMuZmFjZXMubGVuZ3RoJiYodGhpcy5ub3JtYWxzTmVlZFVwZGF0ZT0hMCl9LGNvbXB1dGVGbGF0VmVydGV4Tm9ybWFsczpmdW5jdGlvbigpe3ZhciBhLGIsYzt0aGlzLmNvbXB1dGVGYWNlTm9ybWFscygpO2E9MDtmb3IoYj10aGlzLmZhY2VzLmxlbmd0aDthPGI7YSsrKXtjPXRoaXMuZmFjZXNbYV07dmFyIGQ9Yy52ZXJ0ZXhOb3JtYWxzOzM9PT1kLmxlbmd0aD8oZFswXS5jb3B5KGMubm9ybWFsKSxkWzFdLmNvcHkoYy5ub3JtYWwpLGRbMl0uY29weShjLm5vcm1hbCkpOihkWzBdPQpjLm5vcm1hbC5jbG9uZSgpLGRbMV09Yy5ub3JtYWwuY2xvbmUoKSxkWzJdPWMubm9ybWFsLmNsb25lKCkpfTA8dGhpcy5mYWNlcy5sZW5ndGgmJih0aGlzLm5vcm1hbHNOZWVkVXBkYXRlPSEwKX0sY29tcHV0ZU1vcnBoTm9ybWFsczpmdW5jdGlvbigpe3ZhciBhLGIsYyxkLGU7Yz0wO2ZvcihkPXRoaXMuZmFjZXMubGVuZ3RoO2M8ZDtjKyspZm9yKGU9dGhpcy5mYWNlc1tjXSxlLl9fb3JpZ2luYWxGYWNlTm9ybWFsP2UuX19vcmlnaW5hbEZhY2VOb3JtYWwuY29weShlLm5vcm1hbCk6ZS5fX29yaWdpbmFsRmFjZU5vcm1hbD1lLm5vcm1hbC5jbG9uZSgpLGUuX19vcmlnaW5hbFZlcnRleE5vcm1hbHN8fChlLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzPVtdKSxhPTAsYj1lLnZlcnRleE5vcm1hbHMubGVuZ3RoO2E8YjthKyspZS5fX29yaWdpbmFsVmVydGV4Tm9ybWFsc1thXT9lLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzW2FdLmNvcHkoZS52ZXJ0ZXhOb3JtYWxzW2FdKTplLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzW2FdPQplLnZlcnRleE5vcm1hbHNbYV0uY2xvbmUoKTt2YXIgZj1uZXcgTTtmLmZhY2VzPXRoaXMuZmFjZXM7YT0wO2ZvcihiPXRoaXMubW9ycGhUYXJnZXRzLmxlbmd0aDthPGI7YSsrKXtpZighdGhpcy5tb3JwaE5vcm1hbHNbYV0pe3RoaXMubW9ycGhOb3JtYWxzW2FdPXt9O3RoaXMubW9ycGhOb3JtYWxzW2FdLmZhY2VOb3JtYWxzPVtdO3RoaXMubW9ycGhOb3JtYWxzW2FdLnZlcnRleE5vcm1hbHM9W107ZT10aGlzLm1vcnBoTm9ybWFsc1thXS5mYWNlTm9ybWFsczt2YXIgZz10aGlzLm1vcnBoTm9ybWFsc1thXS52ZXJ0ZXhOb3JtYWxzLGgsaztjPTA7Zm9yKGQ9dGhpcy5mYWNlcy5sZW5ndGg7YzxkO2MrKyloPW5ldyBwLGs9e2E6bmV3IHAsYjpuZXcgcCxjOm5ldyBwfSxlLnB1c2goaCksZy5wdXNoKGspfWc9dGhpcy5tb3JwaE5vcm1hbHNbYV07Zi52ZXJ0aWNlcz10aGlzLm1vcnBoVGFyZ2V0c1thXS52ZXJ0aWNlcztmLmNvbXB1dGVGYWNlTm9ybWFscygpO2YuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTsKYz0wO2ZvcihkPXRoaXMuZmFjZXMubGVuZ3RoO2M8ZDtjKyspZT10aGlzLmZhY2VzW2NdLGg9Zy5mYWNlTm9ybWFsc1tjXSxrPWcudmVydGV4Tm9ybWFsc1tjXSxoLmNvcHkoZS5ub3JtYWwpLGsuYS5jb3B5KGUudmVydGV4Tm9ybWFsc1swXSksay5iLmNvcHkoZS52ZXJ0ZXhOb3JtYWxzWzFdKSxrLmMuY29weShlLnZlcnRleE5vcm1hbHNbMl0pfWM9MDtmb3IoZD10aGlzLmZhY2VzLmxlbmd0aDtjPGQ7YysrKWU9dGhpcy5mYWNlc1tjXSxlLm5vcm1hbD1lLl9fb3JpZ2luYWxGYWNlTm9ybWFsLGUudmVydGV4Tm9ybWFscz1lLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzfSxjb21wdXRlTGluZURpc3RhbmNlczpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI9dGhpcy52ZXJ0aWNlcyxjPTAsZD1iLmxlbmd0aDtjPGQ7YysrKTA8YyYmKGErPWJbY10uZGlzdGFuY2VUbyhiW2MtMV0pKSx0aGlzLmxpbmVEaXN0YW5jZXNbY109YX0sY29tcHV0ZUJvdW5kaW5nQm94OmZ1bmN0aW9uKCl7bnVsbD09PQp0aGlzLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1uZXcgVGEpO3RoaXMuYm91bmRpbmdCb3guc2V0RnJvbVBvaW50cyh0aGlzLnZlcnRpY2VzKX0sY29tcHV0ZUJvdW5kaW5nU3BoZXJlOmZ1bmN0aW9uKCl7bnVsbD09PXRoaXMuYm91bmRpbmdTcGhlcmUmJih0aGlzLmJvdW5kaW5nU3BoZXJlPW5ldyBHYSk7dGhpcy5ib3VuZGluZ1NwaGVyZS5zZXRGcm9tUG9pbnRzKHRoaXMudmVydGljZXMpfSxtZXJnZTpmdW5jdGlvbihhLGIsYyl7aWYoITE9PT0oYSYmYS5pc0dlb21ldHJ5KSljb25zb2xlLmVycm9yKCJUSFJFRS5HZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuR2VvbWV0cnkuIixhKTtlbHNle3ZhciBkLGU9dGhpcy52ZXJ0aWNlcy5sZW5ndGgsZj10aGlzLnZlcnRpY2VzLGc9YS52ZXJ0aWNlcyxoPXRoaXMuZmFjZXMsaz1hLmZhY2VzLG09dGhpcy5mYWNlVmVydGV4VXZzWzBdLGw9YS5mYWNlVmVydGV4VXZzWzBdLHE9dGhpcy5jb2xvcnMsCm49YS5jb2xvcnM7dm9pZCAwPT09YyYmKGM9MCk7dm9pZCAwIT09YiYmKGQ9KG5ldyBLYSkuZ2V0Tm9ybWFsTWF0cml4KGIpKTthPTA7Zm9yKHZhciByPWcubGVuZ3RoO2E8cjthKyspe3ZhciBwPWdbYV0uY2xvbmUoKTt2b2lkIDAhPT1iJiZwLmFwcGx5TWF0cml4NChiKTtmLnB1c2gocCl9YT0wO2ZvcihyPW4ubGVuZ3RoO2E8cjthKyspcS5wdXNoKG5bYV0uY2xvbmUoKSk7YT0wO2ZvcihyPWsubGVuZ3RoO2E8cjthKyspe3ZhciBnPWtbYV0sdD1nLnZlcnRleE5vcm1hbHMsbj1nLnZlcnRleENvbG9ycyxxPW5ldyBWYShnLmErZSxnLmIrZSxnLmMrZSk7cS5ub3JtYWwuY29weShnLm5vcm1hbCk7dm9pZCAwIT09ZCYmcS5ub3JtYWwuYXBwbHlNYXRyaXgzKGQpLm5vcm1hbGl6ZSgpO2I9MDtmb3IoZj10Lmxlbmd0aDtiPGY7YisrKXA9dFtiXS5jbG9uZSgpLHZvaWQgMCE9PWQmJnAuYXBwbHlNYXRyaXgzKGQpLm5vcm1hbGl6ZSgpLHEudmVydGV4Tm9ybWFscy5wdXNoKHApO3EuY29sb3IuY29weShnLmNvbG9yKTsKYj0wO2ZvcihmPW4ubGVuZ3RoO2I8ZjtiKyspcD1uW2JdLHEudmVydGV4Q29sb3JzLnB1c2gocC5jbG9uZSgpKTtxLm1hdGVyaWFsSW5kZXg9Zy5tYXRlcmlhbEluZGV4K2M7aC5wdXNoKHEpfWE9MDtmb3Iocj1sLmxlbmd0aDthPHI7YSsrKWlmKGM9bFthXSxkPVtdLHZvaWQgMCE9PWMpe2I9MDtmb3IoZj1jLmxlbmd0aDtiPGY7YisrKWQucHVzaChjW2JdLmNsb25lKCkpO20ucHVzaChkKX19fSxtZXJnZU1lc2g6ZnVuY3Rpb24oYSl7ITE9PT0oYSYmYS5pc01lc2gpP2NvbnNvbGUuZXJyb3IoIlRIUkVFLkdlb21ldHJ5Lm1lcmdlTWVzaCgpOiBtZXNoIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5NZXNoLiIsYSk6KGEubWF0cml4QXV0b1VwZGF0ZSYmYS51cGRhdGVNYXRyaXgoKSx0aGlzLm1lcmdlKGEuZ2VvbWV0cnksYS5tYXRyaXgpKX0sbWVyZ2VWZXJ0aWNlczpmdW5jdGlvbigpe3ZhciBhPXt9LGI9W10sYz1bXSxkLGU9TWF0aC5wb3coMTAsNCksZixnO2Y9MDtmb3IoZz10aGlzLnZlcnRpY2VzLmxlbmd0aDtmPApnO2YrKylkPXRoaXMudmVydGljZXNbZl0sZD1NYXRoLnJvdW5kKGQueCplKSsiXyIrTWF0aC5yb3VuZChkLnkqZSkrIl8iK01hdGgucm91bmQoZC56KmUpLHZvaWQgMD09PWFbZF0/KGFbZF09ZixiLnB1c2godGhpcy52ZXJ0aWNlc1tmXSksY1tmXT1iLmxlbmd0aC0xKTpjW2ZdPWNbYVtkXV07YT1bXTtmPTA7Zm9yKGc9dGhpcy5mYWNlcy5sZW5ndGg7ZjxnO2YrKylmb3IoZT10aGlzLmZhY2VzW2ZdLGUuYT1jW2UuYV0sZS5iPWNbZS5iXSxlLmM9Y1tlLmNdLGU9W2UuYSxlLmIsZS5jXSxkPTA7Mz5kO2QrKylpZihlW2RdPT09ZVsoZCsxKSUzXSl7YS5wdXNoKGYpO2JyZWFrfWZvcihmPWEubGVuZ3RoLTE7MDw9ZjtmLS0pZm9yKGU9YVtmXSx0aGlzLmZhY2VzLnNwbGljZShlLDEpLGM9MCxnPXRoaXMuZmFjZVZlcnRleFV2cy5sZW5ndGg7YzxnO2MrKyl0aGlzLmZhY2VWZXJ0ZXhVdnNbY10uc3BsaWNlKGUsMSk7Zj10aGlzLnZlcnRpY2VzLmxlbmd0aC1iLmxlbmd0aDt0aGlzLnZlcnRpY2VzPQpiO3JldHVybiBmfSxzb3J0RmFjZXNCeU1hdGVyaWFsSW5kZXg6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5mYWNlcyxiPWEubGVuZ3RoLGM9MDtjPGI7YysrKWFbY10uX2lkPWM7YS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEubWF0ZXJpYWxJbmRleC1iLm1hdGVyaWFsSW5kZXh9KTt2YXIgZD10aGlzLmZhY2VWZXJ0ZXhVdnNbMF0sZT10aGlzLmZhY2VWZXJ0ZXhVdnNbMV0sZixnO2QmJmQubGVuZ3RoPT09YiYmKGY9W10pO2UmJmUubGVuZ3RoPT09YiYmKGc9W10pO2ZvcihjPTA7YzxiO2MrKyl7dmFyIGg9YVtjXS5faWQ7ZiYmZi5wdXNoKGRbaF0pO2cmJmcucHVzaChlW2hdKX1mJiYodGhpcy5mYWNlVmVydGV4VXZzWzBdPWYpO2cmJih0aGlzLmZhY2VWZXJ0ZXhVdnNbMV09Zyl9LHRvSlNPTjpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiLGMpe3JldHVybiBjP2F8MTw8YjphJn4oMTw8Yil9ZnVuY3Rpb24gYihhKXt2YXIgYj1hLngudG9TdHJpbmcoKSthLnkudG9TdHJpbmcoKSsKYS56LnRvU3RyaW5nKCk7aWYodm9pZCAwIT09bVtiXSlyZXR1cm4gbVtiXTttW2JdPWsubGVuZ3RoLzM7ay5wdXNoKGEueCxhLnksYS56KTtyZXR1cm4gbVtiXX1mdW5jdGlvbiBjKGEpe3ZhciBiPWEuci50b1N0cmluZygpK2EuZy50b1N0cmluZygpK2EuYi50b1N0cmluZygpO2lmKHZvaWQgMCE9PXFbYl0pcmV0dXJuIHFbYl07cVtiXT1sLmxlbmd0aDtsLnB1c2goYS5nZXRIZXgoKSk7cmV0dXJuIHFbYl19ZnVuY3Rpb24gZChhKXt2YXIgYj1hLngudG9TdHJpbmcoKSthLnkudG9TdHJpbmcoKTtpZih2b2lkIDAhPT1yW2JdKXJldHVybiByW2JdO3JbYl09bi5sZW5ndGgvMjtuLnB1c2goYS54LGEueSk7cmV0dXJuIHJbYl19dmFyIGU9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJHZW9tZXRyeSIsZ2VuZXJhdG9yOiJHZW9tZXRyeS50b0pTT04ifX07ZS51dWlkPXRoaXMudXVpZDtlLnR5cGU9dGhpcy50eXBlOyIiIT09dGhpcy5uYW1lJiYoZS5uYW1lPXRoaXMubmFtZSk7aWYodm9pZCAwIT09CnRoaXMucGFyYW1ldGVycyl7dmFyIGY9dGhpcy5wYXJhbWV0ZXJzLGc7Zm9yKGcgaW4gZil2b2lkIDAhPT1mW2ddJiYoZVtnXT1mW2ddKTtyZXR1cm4gZX1mPVtdO2ZvcihnPTA7Zzx0aGlzLnZlcnRpY2VzLmxlbmd0aDtnKyspe3ZhciBoPXRoaXMudmVydGljZXNbZ107Zi5wdXNoKGgueCxoLnksaC56KX12YXIgaD1bXSxrPVtdLG09e30sbD1bXSxxPXt9LG49W10scj17fTtmb3IoZz0wO2c8dGhpcy5mYWNlcy5sZW5ndGg7ZysrKXt2YXIgcD10aGlzLmZhY2VzW2ddLHQ9dm9pZCAwIT09dGhpcy5mYWNlVmVydGV4VXZzWzBdW2ddLHk9MDxwLm5vcm1hbC5sZW5ndGgoKSx4PTA8cC52ZXJ0ZXhOb3JtYWxzLmxlbmd0aCx2PTEhPT1wLmNvbG9yLnJ8fDEhPT1wLmNvbG9yLmd8fDEhPT1wLmNvbG9yLmIsRz0wPHAudmVydGV4Q29sb3JzLmxlbmd0aCx3PTAsdz1hKHcsMCwwKSx3PWEodywxLCEwKSx3PWEodywyLCExKSx3PWEodywzLHQpLHc9YSh3LDQseSksdz1hKHcsNSx4KSx3PWEodyw2LAp2KSx3PWEodyw3LEcpO2gucHVzaCh3KTtoLnB1c2gocC5hLHAuYixwLmMpO2gucHVzaChwLm1hdGVyaWFsSW5kZXgpO3QmJih0PXRoaXMuZmFjZVZlcnRleFV2c1swXVtnXSxoLnB1c2goZCh0WzBdKSxkKHRbMV0pLGQodFsyXSkpKTt5JiZoLnB1c2goYihwLm5vcm1hbCkpO3gmJih5PXAudmVydGV4Tm9ybWFscyxoLnB1c2goYih5WzBdKSxiKHlbMV0pLGIoeVsyXSkpKTt2JiZoLnB1c2goYyhwLmNvbG9yKSk7RyYmKHA9cC52ZXJ0ZXhDb2xvcnMsaC5wdXNoKGMocFswXSksYyhwWzFdKSxjKHBbMl0pKSl9ZS5kYXRhPXt9O2UuZGF0YS52ZXJ0aWNlcz1mO2UuZGF0YS5ub3JtYWxzPWs7MDxsLmxlbmd0aCYmKGUuZGF0YS5jb2xvcnM9bCk7MDxuLmxlbmd0aCYmKGUuZGF0YS51dnM9W25dKTtlLmRhdGEuZmFjZXM9aDtyZXR1cm4gZX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IE0pLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnO3RoaXMudmVydGljZXM9CltdO3RoaXMuY29sb3JzPVtdO3RoaXMuZmFjZXM9W107dGhpcy5mYWNlVmVydGV4VXZzPVtbXV07dGhpcy5tb3JwaFRhcmdldHM9W107dGhpcy5tb3JwaE5vcm1hbHM9W107dGhpcy5za2luV2VpZ2h0cz1bXTt0aGlzLnNraW5JbmRpY2VzPVtdO3RoaXMubGluZURpc3RhbmNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLm5hbWU9YS5uYW1lO2Q9YS52ZXJ0aWNlcztiPTA7Zm9yKGM9ZC5sZW5ndGg7YjxjO2IrKyl0aGlzLnZlcnRpY2VzLnB1c2goZFtiXS5jbG9uZSgpKTtkPWEuY29sb3JzO2I9MDtmb3IoYz1kLmxlbmd0aDtiPGM7YisrKXRoaXMuY29sb3JzLnB1c2goZFtiXS5jbG9uZSgpKTtkPWEuZmFjZXM7Yj0wO2ZvcihjPWQubGVuZ3RoO2I8YztiKyspdGhpcy5mYWNlcy5wdXNoKGRbYl0uY2xvbmUoKSk7Yj0wO2ZvcihjPWEuZmFjZVZlcnRleFV2cy5sZW5ndGg7YjxjO2IrKyl7dmFyIGg9YS5mYWNlVmVydGV4VXZzW2JdO3ZvaWQgMD09PQp0aGlzLmZhY2VWZXJ0ZXhVdnNbYl0mJih0aGlzLmZhY2VWZXJ0ZXhVdnNbYl09W10pO2Q9MDtmb3IoZT1oLmxlbmd0aDtkPGU7ZCsrKXt2YXIgaz1oW2RdLG09W107Zj0wO2ZvcihnPWsubGVuZ3RoO2Y8ZztmKyspbS5wdXNoKGtbZl0uY2xvbmUoKSk7dGhpcy5mYWNlVmVydGV4VXZzW2JdLnB1c2gobSl9fWY9YS5tb3JwaFRhcmdldHM7Yj0wO2ZvcihjPWYubGVuZ3RoO2I8YztiKyspe2c9e307Zy5uYW1lPWZbYl0ubmFtZTtpZih2b2lkIDAhPT1mW2JdLnZlcnRpY2VzKWZvcihnLnZlcnRpY2VzPVtdLGQ9MCxlPWZbYl0udmVydGljZXMubGVuZ3RoO2Q8ZTtkKyspZy52ZXJ0aWNlcy5wdXNoKGZbYl0udmVydGljZXNbZF0uY2xvbmUoKSk7aWYodm9pZCAwIT09ZltiXS5ub3JtYWxzKWZvcihnLm5vcm1hbHM9W10sZD0wLGU9ZltiXS5ub3JtYWxzLmxlbmd0aDtkPGU7ZCsrKWcubm9ybWFscy5wdXNoKGZbYl0ubm9ybWFsc1tkXS5jbG9uZSgpKTt0aGlzLm1vcnBoVGFyZ2V0cy5wdXNoKGcpfWY9CmEubW9ycGhOb3JtYWxzO2I9MDtmb3IoYz1mLmxlbmd0aDtiPGM7YisrKXtnPXt9O2lmKHZvaWQgMCE9PWZbYl0udmVydGV4Tm9ybWFscylmb3IoZy52ZXJ0ZXhOb3JtYWxzPVtdLGQ9MCxlPWZbYl0udmVydGV4Tm9ybWFscy5sZW5ndGg7ZDxlO2QrKyloPWZbYl0udmVydGV4Tm9ybWFsc1tkXSxrPXt9LGsuYT1oLmEuY2xvbmUoKSxrLmI9aC5iLmNsb25lKCksay5jPWguYy5jbG9uZSgpLGcudmVydGV4Tm9ybWFscy5wdXNoKGspO2lmKHZvaWQgMCE9PWZbYl0uZmFjZU5vcm1hbHMpZm9yKGcuZmFjZU5vcm1hbHM9W10sZD0wLGU9ZltiXS5mYWNlTm9ybWFscy5sZW5ndGg7ZDxlO2QrKylnLmZhY2VOb3JtYWxzLnB1c2goZltiXS5mYWNlTm9ybWFsc1tkXS5jbG9uZSgpKTt0aGlzLm1vcnBoTm9ybWFscy5wdXNoKGcpfWQ9YS5za2luV2VpZ2h0cztiPTA7Zm9yKGM9ZC5sZW5ndGg7YjxjO2IrKyl0aGlzLnNraW5XZWlnaHRzLnB1c2goZFtiXS5jbG9uZSgpKTtkPWEuc2tpbkluZGljZXM7Yj0KMDtmb3IoYz1kLmxlbmd0aDtiPGM7YisrKXRoaXMuc2tpbkluZGljZXMucHVzaChkW2JdLmNsb25lKCkpO2Q9YS5saW5lRGlzdGFuY2VzO2I9MDtmb3IoYz1kLmxlbmd0aDtiPGM7YisrKXRoaXMubGluZURpc3RhbmNlcy5wdXNoKGRbYl0pO2I9YS5ib3VuZGluZ0JveDtudWxsIT09YiYmKHRoaXMuYm91bmRpbmdCb3g9Yi5jbG9uZSgpKTtiPWEuYm91bmRpbmdTcGhlcmU7bnVsbCE9PWImJih0aGlzLmJvdW5kaW5nU3BoZXJlPWIuY2xvbmUoKSk7dGhpcy5lbGVtZW50c05lZWRVcGRhdGU9YS5lbGVtZW50c05lZWRVcGRhdGU7dGhpcy52ZXJ0aWNlc05lZWRVcGRhdGU9YS52ZXJ0aWNlc05lZWRVcGRhdGU7dGhpcy51dnNOZWVkVXBkYXRlPWEudXZzTmVlZFVwZGF0ZTt0aGlzLm5vcm1hbHNOZWVkVXBkYXRlPWEubm9ybWFsc05lZWRVcGRhdGU7dGhpcy5jb2xvcnNOZWVkVXBkYXRlPWEuY29sb3JzTmVlZFVwZGF0ZTt0aGlzLmxpbmVEaXN0YW5jZXNOZWVkVXBkYXRlPWEubGluZURpc3RhbmNlc05lZWRVcGRhdGU7CnRoaXMuZ3JvdXBzTmVlZFVwZGF0ZT1hLmdyb3Vwc05lZWRVcGRhdGU7cmV0dXJuIHRoaXN9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fSk7SS5NYXhJbmRleD02NTUzNTtPYmplY3QuYXNzaWduKEkucHJvdG90eXBlLHNhLnByb3RvdHlwZSx7aXNCdWZmZXJHZW9tZXRyeTohMCxnZXRJbmRleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZGV4fSxzZXRJbmRleDpmdW5jdGlvbihhKXtBcnJheS5pc0FycmF5KGEpP3RoaXMuaW5kZXg9bmV3ICg2NTUzNTxTZChhKT9qYjppYikoYSwxKTp0aGlzLmluZGV4PWF9LGFkZEF0dHJpYnV0ZTpmdW5jdGlvbihhLGIsYyl7aWYoITE9PT0oYiYmYi5pc0J1ZmZlckF0dHJpYnV0ZSkmJiExPT09KGImJmIuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSkpY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEF0dHJpYnV0ZSgpIG5vdyBleHBlY3RzICggbmFtZSwgYXR0cmlidXRlICkuIiksCnRoaXMuYWRkQXR0cmlidXRlKGEsbmV3IEwoYixjKSk7ZWxzZSBpZigiaW5kZXgiPT09YSljb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleChiKTtlbHNlIHJldHVybiB0aGlzLmF0dHJpYnV0ZXNbYV09Yix0aGlzfSxnZXRBdHRyaWJ1dGU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1thXX0scmVtb3ZlQXR0cmlidXRlOmZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbYV07cmV0dXJuIHRoaXN9LGFkZEdyb3VwOmZ1bmN0aW9uKGEsYixjKXt0aGlzLmdyb3Vwcy5wdXNoKHtzdGFydDphLGNvdW50OmIsbWF0ZXJpYWxJbmRleDp2b2lkIDAhPT1jP2M6MH0pfSxjbGVhckdyb3VwczpmdW5jdGlvbigpe3RoaXMuZ3JvdXBzPVtdfSxzZXREcmF3UmFuZ2U6ZnVuY3Rpb24oYSxiKXt0aGlzLmRyYXdSYW5nZS5zdGFydD1hO3RoaXMuZHJhd1JhbmdlLmNvdW50PQpifSxhcHBseU1hdHJpeDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247dm9pZCAwIT09YiYmKGEuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZShiKSxiLm5lZWRzVXBkYXRlPSEwKTtiPXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7dm9pZCAwIT09YiYmKChuZXcgS2EpLmdldE5vcm1hbE1hdHJpeChhKS5hcHBseVRvQnVmZmVyQXR0cmlidXRlKGIpLGIubmVlZHNVcGRhdGU9ITApO251bGwhPT10aGlzLmJvdW5kaW5nQm94JiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO251bGwhPT10aGlzLmJvdW5kaW5nU3BoZXJlJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO3JldHVybiB0aGlzfSxyb3RhdGVYOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe2EubWFrZVJvdGF0aW9uWChiKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVZOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe2EubWFrZVJvdGF0aW9uWShiKTsKdGhpcy5hcHBseU1hdHJpeChhKTtyZXR1cm4gdGhpc319KCkscm90YXRlWjpmdW5jdGlvbigpe3ZhciBhPW5ldyBKO3JldHVybiBmdW5jdGlvbihiKXthLm1ha2VSb3RhdGlvblooYik7dGhpcy5hcHBseU1hdHJpeChhKTtyZXR1cm4gdGhpc319KCksdHJhbnNsYXRlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXthLm1ha2VUcmFuc2xhdGlvbihiLGMsZCk7dGhpcy5hcHBseU1hdHJpeChhKTtyZXR1cm4gdGhpc319KCksc2NhbGU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYixjLGQpe2EubWFrZVNjYWxlKGIsYyxkKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxsb29rQXQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgQjtyZXR1cm4gZnVuY3Rpb24oYil7YS5sb29rQXQoYik7YS51cGRhdGVNYXRyaXgoKTt0aGlzLmFwcGx5TWF0cml4KGEubWF0cml4KX19KCksY2VudGVyOmZ1bmN0aW9uKCl7dGhpcy5jb21wdXRlQm91bmRpbmdCb3goKTsKdmFyIGE9dGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIoKS5uZWdhdGUoKTt0aGlzLnRyYW5zbGF0ZShhLngsYS55LGEueik7cmV0dXJuIGF9LHNldEZyb21PYmplY3Q6ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZW9tZXRyeTtpZihhLmlzUG9pbnRzfHxhLmlzTGluZSl7YT1uZXcgQygzKmIudmVydGljZXMubGVuZ3RoLDMpO3ZhciBjPW5ldyBDKDMqYi5jb2xvcnMubGVuZ3RoLDMpO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsYS5jb3B5VmVjdG9yM3NBcnJheShiLnZlcnRpY2VzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoImNvbG9yIixjLmNvcHlDb2xvcnNBcnJheShiLmNvbG9ycykpO2IubGluZURpc3RhbmNlcyYmYi5saW5lRGlzdGFuY2VzLmxlbmd0aD09PWIudmVydGljZXMubGVuZ3RoJiYoYT1uZXcgQyhiLmxpbmVEaXN0YW5jZXMubGVuZ3RoLDEpLHRoaXMuYWRkQXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLGEuY29weUFycmF5KGIubGluZURpc3RhbmNlcykpKTtudWxsIT09Yi5ib3VuZGluZ1NwaGVyZSYmCih0aGlzLmJvdW5kaW5nU3BoZXJlPWIuYm91bmRpbmdTcGhlcmUuY2xvbmUoKSk7bnVsbCE9PWIuYm91bmRpbmdCb3gmJih0aGlzLmJvdW5kaW5nQm94PWIuYm91bmRpbmdCb3guY2xvbmUoKSl9ZWxzZSBhLmlzTWVzaCYmYiYmYi5pc0dlb21ldHJ5JiZ0aGlzLmZyb21HZW9tZXRyeShiKTtyZXR1cm4gdGhpc30sdXBkYXRlRnJvbU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYj1hLmdlb21ldHJ5O2lmKGEuaXNNZXNoKXt2YXIgYz1iLl9fZGlyZWN0R2VvbWV0cnk7ITA9PT1iLmVsZW1lbnRzTmVlZFVwZGF0ZSYmKGM9dm9pZCAwLGIuZWxlbWVudHNOZWVkVXBkYXRlPSExKTtpZih2b2lkIDA9PT1jKXJldHVybiB0aGlzLmZyb21HZW9tZXRyeShiKTtjLnZlcnRpY2VzTmVlZFVwZGF0ZT1iLnZlcnRpY2VzTmVlZFVwZGF0ZTtjLm5vcm1hbHNOZWVkVXBkYXRlPWIubm9ybWFsc05lZWRVcGRhdGU7Yy5jb2xvcnNOZWVkVXBkYXRlPWIuY29sb3JzTmVlZFVwZGF0ZTtjLnV2c05lZWRVcGRhdGU9Yi51dnNOZWVkVXBkYXRlOwpjLmdyb3Vwc05lZWRVcGRhdGU9Yi5ncm91cHNOZWVkVXBkYXRlO2IudmVydGljZXNOZWVkVXBkYXRlPSExO2Iubm9ybWFsc05lZWRVcGRhdGU9ITE7Yi5jb2xvcnNOZWVkVXBkYXRlPSExO2IudXZzTmVlZFVwZGF0ZT0hMTtiLmdyb3Vwc05lZWRVcGRhdGU9ITE7Yj1jfSEwPT09Yi52ZXJ0aWNlc05lZWRVcGRhdGUmJihjPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbix2b2lkIDAhPT1jJiYoYy5jb3B5VmVjdG9yM3NBcnJheShiLnZlcnRpY2VzKSxjLm5lZWRzVXBkYXRlPSEwKSxiLnZlcnRpY2VzTmVlZFVwZGF0ZT0hMSk7ITA9PT1iLm5vcm1hbHNOZWVkVXBkYXRlJiYoYz10aGlzLmF0dHJpYnV0ZXMubm9ybWFsLHZvaWQgMCE9PWMmJihjLmNvcHlWZWN0b3Izc0FycmF5KGIubm9ybWFscyksYy5uZWVkc1VwZGF0ZT0hMCksYi5ub3JtYWxzTmVlZFVwZGF0ZT0hMSk7ITA9PT1iLmNvbG9yc05lZWRVcGRhdGUmJihjPXRoaXMuYXR0cmlidXRlcy5jb2xvcix2b2lkIDAhPT1jJiYoYy5jb3B5Q29sb3JzQXJyYXkoYi5jb2xvcnMpLApjLm5lZWRzVXBkYXRlPSEwKSxiLmNvbG9yc05lZWRVcGRhdGU9ITEpO2IudXZzTmVlZFVwZGF0ZSYmKGM9dGhpcy5hdHRyaWJ1dGVzLnV2LHZvaWQgMCE9PWMmJihjLmNvcHlWZWN0b3Iyc0FycmF5KGIudXZzKSxjLm5lZWRzVXBkYXRlPSEwKSxiLnV2c05lZWRVcGRhdGU9ITEpO2IubGluZURpc3RhbmNlc05lZWRVcGRhdGUmJihjPXRoaXMuYXR0cmlidXRlcy5saW5lRGlzdGFuY2Usdm9pZCAwIT09YyYmKGMuY29weUFycmF5KGIubGluZURpc3RhbmNlcyksYy5uZWVkc1VwZGF0ZT0hMCksYi5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZT0hMSk7Yi5ncm91cHNOZWVkVXBkYXRlJiYoYi5jb21wdXRlR3JvdXBzKGEuZ2VvbWV0cnkpLHRoaXMuZ3JvdXBzPWIuZ3JvdXBzLGIuZ3JvdXBzTmVlZFVwZGF0ZT0hMSk7cmV0dXJuIHRoaXN9LGZyb21HZW9tZXRyeTpmdW5jdGlvbihhKXthLl9fZGlyZWN0R2VvbWV0cnk9KG5ldyBLZSkuZnJvbUdlb21ldHJ5KGEpO3JldHVybiB0aGlzLmZyb21EaXJlY3RHZW9tZXRyeShhLl9fZGlyZWN0R2VvbWV0cnkpfSwKZnJvbURpcmVjdEdlb21ldHJ5OmZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBGbG9hdDMyQXJyYXkoMyphLnZlcnRpY2VzLmxlbmd0aCk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIiwobmV3IEwoYiwzKSkuY29weVZlY3RvcjNzQXJyYXkoYS52ZXJ0aWNlcykpOzA8YS5ub3JtYWxzLmxlbmd0aCYmKGI9bmV3IEZsb2F0MzJBcnJheSgzKmEubm9ybWFscy5sZW5ndGgpLHRoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLChuZXcgTChiLDMpKS5jb3B5VmVjdG9yM3NBcnJheShhLm5vcm1hbHMpKSk7MDxhLmNvbG9ycy5sZW5ndGgmJihiPW5ldyBGbG9hdDMyQXJyYXkoMyphLmNvbG9ycy5sZW5ndGgpLHRoaXMuYWRkQXR0cmlidXRlKCJjb2xvciIsKG5ldyBMKGIsMykpLmNvcHlDb2xvcnNBcnJheShhLmNvbG9ycykpKTswPGEudXZzLmxlbmd0aCYmKGI9bmV3IEZsb2F0MzJBcnJheSgyKmEudXZzLmxlbmd0aCksdGhpcy5hZGRBdHRyaWJ1dGUoInV2IiwobmV3IEwoYiwyKSkuY29weVZlY3RvcjJzQXJyYXkoYS51dnMpKSk7CjA8YS51dnMyLmxlbmd0aCYmKGI9bmV3IEZsb2F0MzJBcnJheSgyKmEudXZzMi5sZW5ndGgpLHRoaXMuYWRkQXR0cmlidXRlKCJ1djIiLChuZXcgTChiLDIpKS5jb3B5VmVjdG9yMnNBcnJheShhLnV2czIpKSk7MDxhLmluZGljZXMubGVuZ3RoJiYoYj1uZXcgKDY1NTM1PFNkKGEuaW5kaWNlcyk/VWludDMyQXJyYXk6VWludDE2QXJyYXkpKDMqYS5pbmRpY2VzLmxlbmd0aCksdGhpcy5zZXRJbmRleCgobmV3IEwoYiwxKSkuY29weUluZGljZXNBcnJheShhLmluZGljZXMpKSk7dGhpcy5ncm91cHM9YS5ncm91cHM7Zm9yKHZhciBjIGluIGEubW9ycGhUYXJnZXRzKXtmb3IodmFyIGI9W10sZD1hLm1vcnBoVGFyZ2V0c1tjXSxlPTAsZj1kLmxlbmd0aDtlPGY7ZSsrKXt2YXIgZz1kW2VdLGg9bmV3IEMoMypnLmxlbmd0aCwzKTtiLnB1c2goaC5jb3B5VmVjdG9yM3NBcnJheShnKSl9dGhpcy5tb3JwaEF0dHJpYnV0ZXNbY109Yn0wPGEuc2tpbkluZGljZXMubGVuZ3RoJiYoYz1uZXcgQyg0KgphLnNraW5JbmRpY2VzLmxlbmd0aCw0KSx0aGlzLmFkZEF0dHJpYnV0ZSgic2tpbkluZGV4IixjLmNvcHlWZWN0b3I0c0FycmF5KGEuc2tpbkluZGljZXMpKSk7MDxhLnNraW5XZWlnaHRzLmxlbmd0aCYmKGM9bmV3IEMoNCphLnNraW5XZWlnaHRzLmxlbmd0aCw0KSx0aGlzLmFkZEF0dHJpYnV0ZSgic2tpbldlaWdodCIsYy5jb3B5VmVjdG9yNHNBcnJheShhLnNraW5XZWlnaHRzKSkpO251bGwhPT1hLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1hLmJvdW5kaW5nU3BoZXJlLmNsb25lKCkpO251bGwhPT1hLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1hLmJvdW5kaW5nQm94LmNsb25lKCkpO3JldHVybiB0aGlzfSxjb21wdXRlQm91bmRpbmdCb3g6ZnVuY3Rpb24oKXtudWxsPT09dGhpcy5ib3VuZGluZ0JveCYmKHRoaXMuYm91bmRpbmdCb3g9bmV3IFRhKTt2YXIgYT10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247dm9pZCAwIT09YT90aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoYSk6CnRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7KGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLngpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3g6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfSxjb21wdXRlQm91bmRpbmdTcGhlcmU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgVGEsYj1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oKXtudWxsPT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bmV3IEdhKTt2YXIgYz10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoYyl7dmFyIGQ9dGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXI7YS5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKGMpOwphLmdldENlbnRlcihkKTtmb3IodmFyIGU9MCxmPTAsZz1jLmNvdW50O2Y8ZztmKyspYi54PWMuZ2V0WChmKSxiLnk9Yy5nZXRZKGYpLGIuej1jLmdldFooZiksZT1NYXRoLm1heChlLGQuZGlzdGFuY2VUb1NxdWFyZWQoYikpO3RoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzPU1hdGguc3FydChlKTtpc05hTih0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cykmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBDb21wdXRlZCByYWRpdXMgaXMgTmFOLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfX19KCksY29tcHV0ZUZhY2VOb3JtYWxzOmZ1bmN0aW9uKCl7fSxjb21wdXRlVmVydGV4Tm9ybWFsczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuaW5kZXgsYj10aGlzLmF0dHJpYnV0ZXMsYz10aGlzLmdyb3VwcztpZihiLnBvc2l0aW9uKXt2YXIgZD1iLnBvc2l0aW9uLmFycmF5OwppZih2b2lkIDA9PT1iLm5vcm1hbCl0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgTChuZXcgRmxvYXQzMkFycmF5KGQubGVuZ3RoKSwzKSk7ZWxzZSBmb3IodmFyIGU9Yi5ub3JtYWwuYXJyYXksZj0wLGc9ZS5sZW5ndGg7ZjxnO2YrKyllW2ZdPTA7dmFyIGU9Yi5ub3JtYWwuYXJyYXksaCxrLG0sbD1uZXcgcCxxPW5ldyBwLG49bmV3IHAscj1uZXcgcCx6PW5ldyBwO2lmKGEpe2E9YS5hcnJheTswPT09Yy5sZW5ndGgmJnRoaXMuYWRkR3JvdXAoMCxhLmxlbmd0aCk7Zm9yKHZhciB0PTAseT1jLmxlbmd0aDt0PHk7Kyt0KWZvcihmPWNbdF0sZz1mLnN0YXJ0LGg9Zi5jb3VudCxmPWcsZys9aDtmPGc7Zis9MyloPTMqYVtmKzBdLGs9MyphW2YrMV0sbT0zKmFbZisyXSxsLmZyb21BcnJheShkLGgpLHEuZnJvbUFycmF5KGQsayksbi5mcm9tQXJyYXkoZCxtKSxyLnN1YlZlY3RvcnMobixxKSx6LnN1YlZlY3RvcnMobCxxKSxyLmNyb3NzKHopLGVbaF0rPXIueCxlW2grMV0rPXIueSwKZVtoKzJdKz1yLnosZVtrXSs9ci54LGVbaysxXSs9ci55LGVbaysyXSs9ci56LGVbbV0rPXIueCxlW20rMV0rPXIueSxlW20rMl0rPXIuen1lbHNlIGZvcihmPTAsZz1kLmxlbmd0aDtmPGc7Zis9OSlsLmZyb21BcnJheShkLGYpLHEuZnJvbUFycmF5KGQsZiszKSxuLmZyb21BcnJheShkLGYrNiksci5zdWJWZWN0b3JzKG4scSksei5zdWJWZWN0b3JzKGwscSksci5jcm9zcyh6KSxlW2ZdPXIueCxlW2YrMV09ci55LGVbZisyXT1yLnosZVtmKzNdPXIueCxlW2YrNF09ci55LGVbZis1XT1yLnosZVtmKzZdPXIueCxlW2YrN109ci55LGVbZis4XT1yLno7dGhpcy5ub3JtYWxpemVOb3JtYWxzKCk7Yi5ub3JtYWwubmVlZHNVcGRhdGU9ITB9fSxtZXJnZTpmdW5jdGlvbihhLGIpe2lmKCExPT09KGEmJmEuaXNCdWZmZXJHZW9tZXRyeSkpY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVyZ2UoKTogZ2VvbWV0cnkgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5LiIsCmEpO2Vsc2V7dm9pZCAwPT09YiYmKGI9MCk7dmFyIGM9dGhpcy5hdHRyaWJ1dGVzLGQ7Zm9yKGQgaW4gYylpZih2b2lkIDAhPT1hLmF0dHJpYnV0ZXNbZF0pZm9yKHZhciBlPWNbZF0uYXJyYXksZj1hLmF0dHJpYnV0ZXNbZF0sZz1mLmFycmF5LGg9MCxmPWYuaXRlbVNpemUqYjtoPGcubGVuZ3RoO2grKyxmKyspZVtmXT1nW2hdO3JldHVybiB0aGlzfX0sbm9ybWFsaXplTm9ybWFsczpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsLGIsYyxkLGUsZj0wLGc9YS5jb3VudDtmPGc7ZisrKWI9YS5nZXRYKGYpLGM9YS5nZXRZKGYpLGQ9YS5nZXRaKGYpLGU9MS9NYXRoLnNxcnQoYipiK2MqYytkKmQpLGEuc2V0WFlaKGYsYiplLGMqZSxkKmUpfSx0b05vbkluZGV4ZWQ6ZnVuY3Rpb24oKXtpZihudWxsPT09dGhpcy5pbmRleClyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS50b05vbkluZGV4ZWQoKTogR2VvbWV0cnkgaXMgYWxyZWFkeSBub24taW5kZXhlZC4iKSwKdGhpczt2YXIgYT1uZXcgSSxiPXRoaXMuaW5kZXguYXJyYXksYz10aGlzLmF0dHJpYnV0ZXMsZDtmb3IoZCBpbiBjKXtmb3IodmFyIGU9Y1tkXSxmPWUuYXJyYXksZT1lLml0ZW1TaXplLGc9bmV3IGYuY29uc3RydWN0b3IoYi5sZW5ndGgqZSksaCxrPTAsbT0wLGw9Yi5sZW5ndGg7bTxsO20rKyl7aD1iW21dKmU7Zm9yKHZhciBxPTA7cTxlO3ErKylnW2srK109ZltoKytdfWEuYWRkQXR0cmlidXRlKGQsbmV3IEwoZyxlKSl9cmV0dXJuIGF9LHRvSlNPTjpmdW5jdGlvbigpe3ZhciBhPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQnVmZmVyR2VvbWV0cnkiLGdlbmVyYXRvcjoiQnVmZmVyR2VvbWV0cnkudG9KU09OIn19O2EudXVpZD10aGlzLnV1aWQ7YS50eXBlPXRoaXMudHlwZTsiIiE9PXRoaXMubmFtZSYmKGEubmFtZT10aGlzLm5hbWUpO2lmKHZvaWQgMCE9PXRoaXMucGFyYW1ldGVycyl7dmFyIGI9dGhpcy5wYXJhbWV0ZXJzLGM7Zm9yKGMgaW4gYil2b2lkIDAhPT1iW2NdJiYKKGFbY109YltjXSk7cmV0dXJuIGF9YS5kYXRhPXthdHRyaWJ1dGVzOnt9fTt2YXIgZD10aGlzLmluZGV4O251bGwhPT1kJiYoYj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkLmFycmF5KSxhLmRhdGEuaW5kZXg9e3R5cGU6ZC5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OmJ9KTtkPXRoaXMuYXR0cmlidXRlcztmb3IoYyBpbiBkKXt2YXIgZT1kW2NdLGI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5hcnJheSk7YS5kYXRhLmF0dHJpYnV0ZXNbY109e2l0ZW1TaXplOmUuaXRlbVNpemUsdHlwZTplLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6Yixub3JtYWxpemVkOmUubm9ybWFsaXplZH19Yz10aGlzLmdyb3VwczswPGMubGVuZ3RoJiYoYS5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGMpKSk7Yz10aGlzLmJvdW5kaW5nU3BoZXJlO251bGwhPT1jJiYoYS5kYXRhLmJvdW5kaW5nU3BoZXJlPXtjZW50ZXI6Yy5jZW50ZXIudG9BcnJheSgpLApyYWRpdXM6Yy5yYWRpdXN9KTtyZXR1cm4gYX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IEkpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkO3RoaXMuaW5kZXg9bnVsbDt0aGlzLmF0dHJpYnV0ZXM9e307dGhpcy5tb3JwaEF0dHJpYnV0ZXM9e307dGhpcy5ncm91cHM9W107dGhpcy5ib3VuZGluZ1NwaGVyZT10aGlzLmJvdW5kaW5nQm94PW51bGw7dGhpcy5uYW1lPWEubmFtZTtjPWEuaW5kZXg7bnVsbCE9PWMmJnRoaXMuc2V0SW5kZXgoYy5jbG9uZSgpKTtjPWEuYXR0cmlidXRlcztmb3IoYiBpbiBjKXRoaXMuYWRkQXR0cmlidXRlKGIsY1tiXS5jbG9uZSgpKTt2YXIgZT1hLm1vcnBoQXR0cmlidXRlcztmb3IoYiBpbiBlKXt2YXIgZj1bXSxnPWVbYl07Yz0wO2ZvcihkPWcubGVuZ3RoO2M8ZDtjKyspZi5wdXNoKGdbY10uY2xvbmUoKSk7dGhpcy5tb3JwaEF0dHJpYnV0ZXNbYl09Zn1iPWEuZ3JvdXBzO2M9MDtmb3IoZD1iLmxlbmd0aDtjPGQ7YysrKWU9CmJbY10sdGhpcy5hZGRHcm91cChlLnN0YXJ0LGUuY291bnQsZS5tYXRlcmlhbEluZGV4KTtiPWEuYm91bmRpbmdCb3g7bnVsbCE9PWImJih0aGlzLmJvdW5kaW5nQm94PWIuY2xvbmUoKSk7Yj1hLmJvdW5kaW5nU3BoZXJlO251bGwhPT1iJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1iLmNsb25lKCkpO3RoaXMuZHJhd1JhbmdlLnN0YXJ0PWEuZHJhd1JhbmdlLnN0YXJ0O3RoaXMuZHJhd1JhbmdlLmNvdW50PWEuZHJhd1JhbmdlLmNvdW50O3JldHVybiB0aGlzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX0pO0NhLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpDYSxpc01lc2g6ITAsc2V0RHJhd01vZGU6ZnVuY3Rpb24oYSl7dGhpcy5kcmF3TW9kZT1hfSxjb3B5OmZ1bmN0aW9uKGEpe0IucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMuZHJhd01vZGU9YS5kcmF3TW9kZTsKcmV0dXJuIHRoaXN9LHVwZGF0ZU1vcnBoVGFyZ2V0czpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2VvbWV0cnkubW9ycGhUYXJnZXRzO2lmKHZvaWQgMCE9PWEmJjA8YS5sZW5ndGgpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdO3RoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2Zvcih2YXIgYj0wLGM9YS5sZW5ndGg7YjxjO2IrKyl0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2FbYl0ubmFtZV09Yn19LHJheWNhc3Q6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYixjLGQsZSxmLGcpe1VhLmJhcnljb29yZEZyb21Qb2ludChhLGIsYyxkLHQpO2UubXVsdGlwbHlTY2FsYXIodC54KTtmLm11bHRpcGx5U2NhbGFyKHQueSk7Zy5tdWx0aXBseVNjYWxhcih0LnopO2UuYWRkKGYpLmFkZChnKTtyZXR1cm4gZS5jbG9uZSgpfWZ1bmN0aW9uIGIoYSxiLGMsZCxlLGYsZyl7dmFyIGg9YS5tYXRlcmlhbDtpZihudWxsPT09CigxPT09aC5zaWRlP2MuaW50ZXJzZWN0VHJpYW5nbGUoZixlLGQsITAsZyk6Yy5pbnRlcnNlY3RUcmlhbmdsZShkLGUsZiwyIT09aC5zaWRlLGcpKSlyZXR1cm4gbnVsbDt4LmNvcHkoZyk7eC5hcHBseU1hdHJpeDQoYS5tYXRyaXhXb3JsZCk7Yz1iLnJheS5vcmlnaW4uZGlzdGFuY2VUbyh4KTtyZXR1cm4gYzxiLm5lYXJ8fGM+Yi5mYXI/bnVsbDp7ZGlzdGFuY2U6Yyxwb2ludDp4LmNsb25lKCksb2JqZWN0OmF9fWZ1bmN0aW9uIGMoYyxkLGUsZixtLGwsdSxxKXtnLmZyb21CdWZmZXJBdHRyaWJ1dGUoZixsKTtoLmZyb21CdWZmZXJBdHRyaWJ1dGUoZix1KTtrLmZyb21CdWZmZXJBdHRyaWJ1dGUoZixxKTtpZihjPWIoYyxkLGUsZyxoLGsseSkpbSYmKG4uZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLGwpLHIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLHUpLHouZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLHEpLGMudXY9YSh5LGcsaCxrLG4scix6KSksYy5mYWNlPW5ldyBWYShsLHUscSxVYS5ub3JtYWwoZywKaCxrKSksYy5mYWNlSW5kZXg9bDtyZXR1cm4gY312YXIgZD1uZXcgSixlPW5ldyBoYixmPW5ldyBHYSxnPW5ldyBwLGg9bmV3IHAsaz1uZXcgcCxtPW5ldyBwLGw9bmV3IHAscT1uZXcgcCxuPW5ldyBELHI9bmV3IEQsej1uZXcgRCx0PW5ldyBwLHk9bmV3IHAseD1uZXcgcDtyZXR1cm4gZnVuY3Rpb24ocCx0KXt2YXIgdz10aGlzLmdlb21ldHJ5LHg9dGhpcy5tYXRlcmlhbCxDPXRoaXMubWF0cml4V29ybGQ7aWYodm9pZCAwIT09eCYmKG51bGw9PT13LmJvdW5kaW5nU3BoZXJlJiZ3LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLGYuY29weSh3LmJvdW5kaW5nU3BoZXJlKSxmLmFwcGx5TWF0cml4NChDKSwhMSE9PXAucmF5LmludGVyc2VjdHNTcGhlcmUoZikmJihkLmdldEludmVyc2UoQyksZS5jb3B5KHAucmF5KS5hcHBseU1hdHJpeDQoZCksbnVsbD09PXcuYm91bmRpbmdCb3h8fCExIT09ZS5pbnRlcnNlY3RzQm94KHcuYm91bmRpbmdCb3gpKSkpe3ZhciBFO2lmKHcuaXNCdWZmZXJHZW9tZXRyeSl7dmFyIEYsCkQseD13LmluZGV4LEI9dy5hdHRyaWJ1dGVzLnBvc2l0aW9uLEM9dy5hdHRyaWJ1dGVzLnV2LGNhLEk7aWYobnVsbCE9PXgpZm9yKGNhPTAsST14LmNvdW50O2NhPEk7Y2ErPTMpe2lmKHc9eC5nZXRYKGNhKSxGPXguZ2V0WChjYSsxKSxEPXguZ2V0WChjYSsyKSxFPWModGhpcyxwLGUsQixDLHcsRixEKSlFLmZhY2VJbmRleD1NYXRoLmZsb29yKGNhLzMpLHQucHVzaChFKX1lbHNlIGZvcihjYT0wLEk9Qi5jb3VudDtjYTxJO2NhKz0zKWlmKHc9Y2EsRj1jYSsxLEQ9Y2ErMixFPWModGhpcyxwLGUsQixDLHcsRixEKSlFLmluZGV4PXcsdC5wdXNoKEUpfWVsc2UgaWYody5pc0dlb21ldHJ5KXt2YXIgSCxDPUFycmF5LmlzQXJyYXkoeCk7Y2E9dy52ZXJ0aWNlcztJPXcuZmFjZXM7Rj13LmZhY2VWZXJ0ZXhVdnNbMF07MDxGLmxlbmd0aCYmKEI9Rik7Zm9yKHZhciBKPTAsTT1JLmxlbmd0aDtKPE07SisrKXt2YXIgUD1JW0pdO0U9Qz94W1AubWF0ZXJpYWxJbmRleF06eDtpZih2b2lkIDAhPT0KRSl7Rj1jYVtQLmFdO0Q9Y2FbUC5iXTtIPWNhW1AuY107aWYoITA9PT1FLm1vcnBoVGFyZ2V0cyl7RT13Lm1vcnBoVGFyZ2V0czt2YXIgSz10aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztnLnNldCgwLDAsMCk7aC5zZXQoMCwwLDApO2suc2V0KDAsMCwwKTtmb3IodmFyIFc9MCxiYT1FLmxlbmd0aDtXPGJhO1crKyl7dmFyIFQ9S1tXXTtpZigwIT09VCl7dmFyIFE9RVtXXS52ZXJ0aWNlcztnLmFkZFNjYWxlZFZlY3RvcihtLnN1YlZlY3RvcnMoUVtQLmFdLEYpLFQpO2guYWRkU2NhbGVkVmVjdG9yKGwuc3ViVmVjdG9ycyhRW1AuYl0sRCksVCk7ay5hZGRTY2FsZWRWZWN0b3IocS5zdWJWZWN0b3JzKFFbUC5jXSxIKSxUKX19Zy5hZGQoRik7aC5hZGQoRCk7ay5hZGQoSCk7Rj1nO0Q9aDtIPWt9aWYoRT1iKHRoaXMscCxlLEYsRCxILHkpKUImJkJbSl0mJihLPUJbSl0sbi5jb3B5KEtbMF0pLHIuY29weShLWzFdKSx6LmNvcHkoS1syXSksRS51dj1hKHksRixELEgsbixyLHopKSxFLmZhY2U9ClAsRS5mYWNlSW5kZXg9Six0LnB1c2goRSl9fX19fX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmdlb21ldHJ5LHRoaXMubWF0ZXJpYWwpKS5jb3B5KHRoaXMpfX0pO0liLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtJYi5wcm90b3R5cGUuY29uc3RydWN0b3I9SWI7a2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO2tiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1rYjt4Yy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7eGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPXhjO2xiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlKTtsYi5wcm90b3R5cGUuY29uc3RydWN0b3I9bGI7T2EucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOk9hLGlzQ2FtZXJhOiEwLGNvcHk6ZnVuY3Rpb24oYSl7Qi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsCmEpO3RoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoYS5tYXRyaXhXb3JsZEludmVyc2UpO3RoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KGEucHJvamVjdGlvbk1hdHJpeCk7cmV0dXJuIHRoaXN9LGdldFdvcmxkRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHFhO3JldHVybiBmdW5jdGlvbihiKXtiPWJ8fG5ldyBwO3RoaXMuZ2V0V29ybGRRdWF0ZXJuaW9uKGEpO3JldHVybiBiLnNldCgwLDAsLTEpLmFwcGx5UXVhdGVybmlvbihhKX19KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSk7eGEucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp4YSxpc1BlcnNwZWN0aXZlQ2FtZXJhOiEwLGNvcHk6ZnVuY3Rpb24oYSl7T2EucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMuZm92PWEuZm92O3RoaXMuem9vbT1hLnpvb207dGhpcy5uZWFyPQphLm5lYXI7dGhpcy5mYXI9YS5mYXI7dGhpcy5mb2N1cz1hLmZvY3VzO3RoaXMuYXNwZWN0PWEuYXNwZWN0O3RoaXMudmlldz1udWxsPT09YS52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSxhLnZpZXcpO3RoaXMuZmlsbUdhdWdlPWEuZmlsbUdhdWdlO3RoaXMuZmlsbU9mZnNldD1hLmZpbG1PZmZzZXQ7cmV0dXJuIHRoaXN9LHNldEZvY2FsTGVuZ3RoOmZ1bmN0aW9uKGEpe2E9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvYTt0aGlzLmZvdj0yKlkuUkFEMkRFRypNYXRoLmF0YW4oYSk7dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LGdldEZvY2FsTGVuZ3RoOmZ1bmN0aW9uKCl7dmFyIGE9TWF0aC50YW4oLjUqWS5ERUcyUkFEKnRoaXMuZm92KTtyZXR1cm4uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS9hfSxnZXRFZmZlY3RpdmVGT1Y6ZnVuY3Rpb24oKXtyZXR1cm4gMipZLlJBRDJERUcqTWF0aC5hdGFuKE1hdGgudGFuKC41KlkuREVHMlJBRCp0aGlzLmZvdikvdGhpcy56b29tKX0sCmdldEZpbG1XaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbG1HYXVnZSpNYXRoLm1pbih0aGlzLmFzcGVjdCwxKX0sZ2V0RmlsbUhlaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX0sc2V0Vmlld09mZnNldDpmdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5hc3BlY3Q9YS9iO3RoaXMudmlldz17ZnVsbFdpZHRoOmEsZnVsbEhlaWdodDpiLG9mZnNldFg6YyxvZmZzZXRZOmQsd2lkdGg6ZSxoZWlnaHQ6Zn07dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LGNsZWFyVmlld09mZnNldDpmdW5jdGlvbigpe3RoaXMudmlldz1udWxsO3RoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSx1cGRhdGVQcm9qZWN0aW9uTWF0cml4OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5uZWFyLGI9YSpNYXRoLnRhbiguNSpZLkRFRzJSQUQqdGhpcy5mb3YpL3RoaXMuem9vbSxjPTIqYixkPXRoaXMuYXNwZWN0KmMsZT0tLjUqZCxmPQp0aGlzLnZpZXc7aWYobnVsbCE9PWYpdmFyIGc9Zi5mdWxsV2lkdGgsaD1mLmZ1bGxIZWlnaHQsZT1lK2Yub2Zmc2V0WCpkL2csYj1iLWYub2Zmc2V0WSpjL2gsZD1mLndpZHRoL2cqZCxjPWYuaGVpZ2h0L2gqYztmPXRoaXMuZmlsbU9mZnNldDswIT09ZiYmKGUrPWEqZi90aGlzLmdldEZpbG1XaWR0aCgpKTt0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKGUsZStkLGIsYi1jLGEsdGhpcy5mYXIpfSx0b0pTT046ZnVuY3Rpb24oYSl7YT1CLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGEpO2Eub2JqZWN0LmZvdj10aGlzLmZvdjthLm9iamVjdC56b29tPXRoaXMuem9vbTthLm9iamVjdC5uZWFyPXRoaXMubmVhcjthLm9iamVjdC5mYXI9dGhpcy5mYXI7YS5vYmplY3QuZm9jdXM9dGhpcy5mb2N1czthLm9iamVjdC5hc3BlY3Q9dGhpcy5hc3BlY3Q7bnVsbCE9PXRoaXMudmlldyYmKGEub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKTthLm9iamVjdC5maWxtR2F1Z2U9CnRoaXMuZmlsbUdhdWdlO2Eub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0O3JldHVybiBhfX0pO0piLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoT2EucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6SmIsaXNPcnRob2dyYXBoaWNDYW1lcmE6ITAsY29weTpmdW5jdGlvbihhKXtPYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5sZWZ0PWEubGVmdDt0aGlzLnJpZ2h0PWEucmlnaHQ7dGhpcy50b3A9YS50b3A7dGhpcy5ib3R0b209YS5ib3R0b207dGhpcy5uZWFyPWEubmVhcjt0aGlzLmZhcj1hLmZhcjt0aGlzLnpvb209YS56b29tO3RoaXMudmlldz1udWxsPT09YS52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSxhLnZpZXcpO3JldHVybiB0aGlzfSxzZXRWaWV3T2Zmc2V0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLnZpZXc9e2Z1bGxXaWR0aDphLGZ1bGxIZWlnaHQ6YixvZmZzZXRYOmMsb2Zmc2V0WTpkLHdpZHRoOmUsaGVpZ2h0OmZ9Owp0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX0sY2xlYXJWaWV3T2Zmc2V0OmZ1bmN0aW9uKCl7dGhpcy52aWV3PW51bGw7dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LHVwZGF0ZVByb2plY3Rpb25NYXRyaXg6ZnVuY3Rpb24oKXt2YXIgYT0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksYj0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksYz0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIsZD0odGhpcy50b3ArdGhpcy5ib3R0b20pLzIsZT1jLWEsYz1jK2EsYT1kK2IsYj1kLWI7aWYobnVsbCE9PXRoaXMudmlldyl2YXIgYz10aGlzLnpvb20vKHRoaXMudmlldy53aWR0aC90aGlzLnZpZXcuZnVsbFdpZHRoKSxiPXRoaXMuem9vbS8odGhpcy52aWV3LmhlaWdodC90aGlzLnZpZXcuZnVsbEhlaWdodCksZj0odGhpcy5yaWdodC10aGlzLmxlZnQpL3RoaXMudmlldy53aWR0aCxkPSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvdGhpcy52aWV3LmhlaWdodCwKZT1lK3RoaXMudmlldy5vZmZzZXRYL2MqZixjPWUrdGhpcy52aWV3LndpZHRoL2MqZixhPWEtdGhpcy52aWV3Lm9mZnNldFkvYipkLGI9YS10aGlzLnZpZXcuaGVpZ2h0L2IqZDt0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZU9ydGhvZ3JhcGhpYyhlLGMsYSxiLHRoaXMubmVhcix0aGlzLmZhcil9LHRvSlNPTjpmdW5jdGlvbihhKXthPUIucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsYSk7YS5vYmplY3Quem9vbT10aGlzLnpvb207YS5vYmplY3QubGVmdD10aGlzLmxlZnQ7YS5vYmplY3QucmlnaHQ9dGhpcy5yaWdodDthLm9iamVjdC50b3A9dGhpcy50b3A7YS5vYmplY3QuYm90dG9tPXRoaXMuYm90dG9tO2Eub2JqZWN0Lm5lYXI9dGhpcy5uZWFyO2Eub2JqZWN0LmZhcj10aGlzLmZhcjtudWxsIT09dGhpcy52aWV3JiYoYS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpO3JldHVybiBhfX0pO3ZhciBiZz0wO0tiLnByb3RvdHlwZS5pc0ZvZ0V4cDI9ITA7CktiLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgS2IodGhpcy5jb2xvci5nZXRIZXgoKSx0aGlzLmRlbnNpdHkpfTtLYi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGEpe3JldHVybnt0eXBlOiJGb2dFeHAyIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLGRlbnNpdHk6dGhpcy5kZW5zaXR5fX07TGIucHJvdG90eXBlLmlzRm9nPSEwO0xiLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgTGIodGhpcy5jb2xvci5nZXRIZXgoKSx0aGlzLm5lYXIsdGhpcy5mYXIpfTtMYi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGEpe3JldHVybnt0eXBlOiJGb2ciLGNvbG9yOnRoaXMuY29sb3IuZ2V0SGV4KCksbmVhcjp0aGlzLm5lYXIsZmFyOnRoaXMuZmFyfX07bWQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOm1kLGNvcHk6ZnVuY3Rpb24oYSxiKXtCLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcywKYSxiKTtudWxsIT09YS5iYWNrZ3JvdW5kJiYodGhpcy5iYWNrZ3JvdW5kPWEuYmFja2dyb3VuZC5jbG9uZSgpKTtudWxsIT09YS5mb2cmJih0aGlzLmZvZz1hLmZvZy5jbG9uZSgpKTtudWxsIT09YS5vdmVycmlkZU1hdGVyaWFsJiYodGhpcy5vdmVycmlkZU1hdGVyaWFsPWEub3ZlcnJpZGVNYXRlcmlhbC5jbG9uZSgpKTt0aGlzLmF1dG9VcGRhdGU9YS5hdXRvVXBkYXRlO3RoaXMubWF0cml4QXV0b1VwZGF0ZT1hLm1hdHJpeEF1dG9VcGRhdGU7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihhKXt2YXIgYj1CLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGEpO251bGwhPT10aGlzLmJhY2tncm91bmQmJihiLm9iamVjdC5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04oYSkpO251bGwhPT10aGlzLmZvZyYmKGIub2JqZWN0LmZvZz10aGlzLmZvZy50b0pTT04oKSk7cmV0dXJuIGJ9fSk7WWQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSksCntjb25zdHJ1Y3RvcjpZZCxpc0xlbnNGbGFyZTohMCxjb3B5OmZ1bmN0aW9uKGEpe0IucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMucG9zaXRpb25TY3JlZW4uY29weShhLnBvc2l0aW9uU2NyZWVuKTt0aGlzLmN1c3RvbVVwZGF0ZUNhbGxiYWNrPWEuY3VzdG9tVXBkYXRlQ2FsbGJhY2s7Zm9yKHZhciBiPTAsYz1hLmxlbnNGbGFyZXMubGVuZ3RoO2I8YztiKyspdGhpcy5sZW5zRmxhcmVzLnB1c2goYS5sZW5zRmxhcmVzW2JdKTtyZXR1cm4gdGhpc30sYWRkOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2b2lkIDA9PT1iJiYoYj0tMSk7dm9pZCAwPT09YyYmKGM9MCk7dm9pZCAwPT09ZiYmKGY9MSk7dm9pZCAwPT09ZSYmKGU9bmV3IEgoMTY3NzcyMTUpKTt2b2lkIDA9PT1kJiYoZD0xKTtjPU1hdGgubWluKGMsTWF0aC5tYXgoMCxjKSk7dGhpcy5sZW5zRmxhcmVzLnB1c2goe3RleHR1cmU6YSxzaXplOmIsZGlzdGFuY2U6Yyx4OjAseTowLHo6MCxzY2FsZToxLHJvdGF0aW9uOjAsCm9wYWNpdHk6Zixjb2xvcjplLGJsZW5kaW5nOmR9KX0sdXBkYXRlTGVuc0ZsYXJlczpmdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5sZW5zRmxhcmVzLmxlbmd0aCxjLGQ9MiotdGhpcy5wb3NpdGlvblNjcmVlbi54LGU9MiotdGhpcy5wb3NpdGlvblNjcmVlbi55O2ZvcihhPTA7YTxiO2ErKyljPXRoaXMubGVuc0ZsYXJlc1thXSxjLng9dGhpcy5wb3NpdGlvblNjcmVlbi54K2QqYy5kaXN0YW5jZSxjLnk9dGhpcy5wb3NpdGlvblNjcmVlbi55K2UqYy5kaXN0YW5jZSxjLndhbnRlZFJvdGF0aW9uPWMueCpNYXRoLlBJKi4yNSxjLnJvdGF0aW9uKz0uMjUqKGMud2FudGVkUm90YXRpb24tYy5yb3RhdGlvbil9fSk7Y2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWi5wcm90b3R5cGUpO2NiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jYjtjYi5wcm90b3R5cGUuaXNTcHJpdGVNYXRlcmlhbD0hMDtjYi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtaLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcywKYSk7dGhpcy5jb2xvci5jb3B5KGEuY29sb3IpO3RoaXMubWFwPWEubWFwO3RoaXMucm90YXRpb249YS5yb3RhdGlvbjtyZXR1cm4gdGhpc307QWMucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkFjLGlzU3ByaXRlOiEwLHJheWNhc3Q6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwLGM9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGQsZSl7Yi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7ZC5yYXkuY2xvc2VzdFBvaW50VG9Qb2ludChiLGEpO2Muc2V0RnJvbU1hdHJpeFNjYWxlKHRoaXMubWF0cml4V29ybGQpO3ZhciBmPWMueCpjLnkvNDtiLmRpc3RhbmNlVG9TcXVhcmVkKGEpPmZ8fChmPWQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGEpLGY8ZC5uZWFyfHxmPmQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOmYscG9pbnQ6YS5jbG9uZSgpLGZhY2U6bnVsbCxvYmplY3Q6dGhpc30pKX19KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5tYXRlcmlhbCkpLmNvcHkodGhpcyl9fSk7CkJjLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpCYyxjb3B5OmZ1bmN0aW9uKGEpe0IucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEsITEpO2E9YS5sZXZlbHM7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aDtiPGM7YisrKXt2YXIgZD1hW2JdO3RoaXMuYWRkTGV2ZWwoZC5vYmplY3QuY2xvbmUoKSxkLmRpc3RhbmNlKX1yZXR1cm4gdGhpc30sYWRkTGV2ZWw6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0wKTtiPU1hdGguYWJzKGIpO2Zvcih2YXIgYz10aGlzLmxldmVscyxkPTA7ZDxjLmxlbmd0aCYmIShiPGNbZF0uZGlzdGFuY2UpO2QrKyk7Yy5zcGxpY2UoZCwwLHtkaXN0YW5jZTpiLG9iamVjdDphfSk7dGhpcy5hZGQoYSl9LGdldE9iamVjdEZvckRpc3RhbmNlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLmxldmVscyxjPTEsZD1iLmxlbmd0aDtjPGQmJiEoYTxiW2NdLmRpc3RhbmNlKTtjKyspO3JldHVybiBiW2MtCjFdLm9iamVjdH0scmF5Y2FzdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiLGMpe2Euc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpO3ZhciBkPWIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGEpO3RoaXMuZ2V0T2JqZWN0Rm9yRGlzdGFuY2UoZCkucmF5Y2FzdChiLGMpfX0oKSx1cGRhdGU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwO3JldHVybiBmdW5jdGlvbihjKXt2YXIgZD10aGlzLmxldmVscztpZigxPGQubGVuZ3RoKXthLnNldEZyb21NYXRyaXhQb3NpdGlvbihjLm1hdHJpeFdvcmxkKTtiLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtjPWEuZGlzdGFuY2VUbyhiKTtkWzBdLm9iamVjdC52aXNpYmxlPSEwO2Zvcih2YXIgZT0xLGY9ZC5sZW5ndGg7ZTxmO2UrKylpZihjPj1kW2VdLmRpc3RhbmNlKWRbZS0xXS5vYmplY3QudmlzaWJsZT0hMSxkW2VdLm9iamVjdC52aXNpYmxlPSEwO2Vsc2UgYnJlYWs7CmZvcig7ZTxmO2UrKylkW2VdLm9iamVjdC52aXNpYmxlPSExfX19KCksdG9KU09OOmZ1bmN0aW9uKGEpe2E9Qi5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxhKTthLm9iamVjdC5sZXZlbHM9W107Zm9yKHZhciBiPXRoaXMubGV2ZWxzLGM9MCxkPWIubGVuZ3RoO2M8ZDtjKyspe3ZhciBlPWJbY107YS5vYmplY3QubGV2ZWxzLnB1c2goe29iamVjdDplLm9iamVjdC51dWlkLGRpc3RhbmNlOmUuZGlzdGFuY2V9KX1yZXR1cm4gYX19KTtPYmplY3QuYXNzaWduKENjLnByb3RvdHlwZSx7Y2FsY3VsYXRlSW52ZXJzZXM6ZnVuY3Rpb24oKXt0aGlzLmJvbmVJbnZlcnNlcz1bXTtmb3IodmFyIGE9MCxiPXRoaXMuYm9uZXMubGVuZ3RoO2E8YjthKyspe3ZhciBjPW5ldyBKO3RoaXMuYm9uZXNbYV0mJmMuZ2V0SW52ZXJzZSh0aGlzLmJvbmVzW2FdLm1hdHJpeFdvcmxkKTt0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKGMpfX0scG9zZTpmdW5jdGlvbigpe3ZhciBhLGIsYztiPTA7Zm9yKGM9dGhpcy5ib25lcy5sZW5ndGg7YjwKYztiKyspKGE9dGhpcy5ib25lc1tiXSkmJmEubWF0cml4V29ybGQuZ2V0SW52ZXJzZSh0aGlzLmJvbmVJbnZlcnNlc1tiXSk7Yj0wO2ZvcihjPXRoaXMuYm9uZXMubGVuZ3RoO2I8YztiKyspaWYoYT10aGlzLmJvbmVzW2JdKWEucGFyZW50JiZhLnBhcmVudC5pc0JvbmU/KGEubWF0cml4LmdldEludmVyc2UoYS5wYXJlbnQubWF0cml4V29ybGQpLGEubWF0cml4Lm11bHRpcGx5KGEubWF0cml4V29ybGQpKTphLm1hdHJpeC5jb3B5KGEubWF0cml4V29ybGQpLGEubWF0cml4LmRlY29tcG9zZShhLnBvc2l0aW9uLGEucXVhdGVybmlvbixhLnNjYWxlKX0sdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEosYj1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGM9dGhpcy5ib25lcyxkPXRoaXMuYm9uZUludmVyc2VzLGU9dGhpcy5ib25lTWF0cmljZXMsZj10aGlzLmJvbmVUZXh0dXJlLGc9MCxoPWMubGVuZ3RoO2c8aDtnKyspYS5tdWx0aXBseU1hdHJpY2VzKGNbZ10/Y1tnXS5tYXRyaXhXb3JsZDoKYixkW2ddKSxhLnRvQXJyYXkoZSwxNipnKTt2b2lkIDAhPT1mJiYoZi5uZWVkc1VwZGF0ZT0hMCl9fSgpLGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDYyh0aGlzLmJvbmVzLHRoaXMuYm9uZUludmVyc2VzKX19KTtuZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6bmQsaXNCb25lOiEwfSk7b2QucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShDYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpvZCxpc1NraW5uZWRNZXNoOiEwLGluaXRCb25lczpmdW5jdGlvbigpe3ZhciBhPVtdLGIsYyxkLGU7aWYodGhpcy5nZW9tZXRyeSYmdm9pZCAwIT09dGhpcy5nZW9tZXRyeS5ib25lcyl7ZD0wO2ZvcihlPXRoaXMuZ2VvbWV0cnkuYm9uZXMubGVuZ3RoO2Q8ZTtkKyspYz10aGlzLmdlb21ldHJ5LmJvbmVzW2RdLGI9bmV3IG5kLGEucHVzaChiKSxiLm5hbWU9Yy5uYW1lLGIucG9zaXRpb24uZnJvbUFycmF5KGMucG9zKSwKYi5xdWF0ZXJuaW9uLmZyb21BcnJheShjLnJvdHEpLHZvaWQgMCE9PWMuc2NsJiZiLnNjYWxlLmZyb21BcnJheShjLnNjbCk7ZD0wO2ZvcihlPXRoaXMuZ2VvbWV0cnkuYm9uZXMubGVuZ3RoO2Q8ZTtkKyspYz10aGlzLmdlb21ldHJ5LmJvbmVzW2RdLC0xIT09Yy5wYXJlbnQmJm51bGwhPT1jLnBhcmVudCYmdm9pZCAwIT09YVtjLnBhcmVudF0/YVtjLnBhcmVudF0uYWRkKGFbZF0pOnRoaXMuYWRkKGFbZF0pfXRoaXMudXBkYXRlTWF0cml4V29ybGQoITApO3JldHVybiBhfSxiaW5kOmZ1bmN0aW9uKGEsYil7dGhpcy5za2VsZXRvbj1hO3ZvaWQgMD09PWImJih0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKSx0aGlzLnNrZWxldG9uLmNhbGN1bGF0ZUludmVyc2VzKCksYj10aGlzLm1hdHJpeFdvcmxkKTt0aGlzLmJpbmRNYXRyaXguY29weShiKTt0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmdldEludmVyc2UoYil9LHBvc2U6ZnVuY3Rpb24oKXt0aGlzLnNrZWxldG9uLnBvc2UoKX0sbm9ybWFsaXplU2tpbldlaWdodHM6ZnVuY3Rpb24oKXt2YXIgYSwKYjtpZih0aGlzLmdlb21ldHJ5JiZ0aGlzLmdlb21ldHJ5LmlzR2VvbWV0cnkpZm9yKGI9MDtiPHRoaXMuZ2VvbWV0cnkuc2tpbldlaWdodHMubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5nZW9tZXRyeS5za2luV2VpZ2h0c1tiXTthPTEvYy5sZW5ndGhNYW5oYXR0YW4oKTtJbmZpbml0eSE9PWE/Yy5tdWx0aXBseVNjYWxhcihhKTpjLnNldCgxLDAsMCwwKX1lbHNlIGlmKHRoaXMuZ2VvbWV0cnkmJnRoaXMuZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSl7dmFyIGM9bmV3IGdhLGQ9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7Zm9yKGI9MDtiPGQuY291bnQ7YisrKWMueD1kLmdldFgoYiksYy55PWQuZ2V0WShiKSxjLno9ZC5nZXRaKGIpLGMudz1kLmdldFcoYiksYT0xL2MubGVuZ3RoTWFuaGF0dGFuKCksSW5maW5pdHkhPT1hP2MubXVsdGlwbHlTY2FsYXIoYSk6Yy5zZXQoMSwwLDAsMCksZC5zZXRYWVpXKGIsYy54LGMueSxjLnosYy53KX19LHVwZGF0ZU1hdHJpeFdvcmxkOmZ1bmN0aW9uKGEpe0NhLnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZC5jYWxsKHRoaXMsCmEpOyJhdHRhY2hlZCI9PT10aGlzLmJpbmRNb2RlP3RoaXMuYmluZE1hdHJpeEludmVyc2UuZ2V0SW52ZXJzZSh0aGlzLm1hdHJpeFdvcmxkKToiZGV0YWNoZWQiPT09dGhpcy5iaW5kTW9kZT90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmdldEludmVyc2UodGhpcy5iaW5kTWF0cml4KTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuZ2VvbWV0cnksdGhpcy5tYXRlcmlhbCkpLmNvcHkodGhpcyl9fSk7aGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWi5wcm90b3R5cGUpO2hhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1oYTtoYS5wcm90b3R5cGUuaXNMaW5lQmFzaWNNYXRlcmlhbD0hMDtoYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtaLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLmNvbG9yLmNvcHkoYS5jb2xvcik7CnRoaXMubGluZXdpZHRoPWEubGluZXdpZHRoO3RoaXMubGluZWNhcD1hLmxpbmVjYXA7dGhpcy5saW5lam9pbj1hLmxpbmVqb2luO3JldHVybiB0aGlzfTt5YS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6eWEsaXNMaW5lOiEwLHJheWNhc3Q6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSixiPW5ldyBoYixjPW5ldyBHYTtyZXR1cm4gZnVuY3Rpb24oZCxlKXt2YXIgZj1kLmxpbmVQcmVjaXNpb24sZj1mKmYsZz10aGlzLmdlb21ldHJ5LGg9dGhpcy5tYXRyaXhXb3JsZDtudWxsPT09Zy5ib3VuZGluZ1NwaGVyZSYmZy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtjLmNvcHkoZy5ib3VuZGluZ1NwaGVyZSk7Yy5hcHBseU1hdHJpeDQoaCk7aWYoITEhPT1kLnJheS5pbnRlcnNlY3RzU3BoZXJlKGMpKXthLmdldEludmVyc2UoaCk7Yi5jb3B5KGQucmF5KS5hcHBseU1hdHJpeDQoYSk7dmFyIGs9bmV3IHAsbT1uZXcgcCxoPW5ldyBwLApsPW5ldyBwLHE9dGhpcyYmdGhpcy5pc0xpbmVTZWdtZW50cz8yOjE7aWYoZy5pc0J1ZmZlckdlb21ldHJ5KXt2YXIgbj1nLmluZGV4LHI9Zy5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O2lmKG51bGwhPT1uKWZvcih2YXIgbj1uLmFycmF5LGc9MCx6PW4ubGVuZ3RoLTE7Zzx6O2crPXEpe3ZhciB0PW5bZysxXTtrLmZyb21BcnJheShyLDMqbltnXSk7bS5mcm9tQXJyYXkociwzKnQpO3Q9Yi5kaXN0YW5jZVNxVG9TZWdtZW50KGssbSxsLGgpO3Q+Znx8KGwuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLHQ9ZC5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCksdDxkLm5lYXJ8fHQ+ZC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6dCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OmcsZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSkpfWVsc2UgZm9yKGc9MCx6PXIubGVuZ3RoLzMtMTtnPHo7Zys9cSlrLmZyb21BcnJheShyLAozKmcpLG0uZnJvbUFycmF5KHIsMypnKzMpLHQ9Yi5kaXN0YW5jZVNxVG9TZWdtZW50KGssbSxsLGgpLHQ+Znx8KGwuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLHQ9ZC5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCksdDxkLm5lYXJ8fHQ+ZC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6dCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OmcsZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSkpfWVsc2UgaWYoZy5pc0dlb21ldHJ5KWZvcihrPWcudmVydGljZXMsbT1rLmxlbmd0aCxnPTA7ZzxtLTE7Zys9cSl0PWIuZGlzdGFuY2VTcVRvU2VnbWVudChrW2ddLGtbZysxXSxsLGgpLHQ+Znx8KGwuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLHQ9ZC5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCksdDxkLm5lYXJ8fHQ+ZC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6dCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLAppbmRleDpnLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pKX19fSgpLGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuZ2VvbWV0cnksdGhpcy5tYXRlcmlhbCkpLmNvcHkodGhpcyl9fSk7ZGEucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZSh5YS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpkYSxpc0xpbmVTZWdtZW50czohMH0pO3BkLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoeWEucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6cGQsaXNMaW5lTG9vcDohMH0pO0xhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTtMYS5wcm90b3R5cGUuY29uc3RydWN0b3I9TGE7TGEucHJvdG90eXBlLmlzUG9pbnRzTWF0ZXJpYWw9ITA7TGEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5jb2xvci5jb3B5KGEuY29sb3IpOwp0aGlzLm1hcD1hLm1hcDt0aGlzLnNpemU9YS5zaXplO3RoaXMuc2l6ZUF0dGVudWF0aW9uPWEuc2l6ZUF0dGVudWF0aW9uO3JldHVybiB0aGlzfTtNYi5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6TWIsaXNQb2ludHM6ITAscmF5Y2FzdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBKLGI9bmV3IGhiLGM9bmV3IEdhO3JldHVybiBmdW5jdGlvbihkLGUpe2Z1bmN0aW9uIGYoYSxjKXt2YXIgZj1iLmRpc3RhbmNlU3FUb1BvaW50KGEpO2lmKGY8bCl7dmFyIGg9Yi5jbG9zZXN0UG9pbnRUb1BvaW50KGEpO2guYXBwbHlNYXRyaXg0KGspO3ZhciBtPWQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGgpO208ZC5uZWFyfHxtPmQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOm0sZGlzdGFuY2VUb1JheTpNYXRoLnNxcnQoZikscG9pbnQ6aC5jbG9uZSgpLGluZGV4OmMsZmFjZTpudWxsLG9iamVjdDpnfSl9fXZhciBnPXRoaXMsaD10aGlzLmdlb21ldHJ5LAprPXRoaXMubWF0cml4V29ybGQsbT1kLnBhcmFtcy5Qb2ludHMudGhyZXNob2xkO251bGw9PT1oLmJvdW5kaW5nU3BoZXJlJiZoLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO2MuY29weShoLmJvdW5kaW5nU3BoZXJlKTtjLmFwcGx5TWF0cml4NChrKTtjLnJhZGl1cys9bTtpZighMSE9PWQucmF5LmludGVyc2VjdHNTcGhlcmUoYykpe2EuZ2V0SW52ZXJzZShrKTtiLmNvcHkoZC5yYXkpLmFwcGx5TWF0cml4NChhKTt2YXIgbT1tLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLGw9bSptLG09bmV3IHA7aWYoaC5pc0J1ZmZlckdlb21ldHJ5KXt2YXIgcT1oLmluZGV4LGg9aC5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O2lmKG51bGwhPT1xKWZvcih2YXIgbj1xLmFycmF5LHE9MCxyPW4ubGVuZ3RoO3E8cjtxKyspe3ZhciB6PW5bcV07bS5mcm9tQXJyYXkoaCwzKnopO2YobSx6KX1lbHNlIGZvcihxPTAsbj1oLmxlbmd0aC8zO3E8bjtxKyspbS5mcm9tQXJyYXkoaCwKMypxKSxmKG0scSl9ZWxzZSBmb3IobT1oLnZlcnRpY2VzLHE9MCxuPW0ubGVuZ3RoO3E8bjtxKyspZihtW3FdLHEpfX19KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5nZW9tZXRyeSx0aGlzLm1hdGVyaWFsKSkuY29weSh0aGlzKX19KTtEYy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6RGN9KTtxZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShYLnByb3RvdHlwZSk7cWQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXFkO05iLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFgucHJvdG90eXBlKTtOYi5wcm90b3R5cGUuY29uc3RydWN0b3I9TmI7TmIucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITA7cmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWC5wcm90b3R5cGUpO3JkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yZDtFYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShYLnByb3RvdHlwZSk7CkVjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FYztFYy5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7T2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO09iLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1PYjtGYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7RmMucHJvdG90eXBlLmNvbnN0cnVjdG9yPUZjO1BiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlKTtQYi5wcm90b3R5cGUuY29uc3RydWN0b3I9UGI7R2MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO0djLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1HYztpYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7aWEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWlhO0hjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtIYy5wcm90b3R5cGUuY29uc3RydWN0b3I9SGM7UWIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaWEucHJvdG90eXBlKTsKUWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVFiO0ljLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtJYy5wcm90b3R5cGUuY29uc3RydWN0b3I9SWM7bWIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaWEucHJvdG90eXBlKTttYi5wcm90b3R5cGUuY29uc3RydWN0b3I9bWI7SmMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO0pjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1KYztSYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpYS5wcm90b3R5cGUpO1JiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1SYjtLYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7S2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPUtjO1NiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGlhLnByb3RvdHlwZSk7U2IucHJvdG90eXBlLmNvbnN0cnVjdG9yPVNiO0xjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtMYy5wcm90b3R5cGUuY29uc3RydWN0b3I9CkxjO1RiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlKTtUYi5wcm90b3R5cGUuY29uc3RydWN0b3I9VGI7TWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO01jLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1NYztVYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7VWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVViO05jLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtOYy5wcm90b3R5cGUuY29uc3RydWN0b3I9TmM7VmIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO1ZiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WYjt2YXIgemE9e2FyZWE6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEubGVuZ3RoLGM9MCxkPWItMSxlPTA7ZTxiO2Q9ZSsrKWMrPWFbZF0ueCphW2VdLnktYVtlXS54KmFbZF0ueTtyZXR1cm4uNSpjfSx0cmlhbmd1bGF0ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihhLGIpe3ZhciBjPQphLmxlbmd0aDtpZigzPmMpcmV0dXJuIG51bGw7dmFyIGQ9W10sZT1bXSxmPVtdLGcsaCxrO2lmKDA8emEuYXJlYShhKSlmb3IoaD0wO2g8YztoKyspZVtoXT1oO2Vsc2UgZm9yKGg9MDtoPGM7aCsrKWVbaF09Yy0xLWg7dmFyIG09MipjO2ZvcihoPWMtMTsyPGM7KXtpZigwPj1tLS0pe2NvbnNvbGUud2FybigiVEhSRUUuU2hhcGVVdGlsczogVW5hYmxlIHRvIHRyaWFuZ3VsYXRlIHBvbHlnb24hIGluIHRyaWFuZ3VsYXRlKCkiKTticmVha31nPWg7Yzw9ZyYmKGc9MCk7aD1nKzE7Yzw9aCYmKGg9MCk7az1oKzE7Yzw9ayYmKGs9MCk7dmFyIGw7YTp7dmFyIHEsbixyLHAsdCx5LHgsdjtxPWFbZVtnXV0ueDtuPWFbZVtnXV0ueTtyPWFbZVtoXV0ueDtwPWFbZVtoXV0ueTt0PWFbZVtrXV0ueDt5PWFbZVtrXV0ueTtpZigwPj0oci1xKSooeS1uKS0ocC1uKSoodC1xKSlsPSExO2Vsc2V7dmFyIEcsdyxPLEMsRSxGLEQsQixJLEg7Rz10LXI7dz15LXA7Tz1xLXQ7Qz1uLXk7RT1yLXE7Rj1wLW47CmZvcihsPTA7bDxjO2wrKylpZih4PWFbZVtsXV0ueCx2PWFbZVtsXV0ueSwhKHg9PT1xJiZ2PT09bnx8eD09PXImJnY9PT1wfHx4PT09dCYmdj09PXkpJiYoRD14LXEsQj12LW4sST14LXIsSD12LXAseC09dCx2LT15LEk9RypILXcqSSxEPUUqQi1GKkQsQj1PKnYtQyp4LEk+PS1OdW1iZXIuRVBTSUxPTiYmQj49LU51bWJlci5FUFNJTE9OJiZEPj0tTnVtYmVyLkVQU0lMT04pKXtsPSExO2JyZWFrIGF9bD0hMH19aWYobCl7ZC5wdXNoKFthW2VbZ11dLGFbZVtoXV0sYVtlW2tdXV0pO2YucHVzaChbZVtnXSxlW2hdLGVba11dKTtnPWg7Zm9yKGs9aCsxO2s8YztnKyssaysrKWVbZ109ZVtrXTtjLS07bT0yKmN9fXJldHVybiBiP2Y6ZH19KCksdHJpYW5ndWxhdGVTaGFwZTpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7dmFyIGI9YS5sZW5ndGg7MjxiJiZhW2ItMV0uZXF1YWxzKGFbMF0pJiZhLnBvcCgpfWZ1bmN0aW9uIGQoYSxiLGMpe3JldHVybiBhLnghPT1iLng/YS54PGIueD9hLng8PQpjLngmJmMueDw9Yi54OmIueDw9Yy54JiZjLng8PWEueDphLnk8Yi55P2EueTw9Yy55JiZjLnk8PWIueTpiLnk8PWMueSYmYy55PD1hLnl9ZnVuY3Rpb24gZShhLGIsYyxlLGYpe3ZhciBnPWIueC1hLngsaD1iLnktYS55LGs9ZS54LWMueCxtPWUueS1jLnksbD1hLngtYy54LG49YS55LWMueSxxPWgqay1nKm0sdT1oKmwtZypuO2lmKE1hdGguYWJzKHEpPk51bWJlci5FUFNJTE9OKXtpZigwPHEpe2lmKDA+dXx8dT5xKXJldHVybltdO2s9bSpsLWsqbjtpZigwPmt8fGs+cSlyZXR1cm5bXX1lbHNle2lmKDA8dXx8dTxxKXJldHVybltdO2s9bSpsLWsqbjtpZigwPGt8fGs8cSlyZXR1cm5bXX1pZigwPT09aylyZXR1cm4hZnx8MCE9PXUmJnUhPT1xP1thXTpbXTtpZihrPT09cSlyZXR1cm4hZnx8MCE9PXUmJnUhPT1xP1tiXTpbXTtpZigwPT09dSlyZXR1cm5bY107aWYodT09PXEpcmV0dXJuW2VdO2Y9ay9xO3JldHVyblt7eDphLngrZipnLHk6YS55K2YqaH1dfWlmKDAhPT11fHxtKmwhPT0KaypuKXJldHVybltdO2g9MD09PWcmJjA9PT1oO2s9MD09PWsmJjA9PT1tO2lmKGgmJmspcmV0dXJuIGEueCE9PWMueHx8YS55IT09Yy55P1tdOlthXTtpZihoKXJldHVybiBkKGMsZSxhKT9bYV06W107aWYoaylyZXR1cm4gZChhLGIsYyk/W2NdOltdOzAhPT1nPyhhLng8Yi54PyhnPWEsaz1hLngsaD1iLGE9Yi54KTooZz1iLGs9Yi54LGg9YSxhPWEueCksYy54PGUueD8oYj1jLHE9Yy54LG09ZSxjPWUueCk6KGI9ZSxxPWUueCxtPWMsYz1jLngpKTooYS55PGIueT8oZz1hLGs9YS55LGg9YixhPWIueSk6KGc9YixrPWIueSxoPWEsYT1hLnkpLGMueTxlLnk/KGI9YyxxPWMueSxtPWUsYz1lLnkpOihiPWUscT1lLnksbT1jLGM9Yy55KSk7cmV0dXJuIGs8PXE/YTxxP1tdOmE9PT1xP2Y/W106W2JdOmE8PWM/W2IsaF06W2IsbV06az5jP1tdOms9PT1jP2Y/W106W2ddOmE8PWM/W2csaF06W2csbV19ZnVuY3Rpb24gZihhLGIsYyxkKXt2YXIgZT1iLngtYS54LGY9Yi55LWEueTtiPWMueC1hLng7CmM9Yy55LWEueTt2YXIgZz1kLngtYS54O2Q9ZC55LWEueTthPWUqYy1mKmI7ZT1lKmQtZipnO3JldHVybiBNYXRoLmFicyhhKT5OdW1iZXIuRVBTSUxPTj8oYj1nKmMtZCpiLDA8YT8wPD1lJiYwPD1iOjA8PWV8fDA8PWIpOjA8ZX1jKGEpO2IuZm9yRWFjaChjKTt2YXIgZyxoLGssbSxsLHE9e307az1hLmNvbmNhdCgpO2c9MDtmb3IoaD1iLmxlbmd0aDtnPGg7ZysrKUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGssYltnXSk7Zz0wO2ZvcihoPWsubGVuZ3RoO2c8aDtnKyspbD1rW2ddLngrIjoiK2tbZ10ueSx2b2lkIDAhPT1xW2xdJiZjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlVXRpbHM6IER1cGxpY2F0ZSBwb2ludCIsbCxnKSxxW2xdPWc7Zz1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXt2YXIgZD1oLmxlbmd0aC0xLGU9YS0xOzA+ZSYmKGU9ZCk7dmFyIGc9YSsxO2c+ZCYmKGc9MCk7ZD1mKGhbYV0saFtlXSxoW2ddLGtbYl0pO2lmKCFkKXJldHVybiExO2Q9ay5sZW5ndGgtCjE7ZT1iLTE7MD5lJiYoZT1kKTtnPWIrMTtnPmQmJihnPTApO3JldHVybihkPWYoa1tiXSxrW2VdLGtbZ10saFthXSkpPyEwOiExfWZ1bmN0aW9uIGQoYSxiKXt2YXIgYyxmO2ZvcihjPTA7YzxoLmxlbmd0aDtjKyspaWYoZj1jKzEsZiU9aC5sZW5ndGgsZj1lKGEsYixoW2NdLGhbZl0sITApLDA8Zi5sZW5ndGgpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZyhhLGMpe3ZhciBkLGYsaCxrO2ZvcihkPTA7ZDxtLmxlbmd0aDtkKyspZm9yKGY9YlttW2RdXSxoPTA7aDxmLmxlbmd0aDtoKyspaWYoaz1oKzEsayU9Zi5sZW5ndGgsaz1lKGEsYyxmW2hdLGZba10sITApLDA8ay5sZW5ndGgpcmV0dXJuITA7cmV0dXJuITF9dmFyIGg9YS5jb25jYXQoKSxrLG09W10sbCxuLHEsdSxwLEM9W10sRCxCLEksSD0wO2ZvcihsPWIubGVuZ3RoO0g8bDtIKyspbS5wdXNoKEgpO0Q9MDtmb3IodmFyIEo9MiptLmxlbmd0aDswPG0ubGVuZ3RoOyl7Si0tO2lmKDA+Sil7Y29uc29sZS5sb2coIkluZmluaXRlIExvb3AhIEhvbGVzIGxlZnQ6IisKbS5sZW5ndGgrIiwgUHJvYmFibHkgSG9sZSBvdXRzaWRlIFNoYXBlISIpO2JyZWFrfWZvcihuPUQ7bjxoLmxlbmd0aDtuKyspe3E9aFtuXTtsPS0xO2ZvcihIPTA7SDxtLmxlbmd0aDtIKyspaWYodT1tW0hdLHA9cS54KyI6IitxLnkrIjoiK3Usdm9pZCAwPT09Q1twXSl7az1iW3VdO2ZvcihCPTA7QjxrLmxlbmd0aDtCKyspaWYodT1rW0JdLGMobixCKSYmIWQocSx1KSYmIWcocSx1KSl7bD1CO20uc3BsaWNlKEgsMSk7RD1oLnNsaWNlKDAsbisxKTt1PWguc2xpY2Uobik7Qj1rLnNsaWNlKGwpO0k9ay5zbGljZSgwLGwrMSk7aD1ELmNvbmNhdChCKS5jb25jYXQoSSkuY29uY2F0KHUpO0Q9bjticmVha31pZigwPD1sKWJyZWFrO0NbcF09ITB9aWYoMDw9bClicmVha319cmV0dXJuIGh9KGEsYik7dmFyIG49emEudHJpYW5ndWxhdGUoZywhMSk7Zz0wO2ZvcihoPW4ubGVuZ3RoO2c8aDtnKyspZm9yKG09bltnXSxrPTA7Mz5rO2srKylsPW1ba10ueCsiOiIrbVtrXS55LGw9cVtsXSx2b2lkIDAhPT0KbCYmKG1ba109bCk7cmV0dXJuIG4uY29uY2F0KCl9LGlzQ2xvY2tXaXNlOmZ1bmN0aW9uKGEpe3JldHVybiAwPnphLmFyZWEoYSl9fTtkYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7ZGIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWRiO0ZhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlKTtGYS5wcm90b3R5cGUuY29uc3RydWN0b3I9RmE7RmEucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLGE9YT9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhLmFycmF5KTpbXSxiPXRoaXMuZ2V0QXR0cmlidXRlKCJ1diIpLGI9Yj9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChiLmFycmF5KTpbXSxjPXRoaXMuaW5kZXgsYz1jP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGMuYXJyYXkpOltdO3JldHVybntwb3NpdGlvbjphLHV2OmIsaW5kZXg6Y319O0ZhLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9CmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5sZW5ndGg7Yi5hcnJheXM9dGhpcy5nZXRBcnJheXMoKTtmb3IodmFyIGQ9MDtkPGM7ZCsrKXRoaXMuYWRkU2hhcGUoYVtkXSxiKTt0aGlzLnNldEluZGV4KGIuYXJyYXlzLmluZGV4KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGIuYXJyYXlzLnBvc2l0aW9uLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKGIuYXJyYXlzLnV2LDIpKX07RmEucHJvdG90eXBlLmFkZFNoYXBlPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIsYyl7Ynx8Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QiKTtyZXR1cm4gYi5jbG9uZSgpLm11bHRpcGx5U2NhbGFyKGMpLmFkZChhKX1mdW5jdGlvbiBkKGEsYixjKXt2YXIgZCxlLGY7ZT1hLngtYi54O2Y9YS55LWIueTtkPWMueC1hLng7dmFyIGc9Yy55LWEueSxoPWUqZStmKmY7aWYoTWF0aC5hYnMoZSpnLWYqZCk+TnVtYmVyLkVQU0lMT04pe3ZhciBrPQpNYXRoLnNxcnQoaCksbT1NYXRoLnNxcnQoZCpkK2cqZyksaD1iLngtZi9rO2I9Yi55K2UvaztnPSgoYy54LWcvbS1oKSpnLShjLnkrZC9tLWIpKmQpLyhlKmctZipkKTtkPWgrZSpnLWEueDtlPWIrZipnLWEueTtmPWQqZCtlKmU7aWYoMj49ZilyZXR1cm4gbmV3IEQoZCxlKTtmPU1hdGguc3FydChmLzIpfWVsc2UgYT0hMSxlPk51bWJlci5FUFNJTE9OP2Q+TnVtYmVyLkVQU0lMT04mJihhPSEwKTplPC1OdW1iZXIuRVBTSUxPTj9kPC1OdW1iZXIuRVBTSUxPTiYmKGE9ITApOk1hdGguc2lnbihmKT09PU1hdGguc2lnbihnKSYmKGE9ITApLGE/KGQ9LWYsZj1NYXRoLnNxcnQoaCkpOihkPWUsZT1mLGY9TWF0aC5zcXJ0KGgvMikpO3JldHVybiBuZXcgRChkL2YsZS9mKX1mdW5jdGlvbiBlKGEsYil7dmFyIGMsZDtmb3IoTj1hLmxlbmd0aDswPD0tLU47KXtjPU47ZD1OLTE7MD5kJiYoZD1hLmxlbmd0aC0xKTt2YXIgZSxmPUcrMip5O2ZvcihlPTA7ZTxmO2UrKyl7dmFyIGc9ZGEqZSxtPWRhKgooZSsxKSxuPWIrZCtnLHE9YitkK20sbT1iK2MrbTtoKGIrYytnKTtoKG4pO2gobSk7aChuKTtoKHEpO2gobSk7Zz1sLmxlbmd0aC8zO2c9RS5nZW5lcmF0ZVNpZGVXYWxsVVYoWixsLGctNixnLTMsZy0yLGctMSk7ayhnWzBdKTtrKGdbMV0pO2soZ1szXSk7ayhnWzFdKTtrKGdbMl0pO2soZ1szXSl9fX1mdW5jdGlvbiBmKGEsYixjKXtyLnB1c2goYSk7ci5wdXNoKGIpO3IucHVzaChjKX1mdW5jdGlvbiBnKGEsYixjKXtoKGEpO2goYik7aChjKTthPWwubGVuZ3RoLzM7YT1FLmdlbmVyYXRlVG9wVVYoWixsLGEtMyxhLTIsYS0xKTtrKGFbMF0pO2soYVsxXSk7ayhhWzJdKX1mdW5jdGlvbiBoKGEpe3EucHVzaChsLmxlbmd0aC8zKTtsLnB1c2goclszKmErMF0pO2wucHVzaChyWzMqYSsxXSk7bC5wdXNoKHJbMyphKzJdKX1mdW5jdGlvbiBrKGEpe24ucHVzaChhLngpO24ucHVzaChhLnkpfXZhciBtPWIuYXJyYXlzP2IuYXJyYXlzOnRoaXMuZ2V0QXJyYXlzKCksbD1tLnBvc2l0aW9uLHE9Cm0uaW5kZXgsbj1tLnV2LHI9W10sbT12b2lkIDAhPT1iLmFtb3VudD9iLmFtb3VudDoxMDAsej12b2lkIDAhPT1iLmJldmVsVGhpY2tuZXNzP2IuYmV2ZWxUaGlja25lc3M6Nix0PXZvaWQgMCE9PWIuYmV2ZWxTaXplP2IuYmV2ZWxTaXplOnotMix5PXZvaWQgMCE9PWIuYmV2ZWxTZWdtZW50cz9iLmJldmVsU2VnbWVudHM6Myx4PXZvaWQgMCE9PWIuYmV2ZWxFbmFibGVkP2IuYmV2ZWxFbmFibGVkOiEwLHY9dm9pZCAwIT09Yi5jdXJ2ZVNlZ21lbnRzP2IuY3VydmVTZWdtZW50czoxMixHPXZvaWQgMCE9PWIuc3RlcHM/Yi5zdGVwczoxLHc9Yi5leHRydWRlUGF0aCxCLEk9ITEsRT12b2lkIDAhPT1iLlVWR2VuZXJhdG9yP2IuVVZHZW5lcmF0b3I6ZGIuV29ybGRVVkdlbmVyYXRvcixGLEgsUixKO3cmJihCPXcuZ2V0U3BhY2VkUG9pbnRzKEcpLEk9ITAseD0hMSxGPXZvaWQgMCE9PWIuZnJhbWVzP2IuZnJhbWVzOncuY29tcHV0ZUZyZW5ldEZyYW1lcyhHLCExKSxIPW5ldyBwLFI9bmV3IHAsCko9bmV3IHApO3h8fCh0PXo9eT0wKTt2YXIgTSxMLFYsWj10aGlzLHc9YS5leHRyYWN0UG9pbnRzKHYpLHY9dy5zaGFwZSxQPXcuaG9sZXM7aWYodz0hemEuaXNDbG9ja1dpc2Uodikpe3Y9di5yZXZlcnNlKCk7TD0wO2ZvcihWPVAubGVuZ3RoO0w8VjtMKyspTT1QW0xdLHphLmlzQ2xvY2tXaXNlKE0pJiYoUFtMXT1NLnJldmVyc2UoKSk7dz0hMX12YXIgSz16YS50cmlhbmd1bGF0ZVNoYXBlKHYsUCksVz12O0w9MDtmb3IoVj1QLmxlbmd0aDtMPFY7TCsrKU09UFtMXSx2PXYuY29uY2F0KE0pO3ZhciBiYSxULFEsWSxVLGRhPXYubGVuZ3RoLFgsZ2E9Sy5sZW5ndGgsdz1bXSxOPTA7UT1XLmxlbmd0aDtiYT1RLTE7Zm9yKFQ9TisxO048UTtOKyssYmErKyxUKyspYmE9PT1RJiYoYmE9MCksVD09PVEmJihUPTApLHdbTl09ZChXW05dLFdbYmFdLFdbVF0pO3ZhciBpYT1bXSxrYSxoYT13LmNvbmNhdCgpO0w9MDtmb3IoVj1QLmxlbmd0aDtMPFY7TCsrKXtNPVBbTF07a2E9W107Tj0wO1E9TS5sZW5ndGg7CmJhPVEtMTtmb3IoVD1OKzE7TjxRO04rKyxiYSsrLFQrKyliYT09PVEmJihiYT0wKSxUPT09USYmKFQ9MCksa2FbTl09ZChNW05dLE1bYmFdLE1bVF0pO2lhLnB1c2goa2EpO2hhPWhhLmNvbmNhdChrYSl9Zm9yKGJhPTA7YmE8eTtiYSsrKXtRPWJhL3k7WT16Kk1hdGguY29zKFEqTWF0aC5QSS8yKTtUPXQqTWF0aC5zaW4oUSpNYXRoLlBJLzIpO049MDtmb3IoUT1XLmxlbmd0aDtOPFE7TisrKVU9YyhXW05dLHdbTl0sVCksZihVLngsVS55LC1ZKTtMPTA7Zm9yKFY9UC5sZW5ndGg7TDxWO0wrKylmb3IoTT1QW0xdLGthPWlhW0xdLE49MCxRPU0ubGVuZ3RoO048UTtOKyspVT1jKE1bTl0sa2FbTl0sVCksZihVLngsVS55LC1ZKX1UPXQ7Zm9yKE49MDtOPGRhO04rKylVPXg/Yyh2W05dLGhhW05dLFQpOnZbTl0sST8oUi5jb3B5KEYubm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIoVS54KSxILmNvcHkoRi5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKFUueSksSi5jb3B5KEJbMF0pLmFkZChSKS5hZGQoSCksCmYoSi54LEoueSxKLnopKTpmKFUueCxVLnksMCk7Zm9yKFE9MTtRPD1HO1ErKylmb3IoTj0wO048ZGE7TisrKVU9eD9jKHZbTl0saGFbTl0sVCk6dltOXSxJPyhSLmNvcHkoRi5ub3JtYWxzW1FdKS5tdWx0aXBseVNjYWxhcihVLngpLEguY29weShGLmJpbm9ybWFsc1tRXSkubXVsdGlwbHlTY2FsYXIoVS55KSxKLmNvcHkoQltRXSkuYWRkKFIpLmFkZChIKSxmKEoueCxKLnksSi56KSk6ZihVLngsVS55LG0vRypRKTtmb3IoYmE9eS0xOzA8PWJhO2JhLS0pe1E9YmEveTtZPXoqTWF0aC5jb3MoUSpNYXRoLlBJLzIpO1Q9dCpNYXRoLnNpbihRKk1hdGguUEkvMik7Tj0wO2ZvcihRPVcubGVuZ3RoO048UTtOKyspVT1jKFdbTl0sd1tOXSxUKSxmKFUueCxVLnksbStZKTtMPTA7Zm9yKFY9UC5sZW5ndGg7TDxWO0wrKylmb3IoTT1QW0xdLGthPWlhW0xdLE49MCxRPU0ubGVuZ3RoO048UTtOKyspVT1jKE1bTl0sa2FbTl0sVCksST9mKFUueCxVLnkrQltHLTFdLnksQltHLTFdLngrWSk6ZihVLngsClUueSxtK1kpfShmdW5jdGlvbigpe3ZhciBhPWwubGVuZ3RoLzM7aWYoeCl7dmFyIGM9MCpkYTtmb3IoTj0wO048Z2E7TisrKVg9S1tOXSxnKFhbMl0rYyxYWzFdK2MsWFswXStjKTtjPWRhKihHKzIqeSk7Zm9yKE49MDtOPGdhO04rKylYPUtbTl0sZyhYWzBdK2MsWFsxXStjLFhbMl0rYyl9ZWxzZXtmb3IoTj0wO048Z2E7TisrKVg9S1tOXSxnKFhbMl0sWFsxXSxYWzBdKTtmb3IoTj0wO048Z2E7TisrKVg9S1tOXSxnKFhbMF0rZGEqRyxYWzFdK2RhKkcsWFsyXStkYSpHKX1aLmFkZEdyb3VwKGEsbC5sZW5ndGgvMy1hLHZvaWQgMCE9PWIubWF0ZXJpYWw/Yi5tYXRlcmlhbDowKX0pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9bC5sZW5ndGgvMyxjPTA7ZShXLGMpO2MrPVcubGVuZ3RoO0w9MDtmb3IoVj1QLmxlbmd0aDtMPFY7TCsrKU09UFtMXSxlKE0sYyksYys9TS5sZW5ndGg7Wi5hZGRHcm91cChhLGwubGVuZ3RoLzMtYSx2b2lkIDAhPT1iLmV4dHJ1ZGVNYXRlcmlhbD9iLmV4dHJ1ZGVNYXRlcmlhbDoKMSl9KSgpO2IuYXJyYXlzfHwodGhpcy5zZXRJbmRleChxKSx0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGwsMykpLHRoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IEMoYi5hcnJheXMudXYsMikpKX07ZGIuV29ybGRVVkdlbmVyYXRvcj17Z2VuZXJhdGVUb3BVVjpmdW5jdGlvbihhLGIsYyxkLGUpe2E9YlszKmRdO2Q9YlszKmQrMV07dmFyIGY9YlszKmVdO2U9YlszKmUrMV07cmV0dXJuW25ldyBEKGJbMypjXSxiWzMqYysxXSksbmV3IEQoYSxkKSxuZXcgRChmLGUpXX0sZ2VuZXJhdGVTaWRlV2FsbFVWOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXthPWJbMypjXTt2YXIgZz1iWzMqYysxXTtjPWJbMypjKzJdO3ZhciBoPWJbMypkXSxrPWJbMypkKzFdO2Q9YlszKmQrMl07dmFyIG09YlszKmVdLGw9YlszKmUrMV07ZT1iWzMqZSsyXTt2YXIgcT1iWzMqZl0sbj1iWzMqZisxXTtiPWJbMypmKzJdO3JldHVybi4wMT5NYXRoLmFicyhnLWspP1tuZXcgRChhLDEtYyksbmV3IEQoaCwKMS1kKSxuZXcgRChtLDEtZSksbmV3IEQocSwxLWIpXTpbbmV3IEQoZywxLWMpLG5ldyBEKGssMS1kKSxuZXcgRChsLDEtZSksbmV3IEQobiwxLWIpXX19O09jLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtPYy5wcm90b3R5cGUuY29uc3RydWN0b3I9T2M7V2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRmEucHJvdG90eXBlKTtXYi5wcm90b3R5cGUuY29uc3RydWN0b3I9V2I7UGMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO1BjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1QYztuYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7bmIucHJvdG90eXBlLmNvbnN0cnVjdG9yPW5iO1FjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtRYy5wcm90b3R5cGUuY29uc3RydWN0b3I9UWM7WGIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO1hiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1YYjtSYy5wcm90b3R5cGU9Ck9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO1JjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1SYztZYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7WWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVliO1piLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtaYi5wcm90b3R5cGUuY29uc3RydWN0b3I9WmI7JGIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpOyRiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0kYjthYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7YWMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWFjO29iLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtvYi5wcm90b3R5cGUuY29uc3RydWN0b3I9b2I7V2EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO1dhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1XYTtTYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShvYi5wcm90b3R5cGUpOwpTYy5wcm90b3R5cGUuY29uc3RydWN0b3I9U2M7VGMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoV2EucHJvdG90eXBlKTtUYy5wcm90b3R5cGUuY29uc3RydWN0b3I9VGM7VWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO1VjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1VYztiYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7YmMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWJjO3ZhciBNYT1PYmplY3QuZnJlZXplKHtXaXJlZnJhbWVHZW9tZXRyeTpPYixQYXJhbWV0cmljR2VvbWV0cnk6RmMsUGFyYW1ldHJpY0J1ZmZlckdlb21ldHJ5OlBiLFRldHJhaGVkcm9uR2VvbWV0cnk6SGMsVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeTpRYixPY3RhaGVkcm9uR2VvbWV0cnk6SWMsT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5Om1iLEljb3NhaGVkcm9uR2VvbWV0cnk6SmMsSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeTpSYixEb2RlY2FoZWRyb25HZW9tZXRyeTpLYywKRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnk6U2IsUG9seWhlZHJvbkdlb21ldHJ5OkdjLFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeTppYSxUdWJlR2VvbWV0cnk6TGMsVHViZUJ1ZmZlckdlb21ldHJ5OlRiLFRvcnVzS25vdEdlb21ldHJ5Ok1jLFRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5OlViLFRvcnVzR2VvbWV0cnk6TmMsVG9ydXNCdWZmZXJHZW9tZXRyeTpWYixUZXh0R2VvbWV0cnk6T2MsVGV4dEJ1ZmZlckdlb21ldHJ5OldiLFNwaGVyZUdlb21ldHJ5OlBjLFNwaGVyZUJ1ZmZlckdlb21ldHJ5Om5iLFJpbmdHZW9tZXRyeTpRYyxSaW5nQnVmZmVyR2VvbWV0cnk6WGIsUGxhbmVHZW9tZXRyeTp4YyxQbGFuZUJ1ZmZlckdlb21ldHJ5OmxiLExhdGhlR2VvbWV0cnk6UmMsTGF0aGVCdWZmZXJHZW9tZXRyeTpZYixTaGFwZUdlb21ldHJ5OlpiLFNoYXBlQnVmZmVyR2VvbWV0cnk6JGIsRXh0cnVkZUdlb21ldHJ5OmRiLEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTpGYSxFZGdlc0dlb21ldHJ5OmFjLApDb25lR2VvbWV0cnk6U2MsQ29uZUJ1ZmZlckdlb21ldHJ5OlRjLEN5bGluZGVyR2VvbWV0cnk6b2IsQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeTpXYSxDaXJjbGVHZW9tZXRyeTpVYyxDaXJjbGVCdWZmZXJHZW9tZXRyeTpiYyxCb3hHZW9tZXRyeTpJYixCb3hCdWZmZXJHZW9tZXRyeTprYn0pO2NjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVhLnByb3RvdHlwZSk7Y2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPWNjO2NjLnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO2RjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVhLnByb3RvdHlwZSk7ZGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWRjO2RjLnByb3RvdHlwZS5pc1Jhd1NoYWRlck1hdGVyaWFsPSEwO1JhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTtSYS5wcm90b3R5cGUuY29uc3RydWN0b3I9UmE7UmEucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw9ITA7UmEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsCmEpO3RoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9O3RoaXMuY29sb3IuY29weShhLmNvbG9yKTt0aGlzLnJvdWdobmVzcz1hLnJvdWdobmVzczt0aGlzLm1ldGFsbmVzcz1hLm1ldGFsbmVzczt0aGlzLm1hcD1hLm1hcDt0aGlzLmxpZ2h0TWFwPWEubGlnaHRNYXA7dGhpcy5saWdodE1hcEludGVuc2l0eT1hLmxpZ2h0TWFwSW50ZW5zaXR5O3RoaXMuYW9NYXA9YS5hb01hcDt0aGlzLmFvTWFwSW50ZW5zaXR5PWEuYW9NYXBJbnRlbnNpdHk7dGhpcy5lbWlzc2l2ZS5jb3B5KGEuZW1pc3NpdmUpO3RoaXMuZW1pc3NpdmVNYXA9YS5lbWlzc2l2ZU1hcDt0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PWEuZW1pc3NpdmVJbnRlbnNpdHk7dGhpcy5idW1wTWFwPWEuYnVtcE1hcDt0aGlzLmJ1bXBTY2FsZT1hLmJ1bXBTY2FsZTt0aGlzLm5vcm1hbE1hcD1hLm5vcm1hbE1hcDt0aGlzLm5vcm1hbFNjYWxlLmNvcHkoYS5ub3JtYWxTY2FsZSk7dGhpcy5kaXNwbGFjZW1lbnRNYXA9YS5kaXNwbGFjZW1lbnRNYXA7CnRoaXMuZGlzcGxhY2VtZW50U2NhbGU9YS5kaXNwbGFjZW1lbnRTY2FsZTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9YS5kaXNwbGFjZW1lbnRCaWFzO3RoaXMucm91Z2huZXNzTWFwPWEucm91Z2huZXNzTWFwO3RoaXMubWV0YWxuZXNzTWFwPWEubWV0YWxuZXNzTWFwO3RoaXMuYWxwaGFNYXA9YS5hbHBoYU1hcDt0aGlzLmVudk1hcD1hLmVudk1hcDt0aGlzLmVudk1hcEludGVuc2l0eT1hLmVudk1hcEludGVuc2l0eTt0aGlzLnJlZnJhY3Rpb25SYXRpbz1hLnJlZnJhY3Rpb25SYXRpbzt0aGlzLndpcmVmcmFtZT1hLndpcmVmcmFtZTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD1hLndpcmVmcmFtZUxpbmV3aWR0aDt0aGlzLndpcmVmcmFtZUxpbmVjYXA9YS53aXJlZnJhbWVMaW5lY2FwO3RoaXMud2lyZWZyYW1lTGluZWpvaW49YS53aXJlZnJhbWVMaW5lam9pbjt0aGlzLnNraW5uaW5nPWEuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9YS5tb3JwaFRhcmdldHM7dGhpcy5tb3JwaE5vcm1hbHM9CmEubW9ycGhOb3JtYWxzO3JldHVybiB0aGlzfTtwYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSYS5wcm90b3R5cGUpO3BiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1wYjtwYi5wcm90b3R5cGUuaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD0hMDtwYi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtSYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5kZWZpbmVzPXtQSFlTSUNBTDoiIn07dGhpcy5yZWZsZWN0aXZpdHk9YS5yZWZsZWN0aXZpdHk7dGhpcy5jbGVhckNvYXQ9YS5jbGVhckNvYXQ7dGhpcy5jbGVhckNvYXRSb3VnaG5lc3M9YS5jbGVhckNvYXRSb3VnaG5lc3M7cmV0dXJuIHRoaXN9O3RhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTt0YS5wcm90b3R5cGUuY29uc3RydWN0b3I9dGE7dGEucHJvdG90eXBlLmlzTWVzaFBob25nTWF0ZXJpYWw9ITA7dGEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsCmEpO3RoaXMuY29sb3IuY29weShhLmNvbG9yKTt0aGlzLnNwZWN1bGFyLmNvcHkoYS5zcGVjdWxhcik7dGhpcy5zaGluaW5lc3M9YS5zaGluaW5lc3M7dGhpcy5tYXA9YS5tYXA7dGhpcy5saWdodE1hcD1hLmxpZ2h0TWFwO3RoaXMubGlnaHRNYXBJbnRlbnNpdHk9YS5saWdodE1hcEludGVuc2l0eTt0aGlzLmFvTWFwPWEuYW9NYXA7dGhpcy5hb01hcEludGVuc2l0eT1hLmFvTWFwSW50ZW5zaXR5O3RoaXMuZW1pc3NpdmUuY29weShhLmVtaXNzaXZlKTt0aGlzLmVtaXNzaXZlTWFwPWEuZW1pc3NpdmVNYXA7dGhpcy5lbWlzc2l2ZUludGVuc2l0eT1hLmVtaXNzaXZlSW50ZW5zaXR5O3RoaXMuYnVtcE1hcD1hLmJ1bXBNYXA7dGhpcy5idW1wU2NhbGU9YS5idW1wU2NhbGU7dGhpcy5ub3JtYWxNYXA9YS5ub3JtYWxNYXA7dGhpcy5ub3JtYWxTY2FsZS5jb3B5KGEubm9ybWFsU2NhbGUpO3RoaXMuZGlzcGxhY2VtZW50TWFwPWEuZGlzcGxhY2VtZW50TWFwO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9CmEuZGlzcGxhY2VtZW50U2NhbGU7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPWEuZGlzcGxhY2VtZW50Qmlhczt0aGlzLnNwZWN1bGFyTWFwPWEuc3BlY3VsYXJNYXA7dGhpcy5hbHBoYU1hcD1hLmFscGhhTWFwO3RoaXMuZW52TWFwPWEuZW52TWFwO3RoaXMuY29tYmluZT1hLmNvbWJpbmU7dGhpcy5yZWZsZWN0aXZpdHk9YS5yZWZsZWN0aXZpdHk7dGhpcy5yZWZyYWN0aW9uUmF0aW89YS5yZWZyYWN0aW9uUmF0aW87dGhpcy53aXJlZnJhbWU9YS53aXJlZnJhbWU7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9YS53aXJlZnJhbWVMaW5ld2lkdGg7dGhpcy53aXJlZnJhbWVMaW5lY2FwPWEud2lyZWZyYW1lTGluZWNhcDt0aGlzLndpcmVmcmFtZUxpbmVqb2luPWEud2lyZWZyYW1lTGluZWpvaW47dGhpcy5za2lubmluZz1hLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWEubW9ycGhUYXJnZXRzO3RoaXMubW9ycGhOb3JtYWxzPWEubW9ycGhOb3JtYWxzO3JldHVybiB0aGlzfTtxYi5wcm90b3R5cGU9Ck9iamVjdC5jcmVhdGUodGEucHJvdG90eXBlKTtxYi5wcm90b3R5cGUuY29uc3RydWN0b3I9cWI7cWIucHJvdG90eXBlLmlzTWVzaFRvb25NYXRlcmlhbD0hMDtxYi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXt0YS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5ncmFkaWVudE1hcD1hLmdyYWRpZW50TWFwO3JldHVybiB0aGlzfTtyYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShaLnByb3RvdHlwZSk7cmIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXJiO3JiLnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbD0hMDtyYi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtaLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLmJ1bXBNYXA9YS5idW1wTWFwO3RoaXMuYnVtcFNjYWxlPWEuYnVtcFNjYWxlO3RoaXMubm9ybWFsTWFwPWEubm9ybWFsTWFwO3RoaXMubm9ybWFsU2NhbGUuY29weShhLm5vcm1hbFNjYWxlKTt0aGlzLmRpc3BsYWNlbWVudE1hcD1hLmRpc3BsYWNlbWVudE1hcDsKdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT1hLmRpc3BsYWNlbWVudFNjYWxlO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz1hLmRpc3BsYWNlbWVudEJpYXM7dGhpcy53aXJlZnJhbWU9YS53aXJlZnJhbWU7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9YS53aXJlZnJhbWVMaW5ld2lkdGg7dGhpcy5za2lubmluZz1hLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWEubW9ycGhUYXJnZXRzO3RoaXMubW9ycGhOb3JtYWxzPWEubW9ycGhOb3JtYWxzO3JldHVybiB0aGlzfTtzYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShaLnByb3RvdHlwZSk7c2IucHJvdG90eXBlLmNvbnN0cnVjdG9yPXNiO3NiLnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITA7c2IucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5jb2xvci5jb3B5KGEuY29sb3IpO3RoaXMubWFwPWEubWFwO3RoaXMubGlnaHRNYXA9YS5saWdodE1hcDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PQphLmxpZ2h0TWFwSW50ZW5zaXR5O3RoaXMuYW9NYXA9YS5hb01hcDt0aGlzLmFvTWFwSW50ZW5zaXR5PWEuYW9NYXBJbnRlbnNpdHk7dGhpcy5lbWlzc2l2ZS5jb3B5KGEuZW1pc3NpdmUpO3RoaXMuZW1pc3NpdmVNYXA9YS5lbWlzc2l2ZU1hcDt0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PWEuZW1pc3NpdmVJbnRlbnNpdHk7dGhpcy5zcGVjdWxhck1hcD1hLnNwZWN1bGFyTWFwO3RoaXMuYWxwaGFNYXA9YS5hbHBoYU1hcDt0aGlzLmVudk1hcD1hLmVudk1hcDt0aGlzLmNvbWJpbmU9YS5jb21iaW5lO3RoaXMucmVmbGVjdGl2aXR5PWEucmVmbGVjdGl2aXR5O3RoaXMucmVmcmFjdGlvblJhdGlvPWEucmVmcmFjdGlvblJhdGlvO3RoaXMud2lyZWZyYW1lPWEud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWEud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMud2lyZWZyYW1lTGluZWNhcD1hLndpcmVmcmFtZUxpbmVjYXA7dGhpcy53aXJlZnJhbWVMaW5lam9pbj1hLndpcmVmcmFtZUxpbmVqb2luOwp0aGlzLnNraW5uaW5nPWEuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9YS5tb3JwaFRhcmdldHM7dGhpcy5tb3JwaE5vcm1hbHM9YS5tb3JwaE5vcm1hbHM7cmV0dXJuIHRoaXN9O3RiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTt0Yi5wcm90b3R5cGUuY29uc3RydWN0b3I9dGI7dGIucHJvdG90eXBlLmlzTGluZURhc2hlZE1hdGVyaWFsPSEwO3RiLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGEpe1oucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMuY29sb3IuY29weShhLmNvbG9yKTt0aGlzLmxpbmV3aWR0aD1hLmxpbmV3aWR0aDt0aGlzLnNjYWxlPWEuc2NhbGU7dGhpcy5kYXNoU2l6ZT1hLmRhc2hTaXplO3RoaXMuZ2FwU2l6ZT1hLmdhcFNpemU7cmV0dXJuIHRoaXN9O3ZhciBsZz1PYmplY3QuZnJlZXplKHtTaGFkb3dNYXRlcmlhbDpjYyxTcHJpdGVNYXRlcmlhbDpjYixSYXdTaGFkZXJNYXRlcmlhbDpkYyxTaGFkZXJNYXRlcmlhbDpFYSxQb2ludHNNYXRlcmlhbDpMYSwKTWVzaFBoeXNpY2FsTWF0ZXJpYWw6cGIsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6UmEsTWVzaFBob25nTWF0ZXJpYWw6dGEsTWVzaFRvb25NYXRlcmlhbDpxYixNZXNoTm9ybWFsTWF0ZXJpYWw6cmIsTWVzaExhbWJlcnRNYXRlcmlhbDpzYixNZXNoRGVwdGhNYXRlcmlhbDokYSxNZXNoQmFzaWNNYXRlcmlhbDpOYSxMaW5lRGFzaGVkTWF0ZXJpYWw6dGIsTGluZUJhc2ljTWF0ZXJpYWw6aGEsTWF0ZXJpYWw6Wn0pLGhkPXtlbmFibGVkOiExLGZpbGVzOnt9LGFkZDpmdW5jdGlvbihhLGIpeyExIT09dGhpcy5lbmFibGVkJiYodGhpcy5maWxlc1thXT1iKX0sZ2V0OmZ1bmN0aW9uKGEpe2lmKCExIT09dGhpcy5lbmFibGVkKXJldHVybiB0aGlzLmZpbGVzW2FdfSxyZW1vdmU6ZnVuY3Rpb24oYSl7ZGVsZXRlIHRoaXMuZmlsZXNbYV19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5maWxlcz17fX19LEFhPW5ldyBaZDtPYmplY3QuYXNzaWduKHVhLnByb3RvdHlwZSx7bG9hZDpmdW5jdGlvbihhLGIsCmMsZCl7dm9pZCAwPT09YSYmKGE9IiIpO3ZvaWQgMCE9PXRoaXMucGF0aCYmKGE9dGhpcy5wYXRoK2EpO3ZhciBlPXRoaXMsZj1oZC5nZXQoYSk7aWYodm9pZCAwIT09ZilyZXR1cm4gZS5tYW5hZ2VyLml0ZW1TdGFydChhKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YiYmYihmKTtlLm1hbmFnZXIuaXRlbUVuZChhKX0sMCksZjt2YXIgZz1hLm1hdGNoKC9eZGF0YTooLio/KSg7YmFzZTY0KT8sKC4qKSQvKTtpZihnKXt2YXIgaD1nWzFdLGs9ISFnWzJdLGc9Z1szXSxnPXdpbmRvdy5kZWNvZGVVUklDb21wb25lbnQoZyk7ayYmKGc9d2luZG93LmF0b2IoZykpO3RyeXt2YXIgbSxsPSh0aGlzLnJlc3BvbnNlVHlwZXx8IiIpLnRvTG93ZXJDYXNlKCk7c3dpdGNoKGwpe2Nhc2UgImFycmF5YnVmZmVyIjpjYXNlICJibG9iIjptPW5ldyBBcnJheUJ1ZmZlcihnLmxlbmd0aCk7Zm9yKHZhciBxPW5ldyBVaW50OEFycmF5KG0pLGs9MDtrPGcubGVuZ3RoO2srKylxW2tdPWcuY2hhckNvZGVBdChrKTsKImJsb2IiPT09bCYmKG09bmV3IEJsb2IoW21dLHt0eXBlOmh9KSk7YnJlYWs7Y2FzZSAiZG9jdW1lbnQiOm09KG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhnLGgpO2JyZWFrO2Nhc2UgImpzb24iOm09SlNPTi5wYXJzZShnKTticmVhaztkZWZhdWx0Om09Z313aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2ImJmIobSk7ZS5tYW5hZ2VyLml0ZW1FbmQoYSl9LDApfWNhdGNoKHApe3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZCYmZChwKTtlLm1hbmFnZXIuaXRlbUVuZChhKTtlLm1hbmFnZXIuaXRlbUVycm9yKGEpfSwwKX19ZWxzZXt2YXIgbj1uZXcgWE1MSHR0cFJlcXVlc3Q7bi5vcGVuKCJHRVQiLGEsITApO24uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oYyl7dmFyIGY9Yy50YXJnZXQucmVzcG9uc2U7aGQuYWRkKGEsZik7MjAwPT09dGhpcy5zdGF0dXM/KGImJmIoZiksZS5tYW5hZ2VyLml0ZW1FbmQoYSkpOjA9PT10aGlzLnN0YXR1cz8oY29uc29sZS53YXJuKCJUSFJFRS5GaWxlTG9hZGVyOiBIVFRQIFN0YXR1cyAwIHJlY2VpdmVkLiIpLApiJiZiKGYpLGUubWFuYWdlci5pdGVtRW5kKGEpKTooZCYmZChjKSxlLm1hbmFnZXIuaXRlbUVuZChhKSxlLm1hbmFnZXIuaXRlbUVycm9yKGEpKX0sITEpO3ZvaWQgMCE9PWMmJm4uYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGZ1bmN0aW9uKGEpe2MoYSl9LCExKTtuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihiKXtkJiZkKGIpO2UubWFuYWdlci5pdGVtRW5kKGEpO2UubWFuYWdlci5pdGVtRXJyb3IoYSl9LCExKTt2b2lkIDAhPT10aGlzLnJlc3BvbnNlVHlwZSYmKG4ucmVzcG9uc2VUeXBlPXRoaXMucmVzcG9uc2VUeXBlKTt2b2lkIDAhPT10aGlzLndpdGhDcmVkZW50aWFscyYmKG4ud2l0aENyZWRlbnRpYWxzPXRoaXMud2l0aENyZWRlbnRpYWxzKTtuLm92ZXJyaWRlTWltZVR5cGUmJm4ub3ZlcnJpZGVNaW1lVHlwZSh2b2lkIDAhPT10aGlzLm1pbWVUeXBlP3RoaXMubWltZVR5cGU6InRleHQvcGxhaW4iKTtmb3IoaCBpbiB0aGlzLnJlcXVlc3RIZWFkZXIpbi5zZXRSZXF1ZXN0SGVhZGVyKGgsCnRoaXMucmVxdWVzdEhlYWRlcltoXSk7bi5zZW5kKG51bGwpfWUubWFuYWdlci5pdGVtU3RhcnQoYSk7cmV0dXJuIG59LHNldFBhdGg6ZnVuY3Rpb24oYSl7dGhpcy5wYXRoPWE7cmV0dXJuIHRoaXN9LHNldFJlc3BvbnNlVHlwZTpmdW5jdGlvbihhKXt0aGlzLnJlc3BvbnNlVHlwZT1hO3JldHVybiB0aGlzfSxzZXRXaXRoQ3JlZGVudGlhbHM6ZnVuY3Rpb24oYSl7dGhpcy53aXRoQ3JlZGVudGlhbHM9YTtyZXR1cm4gdGhpc30sc2V0TWltZVR5cGU6ZnVuY3Rpb24oYSl7dGhpcy5taW1lVHlwZT1hO3JldHVybiB0aGlzfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEpe3RoaXMucmVxdWVzdEhlYWRlcj1hO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oUWUucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGUoZSl7ay5sb2FkKGFbZV0sZnVuY3Rpb24oYSl7YT1mLl9wYXJzZXIoYSwhMCk7Z1tlXT17d2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHQsCmZvcm1hdDphLmZvcm1hdCxtaXBtYXBzOmEubWlwbWFwc307bSs9MTs2PT09bSYmKDE9PT1hLm1pcG1hcENvdW50JiYoaC5taW5GaWx0ZXI9MTAwNiksaC5mb3JtYXQ9YS5mb3JtYXQsaC5uZWVkc1VwZGF0ZT0hMCxiJiZiKGgpKX0sYyxkKX12YXIgZj10aGlzLGc9W10saD1uZXcgTmI7aC5pbWFnZT1nO3ZhciBrPW5ldyB1YSh0aGlzLm1hbmFnZXIpO2suc2V0UGF0aCh0aGlzLnBhdGgpO2suc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpO2lmKEFycmF5LmlzQXJyYXkoYSkpZm9yKHZhciBtPTAsbD0wLHE9YS5sZW5ndGg7bDxxOysrbCllKGwpO2Vsc2Ugay5sb2FkKGEsZnVuY3Rpb24oYSl7YT1mLl9wYXJzZXIoYSwhMCk7aWYoYS5pc0N1YmVtYXApZm9yKHZhciBjPWEubWlwbWFwcy5sZW5ndGgvYS5taXBtYXBDb3VudCxkPTA7ZDxjO2QrKyl7Z1tkXT17bWlwbWFwczpbXX07Zm9yKHZhciBlPTA7ZTxhLm1pcG1hcENvdW50O2UrKylnW2RdLm1pcG1hcHMucHVzaChhLm1pcG1hcHNbZCoKYS5taXBtYXBDb3VudCtlXSksZ1tkXS5mb3JtYXQ9YS5mb3JtYXQsZ1tkXS53aWR0aD1hLndpZHRoLGdbZF0uaGVpZ2h0PWEuaGVpZ2h0fWVsc2UgaC5pbWFnZS53aWR0aD1hLndpZHRoLGguaW1hZ2UuaGVpZ2h0PWEuaGVpZ2h0LGgubWlwbWFwcz1hLm1pcG1hcHM7MT09PWEubWlwbWFwQ291bnQmJihoLm1pbkZpbHRlcj0xMDA2KTtoLmZvcm1hdD1hLmZvcm1hdDtoLm5lZWRzVXBkYXRlPSEwO2ImJmIoaCl9LGMsZCk7cmV0dXJuIGh9LHNldFBhdGg6ZnVuY3Rpb24oYSl7dGhpcy5wYXRoPWE7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbigkZC5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcyxmPW5ldyBlYixnPW5ldyB1YSh0aGlzLm1hbmFnZXIpO2cuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpO2cubG9hZChhLGZ1bmN0aW9uKGEpe2lmKGE9ZS5fcGFyc2VyKGEpKXZvaWQgMCE9PWEuaW1hZ2U/Zi5pbWFnZT1hLmltYWdlOnZvaWQgMCE9PQphLmRhdGEmJihmLmltYWdlLndpZHRoPWEud2lkdGgsZi5pbWFnZS5oZWlnaHQ9YS5oZWlnaHQsZi5pbWFnZS5kYXRhPWEuZGF0YSksZi53cmFwUz12b2lkIDAhPT1hLndyYXBTP2Eud3JhcFM6MTAwMSxmLndyYXBUPXZvaWQgMCE9PWEud3JhcFQ/YS53cmFwVDoxMDAxLGYubWFnRmlsdGVyPXZvaWQgMCE9PWEubWFnRmlsdGVyP2EubWFnRmlsdGVyOjEwMDYsZi5taW5GaWx0ZXI9dm9pZCAwIT09YS5taW5GaWx0ZXI/YS5taW5GaWx0ZXI6MTAwOCxmLmFuaXNvdHJvcHk9dm9pZCAwIT09YS5hbmlzb3Ryb3B5P2EuYW5pc290cm9weToxLHZvaWQgMCE9PWEuZm9ybWF0JiYoZi5mb3JtYXQ9YS5mb3JtYXQpLHZvaWQgMCE9PWEudHlwZSYmKGYudHlwZT1hLnR5cGUpLHZvaWQgMCE9PWEubWlwbWFwcyYmKGYubWlwbWFwcz1hLm1pcG1hcHMpLDE9PT1hLm1pcG1hcENvdW50JiYoZi5taW5GaWx0ZXI9MTAwNiksZi5uZWVkc1VwZGF0ZT0hMCxiJiZiKGYsYSl9LGMsZCk7cmV0dXJuIGZ9fSk7T2JqZWN0LmFzc2lnbihWYy5wcm90b3R5cGUsCntsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe3ZvaWQgMD09PWEmJihhPSIiKTt2b2lkIDAhPT10aGlzLnBhdGgmJihhPXRoaXMucGF0aCthKTt2YXIgZT10aGlzLGY9aGQuZ2V0KGEpO2lmKHZvaWQgMCE9PWYpcmV0dXJuIGUubWFuYWdlci5pdGVtU3RhcnQoYSksc2V0VGltZW91dChmdW5jdGlvbigpe2ImJmIoZik7ZS5tYW5hZ2VyLml0ZW1FbmQoYSl9LDApLGY7Yz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJpbWciKTtjLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7aGQuYWRkKGEsdGhpcyk7YiYmYih0aGlzKTtlLm1hbmFnZXIuaXRlbUVuZChhKX0sITEpO2MuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKGIpe2QmJmQoYik7ZS5tYW5hZ2VyLml0ZW1FbmQoYSk7ZS5tYW5hZ2VyLml0ZW1FcnJvcihhKX0sITEpOyJkYXRhOiIhPT1hLnN1YnN0cigwLDUpJiZ2b2lkIDAhPT10aGlzLmNyb3NzT3JpZ2luJiYKKGMuY3Jvc3NPcmlnaW49dGhpcy5jcm9zc09yaWdpbik7ZS5tYW5hZ2VyLml0ZW1TdGFydChhKTtjLnNyYz1hO3JldHVybiBjfSxzZXRDcm9zc09yaWdpbjpmdW5jdGlvbihhKXt0aGlzLmNyb3NzT3JpZ2luPWE7cmV0dXJuIHRoaXN9LHNldFBhdGg6ZnVuY3Rpb24oYSl7dGhpcy5wYXRoPWE7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihhZS5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYSxiLGMsZCl7ZnVuY3Rpb24gZShjKXtnLmxvYWQoYVtjXSxmdW5jdGlvbihhKXtmLmltYWdlc1tjXT1hO2grKzs2PT09aCYmKGYubmVlZHNVcGRhdGU9ITAsYiYmYihmKSl9LHZvaWQgMCxkKX12YXIgZj1uZXcgWmEsZz1uZXcgVmModGhpcy5tYW5hZ2VyKTtnLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2cuc2V0UGF0aCh0aGlzLnBhdGgpO3ZhciBoPTA7Zm9yKGM9MDtjPGEubGVuZ3RoOysrYyllKGMpO3JldHVybiBmfSxzZXRDcm9zc09yaWdpbjpmdW5jdGlvbihhKXt0aGlzLmNyb3NzT3JpZ2luPQphO3JldHVybiB0aGlzfSxzZXRQYXRoOmZ1bmN0aW9uKGEpe3RoaXMucGF0aD1hO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oc2QucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW5ldyBWYyh0aGlzLm1hbmFnZXIpO2Uuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7ZS5zZXRQYXRoKHRoaXMucGF0aCk7dmFyIGY9bmV3IFg7Zi5pbWFnZT1lLmxvYWQoYSxmdW5jdGlvbigpe3ZhciBjPTA8YS5zZWFyY2goL1wuKGpwZ3xqcGVnKSQvKXx8MD09PWEuc2VhcmNoKC9eZGF0YVw6aW1hZ2VcL2pwZWcvKTtmLmZvcm1hdD1jPzEwMjI6MTAyMztmLm5lZWRzVXBkYXRlPSEwO3ZvaWQgMCE9PWImJmIoZil9LGMsZCk7cmV0dXJuIGZ9LHNldENyb3NzT3JpZ2luOmZ1bmN0aW9uKGEpe3RoaXMuY3Jvc3NPcmlnaW49YTtyZXR1cm4gdGhpc30sc2V0UGF0aDpmdW5jdGlvbihhKXt0aGlzLnBhdGg9YTtyZXR1cm4gdGhpc319KTttYS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSwKe2NvbnN0cnVjdG9yOm1hLGlzTGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXtCLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLmNvbG9yLmNvcHkoYS5jb2xvcik7dGhpcy5pbnRlbnNpdHk9YS5pbnRlbnNpdHk7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihhKXthPUIucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsYSk7YS5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKTthLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHk7dm9pZCAwIT09dGhpcy5ncm91bmRDb2xvciYmKGEub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpO3ZvaWQgMCE9PXRoaXMuZGlzdGFuY2UmJihhLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKTt2b2lkIDAhPT10aGlzLmFuZ2xlJiYoYS5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSk7dm9pZCAwIT09dGhpcy5kZWNheSYmKGEub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpO3ZvaWQgMCE9PQp0aGlzLnBlbnVtYnJhJiYoYS5vYmplY3QucGVudW1icmE9dGhpcy5wZW51bWJyYSk7dm9pZCAwIT09dGhpcy5zaGFkb3cmJihhLm9iamVjdC5zaGFkb3c9dGhpcy5zaGFkb3cudG9KU09OKCkpO3JldHVybiBhfX0pO3RkLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobWEucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6dGQsaXNIZW1pc3BoZXJlTGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXttYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5ncm91bmRDb2xvci5jb3B5KGEuZ3JvdW5kQ29sb3IpO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24odWIucHJvdG90eXBlLHtjb3B5OmZ1bmN0aW9uKGEpe3RoaXMuY2FtZXJhPWEuY2FtZXJhLmNsb25lKCk7dGhpcy5iaWFzPWEuYmlhczt0aGlzLnJhZGl1cz1hLnJhZGl1czt0aGlzLm1hcFNpemUuY29weShhLm1hcFNpemUpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sCnRvSlNPTjpmdW5jdGlvbigpe3ZhciBhPXt9OzAhPT10aGlzLmJpYXMmJihhLmJpYXM9dGhpcy5iaWFzKTsxIT09dGhpcy5yYWRpdXMmJihhLnJhZGl1cz10aGlzLnJhZGl1cyk7aWYoNTEyIT09dGhpcy5tYXBTaXplLnh8fDUxMiE9PXRoaXMubWFwU2l6ZS55KWEubWFwU2l6ZT10aGlzLm1hcFNpemUudG9BcnJheSgpO2EuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0O2RlbGV0ZSBhLmNhbWVyYS5tYXRyaXg7cmV0dXJuIGF9fSk7dWQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZSh1Yi5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp1ZCxpc1Nwb3RMaWdodFNoYWRvdzohMCx1cGRhdGU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jYW1lcmEsYz0yKlkuUkFEMkRFRyphLmFuZ2xlLGQ9dGhpcy5tYXBTaXplLndpZHRoL3RoaXMubWFwU2l6ZS5oZWlnaHQ7YT1hLmRpc3RhbmNlfHxiLmZhcjtpZihjIT09Yi5mb3Z8fGQhPT1iLmFzcGVjdHx8YSE9PWIuZmFyKWIuZm92PQpjLGIuYXNwZWN0PWQsYi5mYXI9YSxiLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX19KTt2ZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG1hLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnZkLGlzU3BvdExpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24oYSl7bWEucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMuZGlzdGFuY2U9YS5kaXN0YW5jZTt0aGlzLmFuZ2xlPWEuYW5nbGU7dGhpcy5wZW51bWJyYT1hLnBlbnVtYnJhO3RoaXMuZGVjYXk9YS5kZWNheTt0aGlzLnRhcmdldD1hLnRhcmdldC5jbG9uZSgpO3RoaXMuc2hhZG93PWEuc2hhZG93LmNsb25lKCk7cmV0dXJuIHRoaXN9fSk7d2QucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShtYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp3ZCxpc1BvaW50TGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXttYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5kaXN0YW5jZT1hLmRpc3RhbmNlOwp0aGlzLmRlY2F5PWEuZGVjYXk7dGhpcy5zaGFkb3c9YS5zaGFkb3cuY2xvbmUoKTtyZXR1cm4gdGhpc319KTt4ZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHViLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnhkfSk7eWQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShtYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp5ZCxpc0RpcmVjdGlvbmFsTGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXttYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy50YXJnZXQ9YS50YXJnZXQuY2xvbmUoKTt0aGlzLnNoYWRvdz1hLnNoYWRvdy5jbG9uZSgpO3JldHVybiB0aGlzfX0pO3pkLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobWEucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6emQsaXNBbWJpZW50TGlnaHQ6ITB9KTtBZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG1hLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkFkLAppc1JlY3RBcmVhTGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXttYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy53aWR0aD1hLndpZHRoO3RoaXMuaGVpZ2h0PWEuaGVpZ2h0O3JldHVybiB0aGlzfSx0b0pTT046ZnVuY3Rpb24oYSl7YT1tYS5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxhKTthLm9iamVjdC53aWR0aD10aGlzLndpZHRoO2Eub2JqZWN0LmhlaWdodD10aGlzLmhlaWdodDtyZXR1cm4gYX19KTt2YXIgdmE9e2FycmF5U2xpY2U6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB2YS5pc1R5cGVkQXJyYXkoYSk/bmV3IGEuY29uc3RydWN0b3IoYS5zdWJhcnJheShiLHZvaWQgMCE9PWM/YzphLmxlbmd0aCkpOmEuc2xpY2UoYixjKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4hYXx8IWMmJmEuY29uc3RydWN0b3I9PT1iP2E6Im51bWJlciI9PT10eXBlb2YgYi5CWVRFU19QRVJfRUxFTUVOVD9uZXcgYihhKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhKX0sCmlzVHlwZWRBcnJheTpmdW5jdGlvbihhKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGEpJiYhKGEgaW5zdGFuY2VvZiBEYXRhVmlldyl9LGdldEtleWZyYW1lT3JkZXI6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEubGVuZ3RoLGM9QXJyYXkoYiksZD0wO2QhPT1iOysrZCljW2RdPWQ7Yy5zb3J0KGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGFbYl0tYVtjXX0pO3JldHVybiBjfSxzb3J0ZWRBcnJheTpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPWEubGVuZ3RoLGU9bmV3IGEuY29uc3RydWN0b3IoZCksZj0wLGc9MDtnIT09ZDsrK2YpZm9yKHZhciBoPWNbZl0qYixrPTA7ayE9PWI7KytrKWVbZysrXT1hW2gra107cmV0dXJuIGV9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKGEsYixjLGQpe2Zvcih2YXIgZT0xLGY9YVswXTt2b2lkIDAhPT1mJiZ2b2lkIDA9PT1mW2RdOylmPWFbZSsrXTtpZih2b2lkIDAhPT1mKXt2YXIgZz1mW2RdO2lmKHZvaWQgMCE9PWcpaWYoQXJyYXkuaXNBcnJheShnKSl7ZG8gZz0KZltkXSx2b2lkIDAhPT1nJiYoYi5wdXNoKGYudGltZSksYy5wdXNoLmFwcGx5KGMsZykpLGY9YVtlKytdO3doaWxlKHZvaWQgMCE9PWYpfWVsc2UgaWYodm9pZCAwIT09Zy50b0FycmF5KXtkbyBnPWZbZF0sdm9pZCAwIT09ZyYmKGIucHVzaChmLnRpbWUpLGcudG9BcnJheShjLGMubGVuZ3RoKSksZj1hW2UrK107d2hpbGUodm9pZCAwIT09Zil9ZWxzZXtkbyBnPWZbZF0sdm9pZCAwIT09ZyYmKGIucHVzaChmLnRpbWUpLGMucHVzaChnKSksZj1hW2UrK107d2hpbGUodm9pZCAwIT09Zil9fX19O09iamVjdC5hc3NpZ24oRGEucHJvdG90eXBlLHtldmFsdWF0ZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxjPXRoaXMuX2NhY2hlZEluZGV4LGQ9YltjXSxlPWJbYy0xXTthOntiOntjOntkOmlmKCEoYTxkKSl7Zm9yKHZhciBmPWMrMjs7KXtpZih2b2lkIDA9PT1kKXtpZihhPGUpYnJlYWsgZDt0aGlzLl9jYWNoZWRJbmRleD1jPWIubGVuZ3RoO3JldHVybiB0aGlzLmFmdGVyRW5kXyhjLQoxLGEsZSl9aWYoYz09PWYpYnJlYWs7ZT1kO2Q9YlsrK2NdO2lmKGE8ZClicmVhayBifWQ9Yi5sZW5ndGg7YnJlYWsgY31pZihhPj1lKWJyZWFrIGE7ZWxzZXtmPWJbMV07YTxmJiYoYz0yLGU9Zik7Zm9yKGY9Yy0yOzspe2lmKHZvaWQgMD09PWUpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCxhLGQpO2lmKGM9PT1mKWJyZWFrO2Q9ZTtlPWJbLS1jLTFdO2lmKGE+PWUpYnJlYWsgYn1kPWM7Yz0wfX1mb3IoO2M8ZDspZT1jK2Q+Pj4xLGE8YltlXT9kPWU6Yz1lKzE7ZD1iW2NdO2U9YltjLTFdO2lmKHZvaWQgMD09PWUpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCxhLGQpO2lmKHZvaWQgMD09PWQpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PWM9Yi5sZW5ndGgsdGhpcy5hZnRlckVuZF8oYy0xLGUsYSl9dGhpcy5fY2FjaGVkSW5kZXg9Yzt0aGlzLmludGVydmFsQ2hhbmdlZF8oYyxlLGQpfXJldHVybiB0aGlzLmludGVycG9sYXRlXyhjLAplLGEsZCl9LHNldHRpbmdzOm51bGwsRGVmYXVsdFNldHRpbmdzXzp7fSxnZXRTZXR0aW5nc186ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffSxjb3B5U2FtcGxlVmFsdWVfOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucmVzdWx0QnVmZmVyLGM9dGhpcy5zYW1wbGVWYWx1ZXMsZD10aGlzLnZhbHVlU2l6ZTthKj1kO2Zvcih2YXIgZT0wO2UhPT1kOysrZSliW2VdPWNbYStlXTtyZXR1cm4gYn0saW50ZXJwb2xhdGVfOmZ1bmN0aW9uKGEsYixjLGQpe3Rocm93IEVycm9yKCJjYWxsIHRvIGFic3RyYWN0IG1ldGhvZCIpO30saW50ZXJ2YWxDaGFuZ2VkXzpmdW5jdGlvbihhLGIsYyl7fX0pO09iamVjdC5hc3NpZ24oRGEucHJvdG90eXBlLHtiZWZvcmVTdGFydF86RGEucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV8sYWZ0ZXJFbmRfOkRhLnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVffSk7QmQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShEYS5wcm90b3R5cGUpLAp7Y29uc3RydWN0b3I6QmQsRGVmYXVsdFNldHRpbmdzXzp7ZW5kaW5nU3RhcnQ6MjQwMCxlbmRpbmdFbmQ6MjQwMH0saW50ZXJ2YWxDaGFuZ2VkXzpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMsZT1hLTIsZj1hKzEsZz1kW2VdLGg9ZFtmXTtpZih2b2lkIDA9PT1nKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0KXtjYXNlIDI0MDE6ZT1hO2c9MipiLWM7YnJlYWs7Y2FzZSAyNDAyOmU9ZC5sZW5ndGgtMjtnPWIrZFtlXS1kW2UrMV07YnJlYWs7ZGVmYXVsdDplPWEsZz1jfWlmKHZvaWQgMD09PWgpc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nRW5kKXtjYXNlIDI0MDE6Zj1hO2g9MipjLWI7YnJlYWs7Y2FzZSAyNDAyOmY9MTtoPWMrZFsxXS1kWzBdO2JyZWFrO2RlZmF1bHQ6Zj1hLTEsaD1ifWE9LjUqKGMtYik7ZD10aGlzLnZhbHVlU2l6ZTt0aGlzLl93ZWlnaHRQcmV2PWEvKGItZyk7dGhpcy5fd2VpZ2h0TmV4dD0KYS8oaC1jKTt0aGlzLl9vZmZzZXRQcmV2PWUqZDt0aGlzLl9vZmZzZXROZXh0PWYqZH0saW50ZXJwb2xhdGVfOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMucmVzdWx0QnVmZmVyLGY9dGhpcy5zYW1wbGVWYWx1ZXMsZz10aGlzLnZhbHVlU2l6ZTthKj1nO3ZhciBoPWEtZyxrPXRoaXMuX29mZnNldFByZXYsbT10aGlzLl9vZmZzZXROZXh0LGw9dGhpcy5fd2VpZ2h0UHJldixxPXRoaXMuX3dlaWdodE5leHQsbj0oYy1iKS8oZC1iKTtjPW4qbjtkPWMqbjtiPS1sKmQrMipsKmMtbCpuO2w9KDErbCkqZCsoLTEuNS0yKmwpKmMrKC0uNStsKSpuKzE7bj0oLTEtcSkqZCsoMS41K3EpKmMrLjUqbjtxPXEqZC1xKmM7Zm9yKGM9MDtjIT09ZzsrK2MpZVtjXT1iKmZbaytjXStsKmZbaCtjXStuKmZbYStjXStxKmZbbStjXTtyZXR1cm4gZX19KTtXYy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKERhLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOldjLGludGVycG9sYXRlXzpmdW5jdGlvbihhLApiLGMsZCl7dmFyIGU9dGhpcy5yZXN1bHRCdWZmZXIsZj10aGlzLnNhbXBsZVZhbHVlcyxnPXRoaXMudmFsdWVTaXplO2EqPWc7dmFyIGg9YS1nO2I9KGMtYikvKGQtYik7Yz0xLWI7Zm9yKGQ9MDtkIT09ZzsrK2QpZVtkXT1mW2grZF0qYytmW2ErZF0qYjtyZXR1cm4gZX19KTtDZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKERhLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkNkLGludGVycG9sYXRlXzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5jb3B5U2FtcGxlVmFsdWVfKGEtMSl9fSk7dmFyIFlhO1lhPXtUaW1lQnVmZmVyVHlwZTpGbG9hdDMyQXJyYXksVmFsdWVCdWZmZXJUeXBlOkZsb2F0MzJBcnJheSxEZWZhdWx0SW50ZXJwb2xhdGlvbjoyMzAxLEludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgQ2QodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLGEpfSxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBXYyh0aGlzLnRpbWVzLAp0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLGEpfSxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBCZCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksYSl9LHNldEludGVycG9sYXRpb246ZnVuY3Rpb24oYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMjMwMDpiPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU7YnJlYWs7Y2FzZSAyMzAxOmI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSAyMzAyOmI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09Yil7Yj0idW5zdXBwb3J0ZWQgaW50ZXJwb2xhdGlvbiBmb3IgIit0aGlzLlZhbHVlVHlwZU5hbWUrIiBrZXlmcmFtZSB0cmFjayBuYW1lZCAiK3RoaXMubmFtZTtpZih2b2lkIDA9PT10aGlzLmNyZWF0ZUludGVycG9sYW50KWlmKGEhPT10aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKXRoaXMuc2V0SW50ZXJwb2xhdGlvbih0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKTsKZWxzZSB0aHJvdyBFcnJvcihiKTtjb25zb2xlLndhcm4oYil9ZWxzZSB0aGlzLmNyZWF0ZUludGVycG9sYW50PWJ9LGdldEludGVycG9sYXRpb246ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiAyMzAwO2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6cmV0dXJuIDIzMDE7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gMjMwMn19LGdldFZhbHVlU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGgvdGhpcy50aW1lcy5sZW5ndGh9LHNoaWZ0OmZ1bmN0aW9uKGEpe2lmKDAhPT1hKWZvcih2YXIgYj10aGlzLnRpbWVzLGM9MCxkPWIubGVuZ3RoO2MhPT1kOysrYyliW2NdKz1hO3JldHVybiB0aGlzfSxzY2FsZTpmdW5jdGlvbihhKXtpZigxIT09YSlmb3IodmFyIGI9dGhpcy50aW1lcyxjPQowLGQ9Yi5sZW5ndGg7YyE9PWQ7KytjKWJbY10qPWE7cmV0dXJuIHRoaXN9LHRyaW06ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9dGhpcy50aW1lcyxkPWMubGVuZ3RoLGU9MCxmPWQtMTtlIT09ZCYmY1tlXTxhOykrK2U7Zm9yKDstMSE9PWYmJmNbZl0+YjspLS1mOysrZjtpZigwIT09ZXx8ZiE9PWQpZT49ZiYmKGY9TWF0aC5tYXgoZiwxKSxlPWYtMSksZD10aGlzLmdldFZhbHVlU2l6ZSgpLHRoaXMudGltZXM9dmEuYXJyYXlTbGljZShjLGUsZiksdGhpcy52YWx1ZXM9dmEuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyxlKmQsZipkKTtyZXR1cm4gdGhpc30sdmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgYT0hMCxiPXRoaXMuZ2V0VmFsdWVTaXplKCk7MCE9PWItTWF0aC5mbG9vcihiKSYmKGNvbnNvbGUuZXJyb3IoImludmFsaWQgdmFsdWUgc2l6ZSBpbiB0cmFjayIsdGhpcyksYT0hMSk7dmFyIGM9dGhpcy50aW1lcyxiPXRoaXMudmFsdWVzLGQ9Yy5sZW5ndGg7MD09PWQmJihjb25zb2xlLmVycm9yKCJ0cmFjayBpcyBlbXB0eSIsCnRoaXMpLGE9ITEpO2Zvcih2YXIgZT1udWxsLGY9MDtmIT09ZDtmKyspe3ZhciBnPWNbZl07aWYoIm51bWJlciI9PT10eXBlb2YgZyYmaXNOYU4oZykpe2NvbnNvbGUuZXJyb3IoInRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyIix0aGlzLGYsZyk7YT0hMTticmVha31pZihudWxsIT09ZSYmZT5nKXtjb25zb2xlLmVycm9yKCJvdXQgb2Ygb3JkZXIga2V5cyIsdGhpcyxmLGcsZSk7YT0hMTticmVha31lPWd9aWYodm9pZCAwIT09YiYmdmEuaXNUeXBlZEFycmF5KGIpKWZvcihmPTAsYz1iLmxlbmd0aDtmIT09YzsrK2YpaWYoZD1iW2ZdLGlzTmFOKGQpKXtjb25zb2xlLmVycm9yKCJ2YWx1ZSBpcyBub3QgYSB2YWxpZCBudW1iZXIiLHRoaXMsZixkKTthPSExO2JyZWFrfXJldHVybiBhfSxvcHRpbWl6ZTpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLnRpbWVzLGI9dGhpcy52YWx1ZXMsYz10aGlzLmdldFZhbHVlU2l6ZSgpLGQ9MjMwMj09PXRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpLGU9MSwKZj1hLmxlbmd0aC0xLGc9MTtnPGY7KytnKXt2YXIgaD0hMSxrPWFbZ107aWYoayE9PWFbZysxXSYmKDEhPT1nfHxrIT09a1swXSkpaWYoZCloPSEwO2Vsc2UgZm9yKHZhciBtPWcqYyxsPW0tYyxxPW0rYyxrPTA7ayE9PWM7KytrKXt2YXIgbj1iW20ra107aWYobiE9PWJbbCtrXXx8biE9PWJbcStrXSl7aD0hMDticmVha319aWYoaCl7aWYoZyE9PWUpZm9yKGFbZV09YVtnXSxoPWcqYyxtPWUqYyxrPTA7ayE9PWM7KytrKWJbbStrXT1iW2gra107KytlfX1pZigwPGYpe2FbZV09YVtmXTtoPWYqYzttPWUqYztmb3Ioaz0wO2shPT1jOysrayliW20ra109YltoK2tdOysrZX1lIT09YS5sZW5ndGgmJih0aGlzLnRpbWVzPXZhLmFycmF5U2xpY2UoYSwwLGUpLHRoaXMudmFsdWVzPXZhLmFycmF5U2xpY2UoYiwwLGUqYykpO3JldHVybiB0aGlzfX07ZWMucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShZYSkse2NvbnN0cnVjdG9yOmVjLFZhbHVlVHlwZU5hbWU6InZlY3RvciJ9KTsKRGQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShEYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpEZCxpbnRlcnBvbGF0ZV86ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5yZXN1bHRCdWZmZXIsZj10aGlzLnNhbXBsZVZhbHVlcyxnPXRoaXMudmFsdWVTaXplO2EqPWc7Yj0oYy1iKS8oZC1iKTtmb3IoYz1hK2c7YSE9PWM7YSs9NClxYS5zbGVycEZsYXQoZSwwLGYsYS1nLGYsYSxiKTtyZXR1cm4gZX19KTtYYy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFlhKSx7Y29uc3RydWN0b3I6WGMsVmFsdWVUeXBlTmFtZToicXVhdGVybmlvbiIsRGVmYXVsdEludGVycG9sYXRpb246MjMwMSxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBEZCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksYSl9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KTsKZmMucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShZYSkse2NvbnN0cnVjdG9yOmZjLFZhbHVlVHlwZU5hbWU6Im51bWJlciJ9KTtFZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFlhKSx7Y29uc3RydWN0b3I6RWQsVmFsdWVUeXBlTmFtZToic3RyaW5nIixWYWx1ZUJ1ZmZlclR5cGU6QXJyYXksRGVmYXVsdEludGVycG9sYXRpb246MjMwMCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6dm9pZCAwLEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KTtGZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFlhKSx7Y29uc3RydWN0b3I6RmQsVmFsdWVUeXBlTmFtZToiYm9vbCIsVmFsdWVCdWZmZXJUeXBlOkFycmF5LERlZmF1bHRJbnRlcnBvbGF0aW9uOjIzMDAsSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnZvaWQgMCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg6dm9pZCAwfSk7CkdkLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoWWEpLHtjb25zdHJ1Y3RvcjpHZCxWYWx1ZVR5cGVOYW1lOiJjb2xvciJ9KTt3Yi5wcm90b3R5cGU9WWE7WWEuY29uc3RydWN0b3I9d2I7T2JqZWN0LmFzc2lnbih3Yix7cGFyc2U6ZnVuY3Rpb24oYSl7aWYodm9pZCAwPT09YS50eXBlKXRocm93IEVycm9yKCJ0cmFjayB0eXBlIHVuZGVmaW5lZCwgY2FuIG5vdCBwYXJzZSIpO3ZhciBiPXdiLl9nZXRUcmFja1R5cGVGb3JWYWx1ZVR5cGVOYW1lKGEudHlwZSk7aWYodm9pZCAwPT09YS50aW1lcyl7dmFyIGM9W10sZD1bXTt2YS5mbGF0dGVuSlNPTihhLmtleXMsYyxkLCJ2YWx1ZSIpO2EudGltZXM9YzthLnZhbHVlcz1kfXJldHVybiB2b2lkIDAhPT1iLnBhcnNlP2IucGFyc2UoYSk6bmV3IGIoYS5uYW1lLGEudGltZXMsYS52YWx1ZXMsYS5pbnRlcnBvbGF0aW9uKX0sdG9KU09OOmZ1bmN0aW9uKGEpe3ZhciBiPWEuY29uc3RydWN0b3I7aWYodm9pZCAwIT09Yi50b0pTT04pYj0KYi50b0pTT04oYSk7ZWxzZXt2YXIgYj17bmFtZTphLm5hbWUsdGltZXM6dmEuY29udmVydEFycmF5KGEudGltZXMsQXJyYXkpLHZhbHVlczp2YS5jb252ZXJ0QXJyYXkoYS52YWx1ZXMsQXJyYXkpfSxjPWEuZ2V0SW50ZXJwb2xhdGlvbigpO2MhPT1hLkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYoYi5pbnRlcnBvbGF0aW9uPWMpfWIudHlwZT1hLlZhbHVlVHlwZU5hbWU7cmV0dXJuIGJ9LF9nZXRUcmFja1R5cGVGb3JWYWx1ZVR5cGVOYW1lOmZ1bmN0aW9uKGEpe3N3aXRjaChhLnRvTG93ZXJDYXNlKCkpe2Nhc2UgInNjYWxhciI6Y2FzZSAiZG91YmxlIjpjYXNlICJmbG9hdCI6Y2FzZSAibnVtYmVyIjpjYXNlICJpbnRlZ2VyIjpyZXR1cm4gZmM7Y2FzZSAidmVjdG9yIjpjYXNlICJ2ZWN0b3IyIjpjYXNlICJ2ZWN0b3IzIjpjYXNlICJ2ZWN0b3I0IjpyZXR1cm4gZWM7Y2FzZSAiY29sb3IiOnJldHVybiBHZDtjYXNlICJxdWF0ZXJuaW9uIjpyZXR1cm4gWGM7Y2FzZSAiYm9vbCI6Y2FzZSAiYm9vbGVhbiI6cmV0dXJuIEZkOwpjYXNlICJzdHJpbmciOnJldHVybiBFZH10aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgdHlwZU5hbWU6ICIrYSk7fX0pO09iamVjdC5hc3NpZ24oQmEse3BhcnNlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPWEudHJhY2tzLGQ9MS8oYS5mcHN8fDEpLGU9MCxmPWMubGVuZ3RoO2UhPT1mOysrZSliLnB1c2god2IucGFyc2UoY1tlXSkuc2NhbGUoZCkpO3JldHVybiBuZXcgQmEoYS5uYW1lLGEuZHVyYXRpb24sYil9LHRvSlNPTjpmdW5jdGlvbihhKXt2YXIgYj1bXSxjPWEudHJhY2tzO2E9e25hbWU6YS5uYW1lLGR1cmF0aW9uOmEuZHVyYXRpb24sdHJhY2tzOmJ9O2Zvcih2YXIgZD0wLGU9Yy5sZW5ndGg7ZCE9PWU7KytkKWIucHVzaCh3Yi50b0pTT04oY1tkXSkpO3JldHVybiBhfSxDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZTpmdW5jdGlvbihhLGIsYyxkKXtmb3IodmFyIGU9Yi5sZW5ndGgsZj1bXSxnPTA7ZzxlO2crKyl7dmFyIGg9W10saz1bXTtoLnB1c2goKGcrZS0xKSUKZSxnLChnKzEpJWUpO2sucHVzaCgwLDEsMCk7dmFyIG09dmEuZ2V0S2V5ZnJhbWVPcmRlcihoKSxoPXZhLnNvcnRlZEFycmF5KGgsMSxtKSxrPXZhLnNvcnRlZEFycmF5KGssMSxtKTtkfHwwIT09aFswXXx8KGgucHVzaChlKSxrLnB1c2goa1swXSkpO2YucHVzaCgobmV3IGZjKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrYltnXS5uYW1lKyJdIixoLGspKS5zY2FsZSgxL2MpKX1yZXR1cm4gbmV3IEJhKGEsLTEsZil9LGZpbmRCeU5hbWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hO0FycmF5LmlzQXJyYXkoYSl8fChjPWEuZ2VvbWV0cnkmJmEuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8YS5hbmltYXRpb25zKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKylpZihjW2RdLm5hbWU9PT1iKXJldHVybiBjW2RdO3JldHVybiBudWxsfSxDcmVhdGVDbGlwc0Zyb21Nb3JwaFRhcmdldFNlcXVlbmNlczpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXt9LGU9L14oW1x3LV0qPykoW1xkXSspJC8sZj0wLApnPWEubGVuZ3RoO2Y8ZztmKyspe3ZhciBoPWFbZl0saz1oLm5hbWUubWF0Y2goZSk7aWYoayYmMTxrLmxlbmd0aCl7dmFyIG09a1sxXTsoaz1kW21dKXx8KGRbbV09az1bXSk7ay5wdXNoKGgpfX1hPVtdO2ZvcihtIGluIGQpYS5wdXNoKEJhLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKG0sZFttXSxiLGMpKTtyZXR1cm4gYX0scGFyc2VBbmltYXRpb246ZnVuY3Rpb24oYSxiKXtpZighYSlyZXR1cm4gY29uc29sZS5lcnJvcigiICBubyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhIiksbnVsbDtmb3IodmFyIGM9ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZigwIT09Yy5sZW5ndGgpe3ZhciBmPVtdLGc9W107dmEuZmxhdHRlbkpTT04oYyxmLGcsZCk7MCE9PWYubGVuZ3RoJiZlLnB1c2gobmV3IGEoYixmLGcpKX19LGQ9W10sZT1hLm5hbWV8fCJkZWZhdWx0IixmPWEubGVuZ3RofHwtMSxnPWEuZnBzfHwzMCxoPWEuaGllcmFyY2h5fHxbXSxrPTA7azxoLmxlbmd0aDtrKyspe3ZhciBtPQpoW2tdLmtleXM7aWYobSYmMCE9PW0ubGVuZ3RoKWlmKG1bMF0ubW9ycGhUYXJnZXRzKXtmb3IodmFyIGY9e30sbD0wO2w8bS5sZW5ndGg7bCsrKWlmKG1bbF0ubW9ycGhUYXJnZXRzKWZvcih2YXIgcT0wO3E8bVtsXS5tb3JwaFRhcmdldHMubGVuZ3RoO3ErKylmW21bbF0ubW9ycGhUYXJnZXRzW3FdXT0tMTtmb3IodmFyIG4gaW4gZil7Zm9yKHZhciBwPVtdLHo9W10scT0wO3EhPT1tW2xdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7KytxKXt2YXIgdD1tW2xdO3AucHVzaCh0LnRpbWUpO3oucHVzaCh0Lm1vcnBoVGFyZ2V0PT09bj8xOjApfWQucHVzaChuZXcgZmMoIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK24rIl0iLHAseikpfWY9Zi5sZW5ndGgqKGd8fDEpfWVsc2UgbD0iLmJvbmVzWyIrYltrXS5uYW1lKyJdIixjKGVjLGwrIi5wb3NpdGlvbiIsbSwicG9zIixkKSxjKFhjLGwrIi5xdWF0ZXJuaW9uIixtLCJyb3QiLGQpLGMoZWMsbCsiLnNjYWxlIixtLCJzY2wiLGQpfXJldHVybiAwPT09CmQubGVuZ3RoP251bGw6bmV3IEJhKGUsZixkKX19KTtPYmplY3QuYXNzaWduKEJhLnByb3RvdHlwZSx7cmVzZXREdXJhdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI9MCxjPXRoaXMudHJhY2tzLmxlbmd0aDtiIT09YzsrK2IpdmFyIGQ9dGhpcy50cmFja3NbYl0sYT1NYXRoLm1heChhLGQudGltZXNbZC50aW1lcy5sZW5ndGgtMV0pO3RoaXMuZHVyYXRpb249YX0sdHJpbTpmdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8dGhpcy50cmFja3MubGVuZ3RoO2ErKyl0aGlzLnRyYWNrc1thXS50cmltKDAsdGhpcy5kdXJhdGlvbik7cmV0dXJuIHRoaXN9LG9wdGltaXplOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTx0aGlzLnRyYWNrcy5sZW5ndGg7YSsrKXRoaXMudHJhY2tzW2FdLm9wdGltaXplKCk7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihIZC5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcyxmPW5ldyB1YShlLm1hbmFnZXIpO2Yuc2V0UmVzcG9uc2VUeXBlKCJqc29uIik7CmYubG9hZChhLGZ1bmN0aW9uKGEpe2IoZS5wYXJzZShhKSl9LGMsZCl9LHNldFRleHR1cmVzOmZ1bmN0aW9uKGEpe3RoaXMudGV4dHVyZXM9YX0scGFyc2U6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2b2lkIDA9PT1jW2FdJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsTG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsYSk7cmV0dXJuIGNbYV19dmFyIGM9dGhpcy50ZXh0dXJlcyxkPW5ldyBsZ1thLnR5cGVdO3ZvaWQgMCE9PWEudXVpZCYmKGQudXVpZD1hLnV1aWQpO3ZvaWQgMCE9PWEubmFtZSYmKGQubmFtZT1hLm5hbWUpO3ZvaWQgMCE9PWEuY29sb3ImJmQuY29sb3Iuc2V0SGV4KGEuY29sb3IpO3ZvaWQgMCE9PWEucm91Z2huZXNzJiYoZC5yb3VnaG5lc3M9YS5yb3VnaG5lc3MpO3ZvaWQgMCE9PWEubWV0YWxuZXNzJiYoZC5tZXRhbG5lc3M9YS5tZXRhbG5lc3MpO3ZvaWQgMCE9PWEuZW1pc3NpdmUmJmQuZW1pc3NpdmUuc2V0SGV4KGEuZW1pc3NpdmUpO3ZvaWQgMCE9PQphLnNwZWN1bGFyJiZkLnNwZWN1bGFyLnNldEhleChhLnNwZWN1bGFyKTt2b2lkIDAhPT1hLnNoaW5pbmVzcyYmKGQuc2hpbmluZXNzPWEuc2hpbmluZXNzKTt2b2lkIDAhPT1hLmNsZWFyQ29hdCYmKGQuY2xlYXJDb2F0PWEuY2xlYXJDb2F0KTt2b2lkIDAhPT1hLmNsZWFyQ29hdFJvdWdobmVzcyYmKGQuY2xlYXJDb2F0Um91Z2huZXNzPWEuY2xlYXJDb2F0Um91Z2huZXNzKTt2b2lkIDAhPT1hLnVuaWZvcm1zJiYoZC51bmlmb3Jtcz1hLnVuaWZvcm1zKTt2b2lkIDAhPT1hLnZlcnRleFNoYWRlciYmKGQudmVydGV4U2hhZGVyPWEudmVydGV4U2hhZGVyKTt2b2lkIDAhPT1hLmZyYWdtZW50U2hhZGVyJiYoZC5mcmFnbWVudFNoYWRlcj1hLmZyYWdtZW50U2hhZGVyKTt2b2lkIDAhPT1hLnZlcnRleENvbG9ycyYmKGQudmVydGV4Q29sb3JzPWEudmVydGV4Q29sb3JzKTt2b2lkIDAhPT1hLmZvZyYmKGQuZm9nPWEuZm9nKTt2b2lkIDAhPT1hLnNoYWRpbmcmJihkLnNoYWRpbmc9YS5zaGFkaW5nKTsKdm9pZCAwIT09YS5ibGVuZGluZyYmKGQuYmxlbmRpbmc9YS5ibGVuZGluZyk7dm9pZCAwIT09YS5zaWRlJiYoZC5zaWRlPWEuc2lkZSk7dm9pZCAwIT09YS5vcGFjaXR5JiYoZC5vcGFjaXR5PWEub3BhY2l0eSk7dm9pZCAwIT09YS50cmFuc3BhcmVudCYmKGQudHJhbnNwYXJlbnQ9YS50cmFuc3BhcmVudCk7dm9pZCAwIT09YS5hbHBoYVRlc3QmJihkLmFscGhhVGVzdD1hLmFscGhhVGVzdCk7dm9pZCAwIT09YS5kZXB0aFRlc3QmJihkLmRlcHRoVGVzdD1hLmRlcHRoVGVzdCk7dm9pZCAwIT09YS5kZXB0aFdyaXRlJiYoZC5kZXB0aFdyaXRlPWEuZGVwdGhXcml0ZSk7dm9pZCAwIT09YS5jb2xvcldyaXRlJiYoZC5jb2xvcldyaXRlPWEuY29sb3JXcml0ZSk7dm9pZCAwIT09YS53aXJlZnJhbWUmJihkLndpcmVmcmFtZT1hLndpcmVmcmFtZSk7dm9pZCAwIT09YS53aXJlZnJhbWVMaW5ld2lkdGgmJihkLndpcmVmcmFtZUxpbmV3aWR0aD1hLndpcmVmcmFtZUxpbmV3aWR0aCk7dm9pZCAwIT09CmEud2lyZWZyYW1lTGluZWNhcCYmKGQud2lyZWZyYW1lTGluZWNhcD1hLndpcmVmcmFtZUxpbmVjYXApO3ZvaWQgMCE9PWEud2lyZWZyYW1lTGluZWpvaW4mJihkLndpcmVmcmFtZUxpbmVqb2luPWEud2lyZWZyYW1lTGluZWpvaW4pO3ZvaWQgMCE9PWEuc2tpbm5pbmcmJihkLnNraW5uaW5nPWEuc2tpbm5pbmcpO3ZvaWQgMCE9PWEubW9ycGhUYXJnZXRzJiYoZC5tb3JwaFRhcmdldHM9YS5tb3JwaFRhcmdldHMpO3ZvaWQgMCE9PWEuc2l6ZSYmKGQuc2l6ZT1hLnNpemUpO3ZvaWQgMCE9PWEuc2l6ZUF0dGVudWF0aW9uJiYoZC5zaXplQXR0ZW51YXRpb249YS5zaXplQXR0ZW51YXRpb24pO3ZvaWQgMCE9PWEubWFwJiYoZC5tYXA9YihhLm1hcCkpO3ZvaWQgMCE9PWEuYWxwaGFNYXAmJihkLmFscGhhTWFwPWIoYS5hbHBoYU1hcCksZC50cmFuc3BhcmVudD0hMCk7dm9pZCAwIT09YS5idW1wTWFwJiYoZC5idW1wTWFwPWIoYS5idW1wTWFwKSk7dm9pZCAwIT09YS5idW1wU2NhbGUmJihkLmJ1bXBTY2FsZT0KYS5idW1wU2NhbGUpO3ZvaWQgMCE9PWEubm9ybWFsTWFwJiYoZC5ub3JtYWxNYXA9YihhLm5vcm1hbE1hcCkpO2lmKHZvaWQgMCE9PWEubm9ybWFsU2NhbGUpe3ZhciBlPWEubm9ybWFsU2NhbGU7ITE9PT1BcnJheS5pc0FycmF5KGUpJiYoZT1bZSxlXSk7ZC5ub3JtYWxTY2FsZT0obmV3IEQpLmZyb21BcnJheShlKX12b2lkIDAhPT1hLmRpc3BsYWNlbWVudE1hcCYmKGQuZGlzcGxhY2VtZW50TWFwPWIoYS5kaXNwbGFjZW1lbnRNYXApKTt2b2lkIDAhPT1hLmRpc3BsYWNlbWVudFNjYWxlJiYoZC5kaXNwbGFjZW1lbnRTY2FsZT1hLmRpc3BsYWNlbWVudFNjYWxlKTt2b2lkIDAhPT1hLmRpc3BsYWNlbWVudEJpYXMmJihkLmRpc3BsYWNlbWVudEJpYXM9YS5kaXNwbGFjZW1lbnRCaWFzKTt2b2lkIDAhPT1hLnJvdWdobmVzc01hcCYmKGQucm91Z2huZXNzTWFwPWIoYS5yb3VnaG5lc3NNYXApKTt2b2lkIDAhPT1hLm1ldGFsbmVzc01hcCYmKGQubWV0YWxuZXNzTWFwPWIoYS5tZXRhbG5lc3NNYXApKTsKdm9pZCAwIT09YS5lbWlzc2l2ZU1hcCYmKGQuZW1pc3NpdmVNYXA9YihhLmVtaXNzaXZlTWFwKSk7dm9pZCAwIT09YS5lbWlzc2l2ZUludGVuc2l0eSYmKGQuZW1pc3NpdmVJbnRlbnNpdHk9YS5lbWlzc2l2ZUludGVuc2l0eSk7dm9pZCAwIT09YS5zcGVjdWxhck1hcCYmKGQuc3BlY3VsYXJNYXA9YihhLnNwZWN1bGFyTWFwKSk7dm9pZCAwIT09YS5lbnZNYXAmJihkLmVudk1hcD1iKGEuZW52TWFwKSk7dm9pZCAwIT09YS5yZWZsZWN0aXZpdHkmJihkLnJlZmxlY3Rpdml0eT1hLnJlZmxlY3Rpdml0eSk7dm9pZCAwIT09YS5saWdodE1hcCYmKGQubGlnaHRNYXA9YihhLmxpZ2h0TWFwKSk7dm9pZCAwIT09YS5saWdodE1hcEludGVuc2l0eSYmKGQubGlnaHRNYXBJbnRlbnNpdHk9YS5saWdodE1hcEludGVuc2l0eSk7dm9pZCAwIT09YS5hb01hcCYmKGQuYW9NYXA9YihhLmFvTWFwKSk7dm9pZCAwIT09YS5hb01hcEludGVuc2l0eSYmKGQuYW9NYXBJbnRlbnNpdHk9YS5hb01hcEludGVuc2l0eSk7CnZvaWQgMCE9PWEuZ3JhZGllbnRNYXAmJihkLmdyYWRpZW50TWFwPWIoYS5ncmFkaWVudE1hcCkpO3JldHVybiBkfX0pO09iamVjdC5hc3NpZ24oYmUucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMsZj1uZXcgdWEoZS5tYW5hZ2VyKTtmLnNldFJlc3BvbnNlVHlwZSgianNvbiIpO2YubG9hZChhLGZ1bmN0aW9uKGEpe2IoZS5wYXJzZShhKSl9LGMsZCl9LHBhcnNlOmZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBJLGM9YS5kYXRhLmluZGV4O3ZvaWQgMCE9PWMmJihjPW5ldyBmZltjLnR5cGVdKGMuYXJyYXkpLGIuc2V0SW5kZXgobmV3IEwoYywxKSkpO3ZhciBkPWEuZGF0YS5hdHRyaWJ1dGVzLGU7Zm9yKGUgaW4gZCl7dmFyIGY9ZFtlXSxjPW5ldyBmZltmLnR5cGVdKGYuYXJyYXkpO2IuYWRkQXR0cmlidXRlKGUsbmV3IEwoYyxmLml0ZW1TaXplLGYubm9ybWFsaXplZCkpfWU9YS5kYXRhLmdyb3Vwc3x8YS5kYXRhLmRyYXdjYWxsc3x8YS5kYXRhLm9mZnNldHM7CmlmKHZvaWQgMCE9PWUpZm9yKGM9MCxkPWUubGVuZ3RoO2MhPT1kOysrYylmPWVbY10sYi5hZGRHcm91cChmLnN0YXJ0LGYuY291bnQsZi5tYXRlcmlhbEluZGV4KTthPWEuZGF0YS5ib3VuZGluZ1NwaGVyZTt2b2lkIDAhPT1hJiYoZT1uZXcgcCx2b2lkIDAhPT1hLmNlbnRlciYmZS5mcm9tQXJyYXkoYS5jZW50ZXIpLGIuYm91bmRpbmdTcGhlcmU9bmV3IEdhKGUsYS5yYWRpdXMpKTtyZXR1cm4gYn19KTt2YXIgZmY9e0ludDhBcnJheTpJbnQ4QXJyYXksVWludDhBcnJheTpVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5OlVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXk6SW50MTZBcnJheSxVaW50MTZBcnJheTpVaW50MTZBcnJheSxJbnQzMkFycmF5OkludDMyQXJyYXksVWludDMyQXJyYXk6VWludDMyQXJyYXksRmxvYXQzMkFycmF5OkZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXk6RmxvYXQ2NEFycmF5fTtnYy5IYW5kbGVycz17aGFuZGxlcnM6W10sYWRkOmZ1bmN0aW9uKGEsYil7dGhpcy5oYW5kbGVycy5wdXNoKGEsCmIpfSxnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuaGFuZGxlcnMsYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrPTIpe3ZhciBlPWJbYysxXTtpZihiW2NdLnRlc3QoYSkpcmV0dXJuIGV9cmV0dXJuIG51bGx9fTtPYmplY3QuYXNzaWduKGdjLnByb3RvdHlwZSx7Y3Jvc3NPcmlnaW46dm9pZCAwLGV4dHJhY3RVcmxCYXNlOmZ1bmN0aW9uKGEpe2E9YS5zcGxpdCgiLyIpO2lmKDE9PT1hLmxlbmd0aClyZXR1cm4iLi8iO2EucG9wKCk7cmV0dXJuIGEuam9pbigiLyIpKyIvIn0saW5pdE1hdGVyaWFsczpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPVtdLGU9MDtlPGEubGVuZ3RoOysrZSlkW2VdPXRoaXMuY3JlYXRlTWF0ZXJpYWwoYVtlXSxiLGMpO3JldHVybiBkfSxjcmVhdGVNYXRlcmlhbDpmdW5jdGlvbigpe3ZhciBhPXtOb0JsZW5kaW5nOjAsTm9ybWFsQmxlbmRpbmc6MSxBZGRpdGl2ZUJsZW5kaW5nOjIsU3VidHJhY3RpdmVCbGVuZGluZzozLE11bHRpcGx5QmxlbmRpbmc6NCxDdXN0b21CbGVuZGluZzo1fSwKYj1uZXcgSCxjPW5ldyBzZCxkPW5ldyBIZDtyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe2Z1bmN0aW9uIGgoYSxiLGQsZSxoKXthPWYrYTt2YXIgbT1nYy5IYW5kbGVycy5nZXQoYSk7bnVsbCE9PW0/YT1tLmxvYWQoYSk6KGMuc2V0Q3Jvc3NPcmlnaW4oZyksYT1jLmxvYWQoYSkpO3ZvaWQgMCE9PWImJihhLnJlcGVhdC5mcm9tQXJyYXkoYiksMSE9PWJbMF0mJihhLndyYXBTPTFFMyksMSE9PWJbMV0mJihhLndyYXBUPTFFMykpO3ZvaWQgMCE9PWQmJmEub2Zmc2V0LmZyb21BcnJheShkKTt2b2lkIDAhPT1lJiYoInJlcGVhdCI9PT1lWzBdJiYoYS53cmFwUz0xRTMpLCJtaXJyb3IiPT09ZVswXSYmKGEud3JhcFM9MTAwMiksInJlcGVhdCI9PT1lWzFdJiYoYS53cmFwVD0xRTMpLCJtaXJyb3IiPT09ZVsxXSYmKGEud3JhcFQ9MTAwMikpO3ZvaWQgMCE9PWgmJihhLmFuaXNvdHJvcHk9aCk7Yj1ZLmdlbmVyYXRlVVVJRCgpO2tbYl09YTtyZXR1cm4gYn12YXIgaz17fSxtPXt1dWlkOlkuZ2VuZXJhdGVVVUlEKCksCnR5cGU6Ik1lc2hMYW1iZXJ0TWF0ZXJpYWwifSxsO2ZvcihsIGluIGUpe3ZhciBxPWVbbF07c3dpdGNoKGwpe2Nhc2UgIkRiZ0NvbG9yIjpjYXNlICJEYmdJbmRleCI6Y2FzZSAib3B0aWNhbERlbnNpdHkiOmNhc2UgImlsbHVtaW5hdGlvbiI6YnJlYWs7Y2FzZSAiRGJnTmFtZSI6bS5uYW1lPXE7YnJlYWs7Y2FzZSAiYmxlbmRpbmciOm0uYmxlbmRpbmc9YVtxXTticmVhaztjYXNlICJjb2xvckFtYmllbnQiOmNhc2UgIm1hcEFtYmllbnQiOmNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyLmNyZWF0ZU1hdGVyaWFsOiIsbCwiaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4iKTticmVhaztjYXNlICJjb2xvckRpZmZ1c2UiOm0uY29sb3I9Yi5mcm9tQXJyYXkocSkuZ2V0SGV4KCk7YnJlYWs7Y2FzZSAiY29sb3JTcGVjdWxhciI6bS5zcGVjdWxhcj1iLmZyb21BcnJheShxKS5nZXRIZXgoKTticmVhaztjYXNlICJjb2xvckVtaXNzaXZlIjptLmVtaXNzaXZlPWIuZnJvbUFycmF5KHEpLmdldEhleCgpOwpicmVhaztjYXNlICJzcGVjdWxhckNvZWYiOm0uc2hpbmluZXNzPXE7YnJlYWs7Y2FzZSAic2hhZGluZyI6ImJhc2ljIj09PXEudG9Mb3dlckNhc2UoKSYmKG0udHlwZT0iTWVzaEJhc2ljTWF0ZXJpYWwiKTsicGhvbmciPT09cS50b0xvd2VyQ2FzZSgpJiYobS50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIpOyJzdGFuZGFyZCI9PT1xLnRvTG93ZXJDYXNlKCkmJihtLnR5cGU9Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIik7YnJlYWs7Y2FzZSAibWFwRGlmZnVzZSI6bS5tYXA9aChxLGUubWFwRGlmZnVzZVJlcGVhdCxlLm1hcERpZmZ1c2VPZmZzZXQsZS5tYXBEaWZmdXNlV3JhcCxlLm1hcERpZmZ1c2VBbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBEaWZmdXNlUmVwZWF0IjpjYXNlICJtYXBEaWZmdXNlT2Zmc2V0IjpjYXNlICJtYXBEaWZmdXNlV3JhcCI6Y2FzZSAibWFwRGlmZnVzZUFuaXNvdHJvcHkiOmJyZWFrO2Nhc2UgIm1hcEVtaXNzaXZlIjptLmVtaXNzaXZlTWFwPWgocSxlLm1hcEVtaXNzaXZlUmVwZWF0LAplLm1hcEVtaXNzaXZlT2Zmc2V0LGUubWFwRW1pc3NpdmVXcmFwLGUubWFwRW1pc3NpdmVBbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBFbWlzc2l2ZVJlcGVhdCI6Y2FzZSAibWFwRW1pc3NpdmVPZmZzZXQiOmNhc2UgIm1hcEVtaXNzaXZlV3JhcCI6Y2FzZSAibWFwRW1pc3NpdmVBbmlzb3Ryb3B5IjpicmVhaztjYXNlICJtYXBMaWdodCI6bS5saWdodE1hcD1oKHEsZS5tYXBMaWdodFJlcGVhdCxlLm1hcExpZ2h0T2Zmc2V0LGUubWFwTGlnaHRXcmFwLGUubWFwTGlnaHRBbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBMaWdodFJlcGVhdCI6Y2FzZSAibWFwTGlnaHRPZmZzZXQiOmNhc2UgIm1hcExpZ2h0V3JhcCI6Y2FzZSAibWFwTGlnaHRBbmlzb3Ryb3B5IjpicmVhaztjYXNlICJtYXBBTyI6bS5hb01hcD1oKHEsZS5tYXBBT1JlcGVhdCxlLm1hcEFPT2Zmc2V0LGUubWFwQU9XcmFwLGUubWFwQU9Bbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBBT1JlcGVhdCI6Y2FzZSAibWFwQU9PZmZzZXQiOmNhc2UgIm1hcEFPV3JhcCI6Y2FzZSAibWFwQU9Bbmlzb3Ryb3B5IjpicmVhazsKY2FzZSAibWFwQnVtcCI6bS5idW1wTWFwPWgocSxlLm1hcEJ1bXBSZXBlYXQsZS5tYXBCdW1wT2Zmc2V0LGUubWFwQnVtcFdyYXAsZS5tYXBCdW1wQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwQnVtcFNjYWxlIjptLmJ1bXBTY2FsZT1xO2JyZWFrO2Nhc2UgIm1hcEJ1bXBSZXBlYXQiOmNhc2UgIm1hcEJ1bXBPZmZzZXQiOmNhc2UgIm1hcEJ1bXBXcmFwIjpjYXNlICJtYXBCdW1wQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwTm9ybWFsIjptLm5vcm1hbE1hcD1oKHEsZS5tYXBOb3JtYWxSZXBlYXQsZS5tYXBOb3JtYWxPZmZzZXQsZS5tYXBOb3JtYWxXcmFwLGUubWFwTm9ybWFsQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwTm9ybWFsRmFjdG9yIjptLm5vcm1hbFNjYWxlPVtxLHFdO2JyZWFrO2Nhc2UgIm1hcE5vcm1hbFJlcGVhdCI6Y2FzZSAibWFwTm9ybWFsT2Zmc2V0IjpjYXNlICJtYXBOb3JtYWxXcmFwIjpjYXNlICJtYXBOb3JtYWxBbmlzb3Ryb3B5IjpicmVhaztjYXNlICJtYXBTcGVjdWxhciI6bS5zcGVjdWxhck1hcD0KaChxLGUubWFwU3BlY3VsYXJSZXBlYXQsZS5tYXBTcGVjdWxhck9mZnNldCxlLm1hcFNwZWN1bGFyV3JhcCxlLm1hcFNwZWN1bGFyQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwU3BlY3VsYXJSZXBlYXQiOmNhc2UgIm1hcFNwZWN1bGFyT2Zmc2V0IjpjYXNlICJtYXBTcGVjdWxhcldyYXAiOmNhc2UgIm1hcFNwZWN1bGFyQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwTWV0YWxuZXNzIjptLm1ldGFsbmVzc01hcD1oKHEsZS5tYXBNZXRhbG5lc3NSZXBlYXQsZS5tYXBNZXRhbG5lc3NPZmZzZXQsZS5tYXBNZXRhbG5lc3NXcmFwLGUubWFwTWV0YWxuZXNzQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwTWV0YWxuZXNzUmVwZWF0IjpjYXNlICJtYXBNZXRhbG5lc3NPZmZzZXQiOmNhc2UgIm1hcE1ldGFsbmVzc1dyYXAiOmNhc2UgIm1hcE1ldGFsbmVzc0FuaXNvdHJvcHkiOmJyZWFrO2Nhc2UgIm1hcFJvdWdobmVzcyI6bS5yb3VnaG5lc3NNYXA9aChxLGUubWFwUm91Z2huZXNzUmVwZWF0LAplLm1hcFJvdWdobmVzc09mZnNldCxlLm1hcFJvdWdobmVzc1dyYXAsZS5tYXBSb3VnaG5lc3NBbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBSb3VnaG5lc3NSZXBlYXQiOmNhc2UgIm1hcFJvdWdobmVzc09mZnNldCI6Y2FzZSAibWFwUm91Z2huZXNzV3JhcCI6Y2FzZSAibWFwUm91Z2huZXNzQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwQWxwaGEiOm0uYWxwaGFNYXA9aChxLGUubWFwQWxwaGFSZXBlYXQsZS5tYXBBbHBoYU9mZnNldCxlLm1hcEFscGhhV3JhcCxlLm1hcEFscGhhQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwQWxwaGFSZXBlYXQiOmNhc2UgIm1hcEFscGhhT2Zmc2V0IjpjYXNlICJtYXBBbHBoYVdyYXAiOmNhc2UgIm1hcEFscGhhQW5pc290cm9weSI6YnJlYWs7Y2FzZSAiZmxpcFNpZGVkIjptLnNpZGU9MTticmVhaztjYXNlICJkb3VibGVTaWRlZCI6bS5zaWRlPTI7YnJlYWs7Y2FzZSAidHJhbnNwYXJlbmN5Ijpjb25zb2xlLndhcm4oIlRIUkVFLkxvYWRlci5jcmVhdGVNYXRlcmlhbDogdHJhbnNwYXJlbmN5IGhhcyBiZWVuIHJlbmFtZWQgdG8gb3BhY2l0eSIpOwptLm9wYWNpdHk9cTticmVhaztjYXNlICJkZXB0aFRlc3QiOmNhc2UgImRlcHRoV3JpdGUiOmNhc2UgImNvbG9yV3JpdGUiOmNhc2UgIm9wYWNpdHkiOmNhc2UgInJlZmxlY3Rpdml0eSI6Y2FzZSAidHJhbnNwYXJlbnQiOmNhc2UgInZpc2libGUiOmNhc2UgIndpcmVmcmFtZSI6bVtsXT1xO2JyZWFrO2Nhc2UgInZlcnRleENvbG9ycyI6ITA9PT1xJiYobS52ZXJ0ZXhDb2xvcnM9Mik7ImZhY2UiPT09cSYmKG0udmVydGV4Q29sb3JzPTEpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyLmNyZWF0ZU1hdGVyaWFsOiBVbnN1cHBvcnRlZCIsbCxxKX19Ik1lc2hCYXNpY01hdGVyaWFsIj09PW0udHlwZSYmZGVsZXRlIG0uZW1pc3NpdmU7Ik1lc2hQaG9uZ01hdGVyaWFsIiE9PW0udHlwZSYmZGVsZXRlIG0uc3BlY3VsYXI7MT5tLm9wYWNpdHkmJihtLnRyYW5zcGFyZW50PSEwKTtkLnNldFRleHR1cmVzKGspO3JldHVybiBkLnBhcnNlKG0pfX0oKX0pO09iamVjdC5hc3NpZ24oY2UucHJvdG90eXBlLAp7bG9hZDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLGY9dGhpcy50ZXh0dXJlUGF0aCYmInN0cmluZyI9PT10eXBlb2YgdGhpcy50ZXh0dXJlUGF0aD90aGlzLnRleHR1cmVQYXRoOmdjLnByb3RvdHlwZS5leHRyYWN0VXJsQmFzZShhKSxnPW5ldyB1YSh0aGlzLm1hbmFnZXIpO2cuc2V0UmVzcG9uc2VUeXBlKCJqc29uIik7Zy5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpO2cubG9hZChhLGZ1bmN0aW9uKGMpe3ZhciBkPWMubWV0YWRhdGE7aWYodm9pZCAwIT09ZCYmKGQ9ZC50eXBlLHZvaWQgMCE9PWQpKXtpZigib2JqZWN0Ij09PWQudG9Mb3dlckNhc2UoKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuSlNPTkxvYWRlcjogIithKyIgc2hvdWxkIGJlIGxvYWRlZCB3aXRoIFRIUkVFLk9iamVjdExvYWRlciBpbnN0ZWFkLiIpO3JldHVybn1pZigic2NlbmUiPT09ZC50b0xvd2VyQ2FzZSgpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5KU09OTG9hZGVyOiAiK2ErCiIgc2hvdWxkIGJlIGxvYWRlZCB3aXRoIFRIUkVFLlNjZW5lTG9hZGVyIGluc3RlYWQuIik7cmV0dXJufX1jPWUucGFyc2UoYyxmKTtiKGMuZ2VvbWV0cnksYy5tYXRlcmlhbHMpfSxjLGQpfSxzZXRUZXh0dXJlUGF0aDpmdW5jdGlvbihhKXt0aGlzLnRleHR1cmVQYXRoPWF9LHBhcnNlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGEsYil7dm9pZCAwIT09YS5kYXRhJiYoYT1hLmRhdGEpO2Euc2NhbGU9dm9pZCAwIT09YS5zY2FsZT8xL2Euc2NhbGU6MTt2YXIgYz1uZXcgTSxkPWEsZSxmLGcsaCxrLG0sbCxxLG4scix6LHQseSx4LHY9ZC5mYWNlcztuPWQudmVydGljZXM7dmFyIEc9ZC5ub3JtYWxzLHc9ZC5jb2xvcnM7bT1kLnNjYWxlO3ZhciBCPTA7aWYodm9pZCAwIT09ZC51dnMpe2ZvcihlPTA7ZTxkLnV2cy5sZW5ndGg7ZSsrKWQudXZzW2VdLmxlbmd0aCYmQisrO2ZvcihlPTA7ZTxCO2UrKyljLmZhY2VWZXJ0ZXhVdnNbZV09W119aD0wO2ZvcihrPW4ubGVuZ3RoO2g8azspZT0KbmV3IHAsZS54PW5baCsrXSptLGUueT1uW2grK10qbSxlLno9bltoKytdKm0sYy52ZXJ0aWNlcy5wdXNoKGUpO2g9MDtmb3Ioaz12Lmxlbmd0aDtoPGs7KWlmKG49dltoKytdLHI9biYxLGc9biYyLGU9biY4LGw9biYxNix6PW4mMzIsbT1uJjY0LG4mPTEyOCxyKXtyPW5ldyBWYTtyLmE9dltoXTtyLmI9dltoKzFdO3IuYz12W2grM107dD1uZXcgVmE7dC5hPXZbaCsxXTt0LmI9dltoKzJdO3QuYz12W2grM107aCs9NDtnJiYoZz12W2grK10sci5tYXRlcmlhbEluZGV4PWcsdC5tYXRlcmlhbEluZGV4PWcpO2c9Yy5mYWNlcy5sZW5ndGg7aWYoZSlmb3IoZT0wO2U8QjtlKyspZm9yKHk9ZC51dnNbZV0sYy5mYWNlVmVydGV4VXZzW2VdW2ddPVtdLGMuZmFjZVZlcnRleFV2c1tlXVtnKzFdPVtdLGY9MDs0PmY7ZisrKXE9dltoKytdLHg9eVsyKnFdLHE9eVsyKnErMV0seD1uZXcgRCh4LHEpLDIhPT1mJiZjLmZhY2VWZXJ0ZXhVdnNbZV1bZ10ucHVzaCh4KSwwIT09ZiYmYy5mYWNlVmVydGV4VXZzW2VdW2crCjFdLnB1c2goeCk7bCYmKGw9Myp2W2grK10sci5ub3JtYWwuc2V0KEdbbCsrXSxHW2wrK10sR1tsXSksdC5ub3JtYWwuY29weShyLm5vcm1hbCkpO2lmKHopZm9yKGU9MDs0PmU7ZSsrKWw9Myp2W2grK10sej1uZXcgcChHW2wrK10sR1tsKytdLEdbbF0pLDIhPT1lJiZyLnZlcnRleE5vcm1hbHMucHVzaCh6KSwwIT09ZSYmdC52ZXJ0ZXhOb3JtYWxzLnB1c2goeik7bSYmKG09dltoKytdLG09d1ttXSxyLmNvbG9yLnNldEhleChtKSx0LmNvbG9yLnNldEhleChtKSk7aWYobilmb3IoZT0wOzQ+ZTtlKyspbT12W2grK10sbT13W21dLDIhPT1lJiZyLnZlcnRleENvbG9ycy5wdXNoKG5ldyBIKG0pKSwwIT09ZSYmdC52ZXJ0ZXhDb2xvcnMucHVzaChuZXcgSChtKSk7Yy5mYWNlcy5wdXNoKHIpO2MuZmFjZXMucHVzaCh0KX1lbHNle3I9bmV3IFZhO3IuYT12W2grK107ci5iPXZbaCsrXTtyLmM9dltoKytdO2cmJihnPXZbaCsrXSxyLm1hdGVyaWFsSW5kZXg9Zyk7Zz1jLmZhY2VzLmxlbmd0aDsKaWYoZSlmb3IoZT0wO2U8QjtlKyspZm9yKHk9ZC51dnNbZV0sYy5mYWNlVmVydGV4VXZzW2VdW2ddPVtdLGY9MDszPmY7ZisrKXE9dltoKytdLHg9eVsyKnFdLHE9eVsyKnErMV0seD1uZXcgRCh4LHEpLGMuZmFjZVZlcnRleFV2c1tlXVtnXS5wdXNoKHgpO2wmJihsPTMqdltoKytdLHIubm9ybWFsLnNldChHW2wrK10sR1tsKytdLEdbbF0pKTtpZih6KWZvcihlPTA7Mz5lO2UrKylsPTMqdltoKytdLHo9bmV3IHAoR1tsKytdLEdbbCsrXSxHW2xdKSxyLnZlcnRleE5vcm1hbHMucHVzaCh6KTttJiYobT12W2grK10sci5jb2xvci5zZXRIZXgod1ttXSkpO2lmKG4pZm9yKGU9MDszPmU7ZSsrKW09dltoKytdLHIudmVydGV4Q29sb3JzLnB1c2gobmV3IEgod1ttXSkpO2MuZmFjZXMucHVzaChyKX1kPWE7aD12b2lkIDAhPT1kLmluZmx1ZW5jZXNQZXJWZXJ0ZXg/ZC5pbmZsdWVuY2VzUGVyVmVydGV4OjI7aWYoZC5za2luV2VpZ2h0cylmb3Ioaz0wLHY9ZC5za2luV2VpZ2h0cy5sZW5ndGg7azwKdjtrKz1oKWMuc2tpbldlaWdodHMucHVzaChuZXcgZ2EoZC5za2luV2VpZ2h0c1trXSwxPGg/ZC5za2luV2VpZ2h0c1trKzFdOjAsMjxoP2Quc2tpbldlaWdodHNbaysyXTowLDM8aD9kLnNraW5XZWlnaHRzW2srM106MCkpO2lmKGQuc2tpbkluZGljZXMpZm9yKGs9MCx2PWQuc2tpbkluZGljZXMubGVuZ3RoO2s8djtrKz1oKWMuc2tpbkluZGljZXMucHVzaChuZXcgZ2EoZC5za2luSW5kaWNlc1trXSwxPGg/ZC5za2luSW5kaWNlc1trKzFdOjAsMjxoP2Quc2tpbkluZGljZXNbaysyXTowLDM8aD9kLnNraW5JbmRpY2VzW2srM106MCkpO2MuYm9uZXM9ZC5ib25lcztjLmJvbmVzJiYwPGMuYm9uZXMubGVuZ3RoJiYoYy5za2luV2VpZ2h0cy5sZW5ndGghPT1jLnNraW5JbmRpY2VzLmxlbmd0aHx8Yy5za2luSW5kaWNlcy5sZW5ndGghPT1jLnZlcnRpY2VzLmxlbmd0aCkmJmNvbnNvbGUud2FybigiV2hlbiBza2lubmluZywgbnVtYmVyIG9mIHZlcnRpY2VzICgiK2MudmVydGljZXMubGVuZ3RoKwoiKSwgc2tpbkluZGljZXMgKCIrYy5za2luSW5kaWNlcy5sZW5ndGgrIiksIGFuZCBza2luV2VpZ2h0cyAoIitjLnNraW5XZWlnaHRzLmxlbmd0aCsiKSBzaG91bGQgbWF0Y2guIik7az1hO3Y9ay5zY2FsZTtpZih2b2lkIDAhPT1rLm1vcnBoVGFyZ2V0cylmb3IoZD0wLGg9ay5tb3JwaFRhcmdldHMubGVuZ3RoO2Q8aDtkKyspZm9yKGMubW9ycGhUYXJnZXRzW2RdPXt9LGMubW9ycGhUYXJnZXRzW2RdLm5hbWU9ay5tb3JwaFRhcmdldHNbZF0ubmFtZSxjLm1vcnBoVGFyZ2V0c1tkXS52ZXJ0aWNlcz1bXSxHPWMubW9ycGhUYXJnZXRzW2RdLnZlcnRpY2VzLHc9ay5tb3JwaFRhcmdldHNbZF0udmVydGljZXMsQj0wLG49dy5sZW5ndGg7QjxuO0IrPTMpbT1uZXcgcCxtLng9d1tCXSp2LG0ueT13W0IrMV0qdixtLno9d1tCKzJdKnYsRy5wdXNoKG0pO2lmKHZvaWQgMCE9PWsubW9ycGhDb2xvcnMmJjA8ay5tb3JwaENvbG9ycy5sZW5ndGgpZm9yKGNvbnNvbGUud2FybignVEhSRUUuSlNPTkxvYWRlcjogIm1vcnBoQ29sb3JzIiBubyBsb25nZXIgc3VwcG9ydGVkLiBVc2luZyB0aGVtIGFzIGZhY2UgY29sb3JzLicpLAp2PWMuZmFjZXMsaz1rLm1vcnBoQ29sb3JzWzBdLmNvbG9ycyxkPTAsaD12Lmxlbmd0aDtkPGg7ZCsrKXZbZF0uY29sb3IuZnJvbUFycmF5KGssMypkKTtrPWE7ZD1bXTtoPVtdO3ZvaWQgMCE9PWsuYW5pbWF0aW9uJiZoLnB1c2goay5hbmltYXRpb24pO3ZvaWQgMCE9PWsuYW5pbWF0aW9ucyYmKGsuYW5pbWF0aW9ucy5sZW5ndGg/aD1oLmNvbmNhdChrLmFuaW1hdGlvbnMpOmgucHVzaChrLmFuaW1hdGlvbnMpKTtmb3Ioaz0wO2s8aC5sZW5ndGg7aysrKSh2PUJhLnBhcnNlQW5pbWF0aW9uKGhba10sYy5ib25lcykpJiZkLnB1c2godik7Yy5tb3JwaFRhcmdldHMmJihoPUJhLkNyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKGMubW9ycGhUYXJnZXRzLDEwKSxkPWQuY29uY2F0KGgpKTswPGQubGVuZ3RoJiYoYy5hbmltYXRpb25zPWQpO2MuY29tcHV0ZUZhY2VOb3JtYWxzKCk7Yy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtpZih2b2lkIDA9PT1hLm1hdGVyaWFsc3x8MD09PQphLm1hdGVyaWFscy5sZW5ndGgpcmV0dXJue2dlb21ldHJ5OmN9O2Q9Z2MucHJvdG90eXBlLmluaXRNYXRlcmlhbHMoYS5tYXRlcmlhbHMsYix0aGlzLmNyb3NzT3JpZ2luKTtyZXR1cm57Z2VvbWV0cnk6YyxtYXRlcmlhbHM6ZH19fSgpfSk7T2JqZWN0LmFzc2lnbihSZS5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYSxiLGMsZCl7IiI9PT10aGlzLnRleHR1cmVQYXRoJiYodGhpcy50ZXh0dXJlUGF0aD1hLnN1YnN0cmluZygwLGEubGFzdEluZGV4T2YoIi8iKSsxKSk7dmFyIGU9dGhpczsobmV3IHVhKGUubWFuYWdlcikpLmxvYWQoYSxmdW5jdGlvbihjKXt2YXIgZz1udWxsO3RyeXtnPUpTT04ucGFyc2UoYyl9Y2F0Y2goaCl7dm9pZCAwIT09ZCYmZChoKTtjb25zb2xlLmVycm9yKCJUSFJFRTpPYmplY3RMb2FkZXI6IENhbid0IHBhcnNlICIrYSsiLiIsaC5tZXNzYWdlKTtyZXR1cm59Yz1nLm1ldGFkYXRhO3ZvaWQgMD09PWN8fHZvaWQgMD09PWMudHlwZXx8Imdlb21ldHJ5Ij09PWMudHlwZS50b0xvd2VyQ2FzZSgpPwpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3RMb2FkZXI6IENhbid0IGxvYWQgIithKyIuIFVzZSBUSFJFRS5KU09OTG9hZGVyIGluc3RlYWQuIik6ZS5wYXJzZShnLGIpfSxjLGQpfSxzZXRUZXh0dXJlUGF0aDpmdW5jdGlvbihhKXt0aGlzLnRleHR1cmVQYXRoPWF9LHNldENyb3NzT3JpZ2luOmZ1bmN0aW9uKGEpe3RoaXMuY3Jvc3NPcmlnaW49YX0scGFyc2U6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLnBhcnNlR2VvbWV0cmllcyhhLmdlb21ldHJpZXMpLGQ9dGhpcy5wYXJzZUltYWdlcyhhLmltYWdlcyxmdW5jdGlvbigpe3ZvaWQgMCE9PWImJmIoZSl9KSxkPXRoaXMucGFyc2VUZXh0dXJlcyhhLnRleHR1cmVzLGQpLGQ9dGhpcy5wYXJzZU1hdGVyaWFscyhhLm1hdGVyaWFscyxkKSxlPXRoaXMucGFyc2VPYmplY3QoYS5vYmplY3QsYyxkKTthLmFuaW1hdGlvbnMmJihlLmFuaW1hdGlvbnM9dGhpcy5wYXJzZUFuaW1hdGlvbnMoYS5hbmltYXRpb25zKSk7dm9pZCAwIT09YS5pbWFnZXMmJgowIT09YS5pbWFnZXMubGVuZ3RofHx2b2lkIDA9PT1ifHxiKGUpO3JldHVybiBlfSxwYXJzZUdlb21ldHJpZXM6ZnVuY3Rpb24oYSl7dmFyIGI9e307aWYodm9pZCAwIT09YSlmb3IodmFyIGM9bmV3IGNlLGQ9bmV3IGJlLGU9MCxmPWEubGVuZ3RoO2U8ZjtlKyspe3ZhciBnLGg9YVtlXTtzd2l0Y2goaC50eXBlKXtjYXNlICJQbGFuZUdlb21ldHJ5IjpjYXNlICJQbGFuZUJ1ZmZlckdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgud2lkdGgsaC5oZWlnaHQsaC53aWR0aFNlZ21lbnRzLGguaGVpZ2h0U2VnbWVudHMpO2JyZWFrO2Nhc2UgIkJveEdlb21ldHJ5IjpjYXNlICJCb3hCdWZmZXJHZW9tZXRyeSI6Y2FzZSAiQ3ViZUdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgud2lkdGgsaC5oZWlnaHQsaC5kZXB0aCxoLndpZHRoU2VnbWVudHMsaC5oZWlnaHRTZWdtZW50cyxoLmRlcHRoU2VnbWVudHMpO2JyZWFrO2Nhc2UgIkNpcmNsZUdlb21ldHJ5IjpjYXNlICJDaXJjbGVCdWZmZXJHZW9tZXRyeSI6Zz0KbmV3IE1hW2gudHlwZV0oaC5yYWRpdXMsaC5zZWdtZW50cyxoLnRoZXRhU3RhcnQsaC50aGV0YUxlbmd0aCk7YnJlYWs7Y2FzZSAiQ3lsaW5kZXJHZW9tZXRyeSI6Y2FzZSAiQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeSI6Zz1uZXcgTWFbaC50eXBlXShoLnJhZGl1c1RvcCxoLnJhZGl1c0JvdHRvbSxoLmhlaWdodCxoLnJhZGlhbFNlZ21lbnRzLGguaGVpZ2h0U2VnbWVudHMsaC5vcGVuRW5kZWQsaC50aGV0YVN0YXJ0LGgudGhldGFMZW5ndGgpO2JyZWFrO2Nhc2UgIkNvbmVHZW9tZXRyeSI6Y2FzZSAiQ29uZUJ1ZmZlckdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgucmFkaXVzLGguaGVpZ2h0LGgucmFkaWFsU2VnbWVudHMsaC5oZWlnaHRTZWdtZW50cyxoLm9wZW5FbmRlZCxoLnRoZXRhU3RhcnQsaC50aGV0YUxlbmd0aCk7YnJlYWs7Y2FzZSAiU3BoZXJlR2VvbWV0cnkiOmNhc2UgIlNwaGVyZUJ1ZmZlckdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgucmFkaXVzLGgud2lkdGhTZWdtZW50cywKaC5oZWlnaHRTZWdtZW50cyxoLnBoaVN0YXJ0LGgucGhpTGVuZ3RoLGgudGhldGFTdGFydCxoLnRoZXRhTGVuZ3RoKTticmVhaztjYXNlICJEb2RlY2FoZWRyb25HZW9tZXRyeSI6Y2FzZSAiSWNvc2FoZWRyb25HZW9tZXRyeSI6Y2FzZSAiT2N0YWhlZHJvbkdlb21ldHJ5IjpjYXNlICJUZXRyYWhlZHJvbkdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgucmFkaXVzLGguZGV0YWlsKTticmVhaztjYXNlICJSaW5nR2VvbWV0cnkiOmNhc2UgIlJpbmdCdWZmZXJHZW9tZXRyeSI6Zz1uZXcgTWFbaC50eXBlXShoLmlubmVyUmFkaXVzLGgub3V0ZXJSYWRpdXMsaC50aGV0YVNlZ21lbnRzLGgucGhpU2VnbWVudHMsaC50aGV0YVN0YXJ0LGgudGhldGFMZW5ndGgpO2JyZWFrO2Nhc2UgIlRvcnVzR2VvbWV0cnkiOmNhc2UgIlRvcnVzQnVmZmVyR2VvbWV0cnkiOmc9bmV3IE1hW2gudHlwZV0oaC5yYWRpdXMsaC50dWJlLGgucmFkaWFsU2VnbWVudHMsaC50dWJ1bGFyU2VnbWVudHMsaC5hcmMpOwpicmVhaztjYXNlICJUb3J1c0tub3RHZW9tZXRyeSI6Y2FzZSAiVG9ydXNLbm90QnVmZmVyR2VvbWV0cnkiOmc9bmV3IE1hW2gudHlwZV0oaC5yYWRpdXMsaC50dWJlLGgudHVidWxhclNlZ21lbnRzLGgucmFkaWFsU2VnbWVudHMsaC5wLGgucSk7YnJlYWs7Y2FzZSAiTGF0aGVHZW9tZXRyeSI6Y2FzZSAiTGF0aGVCdWZmZXJHZW9tZXRyeSI6Zz1uZXcgTWFbaC50eXBlXShoLnBvaW50cyxoLnNlZ21lbnRzLGgucGhpU3RhcnQsaC5waGlMZW5ndGgpO2JyZWFrO2Nhc2UgIkJ1ZmZlckdlb21ldHJ5IjpnPWQucGFyc2UoaCk7YnJlYWs7Y2FzZSAiR2VvbWV0cnkiOmc9Yy5wYXJzZShoLHRoaXMudGV4dHVyZVBhdGgpLmdlb21ldHJ5O2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCdUSFJFRS5PYmplY3RMb2FkZXI6IFVuc3VwcG9ydGVkIGdlb21ldHJ5IHR5cGUgIicraC50eXBlKyciJyk7Y29udGludWV9Zy51dWlkPWgudXVpZDt2b2lkIDAhPT1oLm5hbWUmJihnLm5hbWU9aC5uYW1lKTsKYltoLnV1aWRdPWd9cmV0dXJuIGJ9LHBhcnNlTWF0ZXJpYWxzOmZ1bmN0aW9uKGEsYil7dmFyIGM9e307aWYodm9pZCAwIT09YSl7dmFyIGQ9bmV3IEhkO2Quc2V0VGV4dHVyZXMoYik7Zm9yKHZhciBlPTAsZj1hLmxlbmd0aDtlPGY7ZSsrKXt2YXIgZz1hW2VdO2lmKCJNdWx0aU1hdGVyaWFsIj09PWcudHlwZSl7Zm9yKHZhciBoPVtdLGs9MDtrPGcubWF0ZXJpYWxzLmxlbmd0aDtrKyspaC5wdXNoKGQucGFyc2UoZy5tYXRlcmlhbHNba10pKTtjW2cudXVpZF09aH1lbHNlIGNbZy51dWlkXT1kLnBhcnNlKGcpfX1yZXR1cm4gY30scGFyc2VBbmltYXRpb25zOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPUJhLnBhcnNlKGFbY10pO2IucHVzaChkKX1yZXR1cm4gYn0scGFyc2VJbWFnZXM6ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2QubWFuYWdlci5pdGVtU3RhcnQoYSk7cmV0dXJuIGcubG9hZChhLGZ1bmN0aW9uKCl7ZC5tYW5hZ2VyLml0ZW1FbmQoYSl9LAp2b2lkIDAsZnVuY3Rpb24oKXtkLm1hbmFnZXIuaXRlbUVuZChhKTtkLm1hbmFnZXIuaXRlbUVycm9yKGEpfSl9dmFyIGQ9dGhpcyxlPXt9O2lmKHZvaWQgMCE9PWEmJjA8YS5sZW5ndGgpe3ZhciBmPW5ldyBaZChiKSxnPW5ldyBWYyhmKTtnLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2Zvcih2YXIgZj0wLGg9YS5sZW5ndGg7ZjxoO2YrKyl7dmFyIGs9YVtmXSxsPS9eKFwvXC8pfChbYS16XSs6KFwvXC8pPykvaS50ZXN0KGsudXJsKT9rLnVybDpkLnRleHR1cmVQYXRoK2sudXJsO2Vbay51dWlkXT1jKGwpfX1yZXR1cm4gZX0scGFyc2VUZXh0dXJlczpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtpZigibnVtYmVyIj09PXR5cGVvZiBhKXJldHVybiBhO2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyLnBhcnNlVGV4dHVyZTogQ29uc3RhbnQgc2hvdWxkIGJlIGluIG51bWVyaWMgZm9ybS4iLGEpO3JldHVybiBiW2FdfXZhciBkPXt9O2lmKHZvaWQgMCE9PQphKWZvcih2YXIgZT0wLGY9YS5sZW5ndGg7ZTxmO2UrKyl7dmFyIGc9YVtlXTt2b2lkIDA9PT1nLmltYWdlJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogTm8gImltYWdlIiBzcGVjaWZpZWQgZm9yJyxnLnV1aWQpO3ZvaWQgMD09PWJbZy5pbWFnZV0mJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgaW1hZ2UiLGcuaW1hZ2UpO3ZhciBoPW5ldyBYKGJbZy5pbWFnZV0pO2gubmVlZHNVcGRhdGU9ITA7aC51dWlkPWcudXVpZDt2b2lkIDAhPT1nLm5hbWUmJihoLm5hbWU9Zy5uYW1lKTt2b2lkIDAhPT1nLm1hcHBpbmcmJihoLm1hcHBpbmc9YyhnLm1hcHBpbmcsbWcpKTt2b2lkIDAhPT1nLm9mZnNldCYmaC5vZmZzZXQuZnJvbUFycmF5KGcub2Zmc2V0KTt2b2lkIDAhPT1nLnJlcGVhdCYmaC5yZXBlYXQuZnJvbUFycmF5KGcucmVwZWF0KTt2b2lkIDAhPT1nLndyYXAmJihoLndyYXBTPWMoZy53cmFwWzBdLGdmKSxoLndyYXBUPWMoZy53cmFwWzFdLApnZikpO3ZvaWQgMCE9PWcubWluRmlsdGVyJiYoaC5taW5GaWx0ZXI9YyhnLm1pbkZpbHRlcixoZikpO3ZvaWQgMCE9PWcubWFnRmlsdGVyJiYoaC5tYWdGaWx0ZXI9YyhnLm1hZ0ZpbHRlcixoZikpO3ZvaWQgMCE9PWcuYW5pc290cm9weSYmKGguYW5pc290cm9weT1nLmFuaXNvdHJvcHkpO3ZvaWQgMCE9PWcuZmxpcFkmJihoLmZsaXBZPWcuZmxpcFkpO2RbZy51dWlkXT1ofXJldHVybiBkfSxwYXJzZU9iamVjdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBKO3JldHVybiBmdW5jdGlvbihiLGMsZCl7ZnVuY3Rpb24gZShhKXt2b2lkIDA9PT1jW2FdJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIGdlb21ldHJ5IixhKTtyZXR1cm4gY1thXX1mdW5jdGlvbiBmKGEpe2lmKHZvaWQgMCE9PWEpe2lmKEFycmF5LmlzQXJyYXkoYSkpe2Zvcih2YXIgYj1bXSxjPTAsZT1hLmxlbmd0aDtjPGU7YysrKXt2YXIgZj1hW2NdO3ZvaWQgMD09PWRbZl0mJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgbWF0ZXJpYWwiLApmKTtiLnB1c2goZFtmXSl9cmV0dXJuIGJ9dm9pZCAwPT09ZFthXSYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBtYXRlcmlhbCIsYSk7cmV0dXJuIGRbYV19fXZhciBnO3N3aXRjaChiLnR5cGUpe2Nhc2UgIlNjZW5lIjpnPW5ldyBtZDt2b2lkIDAhPT1iLmJhY2tncm91bmQmJk51bWJlci5pc0ludGVnZXIoYi5iYWNrZ3JvdW5kKSYmKGcuYmFja2dyb3VuZD1uZXcgSChiLmJhY2tncm91bmQpKTt2b2lkIDAhPT1iLmZvZyYmKCJGb2ciPT09Yi5mb2cudHlwZT9nLmZvZz1uZXcgTGIoYi5mb2cuY29sb3IsYi5mb2cubmVhcixiLmZvZy5mYXIpOiJGb2dFeHAyIj09PWIuZm9nLnR5cGUmJihnLmZvZz1uZXcgS2IoYi5mb2cuY29sb3IsYi5mb2cuZGVuc2l0eSkpKTticmVhaztjYXNlICJQZXJzcGVjdGl2ZUNhbWVyYSI6Zz1uZXcgeGEoYi5mb3YsYi5hc3BlY3QsYi5uZWFyLGIuZmFyKTt2b2lkIDAhPT1iLmZvY3VzJiYoZy5mb2N1cz1iLmZvY3VzKTt2b2lkIDAhPT0KYi56b29tJiYoZy56b29tPWIuem9vbSk7dm9pZCAwIT09Yi5maWxtR2F1Z2UmJihnLmZpbG1HYXVnZT1iLmZpbG1HYXVnZSk7dm9pZCAwIT09Yi5maWxtT2Zmc2V0JiYoZy5maWxtT2Zmc2V0PWIuZmlsbU9mZnNldCk7dm9pZCAwIT09Yi52aWV3JiYoZy52aWV3PU9iamVjdC5hc3NpZ24oe30sYi52aWV3KSk7YnJlYWs7Y2FzZSAiT3J0aG9ncmFwaGljQ2FtZXJhIjpnPW5ldyBKYihiLmxlZnQsYi5yaWdodCxiLnRvcCxiLmJvdHRvbSxiLm5lYXIsYi5mYXIpO2JyZWFrO2Nhc2UgIkFtYmllbnRMaWdodCI6Zz1uZXcgemQoYi5jb2xvcixiLmludGVuc2l0eSk7YnJlYWs7Y2FzZSAiRGlyZWN0aW9uYWxMaWdodCI6Zz1uZXcgeWQoYi5jb2xvcixiLmludGVuc2l0eSk7YnJlYWs7Y2FzZSAiUG9pbnRMaWdodCI6Zz1uZXcgd2QoYi5jb2xvcixiLmludGVuc2l0eSxiLmRpc3RhbmNlLGIuZGVjYXkpO2JyZWFrO2Nhc2UgIlJlY3RBcmVhTGlnaHQiOmc9bmV3IEFkKGIuY29sb3IsYi5pbnRlbnNpdHksCmIud2lkdGgsYi5oZWlnaHQpO2JyZWFrO2Nhc2UgIlNwb3RMaWdodCI6Zz1uZXcgdmQoYi5jb2xvcixiLmludGVuc2l0eSxiLmRpc3RhbmNlLGIuYW5nbGUsYi5wZW51bWJyYSxiLmRlY2F5KTticmVhaztjYXNlICJIZW1pc3BoZXJlTGlnaHQiOmc9bmV3IHRkKGIuY29sb3IsYi5ncm91bmRDb2xvcixiLmludGVuc2l0eSk7YnJlYWs7Y2FzZSAiU2tpbm5lZE1lc2giOmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyLnBhcnNlT2JqZWN0KCkgZG9lcyBub3Qgc3VwcG9ydCBTa2lubmVkTWVzaCB5ZXQuIik7Y2FzZSAiTWVzaCI6Zz1lKGIuZ2VvbWV0cnkpO3ZhciBoPWYoYi5tYXRlcmlhbCk7Zz1nLmJvbmVzJiYwPGcuYm9uZXMubGVuZ3RoP25ldyBvZChnLGgpOm5ldyBDYShnLGgpO2JyZWFrO2Nhc2UgIkxPRCI6Zz1uZXcgQmM7YnJlYWs7Y2FzZSAiTGluZSI6Zz1uZXcgeWEoZShiLmdlb21ldHJ5KSxmKGIubWF0ZXJpYWwpLGIubW9kZSk7YnJlYWs7Y2FzZSAiTGluZUxvb3AiOmc9Cm5ldyBwZChlKGIuZ2VvbWV0cnkpLGYoYi5tYXRlcmlhbCkpO2JyZWFrO2Nhc2UgIkxpbmVTZWdtZW50cyI6Zz1uZXcgZGEoZShiLmdlb21ldHJ5KSxmKGIubWF0ZXJpYWwpKTticmVhaztjYXNlICJQb2ludENsb3VkIjpjYXNlICJQb2ludHMiOmc9bmV3IE1iKGUoYi5nZW9tZXRyeSksZihiLm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSAiU3ByaXRlIjpnPW5ldyBBYyhmKGIubWF0ZXJpYWwpKTticmVhaztjYXNlICJHcm91cCI6Zz1uZXcgRGM7YnJlYWs7ZGVmYXVsdDpnPW5ldyBCfWcudXVpZD1iLnV1aWQ7dm9pZCAwIT09Yi5uYW1lJiYoZy5uYW1lPWIubmFtZSk7dm9pZCAwIT09Yi5tYXRyaXg/KGEuZnJvbUFycmF5KGIubWF0cml4KSxhLmRlY29tcG9zZShnLnBvc2l0aW9uLGcucXVhdGVybmlvbixnLnNjYWxlKSk6KHZvaWQgMCE9PWIucG9zaXRpb24mJmcucG9zaXRpb24uZnJvbUFycmF5KGIucG9zaXRpb24pLHZvaWQgMCE9PWIucm90YXRpb24mJmcucm90YXRpb24uZnJvbUFycmF5KGIucm90YXRpb24pLAp2b2lkIDAhPT1iLnF1YXRlcm5pb24mJmcucXVhdGVybmlvbi5mcm9tQXJyYXkoYi5xdWF0ZXJuaW9uKSx2b2lkIDAhPT1iLnNjYWxlJiZnLnNjYWxlLmZyb21BcnJheShiLnNjYWxlKSk7dm9pZCAwIT09Yi5jYXN0U2hhZG93JiYoZy5jYXN0U2hhZG93PWIuY2FzdFNoYWRvdyk7dm9pZCAwIT09Yi5yZWNlaXZlU2hhZG93JiYoZy5yZWNlaXZlU2hhZG93PWIucmVjZWl2ZVNoYWRvdyk7Yi5zaGFkb3cmJih2b2lkIDAhPT1iLnNoYWRvdy5iaWFzJiYoZy5zaGFkb3cuYmlhcz1iLnNoYWRvdy5iaWFzKSx2b2lkIDAhPT1iLnNoYWRvdy5yYWRpdXMmJihnLnNoYWRvdy5yYWRpdXM9Yi5zaGFkb3cucmFkaXVzKSx2b2lkIDAhPT1iLnNoYWRvdy5tYXBTaXplJiZnLnNoYWRvdy5tYXBTaXplLmZyb21BcnJheShiLnNoYWRvdy5tYXBTaXplKSx2b2lkIDAhPT1iLnNoYWRvdy5jYW1lcmEmJihnLnNoYWRvdy5jYW1lcmE9dGhpcy5wYXJzZU9iamVjdChiLnNoYWRvdy5jYW1lcmEpKSk7dm9pZCAwIT09CmIudmlzaWJsZSYmKGcudmlzaWJsZT1iLnZpc2libGUpO3ZvaWQgMCE9PWIudXNlckRhdGEmJihnLnVzZXJEYXRhPWIudXNlckRhdGEpO2lmKHZvaWQgMCE9PWIuY2hpbGRyZW4pZm9yKHZhciBrIGluIGIuY2hpbGRyZW4pZy5hZGQodGhpcy5wYXJzZU9iamVjdChiLmNoaWxkcmVuW2tdLGMsZCkpO2lmKCJMT0QiPT09Yi50eXBlKWZvcihiPWIubGV2ZWxzLGg9MDtoPGIubGVuZ3RoO2grKyl7dmFyIGw9YltoXTtrPWcuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgidXVpZCIsbC5vYmplY3QpO3ZvaWQgMCE9PWsmJmcuYWRkTGV2ZWwoayxsLmRpc3RhbmNlKX1yZXR1cm4gZ319KCl9KTt2YXIgbWc9e1VWTWFwcGluZzozMDAsQ3ViZVJlZmxlY3Rpb25NYXBwaW5nOjMwMSxDdWJlUmVmcmFjdGlvbk1hcHBpbmc6MzAyLEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOjMwMyxFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZzozMDQsU3BoZXJpY2FsUmVmbGVjdGlvbk1hcHBpbmc6MzA1LApDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzozMDYsQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6MzA3fSxnZj17UmVwZWF0V3JhcHBpbmc6MUUzLENsYW1wVG9FZGdlV3JhcHBpbmc6MTAwMSxNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOjEwMDJ9LGhmPXtOZWFyZXN0RmlsdGVyOjEwMDMsTmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXI6MTAwNCxOZWFyZXN0TWlwTWFwTGluZWFyRmlsdGVyOjEwMDUsTGluZWFyRmlsdGVyOjEwMDYsTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcjoxMDA3LExpbmVhck1pcE1hcExpbmVhckZpbHRlcjoxMDA4fTtPYmplY3QuYXNzaWduKG5hLnByb3RvdHlwZSx7Z2V0UG9pbnQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIik7cmV0dXJuIG51bGx9LGdldFBvaW50QXQ6ZnVuY3Rpb24oYSl7YT10aGlzLmdldFV0b1RtYXBwaW5nKGEpO3JldHVybiB0aGlzLmdldFBvaW50KGEpfSxnZXRQb2ludHM6ZnVuY3Rpb24oYSl7dm9pZCAwPT09CmEmJihhPTUpO2Zvcih2YXIgYj1bXSxjPTA7Yzw9YTtjKyspYi5wdXNoKHRoaXMuZ2V0UG9pbnQoYy9hKSk7cmV0dXJuIGJ9LGdldFNwYWNlZFBvaW50czpmdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT01KTtmb3IodmFyIGI9W10sYz0wO2M8PWE7YysrKWIucHVzaCh0aGlzLmdldFBvaW50QXQoYy9hKSk7cmV0dXJuIGJ9LGdldExlbmd0aDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0TGVuZ3RocygpO3JldHVybiBhW2EubGVuZ3RoLTFdfSxnZXRMZW5ndGhzOmZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKTtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09YSsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTt2YXIgYj1bXSxjLGQ9dGhpcy5nZXRQb2ludCgwKSxlLGY9MDtiLnB1c2goMCk7Zm9yKGU9MTtlPD1hO2UrKyljPQp0aGlzLmdldFBvaW50KGUvYSksZis9Yy5kaXN0YW5jZVRvKGQpLGIucHVzaChmKSxkPWM7cmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzPWJ9LHVwZGF0ZUFyY0xlbmd0aHM6ZnVuY3Rpb24oKXt0aGlzLm5lZWRzVXBkYXRlPSEwO3RoaXMuZ2V0TGVuZ3RocygpfSxnZXRVdG9UbWFwcGluZzpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0TGVuZ3RocygpLGQsZT1jLmxlbmd0aCxmO2Y9Yj9iOmEqY1tlLTFdO2Zvcih2YXIgZz0wLGg9ZS0xLGs7Zzw9aDspaWYoZD1NYXRoLmZsb29yKGcrKGgtZykvMiksaz1jW2RdLWYsMD5rKWc9ZCsxO2Vsc2UgaWYoMDxrKWg9ZC0xO2Vsc2V7aD1kO2JyZWFrfWQ9aDtpZihjW2RdPT09ZilyZXR1cm4gZC8oZS0xKTtnPWNbZF07cmV0dXJuKGQrKGYtZykvKGNbZCsxXS1nKSkvKGUtMSl9LGdldFRhbmdlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS0xRS00O2ErPTFFLTQ7MD5iJiYoYj0wKTsxPGEmJihhPTEpO2I9dGhpcy5nZXRQb2ludChiKTtyZXR1cm4gdGhpcy5nZXRQb2ludChhKS5jbG9uZSgpLnN1YihiKS5ub3JtYWxpemUoKX0sCmdldFRhbmdlbnRBdDpmdW5jdGlvbihhKXthPXRoaXMuZ2V0VXRvVG1hcHBpbmcoYSk7cmV0dXJuIHRoaXMuZ2V0VGFuZ2VudChhKX0sY29tcHV0ZUZyZW5ldEZyYW1lczpmdW5jdGlvbihhLGIpe3ZhciBjPW5ldyBwLGQ9W10sZT1bXSxmPVtdLGc9bmV3IHAsaD1uZXcgSixrLGw7Zm9yKGs9MDtrPD1hO2srKylsPWsvYSxkW2tdPXRoaXMuZ2V0VGFuZ2VudEF0KGwpLGRba10ubm9ybWFsaXplKCk7ZVswXT1uZXcgcDtmWzBdPW5ldyBwO2s9TnVtYmVyLk1BWF9WQUxVRTtsPU1hdGguYWJzKGRbMF0ueCk7dmFyIHU9TWF0aC5hYnMoZFswXS55KSxxPU1hdGguYWJzKGRbMF0ueik7bDw9ayYmKGs9bCxjLnNldCgxLDAsMCkpO3U8PWsmJihrPXUsYy5zZXQoMCwxLDApKTtxPD1rJiZjLnNldCgwLDAsMSk7Zy5jcm9zc1ZlY3RvcnMoZFswXSxjKS5ub3JtYWxpemUoKTtlWzBdLmNyb3NzVmVjdG9ycyhkWzBdLGcpO2ZbMF0uY3Jvc3NWZWN0b3JzKGRbMF0sZVswXSk7Zm9yKGs9MTtrPD1hO2srKyllW2tdPQplW2stMV0uY2xvbmUoKSxmW2tdPWZbay0xXS5jbG9uZSgpLGcuY3Jvc3NWZWN0b3JzKGRbay0xXSxkW2tdKSxnLmxlbmd0aCgpPk51bWJlci5FUFNJTE9OJiYoZy5ub3JtYWxpemUoKSxjPU1hdGguYWNvcyhZLmNsYW1wKGRbay0xXS5kb3QoZFtrXSksLTEsMSkpLGVba10uYXBwbHlNYXRyaXg0KGgubWFrZVJvdGF0aW9uQXhpcyhnLGMpKSksZltrXS5jcm9zc1ZlY3RvcnMoZFtrXSxlW2tdKTtpZighMD09PWIpZm9yKGM9TWF0aC5hY29zKFkuY2xhbXAoZVswXS5kb3QoZVthXSksLTEsMSkpLGMvPWEsMDxkWzBdLmRvdChnLmNyb3NzVmVjdG9ycyhlWzBdLGVbYV0pKSYmKGM9LWMpLGs9MTtrPD1hO2srKyllW2tdLmFwcGx5TWF0cml4NChoLm1ha2VSb3RhdGlvbkF4aXMoZFtrXSxjKmspKSxmW2tdLmNyb3NzVmVjdG9ycyhkW2tdLGVba10pO3JldHVybnt0YW5nZW50czpkLG5vcm1hbHM6ZSxiaW5vcm1hbHM6Zn19fSk7U2EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTsKU2EucHJvdG90eXBlLmNvbnN0cnVjdG9yPVNhO1NhLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDtTYS5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYSl7aWYoMT09PWEpcmV0dXJuIHRoaXMudjIuY2xvbmUoKTt2YXIgYj10aGlzLnYyLmNsb25lKCkuc3ViKHRoaXMudjEpO2IubXVsdGlwbHlTY2FsYXIoYSkuYWRkKHRoaXMudjEpO3JldHVybiBifTtTYS5wcm90b3R5cGUuZ2V0UG9pbnRBdD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nZXRQb2ludChhKX07U2EucHJvdG90eXBlLmdldFRhbmdlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMudjIuY2xvbmUoKS5zdWIodGhpcy52MSkubm9ybWFsaXplKCl9O1ljLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6WWMsYWRkOmZ1bmN0aW9uKGEpe3RoaXMuY3VydmVzLnB1c2goYSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY3VydmVzWzBdLmdldFBvaW50KDApLApiPXRoaXMuY3VydmVzW3RoaXMuY3VydmVzLmxlbmd0aC0xXS5nZXRQb2ludCgxKTthLmVxdWFscyhiKXx8dGhpcy5jdXJ2ZXMucHVzaChuZXcgU2EoYixhKSl9LGdldFBvaW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEqdGhpcy5nZXRMZW5ndGgoKSxjPXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7Zm9yKGE9MDthPGMubGVuZ3RoOyl7aWYoY1thXT49YilyZXR1cm4gYj1jW2FdLWIsYT10aGlzLmN1cnZlc1thXSxjPWEuZ2V0TGVuZ3RoKCksYS5nZXRQb2ludEF0KDA9PT1jPzA6MS1iL2MpO2ErK31yZXR1cm4gbnVsbH0sZ2V0TGVuZ3RoOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtyZXR1cm4gYVthLmxlbmd0aC0xXX0sdXBkYXRlQXJjTGVuZ3RoczpmdW5jdGlvbigpe3RoaXMubmVlZHNVcGRhdGU9ITA7dGhpcy5jYWNoZUxlbmd0aHM9bnVsbDt0aGlzLmdldEN1cnZlTGVuZ3RocygpfSxnZXRDdXJ2ZUxlbmd0aHM6ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlTGVuZ3RocyYmCnRoaXMuY2FjaGVMZW5ndGhzLmxlbmd0aD09PXRoaXMuY3VydmVzLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM7Zm9yKHZhciBhPVtdLGI9MCxjPTAsZD10aGlzLmN1cnZlcy5sZW5ndGg7YzxkO2MrKyliKz10aGlzLmN1cnZlc1tjXS5nZXRMZW5ndGgoKSxhLnB1c2goYik7cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzPWF9LGdldFNwYWNlZFBvaW50czpmdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT00MCk7Zm9yKHZhciBiPVtdLGM9MDtjPD1hO2MrKyliLnB1c2godGhpcy5nZXRQb2ludChjL2EpKTt0aGlzLmF1dG9DbG9zZSYmYi5wdXNoKGJbMF0pO3JldHVybiBifSxnZXRQb2ludHM6ZnVuY3Rpb24oYSl7YT1hfHwxMjtmb3IodmFyIGI9W10sYyxkPTAsZT10aGlzLmN1cnZlcztkPGUubGVuZ3RoO2QrKylmb3IodmFyIGY9ZVtkXSxmPWYuZ2V0UG9pbnRzKGYmJmYuaXNFbGxpcHNlQ3VydmU/MiphOmYmJmYuaXNMaW5lQ3VydmU/MTpmJiZmLmlzU3BsaW5lQ3VydmU/YSpmLnBvaW50cy5sZW5ndGg6CmEpLGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIGg9ZltnXTtjJiZjLmVxdWFscyhoKXx8KGIucHVzaChoKSxjPWgpfXRoaXMuYXV0b0Nsb3NlJiYxPGIubGVuZ3RoJiYhYltiLmxlbmd0aC0xXS5lcXVhbHMoYlswXSkmJmIucHVzaChiWzBdKTtyZXR1cm4gYn0sY3JlYXRlUG9pbnRzR2VvbWV0cnk6ZnVuY3Rpb24oYSl7YT10aGlzLmdldFBvaW50cyhhKTtyZXR1cm4gdGhpcy5jcmVhdGVHZW9tZXRyeShhKX0sY3JlYXRlU3BhY2VkUG9pbnRzR2VvbWV0cnk6ZnVuY3Rpb24oYSl7YT10aGlzLmdldFNwYWNlZFBvaW50cyhhKTtyZXR1cm4gdGhpcy5jcmVhdGVHZW9tZXRyeShhKX0sY3JlYXRlR2VvbWV0cnk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPW5ldyBNLGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspe3ZhciBlPWFbY107Yi52ZXJ0aWNlcy5wdXNoKG5ldyBwKGUueCxlLnksZS56fHwwKSl9cmV0dXJuIGJ9fSk7WGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTtYYS5wcm90b3R5cGUuY29uc3RydWN0b3I9ClhhO1hhLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMDtYYS5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTIqTWF0aC5QSSxjPXRoaXMuYUVuZEFuZ2xlLXRoaXMuYVN0YXJ0QW5nbGUsZD1NYXRoLmFicyhjKTxOdW1iZXIuRVBTSUxPTjswPmM7KWMrPWI7Zm9yKDtjPmI7KWMtPWI7YzxOdW1iZXIuRVBTSUxPTiYmKGM9ZD8wOmIpOyEwIT09dGhpcy5hQ2xvY2t3aXNlfHxkfHwoYz1jPT09Yj8tYjpjLWIpO2I9dGhpcy5hU3RhcnRBbmdsZSthKmM7YT10aGlzLmFYK3RoaXMueFJhZGl1cypNYXRoLmNvcyhiKTt2YXIgZT10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihiKTswIT09dGhpcy5hUm90YXRpb24mJihiPU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxjPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxkPWEtdGhpcy5hWCxlLT10aGlzLmFZLGE9ZCpiLWUqYyt0aGlzLmFYLGU9ZCpjK2UqYit0aGlzLmFZKTtyZXR1cm4gbmV3IEQoYSxlKX07emIucHJvdG90eXBlPQpPYmplY3QuY3JlYXRlKG5hLnByb3RvdHlwZSk7emIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXpiO3piLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO3piLnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnBvaW50cyxjPShiLmxlbmd0aC0xKSphO2E9TWF0aC5mbG9vcihjKTt2YXIgYz1jLWEsZD1iWzA9PT1hP2E6YS0xXSxlPWJbYV0sZj1iW2E+Yi5sZW5ndGgtMj9iLmxlbmd0aC0xOmErMV0sYj1iW2E+Yi5sZW5ndGgtMz9iLmxlbmd0aC0xOmErMl07cmV0dXJuIG5ldyBEKFNlKGMsZC54LGUueCxmLngsYi54KSxTZShjLGQueSxlLnksZi55LGIueSkpfTtoYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuYS5wcm90b3R5cGUpO2hjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1oYztoYy5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy52MCxjPXRoaXMudjEsZD10aGlzLnYyLGU9dGhpcy52MztyZXR1cm4gbmV3IEQoeWIoYSxiLngsYy54LApkLngsZS54KSx5YihhLGIueSxjLnksZC55LGUueSkpfTtpYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuYS5wcm90b3R5cGUpO2ljLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1pYztpYy5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy52MCxjPXRoaXMudjEsZD10aGlzLnYyO3JldHVybiBuZXcgRCh4YihhLGIueCxjLngsZC54KSx4YihhLGIueSxjLnksZC55KSl9O3ZhciB1ZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoWWMucHJvdG90eXBlKSx7ZnJvbVBvaW50czpmdW5jdGlvbihhKXt0aGlzLm1vdmVUbyhhWzBdLngsYVswXS55KTtmb3IodmFyIGI9MSxjPWEubGVuZ3RoO2I8YztiKyspdGhpcy5saW5lVG8oYVtiXS54LGFbYl0ueSl9LG1vdmVUbzpmdW5jdGlvbihhLGIpe3RoaXMuY3VycmVudFBvaW50LnNldChhLGIpfSxsaW5lVG86ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgU2EodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgRChhLGIpKTsKdGhpcy5jdXJ2ZXMucHVzaChjKTt0aGlzLmN1cnJlbnRQb2ludC5zZXQoYSxiKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihhLGIsYyxkKXthPW5ldyBpYyh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBEKGEsYiksbmV3IEQoYyxkKSk7dGhpcy5jdXJ2ZXMucHVzaChhKTt0aGlzLmN1cnJlbnRQb2ludC5zZXQoYyxkKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihhLGIsYyxkLGUsZil7YT1uZXcgaGModGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgRChhLGIpLG5ldyBEKGMsZCksbmV3IEQoZSxmKSk7dGhpcy5jdXJ2ZXMucHVzaChhKTt0aGlzLmN1cnJlbnRQb2ludC5zZXQoZSxmKX0sc3BsaW5lVGhydTpmdW5jdGlvbihhKXt2YXIgYj1bdGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKV0uY29uY2F0KGEpLGI9bmV3IHpiKGIpO3RoaXMuY3VydmVzLnB1c2goYik7dGhpcy5jdXJyZW50UG9pbnQuY29weShhW2EubGVuZ3RoLTFdKX0sYXJjOmZ1bmN0aW9uKGEsYixjLGQsCmUsZil7dGhpcy5hYnNhcmMoYSt0aGlzLmN1cnJlbnRQb2ludC54LGIrdGhpcy5jdXJyZW50UG9pbnQueSxjLGQsZSxmKX0sYWJzYXJjOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmFic2VsbGlwc2UoYSxiLGMsYyxkLGUsZil9LGVsbGlwc2U6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXt0aGlzLmFic2VsbGlwc2UoYSt0aGlzLmN1cnJlbnRQb2ludC54LGIrdGhpcy5jdXJyZW50UG9pbnQueSxjLGQsZSxmLGcsaCl9LGFic2VsbGlwc2U6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXthPW5ldyBYYShhLGIsYyxkLGUsZixnLGgpOzA8dGhpcy5jdXJ2ZXMubGVuZ3RoJiYoYj1hLmdldFBvaW50KDApLGIuZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KXx8dGhpcy5saW5lVG8oYi54LGIueSkpO3RoaXMuY3VydmVzLnB1c2goYSk7YT1hLmdldFBvaW50KDEpO3RoaXMuY3VycmVudFBvaW50LmNvcHkoYSl9fSk7WmMucHJvdG90eXBlPXVlO3VlLmNvbnN0cnVjdG9yPVpjO0FiLnByb3RvdHlwZT0KT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHVlKSx7Y29uc3RydWN0b3I6QWIsZ2V0UG9pbnRzSG9sZXM6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MCxkPXRoaXMuaG9sZXMubGVuZ3RoO2M8ZDtjKyspYltjXT10aGlzLmhvbGVzW2NdLmdldFBvaW50cyhhKTtyZXR1cm4gYn0sZXh0cmFjdEFsbFBvaW50czpmdW5jdGlvbihhKXtyZXR1cm57c2hhcGU6dGhpcy5nZXRQb2ludHMoYSksaG9sZXM6dGhpcy5nZXRQb2ludHNIb2xlcyhhKX19LGV4dHJhY3RQb2ludHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZXh0cmFjdEFsbFBvaW50cyhhKX19KTtPYmplY3QuYXNzaWduKGRlLnByb3RvdHlwZSx7bW92ZVRvOmZ1bmN0aW9uKGEsYil7dGhpcy5jdXJyZW50UGF0aD1uZXcgWmM7dGhpcy5zdWJQYXRocy5wdXNoKHRoaXMuY3VycmVudFBhdGgpO3RoaXMuY3VycmVudFBhdGgubW92ZVRvKGEsYil9LGxpbmVUbzpmdW5jdGlvbihhLGIpe3RoaXMuY3VycmVudFBhdGgubGluZVRvKGEsCmIpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuY3VycmVudFBhdGgucXVhZHJhdGljQ3VydmVUbyhhLGIsYyxkKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5jdXJyZW50UGF0aC5iZXppZXJDdXJ2ZVRvKGEsYixjLGQsZSxmKX0sc3BsaW5lVGhydTpmdW5jdGlvbihhKXt0aGlzLmN1cnJlbnRQYXRoLnNwbGluZVRocnUoYSl9LHRvU2hhcGVzOmZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtmb3IodmFyIGI9W10sYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKyl7dmFyIGU9YVtjXSxmPW5ldyBBYjtmLmN1cnZlcz1lLmN1cnZlcztiLnB1c2goZil9cmV0dXJuIGJ9ZnVuY3Rpb24gZChhLGIpe2Zvcih2YXIgYz1iLmxlbmd0aCxkPSExLGU9Yy0xLGY9MDtmPGM7ZT1mKyspe3ZhciBnPWJbZV0saD1iW2ZdLGs9aC54LWcueCxsPWgueS1nLnk7aWYoTWF0aC5hYnMobCk+TnVtYmVyLkVQU0lMT04pe2lmKDA+bCYmKGc9YltmXSxrPS1rLApoPWJbZV0sbD0tbCksIShhLnk8Zy55fHxhLnk+aC55KSlpZihhLnk9PT1nLnkpe2lmKGEueD09PWcueClyZXR1cm4hMH1lbHNle2U9bCooYS54LWcueCktayooYS55LWcueSk7aWYoMD09PWUpcmV0dXJuITA7MD5lfHwoZD0hZCl9fWVsc2UgaWYoYS55PT09Zy55JiYoaC54PD1hLngmJmEueDw9Zy54fHxnLng8PWEueCYmYS54PD1oLngpKXJldHVybiEwfXJldHVybiBkfXZhciBlPXphLmlzQ2xvY2tXaXNlLGY9dGhpcy5zdWJQYXRocztpZigwPT09Zi5sZW5ndGgpcmV0dXJuW107aWYoITA9PT1iKXJldHVybiBjKGYpO3ZhciBnLGgsayxsPVtdO2lmKDE9PT1mLmxlbmd0aClyZXR1cm4gaD1mWzBdLGs9bmV3IEFiLGsuY3VydmVzPWguY3VydmVzLGwucHVzaChrKSxsO3ZhciBwPSFlKGZbMF0uZ2V0UG9pbnRzKCkpLHA9YT8hcDpwO2s9W107dmFyIHE9W10sbj1bXSxyPTAsejtxW3JdPXZvaWQgMDtuW3JdPVtdO2Zvcih2YXIgdD0wLHk9Zi5sZW5ndGg7dDx5O3QrKyloPWZbdF0sej1oLmdldFBvaW50cygpLApnPWUoeiksKGc9YT8hZzpnKT8oIXAmJnFbcl0mJnIrKyxxW3JdPXtzOm5ldyBBYixwOnp9LHFbcl0ucy5jdXJ2ZXM9aC5jdXJ2ZXMscCYmcisrLG5bcl09W10pOm5bcl0ucHVzaCh7aDpoLHA6elswXX0pO2lmKCFxWzBdKXJldHVybiBjKGYpO2lmKDE8cS5sZW5ndGgpe3Q9ITE7aD1bXTtlPTA7Zm9yKGY9cS5sZW5ndGg7ZTxmO2UrKylrW2VdPVtdO2U9MDtmb3IoZj1xLmxlbmd0aDtlPGY7ZSsrKWZvcihnPW5bZV0scD0wO3A8Zy5sZW5ndGg7cCsrKXtyPWdbcF07ej0hMDtmb3IoeT0wO3k8cS5sZW5ndGg7eSsrKWQoci5wLHFbeV0ucCkmJihlIT09eSYmaC5wdXNoKHtmcm9tczplLHRvczp5LGhvbGU6cH0pLHo/KHo9ITEsa1t5XS5wdXNoKHIpKTp0PSEwKTt6JiZrW2VdLnB1c2gocil9MDxoLmxlbmd0aCYmKHR8fChuPWspKX10PTA7Zm9yKGU9cS5sZW5ndGg7dDxlO3QrKylmb3Ioaz1xW3RdLnMsbC5wdXNoKGspLGg9blt0XSxmPTAsZz1oLmxlbmd0aDtmPGc7ZisrKWsuaG9sZXMucHVzaChoW2ZdLmgpOwpyZXR1cm4gbH19KTtPYmplY3QuYXNzaWduKGVlLnByb3RvdHlwZSx7aXNGb250OiEwLGdlbmVyYXRlU2hhcGVzOmZ1bmN0aW9uKGEsYixjKXt2b2lkIDA9PT1iJiYoYj0xMDApO3ZvaWQgMD09PWMmJihjPTQpO3ZhciBkPXRoaXMuZGF0YTthPVN0cmluZyhhKS5zcGxpdCgiIik7dmFyIGU9Yi9kLnJlc29sdXRpb24sZj0oZC5ib3VuZGluZ0JveC55TWF4LWQuYm91bmRpbmdCb3gueU1pbitkLnVuZGVybGluZVRoaWNrbmVzcykqZSxnPTAsaD0wO2I9W107Zm9yKHZhciBrPTA7azxhLmxlbmd0aDtrKyspe3ZhciBsPWFba107aWYoIlxuIj09PWwpZz0wLGgtPWY7ZWxzZXt2YXIgcDtwPWU7dmFyIHE9ZyxuPWg7aWYobD1kLmdseXBoc1tsXXx8ZC5nbHlwaHNbIj8iXSl7dmFyIHI9bmV3IGRlLHo9W10sdCx5LHgsdixCLHcsQyxEO2lmKGwubylmb3IodmFyIEU9bC5fY2FjaGVkT3V0bGluZXx8KGwuX2NhY2hlZE91dGxpbmU9bC5vLnNwbGl0KCIgIikpLEY9MCxJPUUubGVuZ3RoO0Y8STspc3dpdGNoKEVbRisrXSl7Y2FzZSAibSI6dD0KRVtGKytdKnArcTt5PUVbRisrXSpwK247ci5tb3ZlVG8odCx5KTticmVhaztjYXNlICJsIjp0PUVbRisrXSpwK3E7eT1FW0YrK10qcCtuO3IubGluZVRvKHQseSk7YnJlYWs7Y2FzZSAicSI6dD1FW0YrK10qcCtxO3k9RVtGKytdKnArbjtCPUVbRisrXSpwK3E7dz1FW0YrK10qcCtuO3IucXVhZHJhdGljQ3VydmVUbyhCLHcsdCx5KTtpZih2PXpbei5sZW5ndGgtMV0pe3g9di54O3Y9di55O2Zvcih2YXIgSD0xO0g8PWM7SCsrKXt2YXIgSj1IL2M7eGIoSix4LEIsdCk7eGIoSix2LHcseSl9fWJyZWFrO2Nhc2UgImIiOmlmKHQ9RVtGKytdKnArcSx5PUVbRisrXSpwK24sQj1FW0YrK10qcCtxLHc9RVtGKytdKnArbixDPUVbRisrXSpwK3EsRD1FW0YrK10qcCtuLHIuYmV6aWVyQ3VydmVUbyhCLHcsQyxELHQseSksdj16W3oubGVuZ3RoLTFdKWZvcih4PXYueCx2PXYueSxIPTE7SDw9YztIKyspSj1IL2MseWIoSix4LEIsQyx0KSx5YihKLHYsdyxELHkpfXA9e29mZnNldFg6bC5oYSpwLHBhdGg6cn19ZWxzZSBwPQp2b2lkIDA7Zys9cC5vZmZzZXRYO2IucHVzaChwLnBhdGgpfX1jPVtdO2Q9MDtmb3IoYT1iLmxlbmd0aDtkPGE7ZCsrKUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGMsYltkXS50b1NoYXBlcygpKTtyZXR1cm4gY319KTtPYmplY3QuYXNzaWduKFRlLnByb3RvdHlwZSx7bG9hZDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzOyhuZXcgdWEodGhpcy5tYW5hZ2VyKSkubG9hZChhLGZ1bmN0aW9uKGEpe3ZhciBjO3RyeXtjPUpTT04ucGFyc2UoYSl9Y2F0Y2goZCl7Y29uc29sZS53YXJuKCJUSFJFRS5Gb250TG9hZGVyOiB0eXBlZmFjZS5qcyBzdXBwb3J0IGlzIGJlaW5nIGRlcHJlY2F0ZWQuIFVzZSB0eXBlZmFjZS5qc29uIGluc3RlYWQuIiksYz1KU09OLnBhcnNlKGEuc3Vic3RyaW5nKDY1LGEubGVuZ3RoLTIpKX1hPWUucGFyc2UoYyk7YiYmYihhKX0sYyxkKX0scGFyc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBlZShhKX19KTt2YXIgT2QsaWU9e2dldENvbnRleHQ6ZnVuY3Rpb24oKXt2b2lkIDA9PT0KT2QmJihPZD1uZXcgKHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKTtyZXR1cm4gT2R9LHNldENvbnRleHQ6ZnVuY3Rpb24oYSl7T2Q9YX19O09iamVjdC5hc3NpZ24oZmUucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW5ldyB1YSh0aGlzLm1hbmFnZXIpO2Uuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpO2UubG9hZChhLGZ1bmN0aW9uKGEpe2llLmdldENvbnRleHQoKS5kZWNvZGVBdWRpb0RhdGEoYSxmdW5jdGlvbihhKXtiKGEpfSl9LGMsZCl9fSk7T2JqZWN0LmFzc2lnbihVZS5wcm90b3R5cGUse3VwZGF0ZTpmdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZixnLGgsaz1uZXcgSixsPW5ldyBKO3JldHVybiBmdW5jdGlvbihwKXtpZihhIT09dGhpc3x8YiE9PXAuZm9jdXN8fGMhPT1wLmZvdnx8ZCE9PXAuYXNwZWN0KnRoaXMuYXNwZWN0fHxlIT09cC5uZWFyfHxmIT09cC5mYXJ8fGchPT1wLnpvb218fGghPT10aGlzLmV5ZVNlcCl7YT0KdGhpcztiPXAuZm9jdXM7Yz1wLmZvdjtkPXAuYXNwZWN0KnRoaXMuYXNwZWN0O2U9cC5uZWFyO2Y9cC5mYXI7Zz1wLnpvb207dmFyIHE9cC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7aD10aGlzLmV5ZVNlcC8yO3ZhciBuPWgqZS9iLHI9ZSpNYXRoLnRhbihZLkRFRzJSQUQqYyouNSkvZyx6LHQ7bC5lbGVtZW50c1sxMl09LWg7ay5lbGVtZW50c1sxMl09aDt6PS1yKmQrbjt0PXIqZCtuO3EuZWxlbWVudHNbMF09MiplLyh0LXopO3EuZWxlbWVudHNbOF09KHQreikvKHQteik7dGhpcy5jYW1lcmFMLnByb2plY3Rpb25NYXRyaXguY29weShxKTt6PS1yKmQtbjt0PXIqZC1uO3EuZWxlbWVudHNbMF09MiplLyh0LXopO3EuZWxlbWVudHNbOF09KHQreikvKHQteik7dGhpcy5jYW1lcmFSLnByb2plY3Rpb25NYXRyaXguY29weShxKX10aGlzLmNhbWVyYUwubWF0cml4V29ybGQuY29weShwLm1hdHJpeFdvcmxkKS5tdWx0aXBseShsKTt0aGlzLmNhbWVyYVIubWF0cml4V29ybGQuY29weShwLm1hdHJpeFdvcmxkKS5tdWx0aXBseShrKX19KCl9KTsKSWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpO0lkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1JZDtnZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmdlLGlzQXJyYXlDYW1lcmE6ITB9KTtoZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6aGUsZ2V0SW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYWlufSxyZW1vdmVGaWx0ZXI6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5maWx0ZXImJih0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmZpbHRlciksdGhpcy5maWx0ZXIuZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5maWx0ZXI9bnVsbCl9LGdldEZpbHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbHRlcn0sc2V0RmlsdGVyOmZ1bmN0aW9uKGEpe251bGwhPT0KdGhpcy5maWx0ZXI/KHRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbikpOnRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbik7dGhpcy5maWx0ZXI9YTt0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmZpbHRlcik7dGhpcy5maWx0ZXIuY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pfSxnZXRNYXN0ZXJWb2x1bWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9LHNldE1hc3RlclZvbHVtZTpmdW5jdGlvbihhKXt0aGlzLmdhaW4uZ2Fpbi52YWx1ZT1hfSx1cGRhdGVNYXRyaXhXb3JsZDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHFhLGM9bmV3IHAsZD1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oZSl7Qi5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCh0aGlzLGUpO2U9dGhpcy5jb250ZXh0Lmxpc3RlbmVyO3ZhciBmPQp0aGlzLnVwO3RoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGEsYixjKTtkLnNldCgwLDAsLTEpLmFwcGx5UXVhdGVybmlvbihiKTtlLnBvc2l0aW9uWD8oZS5wb3NpdGlvblguc2V0VmFsdWVBdFRpbWUoYS54LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS5wb3NpdGlvblkuc2V0VmFsdWVBdFRpbWUoYS55LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS5wb3NpdGlvblouc2V0VmFsdWVBdFRpbWUoYS56LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS5mb3J3YXJkWC5zZXRWYWx1ZUF0VGltZShkLngsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lKSxlLmZvcndhcmRZLnNldFZhbHVlQXRUaW1lKGQueSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpLGUuZm9yd2FyZFouc2V0VmFsdWVBdFRpbWUoZC56LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS51cFguc2V0VmFsdWVBdFRpbWUoZi54LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS51cFkuc2V0VmFsdWVBdFRpbWUoZi55LAp0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpLGUudXBaLnNldFZhbHVlQXRUaW1lKGYueix0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpKTooZS5zZXRQb3NpdGlvbihhLngsYS55LGEueiksZS5zZXRPcmllbnRhdGlvbihkLngsZC55LGQueixmLngsZi55LGYueikpfX0oKX0pO2pjLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpqYyxnZXRPdXRwdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYWlufSxzZXROb2RlU291cmNlOmZ1bmN0aW9uKGEpe3RoaXMuaGFzUGxheWJhY2tDb250cm9sPSExO3RoaXMuc291cmNlVHlwZT0iYXVkaW9Ob2RlIjt0aGlzLnNvdXJjZT1hO3RoaXMuY29ubmVjdCgpO3JldHVybiB0aGlzfSxzZXRCdWZmZXI6ZnVuY3Rpb24oYSl7dGhpcy5idWZmZXI9YTt0aGlzLnNvdXJjZVR5cGU9ImJ1ZmZlciI7dGhpcy5hdXRvcGxheSYmdGhpcy5wbGF5KCk7cmV0dXJuIHRoaXN9LHBsYXk6ZnVuY3Rpb24oKXtpZighMD09PQp0aGlzLmlzUGxheWluZyljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiBBdWRpbyBpcyBhbHJlYWR5IHBsYXlpbmcuIik7ZWxzZSBpZighMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKWNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7ZWxzZXt2YXIgYT10aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7YS5idWZmZXI9dGhpcy5idWZmZXI7YS5sb29wPXRoaXMubG9vcDthLm9uZW5kZWQ9dGhpcy5vbkVuZGVkLmJpbmQodGhpcyk7YS5wbGF5YmFja1JhdGUuc2V0VmFsdWVBdFRpbWUodGhpcy5wbGF5YmFja1JhdGUsdGhpcy5zdGFydFRpbWUpO2Euc3RhcnQoMCx0aGlzLnN0YXJ0VGltZSk7dGhpcy5pc1BsYXlpbmc9ITA7dGhpcy5zb3VyY2U9YTtyZXR1cm4gdGhpcy5jb25uZWN0KCl9fSxwYXVzZTpmdW5jdGlvbigpe2lmKCExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTsKZWxzZSByZXR1cm4gdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc3RhcnRUaW1lPXRoaXMuY29udGV4dC5jdXJyZW50VGltZSx0aGlzLmlzUGxheWluZz0hMSx0aGlzfSxzdG9wOmZ1bmN0aW9uKCl7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO2Vsc2UgcmV0dXJuIHRoaXMuc291cmNlLnN0b3AoKSx0aGlzLnN0YXJ0VGltZT0wLHRoaXMuaXNQbGF5aW5nPSExLHRoaXN9LGNvbm5lY3Q6ZnVuY3Rpb24oKXtpZigwPHRoaXMuZmlsdGVycy5sZW5ndGgpe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IodmFyIGE9MSxiPXRoaXMuZmlsdGVycy5sZW5ndGg7YTxiO2ErKyl0aGlzLmZpbHRlcnNbYS0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1thXSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7CnJldHVybiB0aGlzfSxkaXNjb25uZWN0OmZ1bmN0aW9uKCl7aWYoMDx0aGlzLmZpbHRlcnMubGVuZ3RoKXt0aGlzLnNvdXJjZS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1swXSk7Zm9yKHZhciBhPTEsYj10aGlzLmZpbHRlcnMubGVuZ3RoO2E8YjthKyspdGhpcy5maWx0ZXJzW2EtMV0uZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbYV0pO3RoaXMuZmlsdGVyc1t0aGlzLmZpbHRlcnMubGVuZ3RoLTFdLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSl9ZWxzZSB0aGlzLnNvdXJjZS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpO3JldHVybiB0aGlzfSxnZXRGaWx0ZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsdGVyc30sc2V0RmlsdGVyczpmdW5jdGlvbihhKXthfHwoYT1bXSk7ITA9PT10aGlzLmlzUGxheWluZz8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPWEsdGhpcy5jb25uZWN0KCkpOnRoaXMuZmlsdGVycz1hO3JldHVybiB0aGlzfSxnZXRGaWx0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJzKClbMF19LApzZXRGaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyhhP1thXTpbXSl9LHNldFBsYXliYWNrUmF0ZTpmdW5jdGlvbihhKXtpZighMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKWNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7ZWxzZSByZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9YSwhMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VmFsdWVBdFRpbWUodGhpcy5wbGF5YmFja1JhdGUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lKSx0aGlzfSxnZXRQbGF5YmFja1JhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9LG9uRW5kZWQ6ZnVuY3Rpb24oKXt0aGlzLmlzUGxheWluZz0hMX0sZ2V0TG9vcDpmdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2w/KGNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIiksCiExKTp0aGlzLmxvb3B9LHNldExvb3A6ZnVuY3Rpb24oYSl7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO2Vsc2UgcmV0dXJuIHRoaXMubG9vcD1hLCEwPT09dGhpcy5pc1BsYXlpbmcmJih0aGlzLnNvdXJjZS5sb29wPXRoaXMubG9vcCksdGhpc30sZ2V0Vm9sdW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnZhbHVlfSxzZXRWb2x1bWU6ZnVuY3Rpb24oYSl7dGhpcy5nYWluLmdhaW4udmFsdWU9YTtyZXR1cm4gdGhpc319KTtqZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGpjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmplLGdldE91dHB1dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbm5lcn0sZ2V0UmVmRGlzdGFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYW5uZXIucmVmRGlzdGFuY2V9LHNldFJlZkRpc3RhbmNlOmZ1bmN0aW9uKGEpe3RoaXMucGFubmVyLnJlZkRpc3RhbmNlPQphfSxnZXRSb2xsb2ZmRmFjdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFubmVyLnJvbGxvZmZGYWN0b3J9LHNldFJvbGxvZmZGYWN0b3I6ZnVuY3Rpb24oYSl7dGhpcy5wYW5uZXIucm9sbG9mZkZhY3Rvcj1hfSxnZXREaXN0YW5jZU1vZGVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFubmVyLmRpc3RhbmNlTW9kZWx9LHNldERpc3RhbmNlTW9kZWw6ZnVuY3Rpb24oYSl7dGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbD1hfSxnZXRNYXhEaXN0YW5jZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbm5lci5tYXhEaXN0YW5jZX0sc2V0TWF4RGlzdGFuY2U6ZnVuY3Rpb24oYSl7dGhpcy5wYW5uZXIubWF4RGlzdGFuY2U9YX0sdXBkYXRlTWF0cml4V29ybGQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYil7Qi5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCh0aGlzLGIpO2Euc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpO3RoaXMucGFubmVyLnNldFBvc2l0aW9uKGEueCwKYS55LGEueil9fSgpfSk7T2JqZWN0LmFzc2lnbihrZS5wcm90b3R5cGUse2dldEZyZXF1ZW5jeURhdGE6ZnVuY3Rpb24oKXt0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSk7cmV0dXJuIHRoaXMuZGF0YX0sZ2V0QXZlcmFnZUZyZXF1ZW5jeTpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCksYz0wO2M8Yi5sZW5ndGg7YysrKWErPWJbY107cmV0dXJuIGEvYi5sZW5ndGh9fSk7T2JqZWN0LmFzc2lnbihsZS5wcm90b3R5cGUse2FjY3VtdWxhdGU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmJ1ZmZlcixkPXRoaXMudmFsdWVTaXplLGU9YSpkK2QsZj10aGlzLmN1bXVsYXRpdmVXZWlnaHQ7aWYoMD09PWYpe2ZvcihmPTA7ZiE9PWQ7KytmKWNbZStmXT1jW2ZdO2Y9Yn1lbHNlIGYrPWIsdGhpcy5fbWl4QnVmZmVyUmVnaW9uKGMsZSwwLGIvZixkKTt0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9Zn0sYXBwbHk6ZnVuY3Rpb24oYSl7dmFyIGI9CnRoaXMudmFsdWVTaXplLGM9dGhpcy5idWZmZXI7YT1hKmIrYjt2YXIgZD10aGlzLmN1bXVsYXRpdmVXZWlnaHQsZT10aGlzLmJpbmRpbmc7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PTA7MT5kJiZ0aGlzLl9taXhCdWZmZXJSZWdpb24oYyxhLDMqYiwxLWQsYik7Zm9yKHZhciBkPWIsZj1iK2I7ZCE9PWY7KytkKWlmKGNbZF0hPT1jW2QrYl0pe2Uuc2V0VmFsdWUoYyxhKTticmVha319LHNhdmVPcmlnaW5hbFN0YXRlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5idWZmZXIsYj10aGlzLnZhbHVlU2l6ZSxjPTMqYjt0aGlzLmJpbmRpbmcuZ2V0VmFsdWUoYSxjKTtmb3IodmFyIGQ9YjtkIT09YzsrK2QpYVtkXT1hW2MrZCViXTt0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MH0scmVzdG9yZU9yaWdpbmFsU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLmJpbmRpbmcuc2V0VmFsdWUodGhpcy5idWZmZXIsMyp0aGlzLnZhbHVlU2l6ZSl9LF9zZWxlY3Q6ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZiguNTw9ZClmb3IoZD0KMDtkIT09ZTsrK2QpYVtiK2RdPWFbYytkXX0sX3NsZXJwOmZ1bmN0aW9uKGEsYixjLGQpe3FhLnNsZXJwRmxhdChhLGIsYSxiLGEsYyxkKX0sX2xlcnA6ZnVuY3Rpb24oYSxiLGMsZCxlKXtmb3IodmFyIGY9MS1kLGc9MDtnIT09ZTsrK2cpe3ZhciBoPWIrZzthW2hdPWFbaF0qZithW2MrZ10qZH19fSk7T2JqZWN0LmFzc2lnbihWZS5wcm90b3R5cGUse2dldFZhbHVlOmZ1bmN0aW9uKGEsYil7dGhpcy5iaW5kKCk7dmFyIGM9dGhpcy5fYmluZGluZ3NbdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfXTt2b2lkIDAhPT1jJiZjLmdldFZhbHVlKGEsYil9LHNldFZhbHVlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMuX2JpbmRpbmdzLGQ9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGU9Yy5sZW5ndGg7ZCE9PWU7KytkKWNbZF0uc2V0VmFsdWUoYSxiKX0sYmluZDpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLl9iaW5kaW5ncyxiPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXywKYz1hLmxlbmd0aDtiIT09YzsrK2IpYVtiXS5iaW5kKCl9LHVuYmluZDpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLl9iaW5kaW5ncyxiPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxjPWEubGVuZ3RoO2IhPT1jOysrYilhW2JdLnVuYmluZCgpfX0pO09iamVjdC5hc3NpZ24ob2Ese0NvbXBvc2l0ZTpWZSxjcmVhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhJiZhLmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IG9hLkNvbXBvc2l0ZShhLGIsYyk6bmV3IG9hKGEsYixjKX0scGFyc2VUcmFja05hbWU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgUmVnRXhwKCJeIisvKCg/Oltcdy1dK1tcLzpdKSopLy5zb3VyY2UrLyhbXHctXC5dKyk/Ly5zb3VyY2UrLyg/OlwuKFtcdy1dKykoPzpcWyguKylcXSk/KT8vLnNvdXJjZSsvXC4oW1x3LV0rKSg/OlxbKC4rKVxdKT8vLnNvdXJjZSsiJCIpLGI9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl07cmV0dXJuIGZ1bmN0aW9uKGMpe3ZhciBkPQphLmV4ZWMoYyk7aWYoIWQpdGhyb3cgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIitjKTt2YXIgZD17bm9kZU5hbWU6ZFsyXSxvYmplY3ROYW1lOmRbM10sb2JqZWN0SW5kZXg6ZFs0XSxwcm9wZXJ0eU5hbWU6ZFs1XSxwcm9wZXJ0eUluZGV4OmRbNl19LGU9ZC5ub2RlTmFtZSYmZC5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHZvaWQgMCE9PWUmJi0xIT09ZSl7dmFyIGY9ZC5ub2RlTmFtZS5zdWJzdHJpbmcoZSsxKTstMSE9PWIuaW5kZXhPZihmKSYmKGQubm9kZU5hbWU9ZC5ub2RlTmFtZS5zdWJzdHJpbmcoMCxlKSxkLm9iamVjdE5hbWU9Zil9aWYobnVsbD09PWQucHJvcGVydHlOYW1lfHwwPT09ZC5wcm9wZXJ0eU5hbWUubGVuZ3RoKXRocm93IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK2MpO3JldHVybiBkfX0oKSxmaW5kTm9kZTpmdW5jdGlvbihhLGIpe2lmKCFifHwKIiI9PT1ifHwicm9vdCI9PT1ifHwiLiI9PT1ifHwtMT09PWJ8fGI9PT1hLm5hbWV8fGI9PT1hLnV1aWQpcmV0dXJuIGE7aWYoYS5za2VsZXRvbil7dmFyIGM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPTA7YzxhLmJvbmVzLmxlbmd0aDtjKyspe3ZhciBkPWEuYm9uZXNbY107aWYoZC5uYW1lPT09YilyZXR1cm4gZH1yZXR1cm4gbnVsbH0oYS5za2VsZXRvbik7aWYoYylyZXR1cm4gY31pZihhLmNoaWxkcmVuKXt2YXIgZD1mdW5jdGlvbihhKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGc9YVtjXTtpZihnLm5hbWU9PT1ifHxnLnV1aWQ9PT1ifHwoZz1kKGcuY2hpbGRyZW4pKSlyZXR1cm4gZ31yZXR1cm4gbnVsbH07aWYoYz1kKGEuY2hpbGRyZW4pKXJldHVybiBjfXJldHVybiBudWxsfX0pO09iamVjdC5hc3NpZ24ob2EucHJvdG90eXBlLHtfZ2V0VmFsdWVfdW5hdmFpbGFibGU6ZnVuY3Rpb24oKXt9LF9zZXRWYWx1ZV91bmF2YWlsYWJsZTpmdW5jdGlvbigpe30sQmluZGluZ1R5cGU6e0RpcmVjdDowLApFbnRpcmVBcnJheToxLEFycmF5RWxlbWVudDoyLEhhc0Zyb21Ub0FycmF5OjN9LFZlcnNpb25pbmc6e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn0sR2V0dGVyQnlCaW5kaW5nVHlwZTpbZnVuY3Rpb24oYSxiKXthW2JdPXRoaXMubm9kZVt0aGlzLnByb3BlcnR5TmFtZV19LGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxkPTAsZT1jLmxlbmd0aDtkIT09ZTsrK2QpYVtiKytdPWNbZF19LGZ1bmN0aW9uKGEsYil7YVtiXT10aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XX0sZnVuY3Rpb24oYSxiKXt0aGlzLnJlc29sdmVkUHJvcGVydHkudG9BcnJheShhLGIpfV0sU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc6W1tmdW5jdGlvbihhLGIpe3RoaXMubm9kZVt0aGlzLnByb3BlcnR5TmFtZV09YVtiXX0sZnVuY3Rpb24oYSxiKXt0aGlzLm5vZGVbdGhpcy5wcm9wZXJ0eU5hbWVdPWFbYl07CnRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfSxmdW5jdGlvbihhLGIpe3RoaXMubm9kZVt0aGlzLnByb3BlcnR5TmFtZV09YVtiXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV0sW2Z1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxkPTAsZT1jLmxlbmd0aDtkIT09ZTsrK2QpY1tkXT1hW2IrK119LGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxkPTAsZT1jLmxlbmd0aDtkIT09ZTsrK2QpY1tkXT1hW2IrK107dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9LGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxkPTAsZT1jLmxlbmd0aDtkIT09ZTsrK2QpY1tkXT1hW2IrK107dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1dLFtmdW5jdGlvbihhLGIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPQphW2JdfSxmdW5jdGlvbihhLGIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWFbYl07dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9LGZ1bmN0aW9uKGEsYil7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09YVtiXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV0sW2Z1bmN0aW9uKGEsYil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShhLGIpfSxmdW5jdGlvbihhLGIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkoYSxiKTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH0sZnVuY3Rpb24oYSxiKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGEsYik7dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1dXSxnZXRWYWx1ZTpmdW5jdGlvbihhLGIpe3RoaXMuYmluZCgpO3RoaXMuZ2V0VmFsdWUoYSxiKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYSwKYil7dGhpcy5iaW5kKCk7dGhpcy5zZXRWYWx1ZShhLGIpfSxiaW5kOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ub2RlLGI9dGhpcy5wYXJzZWRQYXRoLGM9Yi5vYmplY3ROYW1lLGQ9Yi5wcm9wZXJ0eU5hbWUsZT1iLnByb3BlcnR5SW5kZXg7YXx8KHRoaXMubm9kZT1hPW9hLmZpbmROb2RlKHRoaXMucm9vdE5vZGUsYi5ub2RlTmFtZSl8fHRoaXMucm9vdE5vZGUpO3RoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5hdmFpbGFibGU7dGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZTtpZihhKXtpZihjKXt2YXIgZj1iLm9iamVjdEluZGV4O3N3aXRjaChjKXtjYXNlICJtYXRlcmlhbHMiOmlmKCFhLm1hdGVyaWFsKXtjb25zb2xlLmVycm9yKCIgIGNhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbCIsdGhpcyk7cmV0dXJufWlmKCFhLm1hdGVyaWFsLm1hdGVyaWFscyl7Y29uc29sZS5lcnJvcigiICBjYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwubWF0ZXJpYWxzIGFzIG5vZGUubWF0ZXJpYWwgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFscyBhcnJheSIsCnRoaXMpO3JldHVybn1hPWEubWF0ZXJpYWwubWF0ZXJpYWxzO2JyZWFrO2Nhc2UgImJvbmVzIjppZighYS5za2VsZXRvbil7Y29uc29sZS5lcnJvcigiICBjYW4gbm90IGJpbmQgdG8gYm9uZXMgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgc2tlbGV0b24iLHRoaXMpO3JldHVybn1hPWEuc2tlbGV0b24uYm9uZXM7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKylpZihhW2NdLm5hbWU9PT1mKXtmPWM7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih2b2lkIDA9PT1hW2NdKXtjb25zb2xlLmVycm9yKCIgIGNhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUsIHVuZGVmaW5lZCIsdGhpcyk7cmV0dXJufWE9YVtjXX1pZih2b2lkIDAhPT1mKXtpZih2b2lkIDA9PT1hW2ZdKXtjb25zb2xlLmVycm9yKCIgIHRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQ6Iix0aGlzLGEpO3JldHVybn1hPWFbZl19fWY9YVtkXTtpZih2b2lkIDA9PT1mKWNvbnNvbGUuZXJyb3IoIiAgdHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICIrCmIubm9kZU5hbWUrIi4iK2QrIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIsYSk7ZWxzZXtiPXRoaXMuVmVyc2lvbmluZy5Ob25lO3ZvaWQgMCE9PWEubmVlZHNVcGRhdGU/KGI9dGhpcy5WZXJzaW9uaW5nLk5lZWRzVXBkYXRlLHRoaXMudGFyZ2V0T2JqZWN0PWEpOnZvaWQgMCE9PWEubWF0cml4V29ybGROZWVkc1VwZGF0ZSYmKGI9dGhpcy5WZXJzaW9uaW5nLk1hdHJpeFdvcmxkTmVlZHNVcGRhdGUsdGhpcy50YXJnZXRPYmplY3Q9YSk7Yz10aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtpZih2b2lkIDAhPT1lKXtpZigibW9ycGhUYXJnZXRJbmZsdWVuY2VzIj09PWQpe2lmKCFhLmdlb21ldHJ5KXtjb25zb2xlLmVycm9yKCIgIGNhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXN1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkiLHRoaXMpO3JldHVybn1pZighYS5nZW9tZXRyeS5tb3JwaFRhcmdldHMpe2NvbnNvbGUuZXJyb3IoIiAgY2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhc3VzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaFRhcmdldHMiLAp0aGlzKTtyZXR1cm59Zm9yKGM9MDtjPHRoaXMubm9kZS5nZW9tZXRyeS5tb3JwaFRhcmdldHMubGVuZ3RoO2MrKylpZihhLmdlb21ldHJ5Lm1vcnBoVGFyZ2V0c1tjXS5uYW1lPT09ZSl7ZT1jO2JyZWFrfX1jPXRoaXMuQmluZGluZ1R5cGUuQXJyYXlFbGVtZW50O3RoaXMucmVzb2x2ZWRQcm9wZXJ0eT1mO3RoaXMucHJvcGVydHlJbmRleD1lfWVsc2Ugdm9pZCAwIT09Zi5mcm9tQXJyYXkmJnZvaWQgMCE9PWYudG9BcnJheT8oYz10aGlzLkJpbmRpbmdUeXBlLkhhc0Zyb21Ub0FycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1mKTpBcnJheS5pc0FycmF5KGYpPyhjPXRoaXMuQmluZGluZ1R5cGUuRW50aXJlQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PWYpOnRoaXMucHJvcGVydHlOYW1lPWQ7dGhpcy5nZXRWYWx1ZT10aGlzLkdldHRlckJ5QmluZGluZ1R5cGVbY107dGhpcy5zZXRWYWx1ZT10aGlzLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nW2NdW2JdfX1lbHNlIGNvbnNvbGUuZXJyb3IoIiAgdHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogIisKdGhpcy5wYXRoKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iKX0sdW5iaW5kOmZ1bmN0aW9uKCl7dGhpcy5ub2RlPW51bGw7dGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kO3RoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19KTtPYmplY3QuYXNzaWduKG9hLnByb3RvdHlwZSx7X2dldFZhbHVlX3VuYm91bmQ6b2EucHJvdG90eXBlLmdldFZhbHVlLF9zZXRWYWx1ZV91bmJvdW5kOm9hLnByb3RvdHlwZS5zZXRWYWx1ZX0pO09iamVjdC5hc3NpZ24oV2UucHJvdG90eXBlLHtpc0FuaW1hdGlvbk9iamVjdEdyb3VwOiEwLGFkZDpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5fb2JqZWN0cyxjPWIubGVuZ3RoLGQ9dGhpcy5uQ2FjaGVkT2JqZWN0c18sZT10aGlzLl9pbmRpY2VzQnlVVUlELGY9dGhpcy5fcGF0aHMsZz10aGlzLl9wYXJzZWRQYXRocyxoPXRoaXMuX2JpbmRpbmdzLGs9aC5sZW5ndGgsbD0wLHA9YXJndW1lbnRzLmxlbmd0aDtsIT09cDsrK2wpe3ZhciBxPQphcmd1bWVudHNbbF0sbj1xLnV1aWQscj1lW25dO2lmKHZvaWQgMD09PXIpe3I9YysrO2Vbbl09cjtiLnB1c2gocSk7Zm9yKHZhciBuPTAsej1rO24hPT16OysrbiloW25dLnB1c2gobmV3IG9hKHEsZltuXSxnW25dKSl9ZWxzZSBpZihyPGQpe3ZhciB0PS0tZCx6PWJbdF07ZVt6LnV1aWRdPXI7YltyXT16O2Vbbl09dDtiW3RdPXE7bj0wO2Zvcih6PWs7biE9PXo7KytuKXt2YXIgeT1oW25dLHg9eVtyXTt5W3JdPXlbdF07dm9pZCAwPT09eCYmKHg9bmV3IG9hKHEsZltuXSxnW25dKSk7eVt0XT14fX1lbHNlIHZvaWQgMCE9PWJbcl0mJmNvbnNvbGUuZXJyb3IoIkRpZmZlcmVudCBvYmplY3RzIHdpdGggdGhlIHNhbWUgVVVJRCBkZXRlY3RlZC4gQ2xlYW4gdGhlIGNhY2hlcyBvciByZWNyZWF0ZSB5b3VyIGluZnJhc3RydWN0dXJlIHdoZW4gcmVsb2FkaW5nIHNjZW5lcy4uLiIpfXRoaXMubkNhY2hlZE9iamVjdHNfPWR9LHJlbW92ZTpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5fb2JqZWN0cywKYz10aGlzLm5DYWNoZWRPYmplY3RzXyxkPXRoaXMuX2luZGljZXNCeVVVSUQsZT10aGlzLl9iaW5kaW5ncyxmPWUubGVuZ3RoLGc9MCxoPWFyZ3VtZW50cy5sZW5ndGg7ZyE9PWg7KytnKXt2YXIgaz1hcmd1bWVudHNbZ10sbD1rLnV1aWQscD1kW2xdO2lmKHZvaWQgMCE9PXAmJnA+PWMpe3ZhciBxPWMrKyxuPWJbcV07ZFtuLnV1aWRdPXA7YltwXT1uO2RbbF09cTtiW3FdPWs7az0wO2ZvcihsPWY7ayE9PWw7KytrKXt2YXIgbj1lW2tdLHI9bltwXTtuW3BdPW5bcV07bltxXT1yfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189Y30sdW5jYWNoZTpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5fb2JqZWN0cyxjPWIubGVuZ3RoLGQ9dGhpcy5uQ2FjaGVkT2JqZWN0c18sZT10aGlzLl9pbmRpY2VzQnlVVUlELGY9dGhpcy5fYmluZGluZ3MsZz1mLmxlbmd0aCxoPTAsaz1hcmd1bWVudHMubGVuZ3RoO2ghPT1rOysraCl7dmFyIGw9YXJndW1lbnRzW2hdLnV1aWQscD1lW2xdO2lmKHZvaWQgMCE9PQpwKWlmKGRlbGV0ZSBlW2xdLHA8ZCl7dmFyIGw9LS1kLHE9YltsXSxuPS0tYyxyPWJbbl07ZVtxLnV1aWRdPXA7YltwXT1xO2Vbci51dWlkXT1sO2JbbF09cjtiLnBvcCgpO3E9MDtmb3Iocj1nO3EhPT1yOysrcSl7dmFyIHo9ZltxXSx0PXpbbl07eltwXT16W2xdO3pbbF09dDt6LnBvcCgpfX1lbHNlIGZvcihuPS0tYyxyPWJbbl0sZVtyLnV1aWRdPXAsYltwXT1yLGIucG9wKCkscT0wLHI9ZztxIT09cjsrK3Epej1mW3FdLHpbcF09eltuXSx6LnBvcCgpfXRoaXMubkNhY2hlZE9iamVjdHNfPWR9LHN1YnNjcmliZV86ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGgsZD1jW2FdLGU9dGhpcy5fYmluZGluZ3M7aWYodm9pZCAwIT09ZClyZXR1cm4gZVtkXTt2YXIgZj10aGlzLl9wYXRocyxnPXRoaXMuX3BhcnNlZFBhdGhzLGg9dGhpcy5fb2JqZWN0cyxrPXRoaXMubkNhY2hlZE9iamVjdHNfLGw9QXJyYXkoaC5sZW5ndGgpLGQ9ZS5sZW5ndGg7Y1thXT0KZDtmLnB1c2goYSk7Zy5wdXNoKGIpO2UucHVzaChsKTtjPWs7Zm9yKGQ9aC5sZW5ndGg7YyE9PWQ7KytjKWxbY109bmV3IG9hKGhbY10sYSxiKTtyZXR1cm4gbH0sdW5zdWJzY3JpYmVfOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxjPWJbYV07aWYodm9pZCAwIT09Yyl7dmFyIGQ9dGhpcy5fcGF0aHMsZT10aGlzLl9wYXJzZWRQYXRocyxmPXRoaXMuX2JpbmRpbmdzLGc9Zi5sZW5ndGgtMSxoPWZbZ107YlthW2ddXT1jO2ZbY109aDtmLnBvcCgpO2VbY109ZVtnXTtlLnBvcCgpO2RbY109ZFtnXTtkLnBvcCgpfX19KTtPYmplY3QuYXNzaWduKFhlLnByb3RvdHlwZSx7cGxheTpmdW5jdGlvbigpe3RoaXMuX21peGVyLl9hY3RpdmF0ZUFjdGlvbih0aGlzKTtyZXR1cm4gdGhpc30sc3RvcDpmdW5jdGlvbigpe3RoaXMuX21peGVyLl9kZWFjdGl2YXRlQWN0aW9uKHRoaXMpO3JldHVybiB0aGlzLnJlc2V0KCl9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5wYXVzZWQ9CiExO3RoaXMuZW5hYmxlZD0hMDt0aGlzLnRpbWU9MDt0aGlzLl9sb29wQ291bnQ9LTE7dGhpcy5fc3RhcnRUaW1lPW51bGw7cmV0dXJuIHRoaXMuc3RvcEZhZGluZygpLnN0b3BXYXJwaW5nKCl9LGlzUnVubmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLnBhdXNlZCYmMCE9PXRoaXMudGltZVNjYWxlJiZudWxsPT09dGhpcy5fc3RhcnRUaW1lJiZ0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9LGlzU2NoZWR1bGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX0sc3RhcnRBdDpmdW5jdGlvbihhKXt0aGlzLl9zdGFydFRpbWU9YTtyZXR1cm4gdGhpc30sc2V0TG9vcDpmdW5jdGlvbihhLGIpe3RoaXMubG9vcD1hO3RoaXMucmVwZXRpdGlvbnM9YjtyZXR1cm4gdGhpc30sc2V0RWZmZWN0aXZlV2VpZ2h0OmZ1bmN0aW9uKGEpe3RoaXMud2VpZ2h0PWE7dGhpcy5fZWZmZWN0aXZlV2VpZ2h0PXRoaXMuZW5hYmxlZD8KYTowO3JldHVybiB0aGlzLnN0b3BGYWRpbmcoKX0sZ2V0RWZmZWN0aXZlV2VpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodH0sZmFkZUluOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyhhLDAsMSl9LGZhZGVPdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKGEsMSwwKX0sY3Jvc3NGYWRlRnJvbTpmdW5jdGlvbihhLGIsYyl7YS5mYWRlT3V0KGIpO3RoaXMuZmFkZUluKGIpO2lmKGMpe2M9dGhpcy5fY2xpcC5kdXJhdGlvbjt2YXIgZD1hLl9jbGlwLmR1cmF0aW9uLGU9Yy9kO2Eud2FycCgxLGQvYyxiKTt0aGlzLndhcnAoZSwxLGIpfXJldHVybiB0aGlzfSxjcm9zc0ZhZGVUbzpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEuY3Jvc3NGYWRlRnJvbSh0aGlzLGIsYyl9LHN0b3BGYWRpbmc6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtudWxsIT09YSYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PQpudWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudChhKSk7cmV0dXJuIHRoaXN9LHNldEVmZmVjdGl2ZVRpbWVTY2FsZTpmdW5jdGlvbihhKXt0aGlzLnRpbWVTY2FsZT1hO3RoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT10aGlzLnBhdXNlZD8wOmE7cmV0dXJuIHRoaXMuc3RvcFdhcnBpbmcoKX0sZ2V0RWZmZWN0aXZlVGltZVNjYWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZX0sc2V0RHVyYXRpb246ZnVuY3Rpb24oYSl7dGhpcy50aW1lU2NhbGU9dGhpcy5fY2xpcC5kdXJhdGlvbi9hO3JldHVybiB0aGlzLnN0b3BXYXJwaW5nKCl9LHN5bmNXaXRoOmZ1bmN0aW9uKGEpe3RoaXMudGltZT1hLnRpbWU7dGhpcy50aW1lU2NhbGU9YS50aW1lU2NhbGU7cmV0dXJuIHRoaXMuc3RvcFdhcnBpbmcoKX0saGFsdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy53YXJwKHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSwwLGEpfSx3YXJwOmZ1bmN0aW9uKGEsCmIsYyl7dmFyIGQ9dGhpcy5fbWl4ZXIsZT1kLnRpbWUsZj10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudCxnPXRoaXMudGltZVNjYWxlO251bGw9PT1mJiYodGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9Zj1kLl9sZW5kQ29udHJvbEludGVycG9sYW50KCkpO2Q9Zi5wYXJhbWV0ZXJQb3NpdGlvbnM7Zj1mLnNhbXBsZVZhbHVlcztkWzBdPWU7ZFsxXT1lK2M7ZlswXT1hL2c7ZlsxXT1iL2c7cmV0dXJuIHRoaXN9LHN0b3BXYXJwaW5nOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7bnVsbCE9PWEmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudChhKSk7cmV0dXJuIHRoaXN9LGdldE1peGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21peGVyfSxnZXRDbGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NsaXB9LGdldFJvb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9jYWxSb290fHwKdGhpcy5fbWl4ZXIuX3Jvb3R9LF91cGRhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYodGhpcy5lbmFibGVkKXt2YXIgZT10aGlzLl9zdGFydFRpbWU7aWYobnVsbCE9PWUpe2I9KGEtZSkqYztpZigwPmJ8fDA9PT1jKXJldHVybjt0aGlzLl9zdGFydFRpbWU9bnVsbDtiKj1jfWIqPXRoaXMuX3VwZGF0ZVRpbWVTY2FsZShhKTtjPXRoaXMuX3VwZGF0ZVRpbWUoYik7YT10aGlzLl91cGRhdGVXZWlnaHQoYSk7aWYoMDxhKXtiPXRoaXMuX2ludGVycG9sYW50cztmb3IodmFyIGU9dGhpcy5fcHJvcGVydHlCaW5kaW5ncyxmPTAsZz1iLmxlbmd0aDtmIT09ZzsrK2YpYltmXS5ldmFsdWF0ZShjKSxlW2ZdLmFjY3VtdWxhdGUoZCxhKX19ZWxzZSB0aGlzLl91cGRhdGVXZWlnaHQoYSl9LF91cGRhdGVXZWlnaHQ6ZnVuY3Rpb24oYSl7dmFyIGI9MDtpZih0aGlzLmVuYWJsZWQpe3ZhciBiPXRoaXMud2VpZ2h0LGM9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobnVsbCE9PWMpe3ZhciBkPWMuZXZhbHVhdGUoYSlbMF0sCmI9YipkO2E+Yy5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BGYWRpbmcoKSwwPT09ZCYmKHRoaXMuZW5hYmxlZD0hMSkpfX1yZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PWJ9LF91cGRhdGVUaW1lU2NhbGU6ZnVuY3Rpb24oYSl7dmFyIGI9MDtpZighdGhpcy5wYXVzZWQpe3ZhciBiPXRoaXMudGltZVNjYWxlLGM9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7aWYobnVsbCE9PWMpe3ZhciBkPWMuZXZhbHVhdGUoYSlbMF0sYj1iKmQ7YT5jLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSwwPT09Yj90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1iKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1ifSxfdXBkYXRlVGltZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnRpbWUrYTtpZigwPT09YSlyZXR1cm4gYjt2YXIgYz10aGlzLl9jbGlwLmR1cmF0aW9uLGQ9dGhpcy5sb29wLGU9dGhpcy5fbG9vcENvdW50O2lmKDIyMDA9PT0KZClhOntpZigtMT09PWUmJih0aGlzLl9sb29wQ291bnQ9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLCEwLCExKSksYj49YyliPWM7ZWxzZSBpZigwPmIpYj0wO2Vsc2UgYnJlYWsgYTt0aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMTt0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOjA+YT8tMToxfSl9ZWxzZXtkPTIyMDI9PT1kOy0xPT09ZSYmKDA8PWE/KGU9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLDA9PT10aGlzLnJlcGV0aXRpb25zLGQpKTp0aGlzLl9zZXRFbmRpbmdzKDA9PT10aGlzLnJlcGV0aXRpb25zLCEwLGQpKTtpZihiPj1jfHwwPmIpe3ZhciBmPU1hdGguZmxvb3IoYi9jKSxiPWItYypmLGU9ZStNYXRoLmFicyhmKSxnPXRoaXMucmVwZXRpdGlvbnMtZTswPmc/KHRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLGI9MDxhPwpjOjAsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjowPGE/MTotMX0pKTooMD09PWc/KGE9MD5hLHRoaXMuX3NldEVuZGluZ3MoYSwhYSxkKSk6dGhpcy5fc2V0RW5kaW5ncyghMSwhMSxkKSx0aGlzLl9sb29wQ291bnQ9ZSx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJsb29wIixhY3Rpb246dGhpcyxsb29wRGVsdGE6Zn0pKX1pZihkJiYxPT09KGUmMSkpcmV0dXJuIHRoaXMudGltZT1iLGMtYn1yZXR1cm4gdGhpcy50aW1lPWJ9LF9zZXRFbmRpbmdzOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzO2M/KGQuZW5kaW5nU3RhcnQ9MjQwMSxkLmVuZGluZ0VuZD0yNDAxKTooZC5lbmRpbmdTdGFydD1hP3RoaXMuemVyb1Nsb3BlQXRTdGFydD8yNDAxOjI0MDA6MjQwMixkLmVuZGluZ0VuZD1iP3RoaXMuemVyb1Nsb3BlQXRFbmQ/MjQwMToyNDAwOjI0MDIpfSxfc2NoZWR1bGVGYWRpbmc6ZnVuY3Rpb24oYSwKYixjKXt2YXIgZD10aGlzLl9taXhlcixlPWQudGltZSxmPXRoaXMuX3dlaWdodEludGVycG9sYW50O251bGw9PT1mJiYodGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9Zj1kLl9sZW5kQ29udHJvbEludGVycG9sYW50KCkpO2Q9Zi5wYXJhbWV0ZXJQb3NpdGlvbnM7Zj1mLnNhbXBsZVZhbHVlcztkWzBdPWU7ZlswXT1iO2RbMV09ZSthO2ZbMV09YztyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKFllLnByb3RvdHlwZSxzYS5wcm90b3R5cGUse19iaW5kQWN0aW9uOmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5fbG9jYWxSb290fHx0aGlzLl9yb290LGQ9YS5fY2xpcC50cmFja3MsZT1kLmxlbmd0aCxmPWEuX3Byb3BlcnR5QmluZGluZ3MsZz1hLl9pbnRlcnBvbGFudHMsaD1jLnV1aWQsaz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsbD1rW2hdO3ZvaWQgMD09PWwmJihsPXt9LGtbaF09bCk7Zm9yKGs9MDtrIT09ZTsrK2spe3ZhciBwPWRba10scT1wLm5hbWUsbj1sW3FdO2lmKHZvaWQgMD09PQpuKXtuPWZba107aWYodm9pZCAwIT09bil7bnVsbD09PW4uX2NhY2hlSW5kZXgmJigrK24ucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKG4saCxxKSk7Y29udGludWV9bj1uZXcgbGUob2EuY3JlYXRlKGMscSxiJiZiLl9wcm9wZXJ0eUJpbmRpbmdzW2tdLmJpbmRpbmcucGFyc2VkUGF0aCkscC5WYWx1ZVR5cGVOYW1lLHAuZ2V0VmFsdWVTaXplKCkpOysrbi5yZWZlcmVuY2VDb3VudDt0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcobixoLHEpfWZba109bjtnW2tdLnJlc3VsdEJ1ZmZlcj1uLmJ1ZmZlcn19LF9hY3RpdmF0ZUFjdGlvbjpmdW5jdGlvbihhKXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24oYSkpe2lmKG51bGw9PT1hLl9jYWNoZUluZGV4KXt2YXIgYj0oYS5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLGM9YS5fY2xpcC51dWlkLGQ9dGhpcy5fYWN0aW9uc0J5Q2xpcFtjXTt0aGlzLl9iaW5kQWN0aW9uKGEsZCYmZC5rbm93bkFjdGlvbnNbMF0pO3RoaXMuX2FkZEluYWN0aXZlQWN0aW9uKGEsCmMsYil9Yj1hLl9wcm9wZXJ0eUJpbmRpbmdzO2M9MDtmb3IoZD1iLmxlbmd0aDtjIT09ZDsrK2Mpe3ZhciBlPWJbY107MD09PWUudXNlQ291bnQrKyYmKHRoaXMuX2xlbmRCaW5kaW5nKGUpLGUuc2F2ZU9yaWdpbmFsU3RhdGUoKSl9dGhpcy5fbGVuZEFjdGlvbihhKX19LF9kZWFjdGl2YXRlQWN0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2lzQWN0aXZlQWN0aW9uKGEpKXtmb3IodmFyIGI9YS5fcHJvcGVydHlCaW5kaW5ncyxjPTAsZD1iLmxlbmd0aDtjIT09ZDsrK2Mpe3ZhciBlPWJbY107MD09PS0tZS51c2VDb3VudCYmKGUucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl90YWtlQmFja0JpbmRpbmcoZSkpfXRoaXMuX3Rha2VCYWNrQWN0aW9uKGEpfX0sX2luaXRNZW1vcnlNYW5hZ2VyOmZ1bmN0aW9uKCl7dGhpcy5fYWN0aW9ucz1bXTt0aGlzLl9uQWN0aXZlQWN0aW9ucz0wO3RoaXMuX2FjdGlvbnNCeUNsaXA9e307dGhpcy5fYmluZGluZ3M9W107dGhpcy5fbkFjdGl2ZUJpbmRpbmdzPQowO3RoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fTt0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdO3RoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7dmFyIGE9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gYS5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiBhLl9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gYS5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gYS5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIGEuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gYS5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19LF9pc0FjdGl2ZUFjdGlvbjpmdW5jdGlvbihhKXthPWEuX2NhY2hlSW5kZXg7cmV0dXJuIG51bGwhPT1hJiZhPHRoaXMuX25BY3RpdmVBY3Rpb25zfSwKX2FkZEluYWN0aXZlQWN0aW9uOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLl9hY3Rpb25zLGU9dGhpcy5fYWN0aW9uc0J5Q2xpcCxmPWVbYl07dm9pZCAwPT09Zj8oZj17a25vd25BY3Rpb25zOlthXSxhY3Rpb25CeVJvb3Q6e319LGEuX2J5Q2xpcENhY2hlSW5kZXg9MCxlW2JdPWYpOihiPWYua25vd25BY3Rpb25zLGEuX2J5Q2xpcENhY2hlSW5kZXg9Yi5sZW5ndGgsYi5wdXNoKGEpKTthLl9jYWNoZUluZGV4PWQubGVuZ3RoO2QucHVzaChhKTtmLmFjdGlvbkJ5Um9vdFtjXT1hfSxfcmVtb3ZlSW5hY3RpdmVBY3Rpb246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fYWN0aW9ucyxjPWJbYi5sZW5ndGgtMV0sZD1hLl9jYWNoZUluZGV4O2MuX2NhY2hlSW5kZXg9ZDtiW2RdPWM7Yi5wb3AoKTthLl9jYWNoZUluZGV4PW51bGw7dmFyIGI9YS5fY2xpcC51dWlkLGM9dGhpcy5fYWN0aW9uc0J5Q2xpcCxkPWNbYl0sZT1kLmtub3duQWN0aW9ucyxmPWVbZS5sZW5ndGgtMV0sZz1hLl9ieUNsaXBDYWNoZUluZGV4OwpmLl9ieUNsaXBDYWNoZUluZGV4PWc7ZVtnXT1mO2UucG9wKCk7YS5fYnlDbGlwQ2FjaGVJbmRleD1udWxsO2RlbGV0ZSBkLmFjdGlvbkJ5Um9vdFsoYS5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkXTswPT09ZS5sZW5ndGgmJmRlbGV0ZSBjW2JdO3RoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24oYSl9LF9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uOmZ1bmN0aW9uKGEpe2E9YS5fcHJvcGVydHlCaW5kaW5ncztmb3IodmFyIGI9MCxjPWEubGVuZ3RoO2IhPT1jOysrYil7dmFyIGQ9YVtiXTswPT09LS1kLnJlZmVyZW5jZUNvdW50JiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcoZCl9fSxfbGVuZEFjdGlvbjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLl9hY3Rpb25zLGM9YS5fY2FjaGVJbmRleCxkPXRoaXMuX25BY3RpdmVBY3Rpb25zKyssZT1iW2RdO2EuX2NhY2hlSW5kZXg9ZDtiW2RdPWE7ZS5fY2FjaGVJbmRleD1jO2JbY109ZX0sX3Rha2VCYWNrQWN0aW9uOmZ1bmN0aW9uKGEpe3ZhciBiPQp0aGlzLl9hY3Rpb25zLGM9YS5fY2FjaGVJbmRleCxkPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMsZT1iW2RdO2EuX2NhY2hlSW5kZXg9ZDtiW2RdPWE7ZS5fY2FjaGVJbmRleD1jO2JbY109ZX0sX2FkZEluYWN0aXZlQmluZGluZzpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLGU9ZFtiXSxmPXRoaXMuX2JpbmRpbmdzO3ZvaWQgMD09PWUmJihlPXt9LGRbYl09ZSk7ZVtjXT1hO2EuX2NhY2hlSW5kZXg9Zi5sZW5ndGg7Zi5wdXNoKGEpfSxfcmVtb3ZlSW5hY3RpdmVCaW5kaW5nOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2JpbmRpbmdzLGM9YS5iaW5kaW5nLGQ9Yy5yb290Tm9kZS51dWlkLGM9Yy5wYXRoLGU9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLGY9ZVtkXSxnPWJbYi5sZW5ndGgtMV07YT1hLl9jYWNoZUluZGV4O2cuX2NhY2hlSW5kZXg9YTtiW2FdPWc7Yi5wb3AoKTtkZWxldGUgZltjXTthOntmb3IodmFyIGggaW4gZilicmVhayBhOwpkZWxldGUgZVtkXX19LF9sZW5kQmluZGluZzpmdW5jdGlvbihhKXt2YXIgYj10aGlzLl9iaW5kaW5ncyxjPWEuX2NhY2hlSW5kZXgsZD10aGlzLl9uQWN0aXZlQmluZGluZ3MrKyxlPWJbZF07YS5fY2FjaGVJbmRleD1kO2JbZF09YTtlLl9jYWNoZUluZGV4PWM7YltjXT1lfSxfdGFrZUJhY2tCaW5kaW5nOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2JpbmRpbmdzLGM9YS5fY2FjaGVJbmRleCxkPS0tdGhpcy5fbkFjdGl2ZUJpbmRpbmdzLGU9YltkXTthLl9jYWNoZUluZGV4PWQ7YltkXT1hO2UuX2NhY2hlSW5kZXg9YztiW2NdPWV9LF9sZW5kQ29udHJvbEludGVycG9sYW50OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxiPXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzKyssYz1hW2JdO3ZvaWQgMD09PWMmJihjPW5ldyBXYyhuZXcgRmxvYXQzMkFycmF5KDIpLG5ldyBGbG9hdDMyQXJyYXkoMiksMSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyKSwKYy5fX2NhY2hlSW5kZXg9YixhW2JdPWMpO3JldHVybiBjfSxfdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxjPWEuX19jYWNoZUluZGV4LGQ9LS10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cyxlPWJbZF07YS5fX2NhY2hlSW5kZXg9ZDtiW2RdPWE7ZS5fX2NhY2hlSW5kZXg9YztiW2NdPWV9LF9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyOm5ldyBGbG9hdDMyQXJyYXkoMSksY2xpcEFjdGlvbjpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fHRoaXMuX3Jvb3QsZD1jLnV1aWQsZT0ic3RyaW5nIj09PXR5cGVvZiBhP0JhLmZpbmRCeU5hbWUoYyxhKTphLGM9bnVsbCE9PWU/ZS51dWlkOmEsZj10aGlzLl9hY3Rpb25zQnlDbGlwW2NdLGc9bnVsbDtpZih2b2lkIDAhPT1mKXtnPWYuYWN0aW9uQnlSb290W2RdO2lmKHZvaWQgMCE9PWcpcmV0dXJuIGc7Zz1mLmtub3duQWN0aW9uc1swXTtudWxsPT09CmUmJihlPWcuX2NsaXApfWlmKG51bGw9PT1lKXJldHVybiBudWxsO2U9bmV3IFhlKHRoaXMsZSxiKTt0aGlzLl9iaW5kQWN0aW9uKGUsZyk7dGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24oZSxjLGQpO3JldHVybiBlfSxleGlzdGluZ0FjdGlvbjpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fHRoaXMuX3Jvb3QsZD1jLnV1aWQsYz0ic3RyaW5nIj09PXR5cGVvZiBhP0JhLmZpbmRCeU5hbWUoYyxhKTphLGM9dGhpcy5fYWN0aW9uc0J5Q2xpcFtjP2MudXVpZDphXTtyZXR1cm4gdm9pZCAwIT09Yz9jLmFjdGlvbkJ5Um9vdFtkXXx8bnVsbDpudWxsfSxzdG9wQWxsQWN0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuX2FjdGlvbnMsYj10aGlzLl9uQWN0aXZlQWN0aW9ucyxjPXRoaXMuX2JpbmRpbmdzLGQ9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzLGU9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzPXRoaXMuX25BY3RpdmVBY3Rpb25zPTA7ZSE9PWI7KytlKWFbZV0ucmVzZXQoKTtmb3IoZT0wO2UhPT1kOysrZSljW2VdLnVzZUNvdW50PQowO3JldHVybiB0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oYSl7YSo9dGhpcy50aW1lU2NhbGU7Zm9yKHZhciBiPXRoaXMuX2FjdGlvbnMsYz10aGlzLl9uQWN0aXZlQWN0aW9ucyxkPXRoaXMudGltZSs9YSxlPU1hdGguc2lnbihhKSxmPXRoaXMuX2FjY3VJbmRleF49MSxnPTA7ZyE9PWM7KytnKWJbZ10uX3VwZGF0ZShkLGEsZSxmKTthPXRoaXMuX2JpbmRpbmdzO2I9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihnPTA7ZyE9PWI7KytnKWFbZ10uYXBwbHkoZik7cmV0dXJuIHRoaXN9LGdldFJvb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sdW5jYWNoZUNsaXA6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fYWN0aW9uczthPWEudXVpZDt2YXIgYz10aGlzLl9hY3Rpb25zQnlDbGlwLGQ9Y1thXTtpZih2b2lkIDAhPT1kKXtmb3IodmFyIGQ9ZC5rbm93bkFjdGlvbnMsZT0wLGY9ZC5sZW5ndGg7ZSE9PWY7KytlKXt2YXIgZz1kW2VdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oZyk7dmFyIGg9CmcuX2NhY2hlSW5kZXgsaz1iW2IubGVuZ3RoLTFdO2cuX2NhY2hlSW5kZXg9bnVsbDtnLl9ieUNsaXBDYWNoZUluZGV4PW51bGw7ay5fY2FjaGVJbmRleD1oO2JbaF09aztiLnBvcCgpO3RoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24oZyl9ZGVsZXRlIGNbYV19fSx1bmNhY2hlUm9vdDpmdW5jdGlvbihhKXthPWEudXVpZDt2YXIgYj10aGlzLl9hY3Rpb25zQnlDbGlwLGM7Zm9yKGMgaW4gYil7dmFyIGQ9YltjXS5hY3Rpb25CeVJvb3RbYV07dm9pZCAwIT09ZCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oZCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oZCkpfWM9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lW2FdO2lmKHZvaWQgMCE9PWMpZm9yKHZhciBlIGluIGMpYT1jW2VdLGEucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcoYSl9LHVuY2FjaGVBY3Rpb246ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmV4aXN0aW5nQWN0aW9uKGEsCmIpO251bGwhPT1jJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihjKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihjKSl9fSk7SmQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKZCh2b2lkIDA9PT10aGlzLnZhbHVlLmNsb25lP3RoaXMudmFsdWU6dGhpcy52YWx1ZS5jbG9uZSgpKX07bWUucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOm1lLGlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk6ITAsYWRkR3JvdXA6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OmEsY291bnQ6YixtYXRlcmlhbEluZGV4OmN9KX0sY29weTpmdW5jdGlvbihhKXt2YXIgYj1hLmluZGV4O251bGwhPT1iJiZ0aGlzLnNldEluZGV4KGIuY2xvbmUoKSk7dmFyIGI9YS5hdHRyaWJ1dGVzLGM7Zm9yKGMgaW4gYil0aGlzLmFkZEF0dHJpYnV0ZShjLGJbY10uY2xvbmUoKSk7YT1hLmdyb3VwcztjPTA7Zm9yKGI9CmEubGVuZ3RoO2M8YjtjKyspe3ZhciBkPWFbY107dGhpcy5hZGRHcm91cChkLnN0YXJ0LGQuY291bnQsZC5tYXRlcmlhbEluZGV4KX1yZXR1cm4gdGhpc319KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuZS5wcm90b3R5cGUse2NvdW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmNvdW50fX0sYXJyYXk6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuYXJyYXl9fX0pO09iamVjdC5hc3NpZ24obmUucHJvdG90eXBlLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLHNldFg6ZnVuY3Rpb24oYSxiKXt0aGlzLmRhdGEuYXJyYXlbYSp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1iO3JldHVybiB0aGlzfSxzZXRZOmZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhLmFycmF5W2EqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXT1iO3JldHVybiB0aGlzfSxzZXRaOmZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhLmFycmF5W2EqdGhpcy5kYXRhLnN0cmlkZSsKdGhpcy5vZmZzZXQrMl09YjtyZXR1cm4gdGhpc30sc2V0VzpmdW5jdGlvbihhLGIpe3RoaXMuZGF0YS5hcnJheVthKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM109YjtyZXR1cm4gdGhpc30sZ2V0WDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W2EqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19LGdldFk6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVthKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV19LGdldFo6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVthKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl19LGdldFc6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVthKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119LHNldFhZOmZ1bmN0aW9uKGEsYixjKXthPWEqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDt0aGlzLmRhdGEuYXJyYXlbYSswXT1iO3RoaXMuZGF0YS5hcnJheVthKwoxXT1jO3JldHVybiB0aGlzfSxzZXRYWVo6ZnVuY3Rpb24oYSxiLGMsZCl7YT1hKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7dGhpcy5kYXRhLmFycmF5W2ErMF09Yjt0aGlzLmRhdGEuYXJyYXlbYSsxXT1jO3RoaXMuZGF0YS5hcnJheVthKzJdPWQ7cmV0dXJuIHRoaXN9LHNldFhZWlc6ZnVuY3Rpb24oYSxiLGMsZCxlKXthPWEqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDt0aGlzLmRhdGEuYXJyYXlbYSswXT1iO3RoaXMuZGF0YS5hcnJheVthKzFdPWM7dGhpcy5kYXRhLmFycmF5W2ErMl09ZDt0aGlzLmRhdGEuYXJyYXlbYSszXT1lO3JldHVybiB0aGlzfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrYy5wcm90b3R5cGUsIm5lZWRzVXBkYXRlIix7c2V0OmZ1bmN0aW9uKGEpeyEwPT09YSYmdGhpcy52ZXJzaW9uKyt9fSk7T2JqZWN0LmFzc2lnbihrYy5wcm90b3R5cGUse2lzSW50ZXJsZWF2ZWRCdWZmZXI6ITAsc2V0QXJyYXk6ZnVuY3Rpb24oYSl7aWYoQXJyYXkuaXNBcnJheShhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpOwp0aGlzLmNvdW50PXZvaWQgMCE9PWE/YS5sZW5ndGgvdGhpcy5zdHJpZGU6MDt0aGlzLmFycmF5PWF9LHNldER5bmFtaWM6ZnVuY3Rpb24oYSl7dGhpcy5keW5hbWljPWE7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5hcnJheT1uZXcgYS5hcnJheS5jb25zdHJ1Y3RvcihhLmFycmF5KTt0aGlzLmNvdW50PWEuY291bnQ7dGhpcy5zdHJpZGU9YS5zdHJpZGU7dGhpcy5keW5hbWljPWEuZHluYW1pYztyZXR1cm4gdGhpc30sY29weUF0OmZ1bmN0aW9uKGEsYixjKXthKj10aGlzLnN0cmlkZTtjKj1iLnN0cmlkZTtmb3IodmFyIGQ9MCxlPXRoaXMuc3RyaWRlO2Q8ZTtkKyspdGhpcy5hcnJheVthK2RdPWIuYXJyYXlbYytkXTtyZXR1cm4gdGhpc30sc2V0OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9MCk7dGhpcy5hcnJheS5zZXQoYSxiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LG9uVXBsb2FkOmZ1bmN0aW9uKGEpe3RoaXMub25VcGxvYWRDYWxsYmFjaz0KYTtyZXR1cm4gdGhpc319KTtvZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGtjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOm9lLGlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXI6ITAsY29weTpmdW5jdGlvbihhKXtrYy5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5tZXNoUGVyQXR0cmlidXRlPWEubWVzaFBlckF0dHJpYnV0ZTtyZXR1cm4gdGhpc319KTtwZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEwucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6cGUsaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6ITAsY29weTpmdW5jdGlvbihhKXtMLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9YS5tZXNoUGVyQXR0cmlidXRlO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oWmUucHJvdG90eXBlLHtsaW5lUHJlY2lzaW9uOjEsc2V0OmZ1bmN0aW9uKGEsYil7dGhpcy5yYXkuc2V0KGEsCmIpfSxzZXRGcm9tQ2FtZXJhOmZ1bmN0aW9uKGEsYil7YiYmYi5pc1BlcnNwZWN0aXZlQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGIubWF0cml4V29ybGQpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQoYS54LGEueSwuNSkudW5wcm9qZWN0KGIpLnN1Yih0aGlzLnJheS5vcmlnaW4pLm5vcm1hbGl6ZSgpKTpiJiZiLmlzT3J0aG9ncmFwaGljQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0KGEueCxhLnksKGIubmVhcitiLmZhcikvKGIubmVhci1iLmZhcikpLnVucHJvamVjdChiKSx0aGlzLnJheS5kaXJlY3Rpb24uc2V0KDAsMCwtMSkudHJhbnNmb3JtRGlyZWN0aW9uKGIubWF0cml4V29ybGQpKTpjb25zb2xlLmVycm9yKCJUSFJFRS5SYXljYXN0ZXI6IFVuc3VwcG9ydGVkIGNhbWVyYSB0eXBlLiIpfSxpbnRlcnNlY3RPYmplY3Q6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtxZShhLHRoaXMsYyxiKTtjLnNvcnQoJGUpO3JldHVybiBjfSxpbnRlcnNlY3RPYmplY3RzOmZ1bmN0aW9uKGEsCmIpe3ZhciBjPVtdO2lmKCExPT09QXJyYXkuaXNBcnJheShhKSlyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0czogb2JqZWN0cyBpcyBub3QgYW4gQXJyYXkuIiksYztmb3IodmFyIGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspcWUoYVtkXSx0aGlzLGMsYik7Yy5zb3J0KCRlKTtyZXR1cm4gY319KTtPYmplY3QuYXNzaWduKGFmLnByb3RvdHlwZSx7c3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLm9sZFRpbWU9dGhpcy5zdGFydFRpbWU9KCJ1bmRlZmluZWQiPT09dHlwZW9mIHBlcmZvcm1hbmNlP0RhdGU6cGVyZm9ybWFuY2UpLm5vdygpO3RoaXMuZWxhcHNlZFRpbWU9MDt0aGlzLnJ1bm5pbmc9ITB9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmdldEVsYXBzZWRUaW1lKCk7dGhpcy5ydW5uaW5nPSExfSxnZXRFbGFwc2VkVGltZTpmdW5jdGlvbigpe3RoaXMuZ2V0RGVsdGEoKTtyZXR1cm4gdGhpcy5lbGFwc2VkVGltZX0sZ2V0RGVsdGE6ZnVuY3Rpb24oKXt2YXIgYT0KMDtpZih0aGlzLmF1dG9TdGFydCYmIXRoaXMucnVubmluZylyZXR1cm4gdGhpcy5zdGFydCgpLDA7aWYodGhpcy5ydW5uaW5nKXt2YXIgYj0oInVuZGVmaW5lZCI9PT10eXBlb2YgcGVyZm9ybWFuY2U/RGF0ZTpwZXJmb3JtYW5jZSkubm93KCksYT0oYi10aGlzLm9sZFRpbWUpLzFFMzt0aGlzLm9sZFRpbWU9Yjt0aGlzLmVsYXBzZWRUaW1lKz1hfXJldHVybiBhfX0pO09iamVjdC5hc3NpZ24oYmYucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3RoaXMucmFkaXVzPWE7dGhpcy5waGk9Yjt0aGlzLnRoZXRhPWM7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMucmFkaXVzPWEucmFkaXVzO3RoaXMucGhpPWEucGhpO3RoaXMudGhldGE9YS50aGV0YTtyZXR1cm4gdGhpc30sbWFrZVNhZmU6ZnVuY3Rpb24oKXt0aGlzLnBoaT1NYXRoLm1heCgxRS02LE1hdGgubWluKE1hdGguUEktCjFFLTYsdGhpcy5waGkpKTtyZXR1cm4gdGhpc30sc2V0RnJvbVZlY3RvcjM6ZnVuY3Rpb24oYSl7dGhpcy5yYWRpdXM9YS5sZW5ndGgoKTswPT09dGhpcy5yYWRpdXM/dGhpcy5waGk9dGhpcy50aGV0YT0wOih0aGlzLnRoZXRhPU1hdGguYXRhbjIoYS54LGEueiksdGhpcy5waGk9TWF0aC5hY29zKFkuY2xhbXAoYS55L3RoaXMucmFkaXVzLC0xLDEpKSk7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihjZi5wcm90b3R5cGUse3NldDpmdW5jdGlvbihhLGIsYyl7dGhpcy5yYWRpdXM9YTt0aGlzLnRoZXRhPWI7dGhpcy55PWM7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMucmFkaXVzPWEucmFkaXVzO3RoaXMudGhldGE9YS50aGV0YTt0aGlzLnk9YS55O3JldHVybiB0aGlzfSxzZXRGcm9tVmVjdG9yMzpmdW5jdGlvbihhKXt0aGlzLnJhZGl1cz1NYXRoLnNxcnQoYS54KgphLngrYS56KmEueik7dGhpcy50aGV0YT1NYXRoLmF0YW4yKGEueCxhLnopO3RoaXMueT1hLnk7cmV0dXJuIHRoaXN9fSk7cmEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQ2EucHJvdG90eXBlKTtyYS5wcm90b3R5cGUuY29uc3RydWN0b3I9cmE7cmEucHJvdG90eXBlLmNyZWF0ZUFuaW1hdGlvbj1mdW5jdGlvbihhLGIsYyxkKXtiPXtzdGFydDpiLGVuZDpjLGxlbmd0aDpjLWIrMSxmcHM6ZCxkdXJhdGlvbjooYy1iKS9kLGxhc3RGcmFtZTowLGN1cnJlbnRGcmFtZTowLGFjdGl2ZTohMSx0aW1lOjAsZGlyZWN0aW9uOjEsd2VpZ2h0OjEsZGlyZWN0aW9uQmFja3dhcmRzOiExLG1pcnJvcmVkTG9vcDohMX07dGhpcy5hbmltYXRpb25zTWFwW2FdPWI7dGhpcy5hbmltYXRpb25zTGlzdC5wdXNoKGIpfTtyYS5wcm90b3R5cGUuYXV0b0NyZWF0ZUFuaW1hdGlvbnM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPS8oW2Etel0rKV8/KFxkKykvaSxjLGQ9e30sZT10aGlzLmdlb21ldHJ5LGY9MCxnPWUubW9ycGhUYXJnZXRzLmxlbmd0aDtmPApnO2YrKyl7dmFyIGg9ZS5tb3JwaFRhcmdldHNbZl0ubmFtZS5tYXRjaChiKTtpZihoJiYxPGgubGVuZ3RoKXt2YXIgaz1oWzFdO2Rba118fChkW2tdPXtzdGFydDpJbmZpbml0eSxlbmQ6LUluZmluaXR5fSk7aD1kW2tdO2Y8aC5zdGFydCYmKGguc3RhcnQ9Zik7Zj5oLmVuZCYmKGguZW5kPWYpO2N8fChjPWspfX1mb3IoayBpbiBkKWg9ZFtrXSx0aGlzLmNyZWF0ZUFuaW1hdGlvbihrLGguc3RhcnQsaC5lbmQsYSk7dGhpcy5maXJzdEFuaW1hdGlvbj1jfTtyYS5wcm90b3R5cGUuc2V0QW5pbWF0aW9uRGlyZWN0aW9uRm9yd2FyZD1mdW5jdGlvbihhKXtpZihhPXRoaXMuYW5pbWF0aW9uc01hcFthXSlhLmRpcmVjdGlvbj0xLGEuZGlyZWN0aW9uQmFja3dhcmRzPSExfTtyYS5wcm90b3R5cGUuc2V0QW5pbWF0aW9uRGlyZWN0aW9uQmFja3dhcmQ9ZnVuY3Rpb24oYSl7aWYoYT10aGlzLmFuaW1hdGlvbnNNYXBbYV0pYS5kaXJlY3Rpb249LTEsYS5kaXJlY3Rpb25CYWNrd2FyZHM9ITB9O3JhLnByb3RvdHlwZS5zZXRBbmltYXRpb25GUFM9CmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5hbmltYXRpb25zTWFwW2FdO2MmJihjLmZwcz1iLGMuZHVyYXRpb249KGMuZW5kLWMuc3RhcnQpL2MuZnBzKX07cmEucHJvdG90eXBlLnNldEFuaW1hdGlvbkR1cmF0aW9uPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5hbmltYXRpb25zTWFwW2FdO2MmJihjLmR1cmF0aW9uPWIsYy5mcHM9KGMuZW5kLWMuc3RhcnQpL2MuZHVyYXRpb24pfTtyYS5wcm90b3R5cGUuc2V0QW5pbWF0aW9uV2VpZ2h0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5hbmltYXRpb25zTWFwW2FdO2MmJihjLndlaWdodD1iKX07cmEucHJvdG90eXBlLnNldEFuaW1hdGlvblRpbWU9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmFuaW1hdGlvbnNNYXBbYV07YyYmKGMudGltZT1iKX07cmEucHJvdG90eXBlLmdldEFuaW1hdGlvblRpbWU9ZnVuY3Rpb24oYSl7dmFyIGI9MDtpZihhPXRoaXMuYW5pbWF0aW9uc01hcFthXSliPWEudGltZTtyZXR1cm4gYn07cmEucHJvdG90eXBlLmdldEFuaW1hdGlvbkR1cmF0aW9uPQpmdW5jdGlvbihhKXt2YXIgYj0tMTtpZihhPXRoaXMuYW5pbWF0aW9uc01hcFthXSliPWEuZHVyYXRpb247cmV0dXJuIGJ9O3JhLnByb3RvdHlwZS5wbGF5QW5pbWF0aW9uPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYW5pbWF0aW9uc01hcFthXTtiPyhiLnRpbWU9MCxiLmFjdGl2ZT0hMCk6Y29uc29sZS53YXJuKCJUSFJFRS5Nb3JwaEJsZW5kTWVzaDogYW5pbWF0aW9uWyIrYSsiXSB1bmRlZmluZWQgaW4gLnBsYXlBbmltYXRpb24oKSIpfTtyYS5wcm90b3R5cGUuc3RvcEFuaW1hdGlvbj1mdW5jdGlvbihhKXtpZihhPXRoaXMuYW5pbWF0aW9uc01hcFthXSlhLmFjdGl2ZT0hMX07cmEucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPXRoaXMuYW5pbWF0aW9uc0xpc3QubGVuZ3RoO2I8YztiKyspe3ZhciBkPXRoaXMuYW5pbWF0aW9uc0xpc3RbYl07aWYoZC5hY3RpdmUpe3ZhciBlPWQuZHVyYXRpb24vZC5sZW5ndGg7ZC50aW1lKz1kLmRpcmVjdGlvbiphO2lmKGQubWlycm9yZWRMb29wKXtpZihkLnRpbWU+CmQuZHVyYXRpb258fDA+ZC50aW1lKWQuZGlyZWN0aW9uKj0tMSxkLnRpbWU+ZC5kdXJhdGlvbiYmKGQudGltZT1kLmR1cmF0aW9uLGQuZGlyZWN0aW9uQmFja3dhcmRzPSEwKSwwPmQudGltZSYmKGQudGltZT0wLGQuZGlyZWN0aW9uQmFja3dhcmRzPSExKX1lbHNlIGQudGltZSU9ZC5kdXJhdGlvbiwwPmQudGltZSYmKGQudGltZSs9ZC5kdXJhdGlvbik7dmFyIGY9ZC5zdGFydCtZLmNsYW1wKE1hdGguZmxvb3IoZC50aW1lL2UpLDAsZC5sZW5ndGgtMSksZz1kLndlaWdodDtmIT09ZC5jdXJyZW50RnJhbWUmJih0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1tkLmxhc3RGcmFtZV09MCx0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1tkLmN1cnJlbnRGcmFtZV09MSpnLHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzW2ZdPTAsZC5sYXN0RnJhbWU9ZC5jdXJyZW50RnJhbWUsZC5jdXJyZW50RnJhbWU9Zik7ZT1kLnRpbWUlZS9lO2QuZGlyZWN0aW9uQmFja3dhcmRzJiYoZT0xLWUpO2QuY3VycmVudEZyYW1lIT09CmQubGFzdEZyYW1lPyh0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1tkLmN1cnJlbnRGcmFtZV09ZSpnLHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzW2QubGFzdEZyYW1lXT0oMS1lKSpnKTp0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1tkLmN1cnJlbnRGcmFtZV09Z319fTskYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSk7JGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPSRjOyRjLnByb3RvdHlwZS5pc0ltbWVkaWF0ZVJlbmRlck9iamVjdD0hMDthZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkYS5wcm90b3R5cGUpO2FkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hZDthZC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcCxjPW5ldyBLYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD1bImEiLCJiIiwiYyJdO3RoaXMub2JqZWN0LnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtjLmdldE5vcm1hbE1hdHJpeCh0aGlzLm9iamVjdC5tYXRyaXhXb3JsZCk7CnZhciBlPXRoaXMub2JqZWN0Lm1hdHJpeFdvcmxkLGY9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLGc9dGhpcy5vYmplY3QuZ2VvbWV0cnk7aWYoZyYmZy5pc0dlb21ldHJ5KWZvcih2YXIgaD1nLnZlcnRpY2VzLGs9Zy5mYWNlcyxsPWc9MCxwPWsubGVuZ3RoO2w8cDtsKyspZm9yKHZhciBxPWtbbF0sbj0wLHI9cS52ZXJ0ZXhOb3JtYWxzLmxlbmd0aDtuPHI7bisrKXt2YXIgej1xLnZlcnRleE5vcm1hbHNbbl07YS5jb3B5KGhbcVtkW25dXV0pLmFwcGx5TWF0cml4NChlKTtiLmNvcHkoeikuYXBwbHlNYXRyaXgzKGMpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHRoaXMuc2l6ZSkuYWRkKGEpO2Yuc2V0WFlaKGcsYS54LGEueSxhLnopO2crPTE7Zi5zZXRYWVooZyxiLngsYi55LGIueik7Zys9MX1lbHNlIGlmKGcmJmcuaXNCdWZmZXJHZW9tZXRyeSlmb3IoZD1nLmF0dHJpYnV0ZXMucG9zaXRpb24saD1nLmF0dHJpYnV0ZXMubm9ybWFsLG49Zz0wLHI9ZC5jb3VudDtuPApyO24rKylhLnNldChkLmdldFgobiksZC5nZXRZKG4pLGQuZ2V0WihuKSkuYXBwbHlNYXRyaXg0KGUpLGIuc2V0KGguZ2V0WChuKSxoLmdldFkobiksaC5nZXRaKG4pKSxiLmFwcGx5TWF0cml4MyhjKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0aGlzLnNpemUpLmFkZChhKSxmLnNldFhZWihnLGEueCxhLnksYS56KSxnKz0xLGYuc2V0WFlaKGcsYi54LGIueSxiLnopLGcrPTE7Zi5uZWVkc1VwZGF0ZT0hMH19KCk7bGMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpO2xjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1sYztsYy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuY29uZS5nZW9tZXRyeS5kaXNwb3NlKCk7dGhpcy5jb25lLm1hdGVyaWFsLmRpc3Bvc2UoKX07bGMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5saWdodC5kaXN0YW5jZT90aGlzLmxpZ2h0LmRpc3RhbmNlOgoxRTMsZD1jKk1hdGgudGFuKHRoaXMubGlnaHQuYW5nbGUpO3RoaXMuY29uZS5zY2FsZS5zZXQoZCxkLGMpO2Euc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQubWF0cml4V29ybGQpO2Iuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQudGFyZ2V0Lm1hdHJpeFdvcmxkKTt0aGlzLmNvbmUubG9va0F0KGIuc3ViKGEpKTt0aGlzLmNvbmUubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKX19KCk7bWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGEucHJvdG90eXBlKTttYy5wcm90b3R5cGUuY29uc3RydWN0b3I9bWM7bWMucHJvdG90eXBlLmdldEJvbmVMaXN0PWZ1bmN0aW9uKGEpe3ZhciBiPVtdO2EmJmEuaXNCb25lJiZiLnB1c2goYSk7Zm9yKHZhciBjPTA7YzxhLmNoaWxkcmVuLmxlbmd0aDtjKyspYi5wdXNoLmFwcGx5KGIsdGhpcy5nZXRCb25lTGlzdChhLmNoaWxkcmVuW2NdKSk7cmV0dXJuIGJ9O21jLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYT0KbmV3IHAsYj1uZXcgSixjPW5ldyBKO3JldHVybiBmdW5jdGlvbigpe3ZhciBkPXRoaXMuZ2VvbWV0cnksZT1kLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtjLmdldEludmVyc2UodGhpcy5yb290Lm1hdHJpeFdvcmxkKTtmb3IodmFyIGY9MCxnPTA7Zjx0aGlzLmJvbmVzLmxlbmd0aDtmKyspe3ZhciBoPXRoaXMuYm9uZXNbZl07aC5wYXJlbnQmJmgucGFyZW50LmlzQm9uZSYmKGIubXVsdGlwbHlNYXRyaWNlcyhjLGgubWF0cml4V29ybGQpLGEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGIpLGUuc2V0WFlaKGcsYS54LGEueSxhLnopLGIubXVsdGlwbHlNYXRyaWNlcyhjLGgucGFyZW50Lm1hdHJpeFdvcmxkKSxhLnNldEZyb21NYXRyaXhQb3NpdGlvbihiKSxlLnNldFhZWihnKzEsYS54LGEueSxhLnopLGcrPTIpfWQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwfX0oKTtuYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShDYS5wcm90b3R5cGUpO25jLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0KbmM7bmMucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKTt0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX07bmMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3RoaXMubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKX07b2MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpO29jLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1vYztvYy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuY2hpbGRyZW5bMF0uZ2VvbWV0cnkuZGlzcG9zZSgpO3RoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuZGlzcG9zZSgpfTtvYy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jaGlsZHJlblswXTthLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcik7dmFyIGI9LjUqdGhpcy5saWdodC53aWR0aCxjPS41KnRoaXMubGlnaHQuaGVpZ2h0LGE9YS5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLApkPWEuYXJyYXk7ZFswXT1iO2RbMV09LWM7ZFsyXT0wO2RbM109YjtkWzRdPWM7ZFs1XT0wO2RbNl09LWI7ZFs3XT1jO2RbOF09MDtkWzldPS1iO2RbMTBdPS1jO2RbMTFdPTA7ZFsxMl09YjtkWzEzXT0tYztkWzE0XT0wO2EubmVlZHNVcGRhdGU9ITB9O3BjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKTtwYy5wcm90b3R5cGUuY29uc3RydWN0b3I9cGM7cGMucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmNoaWxkcmVuWzBdLmdlb21ldHJ5LmRpc3Bvc2UoKTt0aGlzLmNoaWxkcmVuWzBdLm1hdGVyaWFsLmRpc3Bvc2UoKX07cGMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IEgsYz1uZXcgSDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD10aGlzLmNoaWxkcmVuWzBdLGU9ZC5nZW9tZXRyeS5nZXRBdHRyaWJ1dGUoImNvbG9yIik7Yi5jb3B5KHRoaXMubGlnaHQuY29sb3IpO2MuY29weSh0aGlzLmxpZ2h0Lmdyb3VuZENvbG9yKTsKZm9yKHZhciBmPTAsZz1lLmNvdW50O2Y8ZztmKyspe3ZhciBoPWY8Zy8yP2I6YztlLnNldFhZWihmLGgucixoLmcsaC5iKX1kLmxvb2tBdChhLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKS5uZWdhdGUoKSk7ZS5uZWVkc1VwZGF0ZT0hMH19KCk7YmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGEucHJvdG90eXBlKTtiZC5wcm90b3R5cGUuY29uc3RydWN0b3I9YmQ7S2QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGEucHJvdG90eXBlKTtLZC5wcm90b3R5cGUuY29uc3RydWN0b3I9S2Q7Y2QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGEucHJvdG90eXBlKTtjZC5wcm90b3R5cGUuY29uc3RydWN0b3I9Y2Q7Y2QucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHAsYz1uZXcgS2E7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5vYmplY3QudXBkYXRlTWF0cml4V29ybGQoITApO2MuZ2V0Tm9ybWFsTWF0cml4KHRoaXMub2JqZWN0Lm1hdHJpeFdvcmxkKTsKZm9yKHZhciBkPXRoaXMub2JqZWN0Lm1hdHJpeFdvcmxkLGU9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLGY9dGhpcy5vYmplY3QuZ2VvbWV0cnksZz1mLnZlcnRpY2VzLGY9Zi5mYWNlcyxoPTAsaz0wLGw9Zi5sZW5ndGg7azxsO2srKyl7dmFyIHA9ZltrXSxxPXAubm9ybWFsO2EuY29weShnW3AuYV0pLmFkZChnW3AuYl0pLmFkZChnW3AuY10pLmRpdmlkZVNjYWxhcigzKS5hcHBseU1hdHJpeDQoZCk7Yi5jb3B5KHEpLmFwcGx5TWF0cml4MyhjKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0aGlzLnNpemUpLmFkZChhKTtlLnNldFhZWihoLGEueCxhLnksYS56KTtoKz0xO2Uuc2V0WFlaKGgsYi54LGIueSxiLnopO2grPTF9ZS5uZWVkc1VwZGF0ZT0hMH19KCk7cWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpO3FjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1xYztxYy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuY2hpbGRyZW5bMF0sCmI9dGhpcy5jaGlsZHJlblsxXTthLmdlb21ldHJ5LmRpc3Bvc2UoKTthLm1hdGVyaWFsLmRpc3Bvc2UoKTtiLmdlb21ldHJ5LmRpc3Bvc2UoKTtiLm1hdGVyaWFsLmRpc3Bvc2UoKX07cWMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHAsYz1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oKXthLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKTtiLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCk7Yy5zdWJWZWN0b3JzKGIsYSk7dmFyIGQ9dGhpcy5jaGlsZHJlblswXSxlPXRoaXMuY2hpbGRyZW5bMV07ZC5sb29rQXQoYyk7ZC5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpO2UubG9va0F0KGMpO2Uuc2NhbGUuej1jLmxlbmd0aCgpfX0oKTtkZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkYS5wcm90b3R5cGUpO2RkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1kZDsKZGQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxnLGgsayl7ZC5zZXQoZyxoLGspLnVucHJvamVjdChlKTthPWNbYV07aWYodm9pZCAwIT09YSlmb3IoZz1iLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKSxoPTAsaz1hLmxlbmd0aDtoPGs7aCsrKWcuc2V0WFlaKGFbaF0sZC54LGQueSxkLnopfXZhciBiLGMsZD1uZXcgcCxlPW5ldyBPYTtyZXR1cm4gZnVuY3Rpb24oKXtiPXRoaXMuZ2VvbWV0cnk7Yz10aGlzLnBvaW50TWFwO2UucHJvamVjdGlvbk1hdHJpeC5jb3B5KHRoaXMuY2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO2EoImMiLDAsMCwtMSk7YSgidCIsMCwwLDEpO2EoIm4xIiwtMSwtMSwtMSk7YSgibjIiLDEsLTEsLTEpO2EoIm4zIiwtMSwxLC0xKTthKCJuNCIsMSwxLC0xKTthKCJmMSIsLTEsLTEsMSk7YSgiZjIiLDEsLTEsMSk7YSgiZjMiLC0xLDEsMSk7YSgiZjQiLDEsMSwxKTthKCJ1MSIsLjcsMS4xLC0xKTthKCJ1MiIsLS43LDEuMSwtMSk7YSgidTMiLAowLDIsLTEpO2EoImNmMSIsLTEsMCwxKTthKCJjZjIiLDEsMCwxKTthKCJjZjMiLDAsLTEsMSk7YSgiY2Y0IiwwLDEsMSk7YSgiY24xIiwtMSwwLC0xKTthKCJjbjIiLDEsMCwtMSk7YSgiY24zIiwwLC0xLC0xKTthKCJjbjQiLDAsMSwtMSk7Yi5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIikubmVlZHNVcGRhdGU9ITB9fSgpO0JiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGRhLnByb3RvdHlwZSk7QmIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUJiO0JiLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgVGE7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZvaWQgMCE9PWImJmNvbnNvbGUud2FybigiVEhSRUUuQm94SGVscGVyOiAudXBkYXRlKCkgaGFzIG5vIGxvbmdlciBhcmd1bWVudHMuIik7dm9pZCAwIT09dGhpcy5vYmplY3QmJmEuc2V0RnJvbU9iamVjdCh0aGlzLm9iamVjdCk7aWYoIWEuaXNFbXB0eSgpKXtiPWEubWluO3ZhciBjPWEubWF4LGQ9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLAplPWQuYXJyYXk7ZVswXT1jLng7ZVsxXT1jLnk7ZVsyXT1jLno7ZVszXT1iLng7ZVs0XT1jLnk7ZVs1XT1jLno7ZVs2XT1iLng7ZVs3XT1iLnk7ZVs4XT1jLno7ZVs5XT1jLng7ZVsxMF09Yi55O2VbMTFdPWMuejtlWzEyXT1jLng7ZVsxM109Yy55O2VbMTRdPWIuejtlWzE1XT1iLng7ZVsxNl09Yy55O2VbMTddPWIuejtlWzE4XT1iLng7ZVsxOV09Yi55O2VbMjBdPWIuejtlWzIxXT1jLng7ZVsyMl09Yi55O2VbMjNdPWIuejtkLm5lZWRzVXBkYXRlPSEwO3RoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9fX0oKTtCYi5wcm90b3R5cGUuc2V0RnJvbU9iamVjdD1mdW5jdGlvbihhKXt0aGlzLm9iamVjdD1hO3RoaXMudXBkYXRlKCk7cmV0dXJuIHRoaXN9O3ZhciBMZCxyZTtDYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSk7Q2IucHJvdG90eXBlLmNvbnN0cnVjdG9yPUNiO0NiLnByb3RvdHlwZS5zZXREaXJlY3Rpb249ZnVuY3Rpb24oKXt2YXIgYT0KbmV3IHAsYjtyZXR1cm4gZnVuY3Rpb24oYyl7Ljk5OTk5PGMueT90aGlzLnF1YXRlcm5pb24uc2V0KDAsMCwwLDEpOi0uOTk5OTk+Yy55P3RoaXMucXVhdGVybmlvbi5zZXQoMSwwLDAsMCk6KGEuc2V0KGMueiwwLC1jLngpLm5vcm1hbGl6ZSgpLGI9TWF0aC5hY29zKGMueSksdGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoYSxiKSl9fSgpO0NiLnByb3RvdHlwZS5zZXRMZW5ndGg9ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMD09PWImJihiPS4yKmEpO3ZvaWQgMD09PWMmJihjPS4yKmIpO3RoaXMubGluZS5zY2FsZS5zZXQoMSxNYXRoLm1heCgwLGEtYiksMSk7dGhpcy5saW5lLnVwZGF0ZU1hdHJpeCgpO3RoaXMuY29uZS5zY2FsZS5zZXQoYyxiLGMpO3RoaXMuY29uZS5wb3NpdGlvbi55PWE7dGhpcy5jb25lLnVwZGF0ZU1hdHJpeCgpfTtDYi5wcm90b3R5cGUuc2V0Q29sb3I9ZnVuY3Rpb24oYSl7dGhpcy5saW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkoYSk7dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLmNvcHkoYSl9OwpNZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkYS5wcm90b3R5cGUpO01kLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1NZDt2YXIgUGQ9bmV3IHAsdmU9bmV3IHNlLHdlPW5ldyBzZSx4ZT1uZXcgc2U7SmEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTtKYS5wcm90b3R5cGUuY29uc3RydWN0b3I9SmE7SmEucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucG9pbnRzLGM9Yi5sZW5ndGg7Mj5jJiZjb25zb2xlLmxvZygiZHVoLCB5b3UgbmVlZCBhdCBsZWFzdCAyIHBvaW50cyIpO2EqPWMtKHRoaXMuY2xvc2VkPzA6MSk7dmFyIGQ9TWF0aC5mbG9vcihhKTthLT1kO3RoaXMuY2xvc2VkP2QrPTA8ZD8wOihNYXRoLmZsb29yKE1hdGguYWJzKGQpL2IubGVuZ3RoKSsxKSpiLmxlbmd0aDowPT09YSYmZD09PWMtMSYmKGQ9Yy0yLGE9MSk7dmFyIGUsZixnO3RoaXMuY2xvc2VkfHwwPGQ/ZT1iWyhkLTEpJWNdOihQZC5zdWJWZWN0b3JzKGJbMF0sYlsxXSkuYWRkKGJbMF0pLAplPVBkKTtmPWJbZCVjXTtnPWJbKGQrMSklY107dGhpcy5jbG9zZWR8fGQrMjxjP2I9YlsoZCsyKSVjXTooUGQuc3ViVmVjdG9ycyhiW2MtMV0sYltjLTJdKS5hZGQoYltjLTFdKSxiPVBkKTtpZih2b2lkIDA9PT10aGlzLnR5cGV8fCJjZW50cmlwZXRhbCI9PT10aGlzLnR5cGV8fCJjaG9yZGFsIj09PXRoaXMudHlwZSl7dmFyIGg9ImNob3JkYWwiPT09dGhpcy50eXBlPy41Oi4yNSxjPU1hdGgucG93KGUuZGlzdGFuY2VUb1NxdWFyZWQoZiksaCksZD1NYXRoLnBvdyhmLmRpc3RhbmNlVG9TcXVhcmVkKGcpLGgpLGg9TWF0aC5wb3coZy5kaXN0YW5jZVRvU3F1YXJlZChiKSxoKTsxRS00PmQmJihkPTEpOzFFLTQ+YyYmKGM9ZCk7MUUtND5oJiYoaD1kKTt2ZS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oZS54LGYueCxnLngsYi54LGMsZCxoKTt3ZS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oZS55LGYueSxnLnksYi55LGMsZCxoKTt4ZS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oZS56LApmLnosZy56LGIueixjLGQsaCl9ZWxzZSJjYXRtdWxscm9tIj09PXRoaXMudHlwZSYmKGM9dm9pZCAwIT09dGhpcy50ZW5zaW9uP3RoaXMudGVuc2lvbjouNSx2ZS5pbml0Q2F0bXVsbFJvbShlLngsZi54LGcueCxiLngsYyksd2UuaW5pdENhdG11bGxSb20oZS55LGYueSxnLnksYi55LGMpLHhlLmluaXRDYXRtdWxsUm9tKGUueixmLnosZy56LGIueixjKSk7cmV0dXJuIG5ldyBwKHZlLmNhbGMoYSksd2UuY2FsYyhhKSx4ZS5jYWxjKGEpKX07ZWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTtlZC5wcm90b3R5cGUuY29uc3RydWN0b3I9ZWQ7ZWQucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudjAsYz10aGlzLnYxLGQ9dGhpcy52MixlPXRoaXMudjM7cmV0dXJuIG5ldyBwKHliKGEsYi54LGMueCxkLngsZS54KSx5YihhLGIueSxjLnksZC55LGUueSkseWIoYSxiLnosYy56LGQueixlLnopKX07ZmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTsKZmQucHJvdG90eXBlLmNvbnN0cnVjdG9yPWZkO2ZkLnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnYwLGM9dGhpcy52MSxkPXRoaXMudjI7cmV0dXJuIG5ldyBwKHhiKGEsYi54LGMueCxkLngpLHhiKGEsYi55LGMueSxkLnkpLHhiKGEsYi56LGMueixkLnopKX07Z2QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTtnZC5wcm90b3R5cGUuY29uc3RydWN0b3I9Z2Q7Z2QucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGEpe2lmKDE9PT1hKXJldHVybiB0aGlzLnYyLmNsb25lKCk7dmFyIGI9bmV3IHA7Yi5zdWJWZWN0b3JzKHRoaXMudjIsdGhpcy52MSk7Yi5tdWx0aXBseVNjYWxhcihhKTtiLmFkZCh0aGlzLnYxKTtyZXR1cm4gYn07TmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWGEucHJvdG90eXBlKTtOZC5wcm90b3R5cGUuY29uc3RydWN0b3I9TmQ7bmEuY3JlYXRlPWZ1bmN0aW9uKGEsYil7Y29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKTsKYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuYS5wcm90b3R5cGUpO2EucHJvdG90eXBlLmNvbnN0cnVjdG9yPWE7YS5wcm90b3R5cGUuZ2V0UG9pbnQ9YjtyZXR1cm4gYX07ZGYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSmEucHJvdG90eXBlKTtlZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShKYS5wcm90b3R5cGUpO3RlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEphLnByb3RvdHlwZSk7T2JqZWN0LmFzc2lnbih0ZS5wcm90b3R5cGUse2luaXRGcm9tQXJyYXk6ZnVuY3Rpb24oYSl7Y29uc29sZS5lcnJvcigiVEhSRUUuU3BsaW5lOiAuaW5pdEZyb21BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGdldENvbnRyb2xQb2ludHNBcnJheTpmdW5jdGlvbihhKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TcGxpbmU6IC5nZXRDb250cm9sUG9pbnRzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyZXBhcmFtZXRyaXplQnlBcmNMZW5ndGg6ZnVuY3Rpb24oYSl7Y29uc29sZS5lcnJvcigiVEhSRUUuU3BsaW5lOiAucmVwYXJhbWV0cml6ZUJ5QXJjTGVuZ3RoKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX19KTsKYmQucHJvdG90eXBlLnNldENvbG9ycz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkdyaWRIZWxwZXI6IHNldENvbG9ycygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHBhc3MgdGhlbSBpbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZC4iKX07T2JqZWN0LmFzc2lnbihpZC5wcm90b3R5cGUse2NlbnRlcjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKTtyZXR1cm4gdGhpcy5nZXRDZW50ZXIoYSl9LGVtcHR5OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIik7cmV0dXJuIHRoaXMuaXNFbXB0eSgpfSxpc0ludGVyc2VjdGlvbkJveDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKTsKcmV0dXJuIHRoaXMuaW50ZXJzZWN0c0JveChhKX0sc2l6ZTpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpO3JldHVybiB0aGlzLmdldFNpemUoYSl9fSk7T2JqZWN0LmFzc2lnbihUYS5wcm90b3R5cGUse2NlbnRlcjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKTtyZXR1cm4gdGhpcy5nZXRDZW50ZXIoYSl9LGVtcHR5OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIik7cmV0dXJuIHRoaXMuaXNFbXB0eSgpfSxpc0ludGVyc2VjdGlvbkJveDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKTsKcmV0dXJuIHRoaXMuaW50ZXJzZWN0c0JveChhKX0saXNJbnRlcnNlY3Rpb25TcGhlcmU6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIik7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShhKX0sc2l6ZTpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpO3JldHVybiB0aGlzLmdldFNpemUoYSl9fSk7SGIucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIik7cmV0dXJuIHRoaXMuZ2V0Q2VudGVyKGEpfTtZLnJhbmRvbTE2PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRoLnJhbmRvbTE2KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIE1hdGgucmFuZG9tKCkgaW5zdGVhZC4iKTsKcmV0dXJuIE1hdGgucmFuZG9tKCl9O09iamVjdC5hc3NpZ24oS2EucHJvdG90eXBlLHtmbGF0dGVuVG9BcnJheU9mZnNldDpmdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpcy50b0FycmF5KGEsYil9LG11bHRpcGx5VmVjdG9yMzpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKTtyZXR1cm4gYS5hcHBseU1hdHJpeDModGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVuYW1lZC4gVXNlIG1hdHJpeC5hcHBseVRvVmVjdG9yM0FycmF5KCBhcnJheSApIGluc3RlYWQuIik7CnJldHVybiB0aGlzLmFwcGx5VG9WZWN0b3IzQXJyYXkoYSl9LGFwcGx5VG9CdWZmZXI6ZnVuY3Rpb24oYSxiLGMpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXIoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4LmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSApIGluc3RlYWQuIik7cmV0dXJuIHRoaXMuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZShhKX0sYXBwbHlUb1ZlY3RvcjNBcnJheTpmdW5jdGlvbihhLGIsYyl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfX0pO09iamVjdC5hc3NpZ24oSi5wcm90b3R5cGUse2V4dHJhY3RQb3NpdGlvbjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5leHRyYWN0UG9zaXRpb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5jb3B5UG9zaXRpb24oKS4iKTtyZXR1cm4gdGhpcy5jb3B5UG9zaXRpb24oYSl9LApmbGF0dGVuVG9BcnJheU9mZnNldDpmdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpcy50b0FycmF5KGEsYil9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuIGZ1bmN0aW9uKCl7dm9pZCAwPT09YSYmKGE9bmV3IHApO2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpO3JldHVybiBhLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywzKX19KCksc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKS4iKTsKcmV0dXJuIHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oYSl9LG11bHRpcGx5VG9BcnJheTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VG9BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LG11bHRpcGx5VmVjdG9yMzpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKTtyZXR1cm4gYS5hcHBseU1hdHJpeDQodGhpcyl9LG11bHRpcGx5VmVjdG9yNDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKTtyZXR1cm4gYS5hcHBseU1hdHJpeDQodGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVuYW1lZC4gVXNlIG1hdHJpeC5hcHBseVRvVmVjdG9yM0FycmF5KCBhcnJheSApIGluc3RlYWQuIik7CnJldHVybiB0aGlzLmFwcGx5VG9WZWN0b3IzQXJyYXkoYSl9LHJvdGF0ZUF4aXM6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnRyYW5zZm9ybURpcmVjdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKTthLnRyYW5zZm9ybURpcmVjdGlvbih0aGlzKX0sY3Jvc3NWZWN0b3I6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKTtyZXR1cm4gYS5hcHBseU1hdHJpeDQodGhpcyl9LHRyYW5zbGF0ZTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyb3RhdGVYOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSwKcm90YXRlWTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVZKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scm90YXRlWjpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVaKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scm90YXRlQnlBeGlzOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUJ5QXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFwcGx5VG9CdWZmZXI6ZnVuY3Rpb24oYSxiLGMpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9CdWZmZXIoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4LmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSApIGluc3RlYWQuIik7cmV0dXJuIHRoaXMuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZShhKX0sYXBwbHlUb1ZlY3RvcjNBcnJheTpmdW5jdGlvbihhLGIsYyl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSwKbWFrZUZydXN0dW06ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VGcnVzdHVtKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5tYWtlUGVyc3BlY3RpdmUoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpcy5tYWtlUGVyc3BlY3RpdmUoYSxiLGQsYyxlLGYpfX0pO3dhLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkxpbmU9ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmlzSW50ZXJzZWN0aW9uTGluZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNMaW5lKCkuIik7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c0xpbmUoYSl9O3FhLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKTsKcmV0dXJuIGEuYXBwbHlRdWF0ZXJuaW9uKHRoaXMpfTtPYmplY3QuYXNzaWduKGhiLnByb3RvdHlwZSx7aXNJbnRlcnNlY3Rpb25Cb3g6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKTtyZXR1cm4gdGhpcy5pbnRlcnNlY3RzQm94KGEpfSxpc0ludGVyc2VjdGlvblBsYW5lOmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpO3JldHVybiB0aGlzLmludGVyc2VjdHNQbGFuZShhKX0saXNJbnRlcnNlY3Rpb25TcGhlcmU6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKTtyZXR1cm4gdGhpcy5pbnRlcnNlY3RzU3BoZXJlKGEpfX0pOwpPYmplY3QuYXNzaWduKEFiLnByb3RvdHlwZSx7ZXh0cnVkZTpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgZGIodGhpcyxhKX0sbWFrZUdlb21ldHJ5OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBaYih0aGlzLGEpfX0pO09iamVjdC5hc3NpZ24oRC5wcm90b3R5cGUse2Zyb21BdHRyaWJ1dGU6ZnVuY3Rpb24oYSxiLGMpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpO3JldHVybiB0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxiLGMpfX0pO09iamVjdC5hc3NpZ24ocC5wcm90b3R5cGUsCntzZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLiIpfSxzZXRFdWxlckZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVF1YXRlcm5pb24oKSBpbnN0ZWFkLiIpfSxnZXRQb3NpdGlvbkZyb21NYXRyaXg6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuIik7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGEpfSxnZXRTY2FsZUZyb21NYXRyaXg6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0U2NhbGVGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFNjYWxlKCkuIik7CnJldHVybiB0aGlzLnNldEZyb21NYXRyaXhTY2FsZShhKX0sZ2V0Q29sdW1uRnJvbU1hdHJpeDpmdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldENvbHVtbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4Q29sdW1uKCkuIik7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbihiLGEpfSxhcHBseVByb2plY3Rpb246ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlQcm9qZWN0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5hcHBseU1hdHJpeDQoIG0gKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLmFwcGx5TWF0cml4NChhKX0sZnJvbUF0dHJpYnV0ZTpmdW5jdGlvbihhLGIsYyl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7cmV0dXJuIHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLApiLGMpfX0pO09iamVjdC5hc3NpZ24oZ2EucHJvdG90eXBlLHtmcm9tQXR0cmlidXRlOmZ1bmN0aW9uKGEsYixjKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3I0OiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKTtyZXR1cm4gdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKGEsYixjKX19KTtNLnByb3RvdHlwZS5jb21wdXRlVGFuZ2VudHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07T2JqZWN0LmFzc2lnbihCLnByb3RvdHlwZSx7Z2V0Q2hpbGRCeU5hbWU6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldENoaWxkQnlOYW1lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0T2JqZWN0QnlOYW1lKCkuIik7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlOYW1lKGEpfSxyZW5kZXJEZXB0aDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLiIpfSwKdHJhbnNsYXRlOmZ1bmN0aW9uKGEsYil7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIGluc3RlYWQuIik7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKGIsYSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQi5wcm90b3R5cGUse2V1bGVyT3JkZXI6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIik7cmV0dXJuIHRoaXMucm90YXRpb24ub3JkZXJ9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpO3RoaXMucm90YXRpb24ub3JkZXI9YX19LHVzZVF1YXRlcm5pb246e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9LApzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhCYy5wcm90b3R5cGUse29iamVjdHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTE9EOiAub2JqZWN0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5sZXZlbHMuIik7cmV0dXJuIHRoaXMubGV2ZWxzfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2MucHJvdG90eXBlLCJ1c2VWZXJ0ZXhUZXh0dXJlIix7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogdXNlVmVydGV4VGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlNrZWxldG9uOiB1c2VWZXJ0ZXhUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7Ck9iamVjdC5kZWZpbmVQcm9wZXJ0eShuYS5wcm90b3R5cGUsIl9fYXJjTGVuZ3RoRGl2aXNpb25zIix7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLl9fYXJjTGVuZ3RoRGl2aXNpb25zIGlzIG5vdyAuYXJjTGVuZ3RoRGl2aXNpb25zLiIpO3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9uc30sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuQ3VydmU6IC5fX2FyY0xlbmd0aERpdmlzaW9ucyBpcyBub3cgLmFyY0xlbmd0aERpdmlzaW9ucy4iKTt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz1hfX0pO3hhLnByb3RvdHlwZS5zZXRMZW5zPWZ1bmN0aW9uKGEsYil7Y29uc29sZS53YXJuKCJUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYS5zZXRMZW5zIGlzIGRlcHJlY2F0ZWQuIFVzZSAuc2V0Rm9jYWxMZW5ndGggYW5kIC5maWxtR2F1Z2UgZm9yIGEgcGhvdG9ncmFwaGljIHNldHVwLiIpO3ZvaWQgMCE9PWImJih0aGlzLmZpbG1HYXVnZT1iKTt0aGlzLnNldEZvY2FsTGVuZ3RoKGEpfTsKT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobWEucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpO3RoaXMuc2hhZG93LmNhbWVyYS5mb3Y9YX19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKTt0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1hfX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpOwp0aGlzLnNoYWRvdy5jYW1lcmEucmlnaHQ9YX19LHNoYWRvd0NhbWVyYVRvcDp7c2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFUb3AgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnRvcC4iKTt0aGlzLnNoYWRvdy5jYW1lcmEudG9wPWF9fSxzaGFkb3dDYW1lcmFCb3R0b206e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhQm90dG9tIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5ib3R0b20uIik7dGhpcy5zaGFkb3cuY2FtZXJhLmJvdHRvbT1hfX0sc2hhZG93Q2FtZXJhTmVhcjp7c2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFOZWFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5uZWFyLiIpO3RoaXMuc2hhZG93LmNhbWVyYS5uZWFyPWF9fSxzaGFkb3dDYW1lcmFGYXI6e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhRmFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5mYXIuIik7CnRoaXMuc2hhZG93LmNhbWVyYS5mYXI9YX19LHNoYWRvd0NhbWVyYVZpc2libGU6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFWaXNpYmxlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuQ2FtZXJhSGVscGVyKCBsaWdodC5zaGFkb3cuY2FtZXJhICkgaW5zdGVhZC4iKX19LHNoYWRvd0JpYXM6e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93QmlhcyBpcyBub3cgLnNoYWRvdy5iaWFzLiIpO3RoaXMuc2hhZG93LmJpYXM9YX19LHNoYWRvd0RhcmtuZXNzOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93RGFya25lc3MgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHNoYWRvd01hcFdpZHRoOntzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd01hcFdpZHRoIGlzIG5vdyAuc2hhZG93Lm1hcFNpemUud2lkdGguIik7CnRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9YX19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIik7dGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9YX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTC5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5sZW5ndGggaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5jb3VudCBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLmFycmF5Lmxlbmd0aH19fSk7T2JqZWN0LmFzc2lnbihJLnByb3RvdHlwZSx7YWRkSW5kZXg6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEluZGV4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0SW5kZXgoKS4iKTt0aGlzLnNldEluZGV4KGEpfSxhZGREcmF3Q2FsbDpmdW5jdGlvbihhLApiLGMpe3ZvaWQgMCE9PWMmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKTtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIik7dGhpcy5hZGRHcm91cChhLGIpfSxjbGVhckRyYXdDYWxsczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jbGVhckRyYXdDYWxscygpIGlzIG5vdyAuY2xlYXJHcm91cHMoKS4iKTt0aGlzLmNsZWFyR3JvdXBzKCl9LGNvbXB1dGVUYW5nZW50czpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlVGFuZ2VudHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxjb21wdXRlT2Zmc2V0czpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlT2Zmc2V0cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7Ck9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEkucHJvdG90eXBlLHtkcmF3Y2FsbHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuZHJhd2NhbGxzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKTtyZXR1cm4gdGhpcy5ncm91cHN9fSxvZmZzZXRzOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAub2Zmc2V0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIik7cmV0dXJuIHRoaXMuZ3JvdXBzfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhKZC5wcm90b3R5cGUse2R5bmFtaWM6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLmR5bmFtaWMgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIil9fSxvblVwZGF0ZTp7dmFsdWU6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IC5vblVwZGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBvYmplY3Qub25CZWZvcmVSZW5kZXIoKSBpbnN0ZWFkLiIpOwpyZXR1cm4gdGhpc319fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWi5wcm90b3R5cGUse3dyYXBBcm91bmQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9fSx3cmFwUkdCOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpO3JldHVybiBuZXcgSH19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGEucHJvdG90eXBlLHttZXRhbDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbDogLm1ldGFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCBpbnN0ZWFkLiIpO3JldHVybiExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsOiAubWV0YWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsIGluc3RlYWQiKX19fSk7Ck9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEVhLnByb3RvdHlwZSx7ZGVyaXZhdGl2ZXM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzfSxzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS4gU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKTt0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXM9YX19fSk7T2JqZWN0LmFzc2lnbihYZC5wcm90b3R5cGUse2dldEN1cnJlbnRSZW5kZXJUYXJnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4iKTtyZXR1cm4gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKX0sCnN1cHBvcnRzRmxvYXRUZXh0dXJlczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKX0sc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpfSxzdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXM6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpOwpyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIil9LHN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICkuIik7cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9LHN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQzpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnICkuIik7cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfSwKc3VwcG9ydHNCbGVuZE1pbk1heDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQmxlbmRNaW5NYXgoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnRVhUX2JsZW5kX21pbm1heCcgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfSxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpO3JldHVybiB0aGlzLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlc30sc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0luc3RhbmNlZEFycmF5cygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyApLiIpOwpyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpfSxlbmFibGVTY2lzc29yVGVzdDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKTt0aGlzLnNldFNjaXNzb3JUZXN0KGEpfSxpbml0TWF0ZXJpYWw6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5pbml0TWF0ZXJpYWwoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxhZGRQcmVQbHVnaW46ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQcmVQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxhZGRQb3N0UGx1Z2luOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHVwZGF0ZVNoYWRvd01hcDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnVwZGF0ZVNoYWRvd01hcCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7Ck9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFhkLnByb3RvdHlwZSx7c2hhZG93TWFwRW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLmVuYWJsZWR9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuIik7dGhpcy5zaGFkb3dNYXAuZW5hYmxlZD1hfX0sc2hhZG93TWFwVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLnR5cGV9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuIik7dGhpcy5zaGFkb3dNYXAudHlwZT1hfX0sc2hhZG93TWFwQ3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC5jdWxsRmFjZX0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGlzIG5vdyAuc2hhZG93TWFwLmN1bGxGYWNlLiIpOwp0aGlzLnNoYWRvd01hcC5jdWxsRmFjZT1hfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhKZS5wcm90b3R5cGUse2N1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJSZXZlcnNlU2lkZWQ/MjoxfSxzZXQ6ZnVuY3Rpb24oYSl7YT0xIT09YTtjb25zb2xlLndhcm4oIldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaXMgZGVwcmVjYXRlZC4gU2V0IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIHRvICIrYSsiLiIpO3RoaXMucmVuZGVyUmV2ZXJzZVNpZGVkPWF9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERiLnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIik7cmV0dXJuIHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIik7CnRoaXMudGV4dHVyZS53cmFwUz1hfX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIik7cmV0dXJuIHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIik7dGhpcy50ZXh0dXJlLndyYXBUPWF9fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKTtyZXR1cm4gdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKTt0aGlzLnRleHR1cmUubWFnRmlsdGVyPQphfX0sbWluRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIik7cmV0dXJuIHRoaXMudGV4dHVyZS5taW5GaWx0ZXJ9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIik7dGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1hfX0sYW5pc290cm9weTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIik7cmV0dXJuIHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5fSxzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIik7dGhpcy50ZXh0dXJlLmFuaXNvdHJvcHk9CmF9fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKTtyZXR1cm4gdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKTt0aGlzLnRleHR1cmUub2Zmc2V0PWF9fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKTtyZXR1cm4gdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKTt0aGlzLnRleHR1cmUucmVwZWF0PWF9fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKTsKcmV0dXJuIHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIik7dGhpcy50ZXh0dXJlLmZvcm1hdD1hfX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIik7cmV0dXJuIHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIik7dGhpcy50ZXh0dXJlLnR5cGU9YX19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpO3JldHVybiB0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSwKc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKTt0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPWF9fX0pO2pjLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IC5sb2FkIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5BdWRpb0xvYWRlciBpbnN0ZWFkLiIpO3ZhciBiPXRoaXM7KG5ldyBmZSkubG9hZChhLGZ1bmN0aW9uKGEpe2Iuc2V0QnVmZmVyKGEpfSk7cmV0dXJuIHRoaXN9O2tlLnByb3RvdHlwZS5nZXREYXRhPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpb0FuYWx5c2VyOiAuZ2V0RGF0YSgpIGlzIG5vdyAuZ2V0RnJlcXVlbmN5RGF0YSgpLiIpO3JldHVybiB0aGlzLmdldEZyZXF1ZW5jeURhdGEoKX07bC5XZWJHTFJlbmRlclRhcmdldEN1YmU9RWI7bC5XZWJHTFJlbmRlclRhcmdldD0KRGI7bC5XZWJHTFJlbmRlcmVyPVhkO2wuU2hhZGVyTGliPWFiO2wuVW5pZm9ybXNMaWI9VjtsLlVuaWZvcm1zVXRpbHM9SGE7bC5TaGFkZXJDaHVuaz1VO2wuRm9nRXhwMj1LYjtsLkZvZz1MYjtsLlNjZW5lPW1kO2wuTGVuc0ZsYXJlPVlkO2wuU3ByaXRlPUFjO2wuTE9EPUJjO2wuU2tpbm5lZE1lc2g9b2Q7bC5Ta2VsZXRvbj1DYztsLkJvbmU9bmQ7bC5NZXNoPUNhO2wuTGluZVNlZ21lbnRzPWRhO2wuTGluZUxvb3A9cGQ7bC5MaW5lPXlhO2wuUG9pbnRzPU1iO2wuR3JvdXA9RGM7bC5WaWRlb1RleHR1cmU9cWQ7bC5EYXRhVGV4dHVyZT1lYjtsLkNvbXByZXNzZWRUZXh0dXJlPU5iO2wuQ3ViZVRleHR1cmU9WmE7bC5DYW52YXNUZXh0dXJlPXJkO2wuRGVwdGhUZXh0dXJlPUVjO2wuVGV4dHVyZT1YO2wuQ29tcHJlc3NlZFRleHR1cmVMb2FkZXI9UWU7bC5EYXRhVGV4dHVyZUxvYWRlcj0kZDtsLkN1YmVUZXh0dXJlTG9hZGVyPWFlO2wuVGV4dHVyZUxvYWRlcj1zZDtsLk9iamVjdExvYWRlcj0KUmU7bC5NYXRlcmlhbExvYWRlcj1IZDtsLkJ1ZmZlckdlb21ldHJ5TG9hZGVyPWJlO2wuRGVmYXVsdExvYWRpbmdNYW5hZ2VyPUFhO2wuTG9hZGluZ01hbmFnZXI9WmQ7bC5KU09OTG9hZGVyPWNlO2wuSW1hZ2VMb2FkZXI9VmM7bC5Gb250TG9hZGVyPVRlO2wuRmlsZUxvYWRlcj11YTtsLkxvYWRlcj1nYztsLkNhY2hlPWhkO2wuQXVkaW9Mb2FkZXI9ZmU7bC5TcG90TGlnaHRTaGFkb3c9dWQ7bC5TcG90TGlnaHQ9dmQ7bC5Qb2ludExpZ2h0PXdkO2wuUmVjdEFyZWFMaWdodD1BZDtsLkhlbWlzcGhlcmVMaWdodD10ZDtsLkRpcmVjdGlvbmFsTGlnaHRTaGFkb3c9eGQ7bC5EaXJlY3Rpb25hbExpZ2h0PXlkO2wuQW1iaWVudExpZ2h0PXpkO2wuTGlnaHRTaGFkb3c9dWI7bC5MaWdodD1tYTtsLlN0ZXJlb0NhbWVyYT1VZTtsLlBlcnNwZWN0aXZlQ2FtZXJhPXhhO2wuT3J0aG9ncmFwaGljQ2FtZXJhPUpiO2wuQ3ViZUNhbWVyYT1JZDtsLkFycmF5Q2FtZXJhPWdlO2wuQ2FtZXJhPU9hO2wuQXVkaW9MaXN0ZW5lcj0KaGU7bC5Qb3NpdGlvbmFsQXVkaW89amU7bC5BdWRpb0NvbnRleHQ9aWU7bC5BdWRpb0FuYWx5c2VyPWtlO2wuQXVkaW89amM7bC5WZWN0b3JLZXlmcmFtZVRyYWNrPWVjO2wuU3RyaW5nS2V5ZnJhbWVUcmFjaz1FZDtsLlF1YXRlcm5pb25LZXlmcmFtZVRyYWNrPVhjO2wuTnVtYmVyS2V5ZnJhbWVUcmFjaz1mYztsLkNvbG9yS2V5ZnJhbWVUcmFjaz1HZDtsLkJvb2xlYW5LZXlmcmFtZVRyYWNrPUZkO2wuUHJvcGVydHlNaXhlcj1sZTtsLlByb3BlcnR5QmluZGluZz1vYTtsLktleWZyYW1lVHJhY2s9d2I7bC5BbmltYXRpb25VdGlscz12YTtsLkFuaW1hdGlvbk9iamVjdEdyb3VwPVdlO2wuQW5pbWF0aW9uTWl4ZXI9WWU7bC5BbmltYXRpb25DbGlwPUJhO2wuVW5pZm9ybT1KZDtsLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PW1lO2wuQnVmZmVyR2VvbWV0cnk9STtsLkdlb21ldHJ5SWRDb3VudD1mdW5jdGlvbigpe3JldHVybiBUZCsrfTtsLkdlb21ldHJ5PU07bC5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT0KbmU7bC5JbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj1vZTtsLkludGVybGVhdmVkQnVmZmVyPWtjO2wuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPXBlO2wuRmFjZTM9VmE7bC5PYmplY3QzRD1CO2wuUmF5Y2FzdGVyPVplO2wuTGF5ZXJzPVJkO2wuRXZlbnREaXNwYXRjaGVyPXNhO2wuQ2xvY2s9YWY7bC5RdWF0ZXJuaW9uTGluZWFySW50ZXJwb2xhbnQ9RGQ7bC5MaW5lYXJJbnRlcnBvbGFudD1XYztsLkRpc2NyZXRlSW50ZXJwb2xhbnQ9Q2Q7bC5DdWJpY0ludGVycG9sYW50PUJkO2wuSW50ZXJwb2xhbnQ9RGE7bC5UcmlhbmdsZT1VYTtsLk1hdGg9WTtsLlNwaGVyaWNhbD1iZjtsLkN5bGluZHJpY2FsPWNmO2wuUGxhbmU9d2E7bC5GcnVzdHVtPWpkO2wuU3BoZXJlPUdhO2wuUmF5PWhiO2wuTWF0cml4ND1KO2wuTWF0cml4Mz1LYTtsLkJveDM9VGE7bC5Cb3gyPWlkO2wuTGluZTM9SGI7bC5FdWxlcj1iYjtsLlZlY3RvcjQ9Z2E7bC5WZWN0b3IzPXA7bC5WZWN0b3IyPUQ7bC5RdWF0ZXJuaW9uPQpxYTtsLkNvbG9yPUg7bC5Nb3JwaEJsZW5kTWVzaD1yYTtsLkltbWVkaWF0ZVJlbmRlck9iamVjdD0kYztsLlZlcnRleE5vcm1hbHNIZWxwZXI9YWQ7bC5TcG90TGlnaHRIZWxwZXI9bGM7bC5Ta2VsZXRvbkhlbHBlcj1tYztsLlBvaW50TGlnaHRIZWxwZXI9bmM7bC5SZWN0QXJlYUxpZ2h0SGVscGVyPW9jO2wuSGVtaXNwaGVyZUxpZ2h0SGVscGVyPXBjO2wuR3JpZEhlbHBlcj1iZDtsLlBvbGFyR3JpZEhlbHBlcj1LZDtsLkZhY2VOb3JtYWxzSGVscGVyPWNkO2wuRGlyZWN0aW9uYWxMaWdodEhlbHBlcj1xYztsLkNhbWVyYUhlbHBlcj1kZDtsLkJveEhlbHBlcj1CYjtsLkFycm93SGVscGVyPUNiO2wuQXhpc0hlbHBlcj1NZDtsLkNhdG11bGxSb21DdXJ2ZTM9SmE7bC5DdWJpY0JlemllckN1cnZlMz1lZDtsLlF1YWRyYXRpY0JlemllckN1cnZlMz1mZDtsLkxpbmVDdXJ2ZTM9Z2Q7bC5BcmNDdXJ2ZT1OZDtsLkVsbGlwc2VDdXJ2ZT1YYTtsLlNwbGluZUN1cnZlPXpiO2wuQ3ViaWNCZXppZXJDdXJ2ZT0KaGM7bC5RdWFkcmF0aWNCZXppZXJDdXJ2ZT1pYztsLkxpbmVDdXJ2ZT1TYTtsLlNoYXBlPUFiO2wuUGF0aD1aYztsLlNoYXBlUGF0aD1kZTtsLkZvbnQ9ZWU7bC5DdXJ2ZVBhdGg9WWM7bC5DdXJ2ZT1uYTtsLlNoYXBlVXRpbHM9emE7bC5TY2VuZVV0aWxzPXtjcmVhdGVNdWx0aU1hdGVyaWFsT2JqZWN0OmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPW5ldyBEYyxkPTAsZT1iLmxlbmd0aDtkPGU7ZCsrKWMuYWRkKG5ldyBDYShhLGJbZF0pKTtyZXR1cm4gY30sZGV0YWNoOmZ1bmN0aW9uKGEsYixjKXthLmFwcGx5TWF0cml4KGIubWF0cml4V29ybGQpO2IucmVtb3ZlKGEpO2MuYWRkKGEpfSxhdHRhY2g6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPW5ldyBKO2QuZ2V0SW52ZXJzZShjLm1hdHJpeFdvcmxkKTthLmFwcGx5TWF0cml4KGQpO2IucmVtb3ZlKGEpO2MuYWRkKGEpfX07bC5XaXJlZnJhbWVHZW9tZXRyeT1PYjtsLlBhcmFtZXRyaWNHZW9tZXRyeT1GYztsLlBhcmFtZXRyaWNCdWZmZXJHZW9tZXRyeT0KUGI7bC5UZXRyYWhlZHJvbkdlb21ldHJ5PUhjO2wuVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeT1RYjtsLk9jdGFoZWRyb25HZW9tZXRyeT1JYztsLk9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeT1tYjtsLkljb3NhaGVkcm9uR2VvbWV0cnk9SmM7bC5JY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5PVJiO2wuRG9kZWNhaGVkcm9uR2VvbWV0cnk9S2M7bC5Eb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeT1TYjtsLlBvbHloZWRyb25HZW9tZXRyeT1HYztsLlBvbHloZWRyb25CdWZmZXJHZW9tZXRyeT1pYTtsLlR1YmVHZW9tZXRyeT1MYztsLlR1YmVCdWZmZXJHZW9tZXRyeT1UYjtsLlRvcnVzS25vdEdlb21ldHJ5PU1jO2wuVG9ydXNLbm90QnVmZmVyR2VvbWV0cnk9VWI7bC5Ub3J1c0dlb21ldHJ5PU5jO2wuVG9ydXNCdWZmZXJHZW9tZXRyeT1WYjtsLlRleHRHZW9tZXRyeT1PYztsLlRleHRCdWZmZXJHZW9tZXRyeT1XYjtsLlNwaGVyZUdlb21ldHJ5PVBjO2wuU3BoZXJlQnVmZmVyR2VvbWV0cnk9Cm5iO2wuUmluZ0dlb21ldHJ5PVFjO2wuUmluZ0J1ZmZlckdlb21ldHJ5PVhiO2wuUGxhbmVHZW9tZXRyeT14YztsLlBsYW5lQnVmZmVyR2VvbWV0cnk9bGI7bC5MYXRoZUdlb21ldHJ5PVJjO2wuTGF0aGVCdWZmZXJHZW9tZXRyeT1ZYjtsLlNoYXBlR2VvbWV0cnk9WmI7bC5TaGFwZUJ1ZmZlckdlb21ldHJ5PSRiO2wuRXh0cnVkZUdlb21ldHJ5PWRiO2wuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5PUZhO2wuRWRnZXNHZW9tZXRyeT1hYztsLkNvbmVHZW9tZXRyeT1TYztsLkNvbmVCdWZmZXJHZW9tZXRyeT1UYztsLkN5bGluZGVyR2VvbWV0cnk9b2I7bC5DeWxpbmRlckJ1ZmZlckdlb21ldHJ5PVdhO2wuQ2lyY2xlR2VvbWV0cnk9VWM7bC5DaXJjbGVCdWZmZXJHZW9tZXRyeT1iYztsLkJveEdlb21ldHJ5PUliO2wuQm94QnVmZmVyR2VvbWV0cnk9a2I7bC5TaGFkb3dNYXRlcmlhbD1jYztsLlNwcml0ZU1hdGVyaWFsPWNiO2wuUmF3U2hhZGVyTWF0ZXJpYWw9ZGM7bC5TaGFkZXJNYXRlcmlhbD0KRWE7bC5Qb2ludHNNYXRlcmlhbD1MYTtsLk1lc2hQaHlzaWNhbE1hdGVyaWFsPXBiO2wuTWVzaFN0YW5kYXJkTWF0ZXJpYWw9UmE7bC5NZXNoUGhvbmdNYXRlcmlhbD10YTtsLk1lc2hUb29uTWF0ZXJpYWw9cWI7bC5NZXNoTm9ybWFsTWF0ZXJpYWw9cmI7bC5NZXNoTGFtYmVydE1hdGVyaWFsPXNiO2wuTWVzaERlcHRoTWF0ZXJpYWw9JGE7bC5NZXNoQmFzaWNNYXRlcmlhbD1OYTtsLkxpbmVEYXNoZWRNYXRlcmlhbD10YjtsLkxpbmVCYXNpY01hdGVyaWFsPWhhO2wuTWF0ZXJpYWw9WjtsLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGU9d2M7bC5GbG9hdDMyQnVmZmVyQXR0cmlidXRlPUM7bC5VaW50MzJCdWZmZXJBdHRyaWJ1dGU9amI7bC5JbnQzMkJ1ZmZlckF0dHJpYnV0ZT12YztsLlVpbnQxNkJ1ZmZlckF0dHJpYnV0ZT1pYjtsLkludDE2QnVmZmVyQXR0cmlidXRlPXVjO2wuVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlPXRjO2wuVWludDhCdWZmZXJBdHRyaWJ1dGU9c2M7bC5JbnQ4QnVmZmVyQXR0cmlidXRlPQpyYztsLkJ1ZmZlckF0dHJpYnV0ZT1MO2wuUkVWSVNJT049Ijg1IjtsLk1PVVNFPXtMRUZUOjAsTUlERExFOjEsUklHSFQ6Mn07bC5DdWxsRmFjZU5vbmU9MDtsLkN1bGxGYWNlQmFjaz0xO2wuQ3VsbEZhY2VGcm9udD0yO2wuQ3VsbEZhY2VGcm9udEJhY2s9MztsLkZyb250RmFjZURpcmVjdGlvbkNXPTA7bC5Gcm9udEZhY2VEaXJlY3Rpb25DQ1c9MTtsLkJhc2ljU2hhZG93TWFwPTA7bC5QQ0ZTaGFkb3dNYXA9MTtsLlBDRlNvZnRTaGFkb3dNYXA9MjtsLkZyb250U2lkZT0wO2wuQmFja1NpZGU9MTtsLkRvdWJsZVNpZGU9MjtsLkZsYXRTaGFkaW5nPTE7bC5TbW9vdGhTaGFkaW5nPTI7bC5Ob0NvbG9ycz0wO2wuRmFjZUNvbG9ycz0xO2wuVmVydGV4Q29sb3JzPTI7bC5Ob0JsZW5kaW5nPTA7bC5Ob3JtYWxCbGVuZGluZz0xO2wuQWRkaXRpdmVCbGVuZGluZz0yO2wuU3VidHJhY3RpdmVCbGVuZGluZz0zO2wuTXVsdGlwbHlCbGVuZGluZz00O2wuQ3VzdG9tQmxlbmRpbmc9NTtsLkFkZEVxdWF0aW9uPQoxMDA7bC5TdWJ0cmFjdEVxdWF0aW9uPTEwMTtsLlJldmVyc2VTdWJ0cmFjdEVxdWF0aW9uPTEwMjtsLk1pbkVxdWF0aW9uPTEwMztsLk1heEVxdWF0aW9uPTEwNDtsLlplcm9GYWN0b3I9MjAwO2wuT25lRmFjdG9yPTIwMTtsLlNyY0NvbG9yRmFjdG9yPTIwMjtsLk9uZU1pbnVzU3JjQ29sb3JGYWN0b3I9MjAzO2wuU3JjQWxwaGFGYWN0b3I9MjA0O2wuT25lTWludXNTcmNBbHBoYUZhY3Rvcj0yMDU7bC5Ec3RBbHBoYUZhY3Rvcj0yMDY7bC5PbmVNaW51c0RzdEFscGhhRmFjdG9yPTIwNztsLkRzdENvbG9yRmFjdG9yPTIwODtsLk9uZU1pbnVzRHN0Q29sb3JGYWN0b3I9MjA5O2wuU3JjQWxwaGFTYXR1cmF0ZUZhY3Rvcj0yMTA7bC5OZXZlckRlcHRoPTA7bC5BbHdheXNEZXB0aD0xO2wuTGVzc0RlcHRoPTI7bC5MZXNzRXF1YWxEZXB0aD0zO2wuRXF1YWxEZXB0aD00O2wuR3JlYXRlckVxdWFsRGVwdGg9NTtsLkdyZWF0ZXJEZXB0aD02O2wuTm90RXF1YWxEZXB0aD03O2wuTXVsdGlwbHlPcGVyYXRpb249CjA7bC5NaXhPcGVyYXRpb249MTtsLkFkZE9wZXJhdGlvbj0yO2wuTm9Ub25lTWFwcGluZz0wO2wuTGluZWFyVG9uZU1hcHBpbmc9MTtsLlJlaW5oYXJkVG9uZU1hcHBpbmc9MjtsLlVuY2hhcnRlZDJUb25lTWFwcGluZz0zO2wuQ2luZW9uVG9uZU1hcHBpbmc9NDtsLlVWTWFwcGluZz0zMDA7bC5DdWJlUmVmbGVjdGlvbk1hcHBpbmc9MzAxO2wuQ3ViZVJlZnJhY3Rpb25NYXBwaW5nPTMwMjtsLkVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nPTMwMztsLkVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nPTMwNDtsLlNwaGVyaWNhbFJlZmxlY3Rpb25NYXBwaW5nPTMwNTtsLkN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nPTMwNjtsLkN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nPTMwNztsLlJlcGVhdFdyYXBwaW5nPTFFMztsLkNsYW1wVG9FZGdlV3JhcHBpbmc9MTAwMTtsLk1pcnJvcmVkUmVwZWF0V3JhcHBpbmc9MTAwMjtsLk5lYXJlc3RGaWx0ZXI9MTAwMztsLk5lYXJlc3RNaXBNYXBOZWFyZXN0RmlsdGVyPQoxMDA0O2wuTmVhcmVzdE1pcE1hcExpbmVhckZpbHRlcj0xMDA1O2wuTGluZWFyRmlsdGVyPTEwMDY7bC5MaW5lYXJNaXBNYXBOZWFyZXN0RmlsdGVyPTEwMDc7bC5MaW5lYXJNaXBNYXBMaW5lYXJGaWx0ZXI9MTAwODtsLlVuc2lnbmVkQnl0ZVR5cGU9MTAwOTtsLkJ5dGVUeXBlPTEwMTA7bC5TaG9ydFR5cGU9MTAxMTtsLlVuc2lnbmVkU2hvcnRUeXBlPTEwMTI7bC5JbnRUeXBlPTEwMTM7bC5VbnNpZ25lZEludFR5cGU9MTAxNDtsLkZsb2F0VHlwZT0xMDE1O2wuSGFsZkZsb2F0VHlwZT0xMDE2O2wuVW5zaWduZWRTaG9ydDQ0NDRUeXBlPTEwMTc7bC5VbnNpZ25lZFNob3J0NTU1MVR5cGU9MTAxODtsLlVuc2lnbmVkU2hvcnQ1NjVUeXBlPTEwMTk7bC5VbnNpZ25lZEludDI0OFR5cGU9MTAyMDtsLkFscGhhRm9ybWF0PTEwMjE7bC5SR0JGb3JtYXQ9MTAyMjtsLlJHQkFGb3JtYXQ9MTAyMztsLkx1bWluYW5jZUZvcm1hdD0xMDI0O2wuTHVtaW5hbmNlQWxwaGFGb3JtYXQ9MTAyNTtsLlJHQkVGb3JtYXQ9CjEwMjM7bC5EZXB0aEZvcm1hdD0xMDI2O2wuRGVwdGhTdGVuY2lsRm9ybWF0PTEwMjc7bC5SR0JfUzNUQ19EWFQxX0Zvcm1hdD0yMDAxO2wuUkdCQV9TM1RDX0RYVDFfRm9ybWF0PTIwMDI7bC5SR0JBX1MzVENfRFhUM19Gb3JtYXQ9MjAwMztsLlJHQkFfUzNUQ19EWFQ1X0Zvcm1hdD0yMDA0O2wuUkdCX1BWUlRDXzRCUFBWMV9Gb3JtYXQ9MjEwMDtsLlJHQl9QVlJUQ18yQlBQVjFfRm9ybWF0PTIxMDE7bC5SR0JBX1BWUlRDXzRCUFBWMV9Gb3JtYXQ9MjEwMjtsLlJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdD0yMTAzO2wuUkdCX0VUQzFfRm9ybWF0PTIxNTE7bC5Mb29wT25jZT0yMjAwO2wuTG9vcFJlcGVhdD0yMjAxO2wuTG9vcFBpbmdQb25nPTIyMDI7bC5JbnRlcnBvbGF0ZURpc2NyZXRlPTIzMDA7bC5JbnRlcnBvbGF0ZUxpbmVhcj0yMzAxO2wuSW50ZXJwb2xhdGVTbW9vdGg9MjMwMjtsLlplcm9DdXJ2YXR1cmVFbmRpbmc9MjQwMDtsLlplcm9TbG9wZUVuZGluZz0yNDAxO2wuV3JhcEFyb3VuZEVuZGluZz0KMjQwMjtsLlRyaWFuZ2xlc0RyYXdNb2RlPTA7bC5UcmlhbmdsZVN0cmlwRHJhd01vZGU9MTtsLlRyaWFuZ2xlRmFuRHJhd01vZGU9MjtsLkxpbmVhckVuY29kaW5nPTNFMztsLnNSR0JFbmNvZGluZz0zMDAxO2wuR2FtbWFFbmNvZGluZz0zMDA3O2wuUkdCRUVuY29kaW5nPTMwMDI7bC5Mb2dMdXZFbmNvZGluZz0zMDAzO2wuUkdCTTdFbmNvZGluZz0zMDA0O2wuUkdCTTE2RW5jb2Rpbmc9MzAwNTtsLlJHQkRFbmNvZGluZz0zMDA2O2wuQmFzaWNEZXB0aFBhY2tpbmc9MzIwMDtsLlJHQkFEZXB0aFBhY2tpbmc9MzIwMTtsLkN1YmVHZW9tZXRyeT1JYjtsLkZhY2U0PWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe2NvbnNvbGUud2FybigiVEhSRUUuRmFjZTQgaGFzIGJlZW4gcmVtb3ZlZC4gQSBUSFJFRS5GYWNlMyB3aWxsIGJlIGNyZWF0ZWQgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IFZhKGEsYixjLGUsZixnKX07bC5MaW5lU3RyaXA9MDtsLkxpbmVQaWVjZXM9MTtsLk1lc2hGYWNlTWF0ZXJpYWw9CmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTWVzaEZhY2VNYXRlcmlhbCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYW4gQXJyYXkgaW5zdGVhZC4iKTtyZXR1cm4gYX07bC5NdWx0aU1hdGVyaWFsPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPVtdKTtjb25zb2xlLndhcm4oIlRIUkVFLk11bHRpTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuIik7YS5pc011bHRpTWF0ZXJpYWw9ITA7YS5tYXRlcmlhbHM9YTthLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGEuc2xpY2UoKX07cmV0dXJuIGF9O2wuUG9pbnRDbG91ZD1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuUG9pbnRDbG91ZCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50cy4iKTtyZXR1cm4gbmV3IE1iKGEsYil9O2wuUGFydGljbGU9ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZSBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlNwcml0ZS4iKTsKcmV0dXJuIG5ldyBBYyhhKX07bC5QYXJ0aWNsZVN5c3RlbT1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVTeXN0ZW0gaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHMuIik7cmV0dXJuIG5ldyBNYihhLGIpfTtsLlBvaW50Q2xvdWRNYXRlcmlhbD1mdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLlBvaW50Q2xvdWRNYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpO3JldHVybiBuZXcgTGEoYSl9O2wuUGFydGljbGVCYXNpY01hdGVyaWFsPWZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVCYXNpY01hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIik7cmV0dXJuIG5ldyBMYShhKX07bC5QYXJ0aWNsZVN5c3RlbU1hdGVyaWFsPWZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVTeXN0ZW1NYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpOwpyZXR1cm4gbmV3IExhKGEpfTtsLlZlcnRleD1mdW5jdGlvbihhLGIsYyl7Y29uc29sZS53YXJuKCJUSFJFRS5WZXJ0ZXggaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLlZlY3RvcjMgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IHAoYSxiLGMpfTtsLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUoKS5zZXREeW5hbWljKCB0cnVlICkgaW5zdGVhZC4iKTtyZXR1cm4obmV3IEwoYSxiKSkuc2V0RHluYW1pYyghMCl9O2wuSW50OEF0dHJpYnV0ZT1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuSW50OEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDhCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgcmMoYSxiKX07bC5VaW50OEF0dHJpYnV0ZT0KZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQ4QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDhCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgc2MoYSxiKX07bC5VaW50OENsYW1wZWRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQ4Q2xhbXBlZEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyB0YyhhLGIpfTtsLkludDE2QXR0cmlidXRlPWZ1bmN0aW9uKGEsYil7Y29uc29sZS53YXJuKCJUSFJFRS5JbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDE2QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IHVjKGEsYil9O2wuVWludDE2QXR0cmlidXRlPWZ1bmN0aW9uKGEsYil7Y29uc29sZS53YXJuKCJUSFJFRS5VaW50MTZBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpOwpyZXR1cm4gbmV3IGliKGEsYil9O2wuSW50MzJBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLkludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50MzJCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgdmMoYSxiKX07bC5VaW50MzJBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBqYihhLGIpfTtsLkZsb2F0MzJBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLkZsb2F0MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5GbG9hdDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IEMoYSxiKX07bC5GbG9hdDY0QXR0cmlidXRlPQpmdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuRmxvYXQ2NEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgd2MoYSxiKX07bC5DbG9zZWRTcGxpbmVDdXJ2ZTM9ZGY7bC5TcGxpbmVDdXJ2ZTM9ZWY7bC5TcGxpbmU9dGU7bC5Cb3VuZGluZ0JveEhlbHBlcj1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuQm91bmRpbmdCb3hIZWxwZXIgaGFzIGJlZW4gZGVwcmVjYXRlZC4gQ3JlYXRpbmcgYSBUSFJFRS5Cb3hIZWxwZXIgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IEJiKGEsYil9O2wuRWRnZXNIZWxwZXI9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLkVkZ2VzSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5FZGdlc0dlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIG5ldyBkYShuZXcgYWMoYS5nZW9tZXRyeSksbmV3IGhhKHtjb2xvcjp2b2lkIDAhPT0KYj9iOjE2Nzc3MjE1fSkpfTtsLldpcmVmcmFtZUhlbHBlcj1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuV2lyZWZyYW1lSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5XaXJlZnJhbWVHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgZGEobmV3IE9iKGEuZ2VvbWV0cnkpLG5ldyBoYSh7Y29sb3I6dm9pZCAwIT09Yj9iOjE2Nzc3MjE1fSkpfTtsLlhIUkxvYWRlcj1mdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLlhIUkxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkZpbGVMb2FkZXIuIik7cmV0dXJuIG5ldyB1YShhKX07bC5CaW5hcnlUZXh0dXJlTG9hZGVyPWZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuQmluYXJ5VGV4dHVyZUxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkRhdGFUZXh0dXJlTG9hZGVyLiIpO3JldHVybiBuZXcgJGQoYSl9O2wuR2VvbWV0cnlVdGlscz17bWVyZ2U6ZnVuY3Rpb24oYSxiLApjKXtjb25zb2xlLndhcm4oIlRIUkVFLkdlb21ldHJ5VXRpbHM6IC5tZXJnZSgpIGhhcyBiZWVuIG1vdmVkIHRvIEdlb21ldHJ5LiBVc2UgZ2VvbWV0cnkubWVyZ2UoIGdlb21ldHJ5MiwgbWF0cml4LCBtYXRlcmlhbEluZGV4T2Zmc2V0ICkgaW5zdGVhZC4iKTt2YXIgZDtiLmlzTWVzaCYmKGIubWF0cml4QXV0b1VwZGF0ZSYmYi51cGRhdGVNYXRyaXgoKSxkPWIubWF0cml4LGI9Yi5nZW9tZXRyeSk7YS5tZXJnZShiLGQsYyl9LGNlbnRlcjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkdlb21ldHJ5VXRpbHM6IC5jZW50ZXIoKSBoYXMgYmVlbiBtb3ZlZCB0byBHZW9tZXRyeS4gVXNlIGdlb21ldHJ5LmNlbnRlcigpIGluc3RlYWQuIik7cmV0dXJuIGEuY2VudGVyKCl9fTtsLkltYWdlVXRpbHM9e2Nyb3NzT3JpZ2luOnZvaWQgMCxsb2FkVGV4dHVyZTpmdW5jdGlvbihhLGIsYyxkKXtjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMubG9hZFRleHR1cmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLlRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLiIpOwp2YXIgZT1uZXcgc2Q7ZS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTthPWUubG9hZChhLGMsdm9pZCAwLGQpO2ImJihhLm1hcHBpbmc9Yik7cmV0dXJuIGF9LGxvYWRUZXh0dXJlQ3ViZTpmdW5jdGlvbihhLGIsYyxkKXtjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMubG9hZFRleHR1cmVDdWJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5DdWJlVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7dmFyIGU9bmV3IGFlO2Uuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7YT1lLmxvYWQoYSxjLHZvaWQgMCxkKTtiJiYoYS5tYXBwaW5nPWIpO3JldHVybiBhfSxsb2FkQ29tcHJlc3NlZFRleHR1cmU6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LGxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfX07CmwuUHJvamVjdG9yPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvamVjdG9yIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qcy9yZW5kZXJlcnMvUHJvamVjdG9yLmpzLiIpO3RoaXMucHJvamVjdFZlY3Rvcj1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuUHJvamVjdG9yOiAucHJvamVjdFZlY3RvcigpIGlzIG5vdyB2ZWN0b3IucHJvamVjdCgpLiIpO2EucHJvamVjdChiKX07dGhpcy51bnByb2plY3RWZWN0b3I9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLlByb2plY3RvcjogLnVucHJvamVjdFZlY3RvcigpIGlzIG5vdyB2ZWN0b3IudW5wcm9qZWN0KCkuIik7YS51bnByb2plY3QoYil9O3RoaXMucGlja2luZ1JheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb2plY3RvcjogLnBpY2tpbmdSYXkoKSBpcyBub3cgcmF5Y2FzdGVyLnNldEZyb21DYW1lcmEoKS4iKX19O2wuQ2FudmFzUmVuZGVyZXI9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5DYW52YXNSZW5kZXJlciBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanMvcmVuZGVyZXJzL0NhbnZhc1JlbmRlcmVyLmpzIik7CnRoaXMuZG9tRWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJjYW52YXMiKTt0aGlzLmNsZWFyPWZ1bmN0aW9uKCl7fTt0aGlzLnJlbmRlcj1mdW5jdGlvbigpe307dGhpcy5zZXRDbGVhckNvbG9yPWZ1bmN0aW9uKCl7fTt0aGlzLnNldFNpemU9ZnVuY3Rpb24oKXt9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkobCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KTsK(Line 354)
Message:
THREE.Color: Unknown color gray10
console-api log URL: data:application/x-javascript;base64,LyoqCiAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCiAqLwoKVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWwgPSBmdW5jdGlvbiAoIHBhcmFtZXRlcnMgKSB7CgoJVEhSRUUuTWF0ZXJpYWwuY2FsbCggdGhpcyApOwoKCXRoaXMudHlwZSA9ICdTcHJpdGVDYW52YXNNYXRlcmlhbCc7CgoJdGhpcy5jb2xvciA9IG5ldyBUSFJFRS5Db2xvciggMHhmZmZmZmYgKTsKCXRoaXMucHJvZ3JhbSA9IGZ1bmN0aW9uICggY29udGV4dCwgY29sb3IgKSB7fTsKCgl0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApOwoKfTsKClRIUkVFLlNwcml0ZUNhbnZhc01hdGVyaWFsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFRIUkVFLk1hdGVyaWFsLnByb3RvdHlwZSApOwpUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbDsKClRIUkVFLlNwcml0ZUNhbnZhc01hdGVyaWFsLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKCgl2YXIgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWwoKTsKCgltYXRlcmlhbC5jb3B5KCB0aGlzICk7CgltYXRlcmlhbC5jb2xvci5jb3B5KCB0aGlzLmNvbG9yICk7CgltYXRlcmlhbC5wcm9ncmFtID0gdGhpcy5wcm9ncmFtOwoKCXJldHVybiBtYXRlcmlhbDsKCn07CgovLwoKVEhSRUUuQ2FudmFzUmVuZGVyZXIgPSBmdW5jdGlvbiAoIHBhcmFtZXRlcnMgKSB7CgoJY29uc29sZS5sb2coICdUSFJFRS5DYW52YXNSZW5kZXJlcicsIFRIUkVFLlJFVklTSU9OICk7CgoJcGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgfHwge307CgoJdmFyIF90aGlzID0gdGhpcywKCV9yZW5kZXJEYXRhLCBfZWxlbWVudHMsIF9saWdodHMsCglfcHJvamVjdG9yID0gbmV3IFRIUkVFLlByb2plY3RvcigpLAoKCV9jYW52YXMgPSBwYXJhbWV0ZXJzLmNhbnZhcyAhPT0gdW5kZWZpbmVkCgkJCSA/IHBhcmFtZXRlcnMuY2FudmFzCgkJCSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdjYW52YXMnICksCgoJX2NhbnZhc1dpZHRoID0gX2NhbnZhcy53aWR0aCwKCV9jYW52YXNIZWlnaHQgPSBfY2FudmFzLmhlaWdodCwKCV9jYW52YXNXaWR0aEhhbGYgPSBNYXRoLmZsb29yKCBfY2FudmFzV2lkdGggLyAyICksCglfY2FudmFzSGVpZ2h0SGFsZiA9IE1hdGguZmxvb3IoIF9jYW52YXNIZWlnaHQgLyAyICksCgoJX3ZpZXdwb3J0WCA9IDAsCglfdmlld3BvcnRZID0gMCwKCV92aWV3cG9ydFdpZHRoID0gX2NhbnZhc1dpZHRoLAoJX3ZpZXdwb3J0SGVpZ2h0ID0gX2NhbnZhc0hlaWdodCwKCglfcGl4ZWxSYXRpbyA9IDEsCgoJX2NvbnRleHQgPSBfY2FudmFzLmdldENvbnRleHQoICcyZCcsIHsKCQlhbHBoYTogcGFyYW1ldGVycy5hbHBoYSA9PT0gdHJ1ZQoJfSApLAoKCV9jbGVhckNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKCAweDAwMDAwMCApLAoJX2NsZWFyQWxwaGEgPSBwYXJhbWV0ZXJzLmFscGhhID09PSB0cnVlID8gMCA6IDEsCgoJX2NvbnRleHRHbG9iYWxBbHBoYSA9IDEsCglfY29udGV4dEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IDAsCglfY29udGV4dFN0cm9rZVN0eWxlID0gbnVsbCwKCV9jb250ZXh0RmlsbFN0eWxlID0gbnVsbCwKCV9jb250ZXh0TGluZVdpZHRoID0gbnVsbCwKCV9jb250ZXh0TGluZUNhcCA9IG51bGwsCglfY29udGV4dExpbmVKb2luID0gbnVsbCwKCV9jb250ZXh0TGluZURhc2ggPSBbXSwKCglfY2FtZXJhLAoKCV92MSwgX3YyLCBfdjMsIF92NCwKCV92NSA9IG5ldyBUSFJFRS5SZW5kZXJhYmxlVmVydGV4KCksCglfdjYgPSBuZXcgVEhSRUUuUmVuZGVyYWJsZVZlcnRleCgpLAoKCV92MXgsIF92MXksIF92MngsIF92MnksIF92M3gsIF92M3ksCglfdjR4LCBfdjR5LCBfdjV4LCBfdjV5LCBfdjZ4LCBfdjZ5LAoKCV9jb2xvciA9IG5ldyBUSFJFRS5Db2xvcigpLAoJX2NvbG9yMSA9IG5ldyBUSFJFRS5Db2xvcigpLAoJX2NvbG9yMiA9IG5ldyBUSFJFRS5Db2xvcigpLAoJX2NvbG9yMyA9IG5ldyBUSFJFRS5Db2xvcigpLAoJX2NvbG9yNCA9IG5ldyBUSFJFRS5Db2xvcigpLAoKCV9kaWZmdXNlQ29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoKSwKCV9lbWlzc2l2ZUNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKCksCgoJX2xpZ2h0Q29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoKSwKCglfcGF0dGVybnMgPSB7fSwKCglfaW1hZ2UsIF91dnMsCglfdXYxeCwgX3V2MXksIF91djJ4LCBfdXYyeSwgX3V2M3gsIF91djN5LAoKCV9jbGlwQm94ID0gbmV3IFRIUkVFLkJveDIoKSwKCV9jbGVhckJveCA9IG5ldyBUSFJFRS5Cb3gyKCksCglfZWxlbUJveCA9IG5ldyBUSFJFRS5Cb3gyKCksCgoJX2FtYmllbnRMaWdodCA9IG5ldyBUSFJFRS5Db2xvcigpLAoJX2RpcmVjdGlvbmFsTGlnaHRzID0gbmV3IFRIUkVFLkNvbG9yKCksCglfcG9pbnRMaWdodHMgPSBuZXcgVEhSRUUuQ29sb3IoKSwKCglfdmVjdG9yMyA9IG5ldyBUSFJFRS5WZWN0b3IzKCksIC8vIE5lZWRlZCBmb3IgUG9pbnRMaWdodAoJX2NlbnRyb2lkID0gbmV3IFRIUkVFLlZlY3RvcjMoKSwKCV9ub3JtYWwgPSBuZXcgVEhSRUUuVmVjdG9yMygpLAoJX25vcm1hbFZpZXdNYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4MygpOwoKCS8qIFRPRE8KCV9jYW52YXMubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7CglfY2FudmFzLndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlOwoJX2NhbnZhcy5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlOwoJX2NhbnZhcy5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTsKCSovCgoJLy8gZGFzaCtnYXAgZmFsbGJhY2tzIGZvciBGaXJlZm94IGFuZCBldmVyeXRoaW5nIGVsc2UKCglpZiAoIF9jb250ZXh0LnNldExpbmVEYXNoID09PSB1bmRlZmluZWQgKSB7CgoJCV9jb250ZXh0LnNldExpbmVEYXNoID0gZnVuY3Rpb24gKCkge307CgoJfQoKCXRoaXMuZG9tRWxlbWVudCA9IF9jYW52YXM7CgoJdGhpcy5hdXRvQ2xlYXIgPSB0cnVlOwoJdGhpcy5zb3J0T2JqZWN0cyA9IHRydWU7Cgl0aGlzLnNvcnRFbGVtZW50cyA9IHRydWU7CgoJdGhpcy5pbmZvID0gewoKCQlyZW5kZXI6IHsKCgkJCXZlcnRpY2VzOiAwLAoJCQlmYWNlczogMAoKCQl9CgoJfTsKCgkvLyBXZWJHTFJlbmRlcmVyIGNvbXBhdGliaWxpdHkKCgl0aGlzLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMgPSBmdW5jdGlvbiAoKSB7fTsKCXRoaXMuc2V0RmFjZUN1bGxpbmcgPSBmdW5jdGlvbiAoKSB7fTsKCgkvLyBBUEkKCgl0aGlzLmdldENvbnRleHQgPSBmdW5jdGlvbiAoKSB7CgoJCXJldHVybiBfY29udGV4dDsKCgl9OwoKCXRoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoKSB7CgoJCXJldHVybiBfY29udGV4dC5nZXRDb250ZXh0QXR0cmlidXRlcygpOwoKCX07CgoJdGhpcy5nZXRQaXhlbFJhdGlvID0gZnVuY3Rpb24gKCkgewoKCQlyZXR1cm4gX3BpeGVsUmF0aW87CgoJfTsKCgl0aGlzLnNldFBpeGVsUmF0aW8gPSBmdW5jdGlvbiAoIHZhbHVlICkgewoKCQlpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSBfcGl4ZWxSYXRpbyA9IHZhbHVlOwoKCX07CgoJdGhpcy5zZXRTaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0LCB1cGRhdGVTdHlsZSApIHsKCgkJX2NhbnZhc1dpZHRoID0gd2lkdGggKiBfcGl4ZWxSYXRpbzsKCQlfY2FudmFzSGVpZ2h0ID0gaGVpZ2h0ICogX3BpeGVsUmF0aW87CgoJCV9jYW52YXMud2lkdGggPSBfY2FudmFzV2lkdGg7CgkJX2NhbnZhcy5oZWlnaHQgPSBfY2FudmFzSGVpZ2h0OwoKCQlfY2FudmFzV2lkdGhIYWxmID0gTWF0aC5mbG9vciggX2NhbnZhc1dpZHRoIC8gMiApOwoJCV9jYW52YXNIZWlnaHRIYWxmID0gTWF0aC5mbG9vciggX2NhbnZhc0hlaWdodCAvIDIgKTsKCgkJaWYgKCB1cGRhdGVTdHlsZSAhPT0gZmFsc2UgKSB7CgoJCQlfY2FudmFzLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnOwoJCQlfY2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7CgoJCX0KCgkJX2NsaXBCb3gubWluLnNldCggLSBfY2FudmFzV2lkdGhIYWxmLCAtIF9jYW52YXNIZWlnaHRIYWxmICk7CgkJX2NsaXBCb3gubWF4LnNldCggICBfY2FudmFzV2lkdGhIYWxmLCAgIF9jYW52YXNIZWlnaHRIYWxmICk7CgoJCV9jbGVhckJveC5taW4uc2V0KCAtIF9jYW52YXNXaWR0aEhhbGYsIC0gX2NhbnZhc0hlaWdodEhhbGYgKTsKCQlfY2xlYXJCb3gubWF4LnNldCggICBfY2FudmFzV2lkdGhIYWxmLCAgIF9jYW52YXNIZWlnaHRIYWxmICk7CgoJCV9jb250ZXh0R2xvYmFsQWxwaGEgPSAxOwoJCV9jb250ZXh0R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gMDsKCQlfY29udGV4dFN0cm9rZVN0eWxlID0gbnVsbDsKCQlfY29udGV4dEZpbGxTdHlsZSA9IG51bGw7CgkJX2NvbnRleHRMaW5lV2lkdGggPSBudWxsOwoJCV9jb250ZXh0TGluZUNhcCA9IG51bGw7CgkJX2NvbnRleHRMaW5lSm9pbiA9IG51bGw7CgoJCXRoaXMuc2V0Vmlld3BvcnQoIDAsIDAsIHdpZHRoLCBoZWlnaHQgKTsKCgl9OwoKCXRoaXMuc2V0Vmlld3BvcnQgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQgKSB7CgoJCV92aWV3cG9ydFggPSB4ICogX3BpeGVsUmF0aW87CgkJX3ZpZXdwb3J0WSA9IHkgKiBfcGl4ZWxSYXRpbzsKCgkJX3ZpZXdwb3J0V2lkdGggPSB3aWR0aCAqIF9waXhlbFJhdGlvOwoJCV92aWV3cG9ydEhlaWdodCA9IGhlaWdodCAqIF9waXhlbFJhdGlvOwoKCX07CgoJdGhpcy5zZXRTY2lzc29yID0gZnVuY3Rpb24gKCkge307Cgl0aGlzLnNldFNjaXNzb3JUZXN0ID0gZnVuY3Rpb24gKCkge307CgoJdGhpcy5zZXRDbGVhckNvbG9yID0gZnVuY3Rpb24gKCBjb2xvciwgYWxwaGEgKSB7CgoJCV9jbGVhckNvbG9yLnNldCggY29sb3IgKTsKCQlfY2xlYXJBbHBoYSA9IGFscGhhICE9PSB1bmRlZmluZWQgPyBhbHBoYSA6IDE7CgoJCV9jbGVhckJveC5taW4uc2V0KCAtIF9jYW52YXNXaWR0aEhhbGYsIC0gX2NhbnZhc0hlaWdodEhhbGYgKTsKCQlfY2xlYXJCb3gubWF4LnNldCggICBfY2FudmFzV2lkdGhIYWxmLCAgIF9jYW52YXNIZWlnaHRIYWxmICk7CgoJfTsKCgl0aGlzLnNldENsZWFyQ29sb3JIZXggPSBmdW5jdGlvbiAoIGhleCwgYWxwaGEgKSB7CgoJCWNvbnNvbGUud2FybiggJ1RIUkVFLkNhbnZhc1JlbmRlcmVyOiAuc2V0Q2xlYXJDb2xvckhleCgpIGlzIGJlaW5nIHJlbW92ZWQuIFVzZSAuc2V0Q2xlYXJDb2xvcigpIGluc3RlYWQuJyApOwoJCXRoaXMuc2V0Q2xlYXJDb2xvciggaGV4LCBhbHBoYSApOwoKCX07CgoJdGhpcy5nZXRDbGVhckNvbG9yID0gZnVuY3Rpb24gKCkgewoKCQlyZXR1cm4gX2NsZWFyQ29sb3I7CgoJfTsKCgl0aGlzLmdldENsZWFyQWxwaGEgPSBmdW5jdGlvbiAoKSB7CgoJCXJldHVybiBfY2xlYXJBbHBoYTsKCgl9OwoKCXRoaXMuZ2V0TWF4QW5pc290cm9weSA9IGZ1bmN0aW9uICgpIHsKCgkJcmV0dXJuIDA7CgoJfTsKCgl0aGlzLmNsZWFyID0gZnVuY3Rpb24gKCkgewoKCQlpZiAoIF9jbGVhckJveC5pc0VtcHR5KCkgPT09IGZhbHNlICkgewoKCQkJX2NsZWFyQm94LmludGVyc2VjdCggX2NsaXBCb3ggKTsKCQkJX2NsZWFyQm94LmV4cGFuZEJ5U2NhbGFyKCAyICk7CgoJCQlfY2xlYXJCb3gubWluLnggPSBfY2xlYXJCb3gubWluLnggKyBfY2FudmFzV2lkdGhIYWxmOwoJCQlfY2xlYXJCb3gubWluLnkgPSAgLSBfY2xlYXJCb3gubWluLnkgKyBfY2FudmFzSGVpZ2h0SGFsZjsJCS8vIGhpZ2hlciB5IHZhbHVlICEKCQkJX2NsZWFyQm94Lm1heC54ID0gX2NsZWFyQm94Lm1heC54ICsgX2NhbnZhc1dpZHRoSGFsZjsKCQkJX2NsZWFyQm94Lm1heC55ID0gIC0gX2NsZWFyQm94Lm1heC55ICsgX2NhbnZhc0hlaWdodEhhbGY7CQkvLyBsb3dlciB5IHZhbHVlICEKCgkJCWlmICggX2NsZWFyQWxwaGEgPCAxICkgewoKCQkJCV9jb250ZXh0LmNsZWFyUmVjdCgKCQkJCQlfY2xlYXJCb3gubWluLnggfCAwLAoJCQkJCV9jbGVhckJveC5tYXgueSB8IDAsCgkJCQkJKCBfY2xlYXJCb3gubWF4LnggLSBfY2xlYXJCb3gubWluLnggKSB8IDAsCgkJCQkJKCBfY2xlYXJCb3gubWluLnkgLSBfY2xlYXJCb3gubWF4LnkgKSB8IDAKCQkJCSk7CgoJCQl9CgoJCQlpZiAoIF9jbGVhckFscGhhID4gMCApIHsKCgkJCQlzZXRCbGVuZGluZyggVEhSRUUuTm9ybWFsQmxlbmRpbmcgKTsKCQkJCXNldE9wYWNpdHkoIDEgKTsKCgkJCQlzZXRGaWxsU3R5bGUoICdyZ2JhKCcgKyBNYXRoLmZsb29yKCBfY2xlYXJDb2xvci5yICogMjU1ICkgKyAnLCcgKyBNYXRoLmZsb29yKCBfY2xlYXJDb2xvci5nICogMjU1ICkgKyAnLCcgKyBNYXRoLmZsb29yKCBfY2xlYXJDb2xvci5iICogMjU1ICkgKyAnLCcgKyBfY2xlYXJBbHBoYSArICcpJyApOwoKCQkJCV9jb250ZXh0LmZpbGxSZWN0KAoJCQkJCV9jbGVhckJveC5taW4ueCB8IDAsCgkJCQkJX2NsZWFyQm94Lm1heC55IHwgMCwKCQkJCQkoIF9jbGVhckJveC5tYXgueCAtIF9jbGVhckJveC5taW4ueCApIHwgMCwKCQkJCQkoIF9jbGVhckJveC5taW4ueSAtIF9jbGVhckJveC5tYXgueSApIHwgMAoJCQkJKTsKCgkJCX0KCgkJCV9jbGVhckJveC5tYWtlRW1wdHkoKTsKCgkJfQoKCX07CgoJLy8gY29tcGF0aWJpbGl0eQoKCXRoaXMuY2xlYXJDb2xvciA9IGZ1bmN0aW9uICgpIHt9OwoJdGhpcy5jbGVhckRlcHRoID0gZnVuY3Rpb24gKCkge307Cgl0aGlzLmNsZWFyU3RlbmNpbCA9IGZ1bmN0aW9uICgpIHt9OwoKCXRoaXMucmVuZGVyID0gZnVuY3Rpb24gKCBzY2VuZSwgY2FtZXJhICkgewoKCQlpZiAoIGNhbWVyYSBpbnN0YW5jZW9mIFRIUkVFLkNhbWVyYSA9PT0gZmFsc2UgKSB7CgoJCQljb25zb2xlLmVycm9yKCAnVEhSRUUuQ2FudmFzUmVuZGVyZXIucmVuZGVyOiBjYW1lcmEgaXMgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkNhbWVyYS4nICk7CgkJCXJldHVybjsKCgkJfQoKCQl2YXIgYmFja2dyb3VuZCA9IHNjZW5lLmJhY2tncm91bmQ7CgoJCWlmICggYmFja2dyb3VuZCAmJiBiYWNrZ3JvdW5kLmlzQ29sb3IgKSB7CgoJCQlzZXRGaWxsU3R5bGUoICdyZ2IoJyArIE1hdGguZmxvb3IoIGJhY2tncm91bmQuciAqIDI1NSApICsgJywnICsgTWF0aC5mbG9vciggYmFja2dyb3VuZC5nICogMjU1ICkgKyAnLCcgKyBNYXRoLmZsb29yKCBiYWNrZ3JvdW5kLmIgKiAyNTUgKSArICcpJyApOwoJCQlfY29udGV4dC5maWxsUmVjdCggMCwgMCwgX2NhbnZhc1dpZHRoLCBfY2FudmFzSGVpZ2h0ICk7CgoJCX0gZWxzZSBpZiAoIHRoaXMuYXV0b0NsZWFyID09PSB0cnVlICkgewoKCQkJdGhpcy5jbGVhcigpOwoKCQl9CgoJCV90aGlzLmluZm8ucmVuZGVyLnZlcnRpY2VzID0gMDsKCQlfdGhpcy5pbmZvLnJlbmRlci5mYWNlcyA9IDA7CgoJCV9jb250ZXh0LnNldFRyYW5zZm9ybSggX3ZpZXdwb3J0V2lkdGggLyBfY2FudmFzV2lkdGgsIDAsIDAsIC0gX3ZpZXdwb3J0SGVpZ2h0IC8gX2NhbnZhc0hlaWdodCwgX3ZpZXdwb3J0WCwgX2NhbnZhc0hlaWdodCAtIF92aWV3cG9ydFkgKTsKCQlfY29udGV4dC50cmFuc2xhdGUoIF9jYW52YXNXaWR0aEhhbGYsIF9jYW52YXNIZWlnaHRIYWxmICk7CgoJCV9yZW5kZXJEYXRhID0gX3Byb2plY3Rvci5wcm9qZWN0U2NlbmUoIHNjZW5lLCBjYW1lcmEsIHRoaXMuc29ydE9iamVjdHMsIHRoaXMuc29ydEVsZW1lbnRzICk7CgkJX2VsZW1lbnRzID0gX3JlbmRlckRhdGEuZWxlbWVudHM7CgkJX2xpZ2h0cyA9IF9yZW5kZXJEYXRhLmxpZ2h0czsKCQlfY2FtZXJhID0gY2FtZXJhOwoKCQlfbm9ybWFsVmlld01hdHJpeC5nZXROb3JtYWxNYXRyaXgoIGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UgKTsKCgkJLyogREVCVUcKCQlzZXRGaWxsU3R5bGUoICdyZ2JhKCAwLCAyNTUsIDI1NSwgMC41ICknICk7CgkJX2NvbnRleHQuZmlsbFJlY3QoIF9jbGlwQm94Lm1pbi54LCBfY2xpcEJveC5taW4ueSwgX2NsaXBCb3gubWF4LnggLSBfY2xpcEJveC5taW4ueCwgX2NsaXBCb3gubWF4LnkgLSBfY2xpcEJveC5taW4ueSApOwoJCSovCgoJCWNhbGN1bGF0ZUxpZ2h0cygpOwoKCQlmb3IgKCB2YXIgZSA9IDAsIGVsID0gX2VsZW1lbnRzLmxlbmd0aDsgZSA8IGVsOyBlICsrICkgewoKCQkJdmFyIGVsZW1lbnQgPSBfZWxlbWVudHNbIGUgXTsKCgkJCXZhciBtYXRlcmlhbCA9IGVsZW1lbnQubWF0ZXJpYWw7CgoJCQlpZiAoIG1hdGVyaWFsID09PSB1bmRlZmluZWQgfHwgbWF0ZXJpYWwub3BhY2l0eSA9PT0gMCApIGNvbnRpbnVlOwoKCQkJX2VsZW1Cb3gubWFrZUVtcHR5KCk7CgoJCQlpZiAoIGVsZW1lbnQgaW5zdGFuY2VvZiBUSFJFRS5SZW5kZXJhYmxlU3ByaXRlICkgewoKCQkJCV92MSA9IGVsZW1lbnQ7CgkJCQlfdjEueCAqPSBfY2FudmFzV2lkdGhIYWxmOyBfdjEueSAqPSBfY2FudmFzSGVpZ2h0SGFsZjsKCgkJCQlyZW5kZXJTcHJpdGUoIF92MSwgZWxlbWVudCwgbWF0ZXJpYWwgKTsKCgkJCX0gZWxzZSBpZiAoIGVsZW1lbnQgaW5zdGFuY2VvZiBUSFJFRS5SZW5kZXJhYmxlTGluZSApIHsKCgkJCQlfdjEgPSBlbGVtZW50LnYxOyBfdjIgPSBlbGVtZW50LnYyOwoKCQkJCV92MS5wb3NpdGlvblNjcmVlbi54ICo9IF9jYW52YXNXaWR0aEhhbGY7IF92MS5wb3NpdGlvblNjcmVlbi55ICo9IF9jYW52YXNIZWlnaHRIYWxmOwoJCQkJX3YyLnBvc2l0aW9uU2NyZWVuLnggKj0gX2NhbnZhc1dpZHRoSGFsZjsgX3YyLnBvc2l0aW9uU2NyZWVuLnkgKj0gX2NhbnZhc0hlaWdodEhhbGY7CgoJCQkJX2VsZW1Cb3guc2V0RnJvbVBvaW50cyggWwoJCQkJCV92MS5wb3NpdGlvblNjcmVlbiwKCQkJCQlfdjIucG9zaXRpb25TY3JlZW4KCQkJCV0gKTsKCgkJCQlpZiAoIF9jbGlwQm94LmludGVyc2VjdHNCb3goIF9lbGVtQm94ICkgPT09IHRydWUgKSB7CgoJCQkJCXJlbmRlckxpbmUoIF92MSwgX3YyLCBlbGVtZW50LCBtYXRlcmlhbCApOwoKCQkJCX0KCgkJCX0gZWxzZSBpZiAoIGVsZW1lbnQgaW5zdGFuY2VvZiBUSFJFRS5SZW5kZXJhYmxlRmFjZSApIHsKCgkJCQlfdjEgPSBlbGVtZW50LnYxOyBfdjIgPSBlbGVtZW50LnYyOyBfdjMgPSBlbGVtZW50LnYzOwoKCQkJCWlmICggX3YxLnBvc2l0aW9uU2NyZWVuLnogPCAtIDEgfHwgX3YxLnBvc2l0aW9uU2NyZWVuLnogPiAxICkgY29udGludWU7CgkJCQlpZiAoIF92Mi5wb3NpdGlvblNjcmVlbi56IDwgLSAxIHx8IF92Mi5wb3NpdGlvblNjcmVlbi56ID4gMSApIGNvbnRpbnVlOwoJCQkJaWYgKCBfdjMucG9zaXRpb25TY3JlZW4ueiA8IC0gMSB8fCBfdjMucG9zaXRpb25TY3JlZW4ueiA+IDEgKSBjb250aW51ZTsKCgkJCQlfdjEucG9zaXRpb25TY3JlZW4ueCAqPSBfY2FudmFzV2lkdGhIYWxmOyBfdjEucG9zaXRpb25TY3JlZW4ueSAqPSBfY2FudmFzSGVpZ2h0SGFsZjsKCQkJCV92Mi5wb3NpdGlvblNjcmVlbi54ICo9IF9jYW52YXNXaWR0aEhhbGY7IF92Mi5wb3NpdGlvblNjcmVlbi55ICo9IF9jYW52YXNIZWlnaHRIYWxmOwoJCQkJX3YzLnBvc2l0aW9uU2NyZWVuLnggKj0gX2NhbnZhc1dpZHRoSGFsZjsgX3YzLnBvc2l0aW9uU2NyZWVuLnkgKj0gX2NhbnZhc0hlaWdodEhhbGY7CgoJCQkJaWYgKCBtYXRlcmlhbC5vdmVyZHJhdyA+IDAgKSB7CgoJCQkJCWV4cGFuZCggX3YxLnBvc2l0aW9uU2NyZWVuLCBfdjIucG9zaXRpb25TY3JlZW4sIG1hdGVyaWFsLm92ZXJkcmF3ICk7CgkJCQkJZXhwYW5kKCBfdjIucG9zaXRpb25TY3JlZW4sIF92My5wb3NpdGlvblNjcmVlbiwgbWF0ZXJpYWwub3ZlcmRyYXcgKTsKCQkJCQlleHBhbmQoIF92My5wb3NpdGlvblNjcmVlbiwgX3YxLnBvc2l0aW9uU2NyZWVuLCBtYXRlcmlhbC5vdmVyZHJhdyApOwoKCQkJCX0KCgkJCQlfZWxlbUJveC5zZXRGcm9tUG9pbnRzKCBbCgkJCQkJX3YxLnBvc2l0aW9uU2NyZWVuLAoJCQkJCV92Mi5wb3NpdGlvblNjcmVlbiwKCQkJCQlfdjMucG9zaXRpb25TY3JlZW4KCQkJCV0gKTsKCgkJCQlpZiAoIF9jbGlwQm94LmludGVyc2VjdHNCb3goIF9lbGVtQm94ICkgPT09IHRydWUgKSB7CgoJCQkJCXJlbmRlckZhY2UzKCBfdjEsIF92MiwgX3YzLCAwLCAxLCAyLCBlbGVtZW50LCBtYXRlcmlhbCApOwoKCQkJCX0KCgkJCX0KCgkJCS8qIERFQlVHCgkJCXNldExpbmVXaWR0aCggMSApOwoJCQlzZXRTdHJva2VTdHlsZSggJ3JnYmEoIDAsIDI1NSwgMCwgMC41ICknICk7CgkJCV9jb250ZXh0LnN0cm9rZVJlY3QoIF9lbGVtQm94Lm1pbi54LCBfZWxlbUJveC5taW4ueSwgX2VsZW1Cb3gubWF4LnggLSBfZWxlbUJveC5taW4ueCwgX2VsZW1Cb3gubWF4LnkgLSBfZWxlbUJveC5taW4ueSApOwoJCQkqLwoKCQkJX2NsZWFyQm94LnVuaW9uKCBfZWxlbUJveCApOwoKCQl9CgoJCS8qIERFQlVHCgkJc2V0TGluZVdpZHRoKCAxICk7CgkJc2V0U3Ryb2tlU3R5bGUoICdyZ2JhKCAyNTUsIDAsIDAsIDAuNSApJyApOwoJCV9jb250ZXh0LnN0cm9rZVJlY3QoIF9jbGVhckJveC5taW4ueCwgX2NsZWFyQm94Lm1pbi55LCBfY2xlYXJCb3gubWF4LnggLSBfY2xlYXJCb3gubWluLngsIF9jbGVhckJveC5tYXgueSAtIF9jbGVhckJveC5taW4ueSApOwoJCSovCgoJCV9jb250ZXh0LnNldFRyYW5zZm9ybSggMSwgMCwgMCwgMSwgMCwgMCApOwoKCX07CgoJLy8KCglmdW5jdGlvbiBjYWxjdWxhdGVMaWdodHMoKSB7CgoJCV9hbWJpZW50TGlnaHQuc2V0UkdCKCAwLCAwLCAwICk7CgkJX2RpcmVjdGlvbmFsTGlnaHRzLnNldFJHQiggMCwgMCwgMCApOwoJCV9wb2ludExpZ2h0cy5zZXRSR0IoIDAsIDAsIDAgKTsKCgkJZm9yICggdmFyIGwgPSAwLCBsbCA9IF9saWdodHMubGVuZ3RoOyBsIDwgbGw7IGwgKysgKSB7CgoJCQl2YXIgbGlnaHQgPSBfbGlnaHRzWyBsIF07CgkJCXZhciBsaWdodENvbG9yID0gbGlnaHQuY29sb3I7CgoJCQlpZiAoIGxpZ2h0IGluc3RhbmNlb2YgVEhSRUUuQW1iaWVudExpZ2h0ICkgewoKCQkJCV9hbWJpZW50TGlnaHQuYWRkKCBsaWdodENvbG9yICk7CgoJCQl9IGVsc2UgaWYgKCBsaWdodCBpbnN0YW5jZW9mIFRIUkVFLkRpcmVjdGlvbmFsTGlnaHQgKSB7CgoJCQkJLy8gZm9yIHNwcml0ZXMKCgkJCQlfZGlyZWN0aW9uYWxMaWdodHMuYWRkKCBsaWdodENvbG9yICk7CgoJCQl9IGVsc2UgaWYgKCBsaWdodCBpbnN0YW5jZW9mIFRIUkVFLlBvaW50TGlnaHQgKSB7CgoJCQkJLy8gZm9yIHNwcml0ZXMKCgkJCQlfcG9pbnRMaWdodHMuYWRkKCBsaWdodENvbG9yICk7CgoJCQl9CgoJCX0KCgl9CgoJZnVuY3Rpb24gY2FsY3VsYXRlTGlnaHQoIHBvc2l0aW9uLCBub3JtYWwsIGNvbG9yICkgewoKCQlmb3IgKCB2YXIgbCA9IDAsIGxsID0gX2xpZ2h0cy5sZW5ndGg7IGwgPCBsbDsgbCArKyApIHsKCgkJCXZhciBsaWdodCA9IF9saWdodHNbIGwgXTsKCgkJCV9saWdodENvbG9yLmNvcHkoIGxpZ2h0LmNvbG9yICk7CgoJCQlpZiAoIGxpZ2h0IGluc3RhbmNlb2YgVEhSRUUuRGlyZWN0aW9uYWxMaWdodCApIHsKCgkJCQl2YXIgbGlnaHRQb3NpdGlvbiA9IF92ZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQubWF0cml4V29ybGQgKS5ub3JtYWxpemUoKTsKCgkJCQl2YXIgYW1vdW50ID0gbm9ybWFsLmRvdCggbGlnaHRQb3NpdGlvbiApOwoKCQkJCWlmICggYW1vdW50IDw9IDAgKSBjb250aW51ZTsKCgkJCQlhbW91bnQgKj0gbGlnaHQuaW50ZW5zaXR5OwoKCQkJCWNvbG9yLmFkZCggX2xpZ2h0Q29sb3IubXVsdGlwbHlTY2FsYXIoIGFtb3VudCApICk7CgoJCQl9IGVsc2UgaWYgKCBsaWdodCBpbnN0YW5jZW9mIFRIUkVFLlBvaW50TGlnaHQgKSB7CgoJCQkJdmFyIGxpZ2h0UG9zaXRpb24gPSBfdmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGxpZ2h0Lm1hdHJpeFdvcmxkICk7CgoJCQkJdmFyIGFtb3VudCA9IG5vcm1hbC5kb3QoIF92ZWN0b3IzLnN1YlZlY3RvcnMoIGxpZ2h0UG9zaXRpb24sIHBvc2l0aW9uICkubm9ybWFsaXplKCkgKTsKCgkJCQlpZiAoIGFtb3VudCA8PSAwICkgY29udGludWU7CgoJCQkJYW1vdW50ICo9IGxpZ2h0LmRpc3RhbmNlID09IDAgPyAxIDogMSAtIE1hdGgubWluKCBwb3NpdGlvbi5kaXN0YW5jZVRvKCBsaWdodFBvc2l0aW9uICkgLyBsaWdodC5kaXN0YW5jZSwgMSApOwoKCQkJCWlmICggYW1vdW50ID09IDAgKSBjb250aW51ZTsKCgkJCQlhbW91bnQgKj0gbGlnaHQuaW50ZW5zaXR5OwoKCQkJCWNvbG9yLmFkZCggX2xpZ2h0Q29sb3IubXVsdGlwbHlTY2FsYXIoIGFtb3VudCApICk7CgoJCQl9CgoJCX0KCgl9CgoJZnVuY3Rpb24gcmVuZGVyU3ByaXRlKCB2MSwgZWxlbWVudCwgbWF0ZXJpYWwgKSB7CgoJCXNldE9wYWNpdHkoIG1hdGVyaWFsLm9wYWNpdHkgKTsKCQlzZXRCbGVuZGluZyggbWF0ZXJpYWwuYmxlbmRpbmcgKTsKCgkJdmFyIHNjYWxlWCA9IGVsZW1lbnQuc2NhbGUueCAqIF9jYW52YXNXaWR0aEhhbGY7CgkJdmFyIHNjYWxlWSA9IGVsZW1lbnQuc2NhbGUueSAqIF9jYW52YXNIZWlnaHRIYWxmOwoKCQl2YXIgZGlzdCA9IDAuNSAqIE1hdGguc3FydCggc2NhbGVYICogc2NhbGVYICsgc2NhbGVZICogc2NhbGVZICk7IC8vIGFsbG93IGZvciByb3RhdGVkIHNwcml0ZQoJCV9lbGVtQm94Lm1pbi5zZXQoIHYxLnggLSBkaXN0LCB2MS55IC0gZGlzdCApOwoJCV9lbGVtQm94Lm1heC5zZXQoIHYxLnggKyBkaXN0LCB2MS55ICsgZGlzdCApOwoKCQlpZiAoIG1hdGVyaWFsIGluc3RhbmNlb2YgVEhSRUUuU3ByaXRlTWF0ZXJpYWwgKSB7CgoJCQl2YXIgdGV4dHVyZSA9IG1hdGVyaWFsLm1hcDsKCgkJCWlmICggdGV4dHVyZSAhPT0gbnVsbCApIHsKCgkJCQl2YXIgcGF0dGVybiA9IF9wYXR0ZXJuc1sgdGV4dHVyZS5pZCBdOwoKCQkJCWlmICggcGF0dGVybiA9PT0gdW5kZWZpbmVkIHx8IHBhdHRlcm4udmVyc2lvbiAhPT0gdGV4dHVyZS52ZXJzaW9uICkgewoKCQkJCQlwYXR0ZXJuID0gdGV4dHVyZVRvUGF0dGVybiggdGV4dHVyZSApOwoJCQkJCV9wYXR0ZXJuc1sgdGV4dHVyZS5pZCBdID0gcGF0dGVybjsKCgkJCQl9CgoJCQkJaWYgKCBwYXR0ZXJuLmNhbnZhcyAhPT0gdW5kZWZpbmVkICkgewoKCQkJCQlzZXRGaWxsU3R5bGUoIHBhdHRlcm4uY2FudmFzICk7CgoJCQkJCXZhciBiaXRtYXAgPSB0ZXh0dXJlLmltYWdlOwoKCQkJCQl2YXIgb3ggPSBiaXRtYXAud2lkdGggKiB0ZXh0dXJlLm9mZnNldC54OwoJCQkJCXZhciBveSA9IGJpdG1hcC5oZWlnaHQgKiB0ZXh0dXJlLm9mZnNldC55OwoKCQkJCQl2YXIgc3ggPSBiaXRtYXAud2lkdGggKiB0ZXh0dXJlLnJlcGVhdC54OwoJCQkJCXZhciBzeSA9IGJpdG1hcC5oZWlnaHQgKiB0ZXh0dXJlLnJlcGVhdC55OwoKCQkJCQl2YXIgY3ggPSBzY2FsZVggLyBzeDsKCQkJCQl2YXIgY3kgPSBzY2FsZVkgLyBzeTsKCgkJCQkJX2NvbnRleHQuc2F2ZSgpOwoJCQkJCV9jb250ZXh0LnRyYW5zbGF0ZSggdjEueCwgdjEueSApOwoJCQkJCWlmICggbWF0ZXJpYWwucm90YXRpb24gIT09IDAgKSBfY29udGV4dC5yb3RhdGUoIG1hdGVyaWFsLnJvdGF0aW9uICk7CgkJCQkJX2NvbnRleHQudHJhbnNsYXRlKCAtIHNjYWxlWCAvIDIsIC0gc2NhbGVZIC8gMiApOwoJCQkJCV9jb250ZXh0LnNjYWxlKCBjeCwgY3kgKTsKCQkJCQlfY29udGV4dC50cmFuc2xhdGUoIC0gb3gsIC0gb3kgKTsKCQkJCQlfY29udGV4dC5maWxsUmVjdCggb3gsIG95LCBzeCwgc3kgKTsKCQkJCQlfY29udGV4dC5yZXN0b3JlKCk7CgoJCQkJfQoKCQkJfSBlbHNlIHsKCgkJCQkvLyBubyB0ZXh0dXJlCgoJCQkJc2V0RmlsbFN0eWxlKCBtYXRlcmlhbC5jb2xvci5nZXRTdHlsZSgpICk7CgoJCQkJX2NvbnRleHQuc2F2ZSgpOwoJCQkJX2NvbnRleHQudHJhbnNsYXRlKCB2MS54LCB2MS55ICk7CgkJCQlpZiAoIG1hdGVyaWFsLnJvdGF0aW9uICE9PSAwICkgX2NvbnRleHQucm90YXRlKCBtYXRlcmlhbC5yb3RhdGlvbiApOwoJCQkJX2NvbnRleHQuc2NhbGUoIHNjYWxlWCwgLSBzY2FsZVkgKTsKCQkJCV9jb250ZXh0LmZpbGxSZWN0KCAtIDAuNSwgLSAwLjUsIDEsIDEgKTsKCQkJCV9jb250ZXh0LnJlc3RvcmUoKTsKCgkJCX0KCgkJfSBlbHNlIGlmICggbWF0ZXJpYWwgaW5zdGFuY2VvZiBUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbCApIHsKCgkJCXNldFN0cm9rZVN0eWxlKCBtYXRlcmlhbC5jb2xvci5nZXRTdHlsZSgpICk7CgkJCXNldEZpbGxTdHlsZSggbWF0ZXJpYWwuY29sb3IuZ2V0U3R5bGUoKSApOwoKCQkJX2NvbnRleHQuc2F2ZSgpOwoJCQlfY29udGV4dC50cmFuc2xhdGUoIHYxLngsIHYxLnkgKTsKCQkJaWYgKCBtYXRlcmlhbC5yb3RhdGlvbiAhPT0gMCApIF9jb250ZXh0LnJvdGF0ZSggbWF0ZXJpYWwucm90YXRpb24gKTsKCQkJX2NvbnRleHQuc2NhbGUoIHNjYWxlWCwgc2NhbGVZICk7CgoJCQltYXRlcmlhbC5wcm9ncmFtKCBfY29udGV4dCApOwoKCQkJX2NvbnRleHQucmVzdG9yZSgpOwoKCQl9CgoJCS8qIERFQlVHCgkJc2V0U3Ryb2tlU3R5bGUoICdyZ2IoMjU1LDI1NSwwKScgKTsKCQlfY29udGV4dC5iZWdpblBhdGgoKTsKCQlfY29udGV4dC5tb3ZlVG8oIHYxLnggLSAxMCwgdjEueSApOwoJCV9jb250ZXh0LmxpbmVUbyggdjEueCArIDEwLCB2MS55ICk7CgkJX2NvbnRleHQubW92ZVRvKCB2MS54LCB2MS55IC0gMTAgKTsKCQlfY29udGV4dC5saW5lVG8oIHYxLngsIHYxLnkgKyAxMCApOwoJCV9jb250ZXh0LnN0cm9rZSgpOwoJCSovCgoJfQoKCWZ1bmN0aW9uIHJlbmRlckxpbmUoIHYxLCB2MiwgZWxlbWVudCwgbWF0ZXJpYWwgKSB7CgoJCXNldE9wYWNpdHkoIG1hdGVyaWFsLm9wYWNpdHkgKTsKCQlzZXRCbGVuZGluZyggbWF0ZXJpYWwuYmxlbmRpbmcgKTsKCgkJX2NvbnRleHQuYmVnaW5QYXRoKCk7CgkJX2NvbnRleHQubW92ZVRvKCB2MS5wb3NpdGlvblNjcmVlbi54LCB2MS5wb3NpdGlvblNjcmVlbi55ICk7CgkJX2NvbnRleHQubGluZVRvKCB2Mi5wb3NpdGlvblNjcmVlbi54LCB2Mi5wb3NpdGlvblNjcmVlbi55ICk7CgoJCWlmICggbWF0ZXJpYWwgaW5zdGFuY2VvZiBUSFJFRS5MaW5lQmFzaWNNYXRlcmlhbCApIHsKCgkJCXNldExpbmVXaWR0aCggbWF0ZXJpYWwubGluZXdpZHRoICk7CgkJCXNldExpbmVDYXAoIG1hdGVyaWFsLmxpbmVjYXAgKTsKCQkJc2V0TGluZUpvaW4oIG1hdGVyaWFsLmxpbmVqb2luICk7CgoJCQlpZiAoIG1hdGVyaWFsLnZlcnRleENvbG9ycyAhPT0gVEhSRUUuVmVydGV4Q29sb3JzICkgewoKCQkJCXNldFN0cm9rZVN0eWxlKCBtYXRlcmlhbC5jb2xvci5nZXRTdHlsZSgpICk7CgoJCQl9IGVsc2UgewoKCQkJCXZhciBjb2xvclN0eWxlMSA9IGVsZW1lbnQudmVydGV4Q29sb3JzWyAwIF0uZ2V0U3R5bGUoKTsKCQkJCXZhciBjb2xvclN0eWxlMiA9IGVsZW1lbnQudmVydGV4Q29sb3JzWyAxIF0uZ2V0U3R5bGUoKTsKCgkJCQlpZiAoIGNvbG9yU3R5bGUxID09PSBjb2xvclN0eWxlMiApIHsKCgkJCQkJc2V0U3Ryb2tlU3R5bGUoIGNvbG9yU3R5bGUxICk7CgoJCQkJfSBlbHNlIHsKCgkJCQkJdHJ5IHsKCgkJCQkJCXZhciBncmFkID0gX2NvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQoCgkJCQkJCQl2MS5wb3NpdGlvblNjcmVlbi54LAoJCQkJCQkJdjEucG9zaXRpb25TY3JlZW4ueSwKCQkJCQkJCXYyLnBvc2l0aW9uU2NyZWVuLngsCgkJCQkJCQl2Mi5wb3NpdGlvblNjcmVlbi55CgkJCQkJCSk7CgkJCQkJCWdyYWQuYWRkQ29sb3JTdG9wKCAwLCBjb2xvclN0eWxlMSApOwoJCQkJCQlncmFkLmFkZENvbG9yU3RvcCggMSwgY29sb3JTdHlsZTIgKTsKCgkJCQkJfSBjYXRjaCAoIGV4Y2VwdGlvbiApIHsKCgkJCQkJCWdyYWQgPSBjb2xvclN0eWxlMTsKCgkJCQkJfQoKCQkJCQlzZXRTdHJva2VTdHlsZSggZ3JhZCApOwoKCQkJCX0KCgkJCX0KCgkJCV9jb250ZXh0LnN0cm9rZSgpOwoJCQlfZWxlbUJveC5leHBhbmRCeVNjYWxhciggbWF0ZXJpYWwubGluZXdpZHRoICogMiApOwoKCQl9IGVsc2UgaWYgKCBtYXRlcmlhbCBpbnN0YW5jZW9mIFRIUkVFLkxpbmVEYXNoZWRNYXRlcmlhbCApIHsKCgkJCXNldExpbmVXaWR0aCggbWF0ZXJpYWwubGluZXdpZHRoICk7CgkJCXNldExpbmVDYXAoIG1hdGVyaWFsLmxpbmVjYXAgKTsKCQkJc2V0TGluZUpvaW4oIG1hdGVyaWFsLmxpbmVqb2luICk7CgkJCXNldFN0cm9rZVN0eWxlKCBtYXRlcmlhbC5jb2xvci5nZXRTdHlsZSgpICk7CgkJCXNldExpbmVEYXNoKCBbIG1hdGVyaWFsLmRhc2hTaXplLCBtYXRlcmlhbC5nYXBTaXplIF0gKTsKCgkJCV9jb250ZXh0LnN0cm9rZSgpOwoKCQkJX2VsZW1Cb3guZXhwYW5kQnlTY2FsYXIoIG1hdGVyaWFsLmxpbmV3aWR0aCAqIDIgKTsKCgkJCXNldExpbmVEYXNoKCBbXSApOwoKCQl9CgoJfQoKCWZ1bmN0aW9uIHJlbmRlckZhY2UzKCB2MSwgdjIsIHYzLCB1djEsIHV2MiwgdXYzLCBlbGVtZW50LCBtYXRlcmlhbCApIHsKCgkJX3RoaXMuaW5mby5yZW5kZXIudmVydGljZXMgKz0gMzsKCQlfdGhpcy5pbmZvLnJlbmRlci5mYWNlcyArKzsKCgkJc2V0T3BhY2l0eSggbWF0ZXJpYWwub3BhY2l0eSApOwoJCXNldEJsZW5kaW5nKCBtYXRlcmlhbC5ibGVuZGluZyApOwoKCQlfdjF4ID0gdjEucG9zaXRpb25TY3JlZW4ueDsgX3YxeSA9IHYxLnBvc2l0aW9uU2NyZWVuLnk7CgkJX3YyeCA9IHYyLnBvc2l0aW9uU2NyZWVuLng7IF92MnkgPSB2Mi5wb3NpdGlvblNjcmVlbi55OwoJCV92M3ggPSB2My5wb3NpdGlvblNjcmVlbi54OyBfdjN5ID0gdjMucG9zaXRpb25TY3JlZW4ueTsKCgkJZHJhd1RyaWFuZ2xlKCBfdjF4LCBfdjF5LCBfdjJ4LCBfdjJ5LCBfdjN4LCBfdjN5ICk7CgoJCWlmICggKCBtYXRlcmlhbCBpbnN0YW5jZW9mIFRIUkVFLk1lc2hMYW1iZXJ0TWF0ZXJpYWwgfHwgbWF0ZXJpYWwgaW5zdGFuY2VvZiBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCApICYmIG1hdGVyaWFsLm1hcCA9PT0gbnVsbCApIHsKCgkJCV9kaWZmdXNlQ29sb3IuY29weSggbWF0ZXJpYWwuY29sb3IgKTsKCQkJX2VtaXNzaXZlQ29sb3IuY29weSggbWF0ZXJpYWwuZW1pc3NpdmUgKTsKCgkJCWlmICggbWF0ZXJpYWwudmVydGV4Q29sb3JzID09PSBUSFJFRS5GYWNlQ29sb3JzICkgewoKCQkJCV9kaWZmdXNlQ29sb3IubXVsdGlwbHkoIGVsZW1lbnQuY29sb3IgKTsKCgkJCX0KCgkJCV9jb2xvci5jb3B5KCBfYW1iaWVudExpZ2h0ICk7CgoJCQlfY2VudHJvaWQuY29weSggdjEucG9zaXRpb25Xb3JsZCApLmFkZCggdjIucG9zaXRpb25Xb3JsZCApLmFkZCggdjMucG9zaXRpb25Xb3JsZCApLmRpdmlkZVNjYWxhciggMyApOwoKCQkJY2FsY3VsYXRlTGlnaHQoIF9jZW50cm9pZCwgZWxlbWVudC5ub3JtYWxNb2RlbCwgX2NvbG9yICk7CgoJCQlfY29sb3IubXVsdGlwbHkoIF9kaWZmdXNlQ29sb3IgKS5hZGQoIF9lbWlzc2l2ZUNvbG9yICk7CgoJCQltYXRlcmlhbC53aXJlZnJhbWUgPT09IHRydWUKCQkJCSA/IHN0cm9rZVBhdGgoIF9jb2xvciwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZXdpZHRoLCBtYXRlcmlhbC53aXJlZnJhbWVMaW5lY2FwLCBtYXRlcmlhbC53aXJlZnJhbWVMaW5lam9pbiApCgkJCQkgOiBmaWxsUGF0aCggX2NvbG9yICk7CgoJCX0gZWxzZSBpZiAoIG1hdGVyaWFsIGluc3RhbmNlb2YgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwgfHwKCQkJCSAgICBtYXRlcmlhbCBpbnN0YW5jZW9mIFRIUkVFLk1lc2hMYW1iZXJ0TWF0ZXJpYWwgfHwKCQkJCSAgICBtYXRlcmlhbCBpbnN0YW5jZW9mIFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsICkgewoKCQkJaWYgKCBtYXRlcmlhbC5tYXAgIT09IG51bGwgKSB7CgoJCQkJdmFyIG1hcHBpbmcgPSBtYXRlcmlhbC5tYXAubWFwcGluZzsKCgkJCQlpZiAoIG1hcHBpbmcgPT09IFRIUkVFLlVWTWFwcGluZyApIHsKCgkJCQkJX3V2cyA9IGVsZW1lbnQudXZzOwoJCQkJCXBhdHRlcm5QYXRoKCBfdjF4LCBfdjF5LCBfdjJ4LCBfdjJ5LCBfdjN4LCBfdjN5LCBfdXZzWyB1djEgXS54LCBfdXZzWyB1djEgXS55LCBfdXZzWyB1djIgXS54LCBfdXZzWyB1djIgXS55LCBfdXZzWyB1djMgXS54LCBfdXZzWyB1djMgXS55LCBtYXRlcmlhbC5tYXAgKTsKCgkJCQl9CgoJCQl9IGVsc2UgaWYgKCBtYXRlcmlhbC5lbnZNYXAgIT09IG51bGwgKSB7CgoJCQkJaWYgKCBtYXRlcmlhbC5lbnZNYXAubWFwcGluZyA9PT0gVEhSRUUuU3BoZXJpY2FsUmVmbGVjdGlvbk1hcHBpbmcgKSB7CgoJCQkJCV9ub3JtYWwuY29weSggZWxlbWVudC52ZXJ0ZXhOb3JtYWxzTW9kZWxbIHV2MSBdICkuYXBwbHlNYXRyaXgzKCBfbm9ybWFsVmlld01hdHJpeCApOwoJCQkJCV91djF4ID0gMC41ICogX25vcm1hbC54ICsgMC41OwoJCQkJCV91djF5ID0gMC41ICogX25vcm1hbC55ICsgMC41OwoKCQkJCQlfbm9ybWFsLmNvcHkoIGVsZW1lbnQudmVydGV4Tm9ybWFsc01vZGVsWyB1djIgXSApLmFwcGx5TWF0cml4MyggX25vcm1hbFZpZXdNYXRyaXggKTsKCQkJCQlfdXYyeCA9IDAuNSAqIF9ub3JtYWwueCArIDAuNTsKCQkJCQlfdXYyeSA9IDAuNSAqIF9ub3JtYWwueSArIDAuNTsKCgkJCQkJX25vcm1hbC5jb3B5KCBlbGVtZW50LnZlcnRleE5vcm1hbHNNb2RlbFsgdXYzIF0gKS5hcHBseU1hdHJpeDMoIF9ub3JtYWxWaWV3TWF0cml4ICk7CgkJCQkJX3V2M3ggPSAwLjUgKiBfbm9ybWFsLnggKyAwLjU7CgkJCQkJX3V2M3kgPSAwLjUgKiBfbm9ybWFsLnkgKyAwLjU7CgoJCQkJCXBhdHRlcm5QYXRoKCBfdjF4LCBfdjF5LCBfdjJ4LCBfdjJ5LCBfdjN4LCBfdjN5LCBfdXYxeCwgX3V2MXksIF91djJ4LCBfdXYyeSwgX3V2M3gsIF91djN5LCBtYXRlcmlhbC5lbnZNYXAgKTsKCgkJCQl9CgoJCQl9IGVsc2UgewoKCQkJCV9jb2xvci5jb3B5KCBtYXRlcmlhbC5jb2xvciApOwoKCQkJCWlmICggbWF0ZXJpYWwudmVydGV4Q29sb3JzID09PSBUSFJFRS5GYWNlQ29sb3JzICkgewoKCQkJCQlfY29sb3IubXVsdGlwbHkoIGVsZW1lbnQuY29sb3IgKTsKCgkJCQl9CgoJCQkJbWF0ZXJpYWwud2lyZWZyYW1lID09PSB0cnVlCgkJCQkJID8gc3Ryb2tlUGF0aCggX2NvbG9yLCBtYXRlcmlhbC53aXJlZnJhbWVMaW5ld2lkdGgsIG1hdGVyaWFsLndpcmVmcmFtZUxpbmVjYXAsIG1hdGVyaWFsLndpcmVmcmFtZUxpbmVqb2luICkKCQkJCQkgOiBmaWxsUGF0aCggX2NvbG9yICk7CgoJCQl9CgoJCX0gZWxzZSBpZiAoIG1hdGVyaWFsIGluc3RhbmNlb2YgVEhSRUUuTWVzaE5vcm1hbE1hdGVyaWFsICkgewoKCQkJX25vcm1hbC5jb3B5KCBlbGVtZW50Lm5vcm1hbE1vZGVsICkuYXBwbHlNYXRyaXgzKCBfbm9ybWFsVmlld01hdHJpeCApOwoKCQkJX2NvbG9yLnNldFJHQiggX25vcm1hbC54LCBfbm9ybWFsLnksIF9ub3JtYWwueiApLm11bHRpcGx5U2NhbGFyKCAwLjUgKS5hZGRTY2FsYXIoIDAuNSApOwoKCQkJbWF0ZXJpYWwud2lyZWZyYW1lID09PSB0cnVlCgkJCQkgPyBzdHJva2VQYXRoKCBfY29sb3IsIG1hdGVyaWFsLndpcmVmcmFtZUxpbmV3aWR0aCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWNhcCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWpvaW4gKQoJCQkJIDogZmlsbFBhdGgoIF9jb2xvciApOwoKCQl9IGVsc2UgewoKCQkJX2NvbG9yLnNldFJHQiggMSwgMSwgMSApOwoKCQkJbWF0ZXJpYWwud2lyZWZyYW1lID09PSB0cnVlCgkJCQkgPyBzdHJva2VQYXRoKCBfY29sb3IsIG1hdGVyaWFsLndpcmVmcmFtZUxpbmV3aWR0aCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWNhcCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWpvaW4gKQoJCQkJIDogZmlsbFBhdGgoIF9jb2xvciApOwoKCQl9CgoJfQoKCS8vCgoJZnVuY3Rpb24gZHJhd1RyaWFuZ2xlKCB4MCwgeTAsIHgxLCB5MSwgeDIsIHkyICkgewoKCQlfY29udGV4dC5iZWdpblBhdGgoKTsKCQlfY29udGV4dC5tb3ZlVG8oIHgwLCB5MCApOwoJCV9jb250ZXh0LmxpbmVUbyggeDEsIHkxICk7CgkJX2NvbnRleHQubGluZVRvKCB4MiwgeTIgKTsKCQlfY29udGV4dC5jbG9zZVBhdGgoKTsKCgl9CgoJZnVuY3Rpb24gc3Ryb2tlUGF0aCggY29sb3IsIGxpbmV3aWR0aCwgbGluZWNhcCwgbGluZWpvaW4gKSB7CgoJCXNldExpbmVXaWR0aCggbGluZXdpZHRoICk7CgkJc2V0TGluZUNhcCggbGluZWNhcCApOwoJCXNldExpbmVKb2luKCBsaW5lam9pbiApOwoJCXNldFN0cm9rZVN0eWxlKCBjb2xvci5nZXRTdHlsZSgpICk7CgoJCV9jb250ZXh0LnN0cm9rZSgpOwoKCQlfZWxlbUJveC5leHBhbmRCeVNjYWxhciggbGluZXdpZHRoICogMiApOwoKCX0KCglmdW5jdGlvbiBmaWxsUGF0aCggY29sb3IgKSB7CgoJCXNldEZpbGxTdHlsZSggY29sb3IuZ2V0U3R5bGUoKSApOwoJCV9jb250ZXh0LmZpbGwoKTsKCgl9CgoJZnVuY3Rpb24gdGV4dHVyZVRvUGF0dGVybiggdGV4dHVyZSApIHsKCgkJaWYgKCB0ZXh0dXJlLnZlcnNpb24gPT09IDAgfHwKCQkJdGV4dHVyZSBpbnN0YW5jZW9mIFRIUkVFLkNvbXByZXNzZWRUZXh0dXJlIHx8CgkJCXRleHR1cmUgaW5zdGFuY2VvZiBUSFJFRS5EYXRhVGV4dHVyZSApIHsKCgkJCXJldHVybiB7CgkJCQljYW52YXM6IHVuZGVmaW5lZCwKCQkJCXZlcnNpb246IHRleHR1cmUudmVyc2lvbgoJCQl9OwoKCQl9CgoJCXZhciBpbWFnZSA9IHRleHR1cmUuaW1hZ2U7CgoJCWlmICggaW1hZ2UuY29tcGxldGUgPT09IGZhbHNlICkgewoKCQkJcmV0dXJuIHsKCQkJCWNhbnZhczogdW5kZWZpbmVkLAoJCQkJdmVyc2lvbjogMAoJCQl9OwoKCQl9CgoJCXZhciByZXBlYXRYID0gdGV4dHVyZS53cmFwUyA9PT0gVEhSRUUuUmVwZWF0V3JhcHBpbmcgfHwgdGV4dHVyZS53cmFwUyA9PT0gVEhSRUUuTWlycm9yZWRSZXBlYXRXcmFwcGluZzsKCQl2YXIgcmVwZWF0WSA9IHRleHR1cmUud3JhcFQgPT09IFRIUkVFLlJlcGVhdFdyYXBwaW5nIHx8IHRleHR1cmUud3JhcFQgPT09IFRIUkVFLk1pcnJvcmVkUmVwZWF0V3JhcHBpbmc7CgoJCXZhciBtaXJyb3JYID0gdGV4dHVyZS53cmFwUyA9PT0gVEhSRUUuTWlycm9yZWRSZXBlYXRXcmFwcGluZzsKCQl2YXIgbWlycm9yWSA9IHRleHR1cmUud3JhcFQgPT09IFRIUkVFLk1pcnJvcmVkUmVwZWF0V3JhcHBpbmc7CgoJCS8vCgoJCXZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnY2FudmFzJyApOwoJCWNhbnZhcy53aWR0aCA9IGltYWdlLndpZHRoICogKCBtaXJyb3JYID8gMiA6IDEgKTsKCQljYW52YXMuaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0ICogKCBtaXJyb3JZID8gMiA6IDEgKTsKCgkJdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApOwoJCWNvbnRleHQuc2V0VHJhbnNmb3JtKCAxLCAwLCAwLCAtIDEsIDAsIGltYWdlLmhlaWdodCApOwoJCWNvbnRleHQuZHJhd0ltYWdlKCBpbWFnZSwgMCwgMCApOwoKCQlpZiAoIG1pcnJvclggPT09IHRydWUgKSB7CgoJCQljb250ZXh0LnNldFRyYW5zZm9ybSggLSAxLCAwLCAwLCAtIDEsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQgKTsKCQkJY29udGV4dC5kcmF3SW1hZ2UoIGltYWdlLCAtIGltYWdlLndpZHRoLCAwICk7CgoJCX0KCgkJaWYgKCBtaXJyb3JZID09PSB0cnVlICkgewoKCQkJY29udGV4dC5zZXRUcmFuc2Zvcm0oIDEsIDAsIDAsIDEsIDAsIDAgKTsKCQkJY29udGV4dC5kcmF3SW1hZ2UoIGltYWdlLCAwLCBpbWFnZS5oZWlnaHQgKTsKCgkJfQoKCQlpZiAoIG1pcnJvclggPT09IHRydWUgJiYgbWlycm9yWSA9PT0gdHJ1ZSApIHsKCgkJCWNvbnRleHQuc2V0VHJhbnNmb3JtKCAtIDEsIDAsIDAsIDEsIGltYWdlLndpZHRoLCAwICk7CgkJCWNvbnRleHQuZHJhd0ltYWdlKCBpbWFnZSwgLSBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0ICk7CgoJCX0KCgkJdmFyIHJlcGVhdCA9ICduby1yZXBlYXQnOwoKCQlpZiAoIHJlcGVhdFggPT09IHRydWUgJiYgcmVwZWF0WSA9PT0gdHJ1ZSApIHsKCgkJCXJlcGVhdCA9ICdyZXBlYXQnOwoKCQl9IGVsc2UgaWYgKCByZXBlYXRYID09PSB0cnVlICkgewoKCQkJcmVwZWF0ID0gJ3JlcGVhdC14JzsKCgkJfSBlbHNlIGlmICggcmVwZWF0WSA9PT0gdHJ1ZSApIHsKCgkJCXJlcGVhdCA9ICdyZXBlYXQteSc7CgoJCX0KCgkJdmFyIHBhdHRlcm4gPSBfY29udGV4dC5jcmVhdGVQYXR0ZXJuKCBjYW52YXMsIHJlcGVhdCApOwoKCQlpZiAoIHRleHR1cmUub25VcGRhdGUgKSB0ZXh0dXJlLm9uVXBkYXRlKCB0ZXh0dXJlICk7CgoJCXJldHVybiB7CgkJCWNhbnZhczogcGF0dGVybiwKCQkJdmVyc2lvbjogdGV4dHVyZS52ZXJzaW9uCgkJfTsKCgl9CgoJZnVuY3Rpb24gcGF0dGVyblBhdGgoIHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIsIHUwLCB2MCwgdTEsIHYxLCB1MiwgdjIsIHRleHR1cmUgKSB7CgoJCXZhciBwYXR0ZXJuID0gX3BhdHRlcm5zWyB0ZXh0dXJlLmlkIF07CgoJCWlmICggcGF0dGVybiA9PT0gdW5kZWZpbmVkIHx8IHBhdHRlcm4udmVyc2lvbiAhPT0gdGV4dHVyZS52ZXJzaW9uICkgewoKCQkJcGF0dGVybiA9IHRleHR1cmVUb1BhdHRlcm4oIHRleHR1cmUgKTsKCQkJX3BhdHRlcm5zWyB0ZXh0dXJlLmlkIF0gPSBwYXR0ZXJuOwoKCQl9CgoJCWlmICggcGF0dGVybi5jYW52YXMgIT09IHVuZGVmaW5lZCApIHsKCgkJCXNldEZpbGxTdHlsZSggcGF0dGVybi5jYW52YXMgKTsKCgkJfSBlbHNlIHsKCgkJCXNldEZpbGxTdHlsZSggJ3JnYmEoIDAsIDAsIDAsIDEpJyApOwoJCQlfY29udGV4dC5maWxsKCk7CgkJCXJldHVybjsKCgkJfQoKCQkvLyBodHRwOi8vZXh0cmVtZWx5c2F0aXNmYWN0b3J5dG90YWxpdGFyaWFuaXNtLmNvbS9ibG9nLz9wPTIxMjAKCgkJdmFyIGEsIGIsIGMsIGQsIGUsIGYsIGRldCwgaWRldCwKCQlvZmZzZXRYID0gdGV4dHVyZS5vZmZzZXQueCAvIHRleHR1cmUucmVwZWF0LngsCgkJb2Zmc2V0WSA9IHRleHR1cmUub2Zmc2V0LnkgLyB0ZXh0dXJlLnJlcGVhdC55LAoJCXdpZHRoID0gdGV4dHVyZS5pbWFnZS53aWR0aCAqIHRleHR1cmUucmVwZWF0LngsCgkJaGVpZ2h0ID0gdGV4dHVyZS5pbWFnZS5oZWlnaHQgKiB0ZXh0dXJlLnJlcGVhdC55OwoKCQl1MCA9ICggdTAgKyBvZmZzZXRYICkgKiB3aWR0aDsKCQl2MCA9ICggdjAgKyBvZmZzZXRZICkgKiBoZWlnaHQ7CgoJCXUxID0gKCB1MSArIG9mZnNldFggKSAqIHdpZHRoOwoJCXYxID0gKCB2MSArIG9mZnNldFkgKSAqIGhlaWdodDsKCgkJdTIgPSAoIHUyICsgb2Zmc2V0WCApICogd2lkdGg7CgkJdjIgPSAoIHYyICsgb2Zmc2V0WSApICogaGVpZ2h0OwoKCQl4MSAtPSB4MDsgeTEgLT0geTA7CgkJeDIgLT0geDA7IHkyIC09IHkwOwoKCQl1MSAtPSB1MDsgdjEgLT0gdjA7CgkJdTIgLT0gdTA7IHYyIC09IHYwOwoKCQlkZXQgPSB1MSAqIHYyIC0gdTIgKiB2MTsKCgkJaWYgKCBkZXQgPT09IDAgKSByZXR1cm47CgoJCWlkZXQgPSAxIC8gZGV0OwoKCQlhID0gKCB2MiAqIHgxIC0gdjEgKiB4MiApICogaWRldDsKCQliID0gKCB2MiAqIHkxIC0gdjEgKiB5MiApICogaWRldDsKCQljID0gKCB1MSAqIHgyIC0gdTIgKiB4MSApICogaWRldDsKCQlkID0gKCB1MSAqIHkyIC0gdTIgKiB5MSApICogaWRldDsKCgkJZSA9IHgwIC0gYSAqIHUwIC0gYyAqIHYwOwoJCWYgPSB5MCAtIGIgKiB1MCAtIGQgKiB2MDsKCgkJX2NvbnRleHQuc2F2ZSgpOwoJCV9jb250ZXh0LnRyYW5zZm9ybSggYSwgYiwgYywgZCwgZSwgZiApOwoJCV9jb250ZXh0LmZpbGwoKTsKCQlfY29udGV4dC5yZXN0b3JlKCk7CgoJfQoKCWZ1bmN0aW9uIGNsaXBJbWFnZSggeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgdTAsIHYwLCB1MSwgdjEsIHUyLCB2MiwgaW1hZ2UgKSB7CgoJCS8vIGh0dHA6Ly9leHRyZW1lbHlzYXRpc2ZhY3Rvcnl0b3RhbGl0YXJpYW5pc20uY29tL2Jsb2cvP3A9MjEyMAoKCQl2YXIgYSwgYiwgYywgZCwgZSwgZiwgZGV0LCBpZGV0LAoJCXdpZHRoID0gaW1hZ2Uud2lkdGggLSAxLAoJCWhlaWdodCA9IGltYWdlLmhlaWdodCAtIDE7CgoJCXUwICo9IHdpZHRoOyB2MCAqPSBoZWlnaHQ7CgkJdTEgKj0gd2lkdGg7IHYxICo9IGhlaWdodDsKCQl1MiAqPSB3aWR0aDsgdjIgKj0gaGVpZ2h0OwoKCQl4MSAtPSB4MDsgeTEgLT0geTA7CgkJeDIgLT0geDA7IHkyIC09IHkwOwoKCQl1MSAtPSB1MDsgdjEgLT0gdjA7CgkJdTIgLT0gdTA7IHYyIC09IHYwOwoKCQlkZXQgPSB1MSAqIHYyIC0gdTIgKiB2MTsKCgkJaWRldCA9IDEgLyBkZXQ7CgoJCWEgPSAoIHYyICogeDEgLSB2MSAqIHgyICkgKiBpZGV0OwoJCWIgPSAoIHYyICogeTEgLSB2MSAqIHkyICkgKiBpZGV0OwoJCWMgPSAoIHUxICogeDIgLSB1MiAqIHgxICkgKiBpZGV0OwoJCWQgPSAoIHUxICogeTIgLSB1MiAqIHkxICkgKiBpZGV0OwoKCQllID0geDAgLSBhICogdTAgLSBjICogdjA7CgkJZiA9IHkwIC0gYiAqIHUwIC0gZCAqIHYwOwoKCQlfY29udGV4dC5zYXZlKCk7CgkJX2NvbnRleHQudHJhbnNmb3JtKCBhLCBiLCBjLCBkLCBlLCBmICk7CgkJX2NvbnRleHQuY2xpcCgpOwoJCV9jb250ZXh0LmRyYXdJbWFnZSggaW1hZ2UsIDAsIDAgKTsKCQlfY29udGV4dC5yZXN0b3JlKCk7CgoJfQoKCS8vIEhpZGUgYW50aS1hbGlhcyBnYXBzCgoJZnVuY3Rpb24gZXhwYW5kKCB2MSwgdjIsIHBpeGVscyApIHsKCgkJdmFyIHggPSB2Mi54IC0gdjEueCwgeSA9IHYyLnkgLSB2MS55LAoJCWRldCA9IHggKiB4ICsgeSAqIHksIGlkZXQ7CgoJCWlmICggZGV0ID09PSAwICkgcmV0dXJuOwoKCQlpZGV0ID0gcGl4ZWxzIC8gTWF0aC5zcXJ0KCBkZXQgKTsKCgkJeCAqPSBpZGV0OyB5ICo9IGlkZXQ7CgoJCXYyLnggKz0geDsgdjIueSArPSB5OwoJCXYxLnggLT0geDsgdjEueSAtPSB5OwoKCX0KCgkvLyBDb250ZXh0IGNhY2hlZCBtZXRob2RzLgoKCWZ1bmN0aW9uIHNldE9wYWNpdHkoIHZhbHVlICkgewoKCQlpZiAoIF9jb250ZXh0R2xvYmFsQWxwaGEgIT09IHZhbHVlICkgewoKCQkJX2NvbnRleHQuZ2xvYmFsQWxwaGEgPSB2YWx1ZTsKCQkJX2NvbnRleHRHbG9iYWxBbHBoYSA9IHZhbHVlOwoKCQl9CgoJfQoKCWZ1bmN0aW9uIHNldEJsZW5kaW5nKCB2YWx1ZSApIHsKCgkJaWYgKCBfY29udGV4dEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gdmFsdWUgKSB7CgoJCQlpZiAoIHZhbHVlID09PSBUSFJFRS5Ob3JtYWxCbGVuZGluZyApIHsKCgkJCQlfY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnc291cmNlLW92ZXInOwoKCQkJfSBlbHNlIGlmICggdmFsdWUgPT09IFRIUkVFLkFkZGl0aXZlQmxlbmRpbmcgKSB7CgoJCQkJX2NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2xpZ2h0ZXInOwoKCQkJfSBlbHNlIGlmICggdmFsdWUgPT09IFRIUkVFLlN1YnRyYWN0aXZlQmxlbmRpbmcgKSB7CgoJCQkJX2NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rhcmtlcic7CgoJCQl9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gVEhSRUUuTXVsdGlwbHlCbGVuZGluZyApIHsKCgkJCQlfY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknOwoKCQkJfQoKCQkJX2NvbnRleHRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSB2YWx1ZTsKCgkJfQoKCX0KCglmdW5jdGlvbiBzZXRMaW5lV2lkdGgoIHZhbHVlICkgewoKCQlpZiAoIF9jb250ZXh0TGluZVdpZHRoICE9PSB2YWx1ZSApIHsKCgkJCV9jb250ZXh0LmxpbmVXaWR0aCA9IHZhbHVlOwoJCQlfY29udGV4dExpbmVXaWR0aCA9IHZhbHVlOwoKCQl9CgoJfQoKCWZ1bmN0aW9uIHNldExpbmVDYXAoIHZhbHVlICkgewoKCQkvLyAiYnV0dCIsICJyb3VuZCIsICJzcXVhcmUiCgoJCWlmICggX2NvbnRleHRMaW5lQ2FwICE9PSB2YWx1ZSApIHsKCgkJCV9jb250ZXh0LmxpbmVDYXAgPSB2YWx1ZTsKCQkJX2NvbnRleHRMaW5lQ2FwID0gdmFsdWU7CgoJCX0KCgl9CgoJZnVuY3Rpb24gc2V0TGluZUpvaW4oIHZhbHVlICkgewoKCQkvLyAicm91bmQiLCAiYmV2ZWwiLCAibWl0ZXIiCgoJCWlmICggX2NvbnRleHRMaW5lSm9pbiAhPT0gdmFsdWUgKSB7CgoJCQlfY29udGV4dC5saW5lSm9pbiA9IHZhbHVlOwoJCQlfY29udGV4dExpbmVKb2luID0gdmFsdWU7CgoJCX0KCgl9CgoJZnVuY3Rpb24gc2V0U3Ryb2tlU3R5bGUoIHZhbHVlICkgewoKCQlpZiAoIF9jb250ZXh0U3Ryb2tlU3R5bGUgIT09IHZhbHVlICkgewoKCQkJX2NvbnRleHQuc3Ryb2tlU3R5bGUgPSB2YWx1ZTsKCQkJX2NvbnRleHRTdHJva2VTdHlsZSA9IHZhbHVlOwoKCQl9CgoJfQoKCWZ1bmN0aW9uIHNldEZpbGxTdHlsZSggdmFsdWUgKSB7CgoJCWlmICggX2NvbnRleHRGaWxsU3R5bGUgIT09IHZhbHVlICkgewoKCQkJX2NvbnRleHQuZmlsbFN0eWxlID0gdmFsdWU7CgkJCV9jb250ZXh0RmlsbFN0eWxlID0gdmFsdWU7CgoJCX0KCgl9CgoJZnVuY3Rpb24gc2V0TGluZURhc2goIHZhbHVlICkgewoKCQlpZiAoIF9jb250ZXh0TGluZURhc2gubGVuZ3RoICE9PSB2YWx1ZS5sZW5ndGggKSB7CgoJCQlfY29udGV4dC5zZXRMaW5lRGFzaCggdmFsdWUgKTsKCQkJX2NvbnRleHRMaW5lRGFzaCA9IHZhbHVlOwoKCQl9CgoJfQoKfTsK(Line 37)
Message:
THREE.CanvasRenderer
console-api warning URL: data:application/x-javascript;base64,Ly8gdGhyZWVqcy5vcmcvbGljZW5zZQooZnVuY3Rpb24obCxzYSl7Im9iamVjdCI9PT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPT10eXBlb2YgbW9kdWxlP3NhKGV4cG9ydHMpOiJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiXSxzYSk6c2EobC5USFJFRT1sLlRIUkVFfHx7fSl9KSh0aGlzLGZ1bmN0aW9uKGwpe2Z1bmN0aW9uIHNhKCl7fWZ1bmN0aW9uIEQoYSxiKXt0aGlzLng9YXx8MDt0aGlzLnk9Ynx8MH1mdW5jdGlvbiBYKGEsYixjLGQsZSxmLGcsaCxrLG0pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOmpmKyt9KTt0aGlzLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKTt0aGlzLm5hbWU9IiI7dGhpcy5pbWFnZT12b2lkIDAhPT1hP2E6WC5ERUZBVUxUX0lNQUdFO3RoaXMubWlwbWFwcz1bXTt0aGlzLm1hcHBpbmc9dm9pZCAwIT09Yj9iOlguREVGQVVMVF9NQVBQSU5HO3RoaXMud3JhcFM9dm9pZCAwIT09Yz9jOjEwMDE7dGhpcy53cmFwVD0Kdm9pZCAwIT09ZD9kOjEwMDE7dGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09ZT9lOjEwMDY7dGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09Zj9mOjEwMDg7dGhpcy5hbmlzb3Ryb3B5PXZvaWQgMCE9PWs/azoxO3RoaXMuZm9ybWF0PXZvaWQgMCE9PWc/ZzoxMDIzO3RoaXMudHlwZT12b2lkIDAhPT1oP2g6MTAwOTt0aGlzLm9mZnNldD1uZXcgRCgwLDApO3RoaXMucmVwZWF0PW5ldyBEKDEsMSk7dGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITA7dGhpcy5wcmVtdWx0aXBseUFscGhhPSExO3RoaXMuZmxpcFk9ITA7dGhpcy51bnBhY2tBbGlnbm1lbnQ9NDt0aGlzLmVuY29kaW5nPXZvaWQgMCE9PW0/bTozRTM7dGhpcy52ZXJzaW9uPTA7dGhpcy5vblVwZGF0ZT1udWxsfWZ1bmN0aW9uIGdhKGEsYixjLGQpe3RoaXMueD1hfHwwO3RoaXMueT1ifHwwO3RoaXMuej1jfHwwO3RoaXMudz12b2lkIDAhPT1kP2Q6MX1mdW5jdGlvbiBEYihhLGIsYyl7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7dGhpcy53aWR0aD0KYTt0aGlzLmhlaWdodD1iO3RoaXMuc2Npc3Nvcj1uZXcgZ2EoMCwwLGEsYik7dGhpcy5zY2lzc29yVGVzdD0hMTt0aGlzLnZpZXdwb3J0PW5ldyBnYSgwLDAsYSxiKTtjPWN8fHt9O3ZvaWQgMD09PWMubWluRmlsdGVyJiYoYy5taW5GaWx0ZXI9MTAwNik7dGhpcy50ZXh0dXJlPW5ldyBYKHZvaWQgMCx2b2lkIDAsYy53cmFwUyxjLndyYXBULGMubWFnRmlsdGVyLGMubWluRmlsdGVyLGMuZm9ybWF0LGMudHlwZSxjLmFuaXNvdHJvcHksYy5lbmNvZGluZyk7dGhpcy5kZXB0aEJ1ZmZlcj12b2lkIDAhPT1jLmRlcHRoQnVmZmVyP2MuZGVwdGhCdWZmZXI6ITA7dGhpcy5zdGVuY2lsQnVmZmVyPXZvaWQgMCE9PWMuc3RlbmNpbEJ1ZmZlcj9jLnN0ZW5jaWxCdWZmZXI6ITA7dGhpcy5kZXB0aFRleHR1cmU9dm9pZCAwIT09Yy5kZXB0aFRleHR1cmU/Yy5kZXB0aFRleHR1cmU6bnVsbH1mdW5jdGlvbiBFYihhLGIsYyl7RGIuY2FsbCh0aGlzLGEsYixjKTt0aGlzLmFjdGl2ZU1pcE1hcExldmVsPQp0aGlzLmFjdGl2ZUN1YmVGYWNlPTB9ZnVuY3Rpb24gcWEoYSxiLGMsZCl7dGhpcy5feD1hfHwwO3RoaXMuX3k9Ynx8MDt0aGlzLl96PWN8fDA7dGhpcy5fdz12b2lkIDAhPT1kP2Q6MX1mdW5jdGlvbiBwKGEsYixjKXt0aGlzLng9YXx8MDt0aGlzLnk9Ynx8MDt0aGlzLno9Y3x8MH1mdW5jdGlvbiBKKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07MDxhcmd1bWVudHMubGVuZ3RoJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfWZ1bmN0aW9uIGViKGEsYixjLGQsZSxmLGcsaCxrLG0sdSxxKXtYLmNhbGwodGhpcyxudWxsLGYsZyxoLGssbSxkLGUsdSxxKTt0aGlzLmltYWdlPXtkYXRhOmEsd2lkdGg6YixoZWlnaHQ6Y307dGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09az9rOjEwMDM7dGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09Cm0/bToxMDAzO3RoaXMuZmxpcFk9dGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITE7dGhpcy51bnBhY2tBbGlnbm1lbnQ9MX1mdW5jdGlvbiBaYShhLGIsYyxkLGUsZixnLGgsayxtKXthPXZvaWQgMCE9PWE/YTpbXTtYLmNhbGwodGhpcyxhLHZvaWQgMCE9PWI/YjozMDEsYyxkLGUsZixnLGgsayxtKTt0aGlzLmZsaXBZPSExfWZ1bmN0aW9uIEZiKGEsYixjKXt2YXIgZD1hWzBdO2lmKDA+PWR8fDA8ZClyZXR1cm4gYTt2YXIgZT1iKmMsZj15ZVtlXTt2b2lkIDA9PT1mJiYoZj1uZXcgRmxvYXQzMkFycmF5KGUpLHllW2VdPWYpO2lmKDAhPT1iKWZvcihkLnRvQXJyYXkoZiwwKSxkPTEsZT0wO2QhPT1iOysrZCllKz1jLGFbZF0udG9BcnJheShmLGUpO3JldHVybiBmfWZ1bmN0aW9uIHplKGEsYil7dmFyIGM9QWVbYl07dm9pZCAwPT09YyYmKGM9bmV3IEludDMyQXJyYXkoYiksQWVbYl09Yyk7Zm9yKHZhciBkPTA7ZCE9PWI7KytkKWNbZF09YS5hbGxvY1RleHR1cmVVbml0KCk7cmV0dXJuIGN9ZnVuY3Rpb24ga2YoYSwKYil7YS51bmlmb3JtMWYodGhpcy5hZGRyLGIpfWZ1bmN0aW9uIGxmKGEsYil7YS51bmlmb3JtMWkodGhpcy5hZGRyLGIpfWZ1bmN0aW9uIG1mKGEsYil7dm9pZCAwPT09Yi54P2EudW5pZm9ybTJmdih0aGlzLmFkZHIsYik6YS51bmlmb3JtMmYodGhpcy5hZGRyLGIueCxiLnkpfWZ1bmN0aW9uIG5mKGEsYil7dm9pZCAwIT09Yi54P2EudW5pZm9ybTNmKHRoaXMuYWRkcixiLngsYi55LGIueik6dm9pZCAwIT09Yi5yP2EudW5pZm9ybTNmKHRoaXMuYWRkcixiLnIsYi5nLGIuYik6YS51bmlmb3JtM2Z2KHRoaXMuYWRkcixiKX1mdW5jdGlvbiBvZihhLGIpe3ZvaWQgMD09PWIueD9hLnVuaWZvcm00ZnYodGhpcy5hZGRyLGIpOmEudW5pZm9ybTRmKHRoaXMuYWRkcixiLngsYi55LGIueixiLncpfWZ1bmN0aW9uIHBmKGEsYil7YS51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxiLmVsZW1lbnRzfHxiKX1mdW5jdGlvbiBxZihhLGIpe3ZvaWQgMD09PWIuZWxlbWVudHM/YS51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwKITEsYik6KEJlLnNldChiLmVsZW1lbnRzKSxhLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLEJlKSl9ZnVuY3Rpb24gcmYoYSxiKXt2b2lkIDA9PT1iLmVsZW1lbnRzP2EudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsYik6KENlLnNldChiLmVsZW1lbnRzKSxhLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLENlKSl9ZnVuY3Rpb24gc2YoYSxiLGMpe3ZhciBkPWMuYWxsb2NUZXh0dXJlVW5pdCgpO2EudW5pZm9ybTFpKHRoaXMuYWRkcixkKTtjLnNldFRleHR1cmUyRChifHxEZSxkKX1mdW5jdGlvbiB0ZihhLGIsYyl7dmFyIGQ9Yy5hbGxvY1RleHR1cmVVbml0KCk7YS51bmlmb3JtMWkodGhpcy5hZGRyLGQpO2Muc2V0VGV4dHVyZUN1YmUoYnx8RWUsZCl9ZnVuY3Rpb24gRmUoYSxiKXthLnVuaWZvcm0yaXYodGhpcy5hZGRyLGIpfWZ1bmN0aW9uIEdlKGEsYil7YS51bmlmb3JtM2l2KHRoaXMuYWRkcixiKX1mdW5jdGlvbiBIZShhLGIpe2EudW5pZm9ybTRpdih0aGlzLmFkZHIsCmIpfWZ1bmN0aW9uIHVmKGEpe3N3aXRjaChhKXtjYXNlIDUxMjY6cmV0dXJuIGtmO2Nhc2UgMzU2NjQ6cmV0dXJuIG1mO2Nhc2UgMzU2NjU6cmV0dXJuIG5mO2Nhc2UgMzU2NjY6cmV0dXJuIG9mO2Nhc2UgMzU2NzQ6cmV0dXJuIHBmO2Nhc2UgMzU2NzU6cmV0dXJuIHFmO2Nhc2UgMzU2NzY6cmV0dXJuIHJmO2Nhc2UgMzU2Nzg6cmV0dXJuIHNmO2Nhc2UgMzU2ODA6cmV0dXJuIHRmO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBsZjtjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIEZlO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gR2U7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBIZX19ZnVuY3Rpb24gdmYoYSxiKXthLnVuaWZvcm0xZnYodGhpcy5hZGRyLGIpfWZ1bmN0aW9uIHdmKGEsYil7YS51bmlmb3JtMWl2KHRoaXMuYWRkcixiKX1mdW5jdGlvbiB4ZihhLGIpe2EudW5pZm9ybTJmdih0aGlzLmFkZHIsRmIoYix0aGlzLnNpemUsMikpfWZ1bmN0aW9uIHlmKGEsCmIpe2EudW5pZm9ybTNmdih0aGlzLmFkZHIsRmIoYix0aGlzLnNpemUsMykpfWZ1bmN0aW9uIHpmKGEsYil7YS51bmlmb3JtNGZ2KHRoaXMuYWRkcixGYihiLHRoaXMuc2l6ZSw0KSl9ZnVuY3Rpb24gQWYoYSxiKXthLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLEZiKGIsdGhpcy5zaXplLDQpKX1mdW5jdGlvbiBCZihhLGIpe2EudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsRmIoYix0aGlzLnNpemUsOSkpfWZ1bmN0aW9uIENmKGEsYil7YS51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxGYihiLHRoaXMuc2l6ZSwxNikpfWZ1bmN0aW9uIERmKGEsYixjKXt2YXIgZD1iLmxlbmd0aCxlPXplKGMsZCk7YS51bmlmb3JtMWl2KHRoaXMuYWRkcixlKTtmb3IoYT0wO2EhPT1kOysrYSljLnNldFRleHR1cmUyRChiW2FdfHxEZSxlW2FdKX1mdW5jdGlvbiBFZihhLGIsYyl7dmFyIGQ9Yi5sZW5ndGgsZT16ZShjLGQpO2EudW5pZm9ybTFpdih0aGlzLmFkZHIsZSk7Zm9yKGE9CjA7YSE9PWQ7KythKWMuc2V0VGV4dHVyZUN1YmUoYlthXXx8RWUsZVthXSl9ZnVuY3Rpb24gRmYoYSl7c3dpdGNoKGEpe2Nhc2UgNTEyNjpyZXR1cm4gdmY7Y2FzZSAzNTY2NDpyZXR1cm4geGY7Y2FzZSAzNTY2NTpyZXR1cm4geWY7Y2FzZSAzNTY2NjpyZXR1cm4gemY7Y2FzZSAzNTY3NDpyZXR1cm4gQWY7Y2FzZSAzNTY3NTpyZXR1cm4gQmY7Y2FzZSAzNTY3NjpyZXR1cm4gQ2Y7Y2FzZSAzNTY3ODpyZXR1cm4gRGY7Y2FzZSAzNTY4MDpyZXR1cm4gRWY7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIHdmO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gRmU7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBHZTtjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIEhlfX1mdW5jdGlvbiBHZihhLGIsYyl7dGhpcy5pZD1hO3RoaXMuYWRkcj1jO3RoaXMuc2V0VmFsdWU9dWYoYi50eXBlKX1mdW5jdGlvbiBIZihhLGIsYyl7dGhpcy5pZD1hO3RoaXMuYWRkcj1jO3RoaXMuc2l6ZT0KYi5zaXplO3RoaXMuc2V0VmFsdWU9RmYoYi50eXBlKX1mdW5jdGlvbiBJZShhKXt0aGlzLmlkPWE7dGhpcy5zZXE9W107dGhpcy5tYXA9e319ZnVuY3Rpb24gZmIoYSxiLGMpe3RoaXMuc2VxPVtdO3RoaXMubWFwPXt9O3RoaXMucmVuZGVyZXI9YztjPWEuZ2V0UHJvZ3JhbVBhcmFtZXRlcihiLGEuQUNUSVZFX1VOSUZPUk1TKTtmb3IodmFyIGQ9MDtkPGM7KytkKXt2YXIgZT1hLmdldEFjdGl2ZVVuaWZvcm0oYixkKSxmPWEuZ2V0VW5pZm9ybUxvY2F0aW9uKGIsZS5uYW1lKSxnPXRoaXMsaD1lLm5hbWUsaz1oLmxlbmd0aDtmb3IoUWQubGFzdEluZGV4PTA7Oyl7dmFyIG09UWQuZXhlYyhoKSx1PVFkLmxhc3RJbmRleCxxPW1bMV0sbj1tWzNdOyJdIj09PW1bMl0mJihxfD0wKTtpZih2b2lkIDA9PT1ufHwiWyI9PT1uJiZ1KzI9PT1rKXtoPWc7ZT12b2lkIDA9PT1uP25ldyBHZihxLGUsZik6bmV3IEhmKHEsZSxmKTtoLnNlcS5wdXNoKGUpO2gubWFwW2UuaWRdPWU7YnJlYWt9ZWxzZSBuPQpnLm1hcFtxXSx2b2lkIDA9PT1uJiYobj1uZXcgSWUocSkscT1nLGc9bixxLnNlcS5wdXNoKGcpLHEubWFwW2cuaWRdPWcpLGc9bn19fWZ1bmN0aW9uIEgoYSxiLGMpe3JldHVybiB2b2lkIDA9PT1iJiZ2b2lkIDA9PT1jP3RoaXMuc2V0KGEpOnRoaXMuc2V0UkdCKGEsYixjKX1mdW5jdGlvbiBpZChhLGIpe3RoaXMubWluPXZvaWQgMCE9PWE/YTpuZXcgRChJbmZpbml0eSxJbmZpbml0eSk7dGhpcy5tYXg9dm9pZCAwIT09Yj9iOm5ldyBEKC1JbmZpbml0eSwtSW5maW5pdHkpfWZ1bmN0aW9uIElmKGEsYil7dmFyIGMsZCxlLGYsZyxoLGssbSx1LHEsbj1hLmNvbnRleHQscj1hLnN0YXRlLGwsdCx5LHgsdixHO3RoaXMucmVuZGVyPWZ1bmN0aW9uKHcsTyxTKXtpZigwIT09Yi5sZW5ndGgpe3c9bmV3IHA7dmFyIEU9Uy53L1MueixGPS41KlMueixhYT0uNSpTLncsUj0xNi9TLncsY2E9bmV3IEQoUipFLFIpLGxhPW5ldyBwKDEsMSwwKSxnYj1uZXcgRCgxLDEpLEdiPW5ldyBpZDtHYi5taW4uc2V0KFMueCwKUy55KTtHYi5tYXguc2V0KFMueCsoUy56LTE2KSxTLnkrKFMudy0xNikpO2lmKHZvaWQgMD09PXgpe3ZhciBSPW5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLDAsMCwxLC0xLDEsMCwxLDEsMSwxLC0xLDEsMCwxXSksamE9bmV3IFVpbnQxNkFycmF5KFswLDEsMiwwLDIsM10pO2w9bi5jcmVhdGVCdWZmZXIoKTt0PW4uY3JlYXRlQnVmZmVyKCk7bi5iaW5kQnVmZmVyKG4uQVJSQVlfQlVGRkVSLGwpO24uYnVmZmVyRGF0YShuLkFSUkFZX0JVRkZFUixSLG4uU1RBVElDX0RSQVcpO24uYmluZEJ1ZmZlcihuLkVMRU1FTlRfQVJSQVlfQlVGRkVSLHQpO24uYnVmZmVyRGF0YShuLkVMRU1FTlRfQVJSQVlfQlVGRkVSLGphLG4uU1RBVElDX0RSQVcpO3Y9bi5jcmVhdGVUZXh0dXJlKCk7Rz1uLmNyZWF0ZVRleHR1cmUoKTtyLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCx2KTtuLnRleEltYWdlMkQobi5URVhUVVJFXzJELDAsbi5SR0IsMTYsMTYsMCxuLlJHQixuLlVOU0lHTkVEX0JZVEUsbnVsbCk7Cm4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfUyxuLkNMQU1QX1RPX0VER0UpO24udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfVCxuLkNMQU1QX1RPX0VER0UpO24udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01BR19GSUxURVIsbi5ORUFSRVNUKTtuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTkVBUkVTVCk7ci5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsRyk7bi50ZXhJbWFnZTJEKG4uVEVYVFVSRV8yRCwwLG4uUkdCQSwxNiwxNiwwLG4uUkdCQSxuLlVOU0lHTkVEX0JZVEUsbnVsbCk7bi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9TLG4uQ0xBTVBfVE9fRURHRSk7bi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9ULG4uQ0xBTVBfVE9fRURHRSk7bi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCwKbi5URVhUVVJFX01BR19GSUxURVIsbi5ORUFSRVNUKTtuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTkVBUkVTVCk7dmFyIFI9eT17dmVydGV4U2hhZGVyOiJ1bmlmb3JtIGxvd3AgaW50IHJlbmRlclR5cGU7XG51bmlmb3JtIHZlYzMgc2NyZWVuUG9zaXRpb247XG51bmlmb3JtIHZlYzIgc2NhbGU7XG51bmlmb3JtIGZsb2F0IHJvdGF0aW9uO1xudW5pZm9ybSBzYW1wbGVyMkQgb2NjbHVzaW9uTWFwO1xuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMiB1djtcbnZhcnlpbmcgdmVjMiB2VVY7XG52YXJ5aW5nIGZsb2F0IHZWaXNpYmlsaXR5O1xudm9pZCBtYWluKCkge1xudlVWID0gdXY7XG52ZWMyIHBvcyA9IHBvc2l0aW9uO1xuaWYgKCByZW5kZXJUeXBlID09IDIgKSB7XG52ZWM0IHZpc2liaWxpdHkgPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC4xLCAwLjEgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC41LCAwLjEgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC45LCAwLjEgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC45LCAwLjUgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC45LCAwLjkgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC41LCAwLjkgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC4xLCAwLjkgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC4xLCAwLjUgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC41LCAwLjUgKSApO1xudlZpc2liaWxpdHkgPSAgICAgICAgdmlzaWJpbGl0eS5yIC8gOS4wO1xudlZpc2liaWxpdHkgKj0gMS4wIC0gdmlzaWJpbGl0eS5nIC8gOS4wO1xudlZpc2liaWxpdHkgKj0gICAgICAgdmlzaWJpbGl0eS5iIC8gOS4wO1xudlZpc2liaWxpdHkgKj0gMS4wIC0gdmlzaWJpbGl0eS5hIC8gOS4wO1xucG9zLnggPSBjb3MoIHJvdGF0aW9uICkgKiBwb3NpdGlvbi54IC0gc2luKCByb3RhdGlvbiApICogcG9zaXRpb24ueTtcbnBvcy55ID0gc2luKCByb3RhdGlvbiApICogcG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIHBvc2l0aW9uLnk7XG59XG5nbF9Qb3NpdGlvbiA9IHZlYzQoICggcG9zICogc2NhbGUgKyBzY3JlZW5Qb3NpdGlvbi54eSApLnh5LCBzY3JlZW5Qb3NpdGlvbi56LCAxLjAgKTtcbn0iLApmcmFnbWVudFNoYWRlcjoidW5pZm9ybSBsb3dwIGludCByZW5kZXJUeXBlO1xudW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSB2ZWMzIGNvbG9yO1xudmFyeWluZyB2ZWMyIHZVVjtcbnZhcnlpbmcgZmxvYXQgdlZpc2liaWxpdHk7XG52b2lkIG1haW4oKSB7XG5pZiAoIHJlbmRlclR5cGUgPT0gMCApIHtcbmdsX0ZyYWdDb2xvciA9IHZlYzQoIDEuMCwgMC4wLCAxLjAsIDAuMCApO1xufSBlbHNlIGlmICggcmVuZGVyVHlwZSA9PSAxICkge1xuZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCBtYXAsIHZVViApO1xufSBlbHNlIHtcbnZlYzQgdGV4dHVyZSA9IHRleHR1cmUyRCggbWFwLCB2VVYgKTtcbnRleHR1cmUuYSAqPSBvcGFjaXR5ICogdlZpc2liaWxpdHk7XG5nbF9GcmFnQ29sb3IgPSB0ZXh0dXJlO1xuZ2xfRnJhZ0NvbG9yLnJnYiAqPSBjb2xvcjtcbn1cbn0ifSxqYT1uLmNyZWF0ZVByb2dyYW0oKSxQPW4uY3JlYXRlU2hhZGVyKG4uRlJBR01FTlRfU0hBREVSKSwKSz1uLmNyZWF0ZVNoYWRlcihuLlZFUlRFWF9TSEFERVIpLFc9InByZWNpc2lvbiAiK2EuZ2V0UHJlY2lzaW9uKCkrIiBmbG9hdDtcbiI7bi5zaGFkZXJTb3VyY2UoUCxXK1IuZnJhZ21lbnRTaGFkZXIpO24uc2hhZGVyU291cmNlKEssVytSLnZlcnRleFNoYWRlcik7bi5jb21waWxlU2hhZGVyKFApO24uY29tcGlsZVNoYWRlcihLKTtuLmF0dGFjaFNoYWRlcihqYSxQKTtuLmF0dGFjaFNoYWRlcihqYSxLKTtuLmxpbmtQcm9ncmFtKGphKTt4PWphO3U9bi5nZXRBdHRyaWJMb2NhdGlvbih4LCJwb3NpdGlvbiIpO3E9bi5nZXRBdHRyaWJMb2NhdGlvbih4LCJ1diIpO2M9bi5nZXRVbmlmb3JtTG9jYXRpb24oeCwicmVuZGVyVHlwZSIpO2Q9bi5nZXRVbmlmb3JtTG9jYXRpb24oeCwibWFwIik7ZT1uLmdldFVuaWZvcm1Mb2NhdGlvbih4LCJvY2NsdXNpb25NYXAiKTtmPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKHgsIm9wYWNpdHkiKTtnPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKHgsImNvbG9yIik7Cmg9bi5nZXRVbmlmb3JtTG9jYXRpb24oeCwic2NhbGUiKTtrPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKHgsInJvdGF0aW9uIik7bT1uLmdldFVuaWZvcm1Mb2NhdGlvbih4LCJzY3JlZW5Qb3NpdGlvbiIpfW4udXNlUHJvZ3JhbSh4KTtyLmluaXRBdHRyaWJ1dGVzKCk7ci5lbmFibGVBdHRyaWJ1dGUodSk7ci5lbmFibGVBdHRyaWJ1dGUocSk7ci5kaXNhYmxlVW51c2VkQXR0cmlidXRlcygpO24udW5pZm9ybTFpKGUsMCk7bi51bmlmb3JtMWkoZCwxKTtuLmJpbmRCdWZmZXIobi5BUlJBWV9CVUZGRVIsbCk7bi52ZXJ0ZXhBdHRyaWJQb2ludGVyKHUsMixuLkZMT0FULCExLDE2LDApO24udmVydGV4QXR0cmliUG9pbnRlcihxLDIsbi5GTE9BVCwhMSwxNiw4KTtuLmJpbmRCdWZmZXIobi5FTEVNRU5UX0FSUkFZX0JVRkZFUix0KTtyLmRpc2FibGUobi5DVUxMX0ZBQ0UpO3IuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCExKTtqYT0wO2ZvcihQPWIubGVuZ3RoO2phPFA7amErKylpZihSPTE2L1MudywKY2Euc2V0KFIqRSxSKSxLPWJbamFdLHcuc2V0KEsubWF0cml4V29ybGQuZWxlbWVudHNbMTJdLEsubWF0cml4V29ybGQuZWxlbWVudHNbMTNdLEsubWF0cml4V29ybGQuZWxlbWVudHNbMTRdKSx3LmFwcGx5TWF0cml4NChPLm1hdHJpeFdvcmxkSW52ZXJzZSksdy5hcHBseU1hdHJpeDQoTy5wcm9qZWN0aW9uTWF0cml4KSxsYS5jb3B5KHcpLGdiLng9Uy54K2xhLngqRitGLTgsZ2IueT1TLnkrbGEueSphYSthYS04LCEwPT09R2IuY29udGFpbnNQb2ludChnYikpe3IuYWN0aXZlVGV4dHVyZShuLlRFWFRVUkUwKTtyLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCxudWxsKTtyLmFjdGl2ZVRleHR1cmUobi5URVhUVVJFMSk7ci5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsdik7bi5jb3B5VGV4SW1hZ2UyRChuLlRFWFRVUkVfMkQsMCxuLlJHQixnYi54LGdiLnksMTYsMTYsMCk7bi51bmlmb3JtMWkoYywwKTtuLnVuaWZvcm0yZihoLGNhLngsY2EueSk7bi51bmlmb3JtM2YobSxsYS54LGxhLnksCmxhLnopO3IuZGlzYWJsZShuLkJMRU5EKTtyLmVuYWJsZShuLkRFUFRIX1RFU1QpO24uZHJhd0VsZW1lbnRzKG4uVFJJQU5HTEVTLDYsbi5VTlNJR05FRF9TSE9SVCwwKTtyLmFjdGl2ZVRleHR1cmUobi5URVhUVVJFMCk7ci5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsRyk7bi5jb3B5VGV4SW1hZ2UyRChuLlRFWFRVUkVfMkQsMCxuLlJHQkEsZ2IueCxnYi55LDE2LDE2LDApO24udW5pZm9ybTFpKGMsMSk7ci5kaXNhYmxlKG4uREVQVEhfVEVTVCk7ci5hY3RpdmVUZXh0dXJlKG4uVEVYVFVSRTEpO3IuYmluZFRleHR1cmUobi5URVhUVVJFXzJELHYpO24uZHJhd0VsZW1lbnRzKG4uVFJJQU5HTEVTLDYsbi5VTlNJR05FRF9TSE9SVCwwKTtLLnBvc2l0aW9uU2NyZWVuLmNvcHkobGEpO0suY3VzdG9tVXBkYXRlQ2FsbGJhY2s/Sy5jdXN0b21VcGRhdGVDYWxsYmFjayhLKTpLLnVwZGF0ZUxlbnNGbGFyZXMoKTtuLnVuaWZvcm0xaShjLDIpO3IuZW5hYmxlKG4uQkxFTkQpO2Zvcih2YXIgVz0KMCxiYT1LLmxlbnNGbGFyZXMubGVuZ3RoO1c8YmE7VysrKXt2YXIgVD1LLmxlbnNGbGFyZXNbV107LjAwMTxULm9wYWNpdHkmJi4wMDE8VC5zY2FsZSYmKGxhLng9VC54LGxhLnk9VC55LGxhLno9VC56LFI9VC5zaXplKlQuc2NhbGUvUy53LGNhLng9UipFLGNhLnk9UixuLnVuaWZvcm0zZihtLGxhLngsbGEueSxsYS56KSxuLnVuaWZvcm0yZihoLGNhLngsY2EueSksbi51bmlmb3JtMWYoayxULnJvdGF0aW9uKSxuLnVuaWZvcm0xZihmLFQub3BhY2l0eSksbi51bmlmb3JtM2YoZyxULmNvbG9yLnIsVC5jb2xvci5nLFQuY29sb3IuYiksci5zZXRCbGVuZGluZyhULmJsZW5kaW5nLFQuYmxlbmRFcXVhdGlvbixULmJsZW5kU3JjLFQuYmxlbmREc3QpLGEuc2V0VGV4dHVyZTJEKFQudGV4dHVyZSwxKSxuLmRyYXdFbGVtZW50cyhuLlRSSUFOR0xFUyw2LG4uVU5TSUdORURfU0hPUlQsMCkpfX1yLmVuYWJsZShuLkNVTExfRkFDRSk7ci5lbmFibGUobi5ERVBUSF9URVNUKTtyLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayghMCk7CmEucmVzZXRHTFN0YXRlKCl9fX1mdW5jdGlvbiBKZihhLGIpe3ZhciBjLGQsZSxmLGcsaCxrLG0sdSxxLG4scixsLHQseSx4LHY7ZnVuY3Rpb24gRyhhLGIpe3JldHVybiBhLnJlbmRlck9yZGVyIT09Yi5yZW5kZXJPcmRlcj9hLnJlbmRlck9yZGVyLWIucmVuZGVyT3JkZXI6YS56IT09Yi56P2Iuei1hLno6Yi5pZC1hLmlkfXZhciB3PWEuY29udGV4dCxPPWEuc3RhdGUsUyxFLEYsYWEsUj1uZXcgcCxjYT1uZXcgcWEsbGE9bmV3IHA7dGhpcy5yZW5kZXI9ZnVuY3Rpb24ocCxHYil7aWYoMCE9PWIubGVuZ3RoKXtpZih2b2lkIDA9PT1GKXt2YXIgamE9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsLjUsLS41LDEsMCwuNSwuNSwxLDEsLS41LC41LDAsMV0pLFA9bmV3IFVpbnQxNkFycmF5KFswLDEsMiwwLDIsM10pO1M9dy5jcmVhdGVCdWZmZXIoKTtFPXcuY3JlYXRlQnVmZmVyKCk7dy5iaW5kQnVmZmVyKHcuQVJSQVlfQlVGRkVSLFMpO3cuYnVmZmVyRGF0YSh3LkFSUkFZX0JVRkZFUiwKamEsdy5TVEFUSUNfRFJBVyk7dy5iaW5kQnVmZmVyKHcuRUxFTUVOVF9BUlJBWV9CVUZGRVIsRSk7dy5idWZmZXJEYXRhKHcuRUxFTUVOVF9BUlJBWV9CVUZGRVIsUCx3LlNUQVRJQ19EUkFXKTt2YXIgamE9dy5jcmVhdGVQcm9ncmFtKCksUD13LmNyZWF0ZVNoYWRlcih3LlZFUlRFWF9TSEFERVIpLEs9dy5jcmVhdGVTaGFkZXIody5GUkFHTUVOVF9TSEFERVIpO3cuc2hhZGVyU291cmNlKFAsWyJwcmVjaXNpb24gIithLmdldFByZWNpc2lvbigpKyIgZmxvYXQ7IiwidW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDtcbnVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4O1xudW5pZm9ybSBmbG9hdCByb3RhdGlvbjtcbnVuaWZvcm0gdmVjMiBzY2FsZTtcbnVuaWZvcm0gdmVjMiB1dk9mZnNldDtcbnVuaWZvcm0gdmVjMiB1dlNjYWxlO1xuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMiB1djtcbnZhcnlpbmcgdmVjMiB2VVY7XG52b2lkIG1haW4oKSB7XG52VVYgPSB1dk9mZnNldCArIHV2ICogdXZTY2FsZTtcbnZlYzIgYWxpZ25lZFBvc2l0aW9uID0gcG9zaXRpb24gKiBzY2FsZTtcbnZlYzIgcm90YXRlZFBvc2l0aW9uO1xucm90YXRlZFBvc2l0aW9uLnggPSBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xucm90YXRlZFBvc2l0aW9uLnkgPSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xudmVjNCBmaW5hbFBvc2l0aW9uO1xuZmluYWxQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuZmluYWxQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247XG5maW5hbFBvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIGZpbmFsUG9zaXRpb247XG5nbF9Qb3NpdGlvbiA9IGZpbmFsUG9zaXRpb247XG59Il0uam9pbigiXG4iKSk7Cncuc2hhZGVyU291cmNlKEssWyJwcmVjaXNpb24gIithLmdldFByZWNpc2lvbigpKyIgZmxvYXQ7IiwidW5pZm9ybSB2ZWMzIGNvbG9yO1xudW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBpbnQgZm9nVHlwZTtcbnVuaWZvcm0gdmVjMyBmb2dDb2xvcjtcbnVuaWZvcm0gZmxvYXQgZm9nRGVuc2l0eTtcbnVuaWZvcm0gZmxvYXQgZm9nTmVhcjtcbnVuaWZvcm0gZmxvYXQgZm9nRmFyO1xudW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7XG52YXJ5aW5nIHZlYzIgdlVWO1xudm9pZCBtYWluKCkge1xudmVjNCB0ZXh0dXJlID0gdGV4dHVyZTJEKCBtYXAsIHZVViApO1xuaWYgKCB0ZXh0dXJlLmEgPCBhbHBoYVRlc3QgKSBkaXNjYXJkO1xuZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IgKiB0ZXh0dXJlLnh5eiwgdGV4dHVyZS5hICogb3BhY2l0eSApO1xuaWYgKCBmb2dUeXBlID4gMCApIHtcbmZsb2F0IGRlcHRoID0gZ2xfRnJhZ0Nvb3JkLnogLyBnbF9GcmFnQ29vcmQudztcbmZsb2F0IGZvZ0ZhY3RvciA9IDAuMDtcbmlmICggZm9nVHlwZSA9PSAxICkge1xuZm9nRmFjdG9yID0gc21vb3Roc3RlcCggZm9nTmVhciwgZm9nRmFyLCBkZXB0aCApO1xufSBlbHNlIHtcbmNvbnN0IGZsb2F0IExPRzIgPSAxLjQ0MjY5NTtcbmZvZ0ZhY3RvciA9IGV4cDIoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiBkZXB0aCAqIGRlcHRoICogTE9HMiApO1xuZm9nRmFjdG9yID0gMS4wIC0gY2xhbXAoIGZvZ0ZhY3RvciwgMC4wLCAxLjAgKTtcbn1cbmdsX0ZyYWdDb2xvciA9IG1peCggZ2xfRnJhZ0NvbG9yLCB2ZWM0KCBmb2dDb2xvciwgZ2xfRnJhZ0NvbG9yLncgKSwgZm9nRmFjdG9yICk7XG59XG59Il0uam9pbigiXG4iKSk7CncuY29tcGlsZVNoYWRlcihQKTt3LmNvbXBpbGVTaGFkZXIoSyk7dy5hdHRhY2hTaGFkZXIoamEsUCk7dy5hdHRhY2hTaGFkZXIoamEsSyk7dy5saW5rUHJvZ3JhbShqYSk7Rj1qYTt4PXcuZ2V0QXR0cmliTG9jYXRpb24oRiwicG9zaXRpb24iKTt2PXcuZ2V0QXR0cmliTG9jYXRpb24oRiwidXYiKTtjPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsInV2T2Zmc2V0Iik7ZD13LmdldFVuaWZvcm1Mb2NhdGlvbihGLCJ1dlNjYWxlIik7ZT13LmdldFVuaWZvcm1Mb2NhdGlvbihGLCJyb3RhdGlvbiIpO2Y9dy5nZXRVbmlmb3JtTG9jYXRpb24oRiwic2NhbGUiKTtnPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImNvbG9yIik7aD13LmdldFVuaWZvcm1Mb2NhdGlvbihGLCJtYXAiKTtrPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsIm9wYWNpdHkiKTttPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsIm1vZGVsVmlld01hdHJpeCIpO3U9dy5nZXRVbmlmb3JtTG9jYXRpb24oRiwicHJvamVjdGlvbk1hdHJpeCIpOwpxPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImZvZ1R5cGUiKTtuPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImZvZ0RlbnNpdHkiKTtyPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImZvZ05lYXIiKTtsPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImZvZ0ZhciIpO3Q9dy5nZXRVbmlmb3JtTG9jYXRpb24oRiwiZm9nQ29sb3IiKTt5PXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImFscGhhVGVzdCIpO2phPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImNhbnZhcyIpO2phLndpZHRoPTg7amEuaGVpZ2h0PTg7UD1qYS5nZXRDb250ZXh0KCIyZCIpO1AuZmlsbFN0eWxlPSJ3aGl0ZSI7UC5maWxsUmVjdCgwLDAsOCw4KTthYT1uZXcgWChqYSk7YWEubmVlZHNVcGRhdGU9ITB9dy51c2VQcm9ncmFtKEYpO08uaW5pdEF0dHJpYnV0ZXMoKTtPLmVuYWJsZUF0dHJpYnV0ZSh4KTtPLmVuYWJsZUF0dHJpYnV0ZSh2KTtPLmRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzKCk7Ck8uZGlzYWJsZSh3LkNVTExfRkFDRSk7Ty5lbmFibGUody5CTEVORCk7dy5iaW5kQnVmZmVyKHcuQVJSQVlfQlVGRkVSLFMpO3cudmVydGV4QXR0cmliUG9pbnRlcih4LDIsdy5GTE9BVCwhMSwxNiwwKTt3LnZlcnRleEF0dHJpYlBvaW50ZXIodiwyLHcuRkxPQVQsITEsMTYsOCk7dy5iaW5kQnVmZmVyKHcuRUxFTUVOVF9BUlJBWV9CVUZGRVIsRSk7dy51bmlmb3JtTWF0cml4NGZ2KHUsITEsR2IucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyk7Ty5hY3RpdmVUZXh0dXJlKHcuVEVYVFVSRTApO3cudW5pZm9ybTFpKGgsMCk7UD1qYT0wOyhLPXAuZm9nKT8ody51bmlmb3JtM2YodCxLLmNvbG9yLnIsSy5jb2xvci5nLEsuY29sb3IuYiksSy5pc0ZvZz8ody51bmlmb3JtMWYocixLLm5lYXIpLHcudW5pZm9ybTFmKGwsSy5mYXIpLHcudW5pZm9ybTFpKHEsMSksUD1qYT0xKTpLLmlzRm9nRXhwMiYmKHcudW5pZm9ybTFmKG4sSy5kZW5zaXR5KSx3LnVuaWZvcm0xaShxLDIpLFA9amE9MikpOgoody51bmlmb3JtMWkocSwwKSxQPWphPTApO2Zvcih2YXIgSz0wLFc9Yi5sZW5ndGg7SzxXO0srKyl7dmFyIGJhPWJbS107YmEubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoR2IubWF0cml4V29ybGRJbnZlcnNlLGJhLm1hdHJpeFdvcmxkKTtiYS56PS1iYS5tb2RlbFZpZXdNYXRyaXguZWxlbWVudHNbMTRdfWIuc29ydChHKTtmb3IodmFyIFQ9W10sSz0wLFc9Yi5sZW5ndGg7SzxXO0srKyl7dmFyIGJhPWJbS10sUT1iYS5tYXRlcmlhbDshMSE9PVEudmlzaWJsZSYmKHcudW5pZm9ybTFmKHksUS5hbHBoYVRlc3QpLHcudW5pZm9ybU1hdHJpeDRmdihtLCExLGJhLm1vZGVsVmlld01hdHJpeC5lbGVtZW50cyksYmEubWF0cml4V29ybGQuZGVjb21wb3NlKFIsY2EsbGEpLFRbMF09bGEueCxUWzFdPWxhLnksYmE9MCxwLmZvZyYmUS5mb2cmJihiYT1QKSxqYSE9PWJhJiYody51bmlmb3JtMWkocSxiYSksamE9YmEpLG51bGwhPT1RLm1hcD8ody51bmlmb3JtMmYoYyxRLm1hcC5vZmZzZXQueCwKUS5tYXAub2Zmc2V0LnkpLHcudW5pZm9ybTJmKGQsUS5tYXAucmVwZWF0LngsUS5tYXAucmVwZWF0LnkpKToody51bmlmb3JtMmYoYywwLDApLHcudW5pZm9ybTJmKGQsMSwxKSksdy51bmlmb3JtMWYoayxRLm9wYWNpdHkpLHcudW5pZm9ybTNmKGcsUS5jb2xvci5yLFEuY29sb3IuZyxRLmNvbG9yLmIpLHcudW5pZm9ybTFmKGUsUS5yb3RhdGlvbiksdy51bmlmb3JtMmZ2KGYsVCksTy5zZXRCbGVuZGluZyhRLmJsZW5kaW5nLFEuYmxlbmRFcXVhdGlvbixRLmJsZW5kU3JjLFEuYmxlbmREc3QpLE8uYnVmZmVycy5kZXB0aC5zZXRUZXN0KFEuZGVwdGhUZXN0KSxPLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayhRLmRlcHRoV3JpdGUpLFEubWFwP2Euc2V0VGV4dHVyZTJEKFEubWFwLDApOmEuc2V0VGV4dHVyZTJEKGFhLDApLHcuZHJhd0VsZW1lbnRzKHcuVFJJQU5HTEVTLDYsdy5VTlNJR05FRF9TSE9SVCwwKSl9Ty5lbmFibGUody5DVUxMX0ZBQ0UpO2EucmVzZXRHTFN0YXRlKCl9fX1mdW5jdGlvbiBaKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsCiJpZCIse3ZhbHVlOktmKyt9KTt0aGlzLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKTt0aGlzLm5hbWU9IiI7dGhpcy50eXBlPSJNYXRlcmlhbCI7dGhpcy5saWdodHM9dGhpcy5mb2c9ITA7dGhpcy5ibGVuZGluZz0xO3RoaXMuc2lkZT0wO3RoaXMuc2hhZGluZz0yO3RoaXMudmVydGV4Q29sb3JzPTA7dGhpcy5vcGFjaXR5PTE7dGhpcy50cmFuc3BhcmVudD0hMTt0aGlzLmJsZW5kU3JjPTIwNDt0aGlzLmJsZW5kRHN0PTIwNTt0aGlzLmJsZW5kRXF1YXRpb249MTAwO3RoaXMuYmxlbmRFcXVhdGlvbkFscGhhPXRoaXMuYmxlbmREc3RBbHBoYT10aGlzLmJsZW5kU3JjQWxwaGE9bnVsbDt0aGlzLmRlcHRoRnVuYz0zO3RoaXMuZGVwdGhXcml0ZT10aGlzLmRlcHRoVGVzdD0hMDt0aGlzLmNsaXBwaW5nUGxhbmVzPW51bGw7dGhpcy5jbGlwU2hhZG93cz10aGlzLmNsaXBJbnRlcnNlY3Rpb249ITE7dGhpcy5jb2xvcldyaXRlPSEwO3RoaXMucHJlY2lzaW9uPW51bGw7dGhpcy5wb2x5Z29uT2Zmc2V0PQohMTt0aGlzLnBvbHlnb25PZmZzZXRVbml0cz10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9MDt0aGlzLmRpdGhlcmluZz0hMTt0aGlzLmFscGhhVGVzdD0wO3RoaXMucHJlbXVsdGlwbGllZEFscGhhPSExO3RoaXMub3ZlcmRyYXc9MDt0aGlzLm5lZWRzVXBkYXRlPXRoaXMudmlzaWJsZT0hMH1mdW5jdGlvbiBFYShhKXtaLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTaGFkZXJNYXRlcmlhbCI7dGhpcy5kZWZpbmVzPXt9O3RoaXMudW5pZm9ybXM9e307dGhpcy52ZXJ0ZXhTaGFkZXI9InZvaWQgbWFpbigpIHtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSI7dGhpcy5mcmFnbWVudFNoYWRlcj0idm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTtcbn0iO3RoaXMubGluZXdpZHRoPTE7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9CjE7dGhpcy5tb3JwaE5vcm1hbHM9dGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz10aGlzLmNsaXBwaW5nPXRoaXMubGlnaHRzPXRoaXMuZm9nPSExO3RoaXMuZXh0ZW5zaW9ucz17ZGVyaXZhdGl2ZXM6ITEsZnJhZ0RlcHRoOiExLGRyYXdCdWZmZXJzOiExLHNoYWRlclRleHR1cmVMT0Q6ITF9O3RoaXMuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcz17Y29sb3I6WzEsMSwxXSx1djpbMCwwXSx1djI6WzAsMF19O3RoaXMuaW5kZXgwQXR0cmlidXRlTmFtZT12b2lkIDA7dm9pZCAwIT09YSYmKHZvaWQgMCE9PWEuYXR0cmlidXRlcyYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXMoYSkpfWZ1bmN0aW9uICRhKGEpe1ouY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ik1lc2hEZXB0aE1hdGVyaWFsIjt0aGlzLmRlcHRoUGFja2luZz0KMzIwMDt0aGlzLm1vcnBoVGFyZ2V0cz10aGlzLnNraW5uaW5nPSExO3RoaXMuZGlzcGxhY2VtZW50TWFwPXRoaXMuYWxwaGFNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTE7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPTA7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLmxpZ2h0cz10aGlzLmZvZz0hMTt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiBUYShhLGIpe3RoaXMubWluPXZvaWQgMCE9PWE/YTpuZXcgcChJbmZpbml0eSxJbmZpbml0eSxJbmZpbml0eSk7dGhpcy5tYXg9dm9pZCAwIT09Yj9iOm5ldyBwKC1JbmZpbml0eSwtSW5maW5pdHksLUluZmluaXR5KX1mdW5jdGlvbiBHYShhLGIpe3RoaXMuY2VudGVyPXZvaWQgMCE9PWE/YTpuZXcgcDt0aGlzLnJhZGl1cz12b2lkIDAhPT1iP2I6MH1mdW5jdGlvbiBLYSgpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMSwwLDAsMCwxXTswPGFyZ3VtZW50cy5sZW5ndGgmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9CmZ1bmN0aW9uIHdhKGEsYil7dGhpcy5ub3JtYWw9dm9pZCAwIT09YT9hOm5ldyBwKDEsMCwwKTt0aGlzLmNvbnN0YW50PXZvaWQgMCE9PWI/YjowfWZ1bmN0aW9uIGpkKGEsYixjLGQsZSxmKXt0aGlzLnBsYW5lcz1bdm9pZCAwIT09YT9hOm5ldyB3YSx2b2lkIDAhPT1iP2I6bmV3IHdhLHZvaWQgMCE9PWM/YzpuZXcgd2Esdm9pZCAwIT09ZD9kOm5ldyB3YSx2b2lkIDAhPT1lP2U6bmV3IHdhLHZvaWQgMCE9PWY/ZjpuZXcgd2FdfWZ1bmN0aW9uIEplKGEsYixjLGQpe2Z1bmN0aW9uIGUoYixjLGQsZSl7dmFyIGY9Yi5nZW9tZXRyeSxnO2c9dDt2YXIgaD1iLmN1c3RvbURlcHRoTWF0ZXJpYWw7ZCYmKGc9eSxoPWIuY3VzdG9tRGlzdGFuY2VNYXRlcmlhbCk7aD9nPWg6KGg9ITEsYy5tb3JwaFRhcmdldHMmJihmJiZmLmlzQnVmZmVyR2VvbWV0cnk/aD1mLm1vcnBoQXR0cmlidXRlcyYmZi5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24mJjA8Zi5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOgpmJiZmLmlzR2VvbWV0cnkmJihoPWYubW9ycGhUYXJnZXRzJiYwPGYubW9ycGhUYXJnZXRzLmxlbmd0aCkpLGIuaXNTa2lubmVkTWVzaCYmITE9PT1jLnNraW5uaW5nJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiBUSFJFRS5Ta2lubmVkTWVzaCB3aXRoIG1hdGVyaWFsLnNraW5uaW5nIHNldCB0byBmYWxzZToiLGIpLGI9Yi5pc1NraW5uZWRNZXNoJiZjLnNraW5uaW5nLGY9MCxoJiYoZnw9MSksYiYmKGZ8PTIpLGc9Z1tmXSk7YS5sb2NhbENsaXBwaW5nRW5hYmxlZCYmITA9PT1jLmNsaXBTaGFkb3dzJiYwIT09Yy5jbGlwcGluZ1BsYW5lcy5sZW5ndGgmJihmPWcudXVpZCxoPWMudXVpZCxiPXhbZl0sdm9pZCAwPT09YiYmKGI9e30seFtmXT1iKSxmPWJbaF0sdm9pZCAwPT09ZiYmKGY9Zy5jbG9uZSgpLGJbaF09ZiksZz1mKTtnLnZpc2libGU9Yy52aXNpYmxlO2cud2lyZWZyYW1lPWMud2lyZWZyYW1lO2g9Yy5zaWRlO1IucmVuZGVyU2luZ2xlU2lkZWQmJjI9PWgmJgooaD0wKTtSLnJlbmRlclJldmVyc2VTaWRlZCYmKDA9PT1oP2g9MToxPT09aCYmKGg9MCkpO2cuc2lkZT1oO2cuY2xpcFNoYWRvd3M9Yy5jbGlwU2hhZG93cztnLmNsaXBwaW5nUGxhbmVzPWMuY2xpcHBpbmdQbGFuZXM7Zy53aXJlZnJhbWVMaW5ld2lkdGg9Yy53aXJlZnJhbWVMaW5ld2lkdGg7Zy5saW5ld2lkdGg9Yy5saW5ld2lkdGg7ZCYmdm9pZCAwIT09Zy51bmlmb3Jtcy5saWdodFBvcyYmZy51bmlmb3Jtcy5saWdodFBvcy52YWx1ZS5jb3B5KGUpO3JldHVybiBnfWZ1bmN0aW9uIGYoYixkLGcsaCl7aWYoITEhPT1iLnZpc2libGUpe2lmKGIubGF5ZXJzLnRlc3QoZC5sYXllcnMpJiYoYi5pc01lc2h8fGIuaXNMaW5lfHxiLmlzUG9pbnRzKSYmYi5jYXN0U2hhZG93JiYoIWIuZnJ1c3R1bUN1bGxlZHx8ay5pbnRlcnNlY3RzT2JqZWN0KGIpKSl7Yi5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhnLm1hdHJpeFdvcmxkSW52ZXJzZSxiLm1hdHJpeFdvcmxkKTt2YXIgbT0KYy51cGRhdGUoYiksbj1iLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHZhciB1PW0uZ3JvdXBzLHE9MCxyPXUubGVuZ3RoO3E8cjtxKyspe3ZhciB4PXVbcV0sdj1uW3gubWF0ZXJpYWxJbmRleF07diYmdi52aXNpYmxlJiYodj1lKGIsdixoLGwpLGEucmVuZGVyQnVmZmVyRGlyZWN0KGcsbnVsbCxtLHYsYix4KSl9ZWxzZSBuLnZpc2libGUmJih2PWUoYixuLGgsbCksYS5yZW5kZXJCdWZmZXJEaXJlY3QoZyxudWxsLG0sdixiLG51bGwpKX1iPWIuY2hpbGRyZW47bT0wO2ZvcihuPWIubGVuZ3RoO208bjttKyspZihiW21dLGQsZyxoKX19dmFyIGc9YS5jb250ZXh0LGg9YS5zdGF0ZSxrPW5ldyBqZCxtPW5ldyBKLHU9Yi5zaGFkb3dzLHE9bmV3IEQsbj1uZXcgRChkLm1heFRleHR1cmVTaXplLGQubWF4VGV4dHVyZVNpemUpLHI9bmV3IHAsbD1uZXcgcCx0PUFycmF5KDQpLHk9QXJyYXkoNCkseD17fSx2PVtuZXcgcCgxLDAsMCksbmV3IHAoLTEsMCwwKSxuZXcgcCgwLDAsCjEpLG5ldyBwKDAsMCwtMSksbmV3IHAoMCwxLDApLG5ldyBwKDAsLTEsMCldLEc9W25ldyBwKDAsMSwwKSxuZXcgcCgwLDEsMCksbmV3IHAoMCwxLDApLG5ldyBwKDAsMSwwKSxuZXcgcCgwLDAsMSksbmV3IHAoMCwwLC0xKV0sdz1bbmV3IGdhLG5ldyBnYSxuZXcgZ2EsbmV3IGdhLG5ldyBnYSxuZXcgZ2FdO2I9bmV3ICRhO2IuZGVwdGhQYWNraW5nPTMyMDE7Yi5jbGlwcGluZz0hMDtkPWFiLmRpc3RhbmNlUkdCQTtmb3IodmFyIE89SGEuY2xvbmUoZC51bmlmb3JtcyksUz0wOzQhPT1TOysrUyl7dmFyIEU9MCE9PShTJjEpLEY9MCE9PShTJjIpLGFhPWIuY2xvbmUoKTthYS5tb3JwaFRhcmdldHM9RTthYS5za2lubmluZz1GO3RbU109YWE7RT1uZXcgRWEoe2RlZmluZXM6e1VTRV9TSEFET1dNQVA6IiJ9LHVuaWZvcm1zOk8sdmVydGV4U2hhZGVyOmQudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmQuZnJhZ21lbnRTaGFkZXIsbW9ycGhUYXJnZXRzOkUsc2tpbm5pbmc6RixjbGlwcGluZzohMH0pOwp5W1NdPUV9dmFyIFI9dGhpczt0aGlzLmVuYWJsZWQ9ITE7dGhpcy5hdXRvVXBkYXRlPSEwO3RoaXMubmVlZHNVcGRhdGU9ITE7dGhpcy50eXBlPTE7dGhpcy5yZW5kZXJTaW5nbGVTaWRlZD10aGlzLnJlbmRlclJldmVyc2VTaWRlZD0hMDt0aGlzLnJlbmRlcj1mdW5jdGlvbihiLGMpe2lmKCExIT09Ui5lbmFibGVkJiYoITEhPT1SLmF1dG9VcGRhdGV8fCExIT09Ui5uZWVkc1VwZGF0ZSkmJjAhPT11Lmxlbmd0aCl7aC5kaXNhYmxlKGcuQkxFTkQpO2guYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKTtoLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCk7aC5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKHZhciBkLGUseD0wLHQ9dS5sZW5ndGg7eDx0O3grKyl7dmFyIHA9dVt4XSx5PXAuc2hhZG93O2lmKHZvaWQgMD09PXkpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLHAsImhhcyBubyBzaGFkb3cuIik7ZWxzZXt2YXIgTz15LmNhbWVyYSxFPXkubWF0cml4O2wuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHAubWF0cml4V29ybGQpOwpPLnBvc2l0aW9uLmNvcHkobCk7cS5jb3B5KHkubWFwU2l6ZSk7cS5taW4obik7aWYocCYmcC5pc1BvaW50TGlnaHQpe2Q9NjtlPSEwO3ZhciBTPXEueCxGPXEueTt3WzBdLnNldCgyKlMsRixTLEYpO3dbMV0uc2V0KDAsRixTLEYpO3dbMl0uc2V0KDMqUyxGLFMsRik7d1szXS5zZXQoUyxGLFMsRik7d1s0XS5zZXQoMypTLDAsUyxGKTt3WzVdLnNldChTLDAsUyxGKTtxLngqPTQ7cS55Kj0yO0UubWFrZVRyYW5zbGF0aW9uKC1sLngsLWwueSwtbC56KX1lbHNlIGQ9MSxlPSExLHIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHAudGFyZ2V0Lm1hdHJpeFdvcmxkKSxPLmxvb2tBdChyKSxPLnVwZGF0ZU1hdHJpeFdvcmxkKCksTy5tYXRyaXhXb3JsZEludmVyc2UuZ2V0SW52ZXJzZShPLm1hdHJpeFdvcmxkKSxFLnNldCguNSwwLDAsLjUsMCwuNSwwLC41LDAsMCwuNSwuNSwwLDAsMCwxKSxFLm11bHRpcGx5KE8ucHJvamVjdGlvbk1hdHJpeCksRS5tdWx0aXBseShPLm1hdHJpeFdvcmxkSW52ZXJzZSk7Cm51bGw9PT15Lm1hcCYmKHkubWFwPW5ldyBEYihxLngscS55LHttaW5GaWx0ZXI6MTAwMyxtYWdGaWx0ZXI6MTAwMyxmb3JtYXQ6MTAyM30pLHkubWFwLnRleHR1cmUubmFtZT1wLm5hbWUrIi5zaGFkb3dNYXAiLE8udXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKTt5LmlzU3BvdExpZ2h0U2hhZG93JiZ5LnVwZGF0ZShwKTthLnNldFJlbmRlclRhcmdldCh5Lm1hcCk7YS5jbGVhcigpO2ZvcihwPTA7cDxkO3ArKyllJiYoci5jb3B5KE8ucG9zaXRpb24pLHIuYWRkKHZbcF0pLE8udXAuY29weShHW3BdKSxPLmxvb2tBdChyKSxPLnVwZGF0ZU1hdHJpeFdvcmxkKCksTy5tYXRyaXhXb3JsZEludmVyc2UuZ2V0SW52ZXJzZShPLm1hdHJpeFdvcmxkKSxoLnZpZXdwb3J0KHdbcF0pKSxtLm11bHRpcGx5TWF0cmljZXMoTy5wcm9qZWN0aW9uTWF0cml4LE8ubWF0cml4V29ybGRJbnZlcnNlKSxrLnNldEZyb21NYXRyaXgobSksZihiLGMsTyxlKX19ZD1hLmdldENsZWFyQ29sb3IoKTtlPWEuZ2V0Q2xlYXJBbHBoYSgpOwphLnNldENsZWFyQ29sb3IoZCxlKTtSLm5lZWRzVXBkYXRlPSExfX19ZnVuY3Rpb24gaGIoYSxiKXt0aGlzLm9yaWdpbj12b2lkIDAhPT1hP2E6bmV3IHA7dGhpcy5kaXJlY3Rpb249dm9pZCAwIT09Yj9iOm5ldyBwfWZ1bmN0aW9uIGJiKGEsYixjLGQpe3RoaXMuX3g9YXx8MDt0aGlzLl95PWJ8fDA7dGhpcy5fej1jfHwwO3RoaXMuX29yZGVyPWR8fGJiLkRlZmF1bHRPcmRlcn1mdW5jdGlvbiBSZCgpe3RoaXMubWFzaz0xfWZ1bmN0aW9uIEIoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpMZisrfSk7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7dGhpcy5uYW1lPSIiO3RoaXMudHlwZT0iT2JqZWN0M0QiO3RoaXMucGFyZW50PW51bGw7dGhpcy5jaGlsZHJlbj1bXTt0aGlzLnVwPUIuRGVmYXVsdFVwLmNsb25lKCk7dmFyIGE9bmV3IHAsYj1uZXcgYmIsYz1uZXcgcWEsZD1uZXcgcCgxLDEsMSk7Yi5vbkNoYW5nZShmdW5jdGlvbigpe2Muc2V0RnJvbUV1bGVyKGIsCiExKX0pO2Mub25DaGFuZ2UoZnVuY3Rpb24oKXtiLnNldEZyb21RdWF0ZXJuaW9uKGMsdm9pZCAwLCExKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3Bvc2l0aW9uOntlbnVtZXJhYmxlOiEwLHZhbHVlOmF9LHJvdGF0aW9uOntlbnVtZXJhYmxlOiEwLHZhbHVlOmJ9LHF1YXRlcm5pb246e2VudW1lcmFibGU6ITAsdmFsdWU6Y30sc2NhbGU6e2VudW1lcmFibGU6ITAsdmFsdWU6ZH0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgSn0sbm9ybWFsTWF0cml4Ont2YWx1ZTpuZXcgS2F9fSk7dGhpcy5tYXRyaXg9bmV3IEo7dGhpcy5tYXRyaXhXb3JsZD1uZXcgSjt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9Qi5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZTt0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITE7dGhpcy5sYXllcnM9bmV3IFJkO3RoaXMudmlzaWJsZT0hMDt0aGlzLnJlY2VpdmVTaGFkb3c9dGhpcy5jYXN0U2hhZG93PSExO3RoaXMuZnJ1c3R1bUN1bGxlZD0hMDt0aGlzLnJlbmRlck9yZGVyPQowO3RoaXMudXNlckRhdGE9e307dGhpcy5vbkJlZm9yZVJlbmRlcj1mdW5jdGlvbigpe307dGhpcy5vbkFmdGVyUmVuZGVyPWZ1bmN0aW9uKCl7fX1mdW5jdGlvbiBIYihhLGIpe3RoaXMuc3RhcnQ9dm9pZCAwIT09YT9hOm5ldyBwO3RoaXMuZW5kPXZvaWQgMCE9PWI/YjpuZXcgcH1mdW5jdGlvbiBVYShhLGIsYyl7dGhpcy5hPXZvaWQgMCE9PWE/YTpuZXcgcDt0aGlzLmI9dm9pZCAwIT09Yj9iOm5ldyBwO3RoaXMuYz12b2lkIDAhPT1jP2M6bmV3IHB9ZnVuY3Rpb24gVmEoYSxiLGMsZCxlLGYpe3RoaXMuYT1hO3RoaXMuYj1iO3RoaXMuYz1jO3RoaXMubm9ybWFsPWQmJmQuaXNWZWN0b3IzP2Q6bmV3IHA7dGhpcy52ZXJ0ZXhOb3JtYWxzPUFycmF5LmlzQXJyYXkoZCk/ZDpbXTt0aGlzLmNvbG9yPWUmJmUuaXNDb2xvcj9lOm5ldyBIO3RoaXMudmVydGV4Q29sb3JzPUFycmF5LmlzQXJyYXkoZSk/ZTpbXTt0aGlzLm1hdGVyaWFsSW5kZXg9dm9pZCAwIT09Zj9mOjB9ZnVuY3Rpb24gTmEoYSl7Wi5jYWxsKHRoaXMpOwp0aGlzLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBIKDE2Nzc3MjE1KTt0aGlzLmxpZ2h0TWFwPXRoaXMubWFwPW51bGw7dGhpcy5saWdodE1hcEludGVuc2l0eT0xO3RoaXMuYW9NYXA9bnVsbDt0aGlzLmFvTWFwSW50ZW5zaXR5PTE7dGhpcy5lbnZNYXA9dGhpcy5hbHBoYU1hcD10aGlzLnNwZWN1bGFyTWFwPW51bGw7dGhpcy5jb21iaW5lPTA7dGhpcy5yZWZsZWN0aXZpdHk9MTt0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTg7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiO3RoaXMubGlnaHRzPXRoaXMubW9ycGhUYXJnZXRzPXRoaXMuc2tpbm5pbmc9ITE7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24gTChhLGIsYyl7aWYoQXJyYXkuaXNBcnJheShhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpOwp0aGlzLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKTt0aGlzLmFycmF5PWE7dGhpcy5pdGVtU2l6ZT1iO3RoaXMuY291bnQ9dm9pZCAwIT09YT9hLmxlbmd0aC9iOjA7dGhpcy5ub3JtYWxpemVkPSEwPT09Yzt0aGlzLmR5bmFtaWM9ITE7dGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9O3RoaXMub25VcGxvYWRDYWxsYmFjaz1mdW5jdGlvbigpe307dGhpcy52ZXJzaW9uPTB9ZnVuY3Rpb24gcmMoYSxiKXtMLmNhbGwodGhpcyxuZXcgSW50OEFycmF5KGEpLGIpfWZ1bmN0aW9uIHNjKGEsYil7TC5jYWxsKHRoaXMsbmV3IFVpbnQ4QXJyYXkoYSksYil9ZnVuY3Rpb24gdGMoYSxiKXtMLmNhbGwodGhpcyxuZXcgVWludDhDbGFtcGVkQXJyYXkoYSksYil9ZnVuY3Rpb24gdWMoYSxiKXtMLmNhbGwodGhpcyxuZXcgSW50MTZBcnJheShhKSxiKX1mdW5jdGlvbiBpYihhLGIpe0wuY2FsbCh0aGlzLG5ldyBVaW50MTZBcnJheShhKSxiKX1mdW5jdGlvbiB2YyhhLGIpe0wuY2FsbCh0aGlzLApuZXcgSW50MzJBcnJheShhKSxiKX1mdW5jdGlvbiBqYihhLGIpe0wuY2FsbCh0aGlzLG5ldyBVaW50MzJBcnJheShhKSxiKX1mdW5jdGlvbiBDKGEsYil7TC5jYWxsKHRoaXMsbmV3IEZsb2F0MzJBcnJheShhKSxiKX1mdW5jdGlvbiB3YyhhLGIpe0wuY2FsbCh0aGlzLG5ldyBGbG9hdDY0QXJyYXkoYSksYil9ZnVuY3Rpb24gS2UoKXt0aGlzLmluZGljZXM9W107dGhpcy52ZXJ0aWNlcz1bXTt0aGlzLm5vcm1hbHM9W107dGhpcy5jb2xvcnM9W107dGhpcy51dnM9W107dGhpcy51dnMyPVtdO3RoaXMuZ3JvdXBzPVtdO3RoaXMubW9ycGhUYXJnZXRzPXt9O3RoaXMuc2tpbldlaWdodHM9W107dGhpcy5za2luSW5kaWNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLmdyb3Vwc05lZWRVcGRhdGU9dGhpcy51dnNOZWVkVXBkYXRlPXRoaXMuY29sb3JzTmVlZFVwZGF0ZT10aGlzLm5vcm1hbHNOZWVkVXBkYXRlPXRoaXMudmVydGljZXNOZWVkVXBkYXRlPQohMX1mdW5jdGlvbiBTZChhKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuLUluZmluaXR5O2Zvcih2YXIgYj1hWzBdLGM9MSxkPWEubGVuZ3RoO2M8ZDsrK2MpYVtjXT5iJiYoYj1hW2NdKTtyZXR1cm4gYn1mdW5jdGlvbiBNKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6VGQrK30pO3RoaXMudXVpZD1ZLmdlbmVyYXRlVVVJRCgpO3RoaXMubmFtZT0iIjt0aGlzLnR5cGU9Ikdlb21ldHJ5Ijt0aGlzLnZlcnRpY2VzPVtdO3RoaXMuY29sb3JzPVtdO3RoaXMuZmFjZXM9W107dGhpcy5mYWNlVmVydGV4VXZzPVtbXV07dGhpcy5tb3JwaFRhcmdldHM9W107dGhpcy5tb3JwaE5vcm1hbHM9W107dGhpcy5za2luV2VpZ2h0cz1bXTt0aGlzLnNraW5JbmRpY2VzPVtdO3RoaXMubGluZURpc3RhbmNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLmdyb3Vwc05lZWRVcGRhdGU9dGhpcy5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZT0KdGhpcy5jb2xvcnNOZWVkVXBkYXRlPXRoaXMubm9ybWFsc05lZWRVcGRhdGU9dGhpcy51dnNOZWVkVXBkYXRlPXRoaXMudmVydGljZXNOZWVkVXBkYXRlPXRoaXMuZWxlbWVudHNOZWVkVXBkYXRlPSExfWZ1bmN0aW9uIEkoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpUZCsrfSk7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7dGhpcy5uYW1lPSIiO3RoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiO3RoaXMuaW5kZXg9bnVsbDt0aGlzLmF0dHJpYnV0ZXM9e307dGhpcy5tb3JwaEF0dHJpYnV0ZXM9e307dGhpcy5ncm91cHM9W107dGhpcy5ib3VuZGluZ1NwaGVyZT10aGlzLmJvdW5kaW5nQm94PW51bGw7dGhpcy5kcmF3UmFuZ2U9e3N0YXJ0OjAsY291bnQ6SW5maW5pdHl9fWZ1bmN0aW9uIENhKGEsYil7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTWVzaCI7dGhpcy5nZW9tZXRyeT12b2lkIDAhPT1hP2E6bmV3IEk7dGhpcy5tYXRlcmlhbD12b2lkIDAhPT1iPwpiOm5ldyBOYSh7Y29sb3I6MTY3NzcyMTUqTWF0aC5yYW5kb20oKX0pO3RoaXMuZHJhd01vZGU9MDt0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWZ1bmN0aW9uIEliKGEsYixjLGQsZSxmKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJCb3hHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDphLGhlaWdodDpiLGRlcHRoOmMsd2lkdGhTZWdtZW50czpkLGhlaWdodFNlZ21lbnRzOmUsZGVwdGhTZWdtZW50czpmfTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcga2IoYSxiLGMsZCxlLGYpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBrYihhLGIsYyxkLGUsZil7ZnVuY3Rpb24gZyhhLGIsYyxkLGUsZixnLGwsUyxFLEYpe3ZhciBhYT1mL1MsUj1nL0UsY2E9Zi8yLGxhPWcvMixEPWwvMjtnPVMrMTt2YXIgQz1FKzEsQj1mPTAsUCxLLFc9bmV3IHA7Zm9yKEs9MDtLPEM7SysrKXt2YXIgYmE9SypSLWxhO2ZvcihQPTA7UDxnO1ArKylXW2FdPShQKmFhLWNhKSpkLFdbYl09CmJhKmUsV1tjXT1ELG0ucHVzaChXLngsVy55LFcueiksV1thXT0wLFdbYl09MCxXW2NdPTA8bD8xOi0xLHUucHVzaChXLngsVy55LFcueikscS5wdXNoKFAvUykscS5wdXNoKDEtSy9FKSxmKz0xfWZvcihLPTA7SzxFO0srKylmb3IoUD0wO1A8UztQKyspYT1uK1ArZyooSysxKSxiPW4rKFArMSkrZyooSysxKSxjPW4rKFArMSkrZypLLGsucHVzaChuK1ArZypLLGEsYyksay5wdXNoKGEsYixjKSxCKz02O2guYWRkR3JvdXAocixCLEYpO3IrPUI7bis9Zn1JLmNhbGwodGhpcyk7dGhpcy50eXBlPSJCb3hCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDphLGhlaWdodDpiLGRlcHRoOmMsd2lkdGhTZWdtZW50czpkLGhlaWdodFNlZ21lbnRzOmUsZGVwdGhTZWdtZW50czpmfTt2YXIgaD10aGlzO2Q9TWF0aC5mbG9vcihkKXx8MTtlPU1hdGguZmxvb3IoZSl8fDE7Zj1NYXRoLmZsb29yKGYpfHwxO3ZhciBrPVtdLG09W10sdT1bXSxxPVtdLG49MCxyPTA7ZygieiIsInkiLAoieCIsLTEsLTEsYyxiLGEsZixlLDApO2coInoiLCJ5IiwieCIsMSwtMSxjLGIsLWEsZixlLDEpO2coIngiLCJ6IiwieSIsMSwxLGEsYyxiLGQsZiwyKTtnKCJ4IiwieiIsInkiLDEsLTEsYSxjLC1iLGQsZiwzKTtnKCJ4IiwieSIsInoiLDEsLTEsYSxiLGMsZCxlLDQpO2coIngiLCJ5IiwieiIsLTEsLTEsYSxiLC1jLGQsZSw1KTt0aGlzLnNldEluZGV4KGspO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMobSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEModSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhxLDIpKX1mdW5jdGlvbiB4YyhhLGIsYyxkKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQbGFuZUdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3dpZHRoOmEsaGVpZ2h0OmIsd2lkdGhTZWdtZW50czpjLGhlaWdodFNlZ21lbnRzOmR9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBsYihhLGIsYyxkKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9CmZ1bmN0aW9uIGxiKGEsYixjLGQpe0kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBsYW5lQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17d2lkdGg6YSxoZWlnaHQ6Yix3aWR0aFNlZ21lbnRzOmMsaGVpZ2h0U2VnbWVudHM6ZH07dmFyIGU9YS8yLGY9Yi8yO2M9TWF0aC5mbG9vcihjKXx8MTtkPU1hdGguZmxvb3IoZCl8fDE7dmFyIGc9YysxLGg9ZCsxLGs9YS9jLG09Yi9kLHU9W10scT1bXSxuPVtdLHI9W107Zm9yKGE9MDthPGg7YSsrKXt2YXIgbD1hKm0tZjtmb3IoYj0wO2I8ZztiKyspcS5wdXNoKGIqay1lLC1sLDApLG4ucHVzaCgwLDAsMSksci5wdXNoKGIvYyksci5wdXNoKDEtYS9kKX1mb3IoYT0wO2E8ZDthKyspZm9yKGI9MDtiPGM7YisrKWU9YitnKihhKzEpLGY9YisxK2cqKGErMSksaD1iKzErZyphLHUucHVzaChiK2cqYSxlLGgpLHUucHVzaChlLGYsaCk7dGhpcy5zZXRJbmRleCh1KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKHEsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLApuZXcgQyhuLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKHIsMikpfWZ1bmN0aW9uIE9hKCl7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ2FtZXJhIjt0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZT1uZXcgSjt0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IEp9ZnVuY3Rpb24geGEoYSxiLGMsZCl7T2EuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBlcnNwZWN0aXZlQ2FtZXJhIjt0aGlzLmZvdj12b2lkIDAhPT1hP2E6NTA7dGhpcy56b29tPTE7dGhpcy5uZWFyPXZvaWQgMCE9PWM/YzouMTt0aGlzLmZhcj12b2lkIDAhPT1kP2Q6MkUzO3RoaXMuZm9jdXM9MTA7dGhpcy5hc3BlY3Q9dm9pZCAwIT09Yj9iOjE7dGhpcy52aWV3PW51bGw7dGhpcy5maWxtR2F1Z2U9MzU7dGhpcy5maWxtT2Zmc2V0PTA7dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9ZnVuY3Rpb24gSmIoYSxiLGMsZCxlLGYpe09hLmNhbGwodGhpcyk7dGhpcy50eXBlPSJPcnRob2dyYXBoaWNDYW1lcmEiO3RoaXMuem9vbT0KMTt0aGlzLnZpZXc9bnVsbDt0aGlzLmxlZnQ9YTt0aGlzLnJpZ2h0PWI7dGhpcy50b3A9Yzt0aGlzLmJvdHRvbT1kO3RoaXMubmVhcj12b2lkIDAhPT1lP2U6LjE7dGhpcy5mYXI9dm9pZCAwIT09Zj9mOjJFMzt0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1mdW5jdGlvbiBNZihhKXt2YXIgYj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGEpe2EuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGE9YS5kYXRhKTtyZXR1cm4gYlthLnV1aWRdfSxyZW1vdmU6ZnVuY3Rpb24oYyl7dmFyIGQ9YltjLnV1aWRdO2QmJihhLmRlbGV0ZUJ1ZmZlcihkLmJ1ZmZlciksZGVsZXRlIGJbYy51dWlkXSl9LHVwZGF0ZTpmdW5jdGlvbihjLGQpe2MuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTt2YXIgZT1iW2MudXVpZF07aWYodm9pZCAwPT09ZSl7dmFyIGU9Yy51dWlkLGY9YyxnPWYuYXJyYXksaD1mLmR5bmFtaWM/YS5EWU5BTUlDX0RSQVc6YS5TVEFUSUNfRFJBVywKaz1hLmNyZWF0ZUJ1ZmZlcigpO2EuYmluZEJ1ZmZlcihkLGspO2EuYnVmZmVyRGF0YShkLGcsaCk7Zi5vblVwbG9hZENhbGxiYWNrKCk7aD1hLkZMT0FUO2cgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXk/aD1hLkZMT0FUOmcgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXk/Y29uc29sZS53YXJuKCJVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheSIpOmcgaW5zdGFuY2VvZiBVaW50MTZBcnJheT9oPWEuVU5TSUdORURfU0hPUlQ6ZyBpbnN0YW5jZW9mIEludDE2QXJyYXk/aD1hLlNIT1JUOmcgaW5zdGFuY2VvZiBVaW50MzJBcnJheT9oPWEuVU5TSUdORURfSU5UOmcgaW5zdGFuY2VvZiBJbnQzMkFycmF5P2g9YS5JTlQ6ZyBpbnN0YW5jZW9mIEludDhBcnJheT9oPWEuQllURTpnIGluc3RhbmNlb2YgVWludDhBcnJheSYmKGg9YS5VTlNJR05FRF9CWVRFKTtiW2VdPXtidWZmZXI6ayx0eXBlOmgsYnl0ZXNQZXJFbGVtZW50OmcuQllURVNfUEVSX0VMRU1FTlQsdmVyc2lvbjpmLnZlcnNpb259fWVsc2UgZS52ZXJzaW9uPApjLnZlcnNpb24mJihmPWMsZz1mLmFycmF5LGs9Zi51cGRhdGVSYW5nZSxhLmJpbmRCdWZmZXIoZCxlLmJ1ZmZlciksITE9PT1mLmR5bmFtaWM/YS5idWZmZXJEYXRhKGQsZyxhLlNUQVRJQ19EUkFXKTotMT09PWsuY291bnQ/YS5idWZmZXJTdWJEYXRhKGQsMCxnKTowPT09ay5jb3VudD9jb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTE9iamVjdHMudXBkYXRlQnVmZmVyOiBkeW5hbWljIFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSBtYXJrZWQgYXMgbmVlZHNVcGRhdGUgYnV0IHVwZGF0ZVJhbmdlLmNvdW50IGlzIDAsIGVuc3VyZSB5b3UgYXJlIHVzaW5nIHNldCBtZXRob2RzIG9yIHVwZGF0aW5nIG1hbnVhbGx5LiIpOihhLmJ1ZmZlclN1YkRhdGEoZCxrLm9mZnNldCpnLkJZVEVTX1BFUl9FTEVNRU5ULGcuc3ViYXJyYXkoay5vZmZzZXQsay5vZmZzZXQray5jb3VudCkpLGsuY291bnQ9MCksZS52ZXJzaW9uPWMudmVyc2lvbil9fX1mdW5jdGlvbiBOZihhLGIpe3JldHVybiBhLnJlbmRlck9yZGVyIT09CmIucmVuZGVyT3JkZXI/YS5yZW5kZXJPcmRlci1iLnJlbmRlck9yZGVyOmEucHJvZ3JhbSYmYi5wcm9ncmFtJiZhLnByb2dyYW0hPT1iLnByb2dyYW0/YS5wcm9ncmFtLmlkLWIucHJvZ3JhbS5pZDphLm1hdGVyaWFsLmlkIT09Yi5tYXRlcmlhbC5pZD9hLm1hdGVyaWFsLmlkLWIubWF0ZXJpYWwuaWQ6YS56IT09Yi56P2Euei1iLno6YS5pZC1iLmlkfWZ1bmN0aW9uIE9mKGEsYil7cmV0dXJuIGEucmVuZGVyT3JkZXIhPT1iLnJlbmRlck9yZGVyP2EucmVuZGVyT3JkZXItYi5yZW5kZXJPcmRlcjphLnohPT1iLno/Yi56LWEuejphLmlkLWIuaWR9ZnVuY3Rpb24gUGYoKXt2YXIgYT1bXSxiPS0xLGM9W10sZD0tMTtyZXR1cm57b3BhcXVlOmEsdHJhbnNwYXJlbnQ6Yyxpbml0OmZ1bmN0aW9uKCl7ZD1iPS0xfSxwdXNoOmZ1bmN0aW9uKGUsZixnLGgsayl7dmFyIG0sdTtnLnRyYW5zcGFyZW50PyhtPWMsdT0rK2QpOihtPWEsdT0rK2IpOyh1PW1bdV0pPyh1LmlkPWUuaWQsdS5vYmplY3Q9ZSwKdS5nZW9tZXRyeT1mLHUubWF0ZXJpYWw9Zyx1LnByb2dyYW09Zy5wcm9ncmFtLHUucmVuZGVyT3JkZXI9ZS5yZW5kZXJPcmRlcix1Lno9aCx1Lmdyb3VwPWspOih1PXtpZDplLmlkLG9iamVjdDplLGdlb21ldHJ5OmYsbWF0ZXJpYWw6Zyxwcm9ncmFtOmcucHJvZ3JhbSxyZW5kZXJPcmRlcjplLnJlbmRlck9yZGVyLHo6aCxncm91cDprfSxtLnB1c2godSkpfSxmaW5pc2g6ZnVuY3Rpb24oKXthLmxlbmd0aD1iKzE7Yy5sZW5ndGg9ZCsxfSxzb3J0OmZ1bmN0aW9uKCl7YS5zb3J0KE5mKTtjLnNvcnQoT2YpfX19ZnVuY3Rpb24gUWYoKXt2YXIgYT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGIsYyl7dmFyIGQ9Yi5pZCsiLCIrYy5pZCxlPWFbZF07dm9pZCAwPT09ZSYmKGU9bmV3IFBmLGFbZF09ZSk7cmV0dXJuIGV9LGRpc3Bvc2U6ZnVuY3Rpb24oKXthPXt9fX19ZnVuY3Rpb24gUmYoYSxiLGMpe3ZhciBkLGUsZjt0aGlzLnNldE1vZGU9ZnVuY3Rpb24oYSl7ZD1hfTt0aGlzLnNldEluZGV4PQpmdW5jdGlvbihjKXtjLmFycmF5IGluc3RhbmNlb2YgVWludDMyQXJyYXkmJmIuZ2V0KCJPRVNfZWxlbWVudF9pbmRleF91aW50Iik/KGU9YS5VTlNJR05FRF9JTlQsZj00KTpjLmFycmF5IGluc3RhbmNlb2YgVWludDE2QXJyYXk/KGU9YS5VTlNJR05FRF9TSE9SVCxmPTIpOihlPWEuVU5TSUdORURfQllURSxmPTEpfTt0aGlzLnJlbmRlcj1mdW5jdGlvbihiLGgpe2EuZHJhd0VsZW1lbnRzKGQsaCxlLGIqZik7Yy5jYWxscysrO2MudmVydGljZXMrPWg7ZD09PWEuVFJJQU5HTEVTJiYoYy5mYWNlcys9aC8zKX07dGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24oZyxoLGspe3ZhciBtPWIuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7bnVsbD09PW0/Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpOgoobS5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShkLGssZSxoKmYsZy5tYXhJbnN0YW5jZWRDb3VudCksYy5jYWxscysrLGMudmVydGljZXMrPWsqZy5tYXhJbnN0YW5jZWRDb3VudCxkPT09YS5UUklBTkdMRVMmJihjLmZhY2VzKz1nLm1heEluc3RhbmNlZENvdW50KmsvMykpfX1mdW5jdGlvbiBTZihhLGIsYyl7dmFyIGQ7dGhpcy5zZXRNb2RlPWZ1bmN0aW9uKGEpe2Q9YX07dGhpcy5yZW5kZXI9ZnVuY3Rpb24oYixmKXthLmRyYXdBcnJheXMoZCxiLGYpO2MuY2FsbHMrKztjLnZlcnRpY2VzKz1mO2Q9PT1hLlRSSUFOR0xFUyYmKGMuZmFjZXMrPWYvMyl9O3RoaXMucmVuZGVySW5zdGFuY2VzPWZ1bmN0aW9uKGUsZixnKXt2YXIgaD1iLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpO2lmKG51bGw9PT1oKWNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpOwplbHNle3ZhciBrPWUuYXR0cmlidXRlcy5wb3NpdGlvbjtrLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/KGc9ay5kYXRhLmNvdW50LGguZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKGQsMCxnLGUubWF4SW5zdGFuY2VkQ291bnQpKTpoLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShkLGYsZyxlLm1heEluc3RhbmNlZENvdW50KTtjLmNhbGxzKys7Yy52ZXJ0aWNlcys9ZyplLm1heEluc3RhbmNlZENvdW50O2Q9PT1hLlRSSUFOR0xFUyYmKGMuZmFjZXMrPWUubWF4SW5zdGFuY2VkQ291bnQqZy8zKX19fWZ1bmN0aW9uIFRmKGEsYixjKXtmdW5jdGlvbiBkKGEpe2E9YS50YXJnZXQ7dmFyIGg9ZVthLmlkXTtudWxsIT09aC5pbmRleCYmYi5yZW1vdmUoaC5pbmRleCk7Zm9yKHZhciBrIGluIGguYXR0cmlidXRlcyliLnJlbW92ZShoLmF0dHJpYnV0ZXNba10pO2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsZCk7ZGVsZXRlIGVbYS5pZF07aWYoaz1mW2EuaWRdKWIucmVtb3ZlKGspLApkZWxldGUgZlthLmlkXTtpZihrPWZbaC5pZF0pYi5yZW1vdmUoayksZGVsZXRlIGZbaC5pZF07Yy5nZW9tZXRyaWVzLS19dmFyIGU9e30sZj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGEsYil7dmFyIGY9ZVtiLmlkXTtpZihmKXJldHVybiBmO2IuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsZCk7Yi5pc0J1ZmZlckdlb21ldHJ5P2Y9YjpiLmlzR2VvbWV0cnkmJih2b2lkIDA9PT1iLl9idWZmZXJHZW9tZXRyeSYmKGIuX2J1ZmZlckdlb21ldHJ5PShuZXcgSSkuc2V0RnJvbU9iamVjdChhKSksZj1iLl9idWZmZXJHZW9tZXRyeSk7ZVtiLmlkXT1mO2MuZ2VvbWV0cmllcysrO3JldHVybiBmfSx1cGRhdGU6ZnVuY3Rpb24oYyl7dmFyIGQ9Yy5pbmRleCxlPWMuYXR0cmlidXRlcztudWxsIT09ZCYmYi51cGRhdGUoZCxhLkVMRU1FTlRfQVJSQVlfQlVGRkVSKTtmb3IodmFyIGYgaW4gZSliLnVwZGF0ZShlW2ZdLGEuQVJSQVlfQlVGRkVSKTtjPWMubW9ycGhBdHRyaWJ1dGVzO2ZvcihmIGluIGMpZm9yKHZhciBkPQpjW2ZdLGU9MCx1PWQubGVuZ3RoO2U8dTtlKyspYi51cGRhdGUoZFtlXSxhLkFSUkFZX0JVRkZFUil9LGdldFdpcmVmcmFtZUF0dHJpYnV0ZTpmdW5jdGlvbihjKXt2YXIgZD1mW2MuaWRdO2lmKGQpcmV0dXJuIGQ7dmFyIGQ9W10sZT1jLmluZGV4LG09Yy5hdHRyaWJ1dGVzO2lmKG51bGwhPT1lKWZvcih2YXIgZT1lLmFycmF5LG09MCx1PWUubGVuZ3RoO208dTttKz0zKXt2YXIgcT1lW20rMF0sbj1lW20rMV0scj1lW20rMl07ZC5wdXNoKHEsbixuLHIscixxKX1lbHNlIGZvcihlPW0ucG9zaXRpb24uYXJyYXksbT0wLHU9ZS5sZW5ndGgvMy0xO208dTttKz0zKXE9bSswLG49bSsxLHI9bSsyLGQucHVzaChxLG4sbixyLHIscSk7ZD1uZXcgKDY1NTM1PFNkKGQpP2piOmliKShkLDEpO2IudXBkYXRlKGQsYS5FTEVNRU5UX0FSUkFZX0JVRkZFUik7cmV0dXJuIGZbYy5pZF09ZH19fWZ1bmN0aW9uIFVmKCl7dmFyIGE9e307cmV0dXJue2dldDpmdW5jdGlvbihiKXtpZih2b2lkIDAhPT1hW2IuaWRdKXJldHVybiBhW2IuaWRdOwp2YXIgYztzd2l0Y2goYi50eXBlKXtjYXNlICJEaXJlY3Rpb25hbExpZ2h0IjpjPXtkaXJlY3Rpb246bmV3IHAsY29sb3I6bmV3IEgsc2hhZG93OiExLHNoYWRvd0JpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBEfTticmVhaztjYXNlICJTcG90TGlnaHQiOmM9e3Bvc2l0aW9uOm5ldyBwLGRpcmVjdGlvbjpuZXcgcCxjb2xvcjpuZXcgSCxkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjAsc2hhZG93OiExLHNoYWRvd0JpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBEfTticmVhaztjYXNlICJQb2ludExpZ2h0IjpjPXtwb3NpdGlvbjpuZXcgcCxjb2xvcjpuZXcgSCxkaXN0YW5jZTowLGRlY2F5OjAsc2hhZG93OiExLHNoYWRvd0JpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBEfTticmVhaztjYXNlICJIZW1pc3BoZXJlTGlnaHQiOmM9e2RpcmVjdGlvbjpuZXcgcCxza3lDb2xvcjpuZXcgSCwKZ3JvdW5kQ29sb3I6bmV3IEh9O2JyZWFrO2Nhc2UgIlJlY3RBcmVhTGlnaHQiOmM9e2NvbG9yOm5ldyBILHBvc2l0aW9uOm5ldyBwLGhhbGZXaWR0aDpuZXcgcCxoYWxmSGVpZ2h0Om5ldyBwfX1yZXR1cm4gYVtiLmlkXT1jfX19ZnVuY3Rpb24gVmYoYSxiLGMpe3ZhciBkPXt9O3JldHVybnt1cGRhdGU6ZnVuY3Rpb24oYSl7dmFyIGY9Yy5mcmFtZSxnPWEuZ2VvbWV0cnksaD1iLmdldChhLGcpO2RbaC5pZF0hPT1mJiYoZy5pc0dlb21ldHJ5JiZoLnVwZGF0ZUZyb21PYmplY3QoYSksYi51cGRhdGUoaCksZFtoLmlkXT1mKTtyZXR1cm4gaH0sY2xlYXI6ZnVuY3Rpb24oKXtkPXt9fX19ZnVuY3Rpb24gV2YoYSl7YT1hLnNwbGl0KCJcbiIpO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKWFbYl09YisxKyI6ICIrYVtiXTtyZXR1cm4gYS5qb2luKCJcbiIpfWZ1bmN0aW9uIExlKGEsYixjKXt2YXIgZD1hLmNyZWF0ZVNoYWRlcihiKTthLnNoYWRlclNvdXJjZShkLGMpO2EuY29tcGlsZVNoYWRlcihkKTsKITE9PT1hLmdldFNoYWRlclBhcmFtZXRlcihkLGEuQ09NUElMRV9TVEFUVVMpJiZjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFNoYWRlcjogU2hhZGVyIGNvdWxkbid0IGNvbXBpbGUuIik7IiIhPT1hLmdldFNoYWRlckluZm9Mb2coZCkmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xTaGFkZXI6IGdsLmdldFNoYWRlckluZm9Mb2coKSIsYj09PWEuVkVSVEVYX1NIQURFUj8idmVydGV4IjoiZnJhZ21lbnQiLGEuZ2V0U2hhZGVySW5mb0xvZyhkKSxXZihjKSk7cmV0dXJuIGR9ZnVuY3Rpb24gTWUoYSl7c3dpdGNoKGEpe2Nhc2UgM0UzOnJldHVyblsiTGluZWFyIiwiKCB2YWx1ZSApIl07Y2FzZSAzMDAxOnJldHVyblsic1JHQiIsIiggdmFsdWUgKSJdO2Nhc2UgMzAwMjpyZXR1cm5bIlJHQkUiLCIoIHZhbHVlICkiXTtjYXNlIDMwMDQ6cmV0dXJuWyJSR0JNIiwiKCB2YWx1ZSwgNy4wICkiXTtjYXNlIDMwMDU6cmV0dXJuWyJSR0JNIiwiKCB2YWx1ZSwgMTYuMCApIl07Y2FzZSAzMDA2OnJldHVyblsiUkdCRCIsCiIoIHZhbHVlLCAyNTYuMCApIl07Y2FzZSAzMDA3OnJldHVyblsiR2FtbWEiLCIoIHZhbHVlLCBmbG9hdCggR0FNTUFfRkFDVE9SICkgKSJdO2RlZmF1bHQ6dGhyb3cgRXJyb3IoInVuc3VwcG9ydGVkIGVuY29kaW5nOiAiK2EpO319ZnVuY3Rpb24gVWQoYSxiKXt2YXIgYz1NZShiKTtyZXR1cm4idmVjNCAiK2ErIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuICIrY1swXSsiVG9MaW5lYXIiK2NbMV0rIjsgfSJ9ZnVuY3Rpb24gWGYoYSxiKXt2YXIgYz1NZShiKTtyZXR1cm4idmVjNCAiK2ErIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuIExpbmVhclRvIitjWzBdK2NbMV0rIjsgfSJ9ZnVuY3Rpb24gWWYoYSxiKXt2YXIgYztzd2l0Y2goYil7Y2FzZSAxOmM9IkxpbmVhciI7YnJlYWs7Y2FzZSAyOmM9IlJlaW5oYXJkIjticmVhaztjYXNlIDM6Yz0iVW5jaGFydGVkMiI7YnJlYWs7Y2FzZSA0OmM9Ik9wdGltaXplZENpbmVvbiI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigidW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6ICIrCmIpO31yZXR1cm4idmVjMyAiK2ErIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrYysiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIFpmKGEsYixjKXthPWF8fHt9O3JldHVyblthLmRlcml2YXRpdmVzfHxiLmVudk1hcEN1YmVVVnx8Yi5idW1wTWFwfHxiLm5vcm1hbE1hcHx8Yi5mbGF0U2hhZGluZz8iI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGUiOiIiLChhLmZyYWdEZXB0aHx8Yi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyKSYmYy5nZXQoIkVYVF9mcmFnX2RlcHRoIik/IiNleHRlbnNpb24gR0xfRVhUX2ZyYWdfZGVwdGggOiBlbmFibGUiOiIiLGEuZHJhd0J1ZmZlcnMmJmMuZ2V0KCJXRUJHTF9kcmF3X2J1ZmZlcnMiKT8iI2V4dGVuc2lvbiBHTF9FWFRfZHJhd19idWZmZXJzIDogcmVxdWlyZSI6IiIsKGEuc2hhZGVyVGV4dHVyZUxPRHx8Yi5lbnZNYXApJiZjLmdldCgiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOgoiIl0uZmlsdGVyKHljKS5qb2luKCJcbiIpfWZ1bmN0aW9uICRmKGEpe3ZhciBiPVtdLGM7Zm9yKGMgaW4gYSl7dmFyIGQ9YVtjXTshMSE9PWQmJmIucHVzaCgiI2RlZmluZSAiK2MrIiAiK2QpfXJldHVybiBiLmpvaW4oIlxuIil9ZnVuY3Rpb24geWMoYSl7cmV0dXJuIiIhPT1hfWZ1bmN0aW9uIE5lKGEsYil7cmV0dXJuIGEucmVwbGFjZSgvTlVNX0RJUl9MSUdIVFMvZyxiLm51bURpckxpZ2h0cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRTL2csYi5udW1TcG90TGlnaHRzKS5yZXBsYWNlKC9OVU1fUkVDVF9BUkVBX0xJR0hUUy9nLGIubnVtUmVjdEFyZWFMaWdodHMpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVFMvZyxiLm51bVBvaW50TGlnaHRzKS5yZXBsYWNlKC9OVU1fSEVNSV9MSUdIVFMvZyxiLm51bUhlbWlMaWdodHMpfWZ1bmN0aW9uIFZkKGEpe3JldHVybiBhLnJlcGxhY2UoL15bIFx0XSojaW5jbHVkZSArPChbXHdcZC5dKyk+L2dtLGZ1bmN0aW9uKGEsYyl7dmFyIGQ9VVtjXTsKaWYodm9pZCAwPT09ZCl0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK2MrIj4iKTtyZXR1cm4gVmQoZCl9KX1mdW5jdGlvbiBPZShhKXtyZXR1cm4gYS5yZXBsYWNlKC9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyxmdW5jdGlvbihhLGMsZCxlKXthPSIiO2ZvcihjPXBhcnNlSW50KGMpO2M8cGFyc2VJbnQoZCk7YysrKWErPWUucmVwbGFjZSgvXFsgaSBcXS9nLCJbICIrYysiIF0iKTtyZXR1cm4gYX0pfWZ1bmN0aW9uIGFnKGEsYixjLGQpe3ZhciBlPWEuY29udGV4dCxmPWMuZXh0ZW5zaW9ucyxnPWMuZGVmaW5lcyxoPWMuX193ZWJnbFNoYWRlci52ZXJ0ZXhTaGFkZXIsaz1jLl9fd2ViZ2xTaGFkZXIuZnJhZ21lbnRTaGFkZXIsbT0iU0hBRE9XTUFQX1RZUEVfQkFTSUMiOzE9PT1kLnNoYWRvd01hcFR5cGU/bT0iU0hBRE9XTUFQX1RZUEVfUENGIjoyPT09ZC5zaGFkb3dNYXBUeXBlJiYKKG09IlNIQURPV01BUF9UWVBFX1BDRl9TT0ZUIik7dmFyIHU9IkVOVk1BUF9UWVBFX0NVQkUiLHE9IkVOVk1BUF9NT0RFX1JFRkxFQ1RJT04iLG49IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7aWYoZC5lbnZNYXApe3N3aXRjaChjLmVudk1hcC5tYXBwaW5nKXtjYXNlIDMwMTpjYXNlIDMwMjp1PSJFTlZNQVBfVFlQRV9DVUJFIjticmVhaztjYXNlIDMwNjpjYXNlIDMwNzp1PSJFTlZNQVBfVFlQRV9DVUJFX1VWIjticmVhaztjYXNlIDMwMzpjYXNlIDMwNDp1PSJFTlZNQVBfVFlQRV9FUVVJUkVDIjticmVhaztjYXNlIDMwNTp1PSJFTlZNQVBfVFlQRV9TUEhFUkUifXN3aXRjaChjLmVudk1hcC5tYXBwaW5nKXtjYXNlIDMwMjpjYXNlIDMwNDpxPSJFTlZNQVBfTU9ERV9SRUZSQUNUSU9OIn1zd2l0Y2goYy5jb21iaW5lKXtjYXNlIDA6bj0iRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZIjticmVhaztjYXNlIDE6bj0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSAyOm49IkVOVk1BUF9CTEVORElOR19BREQifX12YXIgcj0KMDxhLmdhbW1hRmFjdG9yP2EuZ2FtbWFGYWN0b3I6MSxmPVpmKGYsZCxhLmV4dGVuc2lvbnMpLGw9JGYoZyksdD1lLmNyZWF0ZVByb2dyYW0oKTtjLmlzUmF3U2hhZGVyTWF0ZXJpYWw/KGc9W2wsIlxuIl0uZmlsdGVyKHljKS5qb2luKCJcbiIpLG09W2YsbCwiXG4iXS5maWx0ZXIoeWMpLmpvaW4oIlxuIikpOihnPVsicHJlY2lzaW9uICIrZC5wcmVjaXNpb24rIiBmbG9hdDsiLCJwcmVjaXNpb24gIitkLnByZWNpc2lvbisiIGludDsiLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrYy5fX3dlYmdsU2hhZGVyLm5hbWUsbCxkLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVkVSVEVYX1RFWFRVUkVTIjoiIiwiI2RlZmluZSBHQU1NQV9GQUNUT1IgIityLCIjZGVmaW5lIE1BWF9CT05FUyAiK2QubWF4Qm9uZXMsZC51c2VGb2cmJmQuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLGQudXNlRm9nJiZkLmZvZ0V4cD8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZC5tYXA/IiNkZWZpbmUgVVNFX01BUCI6CiIiLGQuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGQuZW52TWFwPyIjZGVmaW5lICIrcToiIixkLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsZC5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLGQuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixkLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLGQubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLGQuZGlzcGxhY2VtZW50TWFwJiZkLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVVNFX0RJU1BMQUNFTUVOVE1BUCI6IiIsZC5zcGVjdWxhck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAiOiIiLGQucm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAiOiIiLGQubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLGQuYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIixkLnZlcnRleENvbG9ycz8KIiNkZWZpbmUgVVNFX0NPTE9SIjoiIixkLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixkLnNraW5uaW5nPyIjZGVmaW5lIFVTRV9TS0lOTklORyI6IiIsZC51c2VWZXJ0ZXhUZXh0dXJlPyIjZGVmaW5lIEJPTkVfVEVYVFVSRSI6IiIsZC5tb3JwaFRhcmdldHM/IiNkZWZpbmUgVVNFX01PUlBIVEFSR0VUUyI6IiIsZC5tb3JwaE5vcm1hbHMmJiExPT09ZC5mbGF0U2hhZGluZz8iI2RlZmluZSBVU0VfTU9SUEhOT1JNQUxTIjoiIixkLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZC5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsIiNkZWZpbmUgTlVNX0NMSVBQSU5HX1BMQU5FUyAiK2QubnVtQ2xpcHBpbmdQbGFuZXMsZC5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGQuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK206IiIsZC5zaXplQXR0ZW51YXRpb24/IiNkZWZpbmUgVVNFX1NJWkVBVFRFTlVBVElPTiI6CiIiLGQubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGQubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmYS5leHRlbnNpb25zLmdldCgiRVhUX2ZyYWdfZGVwdGgiKT8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OyIsInVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgbm9ybWFsOyIsImF0dHJpYnV0ZSB2ZWMyIHV2OyIsIiNpZmRlZiBVU0VfQ09MT1IiLCJcdGF0dHJpYnV0ZSB2ZWMzIGNvbG9yOyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTIiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwKIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQxOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOyIsIlx0I2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOyIsIlx0I2Vsc2UiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ3OyIsIlx0I2VuZGlmIiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9TS0lOTklORyIsIlx0YXR0cmlidXRlIHZlYzQgc2tpbkluZGV4OyIsIlx0YXR0cmlidXRlIHZlYzQgc2tpbldlaWdodDsiLAoiI2VuZGlmIiwiXG4iXS5maWx0ZXIoeWMpLmpvaW4oIlxuIiksbT1bZiwicHJlY2lzaW9uICIrZC5wcmVjaXNpb24rIiBmbG9hdDsiLCJwcmVjaXNpb24gIitkLnByZWNpc2lvbisiIGludDsiLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrYy5fX3dlYmdsU2hhZGVyLm5hbWUsbCxkLmFscGhhVGVzdD8iI2RlZmluZSBBTFBIQVRFU1QgIitkLmFscGhhVGVzdDoiIiwiI2RlZmluZSBHQU1NQV9GQUNUT1IgIityLGQudXNlRm9nJiZkLmZvZz8iI2RlZmluZSBVU0VfRk9HIjoiIixkLnVzZUZvZyYmZC5mb2dFeHA/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLGQubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLGQuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGQuZW52TWFwPyIjZGVmaW5lICIrdToiIixkLmVudk1hcD8iI2RlZmluZSAiK3E6IiIsZC5lbnZNYXA/IiNkZWZpbmUgIituOiIiLGQubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixkLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6CiIiLGQuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixkLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLGQubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLGQuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixkLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixkLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixkLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZC52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixkLmdyYWRpZW50TWFwPyIjZGVmaW5lIFVTRV9HUkFESUVOVE1BUCI6IiIsZC5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsZC5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLGQuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLCIjZGVmaW5lIE5VTV9DTElQUElOR19QTEFORVMgIisKZC5udW1DbGlwcGluZ1BsYW5lcywiI2RlZmluZSBVTklPTl9DTElQUElOR19QTEFORVMgIisoZC5udW1DbGlwcGluZ1BsYW5lcy1kLm51bUNsaXBJbnRlcnNlY3Rpb24pLGQuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixkLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIittOiIiLGQucHJlbXVsdGlwbGllZEFscGhhPyIjZGVmaW5lIFBSRU1VTFRJUExJRURfQUxQSEEiOiIiLGQucGh5c2ljYWxseUNvcnJlY3RMaWdodHM/IiNkZWZpbmUgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyI6IiIsZC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsZC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZhLmV4dGVuc2lvbnMuZ2V0KCJFWFRfZnJhZ19kZXB0aCIpPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLGQuZW52TWFwJiZhLmV4dGVuc2lvbnMuZ2V0KCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIik/IiNkZWZpbmUgVEVYVFVSRV9MT0RfRVhUIjoKIiIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLDAhPT1kLnRvbmVNYXBwaW5nPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsMCE9PWQudG9uZU1hcHBpbmc/VS50b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIiLDAhPT1kLnRvbmVNYXBwaW5nP1lmKCJ0b25lTWFwcGluZyIsZC50b25lTWFwcGluZyk6IiIsZC5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixkLm91dHB1dEVuY29kaW5nfHxkLm1hcEVuY29kaW5nfHxkLmVudk1hcEVuY29kaW5nfHxkLmVtaXNzaXZlTWFwRW5jb2Rpbmc/VS5lbmNvZGluZ3NfcGFyc19mcmFnbWVudDoiIixkLm1hcEVuY29kaW5nP1VkKCJtYXBUZXhlbFRvTGluZWFyIixkLm1hcEVuY29kaW5nKToiIixkLmVudk1hcEVuY29kaW5nP1VkKCJlbnZNYXBUZXhlbFRvTGluZWFyIixkLmVudk1hcEVuY29kaW5nKToiIixkLmVtaXNzaXZlTWFwRW5jb2Rpbmc/VWQoImVtaXNzaXZlTWFwVGV4ZWxUb0xpbmVhciIsCmQuZW1pc3NpdmVNYXBFbmNvZGluZyk6IiIsZC5vdXRwdXRFbmNvZGluZz9YZigibGluZWFyVG9PdXRwdXRUZXhlbCIsZC5vdXRwdXRFbmNvZGluZyk6IiIsZC5kZXB0aFBhY2tpbmc/IiNkZWZpbmUgREVQVEhfUEFDS0lORyAiK2MuZGVwdGhQYWNraW5nOiIiLCJcbiJdLmZpbHRlcih5Yykuam9pbigiXG4iKSk7aD1WZChoLGQpO2g9TmUoaCxkKTtrPVZkKGssZCk7az1OZShrLGQpO2MuaXNTaGFkZXJNYXRlcmlhbHx8KGg9T2UoaCksaz1PZShrKSk7az1tK2s7aD1MZShlLGUuVkVSVEVYX1NIQURFUixnK2gpO2s9TGUoZSxlLkZSQUdNRU5UX1NIQURFUixrKTtlLmF0dGFjaFNoYWRlcih0LGgpO2UuYXR0YWNoU2hhZGVyKHQsayk7dm9pZCAwIT09Yy5pbmRleDBBdHRyaWJ1dGVOYW1lP2UuYmluZEF0dHJpYkxvY2F0aW9uKHQsMCxjLmluZGV4MEF0dHJpYnV0ZU5hbWUpOiEwPT09ZC5tb3JwaFRhcmdldHMmJmUuYmluZEF0dHJpYkxvY2F0aW9uKHQsMCwicG9zaXRpb24iKTtlLmxpbmtQcm9ncmFtKHQpOwpkPWUuZ2V0UHJvZ3JhbUluZm9Mb2codCk7dT1lLmdldFNoYWRlckluZm9Mb2coaCk7cT1lLmdldFNoYWRlckluZm9Mb2coayk7cj1uPSEwO2lmKCExPT09ZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsZS5MSU5LX1NUQVRVUykpbj0hMSxjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFByb2dyYW06IHNoYWRlciBlcnJvcjogIixlLmdldEVycm9yKCksImdsLlZBTElEQVRFX1NUQVRVUyIsZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsZS5WQUxJREFURV9TVEFUVVMpLCJnbC5nZXRQcm9ncmFtSW5mb0xvZyIsZCx1LHEpO2Vsc2UgaWYoIiIhPT1kKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpIixkKTtlbHNlIGlmKCIiPT09dXx8IiI9PT1xKXI9ITE7ciYmKHRoaXMuZGlhZ25vc3RpY3M9e3J1bm5hYmxlOm4sbWF0ZXJpYWw6Yyxwcm9ncmFtTG9nOmQsdmVydGV4U2hhZGVyOntsb2c6dSxwcmVmaXg6Z30sZnJhZ21lbnRTaGFkZXI6e2xvZzpxLApwcmVmaXg6bX19KTtlLmRlbGV0ZVNoYWRlcihoKTtlLmRlbGV0ZVNoYWRlcihrKTt2YXIgcDt0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7dm9pZCAwPT09cCYmKHA9bmV3IGZiKGUsdCxhKSk7cmV0dXJuIHB9O3ZhciB4O3RoaXMuZ2V0QXR0cmlidXRlcz1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXgpe2Zvcih2YXIgYT17fSxiPWUuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0LGUuQUNUSVZFX0FUVFJJQlVURVMpLGM9MDtjPGI7YysrKXt2YXIgZD1lLmdldEFjdGl2ZUF0dHJpYih0LGMpLm5hbWU7YVtkXT1lLmdldEF0dHJpYkxvY2F0aW9uKHQsZCl9eD1hfXJldHVybiB4fTt0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtlLmRlbGV0ZVByb2dyYW0odCk7dGhpcy5wcm9ncmFtPXZvaWQgMH07T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7dW5pZm9ybXM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiAudW5pZm9ybXMgaXMgbm93IC5nZXRVbmlmb3JtcygpLiIpOwpyZXR1cm4gdGhpcy5nZXRVbmlmb3JtcygpfX0sYXR0cmlidXRlczp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IC5hdHRyaWJ1dGVzIGlzIG5vdyAuZ2V0QXR0cmlidXRlcygpLiIpO3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZXMoKX19fSk7dGhpcy5pZD1iZysrO3RoaXMuY29kZT1iO3RoaXMudXNlZFRpbWVzPTE7dGhpcy5wcm9ncmFtPXQ7dGhpcy52ZXJ0ZXhTaGFkZXI9aDt0aGlzLmZyYWdtZW50U2hhZGVyPWs7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gY2coYSxiKXtmdW5jdGlvbiBjKGEsYil7dmFyIGM7YT9hLmlzVGV4dHVyZT9jPWEuZW5jb2Rpbmc6YS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW1zLmdldFRleHR1cmVFbmNvZGluZ0Zyb21NYXA6IGRvbid0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksYz0KYS50ZXh0dXJlLmVuY29kaW5nKTpjPTNFMzszRTM9PT1jJiZiJiYoYz0zMDA3KTtyZXR1cm4gY312YXIgZD1bXSxlPXtNZXNoRGVwdGhNYXRlcmlhbDoiZGVwdGgiLE1lc2hOb3JtYWxNYXRlcmlhbDoibm9ybWFsIixNZXNoQmFzaWNNYXRlcmlhbDoiYmFzaWMiLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6ImxhbWJlcnQiLE1lc2hQaG9uZ01hdGVyaWFsOiJwaG9uZyIsTWVzaFRvb25NYXRlcmlhbDoicGhvbmciLE1lc2hTdGFuZGFyZE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6InBoeXNpY2FsIixMaW5lQmFzaWNNYXRlcmlhbDoiYmFzaWMiLExpbmVEYXNoZWRNYXRlcmlhbDoiZGFzaGVkIixQb2ludHNNYXRlcmlhbDoicG9pbnRzIn0sZj0icHJlY2lzaW9uIHN1cHBvcnRzVmVydGV4VGV4dHVyZXMgbWFwIG1hcEVuY29kaW5nIGVudk1hcCBlbnZNYXBNb2RlIGVudk1hcEVuY29kaW5nIGxpZ2h0TWFwIGFvTWFwIGVtaXNzaXZlTWFwIGVtaXNzaXZlTWFwRW5jb2RpbmcgYnVtcE1hcCBub3JtYWxNYXAgZGlzcGxhY2VtZW50TWFwIHNwZWN1bGFyTWFwIHJvdWdobmVzc01hcCBtZXRhbG5lc3NNYXAgZ3JhZGllbnRNYXAgYWxwaGFNYXAgY29tYmluZSB2ZXJ0ZXhDb2xvcnMgZm9nIHVzZUZvZyBmb2dFeHAgZmxhdFNoYWRpbmcgc2l6ZUF0dGVudWF0aW9uIGxvZ2FyaXRobWljRGVwdGhCdWZmZXIgc2tpbm5pbmcgbWF4Qm9uZXMgdXNlVmVydGV4VGV4dHVyZSBtb3JwaFRhcmdldHMgbW9ycGhOb3JtYWxzIG1heE1vcnBoVGFyZ2V0cyBtYXhNb3JwaE5vcm1hbHMgcHJlbXVsdGlwbGllZEFscGhhIG51bURpckxpZ2h0cyBudW1Qb2ludExpZ2h0cyBudW1TcG90TGlnaHRzIG51bUhlbWlMaWdodHMgbnVtUmVjdEFyZWFMaWdodHMgc2hhZG93TWFwRW5hYmxlZCBzaGFkb3dNYXBUeXBlIHRvbmVNYXBwaW5nIHBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzIGFscGhhVGVzdCBkb3VibGVTaWRlZCBmbGlwU2lkZWQgbnVtQ2xpcHBpbmdQbGFuZXMgbnVtQ2xpcEludGVyc2VjdGlvbiBkZXB0aFBhY2tpbmcgZGl0aGVyaW5nIi5zcGxpdCgiICIpOwp0aGlzLmdldFBhcmFtZXRlcnM9ZnVuY3Rpb24oZCxmLGssbSx1LHEpe3ZhciBuPWVbZC50eXBlXSxyO2lmKHEuaXNTa2lubmVkTWVzaClpZihyPXEuc2tlbGV0b24uYm9uZXMsYi5mbG9hdFZlcnRleFRleHR1cmVzKXI9MTAyNDtlbHNle3ZhciBsPU1hdGgubWluKE1hdGguZmxvb3IoKGIubWF4VmVydGV4VW5pZm9ybXMtMjApLzQpLHIubGVuZ3RoKTtsPHIubGVuZ3RoPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFNrZWxldG9uIGhhcyAiK3IubGVuZ3RoKyIgYm9uZXMuIFRoaXMgR1BVIHN1cHBvcnRzICIrbCsiLiIpLHI9MCk6cj1sfWVsc2Ugcj0wO2w9YS5nZXRQcmVjaXNpb24oKTtudWxsIT09ZC5wcmVjaXNpb24mJihsPWIuZ2V0TWF4UHJlY2lzaW9uKGQucHJlY2lzaW9uKSxsIT09ZC5wcmVjaXNpb24mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6IixkLnByZWNpc2lvbiwibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIikpOwp2YXIgdD1hLmdldFJlbmRlclRhcmdldCgpO3JldHVybntzaGFkZXJJRDpuLHByZWNpc2lvbjpsLHN1cHBvcnRzVmVydGV4VGV4dHVyZXM6Yi52ZXJ0ZXhUZXh0dXJlcyxvdXRwdXRFbmNvZGluZzpjKHQ/dC50ZXh0dXJlOm51bGwsYS5nYW1tYU91dHB1dCksbWFwOiEhZC5tYXAsbWFwRW5jb2Rpbmc6YyhkLm1hcCxhLmdhbW1hSW5wdXQpLGVudk1hcDohIWQuZW52TWFwLGVudk1hcE1vZGU6ZC5lbnZNYXAmJmQuZW52TWFwLm1hcHBpbmcsZW52TWFwRW5jb2Rpbmc6YyhkLmVudk1hcCxhLmdhbW1hSW5wdXQpLGVudk1hcEN1YmVVVjohIWQuZW52TWFwJiYoMzA2PT09ZC5lbnZNYXAubWFwcGluZ3x8MzA3PT09ZC5lbnZNYXAubWFwcGluZyksbGlnaHRNYXA6ISFkLmxpZ2h0TWFwLGFvTWFwOiEhZC5hb01hcCxlbWlzc2l2ZU1hcDohIWQuZW1pc3NpdmVNYXAsZW1pc3NpdmVNYXBFbmNvZGluZzpjKGQuZW1pc3NpdmVNYXAsYS5nYW1tYUlucHV0KSxidW1wTWFwOiEhZC5idW1wTWFwLG5vcm1hbE1hcDohIWQubm9ybWFsTWFwLApkaXNwbGFjZW1lbnRNYXA6ISFkLmRpc3BsYWNlbWVudE1hcCxyb3VnaG5lc3NNYXA6ISFkLnJvdWdobmVzc01hcCxtZXRhbG5lc3NNYXA6ISFkLm1ldGFsbmVzc01hcCxzcGVjdWxhck1hcDohIWQuc3BlY3VsYXJNYXAsYWxwaGFNYXA6ISFkLmFscGhhTWFwLGdyYWRpZW50TWFwOiEhZC5ncmFkaWVudE1hcCxjb21iaW5lOmQuY29tYmluZSx2ZXJ0ZXhDb2xvcnM6ZC52ZXJ0ZXhDb2xvcnMsZm9nOiEhayx1c2VGb2c6ZC5mb2csZm9nRXhwOmsmJmsuaXNGb2dFeHAyLGZsYXRTaGFkaW5nOjE9PT1kLnNoYWRpbmcsc2l6ZUF0dGVudWF0aW9uOmQuc2l6ZUF0dGVudWF0aW9uLGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6Yi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLHNraW5uaW5nOmQuc2tpbm5pbmcmJjA8cixtYXhCb25lczpyLHVzZVZlcnRleFRleHR1cmU6Yi5mbG9hdFZlcnRleFRleHR1cmVzLG1vcnBoVGFyZ2V0czpkLm1vcnBoVGFyZ2V0cyxtb3JwaE5vcm1hbHM6ZC5tb3JwaE5vcm1hbHMsCm1heE1vcnBoVGFyZ2V0czphLm1heE1vcnBoVGFyZ2V0cyxtYXhNb3JwaE5vcm1hbHM6YS5tYXhNb3JwaE5vcm1hbHMsbnVtRGlyTGlnaHRzOmYuZGlyZWN0aW9uYWwubGVuZ3RoLG51bVBvaW50TGlnaHRzOmYucG9pbnQubGVuZ3RoLG51bVNwb3RMaWdodHM6Zi5zcG90Lmxlbmd0aCxudW1SZWN0QXJlYUxpZ2h0czpmLnJlY3RBcmVhLmxlbmd0aCxudW1IZW1pTGlnaHRzOmYuaGVtaS5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6bSxudW1DbGlwSW50ZXJzZWN0aW9uOnUsZGl0aGVyaW5nOmQuZGl0aGVyaW5nLHNoYWRvd01hcEVuYWJsZWQ6YS5zaGFkb3dNYXAuZW5hYmxlZCYmcS5yZWNlaXZlU2hhZG93JiYwPGYuc2hhZG93cy5sZW5ndGgsc2hhZG93TWFwVHlwZTphLnNoYWRvd01hcC50eXBlLHRvbmVNYXBwaW5nOmEudG9uZU1hcHBpbmcscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6YS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6ZC5wcmVtdWx0aXBsaWVkQWxwaGEsCmFscGhhVGVzdDpkLmFscGhhVGVzdCxkb3VibGVTaWRlZDoyPT09ZC5zaWRlLGZsaXBTaWRlZDoxPT09ZC5zaWRlLGRlcHRoUGFja2luZzp2b2lkIDAhPT1kLmRlcHRoUGFja2luZz9kLmRlcHRoUGFja2luZzohMX19O3RoaXMuZ2V0UHJvZ3JhbUNvZGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtiLnNoYWRlcklEP2MucHVzaChiLnNoYWRlcklEKTooYy5wdXNoKGEuZnJhZ21lbnRTaGFkZXIpLGMucHVzaChhLnZlcnRleFNoYWRlcikpO2lmKHZvaWQgMCE9PWEuZGVmaW5lcylmb3IodmFyIGQgaW4gYS5kZWZpbmVzKWMucHVzaChkKSxjLnB1c2goYS5kZWZpbmVzW2RdKTtmb3IoZD0wO2Q8Zi5sZW5ndGg7ZCsrKWMucHVzaChiW2ZbZF1dKTtyZXR1cm4gYy5qb2luKCl9O3RoaXMuYWNxdWlyZVByb2dyYW09ZnVuY3Rpb24oYixjLGUpe2Zvcih2YXIgZix1PTAscT1kLmxlbmd0aDt1PHE7dSsrKXt2YXIgbj1kW3VdO2lmKG4uY29kZT09PWUpe2Y9bjsrK2YudXNlZFRpbWVzO2JyZWFrfX12b2lkIDA9PT0KZiYmKGY9bmV3IGFnKGEsZSxiLGMpLGQucHVzaChmKSk7cmV0dXJuIGZ9O3RoaXMucmVsZWFzZVByb2dyYW09ZnVuY3Rpb24oYSl7aWYoMD09PS0tYS51c2VkVGltZXMpe3ZhciBiPWQuaW5kZXhPZihhKTtkW2JdPWRbZC5sZW5ndGgtMV07ZC5wb3AoKTthLmRlc3Ryb3koKX19O3RoaXMucHJvZ3JhbXM9ZH1mdW5jdGlvbiBkZyhhLGIsYyxkLGUsZixnKXtmdW5jdGlvbiBoKGEsYil7aWYoYS53aWR0aD5ifHxhLmhlaWdodD5iKXt2YXIgYz1iL01hdGgubWF4KGEud2lkdGgsYS5oZWlnaHQpLGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7ZC53aWR0aD1NYXRoLmZsb29yKGEud2lkdGgqYyk7ZC5oZWlnaHQ9TWF0aC5mbG9vcihhLmhlaWdodCpjKTtkLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKGEsMCwwLGEud2lkdGgsYS5oZWlnaHQsMCwwLGQud2lkdGgsZC5oZWlnaHQpO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogaW1hZ2UgaXMgdG9vIGJpZyAoIisKYS53aWR0aCsieCIrYS5oZWlnaHQrIikuIFJlc2l6ZWQgdG8gIitkLndpZHRoKyJ4IitkLmhlaWdodCxhKTtyZXR1cm4gZH1yZXR1cm4gYX1mdW5jdGlvbiBrKGEpe3JldHVybiBZLmlzUG93ZXJPZlR3byhhLndpZHRoKSYmWS5pc1Bvd2VyT2ZUd28oYS5oZWlnaHQpfWZ1bmN0aW9uIG0oYil7cmV0dXJuIDEwMDM9PT1ifHwxMDA0PT09Ynx8MTAwNT09PWI/YS5ORUFSRVNUOmEuTElORUFSfWZ1bmN0aW9uIHUoYil7Yj1iLnRhcmdldDtiLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHUpO2E6e3ZhciBjPWQuZ2V0KGIpO2lmKGIuaW1hZ2UmJmMuX19pbWFnZV9fd2ViZ2xUZXh0dXJlQ3ViZSlhLmRlbGV0ZVRleHR1cmUoYy5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlKTtlbHNle2lmKHZvaWQgMD09PWMuX193ZWJnbEluaXQpYnJlYWsgYTthLmRlbGV0ZVRleHR1cmUoYy5fX3dlYmdsVGV4dHVyZSl9ZC5yZW1vdmUoYil9Zy50ZXh0dXJlcy0tfWZ1bmN0aW9uIHEoYil7Yj1iLnRhcmdldDsKYi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixxKTt2YXIgYz1kLmdldChiKSxlPWQuZ2V0KGIudGV4dHVyZSk7aWYoYil7dm9pZCAwIT09ZS5fX3dlYmdsVGV4dHVyZSYmYS5kZWxldGVUZXh0dXJlKGUuX193ZWJnbFRleHR1cmUpO2IuZGVwdGhUZXh0dXJlJiZiLmRlcHRoVGV4dHVyZS5kaXNwb3NlKCk7aWYoYi5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZSlmb3IoZT0wOzY+ZTtlKyspYS5kZWxldGVGcmFtZWJ1ZmZlcihjLl9fd2ViZ2xGcmFtZWJ1ZmZlcltlXSksYy5fX3dlYmdsRGVwdGhidWZmZXImJmEuZGVsZXRlUmVuZGVyYnVmZmVyKGMuX193ZWJnbERlcHRoYnVmZmVyW2VdKTtlbHNlIGEuZGVsZXRlRnJhbWVidWZmZXIoYy5fX3dlYmdsRnJhbWVidWZmZXIpLGMuX193ZWJnbERlcHRoYnVmZmVyJiZhLmRlbGV0ZVJlbmRlcmJ1ZmZlcihjLl9fd2ViZ2xEZXB0aGJ1ZmZlcik7ZC5yZW1vdmUoYi50ZXh0dXJlKTtkLnJlbW92ZShiKX1nLnRleHR1cmVzLS19ZnVuY3Rpb24gbihiLAptKXt2YXIgbj1kLmdldChiKTtpZigwPGIudmVyc2lvbiYmbi5fX3ZlcnNpb24hPT1iLnZlcnNpb24pe3ZhciBxPWIuaW1hZ2U7aWYodm9pZCAwPT09cSljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCIsYik7ZWxzZSBpZighMT09PXEuY29tcGxldGUpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyBpbmNvbXBsZXRlIixiKTtlbHNle3ZvaWQgMD09PW4uX193ZWJnbEluaXQmJihuLl9fd2ViZ2xJbml0PSEwLGIuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdSksbi5fX3dlYmdsVGV4dHVyZT1hLmNyZWF0ZVRleHR1cmUoKSxnLnRleHR1cmVzKyspO2MuYWN0aXZlVGV4dHVyZShhLlRFWFRVUkUwK20pO2MuYmluZFRleHR1cmUoYS5URVhUVVJFXzJELG4uX193ZWJnbFRleHR1cmUpO2EucGl4ZWxTdG9yZWkoYS5VTlBBQ0tfRkxJUF9ZX1dFQkdMLApiLmZsaXBZKTthLnBpeGVsU3RvcmVpKGEuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLGIucHJlbXVsdGlwbHlBbHBoYSk7YS5waXhlbFN0b3JlaShhLlVOUEFDS19BTElHTk1FTlQsYi51bnBhY2tBbGlnbm1lbnQpO3ZhciBsPWgoYi5pbWFnZSxlLm1heFRleHR1cmVTaXplKTtpZigoMTAwMSE9PWIud3JhcFN8fDEwMDEhPT1iLndyYXBUfHwxMDAzIT09Yi5taW5GaWx0ZXImJjEwMDYhPT1iLm1pbkZpbHRlcikmJiExPT09ayhsKSlpZihxPWwscSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHEgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7dC53aWR0aD1ZLm5lYXJlc3RQb3dlck9mVHdvKHEud2lkdGgpO3QuaGVpZ2h0PVkubmVhcmVzdFBvd2VyT2ZUd28ocS5oZWlnaHQpO3QuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UocSwwLDAsCnQud2lkdGgsdC5oZWlnaHQpO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogaW1hZ2UgaXMgbm90IHBvd2VyIG9mIHR3byAoIitxLndpZHRoKyJ4IitxLmhlaWdodCsiKS4gUmVzaXplZCB0byAiK3Qud2lkdGgrIngiK3QuaGVpZ2h0LHEpO2w9dH1lbHNlIGw9cTt2YXIgcT1rKGwpLHQ9ZihiLmZvcm1hdCksej1mKGIudHlwZSk7cihhLlRFWFRVUkVfMkQsYixxKTt2YXIgRj1iLm1pcG1hcHM7aWYoYi5pc0RlcHRoVGV4dHVyZSl7Rj1hLkRFUFRIX0NPTVBPTkVOVDtpZigxMDE1PT09Yi50eXBlKXtpZighcCl0aHJvdyBFcnJvcigiRmxvYXQgRGVwdGggVGV4dHVyZSBvbmx5IHN1cHBvcnRlZCBpbiBXZWJHTDIuMCIpO0Y9YS5ERVBUSF9DT01QT05FTlQzMkZ9ZWxzZSBwJiYoRj1hLkRFUFRIX0NPTVBPTkVOVDE2KTsxMDI2PT09Yi5mb3JtYXQmJkY9PT1hLkRFUFRIX0NPTVBPTkVOVCYmMTAxMiE9PWIudHlwZSYmMTAxNCE9PWIudHlwZSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLApiLnR5cGU9MTAxMix6PWYoYi50eXBlKSk7MTAyNz09PWIuZm9ybWF0JiYoRj1hLkRFUFRIX1NURU5DSUwsMTAyMCE9PWIudHlwZSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkSW50MjQ4VHlwZSBmb3IgRGVwdGhTdGVuY2lsRm9ybWF0IERlcHRoVGV4dHVyZS4iKSxiLnR5cGU9MTAyMCx6PWYoYi50eXBlKSkpO2MudGV4SW1hZ2UyRChhLlRFWFRVUkVfMkQsMCxGLGwud2lkdGgsbC5oZWlnaHQsMCx0LHosbnVsbCl9ZWxzZSBpZihiLmlzRGF0YVRleHR1cmUpaWYoMDxGLmxlbmd0aCYmcSl7Zm9yKHZhciBhYT0wLFI9Ri5sZW5ndGg7YWE8UjthYSsrKWw9RlthYV0sYy50ZXhJbWFnZTJEKGEuVEVYVFVSRV8yRCxhYSx0LGwud2lkdGgsbC5oZWlnaHQsMCx0LHosbC5kYXRhKTtiLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIGMudGV4SW1hZ2UyRChhLlRFWFRVUkVfMkQsMCx0LGwud2lkdGgsbC5oZWlnaHQsMCx0LHosbC5kYXRhKTtlbHNlIGlmKGIuaXNDb21wcmVzc2VkVGV4dHVyZSlmb3IoYWE9CjAsUj1GLmxlbmd0aDthYTxSO2FhKyspbD1GW2FhXSwxMDIzIT09Yi5mb3JtYXQmJjEwMjIhPT1iLmZvcm1hdD8tMTxjLmdldENvbXByZXNzZWRUZXh0dXJlRm9ybWF0cygpLmluZGV4T2YodCk/Yy5jb21wcmVzc2VkVGV4SW1hZ2UyRChhLlRFWFRVUkVfMkQsYWEsdCxsLndpZHRoLGwuaGVpZ2h0LDAsbC5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC51cGxvYWRUZXh0dXJlKCkiKTpjLnRleEltYWdlMkQoYS5URVhUVVJFXzJELGFhLHQsbC53aWR0aCxsLmhlaWdodCwwLHQseixsLmRhdGEpO2Vsc2UgaWYoMDxGLmxlbmd0aCYmcSl7YWE9MDtmb3IoUj1GLmxlbmd0aDthYTxSO2FhKyspbD1GW2FhXSxjLnRleEltYWdlMkQoYS5URVhUVVJFXzJELGFhLHQsdCx6LGwpO2IuZ2VuZXJhdGVNaXBtYXBzPSExfWVsc2UgYy50ZXhJbWFnZTJEKGEuVEVYVFVSRV8yRCwKMCx0LHQseixsKTtiLmdlbmVyYXRlTWlwbWFwcyYmcSYmYS5nZW5lcmF0ZU1pcG1hcChhLlRFWFRVUkVfMkQpO24uX192ZXJzaW9uPWIudmVyc2lvbjtpZihiLm9uVXBkYXRlKWIub25VcGRhdGUoYik7cmV0dXJufX1jLmFjdGl2ZVRleHR1cmUoYS5URVhUVVJFMCttKTtjLmJpbmRUZXh0dXJlKGEuVEVYVFVSRV8yRCxuLl9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiByKGMsZyxoKXtoPyhhLnRleFBhcmFtZXRlcmkoYyxhLlRFWFRVUkVfV1JBUF9TLGYoZy53cmFwUykpLGEudGV4UGFyYW1ldGVyaShjLGEuVEVYVFVSRV9XUkFQX1QsZihnLndyYXBUKSksYS50ZXhQYXJhbWV0ZXJpKGMsYS5URVhUVVJFX01BR19GSUxURVIsZihnLm1hZ0ZpbHRlcikpLGEudGV4UGFyYW1ldGVyaShjLGEuVEVYVFVSRV9NSU5fRklMVEVSLGYoZy5taW5GaWx0ZXIpKSk6KGEudGV4UGFyYW1ldGVyaShjLGEuVEVYVFVSRV9XUkFQX1MsYS5DTEFNUF9UT19FREdFKSxhLnRleFBhcmFtZXRlcmkoYyxhLlRFWFRVUkVfV1JBUF9ULAphLkNMQU1QX1RPX0VER0UpLDEwMDE9PT1nLndyYXBTJiYxMDAxPT09Zy53cmFwVHx8Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIsZyksYS50ZXhQYXJhbWV0ZXJpKGMsYS5URVhUVVJFX01BR19GSUxURVIsbShnLm1hZ0ZpbHRlcikpLGEudGV4UGFyYW1ldGVyaShjLGEuVEVYVFVSRV9NSU5fRklMVEVSLG0oZy5taW5GaWx0ZXIpKSwxMDAzIT09Zy5taW5GaWx0ZXImJjEwMDYhPT1nLm1pbkZpbHRlciYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUubWluRmlsdGVyIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuTmVhcmVzdEZpbHRlciBvciBUSFJFRS5MaW5lYXJGaWx0ZXIuIixnKSk7IShoPWIuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSl8fAoxMDE1PT09Zy50eXBlJiZudWxsPT09Yi5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpfHwxMDE2PT09Zy50eXBlJiZudWxsPT09Yi5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIil8fCEoMTxnLmFuaXNvdHJvcHl8fGQuZ2V0KGcpLl9fY3VycmVudEFuaXNvdHJvcHkpfHwoYS50ZXhQYXJhbWV0ZXJmKGMsaC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbihnLmFuaXNvdHJvcHksZS5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxkLmdldChnKS5fX2N1cnJlbnRBbmlzb3Ryb3B5PWcuYW5pc290cm9weSl9ZnVuY3Rpb24gbChiLGUsZyxoKXt2YXIgaz1mKGUudGV4dHVyZS5mb3JtYXQpLG09ZihlLnRleHR1cmUudHlwZSk7Yy50ZXhJbWFnZTJEKGgsMCxrLGUud2lkdGgsZS5oZWlnaHQsMCxrLG0sbnVsbCk7YS5iaW5kRnJhbWVidWZmZXIoYS5GUkFNRUJVRkZFUixiKTthLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGEuRlJBTUVCVUZGRVIsZyxoLGQuZ2V0KGUudGV4dHVyZSkuX193ZWJnbFRleHR1cmUsCjApO2EuYmluZEZyYW1lYnVmZmVyKGEuRlJBTUVCVUZGRVIsbnVsbCl9ZnVuY3Rpb24gdChiLGMpe2EuYmluZFJlbmRlcmJ1ZmZlcihhLlJFTkRFUkJVRkZFUixiKTtjLmRlcHRoQnVmZmVyJiYhYy5zdGVuY2lsQnVmZmVyPyhhLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoYS5SRU5ERVJCVUZGRVIsYS5ERVBUSF9DT01QT05FTlQxNixjLndpZHRoLGMuaGVpZ2h0KSxhLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGEuRlJBTUVCVUZGRVIsYS5ERVBUSF9BVFRBQ0hNRU5ULGEuUkVOREVSQlVGRkVSLGIpKTpjLmRlcHRoQnVmZmVyJiZjLnN0ZW5jaWxCdWZmZXI/KGEucmVuZGVyYnVmZmVyU3RvcmFnZShhLlJFTkRFUkJVRkZFUixhLkRFUFRIX1NURU5DSUwsYy53aWR0aCxjLmhlaWdodCksYS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihhLkZSQU1FQlVGRkVSLGEuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULGEuUkVOREVSQlVGRkVSLGIpKTphLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoYS5SRU5ERVJCVUZGRVIsCmEuUkdCQTQsYy53aWR0aCxjLmhlaWdodCk7YS5iaW5kUmVuZGVyYnVmZmVyKGEuUkVOREVSQlVGRkVSLG51bGwpfXZhciBwPSJ1bmRlZmluZWQiIT09dHlwZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQmJmEgaW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0O3RoaXMuc2V0VGV4dHVyZTJEPW47dGhpcy5zZXRUZXh0dXJlQ3ViZT1mdW5jdGlvbihiLG0pe3ZhciBuPWQuZ2V0KGIpO2lmKDY9PT1iLmltYWdlLmxlbmd0aClpZigwPGIudmVyc2lvbiYmbi5fX3ZlcnNpb24hPT1iLnZlcnNpb24pe24uX19pbWFnZV9fd2ViZ2xUZXh0dXJlQ3ViZXx8KGIuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdSksbi5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlPWEuY3JlYXRlVGV4dHVyZSgpLGcudGV4dHVyZXMrKyk7Yy5hY3RpdmVUZXh0dXJlKGEuVEVYVFVSRTArbSk7Yy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfQ1VCRV9NQVAsbi5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlKTthLnBpeGVsU3RvcmVpKGEuVU5QQUNLX0ZMSVBfWV9XRUJHTCwKYi5mbGlwWSk7Zm9yKHZhciBxPWImJmIuaXNDb21wcmVzc2VkVGV4dHVyZSxsPWIuaW1hZ2VbMF0mJmIuaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSx0PVtdLHo9MDs2Pno7eisrKXRbel09cXx8bD9sP2IuaW1hZ2Vbel0uaW1hZ2U6Yi5pbWFnZVt6XTpoKGIuaW1hZ2Vbel0sZS5tYXhDdWJlbWFwU2l6ZSk7dmFyIHA9ayh0WzBdKSx5PWYoYi5mb3JtYXQpLFI9ZihiLnR5cGUpO3IoYS5URVhUVVJFX0NVQkVfTUFQLGIscCk7Zm9yKHo9MDs2Pno7eisrKWlmKHEpZm9yKHZhciBjYSxsYT10W3pdLm1pcG1hcHMsRD0wLEI9bGEubGVuZ3RoO0Q8QjtEKyspY2E9bGFbRF0sMTAyMyE9PWIuZm9ybWF0JiYxMDIyIT09Yi5mb3JtYXQ/LTE8Yy5nZXRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMoKS5pbmRleE9mKHkpP2MuY29tcHJlc3NlZFRleEltYWdlMkQoYS5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1greixELHksY2Eud2lkdGgsY2EuaGVpZ2h0LDAsY2EuZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAuc2V0VGV4dHVyZUN1YmUoKSIpOgpjLnRleEltYWdlMkQoYS5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1greixELHksY2Eud2lkdGgsY2EuaGVpZ2h0LDAseSxSLGNhLmRhdGEpO2Vsc2UgbD9jLnRleEltYWdlMkQoYS5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1greiwwLHksdFt6XS53aWR0aCx0W3pdLmhlaWdodCwwLHksUix0W3pdLmRhdGEpOmMudGV4SW1hZ2UyRChhLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCt6LDAseSx5LFIsdFt6XSk7Yi5nZW5lcmF0ZU1pcG1hcHMmJnAmJmEuZ2VuZXJhdGVNaXBtYXAoYS5URVhUVVJFX0NVQkVfTUFQKTtuLl9fdmVyc2lvbj1iLnZlcnNpb247aWYoYi5vblVwZGF0ZSliLm9uVXBkYXRlKGIpfWVsc2UgYy5hY3RpdmVUZXh0dXJlKGEuVEVYVFVSRTArbSksYy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfQ1VCRV9NQVAsbi5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlKX07dGhpcy5zZXRUZXh0dXJlQ3ViZUR5bmFtaWM9ZnVuY3Rpb24oYixlKXtjLmFjdGl2ZVRleHR1cmUoYS5URVhUVVJFMCsKZSk7Yy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfQ1VCRV9NQVAsZC5nZXQoYikuX193ZWJnbFRleHR1cmUpfTt0aGlzLnNldHVwUmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKGIpe3ZhciBlPWQuZ2V0KGIpLGY9ZC5nZXQoYi50ZXh0dXJlKTtiLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHEpO2YuX193ZWJnbFRleHR1cmU9YS5jcmVhdGVUZXh0dXJlKCk7Zy50ZXh0dXJlcysrO3ZhciBoPSEwPT09Yi5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZSxtPWsoYik7aWYoaCl7ZS5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKHZhciB1PTA7Nj51O3UrKyllLl9fd2ViZ2xGcmFtZWJ1ZmZlclt1XT1hLmNyZWF0ZUZyYW1lYnVmZmVyKCl9ZWxzZSBlLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1hLmNyZWF0ZUZyYW1lYnVmZmVyKCk7aWYoaCl7Yy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfQ1VCRV9NQVAsZi5fX3dlYmdsVGV4dHVyZSk7cihhLlRFWFRVUkVfQ1VCRV9NQVAsYi50ZXh0dXJlLG0pO2Zvcih1PTA7Nj51O3UrKylsKGUuX193ZWJnbEZyYW1lYnVmZmVyW3VdLApiLGEuQ09MT1JfQVRUQUNITUVOVDAsYS5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1grdSk7Yi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyYmbSYmYS5nZW5lcmF0ZU1pcG1hcChhLlRFWFRVUkVfQ1VCRV9NQVApO2MuYmluZFRleHR1cmUoYS5URVhUVVJFX0NVQkVfTUFQLG51bGwpfWVsc2UgYy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfMkQsZi5fX3dlYmdsVGV4dHVyZSkscihhLlRFWFRVUkVfMkQsYi50ZXh0dXJlLG0pLGwoZS5fX3dlYmdsRnJhbWVidWZmZXIsYixhLkNPTE9SX0FUVEFDSE1FTlQwLGEuVEVYVFVSRV8yRCksYi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyYmbSYmYS5nZW5lcmF0ZU1pcG1hcChhLlRFWFRVUkVfMkQpLGMuYmluZFRleHR1cmUoYS5URVhUVVJFXzJELG51bGwpO2lmKGIuZGVwdGhCdWZmZXIpe2U9ZC5nZXQoYik7Zj0hMD09PWIuaXNXZWJHTFJlbmRlclRhcmdldEN1YmU7aWYoYi5kZXB0aFRleHR1cmUpe2lmKGYpdGhyb3cgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7CmlmKGImJmIuaXNXZWJHTFJlbmRlclRhcmdldEN1YmUpdGhyb3cgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQhIik7YS5iaW5kRnJhbWVidWZmZXIoYS5GUkFNRUJVRkZFUixlLl9fd2ViZ2xGcmFtZWJ1ZmZlcik7aWYoIWIuZGVwdGhUZXh0dXJlfHwhYi5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpdGhyb3cgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTtkLmdldChiLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUmJmIuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPT09Yi53aWR0aCYmYi5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0PT09Yi5oZWlnaHR8fChiLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD1iLndpZHRoLGIuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD1iLmhlaWdodCxiLmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0KITApO24oYi5kZXB0aFRleHR1cmUsMCk7ZT1kLmdldChiLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU7aWYoMTAyNj09PWIuZGVwdGhUZXh0dXJlLmZvcm1hdClhLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGEuRlJBTUVCVUZGRVIsYS5ERVBUSF9BVFRBQ0hNRU5ULGEuVEVYVFVSRV8yRCxlLDApO2Vsc2UgaWYoMTAyNz09PWIuZGVwdGhUZXh0dXJlLmZvcm1hdClhLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGEuRlJBTUVCVUZGRVIsYS5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsYS5URVhUVVJFXzJELGUsMCk7ZWxzZSB0aHJvdyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iik7fWVsc2UgaWYoZilmb3IoZS5fX3dlYmdsRGVwdGhidWZmZXI9W10sZj0wOzY+ZjtmKyspYS5iaW5kRnJhbWVidWZmZXIoYS5GUkFNRUJVRkZFUixlLl9fd2ViZ2xGcmFtZWJ1ZmZlcltmXSksZS5fX3dlYmdsRGVwdGhidWZmZXJbZl09YS5jcmVhdGVSZW5kZXJidWZmZXIoKSx0KGUuX193ZWJnbERlcHRoYnVmZmVyW2ZdLApiKTtlbHNlIGEuYmluZEZyYW1lYnVmZmVyKGEuRlJBTUVCVUZGRVIsZS5fX3dlYmdsRnJhbWVidWZmZXIpLGUuX193ZWJnbERlcHRoYnVmZmVyPWEuY3JlYXRlUmVuZGVyYnVmZmVyKCksdChlLl9fd2ViZ2xEZXB0aGJ1ZmZlcixiKTthLmJpbmRGcmFtZWJ1ZmZlcihhLkZSQU1FQlVGRkVSLG51bGwpfX07dGhpcy51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXA9ZnVuY3Rpb24oYil7dmFyIGU9Yi50ZXh0dXJlO2UuZ2VuZXJhdGVNaXBtYXBzJiZrKGIpJiYxMDAzIT09ZS5taW5GaWx0ZXImJjEwMDYhPT1lLm1pbkZpbHRlciYmKGI9YiYmYi5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZT9hLlRFWFRVUkVfQ1VCRV9NQVA6YS5URVhUVVJFXzJELGU9ZC5nZXQoZSkuX193ZWJnbFRleHR1cmUsYy5iaW5kVGV4dHVyZShiLGUpLGEuZ2VuZXJhdGVNaXBtYXAoYiksYy5iaW5kVGV4dHVyZShiLG51bGwpKX19ZnVuY3Rpb24gZWcoKXt2YXIgYT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGIpe2I9Yi51dWlkOwp2YXIgYz1hW2JdO3ZvaWQgMD09PWMmJihjPXt9LGFbYl09Yyk7cmV0dXJuIGN9LHJlbW92ZTpmdW5jdGlvbihiKXtkZWxldGUgYVtiLnV1aWRdfSxjbGVhcjpmdW5jdGlvbigpe2E9e319fX1mdW5jdGlvbiBmZyhhLGIsYyl7ZnVuY3Rpb24gZChiLGMsZCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoNCksZj1hLmNyZWF0ZVRleHR1cmUoKTthLmJpbmRUZXh0dXJlKGIsZik7YS50ZXhQYXJhbWV0ZXJpKGIsYS5URVhUVVJFX01JTl9GSUxURVIsYS5ORUFSRVNUKTthLnRleFBhcmFtZXRlcmkoYixhLlRFWFRVUkVfTUFHX0ZJTFRFUixhLk5FQVJFU1QpO2ZvcihiPTA7YjxkO2IrKylhLnRleEltYWdlMkQoYytiLDAsYS5SR0JBLDEsMSwwLGEuUkdCQSxhLlVOU0lHTkVEX0JZVEUsZSk7cmV0dXJuIGZ9ZnVuY3Rpb24gZShiKXshMCE9PXZbYl0mJihhLmVuYWJsZShiKSx2W2JdPSEwKX1mdW5jdGlvbiBmKGIpeyExIT09dltiXSYmKGEuZGlzYWJsZShiKSx2W2JdPSExKX1mdW5jdGlvbiBnKGIsZCwKZyxoLGssbSxuLHUpezAhPT1iP2UoYS5CTEVORCk6ZihhLkJMRU5EKTtpZihiIT09d3x8dSE9PWNhKTI9PT1iP3U/KGEuYmxlbmRFcXVhdGlvblNlcGFyYXRlKGEuRlVOQ19BREQsYS5GVU5DX0FERCksYS5ibGVuZEZ1bmNTZXBhcmF0ZShhLk9ORSxhLk9ORSxhLk9ORSxhLk9ORSkpOihhLmJsZW5kRXF1YXRpb24oYS5GVU5DX0FERCksYS5ibGVuZEZ1bmMoYS5TUkNfQUxQSEEsYS5PTkUpKTozPT09Yj91PyhhLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShhLkZVTkNfQURELGEuRlVOQ19BREQpLGEuYmxlbmRGdW5jU2VwYXJhdGUoYS5aRVJPLGEuWkVSTyxhLk9ORV9NSU5VU19TUkNfQ09MT1IsYS5PTkVfTUlOVVNfU1JDX0FMUEhBKSk6KGEuYmxlbmRFcXVhdGlvbihhLkZVTkNfQUREKSxhLmJsZW5kRnVuYyhhLlpFUk8sYS5PTkVfTUlOVVNfU1JDX0NPTE9SKSk6ND09PWI/dT8oYS5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoYS5GVU5DX0FERCxhLkZVTkNfQUREKSxhLmJsZW5kRnVuY1NlcGFyYXRlKGEuWkVSTywKYS5TUkNfQ09MT1IsYS5aRVJPLGEuU1JDX0FMUEhBKSk6KGEuYmxlbmRFcXVhdGlvbihhLkZVTkNfQUREKSxhLmJsZW5kRnVuYyhhLlpFUk8sYS5TUkNfQ09MT1IpKTp1PyhhLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShhLkZVTkNfQURELGEuRlVOQ19BREQpLGEuYmxlbmRGdW5jU2VwYXJhdGUoYS5PTkUsYS5PTkVfTUlOVVNfU1JDX0FMUEhBLGEuT05FLGEuT05FX01JTlVTX1NSQ19BTFBIQSkpOihhLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShhLkZVTkNfQURELGEuRlVOQ19BREQpLGEuYmxlbmRGdW5jU2VwYXJhdGUoYS5TUkNfQUxQSEEsYS5PTkVfTUlOVVNfU1JDX0FMUEhBLGEuT05FLGEuT05FX01JTlVTX1NSQ19BTFBIQSkpLHc9YixjYT11O2lmKDU9PT1iKXtrPWt8fGQ7bT1tfHxnO249bnx8aDtpZihkIT09T3x8ayE9PUYpYS5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoYyhkKSxjKGspKSxPPWQsRj1rO2lmKGchPT1TfHxoIT09RXx8bSE9PWFhfHxuIT09UilhLmJsZW5kRnVuY1NlcGFyYXRlKGMoZyksCmMoaCksYyhtKSxjKG4pKSxTPWcsRT1oLGFhPW0sUj1ufWVsc2UgUj1hYT1GPUU9Uz1PPW51bGx9ZnVuY3Rpb24gaChiKXtsYSE9PWImJihiP2EuZnJvbnRGYWNlKGEuQ1cpOmEuZnJvbnRGYWNlKGEuQ0NXKSxsYT1iKX1mdW5jdGlvbiBrKGIpezAhPT1iPyhlKGEuQ1VMTF9GQUNFKSxiIT09RCYmKDE9PT1iP2EuY3VsbEZhY2UoYS5CQUNLKToyPT09Yj9hLmN1bGxGYWNlKGEuRlJPTlQpOmEuY3VsbEZhY2UoYS5GUk9OVF9BTkRfQkFDSykpKTpmKGEuQ1VMTF9GQUNFKTtEPWJ9ZnVuY3Rpb24gbShiLGMsZCl7aWYoYil7aWYoZShhLlBPTFlHT05fT0ZGU0VUX0ZJTEwpLEMhPT1jfHxQIT09ZClhLnBvbHlnb25PZmZzZXQoYyxkKSxDPWMsUD1kfWVsc2UgZihhLlBPTFlHT05fT0ZGU0VUX0ZJTEwpfWZ1bmN0aW9uIHUoYil7dm9pZCAwPT09YiYmKGI9YS5URVhUVVJFMCtXLTEpO1QhPT1iJiYoYS5hY3RpdmVUZXh0dXJlKGIpLFQ9Yil9dmFyIHE9bmV3IGZ1bmN0aW9uKCl7dmFyIGI9ITEsYz0KbmV3IGdhLGQ9bnVsbCxlPW5ldyBnYTtyZXR1cm57c2V0TWFzazpmdW5jdGlvbihjKXtkPT09Y3x8Ynx8KGEuY29sb3JNYXNrKGMsYyxjLGMpLGQ9Yyl9LHNldExvY2tlZDpmdW5jdGlvbihhKXtiPWF9LHNldENsZWFyOmZ1bmN0aW9uKGIsZCxmLGcsaCl7ITA9PT1oJiYoYio9ZyxkKj1nLGYqPWcpO2Muc2V0KGIsZCxmLGcpOyExPT09ZS5lcXVhbHMoYykmJihhLmNsZWFyQ29sb3IoYixkLGYsZyksZS5jb3B5KGMpKX0scmVzZXQ6ZnVuY3Rpb24oKXtiPSExO2Q9bnVsbDtlLnNldCgwLDAsMCwxKX19fSxuPW5ldyBmdW5jdGlvbigpe3ZhciBiPSExLGM9bnVsbCxkPW51bGwsZz1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKGIpe2I/ZShhLkRFUFRIX1RFU1QpOmYoYS5ERVBUSF9URVNUKX0sc2V0TWFzazpmdW5jdGlvbihkKXtjPT09ZHx8Ynx8KGEuZGVwdGhNYXNrKGQpLGM9ZCl9LHNldEZ1bmM6ZnVuY3Rpb24oYil7aWYoZCE9PWIpe2lmKGIpc3dpdGNoKGIpe2Nhc2UgMDphLmRlcHRoRnVuYyhhLk5FVkVSKTsKYnJlYWs7Y2FzZSAxOmEuZGVwdGhGdW5jKGEuQUxXQVlTKTticmVhaztjYXNlIDI6YS5kZXB0aEZ1bmMoYS5MRVNTKTticmVhaztjYXNlIDM6YS5kZXB0aEZ1bmMoYS5MRVFVQUwpO2JyZWFrO2Nhc2UgNDphLmRlcHRoRnVuYyhhLkVRVUFMKTticmVhaztjYXNlIDU6YS5kZXB0aEZ1bmMoYS5HRVFVQUwpO2JyZWFrO2Nhc2UgNjphLmRlcHRoRnVuYyhhLkdSRUFURVIpO2JyZWFrO2Nhc2UgNzphLmRlcHRoRnVuYyhhLk5PVEVRVUFMKTticmVhaztkZWZhdWx0OmEuZGVwdGhGdW5jKGEuTEVRVUFMKX1lbHNlIGEuZGVwdGhGdW5jKGEuTEVRVUFMKTtkPWJ9fSxzZXRMb2NrZWQ6ZnVuY3Rpb24oYSl7Yj1hfSxzZXRDbGVhcjpmdW5jdGlvbihiKXtnIT09YiYmKGEuY2xlYXJEZXB0aChiKSxnPWIpfSxyZXNldDpmdW5jdGlvbigpe2I9ITE7Zz1kPWM9bnVsbH19fSxyPW5ldyBmdW5jdGlvbigpe3ZhciBiPSExLGM9bnVsbCxkPW51bGwsZz1udWxsLGg9bnVsbCxrPW51bGwsbT1udWxsLG49bnVsbCwKdT1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKGIpe2I/ZShhLlNURU5DSUxfVEVTVCk6ZihhLlNURU5DSUxfVEVTVCl9LHNldE1hc2s6ZnVuY3Rpb24oZCl7Yz09PWR8fGJ8fChhLnN0ZW5jaWxNYXNrKGQpLGM9ZCl9LHNldEZ1bmM6ZnVuY3Rpb24oYixjLGUpe2lmKGQhPT1ifHxnIT09Y3x8aCE9PWUpYS5zdGVuY2lsRnVuYyhiLGMsZSksZD1iLGc9YyxoPWV9LHNldE9wOmZ1bmN0aW9uKGIsYyxkKXtpZihrIT09Ynx8bSE9PWN8fG4hPT1kKWEuc3RlbmNpbE9wKGIsYyxkKSxrPWIsbT1jLG49ZH0sc2V0TG9ja2VkOmZ1bmN0aW9uKGEpe2I9YX0sc2V0Q2xlYXI6ZnVuY3Rpb24oYil7dSE9PWImJihhLmNsZWFyU3RlbmNpbChiKSx1PWIpfSxyZXNldDpmdW5jdGlvbigpe2I9ITE7dT1uPW09az1oPWc9ZD1jPW51bGx9fX0sbD1hLmdldFBhcmFtZXRlcihhLk1BWF9WRVJURVhfQVRUUklCUyksdD1uZXcgVWludDhBcnJheShsKSxwPW5ldyBVaW50OEFycmF5KGwpLHg9bmV3IFVpbnQ4QXJyYXkobCksCnY9e30sRz1udWxsLHc9bnVsbCxPPW51bGwsUz1udWxsLEU9bnVsbCxGPW51bGwsYWE9bnVsbCxSPW51bGwsY2E9ITEsbGE9bnVsbCxEPW51bGwsQj1udWxsLEM9bnVsbCxQPW51bGwsSz1udWxsLFc9YS5nZXRQYXJhbWV0ZXIoYS5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyksbD1wYXJzZUZsb2F0KC9eV2ViR0xcIChbMC05XSkvLmV4ZWMoYS5nZXRQYXJhbWV0ZXIoYS5WRVJTSU9OKSlbMV0pLGJhPTE8PXBhcnNlRmxvYXQobCksVD1udWxsLFE9e30sST1uZXcgZ2EsSD1uZXcgZ2EsSj17fTtKW2EuVEVYVFVSRV8yRF09ZChhLlRFWFRVUkVfMkQsYS5URVhUVVJFXzJELDEpO0pbYS5URVhUVVJFX0NVQkVfTUFQXT1kKGEuVEVYVFVSRV9DVUJFX01BUCxhLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCw2KTtyZXR1cm57YnVmZmVyczp7Y29sb3I6cSxkZXB0aDpuLHN0ZW5jaWw6cn0saW5pdDpmdW5jdGlvbigpe3Euc2V0Q2xlYXIoMCwwLDAsMSk7bi5zZXRDbGVhcigxKTtyLnNldENsZWFyKDApOwplKGEuREVQVEhfVEVTVCk7bi5zZXRGdW5jKDMpO2goITEpO2soMSk7ZShhLkNVTExfRkFDRSk7ZShhLkJMRU5EKTtnKDEpfSxpbml0QXR0cmlidXRlczpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI9dC5sZW5ndGg7YTxiO2ErKyl0W2FdPTB9LGVuYWJsZUF0dHJpYnV0ZTpmdW5jdGlvbihjKXt0W2NdPTE7MD09PXBbY10mJihhLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGMpLHBbY109MSk7MCE9PXhbY10mJihiLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShjLDApLHhbY109MCl9LGVuYWJsZUF0dHJpYnV0ZUFuZERpdmlzb3I6ZnVuY3Rpb24oYyxkKXt0W2NdPTE7MD09PXBbY10mJihhLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGMpLHBbY109MSk7eFtjXSE9PWQmJihiLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShjLGQpLHhbY109ZCl9LGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPQowLGM9cC5sZW5ndGg7YiE9PWM7KytiKXBbYl0hPT10W2JdJiYoYS5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoYikscFtiXT0wKX0sZW5hYmxlOmUsZGlzYWJsZTpmLGdldENvbXByZXNzZWRUZXh0dXJlRm9ybWF0czpmdW5jdGlvbigpe2lmKG51bGw9PT1HJiYoRz1bXSxiLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fGIuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxiLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSkpZm9yKHZhciBjPWEuZ2V0UGFyYW1ldGVyKGEuQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMpLGQ9MDtkPGMubGVuZ3RoO2QrKylHLnB1c2goY1tkXSk7cmV0dXJuIEd9LHNldEJsZW5kaW5nOmcsc2V0TWF0ZXJpYWw6ZnVuY3Rpb24oYil7Mj09PWIuc2lkZT9mKGEuQ1VMTF9GQUNFKTplKGEuQ1VMTF9GQUNFKTtoKDE9PT1iLnNpZGUpOyEwPT09Yi50cmFuc3BhcmVudD9nKGIuYmxlbmRpbmcsYi5ibGVuZEVxdWF0aW9uLApiLmJsZW5kU3JjLGIuYmxlbmREc3QsYi5ibGVuZEVxdWF0aW9uQWxwaGEsYi5ibGVuZFNyY0FscGhhLGIuYmxlbmREc3RBbHBoYSxiLnByZW11bHRpcGxpZWRBbHBoYSk6ZygwKTtuLnNldEZ1bmMoYi5kZXB0aEZ1bmMpO24uc2V0VGVzdChiLmRlcHRoVGVzdCk7bi5zZXRNYXNrKGIuZGVwdGhXcml0ZSk7cS5zZXRNYXNrKGIuY29sb3JXcml0ZSk7bShiLnBvbHlnb25PZmZzZXQsYi5wb2x5Z29uT2Zmc2V0RmFjdG9yLGIucG9seWdvbk9mZnNldFVuaXRzKX0sc2V0RmxpcFNpZGVkOmgsc2V0Q3VsbEZhY2U6ayxzZXRMaW5lV2lkdGg6ZnVuY3Rpb24oYil7YiE9PUImJihiYSYmYS5saW5lV2lkdGgoYiksQj1iKX0sc2V0UG9seWdvbk9mZnNldDptLGdldFNjaXNzb3JUZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIEt9LHNldFNjaXNzb3JUZXN0OmZ1bmN0aW9uKGIpeyhLPWIpP2UoYS5TQ0lTU09SX1RFU1QpOmYoYS5TQ0lTU09SX1RFU1QpfSxhY3RpdmVUZXh0dXJlOnUsYmluZFRleHR1cmU6ZnVuY3Rpb24oYiwKYyl7bnVsbD09PVQmJnUoKTt2YXIgZD1RW1RdO3ZvaWQgMD09PWQmJihkPXt0eXBlOnZvaWQgMCx0ZXh0dXJlOnZvaWQgMH0sUVtUXT1kKTtpZihkLnR5cGUhPT1ifHxkLnRleHR1cmUhPT1jKWEuYmluZFRleHR1cmUoYixjfHxKW2JdKSxkLnR5cGU9YixkLnRleHR1cmU9Y30sY29tcHJlc3NlZFRleEltYWdlMkQ6ZnVuY3Rpb24oKXt0cnl7YS5jb21wcmVzc2VkVGV4SW1hZ2UyRC5hcHBseShhLGFyZ3VtZW50cyl9Y2F0Y2goYil7Y29uc29sZS5lcnJvcihiKX19LHRleEltYWdlMkQ6ZnVuY3Rpb24oKXt0cnl7YS50ZXhJbWFnZTJELmFwcGx5KGEsYXJndW1lbnRzKX1jYXRjaChiKXtjb25zb2xlLmVycm9yKGIpfX0sc2Npc3NvcjpmdW5jdGlvbihiKXshMT09PUkuZXF1YWxzKGIpJiYoYS5zY2lzc29yKGIueCxiLnksYi56LGIudyksSS5jb3B5KGIpKX0sdmlld3BvcnQ6ZnVuY3Rpb24oYil7ITE9PT1ILmVxdWFscyhiKSYmKGEudmlld3BvcnQoYi54LGIueSxiLnosYi53KSxILmNvcHkoYikpfSwKcmVzZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKykxPT09cFtiXSYmKGEuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGIpLHBbYl09MCk7dj17fTtUPUc9bnVsbDtRPXt9O0Q9bGE9dz1udWxsO3EucmVzZXQoKTtuLnJlc2V0KCk7ci5yZXNldCgpfX19ZnVuY3Rpb24gZ2coYSxiLGMpe2Z1bmN0aW9uIGQoYil7aWYoImhpZ2hwIj09PWIpe2lmKDA8YS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoYS5WRVJURVhfU0hBREVSLGEuSElHSF9GTE9BVCkucHJlY2lzaW9uJiYwPGEuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KGEuRlJBR01FTlRfU0hBREVSLGEuSElHSF9GTE9BVCkucHJlY2lzaW9uKXJldHVybiJoaWdocCI7Yj0ibWVkaXVtcCJ9cmV0dXJuIm1lZGl1bXAiPT09YiYmMDxhLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChhLlZFUlRFWF9TSEFERVIsYS5NRURJVU1fRkxPQVQpLnByZWNpc2lvbiYmMDxhLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChhLkZSQUdNRU5UX1NIQURFUiwKYS5NRURJVU1fRkxPQVQpLnByZWNpc2lvbj8ibWVkaXVtcCI6Imxvd3AifXZhciBlLGY9dm9pZCAwIT09Yy5wcmVjaXNpb24/Yy5wcmVjaXNpb246ImhpZ2hwIixnPWQoZik7ZyE9PWYmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IixmLCJub3Qgc3VwcG9ydGVkLCB1c2luZyIsZywiaW5zdGVhZC4iKSxmPWcpO2M9ITA9PT1jLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJiEhYi5nZXQoIkVYVF9mcmFnX2RlcHRoIik7dmFyIGc9YS5nZXRQYXJhbWV0ZXIoYS5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyksaD1hLmdldFBhcmFtZXRlcihhLk1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyksaz1hLmdldFBhcmFtZXRlcihhLk1BWF9URVhUVVJFX1NJWkUpLG09YS5nZXRQYXJhbWV0ZXIoYS5NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFKSx1PWEuZ2V0UGFyYW1ldGVyKGEuTUFYX1ZFUlRFWF9BVFRSSUJTKSxxPWEuZ2V0UGFyYW1ldGVyKGEuTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMpLApuPWEuZ2V0UGFyYW1ldGVyKGEuTUFYX1ZBUllJTkdfVkVDVE9SUykscj1hLmdldFBhcmFtZXRlcihhLk1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMpLGw9MDxoLHQ9ISFiLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKTtyZXR1cm57Z2V0TWF4QW5pc290cm9weTpmdW5jdGlvbigpe2lmKHZvaWQgMCE9PWUpcmV0dXJuIGU7dmFyIGM9Yi5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO3JldHVybiBlPW51bGwhPT1jP2EuZ2V0UGFyYW1ldGVyKGMuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTowfSxnZXRNYXhQcmVjaXNpb246ZCxwcmVjaXNpb246Zixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmMsbWF4VGV4dHVyZXM6ZyxtYXhWZXJ0ZXhUZXh0dXJlczpoLG1heFRleHR1cmVTaXplOmssbWF4Q3ViZW1hcFNpemU6bSxtYXhBdHRyaWJ1dGVzOnUsbWF4VmVydGV4VW5pZm9ybXM6cSxtYXhWYXJ5aW5nczpuLG1heEZyYWdtZW50VW5pZm9ybXM6cix2ZXJ0ZXhUZXh0dXJlczpsLApmbG9hdEZyYWdtZW50VGV4dHVyZXM6dCxmbG9hdFZlcnRleFRleHR1cmVzOmwmJnR9fWZ1bmN0aW9uIGhnKGEpe3ZhciBiPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24oYyl7aWYodm9pZCAwIT09YltjXSlyZXR1cm4gYltjXTt2YXIgZDtzd2l0Y2goYyl7Y2FzZSAiV0VCR0xfZGVwdGhfdGV4dHVyZSI6ZD1hLmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxhLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2RlcHRoX3RleHR1cmUiKXx8YS5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlIik7YnJlYWs7Y2FzZSAiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjpkPWEuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8YS5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8YS5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTsKYnJlYWs7Y2FzZSAiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiOmQ9YS5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fGEuZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8YS5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpO2JyZWFrO2Nhc2UgIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6ZD1hLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fGEuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7Y2FzZSAiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiOmQ9YS5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIik7YnJlYWs7ZGVmYXVsdDpkPWEuZ2V0RXh0ZW5zaW9uKGMpfW51bGw9PT1kJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrCmMrIiBleHRlbnNpb24gbm90IHN1cHBvcnRlZC4iKTtyZXR1cm4gYltjXT1kfX19ZnVuY3Rpb24gaWcoKXtmdW5jdGlvbiBhKCl7bS52YWx1ZSE9PWQmJihtLnZhbHVlPWQsbS5uZWVkc1VwZGF0ZT0wPGUpO2MubnVtUGxhbmVzPWU7Yy5udW1JbnRlcnNlY3Rpb249MH1mdW5jdGlvbiBiKGEsYixkLGUpe3ZhciBmPW51bGwhPT1hP2EubGVuZ3RoOjAsZz1udWxsO2lmKDAhPT1mKXtnPW0udmFsdWU7aWYoITAhPT1lfHxudWxsPT09Zyl7ZT1kKzQqZjtiPWIubWF0cml4V29ybGRJbnZlcnNlO2suZ2V0Tm9ybWFsTWF0cml4KGIpO2lmKG51bGw9PT1nfHxnLmxlbmd0aDxlKWc9bmV3IEZsb2F0MzJBcnJheShlKTtmb3IoZT0wO2UhPT1mOysrZSxkKz00KWguY29weShhW2VdKS5hcHBseU1hdHJpeDQoYixrKSxoLm5vcm1hbC50b0FycmF5KGcsZCksZ1tkKzNdPWguY29uc3RhbnR9bS52YWx1ZT1nO20ubmVlZHNVcGRhdGU9ITB9Yy5udW1QbGFuZXM9ZjtyZXR1cm4gZ312YXIgYz10aGlzLGQ9bnVsbCwKZT0wLGY9ITEsZz0hMSxoPW5ldyB3YSxrPW5ldyBLYSxtPXt2YWx1ZTpudWxsLG5lZWRzVXBkYXRlOiExfTt0aGlzLnVuaWZvcm09bTt0aGlzLm51bUludGVyc2VjdGlvbj10aGlzLm51bVBsYW5lcz0wO3RoaXMuaW5pdD1mdW5jdGlvbihhLGMsZyl7dmFyIGg9MCE9PWEubGVuZ3RofHxjfHwwIT09ZXx8ZjtmPWM7ZD1iKGEsZywwKTtlPWEubGVuZ3RoO3JldHVybiBofTt0aGlzLmJlZ2luU2hhZG93cz1mdW5jdGlvbigpe2c9ITA7YihudWxsKX07dGhpcy5lbmRTaGFkb3dzPWZ1bmN0aW9uKCl7Zz0hMTthKCl9O3RoaXMuc2V0U3RhdGU9ZnVuY3Rpb24oYyxoLGsscixsLHQpe2lmKCFmfHxudWxsPT09Y3x8MD09PWMubGVuZ3RofHxnJiYhaylnP2IobnVsbCk6YSgpO2Vsc2V7az1nPzA6ZTt2YXIgcD00KmsseD1sLmNsaXBwaW5nU3RhdGV8fG51bGw7bS52YWx1ZT14O3g9YihjLHIscCx0KTtmb3IoYz0wO2MhPT1wOysrYyl4W2NdPWRbY107bC5jbGlwcGluZ1N0YXRlPXg7dGhpcy5udW1JbnRlcnNlY3Rpb249Cmg/dGhpcy5udW1QbGFuZXM6MDt0aGlzLm51bVBsYW5lcys9a319fWZ1bmN0aW9uIFhkKGEpe2Z1bmN0aW9uIGIoKXtmYS5pbml0KCk7ZmEuc2Npc3NvcihRLmNvcHkoaGEpLm11bHRpcGx5U2NhbGFyKGthKSk7ZmEudmlld3BvcnQoWi5jb3B5KHpjKS5tdWx0aXBseVNjYWxhcihrYSkpO2ZhLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoSWEucixJYS5nLElhLmIsWCxFKX1mdW5jdGlvbiBjKCl7VD1NPW51bGw7YmE9IiI7Vz0tMTtmYS5yZXNldCgpfWZ1bmN0aW9uIGQoYSl7YS5wcmV2ZW50RGVmYXVsdCgpO2MoKTtiKCk7aWEuY2xlYXIoKTt3YS5jbGVhcigpfWZ1bmN0aW9uIGUoYSl7YT1hLnRhcmdldDthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGUpO2YoYSk7aWEucmVtb3ZlKGEpfWZ1bmN0aW9uIGYoYSl7dmFyIGI9aWEuZ2V0KGEpLnByb2dyYW07YS5wcm9ncmFtPXZvaWQgMDt2b2lkIDAhPT1iJiZ5YS5yZWxlYXNlUHJvZ3JhbShiKX1mdW5jdGlvbiBnKGEsYixjKXthLnJlbmRlcihmdW5jdGlvbihhKXtDLnJlbmRlckJ1ZmZlckltbWVkaWF0ZShhLApiLGMpfSl9ZnVuY3Rpb24gaChhLGIpe3JldHVybiBNYXRoLmFicyhiWzBdKS1NYXRoLmFicyhhWzBdKX1mdW5jdGlvbiBrKGEsYixjKXtpZihhLnZpc2libGUpe2lmKGEubGF5ZXJzLnRlc3QoYi5sYXllcnMpKWlmKGEuaXNMaWdodClhYS5wdXNoKGEpO2Vsc2UgaWYoYS5pc1Nwcml0ZSlhLmZydXN0dW1DdWxsZWQmJiFtYS5pbnRlcnNlY3RzU3ByaXRlKGEpfHxELnB1c2goYSk7ZWxzZSBpZihhLmlzTGVuc0ZsYXJlKUIucHVzaChhKTtlbHNlIGlmKGEuaXNJbW1lZGlhdGVSZW5kZXJPYmplY3QpYyYmUWEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGEubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChsZCksUi5wdXNoKGEsbnVsbCxhLm1hdGVyaWFsLFFhLnosbnVsbCk7ZWxzZSBpZihhLmlzTWVzaHx8YS5pc0xpbmV8fGEuaXNQb2ludHMpaWYoYS5pc1NraW5uZWRNZXNoJiZhLnNrZWxldG9uLnVwZGF0ZSgpLCFhLmZydXN0dW1DdWxsZWR8fG1hLmludGVyc2VjdHNPYmplY3QoYSkpe2MmJlFhLnNldEZyb21NYXRyaXhQb3NpdGlvbihhLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQobGQpOwp2YXIgZD13YS51cGRhdGUoYSksZT1hLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBmPWQuZ3JvdXBzLGc9MCxoPWYubGVuZ3RoO2c8aDtnKyspe3ZhciBtPWZbZ10sbj1lW20ubWF0ZXJpYWxJbmRleF07biYmbi52aXNpYmxlJiZSLnB1c2goYSxkLG4sUWEueixtKX1lbHNlIGUudmlzaWJsZSYmUi5wdXNoKGEsZCxlLFFhLnosbnVsbCl9YT1hLmNoaWxkcmVuO2c9MDtmb3IoaD1hLmxlbmd0aDtnPGg7ZysrKWsoYVtnXSxiLGMpfX1mdW5jdGlvbiBtKGEsYixjLGQpe2Zvcih2YXIgZT0wLGY9YS5sZW5ndGg7ZTxmO2UrKyl7dmFyIGc9YVtlXSxoPWcub2JqZWN0LGs9Zy5nZW9tZXRyeSxtPXZvaWQgMD09PWQ/Zy5tYXRlcmlhbDpkLGc9Zy5ncm91cDtoLm9uQmVmb3JlUmVuZGVyKEMsYixjLGssbSxnKTtpZihjLmlzQXJyYXlDYW1lcmEmJmMuZW5hYmxlZClmb3IodmFyIG49Yy5jYW1lcmFzLHE9MCxyPW4ubGVuZ3RoO3E8cjtxKyspe3ZhciBsPW5bcV0sdD1sLmJvdW5kczsKQy5zZXRWaWV3cG9ydCh0LngqTiprYSx0LnkqZGEqa2EsdC56Kk4qa2EsdC53KmRhKmthKTtDLnNldFNjaXNzb3IodC54Kk4qa2EsdC55KmRhKmthLHQueipOKmthLHQudypkYSprYSk7Qy5zZXRTY2lzc29yVGVzdCghMCk7dShoLGIsbCxrLG0sZyl9ZWxzZSB1KGgsYixjLGssbSxnKTtoLm9uQWZ0ZXJSZW5kZXIoQyxiLGMsayxtLGcpfX1mdW5jdGlvbiB1KGEsYixjLGQsZSxmKXthLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKGMubWF0cml4V29ybGRJbnZlcnNlLGEubWF0cml4V29ybGQpO2Eubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeChhLm1vZGVsVmlld01hdHJpeCk7YS5pc0ltbWVkaWF0ZVJlbmRlck9iamVjdD8oZmEuc2V0TWF0ZXJpYWwoZSksYj1uKGMsYi5mb2csZSxhKSxiYT0iIixnKGEsYixlKSk6Qy5yZW5kZXJCdWZmZXJEaXJlY3QoYyxiLmZvZyxkLGUsYSxmKX1mdW5jdGlvbiBxKGEsYixjKXt2YXIgZD1pYS5nZXQoYSk7Yz15YS5nZXRQYXJhbWV0ZXJzKGEsCmVhLGIsUGEubnVtUGxhbmVzLFBhLm51bUludGVyc2VjdGlvbixjKTt2YXIgZz15YS5nZXRQcm9ncmFtQ29kZShhLGMpLGg9ZC5wcm9ncmFtLGs9ITA7aWYodm9pZCAwPT09aClhLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGUpO2Vsc2UgaWYoaC5jb2RlIT09ZylmKGEpO2Vsc2V7aWYodm9pZCAwIT09Yy5zaGFkZXJJRClyZXR1cm47az0hMX1rJiYoYy5zaGFkZXJJRD8oaD1hYltjLnNoYWRlcklEXSxkLl9fd2ViZ2xTaGFkZXI9e25hbWU6YS50eXBlLHVuaWZvcm1zOkhhLmNsb25lKGgudW5pZm9ybXMpLHZlcnRleFNoYWRlcjpoLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpoLmZyYWdtZW50U2hhZGVyfSk6ZC5fX3dlYmdsU2hhZGVyPXtuYW1lOmEudHlwZSx1bmlmb3JtczphLnVuaWZvcm1zLHZlcnRleFNoYWRlcjphLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjphLmZyYWdtZW50U2hhZGVyfSxhLl9fd2ViZ2xTaGFkZXI9ZC5fX3dlYmdsU2hhZGVyLGg9eWEuYWNxdWlyZVByb2dyYW0oYSwKYyxnKSxkLnByb2dyYW09aCxhLnByb2dyYW09aCk7Yz1oLmdldEF0dHJpYnV0ZXMoKTtpZihhLm1vcnBoVGFyZ2V0cylmb3IoZz1hLm51bVN1cHBvcnRlZE1vcnBoVGFyZ2V0cz0wO2c8Qy5tYXhNb3JwaFRhcmdldHM7ZysrKTA8PWNbIm1vcnBoVGFyZ2V0IitnXSYmYS5udW1TdXBwb3J0ZWRNb3JwaFRhcmdldHMrKztpZihhLm1vcnBoTm9ybWFscylmb3IoZz1hLm51bVN1cHBvcnRlZE1vcnBoTm9ybWFscz0wO2c8Qy5tYXhNb3JwaE5vcm1hbHM7ZysrKTA8PWNbIm1vcnBoTm9ybWFsIitnXSYmYS5udW1TdXBwb3J0ZWRNb3JwaE5vcm1hbHMrKztjPWQuX193ZWJnbFNoYWRlci51bmlmb3JtcztpZighYS5pc1NoYWRlck1hdGVyaWFsJiYhYS5pc1Jhd1NoYWRlck1hdGVyaWFsfHwhMD09PWEuY2xpcHBpbmcpZC5udW1DbGlwcGluZ1BsYW5lcz1QYS5udW1QbGFuZXMsZC5udW1JbnRlcnNlY3Rpb249UGEubnVtSW50ZXJzZWN0aW9uLGMuY2xpcHBpbmdQbGFuZXM9UGEudW5pZm9ybTtkLmZvZz0KYjtkLmxpZ2h0c0hhc2g9ZWEuaGFzaDthLmxpZ2h0cyYmKGMuYW1iaWVudExpZ2h0Q29sb3IudmFsdWU9ZWEuYW1iaWVudCxjLmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPWVhLmRpcmVjdGlvbmFsLGMuc3BvdExpZ2h0cy52YWx1ZT1lYS5zcG90LGMucmVjdEFyZWFMaWdodHMudmFsdWU9ZWEucmVjdEFyZWEsYy5wb2ludExpZ2h0cy52YWx1ZT1lYS5wb2ludCxjLmhlbWlzcGhlcmVMaWdodHMudmFsdWU9ZWEuaGVtaSxjLmRpcmVjdGlvbmFsU2hhZG93TWFwLnZhbHVlPWVhLmRpcmVjdGlvbmFsU2hhZG93TWFwLGMuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWU9ZWEuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsYy5zcG90U2hhZG93TWFwLnZhbHVlPWVhLnNwb3RTaGFkb3dNYXAsYy5zcG90U2hhZG93TWF0cml4LnZhbHVlPWVhLnNwb3RTaGFkb3dNYXRyaXgsYy5wb2ludFNoYWRvd01hcC52YWx1ZT1lYS5wb2ludFNoYWRvd01hcCxjLnBvaW50U2hhZG93TWF0cml4LnZhbHVlPWVhLnBvaW50U2hhZG93TWF0cml4KTsKYT1kLnByb2dyYW0uZ2V0VW5pZm9ybXMoKTthPWZiLnNlcVdpdGhWYWx1ZShhLnNlcSxjKTtkLnVuaWZvcm1zTGlzdD1hfWZ1bmN0aW9uIG4oYSxiLGMsZCl7VT0wO3ZhciBlPWlhLmdldChjKTtrZCYmKFdkfHxhIT09VCkmJlBhLnNldFN0YXRlKGMuY2xpcHBpbmdQbGFuZXMsYy5jbGlwSW50ZXJzZWN0aW9uLGMuY2xpcFNoYWRvd3MsYSxlLGE9PT1UJiZjLmlkPT09Vyk7ITE9PT1jLm5lZWRzVXBkYXRlJiYodm9pZCAwPT09ZS5wcm9ncmFtP2MubmVlZHNVcGRhdGU9ITA6Yy5mb2cmJmUuZm9nIT09Yj9jLm5lZWRzVXBkYXRlPSEwOmMubGlnaHRzJiZlLmxpZ2h0c0hhc2ghPT1lYS5oYXNoP2MubmVlZHNVcGRhdGU9ITA6dm9pZCAwPT09ZS5udW1DbGlwcGluZ1BsYW5lc3x8ZS5udW1DbGlwcGluZ1BsYW5lcz09PVBhLm51bVBsYW5lcyYmZS5udW1JbnRlcnNlY3Rpb249PT1QYS5udW1JbnRlcnNlY3Rpb258fChjLm5lZWRzVXBkYXRlPSEwKSk7Yy5uZWVkc1VwZGF0ZSYmKHEoYyxiLGQpLApjLm5lZWRzVXBkYXRlPSExKTt2YXIgZj0hMSxnPSExLGg9ITEsaz1lLnByb2dyYW0sbT1rLmdldFVuaWZvcm1zKCksbj1lLl9fd2ViZ2xTaGFkZXIudW5pZm9ybXM7ay5pZCE9PU0mJihBLnVzZVByb2dyYW0oay5wcm9ncmFtKSxNPWsuaWQsaD1nPWY9ITApO2MuaWQhPT1XJiYoVz1jLmlkLGc9ITApO2lmKGZ8fGEhPT1UKXttLnNldFZhbHVlKEEsInByb2plY3Rpb25NYXRyaXgiLGEucHJvamVjdGlvbk1hdHJpeCk7bmEubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmbS5zZXRWYWx1ZShBLCJsb2dEZXB0aEJ1ZkZDIiwyLyhNYXRoLmxvZyhhLmZhcisxKS9NYXRoLkxOMikpO2EhPT1UJiYoVD1hLGg9Zz0hMCk7aWYoYy5pc1NoYWRlck1hdGVyaWFsfHxjLmlzTWVzaFBob25nTWF0ZXJpYWx8fGMuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8Yy5lbnZNYXApZj1tLm1hcC5jYW1lcmFQb3NpdGlvbix2b2lkIDAhPT1mJiZmLnNldFZhbHVlKEEsUWEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGEubWF0cml4V29ybGQpKTsKKGMuaXNNZXNoUGhvbmdNYXRlcmlhbHx8Yy5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fGMuaXNNZXNoQmFzaWNNYXRlcmlhbHx8Yy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxjLmlzU2hhZGVyTWF0ZXJpYWx8fGMuc2tpbm5pbmcpJiZtLnNldFZhbHVlKEEsInZpZXdNYXRyaXgiLGEubWF0cml4V29ybGRJbnZlcnNlKTttLnNldFZhbHVlKEEsInRvbmVNYXBwaW5nRXhwb3N1cmUiLEMudG9uZU1hcHBpbmdFeHBvc3VyZSk7bS5zZXRWYWx1ZShBLCJ0b25lTWFwcGluZ1doaXRlUG9pbnQiLEMudG9uZU1hcHBpbmdXaGl0ZVBvaW50KX1pZihjLnNraW5uaW5nJiYobS5zZXRPcHRpb25hbChBLGQsImJpbmRNYXRyaXgiKSxtLnNldE9wdGlvbmFsKEEsZCwiYmluZE1hdHJpeEludmVyc2UiKSxhPWQuc2tlbGV0b24pKWlmKGY9YS5ib25lcyxuYS5mbG9hdFZlcnRleFRleHR1cmVzKXtpZih2b2lkIDA9PT1hLmJvbmVUZXh0dXJlKXt2YXIgZj1NYXRoLnNxcnQoNCpmLmxlbmd0aCksZj1ZLm5leHRQb3dlck9mVHdvKE1hdGguY2VpbChmKSksCmY9TWF0aC5tYXgoZiw0KSx1PW5ldyBGbG9hdDMyQXJyYXkoZipmKjQpO3Uuc2V0KGEuYm9uZU1hdHJpY2VzKTt2YXIgdD1uZXcgZWIodSxmLGYsMTAyMywxMDE1KTthLmJvbmVNYXRyaWNlcz11O2EuYm9uZVRleHR1cmU9dDthLmJvbmVUZXh0dXJlU2l6ZT1mfW0uc2V0VmFsdWUoQSwiYm9uZVRleHR1cmUiLGEuYm9uZVRleHR1cmUpO20uc2V0VmFsdWUoQSwiYm9uZVRleHR1cmVTaXplIixhLmJvbmVUZXh0dXJlU2l6ZSl9ZWxzZSBtLnNldE9wdGlvbmFsKEEsYSwiYm9uZU1hdHJpY2VzIik7aWYoZyl7Yy5saWdodHMmJihnPWgsbi5hbWJpZW50TGlnaHRDb2xvci5uZWVkc1VwZGF0ZT1nLG4uZGlyZWN0aW9uYWxMaWdodHMubmVlZHNVcGRhdGU9ZyxuLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPWcsbi5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPWcsbi5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1nLG4uaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1nKTtiJiZjLmZvZyYmKG4uZm9nQ29sb3IudmFsdWU9CmIuY29sb3IsYi5pc0ZvZz8obi5mb2dOZWFyLnZhbHVlPWIubmVhcixuLmZvZ0Zhci52YWx1ZT1iLmZhcik6Yi5pc0ZvZ0V4cDImJihuLmZvZ0RlbnNpdHkudmFsdWU9Yi5kZW5zaXR5KSk7aWYoYy5pc01lc2hCYXNpY01hdGVyaWFsfHxjLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8Yy5pc01lc2hQaG9uZ01hdGVyaWFsfHxjLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fGMuaXNNZXNoTm9ybWFsTWF0ZXJpYWx8fGMuaXNNZXNoRGVwdGhNYXRlcmlhbCl7bi5vcGFjaXR5LnZhbHVlPWMub3BhY2l0eTtuLmRpZmZ1c2UudmFsdWU9Yy5jb2xvcjtjLmVtaXNzaXZlJiZuLmVtaXNzaXZlLnZhbHVlLmNvcHkoYy5lbWlzc2l2ZSkubXVsdGlwbHlTY2FsYXIoYy5lbWlzc2l2ZUludGVuc2l0eSk7bi5tYXAudmFsdWU9Yy5tYXA7bi5zcGVjdWxhck1hcC52YWx1ZT1jLnNwZWN1bGFyTWFwO24uYWxwaGFNYXAudmFsdWU9Yy5hbHBoYU1hcDtjLmxpZ2h0TWFwJiYobi5saWdodE1hcC52YWx1ZT1jLmxpZ2h0TWFwLApuLmxpZ2h0TWFwSW50ZW5zaXR5LnZhbHVlPWMubGlnaHRNYXBJbnRlbnNpdHkpO2MuYW9NYXAmJihuLmFvTWFwLnZhbHVlPWMuYW9NYXAsbi5hb01hcEludGVuc2l0eS52YWx1ZT1jLmFvTWFwSW50ZW5zaXR5KTt2YXIgcDtjLm1hcD9wPWMubWFwOmMuc3BlY3VsYXJNYXA/cD1jLnNwZWN1bGFyTWFwOmMuZGlzcGxhY2VtZW50TWFwP3A9Yy5kaXNwbGFjZW1lbnRNYXA6Yy5ub3JtYWxNYXA/cD1jLm5vcm1hbE1hcDpjLmJ1bXBNYXA/cD1jLmJ1bXBNYXA6Yy5yb3VnaG5lc3NNYXA/cD1jLnJvdWdobmVzc01hcDpjLm1ldGFsbmVzc01hcD9wPWMubWV0YWxuZXNzTWFwOmMuYWxwaGFNYXA/cD1jLmFscGhhTWFwOmMuZW1pc3NpdmVNYXAmJihwPWMuZW1pc3NpdmVNYXApO3ZvaWQgMCE9PXAmJihwLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihwPXAudGV4dHVyZSksYj1wLm9mZnNldCxwPXAucmVwZWF0LG4ub2Zmc2V0UmVwZWF0LnZhbHVlLnNldChiLngsYi55LHAueCxwLnkpKTtuLmVudk1hcC52YWx1ZT0KYy5lbnZNYXA7bi5mbGlwRW52TWFwLnZhbHVlPWMuZW52TWFwJiZjLmVudk1hcC5pc0N1YmVUZXh0dXJlPy0xOjE7bi5yZWZsZWN0aXZpdHkudmFsdWU9Yy5yZWZsZWN0aXZpdHk7bi5yZWZyYWN0aW9uUmF0aW8udmFsdWU9Yy5yZWZyYWN0aW9uUmF0aW99Yy5pc0xpbmVCYXNpY01hdGVyaWFsPyhuLmRpZmZ1c2UudmFsdWU9Yy5jb2xvcixuLm9wYWNpdHkudmFsdWU9Yy5vcGFjaXR5KTpjLmlzTGluZURhc2hlZE1hdGVyaWFsPyhuLmRpZmZ1c2UudmFsdWU9Yy5jb2xvcixuLm9wYWNpdHkudmFsdWU9Yy5vcGFjaXR5LG4uZGFzaFNpemUudmFsdWU9Yy5kYXNoU2l6ZSxuLnRvdGFsU2l6ZS52YWx1ZT1jLmRhc2hTaXplK2MuZ2FwU2l6ZSxuLnNjYWxlLnZhbHVlPWMuc2NhbGUpOmMuaXNQb2ludHNNYXRlcmlhbD8obi5kaWZmdXNlLnZhbHVlPWMuY29sb3Isbi5vcGFjaXR5LnZhbHVlPWMub3BhY2l0eSxuLnNpemUudmFsdWU9Yy5zaXplKmthLG4uc2NhbGUudmFsdWU9LjUqZGEsbi5tYXAudmFsdWU9CmMubWFwLG51bGwhPT1jLm1hcCYmKHA9Yy5tYXAub2Zmc2V0LGM9Yy5tYXAucmVwZWF0LG4ub2Zmc2V0UmVwZWF0LnZhbHVlLnNldChwLngscC55LGMueCxjLnkpKSk6Yy5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/Yy5lbWlzc2l2ZU1hcCYmKG4uZW1pc3NpdmVNYXAudmFsdWU9Yy5lbWlzc2l2ZU1hcCk6Yy5pc01lc2hUb29uTWF0ZXJpYWw/KHIobixjKSxjLmdyYWRpZW50TWFwJiYobi5ncmFkaWVudE1hcC52YWx1ZT1jLmdyYWRpZW50TWFwKSk6Yy5pc01lc2hQaG9uZ01hdGVyaWFsP3IobixjKTpjLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/KG4uY2xlYXJDb2F0LnZhbHVlPWMuY2xlYXJDb2F0LG4uY2xlYXJDb2F0Um91Z2huZXNzLnZhbHVlPWMuY2xlYXJDb2F0Um91Z2huZXNzLGwobixjKSk6Yy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2wobixjKTpjLmlzTWVzaERlcHRoTWF0ZXJpYWw/Yy5kaXNwbGFjZW1lbnRNYXAmJihuLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1jLmRpc3BsYWNlbWVudE1hcCwKbi5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1jLmRpc3BsYWNlbWVudFNjYWxlLG4uZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1jLmRpc3BsYWNlbWVudEJpYXMpOmMuaXNNZXNoTm9ybWFsTWF0ZXJpYWwmJihjLmJ1bXBNYXAmJihuLmJ1bXBNYXAudmFsdWU9Yy5idW1wTWFwLG4uYnVtcFNjYWxlLnZhbHVlPWMuYnVtcFNjYWxlKSxjLm5vcm1hbE1hcCYmKG4ubm9ybWFsTWFwLnZhbHVlPWMubm9ybWFsTWFwLG4ubm9ybWFsU2NhbGUudmFsdWUuY29weShjLm5vcm1hbFNjYWxlKSksYy5kaXNwbGFjZW1lbnRNYXAmJihuLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1jLmRpc3BsYWNlbWVudE1hcCxuLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWMuZGlzcGxhY2VtZW50U2NhbGUsbi5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWMuZGlzcGxhY2VtZW50QmlhcykpO3ZvaWQgMCE9PW4ubHRjTWF0JiYobi5sdGNNYXQudmFsdWU9Vi5MVENfTUFUX1RFWFRVUkUpO3ZvaWQgMCE9PW4ubHRjTWFnJiYobi5sdGNNYWcudmFsdWU9ClYuTFRDX01BR19URVhUVVJFKTtmYi51cGxvYWQoQSxlLnVuaWZvcm1zTGlzdCxuLEMpfW0uc2V0VmFsdWUoQSwibW9kZWxWaWV3TWF0cml4IixkLm1vZGVsVmlld01hdHJpeCk7bS5zZXRWYWx1ZShBLCJub3JtYWxNYXRyaXgiLGQubm9ybWFsTWF0cml4KTttLnNldFZhbHVlKEEsIm1vZGVsTWF0cml4IixkLm1hdHJpeFdvcmxkKTtyZXR1cm4ga31mdW5jdGlvbiByKGEsYil7YS5zcGVjdWxhci52YWx1ZT1iLnNwZWN1bGFyO2Euc2hpbmluZXNzLnZhbHVlPU1hdGgubWF4KGIuc2hpbmluZXNzLDFFLTQpO2IuZW1pc3NpdmVNYXAmJihhLmVtaXNzaXZlTWFwLnZhbHVlPWIuZW1pc3NpdmVNYXApO2IuYnVtcE1hcCYmKGEuYnVtcE1hcC52YWx1ZT1iLmJ1bXBNYXAsYS5idW1wU2NhbGUudmFsdWU9Yi5idW1wU2NhbGUpO2Iubm9ybWFsTWFwJiYoYS5ub3JtYWxNYXAudmFsdWU9Yi5ub3JtYWxNYXAsYS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGIubm9ybWFsU2NhbGUpKTtiLmRpc3BsYWNlbWVudE1hcCYmCihhLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1iLmRpc3BsYWNlbWVudE1hcCxhLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWIuZGlzcGxhY2VtZW50U2NhbGUsYS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWIuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gbChhLGIpe2Eucm91Z2huZXNzLnZhbHVlPWIucm91Z2huZXNzO2EubWV0YWxuZXNzLnZhbHVlPWIubWV0YWxuZXNzO2Iucm91Z2huZXNzTWFwJiYoYS5yb3VnaG5lc3NNYXAudmFsdWU9Yi5yb3VnaG5lc3NNYXApO2IubWV0YWxuZXNzTWFwJiYoYS5tZXRhbG5lc3NNYXAudmFsdWU9Yi5tZXRhbG5lc3NNYXApO2IuZW1pc3NpdmVNYXAmJihhLmVtaXNzaXZlTWFwLnZhbHVlPWIuZW1pc3NpdmVNYXApO2IuYnVtcE1hcCYmKGEuYnVtcE1hcC52YWx1ZT1iLmJ1bXBNYXAsYS5idW1wU2NhbGUudmFsdWU9Yi5idW1wU2NhbGUpO2Iubm9ybWFsTWFwJiYoYS5ub3JtYWxNYXAudmFsdWU9Yi5ub3JtYWxNYXAsYS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGIubm9ybWFsU2NhbGUpKTsKYi5kaXNwbGFjZW1lbnRNYXAmJihhLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1iLmRpc3BsYWNlbWVudE1hcCxhLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWIuZGlzcGxhY2VtZW50U2NhbGUsYS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWIuZGlzcGxhY2VtZW50Qmlhcyk7Yi5lbnZNYXAmJihhLmVudk1hcEludGVuc2l0eS52YWx1ZT1iLmVudk1hcEludGVuc2l0eSl9ZnVuY3Rpb24gdChhLGIpe3ZhciBjLGQsZSxmLGc9MCxoPTAsaz0wLG0sbix1LHE9Yi5tYXRyaXhXb3JsZEludmVyc2UsbD0wLHI9MCx0PTAsej0wLHA9MDtjPTA7Zm9yKGQ9YS5sZW5ndGg7YzxkO2MrKylpZihlPWFbY10sZj1lLmNvbG9yLG09ZS5pbnRlbnNpdHksbj1lLmRpc3RhbmNlLHU9ZS5zaGFkb3cmJmUuc2hhZG93Lm1hcD9lLnNoYWRvdy5tYXAudGV4dHVyZTpudWxsLGUuaXNBbWJpZW50TGlnaHQpZys9Zi5yKm0saCs9Zi5nKm0says9Zi5iKm07ZWxzZSBpZihlLmlzRGlyZWN0aW9uYWxMaWdodCl7dmFyIHY9CkJhLmdldChlKTt2LmNvbG9yLmNvcHkoZS5jb2xvcikubXVsdGlwbHlTY2FsYXIoZS5pbnRlbnNpdHkpO3YuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihlLm1hdHJpeFdvcmxkKTtRYS5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS50YXJnZXQubWF0cml4V29ybGQpO3YuZGlyZWN0aW9uLnN1YihRYSk7di5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHEpO2lmKHYuc2hhZG93PWUuY2FzdFNoYWRvdylmPWUuc2hhZG93LHYuc2hhZG93Qmlhcz1mLmJpYXMsdi5zaGFkb3dSYWRpdXM9Zi5yYWRpdXMsdi5zaGFkb3dNYXBTaXplPWYubWFwU2l6ZTtlYS5kaXJlY3Rpb25hbFNoYWRvd01hcFtsXT11O2VhLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4W2xdPWUuc2hhZG93Lm1hdHJpeDtlYS5kaXJlY3Rpb25hbFtsXT12O2wrK31lbHNlIGlmKGUuaXNTcG90TGlnaHQpe3Y9QmEuZ2V0KGUpO3YucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUubWF0cml4V29ybGQpO3YucG9zaXRpb24uYXBwbHlNYXRyaXg0KHEpOwp2LmNvbG9yLmNvcHkoZikubXVsdGlwbHlTY2FsYXIobSk7di5kaXN0YW5jZT1uO3YuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihlLm1hdHJpeFdvcmxkKTtRYS5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS50YXJnZXQubWF0cml4V29ybGQpO3YuZGlyZWN0aW9uLnN1YihRYSk7di5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHEpO3YuY29uZUNvcz1NYXRoLmNvcyhlLmFuZ2xlKTt2LnBlbnVtYnJhQ29zPU1hdGguY29zKGUuYW5nbGUqKDEtZS5wZW51bWJyYSkpO3YuZGVjYXk9MD09PWUuZGlzdGFuY2U/MDplLmRlY2F5O2lmKHYuc2hhZG93PWUuY2FzdFNoYWRvdylmPWUuc2hhZG93LHYuc2hhZG93Qmlhcz1mLmJpYXMsdi5zaGFkb3dSYWRpdXM9Zi5yYWRpdXMsdi5zaGFkb3dNYXBTaXplPWYubWFwU2l6ZTtlYS5zcG90U2hhZG93TWFwW3RdPXU7ZWEuc3BvdFNoYWRvd01hdHJpeFt0XT1lLnNoYWRvdy5tYXRyaXg7ZWEuc3BvdFt0XT12O3QrK31lbHNlIGlmKGUuaXNSZWN0QXJlYUxpZ2h0KXY9CkJhLmdldChlKSx2LmNvbG9yLmNvcHkoZikubXVsdGlwbHlTY2FsYXIobS8oZS53aWR0aCplLmhlaWdodCkpLHYucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUubWF0cml4V29ybGQpLHYucG9zaXRpb24uYXBwbHlNYXRyaXg0KHEpLHJhLmlkZW50aXR5KCkscWEuY29weShlLm1hdHJpeFdvcmxkKSxxYS5wcmVtdWx0aXBseShxKSxyYS5leHRyYWN0Um90YXRpb24ocWEpLHYuaGFsZldpZHRoLnNldCguNSplLndpZHRoLDAsMCksdi5oYWxmSGVpZ2h0LnNldCgwLC41KmUuaGVpZ2h0LDApLHYuaGFsZldpZHRoLmFwcGx5TWF0cml4NChyYSksdi5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChyYSksZWEucmVjdEFyZWFbel09dix6Kys7ZWxzZSBpZihlLmlzUG9pbnRMaWdodCl7dj1CYS5nZXQoZSk7di5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCk7di5wb3NpdGlvbi5hcHBseU1hdHJpeDQocSk7di5jb2xvci5jb3B5KGUuY29sb3IpLm11bHRpcGx5U2NhbGFyKGUuaW50ZW5zaXR5KTsKdi5kaXN0YW5jZT1lLmRpc3RhbmNlO3YuZGVjYXk9MD09PWUuZGlzdGFuY2U/MDplLmRlY2F5O2lmKHYuc2hhZG93PWUuY2FzdFNoYWRvdylmPWUuc2hhZG93LHYuc2hhZG93Qmlhcz1mLmJpYXMsdi5zaGFkb3dSYWRpdXM9Zi5yYWRpdXMsdi5zaGFkb3dNYXBTaXplPWYubWFwU2l6ZTtlYS5wb2ludFNoYWRvd01hcFtyXT11O2VhLnBvaW50U2hhZG93TWF0cml4W3JdPWUuc2hhZG93Lm1hdHJpeDtlYS5wb2ludFtyXT12O3IrK31lbHNlIGUuaXNIZW1pc3BoZXJlTGlnaHQmJih2PUJhLmdldChlKSx2LmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCksdi5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHEpLHYuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLHYuc2t5Q29sb3IuY29weShlLmNvbG9yKS5tdWx0aXBseVNjYWxhcihtKSx2Lmdyb3VuZENvbG9yLmNvcHkoZS5ncm91bmRDb2xvcikubXVsdGlwbHlTY2FsYXIobSksZWEuaGVtaVtwXT12LHArKyk7CmVhLmFtYmllbnRbMF09ZztlYS5hbWJpZW50WzFdPWg7ZWEuYW1iaWVudFsyXT1rO2VhLmRpcmVjdGlvbmFsLmxlbmd0aD1sO2VhLnNwb3QubGVuZ3RoPXQ7ZWEucmVjdEFyZWEubGVuZ3RoPXo7ZWEucG9pbnQubGVuZ3RoPXI7ZWEuaGVtaS5sZW5ndGg9cDtlYS5oYXNoPWwrIiwiK3IrIiwiK3QrIiwiK3orIiwiK3ArIiwiK2VhLnNoYWRvd3MubGVuZ3RofWZ1bmN0aW9uIHkoYSl7dmFyIGI7aWYoMUUzPT09YSlyZXR1cm4gQS5SRVBFQVQ7aWYoMTAwMT09PWEpcmV0dXJuIEEuQ0xBTVBfVE9fRURHRTtpZigxMDAyPT09YSlyZXR1cm4gQS5NSVJST1JFRF9SRVBFQVQ7aWYoMTAwMz09PWEpcmV0dXJuIEEuTkVBUkVTVDtpZigxMDA0PT09YSlyZXR1cm4gQS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUO2lmKDEwMDU9PT1hKXJldHVybiBBLk5FQVJFU1RfTUlQTUFQX0xJTkVBUjtpZigxMDA2PT09YSlyZXR1cm4gQS5MSU5FQVI7aWYoMTAwNz09PWEpcmV0dXJuIEEuTElORUFSX01JUE1BUF9ORUFSRVNUOwppZigxMDA4PT09YSlyZXR1cm4gQS5MSU5FQVJfTUlQTUFQX0xJTkVBUjtpZigxMDA5PT09YSlyZXR1cm4gQS5VTlNJR05FRF9CWVRFO2lmKDEwMTc9PT1hKXJldHVybiBBLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ7aWYoMTAxOD09PWEpcmV0dXJuIEEuVU5TSUdORURfU0hPUlRfNV81XzVfMTtpZigxMDE5PT09YSlyZXR1cm4gQS5VTlNJR05FRF9TSE9SVF81XzZfNTtpZigxMDEwPT09YSlyZXR1cm4gQS5CWVRFO2lmKDEwMTE9PT1hKXJldHVybiBBLlNIT1JUO2lmKDEwMTI9PT1hKXJldHVybiBBLlVOU0lHTkVEX1NIT1JUO2lmKDEwMTM9PT1hKXJldHVybiBBLklOVDtpZigxMDE0PT09YSlyZXR1cm4gQS5VTlNJR05FRF9JTlQ7aWYoMTAxNT09PWEpcmV0dXJuIEEuRkxPQVQ7aWYoMTAxNj09PWEmJihiPXBhLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLG51bGwhPT1iKSlyZXR1cm4gYi5IQUxGX0ZMT0FUX09FUztpZigxMDIxPT09YSlyZXR1cm4gQS5BTFBIQTtpZigxMDIyPT09CmEpcmV0dXJuIEEuUkdCO2lmKDEwMjM9PT1hKXJldHVybiBBLlJHQkE7aWYoMTAyND09PWEpcmV0dXJuIEEuTFVNSU5BTkNFO2lmKDEwMjU9PT1hKXJldHVybiBBLkxVTUlOQU5DRV9BTFBIQTtpZigxMDI2PT09YSlyZXR1cm4gQS5ERVBUSF9DT01QT05FTlQ7aWYoMTAyNz09PWEpcmV0dXJuIEEuREVQVEhfU1RFTkNJTDtpZigxMDA9PT1hKXJldHVybiBBLkZVTkNfQUREO2lmKDEwMT09PWEpcmV0dXJuIEEuRlVOQ19TVUJUUkFDVDtpZigxMDI9PT1hKXJldHVybiBBLkZVTkNfUkVWRVJTRV9TVUJUUkFDVDtpZigyMDA9PT1hKXJldHVybiBBLlpFUk87aWYoMjAxPT09YSlyZXR1cm4gQS5PTkU7aWYoMjAyPT09YSlyZXR1cm4gQS5TUkNfQ09MT1I7aWYoMjAzPT09YSlyZXR1cm4gQS5PTkVfTUlOVVNfU1JDX0NPTE9SO2lmKDIwND09PWEpcmV0dXJuIEEuU1JDX0FMUEhBO2lmKDIwNT09PWEpcmV0dXJuIEEuT05FX01JTlVTX1NSQ19BTFBIQTtpZigyMDY9PT1hKXJldHVybiBBLkRTVF9BTFBIQTsKaWYoMjA3PT09YSlyZXR1cm4gQS5PTkVfTUlOVVNfRFNUX0FMUEhBO2lmKDIwOD09PWEpcmV0dXJuIEEuRFNUX0NPTE9SO2lmKDIwOT09PWEpcmV0dXJuIEEuT05FX01JTlVTX0RTVF9DT0xPUjtpZigyMTA9PT1hKXJldHVybiBBLlNSQ19BTFBIQV9TQVRVUkFURTtpZigyMDAxPT09YXx8MjAwMj09PWF8fDIwMDM9PT1hfHwyMDA0PT09YSlpZihiPXBhLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKSxudWxsIT09Yil7aWYoMjAwMT09PWEpcmV0dXJuIGIuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZigyMDAyPT09YSlyZXR1cm4gYi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDtpZigyMDAzPT09YSlyZXR1cm4gYi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtpZigyMDA0PT09YSlyZXR1cm4gYi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1pZigyMTAwPT09YXx8MjEwMT09PWF8fDIxMDI9PT1hfHwyMTAzPT09YSlpZihiPXBhLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIiksCm51bGwhPT1iKXtpZigyMTAwPT09YSlyZXR1cm4gYi5DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HO2lmKDIxMDE9PT1hKXJldHVybiBiLkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc7aWYoMjEwMj09PWEpcmV0dXJuIGIuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYoMjEwMz09PWEpcmV0dXJuIGIuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUd9aWYoMjE1MT09PWEmJihiPXBhLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxudWxsIT09YikpcmV0dXJuIGIuQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDtpZigxMDM9PT1hfHwxMDQ9PT1hKWlmKGI9cGEuZ2V0KCJFWFRfYmxlbmRfbWlubWF4IiksbnVsbCE9PWIpe2lmKDEwMz09PWEpcmV0dXJuIGIuTUlOX0VYVDtpZigxMDQ9PT1hKXJldHVybiBiLk1BWF9FWFR9cmV0dXJuIDEwMjA9PT1hJiYoYj1wYS5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxudWxsIT09Yik/CmIuVU5TSUdORURfSU5UXzI0XzhfV0VCR0w6MH1jb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlciIsIjg1Iik7YT1hfHx7fTt2YXIgeD12b2lkIDAhPT1hLmNhbnZhcz9hLmNhbnZhczpkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJjYW52YXMiKSx2PXZvaWQgMCE9PWEuY29udGV4dD9hLmNvbnRleHQ6bnVsbCxHPXZvaWQgMCE9PWEuYWxwaGE/YS5hbHBoYTohMSx3PXZvaWQgMCE9PWEuZGVwdGg/YS5kZXB0aDohMCxPPXZvaWQgMCE9PWEuc3RlbmNpbD9hLnN0ZW5jaWw6ITAsUz12b2lkIDAhPT1hLmFudGlhbGlhcz9hLmFudGlhbGlhczohMSxFPXZvaWQgMCE9PWEucHJlbXVsdGlwbGllZEFscGhhP2EucHJlbXVsdGlwbGllZEFscGhhOiEwLEY9dm9pZCAwIT09YS5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI/YS5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEsYWE9W10sUj1udWxsLGNhPW5ldyBGbG9hdDMyQXJyYXkoOCksRD1bXSwKQj1bXTt0aGlzLmRvbUVsZW1lbnQ9eDt0aGlzLmNvbnRleHQ9bnVsbDt0aGlzLnNvcnRPYmplY3RzPXRoaXMuYXV0b0NsZWFyU3RlbmNpbD10aGlzLmF1dG9DbGVhckRlcHRoPXRoaXMuYXV0b0NsZWFyQ29sb3I9dGhpcy5hdXRvQ2xlYXI9ITA7dGhpcy5jbGlwcGluZ1BsYW5lcz1bXTt0aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkPSExO3RoaXMuZ2FtbWFGYWN0b3I9Mjt0aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPXRoaXMuZ2FtbWFPdXRwdXQ9dGhpcy5nYW1tYUlucHV0PSExO3RoaXMudG9uZU1hcHBpbmdXaGl0ZVBvaW50PXRoaXMudG9uZU1hcHBpbmdFeHBvc3VyZT10aGlzLnRvbmVNYXBwaW5nPTE7dGhpcy5tYXhNb3JwaFRhcmdldHM9ODt0aGlzLm1heE1vcnBoTm9ybWFscz00O3ZhciBDPXRoaXMsTT1udWxsLFA9bnVsbCxLPW51bGwsVz0tMSxiYT0iIixUPW51bGwsUT1uZXcgZ2EsTD1udWxsLFo9bmV3IGdhLFU9MCxJYT1uZXcgSCgwKSxYPTAsTj14LndpZHRoLGRhPXguaGVpZ2h0LAprYT0xLGhhPW5ldyBnYSgwLDAsTixkYSksUGU9ITEsemM9bmV3IGdhKDAsMCxOLGRhKSxtYT1uZXcgamQsUGE9bmV3IGlnLGtkPSExLFdkPSExLGxkPW5ldyBKLFFhPW5ldyBwLHFhPW5ldyBKLHJhPW5ldyBKLGVhPXtoYXNoOiIiLGFtYmllbnQ6WzAsMCwwXSxkaXJlY3Rpb25hbDpbXSxkaXJlY3Rpb25hbFNoYWRvd01hcDpbXSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDpbXSxzcG90OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxwb2ludDpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdLHNoYWRvd3M6W119LHZhPXtnZW9tZXRyaWVzOjAsdGV4dHVyZXM6MH0sb2E9e2ZyYW1lOjAsY2FsbHM6MCx2ZXJ0aWNlczowLGZhY2VzOjAscG9pbnRzOjB9O3RoaXMuaW5mbz17cmVuZGVyOm9hLG1lbW9yeTp2YSxwcm9ncmFtczpudWxsfTt2YXIgQTt0cnl7Rz17YWxwaGE6RyxkZXB0aDp3LHN0ZW5jaWw6TywKYW50aWFsaWFzOlMscHJlbXVsdGlwbGllZEFscGhhOkUscHJlc2VydmVEcmF3aW5nQnVmZmVyOkZ9O0E9dnx8eC5nZXRDb250ZXh0KCJ3ZWJnbCIsRyl8fHguZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixHKTtpZihudWxsPT09QSl7aWYobnVsbCE9PXguZ2V0Q29udGV4dCgid2ViZ2wiKSl0aHJvdyJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLiI7dGhyb3ciRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4iO312b2lkIDA9PT1BLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCYmKEEuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJue3JhbmdlTWluOjEscmFuZ2VNYXg6MSxwcmVjaXNpb246MX19KTt4LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGQsITEpfWNhdGNoKGpnKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK2pnKX12YXIgcGE9bmV3IGhnKEEpOwpwYS5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKTtwYS5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iik7cGEuZ2V0KCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKTtwYS5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTtwYS5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik7cGEuZ2V0KCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTtwYS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKTtwYS5nZXQoIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKSYmKEkuTWF4SW5kZXg9NDI5NDk2NzI5Nik7dmFyIG5hPW5ldyBnZyhBLHBhLGEpLGZhPW5ldyBmZyhBLHBhLHkpLGlhPW5ldyBlZyxzYT1uZXcgZGcoQSxwYSxmYSxpYSxuYSx5LHZhKSxBYT1uZXcgTWYoQSksRGE9bmV3IFRmKEEsQWEsdmEpLHdhPW5ldyBWZihBLERhLG9hKSx5YT1uZXcgY2codGhpcyxuYSksQmE9bmV3IFVmLEdhPW5ldyBRZjt0aGlzLmluZm8ucHJvZ3JhbXM9eWEucHJvZ3JhbXM7dmFyIEthPW5ldyBTZihBLApwYSxvYSksTGE9bmV3IFJmKEEscGEsb2EpLEZhLHphLHRhLHVhO2IoKTt0aGlzLmNvbnRleHQ9QTt0aGlzLmNhcGFiaWxpdGllcz1uYTt0aGlzLmV4dGVuc2lvbnM9cGE7dGhpcy5wcm9wZXJ0aWVzPWlhO3RoaXMuc3RhdGU9ZmE7dmFyIEphPW5ldyBKZSh0aGlzLGVhLHdhLG5hKTt0aGlzLnNoYWRvd01hcD1KYTt2YXIgTWE9bmV3IEpmKHRoaXMsRCksT2E9bmV3IElmKHRoaXMsQik7dGhpcy5nZXRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIEF9O3RoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gQS5nZXRDb250ZXh0QXR0cmlidXRlcygpfTt0aGlzLmZvcmNlQ29udGV4dExvc3M9ZnVuY3Rpb24oKXt2YXIgYT1wYS5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO2EmJmEubG9zZUNvbnRleHQoKX07dGhpcy5nZXRNYXhBbmlzb3Ryb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG5hLmdldE1heEFuaXNvdHJvcHkoKX07dGhpcy5nZXRQcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gbmEucHJlY2lzaW9ufTsKdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIGthfTt0aGlzLnNldFBpeGVsUmF0aW89ZnVuY3Rpb24oYSl7dm9pZCAwIT09YSYmKGthPWEsdGhpcy5zZXRTaXplKHpjLnosemMudywhMSkpfTt0aGlzLmdldFNpemU9ZnVuY3Rpb24oKXtyZXR1cm57d2lkdGg6TixoZWlnaHQ6ZGF9fTt0aGlzLnNldFNpemU9ZnVuY3Rpb24oYSxiLGMpe049YTtkYT1iO3gud2lkdGg9YSprYTt4LmhlaWdodD1iKmthOyExIT09YyYmKHguc3R5bGUud2lkdGg9YSsicHgiLHguc3R5bGUuaGVpZ2h0PWIrInB4Iik7dGhpcy5zZXRWaWV3cG9ydCgwLDAsYSxiKX07dGhpcy5zZXRWaWV3cG9ydD1mdW5jdGlvbihhLGIsYyxkKXtmYS52aWV3cG9ydCh6Yy5zZXQoYSxiLGMsZCkpfTt0aGlzLnNldFNjaXNzb3I9ZnVuY3Rpb24oYSxiLGMsZCl7ZmEuc2Npc3NvcihoYS5zZXQoYSxiLGMsZCkpfTt0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKGEpe2ZhLnNldFNjaXNzb3JUZXN0KFBlPWEpfTt0aGlzLmdldENsZWFyQ29sb3I9CmZ1bmN0aW9uKCl7cmV0dXJuIElhfTt0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oYSxiKXtJYS5zZXQoYSk7WD12b2lkIDAhPT1iP2I6MTtmYS5idWZmZXJzLmNvbG9yLnNldENsZWFyKElhLnIsSWEuZyxJYS5iLFgsRSl9O3RoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBYfTt0aGlzLnNldENsZWFyQWxwaGE9ZnVuY3Rpb24oYSl7WD1hO2ZhLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoSWEucixJYS5nLElhLmIsWCxFKX07dGhpcy5jbGVhcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9MDtpZih2b2lkIDA9PT1hfHxhKWR8PUEuQ09MT1JfQlVGRkVSX0JJVDtpZih2b2lkIDA9PT1ifHxiKWR8PUEuREVQVEhfQlVGRkVSX0JJVDtpZih2b2lkIDA9PT1jfHxjKWR8PUEuU1RFTkNJTF9CVUZGRVJfQklUO0EuY2xlYXIoZCl9O3RoaXMuY2xlYXJDb2xvcj1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITAsITEsITEpfTt0aGlzLmNsZWFyRGVwdGg9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLAohMCwhMSl9O3RoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMSwhMCl9O3RoaXMuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24oYSxiLGMsZCl7dGhpcy5zZXRSZW5kZXJUYXJnZXQoYSk7dGhpcy5jbGVhcihiLGMsZCl9O3RoaXMucmVzZXRHTFN0YXRlPWM7dGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7eC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixkLCExKTtHYS5kaXNwb3NlKCl9O3RoaXMucmVuZGVyQnVmZmVySW1tZWRpYXRlPWZ1bmN0aW9uKGEsYixjKXtmYS5pbml0QXR0cmlidXRlcygpO3ZhciBkPWlhLmdldChhKTthLmhhc1Bvc2l0aW9ucyYmIWQucG9zaXRpb24mJihkLnBvc2l0aW9uPUEuY3JlYXRlQnVmZmVyKCkpO2EuaGFzTm9ybWFscyYmIWQubm9ybWFsJiYoZC5ub3JtYWw9QS5jcmVhdGVCdWZmZXIoKSk7YS5oYXNVdnMmJiFkLnV2JiYoZC51dj1BLmNyZWF0ZUJ1ZmZlcigpKTthLmhhc0NvbG9ycyYmIWQuY29sb3ImJihkLmNvbG9yPQpBLmNyZWF0ZUJ1ZmZlcigpKTtiPWIuZ2V0QXR0cmlidXRlcygpO2EuaGFzUG9zaXRpb25zJiYoQS5iaW5kQnVmZmVyKEEuQVJSQVlfQlVGRkVSLGQucG9zaXRpb24pLEEuYnVmZmVyRGF0YShBLkFSUkFZX0JVRkZFUixhLnBvc2l0aW9uQXJyYXksQS5EWU5BTUlDX0RSQVcpLGZhLmVuYWJsZUF0dHJpYnV0ZShiLnBvc2l0aW9uKSxBLnZlcnRleEF0dHJpYlBvaW50ZXIoYi5wb3NpdGlvbiwzLEEuRkxPQVQsITEsMCwwKSk7aWYoYS5oYXNOb3JtYWxzKXtBLmJpbmRCdWZmZXIoQS5BUlJBWV9CVUZGRVIsZC5ub3JtYWwpO2lmKCFjLmlzTWVzaFBob25nTWF0ZXJpYWwmJiFjLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwmJiFjLmlzTWVzaE5vcm1hbE1hdGVyaWFsJiYxPT09Yy5zaGFkaW5nKWZvcih2YXIgZT0wLGY9MyphLmNvdW50O2U8ZjtlKz05KXt2YXIgZz1hLm5vcm1hbEFycmF5LGg9KGdbZSswXStnW2UrM10rZ1tlKzZdKS8zLGs9KGdbZSsxXStnW2UrNF0rZ1tlKzddKS8zLG09KGdbZSsKMl0rZ1tlKzVdK2dbZSs4XSkvMztnW2UrMF09aDtnW2UrMV09aztnW2UrMl09bTtnW2UrM109aDtnW2UrNF09aztnW2UrNV09bTtnW2UrNl09aDtnW2UrN109aztnW2UrOF09bX1BLmJ1ZmZlckRhdGEoQS5BUlJBWV9CVUZGRVIsYS5ub3JtYWxBcnJheSxBLkRZTkFNSUNfRFJBVyk7ZmEuZW5hYmxlQXR0cmlidXRlKGIubm9ybWFsKTtBLnZlcnRleEF0dHJpYlBvaW50ZXIoYi5ub3JtYWwsMyxBLkZMT0FULCExLDAsMCl9YS5oYXNVdnMmJmMubWFwJiYoQS5iaW5kQnVmZmVyKEEuQVJSQVlfQlVGRkVSLGQudXYpLEEuYnVmZmVyRGF0YShBLkFSUkFZX0JVRkZFUixhLnV2QXJyYXksQS5EWU5BTUlDX0RSQVcpLGZhLmVuYWJsZUF0dHJpYnV0ZShiLnV2KSxBLnZlcnRleEF0dHJpYlBvaW50ZXIoQWEudXYsMixBLkZMT0FULCExLDAsMCkpO2EuaGFzQ29sb3JzJiYwIT09Yy52ZXJ0ZXhDb2xvcnMmJihBLmJpbmRCdWZmZXIoQS5BUlJBWV9CVUZGRVIsZC5jb2xvciksQS5idWZmZXJEYXRhKEEuQVJSQVlfQlVGRkVSLAphLmNvbG9yQXJyYXksQS5EWU5BTUlDX0RSQVcpLGZhLmVuYWJsZUF0dHJpYnV0ZShiLmNvbG9yKSxBLnZlcnRleEF0dHJpYlBvaW50ZXIoYi5jb2xvciwzLEEuRkxPQVQsITEsMCwwKSk7ZmEuZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXMoKTtBLmRyYXdBcnJheXMoQS5UUklBTkdMRVMsMCxhLmNvdW50KTthLmNvdW50PTB9O3RoaXMucmVuZGVyQnVmZmVyRGlyZWN0PWZ1bmN0aW9uKGEsYixjLGQsZSxmKXtmYS5zZXRNYXRlcmlhbChkKTt2YXIgZz1uKGEsYixkLGUpO2E9Yy5pZCsiXyIrZy5pZCsiXyIrKCEwPT09ZC53aXJlZnJhbWUpO3ZhciBrPSExO2EhPT1iYSYmKGJhPWEsaz0hMCk7Yj1lLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih2b2lkIDAhPT1iKXt2YXIgbT1bXTthPTA7Zm9yKHZhciB1PWIubGVuZ3RoO2E8dTthKyspaz1iW2FdLG0ucHVzaChbayxhXSk7bS5zb3J0KGgpOzg8bS5sZW5ndGgmJihtLmxlbmd0aD04KTt2YXIgcT1jLm1vcnBoQXR0cmlidXRlczthPTA7Zm9yKHU9Cm0ubGVuZ3RoO2E8dTthKyspaz1tW2FdLGNhW2FdPWtbMF0sMCE9PWtbMF0/KGI9a1sxXSwhMD09PWQubW9ycGhUYXJnZXRzJiZxLnBvc2l0aW9uJiZjLmFkZEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK2EscS5wb3NpdGlvbltiXSksITA9PT1kLm1vcnBoTm9ybWFscyYmcS5ub3JtYWwmJmMuYWRkQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrYSxxLm5vcm1hbFtiXSkpOighMD09PWQubW9ycGhUYXJnZXRzJiZjLnJlbW92ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK2EpLCEwPT09ZC5tb3JwaE5vcm1hbHMmJmMucmVtb3ZlQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrYSkpO2E9bS5sZW5ndGg7Zm9yKGI9Y2EubGVuZ3RoO2E8YjthKyspY2FbYV09MDtnLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUoQSwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixjYSk7az0hMH1iPWMuaW5kZXg7dT1jLmF0dHJpYnV0ZXMucG9zaXRpb247bT0xOyEwPT09ZC53aXJlZnJhbWUmJihiPURhLmdldFdpcmVmcmFtZUF0dHJpYnV0ZShjKSwKbT0yKTthPUthO251bGwhPT1iJiYoYT1MYSxhLnNldEluZGV4KGIpKTtpZihrKXtrPXZvaWQgMDtpZihjJiZjLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkmJm51bGw9PT1wYS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSljb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnNldHVwVmVydGV4QXR0cmlidXRlczogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7ZWxzZXt2b2lkIDA9PT1rJiYoaz0wKTtmYS5pbml0QXR0cmlidXRlcygpO3ZhciBxPWMuYXR0cmlidXRlcyxnPWcuZ2V0QXR0cmlidXRlcygpLGw9ZC5kZWZhdWx0QXR0cmlidXRlVmFsdWVzLHI7Zm9yKHIgaW4gZyl7dmFyIHQ9Z1tyXTtpZigwPD10KXt2YXIgdj1xW3JdO2lmKHZvaWQgMCE9PXYpe3ZhciB6PXYubm9ybWFsaXplZCxwPXYuaXRlbVNpemUsdz1BYS5nZXQodiksCng9dy5idWZmZXIseT13LnR5cGUsdz13LmJ5dGVzUGVyRWxlbWVudDtpZih2LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe3ZhciBHPXYuZGF0YSxPPUcuc3RyaWRlLHY9di5vZmZzZXQ7RyYmRy5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPyhmYS5lbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yKHQsRy5tZXNoUGVyQXR0cmlidXRlKSx2b2lkIDA9PT1jLm1heEluc3RhbmNlZENvdW50JiYoYy5tYXhJbnN0YW5jZWRDb3VudD1HLm1lc2hQZXJBdHRyaWJ1dGUqRy5jb3VudCkpOmZhLmVuYWJsZUF0dHJpYnV0ZSh0KTtBLmJpbmRCdWZmZXIoQS5BUlJBWV9CVUZGRVIseCk7QS52ZXJ0ZXhBdHRyaWJQb2ludGVyKHQscCx5LHosTyp3LChrKk8rdikqdyl9ZWxzZSB2LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPyhmYS5lbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yKHQsdi5tZXNoUGVyQXR0cmlidXRlKSx2b2lkIDA9PT1jLm1heEluc3RhbmNlZENvdW50JiYoYy5tYXhJbnN0YW5jZWRDb3VudD0Kdi5tZXNoUGVyQXR0cmlidXRlKnYuY291bnQpKTpmYS5lbmFibGVBdHRyaWJ1dGUodCksQS5iaW5kQnVmZmVyKEEuQVJSQVlfQlVGRkVSLHgpLEEudmVydGV4QXR0cmliUG9pbnRlcih0LHAseSx6LDAsaypwKncpfWVsc2UgaWYodm9pZCAwIT09bCYmKHo9bFtyXSx2b2lkIDAhPT16KSlzd2l0Y2goei5sZW5ndGgpe2Nhc2UgMjpBLnZlcnRleEF0dHJpYjJmdih0LHopO2JyZWFrO2Nhc2UgMzpBLnZlcnRleEF0dHJpYjNmdih0LHopO2JyZWFrO2Nhc2UgNDpBLnZlcnRleEF0dHJpYjRmdih0LHopO2JyZWFrO2RlZmF1bHQ6QS52ZXJ0ZXhBdHRyaWIxZnYodCx6KX19fWZhLmRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzKCl9bnVsbCE9PWImJkEuYmluZEJ1ZmZlcihBLkVMRU1FTlRfQVJSQVlfQlVGRkVSLEFhLmdldChiKS5idWZmZXIpfXI9MDtudWxsIT09Yj9yPWIuY291bnQ6dm9pZCAwIT09dSYmKHI9dS5jb3VudCk7dT1jLmRyYXdSYW5nZS5zdGFydCptO2s9bnVsbCE9PWY/Zi5zdGFydCptOgowO2I9TWF0aC5tYXgodSxrKTtmPU1hdGgubWF4KDAsTWF0aC5taW4ocix1K2MuZHJhd1JhbmdlLmNvdW50Km0saysobnVsbCE9PWY/Zi5jb3VudCptOkluZmluaXR5KSktMS1iKzEpO2lmKDAhPT1mKXtpZihlLmlzTWVzaClpZighMD09PWQud2lyZWZyYW1lKWZhLnNldExpbmVXaWR0aChkLndpcmVmcmFtZUxpbmV3aWR0aCoobnVsbD09PVA/a2E6MSkpLGEuc2V0TW9kZShBLkxJTkVTKTtlbHNlIHN3aXRjaChlLmRyYXdNb2RlKXtjYXNlIDA6YS5zZXRNb2RlKEEuVFJJQU5HTEVTKTticmVhaztjYXNlIDE6YS5zZXRNb2RlKEEuVFJJQU5HTEVfU1RSSVApO2JyZWFrO2Nhc2UgMjphLnNldE1vZGUoQS5UUklBTkdMRV9GQU4pfWVsc2UgZS5pc0xpbmU/KGQ9ZC5saW5ld2lkdGgsdm9pZCAwPT09ZCYmKGQ9MSksZmEuc2V0TGluZVdpZHRoKGQqKG51bGw9PT1QP2thOjEpKSxlLmlzTGluZVNlZ21lbnRzP2Euc2V0TW9kZShBLkxJTkVTKTplLmlzTGluZUxvb3A/YS5zZXRNb2RlKEEuTElORV9MT09QKToKYS5zZXRNb2RlKEEuTElORV9TVFJJUCkpOmUuaXNQb2ludHMmJmEuc2V0TW9kZShBLlBPSU5UUyk7YyYmYy5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PzA8Yy5tYXhJbnN0YW5jZWRDb3VudCYmYS5yZW5kZXJJbnN0YW5jZXMoYyxiLGYpOmEucmVuZGVyKGIsZil9fTt0aGlzLmNvbXBpbGU9ZnVuY3Rpb24oYSxiKXthYT1bXTthLnRyYXZlcnNlKGZ1bmN0aW9uKGEpe2EuaXNMaWdodCYmYWEucHVzaChhKX0pO3QoYWEsYik7YS50cmF2ZXJzZShmdW5jdGlvbihiKXtpZihiLm1hdGVyaWFsKWlmKEFycmF5LmlzQXJyYXkoYi5tYXRlcmlhbCkpZm9yKHZhciBjPTA7YzxiLm1hdGVyaWFsLmxlbmd0aDtjKyspcShiLm1hdGVyaWFsW2NdLGEuZm9nLGIpO2Vsc2UgcShiLm1hdGVyaWFsLGEuZm9nLGIpfSl9O3RoaXMucmVuZGVyPWZ1bmN0aW9uKGEsYixjLGQpe2lmKHZvaWQgMCE9PWImJiEwIT09Yi5pc0NhbWVyYSljb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIik7CmVsc2V7YmE9IiI7Vz0tMTtUPW51bGw7ITA9PT1hLmF1dG9VcGRhdGUmJmEudXBkYXRlTWF0cml4V29ybGQoKTtiLm9uQmVmb3JlUmVuZGVyKEMpO251bGw9PT1iLnBhcmVudCYmYi51cGRhdGVNYXRyaXhXb3JsZCgpO2IubWF0cml4V29ybGRJbnZlcnNlLmdldEludmVyc2UoYi5tYXRyaXhXb3JsZCk7bGQubXVsdGlwbHlNYXRyaWNlcyhiLnByb2plY3Rpb25NYXRyaXgsYi5tYXRyaXhXb3JsZEludmVyc2UpO21hLnNldEZyb21NYXRyaXgobGQpO2FhLmxlbmd0aD0wO0QubGVuZ3RoPTA7Qi5sZW5ndGg9MDtXZD10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkO2tkPVBhLmluaXQodGhpcy5jbGlwcGluZ1BsYW5lcyxXZCxiKTtSPUdhLmdldChhLGIpO1IuaW5pdCgpO2soYSxiLEMuc29ydE9iamVjdHMpO1IuZmluaXNoKCk7ITA9PT1DLnNvcnRPYmplY3RzJiZSLnNvcnQoKTtrZCYmUGEuYmVnaW5TaGFkb3dzKCk7Zm9yKHZhciBlPWFhLGY9MCxnPTAsaD1lLmxlbmd0aDtnPGg7ZysrKXt2YXIgbj0KZVtnXTtuLmNhc3RTaGFkb3cmJihlYS5zaGFkb3dzW2ZdPW4sZisrKX1lYS5zaGFkb3dzLmxlbmd0aD1mO0phLnJlbmRlcihhLGIpO3QoYWEsYik7a2QmJlBhLmVuZFNoYWRvd3MoKTtvYS5mcmFtZSsrO29hLmNhbGxzPTA7b2EudmVydGljZXM9MDtvYS5mYWNlcz0wO29hLnBvaW50cz0wO3ZvaWQgMD09PWMmJihjPW51bGwpO3RoaXMuc2V0UmVuZGVyVGFyZ2V0KGMpO2U9YS5iYWNrZ3JvdW5kO251bGw9PT1lP2ZhLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoSWEucixJYS5nLElhLmIsWCxFKTplJiZlLmlzQ29sb3ImJihmYS5idWZmZXJzLmNvbG9yLnNldENsZWFyKGUucixlLmcsZS5iLDEsRSksZD0hMCk7KHRoaXMuYXV0b0NsZWFyfHxkKSYmdGhpcy5jbGVhcih0aGlzLmF1dG9DbGVhckNvbG9yLHRoaXMuYXV0b0NsZWFyRGVwdGgsdGhpcy5hdXRvQ2xlYXJTdGVuY2lsKTtlJiZlLmlzQ3ViZVRleHR1cmU/KHZvaWQgMD09PXRhJiYodGE9bmV3IHhhLHVhPW5ldyBDYShuZXcga2IoNSw1LAo1KSxuZXcgRWEoe3VuaWZvcm1zOmFiLmN1YmUudW5pZm9ybXMsdmVydGV4U2hhZGVyOmFiLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmFiLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZToxLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSksdGEucHJvamVjdGlvbk1hdHJpeC5jb3B5KGIucHJvamVjdGlvbk1hdHJpeCksdGEubWF0cml4V29ybGQuZXh0cmFjdFJvdGF0aW9uKGIubWF0cml4V29ybGQpLHRhLm1hdHJpeFdvcmxkSW52ZXJzZS5nZXRJbnZlcnNlKHRhLm1hdHJpeFdvcmxkKSx1YS5tYXRlcmlhbC51bmlmb3Jtcy50Q3ViZS52YWx1ZT1lLHVhLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHRhLm1hdHJpeFdvcmxkSW52ZXJzZSx1YS5tYXRyaXhXb3JsZCksd2EudXBkYXRlKHVhKSxDLnJlbmRlckJ1ZmZlckRpcmVjdCh0YSxudWxsLHVhLmdlb21ldHJ5LHVhLm1hdGVyaWFsLHVhLG51bGwpKTplJiZlLmlzVGV4dHVyZSYmKHZvaWQgMD09PQpGYSYmKEZhPW5ldyBKYigtMSwxLDEsLTEsMCwxKSx6YT1uZXcgQ2EobmV3IGxiKDIsMiksbmV3IE5hKHtkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSkpLHphLm1hdGVyaWFsLm1hcD1lLHdhLnVwZGF0ZSh6YSksQy5yZW5kZXJCdWZmZXJEaXJlY3QoRmEsbnVsbCx6YS5nZW9tZXRyeSx6YS5tYXRlcmlhbCx6YSxudWxsKSk7ZD1SLm9wYXF1ZTtlPVIudHJhbnNwYXJlbnQ7YS5vdmVycmlkZU1hdGVyaWFsPyhmPWEub3ZlcnJpZGVNYXRlcmlhbCxkLmxlbmd0aCYmbShkLGEsYixmKSxlLmxlbmd0aCYmbShlLGEsYixmKSk6KGQubGVuZ3RoJiZtKGQsYSxiKSxlLmxlbmd0aCYmbShlLGEsYikpO01hLnJlbmRlcihhLGIpO09hLnJlbmRlcihhLGIsWik7YyYmc2EudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKGMpO2ZhLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCk7ZmEuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKTtmYS5idWZmZXJzLmNvbG9yLnNldE1hc2soITApO2IuaXNBcnJheUNhbWVyYSYmCmIuZW5hYmxlZCYmQy5zZXRTY2lzc29yVGVzdCghMSk7Yi5vbkFmdGVyUmVuZGVyKEMpfX07dGhpcy5zZXRGYWNlQ3VsbGluZz1mdW5jdGlvbihhLGIpe2ZhLnNldEN1bGxGYWNlKGEpO2ZhLnNldEZsaXBTaWRlZCgwPT09Yil9O3RoaXMuYWxsb2NUZXh0dXJlVW5pdD1mdW5jdGlvbigpe3ZhciBhPVU7YT49bmEubWF4VGV4dHVyZXMmJmNvbnNvbGUud2FybigiV2ViR0xSZW5kZXJlcjogdHJ5aW5nIHRvIHVzZSAiK2ErIiB0ZXh0dXJlIHVuaXRzIHdoaWxlIHRoaXMgR1BVIHN1cHBvcnRzIG9ubHkgIituYS5tYXhUZXh0dXJlcyk7VSs9MTtyZXR1cm4gYX07dGhpcy5zZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oKXt2YXIgYT0hMTtyZXR1cm4gZnVuY3Rpb24oYixjKXtiJiZiLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihhfHwoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnNldFRleHR1cmUyRDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSwKYT0hMCksYj1iLnRleHR1cmUpO3NhLnNldFRleHR1cmUyRChiLGMpfX0oKTt0aGlzLnNldFRleHR1cmU9ZnVuY3Rpb24oKXt2YXIgYT0hMTtyZXR1cm4gZnVuY3Rpb24oYixjKXthfHwoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSBpcyBkZXByZWNhdGVkLCB1c2Ugc2V0VGV4dHVyZTJEIGluc3RlYWQuIiksYT0hMCk7c2Euc2V0VGV4dHVyZTJEKGIsYyl9fSgpO3RoaXMuc2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXt2YXIgYT0hMTtyZXR1cm4gZnVuY3Rpb24oYixjKXtiJiZiLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlJiYoYXx8KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5zZXRUZXh0dXJlQ3ViZTogZG9uJ3QgdXNlIGN1YmUgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLGE9ITApLGI9Yi50ZXh0dXJlKTtiJiZiLmlzQ3ViZVRleHR1cmV8fEFycmF5LmlzQXJyYXkoYi5pbWFnZSkmJgo2PT09Yi5pbWFnZS5sZW5ndGg/c2Euc2V0VGV4dHVyZUN1YmUoYixjKTpzYS5zZXRUZXh0dXJlQ3ViZUR5bmFtaWMoYixjKX19KCk7dGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gUH07dGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oYSl7KFA9YSkmJnZvaWQgMD09PWlhLmdldChhKS5fX3dlYmdsRnJhbWVidWZmZXImJnNhLnNldHVwUmVuZGVyVGFyZ2V0KGEpO3ZhciBiPWEmJmEuaXNXZWJHTFJlbmRlclRhcmdldEN1YmUsYzthPyhjPWlhLmdldChhKSxjPWI/Yy5fX3dlYmdsRnJhbWVidWZmZXJbYS5hY3RpdmVDdWJlRmFjZV06Yy5fX3dlYmdsRnJhbWVidWZmZXIsUS5jb3B5KGEuc2Npc3NvciksTD1hLnNjaXNzb3JUZXN0LFouY29weShhLnZpZXdwb3J0KSk6KGM9bnVsbCxRLmNvcHkoaGEpLm11bHRpcGx5U2NhbGFyKGthKSxMPVBlLFouY29weSh6YykubXVsdGlwbHlTY2FsYXIoa2EpKTtLIT09YyYmKEEuYmluZEZyYW1lYnVmZmVyKEEuRlJBTUVCVUZGRVIsCmMpLEs9Yyk7ZmEuc2Npc3NvcihRKTtmYS5zZXRTY2lzc29yVGVzdChMKTtmYS52aWV3cG9ydChaKTtiJiYoYj1pYS5nZXQoYS50ZXh0dXJlKSxBLmZyYW1lYnVmZmVyVGV4dHVyZTJEKEEuRlJBTUVCVUZGRVIsQS5DT0xPUl9BVFRBQ0hNRU5UMCxBLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCthLmFjdGl2ZUN1YmVGYWNlLGIuX193ZWJnbFRleHR1cmUsYS5hY3RpdmVNaXBNYXBMZXZlbCkpfTt0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2lmKCExPT09KGEmJmEuaXNXZWJHTFJlbmRlclRhcmdldCkpY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO2Vsc2V7dmFyIGc9aWEuZ2V0KGEpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihnKXt2YXIgaD0hMTtnIT09SyYmKEEuYmluZEZyYW1lYnVmZmVyKEEuRlJBTUVCVUZGRVIsCmcpLGg9ITApO3RyeXt2YXIgaz1hLnRleHR1cmUsbT1rLmZvcm1hdCxuPWsudHlwZTsxMDIzIT09bSYmeShtKSE9PUEuZ2V0UGFyYW1ldGVyKEEuSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQpP2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZm9ybWF0LiIpOjEwMDk9PT1ufHx5KG4pPT09QS5nZXRQYXJhbWV0ZXIoQS5JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEUpfHwxMDE1PT09biYmKHBhLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKXx8cGEuZ2V0KCJXRUJHTF9jb2xvcl9idWZmZXJfZmxvYXQiKSl8fDEwMTY9PT1uJiZwYS5nZXQoIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpP0EuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhBLkZSQU1FQlVGRkVSKT09PUEuRlJBTUVCVUZGRVJfQ09NUExFVEU/MDw9YiYmCmI8PWEud2lkdGgtZCYmMDw9YyYmYzw9YS5oZWlnaHQtZSYmQS5yZWFkUGl4ZWxzKGIsYyxkLGUseShtKSx5KG4pLGYpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVhZFBpeGVscyBmcm9tIHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZS4iKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gVW5zaWduZWRCeXRlVHlwZSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHR5cGUuIil9ZmluYWxseXtoJiZBLmJpbmRGcmFtZWJ1ZmZlcihBLkZSQU1FQlVGRkVSLEspfX19fX1mdW5jdGlvbiBLYihhLGIpe3RoaXMubmFtZT0iIjt0aGlzLmNvbG9yPW5ldyBIKGEpO3RoaXMuZGVuc2l0eT12b2lkIDAhPT1iP2I6Mi41RS00fWZ1bmN0aW9uIExiKGEsYixjKXt0aGlzLm5hbWU9IiI7dGhpcy5jb2xvcj0KbmV3IEgoYSk7dGhpcy5uZWFyPXZvaWQgMCE9PWI/YjoxO3RoaXMuZmFyPXZvaWQgMCE9PWM/YzoxRTN9ZnVuY3Rpb24gbWQoKXtCLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTY2VuZSI7dGhpcy5vdmVycmlkZU1hdGVyaWFsPXRoaXMuZm9nPXRoaXMuYmFja2dyb3VuZD1udWxsO3RoaXMuYXV0b1VwZGF0ZT0hMH1mdW5jdGlvbiBZZChhLGIsYyxkLGUpe0IuY2FsbCh0aGlzKTt0aGlzLmxlbnNGbGFyZXM9W107dGhpcy5wb3NpdGlvblNjcmVlbj1uZXcgcDt0aGlzLmN1c3RvbVVwZGF0ZUNhbGxiYWNrPXZvaWQgMDt2b2lkIDAhPT1hJiZ0aGlzLmFkZChhLGIsYyxkLGUpfWZ1bmN0aW9uIGNiKGEpe1ouY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBIKDE2Nzc3MjE1KTt0aGlzLm1hcD1udWxsO3RoaXMucm90YXRpb249MDt0aGlzLmxpZ2h0cz10aGlzLmZvZz0hMTt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiBBYyhhKXtCLmNhbGwodGhpcyk7CnRoaXMudHlwZT0iU3ByaXRlIjt0aGlzLm1hdGVyaWFsPXZvaWQgMCE9PWE/YTpuZXcgY2J9ZnVuY3Rpb24gQmMoKXtCLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMT0QiO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse2xldmVsczp7ZW51bWVyYWJsZTohMCx2YWx1ZTpbXX19KX1mdW5jdGlvbiBDYyhhLGIpe2E9YXx8W107dGhpcy5ib25lcz1hLnNsaWNlKDApO3RoaXMuYm9uZU1hdHJpY2VzPW5ldyBGbG9hdDMyQXJyYXkoMTYqdGhpcy5ib25lcy5sZW5ndGgpO2lmKHZvaWQgMD09PWIpdGhpcy5jYWxjdWxhdGVJbnZlcnNlcygpO2Vsc2UgaWYodGhpcy5ib25lcy5sZW5ndGg9PT1iLmxlbmd0aCl0aGlzLmJvbmVJbnZlcnNlcz1iLnNsaWNlKDApO2Vsc2V7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbiBib25lSW52ZXJzZXMgaXMgdGhlIHdyb25nIGxlbmd0aC4iKTt0aGlzLmJvbmVJbnZlcnNlcz1bXTtmb3IodmFyIGM9MCxkPXRoaXMuYm9uZXMubGVuZ3RoO2M8ZDtjKyspdGhpcy5ib25lSW52ZXJzZXMucHVzaChuZXcgSil9fQpmdW5jdGlvbiBuZCgpe0IuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkJvbmUifWZ1bmN0aW9uIG9kKGEsYil7Q2EuY2FsbCh0aGlzLGEsYik7dGhpcy50eXBlPSJTa2lubmVkTWVzaCI7dGhpcy5iaW5kTW9kZT0iYXR0YWNoZWQiO3RoaXMuYmluZE1hdHJpeD1uZXcgSjt0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyBKO3ZhciBjPXRoaXMuaW5pdEJvbmVzKCksYz1uZXcgQ2MoYyk7dGhpcy5iaW5kKGMsdGhpcy5tYXRyaXhXb3JsZCk7dGhpcy5ub3JtYWxpemVTa2luV2VpZ2h0cygpfWZ1bmN0aW9uIGhhKGEpe1ouY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBIKDE2Nzc3MjE1KTt0aGlzLmxpbmV3aWR0aD0xO3RoaXMubGluZWpvaW49dGhpcy5saW5lY2FwPSJyb3VuZCI7dGhpcy5saWdodHM9ITE7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24geWEoYSxiLGMpe2lmKDE9PT1jKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmU6IHBhcmFtZXRlciBUSFJFRS5MaW5lUGllY2VzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIENyZWF0ZWQgVEhSRUUuTGluZVNlZ21lbnRzIGluc3RlYWQuIiksCm5ldyBkYShhLGIpO0IuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkxpbmUiO3RoaXMuZ2VvbWV0cnk9dm9pZCAwIT09YT9hOm5ldyBJO3RoaXMubWF0ZXJpYWw9dm9pZCAwIT09Yj9iOm5ldyBoYSh7Y29sb3I6MTY3NzcyMTUqTWF0aC5yYW5kb20oKX0pfWZ1bmN0aW9uIGRhKGEsYil7eWEuY2FsbCh0aGlzLGEsYik7dGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWZ1bmN0aW9uIHBkKGEsYil7eWEuY2FsbCh0aGlzLGEsYik7dGhpcy50eXBlPSJMaW5lTG9vcCJ9ZnVuY3Rpb24gTGEoYSl7Wi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUG9pbnRzTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMubWFwPW51bGw7dGhpcy5zaXplPTE7dGhpcy5zaXplQXR0ZW51YXRpb249ITA7dGhpcy5saWdodHM9ITE7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24gTWIoYSxiKXtCLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQb2ludHMiO3RoaXMuZ2VvbWV0cnk9dm9pZCAwIT09YT9hOm5ldyBJOwp0aGlzLm1hdGVyaWFsPXZvaWQgMCE9PWI/YjpuZXcgTGEoe2NvbG9yOjE2Nzc3MjE1Kk1hdGgucmFuZG9tKCl9KX1mdW5jdGlvbiBEYygpe0IuY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ikdyb3VwIn1mdW5jdGlvbiBxZChhLGIsYyxkLGUsZixnLGgsayl7ZnVuY3Rpb24gbSgpe3JlcXVlc3RBbmltYXRpb25GcmFtZShtKTthLnJlYWR5U3RhdGU+PWEuSEFWRV9DVVJSRU5UX0RBVEEmJih1Lm5lZWRzVXBkYXRlPSEwKX1YLmNhbGwodGhpcyxhLGIsYyxkLGUsZixnLGgsayk7dGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITE7dmFyIHU9dGhpczttKCl9ZnVuY3Rpb24gTmIoYSxiLGMsZCxlLGYsZyxoLGssbSx1LHEpe1guY2FsbCh0aGlzLG51bGwsZixnLGgsayxtLGQsZSx1LHEpO3RoaXMuaW1hZ2U9e3dpZHRoOmIsaGVpZ2h0OmN9O3RoaXMubWlwbWFwcz1hO3RoaXMuZ2VuZXJhdGVNaXBtYXBzPXRoaXMuZmxpcFk9ITF9ZnVuY3Rpb24gcmQoYSxiLGMsZCxlLGYsZyxoLGspe1guY2FsbCh0aGlzLGEsCmIsYyxkLGUsZixnLGgsayk7dGhpcy5uZWVkc1VwZGF0ZT0hMH1mdW5jdGlvbiBFYyhhLGIsYyxkLGUsZixnLGgsayxtKXttPXZvaWQgMCE9PW0/bToxMDI2O2lmKDEwMjYhPT1tJiYxMDI3IT09bSl0aHJvdyBFcnJvcigiRGVwdGhUZXh0dXJlIGZvcm1hdCBtdXN0IGJlIGVpdGhlciBUSFJFRS5EZXB0aEZvcm1hdCBvciBUSFJFRS5EZXB0aFN0ZW5jaWxGb3JtYXQiKTt2b2lkIDA9PT1jJiYxMDI2PT09bSYmKGM9MTAxMik7dm9pZCAwPT09YyYmMTAyNz09PW0mJihjPTEwMjApO1guY2FsbCh0aGlzLG51bGwsZCxlLGYsZyxoLG0sYyxrKTt0aGlzLmltYWdlPXt3aWR0aDphLGhlaWdodDpifTt0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1nP2c6MTAwMzt0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT1oP2g6MTAwMzt0aGlzLmdlbmVyYXRlTWlwbWFwcz10aGlzLmZsaXBZPSExfWZ1bmN0aW9uIE9iKGEpe0kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IldpcmVmcmFtZUdlb21ldHJ5Ijt2YXIgYj1bXSwKYyxkLGUsZixnPVswLDBdLGg9e30sayxtLHU9WyJhIiwiYiIsImMiXTtpZihhJiZhLmlzR2VvbWV0cnkpe3ZhciBxPWEuZmFjZXM7Yz0wO2ZvcihlPXEubGVuZ3RoO2M8ZTtjKyspe3ZhciBuPXFbY107Zm9yKGQ9MDszPmQ7ZCsrKWs9blt1W2RdXSxtPW5bdVsoZCsxKSUzXV0sZ1swXT1NYXRoLm1pbihrLG0pLGdbMV09TWF0aC5tYXgoayxtKSxrPWdbMF0rIiwiK2dbMV0sdm9pZCAwPT09aFtrXSYmKGhba109e2luZGV4MTpnWzBdLGluZGV4MjpnWzFdfSl9Zm9yKGsgaW4gaCljPWhba10sdT1hLnZlcnRpY2VzW2MuaW5kZXgxXSxiLnB1c2godS54LHUueSx1LnopLHU9YS52ZXJ0aWNlc1tjLmluZGV4Ml0sYi5wdXNoKHUueCx1LnksdS56KX1lbHNlIGlmKGEmJmEuaXNCdWZmZXJHZW9tZXRyeSl7dmFyIHIsdT1uZXcgcDtpZihudWxsIT09YS5pbmRleCl7cT1hLmF0dHJpYnV0ZXMucG9zaXRpb247bj1hLmluZGV4O3I9YS5ncm91cHM7MD09PXIubGVuZ3RoJiYocj1be3N0YXJ0OjAsY291bnQ6bi5jb3VudCwKbWF0ZXJpYWxJbmRleDowfV0pO2E9MDtmb3IoZj1yLmxlbmd0aDthPGY7KythKWZvcihjPXJbYV0sZD1jLnN0YXJ0LGU9Yy5jb3VudCxjPWQsZT1kK2U7YzxlO2MrPTMpZm9yKGQ9MDszPmQ7ZCsrKWs9bi5nZXRYKGMrZCksbT1uLmdldFgoYysoZCsxKSUzKSxnWzBdPU1hdGgubWluKGssbSksZ1sxXT1NYXRoLm1heChrLG0pLGs9Z1swXSsiLCIrZ1sxXSx2b2lkIDA9PT1oW2tdJiYoaFtrXT17aW5kZXgxOmdbMF0saW5kZXgyOmdbMV19KTtmb3IoayBpbiBoKWM9aFtrXSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUocSxjLmluZGV4MSksYi5wdXNoKHUueCx1LnksdS56KSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUocSxjLmluZGV4MiksYi5wdXNoKHUueCx1LnksdS56KX1lbHNlIGZvcihxPWEuYXR0cmlidXRlcy5wb3NpdGlvbixjPTAsZT1xLmNvdW50LzM7YzxlO2MrKylmb3IoZD0wOzM+ZDtkKyspaD0zKmMrZCx1LmZyb21CdWZmZXJBdHRyaWJ1dGUocSxoKSxiLnB1c2godS54LHUueSx1LnopLApoPTMqYysoZCsxKSUzLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShxLGgpLGIucHVzaCh1LngsdS55LHUueil9dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhiLDMpKX1mdW5jdGlvbiBGYyhhLGIsYyl7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUGFyYW1ldHJpY0dlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e2Z1bmM6YSxzbGljZXM6YixzdGFja3M6Y307dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFBiKGEsYixjKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gUGIoYSxiLGMpe0kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBhcmFtZXRyaWNCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtmdW5jOmEsc2xpY2VzOmIsc3RhY2tzOmN9O3ZhciBkPVtdLGU9W10sZj1bXSxnPVtdLGg9bmV3IHAsaz1uZXcgcCxtPW5ldyBwLHU9bmV3IHAscT1uZXcgcCxuLHIsbD1iKzE7Zm9yKG49MDtuPD1jO24rKyl7dmFyIHQ9bi9jO2ZvcihyPTA7cjw9YjtyKyspe3ZhciB5PQpyL2Isaz1hKHksdCxrKTtlLnB1c2goay54LGsueSxrLnopOzA8PXktMUUtNT8obT1hKHktMUUtNSx0LG0pLHUuc3ViVmVjdG9ycyhrLG0pKToobT1hKHkrMUUtNSx0LG0pLHUuc3ViVmVjdG9ycyhtLGspKTswPD10LTFFLTU/KG09YSh5LHQtMUUtNSxtKSxxLnN1YlZlY3RvcnMoayxtKSk6KG09YSh5LHQrMUUtNSxtKSxxLnN1YlZlY3RvcnMobSxrKSk7aC5jcm9zc1ZlY3RvcnModSxxKS5ub3JtYWxpemUoKTtmLnB1c2goaC54LGgueSxoLnopO2cucHVzaCh5LHQpfX1mb3Iobj0wO248YztuKyspZm9yKHI9MDtyPGI7cisrKWE9bipsK3IrMSxoPShuKzEpKmwrcisxLGs9KG4rMSkqbCtyLGQucHVzaChuKmwrcixhLGspLGQucHVzaChhLGgsayk7dGhpcy5zZXRJbmRleChkKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGUsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBDKGYsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IEMoZywyKSl9ZnVuY3Rpb24gR2MoYSwKYixjLGQpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBvbHloZWRyb25HZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt2ZXJ0aWNlczphLGluZGljZXM6YixyYWRpdXM6YyxkZXRhaWw6ZH07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IGlhKGEsYixjLGQpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBpYShhLGIsYyxkKXtmdW5jdGlvbiBlKGEpe2gucHVzaChhLngsYS55LGEueil9ZnVuY3Rpb24gZihiLGMpe3ZhciBkPTMqYjtjLng9YVtkKzBdO2MueT1hW2QrMV07Yy56PWFbZCsyXX1mdW5jdGlvbiBnKGEsYixjLGQpezA+ZCYmMT09PWEueCYmKGtbYl09YS54LTEpOzA9PT1jLngmJjA9PT1jLnomJihrW2JdPWQvMi9NYXRoLlBJKy41KX1JLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17dmVydGljZXM6YSxpbmRpY2VzOmIscmFkaXVzOmMsZGV0YWlsOmR9O2M9Y3x8MTt2YXIgaD1bXSxrPVtdOyhmdW5jdGlvbihhKXtmb3IodmFyIGM9Cm5ldyBwLGQ9bmV3IHAsZz1uZXcgcCxoPTA7aDxiLmxlbmd0aDtoKz0zKXtmKGJbaCswXSxjKTtmKGJbaCsxXSxkKTtmKGJbaCsyXSxnKTt2YXIgaz1jLGw9ZCx5PWcseD1NYXRoLnBvdygyLGEpLHY9W10sRyx3O2ZvcihHPTA7Rzw9eDtHKyspe3ZbR109W107dmFyIE89ay5jbG9uZSgpLmxlcnAoeSxHL3gpLFM9bC5jbG9uZSgpLmxlcnAoeSxHL3gpLEU9eC1HO2Zvcih3PTA7dzw9RTt3KyspdltHXVt3XT0wPT09dyYmRz09PXg/TzpPLmNsb25lKCkubGVycChTLHcvRSl9Zm9yKEc9MDtHPHg7RysrKWZvcih3PTA7dzwyKih4LUcpLTE7dysrKWs9TWF0aC5mbG9vcih3LzIpLDA9PT13JTI/KGUodltHXVtrKzFdKSxlKHZbRysxXVtrXSksZSh2W0ddW2tdKSk6KGUodltHXVtrKzFdKSxlKHZbRysxXVtrKzFdKSxlKHZbRysxXVtrXSkpfX0pKGR8fDApOyhmdW5jdGlvbihhKXtmb3IodmFyIGI9bmV3IHAsYz0wO2M8aC5sZW5ndGg7Yys9MyliLng9aFtjKzBdLGIueT1oW2MrMV0sYi56PWhbYysKMl0sYi5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcihhKSxoW2MrMF09Yi54LGhbYysxXT1iLnksaFtjKzJdPWIuen0pKGMpOyhmdW5jdGlvbigpe2Zvcih2YXIgYT1uZXcgcCxiPTA7YjxoLmxlbmd0aDtiKz0zKWEueD1oW2IrMF0sYS55PWhbYisxXSxhLno9aFtiKzJdLGsucHVzaChNYXRoLmF0YW4yKGEueiwtYS54KS8yL01hdGguUEkrLjUsMS0oTWF0aC5hdGFuMigtYS55LE1hdGguc3FydChhLngqYS54K2EueiphLnopKS9NYXRoLlBJKy41KSk7Zm9yKHZhciBhPW5ldyBwLGI9bmV3IHAsYz1uZXcgcCxkPW5ldyBwLGU9bmV3IEQsZj1uZXcgRCxsPW5ldyBELHk9MCx4PTA7eTxoLmxlbmd0aDt5Kz05LHgrPTYpe2Euc2V0KGhbeSswXSxoW3krMV0saFt5KzJdKTtiLnNldChoW3krM10saFt5KzRdLGhbeSs1XSk7Yy5zZXQoaFt5KzZdLGhbeSs3XSxoW3krOF0pO2Uuc2V0KGtbeCswXSxrW3grMV0pO2Yuc2V0KGtbeCsyXSxrW3grM10pO2wuc2V0KGtbeCs0XSxrW3grNV0pO2QuY29weShhKS5hZGQoYikuYWRkKGMpLmRpdmlkZVNjYWxhcigzKTsKdmFyIHY9TWF0aC5hdGFuMihkLnosLWQueCk7ZyhlLHgrMCxhLHYpO2coZix4KzIsYix2KTtnKGwseCs0LGMsdil9Zm9yKGE9MDthPGsubGVuZ3RoO2ErPTYpYj1rW2ErMF0sYz1rW2ErMl0sZD1rW2ErNF0sZT1NYXRoLm1pbihiLGMsZCksLjk8TWF0aC5tYXgoYixjLGQpJiYuMT5lJiYoLjI+YiYmKGtbYSswXSs9MSksLjI+YyYmKGtbYSsyXSs9MSksLjI+ZCYmKGtbYSs0XSs9MSkpfSkoKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGgsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBDKGguc2xpY2UoKSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhrLDIpKTt0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKX1mdW5jdGlvbiBIYyhhLGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlRldHJhaGVkcm9uR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsZGV0YWlsOmJ9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBRYihhLGIpKTsKdGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gUWIoYSxiKXtpYS5jYWxsKHRoaXMsWzEsMSwxLC0xLC0xLDEsLTEsMSwtMSwxLC0xLC0xXSxbMiwxLDAsMCwzLDIsMSwzLDAsMiwzLDFdLGEsYik7dGhpcy50eXBlPSJUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGRldGFpbDpifX1mdW5jdGlvbiBJYyhhLGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ik9jdGFoZWRyb25HZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSxkZXRhaWw6Yn07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IG1iKGEsYikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIG1iKGEsYil7aWEuY2FsbCh0aGlzLFsxLDAsMCwtMSwwLDAsMCwxLDAsMCwtMSwwLDAsMCwxLDAsMCwtMV0sWzAsMiw0LDAsNCwzLDAsMyw1LDAsNSwyLDEsMiw1LDEsNSwzLDEsMyw0LDEsNCwyXSxhLGIpO3RoaXMudHlwZT0iT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5IjsKdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSxkZXRhaWw6Yn19ZnVuY3Rpb24gSmMoYSxiKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJJY29zYWhlZHJvbkdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGRldGFpbDpifTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgUmIoYSxiKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gUmIoYSxiKXt2YXIgYz0oMStNYXRoLnNxcnQoNSkpLzI7aWEuY2FsbCh0aGlzLFstMSxjLDAsMSxjLDAsLTEsLWMsMCwxLC1jLDAsMCwtMSxjLDAsMSxjLDAsLTEsLWMsMCwxLC1jLGMsMCwtMSxjLDAsMSwtYywwLC0xLC1jLDAsMV0sWzAsMTEsNSwwLDUsMSwwLDEsNywwLDcsMTAsMCwxMCwxMSwxLDUsOSw1LDExLDQsMTEsMTAsMiwxMCw3LDYsNywxLDgsMyw5LDQsMyw0LDIsMywyLDYsMyw2LDgsMyw4LDksNCw5LDUsMiw0LDExLDYsMiwxMCw4LDYsNyw5LDgsMV0sYSxiKTt0aGlzLnR5cGU9Ikljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnkiOwp0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGRldGFpbDpifX1mdW5jdGlvbiBLYyhhLGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkRvZGVjYWhlZHJvbkdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGRldGFpbDpifTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgU2IoYSxiKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gU2IoYSxiKXt2YXIgYz0oMStNYXRoLnNxcnQoNSkpLzIsZD0xL2M7aWEuY2FsbCh0aGlzLFstMSwtMSwtMSwtMSwtMSwxLC0xLDEsLTEsLTEsMSwxLDEsLTEsLTEsMSwtMSwxLDEsMSwtMSwxLDEsMSwwLC1kLC1jLDAsLWQsYywwLGQsLWMsMCxkLGMsLWQsLWMsMCwtZCxjLDAsZCwtYywwLGQsYywwLC1jLDAsLWQsYywwLC1kLC1jLDAsZCxjLDAsZF0sWzMsMTEsNywzLDcsMTUsMywxNSwxMyw3LDE5LDE3LDcsMTcsNiw3LDYsMTUsMTcsNCw4LDE3LDgsMTAsMTcsMTAsNiw4LDAsMTYsOCwxNiwyLDgsMiwxMCwwLDEyLDEsMCwxLDE4LAowLDE4LDE2LDYsMTAsMiw2LDIsMTMsNiwxMywxNSwyLDE2LDE4LDIsMTgsMywyLDMsMTMsMTgsMSw5LDE4LDksMTEsMTgsMTEsMyw0LDE0LDEyLDQsMTIsMCw0LDAsOCwxMSw5LDUsMTEsNSwxOSwxMSwxOSw3LDE5LDUsMTQsMTksMTQsNCwxOSw0LDE3LDEsMTIsMTQsMSwxNCw1LDEsNSw5XSxhLGIpO3RoaXMudHlwZT0iRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsZGV0YWlsOmJ9fWZ1bmN0aW9uIExjKGEsYixjLGQsZSxmKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJUdWJlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cGF0aDphLHR1YnVsYXJTZWdtZW50czpiLHJhZGl1czpjLHJhZGlhbFNlZ21lbnRzOmQsY2xvc2VkOmV9O3ZvaWQgMCE9PWYmJmNvbnNvbGUud2FybigiVEhSRUUuVHViZUdlb21ldHJ5OiB0YXBlciBoYXMgYmVlbiByZW1vdmVkLiIpO2E9bmV3IFRiKGEsYixjLGQsZSk7dGhpcy50YW5nZW50cz1hLnRhbmdlbnRzOwp0aGlzLm5vcm1hbHM9YS5ub3JtYWxzO3RoaXMuYmlub3JtYWxzPWEuYmlub3JtYWxzO3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KGEpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFRiKGEsYixjLGQsZSl7ZnVuY3Rpb24gZihlKXt2YXIgZj1hLmdldFBvaW50QXQoZS9iKSxtPWcubm9ybWFsc1tlXTtlPWcuYmlub3JtYWxzW2VdO2ZvcihxPTA7cTw9ZDtxKyspe3ZhciB1PXEvZCpNYXRoLlBJKjIsdD1NYXRoLnNpbih1KSx1PS1NYXRoLmNvcyh1KTtrLng9dSptLngrdCplLng7ay55PXUqbS55K3QqZS55O2suej11Km0ueit0KmUuejtrLm5vcm1hbGl6ZSgpO2wucHVzaChrLngsay55LGsueik7aC54PWYueCtjKmsueDtoLnk9Zi55K2Mqay55O2guej1mLnorYyprLno7bi5wdXNoKGgueCxoLnksaC56KX19SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVHViZUJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3BhdGg6YSx0dWJ1bGFyU2VnbWVudHM6YixyYWRpdXM6YyxyYWRpYWxTZWdtZW50czpkLApjbG9zZWQ6ZX07Yj1ifHw2NDtjPWN8fDE7ZD1kfHw4O2U9ZXx8ITE7dmFyIGc9YS5jb21wdXRlRnJlbmV0RnJhbWVzKGIsZSk7dGhpcy50YW5nZW50cz1nLnRhbmdlbnRzO3RoaXMubm9ybWFscz1nLm5vcm1hbHM7dGhpcy5iaW5vcm1hbHM9Zy5iaW5vcm1hbHM7dmFyIGg9bmV3IHAsaz1uZXcgcCxtPW5ldyBELHUscSxuPVtdLGw9W10sej1bXSx0PVtdO2Zvcih1PTA7dTxiO3UrKylmKHUpO2YoITE9PT1lP2I6MCk7Zm9yKHU9MDt1PD1iO3UrKylmb3IocT0wO3E8PWQ7cSsrKW0ueD11L2IsbS55PXEvZCx6LnB1c2gobS54LG0ueSk7KGZ1bmN0aW9uKCl7Zm9yKHE9MTtxPD1iO3ErKylmb3IodT0xO3U8PWQ7dSsrKXt2YXIgYT0oZCsxKSpxKyh1LTEpLGM9KGQrMSkqcSt1LGU9KGQrMSkqKHEtMSkrdTt0LnB1c2goKGQrMSkqKHEtMSkrKHUtMSksYSxlKTt0LnB1c2goYSxjLGUpfX0pKCk7dGhpcy5zZXRJbmRleCh0KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKG4sMykpOwp0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgQyhsLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKHosMikpfWZ1bmN0aW9uIE1jKGEsYixjLGQsZSxmLGcpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlRvcnVzS25vdEdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLHR1YmU6Yix0dWJ1bGFyU2VnbWVudHM6YyxyYWRpYWxTZWdtZW50czpkLHA6ZSxxOmZ9O3ZvaWQgMCE9PWcmJmNvbnNvbGUud2FybigiVEhSRUUuVG9ydXNLbm90R2VvbWV0cnk6IGhlaWdodFNjYWxlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2NhbGUoIHgsIHksIHogKSBpbnN0ZWFkLiIpO3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBVYihhLGIsYyxkLGUsZikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFViKGEsYixjLGQsZSxmKXtmdW5jdGlvbiBnKGEsYixjLGQsZSl7dmFyIGY9TWF0aC5zaW4oYSk7Yj1jL2IqYTtjPU1hdGguY29zKGIpO2UueD1kKigyK2MpKgouNSpNYXRoLmNvcyhhKTtlLnk9ZCooMitjKSpmKi41O2Uuej1kKk1hdGguc2luKGIpKi41fUkuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLHR1YmU6Yix0dWJ1bGFyU2VnbWVudHM6YyxyYWRpYWxTZWdtZW50czpkLHA6ZSxxOmZ9O2E9YXx8MTAwO2I9Ynx8NDA7Yz1NYXRoLmZsb29yKGMpfHw2NDtkPU1hdGguZmxvb3IoZCl8fDg7ZT1lfHwyO2Y9Znx8Mzt2YXIgaD1bXSxrPVtdLG09W10sdT1bXSxxLG4sbD1uZXcgcCx6PW5ldyBwLHQ9bmV3IHAseT1uZXcgcCx4PW5ldyBwLHY9bmV3IHAsRz1uZXcgcDtmb3IocT0wO3E8PWM7KytxKWZvcihuPXEvYyplKk1hdGguUEkqMixnKG4sZSxmLGEsdCksZyhuKy4wMSxlLGYsYSx5KSx2LnN1YlZlY3RvcnMoeSx0KSxHLmFkZFZlY3RvcnMoeSx0KSx4LmNyb3NzVmVjdG9ycyh2LEcpLEcuY3Jvc3NWZWN0b3JzKHgsdikseC5ub3JtYWxpemUoKSxHLm5vcm1hbGl6ZSgpLApuPTA7bjw9ZDsrK24pe3ZhciB3PW4vZCpNYXRoLlBJKjIsTz0tYipNYXRoLmNvcyh3KSx3PWIqTWF0aC5zaW4odyk7bC54PXQueCsoTypHLngrdyp4LngpO2wueT10LnkrKE8qRy55K3cqeC55KTtsLno9dC56KyhPKkcueit3Kngueik7ay5wdXNoKGwueCxsLnksbC56KTt6LnN1YlZlY3RvcnMobCx0KS5ub3JtYWxpemUoKTttLnB1c2goei54LHoueSx6LnopO3UucHVzaChxL2MpO3UucHVzaChuL2QpfWZvcihuPTE7bjw9YztuKyspZm9yKHE9MTtxPD1kO3ErKylhPShkKzEpKm4rKHEtMSksYj0oZCsxKSpuK3EsZT0oZCsxKSoobi0xKStxLGgucHVzaCgoZCsxKSoobi0xKSsocS0xKSxhLGUpLGgucHVzaChhLGIsZSk7dGhpcy5zZXRJbmRleChoKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGssMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBDKG0sMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IEModSwyKSl9ZnVuY3Rpb24gTmMoYSxiLGMsZCwKZSl7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVG9ydXNHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSx0dWJlOmIscmFkaWFsU2VnbWVudHM6Yyx0dWJ1bGFyU2VnbWVudHM6ZCxhcmM6ZX07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFZiKGEsYixjLGQsZSkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFZiKGEsYixjLGQsZSl7SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVG9ydXNCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSx0dWJlOmIscmFkaWFsU2VnbWVudHM6Yyx0dWJ1bGFyU2VnbWVudHM6ZCxhcmM6ZX07YT1hfHwxMDA7Yj1ifHw0MDtjPU1hdGguZmxvb3IoYyl8fDg7ZD1NYXRoLmZsb29yKGQpfHw2O2U9ZXx8MipNYXRoLlBJO3ZhciBmPVtdLGc9W10saD1bXSxrPVtdLG09bmV3IHAsdT1uZXcgcCxxPW5ldyBwLG4sbDtmb3Iobj0wO248PWM7bisrKWZvcihsPTA7bDw9ZDtsKyspe3ZhciB6PWwvZCplLHQ9bi9jKk1hdGguUEkqCjI7dS54PShhK2IqTWF0aC5jb3ModCkpKk1hdGguY29zKHopO3UueT0oYStiKk1hdGguY29zKHQpKSpNYXRoLnNpbih6KTt1Lno9YipNYXRoLnNpbih0KTtnLnB1c2godS54LHUueSx1LnopO20ueD1hKk1hdGguY29zKHopO20ueT1hKk1hdGguc2luKHopO3Euc3ViVmVjdG9ycyh1LG0pLm5vcm1hbGl6ZSgpO2gucHVzaChxLngscS55LHEueik7ay5wdXNoKGwvZCk7ay5wdXNoKG4vYyl9Zm9yKG49MTtuPD1jO24rKylmb3IobD0xO2w8PWQ7bCsrKWE9KGQrMSkqKG4tMSkrbC0xLGI9KGQrMSkqKG4tMSkrbCxlPShkKzEpKm4rbCxmLnB1c2goKGQrMSkqbitsLTEsYSxlKSxmLnB1c2goYSxiLGUpO3RoaXMuc2V0SW5kZXgoZik7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhnLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgQyhoLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKGssMikpfWZ1bmN0aW9uIGRiKGEsYil7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0KIkV4dHJ1ZGVHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6YSxvcHRpb25zOmJ9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBGYShhLGIpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBGYShhLGIpeyJ1bmRlZmluZWQiIT09dHlwZW9mIGEmJihJLmNhbGwodGhpcyksdGhpcy50eXBlPSJFeHRydWRlQnVmZmVyR2VvbWV0cnkiLGE9QXJyYXkuaXNBcnJheShhKT9hOlthXSx0aGlzLmFkZFNoYXBlTGlzdChhLGIpLHRoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKSl9ZnVuY3Rpb24gT2MoYSxiKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJUZXh0R2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17dGV4dDphLHBhcmFtZXRlcnM6Yn07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFdiKGEsYikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFdiKGEsYil7Yj1ifHx7fTt2YXIgYz1iLmZvbnQ7aWYoITE9PT0oYyYmYy5pc0ZvbnQpKXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5UZXh0R2VvbWV0cnk6IGZvbnQgcGFyYW1ldGVyIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5Gb250LiIpLApuZXcgTTtjPWMuZ2VuZXJhdGVTaGFwZXMoYSxiLnNpemUsYi5jdXJ2ZVNlZ21lbnRzKTtiLmFtb3VudD12b2lkIDAhPT1iLmhlaWdodD9iLmhlaWdodDo1MDt2b2lkIDA9PT1iLmJldmVsVGhpY2tuZXNzJiYoYi5iZXZlbFRoaWNrbmVzcz0xMCk7dm9pZCAwPT09Yi5iZXZlbFNpemUmJihiLmJldmVsU2l6ZT04KTt2b2lkIDA9PT1iLmJldmVsRW5hYmxlZCYmKGIuYmV2ZWxFbmFibGVkPSExKTtGYS5jYWxsKHRoaXMsYyxiKTt0aGlzLnR5cGU9IlRleHRCdWZmZXJHZW9tZXRyeSJ9ZnVuY3Rpb24gUGMoYSxiLGMsZCxlLGYsZyl7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iU3BoZXJlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsd2lkdGhTZWdtZW50czpiLGhlaWdodFNlZ21lbnRzOmMscGhpU3RhcnQ6ZCxwaGlMZW5ndGg6ZSx0aGV0YVN0YXJ0OmYsdGhldGFMZW5ndGg6Z307dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IG5iKGEsYixjLGQsZSxmLGcpKTt0aGlzLm1lcmdlVmVydGljZXMoKX0KZnVuY3Rpb24gbmIoYSxiLGMsZCxlLGYsZyl7SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iU3BoZXJlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsd2lkdGhTZWdtZW50czpiLGhlaWdodFNlZ21lbnRzOmMscGhpU3RhcnQ6ZCxwaGlMZW5ndGg6ZSx0aGV0YVN0YXJ0OmYsdGhldGFMZW5ndGg6Z307YT1hfHw1MDtiPU1hdGgubWF4KDMsTWF0aC5mbG9vcihiKXx8OCk7Yz1NYXRoLm1heCgyLE1hdGguZmxvb3IoYyl8fDYpO2Q9dm9pZCAwIT09ZD9kOjA7ZT12b2lkIDAhPT1lP2U6MipNYXRoLlBJO2Y9dm9pZCAwIT09Zj9mOjA7Zz12b2lkIDAhPT1nP2c6TWF0aC5QSTt2YXIgaD1mK2csayxtLHU9MCxxPVtdLG49bmV3IHAsbD1uZXcgcCx6PVtdLHQ9W10seT1bXSx4PVtdO2ZvcihtPTA7bTw9YzttKyspe3ZhciB2PVtdLEc9bS9jO2ZvcihrPTA7azw9YjtrKyspe3ZhciB3PWsvYjtuLng9LWEqTWF0aC5jb3MoZCt3KmUpKk1hdGguc2luKGYrRypnKTtuLnk9YSpNYXRoLmNvcyhmKwpHKmcpO24uej1hKk1hdGguc2luKGQrdyplKSpNYXRoLnNpbihmK0cqZyk7dC5wdXNoKG4ueCxuLnksbi56KTtsLnNldChuLngsbi55LG4ueikubm9ybWFsaXplKCk7eS5wdXNoKGwueCxsLnksbC56KTt4LnB1c2godywxLUcpO3YucHVzaCh1KyspfXEucHVzaCh2KX1mb3IobT0wO208YzttKyspZm9yKGs9MDtrPGI7aysrKWE9cVttXVtrKzFdLGQ9cVttXVtrXSxlPXFbbSsxXVtrXSxnPXFbbSsxXVtrKzFdLCgwIT09bXx8MDxmKSYmei5wdXNoKGEsZCxnKSwobSE9PWMtMXx8aDxNYXRoLlBJKSYmei5wdXNoKGQsZSxnKTt0aGlzLnNldEluZGV4KHopO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEModCwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEMoeSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyh4LDIpKX1mdW5jdGlvbiBRYyhhLGIsYyxkLGUsZil7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUmluZ0dlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9Cntpbm5lclJhZGl1czphLG91dGVyUmFkaXVzOmIsdGhldGFTZWdtZW50czpjLHBoaVNlZ21lbnRzOmQsdGhldGFTdGFydDplLHRoZXRhTGVuZ3RoOmZ9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBYYihhLGIsYyxkLGUsZikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFhiKGEsYixjLGQsZSxmKXtJLmNhbGwodGhpcyk7dGhpcy50eXBlPSJSaW5nQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17aW5uZXJSYWRpdXM6YSxvdXRlclJhZGl1czpiLHRoZXRhU2VnbWVudHM6YyxwaGlTZWdtZW50czpkLHRoZXRhU3RhcnQ6ZSx0aGV0YUxlbmd0aDpmfTthPWF8fDIwO2I9Ynx8NTA7ZT12b2lkIDAhPT1lP2U6MDtmPXZvaWQgMCE9PWY/ZjoyKk1hdGguUEk7Yz12b2lkIDAhPT1jP01hdGgubWF4KDMsYyk6ODtkPXZvaWQgMCE9PWQ/TWF0aC5tYXgoMSxkKToxO3ZhciBnPVtdLGg9W10saz1bXSxtPVtdLHU9YSxxPShiLWEpL2Qsbj1uZXcgcCxsPW5ldyBELHosdDtmb3Ioej0KMDt6PD1kO3orKyl7Zm9yKHQ9MDt0PD1jO3QrKylhPWUrdC9jKmYsbi54PXUqTWF0aC5jb3MoYSksbi55PXUqTWF0aC5zaW4oYSksaC5wdXNoKG4ueCxuLnksbi56KSxrLnB1c2goMCwwLDEpLGwueD0obi54L2IrMSkvMixsLnk9KG4ueS9iKzEpLzIsbS5wdXNoKGwueCxsLnkpO3UrPXF9Zm9yKHo9MDt6PGQ7eisrKWZvcihiPXoqKGMrMSksdD0wO3Q8Yzt0KyspYT10K2IsZT1hK2MrMSxmPWErYysyLHU9YSsxLGcucHVzaChhLGUsdSksZy5wdXNoKGUsZix1KTt0aGlzLnNldEluZGV4KGcpO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMoaCwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEMoaywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhtLDIpKX1mdW5jdGlvbiBSYyhhLGIsYyxkKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMYXRoZUdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3BvaW50czphLHNlZ21lbnRzOmIscGhpU3RhcnQ6YyxwaGlMZW5ndGg6ZH07CnRoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBZYihhLGIsYyxkKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gWWIoYSxiLGMsZCl7SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTGF0aGVCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtwb2ludHM6YSxzZWdtZW50czpiLHBoaVN0YXJ0OmMscGhpTGVuZ3RoOmR9O2I9TWF0aC5mbG9vcihiKXx8MTI7Yz1jfHwwO2Q9ZHx8MipNYXRoLlBJO2Q9WS5jbGFtcChkLDAsMipNYXRoLlBJKTt2YXIgZT1bXSxmPVtdLGc9W10saD0xL2Isaz1uZXcgcCxtPW5ldyBELHUscTtmb3IodT0wO3U8PWI7dSsrKXtxPWMrdSpoKmQ7dmFyIG49TWF0aC5zaW4ocSksbD1NYXRoLmNvcyhxKTtmb3IocT0wO3E8PWEubGVuZ3RoLTE7cSsrKWsueD1hW3FdLngqbixrLnk9YVtxXS55LGsuej1hW3FdLngqbCxmLnB1c2goay54LGsueSxrLnopLG0ueD11L2IsbS55PXEvKGEubGVuZ3RoLTEpLGcucHVzaChtLngsbS55KX1mb3IodT0wO3U8Yjt1KyspZm9yKHE9CjA7cTxhLmxlbmd0aC0xO3ErKyljPXErdSphLmxlbmd0aCxoPWMrYS5sZW5ndGgsaz1jK2EubGVuZ3RoKzEsbT1jKzEsZS5wdXNoKGMsaCxtKSxlLnB1c2goaCxrLG0pO3RoaXMuc2V0SW5kZXgoZSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhmLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKGcsMikpO3RoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtpZihkPT09MipNYXRoLlBJKWZvcihkPXRoaXMuYXR0cmlidXRlcy5ub3JtYWwuYXJyYXksZT1uZXcgcCxmPW5ldyBwLGc9bmV3IHAsYz1iKmEubGVuZ3RoKjMscT11PTA7dTxhLmxlbmd0aDt1KysscSs9MyllLng9ZFtxKzBdLGUueT1kW3ErMV0sZS56PWRbcSsyXSxmLng9ZFtjK3ErMF0sZi55PWRbYytxKzFdLGYuej1kW2MrcSsyXSxnLmFkZFZlY3RvcnMoZSxmKS5ub3JtYWxpemUoKSxkW3ErMF09ZFtjK3ErMF09Zy54LGRbcSsxXT1kW2MrcSsxXT1nLnksZFtxKzJdPWRbYytxKzJdPWcuen1mdW5jdGlvbiBaYihhLApiKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTaGFwZUdlb21ldHJ5Ijsib2JqZWN0Ij09PXR5cGVvZiBiJiYoY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZUdlb21ldHJ5OiBPcHRpb25zIHBhcmFtZXRlciBoYXMgYmVlbiByZW1vdmVkLiIpLGI9Yi5jdXJ2ZVNlZ21lbnRzKTt0aGlzLnBhcmFtZXRlcnM9e3NoYXBlczphLGN1cnZlU2VnbWVudHM6Yn07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3ICRiKGEsYikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uICRiKGEsYil7ZnVuY3Rpb24gYyhhKXt2YXIgYyxoLG09ZS5sZW5ndGgvMzthPWEuZXh0cmFjdFBvaW50cyhiKTt2YXIgbD1hLnNoYXBlLHQ9YS5ob2xlcztpZighMT09PXphLmlzQ2xvY2tXaXNlKGwpKWZvcihsPWwucmV2ZXJzZSgpLGE9MCxjPXQubGVuZ3RoO2E8YzthKyspaD10W2FdLCEwPT09emEuaXNDbG9ja1dpc2UoaCkmJih0W2FdPWgucmV2ZXJzZSgpKTt2YXIgcD16YS50cmlhbmd1bGF0ZVNoYXBlKGwsdCk7CmE9MDtmb3IoYz10Lmxlbmd0aDthPGM7YSsrKWg9dFthXSxsPWwuY29uY2F0KGgpO2E9MDtmb3IoYz1sLmxlbmd0aDthPGM7YSsrKWg9bFthXSxlLnB1c2goaC54LGgueSwwKSxmLnB1c2goMCwwLDEpLGcucHVzaChoLngsaC55KTthPTA7Zm9yKGM9cC5sZW5ndGg7YTxjO2ErKylsPXBbYV0sZC5wdXNoKGxbMF0rbSxsWzFdK20sbFsyXSttKSxrKz0zfUkuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlNoYXBlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17c2hhcGVzOmEsY3VydmVTZWdtZW50czpifTtiPWJ8fDEyO3ZhciBkPVtdLGU9W10sZj1bXSxnPVtdLGg9MCxrPTA7aWYoITE9PT1BcnJheS5pc0FycmF5KGEpKWMoYSk7ZWxzZSBmb3IodmFyIG09MDttPGEubGVuZ3RoO20rKyljKGFbbV0pLHRoaXMuYWRkR3JvdXAoaCxrLG0pLGgrPWssaz0wO3RoaXMuc2V0SW5kZXgoZCk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhlLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIiwKbmV3IEMoZiwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhnLDIpKX1mdW5jdGlvbiBhYyhhLGIpe0kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkVkZ2VzR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17dGhyZXNob2xkQW5nbGU6Yn07dmFyIGM9W10sZD1NYXRoLmNvcyhZLkRFRzJSQUQqKHZvaWQgMCE9PWI/YjoxKSksZT1bMCwwXSxmPXt9LGcsaCxrPVsiYSIsImIiLCJjIl0sbTthLmlzQnVmZmVyR2VvbWV0cnk/KG09bmV3IE0sbS5mcm9tQnVmZmVyR2VvbWV0cnkoYSkpOm09YS5jbG9uZSgpO20ubWVyZ2VWZXJ0aWNlcygpO20uY29tcHV0ZUZhY2VOb3JtYWxzKCk7dmFyIHU9bS52ZXJ0aWNlczttPW0uZmFjZXM7Zm9yKHZhciBsPTAsbj1tLmxlbmd0aDtsPG47bCsrKWZvcih2YXIgcj1tW2xdLHA9MDszPnA7cCsrKWc9cltrW3BdXSxoPXJba1socCsxKSUzXV0sZVswXT1NYXRoLm1pbihnLGgpLGVbMV09TWF0aC5tYXgoZyxoKSxnPWVbMF0rIiwiK2VbMV0sdm9pZCAwPT09CmZbZ10/ZltnXT17aW5kZXgxOmVbMF0saW5kZXgyOmVbMV0sZmFjZTE6bCxmYWNlMjp2b2lkIDB9OmZbZ10uZmFjZTI9bDtmb3IoZyBpbiBmKWlmKGU9ZltnXSx2b2lkIDA9PT1lLmZhY2UyfHxtW2UuZmFjZTFdLm5vcm1hbC5kb3QobVtlLmZhY2UyXS5ub3JtYWwpPD1kKWs9dVtlLmluZGV4MV0sYy5wdXNoKGsueCxrLnksay56KSxrPXVbZS5pbmRleDJdLGMucHVzaChrLngsay55LGsueik7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhjLDMpKX1mdW5jdGlvbiBvYihhLGIsYyxkLGUsZixnLGgpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN5bGluZGVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzVG9wOmEscmFkaXVzQm90dG9tOmIsaGVpZ2h0OmMscmFkaWFsU2VnbWVudHM6ZCxoZWlnaHRTZWdtZW50czplLG9wZW5FbmRlZDpmLHRoZXRhU3RhcnQ6Zyx0aGV0YUxlbmd0aDpofTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgV2EoYSxiLGMsZCxlLApmLGcsaCkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFdhKGEsYixjLGQsZSxmLGcsaCl7ZnVuY3Rpb24gayhjKXt2YXIgZSxmLGssdD1uZXcgRCxFPW5ldyBwLEY9MCxhYT0hMD09PWM/YTpiLFI9ITA9PT1jPzE6LTE7Zj16O2ZvcihlPTE7ZTw9ZDtlKyspbC5wdXNoKDAseSpSLDApLG4ucHVzaCgwLFIsMCksci5wdXNoKC41LC41KSx6Kys7az16O2ZvcihlPTA7ZTw9ZDtlKyspe3ZhciBDPWUvZCpoK2csQj1NYXRoLmNvcyhDKSxDPU1hdGguc2luKEMpO0UueD1hYSpDO0UueT15KlI7RS56PWFhKkI7bC5wdXNoKEUueCxFLnksRS56KTtuLnB1c2goMCxSLDApO3QueD0uNSpCKy41O3QueT0uNSpDKlIrLjU7ci5wdXNoKHQueCx0LnkpO3orK31mb3IoZT0wO2U8ZDtlKyspdD1mK2UsRT1rK2UsITA9PT1jP3UucHVzaChFLEUrMSx0KTp1LnB1c2goRSsxLEUsdCksRis9MzttLmFkZEdyb3VwKHgsRiwhMD09PWM/MToyKTt4Kz1GfUkuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN5bGluZGVyQnVmZmVyR2VvbWV0cnkiOwp0aGlzLnBhcmFtZXRlcnM9e3JhZGl1c1RvcDphLHJhZGl1c0JvdHRvbTpiLGhlaWdodDpjLHJhZGlhbFNlZ21lbnRzOmQsaGVpZ2h0U2VnbWVudHM6ZSxvcGVuRW5kZWQ6Zix0aGV0YVN0YXJ0OmcsdGhldGFMZW5ndGg6aH07dmFyIG09dGhpczthPXZvaWQgMCE9PWE/YToyMDtiPXZvaWQgMCE9PWI/YjoyMDtjPXZvaWQgMCE9PWM/YzoxMDA7ZD1NYXRoLmZsb29yKGQpfHw4O2U9TWF0aC5mbG9vcihlKXx8MTtmPXZvaWQgMCE9PWY/ZjohMTtnPXZvaWQgMCE9PWc/ZzowO2g9dm9pZCAwIT09aD9oOjIqTWF0aC5QSTt2YXIgdT1bXSxsPVtdLG49W10scj1bXSx6PTAsdD1bXSx5PWMvMix4PTA7KGZ1bmN0aW9uKCl7dmFyIGYsayx3PW5ldyBwLE89bmV3IHAsUz0wLEU9KGItYSkvYztmb3Ioaz0wO2s8PWU7aysrKXt2YXIgRj1bXSxhYT1rL2UsQz1hYSooYi1hKSthO2ZvcihmPTA7Zjw9ZDtmKyspe3ZhciBEPWYvZCxCPUQqaCtnLEk9TWF0aC5zaW4oQiksQj1NYXRoLmNvcyhCKTtPLng9QyoKSTtPLnk9LWFhKmMreTtPLno9QypCO2wucHVzaChPLngsTy55LE8ueik7dy5zZXQoSSxFLEIpLm5vcm1hbGl6ZSgpO24ucHVzaCh3Lngsdy55LHcueik7ci5wdXNoKEQsMS1hYSk7Ri5wdXNoKHorKyl9dC5wdXNoKEYpfWZvcihmPTA7ZjxkO2YrKylmb3Ioaz0wO2s8ZTtrKyspdz10W2srMV1bZl0sTz10W2srMV1bZisxXSxFPXRba11bZisxXSx1LnB1c2godFtrXVtmXSx3LEUpLHUucHVzaCh3LE8sRSksUys9NjttLmFkZEdyb3VwKHgsUywwKTt4Kz1TfSkoKTshMT09PWYmJigwPGEmJmsoITApLDA8YiYmayghMSkpO3RoaXMuc2V0SW5kZXgodSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhsLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgQyhuLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKHIsMikpfWZ1bmN0aW9uIFNjKGEsYixjLGQsZSxmLGcpe29iLmNhbGwodGhpcywwLGEsYixjLGQsZSxmLGcpO3RoaXMudHlwZT0iQ29uZUdlb21ldHJ5IjsKdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSxoZWlnaHQ6YixyYWRpYWxTZWdtZW50czpjLGhlaWdodFNlZ21lbnRzOmQsb3BlbkVuZGVkOmUsdGhldGFTdGFydDpmLHRoZXRhTGVuZ3RoOmd9fWZ1bmN0aW9uIFRjKGEsYixjLGQsZSxmLGcpe1dhLmNhbGwodGhpcywwLGEsYixjLGQsZSxmLGcpO3RoaXMudHlwZT0iQ29uZUJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGhlaWdodDpiLHJhZGlhbFNlZ21lbnRzOmMsaGVpZ2h0U2VnbWVudHM6ZCxvcGVuRW5kZWQ6ZSx0aGV0YVN0YXJ0OmYsdGhldGFMZW5ndGg6Z319ZnVuY3Rpb24gVWMoYSxiLGMsZCl7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsc2VnbWVudHM6Yix0aGV0YVN0YXJ0OmMsdGhldGFMZW5ndGg6ZH07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IGJjKGEsYixjLGQpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBiYyhhLApiLGMsZCl7SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ2lyY2xlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsc2VnbWVudHM6Yix0aGV0YVN0YXJ0OmMsdGhldGFMZW5ndGg6ZH07YT1hfHw1MDtiPXZvaWQgMCE9PWI/TWF0aC5tYXgoMyxiKTo4O2M9dm9pZCAwIT09Yz9jOjA7ZD12b2lkIDAhPT1kP2Q6MipNYXRoLlBJO3ZhciBlPVtdLGY9W10sZz1bXSxoPVtdLGssbSx1PW5ldyBwLGw9bmV3IEQ7Zi5wdXNoKDAsMCwwKTtnLnB1c2goMCwwLDEpO2gucHVzaCguNSwuNSk7bT0wO2ZvcihrPTM7bTw9YjttKyssays9Myl7dmFyIG49YyttL2IqZDt1Lng9YSpNYXRoLmNvcyhuKTt1Lnk9YSpNYXRoLnNpbihuKTtmLnB1c2godS54LHUueSx1LnopO2cucHVzaCgwLDAsMSk7bC54PShmW2tdL2ErMSkvMjtsLnk9KGZbaysxXS9hKzEpLzI7aC5wdXNoKGwueCxsLnkpfWZvcihrPTE7azw9YjtrKyspZS5wdXNoKGssaysxLDApO3RoaXMuc2V0SW5kZXgoZSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIiwKbmV3IEMoZiwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEMoZywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhoLDIpKX1mdW5jdGlvbiBjYyhhKXtFYS5jYWxsKHRoaXMse3VuaWZvcm1zOkhhLm1lcmdlKFtWLmxpZ2h0cyx7b3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOlUuc2hhZG93X3ZlcnQsZnJhZ21lbnRTaGFkZXI6VS5zaGFkb3dfZnJhZ30pO3RoaXMudHJhbnNwYXJlbnQ9dGhpcy5saWdodHM9ITA7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7b3BhY2l0eTp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5vcGFjaXR5LnZhbHVlfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy51bmlmb3Jtcy5vcGFjaXR5LnZhbHVlPWF9fX0pO3RoaXMuc2V0VmFsdWVzKGEpfWZ1bmN0aW9uIGRjKGEpe0VhLmNhbGwodGhpcyxhKTt0aGlzLnR5cGU9IlJhd1NoYWRlck1hdGVyaWFsIn1mdW5jdGlvbiBSYShhKXtaLmNhbGwodGhpcyk7CnRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9O3RoaXMudHlwZT0iTWVzaFN0YW5kYXJkTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMubWV0YWxuZXNzPXRoaXMucm91Z2huZXNzPS41O3RoaXMubGlnaHRNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTE7dGhpcy5hb01hcD1udWxsO3RoaXMuYW9NYXBJbnRlbnNpdHk9MTt0aGlzLmVtaXNzaXZlPW5ldyBIKDApO3RoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MTt0aGlzLmJ1bXBNYXA9dGhpcy5lbWlzc2l2ZU1hcD1udWxsO3RoaXMuYnVtcFNjYWxlPTE7dGhpcy5ub3JtYWxNYXA9bnVsbDt0aGlzLm5vcm1hbFNjYWxlPW5ldyBEKDEsMSk7dGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTE7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPTA7dGhpcy5lbnZNYXA9dGhpcy5hbHBoYU1hcD10aGlzLm1ldGFsbmVzc01hcD10aGlzLnJvdWdobmVzc01hcD1udWxsOwp0aGlzLmVudk1hcEludGVuc2l0eT0xO3RoaXMucmVmcmFjdGlvblJhdGlvPS45ODt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xO3RoaXMud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCI7dGhpcy5tb3JwaE5vcm1hbHM9dGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz0hMTt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiBwYihhKXtSYS5jYWxsKHRoaXMpO3RoaXMuZGVmaW5lcz17UEhZU0lDQUw6IiJ9O3RoaXMudHlwZT0iTWVzaFBoeXNpY2FsTWF0ZXJpYWwiO3RoaXMucmVmbGVjdGl2aXR5PS41O3RoaXMuY2xlYXJDb2F0Um91Z2huZXNzPXRoaXMuY2xlYXJDb2F0PTA7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24gdGEoYSl7Wi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTWVzaFBob25nTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMuc3BlY3VsYXI9bmV3IEgoMTExODQ4MSk7dGhpcy5zaGluaW5lc3M9CjMwO3RoaXMubGlnaHRNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTE7dGhpcy5hb01hcD1udWxsO3RoaXMuYW9NYXBJbnRlbnNpdHk9MTt0aGlzLmVtaXNzaXZlPW5ldyBIKDApO3RoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MTt0aGlzLmJ1bXBNYXA9dGhpcy5lbWlzc2l2ZU1hcD1udWxsO3RoaXMuYnVtcFNjYWxlPTE7dGhpcy5ub3JtYWxNYXA9bnVsbDt0aGlzLm5vcm1hbFNjYWxlPW5ldyBEKDEsMSk7dGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTE7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPTA7dGhpcy5lbnZNYXA9dGhpcy5hbHBoYU1hcD10aGlzLnNwZWN1bGFyTWFwPW51bGw7dGhpcy5jb21iaW5lPTA7dGhpcy5yZWZsZWN0aXZpdHk9MTt0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTg7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWNhcD0KInJvdW5kIjt0aGlzLm1vcnBoTm9ybWFscz10aGlzLm1vcnBoVGFyZ2V0cz10aGlzLnNraW5uaW5nPSExO3RoaXMuc2V0VmFsdWVzKGEpfWZ1bmN0aW9uIHFiKGEpe3RhLmNhbGwodGhpcyk7dGhpcy5kZWZpbmVzPXtUT09OOiIifTt0aGlzLnR5cGU9Ik1lc2hUb29uTWF0ZXJpYWwiO3RoaXMuZ3JhZGllbnRNYXA9bnVsbDt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiByYihhKXtaLmNhbGwodGhpcyxhKTt0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCI7dGhpcy5idW1wTWFwPW51bGw7dGhpcy5idW1wU2NhbGU9MTt0aGlzLm5vcm1hbE1hcD1udWxsO3RoaXMubm9ybWFsU2NhbGU9bmV3IEQoMSwxKTt0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9MTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9MDt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xO3RoaXMubW9ycGhOb3JtYWxzPXRoaXMubW9ycGhUYXJnZXRzPXRoaXMuc2tpbm5pbmc9CnRoaXMubGlnaHRzPXRoaXMuZm9nPSExO3RoaXMuc2V0VmFsdWVzKGEpfWZ1bmN0aW9uIHNiKGEpe1ouY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ik1lc2hMYW1iZXJ0TWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMubGlnaHRNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTE7dGhpcy5hb01hcD1udWxsO3RoaXMuYW9NYXBJbnRlbnNpdHk9MTt0aGlzLmVtaXNzaXZlPW5ldyBIKDApO3RoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MTt0aGlzLmVudk1hcD10aGlzLmFscGhhTWFwPXRoaXMuc3BlY3VsYXJNYXA9dGhpcy5lbWlzc2l2ZU1hcD1udWxsO3RoaXMuY29tYmluZT0wO3RoaXMucmVmbGVjdGl2aXR5PTE7dGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4O3RoaXMud2lyZWZyYW1lPSExO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPTE7dGhpcy53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIjt0aGlzLm1vcnBoTm9ybWFscz0KdGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz0hMTt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiB0YihhKXtaLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMaW5lRGFzaGVkTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMuc2NhbGU9dGhpcy5saW5ld2lkdGg9MTt0aGlzLmRhc2hTaXplPTM7dGhpcy5nYXBTaXplPTE7dGhpcy5saWdodHM9ITE7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24gWmQoYSxiLGMpe3ZhciBkPXRoaXMsZT0hMSxmPTAsZz0wO3RoaXMub25TdGFydD12b2lkIDA7dGhpcy5vbkxvYWQ9YTt0aGlzLm9uUHJvZ3Jlc3M9Yjt0aGlzLm9uRXJyb3I9Yzt0aGlzLml0ZW1TdGFydD1mdW5jdGlvbihhKXtnKys7aWYoITE9PT1lJiZ2b2lkIDAhPT1kLm9uU3RhcnQpZC5vblN0YXJ0KGEsZixnKTtlPSEwfTt0aGlzLml0ZW1FbmQ9ZnVuY3Rpb24oYSl7ZisrO2lmKHZvaWQgMCE9PWQub25Qcm9ncmVzcylkLm9uUHJvZ3Jlc3MoYSxmLGcpO2lmKGY9PT0KZyYmKGU9ITEsdm9pZCAwIT09ZC5vbkxvYWQpKWQub25Mb2FkKCl9O3RoaXMuaXRlbUVycm9yPWZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PWQub25FcnJvcilkLm9uRXJyb3IoYSl9fWZ1bmN0aW9uIHVhKGEpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1hP2E6QWF9ZnVuY3Rpb24gUWUoYSl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWE/YTpBYTt0aGlzLl9wYXJzZXI9bnVsbH1mdW5jdGlvbiAkZChhKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09YT9hOkFhO3RoaXMuX3BhcnNlcj1udWxsfWZ1bmN0aW9uIFZjKGEpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1hP2E6QWF9ZnVuY3Rpb24gYWUoYSl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWE/YTpBYX1mdW5jdGlvbiBzZChhKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09YT9hOkFhfWZ1bmN0aW9uIG1hKGEsYil7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTGlnaHQiO3RoaXMuY29sb3I9bmV3IEgoYSk7dGhpcy5pbnRlbnNpdHk9dm9pZCAwIT09Yj9iOjE7CnRoaXMucmVjZWl2ZVNoYWRvdz12b2lkIDB9ZnVuY3Rpb24gdGQoYSxiLGMpe21hLmNhbGwodGhpcyxhLGMpO3RoaXMudHlwZT0iSGVtaXNwaGVyZUxpZ2h0Ijt0aGlzLmNhc3RTaGFkb3c9dm9pZCAwO3RoaXMucG9zaXRpb24uY29weShCLkRlZmF1bHRVcCk7dGhpcy51cGRhdGVNYXRyaXgoKTt0aGlzLmdyb3VuZENvbG9yPW5ldyBIKGIpfWZ1bmN0aW9uIHViKGEpe3RoaXMuY2FtZXJhPWE7dGhpcy5iaWFzPTA7dGhpcy5yYWRpdXM9MTt0aGlzLm1hcFNpemU9bmV3IEQoNTEyLDUxMik7dGhpcy5tYXA9bnVsbDt0aGlzLm1hdHJpeD1uZXcgSn1mdW5jdGlvbiB1ZCgpe3ViLmNhbGwodGhpcyxuZXcgeGEoNTAsMSwuNSw1MDApKX1mdW5jdGlvbiB2ZChhLGIsYyxkLGUsZil7bWEuY2FsbCh0aGlzLGEsYik7dGhpcy50eXBlPSJTcG90TGlnaHQiO3RoaXMucG9zaXRpb24uY29weShCLkRlZmF1bHRVcCk7dGhpcy51cGRhdGVNYXRyaXgoKTt0aGlzLnRhcmdldD1uZXcgQjtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywKInBvd2VyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9LHNldDpmdW5jdGlvbihhKXt0aGlzLmludGVuc2l0eT1hL01hdGguUEl9fSk7dGhpcy5kaXN0YW5jZT12b2lkIDAhPT1jP2M6MDt0aGlzLmFuZ2xlPXZvaWQgMCE9PWQ/ZDpNYXRoLlBJLzM7dGhpcy5wZW51bWJyYT12b2lkIDAhPT1lP2U6MDt0aGlzLmRlY2F5PXZvaWQgMCE9PWY/ZjoxO3RoaXMuc2hhZG93PW5ldyB1ZH1mdW5jdGlvbiB3ZChhLGIsYyxkKXttYS5jYWxsKHRoaXMsYSxiKTt0aGlzLnR5cGU9IlBvaW50TGlnaHQiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwb3dlciIse2dldDpmdW5jdGlvbigpe3JldHVybiA0KnRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9LHNldDpmdW5jdGlvbihhKXt0aGlzLmludGVuc2l0eT1hLyg0Kk1hdGguUEkpfX0pO3RoaXMuZGlzdGFuY2U9dm9pZCAwIT09Yz9jOjA7dGhpcy5kZWNheT12b2lkIDAhPT1kP2Q6MTt0aGlzLnNoYWRvdz1uZXcgdWIobmV3IHhhKDkwLAoxLC41LDUwMCkpfWZ1bmN0aW9uIHhkKCl7dWIuY2FsbCh0aGlzLG5ldyBKYigtNSw1LDUsLTUsLjUsNTAwKSl9ZnVuY3Rpb24geWQoYSxiKXttYS5jYWxsKHRoaXMsYSxiKTt0aGlzLnR5cGU9IkRpcmVjdGlvbmFsTGlnaHQiO3RoaXMucG9zaXRpb24uY29weShCLkRlZmF1bHRVcCk7dGhpcy51cGRhdGVNYXRyaXgoKTt0aGlzLnRhcmdldD1uZXcgQjt0aGlzLnNoYWRvdz1uZXcgeGR9ZnVuY3Rpb24gemQoYSxiKXttYS5jYWxsKHRoaXMsYSxiKTt0aGlzLnR5cGU9IkFtYmllbnRMaWdodCI7dGhpcy5jYXN0U2hhZG93PXZvaWQgMH1mdW5jdGlvbiBBZChhLGIsYyxkKXttYS5jYWxsKHRoaXMsYSxiKTt0aGlzLnR5cGU9IlJlY3RBcmVhTGlnaHQiO3RoaXMucG9zaXRpb24uc2V0KDAsMSwwKTt0aGlzLnVwZGF0ZU1hdHJpeCgpO3RoaXMud2lkdGg9dm9pZCAwIT09Yz9jOjEwO3RoaXMuaGVpZ2h0PXZvaWQgMCE9PWQ/ZDoxMH1mdW5jdGlvbiBEYShhLGIsYyxkKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz0KYTt0aGlzLl9jYWNoZWRJbmRleD0wO3RoaXMucmVzdWx0QnVmZmVyPXZvaWQgMCE9PWQ/ZDpuZXcgYi5jb25zdHJ1Y3RvcihjKTt0aGlzLnNhbXBsZVZhbHVlcz1iO3RoaXMudmFsdWVTaXplPWN9ZnVuY3Rpb24gQmQoYSxiLGMsZCl7RGEuY2FsbCh0aGlzLGEsYixjLGQpO3RoaXMuX29mZnNldE5leHQ9dGhpcy5fd2VpZ2h0TmV4dD10aGlzLl9vZmZzZXRQcmV2PXRoaXMuX3dlaWdodFByZXY9LTB9ZnVuY3Rpb24gV2MoYSxiLGMsZCl7RGEuY2FsbCh0aGlzLGEsYixjLGQpfWZ1bmN0aW9uIENkKGEsYixjLGQpe0RhLmNhbGwodGhpcyxhLGIsYyxkKX1mdW5jdGlvbiB2YihhLGIsYyxkKXtpZih2b2lkIDA9PT1hKXRocm93IEVycm9yKCJ0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCIpO2lmKHZvaWQgMD09PWJ8fDA9PT1iLmxlbmd0aCl0aHJvdyBFcnJvcigibm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrYSk7dGhpcy5uYW1lPWE7dGhpcy50aW1lcz12YS5jb252ZXJ0QXJyYXkoYix0aGlzLlRpbWVCdWZmZXJUeXBlKTsKdGhpcy52YWx1ZXM9dmEuY29udmVydEFycmF5KGMsdGhpcy5WYWx1ZUJ1ZmZlclR5cGUpO3RoaXMuc2V0SW50ZXJwb2xhdGlvbihkfHx0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKTt0aGlzLnZhbGlkYXRlKCk7dGhpcy5vcHRpbWl6ZSgpfWZ1bmN0aW9uIGVjKGEsYixjLGQpe3ZiLmNhbGwodGhpcyxhLGIsYyxkKX1mdW5jdGlvbiBEZChhLGIsYyxkKXtEYS5jYWxsKHRoaXMsYSxiLGMsZCl9ZnVuY3Rpb24gWGMoYSxiLGMsZCl7dmIuY2FsbCh0aGlzLGEsYixjLGQpfWZ1bmN0aW9uIGZjKGEsYixjLGQpe3ZiLmNhbGwodGhpcyxhLGIsYyxkKX1mdW5jdGlvbiBFZChhLGIsYyxkKXt2Yi5jYWxsKHRoaXMsYSxiLGMsZCl9ZnVuY3Rpb24gRmQoYSxiLGMpe3ZiLmNhbGwodGhpcyxhLGIsYyl9ZnVuY3Rpb24gR2QoYSxiLGMsZCl7dmIuY2FsbCh0aGlzLGEsYixjLGQpfWZ1bmN0aW9uIHdiKGEsYixjLGQpe3ZiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBCYShhLGIsYyl7dGhpcy5uYW1lPQphO3RoaXMudHJhY2tzPWM7dGhpcy5kdXJhdGlvbj12b2lkIDAhPT1iP2I6LTE7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7MD50aGlzLmR1cmF0aW9uJiZ0aGlzLnJlc2V0RHVyYXRpb24oKTt0aGlzLm9wdGltaXplKCl9ZnVuY3Rpb24gSGQoYSl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWE/YTpBYTt0aGlzLnRleHR1cmVzPXt9fWZ1bmN0aW9uIGJlKGEpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1hP2E6QWF9ZnVuY3Rpb24gZ2MoKXt0aGlzLm9uTG9hZFN0YXJ0PWZ1bmN0aW9uKCl7fTt0aGlzLm9uTG9hZFByb2dyZXNzPWZ1bmN0aW9uKCl7fTt0aGlzLm9uTG9hZENvbXBsZXRlPWZ1bmN0aW9uKCl7fX1mdW5jdGlvbiBjZShhKXsiYm9vbGVhbiI9PT10eXBlb2YgYSYmKGNvbnNvbGUud2FybigiVEhSRUUuSlNPTkxvYWRlcjogc2hvd1N0YXR1cyBwYXJhbWV0ZXIgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGNvbnN0cnVjdG9yLiIpLGE9dm9pZCAwKTt0aGlzLm1hbmFnZXI9dm9pZCAwIT09CmE/YTpBYTt0aGlzLndpdGhDcmVkZW50aWFscz0hMX1mdW5jdGlvbiBSZShhKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09YT9hOkFhO3RoaXMudGV4dHVyZVBhdGg9IiJ9ZnVuY3Rpb24gU2UoYSxiLGMsZCxlKXtiPS41KihkLWIpO2U9LjUqKGUtYyk7dmFyIGY9YSphO3JldHVybigyKmMtMipkK2IrZSkqYSpmKygtMypjKzMqZC0yKmItZSkqZitiKmErY31mdW5jdGlvbiB4YihhLGIsYyxkKXt2YXIgZT0xLWE7cmV0dXJuIGUqZSpiKzIqKDEtYSkqYSpjK2EqYSpkfWZ1bmN0aW9uIHliKGEsYixjLGQsZSl7dmFyIGY9MS1hLGc9MS1hO3JldHVybiBmKmYqZipiKzMqZypnKmEqYyszKigxLWEpKmEqYSpkK2EqYSphKmV9ZnVuY3Rpb24gbmEoKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDB9ZnVuY3Rpb24gU2EoYSxiKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDA7dGhpcy52MT1hO3RoaXMudjI9Yn1mdW5jdGlvbiBZYygpe3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMDt0aGlzLmN1cnZlcz0KW107dGhpcy5hdXRvQ2xvc2U9ITF9ZnVuY3Rpb24gWGEoYSxiLGMsZCxlLGYsZyxoKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDA7dGhpcy5hWD1hO3RoaXMuYVk9Yjt0aGlzLnhSYWRpdXM9Yzt0aGlzLnlSYWRpdXM9ZDt0aGlzLmFTdGFydEFuZ2xlPWU7dGhpcy5hRW5kQW5nbGU9Zjt0aGlzLmFDbG9ja3dpc2U9Zzt0aGlzLmFSb3RhdGlvbj1ofHwwfWZ1bmN0aW9uIHpiKGEpe3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMDt0aGlzLnBvaW50cz12b2lkIDA9PT1hP1tdOmF9ZnVuY3Rpb24gaGMoYSxiLGMsZCl7dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwO3RoaXMudjA9YTt0aGlzLnYxPWI7dGhpcy52Mj1jO3RoaXMudjM9ZH1mdW5jdGlvbiBpYyhhLGIsYyl7dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwO3RoaXMudjA9YTt0aGlzLnYxPWI7dGhpcy52Mj1jfWZ1bmN0aW9uIFpjKGEpe1ljLmNhbGwodGhpcyk7dGhpcy5jdXJyZW50UG9pbnQ9bmV3IEQ7YSYmdGhpcy5mcm9tUG9pbnRzKGEpfQpmdW5jdGlvbiBBYigpe1pjLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmhvbGVzPVtdfWZ1bmN0aW9uIGRlKCl7dGhpcy5zdWJQYXRocz1bXTt0aGlzLmN1cnJlbnRQYXRoPW51bGx9ZnVuY3Rpb24gZWUoYSl7dGhpcy5kYXRhPWF9ZnVuY3Rpb24gVGUoYSl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWE/YTpBYX1mdW5jdGlvbiBmZShhKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09YT9hOkFhfWZ1bmN0aW9uIFVlKCl7dGhpcy50eXBlPSJTdGVyZW9DYW1lcmEiO3RoaXMuYXNwZWN0PTE7dGhpcy5leWVTZXA9LjA2NDt0aGlzLmNhbWVyYUw9bmV3IHhhO3RoaXMuY2FtZXJhTC5sYXllcnMuZW5hYmxlKDEpO3RoaXMuY2FtZXJhTC5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMuY2FtZXJhUj1uZXcgeGE7dGhpcy5jYW1lcmFSLmxheWVycy5lbmFibGUoMik7dGhpcy5jYW1lcmFSLm1hdHJpeEF1dG9VcGRhdGU9ITF9ZnVuY3Rpb24gSWQoYSxiLGMpe0IuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN1YmVDYW1lcmEiOwp2YXIgZD1uZXcgeGEoOTAsMSxhLGIpO2QudXAuc2V0KDAsLTEsMCk7ZC5sb29rQXQobmV3IHAoMSwwLDApKTt0aGlzLmFkZChkKTt2YXIgZT1uZXcgeGEoOTAsMSxhLGIpO2UudXAuc2V0KDAsLTEsMCk7ZS5sb29rQXQobmV3IHAoLTEsMCwwKSk7dGhpcy5hZGQoZSk7dmFyIGY9bmV3IHhhKDkwLDEsYSxiKTtmLnVwLnNldCgwLDAsMSk7Zi5sb29rQXQobmV3IHAoMCwxLDApKTt0aGlzLmFkZChmKTt2YXIgZz1uZXcgeGEoOTAsMSxhLGIpO2cudXAuc2V0KDAsMCwtMSk7Zy5sb29rQXQobmV3IHAoMCwtMSwwKSk7dGhpcy5hZGQoZyk7dmFyIGg9bmV3IHhhKDkwLDEsYSxiKTtoLnVwLnNldCgwLC0xLDApO2gubG9va0F0KG5ldyBwKDAsMCwxKSk7dGhpcy5hZGQoaCk7dmFyIGs9bmV3IHhhKDkwLDEsYSxiKTtrLnVwLnNldCgwLC0xLDApO2subG9va0F0KG5ldyBwKDAsMCwtMSkpO3RoaXMuYWRkKGspO3RoaXMucmVuZGVyVGFyZ2V0PW5ldyBFYihjLGMse2Zvcm1hdDoxMDIyLG1hZ0ZpbHRlcjoxMDA2LAptaW5GaWx0ZXI6MTAwNn0pO3RoaXMucmVuZGVyVGFyZ2V0LnRleHR1cmUubmFtZT0iQ3ViZUNhbWVyYSI7dGhpcy51cGRhdGVDdWJlTWFwPWZ1bmN0aW9uKGEsYil7bnVsbD09PXRoaXMucGFyZW50JiZ0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCk7dmFyIGM9dGhpcy5yZW5kZXJUYXJnZXQsbj1jLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO2MudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITE7Yy5hY3RpdmVDdWJlRmFjZT0wO2EucmVuZGVyKGIsZCxjKTtjLmFjdGl2ZUN1YmVGYWNlPTE7YS5yZW5kZXIoYixlLGMpO2MuYWN0aXZlQ3ViZUZhY2U9MjthLnJlbmRlcihiLGYsYyk7Yy5hY3RpdmVDdWJlRmFjZT0zO2EucmVuZGVyKGIsZyxjKTtjLmFjdGl2ZUN1YmVGYWNlPTQ7YS5yZW5kZXIoYixoLGMpO2MudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9bjtjLmFjdGl2ZUN1YmVGYWNlPTU7YS5yZW5kZXIoYixrLGMpO2Euc2V0UmVuZGVyVGFyZ2V0KG51bGwpfX1mdW5jdGlvbiBnZShhKXt4YS5jYWxsKHRoaXMpOwp0aGlzLmVuYWJsZWQ9ITE7dGhpcy5jYW1lcmFzPWF8fFtdfWZ1bmN0aW9uIGhlKCl7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQXVkaW9MaXN0ZW5lciI7dGhpcy5jb250ZXh0PWllLmdldENvbnRleHQoKTt0aGlzLmdhaW49dGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTt0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO3RoaXMuZmlsdGVyPW51bGx9ZnVuY3Rpb24gamMoYSl7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQXVkaW8iO3RoaXMuY29udGV4dD1hLmNvbnRleHQ7dGhpcy5nYWluPXRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7dGhpcy5nYWluLmNvbm5lY3QoYS5nZXRJbnB1dCgpKTt0aGlzLmF1dG9wbGF5PSExO3RoaXMuYnVmZmVyPW51bGw7dGhpcy5sb29wPSExO3RoaXMuc3RhcnRUaW1lPTA7dGhpcy5wbGF5YmFja1JhdGU9MTt0aGlzLmlzUGxheWluZz0hMTt0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMDt0aGlzLnNvdXJjZVR5cGU9ImVtcHR5IjsKdGhpcy5maWx0ZXJzPVtdfWZ1bmN0aW9uIGplKGEpe2pjLmNhbGwodGhpcyxhKTt0aGlzLnBhbm5lcj10aGlzLmNvbnRleHQuY3JlYXRlUGFubmVyKCk7dGhpcy5wYW5uZXIuY29ubmVjdCh0aGlzLmdhaW4pfWZ1bmN0aW9uIGtlKGEsYil7dGhpcy5hbmFseXNlcj1hLmNvbnRleHQuY3JlYXRlQW5hbHlzZXIoKTt0aGlzLmFuYWx5c2VyLmZmdFNpemU9dm9pZCAwIT09Yj9iOjIwNDg7dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KHRoaXMuYW5hbHlzZXIuZnJlcXVlbmN5QmluQ291bnQpO2EuZ2V0T3V0cHV0KCkuY29ubmVjdCh0aGlzLmFuYWx5c2VyKX1mdW5jdGlvbiBsZShhLGIsYyl7dGhpcy5iaW5kaW5nPWE7dGhpcy52YWx1ZVNpemU9YzthPUZsb2F0NjRBcnJheTtzd2l0Y2goYil7Y2FzZSAicXVhdGVybmlvbiI6Yj10aGlzLl9zbGVycDticmVhaztjYXNlICJzdHJpbmciOmNhc2UgImJvb2wiOmE9QXJyYXk7Yj10aGlzLl9zZWxlY3Q7YnJlYWs7ZGVmYXVsdDpiPXRoaXMuX2xlcnB9dGhpcy5idWZmZXI9Cm5ldyBhKDQqYyk7dGhpcy5fbWl4QnVmZmVyUmVnaW9uPWI7dGhpcy5yZWZlcmVuY2VDb3VudD10aGlzLnVzZUNvdW50PXRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wfWZ1bmN0aW9uIFZlKGEsYixjKXtjPWN8fG9hLnBhcnNlVHJhY2tOYW1lKGIpO3RoaXMuX3RhcmdldEdyb3VwPWE7dGhpcy5fYmluZGluZ3M9YS5zdWJzY3JpYmVfKGIsYyl9ZnVuY3Rpb24gb2EoYSxiLGMpe3RoaXMucGF0aD1iO3RoaXMucGFyc2VkUGF0aD1jfHxvYS5wYXJzZVRyYWNrTmFtZShiKTt0aGlzLm5vZGU9b2EuZmluZE5vZGUoYSx0aGlzLnBhcnNlZFBhdGgubm9kZU5hbWUpfHxhO3RoaXMucm9vdE5vZGU9YX1mdW5jdGlvbiBXZShhKXt0aGlzLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKTt0aGlzLl9vYmplY3RzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5uQ2FjaGVkT2JqZWN0c189MDt2YXIgYj17fTt0aGlzLl9pbmRpY2VzQnlVVUlEPWI7Zm9yKHZhciBjPTAsZD1hcmd1bWVudHMubGVuZ3RoO2MhPT0KZDsrK2MpYlthcmd1bWVudHNbY10udXVpZF09Yzt0aGlzLl9wYXRocz1bXTt0aGlzLl9wYXJzZWRQYXRocz1bXTt0aGlzLl9iaW5kaW5ncz1bXTt0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGg9e307dmFyIGU9dGhpczt0aGlzLnN0YXRzPXtvYmplY3RzOntnZXQgdG90YWwoKXtyZXR1cm4gZS5fb2JqZWN0cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0aGlzLnRvdGFsLWUubkNhY2hlZE9iamVjdHNffX0sZ2V0IGJpbmRpbmdzUGVyT2JqZWN0KCl7cmV0dXJuIGUuX2JpbmRpbmdzLmxlbmd0aH19fWZ1bmN0aW9uIFhlKGEsYixjKXt0aGlzLl9taXhlcj1hO3RoaXMuX2NsaXA9Yjt0aGlzLl9sb2NhbFJvb3Q9Y3x8bnVsbDthPWIudHJhY2tzO2I9YS5sZW5ndGg7Yz1BcnJheShiKTtmb3IodmFyIGQ9e2VuZGluZ1N0YXJ0OjI0MDAsZW5kaW5nRW5kOjI0MDB9LGU9MDtlIT09YjsrK2Upe3ZhciBmPWFbZV0uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7Y1tlXT1mO2Yuc2V0dGluZ3M9CmR9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncz1kO3RoaXMuX2ludGVycG9sYW50cz1jO3RoaXMuX3Byb3BlcnR5QmluZGluZ3M9QXJyYXkoYik7dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9dGhpcy5fYnlDbGlwQ2FjaGVJbmRleD10aGlzLl9jYWNoZUluZGV4PW51bGw7dGhpcy5sb29wPTIyMDE7dGhpcy5fbG9vcENvdW50PS0xO3RoaXMuX3N0YXJ0VGltZT1udWxsO3RoaXMudGltZT0wO3RoaXMuX2VmZmVjdGl2ZVdlaWdodD10aGlzLndlaWdodD10aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy50aW1lU2NhbGU9MTt0aGlzLnJlcGV0aXRpb25zPUluZmluaXR5O3RoaXMucGF1c2VkPSExO3RoaXMuZW5hYmxlZD0hMDt0aGlzLmNsYW1wV2hlbkZpbmlzaGVkPSExO3RoaXMuemVyb1Nsb3BlQXRFbmQ9dGhpcy56ZXJvU2xvcGVBdFN0YXJ0PSEwfWZ1bmN0aW9uIFllKGEpe3RoaXMuX3Jvb3Q9YTt0aGlzLl9pbml0TWVtb3J5TWFuYWdlcigpOwp0aGlzLnRpbWU9dGhpcy5fYWNjdUluZGV4PTA7dGhpcy50aW1lU2NhbGU9MX1mdW5jdGlvbiBKZChhLGIpeyJzdHJpbmciPT09dHlwZW9mIGEmJihjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IFR5cGUgcGFyYW1ldGVyIGlzIG5vIGxvbmdlciBuZWVkZWQuIiksYT1iKTt0aGlzLnZhbHVlPWF9ZnVuY3Rpb24gbWUoKXtJLmNhbGwodGhpcyk7dGhpcy50eXBlPSJJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSI7dGhpcy5tYXhJbnN0YW5jZWRDb3VudD12b2lkIDB9ZnVuY3Rpb24gbmUoYSxiLGMsZCl7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7dGhpcy5kYXRhPWE7dGhpcy5pdGVtU2l6ZT1iO3RoaXMub2Zmc2V0PWM7dGhpcy5ub3JtYWxpemVkPSEwPT09ZH1mdW5jdGlvbiBrYyhhLGIpe3RoaXMudXVpZD1ZLmdlbmVyYXRlVVVJRCgpO3RoaXMuYXJyYXk9YTt0aGlzLnN0cmlkZT1iO3RoaXMuY291bnQ9dm9pZCAwIT09YT9hLmxlbmd0aC9iOjA7dGhpcy5keW5hbWljPSExO3RoaXMudXBkYXRlUmFuZ2U9CntvZmZzZXQ6MCxjb3VudDotMX07dGhpcy5vblVwbG9hZENhbGxiYWNrPWZ1bmN0aW9uKCl7fTt0aGlzLnZlcnNpb249MH1mdW5jdGlvbiBvZShhLGIsYyl7a2MuY2FsbCh0aGlzLGEsYik7dGhpcy5tZXNoUGVyQXR0cmlidXRlPWN8fDF9ZnVuY3Rpb24gcGUoYSxiLGMpe0wuY2FsbCh0aGlzLGEsYik7dGhpcy5tZXNoUGVyQXR0cmlidXRlPWN8fDF9ZnVuY3Rpb24gWmUoYSxiLGMsZCl7dGhpcy5yYXk9bmV3IGhiKGEsYik7dGhpcy5uZWFyPWN8fDA7dGhpcy5mYXI9ZHx8SW5maW5pdHk7dGhpcy5wYXJhbXM9e01lc2g6e30sTGluZTp7fSxMT0Q6e30sUG9pbnRzOnt0aHJlc2hvbGQ6MX0sU3ByaXRlOnt9fTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLnBhcmFtcyx7UG9pbnRDbG91ZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5SYXljYXN0ZXI6IHBhcmFtcy5Qb2ludENsb3VkIGhhcyBiZWVuIHJlbmFtZWQgdG8gcGFyYW1zLlBvaW50cy4iKTtyZXR1cm4gdGhpcy5Qb2ludHN9fX0pfQpmdW5jdGlvbiAkZShhLGIpe3JldHVybiBhLmRpc3RhbmNlLWIuZGlzdGFuY2V9ZnVuY3Rpb24gcWUoYSxiLGMsZCl7aWYoITEhPT1hLnZpc2libGUmJihhLnJheWNhc3QoYixjKSwhMD09PWQpKXthPWEuY2hpbGRyZW47ZD0wO2Zvcih2YXIgZT1hLmxlbmd0aDtkPGU7ZCsrKXFlKGFbZF0sYixjLCEwKX19ZnVuY3Rpb24gYWYoYSl7dGhpcy5hdXRvU3RhcnQ9dm9pZCAwIT09YT9hOiEwO3RoaXMuZWxhcHNlZFRpbWU9dGhpcy5vbGRUaW1lPXRoaXMuc3RhcnRUaW1lPTA7dGhpcy5ydW5uaW5nPSExfWZ1bmN0aW9uIGJmKGEsYixjKXt0aGlzLnJhZGl1cz12b2lkIDAhPT1hP2E6MTt0aGlzLnBoaT12b2lkIDAhPT1iP2I6MDt0aGlzLnRoZXRhPXZvaWQgMCE9PWM/YzowO3JldHVybiB0aGlzfWZ1bmN0aW9uIGNmKGEsYixjKXt0aGlzLnJhZGl1cz12b2lkIDAhPT1hP2E6MTt0aGlzLnRoZXRhPXZvaWQgMCE9PWI/YjowO3RoaXMueT12b2lkIDAhPT1jP2M6MDtyZXR1cm4gdGhpc31mdW5jdGlvbiByYShhLApiKXtDYS5jYWxsKHRoaXMsYSxiKTt0aGlzLmFuaW1hdGlvbnNNYXA9e307dGhpcy5hbmltYXRpb25zTGlzdD1bXTt2YXIgYz10aGlzLmdlb21ldHJ5Lm1vcnBoVGFyZ2V0cy5sZW5ndGg7dGhpcy5jcmVhdGVBbmltYXRpb24oIl9fZGVmYXVsdCIsMCxjLTEsYy8xKTt0aGlzLnNldEFuaW1hdGlvbldlaWdodCgiX19kZWZhdWx0IiwxKX1mdW5jdGlvbiAkYyhhKXtCLmNhbGwodGhpcyk7dGhpcy5tYXRlcmlhbD1hO3RoaXMucmVuZGVyPWZ1bmN0aW9uKGEpe319ZnVuY3Rpb24gYWQoYSxiLGMsZCl7dGhpcy5vYmplY3Q9YTt0aGlzLnNpemU9dm9pZCAwIT09Yj9iOjE7YT12b2lkIDAhPT1jP2M6MTY3MTE2ODA7ZD12b2lkIDAhPT1kP2Q6MTtiPTA7KGM9dGhpcy5vYmplY3QuZ2VvbWV0cnkpJiZjLmlzR2VvbWV0cnk/Yj0zKmMuZmFjZXMubGVuZ3RoOmMmJmMuaXNCdWZmZXJHZW9tZXRyeSYmKGI9Yy5hdHRyaWJ1dGVzLm5vcm1hbC5jb3VudCk7Yz1uZXcgSTtiPW5ldyBDKDYqYiwzKTtjLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLApiKTtkYS5jYWxsKHRoaXMsYyxuZXcgaGEoe2NvbG9yOmEsbGluZXdpZHRoOmR9KSk7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gbGMoYSl7Qi5jYWxsKHRoaXMpO3RoaXMubGlnaHQ9YTt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7dGhpcy5tYXRyaXg9YS5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7YT1uZXcgSTtmb3IodmFyIGI9WzAsMCwwLDAsMCwxLDAsMCwwLDEsMCwxLDAsMCwwLC0xLDAsMSwwLDAsMCwwLDEsMSwwLDAsMCwwLC0xLDFdLGM9MCxkPTE7MzI+YztjKyssZCsrKXt2YXIgZT1jLzMyKk1hdGguUEkqMixmPWQvMzIqTWF0aC5QSSoyO2IucHVzaChNYXRoLmNvcyhlKSxNYXRoLnNpbihlKSwxLE1hdGguY29zKGYpLE1hdGguc2luKGYpLDEpfWEuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMoYiwzKSk7Yj1uZXcgaGEoe2ZvZzohMX0pO3RoaXMuY29uZT1uZXcgZGEoYSxiKTt0aGlzLmFkZCh0aGlzLmNvbmUpOwp0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIG1jKGEpe3RoaXMuYm9uZXM9dGhpcy5nZXRCb25lTGlzdChhKTtmb3IodmFyIGI9bmV3IEksYz1bXSxkPVtdLGU9bmV3IEgoMCwwLDEpLGY9bmV3IEgoMCwxLDApLGc9MDtnPHRoaXMuYm9uZXMubGVuZ3RoO2crKyl7dmFyIGg9dGhpcy5ib25lc1tnXTtoLnBhcmVudCYmaC5wYXJlbnQuaXNCb25lJiYoYy5wdXNoKDAsMCwwKSxjLnB1c2goMCwwLDApLGQucHVzaChlLnIsZS5nLGUuYiksZC5wdXNoKGYucixmLmcsZi5iKSl9Yi5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhjLDMpKTtiLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBDKGQsMykpO2M9bmV3IGhhKHt2ZXJ0ZXhDb2xvcnM6MixkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0cmFuc3BhcmVudDohMH0pO2RhLmNhbGwodGhpcyxiLGMpO3RoaXMucm9vdD1hO3RoaXMubWF0cml4PWEubWF0cml4V29ybGQ7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gbmMoYSwKYil7dGhpcy5saWdodD1hO3RoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTt2YXIgYz1uZXcgbmIoYiw0LDIpLGQ9bmV3IE5hKHt3aXJlZnJhbWU6ITAsZm9nOiExfSk7ZC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpO0NhLmNhbGwodGhpcyxjLGQpO3RoaXMubWF0cml4PXRoaXMubGlnaHQubWF0cml4V29ybGQ7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExfWZ1bmN0aW9uIG9jKGEpe0IuY2FsbCh0aGlzKTt0aGlzLmxpZ2h0PWE7dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO3RoaXMubWF0cml4PWEubWF0cml4V29ybGQ7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO2E9bmV3IGhhKHtjb2xvcjphLmNvbG9yfSk7dmFyIGI9bmV3IEk7Yi5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgTChuZXcgRmxvYXQzMkFycmF5KDE1KSwzKSk7dGhpcy5hZGQobmV3IHlhKGIsYSkpO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gcGMoYSxiKXtCLmNhbGwodGhpcyk7dGhpcy5saWdodD0KYTt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7dGhpcy5tYXRyaXg9YS5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7dmFyIGM9bmV3IG1iKGIpO2Mucm90YXRlWSguNSpNYXRoLlBJKTt2YXIgZD1uZXcgTmEoe3ZlcnRleENvbG9yczoyLHdpcmVmcmFtZTohMH0pLGU9Yy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIiksZT1uZXcgRmxvYXQzMkFycmF5KDMqZS5jb3VudCk7Yy5hZGRBdHRyaWJ1dGUoImNvbG9yIixuZXcgTChlLDMpKTt0aGlzLmFkZChuZXcgQ2EoYyxkKSk7dGhpcy51cGRhdGUoKX1mdW5jdGlvbiBiZChhLGIsYyxkKXthPWF8fDEwO2I9Ynx8MTA7Yz1uZXcgSCh2b2lkIDAhPT1jP2M6NDQ3MzkyNCk7ZD1uZXcgSCh2b2lkIDAhPT1kP2Q6ODk0Nzg0OCk7dmFyIGU9Yi8yLGY9YS9iLGc9YS8yO2E9W107Zm9yKHZhciBoPVtdLGs9MCxtPTAsdT0tZztrPD1iO2srKyx1Kz1mKXthLnB1c2goLWcsMCx1LGcsMCx1KTthLnB1c2godSwwLC1nLHUsMCxnKTsKdmFyIGw9az09PWU/YzpkO2wudG9BcnJheShoLG0pO20rPTM7bC50b0FycmF5KGgsbSk7bSs9MztsLnRvQXJyYXkoaCxtKTttKz0zO2wudG9BcnJheShoLG0pO20rPTN9Yj1uZXcgSTtiLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGEsMykpO2IuYWRkQXR0cmlidXRlKCJjb2xvciIsbmV3IEMoaCwzKSk7Yz1uZXcgaGEoe3ZlcnRleENvbG9yczoyfSk7ZGEuY2FsbCh0aGlzLGIsYyl9ZnVuY3Rpb24gS2QoYSxiLGMsZCxlLGYpe2E9YXx8MTA7Yj1ifHwxNjtjPWN8fDg7ZD1kfHw2NDtlPW5ldyBIKHZvaWQgMCE9PWU/ZTo0NDczOTI0KTtmPW5ldyBIKHZvaWQgMCE9PWY/Zjo4OTQ3ODQ4KTt2YXIgZz1bXSxoPVtdLGssbSx1LGwsbjtmb3IodT0wO3U8PWI7dSsrKW09dS9iKjIqTWF0aC5QSSxrPU1hdGguc2luKG0pKmEsbT1NYXRoLmNvcyhtKSphLGcucHVzaCgwLDAsMCksZy5wdXNoKGssMCxtKSxuPXUmMT9lOmYsaC5wdXNoKG4ucixuLmcsbi5iKSxoLnB1c2gobi5yLG4uZyxuLmIpOwpmb3IodT0wO3U8PWM7dSsrKWZvcihuPXUmMT9lOmYsbD1hLWEvYyp1LGI9MDtiPGQ7YisrKW09Yi9kKjIqTWF0aC5QSSxrPU1hdGguc2luKG0pKmwsbT1NYXRoLmNvcyhtKSpsLGcucHVzaChrLDAsbSksaC5wdXNoKG4ucixuLmcsbi5iKSxtPShiKzEpL2QqMipNYXRoLlBJLGs9TWF0aC5zaW4obSkqbCxtPU1hdGguY29zKG0pKmwsZy5wdXNoKGssMCxtKSxoLnB1c2gobi5yLG4uZyxuLmIpO2E9bmV3IEk7YS5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhnLDMpKTthLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBDKGgsMykpO2c9bmV3IGhhKHt2ZXJ0ZXhDb2xvcnM6Mn0pO2RhLmNhbGwodGhpcyxhLGcpfWZ1bmN0aW9uIGNkKGEsYixjLGQpe3RoaXMub2JqZWN0PWE7dGhpcy5zaXplPXZvaWQgMCE9PWI/YjoxO2E9dm9pZCAwIT09Yz9jOjE2Nzc2OTYwO2Q9dm9pZCAwIT09ZD9kOjE7Yj0wOyhjPXRoaXMub2JqZWN0Lmdlb21ldHJ5KSYmYy5pc0dlb21ldHJ5P2I9Yy5mYWNlcy5sZW5ndGg6CmNvbnNvbGUud2FybigiVEhSRUUuRmFjZU5vcm1hbHNIZWxwZXI6IG9ubHkgVEhSRUUuR2VvbWV0cnkgaXMgc3VwcG9ydGVkLiBVc2UgVEhSRUUuVmVydGV4Tm9ybWFsc0hlbHBlciwgaW5zdGVhZC4iKTtjPW5ldyBJO2I9bmV3IEMoNipiLDMpO2MuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsYik7ZGEuY2FsbCh0aGlzLGMsbmV3IGhhKHtjb2xvcjphLGxpbmV3aWR0aDpkfSkpO3RoaXMubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIHFjKGEsYil7Qi5jYWxsKHRoaXMpO3RoaXMubGlnaHQ9YTt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7dGhpcy5tYXRyaXg9YS5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7dm9pZCAwPT09YiYmKGI9MSk7dmFyIGM9bmV3IEk7Yy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhbLWIsYiwwLGIsYiwwLGIsLWIsMCwtYiwtYiwwLC1iLGIsMF0sMykpO3ZhciBkPW5ldyBoYSh7Zm9nOiExfSk7CnRoaXMuYWRkKG5ldyB5YShjLGQpKTtjPW5ldyBJO2MuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMoWzAsMCwwLDAsMCwxXSwzKSk7dGhpcy5hZGQobmV3IHlhKGMsZCkpO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gZGQoYSl7ZnVuY3Rpb24gYihhLGIsZCl7YyhhLGQpO2MoYixkKX1mdW5jdGlvbiBjKGEsYil7Zi5wdXNoKDAsMCwwKTtnLnB1c2goYi5yLGIuZyxiLmIpO3ZvaWQgMD09PWhbYV0mJihoW2FdPVtdKTtoW2FdLnB1c2goZi5sZW5ndGgvMy0xKX12YXIgZD1uZXcgSSxlPW5ldyBoYSh7Y29sb3I6MTY3NzcyMTUsdmVydGV4Q29sb3JzOjF9KSxmPVtdLGc9W10saD17fSxrPW5ldyBIKDE2NzU1MjAwKSxtPW5ldyBIKDE2NzExNjgwKSx1PW5ldyBIKDQzNzc1KSxsPW5ldyBIKDE2Nzc3MjE1KSxuPW5ldyBIKDMzNTU0NDMpO2IoIm4xIiwibjIiLGspO2IoIm4yIiwibjQiLGspO2IoIm40IiwibjMiLGspO2IoIm4zIiwibjEiLGspO2IoImYxIiwiZjIiLGspO2IoImYyIiwiZjQiLAprKTtiKCJmNCIsImYzIixrKTtiKCJmMyIsImYxIixrKTtiKCJuMSIsImYxIixrKTtiKCJuMiIsImYyIixrKTtiKCJuMyIsImYzIixrKTtiKCJuNCIsImY0IixrKTtiKCJwIiwibjEiLG0pO2IoInAiLCJuMiIsbSk7YigicCIsIm4zIixtKTtiKCJwIiwibjQiLG0pO2IoInUxIiwidTIiLHUpO2IoInUyIiwidTMiLHUpO2IoInUzIiwidTEiLHUpO2IoImMiLCJ0IixsKTtiKCJwIiwiYyIsbik7YigiY24xIiwiY24yIixuKTtiKCJjbjMiLCJjbjQiLG4pO2IoImNmMSIsImNmMiIsbik7YigiY2YzIiwiY2Y0IixuKTtkLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGYsMykpO2QuYWRkQXR0cmlidXRlKCJjb2xvciIsbmV3IEMoZywzKSk7ZGEuY2FsbCh0aGlzLGQsZSk7dGhpcy5jYW1lcmE9YTt0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4JiZ0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7dGhpcy5tYXRyaXg9YS5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9CiExO3RoaXMucG9pbnRNYXA9aDt0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIEJiKGEsYil7dGhpcy5vYmplY3Q9YTt2b2lkIDA9PT1iJiYoYj0xNjc3Njk2MCk7dmFyIGM9bmV3IFVpbnQxNkFycmF5KFswLDEsMSwyLDIsMywzLDAsNCw1LDUsNiw2LDcsNyw0LDAsNCwxLDUsMiw2LDMsN10pLGQ9bmV3IEZsb2F0MzJBcnJheSgyNCksZT1uZXcgSTtlLnNldEluZGV4KG5ldyBMKGMsMSkpO2UuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEwoZCwzKSk7ZGEuY2FsbCh0aGlzLGUsbmV3IGhhKHtjb2xvcjpifSkpO3RoaXMubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIENiKGEsYixjLGQsZSxmKXtCLmNhbGwodGhpcyk7dm9pZCAwPT09ZCYmKGQ9MTY3NzY5NjApO3ZvaWQgMD09PWMmJihjPTEpO3ZvaWQgMD09PWUmJihlPS4yKmMpO3ZvaWQgMD09PWYmJihmPS4yKmUpO3ZvaWQgMD09PUxkJiYoTGQ9bmV3IEksTGQuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMoWzAsCjAsMCwwLDEsMF0sMykpLHJlPW5ldyBXYSgwLC41LDEsNSwxKSxyZS50cmFuc2xhdGUoMCwtLjUsMCkpO3RoaXMucG9zaXRpb24uY29weShiKTt0aGlzLmxpbmU9bmV3IHlhKExkLG5ldyBoYSh7Y29sb3I6ZH0pKTt0aGlzLmxpbmUubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLmFkZCh0aGlzLmxpbmUpO3RoaXMuY29uZT1uZXcgQ2EocmUsbmV3IE5hKHtjb2xvcjpkfSkpO3RoaXMuY29uZS5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMuYWRkKHRoaXMuY29uZSk7dGhpcy5zZXREaXJlY3Rpb24oYSk7dGhpcy5zZXRMZW5ndGgoYyxlLGYpfWZ1bmN0aW9uIE1kKGEpe2E9YXx8MTt2YXIgYj1bMCwwLDAsYSwwLDAsMCwwLDAsMCxhLDAsMCwwLDAsMCwwLGFdO2E9bmV3IEk7YS5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhiLDMpKTthLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBDKFsxLDAsMCwxLC42LDAsMCwxLDAsLjYsMSwwLDAsMCwxLDAsLjYsMV0sMykpO2I9bmV3IGhhKHt2ZXJ0ZXhDb2xvcnM6Mn0pOwpkYS5jYWxsKHRoaXMsYSxiKX1mdW5jdGlvbiBzZSgpe3ZhciBhPTAsYj0wLGM9MCxkPTA7cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKGUsZixnLGgsayl7ZT1rKihnLWUpO2g9ayooaC1mKTthPWY7Yj1lO2M9LTMqZiszKmctMiplLWg7ZD0yKmYtMipnK2UraH0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKGUsZixnLGgsayxtLHUpe2U9KChmLWUpL2stKGctZSkvKGsrbSkrKGctZikvbSkqbTtoPSgoZy1mKS9tLShoLWYpLyhtK3UpKyhoLWcpL3UpKm07YT1mO2I9ZTtjPS0zKmYrMypnLTIqZS1oO2Q9MipmLTIqZytlK2h9LGNhbGM6ZnVuY3Rpb24oZSl7dmFyIGY9ZSplO3JldHVybiBhK2IqZStjKmYrZCpmKmV9fX1mdW5jdGlvbiBKYShhKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDA7dGhpcy5wb2ludHM9YXx8W107dGhpcy5jbG9zZWQ9ITF9ZnVuY3Rpb24gZWQoYSxiLGMsZCl7dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwO3RoaXMudjA9YTt0aGlzLnYxPQpiO3RoaXMudjI9Yzt0aGlzLnYzPWR9ZnVuY3Rpb24gZmQoYSxiLGMpe3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMDt0aGlzLnYwPWE7dGhpcy52MT1iO3RoaXMudjI9Y31mdW5jdGlvbiBnZChhLGIpe3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMDt0aGlzLnYxPWE7dGhpcy52Mj1ifWZ1bmN0aW9uIE5kKGEsYixjLGQsZSxmKXtYYS5jYWxsKHRoaXMsYSxiLGMsYyxkLGUsZil9ZnVuY3Rpb24gZGYoYSl7Y29uc29sZS53YXJuKCJUSFJFRS5DbG9zZWRTcGxpbmVDdXJ2ZTMgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkNhdG11bGxSb21DdXJ2ZTMgaW5zdGVhZC4iKTtKYS5jYWxsKHRoaXMsYSk7dGhpcy50eXBlPSJjYXRtdWxscm9tIjt0aGlzLmNsb3NlZD0hMH1mdW5jdGlvbiBlZihhKXtjb25zb2xlLndhcm4oIlRIUkVFLlNwbGluZUN1cnZlMyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ2F0bXVsbFJvbUN1cnZlMyBpbnN0ZWFkLiIpO0phLmNhbGwodGhpcywKYSk7dGhpcy50eXBlPSJjYXRtdWxscm9tIn1mdW5jdGlvbiB0ZShhKXtjb25zb2xlLndhcm4oIlRIUkVFLlNwbGluZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuQ2F0bXVsbFJvbUN1cnZlMyBpbnN0ZWFkLiIpO0phLmNhbGwodGhpcyxhKTt0aGlzLnR5cGU9ImNhdG11bGxyb20ifXZvaWQgMD09PU51bWJlci5FUFNJTE9OJiYoTnVtYmVyLkVQU0lMT049TWF0aC5wb3coMiwtNTIpKTt2b2lkIDA9PT1OdW1iZXIuaXNJbnRlZ2VyJiYoTnVtYmVyLmlzSW50ZWdlcj1mdW5jdGlvbihhKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBhJiZpc0Zpbml0ZShhKSYmTWF0aC5mbG9vcihhKT09PWF9KTt2b2lkIDA9PT1NYXRoLnNpZ24mJihNYXRoLnNpZ249ZnVuY3Rpb24oYSl7cmV0dXJuIDA+YT8tMTowPGE/MTorYX0pO3ZvaWQgMD09PUZ1bmN0aW9uLnByb3RvdHlwZS5uYW1lJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCJuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoKS5tYXRjaCgvXlxzKmZ1bmN0aW9uXHMqKFteXChcc10qKS8pWzFdfX0pOwp2b2lkIDA9PT1PYmplY3QuYXNzaWduJiZmdW5jdGlvbigpe09iamVjdC5hc3NpZ249ZnVuY3Rpb24oYSl7aWYodm9pZCAwPT09YXx8bnVsbD09PWEpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Iik7Zm9yKHZhciBiPU9iamVjdChhKSxjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7dmFyIGQ9YXJndW1lbnRzW2NdO2lmKHZvaWQgMCE9PWQmJm51bGwhPT1kKWZvcih2YXIgZSBpbiBkKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLGUpJiYoYltlXT1kW2VdKX1yZXR1cm4gYn19KCk7T2JqZWN0LmFzc2lnbihzYS5wcm90b3R5cGUse2FkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMmJih0aGlzLl9saXN0ZW5lcnM9e30pO3ZhciBjPXRoaXMuX2xpc3RlbmVyczt2b2lkIDA9PT1jW2FdJiYoY1thXT1bXSk7LTE9PT1jW2FdLmluZGV4T2YoYikmJmNbYV0ucHVzaChiKX0sCmhhc0V2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuITE7dmFyIGM9dGhpcy5fbGlzdGVuZXJzO3JldHVybiB2b2lkIDAhPT1jW2FdJiYtMSE9PWNbYV0uaW5kZXhPZihiKX0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe2lmKHZvaWQgMCE9PXRoaXMuX2xpc3RlbmVycyl7dmFyIGM9dGhpcy5fbGlzdGVuZXJzW2FdO2lmKHZvaWQgMCE9PWMpe3ZhciBkPWMuaW5kZXhPZihiKTstMSE9PWQmJmMuc3BsaWNlKGQsMSl9fX0sZGlzcGF0Y2hFdmVudDpmdW5jdGlvbihhKXtpZih2b2lkIDAhPT10aGlzLl9saXN0ZW5lcnMpe3ZhciBiPXRoaXMuX2xpc3RlbmVyc1thLnR5cGVdO2lmKHZvaWQgMCE9PWIpe2EudGFyZ2V0PXRoaXM7dmFyIGM9W10sZCxlPWIubGVuZ3RoO2ZvcihkPTA7ZDxlO2QrKyljW2RdPWJbZF07Zm9yKGQ9MDtkPGU7ZCsrKWNbZF0uY2FsbCh0aGlzLGEpfX19fSk7dmFyIFk9e0RFRzJSQUQ6TWF0aC5QSS8KMTgwLFJBRDJERUc6MTgwL01hdGguUEksZ2VuZXJhdGVVVUlEOmZ1bmN0aW9uKCl7dmFyIGE9IjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ii5zcGxpdCgiIiksYj1BcnJheSgzNiksYz0wLGQ7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7MzY+ZTtlKyspOD09PWV8fDEzPT09ZXx8MTg9PT1lfHwyMz09PWU/YltlXT0iLSI6MTQ9PT1lP2JbZV09IjQiOigyPj1jJiYoYz0zMzU1NDQzMisxNjc3NzIxNipNYXRoLnJhbmRvbSgpfDApLGQ9YyYxNSxjPj49NCxiW2VdPWFbMTk9PT1lP2QmM3w4OmRdKTtyZXR1cm4gYi5qb2luKCIiKX19KCksY2xhbXA6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBNYXRoLm1heChiLE1hdGgubWluKGMsYSkpfSxldWNsaWRlYW5Nb2R1bG86ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYSViK2IpJWJ9LG1hcExpbmVhcjpmdW5jdGlvbihhLGIsYyxkLGUpe3JldHVybiBkKyhhLWIpKihlLWQpLyhjLQpiKX0sbGVycDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuKDEtYykqYStjKmJ9LHNtb290aHN0ZXA6ZnVuY3Rpb24oYSxiLGMpe2lmKGE8PWIpcmV0dXJuIDA7aWYoYT49YylyZXR1cm4gMTthPShhLWIpLyhjLWIpO3JldHVybiBhKmEqKDMtMiphKX0sc21vb3RoZXJzdGVwOmZ1bmN0aW9uKGEsYixjKXtpZihhPD1iKXJldHVybiAwO2lmKGE+PWMpcmV0dXJuIDE7YT0oYS1iKS8oYy1iKTtyZXR1cm4gYSphKmEqKGEqKDYqYS0xNSkrMTApfSxyYW5kSW50OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGErTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihiLWErMSkpfSxyYW5kRmxvYXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYStNYXRoLnJhbmRvbSgpKihiLWEpfSxyYW5kRmxvYXRTcHJlYWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEqKC41LU1hdGgucmFuZG9tKCkpfSxkZWdUb1JhZDpmdW5jdGlvbihhKXtyZXR1cm4gYSpZLkRFRzJSQUR9LHJhZFRvRGVnOmZ1bmN0aW9uKGEpe3JldHVybiBhKlkuUkFEMkRFR30sCmlzUG93ZXJPZlR3bzpmdW5jdGlvbihhKXtyZXR1cm4gMD09PShhJmEtMSkmJjAhPT1hfSxuZWFyZXN0UG93ZXJPZlR3bzpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLnJvdW5kKE1hdGgubG9nKGEpL01hdGguTE4yKSl9LG5leHRQb3dlck9mVHdvOmZ1bmN0aW9uKGEpe2EtLTthfD1hPj4xO2F8PWE+PjI7YXw9YT4+NDthfD1hPj44O2F8PWE+PjE2O2ErKztyZXR1cm4gYX19O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEQucHJvdG90eXBlLHt3aWR0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMueD1hfX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy55PWF9fX0pO09iamVjdC5hc3NpZ24oRC5wcm90b3R5cGUse2lzVmVjdG9yMjohMCxzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLng9YTt0aGlzLnk9YjtyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueT0KdGhpcy54PWE7cmV0dXJuIHRoaXN9LHNldFg6ZnVuY3Rpb24oYSl7dGhpcy54PWE7cmV0dXJuIHRoaXN9LHNldFk6ZnVuY3Rpb24oYSl7dGhpcy55PWE7cmV0dXJuIHRoaXN9LHNldENvbXBvbmVudDpmdW5jdGlvbihhLGIpe3N3aXRjaChhKXtjYXNlIDA6dGhpcy54PWI7YnJlYWs7Y2FzZSAxOnRoaXMueT1iO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIithKTt9cmV0dXJuIHRoaXN9LGdldENvbXBvbmVudDpmdW5jdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK2EpO319LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnkpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMueD1hLng7dGhpcy55PWEueTtyZXR1cm4gdGhpc30sYWRkOmZ1bmN0aW9uKGEsCmIpe2lmKHZvaWQgMCE9PWIpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyhhLGIpO3RoaXMueCs9YS54O3RoaXMueSs9YS55O3JldHVybiB0aGlzfSxhZGRTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy54Kz1hO3RoaXMueSs9YTtyZXR1cm4gdGhpc30sYWRkVmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngrYi54O3RoaXMueT1hLnkrYi55O3JldHVybiB0aGlzfSxhZGRTY2FsZWRWZWN0b3I6ZnVuY3Rpb24oYSxiKXt0aGlzLngrPWEueCpiO3RoaXMueSs9YS55KmI7cmV0dXJuIHRoaXN9LHN1YjpmdW5jdGlvbihhLGIpe2lmKHZvaWQgMCE9PWIpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLAp0aGlzLnN1YlZlY3RvcnMoYSxiKTt0aGlzLngtPWEueDt0aGlzLnktPWEueTtyZXR1cm4gdGhpc30sc3ViU2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueC09YTt0aGlzLnktPWE7cmV0dXJuIHRoaXN9LHN1YlZlY3RvcnM6ZnVuY3Rpb24oYSxiKXt0aGlzLng9YS54LWIueDt0aGlzLnk9YS55LWIueTtyZXR1cm4gdGhpc30sbXVsdGlwbHk6ZnVuY3Rpb24oYSl7dGhpcy54Kj1hLng7dGhpcy55Kj1hLnk7cmV0dXJuIHRoaXN9LG11bHRpcGx5U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueCo9YTt0aGlzLnkqPWE7cmV0dXJuIHRoaXN9LGRpdmlkZTpmdW5jdGlvbihhKXt0aGlzLngvPWEueDt0aGlzLnkvPWEueTtyZXR1cm4gdGhpc30sZGl2aWRlU2NhbGFyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvYSl9LG1pbjpmdW5jdGlvbihhKXt0aGlzLng9TWF0aC5taW4odGhpcy54LGEueCk7dGhpcy55PU1hdGgubWluKHRoaXMueSxhLnkpO3JldHVybiB0aGlzfSxtYXg6ZnVuY3Rpb24oYSl7dGhpcy54PQpNYXRoLm1heCh0aGlzLngsYS54KTt0aGlzLnk9TWF0aC5tYXgodGhpcy55LGEueSk7cmV0dXJuIHRoaXN9LGNsYW1wOmZ1bmN0aW9uKGEsYil7dGhpcy54PU1hdGgubWF4KGEueCxNYXRoLm1pbihiLngsdGhpcy54KSk7dGhpcy55PU1hdGgubWF4KGEueSxNYXRoLm1pbihiLnksdGhpcy55KSk7cmV0dXJuIHRoaXN9LGNsYW1wU2NhbGFyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEQsYj1uZXcgRDtyZXR1cm4gZnVuY3Rpb24oYyxkKXthLnNldChjLGMpO2Iuc2V0KGQsZCk7cmV0dXJuIHRoaXMuY2xhbXAoYSxiKX19KCksY2xhbXBMZW5ndGg6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KGEsTWF0aC5taW4oYixjKSkvYyl9LGZsb29yOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGguZmxvb3IodGhpcy54KTt0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpO3JldHVybiB0aGlzfSxjZWlsOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGguY2VpbCh0aGlzLngpOwp0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSk7cmV0dXJuIHRoaXN9LHJvdW5kOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGgucm91bmQodGhpcy54KTt0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpO3JldHVybiB0aGlzfSxyb3VuZFRvWmVybzpmdW5jdGlvbigpe3RoaXMueD0wPnRoaXMueD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCk7dGhpcy55PTA+dGhpcy55P01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KTtyZXR1cm4gdGhpc30sbmVnYXRlOmZ1bmN0aW9uKCl7dGhpcy54PS10aGlzLng7dGhpcy55PS10aGlzLnk7cmV0dXJuIHRoaXN9LGRvdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy54KmEueCt0aGlzLnkqYS55fSxsZW5ndGhTcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnl9LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55KX0sbGVuZ3RoTWFuaGF0dGFuOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrCk1hdGguYWJzKHRoaXMueSl9LG5vcm1hbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpKX0sYW5nbGU6ZnVuY3Rpb24oKXt2YXIgYT1NYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpOzA+YSYmKGErPTIqTWF0aC5QSSk7cmV0dXJuIGF9LGRpc3RhbmNlVG86ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKGEpKX0sZGlzdGFuY2VUb1NxdWFyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54LWEueDthPXRoaXMueS1hLnk7cmV0dXJuIGIqYithKmF9LGRpc3RhbmNlVG9NYW5oYXR0YW46ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC1hLngpK01hdGguYWJzKHRoaXMueS1hLnkpfSxzZXRMZW5ndGg6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoYS90aGlzLmxlbmd0aCgpKX0sbGVycDpmdW5jdGlvbihhLGIpe3RoaXMueCs9KGEueC10aGlzLngpKmI7dGhpcy55Kz0KKGEueS10aGlzLnkpKmI7cmV0dXJuIHRoaXN9LGxlcnBWZWN0b3JzOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5zdWJWZWN0b3JzKGIsYSkubXVsdGlwbHlTY2FsYXIoYykuYWRkKGEpfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEueD09PXRoaXMueCYmYS55PT09dGhpcy55fSxmcm9tQXJyYXk6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0wKTt0aGlzLng9YVtiXTt0aGlzLnk9YVtiKzFdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YSYmKGE9W10pO3ZvaWQgMD09PWImJihiPTApO2FbYl09dGhpcy54O2FbYisxXT10aGlzLnk7cmV0dXJuIGF9LGZyb21CdWZmZXJBdHRyaWJ1dGU6ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMCE9PWMmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpO3RoaXMueD1hLmdldFgoYik7dGhpcy55PWEuZ2V0WShiKTsKcmV0dXJuIHRoaXN9LHJvdGF0ZUFyb3VuZDpmdW5jdGlvbihhLGIpe3ZhciBjPU1hdGguY29zKGIpLGQ9TWF0aC5zaW4oYiksZT10aGlzLngtYS54LGY9dGhpcy55LWEueTt0aGlzLng9ZSpjLWYqZCthLng7dGhpcy55PWUqZCtmKmMrYS55O3JldHVybiB0aGlzfX0pO3ZhciBqZj0wO1guREVGQVVMVF9JTUFHRT12b2lkIDA7WC5ERUZBVUxUX01BUFBJTkc9MzAwO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLnByb3RvdHlwZSwibmVlZHNVcGRhdGUiLHtzZXQ6ZnVuY3Rpb24oYSl7ITA9PT1hJiZ0aGlzLnZlcnNpb24rK319KTtPYmplY3QuYXNzaWduKFgucHJvdG90eXBlLHNhLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6WCxpc1RleHR1cmU6ITAsY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5uYW1lPWEubmFtZTt0aGlzLmltYWdlPWEuaW1hZ2U7dGhpcy5taXBtYXBzPWEubWlwbWFwcy5zbGljZSgwKTsKdGhpcy5tYXBwaW5nPWEubWFwcGluZzt0aGlzLndyYXBTPWEud3JhcFM7dGhpcy53cmFwVD1hLndyYXBUO3RoaXMubWFnRmlsdGVyPWEubWFnRmlsdGVyO3RoaXMubWluRmlsdGVyPWEubWluRmlsdGVyO3RoaXMuYW5pc290cm9weT1hLmFuaXNvdHJvcHk7dGhpcy5mb3JtYXQ9YS5mb3JtYXQ7dGhpcy50eXBlPWEudHlwZTt0aGlzLm9mZnNldC5jb3B5KGEub2Zmc2V0KTt0aGlzLnJlcGVhdC5jb3B5KGEucmVwZWF0KTt0aGlzLmdlbmVyYXRlTWlwbWFwcz1hLmdlbmVyYXRlTWlwbWFwczt0aGlzLnByZW11bHRpcGx5QWxwaGE9YS5wcmVtdWx0aXBseUFscGhhO3RoaXMuZmxpcFk9YS5mbGlwWTt0aGlzLnVucGFja0FsaWdubWVudD1hLnVucGFja0FsaWdubWVudDt0aGlzLmVuY29kaW5nPWEuZW5jb2Rpbmc7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihhKXtpZih2b2lkIDAhPT1hLnRleHR1cmVzW3RoaXMudXVpZF0pcmV0dXJuIGEudGV4dHVyZXNbdGhpcy51dWlkXTt2YXIgYj17bWV0YWRhdGE6e3ZlcnNpb246NC41LAp0eXBlOiJUZXh0dXJlIixnZW5lcmF0b3I6IlRleHR1cmUudG9KU09OIn0sdXVpZDp0aGlzLnV1aWQsbmFtZTp0aGlzLm5hbWUsbWFwcGluZzp0aGlzLm1hcHBpbmcscmVwZWF0Olt0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnldLG9mZnNldDpbdGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55XSx3cmFwOlt0aGlzLndyYXBTLHRoaXMud3JhcFRdLG1pbkZpbHRlcjp0aGlzLm1pbkZpbHRlcixtYWdGaWx0ZXI6dGhpcy5tYWdGaWx0ZXIsYW5pc290cm9weTp0aGlzLmFuaXNvdHJvcHksZmxpcFk6dGhpcy5mbGlwWX07aWYodm9pZCAwIT09dGhpcy5pbWFnZSl7dmFyIGM9dGhpcy5pbWFnZTt2b2lkIDA9PT1jLnV1aWQmJihjLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKSk7aWYodm9pZCAwPT09YS5pbWFnZXNbYy51dWlkXSl7dmFyIGQ9YS5pbWFnZXMsZT1jLnV1aWQsZj1jLnV1aWQsZzt2b2lkIDAhPT1jLnRvRGF0YVVSTD9nPWM6KGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwKImNhbnZhcyIpLGcud2lkdGg9Yy53aWR0aCxnLmhlaWdodD1jLmhlaWdodCxnLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKGMsMCwwLGMud2lkdGgsYy5oZWlnaHQpKTtnPTIwNDg8Zy53aWR0aHx8MjA0ODxnLmhlaWdodD9nLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpOmcudG9EYXRhVVJMKCJpbWFnZS9wbmciKTtkW2VdPXt1dWlkOmYsdXJsOmd9fWIuaW1hZ2U9Yy51dWlkfXJldHVybiBhLnRleHR1cmVzW3RoaXMudXVpZF09Yn0sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX0sdHJhbnNmb3JtVXY6ZnVuY3Rpb24oYSl7aWYoMzAwPT09dGhpcy5tYXBwaW5nKXthLm11bHRpcGx5KHRoaXMucmVwZWF0KTthLmFkZCh0aGlzLm9mZnNldCk7aWYoMD5hLnh8fDE8YS54KXN3aXRjaCh0aGlzLndyYXBTKXtjYXNlIDFFMzphLngtPU1hdGguZmxvb3IoYS54KTticmVhaztjYXNlIDEwMDE6YS54PTA+YS54PzA6MTticmVhaztjYXNlIDEwMDI6YS54PQoxPT09TWF0aC5hYnMoTWF0aC5mbG9vcihhLngpJTIpP01hdGguY2VpbChhLngpLWEueDphLngtTWF0aC5mbG9vcihhLngpfWlmKDA+YS55fHwxPGEueSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSAxRTM6YS55LT1NYXRoLmZsb29yKGEueSk7YnJlYWs7Y2FzZSAxMDAxOmEueT0wPmEueT8wOjE7YnJlYWs7Y2FzZSAxMDAyOmEueT0xPT09TWF0aC5hYnMoTWF0aC5mbG9vcihhLnkpJTIpP01hdGguY2VpbChhLnkpLWEueTphLnktTWF0aC5mbG9vcihhLnkpfXRoaXMuZmxpcFkmJihhLnk9MS1hLnkpfX19KTtPYmplY3QuYXNzaWduKGdhLnByb3RvdHlwZSx7aXNWZWN0b3I0OiEwLHNldDpmdW5jdGlvbihhLGIsYyxkKXt0aGlzLng9YTt0aGlzLnk9Yjt0aGlzLno9Yzt0aGlzLnc9ZDtyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMudz10aGlzLno9dGhpcy55PXRoaXMueD1hO3JldHVybiB0aGlzfSxzZXRYOmZ1bmN0aW9uKGEpe3RoaXMueD1hO3JldHVybiB0aGlzfSwKc2V0WTpmdW5jdGlvbihhKXt0aGlzLnk9YTtyZXR1cm4gdGhpc30sc2V0WjpmdW5jdGlvbihhKXt0aGlzLno9YTtyZXR1cm4gdGhpc30sc2V0VzpmdW5jdGlvbihhKXt0aGlzLnc9YTtyZXR1cm4gdGhpc30sc2V0Q29tcG9uZW50OmZ1bmN0aW9uKGEsYil7c3dpdGNoKGEpe2Nhc2UgMDp0aGlzLng9YjticmVhaztjYXNlIDE6dGhpcy55PWI7YnJlYWs7Y2FzZSAyOnRoaXMuej1iO2JyZWFrO2Nhc2UgMzp0aGlzLnc9YjticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrYSk7fXJldHVybiB0aGlzfSxnZXRDb21wb25lbnQ6ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIithKTt9fSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsCnRoaXMueSx0aGlzLnosdGhpcy53KX0sY29weTpmdW5jdGlvbihhKXt0aGlzLng9YS54O3RoaXMueT1hLnk7dGhpcy56PWEuejt0aGlzLnc9dm9pZCAwIT09YS53P2EudzoxO3JldHVybiB0aGlzfSxhZGQ6ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDAhPT1iKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnMoYSxiKTt0aGlzLngrPWEueDt0aGlzLnkrPWEueTt0aGlzLnorPWEuejt0aGlzLncrPWEudztyZXR1cm4gdGhpc30sYWRkU2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueCs9YTt0aGlzLnkrPWE7dGhpcy56Kz1hO3RoaXMudys9YTtyZXR1cm4gdGhpc30sYWRkVmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngrYi54O3RoaXMueT1hLnkrYi55O3RoaXMuej1hLnorYi56O3RoaXMudz1hLncrYi53O3JldHVybiB0aGlzfSwKYWRkU2NhbGVkVmVjdG9yOmZ1bmN0aW9uKGEsYil7dGhpcy54Kz1hLngqYjt0aGlzLnkrPWEueSpiO3RoaXMueis9YS56KmI7dGhpcy53Kz1hLncqYjtyZXR1cm4gdGhpc30sc3ViOmZ1bmN0aW9uKGEsYil7aWYodm9pZCAwIT09YilyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKGEsYik7dGhpcy54LT1hLng7dGhpcy55LT1hLnk7dGhpcy56LT1hLno7dGhpcy53LT1hLnc7cmV0dXJuIHRoaXN9LHN1YlNjYWxhcjpmdW5jdGlvbihhKXt0aGlzLngtPWE7dGhpcy55LT1hO3RoaXMuei09YTt0aGlzLnctPWE7cmV0dXJuIHRoaXN9LHN1YlZlY3RvcnM6ZnVuY3Rpb24oYSxiKXt0aGlzLng9YS54LWIueDt0aGlzLnk9YS55LWIueTt0aGlzLno9YS56LWIuejt0aGlzLnc9YS53LWIudztyZXR1cm4gdGhpc30sbXVsdGlwbHlTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy54Kj0KYTt0aGlzLnkqPWE7dGhpcy56Kj1hO3RoaXMudyo9YTtyZXR1cm4gdGhpc30sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMueCxjPXRoaXMueSxkPXRoaXMueixlPXRoaXMudzthPWEuZWxlbWVudHM7dGhpcy54PWFbMF0qYithWzRdKmMrYVs4XSpkK2FbMTJdKmU7dGhpcy55PWFbMV0qYithWzVdKmMrYVs5XSpkK2FbMTNdKmU7dGhpcy56PWFbMl0qYithWzZdKmMrYVsxMF0qZCthWzE0XSplO3RoaXMudz1hWzNdKmIrYVs3XSpjK2FbMTFdKmQrYVsxNV0qZTtyZXR1cm4gdGhpc30sZGl2aWRlU2NhbGFyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvYSl9LHNldEF4aXNBbmdsZUZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKGEpe3RoaXMudz0yKk1hdGguYWNvcyhhLncpO3ZhciBiPU1hdGguc3FydCgxLWEudyphLncpOzFFLTQ+Yj8odGhpcy54PTEsdGhpcy56PXRoaXMueT0wKToodGhpcy54PWEueC9iLHRoaXMueT1hLnkvYix0aGlzLno9YS56LwpiKTtyZXR1cm4gdGhpc30sc2V0QXhpc0FuZ2xlRnJvbVJvdGF0aW9uTWF0cml4OmZ1bmN0aW9uKGEpe3ZhciBiLGMsZDthPWEuZWxlbWVudHM7dmFyIGU9YVswXTtkPWFbNF07dmFyIGY9YVs4XSxnPWFbMV0saD1hWzVdLGs9YVs5XTtjPWFbMl07Yj1hWzZdO3ZhciBtPWFbMTBdO2lmKC4wMT5NYXRoLmFicyhkLWcpJiYuMDE+TWF0aC5hYnMoZi1jKSYmLjAxPk1hdGguYWJzKGstYikpe2lmKC4xPk1hdGguYWJzKGQrZykmJi4xPk1hdGguYWJzKGYrYykmJi4xPk1hdGguYWJzKGsrYikmJi4xPk1hdGguYWJzKGUraCttLTMpKXJldHVybiB0aGlzLnNldCgxLDAsMCwwKSx0aGlzO2E9TWF0aC5QSTtlPShlKzEpLzI7aD0oaCsxKS8yO209KG0rMSkvMjtkPShkK2cpLzQ7Zj0oZitjKS80O2s9KGsrYikvNDtlPmgmJmU+bT8uMDE+ZT8oYj0wLGQ9Yz0uNzA3MTA2NzgxKTooYj1NYXRoLnNxcnQoZSksYz1kL2IsZD1mL2IpOmg+bT8uMDE+aD8oYj0uNzA3MTA2NzgxLGM9MCxkPS43MDcxMDY3ODEpOgooYz1NYXRoLnNxcnQoaCksYj1kL2MsZD1rL2MpOi4wMT5tPyhjPWI9LjcwNzEwNjc4MSxkPTApOihkPU1hdGguc3FydChtKSxiPWYvZCxjPWsvZCk7dGhpcy5zZXQoYixjLGQsYSk7cmV0dXJuIHRoaXN9YT1NYXRoLnNxcnQoKGItaykqKGItaykrKGYtYykqKGYtYykrKGctZCkqKGctZCkpOy4wMDE+TWF0aC5hYnMoYSkmJihhPTEpO3RoaXMueD0oYi1rKS9hO3RoaXMueT0oZi1jKS9hO3RoaXMuej0oZy1kKS9hO3RoaXMudz1NYXRoLmFjb3MoKGUraCttLTEpLzIpO3JldHVybiB0aGlzfSxtaW46ZnVuY3Rpb24oYSl7dGhpcy54PU1hdGgubWluKHRoaXMueCxhLngpO3RoaXMueT1NYXRoLm1pbih0aGlzLnksYS55KTt0aGlzLno9TWF0aC5taW4odGhpcy56LGEueik7dGhpcy53PU1hdGgubWluKHRoaXMudyxhLncpO3JldHVybiB0aGlzfSxtYXg6ZnVuY3Rpb24oYSl7dGhpcy54PU1hdGgubWF4KHRoaXMueCxhLngpO3RoaXMueT1NYXRoLm1heCh0aGlzLnksYS55KTt0aGlzLno9TWF0aC5tYXgodGhpcy56LAphLnopO3RoaXMudz1NYXRoLm1heCh0aGlzLncsYS53KTtyZXR1cm4gdGhpc30sY2xhbXA6ZnVuY3Rpb24oYSxiKXt0aGlzLng9TWF0aC5tYXgoYS54LE1hdGgubWluKGIueCx0aGlzLngpKTt0aGlzLnk9TWF0aC5tYXgoYS55LE1hdGgubWluKGIueSx0aGlzLnkpKTt0aGlzLno9TWF0aC5tYXgoYS56LE1hdGgubWluKGIueix0aGlzLnopKTt0aGlzLnc9TWF0aC5tYXgoYS53LE1hdGgubWluKGIudyx0aGlzLncpKTtyZXR1cm4gdGhpc30sY2xhbXBTY2FsYXI6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZ2EsYj1uZXcgZ2E7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7YS5zZXQoYyxjLGMsYyk7Yi5zZXQoZCxkLGQsZCk7cmV0dXJuIHRoaXMuY2xhbXAoYSxiKX19KCksZmxvb3I6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpO3RoaXMueT1NYXRoLmZsb29yKHRoaXMueSk7dGhpcy56PU1hdGguZmxvb3IodGhpcy56KTt0aGlzLnc9TWF0aC5mbG9vcih0aGlzLncpO3JldHVybiB0aGlzfSwKY2VpbDpmdW5jdGlvbigpe3RoaXMueD1NYXRoLmNlaWwodGhpcy54KTt0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSk7dGhpcy56PU1hdGguY2VpbCh0aGlzLnopO3RoaXMudz1NYXRoLmNlaWwodGhpcy53KTtyZXR1cm4gdGhpc30scm91bmQ6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpO3RoaXMueT1NYXRoLnJvdW5kKHRoaXMueSk7dGhpcy56PU1hdGgucm91bmQodGhpcy56KTt0aGlzLnc9TWF0aC5yb3VuZCh0aGlzLncpO3JldHVybiB0aGlzfSxyb3VuZFRvWmVybzpmdW5jdGlvbigpe3RoaXMueD0wPnRoaXMueD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCk7dGhpcy55PTA+dGhpcy55P01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KTt0aGlzLno9MD50aGlzLno/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopO3RoaXMudz0wPnRoaXMudz9NYXRoLmNlaWwodGhpcy53KTpNYXRoLmZsb29yKHRoaXMudyk7cmV0dXJuIHRoaXN9LApuZWdhdGU6ZnVuY3Rpb24oKXt0aGlzLng9LXRoaXMueDt0aGlzLnk9LXRoaXMueTt0aGlzLno9LXRoaXMuejt0aGlzLnc9LXRoaXMudztyZXR1cm4gdGhpc30sZG90OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLngqYS54K3RoaXMueSphLnkrdGhpcy56KmEueit0aGlzLncqYS53fSxsZW5ndGhTcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53fSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLncpfSxsZW5ndGhNYW5oYXR0YW46ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueikrTWF0aC5hYnModGhpcy53KX0sbm9ybWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCkpfSwKc2V0TGVuZ3RoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKGEvdGhpcy5sZW5ndGgoKSl9LGxlcnA6ZnVuY3Rpb24oYSxiKXt0aGlzLngrPShhLngtdGhpcy54KSpiO3RoaXMueSs9KGEueS10aGlzLnkpKmI7dGhpcy56Kz0oYS56LXRoaXMueikqYjt0aGlzLncrPShhLnctdGhpcy53KSpiO3JldHVybiB0aGlzfSxsZXJwVmVjdG9yczpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuc3ViVmVjdG9ycyhiLGEpLm11bHRpcGx5U2NhbGFyKGMpLmFkZChhKX0sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLng9PT10aGlzLngmJmEueT09PXRoaXMueSYmYS56PT09dGhpcy56JiZhLnc9PT10aGlzLnd9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO3RoaXMueD1hW2JdO3RoaXMueT1hW2IrMV07dGhpcy56PWFbYisyXTt0aGlzLnc9YVtiKzNdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YSYmKGE9CltdKTt2b2lkIDA9PT1iJiYoYj0wKTthW2JdPXRoaXMueDthW2IrMV09dGhpcy55O2FbYisyXT10aGlzLno7YVtiKzNdPXRoaXMudztyZXR1cm4gYX0sZnJvbUJ1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbihhLGIsYyl7dm9pZCAwIT09YyYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7dGhpcy54PWEuZ2V0WChiKTt0aGlzLnk9YS5nZXRZKGIpO3RoaXMuej1hLmdldFooYik7dGhpcy53PWEuZ2V0VyhiKTtyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKERiLnByb3RvdHlwZSxzYS5wcm90b3R5cGUse2lzV2ViR0xSZW5kZXJUYXJnZXQ6ITAsc2V0U2l6ZTpmdW5jdGlvbihhLGIpe2lmKHRoaXMud2lkdGghPT1hfHx0aGlzLmhlaWdodCE9PWIpdGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWIsdGhpcy5kaXNwb3NlKCk7dGhpcy52aWV3cG9ydC5zZXQoMCwwLGEsYik7dGhpcy5zY2lzc29yLnNldCgwLAowLGEsYil9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMud2lkdGg9YS53aWR0aDt0aGlzLmhlaWdodD1hLmhlaWdodDt0aGlzLnZpZXdwb3J0LmNvcHkoYS52aWV3cG9ydCk7dGhpcy50ZXh0dXJlPWEudGV4dHVyZS5jbG9uZSgpO3RoaXMuZGVwdGhCdWZmZXI9YS5kZXB0aEJ1ZmZlcjt0aGlzLnN0ZW5jaWxCdWZmZXI9YS5zdGVuY2lsQnVmZmVyO3RoaXMuZGVwdGhUZXh0dXJlPWEuZGVwdGhUZXh0dXJlO3JldHVybiB0aGlzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX0pO0ViLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKERiLnByb3RvdHlwZSk7RWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUViO0ViLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZT0hMDtPYmplY3QuYXNzaWduKHFhLHtzbGVycDpmdW5jdGlvbihhLGIsCmMsZCl7cmV0dXJuIGMuY29weShhKS5zbGVycChiLGQpfSxzbGVycEZsYXQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9Y1tkKzBdLGs9Y1tkKzFdLG09Y1tkKzJdO2M9Y1tkKzNdO2Q9ZVtmKzBdO3ZhciB1PWVbZisxXSxsPWVbZisyXTtlPWVbZiszXTtpZihjIT09ZXx8aCE9PWR8fGshPT11fHxtIT09bCl7Zj0xLWc7dmFyIG49aCpkK2sqdSttKmwrYyplLHI9MDw9bj8xOi0xLHA9MS1uKm47cD5OdW1iZXIuRVBTSUxPTiYmKHA9TWF0aC5zcXJ0KHApLG49TWF0aC5hdGFuMihwLG4qciksZj1NYXRoLnNpbihmKm4pL3AsZz1NYXRoLnNpbihnKm4pL3ApO3IqPWc7aD1oKmYrZCpyO2s9aypmK3UqcjttPW0qZitsKnI7Yz1jKmYrZSpyO2Y9PT0xLWcmJihnPTEvTWF0aC5zcXJ0KGgqaCtrKmsrbSptK2MqYyksaCo9ZyxrKj1nLG0qPWcsYyo9Zyl9YVtiXT1oO2FbYisxXT1rO2FbYisyXT1tO2FbYiszXT1jfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHFhLnByb3RvdHlwZSx7eDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LApzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feD1hO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpfX0seTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihhKXt0aGlzLl95PWE7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9fSx6OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fen0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3o9YTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKX19LHc6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5fdz1hO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpfX19KTtPYmplY3QuYXNzaWduKHFhLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuX3g9YTt0aGlzLl95PWI7dGhpcy5fej1jO3RoaXMuX3c9ZDt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osCnRoaXMuX3cpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMuX3g9YS54O3RoaXMuX3k9YS55O3RoaXMuX3o9YS56O3RoaXMuX3c9YS53O3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzZXRGcm9tRXVsZXI6ZnVuY3Rpb24oYSxiKXtpZighMT09PShhJiZhLmlzRXVsZXIpKXRocm93IEVycm9yKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTt2YXIgYz1hLl94LGQ9YS5feSxlPWEuX3osZj1hLm9yZGVyLGc9TWF0aC5jb3MsaD1NYXRoLnNpbixrPWcoYy8yKSxtPWcoZC8yKSxnPWcoZS8yKSxjPWgoYy8yKSxkPWgoZC8yKSxlPWgoZS8yKTsiWFlaIj09PWY/KHRoaXMuX3g9YyptKmcraypkKmUsdGhpcy5feT1rKmQqZy1jKm0qZSx0aGlzLl96PWsqbSplK2MqZCpnLHRoaXMuX3c9ayptKmctYypkKmUpOiJZWFoiPT09Zj8odGhpcy5feD1jKm0qZysKaypkKmUsdGhpcy5feT1rKmQqZy1jKm0qZSx0aGlzLl96PWsqbSplLWMqZCpnLHRoaXMuX3c9ayptKmcrYypkKmUpOiJaWFkiPT09Zj8odGhpcy5feD1jKm0qZy1rKmQqZSx0aGlzLl95PWsqZCpnK2MqbSplLHRoaXMuX3o9ayptKmUrYypkKmcsdGhpcy5fdz1rKm0qZy1jKmQqZSk6IlpZWCI9PT1mPyh0aGlzLl94PWMqbSpnLWsqZCplLHRoaXMuX3k9aypkKmcrYyptKmUsdGhpcy5fej1rKm0qZS1jKmQqZyx0aGlzLl93PWsqbSpnK2MqZCplKToiWVpYIj09PWY/KHRoaXMuX3g9YyptKmcraypkKmUsdGhpcy5feT1rKmQqZytjKm0qZSx0aGlzLl96PWsqbSplLWMqZCpnLHRoaXMuX3c9ayptKmctYypkKmUpOiJYWlkiPT09ZiYmKHRoaXMuX3g9YyptKmctaypkKmUsdGhpcy5feT1rKmQqZy1jKm0qZSx0aGlzLl96PWsqbSplK2MqZCpnLHRoaXMuX3c9ayptKmcrYypkKmUpO2lmKCExIT09Yil0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sc2V0RnJvbUF4aXNBbmdsZTpmdW5jdGlvbihhLApiKXt2YXIgYz1iLzIsZD1NYXRoLnNpbihjKTt0aGlzLl94PWEueCpkO3RoaXMuX3k9YS55KmQ7dGhpcy5fej1hLnoqZDt0aGlzLl93PU1hdGguY29zKGMpO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzZXRGcm9tUm90YXRpb25NYXRyaXg6ZnVuY3Rpb24oYSl7dmFyIGI9YS5lbGVtZW50cyxjPWJbMF07YT1iWzRdO3ZhciBkPWJbOF0sZT1iWzFdLGY9Yls1XSxnPWJbOV0saD1iWzJdLGs9Yls2XSxiPWJbMTBdLG09YytmK2I7MDxtPyhjPS41L01hdGguc3FydChtKzEpLHRoaXMuX3c9LjI1L2MsdGhpcy5feD0oay1nKSpjLHRoaXMuX3k9KGQtaCkqYyx0aGlzLl96PShlLWEpKmMpOmM+ZiYmYz5iPyhjPTIqTWF0aC5zcXJ0KDErYy1mLWIpLHRoaXMuX3c9KGstZykvYyx0aGlzLl94PS4yNSpjLHRoaXMuX3k9KGErZSkvYyx0aGlzLl96PShkK2gpL2MpOmY+Yj8oYz0yKk1hdGguc3FydCgxK2YtYy1iKSx0aGlzLl93PShkLWgpL2MsdGhpcy5feD0oYStlKS9jLHRoaXMuX3k9Ci4yNSpjLHRoaXMuX3o9KGcraykvYyk6KGM9MipNYXRoLnNxcnQoMStiLWMtZiksdGhpcy5fdz0oZS1hKS9jLHRoaXMuX3g9KGQraCkvYyx0aGlzLl95PShnK2spL2MsdGhpcy5fej0uMjUqYyk7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7cmV0dXJuIHRoaXN9LHNldEZyb21Vbml0VmVjdG9yczpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7dm9pZCAwPT09YSYmKGE9bmV3IHApO2I9Yy5kb3QoZCkrMTsxRS02PmI/KGI9MCxNYXRoLmFicyhjLngpPk1hdGguYWJzKGMueik/YS5zZXQoLWMueSxjLngsMCk6YS5zZXQoMCwtYy56LGMueSkpOmEuY3Jvc3NWZWN0b3JzKGMsZCk7dGhpcy5feD1hLng7dGhpcy5feT1hLnk7dGhpcy5fej1hLno7dGhpcy5fdz1iO3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpfX0oKSxpbnZlcnNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCkubm9ybWFsaXplKCl9LGNvbmp1Z2F0ZTpmdW5jdGlvbigpe3RoaXMuX3gqPQotMTt0aGlzLl95Kj0tMTt0aGlzLl96Kj0tMTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sZG90OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl94KmEuX3grdGhpcy5feSphLl95K3RoaXMuX3oqYS5feit0aGlzLl93KmEuX3d9LGxlbmd0aFNxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fd30sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3cpfSxub3JtYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmxlbmd0aCgpOzA9PT1hPyh0aGlzLl96PXRoaXMuX3k9dGhpcy5feD0wLHRoaXMuX3c9MSk6KGE9MS9hLHRoaXMuX3gqPWEsdGhpcy5feSo9YSx0aGlzLl96Kj1hLHRoaXMuX3cqPWEpO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSwKbXVsdGlwbHk6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdm9pZCAwIT09Yj8oY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5UXVhdGVybmlvbnMoYSxiKSk6dGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsYSl9LHByZW11bHRpcGx5OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5UXVhdGVybmlvbnMoYSx0aGlzKX0sbXVsdGlwbHlRdWF0ZXJuaW9uczpmdW5jdGlvbihhLGIpe3ZhciBjPWEuX3gsZD1hLl95LGU9YS5feixmPWEuX3csZz1iLl94LGg9Yi5feSxrPWIuX3osbT1iLl93O3RoaXMuX3g9YyptK2YqZytkKmstZSpoO3RoaXMuX3k9ZCptK2YqaCtlKmctYyprO3RoaXMuX3o9ZSptK2YqaytjKmgtZCpnO3RoaXMuX3c9ZiptLWMqZy1kKmgtZSprO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpOwpyZXR1cm4gdGhpc30sc2xlcnA6ZnVuY3Rpb24oYSxiKXtpZigwPT09YilyZXR1cm4gdGhpcztpZigxPT09YilyZXR1cm4gdGhpcy5jb3B5KGEpO3ZhciBjPXRoaXMuX3gsZD10aGlzLl95LGU9dGhpcy5feixmPXRoaXMuX3csZz1mKmEuX3crYyphLl94K2QqYS5feStlKmEuX3o7MD5nPyh0aGlzLl93PS1hLl93LHRoaXMuX3g9LWEuX3gsdGhpcy5feT0tYS5feSx0aGlzLl96PS1hLl96LGc9LWcpOnRoaXMuY29weShhKTtpZigxPD1nKXJldHVybiB0aGlzLl93PWYsdGhpcy5feD1jLHRoaXMuX3k9ZCx0aGlzLl96PWUsdGhpczt2YXIgaD1NYXRoLnNxcnQoMS1nKmcpO2lmKC4wMDE+TWF0aC5hYnMoaCkpcmV0dXJuIHRoaXMuX3c9LjUqKGYrdGhpcy5fdyksdGhpcy5feD0uNSooYyt0aGlzLl94KSx0aGlzLl95PS41KihkK3RoaXMuX3kpLHRoaXMuX3o9LjUqKGUrdGhpcy5feiksdGhpczt2YXIgaz1NYXRoLmF0YW4yKGgsZyksZz1NYXRoLnNpbigoMS1iKSprKS9oLGg9TWF0aC5zaW4oYioKaykvaDt0aGlzLl93PWYqZyt0aGlzLl93Kmg7dGhpcy5feD1jKmcrdGhpcy5feCpoO3RoaXMuX3k9ZCpnK3RoaXMuX3kqaDt0aGlzLl96PWUqZyt0aGlzLl96Kmg7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihhKXtyZXR1cm4gYS5feD09PXRoaXMuX3gmJmEuX3k9PT10aGlzLl95JiZhLl96PT09dGhpcy5feiYmYS5fdz09PXRoaXMuX3d9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO3RoaXMuX3g9YVtiXTt0aGlzLl95PWFbYisxXTt0aGlzLl96PWFbYisyXTt0aGlzLl93PWFbYiszXTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWEmJihhPVtdKTt2b2lkIDA9PT1iJiYoYj0wKTthW2JdPXRoaXMuX3g7YVtiKzFdPXRoaXMuX3k7YVtiKzJdPXRoaXMuX3o7YVtiKzNdPXRoaXMuX3c7cmV0dXJuIGF9LG9uQ2hhbmdlOmZ1bmN0aW9uKGEpe3RoaXMub25DaGFuZ2VDYWxsYmFjaz0KYTtyZXR1cm4gdGhpc30sb25DaGFuZ2VDYWxsYmFjazpmdW5jdGlvbigpe319KTtPYmplY3QuYXNzaWduKHAucHJvdG90eXBlLHtpc1ZlY3RvcjM6ITAsc2V0OmZ1bmN0aW9uKGEsYixjKXt0aGlzLng9YTt0aGlzLnk9Yjt0aGlzLno9YztyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMuej10aGlzLnk9dGhpcy54PWE7cmV0dXJuIHRoaXN9LHNldFg6ZnVuY3Rpb24oYSl7dGhpcy54PWE7cmV0dXJuIHRoaXN9LHNldFk6ZnVuY3Rpb24oYSl7dGhpcy55PWE7cmV0dXJuIHRoaXN9LHNldFo6ZnVuY3Rpb24oYSl7dGhpcy56PWE7cmV0dXJuIHRoaXN9LHNldENvbXBvbmVudDpmdW5jdGlvbihhLGIpe3N3aXRjaChhKXtjYXNlIDA6dGhpcy54PWI7YnJlYWs7Y2FzZSAxOnRoaXMueT1iO2JyZWFrO2Nhc2UgMjp0aGlzLno9YjticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrYSk7fXJldHVybiB0aGlzfSxnZXRDb21wb25lbnQ6ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gdGhpcy54OwpjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtkZWZhdWx0OnRocm93IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrYSk7fX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMueD1hLng7dGhpcy55PWEueTt0aGlzLno9YS56O3JldHVybiB0aGlzfSxhZGQ6ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDAhPT1iKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnMoYSxiKTt0aGlzLngrPWEueDt0aGlzLnkrPWEueTt0aGlzLnorPWEuejtyZXR1cm4gdGhpc30sYWRkU2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueCs9YTt0aGlzLnkrPWE7dGhpcy56Kz1hO3JldHVybiB0aGlzfSwKYWRkVmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngrYi54O3RoaXMueT1hLnkrYi55O3RoaXMuej1hLnorYi56O3JldHVybiB0aGlzfSxhZGRTY2FsZWRWZWN0b3I6ZnVuY3Rpb24oYSxiKXt0aGlzLngrPWEueCpiO3RoaXMueSs9YS55KmI7dGhpcy56Kz1hLnoqYjtyZXR1cm4gdGhpc30sc3ViOmZ1bmN0aW9uKGEsYil7aWYodm9pZCAwIT09YilyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKGEsYik7dGhpcy54LT1hLng7dGhpcy55LT1hLnk7dGhpcy56LT1hLno7cmV0dXJuIHRoaXN9LHN1YlNjYWxhcjpmdW5jdGlvbihhKXt0aGlzLngtPWE7dGhpcy55LT1hO3RoaXMuei09YTtyZXR1cm4gdGhpc30sc3ViVmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngtYi54O3RoaXMueT1hLnktYi55O3RoaXMuej0KYS56LWIuejtyZXR1cm4gdGhpc30sbXVsdGlwbHk6ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDAhPT1iKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnMoYSxiKTt0aGlzLngqPWEueDt0aGlzLnkqPWEueTt0aGlzLnoqPWEuejtyZXR1cm4gdGhpc30sbXVsdGlwbHlTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy54Kj1hO3RoaXMueSo9YTt0aGlzLnoqPWE7cmV0dXJuIHRoaXN9LG11bHRpcGx5VmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngqYi54O3RoaXMueT1hLnkqYi55O3RoaXMuej1hLnoqYi56O3JldHVybiB0aGlzfSxhcHBseUV1bGVyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHFhO3JldHVybiBmdW5jdGlvbihiKXshMT09PShiJiZiLmlzRXVsZXIpJiZjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlFdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7CnJldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihhLnNldEZyb21FdWxlcihiKSl9fSgpLGFwcGx5QXhpc0FuZ2xlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHFhO3JldHVybiBmdW5jdGlvbihiLGMpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihhLnNldEZyb21BeGlzQW5nbGUoYixjKSl9fSgpLGFwcGx5TWF0cml4MzpmdW5jdGlvbihhKXt2YXIgYj10aGlzLngsYz10aGlzLnksZD10aGlzLno7YT1hLmVsZW1lbnRzO3RoaXMueD1hWzBdKmIrYVszXSpjK2FbNl0qZDt0aGlzLnk9YVsxXSpiK2FbNF0qYythWzddKmQ7dGhpcy56PWFbMl0qYithWzVdKmMrYVs4XSpkO3JldHVybiB0aGlzfSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54LGM9dGhpcy55LGQ9dGhpcy56O2E9YS5lbGVtZW50czt0aGlzLng9YVswXSpiK2FbNF0qYythWzhdKmQrYVsxMl07dGhpcy55PWFbMV0qYithWzVdKmMrYVs5XSpkK2FbMTNdO3RoaXMuej1hWzJdKmIrYVs2XSpjK2FbMTBdKmQrYVsxNF07CnJldHVybiB0aGlzLmRpdmlkZVNjYWxhcihhWzNdKmIrYVs3XSpjK2FbMTFdKmQrYVsxNV0pfSxhcHBseVF1YXRlcm5pb246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54LGM9dGhpcy55LGQ9dGhpcy56LGU9YS54LGY9YS55LGc9YS56O2E9YS53O3ZhciBoPWEqYitmKmQtZypjLGs9YSpjK2cqYi1lKmQsbT1hKmQrZSpjLWYqYixiPS1lKmItZipjLWcqZDt0aGlzLng9aCphK2IqLWUrayotZy1tKi1mO3RoaXMueT1rKmErYiotZittKi1lLWgqLWc7dGhpcy56PW0qYStiKi1nK2gqLWYtayotZTtyZXR1cm4gdGhpc30scHJvamVjdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBKO3JldHVybiBmdW5jdGlvbihiKXthLm11bHRpcGx5TWF0cmljZXMoYi5wcm9qZWN0aW9uTWF0cml4LGEuZ2V0SW52ZXJzZShiLm1hdHJpeFdvcmxkKSk7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KGEpfX0oKSx1bnByb2plY3Q6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYil7YS5tdWx0aXBseU1hdHJpY2VzKGIubWF0cml4V29ybGQsCmEuZ2V0SW52ZXJzZShiLnByb2plY3Rpb25NYXRyaXgpKTtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQoYSl9fSgpLHRyYW5zZm9ybURpcmVjdGlvbjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLngsYz10aGlzLnksZD10aGlzLno7YT1hLmVsZW1lbnRzO3RoaXMueD1hWzBdKmIrYVs0XSpjK2FbOF0qZDt0aGlzLnk9YVsxXSpiK2FbNV0qYythWzldKmQ7dGhpcy56PWFbMl0qYithWzZdKmMrYVsxMF0qZDtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKX0sZGl2aWRlOmZ1bmN0aW9uKGEpe3RoaXMueC89YS54O3RoaXMueS89YS55O3RoaXMuei89YS56O3JldHVybiB0aGlzfSxkaXZpZGVTY2FsYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS9hKX0sbWluOmZ1bmN0aW9uKGEpe3RoaXMueD1NYXRoLm1pbih0aGlzLngsYS54KTt0aGlzLnk9TWF0aC5taW4odGhpcy55LGEueSk7dGhpcy56PU1hdGgubWluKHRoaXMueixhLnopO3JldHVybiB0aGlzfSxtYXg6ZnVuY3Rpb24oYSl7dGhpcy54PQpNYXRoLm1heCh0aGlzLngsYS54KTt0aGlzLnk9TWF0aC5tYXgodGhpcy55LGEueSk7dGhpcy56PU1hdGgubWF4KHRoaXMueixhLnopO3JldHVybiB0aGlzfSxjbGFtcDpmdW5jdGlvbihhLGIpe3RoaXMueD1NYXRoLm1heChhLngsTWF0aC5taW4oYi54LHRoaXMueCkpO3RoaXMueT1NYXRoLm1heChhLnksTWF0aC5taW4oYi55LHRoaXMueSkpO3RoaXMuej1NYXRoLm1heChhLnosTWF0aC5taW4oYi56LHRoaXMueikpO3JldHVybiB0aGlzfSxjbGFtcFNjYWxhcjpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7YS5zZXQoYyxjLGMpO2Iuc2V0KGQsZCxkKTtyZXR1cm4gdGhpcy5jbGFtcChhLGIpfX0oKSxjbGFtcExlbmd0aDpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgoYSxNYXRoLm1pbihiLGMpKS9jKX0sZmxvb3I6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpOwp0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpO3RoaXMuej1NYXRoLmZsb29yKHRoaXMueik7cmV0dXJuIHRoaXN9LGNlaWw6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5jZWlsKHRoaXMueCk7dGhpcy55PU1hdGguY2VpbCh0aGlzLnkpO3RoaXMuej1NYXRoLmNlaWwodGhpcy56KTtyZXR1cm4gdGhpc30scm91bmQ6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpO3RoaXMueT1NYXRoLnJvdW5kKHRoaXMueSk7dGhpcy56PU1hdGgucm91bmQodGhpcy56KTtyZXR1cm4gdGhpc30scm91bmRUb1plcm86ZnVuY3Rpb24oKXt0aGlzLng9MD50aGlzLng/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpO3RoaXMueT0wPnRoaXMueT9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSk7dGhpcy56PTA+dGhpcy56P01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KTtyZXR1cm4gdGhpc30sbmVnYXRlOmZ1bmN0aW9uKCl7dGhpcy54PS10aGlzLng7CnRoaXMueT0tdGhpcy55O3RoaXMuej0tdGhpcy56O3JldHVybiB0aGlzfSxkb3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMueCphLngrdGhpcy55KmEueSt0aGlzLnoqYS56fSxsZW5ndGhTcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen0sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueil9LGxlbmd0aE1hbmhhdHRhbjpmdW5jdGlvbigpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KX0sbm9ybWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCkpfSxzZXRMZW5ndGg6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoYS90aGlzLmxlbmd0aCgpKX0sbGVycDpmdW5jdGlvbihhLGIpe3RoaXMueCs9KGEueC10aGlzLngpKgpiO3RoaXMueSs9KGEueS10aGlzLnkpKmI7dGhpcy56Kz0oYS56LXRoaXMueikqYjtyZXR1cm4gdGhpc30sbGVycFZlY3RvcnM6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLnN1YlZlY3RvcnMoYixhKS5tdWx0aXBseVNjYWxhcihjKS5hZGQoYSl9LGNyb3NzOmZ1bmN0aW9uKGEsYil7aWYodm9pZCAwIT09YilyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuY3Jvc3MoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5jcm9zc1ZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuY3Jvc3NWZWN0b3JzKGEsYik7dmFyIGM9dGhpcy54LGQ9dGhpcy55LGU9dGhpcy56O3RoaXMueD1kKmEuei1lKmEueTt0aGlzLnk9ZSphLngtYyphLno7dGhpcy56PWMqYS55LWQqYS54O3JldHVybiB0aGlzfSxjcm9zc1ZlY3RvcnM6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLngsZD1hLnksZT1hLnosZj1iLngsZz1iLnksaD1iLno7dGhpcy54PWQqaC1lKmc7dGhpcy55PQplKmYtYypoO3RoaXMuej1jKmctZCpmO3JldHVybiB0aGlzfSxwcm9qZWN0T25WZWN0b3I6ZnVuY3Rpb24oYSl7dmFyIGI9YS5kb3QodGhpcykvYS5sZW5ndGhTcSgpO3JldHVybiB0aGlzLmNvcHkoYSkubXVsdGlwbHlTY2FsYXIoYil9LHByb2plY3RPblBsYW5lOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe2EuY29weSh0aGlzKS5wcm9qZWN0T25WZWN0b3IoYik7cmV0dXJuIHRoaXMuc3ViKGEpfX0oKSxyZWZsZWN0OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnN1YihhLmNvcHkoYikubXVsdGlwbHlTY2FsYXIoMip0aGlzLmRvdChiKSkpfX0oKSxhbmdsZVRvOmZ1bmN0aW9uKGEpe2E9dGhpcy5kb3QoYSkvTWF0aC5zcXJ0KHRoaXMubGVuZ3RoU3EoKSphLmxlbmd0aFNxKCkpO3JldHVybiBNYXRoLmFjb3MoWS5jbGFtcChhLC0xLDEpKX0sZGlzdGFuY2VUbzpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQoYSkpfSwKZGlzdGFuY2VUb1NxdWFyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54LWEueCxjPXRoaXMueS1hLnk7YT10aGlzLnotYS56O3JldHVybiBiKmIrYypjK2EqYX0sZGlzdGFuY2VUb01hbmhhdHRhbjpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5hYnModGhpcy54LWEueCkrTWF0aC5hYnModGhpcy55LWEueSkrTWF0aC5hYnModGhpcy56LWEueil9LHNldEZyb21TcGhlcmljYWw6ZnVuY3Rpb24oYSl7dmFyIGI9TWF0aC5zaW4oYS5waGkpKmEucmFkaXVzO3RoaXMueD1iKk1hdGguc2luKGEudGhldGEpO3RoaXMueT1NYXRoLmNvcyhhLnBoaSkqYS5yYWRpdXM7dGhpcy56PWIqTWF0aC5jb3MoYS50aGV0YSk7cmV0dXJuIHRoaXN9LHNldEZyb21DeWxpbmRyaWNhbDpmdW5jdGlvbihhKXt0aGlzLng9YS5yYWRpdXMqTWF0aC5zaW4oYS50aGV0YSk7dGhpcy55PWEueTt0aGlzLno9YS5yYWRpdXMqTWF0aC5jb3MoYS50aGV0YSk7cmV0dXJuIHRoaXN9LHNldEZyb21NYXRyaXhQb3NpdGlvbjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKGEsCjMpfSxzZXRGcm9tTWF0cml4U2NhbGU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKGEsMCkubGVuZ3RoKCksYz10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oYSwxKS5sZW5ndGgoKTthPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbihhLDIpLmxlbmd0aCgpO3RoaXMueD1iO3RoaXMueT1jO3RoaXMuej1hO3JldHVybiB0aGlzfSxzZXRGcm9tTWF0cml4Q29sdW1uOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZnJvbUFycmF5KGEuZWxlbWVudHMsNCpiKX0sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLng9PT10aGlzLngmJmEueT09PXRoaXMueSYmYS56PT09dGhpcy56fSxmcm9tQXJyYXk6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0wKTt0aGlzLng9YVtiXTt0aGlzLnk9YVtiKzFdO3RoaXMuej1hW2IrMl07cmV0dXJuIHRoaXN9LHRvQXJyYXk6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1hJiYoYT1bXSk7dm9pZCAwPT09YiYmKGI9MCk7YVtiXT0KdGhpcy54O2FbYisxXT10aGlzLnk7YVtiKzJdPXRoaXMuejtyZXR1cm4gYX0sZnJvbUJ1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbihhLGIsYyl7dm9pZCAwIT09YyYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7dGhpcy54PWEuZ2V0WChiKTt0aGlzLnk9YS5nZXRZKGIpO3RoaXMuej1hLmdldFooYik7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihKLnByb3RvdHlwZSx7aXNNYXRyaXg0OiEwLHNldDpmdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsayxtLHUsbCxuLHIscCx0KXt2YXIgeT10aGlzLmVsZW1lbnRzO3lbMF09YTt5WzRdPWI7eVs4XT1jO3lbMTJdPWQ7eVsxXT1lO3lbNV09Zjt5WzldPWc7eVsxM109aDt5WzJdPWs7eVs2XT1tO3lbMTBdPXU7eVsxNF09bDt5WzNdPW47eVs3XT1yO3lbMTFdPXA7eVsxNV09dDtyZXR1cm4gdGhpc30saWRlbnRpdHk6ZnVuY3Rpb24oKXt0aGlzLnNldCgxLAowLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBKKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9LGNvcHk6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbGVtZW50czthPWEuZWxlbWVudHM7YlswXT1hWzBdO2JbMV09YVsxXTtiWzJdPWFbMl07YlszXT1hWzNdO2JbNF09YVs0XTtiWzVdPWFbNV07Yls2XT1hWzZdO2JbN109YVs3XTtiWzhdPWFbOF07Yls5XT1hWzldO2JbMTBdPWFbMTBdO2JbMTFdPWFbMTFdO2JbMTJdPWFbMTJdO2JbMTNdPWFbMTNdO2JbMTRdPWFbMTRdO2JbMTVdPWFbMTVdO3JldHVybiB0aGlzfSxjb3B5UG9zaXRpb246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbGVtZW50czthPWEuZWxlbWVudHM7YlsxMl09YVsxMl07YlsxM109YVsxM107YlsxNF09YVsxNF07cmV0dXJuIHRoaXN9LGV4dHJhY3RCYXNpczpmdW5jdGlvbihhLGIsYyl7YS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMCk7CmIuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpO2Muc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpO3JldHVybiB0aGlzfSxtYWtlQmFzaXM6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuc2V0KGEueCxiLngsYy54LDAsYS55LGIueSxjLnksMCxhLnosYi56LGMueiwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxleHRyYWN0Um90YXRpb246ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5lbGVtZW50cyxkPWIuZWxlbWVudHMsZT0xL2Euc2V0RnJvbU1hdHJpeENvbHVtbihiLDApLmxlbmd0aCgpLGY9MS9hLnNldEZyb21NYXRyaXhDb2x1bW4oYiwxKS5sZW5ndGgoKTtiPTEvYS5zZXRGcm9tTWF0cml4Q29sdW1uKGIsMikubGVuZ3RoKCk7Y1swXT1kWzBdKmU7Y1sxXT1kWzFdKmU7Y1syXT1kWzJdKmU7Y1s0XT1kWzRdKmY7Y1s1XT1kWzVdKmY7Y1s2XT1kWzZdKmY7Y1s4XT1kWzhdKmI7Y1s5XT1kWzldKmI7Y1sxMF09ZFsxMF0qYjtyZXR1cm4gdGhpc319KCksCm1ha2VSb3RhdGlvbkZyb21FdWxlcjpmdW5jdGlvbihhKXshMT09PShhJiZhLmlzRXVsZXIpJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7dmFyIGI9dGhpcy5lbGVtZW50cyxjPWEueCxkPWEueSxlPWEueixmPU1hdGguY29zKGMpLGM9TWF0aC5zaW4oYyksZz1NYXRoLmNvcyhkKSxkPU1hdGguc2luKGQpLGg9TWF0aC5jb3MoZSksZT1NYXRoLnNpbihlKTtpZigiWFlaIj09PWEub3JkZXIpe2E9ZipoO3ZhciBrPWYqZSxtPWMqaCx1PWMqZTtiWzBdPWcqaDtiWzRdPS1nKmU7Yls4XT1kO2JbMV09ayttKmQ7Yls1XT1hLXUqZDtiWzldPS1jKmc7YlsyXT11LWEqZDtiWzZdPW0raypkO2JbMTBdPWYqZ31lbHNlIllYWiI9PT1hLm9yZGVyPyhhPWcqaCxrPWcqZSxtPWQqaCx1PWQqZSxiWzBdPWErdSpjLGJbNF09bSpjLWssYls4XT0KZipkLGJbMV09ZiplLGJbNV09ZipoLGJbOV09LWMsYlsyXT1rKmMtbSxiWzZdPXUrYSpjLGJbMTBdPWYqZyk6IlpYWSI9PT1hLm9yZGVyPyhhPWcqaCxrPWcqZSxtPWQqaCx1PWQqZSxiWzBdPWEtdSpjLGJbNF09LWYqZSxiWzhdPW0raypjLGJbMV09ayttKmMsYls1XT1mKmgsYls5XT11LWEqYyxiWzJdPS1mKmQsYls2XT1jLGJbMTBdPWYqZyk6IlpZWCI9PT1hLm9yZGVyPyhhPWYqaCxrPWYqZSxtPWMqaCx1PWMqZSxiWzBdPWcqaCxiWzRdPW0qZC1rLGJbOF09YSpkK3UsYlsxXT1nKmUsYls1XT11KmQrYSxiWzldPWsqZC1tLGJbMl09LWQsYls2XT1jKmcsYlsxMF09ZipnKToiWVpYIj09PWEub3JkZXI/KGE9ZipnLGs9ZipkLG09YypnLHU9YypkLGJbMF09ZypoLGJbNF09dS1hKmUsYls4XT1tKmUrayxiWzFdPWUsYls1XT1mKmgsYls5XT0tYypoLGJbMl09LWQqaCxiWzZdPWsqZSttLGJbMTBdPWEtdSplKToiWFpZIj09PWEub3JkZXImJihhPWYqZyxrPWYqZCxtPWMqZyx1PWMqZCxiWzBdPQpnKmgsYls0XT0tZSxiWzhdPWQqaCxiWzFdPWEqZSt1LGJbNV09ZipoLGJbOV09ayplLW0sYlsyXT1tKmUtayxiWzZdPWMqaCxiWzEwXT11KmUrYSk7YlszXT0wO2JbN109MDtiWzExXT0wO2JbMTJdPTA7YlsxM109MDtiWzE0XT0wO2JbMTVdPTE7cmV0dXJuIHRoaXN9LG1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWxlbWVudHMsYz1hLl94LGQ9YS5feSxlPWEuX3osZj1hLl93LGc9YytjLGg9ZCtkLGs9ZStlO2E9YypnO3ZhciBtPWMqaCxjPWMqayx1PWQqaCxkPWQqayxlPWUqayxnPWYqZyxoPWYqaCxmPWYqaztiWzBdPTEtKHUrZSk7Yls0XT1tLWY7Yls4XT1jK2g7YlsxXT1tK2Y7Yls1XT0xLShhK2UpO2JbOV09ZC1nO2JbMl09Yy1oO2JbNl09ZCtnO2JbMTBdPTEtKGErdSk7YlszXT0wO2JbN109MDtiWzExXT0wO2JbMTJdPTA7YlsxM109MDtiWzE0XT0wO2JbMTVdPTE7cmV0dXJuIHRoaXN9LGxvb2tBdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLApiPW5ldyBwLGM9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGQsZSxmKXt2YXIgZz10aGlzLmVsZW1lbnRzO2Muc3ViVmVjdG9ycyhkLGUpOzA9PT1jLmxlbmd0aFNxKCkmJihjLno9MSk7Yy5ub3JtYWxpemUoKTthLmNyb3NzVmVjdG9ycyhmLGMpOzA9PT1hLmxlbmd0aFNxKCkmJihjLnorPTFFLTQsYS5jcm9zc1ZlY3RvcnMoZixjKSk7YS5ub3JtYWxpemUoKTtiLmNyb3NzVmVjdG9ycyhjLGEpO2dbMF09YS54O2dbNF09Yi54O2dbOF09Yy54O2dbMV09YS55O2dbNV09Yi55O2dbOV09Yy55O2dbMl09YS56O2dbNl09Yi56O2dbMTBdPWMuejtyZXR1cm4gdGhpc319KCksbXVsdGlwbHk6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdm9pZCAwIT09Yj8oY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseU1hdHJpY2VzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5TWF0cmljZXMoYSxiKSk6CnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLGEpfSxwcmVtdWx0aXBseTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKGEsdGhpcyl9LG11bHRpcGx5TWF0cmljZXM6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmVsZW1lbnRzLGQ9Yi5lbGVtZW50cyxlPXRoaXMuZWxlbWVudHMsZj1jWzBdLGc9Y1s0XSxoPWNbOF0saz1jWzEyXSxtPWNbMV0sdT1jWzVdLGw9Y1s5XSxuPWNbMTNdLHI9Y1syXSxwPWNbNl0sdD1jWzEwXSx5PWNbMTRdLHg9Y1szXSx2PWNbN10sRz1jWzExXSxjPWNbMTVdLHc9ZFswXSxPPWRbNF0sUz1kWzhdLEU9ZFsxMl0sRj1kWzFdLEM9ZFs1XSxSPWRbOV0sRD1kWzEzXSxCPWRbMl0sST1kWzZdLEg9ZFsxMF0sSj1kWzE0XSxQPWRbM10sSz1kWzddLFc9ZFsxMV0sZD1kWzE1XTtlWzBdPWYqdytnKkYraCpCK2sqUDtlWzRdPWYqTytnKkMraCpJK2sqSztlWzhdPWYqUytnKlIraCpIK2sqVztlWzEyXT1mKkUrZypEK2gqSitrKmQ7ZVsxXT1tKncrdSoKRitsKkIrbipQO2VbNV09bSpPK3UqQytsKkkrbipLO2VbOV09bSpTK3UqUitsKkgrbipXO2VbMTNdPW0qRSt1KkQrbCpKK24qZDtlWzJdPXIqdytwKkYrdCpCK3kqUDtlWzZdPXIqTytwKkMrdCpJK3kqSztlWzEwXT1yKlMrcCpSK3QqSCt5Klc7ZVsxNF09cipFK3AqRCt0KkoreSpkO2VbM109eCp3K3YqRitHKkIrYypQO2VbN109eCpPK3YqQytHKkkrYypLO2VbMTFdPXgqUyt2KlIrRypIK2MqVztlWzE1XT14KkUrdipEK0cqSitjKmQ7cmV0dXJuIHRoaXN9LG11bHRpcGx5U2NhbGFyOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWxlbWVudHM7YlswXSo9YTtiWzRdKj1hO2JbOF0qPWE7YlsxMl0qPWE7YlsxXSo9YTtiWzVdKj1hO2JbOV0qPWE7YlsxM10qPWE7YlsyXSo9YTtiWzZdKj1hO2JbMTBdKj1hO2JbMTRdKj1hO2JbM10qPWE7Yls3XSo9YTtiWzExXSo9YTtiWzE1XSo9YTtyZXR1cm4gdGhpc30sYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiKXtmb3IodmFyIGM9CjAsZD1iLmNvdW50O2M8ZDtjKyspYS54PWIuZ2V0WChjKSxhLnk9Yi5nZXRZKGMpLGEuej1iLmdldFooYyksYS5hcHBseU1hdHJpeDQodGhpcyksYi5zZXRYWVooYyxhLngsYS55LGEueik7cmV0dXJuIGJ9fSgpLGRldGVybWluYW50OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5lbGVtZW50cyxiPWFbMF0sYz1hWzRdLGQ9YVs4XSxlPWFbMTJdLGY9YVsxXSxnPWFbNV0saD1hWzldLGs9YVsxM10sbT1hWzJdLHU9YVs2XSxsPWFbMTBdLG49YVsxNF07cmV0dXJuIGFbM10qKCtlKmgqdS1kKmsqdS1lKmcqbCtjKmsqbCtkKmcqbi1jKmgqbikrYVs3XSooK2IqaCpuLWIqaypsK2UqZipsLWQqZipuK2QqayptLWUqaCptKSthWzExXSooK2Iqayp1LWIqZypuLWUqZip1K2MqZipuK2UqZyptLWMqayptKSthWzE1XSooLWQqZyptLWIqaCp1K2IqZypsK2QqZip1LWMqZipsK2MqaCptKX0sdHJhbnNwb3NlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5lbGVtZW50cyxiO2I9YVsxXTthWzFdPWFbNF07YVs0XT0KYjtiPWFbMl07YVsyXT1hWzhdO2FbOF09YjtiPWFbNl07YVs2XT1hWzldO2FbOV09YjtiPWFbM107YVszXT1hWzEyXTthWzEyXT1iO2I9YVs3XTthWzddPWFbMTNdO2FbMTNdPWI7Yj1hWzExXTthWzExXT1hWzE0XTthWzE0XT1iO3JldHVybiB0aGlzfSxzZXRQb3NpdGlvbjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmVsZW1lbnRzO2JbMTJdPWEueDtiWzEzXT1hLnk7YlsxNF09YS56O3JldHVybiB0aGlzfSxnZXRJbnZlcnNlOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5lbGVtZW50cyxkPWEuZWxlbWVudHMsZT1kWzBdLGY9ZFsxXSxnPWRbMl0saD1kWzNdLGs9ZFs0XSxtPWRbNV0sbD1kWzZdLHE9ZFs3XSxuPWRbOF0scj1kWzldLHA9ZFsxMF0sdD1kWzExXSx5PWRbMTJdLHg9ZFsxM10sdj1kWzE0XSxkPWRbMTVdLEc9cip2KnEteCpwKnEreCpsKnQtbSp2KnQtcipsKmQrbSpwKmQsdz15KnAqcS1uKnYqcS15KmwqdCtrKnYqdCtuKmwqZC1rKnAqZCxPPW4qeCpxLXkqcipxK3kqbSp0LQprKngqdC1uKm0qZCtrKnIqZCxTPXkqcipsLW4qeCpsLXkqbSpwK2sqeCpwK24qbSp2LWsqcip2LEU9ZSpHK2YqdytnKk8raCpTO2lmKDA9PT1FKXtpZighMD09PWIpdGhyb3cgRXJyb3IoIlRIUkVFLk1hdHJpeDQuZ2V0SW52ZXJzZSgpOiBjYW4ndCBpbnZlcnQgbWF0cml4LCBkZXRlcm1pbmFudCBpcyAwIik7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0LmdldEludmVyc2UoKTogY2FuJ3QgaW52ZXJ0IG1hdHJpeCwgZGV0ZXJtaW5hbnQgaXMgMCIpO3JldHVybiB0aGlzLmlkZW50aXR5KCl9RT0xL0U7Y1swXT1HKkU7Y1sxXT0oeCpwKmgtcip2KmgteCpnKnQrZip2KnQrcipnKmQtZipwKmQpKkU7Y1syXT0obSp2KmgteCpsKmgreCpnKnEtZip2KnEtbSpnKmQrZipsKmQpKkU7Y1szXT0ocipsKmgtbSpwKmgtcipnKnErZipwKnErbSpnKnQtZipsKnQpKkU7Y1s0XT13KkU7Y1s1XT0obip2KmgteSpwKmgreSpnKnQtZSp2KnQtbipnKmQrZSpwKmQpKkU7Y1s2XT0oeSpsKmgtayp2KmgtCnkqZypxK2UqdipxK2sqZypkLWUqbCpkKSpFO2NbN109KGsqcCpoLW4qbCpoK24qZypxLWUqcCpxLWsqZyp0K2UqbCp0KSpFO2NbOF09TypFO2NbOV09KHkqcipoLW4qeCpoLXkqZip0K2UqeCp0K24qZipkLWUqcipkKSpFO2NbMTBdPShrKngqaC15Km0qaCt5KmYqcS1lKngqcS1rKmYqZCtlKm0qZCkqRTtjWzExXT0obiptKmgtaypyKmgtbipmKnErZSpyKnEraypmKnQtZSptKnQpKkU7Y1sxMl09UypFO2NbMTNdPShuKngqZy15KnIqZyt5KmYqcC1lKngqcC1uKmYqditlKnIqdikqRTtjWzE0XT0oeSptKmctayp4KmcteSpmKmwrZSp4KmwraypmKnYtZSptKnYpKkU7Y1sxNV09KGsqcipnLW4qbSpnK24qZipsLWUqcipsLWsqZipwK2UqbSpwKSpFO3JldHVybiB0aGlzfSxzY2FsZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmVsZW1lbnRzLGM9YS54LGQ9YS55O2E9YS56O2JbMF0qPWM7Yls0XSo9ZDtiWzhdKj1hO2JbMV0qPWM7Yls1XSo9ZDtiWzldKj1hO2JbMl0qPWM7Yls2XSo9ZDtiWzEwXSo9CmE7YlszXSo9YztiWzddKj1kO2JbMTFdKj1hO3JldHVybiB0aGlzfSxnZXRNYXhTY2FsZU9uQXhpczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZWxlbWVudHM7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heChhWzBdKmFbMF0rYVsxXSphWzFdK2FbMl0qYVsyXSxhWzRdKmFbNF0rYVs1XSphWzVdK2FbNl0qYVs2XSxhWzhdKmFbOF0rYVs5XSphWzldK2FbMTBdKmFbMTBdKSl9LG1ha2VUcmFuc2xhdGlvbjpmdW5jdGlvbihhLGIsYyl7dGhpcy5zZXQoMSwwLDAsYSwwLDEsMCxiLDAsMCwxLGMsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LG1ha2VSb3RhdGlvblg6ZnVuY3Rpb24oYSl7dmFyIGI9TWF0aC5jb3MoYSk7YT1NYXRoLnNpbihhKTt0aGlzLnNldCgxLDAsMCwwLDAsYiwtYSwwLDAsYSxiLDAsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LG1ha2VSb3RhdGlvblk6ZnVuY3Rpb24oYSl7dmFyIGI9TWF0aC5jb3MoYSk7YT1NYXRoLnNpbihhKTt0aGlzLnNldChiLDAsYSwwLDAsMSwwLDAsLWEsMCxiLAowLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlUm90YXRpb25aOmZ1bmN0aW9uKGEpe3ZhciBiPU1hdGguY29zKGEpO2E9TWF0aC5zaW4oYSk7dGhpcy5zZXQoYiwtYSwwLDAsYSxiLDAsMCwwLDAsMSwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlUm90YXRpb25BeGlzOmZ1bmN0aW9uKGEsYil7dmFyIGM9TWF0aC5jb3MoYiksZD1NYXRoLnNpbihiKSxlPTEtYyxmPWEueCxnPWEueSxoPWEueixrPWUqZixtPWUqZzt0aGlzLnNldChrKmYrYyxrKmctZCpoLGsqaCtkKmcsMCxrKmcrZCpoLG0qZytjLG0qaC1kKmYsMCxrKmgtZCpnLG0qaCtkKmYsZSpoKmgrYywwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlU2NhbGU6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuc2V0KGEsMCwwLDAsMCxiLDAsMCwwLDAsYywwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlU2hlYXI6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuc2V0KDEsYixjLDAsYSwxLGMsMCxhLGIsMSwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSwKY29tcG9zZTpmdW5jdGlvbihhLGIsYyl7dGhpcy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihiKTt0aGlzLnNjYWxlKGMpO3RoaXMuc2V0UG9zaXRpb24oYSk7cmV0dXJuIHRoaXN9LGRlY29tcG9zZTpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGMsZCxlKXt2YXIgZj10aGlzLmVsZW1lbnRzLGc9YS5zZXQoZlswXSxmWzFdLGZbMl0pLmxlbmd0aCgpLGg9YS5zZXQoZls0XSxmWzVdLGZbNl0pLmxlbmd0aCgpLGs9YS5zZXQoZls4XSxmWzldLGZbMTBdKS5sZW5ndGgoKTswPnRoaXMuZGV0ZXJtaW5hbnQoKSYmKGc9LWcpO2MueD1mWzEyXTtjLnk9ZlsxM107Yy56PWZbMTRdO2IuY29weSh0aGlzKTtjPTEvZzt2YXIgZj0xL2gsbT0xL2s7Yi5lbGVtZW50c1swXSo9YztiLmVsZW1lbnRzWzFdKj1jO2IuZWxlbWVudHNbMl0qPWM7Yi5lbGVtZW50c1s0XSo9ZjtiLmVsZW1lbnRzWzVdKj1mO2IuZWxlbWVudHNbNl0qPWY7Yi5lbGVtZW50c1s4XSo9Cm07Yi5lbGVtZW50c1s5XSo9bTtiLmVsZW1lbnRzWzEwXSo9bTtkLnNldEZyb21Sb3RhdGlvbk1hdHJpeChiKTtlLng9ZztlLnk9aDtlLno9aztyZXR1cm4gdGhpc319KCksbWFrZVBlcnNwZWN0aXZlOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2b2lkIDA9PT1mJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUGVyc3BlY3RpdmUoKSBoYXMgYmVlbiByZWRlZmluZWQgYW5kIGhhcyBhIG5ldyBzaWduYXR1cmUuIFBsZWFzZSBjaGVjayB0aGUgZG9jcy4iKTt2YXIgZz10aGlzLmVsZW1lbnRzO2dbMF09MiplLyhiLWEpO2dbNF09MDtnWzhdPShiK2EpLyhiLWEpO2dbMTJdPTA7Z1sxXT0wO2dbNV09MiplLyhjLWQpO2dbOV09KGMrZCkvKGMtZCk7Z1sxM109MDtnWzJdPTA7Z1s2XT0wO2dbMTBdPS0oZitlKS8oZi1lKTtnWzE0XT0tMipmKmUvKGYtZSk7Z1szXT0wO2dbN109MDtnWzExXT0tMTtnWzE1XT0wO3JldHVybiB0aGlzfSxtYWtlT3J0aG9ncmFwaGljOmZ1bmN0aW9uKGEsCmIsYyxkLGUsZil7dmFyIGc9dGhpcy5lbGVtZW50cyxoPTEvKGItYSksaz0xLyhjLWQpLG09MS8oZi1lKTtnWzBdPTIqaDtnWzRdPTA7Z1s4XT0wO2dbMTJdPS0oKGIrYSkqaCk7Z1sxXT0wO2dbNV09MiprO2dbOV09MDtnWzEzXT0tKChjK2QpKmspO2dbMl09MDtnWzZdPTA7Z1sxMF09LTIqbTtnWzE0XT0tKChmK2UpKm0pO2dbM109MDtnWzddPTA7Z1sxMV09MDtnWzE1XT0xO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbGVtZW50czthPWEuZWxlbWVudHM7Zm9yKHZhciBjPTA7MTY+YztjKyspaWYoYltjXSE9PWFbY10pcmV0dXJuITE7cmV0dXJuITB9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO2Zvcih2YXIgYz0wOzE2PmM7YysrKXRoaXMuZWxlbWVudHNbY109YVtjK2JdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YSYmKGE9W10pO3ZvaWQgMD09PWImJihiPTApO3ZhciBjPXRoaXMuZWxlbWVudHM7CmFbYl09Y1swXTthW2IrMV09Y1sxXTthW2IrMl09Y1syXTthW2IrM109Y1szXTthW2IrNF09Y1s0XTthW2IrNV09Y1s1XTthW2IrNl09Y1s2XTthW2IrN109Y1s3XTthW2IrOF09Y1s4XTthW2IrOV09Y1s5XTthW2IrMTBdPWNbMTBdO2FbYisxMV09Y1sxMV07YVtiKzEyXT1jWzEyXTthW2IrMTNdPWNbMTNdO2FbYisxNF09Y1sxNF07YVtiKzE1XT1jWzE1XTtyZXR1cm4gYX19KTtlYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShYLnByb3RvdHlwZSk7ZWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWViO2ViLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO1phLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFgucHJvdG90eXBlKTtaYS5wcm90b3R5cGUuY29uc3RydWN0b3I9WmE7WmEucHJvdG90eXBlLmlzQ3ViZVRleHR1cmU9ITA7T2JqZWN0LmRlZmluZVByb3BlcnR5KFphLnByb3RvdHlwZSwiaW1hZ2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW1hZ2V9LHNldDpmdW5jdGlvbihhKXt0aGlzLmltYWdlPQphfX0pO3ZhciBEZT1uZXcgWCxFZT1uZXcgWmEseWU9W10sQWU9W10sQ2U9bmV3IEZsb2F0MzJBcnJheSgxNiksQmU9bmV3IEZsb2F0MzJBcnJheSg5KTtJZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9dGhpcy5zZXEsZD0wLGU9Yy5sZW5ndGg7ZCE9PWU7KytkKXt2YXIgZj1jW2RdO2Yuc2V0VmFsdWUoYSxiW2YuaWRdKX19O3ZhciBRZD0vKFtcd1xkX10rKShcXSk/KFxbfFwuKT8vZztmYi5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oYSxiLGMpe2I9dGhpcy5tYXBbYl07dm9pZCAwIT09YiYmYi5zZXRWYWx1ZShhLGMsdGhpcy5yZW5kZXJlcil9O2ZiLnByb3RvdHlwZS5zZXRPcHRpb25hbD1mdW5jdGlvbihhLGIsYyl7Yj1iW2NdO3ZvaWQgMCE9PWImJnRoaXMuc2V0VmFsdWUoYSxjLGIpfTtmYi51cGxvYWQ9ZnVuY3Rpb24oYSxiLGMsZCl7Zm9yKHZhciBlPTAsZj1iLmxlbmd0aDtlIT09ZjsrK2Upe3ZhciBnPWJbZV0saD1jW2cuaWRdOyExIT09CmgubmVlZHNVcGRhdGUmJmcuc2V0VmFsdWUoYSxoLnZhbHVlLGQpfX07ZmIuc2VxV2l0aFZhbHVlPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdLGQ9MCxlPWEubGVuZ3RoO2QhPT1lOysrZCl7dmFyIGY9YVtkXTtmLmlkIGluIGImJmMucHVzaChmKX1yZXR1cm4gY307dmFyIGtnPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSwKZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLApmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MiwKbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LApuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsCnNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtPYmplY3QuYXNzaWduKEgucHJvdG90eXBlLHtpc0NvbG9yOiEwLHI6MSxnOjEsYjoxLHNldDpmdW5jdGlvbihhKXthJiZhLmlzQ29sb3I/dGhpcy5jb3B5KGEpOiJudW1iZXIiPT09dHlwZW9mIGE/dGhpcy5zZXRIZXgoYSk6InN0cmluZyI9PT10eXBlb2YgYSYmdGhpcy5zZXRTdHlsZShhKTtyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMuYj10aGlzLmc9dGhpcy5yPQphO3JldHVybiB0aGlzfSxzZXRIZXg6ZnVuY3Rpb24oYSl7YT1NYXRoLmZsb29yKGEpO3RoaXMucj0oYT4+MTYmMjU1KS8yNTU7dGhpcy5nPShhPj44JjI1NSkvMjU1O3RoaXMuYj0oYSYyNTUpLzI1NTtyZXR1cm4gdGhpc30sc2V0UkdCOmZ1bmN0aW9uKGEsYixjKXt0aGlzLnI9YTt0aGlzLmc9Yjt0aGlzLmI9YztyZXR1cm4gdGhpc30sc2V0SFNMOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGMsZCl7MD5kJiYoZCs9MSk7MTxkJiYtLWQ7cmV0dXJuIGQ8MS82P2ErNiooYy1hKSpkOi41PmQ/YzpkPDIvMz9hKzYqKGMtYSkqKDIvMy1kKTphfXJldHVybiBmdW5jdGlvbihiLGMsZCl7Yj1ZLmV1Y2xpZGVhbk1vZHVsbyhiLDEpO2M9WS5jbGFtcChjLDAsMSk7ZD1ZLmNsYW1wKGQsMCwxKTswPT09Yz90aGlzLnI9dGhpcy5nPXRoaXMuYj1kOihjPS41Pj1kP2QqKDErYyk6ZCtjLWQqYyxkPTIqZC1jLHRoaXMucj1hKGQsYyxiKzEvMyksdGhpcy5nPWEoZCxjLGIpLHRoaXMuYj1hKGQsYyxiLTEvCjMpKTtyZXR1cm4gdGhpc319KCksc2V0U3R5bGU6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXt2b2lkIDAhPT1iJiYxPnBhcnNlRmxvYXQoYikmJmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IEFscGhhIGNvbXBvbmVudCBvZiAiK2ErIiB3aWxsIGJlIGlnbm9yZWQuIil9dmFyIGM7aWYoYz0vXigoPzpyZ2J8aHNsKWE/KVwoXHMqKFteXCldKilcKS8uZXhlYyhhKSl7dmFyIGQ9Y1syXTtzd2l0Y2goY1sxXSl7Y2FzZSAicmdiIjpjYXNlICJyZ2JhIjppZihjPS9eKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccyooLFxzKihbMC05XSpcLj9bMC05XSspXHMqKT8kLy5leGVjKGQpKXJldHVybiB0aGlzLnI9TWF0aC5taW4oMjU1LHBhcnNlSW50KGNbMV0sMTApKS8yNTUsdGhpcy5nPU1hdGgubWluKDI1NSxwYXJzZUludChjWzJdLDEwKSkvMjU1LHRoaXMuYj1NYXRoLm1pbigyNTUscGFyc2VJbnQoY1szXSwxMCkpLzI1NSxiKGNbNV0pLHRoaXM7aWYoYz0vXihcZCspXCVccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKCxccyooWzAtOV0qXC4/WzAtOV0rKVxzKik/JC8uZXhlYyhkKSlyZXR1cm4gdGhpcy5yPQpNYXRoLm1pbigxMDAscGFyc2VJbnQoY1sxXSwxMCkpLzEwMCx0aGlzLmc9TWF0aC5taW4oMTAwLHBhcnNlSW50KGNbMl0sMTApKS8xMDAsdGhpcy5iPU1hdGgubWluKDEwMCxwYXJzZUludChjWzNdLDEwKSkvMTAwLGIoY1s1XSksdGhpczticmVhaztjYXNlICJoc2wiOmNhc2UgImhzbGEiOmlmKGM9L14oWzAtOV0qXC4/WzAtOV0rKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooLFxzKihbMC05XSpcLj9bMC05XSspXHMqKT8kLy5leGVjKGQpKXt2YXIgZD1wYXJzZUZsb2F0KGNbMV0pLzM2MCxlPXBhcnNlSW50KGNbMl0sMTApLzEwMCxmPXBhcnNlSW50KGNbM10sMTApLzEwMDtiKGNbNV0pO3JldHVybiB0aGlzLnNldEhTTChkLGUsZil9fX1lbHNlIGlmKGM9L15cIyhbQS1GYS1mMC05XSspJC8uZXhlYyhhKSl7Yz1jWzFdO2Q9Yy5sZW5ndGg7aWYoMz09PWQpcmV0dXJuIHRoaXMucj1wYXJzZUludChjLmNoYXJBdCgwKStjLmNoYXJBdCgwKSwxNikvMjU1LHRoaXMuZz1wYXJzZUludChjLmNoYXJBdCgxKSsKYy5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoYy5jaGFyQXQoMikrYy5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKDY9PT1kKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoYy5jaGFyQXQoMCkrYy5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoYy5jaGFyQXQoMikrYy5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoYy5jaGFyQXQoNCkrYy5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfWEmJjA8YS5sZW5ndGgmJihjPWtnW2FdLHZvaWQgMCE9PWM/dGhpcy5zZXRIZXgoYyk6Y29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogVW5rbm93biBjb2xvciAiK2EpKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5yLHRoaXMuZyx0aGlzLmIpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMucj1hLnI7dGhpcy5nPWEuZzt0aGlzLmI9YS5iO3JldHVybiB0aGlzfSxjb3B5R2FtbWFUb0xpbmVhcjpmdW5jdGlvbihhLApiKXt2b2lkIDA9PT1iJiYoYj0yKTt0aGlzLnI9TWF0aC5wb3coYS5yLGIpO3RoaXMuZz1NYXRoLnBvdyhhLmcsYik7dGhpcy5iPU1hdGgucG93KGEuYixiKTtyZXR1cm4gdGhpc30sY29weUxpbmVhclRvR2FtbWE6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0yKTt2YXIgYz0wPGI/MS9iOjE7dGhpcy5yPU1hdGgucG93KGEucixjKTt0aGlzLmc9TWF0aC5wb3coYS5nLGMpO3RoaXMuYj1NYXRoLnBvdyhhLmIsYyk7cmV0dXJuIHRoaXN9LGNvbnZlcnRHYW1tYVRvTGluZWFyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yLGI9dGhpcy5nLGM9dGhpcy5iO3RoaXMucj1hKmE7dGhpcy5nPWIqYjt0aGlzLmI9YypjO3JldHVybiB0aGlzfSxjb252ZXJ0TGluZWFyVG9HYW1tYTpmdW5jdGlvbigpe3RoaXMucj1NYXRoLnNxcnQodGhpcy5yKTt0aGlzLmc9TWF0aC5zcXJ0KHRoaXMuZyk7dGhpcy5iPU1hdGguc3FydCh0aGlzLmIpO3JldHVybiB0aGlzfSxnZXRIZXg6ZnVuY3Rpb24oKXtyZXR1cm4gMjU1Kgp0aGlzLnI8PDE2XjI1NSp0aGlzLmc8PDheMjU1KnRoaXMuYjw8MH0sZ2V0SGV4U3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuKCIwMDAwMDAiK3RoaXMuZ2V0SGV4KCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNil9LGdldEhTTDpmdW5jdGlvbihhKXthPWF8fHtoOjAsczowLGw6MH07dmFyIGI9dGhpcy5yLGM9dGhpcy5nLGQ9dGhpcy5iLGU9TWF0aC5tYXgoYixjLGQpLGY9TWF0aC5taW4oYixjLGQpLGcsaD0oZitlKS8yO2lmKGY9PT1lKWY9Zz0wO2Vsc2V7dmFyIGs9ZS1mLGY9LjU+PWg/ay8oZStmKTprLygyLWUtZik7c3dpdGNoKGUpe2Nhc2UgYjpnPShjLWQpL2srKGM8ZD82OjApO2JyZWFrO2Nhc2UgYzpnPShkLWIpL2srMjticmVhaztjYXNlIGQ6Zz0oYi1jKS9rKzR9Zy89Nn1hLmg9ZzthLnM9ZjthLmw9aDtyZXR1cm4gYX0sZ2V0U3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4icmdiKCIrKDI1NSp0aGlzLnJ8MCkrIiwiKygyNTUqdGhpcy5nfDApKyIsIisoMjU1KnRoaXMuYnwwKSsiKSJ9LApvZmZzZXRIU0w6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuZ2V0SFNMKCk7ZC5oKz1hO2Qucys9YjtkLmwrPWM7dGhpcy5zZXRIU0woZC5oLGQucyxkLmwpO3JldHVybiB0aGlzfSxhZGQ6ZnVuY3Rpb24oYSl7dGhpcy5yKz1hLnI7dGhpcy5nKz1hLmc7dGhpcy5iKz1hLmI7cmV0dXJuIHRoaXN9LGFkZENvbG9yczpmdW5jdGlvbihhLGIpe3RoaXMucj1hLnIrYi5yO3RoaXMuZz1hLmcrYi5nO3RoaXMuYj1hLmIrYi5iO3JldHVybiB0aGlzfSxhZGRTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy5yKz1hO3RoaXMuZys9YTt0aGlzLmIrPWE7cmV0dXJuIHRoaXN9LHN1YjpmdW5jdGlvbihhKXt0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItYS5yKTt0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctYS5nKTt0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItYS5iKTtyZXR1cm4gdGhpc30sbXVsdGlwbHk6ZnVuY3Rpb24oYSl7dGhpcy5yKj1hLnI7dGhpcy5nKj1hLmc7dGhpcy5iKj1hLmI7cmV0dXJuIHRoaXN9LAptdWx0aXBseVNjYWxhcjpmdW5jdGlvbihhKXt0aGlzLnIqPWE7dGhpcy5nKj1hO3RoaXMuYio9YTtyZXR1cm4gdGhpc30sbGVycDpmdW5jdGlvbihhLGIpe3RoaXMucis9KGEuci10aGlzLnIpKmI7dGhpcy5nKz0oYS5nLXRoaXMuZykqYjt0aGlzLmIrPShhLmItdGhpcy5iKSpiO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucj09PXRoaXMuciYmYS5nPT09dGhpcy5nJiZhLmI9PT10aGlzLmJ9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO3RoaXMucj1hW2JdO3RoaXMuZz1hW2IrMV07dGhpcy5iPWFbYisyXTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWEmJihhPVtdKTt2b2lkIDA9PT1iJiYoYj0wKTthW2JdPXRoaXMucjthW2IrMV09dGhpcy5nO2FbYisyXT10aGlzLmI7cmV0dXJuIGF9LHRvSlNPTjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEhleCgpfX0pO3ZhciBWPXtjb21tb246e2RpZmZ1c2U6e3ZhbHVlOm5ldyBIKDE1NjU4NzM0KX0sCm9wYWNpdHk6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sb2Zmc2V0UmVwZWF0Ont2YWx1ZTpuZXcgZ2EoMCwwLDEsMSl9LHNwZWN1bGFyTWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxyZWZyYWN0aW9uUmF0aW86e3ZhbHVlOi45OH19LGFvbWFwOnthb01hcDp7dmFsdWU6bnVsbH0sYW9NYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxsaWdodG1hcDp7bGlnaHRNYXA6e3ZhbHVlOm51bGx9LGxpZ2h0TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sZW1pc3NpdmVtYXA6e2VtaXNzaXZlTWFwOnt2YWx1ZTpudWxsfX0sYnVtcG1hcDp7YnVtcE1hcDp7dmFsdWU6bnVsbH0sYnVtcFNjYWxlOnt2YWx1ZToxfX0sbm9ybWFsbWFwOntub3JtYWxNYXA6e3ZhbHVlOm51bGx9LG5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgRCgxLDEpfX0sZGlzcGxhY2VtZW50bWFwOntkaXNwbGFjZW1lbnRNYXA6e3ZhbHVlOm51bGx9LApkaXNwbGFjZW1lbnRTY2FsZTp7dmFsdWU6MX0sZGlzcGxhY2VtZW50Qmlhczp7dmFsdWU6MH19LHJvdWdobmVzc21hcDp7cm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfX0sbWV0YWxuZXNzbWFwOnttZXRhbG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxncmFkaWVudG1hcDp7Z3JhZGllbnRNYXA6e3ZhbHVlOm51bGx9fSxmb2c6e2ZvZ0RlbnNpdHk6e3ZhbHVlOjIuNUUtNH0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyRTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgSCgxNjc3NzIxNSl9fSxsaWdodHM6e2FtYmllbnRMaWdodENvbG9yOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxjb2xvcjp7fSxzaGFkb3c6e30sc2hhZG93Qmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSwKc3BvdExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGlyZWN0aW9uOnt9LGRpc3RhbmNlOnt9LGNvbmVDb3M6e30scGVudW1icmFDb3M6e30sZGVjYXk6e30sc2hhZG93Ont9LHNoYWRvd0JpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e319fSxzcG90U2hhZG93TWFwOnt2YWx1ZTpbXX0sc3BvdFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHBvaW50TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkZWNheTp7fSxkaXN0YW5jZTp7fSxzaGFkb3c6e30sc2hhZG93Qmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10sCnByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LHdpZHRoOnt9LGhlaWdodDp7fX19fSxwb2ludHM6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBIKDE1NjU4NzM0KX0sb3BhY2l0eTp7dmFsdWU6MX0sc2l6ZTp7dmFsdWU6MX0sc2NhbGU6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sb2Zmc2V0UmVwZWF0Ont2YWx1ZTpuZXcgZ2EoMCwwLDEsMSl9fX0sSGE9e21lcmdlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj17fSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuY2xvbmUoYVtjXSksZTtmb3IoZSBpbiBkKWJbZV09ZFtlXX1yZXR1cm4gYn0sY2xvbmU6ZnVuY3Rpb24oYSl7dmFyIGI9e30sYztmb3IoYyBpbiBhKXtiW2NdPXt9O2Zvcih2YXIgZCBpbiBhW2NdKXt2YXIgZT1hW2NdW2RdO2UmJihlLmlzQ29sb3J8fGUuaXNNYXRyaXgzfHxlLmlzTWF0cml4NHx8ZS5pc1ZlY3RvcjJ8fGUuaXNWZWN0b3IzfHxlLmlzVmVjdG9yNHx8ZS5pc1RleHR1cmUpP2JbY11bZF09ZS5jbG9uZSgpOgpBcnJheS5pc0FycmF5KGUpP2JbY11bZF09ZS5zbGljZSgpOmJbY11bZF09ZX19cmV0dXJuIGJ9fSxVPXthbHBoYW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xuI2VuZGlmXG4iLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XG4jZW5kaWZcbiIsYWxwaGF0ZXN0X2ZyYWdtZW50OiIjaWZkZWYgQUxQSEFURVNUXG5cdGlmICggZGlmZnVzZUNvbG9yLmEgPCBBTFBIQVRFU1QgKSBkaXNjYXJkO1xuI2VuZGlmXG4iLGFvbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGFtYmllbnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUEhZU0lDQUwgKVxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuI2VuZGlmXG4iLAphb21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwO1xuXHR1bmlmb3JtIGZsb2F0IGFvTWFwSW50ZW5zaXR5O1xuI2VuZGlmIixiZWdpbl92ZXJ0ZXg6IlxudmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9uICk7XG4iLGJlZ2lubm9ybWFsX3ZlcnRleDoiXG52ZWMzIG9iamVjdE5vcm1hbCA9IHZlYzMoIG5vcm1hbCApO1xuIixic2RmczoiZmxvYXQgcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7XG5cdGlmKCBkZWNheUV4cG9uZW50ID4gMC4wICkge1xuI2lmIGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcblx0XHRmbG9hdCBkaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0YW5jZSwgZGVjYXlFeHBvbmVudCApLCAwLjAxICk7XG5cdFx0ZmxvYXQgbWF4RGlzdGFuY2VDdXRvZmZGYWN0b3IgPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApO1xuXHRcdHJldHVybiBkaXN0YW5jZUZhbGxvZmYgKiBtYXhEaXN0YW5jZUN1dG9mZkZhY3RvcjtcbiNlbHNlXG5cdFx0cmV0dXJuIHBvdyggc2F0dXJhdGUoIC1saWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApO1xuI2VuZGlmXG5cdH1cblx0cmV0dXJuIDEuMDtcbn1cbnZlYzMgQlJERl9EaWZmdXNlX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcbn1cbnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IGRvdExIICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtNS41NTQ3MyAqIGRvdExIIC0gNi45ODMxNiApICogZG90TEggKTtcblx0cmV0dXJuICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogZnJlc25lbCArIHNwZWN1bGFyQ29sb3I7XG59XG5mbG9hdCBHX0dHWF9TbWl0aCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5MLCBjb25zdCBpbiBmbG9hdCBkb3ROViApIHtcblx0ZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApO1xuXHRmbG9hdCBnbCA9IGRvdE5MICsgc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdGZsb2F0IGd2ID0gZG90TlYgKyBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0cmV0dXJuIDEuMCAvICggZ2wgKiBndiApO1xufVxuZmxvYXQgR19HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGd2ID0gZG90TkwgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0ZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApO1xuXHRyZXR1cm4gMC41IC8gbWF4KCBndiArIGdsLCBFUFNJTE9OICk7XG59XG5mbG9hdCBEX0dHWCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGRlbm9tID0gcG93MiggZG90TkggKSAqICggYTIgLSAxLjAgKSArIDEuMDtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9tICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfR0dYKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGluY2lkZW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uICsgZ2VvbWV0cnkudmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24gKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90TEggPSBzYXR1cmF0ZSggZG90KCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiwgaGFsZkRpciApICk7XG5cdHZlYzMgRiA9IEZfU2NobGljayggc3BlY3VsYXJDb2xvciwgZG90TEggKTtcblx0ZmxvYXQgRyA9IEdfR0dYX1NtaXRoQ29ycmVsYXRlZCggYWxwaGEsIGRvdE5MLCBkb3ROViApO1xuXHRmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbnZlYzIgTFRDX1V2KCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRjb25zdCBmbG9hdCBMVVRfU0laRSAgPSA2NC4wO1xuXHRjb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTtcblx0Y29uc3QgZmxvYXQgTFVUX0JJQVMgID0gMC41IC8gTFVUX1NJWkU7XG5cdGZsb2F0IHRoZXRhID0gYWNvcyggZG90KCBOLCBWICkgKTtcblx0dmVjMiB1diA9IHZlYzIoXG5cdFx0c3FydCggc2F0dXJhdGUoIHJvdWdobmVzcyApICksXG5cdFx0c2F0dXJhdGUoIHRoZXRhIC8gKCAwLjUgKiBQSSApICkgKTtcblx0dXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xuXHRyZXR1cm4gdXY7XG59XG5mbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHtcblx0ZmxvYXQgbCA9IGxlbmd0aCggZiApO1xuXHRyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAoIGwgKyAxLjAgKSwgMC4wICk7XG59XG52ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHtcblx0ZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7XG5cdGZsb2F0IHkgPSBhYnMoIHggKTtcblx0ZmxvYXQgYSA9IDAuODYyNjcgKyAoMC40OTc4OCArIDAuMDE0MzYgKiB5ICkgKiB5O1xuXHRmbG9hdCBiID0gMy40NTA2OCArICg0LjE4ODE0ICsgeSkgKiB5O1xuXHRmbG9hdCB2ID0gYSAvIGI7XG5cdGZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKHggPiAwLjApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCAxLjAgLSB4ICogeCApIC0gdjtcblx0cmV0dXJuIGNyb3NzKCB2MSwgdjIgKSAqIHRoZXRhX3NpbnRoZXRhO1xufVxudmVjMyBMVENfRXZhbHVhdGUoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiB2ZWMzIFAsIGNvbnN0IGluIG1hdDMgbUludiwgY29uc3QgaW4gdmVjMyByZWN0Q29vcmRzWyA0IF0gKSB7XG5cdHZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgdjIgPSByZWN0Q29vcmRzWyAzIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgbGlnaHROb3JtYWwgPSBjcm9zcyggdjEsIHYyICk7XG5cdGlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7XG5cdHZlYzMgVDEsIFQyO1xuXHRUMSA9IG5vcm1hbGl6ZSggViAtIE4gKiBkb3QoIFYsIE4gKSApO1xuXHRUMiA9IC0gY3Jvc3MoIE4sIFQxICk7XG5cdG1hdDMgbWF0ID0gbUludiAqIHRyYW5zcG9zZSggbWF0MyggVDEsIFQyLCBOICkgKTtcblx0dmVjMyBjb29yZHNbIDQgXTtcblx0Y29vcmRzWyAwIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDAgXSAtIFAgKTtcblx0Y29vcmRzWyAxIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDEgXSAtIFAgKTtcblx0Y29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTtcblx0Y29vcmRzWyAzIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDMgXSAtIFAgKTtcblx0Y29vcmRzWyAwIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMCBdICk7XG5cdGNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApO1xuXHRjb29yZHNbIDIgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAyIF0gKTtcblx0Y29vcmRzWyAzIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMyBdICk7XG5cdHZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAwIF0sIGNvb3Jkc1sgMSBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDEgXSwgY29vcmRzWyAyIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAzIF0sIGNvb3Jkc1sgMCBdICk7XG5cdHZlYzMgcmVzdWx0ID0gdmVjMyggTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICkgKTtcblx0cmV0dXJuIHJlc3VsdDtcbn1cbnZlYzMgQlJERl9TcGVjdWxhcl9HR1hfRW52aXJvbm1lbnQoIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdGNvbnN0IHZlYzQgYzAgPSB2ZWM0KCAtIDEsIC0gMC4wMjc1LCAtIDAuNTcyLCAwLjAyMiApO1xuXHRjb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTtcblx0dmVjNCByID0gcm91Z2huZXNzICogYzAgKyBjMTtcblx0ZmxvYXQgYTAwNCA9IG1pbiggci54ICogci54LCBleHAyKCAtIDkuMjggKiBkb3ROViApICkgKiByLnggKyByLnk7XG5cdHZlYzIgQUIgPSB2ZWMyKCAtMS4wNCwgMS4wNCApICogYTAwNCArIHIuenc7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogQUIueCArIEFCLnk7XG59XG5mbG9hdCBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICkge1xuXHRyZXR1cm4gMC4yNTtcbn1cbmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KCBkb3ROSCwgc2hpbmluZXNzICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBpbmNpZGVudExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiArIGdlb21ldHJ5LnZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RMSCA9IHNhdHVyYXRlKCBkb3QoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCBkb3RMSCApO1xuXHRmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApO1xuXHRmbG9hdCBEID0gRF9CbGlublBob25nKCBzaGluaW5lc3MsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBHICogRCApO1xufVxuZmxvYXQgR0dYUm91Z2huZXNzVG9CbGlubkV4cG9uZW50KCBjb25zdCBpbiBmbG9hdCBnZ3hSb3VnaG5lc3MgKSB7XG5cdHJldHVybiAoIDIuMCAvIHBvdzIoIGdneFJvdWdobmVzcyArIDAuMDAwMSApIC0gMi4wICk7XG59XG5mbG9hdCBCbGlubkV4cG9uZW50VG9HR1hSb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IGJsaW5uRXhwb25lbnQgKSB7XG5cdHJldHVybiBzcXJ0KCAyLjAgLyAoIGJsaW5uRXhwb25lbnQgKyAyLjAgKSApO1xufVxuIiwKYnVtcG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0JVTVBNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtcblx0dW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7XG5cdHZlYzIgZEhkeHlfZndkKCkge1xuXHRcdHZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTtcblx0XHR2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7XG5cdFx0ZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54O1xuXHRcdGZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsO1xuXHRcdGZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsO1xuXHRcdHJldHVybiB2ZWMyKCBkQngsIGRCeSApO1xuXHR9XG5cdHZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHkgKSB7XG5cdFx0dmVjMyB2U2lnbWFYID0gZEZkeCggc3VyZl9wb3MgKTtcblx0XHR2ZWMzIHZTaWdtYVkgPSBkRmR5KCBzdXJmX3BvcyApO1xuXHRcdHZlYzMgdk4gPSBzdXJmX25vcm07XG5cdFx0dmVjMyBSMSA9IGNyb3NzKCB2U2lnbWFZLCB2TiApO1xuXHRcdHZlYzMgUjIgPSBjcm9zcyggdk4sIHZTaWdtYVggKTtcblx0XHRmbG9hdCBmRGV0ID0gZG90KCB2U2lnbWFYLCBSMSApO1xuXHRcdHZlYzMgdkdyYWQgPSBzaWduKCBmRGV0ICkgKiAoIGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApO1xuXHRcdHJldHVybiBub3JtYWxpemUoIGFicyggZkRldCApICogc3VyZl9ub3JtIC0gdkdyYWQgKTtcblx0fVxuI2VuZGlmXG4iLApjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQUElOR19QTEFORVM7ICsrIGkgKSB7XG5cdFx0dmVjNCBwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07XG5cdFx0aWYgKCBkb3QoIHZWaWV3UG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApIGRpc2NhcmQ7XG5cdH1cblx0XHRcblx0I2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyA8IE5VTV9DTElQUElOR19QTEFORVNcblx0XHRib29sIGNsaXBwZWQgPSB0cnVlO1xuXHRcdGZvciAoIGludCBpID0gVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpIDwgTlVNX0NMSVBQSU5HX1BMQU5FUzsgKysgaSApIHtcblx0XHRcdHZlYzQgcGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdO1xuXHRcdFx0Y2xpcHBlZCA9ICggZG90KCB2Vmlld1Bvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSAmJiBjbGlwcGVkO1xuXHRcdH1cblx0XHRpZiAoIGNsaXBwZWQgKSBkaXNjYXJkO1xuXHRcblx0I2VuZGlmXG4jZW5kaWZcbiIsCmNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0I2lmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAhIGRlZmluZWQoIFBIT05HIClcblx0XHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcblx0I2VuZGlmXG5cdHVuaWZvcm0gdmVjNCBjbGlwcGluZ1BsYW5lc1sgTlVNX0NMSVBQSU5HX1BMQU5FUyBdO1xuI2VuZGlmXG4iLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwICYmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAhIGRlZmluZWQoIFBIT05HIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiIsY2xpcHBpbmdfcGxhbmVzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwICYmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAhIGRlZmluZWQoIFBIT05HIClcblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWZcbiIsCmNvbG9yX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0NPTE9SXG5cdGRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yO1xuI2VuZGlmIixjb2xvcl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0NPTE9SXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWZcbiIsY29sb3JfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfQ09MT1Jcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfdmVydGV4OiIjaWZkZWYgVVNFX0NPTE9SXG5cdHZDb2xvci54eXogPSBjb2xvci54eXo7XG4jZW5kaWYiLGNvbW1vbjoiI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU5XG4jZGVmaW5lIFBJMiA2LjI4MzE4NTMwNzE4XG4jZGVmaW5lIFBJX0hBTEYgMS41NzA3OTYzMjY3OTQ5XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxOFxuI2RlZmluZSBSRUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0XG4jZGVmaW5lIExPRzIgMS40NDI2OTVcbiNkZWZpbmUgRVBTSUxPTiAxZS02XG4jZGVmaW5lIHNhdHVyYXRlKGEpIGNsYW1wKCBhLCAwLjAsIDEuMCApXG4jZGVmaW5lIHdoaXRlQ29tcGxpbWVudChhKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKVxuZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfVxuZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9XG5mbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9XG5mbG9hdCBhdmVyYWdlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgeyByZXR1cm4gZG90KCBjb2xvciwgdmVjMyggMC4zMzMzICkgKTsgfVxuaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHtcblx0Y29uc3QgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTgsIGIgPSA3OC4yMzMsIGMgPSA0Mzc1OC41NDUzO1xuXHRoaWdocCBmbG9hdCBkdCA9IGRvdCggdXYueHksIHZlYzIoIGEsYiApICksIHNuID0gbW9kKCBkdCwgUEkgKTtcblx0cmV0dXJuIGZyYWN0KHNpbihzbikgKiBjKTtcbn1cbnN0cnVjdCBJbmNpZGVudExpZ2h0IHtcblx0dmVjMyBjb2xvcjtcblx0dmVjMyBkaXJlY3Rpb247XG5cdGJvb2wgdmlzaWJsZTtcbn07XG5zdHJ1Y3QgUmVmbGVjdGVkTGlnaHQge1xuXHR2ZWMzIGRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgZGlyZWN0U3BlY3VsYXI7XG5cdHZlYzMgaW5kaXJlY3REaWZmdXNlO1xuXHR2ZWMzIGluZGlyZWN0U3BlY3VsYXI7XG59O1xuc3RydWN0IEdlb21ldHJpY0NvbnRleHQge1xuXHR2ZWMzIHBvc2l0aW9uO1xuXHR2ZWMzIG5vcm1hbDtcblx0dmVjMyB2aWV3RGlyO1xufTtcbnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xufVxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xufVxudmVjMyBwcm9qZWN0T25QbGFuZShpbiB2ZWMzIHBvaW50LCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0ZmxvYXQgZGlzdGFuY2UgPSBkb3QoIHBsYW5lTm9ybWFsLCBwb2ludCAtIHBvaW50T25QbGFuZSApO1xuXHRyZXR1cm4gLSBkaXN0YW5jZSAqIHBsYW5lTm9ybWFsICsgcG9pbnQ7XG59XG5mbG9hdCBzaWRlT2ZQbGFuZSggaW4gdmVjMyBwb2ludCwgaW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdHJldHVybiBzaWduKCBkb3QoIHBvaW50IC0gcG9pbnRPblBsYW5lLCBwbGFuZU5vcm1hbCApICk7XG59XG52ZWMzIGxpbmVQbGFuZUludGVyc2VjdCggaW4gdmVjMyBwb2ludE9uTGluZSwgaW4gdmVjMyBsaW5lRGlyZWN0aW9uLCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0cmV0dXJuIGxpbmVEaXJlY3Rpb24gKiAoIGRvdCggcGxhbmVOb3JtYWwsIHBvaW50T25QbGFuZSAtIHBvaW50T25MaW5lICkgLyBkb3QoIHBsYW5lTm9ybWFsLCBsaW5lRGlyZWN0aW9uICkgKSArIHBvaW50T25MaW5lO1xufVxubWF0MyB0cmFuc3Bvc2UoIGNvbnN0IGluIG1hdDMgdiApIHtcblx0bWF0MyB0bXA7XG5cdHRtcFswXSA9IHZlYzModlswXS54LCB2WzFdLngsIHZbMl0ueCk7XG5cdHRtcFsxXSA9IHZlYzModlswXS55LCB2WzFdLnksIHZbMl0ueSk7XG5cdHRtcFsyXSA9IHZlYzModlswXS56LCB2WzFdLnosIHZbMl0ueik7XG5cdHJldHVybiB0bXA7XG59XG4iLApjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6IiNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWXG4jZGVmaW5lIGN1YmVVVl90ZXh0dXJlU2l6ZSAoMTAyNC4wKVxuaW50IGdldEZhY2VGcm9tRGlyZWN0aW9uKHZlYzMgZGlyZWN0aW9uKSB7XG5cdHZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKGRpcmVjdGlvbik7XG5cdGludCBmYWNlID0gLTE7XG5cdGlmKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkge1xuXHRcdGlmKGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMCA6IDM7XG5cdFx0ZWxzZVxuXHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMSA6IDQ7XG5cdH1cblx0ZWxzZSB7XG5cdFx0aWYoYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApXG5cdFx0XHRmYWNlID0gZGlyZWN0aW9uLnogPiAwLjAgPyAyIDogNTtcblx0XHRlbHNlXG5cdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxIDogNDtcblx0fVxuXHRyZXR1cm4gZmFjZTtcbn1cbiNkZWZpbmUgY3ViZVVWX21heExvZHMxICAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAxLjApXG4jZGVmaW5lIGN1YmVVVl9yYW5nZUNsYW1wIChleHAyKCg2LjAgLSAxLjApICogMi4wKSlcbnZlYzIgTWlwTGV2ZWxJbmZvKCB2ZWMzIHZlYywgZmxvYXQgcm91Z2huZXNzTGV2ZWwsIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgc2NhbGUgPSBleHAyKGN1YmVVVl9tYXhMb2RzMSAtIHJvdWdobmVzc0xldmVsKTtcblx0ZmxvYXQgZHhSb3VnaG5lc3MgPSBkRmR4KHJvdWdobmVzcyk7XG5cdGZsb2F0IGR5Um91Z2huZXNzID0gZEZkeShyb3VnaG5lc3MpO1xuXHR2ZWMzIGR4ID0gZEZkeCggdmVjICogc2NhbGUgKiBkeFJvdWdobmVzcyApO1xuXHR2ZWMzIGR5ID0gZEZkeSggdmVjICogc2NhbGUgKiBkeVJvdWdobmVzcyApO1xuXHRmbG9hdCBkID0gbWF4KCBkb3QoIGR4LCBkeCApLCBkb3QoIGR5LCBkeSApICk7XG5cdGQgPSBjbGFtcChkLCAxLjAsIGN1YmVVVl9yYW5nZUNsYW1wKTtcblx0ZmxvYXQgbWlwTGV2ZWwgPSAwLjUgKiBsb2cyKGQpO1xuXHRyZXR1cm4gdmVjMihmbG9vcihtaXBMZXZlbCksIGZyYWN0KG1pcExldmVsKSk7XG59XG4jZGVmaW5lIGN1YmVVVl9tYXhMb2RzMiAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAyLjApXG4jZGVmaW5lIGN1YmVVVl9yY3BUZXh0dXJlU2l6ZSAoMS4wIC8gY3ViZVVWX3RleHR1cmVTaXplKVxudmVjMiBnZXRDdWJlVVYodmVjMyBkaXJlY3Rpb24sIGZsb2F0IHJvdWdobmVzc0xldmVsLCBmbG9hdCBtaXBMZXZlbCkge1xuXHRtaXBMZXZlbCA9IHJvdWdobmVzc0xldmVsID4gY3ViZVVWX21heExvZHMyIC0gMy4wID8gMC4wIDogbWlwTGV2ZWw7XG5cdGZsb2F0IGEgPSAxNi4wICogY3ViZVVWX3JjcFRleHR1cmVTaXplO1xuXHR2ZWMyIGV4cDJfcGFja2VkID0gZXhwMiggdmVjMiggcm91Z2huZXNzTGV2ZWwsIG1pcExldmVsICkgKTtcblx0dmVjMiByY3BfZXhwMl9wYWNrZWQgPSB2ZWMyKCAxLjAgKSAvIGV4cDJfcGFja2VkO1xuXHRmbG9hdCBwb3dTY2FsZSA9IGV4cDJfcGFja2VkLnggKiBleHAyX3BhY2tlZC55O1xuXHRmbG9hdCBzY2FsZSA9IHJjcF9leHAyX3BhY2tlZC54ICogcmNwX2V4cDJfcGFja2VkLnkgKiAwLjI1O1xuXHRmbG9hdCBtaXBPZmZzZXQgPSAwLjc1KigxLjAgLSByY3BfZXhwMl9wYWNrZWQueSkgKiByY3BfZXhwMl9wYWNrZWQueDtcblx0Ym9vbCBiUmVzID0gbWlwTGV2ZWwgPT0gMC4wO1xuXHRzY2FsZSA9ICBiUmVzICYmIChzY2FsZSA8IGEpID8gYSA6IHNjYWxlO1xuXHR2ZWMzIHI7XG5cdHZlYzIgb2Zmc2V0O1xuXHRpbnQgZmFjZSA9IGdldEZhY2VGcm9tRGlyZWN0aW9uKGRpcmVjdGlvbik7XG5cdGZsb2F0IHJjcFBvd1NjYWxlID0gMS4wIC8gcG93U2NhbGU7XG5cdGlmKCBmYWNlID09IDApIHtcblx0XHRyID0gdmVjMyhkaXJlY3Rpb24ueCwgLWRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSk7XG5cdFx0b2Zmc2V0ID0gdmVjMigwLjArbWlwT2Zmc2V0LDAuNzUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVzICYmIChvZmZzZXQueSA8IDIuMCphKSA/IGEgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNlIGlmKCBmYWNlID09IDEpIHtcblx0XHRyID0gdmVjMyhkaXJlY3Rpb24ueSwgZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56KTtcblx0XHRvZmZzZXQgPSB2ZWMyKHNjYWxlK21pcE9mZnNldCwgMC43NSAqIHJjcFBvd1NjYWxlKTtcblx0XHRvZmZzZXQueSA9IGJSZXMgJiYgKG9mZnNldC55IDwgMi4wKmEpID8gYSA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgPT0gMikge1xuXHRcdHIgPSB2ZWMzKGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCA9IHZlYzIoMi4wKnNjYWxlK21pcE9mZnNldCwgMC43NSAqIHJjcFBvd1NjYWxlKTtcblx0XHRvZmZzZXQueSA9IGJSZXMgJiYgKG9mZnNldC55IDwgMi4wKmEpID8gYSA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgPT0gMykge1xuXHRcdHIgPSB2ZWMzKGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCA9IHZlYzIoMC4wK21pcE9mZnNldCwwLjUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVzICYmIChvZmZzZXQueSA8IDIuMCphKSA/IDAuMCA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgPT0gNCkge1xuXHRcdHIgPSB2ZWMzKGRpcmVjdGlvbi55LCBkaXJlY3Rpb24ueCwgLWRpcmVjdGlvbi56KTtcblx0XHRvZmZzZXQgPSB2ZWMyKHNjYWxlK21pcE9mZnNldCwgMC41ICogcmNwUG93U2NhbGUpO1xuXHRcdG9mZnNldC55ID0gYlJlcyAmJiAob2Zmc2V0LnkgPCAyLjAqYSkgPyAwLjAgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNlIHtcblx0XHRyID0gdmVjMyhkaXJlY3Rpb24ueiwgLWRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueSk7XG5cdFx0b2Zmc2V0ID0gdmVjMigyLjAqc2NhbGUrbWlwT2Zmc2V0LCAwLjUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVzICYmIChvZmZzZXQueSA8IDIuMCphKSA/IDAuMCA6IG9mZnNldC55O1xuXHR9XG5cdHIgPSBub3JtYWxpemUocik7XG5cdGZsb2F0IHRleGVsT2Zmc2V0ID0gMC41ICogY3ViZVVWX3JjcFRleHR1cmVTaXplO1xuXHR2ZWMyIHMgPSAoIHIueXogLyBhYnMoIHIueCApICsgdmVjMiggMS4wICkgKSAqIDAuNTtcblx0dmVjMiBiYXNlID0gb2Zmc2V0ICsgdmVjMiggdGV4ZWxPZmZzZXQgKTtcblx0cmV0dXJuIGJhc2UgKyBzICogKCBzY2FsZSAtIDIuMCAqIHRleGVsT2Zmc2V0ICk7XG59XG4jZGVmaW5lIGN1YmVVVl9tYXhMb2RzMyAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAzLjApXG52ZWM0IHRleHR1cmVDdWJlVVYodmVjMyByZWZsZWN0ZWREaXJlY3Rpb24sIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgcm91Z2huZXNzVmFsID0gcm91Z2huZXNzKiBjdWJlVVZfbWF4TG9kczM7XG5cdGZsb2F0IHIxID0gZmxvb3Iocm91Z2huZXNzVmFsKTtcblx0ZmxvYXQgcjIgPSByMSArIDEuMDtcblx0ZmxvYXQgdCA9IGZyYWN0KHJvdWdobmVzc1ZhbCk7XG5cdHZlYzIgbWlwSW5mbyA9IE1pcExldmVsSW5mbyhyZWZsZWN0ZWREaXJlY3Rpb24sIHIxLCByb3VnaG5lc3MpO1xuXHRmbG9hdCBzID0gbWlwSW5mby55O1xuXHRmbG9hdCBsZXZlbDAgPSBtaXBJbmZvLng7XG5cdGZsb2F0IGxldmVsMSA9IGxldmVsMCArIDEuMDtcblx0bGV2ZWwxID0gbGV2ZWwxID4gNS4wID8gNS4wIDogbGV2ZWwxO1xuXHRsZXZlbDAgKz0gbWluKCBmbG9vciggcyArIDAuNSApLCA1LjAgKTtcblx0dmVjMiB1dl8xMCA9IGdldEN1YmVVVihyZWZsZWN0ZWREaXJlY3Rpb24sIHIxLCBsZXZlbDApO1xuXHR2ZWM0IGNvbG9yMTAgPSBlbnZNYXBUZXhlbFRvTGluZWFyKHRleHR1cmUyRChlbnZNYXAsIHV2XzEwKSk7XG5cdHZlYzIgdXZfMjAgPSBnZXRDdWJlVVYocmVmbGVjdGVkRGlyZWN0aW9uLCByMiwgbGV2ZWwwKTtcblx0dmVjNCBjb2xvcjIwID0gZW52TWFwVGV4ZWxUb0xpbmVhcih0ZXh0dXJlMkQoZW52TWFwLCB1dl8yMCkpO1xuXHR2ZWM0IHJlc3VsdCA9IG1peChjb2xvcjEwLCBjb2xvcjIwLCB0KTtcblx0cmV0dXJuIHZlYzQocmVzdWx0LnJnYiwgMS4wKTtcbn1cbiNlbmRpZlxuIiwKZGVmYXVsdG5vcm1hbF92ZXJ0ZXg6IiNpZmRlZiBGTElQX1NJREVEXG5cdG9iamVjdE5vcm1hbCA9IC1vYmplY3ROb3JtYWw7XG4jZW5kaWZcbnZlYzMgdHJhbnNmb3JtZWROb3JtYWwgPSBub3JtYWxNYXRyaXggKiBvYmplY3ROb3JtYWw7XG4iLGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZGlzcGxhY2VtZW50TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxlO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudEJpYXM7XG4jZW5kaWZcbiIsZGlzcGxhY2VtZW50bWFwX3ZlcnRleDoiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dHJhbnNmb3JtZWQgKz0gbm9ybWFsICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7XG4jZW5kaWZcbiIsZW1pc3NpdmVtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcblx0dmVjNCBlbWlzc2l2ZUNvbG9yID0gdGV4dHVyZTJEKCBlbWlzc2l2ZU1hcCwgdlV2ICk7XG5cdGVtaXNzaXZlQ29sb3IucmdiID0gZW1pc3NpdmVNYXBUZXhlbFRvTGluZWFyKCBlbWlzc2l2ZUNvbG9yICkucmdiO1xuXHR0b3RhbEVtaXNzaXZlUmFkaWFuY2UgKj0gZW1pc3NpdmVDb2xvci5yZ2I7XG4jZW5kaWZcbiIsCmVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZW1pc3NpdmVNYXA7XG4jZW5kaWZcbiIsZW5jb2RpbmdzX2ZyYWdtZW50OiIgIGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApO1xuIixlbmNvZGluZ3NfcGFyc19mcmFnbWVudDoiXG52ZWM0IExpbmVhclRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmFsdWU7XG59XG52ZWM0IEdhbW1hVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IGdhbW1hRmFjdG9yICkge1xuXHRyZXR1cm4gdmVjNCggcG93KCB2YWx1ZS54eXosIHZlYzMoIGdhbW1hRmFjdG9yICkgKSwgdmFsdWUudyApO1xufVxudmVjNCBMaW5lYXJUb0dhbW1hKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBnYW1tYUZhY3RvciApIHtcblx0cmV0dXJuIHZlYzQoIHBvdyggdmFsdWUueHl6LCB2ZWMzKCAxLjAgLyBnYW1tYUZhY3RvciApICksIHZhbHVlLncgKTtcbn1cbnZlYzQgc1JHQlRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoIDAuMDUyMTMyNzAxNCApLCB2ZWMzKCAyLjQgKSApLCB2YWx1ZS5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMyggMC4wNDA0NSApICkgKSApLCB2YWx1ZS53ICk7XG59XG52ZWM0IExpbmVhclRvc1JHQiggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IsIHZlYzMoIDAuNDE2NjYgKSApICogMS4wNTUgLSB2ZWMzKCAwLjA1NSApLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMyggbGVzc1RoYW5FcXVhbCggdmFsdWUucmdiLCB2ZWMzKCAwLjAwMzEzMDggKSApICkgKSwgdmFsdWUudyApO1xufVxudmVjNCBSR0JFVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgKiBleHAyKCB2YWx1ZS5hICogMjU1LjAgLSAxMjguMCApLCAxLjAgKTtcbn1cbnZlYzQgTGluZWFyVG9SR0JFKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRmbG9hdCBtYXhDb21wb25lbnQgPSBtYXgoIG1heCggdmFsdWUuciwgdmFsdWUuZyApLCB2YWx1ZS5iICk7XG5cdGZsb2F0IGZFeHAgPSBjbGFtcCggY2VpbCggbG9nMiggbWF4Q29tcG9uZW50ICkgKSwgLTEyOC4wLCAxMjcuMCApO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiIC8gZXhwMiggZkV4cCApLCAoIGZFeHAgKyAxMjguMCApIC8gMjU1LjAgKTtcbn1cbnZlYzQgUkdCTVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBtYXhSYW5nZSApIHtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnh5eiAqIHZhbHVlLncgKiBtYXhSYW5nZSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCTSggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdGZsb2F0IG1heFJHQiA9IG1heCggdmFsdWUueCwgbWF4KCB2YWx1ZS5nLCB2YWx1ZS5iICkgKTtcblx0ZmxvYXQgTSAgICAgID0gY2xhbXAoIG1heFJHQiAvIG1heFJhbmdlLCAwLjAsIDEuMCApO1xuXHRNICAgICAgICAgICAgPSBjZWlsKCBNICogMjU1LjAgKSAvIDI1NS4wO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiIC8gKCBNICogbWF4UmFuZ2UgKSwgTSApO1xufVxudmVjNCBSR0JEVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogKCAoIG1heFJhbmdlIC8gMjU1LjAgKSAvIHZhbHVlLmEgKSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCRCggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdGZsb2F0IG1heFJHQiA9IG1heCggdmFsdWUueCwgbWF4KCB2YWx1ZS5nLCB2YWx1ZS5iICkgKTtcblx0ZmxvYXQgRCAgICAgID0gbWF4KCBtYXhSYW5nZSAvIG1heFJHQiwgMS4wICk7XG5cdEQgICAgICAgICAgICA9IG1pbiggZmxvb3IoIEQgKSAvIDI1NS4wLCAxLjAgKTtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAqICggRCAqICggMjU1LjAgLyBtYXhSYW5nZSApICksIEQgKTtcbn1cbmNvbnN0IG1hdDMgY0xvZ0x1dk0gPSBtYXQzKCAwLjIyMDksIDAuMzM5MCwgMC40MTg0LCAwLjExMzgsIDAuNjc4MCwgMC43MzE5LCAwLjAxMDIsIDAuMTEzMCwgMC4yOTY5ICk7XG52ZWM0IExpbmVhclRvTG9nTHV2KCBpbiB2ZWM0IHZhbHVlICkgIHtcblx0dmVjMyBYcF9ZX1hZWnAgPSB2YWx1ZS5yZ2IgKiBjTG9nTHV2TTtcblx0WHBfWV9YWVpwID0gbWF4KFhwX1lfWFlacCwgdmVjMygxZS02LCAxZS02LCAxZS02KSk7XG5cdHZlYzQgdlJlc3VsdDtcblx0dlJlc3VsdC54eSA9IFhwX1lfWFlacC54eSAvIFhwX1lfWFlacC56O1xuXHRmbG9hdCBMZSA9IDIuMCAqIGxvZzIoWHBfWV9YWVpwLnkpICsgMTI3LjA7XG5cdHZSZXN1bHQudyA9IGZyYWN0KExlKTtcblx0dlJlc3VsdC56ID0gKExlIC0gKGZsb29yKHZSZXN1bHQudyoyNTUuMCkpLzI1NS4wKS8yNTUuMDtcblx0cmV0dXJuIHZSZXN1bHQ7XG59XG5jb25zdCBtYXQzIGNMb2dMdXZJbnZlcnNlTSA9IG1hdDMoIDYuMDAxNCwgLTIuNzAwOCwgLTEuNzk5NiwgLTEuMzMyMCwgMy4xMDI5LCAtNS43NzIxLCAwLjMwMDgsIC0xLjA4ODIsIDUuNjI2OCApO1xudmVjNCBMb2dMdXZUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0ZmxvYXQgTGUgPSB2YWx1ZS56ICogMjU1LjAgKyB2YWx1ZS53O1xuXHR2ZWMzIFhwX1lfWFlacDtcblx0WHBfWV9YWVpwLnkgPSBleHAyKChMZSAtIDEyNy4wKSAvIDIuMCk7XG5cdFhwX1lfWFlacC56ID0gWHBfWV9YWVpwLnkgLyB2YWx1ZS55O1xuXHRYcF9ZX1hZWnAueCA9IHZhbHVlLnggKiBYcF9ZX1hZWnAuejtcblx0dmVjMyB2UkdCID0gWHBfWV9YWVpwLnJnYiAqIGNMb2dMdXZJbnZlcnNlTTtcblx0cmV0dXJuIHZlYzQoIG1heCh2UkdCLCAwLjApLCAxLjAgKTtcbn1cbiIsCmVudm1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HIClcblx0XHR2ZWMzIGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2Vsc2Vcblx0XHR2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIGZsaXBOb3JtYWwgKiB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfRVFVSVJFQyApXG5cdFx0dmVjMiBzYW1wbGVVVjtcblx0XHRzYW1wbGVVVi55ID0gc2F0dXJhdGUoIGZsaXBOb3JtYWwgKiByZWZsZWN0VmVjLnkgKiAwLjUgKyAwLjUgKTtcblx0XHRzYW1wbGVVVi54ID0gYXRhbiggZmxpcE5vcm1hbCAqIHJlZmxlY3RWZWMueiwgZmxpcE5vcm1hbCAqIHJlZmxlY3RWZWMueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7XG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmUyRCggZW52TWFwLCBzYW1wbGVVViApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9TUEhFUkUgKVxuXHRcdHZlYzMgcmVmbGVjdFZpZXcgPSBmbGlwTm9ybWFsICogbm9ybWFsaXplKCAoIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZsZWN0VmVjLCAwLjAgKSApLnh5eiArIHZlYzMoIDAuMCwgMC4wLCAxLjAgKSApO1xuXHRcdHZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlMkQoIGVudk1hcCwgcmVmbGVjdFZpZXcueHkgKiAwLjUgKyAwLjUgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7XG5cdCNlbmRpZlxuXHRlbnZDb2xvciA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudkNvbG9yICk7XG5cdCNpZmRlZiBFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFlcblx0XHRvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBvdXRnb2luZ0xpZ2h0ICogZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19NSVggKVxuXHRcdG91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfQUREIClcblx0XHRvdXRnb2luZ0xpZ2h0ICs9IGVudkNvbG9yLnh5eiAqIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHk7XG5cdCNlbmRpZlxuI2VuZGlmXG4iLAplbnZtYXBfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkKCBQSFlTSUNBTCApXG5cdHVuaWZvcm0gZmxvYXQgcmVmbGVjdGl2aXR5O1xuXHR1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAoIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HICkgKVxuXHRcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHQjZW5kaWZcblx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKSB8fCBkZWZpbmVkKCBQSFlTSUNBTCApXG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHQjZW5kaWZcbiNlbmRpZlxuIiwKZW52bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKVxuXHRcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbmRpZlxuI2VuZGlmXG4iLGVudm1hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApXG5cdFx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcblx0I2Vsc2Vcblx0XHR2ZWMzIGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZSZWZsZWN0ID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWZcbiIsCmZvZ192ZXJ0ZXg6IlxuI2lmZGVmIFVTRV9GT0dcbmZvZ0RlcHRoID0gLW12UG9zaXRpb24uejtcbiNlbmRpZiIsZm9nX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0ZPR1xuICB2YXJ5aW5nIGZsb2F0IGZvZ0RlcHRoO1xuI2VuZGlmXG4iLGZvZ19mcmFnbWVudDoiI2lmZGVmIFVTRV9GT0dcblx0I2lmZGVmIEZPR19FWFAyXG5cdFx0ZmxvYXQgZm9nRmFjdG9yID0gd2hpdGVDb21wbGltZW50KCBleHAyKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogZm9nRGVwdGggKiBmb2dEZXB0aCAqIExPRzIgKSApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgZm9nRGVwdGggKTtcblx0I2VuZGlmXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTtcbiNlbmRpZlxuIixmb2dfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9GT0dcblx0dW5pZm9ybSB2ZWMzIGZvZ0NvbG9yO1xuXHR2YXJ5aW5nIGZsb2F0IGZvZ0RlcHRoO1xuXHQjaWZkZWYgRk9HX0VYUDJcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dOZWFyO1xuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRmFyO1xuXHQjZW5kaWZcbiNlbmRpZlxuIiwKZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFRPT05cblx0dW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnRNYXA7XG5cdHZlYzMgZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCB2ZWMzIG5vcm1hbCwgdmVjMyBsaWdodERpcmVjdGlvbiApIHtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApO1xuXHRcdHZlYzIgY29vcmQgPSB2ZWMyKCBkb3ROTCAqIDAuNSArIDAuNSwgMC4wICk7XG5cdFx0I2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkucmdiO1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gKCBjb29yZC54IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWZcbiIsbGlnaHRtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IFBJICogdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApLnh5eiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xuI2VuZGlmXG4iLApsaWdodG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5O1xuI2VuZGlmIixsaWdodHNfbGFtYmVydF92ZXJ0ZXg6InZlYzMgZGlmZnVzZSA9IHZlYzMoIDEuMCApO1xuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uID0gbXZQb3NpdGlvbi54eXo7XG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5nZW9tZXRyeS52aWV3RGlyID0gbm9ybWFsaXplKCAtbXZQb3NpdGlvbi54eXogKTtcbkdlb21ldHJpY0NvbnRleHQgYmFja0dlb21ldHJ5O1xuYmFja0dlb21ldHJ5LnBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247XG5iYWNrR2VvbWV0cnkubm9ybWFsID0gLWdlb21ldHJ5Lm5vcm1hbDtcbmJhY2tHZW9tZXRyeS52aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjtcbnZMaWdodEZyb250ID0gdmVjMyggMC4wICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTtcbiNlbmRpZlxuSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDtcbmZsb2F0IGRvdE5MO1xudmVjMyBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRQb2ludERpcmVjdExpZ2h0SXJyYWRpYW5jZSggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gUEkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjZW5kaWZcblx0fVxuI2VuZGlmXG4jaWYgTlVNX1NQT1RfTElHSFRTID4gMFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0U3BvdERpcmVjdExpZ2h0SXJyYWRpYW5jZSggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBQSSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdHZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC1kb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWZcbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodElycmFkaWFuY2UoIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IFBJICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLWRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xuXHRcdHZMaWdodEZyb250ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5ICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZlxuIiwKbGlnaHRzX3BhcnM6InVuaWZvcm0gdmVjMyBhbWJpZW50TGlnaHRDb2xvcjtcbnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHtcblx0dmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHRyZXR1cm4gaXJyYWRpYW5jZTtcbn1cbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0aW50IHNoYWRvdztcblx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdH07XG5cdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0c1sgTlVNX0RJUl9MSUdIVFMgXTtcblx0dm9pZCBnZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCApIHtcblx0XHRkaXJlY3RMaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7XG5cdFx0ZGlyZWN0TGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247XG5cdFx0ZGlyZWN0TGlnaHQudmlzaWJsZSA9IHRydWU7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBQb2ludExpZ2h0IHtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdFx0aW50IHNoYWRvdztcblx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdH07XG5cdHVuaWZvcm0gUG9pbnRMaWdodCBwb2ludExpZ2h0c1sgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFBvaW50RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICkge1xuXHRcdHZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IHB1bmN0dWFsTGlnaHRJbnRlbnNpdHlUb0lycmFkaWFuY2VGYWN0b3IoIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTtcblx0XHRkaXJlY3RMaWdodC52aXNpYmxlID0gKCBkaXJlY3RMaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBTcG90TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRmbG9hdCBjb25lQ29zO1xuXHRcdGZsb2F0IHBlbnVtYnJhQ29zO1xuXHRcdGludCBzaGFkb3c7XG5cdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHR9O1xuXHR1bmlmb3JtIFNwb3RMaWdodCBzcG90TGlnaHRzWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCAgKSB7XG5cdFx0dmVjMyBsVmVjdG9yID0gc3BvdExpZ2h0LnBvc2l0aW9uIC0gZ2VvbWV0cnkucG9zaXRpb247XG5cdFx0ZGlyZWN0TGlnaHQuZGlyZWN0aW9uID0gbm9ybWFsaXplKCBsVmVjdG9yICk7XG5cdFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xuXHRcdGZsb2F0IGFuZ2xlQ29zID0gZG90KCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRpZiAoIGFuZ2xlQ29zID4gc3BvdExpZ2h0LmNvbmVDb3MgKSB7XG5cdFx0XHRmbG9hdCBzcG90RWZmZWN0ID0gc21vb3Roc3RlcCggc3BvdExpZ2h0LmNvbmVDb3MsIHNwb3RMaWdodC5wZW51bWJyYUNvcywgYW5nbGVDb3MgKTtcblx0XHRcdGRpcmVjdExpZ2h0LmNvbG9yID0gc3BvdExpZ2h0LmNvbG9yO1xuXHRcdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gc3BvdEVmZmVjdCAqIHB1bmN0dWFsTGlnaHRJbnRlbnNpdHlUb0lycmFkaWFuY2VGYWN0b3IoIGxpZ2h0RGlzdGFuY2UsIHNwb3RMaWdodC5kaXN0YW5jZSwgc3BvdExpZ2h0LmRlY2F5ICk7XG5cdFx0XHRkaXJlY3RMaWdodC52aXNpYmxlID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGlyZWN0TGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTtcblx0XHRcdGRpcmVjdExpZ2h0LnZpc2libGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHRzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7XG5cdFx0dmVjMyBjb2xvcjtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodDtcblx0fTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgbHRjTWF0O1x0dW5pZm9ybSBzYW1wbGVyMkQgbHRjTWFnO1xuXHR1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07XG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwXG5cdHN0cnVjdCBIZW1pc3BoZXJlTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgc2t5Q29sb3I7XG5cdFx0dmVjMyBncm91bmRDb2xvcjtcblx0fTtcblx0dW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07XG5cdHZlYzMgZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gSGVtaXNwaGVyZUxpZ2h0IGhlbWlMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSApIHtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTtcblx0XHR2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApO1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdFx0aXJyYWRpYW5jZSAqPSBQSTtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gaXJyYWRpYW5jZTtcblx0fVxuI2VuZGlmXG4jaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFBIWVNJQ0FMIClcblx0dmVjMyBnZXRMaWdodFByb2JlSW5kaXJlY3RJcnJhZGlhbmNlKCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBpbnQgbWF4TUlQTGV2ZWwgKSB7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGdlb21ldHJ5Lm5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0XHR2ZWMzIHF1ZXJ5VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHdvcmxkTm9ybWFsLngsIHdvcmxkTm9ybWFsLnl6ICk7XG5cdFx0XHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZUxvZEVYVCggZW52TWFwLCBxdWVyeVZlYywgZmxvYXQoIG1heE1JUExldmVsICkgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCBxdWVyeVZlYywgZmxvYXQoIG1heE1JUExldmVsICkgKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiID0gZW52TWFwVGV4ZWxUb0xpbmVhciggZW52TWFwQ29sb3IgKS5yZ2I7XG5cdFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0XHR2ZWMzIHF1ZXJ5VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHdvcmxkTm9ybWFsLngsIHdvcmxkTm9ybWFsLnl6ICk7XG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggcXVlcnlWZWMsIDEuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdmVjNCggMC4wICk7XG5cdFx0I2VuZGlmXG5cdFx0cmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHR9XG5cdGZsb2F0IGdldFNwZWN1bGFyTUlQTGV2ZWwoIGNvbnN0IGluIGZsb2F0IGJsaW5uU2hpbmluZXNzRXhwb25lbnQsIGNvbnN0IGluIGludCBtYXhNSVBMZXZlbCApIHtcblx0XHRmbG9hdCBtYXhNSVBMZXZlbFNjYWxhciA9IGZsb2F0KCBtYXhNSVBMZXZlbCApO1xuXHRcdGZsb2F0IGRlc2lyZWRNSVBMZXZlbCA9IG1heE1JUExldmVsU2NhbGFyIC0gMC43OTI0OCAtIDAuNSAqIGxvZzIoIHBvdzIoIGJsaW5uU2hpbmluZXNzRXhwb25lbnQgKSArIDEuMCApO1xuXHRcdHJldHVybiBjbGFtcCggZGVzaXJlZE1JUExldmVsLCAwLjAsIG1heE1JUExldmVsU2NhbGFyICk7XG5cdH1cblx0dmVjMyBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gZmxvYXQgYmxpbm5TaGluaW5lc3NFeHBvbmVudCwgY29uc3QgaW4gaW50IG1heE1JUExldmVsICkge1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCAtZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZlYzMgcmVmbGVjdFZlYyA9IHJlZnJhY3QoIC1nZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApO1xuXHRcdCNlbmRpZlxuXHRcdHJlZmxlY3RWZWMgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCByZWZsZWN0VmVjLCB2aWV3TWF0cml4ICk7XG5cdFx0ZmxvYXQgc3BlY3VsYXJNSVBMZXZlbCA9IGdldFNwZWN1bGFyTUlQTGV2ZWwoIGJsaW5uU2hpbmluZXNzRXhwb25lbnQsIG1heE1JUExldmVsICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0XHRcdHZlYzMgcXVlcnlSZWZsZWN0VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApO1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVMb2RFWFQoIGVudk1hcCwgcXVlcnlSZWZsZWN0VmVjLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgcXVlcnlSZWZsZWN0VmVjLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjMyBxdWVyeVJlZmxlY3RWZWMgPSB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICk7XG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVVihxdWVyeVJlZmxlY3RWZWMsIEJsaW5uRXhwb25lbnRUb0dHWFJvdWdobmVzcyhibGlublNoaW5pbmVzc0V4cG9uZW50KSk7XG5cdFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfRVFVSVJFQyApXG5cdFx0XHR2ZWMyIHNhbXBsZVVWO1xuXHRcdFx0c2FtcGxlVVYueSA9IHNhdHVyYXRlKCByZWZsZWN0VmVjLnkgKiAwLjUgKyAwLjUgKTtcblx0XHRcdHNhbXBsZVVWLnggPSBhdGFuKCByZWZsZWN0VmVjLnosIHJlZmxlY3RWZWMueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7XG5cdFx0XHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlMkRMb2RFWFQoIGVudk1hcCwgc2FtcGxlVVYsIHNwZWN1bGFyTUlQTGV2ZWwgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlMkQoIGVudk1hcCwgc2FtcGxlVVYsIHNwZWN1bGFyTUlQTGV2ZWwgKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiID0gZW52TWFwVGV4ZWxUb0xpbmVhciggZW52TWFwQ29sb3IgKS5yZ2I7XG5cdFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfU1BIRVJFIClcblx0XHRcdHZlYzMgcmVmbGVjdFZpZXcgPSBub3JtYWxpemUoICggdmlld01hdHJpeCAqIHZlYzQoIHJlZmxlY3RWZWMsIDAuMCApICkueHl6ICsgdmVjMyggMC4wLDAuMCwxLjAgKSApO1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZTJETG9kRVhUKCBlbnZNYXAsIHJlZmxlY3RWaWV3Lnh5ICogMC41ICsgMC41LCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZTJEKCBlbnZNYXAsIHJlZmxlY3RWaWV3Lnh5ICogMC41ICsgMC41LCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbmRpZlxuXHRcdHJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7XG5cdH1cbiNlbmRpZlxuIiwKbGlnaHRzX3Bob25nX2ZyYWdtZW50OiJCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiO1xubWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IHNwZWN1bGFyO1xubWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgPSBzaGluaW5lc3M7XG5tYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtcbiIsbGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ6InZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuc3RydWN0IEJsaW5uUGhvbmdNYXRlcmlhbCB7XG5cdHZlYzNcdGRpZmZ1c2VDb2xvcjtcblx0dmVjM1x0c3BlY3VsYXJDb2xvcjtcblx0ZmxvYXRcdHNwZWN1bGFyU2hpbmluZXNzO1xuXHRmbG9hdFx0c3BlY3VsYXJTdHJlbmd0aDtcbn07XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX0JsaW5uUGhvbmcoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0XHR2ZWMzIG5vcm1hbCA9IGdlb21ldHJ5Lm5vcm1hbDtcblx0XHR2ZWMzIHZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xuXHRcdHZlYzMgcG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHR2ZWMzIGxpZ2h0UG9zID0gcmVjdEFyZWFMaWdodC5wb3NpdGlvbjtcblx0XHR2ZWMzIGhhbGZXaWR0aCA9IHJlY3RBcmVhTGlnaHQuaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodCA9IHJlY3RBcmVhTGlnaHQuaGFsZkhlaWdodDtcblx0XHR2ZWMzIGxpZ2h0Q29sb3IgPSByZWN0QXJlYUxpZ2h0LmNvbG9yO1xuXHRcdGZsb2F0IHJvdWdobmVzcyA9IEJsaW5uRXhwb25lbnRUb0dHWFJvdWdobmVzcyggbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKTtcblx0XHR2ZWMzIHJlY3RDb29yZHNbIDQgXTtcblx0XHRyZWN0Q29vcmRzWyAwIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7XHRcdHJlY3RDb29yZHNbIDEgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAyIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0cmVjdENvb3Jkc1sgMyBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0O1xuXHRcdHZlYzIgdXYgPSBMVENfVXYoIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XG5cdFx0ZmxvYXQgbm9ybSA9IHRleHR1cmUyRCggbHRjTWFnLCB1diApLmE7XG5cdFx0dmVjNCB0ID0gdGV4dHVyZTJEKCBsdGNNYXQsIHV2ICk7XG5cdFx0bWF0MyBtSW52ID0gbWF0Myhcblx0XHRcdHZlYzMoICAgMSwgICAwLCB0LnkgKSxcblx0XHRcdHZlYzMoICAgMCwgdC56LCAgIDAgKSxcblx0XHRcdHZlYzMoIHQudywgICAwLCB0LnggKVxuXHRcdCk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiBub3JtICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtSW52LCByZWN0Q29vcmRzICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBsaWdodENvbG9yICogbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtYXQzKCAxICksIHJlY3RDb29yZHMgKTtcblx0fVxuI2VuZGlmXG52b2lkIFJFX0RpcmVjdF9CbGlublBob25nKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHQjaWZkZWYgVE9PTlxuXHRcdHZlYzMgaXJyYWRpYW5jZSA9IGdldEdyYWRpZW50SXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHRcdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNlbmRpZlxuXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRpcnJhZGlhbmNlICo9IFBJO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TcGVjdWxhcl9CbGlublBob25nKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzICkgKiBtYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoO1xufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbiNkZWZpbmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9EaXJlY3RfQmxpbm5QaG9uZ1xuI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWFcdFx0UkVfRGlyZWN0X1JlY3RBcmVhX0JsaW5uUGhvbmdcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nXG4jZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsIClcdCgwKVxuIiwKbGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50OiJQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYiAqICggMS4wIC0gbWV0YWxuZXNzRmFjdG9yICk7XG5tYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyA9IGNsYW1wKCByb3VnaG5lc3NGYWN0b3IsIDAuMDQsIDEuMCApO1xuI2lmZGVmIFNUQU5EQVJEXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG4jZWxzZVxuXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCBNQVhJTVVNX1NQRUNVTEFSX0NPRUZGSUNJRU5UICogcG93MiggcmVmbGVjdGl2aXR5ICkgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG5cdG1hdGVyaWFsLmNsZWFyQ29hdCA9IHNhdHVyYXRlKCBjbGVhckNvYXQgKTtcdG1hdGVyaWFsLmNsZWFyQ29hdFJvdWdobmVzcyA9IGNsYW1wKCBjbGVhckNvYXRSb3VnaG5lc3MsIDAuMDQsIDEuMCApO1xuI2VuZGlmXG4iLApsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudDoic3RydWN0IFBoeXNpY2FsTWF0ZXJpYWwge1xuXHR2ZWMzXHRkaWZmdXNlQ29sb3I7XG5cdGZsb2F0XHRzcGVjdWxhclJvdWdobmVzcztcblx0dmVjM1x0c3BlY3VsYXJDb2xvcjtcblx0I2lmbmRlZiBTVEFOREFSRFxuXHRcdGZsb2F0IGNsZWFyQ29hdDtcblx0XHRmbG9hdCBjbGVhckNvYXRSb3VnaG5lc3M7XG5cdCNlbmRpZlxufTtcbiNkZWZpbmUgTUFYSU1VTV9TUEVDVUxBUl9DT0VGRklDSUVOVCAwLjE2XG4jZGVmaW5lIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgMC4wNFxuZmxvYXQgY2xlYXJDb2F0REhSQXBwcm94KCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5MICkge1xuXHRyZXR1cm4gREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCArICggMS4wIC0gREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApICogKCBwb3coIDEuMCAtIGRvdE5MLCA1LjAgKSAqIHBvdyggMS4wIC0gcm91Z2huZXNzLCAyLjAgKSApO1xufVxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHR2b2lkIFJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbCggY29uc3QgaW4gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0XHR2ZWMzIG5vcm1hbCA9IGdlb21ldHJ5Lm5vcm1hbDtcblx0XHR2ZWMzIHZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xuXHRcdHZlYzMgcG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHR2ZWMzIGxpZ2h0UG9zID0gcmVjdEFyZWFMaWdodC5wb3NpdGlvbjtcblx0XHR2ZWMzIGhhbGZXaWR0aCA9IHJlY3RBcmVhTGlnaHQuaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodCA9IHJlY3RBcmVhTGlnaHQuaGFsZkhlaWdodDtcblx0XHR2ZWMzIGxpZ2h0Q29sb3IgPSByZWN0QXJlYUxpZ2h0LmNvbG9yO1xuXHRcdGZsb2F0IHJvdWdobmVzcyA9IG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzO1xuXHRcdHZlYzMgcmVjdENvb3Jkc1sgNCBdO1xuXHRcdHJlY3RDb29yZHNbIDAgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcdFx0cmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0dmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcblx0XHRmbG9hdCBub3JtID0gdGV4dHVyZTJEKCBsdGNNYWcsIHV2ICkuYTtcblx0XHR2ZWM0IHQgPSB0ZXh0dXJlMkQoIGx0Y01hdCwgdXYgKTtcblx0XHRtYXQzIG1JbnYgPSBtYXQzKFxuXHRcdFx0dmVjMyggICAxLCAgIDAsIHQueSApLFxuXHRcdFx0dmVjMyggICAwLCB0LnosICAgMCApLFxuXHRcdFx0dmVjMyggdC53LCAgIDAsIHQueCApXG5cdFx0KTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciAqIG5vcm0gKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1JbnYsIHJlY3RDb29yZHMgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGxpZ2h0Q29sb3IgKiBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1hdDMoIDEgKSwgcmVjdENvb3JkcyApO1xuXHR9XG4jZW5kaWZcbnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSID0gbWF0ZXJpYWwuY2xlYXJDb2F0ICogY2xlYXJDb2F0REhSQXBwcm94KCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MsIGRvdE5MICk7XG5cdCNlbHNlXG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSID0gMC4wO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gKCAxLjAgLSBjbGVhckNvYXRESFIgKSAqIGlycmFkaWFuY2UgKiBCUkRGX1NwZWN1bGFyX0dHWCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyApO1xuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9ICggMS4wIC0gY2xlYXJDb2F0REhSICkgKiBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyQ29hdCAqIEJSREZfU3BlY3VsYXJfR0dYKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzICk7XG5cdCNlbmRpZlxufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxudm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGNsZWFyQ29hdFJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0I2lmbmRlZiBTVEFOREFSRFxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdE5WO1xuXHRcdGZsb2F0IGNsZWFyQ29hdERIUiA9IG1hdGVyaWFsLmNsZWFyQ29hdCAqIGNsZWFyQ29hdERIUkFwcHJveCggbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzLCBkb3ROTCApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGNsZWFyQ29hdERIUiA9IDAuMDtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gKCAxLjAgLSBjbGVhckNvYXRESFIgKSAqIHJhZGlhbmNlICogQlJERl9TcGVjdWxhcl9HR1hfRW52aXJvbm1lbnQoIGdlb21ldHJ5LCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyApO1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBjbGVhckNvYXRSYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyQ29hdCAqIEJSREZfU3BlY3VsYXJfR0dYX0Vudmlyb25tZW50KCBnZW9tZXRyeSwgdmVjMyggREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApLCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG59XG4jZGVmaW5lIFJFX0RpcmVjdFx0XHRcdFx0UkVfRGlyZWN0X1BoeXNpY2FsXG4jZGVmaW5lIFJFX0RpcmVjdF9SZWN0QXJlYVx0XHRSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbFxuI2RlZmluZSBSRV9JbmRpcmVjdFNwZWN1bGFyXHRcdFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWxcbiNkZWZpbmUgTWF0ZXJpYWxfQmxpbm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSAgIEdHWFJvdWdobmVzc1RvQmxpbm5FeHBvbmVudCggbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgKVxuI2RlZmluZSBNYXRlcmlhbF9DbGVhckNvYXRfQmxpbm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSAgIEdHWFJvdWdobmVzc1RvQmxpbm5FeHBvbmVudCggbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzIClcbmZsb2F0IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IGFtYmllbnRPY2NsdXNpb24sIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0cmV0dXJuIHNhdHVyYXRlKCBwb3coIGRvdE5WICsgYW1iaWVudE9jY2x1c2lvbiwgZXhwMiggLSAxNi4wICogcm91Z2huZXNzIC0gMS4wICkgKSAtIDEuMCArIGFtYmllbnRPY2NsdXNpb24gKTtcbn1cbiIsCmxpZ2h0c190ZW1wbGF0ZToiXG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24gPSAtIHZWaWV3UG9zaXRpb247XG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWw7XG5nZW9tZXRyeS52aWV3RGlyID0gbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7XG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRzWyBpIF07XG5cdFx0Z2V0UG9pbnREaXJlY3RMaWdodElycmFkaWFuY2UoIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggcG9pbnRMaWdodC5zaGFkb3csIGRpcmVjdExpZ2h0LnZpc2libGUgKSApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuI2VuZGlmXG4jaWYgKCBOVU1fU1BPVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0U3BvdExpZ2h0IHNwb3RMaWdodDtcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xuXHRcdHNwb3RMaWdodCA9IHNwb3RMaWdodHNbIGkgXTtcblx0XHRnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBzcG90TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggc3BvdExpZ2h0LnNoYWRvdywgZGlyZWN0TGlnaHQudmlzaWJsZSApICkgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cbiNlbmRpZlxuI2lmICggTlVNX0RJUl9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0RGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0O1xuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcblx0XHRnZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SXJyYWRpYW5jZSggZGlyZWN0aW9uYWxMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmZGVmIFVTRV9TSEFET1dNQVBcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvdywgZGlyZWN0TGlnaHQudmlzaWJsZSApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuI2VuZGlmXG4jaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKVxuXHRSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9SRUNUX0FSRUFfTElHSFRTOyBpICsrICkge1xuXHRcdHJlY3RBcmVhTGlnaHQgPSByZWN0QXJlYUxpZ2h0c1sgaSBdO1xuXHRcdFJFX0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFx0dmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICkueHl6ICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0XHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XG5cdFx0I2VuZGlmXG5cdFx0aXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG5cdCNlbmRpZlxuXHQjaWYgKCBOVU1fSEVNSV9MSUdIVFMgPiAwIClcblx0XHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0XHRpcnJhZGlhbmNlICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkgKTtcblx0XHR9XG5cdCNlbmRpZlxuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFBIWVNJQ0FMICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0aXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSW5kaXJlY3RJcnJhZGlhbmNlKCBnZW9tZXRyeSwgOCApO1xuXHQjZW5kaWZcblx0UkVfSW5kaXJlY3REaWZmdXNlKCBpcnJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHZlYzMgcmFkaWFuY2UgPSBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggZ2VvbWV0cnksIE1hdGVyaWFsX0JsaW5uU2hpbmluZXNzRXhwb25lbnQoIG1hdGVyaWFsICksIDggKTtcblx0I2lmbmRlZiBTVEFOREFSRFxuXHRcdHZlYzMgY2xlYXJDb2F0UmFkaWFuY2UgPSBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggZ2VvbWV0cnksIE1hdGVyaWFsX0NsZWFyQ29hdF9CbGlublNoaW5pbmVzc0V4cG9uZW50KCBtYXRlcmlhbCApLCA4ICk7XG5cdCNlbHNlXG5cdFx0dmVjMyBjbGVhckNvYXRSYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHQjZW5kaWZcblx0UkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGNsZWFyQ29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG4jZW5kaWZcbiIsCmxvZ2RlcHRoYnVmX2ZyYWdtZW50OiIjaWYgZGVmaW5lZChVU0VfTE9HREVQVEhCVUYpICYmIGRlZmluZWQoVVNFX0xPR0RFUFRIQlVGX0VYVClcblx0Z2xfRnJhZ0RlcHRoRVhUID0gbG9nMih2RnJhZ0RlcHRoKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcblx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDtcblx0I2VuZGlmXG4jZW5kaWZcbiIsbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcblx0I2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFRcblx0XHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdCNlbmRpZlxuXHR1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3ZlcnRleDoiI2lmZGVmIFVTRV9MT0dERVBUSEJVRlxuXHRnbF9Qb3NpdGlvbi56ID0gbG9nMihtYXgoIEVQU0lMT04sIGdsX1Bvc2l0aW9uLncgKyAxLjAgKSkgKiBsb2dEZXB0aEJ1ZkZDO1xuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZGcmFnRGVwdGggPSAxLjAgKyBnbF9Qb3NpdGlvbi53O1xuXHQjZWxzZVxuXHRcdGdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiAtIDEuMCkgKiBnbF9Qb3NpdGlvbi53O1xuXHQjZW5kaWZcbiNlbmRpZlxuIiwKbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IHRleGVsQ29sb3IgPSB0ZXh0dXJlMkQoIG1hcCwgdlV2ICk7XG5cdHRleGVsQ29sb3IgPSBtYXBUZXhlbFRvTGluZWFyKCB0ZXhlbENvbG9yICk7XG5cdGRpZmZ1c2VDb2xvciAqPSB0ZXhlbENvbG9yO1xuI2VuZGlmXG4iLG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWZcbiIsbWFwX3BhcnRpY2xlX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IG1hcFRleGVsID0gdGV4dHVyZTJEKCBtYXAsIHZlYzIoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55ICkgKiBvZmZzZXRSZXBlYXQuencgKyBvZmZzZXRSZXBlYXQueHkgKTtcblx0ZGlmZnVzZUNvbG9yICo9IG1hcFRleGVsVG9MaW5lYXIoIG1hcFRleGVsICk7XG4jZW5kaWZcbiIsbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTUFQXG5cdHVuaWZvcm0gdmVjNCBvZmZzZXRSZXBlYXQ7XG5cdHVuaWZvcm0gc2FtcGxlcjJEIG1hcDtcbiNlbmRpZlxuIiwKbWV0YWxuZXNzbWFwX2ZyYWdtZW50OiJmbG9hdCBtZXRhbG5lc3NGYWN0b3IgPSBtZXRhbG5lc3M7XG4jaWZkZWYgVVNFX01FVEFMTkVTU01BUFxuXHR2ZWM0IHRleGVsTWV0YWxuZXNzID0gdGV4dHVyZTJEKCBtZXRhbG5lc3NNYXAsIHZVdiApO1xuXHRtZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjtcbiNlbmRpZlxuIixtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xuI2VuZGlmIixtb3JwaG5vcm1hbF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdG9iamVjdE5vcm1hbCArPSAoIG1vcnBoTm9ybWFsMCAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdG9iamVjdE5vcm1hbCArPSAoIG1vcnBoTm9ybWFsMSAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07XG5cdG9iamVjdE5vcm1hbCArPSAoIG1vcnBoTm9ybWFsMiAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdG9iamVjdE5vcm1hbCArPSAoIG1vcnBoTm9ybWFsMyAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG4jZW5kaWZcbiIsCm1vcnBodGFyZ2V0X3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX01PUlBIVEFSR0VUU1xuXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTtcblx0I2Vsc2Vcblx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcblx0I2VuZGlmXG4jZW5kaWYiLG1vcnBodGFyZ2V0X3ZlcnRleDoiI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFNcblx0dHJhbnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDAgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdHRyYW5zZm9ybWVkICs9ICggbW9ycGhUYXJnZXQxIC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xuXHR0cmFuc2Zvcm1lZCArPSAoIG1vcnBoVGFyZ2V0MiAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcblx0dHJhbnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDMgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG5cdCNpZm5kZWYgVVNFX01PUlBITk9STUFMU1xuXHR0cmFuc2Zvcm1lZCArPSAoIG1vcnBoVGFyZ2V0NCAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcblx0dHJhbnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDUgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07XG5cdHRyYW5zZm9ybWVkICs9ICggbW9ycGhUYXJnZXQ2IC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNiBdO1xuXHR0cmFuc2Zvcm1lZCArPSAoIG1vcnBoVGFyZ2V0NyAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDcgXTtcblx0I2VuZGlmXG4jZW5kaWZcbiIsCm5vcm1hbF9mbGlwOiIjaWZkZWYgRE9VQkxFX1NJREVEXG5cdGZsb2F0IGZsaXBOb3JtYWwgPSAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG4jZWxzZVxuXHRmbG9hdCBmbGlwTm9ybWFsID0gMS4wO1xuI2VuZGlmXG4iLG5vcm1hbF9mcmFnbWVudDoiI2lmZGVmIEZMQVRfU0hBREVEXG5cdHZlYzMgZmR4ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xuXHR2ZWMzIGZkeSA9IHZlYzMoIGRGZHkoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeSggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKCBmZHgsIGZkeSApICk7XG4jZWxzZVxuXHR2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggdk5vcm1hbCApICogZmxpcE5vcm1hbDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9OT1JNQUxNQVBcblx0bm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC12Vmlld1Bvc2l0aW9uLCBub3JtYWwgKTtcbiNlbGlmIGRlZmluZWQoIFVTRV9CVU1QTUFQIClcblx0bm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLXZWaWV3UG9zaXRpb24sIG5vcm1hbCwgZEhkeHlfZndkKCkgKTtcbiNlbmRpZlxuIiwKbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlO1xuXHR2ZWMzIHBlcnR1cmJOb3JtYWwyQXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtICkge1xuXHRcdHZlYzMgcTAgPSBkRmR4KCBleWVfcG9zLnh5eiApO1xuXHRcdHZlYzMgcTEgPSBkRmR5KCBleWVfcG9zLnh5eiApO1xuXHRcdHZlYzIgc3QwID0gZEZkeCggdlV2LnN0ICk7XG5cdFx0dmVjMiBzdDEgPSBkRmR5KCB2VXYuc3QgKTtcblx0XHR2ZWMzIFMgPSBub3JtYWxpemUoIHEwICogc3QxLnQgLSBxMSAqIHN0MC50ICk7XG5cdFx0dmVjMyBUID0gbm9ybWFsaXplKCAtcTAgKiBzdDEucyArIHExICogc3QwLnMgKTtcblx0XHR2ZWMzIE4gPSBub3JtYWxpemUoIHN1cmZfbm9ybSApO1xuXHRcdHZlYzMgbWFwTiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdFx0bWFwTi54eSA9IG5vcm1hbFNjYWxlICogbWFwTi54eTtcblx0XHRtYXQzIHRzbiA9IG1hdDMoIFMsIFQsIE4gKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKCB0c24gKiBtYXBOICk7XG5cdH1cbiNlbmRpZlxuIiwKcGFja2luZzoidmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCBub3JtYWwgKSAqIDAuNSArIDAuNTtcbn1cbnZlYzMgdW5wYWNrUkdCVG9Ob3JtYWwoIGNvbnN0IGluIHZlYzMgcmdiICkge1xuXHRyZXR1cm4gMS4wIC0gMi4wICogcmdiLnh5ejtcbn1cbmNvbnN0IGZsb2F0IFBhY2tVcHNjYWxlID0gMjU2LiAvIDI1NS47Y29uc3QgZmxvYXQgVW5wYWNrRG93bnNjYWxlID0gMjU1LiAvIDI1Ni47XG5jb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgIDI1Ni4gKTtcbmNvbnN0IHZlYzQgVW5wYWNrRmFjdG9ycyA9IFVucGFja0Rvd25zY2FsZSAvIHZlYzQoIFBhY2tGYWN0b3JzLCAxLiApO1xuY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47XG52ZWM0IHBhY2tEZXB0aFRvUkdCQSggY29uc3QgaW4gZmxvYXQgdiApIHtcblx0dmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7XG5cdHIueXp3IC09IHIueHl6ICogU2hpZnRSaWdodDg7XHRyZXR1cm4gciAqIFBhY2tVcHNjYWxlO1xufVxuZmxvYXQgdW5wYWNrUkdCQVRvRGVwdGgoIGNvbnN0IGluIHZlYzQgdiApIHtcblx0cmV0dXJuIGRvdCggdiwgVW5wYWNrRmFjdG9ycyApO1xufVxuZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCB2aWV3WiArIG5lYXIgKSAvICggbmVhciAtIGZhciApO1xufVxuZmxvYXQgb3J0aG9ncmFwaGljRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBsaW5lYXJDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7XG59XG5mbG9hdCB2aWV3WlRvUGVyc3BlY3RpdmVEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICgoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoKCBmYXIgLSBuZWFyICkgKiB2aWV3WiApO1xufVxuZmxvYXQgcGVyc3BlY3RpdmVEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGludkNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApO1xufVxuIiwKcHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudDoiI2lmZGVmIFBSRU1VTFRJUExJRURfQUxQSEFcblx0Z2xfRnJhZ0NvbG9yLnJnYiAqPSBnbF9GcmFnQ29sb3IuYTtcbiNlbmRpZlxuIixwcm9qZWN0X3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiBza2lubmVkO1xuI2Vsc2Vcblx0dmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuI2VuZGlmXG5nbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuIixkaXRoZXJpbmdfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBESVRIRVJJTkcgKVxuICBnbF9GcmFnQ29sb3IucmdiID0gZGl0aGVyaW5nKCBnbF9GcmFnQ29sb3IucmdiICk7XG4jZW5kaWZcbiIsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBESVRIRVJJTkcgKVxuXHR2ZWMzIGRpdGhlcmluZyggdmVjMyBjb2xvciApIHtcblx0XHRmbG9hdCBncmlkX3Bvc2l0aW9uID0gcmFuZCggZ2xfRnJhZ0Nvb3JkLnh5ICk7XG5cdFx0dmVjMyBkaXRoZXJfc2hpZnRfUkdCID0gdmVjMyggMC4yNSAvIDI1NS4wLCAtMC4yNSAvIDI1NS4wLCAwLjI1IC8gMjU1LjAgKTtcblx0XHRkaXRoZXJfc2hpZnRfUkdCID0gbWl4KCAyLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCAtMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgZ3JpZF9wb3NpdGlvbiApO1xuXHRcdHJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7XG5cdH1cbiNlbmRpZlxuIiwKcm91Z2huZXNzbWFwX2ZyYWdtZW50OiJmbG9hdCByb3VnaG5lc3NGYWN0b3IgPSByb3VnaG5lc3M7XG4jaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR2ZWM0IHRleGVsUm91Z2huZXNzID0gdGV4dHVyZTJEKCByb3VnaG5lc3NNYXAsIHZVdiApO1xuXHRyb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZztcbiNlbmRpZlxuIixyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgcm91Z2huZXNzTWFwO1xuI2VuZGlmIixzaGFkb3dtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVFMgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgc3BvdFNoYWRvd01hcFsgTlVNX1NQT1RfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0I2VuZGlmXG5cdGZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7XG5cdFx0cmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7XG5cdH1cblx0ZmxvYXQgdGV4dHVyZTJEU2hhZG93TGVycCggc2FtcGxlcjJEIGRlcHRocywgdmVjMiBzaXplLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkge1xuXHRcdGNvbnN0IHZlYzIgb2Zmc2V0ID0gdmVjMiggMC4wLCAxLjAgKTtcblx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2l6ZTtcblx0XHR2ZWMyIGNlbnRyb2lkVVYgPSBmbG9vciggdXYgKiBzaXplICsgMC41ICkgLyBzaXplO1xuXHRcdGZsb2F0IGxiID0gdGV4dHVyZTJEQ29tcGFyZSggZGVwdGhzLCBjZW50cm9pZFVWICsgdGV4ZWxTaXplICogb2Zmc2V0Lnh4LCBjb21wYXJlICk7XG5cdFx0ZmxvYXQgbHQgPSB0ZXh0dXJlMkRDb21wYXJlKCBkZXB0aHMsIGNlbnRyb2lkVVYgKyB0ZXhlbFNpemUgKiBvZmZzZXQueHksIGNvbXBhcmUgKTtcblx0XHRmbG9hdCByYiA9IHRleHR1cmUyRENvbXBhcmUoIGRlcHRocywgY2VudHJvaWRVViArIHRleGVsU2l6ZSAqIG9mZnNldC55eCwgY29tcGFyZSApO1xuXHRcdGZsb2F0IHJ0ID0gdGV4dHVyZTJEQ29tcGFyZSggZGVwdGhzLCBjZW50cm9pZFVWICsgdGV4ZWxTaXplICogb2Zmc2V0Lnl5LCBjb21wYXJlICk7XG5cdFx0dmVjMiBmID0gZnJhY3QoIHV2ICogc2l6ZSArIDAuNSApO1xuXHRcdGZsb2F0IGEgPSBtaXgoIGxiLCBsdCwgZi55ICk7XG5cdFx0ZmxvYXQgYiA9IG1peCggcmIsIHJ0LCBmLnkgKTtcblx0XHRmbG9hdCBjID0gbWl4KCBhLCBiLCBmLnggKTtcblx0XHRyZXR1cm4gYztcblx0fVxuXHRmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkge1xuXHRcdHNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53O1xuXHRcdHNoYWRvd0Nvb3JkLnogKz0gc2hhZG93Qmlhcztcblx0XHRidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7XG5cdFx0Ym9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApO1xuXHRcdGJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTtcblx0XHRib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApO1xuXHRcdGlmICggZnJ1c3R1bVRlc3QgKSB7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkxICksIHNoYWRvd0Nvb3JkLnogKVxuXHRcdFx0KSAqICggMS4wIC8gOS4wICk7XG5cdFx0I2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKVxuXHRcdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBkeDAgPSAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR4MSA9ICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTEgPSArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56IClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbmRpZlxuXHRcdH1cblx0XHRyZXR1cm4gMS4wO1xuXHR9XG5cdHZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHtcblx0XHR2ZWMzIGFic1YgPSBhYnMoIHYgKTtcblx0XHRmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTtcblx0XHRhYnNWICo9IHNjYWxlVG9DdWJlO1xuXHRcdHYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTtcblx0XHR2ZWMyIHBsYW5hciA9IHYueHk7XG5cdFx0ZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTtcblx0XHRmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7XG5cdFx0aWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkge1xuXHRcdFx0aWYgKCB2LnogPiAwLjAgKVxuXHRcdFx0XHRwbGFuYXIueCA9IDQuMCAtIHYueDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTtcblx0XHRcdHBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTtcblx0XHRcdHBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7XG5cdFx0XHRwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wO1xuXHRcdH1cblx0XHRyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7XG5cdH1cblx0ZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkge1xuXHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUgKiB2ZWMyKCA0LjAsIDIuMCApICk7XG5cdFx0dmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dDb29yZC54eXo7XG5cdFx0dmVjMyBiZDNEID0gbm9ybWFsaXplKCBsaWdodFRvUG9zaXRpb24gKTtcblx0XHRmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0JpYXMgKSAvIDEwMDAuMDtcblx0XHQjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKVxuXHRcdFx0dmVjMiBvZmZzZXQgPSB2ZWMyKCAtIDEsIDEgKSAqIHNoYWRvd1JhZGl1cyAqIHRleGVsU2l6ZS55O1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHgsIHRleGVsU2l6ZS55ICksIGRwIClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKTtcblx0XHQjZW5kaWZcblx0fVxuI2VuZGlmXG4iLApzaGFkb3dtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIE5VTV9ESVJfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdFx0dW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRTIF07XG5cdCNlbmRpZlxuI2VuZGlmXG4iLApzaGFkb3dtYXBfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVFMgPiAwXG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogd29ybGRQb3NpdGlvbjtcblx0fVxuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xuXHRcdHZTcG90U2hhZG93Q29vcmRbIGkgXSA9IHNwb3RTaGFkb3dNYXRyaXhbIGkgXSAqIHdvcmxkUG9zaXRpb247XG5cdH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRTID4gMFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogd29ybGRQb3NpdGlvbjtcblx0fVxuXHQjZW5kaWZcbiNlbmRpZlxuIiwKc2hhZG93bWFza19wYXJzX2ZyYWdtZW50OiJmbG9hdCBnZXRTaGFkb3dNYXNrKCkge1xuXHRmbG9hdCBzaGFkb3cgPSAxLjA7XG5cdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0RGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0O1xuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcblx0XHRzaGFkb3cgKj0gYm9vbCggZGlyZWN0aW9uYWxMaWdodC5zaGFkb3cgKSA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdFNwb3RMaWdodCBzcG90TGlnaHQ7XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07XG5cdFx0c2hhZG93ICo9IGJvb2woIHNwb3RMaWdodC5zaGFkb3cgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHR9XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0UG9pbnRMaWdodCBwb2ludExpZ2h0O1xuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdHBvaW50TGlnaHQgPSBwb2ludExpZ2h0c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSBib29sKCBwb2ludExpZ2h0LnNoYWRvdyApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHR9XG5cdCNlbmRpZlxuXHQjZW5kaWZcblx0cmV0dXJuIHNoYWRvdztcbn1cbiIsCnNraW5iYXNlX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IGJvbmVNYXRYID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnggKTtcblx0bWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7XG5cdG1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApO1xuXHRtYXQ0IGJvbmVNYXRXID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LncgKTtcbiNlbmRpZiIsc2tpbm5pbmdfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXg7XG5cdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTtcblx0I2lmZGVmIEJPTkVfVEVYVFVSRVxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGJvbmVUZXh0dXJlO1xuXHRcdHVuaWZvcm0gaW50IGJvbmVUZXh0dXJlU2l6ZTtcblx0XHRtYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7XG5cdFx0XHRmbG9hdCBqID0gaSAqIDQuMDtcblx0XHRcdGZsb2F0IHggPSBtb2QoIGosIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApO1xuXHRcdFx0ZmxvYXQgeSA9IGZsb29yKCBqIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcblx0XHRcdGZsb2F0IGR5ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0eSA9IGR5ICogKCB5ICsgMC41ICk7XG5cdFx0XHR2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYyID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAxLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYzID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAyLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7XG5cdFx0XHRtYXQ0IGJvbmUgPSBtYXQ0KCB2MSwgdjIsIHYzLCB2NCApO1xuXHRcdFx0cmV0dXJuIGJvbmU7XG5cdFx0fVxuXHQjZWxzZVxuXHRcdHVuaWZvcm0gbWF0NCBib25lTWF0cmljZXNbIE1BWF9CT05FUyBdO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdG1hdDQgYm9uZSA9IGJvbmVNYXRyaWNlc1sgaW50KGkpIF07XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbmRpZlxuI2VuZGlmXG4iLApza2lubmluZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dmVjNCBza2luVmVydGV4ID0gYmluZE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcblx0dmVjNCBza2lubmVkID0gdmVjNCggMC4wICk7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54O1xuXHRza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTtcblx0c2tpbm5lZCArPSBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53O1xuXHRza2lubmVkICA9IGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbm5lZDtcbiNlbmRpZlxuIixza2lubm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnkgKiBib25lTWF0WTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0Wjtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0Vztcblx0c2tpbk1hdHJpeCAgPSBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4O1xuXHRvYmplY3ROb3JtYWwgPSB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0Tm9ybWFsLCAwLjAgKSApLnh5ejtcbiNlbmRpZlxuIiwKc3BlY3VsYXJtYXBfZnJhZ21lbnQ6ImZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG4jaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHZlYzQgdGV4ZWxTcGVjdWxhciA9IHRleHR1cmUyRCggc3BlY3VsYXJNYXAsIHZVdiApO1xuXHRzcGVjdWxhclN0cmVuZ3RoID0gdGV4ZWxTcGVjdWxhci5yO1xuI2Vsc2Vcblx0c3BlY3VsYXJTdHJlbmd0aCA9IDEuMDtcbiNlbmRpZiIsc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9TUEVDVUxBUk1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhck1hcDtcbiNlbmRpZiIsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBUT05FX01BUFBJTkcgKVxuICBnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZlxuIix0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIjZGVmaW5lIHNhdHVyYXRlKGEpIGNsYW1wKCBhLCAwLjAsIDEuMCApXG51bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG51bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nV2hpdGVQb2ludDtcbnZlYzMgTGluZWFyVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdHJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7XG59XG52ZWMzIFJlaW5oYXJkVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdHJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApO1xufVxuI2RlZmluZSBVbmNoYXJ0ZWQySGVscGVyKCB4ICkgbWF4KCAoICggeCAqICggMC4xNSAqIHggKyAwLjEwICogMC41MCApICsgMC4yMCAqIDAuMDIgKSAvICggeCAqICggMC4xNSAqIHggKyAwLjUwICkgKyAwLjIwICogMC4zMCApICkgLSAwLjAyIC8gMC4zMCwgdmVjMyggMC4wICkgKVxudmVjMyBVbmNoYXJ0ZWQyVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdHJldHVybiBzYXR1cmF0ZSggVW5jaGFydGVkMkhlbHBlciggY29sb3IgKSAvIFVuY2hhcnRlZDJIZWxwZXIoIHZlYzMoIHRvbmVNYXBwaW5nV2hpdGVQb2ludCApICkgKTtcbn1cbnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdGNvbG9yID0gbWF4KCB2ZWMzKCAwLjAgKSwgY29sb3IgLSAwLjAwNCApO1xuXHRyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApO1xufVxuIiwKdXZfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfU1BFQ1VMQVJNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKSB8fCBkZWZpbmVkKCBVU0VfRU1JU1NJVkVNQVAgKSB8fCBkZWZpbmVkKCBVU0VfUk9VR0hORVNTTUFQICkgfHwgZGVmaW5lZCggVVNFX01FVEFMTkVTU01BUCApXG5cdHZhcnlpbmcgdmVjMiB2VXY7XG4jZW5kaWYiLHV2X3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9TUEVDVUxBUk1BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApIHx8IGRlZmluZWQoIFVTRV9FTUlTU0lWRU1BUCApIHx8IGRlZmluZWQoIFVTRV9ST1VHSE5FU1NNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTUVUQUxORVNTTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjtcblx0dW5pZm9ybSB2ZWM0IG9mZnNldFJlcGVhdDtcbiNlbmRpZlxuIiwKdXZfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9TUEVDVUxBUk1BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApIHx8IGRlZmluZWQoIFVTRV9FTUlTU0lWRU1BUCApIHx8IGRlZmluZWQoIFVTRV9ST1VHSE5FU1NNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTUVUQUxORVNTTUFQIClcblx0dlV2ID0gdXYgKiBvZmZzZXRSZXBlYXQuencgKyBvZmZzZXRSZXBlYXQueHk7XG4jZW5kaWYiLHV2Ml9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLHV2Ml9wYXJzX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdGF0dHJpYnV0ZSB2ZWMyIHV2Mjtcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLAp1djJfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dlV2MiA9IHV2MjtcbiNlbmRpZiIsd29ybGRwb3NfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQoIFBIT05HICkgfHwgZGVmaW5lZCggUEhZU0lDQUwgKSB8fCBkZWZpbmVkKCBMQU1CRVJUICkgfHwgZGVmaW5lZCAoIFVTRV9TSEFET1dNQVAgKVxuXHQjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdFx0dmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWxNYXRyaXggKiBza2lubmVkO1xuXHQjZWxzZVxuXHRcdHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHQjZW5kaWZcbiNlbmRpZlxuIixjdWJlX2ZyYWc6InVuaWZvcm0gc2FtcGxlckN1YmUgdEN1YmU7XG51bmlmb3JtIGZsb2F0IHRGbGlwO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZUN1YmUoIHRDdWJlLCB2ZWMzKCB0RmxpcCAqIHZXb3JsZFBvc2l0aW9uLngsIHZXb3JsZFBvc2l0aW9uLnl6ICkgKTtcblx0Z2xfRnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTtcbn1cbiIsCmN1YmVfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0dldvcmxkUG9zaXRpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG59XG4iLGRlcHRoX2ZyYWc6IiNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0dW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7XG5cdCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0XHRkaWZmdXNlQ29sb3IuYSA9IG9wYWNpdHk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIGdsX0ZyYWdDb29yZC56ICksIG9wYWNpdHkgKTtcblx0I2VsaWYgREVQVEhfUEFDS0lORyA9PSAzMjAxXG5cdFx0Z2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBnbF9GcmFnQ29vcmQueiApO1xuXHQjZW5kaWZcbn1cbiIsCmRlcHRoX3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG59XG4iLApkaXN0YW5jZVJHQkFfZnJhZzoidW5pZm9ybSB2ZWMzIGxpZ2h0UG9zO1xudmFyeWluZyB2ZWM0IHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluICgpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBsZW5ndGgoIHZXb3JsZFBvc2l0aW9uLnh5eiAtIGxpZ2h0UG9zLnh5eiApIC8gMTAwMC4wICk7XG59XG4iLGRpc3RhbmNlUkdCQV92ZXJ0OiJ2YXJ5aW5nIHZlYzQgdldvcmxkUG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uO1xufVxuIiwKZXF1aXJlY3RfZnJhZzoidW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xudW5pZm9ybSBmbG9hdCB0RmxpcDtcbnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiApO1xuXHR2ZWMyIHNhbXBsZVVWO1xuXHRzYW1wbGVVVi55ID0gc2F0dXJhdGUoIHRGbGlwICogZGlyZWN0aW9uLnkgKiAtMC41ICsgMC41ICk7XG5cdHNhbXBsZVVWLnggPSBhdGFuKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnggKSAqIFJFQ0lQUk9DQUxfUEkyICsgMC41O1xuXHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTtcbn1cbiIsZXF1aXJlY3RfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0dldvcmxkUG9zaXRpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG59XG4iLApsaW5lZGFzaGVkX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTaXplO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdGlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkge1xuXHRcdGRpc2NhcmQ7XG5cdH1cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59XG4iLApsaW5lZGFzaGVkX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2NhbGU7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZURpc3RhbmNlO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHR2TGluZURpc3RhbmNlID0gc2NhbGUgKiBsaW5lRGlzdGFuY2U7XG5cdHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufVxuIiwKbWVzaGJhc2ljX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKS54eXogKiBsaWdodE1hcEludGVuc2l0eTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdCNpbmNsdWRlIDxub3JtYWxfZmxpcD5cblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cbn1cbiIsCm1lc2hiYXNpY192ZXJ0OiIjaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufVxuIiwKbWVzaGxhbWJlcnRfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnM+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHQjaW5jbHVkZSA8bGlnaHRtYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0RpZmZ1c2VfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApO1xuXHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZMaWdodEZyb250IDogdkxpZ2h0QmFjaztcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gdkxpZ2h0RnJvbnQ7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICo9IEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPG5vcm1hbF9mbGlwPlxuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufVxuIiwKbWVzaGxhbWJlcnRfdmVydDoiI2RlZmluZSBMQU1CRVJUXG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnM+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn1cbiIsCm1lc2hwaG9uZ19mcmFnOiIjZGVmaW5lIFBIT05HXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gdmVjMyBzcGVjdWxhcjtcbnVuaWZvcm0gZmxvYXQgc2hpbmluZXNzO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnM+XG4jaW5jbHVkZSA8bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mbGlwPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfcGhvbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfdGVtcGxhdGU+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn1cbiIsCm1lc2hwaG9uZ192ZXJ0OiIjZGVmaW5lIFBIT05HXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbiNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59XG4iLAptZXNocGh5c2ljYWxfZnJhZzoiI2RlZmluZSBQSFlTSUNBTFxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcztcbnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBTVEFOREFSRFxuXHR1bmlmb3JtIGZsb2F0IGNsZWFyQ29hdDtcblx0dW5pZm9ybSBmbG9hdCBjbGVhckNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfcGFycz5cbiNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8cm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mbGlwPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfdGVtcGxhdGU+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn1cbiIsCm1lc2hwaHlzaWNhbF92ZXJ0OiIjZGVmaW5lIFBIWVNJQ0FMXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59XG4iLApub3JtYWxfZnJhZzoiI2RlZmluZSBOT1JNQUxcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmXG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZmxpcD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggcGFja05vcm1hbFRvUkdCKCBub3JtYWwgKSwgb3BhY2l0eSApO1xufVxuIiwKbm9ybWFsX3ZlcnQ6IiNkZWZpbmUgTk9STUFMXG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKVxuXHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNlbmRpZlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApXG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuI2VuZGlmXG59XG4iLApwb2ludHNfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cbn1cbiIsCnBvaW50c192ZXJ0OiJ1bmlmb3JtIGZsb2F0IHNpemU7XG51bmlmb3JtIGZsb2F0IHNjYWxlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaWZkZWYgVVNFX1NJWkVBVFRFTlVBVElPTlxuXHRcdGdsX1BvaW50U2l6ZSA9IHNpemUgKiAoIHNjYWxlIC8gLSBtdlBvc2l0aW9uLnogKTtcblx0I2Vsc2Vcblx0XHRnbF9Qb2ludFNpemUgPSBzaXplO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn1cbiIsCnNoYWRvd19mcmFnOiJ1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnM+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAwLjAsIDAuMCwgMC4wLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xufVxuIixzaGFkb3dfdmVydDoiI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cbn1cbiJ9LGFiPXtiYXNpYzp7dW5pZm9ybXM6SGEubWVyZ2UoW1YuY29tbW9uLApWLmFvbWFwLFYubGlnaHRtYXAsVi5mb2ddKSx2ZXJ0ZXhTaGFkZXI6VS5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpVLm1lc2hiYXNpY19mcmFnfSxsYW1iZXJ0Ont1bmlmb3JtczpIYS5tZXJnZShbVi5jb21tb24sVi5hb21hcCxWLmxpZ2h0bWFwLFYuZW1pc3NpdmVtYXAsVi5mb2csVi5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgSCgwKX19XSksdmVydGV4U2hhZGVyOlUubWVzaGxhbWJlcnRfdmVydCxmcmFnbWVudFNoYWRlcjpVLm1lc2hsYW1iZXJ0X2ZyYWd9LHBob25nOnt1bmlmb3JtczpIYS5tZXJnZShbVi5jb21tb24sVi5hb21hcCxWLmxpZ2h0bWFwLFYuZW1pc3NpdmVtYXAsVi5idW1wbWFwLFYubm9ybWFsbWFwLFYuZGlzcGxhY2VtZW50bWFwLFYuZ3JhZGllbnRtYXAsVi5mb2csVi5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgSCgwKX0sc3BlY3VsYXI6e3ZhbHVlOm5ldyBIKDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6VS5tZXNocGhvbmdfdmVydCwKZnJhZ21lbnRTaGFkZXI6VS5tZXNocGhvbmdfZnJhZ30sc3RhbmRhcmQ6e3VuaWZvcm1zOkhhLm1lcmdlKFtWLmNvbW1vbixWLmFvbWFwLFYubGlnaHRtYXAsVi5lbWlzc2l2ZW1hcCxWLmJ1bXBtYXAsVi5ub3JtYWxtYXAsVi5kaXNwbGFjZW1lbnRtYXAsVi5yb3VnaG5lc3NtYXAsVi5tZXRhbG5lc3NtYXAsVi5mb2csVi5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgSCgwKX0scm91Z2huZXNzOnt2YWx1ZTouNX0sbWV0YWxuZXNzOnt2YWx1ZTouNX0sZW52TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6VS5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpVLm1lc2hwaHlzaWNhbF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOkhhLm1lcmdlKFtWLnBvaW50cyxWLmZvZ10pLHZlcnRleFNoYWRlcjpVLnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOlUucG9pbnRzX2ZyYWd9LGRhc2hlZDp7dW5pZm9ybXM6SGEubWVyZ2UoW1YuY29tbW9uLFYuZm9nLHtzY2FsZTp7dmFsdWU6MX0sCmRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjpVLmxpbmVkYXNoZWRfdmVydCxmcmFnbWVudFNoYWRlcjpVLmxpbmVkYXNoZWRfZnJhZ30sZGVwdGg6e3VuaWZvcm1zOkhhLm1lcmdlKFtWLmNvbW1vbixWLmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpVLmRlcHRoX3ZlcnQsZnJhZ21lbnRTaGFkZXI6VS5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOkhhLm1lcmdlKFtWLmNvbW1vbixWLmJ1bXBtYXAsVi5ub3JtYWxtYXAsVi5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpVLm5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOlUubm9ybWFsX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOnt0Q3ViZTp7dmFsdWU6bnVsbH0sdEZsaXA6e3ZhbHVlOi0xfSxvcGFjaXR5Ont2YWx1ZToxfX0sdmVydGV4U2hhZGVyOlUuY3ViZV92ZXJ0LGZyYWdtZW50U2hhZGVyOlUuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH0sCnRGbGlwOnt2YWx1ZTotMX19LHZlcnRleFNoYWRlcjpVLmVxdWlyZWN0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6VS5lcXVpcmVjdF9mcmFnfSxkaXN0YW5jZVJHQkE6e3VuaWZvcm1zOntsaWdodFBvczp7dmFsdWU6bmV3IHB9fSx2ZXJ0ZXhTaGFkZXI6VS5kaXN0YW5jZVJHQkFfdmVydCxmcmFnbWVudFNoYWRlcjpVLmRpc3RhbmNlUkdCQV9mcmFnfX07YWIucGh5c2ljYWw9e3VuaWZvcm1zOkhhLm1lcmdlKFthYi5zdGFuZGFyZC51bmlmb3Jtcyx7Y2xlYXJDb2F0Ont2YWx1ZTowfSxjbGVhckNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9fV0pLHZlcnRleFNoYWRlcjpVLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOlUubWVzaHBoeXNpY2FsX2ZyYWd9O09iamVjdC5hc3NpZ24oaWQucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLm1pbi5jb3B5KGEpO3RoaXMubWF4LmNvcHkoYik7cmV0dXJuIHRoaXN9LHNldEZyb21Qb2ludHM6ZnVuY3Rpb24oYSl7dGhpcy5tYWtlRW1wdHkoKTsKZm9yKHZhciBiPTAsYz1hLmxlbmd0aDtiPGM7YisrKXRoaXMuZXhwYW5kQnlQb2ludChhW2JdKTtyZXR1cm4gdGhpc30sc2V0RnJvbUNlbnRlckFuZFNpemU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgRDtyZXR1cm4gZnVuY3Rpb24oYixjKXt2YXIgZD1hLmNvcHkoYykubXVsdGlwbHlTY2FsYXIoLjUpO3RoaXMubWluLmNvcHkoYikuc3ViKGQpO3RoaXMubWF4LmNvcHkoYikuYWRkKGQpO3JldHVybiB0aGlzfX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLm1pbi5jb3B5KGEubWluKTt0aGlzLm1heC5jb3B5KGEubWF4KTtyZXR1cm4gdGhpc30sbWFrZUVtcHR5OmZ1bmN0aW9uKCl7dGhpcy5taW4ueD10aGlzLm1pbi55PUluZmluaXR5O3RoaXMubWF4Lng9dGhpcy5tYXgueT0tSW5maW5pdHk7cmV0dXJuIHRoaXN9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHwKdGhpcy5tYXgueTx0aGlzLm1pbi55fSxnZXRDZW50ZXI6ZnVuY3Rpb24oYSl7YT1hfHxuZXcgRDtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/YS5zZXQoMCwwKTphLmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX0sZ2V0U2l6ZTpmdW5jdGlvbihhKXthPWF8fG5ldyBEO3JldHVybiB0aGlzLmlzRW1wdHkoKT9hLnNldCgwLDApOmEuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9LGV4cGFuZEJ5UG9pbnQ6ZnVuY3Rpb24oYSl7dGhpcy5taW4ubWluKGEpO3RoaXMubWF4Lm1heChhKTtyZXR1cm4gdGhpc30sZXhwYW5kQnlWZWN0b3I6ZnVuY3Rpb24oYSl7dGhpcy5taW4uc3ViKGEpO3RoaXMubWF4LmFkZChhKTtyZXR1cm4gdGhpc30sZXhwYW5kQnlTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy5taW4uYWRkU2NhbGFyKC1hKTt0aGlzLm1heC5hZGRTY2FsYXIoYSk7cmV0dXJuIHRoaXN9LGNvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEueDwKdGhpcy5taW4ueHx8YS54PnRoaXMubWF4Lnh8fGEueTx0aGlzLm1pbi55fHxhLnk+dGhpcy5tYXgueT8hMTohMH0sY29udGFpbnNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubWluLng8PWEubWluLngmJmEubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PWEubWluLnkmJmEubWF4Lnk8PXRoaXMubWF4Lnl9LGdldFBhcmFtZXRlcjpmdW5jdGlvbihhLGIpe3JldHVybihifHxuZXcgRCkuc2V0KChhLngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKGEueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSl9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWF4Lng8dGhpcy5taW4ueHx8YS5taW4ueD50aGlzLm1heC54fHxhLm1heC55PHRoaXMubWluLnl8fGEubWluLnk+dGhpcy5tYXgueT8hMTohMH0sY2xhbXBQb2ludDpmdW5jdGlvbihhLGIpe3JldHVybihifHxuZXcgRCkuY29weShhKS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9LApkaXN0YW5jZVRvUG9pbnQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgRDtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGEuY29weShiKS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKGIpLmxlbmd0aCgpfX0oKSxpbnRlcnNlY3Q6ZnVuY3Rpb24oYSl7dGhpcy5taW4ubWF4KGEubWluKTt0aGlzLm1heC5taW4oYS5tYXgpO3JldHVybiB0aGlzfSx1bmlvbjpmdW5jdGlvbihhKXt0aGlzLm1pbi5taW4oYS5taW4pO3RoaXMubWF4Lm1heChhLm1heCk7cmV0dXJuIHRoaXN9LHRyYW5zbGF0ZTpmdW5jdGlvbihhKXt0aGlzLm1pbi5hZGQoYSk7dGhpcy5tYXguYWRkKGEpO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWluLmVxdWFscyh0aGlzLm1pbikmJmEubWF4LmVxdWFscyh0aGlzLm1heCl9fSk7dmFyIEtmPTA7T2JqZWN0LmFzc2lnbihaLnByb3RvdHlwZSxzYS5wcm90b3R5cGUse2lzTWF0ZXJpYWw6ITAsc2V0VmFsdWVzOmZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PQphKWZvcih2YXIgYiBpbiBhKXt2YXIgYz1hW2JdO2lmKHZvaWQgMD09PWMpY29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrYisiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2Vsc2V7dmFyIGQ9dGhpc1tiXTt2b2lkIDA9PT1kP2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogJyIrYisiJyBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGlzIG1hdGVyaWFsLiIpOmQmJmQuaXNDb2xvcj9kLnNldChjKTpkJiZkLmlzVmVjdG9yMyYmYyYmYy5pc1ZlY3RvcjM/ZC5jb3B5KGMpOnRoaXNbYl09Im92ZXJkcmF3Ij09PWI/TnVtYmVyKGMpOmN9fX0sdG9KU09OOmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSl7dmFyIGI9W10sYztmb3IoYyBpbiBhKXt2YXIgZD1hW2NdO2RlbGV0ZSBkLm1ldGFkYXRhO2IucHVzaChkKX1yZXR1cm4gYn12YXIgYz12b2lkIDA9PT1hO2MmJihhPXt0ZXh0dXJlczp7fSxpbWFnZXM6e319KTt2YXIgZD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6Ik1hdGVyaWFsIiwKZ2VuZXJhdG9yOiJNYXRlcmlhbC50b0pTT04ifX07ZC51dWlkPXRoaXMudXVpZDtkLnR5cGU9dGhpcy50eXBlOyIiIT09dGhpcy5uYW1lJiYoZC5uYW1lPXRoaXMubmFtZSk7dGhpcy5jb2xvciYmdGhpcy5jb2xvci5pc0NvbG9yJiYoZC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpKTt2b2lkIDAhPT10aGlzLnJvdWdobmVzcyYmKGQucm91Z2huZXNzPXRoaXMucm91Z2huZXNzKTt2b2lkIDAhPT10aGlzLm1ldGFsbmVzcyYmKGQubWV0YWxuZXNzPXRoaXMubWV0YWxuZXNzKTt0aGlzLmVtaXNzaXZlJiZ0aGlzLmVtaXNzaXZlLmlzQ29sb3ImJihkLmVtaXNzaXZlPXRoaXMuZW1pc3NpdmUuZ2V0SGV4KCkpO3RoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKGQuc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSk7dm9pZCAwIT09dGhpcy5zaGluaW5lc3MmJihkLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyk7dm9pZCAwIT09dGhpcy5jbGVhckNvYXQmJihkLmNsZWFyQ29hdD0KdGhpcy5jbGVhckNvYXQpO3ZvaWQgMCE9PXRoaXMuY2xlYXJDb2F0Um91Z2huZXNzJiYoZC5jbGVhckNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhckNvYXRSb3VnaG5lc3MpO3RoaXMubWFwJiZ0aGlzLm1hcC5pc1RleHR1cmUmJihkLm1hcD10aGlzLm1hcC50b0pTT04oYSkudXVpZCk7dGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihkLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKGEpLnV1aWQpO3RoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYoZC5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTihhKS51dWlkKTt0aGlzLmJ1bXBNYXAmJnRoaXMuYnVtcE1hcC5pc1RleHR1cmUmJihkLmJ1bXBNYXA9dGhpcy5idW1wTWFwLnRvSlNPTihhKS51dWlkLGQuYnVtcFNjYWxlPXRoaXMuYnVtcFNjYWxlKTt0aGlzLm5vcm1hbE1hcCYmdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlJiYoZC5ub3JtYWxNYXA9dGhpcy5ub3JtYWxNYXAudG9KU09OKGEpLnV1aWQsCmQubm9ybWFsU2NhbGU9dGhpcy5ub3JtYWxTY2FsZS50b0FycmF5KCkpO3RoaXMuZGlzcGxhY2VtZW50TWFwJiZ0aGlzLmRpc3BsYWNlbWVudE1hcC5pc1RleHR1cmUmJihkLmRpc3BsYWNlbWVudE1hcD10aGlzLmRpc3BsYWNlbWVudE1hcC50b0pTT04oYSkudXVpZCxkLmRpc3BsYWNlbWVudFNjYWxlPXRoaXMuZGlzcGxhY2VtZW50U2NhbGUsZC5kaXNwbGFjZW1lbnRCaWFzPXRoaXMuZGlzcGxhY2VtZW50Qmlhcyk7dGhpcy5yb3VnaG5lc3NNYXAmJnRoaXMucm91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKGQucm91Z2huZXNzTWFwPXRoaXMucm91Z2huZXNzTWFwLnRvSlNPTihhKS51dWlkKTt0aGlzLm1ldGFsbmVzc01hcCYmdGhpcy5tZXRhbG5lc3NNYXAuaXNUZXh0dXJlJiYoZC5tZXRhbG5lc3NNYXA9dGhpcy5tZXRhbG5lc3NNYXAudG9KU09OKGEpLnV1aWQpO3RoaXMuZW1pc3NpdmVNYXAmJnRoaXMuZW1pc3NpdmVNYXAuaXNUZXh0dXJlJiYoZC5lbWlzc2l2ZU1hcD10aGlzLmVtaXNzaXZlTWFwLnRvSlNPTihhKS51dWlkKTsKdGhpcy5zcGVjdWxhck1hcCYmdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUmJihkLnNwZWN1bGFyTWFwPXRoaXMuc3BlY3VsYXJNYXAudG9KU09OKGEpLnV1aWQpO3RoaXMuZW52TWFwJiZ0aGlzLmVudk1hcC5pc1RleHR1cmUmJihkLmVudk1hcD10aGlzLmVudk1hcC50b0pTT04oYSkudXVpZCxkLnJlZmxlY3Rpdml0eT10aGlzLnJlZmxlY3Rpdml0eSk7dGhpcy5ncmFkaWVudE1hcCYmdGhpcy5ncmFkaWVudE1hcC5pc1RleHR1cmUmJihkLmdyYWRpZW50TWFwPXRoaXMuZ3JhZGllbnRNYXAudG9KU09OKGEpLnV1aWQpO3ZvaWQgMCE9PXRoaXMuc2l6ZSYmKGQuc2l6ZT10aGlzLnNpemUpO3ZvaWQgMCE9PXRoaXMuc2l6ZUF0dGVudWF0aW9uJiYoZC5zaXplQXR0ZW51YXRpb249dGhpcy5zaXplQXR0ZW51YXRpb24pOzEhPT10aGlzLmJsZW5kaW5nJiYoZC5ibGVuZGluZz10aGlzLmJsZW5kaW5nKTsyIT09dGhpcy5zaGFkaW5nJiYoZC5zaGFkaW5nPXRoaXMuc2hhZGluZyk7MCE9PXRoaXMuc2lkZSYmCihkLnNpZGU9dGhpcy5zaWRlKTswIT09dGhpcy52ZXJ0ZXhDb2xvcnMmJihkLnZlcnRleENvbG9ycz10aGlzLnZlcnRleENvbG9ycyk7MT50aGlzLm9wYWNpdHkmJihkLm9wYWNpdHk9dGhpcy5vcGFjaXR5KTshMD09PXRoaXMudHJhbnNwYXJlbnQmJihkLnRyYW5zcGFyZW50PXRoaXMudHJhbnNwYXJlbnQpO2QuZGVwdGhGdW5jPXRoaXMuZGVwdGhGdW5jO2QuZGVwdGhUZXN0PXRoaXMuZGVwdGhUZXN0O2QuZGVwdGhXcml0ZT10aGlzLmRlcHRoV3JpdGU7MDx0aGlzLmFscGhhVGVzdCYmKGQuYWxwaGFUZXN0PXRoaXMuYWxwaGFUZXN0KTshMD09PXRoaXMucHJlbXVsdGlwbGllZEFscGhhJiYoZC5wcmVtdWx0aXBsaWVkQWxwaGE9dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEpOyEwPT09dGhpcy53aXJlZnJhbWUmJihkLndpcmVmcmFtZT10aGlzLndpcmVmcmFtZSk7MTx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCYmKGQud2lyZWZyYW1lTGluZXdpZHRoPXRoaXMud2lyZWZyYW1lTGluZXdpZHRoKTsKInJvdW5kIiE9PXRoaXMud2lyZWZyYW1lTGluZWNhcCYmKGQud2lyZWZyYW1lTGluZWNhcD10aGlzLndpcmVmcmFtZUxpbmVjYXApOyJyb3VuZCIhPT10aGlzLndpcmVmcmFtZUxpbmVqb2luJiYoZC53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVqb2luKTtkLnNraW5uaW5nPXRoaXMuc2tpbm5pbmc7ZC5tb3JwaFRhcmdldHM9dGhpcy5tb3JwaFRhcmdldHM7ZC5kaXRoZXJpbmc9dGhpcy5kaXRoZXJpbmc7YyYmKGM9YihhLnRleHR1cmVzKSxhPWIoYS5pbWFnZXMpLDA8Yy5sZW5ndGgmJihkLnRleHR1cmVzPWMpLDA8YS5sZW5ndGgmJihkLmltYWdlcz1hKSk7cmV0dXJuIGR9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMubmFtZT1hLm5hbWU7dGhpcy5mb2c9YS5mb2c7dGhpcy5saWdodHM9YS5saWdodHM7dGhpcy5ibGVuZGluZz1hLmJsZW5kaW5nO3RoaXMuc2lkZT1hLnNpZGU7CnRoaXMuc2hhZGluZz1hLnNoYWRpbmc7dGhpcy52ZXJ0ZXhDb2xvcnM9YS52ZXJ0ZXhDb2xvcnM7dGhpcy5vcGFjaXR5PWEub3BhY2l0eTt0aGlzLnRyYW5zcGFyZW50PWEudHJhbnNwYXJlbnQ7dGhpcy5ibGVuZFNyYz1hLmJsZW5kU3JjO3RoaXMuYmxlbmREc3Q9YS5ibGVuZERzdDt0aGlzLmJsZW5kRXF1YXRpb249YS5ibGVuZEVxdWF0aW9uO3RoaXMuYmxlbmRTcmNBbHBoYT1hLmJsZW5kU3JjQWxwaGE7dGhpcy5ibGVuZERzdEFscGhhPWEuYmxlbmREc3RBbHBoYTt0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT1hLmJsZW5kRXF1YXRpb25BbHBoYTt0aGlzLmRlcHRoRnVuYz1hLmRlcHRoRnVuYzt0aGlzLmRlcHRoVGVzdD1hLmRlcHRoVGVzdDt0aGlzLmRlcHRoV3JpdGU9YS5kZXB0aFdyaXRlO3RoaXMuY29sb3JXcml0ZT1hLmNvbG9yV3JpdGU7dGhpcy5wcmVjaXNpb249YS5wcmVjaXNpb247dGhpcy5wb2x5Z29uT2Zmc2V0PWEucG9seWdvbk9mZnNldDt0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9CmEucG9seWdvbk9mZnNldEZhY3Rvcjt0aGlzLnBvbHlnb25PZmZzZXRVbml0cz1hLnBvbHlnb25PZmZzZXRVbml0czt0aGlzLmRpdGhlcmluZz1hLmRpdGhlcmluZzt0aGlzLmFscGhhVGVzdD1hLmFscGhhVGVzdDt0aGlzLnByZW11bHRpcGxpZWRBbHBoYT1hLnByZW11bHRpcGxpZWRBbHBoYTt0aGlzLm92ZXJkcmF3PWEub3ZlcmRyYXc7dGhpcy52aXNpYmxlPWEudmlzaWJsZTt0aGlzLmNsaXBTaGFkb3dzPWEuY2xpcFNoYWRvd3M7dGhpcy5jbGlwSW50ZXJzZWN0aW9uPWEuY2xpcEludGVyc2VjdGlvbjthPWEuY2xpcHBpbmdQbGFuZXM7dmFyIGI9bnVsbDtpZihudWxsIT09YSlmb3IodmFyIGM9YS5sZW5ndGgsYj1BcnJheShjKSxkPTA7ZCE9PWM7KytkKWJbZF09YVtkXS5jbG9uZSgpO3RoaXMuY2xpcHBpbmdQbGFuZXM9YjtyZXR1cm4gdGhpc30sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KTtFYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShaLnByb3RvdHlwZSk7CkVhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FYTtFYS5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMDtFYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtaLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLmZyYWdtZW50U2hhZGVyPWEuZnJhZ21lbnRTaGFkZXI7dGhpcy52ZXJ0ZXhTaGFkZXI9YS52ZXJ0ZXhTaGFkZXI7dGhpcy51bmlmb3Jtcz1IYS5jbG9uZShhLnVuaWZvcm1zKTt0aGlzLmRlZmluZXM9YS5kZWZpbmVzO3RoaXMud2lyZWZyYW1lPWEud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWEud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMubGlnaHRzPWEubGlnaHRzO3RoaXMuY2xpcHBpbmc9YS5jbGlwcGluZzt0aGlzLnNraW5uaW5nPWEuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9YS5tb3JwaFRhcmdldHM7dGhpcy5tb3JwaE5vcm1hbHM9YS5tb3JwaE5vcm1hbHM7dGhpcy5leHRlbnNpb25zPWEuZXh0ZW5zaW9ucztyZXR1cm4gdGhpc307RWEucHJvdG90eXBlLnRvSlNPTj0KZnVuY3Rpb24oYSl7YT1aLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGEpO2EudW5pZm9ybXM9dGhpcy51bmlmb3JtczthLnZlcnRleFNoYWRlcj10aGlzLnZlcnRleFNoYWRlcjthLmZyYWdtZW50U2hhZGVyPXRoaXMuZnJhZ21lbnRTaGFkZXI7cmV0dXJuIGF9OyRhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTskYS5wcm90b3R5cGUuY29uc3RydWN0b3I9JGE7JGEucHJvdG90eXBlLmlzTWVzaERlcHRoTWF0ZXJpYWw9ITA7JGEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5kZXB0aFBhY2tpbmc9YS5kZXB0aFBhY2tpbmc7dGhpcy5za2lubmluZz1hLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWEubW9ycGhUYXJnZXRzO3RoaXMubWFwPWEubWFwO3RoaXMuYWxwaGFNYXA9YS5hbHBoYU1hcDt0aGlzLmRpc3BsYWNlbWVudE1hcD1hLmRpc3BsYWNlbWVudE1hcDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPQphLmRpc3BsYWNlbWVudFNjYWxlO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz1hLmRpc3BsYWNlbWVudEJpYXM7dGhpcy53aXJlZnJhbWU9YS53aXJlZnJhbWU7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9YS53aXJlZnJhbWVMaW5ld2lkdGg7cmV0dXJuIHRoaXN9O09iamVjdC5hc3NpZ24oVGEucHJvdG90eXBlLHtpc0JveDM6ITAsc2V0OmZ1bmN0aW9uKGEsYil7dGhpcy5taW4uY29weShhKTt0aGlzLm1heC5jb3B5KGIpO3JldHVybiB0aGlzfSxzZXRGcm9tQXJyYXk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPUluZmluaXR5LGM9SW5maW5pdHksZD1JbmZpbml0eSxlPS1JbmZpbml0eSxmPS1JbmZpbml0eSxnPS1JbmZpbml0eSxoPTAsaz1hLmxlbmd0aDtoPGs7aCs9Myl7dmFyIG09YVtoXSxsPWFbaCsxXSxxPWFbaCsyXTttPGImJihiPW0pO2w8YyYmKGM9bCk7cTxkJiYoZD1xKTttPmUmJihlPW0pO2w+ZiYmKGY9bCk7cT5nJiYoZz1xKX10aGlzLm1pbi5zZXQoYixjLGQpO3RoaXMubWF4LnNldChlLApmLGcpO3JldHVybiB0aGlzfSxzZXRGcm9tQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1JbmZpbml0eSxjPUluZmluaXR5LGQ9SW5maW5pdHksZT0tSW5maW5pdHksZj0tSW5maW5pdHksZz0tSW5maW5pdHksaD0wLGs9YS5jb3VudDtoPGs7aCsrKXt2YXIgbT1hLmdldFgoaCksbD1hLmdldFkoaCkscT1hLmdldFooaCk7bTxiJiYoYj1tKTtsPGMmJihjPWwpO3E8ZCYmKGQ9cSk7bT5lJiYoZT1tKTtsPmYmJihmPWwpO3E+ZyYmKGc9cSl9dGhpcy5taW4uc2V0KGIsYyxkKTt0aGlzLm1heC5zZXQoZSxmLGcpO3JldHVybiB0aGlzfSxzZXRGcm9tUG9pbnRzOmZ1bmN0aW9uKGEpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aDtiPGM7YisrKXRoaXMuZXhwYW5kQnlQb2ludChhW2JdKTtyZXR1cm4gdGhpc30sc2V0RnJvbUNlbnRlckFuZFNpemU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYixjKXt2YXIgZD1hLmNvcHkoYykubXVsdGlwbHlTY2FsYXIoLjUpOwp0aGlzLm1pbi5jb3B5KGIpLnN1YihkKTt0aGlzLm1heC5jb3B5KGIpLmFkZChkKTtyZXR1cm4gdGhpc319KCksc2V0RnJvbU9iamVjdDpmdW5jdGlvbihhKXt0aGlzLm1ha2VFbXB0eSgpO3JldHVybiB0aGlzLmV4cGFuZEJ5T2JqZWN0KGEpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLm1pbi5jb3B5KGEubWluKTt0aGlzLm1heC5jb3B5KGEubWF4KTtyZXR1cm4gdGhpc30sbWFrZUVtcHR5OmZ1bmN0aW9uKCl7dGhpcy5taW4ueD10aGlzLm1pbi55PXRoaXMubWluLno9SW5maW5pdHk7dGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LUluZmluaXR5O3JldHVybiB0aGlzfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fHx0aGlzLm1heC56PHRoaXMubWluLnp9LGdldENlbnRlcjpmdW5jdGlvbihhKXthPQphfHxuZXcgcDtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/YS5zZXQoMCwwLDApOmEuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfSxnZXRTaXplOmZ1bmN0aW9uKGEpe2E9YXx8bmV3IHA7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP2Euc2V0KDAsMCwwKTphLnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfSxleHBhbmRCeVBvaW50OmZ1bmN0aW9uKGEpe3RoaXMubWluLm1pbihhKTt0aGlzLm1heC5tYXgoYSk7cmV0dXJuIHRoaXN9LGV4cGFuZEJ5VmVjdG9yOmZ1bmN0aW9uKGEpe3RoaXMubWluLnN1YihhKTt0aGlzLm1heC5hZGQoYSk7cmV0dXJuIHRoaXN9LGV4cGFuZEJ5U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMubWluLmFkZFNjYWxhcigtYSk7dGhpcy5tYXguYWRkU2NhbGFyKGEpO3JldHVybiB0aGlzfSxleHBhbmRCeU9iamVjdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz10aGlzO2IudXBkYXRlTWF0cml4V29ybGQoITApOwpiLnRyYXZlcnNlKGZ1bmN0aW9uKGIpe3ZhciBlLGY7ZT1iLmdlb21ldHJ5O2lmKHZvaWQgMCE9PWUpaWYoZS5pc0dlb21ldHJ5KXt2YXIgZz1lLnZlcnRpY2VzO2U9MDtmb3IoZj1nLmxlbmd0aDtlPGY7ZSsrKWEuY29weShnW2VdKSxhLmFwcGx5TWF0cml4NChiLm1hdHJpeFdvcmxkKSxjLmV4cGFuZEJ5UG9pbnQoYSl9ZWxzZSBpZihlLmlzQnVmZmVyR2VvbWV0cnkmJihnPWUuYXR0cmlidXRlcy5wb3NpdGlvbix2b2lkIDAhPT1nKSlmb3IoZT0wLGY9Zy5jb3VudDtlPGY7ZSsrKWEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShnLGUpLmFwcGx5TWF0cml4NChiLm1hdHJpeFdvcmxkKSxjLmV4cGFuZEJ5UG9pbnQoYSl9KTtyZXR1cm4gdGhpc319KCksY29udGFpbnNQb2ludDpmdW5jdGlvbihhKXtyZXR1cm4gYS54PHRoaXMubWluLnh8fGEueD50aGlzLm1heC54fHxhLnk8dGhpcy5taW4ueXx8YS55PnRoaXMubWF4Lnl8fGEuejx0aGlzLm1pbi56fHxhLno+dGhpcy5tYXguej8hMTohMH0sY29udGFpbnNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubWluLng8PQphLm1pbi54JiZhLm1heC54PD10aGlzLm1heC54JiZ0aGlzLm1pbi55PD1hLm1pbi55JiZhLm1heC55PD10aGlzLm1heC55JiZ0aGlzLm1pbi56PD1hLm1pbi56JiZhLm1heC56PD10aGlzLm1heC56fSxnZXRQYXJhbWV0ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYnx8bmV3IHApLnNldCgoYS54LXRoaXMubWluLngpLyh0aGlzLm1heC54LXRoaXMubWluLngpLChhLnktdGhpcy5taW4ueSkvKHRoaXMubWF4LnktdGhpcy5taW4ueSksKGEuei10aGlzLm1pbi56KS8odGhpcy5tYXguei10aGlzLm1pbi56KSl9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWF4Lng8dGhpcy5taW4ueHx8YS5taW4ueD50aGlzLm1heC54fHxhLm1heC55PHRoaXMubWluLnl8fGEubWluLnk+dGhpcy5tYXgueXx8YS5tYXguejx0aGlzLm1pbi56fHxhLm1pbi56PnRoaXMubWF4Lno/ITE6ITB9LGludGVyc2VjdHNTcGhlcmU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYil7dGhpcy5jbGFtcFBvaW50KGIuY2VudGVyLAphKTtyZXR1cm4gYS5kaXN0YW5jZVRvU3F1YXJlZChiLmNlbnRlcik8PWIucmFkaXVzKmIucmFkaXVzfX0oKSxpbnRlcnNlY3RzUGxhbmU6ZnVuY3Rpb24oYSl7dmFyIGIsYzswPGEubm9ybWFsLng/KGI9YS5ub3JtYWwueCp0aGlzLm1pbi54LGM9YS5ub3JtYWwueCp0aGlzLm1heC54KTooYj1hLm5vcm1hbC54KnRoaXMubWF4LngsYz1hLm5vcm1hbC54KnRoaXMubWluLngpOzA8YS5ub3JtYWwueT8oYis9YS5ub3JtYWwueSp0aGlzLm1pbi55LGMrPWEubm9ybWFsLnkqdGhpcy5tYXgueSk6KGIrPWEubm9ybWFsLnkqdGhpcy5tYXgueSxjKz1hLm5vcm1hbC55KnRoaXMubWluLnkpOzA8YS5ub3JtYWwuej8oYis9YS5ub3JtYWwueip0aGlzLm1pbi56LGMrPWEubm9ybWFsLnoqdGhpcy5tYXgueik6KGIrPWEubm9ybWFsLnoqdGhpcy5tYXgueixjKz1hLm5vcm1hbC56KnRoaXMubWluLnopO3JldHVybiBiPD1hLmNvbnN0YW50JiZjPj1hLmNvbnN0YW50fSxjbGFtcFBvaW50OmZ1bmN0aW9uKGEsCmIpe3JldHVybihifHxuZXcgcCkuY29weShhKS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9LGRpc3RhbmNlVG9Qb2ludDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gYS5jb3B5KGIpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIoYikubGVuZ3RoKCl9fSgpLGdldEJvdW5kaW5nU3BoZXJlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe2I9Ynx8bmV3IEdhO3RoaXMuZ2V0Q2VudGVyKGIuY2VudGVyKTtiLnJhZGl1cz0uNSp0aGlzLmdldFNpemUoYSkubGVuZ3RoKCk7cmV0dXJuIGJ9fSgpLGludGVyc2VjdDpmdW5jdGlvbihhKXt0aGlzLm1pbi5tYXgoYS5taW4pO3RoaXMubWF4Lm1pbihhLm1heCk7dGhpcy5pc0VtcHR5KCkmJnRoaXMubWFrZUVtcHR5KCk7cmV0dXJuIHRoaXN9LHVuaW9uOmZ1bmN0aW9uKGEpe3RoaXMubWluLm1pbihhLm1pbik7dGhpcy5tYXgubWF4KGEubWF4KTtyZXR1cm4gdGhpc30sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKCl7dmFyIGE9CltuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcF07cmV0dXJuIGZ1bmN0aW9uKGIpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiB0aGlzO2FbMF0uc2V0KHRoaXMubWluLngsdGhpcy5taW4ueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQoYik7YVsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NChiKTthWzJdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KGIpO2FbM10uc2V0KHRoaXMubWluLngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQoYik7YVs0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NChiKTthWzVdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KGIpO2FbNl0uc2V0KHRoaXMubWF4LngsdGhpcy5tYXgueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQoYik7CmFbN10uc2V0KHRoaXMubWF4LngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQoYik7dGhpcy5zZXRGcm9tUG9pbnRzKGEpO3JldHVybiB0aGlzfX0oKSx0cmFuc2xhdGU6ZnVuY3Rpb24oYSl7dGhpcy5taW4uYWRkKGEpO3RoaXMubWF4LmFkZChhKTtyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLm1pbi5lcXVhbHModGhpcy5taW4pJiZhLm1heC5lcXVhbHModGhpcy5tYXgpfX0pO09iamVjdC5hc3NpZ24oR2EucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLmNlbnRlci5jb3B5KGEpO3RoaXMucmFkaXVzPWI7cmV0dXJuIHRoaXN9LHNldEZyb21Qb2ludHM6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgVGE7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcy5jZW50ZXI7dm9pZCAwIT09Yz9kLmNvcHkoYyk6YS5zZXRGcm9tUG9pbnRzKGIpLmdldENlbnRlcihkKTtmb3IodmFyIGU9MCxmPTAsZz1iLmxlbmd0aDtmPGc7ZisrKWU9TWF0aC5tYXgoZSwKZC5kaXN0YW5jZVRvU3F1YXJlZChiW2ZdKSk7dGhpcy5yYWRpdXM9TWF0aC5zcXJ0KGUpO3JldHVybiB0aGlzfX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLmNlbnRlci5jb3B5KGEuY2VudGVyKTt0aGlzLnJhZGl1cz1hLnJhZGl1cztyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gMD49dGhpcy5yYWRpdXN9LGNvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c30sZGlzdGFuY2VUb1BvaW50OmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucmFkaXVzK2EucmFkaXVzO3JldHVybiBhLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmNlbnRlcik8PQpiKmJ9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX0saW50ZXJzZWN0c1BsYW5lOmZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLmFicyh0aGlzLmNlbnRlci5kb3QoYS5ub3JtYWwpLWEuY29uc3RhbnQpPD10aGlzLnJhZGl1c30sY2xhbXBQb2ludDpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKGEpLGQ9Ynx8bmV3IHA7ZC5jb3B5KGEpO2M+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihkLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZC5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSk7cmV0dXJuIGR9LGdldEJvdW5kaW5nQm94OmZ1bmN0aW9uKGEpe2E9YXx8bmV3IFRhO2Euc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKTthLmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKTtyZXR1cm4gYX0sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKGEpe3RoaXMuY2VudGVyLmFwcGx5TWF0cml4NChhKTsKdGhpcy5yYWRpdXMqPWEuZ2V0TWF4U2NhbGVPbkF4aXMoKTtyZXR1cm4gdGhpc30sdHJhbnNsYXRlOmZ1bmN0aW9uKGEpe3RoaXMuY2VudGVyLmFkZChhKTtyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpJiZhLnJhZGl1cz09PXRoaXMucmFkaXVzfX0pO09iamVjdC5hc3NpZ24oS2EucHJvdG90eXBlLHtpc01hdHJpeDM6ITAsc2V0OmZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxrKXt2YXIgbT10aGlzLmVsZW1lbnRzO21bMF09YTttWzFdPWQ7bVsyXT1nO21bM109YjttWzRdPWU7bVs1XT1oO21bNl09YzttWzddPWY7bVs4XT1rO3JldHVybiB0aGlzfSxpZGVudGl0eTpmdW5jdGlvbigpe3RoaXMuc2V0KDEsMCwwLDAsMSwwLDAsMCwxKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX0sY29weTpmdW5jdGlvbihhKXt2YXIgYj0KdGhpcy5lbGVtZW50czthPWEuZWxlbWVudHM7YlswXT1hWzBdO2JbMV09YVsxXTtiWzJdPWFbMl07YlszXT1hWzNdO2JbNF09YVs0XTtiWzVdPWFbNV07Yls2XT1hWzZdO2JbN109YVs3XTtiWzhdPWFbOF07cmV0dXJuIHRoaXN9LHNldEZyb21NYXRyaXg0OmZ1bmN0aW9uKGEpe2E9YS5lbGVtZW50czt0aGlzLnNldChhWzBdLGFbNF0sYVs4XSxhWzFdLGFbNV0sYVs5XSxhWzJdLGFbNl0sYVsxMF0pO3JldHVybiB0aGlzfSxhcHBseVRvQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe2Zvcih2YXIgYz0wLGQ9Yi5jb3VudDtjPGQ7YysrKWEueD1iLmdldFgoYyksYS55PWIuZ2V0WShjKSxhLno9Yi5nZXRaKGMpLGEuYXBwbHlNYXRyaXgzKHRoaXMpLGIuc2V0WFlaKGMsYS54LGEueSxhLnopO3JldHVybiBifX0oKSxtdWx0aXBseTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsYSl9LHByZW11bHRpcGx5OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXMoYSwKdGhpcyl9LG11bHRpcGx5TWF0cmljZXM6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmVsZW1lbnRzLGQ9Yi5lbGVtZW50cyxlPXRoaXMuZWxlbWVudHMsZj1jWzBdLGc9Y1szXSxoPWNbNl0saz1jWzFdLG09Y1s0XSxsPWNbN10scT1jWzJdLG49Y1s1XSxjPWNbOF0scj1kWzBdLHA9ZFszXSx0PWRbNl0seT1kWzFdLHg9ZFs0XSx2PWRbN10sRz1kWzJdLHc9ZFs1XSxkPWRbOF07ZVswXT1mKnIrZyp5K2gqRztlWzNdPWYqcCtnKngraCp3O2VbNl09Zip0K2cqditoKmQ7ZVsxXT1rKnIrbSp5K2wqRztlWzRdPWsqcCttKngrbCp3O2VbN109ayp0K20qditsKmQ7ZVsyXT1xKnIrbip5K2MqRztlWzVdPXEqcCtuKngrYyp3O2VbOF09cSp0K24qditjKmQ7cmV0dXJuIHRoaXN9LG11bHRpcGx5U2NhbGFyOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWxlbWVudHM7YlswXSo9YTtiWzNdKj1hO2JbNl0qPWE7YlsxXSo9YTtiWzRdKj1hO2JbN10qPWE7YlsyXSo9YTtiWzVdKj1hO2JbOF0qPWE7cmV0dXJuIHRoaXN9LApkZXRlcm1pbmFudDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZWxlbWVudHMsYj1hWzBdLGM9YVsxXSxkPWFbMl0sZT1hWzNdLGY9YVs0XSxnPWFbNV0saD1hWzZdLGs9YVs3XSxhPWFbOF07cmV0dXJuIGIqZiphLWIqZyprLWMqZSphK2MqZypoK2QqZSprLWQqZipofSxnZXRJbnZlcnNlOmZ1bmN0aW9uKGEsYil7YSYmYS5pc01hdHJpeDQmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDMuZ2V0SW52ZXJzZSBubyBsb25nZXIgdGFrZXMgYSBNYXRyaXg0IGFyZ3VtZW50LiIpO3ZhciBjPWEuZWxlbWVudHMsZD10aGlzLmVsZW1lbnRzLGU9Y1swXSxmPWNbMV0sZz1jWzJdLGg9Y1szXSxrPWNbNF0sbT1jWzVdLGw9Y1s2XSxxPWNbN10sYz1jWzhdLG49YyprLW0qcSxyPW0qbC1jKmgscD1xKmgtaypsLHQ9ZSpuK2YqcitnKnA7aWYoMD09PXQpe2lmKCEwPT09Yil0aHJvdyBFcnJvcigiVEhSRUUuTWF0cml4My5nZXRJbnZlcnNlKCk6IGNhbid0IGludmVydCBtYXRyaXgsIGRldGVybWluYW50IGlzIDAiKTsKY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzLmdldEludmVyc2UoKTogY2FuJ3QgaW52ZXJ0IG1hdHJpeCwgZGV0ZXJtaW5hbnQgaXMgMCIpO3JldHVybiB0aGlzLmlkZW50aXR5KCl9dD0xL3Q7ZFswXT1uKnQ7ZFsxXT0oZypxLWMqZikqdDtkWzJdPShtKmYtZyprKSp0O2RbM109cip0O2RbNF09KGMqZS1nKmwpKnQ7ZFs1XT0oZypoLW0qZSkqdDtkWzZdPXAqdDtkWzddPShmKmwtcSplKSp0O2RbOF09KGsqZS1mKmgpKnQ7cmV0dXJuIHRoaXN9LHRyYW5zcG9zZTpmdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5lbGVtZW50czthPWJbMV07YlsxXT1iWzNdO2JbM109YTthPWJbMl07YlsyXT1iWzZdO2JbNl09YTthPWJbNV07Yls1XT1iWzddO2JbN109YTtyZXR1cm4gdGhpc30sZ2V0Tm9ybWFsTWF0cml4OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KGEpLmdldEludmVyc2UodGhpcykudHJhbnNwb3NlKCl9LHRyYW5zcG9zZUludG9BcnJheTpmdW5jdGlvbihhKXt2YXIgYj0KdGhpcy5lbGVtZW50czthWzBdPWJbMF07YVsxXT1iWzNdO2FbMl09Yls2XTthWzNdPWJbMV07YVs0XT1iWzRdO2FbNV09Yls3XTthWzZdPWJbMl07YVs3XT1iWzVdO2FbOF09Yls4XTtyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWxlbWVudHM7YT1hLmVsZW1lbnRzO2Zvcih2YXIgYz0wOzk+YztjKyspaWYoYltjXSE9PWFbY10pcmV0dXJuITE7cmV0dXJuITB9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO2Zvcih2YXIgYz0wOzk+YztjKyspdGhpcy5lbGVtZW50c1tjXT1hW2MrYl07cmV0dXJuIHRoaXN9LHRvQXJyYXk6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1hJiYoYT1bXSk7dm9pZCAwPT09YiYmKGI9MCk7dmFyIGM9dGhpcy5lbGVtZW50czthW2JdPWNbMF07YVtiKzFdPWNbMV07YVtiKzJdPWNbMl07YVtiKzNdPWNbM107YVtiKzRdPWNbNF07YVtiKzVdPWNbNV07YVtiKzZdPWNbNl07YVtiKzddPWNbN107YVtiKzhdPQpjWzhdO3JldHVybiBhfX0pO09iamVjdC5hc3NpZ24od2EucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLm5vcm1hbC5jb3B5KGEpO3RoaXMuY29uc3RhbnQ9YjtyZXR1cm4gdGhpc30sc2V0Q29tcG9uZW50czpmdW5jdGlvbihhLGIsYyxkKXt0aGlzLm5vcm1hbC5zZXQoYSxiLGMpO3RoaXMuY29uc3RhbnQ9ZDtyZXR1cm4gdGhpc30sc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQ6ZnVuY3Rpb24oYSxiKXt0aGlzLm5vcm1hbC5jb3B5KGEpO3RoaXMuY29uc3RhbnQ9LWIuZG90KHRoaXMubm9ybWFsKTtyZXR1cm4gdGhpc30sc2V0RnJvbUNvcGxhbmFyUG9pbnRzOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYyxkLGUpe2Q9YS5zdWJWZWN0b3JzKGUsZCkuY3Jvc3MoYi5zdWJWZWN0b3JzKGMsZCkpLm5vcm1hbGl6ZSgpO3RoaXMuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQoZCxjKTtyZXR1cm4gdGhpc319KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LApjb3B5OmZ1bmN0aW9uKGEpe3RoaXMubm9ybWFsLmNvcHkoYS5ub3JtYWwpO3RoaXMuY29uc3RhbnQ9YS5jb25zdGFudDtyZXR1cm4gdGhpc30sbm9ybWFsaXplOmZ1bmN0aW9uKCl7dmFyIGE9MS90aGlzLm5vcm1hbC5sZW5ndGgoKTt0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcihhKTt0aGlzLmNvbnN0YW50Kj1hO3JldHVybiB0aGlzfSxuZWdhdGU6ZnVuY3Rpb24oKXt0aGlzLmNvbnN0YW50Kj0tMTt0aGlzLm5vcm1hbC5uZWdhdGUoKTtyZXR1cm4gdGhpc30sZGlzdGFuY2VUb1BvaW50OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QoYSkrdGhpcy5jb25zdGFudH0sZGlzdGFuY2VUb1NwaGVyZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQoYS5jZW50ZXIpLWEucmFkaXVzfSxwcm9qZWN0UG9pbnQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5vcnRob1BvaW50KGEsYikuc3ViKGEpLm5lZ2F0ZSgpfSxvcnRob1BvaW50OmZ1bmN0aW9uKGEsCmIpe3ZhciBjPXRoaXMuZGlzdGFuY2VUb1BvaW50KGEpO3JldHVybihifHxuZXcgcCkuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoYyl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYixjKXt2YXIgZD1jfHxuZXcgcCxlPWIuZGVsdGEoYSksZj10aGlzLm5vcm1hbC5kb3QoZSk7aWYoMD09PWYpe2lmKDA9PT10aGlzLmRpc3RhbmNlVG9Qb2ludChiLnN0YXJ0KSlyZXR1cm4gZC5jb3B5KGIuc3RhcnQpfWVsc2UgcmV0dXJuIGY9LShiLnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvZiwwPmZ8fDE8Zj92b2lkIDA6ZC5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKGYpLmFkZChiLnN0YXJ0KX19KCksaW50ZXJzZWN0c0xpbmU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kaXN0YW5jZVRvUG9pbnQoYS5zdGFydCk7YT10aGlzLmRpc3RhbmNlVG9Qb2ludChhLmVuZCk7cmV0dXJuIDA+YiYmMDxhfHwwPmEmJjA8Yn0sCmludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW50ZXJzZWN0c1BsYW5lKHRoaXMpfSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmludGVyc2VjdHNQbGFuZSh0aGlzKX0sY29wbGFuYXJQb2ludDpmdW5jdGlvbihhKXtyZXR1cm4oYXx8bmV3IHApLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX0sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgS2E7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7dmFyIGU9dGhpcy5jb3BsYW5hclBvaW50KGEpLmFwcGx5TWF0cml4NChjKSxmPWR8fGIuZ2V0Tm9ybWFsTWF0cml4KGMpLGY9dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKGYpLm5vcm1hbGl6ZSgpO3RoaXMuY29uc3RhbnQ9LWUuZG90KGYpO3JldHVybiB0aGlzfX0oKSx0cmFuc2xhdGU6ZnVuY3Rpb24oYSl7dGhpcy5jb25zdGFudC09YS5kb3QodGhpcy5ub3JtYWwpO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9ybWFsLmVxdWFscyh0aGlzLm5vcm1hbCkmJgphLmNvbnN0YW50PT09dGhpcy5jb25zdGFudH19KTtPYmplY3QuYXNzaWduKGpkLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz10aGlzLnBsYW5lcztnWzBdLmNvcHkoYSk7Z1sxXS5jb3B5KGIpO2dbMl0uY29weShjKTtnWzNdLmNvcHkoZCk7Z1s0XS5jb3B5KGUpO2dbNV0uY29weShmKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMucGxhbmVzLGM9MDs2PmM7YysrKWJbY10uY29weShhLnBsYW5lc1tjXSk7cmV0dXJuIHRoaXN9LHNldEZyb21NYXRyaXg6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wbGFuZXMsYz1hLmVsZW1lbnRzO2E9Y1swXTt2YXIgZD1jWzFdLGU9Y1syXSxmPWNbM10sZz1jWzRdLGg9Y1s1XSxrPWNbNl0sbT1jWzddLGw9Y1s4XSxxPWNbOV0sbj1jWzEwXSxyPWNbMTFdLHA9Y1sxMl0sdD1jWzEzXSwKeT1jWzE0XSxjPWNbMTVdO2JbMF0uc2V0Q29tcG9uZW50cyhmLWEsbS1nLHItbCxjLXApLm5vcm1hbGl6ZSgpO2JbMV0uc2V0Q29tcG9uZW50cyhmK2EsbStnLHIrbCxjK3ApLm5vcm1hbGl6ZSgpO2JbMl0uc2V0Q29tcG9uZW50cyhmK2QsbStoLHIrcSxjK3QpLm5vcm1hbGl6ZSgpO2JbM10uc2V0Q29tcG9uZW50cyhmLWQsbS1oLHItcSxjLXQpLm5vcm1hbGl6ZSgpO2JbNF0uc2V0Q29tcG9uZW50cyhmLWUsbS1rLHItbixjLXkpLm5vcm1hbGl6ZSgpO2JbNV0uc2V0Q29tcG9uZW50cyhmK2UsbStrLHIrbixjK3kpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxpbnRlcnNlY3RzT2JqZWN0OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEdhO3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLmdlb21ldHJ5O251bGw9PT1jLmJvdW5kaW5nU3BoZXJlJiZjLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO2EuY29weShjLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQoYi5tYXRyaXhXb3JsZCk7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShhKX19KCksCmludGVyc2VjdHNTcHJpdGU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgR2E7cmV0dXJuIGZ1bmN0aW9uKGIpe2EuY2VudGVyLnNldCgwLDAsMCk7YS5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzY7YS5hcHBseU1hdHJpeDQoYi5tYXRyaXhXb3JsZCk7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShhKX19KCksaW50ZXJzZWN0c1NwaGVyZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnBsYW5lcyxjPWEuY2VudGVyO2E9LWEucmFkaXVzO2Zvcih2YXIgZD0wOzY+ZDtkKyspaWYoYltkXS5kaXN0YW5jZVRvUG9pbnQoYyk8YSlyZXR1cm4hMTtyZXR1cm4hMH0saW50ZXJzZWN0c0JveDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGMpe2Zvcih2YXIgZD10aGlzLnBsYW5lcyxlPTA7Nj5lO2UrKyl7dmFyIGY9ZFtlXTthLng9MDxmLm5vcm1hbC54P2MubWluLng6Yy5tYXgueDtiLng9MDxmLm5vcm1hbC54P2MubWF4Lng6Yy5taW4ueDthLnk9MDxmLm5vcm1hbC55PwpjLm1pbi55OmMubWF4Lnk7Yi55PTA8Zi5ub3JtYWwueT9jLm1heC55OmMubWluLnk7YS56PTA8Zi5ub3JtYWwuej9jLm1pbi56OmMubWF4Lno7Yi56PTA8Zi5ub3JtYWwuej9jLm1heC56OmMubWluLno7dmFyIGc9Zi5kaXN0YW5jZVRvUG9pbnQoYSksZj1mLmRpc3RhbmNlVG9Qb2ludChiKTtpZigwPmcmJjA+ZilyZXR1cm4hMX1yZXR1cm4hMH19KCksY29udGFpbnNQb2ludDpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5wbGFuZXMsYz0wOzY+YztjKyspaWYoMD5iW2NdLmRpc3RhbmNlVG9Qb2ludChhKSlyZXR1cm4hMTtyZXR1cm4hMH19KTtPYmplY3QuYXNzaWduKGhiLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGEsYil7dGhpcy5vcmlnaW4uY29weShhKTt0aGlzLmRpcmVjdGlvbi5jb3B5KGIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLm9yaWdpbi5jb3B5KGEub3JpZ2luKTsKdGhpcy5kaXJlY3Rpb24uY29weShhLmRpcmVjdGlvbik7cmV0dXJuIHRoaXN9LGF0OmZ1bmN0aW9uKGEsYil7cmV0dXJuKGJ8fG5ldyBwKS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihhKS5hZGQodGhpcy5vcmlnaW4pfSxsb29rQXQ6ZnVuY3Rpb24oYSl7dGhpcy5kaXJlY3Rpb24uY29weShhKS5zdWIodGhpcy5vcmlnaW4pLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxyZWNhc3Q6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYil7dGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KGIsYSkpO3JldHVybiB0aGlzfX0oKSxjbG9zZXN0UG9pbnRUb1BvaW50OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8bmV3IHA7Yy5zdWJWZWN0b3JzKGEsdGhpcy5vcmlnaW4pO3ZhciBkPWMuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gMD5kP2MuY29weSh0aGlzLm9yaWdpbik6Yy5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihkKS5hZGQodGhpcy5vcmlnaW4pfSwKZGlzdGFuY2VUb1BvaW50OmZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVNxVG9Qb2ludChhKSl9LGRpc3RhbmNlU3FUb1BvaW50OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEuc3ViVmVjdG9ycyhiLHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKDA+YylyZXR1cm4gdGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQoYik7YS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihjKS5hZGQodGhpcy5vcmlnaW4pO3JldHVybiBhLmRpc3RhbmNlVG9TcXVhcmVkKGIpfX0oKSxkaXN0YW5jZVNxVG9TZWdtZW50OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcCxjPW5ldyBwO3JldHVybiBmdW5jdGlvbihkLGUsZixnKXthLmNvcHkoZCkuYWRkKGUpLm11bHRpcGx5U2NhbGFyKC41KTtiLmNvcHkoZSkuc3ViKGQpLm5vcm1hbGl6ZSgpO2MuY29weSh0aGlzLm9yaWdpbikuc3ViKGEpOwp2YXIgaD0uNSpkLmRpc3RhbmNlVG8oZSksaz0tdGhpcy5kaXJlY3Rpb24uZG90KGIpLG09Yy5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LWMuZG90KGIpLHE9Yy5sZW5ndGhTcSgpLG49TWF0aC5hYnMoMS1rKmspLHI7MDxuPyhkPWsqbC1tLGU9ayptLWwscj1oKm4sMDw9ZD9lPj0tcj9lPD1yPyhoPTEvbixkKj1oLGUqPWgsaz1kKihkK2sqZSsyKm0pK2UqKGsqZCtlKzIqbCkrcSk6KGU9aCxkPU1hdGgubWF4KDAsLShrKmUrbSkpLGs9LWQqZCtlKihlKzIqbCkrcSk6KGU9LWgsZD1NYXRoLm1heCgwLC0oayplK20pKSxrPS1kKmQrZSooZSsyKmwpK3EpOmU8PS1yPyhkPU1hdGgubWF4KDAsLSgtaypoK20pKSxlPTA8ZD8taDpNYXRoLm1pbihNYXRoLm1heCgtaCwtbCksaCksaz0tZCpkK2UqKGUrMipsKStxKTplPD1yPyhkPTAsZT1NYXRoLm1pbihNYXRoLm1heCgtaCwtbCksaCksaz1lKihlKzIqbCkrcSk6KGQ9TWF0aC5tYXgoMCwtKGsqaCttKSksZT0wPGQ/aDpNYXRoLm1pbihNYXRoLm1heCgtaCwKLWwpLGgpLGs9LWQqZCtlKihlKzIqbCkrcSkpOihlPTA8az8taDpoLGQ9TWF0aC5tYXgoMCwtKGsqZSttKSksaz0tZCpkK2UqKGUrMipsKStxKTtmJiZmLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGQpLmFkZCh0aGlzLm9yaWdpbik7ZyYmZy5jb3B5KGIpLm11bHRpcGx5U2NhbGFyKGUpLmFkZChhKTtyZXR1cm4ga319KCksaW50ZXJzZWN0U3BoZXJlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7YS5zdWJWZWN0b3JzKGIuY2VudGVyLHRoaXMub3JpZ2luKTt2YXIgZD1hLmRvdCh0aGlzLmRpcmVjdGlvbiksZT1hLmRvdChhKS1kKmQsZj1iLnJhZGl1cypiLnJhZGl1cztpZihlPmYpcmV0dXJuIG51bGw7Zj1NYXRoLnNxcnQoZi1lKTtlPWQtZjtkKz1mO3JldHVybiAwPmUmJjA+ZD9udWxsOjA+ZT90aGlzLmF0KGQsYyk6dGhpcy5hdChlLGMpfX0oKSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludChhLmNlbnRlcik8PQphLnJhZGl1c30sZGlzdGFuY2VUb1BsYW5lOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbik7aWYoMD09PWIpcmV0dXJuIDA9PT1hLmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik/MDpudWxsO2E9LSh0aGlzLm9yaWdpbi5kb3QoYS5ub3JtYWwpK2EuY29uc3RhbnQpL2I7cmV0dXJuIDA8PWE/YTpudWxsfSxpbnRlcnNlY3RQbGFuZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZGlzdGFuY2VUb1BsYW5lKGEpO3JldHVybiBudWxsPT09Yz9udWxsOnRoaXMuYXQoYyxiKX0saW50ZXJzZWN0c1BsYW5lOmZ1bmN0aW9uKGEpe3ZhciBiPWEuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTtyZXR1cm4gMD09PWJ8fDA+YS5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKSpiPyEwOiExfSxpbnRlcnNlY3RCb3g6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnO2Q9MS90aGlzLmRpcmVjdGlvbi54O2Y9MS90aGlzLmRpcmVjdGlvbi55O2c9MS90aGlzLmRpcmVjdGlvbi56Owp2YXIgaD10aGlzLm9yaWdpbjswPD1kPyhjPShhLm1pbi54LWgueCkqZCxkKj1hLm1heC54LWgueCk6KGM9KGEubWF4LngtaC54KSpkLGQqPWEubWluLngtaC54KTswPD1mPyhlPShhLm1pbi55LWgueSkqZixmKj1hLm1heC55LWgueSk6KGU9KGEubWF4LnktaC55KSpmLGYqPWEubWluLnktaC55KTtpZihjPmZ8fGU+ZClyZXR1cm4gbnVsbDtpZihlPmN8fGMhPT1jKWM9ZTtpZihmPGR8fGQhPT1kKWQ9ZjswPD1nPyhlPShhLm1pbi56LWgueikqZyxnKj1hLm1heC56LWgueik6KGU9KGEubWF4LnotaC56KSpnLGcqPWEubWluLnotaC56KTtpZihjPmd8fGU+ZClyZXR1cm4gbnVsbDtpZihlPmN8fGMhPT1jKWM9ZTtpZihnPGR8fGQhPT1kKWQ9ZztyZXR1cm4gMD5kP251bGw6dGhpcy5hdCgwPD1jP2M6ZCxiKX0saW50ZXJzZWN0c0JveDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gbnVsbCE9PXRoaXMuaW50ZXJzZWN0Qm94KGIsYSl9fSgpLGludGVyc2VjdFRyaWFuZ2xlOmZ1bmN0aW9uKCl7dmFyIGE9Cm5ldyBwLGI9bmV3IHAsYz1uZXcgcCxkPW5ldyBwO3JldHVybiBmdW5jdGlvbihlLGYsZyxoLGspe2Iuc3ViVmVjdG9ycyhmLGUpO2Muc3ViVmVjdG9ycyhnLGUpO2QuY3Jvc3NWZWN0b3JzKGIsYyk7Zj10aGlzLmRpcmVjdGlvbi5kb3QoZCk7aWYoMDxmKXtpZihoKXJldHVybiBudWxsO2g9MX1lbHNlIGlmKDA+ZiloPS0xLGY9LWY7ZWxzZSByZXR1cm4gbnVsbDthLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sZSk7ZT1oKnRoaXMuZGlyZWN0aW9uLmRvdChjLmNyb3NzVmVjdG9ycyhhLGMpKTtpZigwPmUpcmV0dXJuIG51bGw7Zz1oKnRoaXMuZGlyZWN0aW9uLmRvdChiLmNyb3NzKGEpKTtpZigwPmd8fGUrZz5mKXJldHVybiBudWxsO2U9LWgqYS5kb3QoZCk7cmV0dXJuIDA+ZT9udWxsOnRoaXMuYXQoZS9mLGspfX0oKSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24oYSl7dGhpcy5kaXJlY3Rpb24uYWRkKHRoaXMub3JpZ2luKS5hcHBseU1hdHJpeDQoYSk7dGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KGEpOwp0aGlzLmRpcmVjdGlvbi5zdWIodGhpcy5vcmlnaW4pO3RoaXMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEub3JpZ2luLmVxdWFscyh0aGlzLm9yaWdpbikmJmEuZGlyZWN0aW9uLmVxdWFscyh0aGlzLmRpcmVjdGlvbil9fSk7YmIuUm90YXRpb25PcmRlcnM9IlhZWiBZWlggWlhZIFhaWSBZWFogWllYIi5zcGxpdCgiICIpO2JiLkRlZmF1bHRPcmRlcj0iWFlaIjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhiYi5wcm90b3R5cGUse3g6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feD1hO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpfX0seTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihhKXt0aGlzLl95PWE7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9fSx6OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fen0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3o9CmE7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9fSxvcmRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yZGVyfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5fb3JkZXI9YTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKX19fSk7T2JqZWN0LmFzc2lnbihiYi5wcm90b3R5cGUse2lzRXVsZXI6ITAsc2V0OmZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuX3g9YTt0aGlzLl95PWI7dGhpcy5fej1jO3RoaXMuX29yZGVyPWR8fHRoaXMuX29yZGVyO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5feD1hLl94O3RoaXMuX3k9YS5feTt0aGlzLl96PWEuX3o7dGhpcy5fb3JkZXI9YS5fb3JkZXI7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7cmV0dXJuIHRoaXN9LHNldEZyb21Sb3RhdGlvbk1hdHJpeDpmdW5jdGlvbihhLApiLGMpe3ZhciBkPVkuY2xhbXAsZT1hLmVsZW1lbnRzO2E9ZVswXTt2YXIgZj1lWzRdLGc9ZVs4XSxoPWVbMV0saz1lWzVdLG09ZVs5XSxsPWVbMl0scT1lWzZdLGU9ZVsxMF07Yj1ifHx0aGlzLl9vcmRlcjsiWFlaIj09PWI/KHRoaXMuX3k9TWF0aC5hc2luKGQoZywtMSwxKSksLjk5OTk5Pk1hdGguYWJzKGcpPyh0aGlzLl94PU1hdGguYXRhbjIoLW0sZSksdGhpcy5fej1NYXRoLmF0YW4yKC1mLGEpKToodGhpcy5feD1NYXRoLmF0YW4yKHEsayksdGhpcy5fej0wKSk6IllYWiI9PT1iPyh0aGlzLl94PU1hdGguYXNpbigtZChtLC0xLDEpKSwuOTk5OTk+TWF0aC5hYnMobSk/KHRoaXMuX3k9TWF0aC5hdGFuMihnLGUpLHRoaXMuX3o9TWF0aC5hdGFuMihoLGspKToodGhpcy5feT1NYXRoLmF0YW4yKC1sLGEpLHRoaXMuX3o9MCkpOiJaWFkiPT09Yj8odGhpcy5feD1NYXRoLmFzaW4oZChxLC0xLDEpKSwuOTk5OTk+TWF0aC5hYnMocSk/KHRoaXMuX3k9TWF0aC5hdGFuMigtbCxlKSx0aGlzLl96PQpNYXRoLmF0YW4yKC1mLGspKToodGhpcy5feT0wLHRoaXMuX3o9TWF0aC5hdGFuMihoLGEpKSk6IlpZWCI9PT1iPyh0aGlzLl95PU1hdGguYXNpbigtZChsLC0xLDEpKSwuOTk5OTk+TWF0aC5hYnMobCk/KHRoaXMuX3g9TWF0aC5hdGFuMihxLGUpLHRoaXMuX3o9TWF0aC5hdGFuMihoLGEpKToodGhpcy5feD0wLHRoaXMuX3o9TWF0aC5hdGFuMigtZixrKSkpOiJZWlgiPT09Yj8odGhpcy5fej1NYXRoLmFzaW4oZChoLC0xLDEpKSwuOTk5OTk+TWF0aC5hYnMoaCk/KHRoaXMuX3g9TWF0aC5hdGFuMigtbSxrKSx0aGlzLl95PU1hdGguYXRhbjIoLWwsYSkpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKGcsZSkpKToiWFpZIj09PWI/KHRoaXMuX3o9TWF0aC5hc2luKC1kKGYsLTEsMSkpLC45OTk5OT5NYXRoLmFicyhmKT8odGhpcy5feD1NYXRoLmF0YW4yKHEsayksdGhpcy5feT1NYXRoLmF0YW4yKGcsYSkpOih0aGlzLl94PU1hdGguYXRhbjIoLW0sZSksdGhpcy5feT0wKSk6Y29uc29sZS53YXJuKCJUSFJFRS5FdWxlcjogLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGdpdmVuIHVuc3VwcG9ydGVkIG9yZGVyOiAiKwpiKTt0aGlzLl9vcmRlcj1iO2lmKCExIT09Yyl0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sc2V0RnJvbVF1YXRlcm5pb246ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYixjLGQpe2EubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oYik7cmV0dXJuIHRoaXMuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGEsYyxkKX19KCksc2V0RnJvbVZlY3RvcjM6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5zZXQoYS54LGEueSxhLnosYnx8dGhpcy5fb3JkZXIpfSxyZW9yZGVyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHFhO3JldHVybiBmdW5jdGlvbihiKXthLnNldEZyb21FdWxlcih0aGlzKTtyZXR1cm4gdGhpcy5zZXRGcm9tUXVhdGVybmlvbihhLGIpfX0oKSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX3g9PT10aGlzLl94JiZhLl95PT09dGhpcy5feSYmYS5fej09PXRoaXMuX3omJmEuX29yZGVyPT09dGhpcy5fb3JkZXJ9LGZyb21BcnJheTpmdW5jdGlvbihhKXt0aGlzLl94PQphWzBdO3RoaXMuX3k9YVsxXTt0aGlzLl96PWFbMl07dm9pZCAwIT09YVszXSYmKHRoaXMuX29yZGVyPWFbM10pO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YSYmKGE9W10pO3ZvaWQgMD09PWImJihiPTApO2FbYl09dGhpcy5feDthW2IrMV09dGhpcy5feTthW2IrMl09dGhpcy5fejthW2IrM109dGhpcy5fb3JkZXI7cmV0dXJuIGF9LHRvVmVjdG9yMzpmdW5jdGlvbihhKXtyZXR1cm4gYT9hLnNldCh0aGlzLl94LHRoaXMuX3ksdGhpcy5feik6bmV3IHAodGhpcy5feCx0aGlzLl95LHRoaXMuX3opfSxvbkNoYW5nZTpmdW5jdGlvbihhKXt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2s9YTtyZXR1cm4gdGhpc30sb25DaGFuZ2VDYWxsYmFjazpmdW5jdGlvbigpe319KTtPYmplY3QuYXNzaWduKFJkLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGEpe3RoaXMubWFzaz0xPDxhfDB9LGVuYWJsZTpmdW5jdGlvbihhKXt0aGlzLm1hc2s9CnRoaXMubWFza3wxPDxhfDB9LHRvZ2dsZTpmdW5jdGlvbihhKXt0aGlzLm1hc2tePTE8PGF8MH0sZGlzYWJsZTpmdW5jdGlvbihhKXt0aGlzLm1hc2smPX4oMTw8YXwwKX0sdGVzdDpmdW5jdGlvbihhKXtyZXR1cm4gMCE9PSh0aGlzLm1hc2smYS5tYXNrKX19KTt2YXIgTGY9MDtCLkRlZmF1bHRVcD1uZXcgcCgwLDEsMCk7Qi5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZT0hMDtPYmplY3QuYXNzaWduKEIucHJvdG90eXBlLHNhLnByb3RvdHlwZSx7aXNPYmplY3QzRDohMCxhcHBseU1hdHJpeDpmdW5jdGlvbihhKXt0aGlzLm1hdHJpeC5tdWx0aXBseU1hdHJpY2VzKGEsdGhpcy5tYXRyaXgpO3RoaXMubWF0cml4LmRlY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKX0sc2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlOmZ1bmN0aW9uKGEsYil7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoYSxiKX0sc2V0Um90YXRpb25Gcm9tRXVsZXI6ZnVuY3Rpb24oYSl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21FdWxlcihhLAohMCl9LHNldFJvdGF0aW9uRnJvbU1hdHJpeDpmdW5jdGlvbihhKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KGEpfSxzZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKGEpe3RoaXMucXVhdGVybmlvbi5jb3B5KGEpfSxyb3RhdGVPbkF4aXM6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcWE7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7YS5zZXRGcm9tQXhpc0FuZ2xlKGIsYyk7dGhpcy5xdWF0ZXJuaW9uLm11bHRpcGx5KGEpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVYOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAoMSwwLDApO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoYSxiKX19KCkscm90YXRlWTpmdW5jdGlvbigpe3ZhciBhPW5ldyBwKDAsMSwwKTtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKGEsYil9fSgpLHJvdGF0ZVo6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCgwLDAsMSk7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhhLApiKX19KCksdHJhbnNsYXRlT25BeGlzOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7YS5jb3B5KGIpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pO3RoaXMucG9zaXRpb24uYWRkKGEubXVsdGlwbHlTY2FsYXIoYykpO3JldHVybiB0aGlzfX0oKSx0cmFuc2xhdGVYOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAoMSwwLDApO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoYSxiKX19KCksdHJhbnNsYXRlWTpmdW5jdGlvbigpe3ZhciBhPW5ldyBwKDAsMSwwKTtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKGEsYil9fSgpLHRyYW5zbGF0ZVo6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCgwLDAsMSk7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhhLGIpfX0oKSxsb2NhbFRvV29ybGQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpfSwKd29ybGRUb0xvY2FsOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBiLmFwcGx5TWF0cml4NChhLmdldEludmVyc2UodGhpcy5tYXRyaXhXb3JsZCkpfX0oKSxsb29rQXQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYil7dGhpcy5pc0NhbWVyYT9hLmxvb2tBdCh0aGlzLnBvc2l0aW9uLGIsdGhpcy51cCk6YS5sb29rQXQoYix0aGlzLnBvc2l0aW9uLHRoaXMudXApO3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoYSl9fSgpLGFkZDpmdW5jdGlvbihhKXtpZigxPGFyZ3VtZW50cy5sZW5ndGgpe2Zvcih2YXIgYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspdGhpcy5hZGQoYXJndW1lbnRzW2JdKTtyZXR1cm4gdGhpc31pZihhPT09dGhpcylyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3QgY2FuJ3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBvZiBpdHNlbGYuIixhKSx0aGlzOwphJiZhLmlzT2JqZWN0M0Q/KG51bGwhPT1hLnBhcmVudCYmYS5wYXJlbnQucmVtb3ZlKGEpLGEucGFyZW50PXRoaXMsYS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJhZGRlZCJ9KSx0aGlzLmNoaWxkcmVuLnB1c2goYSkpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5PYmplY3QzRC4iLGEpO3JldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oYSl7aWYoMTxhcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW2JdKTtiPXRoaXMuY2hpbGRyZW4uaW5kZXhPZihhKTstMSE9PWImJihhLnBhcmVudD1udWxsLGEuZGlzcGF0Y2hFdmVudCh7dHlwZToicmVtb3ZlZCJ9KSx0aGlzLmNoaWxkcmVuLnNwbGljZShiLDEpKX0sZ2V0T2JqZWN0QnlJZDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJpZCIsYSl9LGdldE9iamVjdEJ5TmFtZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJuYW1lIiwKYSl9LGdldE9iamVjdEJ5UHJvcGVydHk6ZnVuY3Rpb24oYSxiKXtpZih0aGlzW2FdPT09YilyZXR1cm4gdGhpcztmb3IodmFyIGM9MCxkPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2M8ZDtjKyspe3ZhciBlPXRoaXMuY2hpbGRyZW5bY10uZ2V0T2JqZWN0QnlQcm9wZXJ0eShhLGIpO2lmKHZvaWQgMCE9PWUpcmV0dXJuIGV9fSxnZXRXb3JsZFBvc2l0aW9uOmZ1bmN0aW9uKGEpe2E9YXx8bmV3IHA7dGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCk7cmV0dXJuIGEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpfSxnZXRXb3JsZFF1YXRlcm5pb246ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwO3JldHVybiBmdW5jdGlvbihjKXtjPWN8fG5ldyBxYTt0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTt0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShhLGMsYik7cmV0dXJuIGN9fSgpLGdldFdvcmxkUm90YXRpb246ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcWE7cmV0dXJuIGZ1bmN0aW9uKGIpe2I9CmJ8fG5ldyBiYjt0aGlzLmdldFdvcmxkUXVhdGVybmlvbihhKTtyZXR1cm4gYi5zZXRGcm9tUXVhdGVybmlvbihhLHRoaXMucm90YXRpb24ub3JkZXIsITEpfX0oKSxnZXRXb3JsZFNjYWxlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcWE7cmV0dXJuIGZ1bmN0aW9uKGMpe2M9Y3x8bmV3IHA7dGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCk7dGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoYSxiLGMpO3JldHVybiBjfX0oKSxnZXRXb3JsZERpcmVjdGlvbjpmdW5jdGlvbigpe3ZhciBhPW5ldyBxYTtyZXR1cm4gZnVuY3Rpb24oYil7Yj1ifHxuZXcgcDt0aGlzLmdldFdvcmxkUXVhdGVybmlvbihhKTtyZXR1cm4gYi5zZXQoMCwwLDEpLmFwcGx5UXVhdGVybmlvbihhKX19KCkscmF5Y2FzdDpmdW5jdGlvbigpe30sdHJhdmVyc2U6ZnVuY3Rpb24oYSl7YSh0aGlzKTtmb3IodmFyIGI9dGhpcy5jaGlsZHJlbixjPTAsZD1iLmxlbmd0aDtjPGQ7YysrKWJbY10udHJhdmVyc2UoYSl9LAp0cmF2ZXJzZVZpc2libGU6ZnVuY3Rpb24oYSl7aWYoITEhPT10aGlzLnZpc2libGUpe2EodGhpcyk7Zm9yKHZhciBiPXRoaXMuY2hpbGRyZW4sYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrKyliW2NdLnRyYXZlcnNlVmlzaWJsZShhKX19LHRyYXZlcnNlQW5jZXN0b3JzOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucGFyZW50O251bGwhPT1iJiYoYShiKSxiLnRyYXZlcnNlQW5jZXN0b3JzKGEpKX0sdXBkYXRlTWF0cml4OmZ1bmN0aW9uKCl7dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKTt0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9LHVwZGF0ZU1hdHJpeFdvcmxkOmZ1bmN0aW9uKGEpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKTtpZih0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGV8fGEpbnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLAp0aGlzLm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLGE9ITA7Zm9yKHZhciBiPXRoaXMuY2hpbGRyZW4sYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrKyliW2NdLnVwZGF0ZU1hdHJpeFdvcmxkKGEpfSx0b0pTT046ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiLGMpe3ZvaWQgMD09PWJbYy51dWlkXSYmKGJbYy51dWlkXT1jLnRvSlNPTihhKSk7cmV0dXJuIGMudXVpZH1mdW5jdGlvbiBjKGEpe3ZhciBiPVtdLGM7Zm9yKGMgaW4gYSl7dmFyIGQ9YVtjXTtkZWxldGUgZC5tZXRhZGF0YTtiLnB1c2goZCl9cmV0dXJuIGJ9dmFyIGQ9dm9pZCAwPT09YXx8IiI9PT1hLGU9e307ZCYmKGE9e2dlb21ldHJpZXM6e30sbWF0ZXJpYWxzOnt9LHRleHR1cmVzOnt9LGltYWdlczp7fX0sZS5tZXRhZGF0YT17dmVyc2lvbjo0LjUsdHlwZToiT2JqZWN0IixnZW5lcmF0b3I6Ik9iamVjdDNELnRvSlNPTiJ9KTt2YXIgZj17fTtmLnV1aWQ9dGhpcy51dWlkO2YudHlwZT10aGlzLnR5cGU7IiIhPT0KdGhpcy5uYW1lJiYoZi5uYW1lPXRoaXMubmFtZSk7Int9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYoZi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKTshMD09PXRoaXMuY2FzdFNoYWRvdyYmKGYuY2FzdFNoYWRvdz0hMCk7ITA9PT10aGlzLnJlY2VpdmVTaGFkb3cmJihmLnJlY2VpdmVTaGFkb3c9ITApOyExPT09dGhpcy52aXNpYmxlJiYoZi52aXNpYmxlPSExKTtmLm1hdHJpeD10aGlzLm1hdHJpeC50b0FycmF5KCk7dm9pZCAwIT09dGhpcy5nZW9tZXRyeSYmKGYuZ2VvbWV0cnk9YihhLmdlb21ldHJpZXMsdGhpcy5nZW9tZXRyeSkpO2lmKHZvaWQgMCE9PXRoaXMubWF0ZXJpYWwpaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7Zm9yKHZhciBnPVtdLGg9MCxrPXRoaXMubWF0ZXJpYWwubGVuZ3RoO2g8aztoKyspZy5wdXNoKGIoYS5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbFtoXSkpO2YubWF0ZXJpYWw9Z31lbHNlIGYubWF0ZXJpYWw9YihhLm1hdGVyaWFscywKdGhpcy5tYXRlcmlhbCk7aWYoMDx0aGlzLmNoaWxkcmVuLmxlbmd0aClmb3IoZi5jaGlsZHJlbj1bXSxoPTA7aDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtoKyspZi5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5baF0udG9KU09OKGEpLm9iamVjdCk7ZCYmKGQ9YyhhLmdlb21ldHJpZXMpLGc9YyhhLm1hdGVyaWFscyksaD1jKGEudGV4dHVyZXMpLGs9YyhhLmltYWdlcyksMDxkLmxlbmd0aCYmKGUuZ2VvbWV0cmllcz1kKSwwPGcubGVuZ3RoJiYoZS5tYXRlcmlhbHM9ZyksMDxoLmxlbmd0aCYmKGUudGV4dHVyZXM9aCksMDxrLmxlbmd0aCYmKGUuaW1hZ2VzPWspKTtlLm9iamVjdD1mO3JldHVybiBlfSxjbG9uZTpmdW5jdGlvbihhKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyxhKX0sY29weTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPSEwKTt0aGlzLm5hbWU9YS5uYW1lO3RoaXMudXAuY29weShhLnVwKTt0aGlzLnBvc2l0aW9uLmNvcHkoYS5wb3NpdGlvbik7CnRoaXMucXVhdGVybmlvbi5jb3B5KGEucXVhdGVybmlvbik7dGhpcy5zY2FsZS5jb3B5KGEuc2NhbGUpO3RoaXMubWF0cml4LmNvcHkoYS5tYXRyaXgpO3RoaXMubWF0cml4V29ybGQuY29weShhLm1hdHJpeFdvcmxkKTt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9YS5tYXRyaXhBdXRvVXBkYXRlO3RoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT1hLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU7dGhpcy5sYXllcnMubWFzaz1hLmxheWVycy5tYXNrO3RoaXMudmlzaWJsZT1hLnZpc2libGU7dGhpcy5jYXN0U2hhZG93PWEuY2FzdFNoYWRvdzt0aGlzLnJlY2VpdmVTaGFkb3c9YS5yZWNlaXZlU2hhZG93O3RoaXMuZnJ1c3R1bUN1bGxlZD1hLmZydXN0dW1DdWxsZWQ7dGhpcy5yZW5kZXJPcmRlcj1hLnJlbmRlck9yZGVyO3RoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhLnVzZXJEYXRhKSk7aWYoITA9PT1iKWZvcih2YXIgYz0wO2M8YS5jaGlsZHJlbi5sZW5ndGg7YysrKXRoaXMuYWRkKGEuY2hpbGRyZW5bY10uY2xvbmUoKSk7CnJldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oSGIucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLnN0YXJ0LmNvcHkoYSk7dGhpcy5lbmQuY29weShiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5zdGFydC5jb3B5KGEuc3RhcnQpO3RoaXMuZW5kLmNvcHkoYS5lbmQpO3JldHVybiB0aGlzfSxnZXRDZW50ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fG5ldyBwKS5hZGRWZWN0b3JzKHRoaXMuc3RhcnQsdGhpcy5lbmQpLm11bHRpcGx5U2NhbGFyKC41KX0sZGVsdGE6ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fG5ldyBwKS5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpfSxkaXN0YW5jZVNxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5lbmQpfSxkaXN0YW5jZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG8odGhpcy5lbmQpfSwKYXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1ifHxuZXcgcDtyZXR1cm4gdGhpcy5kZWx0YShjKS5tdWx0aXBseVNjYWxhcihhKS5hZGQodGhpcy5zdGFydCl9LGNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXI6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwO3JldHVybiBmdW5jdGlvbihjLGQpe2Euc3ViVmVjdG9ycyhjLHRoaXMuc3RhcnQpO2Iuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KTt2YXIgZT1iLmRvdChiKSxlPWIuZG90KGEpL2U7ZCYmKGU9WS5jbGFtcChlLDAsMSkpO3JldHVybiBlfX0oKSxjbG9zZXN0UG9pbnRUb1BvaW50OmZ1bmN0aW9uKGEsYixjKXthPXRoaXMuY2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlcihhLGIpO2M9Y3x8bmV3IHA7cmV0dXJuIHRoaXMuZGVsdGEoYykubXVsdGlwbHlTY2FsYXIoYSkuYWRkKHRoaXMuc3RhcnQpfSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24oYSl7dGhpcy5zdGFydC5hcHBseU1hdHJpeDQoYSk7dGhpcy5lbmQuYXBwbHlNYXRyaXg0KGEpOwpyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSYmYS5lbmQuZXF1YWxzKHRoaXMuZW5kKX19KTtPYmplY3QuYXNzaWduKFVhLHtub3JtYWw6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYixjLGQsZSl7ZT1lfHxuZXcgcDtlLnN1YlZlY3RvcnMoZCxjKTthLnN1YlZlY3RvcnMoYixjKTtlLmNyb3NzKGEpO2I9ZS5sZW5ndGhTcSgpO3JldHVybiAwPGI/ZS5tdWx0aXBseVNjYWxhcigxL01hdGguc3FydChiKSk6ZS5zZXQoMCwwLDApfX0oKSxiYXJ5Y29vcmRGcm9tUG9pbnQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwLGM9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGQsZSxmLGcsaCl7YS5zdWJWZWN0b3JzKGcsZSk7Yi5zdWJWZWN0b3JzKGYsZSk7Yy5zdWJWZWN0b3JzKGQsZSk7ZD1hLmRvdChhKTtlPWEuZG90KGIpO2Y9YS5kb3QoYyk7dmFyIGs9Yi5kb3QoYik7Zz1iLmRvdChjKTt2YXIgbT0KZCprLWUqZTtoPWh8fG5ldyBwO2lmKDA9PT1tKXJldHVybiBoLnNldCgtMiwtMSwtMSk7bT0xL207az0oaypmLWUqZykqbTtkPShkKmctZSpmKSptO3JldHVybiBoLnNldCgxLWstZCxkLGspfX0oKSxjb250YWluc1BvaW50OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIsYyxkLGUpe2I9VWEuYmFyeWNvb3JkRnJvbVBvaW50KGIsYyxkLGUsYSk7cmV0dXJuIDA8PWIueCYmMDw9Yi55JiYxPj1iLngrYi55fX0oKX0pO09iamVjdC5hc3NpZ24oVWEucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuYS5jb3B5KGEpO3RoaXMuYi5jb3B5KGIpO3RoaXMuYy5jb3B5KGMpO3JldHVybiB0aGlzfSxzZXRGcm9tUG9pbnRzQW5kSW5kaWNlczpmdW5jdGlvbihhLGIsYyxkKXt0aGlzLmEuY29weShhW2JdKTt0aGlzLmIuY29weShhW2NdKTt0aGlzLmMuY29weShhW2RdKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LApjb3B5OmZ1bmN0aW9uKGEpe3RoaXMuYS5jb3B5KGEuYSk7dGhpcy5iLmNvcHkoYS5iKTt0aGlzLmMuY29weShhLmMpO3JldHVybiB0aGlzfSxhcmVhOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oKXthLnN1YlZlY3RvcnModGhpcy5jLHRoaXMuYik7Yi5zdWJWZWN0b3JzKHRoaXMuYSx0aGlzLmIpO3JldHVybi41KmEuY3Jvc3MoYikubGVuZ3RoKCl9fSgpLG1pZHBvaW50OmZ1bmN0aW9uKGEpe3JldHVybihhfHxuZXcgcCkuYWRkVmVjdG9ycyh0aGlzLmEsdGhpcy5iKS5hZGQodGhpcy5jKS5tdWx0aXBseVNjYWxhcigxLzMpfSxub3JtYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIFVhLm5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyxhKX0scGxhbmU6ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fG5ldyB3YSkuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX0sYmFyeWNvb3JkRnJvbVBvaW50OmZ1bmN0aW9uKGEsYil7cmV0dXJuIFVhLmJhcnljb29yZEZyb21Qb2ludChhLAp0aGlzLmEsdGhpcy5iLHRoaXMuYyxiKX0sY29udGFpbnNQb2ludDpmdW5jdGlvbihhKXtyZXR1cm4gVWEuY29udGFpbnNQb2ludChhLHRoaXMuYSx0aGlzLmIsdGhpcy5jKX0sY2xvc2VzdFBvaW50VG9Qb2ludDpmdW5jdGlvbigpe3ZhciBhPW5ldyB3YSxiPVtuZXcgSGIsbmV3IEhiLG5ldyBIYl0sYz1uZXcgcCxkPW5ldyBwO3JldHVybiBmdW5jdGlvbihlLGYpe3ZhciBnPWZ8fG5ldyBwLGg9SW5maW5pdHk7YS5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpO2EucHJvamVjdFBvaW50KGUsYyk7aWYoITA9PT10aGlzLmNvbnRhaW5zUG9pbnQoYykpZy5jb3B5KGMpO2Vsc2V7YlswXS5zZXQodGhpcy5hLHRoaXMuYik7YlsxXS5zZXQodGhpcy5iLHRoaXMuYyk7YlsyXS5zZXQodGhpcy5jLHRoaXMuYSk7Zm9yKHZhciBrPTA7azxiLmxlbmd0aDtrKyspe2Jba10uY2xvc2VzdFBvaW50VG9Qb2ludChjLCEwLGQpO3ZhciBtPWMuZGlzdGFuY2VUb1NxdWFyZWQoZCk7Cm08aCYmKGg9bSxnLmNvcHkoZCkpfX1yZXR1cm4gZ319KCksZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLmEuZXF1YWxzKHRoaXMuYSkmJmEuYi5lcXVhbHModGhpcy5iKSYmYS5jLmVxdWFscyh0aGlzLmMpfX0pO09iamVjdC5hc3NpZ24oVmEucHJvdG90eXBlLHtjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLmE9YS5hO3RoaXMuYj1hLmI7dGhpcy5jPWEuYzt0aGlzLm5vcm1hbC5jb3B5KGEubm9ybWFsKTt0aGlzLmNvbG9yLmNvcHkoYS5jb2xvcik7dGhpcy5tYXRlcmlhbEluZGV4PWEubWF0ZXJpYWxJbmRleDtmb3IodmFyIGI9MCxjPWEudmVydGV4Tm9ybWFscy5sZW5ndGg7YjxjO2IrKyl0aGlzLnZlcnRleE5vcm1hbHNbYl09YS52ZXJ0ZXhOb3JtYWxzW2JdLmNsb25lKCk7Yj0wO2ZvcihjPWEudmVydGV4Q29sb3JzLmxlbmd0aDtiPGM7YisrKXRoaXMudmVydGV4Q29sb3JzW2JdPQphLnZlcnRleENvbG9yc1tiXS5jbG9uZSgpO3JldHVybiB0aGlzfX0pO05hLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTtOYS5wcm90b3R5cGUuY29uc3RydWN0b3I9TmE7TmEucHJvdG90eXBlLmlzTWVzaEJhc2ljTWF0ZXJpYWw9ITA7TmEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5jb2xvci5jb3B5KGEuY29sb3IpO3RoaXMubWFwPWEubWFwO3RoaXMubGlnaHRNYXA9YS5saWdodE1hcDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PWEubGlnaHRNYXBJbnRlbnNpdHk7dGhpcy5hb01hcD1hLmFvTWFwO3RoaXMuYW9NYXBJbnRlbnNpdHk9YS5hb01hcEludGVuc2l0eTt0aGlzLnNwZWN1bGFyTWFwPWEuc3BlY3VsYXJNYXA7dGhpcy5hbHBoYU1hcD1hLmFscGhhTWFwO3RoaXMuZW52TWFwPWEuZW52TWFwO3RoaXMuY29tYmluZT1hLmNvbWJpbmU7dGhpcy5yZWZsZWN0aXZpdHk9YS5yZWZsZWN0aXZpdHk7CnRoaXMucmVmcmFjdGlvblJhdGlvPWEucmVmcmFjdGlvblJhdGlvO3RoaXMud2lyZWZyYW1lPWEud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWEud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMud2lyZWZyYW1lTGluZWNhcD1hLndpcmVmcmFtZUxpbmVjYXA7dGhpcy53aXJlZnJhbWVMaW5lam9pbj1hLndpcmVmcmFtZUxpbmVqb2luO3RoaXMuc2tpbm5pbmc9YS5za2lubmluZzt0aGlzLm1vcnBoVGFyZ2V0cz1hLm1vcnBoVGFyZ2V0cztyZXR1cm4gdGhpc307T2JqZWN0LmRlZmluZVByb3BlcnR5KEwucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbihhKXshMD09PWEmJnRoaXMudmVyc2lvbisrfX0pO09iamVjdC5hc3NpZ24oTC5wcm90b3R5cGUse2lzQnVmZmVyQXR0cmlidXRlOiEwLHNldEFycmF5OmZ1bmN0aW9uKGEpe2lmKEFycmF5LmlzQXJyYXkoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4iKTsKdGhpcy5jb3VudD12b2lkIDAhPT1hP2EubGVuZ3RoL3RoaXMuaXRlbVNpemU6MDt0aGlzLmFycmF5PWF9LHNldER5bmFtaWM6ZnVuY3Rpb24oYSl7dGhpcy5keW5hbWljPWE7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5hcnJheT1uZXcgYS5hcnJheS5jb25zdHJ1Y3RvcihhLmFycmF5KTt0aGlzLml0ZW1TaXplPWEuaXRlbVNpemU7dGhpcy5jb3VudD1hLmNvdW50O3RoaXMubm9ybWFsaXplZD1hLm5vcm1hbGl6ZWQ7dGhpcy5keW5hbWljPWEuZHluYW1pYztyZXR1cm4gdGhpc30sY29weUF0OmZ1bmN0aW9uKGEsYixjKXthKj10aGlzLml0ZW1TaXplO2MqPWIuaXRlbVNpemU7Zm9yKHZhciBkPTAsZT10aGlzLml0ZW1TaXplO2Q8ZTtkKyspdGhpcy5hcnJheVthK2RdPWIuYXJyYXlbYytkXTtyZXR1cm4gdGhpc30sY29weUFycmF5OmZ1bmN0aW9uKGEpe3RoaXMuYXJyYXkuc2V0KGEpO3JldHVybiB0aGlzfSxjb3B5Q29sb3JzQXJyYXk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPQp0aGlzLmFycmF5LGM9MCxkPTAsZT1hLmxlbmd0aDtkPGU7ZCsrKXt2YXIgZj1hW2RdO3ZvaWQgMD09PWYmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5Q29sb3JzQXJyYXkoKTogY29sb3IgaXMgdW5kZWZpbmVkIixkKSxmPW5ldyBIKTtiW2MrK109Zi5yO2JbYysrXT1mLmc7YltjKytdPWYuYn1yZXR1cm4gdGhpc30sY29weUluZGljZXNBcnJheTpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5hcnJheSxjPTAsZD0wLGU9YS5sZW5ndGg7ZDxlO2QrKyl7dmFyIGY9YVtkXTtiW2MrK109Zi5hO2JbYysrXT1mLmI7YltjKytdPWYuY31yZXR1cm4gdGhpc30sY29weVZlY3RvcjJzQXJyYXk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuYXJyYXksYz0wLGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspe3ZhciBmPWFbZF07dm9pZCAwPT09ZiYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Iyc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLApkKSxmPW5ldyBEKTtiW2MrK109Zi54O2JbYysrXT1mLnl9cmV0dXJuIHRoaXN9LGNvcHlWZWN0b3Izc0FycmF5OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLmFycmF5LGM9MCxkPTAsZT1hLmxlbmd0aDtkPGU7ZCsrKXt2YXIgZj1hW2RdO3ZvaWQgMD09PWYmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yM3NBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkIixkKSxmPW5ldyBwKTtiW2MrK109Zi54O2JbYysrXT1mLnk7YltjKytdPWYuen1yZXR1cm4gdGhpc30sY29weVZlY3RvcjRzQXJyYXk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuYXJyYXksYz0wLGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspe3ZhciBmPWFbZF07dm9pZCAwPT09ZiYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3I0c0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGQpLGY9bmV3IGdhKTtiW2MrK109Zi54O2JbYysrXT1mLnk7CmJbYysrXT1mLno7YltjKytdPWYud31yZXR1cm4gdGhpc30sc2V0OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9MCk7dGhpcy5hcnJheS5zZXQoYSxiKTtyZXR1cm4gdGhpc30sZ2V0WDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hcnJheVthKnRoaXMuaXRlbVNpemVdfSxzZXRYOmZ1bmN0aW9uKGEsYil7dGhpcy5hcnJheVthKnRoaXMuaXRlbVNpemVdPWI7cmV0dXJuIHRoaXN9LGdldFk6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYXJyYXlbYSp0aGlzLml0ZW1TaXplKzFdfSxzZXRZOmZ1bmN0aW9uKGEsYil7dGhpcy5hcnJheVthKnRoaXMuaXRlbVNpemUrMV09YjtyZXR1cm4gdGhpc30sZ2V0WjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hcnJheVthKnRoaXMuaXRlbVNpemUrMl19LHNldFo6ZnVuY3Rpb24oYSxiKXt0aGlzLmFycmF5W2EqdGhpcy5pdGVtU2l6ZSsyXT1iO3JldHVybiB0aGlzfSxnZXRXOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFycmF5W2EqdGhpcy5pdGVtU2l6ZSsKM119LHNldFc6ZnVuY3Rpb24oYSxiKXt0aGlzLmFycmF5W2EqdGhpcy5pdGVtU2l6ZSszXT1iO3JldHVybiB0aGlzfSxzZXRYWTpmdW5jdGlvbihhLGIsYyl7YSo9dGhpcy5pdGVtU2l6ZTt0aGlzLmFycmF5W2ErMF09Yjt0aGlzLmFycmF5W2ErMV09YztyZXR1cm4gdGhpc30sc2V0WFlaOmZ1bmN0aW9uKGEsYixjLGQpe2EqPXRoaXMuaXRlbVNpemU7dGhpcy5hcnJheVthKzBdPWI7dGhpcy5hcnJheVthKzFdPWM7dGhpcy5hcnJheVthKzJdPWQ7cmV0dXJuIHRoaXN9LHNldFhZWlc6ZnVuY3Rpb24oYSxiLGMsZCxlKXthKj10aGlzLml0ZW1TaXplO3RoaXMuYXJyYXlbYSswXT1iO3RoaXMuYXJyYXlbYSsxXT1jO3RoaXMuYXJyYXlbYSsyXT1kO3RoaXMuYXJyYXlbYSszXT1lO3JldHVybiB0aGlzfSxvblVwbG9hZDpmdW5jdGlvbihhKXt0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9YTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5hcnJheSwKdGhpcy5pdGVtU2l6ZSkpLmNvcHkodGhpcyl9fSk7cmMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTC5wcm90b3R5cGUpO3JjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yYztzYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShMLnByb3RvdHlwZSk7c2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPXNjO3RjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEwucHJvdG90eXBlKTt0Yy5wcm90b3R5cGUuY29uc3RydWN0b3I9dGM7dWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTC5wcm90b3R5cGUpO3VjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj11YztpYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShMLnByb3RvdHlwZSk7aWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWliO3ZjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEwucHJvdG90eXBlKTt2Yy5wcm90b3R5cGUuY29uc3RydWN0b3I9dmM7amIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTC5wcm90b3R5cGUpO2piLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0KamI7Qy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShMLnByb3RvdHlwZSk7Qy5wcm90b3R5cGUuY29uc3RydWN0b3I9Qzt3Yy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShMLnByb3RvdHlwZSk7d2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPXdjO09iamVjdC5hc3NpZ24oS2UucHJvdG90eXBlLHtjb21wdXRlR3JvdXBzOmZ1bmN0aW9uKGEpe3ZhciBiLGM9W10sZD12b2lkIDA7YT1hLmZhY2VzO2Zvcih2YXIgZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgZj1hW2VdO2YubWF0ZXJpYWxJbmRleCE9PWQmJihkPWYubWF0ZXJpYWxJbmRleCx2b2lkIDAhPT1iJiYoYi5jb3VudD0zKmUtYi5zdGFydCxjLnB1c2goYikpLGI9e3N0YXJ0OjMqZSxtYXRlcmlhbEluZGV4OmR9KX12b2lkIDAhPT1iJiYoYi5jb3VudD0zKmUtYi5zdGFydCxjLnB1c2goYikpO3RoaXMuZ3JvdXBzPWN9LGZyb21HZW9tZXRyeTpmdW5jdGlvbihhKXt2YXIgYj1hLmZhY2VzLGM9YS52ZXJ0aWNlcyxkPWEuZmFjZVZlcnRleFV2cywKZT1kWzBdJiYwPGRbMF0ubGVuZ3RoLGY9ZFsxXSYmMDxkWzFdLmxlbmd0aCxnPWEubW9ycGhUYXJnZXRzLGg9Zy5sZW5ndGgsaztpZigwPGgpe2s9W107Zm9yKHZhciBtPTA7bTxoO20rKylrW21dPVtdO3RoaXMubW9ycGhUYXJnZXRzLnBvc2l0aW9uPWt9dmFyIGw9YS5tb3JwaE5vcm1hbHMscT1sLmxlbmd0aCxuO2lmKDA8cSl7bj1bXTtmb3IobT0wO208cTttKyspblttXT1bXTt0aGlzLm1vcnBoVGFyZ2V0cy5ub3JtYWw9bn1mb3IodmFyIHI9YS5za2luSW5kaWNlcyxwPWEuc2tpbldlaWdodHMsdD1yLmxlbmd0aD09PWMubGVuZ3RoLHk9cC5sZW5ndGg9PT1jLmxlbmd0aCxtPTA7bTxiLmxlbmd0aDttKyspe3ZhciB4PWJbbV07dGhpcy52ZXJ0aWNlcy5wdXNoKGNbeC5hXSxjW3guYl0sY1t4LmNdKTt2YXIgdj14LnZlcnRleE5vcm1hbHM7Mz09PXYubGVuZ3RoP3RoaXMubm9ybWFscy5wdXNoKHZbMF0sdlsxXSx2WzJdKToodj14Lm5vcm1hbCx0aGlzLm5vcm1hbHMucHVzaCh2LHYsCnYpKTt2PXgudmVydGV4Q29sb3JzOzM9PT12Lmxlbmd0aD90aGlzLmNvbG9ycy5wdXNoKHZbMF0sdlsxXSx2WzJdKToodj14LmNvbG9yLHRoaXMuY29sb3JzLnB1c2godix2LHYpKTshMD09PWUmJih2PWRbMF1bbV0sdm9pZCAwIT09dj90aGlzLnV2cy5wdXNoKHZbMF0sdlsxXSx2WzJdKTooY29uc29sZS53YXJuKCJUSFJFRS5EaXJlY3RHZW9tZXRyeS5mcm9tR2VvbWV0cnkoKTogVW5kZWZpbmVkIHZlcnRleFV2ICIsbSksdGhpcy51dnMucHVzaChuZXcgRCxuZXcgRCxuZXcgRCkpKTshMD09PWYmJih2PWRbMV1bbV0sdm9pZCAwIT09dj90aGlzLnV2czIucHVzaCh2WzBdLHZbMV0sdlsyXSk6KGNvbnNvbGUud2FybigiVEhSRUUuRGlyZWN0R2VvbWV0cnkuZnJvbUdlb21ldHJ5KCk6IFVuZGVmaW5lZCB2ZXJ0ZXhVdjIgIixtKSx0aGlzLnV2czIucHVzaChuZXcgRCxuZXcgRCxuZXcgRCkpKTtmb3Iodj0wO3Y8aDt2Kyspe3ZhciBHPWdbdl0udmVydGljZXM7a1t2XS5wdXNoKEdbeC5hXSwKR1t4LmJdLEdbeC5jXSl9Zm9yKHY9MDt2PHE7disrKUc9bFt2XS52ZXJ0ZXhOb3JtYWxzW21dLG5bdl0ucHVzaChHLmEsRy5iLEcuYyk7dCYmdGhpcy5za2luSW5kaWNlcy5wdXNoKHJbeC5hXSxyW3guYl0sclt4LmNdKTt5JiZ0aGlzLnNraW5XZWlnaHRzLnB1c2gocFt4LmFdLHBbeC5iXSxwW3guY10pfXRoaXMuY29tcHV0ZUdyb3VwcyhhKTt0aGlzLnZlcnRpY2VzTmVlZFVwZGF0ZT1hLnZlcnRpY2VzTmVlZFVwZGF0ZTt0aGlzLm5vcm1hbHNOZWVkVXBkYXRlPWEubm9ybWFsc05lZWRVcGRhdGU7dGhpcy5jb2xvcnNOZWVkVXBkYXRlPWEuY29sb3JzTmVlZFVwZGF0ZTt0aGlzLnV2c05lZWRVcGRhdGU9YS51dnNOZWVkVXBkYXRlO3RoaXMuZ3JvdXBzTmVlZFVwZGF0ZT1hLmdyb3Vwc05lZWRVcGRhdGU7cmV0dXJuIHRoaXN9fSk7dmFyIFRkPTA7T2JqZWN0LmFzc2lnbihNLnByb3RvdHlwZSxzYS5wcm90b3R5cGUse2lzR2VvbWV0cnk6ITAsYXBwbHlNYXRyaXg6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPQoobmV3IEthKS5nZXROb3JtYWxNYXRyaXgoYSksYz0wLGQ9dGhpcy52ZXJ0aWNlcy5sZW5ndGg7YzxkO2MrKyl0aGlzLnZlcnRpY2VzW2NdLmFwcGx5TWF0cml4NChhKTtjPTA7Zm9yKGQ9dGhpcy5mYWNlcy5sZW5ndGg7YzxkO2MrKyl7YT10aGlzLmZhY2VzW2NdO2Eubm9ybWFsLmFwcGx5TWF0cml4MyhiKS5ub3JtYWxpemUoKTtmb3IodmFyIGU9MCxmPWEudmVydGV4Tm9ybWFscy5sZW5ndGg7ZTxmO2UrKylhLnZlcnRleE5vcm1hbHNbZV0uYXBwbHlNYXRyaXgzKGIpLm5vcm1hbGl6ZSgpfW51bGwhPT10aGlzLmJvdW5kaW5nQm94JiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO251bGwhPT10aGlzLmJvdW5kaW5nU3BoZXJlJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO3RoaXMubm9ybWFsc05lZWRVcGRhdGU9dGhpcy52ZXJ0aWNlc05lZWRVcGRhdGU9ITA7cmV0dXJuIHRoaXN9LHJvdGF0ZVg6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYil7YS5tYWtlUm90YXRpb25YKGIpOwp0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVZOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe2EubWFrZVJvdGF0aW9uWShiKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVaOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe2EubWFrZVJvdGF0aW9uWihiKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSx0cmFuc2xhdGU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYixjLGQpe2EubWFrZVRyYW5zbGF0aW9uKGIsYyxkKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxzY2FsZTpmdW5jdGlvbigpe3ZhciBhPW5ldyBKO3JldHVybiBmdW5jdGlvbihiLGMsZCl7YS5tYWtlU2NhbGUoYixjLGQpO3RoaXMuYXBwbHlNYXRyaXgoYSk7cmV0dXJuIHRoaXN9fSgpLGxvb2tBdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBCO3JldHVybiBmdW5jdGlvbihiKXthLmxvb2tBdChiKTsKYS51cGRhdGVNYXRyaXgoKTt0aGlzLmFwcGx5TWF0cml4KGEubWF0cml4KX19KCksZnJvbUJ1ZmZlckdlb21ldHJ5OmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiLGQsZSl7dmFyIGY9dm9pZCAwIT09Zz9bbFthXS5jbG9uZSgpLGxbYl0uY2xvbmUoKSxsW2RdLmNsb25lKCldOltdLHI9dm9pZCAwIT09aD9bYy5jb2xvcnNbYV0uY2xvbmUoKSxjLmNvbG9yc1tiXS5jbG9uZSgpLGMuY29sb3JzW2RdLmNsb25lKCldOltdO2U9bmV3IFZhKGEsYixkLGYscixlKTtjLmZhY2VzLnB1c2goZSk7dm9pZCAwIT09ayYmYy5mYWNlVmVydGV4VXZzWzBdLnB1c2goW3FbYV0uY2xvbmUoKSxxW2JdLmNsb25lKCkscVtkXS5jbG9uZSgpXSk7dm9pZCAwIT09bSYmYy5mYWNlVmVydGV4VXZzWzFdLnB1c2goW25bYV0uY2xvbmUoKSxuW2JdLmNsb25lKCksbltkXS5jbG9uZSgpXSl9dmFyIGM9dGhpcyxkPW51bGwhPT1hLmluZGV4P2EuaW5kZXguYXJyYXk6dm9pZCAwLGU9YS5hdHRyaWJ1dGVzLGY9ZS5wb3NpdGlvbi5hcnJheSwKZz12b2lkIDAhPT1lLm5vcm1hbD9lLm5vcm1hbC5hcnJheTp2b2lkIDAsaD12b2lkIDAhPT1lLmNvbG9yP2UuY29sb3IuYXJyYXk6dm9pZCAwLGs9dm9pZCAwIT09ZS51dj9lLnV2LmFycmF5OnZvaWQgMCxtPXZvaWQgMCE9PWUudXYyP2UudXYyLmFycmF5OnZvaWQgMDt2b2lkIDAhPT1tJiYodGhpcy5mYWNlVmVydGV4VXZzWzFdPVtdKTtmb3IodmFyIGw9W10scT1bXSxuPVtdLHI9ZT0wO2U8Zi5sZW5ndGg7ZSs9MyxyKz0yKWMudmVydGljZXMucHVzaChuZXcgcChmW2VdLGZbZSsxXSxmW2UrMl0pKSx2b2lkIDAhPT1nJiZsLnB1c2gobmV3IHAoZ1tlXSxnW2UrMV0sZ1tlKzJdKSksdm9pZCAwIT09aCYmYy5jb2xvcnMucHVzaChuZXcgSChoW2VdLGhbZSsxXSxoW2UrMl0pKSx2b2lkIDAhPT1rJiZxLnB1c2gobmV3IEQoa1tyXSxrW3IrMV0pKSx2b2lkIDAhPT1tJiZuLnB1c2gobmV3IEQobVtyXSxtW3IrMV0pKTt2YXIgej1hLmdyb3VwcztpZigwPHoubGVuZ3RoKWZvcihlPTA7ZTx6Lmxlbmd0aDtlKyspZm9yKHZhciBmPQp6W2VdLHQ9Zi5zdGFydCx5PWYuY291bnQscj10LHQ9dCt5O3I8dDtyKz0zKXZvaWQgMCE9PWQ/YihkW3JdLGRbcisxXSxkW3IrMl0sZi5tYXRlcmlhbEluZGV4KTpiKHIscisxLHIrMixmLm1hdGVyaWFsSW5kZXgpO2Vsc2UgaWYodm9pZCAwIT09ZClmb3IoZT0wO2U8ZC5sZW5ndGg7ZSs9MyliKGRbZV0sZFtlKzFdLGRbZSsyXSk7ZWxzZSBmb3IoZT0wO2U8Zi5sZW5ndGgvMztlKz0zKWIoZSxlKzEsZSsyKTt0aGlzLmNvbXB1dGVGYWNlTm9ybWFscygpO251bGwhPT1hLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1hLmJvdW5kaW5nQm94LmNsb25lKCkpO251bGwhPT1hLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1hLmJvdW5kaW5nU3BoZXJlLmNsb25lKCkpO3JldHVybiB0aGlzfSxjZW50ZXI6ZnVuY3Rpb24oKXt0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO3ZhciBhPXRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKCkubmVnYXRlKCk7dGhpcy50cmFuc2xhdGUoYS54LAphLnksYS56KTtyZXR1cm4gYX0sbm9ybWFsaXplOmZ1bmN0aW9uKCl7dGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTt2YXIgYT10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcixiPXRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzLGI9MD09PWI/MToxL2IsYz1uZXcgSjtjLnNldChiLDAsMCwtYiphLngsMCxiLDAsLWIqYS55LDAsMCxiLC1iKmEueiwwLDAsMCwxKTt0aGlzLmFwcGx5TWF0cml4KGMpO3JldHVybiB0aGlzfSxjb21wdXRlRmFjZU5vcm1hbHM6ZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IHAsYj1uZXcgcCxjPTAsZD10aGlzLmZhY2VzLmxlbmd0aDtjPGQ7YysrKXt2YXIgZT10aGlzLmZhY2VzW2NdLGY9dGhpcy52ZXJ0aWNlc1tlLmFdLGc9dGhpcy52ZXJ0aWNlc1tlLmJdO2Euc3ViVmVjdG9ycyh0aGlzLnZlcnRpY2VzW2UuY10sZyk7Yi5zdWJWZWN0b3JzKGYsZyk7YS5jcm9zcyhiKTthLm5vcm1hbGl6ZSgpO2Uubm9ybWFsLmNvcHkoYSl9fSxjb21wdXRlVmVydGV4Tm9ybWFsczpmdW5jdGlvbihhKXt2b2lkIDA9PT0KYSYmKGE9ITApO3ZhciBiLGMsZDtkPUFycmF5KHRoaXMudmVydGljZXMubGVuZ3RoKTtiPTA7Zm9yKGM9dGhpcy52ZXJ0aWNlcy5sZW5ndGg7YjxjO2IrKylkW2JdPW5ldyBwO2lmKGEpe3ZhciBlLGYsZyxoPW5ldyBwLGs9bmV3IHA7YT0wO2ZvcihiPXRoaXMuZmFjZXMubGVuZ3RoO2E8YjthKyspYz10aGlzLmZhY2VzW2FdLGU9dGhpcy52ZXJ0aWNlc1tjLmFdLGY9dGhpcy52ZXJ0aWNlc1tjLmJdLGc9dGhpcy52ZXJ0aWNlc1tjLmNdLGguc3ViVmVjdG9ycyhnLGYpLGsuc3ViVmVjdG9ycyhlLGYpLGguY3Jvc3MoayksZFtjLmFdLmFkZChoKSxkW2MuYl0uYWRkKGgpLGRbYy5jXS5hZGQoaCl9ZWxzZSBmb3IodGhpcy5jb21wdXRlRmFjZU5vcm1hbHMoKSxhPTAsYj10aGlzLmZhY2VzLmxlbmd0aDthPGI7YSsrKWM9dGhpcy5mYWNlc1thXSxkW2MuYV0uYWRkKGMubm9ybWFsKSxkW2MuYl0uYWRkKGMubm9ybWFsKSxkW2MuY10uYWRkKGMubm9ybWFsKTtiPTA7Zm9yKGM9dGhpcy52ZXJ0aWNlcy5sZW5ndGg7YjwKYztiKyspZFtiXS5ub3JtYWxpemUoKTthPTA7Zm9yKGI9dGhpcy5mYWNlcy5sZW5ndGg7YTxiO2ErKyljPXRoaXMuZmFjZXNbYV0sZT1jLnZlcnRleE5vcm1hbHMsMz09PWUubGVuZ3RoPyhlWzBdLmNvcHkoZFtjLmFdKSxlWzFdLmNvcHkoZFtjLmJdKSxlWzJdLmNvcHkoZFtjLmNdKSk6KGVbMF09ZFtjLmFdLmNsb25lKCksZVsxXT1kW2MuYl0uY2xvbmUoKSxlWzJdPWRbYy5jXS5jbG9uZSgpKTswPHRoaXMuZmFjZXMubGVuZ3RoJiYodGhpcy5ub3JtYWxzTmVlZFVwZGF0ZT0hMCl9LGNvbXB1dGVGbGF0VmVydGV4Tm9ybWFsczpmdW5jdGlvbigpe3ZhciBhLGIsYzt0aGlzLmNvbXB1dGVGYWNlTm9ybWFscygpO2E9MDtmb3IoYj10aGlzLmZhY2VzLmxlbmd0aDthPGI7YSsrKXtjPXRoaXMuZmFjZXNbYV07dmFyIGQ9Yy52ZXJ0ZXhOb3JtYWxzOzM9PT1kLmxlbmd0aD8oZFswXS5jb3B5KGMubm9ybWFsKSxkWzFdLmNvcHkoYy5ub3JtYWwpLGRbMl0uY29weShjLm5vcm1hbCkpOihkWzBdPQpjLm5vcm1hbC5jbG9uZSgpLGRbMV09Yy5ub3JtYWwuY2xvbmUoKSxkWzJdPWMubm9ybWFsLmNsb25lKCkpfTA8dGhpcy5mYWNlcy5sZW5ndGgmJih0aGlzLm5vcm1hbHNOZWVkVXBkYXRlPSEwKX0sY29tcHV0ZU1vcnBoTm9ybWFsczpmdW5jdGlvbigpe3ZhciBhLGIsYyxkLGU7Yz0wO2ZvcihkPXRoaXMuZmFjZXMubGVuZ3RoO2M8ZDtjKyspZm9yKGU9dGhpcy5mYWNlc1tjXSxlLl9fb3JpZ2luYWxGYWNlTm9ybWFsP2UuX19vcmlnaW5hbEZhY2VOb3JtYWwuY29weShlLm5vcm1hbCk6ZS5fX29yaWdpbmFsRmFjZU5vcm1hbD1lLm5vcm1hbC5jbG9uZSgpLGUuX19vcmlnaW5hbFZlcnRleE5vcm1hbHN8fChlLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzPVtdKSxhPTAsYj1lLnZlcnRleE5vcm1hbHMubGVuZ3RoO2E8YjthKyspZS5fX29yaWdpbmFsVmVydGV4Tm9ybWFsc1thXT9lLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzW2FdLmNvcHkoZS52ZXJ0ZXhOb3JtYWxzW2FdKTplLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzW2FdPQplLnZlcnRleE5vcm1hbHNbYV0uY2xvbmUoKTt2YXIgZj1uZXcgTTtmLmZhY2VzPXRoaXMuZmFjZXM7YT0wO2ZvcihiPXRoaXMubW9ycGhUYXJnZXRzLmxlbmd0aDthPGI7YSsrKXtpZighdGhpcy5tb3JwaE5vcm1hbHNbYV0pe3RoaXMubW9ycGhOb3JtYWxzW2FdPXt9O3RoaXMubW9ycGhOb3JtYWxzW2FdLmZhY2VOb3JtYWxzPVtdO3RoaXMubW9ycGhOb3JtYWxzW2FdLnZlcnRleE5vcm1hbHM9W107ZT10aGlzLm1vcnBoTm9ybWFsc1thXS5mYWNlTm9ybWFsczt2YXIgZz10aGlzLm1vcnBoTm9ybWFsc1thXS52ZXJ0ZXhOb3JtYWxzLGgsaztjPTA7Zm9yKGQ9dGhpcy5mYWNlcy5sZW5ndGg7YzxkO2MrKyloPW5ldyBwLGs9e2E6bmV3IHAsYjpuZXcgcCxjOm5ldyBwfSxlLnB1c2goaCksZy5wdXNoKGspfWc9dGhpcy5tb3JwaE5vcm1hbHNbYV07Zi52ZXJ0aWNlcz10aGlzLm1vcnBoVGFyZ2V0c1thXS52ZXJ0aWNlcztmLmNvbXB1dGVGYWNlTm9ybWFscygpO2YuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTsKYz0wO2ZvcihkPXRoaXMuZmFjZXMubGVuZ3RoO2M8ZDtjKyspZT10aGlzLmZhY2VzW2NdLGg9Zy5mYWNlTm9ybWFsc1tjXSxrPWcudmVydGV4Tm9ybWFsc1tjXSxoLmNvcHkoZS5ub3JtYWwpLGsuYS5jb3B5KGUudmVydGV4Tm9ybWFsc1swXSksay5iLmNvcHkoZS52ZXJ0ZXhOb3JtYWxzWzFdKSxrLmMuY29weShlLnZlcnRleE5vcm1hbHNbMl0pfWM9MDtmb3IoZD10aGlzLmZhY2VzLmxlbmd0aDtjPGQ7YysrKWU9dGhpcy5mYWNlc1tjXSxlLm5vcm1hbD1lLl9fb3JpZ2luYWxGYWNlTm9ybWFsLGUudmVydGV4Tm9ybWFscz1lLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzfSxjb21wdXRlTGluZURpc3RhbmNlczpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI9dGhpcy52ZXJ0aWNlcyxjPTAsZD1iLmxlbmd0aDtjPGQ7YysrKTA8YyYmKGErPWJbY10uZGlzdGFuY2VUbyhiW2MtMV0pKSx0aGlzLmxpbmVEaXN0YW5jZXNbY109YX0sY29tcHV0ZUJvdW5kaW5nQm94OmZ1bmN0aW9uKCl7bnVsbD09PQp0aGlzLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1uZXcgVGEpO3RoaXMuYm91bmRpbmdCb3guc2V0RnJvbVBvaW50cyh0aGlzLnZlcnRpY2VzKX0sY29tcHV0ZUJvdW5kaW5nU3BoZXJlOmZ1bmN0aW9uKCl7bnVsbD09PXRoaXMuYm91bmRpbmdTcGhlcmUmJih0aGlzLmJvdW5kaW5nU3BoZXJlPW5ldyBHYSk7dGhpcy5ib3VuZGluZ1NwaGVyZS5zZXRGcm9tUG9pbnRzKHRoaXMudmVydGljZXMpfSxtZXJnZTpmdW5jdGlvbihhLGIsYyl7aWYoITE9PT0oYSYmYS5pc0dlb21ldHJ5KSljb25zb2xlLmVycm9yKCJUSFJFRS5HZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuR2VvbWV0cnkuIixhKTtlbHNle3ZhciBkLGU9dGhpcy52ZXJ0aWNlcy5sZW5ndGgsZj10aGlzLnZlcnRpY2VzLGc9YS52ZXJ0aWNlcyxoPXRoaXMuZmFjZXMsaz1hLmZhY2VzLG09dGhpcy5mYWNlVmVydGV4VXZzWzBdLGw9YS5mYWNlVmVydGV4VXZzWzBdLHE9dGhpcy5jb2xvcnMsCm49YS5jb2xvcnM7dm9pZCAwPT09YyYmKGM9MCk7dm9pZCAwIT09YiYmKGQ9KG5ldyBLYSkuZ2V0Tm9ybWFsTWF0cml4KGIpKTthPTA7Zm9yKHZhciByPWcubGVuZ3RoO2E8cjthKyspe3ZhciBwPWdbYV0uY2xvbmUoKTt2b2lkIDAhPT1iJiZwLmFwcGx5TWF0cml4NChiKTtmLnB1c2gocCl9YT0wO2ZvcihyPW4ubGVuZ3RoO2E8cjthKyspcS5wdXNoKG5bYV0uY2xvbmUoKSk7YT0wO2ZvcihyPWsubGVuZ3RoO2E8cjthKyspe3ZhciBnPWtbYV0sdD1nLnZlcnRleE5vcm1hbHMsbj1nLnZlcnRleENvbG9ycyxxPW5ldyBWYShnLmErZSxnLmIrZSxnLmMrZSk7cS5ub3JtYWwuY29weShnLm5vcm1hbCk7dm9pZCAwIT09ZCYmcS5ub3JtYWwuYXBwbHlNYXRyaXgzKGQpLm5vcm1hbGl6ZSgpO2I9MDtmb3IoZj10Lmxlbmd0aDtiPGY7YisrKXA9dFtiXS5jbG9uZSgpLHZvaWQgMCE9PWQmJnAuYXBwbHlNYXRyaXgzKGQpLm5vcm1hbGl6ZSgpLHEudmVydGV4Tm9ybWFscy5wdXNoKHApO3EuY29sb3IuY29weShnLmNvbG9yKTsKYj0wO2ZvcihmPW4ubGVuZ3RoO2I8ZjtiKyspcD1uW2JdLHEudmVydGV4Q29sb3JzLnB1c2gocC5jbG9uZSgpKTtxLm1hdGVyaWFsSW5kZXg9Zy5tYXRlcmlhbEluZGV4K2M7aC5wdXNoKHEpfWE9MDtmb3Iocj1sLmxlbmd0aDthPHI7YSsrKWlmKGM9bFthXSxkPVtdLHZvaWQgMCE9PWMpe2I9MDtmb3IoZj1jLmxlbmd0aDtiPGY7YisrKWQucHVzaChjW2JdLmNsb25lKCkpO20ucHVzaChkKX19fSxtZXJnZU1lc2g6ZnVuY3Rpb24oYSl7ITE9PT0oYSYmYS5pc01lc2gpP2NvbnNvbGUuZXJyb3IoIlRIUkVFLkdlb21ldHJ5Lm1lcmdlTWVzaCgpOiBtZXNoIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5NZXNoLiIsYSk6KGEubWF0cml4QXV0b1VwZGF0ZSYmYS51cGRhdGVNYXRyaXgoKSx0aGlzLm1lcmdlKGEuZ2VvbWV0cnksYS5tYXRyaXgpKX0sbWVyZ2VWZXJ0aWNlczpmdW5jdGlvbigpe3ZhciBhPXt9LGI9W10sYz1bXSxkLGU9TWF0aC5wb3coMTAsNCksZixnO2Y9MDtmb3IoZz10aGlzLnZlcnRpY2VzLmxlbmd0aDtmPApnO2YrKylkPXRoaXMudmVydGljZXNbZl0sZD1NYXRoLnJvdW5kKGQueCplKSsiXyIrTWF0aC5yb3VuZChkLnkqZSkrIl8iK01hdGgucm91bmQoZC56KmUpLHZvaWQgMD09PWFbZF0/KGFbZF09ZixiLnB1c2godGhpcy52ZXJ0aWNlc1tmXSksY1tmXT1iLmxlbmd0aC0xKTpjW2ZdPWNbYVtkXV07YT1bXTtmPTA7Zm9yKGc9dGhpcy5mYWNlcy5sZW5ndGg7ZjxnO2YrKylmb3IoZT10aGlzLmZhY2VzW2ZdLGUuYT1jW2UuYV0sZS5iPWNbZS5iXSxlLmM9Y1tlLmNdLGU9W2UuYSxlLmIsZS5jXSxkPTA7Mz5kO2QrKylpZihlW2RdPT09ZVsoZCsxKSUzXSl7YS5wdXNoKGYpO2JyZWFrfWZvcihmPWEubGVuZ3RoLTE7MDw9ZjtmLS0pZm9yKGU9YVtmXSx0aGlzLmZhY2VzLnNwbGljZShlLDEpLGM9MCxnPXRoaXMuZmFjZVZlcnRleFV2cy5sZW5ndGg7YzxnO2MrKyl0aGlzLmZhY2VWZXJ0ZXhVdnNbY10uc3BsaWNlKGUsMSk7Zj10aGlzLnZlcnRpY2VzLmxlbmd0aC1iLmxlbmd0aDt0aGlzLnZlcnRpY2VzPQpiO3JldHVybiBmfSxzb3J0RmFjZXNCeU1hdGVyaWFsSW5kZXg6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5mYWNlcyxiPWEubGVuZ3RoLGM9MDtjPGI7YysrKWFbY10uX2lkPWM7YS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEubWF0ZXJpYWxJbmRleC1iLm1hdGVyaWFsSW5kZXh9KTt2YXIgZD10aGlzLmZhY2VWZXJ0ZXhVdnNbMF0sZT10aGlzLmZhY2VWZXJ0ZXhVdnNbMV0sZixnO2QmJmQubGVuZ3RoPT09YiYmKGY9W10pO2UmJmUubGVuZ3RoPT09YiYmKGc9W10pO2ZvcihjPTA7YzxiO2MrKyl7dmFyIGg9YVtjXS5faWQ7ZiYmZi5wdXNoKGRbaF0pO2cmJmcucHVzaChlW2hdKX1mJiYodGhpcy5mYWNlVmVydGV4VXZzWzBdPWYpO2cmJih0aGlzLmZhY2VWZXJ0ZXhVdnNbMV09Zyl9LHRvSlNPTjpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiLGMpe3JldHVybiBjP2F8MTw8YjphJn4oMTw8Yil9ZnVuY3Rpb24gYihhKXt2YXIgYj1hLngudG9TdHJpbmcoKSthLnkudG9TdHJpbmcoKSsKYS56LnRvU3RyaW5nKCk7aWYodm9pZCAwIT09bVtiXSlyZXR1cm4gbVtiXTttW2JdPWsubGVuZ3RoLzM7ay5wdXNoKGEueCxhLnksYS56KTtyZXR1cm4gbVtiXX1mdW5jdGlvbiBjKGEpe3ZhciBiPWEuci50b1N0cmluZygpK2EuZy50b1N0cmluZygpK2EuYi50b1N0cmluZygpO2lmKHZvaWQgMCE9PXFbYl0pcmV0dXJuIHFbYl07cVtiXT1sLmxlbmd0aDtsLnB1c2goYS5nZXRIZXgoKSk7cmV0dXJuIHFbYl19ZnVuY3Rpb24gZChhKXt2YXIgYj1hLngudG9TdHJpbmcoKSthLnkudG9TdHJpbmcoKTtpZih2b2lkIDAhPT1yW2JdKXJldHVybiByW2JdO3JbYl09bi5sZW5ndGgvMjtuLnB1c2goYS54LGEueSk7cmV0dXJuIHJbYl19dmFyIGU9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJHZW9tZXRyeSIsZ2VuZXJhdG9yOiJHZW9tZXRyeS50b0pTT04ifX07ZS51dWlkPXRoaXMudXVpZDtlLnR5cGU9dGhpcy50eXBlOyIiIT09dGhpcy5uYW1lJiYoZS5uYW1lPXRoaXMubmFtZSk7aWYodm9pZCAwIT09CnRoaXMucGFyYW1ldGVycyl7dmFyIGY9dGhpcy5wYXJhbWV0ZXJzLGc7Zm9yKGcgaW4gZil2b2lkIDAhPT1mW2ddJiYoZVtnXT1mW2ddKTtyZXR1cm4gZX1mPVtdO2ZvcihnPTA7Zzx0aGlzLnZlcnRpY2VzLmxlbmd0aDtnKyspe3ZhciBoPXRoaXMudmVydGljZXNbZ107Zi5wdXNoKGgueCxoLnksaC56KX12YXIgaD1bXSxrPVtdLG09e30sbD1bXSxxPXt9LG49W10scj17fTtmb3IoZz0wO2c8dGhpcy5mYWNlcy5sZW5ndGg7ZysrKXt2YXIgcD10aGlzLmZhY2VzW2ddLHQ9dm9pZCAwIT09dGhpcy5mYWNlVmVydGV4VXZzWzBdW2ddLHk9MDxwLm5vcm1hbC5sZW5ndGgoKSx4PTA8cC52ZXJ0ZXhOb3JtYWxzLmxlbmd0aCx2PTEhPT1wLmNvbG9yLnJ8fDEhPT1wLmNvbG9yLmd8fDEhPT1wLmNvbG9yLmIsRz0wPHAudmVydGV4Q29sb3JzLmxlbmd0aCx3PTAsdz1hKHcsMCwwKSx3PWEodywxLCEwKSx3PWEodywyLCExKSx3PWEodywzLHQpLHc9YSh3LDQseSksdz1hKHcsNSx4KSx3PWEodyw2LAp2KSx3PWEodyw3LEcpO2gucHVzaCh3KTtoLnB1c2gocC5hLHAuYixwLmMpO2gucHVzaChwLm1hdGVyaWFsSW5kZXgpO3QmJih0PXRoaXMuZmFjZVZlcnRleFV2c1swXVtnXSxoLnB1c2goZCh0WzBdKSxkKHRbMV0pLGQodFsyXSkpKTt5JiZoLnB1c2goYihwLm5vcm1hbCkpO3gmJih5PXAudmVydGV4Tm9ybWFscyxoLnB1c2goYih5WzBdKSxiKHlbMV0pLGIoeVsyXSkpKTt2JiZoLnB1c2goYyhwLmNvbG9yKSk7RyYmKHA9cC52ZXJ0ZXhDb2xvcnMsaC5wdXNoKGMocFswXSksYyhwWzFdKSxjKHBbMl0pKSl9ZS5kYXRhPXt9O2UuZGF0YS52ZXJ0aWNlcz1mO2UuZGF0YS5ub3JtYWxzPWs7MDxsLmxlbmd0aCYmKGUuZGF0YS5jb2xvcnM9bCk7MDxuLmxlbmd0aCYmKGUuZGF0YS51dnM9W25dKTtlLmRhdGEuZmFjZXM9aDtyZXR1cm4gZX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IE0pLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnO3RoaXMudmVydGljZXM9CltdO3RoaXMuY29sb3JzPVtdO3RoaXMuZmFjZXM9W107dGhpcy5mYWNlVmVydGV4VXZzPVtbXV07dGhpcy5tb3JwaFRhcmdldHM9W107dGhpcy5tb3JwaE5vcm1hbHM9W107dGhpcy5za2luV2VpZ2h0cz1bXTt0aGlzLnNraW5JbmRpY2VzPVtdO3RoaXMubGluZURpc3RhbmNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLm5hbWU9YS5uYW1lO2Q9YS52ZXJ0aWNlcztiPTA7Zm9yKGM9ZC5sZW5ndGg7YjxjO2IrKyl0aGlzLnZlcnRpY2VzLnB1c2goZFtiXS5jbG9uZSgpKTtkPWEuY29sb3JzO2I9MDtmb3IoYz1kLmxlbmd0aDtiPGM7YisrKXRoaXMuY29sb3JzLnB1c2goZFtiXS5jbG9uZSgpKTtkPWEuZmFjZXM7Yj0wO2ZvcihjPWQubGVuZ3RoO2I8YztiKyspdGhpcy5mYWNlcy5wdXNoKGRbYl0uY2xvbmUoKSk7Yj0wO2ZvcihjPWEuZmFjZVZlcnRleFV2cy5sZW5ndGg7YjxjO2IrKyl7dmFyIGg9YS5mYWNlVmVydGV4VXZzW2JdO3ZvaWQgMD09PQp0aGlzLmZhY2VWZXJ0ZXhVdnNbYl0mJih0aGlzLmZhY2VWZXJ0ZXhVdnNbYl09W10pO2Q9MDtmb3IoZT1oLmxlbmd0aDtkPGU7ZCsrKXt2YXIgaz1oW2RdLG09W107Zj0wO2ZvcihnPWsubGVuZ3RoO2Y8ZztmKyspbS5wdXNoKGtbZl0uY2xvbmUoKSk7dGhpcy5mYWNlVmVydGV4VXZzW2JdLnB1c2gobSl9fWY9YS5tb3JwaFRhcmdldHM7Yj0wO2ZvcihjPWYubGVuZ3RoO2I8YztiKyspe2c9e307Zy5uYW1lPWZbYl0ubmFtZTtpZih2b2lkIDAhPT1mW2JdLnZlcnRpY2VzKWZvcihnLnZlcnRpY2VzPVtdLGQ9MCxlPWZbYl0udmVydGljZXMubGVuZ3RoO2Q8ZTtkKyspZy52ZXJ0aWNlcy5wdXNoKGZbYl0udmVydGljZXNbZF0uY2xvbmUoKSk7aWYodm9pZCAwIT09ZltiXS5ub3JtYWxzKWZvcihnLm5vcm1hbHM9W10sZD0wLGU9ZltiXS5ub3JtYWxzLmxlbmd0aDtkPGU7ZCsrKWcubm9ybWFscy5wdXNoKGZbYl0ubm9ybWFsc1tkXS5jbG9uZSgpKTt0aGlzLm1vcnBoVGFyZ2V0cy5wdXNoKGcpfWY9CmEubW9ycGhOb3JtYWxzO2I9MDtmb3IoYz1mLmxlbmd0aDtiPGM7YisrKXtnPXt9O2lmKHZvaWQgMCE9PWZbYl0udmVydGV4Tm9ybWFscylmb3IoZy52ZXJ0ZXhOb3JtYWxzPVtdLGQ9MCxlPWZbYl0udmVydGV4Tm9ybWFscy5sZW5ndGg7ZDxlO2QrKyloPWZbYl0udmVydGV4Tm9ybWFsc1tkXSxrPXt9LGsuYT1oLmEuY2xvbmUoKSxrLmI9aC5iLmNsb25lKCksay5jPWguYy5jbG9uZSgpLGcudmVydGV4Tm9ybWFscy5wdXNoKGspO2lmKHZvaWQgMCE9PWZbYl0uZmFjZU5vcm1hbHMpZm9yKGcuZmFjZU5vcm1hbHM9W10sZD0wLGU9ZltiXS5mYWNlTm9ybWFscy5sZW5ndGg7ZDxlO2QrKylnLmZhY2VOb3JtYWxzLnB1c2goZltiXS5mYWNlTm9ybWFsc1tkXS5jbG9uZSgpKTt0aGlzLm1vcnBoTm9ybWFscy5wdXNoKGcpfWQ9YS5za2luV2VpZ2h0cztiPTA7Zm9yKGM9ZC5sZW5ndGg7YjxjO2IrKyl0aGlzLnNraW5XZWlnaHRzLnB1c2goZFtiXS5jbG9uZSgpKTtkPWEuc2tpbkluZGljZXM7Yj0KMDtmb3IoYz1kLmxlbmd0aDtiPGM7YisrKXRoaXMuc2tpbkluZGljZXMucHVzaChkW2JdLmNsb25lKCkpO2Q9YS5saW5lRGlzdGFuY2VzO2I9MDtmb3IoYz1kLmxlbmd0aDtiPGM7YisrKXRoaXMubGluZURpc3RhbmNlcy5wdXNoKGRbYl0pO2I9YS5ib3VuZGluZ0JveDtudWxsIT09YiYmKHRoaXMuYm91bmRpbmdCb3g9Yi5jbG9uZSgpKTtiPWEuYm91bmRpbmdTcGhlcmU7bnVsbCE9PWImJih0aGlzLmJvdW5kaW5nU3BoZXJlPWIuY2xvbmUoKSk7dGhpcy5lbGVtZW50c05lZWRVcGRhdGU9YS5lbGVtZW50c05lZWRVcGRhdGU7dGhpcy52ZXJ0aWNlc05lZWRVcGRhdGU9YS52ZXJ0aWNlc05lZWRVcGRhdGU7dGhpcy51dnNOZWVkVXBkYXRlPWEudXZzTmVlZFVwZGF0ZTt0aGlzLm5vcm1hbHNOZWVkVXBkYXRlPWEubm9ybWFsc05lZWRVcGRhdGU7dGhpcy5jb2xvcnNOZWVkVXBkYXRlPWEuY29sb3JzTmVlZFVwZGF0ZTt0aGlzLmxpbmVEaXN0YW5jZXNOZWVkVXBkYXRlPWEubGluZURpc3RhbmNlc05lZWRVcGRhdGU7CnRoaXMuZ3JvdXBzTmVlZFVwZGF0ZT1hLmdyb3Vwc05lZWRVcGRhdGU7cmV0dXJuIHRoaXN9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fSk7SS5NYXhJbmRleD02NTUzNTtPYmplY3QuYXNzaWduKEkucHJvdG90eXBlLHNhLnByb3RvdHlwZSx7aXNCdWZmZXJHZW9tZXRyeTohMCxnZXRJbmRleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZGV4fSxzZXRJbmRleDpmdW5jdGlvbihhKXtBcnJheS5pc0FycmF5KGEpP3RoaXMuaW5kZXg9bmV3ICg2NTUzNTxTZChhKT9qYjppYikoYSwxKTp0aGlzLmluZGV4PWF9LGFkZEF0dHJpYnV0ZTpmdW5jdGlvbihhLGIsYyl7aWYoITE9PT0oYiYmYi5pc0J1ZmZlckF0dHJpYnV0ZSkmJiExPT09KGImJmIuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSkpY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEF0dHJpYnV0ZSgpIG5vdyBleHBlY3RzICggbmFtZSwgYXR0cmlidXRlICkuIiksCnRoaXMuYWRkQXR0cmlidXRlKGEsbmV3IEwoYixjKSk7ZWxzZSBpZigiaW5kZXgiPT09YSljb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleChiKTtlbHNlIHJldHVybiB0aGlzLmF0dHJpYnV0ZXNbYV09Yix0aGlzfSxnZXRBdHRyaWJ1dGU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1thXX0scmVtb3ZlQXR0cmlidXRlOmZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbYV07cmV0dXJuIHRoaXN9LGFkZEdyb3VwOmZ1bmN0aW9uKGEsYixjKXt0aGlzLmdyb3Vwcy5wdXNoKHtzdGFydDphLGNvdW50OmIsbWF0ZXJpYWxJbmRleDp2b2lkIDAhPT1jP2M6MH0pfSxjbGVhckdyb3VwczpmdW5jdGlvbigpe3RoaXMuZ3JvdXBzPVtdfSxzZXREcmF3UmFuZ2U6ZnVuY3Rpb24oYSxiKXt0aGlzLmRyYXdSYW5nZS5zdGFydD1hO3RoaXMuZHJhd1JhbmdlLmNvdW50PQpifSxhcHBseU1hdHJpeDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247dm9pZCAwIT09YiYmKGEuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZShiKSxiLm5lZWRzVXBkYXRlPSEwKTtiPXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7dm9pZCAwIT09YiYmKChuZXcgS2EpLmdldE5vcm1hbE1hdHJpeChhKS5hcHBseVRvQnVmZmVyQXR0cmlidXRlKGIpLGIubmVlZHNVcGRhdGU9ITApO251bGwhPT10aGlzLmJvdW5kaW5nQm94JiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO251bGwhPT10aGlzLmJvdW5kaW5nU3BoZXJlJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO3JldHVybiB0aGlzfSxyb3RhdGVYOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe2EubWFrZVJvdGF0aW9uWChiKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVZOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe2EubWFrZVJvdGF0aW9uWShiKTsKdGhpcy5hcHBseU1hdHJpeChhKTtyZXR1cm4gdGhpc319KCkscm90YXRlWjpmdW5jdGlvbigpe3ZhciBhPW5ldyBKO3JldHVybiBmdW5jdGlvbihiKXthLm1ha2VSb3RhdGlvblooYik7dGhpcy5hcHBseU1hdHJpeChhKTtyZXR1cm4gdGhpc319KCksdHJhbnNsYXRlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXthLm1ha2VUcmFuc2xhdGlvbihiLGMsZCk7dGhpcy5hcHBseU1hdHJpeChhKTtyZXR1cm4gdGhpc319KCksc2NhbGU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYixjLGQpe2EubWFrZVNjYWxlKGIsYyxkKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxsb29rQXQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgQjtyZXR1cm4gZnVuY3Rpb24oYil7YS5sb29rQXQoYik7YS51cGRhdGVNYXRyaXgoKTt0aGlzLmFwcGx5TWF0cml4KGEubWF0cml4KX19KCksY2VudGVyOmZ1bmN0aW9uKCl7dGhpcy5jb21wdXRlQm91bmRpbmdCb3goKTsKdmFyIGE9dGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIoKS5uZWdhdGUoKTt0aGlzLnRyYW5zbGF0ZShhLngsYS55LGEueik7cmV0dXJuIGF9LHNldEZyb21PYmplY3Q6ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZW9tZXRyeTtpZihhLmlzUG9pbnRzfHxhLmlzTGluZSl7YT1uZXcgQygzKmIudmVydGljZXMubGVuZ3RoLDMpO3ZhciBjPW5ldyBDKDMqYi5jb2xvcnMubGVuZ3RoLDMpO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsYS5jb3B5VmVjdG9yM3NBcnJheShiLnZlcnRpY2VzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoImNvbG9yIixjLmNvcHlDb2xvcnNBcnJheShiLmNvbG9ycykpO2IubGluZURpc3RhbmNlcyYmYi5saW5lRGlzdGFuY2VzLmxlbmd0aD09PWIudmVydGljZXMubGVuZ3RoJiYoYT1uZXcgQyhiLmxpbmVEaXN0YW5jZXMubGVuZ3RoLDEpLHRoaXMuYWRkQXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLGEuY29weUFycmF5KGIubGluZURpc3RhbmNlcykpKTtudWxsIT09Yi5ib3VuZGluZ1NwaGVyZSYmCih0aGlzLmJvdW5kaW5nU3BoZXJlPWIuYm91bmRpbmdTcGhlcmUuY2xvbmUoKSk7bnVsbCE9PWIuYm91bmRpbmdCb3gmJih0aGlzLmJvdW5kaW5nQm94PWIuYm91bmRpbmdCb3guY2xvbmUoKSl9ZWxzZSBhLmlzTWVzaCYmYiYmYi5pc0dlb21ldHJ5JiZ0aGlzLmZyb21HZW9tZXRyeShiKTtyZXR1cm4gdGhpc30sdXBkYXRlRnJvbU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYj1hLmdlb21ldHJ5O2lmKGEuaXNNZXNoKXt2YXIgYz1iLl9fZGlyZWN0R2VvbWV0cnk7ITA9PT1iLmVsZW1lbnRzTmVlZFVwZGF0ZSYmKGM9dm9pZCAwLGIuZWxlbWVudHNOZWVkVXBkYXRlPSExKTtpZih2b2lkIDA9PT1jKXJldHVybiB0aGlzLmZyb21HZW9tZXRyeShiKTtjLnZlcnRpY2VzTmVlZFVwZGF0ZT1iLnZlcnRpY2VzTmVlZFVwZGF0ZTtjLm5vcm1hbHNOZWVkVXBkYXRlPWIubm9ybWFsc05lZWRVcGRhdGU7Yy5jb2xvcnNOZWVkVXBkYXRlPWIuY29sb3JzTmVlZFVwZGF0ZTtjLnV2c05lZWRVcGRhdGU9Yi51dnNOZWVkVXBkYXRlOwpjLmdyb3Vwc05lZWRVcGRhdGU9Yi5ncm91cHNOZWVkVXBkYXRlO2IudmVydGljZXNOZWVkVXBkYXRlPSExO2Iubm9ybWFsc05lZWRVcGRhdGU9ITE7Yi5jb2xvcnNOZWVkVXBkYXRlPSExO2IudXZzTmVlZFVwZGF0ZT0hMTtiLmdyb3Vwc05lZWRVcGRhdGU9ITE7Yj1jfSEwPT09Yi52ZXJ0aWNlc05lZWRVcGRhdGUmJihjPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbix2b2lkIDAhPT1jJiYoYy5jb3B5VmVjdG9yM3NBcnJheShiLnZlcnRpY2VzKSxjLm5lZWRzVXBkYXRlPSEwKSxiLnZlcnRpY2VzTmVlZFVwZGF0ZT0hMSk7ITA9PT1iLm5vcm1hbHNOZWVkVXBkYXRlJiYoYz10aGlzLmF0dHJpYnV0ZXMubm9ybWFsLHZvaWQgMCE9PWMmJihjLmNvcHlWZWN0b3Izc0FycmF5KGIubm9ybWFscyksYy5uZWVkc1VwZGF0ZT0hMCksYi5ub3JtYWxzTmVlZFVwZGF0ZT0hMSk7ITA9PT1iLmNvbG9yc05lZWRVcGRhdGUmJihjPXRoaXMuYXR0cmlidXRlcy5jb2xvcix2b2lkIDAhPT1jJiYoYy5jb3B5Q29sb3JzQXJyYXkoYi5jb2xvcnMpLApjLm5lZWRzVXBkYXRlPSEwKSxiLmNvbG9yc05lZWRVcGRhdGU9ITEpO2IudXZzTmVlZFVwZGF0ZSYmKGM9dGhpcy5hdHRyaWJ1dGVzLnV2LHZvaWQgMCE9PWMmJihjLmNvcHlWZWN0b3Iyc0FycmF5KGIudXZzKSxjLm5lZWRzVXBkYXRlPSEwKSxiLnV2c05lZWRVcGRhdGU9ITEpO2IubGluZURpc3RhbmNlc05lZWRVcGRhdGUmJihjPXRoaXMuYXR0cmlidXRlcy5saW5lRGlzdGFuY2Usdm9pZCAwIT09YyYmKGMuY29weUFycmF5KGIubGluZURpc3RhbmNlcyksYy5uZWVkc1VwZGF0ZT0hMCksYi5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZT0hMSk7Yi5ncm91cHNOZWVkVXBkYXRlJiYoYi5jb21wdXRlR3JvdXBzKGEuZ2VvbWV0cnkpLHRoaXMuZ3JvdXBzPWIuZ3JvdXBzLGIuZ3JvdXBzTmVlZFVwZGF0ZT0hMSk7cmV0dXJuIHRoaXN9LGZyb21HZW9tZXRyeTpmdW5jdGlvbihhKXthLl9fZGlyZWN0R2VvbWV0cnk9KG5ldyBLZSkuZnJvbUdlb21ldHJ5KGEpO3JldHVybiB0aGlzLmZyb21EaXJlY3RHZW9tZXRyeShhLl9fZGlyZWN0R2VvbWV0cnkpfSwKZnJvbURpcmVjdEdlb21ldHJ5OmZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBGbG9hdDMyQXJyYXkoMyphLnZlcnRpY2VzLmxlbmd0aCk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIiwobmV3IEwoYiwzKSkuY29weVZlY3RvcjNzQXJyYXkoYS52ZXJ0aWNlcykpOzA8YS5ub3JtYWxzLmxlbmd0aCYmKGI9bmV3IEZsb2F0MzJBcnJheSgzKmEubm9ybWFscy5sZW5ndGgpLHRoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLChuZXcgTChiLDMpKS5jb3B5VmVjdG9yM3NBcnJheShhLm5vcm1hbHMpKSk7MDxhLmNvbG9ycy5sZW5ndGgmJihiPW5ldyBGbG9hdDMyQXJyYXkoMyphLmNvbG9ycy5sZW5ndGgpLHRoaXMuYWRkQXR0cmlidXRlKCJjb2xvciIsKG5ldyBMKGIsMykpLmNvcHlDb2xvcnNBcnJheShhLmNvbG9ycykpKTswPGEudXZzLmxlbmd0aCYmKGI9bmV3IEZsb2F0MzJBcnJheSgyKmEudXZzLmxlbmd0aCksdGhpcy5hZGRBdHRyaWJ1dGUoInV2IiwobmV3IEwoYiwyKSkuY29weVZlY3RvcjJzQXJyYXkoYS51dnMpKSk7CjA8YS51dnMyLmxlbmd0aCYmKGI9bmV3IEZsb2F0MzJBcnJheSgyKmEudXZzMi5sZW5ndGgpLHRoaXMuYWRkQXR0cmlidXRlKCJ1djIiLChuZXcgTChiLDIpKS5jb3B5VmVjdG9yMnNBcnJheShhLnV2czIpKSk7MDxhLmluZGljZXMubGVuZ3RoJiYoYj1uZXcgKDY1NTM1PFNkKGEuaW5kaWNlcyk/VWludDMyQXJyYXk6VWludDE2QXJyYXkpKDMqYS5pbmRpY2VzLmxlbmd0aCksdGhpcy5zZXRJbmRleCgobmV3IEwoYiwxKSkuY29weUluZGljZXNBcnJheShhLmluZGljZXMpKSk7dGhpcy5ncm91cHM9YS5ncm91cHM7Zm9yKHZhciBjIGluIGEubW9ycGhUYXJnZXRzKXtmb3IodmFyIGI9W10sZD1hLm1vcnBoVGFyZ2V0c1tjXSxlPTAsZj1kLmxlbmd0aDtlPGY7ZSsrKXt2YXIgZz1kW2VdLGg9bmV3IEMoMypnLmxlbmd0aCwzKTtiLnB1c2goaC5jb3B5VmVjdG9yM3NBcnJheShnKSl9dGhpcy5tb3JwaEF0dHJpYnV0ZXNbY109Yn0wPGEuc2tpbkluZGljZXMubGVuZ3RoJiYoYz1uZXcgQyg0KgphLnNraW5JbmRpY2VzLmxlbmd0aCw0KSx0aGlzLmFkZEF0dHJpYnV0ZSgic2tpbkluZGV4IixjLmNvcHlWZWN0b3I0c0FycmF5KGEuc2tpbkluZGljZXMpKSk7MDxhLnNraW5XZWlnaHRzLmxlbmd0aCYmKGM9bmV3IEMoNCphLnNraW5XZWlnaHRzLmxlbmd0aCw0KSx0aGlzLmFkZEF0dHJpYnV0ZSgic2tpbldlaWdodCIsYy5jb3B5VmVjdG9yNHNBcnJheShhLnNraW5XZWlnaHRzKSkpO251bGwhPT1hLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1hLmJvdW5kaW5nU3BoZXJlLmNsb25lKCkpO251bGwhPT1hLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1hLmJvdW5kaW5nQm94LmNsb25lKCkpO3JldHVybiB0aGlzfSxjb21wdXRlQm91bmRpbmdCb3g6ZnVuY3Rpb24oKXtudWxsPT09dGhpcy5ib3VuZGluZ0JveCYmKHRoaXMuYm91bmRpbmdCb3g9bmV3IFRhKTt2YXIgYT10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247dm9pZCAwIT09YT90aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoYSk6CnRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7KGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLngpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3g6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfSxjb21wdXRlQm91bmRpbmdTcGhlcmU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgVGEsYj1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oKXtudWxsPT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bmV3IEdhKTt2YXIgYz10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoYyl7dmFyIGQ9dGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXI7YS5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKGMpOwphLmdldENlbnRlcihkKTtmb3IodmFyIGU9MCxmPTAsZz1jLmNvdW50O2Y8ZztmKyspYi54PWMuZ2V0WChmKSxiLnk9Yy5nZXRZKGYpLGIuej1jLmdldFooZiksZT1NYXRoLm1heChlLGQuZGlzdGFuY2VUb1NxdWFyZWQoYikpO3RoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzPU1hdGguc3FydChlKTtpc05hTih0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cykmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBDb21wdXRlZCByYWRpdXMgaXMgTmFOLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfX19KCksY29tcHV0ZUZhY2VOb3JtYWxzOmZ1bmN0aW9uKCl7fSxjb21wdXRlVmVydGV4Tm9ybWFsczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuaW5kZXgsYj10aGlzLmF0dHJpYnV0ZXMsYz10aGlzLmdyb3VwcztpZihiLnBvc2l0aW9uKXt2YXIgZD1iLnBvc2l0aW9uLmFycmF5OwppZih2b2lkIDA9PT1iLm5vcm1hbCl0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgTChuZXcgRmxvYXQzMkFycmF5KGQubGVuZ3RoKSwzKSk7ZWxzZSBmb3IodmFyIGU9Yi5ub3JtYWwuYXJyYXksZj0wLGc9ZS5sZW5ndGg7ZjxnO2YrKyllW2ZdPTA7dmFyIGU9Yi5ub3JtYWwuYXJyYXksaCxrLG0sbD1uZXcgcCxxPW5ldyBwLG49bmV3IHAscj1uZXcgcCx6PW5ldyBwO2lmKGEpe2E9YS5hcnJheTswPT09Yy5sZW5ndGgmJnRoaXMuYWRkR3JvdXAoMCxhLmxlbmd0aCk7Zm9yKHZhciB0PTAseT1jLmxlbmd0aDt0PHk7Kyt0KWZvcihmPWNbdF0sZz1mLnN0YXJ0LGg9Zi5jb3VudCxmPWcsZys9aDtmPGc7Zis9MyloPTMqYVtmKzBdLGs9MyphW2YrMV0sbT0zKmFbZisyXSxsLmZyb21BcnJheShkLGgpLHEuZnJvbUFycmF5KGQsayksbi5mcm9tQXJyYXkoZCxtKSxyLnN1YlZlY3RvcnMobixxKSx6LnN1YlZlY3RvcnMobCxxKSxyLmNyb3NzKHopLGVbaF0rPXIueCxlW2grMV0rPXIueSwKZVtoKzJdKz1yLnosZVtrXSs9ci54LGVbaysxXSs9ci55LGVbaysyXSs9ci56LGVbbV0rPXIueCxlW20rMV0rPXIueSxlW20rMl0rPXIuen1lbHNlIGZvcihmPTAsZz1kLmxlbmd0aDtmPGc7Zis9OSlsLmZyb21BcnJheShkLGYpLHEuZnJvbUFycmF5KGQsZiszKSxuLmZyb21BcnJheShkLGYrNiksci5zdWJWZWN0b3JzKG4scSksei5zdWJWZWN0b3JzKGwscSksci5jcm9zcyh6KSxlW2ZdPXIueCxlW2YrMV09ci55LGVbZisyXT1yLnosZVtmKzNdPXIueCxlW2YrNF09ci55LGVbZis1XT1yLnosZVtmKzZdPXIueCxlW2YrN109ci55LGVbZis4XT1yLno7dGhpcy5ub3JtYWxpemVOb3JtYWxzKCk7Yi5ub3JtYWwubmVlZHNVcGRhdGU9ITB9fSxtZXJnZTpmdW5jdGlvbihhLGIpe2lmKCExPT09KGEmJmEuaXNCdWZmZXJHZW9tZXRyeSkpY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVyZ2UoKTogZ2VvbWV0cnkgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5LiIsCmEpO2Vsc2V7dm9pZCAwPT09YiYmKGI9MCk7dmFyIGM9dGhpcy5hdHRyaWJ1dGVzLGQ7Zm9yKGQgaW4gYylpZih2b2lkIDAhPT1hLmF0dHJpYnV0ZXNbZF0pZm9yKHZhciBlPWNbZF0uYXJyYXksZj1hLmF0dHJpYnV0ZXNbZF0sZz1mLmFycmF5LGg9MCxmPWYuaXRlbVNpemUqYjtoPGcubGVuZ3RoO2grKyxmKyspZVtmXT1nW2hdO3JldHVybiB0aGlzfX0sbm9ybWFsaXplTm9ybWFsczpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsLGIsYyxkLGUsZj0wLGc9YS5jb3VudDtmPGc7ZisrKWI9YS5nZXRYKGYpLGM9YS5nZXRZKGYpLGQ9YS5nZXRaKGYpLGU9MS9NYXRoLnNxcnQoYipiK2MqYytkKmQpLGEuc2V0WFlaKGYsYiplLGMqZSxkKmUpfSx0b05vbkluZGV4ZWQ6ZnVuY3Rpb24oKXtpZihudWxsPT09dGhpcy5pbmRleClyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS50b05vbkluZGV4ZWQoKTogR2VvbWV0cnkgaXMgYWxyZWFkeSBub24taW5kZXhlZC4iKSwKdGhpczt2YXIgYT1uZXcgSSxiPXRoaXMuaW5kZXguYXJyYXksYz10aGlzLmF0dHJpYnV0ZXMsZDtmb3IoZCBpbiBjKXtmb3IodmFyIGU9Y1tkXSxmPWUuYXJyYXksZT1lLml0ZW1TaXplLGc9bmV3IGYuY29uc3RydWN0b3IoYi5sZW5ndGgqZSksaCxrPTAsbT0wLGw9Yi5sZW5ndGg7bTxsO20rKyl7aD1iW21dKmU7Zm9yKHZhciBxPTA7cTxlO3ErKylnW2srK109ZltoKytdfWEuYWRkQXR0cmlidXRlKGQsbmV3IEwoZyxlKSl9cmV0dXJuIGF9LHRvSlNPTjpmdW5jdGlvbigpe3ZhciBhPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQnVmZmVyR2VvbWV0cnkiLGdlbmVyYXRvcjoiQnVmZmVyR2VvbWV0cnkudG9KU09OIn19O2EudXVpZD10aGlzLnV1aWQ7YS50eXBlPXRoaXMudHlwZTsiIiE9PXRoaXMubmFtZSYmKGEubmFtZT10aGlzLm5hbWUpO2lmKHZvaWQgMCE9PXRoaXMucGFyYW1ldGVycyl7dmFyIGI9dGhpcy5wYXJhbWV0ZXJzLGM7Zm9yKGMgaW4gYil2b2lkIDAhPT1iW2NdJiYKKGFbY109YltjXSk7cmV0dXJuIGF9YS5kYXRhPXthdHRyaWJ1dGVzOnt9fTt2YXIgZD10aGlzLmluZGV4O251bGwhPT1kJiYoYj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkLmFycmF5KSxhLmRhdGEuaW5kZXg9e3R5cGU6ZC5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OmJ9KTtkPXRoaXMuYXR0cmlidXRlcztmb3IoYyBpbiBkKXt2YXIgZT1kW2NdLGI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5hcnJheSk7YS5kYXRhLmF0dHJpYnV0ZXNbY109e2l0ZW1TaXplOmUuaXRlbVNpemUsdHlwZTplLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6Yixub3JtYWxpemVkOmUubm9ybWFsaXplZH19Yz10aGlzLmdyb3VwczswPGMubGVuZ3RoJiYoYS5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGMpKSk7Yz10aGlzLmJvdW5kaW5nU3BoZXJlO251bGwhPT1jJiYoYS5kYXRhLmJvdW5kaW5nU3BoZXJlPXtjZW50ZXI6Yy5jZW50ZXIudG9BcnJheSgpLApyYWRpdXM6Yy5yYWRpdXN9KTtyZXR1cm4gYX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IEkpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkO3RoaXMuaW5kZXg9bnVsbDt0aGlzLmF0dHJpYnV0ZXM9e307dGhpcy5tb3JwaEF0dHJpYnV0ZXM9e307dGhpcy5ncm91cHM9W107dGhpcy5ib3VuZGluZ1NwaGVyZT10aGlzLmJvdW5kaW5nQm94PW51bGw7dGhpcy5uYW1lPWEubmFtZTtjPWEuaW5kZXg7bnVsbCE9PWMmJnRoaXMuc2V0SW5kZXgoYy5jbG9uZSgpKTtjPWEuYXR0cmlidXRlcztmb3IoYiBpbiBjKXRoaXMuYWRkQXR0cmlidXRlKGIsY1tiXS5jbG9uZSgpKTt2YXIgZT1hLm1vcnBoQXR0cmlidXRlcztmb3IoYiBpbiBlKXt2YXIgZj1bXSxnPWVbYl07Yz0wO2ZvcihkPWcubGVuZ3RoO2M8ZDtjKyspZi5wdXNoKGdbY10uY2xvbmUoKSk7dGhpcy5tb3JwaEF0dHJpYnV0ZXNbYl09Zn1iPWEuZ3JvdXBzO2M9MDtmb3IoZD1iLmxlbmd0aDtjPGQ7YysrKWU9CmJbY10sdGhpcy5hZGRHcm91cChlLnN0YXJ0LGUuY291bnQsZS5tYXRlcmlhbEluZGV4KTtiPWEuYm91bmRpbmdCb3g7bnVsbCE9PWImJih0aGlzLmJvdW5kaW5nQm94PWIuY2xvbmUoKSk7Yj1hLmJvdW5kaW5nU3BoZXJlO251bGwhPT1iJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1iLmNsb25lKCkpO3RoaXMuZHJhd1JhbmdlLnN0YXJ0PWEuZHJhd1JhbmdlLnN0YXJ0O3RoaXMuZHJhd1JhbmdlLmNvdW50PWEuZHJhd1JhbmdlLmNvdW50O3JldHVybiB0aGlzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX0pO0NhLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpDYSxpc01lc2g6ITAsc2V0RHJhd01vZGU6ZnVuY3Rpb24oYSl7dGhpcy5kcmF3TW9kZT1hfSxjb3B5OmZ1bmN0aW9uKGEpe0IucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMuZHJhd01vZGU9YS5kcmF3TW9kZTsKcmV0dXJuIHRoaXN9LHVwZGF0ZU1vcnBoVGFyZ2V0czpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2VvbWV0cnkubW9ycGhUYXJnZXRzO2lmKHZvaWQgMCE9PWEmJjA8YS5sZW5ndGgpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdO3RoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2Zvcih2YXIgYj0wLGM9YS5sZW5ndGg7YjxjO2IrKyl0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2FbYl0ubmFtZV09Yn19LHJheWNhc3Q6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYixjLGQsZSxmLGcpe1VhLmJhcnljb29yZEZyb21Qb2ludChhLGIsYyxkLHQpO2UubXVsdGlwbHlTY2FsYXIodC54KTtmLm11bHRpcGx5U2NhbGFyKHQueSk7Zy5tdWx0aXBseVNjYWxhcih0LnopO2UuYWRkKGYpLmFkZChnKTtyZXR1cm4gZS5jbG9uZSgpfWZ1bmN0aW9uIGIoYSxiLGMsZCxlLGYsZyl7dmFyIGg9YS5tYXRlcmlhbDtpZihudWxsPT09CigxPT09aC5zaWRlP2MuaW50ZXJzZWN0VHJpYW5nbGUoZixlLGQsITAsZyk6Yy5pbnRlcnNlY3RUcmlhbmdsZShkLGUsZiwyIT09aC5zaWRlLGcpKSlyZXR1cm4gbnVsbDt4LmNvcHkoZyk7eC5hcHBseU1hdHJpeDQoYS5tYXRyaXhXb3JsZCk7Yz1iLnJheS5vcmlnaW4uZGlzdGFuY2VUbyh4KTtyZXR1cm4gYzxiLm5lYXJ8fGM+Yi5mYXI/bnVsbDp7ZGlzdGFuY2U6Yyxwb2ludDp4LmNsb25lKCksb2JqZWN0OmF9fWZ1bmN0aW9uIGMoYyxkLGUsZixtLGwsdSxxKXtnLmZyb21CdWZmZXJBdHRyaWJ1dGUoZixsKTtoLmZyb21CdWZmZXJBdHRyaWJ1dGUoZix1KTtrLmZyb21CdWZmZXJBdHRyaWJ1dGUoZixxKTtpZihjPWIoYyxkLGUsZyxoLGsseSkpbSYmKG4uZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLGwpLHIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLHUpLHouZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLHEpLGMudXY9YSh5LGcsaCxrLG4scix6KSksYy5mYWNlPW5ldyBWYShsLHUscSxVYS5ub3JtYWwoZywKaCxrKSksYy5mYWNlSW5kZXg9bDtyZXR1cm4gY312YXIgZD1uZXcgSixlPW5ldyBoYixmPW5ldyBHYSxnPW5ldyBwLGg9bmV3IHAsaz1uZXcgcCxtPW5ldyBwLGw9bmV3IHAscT1uZXcgcCxuPW5ldyBELHI9bmV3IEQsej1uZXcgRCx0PW5ldyBwLHk9bmV3IHAseD1uZXcgcDtyZXR1cm4gZnVuY3Rpb24ocCx0KXt2YXIgdz10aGlzLmdlb21ldHJ5LHg9dGhpcy5tYXRlcmlhbCxDPXRoaXMubWF0cml4V29ybGQ7aWYodm9pZCAwIT09eCYmKG51bGw9PT13LmJvdW5kaW5nU3BoZXJlJiZ3LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLGYuY29weSh3LmJvdW5kaW5nU3BoZXJlKSxmLmFwcGx5TWF0cml4NChDKSwhMSE9PXAucmF5LmludGVyc2VjdHNTcGhlcmUoZikmJihkLmdldEludmVyc2UoQyksZS5jb3B5KHAucmF5KS5hcHBseU1hdHJpeDQoZCksbnVsbD09PXcuYm91bmRpbmdCb3h8fCExIT09ZS5pbnRlcnNlY3RzQm94KHcuYm91bmRpbmdCb3gpKSkpe3ZhciBFO2lmKHcuaXNCdWZmZXJHZW9tZXRyeSl7dmFyIEYsCkQseD13LmluZGV4LEI9dy5hdHRyaWJ1dGVzLnBvc2l0aW9uLEM9dy5hdHRyaWJ1dGVzLnV2LGNhLEk7aWYobnVsbCE9PXgpZm9yKGNhPTAsST14LmNvdW50O2NhPEk7Y2ErPTMpe2lmKHc9eC5nZXRYKGNhKSxGPXguZ2V0WChjYSsxKSxEPXguZ2V0WChjYSsyKSxFPWModGhpcyxwLGUsQixDLHcsRixEKSlFLmZhY2VJbmRleD1NYXRoLmZsb29yKGNhLzMpLHQucHVzaChFKX1lbHNlIGZvcihjYT0wLEk9Qi5jb3VudDtjYTxJO2NhKz0zKWlmKHc9Y2EsRj1jYSsxLEQ9Y2ErMixFPWModGhpcyxwLGUsQixDLHcsRixEKSlFLmluZGV4PXcsdC5wdXNoKEUpfWVsc2UgaWYody5pc0dlb21ldHJ5KXt2YXIgSCxDPUFycmF5LmlzQXJyYXkoeCk7Y2E9dy52ZXJ0aWNlcztJPXcuZmFjZXM7Rj13LmZhY2VWZXJ0ZXhVdnNbMF07MDxGLmxlbmd0aCYmKEI9Rik7Zm9yKHZhciBKPTAsTT1JLmxlbmd0aDtKPE07SisrKXt2YXIgUD1JW0pdO0U9Qz94W1AubWF0ZXJpYWxJbmRleF06eDtpZih2b2lkIDAhPT0KRSl7Rj1jYVtQLmFdO0Q9Y2FbUC5iXTtIPWNhW1AuY107aWYoITA9PT1FLm1vcnBoVGFyZ2V0cyl7RT13Lm1vcnBoVGFyZ2V0czt2YXIgSz10aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztnLnNldCgwLDAsMCk7aC5zZXQoMCwwLDApO2suc2V0KDAsMCwwKTtmb3IodmFyIFc9MCxiYT1FLmxlbmd0aDtXPGJhO1crKyl7dmFyIFQ9S1tXXTtpZigwIT09VCl7dmFyIFE9RVtXXS52ZXJ0aWNlcztnLmFkZFNjYWxlZFZlY3RvcihtLnN1YlZlY3RvcnMoUVtQLmFdLEYpLFQpO2guYWRkU2NhbGVkVmVjdG9yKGwuc3ViVmVjdG9ycyhRW1AuYl0sRCksVCk7ay5hZGRTY2FsZWRWZWN0b3IocS5zdWJWZWN0b3JzKFFbUC5jXSxIKSxUKX19Zy5hZGQoRik7aC5hZGQoRCk7ay5hZGQoSCk7Rj1nO0Q9aDtIPWt9aWYoRT1iKHRoaXMscCxlLEYsRCxILHkpKUImJkJbSl0mJihLPUJbSl0sbi5jb3B5KEtbMF0pLHIuY29weShLWzFdKSx6LmNvcHkoS1syXSksRS51dj1hKHksRixELEgsbixyLHopKSxFLmZhY2U9ClAsRS5mYWNlSW5kZXg9Six0LnB1c2goRSl9fX19fX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmdlb21ldHJ5LHRoaXMubWF0ZXJpYWwpKS5jb3B5KHRoaXMpfX0pO0liLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtJYi5wcm90b3R5cGUuY29uc3RydWN0b3I9SWI7a2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO2tiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1rYjt4Yy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7eGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPXhjO2xiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlKTtsYi5wcm90b3R5cGUuY29uc3RydWN0b3I9bGI7T2EucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOk9hLGlzQ2FtZXJhOiEwLGNvcHk6ZnVuY3Rpb24oYSl7Qi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsCmEpO3RoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoYS5tYXRyaXhXb3JsZEludmVyc2UpO3RoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KGEucHJvamVjdGlvbk1hdHJpeCk7cmV0dXJuIHRoaXN9LGdldFdvcmxkRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHFhO3JldHVybiBmdW5jdGlvbihiKXtiPWJ8fG5ldyBwO3RoaXMuZ2V0V29ybGRRdWF0ZXJuaW9uKGEpO3JldHVybiBiLnNldCgwLDAsLTEpLmFwcGx5UXVhdGVybmlvbihhKX19KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSk7eGEucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp4YSxpc1BlcnNwZWN0aXZlQ2FtZXJhOiEwLGNvcHk6ZnVuY3Rpb24oYSl7T2EucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMuZm92PWEuZm92O3RoaXMuem9vbT1hLnpvb207dGhpcy5uZWFyPQphLm5lYXI7dGhpcy5mYXI9YS5mYXI7dGhpcy5mb2N1cz1hLmZvY3VzO3RoaXMuYXNwZWN0PWEuYXNwZWN0O3RoaXMudmlldz1udWxsPT09YS52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSxhLnZpZXcpO3RoaXMuZmlsbUdhdWdlPWEuZmlsbUdhdWdlO3RoaXMuZmlsbU9mZnNldD1hLmZpbG1PZmZzZXQ7cmV0dXJuIHRoaXN9LHNldEZvY2FsTGVuZ3RoOmZ1bmN0aW9uKGEpe2E9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvYTt0aGlzLmZvdj0yKlkuUkFEMkRFRypNYXRoLmF0YW4oYSk7dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LGdldEZvY2FsTGVuZ3RoOmZ1bmN0aW9uKCl7dmFyIGE9TWF0aC50YW4oLjUqWS5ERUcyUkFEKnRoaXMuZm92KTtyZXR1cm4uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS9hfSxnZXRFZmZlY3RpdmVGT1Y6ZnVuY3Rpb24oKXtyZXR1cm4gMipZLlJBRDJERUcqTWF0aC5hdGFuKE1hdGgudGFuKC41KlkuREVHMlJBRCp0aGlzLmZvdikvdGhpcy56b29tKX0sCmdldEZpbG1XaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbG1HYXVnZSpNYXRoLm1pbih0aGlzLmFzcGVjdCwxKX0sZ2V0RmlsbUhlaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX0sc2V0Vmlld09mZnNldDpmdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5hc3BlY3Q9YS9iO3RoaXMudmlldz17ZnVsbFdpZHRoOmEsZnVsbEhlaWdodDpiLG9mZnNldFg6YyxvZmZzZXRZOmQsd2lkdGg6ZSxoZWlnaHQ6Zn07dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LGNsZWFyVmlld09mZnNldDpmdW5jdGlvbigpe3RoaXMudmlldz1udWxsO3RoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSx1cGRhdGVQcm9qZWN0aW9uTWF0cml4OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5uZWFyLGI9YSpNYXRoLnRhbiguNSpZLkRFRzJSQUQqdGhpcy5mb3YpL3RoaXMuem9vbSxjPTIqYixkPXRoaXMuYXNwZWN0KmMsZT0tLjUqZCxmPQp0aGlzLnZpZXc7aWYobnVsbCE9PWYpdmFyIGc9Zi5mdWxsV2lkdGgsaD1mLmZ1bGxIZWlnaHQsZT1lK2Yub2Zmc2V0WCpkL2csYj1iLWYub2Zmc2V0WSpjL2gsZD1mLndpZHRoL2cqZCxjPWYuaGVpZ2h0L2gqYztmPXRoaXMuZmlsbU9mZnNldDswIT09ZiYmKGUrPWEqZi90aGlzLmdldEZpbG1XaWR0aCgpKTt0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKGUsZStkLGIsYi1jLGEsdGhpcy5mYXIpfSx0b0pTT046ZnVuY3Rpb24oYSl7YT1CLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGEpO2Eub2JqZWN0LmZvdj10aGlzLmZvdjthLm9iamVjdC56b29tPXRoaXMuem9vbTthLm9iamVjdC5uZWFyPXRoaXMubmVhcjthLm9iamVjdC5mYXI9dGhpcy5mYXI7YS5vYmplY3QuZm9jdXM9dGhpcy5mb2N1czthLm9iamVjdC5hc3BlY3Q9dGhpcy5hc3BlY3Q7bnVsbCE9PXRoaXMudmlldyYmKGEub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKTthLm9iamVjdC5maWxtR2F1Z2U9CnRoaXMuZmlsbUdhdWdlO2Eub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0O3JldHVybiBhfX0pO0piLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoT2EucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6SmIsaXNPcnRob2dyYXBoaWNDYW1lcmE6ITAsY29weTpmdW5jdGlvbihhKXtPYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5sZWZ0PWEubGVmdDt0aGlzLnJpZ2h0PWEucmlnaHQ7dGhpcy50b3A9YS50b3A7dGhpcy5ib3R0b209YS5ib3R0b207dGhpcy5uZWFyPWEubmVhcjt0aGlzLmZhcj1hLmZhcjt0aGlzLnpvb209YS56b29tO3RoaXMudmlldz1udWxsPT09YS52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSxhLnZpZXcpO3JldHVybiB0aGlzfSxzZXRWaWV3T2Zmc2V0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLnZpZXc9e2Z1bGxXaWR0aDphLGZ1bGxIZWlnaHQ6YixvZmZzZXRYOmMsb2Zmc2V0WTpkLHdpZHRoOmUsaGVpZ2h0OmZ9Owp0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX0sY2xlYXJWaWV3T2Zmc2V0OmZ1bmN0aW9uKCl7dGhpcy52aWV3PW51bGw7dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LHVwZGF0ZVByb2plY3Rpb25NYXRyaXg6ZnVuY3Rpb24oKXt2YXIgYT0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksYj0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksYz0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIsZD0odGhpcy50b3ArdGhpcy5ib3R0b20pLzIsZT1jLWEsYz1jK2EsYT1kK2IsYj1kLWI7aWYobnVsbCE9PXRoaXMudmlldyl2YXIgYz10aGlzLnpvb20vKHRoaXMudmlldy53aWR0aC90aGlzLnZpZXcuZnVsbFdpZHRoKSxiPXRoaXMuem9vbS8odGhpcy52aWV3LmhlaWdodC90aGlzLnZpZXcuZnVsbEhlaWdodCksZj0odGhpcy5yaWdodC10aGlzLmxlZnQpL3RoaXMudmlldy53aWR0aCxkPSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvdGhpcy52aWV3LmhlaWdodCwKZT1lK3RoaXMudmlldy5vZmZzZXRYL2MqZixjPWUrdGhpcy52aWV3LndpZHRoL2MqZixhPWEtdGhpcy52aWV3Lm9mZnNldFkvYipkLGI9YS10aGlzLnZpZXcuaGVpZ2h0L2IqZDt0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZU9ydGhvZ3JhcGhpYyhlLGMsYSxiLHRoaXMubmVhcix0aGlzLmZhcil9LHRvSlNPTjpmdW5jdGlvbihhKXthPUIucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsYSk7YS5vYmplY3Quem9vbT10aGlzLnpvb207YS5vYmplY3QubGVmdD10aGlzLmxlZnQ7YS5vYmplY3QucmlnaHQ9dGhpcy5yaWdodDthLm9iamVjdC50b3A9dGhpcy50b3A7YS5vYmplY3QuYm90dG9tPXRoaXMuYm90dG9tO2Eub2JqZWN0Lm5lYXI9dGhpcy5uZWFyO2Eub2JqZWN0LmZhcj10aGlzLmZhcjtudWxsIT09dGhpcy52aWV3JiYoYS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpO3JldHVybiBhfX0pO3ZhciBiZz0wO0tiLnByb3RvdHlwZS5pc0ZvZ0V4cDI9ITA7CktiLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgS2IodGhpcy5jb2xvci5nZXRIZXgoKSx0aGlzLmRlbnNpdHkpfTtLYi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGEpe3JldHVybnt0eXBlOiJGb2dFeHAyIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLGRlbnNpdHk6dGhpcy5kZW5zaXR5fX07TGIucHJvdG90eXBlLmlzRm9nPSEwO0xiLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgTGIodGhpcy5jb2xvci5nZXRIZXgoKSx0aGlzLm5lYXIsdGhpcy5mYXIpfTtMYi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGEpe3JldHVybnt0eXBlOiJGb2ciLGNvbG9yOnRoaXMuY29sb3IuZ2V0SGV4KCksbmVhcjp0aGlzLm5lYXIsZmFyOnRoaXMuZmFyfX07bWQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOm1kLGNvcHk6ZnVuY3Rpb24oYSxiKXtCLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcywKYSxiKTtudWxsIT09YS5iYWNrZ3JvdW5kJiYodGhpcy5iYWNrZ3JvdW5kPWEuYmFja2dyb3VuZC5jbG9uZSgpKTtudWxsIT09YS5mb2cmJih0aGlzLmZvZz1hLmZvZy5jbG9uZSgpKTtudWxsIT09YS5vdmVycmlkZU1hdGVyaWFsJiYodGhpcy5vdmVycmlkZU1hdGVyaWFsPWEub3ZlcnJpZGVNYXRlcmlhbC5jbG9uZSgpKTt0aGlzLmF1dG9VcGRhdGU9YS5hdXRvVXBkYXRlO3RoaXMubWF0cml4QXV0b1VwZGF0ZT1hLm1hdHJpeEF1dG9VcGRhdGU7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihhKXt2YXIgYj1CLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGEpO251bGwhPT10aGlzLmJhY2tncm91bmQmJihiLm9iamVjdC5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04oYSkpO251bGwhPT10aGlzLmZvZyYmKGIub2JqZWN0LmZvZz10aGlzLmZvZy50b0pTT04oKSk7cmV0dXJuIGJ9fSk7WWQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSksCntjb25zdHJ1Y3RvcjpZZCxpc0xlbnNGbGFyZTohMCxjb3B5OmZ1bmN0aW9uKGEpe0IucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMucG9zaXRpb25TY3JlZW4uY29weShhLnBvc2l0aW9uU2NyZWVuKTt0aGlzLmN1c3RvbVVwZGF0ZUNhbGxiYWNrPWEuY3VzdG9tVXBkYXRlQ2FsbGJhY2s7Zm9yKHZhciBiPTAsYz1hLmxlbnNGbGFyZXMubGVuZ3RoO2I8YztiKyspdGhpcy5sZW5zRmxhcmVzLnB1c2goYS5sZW5zRmxhcmVzW2JdKTtyZXR1cm4gdGhpc30sYWRkOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2b2lkIDA9PT1iJiYoYj0tMSk7dm9pZCAwPT09YyYmKGM9MCk7dm9pZCAwPT09ZiYmKGY9MSk7dm9pZCAwPT09ZSYmKGU9bmV3IEgoMTY3NzcyMTUpKTt2b2lkIDA9PT1kJiYoZD0xKTtjPU1hdGgubWluKGMsTWF0aC5tYXgoMCxjKSk7dGhpcy5sZW5zRmxhcmVzLnB1c2goe3RleHR1cmU6YSxzaXplOmIsZGlzdGFuY2U6Yyx4OjAseTowLHo6MCxzY2FsZToxLHJvdGF0aW9uOjAsCm9wYWNpdHk6Zixjb2xvcjplLGJsZW5kaW5nOmR9KX0sdXBkYXRlTGVuc0ZsYXJlczpmdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5sZW5zRmxhcmVzLmxlbmd0aCxjLGQ9MiotdGhpcy5wb3NpdGlvblNjcmVlbi54LGU9MiotdGhpcy5wb3NpdGlvblNjcmVlbi55O2ZvcihhPTA7YTxiO2ErKyljPXRoaXMubGVuc0ZsYXJlc1thXSxjLng9dGhpcy5wb3NpdGlvblNjcmVlbi54K2QqYy5kaXN0YW5jZSxjLnk9dGhpcy5wb3NpdGlvblNjcmVlbi55K2UqYy5kaXN0YW5jZSxjLndhbnRlZFJvdGF0aW9uPWMueCpNYXRoLlBJKi4yNSxjLnJvdGF0aW9uKz0uMjUqKGMud2FudGVkUm90YXRpb24tYy5yb3RhdGlvbil9fSk7Y2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWi5wcm90b3R5cGUpO2NiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jYjtjYi5wcm90b3R5cGUuaXNTcHJpdGVNYXRlcmlhbD0hMDtjYi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtaLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcywKYSk7dGhpcy5jb2xvci5jb3B5KGEuY29sb3IpO3RoaXMubWFwPWEubWFwO3RoaXMucm90YXRpb249YS5yb3RhdGlvbjtyZXR1cm4gdGhpc307QWMucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkFjLGlzU3ByaXRlOiEwLHJheWNhc3Q6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwLGM9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGQsZSl7Yi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7ZC5yYXkuY2xvc2VzdFBvaW50VG9Qb2ludChiLGEpO2Muc2V0RnJvbU1hdHJpeFNjYWxlKHRoaXMubWF0cml4V29ybGQpO3ZhciBmPWMueCpjLnkvNDtiLmRpc3RhbmNlVG9TcXVhcmVkKGEpPmZ8fChmPWQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGEpLGY8ZC5uZWFyfHxmPmQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOmYscG9pbnQ6YS5jbG9uZSgpLGZhY2U6bnVsbCxvYmplY3Q6dGhpc30pKX19KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5tYXRlcmlhbCkpLmNvcHkodGhpcyl9fSk7CkJjLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpCYyxjb3B5OmZ1bmN0aW9uKGEpe0IucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEsITEpO2E9YS5sZXZlbHM7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aDtiPGM7YisrKXt2YXIgZD1hW2JdO3RoaXMuYWRkTGV2ZWwoZC5vYmplY3QuY2xvbmUoKSxkLmRpc3RhbmNlKX1yZXR1cm4gdGhpc30sYWRkTGV2ZWw6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0wKTtiPU1hdGguYWJzKGIpO2Zvcih2YXIgYz10aGlzLmxldmVscyxkPTA7ZDxjLmxlbmd0aCYmIShiPGNbZF0uZGlzdGFuY2UpO2QrKyk7Yy5zcGxpY2UoZCwwLHtkaXN0YW5jZTpiLG9iamVjdDphfSk7dGhpcy5hZGQoYSl9LGdldE9iamVjdEZvckRpc3RhbmNlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLmxldmVscyxjPTEsZD1iLmxlbmd0aDtjPGQmJiEoYTxiW2NdLmRpc3RhbmNlKTtjKyspO3JldHVybiBiW2MtCjFdLm9iamVjdH0scmF5Y2FzdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiLGMpe2Euc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpO3ZhciBkPWIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGEpO3RoaXMuZ2V0T2JqZWN0Rm9yRGlzdGFuY2UoZCkucmF5Y2FzdChiLGMpfX0oKSx1cGRhdGU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwO3JldHVybiBmdW5jdGlvbihjKXt2YXIgZD10aGlzLmxldmVscztpZigxPGQubGVuZ3RoKXthLnNldEZyb21NYXRyaXhQb3NpdGlvbihjLm1hdHJpeFdvcmxkKTtiLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtjPWEuZGlzdGFuY2VUbyhiKTtkWzBdLm9iamVjdC52aXNpYmxlPSEwO2Zvcih2YXIgZT0xLGY9ZC5sZW5ndGg7ZTxmO2UrKylpZihjPj1kW2VdLmRpc3RhbmNlKWRbZS0xXS5vYmplY3QudmlzaWJsZT0hMSxkW2VdLm9iamVjdC52aXNpYmxlPSEwO2Vsc2UgYnJlYWs7CmZvcig7ZTxmO2UrKylkW2VdLm9iamVjdC52aXNpYmxlPSExfX19KCksdG9KU09OOmZ1bmN0aW9uKGEpe2E9Qi5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxhKTthLm9iamVjdC5sZXZlbHM9W107Zm9yKHZhciBiPXRoaXMubGV2ZWxzLGM9MCxkPWIubGVuZ3RoO2M8ZDtjKyspe3ZhciBlPWJbY107YS5vYmplY3QubGV2ZWxzLnB1c2goe29iamVjdDplLm9iamVjdC51dWlkLGRpc3RhbmNlOmUuZGlzdGFuY2V9KX1yZXR1cm4gYX19KTtPYmplY3QuYXNzaWduKENjLnByb3RvdHlwZSx7Y2FsY3VsYXRlSW52ZXJzZXM6ZnVuY3Rpb24oKXt0aGlzLmJvbmVJbnZlcnNlcz1bXTtmb3IodmFyIGE9MCxiPXRoaXMuYm9uZXMubGVuZ3RoO2E8YjthKyspe3ZhciBjPW5ldyBKO3RoaXMuYm9uZXNbYV0mJmMuZ2V0SW52ZXJzZSh0aGlzLmJvbmVzW2FdLm1hdHJpeFdvcmxkKTt0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKGMpfX0scG9zZTpmdW5jdGlvbigpe3ZhciBhLGIsYztiPTA7Zm9yKGM9dGhpcy5ib25lcy5sZW5ndGg7YjwKYztiKyspKGE9dGhpcy5ib25lc1tiXSkmJmEubWF0cml4V29ybGQuZ2V0SW52ZXJzZSh0aGlzLmJvbmVJbnZlcnNlc1tiXSk7Yj0wO2ZvcihjPXRoaXMuYm9uZXMubGVuZ3RoO2I8YztiKyspaWYoYT10aGlzLmJvbmVzW2JdKWEucGFyZW50JiZhLnBhcmVudC5pc0JvbmU/KGEubWF0cml4LmdldEludmVyc2UoYS5wYXJlbnQubWF0cml4V29ybGQpLGEubWF0cml4Lm11bHRpcGx5KGEubWF0cml4V29ybGQpKTphLm1hdHJpeC5jb3B5KGEubWF0cml4V29ybGQpLGEubWF0cml4LmRlY29tcG9zZShhLnBvc2l0aW9uLGEucXVhdGVybmlvbixhLnNjYWxlKX0sdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEosYj1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGM9dGhpcy5ib25lcyxkPXRoaXMuYm9uZUludmVyc2VzLGU9dGhpcy5ib25lTWF0cmljZXMsZj10aGlzLmJvbmVUZXh0dXJlLGc9MCxoPWMubGVuZ3RoO2c8aDtnKyspYS5tdWx0aXBseU1hdHJpY2VzKGNbZ10/Y1tnXS5tYXRyaXhXb3JsZDoKYixkW2ddKSxhLnRvQXJyYXkoZSwxNipnKTt2b2lkIDAhPT1mJiYoZi5uZWVkc1VwZGF0ZT0hMCl9fSgpLGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDYyh0aGlzLmJvbmVzLHRoaXMuYm9uZUludmVyc2VzKX19KTtuZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6bmQsaXNCb25lOiEwfSk7b2QucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShDYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpvZCxpc1NraW5uZWRNZXNoOiEwLGluaXRCb25lczpmdW5jdGlvbigpe3ZhciBhPVtdLGIsYyxkLGU7aWYodGhpcy5nZW9tZXRyeSYmdm9pZCAwIT09dGhpcy5nZW9tZXRyeS5ib25lcyl7ZD0wO2ZvcihlPXRoaXMuZ2VvbWV0cnkuYm9uZXMubGVuZ3RoO2Q8ZTtkKyspYz10aGlzLmdlb21ldHJ5LmJvbmVzW2RdLGI9bmV3IG5kLGEucHVzaChiKSxiLm5hbWU9Yy5uYW1lLGIucG9zaXRpb24uZnJvbUFycmF5KGMucG9zKSwKYi5xdWF0ZXJuaW9uLmZyb21BcnJheShjLnJvdHEpLHZvaWQgMCE9PWMuc2NsJiZiLnNjYWxlLmZyb21BcnJheShjLnNjbCk7ZD0wO2ZvcihlPXRoaXMuZ2VvbWV0cnkuYm9uZXMubGVuZ3RoO2Q8ZTtkKyspYz10aGlzLmdlb21ldHJ5LmJvbmVzW2RdLC0xIT09Yy5wYXJlbnQmJm51bGwhPT1jLnBhcmVudCYmdm9pZCAwIT09YVtjLnBhcmVudF0/YVtjLnBhcmVudF0uYWRkKGFbZF0pOnRoaXMuYWRkKGFbZF0pfXRoaXMudXBkYXRlTWF0cml4V29ybGQoITApO3JldHVybiBhfSxiaW5kOmZ1bmN0aW9uKGEsYil7dGhpcy5za2VsZXRvbj1hO3ZvaWQgMD09PWImJih0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKSx0aGlzLnNrZWxldG9uLmNhbGN1bGF0ZUludmVyc2VzKCksYj10aGlzLm1hdHJpeFdvcmxkKTt0aGlzLmJpbmRNYXRyaXguY29weShiKTt0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmdldEludmVyc2UoYil9LHBvc2U6ZnVuY3Rpb24oKXt0aGlzLnNrZWxldG9uLnBvc2UoKX0sbm9ybWFsaXplU2tpbldlaWdodHM6ZnVuY3Rpb24oKXt2YXIgYSwKYjtpZih0aGlzLmdlb21ldHJ5JiZ0aGlzLmdlb21ldHJ5LmlzR2VvbWV0cnkpZm9yKGI9MDtiPHRoaXMuZ2VvbWV0cnkuc2tpbldlaWdodHMubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5nZW9tZXRyeS5za2luV2VpZ2h0c1tiXTthPTEvYy5sZW5ndGhNYW5oYXR0YW4oKTtJbmZpbml0eSE9PWE/Yy5tdWx0aXBseVNjYWxhcihhKTpjLnNldCgxLDAsMCwwKX1lbHNlIGlmKHRoaXMuZ2VvbWV0cnkmJnRoaXMuZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSl7dmFyIGM9bmV3IGdhLGQ9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7Zm9yKGI9MDtiPGQuY291bnQ7YisrKWMueD1kLmdldFgoYiksYy55PWQuZ2V0WShiKSxjLno9ZC5nZXRaKGIpLGMudz1kLmdldFcoYiksYT0xL2MubGVuZ3RoTWFuaGF0dGFuKCksSW5maW5pdHkhPT1hP2MubXVsdGlwbHlTY2FsYXIoYSk6Yy5zZXQoMSwwLDAsMCksZC5zZXRYWVpXKGIsYy54LGMueSxjLnosYy53KX19LHVwZGF0ZU1hdHJpeFdvcmxkOmZ1bmN0aW9uKGEpe0NhLnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZC5jYWxsKHRoaXMsCmEpOyJhdHRhY2hlZCI9PT10aGlzLmJpbmRNb2RlP3RoaXMuYmluZE1hdHJpeEludmVyc2UuZ2V0SW52ZXJzZSh0aGlzLm1hdHJpeFdvcmxkKToiZGV0YWNoZWQiPT09dGhpcy5iaW5kTW9kZT90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmdldEludmVyc2UodGhpcy5iaW5kTWF0cml4KTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuZ2VvbWV0cnksdGhpcy5tYXRlcmlhbCkpLmNvcHkodGhpcyl9fSk7aGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWi5wcm90b3R5cGUpO2hhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1oYTtoYS5wcm90b3R5cGUuaXNMaW5lQmFzaWNNYXRlcmlhbD0hMDtoYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtaLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLmNvbG9yLmNvcHkoYS5jb2xvcik7CnRoaXMubGluZXdpZHRoPWEubGluZXdpZHRoO3RoaXMubGluZWNhcD1hLmxpbmVjYXA7dGhpcy5saW5lam9pbj1hLmxpbmVqb2luO3JldHVybiB0aGlzfTt5YS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6eWEsaXNMaW5lOiEwLHJheWNhc3Q6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSixiPW5ldyBoYixjPW5ldyBHYTtyZXR1cm4gZnVuY3Rpb24oZCxlKXt2YXIgZj1kLmxpbmVQcmVjaXNpb24sZj1mKmYsZz10aGlzLmdlb21ldHJ5LGg9dGhpcy5tYXRyaXhXb3JsZDtudWxsPT09Zy5ib3VuZGluZ1NwaGVyZSYmZy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtjLmNvcHkoZy5ib3VuZGluZ1NwaGVyZSk7Yy5hcHBseU1hdHJpeDQoaCk7aWYoITEhPT1kLnJheS5pbnRlcnNlY3RzU3BoZXJlKGMpKXthLmdldEludmVyc2UoaCk7Yi5jb3B5KGQucmF5KS5hcHBseU1hdHJpeDQoYSk7dmFyIGs9bmV3IHAsbT1uZXcgcCxoPW5ldyBwLApsPW5ldyBwLHE9dGhpcyYmdGhpcy5pc0xpbmVTZWdtZW50cz8yOjE7aWYoZy5pc0J1ZmZlckdlb21ldHJ5KXt2YXIgbj1nLmluZGV4LHI9Zy5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O2lmKG51bGwhPT1uKWZvcih2YXIgbj1uLmFycmF5LGc9MCx6PW4ubGVuZ3RoLTE7Zzx6O2crPXEpe3ZhciB0PW5bZysxXTtrLmZyb21BcnJheShyLDMqbltnXSk7bS5mcm9tQXJyYXkociwzKnQpO3Q9Yi5kaXN0YW5jZVNxVG9TZWdtZW50KGssbSxsLGgpO3Q+Znx8KGwuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLHQ9ZC5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCksdDxkLm5lYXJ8fHQ+ZC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6dCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OmcsZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSkpfWVsc2UgZm9yKGc9MCx6PXIubGVuZ3RoLzMtMTtnPHo7Zys9cSlrLmZyb21BcnJheShyLAozKmcpLG0uZnJvbUFycmF5KHIsMypnKzMpLHQ9Yi5kaXN0YW5jZVNxVG9TZWdtZW50KGssbSxsLGgpLHQ+Znx8KGwuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLHQ9ZC5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCksdDxkLm5lYXJ8fHQ+ZC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6dCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OmcsZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSkpfWVsc2UgaWYoZy5pc0dlb21ldHJ5KWZvcihrPWcudmVydGljZXMsbT1rLmxlbmd0aCxnPTA7ZzxtLTE7Zys9cSl0PWIuZGlzdGFuY2VTcVRvU2VnbWVudChrW2ddLGtbZysxXSxsLGgpLHQ+Znx8KGwuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLHQ9ZC5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCksdDxkLm5lYXJ8fHQ+ZC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6dCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLAppbmRleDpnLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pKX19fSgpLGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuZ2VvbWV0cnksdGhpcy5tYXRlcmlhbCkpLmNvcHkodGhpcyl9fSk7ZGEucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZSh5YS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpkYSxpc0xpbmVTZWdtZW50czohMH0pO3BkLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoeWEucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6cGQsaXNMaW5lTG9vcDohMH0pO0xhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTtMYS5wcm90b3R5cGUuY29uc3RydWN0b3I9TGE7TGEucHJvdG90eXBlLmlzUG9pbnRzTWF0ZXJpYWw9ITA7TGEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5jb2xvci5jb3B5KGEuY29sb3IpOwp0aGlzLm1hcD1hLm1hcDt0aGlzLnNpemU9YS5zaXplO3RoaXMuc2l6ZUF0dGVudWF0aW9uPWEuc2l6ZUF0dGVudWF0aW9uO3JldHVybiB0aGlzfTtNYi5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6TWIsaXNQb2ludHM6ITAscmF5Y2FzdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBKLGI9bmV3IGhiLGM9bmV3IEdhO3JldHVybiBmdW5jdGlvbihkLGUpe2Z1bmN0aW9uIGYoYSxjKXt2YXIgZj1iLmRpc3RhbmNlU3FUb1BvaW50KGEpO2lmKGY8bCl7dmFyIGg9Yi5jbG9zZXN0UG9pbnRUb1BvaW50KGEpO2guYXBwbHlNYXRyaXg0KGspO3ZhciBtPWQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGgpO208ZC5uZWFyfHxtPmQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOm0sZGlzdGFuY2VUb1JheTpNYXRoLnNxcnQoZikscG9pbnQ6aC5jbG9uZSgpLGluZGV4OmMsZmFjZTpudWxsLG9iamVjdDpnfSl9fXZhciBnPXRoaXMsaD10aGlzLmdlb21ldHJ5LAprPXRoaXMubWF0cml4V29ybGQsbT1kLnBhcmFtcy5Qb2ludHMudGhyZXNob2xkO251bGw9PT1oLmJvdW5kaW5nU3BoZXJlJiZoLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO2MuY29weShoLmJvdW5kaW5nU3BoZXJlKTtjLmFwcGx5TWF0cml4NChrKTtjLnJhZGl1cys9bTtpZighMSE9PWQucmF5LmludGVyc2VjdHNTcGhlcmUoYykpe2EuZ2V0SW52ZXJzZShrKTtiLmNvcHkoZC5yYXkpLmFwcGx5TWF0cml4NChhKTt2YXIgbT1tLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLGw9bSptLG09bmV3IHA7aWYoaC5pc0J1ZmZlckdlb21ldHJ5KXt2YXIgcT1oLmluZGV4LGg9aC5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O2lmKG51bGwhPT1xKWZvcih2YXIgbj1xLmFycmF5LHE9MCxyPW4ubGVuZ3RoO3E8cjtxKyspe3ZhciB6PW5bcV07bS5mcm9tQXJyYXkoaCwzKnopO2YobSx6KX1lbHNlIGZvcihxPTAsbj1oLmxlbmd0aC8zO3E8bjtxKyspbS5mcm9tQXJyYXkoaCwKMypxKSxmKG0scSl9ZWxzZSBmb3IobT1oLnZlcnRpY2VzLHE9MCxuPW0ubGVuZ3RoO3E8bjtxKyspZihtW3FdLHEpfX19KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5nZW9tZXRyeSx0aGlzLm1hdGVyaWFsKSkuY29weSh0aGlzKX19KTtEYy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6RGN9KTtxZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShYLnByb3RvdHlwZSk7cWQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXFkO05iLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFgucHJvdG90eXBlKTtOYi5wcm90b3R5cGUuY29uc3RydWN0b3I9TmI7TmIucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITA7cmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWC5wcm90b3R5cGUpO3JkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yZDtFYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShYLnByb3RvdHlwZSk7CkVjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FYztFYy5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7T2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO09iLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1PYjtGYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7RmMucHJvdG90eXBlLmNvbnN0cnVjdG9yPUZjO1BiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlKTtQYi5wcm90b3R5cGUuY29uc3RydWN0b3I9UGI7R2MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO0djLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1HYztpYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7aWEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWlhO0hjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtIYy5wcm90b3R5cGUuY29uc3RydWN0b3I9SGM7UWIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaWEucHJvdG90eXBlKTsKUWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVFiO0ljLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtJYy5wcm90b3R5cGUuY29uc3RydWN0b3I9SWM7bWIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaWEucHJvdG90eXBlKTttYi5wcm90b3R5cGUuY29uc3RydWN0b3I9bWI7SmMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO0pjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1KYztSYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpYS5wcm90b3R5cGUpO1JiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1SYjtLYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7S2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPUtjO1NiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGlhLnByb3RvdHlwZSk7U2IucHJvdG90eXBlLmNvbnN0cnVjdG9yPVNiO0xjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtMYy5wcm90b3R5cGUuY29uc3RydWN0b3I9CkxjO1RiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlKTtUYi5wcm90b3R5cGUuY29uc3RydWN0b3I9VGI7TWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO01jLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1NYztVYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7VWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVViO05jLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtOYy5wcm90b3R5cGUuY29uc3RydWN0b3I9TmM7VmIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO1ZiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WYjt2YXIgemE9e2FyZWE6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEubGVuZ3RoLGM9MCxkPWItMSxlPTA7ZTxiO2Q9ZSsrKWMrPWFbZF0ueCphW2VdLnktYVtlXS54KmFbZF0ueTtyZXR1cm4uNSpjfSx0cmlhbmd1bGF0ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihhLGIpe3ZhciBjPQphLmxlbmd0aDtpZigzPmMpcmV0dXJuIG51bGw7dmFyIGQ9W10sZT1bXSxmPVtdLGcsaCxrO2lmKDA8emEuYXJlYShhKSlmb3IoaD0wO2g8YztoKyspZVtoXT1oO2Vsc2UgZm9yKGg9MDtoPGM7aCsrKWVbaF09Yy0xLWg7dmFyIG09MipjO2ZvcihoPWMtMTsyPGM7KXtpZigwPj1tLS0pe2NvbnNvbGUud2FybigiVEhSRUUuU2hhcGVVdGlsczogVW5hYmxlIHRvIHRyaWFuZ3VsYXRlIHBvbHlnb24hIGluIHRyaWFuZ3VsYXRlKCkiKTticmVha31nPWg7Yzw9ZyYmKGc9MCk7aD1nKzE7Yzw9aCYmKGg9MCk7az1oKzE7Yzw9ayYmKGs9MCk7dmFyIGw7YTp7dmFyIHEsbixyLHAsdCx5LHgsdjtxPWFbZVtnXV0ueDtuPWFbZVtnXV0ueTtyPWFbZVtoXV0ueDtwPWFbZVtoXV0ueTt0PWFbZVtrXV0ueDt5PWFbZVtrXV0ueTtpZigwPj0oci1xKSooeS1uKS0ocC1uKSoodC1xKSlsPSExO2Vsc2V7dmFyIEcsdyxPLEMsRSxGLEQsQixJLEg7Rz10LXI7dz15LXA7Tz1xLXQ7Qz1uLXk7RT1yLXE7Rj1wLW47CmZvcihsPTA7bDxjO2wrKylpZih4PWFbZVtsXV0ueCx2PWFbZVtsXV0ueSwhKHg9PT1xJiZ2PT09bnx8eD09PXImJnY9PT1wfHx4PT09dCYmdj09PXkpJiYoRD14LXEsQj12LW4sST14LXIsSD12LXAseC09dCx2LT15LEk9RypILXcqSSxEPUUqQi1GKkQsQj1PKnYtQyp4LEk+PS1OdW1iZXIuRVBTSUxPTiYmQj49LU51bWJlci5FUFNJTE9OJiZEPj0tTnVtYmVyLkVQU0lMT04pKXtsPSExO2JyZWFrIGF9bD0hMH19aWYobCl7ZC5wdXNoKFthW2VbZ11dLGFbZVtoXV0sYVtlW2tdXV0pO2YucHVzaChbZVtnXSxlW2hdLGVba11dKTtnPWg7Zm9yKGs9aCsxO2s8YztnKyssaysrKWVbZ109ZVtrXTtjLS07bT0yKmN9fXJldHVybiBiP2Y6ZH19KCksdHJpYW5ndWxhdGVTaGFwZTpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7dmFyIGI9YS5sZW5ndGg7MjxiJiZhW2ItMV0uZXF1YWxzKGFbMF0pJiZhLnBvcCgpfWZ1bmN0aW9uIGQoYSxiLGMpe3JldHVybiBhLnghPT1iLng/YS54PGIueD9hLng8PQpjLngmJmMueDw9Yi54OmIueDw9Yy54JiZjLng8PWEueDphLnk8Yi55P2EueTw9Yy55JiZjLnk8PWIueTpiLnk8PWMueSYmYy55PD1hLnl9ZnVuY3Rpb24gZShhLGIsYyxlLGYpe3ZhciBnPWIueC1hLngsaD1iLnktYS55LGs9ZS54LWMueCxtPWUueS1jLnksbD1hLngtYy54LG49YS55LWMueSxxPWgqay1nKm0sdT1oKmwtZypuO2lmKE1hdGguYWJzKHEpPk51bWJlci5FUFNJTE9OKXtpZigwPHEpe2lmKDA+dXx8dT5xKXJldHVybltdO2s9bSpsLWsqbjtpZigwPmt8fGs+cSlyZXR1cm5bXX1lbHNle2lmKDA8dXx8dTxxKXJldHVybltdO2s9bSpsLWsqbjtpZigwPGt8fGs8cSlyZXR1cm5bXX1pZigwPT09aylyZXR1cm4hZnx8MCE9PXUmJnUhPT1xP1thXTpbXTtpZihrPT09cSlyZXR1cm4hZnx8MCE9PXUmJnUhPT1xP1tiXTpbXTtpZigwPT09dSlyZXR1cm5bY107aWYodT09PXEpcmV0dXJuW2VdO2Y9ay9xO3JldHVyblt7eDphLngrZipnLHk6YS55K2YqaH1dfWlmKDAhPT11fHxtKmwhPT0KaypuKXJldHVybltdO2g9MD09PWcmJjA9PT1oO2s9MD09PWsmJjA9PT1tO2lmKGgmJmspcmV0dXJuIGEueCE9PWMueHx8YS55IT09Yy55P1tdOlthXTtpZihoKXJldHVybiBkKGMsZSxhKT9bYV06W107aWYoaylyZXR1cm4gZChhLGIsYyk/W2NdOltdOzAhPT1nPyhhLng8Yi54PyhnPWEsaz1hLngsaD1iLGE9Yi54KTooZz1iLGs9Yi54LGg9YSxhPWEueCksYy54PGUueD8oYj1jLHE9Yy54LG09ZSxjPWUueCk6KGI9ZSxxPWUueCxtPWMsYz1jLngpKTooYS55PGIueT8oZz1hLGs9YS55LGg9YixhPWIueSk6KGc9YixrPWIueSxoPWEsYT1hLnkpLGMueTxlLnk/KGI9YyxxPWMueSxtPWUsYz1lLnkpOihiPWUscT1lLnksbT1jLGM9Yy55KSk7cmV0dXJuIGs8PXE/YTxxP1tdOmE9PT1xP2Y/W106W2JdOmE8PWM/W2IsaF06W2IsbV06az5jP1tdOms9PT1jP2Y/W106W2ddOmE8PWM/W2csaF06W2csbV19ZnVuY3Rpb24gZihhLGIsYyxkKXt2YXIgZT1iLngtYS54LGY9Yi55LWEueTtiPWMueC1hLng7CmM9Yy55LWEueTt2YXIgZz1kLngtYS54O2Q9ZC55LWEueTthPWUqYy1mKmI7ZT1lKmQtZipnO3JldHVybiBNYXRoLmFicyhhKT5OdW1iZXIuRVBTSUxPTj8oYj1nKmMtZCpiLDA8YT8wPD1lJiYwPD1iOjA8PWV8fDA8PWIpOjA8ZX1jKGEpO2IuZm9yRWFjaChjKTt2YXIgZyxoLGssbSxsLHE9e307az1hLmNvbmNhdCgpO2c9MDtmb3IoaD1iLmxlbmd0aDtnPGg7ZysrKUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGssYltnXSk7Zz0wO2ZvcihoPWsubGVuZ3RoO2c8aDtnKyspbD1rW2ddLngrIjoiK2tbZ10ueSx2b2lkIDAhPT1xW2xdJiZjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlVXRpbHM6IER1cGxpY2F0ZSBwb2ludCIsbCxnKSxxW2xdPWc7Zz1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXt2YXIgZD1oLmxlbmd0aC0xLGU9YS0xOzA+ZSYmKGU9ZCk7dmFyIGc9YSsxO2c+ZCYmKGc9MCk7ZD1mKGhbYV0saFtlXSxoW2ddLGtbYl0pO2lmKCFkKXJldHVybiExO2Q9ay5sZW5ndGgtCjE7ZT1iLTE7MD5lJiYoZT1kKTtnPWIrMTtnPmQmJihnPTApO3JldHVybihkPWYoa1tiXSxrW2VdLGtbZ10saFthXSkpPyEwOiExfWZ1bmN0aW9uIGQoYSxiKXt2YXIgYyxmO2ZvcihjPTA7YzxoLmxlbmd0aDtjKyspaWYoZj1jKzEsZiU9aC5sZW5ndGgsZj1lKGEsYixoW2NdLGhbZl0sITApLDA8Zi5sZW5ndGgpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZyhhLGMpe3ZhciBkLGYsaCxrO2ZvcihkPTA7ZDxtLmxlbmd0aDtkKyspZm9yKGY9YlttW2RdXSxoPTA7aDxmLmxlbmd0aDtoKyspaWYoaz1oKzEsayU9Zi5sZW5ndGgsaz1lKGEsYyxmW2hdLGZba10sITApLDA8ay5sZW5ndGgpcmV0dXJuITA7cmV0dXJuITF9dmFyIGg9YS5jb25jYXQoKSxrLG09W10sbCxuLHEsdSxwLEM9W10sRCxCLEksSD0wO2ZvcihsPWIubGVuZ3RoO0g8bDtIKyspbS5wdXNoKEgpO0Q9MDtmb3IodmFyIEo9MiptLmxlbmd0aDswPG0ubGVuZ3RoOyl7Si0tO2lmKDA+Sil7Y29uc29sZS5sb2coIkluZmluaXRlIExvb3AhIEhvbGVzIGxlZnQ6IisKbS5sZW5ndGgrIiwgUHJvYmFibHkgSG9sZSBvdXRzaWRlIFNoYXBlISIpO2JyZWFrfWZvcihuPUQ7bjxoLmxlbmd0aDtuKyspe3E9aFtuXTtsPS0xO2ZvcihIPTA7SDxtLmxlbmd0aDtIKyspaWYodT1tW0hdLHA9cS54KyI6IitxLnkrIjoiK3Usdm9pZCAwPT09Q1twXSl7az1iW3VdO2ZvcihCPTA7QjxrLmxlbmd0aDtCKyspaWYodT1rW0JdLGMobixCKSYmIWQocSx1KSYmIWcocSx1KSl7bD1CO20uc3BsaWNlKEgsMSk7RD1oLnNsaWNlKDAsbisxKTt1PWguc2xpY2Uobik7Qj1rLnNsaWNlKGwpO0k9ay5zbGljZSgwLGwrMSk7aD1ELmNvbmNhdChCKS5jb25jYXQoSSkuY29uY2F0KHUpO0Q9bjticmVha31pZigwPD1sKWJyZWFrO0NbcF09ITB9aWYoMDw9bClicmVha319cmV0dXJuIGh9KGEsYik7dmFyIG49emEudHJpYW5ndWxhdGUoZywhMSk7Zz0wO2ZvcihoPW4ubGVuZ3RoO2c8aDtnKyspZm9yKG09bltnXSxrPTA7Mz5rO2srKylsPW1ba10ueCsiOiIrbVtrXS55LGw9cVtsXSx2b2lkIDAhPT0KbCYmKG1ba109bCk7cmV0dXJuIG4uY29uY2F0KCl9LGlzQ2xvY2tXaXNlOmZ1bmN0aW9uKGEpe3JldHVybiAwPnphLmFyZWEoYSl9fTtkYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7ZGIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWRiO0ZhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlKTtGYS5wcm90b3R5cGUuY29uc3RydWN0b3I9RmE7RmEucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLGE9YT9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhLmFycmF5KTpbXSxiPXRoaXMuZ2V0QXR0cmlidXRlKCJ1diIpLGI9Yj9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChiLmFycmF5KTpbXSxjPXRoaXMuaW5kZXgsYz1jP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGMuYXJyYXkpOltdO3JldHVybntwb3NpdGlvbjphLHV2OmIsaW5kZXg6Y319O0ZhLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9CmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5sZW5ndGg7Yi5hcnJheXM9dGhpcy5nZXRBcnJheXMoKTtmb3IodmFyIGQ9MDtkPGM7ZCsrKXRoaXMuYWRkU2hhcGUoYVtkXSxiKTt0aGlzLnNldEluZGV4KGIuYXJyYXlzLmluZGV4KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGIuYXJyYXlzLnBvc2l0aW9uLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKGIuYXJyYXlzLnV2LDIpKX07RmEucHJvdG90eXBlLmFkZFNoYXBlPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIsYyl7Ynx8Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QiKTtyZXR1cm4gYi5jbG9uZSgpLm11bHRpcGx5U2NhbGFyKGMpLmFkZChhKX1mdW5jdGlvbiBkKGEsYixjKXt2YXIgZCxlLGY7ZT1hLngtYi54O2Y9YS55LWIueTtkPWMueC1hLng7dmFyIGc9Yy55LWEueSxoPWUqZStmKmY7aWYoTWF0aC5hYnMoZSpnLWYqZCk+TnVtYmVyLkVQU0lMT04pe3ZhciBrPQpNYXRoLnNxcnQoaCksbT1NYXRoLnNxcnQoZCpkK2cqZyksaD1iLngtZi9rO2I9Yi55K2UvaztnPSgoYy54LWcvbS1oKSpnLShjLnkrZC9tLWIpKmQpLyhlKmctZipkKTtkPWgrZSpnLWEueDtlPWIrZipnLWEueTtmPWQqZCtlKmU7aWYoMj49ZilyZXR1cm4gbmV3IEQoZCxlKTtmPU1hdGguc3FydChmLzIpfWVsc2UgYT0hMSxlPk51bWJlci5FUFNJTE9OP2Q+TnVtYmVyLkVQU0lMT04mJihhPSEwKTplPC1OdW1iZXIuRVBTSUxPTj9kPC1OdW1iZXIuRVBTSUxPTiYmKGE9ITApOk1hdGguc2lnbihmKT09PU1hdGguc2lnbihnKSYmKGE9ITApLGE/KGQ9LWYsZj1NYXRoLnNxcnQoaCkpOihkPWUsZT1mLGY9TWF0aC5zcXJ0KGgvMikpO3JldHVybiBuZXcgRChkL2YsZS9mKX1mdW5jdGlvbiBlKGEsYil7dmFyIGMsZDtmb3IoTj1hLmxlbmd0aDswPD0tLU47KXtjPU47ZD1OLTE7MD5kJiYoZD1hLmxlbmd0aC0xKTt2YXIgZSxmPUcrMip5O2ZvcihlPTA7ZTxmO2UrKyl7dmFyIGc9ZGEqZSxtPWRhKgooZSsxKSxuPWIrZCtnLHE9YitkK20sbT1iK2MrbTtoKGIrYytnKTtoKG4pO2gobSk7aChuKTtoKHEpO2gobSk7Zz1sLmxlbmd0aC8zO2c9RS5nZW5lcmF0ZVNpZGVXYWxsVVYoWixsLGctNixnLTMsZy0yLGctMSk7ayhnWzBdKTtrKGdbMV0pO2soZ1szXSk7ayhnWzFdKTtrKGdbMl0pO2soZ1szXSl9fX1mdW5jdGlvbiBmKGEsYixjKXtyLnB1c2goYSk7ci5wdXNoKGIpO3IucHVzaChjKX1mdW5jdGlvbiBnKGEsYixjKXtoKGEpO2goYik7aChjKTthPWwubGVuZ3RoLzM7YT1FLmdlbmVyYXRlVG9wVVYoWixsLGEtMyxhLTIsYS0xKTtrKGFbMF0pO2soYVsxXSk7ayhhWzJdKX1mdW5jdGlvbiBoKGEpe3EucHVzaChsLmxlbmd0aC8zKTtsLnB1c2goclszKmErMF0pO2wucHVzaChyWzMqYSsxXSk7bC5wdXNoKHJbMyphKzJdKX1mdW5jdGlvbiBrKGEpe24ucHVzaChhLngpO24ucHVzaChhLnkpfXZhciBtPWIuYXJyYXlzP2IuYXJyYXlzOnRoaXMuZ2V0QXJyYXlzKCksbD1tLnBvc2l0aW9uLHE9Cm0uaW5kZXgsbj1tLnV2LHI9W10sbT12b2lkIDAhPT1iLmFtb3VudD9iLmFtb3VudDoxMDAsej12b2lkIDAhPT1iLmJldmVsVGhpY2tuZXNzP2IuYmV2ZWxUaGlja25lc3M6Nix0PXZvaWQgMCE9PWIuYmV2ZWxTaXplP2IuYmV2ZWxTaXplOnotMix5PXZvaWQgMCE9PWIuYmV2ZWxTZWdtZW50cz9iLmJldmVsU2VnbWVudHM6Myx4PXZvaWQgMCE9PWIuYmV2ZWxFbmFibGVkP2IuYmV2ZWxFbmFibGVkOiEwLHY9dm9pZCAwIT09Yi5jdXJ2ZVNlZ21lbnRzP2IuY3VydmVTZWdtZW50czoxMixHPXZvaWQgMCE9PWIuc3RlcHM/Yi5zdGVwczoxLHc9Yi5leHRydWRlUGF0aCxCLEk9ITEsRT12b2lkIDAhPT1iLlVWR2VuZXJhdG9yP2IuVVZHZW5lcmF0b3I6ZGIuV29ybGRVVkdlbmVyYXRvcixGLEgsUixKO3cmJihCPXcuZ2V0U3BhY2VkUG9pbnRzKEcpLEk9ITAseD0hMSxGPXZvaWQgMCE9PWIuZnJhbWVzP2IuZnJhbWVzOncuY29tcHV0ZUZyZW5ldEZyYW1lcyhHLCExKSxIPW5ldyBwLFI9bmV3IHAsCko9bmV3IHApO3h8fCh0PXo9eT0wKTt2YXIgTSxMLFYsWj10aGlzLHc9YS5leHRyYWN0UG9pbnRzKHYpLHY9dy5zaGFwZSxQPXcuaG9sZXM7aWYodz0hemEuaXNDbG9ja1dpc2Uodikpe3Y9di5yZXZlcnNlKCk7TD0wO2ZvcihWPVAubGVuZ3RoO0w8VjtMKyspTT1QW0xdLHphLmlzQ2xvY2tXaXNlKE0pJiYoUFtMXT1NLnJldmVyc2UoKSk7dz0hMX12YXIgSz16YS50cmlhbmd1bGF0ZVNoYXBlKHYsUCksVz12O0w9MDtmb3IoVj1QLmxlbmd0aDtMPFY7TCsrKU09UFtMXSx2PXYuY29uY2F0KE0pO3ZhciBiYSxULFEsWSxVLGRhPXYubGVuZ3RoLFgsZ2E9Sy5sZW5ndGgsdz1bXSxOPTA7UT1XLmxlbmd0aDtiYT1RLTE7Zm9yKFQ9TisxO048UTtOKyssYmErKyxUKyspYmE9PT1RJiYoYmE9MCksVD09PVEmJihUPTApLHdbTl09ZChXW05dLFdbYmFdLFdbVF0pO3ZhciBpYT1bXSxrYSxoYT13LmNvbmNhdCgpO0w9MDtmb3IoVj1QLmxlbmd0aDtMPFY7TCsrKXtNPVBbTF07a2E9W107Tj0wO1E9TS5sZW5ndGg7CmJhPVEtMTtmb3IoVD1OKzE7TjxRO04rKyxiYSsrLFQrKyliYT09PVEmJihiYT0wKSxUPT09USYmKFQ9MCksa2FbTl09ZChNW05dLE1bYmFdLE1bVF0pO2lhLnB1c2goa2EpO2hhPWhhLmNvbmNhdChrYSl9Zm9yKGJhPTA7YmE8eTtiYSsrKXtRPWJhL3k7WT16Kk1hdGguY29zKFEqTWF0aC5QSS8yKTtUPXQqTWF0aC5zaW4oUSpNYXRoLlBJLzIpO049MDtmb3IoUT1XLmxlbmd0aDtOPFE7TisrKVU9YyhXW05dLHdbTl0sVCksZihVLngsVS55LC1ZKTtMPTA7Zm9yKFY9UC5sZW5ndGg7TDxWO0wrKylmb3IoTT1QW0xdLGthPWlhW0xdLE49MCxRPU0ubGVuZ3RoO048UTtOKyspVT1jKE1bTl0sa2FbTl0sVCksZihVLngsVS55LC1ZKX1UPXQ7Zm9yKE49MDtOPGRhO04rKylVPXg/Yyh2W05dLGhhW05dLFQpOnZbTl0sST8oUi5jb3B5KEYubm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIoVS54KSxILmNvcHkoRi5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKFUueSksSi5jb3B5KEJbMF0pLmFkZChSKS5hZGQoSCksCmYoSi54LEoueSxKLnopKTpmKFUueCxVLnksMCk7Zm9yKFE9MTtRPD1HO1ErKylmb3IoTj0wO048ZGE7TisrKVU9eD9jKHZbTl0saGFbTl0sVCk6dltOXSxJPyhSLmNvcHkoRi5ub3JtYWxzW1FdKS5tdWx0aXBseVNjYWxhcihVLngpLEguY29weShGLmJpbm9ybWFsc1tRXSkubXVsdGlwbHlTY2FsYXIoVS55KSxKLmNvcHkoQltRXSkuYWRkKFIpLmFkZChIKSxmKEoueCxKLnksSi56KSk6ZihVLngsVS55LG0vRypRKTtmb3IoYmE9eS0xOzA8PWJhO2JhLS0pe1E9YmEveTtZPXoqTWF0aC5jb3MoUSpNYXRoLlBJLzIpO1Q9dCpNYXRoLnNpbihRKk1hdGguUEkvMik7Tj0wO2ZvcihRPVcubGVuZ3RoO048UTtOKyspVT1jKFdbTl0sd1tOXSxUKSxmKFUueCxVLnksbStZKTtMPTA7Zm9yKFY9UC5sZW5ndGg7TDxWO0wrKylmb3IoTT1QW0xdLGthPWlhW0xdLE49MCxRPU0ubGVuZ3RoO048UTtOKyspVT1jKE1bTl0sa2FbTl0sVCksST9mKFUueCxVLnkrQltHLTFdLnksQltHLTFdLngrWSk6ZihVLngsClUueSxtK1kpfShmdW5jdGlvbigpe3ZhciBhPWwubGVuZ3RoLzM7aWYoeCl7dmFyIGM9MCpkYTtmb3IoTj0wO048Z2E7TisrKVg9S1tOXSxnKFhbMl0rYyxYWzFdK2MsWFswXStjKTtjPWRhKihHKzIqeSk7Zm9yKE49MDtOPGdhO04rKylYPUtbTl0sZyhYWzBdK2MsWFsxXStjLFhbMl0rYyl9ZWxzZXtmb3IoTj0wO048Z2E7TisrKVg9S1tOXSxnKFhbMl0sWFsxXSxYWzBdKTtmb3IoTj0wO048Z2E7TisrKVg9S1tOXSxnKFhbMF0rZGEqRyxYWzFdK2RhKkcsWFsyXStkYSpHKX1aLmFkZEdyb3VwKGEsbC5sZW5ndGgvMy1hLHZvaWQgMCE9PWIubWF0ZXJpYWw/Yi5tYXRlcmlhbDowKX0pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9bC5sZW5ndGgvMyxjPTA7ZShXLGMpO2MrPVcubGVuZ3RoO0w9MDtmb3IoVj1QLmxlbmd0aDtMPFY7TCsrKU09UFtMXSxlKE0sYyksYys9TS5sZW5ndGg7Wi5hZGRHcm91cChhLGwubGVuZ3RoLzMtYSx2b2lkIDAhPT1iLmV4dHJ1ZGVNYXRlcmlhbD9iLmV4dHJ1ZGVNYXRlcmlhbDoKMSl9KSgpO2IuYXJyYXlzfHwodGhpcy5zZXRJbmRleChxKSx0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGwsMykpLHRoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IEMoYi5hcnJheXMudXYsMikpKX07ZGIuV29ybGRVVkdlbmVyYXRvcj17Z2VuZXJhdGVUb3BVVjpmdW5jdGlvbihhLGIsYyxkLGUpe2E9YlszKmRdO2Q9YlszKmQrMV07dmFyIGY9YlszKmVdO2U9YlszKmUrMV07cmV0dXJuW25ldyBEKGJbMypjXSxiWzMqYysxXSksbmV3IEQoYSxkKSxuZXcgRChmLGUpXX0sZ2VuZXJhdGVTaWRlV2FsbFVWOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXthPWJbMypjXTt2YXIgZz1iWzMqYysxXTtjPWJbMypjKzJdO3ZhciBoPWJbMypkXSxrPWJbMypkKzFdO2Q9YlszKmQrMl07dmFyIG09YlszKmVdLGw9YlszKmUrMV07ZT1iWzMqZSsyXTt2YXIgcT1iWzMqZl0sbj1iWzMqZisxXTtiPWJbMypmKzJdO3JldHVybi4wMT5NYXRoLmFicyhnLWspP1tuZXcgRChhLDEtYyksbmV3IEQoaCwKMS1kKSxuZXcgRChtLDEtZSksbmV3IEQocSwxLWIpXTpbbmV3IEQoZywxLWMpLG5ldyBEKGssMS1kKSxuZXcgRChsLDEtZSksbmV3IEQobiwxLWIpXX19O09jLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtPYy5wcm90b3R5cGUuY29uc3RydWN0b3I9T2M7V2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRmEucHJvdG90eXBlKTtXYi5wcm90b3R5cGUuY29uc3RydWN0b3I9V2I7UGMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO1BjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1QYztuYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7bmIucHJvdG90eXBlLmNvbnN0cnVjdG9yPW5iO1FjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtRYy5wcm90b3R5cGUuY29uc3RydWN0b3I9UWM7WGIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO1hiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1YYjtSYy5wcm90b3R5cGU9Ck9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO1JjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1SYztZYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7WWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVliO1piLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtaYi5wcm90b3R5cGUuY29uc3RydWN0b3I9WmI7JGIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpOyRiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0kYjthYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7YWMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWFjO29iLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtvYi5wcm90b3R5cGUuY29uc3RydWN0b3I9b2I7V2EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO1dhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1XYTtTYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShvYi5wcm90b3R5cGUpOwpTYy5wcm90b3R5cGUuY29uc3RydWN0b3I9U2M7VGMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoV2EucHJvdG90eXBlKTtUYy5wcm90b3R5cGUuY29uc3RydWN0b3I9VGM7VWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO1VjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1VYztiYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7YmMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWJjO3ZhciBNYT1PYmplY3QuZnJlZXplKHtXaXJlZnJhbWVHZW9tZXRyeTpPYixQYXJhbWV0cmljR2VvbWV0cnk6RmMsUGFyYW1ldHJpY0J1ZmZlckdlb21ldHJ5OlBiLFRldHJhaGVkcm9uR2VvbWV0cnk6SGMsVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeTpRYixPY3RhaGVkcm9uR2VvbWV0cnk6SWMsT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5Om1iLEljb3NhaGVkcm9uR2VvbWV0cnk6SmMsSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeTpSYixEb2RlY2FoZWRyb25HZW9tZXRyeTpLYywKRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnk6U2IsUG9seWhlZHJvbkdlb21ldHJ5OkdjLFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeTppYSxUdWJlR2VvbWV0cnk6TGMsVHViZUJ1ZmZlckdlb21ldHJ5OlRiLFRvcnVzS25vdEdlb21ldHJ5Ok1jLFRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5OlViLFRvcnVzR2VvbWV0cnk6TmMsVG9ydXNCdWZmZXJHZW9tZXRyeTpWYixUZXh0R2VvbWV0cnk6T2MsVGV4dEJ1ZmZlckdlb21ldHJ5OldiLFNwaGVyZUdlb21ldHJ5OlBjLFNwaGVyZUJ1ZmZlckdlb21ldHJ5Om5iLFJpbmdHZW9tZXRyeTpRYyxSaW5nQnVmZmVyR2VvbWV0cnk6WGIsUGxhbmVHZW9tZXRyeTp4YyxQbGFuZUJ1ZmZlckdlb21ldHJ5OmxiLExhdGhlR2VvbWV0cnk6UmMsTGF0aGVCdWZmZXJHZW9tZXRyeTpZYixTaGFwZUdlb21ldHJ5OlpiLFNoYXBlQnVmZmVyR2VvbWV0cnk6JGIsRXh0cnVkZUdlb21ldHJ5OmRiLEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTpGYSxFZGdlc0dlb21ldHJ5OmFjLApDb25lR2VvbWV0cnk6U2MsQ29uZUJ1ZmZlckdlb21ldHJ5OlRjLEN5bGluZGVyR2VvbWV0cnk6b2IsQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeTpXYSxDaXJjbGVHZW9tZXRyeTpVYyxDaXJjbGVCdWZmZXJHZW9tZXRyeTpiYyxCb3hHZW9tZXRyeTpJYixCb3hCdWZmZXJHZW9tZXRyeTprYn0pO2NjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVhLnByb3RvdHlwZSk7Y2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPWNjO2NjLnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO2RjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVhLnByb3RvdHlwZSk7ZGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWRjO2RjLnByb3RvdHlwZS5pc1Jhd1NoYWRlck1hdGVyaWFsPSEwO1JhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTtSYS5wcm90b3R5cGUuY29uc3RydWN0b3I9UmE7UmEucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw9ITA7UmEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsCmEpO3RoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9O3RoaXMuY29sb3IuY29weShhLmNvbG9yKTt0aGlzLnJvdWdobmVzcz1hLnJvdWdobmVzczt0aGlzLm1ldGFsbmVzcz1hLm1ldGFsbmVzczt0aGlzLm1hcD1hLm1hcDt0aGlzLmxpZ2h0TWFwPWEubGlnaHRNYXA7dGhpcy5saWdodE1hcEludGVuc2l0eT1hLmxpZ2h0TWFwSW50ZW5zaXR5O3RoaXMuYW9NYXA9YS5hb01hcDt0aGlzLmFvTWFwSW50ZW5zaXR5PWEuYW9NYXBJbnRlbnNpdHk7dGhpcy5lbWlzc2l2ZS5jb3B5KGEuZW1pc3NpdmUpO3RoaXMuZW1pc3NpdmVNYXA9YS5lbWlzc2l2ZU1hcDt0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PWEuZW1pc3NpdmVJbnRlbnNpdHk7dGhpcy5idW1wTWFwPWEuYnVtcE1hcDt0aGlzLmJ1bXBTY2FsZT1hLmJ1bXBTY2FsZTt0aGlzLm5vcm1hbE1hcD1hLm5vcm1hbE1hcDt0aGlzLm5vcm1hbFNjYWxlLmNvcHkoYS5ub3JtYWxTY2FsZSk7dGhpcy5kaXNwbGFjZW1lbnRNYXA9YS5kaXNwbGFjZW1lbnRNYXA7CnRoaXMuZGlzcGxhY2VtZW50U2NhbGU9YS5kaXNwbGFjZW1lbnRTY2FsZTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9YS5kaXNwbGFjZW1lbnRCaWFzO3RoaXMucm91Z2huZXNzTWFwPWEucm91Z2huZXNzTWFwO3RoaXMubWV0YWxuZXNzTWFwPWEubWV0YWxuZXNzTWFwO3RoaXMuYWxwaGFNYXA9YS5hbHBoYU1hcDt0aGlzLmVudk1hcD1hLmVudk1hcDt0aGlzLmVudk1hcEludGVuc2l0eT1hLmVudk1hcEludGVuc2l0eTt0aGlzLnJlZnJhY3Rpb25SYXRpbz1hLnJlZnJhY3Rpb25SYXRpbzt0aGlzLndpcmVmcmFtZT1hLndpcmVmcmFtZTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD1hLndpcmVmcmFtZUxpbmV3aWR0aDt0aGlzLndpcmVmcmFtZUxpbmVjYXA9YS53aXJlZnJhbWVMaW5lY2FwO3RoaXMud2lyZWZyYW1lTGluZWpvaW49YS53aXJlZnJhbWVMaW5lam9pbjt0aGlzLnNraW5uaW5nPWEuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9YS5tb3JwaFRhcmdldHM7dGhpcy5tb3JwaE5vcm1hbHM9CmEubW9ycGhOb3JtYWxzO3JldHVybiB0aGlzfTtwYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSYS5wcm90b3R5cGUpO3BiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1wYjtwYi5wcm90b3R5cGUuaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD0hMDtwYi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtSYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5kZWZpbmVzPXtQSFlTSUNBTDoiIn07dGhpcy5yZWZsZWN0aXZpdHk9YS5yZWZsZWN0aXZpdHk7dGhpcy5jbGVhckNvYXQ9YS5jbGVhckNvYXQ7dGhpcy5jbGVhckNvYXRSb3VnaG5lc3M9YS5jbGVhckNvYXRSb3VnaG5lc3M7cmV0dXJuIHRoaXN9O3RhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTt0YS5wcm90b3R5cGUuY29uc3RydWN0b3I9dGE7dGEucHJvdG90eXBlLmlzTWVzaFBob25nTWF0ZXJpYWw9ITA7dGEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsCmEpO3RoaXMuY29sb3IuY29weShhLmNvbG9yKTt0aGlzLnNwZWN1bGFyLmNvcHkoYS5zcGVjdWxhcik7dGhpcy5zaGluaW5lc3M9YS5zaGluaW5lc3M7dGhpcy5tYXA9YS5tYXA7dGhpcy5saWdodE1hcD1hLmxpZ2h0TWFwO3RoaXMubGlnaHRNYXBJbnRlbnNpdHk9YS5saWdodE1hcEludGVuc2l0eTt0aGlzLmFvTWFwPWEuYW9NYXA7dGhpcy5hb01hcEludGVuc2l0eT1hLmFvTWFwSW50ZW5zaXR5O3RoaXMuZW1pc3NpdmUuY29weShhLmVtaXNzaXZlKTt0aGlzLmVtaXNzaXZlTWFwPWEuZW1pc3NpdmVNYXA7dGhpcy5lbWlzc2l2ZUludGVuc2l0eT1hLmVtaXNzaXZlSW50ZW5zaXR5O3RoaXMuYnVtcE1hcD1hLmJ1bXBNYXA7dGhpcy5idW1wU2NhbGU9YS5idW1wU2NhbGU7dGhpcy5ub3JtYWxNYXA9YS5ub3JtYWxNYXA7dGhpcy5ub3JtYWxTY2FsZS5jb3B5KGEubm9ybWFsU2NhbGUpO3RoaXMuZGlzcGxhY2VtZW50TWFwPWEuZGlzcGxhY2VtZW50TWFwO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9CmEuZGlzcGxhY2VtZW50U2NhbGU7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPWEuZGlzcGxhY2VtZW50Qmlhczt0aGlzLnNwZWN1bGFyTWFwPWEuc3BlY3VsYXJNYXA7dGhpcy5hbHBoYU1hcD1hLmFscGhhTWFwO3RoaXMuZW52TWFwPWEuZW52TWFwO3RoaXMuY29tYmluZT1hLmNvbWJpbmU7dGhpcy5yZWZsZWN0aXZpdHk9YS5yZWZsZWN0aXZpdHk7dGhpcy5yZWZyYWN0aW9uUmF0aW89YS5yZWZyYWN0aW9uUmF0aW87dGhpcy53aXJlZnJhbWU9YS53aXJlZnJhbWU7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9YS53aXJlZnJhbWVMaW5ld2lkdGg7dGhpcy53aXJlZnJhbWVMaW5lY2FwPWEud2lyZWZyYW1lTGluZWNhcDt0aGlzLndpcmVmcmFtZUxpbmVqb2luPWEud2lyZWZyYW1lTGluZWpvaW47dGhpcy5za2lubmluZz1hLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWEubW9ycGhUYXJnZXRzO3RoaXMubW9ycGhOb3JtYWxzPWEubW9ycGhOb3JtYWxzO3JldHVybiB0aGlzfTtxYi5wcm90b3R5cGU9Ck9iamVjdC5jcmVhdGUodGEucHJvdG90eXBlKTtxYi5wcm90b3R5cGUuY29uc3RydWN0b3I9cWI7cWIucHJvdG90eXBlLmlzTWVzaFRvb25NYXRlcmlhbD0hMDtxYi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXt0YS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5ncmFkaWVudE1hcD1hLmdyYWRpZW50TWFwO3JldHVybiB0aGlzfTtyYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShaLnByb3RvdHlwZSk7cmIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXJiO3JiLnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbD0hMDtyYi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtaLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLmJ1bXBNYXA9YS5idW1wTWFwO3RoaXMuYnVtcFNjYWxlPWEuYnVtcFNjYWxlO3RoaXMubm9ybWFsTWFwPWEubm9ybWFsTWFwO3RoaXMubm9ybWFsU2NhbGUuY29weShhLm5vcm1hbFNjYWxlKTt0aGlzLmRpc3BsYWNlbWVudE1hcD1hLmRpc3BsYWNlbWVudE1hcDsKdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT1hLmRpc3BsYWNlbWVudFNjYWxlO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz1hLmRpc3BsYWNlbWVudEJpYXM7dGhpcy53aXJlZnJhbWU9YS53aXJlZnJhbWU7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9YS53aXJlZnJhbWVMaW5ld2lkdGg7dGhpcy5za2lubmluZz1hLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWEubW9ycGhUYXJnZXRzO3RoaXMubW9ycGhOb3JtYWxzPWEubW9ycGhOb3JtYWxzO3JldHVybiB0aGlzfTtzYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShaLnByb3RvdHlwZSk7c2IucHJvdG90eXBlLmNvbnN0cnVjdG9yPXNiO3NiLnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITA7c2IucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5jb2xvci5jb3B5KGEuY29sb3IpO3RoaXMubWFwPWEubWFwO3RoaXMubGlnaHRNYXA9YS5saWdodE1hcDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PQphLmxpZ2h0TWFwSW50ZW5zaXR5O3RoaXMuYW9NYXA9YS5hb01hcDt0aGlzLmFvTWFwSW50ZW5zaXR5PWEuYW9NYXBJbnRlbnNpdHk7dGhpcy5lbWlzc2l2ZS5jb3B5KGEuZW1pc3NpdmUpO3RoaXMuZW1pc3NpdmVNYXA9YS5lbWlzc2l2ZU1hcDt0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PWEuZW1pc3NpdmVJbnRlbnNpdHk7dGhpcy5zcGVjdWxhck1hcD1hLnNwZWN1bGFyTWFwO3RoaXMuYWxwaGFNYXA9YS5hbHBoYU1hcDt0aGlzLmVudk1hcD1hLmVudk1hcDt0aGlzLmNvbWJpbmU9YS5jb21iaW5lO3RoaXMucmVmbGVjdGl2aXR5PWEucmVmbGVjdGl2aXR5O3RoaXMucmVmcmFjdGlvblJhdGlvPWEucmVmcmFjdGlvblJhdGlvO3RoaXMud2lyZWZyYW1lPWEud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWEud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMud2lyZWZyYW1lTGluZWNhcD1hLndpcmVmcmFtZUxpbmVjYXA7dGhpcy53aXJlZnJhbWVMaW5lam9pbj1hLndpcmVmcmFtZUxpbmVqb2luOwp0aGlzLnNraW5uaW5nPWEuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9YS5tb3JwaFRhcmdldHM7dGhpcy5tb3JwaE5vcm1hbHM9YS5tb3JwaE5vcm1hbHM7cmV0dXJuIHRoaXN9O3RiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTt0Yi5wcm90b3R5cGUuY29uc3RydWN0b3I9dGI7dGIucHJvdG90eXBlLmlzTGluZURhc2hlZE1hdGVyaWFsPSEwO3RiLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGEpe1oucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMuY29sb3IuY29weShhLmNvbG9yKTt0aGlzLmxpbmV3aWR0aD1hLmxpbmV3aWR0aDt0aGlzLnNjYWxlPWEuc2NhbGU7dGhpcy5kYXNoU2l6ZT1hLmRhc2hTaXplO3RoaXMuZ2FwU2l6ZT1hLmdhcFNpemU7cmV0dXJuIHRoaXN9O3ZhciBsZz1PYmplY3QuZnJlZXplKHtTaGFkb3dNYXRlcmlhbDpjYyxTcHJpdGVNYXRlcmlhbDpjYixSYXdTaGFkZXJNYXRlcmlhbDpkYyxTaGFkZXJNYXRlcmlhbDpFYSxQb2ludHNNYXRlcmlhbDpMYSwKTWVzaFBoeXNpY2FsTWF0ZXJpYWw6cGIsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6UmEsTWVzaFBob25nTWF0ZXJpYWw6dGEsTWVzaFRvb25NYXRlcmlhbDpxYixNZXNoTm9ybWFsTWF0ZXJpYWw6cmIsTWVzaExhbWJlcnRNYXRlcmlhbDpzYixNZXNoRGVwdGhNYXRlcmlhbDokYSxNZXNoQmFzaWNNYXRlcmlhbDpOYSxMaW5lRGFzaGVkTWF0ZXJpYWw6dGIsTGluZUJhc2ljTWF0ZXJpYWw6aGEsTWF0ZXJpYWw6Wn0pLGhkPXtlbmFibGVkOiExLGZpbGVzOnt9LGFkZDpmdW5jdGlvbihhLGIpeyExIT09dGhpcy5lbmFibGVkJiYodGhpcy5maWxlc1thXT1iKX0sZ2V0OmZ1bmN0aW9uKGEpe2lmKCExIT09dGhpcy5lbmFibGVkKXJldHVybiB0aGlzLmZpbGVzW2FdfSxyZW1vdmU6ZnVuY3Rpb24oYSl7ZGVsZXRlIHRoaXMuZmlsZXNbYV19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5maWxlcz17fX19LEFhPW5ldyBaZDtPYmplY3QuYXNzaWduKHVhLnByb3RvdHlwZSx7bG9hZDpmdW5jdGlvbihhLGIsCmMsZCl7dm9pZCAwPT09YSYmKGE9IiIpO3ZvaWQgMCE9PXRoaXMucGF0aCYmKGE9dGhpcy5wYXRoK2EpO3ZhciBlPXRoaXMsZj1oZC5nZXQoYSk7aWYodm9pZCAwIT09ZilyZXR1cm4gZS5tYW5hZ2VyLml0ZW1TdGFydChhKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YiYmYihmKTtlLm1hbmFnZXIuaXRlbUVuZChhKX0sMCksZjt2YXIgZz1hLm1hdGNoKC9eZGF0YTooLio/KSg7YmFzZTY0KT8sKC4qKSQvKTtpZihnKXt2YXIgaD1nWzFdLGs9ISFnWzJdLGc9Z1szXSxnPXdpbmRvdy5kZWNvZGVVUklDb21wb25lbnQoZyk7ayYmKGc9d2luZG93LmF0b2IoZykpO3RyeXt2YXIgbSxsPSh0aGlzLnJlc3BvbnNlVHlwZXx8IiIpLnRvTG93ZXJDYXNlKCk7c3dpdGNoKGwpe2Nhc2UgImFycmF5YnVmZmVyIjpjYXNlICJibG9iIjptPW5ldyBBcnJheUJ1ZmZlcihnLmxlbmd0aCk7Zm9yKHZhciBxPW5ldyBVaW50OEFycmF5KG0pLGs9MDtrPGcubGVuZ3RoO2srKylxW2tdPWcuY2hhckNvZGVBdChrKTsKImJsb2IiPT09bCYmKG09bmV3IEJsb2IoW21dLHt0eXBlOmh9KSk7YnJlYWs7Y2FzZSAiZG9jdW1lbnQiOm09KG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhnLGgpO2JyZWFrO2Nhc2UgImpzb24iOm09SlNPTi5wYXJzZShnKTticmVhaztkZWZhdWx0Om09Z313aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2ImJmIobSk7ZS5tYW5hZ2VyLml0ZW1FbmQoYSl9LDApfWNhdGNoKHApe3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZCYmZChwKTtlLm1hbmFnZXIuaXRlbUVuZChhKTtlLm1hbmFnZXIuaXRlbUVycm9yKGEpfSwwKX19ZWxzZXt2YXIgbj1uZXcgWE1MSHR0cFJlcXVlc3Q7bi5vcGVuKCJHRVQiLGEsITApO24uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oYyl7dmFyIGY9Yy50YXJnZXQucmVzcG9uc2U7aGQuYWRkKGEsZik7MjAwPT09dGhpcy5zdGF0dXM/KGImJmIoZiksZS5tYW5hZ2VyLml0ZW1FbmQoYSkpOjA9PT10aGlzLnN0YXR1cz8oY29uc29sZS53YXJuKCJUSFJFRS5GaWxlTG9hZGVyOiBIVFRQIFN0YXR1cyAwIHJlY2VpdmVkLiIpLApiJiZiKGYpLGUubWFuYWdlci5pdGVtRW5kKGEpKTooZCYmZChjKSxlLm1hbmFnZXIuaXRlbUVuZChhKSxlLm1hbmFnZXIuaXRlbUVycm9yKGEpKX0sITEpO3ZvaWQgMCE9PWMmJm4uYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGZ1bmN0aW9uKGEpe2MoYSl9LCExKTtuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihiKXtkJiZkKGIpO2UubWFuYWdlci5pdGVtRW5kKGEpO2UubWFuYWdlci5pdGVtRXJyb3IoYSl9LCExKTt2b2lkIDAhPT10aGlzLnJlc3BvbnNlVHlwZSYmKG4ucmVzcG9uc2VUeXBlPXRoaXMucmVzcG9uc2VUeXBlKTt2b2lkIDAhPT10aGlzLndpdGhDcmVkZW50aWFscyYmKG4ud2l0aENyZWRlbnRpYWxzPXRoaXMud2l0aENyZWRlbnRpYWxzKTtuLm92ZXJyaWRlTWltZVR5cGUmJm4ub3ZlcnJpZGVNaW1lVHlwZSh2b2lkIDAhPT10aGlzLm1pbWVUeXBlP3RoaXMubWltZVR5cGU6InRleHQvcGxhaW4iKTtmb3IoaCBpbiB0aGlzLnJlcXVlc3RIZWFkZXIpbi5zZXRSZXF1ZXN0SGVhZGVyKGgsCnRoaXMucmVxdWVzdEhlYWRlcltoXSk7bi5zZW5kKG51bGwpfWUubWFuYWdlci5pdGVtU3RhcnQoYSk7cmV0dXJuIG59LHNldFBhdGg6ZnVuY3Rpb24oYSl7dGhpcy5wYXRoPWE7cmV0dXJuIHRoaXN9LHNldFJlc3BvbnNlVHlwZTpmdW5jdGlvbihhKXt0aGlzLnJlc3BvbnNlVHlwZT1hO3JldHVybiB0aGlzfSxzZXRXaXRoQ3JlZGVudGlhbHM6ZnVuY3Rpb24oYSl7dGhpcy53aXRoQ3JlZGVudGlhbHM9YTtyZXR1cm4gdGhpc30sc2V0TWltZVR5cGU6ZnVuY3Rpb24oYSl7dGhpcy5taW1lVHlwZT1hO3JldHVybiB0aGlzfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEpe3RoaXMucmVxdWVzdEhlYWRlcj1hO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oUWUucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGUoZSl7ay5sb2FkKGFbZV0sZnVuY3Rpb24oYSl7YT1mLl9wYXJzZXIoYSwhMCk7Z1tlXT17d2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHQsCmZvcm1hdDphLmZvcm1hdCxtaXBtYXBzOmEubWlwbWFwc307bSs9MTs2PT09bSYmKDE9PT1hLm1pcG1hcENvdW50JiYoaC5taW5GaWx0ZXI9MTAwNiksaC5mb3JtYXQ9YS5mb3JtYXQsaC5uZWVkc1VwZGF0ZT0hMCxiJiZiKGgpKX0sYyxkKX12YXIgZj10aGlzLGc9W10saD1uZXcgTmI7aC5pbWFnZT1nO3ZhciBrPW5ldyB1YSh0aGlzLm1hbmFnZXIpO2suc2V0UGF0aCh0aGlzLnBhdGgpO2suc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpO2lmKEFycmF5LmlzQXJyYXkoYSkpZm9yKHZhciBtPTAsbD0wLHE9YS5sZW5ndGg7bDxxOysrbCllKGwpO2Vsc2Ugay5sb2FkKGEsZnVuY3Rpb24oYSl7YT1mLl9wYXJzZXIoYSwhMCk7aWYoYS5pc0N1YmVtYXApZm9yKHZhciBjPWEubWlwbWFwcy5sZW5ndGgvYS5taXBtYXBDb3VudCxkPTA7ZDxjO2QrKyl7Z1tkXT17bWlwbWFwczpbXX07Zm9yKHZhciBlPTA7ZTxhLm1pcG1hcENvdW50O2UrKylnW2RdLm1pcG1hcHMucHVzaChhLm1pcG1hcHNbZCoKYS5taXBtYXBDb3VudCtlXSksZ1tkXS5mb3JtYXQ9YS5mb3JtYXQsZ1tkXS53aWR0aD1hLndpZHRoLGdbZF0uaGVpZ2h0PWEuaGVpZ2h0fWVsc2UgaC5pbWFnZS53aWR0aD1hLndpZHRoLGguaW1hZ2UuaGVpZ2h0PWEuaGVpZ2h0LGgubWlwbWFwcz1hLm1pcG1hcHM7MT09PWEubWlwbWFwQ291bnQmJihoLm1pbkZpbHRlcj0xMDA2KTtoLmZvcm1hdD1hLmZvcm1hdDtoLm5lZWRzVXBkYXRlPSEwO2ImJmIoaCl9LGMsZCk7cmV0dXJuIGh9LHNldFBhdGg6ZnVuY3Rpb24oYSl7dGhpcy5wYXRoPWE7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbigkZC5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcyxmPW5ldyBlYixnPW5ldyB1YSh0aGlzLm1hbmFnZXIpO2cuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpO2cubG9hZChhLGZ1bmN0aW9uKGEpe2lmKGE9ZS5fcGFyc2VyKGEpKXZvaWQgMCE9PWEuaW1hZ2U/Zi5pbWFnZT1hLmltYWdlOnZvaWQgMCE9PQphLmRhdGEmJihmLmltYWdlLndpZHRoPWEud2lkdGgsZi5pbWFnZS5oZWlnaHQ9YS5oZWlnaHQsZi5pbWFnZS5kYXRhPWEuZGF0YSksZi53cmFwUz12b2lkIDAhPT1hLndyYXBTP2Eud3JhcFM6MTAwMSxmLndyYXBUPXZvaWQgMCE9PWEud3JhcFQ/YS53cmFwVDoxMDAxLGYubWFnRmlsdGVyPXZvaWQgMCE9PWEubWFnRmlsdGVyP2EubWFnRmlsdGVyOjEwMDYsZi5taW5GaWx0ZXI9dm9pZCAwIT09YS5taW5GaWx0ZXI/YS5taW5GaWx0ZXI6MTAwOCxmLmFuaXNvdHJvcHk9dm9pZCAwIT09YS5hbmlzb3Ryb3B5P2EuYW5pc290cm9weToxLHZvaWQgMCE9PWEuZm9ybWF0JiYoZi5mb3JtYXQ9YS5mb3JtYXQpLHZvaWQgMCE9PWEudHlwZSYmKGYudHlwZT1hLnR5cGUpLHZvaWQgMCE9PWEubWlwbWFwcyYmKGYubWlwbWFwcz1hLm1pcG1hcHMpLDE9PT1hLm1pcG1hcENvdW50JiYoZi5taW5GaWx0ZXI9MTAwNiksZi5uZWVkc1VwZGF0ZT0hMCxiJiZiKGYsYSl9LGMsZCk7cmV0dXJuIGZ9fSk7T2JqZWN0LmFzc2lnbihWYy5wcm90b3R5cGUsCntsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe3ZvaWQgMD09PWEmJihhPSIiKTt2b2lkIDAhPT10aGlzLnBhdGgmJihhPXRoaXMucGF0aCthKTt2YXIgZT10aGlzLGY9aGQuZ2V0KGEpO2lmKHZvaWQgMCE9PWYpcmV0dXJuIGUubWFuYWdlci5pdGVtU3RhcnQoYSksc2V0VGltZW91dChmdW5jdGlvbigpe2ImJmIoZik7ZS5tYW5hZ2VyLml0ZW1FbmQoYSl9LDApLGY7Yz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJpbWciKTtjLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7aGQuYWRkKGEsdGhpcyk7YiYmYih0aGlzKTtlLm1hbmFnZXIuaXRlbUVuZChhKX0sITEpO2MuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKGIpe2QmJmQoYik7ZS5tYW5hZ2VyLml0ZW1FbmQoYSk7ZS5tYW5hZ2VyLml0ZW1FcnJvcihhKX0sITEpOyJkYXRhOiIhPT1hLnN1YnN0cigwLDUpJiZ2b2lkIDAhPT10aGlzLmNyb3NzT3JpZ2luJiYKKGMuY3Jvc3NPcmlnaW49dGhpcy5jcm9zc09yaWdpbik7ZS5tYW5hZ2VyLml0ZW1TdGFydChhKTtjLnNyYz1hO3JldHVybiBjfSxzZXRDcm9zc09yaWdpbjpmdW5jdGlvbihhKXt0aGlzLmNyb3NzT3JpZ2luPWE7cmV0dXJuIHRoaXN9LHNldFBhdGg6ZnVuY3Rpb24oYSl7dGhpcy5wYXRoPWE7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihhZS5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYSxiLGMsZCl7ZnVuY3Rpb24gZShjKXtnLmxvYWQoYVtjXSxmdW5jdGlvbihhKXtmLmltYWdlc1tjXT1hO2grKzs2PT09aCYmKGYubmVlZHNVcGRhdGU9ITAsYiYmYihmKSl9LHZvaWQgMCxkKX12YXIgZj1uZXcgWmEsZz1uZXcgVmModGhpcy5tYW5hZ2VyKTtnLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2cuc2V0UGF0aCh0aGlzLnBhdGgpO3ZhciBoPTA7Zm9yKGM9MDtjPGEubGVuZ3RoOysrYyllKGMpO3JldHVybiBmfSxzZXRDcm9zc09yaWdpbjpmdW5jdGlvbihhKXt0aGlzLmNyb3NzT3JpZ2luPQphO3JldHVybiB0aGlzfSxzZXRQYXRoOmZ1bmN0aW9uKGEpe3RoaXMucGF0aD1hO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oc2QucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW5ldyBWYyh0aGlzLm1hbmFnZXIpO2Uuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7ZS5zZXRQYXRoKHRoaXMucGF0aCk7dmFyIGY9bmV3IFg7Zi5pbWFnZT1lLmxvYWQoYSxmdW5jdGlvbigpe3ZhciBjPTA8YS5zZWFyY2goL1wuKGpwZ3xqcGVnKSQvKXx8MD09PWEuc2VhcmNoKC9eZGF0YVw6aW1hZ2VcL2pwZWcvKTtmLmZvcm1hdD1jPzEwMjI6MTAyMztmLm5lZWRzVXBkYXRlPSEwO3ZvaWQgMCE9PWImJmIoZil9LGMsZCk7cmV0dXJuIGZ9LHNldENyb3NzT3JpZ2luOmZ1bmN0aW9uKGEpe3RoaXMuY3Jvc3NPcmlnaW49YTtyZXR1cm4gdGhpc30sc2V0UGF0aDpmdW5jdGlvbihhKXt0aGlzLnBhdGg9YTtyZXR1cm4gdGhpc319KTttYS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSwKe2NvbnN0cnVjdG9yOm1hLGlzTGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXtCLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLmNvbG9yLmNvcHkoYS5jb2xvcik7dGhpcy5pbnRlbnNpdHk9YS5pbnRlbnNpdHk7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihhKXthPUIucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsYSk7YS5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKTthLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHk7dm9pZCAwIT09dGhpcy5ncm91bmRDb2xvciYmKGEub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpO3ZvaWQgMCE9PXRoaXMuZGlzdGFuY2UmJihhLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKTt2b2lkIDAhPT10aGlzLmFuZ2xlJiYoYS5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSk7dm9pZCAwIT09dGhpcy5kZWNheSYmKGEub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpO3ZvaWQgMCE9PQp0aGlzLnBlbnVtYnJhJiYoYS5vYmplY3QucGVudW1icmE9dGhpcy5wZW51bWJyYSk7dm9pZCAwIT09dGhpcy5zaGFkb3cmJihhLm9iamVjdC5zaGFkb3c9dGhpcy5zaGFkb3cudG9KU09OKCkpO3JldHVybiBhfX0pO3RkLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobWEucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6dGQsaXNIZW1pc3BoZXJlTGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXttYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5ncm91bmRDb2xvci5jb3B5KGEuZ3JvdW5kQ29sb3IpO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24odWIucHJvdG90eXBlLHtjb3B5OmZ1bmN0aW9uKGEpe3RoaXMuY2FtZXJhPWEuY2FtZXJhLmNsb25lKCk7dGhpcy5iaWFzPWEuYmlhczt0aGlzLnJhZGl1cz1hLnJhZGl1czt0aGlzLm1hcFNpemUuY29weShhLm1hcFNpemUpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sCnRvSlNPTjpmdW5jdGlvbigpe3ZhciBhPXt9OzAhPT10aGlzLmJpYXMmJihhLmJpYXM9dGhpcy5iaWFzKTsxIT09dGhpcy5yYWRpdXMmJihhLnJhZGl1cz10aGlzLnJhZGl1cyk7aWYoNTEyIT09dGhpcy5tYXBTaXplLnh8fDUxMiE9PXRoaXMubWFwU2l6ZS55KWEubWFwU2l6ZT10aGlzLm1hcFNpemUudG9BcnJheSgpO2EuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0O2RlbGV0ZSBhLmNhbWVyYS5tYXRyaXg7cmV0dXJuIGF9fSk7dWQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZSh1Yi5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp1ZCxpc1Nwb3RMaWdodFNoYWRvdzohMCx1cGRhdGU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jYW1lcmEsYz0yKlkuUkFEMkRFRyphLmFuZ2xlLGQ9dGhpcy5tYXBTaXplLndpZHRoL3RoaXMubWFwU2l6ZS5oZWlnaHQ7YT1hLmRpc3RhbmNlfHxiLmZhcjtpZihjIT09Yi5mb3Z8fGQhPT1iLmFzcGVjdHx8YSE9PWIuZmFyKWIuZm92PQpjLGIuYXNwZWN0PWQsYi5mYXI9YSxiLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX19KTt2ZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG1hLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnZkLGlzU3BvdExpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24oYSl7bWEucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMuZGlzdGFuY2U9YS5kaXN0YW5jZTt0aGlzLmFuZ2xlPWEuYW5nbGU7dGhpcy5wZW51bWJyYT1hLnBlbnVtYnJhO3RoaXMuZGVjYXk9YS5kZWNheTt0aGlzLnRhcmdldD1hLnRhcmdldC5jbG9uZSgpO3RoaXMuc2hhZG93PWEuc2hhZG93LmNsb25lKCk7cmV0dXJuIHRoaXN9fSk7d2QucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShtYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp3ZCxpc1BvaW50TGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXttYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5kaXN0YW5jZT1hLmRpc3RhbmNlOwp0aGlzLmRlY2F5PWEuZGVjYXk7dGhpcy5zaGFkb3c9YS5zaGFkb3cuY2xvbmUoKTtyZXR1cm4gdGhpc319KTt4ZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHViLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnhkfSk7eWQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShtYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp5ZCxpc0RpcmVjdGlvbmFsTGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXttYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy50YXJnZXQ9YS50YXJnZXQuY2xvbmUoKTt0aGlzLnNoYWRvdz1hLnNoYWRvdy5jbG9uZSgpO3JldHVybiB0aGlzfX0pO3pkLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobWEucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6emQsaXNBbWJpZW50TGlnaHQ6ITB9KTtBZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG1hLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkFkLAppc1JlY3RBcmVhTGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXttYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy53aWR0aD1hLndpZHRoO3RoaXMuaGVpZ2h0PWEuaGVpZ2h0O3JldHVybiB0aGlzfSx0b0pTT046ZnVuY3Rpb24oYSl7YT1tYS5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxhKTthLm9iamVjdC53aWR0aD10aGlzLndpZHRoO2Eub2JqZWN0LmhlaWdodD10aGlzLmhlaWdodDtyZXR1cm4gYX19KTt2YXIgdmE9e2FycmF5U2xpY2U6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB2YS5pc1R5cGVkQXJyYXkoYSk/bmV3IGEuY29uc3RydWN0b3IoYS5zdWJhcnJheShiLHZvaWQgMCE9PWM/YzphLmxlbmd0aCkpOmEuc2xpY2UoYixjKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4hYXx8IWMmJmEuY29uc3RydWN0b3I9PT1iP2E6Im51bWJlciI9PT10eXBlb2YgYi5CWVRFU19QRVJfRUxFTUVOVD9uZXcgYihhKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhKX0sCmlzVHlwZWRBcnJheTpmdW5jdGlvbihhKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGEpJiYhKGEgaW5zdGFuY2VvZiBEYXRhVmlldyl9LGdldEtleWZyYW1lT3JkZXI6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEubGVuZ3RoLGM9QXJyYXkoYiksZD0wO2QhPT1iOysrZCljW2RdPWQ7Yy5zb3J0KGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGFbYl0tYVtjXX0pO3JldHVybiBjfSxzb3J0ZWRBcnJheTpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPWEubGVuZ3RoLGU9bmV3IGEuY29uc3RydWN0b3IoZCksZj0wLGc9MDtnIT09ZDsrK2YpZm9yKHZhciBoPWNbZl0qYixrPTA7ayE9PWI7KytrKWVbZysrXT1hW2gra107cmV0dXJuIGV9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKGEsYixjLGQpe2Zvcih2YXIgZT0xLGY9YVswXTt2b2lkIDAhPT1mJiZ2b2lkIDA9PT1mW2RdOylmPWFbZSsrXTtpZih2b2lkIDAhPT1mKXt2YXIgZz1mW2RdO2lmKHZvaWQgMCE9PWcpaWYoQXJyYXkuaXNBcnJheShnKSl7ZG8gZz0KZltkXSx2b2lkIDAhPT1nJiYoYi5wdXNoKGYudGltZSksYy5wdXNoLmFwcGx5KGMsZykpLGY9YVtlKytdO3doaWxlKHZvaWQgMCE9PWYpfWVsc2UgaWYodm9pZCAwIT09Zy50b0FycmF5KXtkbyBnPWZbZF0sdm9pZCAwIT09ZyYmKGIucHVzaChmLnRpbWUpLGcudG9BcnJheShjLGMubGVuZ3RoKSksZj1hW2UrK107d2hpbGUodm9pZCAwIT09Zil9ZWxzZXtkbyBnPWZbZF0sdm9pZCAwIT09ZyYmKGIucHVzaChmLnRpbWUpLGMucHVzaChnKSksZj1hW2UrK107d2hpbGUodm9pZCAwIT09Zil9fX19O09iamVjdC5hc3NpZ24oRGEucHJvdG90eXBlLHtldmFsdWF0ZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxjPXRoaXMuX2NhY2hlZEluZGV4LGQ9YltjXSxlPWJbYy0xXTthOntiOntjOntkOmlmKCEoYTxkKSl7Zm9yKHZhciBmPWMrMjs7KXtpZih2b2lkIDA9PT1kKXtpZihhPGUpYnJlYWsgZDt0aGlzLl9jYWNoZWRJbmRleD1jPWIubGVuZ3RoO3JldHVybiB0aGlzLmFmdGVyRW5kXyhjLQoxLGEsZSl9aWYoYz09PWYpYnJlYWs7ZT1kO2Q9YlsrK2NdO2lmKGE8ZClicmVhayBifWQ9Yi5sZW5ndGg7YnJlYWsgY31pZihhPj1lKWJyZWFrIGE7ZWxzZXtmPWJbMV07YTxmJiYoYz0yLGU9Zik7Zm9yKGY9Yy0yOzspe2lmKHZvaWQgMD09PWUpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCxhLGQpO2lmKGM9PT1mKWJyZWFrO2Q9ZTtlPWJbLS1jLTFdO2lmKGE+PWUpYnJlYWsgYn1kPWM7Yz0wfX1mb3IoO2M8ZDspZT1jK2Q+Pj4xLGE8YltlXT9kPWU6Yz1lKzE7ZD1iW2NdO2U9YltjLTFdO2lmKHZvaWQgMD09PWUpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCxhLGQpO2lmKHZvaWQgMD09PWQpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PWM9Yi5sZW5ndGgsdGhpcy5hZnRlckVuZF8oYy0xLGUsYSl9dGhpcy5fY2FjaGVkSW5kZXg9Yzt0aGlzLmludGVydmFsQ2hhbmdlZF8oYyxlLGQpfXJldHVybiB0aGlzLmludGVycG9sYXRlXyhjLAplLGEsZCl9LHNldHRpbmdzOm51bGwsRGVmYXVsdFNldHRpbmdzXzp7fSxnZXRTZXR0aW5nc186ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffSxjb3B5U2FtcGxlVmFsdWVfOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucmVzdWx0QnVmZmVyLGM9dGhpcy5zYW1wbGVWYWx1ZXMsZD10aGlzLnZhbHVlU2l6ZTthKj1kO2Zvcih2YXIgZT0wO2UhPT1kOysrZSliW2VdPWNbYStlXTtyZXR1cm4gYn0saW50ZXJwb2xhdGVfOmZ1bmN0aW9uKGEsYixjLGQpe3Rocm93IEVycm9yKCJjYWxsIHRvIGFic3RyYWN0IG1ldGhvZCIpO30saW50ZXJ2YWxDaGFuZ2VkXzpmdW5jdGlvbihhLGIsYyl7fX0pO09iamVjdC5hc3NpZ24oRGEucHJvdG90eXBlLHtiZWZvcmVTdGFydF86RGEucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV8sYWZ0ZXJFbmRfOkRhLnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVffSk7QmQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShEYS5wcm90b3R5cGUpLAp7Y29uc3RydWN0b3I6QmQsRGVmYXVsdFNldHRpbmdzXzp7ZW5kaW5nU3RhcnQ6MjQwMCxlbmRpbmdFbmQ6MjQwMH0saW50ZXJ2YWxDaGFuZ2VkXzpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMsZT1hLTIsZj1hKzEsZz1kW2VdLGg9ZFtmXTtpZih2b2lkIDA9PT1nKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0KXtjYXNlIDI0MDE6ZT1hO2c9MipiLWM7YnJlYWs7Y2FzZSAyNDAyOmU9ZC5sZW5ndGgtMjtnPWIrZFtlXS1kW2UrMV07YnJlYWs7ZGVmYXVsdDplPWEsZz1jfWlmKHZvaWQgMD09PWgpc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nRW5kKXtjYXNlIDI0MDE6Zj1hO2g9MipjLWI7YnJlYWs7Y2FzZSAyNDAyOmY9MTtoPWMrZFsxXS1kWzBdO2JyZWFrO2RlZmF1bHQ6Zj1hLTEsaD1ifWE9LjUqKGMtYik7ZD10aGlzLnZhbHVlU2l6ZTt0aGlzLl93ZWlnaHRQcmV2PWEvKGItZyk7dGhpcy5fd2VpZ2h0TmV4dD0KYS8oaC1jKTt0aGlzLl9vZmZzZXRQcmV2PWUqZDt0aGlzLl9vZmZzZXROZXh0PWYqZH0saW50ZXJwb2xhdGVfOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMucmVzdWx0QnVmZmVyLGY9dGhpcy5zYW1wbGVWYWx1ZXMsZz10aGlzLnZhbHVlU2l6ZTthKj1nO3ZhciBoPWEtZyxrPXRoaXMuX29mZnNldFByZXYsbT10aGlzLl9vZmZzZXROZXh0LGw9dGhpcy5fd2VpZ2h0UHJldixxPXRoaXMuX3dlaWdodE5leHQsbj0oYy1iKS8oZC1iKTtjPW4qbjtkPWMqbjtiPS1sKmQrMipsKmMtbCpuO2w9KDErbCkqZCsoLTEuNS0yKmwpKmMrKC0uNStsKSpuKzE7bj0oLTEtcSkqZCsoMS41K3EpKmMrLjUqbjtxPXEqZC1xKmM7Zm9yKGM9MDtjIT09ZzsrK2MpZVtjXT1iKmZbaytjXStsKmZbaCtjXStuKmZbYStjXStxKmZbbStjXTtyZXR1cm4gZX19KTtXYy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKERhLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOldjLGludGVycG9sYXRlXzpmdW5jdGlvbihhLApiLGMsZCl7dmFyIGU9dGhpcy5yZXN1bHRCdWZmZXIsZj10aGlzLnNhbXBsZVZhbHVlcyxnPXRoaXMudmFsdWVTaXplO2EqPWc7dmFyIGg9YS1nO2I9KGMtYikvKGQtYik7Yz0xLWI7Zm9yKGQ9MDtkIT09ZzsrK2QpZVtkXT1mW2grZF0qYytmW2ErZF0qYjtyZXR1cm4gZX19KTtDZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKERhLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkNkLGludGVycG9sYXRlXzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5jb3B5U2FtcGxlVmFsdWVfKGEtMSl9fSk7dmFyIFlhO1lhPXtUaW1lQnVmZmVyVHlwZTpGbG9hdDMyQXJyYXksVmFsdWVCdWZmZXJUeXBlOkZsb2F0MzJBcnJheSxEZWZhdWx0SW50ZXJwb2xhdGlvbjoyMzAxLEludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgQ2QodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLGEpfSxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBXYyh0aGlzLnRpbWVzLAp0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLGEpfSxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBCZCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksYSl9LHNldEludGVycG9sYXRpb246ZnVuY3Rpb24oYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMjMwMDpiPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU7YnJlYWs7Y2FzZSAyMzAxOmI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSAyMzAyOmI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09Yil7Yj0idW5zdXBwb3J0ZWQgaW50ZXJwb2xhdGlvbiBmb3IgIit0aGlzLlZhbHVlVHlwZU5hbWUrIiBrZXlmcmFtZSB0cmFjayBuYW1lZCAiK3RoaXMubmFtZTtpZih2b2lkIDA9PT10aGlzLmNyZWF0ZUludGVycG9sYW50KWlmKGEhPT10aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKXRoaXMuc2V0SW50ZXJwb2xhdGlvbih0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKTsKZWxzZSB0aHJvdyBFcnJvcihiKTtjb25zb2xlLndhcm4oYil9ZWxzZSB0aGlzLmNyZWF0ZUludGVycG9sYW50PWJ9LGdldEludGVycG9sYXRpb246ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiAyMzAwO2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6cmV0dXJuIDIzMDE7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gMjMwMn19LGdldFZhbHVlU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGgvdGhpcy50aW1lcy5sZW5ndGh9LHNoaWZ0OmZ1bmN0aW9uKGEpe2lmKDAhPT1hKWZvcih2YXIgYj10aGlzLnRpbWVzLGM9MCxkPWIubGVuZ3RoO2MhPT1kOysrYyliW2NdKz1hO3JldHVybiB0aGlzfSxzY2FsZTpmdW5jdGlvbihhKXtpZigxIT09YSlmb3IodmFyIGI9dGhpcy50aW1lcyxjPQowLGQ9Yi5sZW5ndGg7YyE9PWQ7KytjKWJbY10qPWE7cmV0dXJuIHRoaXN9LHRyaW06ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9dGhpcy50aW1lcyxkPWMubGVuZ3RoLGU9MCxmPWQtMTtlIT09ZCYmY1tlXTxhOykrK2U7Zm9yKDstMSE9PWYmJmNbZl0+YjspLS1mOysrZjtpZigwIT09ZXx8ZiE9PWQpZT49ZiYmKGY9TWF0aC5tYXgoZiwxKSxlPWYtMSksZD10aGlzLmdldFZhbHVlU2l6ZSgpLHRoaXMudGltZXM9dmEuYXJyYXlTbGljZShjLGUsZiksdGhpcy52YWx1ZXM9dmEuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyxlKmQsZipkKTtyZXR1cm4gdGhpc30sdmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgYT0hMCxiPXRoaXMuZ2V0VmFsdWVTaXplKCk7MCE9PWItTWF0aC5mbG9vcihiKSYmKGNvbnNvbGUuZXJyb3IoImludmFsaWQgdmFsdWUgc2l6ZSBpbiB0cmFjayIsdGhpcyksYT0hMSk7dmFyIGM9dGhpcy50aW1lcyxiPXRoaXMudmFsdWVzLGQ9Yy5sZW5ndGg7MD09PWQmJihjb25zb2xlLmVycm9yKCJ0cmFjayBpcyBlbXB0eSIsCnRoaXMpLGE9ITEpO2Zvcih2YXIgZT1udWxsLGY9MDtmIT09ZDtmKyspe3ZhciBnPWNbZl07aWYoIm51bWJlciI9PT10eXBlb2YgZyYmaXNOYU4oZykpe2NvbnNvbGUuZXJyb3IoInRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyIix0aGlzLGYsZyk7YT0hMTticmVha31pZihudWxsIT09ZSYmZT5nKXtjb25zb2xlLmVycm9yKCJvdXQgb2Ygb3JkZXIga2V5cyIsdGhpcyxmLGcsZSk7YT0hMTticmVha31lPWd9aWYodm9pZCAwIT09YiYmdmEuaXNUeXBlZEFycmF5KGIpKWZvcihmPTAsYz1iLmxlbmd0aDtmIT09YzsrK2YpaWYoZD1iW2ZdLGlzTmFOKGQpKXtjb25zb2xlLmVycm9yKCJ2YWx1ZSBpcyBub3QgYSB2YWxpZCBudW1iZXIiLHRoaXMsZixkKTthPSExO2JyZWFrfXJldHVybiBhfSxvcHRpbWl6ZTpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLnRpbWVzLGI9dGhpcy52YWx1ZXMsYz10aGlzLmdldFZhbHVlU2l6ZSgpLGQ9MjMwMj09PXRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpLGU9MSwKZj1hLmxlbmd0aC0xLGc9MTtnPGY7KytnKXt2YXIgaD0hMSxrPWFbZ107aWYoayE9PWFbZysxXSYmKDEhPT1nfHxrIT09a1swXSkpaWYoZCloPSEwO2Vsc2UgZm9yKHZhciBtPWcqYyxsPW0tYyxxPW0rYyxrPTA7ayE9PWM7KytrKXt2YXIgbj1iW20ra107aWYobiE9PWJbbCtrXXx8biE9PWJbcStrXSl7aD0hMDticmVha319aWYoaCl7aWYoZyE9PWUpZm9yKGFbZV09YVtnXSxoPWcqYyxtPWUqYyxrPTA7ayE9PWM7KytrKWJbbStrXT1iW2gra107KytlfX1pZigwPGYpe2FbZV09YVtmXTtoPWYqYzttPWUqYztmb3Ioaz0wO2shPT1jOysrayliW20ra109YltoK2tdOysrZX1lIT09YS5sZW5ndGgmJih0aGlzLnRpbWVzPXZhLmFycmF5U2xpY2UoYSwwLGUpLHRoaXMudmFsdWVzPXZhLmFycmF5U2xpY2UoYiwwLGUqYykpO3JldHVybiB0aGlzfX07ZWMucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShZYSkse2NvbnN0cnVjdG9yOmVjLFZhbHVlVHlwZU5hbWU6InZlY3RvciJ9KTsKRGQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShEYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpEZCxpbnRlcnBvbGF0ZV86ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5yZXN1bHRCdWZmZXIsZj10aGlzLnNhbXBsZVZhbHVlcyxnPXRoaXMudmFsdWVTaXplO2EqPWc7Yj0oYy1iKS8oZC1iKTtmb3IoYz1hK2c7YSE9PWM7YSs9NClxYS5zbGVycEZsYXQoZSwwLGYsYS1nLGYsYSxiKTtyZXR1cm4gZX19KTtYYy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFlhKSx7Y29uc3RydWN0b3I6WGMsVmFsdWVUeXBlTmFtZToicXVhdGVybmlvbiIsRGVmYXVsdEludGVycG9sYXRpb246MjMwMSxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBEZCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksYSl9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KTsKZmMucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShZYSkse2NvbnN0cnVjdG9yOmZjLFZhbHVlVHlwZU5hbWU6Im51bWJlciJ9KTtFZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFlhKSx7Y29uc3RydWN0b3I6RWQsVmFsdWVUeXBlTmFtZToic3RyaW5nIixWYWx1ZUJ1ZmZlclR5cGU6QXJyYXksRGVmYXVsdEludGVycG9sYXRpb246MjMwMCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6dm9pZCAwLEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KTtGZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFlhKSx7Y29uc3RydWN0b3I6RmQsVmFsdWVUeXBlTmFtZToiYm9vbCIsVmFsdWVCdWZmZXJUeXBlOkFycmF5LERlZmF1bHRJbnRlcnBvbGF0aW9uOjIzMDAsSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnZvaWQgMCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg6dm9pZCAwfSk7CkdkLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoWWEpLHtjb25zdHJ1Y3RvcjpHZCxWYWx1ZVR5cGVOYW1lOiJjb2xvciJ9KTt3Yi5wcm90b3R5cGU9WWE7WWEuY29uc3RydWN0b3I9d2I7T2JqZWN0LmFzc2lnbih3Yix7cGFyc2U6ZnVuY3Rpb24oYSl7aWYodm9pZCAwPT09YS50eXBlKXRocm93IEVycm9yKCJ0cmFjayB0eXBlIHVuZGVmaW5lZCwgY2FuIG5vdCBwYXJzZSIpO3ZhciBiPXdiLl9nZXRUcmFja1R5cGVGb3JWYWx1ZVR5cGVOYW1lKGEudHlwZSk7aWYodm9pZCAwPT09YS50aW1lcyl7dmFyIGM9W10sZD1bXTt2YS5mbGF0dGVuSlNPTihhLmtleXMsYyxkLCJ2YWx1ZSIpO2EudGltZXM9YzthLnZhbHVlcz1kfXJldHVybiB2b2lkIDAhPT1iLnBhcnNlP2IucGFyc2UoYSk6bmV3IGIoYS5uYW1lLGEudGltZXMsYS52YWx1ZXMsYS5pbnRlcnBvbGF0aW9uKX0sdG9KU09OOmZ1bmN0aW9uKGEpe3ZhciBiPWEuY29uc3RydWN0b3I7aWYodm9pZCAwIT09Yi50b0pTT04pYj0KYi50b0pTT04oYSk7ZWxzZXt2YXIgYj17bmFtZTphLm5hbWUsdGltZXM6dmEuY29udmVydEFycmF5KGEudGltZXMsQXJyYXkpLHZhbHVlczp2YS5jb252ZXJ0QXJyYXkoYS52YWx1ZXMsQXJyYXkpfSxjPWEuZ2V0SW50ZXJwb2xhdGlvbigpO2MhPT1hLkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYoYi5pbnRlcnBvbGF0aW9uPWMpfWIudHlwZT1hLlZhbHVlVHlwZU5hbWU7cmV0dXJuIGJ9LF9nZXRUcmFja1R5cGVGb3JWYWx1ZVR5cGVOYW1lOmZ1bmN0aW9uKGEpe3N3aXRjaChhLnRvTG93ZXJDYXNlKCkpe2Nhc2UgInNjYWxhciI6Y2FzZSAiZG91YmxlIjpjYXNlICJmbG9hdCI6Y2FzZSAibnVtYmVyIjpjYXNlICJpbnRlZ2VyIjpyZXR1cm4gZmM7Y2FzZSAidmVjdG9yIjpjYXNlICJ2ZWN0b3IyIjpjYXNlICJ2ZWN0b3IzIjpjYXNlICJ2ZWN0b3I0IjpyZXR1cm4gZWM7Y2FzZSAiY29sb3IiOnJldHVybiBHZDtjYXNlICJxdWF0ZXJuaW9uIjpyZXR1cm4gWGM7Y2FzZSAiYm9vbCI6Y2FzZSAiYm9vbGVhbiI6cmV0dXJuIEZkOwpjYXNlICJzdHJpbmciOnJldHVybiBFZH10aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgdHlwZU5hbWU6ICIrYSk7fX0pO09iamVjdC5hc3NpZ24oQmEse3BhcnNlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPWEudHJhY2tzLGQ9MS8oYS5mcHN8fDEpLGU9MCxmPWMubGVuZ3RoO2UhPT1mOysrZSliLnB1c2god2IucGFyc2UoY1tlXSkuc2NhbGUoZCkpO3JldHVybiBuZXcgQmEoYS5uYW1lLGEuZHVyYXRpb24sYil9LHRvSlNPTjpmdW5jdGlvbihhKXt2YXIgYj1bXSxjPWEudHJhY2tzO2E9e25hbWU6YS5uYW1lLGR1cmF0aW9uOmEuZHVyYXRpb24sdHJhY2tzOmJ9O2Zvcih2YXIgZD0wLGU9Yy5sZW5ndGg7ZCE9PWU7KytkKWIucHVzaCh3Yi50b0pTT04oY1tkXSkpO3JldHVybiBhfSxDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZTpmdW5jdGlvbihhLGIsYyxkKXtmb3IodmFyIGU9Yi5sZW5ndGgsZj1bXSxnPTA7ZzxlO2crKyl7dmFyIGg9W10saz1bXTtoLnB1c2goKGcrZS0xKSUKZSxnLChnKzEpJWUpO2sucHVzaCgwLDEsMCk7dmFyIG09dmEuZ2V0S2V5ZnJhbWVPcmRlcihoKSxoPXZhLnNvcnRlZEFycmF5KGgsMSxtKSxrPXZhLnNvcnRlZEFycmF5KGssMSxtKTtkfHwwIT09aFswXXx8KGgucHVzaChlKSxrLnB1c2goa1swXSkpO2YucHVzaCgobmV3IGZjKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrYltnXS5uYW1lKyJdIixoLGspKS5zY2FsZSgxL2MpKX1yZXR1cm4gbmV3IEJhKGEsLTEsZil9LGZpbmRCeU5hbWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hO0FycmF5LmlzQXJyYXkoYSl8fChjPWEuZ2VvbWV0cnkmJmEuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8YS5hbmltYXRpb25zKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKylpZihjW2RdLm5hbWU9PT1iKXJldHVybiBjW2RdO3JldHVybiBudWxsfSxDcmVhdGVDbGlwc0Zyb21Nb3JwaFRhcmdldFNlcXVlbmNlczpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXt9LGU9L14oW1x3LV0qPykoW1xkXSspJC8sZj0wLApnPWEubGVuZ3RoO2Y8ZztmKyspe3ZhciBoPWFbZl0saz1oLm5hbWUubWF0Y2goZSk7aWYoayYmMTxrLmxlbmd0aCl7dmFyIG09a1sxXTsoaz1kW21dKXx8KGRbbV09az1bXSk7ay5wdXNoKGgpfX1hPVtdO2ZvcihtIGluIGQpYS5wdXNoKEJhLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKG0sZFttXSxiLGMpKTtyZXR1cm4gYX0scGFyc2VBbmltYXRpb246ZnVuY3Rpb24oYSxiKXtpZighYSlyZXR1cm4gY29uc29sZS5lcnJvcigiICBubyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhIiksbnVsbDtmb3IodmFyIGM9ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZigwIT09Yy5sZW5ndGgpe3ZhciBmPVtdLGc9W107dmEuZmxhdHRlbkpTT04oYyxmLGcsZCk7MCE9PWYubGVuZ3RoJiZlLnB1c2gobmV3IGEoYixmLGcpKX19LGQ9W10sZT1hLm5hbWV8fCJkZWZhdWx0IixmPWEubGVuZ3RofHwtMSxnPWEuZnBzfHwzMCxoPWEuaGllcmFyY2h5fHxbXSxrPTA7azxoLmxlbmd0aDtrKyspe3ZhciBtPQpoW2tdLmtleXM7aWYobSYmMCE9PW0ubGVuZ3RoKWlmKG1bMF0ubW9ycGhUYXJnZXRzKXtmb3IodmFyIGY9e30sbD0wO2w8bS5sZW5ndGg7bCsrKWlmKG1bbF0ubW9ycGhUYXJnZXRzKWZvcih2YXIgcT0wO3E8bVtsXS5tb3JwaFRhcmdldHMubGVuZ3RoO3ErKylmW21bbF0ubW9ycGhUYXJnZXRzW3FdXT0tMTtmb3IodmFyIG4gaW4gZil7Zm9yKHZhciBwPVtdLHo9W10scT0wO3EhPT1tW2xdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7KytxKXt2YXIgdD1tW2xdO3AucHVzaCh0LnRpbWUpO3oucHVzaCh0Lm1vcnBoVGFyZ2V0PT09bj8xOjApfWQucHVzaChuZXcgZmMoIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK24rIl0iLHAseikpfWY9Zi5sZW5ndGgqKGd8fDEpfWVsc2UgbD0iLmJvbmVzWyIrYltrXS5uYW1lKyJdIixjKGVjLGwrIi5wb3NpdGlvbiIsbSwicG9zIixkKSxjKFhjLGwrIi5xdWF0ZXJuaW9uIixtLCJyb3QiLGQpLGMoZWMsbCsiLnNjYWxlIixtLCJzY2wiLGQpfXJldHVybiAwPT09CmQubGVuZ3RoP251bGw6bmV3IEJhKGUsZixkKX19KTtPYmplY3QuYXNzaWduKEJhLnByb3RvdHlwZSx7cmVzZXREdXJhdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI9MCxjPXRoaXMudHJhY2tzLmxlbmd0aDtiIT09YzsrK2IpdmFyIGQ9dGhpcy50cmFja3NbYl0sYT1NYXRoLm1heChhLGQudGltZXNbZC50aW1lcy5sZW5ndGgtMV0pO3RoaXMuZHVyYXRpb249YX0sdHJpbTpmdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8dGhpcy50cmFja3MubGVuZ3RoO2ErKyl0aGlzLnRyYWNrc1thXS50cmltKDAsdGhpcy5kdXJhdGlvbik7cmV0dXJuIHRoaXN9LG9wdGltaXplOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTx0aGlzLnRyYWNrcy5sZW5ndGg7YSsrKXRoaXMudHJhY2tzW2FdLm9wdGltaXplKCk7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihIZC5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcyxmPW5ldyB1YShlLm1hbmFnZXIpO2Yuc2V0UmVzcG9uc2VUeXBlKCJqc29uIik7CmYubG9hZChhLGZ1bmN0aW9uKGEpe2IoZS5wYXJzZShhKSl9LGMsZCl9LHNldFRleHR1cmVzOmZ1bmN0aW9uKGEpe3RoaXMudGV4dHVyZXM9YX0scGFyc2U6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2b2lkIDA9PT1jW2FdJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsTG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsYSk7cmV0dXJuIGNbYV19dmFyIGM9dGhpcy50ZXh0dXJlcyxkPW5ldyBsZ1thLnR5cGVdO3ZvaWQgMCE9PWEudXVpZCYmKGQudXVpZD1hLnV1aWQpO3ZvaWQgMCE9PWEubmFtZSYmKGQubmFtZT1hLm5hbWUpO3ZvaWQgMCE9PWEuY29sb3ImJmQuY29sb3Iuc2V0SGV4KGEuY29sb3IpO3ZvaWQgMCE9PWEucm91Z2huZXNzJiYoZC5yb3VnaG5lc3M9YS5yb3VnaG5lc3MpO3ZvaWQgMCE9PWEubWV0YWxuZXNzJiYoZC5tZXRhbG5lc3M9YS5tZXRhbG5lc3MpO3ZvaWQgMCE9PWEuZW1pc3NpdmUmJmQuZW1pc3NpdmUuc2V0SGV4KGEuZW1pc3NpdmUpO3ZvaWQgMCE9PQphLnNwZWN1bGFyJiZkLnNwZWN1bGFyLnNldEhleChhLnNwZWN1bGFyKTt2b2lkIDAhPT1hLnNoaW5pbmVzcyYmKGQuc2hpbmluZXNzPWEuc2hpbmluZXNzKTt2b2lkIDAhPT1hLmNsZWFyQ29hdCYmKGQuY2xlYXJDb2F0PWEuY2xlYXJDb2F0KTt2b2lkIDAhPT1hLmNsZWFyQ29hdFJvdWdobmVzcyYmKGQuY2xlYXJDb2F0Um91Z2huZXNzPWEuY2xlYXJDb2F0Um91Z2huZXNzKTt2b2lkIDAhPT1hLnVuaWZvcm1zJiYoZC51bmlmb3Jtcz1hLnVuaWZvcm1zKTt2b2lkIDAhPT1hLnZlcnRleFNoYWRlciYmKGQudmVydGV4U2hhZGVyPWEudmVydGV4U2hhZGVyKTt2b2lkIDAhPT1hLmZyYWdtZW50U2hhZGVyJiYoZC5mcmFnbWVudFNoYWRlcj1hLmZyYWdtZW50U2hhZGVyKTt2b2lkIDAhPT1hLnZlcnRleENvbG9ycyYmKGQudmVydGV4Q29sb3JzPWEudmVydGV4Q29sb3JzKTt2b2lkIDAhPT1hLmZvZyYmKGQuZm9nPWEuZm9nKTt2b2lkIDAhPT1hLnNoYWRpbmcmJihkLnNoYWRpbmc9YS5zaGFkaW5nKTsKdm9pZCAwIT09YS5ibGVuZGluZyYmKGQuYmxlbmRpbmc9YS5ibGVuZGluZyk7dm9pZCAwIT09YS5zaWRlJiYoZC5zaWRlPWEuc2lkZSk7dm9pZCAwIT09YS5vcGFjaXR5JiYoZC5vcGFjaXR5PWEub3BhY2l0eSk7dm9pZCAwIT09YS50cmFuc3BhcmVudCYmKGQudHJhbnNwYXJlbnQ9YS50cmFuc3BhcmVudCk7dm9pZCAwIT09YS5hbHBoYVRlc3QmJihkLmFscGhhVGVzdD1hLmFscGhhVGVzdCk7dm9pZCAwIT09YS5kZXB0aFRlc3QmJihkLmRlcHRoVGVzdD1hLmRlcHRoVGVzdCk7dm9pZCAwIT09YS5kZXB0aFdyaXRlJiYoZC5kZXB0aFdyaXRlPWEuZGVwdGhXcml0ZSk7dm9pZCAwIT09YS5jb2xvcldyaXRlJiYoZC5jb2xvcldyaXRlPWEuY29sb3JXcml0ZSk7dm9pZCAwIT09YS53aXJlZnJhbWUmJihkLndpcmVmcmFtZT1hLndpcmVmcmFtZSk7dm9pZCAwIT09YS53aXJlZnJhbWVMaW5ld2lkdGgmJihkLndpcmVmcmFtZUxpbmV3aWR0aD1hLndpcmVmcmFtZUxpbmV3aWR0aCk7dm9pZCAwIT09CmEud2lyZWZyYW1lTGluZWNhcCYmKGQud2lyZWZyYW1lTGluZWNhcD1hLndpcmVmcmFtZUxpbmVjYXApO3ZvaWQgMCE9PWEud2lyZWZyYW1lTGluZWpvaW4mJihkLndpcmVmcmFtZUxpbmVqb2luPWEud2lyZWZyYW1lTGluZWpvaW4pO3ZvaWQgMCE9PWEuc2tpbm5pbmcmJihkLnNraW5uaW5nPWEuc2tpbm5pbmcpO3ZvaWQgMCE9PWEubW9ycGhUYXJnZXRzJiYoZC5tb3JwaFRhcmdldHM9YS5tb3JwaFRhcmdldHMpO3ZvaWQgMCE9PWEuc2l6ZSYmKGQuc2l6ZT1hLnNpemUpO3ZvaWQgMCE9PWEuc2l6ZUF0dGVudWF0aW9uJiYoZC5zaXplQXR0ZW51YXRpb249YS5zaXplQXR0ZW51YXRpb24pO3ZvaWQgMCE9PWEubWFwJiYoZC5tYXA9YihhLm1hcCkpO3ZvaWQgMCE9PWEuYWxwaGFNYXAmJihkLmFscGhhTWFwPWIoYS5hbHBoYU1hcCksZC50cmFuc3BhcmVudD0hMCk7dm9pZCAwIT09YS5idW1wTWFwJiYoZC5idW1wTWFwPWIoYS5idW1wTWFwKSk7dm9pZCAwIT09YS5idW1wU2NhbGUmJihkLmJ1bXBTY2FsZT0KYS5idW1wU2NhbGUpO3ZvaWQgMCE9PWEubm9ybWFsTWFwJiYoZC5ub3JtYWxNYXA9YihhLm5vcm1hbE1hcCkpO2lmKHZvaWQgMCE9PWEubm9ybWFsU2NhbGUpe3ZhciBlPWEubm9ybWFsU2NhbGU7ITE9PT1BcnJheS5pc0FycmF5KGUpJiYoZT1bZSxlXSk7ZC5ub3JtYWxTY2FsZT0obmV3IEQpLmZyb21BcnJheShlKX12b2lkIDAhPT1hLmRpc3BsYWNlbWVudE1hcCYmKGQuZGlzcGxhY2VtZW50TWFwPWIoYS5kaXNwbGFjZW1lbnRNYXApKTt2b2lkIDAhPT1hLmRpc3BsYWNlbWVudFNjYWxlJiYoZC5kaXNwbGFjZW1lbnRTY2FsZT1hLmRpc3BsYWNlbWVudFNjYWxlKTt2b2lkIDAhPT1hLmRpc3BsYWNlbWVudEJpYXMmJihkLmRpc3BsYWNlbWVudEJpYXM9YS5kaXNwbGFjZW1lbnRCaWFzKTt2b2lkIDAhPT1hLnJvdWdobmVzc01hcCYmKGQucm91Z2huZXNzTWFwPWIoYS5yb3VnaG5lc3NNYXApKTt2b2lkIDAhPT1hLm1ldGFsbmVzc01hcCYmKGQubWV0YWxuZXNzTWFwPWIoYS5tZXRhbG5lc3NNYXApKTsKdm9pZCAwIT09YS5lbWlzc2l2ZU1hcCYmKGQuZW1pc3NpdmVNYXA9YihhLmVtaXNzaXZlTWFwKSk7dm9pZCAwIT09YS5lbWlzc2l2ZUludGVuc2l0eSYmKGQuZW1pc3NpdmVJbnRlbnNpdHk9YS5lbWlzc2l2ZUludGVuc2l0eSk7dm9pZCAwIT09YS5zcGVjdWxhck1hcCYmKGQuc3BlY3VsYXJNYXA9YihhLnNwZWN1bGFyTWFwKSk7dm9pZCAwIT09YS5lbnZNYXAmJihkLmVudk1hcD1iKGEuZW52TWFwKSk7dm9pZCAwIT09YS5yZWZsZWN0aXZpdHkmJihkLnJlZmxlY3Rpdml0eT1hLnJlZmxlY3Rpdml0eSk7dm9pZCAwIT09YS5saWdodE1hcCYmKGQubGlnaHRNYXA9YihhLmxpZ2h0TWFwKSk7dm9pZCAwIT09YS5saWdodE1hcEludGVuc2l0eSYmKGQubGlnaHRNYXBJbnRlbnNpdHk9YS5saWdodE1hcEludGVuc2l0eSk7dm9pZCAwIT09YS5hb01hcCYmKGQuYW9NYXA9YihhLmFvTWFwKSk7dm9pZCAwIT09YS5hb01hcEludGVuc2l0eSYmKGQuYW9NYXBJbnRlbnNpdHk9YS5hb01hcEludGVuc2l0eSk7CnZvaWQgMCE9PWEuZ3JhZGllbnRNYXAmJihkLmdyYWRpZW50TWFwPWIoYS5ncmFkaWVudE1hcCkpO3JldHVybiBkfX0pO09iamVjdC5hc3NpZ24oYmUucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMsZj1uZXcgdWEoZS5tYW5hZ2VyKTtmLnNldFJlc3BvbnNlVHlwZSgianNvbiIpO2YubG9hZChhLGZ1bmN0aW9uKGEpe2IoZS5wYXJzZShhKSl9LGMsZCl9LHBhcnNlOmZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBJLGM9YS5kYXRhLmluZGV4O3ZvaWQgMCE9PWMmJihjPW5ldyBmZltjLnR5cGVdKGMuYXJyYXkpLGIuc2V0SW5kZXgobmV3IEwoYywxKSkpO3ZhciBkPWEuZGF0YS5hdHRyaWJ1dGVzLGU7Zm9yKGUgaW4gZCl7dmFyIGY9ZFtlXSxjPW5ldyBmZltmLnR5cGVdKGYuYXJyYXkpO2IuYWRkQXR0cmlidXRlKGUsbmV3IEwoYyxmLml0ZW1TaXplLGYubm9ybWFsaXplZCkpfWU9YS5kYXRhLmdyb3Vwc3x8YS5kYXRhLmRyYXdjYWxsc3x8YS5kYXRhLm9mZnNldHM7CmlmKHZvaWQgMCE9PWUpZm9yKGM9MCxkPWUubGVuZ3RoO2MhPT1kOysrYylmPWVbY10sYi5hZGRHcm91cChmLnN0YXJ0LGYuY291bnQsZi5tYXRlcmlhbEluZGV4KTthPWEuZGF0YS5ib3VuZGluZ1NwaGVyZTt2b2lkIDAhPT1hJiYoZT1uZXcgcCx2b2lkIDAhPT1hLmNlbnRlciYmZS5mcm9tQXJyYXkoYS5jZW50ZXIpLGIuYm91bmRpbmdTcGhlcmU9bmV3IEdhKGUsYS5yYWRpdXMpKTtyZXR1cm4gYn19KTt2YXIgZmY9e0ludDhBcnJheTpJbnQ4QXJyYXksVWludDhBcnJheTpVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5OlVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXk6SW50MTZBcnJheSxVaW50MTZBcnJheTpVaW50MTZBcnJheSxJbnQzMkFycmF5OkludDMyQXJyYXksVWludDMyQXJyYXk6VWludDMyQXJyYXksRmxvYXQzMkFycmF5OkZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXk6RmxvYXQ2NEFycmF5fTtnYy5IYW5kbGVycz17aGFuZGxlcnM6W10sYWRkOmZ1bmN0aW9uKGEsYil7dGhpcy5oYW5kbGVycy5wdXNoKGEsCmIpfSxnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuaGFuZGxlcnMsYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrPTIpe3ZhciBlPWJbYysxXTtpZihiW2NdLnRlc3QoYSkpcmV0dXJuIGV9cmV0dXJuIG51bGx9fTtPYmplY3QuYXNzaWduKGdjLnByb3RvdHlwZSx7Y3Jvc3NPcmlnaW46dm9pZCAwLGV4dHJhY3RVcmxCYXNlOmZ1bmN0aW9uKGEpe2E9YS5zcGxpdCgiLyIpO2lmKDE9PT1hLmxlbmd0aClyZXR1cm4iLi8iO2EucG9wKCk7cmV0dXJuIGEuam9pbigiLyIpKyIvIn0saW5pdE1hdGVyaWFsczpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPVtdLGU9MDtlPGEubGVuZ3RoOysrZSlkW2VdPXRoaXMuY3JlYXRlTWF0ZXJpYWwoYVtlXSxiLGMpO3JldHVybiBkfSxjcmVhdGVNYXRlcmlhbDpmdW5jdGlvbigpe3ZhciBhPXtOb0JsZW5kaW5nOjAsTm9ybWFsQmxlbmRpbmc6MSxBZGRpdGl2ZUJsZW5kaW5nOjIsU3VidHJhY3RpdmVCbGVuZGluZzozLE11bHRpcGx5QmxlbmRpbmc6NCxDdXN0b21CbGVuZGluZzo1fSwKYj1uZXcgSCxjPW5ldyBzZCxkPW5ldyBIZDtyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe2Z1bmN0aW9uIGgoYSxiLGQsZSxoKXthPWYrYTt2YXIgbT1nYy5IYW5kbGVycy5nZXQoYSk7bnVsbCE9PW0/YT1tLmxvYWQoYSk6KGMuc2V0Q3Jvc3NPcmlnaW4oZyksYT1jLmxvYWQoYSkpO3ZvaWQgMCE9PWImJihhLnJlcGVhdC5mcm9tQXJyYXkoYiksMSE9PWJbMF0mJihhLndyYXBTPTFFMyksMSE9PWJbMV0mJihhLndyYXBUPTFFMykpO3ZvaWQgMCE9PWQmJmEub2Zmc2V0LmZyb21BcnJheShkKTt2b2lkIDAhPT1lJiYoInJlcGVhdCI9PT1lWzBdJiYoYS53cmFwUz0xRTMpLCJtaXJyb3IiPT09ZVswXSYmKGEud3JhcFM9MTAwMiksInJlcGVhdCI9PT1lWzFdJiYoYS53cmFwVD0xRTMpLCJtaXJyb3IiPT09ZVsxXSYmKGEud3JhcFQ9MTAwMikpO3ZvaWQgMCE9PWgmJihhLmFuaXNvdHJvcHk9aCk7Yj1ZLmdlbmVyYXRlVVVJRCgpO2tbYl09YTtyZXR1cm4gYn12YXIgaz17fSxtPXt1dWlkOlkuZ2VuZXJhdGVVVUlEKCksCnR5cGU6Ik1lc2hMYW1iZXJ0TWF0ZXJpYWwifSxsO2ZvcihsIGluIGUpe3ZhciBxPWVbbF07c3dpdGNoKGwpe2Nhc2UgIkRiZ0NvbG9yIjpjYXNlICJEYmdJbmRleCI6Y2FzZSAib3B0aWNhbERlbnNpdHkiOmNhc2UgImlsbHVtaW5hdGlvbiI6YnJlYWs7Y2FzZSAiRGJnTmFtZSI6bS5uYW1lPXE7YnJlYWs7Y2FzZSAiYmxlbmRpbmciOm0uYmxlbmRpbmc9YVtxXTticmVhaztjYXNlICJjb2xvckFtYmllbnQiOmNhc2UgIm1hcEFtYmllbnQiOmNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyLmNyZWF0ZU1hdGVyaWFsOiIsbCwiaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4iKTticmVhaztjYXNlICJjb2xvckRpZmZ1c2UiOm0uY29sb3I9Yi5mcm9tQXJyYXkocSkuZ2V0SGV4KCk7YnJlYWs7Y2FzZSAiY29sb3JTcGVjdWxhciI6bS5zcGVjdWxhcj1iLmZyb21BcnJheShxKS5nZXRIZXgoKTticmVhaztjYXNlICJjb2xvckVtaXNzaXZlIjptLmVtaXNzaXZlPWIuZnJvbUFycmF5KHEpLmdldEhleCgpOwpicmVhaztjYXNlICJzcGVjdWxhckNvZWYiOm0uc2hpbmluZXNzPXE7YnJlYWs7Y2FzZSAic2hhZGluZyI6ImJhc2ljIj09PXEudG9Mb3dlckNhc2UoKSYmKG0udHlwZT0iTWVzaEJhc2ljTWF0ZXJpYWwiKTsicGhvbmciPT09cS50b0xvd2VyQ2FzZSgpJiYobS50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIpOyJzdGFuZGFyZCI9PT1xLnRvTG93ZXJDYXNlKCkmJihtLnR5cGU9Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIik7YnJlYWs7Y2FzZSAibWFwRGlmZnVzZSI6bS5tYXA9aChxLGUubWFwRGlmZnVzZVJlcGVhdCxlLm1hcERpZmZ1c2VPZmZzZXQsZS5tYXBEaWZmdXNlV3JhcCxlLm1hcERpZmZ1c2VBbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBEaWZmdXNlUmVwZWF0IjpjYXNlICJtYXBEaWZmdXNlT2Zmc2V0IjpjYXNlICJtYXBEaWZmdXNlV3JhcCI6Y2FzZSAibWFwRGlmZnVzZUFuaXNvdHJvcHkiOmJyZWFrO2Nhc2UgIm1hcEVtaXNzaXZlIjptLmVtaXNzaXZlTWFwPWgocSxlLm1hcEVtaXNzaXZlUmVwZWF0LAplLm1hcEVtaXNzaXZlT2Zmc2V0LGUubWFwRW1pc3NpdmVXcmFwLGUubWFwRW1pc3NpdmVBbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBFbWlzc2l2ZVJlcGVhdCI6Y2FzZSAibWFwRW1pc3NpdmVPZmZzZXQiOmNhc2UgIm1hcEVtaXNzaXZlV3JhcCI6Y2FzZSAibWFwRW1pc3NpdmVBbmlzb3Ryb3B5IjpicmVhaztjYXNlICJtYXBMaWdodCI6bS5saWdodE1hcD1oKHEsZS5tYXBMaWdodFJlcGVhdCxlLm1hcExpZ2h0T2Zmc2V0LGUubWFwTGlnaHRXcmFwLGUubWFwTGlnaHRBbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBMaWdodFJlcGVhdCI6Y2FzZSAibWFwTGlnaHRPZmZzZXQiOmNhc2UgIm1hcExpZ2h0V3JhcCI6Y2FzZSAibWFwTGlnaHRBbmlzb3Ryb3B5IjpicmVhaztjYXNlICJtYXBBTyI6bS5hb01hcD1oKHEsZS5tYXBBT1JlcGVhdCxlLm1hcEFPT2Zmc2V0LGUubWFwQU9XcmFwLGUubWFwQU9Bbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBBT1JlcGVhdCI6Y2FzZSAibWFwQU9PZmZzZXQiOmNhc2UgIm1hcEFPV3JhcCI6Y2FzZSAibWFwQU9Bbmlzb3Ryb3B5IjpicmVhazsKY2FzZSAibWFwQnVtcCI6bS5idW1wTWFwPWgocSxlLm1hcEJ1bXBSZXBlYXQsZS5tYXBCdW1wT2Zmc2V0LGUubWFwQnVtcFdyYXAsZS5tYXBCdW1wQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwQnVtcFNjYWxlIjptLmJ1bXBTY2FsZT1xO2JyZWFrO2Nhc2UgIm1hcEJ1bXBSZXBlYXQiOmNhc2UgIm1hcEJ1bXBPZmZzZXQiOmNhc2UgIm1hcEJ1bXBXcmFwIjpjYXNlICJtYXBCdW1wQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwTm9ybWFsIjptLm5vcm1hbE1hcD1oKHEsZS5tYXBOb3JtYWxSZXBlYXQsZS5tYXBOb3JtYWxPZmZzZXQsZS5tYXBOb3JtYWxXcmFwLGUubWFwTm9ybWFsQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwTm9ybWFsRmFjdG9yIjptLm5vcm1hbFNjYWxlPVtxLHFdO2JyZWFrO2Nhc2UgIm1hcE5vcm1hbFJlcGVhdCI6Y2FzZSAibWFwTm9ybWFsT2Zmc2V0IjpjYXNlICJtYXBOb3JtYWxXcmFwIjpjYXNlICJtYXBOb3JtYWxBbmlzb3Ryb3B5IjpicmVhaztjYXNlICJtYXBTcGVjdWxhciI6bS5zcGVjdWxhck1hcD0KaChxLGUubWFwU3BlY3VsYXJSZXBlYXQsZS5tYXBTcGVjdWxhck9mZnNldCxlLm1hcFNwZWN1bGFyV3JhcCxlLm1hcFNwZWN1bGFyQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwU3BlY3VsYXJSZXBlYXQiOmNhc2UgIm1hcFNwZWN1bGFyT2Zmc2V0IjpjYXNlICJtYXBTcGVjdWxhcldyYXAiOmNhc2UgIm1hcFNwZWN1bGFyQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwTWV0YWxuZXNzIjptLm1ldGFsbmVzc01hcD1oKHEsZS5tYXBNZXRhbG5lc3NSZXBlYXQsZS5tYXBNZXRhbG5lc3NPZmZzZXQsZS5tYXBNZXRhbG5lc3NXcmFwLGUubWFwTWV0YWxuZXNzQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwTWV0YWxuZXNzUmVwZWF0IjpjYXNlICJtYXBNZXRhbG5lc3NPZmZzZXQiOmNhc2UgIm1hcE1ldGFsbmVzc1dyYXAiOmNhc2UgIm1hcE1ldGFsbmVzc0FuaXNvdHJvcHkiOmJyZWFrO2Nhc2UgIm1hcFJvdWdobmVzcyI6bS5yb3VnaG5lc3NNYXA9aChxLGUubWFwUm91Z2huZXNzUmVwZWF0LAplLm1hcFJvdWdobmVzc09mZnNldCxlLm1hcFJvdWdobmVzc1dyYXAsZS5tYXBSb3VnaG5lc3NBbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBSb3VnaG5lc3NSZXBlYXQiOmNhc2UgIm1hcFJvdWdobmVzc09mZnNldCI6Y2FzZSAibWFwUm91Z2huZXNzV3JhcCI6Y2FzZSAibWFwUm91Z2huZXNzQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwQWxwaGEiOm0uYWxwaGFNYXA9aChxLGUubWFwQWxwaGFSZXBlYXQsZS5tYXBBbHBoYU9mZnNldCxlLm1hcEFscGhhV3JhcCxlLm1hcEFscGhhQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwQWxwaGFSZXBlYXQiOmNhc2UgIm1hcEFscGhhT2Zmc2V0IjpjYXNlICJtYXBBbHBoYVdyYXAiOmNhc2UgIm1hcEFscGhhQW5pc290cm9weSI6YnJlYWs7Y2FzZSAiZmxpcFNpZGVkIjptLnNpZGU9MTticmVhaztjYXNlICJkb3VibGVTaWRlZCI6bS5zaWRlPTI7YnJlYWs7Y2FzZSAidHJhbnNwYXJlbmN5Ijpjb25zb2xlLndhcm4oIlRIUkVFLkxvYWRlci5jcmVhdGVNYXRlcmlhbDogdHJhbnNwYXJlbmN5IGhhcyBiZWVuIHJlbmFtZWQgdG8gb3BhY2l0eSIpOwptLm9wYWNpdHk9cTticmVhaztjYXNlICJkZXB0aFRlc3QiOmNhc2UgImRlcHRoV3JpdGUiOmNhc2UgImNvbG9yV3JpdGUiOmNhc2UgIm9wYWNpdHkiOmNhc2UgInJlZmxlY3Rpdml0eSI6Y2FzZSAidHJhbnNwYXJlbnQiOmNhc2UgInZpc2libGUiOmNhc2UgIndpcmVmcmFtZSI6bVtsXT1xO2JyZWFrO2Nhc2UgInZlcnRleENvbG9ycyI6ITA9PT1xJiYobS52ZXJ0ZXhDb2xvcnM9Mik7ImZhY2UiPT09cSYmKG0udmVydGV4Q29sb3JzPTEpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyLmNyZWF0ZU1hdGVyaWFsOiBVbnN1cHBvcnRlZCIsbCxxKX19Ik1lc2hCYXNpY01hdGVyaWFsIj09PW0udHlwZSYmZGVsZXRlIG0uZW1pc3NpdmU7Ik1lc2hQaG9uZ01hdGVyaWFsIiE9PW0udHlwZSYmZGVsZXRlIG0uc3BlY3VsYXI7MT5tLm9wYWNpdHkmJihtLnRyYW5zcGFyZW50PSEwKTtkLnNldFRleHR1cmVzKGspO3JldHVybiBkLnBhcnNlKG0pfX0oKX0pO09iamVjdC5hc3NpZ24oY2UucHJvdG90eXBlLAp7bG9hZDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLGY9dGhpcy50ZXh0dXJlUGF0aCYmInN0cmluZyI9PT10eXBlb2YgdGhpcy50ZXh0dXJlUGF0aD90aGlzLnRleHR1cmVQYXRoOmdjLnByb3RvdHlwZS5leHRyYWN0VXJsQmFzZShhKSxnPW5ldyB1YSh0aGlzLm1hbmFnZXIpO2cuc2V0UmVzcG9uc2VUeXBlKCJqc29uIik7Zy5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpO2cubG9hZChhLGZ1bmN0aW9uKGMpe3ZhciBkPWMubWV0YWRhdGE7aWYodm9pZCAwIT09ZCYmKGQ9ZC50eXBlLHZvaWQgMCE9PWQpKXtpZigib2JqZWN0Ij09PWQudG9Mb3dlckNhc2UoKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuSlNPTkxvYWRlcjogIithKyIgc2hvdWxkIGJlIGxvYWRlZCB3aXRoIFRIUkVFLk9iamVjdExvYWRlciBpbnN0ZWFkLiIpO3JldHVybn1pZigic2NlbmUiPT09ZC50b0xvd2VyQ2FzZSgpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5KU09OTG9hZGVyOiAiK2ErCiIgc2hvdWxkIGJlIGxvYWRlZCB3aXRoIFRIUkVFLlNjZW5lTG9hZGVyIGluc3RlYWQuIik7cmV0dXJufX1jPWUucGFyc2UoYyxmKTtiKGMuZ2VvbWV0cnksYy5tYXRlcmlhbHMpfSxjLGQpfSxzZXRUZXh0dXJlUGF0aDpmdW5jdGlvbihhKXt0aGlzLnRleHR1cmVQYXRoPWF9LHBhcnNlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGEsYil7dm9pZCAwIT09YS5kYXRhJiYoYT1hLmRhdGEpO2Euc2NhbGU9dm9pZCAwIT09YS5zY2FsZT8xL2Euc2NhbGU6MTt2YXIgYz1uZXcgTSxkPWEsZSxmLGcsaCxrLG0sbCxxLG4scix6LHQseSx4LHY9ZC5mYWNlcztuPWQudmVydGljZXM7dmFyIEc9ZC5ub3JtYWxzLHc9ZC5jb2xvcnM7bT1kLnNjYWxlO3ZhciBCPTA7aWYodm9pZCAwIT09ZC51dnMpe2ZvcihlPTA7ZTxkLnV2cy5sZW5ndGg7ZSsrKWQudXZzW2VdLmxlbmd0aCYmQisrO2ZvcihlPTA7ZTxCO2UrKyljLmZhY2VWZXJ0ZXhVdnNbZV09W119aD0wO2ZvcihrPW4ubGVuZ3RoO2g8azspZT0KbmV3IHAsZS54PW5baCsrXSptLGUueT1uW2grK10qbSxlLno9bltoKytdKm0sYy52ZXJ0aWNlcy5wdXNoKGUpO2g9MDtmb3Ioaz12Lmxlbmd0aDtoPGs7KWlmKG49dltoKytdLHI9biYxLGc9biYyLGU9biY4LGw9biYxNix6PW4mMzIsbT1uJjY0LG4mPTEyOCxyKXtyPW5ldyBWYTtyLmE9dltoXTtyLmI9dltoKzFdO3IuYz12W2grM107dD1uZXcgVmE7dC5hPXZbaCsxXTt0LmI9dltoKzJdO3QuYz12W2grM107aCs9NDtnJiYoZz12W2grK10sci5tYXRlcmlhbEluZGV4PWcsdC5tYXRlcmlhbEluZGV4PWcpO2c9Yy5mYWNlcy5sZW5ndGg7aWYoZSlmb3IoZT0wO2U8QjtlKyspZm9yKHk9ZC51dnNbZV0sYy5mYWNlVmVydGV4VXZzW2VdW2ddPVtdLGMuZmFjZVZlcnRleFV2c1tlXVtnKzFdPVtdLGY9MDs0PmY7ZisrKXE9dltoKytdLHg9eVsyKnFdLHE9eVsyKnErMV0seD1uZXcgRCh4LHEpLDIhPT1mJiZjLmZhY2VWZXJ0ZXhVdnNbZV1bZ10ucHVzaCh4KSwwIT09ZiYmYy5mYWNlVmVydGV4VXZzW2VdW2crCjFdLnB1c2goeCk7bCYmKGw9Myp2W2grK10sci5ub3JtYWwuc2V0KEdbbCsrXSxHW2wrK10sR1tsXSksdC5ub3JtYWwuY29weShyLm5vcm1hbCkpO2lmKHopZm9yKGU9MDs0PmU7ZSsrKWw9Myp2W2grK10sej1uZXcgcChHW2wrK10sR1tsKytdLEdbbF0pLDIhPT1lJiZyLnZlcnRleE5vcm1hbHMucHVzaCh6KSwwIT09ZSYmdC52ZXJ0ZXhOb3JtYWxzLnB1c2goeik7bSYmKG09dltoKytdLG09d1ttXSxyLmNvbG9yLnNldEhleChtKSx0LmNvbG9yLnNldEhleChtKSk7aWYobilmb3IoZT0wOzQ+ZTtlKyspbT12W2grK10sbT13W21dLDIhPT1lJiZyLnZlcnRleENvbG9ycy5wdXNoKG5ldyBIKG0pKSwwIT09ZSYmdC52ZXJ0ZXhDb2xvcnMucHVzaChuZXcgSChtKSk7Yy5mYWNlcy5wdXNoKHIpO2MuZmFjZXMucHVzaCh0KX1lbHNle3I9bmV3IFZhO3IuYT12W2grK107ci5iPXZbaCsrXTtyLmM9dltoKytdO2cmJihnPXZbaCsrXSxyLm1hdGVyaWFsSW5kZXg9Zyk7Zz1jLmZhY2VzLmxlbmd0aDsKaWYoZSlmb3IoZT0wO2U8QjtlKyspZm9yKHk9ZC51dnNbZV0sYy5mYWNlVmVydGV4VXZzW2VdW2ddPVtdLGY9MDszPmY7ZisrKXE9dltoKytdLHg9eVsyKnFdLHE9eVsyKnErMV0seD1uZXcgRCh4LHEpLGMuZmFjZVZlcnRleFV2c1tlXVtnXS5wdXNoKHgpO2wmJihsPTMqdltoKytdLHIubm9ybWFsLnNldChHW2wrK10sR1tsKytdLEdbbF0pKTtpZih6KWZvcihlPTA7Mz5lO2UrKylsPTMqdltoKytdLHo9bmV3IHAoR1tsKytdLEdbbCsrXSxHW2xdKSxyLnZlcnRleE5vcm1hbHMucHVzaCh6KTttJiYobT12W2grK10sci5jb2xvci5zZXRIZXgod1ttXSkpO2lmKG4pZm9yKGU9MDszPmU7ZSsrKW09dltoKytdLHIudmVydGV4Q29sb3JzLnB1c2gobmV3IEgod1ttXSkpO2MuZmFjZXMucHVzaChyKX1kPWE7aD12b2lkIDAhPT1kLmluZmx1ZW5jZXNQZXJWZXJ0ZXg/ZC5pbmZsdWVuY2VzUGVyVmVydGV4OjI7aWYoZC5za2luV2VpZ2h0cylmb3Ioaz0wLHY9ZC5za2luV2VpZ2h0cy5sZW5ndGg7azwKdjtrKz1oKWMuc2tpbldlaWdodHMucHVzaChuZXcgZ2EoZC5za2luV2VpZ2h0c1trXSwxPGg/ZC5za2luV2VpZ2h0c1trKzFdOjAsMjxoP2Quc2tpbldlaWdodHNbaysyXTowLDM8aD9kLnNraW5XZWlnaHRzW2srM106MCkpO2lmKGQuc2tpbkluZGljZXMpZm9yKGs9MCx2PWQuc2tpbkluZGljZXMubGVuZ3RoO2s8djtrKz1oKWMuc2tpbkluZGljZXMucHVzaChuZXcgZ2EoZC5za2luSW5kaWNlc1trXSwxPGg/ZC5za2luSW5kaWNlc1trKzFdOjAsMjxoP2Quc2tpbkluZGljZXNbaysyXTowLDM8aD9kLnNraW5JbmRpY2VzW2srM106MCkpO2MuYm9uZXM9ZC5ib25lcztjLmJvbmVzJiYwPGMuYm9uZXMubGVuZ3RoJiYoYy5za2luV2VpZ2h0cy5sZW5ndGghPT1jLnNraW5JbmRpY2VzLmxlbmd0aHx8Yy5za2luSW5kaWNlcy5sZW5ndGghPT1jLnZlcnRpY2VzLmxlbmd0aCkmJmNvbnNvbGUud2FybigiV2hlbiBza2lubmluZywgbnVtYmVyIG9mIHZlcnRpY2VzICgiK2MudmVydGljZXMubGVuZ3RoKwoiKSwgc2tpbkluZGljZXMgKCIrYy5za2luSW5kaWNlcy5sZW5ndGgrIiksIGFuZCBza2luV2VpZ2h0cyAoIitjLnNraW5XZWlnaHRzLmxlbmd0aCsiKSBzaG91bGQgbWF0Y2guIik7az1hO3Y9ay5zY2FsZTtpZih2b2lkIDAhPT1rLm1vcnBoVGFyZ2V0cylmb3IoZD0wLGg9ay5tb3JwaFRhcmdldHMubGVuZ3RoO2Q8aDtkKyspZm9yKGMubW9ycGhUYXJnZXRzW2RdPXt9LGMubW9ycGhUYXJnZXRzW2RdLm5hbWU9ay5tb3JwaFRhcmdldHNbZF0ubmFtZSxjLm1vcnBoVGFyZ2V0c1tkXS52ZXJ0aWNlcz1bXSxHPWMubW9ycGhUYXJnZXRzW2RdLnZlcnRpY2VzLHc9ay5tb3JwaFRhcmdldHNbZF0udmVydGljZXMsQj0wLG49dy5sZW5ndGg7QjxuO0IrPTMpbT1uZXcgcCxtLng9d1tCXSp2LG0ueT13W0IrMV0qdixtLno9d1tCKzJdKnYsRy5wdXNoKG0pO2lmKHZvaWQgMCE9PWsubW9ycGhDb2xvcnMmJjA8ay5tb3JwaENvbG9ycy5sZW5ndGgpZm9yKGNvbnNvbGUud2FybignVEhSRUUuSlNPTkxvYWRlcjogIm1vcnBoQ29sb3JzIiBubyBsb25nZXIgc3VwcG9ydGVkLiBVc2luZyB0aGVtIGFzIGZhY2UgY29sb3JzLicpLAp2PWMuZmFjZXMsaz1rLm1vcnBoQ29sb3JzWzBdLmNvbG9ycyxkPTAsaD12Lmxlbmd0aDtkPGg7ZCsrKXZbZF0uY29sb3IuZnJvbUFycmF5KGssMypkKTtrPWE7ZD1bXTtoPVtdO3ZvaWQgMCE9PWsuYW5pbWF0aW9uJiZoLnB1c2goay5hbmltYXRpb24pO3ZvaWQgMCE9PWsuYW5pbWF0aW9ucyYmKGsuYW5pbWF0aW9ucy5sZW5ndGg/aD1oLmNvbmNhdChrLmFuaW1hdGlvbnMpOmgucHVzaChrLmFuaW1hdGlvbnMpKTtmb3Ioaz0wO2s8aC5sZW5ndGg7aysrKSh2PUJhLnBhcnNlQW5pbWF0aW9uKGhba10sYy5ib25lcykpJiZkLnB1c2godik7Yy5tb3JwaFRhcmdldHMmJihoPUJhLkNyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKGMubW9ycGhUYXJnZXRzLDEwKSxkPWQuY29uY2F0KGgpKTswPGQubGVuZ3RoJiYoYy5hbmltYXRpb25zPWQpO2MuY29tcHV0ZUZhY2VOb3JtYWxzKCk7Yy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtpZih2b2lkIDA9PT1hLm1hdGVyaWFsc3x8MD09PQphLm1hdGVyaWFscy5sZW5ndGgpcmV0dXJue2dlb21ldHJ5OmN9O2Q9Z2MucHJvdG90eXBlLmluaXRNYXRlcmlhbHMoYS5tYXRlcmlhbHMsYix0aGlzLmNyb3NzT3JpZ2luKTtyZXR1cm57Z2VvbWV0cnk6YyxtYXRlcmlhbHM6ZH19fSgpfSk7T2JqZWN0LmFzc2lnbihSZS5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYSxiLGMsZCl7IiI9PT10aGlzLnRleHR1cmVQYXRoJiYodGhpcy50ZXh0dXJlUGF0aD1hLnN1YnN0cmluZygwLGEubGFzdEluZGV4T2YoIi8iKSsxKSk7dmFyIGU9dGhpczsobmV3IHVhKGUubWFuYWdlcikpLmxvYWQoYSxmdW5jdGlvbihjKXt2YXIgZz1udWxsO3RyeXtnPUpTT04ucGFyc2UoYyl9Y2F0Y2goaCl7dm9pZCAwIT09ZCYmZChoKTtjb25zb2xlLmVycm9yKCJUSFJFRTpPYmplY3RMb2FkZXI6IENhbid0IHBhcnNlICIrYSsiLiIsaC5tZXNzYWdlKTtyZXR1cm59Yz1nLm1ldGFkYXRhO3ZvaWQgMD09PWN8fHZvaWQgMD09PWMudHlwZXx8Imdlb21ldHJ5Ij09PWMudHlwZS50b0xvd2VyQ2FzZSgpPwpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3RMb2FkZXI6IENhbid0IGxvYWQgIithKyIuIFVzZSBUSFJFRS5KU09OTG9hZGVyIGluc3RlYWQuIik6ZS5wYXJzZShnLGIpfSxjLGQpfSxzZXRUZXh0dXJlUGF0aDpmdW5jdGlvbihhKXt0aGlzLnRleHR1cmVQYXRoPWF9LHNldENyb3NzT3JpZ2luOmZ1bmN0aW9uKGEpe3RoaXMuY3Jvc3NPcmlnaW49YX0scGFyc2U6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLnBhcnNlR2VvbWV0cmllcyhhLmdlb21ldHJpZXMpLGQ9dGhpcy5wYXJzZUltYWdlcyhhLmltYWdlcyxmdW5jdGlvbigpe3ZvaWQgMCE9PWImJmIoZSl9KSxkPXRoaXMucGFyc2VUZXh0dXJlcyhhLnRleHR1cmVzLGQpLGQ9dGhpcy5wYXJzZU1hdGVyaWFscyhhLm1hdGVyaWFscyxkKSxlPXRoaXMucGFyc2VPYmplY3QoYS5vYmplY3QsYyxkKTthLmFuaW1hdGlvbnMmJihlLmFuaW1hdGlvbnM9dGhpcy5wYXJzZUFuaW1hdGlvbnMoYS5hbmltYXRpb25zKSk7dm9pZCAwIT09YS5pbWFnZXMmJgowIT09YS5pbWFnZXMubGVuZ3RofHx2b2lkIDA9PT1ifHxiKGUpO3JldHVybiBlfSxwYXJzZUdlb21ldHJpZXM6ZnVuY3Rpb24oYSl7dmFyIGI9e307aWYodm9pZCAwIT09YSlmb3IodmFyIGM9bmV3IGNlLGQ9bmV3IGJlLGU9MCxmPWEubGVuZ3RoO2U8ZjtlKyspe3ZhciBnLGg9YVtlXTtzd2l0Y2goaC50eXBlKXtjYXNlICJQbGFuZUdlb21ldHJ5IjpjYXNlICJQbGFuZUJ1ZmZlckdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgud2lkdGgsaC5oZWlnaHQsaC53aWR0aFNlZ21lbnRzLGguaGVpZ2h0U2VnbWVudHMpO2JyZWFrO2Nhc2UgIkJveEdlb21ldHJ5IjpjYXNlICJCb3hCdWZmZXJHZW9tZXRyeSI6Y2FzZSAiQ3ViZUdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgud2lkdGgsaC5oZWlnaHQsaC5kZXB0aCxoLndpZHRoU2VnbWVudHMsaC5oZWlnaHRTZWdtZW50cyxoLmRlcHRoU2VnbWVudHMpO2JyZWFrO2Nhc2UgIkNpcmNsZUdlb21ldHJ5IjpjYXNlICJDaXJjbGVCdWZmZXJHZW9tZXRyeSI6Zz0KbmV3IE1hW2gudHlwZV0oaC5yYWRpdXMsaC5zZWdtZW50cyxoLnRoZXRhU3RhcnQsaC50aGV0YUxlbmd0aCk7YnJlYWs7Y2FzZSAiQ3lsaW5kZXJHZW9tZXRyeSI6Y2FzZSAiQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeSI6Zz1uZXcgTWFbaC50eXBlXShoLnJhZGl1c1RvcCxoLnJhZGl1c0JvdHRvbSxoLmhlaWdodCxoLnJhZGlhbFNlZ21lbnRzLGguaGVpZ2h0U2VnbWVudHMsaC5vcGVuRW5kZWQsaC50aGV0YVN0YXJ0LGgudGhldGFMZW5ndGgpO2JyZWFrO2Nhc2UgIkNvbmVHZW9tZXRyeSI6Y2FzZSAiQ29uZUJ1ZmZlckdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgucmFkaXVzLGguaGVpZ2h0LGgucmFkaWFsU2VnbWVudHMsaC5oZWlnaHRTZWdtZW50cyxoLm9wZW5FbmRlZCxoLnRoZXRhU3RhcnQsaC50aGV0YUxlbmd0aCk7YnJlYWs7Y2FzZSAiU3BoZXJlR2VvbWV0cnkiOmNhc2UgIlNwaGVyZUJ1ZmZlckdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgucmFkaXVzLGgud2lkdGhTZWdtZW50cywKaC5oZWlnaHRTZWdtZW50cyxoLnBoaVN0YXJ0LGgucGhpTGVuZ3RoLGgudGhldGFTdGFydCxoLnRoZXRhTGVuZ3RoKTticmVhaztjYXNlICJEb2RlY2FoZWRyb25HZW9tZXRyeSI6Y2FzZSAiSWNvc2FoZWRyb25HZW9tZXRyeSI6Y2FzZSAiT2N0YWhlZHJvbkdlb21ldHJ5IjpjYXNlICJUZXRyYWhlZHJvbkdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgucmFkaXVzLGguZGV0YWlsKTticmVhaztjYXNlICJSaW5nR2VvbWV0cnkiOmNhc2UgIlJpbmdCdWZmZXJHZW9tZXRyeSI6Zz1uZXcgTWFbaC50eXBlXShoLmlubmVyUmFkaXVzLGgub3V0ZXJSYWRpdXMsaC50aGV0YVNlZ21lbnRzLGgucGhpU2VnbWVudHMsaC50aGV0YVN0YXJ0LGgudGhldGFMZW5ndGgpO2JyZWFrO2Nhc2UgIlRvcnVzR2VvbWV0cnkiOmNhc2UgIlRvcnVzQnVmZmVyR2VvbWV0cnkiOmc9bmV3IE1hW2gudHlwZV0oaC5yYWRpdXMsaC50dWJlLGgucmFkaWFsU2VnbWVudHMsaC50dWJ1bGFyU2VnbWVudHMsaC5hcmMpOwpicmVhaztjYXNlICJUb3J1c0tub3RHZW9tZXRyeSI6Y2FzZSAiVG9ydXNLbm90QnVmZmVyR2VvbWV0cnkiOmc9bmV3IE1hW2gudHlwZV0oaC5yYWRpdXMsaC50dWJlLGgudHVidWxhclNlZ21lbnRzLGgucmFkaWFsU2VnbWVudHMsaC5wLGgucSk7YnJlYWs7Y2FzZSAiTGF0aGVHZW9tZXRyeSI6Y2FzZSAiTGF0aGVCdWZmZXJHZW9tZXRyeSI6Zz1uZXcgTWFbaC50eXBlXShoLnBvaW50cyxoLnNlZ21lbnRzLGgucGhpU3RhcnQsaC5waGlMZW5ndGgpO2JyZWFrO2Nhc2UgIkJ1ZmZlckdlb21ldHJ5IjpnPWQucGFyc2UoaCk7YnJlYWs7Y2FzZSAiR2VvbWV0cnkiOmc9Yy5wYXJzZShoLHRoaXMudGV4dHVyZVBhdGgpLmdlb21ldHJ5O2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCdUSFJFRS5PYmplY3RMb2FkZXI6IFVuc3VwcG9ydGVkIGdlb21ldHJ5IHR5cGUgIicraC50eXBlKyciJyk7Y29udGludWV9Zy51dWlkPWgudXVpZDt2b2lkIDAhPT1oLm5hbWUmJihnLm5hbWU9aC5uYW1lKTsKYltoLnV1aWRdPWd9cmV0dXJuIGJ9LHBhcnNlTWF0ZXJpYWxzOmZ1bmN0aW9uKGEsYil7dmFyIGM9e307aWYodm9pZCAwIT09YSl7dmFyIGQ9bmV3IEhkO2Quc2V0VGV4dHVyZXMoYik7Zm9yKHZhciBlPTAsZj1hLmxlbmd0aDtlPGY7ZSsrKXt2YXIgZz1hW2VdO2lmKCJNdWx0aU1hdGVyaWFsIj09PWcudHlwZSl7Zm9yKHZhciBoPVtdLGs9MDtrPGcubWF0ZXJpYWxzLmxlbmd0aDtrKyspaC5wdXNoKGQucGFyc2UoZy5tYXRlcmlhbHNba10pKTtjW2cudXVpZF09aH1lbHNlIGNbZy51dWlkXT1kLnBhcnNlKGcpfX1yZXR1cm4gY30scGFyc2VBbmltYXRpb25zOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPUJhLnBhcnNlKGFbY10pO2IucHVzaChkKX1yZXR1cm4gYn0scGFyc2VJbWFnZXM6ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2QubWFuYWdlci5pdGVtU3RhcnQoYSk7cmV0dXJuIGcubG9hZChhLGZ1bmN0aW9uKCl7ZC5tYW5hZ2VyLml0ZW1FbmQoYSl9LAp2b2lkIDAsZnVuY3Rpb24oKXtkLm1hbmFnZXIuaXRlbUVuZChhKTtkLm1hbmFnZXIuaXRlbUVycm9yKGEpfSl9dmFyIGQ9dGhpcyxlPXt9O2lmKHZvaWQgMCE9PWEmJjA8YS5sZW5ndGgpe3ZhciBmPW5ldyBaZChiKSxnPW5ldyBWYyhmKTtnLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2Zvcih2YXIgZj0wLGg9YS5sZW5ndGg7ZjxoO2YrKyl7dmFyIGs9YVtmXSxsPS9eKFwvXC8pfChbYS16XSs6KFwvXC8pPykvaS50ZXN0KGsudXJsKT9rLnVybDpkLnRleHR1cmVQYXRoK2sudXJsO2Vbay51dWlkXT1jKGwpfX1yZXR1cm4gZX0scGFyc2VUZXh0dXJlczpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtpZigibnVtYmVyIj09PXR5cGVvZiBhKXJldHVybiBhO2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyLnBhcnNlVGV4dHVyZTogQ29uc3RhbnQgc2hvdWxkIGJlIGluIG51bWVyaWMgZm9ybS4iLGEpO3JldHVybiBiW2FdfXZhciBkPXt9O2lmKHZvaWQgMCE9PQphKWZvcih2YXIgZT0wLGY9YS5sZW5ndGg7ZTxmO2UrKyl7dmFyIGc9YVtlXTt2b2lkIDA9PT1nLmltYWdlJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogTm8gImltYWdlIiBzcGVjaWZpZWQgZm9yJyxnLnV1aWQpO3ZvaWQgMD09PWJbZy5pbWFnZV0mJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgaW1hZ2UiLGcuaW1hZ2UpO3ZhciBoPW5ldyBYKGJbZy5pbWFnZV0pO2gubmVlZHNVcGRhdGU9ITA7aC51dWlkPWcudXVpZDt2b2lkIDAhPT1nLm5hbWUmJihoLm5hbWU9Zy5uYW1lKTt2b2lkIDAhPT1nLm1hcHBpbmcmJihoLm1hcHBpbmc9YyhnLm1hcHBpbmcsbWcpKTt2b2lkIDAhPT1nLm9mZnNldCYmaC5vZmZzZXQuZnJvbUFycmF5KGcub2Zmc2V0KTt2b2lkIDAhPT1nLnJlcGVhdCYmaC5yZXBlYXQuZnJvbUFycmF5KGcucmVwZWF0KTt2b2lkIDAhPT1nLndyYXAmJihoLndyYXBTPWMoZy53cmFwWzBdLGdmKSxoLndyYXBUPWMoZy53cmFwWzFdLApnZikpO3ZvaWQgMCE9PWcubWluRmlsdGVyJiYoaC5taW5GaWx0ZXI9YyhnLm1pbkZpbHRlcixoZikpO3ZvaWQgMCE9PWcubWFnRmlsdGVyJiYoaC5tYWdGaWx0ZXI9YyhnLm1hZ0ZpbHRlcixoZikpO3ZvaWQgMCE9PWcuYW5pc290cm9weSYmKGguYW5pc290cm9weT1nLmFuaXNvdHJvcHkpO3ZvaWQgMCE9PWcuZmxpcFkmJihoLmZsaXBZPWcuZmxpcFkpO2RbZy51dWlkXT1ofXJldHVybiBkfSxwYXJzZU9iamVjdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBKO3JldHVybiBmdW5jdGlvbihiLGMsZCl7ZnVuY3Rpb24gZShhKXt2b2lkIDA9PT1jW2FdJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIGdlb21ldHJ5IixhKTtyZXR1cm4gY1thXX1mdW5jdGlvbiBmKGEpe2lmKHZvaWQgMCE9PWEpe2lmKEFycmF5LmlzQXJyYXkoYSkpe2Zvcih2YXIgYj1bXSxjPTAsZT1hLmxlbmd0aDtjPGU7YysrKXt2YXIgZj1hW2NdO3ZvaWQgMD09PWRbZl0mJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgbWF0ZXJpYWwiLApmKTtiLnB1c2goZFtmXSl9cmV0dXJuIGJ9dm9pZCAwPT09ZFthXSYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBtYXRlcmlhbCIsYSk7cmV0dXJuIGRbYV19fXZhciBnO3N3aXRjaChiLnR5cGUpe2Nhc2UgIlNjZW5lIjpnPW5ldyBtZDt2b2lkIDAhPT1iLmJhY2tncm91bmQmJk51bWJlci5pc0ludGVnZXIoYi5iYWNrZ3JvdW5kKSYmKGcuYmFja2dyb3VuZD1uZXcgSChiLmJhY2tncm91bmQpKTt2b2lkIDAhPT1iLmZvZyYmKCJGb2ciPT09Yi5mb2cudHlwZT9nLmZvZz1uZXcgTGIoYi5mb2cuY29sb3IsYi5mb2cubmVhcixiLmZvZy5mYXIpOiJGb2dFeHAyIj09PWIuZm9nLnR5cGUmJihnLmZvZz1uZXcgS2IoYi5mb2cuY29sb3IsYi5mb2cuZGVuc2l0eSkpKTticmVhaztjYXNlICJQZXJzcGVjdGl2ZUNhbWVyYSI6Zz1uZXcgeGEoYi5mb3YsYi5hc3BlY3QsYi5uZWFyLGIuZmFyKTt2b2lkIDAhPT1iLmZvY3VzJiYoZy5mb2N1cz1iLmZvY3VzKTt2b2lkIDAhPT0KYi56b29tJiYoZy56b29tPWIuem9vbSk7dm9pZCAwIT09Yi5maWxtR2F1Z2UmJihnLmZpbG1HYXVnZT1iLmZpbG1HYXVnZSk7dm9pZCAwIT09Yi5maWxtT2Zmc2V0JiYoZy5maWxtT2Zmc2V0PWIuZmlsbU9mZnNldCk7dm9pZCAwIT09Yi52aWV3JiYoZy52aWV3PU9iamVjdC5hc3NpZ24oe30sYi52aWV3KSk7YnJlYWs7Y2FzZSAiT3J0aG9ncmFwaGljQ2FtZXJhIjpnPW5ldyBKYihiLmxlZnQsYi5yaWdodCxiLnRvcCxiLmJvdHRvbSxiLm5lYXIsYi5mYXIpO2JyZWFrO2Nhc2UgIkFtYmllbnRMaWdodCI6Zz1uZXcgemQoYi5jb2xvcixiLmludGVuc2l0eSk7YnJlYWs7Y2FzZSAiRGlyZWN0aW9uYWxMaWdodCI6Zz1uZXcgeWQoYi5jb2xvcixiLmludGVuc2l0eSk7YnJlYWs7Y2FzZSAiUG9pbnRMaWdodCI6Zz1uZXcgd2QoYi5jb2xvcixiLmludGVuc2l0eSxiLmRpc3RhbmNlLGIuZGVjYXkpO2JyZWFrO2Nhc2UgIlJlY3RBcmVhTGlnaHQiOmc9bmV3IEFkKGIuY29sb3IsYi5pbnRlbnNpdHksCmIud2lkdGgsYi5oZWlnaHQpO2JyZWFrO2Nhc2UgIlNwb3RMaWdodCI6Zz1uZXcgdmQoYi5jb2xvcixiLmludGVuc2l0eSxiLmRpc3RhbmNlLGIuYW5nbGUsYi5wZW51bWJyYSxiLmRlY2F5KTticmVhaztjYXNlICJIZW1pc3BoZXJlTGlnaHQiOmc9bmV3IHRkKGIuY29sb3IsYi5ncm91bmRDb2xvcixiLmludGVuc2l0eSk7YnJlYWs7Y2FzZSAiU2tpbm5lZE1lc2giOmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyLnBhcnNlT2JqZWN0KCkgZG9lcyBub3Qgc3VwcG9ydCBTa2lubmVkTWVzaCB5ZXQuIik7Y2FzZSAiTWVzaCI6Zz1lKGIuZ2VvbWV0cnkpO3ZhciBoPWYoYi5tYXRlcmlhbCk7Zz1nLmJvbmVzJiYwPGcuYm9uZXMubGVuZ3RoP25ldyBvZChnLGgpOm5ldyBDYShnLGgpO2JyZWFrO2Nhc2UgIkxPRCI6Zz1uZXcgQmM7YnJlYWs7Y2FzZSAiTGluZSI6Zz1uZXcgeWEoZShiLmdlb21ldHJ5KSxmKGIubWF0ZXJpYWwpLGIubW9kZSk7YnJlYWs7Y2FzZSAiTGluZUxvb3AiOmc9Cm5ldyBwZChlKGIuZ2VvbWV0cnkpLGYoYi5tYXRlcmlhbCkpO2JyZWFrO2Nhc2UgIkxpbmVTZWdtZW50cyI6Zz1uZXcgZGEoZShiLmdlb21ldHJ5KSxmKGIubWF0ZXJpYWwpKTticmVhaztjYXNlICJQb2ludENsb3VkIjpjYXNlICJQb2ludHMiOmc9bmV3IE1iKGUoYi5nZW9tZXRyeSksZihiLm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSAiU3ByaXRlIjpnPW5ldyBBYyhmKGIubWF0ZXJpYWwpKTticmVhaztjYXNlICJHcm91cCI6Zz1uZXcgRGM7YnJlYWs7ZGVmYXVsdDpnPW5ldyBCfWcudXVpZD1iLnV1aWQ7dm9pZCAwIT09Yi5uYW1lJiYoZy5uYW1lPWIubmFtZSk7dm9pZCAwIT09Yi5tYXRyaXg/KGEuZnJvbUFycmF5KGIubWF0cml4KSxhLmRlY29tcG9zZShnLnBvc2l0aW9uLGcucXVhdGVybmlvbixnLnNjYWxlKSk6KHZvaWQgMCE9PWIucG9zaXRpb24mJmcucG9zaXRpb24uZnJvbUFycmF5KGIucG9zaXRpb24pLHZvaWQgMCE9PWIucm90YXRpb24mJmcucm90YXRpb24uZnJvbUFycmF5KGIucm90YXRpb24pLAp2b2lkIDAhPT1iLnF1YXRlcm5pb24mJmcucXVhdGVybmlvbi5mcm9tQXJyYXkoYi5xdWF0ZXJuaW9uKSx2b2lkIDAhPT1iLnNjYWxlJiZnLnNjYWxlLmZyb21BcnJheShiLnNjYWxlKSk7dm9pZCAwIT09Yi5jYXN0U2hhZG93JiYoZy5jYXN0U2hhZG93PWIuY2FzdFNoYWRvdyk7dm9pZCAwIT09Yi5yZWNlaXZlU2hhZG93JiYoZy5yZWNlaXZlU2hhZG93PWIucmVjZWl2ZVNoYWRvdyk7Yi5zaGFkb3cmJih2b2lkIDAhPT1iLnNoYWRvdy5iaWFzJiYoZy5zaGFkb3cuYmlhcz1iLnNoYWRvdy5iaWFzKSx2b2lkIDAhPT1iLnNoYWRvdy5yYWRpdXMmJihnLnNoYWRvdy5yYWRpdXM9Yi5zaGFkb3cucmFkaXVzKSx2b2lkIDAhPT1iLnNoYWRvdy5tYXBTaXplJiZnLnNoYWRvdy5tYXBTaXplLmZyb21BcnJheShiLnNoYWRvdy5tYXBTaXplKSx2b2lkIDAhPT1iLnNoYWRvdy5jYW1lcmEmJihnLnNoYWRvdy5jYW1lcmE9dGhpcy5wYXJzZU9iamVjdChiLnNoYWRvdy5jYW1lcmEpKSk7dm9pZCAwIT09CmIudmlzaWJsZSYmKGcudmlzaWJsZT1iLnZpc2libGUpO3ZvaWQgMCE9PWIudXNlckRhdGEmJihnLnVzZXJEYXRhPWIudXNlckRhdGEpO2lmKHZvaWQgMCE9PWIuY2hpbGRyZW4pZm9yKHZhciBrIGluIGIuY2hpbGRyZW4pZy5hZGQodGhpcy5wYXJzZU9iamVjdChiLmNoaWxkcmVuW2tdLGMsZCkpO2lmKCJMT0QiPT09Yi50eXBlKWZvcihiPWIubGV2ZWxzLGg9MDtoPGIubGVuZ3RoO2grKyl7dmFyIGw9YltoXTtrPWcuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgidXVpZCIsbC5vYmplY3QpO3ZvaWQgMCE9PWsmJmcuYWRkTGV2ZWwoayxsLmRpc3RhbmNlKX1yZXR1cm4gZ319KCl9KTt2YXIgbWc9e1VWTWFwcGluZzozMDAsQ3ViZVJlZmxlY3Rpb25NYXBwaW5nOjMwMSxDdWJlUmVmcmFjdGlvbk1hcHBpbmc6MzAyLEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOjMwMyxFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZzozMDQsU3BoZXJpY2FsUmVmbGVjdGlvbk1hcHBpbmc6MzA1LApDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzozMDYsQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6MzA3fSxnZj17UmVwZWF0V3JhcHBpbmc6MUUzLENsYW1wVG9FZGdlV3JhcHBpbmc6MTAwMSxNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOjEwMDJ9LGhmPXtOZWFyZXN0RmlsdGVyOjEwMDMsTmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXI6MTAwNCxOZWFyZXN0TWlwTWFwTGluZWFyRmlsdGVyOjEwMDUsTGluZWFyRmlsdGVyOjEwMDYsTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcjoxMDA3LExpbmVhck1pcE1hcExpbmVhckZpbHRlcjoxMDA4fTtPYmplY3QuYXNzaWduKG5hLnByb3RvdHlwZSx7Z2V0UG9pbnQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIik7cmV0dXJuIG51bGx9LGdldFBvaW50QXQ6ZnVuY3Rpb24oYSl7YT10aGlzLmdldFV0b1RtYXBwaW5nKGEpO3JldHVybiB0aGlzLmdldFBvaW50KGEpfSxnZXRQb2ludHM6ZnVuY3Rpb24oYSl7dm9pZCAwPT09CmEmJihhPTUpO2Zvcih2YXIgYj1bXSxjPTA7Yzw9YTtjKyspYi5wdXNoKHRoaXMuZ2V0UG9pbnQoYy9hKSk7cmV0dXJuIGJ9LGdldFNwYWNlZFBvaW50czpmdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT01KTtmb3IodmFyIGI9W10sYz0wO2M8PWE7YysrKWIucHVzaCh0aGlzLmdldFBvaW50QXQoYy9hKSk7cmV0dXJuIGJ9LGdldExlbmd0aDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0TGVuZ3RocygpO3JldHVybiBhW2EubGVuZ3RoLTFdfSxnZXRMZW5ndGhzOmZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKTtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09YSsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTt2YXIgYj1bXSxjLGQ9dGhpcy5nZXRQb2ludCgwKSxlLGY9MDtiLnB1c2goMCk7Zm9yKGU9MTtlPD1hO2UrKyljPQp0aGlzLmdldFBvaW50KGUvYSksZis9Yy5kaXN0YW5jZVRvKGQpLGIucHVzaChmKSxkPWM7cmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzPWJ9LHVwZGF0ZUFyY0xlbmd0aHM6ZnVuY3Rpb24oKXt0aGlzLm5lZWRzVXBkYXRlPSEwO3RoaXMuZ2V0TGVuZ3RocygpfSxnZXRVdG9UbWFwcGluZzpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0TGVuZ3RocygpLGQsZT1jLmxlbmd0aCxmO2Y9Yj9iOmEqY1tlLTFdO2Zvcih2YXIgZz0wLGg9ZS0xLGs7Zzw9aDspaWYoZD1NYXRoLmZsb29yKGcrKGgtZykvMiksaz1jW2RdLWYsMD5rKWc9ZCsxO2Vsc2UgaWYoMDxrKWg9ZC0xO2Vsc2V7aD1kO2JyZWFrfWQ9aDtpZihjW2RdPT09ZilyZXR1cm4gZC8oZS0xKTtnPWNbZF07cmV0dXJuKGQrKGYtZykvKGNbZCsxXS1nKSkvKGUtMSl9LGdldFRhbmdlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS0xRS00O2ErPTFFLTQ7MD5iJiYoYj0wKTsxPGEmJihhPTEpO2I9dGhpcy5nZXRQb2ludChiKTtyZXR1cm4gdGhpcy5nZXRQb2ludChhKS5jbG9uZSgpLnN1YihiKS5ub3JtYWxpemUoKX0sCmdldFRhbmdlbnRBdDpmdW5jdGlvbihhKXthPXRoaXMuZ2V0VXRvVG1hcHBpbmcoYSk7cmV0dXJuIHRoaXMuZ2V0VGFuZ2VudChhKX0sY29tcHV0ZUZyZW5ldEZyYW1lczpmdW5jdGlvbihhLGIpe3ZhciBjPW5ldyBwLGQ9W10sZT1bXSxmPVtdLGc9bmV3IHAsaD1uZXcgSixrLGw7Zm9yKGs9MDtrPD1hO2srKylsPWsvYSxkW2tdPXRoaXMuZ2V0VGFuZ2VudEF0KGwpLGRba10ubm9ybWFsaXplKCk7ZVswXT1uZXcgcDtmWzBdPW5ldyBwO2s9TnVtYmVyLk1BWF9WQUxVRTtsPU1hdGguYWJzKGRbMF0ueCk7dmFyIHU9TWF0aC5hYnMoZFswXS55KSxxPU1hdGguYWJzKGRbMF0ueik7bDw9ayYmKGs9bCxjLnNldCgxLDAsMCkpO3U8PWsmJihrPXUsYy5zZXQoMCwxLDApKTtxPD1rJiZjLnNldCgwLDAsMSk7Zy5jcm9zc1ZlY3RvcnMoZFswXSxjKS5ub3JtYWxpemUoKTtlWzBdLmNyb3NzVmVjdG9ycyhkWzBdLGcpO2ZbMF0uY3Jvc3NWZWN0b3JzKGRbMF0sZVswXSk7Zm9yKGs9MTtrPD1hO2srKyllW2tdPQplW2stMV0uY2xvbmUoKSxmW2tdPWZbay0xXS5jbG9uZSgpLGcuY3Jvc3NWZWN0b3JzKGRbay0xXSxkW2tdKSxnLmxlbmd0aCgpPk51bWJlci5FUFNJTE9OJiYoZy5ub3JtYWxpemUoKSxjPU1hdGguYWNvcyhZLmNsYW1wKGRbay0xXS5kb3QoZFtrXSksLTEsMSkpLGVba10uYXBwbHlNYXRyaXg0KGgubWFrZVJvdGF0aW9uQXhpcyhnLGMpKSksZltrXS5jcm9zc1ZlY3RvcnMoZFtrXSxlW2tdKTtpZighMD09PWIpZm9yKGM9TWF0aC5hY29zKFkuY2xhbXAoZVswXS5kb3QoZVthXSksLTEsMSkpLGMvPWEsMDxkWzBdLmRvdChnLmNyb3NzVmVjdG9ycyhlWzBdLGVbYV0pKSYmKGM9LWMpLGs9MTtrPD1hO2srKyllW2tdLmFwcGx5TWF0cml4NChoLm1ha2VSb3RhdGlvbkF4aXMoZFtrXSxjKmspKSxmW2tdLmNyb3NzVmVjdG9ycyhkW2tdLGVba10pO3JldHVybnt0YW5nZW50czpkLG5vcm1hbHM6ZSxiaW5vcm1hbHM6Zn19fSk7U2EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTsKU2EucHJvdG90eXBlLmNvbnN0cnVjdG9yPVNhO1NhLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDtTYS5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYSl7aWYoMT09PWEpcmV0dXJuIHRoaXMudjIuY2xvbmUoKTt2YXIgYj10aGlzLnYyLmNsb25lKCkuc3ViKHRoaXMudjEpO2IubXVsdGlwbHlTY2FsYXIoYSkuYWRkKHRoaXMudjEpO3JldHVybiBifTtTYS5wcm90b3R5cGUuZ2V0UG9pbnRBdD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nZXRQb2ludChhKX07U2EucHJvdG90eXBlLmdldFRhbmdlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMudjIuY2xvbmUoKS5zdWIodGhpcy52MSkubm9ybWFsaXplKCl9O1ljLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6WWMsYWRkOmZ1bmN0aW9uKGEpe3RoaXMuY3VydmVzLnB1c2goYSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY3VydmVzWzBdLmdldFBvaW50KDApLApiPXRoaXMuY3VydmVzW3RoaXMuY3VydmVzLmxlbmd0aC0xXS5nZXRQb2ludCgxKTthLmVxdWFscyhiKXx8dGhpcy5jdXJ2ZXMucHVzaChuZXcgU2EoYixhKSl9LGdldFBvaW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEqdGhpcy5nZXRMZW5ndGgoKSxjPXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7Zm9yKGE9MDthPGMubGVuZ3RoOyl7aWYoY1thXT49YilyZXR1cm4gYj1jW2FdLWIsYT10aGlzLmN1cnZlc1thXSxjPWEuZ2V0TGVuZ3RoKCksYS5nZXRQb2ludEF0KDA9PT1jPzA6MS1iL2MpO2ErK31yZXR1cm4gbnVsbH0sZ2V0TGVuZ3RoOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtyZXR1cm4gYVthLmxlbmd0aC0xXX0sdXBkYXRlQXJjTGVuZ3RoczpmdW5jdGlvbigpe3RoaXMubmVlZHNVcGRhdGU9ITA7dGhpcy5jYWNoZUxlbmd0aHM9bnVsbDt0aGlzLmdldEN1cnZlTGVuZ3RocygpfSxnZXRDdXJ2ZUxlbmd0aHM6ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlTGVuZ3RocyYmCnRoaXMuY2FjaGVMZW5ndGhzLmxlbmd0aD09PXRoaXMuY3VydmVzLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM7Zm9yKHZhciBhPVtdLGI9MCxjPTAsZD10aGlzLmN1cnZlcy5sZW5ndGg7YzxkO2MrKyliKz10aGlzLmN1cnZlc1tjXS5nZXRMZW5ndGgoKSxhLnB1c2goYik7cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzPWF9LGdldFNwYWNlZFBvaW50czpmdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT00MCk7Zm9yKHZhciBiPVtdLGM9MDtjPD1hO2MrKyliLnB1c2godGhpcy5nZXRQb2ludChjL2EpKTt0aGlzLmF1dG9DbG9zZSYmYi5wdXNoKGJbMF0pO3JldHVybiBifSxnZXRQb2ludHM6ZnVuY3Rpb24oYSl7YT1hfHwxMjtmb3IodmFyIGI9W10sYyxkPTAsZT10aGlzLmN1cnZlcztkPGUubGVuZ3RoO2QrKylmb3IodmFyIGY9ZVtkXSxmPWYuZ2V0UG9pbnRzKGYmJmYuaXNFbGxpcHNlQ3VydmU/MiphOmYmJmYuaXNMaW5lQ3VydmU/MTpmJiZmLmlzU3BsaW5lQ3VydmU/YSpmLnBvaW50cy5sZW5ndGg6CmEpLGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIGg9ZltnXTtjJiZjLmVxdWFscyhoKXx8KGIucHVzaChoKSxjPWgpfXRoaXMuYXV0b0Nsb3NlJiYxPGIubGVuZ3RoJiYhYltiLmxlbmd0aC0xXS5lcXVhbHMoYlswXSkmJmIucHVzaChiWzBdKTtyZXR1cm4gYn0sY3JlYXRlUG9pbnRzR2VvbWV0cnk6ZnVuY3Rpb24oYSl7YT10aGlzLmdldFBvaW50cyhhKTtyZXR1cm4gdGhpcy5jcmVhdGVHZW9tZXRyeShhKX0sY3JlYXRlU3BhY2VkUG9pbnRzR2VvbWV0cnk6ZnVuY3Rpb24oYSl7YT10aGlzLmdldFNwYWNlZFBvaW50cyhhKTtyZXR1cm4gdGhpcy5jcmVhdGVHZW9tZXRyeShhKX0sY3JlYXRlR2VvbWV0cnk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPW5ldyBNLGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspe3ZhciBlPWFbY107Yi52ZXJ0aWNlcy5wdXNoKG5ldyBwKGUueCxlLnksZS56fHwwKSl9cmV0dXJuIGJ9fSk7WGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTtYYS5wcm90b3R5cGUuY29uc3RydWN0b3I9ClhhO1hhLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMDtYYS5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTIqTWF0aC5QSSxjPXRoaXMuYUVuZEFuZ2xlLXRoaXMuYVN0YXJ0QW5nbGUsZD1NYXRoLmFicyhjKTxOdW1iZXIuRVBTSUxPTjswPmM7KWMrPWI7Zm9yKDtjPmI7KWMtPWI7YzxOdW1iZXIuRVBTSUxPTiYmKGM9ZD8wOmIpOyEwIT09dGhpcy5hQ2xvY2t3aXNlfHxkfHwoYz1jPT09Yj8tYjpjLWIpO2I9dGhpcy5hU3RhcnRBbmdsZSthKmM7YT10aGlzLmFYK3RoaXMueFJhZGl1cypNYXRoLmNvcyhiKTt2YXIgZT10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihiKTswIT09dGhpcy5hUm90YXRpb24mJihiPU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxjPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxkPWEtdGhpcy5hWCxlLT10aGlzLmFZLGE9ZCpiLWUqYyt0aGlzLmFYLGU9ZCpjK2UqYit0aGlzLmFZKTtyZXR1cm4gbmV3IEQoYSxlKX07emIucHJvdG90eXBlPQpPYmplY3QuY3JlYXRlKG5hLnByb3RvdHlwZSk7emIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXpiO3piLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO3piLnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnBvaW50cyxjPShiLmxlbmd0aC0xKSphO2E9TWF0aC5mbG9vcihjKTt2YXIgYz1jLWEsZD1iWzA9PT1hP2E6YS0xXSxlPWJbYV0sZj1iW2E+Yi5sZW5ndGgtMj9iLmxlbmd0aC0xOmErMV0sYj1iW2E+Yi5sZW5ndGgtMz9iLmxlbmd0aC0xOmErMl07cmV0dXJuIG5ldyBEKFNlKGMsZC54LGUueCxmLngsYi54KSxTZShjLGQueSxlLnksZi55LGIueSkpfTtoYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuYS5wcm90b3R5cGUpO2hjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1oYztoYy5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy52MCxjPXRoaXMudjEsZD10aGlzLnYyLGU9dGhpcy52MztyZXR1cm4gbmV3IEQoeWIoYSxiLngsYy54LApkLngsZS54KSx5YihhLGIueSxjLnksZC55LGUueSkpfTtpYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuYS5wcm90b3R5cGUpO2ljLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1pYztpYy5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy52MCxjPXRoaXMudjEsZD10aGlzLnYyO3JldHVybiBuZXcgRCh4YihhLGIueCxjLngsZC54KSx4YihhLGIueSxjLnksZC55KSl9O3ZhciB1ZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoWWMucHJvdG90eXBlKSx7ZnJvbVBvaW50czpmdW5jdGlvbihhKXt0aGlzLm1vdmVUbyhhWzBdLngsYVswXS55KTtmb3IodmFyIGI9MSxjPWEubGVuZ3RoO2I8YztiKyspdGhpcy5saW5lVG8oYVtiXS54LGFbYl0ueSl9LG1vdmVUbzpmdW5jdGlvbihhLGIpe3RoaXMuY3VycmVudFBvaW50LnNldChhLGIpfSxsaW5lVG86ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgU2EodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgRChhLGIpKTsKdGhpcy5jdXJ2ZXMucHVzaChjKTt0aGlzLmN1cnJlbnRQb2ludC5zZXQoYSxiKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihhLGIsYyxkKXthPW5ldyBpYyh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBEKGEsYiksbmV3IEQoYyxkKSk7dGhpcy5jdXJ2ZXMucHVzaChhKTt0aGlzLmN1cnJlbnRQb2ludC5zZXQoYyxkKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihhLGIsYyxkLGUsZil7YT1uZXcgaGModGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgRChhLGIpLG5ldyBEKGMsZCksbmV3IEQoZSxmKSk7dGhpcy5jdXJ2ZXMucHVzaChhKTt0aGlzLmN1cnJlbnRQb2ludC5zZXQoZSxmKX0sc3BsaW5lVGhydTpmdW5jdGlvbihhKXt2YXIgYj1bdGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKV0uY29uY2F0KGEpLGI9bmV3IHpiKGIpO3RoaXMuY3VydmVzLnB1c2goYik7dGhpcy5jdXJyZW50UG9pbnQuY29weShhW2EubGVuZ3RoLTFdKX0sYXJjOmZ1bmN0aW9uKGEsYixjLGQsCmUsZil7dGhpcy5hYnNhcmMoYSt0aGlzLmN1cnJlbnRQb2ludC54LGIrdGhpcy5jdXJyZW50UG9pbnQueSxjLGQsZSxmKX0sYWJzYXJjOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmFic2VsbGlwc2UoYSxiLGMsYyxkLGUsZil9LGVsbGlwc2U6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXt0aGlzLmFic2VsbGlwc2UoYSt0aGlzLmN1cnJlbnRQb2ludC54LGIrdGhpcy5jdXJyZW50UG9pbnQueSxjLGQsZSxmLGcsaCl9LGFic2VsbGlwc2U6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXthPW5ldyBYYShhLGIsYyxkLGUsZixnLGgpOzA8dGhpcy5jdXJ2ZXMubGVuZ3RoJiYoYj1hLmdldFBvaW50KDApLGIuZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KXx8dGhpcy5saW5lVG8oYi54LGIueSkpO3RoaXMuY3VydmVzLnB1c2goYSk7YT1hLmdldFBvaW50KDEpO3RoaXMuY3VycmVudFBvaW50LmNvcHkoYSl9fSk7WmMucHJvdG90eXBlPXVlO3VlLmNvbnN0cnVjdG9yPVpjO0FiLnByb3RvdHlwZT0KT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHVlKSx7Y29uc3RydWN0b3I6QWIsZ2V0UG9pbnRzSG9sZXM6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MCxkPXRoaXMuaG9sZXMubGVuZ3RoO2M8ZDtjKyspYltjXT10aGlzLmhvbGVzW2NdLmdldFBvaW50cyhhKTtyZXR1cm4gYn0sZXh0cmFjdEFsbFBvaW50czpmdW5jdGlvbihhKXtyZXR1cm57c2hhcGU6dGhpcy5nZXRQb2ludHMoYSksaG9sZXM6dGhpcy5nZXRQb2ludHNIb2xlcyhhKX19LGV4dHJhY3RQb2ludHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZXh0cmFjdEFsbFBvaW50cyhhKX19KTtPYmplY3QuYXNzaWduKGRlLnByb3RvdHlwZSx7bW92ZVRvOmZ1bmN0aW9uKGEsYil7dGhpcy5jdXJyZW50UGF0aD1uZXcgWmM7dGhpcy5zdWJQYXRocy5wdXNoKHRoaXMuY3VycmVudFBhdGgpO3RoaXMuY3VycmVudFBhdGgubW92ZVRvKGEsYil9LGxpbmVUbzpmdW5jdGlvbihhLGIpe3RoaXMuY3VycmVudFBhdGgubGluZVRvKGEsCmIpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuY3VycmVudFBhdGgucXVhZHJhdGljQ3VydmVUbyhhLGIsYyxkKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5jdXJyZW50UGF0aC5iZXppZXJDdXJ2ZVRvKGEsYixjLGQsZSxmKX0sc3BsaW5lVGhydTpmdW5jdGlvbihhKXt0aGlzLmN1cnJlbnRQYXRoLnNwbGluZVRocnUoYSl9LHRvU2hhcGVzOmZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtmb3IodmFyIGI9W10sYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKyl7dmFyIGU9YVtjXSxmPW5ldyBBYjtmLmN1cnZlcz1lLmN1cnZlcztiLnB1c2goZil9cmV0dXJuIGJ9ZnVuY3Rpb24gZChhLGIpe2Zvcih2YXIgYz1iLmxlbmd0aCxkPSExLGU9Yy0xLGY9MDtmPGM7ZT1mKyspe3ZhciBnPWJbZV0saD1iW2ZdLGs9aC54LWcueCxsPWgueS1nLnk7aWYoTWF0aC5hYnMobCk+TnVtYmVyLkVQU0lMT04pe2lmKDA+bCYmKGc9YltmXSxrPS1rLApoPWJbZV0sbD0tbCksIShhLnk8Zy55fHxhLnk+aC55KSlpZihhLnk9PT1nLnkpe2lmKGEueD09PWcueClyZXR1cm4hMH1lbHNle2U9bCooYS54LWcueCktayooYS55LWcueSk7aWYoMD09PWUpcmV0dXJuITA7MD5lfHwoZD0hZCl9fWVsc2UgaWYoYS55PT09Zy55JiYoaC54PD1hLngmJmEueDw9Zy54fHxnLng8PWEueCYmYS54PD1oLngpKXJldHVybiEwfXJldHVybiBkfXZhciBlPXphLmlzQ2xvY2tXaXNlLGY9dGhpcy5zdWJQYXRocztpZigwPT09Zi5sZW5ndGgpcmV0dXJuW107aWYoITA9PT1iKXJldHVybiBjKGYpO3ZhciBnLGgsayxsPVtdO2lmKDE9PT1mLmxlbmd0aClyZXR1cm4gaD1mWzBdLGs9bmV3IEFiLGsuY3VydmVzPWguY3VydmVzLGwucHVzaChrKSxsO3ZhciBwPSFlKGZbMF0uZ2V0UG9pbnRzKCkpLHA9YT8hcDpwO2s9W107dmFyIHE9W10sbj1bXSxyPTAsejtxW3JdPXZvaWQgMDtuW3JdPVtdO2Zvcih2YXIgdD0wLHk9Zi5sZW5ndGg7dDx5O3QrKyloPWZbdF0sej1oLmdldFBvaW50cygpLApnPWUoeiksKGc9YT8hZzpnKT8oIXAmJnFbcl0mJnIrKyxxW3JdPXtzOm5ldyBBYixwOnp9LHFbcl0ucy5jdXJ2ZXM9aC5jdXJ2ZXMscCYmcisrLG5bcl09W10pOm5bcl0ucHVzaCh7aDpoLHA6elswXX0pO2lmKCFxWzBdKXJldHVybiBjKGYpO2lmKDE8cS5sZW5ndGgpe3Q9ITE7aD1bXTtlPTA7Zm9yKGY9cS5sZW5ndGg7ZTxmO2UrKylrW2VdPVtdO2U9MDtmb3IoZj1xLmxlbmd0aDtlPGY7ZSsrKWZvcihnPW5bZV0scD0wO3A8Zy5sZW5ndGg7cCsrKXtyPWdbcF07ej0hMDtmb3IoeT0wO3k8cS5sZW5ndGg7eSsrKWQoci5wLHFbeV0ucCkmJihlIT09eSYmaC5wdXNoKHtmcm9tczplLHRvczp5LGhvbGU6cH0pLHo/KHo9ITEsa1t5XS5wdXNoKHIpKTp0PSEwKTt6JiZrW2VdLnB1c2gocil9MDxoLmxlbmd0aCYmKHR8fChuPWspKX10PTA7Zm9yKGU9cS5sZW5ndGg7dDxlO3QrKylmb3Ioaz1xW3RdLnMsbC5wdXNoKGspLGg9blt0XSxmPTAsZz1oLmxlbmd0aDtmPGc7ZisrKWsuaG9sZXMucHVzaChoW2ZdLmgpOwpyZXR1cm4gbH19KTtPYmplY3QuYXNzaWduKGVlLnByb3RvdHlwZSx7aXNGb250OiEwLGdlbmVyYXRlU2hhcGVzOmZ1bmN0aW9uKGEsYixjKXt2b2lkIDA9PT1iJiYoYj0xMDApO3ZvaWQgMD09PWMmJihjPTQpO3ZhciBkPXRoaXMuZGF0YTthPVN0cmluZyhhKS5zcGxpdCgiIik7dmFyIGU9Yi9kLnJlc29sdXRpb24sZj0oZC5ib3VuZGluZ0JveC55TWF4LWQuYm91bmRpbmdCb3gueU1pbitkLnVuZGVybGluZVRoaWNrbmVzcykqZSxnPTAsaD0wO2I9W107Zm9yKHZhciBrPTA7azxhLmxlbmd0aDtrKyspe3ZhciBsPWFba107aWYoIlxuIj09PWwpZz0wLGgtPWY7ZWxzZXt2YXIgcDtwPWU7dmFyIHE9ZyxuPWg7aWYobD1kLmdseXBoc1tsXXx8ZC5nbHlwaHNbIj8iXSl7dmFyIHI9bmV3IGRlLHo9W10sdCx5LHgsdixCLHcsQyxEO2lmKGwubylmb3IodmFyIEU9bC5fY2FjaGVkT3V0bGluZXx8KGwuX2NhY2hlZE91dGxpbmU9bC5vLnNwbGl0KCIgIikpLEY9MCxJPUUubGVuZ3RoO0Y8STspc3dpdGNoKEVbRisrXSl7Y2FzZSAibSI6dD0KRVtGKytdKnArcTt5PUVbRisrXSpwK247ci5tb3ZlVG8odCx5KTticmVhaztjYXNlICJsIjp0PUVbRisrXSpwK3E7eT1FW0YrK10qcCtuO3IubGluZVRvKHQseSk7YnJlYWs7Y2FzZSAicSI6dD1FW0YrK10qcCtxO3k9RVtGKytdKnArbjtCPUVbRisrXSpwK3E7dz1FW0YrK10qcCtuO3IucXVhZHJhdGljQ3VydmVUbyhCLHcsdCx5KTtpZih2PXpbei5sZW5ndGgtMV0pe3g9di54O3Y9di55O2Zvcih2YXIgSD0xO0g8PWM7SCsrKXt2YXIgSj1IL2M7eGIoSix4LEIsdCk7eGIoSix2LHcseSl9fWJyZWFrO2Nhc2UgImIiOmlmKHQ9RVtGKytdKnArcSx5PUVbRisrXSpwK24sQj1FW0YrK10qcCtxLHc9RVtGKytdKnArbixDPUVbRisrXSpwK3EsRD1FW0YrK10qcCtuLHIuYmV6aWVyQ3VydmVUbyhCLHcsQyxELHQseSksdj16W3oubGVuZ3RoLTFdKWZvcih4PXYueCx2PXYueSxIPTE7SDw9YztIKyspSj1IL2MseWIoSix4LEIsQyx0KSx5YihKLHYsdyxELHkpfXA9e29mZnNldFg6bC5oYSpwLHBhdGg6cn19ZWxzZSBwPQp2b2lkIDA7Zys9cC5vZmZzZXRYO2IucHVzaChwLnBhdGgpfX1jPVtdO2Q9MDtmb3IoYT1iLmxlbmd0aDtkPGE7ZCsrKUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGMsYltkXS50b1NoYXBlcygpKTtyZXR1cm4gY319KTtPYmplY3QuYXNzaWduKFRlLnByb3RvdHlwZSx7bG9hZDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzOyhuZXcgdWEodGhpcy5tYW5hZ2VyKSkubG9hZChhLGZ1bmN0aW9uKGEpe3ZhciBjO3RyeXtjPUpTT04ucGFyc2UoYSl9Y2F0Y2goZCl7Y29uc29sZS53YXJuKCJUSFJFRS5Gb250TG9hZGVyOiB0eXBlZmFjZS5qcyBzdXBwb3J0IGlzIGJlaW5nIGRlcHJlY2F0ZWQuIFVzZSB0eXBlZmFjZS5qc29uIGluc3RlYWQuIiksYz1KU09OLnBhcnNlKGEuc3Vic3RyaW5nKDY1LGEubGVuZ3RoLTIpKX1hPWUucGFyc2UoYyk7YiYmYihhKX0sYyxkKX0scGFyc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBlZShhKX19KTt2YXIgT2QsaWU9e2dldENvbnRleHQ6ZnVuY3Rpb24oKXt2b2lkIDA9PT0KT2QmJihPZD1uZXcgKHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKTtyZXR1cm4gT2R9LHNldENvbnRleHQ6ZnVuY3Rpb24oYSl7T2Q9YX19O09iamVjdC5hc3NpZ24oZmUucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW5ldyB1YSh0aGlzLm1hbmFnZXIpO2Uuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpO2UubG9hZChhLGZ1bmN0aW9uKGEpe2llLmdldENvbnRleHQoKS5kZWNvZGVBdWRpb0RhdGEoYSxmdW5jdGlvbihhKXtiKGEpfSl9LGMsZCl9fSk7T2JqZWN0LmFzc2lnbihVZS5wcm90b3R5cGUse3VwZGF0ZTpmdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZixnLGgsaz1uZXcgSixsPW5ldyBKO3JldHVybiBmdW5jdGlvbihwKXtpZihhIT09dGhpc3x8YiE9PXAuZm9jdXN8fGMhPT1wLmZvdnx8ZCE9PXAuYXNwZWN0KnRoaXMuYXNwZWN0fHxlIT09cC5uZWFyfHxmIT09cC5mYXJ8fGchPT1wLnpvb218fGghPT10aGlzLmV5ZVNlcCl7YT0KdGhpcztiPXAuZm9jdXM7Yz1wLmZvdjtkPXAuYXNwZWN0KnRoaXMuYXNwZWN0O2U9cC5uZWFyO2Y9cC5mYXI7Zz1wLnpvb207dmFyIHE9cC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7aD10aGlzLmV5ZVNlcC8yO3ZhciBuPWgqZS9iLHI9ZSpNYXRoLnRhbihZLkRFRzJSQUQqYyouNSkvZyx6LHQ7bC5lbGVtZW50c1sxMl09LWg7ay5lbGVtZW50c1sxMl09aDt6PS1yKmQrbjt0PXIqZCtuO3EuZWxlbWVudHNbMF09MiplLyh0LXopO3EuZWxlbWVudHNbOF09KHQreikvKHQteik7dGhpcy5jYW1lcmFMLnByb2plY3Rpb25NYXRyaXguY29weShxKTt6PS1yKmQtbjt0PXIqZC1uO3EuZWxlbWVudHNbMF09MiplLyh0LXopO3EuZWxlbWVudHNbOF09KHQreikvKHQteik7dGhpcy5jYW1lcmFSLnByb2plY3Rpb25NYXRyaXguY29weShxKX10aGlzLmNhbWVyYUwubWF0cml4V29ybGQuY29weShwLm1hdHJpeFdvcmxkKS5tdWx0aXBseShsKTt0aGlzLmNhbWVyYVIubWF0cml4V29ybGQuY29weShwLm1hdHJpeFdvcmxkKS5tdWx0aXBseShrKX19KCl9KTsKSWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpO0lkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1JZDtnZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmdlLGlzQXJyYXlDYW1lcmE6ITB9KTtoZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6aGUsZ2V0SW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYWlufSxyZW1vdmVGaWx0ZXI6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5maWx0ZXImJih0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmZpbHRlciksdGhpcy5maWx0ZXIuZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5maWx0ZXI9bnVsbCl9LGdldEZpbHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbHRlcn0sc2V0RmlsdGVyOmZ1bmN0aW9uKGEpe251bGwhPT0KdGhpcy5maWx0ZXI/KHRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbikpOnRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbik7dGhpcy5maWx0ZXI9YTt0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmZpbHRlcik7dGhpcy5maWx0ZXIuY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pfSxnZXRNYXN0ZXJWb2x1bWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9LHNldE1hc3RlclZvbHVtZTpmdW5jdGlvbihhKXt0aGlzLmdhaW4uZ2Fpbi52YWx1ZT1hfSx1cGRhdGVNYXRyaXhXb3JsZDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHFhLGM9bmV3IHAsZD1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oZSl7Qi5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCh0aGlzLGUpO2U9dGhpcy5jb250ZXh0Lmxpc3RlbmVyO3ZhciBmPQp0aGlzLnVwO3RoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGEsYixjKTtkLnNldCgwLDAsLTEpLmFwcGx5UXVhdGVybmlvbihiKTtlLnBvc2l0aW9uWD8oZS5wb3NpdGlvblguc2V0VmFsdWVBdFRpbWUoYS54LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS5wb3NpdGlvblkuc2V0VmFsdWVBdFRpbWUoYS55LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS5wb3NpdGlvblouc2V0VmFsdWVBdFRpbWUoYS56LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS5mb3J3YXJkWC5zZXRWYWx1ZUF0VGltZShkLngsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lKSxlLmZvcndhcmRZLnNldFZhbHVlQXRUaW1lKGQueSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpLGUuZm9yd2FyZFouc2V0VmFsdWVBdFRpbWUoZC56LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS51cFguc2V0VmFsdWVBdFRpbWUoZi54LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS51cFkuc2V0VmFsdWVBdFRpbWUoZi55LAp0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpLGUudXBaLnNldFZhbHVlQXRUaW1lKGYueix0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpKTooZS5zZXRQb3NpdGlvbihhLngsYS55LGEueiksZS5zZXRPcmllbnRhdGlvbihkLngsZC55LGQueixmLngsZi55LGYueikpfX0oKX0pO2pjLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpqYyxnZXRPdXRwdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYWlufSxzZXROb2RlU291cmNlOmZ1bmN0aW9uKGEpe3RoaXMuaGFzUGxheWJhY2tDb250cm9sPSExO3RoaXMuc291cmNlVHlwZT0iYXVkaW9Ob2RlIjt0aGlzLnNvdXJjZT1hO3RoaXMuY29ubmVjdCgpO3JldHVybiB0aGlzfSxzZXRCdWZmZXI6ZnVuY3Rpb24oYSl7dGhpcy5idWZmZXI9YTt0aGlzLnNvdXJjZVR5cGU9ImJ1ZmZlciI7dGhpcy5hdXRvcGxheSYmdGhpcy5wbGF5KCk7cmV0dXJuIHRoaXN9LHBsYXk6ZnVuY3Rpb24oKXtpZighMD09PQp0aGlzLmlzUGxheWluZyljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiBBdWRpbyBpcyBhbHJlYWR5IHBsYXlpbmcuIik7ZWxzZSBpZighMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKWNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7ZWxzZXt2YXIgYT10aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7YS5idWZmZXI9dGhpcy5idWZmZXI7YS5sb29wPXRoaXMubG9vcDthLm9uZW5kZWQ9dGhpcy5vbkVuZGVkLmJpbmQodGhpcyk7YS5wbGF5YmFja1JhdGUuc2V0VmFsdWVBdFRpbWUodGhpcy5wbGF5YmFja1JhdGUsdGhpcy5zdGFydFRpbWUpO2Euc3RhcnQoMCx0aGlzLnN0YXJ0VGltZSk7dGhpcy5pc1BsYXlpbmc9ITA7dGhpcy5zb3VyY2U9YTtyZXR1cm4gdGhpcy5jb25uZWN0KCl9fSxwYXVzZTpmdW5jdGlvbigpe2lmKCExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTsKZWxzZSByZXR1cm4gdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc3RhcnRUaW1lPXRoaXMuY29udGV4dC5jdXJyZW50VGltZSx0aGlzLmlzUGxheWluZz0hMSx0aGlzfSxzdG9wOmZ1bmN0aW9uKCl7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO2Vsc2UgcmV0dXJuIHRoaXMuc291cmNlLnN0b3AoKSx0aGlzLnN0YXJ0VGltZT0wLHRoaXMuaXNQbGF5aW5nPSExLHRoaXN9LGNvbm5lY3Q6ZnVuY3Rpb24oKXtpZigwPHRoaXMuZmlsdGVycy5sZW5ndGgpe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IodmFyIGE9MSxiPXRoaXMuZmlsdGVycy5sZW5ndGg7YTxiO2ErKyl0aGlzLmZpbHRlcnNbYS0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1thXSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7CnJldHVybiB0aGlzfSxkaXNjb25uZWN0OmZ1bmN0aW9uKCl7aWYoMDx0aGlzLmZpbHRlcnMubGVuZ3RoKXt0aGlzLnNvdXJjZS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1swXSk7Zm9yKHZhciBhPTEsYj10aGlzLmZpbHRlcnMubGVuZ3RoO2E8YjthKyspdGhpcy5maWx0ZXJzW2EtMV0uZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbYV0pO3RoaXMuZmlsdGVyc1t0aGlzLmZpbHRlcnMubGVuZ3RoLTFdLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSl9ZWxzZSB0aGlzLnNvdXJjZS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpO3JldHVybiB0aGlzfSxnZXRGaWx0ZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsdGVyc30sc2V0RmlsdGVyczpmdW5jdGlvbihhKXthfHwoYT1bXSk7ITA9PT10aGlzLmlzUGxheWluZz8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPWEsdGhpcy5jb25uZWN0KCkpOnRoaXMuZmlsdGVycz1hO3JldHVybiB0aGlzfSxnZXRGaWx0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJzKClbMF19LApzZXRGaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyhhP1thXTpbXSl9LHNldFBsYXliYWNrUmF0ZTpmdW5jdGlvbihhKXtpZighMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKWNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7ZWxzZSByZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9YSwhMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VmFsdWVBdFRpbWUodGhpcy5wbGF5YmFja1JhdGUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lKSx0aGlzfSxnZXRQbGF5YmFja1JhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9LG9uRW5kZWQ6ZnVuY3Rpb24oKXt0aGlzLmlzUGxheWluZz0hMX0sZ2V0TG9vcDpmdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2w/KGNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIiksCiExKTp0aGlzLmxvb3B9LHNldExvb3A6ZnVuY3Rpb24oYSl7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO2Vsc2UgcmV0dXJuIHRoaXMubG9vcD1hLCEwPT09dGhpcy5pc1BsYXlpbmcmJih0aGlzLnNvdXJjZS5sb29wPXRoaXMubG9vcCksdGhpc30sZ2V0Vm9sdW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnZhbHVlfSxzZXRWb2x1bWU6ZnVuY3Rpb24oYSl7dGhpcy5nYWluLmdhaW4udmFsdWU9YTtyZXR1cm4gdGhpc319KTtqZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGpjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmplLGdldE91dHB1dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbm5lcn0sZ2V0UmVmRGlzdGFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYW5uZXIucmVmRGlzdGFuY2V9LHNldFJlZkRpc3RhbmNlOmZ1bmN0aW9uKGEpe3RoaXMucGFubmVyLnJlZkRpc3RhbmNlPQphfSxnZXRSb2xsb2ZmRmFjdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFubmVyLnJvbGxvZmZGYWN0b3J9LHNldFJvbGxvZmZGYWN0b3I6ZnVuY3Rpb24oYSl7dGhpcy5wYW5uZXIucm9sbG9mZkZhY3Rvcj1hfSxnZXREaXN0YW5jZU1vZGVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFubmVyLmRpc3RhbmNlTW9kZWx9LHNldERpc3RhbmNlTW9kZWw6ZnVuY3Rpb24oYSl7dGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbD1hfSxnZXRNYXhEaXN0YW5jZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbm5lci5tYXhEaXN0YW5jZX0sc2V0TWF4RGlzdGFuY2U6ZnVuY3Rpb24oYSl7dGhpcy5wYW5uZXIubWF4RGlzdGFuY2U9YX0sdXBkYXRlTWF0cml4V29ybGQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYil7Qi5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCh0aGlzLGIpO2Euc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpO3RoaXMucGFubmVyLnNldFBvc2l0aW9uKGEueCwKYS55LGEueil9fSgpfSk7T2JqZWN0LmFzc2lnbihrZS5wcm90b3R5cGUse2dldEZyZXF1ZW5jeURhdGE6ZnVuY3Rpb24oKXt0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSk7cmV0dXJuIHRoaXMuZGF0YX0sZ2V0QXZlcmFnZUZyZXF1ZW5jeTpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCksYz0wO2M8Yi5sZW5ndGg7YysrKWErPWJbY107cmV0dXJuIGEvYi5sZW5ndGh9fSk7T2JqZWN0LmFzc2lnbihsZS5wcm90b3R5cGUse2FjY3VtdWxhdGU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmJ1ZmZlcixkPXRoaXMudmFsdWVTaXplLGU9YSpkK2QsZj10aGlzLmN1bXVsYXRpdmVXZWlnaHQ7aWYoMD09PWYpe2ZvcihmPTA7ZiE9PWQ7KytmKWNbZStmXT1jW2ZdO2Y9Yn1lbHNlIGYrPWIsdGhpcy5fbWl4QnVmZmVyUmVnaW9uKGMsZSwwLGIvZixkKTt0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9Zn0sYXBwbHk6ZnVuY3Rpb24oYSl7dmFyIGI9CnRoaXMudmFsdWVTaXplLGM9dGhpcy5idWZmZXI7YT1hKmIrYjt2YXIgZD10aGlzLmN1bXVsYXRpdmVXZWlnaHQsZT10aGlzLmJpbmRpbmc7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PTA7MT5kJiZ0aGlzLl9taXhCdWZmZXJSZWdpb24oYyxhLDMqYiwxLWQsYik7Zm9yKHZhciBkPWIsZj1iK2I7ZCE9PWY7KytkKWlmKGNbZF0hPT1jW2QrYl0pe2Uuc2V0VmFsdWUoYyxhKTticmVha319LHNhdmVPcmlnaW5hbFN0YXRlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5idWZmZXIsYj10aGlzLnZhbHVlU2l6ZSxjPTMqYjt0aGlzLmJpbmRpbmcuZ2V0VmFsdWUoYSxjKTtmb3IodmFyIGQ9YjtkIT09YzsrK2QpYVtkXT1hW2MrZCViXTt0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MH0scmVzdG9yZU9yaWdpbmFsU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLmJpbmRpbmcuc2V0VmFsdWUodGhpcy5idWZmZXIsMyp0aGlzLnZhbHVlU2l6ZSl9LF9zZWxlY3Q6ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZiguNTw9ZClmb3IoZD0KMDtkIT09ZTsrK2QpYVtiK2RdPWFbYytkXX0sX3NsZXJwOmZ1bmN0aW9uKGEsYixjLGQpe3FhLnNsZXJwRmxhdChhLGIsYSxiLGEsYyxkKX0sX2xlcnA6ZnVuY3Rpb24oYSxiLGMsZCxlKXtmb3IodmFyIGY9MS1kLGc9MDtnIT09ZTsrK2cpe3ZhciBoPWIrZzthW2hdPWFbaF0qZithW2MrZ10qZH19fSk7T2JqZWN0LmFzc2lnbihWZS5wcm90b3R5cGUse2dldFZhbHVlOmZ1bmN0aW9uKGEsYil7dGhpcy5iaW5kKCk7dmFyIGM9dGhpcy5fYmluZGluZ3NbdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfXTt2b2lkIDAhPT1jJiZjLmdldFZhbHVlKGEsYil9LHNldFZhbHVlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMuX2JpbmRpbmdzLGQ9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGU9Yy5sZW5ndGg7ZCE9PWU7KytkKWNbZF0uc2V0VmFsdWUoYSxiKX0sYmluZDpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLl9iaW5kaW5ncyxiPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXywKYz1hLmxlbmd0aDtiIT09YzsrK2IpYVtiXS5iaW5kKCl9LHVuYmluZDpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLl9iaW5kaW5ncyxiPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxjPWEubGVuZ3RoO2IhPT1jOysrYilhW2JdLnVuYmluZCgpfX0pO09iamVjdC5hc3NpZ24ob2Ese0NvbXBvc2l0ZTpWZSxjcmVhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhJiZhLmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IG9hLkNvbXBvc2l0ZShhLGIsYyk6bmV3IG9hKGEsYixjKX0scGFyc2VUcmFja05hbWU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgUmVnRXhwKCJeIisvKCg/Oltcdy1dK1tcLzpdKSopLy5zb3VyY2UrLyhbXHctXC5dKyk/Ly5zb3VyY2UrLyg/OlwuKFtcdy1dKykoPzpcWyguKylcXSk/KT8vLnNvdXJjZSsvXC4oW1x3LV0rKSg/OlxbKC4rKVxdKT8vLnNvdXJjZSsiJCIpLGI9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl07cmV0dXJuIGZ1bmN0aW9uKGMpe3ZhciBkPQphLmV4ZWMoYyk7aWYoIWQpdGhyb3cgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIitjKTt2YXIgZD17bm9kZU5hbWU6ZFsyXSxvYmplY3ROYW1lOmRbM10sb2JqZWN0SW5kZXg6ZFs0XSxwcm9wZXJ0eU5hbWU6ZFs1XSxwcm9wZXJ0eUluZGV4OmRbNl19LGU9ZC5ub2RlTmFtZSYmZC5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHZvaWQgMCE9PWUmJi0xIT09ZSl7dmFyIGY9ZC5ub2RlTmFtZS5zdWJzdHJpbmcoZSsxKTstMSE9PWIuaW5kZXhPZihmKSYmKGQubm9kZU5hbWU9ZC5ub2RlTmFtZS5zdWJzdHJpbmcoMCxlKSxkLm9iamVjdE5hbWU9Zil9aWYobnVsbD09PWQucHJvcGVydHlOYW1lfHwwPT09ZC5wcm9wZXJ0eU5hbWUubGVuZ3RoKXRocm93IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK2MpO3JldHVybiBkfX0oKSxmaW5kTm9kZTpmdW5jdGlvbihhLGIpe2lmKCFifHwKIiI9PT1ifHwicm9vdCI9PT1ifHwiLiI9PT1ifHwtMT09PWJ8fGI9PT1hLm5hbWV8fGI9PT1hLnV1aWQpcmV0dXJuIGE7aWYoYS5za2VsZXRvbil7dmFyIGM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPTA7YzxhLmJvbmVzLmxlbmd0aDtjKyspe3ZhciBkPWEuYm9uZXNbY107aWYoZC5uYW1lPT09YilyZXR1cm4gZH1yZXR1cm4gbnVsbH0oYS5za2VsZXRvbik7aWYoYylyZXR1cm4gY31pZihhLmNoaWxkcmVuKXt2YXIgZD1mdW5jdGlvbihhKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGc9YVtjXTtpZihnLm5hbWU9PT1ifHxnLnV1aWQ9PT1ifHwoZz1kKGcuY2hpbGRyZW4pKSlyZXR1cm4gZ31yZXR1cm4gbnVsbH07aWYoYz1kKGEuY2hpbGRyZW4pKXJldHVybiBjfXJldHVybiBudWxsfX0pO09iamVjdC5hc3NpZ24ob2EucHJvdG90eXBlLHtfZ2V0VmFsdWVfdW5hdmFpbGFibGU6ZnVuY3Rpb24oKXt9LF9zZXRWYWx1ZV91bmF2YWlsYWJsZTpmdW5jdGlvbigpe30sQmluZGluZ1R5cGU6e0RpcmVjdDowLApFbnRpcmVBcnJheToxLEFycmF5RWxlbWVudDoyLEhhc0Zyb21Ub0FycmF5OjN9LFZlcnNpb25pbmc6e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn0sR2V0dGVyQnlCaW5kaW5nVHlwZTpbZnVuY3Rpb24oYSxiKXthW2JdPXRoaXMubm9kZVt0aGlzLnByb3BlcnR5TmFtZV19LGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxkPTAsZT1jLmxlbmd0aDtkIT09ZTsrK2QpYVtiKytdPWNbZF19LGZ1bmN0aW9uKGEsYil7YVtiXT10aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XX0sZnVuY3Rpb24oYSxiKXt0aGlzLnJlc29sdmVkUHJvcGVydHkudG9BcnJheShhLGIpfV0sU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc6W1tmdW5jdGlvbihhLGIpe3RoaXMubm9kZVt0aGlzLnByb3BlcnR5TmFtZV09YVtiXX0sZnVuY3Rpb24oYSxiKXt0aGlzLm5vZGVbdGhpcy5wcm9wZXJ0eU5hbWVdPWFbYl07CnRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfSxmdW5jdGlvbihhLGIpe3RoaXMubm9kZVt0aGlzLnByb3BlcnR5TmFtZV09YVtiXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV0sW2Z1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxkPTAsZT1jLmxlbmd0aDtkIT09ZTsrK2QpY1tkXT1hW2IrK119LGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxkPTAsZT1jLmxlbmd0aDtkIT09ZTsrK2QpY1tkXT1hW2IrK107dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9LGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxkPTAsZT1jLmxlbmd0aDtkIT09ZTsrK2QpY1tkXT1hW2IrK107dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1dLFtmdW5jdGlvbihhLGIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPQphW2JdfSxmdW5jdGlvbihhLGIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWFbYl07dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9LGZ1bmN0aW9uKGEsYil7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09YVtiXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV0sW2Z1bmN0aW9uKGEsYil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShhLGIpfSxmdW5jdGlvbihhLGIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkoYSxiKTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH0sZnVuY3Rpb24oYSxiKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGEsYik7dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1dXSxnZXRWYWx1ZTpmdW5jdGlvbihhLGIpe3RoaXMuYmluZCgpO3RoaXMuZ2V0VmFsdWUoYSxiKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYSwKYil7dGhpcy5iaW5kKCk7dGhpcy5zZXRWYWx1ZShhLGIpfSxiaW5kOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ub2RlLGI9dGhpcy5wYXJzZWRQYXRoLGM9Yi5vYmplY3ROYW1lLGQ9Yi5wcm9wZXJ0eU5hbWUsZT1iLnByb3BlcnR5SW5kZXg7YXx8KHRoaXMubm9kZT1hPW9hLmZpbmROb2RlKHRoaXMucm9vdE5vZGUsYi5ub2RlTmFtZSl8fHRoaXMucm9vdE5vZGUpO3RoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5hdmFpbGFibGU7dGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZTtpZihhKXtpZihjKXt2YXIgZj1iLm9iamVjdEluZGV4O3N3aXRjaChjKXtjYXNlICJtYXRlcmlhbHMiOmlmKCFhLm1hdGVyaWFsKXtjb25zb2xlLmVycm9yKCIgIGNhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbCIsdGhpcyk7cmV0dXJufWlmKCFhLm1hdGVyaWFsLm1hdGVyaWFscyl7Y29uc29sZS5lcnJvcigiICBjYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwubWF0ZXJpYWxzIGFzIG5vZGUubWF0ZXJpYWwgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFscyBhcnJheSIsCnRoaXMpO3JldHVybn1hPWEubWF0ZXJpYWwubWF0ZXJpYWxzO2JyZWFrO2Nhc2UgImJvbmVzIjppZighYS5za2VsZXRvbil7Y29uc29sZS5lcnJvcigiICBjYW4gbm90IGJpbmQgdG8gYm9uZXMgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgc2tlbGV0b24iLHRoaXMpO3JldHVybn1hPWEuc2tlbGV0b24uYm9uZXM7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKylpZihhW2NdLm5hbWU9PT1mKXtmPWM7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih2b2lkIDA9PT1hW2NdKXtjb25zb2xlLmVycm9yKCIgIGNhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUsIHVuZGVmaW5lZCIsdGhpcyk7cmV0dXJufWE9YVtjXX1pZih2b2lkIDAhPT1mKXtpZih2b2lkIDA9PT1hW2ZdKXtjb25zb2xlLmVycm9yKCIgIHRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQ6Iix0aGlzLGEpO3JldHVybn1hPWFbZl19fWY9YVtkXTtpZih2b2lkIDA9PT1mKWNvbnNvbGUuZXJyb3IoIiAgdHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICIrCmIubm9kZU5hbWUrIi4iK2QrIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIsYSk7ZWxzZXtiPXRoaXMuVmVyc2lvbmluZy5Ob25lO3ZvaWQgMCE9PWEubmVlZHNVcGRhdGU/KGI9dGhpcy5WZXJzaW9uaW5nLk5lZWRzVXBkYXRlLHRoaXMudGFyZ2V0T2JqZWN0PWEpOnZvaWQgMCE9PWEubWF0cml4V29ybGROZWVkc1VwZGF0ZSYmKGI9dGhpcy5WZXJzaW9uaW5nLk1hdHJpeFdvcmxkTmVlZHNVcGRhdGUsdGhpcy50YXJnZXRPYmplY3Q9YSk7Yz10aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtpZih2b2lkIDAhPT1lKXtpZigibW9ycGhUYXJnZXRJbmZsdWVuY2VzIj09PWQpe2lmKCFhLmdlb21ldHJ5KXtjb25zb2xlLmVycm9yKCIgIGNhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXN1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkiLHRoaXMpO3JldHVybn1pZighYS5nZW9tZXRyeS5tb3JwaFRhcmdldHMpe2NvbnNvbGUuZXJyb3IoIiAgY2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhc3VzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaFRhcmdldHMiLAp0aGlzKTtyZXR1cm59Zm9yKGM9MDtjPHRoaXMubm9kZS5nZW9tZXRyeS5tb3JwaFRhcmdldHMubGVuZ3RoO2MrKylpZihhLmdlb21ldHJ5Lm1vcnBoVGFyZ2V0c1tjXS5uYW1lPT09ZSl7ZT1jO2JyZWFrfX1jPXRoaXMuQmluZGluZ1R5cGUuQXJyYXlFbGVtZW50O3RoaXMucmVzb2x2ZWRQcm9wZXJ0eT1mO3RoaXMucHJvcGVydHlJbmRleD1lfWVsc2Ugdm9pZCAwIT09Zi5mcm9tQXJyYXkmJnZvaWQgMCE9PWYudG9BcnJheT8oYz10aGlzLkJpbmRpbmdUeXBlLkhhc0Zyb21Ub0FycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1mKTpBcnJheS5pc0FycmF5KGYpPyhjPXRoaXMuQmluZGluZ1R5cGUuRW50aXJlQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PWYpOnRoaXMucHJvcGVydHlOYW1lPWQ7dGhpcy5nZXRWYWx1ZT10aGlzLkdldHRlckJ5QmluZGluZ1R5cGVbY107dGhpcy5zZXRWYWx1ZT10aGlzLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nW2NdW2JdfX1lbHNlIGNvbnNvbGUuZXJyb3IoIiAgdHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogIisKdGhpcy5wYXRoKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iKX0sdW5iaW5kOmZ1bmN0aW9uKCl7dGhpcy5ub2RlPW51bGw7dGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kO3RoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19KTtPYmplY3QuYXNzaWduKG9hLnByb3RvdHlwZSx7X2dldFZhbHVlX3VuYm91bmQ6b2EucHJvdG90eXBlLmdldFZhbHVlLF9zZXRWYWx1ZV91bmJvdW5kOm9hLnByb3RvdHlwZS5zZXRWYWx1ZX0pO09iamVjdC5hc3NpZ24oV2UucHJvdG90eXBlLHtpc0FuaW1hdGlvbk9iamVjdEdyb3VwOiEwLGFkZDpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5fb2JqZWN0cyxjPWIubGVuZ3RoLGQ9dGhpcy5uQ2FjaGVkT2JqZWN0c18sZT10aGlzLl9pbmRpY2VzQnlVVUlELGY9dGhpcy5fcGF0aHMsZz10aGlzLl9wYXJzZWRQYXRocyxoPXRoaXMuX2JpbmRpbmdzLGs9aC5sZW5ndGgsbD0wLHA9YXJndW1lbnRzLmxlbmd0aDtsIT09cDsrK2wpe3ZhciBxPQphcmd1bWVudHNbbF0sbj1xLnV1aWQscj1lW25dO2lmKHZvaWQgMD09PXIpe3I9YysrO2Vbbl09cjtiLnB1c2gocSk7Zm9yKHZhciBuPTAsej1rO24hPT16OysrbiloW25dLnB1c2gobmV3IG9hKHEsZltuXSxnW25dKSl9ZWxzZSBpZihyPGQpe3ZhciB0PS0tZCx6PWJbdF07ZVt6LnV1aWRdPXI7YltyXT16O2Vbbl09dDtiW3RdPXE7bj0wO2Zvcih6PWs7biE9PXo7KytuKXt2YXIgeT1oW25dLHg9eVtyXTt5W3JdPXlbdF07dm9pZCAwPT09eCYmKHg9bmV3IG9hKHEsZltuXSxnW25dKSk7eVt0XT14fX1lbHNlIHZvaWQgMCE9PWJbcl0mJmNvbnNvbGUuZXJyb3IoIkRpZmZlcmVudCBvYmplY3RzIHdpdGggdGhlIHNhbWUgVVVJRCBkZXRlY3RlZC4gQ2xlYW4gdGhlIGNhY2hlcyBvciByZWNyZWF0ZSB5b3VyIGluZnJhc3RydWN0dXJlIHdoZW4gcmVsb2FkaW5nIHNjZW5lcy4uLiIpfXRoaXMubkNhY2hlZE9iamVjdHNfPWR9LHJlbW92ZTpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5fb2JqZWN0cywKYz10aGlzLm5DYWNoZWRPYmplY3RzXyxkPXRoaXMuX2luZGljZXNCeVVVSUQsZT10aGlzLl9iaW5kaW5ncyxmPWUubGVuZ3RoLGc9MCxoPWFyZ3VtZW50cy5sZW5ndGg7ZyE9PWg7KytnKXt2YXIgaz1hcmd1bWVudHNbZ10sbD1rLnV1aWQscD1kW2xdO2lmKHZvaWQgMCE9PXAmJnA+PWMpe3ZhciBxPWMrKyxuPWJbcV07ZFtuLnV1aWRdPXA7YltwXT1uO2RbbF09cTtiW3FdPWs7az0wO2ZvcihsPWY7ayE9PWw7KytrKXt2YXIgbj1lW2tdLHI9bltwXTtuW3BdPW5bcV07bltxXT1yfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189Y30sdW5jYWNoZTpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5fb2JqZWN0cyxjPWIubGVuZ3RoLGQ9dGhpcy5uQ2FjaGVkT2JqZWN0c18sZT10aGlzLl9pbmRpY2VzQnlVVUlELGY9dGhpcy5fYmluZGluZ3MsZz1mLmxlbmd0aCxoPTAsaz1hcmd1bWVudHMubGVuZ3RoO2ghPT1rOysraCl7dmFyIGw9YXJndW1lbnRzW2hdLnV1aWQscD1lW2xdO2lmKHZvaWQgMCE9PQpwKWlmKGRlbGV0ZSBlW2xdLHA8ZCl7dmFyIGw9LS1kLHE9YltsXSxuPS0tYyxyPWJbbl07ZVtxLnV1aWRdPXA7YltwXT1xO2Vbci51dWlkXT1sO2JbbF09cjtiLnBvcCgpO3E9MDtmb3Iocj1nO3EhPT1yOysrcSl7dmFyIHo9ZltxXSx0PXpbbl07eltwXT16W2xdO3pbbF09dDt6LnBvcCgpfX1lbHNlIGZvcihuPS0tYyxyPWJbbl0sZVtyLnV1aWRdPXAsYltwXT1yLGIucG9wKCkscT0wLHI9ZztxIT09cjsrK3Epej1mW3FdLHpbcF09eltuXSx6LnBvcCgpfXRoaXMubkNhY2hlZE9iamVjdHNfPWR9LHN1YnNjcmliZV86ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGgsZD1jW2FdLGU9dGhpcy5fYmluZGluZ3M7aWYodm9pZCAwIT09ZClyZXR1cm4gZVtkXTt2YXIgZj10aGlzLl9wYXRocyxnPXRoaXMuX3BhcnNlZFBhdGhzLGg9dGhpcy5fb2JqZWN0cyxrPXRoaXMubkNhY2hlZE9iamVjdHNfLGw9QXJyYXkoaC5sZW5ndGgpLGQ9ZS5sZW5ndGg7Y1thXT0KZDtmLnB1c2goYSk7Zy5wdXNoKGIpO2UucHVzaChsKTtjPWs7Zm9yKGQ9aC5sZW5ndGg7YyE9PWQ7KytjKWxbY109bmV3IG9hKGhbY10sYSxiKTtyZXR1cm4gbH0sdW5zdWJzY3JpYmVfOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxjPWJbYV07aWYodm9pZCAwIT09Yyl7dmFyIGQ9dGhpcy5fcGF0aHMsZT10aGlzLl9wYXJzZWRQYXRocyxmPXRoaXMuX2JpbmRpbmdzLGc9Zi5sZW5ndGgtMSxoPWZbZ107YlthW2ddXT1jO2ZbY109aDtmLnBvcCgpO2VbY109ZVtnXTtlLnBvcCgpO2RbY109ZFtnXTtkLnBvcCgpfX19KTtPYmplY3QuYXNzaWduKFhlLnByb3RvdHlwZSx7cGxheTpmdW5jdGlvbigpe3RoaXMuX21peGVyLl9hY3RpdmF0ZUFjdGlvbih0aGlzKTtyZXR1cm4gdGhpc30sc3RvcDpmdW5jdGlvbigpe3RoaXMuX21peGVyLl9kZWFjdGl2YXRlQWN0aW9uKHRoaXMpO3JldHVybiB0aGlzLnJlc2V0KCl9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5wYXVzZWQ9CiExO3RoaXMuZW5hYmxlZD0hMDt0aGlzLnRpbWU9MDt0aGlzLl9sb29wQ291bnQ9LTE7dGhpcy5fc3RhcnRUaW1lPW51bGw7cmV0dXJuIHRoaXMuc3RvcEZhZGluZygpLnN0b3BXYXJwaW5nKCl9LGlzUnVubmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLnBhdXNlZCYmMCE9PXRoaXMudGltZVNjYWxlJiZudWxsPT09dGhpcy5fc3RhcnRUaW1lJiZ0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9LGlzU2NoZWR1bGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX0sc3RhcnRBdDpmdW5jdGlvbihhKXt0aGlzLl9zdGFydFRpbWU9YTtyZXR1cm4gdGhpc30sc2V0TG9vcDpmdW5jdGlvbihhLGIpe3RoaXMubG9vcD1hO3RoaXMucmVwZXRpdGlvbnM9YjtyZXR1cm4gdGhpc30sc2V0RWZmZWN0aXZlV2VpZ2h0OmZ1bmN0aW9uKGEpe3RoaXMud2VpZ2h0PWE7dGhpcy5fZWZmZWN0aXZlV2VpZ2h0PXRoaXMuZW5hYmxlZD8KYTowO3JldHVybiB0aGlzLnN0b3BGYWRpbmcoKX0sZ2V0RWZmZWN0aXZlV2VpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodH0sZmFkZUluOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyhhLDAsMSl9LGZhZGVPdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKGEsMSwwKX0sY3Jvc3NGYWRlRnJvbTpmdW5jdGlvbihhLGIsYyl7YS5mYWRlT3V0KGIpO3RoaXMuZmFkZUluKGIpO2lmKGMpe2M9dGhpcy5fY2xpcC5kdXJhdGlvbjt2YXIgZD1hLl9jbGlwLmR1cmF0aW9uLGU9Yy9kO2Eud2FycCgxLGQvYyxiKTt0aGlzLndhcnAoZSwxLGIpfXJldHVybiB0aGlzfSxjcm9zc0ZhZGVUbzpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEuY3Jvc3NGYWRlRnJvbSh0aGlzLGIsYyl9LHN0b3BGYWRpbmc6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtudWxsIT09YSYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PQpudWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudChhKSk7cmV0dXJuIHRoaXN9LHNldEVmZmVjdGl2ZVRpbWVTY2FsZTpmdW5jdGlvbihhKXt0aGlzLnRpbWVTY2FsZT1hO3RoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT10aGlzLnBhdXNlZD8wOmE7cmV0dXJuIHRoaXMuc3RvcFdhcnBpbmcoKX0sZ2V0RWZmZWN0aXZlVGltZVNjYWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZX0sc2V0RHVyYXRpb246ZnVuY3Rpb24oYSl7dGhpcy50aW1lU2NhbGU9dGhpcy5fY2xpcC5kdXJhdGlvbi9hO3JldHVybiB0aGlzLnN0b3BXYXJwaW5nKCl9LHN5bmNXaXRoOmZ1bmN0aW9uKGEpe3RoaXMudGltZT1hLnRpbWU7dGhpcy50aW1lU2NhbGU9YS50aW1lU2NhbGU7cmV0dXJuIHRoaXMuc3RvcFdhcnBpbmcoKX0saGFsdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy53YXJwKHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSwwLGEpfSx3YXJwOmZ1bmN0aW9uKGEsCmIsYyl7dmFyIGQ9dGhpcy5fbWl4ZXIsZT1kLnRpbWUsZj10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudCxnPXRoaXMudGltZVNjYWxlO251bGw9PT1mJiYodGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9Zj1kLl9sZW5kQ29udHJvbEludGVycG9sYW50KCkpO2Q9Zi5wYXJhbWV0ZXJQb3NpdGlvbnM7Zj1mLnNhbXBsZVZhbHVlcztkWzBdPWU7ZFsxXT1lK2M7ZlswXT1hL2c7ZlsxXT1iL2c7cmV0dXJuIHRoaXN9LHN0b3BXYXJwaW5nOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7bnVsbCE9PWEmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudChhKSk7cmV0dXJuIHRoaXN9LGdldE1peGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21peGVyfSxnZXRDbGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NsaXB9LGdldFJvb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9jYWxSb290fHwKdGhpcy5fbWl4ZXIuX3Jvb3R9LF91cGRhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYodGhpcy5lbmFibGVkKXt2YXIgZT10aGlzLl9zdGFydFRpbWU7aWYobnVsbCE9PWUpe2I9KGEtZSkqYztpZigwPmJ8fDA9PT1jKXJldHVybjt0aGlzLl9zdGFydFRpbWU9bnVsbDtiKj1jfWIqPXRoaXMuX3VwZGF0ZVRpbWVTY2FsZShhKTtjPXRoaXMuX3VwZGF0ZVRpbWUoYik7YT10aGlzLl91cGRhdGVXZWlnaHQoYSk7aWYoMDxhKXtiPXRoaXMuX2ludGVycG9sYW50cztmb3IodmFyIGU9dGhpcy5fcHJvcGVydHlCaW5kaW5ncyxmPTAsZz1iLmxlbmd0aDtmIT09ZzsrK2YpYltmXS5ldmFsdWF0ZShjKSxlW2ZdLmFjY3VtdWxhdGUoZCxhKX19ZWxzZSB0aGlzLl91cGRhdGVXZWlnaHQoYSl9LF91cGRhdGVXZWlnaHQ6ZnVuY3Rpb24oYSl7dmFyIGI9MDtpZih0aGlzLmVuYWJsZWQpe3ZhciBiPXRoaXMud2VpZ2h0LGM9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobnVsbCE9PWMpe3ZhciBkPWMuZXZhbHVhdGUoYSlbMF0sCmI9YipkO2E+Yy5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BGYWRpbmcoKSwwPT09ZCYmKHRoaXMuZW5hYmxlZD0hMSkpfX1yZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PWJ9LF91cGRhdGVUaW1lU2NhbGU6ZnVuY3Rpb24oYSl7dmFyIGI9MDtpZighdGhpcy5wYXVzZWQpe3ZhciBiPXRoaXMudGltZVNjYWxlLGM9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7aWYobnVsbCE9PWMpe3ZhciBkPWMuZXZhbHVhdGUoYSlbMF0sYj1iKmQ7YT5jLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSwwPT09Yj90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1iKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1ifSxfdXBkYXRlVGltZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnRpbWUrYTtpZigwPT09YSlyZXR1cm4gYjt2YXIgYz10aGlzLl9jbGlwLmR1cmF0aW9uLGQ9dGhpcy5sb29wLGU9dGhpcy5fbG9vcENvdW50O2lmKDIyMDA9PT0KZClhOntpZigtMT09PWUmJih0aGlzLl9sb29wQ291bnQ9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLCEwLCExKSksYj49YyliPWM7ZWxzZSBpZigwPmIpYj0wO2Vsc2UgYnJlYWsgYTt0aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMTt0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOjA+YT8tMToxfSl9ZWxzZXtkPTIyMDI9PT1kOy0xPT09ZSYmKDA8PWE/KGU9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLDA9PT10aGlzLnJlcGV0aXRpb25zLGQpKTp0aGlzLl9zZXRFbmRpbmdzKDA9PT10aGlzLnJlcGV0aXRpb25zLCEwLGQpKTtpZihiPj1jfHwwPmIpe3ZhciBmPU1hdGguZmxvb3IoYi9jKSxiPWItYypmLGU9ZStNYXRoLmFicyhmKSxnPXRoaXMucmVwZXRpdGlvbnMtZTswPmc/KHRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLGI9MDxhPwpjOjAsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjowPGE/MTotMX0pKTooMD09PWc/KGE9MD5hLHRoaXMuX3NldEVuZGluZ3MoYSwhYSxkKSk6dGhpcy5fc2V0RW5kaW5ncyghMSwhMSxkKSx0aGlzLl9sb29wQ291bnQ9ZSx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJsb29wIixhY3Rpb246dGhpcyxsb29wRGVsdGE6Zn0pKX1pZihkJiYxPT09KGUmMSkpcmV0dXJuIHRoaXMudGltZT1iLGMtYn1yZXR1cm4gdGhpcy50aW1lPWJ9LF9zZXRFbmRpbmdzOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzO2M/KGQuZW5kaW5nU3RhcnQ9MjQwMSxkLmVuZGluZ0VuZD0yNDAxKTooZC5lbmRpbmdTdGFydD1hP3RoaXMuemVyb1Nsb3BlQXRTdGFydD8yNDAxOjI0MDA6MjQwMixkLmVuZGluZ0VuZD1iP3RoaXMuemVyb1Nsb3BlQXRFbmQ/MjQwMToyNDAwOjI0MDIpfSxfc2NoZWR1bGVGYWRpbmc6ZnVuY3Rpb24oYSwKYixjKXt2YXIgZD10aGlzLl9taXhlcixlPWQudGltZSxmPXRoaXMuX3dlaWdodEludGVycG9sYW50O251bGw9PT1mJiYodGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9Zj1kLl9sZW5kQ29udHJvbEludGVycG9sYW50KCkpO2Q9Zi5wYXJhbWV0ZXJQb3NpdGlvbnM7Zj1mLnNhbXBsZVZhbHVlcztkWzBdPWU7ZlswXT1iO2RbMV09ZSthO2ZbMV09YztyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKFllLnByb3RvdHlwZSxzYS5wcm90b3R5cGUse19iaW5kQWN0aW9uOmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5fbG9jYWxSb290fHx0aGlzLl9yb290LGQ9YS5fY2xpcC50cmFja3MsZT1kLmxlbmd0aCxmPWEuX3Byb3BlcnR5QmluZGluZ3MsZz1hLl9pbnRlcnBvbGFudHMsaD1jLnV1aWQsaz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsbD1rW2hdO3ZvaWQgMD09PWwmJihsPXt9LGtbaF09bCk7Zm9yKGs9MDtrIT09ZTsrK2spe3ZhciBwPWRba10scT1wLm5hbWUsbj1sW3FdO2lmKHZvaWQgMD09PQpuKXtuPWZba107aWYodm9pZCAwIT09bil7bnVsbD09PW4uX2NhY2hlSW5kZXgmJigrK24ucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKG4saCxxKSk7Y29udGludWV9bj1uZXcgbGUob2EuY3JlYXRlKGMscSxiJiZiLl9wcm9wZXJ0eUJpbmRpbmdzW2tdLmJpbmRpbmcucGFyc2VkUGF0aCkscC5WYWx1ZVR5cGVOYW1lLHAuZ2V0VmFsdWVTaXplKCkpOysrbi5yZWZlcmVuY2VDb3VudDt0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcobixoLHEpfWZba109bjtnW2tdLnJlc3VsdEJ1ZmZlcj1uLmJ1ZmZlcn19LF9hY3RpdmF0ZUFjdGlvbjpmdW5jdGlvbihhKXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24oYSkpe2lmKG51bGw9PT1hLl9jYWNoZUluZGV4KXt2YXIgYj0oYS5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLGM9YS5fY2xpcC51dWlkLGQ9dGhpcy5fYWN0aW9uc0J5Q2xpcFtjXTt0aGlzLl9iaW5kQWN0aW9uKGEsZCYmZC5rbm93bkFjdGlvbnNbMF0pO3RoaXMuX2FkZEluYWN0aXZlQWN0aW9uKGEsCmMsYil9Yj1hLl9wcm9wZXJ0eUJpbmRpbmdzO2M9MDtmb3IoZD1iLmxlbmd0aDtjIT09ZDsrK2Mpe3ZhciBlPWJbY107MD09PWUudXNlQ291bnQrKyYmKHRoaXMuX2xlbmRCaW5kaW5nKGUpLGUuc2F2ZU9yaWdpbmFsU3RhdGUoKSl9dGhpcy5fbGVuZEFjdGlvbihhKX19LF9kZWFjdGl2YXRlQWN0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2lzQWN0aXZlQWN0aW9uKGEpKXtmb3IodmFyIGI9YS5fcHJvcGVydHlCaW5kaW5ncyxjPTAsZD1iLmxlbmd0aDtjIT09ZDsrK2Mpe3ZhciBlPWJbY107MD09PS0tZS51c2VDb3VudCYmKGUucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl90YWtlQmFja0JpbmRpbmcoZSkpfXRoaXMuX3Rha2VCYWNrQWN0aW9uKGEpfX0sX2luaXRNZW1vcnlNYW5hZ2VyOmZ1bmN0aW9uKCl7dGhpcy5fYWN0aW9ucz1bXTt0aGlzLl9uQWN0aXZlQWN0aW9ucz0wO3RoaXMuX2FjdGlvbnNCeUNsaXA9e307dGhpcy5fYmluZGluZ3M9W107dGhpcy5fbkFjdGl2ZUJpbmRpbmdzPQowO3RoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fTt0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdO3RoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7dmFyIGE9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gYS5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiBhLl9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gYS5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gYS5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIGEuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gYS5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19LF9pc0FjdGl2ZUFjdGlvbjpmdW5jdGlvbihhKXthPWEuX2NhY2hlSW5kZXg7cmV0dXJuIG51bGwhPT1hJiZhPHRoaXMuX25BY3RpdmVBY3Rpb25zfSwKX2FkZEluYWN0aXZlQWN0aW9uOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLl9hY3Rpb25zLGU9dGhpcy5fYWN0aW9uc0J5Q2xpcCxmPWVbYl07dm9pZCAwPT09Zj8oZj17a25vd25BY3Rpb25zOlthXSxhY3Rpb25CeVJvb3Q6e319LGEuX2J5Q2xpcENhY2hlSW5kZXg9MCxlW2JdPWYpOihiPWYua25vd25BY3Rpb25zLGEuX2J5Q2xpcENhY2hlSW5kZXg9Yi5sZW5ndGgsYi5wdXNoKGEpKTthLl9jYWNoZUluZGV4PWQubGVuZ3RoO2QucHVzaChhKTtmLmFjdGlvbkJ5Um9vdFtjXT1hfSxfcmVtb3ZlSW5hY3RpdmVBY3Rpb246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fYWN0aW9ucyxjPWJbYi5sZW5ndGgtMV0sZD1hLl9jYWNoZUluZGV4O2MuX2NhY2hlSW5kZXg9ZDtiW2RdPWM7Yi5wb3AoKTthLl9jYWNoZUluZGV4PW51bGw7dmFyIGI9YS5fY2xpcC51dWlkLGM9dGhpcy5fYWN0aW9uc0J5Q2xpcCxkPWNbYl0sZT1kLmtub3duQWN0aW9ucyxmPWVbZS5sZW5ndGgtMV0sZz1hLl9ieUNsaXBDYWNoZUluZGV4OwpmLl9ieUNsaXBDYWNoZUluZGV4PWc7ZVtnXT1mO2UucG9wKCk7YS5fYnlDbGlwQ2FjaGVJbmRleD1udWxsO2RlbGV0ZSBkLmFjdGlvbkJ5Um9vdFsoYS5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkXTswPT09ZS5sZW5ndGgmJmRlbGV0ZSBjW2JdO3RoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24oYSl9LF9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uOmZ1bmN0aW9uKGEpe2E9YS5fcHJvcGVydHlCaW5kaW5ncztmb3IodmFyIGI9MCxjPWEubGVuZ3RoO2IhPT1jOysrYil7dmFyIGQ9YVtiXTswPT09LS1kLnJlZmVyZW5jZUNvdW50JiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcoZCl9fSxfbGVuZEFjdGlvbjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLl9hY3Rpb25zLGM9YS5fY2FjaGVJbmRleCxkPXRoaXMuX25BY3RpdmVBY3Rpb25zKyssZT1iW2RdO2EuX2NhY2hlSW5kZXg9ZDtiW2RdPWE7ZS5fY2FjaGVJbmRleD1jO2JbY109ZX0sX3Rha2VCYWNrQWN0aW9uOmZ1bmN0aW9uKGEpe3ZhciBiPQp0aGlzLl9hY3Rpb25zLGM9YS5fY2FjaGVJbmRleCxkPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMsZT1iW2RdO2EuX2NhY2hlSW5kZXg9ZDtiW2RdPWE7ZS5fY2FjaGVJbmRleD1jO2JbY109ZX0sX2FkZEluYWN0aXZlQmluZGluZzpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLGU9ZFtiXSxmPXRoaXMuX2JpbmRpbmdzO3ZvaWQgMD09PWUmJihlPXt9LGRbYl09ZSk7ZVtjXT1hO2EuX2NhY2hlSW5kZXg9Zi5sZW5ndGg7Zi5wdXNoKGEpfSxfcmVtb3ZlSW5hY3RpdmVCaW5kaW5nOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2JpbmRpbmdzLGM9YS5iaW5kaW5nLGQ9Yy5yb290Tm9kZS51dWlkLGM9Yy5wYXRoLGU9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLGY9ZVtkXSxnPWJbYi5sZW5ndGgtMV07YT1hLl9jYWNoZUluZGV4O2cuX2NhY2hlSW5kZXg9YTtiW2FdPWc7Yi5wb3AoKTtkZWxldGUgZltjXTthOntmb3IodmFyIGggaW4gZilicmVhayBhOwpkZWxldGUgZVtkXX19LF9sZW5kQmluZGluZzpmdW5jdGlvbihhKXt2YXIgYj10aGlzLl9iaW5kaW5ncyxjPWEuX2NhY2hlSW5kZXgsZD10aGlzLl9uQWN0aXZlQmluZGluZ3MrKyxlPWJbZF07YS5fY2FjaGVJbmRleD1kO2JbZF09YTtlLl9jYWNoZUluZGV4PWM7YltjXT1lfSxfdGFrZUJhY2tCaW5kaW5nOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2JpbmRpbmdzLGM9YS5fY2FjaGVJbmRleCxkPS0tdGhpcy5fbkFjdGl2ZUJpbmRpbmdzLGU9YltkXTthLl9jYWNoZUluZGV4PWQ7YltkXT1hO2UuX2NhY2hlSW5kZXg9YztiW2NdPWV9LF9sZW5kQ29udHJvbEludGVycG9sYW50OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxiPXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzKyssYz1hW2JdO3ZvaWQgMD09PWMmJihjPW5ldyBXYyhuZXcgRmxvYXQzMkFycmF5KDIpLG5ldyBGbG9hdDMyQXJyYXkoMiksMSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyKSwKYy5fX2NhY2hlSW5kZXg9YixhW2JdPWMpO3JldHVybiBjfSxfdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxjPWEuX19jYWNoZUluZGV4LGQ9LS10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cyxlPWJbZF07YS5fX2NhY2hlSW5kZXg9ZDtiW2RdPWE7ZS5fX2NhY2hlSW5kZXg9YztiW2NdPWV9LF9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyOm5ldyBGbG9hdDMyQXJyYXkoMSksY2xpcEFjdGlvbjpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fHRoaXMuX3Jvb3QsZD1jLnV1aWQsZT0ic3RyaW5nIj09PXR5cGVvZiBhP0JhLmZpbmRCeU5hbWUoYyxhKTphLGM9bnVsbCE9PWU/ZS51dWlkOmEsZj10aGlzLl9hY3Rpb25zQnlDbGlwW2NdLGc9bnVsbDtpZih2b2lkIDAhPT1mKXtnPWYuYWN0aW9uQnlSb290W2RdO2lmKHZvaWQgMCE9PWcpcmV0dXJuIGc7Zz1mLmtub3duQWN0aW9uc1swXTtudWxsPT09CmUmJihlPWcuX2NsaXApfWlmKG51bGw9PT1lKXJldHVybiBudWxsO2U9bmV3IFhlKHRoaXMsZSxiKTt0aGlzLl9iaW5kQWN0aW9uKGUsZyk7dGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24oZSxjLGQpO3JldHVybiBlfSxleGlzdGluZ0FjdGlvbjpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fHRoaXMuX3Jvb3QsZD1jLnV1aWQsYz0ic3RyaW5nIj09PXR5cGVvZiBhP0JhLmZpbmRCeU5hbWUoYyxhKTphLGM9dGhpcy5fYWN0aW9uc0J5Q2xpcFtjP2MudXVpZDphXTtyZXR1cm4gdm9pZCAwIT09Yz9jLmFjdGlvbkJ5Um9vdFtkXXx8bnVsbDpudWxsfSxzdG9wQWxsQWN0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuX2FjdGlvbnMsYj10aGlzLl9uQWN0aXZlQWN0aW9ucyxjPXRoaXMuX2JpbmRpbmdzLGQ9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzLGU9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzPXRoaXMuX25BY3RpdmVBY3Rpb25zPTA7ZSE9PWI7KytlKWFbZV0ucmVzZXQoKTtmb3IoZT0wO2UhPT1kOysrZSljW2VdLnVzZUNvdW50PQowO3JldHVybiB0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oYSl7YSo9dGhpcy50aW1lU2NhbGU7Zm9yKHZhciBiPXRoaXMuX2FjdGlvbnMsYz10aGlzLl9uQWN0aXZlQWN0aW9ucyxkPXRoaXMudGltZSs9YSxlPU1hdGguc2lnbihhKSxmPXRoaXMuX2FjY3VJbmRleF49MSxnPTA7ZyE9PWM7KytnKWJbZ10uX3VwZGF0ZShkLGEsZSxmKTthPXRoaXMuX2JpbmRpbmdzO2I9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihnPTA7ZyE9PWI7KytnKWFbZ10uYXBwbHkoZik7cmV0dXJuIHRoaXN9LGdldFJvb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sdW5jYWNoZUNsaXA6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fYWN0aW9uczthPWEudXVpZDt2YXIgYz10aGlzLl9hY3Rpb25zQnlDbGlwLGQ9Y1thXTtpZih2b2lkIDAhPT1kKXtmb3IodmFyIGQ9ZC5rbm93bkFjdGlvbnMsZT0wLGY9ZC5sZW5ndGg7ZSE9PWY7KytlKXt2YXIgZz1kW2VdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oZyk7dmFyIGg9CmcuX2NhY2hlSW5kZXgsaz1iW2IubGVuZ3RoLTFdO2cuX2NhY2hlSW5kZXg9bnVsbDtnLl9ieUNsaXBDYWNoZUluZGV4PW51bGw7ay5fY2FjaGVJbmRleD1oO2JbaF09aztiLnBvcCgpO3RoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24oZyl9ZGVsZXRlIGNbYV19fSx1bmNhY2hlUm9vdDpmdW5jdGlvbihhKXthPWEudXVpZDt2YXIgYj10aGlzLl9hY3Rpb25zQnlDbGlwLGM7Zm9yKGMgaW4gYil7dmFyIGQ9YltjXS5hY3Rpb25CeVJvb3RbYV07dm9pZCAwIT09ZCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oZCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oZCkpfWM9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lW2FdO2lmKHZvaWQgMCE9PWMpZm9yKHZhciBlIGluIGMpYT1jW2VdLGEucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcoYSl9LHVuY2FjaGVBY3Rpb246ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmV4aXN0aW5nQWN0aW9uKGEsCmIpO251bGwhPT1jJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihjKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihjKSl9fSk7SmQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKZCh2b2lkIDA9PT10aGlzLnZhbHVlLmNsb25lP3RoaXMudmFsdWU6dGhpcy52YWx1ZS5jbG9uZSgpKX07bWUucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOm1lLGlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk6ITAsYWRkR3JvdXA6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OmEsY291bnQ6YixtYXRlcmlhbEluZGV4OmN9KX0sY29weTpmdW5jdGlvbihhKXt2YXIgYj1hLmluZGV4O251bGwhPT1iJiZ0aGlzLnNldEluZGV4KGIuY2xvbmUoKSk7dmFyIGI9YS5hdHRyaWJ1dGVzLGM7Zm9yKGMgaW4gYil0aGlzLmFkZEF0dHJpYnV0ZShjLGJbY10uY2xvbmUoKSk7YT1hLmdyb3VwcztjPTA7Zm9yKGI9CmEubGVuZ3RoO2M8YjtjKyspe3ZhciBkPWFbY107dGhpcy5hZGRHcm91cChkLnN0YXJ0LGQuY291bnQsZC5tYXRlcmlhbEluZGV4KX1yZXR1cm4gdGhpc319KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuZS5wcm90b3R5cGUse2NvdW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmNvdW50fX0sYXJyYXk6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuYXJyYXl9fX0pO09iamVjdC5hc3NpZ24obmUucHJvdG90eXBlLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLHNldFg6ZnVuY3Rpb24oYSxiKXt0aGlzLmRhdGEuYXJyYXlbYSp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1iO3JldHVybiB0aGlzfSxzZXRZOmZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhLmFycmF5W2EqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXT1iO3JldHVybiB0aGlzfSxzZXRaOmZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhLmFycmF5W2EqdGhpcy5kYXRhLnN0cmlkZSsKdGhpcy5vZmZzZXQrMl09YjtyZXR1cm4gdGhpc30sc2V0VzpmdW5jdGlvbihhLGIpe3RoaXMuZGF0YS5hcnJheVthKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM109YjtyZXR1cm4gdGhpc30sZ2V0WDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W2EqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19LGdldFk6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVthKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV19LGdldFo6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVthKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl19LGdldFc6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVthKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119LHNldFhZOmZ1bmN0aW9uKGEsYixjKXthPWEqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDt0aGlzLmRhdGEuYXJyYXlbYSswXT1iO3RoaXMuZGF0YS5hcnJheVthKwoxXT1jO3JldHVybiB0aGlzfSxzZXRYWVo6ZnVuY3Rpb24oYSxiLGMsZCl7YT1hKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7dGhpcy5kYXRhLmFycmF5W2ErMF09Yjt0aGlzLmRhdGEuYXJyYXlbYSsxXT1jO3RoaXMuZGF0YS5hcnJheVthKzJdPWQ7cmV0dXJuIHRoaXN9LHNldFhZWlc6ZnVuY3Rpb24oYSxiLGMsZCxlKXthPWEqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDt0aGlzLmRhdGEuYXJyYXlbYSswXT1iO3RoaXMuZGF0YS5hcnJheVthKzFdPWM7dGhpcy5kYXRhLmFycmF5W2ErMl09ZDt0aGlzLmRhdGEuYXJyYXlbYSszXT1lO3JldHVybiB0aGlzfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrYy5wcm90b3R5cGUsIm5lZWRzVXBkYXRlIix7c2V0OmZ1bmN0aW9uKGEpeyEwPT09YSYmdGhpcy52ZXJzaW9uKyt9fSk7T2JqZWN0LmFzc2lnbihrYy5wcm90b3R5cGUse2lzSW50ZXJsZWF2ZWRCdWZmZXI6ITAsc2V0QXJyYXk6ZnVuY3Rpb24oYSl7aWYoQXJyYXkuaXNBcnJheShhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpOwp0aGlzLmNvdW50PXZvaWQgMCE9PWE/YS5sZW5ndGgvdGhpcy5zdHJpZGU6MDt0aGlzLmFycmF5PWF9LHNldER5bmFtaWM6ZnVuY3Rpb24oYSl7dGhpcy5keW5hbWljPWE7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5hcnJheT1uZXcgYS5hcnJheS5jb25zdHJ1Y3RvcihhLmFycmF5KTt0aGlzLmNvdW50PWEuY291bnQ7dGhpcy5zdHJpZGU9YS5zdHJpZGU7dGhpcy5keW5hbWljPWEuZHluYW1pYztyZXR1cm4gdGhpc30sY29weUF0OmZ1bmN0aW9uKGEsYixjKXthKj10aGlzLnN0cmlkZTtjKj1iLnN0cmlkZTtmb3IodmFyIGQ9MCxlPXRoaXMuc3RyaWRlO2Q8ZTtkKyspdGhpcy5hcnJheVthK2RdPWIuYXJyYXlbYytkXTtyZXR1cm4gdGhpc30sc2V0OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9MCk7dGhpcy5hcnJheS5zZXQoYSxiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LG9uVXBsb2FkOmZ1bmN0aW9uKGEpe3RoaXMub25VcGxvYWRDYWxsYmFjaz0KYTtyZXR1cm4gdGhpc319KTtvZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGtjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOm9lLGlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXI6ITAsY29weTpmdW5jdGlvbihhKXtrYy5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5tZXNoUGVyQXR0cmlidXRlPWEubWVzaFBlckF0dHJpYnV0ZTtyZXR1cm4gdGhpc319KTtwZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEwucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6cGUsaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6ITAsY29weTpmdW5jdGlvbihhKXtMLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9YS5tZXNoUGVyQXR0cmlidXRlO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oWmUucHJvdG90eXBlLHtsaW5lUHJlY2lzaW9uOjEsc2V0OmZ1bmN0aW9uKGEsYil7dGhpcy5yYXkuc2V0KGEsCmIpfSxzZXRGcm9tQ2FtZXJhOmZ1bmN0aW9uKGEsYil7YiYmYi5pc1BlcnNwZWN0aXZlQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGIubWF0cml4V29ybGQpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQoYS54LGEueSwuNSkudW5wcm9qZWN0KGIpLnN1Yih0aGlzLnJheS5vcmlnaW4pLm5vcm1hbGl6ZSgpKTpiJiZiLmlzT3J0aG9ncmFwaGljQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0KGEueCxhLnksKGIubmVhcitiLmZhcikvKGIubmVhci1iLmZhcikpLnVucHJvamVjdChiKSx0aGlzLnJheS5kaXJlY3Rpb24uc2V0KDAsMCwtMSkudHJhbnNmb3JtRGlyZWN0aW9uKGIubWF0cml4V29ybGQpKTpjb25zb2xlLmVycm9yKCJUSFJFRS5SYXljYXN0ZXI6IFVuc3VwcG9ydGVkIGNhbWVyYSB0eXBlLiIpfSxpbnRlcnNlY3RPYmplY3Q6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtxZShhLHRoaXMsYyxiKTtjLnNvcnQoJGUpO3JldHVybiBjfSxpbnRlcnNlY3RPYmplY3RzOmZ1bmN0aW9uKGEsCmIpe3ZhciBjPVtdO2lmKCExPT09QXJyYXkuaXNBcnJheShhKSlyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0czogb2JqZWN0cyBpcyBub3QgYW4gQXJyYXkuIiksYztmb3IodmFyIGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspcWUoYVtkXSx0aGlzLGMsYik7Yy5zb3J0KCRlKTtyZXR1cm4gY319KTtPYmplY3QuYXNzaWduKGFmLnByb3RvdHlwZSx7c3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLm9sZFRpbWU9dGhpcy5zdGFydFRpbWU9KCJ1bmRlZmluZWQiPT09dHlwZW9mIHBlcmZvcm1hbmNlP0RhdGU6cGVyZm9ybWFuY2UpLm5vdygpO3RoaXMuZWxhcHNlZFRpbWU9MDt0aGlzLnJ1bm5pbmc9ITB9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmdldEVsYXBzZWRUaW1lKCk7dGhpcy5ydW5uaW5nPSExfSxnZXRFbGFwc2VkVGltZTpmdW5jdGlvbigpe3RoaXMuZ2V0RGVsdGEoKTtyZXR1cm4gdGhpcy5lbGFwc2VkVGltZX0sZ2V0RGVsdGE6ZnVuY3Rpb24oKXt2YXIgYT0KMDtpZih0aGlzLmF1dG9TdGFydCYmIXRoaXMucnVubmluZylyZXR1cm4gdGhpcy5zdGFydCgpLDA7aWYodGhpcy5ydW5uaW5nKXt2YXIgYj0oInVuZGVmaW5lZCI9PT10eXBlb2YgcGVyZm9ybWFuY2U/RGF0ZTpwZXJmb3JtYW5jZSkubm93KCksYT0oYi10aGlzLm9sZFRpbWUpLzFFMzt0aGlzLm9sZFRpbWU9Yjt0aGlzLmVsYXBzZWRUaW1lKz1hfXJldHVybiBhfX0pO09iamVjdC5hc3NpZ24oYmYucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3RoaXMucmFkaXVzPWE7dGhpcy5waGk9Yjt0aGlzLnRoZXRhPWM7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMucmFkaXVzPWEucmFkaXVzO3RoaXMucGhpPWEucGhpO3RoaXMudGhldGE9YS50aGV0YTtyZXR1cm4gdGhpc30sbWFrZVNhZmU6ZnVuY3Rpb24oKXt0aGlzLnBoaT1NYXRoLm1heCgxRS02LE1hdGgubWluKE1hdGguUEktCjFFLTYsdGhpcy5waGkpKTtyZXR1cm4gdGhpc30sc2V0RnJvbVZlY3RvcjM6ZnVuY3Rpb24oYSl7dGhpcy5yYWRpdXM9YS5sZW5ndGgoKTswPT09dGhpcy5yYWRpdXM/dGhpcy5waGk9dGhpcy50aGV0YT0wOih0aGlzLnRoZXRhPU1hdGguYXRhbjIoYS54LGEueiksdGhpcy5waGk9TWF0aC5hY29zKFkuY2xhbXAoYS55L3RoaXMucmFkaXVzLC0xLDEpKSk7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihjZi5wcm90b3R5cGUse3NldDpmdW5jdGlvbihhLGIsYyl7dGhpcy5yYWRpdXM9YTt0aGlzLnRoZXRhPWI7dGhpcy55PWM7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMucmFkaXVzPWEucmFkaXVzO3RoaXMudGhldGE9YS50aGV0YTt0aGlzLnk9YS55O3JldHVybiB0aGlzfSxzZXRGcm9tVmVjdG9yMzpmdW5jdGlvbihhKXt0aGlzLnJhZGl1cz1NYXRoLnNxcnQoYS54KgphLngrYS56KmEueik7dGhpcy50aGV0YT1NYXRoLmF0YW4yKGEueCxhLnopO3RoaXMueT1hLnk7cmV0dXJuIHRoaXN9fSk7cmEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQ2EucHJvdG90eXBlKTtyYS5wcm90b3R5cGUuY29uc3RydWN0b3I9cmE7cmEucHJvdG90eXBlLmNyZWF0ZUFuaW1hdGlvbj1mdW5jdGlvbihhLGIsYyxkKXtiPXtzdGFydDpiLGVuZDpjLGxlbmd0aDpjLWIrMSxmcHM6ZCxkdXJhdGlvbjooYy1iKS9kLGxhc3RGcmFtZTowLGN1cnJlbnRGcmFtZTowLGFjdGl2ZTohMSx0aW1lOjAsZGlyZWN0aW9uOjEsd2VpZ2h0OjEsZGlyZWN0aW9uQmFja3dhcmRzOiExLG1pcnJvcmVkTG9vcDohMX07dGhpcy5hbmltYXRpb25zTWFwW2FdPWI7dGhpcy5hbmltYXRpb25zTGlzdC5wdXNoKGIpfTtyYS5wcm90b3R5cGUuYXV0b0NyZWF0ZUFuaW1hdGlvbnM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPS8oW2Etel0rKV8/KFxkKykvaSxjLGQ9e30sZT10aGlzLmdlb21ldHJ5LGY9MCxnPWUubW9ycGhUYXJnZXRzLmxlbmd0aDtmPApnO2YrKyl7dmFyIGg9ZS5tb3JwaFRhcmdldHNbZl0ubmFtZS5tYXRjaChiKTtpZihoJiYxPGgubGVuZ3RoKXt2YXIgaz1oWzFdO2Rba118fChkW2tdPXtzdGFydDpJbmZpbml0eSxlbmQ6LUluZmluaXR5fSk7aD1kW2tdO2Y8aC5zdGFydCYmKGguc3RhcnQ9Zik7Zj5oLmVuZCYmKGguZW5kPWYpO2N8fChjPWspfX1mb3IoayBpbiBkKWg9ZFtrXSx0aGlzLmNyZWF0ZUFuaW1hdGlvbihrLGguc3RhcnQsaC5lbmQsYSk7dGhpcy5maXJzdEFuaW1hdGlvbj1jfTtyYS5wcm90b3R5cGUuc2V0QW5pbWF0aW9uRGlyZWN0aW9uRm9yd2FyZD1mdW5jdGlvbihhKXtpZihhPXRoaXMuYW5pbWF0aW9uc01hcFthXSlhLmRpcmVjdGlvbj0xLGEuZGlyZWN0aW9uQmFja3dhcmRzPSExfTtyYS5wcm90b3R5cGUuc2V0QW5pbWF0aW9uRGlyZWN0aW9uQmFja3dhcmQ9ZnVuY3Rpb24oYSl7aWYoYT10aGlzLmFuaW1hdGlvbnNNYXBbYV0pYS5kaXJlY3Rpb249LTEsYS5kaXJlY3Rpb25CYWNrd2FyZHM9ITB9O3JhLnByb3RvdHlwZS5zZXRBbmltYXRpb25GUFM9CmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5hbmltYXRpb25zTWFwW2FdO2MmJihjLmZwcz1iLGMuZHVyYXRpb249KGMuZW5kLWMuc3RhcnQpL2MuZnBzKX07cmEucHJvdG90eXBlLnNldEFuaW1hdGlvbkR1cmF0aW9uPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5hbmltYXRpb25zTWFwW2FdO2MmJihjLmR1cmF0aW9uPWIsYy5mcHM9KGMuZW5kLWMuc3RhcnQpL2MuZHVyYXRpb24pfTtyYS5wcm90b3R5cGUuc2V0QW5pbWF0aW9uV2VpZ2h0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5hbmltYXRpb25zTWFwW2FdO2MmJihjLndlaWdodD1iKX07cmEucHJvdG90eXBlLnNldEFuaW1hdGlvblRpbWU9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmFuaW1hdGlvbnNNYXBbYV07YyYmKGMudGltZT1iKX07cmEucHJvdG90eXBlLmdldEFuaW1hdGlvblRpbWU9ZnVuY3Rpb24oYSl7dmFyIGI9MDtpZihhPXRoaXMuYW5pbWF0aW9uc01hcFthXSliPWEudGltZTtyZXR1cm4gYn07cmEucHJvdG90eXBlLmdldEFuaW1hdGlvbkR1cmF0aW9uPQpmdW5jdGlvbihhKXt2YXIgYj0tMTtpZihhPXRoaXMuYW5pbWF0aW9uc01hcFthXSliPWEuZHVyYXRpb247cmV0dXJuIGJ9O3JhLnByb3RvdHlwZS5wbGF5QW5pbWF0aW9uPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYW5pbWF0aW9uc01hcFthXTtiPyhiLnRpbWU9MCxiLmFjdGl2ZT0hMCk6Y29uc29sZS53YXJuKCJUSFJFRS5Nb3JwaEJsZW5kTWVzaDogYW5pbWF0aW9uWyIrYSsiXSB1bmRlZmluZWQgaW4gLnBsYXlBbmltYXRpb24oKSIpfTtyYS5wcm90b3R5cGUuc3RvcEFuaW1hdGlvbj1mdW5jdGlvbihhKXtpZihhPXRoaXMuYW5pbWF0aW9uc01hcFthXSlhLmFjdGl2ZT0hMX07cmEucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPXRoaXMuYW5pbWF0aW9uc0xpc3QubGVuZ3RoO2I8YztiKyspe3ZhciBkPXRoaXMuYW5pbWF0aW9uc0xpc3RbYl07aWYoZC5hY3RpdmUpe3ZhciBlPWQuZHVyYXRpb24vZC5sZW5ndGg7ZC50aW1lKz1kLmRpcmVjdGlvbiphO2lmKGQubWlycm9yZWRMb29wKXtpZihkLnRpbWU+CmQuZHVyYXRpb258fDA+ZC50aW1lKWQuZGlyZWN0aW9uKj0tMSxkLnRpbWU+ZC5kdXJhdGlvbiYmKGQudGltZT1kLmR1cmF0aW9uLGQuZGlyZWN0aW9uQmFja3dhcmRzPSEwKSwwPmQudGltZSYmKGQudGltZT0wLGQuZGlyZWN0aW9uQmFja3dhcmRzPSExKX1lbHNlIGQudGltZSU9ZC5kdXJhdGlvbiwwPmQudGltZSYmKGQudGltZSs9ZC5kdXJhdGlvbik7dmFyIGY9ZC5zdGFydCtZLmNsYW1wKE1hdGguZmxvb3IoZC50aW1lL2UpLDAsZC5sZW5ndGgtMSksZz1kLndlaWdodDtmIT09ZC5jdXJyZW50RnJhbWUmJih0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1tkLmxhc3RGcmFtZV09MCx0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1tkLmN1cnJlbnRGcmFtZV09MSpnLHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzW2ZdPTAsZC5sYXN0RnJhbWU9ZC5jdXJyZW50RnJhbWUsZC5jdXJyZW50RnJhbWU9Zik7ZT1kLnRpbWUlZS9lO2QuZGlyZWN0aW9uQmFja3dhcmRzJiYoZT0xLWUpO2QuY3VycmVudEZyYW1lIT09CmQubGFzdEZyYW1lPyh0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1tkLmN1cnJlbnRGcmFtZV09ZSpnLHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzW2QubGFzdEZyYW1lXT0oMS1lKSpnKTp0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1tkLmN1cnJlbnRGcmFtZV09Z319fTskYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSk7JGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPSRjOyRjLnByb3RvdHlwZS5pc0ltbWVkaWF0ZVJlbmRlck9iamVjdD0hMDthZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkYS5wcm90b3R5cGUpO2FkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hZDthZC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcCxjPW5ldyBLYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD1bImEiLCJiIiwiYyJdO3RoaXMub2JqZWN0LnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtjLmdldE5vcm1hbE1hdHJpeCh0aGlzLm9iamVjdC5tYXRyaXhXb3JsZCk7CnZhciBlPXRoaXMub2JqZWN0Lm1hdHJpeFdvcmxkLGY9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLGc9dGhpcy5vYmplY3QuZ2VvbWV0cnk7aWYoZyYmZy5pc0dlb21ldHJ5KWZvcih2YXIgaD1nLnZlcnRpY2VzLGs9Zy5mYWNlcyxsPWc9MCxwPWsubGVuZ3RoO2w8cDtsKyspZm9yKHZhciBxPWtbbF0sbj0wLHI9cS52ZXJ0ZXhOb3JtYWxzLmxlbmd0aDtuPHI7bisrKXt2YXIgej1xLnZlcnRleE5vcm1hbHNbbl07YS5jb3B5KGhbcVtkW25dXV0pLmFwcGx5TWF0cml4NChlKTtiLmNvcHkoeikuYXBwbHlNYXRyaXgzKGMpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHRoaXMuc2l6ZSkuYWRkKGEpO2Yuc2V0WFlaKGcsYS54LGEueSxhLnopO2crPTE7Zi5zZXRYWVooZyxiLngsYi55LGIueik7Zys9MX1lbHNlIGlmKGcmJmcuaXNCdWZmZXJHZW9tZXRyeSlmb3IoZD1nLmF0dHJpYnV0ZXMucG9zaXRpb24saD1nLmF0dHJpYnV0ZXMubm9ybWFsLG49Zz0wLHI9ZC5jb3VudDtuPApyO24rKylhLnNldChkLmdldFgobiksZC5nZXRZKG4pLGQuZ2V0WihuKSkuYXBwbHlNYXRyaXg0KGUpLGIuc2V0KGguZ2V0WChuKSxoLmdldFkobiksaC5nZXRaKG4pKSxiLmFwcGx5TWF0cml4MyhjKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0aGlzLnNpemUpLmFkZChhKSxmLnNldFhZWihnLGEueCxhLnksYS56KSxnKz0xLGYuc2V0WFlaKGcsYi54LGIueSxiLnopLGcrPTE7Zi5uZWVkc1VwZGF0ZT0hMH19KCk7bGMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpO2xjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1sYztsYy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuY29uZS5nZW9tZXRyeS5kaXNwb3NlKCk7dGhpcy5jb25lLm1hdGVyaWFsLmRpc3Bvc2UoKX07bGMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5saWdodC5kaXN0YW5jZT90aGlzLmxpZ2h0LmRpc3RhbmNlOgoxRTMsZD1jKk1hdGgudGFuKHRoaXMubGlnaHQuYW5nbGUpO3RoaXMuY29uZS5zY2FsZS5zZXQoZCxkLGMpO2Euc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQubWF0cml4V29ybGQpO2Iuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQudGFyZ2V0Lm1hdHJpeFdvcmxkKTt0aGlzLmNvbmUubG9va0F0KGIuc3ViKGEpKTt0aGlzLmNvbmUubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKX19KCk7bWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGEucHJvdG90eXBlKTttYy5wcm90b3R5cGUuY29uc3RydWN0b3I9bWM7bWMucHJvdG90eXBlLmdldEJvbmVMaXN0PWZ1bmN0aW9uKGEpe3ZhciBiPVtdO2EmJmEuaXNCb25lJiZiLnB1c2goYSk7Zm9yKHZhciBjPTA7YzxhLmNoaWxkcmVuLmxlbmd0aDtjKyspYi5wdXNoLmFwcGx5KGIsdGhpcy5nZXRCb25lTGlzdChhLmNoaWxkcmVuW2NdKSk7cmV0dXJuIGJ9O21jLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYT0KbmV3IHAsYj1uZXcgSixjPW5ldyBKO3JldHVybiBmdW5jdGlvbigpe3ZhciBkPXRoaXMuZ2VvbWV0cnksZT1kLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtjLmdldEludmVyc2UodGhpcy5yb290Lm1hdHJpeFdvcmxkKTtmb3IodmFyIGY9MCxnPTA7Zjx0aGlzLmJvbmVzLmxlbmd0aDtmKyspe3ZhciBoPXRoaXMuYm9uZXNbZl07aC5wYXJlbnQmJmgucGFyZW50LmlzQm9uZSYmKGIubXVsdGlwbHlNYXRyaWNlcyhjLGgubWF0cml4V29ybGQpLGEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGIpLGUuc2V0WFlaKGcsYS54LGEueSxhLnopLGIubXVsdGlwbHlNYXRyaWNlcyhjLGgucGFyZW50Lm1hdHJpeFdvcmxkKSxhLnNldEZyb21NYXRyaXhQb3NpdGlvbihiKSxlLnNldFhZWihnKzEsYS54LGEueSxhLnopLGcrPTIpfWQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwfX0oKTtuYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShDYS5wcm90b3R5cGUpO25jLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0KbmM7bmMucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKTt0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX07bmMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3RoaXMubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKX07b2MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpO29jLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1vYztvYy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuY2hpbGRyZW5bMF0uZ2VvbWV0cnkuZGlzcG9zZSgpO3RoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuZGlzcG9zZSgpfTtvYy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jaGlsZHJlblswXTthLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcik7dmFyIGI9LjUqdGhpcy5saWdodC53aWR0aCxjPS41KnRoaXMubGlnaHQuaGVpZ2h0LGE9YS5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLApkPWEuYXJyYXk7ZFswXT1iO2RbMV09LWM7ZFsyXT0wO2RbM109YjtkWzRdPWM7ZFs1XT0wO2RbNl09LWI7ZFs3XT1jO2RbOF09MDtkWzldPS1iO2RbMTBdPS1jO2RbMTFdPTA7ZFsxMl09YjtkWzEzXT0tYztkWzE0XT0wO2EubmVlZHNVcGRhdGU9ITB9O3BjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKTtwYy5wcm90b3R5cGUuY29uc3RydWN0b3I9cGM7cGMucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmNoaWxkcmVuWzBdLmdlb21ldHJ5LmRpc3Bvc2UoKTt0aGlzLmNoaWxkcmVuWzBdLm1hdGVyaWFsLmRpc3Bvc2UoKX07cGMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IEgsYz1uZXcgSDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD10aGlzLmNoaWxkcmVuWzBdLGU9ZC5nZW9tZXRyeS5nZXRBdHRyaWJ1dGUoImNvbG9yIik7Yi5jb3B5KHRoaXMubGlnaHQuY29sb3IpO2MuY29weSh0aGlzLmxpZ2h0Lmdyb3VuZENvbG9yKTsKZm9yKHZhciBmPTAsZz1lLmNvdW50O2Y8ZztmKyspe3ZhciBoPWY8Zy8yP2I6YztlLnNldFhZWihmLGgucixoLmcsaC5iKX1kLmxvb2tBdChhLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKS5uZWdhdGUoKSk7ZS5uZWVkc1VwZGF0ZT0hMH19KCk7YmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGEucHJvdG90eXBlKTtiZC5wcm90b3R5cGUuY29uc3RydWN0b3I9YmQ7S2QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGEucHJvdG90eXBlKTtLZC5wcm90b3R5cGUuY29uc3RydWN0b3I9S2Q7Y2QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGEucHJvdG90eXBlKTtjZC5wcm90b3R5cGUuY29uc3RydWN0b3I9Y2Q7Y2QucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHAsYz1uZXcgS2E7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5vYmplY3QudXBkYXRlTWF0cml4V29ybGQoITApO2MuZ2V0Tm9ybWFsTWF0cml4KHRoaXMub2JqZWN0Lm1hdHJpeFdvcmxkKTsKZm9yKHZhciBkPXRoaXMub2JqZWN0Lm1hdHJpeFdvcmxkLGU9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLGY9dGhpcy5vYmplY3QuZ2VvbWV0cnksZz1mLnZlcnRpY2VzLGY9Zi5mYWNlcyxoPTAsaz0wLGw9Zi5sZW5ndGg7azxsO2srKyl7dmFyIHA9ZltrXSxxPXAubm9ybWFsO2EuY29weShnW3AuYV0pLmFkZChnW3AuYl0pLmFkZChnW3AuY10pLmRpdmlkZVNjYWxhcigzKS5hcHBseU1hdHJpeDQoZCk7Yi5jb3B5KHEpLmFwcGx5TWF0cml4MyhjKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0aGlzLnNpemUpLmFkZChhKTtlLnNldFhZWihoLGEueCxhLnksYS56KTtoKz0xO2Uuc2V0WFlaKGgsYi54LGIueSxiLnopO2grPTF9ZS5uZWVkc1VwZGF0ZT0hMH19KCk7cWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpO3FjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1xYztxYy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuY2hpbGRyZW5bMF0sCmI9dGhpcy5jaGlsZHJlblsxXTthLmdlb21ldHJ5LmRpc3Bvc2UoKTthLm1hdGVyaWFsLmRpc3Bvc2UoKTtiLmdlb21ldHJ5LmRpc3Bvc2UoKTtiLm1hdGVyaWFsLmRpc3Bvc2UoKX07cWMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHAsYz1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oKXthLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKTtiLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCk7Yy5zdWJWZWN0b3JzKGIsYSk7dmFyIGQ9dGhpcy5jaGlsZHJlblswXSxlPXRoaXMuY2hpbGRyZW5bMV07ZC5sb29rQXQoYyk7ZC5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpO2UubG9va0F0KGMpO2Uuc2NhbGUuej1jLmxlbmd0aCgpfX0oKTtkZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkYS5wcm90b3R5cGUpO2RkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1kZDsKZGQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxnLGgsayl7ZC5zZXQoZyxoLGspLnVucHJvamVjdChlKTthPWNbYV07aWYodm9pZCAwIT09YSlmb3IoZz1iLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKSxoPTAsaz1hLmxlbmd0aDtoPGs7aCsrKWcuc2V0WFlaKGFbaF0sZC54LGQueSxkLnopfXZhciBiLGMsZD1uZXcgcCxlPW5ldyBPYTtyZXR1cm4gZnVuY3Rpb24oKXtiPXRoaXMuZ2VvbWV0cnk7Yz10aGlzLnBvaW50TWFwO2UucHJvamVjdGlvbk1hdHJpeC5jb3B5KHRoaXMuY2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO2EoImMiLDAsMCwtMSk7YSgidCIsMCwwLDEpO2EoIm4xIiwtMSwtMSwtMSk7YSgibjIiLDEsLTEsLTEpO2EoIm4zIiwtMSwxLC0xKTthKCJuNCIsMSwxLC0xKTthKCJmMSIsLTEsLTEsMSk7YSgiZjIiLDEsLTEsMSk7YSgiZjMiLC0xLDEsMSk7YSgiZjQiLDEsMSwxKTthKCJ1MSIsLjcsMS4xLC0xKTthKCJ1MiIsLS43LDEuMSwtMSk7YSgidTMiLAowLDIsLTEpO2EoImNmMSIsLTEsMCwxKTthKCJjZjIiLDEsMCwxKTthKCJjZjMiLDAsLTEsMSk7YSgiY2Y0IiwwLDEsMSk7YSgiY24xIiwtMSwwLC0xKTthKCJjbjIiLDEsMCwtMSk7YSgiY24zIiwwLC0xLC0xKTthKCJjbjQiLDAsMSwtMSk7Yi5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIikubmVlZHNVcGRhdGU9ITB9fSgpO0JiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGRhLnByb3RvdHlwZSk7QmIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUJiO0JiLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgVGE7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZvaWQgMCE9PWImJmNvbnNvbGUud2FybigiVEhSRUUuQm94SGVscGVyOiAudXBkYXRlKCkgaGFzIG5vIGxvbmdlciBhcmd1bWVudHMuIik7dm9pZCAwIT09dGhpcy5vYmplY3QmJmEuc2V0RnJvbU9iamVjdCh0aGlzLm9iamVjdCk7aWYoIWEuaXNFbXB0eSgpKXtiPWEubWluO3ZhciBjPWEubWF4LGQ9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLAplPWQuYXJyYXk7ZVswXT1jLng7ZVsxXT1jLnk7ZVsyXT1jLno7ZVszXT1iLng7ZVs0XT1jLnk7ZVs1XT1jLno7ZVs2XT1iLng7ZVs3XT1iLnk7ZVs4XT1jLno7ZVs5XT1jLng7ZVsxMF09Yi55O2VbMTFdPWMuejtlWzEyXT1jLng7ZVsxM109Yy55O2VbMTRdPWIuejtlWzE1XT1iLng7ZVsxNl09Yy55O2VbMTddPWIuejtlWzE4XT1iLng7ZVsxOV09Yi55O2VbMjBdPWIuejtlWzIxXT1jLng7ZVsyMl09Yi55O2VbMjNdPWIuejtkLm5lZWRzVXBkYXRlPSEwO3RoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9fX0oKTtCYi5wcm90b3R5cGUuc2V0RnJvbU9iamVjdD1mdW5jdGlvbihhKXt0aGlzLm9iamVjdD1hO3RoaXMudXBkYXRlKCk7cmV0dXJuIHRoaXN9O3ZhciBMZCxyZTtDYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSk7Q2IucHJvdG90eXBlLmNvbnN0cnVjdG9yPUNiO0NiLnByb3RvdHlwZS5zZXREaXJlY3Rpb249ZnVuY3Rpb24oKXt2YXIgYT0KbmV3IHAsYjtyZXR1cm4gZnVuY3Rpb24oYyl7Ljk5OTk5PGMueT90aGlzLnF1YXRlcm5pb24uc2V0KDAsMCwwLDEpOi0uOTk5OTk+Yy55P3RoaXMucXVhdGVybmlvbi5zZXQoMSwwLDAsMCk6KGEuc2V0KGMueiwwLC1jLngpLm5vcm1hbGl6ZSgpLGI9TWF0aC5hY29zKGMueSksdGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoYSxiKSl9fSgpO0NiLnByb3RvdHlwZS5zZXRMZW5ndGg9ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMD09PWImJihiPS4yKmEpO3ZvaWQgMD09PWMmJihjPS4yKmIpO3RoaXMubGluZS5zY2FsZS5zZXQoMSxNYXRoLm1heCgwLGEtYiksMSk7dGhpcy5saW5lLnVwZGF0ZU1hdHJpeCgpO3RoaXMuY29uZS5zY2FsZS5zZXQoYyxiLGMpO3RoaXMuY29uZS5wb3NpdGlvbi55PWE7dGhpcy5jb25lLnVwZGF0ZU1hdHJpeCgpfTtDYi5wcm90b3R5cGUuc2V0Q29sb3I9ZnVuY3Rpb24oYSl7dGhpcy5saW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkoYSk7dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLmNvcHkoYSl9OwpNZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkYS5wcm90b3R5cGUpO01kLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1NZDt2YXIgUGQ9bmV3IHAsdmU9bmV3IHNlLHdlPW5ldyBzZSx4ZT1uZXcgc2U7SmEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTtKYS5wcm90b3R5cGUuY29uc3RydWN0b3I9SmE7SmEucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucG9pbnRzLGM9Yi5sZW5ndGg7Mj5jJiZjb25zb2xlLmxvZygiZHVoLCB5b3UgbmVlZCBhdCBsZWFzdCAyIHBvaW50cyIpO2EqPWMtKHRoaXMuY2xvc2VkPzA6MSk7dmFyIGQ9TWF0aC5mbG9vcihhKTthLT1kO3RoaXMuY2xvc2VkP2QrPTA8ZD8wOihNYXRoLmZsb29yKE1hdGguYWJzKGQpL2IubGVuZ3RoKSsxKSpiLmxlbmd0aDowPT09YSYmZD09PWMtMSYmKGQ9Yy0yLGE9MSk7dmFyIGUsZixnO3RoaXMuY2xvc2VkfHwwPGQ/ZT1iWyhkLTEpJWNdOihQZC5zdWJWZWN0b3JzKGJbMF0sYlsxXSkuYWRkKGJbMF0pLAplPVBkKTtmPWJbZCVjXTtnPWJbKGQrMSklY107dGhpcy5jbG9zZWR8fGQrMjxjP2I9YlsoZCsyKSVjXTooUGQuc3ViVmVjdG9ycyhiW2MtMV0sYltjLTJdKS5hZGQoYltjLTFdKSxiPVBkKTtpZih2b2lkIDA9PT10aGlzLnR5cGV8fCJjZW50cmlwZXRhbCI9PT10aGlzLnR5cGV8fCJjaG9yZGFsIj09PXRoaXMudHlwZSl7dmFyIGg9ImNob3JkYWwiPT09dGhpcy50eXBlPy41Oi4yNSxjPU1hdGgucG93KGUuZGlzdGFuY2VUb1NxdWFyZWQoZiksaCksZD1NYXRoLnBvdyhmLmRpc3RhbmNlVG9TcXVhcmVkKGcpLGgpLGg9TWF0aC5wb3coZy5kaXN0YW5jZVRvU3F1YXJlZChiKSxoKTsxRS00PmQmJihkPTEpOzFFLTQ+YyYmKGM9ZCk7MUUtND5oJiYoaD1kKTt2ZS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oZS54LGYueCxnLngsYi54LGMsZCxoKTt3ZS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oZS55LGYueSxnLnksYi55LGMsZCxoKTt4ZS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oZS56LApmLnosZy56LGIueixjLGQsaCl9ZWxzZSJjYXRtdWxscm9tIj09PXRoaXMudHlwZSYmKGM9dm9pZCAwIT09dGhpcy50ZW5zaW9uP3RoaXMudGVuc2lvbjouNSx2ZS5pbml0Q2F0bXVsbFJvbShlLngsZi54LGcueCxiLngsYyksd2UuaW5pdENhdG11bGxSb20oZS55LGYueSxnLnksYi55LGMpLHhlLmluaXRDYXRtdWxsUm9tKGUueixmLnosZy56LGIueixjKSk7cmV0dXJuIG5ldyBwKHZlLmNhbGMoYSksd2UuY2FsYyhhKSx4ZS5jYWxjKGEpKX07ZWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTtlZC5wcm90b3R5cGUuY29uc3RydWN0b3I9ZWQ7ZWQucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudjAsYz10aGlzLnYxLGQ9dGhpcy52MixlPXRoaXMudjM7cmV0dXJuIG5ldyBwKHliKGEsYi54LGMueCxkLngsZS54KSx5YihhLGIueSxjLnksZC55LGUueSkseWIoYSxiLnosYy56LGQueixlLnopKX07ZmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTsKZmQucHJvdG90eXBlLmNvbnN0cnVjdG9yPWZkO2ZkLnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnYwLGM9dGhpcy52MSxkPXRoaXMudjI7cmV0dXJuIG5ldyBwKHhiKGEsYi54LGMueCxkLngpLHhiKGEsYi55LGMueSxkLnkpLHhiKGEsYi56LGMueixkLnopKX07Z2QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTtnZC5wcm90b3R5cGUuY29uc3RydWN0b3I9Z2Q7Z2QucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGEpe2lmKDE9PT1hKXJldHVybiB0aGlzLnYyLmNsb25lKCk7dmFyIGI9bmV3IHA7Yi5zdWJWZWN0b3JzKHRoaXMudjIsdGhpcy52MSk7Yi5tdWx0aXBseVNjYWxhcihhKTtiLmFkZCh0aGlzLnYxKTtyZXR1cm4gYn07TmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWGEucHJvdG90eXBlKTtOZC5wcm90b3R5cGUuY29uc3RydWN0b3I9TmQ7bmEuY3JlYXRlPWZ1bmN0aW9uKGEsYil7Y29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKTsKYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuYS5wcm90b3R5cGUpO2EucHJvdG90eXBlLmNvbnN0cnVjdG9yPWE7YS5wcm90b3R5cGUuZ2V0UG9pbnQ9YjtyZXR1cm4gYX07ZGYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSmEucHJvdG90eXBlKTtlZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShKYS5wcm90b3R5cGUpO3RlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEphLnByb3RvdHlwZSk7T2JqZWN0LmFzc2lnbih0ZS5wcm90b3R5cGUse2luaXRGcm9tQXJyYXk6ZnVuY3Rpb24oYSl7Y29uc29sZS5lcnJvcigiVEhSRUUuU3BsaW5lOiAuaW5pdEZyb21BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGdldENvbnRyb2xQb2ludHNBcnJheTpmdW5jdGlvbihhKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TcGxpbmU6IC5nZXRDb250cm9sUG9pbnRzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyZXBhcmFtZXRyaXplQnlBcmNMZW5ndGg6ZnVuY3Rpb24oYSl7Y29uc29sZS5lcnJvcigiVEhSRUUuU3BsaW5lOiAucmVwYXJhbWV0cml6ZUJ5QXJjTGVuZ3RoKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX19KTsKYmQucHJvdG90eXBlLnNldENvbG9ycz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkdyaWRIZWxwZXI6IHNldENvbG9ycygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHBhc3MgdGhlbSBpbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZC4iKX07T2JqZWN0LmFzc2lnbihpZC5wcm90b3R5cGUse2NlbnRlcjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKTtyZXR1cm4gdGhpcy5nZXRDZW50ZXIoYSl9LGVtcHR5OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIik7cmV0dXJuIHRoaXMuaXNFbXB0eSgpfSxpc0ludGVyc2VjdGlvbkJveDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKTsKcmV0dXJuIHRoaXMuaW50ZXJzZWN0c0JveChhKX0sc2l6ZTpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpO3JldHVybiB0aGlzLmdldFNpemUoYSl9fSk7T2JqZWN0LmFzc2lnbihUYS5wcm90b3R5cGUse2NlbnRlcjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKTtyZXR1cm4gdGhpcy5nZXRDZW50ZXIoYSl9LGVtcHR5OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIik7cmV0dXJuIHRoaXMuaXNFbXB0eSgpfSxpc0ludGVyc2VjdGlvbkJveDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKTsKcmV0dXJuIHRoaXMuaW50ZXJzZWN0c0JveChhKX0saXNJbnRlcnNlY3Rpb25TcGhlcmU6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIik7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShhKX0sc2l6ZTpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpO3JldHVybiB0aGlzLmdldFNpemUoYSl9fSk7SGIucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIik7cmV0dXJuIHRoaXMuZ2V0Q2VudGVyKGEpfTtZLnJhbmRvbTE2PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRoLnJhbmRvbTE2KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIE1hdGgucmFuZG9tKCkgaW5zdGVhZC4iKTsKcmV0dXJuIE1hdGgucmFuZG9tKCl9O09iamVjdC5hc3NpZ24oS2EucHJvdG90eXBlLHtmbGF0dGVuVG9BcnJheU9mZnNldDpmdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpcy50b0FycmF5KGEsYil9LG11bHRpcGx5VmVjdG9yMzpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKTtyZXR1cm4gYS5hcHBseU1hdHJpeDModGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVuYW1lZC4gVXNlIG1hdHJpeC5hcHBseVRvVmVjdG9yM0FycmF5KCBhcnJheSApIGluc3RlYWQuIik7CnJldHVybiB0aGlzLmFwcGx5VG9WZWN0b3IzQXJyYXkoYSl9LGFwcGx5VG9CdWZmZXI6ZnVuY3Rpb24oYSxiLGMpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXIoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4LmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSApIGluc3RlYWQuIik7cmV0dXJuIHRoaXMuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZShhKX0sYXBwbHlUb1ZlY3RvcjNBcnJheTpmdW5jdGlvbihhLGIsYyl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfX0pO09iamVjdC5hc3NpZ24oSi5wcm90b3R5cGUse2V4dHJhY3RQb3NpdGlvbjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5leHRyYWN0UG9zaXRpb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5jb3B5UG9zaXRpb24oKS4iKTtyZXR1cm4gdGhpcy5jb3B5UG9zaXRpb24oYSl9LApmbGF0dGVuVG9BcnJheU9mZnNldDpmdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpcy50b0FycmF5KGEsYil9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuIGZ1bmN0aW9uKCl7dm9pZCAwPT09YSYmKGE9bmV3IHApO2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpO3JldHVybiBhLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywzKX19KCksc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKS4iKTsKcmV0dXJuIHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oYSl9LG11bHRpcGx5VG9BcnJheTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VG9BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LG11bHRpcGx5VmVjdG9yMzpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKTtyZXR1cm4gYS5hcHBseU1hdHJpeDQodGhpcyl9LG11bHRpcGx5VmVjdG9yNDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKTtyZXR1cm4gYS5hcHBseU1hdHJpeDQodGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVuYW1lZC4gVXNlIG1hdHJpeC5hcHBseVRvVmVjdG9yM0FycmF5KCBhcnJheSApIGluc3RlYWQuIik7CnJldHVybiB0aGlzLmFwcGx5VG9WZWN0b3IzQXJyYXkoYSl9LHJvdGF0ZUF4aXM6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnRyYW5zZm9ybURpcmVjdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKTthLnRyYW5zZm9ybURpcmVjdGlvbih0aGlzKX0sY3Jvc3NWZWN0b3I6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKTtyZXR1cm4gYS5hcHBseU1hdHJpeDQodGhpcyl9LHRyYW5zbGF0ZTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyb3RhdGVYOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSwKcm90YXRlWTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVZKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scm90YXRlWjpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVaKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scm90YXRlQnlBeGlzOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUJ5QXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFwcGx5VG9CdWZmZXI6ZnVuY3Rpb24oYSxiLGMpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9CdWZmZXIoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4LmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSApIGluc3RlYWQuIik7cmV0dXJuIHRoaXMuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZShhKX0sYXBwbHlUb1ZlY3RvcjNBcnJheTpmdW5jdGlvbihhLGIsYyl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSwKbWFrZUZydXN0dW06ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VGcnVzdHVtKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5tYWtlUGVyc3BlY3RpdmUoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpcy5tYWtlUGVyc3BlY3RpdmUoYSxiLGQsYyxlLGYpfX0pO3dhLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkxpbmU9ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmlzSW50ZXJzZWN0aW9uTGluZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNMaW5lKCkuIik7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c0xpbmUoYSl9O3FhLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKTsKcmV0dXJuIGEuYXBwbHlRdWF0ZXJuaW9uKHRoaXMpfTtPYmplY3QuYXNzaWduKGhiLnByb3RvdHlwZSx7aXNJbnRlcnNlY3Rpb25Cb3g6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKTtyZXR1cm4gdGhpcy5pbnRlcnNlY3RzQm94KGEpfSxpc0ludGVyc2VjdGlvblBsYW5lOmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpO3JldHVybiB0aGlzLmludGVyc2VjdHNQbGFuZShhKX0saXNJbnRlcnNlY3Rpb25TcGhlcmU6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKTtyZXR1cm4gdGhpcy5pbnRlcnNlY3RzU3BoZXJlKGEpfX0pOwpPYmplY3QuYXNzaWduKEFiLnByb3RvdHlwZSx7ZXh0cnVkZTpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgZGIodGhpcyxhKX0sbWFrZUdlb21ldHJ5OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBaYih0aGlzLGEpfX0pO09iamVjdC5hc3NpZ24oRC5wcm90b3R5cGUse2Zyb21BdHRyaWJ1dGU6ZnVuY3Rpb24oYSxiLGMpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpO3JldHVybiB0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxiLGMpfX0pO09iamVjdC5hc3NpZ24ocC5wcm90b3R5cGUsCntzZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLiIpfSxzZXRFdWxlckZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVF1YXRlcm5pb24oKSBpbnN0ZWFkLiIpfSxnZXRQb3NpdGlvbkZyb21NYXRyaXg6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuIik7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGEpfSxnZXRTY2FsZUZyb21NYXRyaXg6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0U2NhbGVGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFNjYWxlKCkuIik7CnJldHVybiB0aGlzLnNldEZyb21NYXRyaXhTY2FsZShhKX0sZ2V0Q29sdW1uRnJvbU1hdHJpeDpmdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldENvbHVtbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4Q29sdW1uKCkuIik7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbihiLGEpfSxhcHBseVByb2plY3Rpb246ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlQcm9qZWN0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5hcHBseU1hdHJpeDQoIG0gKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLmFwcGx5TWF0cml4NChhKX0sZnJvbUF0dHJpYnV0ZTpmdW5jdGlvbihhLGIsYyl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7cmV0dXJuIHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLApiLGMpfX0pO09iamVjdC5hc3NpZ24oZ2EucHJvdG90eXBlLHtmcm9tQXR0cmlidXRlOmZ1bmN0aW9uKGEsYixjKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3I0OiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKTtyZXR1cm4gdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKGEsYixjKX19KTtNLnByb3RvdHlwZS5jb21wdXRlVGFuZ2VudHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07T2JqZWN0LmFzc2lnbihCLnByb3RvdHlwZSx7Z2V0Q2hpbGRCeU5hbWU6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldENoaWxkQnlOYW1lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0T2JqZWN0QnlOYW1lKCkuIik7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlOYW1lKGEpfSxyZW5kZXJEZXB0aDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLiIpfSwKdHJhbnNsYXRlOmZ1bmN0aW9uKGEsYil7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIGluc3RlYWQuIik7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKGIsYSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQi5wcm90b3R5cGUse2V1bGVyT3JkZXI6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIik7cmV0dXJuIHRoaXMucm90YXRpb24ub3JkZXJ9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpO3RoaXMucm90YXRpb24ub3JkZXI9YX19LHVzZVF1YXRlcm5pb246e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9LApzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhCYy5wcm90b3R5cGUse29iamVjdHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTE9EOiAub2JqZWN0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5sZXZlbHMuIik7cmV0dXJuIHRoaXMubGV2ZWxzfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2MucHJvdG90eXBlLCJ1c2VWZXJ0ZXhUZXh0dXJlIix7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogdXNlVmVydGV4VGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlNrZWxldG9uOiB1c2VWZXJ0ZXhUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7Ck9iamVjdC5kZWZpbmVQcm9wZXJ0eShuYS5wcm90b3R5cGUsIl9fYXJjTGVuZ3RoRGl2aXNpb25zIix7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLl9fYXJjTGVuZ3RoRGl2aXNpb25zIGlzIG5vdyAuYXJjTGVuZ3RoRGl2aXNpb25zLiIpO3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9uc30sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuQ3VydmU6IC5fX2FyY0xlbmd0aERpdmlzaW9ucyBpcyBub3cgLmFyY0xlbmd0aERpdmlzaW9ucy4iKTt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz1hfX0pO3hhLnByb3RvdHlwZS5zZXRMZW5zPWZ1bmN0aW9uKGEsYil7Y29uc29sZS53YXJuKCJUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYS5zZXRMZW5zIGlzIGRlcHJlY2F0ZWQuIFVzZSAuc2V0Rm9jYWxMZW5ndGggYW5kIC5maWxtR2F1Z2UgZm9yIGEgcGhvdG9ncmFwaGljIHNldHVwLiIpO3ZvaWQgMCE9PWImJih0aGlzLmZpbG1HYXVnZT1iKTt0aGlzLnNldEZvY2FsTGVuZ3RoKGEpfTsKT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobWEucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpO3RoaXMuc2hhZG93LmNhbWVyYS5mb3Y9YX19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKTt0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1hfX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpOwp0aGlzLnNoYWRvdy5jYW1lcmEucmlnaHQ9YX19LHNoYWRvd0NhbWVyYVRvcDp7c2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFUb3AgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnRvcC4iKTt0aGlzLnNoYWRvdy5jYW1lcmEudG9wPWF9fSxzaGFkb3dDYW1lcmFCb3R0b206e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhQm90dG9tIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5ib3R0b20uIik7dGhpcy5zaGFkb3cuY2FtZXJhLmJvdHRvbT1hfX0sc2hhZG93Q2FtZXJhTmVhcjp7c2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFOZWFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5uZWFyLiIpO3RoaXMuc2hhZG93LmNhbWVyYS5uZWFyPWF9fSxzaGFkb3dDYW1lcmFGYXI6e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhRmFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5mYXIuIik7CnRoaXMuc2hhZG93LmNhbWVyYS5mYXI9YX19LHNoYWRvd0NhbWVyYVZpc2libGU6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFWaXNpYmxlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuQ2FtZXJhSGVscGVyKCBsaWdodC5zaGFkb3cuY2FtZXJhICkgaW5zdGVhZC4iKX19LHNoYWRvd0JpYXM6e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93QmlhcyBpcyBub3cgLnNoYWRvdy5iaWFzLiIpO3RoaXMuc2hhZG93LmJpYXM9YX19LHNoYWRvd0RhcmtuZXNzOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93RGFya25lc3MgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHNoYWRvd01hcFdpZHRoOntzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd01hcFdpZHRoIGlzIG5vdyAuc2hhZG93Lm1hcFNpemUud2lkdGguIik7CnRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9YX19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIik7dGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9YX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTC5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5sZW5ndGggaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5jb3VudCBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLmFycmF5Lmxlbmd0aH19fSk7T2JqZWN0LmFzc2lnbihJLnByb3RvdHlwZSx7YWRkSW5kZXg6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEluZGV4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0SW5kZXgoKS4iKTt0aGlzLnNldEluZGV4KGEpfSxhZGREcmF3Q2FsbDpmdW5jdGlvbihhLApiLGMpe3ZvaWQgMCE9PWMmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKTtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIik7dGhpcy5hZGRHcm91cChhLGIpfSxjbGVhckRyYXdDYWxsczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jbGVhckRyYXdDYWxscygpIGlzIG5vdyAuY2xlYXJHcm91cHMoKS4iKTt0aGlzLmNsZWFyR3JvdXBzKCl9LGNvbXB1dGVUYW5nZW50czpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlVGFuZ2VudHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxjb21wdXRlT2Zmc2V0czpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlT2Zmc2V0cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7Ck9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEkucHJvdG90eXBlLHtkcmF3Y2FsbHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuZHJhd2NhbGxzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKTtyZXR1cm4gdGhpcy5ncm91cHN9fSxvZmZzZXRzOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAub2Zmc2V0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIik7cmV0dXJuIHRoaXMuZ3JvdXBzfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhKZC5wcm90b3R5cGUse2R5bmFtaWM6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLmR5bmFtaWMgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIil9fSxvblVwZGF0ZTp7dmFsdWU6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IC5vblVwZGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBvYmplY3Qub25CZWZvcmVSZW5kZXIoKSBpbnN0ZWFkLiIpOwpyZXR1cm4gdGhpc319fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWi5wcm90b3R5cGUse3dyYXBBcm91bmQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9fSx3cmFwUkdCOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpO3JldHVybiBuZXcgSH19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGEucHJvdG90eXBlLHttZXRhbDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbDogLm1ldGFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCBpbnN0ZWFkLiIpO3JldHVybiExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsOiAubWV0YWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsIGluc3RlYWQiKX19fSk7Ck9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEVhLnByb3RvdHlwZSx7ZGVyaXZhdGl2ZXM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzfSxzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS4gU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKTt0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXM9YX19fSk7T2JqZWN0LmFzc2lnbihYZC5wcm90b3R5cGUse2dldEN1cnJlbnRSZW5kZXJUYXJnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4iKTtyZXR1cm4gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKX0sCnN1cHBvcnRzRmxvYXRUZXh0dXJlczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKX0sc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpfSxzdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXM6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpOwpyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIil9LHN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICkuIik7cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9LHN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQzpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnICkuIik7cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfSwKc3VwcG9ydHNCbGVuZE1pbk1heDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQmxlbmRNaW5NYXgoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnRVhUX2JsZW5kX21pbm1heCcgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfSxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpO3JldHVybiB0aGlzLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlc30sc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0luc3RhbmNlZEFycmF5cygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyApLiIpOwpyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpfSxlbmFibGVTY2lzc29yVGVzdDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKTt0aGlzLnNldFNjaXNzb3JUZXN0KGEpfSxpbml0TWF0ZXJpYWw6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5pbml0TWF0ZXJpYWwoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxhZGRQcmVQbHVnaW46ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQcmVQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxhZGRQb3N0UGx1Z2luOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHVwZGF0ZVNoYWRvd01hcDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnVwZGF0ZVNoYWRvd01hcCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7Ck9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFhkLnByb3RvdHlwZSx7c2hhZG93TWFwRW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLmVuYWJsZWR9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuIik7dGhpcy5zaGFkb3dNYXAuZW5hYmxlZD1hfX0sc2hhZG93TWFwVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLnR5cGV9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuIik7dGhpcy5zaGFkb3dNYXAudHlwZT1hfX0sc2hhZG93TWFwQ3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC5jdWxsRmFjZX0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGlzIG5vdyAuc2hhZG93TWFwLmN1bGxGYWNlLiIpOwp0aGlzLnNoYWRvd01hcC5jdWxsRmFjZT1hfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhKZS5wcm90b3R5cGUse2N1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJSZXZlcnNlU2lkZWQ/MjoxfSxzZXQ6ZnVuY3Rpb24oYSl7YT0xIT09YTtjb25zb2xlLndhcm4oIldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaXMgZGVwcmVjYXRlZC4gU2V0IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIHRvICIrYSsiLiIpO3RoaXMucmVuZGVyUmV2ZXJzZVNpZGVkPWF9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERiLnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIik7cmV0dXJuIHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIik7CnRoaXMudGV4dHVyZS53cmFwUz1hfX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIik7cmV0dXJuIHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIik7dGhpcy50ZXh0dXJlLndyYXBUPWF9fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKTtyZXR1cm4gdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKTt0aGlzLnRleHR1cmUubWFnRmlsdGVyPQphfX0sbWluRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIik7cmV0dXJuIHRoaXMudGV4dHVyZS5taW5GaWx0ZXJ9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIik7dGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1hfX0sYW5pc290cm9weTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIik7cmV0dXJuIHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5fSxzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIik7dGhpcy50ZXh0dXJlLmFuaXNvdHJvcHk9CmF9fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKTtyZXR1cm4gdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKTt0aGlzLnRleHR1cmUub2Zmc2V0PWF9fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKTtyZXR1cm4gdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKTt0aGlzLnRleHR1cmUucmVwZWF0PWF9fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKTsKcmV0dXJuIHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIik7dGhpcy50ZXh0dXJlLmZvcm1hdD1hfX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIik7cmV0dXJuIHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIik7dGhpcy50ZXh0dXJlLnR5cGU9YX19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpO3JldHVybiB0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSwKc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKTt0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPWF9fX0pO2pjLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IC5sb2FkIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5BdWRpb0xvYWRlciBpbnN0ZWFkLiIpO3ZhciBiPXRoaXM7KG5ldyBmZSkubG9hZChhLGZ1bmN0aW9uKGEpe2Iuc2V0QnVmZmVyKGEpfSk7cmV0dXJuIHRoaXN9O2tlLnByb3RvdHlwZS5nZXREYXRhPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpb0FuYWx5c2VyOiAuZ2V0RGF0YSgpIGlzIG5vdyAuZ2V0RnJlcXVlbmN5RGF0YSgpLiIpO3JldHVybiB0aGlzLmdldEZyZXF1ZW5jeURhdGEoKX07bC5XZWJHTFJlbmRlclRhcmdldEN1YmU9RWI7bC5XZWJHTFJlbmRlclRhcmdldD0KRGI7bC5XZWJHTFJlbmRlcmVyPVhkO2wuU2hhZGVyTGliPWFiO2wuVW5pZm9ybXNMaWI9VjtsLlVuaWZvcm1zVXRpbHM9SGE7bC5TaGFkZXJDaHVuaz1VO2wuRm9nRXhwMj1LYjtsLkZvZz1MYjtsLlNjZW5lPW1kO2wuTGVuc0ZsYXJlPVlkO2wuU3ByaXRlPUFjO2wuTE9EPUJjO2wuU2tpbm5lZE1lc2g9b2Q7bC5Ta2VsZXRvbj1DYztsLkJvbmU9bmQ7bC5NZXNoPUNhO2wuTGluZVNlZ21lbnRzPWRhO2wuTGluZUxvb3A9cGQ7bC5MaW5lPXlhO2wuUG9pbnRzPU1iO2wuR3JvdXA9RGM7bC5WaWRlb1RleHR1cmU9cWQ7bC5EYXRhVGV4dHVyZT1lYjtsLkNvbXByZXNzZWRUZXh0dXJlPU5iO2wuQ3ViZVRleHR1cmU9WmE7bC5DYW52YXNUZXh0dXJlPXJkO2wuRGVwdGhUZXh0dXJlPUVjO2wuVGV4dHVyZT1YO2wuQ29tcHJlc3NlZFRleHR1cmVMb2FkZXI9UWU7bC5EYXRhVGV4dHVyZUxvYWRlcj0kZDtsLkN1YmVUZXh0dXJlTG9hZGVyPWFlO2wuVGV4dHVyZUxvYWRlcj1zZDtsLk9iamVjdExvYWRlcj0KUmU7bC5NYXRlcmlhbExvYWRlcj1IZDtsLkJ1ZmZlckdlb21ldHJ5TG9hZGVyPWJlO2wuRGVmYXVsdExvYWRpbmdNYW5hZ2VyPUFhO2wuTG9hZGluZ01hbmFnZXI9WmQ7bC5KU09OTG9hZGVyPWNlO2wuSW1hZ2VMb2FkZXI9VmM7bC5Gb250TG9hZGVyPVRlO2wuRmlsZUxvYWRlcj11YTtsLkxvYWRlcj1nYztsLkNhY2hlPWhkO2wuQXVkaW9Mb2FkZXI9ZmU7bC5TcG90TGlnaHRTaGFkb3c9dWQ7bC5TcG90TGlnaHQ9dmQ7bC5Qb2ludExpZ2h0PXdkO2wuUmVjdEFyZWFMaWdodD1BZDtsLkhlbWlzcGhlcmVMaWdodD10ZDtsLkRpcmVjdGlvbmFsTGlnaHRTaGFkb3c9eGQ7bC5EaXJlY3Rpb25hbExpZ2h0PXlkO2wuQW1iaWVudExpZ2h0PXpkO2wuTGlnaHRTaGFkb3c9dWI7bC5MaWdodD1tYTtsLlN0ZXJlb0NhbWVyYT1VZTtsLlBlcnNwZWN0aXZlQ2FtZXJhPXhhO2wuT3J0aG9ncmFwaGljQ2FtZXJhPUpiO2wuQ3ViZUNhbWVyYT1JZDtsLkFycmF5Q2FtZXJhPWdlO2wuQ2FtZXJhPU9hO2wuQXVkaW9MaXN0ZW5lcj0KaGU7bC5Qb3NpdGlvbmFsQXVkaW89amU7bC5BdWRpb0NvbnRleHQ9aWU7bC5BdWRpb0FuYWx5c2VyPWtlO2wuQXVkaW89amM7bC5WZWN0b3JLZXlmcmFtZVRyYWNrPWVjO2wuU3RyaW5nS2V5ZnJhbWVUcmFjaz1FZDtsLlF1YXRlcm5pb25LZXlmcmFtZVRyYWNrPVhjO2wuTnVtYmVyS2V5ZnJhbWVUcmFjaz1mYztsLkNvbG9yS2V5ZnJhbWVUcmFjaz1HZDtsLkJvb2xlYW5LZXlmcmFtZVRyYWNrPUZkO2wuUHJvcGVydHlNaXhlcj1sZTtsLlByb3BlcnR5QmluZGluZz1vYTtsLktleWZyYW1lVHJhY2s9d2I7bC5BbmltYXRpb25VdGlscz12YTtsLkFuaW1hdGlvbk9iamVjdEdyb3VwPVdlO2wuQW5pbWF0aW9uTWl4ZXI9WWU7bC5BbmltYXRpb25DbGlwPUJhO2wuVW5pZm9ybT1KZDtsLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PW1lO2wuQnVmZmVyR2VvbWV0cnk9STtsLkdlb21ldHJ5SWRDb3VudD1mdW5jdGlvbigpe3JldHVybiBUZCsrfTtsLkdlb21ldHJ5PU07bC5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT0KbmU7bC5JbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj1vZTtsLkludGVybGVhdmVkQnVmZmVyPWtjO2wuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPXBlO2wuRmFjZTM9VmE7bC5PYmplY3QzRD1CO2wuUmF5Y2FzdGVyPVplO2wuTGF5ZXJzPVJkO2wuRXZlbnREaXNwYXRjaGVyPXNhO2wuQ2xvY2s9YWY7bC5RdWF0ZXJuaW9uTGluZWFySW50ZXJwb2xhbnQ9RGQ7bC5MaW5lYXJJbnRlcnBvbGFudD1XYztsLkRpc2NyZXRlSW50ZXJwb2xhbnQ9Q2Q7bC5DdWJpY0ludGVycG9sYW50PUJkO2wuSW50ZXJwb2xhbnQ9RGE7bC5UcmlhbmdsZT1VYTtsLk1hdGg9WTtsLlNwaGVyaWNhbD1iZjtsLkN5bGluZHJpY2FsPWNmO2wuUGxhbmU9d2E7bC5GcnVzdHVtPWpkO2wuU3BoZXJlPUdhO2wuUmF5PWhiO2wuTWF0cml4ND1KO2wuTWF0cml4Mz1LYTtsLkJveDM9VGE7bC5Cb3gyPWlkO2wuTGluZTM9SGI7bC5FdWxlcj1iYjtsLlZlY3RvcjQ9Z2E7bC5WZWN0b3IzPXA7bC5WZWN0b3IyPUQ7bC5RdWF0ZXJuaW9uPQpxYTtsLkNvbG9yPUg7bC5Nb3JwaEJsZW5kTWVzaD1yYTtsLkltbWVkaWF0ZVJlbmRlck9iamVjdD0kYztsLlZlcnRleE5vcm1hbHNIZWxwZXI9YWQ7bC5TcG90TGlnaHRIZWxwZXI9bGM7bC5Ta2VsZXRvbkhlbHBlcj1tYztsLlBvaW50TGlnaHRIZWxwZXI9bmM7bC5SZWN0QXJlYUxpZ2h0SGVscGVyPW9jO2wuSGVtaXNwaGVyZUxpZ2h0SGVscGVyPXBjO2wuR3JpZEhlbHBlcj1iZDtsLlBvbGFyR3JpZEhlbHBlcj1LZDtsLkZhY2VOb3JtYWxzSGVscGVyPWNkO2wuRGlyZWN0aW9uYWxMaWdodEhlbHBlcj1xYztsLkNhbWVyYUhlbHBlcj1kZDtsLkJveEhlbHBlcj1CYjtsLkFycm93SGVscGVyPUNiO2wuQXhpc0hlbHBlcj1NZDtsLkNhdG11bGxSb21DdXJ2ZTM9SmE7bC5DdWJpY0JlemllckN1cnZlMz1lZDtsLlF1YWRyYXRpY0JlemllckN1cnZlMz1mZDtsLkxpbmVDdXJ2ZTM9Z2Q7bC5BcmNDdXJ2ZT1OZDtsLkVsbGlwc2VDdXJ2ZT1YYTtsLlNwbGluZUN1cnZlPXpiO2wuQ3ViaWNCZXppZXJDdXJ2ZT0KaGM7bC5RdWFkcmF0aWNCZXppZXJDdXJ2ZT1pYztsLkxpbmVDdXJ2ZT1TYTtsLlNoYXBlPUFiO2wuUGF0aD1aYztsLlNoYXBlUGF0aD1kZTtsLkZvbnQ9ZWU7bC5DdXJ2ZVBhdGg9WWM7bC5DdXJ2ZT1uYTtsLlNoYXBlVXRpbHM9emE7bC5TY2VuZVV0aWxzPXtjcmVhdGVNdWx0aU1hdGVyaWFsT2JqZWN0OmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPW5ldyBEYyxkPTAsZT1iLmxlbmd0aDtkPGU7ZCsrKWMuYWRkKG5ldyBDYShhLGJbZF0pKTtyZXR1cm4gY30sZGV0YWNoOmZ1bmN0aW9uKGEsYixjKXthLmFwcGx5TWF0cml4KGIubWF0cml4V29ybGQpO2IucmVtb3ZlKGEpO2MuYWRkKGEpfSxhdHRhY2g6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPW5ldyBKO2QuZ2V0SW52ZXJzZShjLm1hdHJpeFdvcmxkKTthLmFwcGx5TWF0cml4KGQpO2IucmVtb3ZlKGEpO2MuYWRkKGEpfX07bC5XaXJlZnJhbWVHZW9tZXRyeT1PYjtsLlBhcmFtZXRyaWNHZW9tZXRyeT1GYztsLlBhcmFtZXRyaWNCdWZmZXJHZW9tZXRyeT0KUGI7bC5UZXRyYWhlZHJvbkdlb21ldHJ5PUhjO2wuVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeT1RYjtsLk9jdGFoZWRyb25HZW9tZXRyeT1JYztsLk9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeT1tYjtsLkljb3NhaGVkcm9uR2VvbWV0cnk9SmM7bC5JY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5PVJiO2wuRG9kZWNhaGVkcm9uR2VvbWV0cnk9S2M7bC5Eb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeT1TYjtsLlBvbHloZWRyb25HZW9tZXRyeT1HYztsLlBvbHloZWRyb25CdWZmZXJHZW9tZXRyeT1pYTtsLlR1YmVHZW9tZXRyeT1MYztsLlR1YmVCdWZmZXJHZW9tZXRyeT1UYjtsLlRvcnVzS25vdEdlb21ldHJ5PU1jO2wuVG9ydXNLbm90QnVmZmVyR2VvbWV0cnk9VWI7bC5Ub3J1c0dlb21ldHJ5PU5jO2wuVG9ydXNCdWZmZXJHZW9tZXRyeT1WYjtsLlRleHRHZW9tZXRyeT1PYztsLlRleHRCdWZmZXJHZW9tZXRyeT1XYjtsLlNwaGVyZUdlb21ldHJ5PVBjO2wuU3BoZXJlQnVmZmVyR2VvbWV0cnk9Cm5iO2wuUmluZ0dlb21ldHJ5PVFjO2wuUmluZ0J1ZmZlckdlb21ldHJ5PVhiO2wuUGxhbmVHZW9tZXRyeT14YztsLlBsYW5lQnVmZmVyR2VvbWV0cnk9bGI7bC5MYXRoZUdlb21ldHJ5PVJjO2wuTGF0aGVCdWZmZXJHZW9tZXRyeT1ZYjtsLlNoYXBlR2VvbWV0cnk9WmI7bC5TaGFwZUJ1ZmZlckdlb21ldHJ5PSRiO2wuRXh0cnVkZUdlb21ldHJ5PWRiO2wuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5PUZhO2wuRWRnZXNHZW9tZXRyeT1hYztsLkNvbmVHZW9tZXRyeT1TYztsLkNvbmVCdWZmZXJHZW9tZXRyeT1UYztsLkN5bGluZGVyR2VvbWV0cnk9b2I7bC5DeWxpbmRlckJ1ZmZlckdlb21ldHJ5PVdhO2wuQ2lyY2xlR2VvbWV0cnk9VWM7bC5DaXJjbGVCdWZmZXJHZW9tZXRyeT1iYztsLkJveEdlb21ldHJ5PUliO2wuQm94QnVmZmVyR2VvbWV0cnk9a2I7bC5TaGFkb3dNYXRlcmlhbD1jYztsLlNwcml0ZU1hdGVyaWFsPWNiO2wuUmF3U2hhZGVyTWF0ZXJpYWw9ZGM7bC5TaGFkZXJNYXRlcmlhbD0KRWE7bC5Qb2ludHNNYXRlcmlhbD1MYTtsLk1lc2hQaHlzaWNhbE1hdGVyaWFsPXBiO2wuTWVzaFN0YW5kYXJkTWF0ZXJpYWw9UmE7bC5NZXNoUGhvbmdNYXRlcmlhbD10YTtsLk1lc2hUb29uTWF0ZXJpYWw9cWI7bC5NZXNoTm9ybWFsTWF0ZXJpYWw9cmI7bC5NZXNoTGFtYmVydE1hdGVyaWFsPXNiO2wuTWVzaERlcHRoTWF0ZXJpYWw9JGE7bC5NZXNoQmFzaWNNYXRlcmlhbD1OYTtsLkxpbmVEYXNoZWRNYXRlcmlhbD10YjtsLkxpbmVCYXNpY01hdGVyaWFsPWhhO2wuTWF0ZXJpYWw9WjtsLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGU9d2M7bC5GbG9hdDMyQnVmZmVyQXR0cmlidXRlPUM7bC5VaW50MzJCdWZmZXJBdHRyaWJ1dGU9amI7bC5JbnQzMkJ1ZmZlckF0dHJpYnV0ZT12YztsLlVpbnQxNkJ1ZmZlckF0dHJpYnV0ZT1pYjtsLkludDE2QnVmZmVyQXR0cmlidXRlPXVjO2wuVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlPXRjO2wuVWludDhCdWZmZXJBdHRyaWJ1dGU9c2M7bC5JbnQ4QnVmZmVyQXR0cmlidXRlPQpyYztsLkJ1ZmZlckF0dHJpYnV0ZT1MO2wuUkVWSVNJT049Ijg1IjtsLk1PVVNFPXtMRUZUOjAsTUlERExFOjEsUklHSFQ6Mn07bC5DdWxsRmFjZU5vbmU9MDtsLkN1bGxGYWNlQmFjaz0xO2wuQ3VsbEZhY2VGcm9udD0yO2wuQ3VsbEZhY2VGcm9udEJhY2s9MztsLkZyb250RmFjZURpcmVjdGlvbkNXPTA7bC5Gcm9udEZhY2VEaXJlY3Rpb25DQ1c9MTtsLkJhc2ljU2hhZG93TWFwPTA7bC5QQ0ZTaGFkb3dNYXA9MTtsLlBDRlNvZnRTaGFkb3dNYXA9MjtsLkZyb250U2lkZT0wO2wuQmFja1NpZGU9MTtsLkRvdWJsZVNpZGU9MjtsLkZsYXRTaGFkaW5nPTE7bC5TbW9vdGhTaGFkaW5nPTI7bC5Ob0NvbG9ycz0wO2wuRmFjZUNvbG9ycz0xO2wuVmVydGV4Q29sb3JzPTI7bC5Ob0JsZW5kaW5nPTA7bC5Ob3JtYWxCbGVuZGluZz0xO2wuQWRkaXRpdmVCbGVuZGluZz0yO2wuU3VidHJhY3RpdmVCbGVuZGluZz0zO2wuTXVsdGlwbHlCbGVuZGluZz00O2wuQ3VzdG9tQmxlbmRpbmc9NTtsLkFkZEVxdWF0aW9uPQoxMDA7bC5TdWJ0cmFjdEVxdWF0aW9uPTEwMTtsLlJldmVyc2VTdWJ0cmFjdEVxdWF0aW9uPTEwMjtsLk1pbkVxdWF0aW9uPTEwMztsLk1heEVxdWF0aW9uPTEwNDtsLlplcm9GYWN0b3I9MjAwO2wuT25lRmFjdG9yPTIwMTtsLlNyY0NvbG9yRmFjdG9yPTIwMjtsLk9uZU1pbnVzU3JjQ29sb3JGYWN0b3I9MjAzO2wuU3JjQWxwaGFGYWN0b3I9MjA0O2wuT25lTWludXNTcmNBbHBoYUZhY3Rvcj0yMDU7bC5Ec3RBbHBoYUZhY3Rvcj0yMDY7bC5PbmVNaW51c0RzdEFscGhhRmFjdG9yPTIwNztsLkRzdENvbG9yRmFjdG9yPTIwODtsLk9uZU1pbnVzRHN0Q29sb3JGYWN0b3I9MjA5O2wuU3JjQWxwaGFTYXR1cmF0ZUZhY3Rvcj0yMTA7bC5OZXZlckRlcHRoPTA7bC5BbHdheXNEZXB0aD0xO2wuTGVzc0RlcHRoPTI7bC5MZXNzRXF1YWxEZXB0aD0zO2wuRXF1YWxEZXB0aD00O2wuR3JlYXRlckVxdWFsRGVwdGg9NTtsLkdyZWF0ZXJEZXB0aD02O2wuTm90RXF1YWxEZXB0aD03O2wuTXVsdGlwbHlPcGVyYXRpb249CjA7bC5NaXhPcGVyYXRpb249MTtsLkFkZE9wZXJhdGlvbj0yO2wuTm9Ub25lTWFwcGluZz0wO2wuTGluZWFyVG9uZU1hcHBpbmc9MTtsLlJlaW5oYXJkVG9uZU1hcHBpbmc9MjtsLlVuY2hhcnRlZDJUb25lTWFwcGluZz0zO2wuQ2luZW9uVG9uZU1hcHBpbmc9NDtsLlVWTWFwcGluZz0zMDA7bC5DdWJlUmVmbGVjdGlvbk1hcHBpbmc9MzAxO2wuQ3ViZVJlZnJhY3Rpb25NYXBwaW5nPTMwMjtsLkVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nPTMwMztsLkVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nPTMwNDtsLlNwaGVyaWNhbFJlZmxlY3Rpb25NYXBwaW5nPTMwNTtsLkN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nPTMwNjtsLkN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nPTMwNztsLlJlcGVhdFdyYXBwaW5nPTFFMztsLkNsYW1wVG9FZGdlV3JhcHBpbmc9MTAwMTtsLk1pcnJvcmVkUmVwZWF0V3JhcHBpbmc9MTAwMjtsLk5lYXJlc3RGaWx0ZXI9MTAwMztsLk5lYXJlc3RNaXBNYXBOZWFyZXN0RmlsdGVyPQoxMDA0O2wuTmVhcmVzdE1pcE1hcExpbmVhckZpbHRlcj0xMDA1O2wuTGluZWFyRmlsdGVyPTEwMDY7bC5MaW5lYXJNaXBNYXBOZWFyZXN0RmlsdGVyPTEwMDc7bC5MaW5lYXJNaXBNYXBMaW5lYXJGaWx0ZXI9MTAwODtsLlVuc2lnbmVkQnl0ZVR5cGU9MTAwOTtsLkJ5dGVUeXBlPTEwMTA7bC5TaG9ydFR5cGU9MTAxMTtsLlVuc2lnbmVkU2hvcnRUeXBlPTEwMTI7bC5JbnRUeXBlPTEwMTM7bC5VbnNpZ25lZEludFR5cGU9MTAxNDtsLkZsb2F0VHlwZT0xMDE1O2wuSGFsZkZsb2F0VHlwZT0xMDE2O2wuVW5zaWduZWRTaG9ydDQ0NDRUeXBlPTEwMTc7bC5VbnNpZ25lZFNob3J0NTU1MVR5cGU9MTAxODtsLlVuc2lnbmVkU2hvcnQ1NjVUeXBlPTEwMTk7bC5VbnNpZ25lZEludDI0OFR5cGU9MTAyMDtsLkFscGhhRm9ybWF0PTEwMjE7bC5SR0JGb3JtYXQ9MTAyMjtsLlJHQkFGb3JtYXQ9MTAyMztsLkx1bWluYW5jZUZvcm1hdD0xMDI0O2wuTHVtaW5hbmNlQWxwaGFGb3JtYXQ9MTAyNTtsLlJHQkVGb3JtYXQ9CjEwMjM7bC5EZXB0aEZvcm1hdD0xMDI2O2wuRGVwdGhTdGVuY2lsRm9ybWF0PTEwMjc7bC5SR0JfUzNUQ19EWFQxX0Zvcm1hdD0yMDAxO2wuUkdCQV9TM1RDX0RYVDFfRm9ybWF0PTIwMDI7bC5SR0JBX1MzVENfRFhUM19Gb3JtYXQ9MjAwMztsLlJHQkFfUzNUQ19EWFQ1X0Zvcm1hdD0yMDA0O2wuUkdCX1BWUlRDXzRCUFBWMV9Gb3JtYXQ9MjEwMDtsLlJHQl9QVlJUQ18yQlBQVjFfRm9ybWF0PTIxMDE7bC5SR0JBX1BWUlRDXzRCUFBWMV9Gb3JtYXQ9MjEwMjtsLlJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdD0yMTAzO2wuUkdCX0VUQzFfRm9ybWF0PTIxNTE7bC5Mb29wT25jZT0yMjAwO2wuTG9vcFJlcGVhdD0yMjAxO2wuTG9vcFBpbmdQb25nPTIyMDI7bC5JbnRlcnBvbGF0ZURpc2NyZXRlPTIzMDA7bC5JbnRlcnBvbGF0ZUxpbmVhcj0yMzAxO2wuSW50ZXJwb2xhdGVTbW9vdGg9MjMwMjtsLlplcm9DdXJ2YXR1cmVFbmRpbmc9MjQwMDtsLlplcm9TbG9wZUVuZGluZz0yNDAxO2wuV3JhcEFyb3VuZEVuZGluZz0KMjQwMjtsLlRyaWFuZ2xlc0RyYXdNb2RlPTA7bC5UcmlhbmdsZVN0cmlwRHJhd01vZGU9MTtsLlRyaWFuZ2xlRmFuRHJhd01vZGU9MjtsLkxpbmVhckVuY29kaW5nPTNFMztsLnNSR0JFbmNvZGluZz0zMDAxO2wuR2FtbWFFbmNvZGluZz0zMDA3O2wuUkdCRUVuY29kaW5nPTMwMDI7bC5Mb2dMdXZFbmNvZGluZz0zMDAzO2wuUkdCTTdFbmNvZGluZz0zMDA0O2wuUkdCTTE2RW5jb2Rpbmc9MzAwNTtsLlJHQkRFbmNvZGluZz0zMDA2O2wuQmFzaWNEZXB0aFBhY2tpbmc9MzIwMDtsLlJHQkFEZXB0aFBhY2tpbmc9MzIwMTtsLkN1YmVHZW9tZXRyeT1JYjtsLkZhY2U0PWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe2NvbnNvbGUud2FybigiVEhSRUUuRmFjZTQgaGFzIGJlZW4gcmVtb3ZlZC4gQSBUSFJFRS5GYWNlMyB3aWxsIGJlIGNyZWF0ZWQgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IFZhKGEsYixjLGUsZixnKX07bC5MaW5lU3RyaXA9MDtsLkxpbmVQaWVjZXM9MTtsLk1lc2hGYWNlTWF0ZXJpYWw9CmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTWVzaEZhY2VNYXRlcmlhbCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYW4gQXJyYXkgaW5zdGVhZC4iKTtyZXR1cm4gYX07bC5NdWx0aU1hdGVyaWFsPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPVtdKTtjb25zb2xlLndhcm4oIlRIUkVFLk11bHRpTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuIik7YS5pc011bHRpTWF0ZXJpYWw9ITA7YS5tYXRlcmlhbHM9YTthLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGEuc2xpY2UoKX07cmV0dXJuIGF9O2wuUG9pbnRDbG91ZD1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuUG9pbnRDbG91ZCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50cy4iKTtyZXR1cm4gbmV3IE1iKGEsYil9O2wuUGFydGljbGU9ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZSBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlNwcml0ZS4iKTsKcmV0dXJuIG5ldyBBYyhhKX07bC5QYXJ0aWNsZVN5c3RlbT1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVTeXN0ZW0gaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHMuIik7cmV0dXJuIG5ldyBNYihhLGIpfTtsLlBvaW50Q2xvdWRNYXRlcmlhbD1mdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLlBvaW50Q2xvdWRNYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpO3JldHVybiBuZXcgTGEoYSl9O2wuUGFydGljbGVCYXNpY01hdGVyaWFsPWZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVCYXNpY01hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIik7cmV0dXJuIG5ldyBMYShhKX07bC5QYXJ0aWNsZVN5c3RlbU1hdGVyaWFsPWZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVTeXN0ZW1NYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpOwpyZXR1cm4gbmV3IExhKGEpfTtsLlZlcnRleD1mdW5jdGlvbihhLGIsYyl7Y29uc29sZS53YXJuKCJUSFJFRS5WZXJ0ZXggaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLlZlY3RvcjMgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IHAoYSxiLGMpfTtsLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUoKS5zZXREeW5hbWljKCB0cnVlICkgaW5zdGVhZC4iKTtyZXR1cm4obmV3IEwoYSxiKSkuc2V0RHluYW1pYyghMCl9O2wuSW50OEF0dHJpYnV0ZT1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuSW50OEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDhCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgcmMoYSxiKX07bC5VaW50OEF0dHJpYnV0ZT0KZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQ4QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDhCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgc2MoYSxiKX07bC5VaW50OENsYW1wZWRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQ4Q2xhbXBlZEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyB0YyhhLGIpfTtsLkludDE2QXR0cmlidXRlPWZ1bmN0aW9uKGEsYil7Y29uc29sZS53YXJuKCJUSFJFRS5JbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDE2QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IHVjKGEsYil9O2wuVWludDE2QXR0cmlidXRlPWZ1bmN0aW9uKGEsYil7Y29uc29sZS53YXJuKCJUSFJFRS5VaW50MTZBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpOwpyZXR1cm4gbmV3IGliKGEsYil9O2wuSW50MzJBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLkludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50MzJCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgdmMoYSxiKX07bC5VaW50MzJBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBqYihhLGIpfTtsLkZsb2F0MzJBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLkZsb2F0MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5GbG9hdDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IEMoYSxiKX07bC5GbG9hdDY0QXR0cmlidXRlPQpmdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuRmxvYXQ2NEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgd2MoYSxiKX07bC5DbG9zZWRTcGxpbmVDdXJ2ZTM9ZGY7bC5TcGxpbmVDdXJ2ZTM9ZWY7bC5TcGxpbmU9dGU7bC5Cb3VuZGluZ0JveEhlbHBlcj1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuQm91bmRpbmdCb3hIZWxwZXIgaGFzIGJlZW4gZGVwcmVjYXRlZC4gQ3JlYXRpbmcgYSBUSFJFRS5Cb3hIZWxwZXIgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IEJiKGEsYil9O2wuRWRnZXNIZWxwZXI9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLkVkZ2VzSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5FZGdlc0dlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIG5ldyBkYShuZXcgYWMoYS5nZW9tZXRyeSksbmV3IGhhKHtjb2xvcjp2b2lkIDAhPT0KYj9iOjE2Nzc3MjE1fSkpfTtsLldpcmVmcmFtZUhlbHBlcj1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuV2lyZWZyYW1lSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5XaXJlZnJhbWVHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgZGEobmV3IE9iKGEuZ2VvbWV0cnkpLG5ldyBoYSh7Y29sb3I6dm9pZCAwIT09Yj9iOjE2Nzc3MjE1fSkpfTtsLlhIUkxvYWRlcj1mdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLlhIUkxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkZpbGVMb2FkZXIuIik7cmV0dXJuIG5ldyB1YShhKX07bC5CaW5hcnlUZXh0dXJlTG9hZGVyPWZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuQmluYXJ5VGV4dHVyZUxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkRhdGFUZXh0dXJlTG9hZGVyLiIpO3JldHVybiBuZXcgJGQoYSl9O2wuR2VvbWV0cnlVdGlscz17bWVyZ2U6ZnVuY3Rpb24oYSxiLApjKXtjb25zb2xlLndhcm4oIlRIUkVFLkdlb21ldHJ5VXRpbHM6IC5tZXJnZSgpIGhhcyBiZWVuIG1vdmVkIHRvIEdlb21ldHJ5LiBVc2UgZ2VvbWV0cnkubWVyZ2UoIGdlb21ldHJ5MiwgbWF0cml4LCBtYXRlcmlhbEluZGV4T2Zmc2V0ICkgaW5zdGVhZC4iKTt2YXIgZDtiLmlzTWVzaCYmKGIubWF0cml4QXV0b1VwZGF0ZSYmYi51cGRhdGVNYXRyaXgoKSxkPWIubWF0cml4LGI9Yi5nZW9tZXRyeSk7YS5tZXJnZShiLGQsYyl9LGNlbnRlcjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkdlb21ldHJ5VXRpbHM6IC5jZW50ZXIoKSBoYXMgYmVlbiBtb3ZlZCB0byBHZW9tZXRyeS4gVXNlIGdlb21ldHJ5LmNlbnRlcigpIGluc3RlYWQuIik7cmV0dXJuIGEuY2VudGVyKCl9fTtsLkltYWdlVXRpbHM9e2Nyb3NzT3JpZ2luOnZvaWQgMCxsb2FkVGV4dHVyZTpmdW5jdGlvbihhLGIsYyxkKXtjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMubG9hZFRleHR1cmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLlRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLiIpOwp2YXIgZT1uZXcgc2Q7ZS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTthPWUubG9hZChhLGMsdm9pZCAwLGQpO2ImJihhLm1hcHBpbmc9Yik7cmV0dXJuIGF9LGxvYWRUZXh0dXJlQ3ViZTpmdW5jdGlvbihhLGIsYyxkKXtjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMubG9hZFRleHR1cmVDdWJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5DdWJlVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7dmFyIGU9bmV3IGFlO2Uuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7YT1lLmxvYWQoYSxjLHZvaWQgMCxkKTtiJiYoYS5tYXBwaW5nPWIpO3JldHVybiBhfSxsb2FkQ29tcHJlc3NlZFRleHR1cmU6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LGxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfX07CmwuUHJvamVjdG9yPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvamVjdG9yIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qcy9yZW5kZXJlcnMvUHJvamVjdG9yLmpzLiIpO3RoaXMucHJvamVjdFZlY3Rvcj1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuUHJvamVjdG9yOiAucHJvamVjdFZlY3RvcigpIGlzIG5vdyB2ZWN0b3IucHJvamVjdCgpLiIpO2EucHJvamVjdChiKX07dGhpcy51bnByb2plY3RWZWN0b3I9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLlByb2plY3RvcjogLnVucHJvamVjdFZlY3RvcigpIGlzIG5vdyB2ZWN0b3IudW5wcm9qZWN0KCkuIik7YS51bnByb2plY3QoYil9O3RoaXMucGlja2luZ1JheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb2plY3RvcjogLnBpY2tpbmdSYXkoKSBpcyBub3cgcmF5Y2FzdGVyLnNldEZyb21DYW1lcmEoKS4iKX19O2wuQ2FudmFzUmVuZGVyZXI9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5DYW52YXNSZW5kZXJlciBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanMvcmVuZGVyZXJzL0NhbnZhc1JlbmRlcmVyLmpzIik7CnRoaXMuZG9tRWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJjYW52YXMiKTt0aGlzLmNsZWFyPWZ1bmN0aW9uKCl7fTt0aGlzLnJlbmRlcj1mdW5jdGlvbigpe307dGhpcy5zZXRDbGVhckNvbG9yPWZ1bmN0aW9uKCl7fTt0aGlzLnNldFNpemU9ZnVuY3Rpb24oKXt9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkobCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KTsK(Line 354)
Message:
THREE.Color: Unknown color gray10
console-api warning URL: data:application/x-javascript;base64,Ly8gdGhyZWVqcy5vcmcvbGljZW5zZQooZnVuY3Rpb24obCxzYSl7Im9iamVjdCI9PT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPT10eXBlb2YgbW9kdWxlP3NhKGV4cG9ydHMpOiJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiXSxzYSk6c2EobC5USFJFRT1sLlRIUkVFfHx7fSl9KSh0aGlzLGZ1bmN0aW9uKGwpe2Z1bmN0aW9uIHNhKCl7fWZ1bmN0aW9uIEQoYSxiKXt0aGlzLng9YXx8MDt0aGlzLnk9Ynx8MH1mdW5jdGlvbiBYKGEsYixjLGQsZSxmLGcsaCxrLG0pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOmpmKyt9KTt0aGlzLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKTt0aGlzLm5hbWU9IiI7dGhpcy5pbWFnZT12b2lkIDAhPT1hP2E6WC5ERUZBVUxUX0lNQUdFO3RoaXMubWlwbWFwcz1bXTt0aGlzLm1hcHBpbmc9dm9pZCAwIT09Yj9iOlguREVGQVVMVF9NQVBQSU5HO3RoaXMud3JhcFM9dm9pZCAwIT09Yz9jOjEwMDE7dGhpcy53cmFwVD0Kdm9pZCAwIT09ZD9kOjEwMDE7dGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09ZT9lOjEwMDY7dGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09Zj9mOjEwMDg7dGhpcy5hbmlzb3Ryb3B5PXZvaWQgMCE9PWs/azoxO3RoaXMuZm9ybWF0PXZvaWQgMCE9PWc/ZzoxMDIzO3RoaXMudHlwZT12b2lkIDAhPT1oP2g6MTAwOTt0aGlzLm9mZnNldD1uZXcgRCgwLDApO3RoaXMucmVwZWF0PW5ldyBEKDEsMSk7dGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITA7dGhpcy5wcmVtdWx0aXBseUFscGhhPSExO3RoaXMuZmxpcFk9ITA7dGhpcy51bnBhY2tBbGlnbm1lbnQ9NDt0aGlzLmVuY29kaW5nPXZvaWQgMCE9PW0/bTozRTM7dGhpcy52ZXJzaW9uPTA7dGhpcy5vblVwZGF0ZT1udWxsfWZ1bmN0aW9uIGdhKGEsYixjLGQpe3RoaXMueD1hfHwwO3RoaXMueT1ifHwwO3RoaXMuej1jfHwwO3RoaXMudz12b2lkIDAhPT1kP2Q6MX1mdW5jdGlvbiBEYihhLGIsYyl7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7dGhpcy53aWR0aD0KYTt0aGlzLmhlaWdodD1iO3RoaXMuc2Npc3Nvcj1uZXcgZ2EoMCwwLGEsYik7dGhpcy5zY2lzc29yVGVzdD0hMTt0aGlzLnZpZXdwb3J0PW5ldyBnYSgwLDAsYSxiKTtjPWN8fHt9O3ZvaWQgMD09PWMubWluRmlsdGVyJiYoYy5taW5GaWx0ZXI9MTAwNik7dGhpcy50ZXh0dXJlPW5ldyBYKHZvaWQgMCx2b2lkIDAsYy53cmFwUyxjLndyYXBULGMubWFnRmlsdGVyLGMubWluRmlsdGVyLGMuZm9ybWF0LGMudHlwZSxjLmFuaXNvdHJvcHksYy5lbmNvZGluZyk7dGhpcy5kZXB0aEJ1ZmZlcj12b2lkIDAhPT1jLmRlcHRoQnVmZmVyP2MuZGVwdGhCdWZmZXI6ITA7dGhpcy5zdGVuY2lsQnVmZmVyPXZvaWQgMCE9PWMuc3RlbmNpbEJ1ZmZlcj9jLnN0ZW5jaWxCdWZmZXI6ITA7dGhpcy5kZXB0aFRleHR1cmU9dm9pZCAwIT09Yy5kZXB0aFRleHR1cmU/Yy5kZXB0aFRleHR1cmU6bnVsbH1mdW5jdGlvbiBFYihhLGIsYyl7RGIuY2FsbCh0aGlzLGEsYixjKTt0aGlzLmFjdGl2ZU1pcE1hcExldmVsPQp0aGlzLmFjdGl2ZUN1YmVGYWNlPTB9ZnVuY3Rpb24gcWEoYSxiLGMsZCl7dGhpcy5feD1hfHwwO3RoaXMuX3k9Ynx8MDt0aGlzLl96PWN8fDA7dGhpcy5fdz12b2lkIDAhPT1kP2Q6MX1mdW5jdGlvbiBwKGEsYixjKXt0aGlzLng9YXx8MDt0aGlzLnk9Ynx8MDt0aGlzLno9Y3x8MH1mdW5jdGlvbiBKKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07MDxhcmd1bWVudHMubGVuZ3RoJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfWZ1bmN0aW9uIGViKGEsYixjLGQsZSxmLGcsaCxrLG0sdSxxKXtYLmNhbGwodGhpcyxudWxsLGYsZyxoLGssbSxkLGUsdSxxKTt0aGlzLmltYWdlPXtkYXRhOmEsd2lkdGg6YixoZWlnaHQ6Y307dGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09az9rOjEwMDM7dGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09Cm0/bToxMDAzO3RoaXMuZmxpcFk9dGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITE7dGhpcy51bnBhY2tBbGlnbm1lbnQ9MX1mdW5jdGlvbiBaYShhLGIsYyxkLGUsZixnLGgsayxtKXthPXZvaWQgMCE9PWE/YTpbXTtYLmNhbGwodGhpcyxhLHZvaWQgMCE9PWI/YjozMDEsYyxkLGUsZixnLGgsayxtKTt0aGlzLmZsaXBZPSExfWZ1bmN0aW9uIEZiKGEsYixjKXt2YXIgZD1hWzBdO2lmKDA+PWR8fDA8ZClyZXR1cm4gYTt2YXIgZT1iKmMsZj15ZVtlXTt2b2lkIDA9PT1mJiYoZj1uZXcgRmxvYXQzMkFycmF5KGUpLHllW2VdPWYpO2lmKDAhPT1iKWZvcihkLnRvQXJyYXkoZiwwKSxkPTEsZT0wO2QhPT1iOysrZCllKz1jLGFbZF0udG9BcnJheShmLGUpO3JldHVybiBmfWZ1bmN0aW9uIHplKGEsYil7dmFyIGM9QWVbYl07dm9pZCAwPT09YyYmKGM9bmV3IEludDMyQXJyYXkoYiksQWVbYl09Yyk7Zm9yKHZhciBkPTA7ZCE9PWI7KytkKWNbZF09YS5hbGxvY1RleHR1cmVVbml0KCk7cmV0dXJuIGN9ZnVuY3Rpb24ga2YoYSwKYil7YS51bmlmb3JtMWYodGhpcy5hZGRyLGIpfWZ1bmN0aW9uIGxmKGEsYil7YS51bmlmb3JtMWkodGhpcy5hZGRyLGIpfWZ1bmN0aW9uIG1mKGEsYil7dm9pZCAwPT09Yi54P2EudW5pZm9ybTJmdih0aGlzLmFkZHIsYik6YS51bmlmb3JtMmYodGhpcy5hZGRyLGIueCxiLnkpfWZ1bmN0aW9uIG5mKGEsYil7dm9pZCAwIT09Yi54P2EudW5pZm9ybTNmKHRoaXMuYWRkcixiLngsYi55LGIueik6dm9pZCAwIT09Yi5yP2EudW5pZm9ybTNmKHRoaXMuYWRkcixiLnIsYi5nLGIuYik6YS51bmlmb3JtM2Z2KHRoaXMuYWRkcixiKX1mdW5jdGlvbiBvZihhLGIpe3ZvaWQgMD09PWIueD9hLnVuaWZvcm00ZnYodGhpcy5hZGRyLGIpOmEudW5pZm9ybTRmKHRoaXMuYWRkcixiLngsYi55LGIueixiLncpfWZ1bmN0aW9uIHBmKGEsYil7YS51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxiLmVsZW1lbnRzfHxiKX1mdW5jdGlvbiBxZihhLGIpe3ZvaWQgMD09PWIuZWxlbWVudHM/YS51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwKITEsYik6KEJlLnNldChiLmVsZW1lbnRzKSxhLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLEJlKSl9ZnVuY3Rpb24gcmYoYSxiKXt2b2lkIDA9PT1iLmVsZW1lbnRzP2EudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsYik6KENlLnNldChiLmVsZW1lbnRzKSxhLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLENlKSl9ZnVuY3Rpb24gc2YoYSxiLGMpe3ZhciBkPWMuYWxsb2NUZXh0dXJlVW5pdCgpO2EudW5pZm9ybTFpKHRoaXMuYWRkcixkKTtjLnNldFRleHR1cmUyRChifHxEZSxkKX1mdW5jdGlvbiB0ZihhLGIsYyl7dmFyIGQ9Yy5hbGxvY1RleHR1cmVVbml0KCk7YS51bmlmb3JtMWkodGhpcy5hZGRyLGQpO2Muc2V0VGV4dHVyZUN1YmUoYnx8RWUsZCl9ZnVuY3Rpb24gRmUoYSxiKXthLnVuaWZvcm0yaXYodGhpcy5hZGRyLGIpfWZ1bmN0aW9uIEdlKGEsYil7YS51bmlmb3JtM2l2KHRoaXMuYWRkcixiKX1mdW5jdGlvbiBIZShhLGIpe2EudW5pZm9ybTRpdih0aGlzLmFkZHIsCmIpfWZ1bmN0aW9uIHVmKGEpe3N3aXRjaChhKXtjYXNlIDUxMjY6cmV0dXJuIGtmO2Nhc2UgMzU2NjQ6cmV0dXJuIG1mO2Nhc2UgMzU2NjU6cmV0dXJuIG5mO2Nhc2UgMzU2NjY6cmV0dXJuIG9mO2Nhc2UgMzU2NzQ6cmV0dXJuIHBmO2Nhc2UgMzU2NzU6cmV0dXJuIHFmO2Nhc2UgMzU2NzY6cmV0dXJuIHJmO2Nhc2UgMzU2Nzg6cmV0dXJuIHNmO2Nhc2UgMzU2ODA6cmV0dXJuIHRmO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBsZjtjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIEZlO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gR2U7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBIZX19ZnVuY3Rpb24gdmYoYSxiKXthLnVuaWZvcm0xZnYodGhpcy5hZGRyLGIpfWZ1bmN0aW9uIHdmKGEsYil7YS51bmlmb3JtMWl2KHRoaXMuYWRkcixiKX1mdW5jdGlvbiB4ZihhLGIpe2EudW5pZm9ybTJmdih0aGlzLmFkZHIsRmIoYix0aGlzLnNpemUsMikpfWZ1bmN0aW9uIHlmKGEsCmIpe2EudW5pZm9ybTNmdih0aGlzLmFkZHIsRmIoYix0aGlzLnNpemUsMykpfWZ1bmN0aW9uIHpmKGEsYil7YS51bmlmb3JtNGZ2KHRoaXMuYWRkcixGYihiLHRoaXMuc2l6ZSw0KSl9ZnVuY3Rpb24gQWYoYSxiKXthLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLEZiKGIsdGhpcy5zaXplLDQpKX1mdW5jdGlvbiBCZihhLGIpe2EudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsRmIoYix0aGlzLnNpemUsOSkpfWZ1bmN0aW9uIENmKGEsYil7YS51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxGYihiLHRoaXMuc2l6ZSwxNikpfWZ1bmN0aW9uIERmKGEsYixjKXt2YXIgZD1iLmxlbmd0aCxlPXplKGMsZCk7YS51bmlmb3JtMWl2KHRoaXMuYWRkcixlKTtmb3IoYT0wO2EhPT1kOysrYSljLnNldFRleHR1cmUyRChiW2FdfHxEZSxlW2FdKX1mdW5jdGlvbiBFZihhLGIsYyl7dmFyIGQ9Yi5sZW5ndGgsZT16ZShjLGQpO2EudW5pZm9ybTFpdih0aGlzLmFkZHIsZSk7Zm9yKGE9CjA7YSE9PWQ7KythKWMuc2V0VGV4dHVyZUN1YmUoYlthXXx8RWUsZVthXSl9ZnVuY3Rpb24gRmYoYSl7c3dpdGNoKGEpe2Nhc2UgNTEyNjpyZXR1cm4gdmY7Y2FzZSAzNTY2NDpyZXR1cm4geGY7Y2FzZSAzNTY2NTpyZXR1cm4geWY7Y2FzZSAzNTY2NjpyZXR1cm4gemY7Y2FzZSAzNTY3NDpyZXR1cm4gQWY7Y2FzZSAzNTY3NTpyZXR1cm4gQmY7Y2FzZSAzNTY3NjpyZXR1cm4gQ2Y7Y2FzZSAzNTY3ODpyZXR1cm4gRGY7Y2FzZSAzNTY4MDpyZXR1cm4gRWY7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIHdmO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gRmU7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBHZTtjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIEhlfX1mdW5jdGlvbiBHZihhLGIsYyl7dGhpcy5pZD1hO3RoaXMuYWRkcj1jO3RoaXMuc2V0VmFsdWU9dWYoYi50eXBlKX1mdW5jdGlvbiBIZihhLGIsYyl7dGhpcy5pZD1hO3RoaXMuYWRkcj1jO3RoaXMuc2l6ZT0KYi5zaXplO3RoaXMuc2V0VmFsdWU9RmYoYi50eXBlKX1mdW5jdGlvbiBJZShhKXt0aGlzLmlkPWE7dGhpcy5zZXE9W107dGhpcy5tYXA9e319ZnVuY3Rpb24gZmIoYSxiLGMpe3RoaXMuc2VxPVtdO3RoaXMubWFwPXt9O3RoaXMucmVuZGVyZXI9YztjPWEuZ2V0UHJvZ3JhbVBhcmFtZXRlcihiLGEuQUNUSVZFX1VOSUZPUk1TKTtmb3IodmFyIGQ9MDtkPGM7KytkKXt2YXIgZT1hLmdldEFjdGl2ZVVuaWZvcm0oYixkKSxmPWEuZ2V0VW5pZm9ybUxvY2F0aW9uKGIsZS5uYW1lKSxnPXRoaXMsaD1lLm5hbWUsaz1oLmxlbmd0aDtmb3IoUWQubGFzdEluZGV4PTA7Oyl7dmFyIG09UWQuZXhlYyhoKSx1PVFkLmxhc3RJbmRleCxxPW1bMV0sbj1tWzNdOyJdIj09PW1bMl0mJihxfD0wKTtpZih2b2lkIDA9PT1ufHwiWyI9PT1uJiZ1KzI9PT1rKXtoPWc7ZT12b2lkIDA9PT1uP25ldyBHZihxLGUsZik6bmV3IEhmKHEsZSxmKTtoLnNlcS5wdXNoKGUpO2gubWFwW2UuaWRdPWU7YnJlYWt9ZWxzZSBuPQpnLm1hcFtxXSx2b2lkIDA9PT1uJiYobj1uZXcgSWUocSkscT1nLGc9bixxLnNlcS5wdXNoKGcpLHEubWFwW2cuaWRdPWcpLGc9bn19fWZ1bmN0aW9uIEgoYSxiLGMpe3JldHVybiB2b2lkIDA9PT1iJiZ2b2lkIDA9PT1jP3RoaXMuc2V0KGEpOnRoaXMuc2V0UkdCKGEsYixjKX1mdW5jdGlvbiBpZChhLGIpe3RoaXMubWluPXZvaWQgMCE9PWE/YTpuZXcgRChJbmZpbml0eSxJbmZpbml0eSk7dGhpcy5tYXg9dm9pZCAwIT09Yj9iOm5ldyBEKC1JbmZpbml0eSwtSW5maW5pdHkpfWZ1bmN0aW9uIElmKGEsYil7dmFyIGMsZCxlLGYsZyxoLGssbSx1LHEsbj1hLmNvbnRleHQscj1hLnN0YXRlLGwsdCx5LHgsdixHO3RoaXMucmVuZGVyPWZ1bmN0aW9uKHcsTyxTKXtpZigwIT09Yi5sZW5ndGgpe3c9bmV3IHA7dmFyIEU9Uy53L1MueixGPS41KlMueixhYT0uNSpTLncsUj0xNi9TLncsY2E9bmV3IEQoUipFLFIpLGxhPW5ldyBwKDEsMSwwKSxnYj1uZXcgRCgxLDEpLEdiPW5ldyBpZDtHYi5taW4uc2V0KFMueCwKUy55KTtHYi5tYXguc2V0KFMueCsoUy56LTE2KSxTLnkrKFMudy0xNikpO2lmKHZvaWQgMD09PXgpe3ZhciBSPW5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLDAsMCwxLC0xLDEsMCwxLDEsMSwxLC0xLDEsMCwxXSksamE9bmV3IFVpbnQxNkFycmF5KFswLDEsMiwwLDIsM10pO2w9bi5jcmVhdGVCdWZmZXIoKTt0PW4uY3JlYXRlQnVmZmVyKCk7bi5iaW5kQnVmZmVyKG4uQVJSQVlfQlVGRkVSLGwpO24uYnVmZmVyRGF0YShuLkFSUkFZX0JVRkZFUixSLG4uU1RBVElDX0RSQVcpO24uYmluZEJ1ZmZlcihuLkVMRU1FTlRfQVJSQVlfQlVGRkVSLHQpO24uYnVmZmVyRGF0YShuLkVMRU1FTlRfQVJSQVlfQlVGRkVSLGphLG4uU1RBVElDX0RSQVcpO3Y9bi5jcmVhdGVUZXh0dXJlKCk7Rz1uLmNyZWF0ZVRleHR1cmUoKTtyLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCx2KTtuLnRleEltYWdlMkQobi5URVhUVVJFXzJELDAsbi5SR0IsMTYsMTYsMCxuLlJHQixuLlVOU0lHTkVEX0JZVEUsbnVsbCk7Cm4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfUyxuLkNMQU1QX1RPX0VER0UpO24udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfVCxuLkNMQU1QX1RPX0VER0UpO24udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01BR19GSUxURVIsbi5ORUFSRVNUKTtuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTkVBUkVTVCk7ci5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsRyk7bi50ZXhJbWFnZTJEKG4uVEVYVFVSRV8yRCwwLG4uUkdCQSwxNiwxNiwwLG4uUkdCQSxuLlVOU0lHTkVEX0JZVEUsbnVsbCk7bi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9TLG4uQ0xBTVBfVE9fRURHRSk7bi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9ULG4uQ0xBTVBfVE9fRURHRSk7bi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCwKbi5URVhUVVJFX01BR19GSUxURVIsbi5ORUFSRVNUKTtuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTkVBUkVTVCk7dmFyIFI9eT17dmVydGV4U2hhZGVyOiJ1bmlmb3JtIGxvd3AgaW50IHJlbmRlclR5cGU7XG51bmlmb3JtIHZlYzMgc2NyZWVuUG9zaXRpb247XG51bmlmb3JtIHZlYzIgc2NhbGU7XG51bmlmb3JtIGZsb2F0IHJvdGF0aW9uO1xudW5pZm9ybSBzYW1wbGVyMkQgb2NjbHVzaW9uTWFwO1xuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMiB1djtcbnZhcnlpbmcgdmVjMiB2VVY7XG52YXJ5aW5nIGZsb2F0IHZWaXNpYmlsaXR5O1xudm9pZCBtYWluKCkge1xudlVWID0gdXY7XG52ZWMyIHBvcyA9IHBvc2l0aW9uO1xuaWYgKCByZW5kZXJUeXBlID09IDIgKSB7XG52ZWM0IHZpc2liaWxpdHkgPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC4xLCAwLjEgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC41LCAwLjEgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC45LCAwLjEgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC45LCAwLjUgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC45LCAwLjkgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC41LCAwLjkgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC4xLCAwLjkgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC4xLCAwLjUgKSApO1xudmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC41LCAwLjUgKSApO1xudlZpc2liaWxpdHkgPSAgICAgICAgdmlzaWJpbGl0eS5yIC8gOS4wO1xudlZpc2liaWxpdHkgKj0gMS4wIC0gdmlzaWJpbGl0eS5nIC8gOS4wO1xudlZpc2liaWxpdHkgKj0gICAgICAgdmlzaWJpbGl0eS5iIC8gOS4wO1xudlZpc2liaWxpdHkgKj0gMS4wIC0gdmlzaWJpbGl0eS5hIC8gOS4wO1xucG9zLnggPSBjb3MoIHJvdGF0aW9uICkgKiBwb3NpdGlvbi54IC0gc2luKCByb3RhdGlvbiApICogcG9zaXRpb24ueTtcbnBvcy55ID0gc2luKCByb3RhdGlvbiApICogcG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIHBvc2l0aW9uLnk7XG59XG5nbF9Qb3NpdGlvbiA9IHZlYzQoICggcG9zICogc2NhbGUgKyBzY3JlZW5Qb3NpdGlvbi54eSApLnh5LCBzY3JlZW5Qb3NpdGlvbi56LCAxLjAgKTtcbn0iLApmcmFnbWVudFNoYWRlcjoidW5pZm9ybSBsb3dwIGludCByZW5kZXJUeXBlO1xudW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSB2ZWMzIGNvbG9yO1xudmFyeWluZyB2ZWMyIHZVVjtcbnZhcnlpbmcgZmxvYXQgdlZpc2liaWxpdHk7XG52b2lkIG1haW4oKSB7XG5pZiAoIHJlbmRlclR5cGUgPT0gMCApIHtcbmdsX0ZyYWdDb2xvciA9IHZlYzQoIDEuMCwgMC4wLCAxLjAsIDAuMCApO1xufSBlbHNlIGlmICggcmVuZGVyVHlwZSA9PSAxICkge1xuZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCBtYXAsIHZVViApO1xufSBlbHNlIHtcbnZlYzQgdGV4dHVyZSA9IHRleHR1cmUyRCggbWFwLCB2VVYgKTtcbnRleHR1cmUuYSAqPSBvcGFjaXR5ICogdlZpc2liaWxpdHk7XG5nbF9GcmFnQ29sb3IgPSB0ZXh0dXJlO1xuZ2xfRnJhZ0NvbG9yLnJnYiAqPSBjb2xvcjtcbn1cbn0ifSxqYT1uLmNyZWF0ZVByb2dyYW0oKSxQPW4uY3JlYXRlU2hhZGVyKG4uRlJBR01FTlRfU0hBREVSKSwKSz1uLmNyZWF0ZVNoYWRlcihuLlZFUlRFWF9TSEFERVIpLFc9InByZWNpc2lvbiAiK2EuZ2V0UHJlY2lzaW9uKCkrIiBmbG9hdDtcbiI7bi5zaGFkZXJTb3VyY2UoUCxXK1IuZnJhZ21lbnRTaGFkZXIpO24uc2hhZGVyU291cmNlKEssVytSLnZlcnRleFNoYWRlcik7bi5jb21waWxlU2hhZGVyKFApO24uY29tcGlsZVNoYWRlcihLKTtuLmF0dGFjaFNoYWRlcihqYSxQKTtuLmF0dGFjaFNoYWRlcihqYSxLKTtuLmxpbmtQcm9ncmFtKGphKTt4PWphO3U9bi5nZXRBdHRyaWJMb2NhdGlvbih4LCJwb3NpdGlvbiIpO3E9bi5nZXRBdHRyaWJMb2NhdGlvbih4LCJ1diIpO2M9bi5nZXRVbmlmb3JtTG9jYXRpb24oeCwicmVuZGVyVHlwZSIpO2Q9bi5nZXRVbmlmb3JtTG9jYXRpb24oeCwibWFwIik7ZT1uLmdldFVuaWZvcm1Mb2NhdGlvbih4LCJvY2NsdXNpb25NYXAiKTtmPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKHgsIm9wYWNpdHkiKTtnPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKHgsImNvbG9yIik7Cmg9bi5nZXRVbmlmb3JtTG9jYXRpb24oeCwic2NhbGUiKTtrPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKHgsInJvdGF0aW9uIik7bT1uLmdldFVuaWZvcm1Mb2NhdGlvbih4LCJzY3JlZW5Qb3NpdGlvbiIpfW4udXNlUHJvZ3JhbSh4KTtyLmluaXRBdHRyaWJ1dGVzKCk7ci5lbmFibGVBdHRyaWJ1dGUodSk7ci5lbmFibGVBdHRyaWJ1dGUocSk7ci5kaXNhYmxlVW51c2VkQXR0cmlidXRlcygpO24udW5pZm9ybTFpKGUsMCk7bi51bmlmb3JtMWkoZCwxKTtuLmJpbmRCdWZmZXIobi5BUlJBWV9CVUZGRVIsbCk7bi52ZXJ0ZXhBdHRyaWJQb2ludGVyKHUsMixuLkZMT0FULCExLDE2LDApO24udmVydGV4QXR0cmliUG9pbnRlcihxLDIsbi5GTE9BVCwhMSwxNiw4KTtuLmJpbmRCdWZmZXIobi5FTEVNRU5UX0FSUkFZX0JVRkZFUix0KTtyLmRpc2FibGUobi5DVUxMX0ZBQ0UpO3IuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCExKTtqYT0wO2ZvcihQPWIubGVuZ3RoO2phPFA7amErKylpZihSPTE2L1MudywKY2Euc2V0KFIqRSxSKSxLPWJbamFdLHcuc2V0KEsubWF0cml4V29ybGQuZWxlbWVudHNbMTJdLEsubWF0cml4V29ybGQuZWxlbWVudHNbMTNdLEsubWF0cml4V29ybGQuZWxlbWVudHNbMTRdKSx3LmFwcGx5TWF0cml4NChPLm1hdHJpeFdvcmxkSW52ZXJzZSksdy5hcHBseU1hdHJpeDQoTy5wcm9qZWN0aW9uTWF0cml4KSxsYS5jb3B5KHcpLGdiLng9Uy54K2xhLngqRitGLTgsZ2IueT1TLnkrbGEueSphYSthYS04LCEwPT09R2IuY29udGFpbnNQb2ludChnYikpe3IuYWN0aXZlVGV4dHVyZShuLlRFWFRVUkUwKTtyLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCxudWxsKTtyLmFjdGl2ZVRleHR1cmUobi5URVhUVVJFMSk7ci5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsdik7bi5jb3B5VGV4SW1hZ2UyRChuLlRFWFRVUkVfMkQsMCxuLlJHQixnYi54LGdiLnksMTYsMTYsMCk7bi51bmlmb3JtMWkoYywwKTtuLnVuaWZvcm0yZihoLGNhLngsY2EueSk7bi51bmlmb3JtM2YobSxsYS54LGxhLnksCmxhLnopO3IuZGlzYWJsZShuLkJMRU5EKTtyLmVuYWJsZShuLkRFUFRIX1RFU1QpO24uZHJhd0VsZW1lbnRzKG4uVFJJQU5HTEVTLDYsbi5VTlNJR05FRF9TSE9SVCwwKTtyLmFjdGl2ZVRleHR1cmUobi5URVhUVVJFMCk7ci5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsRyk7bi5jb3B5VGV4SW1hZ2UyRChuLlRFWFRVUkVfMkQsMCxuLlJHQkEsZ2IueCxnYi55LDE2LDE2LDApO24udW5pZm9ybTFpKGMsMSk7ci5kaXNhYmxlKG4uREVQVEhfVEVTVCk7ci5hY3RpdmVUZXh0dXJlKG4uVEVYVFVSRTEpO3IuYmluZFRleHR1cmUobi5URVhUVVJFXzJELHYpO24uZHJhd0VsZW1lbnRzKG4uVFJJQU5HTEVTLDYsbi5VTlNJR05FRF9TSE9SVCwwKTtLLnBvc2l0aW9uU2NyZWVuLmNvcHkobGEpO0suY3VzdG9tVXBkYXRlQ2FsbGJhY2s/Sy5jdXN0b21VcGRhdGVDYWxsYmFjayhLKTpLLnVwZGF0ZUxlbnNGbGFyZXMoKTtuLnVuaWZvcm0xaShjLDIpO3IuZW5hYmxlKG4uQkxFTkQpO2Zvcih2YXIgVz0KMCxiYT1LLmxlbnNGbGFyZXMubGVuZ3RoO1c8YmE7VysrKXt2YXIgVD1LLmxlbnNGbGFyZXNbV107LjAwMTxULm9wYWNpdHkmJi4wMDE8VC5zY2FsZSYmKGxhLng9VC54LGxhLnk9VC55LGxhLno9VC56LFI9VC5zaXplKlQuc2NhbGUvUy53LGNhLng9UipFLGNhLnk9UixuLnVuaWZvcm0zZihtLGxhLngsbGEueSxsYS56KSxuLnVuaWZvcm0yZihoLGNhLngsY2EueSksbi51bmlmb3JtMWYoayxULnJvdGF0aW9uKSxuLnVuaWZvcm0xZihmLFQub3BhY2l0eSksbi51bmlmb3JtM2YoZyxULmNvbG9yLnIsVC5jb2xvci5nLFQuY29sb3IuYiksci5zZXRCbGVuZGluZyhULmJsZW5kaW5nLFQuYmxlbmRFcXVhdGlvbixULmJsZW5kU3JjLFQuYmxlbmREc3QpLGEuc2V0VGV4dHVyZTJEKFQudGV4dHVyZSwxKSxuLmRyYXdFbGVtZW50cyhuLlRSSUFOR0xFUyw2LG4uVU5TSUdORURfU0hPUlQsMCkpfX1yLmVuYWJsZShuLkNVTExfRkFDRSk7ci5lbmFibGUobi5ERVBUSF9URVNUKTtyLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayghMCk7CmEucmVzZXRHTFN0YXRlKCl9fX1mdW5jdGlvbiBKZihhLGIpe3ZhciBjLGQsZSxmLGcsaCxrLG0sdSxxLG4scixsLHQseSx4LHY7ZnVuY3Rpb24gRyhhLGIpe3JldHVybiBhLnJlbmRlck9yZGVyIT09Yi5yZW5kZXJPcmRlcj9hLnJlbmRlck9yZGVyLWIucmVuZGVyT3JkZXI6YS56IT09Yi56P2Iuei1hLno6Yi5pZC1hLmlkfXZhciB3PWEuY29udGV4dCxPPWEuc3RhdGUsUyxFLEYsYWEsUj1uZXcgcCxjYT1uZXcgcWEsbGE9bmV3IHA7dGhpcy5yZW5kZXI9ZnVuY3Rpb24ocCxHYil7aWYoMCE9PWIubGVuZ3RoKXtpZih2b2lkIDA9PT1GKXt2YXIgamE9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsLjUsLS41LDEsMCwuNSwuNSwxLDEsLS41LC41LDAsMV0pLFA9bmV3IFVpbnQxNkFycmF5KFswLDEsMiwwLDIsM10pO1M9dy5jcmVhdGVCdWZmZXIoKTtFPXcuY3JlYXRlQnVmZmVyKCk7dy5iaW5kQnVmZmVyKHcuQVJSQVlfQlVGRkVSLFMpO3cuYnVmZmVyRGF0YSh3LkFSUkFZX0JVRkZFUiwKamEsdy5TVEFUSUNfRFJBVyk7dy5iaW5kQnVmZmVyKHcuRUxFTUVOVF9BUlJBWV9CVUZGRVIsRSk7dy5idWZmZXJEYXRhKHcuRUxFTUVOVF9BUlJBWV9CVUZGRVIsUCx3LlNUQVRJQ19EUkFXKTt2YXIgamE9dy5jcmVhdGVQcm9ncmFtKCksUD13LmNyZWF0ZVNoYWRlcih3LlZFUlRFWF9TSEFERVIpLEs9dy5jcmVhdGVTaGFkZXIody5GUkFHTUVOVF9TSEFERVIpO3cuc2hhZGVyU291cmNlKFAsWyJwcmVjaXNpb24gIithLmdldFByZWNpc2lvbigpKyIgZmxvYXQ7IiwidW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDtcbnVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4O1xudW5pZm9ybSBmbG9hdCByb3RhdGlvbjtcbnVuaWZvcm0gdmVjMiBzY2FsZTtcbnVuaWZvcm0gdmVjMiB1dk9mZnNldDtcbnVuaWZvcm0gdmVjMiB1dlNjYWxlO1xuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMiB1djtcbnZhcnlpbmcgdmVjMiB2VVY7XG52b2lkIG1haW4oKSB7XG52VVYgPSB1dk9mZnNldCArIHV2ICogdXZTY2FsZTtcbnZlYzIgYWxpZ25lZFBvc2l0aW9uID0gcG9zaXRpb24gKiBzY2FsZTtcbnZlYzIgcm90YXRlZFBvc2l0aW9uO1xucm90YXRlZFBvc2l0aW9uLnggPSBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xucm90YXRlZFBvc2l0aW9uLnkgPSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xudmVjNCBmaW5hbFBvc2l0aW9uO1xuZmluYWxQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuZmluYWxQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247XG5maW5hbFBvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIGZpbmFsUG9zaXRpb247XG5nbF9Qb3NpdGlvbiA9IGZpbmFsUG9zaXRpb247XG59Il0uam9pbigiXG4iKSk7Cncuc2hhZGVyU291cmNlKEssWyJwcmVjaXNpb24gIithLmdldFByZWNpc2lvbigpKyIgZmxvYXQ7IiwidW5pZm9ybSB2ZWMzIGNvbG9yO1xudW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBpbnQgZm9nVHlwZTtcbnVuaWZvcm0gdmVjMyBmb2dDb2xvcjtcbnVuaWZvcm0gZmxvYXQgZm9nRGVuc2l0eTtcbnVuaWZvcm0gZmxvYXQgZm9nTmVhcjtcbnVuaWZvcm0gZmxvYXQgZm9nRmFyO1xudW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7XG52YXJ5aW5nIHZlYzIgdlVWO1xudm9pZCBtYWluKCkge1xudmVjNCB0ZXh0dXJlID0gdGV4dHVyZTJEKCBtYXAsIHZVViApO1xuaWYgKCB0ZXh0dXJlLmEgPCBhbHBoYVRlc3QgKSBkaXNjYXJkO1xuZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IgKiB0ZXh0dXJlLnh5eiwgdGV4dHVyZS5hICogb3BhY2l0eSApO1xuaWYgKCBmb2dUeXBlID4gMCApIHtcbmZsb2F0IGRlcHRoID0gZ2xfRnJhZ0Nvb3JkLnogLyBnbF9GcmFnQ29vcmQudztcbmZsb2F0IGZvZ0ZhY3RvciA9IDAuMDtcbmlmICggZm9nVHlwZSA9PSAxICkge1xuZm9nRmFjdG9yID0gc21vb3Roc3RlcCggZm9nTmVhciwgZm9nRmFyLCBkZXB0aCApO1xufSBlbHNlIHtcbmNvbnN0IGZsb2F0IExPRzIgPSAxLjQ0MjY5NTtcbmZvZ0ZhY3RvciA9IGV4cDIoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiBkZXB0aCAqIGRlcHRoICogTE9HMiApO1xuZm9nRmFjdG9yID0gMS4wIC0gY2xhbXAoIGZvZ0ZhY3RvciwgMC4wLCAxLjAgKTtcbn1cbmdsX0ZyYWdDb2xvciA9IG1peCggZ2xfRnJhZ0NvbG9yLCB2ZWM0KCBmb2dDb2xvciwgZ2xfRnJhZ0NvbG9yLncgKSwgZm9nRmFjdG9yICk7XG59XG59Il0uam9pbigiXG4iKSk7CncuY29tcGlsZVNoYWRlcihQKTt3LmNvbXBpbGVTaGFkZXIoSyk7dy5hdHRhY2hTaGFkZXIoamEsUCk7dy5hdHRhY2hTaGFkZXIoamEsSyk7dy5saW5rUHJvZ3JhbShqYSk7Rj1qYTt4PXcuZ2V0QXR0cmliTG9jYXRpb24oRiwicG9zaXRpb24iKTt2PXcuZ2V0QXR0cmliTG9jYXRpb24oRiwidXYiKTtjPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsInV2T2Zmc2V0Iik7ZD13LmdldFVuaWZvcm1Mb2NhdGlvbihGLCJ1dlNjYWxlIik7ZT13LmdldFVuaWZvcm1Mb2NhdGlvbihGLCJyb3RhdGlvbiIpO2Y9dy5nZXRVbmlmb3JtTG9jYXRpb24oRiwic2NhbGUiKTtnPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImNvbG9yIik7aD13LmdldFVuaWZvcm1Mb2NhdGlvbihGLCJtYXAiKTtrPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsIm9wYWNpdHkiKTttPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsIm1vZGVsVmlld01hdHJpeCIpO3U9dy5nZXRVbmlmb3JtTG9jYXRpb24oRiwicHJvamVjdGlvbk1hdHJpeCIpOwpxPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImZvZ1R5cGUiKTtuPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImZvZ0RlbnNpdHkiKTtyPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImZvZ05lYXIiKTtsPXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImZvZ0ZhciIpO3Q9dy5nZXRVbmlmb3JtTG9jYXRpb24oRiwiZm9nQ29sb3IiKTt5PXcuZ2V0VW5pZm9ybUxvY2F0aW9uKEYsImFscGhhVGVzdCIpO2phPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImNhbnZhcyIpO2phLndpZHRoPTg7amEuaGVpZ2h0PTg7UD1qYS5nZXRDb250ZXh0KCIyZCIpO1AuZmlsbFN0eWxlPSJ3aGl0ZSI7UC5maWxsUmVjdCgwLDAsOCw4KTthYT1uZXcgWChqYSk7YWEubmVlZHNVcGRhdGU9ITB9dy51c2VQcm9ncmFtKEYpO08uaW5pdEF0dHJpYnV0ZXMoKTtPLmVuYWJsZUF0dHJpYnV0ZSh4KTtPLmVuYWJsZUF0dHJpYnV0ZSh2KTtPLmRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzKCk7Ck8uZGlzYWJsZSh3LkNVTExfRkFDRSk7Ty5lbmFibGUody5CTEVORCk7dy5iaW5kQnVmZmVyKHcuQVJSQVlfQlVGRkVSLFMpO3cudmVydGV4QXR0cmliUG9pbnRlcih4LDIsdy5GTE9BVCwhMSwxNiwwKTt3LnZlcnRleEF0dHJpYlBvaW50ZXIodiwyLHcuRkxPQVQsITEsMTYsOCk7dy5iaW5kQnVmZmVyKHcuRUxFTUVOVF9BUlJBWV9CVUZGRVIsRSk7dy51bmlmb3JtTWF0cml4NGZ2KHUsITEsR2IucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyk7Ty5hY3RpdmVUZXh0dXJlKHcuVEVYVFVSRTApO3cudW5pZm9ybTFpKGgsMCk7UD1qYT0wOyhLPXAuZm9nKT8ody51bmlmb3JtM2YodCxLLmNvbG9yLnIsSy5jb2xvci5nLEsuY29sb3IuYiksSy5pc0ZvZz8ody51bmlmb3JtMWYocixLLm5lYXIpLHcudW5pZm9ybTFmKGwsSy5mYXIpLHcudW5pZm9ybTFpKHEsMSksUD1qYT0xKTpLLmlzRm9nRXhwMiYmKHcudW5pZm9ybTFmKG4sSy5kZW5zaXR5KSx3LnVuaWZvcm0xaShxLDIpLFA9amE9MikpOgoody51bmlmb3JtMWkocSwwKSxQPWphPTApO2Zvcih2YXIgSz0wLFc9Yi5sZW5ndGg7SzxXO0srKyl7dmFyIGJhPWJbS107YmEubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoR2IubWF0cml4V29ybGRJbnZlcnNlLGJhLm1hdHJpeFdvcmxkKTtiYS56PS1iYS5tb2RlbFZpZXdNYXRyaXguZWxlbWVudHNbMTRdfWIuc29ydChHKTtmb3IodmFyIFQ9W10sSz0wLFc9Yi5sZW5ndGg7SzxXO0srKyl7dmFyIGJhPWJbS10sUT1iYS5tYXRlcmlhbDshMSE9PVEudmlzaWJsZSYmKHcudW5pZm9ybTFmKHksUS5hbHBoYVRlc3QpLHcudW5pZm9ybU1hdHJpeDRmdihtLCExLGJhLm1vZGVsVmlld01hdHJpeC5lbGVtZW50cyksYmEubWF0cml4V29ybGQuZGVjb21wb3NlKFIsY2EsbGEpLFRbMF09bGEueCxUWzFdPWxhLnksYmE9MCxwLmZvZyYmUS5mb2cmJihiYT1QKSxqYSE9PWJhJiYody51bmlmb3JtMWkocSxiYSksamE9YmEpLG51bGwhPT1RLm1hcD8ody51bmlmb3JtMmYoYyxRLm1hcC5vZmZzZXQueCwKUS5tYXAub2Zmc2V0LnkpLHcudW5pZm9ybTJmKGQsUS5tYXAucmVwZWF0LngsUS5tYXAucmVwZWF0LnkpKToody51bmlmb3JtMmYoYywwLDApLHcudW5pZm9ybTJmKGQsMSwxKSksdy51bmlmb3JtMWYoayxRLm9wYWNpdHkpLHcudW5pZm9ybTNmKGcsUS5jb2xvci5yLFEuY29sb3IuZyxRLmNvbG9yLmIpLHcudW5pZm9ybTFmKGUsUS5yb3RhdGlvbiksdy51bmlmb3JtMmZ2KGYsVCksTy5zZXRCbGVuZGluZyhRLmJsZW5kaW5nLFEuYmxlbmRFcXVhdGlvbixRLmJsZW5kU3JjLFEuYmxlbmREc3QpLE8uYnVmZmVycy5kZXB0aC5zZXRUZXN0KFEuZGVwdGhUZXN0KSxPLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayhRLmRlcHRoV3JpdGUpLFEubWFwP2Euc2V0VGV4dHVyZTJEKFEubWFwLDApOmEuc2V0VGV4dHVyZTJEKGFhLDApLHcuZHJhd0VsZW1lbnRzKHcuVFJJQU5HTEVTLDYsdy5VTlNJR05FRF9TSE9SVCwwKSl9Ty5lbmFibGUody5DVUxMX0ZBQ0UpO2EucmVzZXRHTFN0YXRlKCl9fX1mdW5jdGlvbiBaKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsCiJpZCIse3ZhbHVlOktmKyt9KTt0aGlzLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKTt0aGlzLm5hbWU9IiI7dGhpcy50eXBlPSJNYXRlcmlhbCI7dGhpcy5saWdodHM9dGhpcy5mb2c9ITA7dGhpcy5ibGVuZGluZz0xO3RoaXMuc2lkZT0wO3RoaXMuc2hhZGluZz0yO3RoaXMudmVydGV4Q29sb3JzPTA7dGhpcy5vcGFjaXR5PTE7dGhpcy50cmFuc3BhcmVudD0hMTt0aGlzLmJsZW5kU3JjPTIwNDt0aGlzLmJsZW5kRHN0PTIwNTt0aGlzLmJsZW5kRXF1YXRpb249MTAwO3RoaXMuYmxlbmRFcXVhdGlvbkFscGhhPXRoaXMuYmxlbmREc3RBbHBoYT10aGlzLmJsZW5kU3JjQWxwaGE9bnVsbDt0aGlzLmRlcHRoRnVuYz0zO3RoaXMuZGVwdGhXcml0ZT10aGlzLmRlcHRoVGVzdD0hMDt0aGlzLmNsaXBwaW5nUGxhbmVzPW51bGw7dGhpcy5jbGlwU2hhZG93cz10aGlzLmNsaXBJbnRlcnNlY3Rpb249ITE7dGhpcy5jb2xvcldyaXRlPSEwO3RoaXMucHJlY2lzaW9uPW51bGw7dGhpcy5wb2x5Z29uT2Zmc2V0PQohMTt0aGlzLnBvbHlnb25PZmZzZXRVbml0cz10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9MDt0aGlzLmRpdGhlcmluZz0hMTt0aGlzLmFscGhhVGVzdD0wO3RoaXMucHJlbXVsdGlwbGllZEFscGhhPSExO3RoaXMub3ZlcmRyYXc9MDt0aGlzLm5lZWRzVXBkYXRlPXRoaXMudmlzaWJsZT0hMH1mdW5jdGlvbiBFYShhKXtaLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTaGFkZXJNYXRlcmlhbCI7dGhpcy5kZWZpbmVzPXt9O3RoaXMudW5pZm9ybXM9e307dGhpcy52ZXJ0ZXhTaGFkZXI9InZvaWQgbWFpbigpIHtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSI7dGhpcy5mcmFnbWVudFNoYWRlcj0idm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTtcbn0iO3RoaXMubGluZXdpZHRoPTE7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9CjE7dGhpcy5tb3JwaE5vcm1hbHM9dGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz10aGlzLmNsaXBwaW5nPXRoaXMubGlnaHRzPXRoaXMuZm9nPSExO3RoaXMuZXh0ZW5zaW9ucz17ZGVyaXZhdGl2ZXM6ITEsZnJhZ0RlcHRoOiExLGRyYXdCdWZmZXJzOiExLHNoYWRlclRleHR1cmVMT0Q6ITF9O3RoaXMuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcz17Y29sb3I6WzEsMSwxXSx1djpbMCwwXSx1djI6WzAsMF19O3RoaXMuaW5kZXgwQXR0cmlidXRlTmFtZT12b2lkIDA7dm9pZCAwIT09YSYmKHZvaWQgMCE9PWEuYXR0cmlidXRlcyYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXMoYSkpfWZ1bmN0aW9uICRhKGEpe1ouY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ik1lc2hEZXB0aE1hdGVyaWFsIjt0aGlzLmRlcHRoUGFja2luZz0KMzIwMDt0aGlzLm1vcnBoVGFyZ2V0cz10aGlzLnNraW5uaW5nPSExO3RoaXMuZGlzcGxhY2VtZW50TWFwPXRoaXMuYWxwaGFNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTE7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPTA7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLmxpZ2h0cz10aGlzLmZvZz0hMTt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiBUYShhLGIpe3RoaXMubWluPXZvaWQgMCE9PWE/YTpuZXcgcChJbmZpbml0eSxJbmZpbml0eSxJbmZpbml0eSk7dGhpcy5tYXg9dm9pZCAwIT09Yj9iOm5ldyBwKC1JbmZpbml0eSwtSW5maW5pdHksLUluZmluaXR5KX1mdW5jdGlvbiBHYShhLGIpe3RoaXMuY2VudGVyPXZvaWQgMCE9PWE/YTpuZXcgcDt0aGlzLnJhZGl1cz12b2lkIDAhPT1iP2I6MH1mdW5jdGlvbiBLYSgpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMSwwLDAsMCwxXTswPGFyZ3VtZW50cy5sZW5ndGgmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9CmZ1bmN0aW9uIHdhKGEsYil7dGhpcy5ub3JtYWw9dm9pZCAwIT09YT9hOm5ldyBwKDEsMCwwKTt0aGlzLmNvbnN0YW50PXZvaWQgMCE9PWI/YjowfWZ1bmN0aW9uIGpkKGEsYixjLGQsZSxmKXt0aGlzLnBsYW5lcz1bdm9pZCAwIT09YT9hOm5ldyB3YSx2b2lkIDAhPT1iP2I6bmV3IHdhLHZvaWQgMCE9PWM/YzpuZXcgd2Esdm9pZCAwIT09ZD9kOm5ldyB3YSx2b2lkIDAhPT1lP2U6bmV3IHdhLHZvaWQgMCE9PWY/ZjpuZXcgd2FdfWZ1bmN0aW9uIEplKGEsYixjLGQpe2Z1bmN0aW9uIGUoYixjLGQsZSl7dmFyIGY9Yi5nZW9tZXRyeSxnO2c9dDt2YXIgaD1iLmN1c3RvbURlcHRoTWF0ZXJpYWw7ZCYmKGc9eSxoPWIuY3VzdG9tRGlzdGFuY2VNYXRlcmlhbCk7aD9nPWg6KGg9ITEsYy5tb3JwaFRhcmdldHMmJihmJiZmLmlzQnVmZmVyR2VvbWV0cnk/aD1mLm1vcnBoQXR0cmlidXRlcyYmZi5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24mJjA8Zi5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOgpmJiZmLmlzR2VvbWV0cnkmJihoPWYubW9ycGhUYXJnZXRzJiYwPGYubW9ycGhUYXJnZXRzLmxlbmd0aCkpLGIuaXNTa2lubmVkTWVzaCYmITE9PT1jLnNraW5uaW5nJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiBUSFJFRS5Ta2lubmVkTWVzaCB3aXRoIG1hdGVyaWFsLnNraW5uaW5nIHNldCB0byBmYWxzZToiLGIpLGI9Yi5pc1NraW5uZWRNZXNoJiZjLnNraW5uaW5nLGY9MCxoJiYoZnw9MSksYiYmKGZ8PTIpLGc9Z1tmXSk7YS5sb2NhbENsaXBwaW5nRW5hYmxlZCYmITA9PT1jLmNsaXBTaGFkb3dzJiYwIT09Yy5jbGlwcGluZ1BsYW5lcy5sZW5ndGgmJihmPWcudXVpZCxoPWMudXVpZCxiPXhbZl0sdm9pZCAwPT09YiYmKGI9e30seFtmXT1iKSxmPWJbaF0sdm9pZCAwPT09ZiYmKGY9Zy5jbG9uZSgpLGJbaF09ZiksZz1mKTtnLnZpc2libGU9Yy52aXNpYmxlO2cud2lyZWZyYW1lPWMud2lyZWZyYW1lO2g9Yy5zaWRlO1IucmVuZGVyU2luZ2xlU2lkZWQmJjI9PWgmJgooaD0wKTtSLnJlbmRlclJldmVyc2VTaWRlZCYmKDA9PT1oP2g9MToxPT09aCYmKGg9MCkpO2cuc2lkZT1oO2cuY2xpcFNoYWRvd3M9Yy5jbGlwU2hhZG93cztnLmNsaXBwaW5nUGxhbmVzPWMuY2xpcHBpbmdQbGFuZXM7Zy53aXJlZnJhbWVMaW5ld2lkdGg9Yy53aXJlZnJhbWVMaW5ld2lkdGg7Zy5saW5ld2lkdGg9Yy5saW5ld2lkdGg7ZCYmdm9pZCAwIT09Zy51bmlmb3Jtcy5saWdodFBvcyYmZy51bmlmb3Jtcy5saWdodFBvcy52YWx1ZS5jb3B5KGUpO3JldHVybiBnfWZ1bmN0aW9uIGYoYixkLGcsaCl7aWYoITEhPT1iLnZpc2libGUpe2lmKGIubGF5ZXJzLnRlc3QoZC5sYXllcnMpJiYoYi5pc01lc2h8fGIuaXNMaW5lfHxiLmlzUG9pbnRzKSYmYi5jYXN0U2hhZG93JiYoIWIuZnJ1c3R1bUN1bGxlZHx8ay5pbnRlcnNlY3RzT2JqZWN0KGIpKSl7Yi5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhnLm1hdHJpeFdvcmxkSW52ZXJzZSxiLm1hdHJpeFdvcmxkKTt2YXIgbT0KYy51cGRhdGUoYiksbj1iLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHZhciB1PW0uZ3JvdXBzLHE9MCxyPXUubGVuZ3RoO3E8cjtxKyspe3ZhciB4PXVbcV0sdj1uW3gubWF0ZXJpYWxJbmRleF07diYmdi52aXNpYmxlJiYodj1lKGIsdixoLGwpLGEucmVuZGVyQnVmZmVyRGlyZWN0KGcsbnVsbCxtLHYsYix4KSl9ZWxzZSBuLnZpc2libGUmJih2PWUoYixuLGgsbCksYS5yZW5kZXJCdWZmZXJEaXJlY3QoZyxudWxsLG0sdixiLG51bGwpKX1iPWIuY2hpbGRyZW47bT0wO2ZvcihuPWIubGVuZ3RoO208bjttKyspZihiW21dLGQsZyxoKX19dmFyIGc9YS5jb250ZXh0LGg9YS5zdGF0ZSxrPW5ldyBqZCxtPW5ldyBKLHU9Yi5zaGFkb3dzLHE9bmV3IEQsbj1uZXcgRChkLm1heFRleHR1cmVTaXplLGQubWF4VGV4dHVyZVNpemUpLHI9bmV3IHAsbD1uZXcgcCx0PUFycmF5KDQpLHk9QXJyYXkoNCkseD17fSx2PVtuZXcgcCgxLDAsMCksbmV3IHAoLTEsMCwwKSxuZXcgcCgwLDAsCjEpLG5ldyBwKDAsMCwtMSksbmV3IHAoMCwxLDApLG5ldyBwKDAsLTEsMCldLEc9W25ldyBwKDAsMSwwKSxuZXcgcCgwLDEsMCksbmV3IHAoMCwxLDApLG5ldyBwKDAsMSwwKSxuZXcgcCgwLDAsMSksbmV3IHAoMCwwLC0xKV0sdz1bbmV3IGdhLG5ldyBnYSxuZXcgZ2EsbmV3IGdhLG5ldyBnYSxuZXcgZ2FdO2I9bmV3ICRhO2IuZGVwdGhQYWNraW5nPTMyMDE7Yi5jbGlwcGluZz0hMDtkPWFiLmRpc3RhbmNlUkdCQTtmb3IodmFyIE89SGEuY2xvbmUoZC51bmlmb3JtcyksUz0wOzQhPT1TOysrUyl7dmFyIEU9MCE9PShTJjEpLEY9MCE9PShTJjIpLGFhPWIuY2xvbmUoKTthYS5tb3JwaFRhcmdldHM9RTthYS5za2lubmluZz1GO3RbU109YWE7RT1uZXcgRWEoe2RlZmluZXM6e1VTRV9TSEFET1dNQVA6IiJ9LHVuaWZvcm1zOk8sdmVydGV4U2hhZGVyOmQudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmQuZnJhZ21lbnRTaGFkZXIsbW9ycGhUYXJnZXRzOkUsc2tpbm5pbmc6RixjbGlwcGluZzohMH0pOwp5W1NdPUV9dmFyIFI9dGhpczt0aGlzLmVuYWJsZWQ9ITE7dGhpcy5hdXRvVXBkYXRlPSEwO3RoaXMubmVlZHNVcGRhdGU9ITE7dGhpcy50eXBlPTE7dGhpcy5yZW5kZXJTaW5nbGVTaWRlZD10aGlzLnJlbmRlclJldmVyc2VTaWRlZD0hMDt0aGlzLnJlbmRlcj1mdW5jdGlvbihiLGMpe2lmKCExIT09Ui5lbmFibGVkJiYoITEhPT1SLmF1dG9VcGRhdGV8fCExIT09Ui5uZWVkc1VwZGF0ZSkmJjAhPT11Lmxlbmd0aCl7aC5kaXNhYmxlKGcuQkxFTkQpO2guYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKTtoLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCk7aC5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKHZhciBkLGUseD0wLHQ9dS5sZW5ndGg7eDx0O3grKyl7dmFyIHA9dVt4XSx5PXAuc2hhZG93O2lmKHZvaWQgMD09PXkpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLHAsImhhcyBubyBzaGFkb3cuIik7ZWxzZXt2YXIgTz15LmNhbWVyYSxFPXkubWF0cml4O2wuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHAubWF0cml4V29ybGQpOwpPLnBvc2l0aW9uLmNvcHkobCk7cS5jb3B5KHkubWFwU2l6ZSk7cS5taW4obik7aWYocCYmcC5pc1BvaW50TGlnaHQpe2Q9NjtlPSEwO3ZhciBTPXEueCxGPXEueTt3WzBdLnNldCgyKlMsRixTLEYpO3dbMV0uc2V0KDAsRixTLEYpO3dbMl0uc2V0KDMqUyxGLFMsRik7d1szXS5zZXQoUyxGLFMsRik7d1s0XS5zZXQoMypTLDAsUyxGKTt3WzVdLnNldChTLDAsUyxGKTtxLngqPTQ7cS55Kj0yO0UubWFrZVRyYW5zbGF0aW9uKC1sLngsLWwueSwtbC56KX1lbHNlIGQ9MSxlPSExLHIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHAudGFyZ2V0Lm1hdHJpeFdvcmxkKSxPLmxvb2tBdChyKSxPLnVwZGF0ZU1hdHJpeFdvcmxkKCksTy5tYXRyaXhXb3JsZEludmVyc2UuZ2V0SW52ZXJzZShPLm1hdHJpeFdvcmxkKSxFLnNldCguNSwwLDAsLjUsMCwuNSwwLC41LDAsMCwuNSwuNSwwLDAsMCwxKSxFLm11bHRpcGx5KE8ucHJvamVjdGlvbk1hdHJpeCksRS5tdWx0aXBseShPLm1hdHJpeFdvcmxkSW52ZXJzZSk7Cm51bGw9PT15Lm1hcCYmKHkubWFwPW5ldyBEYihxLngscS55LHttaW5GaWx0ZXI6MTAwMyxtYWdGaWx0ZXI6MTAwMyxmb3JtYXQ6MTAyM30pLHkubWFwLnRleHR1cmUubmFtZT1wLm5hbWUrIi5zaGFkb3dNYXAiLE8udXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKTt5LmlzU3BvdExpZ2h0U2hhZG93JiZ5LnVwZGF0ZShwKTthLnNldFJlbmRlclRhcmdldCh5Lm1hcCk7YS5jbGVhcigpO2ZvcihwPTA7cDxkO3ArKyllJiYoci5jb3B5KE8ucG9zaXRpb24pLHIuYWRkKHZbcF0pLE8udXAuY29weShHW3BdKSxPLmxvb2tBdChyKSxPLnVwZGF0ZU1hdHJpeFdvcmxkKCksTy5tYXRyaXhXb3JsZEludmVyc2UuZ2V0SW52ZXJzZShPLm1hdHJpeFdvcmxkKSxoLnZpZXdwb3J0KHdbcF0pKSxtLm11bHRpcGx5TWF0cmljZXMoTy5wcm9qZWN0aW9uTWF0cml4LE8ubWF0cml4V29ybGRJbnZlcnNlKSxrLnNldEZyb21NYXRyaXgobSksZihiLGMsTyxlKX19ZD1hLmdldENsZWFyQ29sb3IoKTtlPWEuZ2V0Q2xlYXJBbHBoYSgpOwphLnNldENsZWFyQ29sb3IoZCxlKTtSLm5lZWRzVXBkYXRlPSExfX19ZnVuY3Rpb24gaGIoYSxiKXt0aGlzLm9yaWdpbj12b2lkIDAhPT1hP2E6bmV3IHA7dGhpcy5kaXJlY3Rpb249dm9pZCAwIT09Yj9iOm5ldyBwfWZ1bmN0aW9uIGJiKGEsYixjLGQpe3RoaXMuX3g9YXx8MDt0aGlzLl95PWJ8fDA7dGhpcy5fej1jfHwwO3RoaXMuX29yZGVyPWR8fGJiLkRlZmF1bHRPcmRlcn1mdW5jdGlvbiBSZCgpe3RoaXMubWFzaz0xfWZ1bmN0aW9uIEIoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpMZisrfSk7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7dGhpcy5uYW1lPSIiO3RoaXMudHlwZT0iT2JqZWN0M0QiO3RoaXMucGFyZW50PW51bGw7dGhpcy5jaGlsZHJlbj1bXTt0aGlzLnVwPUIuRGVmYXVsdFVwLmNsb25lKCk7dmFyIGE9bmV3IHAsYj1uZXcgYmIsYz1uZXcgcWEsZD1uZXcgcCgxLDEsMSk7Yi5vbkNoYW5nZShmdW5jdGlvbigpe2Muc2V0RnJvbUV1bGVyKGIsCiExKX0pO2Mub25DaGFuZ2UoZnVuY3Rpb24oKXtiLnNldEZyb21RdWF0ZXJuaW9uKGMsdm9pZCAwLCExKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3Bvc2l0aW9uOntlbnVtZXJhYmxlOiEwLHZhbHVlOmF9LHJvdGF0aW9uOntlbnVtZXJhYmxlOiEwLHZhbHVlOmJ9LHF1YXRlcm5pb246e2VudW1lcmFibGU6ITAsdmFsdWU6Y30sc2NhbGU6e2VudW1lcmFibGU6ITAsdmFsdWU6ZH0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgSn0sbm9ybWFsTWF0cml4Ont2YWx1ZTpuZXcgS2F9fSk7dGhpcy5tYXRyaXg9bmV3IEo7dGhpcy5tYXRyaXhXb3JsZD1uZXcgSjt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9Qi5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZTt0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITE7dGhpcy5sYXllcnM9bmV3IFJkO3RoaXMudmlzaWJsZT0hMDt0aGlzLnJlY2VpdmVTaGFkb3c9dGhpcy5jYXN0U2hhZG93PSExO3RoaXMuZnJ1c3R1bUN1bGxlZD0hMDt0aGlzLnJlbmRlck9yZGVyPQowO3RoaXMudXNlckRhdGE9e307dGhpcy5vbkJlZm9yZVJlbmRlcj1mdW5jdGlvbigpe307dGhpcy5vbkFmdGVyUmVuZGVyPWZ1bmN0aW9uKCl7fX1mdW5jdGlvbiBIYihhLGIpe3RoaXMuc3RhcnQ9dm9pZCAwIT09YT9hOm5ldyBwO3RoaXMuZW5kPXZvaWQgMCE9PWI/YjpuZXcgcH1mdW5jdGlvbiBVYShhLGIsYyl7dGhpcy5hPXZvaWQgMCE9PWE/YTpuZXcgcDt0aGlzLmI9dm9pZCAwIT09Yj9iOm5ldyBwO3RoaXMuYz12b2lkIDAhPT1jP2M6bmV3IHB9ZnVuY3Rpb24gVmEoYSxiLGMsZCxlLGYpe3RoaXMuYT1hO3RoaXMuYj1iO3RoaXMuYz1jO3RoaXMubm9ybWFsPWQmJmQuaXNWZWN0b3IzP2Q6bmV3IHA7dGhpcy52ZXJ0ZXhOb3JtYWxzPUFycmF5LmlzQXJyYXkoZCk/ZDpbXTt0aGlzLmNvbG9yPWUmJmUuaXNDb2xvcj9lOm5ldyBIO3RoaXMudmVydGV4Q29sb3JzPUFycmF5LmlzQXJyYXkoZSk/ZTpbXTt0aGlzLm1hdGVyaWFsSW5kZXg9dm9pZCAwIT09Zj9mOjB9ZnVuY3Rpb24gTmEoYSl7Wi5jYWxsKHRoaXMpOwp0aGlzLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBIKDE2Nzc3MjE1KTt0aGlzLmxpZ2h0TWFwPXRoaXMubWFwPW51bGw7dGhpcy5saWdodE1hcEludGVuc2l0eT0xO3RoaXMuYW9NYXA9bnVsbDt0aGlzLmFvTWFwSW50ZW5zaXR5PTE7dGhpcy5lbnZNYXA9dGhpcy5hbHBoYU1hcD10aGlzLnNwZWN1bGFyTWFwPW51bGw7dGhpcy5jb21iaW5lPTA7dGhpcy5yZWZsZWN0aXZpdHk9MTt0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTg7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiO3RoaXMubGlnaHRzPXRoaXMubW9ycGhUYXJnZXRzPXRoaXMuc2tpbm5pbmc9ITE7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24gTChhLGIsYyl7aWYoQXJyYXkuaXNBcnJheShhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpOwp0aGlzLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKTt0aGlzLmFycmF5PWE7dGhpcy5pdGVtU2l6ZT1iO3RoaXMuY291bnQ9dm9pZCAwIT09YT9hLmxlbmd0aC9iOjA7dGhpcy5ub3JtYWxpemVkPSEwPT09Yzt0aGlzLmR5bmFtaWM9ITE7dGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9O3RoaXMub25VcGxvYWRDYWxsYmFjaz1mdW5jdGlvbigpe307dGhpcy52ZXJzaW9uPTB9ZnVuY3Rpb24gcmMoYSxiKXtMLmNhbGwodGhpcyxuZXcgSW50OEFycmF5KGEpLGIpfWZ1bmN0aW9uIHNjKGEsYil7TC5jYWxsKHRoaXMsbmV3IFVpbnQ4QXJyYXkoYSksYil9ZnVuY3Rpb24gdGMoYSxiKXtMLmNhbGwodGhpcyxuZXcgVWludDhDbGFtcGVkQXJyYXkoYSksYil9ZnVuY3Rpb24gdWMoYSxiKXtMLmNhbGwodGhpcyxuZXcgSW50MTZBcnJheShhKSxiKX1mdW5jdGlvbiBpYihhLGIpe0wuY2FsbCh0aGlzLG5ldyBVaW50MTZBcnJheShhKSxiKX1mdW5jdGlvbiB2YyhhLGIpe0wuY2FsbCh0aGlzLApuZXcgSW50MzJBcnJheShhKSxiKX1mdW5jdGlvbiBqYihhLGIpe0wuY2FsbCh0aGlzLG5ldyBVaW50MzJBcnJheShhKSxiKX1mdW5jdGlvbiBDKGEsYil7TC5jYWxsKHRoaXMsbmV3IEZsb2F0MzJBcnJheShhKSxiKX1mdW5jdGlvbiB3YyhhLGIpe0wuY2FsbCh0aGlzLG5ldyBGbG9hdDY0QXJyYXkoYSksYil9ZnVuY3Rpb24gS2UoKXt0aGlzLmluZGljZXM9W107dGhpcy52ZXJ0aWNlcz1bXTt0aGlzLm5vcm1hbHM9W107dGhpcy5jb2xvcnM9W107dGhpcy51dnM9W107dGhpcy51dnMyPVtdO3RoaXMuZ3JvdXBzPVtdO3RoaXMubW9ycGhUYXJnZXRzPXt9O3RoaXMuc2tpbldlaWdodHM9W107dGhpcy5za2luSW5kaWNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLmdyb3Vwc05lZWRVcGRhdGU9dGhpcy51dnNOZWVkVXBkYXRlPXRoaXMuY29sb3JzTmVlZFVwZGF0ZT10aGlzLm5vcm1hbHNOZWVkVXBkYXRlPXRoaXMudmVydGljZXNOZWVkVXBkYXRlPQohMX1mdW5jdGlvbiBTZChhKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuLUluZmluaXR5O2Zvcih2YXIgYj1hWzBdLGM9MSxkPWEubGVuZ3RoO2M8ZDsrK2MpYVtjXT5iJiYoYj1hW2NdKTtyZXR1cm4gYn1mdW5jdGlvbiBNKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6VGQrK30pO3RoaXMudXVpZD1ZLmdlbmVyYXRlVVVJRCgpO3RoaXMubmFtZT0iIjt0aGlzLnR5cGU9Ikdlb21ldHJ5Ijt0aGlzLnZlcnRpY2VzPVtdO3RoaXMuY29sb3JzPVtdO3RoaXMuZmFjZXM9W107dGhpcy5mYWNlVmVydGV4VXZzPVtbXV07dGhpcy5tb3JwaFRhcmdldHM9W107dGhpcy5tb3JwaE5vcm1hbHM9W107dGhpcy5za2luV2VpZ2h0cz1bXTt0aGlzLnNraW5JbmRpY2VzPVtdO3RoaXMubGluZURpc3RhbmNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLmdyb3Vwc05lZWRVcGRhdGU9dGhpcy5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZT0KdGhpcy5jb2xvcnNOZWVkVXBkYXRlPXRoaXMubm9ybWFsc05lZWRVcGRhdGU9dGhpcy51dnNOZWVkVXBkYXRlPXRoaXMudmVydGljZXNOZWVkVXBkYXRlPXRoaXMuZWxlbWVudHNOZWVkVXBkYXRlPSExfWZ1bmN0aW9uIEkoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpUZCsrfSk7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7dGhpcy5uYW1lPSIiO3RoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiO3RoaXMuaW5kZXg9bnVsbDt0aGlzLmF0dHJpYnV0ZXM9e307dGhpcy5tb3JwaEF0dHJpYnV0ZXM9e307dGhpcy5ncm91cHM9W107dGhpcy5ib3VuZGluZ1NwaGVyZT10aGlzLmJvdW5kaW5nQm94PW51bGw7dGhpcy5kcmF3UmFuZ2U9e3N0YXJ0OjAsY291bnQ6SW5maW5pdHl9fWZ1bmN0aW9uIENhKGEsYil7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTWVzaCI7dGhpcy5nZW9tZXRyeT12b2lkIDAhPT1hP2E6bmV3IEk7dGhpcy5tYXRlcmlhbD12b2lkIDAhPT1iPwpiOm5ldyBOYSh7Y29sb3I6MTY3NzcyMTUqTWF0aC5yYW5kb20oKX0pO3RoaXMuZHJhd01vZGU9MDt0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWZ1bmN0aW9uIEliKGEsYixjLGQsZSxmKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJCb3hHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDphLGhlaWdodDpiLGRlcHRoOmMsd2lkdGhTZWdtZW50czpkLGhlaWdodFNlZ21lbnRzOmUsZGVwdGhTZWdtZW50czpmfTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcga2IoYSxiLGMsZCxlLGYpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBrYihhLGIsYyxkLGUsZil7ZnVuY3Rpb24gZyhhLGIsYyxkLGUsZixnLGwsUyxFLEYpe3ZhciBhYT1mL1MsUj1nL0UsY2E9Zi8yLGxhPWcvMixEPWwvMjtnPVMrMTt2YXIgQz1FKzEsQj1mPTAsUCxLLFc9bmV3IHA7Zm9yKEs9MDtLPEM7SysrKXt2YXIgYmE9SypSLWxhO2ZvcihQPTA7UDxnO1ArKylXW2FdPShQKmFhLWNhKSpkLFdbYl09CmJhKmUsV1tjXT1ELG0ucHVzaChXLngsVy55LFcueiksV1thXT0wLFdbYl09MCxXW2NdPTA8bD8xOi0xLHUucHVzaChXLngsVy55LFcueikscS5wdXNoKFAvUykscS5wdXNoKDEtSy9FKSxmKz0xfWZvcihLPTA7SzxFO0srKylmb3IoUD0wO1A8UztQKyspYT1uK1ArZyooSysxKSxiPW4rKFArMSkrZyooSysxKSxjPW4rKFArMSkrZypLLGsucHVzaChuK1ArZypLLGEsYyksay5wdXNoKGEsYixjKSxCKz02O2guYWRkR3JvdXAocixCLEYpO3IrPUI7bis9Zn1JLmNhbGwodGhpcyk7dGhpcy50eXBlPSJCb3hCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDphLGhlaWdodDpiLGRlcHRoOmMsd2lkdGhTZWdtZW50czpkLGhlaWdodFNlZ21lbnRzOmUsZGVwdGhTZWdtZW50czpmfTt2YXIgaD10aGlzO2Q9TWF0aC5mbG9vcihkKXx8MTtlPU1hdGguZmxvb3IoZSl8fDE7Zj1NYXRoLmZsb29yKGYpfHwxO3ZhciBrPVtdLG09W10sdT1bXSxxPVtdLG49MCxyPTA7ZygieiIsInkiLAoieCIsLTEsLTEsYyxiLGEsZixlLDApO2coInoiLCJ5IiwieCIsMSwtMSxjLGIsLWEsZixlLDEpO2coIngiLCJ6IiwieSIsMSwxLGEsYyxiLGQsZiwyKTtnKCJ4IiwieiIsInkiLDEsLTEsYSxjLC1iLGQsZiwzKTtnKCJ4IiwieSIsInoiLDEsLTEsYSxiLGMsZCxlLDQpO2coIngiLCJ5IiwieiIsLTEsLTEsYSxiLC1jLGQsZSw1KTt0aGlzLnNldEluZGV4KGspO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMobSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEModSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhxLDIpKX1mdW5jdGlvbiB4YyhhLGIsYyxkKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQbGFuZUdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3dpZHRoOmEsaGVpZ2h0OmIsd2lkdGhTZWdtZW50czpjLGhlaWdodFNlZ21lbnRzOmR9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBsYihhLGIsYyxkKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9CmZ1bmN0aW9uIGxiKGEsYixjLGQpe0kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBsYW5lQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17d2lkdGg6YSxoZWlnaHQ6Yix3aWR0aFNlZ21lbnRzOmMsaGVpZ2h0U2VnbWVudHM6ZH07dmFyIGU9YS8yLGY9Yi8yO2M9TWF0aC5mbG9vcihjKXx8MTtkPU1hdGguZmxvb3IoZCl8fDE7dmFyIGc9YysxLGg9ZCsxLGs9YS9jLG09Yi9kLHU9W10scT1bXSxuPVtdLHI9W107Zm9yKGE9MDthPGg7YSsrKXt2YXIgbD1hKm0tZjtmb3IoYj0wO2I8ZztiKyspcS5wdXNoKGIqay1lLC1sLDApLG4ucHVzaCgwLDAsMSksci5wdXNoKGIvYyksci5wdXNoKDEtYS9kKX1mb3IoYT0wO2E8ZDthKyspZm9yKGI9MDtiPGM7YisrKWU9YitnKihhKzEpLGY9YisxK2cqKGErMSksaD1iKzErZyphLHUucHVzaChiK2cqYSxlLGgpLHUucHVzaChlLGYsaCk7dGhpcy5zZXRJbmRleCh1KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKHEsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLApuZXcgQyhuLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKHIsMikpfWZ1bmN0aW9uIE9hKCl7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ2FtZXJhIjt0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZT1uZXcgSjt0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IEp9ZnVuY3Rpb24geGEoYSxiLGMsZCl7T2EuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBlcnNwZWN0aXZlQ2FtZXJhIjt0aGlzLmZvdj12b2lkIDAhPT1hP2E6NTA7dGhpcy56b29tPTE7dGhpcy5uZWFyPXZvaWQgMCE9PWM/YzouMTt0aGlzLmZhcj12b2lkIDAhPT1kP2Q6MkUzO3RoaXMuZm9jdXM9MTA7dGhpcy5hc3BlY3Q9dm9pZCAwIT09Yj9iOjE7dGhpcy52aWV3PW51bGw7dGhpcy5maWxtR2F1Z2U9MzU7dGhpcy5maWxtT2Zmc2V0PTA7dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9ZnVuY3Rpb24gSmIoYSxiLGMsZCxlLGYpe09hLmNhbGwodGhpcyk7dGhpcy50eXBlPSJPcnRob2dyYXBoaWNDYW1lcmEiO3RoaXMuem9vbT0KMTt0aGlzLnZpZXc9bnVsbDt0aGlzLmxlZnQ9YTt0aGlzLnJpZ2h0PWI7dGhpcy50b3A9Yzt0aGlzLmJvdHRvbT1kO3RoaXMubmVhcj12b2lkIDAhPT1lP2U6LjE7dGhpcy5mYXI9dm9pZCAwIT09Zj9mOjJFMzt0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1mdW5jdGlvbiBNZihhKXt2YXIgYj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGEpe2EuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGE9YS5kYXRhKTtyZXR1cm4gYlthLnV1aWRdfSxyZW1vdmU6ZnVuY3Rpb24oYyl7dmFyIGQ9YltjLnV1aWRdO2QmJihhLmRlbGV0ZUJ1ZmZlcihkLmJ1ZmZlciksZGVsZXRlIGJbYy51dWlkXSl9LHVwZGF0ZTpmdW5jdGlvbihjLGQpe2MuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTt2YXIgZT1iW2MudXVpZF07aWYodm9pZCAwPT09ZSl7dmFyIGU9Yy51dWlkLGY9YyxnPWYuYXJyYXksaD1mLmR5bmFtaWM/YS5EWU5BTUlDX0RSQVc6YS5TVEFUSUNfRFJBVywKaz1hLmNyZWF0ZUJ1ZmZlcigpO2EuYmluZEJ1ZmZlcihkLGspO2EuYnVmZmVyRGF0YShkLGcsaCk7Zi5vblVwbG9hZENhbGxiYWNrKCk7aD1hLkZMT0FUO2cgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXk/aD1hLkZMT0FUOmcgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXk/Y29uc29sZS53YXJuKCJVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheSIpOmcgaW5zdGFuY2VvZiBVaW50MTZBcnJheT9oPWEuVU5TSUdORURfU0hPUlQ6ZyBpbnN0YW5jZW9mIEludDE2QXJyYXk/aD1hLlNIT1JUOmcgaW5zdGFuY2VvZiBVaW50MzJBcnJheT9oPWEuVU5TSUdORURfSU5UOmcgaW5zdGFuY2VvZiBJbnQzMkFycmF5P2g9YS5JTlQ6ZyBpbnN0YW5jZW9mIEludDhBcnJheT9oPWEuQllURTpnIGluc3RhbmNlb2YgVWludDhBcnJheSYmKGg9YS5VTlNJR05FRF9CWVRFKTtiW2VdPXtidWZmZXI6ayx0eXBlOmgsYnl0ZXNQZXJFbGVtZW50OmcuQllURVNfUEVSX0VMRU1FTlQsdmVyc2lvbjpmLnZlcnNpb259fWVsc2UgZS52ZXJzaW9uPApjLnZlcnNpb24mJihmPWMsZz1mLmFycmF5LGs9Zi51cGRhdGVSYW5nZSxhLmJpbmRCdWZmZXIoZCxlLmJ1ZmZlciksITE9PT1mLmR5bmFtaWM/YS5idWZmZXJEYXRhKGQsZyxhLlNUQVRJQ19EUkFXKTotMT09PWsuY291bnQ/YS5idWZmZXJTdWJEYXRhKGQsMCxnKTowPT09ay5jb3VudD9jb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTE9iamVjdHMudXBkYXRlQnVmZmVyOiBkeW5hbWljIFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSBtYXJrZWQgYXMgbmVlZHNVcGRhdGUgYnV0IHVwZGF0ZVJhbmdlLmNvdW50IGlzIDAsIGVuc3VyZSB5b3UgYXJlIHVzaW5nIHNldCBtZXRob2RzIG9yIHVwZGF0aW5nIG1hbnVhbGx5LiIpOihhLmJ1ZmZlclN1YkRhdGEoZCxrLm9mZnNldCpnLkJZVEVTX1BFUl9FTEVNRU5ULGcuc3ViYXJyYXkoay5vZmZzZXQsay5vZmZzZXQray5jb3VudCkpLGsuY291bnQ9MCksZS52ZXJzaW9uPWMudmVyc2lvbil9fX1mdW5jdGlvbiBOZihhLGIpe3JldHVybiBhLnJlbmRlck9yZGVyIT09CmIucmVuZGVyT3JkZXI/YS5yZW5kZXJPcmRlci1iLnJlbmRlck9yZGVyOmEucHJvZ3JhbSYmYi5wcm9ncmFtJiZhLnByb2dyYW0hPT1iLnByb2dyYW0/YS5wcm9ncmFtLmlkLWIucHJvZ3JhbS5pZDphLm1hdGVyaWFsLmlkIT09Yi5tYXRlcmlhbC5pZD9hLm1hdGVyaWFsLmlkLWIubWF0ZXJpYWwuaWQ6YS56IT09Yi56P2Euei1iLno6YS5pZC1iLmlkfWZ1bmN0aW9uIE9mKGEsYil7cmV0dXJuIGEucmVuZGVyT3JkZXIhPT1iLnJlbmRlck9yZGVyP2EucmVuZGVyT3JkZXItYi5yZW5kZXJPcmRlcjphLnohPT1iLno/Yi56LWEuejphLmlkLWIuaWR9ZnVuY3Rpb24gUGYoKXt2YXIgYT1bXSxiPS0xLGM9W10sZD0tMTtyZXR1cm57b3BhcXVlOmEsdHJhbnNwYXJlbnQ6Yyxpbml0OmZ1bmN0aW9uKCl7ZD1iPS0xfSxwdXNoOmZ1bmN0aW9uKGUsZixnLGgsayl7dmFyIG0sdTtnLnRyYW5zcGFyZW50PyhtPWMsdT0rK2QpOihtPWEsdT0rK2IpOyh1PW1bdV0pPyh1LmlkPWUuaWQsdS5vYmplY3Q9ZSwKdS5nZW9tZXRyeT1mLHUubWF0ZXJpYWw9Zyx1LnByb2dyYW09Zy5wcm9ncmFtLHUucmVuZGVyT3JkZXI9ZS5yZW5kZXJPcmRlcix1Lno9aCx1Lmdyb3VwPWspOih1PXtpZDplLmlkLG9iamVjdDplLGdlb21ldHJ5OmYsbWF0ZXJpYWw6Zyxwcm9ncmFtOmcucHJvZ3JhbSxyZW5kZXJPcmRlcjplLnJlbmRlck9yZGVyLHo6aCxncm91cDprfSxtLnB1c2godSkpfSxmaW5pc2g6ZnVuY3Rpb24oKXthLmxlbmd0aD1iKzE7Yy5sZW5ndGg9ZCsxfSxzb3J0OmZ1bmN0aW9uKCl7YS5zb3J0KE5mKTtjLnNvcnQoT2YpfX19ZnVuY3Rpb24gUWYoKXt2YXIgYT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGIsYyl7dmFyIGQ9Yi5pZCsiLCIrYy5pZCxlPWFbZF07dm9pZCAwPT09ZSYmKGU9bmV3IFBmLGFbZF09ZSk7cmV0dXJuIGV9LGRpc3Bvc2U6ZnVuY3Rpb24oKXthPXt9fX19ZnVuY3Rpb24gUmYoYSxiLGMpe3ZhciBkLGUsZjt0aGlzLnNldE1vZGU9ZnVuY3Rpb24oYSl7ZD1hfTt0aGlzLnNldEluZGV4PQpmdW5jdGlvbihjKXtjLmFycmF5IGluc3RhbmNlb2YgVWludDMyQXJyYXkmJmIuZ2V0KCJPRVNfZWxlbWVudF9pbmRleF91aW50Iik/KGU9YS5VTlNJR05FRF9JTlQsZj00KTpjLmFycmF5IGluc3RhbmNlb2YgVWludDE2QXJyYXk/KGU9YS5VTlNJR05FRF9TSE9SVCxmPTIpOihlPWEuVU5TSUdORURfQllURSxmPTEpfTt0aGlzLnJlbmRlcj1mdW5jdGlvbihiLGgpe2EuZHJhd0VsZW1lbnRzKGQsaCxlLGIqZik7Yy5jYWxscysrO2MudmVydGljZXMrPWg7ZD09PWEuVFJJQU5HTEVTJiYoYy5mYWNlcys9aC8zKX07dGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24oZyxoLGspe3ZhciBtPWIuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7bnVsbD09PW0/Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpOgoobS5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShkLGssZSxoKmYsZy5tYXhJbnN0YW5jZWRDb3VudCksYy5jYWxscysrLGMudmVydGljZXMrPWsqZy5tYXhJbnN0YW5jZWRDb3VudCxkPT09YS5UUklBTkdMRVMmJihjLmZhY2VzKz1nLm1heEluc3RhbmNlZENvdW50KmsvMykpfX1mdW5jdGlvbiBTZihhLGIsYyl7dmFyIGQ7dGhpcy5zZXRNb2RlPWZ1bmN0aW9uKGEpe2Q9YX07dGhpcy5yZW5kZXI9ZnVuY3Rpb24oYixmKXthLmRyYXdBcnJheXMoZCxiLGYpO2MuY2FsbHMrKztjLnZlcnRpY2VzKz1mO2Q9PT1hLlRSSUFOR0xFUyYmKGMuZmFjZXMrPWYvMyl9O3RoaXMucmVuZGVySW5zdGFuY2VzPWZ1bmN0aW9uKGUsZixnKXt2YXIgaD1iLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpO2lmKG51bGw9PT1oKWNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpOwplbHNle3ZhciBrPWUuYXR0cmlidXRlcy5wb3NpdGlvbjtrLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/KGc9ay5kYXRhLmNvdW50LGguZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKGQsMCxnLGUubWF4SW5zdGFuY2VkQ291bnQpKTpoLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShkLGYsZyxlLm1heEluc3RhbmNlZENvdW50KTtjLmNhbGxzKys7Yy52ZXJ0aWNlcys9ZyplLm1heEluc3RhbmNlZENvdW50O2Q9PT1hLlRSSUFOR0xFUyYmKGMuZmFjZXMrPWUubWF4SW5zdGFuY2VkQ291bnQqZy8zKX19fWZ1bmN0aW9uIFRmKGEsYixjKXtmdW5jdGlvbiBkKGEpe2E9YS50YXJnZXQ7dmFyIGg9ZVthLmlkXTtudWxsIT09aC5pbmRleCYmYi5yZW1vdmUoaC5pbmRleCk7Zm9yKHZhciBrIGluIGguYXR0cmlidXRlcyliLnJlbW92ZShoLmF0dHJpYnV0ZXNba10pO2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsZCk7ZGVsZXRlIGVbYS5pZF07aWYoaz1mW2EuaWRdKWIucmVtb3ZlKGspLApkZWxldGUgZlthLmlkXTtpZihrPWZbaC5pZF0pYi5yZW1vdmUoayksZGVsZXRlIGZbaC5pZF07Yy5nZW9tZXRyaWVzLS19dmFyIGU9e30sZj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGEsYil7dmFyIGY9ZVtiLmlkXTtpZihmKXJldHVybiBmO2IuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsZCk7Yi5pc0J1ZmZlckdlb21ldHJ5P2Y9YjpiLmlzR2VvbWV0cnkmJih2b2lkIDA9PT1iLl9idWZmZXJHZW9tZXRyeSYmKGIuX2J1ZmZlckdlb21ldHJ5PShuZXcgSSkuc2V0RnJvbU9iamVjdChhKSksZj1iLl9idWZmZXJHZW9tZXRyeSk7ZVtiLmlkXT1mO2MuZ2VvbWV0cmllcysrO3JldHVybiBmfSx1cGRhdGU6ZnVuY3Rpb24oYyl7dmFyIGQ9Yy5pbmRleCxlPWMuYXR0cmlidXRlcztudWxsIT09ZCYmYi51cGRhdGUoZCxhLkVMRU1FTlRfQVJSQVlfQlVGRkVSKTtmb3IodmFyIGYgaW4gZSliLnVwZGF0ZShlW2ZdLGEuQVJSQVlfQlVGRkVSKTtjPWMubW9ycGhBdHRyaWJ1dGVzO2ZvcihmIGluIGMpZm9yKHZhciBkPQpjW2ZdLGU9MCx1PWQubGVuZ3RoO2U8dTtlKyspYi51cGRhdGUoZFtlXSxhLkFSUkFZX0JVRkZFUil9LGdldFdpcmVmcmFtZUF0dHJpYnV0ZTpmdW5jdGlvbihjKXt2YXIgZD1mW2MuaWRdO2lmKGQpcmV0dXJuIGQ7dmFyIGQ9W10sZT1jLmluZGV4LG09Yy5hdHRyaWJ1dGVzO2lmKG51bGwhPT1lKWZvcih2YXIgZT1lLmFycmF5LG09MCx1PWUubGVuZ3RoO208dTttKz0zKXt2YXIgcT1lW20rMF0sbj1lW20rMV0scj1lW20rMl07ZC5wdXNoKHEsbixuLHIscixxKX1lbHNlIGZvcihlPW0ucG9zaXRpb24uYXJyYXksbT0wLHU9ZS5sZW5ndGgvMy0xO208dTttKz0zKXE9bSswLG49bSsxLHI9bSsyLGQucHVzaChxLG4sbixyLHIscSk7ZD1uZXcgKDY1NTM1PFNkKGQpP2piOmliKShkLDEpO2IudXBkYXRlKGQsYS5FTEVNRU5UX0FSUkFZX0JVRkZFUik7cmV0dXJuIGZbYy5pZF09ZH19fWZ1bmN0aW9uIFVmKCl7dmFyIGE9e307cmV0dXJue2dldDpmdW5jdGlvbihiKXtpZih2b2lkIDAhPT1hW2IuaWRdKXJldHVybiBhW2IuaWRdOwp2YXIgYztzd2l0Y2goYi50eXBlKXtjYXNlICJEaXJlY3Rpb25hbExpZ2h0IjpjPXtkaXJlY3Rpb246bmV3IHAsY29sb3I6bmV3IEgsc2hhZG93OiExLHNoYWRvd0JpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBEfTticmVhaztjYXNlICJTcG90TGlnaHQiOmM9e3Bvc2l0aW9uOm5ldyBwLGRpcmVjdGlvbjpuZXcgcCxjb2xvcjpuZXcgSCxkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjAsc2hhZG93OiExLHNoYWRvd0JpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBEfTticmVhaztjYXNlICJQb2ludExpZ2h0IjpjPXtwb3NpdGlvbjpuZXcgcCxjb2xvcjpuZXcgSCxkaXN0YW5jZTowLGRlY2F5OjAsc2hhZG93OiExLHNoYWRvd0JpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBEfTticmVhaztjYXNlICJIZW1pc3BoZXJlTGlnaHQiOmM9e2RpcmVjdGlvbjpuZXcgcCxza3lDb2xvcjpuZXcgSCwKZ3JvdW5kQ29sb3I6bmV3IEh9O2JyZWFrO2Nhc2UgIlJlY3RBcmVhTGlnaHQiOmM9e2NvbG9yOm5ldyBILHBvc2l0aW9uOm5ldyBwLGhhbGZXaWR0aDpuZXcgcCxoYWxmSGVpZ2h0Om5ldyBwfX1yZXR1cm4gYVtiLmlkXT1jfX19ZnVuY3Rpb24gVmYoYSxiLGMpe3ZhciBkPXt9O3JldHVybnt1cGRhdGU6ZnVuY3Rpb24oYSl7dmFyIGY9Yy5mcmFtZSxnPWEuZ2VvbWV0cnksaD1iLmdldChhLGcpO2RbaC5pZF0hPT1mJiYoZy5pc0dlb21ldHJ5JiZoLnVwZGF0ZUZyb21PYmplY3QoYSksYi51cGRhdGUoaCksZFtoLmlkXT1mKTtyZXR1cm4gaH0sY2xlYXI6ZnVuY3Rpb24oKXtkPXt9fX19ZnVuY3Rpb24gV2YoYSl7YT1hLnNwbGl0KCJcbiIpO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKWFbYl09YisxKyI6ICIrYVtiXTtyZXR1cm4gYS5qb2luKCJcbiIpfWZ1bmN0aW9uIExlKGEsYixjKXt2YXIgZD1hLmNyZWF0ZVNoYWRlcihiKTthLnNoYWRlclNvdXJjZShkLGMpO2EuY29tcGlsZVNoYWRlcihkKTsKITE9PT1hLmdldFNoYWRlclBhcmFtZXRlcihkLGEuQ09NUElMRV9TVEFUVVMpJiZjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFNoYWRlcjogU2hhZGVyIGNvdWxkbid0IGNvbXBpbGUuIik7IiIhPT1hLmdldFNoYWRlckluZm9Mb2coZCkmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xTaGFkZXI6IGdsLmdldFNoYWRlckluZm9Mb2coKSIsYj09PWEuVkVSVEVYX1NIQURFUj8idmVydGV4IjoiZnJhZ21lbnQiLGEuZ2V0U2hhZGVySW5mb0xvZyhkKSxXZihjKSk7cmV0dXJuIGR9ZnVuY3Rpb24gTWUoYSl7c3dpdGNoKGEpe2Nhc2UgM0UzOnJldHVyblsiTGluZWFyIiwiKCB2YWx1ZSApIl07Y2FzZSAzMDAxOnJldHVyblsic1JHQiIsIiggdmFsdWUgKSJdO2Nhc2UgMzAwMjpyZXR1cm5bIlJHQkUiLCIoIHZhbHVlICkiXTtjYXNlIDMwMDQ6cmV0dXJuWyJSR0JNIiwiKCB2YWx1ZSwgNy4wICkiXTtjYXNlIDMwMDU6cmV0dXJuWyJSR0JNIiwiKCB2YWx1ZSwgMTYuMCApIl07Y2FzZSAzMDA2OnJldHVyblsiUkdCRCIsCiIoIHZhbHVlLCAyNTYuMCApIl07Y2FzZSAzMDA3OnJldHVyblsiR2FtbWEiLCIoIHZhbHVlLCBmbG9hdCggR0FNTUFfRkFDVE9SICkgKSJdO2RlZmF1bHQ6dGhyb3cgRXJyb3IoInVuc3VwcG9ydGVkIGVuY29kaW5nOiAiK2EpO319ZnVuY3Rpb24gVWQoYSxiKXt2YXIgYz1NZShiKTtyZXR1cm4idmVjNCAiK2ErIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuICIrY1swXSsiVG9MaW5lYXIiK2NbMV0rIjsgfSJ9ZnVuY3Rpb24gWGYoYSxiKXt2YXIgYz1NZShiKTtyZXR1cm4idmVjNCAiK2ErIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuIExpbmVhclRvIitjWzBdK2NbMV0rIjsgfSJ9ZnVuY3Rpb24gWWYoYSxiKXt2YXIgYztzd2l0Y2goYil7Y2FzZSAxOmM9IkxpbmVhciI7YnJlYWs7Y2FzZSAyOmM9IlJlaW5oYXJkIjticmVhaztjYXNlIDM6Yz0iVW5jaGFydGVkMiI7YnJlYWs7Y2FzZSA0OmM9Ik9wdGltaXplZENpbmVvbiI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigidW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6ICIrCmIpO31yZXR1cm4idmVjMyAiK2ErIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrYysiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIFpmKGEsYixjKXthPWF8fHt9O3JldHVyblthLmRlcml2YXRpdmVzfHxiLmVudk1hcEN1YmVVVnx8Yi5idW1wTWFwfHxiLm5vcm1hbE1hcHx8Yi5mbGF0U2hhZGluZz8iI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGUiOiIiLChhLmZyYWdEZXB0aHx8Yi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyKSYmYy5nZXQoIkVYVF9mcmFnX2RlcHRoIik/IiNleHRlbnNpb24gR0xfRVhUX2ZyYWdfZGVwdGggOiBlbmFibGUiOiIiLGEuZHJhd0J1ZmZlcnMmJmMuZ2V0KCJXRUJHTF9kcmF3X2J1ZmZlcnMiKT8iI2V4dGVuc2lvbiBHTF9FWFRfZHJhd19idWZmZXJzIDogcmVxdWlyZSI6IiIsKGEuc2hhZGVyVGV4dHVyZUxPRHx8Yi5lbnZNYXApJiZjLmdldCgiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOgoiIl0uZmlsdGVyKHljKS5qb2luKCJcbiIpfWZ1bmN0aW9uICRmKGEpe3ZhciBiPVtdLGM7Zm9yKGMgaW4gYSl7dmFyIGQ9YVtjXTshMSE9PWQmJmIucHVzaCgiI2RlZmluZSAiK2MrIiAiK2QpfXJldHVybiBiLmpvaW4oIlxuIil9ZnVuY3Rpb24geWMoYSl7cmV0dXJuIiIhPT1hfWZ1bmN0aW9uIE5lKGEsYil7cmV0dXJuIGEucmVwbGFjZSgvTlVNX0RJUl9MSUdIVFMvZyxiLm51bURpckxpZ2h0cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRTL2csYi5udW1TcG90TGlnaHRzKS5yZXBsYWNlKC9OVU1fUkVDVF9BUkVBX0xJR0hUUy9nLGIubnVtUmVjdEFyZWFMaWdodHMpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVFMvZyxiLm51bVBvaW50TGlnaHRzKS5yZXBsYWNlKC9OVU1fSEVNSV9MSUdIVFMvZyxiLm51bUhlbWlMaWdodHMpfWZ1bmN0aW9uIFZkKGEpe3JldHVybiBhLnJlcGxhY2UoL15bIFx0XSojaW5jbHVkZSArPChbXHdcZC5dKyk+L2dtLGZ1bmN0aW9uKGEsYyl7dmFyIGQ9VVtjXTsKaWYodm9pZCAwPT09ZCl0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK2MrIj4iKTtyZXR1cm4gVmQoZCl9KX1mdW5jdGlvbiBPZShhKXtyZXR1cm4gYS5yZXBsYWNlKC9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyxmdW5jdGlvbihhLGMsZCxlKXthPSIiO2ZvcihjPXBhcnNlSW50KGMpO2M8cGFyc2VJbnQoZCk7YysrKWErPWUucmVwbGFjZSgvXFsgaSBcXS9nLCJbICIrYysiIF0iKTtyZXR1cm4gYX0pfWZ1bmN0aW9uIGFnKGEsYixjLGQpe3ZhciBlPWEuY29udGV4dCxmPWMuZXh0ZW5zaW9ucyxnPWMuZGVmaW5lcyxoPWMuX193ZWJnbFNoYWRlci52ZXJ0ZXhTaGFkZXIsaz1jLl9fd2ViZ2xTaGFkZXIuZnJhZ21lbnRTaGFkZXIsbT0iU0hBRE9XTUFQX1RZUEVfQkFTSUMiOzE9PT1kLnNoYWRvd01hcFR5cGU/bT0iU0hBRE9XTUFQX1RZUEVfUENGIjoyPT09ZC5zaGFkb3dNYXBUeXBlJiYKKG09IlNIQURPV01BUF9UWVBFX1BDRl9TT0ZUIik7dmFyIHU9IkVOVk1BUF9UWVBFX0NVQkUiLHE9IkVOVk1BUF9NT0RFX1JFRkxFQ1RJT04iLG49IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7aWYoZC5lbnZNYXApe3N3aXRjaChjLmVudk1hcC5tYXBwaW5nKXtjYXNlIDMwMTpjYXNlIDMwMjp1PSJFTlZNQVBfVFlQRV9DVUJFIjticmVhaztjYXNlIDMwNjpjYXNlIDMwNzp1PSJFTlZNQVBfVFlQRV9DVUJFX1VWIjticmVhaztjYXNlIDMwMzpjYXNlIDMwNDp1PSJFTlZNQVBfVFlQRV9FUVVJUkVDIjticmVhaztjYXNlIDMwNTp1PSJFTlZNQVBfVFlQRV9TUEhFUkUifXN3aXRjaChjLmVudk1hcC5tYXBwaW5nKXtjYXNlIDMwMjpjYXNlIDMwNDpxPSJFTlZNQVBfTU9ERV9SRUZSQUNUSU9OIn1zd2l0Y2goYy5jb21iaW5lKXtjYXNlIDA6bj0iRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZIjticmVhaztjYXNlIDE6bj0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSAyOm49IkVOVk1BUF9CTEVORElOR19BREQifX12YXIgcj0KMDxhLmdhbW1hRmFjdG9yP2EuZ2FtbWFGYWN0b3I6MSxmPVpmKGYsZCxhLmV4dGVuc2lvbnMpLGw9JGYoZyksdD1lLmNyZWF0ZVByb2dyYW0oKTtjLmlzUmF3U2hhZGVyTWF0ZXJpYWw/KGc9W2wsIlxuIl0uZmlsdGVyKHljKS5qb2luKCJcbiIpLG09W2YsbCwiXG4iXS5maWx0ZXIoeWMpLmpvaW4oIlxuIikpOihnPVsicHJlY2lzaW9uICIrZC5wcmVjaXNpb24rIiBmbG9hdDsiLCJwcmVjaXNpb24gIitkLnByZWNpc2lvbisiIGludDsiLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrYy5fX3dlYmdsU2hhZGVyLm5hbWUsbCxkLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVkVSVEVYX1RFWFRVUkVTIjoiIiwiI2RlZmluZSBHQU1NQV9GQUNUT1IgIityLCIjZGVmaW5lIE1BWF9CT05FUyAiK2QubWF4Qm9uZXMsZC51c2VGb2cmJmQuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLGQudXNlRm9nJiZkLmZvZ0V4cD8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZC5tYXA/IiNkZWZpbmUgVVNFX01BUCI6CiIiLGQuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGQuZW52TWFwPyIjZGVmaW5lICIrcToiIixkLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsZC5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLGQuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixkLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLGQubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLGQuZGlzcGxhY2VtZW50TWFwJiZkLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVVNFX0RJU1BMQUNFTUVOVE1BUCI6IiIsZC5zcGVjdWxhck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAiOiIiLGQucm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAiOiIiLGQubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLGQuYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIixkLnZlcnRleENvbG9ycz8KIiNkZWZpbmUgVVNFX0NPTE9SIjoiIixkLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixkLnNraW5uaW5nPyIjZGVmaW5lIFVTRV9TS0lOTklORyI6IiIsZC51c2VWZXJ0ZXhUZXh0dXJlPyIjZGVmaW5lIEJPTkVfVEVYVFVSRSI6IiIsZC5tb3JwaFRhcmdldHM/IiNkZWZpbmUgVVNFX01PUlBIVEFSR0VUUyI6IiIsZC5tb3JwaE5vcm1hbHMmJiExPT09ZC5mbGF0U2hhZGluZz8iI2RlZmluZSBVU0VfTU9SUEhOT1JNQUxTIjoiIixkLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZC5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsIiNkZWZpbmUgTlVNX0NMSVBQSU5HX1BMQU5FUyAiK2QubnVtQ2xpcHBpbmdQbGFuZXMsZC5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGQuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK206IiIsZC5zaXplQXR0ZW51YXRpb24/IiNkZWZpbmUgVVNFX1NJWkVBVFRFTlVBVElPTiI6CiIiLGQubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGQubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmYS5leHRlbnNpb25zLmdldCgiRVhUX2ZyYWdfZGVwdGgiKT8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OyIsInVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgbm9ybWFsOyIsImF0dHJpYnV0ZSB2ZWMyIHV2OyIsIiNpZmRlZiBVU0VfQ09MT1IiLCJcdGF0dHJpYnV0ZSB2ZWMzIGNvbG9yOyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTIiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwKIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQxOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOyIsIlx0I2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOyIsIlx0I2Vsc2UiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ3OyIsIlx0I2VuZGlmIiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9TS0lOTklORyIsIlx0YXR0cmlidXRlIHZlYzQgc2tpbkluZGV4OyIsIlx0YXR0cmlidXRlIHZlYzQgc2tpbldlaWdodDsiLAoiI2VuZGlmIiwiXG4iXS5maWx0ZXIoeWMpLmpvaW4oIlxuIiksbT1bZiwicHJlY2lzaW9uICIrZC5wcmVjaXNpb24rIiBmbG9hdDsiLCJwcmVjaXNpb24gIitkLnByZWNpc2lvbisiIGludDsiLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrYy5fX3dlYmdsU2hhZGVyLm5hbWUsbCxkLmFscGhhVGVzdD8iI2RlZmluZSBBTFBIQVRFU1QgIitkLmFscGhhVGVzdDoiIiwiI2RlZmluZSBHQU1NQV9GQUNUT1IgIityLGQudXNlRm9nJiZkLmZvZz8iI2RlZmluZSBVU0VfRk9HIjoiIixkLnVzZUZvZyYmZC5mb2dFeHA/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLGQubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLGQuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGQuZW52TWFwPyIjZGVmaW5lICIrdToiIixkLmVudk1hcD8iI2RlZmluZSAiK3E6IiIsZC5lbnZNYXA/IiNkZWZpbmUgIituOiIiLGQubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixkLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6CiIiLGQuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixkLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLGQubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLGQuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixkLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixkLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixkLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZC52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixkLmdyYWRpZW50TWFwPyIjZGVmaW5lIFVTRV9HUkFESUVOVE1BUCI6IiIsZC5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsZC5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLGQuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLCIjZGVmaW5lIE5VTV9DTElQUElOR19QTEFORVMgIisKZC5udW1DbGlwcGluZ1BsYW5lcywiI2RlZmluZSBVTklPTl9DTElQUElOR19QTEFORVMgIisoZC5udW1DbGlwcGluZ1BsYW5lcy1kLm51bUNsaXBJbnRlcnNlY3Rpb24pLGQuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixkLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIittOiIiLGQucHJlbXVsdGlwbGllZEFscGhhPyIjZGVmaW5lIFBSRU1VTFRJUExJRURfQUxQSEEiOiIiLGQucGh5c2ljYWxseUNvcnJlY3RMaWdodHM/IiNkZWZpbmUgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyI6IiIsZC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsZC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZhLmV4dGVuc2lvbnMuZ2V0KCJFWFRfZnJhZ19kZXB0aCIpPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLGQuZW52TWFwJiZhLmV4dGVuc2lvbnMuZ2V0KCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIik/IiNkZWZpbmUgVEVYVFVSRV9MT0RfRVhUIjoKIiIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLDAhPT1kLnRvbmVNYXBwaW5nPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsMCE9PWQudG9uZU1hcHBpbmc/VS50b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIiLDAhPT1kLnRvbmVNYXBwaW5nP1lmKCJ0b25lTWFwcGluZyIsZC50b25lTWFwcGluZyk6IiIsZC5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixkLm91dHB1dEVuY29kaW5nfHxkLm1hcEVuY29kaW5nfHxkLmVudk1hcEVuY29kaW5nfHxkLmVtaXNzaXZlTWFwRW5jb2Rpbmc/VS5lbmNvZGluZ3NfcGFyc19mcmFnbWVudDoiIixkLm1hcEVuY29kaW5nP1VkKCJtYXBUZXhlbFRvTGluZWFyIixkLm1hcEVuY29kaW5nKToiIixkLmVudk1hcEVuY29kaW5nP1VkKCJlbnZNYXBUZXhlbFRvTGluZWFyIixkLmVudk1hcEVuY29kaW5nKToiIixkLmVtaXNzaXZlTWFwRW5jb2Rpbmc/VWQoImVtaXNzaXZlTWFwVGV4ZWxUb0xpbmVhciIsCmQuZW1pc3NpdmVNYXBFbmNvZGluZyk6IiIsZC5vdXRwdXRFbmNvZGluZz9YZigibGluZWFyVG9PdXRwdXRUZXhlbCIsZC5vdXRwdXRFbmNvZGluZyk6IiIsZC5kZXB0aFBhY2tpbmc/IiNkZWZpbmUgREVQVEhfUEFDS0lORyAiK2MuZGVwdGhQYWNraW5nOiIiLCJcbiJdLmZpbHRlcih5Yykuam9pbigiXG4iKSk7aD1WZChoLGQpO2g9TmUoaCxkKTtrPVZkKGssZCk7az1OZShrLGQpO2MuaXNTaGFkZXJNYXRlcmlhbHx8KGg9T2UoaCksaz1PZShrKSk7az1tK2s7aD1MZShlLGUuVkVSVEVYX1NIQURFUixnK2gpO2s9TGUoZSxlLkZSQUdNRU5UX1NIQURFUixrKTtlLmF0dGFjaFNoYWRlcih0LGgpO2UuYXR0YWNoU2hhZGVyKHQsayk7dm9pZCAwIT09Yy5pbmRleDBBdHRyaWJ1dGVOYW1lP2UuYmluZEF0dHJpYkxvY2F0aW9uKHQsMCxjLmluZGV4MEF0dHJpYnV0ZU5hbWUpOiEwPT09ZC5tb3JwaFRhcmdldHMmJmUuYmluZEF0dHJpYkxvY2F0aW9uKHQsMCwicG9zaXRpb24iKTtlLmxpbmtQcm9ncmFtKHQpOwpkPWUuZ2V0UHJvZ3JhbUluZm9Mb2codCk7dT1lLmdldFNoYWRlckluZm9Mb2coaCk7cT1lLmdldFNoYWRlckluZm9Mb2coayk7cj1uPSEwO2lmKCExPT09ZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsZS5MSU5LX1NUQVRVUykpbj0hMSxjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFByb2dyYW06IHNoYWRlciBlcnJvcjogIixlLmdldEVycm9yKCksImdsLlZBTElEQVRFX1NUQVRVUyIsZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsZS5WQUxJREFURV9TVEFUVVMpLCJnbC5nZXRQcm9ncmFtSW5mb0xvZyIsZCx1LHEpO2Vsc2UgaWYoIiIhPT1kKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpIixkKTtlbHNlIGlmKCIiPT09dXx8IiI9PT1xKXI9ITE7ciYmKHRoaXMuZGlhZ25vc3RpY3M9e3J1bm5hYmxlOm4sbWF0ZXJpYWw6Yyxwcm9ncmFtTG9nOmQsdmVydGV4U2hhZGVyOntsb2c6dSxwcmVmaXg6Z30sZnJhZ21lbnRTaGFkZXI6e2xvZzpxLApwcmVmaXg6bX19KTtlLmRlbGV0ZVNoYWRlcihoKTtlLmRlbGV0ZVNoYWRlcihrKTt2YXIgcDt0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7dm9pZCAwPT09cCYmKHA9bmV3IGZiKGUsdCxhKSk7cmV0dXJuIHB9O3ZhciB4O3RoaXMuZ2V0QXR0cmlidXRlcz1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXgpe2Zvcih2YXIgYT17fSxiPWUuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0LGUuQUNUSVZFX0FUVFJJQlVURVMpLGM9MDtjPGI7YysrKXt2YXIgZD1lLmdldEFjdGl2ZUF0dHJpYih0LGMpLm5hbWU7YVtkXT1lLmdldEF0dHJpYkxvY2F0aW9uKHQsZCl9eD1hfXJldHVybiB4fTt0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtlLmRlbGV0ZVByb2dyYW0odCk7dGhpcy5wcm9ncmFtPXZvaWQgMH07T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7dW5pZm9ybXM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiAudW5pZm9ybXMgaXMgbm93IC5nZXRVbmlmb3JtcygpLiIpOwpyZXR1cm4gdGhpcy5nZXRVbmlmb3JtcygpfX0sYXR0cmlidXRlczp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IC5hdHRyaWJ1dGVzIGlzIG5vdyAuZ2V0QXR0cmlidXRlcygpLiIpO3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZXMoKX19fSk7dGhpcy5pZD1iZysrO3RoaXMuY29kZT1iO3RoaXMudXNlZFRpbWVzPTE7dGhpcy5wcm9ncmFtPXQ7dGhpcy52ZXJ0ZXhTaGFkZXI9aDt0aGlzLmZyYWdtZW50U2hhZGVyPWs7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gY2coYSxiKXtmdW5jdGlvbiBjKGEsYil7dmFyIGM7YT9hLmlzVGV4dHVyZT9jPWEuZW5jb2Rpbmc6YS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW1zLmdldFRleHR1cmVFbmNvZGluZ0Zyb21NYXA6IGRvbid0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksYz0KYS50ZXh0dXJlLmVuY29kaW5nKTpjPTNFMzszRTM9PT1jJiZiJiYoYz0zMDA3KTtyZXR1cm4gY312YXIgZD1bXSxlPXtNZXNoRGVwdGhNYXRlcmlhbDoiZGVwdGgiLE1lc2hOb3JtYWxNYXRlcmlhbDoibm9ybWFsIixNZXNoQmFzaWNNYXRlcmlhbDoiYmFzaWMiLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6ImxhbWJlcnQiLE1lc2hQaG9uZ01hdGVyaWFsOiJwaG9uZyIsTWVzaFRvb25NYXRlcmlhbDoicGhvbmciLE1lc2hTdGFuZGFyZE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6InBoeXNpY2FsIixMaW5lQmFzaWNNYXRlcmlhbDoiYmFzaWMiLExpbmVEYXNoZWRNYXRlcmlhbDoiZGFzaGVkIixQb2ludHNNYXRlcmlhbDoicG9pbnRzIn0sZj0icHJlY2lzaW9uIHN1cHBvcnRzVmVydGV4VGV4dHVyZXMgbWFwIG1hcEVuY29kaW5nIGVudk1hcCBlbnZNYXBNb2RlIGVudk1hcEVuY29kaW5nIGxpZ2h0TWFwIGFvTWFwIGVtaXNzaXZlTWFwIGVtaXNzaXZlTWFwRW5jb2RpbmcgYnVtcE1hcCBub3JtYWxNYXAgZGlzcGxhY2VtZW50TWFwIHNwZWN1bGFyTWFwIHJvdWdobmVzc01hcCBtZXRhbG5lc3NNYXAgZ3JhZGllbnRNYXAgYWxwaGFNYXAgY29tYmluZSB2ZXJ0ZXhDb2xvcnMgZm9nIHVzZUZvZyBmb2dFeHAgZmxhdFNoYWRpbmcgc2l6ZUF0dGVudWF0aW9uIGxvZ2FyaXRobWljRGVwdGhCdWZmZXIgc2tpbm5pbmcgbWF4Qm9uZXMgdXNlVmVydGV4VGV4dHVyZSBtb3JwaFRhcmdldHMgbW9ycGhOb3JtYWxzIG1heE1vcnBoVGFyZ2V0cyBtYXhNb3JwaE5vcm1hbHMgcHJlbXVsdGlwbGllZEFscGhhIG51bURpckxpZ2h0cyBudW1Qb2ludExpZ2h0cyBudW1TcG90TGlnaHRzIG51bUhlbWlMaWdodHMgbnVtUmVjdEFyZWFMaWdodHMgc2hhZG93TWFwRW5hYmxlZCBzaGFkb3dNYXBUeXBlIHRvbmVNYXBwaW5nIHBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzIGFscGhhVGVzdCBkb3VibGVTaWRlZCBmbGlwU2lkZWQgbnVtQ2xpcHBpbmdQbGFuZXMgbnVtQ2xpcEludGVyc2VjdGlvbiBkZXB0aFBhY2tpbmcgZGl0aGVyaW5nIi5zcGxpdCgiICIpOwp0aGlzLmdldFBhcmFtZXRlcnM9ZnVuY3Rpb24oZCxmLGssbSx1LHEpe3ZhciBuPWVbZC50eXBlXSxyO2lmKHEuaXNTa2lubmVkTWVzaClpZihyPXEuc2tlbGV0b24uYm9uZXMsYi5mbG9hdFZlcnRleFRleHR1cmVzKXI9MTAyNDtlbHNle3ZhciBsPU1hdGgubWluKE1hdGguZmxvb3IoKGIubWF4VmVydGV4VW5pZm9ybXMtMjApLzQpLHIubGVuZ3RoKTtsPHIubGVuZ3RoPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFNrZWxldG9uIGhhcyAiK3IubGVuZ3RoKyIgYm9uZXMuIFRoaXMgR1BVIHN1cHBvcnRzICIrbCsiLiIpLHI9MCk6cj1sfWVsc2Ugcj0wO2w9YS5nZXRQcmVjaXNpb24oKTtudWxsIT09ZC5wcmVjaXNpb24mJihsPWIuZ2V0TWF4UHJlY2lzaW9uKGQucHJlY2lzaW9uKSxsIT09ZC5wcmVjaXNpb24mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6IixkLnByZWNpc2lvbiwibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIikpOwp2YXIgdD1hLmdldFJlbmRlclRhcmdldCgpO3JldHVybntzaGFkZXJJRDpuLHByZWNpc2lvbjpsLHN1cHBvcnRzVmVydGV4VGV4dHVyZXM6Yi52ZXJ0ZXhUZXh0dXJlcyxvdXRwdXRFbmNvZGluZzpjKHQ/dC50ZXh0dXJlOm51bGwsYS5nYW1tYU91dHB1dCksbWFwOiEhZC5tYXAsbWFwRW5jb2Rpbmc6YyhkLm1hcCxhLmdhbW1hSW5wdXQpLGVudk1hcDohIWQuZW52TWFwLGVudk1hcE1vZGU6ZC5lbnZNYXAmJmQuZW52TWFwLm1hcHBpbmcsZW52TWFwRW5jb2Rpbmc6YyhkLmVudk1hcCxhLmdhbW1hSW5wdXQpLGVudk1hcEN1YmVVVjohIWQuZW52TWFwJiYoMzA2PT09ZC5lbnZNYXAubWFwcGluZ3x8MzA3PT09ZC5lbnZNYXAubWFwcGluZyksbGlnaHRNYXA6ISFkLmxpZ2h0TWFwLGFvTWFwOiEhZC5hb01hcCxlbWlzc2l2ZU1hcDohIWQuZW1pc3NpdmVNYXAsZW1pc3NpdmVNYXBFbmNvZGluZzpjKGQuZW1pc3NpdmVNYXAsYS5nYW1tYUlucHV0KSxidW1wTWFwOiEhZC5idW1wTWFwLG5vcm1hbE1hcDohIWQubm9ybWFsTWFwLApkaXNwbGFjZW1lbnRNYXA6ISFkLmRpc3BsYWNlbWVudE1hcCxyb3VnaG5lc3NNYXA6ISFkLnJvdWdobmVzc01hcCxtZXRhbG5lc3NNYXA6ISFkLm1ldGFsbmVzc01hcCxzcGVjdWxhck1hcDohIWQuc3BlY3VsYXJNYXAsYWxwaGFNYXA6ISFkLmFscGhhTWFwLGdyYWRpZW50TWFwOiEhZC5ncmFkaWVudE1hcCxjb21iaW5lOmQuY29tYmluZSx2ZXJ0ZXhDb2xvcnM6ZC52ZXJ0ZXhDb2xvcnMsZm9nOiEhayx1c2VGb2c6ZC5mb2csZm9nRXhwOmsmJmsuaXNGb2dFeHAyLGZsYXRTaGFkaW5nOjE9PT1kLnNoYWRpbmcsc2l6ZUF0dGVudWF0aW9uOmQuc2l6ZUF0dGVudWF0aW9uLGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6Yi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLHNraW5uaW5nOmQuc2tpbm5pbmcmJjA8cixtYXhCb25lczpyLHVzZVZlcnRleFRleHR1cmU6Yi5mbG9hdFZlcnRleFRleHR1cmVzLG1vcnBoVGFyZ2V0czpkLm1vcnBoVGFyZ2V0cyxtb3JwaE5vcm1hbHM6ZC5tb3JwaE5vcm1hbHMsCm1heE1vcnBoVGFyZ2V0czphLm1heE1vcnBoVGFyZ2V0cyxtYXhNb3JwaE5vcm1hbHM6YS5tYXhNb3JwaE5vcm1hbHMsbnVtRGlyTGlnaHRzOmYuZGlyZWN0aW9uYWwubGVuZ3RoLG51bVBvaW50TGlnaHRzOmYucG9pbnQubGVuZ3RoLG51bVNwb3RMaWdodHM6Zi5zcG90Lmxlbmd0aCxudW1SZWN0QXJlYUxpZ2h0czpmLnJlY3RBcmVhLmxlbmd0aCxudW1IZW1pTGlnaHRzOmYuaGVtaS5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6bSxudW1DbGlwSW50ZXJzZWN0aW9uOnUsZGl0aGVyaW5nOmQuZGl0aGVyaW5nLHNoYWRvd01hcEVuYWJsZWQ6YS5zaGFkb3dNYXAuZW5hYmxlZCYmcS5yZWNlaXZlU2hhZG93JiYwPGYuc2hhZG93cy5sZW5ndGgsc2hhZG93TWFwVHlwZTphLnNoYWRvd01hcC50eXBlLHRvbmVNYXBwaW5nOmEudG9uZU1hcHBpbmcscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6YS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6ZC5wcmVtdWx0aXBsaWVkQWxwaGEsCmFscGhhVGVzdDpkLmFscGhhVGVzdCxkb3VibGVTaWRlZDoyPT09ZC5zaWRlLGZsaXBTaWRlZDoxPT09ZC5zaWRlLGRlcHRoUGFja2luZzp2b2lkIDAhPT1kLmRlcHRoUGFja2luZz9kLmRlcHRoUGFja2luZzohMX19O3RoaXMuZ2V0UHJvZ3JhbUNvZGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtiLnNoYWRlcklEP2MucHVzaChiLnNoYWRlcklEKTooYy5wdXNoKGEuZnJhZ21lbnRTaGFkZXIpLGMucHVzaChhLnZlcnRleFNoYWRlcikpO2lmKHZvaWQgMCE9PWEuZGVmaW5lcylmb3IodmFyIGQgaW4gYS5kZWZpbmVzKWMucHVzaChkKSxjLnB1c2goYS5kZWZpbmVzW2RdKTtmb3IoZD0wO2Q8Zi5sZW5ndGg7ZCsrKWMucHVzaChiW2ZbZF1dKTtyZXR1cm4gYy5qb2luKCl9O3RoaXMuYWNxdWlyZVByb2dyYW09ZnVuY3Rpb24oYixjLGUpe2Zvcih2YXIgZix1PTAscT1kLmxlbmd0aDt1PHE7dSsrKXt2YXIgbj1kW3VdO2lmKG4uY29kZT09PWUpe2Y9bjsrK2YudXNlZFRpbWVzO2JyZWFrfX12b2lkIDA9PT0KZiYmKGY9bmV3IGFnKGEsZSxiLGMpLGQucHVzaChmKSk7cmV0dXJuIGZ9O3RoaXMucmVsZWFzZVByb2dyYW09ZnVuY3Rpb24oYSl7aWYoMD09PS0tYS51c2VkVGltZXMpe3ZhciBiPWQuaW5kZXhPZihhKTtkW2JdPWRbZC5sZW5ndGgtMV07ZC5wb3AoKTthLmRlc3Ryb3koKX19O3RoaXMucHJvZ3JhbXM9ZH1mdW5jdGlvbiBkZyhhLGIsYyxkLGUsZixnKXtmdW5jdGlvbiBoKGEsYil7aWYoYS53aWR0aD5ifHxhLmhlaWdodD5iKXt2YXIgYz1iL01hdGgubWF4KGEud2lkdGgsYS5oZWlnaHQpLGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7ZC53aWR0aD1NYXRoLmZsb29yKGEud2lkdGgqYyk7ZC5oZWlnaHQ9TWF0aC5mbG9vcihhLmhlaWdodCpjKTtkLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKGEsMCwwLGEud2lkdGgsYS5oZWlnaHQsMCwwLGQud2lkdGgsZC5oZWlnaHQpO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogaW1hZ2UgaXMgdG9vIGJpZyAoIisKYS53aWR0aCsieCIrYS5oZWlnaHQrIikuIFJlc2l6ZWQgdG8gIitkLndpZHRoKyJ4IitkLmhlaWdodCxhKTtyZXR1cm4gZH1yZXR1cm4gYX1mdW5jdGlvbiBrKGEpe3JldHVybiBZLmlzUG93ZXJPZlR3byhhLndpZHRoKSYmWS5pc1Bvd2VyT2ZUd28oYS5oZWlnaHQpfWZ1bmN0aW9uIG0oYil7cmV0dXJuIDEwMDM9PT1ifHwxMDA0PT09Ynx8MTAwNT09PWI/YS5ORUFSRVNUOmEuTElORUFSfWZ1bmN0aW9uIHUoYil7Yj1iLnRhcmdldDtiLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHUpO2E6e3ZhciBjPWQuZ2V0KGIpO2lmKGIuaW1hZ2UmJmMuX19pbWFnZV9fd2ViZ2xUZXh0dXJlQ3ViZSlhLmRlbGV0ZVRleHR1cmUoYy5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlKTtlbHNle2lmKHZvaWQgMD09PWMuX193ZWJnbEluaXQpYnJlYWsgYTthLmRlbGV0ZVRleHR1cmUoYy5fX3dlYmdsVGV4dHVyZSl9ZC5yZW1vdmUoYil9Zy50ZXh0dXJlcy0tfWZ1bmN0aW9uIHEoYil7Yj1iLnRhcmdldDsKYi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixxKTt2YXIgYz1kLmdldChiKSxlPWQuZ2V0KGIudGV4dHVyZSk7aWYoYil7dm9pZCAwIT09ZS5fX3dlYmdsVGV4dHVyZSYmYS5kZWxldGVUZXh0dXJlKGUuX193ZWJnbFRleHR1cmUpO2IuZGVwdGhUZXh0dXJlJiZiLmRlcHRoVGV4dHVyZS5kaXNwb3NlKCk7aWYoYi5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZSlmb3IoZT0wOzY+ZTtlKyspYS5kZWxldGVGcmFtZWJ1ZmZlcihjLl9fd2ViZ2xGcmFtZWJ1ZmZlcltlXSksYy5fX3dlYmdsRGVwdGhidWZmZXImJmEuZGVsZXRlUmVuZGVyYnVmZmVyKGMuX193ZWJnbERlcHRoYnVmZmVyW2VdKTtlbHNlIGEuZGVsZXRlRnJhbWVidWZmZXIoYy5fX3dlYmdsRnJhbWVidWZmZXIpLGMuX193ZWJnbERlcHRoYnVmZmVyJiZhLmRlbGV0ZVJlbmRlcmJ1ZmZlcihjLl9fd2ViZ2xEZXB0aGJ1ZmZlcik7ZC5yZW1vdmUoYi50ZXh0dXJlKTtkLnJlbW92ZShiKX1nLnRleHR1cmVzLS19ZnVuY3Rpb24gbihiLAptKXt2YXIgbj1kLmdldChiKTtpZigwPGIudmVyc2lvbiYmbi5fX3ZlcnNpb24hPT1iLnZlcnNpb24pe3ZhciBxPWIuaW1hZ2U7aWYodm9pZCAwPT09cSljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCIsYik7ZWxzZSBpZighMT09PXEuY29tcGxldGUpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyBpbmNvbXBsZXRlIixiKTtlbHNle3ZvaWQgMD09PW4uX193ZWJnbEluaXQmJihuLl9fd2ViZ2xJbml0PSEwLGIuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdSksbi5fX3dlYmdsVGV4dHVyZT1hLmNyZWF0ZVRleHR1cmUoKSxnLnRleHR1cmVzKyspO2MuYWN0aXZlVGV4dHVyZShhLlRFWFRVUkUwK20pO2MuYmluZFRleHR1cmUoYS5URVhUVVJFXzJELG4uX193ZWJnbFRleHR1cmUpO2EucGl4ZWxTdG9yZWkoYS5VTlBBQ0tfRkxJUF9ZX1dFQkdMLApiLmZsaXBZKTthLnBpeGVsU3RvcmVpKGEuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLGIucHJlbXVsdGlwbHlBbHBoYSk7YS5waXhlbFN0b3JlaShhLlVOUEFDS19BTElHTk1FTlQsYi51bnBhY2tBbGlnbm1lbnQpO3ZhciBsPWgoYi5pbWFnZSxlLm1heFRleHR1cmVTaXplKTtpZigoMTAwMSE9PWIud3JhcFN8fDEwMDEhPT1iLndyYXBUfHwxMDAzIT09Yi5taW5GaWx0ZXImJjEwMDYhPT1iLm1pbkZpbHRlcikmJiExPT09ayhsKSlpZihxPWwscSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHEgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7dC53aWR0aD1ZLm5lYXJlc3RQb3dlck9mVHdvKHEud2lkdGgpO3QuaGVpZ2h0PVkubmVhcmVzdFBvd2VyT2ZUd28ocS5oZWlnaHQpO3QuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UocSwwLDAsCnQud2lkdGgsdC5oZWlnaHQpO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogaW1hZ2UgaXMgbm90IHBvd2VyIG9mIHR3byAoIitxLndpZHRoKyJ4IitxLmhlaWdodCsiKS4gUmVzaXplZCB0byAiK3Qud2lkdGgrIngiK3QuaGVpZ2h0LHEpO2w9dH1lbHNlIGw9cTt2YXIgcT1rKGwpLHQ9ZihiLmZvcm1hdCksej1mKGIudHlwZSk7cihhLlRFWFRVUkVfMkQsYixxKTt2YXIgRj1iLm1pcG1hcHM7aWYoYi5pc0RlcHRoVGV4dHVyZSl7Rj1hLkRFUFRIX0NPTVBPTkVOVDtpZigxMDE1PT09Yi50eXBlKXtpZighcCl0aHJvdyBFcnJvcigiRmxvYXQgRGVwdGggVGV4dHVyZSBvbmx5IHN1cHBvcnRlZCBpbiBXZWJHTDIuMCIpO0Y9YS5ERVBUSF9DT01QT05FTlQzMkZ9ZWxzZSBwJiYoRj1hLkRFUFRIX0NPTVBPTkVOVDE2KTsxMDI2PT09Yi5mb3JtYXQmJkY9PT1hLkRFUFRIX0NPTVBPTkVOVCYmMTAxMiE9PWIudHlwZSYmMTAxNCE9PWIudHlwZSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLApiLnR5cGU9MTAxMix6PWYoYi50eXBlKSk7MTAyNz09PWIuZm9ybWF0JiYoRj1hLkRFUFRIX1NURU5DSUwsMTAyMCE9PWIudHlwZSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkSW50MjQ4VHlwZSBmb3IgRGVwdGhTdGVuY2lsRm9ybWF0IERlcHRoVGV4dHVyZS4iKSxiLnR5cGU9MTAyMCx6PWYoYi50eXBlKSkpO2MudGV4SW1hZ2UyRChhLlRFWFRVUkVfMkQsMCxGLGwud2lkdGgsbC5oZWlnaHQsMCx0LHosbnVsbCl9ZWxzZSBpZihiLmlzRGF0YVRleHR1cmUpaWYoMDxGLmxlbmd0aCYmcSl7Zm9yKHZhciBhYT0wLFI9Ri5sZW5ndGg7YWE8UjthYSsrKWw9RlthYV0sYy50ZXhJbWFnZTJEKGEuVEVYVFVSRV8yRCxhYSx0LGwud2lkdGgsbC5oZWlnaHQsMCx0LHosbC5kYXRhKTtiLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIGMudGV4SW1hZ2UyRChhLlRFWFRVUkVfMkQsMCx0LGwud2lkdGgsbC5oZWlnaHQsMCx0LHosbC5kYXRhKTtlbHNlIGlmKGIuaXNDb21wcmVzc2VkVGV4dHVyZSlmb3IoYWE9CjAsUj1GLmxlbmd0aDthYTxSO2FhKyspbD1GW2FhXSwxMDIzIT09Yi5mb3JtYXQmJjEwMjIhPT1iLmZvcm1hdD8tMTxjLmdldENvbXByZXNzZWRUZXh0dXJlRm9ybWF0cygpLmluZGV4T2YodCk/Yy5jb21wcmVzc2VkVGV4SW1hZ2UyRChhLlRFWFRVUkVfMkQsYWEsdCxsLndpZHRoLGwuaGVpZ2h0LDAsbC5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC51cGxvYWRUZXh0dXJlKCkiKTpjLnRleEltYWdlMkQoYS5URVhUVVJFXzJELGFhLHQsbC53aWR0aCxsLmhlaWdodCwwLHQseixsLmRhdGEpO2Vsc2UgaWYoMDxGLmxlbmd0aCYmcSl7YWE9MDtmb3IoUj1GLmxlbmd0aDthYTxSO2FhKyspbD1GW2FhXSxjLnRleEltYWdlMkQoYS5URVhUVVJFXzJELGFhLHQsdCx6LGwpO2IuZ2VuZXJhdGVNaXBtYXBzPSExfWVsc2UgYy50ZXhJbWFnZTJEKGEuVEVYVFVSRV8yRCwKMCx0LHQseixsKTtiLmdlbmVyYXRlTWlwbWFwcyYmcSYmYS5nZW5lcmF0ZU1pcG1hcChhLlRFWFRVUkVfMkQpO24uX192ZXJzaW9uPWIudmVyc2lvbjtpZihiLm9uVXBkYXRlKWIub25VcGRhdGUoYik7cmV0dXJufX1jLmFjdGl2ZVRleHR1cmUoYS5URVhUVVJFMCttKTtjLmJpbmRUZXh0dXJlKGEuVEVYVFVSRV8yRCxuLl9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiByKGMsZyxoKXtoPyhhLnRleFBhcmFtZXRlcmkoYyxhLlRFWFRVUkVfV1JBUF9TLGYoZy53cmFwUykpLGEudGV4UGFyYW1ldGVyaShjLGEuVEVYVFVSRV9XUkFQX1QsZihnLndyYXBUKSksYS50ZXhQYXJhbWV0ZXJpKGMsYS5URVhUVVJFX01BR19GSUxURVIsZihnLm1hZ0ZpbHRlcikpLGEudGV4UGFyYW1ldGVyaShjLGEuVEVYVFVSRV9NSU5fRklMVEVSLGYoZy5taW5GaWx0ZXIpKSk6KGEudGV4UGFyYW1ldGVyaShjLGEuVEVYVFVSRV9XUkFQX1MsYS5DTEFNUF9UT19FREdFKSxhLnRleFBhcmFtZXRlcmkoYyxhLlRFWFRVUkVfV1JBUF9ULAphLkNMQU1QX1RPX0VER0UpLDEwMDE9PT1nLndyYXBTJiYxMDAxPT09Zy53cmFwVHx8Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIsZyksYS50ZXhQYXJhbWV0ZXJpKGMsYS5URVhUVVJFX01BR19GSUxURVIsbShnLm1hZ0ZpbHRlcikpLGEudGV4UGFyYW1ldGVyaShjLGEuVEVYVFVSRV9NSU5fRklMVEVSLG0oZy5taW5GaWx0ZXIpKSwxMDAzIT09Zy5taW5GaWx0ZXImJjEwMDYhPT1nLm1pbkZpbHRlciYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUubWluRmlsdGVyIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuTmVhcmVzdEZpbHRlciBvciBUSFJFRS5MaW5lYXJGaWx0ZXIuIixnKSk7IShoPWIuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSl8fAoxMDE1PT09Zy50eXBlJiZudWxsPT09Yi5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpfHwxMDE2PT09Zy50eXBlJiZudWxsPT09Yi5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIil8fCEoMTxnLmFuaXNvdHJvcHl8fGQuZ2V0KGcpLl9fY3VycmVudEFuaXNvdHJvcHkpfHwoYS50ZXhQYXJhbWV0ZXJmKGMsaC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbihnLmFuaXNvdHJvcHksZS5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxkLmdldChnKS5fX2N1cnJlbnRBbmlzb3Ryb3B5PWcuYW5pc290cm9weSl9ZnVuY3Rpb24gbChiLGUsZyxoKXt2YXIgaz1mKGUudGV4dHVyZS5mb3JtYXQpLG09ZihlLnRleHR1cmUudHlwZSk7Yy50ZXhJbWFnZTJEKGgsMCxrLGUud2lkdGgsZS5oZWlnaHQsMCxrLG0sbnVsbCk7YS5iaW5kRnJhbWVidWZmZXIoYS5GUkFNRUJVRkZFUixiKTthLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGEuRlJBTUVCVUZGRVIsZyxoLGQuZ2V0KGUudGV4dHVyZSkuX193ZWJnbFRleHR1cmUsCjApO2EuYmluZEZyYW1lYnVmZmVyKGEuRlJBTUVCVUZGRVIsbnVsbCl9ZnVuY3Rpb24gdChiLGMpe2EuYmluZFJlbmRlcmJ1ZmZlcihhLlJFTkRFUkJVRkZFUixiKTtjLmRlcHRoQnVmZmVyJiYhYy5zdGVuY2lsQnVmZmVyPyhhLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoYS5SRU5ERVJCVUZGRVIsYS5ERVBUSF9DT01QT05FTlQxNixjLndpZHRoLGMuaGVpZ2h0KSxhLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGEuRlJBTUVCVUZGRVIsYS5ERVBUSF9BVFRBQ0hNRU5ULGEuUkVOREVSQlVGRkVSLGIpKTpjLmRlcHRoQnVmZmVyJiZjLnN0ZW5jaWxCdWZmZXI/KGEucmVuZGVyYnVmZmVyU3RvcmFnZShhLlJFTkRFUkJVRkZFUixhLkRFUFRIX1NURU5DSUwsYy53aWR0aCxjLmhlaWdodCksYS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihhLkZSQU1FQlVGRkVSLGEuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULGEuUkVOREVSQlVGRkVSLGIpKTphLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoYS5SRU5ERVJCVUZGRVIsCmEuUkdCQTQsYy53aWR0aCxjLmhlaWdodCk7YS5iaW5kUmVuZGVyYnVmZmVyKGEuUkVOREVSQlVGRkVSLG51bGwpfXZhciBwPSJ1bmRlZmluZWQiIT09dHlwZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQmJmEgaW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0O3RoaXMuc2V0VGV4dHVyZTJEPW47dGhpcy5zZXRUZXh0dXJlQ3ViZT1mdW5jdGlvbihiLG0pe3ZhciBuPWQuZ2V0KGIpO2lmKDY9PT1iLmltYWdlLmxlbmd0aClpZigwPGIudmVyc2lvbiYmbi5fX3ZlcnNpb24hPT1iLnZlcnNpb24pe24uX19pbWFnZV9fd2ViZ2xUZXh0dXJlQ3ViZXx8KGIuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdSksbi5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlPWEuY3JlYXRlVGV4dHVyZSgpLGcudGV4dHVyZXMrKyk7Yy5hY3RpdmVUZXh0dXJlKGEuVEVYVFVSRTArbSk7Yy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfQ1VCRV9NQVAsbi5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlKTthLnBpeGVsU3RvcmVpKGEuVU5QQUNLX0ZMSVBfWV9XRUJHTCwKYi5mbGlwWSk7Zm9yKHZhciBxPWImJmIuaXNDb21wcmVzc2VkVGV4dHVyZSxsPWIuaW1hZ2VbMF0mJmIuaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSx0PVtdLHo9MDs2Pno7eisrKXRbel09cXx8bD9sP2IuaW1hZ2Vbel0uaW1hZ2U6Yi5pbWFnZVt6XTpoKGIuaW1hZ2Vbel0sZS5tYXhDdWJlbWFwU2l6ZSk7dmFyIHA9ayh0WzBdKSx5PWYoYi5mb3JtYXQpLFI9ZihiLnR5cGUpO3IoYS5URVhUVVJFX0NVQkVfTUFQLGIscCk7Zm9yKHo9MDs2Pno7eisrKWlmKHEpZm9yKHZhciBjYSxsYT10W3pdLm1pcG1hcHMsRD0wLEI9bGEubGVuZ3RoO0Q8QjtEKyspY2E9bGFbRF0sMTAyMyE9PWIuZm9ybWF0JiYxMDIyIT09Yi5mb3JtYXQ/LTE8Yy5nZXRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMoKS5pbmRleE9mKHkpP2MuY29tcHJlc3NlZFRleEltYWdlMkQoYS5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1greixELHksY2Eud2lkdGgsY2EuaGVpZ2h0LDAsY2EuZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAuc2V0VGV4dHVyZUN1YmUoKSIpOgpjLnRleEltYWdlMkQoYS5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1greixELHksY2Eud2lkdGgsY2EuaGVpZ2h0LDAseSxSLGNhLmRhdGEpO2Vsc2UgbD9jLnRleEltYWdlMkQoYS5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1greiwwLHksdFt6XS53aWR0aCx0W3pdLmhlaWdodCwwLHksUix0W3pdLmRhdGEpOmMudGV4SW1hZ2UyRChhLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCt6LDAseSx5LFIsdFt6XSk7Yi5nZW5lcmF0ZU1pcG1hcHMmJnAmJmEuZ2VuZXJhdGVNaXBtYXAoYS5URVhUVVJFX0NVQkVfTUFQKTtuLl9fdmVyc2lvbj1iLnZlcnNpb247aWYoYi5vblVwZGF0ZSliLm9uVXBkYXRlKGIpfWVsc2UgYy5hY3RpdmVUZXh0dXJlKGEuVEVYVFVSRTArbSksYy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfQ1VCRV9NQVAsbi5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlKX07dGhpcy5zZXRUZXh0dXJlQ3ViZUR5bmFtaWM9ZnVuY3Rpb24oYixlKXtjLmFjdGl2ZVRleHR1cmUoYS5URVhUVVJFMCsKZSk7Yy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfQ1VCRV9NQVAsZC5nZXQoYikuX193ZWJnbFRleHR1cmUpfTt0aGlzLnNldHVwUmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKGIpe3ZhciBlPWQuZ2V0KGIpLGY9ZC5nZXQoYi50ZXh0dXJlKTtiLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHEpO2YuX193ZWJnbFRleHR1cmU9YS5jcmVhdGVUZXh0dXJlKCk7Zy50ZXh0dXJlcysrO3ZhciBoPSEwPT09Yi5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZSxtPWsoYik7aWYoaCl7ZS5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKHZhciB1PTA7Nj51O3UrKyllLl9fd2ViZ2xGcmFtZWJ1ZmZlclt1XT1hLmNyZWF0ZUZyYW1lYnVmZmVyKCl9ZWxzZSBlLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1hLmNyZWF0ZUZyYW1lYnVmZmVyKCk7aWYoaCl7Yy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfQ1VCRV9NQVAsZi5fX3dlYmdsVGV4dHVyZSk7cihhLlRFWFRVUkVfQ1VCRV9NQVAsYi50ZXh0dXJlLG0pO2Zvcih1PTA7Nj51O3UrKylsKGUuX193ZWJnbEZyYW1lYnVmZmVyW3VdLApiLGEuQ09MT1JfQVRUQUNITUVOVDAsYS5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1grdSk7Yi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyYmbSYmYS5nZW5lcmF0ZU1pcG1hcChhLlRFWFRVUkVfQ1VCRV9NQVApO2MuYmluZFRleHR1cmUoYS5URVhUVVJFX0NVQkVfTUFQLG51bGwpfWVsc2UgYy5iaW5kVGV4dHVyZShhLlRFWFRVUkVfMkQsZi5fX3dlYmdsVGV4dHVyZSkscihhLlRFWFRVUkVfMkQsYi50ZXh0dXJlLG0pLGwoZS5fX3dlYmdsRnJhbWVidWZmZXIsYixhLkNPTE9SX0FUVEFDSE1FTlQwLGEuVEVYVFVSRV8yRCksYi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyYmbSYmYS5nZW5lcmF0ZU1pcG1hcChhLlRFWFRVUkVfMkQpLGMuYmluZFRleHR1cmUoYS5URVhUVVJFXzJELG51bGwpO2lmKGIuZGVwdGhCdWZmZXIpe2U9ZC5nZXQoYik7Zj0hMD09PWIuaXNXZWJHTFJlbmRlclRhcmdldEN1YmU7aWYoYi5kZXB0aFRleHR1cmUpe2lmKGYpdGhyb3cgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7CmlmKGImJmIuaXNXZWJHTFJlbmRlclRhcmdldEN1YmUpdGhyb3cgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQhIik7YS5iaW5kRnJhbWVidWZmZXIoYS5GUkFNRUJVRkZFUixlLl9fd2ViZ2xGcmFtZWJ1ZmZlcik7aWYoIWIuZGVwdGhUZXh0dXJlfHwhYi5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpdGhyb3cgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTtkLmdldChiLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUmJmIuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPT09Yi53aWR0aCYmYi5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0PT09Yi5oZWlnaHR8fChiLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD1iLndpZHRoLGIuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD1iLmhlaWdodCxiLmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0KITApO24oYi5kZXB0aFRleHR1cmUsMCk7ZT1kLmdldChiLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU7aWYoMTAyNj09PWIuZGVwdGhUZXh0dXJlLmZvcm1hdClhLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGEuRlJBTUVCVUZGRVIsYS5ERVBUSF9BVFRBQ0hNRU5ULGEuVEVYVFVSRV8yRCxlLDApO2Vsc2UgaWYoMTAyNz09PWIuZGVwdGhUZXh0dXJlLmZvcm1hdClhLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGEuRlJBTUVCVUZGRVIsYS5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsYS5URVhUVVJFXzJELGUsMCk7ZWxzZSB0aHJvdyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iik7fWVsc2UgaWYoZilmb3IoZS5fX3dlYmdsRGVwdGhidWZmZXI9W10sZj0wOzY+ZjtmKyspYS5iaW5kRnJhbWVidWZmZXIoYS5GUkFNRUJVRkZFUixlLl9fd2ViZ2xGcmFtZWJ1ZmZlcltmXSksZS5fX3dlYmdsRGVwdGhidWZmZXJbZl09YS5jcmVhdGVSZW5kZXJidWZmZXIoKSx0KGUuX193ZWJnbERlcHRoYnVmZmVyW2ZdLApiKTtlbHNlIGEuYmluZEZyYW1lYnVmZmVyKGEuRlJBTUVCVUZGRVIsZS5fX3dlYmdsRnJhbWVidWZmZXIpLGUuX193ZWJnbERlcHRoYnVmZmVyPWEuY3JlYXRlUmVuZGVyYnVmZmVyKCksdChlLl9fd2ViZ2xEZXB0aGJ1ZmZlcixiKTthLmJpbmRGcmFtZWJ1ZmZlcihhLkZSQU1FQlVGRkVSLG51bGwpfX07dGhpcy51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXA9ZnVuY3Rpb24oYil7dmFyIGU9Yi50ZXh0dXJlO2UuZ2VuZXJhdGVNaXBtYXBzJiZrKGIpJiYxMDAzIT09ZS5taW5GaWx0ZXImJjEwMDYhPT1lLm1pbkZpbHRlciYmKGI9YiYmYi5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZT9hLlRFWFRVUkVfQ1VCRV9NQVA6YS5URVhUVVJFXzJELGU9ZC5nZXQoZSkuX193ZWJnbFRleHR1cmUsYy5iaW5kVGV4dHVyZShiLGUpLGEuZ2VuZXJhdGVNaXBtYXAoYiksYy5iaW5kVGV4dHVyZShiLG51bGwpKX19ZnVuY3Rpb24gZWcoKXt2YXIgYT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGIpe2I9Yi51dWlkOwp2YXIgYz1hW2JdO3ZvaWQgMD09PWMmJihjPXt9LGFbYl09Yyk7cmV0dXJuIGN9LHJlbW92ZTpmdW5jdGlvbihiKXtkZWxldGUgYVtiLnV1aWRdfSxjbGVhcjpmdW5jdGlvbigpe2E9e319fX1mdW5jdGlvbiBmZyhhLGIsYyl7ZnVuY3Rpb24gZChiLGMsZCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoNCksZj1hLmNyZWF0ZVRleHR1cmUoKTthLmJpbmRUZXh0dXJlKGIsZik7YS50ZXhQYXJhbWV0ZXJpKGIsYS5URVhUVVJFX01JTl9GSUxURVIsYS5ORUFSRVNUKTthLnRleFBhcmFtZXRlcmkoYixhLlRFWFRVUkVfTUFHX0ZJTFRFUixhLk5FQVJFU1QpO2ZvcihiPTA7YjxkO2IrKylhLnRleEltYWdlMkQoYytiLDAsYS5SR0JBLDEsMSwwLGEuUkdCQSxhLlVOU0lHTkVEX0JZVEUsZSk7cmV0dXJuIGZ9ZnVuY3Rpb24gZShiKXshMCE9PXZbYl0mJihhLmVuYWJsZShiKSx2W2JdPSEwKX1mdW5jdGlvbiBmKGIpeyExIT09dltiXSYmKGEuZGlzYWJsZShiKSx2W2JdPSExKX1mdW5jdGlvbiBnKGIsZCwKZyxoLGssbSxuLHUpezAhPT1iP2UoYS5CTEVORCk6ZihhLkJMRU5EKTtpZihiIT09d3x8dSE9PWNhKTI9PT1iP3U/KGEuYmxlbmRFcXVhdGlvblNlcGFyYXRlKGEuRlVOQ19BREQsYS5GVU5DX0FERCksYS5ibGVuZEZ1bmNTZXBhcmF0ZShhLk9ORSxhLk9ORSxhLk9ORSxhLk9ORSkpOihhLmJsZW5kRXF1YXRpb24oYS5GVU5DX0FERCksYS5ibGVuZEZ1bmMoYS5TUkNfQUxQSEEsYS5PTkUpKTozPT09Yj91PyhhLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShhLkZVTkNfQURELGEuRlVOQ19BREQpLGEuYmxlbmRGdW5jU2VwYXJhdGUoYS5aRVJPLGEuWkVSTyxhLk9ORV9NSU5VU19TUkNfQ09MT1IsYS5PTkVfTUlOVVNfU1JDX0FMUEhBKSk6KGEuYmxlbmRFcXVhdGlvbihhLkZVTkNfQUREKSxhLmJsZW5kRnVuYyhhLlpFUk8sYS5PTkVfTUlOVVNfU1JDX0NPTE9SKSk6ND09PWI/dT8oYS5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoYS5GVU5DX0FERCxhLkZVTkNfQUREKSxhLmJsZW5kRnVuY1NlcGFyYXRlKGEuWkVSTywKYS5TUkNfQ09MT1IsYS5aRVJPLGEuU1JDX0FMUEhBKSk6KGEuYmxlbmRFcXVhdGlvbihhLkZVTkNfQUREKSxhLmJsZW5kRnVuYyhhLlpFUk8sYS5TUkNfQ09MT1IpKTp1PyhhLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShhLkZVTkNfQURELGEuRlVOQ19BREQpLGEuYmxlbmRGdW5jU2VwYXJhdGUoYS5PTkUsYS5PTkVfTUlOVVNfU1JDX0FMUEhBLGEuT05FLGEuT05FX01JTlVTX1NSQ19BTFBIQSkpOihhLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShhLkZVTkNfQURELGEuRlVOQ19BREQpLGEuYmxlbmRGdW5jU2VwYXJhdGUoYS5TUkNfQUxQSEEsYS5PTkVfTUlOVVNfU1JDX0FMUEhBLGEuT05FLGEuT05FX01JTlVTX1NSQ19BTFBIQSkpLHc9YixjYT11O2lmKDU9PT1iKXtrPWt8fGQ7bT1tfHxnO249bnx8aDtpZihkIT09T3x8ayE9PUYpYS5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoYyhkKSxjKGspKSxPPWQsRj1rO2lmKGchPT1TfHxoIT09RXx8bSE9PWFhfHxuIT09UilhLmJsZW5kRnVuY1NlcGFyYXRlKGMoZyksCmMoaCksYyhtKSxjKG4pKSxTPWcsRT1oLGFhPW0sUj1ufWVsc2UgUj1hYT1GPUU9Uz1PPW51bGx9ZnVuY3Rpb24gaChiKXtsYSE9PWImJihiP2EuZnJvbnRGYWNlKGEuQ1cpOmEuZnJvbnRGYWNlKGEuQ0NXKSxsYT1iKX1mdW5jdGlvbiBrKGIpezAhPT1iPyhlKGEuQ1VMTF9GQUNFKSxiIT09RCYmKDE9PT1iP2EuY3VsbEZhY2UoYS5CQUNLKToyPT09Yj9hLmN1bGxGYWNlKGEuRlJPTlQpOmEuY3VsbEZhY2UoYS5GUk9OVF9BTkRfQkFDSykpKTpmKGEuQ1VMTF9GQUNFKTtEPWJ9ZnVuY3Rpb24gbShiLGMsZCl7aWYoYil7aWYoZShhLlBPTFlHT05fT0ZGU0VUX0ZJTEwpLEMhPT1jfHxQIT09ZClhLnBvbHlnb25PZmZzZXQoYyxkKSxDPWMsUD1kfWVsc2UgZihhLlBPTFlHT05fT0ZGU0VUX0ZJTEwpfWZ1bmN0aW9uIHUoYil7dm9pZCAwPT09YiYmKGI9YS5URVhUVVJFMCtXLTEpO1QhPT1iJiYoYS5hY3RpdmVUZXh0dXJlKGIpLFQ9Yil9dmFyIHE9bmV3IGZ1bmN0aW9uKCl7dmFyIGI9ITEsYz0KbmV3IGdhLGQ9bnVsbCxlPW5ldyBnYTtyZXR1cm57c2V0TWFzazpmdW5jdGlvbihjKXtkPT09Y3x8Ynx8KGEuY29sb3JNYXNrKGMsYyxjLGMpLGQ9Yyl9LHNldExvY2tlZDpmdW5jdGlvbihhKXtiPWF9LHNldENsZWFyOmZ1bmN0aW9uKGIsZCxmLGcsaCl7ITA9PT1oJiYoYio9ZyxkKj1nLGYqPWcpO2Muc2V0KGIsZCxmLGcpOyExPT09ZS5lcXVhbHMoYykmJihhLmNsZWFyQ29sb3IoYixkLGYsZyksZS5jb3B5KGMpKX0scmVzZXQ6ZnVuY3Rpb24oKXtiPSExO2Q9bnVsbDtlLnNldCgwLDAsMCwxKX19fSxuPW5ldyBmdW5jdGlvbigpe3ZhciBiPSExLGM9bnVsbCxkPW51bGwsZz1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKGIpe2I/ZShhLkRFUFRIX1RFU1QpOmYoYS5ERVBUSF9URVNUKX0sc2V0TWFzazpmdW5jdGlvbihkKXtjPT09ZHx8Ynx8KGEuZGVwdGhNYXNrKGQpLGM9ZCl9LHNldEZ1bmM6ZnVuY3Rpb24oYil7aWYoZCE9PWIpe2lmKGIpc3dpdGNoKGIpe2Nhc2UgMDphLmRlcHRoRnVuYyhhLk5FVkVSKTsKYnJlYWs7Y2FzZSAxOmEuZGVwdGhGdW5jKGEuQUxXQVlTKTticmVhaztjYXNlIDI6YS5kZXB0aEZ1bmMoYS5MRVNTKTticmVhaztjYXNlIDM6YS5kZXB0aEZ1bmMoYS5MRVFVQUwpO2JyZWFrO2Nhc2UgNDphLmRlcHRoRnVuYyhhLkVRVUFMKTticmVhaztjYXNlIDU6YS5kZXB0aEZ1bmMoYS5HRVFVQUwpO2JyZWFrO2Nhc2UgNjphLmRlcHRoRnVuYyhhLkdSRUFURVIpO2JyZWFrO2Nhc2UgNzphLmRlcHRoRnVuYyhhLk5PVEVRVUFMKTticmVhaztkZWZhdWx0OmEuZGVwdGhGdW5jKGEuTEVRVUFMKX1lbHNlIGEuZGVwdGhGdW5jKGEuTEVRVUFMKTtkPWJ9fSxzZXRMb2NrZWQ6ZnVuY3Rpb24oYSl7Yj1hfSxzZXRDbGVhcjpmdW5jdGlvbihiKXtnIT09YiYmKGEuY2xlYXJEZXB0aChiKSxnPWIpfSxyZXNldDpmdW5jdGlvbigpe2I9ITE7Zz1kPWM9bnVsbH19fSxyPW5ldyBmdW5jdGlvbigpe3ZhciBiPSExLGM9bnVsbCxkPW51bGwsZz1udWxsLGg9bnVsbCxrPW51bGwsbT1udWxsLG49bnVsbCwKdT1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKGIpe2I/ZShhLlNURU5DSUxfVEVTVCk6ZihhLlNURU5DSUxfVEVTVCl9LHNldE1hc2s6ZnVuY3Rpb24oZCl7Yz09PWR8fGJ8fChhLnN0ZW5jaWxNYXNrKGQpLGM9ZCl9LHNldEZ1bmM6ZnVuY3Rpb24oYixjLGUpe2lmKGQhPT1ifHxnIT09Y3x8aCE9PWUpYS5zdGVuY2lsRnVuYyhiLGMsZSksZD1iLGc9YyxoPWV9LHNldE9wOmZ1bmN0aW9uKGIsYyxkKXtpZihrIT09Ynx8bSE9PWN8fG4hPT1kKWEuc3RlbmNpbE9wKGIsYyxkKSxrPWIsbT1jLG49ZH0sc2V0TG9ja2VkOmZ1bmN0aW9uKGEpe2I9YX0sc2V0Q2xlYXI6ZnVuY3Rpb24oYil7dSE9PWImJihhLmNsZWFyU3RlbmNpbChiKSx1PWIpfSxyZXNldDpmdW5jdGlvbigpe2I9ITE7dT1uPW09az1oPWc9ZD1jPW51bGx9fX0sbD1hLmdldFBhcmFtZXRlcihhLk1BWF9WRVJURVhfQVRUUklCUyksdD1uZXcgVWludDhBcnJheShsKSxwPW5ldyBVaW50OEFycmF5KGwpLHg9bmV3IFVpbnQ4QXJyYXkobCksCnY9e30sRz1udWxsLHc9bnVsbCxPPW51bGwsUz1udWxsLEU9bnVsbCxGPW51bGwsYWE9bnVsbCxSPW51bGwsY2E9ITEsbGE9bnVsbCxEPW51bGwsQj1udWxsLEM9bnVsbCxQPW51bGwsSz1udWxsLFc9YS5nZXRQYXJhbWV0ZXIoYS5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyksbD1wYXJzZUZsb2F0KC9eV2ViR0xcIChbMC05XSkvLmV4ZWMoYS5nZXRQYXJhbWV0ZXIoYS5WRVJTSU9OKSlbMV0pLGJhPTE8PXBhcnNlRmxvYXQobCksVD1udWxsLFE9e30sST1uZXcgZ2EsSD1uZXcgZ2EsSj17fTtKW2EuVEVYVFVSRV8yRF09ZChhLlRFWFRVUkVfMkQsYS5URVhUVVJFXzJELDEpO0pbYS5URVhUVVJFX0NVQkVfTUFQXT1kKGEuVEVYVFVSRV9DVUJFX01BUCxhLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCw2KTtyZXR1cm57YnVmZmVyczp7Y29sb3I6cSxkZXB0aDpuLHN0ZW5jaWw6cn0saW5pdDpmdW5jdGlvbigpe3Euc2V0Q2xlYXIoMCwwLDAsMSk7bi5zZXRDbGVhcigxKTtyLnNldENsZWFyKDApOwplKGEuREVQVEhfVEVTVCk7bi5zZXRGdW5jKDMpO2goITEpO2soMSk7ZShhLkNVTExfRkFDRSk7ZShhLkJMRU5EKTtnKDEpfSxpbml0QXR0cmlidXRlczpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI9dC5sZW5ndGg7YTxiO2ErKyl0W2FdPTB9LGVuYWJsZUF0dHJpYnV0ZTpmdW5jdGlvbihjKXt0W2NdPTE7MD09PXBbY10mJihhLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGMpLHBbY109MSk7MCE9PXhbY10mJihiLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShjLDApLHhbY109MCl9LGVuYWJsZUF0dHJpYnV0ZUFuZERpdmlzb3I6ZnVuY3Rpb24oYyxkKXt0W2NdPTE7MD09PXBbY10mJihhLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGMpLHBbY109MSk7eFtjXSE9PWQmJihiLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShjLGQpLHhbY109ZCl9LGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPQowLGM9cC5sZW5ndGg7YiE9PWM7KytiKXBbYl0hPT10W2JdJiYoYS5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoYikscFtiXT0wKX0sZW5hYmxlOmUsZGlzYWJsZTpmLGdldENvbXByZXNzZWRUZXh0dXJlRm9ybWF0czpmdW5jdGlvbigpe2lmKG51bGw9PT1HJiYoRz1bXSxiLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fGIuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxiLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSkpZm9yKHZhciBjPWEuZ2V0UGFyYW1ldGVyKGEuQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMpLGQ9MDtkPGMubGVuZ3RoO2QrKylHLnB1c2goY1tkXSk7cmV0dXJuIEd9LHNldEJsZW5kaW5nOmcsc2V0TWF0ZXJpYWw6ZnVuY3Rpb24oYil7Mj09PWIuc2lkZT9mKGEuQ1VMTF9GQUNFKTplKGEuQ1VMTF9GQUNFKTtoKDE9PT1iLnNpZGUpOyEwPT09Yi50cmFuc3BhcmVudD9nKGIuYmxlbmRpbmcsYi5ibGVuZEVxdWF0aW9uLApiLmJsZW5kU3JjLGIuYmxlbmREc3QsYi5ibGVuZEVxdWF0aW9uQWxwaGEsYi5ibGVuZFNyY0FscGhhLGIuYmxlbmREc3RBbHBoYSxiLnByZW11bHRpcGxpZWRBbHBoYSk6ZygwKTtuLnNldEZ1bmMoYi5kZXB0aEZ1bmMpO24uc2V0VGVzdChiLmRlcHRoVGVzdCk7bi5zZXRNYXNrKGIuZGVwdGhXcml0ZSk7cS5zZXRNYXNrKGIuY29sb3JXcml0ZSk7bShiLnBvbHlnb25PZmZzZXQsYi5wb2x5Z29uT2Zmc2V0RmFjdG9yLGIucG9seWdvbk9mZnNldFVuaXRzKX0sc2V0RmxpcFNpZGVkOmgsc2V0Q3VsbEZhY2U6ayxzZXRMaW5lV2lkdGg6ZnVuY3Rpb24oYil7YiE9PUImJihiYSYmYS5saW5lV2lkdGgoYiksQj1iKX0sc2V0UG9seWdvbk9mZnNldDptLGdldFNjaXNzb3JUZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIEt9LHNldFNjaXNzb3JUZXN0OmZ1bmN0aW9uKGIpeyhLPWIpP2UoYS5TQ0lTU09SX1RFU1QpOmYoYS5TQ0lTU09SX1RFU1QpfSxhY3RpdmVUZXh0dXJlOnUsYmluZFRleHR1cmU6ZnVuY3Rpb24oYiwKYyl7bnVsbD09PVQmJnUoKTt2YXIgZD1RW1RdO3ZvaWQgMD09PWQmJihkPXt0eXBlOnZvaWQgMCx0ZXh0dXJlOnZvaWQgMH0sUVtUXT1kKTtpZihkLnR5cGUhPT1ifHxkLnRleHR1cmUhPT1jKWEuYmluZFRleHR1cmUoYixjfHxKW2JdKSxkLnR5cGU9YixkLnRleHR1cmU9Y30sY29tcHJlc3NlZFRleEltYWdlMkQ6ZnVuY3Rpb24oKXt0cnl7YS5jb21wcmVzc2VkVGV4SW1hZ2UyRC5hcHBseShhLGFyZ3VtZW50cyl9Y2F0Y2goYil7Y29uc29sZS5lcnJvcihiKX19LHRleEltYWdlMkQ6ZnVuY3Rpb24oKXt0cnl7YS50ZXhJbWFnZTJELmFwcGx5KGEsYXJndW1lbnRzKX1jYXRjaChiKXtjb25zb2xlLmVycm9yKGIpfX0sc2Npc3NvcjpmdW5jdGlvbihiKXshMT09PUkuZXF1YWxzKGIpJiYoYS5zY2lzc29yKGIueCxiLnksYi56LGIudyksSS5jb3B5KGIpKX0sdmlld3BvcnQ6ZnVuY3Rpb24oYil7ITE9PT1ILmVxdWFscyhiKSYmKGEudmlld3BvcnQoYi54LGIueSxiLnosYi53KSxILmNvcHkoYikpfSwKcmVzZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKykxPT09cFtiXSYmKGEuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGIpLHBbYl09MCk7dj17fTtUPUc9bnVsbDtRPXt9O0Q9bGE9dz1udWxsO3EucmVzZXQoKTtuLnJlc2V0KCk7ci5yZXNldCgpfX19ZnVuY3Rpb24gZ2coYSxiLGMpe2Z1bmN0aW9uIGQoYil7aWYoImhpZ2hwIj09PWIpe2lmKDA8YS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoYS5WRVJURVhfU0hBREVSLGEuSElHSF9GTE9BVCkucHJlY2lzaW9uJiYwPGEuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KGEuRlJBR01FTlRfU0hBREVSLGEuSElHSF9GTE9BVCkucHJlY2lzaW9uKXJldHVybiJoaWdocCI7Yj0ibWVkaXVtcCJ9cmV0dXJuIm1lZGl1bXAiPT09YiYmMDxhLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChhLlZFUlRFWF9TSEFERVIsYS5NRURJVU1fRkxPQVQpLnByZWNpc2lvbiYmMDxhLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChhLkZSQUdNRU5UX1NIQURFUiwKYS5NRURJVU1fRkxPQVQpLnByZWNpc2lvbj8ibWVkaXVtcCI6Imxvd3AifXZhciBlLGY9dm9pZCAwIT09Yy5wcmVjaXNpb24/Yy5wcmVjaXNpb246ImhpZ2hwIixnPWQoZik7ZyE9PWYmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IixmLCJub3Qgc3VwcG9ydGVkLCB1c2luZyIsZywiaW5zdGVhZC4iKSxmPWcpO2M9ITA9PT1jLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJiEhYi5nZXQoIkVYVF9mcmFnX2RlcHRoIik7dmFyIGc9YS5nZXRQYXJhbWV0ZXIoYS5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyksaD1hLmdldFBhcmFtZXRlcihhLk1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyksaz1hLmdldFBhcmFtZXRlcihhLk1BWF9URVhUVVJFX1NJWkUpLG09YS5nZXRQYXJhbWV0ZXIoYS5NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFKSx1PWEuZ2V0UGFyYW1ldGVyKGEuTUFYX1ZFUlRFWF9BVFRSSUJTKSxxPWEuZ2V0UGFyYW1ldGVyKGEuTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMpLApuPWEuZ2V0UGFyYW1ldGVyKGEuTUFYX1ZBUllJTkdfVkVDVE9SUykscj1hLmdldFBhcmFtZXRlcihhLk1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMpLGw9MDxoLHQ9ISFiLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKTtyZXR1cm57Z2V0TWF4QW5pc290cm9weTpmdW5jdGlvbigpe2lmKHZvaWQgMCE9PWUpcmV0dXJuIGU7dmFyIGM9Yi5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO3JldHVybiBlPW51bGwhPT1jP2EuZ2V0UGFyYW1ldGVyKGMuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTowfSxnZXRNYXhQcmVjaXNpb246ZCxwcmVjaXNpb246Zixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmMsbWF4VGV4dHVyZXM6ZyxtYXhWZXJ0ZXhUZXh0dXJlczpoLG1heFRleHR1cmVTaXplOmssbWF4Q3ViZW1hcFNpemU6bSxtYXhBdHRyaWJ1dGVzOnUsbWF4VmVydGV4VW5pZm9ybXM6cSxtYXhWYXJ5aW5nczpuLG1heEZyYWdtZW50VW5pZm9ybXM6cix2ZXJ0ZXhUZXh0dXJlczpsLApmbG9hdEZyYWdtZW50VGV4dHVyZXM6dCxmbG9hdFZlcnRleFRleHR1cmVzOmwmJnR9fWZ1bmN0aW9uIGhnKGEpe3ZhciBiPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24oYyl7aWYodm9pZCAwIT09YltjXSlyZXR1cm4gYltjXTt2YXIgZDtzd2l0Y2goYyl7Y2FzZSAiV0VCR0xfZGVwdGhfdGV4dHVyZSI6ZD1hLmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxhLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2RlcHRoX3RleHR1cmUiKXx8YS5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlIik7YnJlYWs7Y2FzZSAiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjpkPWEuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8YS5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8YS5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTsKYnJlYWs7Y2FzZSAiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiOmQ9YS5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fGEuZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8YS5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpO2JyZWFrO2Nhc2UgIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6ZD1hLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fGEuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7Y2FzZSAiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiOmQ9YS5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIik7YnJlYWs7ZGVmYXVsdDpkPWEuZ2V0RXh0ZW5zaW9uKGMpfW51bGw9PT1kJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrCmMrIiBleHRlbnNpb24gbm90IHN1cHBvcnRlZC4iKTtyZXR1cm4gYltjXT1kfX19ZnVuY3Rpb24gaWcoKXtmdW5jdGlvbiBhKCl7bS52YWx1ZSE9PWQmJihtLnZhbHVlPWQsbS5uZWVkc1VwZGF0ZT0wPGUpO2MubnVtUGxhbmVzPWU7Yy5udW1JbnRlcnNlY3Rpb249MH1mdW5jdGlvbiBiKGEsYixkLGUpe3ZhciBmPW51bGwhPT1hP2EubGVuZ3RoOjAsZz1udWxsO2lmKDAhPT1mKXtnPW0udmFsdWU7aWYoITAhPT1lfHxudWxsPT09Zyl7ZT1kKzQqZjtiPWIubWF0cml4V29ybGRJbnZlcnNlO2suZ2V0Tm9ybWFsTWF0cml4KGIpO2lmKG51bGw9PT1nfHxnLmxlbmd0aDxlKWc9bmV3IEZsb2F0MzJBcnJheShlKTtmb3IoZT0wO2UhPT1mOysrZSxkKz00KWguY29weShhW2VdKS5hcHBseU1hdHJpeDQoYixrKSxoLm5vcm1hbC50b0FycmF5KGcsZCksZ1tkKzNdPWguY29uc3RhbnR9bS52YWx1ZT1nO20ubmVlZHNVcGRhdGU9ITB9Yy5udW1QbGFuZXM9ZjtyZXR1cm4gZ312YXIgYz10aGlzLGQ9bnVsbCwKZT0wLGY9ITEsZz0hMSxoPW5ldyB3YSxrPW5ldyBLYSxtPXt2YWx1ZTpudWxsLG5lZWRzVXBkYXRlOiExfTt0aGlzLnVuaWZvcm09bTt0aGlzLm51bUludGVyc2VjdGlvbj10aGlzLm51bVBsYW5lcz0wO3RoaXMuaW5pdD1mdW5jdGlvbihhLGMsZyl7dmFyIGg9MCE9PWEubGVuZ3RofHxjfHwwIT09ZXx8ZjtmPWM7ZD1iKGEsZywwKTtlPWEubGVuZ3RoO3JldHVybiBofTt0aGlzLmJlZ2luU2hhZG93cz1mdW5jdGlvbigpe2c9ITA7YihudWxsKX07dGhpcy5lbmRTaGFkb3dzPWZ1bmN0aW9uKCl7Zz0hMTthKCl9O3RoaXMuc2V0U3RhdGU9ZnVuY3Rpb24oYyxoLGsscixsLHQpe2lmKCFmfHxudWxsPT09Y3x8MD09PWMubGVuZ3RofHxnJiYhaylnP2IobnVsbCk6YSgpO2Vsc2V7az1nPzA6ZTt2YXIgcD00KmsseD1sLmNsaXBwaW5nU3RhdGV8fG51bGw7bS52YWx1ZT14O3g9YihjLHIscCx0KTtmb3IoYz0wO2MhPT1wOysrYyl4W2NdPWRbY107bC5jbGlwcGluZ1N0YXRlPXg7dGhpcy5udW1JbnRlcnNlY3Rpb249Cmg/dGhpcy5udW1QbGFuZXM6MDt0aGlzLm51bVBsYW5lcys9a319fWZ1bmN0aW9uIFhkKGEpe2Z1bmN0aW9uIGIoKXtmYS5pbml0KCk7ZmEuc2Npc3NvcihRLmNvcHkoaGEpLm11bHRpcGx5U2NhbGFyKGthKSk7ZmEudmlld3BvcnQoWi5jb3B5KHpjKS5tdWx0aXBseVNjYWxhcihrYSkpO2ZhLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoSWEucixJYS5nLElhLmIsWCxFKX1mdW5jdGlvbiBjKCl7VD1NPW51bGw7YmE9IiI7Vz0tMTtmYS5yZXNldCgpfWZ1bmN0aW9uIGQoYSl7YS5wcmV2ZW50RGVmYXVsdCgpO2MoKTtiKCk7aWEuY2xlYXIoKTt3YS5jbGVhcigpfWZ1bmN0aW9uIGUoYSl7YT1hLnRhcmdldDthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGUpO2YoYSk7aWEucmVtb3ZlKGEpfWZ1bmN0aW9uIGYoYSl7dmFyIGI9aWEuZ2V0KGEpLnByb2dyYW07YS5wcm9ncmFtPXZvaWQgMDt2b2lkIDAhPT1iJiZ5YS5yZWxlYXNlUHJvZ3JhbShiKX1mdW5jdGlvbiBnKGEsYixjKXthLnJlbmRlcihmdW5jdGlvbihhKXtDLnJlbmRlckJ1ZmZlckltbWVkaWF0ZShhLApiLGMpfSl9ZnVuY3Rpb24gaChhLGIpe3JldHVybiBNYXRoLmFicyhiWzBdKS1NYXRoLmFicyhhWzBdKX1mdW5jdGlvbiBrKGEsYixjKXtpZihhLnZpc2libGUpe2lmKGEubGF5ZXJzLnRlc3QoYi5sYXllcnMpKWlmKGEuaXNMaWdodClhYS5wdXNoKGEpO2Vsc2UgaWYoYS5pc1Nwcml0ZSlhLmZydXN0dW1DdWxsZWQmJiFtYS5pbnRlcnNlY3RzU3ByaXRlKGEpfHxELnB1c2goYSk7ZWxzZSBpZihhLmlzTGVuc0ZsYXJlKUIucHVzaChhKTtlbHNlIGlmKGEuaXNJbW1lZGlhdGVSZW5kZXJPYmplY3QpYyYmUWEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGEubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChsZCksUi5wdXNoKGEsbnVsbCxhLm1hdGVyaWFsLFFhLnosbnVsbCk7ZWxzZSBpZihhLmlzTWVzaHx8YS5pc0xpbmV8fGEuaXNQb2ludHMpaWYoYS5pc1NraW5uZWRNZXNoJiZhLnNrZWxldG9uLnVwZGF0ZSgpLCFhLmZydXN0dW1DdWxsZWR8fG1hLmludGVyc2VjdHNPYmplY3QoYSkpe2MmJlFhLnNldEZyb21NYXRyaXhQb3NpdGlvbihhLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQobGQpOwp2YXIgZD13YS51cGRhdGUoYSksZT1hLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBmPWQuZ3JvdXBzLGc9MCxoPWYubGVuZ3RoO2c8aDtnKyspe3ZhciBtPWZbZ10sbj1lW20ubWF0ZXJpYWxJbmRleF07biYmbi52aXNpYmxlJiZSLnB1c2goYSxkLG4sUWEueixtKX1lbHNlIGUudmlzaWJsZSYmUi5wdXNoKGEsZCxlLFFhLnosbnVsbCl9YT1hLmNoaWxkcmVuO2c9MDtmb3IoaD1hLmxlbmd0aDtnPGg7ZysrKWsoYVtnXSxiLGMpfX1mdW5jdGlvbiBtKGEsYixjLGQpe2Zvcih2YXIgZT0wLGY9YS5sZW5ndGg7ZTxmO2UrKyl7dmFyIGc9YVtlXSxoPWcub2JqZWN0LGs9Zy5nZW9tZXRyeSxtPXZvaWQgMD09PWQ/Zy5tYXRlcmlhbDpkLGc9Zy5ncm91cDtoLm9uQmVmb3JlUmVuZGVyKEMsYixjLGssbSxnKTtpZihjLmlzQXJyYXlDYW1lcmEmJmMuZW5hYmxlZClmb3IodmFyIG49Yy5jYW1lcmFzLHE9MCxyPW4ubGVuZ3RoO3E8cjtxKyspe3ZhciBsPW5bcV0sdD1sLmJvdW5kczsKQy5zZXRWaWV3cG9ydCh0LngqTiprYSx0LnkqZGEqa2EsdC56Kk4qa2EsdC53KmRhKmthKTtDLnNldFNjaXNzb3IodC54Kk4qa2EsdC55KmRhKmthLHQueipOKmthLHQudypkYSprYSk7Qy5zZXRTY2lzc29yVGVzdCghMCk7dShoLGIsbCxrLG0sZyl9ZWxzZSB1KGgsYixjLGssbSxnKTtoLm9uQWZ0ZXJSZW5kZXIoQyxiLGMsayxtLGcpfX1mdW5jdGlvbiB1KGEsYixjLGQsZSxmKXthLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKGMubWF0cml4V29ybGRJbnZlcnNlLGEubWF0cml4V29ybGQpO2Eubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeChhLm1vZGVsVmlld01hdHJpeCk7YS5pc0ltbWVkaWF0ZVJlbmRlck9iamVjdD8oZmEuc2V0TWF0ZXJpYWwoZSksYj1uKGMsYi5mb2csZSxhKSxiYT0iIixnKGEsYixlKSk6Qy5yZW5kZXJCdWZmZXJEaXJlY3QoYyxiLmZvZyxkLGUsYSxmKX1mdW5jdGlvbiBxKGEsYixjKXt2YXIgZD1pYS5nZXQoYSk7Yz15YS5nZXRQYXJhbWV0ZXJzKGEsCmVhLGIsUGEubnVtUGxhbmVzLFBhLm51bUludGVyc2VjdGlvbixjKTt2YXIgZz15YS5nZXRQcm9ncmFtQ29kZShhLGMpLGg9ZC5wcm9ncmFtLGs9ITA7aWYodm9pZCAwPT09aClhLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGUpO2Vsc2UgaWYoaC5jb2RlIT09ZylmKGEpO2Vsc2V7aWYodm9pZCAwIT09Yy5zaGFkZXJJRClyZXR1cm47az0hMX1rJiYoYy5zaGFkZXJJRD8oaD1hYltjLnNoYWRlcklEXSxkLl9fd2ViZ2xTaGFkZXI9e25hbWU6YS50eXBlLHVuaWZvcm1zOkhhLmNsb25lKGgudW5pZm9ybXMpLHZlcnRleFNoYWRlcjpoLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpoLmZyYWdtZW50U2hhZGVyfSk6ZC5fX3dlYmdsU2hhZGVyPXtuYW1lOmEudHlwZSx1bmlmb3JtczphLnVuaWZvcm1zLHZlcnRleFNoYWRlcjphLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjphLmZyYWdtZW50U2hhZGVyfSxhLl9fd2ViZ2xTaGFkZXI9ZC5fX3dlYmdsU2hhZGVyLGg9eWEuYWNxdWlyZVByb2dyYW0oYSwKYyxnKSxkLnByb2dyYW09aCxhLnByb2dyYW09aCk7Yz1oLmdldEF0dHJpYnV0ZXMoKTtpZihhLm1vcnBoVGFyZ2V0cylmb3IoZz1hLm51bVN1cHBvcnRlZE1vcnBoVGFyZ2V0cz0wO2c8Qy5tYXhNb3JwaFRhcmdldHM7ZysrKTA8PWNbIm1vcnBoVGFyZ2V0IitnXSYmYS5udW1TdXBwb3J0ZWRNb3JwaFRhcmdldHMrKztpZihhLm1vcnBoTm9ybWFscylmb3IoZz1hLm51bVN1cHBvcnRlZE1vcnBoTm9ybWFscz0wO2c8Qy5tYXhNb3JwaE5vcm1hbHM7ZysrKTA8PWNbIm1vcnBoTm9ybWFsIitnXSYmYS5udW1TdXBwb3J0ZWRNb3JwaE5vcm1hbHMrKztjPWQuX193ZWJnbFNoYWRlci51bmlmb3JtcztpZighYS5pc1NoYWRlck1hdGVyaWFsJiYhYS5pc1Jhd1NoYWRlck1hdGVyaWFsfHwhMD09PWEuY2xpcHBpbmcpZC5udW1DbGlwcGluZ1BsYW5lcz1QYS5udW1QbGFuZXMsZC5udW1JbnRlcnNlY3Rpb249UGEubnVtSW50ZXJzZWN0aW9uLGMuY2xpcHBpbmdQbGFuZXM9UGEudW5pZm9ybTtkLmZvZz0KYjtkLmxpZ2h0c0hhc2g9ZWEuaGFzaDthLmxpZ2h0cyYmKGMuYW1iaWVudExpZ2h0Q29sb3IudmFsdWU9ZWEuYW1iaWVudCxjLmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPWVhLmRpcmVjdGlvbmFsLGMuc3BvdExpZ2h0cy52YWx1ZT1lYS5zcG90LGMucmVjdEFyZWFMaWdodHMudmFsdWU9ZWEucmVjdEFyZWEsYy5wb2ludExpZ2h0cy52YWx1ZT1lYS5wb2ludCxjLmhlbWlzcGhlcmVMaWdodHMudmFsdWU9ZWEuaGVtaSxjLmRpcmVjdGlvbmFsU2hhZG93TWFwLnZhbHVlPWVhLmRpcmVjdGlvbmFsU2hhZG93TWFwLGMuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWU9ZWEuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsYy5zcG90U2hhZG93TWFwLnZhbHVlPWVhLnNwb3RTaGFkb3dNYXAsYy5zcG90U2hhZG93TWF0cml4LnZhbHVlPWVhLnNwb3RTaGFkb3dNYXRyaXgsYy5wb2ludFNoYWRvd01hcC52YWx1ZT1lYS5wb2ludFNoYWRvd01hcCxjLnBvaW50U2hhZG93TWF0cml4LnZhbHVlPWVhLnBvaW50U2hhZG93TWF0cml4KTsKYT1kLnByb2dyYW0uZ2V0VW5pZm9ybXMoKTthPWZiLnNlcVdpdGhWYWx1ZShhLnNlcSxjKTtkLnVuaWZvcm1zTGlzdD1hfWZ1bmN0aW9uIG4oYSxiLGMsZCl7VT0wO3ZhciBlPWlhLmdldChjKTtrZCYmKFdkfHxhIT09VCkmJlBhLnNldFN0YXRlKGMuY2xpcHBpbmdQbGFuZXMsYy5jbGlwSW50ZXJzZWN0aW9uLGMuY2xpcFNoYWRvd3MsYSxlLGE9PT1UJiZjLmlkPT09Vyk7ITE9PT1jLm5lZWRzVXBkYXRlJiYodm9pZCAwPT09ZS5wcm9ncmFtP2MubmVlZHNVcGRhdGU9ITA6Yy5mb2cmJmUuZm9nIT09Yj9jLm5lZWRzVXBkYXRlPSEwOmMubGlnaHRzJiZlLmxpZ2h0c0hhc2ghPT1lYS5oYXNoP2MubmVlZHNVcGRhdGU9ITA6dm9pZCAwPT09ZS5udW1DbGlwcGluZ1BsYW5lc3x8ZS5udW1DbGlwcGluZ1BsYW5lcz09PVBhLm51bVBsYW5lcyYmZS5udW1JbnRlcnNlY3Rpb249PT1QYS5udW1JbnRlcnNlY3Rpb258fChjLm5lZWRzVXBkYXRlPSEwKSk7Yy5uZWVkc1VwZGF0ZSYmKHEoYyxiLGQpLApjLm5lZWRzVXBkYXRlPSExKTt2YXIgZj0hMSxnPSExLGg9ITEsaz1lLnByb2dyYW0sbT1rLmdldFVuaWZvcm1zKCksbj1lLl9fd2ViZ2xTaGFkZXIudW5pZm9ybXM7ay5pZCE9PU0mJihBLnVzZVByb2dyYW0oay5wcm9ncmFtKSxNPWsuaWQsaD1nPWY9ITApO2MuaWQhPT1XJiYoVz1jLmlkLGc9ITApO2lmKGZ8fGEhPT1UKXttLnNldFZhbHVlKEEsInByb2plY3Rpb25NYXRyaXgiLGEucHJvamVjdGlvbk1hdHJpeCk7bmEubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmbS5zZXRWYWx1ZShBLCJsb2dEZXB0aEJ1ZkZDIiwyLyhNYXRoLmxvZyhhLmZhcisxKS9NYXRoLkxOMikpO2EhPT1UJiYoVD1hLGg9Zz0hMCk7aWYoYy5pc1NoYWRlck1hdGVyaWFsfHxjLmlzTWVzaFBob25nTWF0ZXJpYWx8fGMuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8Yy5lbnZNYXApZj1tLm1hcC5jYW1lcmFQb3NpdGlvbix2b2lkIDAhPT1mJiZmLnNldFZhbHVlKEEsUWEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGEubWF0cml4V29ybGQpKTsKKGMuaXNNZXNoUGhvbmdNYXRlcmlhbHx8Yy5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fGMuaXNNZXNoQmFzaWNNYXRlcmlhbHx8Yy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxjLmlzU2hhZGVyTWF0ZXJpYWx8fGMuc2tpbm5pbmcpJiZtLnNldFZhbHVlKEEsInZpZXdNYXRyaXgiLGEubWF0cml4V29ybGRJbnZlcnNlKTttLnNldFZhbHVlKEEsInRvbmVNYXBwaW5nRXhwb3N1cmUiLEMudG9uZU1hcHBpbmdFeHBvc3VyZSk7bS5zZXRWYWx1ZShBLCJ0b25lTWFwcGluZ1doaXRlUG9pbnQiLEMudG9uZU1hcHBpbmdXaGl0ZVBvaW50KX1pZihjLnNraW5uaW5nJiYobS5zZXRPcHRpb25hbChBLGQsImJpbmRNYXRyaXgiKSxtLnNldE9wdGlvbmFsKEEsZCwiYmluZE1hdHJpeEludmVyc2UiKSxhPWQuc2tlbGV0b24pKWlmKGY9YS5ib25lcyxuYS5mbG9hdFZlcnRleFRleHR1cmVzKXtpZih2b2lkIDA9PT1hLmJvbmVUZXh0dXJlKXt2YXIgZj1NYXRoLnNxcnQoNCpmLmxlbmd0aCksZj1ZLm5leHRQb3dlck9mVHdvKE1hdGguY2VpbChmKSksCmY9TWF0aC5tYXgoZiw0KSx1PW5ldyBGbG9hdDMyQXJyYXkoZipmKjQpO3Uuc2V0KGEuYm9uZU1hdHJpY2VzKTt2YXIgdD1uZXcgZWIodSxmLGYsMTAyMywxMDE1KTthLmJvbmVNYXRyaWNlcz11O2EuYm9uZVRleHR1cmU9dDthLmJvbmVUZXh0dXJlU2l6ZT1mfW0uc2V0VmFsdWUoQSwiYm9uZVRleHR1cmUiLGEuYm9uZVRleHR1cmUpO20uc2V0VmFsdWUoQSwiYm9uZVRleHR1cmVTaXplIixhLmJvbmVUZXh0dXJlU2l6ZSl9ZWxzZSBtLnNldE9wdGlvbmFsKEEsYSwiYm9uZU1hdHJpY2VzIik7aWYoZyl7Yy5saWdodHMmJihnPWgsbi5hbWJpZW50TGlnaHRDb2xvci5uZWVkc1VwZGF0ZT1nLG4uZGlyZWN0aW9uYWxMaWdodHMubmVlZHNVcGRhdGU9ZyxuLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPWcsbi5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPWcsbi5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1nLG4uaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1nKTtiJiZjLmZvZyYmKG4uZm9nQ29sb3IudmFsdWU9CmIuY29sb3IsYi5pc0ZvZz8obi5mb2dOZWFyLnZhbHVlPWIubmVhcixuLmZvZ0Zhci52YWx1ZT1iLmZhcik6Yi5pc0ZvZ0V4cDImJihuLmZvZ0RlbnNpdHkudmFsdWU9Yi5kZW5zaXR5KSk7aWYoYy5pc01lc2hCYXNpY01hdGVyaWFsfHxjLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8Yy5pc01lc2hQaG9uZ01hdGVyaWFsfHxjLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fGMuaXNNZXNoTm9ybWFsTWF0ZXJpYWx8fGMuaXNNZXNoRGVwdGhNYXRlcmlhbCl7bi5vcGFjaXR5LnZhbHVlPWMub3BhY2l0eTtuLmRpZmZ1c2UudmFsdWU9Yy5jb2xvcjtjLmVtaXNzaXZlJiZuLmVtaXNzaXZlLnZhbHVlLmNvcHkoYy5lbWlzc2l2ZSkubXVsdGlwbHlTY2FsYXIoYy5lbWlzc2l2ZUludGVuc2l0eSk7bi5tYXAudmFsdWU9Yy5tYXA7bi5zcGVjdWxhck1hcC52YWx1ZT1jLnNwZWN1bGFyTWFwO24uYWxwaGFNYXAudmFsdWU9Yy5hbHBoYU1hcDtjLmxpZ2h0TWFwJiYobi5saWdodE1hcC52YWx1ZT1jLmxpZ2h0TWFwLApuLmxpZ2h0TWFwSW50ZW5zaXR5LnZhbHVlPWMubGlnaHRNYXBJbnRlbnNpdHkpO2MuYW9NYXAmJihuLmFvTWFwLnZhbHVlPWMuYW9NYXAsbi5hb01hcEludGVuc2l0eS52YWx1ZT1jLmFvTWFwSW50ZW5zaXR5KTt2YXIgcDtjLm1hcD9wPWMubWFwOmMuc3BlY3VsYXJNYXA/cD1jLnNwZWN1bGFyTWFwOmMuZGlzcGxhY2VtZW50TWFwP3A9Yy5kaXNwbGFjZW1lbnRNYXA6Yy5ub3JtYWxNYXA/cD1jLm5vcm1hbE1hcDpjLmJ1bXBNYXA/cD1jLmJ1bXBNYXA6Yy5yb3VnaG5lc3NNYXA/cD1jLnJvdWdobmVzc01hcDpjLm1ldGFsbmVzc01hcD9wPWMubWV0YWxuZXNzTWFwOmMuYWxwaGFNYXA/cD1jLmFscGhhTWFwOmMuZW1pc3NpdmVNYXAmJihwPWMuZW1pc3NpdmVNYXApO3ZvaWQgMCE9PXAmJihwLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihwPXAudGV4dHVyZSksYj1wLm9mZnNldCxwPXAucmVwZWF0LG4ub2Zmc2V0UmVwZWF0LnZhbHVlLnNldChiLngsYi55LHAueCxwLnkpKTtuLmVudk1hcC52YWx1ZT0KYy5lbnZNYXA7bi5mbGlwRW52TWFwLnZhbHVlPWMuZW52TWFwJiZjLmVudk1hcC5pc0N1YmVUZXh0dXJlPy0xOjE7bi5yZWZsZWN0aXZpdHkudmFsdWU9Yy5yZWZsZWN0aXZpdHk7bi5yZWZyYWN0aW9uUmF0aW8udmFsdWU9Yy5yZWZyYWN0aW9uUmF0aW99Yy5pc0xpbmVCYXNpY01hdGVyaWFsPyhuLmRpZmZ1c2UudmFsdWU9Yy5jb2xvcixuLm9wYWNpdHkudmFsdWU9Yy5vcGFjaXR5KTpjLmlzTGluZURhc2hlZE1hdGVyaWFsPyhuLmRpZmZ1c2UudmFsdWU9Yy5jb2xvcixuLm9wYWNpdHkudmFsdWU9Yy5vcGFjaXR5LG4uZGFzaFNpemUudmFsdWU9Yy5kYXNoU2l6ZSxuLnRvdGFsU2l6ZS52YWx1ZT1jLmRhc2hTaXplK2MuZ2FwU2l6ZSxuLnNjYWxlLnZhbHVlPWMuc2NhbGUpOmMuaXNQb2ludHNNYXRlcmlhbD8obi5kaWZmdXNlLnZhbHVlPWMuY29sb3Isbi5vcGFjaXR5LnZhbHVlPWMub3BhY2l0eSxuLnNpemUudmFsdWU9Yy5zaXplKmthLG4uc2NhbGUudmFsdWU9LjUqZGEsbi5tYXAudmFsdWU9CmMubWFwLG51bGwhPT1jLm1hcCYmKHA9Yy5tYXAub2Zmc2V0LGM9Yy5tYXAucmVwZWF0LG4ub2Zmc2V0UmVwZWF0LnZhbHVlLnNldChwLngscC55LGMueCxjLnkpKSk6Yy5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/Yy5lbWlzc2l2ZU1hcCYmKG4uZW1pc3NpdmVNYXAudmFsdWU9Yy5lbWlzc2l2ZU1hcCk6Yy5pc01lc2hUb29uTWF0ZXJpYWw/KHIobixjKSxjLmdyYWRpZW50TWFwJiYobi5ncmFkaWVudE1hcC52YWx1ZT1jLmdyYWRpZW50TWFwKSk6Yy5pc01lc2hQaG9uZ01hdGVyaWFsP3IobixjKTpjLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/KG4uY2xlYXJDb2F0LnZhbHVlPWMuY2xlYXJDb2F0LG4uY2xlYXJDb2F0Um91Z2huZXNzLnZhbHVlPWMuY2xlYXJDb2F0Um91Z2huZXNzLGwobixjKSk6Yy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2wobixjKTpjLmlzTWVzaERlcHRoTWF0ZXJpYWw/Yy5kaXNwbGFjZW1lbnRNYXAmJihuLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1jLmRpc3BsYWNlbWVudE1hcCwKbi5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1jLmRpc3BsYWNlbWVudFNjYWxlLG4uZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1jLmRpc3BsYWNlbWVudEJpYXMpOmMuaXNNZXNoTm9ybWFsTWF0ZXJpYWwmJihjLmJ1bXBNYXAmJihuLmJ1bXBNYXAudmFsdWU9Yy5idW1wTWFwLG4uYnVtcFNjYWxlLnZhbHVlPWMuYnVtcFNjYWxlKSxjLm5vcm1hbE1hcCYmKG4ubm9ybWFsTWFwLnZhbHVlPWMubm9ybWFsTWFwLG4ubm9ybWFsU2NhbGUudmFsdWUuY29weShjLm5vcm1hbFNjYWxlKSksYy5kaXNwbGFjZW1lbnRNYXAmJihuLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1jLmRpc3BsYWNlbWVudE1hcCxuLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWMuZGlzcGxhY2VtZW50U2NhbGUsbi5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWMuZGlzcGxhY2VtZW50QmlhcykpO3ZvaWQgMCE9PW4ubHRjTWF0JiYobi5sdGNNYXQudmFsdWU9Vi5MVENfTUFUX1RFWFRVUkUpO3ZvaWQgMCE9PW4ubHRjTWFnJiYobi5sdGNNYWcudmFsdWU9ClYuTFRDX01BR19URVhUVVJFKTtmYi51cGxvYWQoQSxlLnVuaWZvcm1zTGlzdCxuLEMpfW0uc2V0VmFsdWUoQSwibW9kZWxWaWV3TWF0cml4IixkLm1vZGVsVmlld01hdHJpeCk7bS5zZXRWYWx1ZShBLCJub3JtYWxNYXRyaXgiLGQubm9ybWFsTWF0cml4KTttLnNldFZhbHVlKEEsIm1vZGVsTWF0cml4IixkLm1hdHJpeFdvcmxkKTtyZXR1cm4ga31mdW5jdGlvbiByKGEsYil7YS5zcGVjdWxhci52YWx1ZT1iLnNwZWN1bGFyO2Euc2hpbmluZXNzLnZhbHVlPU1hdGgubWF4KGIuc2hpbmluZXNzLDFFLTQpO2IuZW1pc3NpdmVNYXAmJihhLmVtaXNzaXZlTWFwLnZhbHVlPWIuZW1pc3NpdmVNYXApO2IuYnVtcE1hcCYmKGEuYnVtcE1hcC52YWx1ZT1iLmJ1bXBNYXAsYS5idW1wU2NhbGUudmFsdWU9Yi5idW1wU2NhbGUpO2Iubm9ybWFsTWFwJiYoYS5ub3JtYWxNYXAudmFsdWU9Yi5ub3JtYWxNYXAsYS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGIubm9ybWFsU2NhbGUpKTtiLmRpc3BsYWNlbWVudE1hcCYmCihhLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1iLmRpc3BsYWNlbWVudE1hcCxhLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWIuZGlzcGxhY2VtZW50U2NhbGUsYS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWIuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gbChhLGIpe2Eucm91Z2huZXNzLnZhbHVlPWIucm91Z2huZXNzO2EubWV0YWxuZXNzLnZhbHVlPWIubWV0YWxuZXNzO2Iucm91Z2huZXNzTWFwJiYoYS5yb3VnaG5lc3NNYXAudmFsdWU9Yi5yb3VnaG5lc3NNYXApO2IubWV0YWxuZXNzTWFwJiYoYS5tZXRhbG5lc3NNYXAudmFsdWU9Yi5tZXRhbG5lc3NNYXApO2IuZW1pc3NpdmVNYXAmJihhLmVtaXNzaXZlTWFwLnZhbHVlPWIuZW1pc3NpdmVNYXApO2IuYnVtcE1hcCYmKGEuYnVtcE1hcC52YWx1ZT1iLmJ1bXBNYXAsYS5idW1wU2NhbGUudmFsdWU9Yi5idW1wU2NhbGUpO2Iubm9ybWFsTWFwJiYoYS5ub3JtYWxNYXAudmFsdWU9Yi5ub3JtYWxNYXAsYS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGIubm9ybWFsU2NhbGUpKTsKYi5kaXNwbGFjZW1lbnRNYXAmJihhLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1iLmRpc3BsYWNlbWVudE1hcCxhLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWIuZGlzcGxhY2VtZW50U2NhbGUsYS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWIuZGlzcGxhY2VtZW50Qmlhcyk7Yi5lbnZNYXAmJihhLmVudk1hcEludGVuc2l0eS52YWx1ZT1iLmVudk1hcEludGVuc2l0eSl9ZnVuY3Rpb24gdChhLGIpe3ZhciBjLGQsZSxmLGc9MCxoPTAsaz0wLG0sbix1LHE9Yi5tYXRyaXhXb3JsZEludmVyc2UsbD0wLHI9MCx0PTAsej0wLHA9MDtjPTA7Zm9yKGQ9YS5sZW5ndGg7YzxkO2MrKylpZihlPWFbY10sZj1lLmNvbG9yLG09ZS5pbnRlbnNpdHksbj1lLmRpc3RhbmNlLHU9ZS5zaGFkb3cmJmUuc2hhZG93Lm1hcD9lLnNoYWRvdy5tYXAudGV4dHVyZTpudWxsLGUuaXNBbWJpZW50TGlnaHQpZys9Zi5yKm0saCs9Zi5nKm0says9Zi5iKm07ZWxzZSBpZihlLmlzRGlyZWN0aW9uYWxMaWdodCl7dmFyIHY9CkJhLmdldChlKTt2LmNvbG9yLmNvcHkoZS5jb2xvcikubXVsdGlwbHlTY2FsYXIoZS5pbnRlbnNpdHkpO3YuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihlLm1hdHJpeFdvcmxkKTtRYS5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS50YXJnZXQubWF0cml4V29ybGQpO3YuZGlyZWN0aW9uLnN1YihRYSk7di5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHEpO2lmKHYuc2hhZG93PWUuY2FzdFNoYWRvdylmPWUuc2hhZG93LHYuc2hhZG93Qmlhcz1mLmJpYXMsdi5zaGFkb3dSYWRpdXM9Zi5yYWRpdXMsdi5zaGFkb3dNYXBTaXplPWYubWFwU2l6ZTtlYS5kaXJlY3Rpb25hbFNoYWRvd01hcFtsXT11O2VhLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4W2xdPWUuc2hhZG93Lm1hdHJpeDtlYS5kaXJlY3Rpb25hbFtsXT12O2wrK31lbHNlIGlmKGUuaXNTcG90TGlnaHQpe3Y9QmEuZ2V0KGUpO3YucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUubWF0cml4V29ybGQpO3YucG9zaXRpb24uYXBwbHlNYXRyaXg0KHEpOwp2LmNvbG9yLmNvcHkoZikubXVsdGlwbHlTY2FsYXIobSk7di5kaXN0YW5jZT1uO3YuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihlLm1hdHJpeFdvcmxkKTtRYS5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS50YXJnZXQubWF0cml4V29ybGQpO3YuZGlyZWN0aW9uLnN1YihRYSk7di5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHEpO3YuY29uZUNvcz1NYXRoLmNvcyhlLmFuZ2xlKTt2LnBlbnVtYnJhQ29zPU1hdGguY29zKGUuYW5nbGUqKDEtZS5wZW51bWJyYSkpO3YuZGVjYXk9MD09PWUuZGlzdGFuY2U/MDplLmRlY2F5O2lmKHYuc2hhZG93PWUuY2FzdFNoYWRvdylmPWUuc2hhZG93LHYuc2hhZG93Qmlhcz1mLmJpYXMsdi5zaGFkb3dSYWRpdXM9Zi5yYWRpdXMsdi5zaGFkb3dNYXBTaXplPWYubWFwU2l6ZTtlYS5zcG90U2hhZG93TWFwW3RdPXU7ZWEuc3BvdFNoYWRvd01hdHJpeFt0XT1lLnNoYWRvdy5tYXRyaXg7ZWEuc3BvdFt0XT12O3QrK31lbHNlIGlmKGUuaXNSZWN0QXJlYUxpZ2h0KXY9CkJhLmdldChlKSx2LmNvbG9yLmNvcHkoZikubXVsdGlwbHlTY2FsYXIobS8oZS53aWR0aCplLmhlaWdodCkpLHYucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUubWF0cml4V29ybGQpLHYucG9zaXRpb24uYXBwbHlNYXRyaXg0KHEpLHJhLmlkZW50aXR5KCkscWEuY29weShlLm1hdHJpeFdvcmxkKSxxYS5wcmVtdWx0aXBseShxKSxyYS5leHRyYWN0Um90YXRpb24ocWEpLHYuaGFsZldpZHRoLnNldCguNSplLndpZHRoLDAsMCksdi5oYWxmSGVpZ2h0LnNldCgwLC41KmUuaGVpZ2h0LDApLHYuaGFsZldpZHRoLmFwcGx5TWF0cml4NChyYSksdi5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChyYSksZWEucmVjdEFyZWFbel09dix6Kys7ZWxzZSBpZihlLmlzUG9pbnRMaWdodCl7dj1CYS5nZXQoZSk7di5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCk7di5wb3NpdGlvbi5hcHBseU1hdHJpeDQocSk7di5jb2xvci5jb3B5KGUuY29sb3IpLm11bHRpcGx5U2NhbGFyKGUuaW50ZW5zaXR5KTsKdi5kaXN0YW5jZT1lLmRpc3RhbmNlO3YuZGVjYXk9MD09PWUuZGlzdGFuY2U/MDplLmRlY2F5O2lmKHYuc2hhZG93PWUuY2FzdFNoYWRvdylmPWUuc2hhZG93LHYuc2hhZG93Qmlhcz1mLmJpYXMsdi5zaGFkb3dSYWRpdXM9Zi5yYWRpdXMsdi5zaGFkb3dNYXBTaXplPWYubWFwU2l6ZTtlYS5wb2ludFNoYWRvd01hcFtyXT11O2VhLnBvaW50U2hhZG93TWF0cml4W3JdPWUuc2hhZG93Lm1hdHJpeDtlYS5wb2ludFtyXT12O3IrK31lbHNlIGUuaXNIZW1pc3BoZXJlTGlnaHQmJih2PUJhLmdldChlKSx2LmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCksdi5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHEpLHYuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLHYuc2t5Q29sb3IuY29weShlLmNvbG9yKS5tdWx0aXBseVNjYWxhcihtKSx2Lmdyb3VuZENvbG9yLmNvcHkoZS5ncm91bmRDb2xvcikubXVsdGlwbHlTY2FsYXIobSksZWEuaGVtaVtwXT12LHArKyk7CmVhLmFtYmllbnRbMF09ZztlYS5hbWJpZW50WzFdPWg7ZWEuYW1iaWVudFsyXT1rO2VhLmRpcmVjdGlvbmFsLmxlbmd0aD1sO2VhLnNwb3QubGVuZ3RoPXQ7ZWEucmVjdEFyZWEubGVuZ3RoPXo7ZWEucG9pbnQubGVuZ3RoPXI7ZWEuaGVtaS5sZW5ndGg9cDtlYS5oYXNoPWwrIiwiK3IrIiwiK3QrIiwiK3orIiwiK3ArIiwiK2VhLnNoYWRvd3MubGVuZ3RofWZ1bmN0aW9uIHkoYSl7dmFyIGI7aWYoMUUzPT09YSlyZXR1cm4gQS5SRVBFQVQ7aWYoMTAwMT09PWEpcmV0dXJuIEEuQ0xBTVBfVE9fRURHRTtpZigxMDAyPT09YSlyZXR1cm4gQS5NSVJST1JFRF9SRVBFQVQ7aWYoMTAwMz09PWEpcmV0dXJuIEEuTkVBUkVTVDtpZigxMDA0PT09YSlyZXR1cm4gQS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUO2lmKDEwMDU9PT1hKXJldHVybiBBLk5FQVJFU1RfTUlQTUFQX0xJTkVBUjtpZigxMDA2PT09YSlyZXR1cm4gQS5MSU5FQVI7aWYoMTAwNz09PWEpcmV0dXJuIEEuTElORUFSX01JUE1BUF9ORUFSRVNUOwppZigxMDA4PT09YSlyZXR1cm4gQS5MSU5FQVJfTUlQTUFQX0xJTkVBUjtpZigxMDA5PT09YSlyZXR1cm4gQS5VTlNJR05FRF9CWVRFO2lmKDEwMTc9PT1hKXJldHVybiBBLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ7aWYoMTAxOD09PWEpcmV0dXJuIEEuVU5TSUdORURfU0hPUlRfNV81XzVfMTtpZigxMDE5PT09YSlyZXR1cm4gQS5VTlNJR05FRF9TSE9SVF81XzZfNTtpZigxMDEwPT09YSlyZXR1cm4gQS5CWVRFO2lmKDEwMTE9PT1hKXJldHVybiBBLlNIT1JUO2lmKDEwMTI9PT1hKXJldHVybiBBLlVOU0lHTkVEX1NIT1JUO2lmKDEwMTM9PT1hKXJldHVybiBBLklOVDtpZigxMDE0PT09YSlyZXR1cm4gQS5VTlNJR05FRF9JTlQ7aWYoMTAxNT09PWEpcmV0dXJuIEEuRkxPQVQ7aWYoMTAxNj09PWEmJihiPXBhLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLG51bGwhPT1iKSlyZXR1cm4gYi5IQUxGX0ZMT0FUX09FUztpZigxMDIxPT09YSlyZXR1cm4gQS5BTFBIQTtpZigxMDIyPT09CmEpcmV0dXJuIEEuUkdCO2lmKDEwMjM9PT1hKXJldHVybiBBLlJHQkE7aWYoMTAyND09PWEpcmV0dXJuIEEuTFVNSU5BTkNFO2lmKDEwMjU9PT1hKXJldHVybiBBLkxVTUlOQU5DRV9BTFBIQTtpZigxMDI2PT09YSlyZXR1cm4gQS5ERVBUSF9DT01QT05FTlQ7aWYoMTAyNz09PWEpcmV0dXJuIEEuREVQVEhfU1RFTkNJTDtpZigxMDA9PT1hKXJldHVybiBBLkZVTkNfQUREO2lmKDEwMT09PWEpcmV0dXJuIEEuRlVOQ19TVUJUUkFDVDtpZigxMDI9PT1hKXJldHVybiBBLkZVTkNfUkVWRVJTRV9TVUJUUkFDVDtpZigyMDA9PT1hKXJldHVybiBBLlpFUk87aWYoMjAxPT09YSlyZXR1cm4gQS5PTkU7aWYoMjAyPT09YSlyZXR1cm4gQS5TUkNfQ09MT1I7aWYoMjAzPT09YSlyZXR1cm4gQS5PTkVfTUlOVVNfU1JDX0NPTE9SO2lmKDIwND09PWEpcmV0dXJuIEEuU1JDX0FMUEhBO2lmKDIwNT09PWEpcmV0dXJuIEEuT05FX01JTlVTX1NSQ19BTFBIQTtpZigyMDY9PT1hKXJldHVybiBBLkRTVF9BTFBIQTsKaWYoMjA3PT09YSlyZXR1cm4gQS5PTkVfTUlOVVNfRFNUX0FMUEhBO2lmKDIwOD09PWEpcmV0dXJuIEEuRFNUX0NPTE9SO2lmKDIwOT09PWEpcmV0dXJuIEEuT05FX01JTlVTX0RTVF9DT0xPUjtpZigyMTA9PT1hKXJldHVybiBBLlNSQ19BTFBIQV9TQVRVUkFURTtpZigyMDAxPT09YXx8MjAwMj09PWF8fDIwMDM9PT1hfHwyMDA0PT09YSlpZihiPXBhLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKSxudWxsIT09Yil7aWYoMjAwMT09PWEpcmV0dXJuIGIuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZigyMDAyPT09YSlyZXR1cm4gYi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDtpZigyMDAzPT09YSlyZXR1cm4gYi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtpZigyMDA0PT09YSlyZXR1cm4gYi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1pZigyMTAwPT09YXx8MjEwMT09PWF8fDIxMDI9PT1hfHwyMTAzPT09YSlpZihiPXBhLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIiksCm51bGwhPT1iKXtpZigyMTAwPT09YSlyZXR1cm4gYi5DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HO2lmKDIxMDE9PT1hKXJldHVybiBiLkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc7aWYoMjEwMj09PWEpcmV0dXJuIGIuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYoMjEwMz09PWEpcmV0dXJuIGIuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUd9aWYoMjE1MT09PWEmJihiPXBhLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxudWxsIT09YikpcmV0dXJuIGIuQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDtpZigxMDM9PT1hfHwxMDQ9PT1hKWlmKGI9cGEuZ2V0KCJFWFRfYmxlbmRfbWlubWF4IiksbnVsbCE9PWIpe2lmKDEwMz09PWEpcmV0dXJuIGIuTUlOX0VYVDtpZigxMDQ9PT1hKXJldHVybiBiLk1BWF9FWFR9cmV0dXJuIDEwMjA9PT1hJiYoYj1wYS5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxudWxsIT09Yik/CmIuVU5TSUdORURfSU5UXzI0XzhfV0VCR0w6MH1jb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlciIsIjg1Iik7YT1hfHx7fTt2YXIgeD12b2lkIDAhPT1hLmNhbnZhcz9hLmNhbnZhczpkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJjYW52YXMiKSx2PXZvaWQgMCE9PWEuY29udGV4dD9hLmNvbnRleHQ6bnVsbCxHPXZvaWQgMCE9PWEuYWxwaGE/YS5hbHBoYTohMSx3PXZvaWQgMCE9PWEuZGVwdGg/YS5kZXB0aDohMCxPPXZvaWQgMCE9PWEuc3RlbmNpbD9hLnN0ZW5jaWw6ITAsUz12b2lkIDAhPT1hLmFudGlhbGlhcz9hLmFudGlhbGlhczohMSxFPXZvaWQgMCE9PWEucHJlbXVsdGlwbGllZEFscGhhP2EucHJlbXVsdGlwbGllZEFscGhhOiEwLEY9dm9pZCAwIT09YS5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI/YS5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEsYWE9W10sUj1udWxsLGNhPW5ldyBGbG9hdDMyQXJyYXkoOCksRD1bXSwKQj1bXTt0aGlzLmRvbUVsZW1lbnQ9eDt0aGlzLmNvbnRleHQ9bnVsbDt0aGlzLnNvcnRPYmplY3RzPXRoaXMuYXV0b0NsZWFyU3RlbmNpbD10aGlzLmF1dG9DbGVhckRlcHRoPXRoaXMuYXV0b0NsZWFyQ29sb3I9dGhpcy5hdXRvQ2xlYXI9ITA7dGhpcy5jbGlwcGluZ1BsYW5lcz1bXTt0aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkPSExO3RoaXMuZ2FtbWFGYWN0b3I9Mjt0aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPXRoaXMuZ2FtbWFPdXRwdXQ9dGhpcy5nYW1tYUlucHV0PSExO3RoaXMudG9uZU1hcHBpbmdXaGl0ZVBvaW50PXRoaXMudG9uZU1hcHBpbmdFeHBvc3VyZT10aGlzLnRvbmVNYXBwaW5nPTE7dGhpcy5tYXhNb3JwaFRhcmdldHM9ODt0aGlzLm1heE1vcnBoTm9ybWFscz00O3ZhciBDPXRoaXMsTT1udWxsLFA9bnVsbCxLPW51bGwsVz0tMSxiYT0iIixUPW51bGwsUT1uZXcgZ2EsTD1udWxsLFo9bmV3IGdhLFU9MCxJYT1uZXcgSCgwKSxYPTAsTj14LndpZHRoLGRhPXguaGVpZ2h0LAprYT0xLGhhPW5ldyBnYSgwLDAsTixkYSksUGU9ITEsemM9bmV3IGdhKDAsMCxOLGRhKSxtYT1uZXcgamQsUGE9bmV3IGlnLGtkPSExLFdkPSExLGxkPW5ldyBKLFFhPW5ldyBwLHFhPW5ldyBKLHJhPW5ldyBKLGVhPXtoYXNoOiIiLGFtYmllbnQ6WzAsMCwwXSxkaXJlY3Rpb25hbDpbXSxkaXJlY3Rpb25hbFNoYWRvd01hcDpbXSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDpbXSxzcG90OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxwb2ludDpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdLHNoYWRvd3M6W119LHZhPXtnZW9tZXRyaWVzOjAsdGV4dHVyZXM6MH0sb2E9e2ZyYW1lOjAsY2FsbHM6MCx2ZXJ0aWNlczowLGZhY2VzOjAscG9pbnRzOjB9O3RoaXMuaW5mbz17cmVuZGVyOm9hLG1lbW9yeTp2YSxwcm9ncmFtczpudWxsfTt2YXIgQTt0cnl7Rz17YWxwaGE6RyxkZXB0aDp3LHN0ZW5jaWw6TywKYW50aWFsaWFzOlMscHJlbXVsdGlwbGllZEFscGhhOkUscHJlc2VydmVEcmF3aW5nQnVmZmVyOkZ9O0E9dnx8eC5nZXRDb250ZXh0KCJ3ZWJnbCIsRyl8fHguZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixHKTtpZihudWxsPT09QSl7aWYobnVsbCE9PXguZ2V0Q29udGV4dCgid2ViZ2wiKSl0aHJvdyJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLiI7dGhyb3ciRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4iO312b2lkIDA9PT1BLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCYmKEEuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJue3JhbmdlTWluOjEscmFuZ2VNYXg6MSxwcmVjaXNpb246MX19KTt4LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGQsITEpfWNhdGNoKGpnKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK2pnKX12YXIgcGE9bmV3IGhnKEEpOwpwYS5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKTtwYS5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iik7cGEuZ2V0KCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKTtwYS5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTtwYS5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik7cGEuZ2V0KCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTtwYS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKTtwYS5nZXQoIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKSYmKEkuTWF4SW5kZXg9NDI5NDk2NzI5Nik7dmFyIG5hPW5ldyBnZyhBLHBhLGEpLGZhPW5ldyBmZyhBLHBhLHkpLGlhPW5ldyBlZyxzYT1uZXcgZGcoQSxwYSxmYSxpYSxuYSx5LHZhKSxBYT1uZXcgTWYoQSksRGE9bmV3IFRmKEEsQWEsdmEpLHdhPW5ldyBWZihBLERhLG9hKSx5YT1uZXcgY2codGhpcyxuYSksQmE9bmV3IFVmLEdhPW5ldyBRZjt0aGlzLmluZm8ucHJvZ3JhbXM9eWEucHJvZ3JhbXM7dmFyIEthPW5ldyBTZihBLApwYSxvYSksTGE9bmV3IFJmKEEscGEsb2EpLEZhLHphLHRhLHVhO2IoKTt0aGlzLmNvbnRleHQ9QTt0aGlzLmNhcGFiaWxpdGllcz1uYTt0aGlzLmV4dGVuc2lvbnM9cGE7dGhpcy5wcm9wZXJ0aWVzPWlhO3RoaXMuc3RhdGU9ZmE7dmFyIEphPW5ldyBKZSh0aGlzLGVhLHdhLG5hKTt0aGlzLnNoYWRvd01hcD1KYTt2YXIgTWE9bmV3IEpmKHRoaXMsRCksT2E9bmV3IElmKHRoaXMsQik7dGhpcy5nZXRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIEF9O3RoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gQS5nZXRDb250ZXh0QXR0cmlidXRlcygpfTt0aGlzLmZvcmNlQ29udGV4dExvc3M9ZnVuY3Rpb24oKXt2YXIgYT1wYS5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO2EmJmEubG9zZUNvbnRleHQoKX07dGhpcy5nZXRNYXhBbmlzb3Ryb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG5hLmdldE1heEFuaXNvdHJvcHkoKX07dGhpcy5nZXRQcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gbmEucHJlY2lzaW9ufTsKdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIGthfTt0aGlzLnNldFBpeGVsUmF0aW89ZnVuY3Rpb24oYSl7dm9pZCAwIT09YSYmKGthPWEsdGhpcy5zZXRTaXplKHpjLnosemMudywhMSkpfTt0aGlzLmdldFNpemU9ZnVuY3Rpb24oKXtyZXR1cm57d2lkdGg6TixoZWlnaHQ6ZGF9fTt0aGlzLnNldFNpemU9ZnVuY3Rpb24oYSxiLGMpe049YTtkYT1iO3gud2lkdGg9YSprYTt4LmhlaWdodD1iKmthOyExIT09YyYmKHguc3R5bGUud2lkdGg9YSsicHgiLHguc3R5bGUuaGVpZ2h0PWIrInB4Iik7dGhpcy5zZXRWaWV3cG9ydCgwLDAsYSxiKX07dGhpcy5zZXRWaWV3cG9ydD1mdW5jdGlvbihhLGIsYyxkKXtmYS52aWV3cG9ydCh6Yy5zZXQoYSxiLGMsZCkpfTt0aGlzLnNldFNjaXNzb3I9ZnVuY3Rpb24oYSxiLGMsZCl7ZmEuc2Npc3NvcihoYS5zZXQoYSxiLGMsZCkpfTt0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKGEpe2ZhLnNldFNjaXNzb3JUZXN0KFBlPWEpfTt0aGlzLmdldENsZWFyQ29sb3I9CmZ1bmN0aW9uKCl7cmV0dXJuIElhfTt0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oYSxiKXtJYS5zZXQoYSk7WD12b2lkIDAhPT1iP2I6MTtmYS5idWZmZXJzLmNvbG9yLnNldENsZWFyKElhLnIsSWEuZyxJYS5iLFgsRSl9O3RoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBYfTt0aGlzLnNldENsZWFyQWxwaGE9ZnVuY3Rpb24oYSl7WD1hO2ZhLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoSWEucixJYS5nLElhLmIsWCxFKX07dGhpcy5jbGVhcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9MDtpZih2b2lkIDA9PT1hfHxhKWR8PUEuQ09MT1JfQlVGRkVSX0JJVDtpZih2b2lkIDA9PT1ifHxiKWR8PUEuREVQVEhfQlVGRkVSX0JJVDtpZih2b2lkIDA9PT1jfHxjKWR8PUEuU1RFTkNJTF9CVUZGRVJfQklUO0EuY2xlYXIoZCl9O3RoaXMuY2xlYXJDb2xvcj1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITAsITEsITEpfTt0aGlzLmNsZWFyRGVwdGg9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLAohMCwhMSl9O3RoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMSwhMCl9O3RoaXMuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24oYSxiLGMsZCl7dGhpcy5zZXRSZW5kZXJUYXJnZXQoYSk7dGhpcy5jbGVhcihiLGMsZCl9O3RoaXMucmVzZXRHTFN0YXRlPWM7dGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7eC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixkLCExKTtHYS5kaXNwb3NlKCl9O3RoaXMucmVuZGVyQnVmZmVySW1tZWRpYXRlPWZ1bmN0aW9uKGEsYixjKXtmYS5pbml0QXR0cmlidXRlcygpO3ZhciBkPWlhLmdldChhKTthLmhhc1Bvc2l0aW9ucyYmIWQucG9zaXRpb24mJihkLnBvc2l0aW9uPUEuY3JlYXRlQnVmZmVyKCkpO2EuaGFzTm9ybWFscyYmIWQubm9ybWFsJiYoZC5ub3JtYWw9QS5jcmVhdGVCdWZmZXIoKSk7YS5oYXNVdnMmJiFkLnV2JiYoZC51dj1BLmNyZWF0ZUJ1ZmZlcigpKTthLmhhc0NvbG9ycyYmIWQuY29sb3ImJihkLmNvbG9yPQpBLmNyZWF0ZUJ1ZmZlcigpKTtiPWIuZ2V0QXR0cmlidXRlcygpO2EuaGFzUG9zaXRpb25zJiYoQS5iaW5kQnVmZmVyKEEuQVJSQVlfQlVGRkVSLGQucG9zaXRpb24pLEEuYnVmZmVyRGF0YShBLkFSUkFZX0JVRkZFUixhLnBvc2l0aW9uQXJyYXksQS5EWU5BTUlDX0RSQVcpLGZhLmVuYWJsZUF0dHJpYnV0ZShiLnBvc2l0aW9uKSxBLnZlcnRleEF0dHJpYlBvaW50ZXIoYi5wb3NpdGlvbiwzLEEuRkxPQVQsITEsMCwwKSk7aWYoYS5oYXNOb3JtYWxzKXtBLmJpbmRCdWZmZXIoQS5BUlJBWV9CVUZGRVIsZC5ub3JtYWwpO2lmKCFjLmlzTWVzaFBob25nTWF0ZXJpYWwmJiFjLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwmJiFjLmlzTWVzaE5vcm1hbE1hdGVyaWFsJiYxPT09Yy5zaGFkaW5nKWZvcih2YXIgZT0wLGY9MyphLmNvdW50O2U8ZjtlKz05KXt2YXIgZz1hLm5vcm1hbEFycmF5LGg9KGdbZSswXStnW2UrM10rZ1tlKzZdKS8zLGs9KGdbZSsxXStnW2UrNF0rZ1tlKzddKS8zLG09KGdbZSsKMl0rZ1tlKzVdK2dbZSs4XSkvMztnW2UrMF09aDtnW2UrMV09aztnW2UrMl09bTtnW2UrM109aDtnW2UrNF09aztnW2UrNV09bTtnW2UrNl09aDtnW2UrN109aztnW2UrOF09bX1BLmJ1ZmZlckRhdGEoQS5BUlJBWV9CVUZGRVIsYS5ub3JtYWxBcnJheSxBLkRZTkFNSUNfRFJBVyk7ZmEuZW5hYmxlQXR0cmlidXRlKGIubm9ybWFsKTtBLnZlcnRleEF0dHJpYlBvaW50ZXIoYi5ub3JtYWwsMyxBLkZMT0FULCExLDAsMCl9YS5oYXNVdnMmJmMubWFwJiYoQS5iaW5kQnVmZmVyKEEuQVJSQVlfQlVGRkVSLGQudXYpLEEuYnVmZmVyRGF0YShBLkFSUkFZX0JVRkZFUixhLnV2QXJyYXksQS5EWU5BTUlDX0RSQVcpLGZhLmVuYWJsZUF0dHJpYnV0ZShiLnV2KSxBLnZlcnRleEF0dHJpYlBvaW50ZXIoQWEudXYsMixBLkZMT0FULCExLDAsMCkpO2EuaGFzQ29sb3JzJiYwIT09Yy52ZXJ0ZXhDb2xvcnMmJihBLmJpbmRCdWZmZXIoQS5BUlJBWV9CVUZGRVIsZC5jb2xvciksQS5idWZmZXJEYXRhKEEuQVJSQVlfQlVGRkVSLAphLmNvbG9yQXJyYXksQS5EWU5BTUlDX0RSQVcpLGZhLmVuYWJsZUF0dHJpYnV0ZShiLmNvbG9yKSxBLnZlcnRleEF0dHJpYlBvaW50ZXIoYi5jb2xvciwzLEEuRkxPQVQsITEsMCwwKSk7ZmEuZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXMoKTtBLmRyYXdBcnJheXMoQS5UUklBTkdMRVMsMCxhLmNvdW50KTthLmNvdW50PTB9O3RoaXMucmVuZGVyQnVmZmVyRGlyZWN0PWZ1bmN0aW9uKGEsYixjLGQsZSxmKXtmYS5zZXRNYXRlcmlhbChkKTt2YXIgZz1uKGEsYixkLGUpO2E9Yy5pZCsiXyIrZy5pZCsiXyIrKCEwPT09ZC53aXJlZnJhbWUpO3ZhciBrPSExO2EhPT1iYSYmKGJhPWEsaz0hMCk7Yj1lLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih2b2lkIDAhPT1iKXt2YXIgbT1bXTthPTA7Zm9yKHZhciB1PWIubGVuZ3RoO2E8dTthKyspaz1iW2FdLG0ucHVzaChbayxhXSk7bS5zb3J0KGgpOzg8bS5sZW5ndGgmJihtLmxlbmd0aD04KTt2YXIgcT1jLm1vcnBoQXR0cmlidXRlczthPTA7Zm9yKHU9Cm0ubGVuZ3RoO2E8dTthKyspaz1tW2FdLGNhW2FdPWtbMF0sMCE9PWtbMF0/KGI9a1sxXSwhMD09PWQubW9ycGhUYXJnZXRzJiZxLnBvc2l0aW9uJiZjLmFkZEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK2EscS5wb3NpdGlvbltiXSksITA9PT1kLm1vcnBoTm9ybWFscyYmcS5ub3JtYWwmJmMuYWRkQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrYSxxLm5vcm1hbFtiXSkpOighMD09PWQubW9ycGhUYXJnZXRzJiZjLnJlbW92ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK2EpLCEwPT09ZC5tb3JwaE5vcm1hbHMmJmMucmVtb3ZlQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrYSkpO2E9bS5sZW5ndGg7Zm9yKGI9Y2EubGVuZ3RoO2E8YjthKyspY2FbYV09MDtnLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUoQSwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixjYSk7az0hMH1iPWMuaW5kZXg7dT1jLmF0dHJpYnV0ZXMucG9zaXRpb247bT0xOyEwPT09ZC53aXJlZnJhbWUmJihiPURhLmdldFdpcmVmcmFtZUF0dHJpYnV0ZShjKSwKbT0yKTthPUthO251bGwhPT1iJiYoYT1MYSxhLnNldEluZGV4KGIpKTtpZihrKXtrPXZvaWQgMDtpZihjJiZjLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkmJm51bGw9PT1wYS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSljb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnNldHVwVmVydGV4QXR0cmlidXRlczogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7ZWxzZXt2b2lkIDA9PT1rJiYoaz0wKTtmYS5pbml0QXR0cmlidXRlcygpO3ZhciBxPWMuYXR0cmlidXRlcyxnPWcuZ2V0QXR0cmlidXRlcygpLGw9ZC5kZWZhdWx0QXR0cmlidXRlVmFsdWVzLHI7Zm9yKHIgaW4gZyl7dmFyIHQ9Z1tyXTtpZigwPD10KXt2YXIgdj1xW3JdO2lmKHZvaWQgMCE9PXYpe3ZhciB6PXYubm9ybWFsaXplZCxwPXYuaXRlbVNpemUsdz1BYS5nZXQodiksCng9dy5idWZmZXIseT13LnR5cGUsdz13LmJ5dGVzUGVyRWxlbWVudDtpZih2LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe3ZhciBHPXYuZGF0YSxPPUcuc3RyaWRlLHY9di5vZmZzZXQ7RyYmRy5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPyhmYS5lbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yKHQsRy5tZXNoUGVyQXR0cmlidXRlKSx2b2lkIDA9PT1jLm1heEluc3RhbmNlZENvdW50JiYoYy5tYXhJbnN0YW5jZWRDb3VudD1HLm1lc2hQZXJBdHRyaWJ1dGUqRy5jb3VudCkpOmZhLmVuYWJsZUF0dHJpYnV0ZSh0KTtBLmJpbmRCdWZmZXIoQS5BUlJBWV9CVUZGRVIseCk7QS52ZXJ0ZXhBdHRyaWJQb2ludGVyKHQscCx5LHosTyp3LChrKk8rdikqdyl9ZWxzZSB2LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPyhmYS5lbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yKHQsdi5tZXNoUGVyQXR0cmlidXRlKSx2b2lkIDA9PT1jLm1heEluc3RhbmNlZENvdW50JiYoYy5tYXhJbnN0YW5jZWRDb3VudD0Kdi5tZXNoUGVyQXR0cmlidXRlKnYuY291bnQpKTpmYS5lbmFibGVBdHRyaWJ1dGUodCksQS5iaW5kQnVmZmVyKEEuQVJSQVlfQlVGRkVSLHgpLEEudmVydGV4QXR0cmliUG9pbnRlcih0LHAseSx6LDAsaypwKncpfWVsc2UgaWYodm9pZCAwIT09bCYmKHo9bFtyXSx2b2lkIDAhPT16KSlzd2l0Y2goei5sZW5ndGgpe2Nhc2UgMjpBLnZlcnRleEF0dHJpYjJmdih0LHopO2JyZWFrO2Nhc2UgMzpBLnZlcnRleEF0dHJpYjNmdih0LHopO2JyZWFrO2Nhc2UgNDpBLnZlcnRleEF0dHJpYjRmdih0LHopO2JyZWFrO2RlZmF1bHQ6QS52ZXJ0ZXhBdHRyaWIxZnYodCx6KX19fWZhLmRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzKCl9bnVsbCE9PWImJkEuYmluZEJ1ZmZlcihBLkVMRU1FTlRfQVJSQVlfQlVGRkVSLEFhLmdldChiKS5idWZmZXIpfXI9MDtudWxsIT09Yj9yPWIuY291bnQ6dm9pZCAwIT09dSYmKHI9dS5jb3VudCk7dT1jLmRyYXdSYW5nZS5zdGFydCptO2s9bnVsbCE9PWY/Zi5zdGFydCptOgowO2I9TWF0aC5tYXgodSxrKTtmPU1hdGgubWF4KDAsTWF0aC5taW4ocix1K2MuZHJhd1JhbmdlLmNvdW50Km0saysobnVsbCE9PWY/Zi5jb3VudCptOkluZmluaXR5KSktMS1iKzEpO2lmKDAhPT1mKXtpZihlLmlzTWVzaClpZighMD09PWQud2lyZWZyYW1lKWZhLnNldExpbmVXaWR0aChkLndpcmVmcmFtZUxpbmV3aWR0aCoobnVsbD09PVA/a2E6MSkpLGEuc2V0TW9kZShBLkxJTkVTKTtlbHNlIHN3aXRjaChlLmRyYXdNb2RlKXtjYXNlIDA6YS5zZXRNb2RlKEEuVFJJQU5HTEVTKTticmVhaztjYXNlIDE6YS5zZXRNb2RlKEEuVFJJQU5HTEVfU1RSSVApO2JyZWFrO2Nhc2UgMjphLnNldE1vZGUoQS5UUklBTkdMRV9GQU4pfWVsc2UgZS5pc0xpbmU/KGQ9ZC5saW5ld2lkdGgsdm9pZCAwPT09ZCYmKGQ9MSksZmEuc2V0TGluZVdpZHRoKGQqKG51bGw9PT1QP2thOjEpKSxlLmlzTGluZVNlZ21lbnRzP2Euc2V0TW9kZShBLkxJTkVTKTplLmlzTGluZUxvb3A/YS5zZXRNb2RlKEEuTElORV9MT09QKToKYS5zZXRNb2RlKEEuTElORV9TVFJJUCkpOmUuaXNQb2ludHMmJmEuc2V0TW9kZShBLlBPSU5UUyk7YyYmYy5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PzA8Yy5tYXhJbnN0YW5jZWRDb3VudCYmYS5yZW5kZXJJbnN0YW5jZXMoYyxiLGYpOmEucmVuZGVyKGIsZil9fTt0aGlzLmNvbXBpbGU9ZnVuY3Rpb24oYSxiKXthYT1bXTthLnRyYXZlcnNlKGZ1bmN0aW9uKGEpe2EuaXNMaWdodCYmYWEucHVzaChhKX0pO3QoYWEsYik7YS50cmF2ZXJzZShmdW5jdGlvbihiKXtpZihiLm1hdGVyaWFsKWlmKEFycmF5LmlzQXJyYXkoYi5tYXRlcmlhbCkpZm9yKHZhciBjPTA7YzxiLm1hdGVyaWFsLmxlbmd0aDtjKyspcShiLm1hdGVyaWFsW2NdLGEuZm9nLGIpO2Vsc2UgcShiLm1hdGVyaWFsLGEuZm9nLGIpfSl9O3RoaXMucmVuZGVyPWZ1bmN0aW9uKGEsYixjLGQpe2lmKHZvaWQgMCE9PWImJiEwIT09Yi5pc0NhbWVyYSljb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIik7CmVsc2V7YmE9IiI7Vz0tMTtUPW51bGw7ITA9PT1hLmF1dG9VcGRhdGUmJmEudXBkYXRlTWF0cml4V29ybGQoKTtiLm9uQmVmb3JlUmVuZGVyKEMpO251bGw9PT1iLnBhcmVudCYmYi51cGRhdGVNYXRyaXhXb3JsZCgpO2IubWF0cml4V29ybGRJbnZlcnNlLmdldEludmVyc2UoYi5tYXRyaXhXb3JsZCk7bGQubXVsdGlwbHlNYXRyaWNlcyhiLnByb2plY3Rpb25NYXRyaXgsYi5tYXRyaXhXb3JsZEludmVyc2UpO21hLnNldEZyb21NYXRyaXgobGQpO2FhLmxlbmd0aD0wO0QubGVuZ3RoPTA7Qi5sZW5ndGg9MDtXZD10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkO2tkPVBhLmluaXQodGhpcy5jbGlwcGluZ1BsYW5lcyxXZCxiKTtSPUdhLmdldChhLGIpO1IuaW5pdCgpO2soYSxiLEMuc29ydE9iamVjdHMpO1IuZmluaXNoKCk7ITA9PT1DLnNvcnRPYmplY3RzJiZSLnNvcnQoKTtrZCYmUGEuYmVnaW5TaGFkb3dzKCk7Zm9yKHZhciBlPWFhLGY9MCxnPTAsaD1lLmxlbmd0aDtnPGg7ZysrKXt2YXIgbj0KZVtnXTtuLmNhc3RTaGFkb3cmJihlYS5zaGFkb3dzW2ZdPW4sZisrKX1lYS5zaGFkb3dzLmxlbmd0aD1mO0phLnJlbmRlcihhLGIpO3QoYWEsYik7a2QmJlBhLmVuZFNoYWRvd3MoKTtvYS5mcmFtZSsrO29hLmNhbGxzPTA7b2EudmVydGljZXM9MDtvYS5mYWNlcz0wO29hLnBvaW50cz0wO3ZvaWQgMD09PWMmJihjPW51bGwpO3RoaXMuc2V0UmVuZGVyVGFyZ2V0KGMpO2U9YS5iYWNrZ3JvdW5kO251bGw9PT1lP2ZhLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoSWEucixJYS5nLElhLmIsWCxFKTplJiZlLmlzQ29sb3ImJihmYS5idWZmZXJzLmNvbG9yLnNldENsZWFyKGUucixlLmcsZS5iLDEsRSksZD0hMCk7KHRoaXMuYXV0b0NsZWFyfHxkKSYmdGhpcy5jbGVhcih0aGlzLmF1dG9DbGVhckNvbG9yLHRoaXMuYXV0b0NsZWFyRGVwdGgsdGhpcy5hdXRvQ2xlYXJTdGVuY2lsKTtlJiZlLmlzQ3ViZVRleHR1cmU/KHZvaWQgMD09PXRhJiYodGE9bmV3IHhhLHVhPW5ldyBDYShuZXcga2IoNSw1LAo1KSxuZXcgRWEoe3VuaWZvcm1zOmFiLmN1YmUudW5pZm9ybXMsdmVydGV4U2hhZGVyOmFiLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmFiLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZToxLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSksdGEucHJvamVjdGlvbk1hdHJpeC5jb3B5KGIucHJvamVjdGlvbk1hdHJpeCksdGEubWF0cml4V29ybGQuZXh0cmFjdFJvdGF0aW9uKGIubWF0cml4V29ybGQpLHRhLm1hdHJpeFdvcmxkSW52ZXJzZS5nZXRJbnZlcnNlKHRhLm1hdHJpeFdvcmxkKSx1YS5tYXRlcmlhbC51bmlmb3Jtcy50Q3ViZS52YWx1ZT1lLHVhLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHRhLm1hdHJpeFdvcmxkSW52ZXJzZSx1YS5tYXRyaXhXb3JsZCksd2EudXBkYXRlKHVhKSxDLnJlbmRlckJ1ZmZlckRpcmVjdCh0YSxudWxsLHVhLmdlb21ldHJ5LHVhLm1hdGVyaWFsLHVhLG51bGwpKTplJiZlLmlzVGV4dHVyZSYmKHZvaWQgMD09PQpGYSYmKEZhPW5ldyBKYigtMSwxLDEsLTEsMCwxKSx6YT1uZXcgQ2EobmV3IGxiKDIsMiksbmV3IE5hKHtkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSkpLHphLm1hdGVyaWFsLm1hcD1lLHdhLnVwZGF0ZSh6YSksQy5yZW5kZXJCdWZmZXJEaXJlY3QoRmEsbnVsbCx6YS5nZW9tZXRyeSx6YS5tYXRlcmlhbCx6YSxudWxsKSk7ZD1SLm9wYXF1ZTtlPVIudHJhbnNwYXJlbnQ7YS5vdmVycmlkZU1hdGVyaWFsPyhmPWEub3ZlcnJpZGVNYXRlcmlhbCxkLmxlbmd0aCYmbShkLGEsYixmKSxlLmxlbmd0aCYmbShlLGEsYixmKSk6KGQubGVuZ3RoJiZtKGQsYSxiKSxlLmxlbmd0aCYmbShlLGEsYikpO01hLnJlbmRlcihhLGIpO09hLnJlbmRlcihhLGIsWik7YyYmc2EudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKGMpO2ZhLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCk7ZmEuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKTtmYS5idWZmZXJzLmNvbG9yLnNldE1hc2soITApO2IuaXNBcnJheUNhbWVyYSYmCmIuZW5hYmxlZCYmQy5zZXRTY2lzc29yVGVzdCghMSk7Yi5vbkFmdGVyUmVuZGVyKEMpfX07dGhpcy5zZXRGYWNlQ3VsbGluZz1mdW5jdGlvbihhLGIpe2ZhLnNldEN1bGxGYWNlKGEpO2ZhLnNldEZsaXBTaWRlZCgwPT09Yil9O3RoaXMuYWxsb2NUZXh0dXJlVW5pdD1mdW5jdGlvbigpe3ZhciBhPVU7YT49bmEubWF4VGV4dHVyZXMmJmNvbnNvbGUud2FybigiV2ViR0xSZW5kZXJlcjogdHJ5aW5nIHRvIHVzZSAiK2ErIiB0ZXh0dXJlIHVuaXRzIHdoaWxlIHRoaXMgR1BVIHN1cHBvcnRzIG9ubHkgIituYS5tYXhUZXh0dXJlcyk7VSs9MTtyZXR1cm4gYX07dGhpcy5zZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oKXt2YXIgYT0hMTtyZXR1cm4gZnVuY3Rpb24oYixjKXtiJiZiLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihhfHwoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnNldFRleHR1cmUyRDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSwKYT0hMCksYj1iLnRleHR1cmUpO3NhLnNldFRleHR1cmUyRChiLGMpfX0oKTt0aGlzLnNldFRleHR1cmU9ZnVuY3Rpb24oKXt2YXIgYT0hMTtyZXR1cm4gZnVuY3Rpb24oYixjKXthfHwoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSBpcyBkZXByZWNhdGVkLCB1c2Ugc2V0VGV4dHVyZTJEIGluc3RlYWQuIiksYT0hMCk7c2Euc2V0VGV4dHVyZTJEKGIsYyl9fSgpO3RoaXMuc2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXt2YXIgYT0hMTtyZXR1cm4gZnVuY3Rpb24oYixjKXtiJiZiLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlJiYoYXx8KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5zZXRUZXh0dXJlQ3ViZTogZG9uJ3QgdXNlIGN1YmUgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLGE9ITApLGI9Yi50ZXh0dXJlKTtiJiZiLmlzQ3ViZVRleHR1cmV8fEFycmF5LmlzQXJyYXkoYi5pbWFnZSkmJgo2PT09Yi5pbWFnZS5sZW5ndGg/c2Euc2V0VGV4dHVyZUN1YmUoYixjKTpzYS5zZXRUZXh0dXJlQ3ViZUR5bmFtaWMoYixjKX19KCk7dGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gUH07dGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oYSl7KFA9YSkmJnZvaWQgMD09PWlhLmdldChhKS5fX3dlYmdsRnJhbWVidWZmZXImJnNhLnNldHVwUmVuZGVyVGFyZ2V0KGEpO3ZhciBiPWEmJmEuaXNXZWJHTFJlbmRlclRhcmdldEN1YmUsYzthPyhjPWlhLmdldChhKSxjPWI/Yy5fX3dlYmdsRnJhbWVidWZmZXJbYS5hY3RpdmVDdWJlRmFjZV06Yy5fX3dlYmdsRnJhbWVidWZmZXIsUS5jb3B5KGEuc2Npc3NvciksTD1hLnNjaXNzb3JUZXN0LFouY29weShhLnZpZXdwb3J0KSk6KGM9bnVsbCxRLmNvcHkoaGEpLm11bHRpcGx5U2NhbGFyKGthKSxMPVBlLFouY29weSh6YykubXVsdGlwbHlTY2FsYXIoa2EpKTtLIT09YyYmKEEuYmluZEZyYW1lYnVmZmVyKEEuRlJBTUVCVUZGRVIsCmMpLEs9Yyk7ZmEuc2Npc3NvcihRKTtmYS5zZXRTY2lzc29yVGVzdChMKTtmYS52aWV3cG9ydChaKTtiJiYoYj1pYS5nZXQoYS50ZXh0dXJlKSxBLmZyYW1lYnVmZmVyVGV4dHVyZTJEKEEuRlJBTUVCVUZGRVIsQS5DT0xPUl9BVFRBQ0hNRU5UMCxBLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCthLmFjdGl2ZUN1YmVGYWNlLGIuX193ZWJnbFRleHR1cmUsYS5hY3RpdmVNaXBNYXBMZXZlbCkpfTt0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2lmKCExPT09KGEmJmEuaXNXZWJHTFJlbmRlclRhcmdldCkpY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO2Vsc2V7dmFyIGc9aWEuZ2V0KGEpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihnKXt2YXIgaD0hMTtnIT09SyYmKEEuYmluZEZyYW1lYnVmZmVyKEEuRlJBTUVCVUZGRVIsCmcpLGg9ITApO3RyeXt2YXIgaz1hLnRleHR1cmUsbT1rLmZvcm1hdCxuPWsudHlwZTsxMDIzIT09bSYmeShtKSE9PUEuZ2V0UGFyYW1ldGVyKEEuSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQpP2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZm9ybWF0LiIpOjEwMDk9PT1ufHx5KG4pPT09QS5nZXRQYXJhbWV0ZXIoQS5JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEUpfHwxMDE1PT09biYmKHBhLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKXx8cGEuZ2V0KCJXRUJHTF9jb2xvcl9idWZmZXJfZmxvYXQiKSl8fDEwMTY9PT1uJiZwYS5nZXQoIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpP0EuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhBLkZSQU1FQlVGRkVSKT09PUEuRlJBTUVCVUZGRVJfQ09NUExFVEU/MDw9YiYmCmI8PWEud2lkdGgtZCYmMDw9YyYmYzw9YS5oZWlnaHQtZSYmQS5yZWFkUGl4ZWxzKGIsYyxkLGUseShtKSx5KG4pLGYpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVhZFBpeGVscyBmcm9tIHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZS4iKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gVW5zaWduZWRCeXRlVHlwZSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHR5cGUuIil9ZmluYWxseXtoJiZBLmJpbmRGcmFtZWJ1ZmZlcihBLkZSQU1FQlVGRkVSLEspfX19fX1mdW5jdGlvbiBLYihhLGIpe3RoaXMubmFtZT0iIjt0aGlzLmNvbG9yPW5ldyBIKGEpO3RoaXMuZGVuc2l0eT12b2lkIDAhPT1iP2I6Mi41RS00fWZ1bmN0aW9uIExiKGEsYixjKXt0aGlzLm5hbWU9IiI7dGhpcy5jb2xvcj0KbmV3IEgoYSk7dGhpcy5uZWFyPXZvaWQgMCE9PWI/YjoxO3RoaXMuZmFyPXZvaWQgMCE9PWM/YzoxRTN9ZnVuY3Rpb24gbWQoKXtCLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTY2VuZSI7dGhpcy5vdmVycmlkZU1hdGVyaWFsPXRoaXMuZm9nPXRoaXMuYmFja2dyb3VuZD1udWxsO3RoaXMuYXV0b1VwZGF0ZT0hMH1mdW5jdGlvbiBZZChhLGIsYyxkLGUpe0IuY2FsbCh0aGlzKTt0aGlzLmxlbnNGbGFyZXM9W107dGhpcy5wb3NpdGlvblNjcmVlbj1uZXcgcDt0aGlzLmN1c3RvbVVwZGF0ZUNhbGxiYWNrPXZvaWQgMDt2b2lkIDAhPT1hJiZ0aGlzLmFkZChhLGIsYyxkLGUpfWZ1bmN0aW9uIGNiKGEpe1ouY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBIKDE2Nzc3MjE1KTt0aGlzLm1hcD1udWxsO3RoaXMucm90YXRpb249MDt0aGlzLmxpZ2h0cz10aGlzLmZvZz0hMTt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiBBYyhhKXtCLmNhbGwodGhpcyk7CnRoaXMudHlwZT0iU3ByaXRlIjt0aGlzLm1hdGVyaWFsPXZvaWQgMCE9PWE/YTpuZXcgY2J9ZnVuY3Rpb24gQmMoKXtCLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMT0QiO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse2xldmVsczp7ZW51bWVyYWJsZTohMCx2YWx1ZTpbXX19KX1mdW5jdGlvbiBDYyhhLGIpe2E9YXx8W107dGhpcy5ib25lcz1hLnNsaWNlKDApO3RoaXMuYm9uZU1hdHJpY2VzPW5ldyBGbG9hdDMyQXJyYXkoMTYqdGhpcy5ib25lcy5sZW5ndGgpO2lmKHZvaWQgMD09PWIpdGhpcy5jYWxjdWxhdGVJbnZlcnNlcygpO2Vsc2UgaWYodGhpcy5ib25lcy5sZW5ndGg9PT1iLmxlbmd0aCl0aGlzLmJvbmVJbnZlcnNlcz1iLnNsaWNlKDApO2Vsc2V7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbiBib25lSW52ZXJzZXMgaXMgdGhlIHdyb25nIGxlbmd0aC4iKTt0aGlzLmJvbmVJbnZlcnNlcz1bXTtmb3IodmFyIGM9MCxkPXRoaXMuYm9uZXMubGVuZ3RoO2M8ZDtjKyspdGhpcy5ib25lSW52ZXJzZXMucHVzaChuZXcgSil9fQpmdW5jdGlvbiBuZCgpe0IuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkJvbmUifWZ1bmN0aW9uIG9kKGEsYil7Q2EuY2FsbCh0aGlzLGEsYik7dGhpcy50eXBlPSJTa2lubmVkTWVzaCI7dGhpcy5iaW5kTW9kZT0iYXR0YWNoZWQiO3RoaXMuYmluZE1hdHJpeD1uZXcgSjt0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyBKO3ZhciBjPXRoaXMuaW5pdEJvbmVzKCksYz1uZXcgQ2MoYyk7dGhpcy5iaW5kKGMsdGhpcy5tYXRyaXhXb3JsZCk7dGhpcy5ub3JtYWxpemVTa2luV2VpZ2h0cygpfWZ1bmN0aW9uIGhhKGEpe1ouY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBIKDE2Nzc3MjE1KTt0aGlzLmxpbmV3aWR0aD0xO3RoaXMubGluZWpvaW49dGhpcy5saW5lY2FwPSJyb3VuZCI7dGhpcy5saWdodHM9ITE7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24geWEoYSxiLGMpe2lmKDE9PT1jKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmU6IHBhcmFtZXRlciBUSFJFRS5MaW5lUGllY2VzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIENyZWF0ZWQgVEhSRUUuTGluZVNlZ21lbnRzIGluc3RlYWQuIiksCm5ldyBkYShhLGIpO0IuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkxpbmUiO3RoaXMuZ2VvbWV0cnk9dm9pZCAwIT09YT9hOm5ldyBJO3RoaXMubWF0ZXJpYWw9dm9pZCAwIT09Yj9iOm5ldyBoYSh7Y29sb3I6MTY3NzcyMTUqTWF0aC5yYW5kb20oKX0pfWZ1bmN0aW9uIGRhKGEsYil7eWEuY2FsbCh0aGlzLGEsYik7dGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWZ1bmN0aW9uIHBkKGEsYil7eWEuY2FsbCh0aGlzLGEsYik7dGhpcy50eXBlPSJMaW5lTG9vcCJ9ZnVuY3Rpb24gTGEoYSl7Wi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUG9pbnRzTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMubWFwPW51bGw7dGhpcy5zaXplPTE7dGhpcy5zaXplQXR0ZW51YXRpb249ITA7dGhpcy5saWdodHM9ITE7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24gTWIoYSxiKXtCLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQb2ludHMiO3RoaXMuZ2VvbWV0cnk9dm9pZCAwIT09YT9hOm5ldyBJOwp0aGlzLm1hdGVyaWFsPXZvaWQgMCE9PWI/YjpuZXcgTGEoe2NvbG9yOjE2Nzc3MjE1Kk1hdGgucmFuZG9tKCl9KX1mdW5jdGlvbiBEYygpe0IuY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ikdyb3VwIn1mdW5jdGlvbiBxZChhLGIsYyxkLGUsZixnLGgsayl7ZnVuY3Rpb24gbSgpe3JlcXVlc3RBbmltYXRpb25GcmFtZShtKTthLnJlYWR5U3RhdGU+PWEuSEFWRV9DVVJSRU5UX0RBVEEmJih1Lm5lZWRzVXBkYXRlPSEwKX1YLmNhbGwodGhpcyxhLGIsYyxkLGUsZixnLGgsayk7dGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITE7dmFyIHU9dGhpczttKCl9ZnVuY3Rpb24gTmIoYSxiLGMsZCxlLGYsZyxoLGssbSx1LHEpe1guY2FsbCh0aGlzLG51bGwsZixnLGgsayxtLGQsZSx1LHEpO3RoaXMuaW1hZ2U9e3dpZHRoOmIsaGVpZ2h0OmN9O3RoaXMubWlwbWFwcz1hO3RoaXMuZ2VuZXJhdGVNaXBtYXBzPXRoaXMuZmxpcFk9ITF9ZnVuY3Rpb24gcmQoYSxiLGMsZCxlLGYsZyxoLGspe1guY2FsbCh0aGlzLGEsCmIsYyxkLGUsZixnLGgsayk7dGhpcy5uZWVkc1VwZGF0ZT0hMH1mdW5jdGlvbiBFYyhhLGIsYyxkLGUsZixnLGgsayxtKXttPXZvaWQgMCE9PW0/bToxMDI2O2lmKDEwMjYhPT1tJiYxMDI3IT09bSl0aHJvdyBFcnJvcigiRGVwdGhUZXh0dXJlIGZvcm1hdCBtdXN0IGJlIGVpdGhlciBUSFJFRS5EZXB0aEZvcm1hdCBvciBUSFJFRS5EZXB0aFN0ZW5jaWxGb3JtYXQiKTt2b2lkIDA9PT1jJiYxMDI2PT09bSYmKGM9MTAxMik7dm9pZCAwPT09YyYmMTAyNz09PW0mJihjPTEwMjApO1guY2FsbCh0aGlzLG51bGwsZCxlLGYsZyxoLG0sYyxrKTt0aGlzLmltYWdlPXt3aWR0aDphLGhlaWdodDpifTt0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1nP2c6MTAwMzt0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT1oP2g6MTAwMzt0aGlzLmdlbmVyYXRlTWlwbWFwcz10aGlzLmZsaXBZPSExfWZ1bmN0aW9uIE9iKGEpe0kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IldpcmVmcmFtZUdlb21ldHJ5Ijt2YXIgYj1bXSwKYyxkLGUsZixnPVswLDBdLGg9e30sayxtLHU9WyJhIiwiYiIsImMiXTtpZihhJiZhLmlzR2VvbWV0cnkpe3ZhciBxPWEuZmFjZXM7Yz0wO2ZvcihlPXEubGVuZ3RoO2M8ZTtjKyspe3ZhciBuPXFbY107Zm9yKGQ9MDszPmQ7ZCsrKWs9blt1W2RdXSxtPW5bdVsoZCsxKSUzXV0sZ1swXT1NYXRoLm1pbihrLG0pLGdbMV09TWF0aC5tYXgoayxtKSxrPWdbMF0rIiwiK2dbMV0sdm9pZCAwPT09aFtrXSYmKGhba109e2luZGV4MTpnWzBdLGluZGV4MjpnWzFdfSl9Zm9yKGsgaW4gaCljPWhba10sdT1hLnZlcnRpY2VzW2MuaW5kZXgxXSxiLnB1c2godS54LHUueSx1LnopLHU9YS52ZXJ0aWNlc1tjLmluZGV4Ml0sYi5wdXNoKHUueCx1LnksdS56KX1lbHNlIGlmKGEmJmEuaXNCdWZmZXJHZW9tZXRyeSl7dmFyIHIsdT1uZXcgcDtpZihudWxsIT09YS5pbmRleCl7cT1hLmF0dHJpYnV0ZXMucG9zaXRpb247bj1hLmluZGV4O3I9YS5ncm91cHM7MD09PXIubGVuZ3RoJiYocj1be3N0YXJ0OjAsY291bnQ6bi5jb3VudCwKbWF0ZXJpYWxJbmRleDowfV0pO2E9MDtmb3IoZj1yLmxlbmd0aDthPGY7KythKWZvcihjPXJbYV0sZD1jLnN0YXJ0LGU9Yy5jb3VudCxjPWQsZT1kK2U7YzxlO2MrPTMpZm9yKGQ9MDszPmQ7ZCsrKWs9bi5nZXRYKGMrZCksbT1uLmdldFgoYysoZCsxKSUzKSxnWzBdPU1hdGgubWluKGssbSksZ1sxXT1NYXRoLm1heChrLG0pLGs9Z1swXSsiLCIrZ1sxXSx2b2lkIDA9PT1oW2tdJiYoaFtrXT17aW5kZXgxOmdbMF0saW5kZXgyOmdbMV19KTtmb3IoayBpbiBoKWM9aFtrXSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUocSxjLmluZGV4MSksYi5wdXNoKHUueCx1LnksdS56KSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUocSxjLmluZGV4MiksYi5wdXNoKHUueCx1LnksdS56KX1lbHNlIGZvcihxPWEuYXR0cmlidXRlcy5wb3NpdGlvbixjPTAsZT1xLmNvdW50LzM7YzxlO2MrKylmb3IoZD0wOzM+ZDtkKyspaD0zKmMrZCx1LmZyb21CdWZmZXJBdHRyaWJ1dGUocSxoKSxiLnB1c2godS54LHUueSx1LnopLApoPTMqYysoZCsxKSUzLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShxLGgpLGIucHVzaCh1LngsdS55LHUueil9dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhiLDMpKX1mdW5jdGlvbiBGYyhhLGIsYyl7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUGFyYW1ldHJpY0dlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e2Z1bmM6YSxzbGljZXM6YixzdGFja3M6Y307dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFBiKGEsYixjKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gUGIoYSxiLGMpe0kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBhcmFtZXRyaWNCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtmdW5jOmEsc2xpY2VzOmIsc3RhY2tzOmN9O3ZhciBkPVtdLGU9W10sZj1bXSxnPVtdLGg9bmV3IHAsaz1uZXcgcCxtPW5ldyBwLHU9bmV3IHAscT1uZXcgcCxuLHIsbD1iKzE7Zm9yKG49MDtuPD1jO24rKyl7dmFyIHQ9bi9jO2ZvcihyPTA7cjw9YjtyKyspe3ZhciB5PQpyL2Isaz1hKHksdCxrKTtlLnB1c2goay54LGsueSxrLnopOzA8PXktMUUtNT8obT1hKHktMUUtNSx0LG0pLHUuc3ViVmVjdG9ycyhrLG0pKToobT1hKHkrMUUtNSx0LG0pLHUuc3ViVmVjdG9ycyhtLGspKTswPD10LTFFLTU/KG09YSh5LHQtMUUtNSxtKSxxLnN1YlZlY3RvcnMoayxtKSk6KG09YSh5LHQrMUUtNSxtKSxxLnN1YlZlY3RvcnMobSxrKSk7aC5jcm9zc1ZlY3RvcnModSxxKS5ub3JtYWxpemUoKTtmLnB1c2goaC54LGgueSxoLnopO2cucHVzaCh5LHQpfX1mb3Iobj0wO248YztuKyspZm9yKHI9MDtyPGI7cisrKWE9bipsK3IrMSxoPShuKzEpKmwrcisxLGs9KG4rMSkqbCtyLGQucHVzaChuKmwrcixhLGspLGQucHVzaChhLGgsayk7dGhpcy5zZXRJbmRleChkKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGUsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBDKGYsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IEMoZywyKSl9ZnVuY3Rpb24gR2MoYSwKYixjLGQpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBvbHloZWRyb25HZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt2ZXJ0aWNlczphLGluZGljZXM6YixyYWRpdXM6YyxkZXRhaWw6ZH07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IGlhKGEsYixjLGQpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBpYShhLGIsYyxkKXtmdW5jdGlvbiBlKGEpe2gucHVzaChhLngsYS55LGEueil9ZnVuY3Rpb24gZihiLGMpe3ZhciBkPTMqYjtjLng9YVtkKzBdO2MueT1hW2QrMV07Yy56PWFbZCsyXX1mdW5jdGlvbiBnKGEsYixjLGQpezA+ZCYmMT09PWEueCYmKGtbYl09YS54LTEpOzA9PT1jLngmJjA9PT1jLnomJihrW2JdPWQvMi9NYXRoLlBJKy41KX1JLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17dmVydGljZXM6YSxpbmRpY2VzOmIscmFkaXVzOmMsZGV0YWlsOmR9O2M9Y3x8MTt2YXIgaD1bXSxrPVtdOyhmdW5jdGlvbihhKXtmb3IodmFyIGM9Cm5ldyBwLGQ9bmV3IHAsZz1uZXcgcCxoPTA7aDxiLmxlbmd0aDtoKz0zKXtmKGJbaCswXSxjKTtmKGJbaCsxXSxkKTtmKGJbaCsyXSxnKTt2YXIgaz1jLGw9ZCx5PWcseD1NYXRoLnBvdygyLGEpLHY9W10sRyx3O2ZvcihHPTA7Rzw9eDtHKyspe3ZbR109W107dmFyIE89ay5jbG9uZSgpLmxlcnAoeSxHL3gpLFM9bC5jbG9uZSgpLmxlcnAoeSxHL3gpLEU9eC1HO2Zvcih3PTA7dzw9RTt3KyspdltHXVt3XT0wPT09dyYmRz09PXg/TzpPLmNsb25lKCkubGVycChTLHcvRSl9Zm9yKEc9MDtHPHg7RysrKWZvcih3PTA7dzwyKih4LUcpLTE7dysrKWs9TWF0aC5mbG9vcih3LzIpLDA9PT13JTI/KGUodltHXVtrKzFdKSxlKHZbRysxXVtrXSksZSh2W0ddW2tdKSk6KGUodltHXVtrKzFdKSxlKHZbRysxXVtrKzFdKSxlKHZbRysxXVtrXSkpfX0pKGR8fDApOyhmdW5jdGlvbihhKXtmb3IodmFyIGI9bmV3IHAsYz0wO2M8aC5sZW5ndGg7Yys9MyliLng9aFtjKzBdLGIueT1oW2MrMV0sYi56PWhbYysKMl0sYi5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcihhKSxoW2MrMF09Yi54LGhbYysxXT1iLnksaFtjKzJdPWIuen0pKGMpOyhmdW5jdGlvbigpe2Zvcih2YXIgYT1uZXcgcCxiPTA7YjxoLmxlbmd0aDtiKz0zKWEueD1oW2IrMF0sYS55PWhbYisxXSxhLno9aFtiKzJdLGsucHVzaChNYXRoLmF0YW4yKGEueiwtYS54KS8yL01hdGguUEkrLjUsMS0oTWF0aC5hdGFuMigtYS55LE1hdGguc3FydChhLngqYS54K2EueiphLnopKS9NYXRoLlBJKy41KSk7Zm9yKHZhciBhPW5ldyBwLGI9bmV3IHAsYz1uZXcgcCxkPW5ldyBwLGU9bmV3IEQsZj1uZXcgRCxsPW5ldyBELHk9MCx4PTA7eTxoLmxlbmd0aDt5Kz05LHgrPTYpe2Euc2V0KGhbeSswXSxoW3krMV0saFt5KzJdKTtiLnNldChoW3krM10saFt5KzRdLGhbeSs1XSk7Yy5zZXQoaFt5KzZdLGhbeSs3XSxoW3krOF0pO2Uuc2V0KGtbeCswXSxrW3grMV0pO2Yuc2V0KGtbeCsyXSxrW3grM10pO2wuc2V0KGtbeCs0XSxrW3grNV0pO2QuY29weShhKS5hZGQoYikuYWRkKGMpLmRpdmlkZVNjYWxhcigzKTsKdmFyIHY9TWF0aC5hdGFuMihkLnosLWQueCk7ZyhlLHgrMCxhLHYpO2coZix4KzIsYix2KTtnKGwseCs0LGMsdil9Zm9yKGE9MDthPGsubGVuZ3RoO2ErPTYpYj1rW2ErMF0sYz1rW2ErMl0sZD1rW2ErNF0sZT1NYXRoLm1pbihiLGMsZCksLjk8TWF0aC5tYXgoYixjLGQpJiYuMT5lJiYoLjI+YiYmKGtbYSswXSs9MSksLjI+YyYmKGtbYSsyXSs9MSksLjI+ZCYmKGtbYSs0XSs9MSkpfSkoKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGgsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBDKGguc2xpY2UoKSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhrLDIpKTt0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKX1mdW5jdGlvbiBIYyhhLGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlRldHJhaGVkcm9uR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsZGV0YWlsOmJ9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBRYihhLGIpKTsKdGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gUWIoYSxiKXtpYS5jYWxsKHRoaXMsWzEsMSwxLC0xLC0xLDEsLTEsMSwtMSwxLC0xLC0xXSxbMiwxLDAsMCwzLDIsMSwzLDAsMiwzLDFdLGEsYik7dGhpcy50eXBlPSJUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGRldGFpbDpifX1mdW5jdGlvbiBJYyhhLGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ik9jdGFoZWRyb25HZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSxkZXRhaWw6Yn07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IG1iKGEsYikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIG1iKGEsYil7aWEuY2FsbCh0aGlzLFsxLDAsMCwtMSwwLDAsMCwxLDAsMCwtMSwwLDAsMCwxLDAsMCwtMV0sWzAsMiw0LDAsNCwzLDAsMyw1LDAsNSwyLDEsMiw1LDEsNSwzLDEsMyw0LDEsNCwyXSxhLGIpO3RoaXMudHlwZT0iT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5IjsKdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSxkZXRhaWw6Yn19ZnVuY3Rpb24gSmMoYSxiKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJJY29zYWhlZHJvbkdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGRldGFpbDpifTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgUmIoYSxiKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gUmIoYSxiKXt2YXIgYz0oMStNYXRoLnNxcnQoNSkpLzI7aWEuY2FsbCh0aGlzLFstMSxjLDAsMSxjLDAsLTEsLWMsMCwxLC1jLDAsMCwtMSxjLDAsMSxjLDAsLTEsLWMsMCwxLC1jLGMsMCwtMSxjLDAsMSwtYywwLC0xLC1jLDAsMV0sWzAsMTEsNSwwLDUsMSwwLDEsNywwLDcsMTAsMCwxMCwxMSwxLDUsOSw1LDExLDQsMTEsMTAsMiwxMCw3LDYsNywxLDgsMyw5LDQsMyw0LDIsMywyLDYsMyw2LDgsMyw4LDksNCw5LDUsMiw0LDExLDYsMiwxMCw4LDYsNyw5LDgsMV0sYSxiKTt0aGlzLnR5cGU9Ikljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnkiOwp0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGRldGFpbDpifX1mdW5jdGlvbiBLYyhhLGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkRvZGVjYWhlZHJvbkdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGRldGFpbDpifTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgU2IoYSxiKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gU2IoYSxiKXt2YXIgYz0oMStNYXRoLnNxcnQoNSkpLzIsZD0xL2M7aWEuY2FsbCh0aGlzLFstMSwtMSwtMSwtMSwtMSwxLC0xLDEsLTEsLTEsMSwxLDEsLTEsLTEsMSwtMSwxLDEsMSwtMSwxLDEsMSwwLC1kLC1jLDAsLWQsYywwLGQsLWMsMCxkLGMsLWQsLWMsMCwtZCxjLDAsZCwtYywwLGQsYywwLC1jLDAsLWQsYywwLC1kLC1jLDAsZCxjLDAsZF0sWzMsMTEsNywzLDcsMTUsMywxNSwxMyw3LDE5LDE3LDcsMTcsNiw3LDYsMTUsMTcsNCw4LDE3LDgsMTAsMTcsMTAsNiw4LDAsMTYsOCwxNiwyLDgsMiwxMCwwLDEyLDEsMCwxLDE4LAowLDE4LDE2LDYsMTAsMiw2LDIsMTMsNiwxMywxNSwyLDE2LDE4LDIsMTgsMywyLDMsMTMsMTgsMSw5LDE4LDksMTEsMTgsMTEsMyw0LDE0LDEyLDQsMTIsMCw0LDAsOCwxMSw5LDUsMTEsNSwxOSwxMSwxOSw3LDE5LDUsMTQsMTksMTQsNCwxOSw0LDE3LDEsMTIsMTQsMSwxNCw1LDEsNSw5XSxhLGIpO3RoaXMudHlwZT0iRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsZGV0YWlsOmJ9fWZ1bmN0aW9uIExjKGEsYixjLGQsZSxmKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJUdWJlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cGF0aDphLHR1YnVsYXJTZWdtZW50czpiLHJhZGl1czpjLHJhZGlhbFNlZ21lbnRzOmQsY2xvc2VkOmV9O3ZvaWQgMCE9PWYmJmNvbnNvbGUud2FybigiVEhSRUUuVHViZUdlb21ldHJ5OiB0YXBlciBoYXMgYmVlbiByZW1vdmVkLiIpO2E9bmV3IFRiKGEsYixjLGQsZSk7dGhpcy50YW5nZW50cz1hLnRhbmdlbnRzOwp0aGlzLm5vcm1hbHM9YS5ub3JtYWxzO3RoaXMuYmlub3JtYWxzPWEuYmlub3JtYWxzO3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KGEpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFRiKGEsYixjLGQsZSl7ZnVuY3Rpb24gZihlKXt2YXIgZj1hLmdldFBvaW50QXQoZS9iKSxtPWcubm9ybWFsc1tlXTtlPWcuYmlub3JtYWxzW2VdO2ZvcihxPTA7cTw9ZDtxKyspe3ZhciB1PXEvZCpNYXRoLlBJKjIsdD1NYXRoLnNpbih1KSx1PS1NYXRoLmNvcyh1KTtrLng9dSptLngrdCplLng7ay55PXUqbS55K3QqZS55O2suej11Km0ueit0KmUuejtrLm5vcm1hbGl6ZSgpO2wucHVzaChrLngsay55LGsueik7aC54PWYueCtjKmsueDtoLnk9Zi55K2Mqay55O2guej1mLnorYyprLno7bi5wdXNoKGgueCxoLnksaC56KX19SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVHViZUJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3BhdGg6YSx0dWJ1bGFyU2VnbWVudHM6YixyYWRpdXM6YyxyYWRpYWxTZWdtZW50czpkLApjbG9zZWQ6ZX07Yj1ifHw2NDtjPWN8fDE7ZD1kfHw4O2U9ZXx8ITE7dmFyIGc9YS5jb21wdXRlRnJlbmV0RnJhbWVzKGIsZSk7dGhpcy50YW5nZW50cz1nLnRhbmdlbnRzO3RoaXMubm9ybWFscz1nLm5vcm1hbHM7dGhpcy5iaW5vcm1hbHM9Zy5iaW5vcm1hbHM7dmFyIGg9bmV3IHAsaz1uZXcgcCxtPW5ldyBELHUscSxuPVtdLGw9W10sej1bXSx0PVtdO2Zvcih1PTA7dTxiO3UrKylmKHUpO2YoITE9PT1lP2I6MCk7Zm9yKHU9MDt1PD1iO3UrKylmb3IocT0wO3E8PWQ7cSsrKW0ueD11L2IsbS55PXEvZCx6LnB1c2gobS54LG0ueSk7KGZ1bmN0aW9uKCl7Zm9yKHE9MTtxPD1iO3ErKylmb3IodT0xO3U8PWQ7dSsrKXt2YXIgYT0oZCsxKSpxKyh1LTEpLGM9KGQrMSkqcSt1LGU9KGQrMSkqKHEtMSkrdTt0LnB1c2goKGQrMSkqKHEtMSkrKHUtMSksYSxlKTt0LnB1c2goYSxjLGUpfX0pKCk7dGhpcy5zZXRJbmRleCh0KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKG4sMykpOwp0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgQyhsLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKHosMikpfWZ1bmN0aW9uIE1jKGEsYixjLGQsZSxmLGcpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlRvcnVzS25vdEdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLHR1YmU6Yix0dWJ1bGFyU2VnbWVudHM6YyxyYWRpYWxTZWdtZW50czpkLHA6ZSxxOmZ9O3ZvaWQgMCE9PWcmJmNvbnNvbGUud2FybigiVEhSRUUuVG9ydXNLbm90R2VvbWV0cnk6IGhlaWdodFNjYWxlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2NhbGUoIHgsIHksIHogKSBpbnN0ZWFkLiIpO3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBVYihhLGIsYyxkLGUsZikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFViKGEsYixjLGQsZSxmKXtmdW5jdGlvbiBnKGEsYixjLGQsZSl7dmFyIGY9TWF0aC5zaW4oYSk7Yj1jL2IqYTtjPU1hdGguY29zKGIpO2UueD1kKigyK2MpKgouNSpNYXRoLmNvcyhhKTtlLnk9ZCooMitjKSpmKi41O2Uuej1kKk1hdGguc2luKGIpKi41fUkuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLHR1YmU6Yix0dWJ1bGFyU2VnbWVudHM6YyxyYWRpYWxTZWdtZW50czpkLHA6ZSxxOmZ9O2E9YXx8MTAwO2I9Ynx8NDA7Yz1NYXRoLmZsb29yKGMpfHw2NDtkPU1hdGguZmxvb3IoZCl8fDg7ZT1lfHwyO2Y9Znx8Mzt2YXIgaD1bXSxrPVtdLG09W10sdT1bXSxxLG4sbD1uZXcgcCx6PW5ldyBwLHQ9bmV3IHAseT1uZXcgcCx4PW5ldyBwLHY9bmV3IHAsRz1uZXcgcDtmb3IocT0wO3E8PWM7KytxKWZvcihuPXEvYyplKk1hdGguUEkqMixnKG4sZSxmLGEsdCksZyhuKy4wMSxlLGYsYSx5KSx2LnN1YlZlY3RvcnMoeSx0KSxHLmFkZFZlY3RvcnMoeSx0KSx4LmNyb3NzVmVjdG9ycyh2LEcpLEcuY3Jvc3NWZWN0b3JzKHgsdikseC5ub3JtYWxpemUoKSxHLm5vcm1hbGl6ZSgpLApuPTA7bjw9ZDsrK24pe3ZhciB3PW4vZCpNYXRoLlBJKjIsTz0tYipNYXRoLmNvcyh3KSx3PWIqTWF0aC5zaW4odyk7bC54PXQueCsoTypHLngrdyp4LngpO2wueT10LnkrKE8qRy55K3cqeC55KTtsLno9dC56KyhPKkcueit3Kngueik7ay5wdXNoKGwueCxsLnksbC56KTt6LnN1YlZlY3RvcnMobCx0KS5ub3JtYWxpemUoKTttLnB1c2goei54LHoueSx6LnopO3UucHVzaChxL2MpO3UucHVzaChuL2QpfWZvcihuPTE7bjw9YztuKyspZm9yKHE9MTtxPD1kO3ErKylhPShkKzEpKm4rKHEtMSksYj0oZCsxKSpuK3EsZT0oZCsxKSoobi0xKStxLGgucHVzaCgoZCsxKSoobi0xKSsocS0xKSxhLGUpLGgucHVzaChhLGIsZSk7dGhpcy5zZXRJbmRleChoKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGssMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBDKG0sMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IEModSwyKSl9ZnVuY3Rpb24gTmMoYSxiLGMsZCwKZSl7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVG9ydXNHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSx0dWJlOmIscmFkaWFsU2VnbWVudHM6Yyx0dWJ1bGFyU2VnbWVudHM6ZCxhcmM6ZX07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFZiKGEsYixjLGQsZSkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFZiKGEsYixjLGQsZSl7SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVG9ydXNCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSx0dWJlOmIscmFkaWFsU2VnbWVudHM6Yyx0dWJ1bGFyU2VnbWVudHM6ZCxhcmM6ZX07YT1hfHwxMDA7Yj1ifHw0MDtjPU1hdGguZmxvb3IoYyl8fDg7ZD1NYXRoLmZsb29yKGQpfHw2O2U9ZXx8MipNYXRoLlBJO3ZhciBmPVtdLGc9W10saD1bXSxrPVtdLG09bmV3IHAsdT1uZXcgcCxxPW5ldyBwLG4sbDtmb3Iobj0wO248PWM7bisrKWZvcihsPTA7bDw9ZDtsKyspe3ZhciB6PWwvZCplLHQ9bi9jKk1hdGguUEkqCjI7dS54PShhK2IqTWF0aC5jb3ModCkpKk1hdGguY29zKHopO3UueT0oYStiKk1hdGguY29zKHQpKSpNYXRoLnNpbih6KTt1Lno9YipNYXRoLnNpbih0KTtnLnB1c2godS54LHUueSx1LnopO20ueD1hKk1hdGguY29zKHopO20ueT1hKk1hdGguc2luKHopO3Euc3ViVmVjdG9ycyh1LG0pLm5vcm1hbGl6ZSgpO2gucHVzaChxLngscS55LHEueik7ay5wdXNoKGwvZCk7ay5wdXNoKG4vYyl9Zm9yKG49MTtuPD1jO24rKylmb3IobD0xO2w8PWQ7bCsrKWE9KGQrMSkqKG4tMSkrbC0xLGI9KGQrMSkqKG4tMSkrbCxlPShkKzEpKm4rbCxmLnB1c2goKGQrMSkqbitsLTEsYSxlKSxmLnB1c2goYSxiLGUpO3RoaXMuc2V0SW5kZXgoZik7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhnLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgQyhoLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKGssMikpfWZ1bmN0aW9uIGRiKGEsYil7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0KIkV4dHJ1ZGVHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6YSxvcHRpb25zOmJ9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBGYShhLGIpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBGYShhLGIpeyJ1bmRlZmluZWQiIT09dHlwZW9mIGEmJihJLmNhbGwodGhpcyksdGhpcy50eXBlPSJFeHRydWRlQnVmZmVyR2VvbWV0cnkiLGE9QXJyYXkuaXNBcnJheShhKT9hOlthXSx0aGlzLmFkZFNoYXBlTGlzdChhLGIpLHRoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKSl9ZnVuY3Rpb24gT2MoYSxiKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJUZXh0R2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17dGV4dDphLHBhcmFtZXRlcnM6Yn07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFdiKGEsYikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFdiKGEsYil7Yj1ifHx7fTt2YXIgYz1iLmZvbnQ7aWYoITE9PT0oYyYmYy5pc0ZvbnQpKXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5UZXh0R2VvbWV0cnk6IGZvbnQgcGFyYW1ldGVyIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5Gb250LiIpLApuZXcgTTtjPWMuZ2VuZXJhdGVTaGFwZXMoYSxiLnNpemUsYi5jdXJ2ZVNlZ21lbnRzKTtiLmFtb3VudD12b2lkIDAhPT1iLmhlaWdodD9iLmhlaWdodDo1MDt2b2lkIDA9PT1iLmJldmVsVGhpY2tuZXNzJiYoYi5iZXZlbFRoaWNrbmVzcz0xMCk7dm9pZCAwPT09Yi5iZXZlbFNpemUmJihiLmJldmVsU2l6ZT04KTt2b2lkIDA9PT1iLmJldmVsRW5hYmxlZCYmKGIuYmV2ZWxFbmFibGVkPSExKTtGYS5jYWxsKHRoaXMsYyxiKTt0aGlzLnR5cGU9IlRleHRCdWZmZXJHZW9tZXRyeSJ9ZnVuY3Rpb24gUGMoYSxiLGMsZCxlLGYsZyl7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iU3BoZXJlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsd2lkdGhTZWdtZW50czpiLGhlaWdodFNlZ21lbnRzOmMscGhpU3RhcnQ6ZCxwaGlMZW5ndGg6ZSx0aGV0YVN0YXJ0OmYsdGhldGFMZW5ndGg6Z307dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IG5iKGEsYixjLGQsZSxmLGcpKTt0aGlzLm1lcmdlVmVydGljZXMoKX0KZnVuY3Rpb24gbmIoYSxiLGMsZCxlLGYsZyl7SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iU3BoZXJlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsd2lkdGhTZWdtZW50czpiLGhlaWdodFNlZ21lbnRzOmMscGhpU3RhcnQ6ZCxwaGlMZW5ndGg6ZSx0aGV0YVN0YXJ0OmYsdGhldGFMZW5ndGg6Z307YT1hfHw1MDtiPU1hdGgubWF4KDMsTWF0aC5mbG9vcihiKXx8OCk7Yz1NYXRoLm1heCgyLE1hdGguZmxvb3IoYyl8fDYpO2Q9dm9pZCAwIT09ZD9kOjA7ZT12b2lkIDAhPT1lP2U6MipNYXRoLlBJO2Y9dm9pZCAwIT09Zj9mOjA7Zz12b2lkIDAhPT1nP2c6TWF0aC5QSTt2YXIgaD1mK2csayxtLHU9MCxxPVtdLG49bmV3IHAsbD1uZXcgcCx6PVtdLHQ9W10seT1bXSx4PVtdO2ZvcihtPTA7bTw9YzttKyspe3ZhciB2PVtdLEc9bS9jO2ZvcihrPTA7azw9YjtrKyspe3ZhciB3PWsvYjtuLng9LWEqTWF0aC5jb3MoZCt3KmUpKk1hdGguc2luKGYrRypnKTtuLnk9YSpNYXRoLmNvcyhmKwpHKmcpO24uej1hKk1hdGguc2luKGQrdyplKSpNYXRoLnNpbihmK0cqZyk7dC5wdXNoKG4ueCxuLnksbi56KTtsLnNldChuLngsbi55LG4ueikubm9ybWFsaXplKCk7eS5wdXNoKGwueCxsLnksbC56KTt4LnB1c2godywxLUcpO3YucHVzaCh1KyspfXEucHVzaCh2KX1mb3IobT0wO208YzttKyspZm9yKGs9MDtrPGI7aysrKWE9cVttXVtrKzFdLGQ9cVttXVtrXSxlPXFbbSsxXVtrXSxnPXFbbSsxXVtrKzFdLCgwIT09bXx8MDxmKSYmei5wdXNoKGEsZCxnKSwobSE9PWMtMXx8aDxNYXRoLlBJKSYmei5wdXNoKGQsZSxnKTt0aGlzLnNldEluZGV4KHopO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEModCwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEMoeSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyh4LDIpKX1mdW5jdGlvbiBRYyhhLGIsYyxkLGUsZil7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUmluZ0dlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9Cntpbm5lclJhZGl1czphLG91dGVyUmFkaXVzOmIsdGhldGFTZWdtZW50czpjLHBoaVNlZ21lbnRzOmQsdGhldGFTdGFydDplLHRoZXRhTGVuZ3RoOmZ9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBYYihhLGIsYyxkLGUsZikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFhiKGEsYixjLGQsZSxmKXtJLmNhbGwodGhpcyk7dGhpcy50eXBlPSJSaW5nQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17aW5uZXJSYWRpdXM6YSxvdXRlclJhZGl1czpiLHRoZXRhU2VnbWVudHM6YyxwaGlTZWdtZW50czpkLHRoZXRhU3RhcnQ6ZSx0aGV0YUxlbmd0aDpmfTthPWF8fDIwO2I9Ynx8NTA7ZT12b2lkIDAhPT1lP2U6MDtmPXZvaWQgMCE9PWY/ZjoyKk1hdGguUEk7Yz12b2lkIDAhPT1jP01hdGgubWF4KDMsYyk6ODtkPXZvaWQgMCE9PWQ/TWF0aC5tYXgoMSxkKToxO3ZhciBnPVtdLGg9W10saz1bXSxtPVtdLHU9YSxxPShiLWEpL2Qsbj1uZXcgcCxsPW5ldyBELHosdDtmb3Ioej0KMDt6PD1kO3orKyl7Zm9yKHQ9MDt0PD1jO3QrKylhPWUrdC9jKmYsbi54PXUqTWF0aC5jb3MoYSksbi55PXUqTWF0aC5zaW4oYSksaC5wdXNoKG4ueCxuLnksbi56KSxrLnB1c2goMCwwLDEpLGwueD0obi54L2IrMSkvMixsLnk9KG4ueS9iKzEpLzIsbS5wdXNoKGwueCxsLnkpO3UrPXF9Zm9yKHo9MDt6PGQ7eisrKWZvcihiPXoqKGMrMSksdD0wO3Q8Yzt0KyspYT10K2IsZT1hK2MrMSxmPWErYysyLHU9YSsxLGcucHVzaChhLGUsdSksZy5wdXNoKGUsZix1KTt0aGlzLnNldEluZGV4KGcpO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMoaCwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEMoaywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhtLDIpKX1mdW5jdGlvbiBSYyhhLGIsYyxkKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMYXRoZUdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3BvaW50czphLHNlZ21lbnRzOmIscGhpU3RhcnQ6YyxwaGlMZW5ndGg6ZH07CnRoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBZYihhLGIsYyxkKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gWWIoYSxiLGMsZCl7SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTGF0aGVCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtwb2ludHM6YSxzZWdtZW50czpiLHBoaVN0YXJ0OmMscGhpTGVuZ3RoOmR9O2I9TWF0aC5mbG9vcihiKXx8MTI7Yz1jfHwwO2Q9ZHx8MipNYXRoLlBJO2Q9WS5jbGFtcChkLDAsMipNYXRoLlBJKTt2YXIgZT1bXSxmPVtdLGc9W10saD0xL2Isaz1uZXcgcCxtPW5ldyBELHUscTtmb3IodT0wO3U8PWI7dSsrKXtxPWMrdSpoKmQ7dmFyIG49TWF0aC5zaW4ocSksbD1NYXRoLmNvcyhxKTtmb3IocT0wO3E8PWEubGVuZ3RoLTE7cSsrKWsueD1hW3FdLngqbixrLnk9YVtxXS55LGsuej1hW3FdLngqbCxmLnB1c2goay54LGsueSxrLnopLG0ueD11L2IsbS55PXEvKGEubGVuZ3RoLTEpLGcucHVzaChtLngsbS55KX1mb3IodT0wO3U8Yjt1KyspZm9yKHE9CjA7cTxhLmxlbmd0aC0xO3ErKyljPXErdSphLmxlbmd0aCxoPWMrYS5sZW5ndGgsaz1jK2EubGVuZ3RoKzEsbT1jKzEsZS5wdXNoKGMsaCxtKSxlLnB1c2goaCxrLG0pO3RoaXMuc2V0SW5kZXgoZSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhmLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKGcsMikpO3RoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtpZihkPT09MipNYXRoLlBJKWZvcihkPXRoaXMuYXR0cmlidXRlcy5ub3JtYWwuYXJyYXksZT1uZXcgcCxmPW5ldyBwLGc9bmV3IHAsYz1iKmEubGVuZ3RoKjMscT11PTA7dTxhLmxlbmd0aDt1KysscSs9MyllLng9ZFtxKzBdLGUueT1kW3ErMV0sZS56PWRbcSsyXSxmLng9ZFtjK3ErMF0sZi55PWRbYytxKzFdLGYuej1kW2MrcSsyXSxnLmFkZFZlY3RvcnMoZSxmKS5ub3JtYWxpemUoKSxkW3ErMF09ZFtjK3ErMF09Zy54LGRbcSsxXT1kW2MrcSsxXT1nLnksZFtxKzJdPWRbYytxKzJdPWcuen1mdW5jdGlvbiBaYihhLApiKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTaGFwZUdlb21ldHJ5Ijsib2JqZWN0Ij09PXR5cGVvZiBiJiYoY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZUdlb21ldHJ5OiBPcHRpb25zIHBhcmFtZXRlciBoYXMgYmVlbiByZW1vdmVkLiIpLGI9Yi5jdXJ2ZVNlZ21lbnRzKTt0aGlzLnBhcmFtZXRlcnM9e3NoYXBlczphLGN1cnZlU2VnbWVudHM6Yn07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3ICRiKGEsYikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uICRiKGEsYil7ZnVuY3Rpb24gYyhhKXt2YXIgYyxoLG09ZS5sZW5ndGgvMzthPWEuZXh0cmFjdFBvaW50cyhiKTt2YXIgbD1hLnNoYXBlLHQ9YS5ob2xlcztpZighMT09PXphLmlzQ2xvY2tXaXNlKGwpKWZvcihsPWwucmV2ZXJzZSgpLGE9MCxjPXQubGVuZ3RoO2E8YzthKyspaD10W2FdLCEwPT09emEuaXNDbG9ja1dpc2UoaCkmJih0W2FdPWgucmV2ZXJzZSgpKTt2YXIgcD16YS50cmlhbmd1bGF0ZVNoYXBlKGwsdCk7CmE9MDtmb3IoYz10Lmxlbmd0aDthPGM7YSsrKWg9dFthXSxsPWwuY29uY2F0KGgpO2E9MDtmb3IoYz1sLmxlbmd0aDthPGM7YSsrKWg9bFthXSxlLnB1c2goaC54LGgueSwwKSxmLnB1c2goMCwwLDEpLGcucHVzaChoLngsaC55KTthPTA7Zm9yKGM9cC5sZW5ndGg7YTxjO2ErKylsPXBbYV0sZC5wdXNoKGxbMF0rbSxsWzFdK20sbFsyXSttKSxrKz0zfUkuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlNoYXBlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17c2hhcGVzOmEsY3VydmVTZWdtZW50czpifTtiPWJ8fDEyO3ZhciBkPVtdLGU9W10sZj1bXSxnPVtdLGg9MCxrPTA7aWYoITE9PT1BcnJheS5pc0FycmF5KGEpKWMoYSk7ZWxzZSBmb3IodmFyIG09MDttPGEubGVuZ3RoO20rKyljKGFbbV0pLHRoaXMuYWRkR3JvdXAoaCxrLG0pLGgrPWssaz0wO3RoaXMuc2V0SW5kZXgoZCk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhlLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIiwKbmV3IEMoZiwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhnLDIpKX1mdW5jdGlvbiBhYyhhLGIpe0kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkVkZ2VzR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17dGhyZXNob2xkQW5nbGU6Yn07dmFyIGM9W10sZD1NYXRoLmNvcyhZLkRFRzJSQUQqKHZvaWQgMCE9PWI/YjoxKSksZT1bMCwwXSxmPXt9LGcsaCxrPVsiYSIsImIiLCJjIl0sbTthLmlzQnVmZmVyR2VvbWV0cnk/KG09bmV3IE0sbS5mcm9tQnVmZmVyR2VvbWV0cnkoYSkpOm09YS5jbG9uZSgpO20ubWVyZ2VWZXJ0aWNlcygpO20uY29tcHV0ZUZhY2VOb3JtYWxzKCk7dmFyIHU9bS52ZXJ0aWNlczttPW0uZmFjZXM7Zm9yKHZhciBsPTAsbj1tLmxlbmd0aDtsPG47bCsrKWZvcih2YXIgcj1tW2xdLHA9MDszPnA7cCsrKWc9cltrW3BdXSxoPXJba1socCsxKSUzXV0sZVswXT1NYXRoLm1pbihnLGgpLGVbMV09TWF0aC5tYXgoZyxoKSxnPWVbMF0rIiwiK2VbMV0sdm9pZCAwPT09CmZbZ10/ZltnXT17aW5kZXgxOmVbMF0saW5kZXgyOmVbMV0sZmFjZTE6bCxmYWNlMjp2b2lkIDB9OmZbZ10uZmFjZTI9bDtmb3IoZyBpbiBmKWlmKGU9ZltnXSx2b2lkIDA9PT1lLmZhY2UyfHxtW2UuZmFjZTFdLm5vcm1hbC5kb3QobVtlLmZhY2UyXS5ub3JtYWwpPD1kKWs9dVtlLmluZGV4MV0sYy5wdXNoKGsueCxrLnksay56KSxrPXVbZS5pbmRleDJdLGMucHVzaChrLngsay55LGsueik7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhjLDMpKX1mdW5jdGlvbiBvYihhLGIsYyxkLGUsZixnLGgpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN5bGluZGVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzVG9wOmEscmFkaXVzQm90dG9tOmIsaGVpZ2h0OmMscmFkaWFsU2VnbWVudHM6ZCxoZWlnaHRTZWdtZW50czplLG9wZW5FbmRlZDpmLHRoZXRhU3RhcnQ6Zyx0aGV0YUxlbmd0aDpofTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgV2EoYSxiLGMsZCxlLApmLGcsaCkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFdhKGEsYixjLGQsZSxmLGcsaCl7ZnVuY3Rpb24gayhjKXt2YXIgZSxmLGssdD1uZXcgRCxFPW5ldyBwLEY9MCxhYT0hMD09PWM/YTpiLFI9ITA9PT1jPzE6LTE7Zj16O2ZvcihlPTE7ZTw9ZDtlKyspbC5wdXNoKDAseSpSLDApLG4ucHVzaCgwLFIsMCksci5wdXNoKC41LC41KSx6Kys7az16O2ZvcihlPTA7ZTw9ZDtlKyspe3ZhciBDPWUvZCpoK2csQj1NYXRoLmNvcyhDKSxDPU1hdGguc2luKEMpO0UueD1hYSpDO0UueT15KlI7RS56PWFhKkI7bC5wdXNoKEUueCxFLnksRS56KTtuLnB1c2goMCxSLDApO3QueD0uNSpCKy41O3QueT0uNSpDKlIrLjU7ci5wdXNoKHQueCx0LnkpO3orK31mb3IoZT0wO2U8ZDtlKyspdD1mK2UsRT1rK2UsITA9PT1jP3UucHVzaChFLEUrMSx0KTp1LnB1c2goRSsxLEUsdCksRis9MzttLmFkZEdyb3VwKHgsRiwhMD09PWM/MToyKTt4Kz1GfUkuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN5bGluZGVyQnVmZmVyR2VvbWV0cnkiOwp0aGlzLnBhcmFtZXRlcnM9e3JhZGl1c1RvcDphLHJhZGl1c0JvdHRvbTpiLGhlaWdodDpjLHJhZGlhbFNlZ21lbnRzOmQsaGVpZ2h0U2VnbWVudHM6ZSxvcGVuRW5kZWQ6Zix0aGV0YVN0YXJ0OmcsdGhldGFMZW5ndGg6aH07dmFyIG09dGhpczthPXZvaWQgMCE9PWE/YToyMDtiPXZvaWQgMCE9PWI/YjoyMDtjPXZvaWQgMCE9PWM/YzoxMDA7ZD1NYXRoLmZsb29yKGQpfHw4O2U9TWF0aC5mbG9vcihlKXx8MTtmPXZvaWQgMCE9PWY/ZjohMTtnPXZvaWQgMCE9PWc/ZzowO2g9dm9pZCAwIT09aD9oOjIqTWF0aC5QSTt2YXIgdT1bXSxsPVtdLG49W10scj1bXSx6PTAsdD1bXSx5PWMvMix4PTA7KGZ1bmN0aW9uKCl7dmFyIGYsayx3PW5ldyBwLE89bmV3IHAsUz0wLEU9KGItYSkvYztmb3Ioaz0wO2s8PWU7aysrKXt2YXIgRj1bXSxhYT1rL2UsQz1hYSooYi1hKSthO2ZvcihmPTA7Zjw9ZDtmKyspe3ZhciBEPWYvZCxCPUQqaCtnLEk9TWF0aC5zaW4oQiksQj1NYXRoLmNvcyhCKTtPLng9QyoKSTtPLnk9LWFhKmMreTtPLno9QypCO2wucHVzaChPLngsTy55LE8ueik7dy5zZXQoSSxFLEIpLm5vcm1hbGl6ZSgpO24ucHVzaCh3Lngsdy55LHcueik7ci5wdXNoKEQsMS1hYSk7Ri5wdXNoKHorKyl9dC5wdXNoKEYpfWZvcihmPTA7ZjxkO2YrKylmb3Ioaz0wO2s8ZTtrKyspdz10W2srMV1bZl0sTz10W2srMV1bZisxXSxFPXRba11bZisxXSx1LnB1c2godFtrXVtmXSx3LEUpLHUucHVzaCh3LE8sRSksUys9NjttLmFkZEdyb3VwKHgsUywwKTt4Kz1TfSkoKTshMT09PWYmJigwPGEmJmsoITApLDA8YiYmayghMSkpO3RoaXMuc2V0SW5kZXgodSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhsLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgQyhuLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKHIsMikpfWZ1bmN0aW9uIFNjKGEsYixjLGQsZSxmLGcpe29iLmNhbGwodGhpcywwLGEsYixjLGQsZSxmLGcpO3RoaXMudHlwZT0iQ29uZUdlb21ldHJ5IjsKdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YSxoZWlnaHQ6YixyYWRpYWxTZWdtZW50czpjLGhlaWdodFNlZ21lbnRzOmQsb3BlbkVuZGVkOmUsdGhldGFTdGFydDpmLHRoZXRhTGVuZ3RoOmd9fWZ1bmN0aW9uIFRjKGEsYixjLGQsZSxmLGcpe1dhLmNhbGwodGhpcywwLGEsYixjLGQsZSxmLGcpO3RoaXMudHlwZT0iQ29uZUJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czphLGhlaWdodDpiLHJhZGlhbFNlZ21lbnRzOmMsaGVpZ2h0U2VnbWVudHM6ZCxvcGVuRW5kZWQ6ZSx0aGV0YVN0YXJ0OmYsdGhldGFMZW5ndGg6Z319ZnVuY3Rpb24gVWMoYSxiLGMsZCl7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsc2VnbWVudHM6Yix0aGV0YVN0YXJ0OmMsdGhldGFMZW5ndGg6ZH07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IGJjKGEsYixjLGQpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBiYyhhLApiLGMsZCl7SS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ2lyY2xlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmEsc2VnbWVudHM6Yix0aGV0YVN0YXJ0OmMsdGhldGFMZW5ndGg6ZH07YT1hfHw1MDtiPXZvaWQgMCE9PWI/TWF0aC5tYXgoMyxiKTo4O2M9dm9pZCAwIT09Yz9jOjA7ZD12b2lkIDAhPT1kP2Q6MipNYXRoLlBJO3ZhciBlPVtdLGY9W10sZz1bXSxoPVtdLGssbSx1PW5ldyBwLGw9bmV3IEQ7Zi5wdXNoKDAsMCwwKTtnLnB1c2goMCwwLDEpO2gucHVzaCguNSwuNSk7bT0wO2ZvcihrPTM7bTw9YjttKyssays9Myl7dmFyIG49YyttL2IqZDt1Lng9YSpNYXRoLmNvcyhuKTt1Lnk9YSpNYXRoLnNpbihuKTtmLnB1c2godS54LHUueSx1LnopO2cucHVzaCgwLDAsMSk7bC54PShmW2tdL2ErMSkvMjtsLnk9KGZbaysxXS9hKzEpLzI7aC5wdXNoKGwueCxsLnkpfWZvcihrPTE7azw9YjtrKyspZS5wdXNoKGssaysxLDApO3RoaXMuc2V0SW5kZXgoZSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIiwKbmV3IEMoZiwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEMoZywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgQyhoLDIpKX1mdW5jdGlvbiBjYyhhKXtFYS5jYWxsKHRoaXMse3VuaWZvcm1zOkhhLm1lcmdlKFtWLmxpZ2h0cyx7b3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOlUuc2hhZG93X3ZlcnQsZnJhZ21lbnRTaGFkZXI6VS5zaGFkb3dfZnJhZ30pO3RoaXMudHJhbnNwYXJlbnQ9dGhpcy5saWdodHM9ITA7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7b3BhY2l0eTp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5vcGFjaXR5LnZhbHVlfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy51bmlmb3Jtcy5vcGFjaXR5LnZhbHVlPWF9fX0pO3RoaXMuc2V0VmFsdWVzKGEpfWZ1bmN0aW9uIGRjKGEpe0VhLmNhbGwodGhpcyxhKTt0aGlzLnR5cGU9IlJhd1NoYWRlck1hdGVyaWFsIn1mdW5jdGlvbiBSYShhKXtaLmNhbGwodGhpcyk7CnRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9O3RoaXMudHlwZT0iTWVzaFN0YW5kYXJkTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMubWV0YWxuZXNzPXRoaXMucm91Z2huZXNzPS41O3RoaXMubGlnaHRNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTE7dGhpcy5hb01hcD1udWxsO3RoaXMuYW9NYXBJbnRlbnNpdHk9MTt0aGlzLmVtaXNzaXZlPW5ldyBIKDApO3RoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MTt0aGlzLmJ1bXBNYXA9dGhpcy5lbWlzc2l2ZU1hcD1udWxsO3RoaXMuYnVtcFNjYWxlPTE7dGhpcy5ub3JtYWxNYXA9bnVsbDt0aGlzLm5vcm1hbFNjYWxlPW5ldyBEKDEsMSk7dGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTE7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPTA7dGhpcy5lbnZNYXA9dGhpcy5hbHBoYU1hcD10aGlzLm1ldGFsbmVzc01hcD10aGlzLnJvdWdobmVzc01hcD1udWxsOwp0aGlzLmVudk1hcEludGVuc2l0eT0xO3RoaXMucmVmcmFjdGlvblJhdGlvPS45ODt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xO3RoaXMud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCI7dGhpcy5tb3JwaE5vcm1hbHM9dGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz0hMTt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiBwYihhKXtSYS5jYWxsKHRoaXMpO3RoaXMuZGVmaW5lcz17UEhZU0lDQUw6IiJ9O3RoaXMudHlwZT0iTWVzaFBoeXNpY2FsTWF0ZXJpYWwiO3RoaXMucmVmbGVjdGl2aXR5PS41O3RoaXMuY2xlYXJDb2F0Um91Z2huZXNzPXRoaXMuY2xlYXJDb2F0PTA7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24gdGEoYSl7Wi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTWVzaFBob25nTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMuc3BlY3VsYXI9bmV3IEgoMTExODQ4MSk7dGhpcy5zaGluaW5lc3M9CjMwO3RoaXMubGlnaHRNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTE7dGhpcy5hb01hcD1udWxsO3RoaXMuYW9NYXBJbnRlbnNpdHk9MTt0aGlzLmVtaXNzaXZlPW5ldyBIKDApO3RoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MTt0aGlzLmJ1bXBNYXA9dGhpcy5lbWlzc2l2ZU1hcD1udWxsO3RoaXMuYnVtcFNjYWxlPTE7dGhpcy5ub3JtYWxNYXA9bnVsbDt0aGlzLm5vcm1hbFNjYWxlPW5ldyBEKDEsMSk7dGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTE7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPTA7dGhpcy5lbnZNYXA9dGhpcy5hbHBoYU1hcD10aGlzLnNwZWN1bGFyTWFwPW51bGw7dGhpcy5jb21iaW5lPTA7dGhpcy5yZWZsZWN0aXZpdHk9MTt0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTg7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWNhcD0KInJvdW5kIjt0aGlzLm1vcnBoTm9ybWFscz10aGlzLm1vcnBoVGFyZ2V0cz10aGlzLnNraW5uaW5nPSExO3RoaXMuc2V0VmFsdWVzKGEpfWZ1bmN0aW9uIHFiKGEpe3RhLmNhbGwodGhpcyk7dGhpcy5kZWZpbmVzPXtUT09OOiIifTt0aGlzLnR5cGU9Ik1lc2hUb29uTWF0ZXJpYWwiO3RoaXMuZ3JhZGllbnRNYXA9bnVsbDt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiByYihhKXtaLmNhbGwodGhpcyxhKTt0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCI7dGhpcy5idW1wTWFwPW51bGw7dGhpcy5idW1wU2NhbGU9MTt0aGlzLm5vcm1hbE1hcD1udWxsO3RoaXMubm9ybWFsU2NhbGU9bmV3IEQoMSwxKTt0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9MTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9MDt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xO3RoaXMubW9ycGhOb3JtYWxzPXRoaXMubW9ycGhUYXJnZXRzPXRoaXMuc2tpbm5pbmc9CnRoaXMubGlnaHRzPXRoaXMuZm9nPSExO3RoaXMuc2V0VmFsdWVzKGEpfWZ1bmN0aW9uIHNiKGEpe1ouY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ik1lc2hMYW1iZXJ0TWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMubGlnaHRNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTE7dGhpcy5hb01hcD1udWxsO3RoaXMuYW9NYXBJbnRlbnNpdHk9MTt0aGlzLmVtaXNzaXZlPW5ldyBIKDApO3RoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MTt0aGlzLmVudk1hcD10aGlzLmFscGhhTWFwPXRoaXMuc3BlY3VsYXJNYXA9dGhpcy5lbWlzc2l2ZU1hcD1udWxsO3RoaXMuY29tYmluZT0wO3RoaXMucmVmbGVjdGl2aXR5PTE7dGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4O3RoaXMud2lyZWZyYW1lPSExO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPTE7dGhpcy53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIjt0aGlzLm1vcnBoTm9ybWFscz0KdGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz0hMTt0aGlzLnNldFZhbHVlcyhhKX1mdW5jdGlvbiB0YihhKXtaLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMaW5lRGFzaGVkTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEgoMTY3NzcyMTUpO3RoaXMuc2NhbGU9dGhpcy5saW5ld2lkdGg9MTt0aGlzLmRhc2hTaXplPTM7dGhpcy5nYXBTaXplPTE7dGhpcy5saWdodHM9ITE7dGhpcy5zZXRWYWx1ZXMoYSl9ZnVuY3Rpb24gWmQoYSxiLGMpe3ZhciBkPXRoaXMsZT0hMSxmPTAsZz0wO3RoaXMub25TdGFydD12b2lkIDA7dGhpcy5vbkxvYWQ9YTt0aGlzLm9uUHJvZ3Jlc3M9Yjt0aGlzLm9uRXJyb3I9Yzt0aGlzLml0ZW1TdGFydD1mdW5jdGlvbihhKXtnKys7aWYoITE9PT1lJiZ2b2lkIDAhPT1kLm9uU3RhcnQpZC5vblN0YXJ0KGEsZixnKTtlPSEwfTt0aGlzLml0ZW1FbmQ9ZnVuY3Rpb24oYSl7ZisrO2lmKHZvaWQgMCE9PWQub25Qcm9ncmVzcylkLm9uUHJvZ3Jlc3MoYSxmLGcpO2lmKGY9PT0KZyYmKGU9ITEsdm9pZCAwIT09ZC5vbkxvYWQpKWQub25Mb2FkKCl9O3RoaXMuaXRlbUVycm9yPWZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PWQub25FcnJvcilkLm9uRXJyb3IoYSl9fWZ1bmN0aW9uIHVhKGEpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1hP2E6QWF9ZnVuY3Rpb24gUWUoYSl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWE/YTpBYTt0aGlzLl9wYXJzZXI9bnVsbH1mdW5jdGlvbiAkZChhKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09YT9hOkFhO3RoaXMuX3BhcnNlcj1udWxsfWZ1bmN0aW9uIFZjKGEpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1hP2E6QWF9ZnVuY3Rpb24gYWUoYSl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWE/YTpBYX1mdW5jdGlvbiBzZChhKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09YT9hOkFhfWZ1bmN0aW9uIG1hKGEsYil7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTGlnaHQiO3RoaXMuY29sb3I9bmV3IEgoYSk7dGhpcy5pbnRlbnNpdHk9dm9pZCAwIT09Yj9iOjE7CnRoaXMucmVjZWl2ZVNoYWRvdz12b2lkIDB9ZnVuY3Rpb24gdGQoYSxiLGMpe21hLmNhbGwodGhpcyxhLGMpO3RoaXMudHlwZT0iSGVtaXNwaGVyZUxpZ2h0Ijt0aGlzLmNhc3RTaGFkb3c9dm9pZCAwO3RoaXMucG9zaXRpb24uY29weShCLkRlZmF1bHRVcCk7dGhpcy51cGRhdGVNYXRyaXgoKTt0aGlzLmdyb3VuZENvbG9yPW5ldyBIKGIpfWZ1bmN0aW9uIHViKGEpe3RoaXMuY2FtZXJhPWE7dGhpcy5iaWFzPTA7dGhpcy5yYWRpdXM9MTt0aGlzLm1hcFNpemU9bmV3IEQoNTEyLDUxMik7dGhpcy5tYXA9bnVsbDt0aGlzLm1hdHJpeD1uZXcgSn1mdW5jdGlvbiB1ZCgpe3ViLmNhbGwodGhpcyxuZXcgeGEoNTAsMSwuNSw1MDApKX1mdW5jdGlvbiB2ZChhLGIsYyxkLGUsZil7bWEuY2FsbCh0aGlzLGEsYik7dGhpcy50eXBlPSJTcG90TGlnaHQiO3RoaXMucG9zaXRpb24uY29weShCLkRlZmF1bHRVcCk7dGhpcy51cGRhdGVNYXRyaXgoKTt0aGlzLnRhcmdldD1uZXcgQjtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywKInBvd2VyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9LHNldDpmdW5jdGlvbihhKXt0aGlzLmludGVuc2l0eT1hL01hdGguUEl9fSk7dGhpcy5kaXN0YW5jZT12b2lkIDAhPT1jP2M6MDt0aGlzLmFuZ2xlPXZvaWQgMCE9PWQ/ZDpNYXRoLlBJLzM7dGhpcy5wZW51bWJyYT12b2lkIDAhPT1lP2U6MDt0aGlzLmRlY2F5PXZvaWQgMCE9PWY/ZjoxO3RoaXMuc2hhZG93PW5ldyB1ZH1mdW5jdGlvbiB3ZChhLGIsYyxkKXttYS5jYWxsKHRoaXMsYSxiKTt0aGlzLnR5cGU9IlBvaW50TGlnaHQiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwb3dlciIse2dldDpmdW5jdGlvbigpe3JldHVybiA0KnRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9LHNldDpmdW5jdGlvbihhKXt0aGlzLmludGVuc2l0eT1hLyg0Kk1hdGguUEkpfX0pO3RoaXMuZGlzdGFuY2U9dm9pZCAwIT09Yz9jOjA7dGhpcy5kZWNheT12b2lkIDAhPT1kP2Q6MTt0aGlzLnNoYWRvdz1uZXcgdWIobmV3IHhhKDkwLAoxLC41LDUwMCkpfWZ1bmN0aW9uIHhkKCl7dWIuY2FsbCh0aGlzLG5ldyBKYigtNSw1LDUsLTUsLjUsNTAwKSl9ZnVuY3Rpb24geWQoYSxiKXttYS5jYWxsKHRoaXMsYSxiKTt0aGlzLnR5cGU9IkRpcmVjdGlvbmFsTGlnaHQiO3RoaXMucG9zaXRpb24uY29weShCLkRlZmF1bHRVcCk7dGhpcy51cGRhdGVNYXRyaXgoKTt0aGlzLnRhcmdldD1uZXcgQjt0aGlzLnNoYWRvdz1uZXcgeGR9ZnVuY3Rpb24gemQoYSxiKXttYS5jYWxsKHRoaXMsYSxiKTt0aGlzLnR5cGU9IkFtYmllbnRMaWdodCI7dGhpcy5jYXN0U2hhZG93PXZvaWQgMH1mdW5jdGlvbiBBZChhLGIsYyxkKXttYS5jYWxsKHRoaXMsYSxiKTt0aGlzLnR5cGU9IlJlY3RBcmVhTGlnaHQiO3RoaXMucG9zaXRpb24uc2V0KDAsMSwwKTt0aGlzLnVwZGF0ZU1hdHJpeCgpO3RoaXMud2lkdGg9dm9pZCAwIT09Yz9jOjEwO3RoaXMuaGVpZ2h0PXZvaWQgMCE9PWQ/ZDoxMH1mdW5jdGlvbiBEYShhLGIsYyxkKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz0KYTt0aGlzLl9jYWNoZWRJbmRleD0wO3RoaXMucmVzdWx0QnVmZmVyPXZvaWQgMCE9PWQ/ZDpuZXcgYi5jb25zdHJ1Y3RvcihjKTt0aGlzLnNhbXBsZVZhbHVlcz1iO3RoaXMudmFsdWVTaXplPWN9ZnVuY3Rpb24gQmQoYSxiLGMsZCl7RGEuY2FsbCh0aGlzLGEsYixjLGQpO3RoaXMuX29mZnNldE5leHQ9dGhpcy5fd2VpZ2h0TmV4dD10aGlzLl9vZmZzZXRQcmV2PXRoaXMuX3dlaWdodFByZXY9LTB9ZnVuY3Rpb24gV2MoYSxiLGMsZCl7RGEuY2FsbCh0aGlzLGEsYixjLGQpfWZ1bmN0aW9uIENkKGEsYixjLGQpe0RhLmNhbGwodGhpcyxhLGIsYyxkKX1mdW5jdGlvbiB2YihhLGIsYyxkKXtpZih2b2lkIDA9PT1hKXRocm93IEVycm9yKCJ0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCIpO2lmKHZvaWQgMD09PWJ8fDA9PT1iLmxlbmd0aCl0aHJvdyBFcnJvcigibm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrYSk7dGhpcy5uYW1lPWE7dGhpcy50aW1lcz12YS5jb252ZXJ0QXJyYXkoYix0aGlzLlRpbWVCdWZmZXJUeXBlKTsKdGhpcy52YWx1ZXM9dmEuY29udmVydEFycmF5KGMsdGhpcy5WYWx1ZUJ1ZmZlclR5cGUpO3RoaXMuc2V0SW50ZXJwb2xhdGlvbihkfHx0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKTt0aGlzLnZhbGlkYXRlKCk7dGhpcy5vcHRpbWl6ZSgpfWZ1bmN0aW9uIGVjKGEsYixjLGQpe3ZiLmNhbGwodGhpcyxhLGIsYyxkKX1mdW5jdGlvbiBEZChhLGIsYyxkKXtEYS5jYWxsKHRoaXMsYSxiLGMsZCl9ZnVuY3Rpb24gWGMoYSxiLGMsZCl7dmIuY2FsbCh0aGlzLGEsYixjLGQpfWZ1bmN0aW9uIGZjKGEsYixjLGQpe3ZiLmNhbGwodGhpcyxhLGIsYyxkKX1mdW5jdGlvbiBFZChhLGIsYyxkKXt2Yi5jYWxsKHRoaXMsYSxiLGMsZCl9ZnVuY3Rpb24gRmQoYSxiLGMpe3ZiLmNhbGwodGhpcyxhLGIsYyl9ZnVuY3Rpb24gR2QoYSxiLGMsZCl7dmIuY2FsbCh0aGlzLGEsYixjLGQpfWZ1bmN0aW9uIHdiKGEsYixjLGQpe3ZiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBCYShhLGIsYyl7dGhpcy5uYW1lPQphO3RoaXMudHJhY2tzPWM7dGhpcy5kdXJhdGlvbj12b2lkIDAhPT1iP2I6LTE7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7MD50aGlzLmR1cmF0aW9uJiZ0aGlzLnJlc2V0RHVyYXRpb24oKTt0aGlzLm9wdGltaXplKCl9ZnVuY3Rpb24gSGQoYSl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWE/YTpBYTt0aGlzLnRleHR1cmVzPXt9fWZ1bmN0aW9uIGJlKGEpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1hP2E6QWF9ZnVuY3Rpb24gZ2MoKXt0aGlzLm9uTG9hZFN0YXJ0PWZ1bmN0aW9uKCl7fTt0aGlzLm9uTG9hZFByb2dyZXNzPWZ1bmN0aW9uKCl7fTt0aGlzLm9uTG9hZENvbXBsZXRlPWZ1bmN0aW9uKCl7fX1mdW5jdGlvbiBjZShhKXsiYm9vbGVhbiI9PT10eXBlb2YgYSYmKGNvbnNvbGUud2FybigiVEhSRUUuSlNPTkxvYWRlcjogc2hvd1N0YXR1cyBwYXJhbWV0ZXIgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGNvbnN0cnVjdG9yLiIpLGE9dm9pZCAwKTt0aGlzLm1hbmFnZXI9dm9pZCAwIT09CmE/YTpBYTt0aGlzLndpdGhDcmVkZW50aWFscz0hMX1mdW5jdGlvbiBSZShhKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09YT9hOkFhO3RoaXMudGV4dHVyZVBhdGg9IiJ9ZnVuY3Rpb24gU2UoYSxiLGMsZCxlKXtiPS41KihkLWIpO2U9LjUqKGUtYyk7dmFyIGY9YSphO3JldHVybigyKmMtMipkK2IrZSkqYSpmKygtMypjKzMqZC0yKmItZSkqZitiKmErY31mdW5jdGlvbiB4YihhLGIsYyxkKXt2YXIgZT0xLWE7cmV0dXJuIGUqZSpiKzIqKDEtYSkqYSpjK2EqYSpkfWZ1bmN0aW9uIHliKGEsYixjLGQsZSl7dmFyIGY9MS1hLGc9MS1hO3JldHVybiBmKmYqZipiKzMqZypnKmEqYyszKigxLWEpKmEqYSpkK2EqYSphKmV9ZnVuY3Rpb24gbmEoKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDB9ZnVuY3Rpb24gU2EoYSxiKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDA7dGhpcy52MT1hO3RoaXMudjI9Yn1mdW5jdGlvbiBZYygpe3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMDt0aGlzLmN1cnZlcz0KW107dGhpcy5hdXRvQ2xvc2U9ITF9ZnVuY3Rpb24gWGEoYSxiLGMsZCxlLGYsZyxoKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDA7dGhpcy5hWD1hO3RoaXMuYVk9Yjt0aGlzLnhSYWRpdXM9Yzt0aGlzLnlSYWRpdXM9ZDt0aGlzLmFTdGFydEFuZ2xlPWU7dGhpcy5hRW5kQW5nbGU9Zjt0aGlzLmFDbG9ja3dpc2U9Zzt0aGlzLmFSb3RhdGlvbj1ofHwwfWZ1bmN0aW9uIHpiKGEpe3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMDt0aGlzLnBvaW50cz12b2lkIDA9PT1hP1tdOmF9ZnVuY3Rpb24gaGMoYSxiLGMsZCl7dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwO3RoaXMudjA9YTt0aGlzLnYxPWI7dGhpcy52Mj1jO3RoaXMudjM9ZH1mdW5jdGlvbiBpYyhhLGIsYyl7dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwO3RoaXMudjA9YTt0aGlzLnYxPWI7dGhpcy52Mj1jfWZ1bmN0aW9uIFpjKGEpe1ljLmNhbGwodGhpcyk7dGhpcy5jdXJyZW50UG9pbnQ9bmV3IEQ7YSYmdGhpcy5mcm9tUG9pbnRzKGEpfQpmdW5jdGlvbiBBYigpe1pjLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmhvbGVzPVtdfWZ1bmN0aW9uIGRlKCl7dGhpcy5zdWJQYXRocz1bXTt0aGlzLmN1cnJlbnRQYXRoPW51bGx9ZnVuY3Rpb24gZWUoYSl7dGhpcy5kYXRhPWF9ZnVuY3Rpb24gVGUoYSl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWE/YTpBYX1mdW5jdGlvbiBmZShhKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09YT9hOkFhfWZ1bmN0aW9uIFVlKCl7dGhpcy50eXBlPSJTdGVyZW9DYW1lcmEiO3RoaXMuYXNwZWN0PTE7dGhpcy5leWVTZXA9LjA2NDt0aGlzLmNhbWVyYUw9bmV3IHhhO3RoaXMuY2FtZXJhTC5sYXllcnMuZW5hYmxlKDEpO3RoaXMuY2FtZXJhTC5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMuY2FtZXJhUj1uZXcgeGE7dGhpcy5jYW1lcmFSLmxheWVycy5lbmFibGUoMik7dGhpcy5jYW1lcmFSLm1hdHJpeEF1dG9VcGRhdGU9ITF9ZnVuY3Rpb24gSWQoYSxiLGMpe0IuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN1YmVDYW1lcmEiOwp2YXIgZD1uZXcgeGEoOTAsMSxhLGIpO2QudXAuc2V0KDAsLTEsMCk7ZC5sb29rQXQobmV3IHAoMSwwLDApKTt0aGlzLmFkZChkKTt2YXIgZT1uZXcgeGEoOTAsMSxhLGIpO2UudXAuc2V0KDAsLTEsMCk7ZS5sb29rQXQobmV3IHAoLTEsMCwwKSk7dGhpcy5hZGQoZSk7dmFyIGY9bmV3IHhhKDkwLDEsYSxiKTtmLnVwLnNldCgwLDAsMSk7Zi5sb29rQXQobmV3IHAoMCwxLDApKTt0aGlzLmFkZChmKTt2YXIgZz1uZXcgeGEoOTAsMSxhLGIpO2cudXAuc2V0KDAsMCwtMSk7Zy5sb29rQXQobmV3IHAoMCwtMSwwKSk7dGhpcy5hZGQoZyk7dmFyIGg9bmV3IHhhKDkwLDEsYSxiKTtoLnVwLnNldCgwLC0xLDApO2gubG9va0F0KG5ldyBwKDAsMCwxKSk7dGhpcy5hZGQoaCk7dmFyIGs9bmV3IHhhKDkwLDEsYSxiKTtrLnVwLnNldCgwLC0xLDApO2subG9va0F0KG5ldyBwKDAsMCwtMSkpO3RoaXMuYWRkKGspO3RoaXMucmVuZGVyVGFyZ2V0PW5ldyBFYihjLGMse2Zvcm1hdDoxMDIyLG1hZ0ZpbHRlcjoxMDA2LAptaW5GaWx0ZXI6MTAwNn0pO3RoaXMucmVuZGVyVGFyZ2V0LnRleHR1cmUubmFtZT0iQ3ViZUNhbWVyYSI7dGhpcy51cGRhdGVDdWJlTWFwPWZ1bmN0aW9uKGEsYil7bnVsbD09PXRoaXMucGFyZW50JiZ0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCk7dmFyIGM9dGhpcy5yZW5kZXJUYXJnZXQsbj1jLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO2MudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITE7Yy5hY3RpdmVDdWJlRmFjZT0wO2EucmVuZGVyKGIsZCxjKTtjLmFjdGl2ZUN1YmVGYWNlPTE7YS5yZW5kZXIoYixlLGMpO2MuYWN0aXZlQ3ViZUZhY2U9MjthLnJlbmRlcihiLGYsYyk7Yy5hY3RpdmVDdWJlRmFjZT0zO2EucmVuZGVyKGIsZyxjKTtjLmFjdGl2ZUN1YmVGYWNlPTQ7YS5yZW5kZXIoYixoLGMpO2MudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9bjtjLmFjdGl2ZUN1YmVGYWNlPTU7YS5yZW5kZXIoYixrLGMpO2Euc2V0UmVuZGVyVGFyZ2V0KG51bGwpfX1mdW5jdGlvbiBnZShhKXt4YS5jYWxsKHRoaXMpOwp0aGlzLmVuYWJsZWQ9ITE7dGhpcy5jYW1lcmFzPWF8fFtdfWZ1bmN0aW9uIGhlKCl7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQXVkaW9MaXN0ZW5lciI7dGhpcy5jb250ZXh0PWllLmdldENvbnRleHQoKTt0aGlzLmdhaW49dGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTt0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO3RoaXMuZmlsdGVyPW51bGx9ZnVuY3Rpb24gamMoYSl7Qi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQXVkaW8iO3RoaXMuY29udGV4dD1hLmNvbnRleHQ7dGhpcy5nYWluPXRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7dGhpcy5nYWluLmNvbm5lY3QoYS5nZXRJbnB1dCgpKTt0aGlzLmF1dG9wbGF5PSExO3RoaXMuYnVmZmVyPW51bGw7dGhpcy5sb29wPSExO3RoaXMuc3RhcnRUaW1lPTA7dGhpcy5wbGF5YmFja1JhdGU9MTt0aGlzLmlzUGxheWluZz0hMTt0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMDt0aGlzLnNvdXJjZVR5cGU9ImVtcHR5IjsKdGhpcy5maWx0ZXJzPVtdfWZ1bmN0aW9uIGplKGEpe2pjLmNhbGwodGhpcyxhKTt0aGlzLnBhbm5lcj10aGlzLmNvbnRleHQuY3JlYXRlUGFubmVyKCk7dGhpcy5wYW5uZXIuY29ubmVjdCh0aGlzLmdhaW4pfWZ1bmN0aW9uIGtlKGEsYil7dGhpcy5hbmFseXNlcj1hLmNvbnRleHQuY3JlYXRlQW5hbHlzZXIoKTt0aGlzLmFuYWx5c2VyLmZmdFNpemU9dm9pZCAwIT09Yj9iOjIwNDg7dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KHRoaXMuYW5hbHlzZXIuZnJlcXVlbmN5QmluQ291bnQpO2EuZ2V0T3V0cHV0KCkuY29ubmVjdCh0aGlzLmFuYWx5c2VyKX1mdW5jdGlvbiBsZShhLGIsYyl7dGhpcy5iaW5kaW5nPWE7dGhpcy52YWx1ZVNpemU9YzthPUZsb2F0NjRBcnJheTtzd2l0Y2goYil7Y2FzZSAicXVhdGVybmlvbiI6Yj10aGlzLl9zbGVycDticmVhaztjYXNlICJzdHJpbmciOmNhc2UgImJvb2wiOmE9QXJyYXk7Yj10aGlzLl9zZWxlY3Q7YnJlYWs7ZGVmYXVsdDpiPXRoaXMuX2xlcnB9dGhpcy5idWZmZXI9Cm5ldyBhKDQqYyk7dGhpcy5fbWl4QnVmZmVyUmVnaW9uPWI7dGhpcy5yZWZlcmVuY2VDb3VudD10aGlzLnVzZUNvdW50PXRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wfWZ1bmN0aW9uIFZlKGEsYixjKXtjPWN8fG9hLnBhcnNlVHJhY2tOYW1lKGIpO3RoaXMuX3RhcmdldEdyb3VwPWE7dGhpcy5fYmluZGluZ3M9YS5zdWJzY3JpYmVfKGIsYyl9ZnVuY3Rpb24gb2EoYSxiLGMpe3RoaXMucGF0aD1iO3RoaXMucGFyc2VkUGF0aD1jfHxvYS5wYXJzZVRyYWNrTmFtZShiKTt0aGlzLm5vZGU9b2EuZmluZE5vZGUoYSx0aGlzLnBhcnNlZFBhdGgubm9kZU5hbWUpfHxhO3RoaXMucm9vdE5vZGU9YX1mdW5jdGlvbiBXZShhKXt0aGlzLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKTt0aGlzLl9vYmplY3RzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dGhpcy5uQ2FjaGVkT2JqZWN0c189MDt2YXIgYj17fTt0aGlzLl9pbmRpY2VzQnlVVUlEPWI7Zm9yKHZhciBjPTAsZD1hcmd1bWVudHMubGVuZ3RoO2MhPT0KZDsrK2MpYlthcmd1bWVudHNbY10udXVpZF09Yzt0aGlzLl9wYXRocz1bXTt0aGlzLl9wYXJzZWRQYXRocz1bXTt0aGlzLl9iaW5kaW5ncz1bXTt0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGg9e307dmFyIGU9dGhpczt0aGlzLnN0YXRzPXtvYmplY3RzOntnZXQgdG90YWwoKXtyZXR1cm4gZS5fb2JqZWN0cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0aGlzLnRvdGFsLWUubkNhY2hlZE9iamVjdHNffX0sZ2V0IGJpbmRpbmdzUGVyT2JqZWN0KCl7cmV0dXJuIGUuX2JpbmRpbmdzLmxlbmd0aH19fWZ1bmN0aW9uIFhlKGEsYixjKXt0aGlzLl9taXhlcj1hO3RoaXMuX2NsaXA9Yjt0aGlzLl9sb2NhbFJvb3Q9Y3x8bnVsbDthPWIudHJhY2tzO2I9YS5sZW5ndGg7Yz1BcnJheShiKTtmb3IodmFyIGQ9e2VuZGluZ1N0YXJ0OjI0MDAsZW5kaW5nRW5kOjI0MDB9LGU9MDtlIT09YjsrK2Upe3ZhciBmPWFbZV0uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7Y1tlXT1mO2Yuc2V0dGluZ3M9CmR9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncz1kO3RoaXMuX2ludGVycG9sYW50cz1jO3RoaXMuX3Byb3BlcnR5QmluZGluZ3M9QXJyYXkoYik7dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9dGhpcy5fYnlDbGlwQ2FjaGVJbmRleD10aGlzLl9jYWNoZUluZGV4PW51bGw7dGhpcy5sb29wPTIyMDE7dGhpcy5fbG9vcENvdW50PS0xO3RoaXMuX3N0YXJ0VGltZT1udWxsO3RoaXMudGltZT0wO3RoaXMuX2VmZmVjdGl2ZVdlaWdodD10aGlzLndlaWdodD10aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy50aW1lU2NhbGU9MTt0aGlzLnJlcGV0aXRpb25zPUluZmluaXR5O3RoaXMucGF1c2VkPSExO3RoaXMuZW5hYmxlZD0hMDt0aGlzLmNsYW1wV2hlbkZpbmlzaGVkPSExO3RoaXMuemVyb1Nsb3BlQXRFbmQ9dGhpcy56ZXJvU2xvcGVBdFN0YXJ0PSEwfWZ1bmN0aW9uIFllKGEpe3RoaXMuX3Jvb3Q9YTt0aGlzLl9pbml0TWVtb3J5TWFuYWdlcigpOwp0aGlzLnRpbWU9dGhpcy5fYWNjdUluZGV4PTA7dGhpcy50aW1lU2NhbGU9MX1mdW5jdGlvbiBKZChhLGIpeyJzdHJpbmciPT09dHlwZW9mIGEmJihjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IFR5cGUgcGFyYW1ldGVyIGlzIG5vIGxvbmdlciBuZWVkZWQuIiksYT1iKTt0aGlzLnZhbHVlPWF9ZnVuY3Rpb24gbWUoKXtJLmNhbGwodGhpcyk7dGhpcy50eXBlPSJJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSI7dGhpcy5tYXhJbnN0YW5jZWRDb3VudD12b2lkIDB9ZnVuY3Rpb24gbmUoYSxiLGMsZCl7dGhpcy51dWlkPVkuZ2VuZXJhdGVVVUlEKCk7dGhpcy5kYXRhPWE7dGhpcy5pdGVtU2l6ZT1iO3RoaXMub2Zmc2V0PWM7dGhpcy5ub3JtYWxpemVkPSEwPT09ZH1mdW5jdGlvbiBrYyhhLGIpe3RoaXMudXVpZD1ZLmdlbmVyYXRlVVVJRCgpO3RoaXMuYXJyYXk9YTt0aGlzLnN0cmlkZT1iO3RoaXMuY291bnQ9dm9pZCAwIT09YT9hLmxlbmd0aC9iOjA7dGhpcy5keW5hbWljPSExO3RoaXMudXBkYXRlUmFuZ2U9CntvZmZzZXQ6MCxjb3VudDotMX07dGhpcy5vblVwbG9hZENhbGxiYWNrPWZ1bmN0aW9uKCl7fTt0aGlzLnZlcnNpb249MH1mdW5jdGlvbiBvZShhLGIsYyl7a2MuY2FsbCh0aGlzLGEsYik7dGhpcy5tZXNoUGVyQXR0cmlidXRlPWN8fDF9ZnVuY3Rpb24gcGUoYSxiLGMpe0wuY2FsbCh0aGlzLGEsYik7dGhpcy5tZXNoUGVyQXR0cmlidXRlPWN8fDF9ZnVuY3Rpb24gWmUoYSxiLGMsZCl7dGhpcy5yYXk9bmV3IGhiKGEsYik7dGhpcy5uZWFyPWN8fDA7dGhpcy5mYXI9ZHx8SW5maW5pdHk7dGhpcy5wYXJhbXM9e01lc2g6e30sTGluZTp7fSxMT0Q6e30sUG9pbnRzOnt0aHJlc2hvbGQ6MX0sU3ByaXRlOnt9fTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLnBhcmFtcyx7UG9pbnRDbG91ZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5SYXljYXN0ZXI6IHBhcmFtcy5Qb2ludENsb3VkIGhhcyBiZWVuIHJlbmFtZWQgdG8gcGFyYW1zLlBvaW50cy4iKTtyZXR1cm4gdGhpcy5Qb2ludHN9fX0pfQpmdW5jdGlvbiAkZShhLGIpe3JldHVybiBhLmRpc3RhbmNlLWIuZGlzdGFuY2V9ZnVuY3Rpb24gcWUoYSxiLGMsZCl7aWYoITEhPT1hLnZpc2libGUmJihhLnJheWNhc3QoYixjKSwhMD09PWQpKXthPWEuY2hpbGRyZW47ZD0wO2Zvcih2YXIgZT1hLmxlbmd0aDtkPGU7ZCsrKXFlKGFbZF0sYixjLCEwKX19ZnVuY3Rpb24gYWYoYSl7dGhpcy5hdXRvU3RhcnQ9dm9pZCAwIT09YT9hOiEwO3RoaXMuZWxhcHNlZFRpbWU9dGhpcy5vbGRUaW1lPXRoaXMuc3RhcnRUaW1lPTA7dGhpcy5ydW5uaW5nPSExfWZ1bmN0aW9uIGJmKGEsYixjKXt0aGlzLnJhZGl1cz12b2lkIDAhPT1hP2E6MTt0aGlzLnBoaT12b2lkIDAhPT1iP2I6MDt0aGlzLnRoZXRhPXZvaWQgMCE9PWM/YzowO3JldHVybiB0aGlzfWZ1bmN0aW9uIGNmKGEsYixjKXt0aGlzLnJhZGl1cz12b2lkIDAhPT1hP2E6MTt0aGlzLnRoZXRhPXZvaWQgMCE9PWI/YjowO3RoaXMueT12b2lkIDAhPT1jP2M6MDtyZXR1cm4gdGhpc31mdW5jdGlvbiByYShhLApiKXtDYS5jYWxsKHRoaXMsYSxiKTt0aGlzLmFuaW1hdGlvbnNNYXA9e307dGhpcy5hbmltYXRpb25zTGlzdD1bXTt2YXIgYz10aGlzLmdlb21ldHJ5Lm1vcnBoVGFyZ2V0cy5sZW5ndGg7dGhpcy5jcmVhdGVBbmltYXRpb24oIl9fZGVmYXVsdCIsMCxjLTEsYy8xKTt0aGlzLnNldEFuaW1hdGlvbldlaWdodCgiX19kZWZhdWx0IiwxKX1mdW5jdGlvbiAkYyhhKXtCLmNhbGwodGhpcyk7dGhpcy5tYXRlcmlhbD1hO3RoaXMucmVuZGVyPWZ1bmN0aW9uKGEpe319ZnVuY3Rpb24gYWQoYSxiLGMsZCl7dGhpcy5vYmplY3Q9YTt0aGlzLnNpemU9dm9pZCAwIT09Yj9iOjE7YT12b2lkIDAhPT1jP2M6MTY3MTE2ODA7ZD12b2lkIDAhPT1kP2Q6MTtiPTA7KGM9dGhpcy5vYmplY3QuZ2VvbWV0cnkpJiZjLmlzR2VvbWV0cnk/Yj0zKmMuZmFjZXMubGVuZ3RoOmMmJmMuaXNCdWZmZXJHZW9tZXRyeSYmKGI9Yy5hdHRyaWJ1dGVzLm5vcm1hbC5jb3VudCk7Yz1uZXcgSTtiPW5ldyBDKDYqYiwzKTtjLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLApiKTtkYS5jYWxsKHRoaXMsYyxuZXcgaGEoe2NvbG9yOmEsbGluZXdpZHRoOmR9KSk7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gbGMoYSl7Qi5jYWxsKHRoaXMpO3RoaXMubGlnaHQ9YTt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7dGhpcy5tYXRyaXg9YS5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7YT1uZXcgSTtmb3IodmFyIGI9WzAsMCwwLDAsMCwxLDAsMCwwLDEsMCwxLDAsMCwwLC0xLDAsMSwwLDAsMCwwLDEsMSwwLDAsMCwwLC0xLDFdLGM9MCxkPTE7MzI+YztjKyssZCsrKXt2YXIgZT1jLzMyKk1hdGguUEkqMixmPWQvMzIqTWF0aC5QSSoyO2IucHVzaChNYXRoLmNvcyhlKSxNYXRoLnNpbihlKSwxLE1hdGguY29zKGYpLE1hdGguc2luKGYpLDEpfWEuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMoYiwzKSk7Yj1uZXcgaGEoe2ZvZzohMX0pO3RoaXMuY29uZT1uZXcgZGEoYSxiKTt0aGlzLmFkZCh0aGlzLmNvbmUpOwp0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIG1jKGEpe3RoaXMuYm9uZXM9dGhpcy5nZXRCb25lTGlzdChhKTtmb3IodmFyIGI9bmV3IEksYz1bXSxkPVtdLGU9bmV3IEgoMCwwLDEpLGY9bmV3IEgoMCwxLDApLGc9MDtnPHRoaXMuYm9uZXMubGVuZ3RoO2crKyl7dmFyIGg9dGhpcy5ib25lc1tnXTtoLnBhcmVudCYmaC5wYXJlbnQuaXNCb25lJiYoYy5wdXNoKDAsMCwwKSxjLnB1c2goMCwwLDApLGQucHVzaChlLnIsZS5nLGUuYiksZC5wdXNoKGYucixmLmcsZi5iKSl9Yi5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhjLDMpKTtiLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBDKGQsMykpO2M9bmV3IGhhKHt2ZXJ0ZXhDb2xvcnM6MixkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0cmFuc3BhcmVudDohMH0pO2RhLmNhbGwodGhpcyxiLGMpO3RoaXMucm9vdD1hO3RoaXMubWF0cml4PWEubWF0cml4V29ybGQ7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gbmMoYSwKYil7dGhpcy5saWdodD1hO3RoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTt2YXIgYz1uZXcgbmIoYiw0LDIpLGQ9bmV3IE5hKHt3aXJlZnJhbWU6ITAsZm9nOiExfSk7ZC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpO0NhLmNhbGwodGhpcyxjLGQpO3RoaXMubWF0cml4PXRoaXMubGlnaHQubWF0cml4V29ybGQ7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExfWZ1bmN0aW9uIG9jKGEpe0IuY2FsbCh0aGlzKTt0aGlzLmxpZ2h0PWE7dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO3RoaXMubWF0cml4PWEubWF0cml4V29ybGQ7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO2E9bmV3IGhhKHtjb2xvcjphLmNvbG9yfSk7dmFyIGI9bmV3IEk7Yi5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgTChuZXcgRmxvYXQzMkFycmF5KDE1KSwzKSk7dGhpcy5hZGQobmV3IHlhKGIsYSkpO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gcGMoYSxiKXtCLmNhbGwodGhpcyk7dGhpcy5saWdodD0KYTt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7dGhpcy5tYXRyaXg9YS5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7dmFyIGM9bmV3IG1iKGIpO2Mucm90YXRlWSguNSpNYXRoLlBJKTt2YXIgZD1uZXcgTmEoe3ZlcnRleENvbG9yczoyLHdpcmVmcmFtZTohMH0pLGU9Yy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIiksZT1uZXcgRmxvYXQzMkFycmF5KDMqZS5jb3VudCk7Yy5hZGRBdHRyaWJ1dGUoImNvbG9yIixuZXcgTChlLDMpKTt0aGlzLmFkZChuZXcgQ2EoYyxkKSk7dGhpcy51cGRhdGUoKX1mdW5jdGlvbiBiZChhLGIsYyxkKXthPWF8fDEwO2I9Ynx8MTA7Yz1uZXcgSCh2b2lkIDAhPT1jP2M6NDQ3MzkyNCk7ZD1uZXcgSCh2b2lkIDAhPT1kP2Q6ODk0Nzg0OCk7dmFyIGU9Yi8yLGY9YS9iLGc9YS8yO2E9W107Zm9yKHZhciBoPVtdLGs9MCxtPTAsdT0tZztrPD1iO2srKyx1Kz1mKXthLnB1c2goLWcsMCx1LGcsMCx1KTthLnB1c2godSwwLC1nLHUsMCxnKTsKdmFyIGw9az09PWU/YzpkO2wudG9BcnJheShoLG0pO20rPTM7bC50b0FycmF5KGgsbSk7bSs9MztsLnRvQXJyYXkoaCxtKTttKz0zO2wudG9BcnJheShoLG0pO20rPTN9Yj1uZXcgSTtiLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGEsMykpO2IuYWRkQXR0cmlidXRlKCJjb2xvciIsbmV3IEMoaCwzKSk7Yz1uZXcgaGEoe3ZlcnRleENvbG9yczoyfSk7ZGEuY2FsbCh0aGlzLGIsYyl9ZnVuY3Rpb24gS2QoYSxiLGMsZCxlLGYpe2E9YXx8MTA7Yj1ifHwxNjtjPWN8fDg7ZD1kfHw2NDtlPW5ldyBIKHZvaWQgMCE9PWU/ZTo0NDczOTI0KTtmPW5ldyBIKHZvaWQgMCE9PWY/Zjo4OTQ3ODQ4KTt2YXIgZz1bXSxoPVtdLGssbSx1LGwsbjtmb3IodT0wO3U8PWI7dSsrKW09dS9iKjIqTWF0aC5QSSxrPU1hdGguc2luKG0pKmEsbT1NYXRoLmNvcyhtKSphLGcucHVzaCgwLDAsMCksZy5wdXNoKGssMCxtKSxuPXUmMT9lOmYsaC5wdXNoKG4ucixuLmcsbi5iKSxoLnB1c2gobi5yLG4uZyxuLmIpOwpmb3IodT0wO3U8PWM7dSsrKWZvcihuPXUmMT9lOmYsbD1hLWEvYyp1LGI9MDtiPGQ7YisrKW09Yi9kKjIqTWF0aC5QSSxrPU1hdGguc2luKG0pKmwsbT1NYXRoLmNvcyhtKSpsLGcucHVzaChrLDAsbSksaC5wdXNoKG4ucixuLmcsbi5iKSxtPShiKzEpL2QqMipNYXRoLlBJLGs9TWF0aC5zaW4obSkqbCxtPU1hdGguY29zKG0pKmwsZy5wdXNoKGssMCxtKSxoLnB1c2gobi5yLG4uZyxuLmIpO2E9bmV3IEk7YS5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhnLDMpKTthLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBDKGgsMykpO2c9bmV3IGhhKHt2ZXJ0ZXhDb2xvcnM6Mn0pO2RhLmNhbGwodGhpcyxhLGcpfWZ1bmN0aW9uIGNkKGEsYixjLGQpe3RoaXMub2JqZWN0PWE7dGhpcy5zaXplPXZvaWQgMCE9PWI/YjoxO2E9dm9pZCAwIT09Yz9jOjE2Nzc2OTYwO2Q9dm9pZCAwIT09ZD9kOjE7Yj0wOyhjPXRoaXMub2JqZWN0Lmdlb21ldHJ5KSYmYy5pc0dlb21ldHJ5P2I9Yy5mYWNlcy5sZW5ndGg6CmNvbnNvbGUud2FybigiVEhSRUUuRmFjZU5vcm1hbHNIZWxwZXI6IG9ubHkgVEhSRUUuR2VvbWV0cnkgaXMgc3VwcG9ydGVkLiBVc2UgVEhSRUUuVmVydGV4Tm9ybWFsc0hlbHBlciwgaW5zdGVhZC4iKTtjPW5ldyBJO2I9bmV3IEMoNipiLDMpO2MuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsYik7ZGEuY2FsbCh0aGlzLGMsbmV3IGhhKHtjb2xvcjphLGxpbmV3aWR0aDpkfSkpO3RoaXMubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIHFjKGEsYil7Qi5jYWxsKHRoaXMpO3RoaXMubGlnaHQ9YTt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7dGhpcy5tYXRyaXg9YS5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7dm9pZCAwPT09YiYmKGI9MSk7dmFyIGM9bmV3IEk7Yy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhbLWIsYiwwLGIsYiwwLGIsLWIsMCwtYiwtYiwwLC1iLGIsMF0sMykpO3ZhciBkPW5ldyBoYSh7Zm9nOiExfSk7CnRoaXMuYWRkKG5ldyB5YShjLGQpKTtjPW5ldyBJO2MuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMoWzAsMCwwLDAsMCwxXSwzKSk7dGhpcy5hZGQobmV3IHlhKGMsZCkpO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gZGQoYSl7ZnVuY3Rpb24gYihhLGIsZCl7YyhhLGQpO2MoYixkKX1mdW5jdGlvbiBjKGEsYil7Zi5wdXNoKDAsMCwwKTtnLnB1c2goYi5yLGIuZyxiLmIpO3ZvaWQgMD09PWhbYV0mJihoW2FdPVtdKTtoW2FdLnB1c2goZi5sZW5ndGgvMy0xKX12YXIgZD1uZXcgSSxlPW5ldyBoYSh7Y29sb3I6MTY3NzcyMTUsdmVydGV4Q29sb3JzOjF9KSxmPVtdLGc9W10saD17fSxrPW5ldyBIKDE2NzU1MjAwKSxtPW5ldyBIKDE2NzExNjgwKSx1PW5ldyBIKDQzNzc1KSxsPW5ldyBIKDE2Nzc3MjE1KSxuPW5ldyBIKDMzNTU0NDMpO2IoIm4xIiwibjIiLGspO2IoIm4yIiwibjQiLGspO2IoIm40IiwibjMiLGspO2IoIm4zIiwibjEiLGspO2IoImYxIiwiZjIiLGspO2IoImYyIiwiZjQiLAprKTtiKCJmNCIsImYzIixrKTtiKCJmMyIsImYxIixrKTtiKCJuMSIsImYxIixrKTtiKCJuMiIsImYyIixrKTtiKCJuMyIsImYzIixrKTtiKCJuNCIsImY0IixrKTtiKCJwIiwibjEiLG0pO2IoInAiLCJuMiIsbSk7YigicCIsIm4zIixtKTtiKCJwIiwibjQiLG0pO2IoInUxIiwidTIiLHUpO2IoInUyIiwidTMiLHUpO2IoInUzIiwidTEiLHUpO2IoImMiLCJ0IixsKTtiKCJwIiwiYyIsbik7YigiY24xIiwiY24yIixuKTtiKCJjbjMiLCJjbjQiLG4pO2IoImNmMSIsImNmMiIsbik7YigiY2YzIiwiY2Y0IixuKTtkLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGYsMykpO2QuYWRkQXR0cmlidXRlKCJjb2xvciIsbmV3IEMoZywzKSk7ZGEuY2FsbCh0aGlzLGQsZSk7dGhpcy5jYW1lcmE9YTt0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4JiZ0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7dGhpcy5tYXRyaXg9YS5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9CiExO3RoaXMucG9pbnRNYXA9aDt0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIEJiKGEsYil7dGhpcy5vYmplY3Q9YTt2b2lkIDA9PT1iJiYoYj0xNjc3Njk2MCk7dmFyIGM9bmV3IFVpbnQxNkFycmF5KFswLDEsMSwyLDIsMywzLDAsNCw1LDUsNiw2LDcsNyw0LDAsNCwxLDUsMiw2LDMsN10pLGQ9bmV3IEZsb2F0MzJBcnJheSgyNCksZT1uZXcgSTtlLnNldEluZGV4KG5ldyBMKGMsMSkpO2UuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEwoZCwzKSk7ZGEuY2FsbCh0aGlzLGUsbmV3IGhhKHtjb2xvcjpifSkpO3RoaXMubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIENiKGEsYixjLGQsZSxmKXtCLmNhbGwodGhpcyk7dm9pZCAwPT09ZCYmKGQ9MTY3NzY5NjApO3ZvaWQgMD09PWMmJihjPTEpO3ZvaWQgMD09PWUmJihlPS4yKmMpO3ZvaWQgMD09PWYmJihmPS4yKmUpO3ZvaWQgMD09PUxkJiYoTGQ9bmV3IEksTGQuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEMoWzAsCjAsMCwwLDEsMF0sMykpLHJlPW5ldyBXYSgwLC41LDEsNSwxKSxyZS50cmFuc2xhdGUoMCwtLjUsMCkpO3RoaXMucG9zaXRpb24uY29weShiKTt0aGlzLmxpbmU9bmV3IHlhKExkLG5ldyBoYSh7Y29sb3I6ZH0pKTt0aGlzLmxpbmUubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLmFkZCh0aGlzLmxpbmUpO3RoaXMuY29uZT1uZXcgQ2EocmUsbmV3IE5hKHtjb2xvcjpkfSkpO3RoaXMuY29uZS5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMuYWRkKHRoaXMuY29uZSk7dGhpcy5zZXREaXJlY3Rpb24oYSk7dGhpcy5zZXRMZW5ndGgoYyxlLGYpfWZ1bmN0aW9uIE1kKGEpe2E9YXx8MTt2YXIgYj1bMCwwLDAsYSwwLDAsMCwwLDAsMCxhLDAsMCwwLDAsMCwwLGFdO2E9bmV3IEk7YS5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQyhiLDMpKTthLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBDKFsxLDAsMCwxLC42LDAsMCwxLDAsLjYsMSwwLDAsMCwxLDAsLjYsMV0sMykpO2I9bmV3IGhhKHt2ZXJ0ZXhDb2xvcnM6Mn0pOwpkYS5jYWxsKHRoaXMsYSxiKX1mdW5jdGlvbiBzZSgpe3ZhciBhPTAsYj0wLGM9MCxkPTA7cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKGUsZixnLGgsayl7ZT1rKihnLWUpO2g9ayooaC1mKTthPWY7Yj1lO2M9LTMqZiszKmctMiplLWg7ZD0yKmYtMipnK2UraH0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKGUsZixnLGgsayxtLHUpe2U9KChmLWUpL2stKGctZSkvKGsrbSkrKGctZikvbSkqbTtoPSgoZy1mKS9tLShoLWYpLyhtK3UpKyhoLWcpL3UpKm07YT1mO2I9ZTtjPS0zKmYrMypnLTIqZS1oO2Q9MipmLTIqZytlK2h9LGNhbGM6ZnVuY3Rpb24oZSl7dmFyIGY9ZSplO3JldHVybiBhK2IqZStjKmYrZCpmKmV9fX1mdW5jdGlvbiBKYShhKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDA7dGhpcy5wb2ludHM9YXx8W107dGhpcy5jbG9zZWQ9ITF9ZnVuY3Rpb24gZWQoYSxiLGMsZCl7dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwO3RoaXMudjA9YTt0aGlzLnYxPQpiO3RoaXMudjI9Yzt0aGlzLnYzPWR9ZnVuY3Rpb24gZmQoYSxiLGMpe3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMDt0aGlzLnYwPWE7dGhpcy52MT1iO3RoaXMudjI9Y31mdW5jdGlvbiBnZChhLGIpe3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMDt0aGlzLnYxPWE7dGhpcy52Mj1ifWZ1bmN0aW9uIE5kKGEsYixjLGQsZSxmKXtYYS5jYWxsKHRoaXMsYSxiLGMsYyxkLGUsZil9ZnVuY3Rpb24gZGYoYSl7Y29uc29sZS53YXJuKCJUSFJFRS5DbG9zZWRTcGxpbmVDdXJ2ZTMgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkNhdG11bGxSb21DdXJ2ZTMgaW5zdGVhZC4iKTtKYS5jYWxsKHRoaXMsYSk7dGhpcy50eXBlPSJjYXRtdWxscm9tIjt0aGlzLmNsb3NlZD0hMH1mdW5jdGlvbiBlZihhKXtjb25zb2xlLndhcm4oIlRIUkVFLlNwbGluZUN1cnZlMyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ2F0bXVsbFJvbUN1cnZlMyBpbnN0ZWFkLiIpO0phLmNhbGwodGhpcywKYSk7dGhpcy50eXBlPSJjYXRtdWxscm9tIn1mdW5jdGlvbiB0ZShhKXtjb25zb2xlLndhcm4oIlRIUkVFLlNwbGluZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuQ2F0bXVsbFJvbUN1cnZlMyBpbnN0ZWFkLiIpO0phLmNhbGwodGhpcyxhKTt0aGlzLnR5cGU9ImNhdG11bGxyb20ifXZvaWQgMD09PU51bWJlci5FUFNJTE9OJiYoTnVtYmVyLkVQU0lMT049TWF0aC5wb3coMiwtNTIpKTt2b2lkIDA9PT1OdW1iZXIuaXNJbnRlZ2VyJiYoTnVtYmVyLmlzSW50ZWdlcj1mdW5jdGlvbihhKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBhJiZpc0Zpbml0ZShhKSYmTWF0aC5mbG9vcihhKT09PWF9KTt2b2lkIDA9PT1NYXRoLnNpZ24mJihNYXRoLnNpZ249ZnVuY3Rpb24oYSl7cmV0dXJuIDA+YT8tMTowPGE/MTorYX0pO3ZvaWQgMD09PUZ1bmN0aW9uLnByb3RvdHlwZS5uYW1lJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCJuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoKS5tYXRjaCgvXlxzKmZ1bmN0aW9uXHMqKFteXChcc10qKS8pWzFdfX0pOwp2b2lkIDA9PT1PYmplY3QuYXNzaWduJiZmdW5jdGlvbigpe09iamVjdC5hc3NpZ249ZnVuY3Rpb24oYSl7aWYodm9pZCAwPT09YXx8bnVsbD09PWEpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Iik7Zm9yKHZhciBiPU9iamVjdChhKSxjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7dmFyIGQ9YXJndW1lbnRzW2NdO2lmKHZvaWQgMCE9PWQmJm51bGwhPT1kKWZvcih2YXIgZSBpbiBkKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLGUpJiYoYltlXT1kW2VdKX1yZXR1cm4gYn19KCk7T2JqZWN0LmFzc2lnbihzYS5wcm90b3R5cGUse2FkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMmJih0aGlzLl9saXN0ZW5lcnM9e30pO3ZhciBjPXRoaXMuX2xpc3RlbmVyczt2b2lkIDA9PT1jW2FdJiYoY1thXT1bXSk7LTE9PT1jW2FdLmluZGV4T2YoYikmJmNbYV0ucHVzaChiKX0sCmhhc0V2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuITE7dmFyIGM9dGhpcy5fbGlzdGVuZXJzO3JldHVybiB2b2lkIDAhPT1jW2FdJiYtMSE9PWNbYV0uaW5kZXhPZihiKX0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe2lmKHZvaWQgMCE9PXRoaXMuX2xpc3RlbmVycyl7dmFyIGM9dGhpcy5fbGlzdGVuZXJzW2FdO2lmKHZvaWQgMCE9PWMpe3ZhciBkPWMuaW5kZXhPZihiKTstMSE9PWQmJmMuc3BsaWNlKGQsMSl9fX0sZGlzcGF0Y2hFdmVudDpmdW5jdGlvbihhKXtpZih2b2lkIDAhPT10aGlzLl9saXN0ZW5lcnMpe3ZhciBiPXRoaXMuX2xpc3RlbmVyc1thLnR5cGVdO2lmKHZvaWQgMCE9PWIpe2EudGFyZ2V0PXRoaXM7dmFyIGM9W10sZCxlPWIubGVuZ3RoO2ZvcihkPTA7ZDxlO2QrKyljW2RdPWJbZF07Zm9yKGQ9MDtkPGU7ZCsrKWNbZF0uY2FsbCh0aGlzLGEpfX19fSk7dmFyIFk9e0RFRzJSQUQ6TWF0aC5QSS8KMTgwLFJBRDJERUc6MTgwL01hdGguUEksZ2VuZXJhdGVVVUlEOmZ1bmN0aW9uKCl7dmFyIGE9IjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ii5zcGxpdCgiIiksYj1BcnJheSgzNiksYz0wLGQ7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7MzY+ZTtlKyspOD09PWV8fDEzPT09ZXx8MTg9PT1lfHwyMz09PWU/YltlXT0iLSI6MTQ9PT1lP2JbZV09IjQiOigyPj1jJiYoYz0zMzU1NDQzMisxNjc3NzIxNipNYXRoLnJhbmRvbSgpfDApLGQ9YyYxNSxjPj49NCxiW2VdPWFbMTk9PT1lP2QmM3w4OmRdKTtyZXR1cm4gYi5qb2luKCIiKX19KCksY2xhbXA6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBNYXRoLm1heChiLE1hdGgubWluKGMsYSkpfSxldWNsaWRlYW5Nb2R1bG86ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYSViK2IpJWJ9LG1hcExpbmVhcjpmdW5jdGlvbihhLGIsYyxkLGUpe3JldHVybiBkKyhhLWIpKihlLWQpLyhjLQpiKX0sbGVycDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuKDEtYykqYStjKmJ9LHNtb290aHN0ZXA6ZnVuY3Rpb24oYSxiLGMpe2lmKGE8PWIpcmV0dXJuIDA7aWYoYT49YylyZXR1cm4gMTthPShhLWIpLyhjLWIpO3JldHVybiBhKmEqKDMtMiphKX0sc21vb3RoZXJzdGVwOmZ1bmN0aW9uKGEsYixjKXtpZihhPD1iKXJldHVybiAwO2lmKGE+PWMpcmV0dXJuIDE7YT0oYS1iKS8oYy1iKTtyZXR1cm4gYSphKmEqKGEqKDYqYS0xNSkrMTApfSxyYW5kSW50OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGErTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihiLWErMSkpfSxyYW5kRmxvYXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYStNYXRoLnJhbmRvbSgpKihiLWEpfSxyYW5kRmxvYXRTcHJlYWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEqKC41LU1hdGgucmFuZG9tKCkpfSxkZWdUb1JhZDpmdW5jdGlvbihhKXtyZXR1cm4gYSpZLkRFRzJSQUR9LHJhZFRvRGVnOmZ1bmN0aW9uKGEpe3JldHVybiBhKlkuUkFEMkRFR30sCmlzUG93ZXJPZlR3bzpmdW5jdGlvbihhKXtyZXR1cm4gMD09PShhJmEtMSkmJjAhPT1hfSxuZWFyZXN0UG93ZXJPZlR3bzpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLnJvdW5kKE1hdGgubG9nKGEpL01hdGguTE4yKSl9LG5leHRQb3dlck9mVHdvOmZ1bmN0aW9uKGEpe2EtLTthfD1hPj4xO2F8PWE+PjI7YXw9YT4+NDthfD1hPj44O2F8PWE+PjE2O2ErKztyZXR1cm4gYX19O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEQucHJvdG90eXBlLHt3aWR0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMueD1hfX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy55PWF9fX0pO09iamVjdC5hc3NpZ24oRC5wcm90b3R5cGUse2lzVmVjdG9yMjohMCxzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLng9YTt0aGlzLnk9YjtyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueT0KdGhpcy54PWE7cmV0dXJuIHRoaXN9LHNldFg6ZnVuY3Rpb24oYSl7dGhpcy54PWE7cmV0dXJuIHRoaXN9LHNldFk6ZnVuY3Rpb24oYSl7dGhpcy55PWE7cmV0dXJuIHRoaXN9LHNldENvbXBvbmVudDpmdW5jdGlvbihhLGIpe3N3aXRjaChhKXtjYXNlIDA6dGhpcy54PWI7YnJlYWs7Y2FzZSAxOnRoaXMueT1iO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIithKTt9cmV0dXJuIHRoaXN9LGdldENvbXBvbmVudDpmdW5jdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK2EpO319LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnkpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMueD1hLng7dGhpcy55PWEueTtyZXR1cm4gdGhpc30sYWRkOmZ1bmN0aW9uKGEsCmIpe2lmKHZvaWQgMCE9PWIpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyhhLGIpO3RoaXMueCs9YS54O3RoaXMueSs9YS55O3JldHVybiB0aGlzfSxhZGRTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy54Kz1hO3RoaXMueSs9YTtyZXR1cm4gdGhpc30sYWRkVmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngrYi54O3RoaXMueT1hLnkrYi55O3JldHVybiB0aGlzfSxhZGRTY2FsZWRWZWN0b3I6ZnVuY3Rpb24oYSxiKXt0aGlzLngrPWEueCpiO3RoaXMueSs9YS55KmI7cmV0dXJuIHRoaXN9LHN1YjpmdW5jdGlvbihhLGIpe2lmKHZvaWQgMCE9PWIpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLAp0aGlzLnN1YlZlY3RvcnMoYSxiKTt0aGlzLngtPWEueDt0aGlzLnktPWEueTtyZXR1cm4gdGhpc30sc3ViU2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueC09YTt0aGlzLnktPWE7cmV0dXJuIHRoaXN9LHN1YlZlY3RvcnM6ZnVuY3Rpb24oYSxiKXt0aGlzLng9YS54LWIueDt0aGlzLnk9YS55LWIueTtyZXR1cm4gdGhpc30sbXVsdGlwbHk6ZnVuY3Rpb24oYSl7dGhpcy54Kj1hLng7dGhpcy55Kj1hLnk7cmV0dXJuIHRoaXN9LG11bHRpcGx5U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueCo9YTt0aGlzLnkqPWE7cmV0dXJuIHRoaXN9LGRpdmlkZTpmdW5jdGlvbihhKXt0aGlzLngvPWEueDt0aGlzLnkvPWEueTtyZXR1cm4gdGhpc30sZGl2aWRlU2NhbGFyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvYSl9LG1pbjpmdW5jdGlvbihhKXt0aGlzLng9TWF0aC5taW4odGhpcy54LGEueCk7dGhpcy55PU1hdGgubWluKHRoaXMueSxhLnkpO3JldHVybiB0aGlzfSxtYXg6ZnVuY3Rpb24oYSl7dGhpcy54PQpNYXRoLm1heCh0aGlzLngsYS54KTt0aGlzLnk9TWF0aC5tYXgodGhpcy55LGEueSk7cmV0dXJuIHRoaXN9LGNsYW1wOmZ1bmN0aW9uKGEsYil7dGhpcy54PU1hdGgubWF4KGEueCxNYXRoLm1pbihiLngsdGhpcy54KSk7dGhpcy55PU1hdGgubWF4KGEueSxNYXRoLm1pbihiLnksdGhpcy55KSk7cmV0dXJuIHRoaXN9LGNsYW1wU2NhbGFyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEQsYj1uZXcgRDtyZXR1cm4gZnVuY3Rpb24oYyxkKXthLnNldChjLGMpO2Iuc2V0KGQsZCk7cmV0dXJuIHRoaXMuY2xhbXAoYSxiKX19KCksY2xhbXBMZW5ndGg6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KGEsTWF0aC5taW4oYixjKSkvYyl9LGZsb29yOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGguZmxvb3IodGhpcy54KTt0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpO3JldHVybiB0aGlzfSxjZWlsOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGguY2VpbCh0aGlzLngpOwp0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSk7cmV0dXJuIHRoaXN9LHJvdW5kOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGgucm91bmQodGhpcy54KTt0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpO3JldHVybiB0aGlzfSxyb3VuZFRvWmVybzpmdW5jdGlvbigpe3RoaXMueD0wPnRoaXMueD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCk7dGhpcy55PTA+dGhpcy55P01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KTtyZXR1cm4gdGhpc30sbmVnYXRlOmZ1bmN0aW9uKCl7dGhpcy54PS10aGlzLng7dGhpcy55PS10aGlzLnk7cmV0dXJuIHRoaXN9LGRvdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy54KmEueCt0aGlzLnkqYS55fSxsZW5ndGhTcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnl9LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55KX0sbGVuZ3RoTWFuaGF0dGFuOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrCk1hdGguYWJzKHRoaXMueSl9LG5vcm1hbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpKX0sYW5nbGU6ZnVuY3Rpb24oKXt2YXIgYT1NYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpOzA+YSYmKGErPTIqTWF0aC5QSSk7cmV0dXJuIGF9LGRpc3RhbmNlVG86ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKGEpKX0sZGlzdGFuY2VUb1NxdWFyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54LWEueDthPXRoaXMueS1hLnk7cmV0dXJuIGIqYithKmF9LGRpc3RhbmNlVG9NYW5oYXR0YW46ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC1hLngpK01hdGguYWJzKHRoaXMueS1hLnkpfSxzZXRMZW5ndGg6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoYS90aGlzLmxlbmd0aCgpKX0sbGVycDpmdW5jdGlvbihhLGIpe3RoaXMueCs9KGEueC10aGlzLngpKmI7dGhpcy55Kz0KKGEueS10aGlzLnkpKmI7cmV0dXJuIHRoaXN9LGxlcnBWZWN0b3JzOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5zdWJWZWN0b3JzKGIsYSkubXVsdGlwbHlTY2FsYXIoYykuYWRkKGEpfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEueD09PXRoaXMueCYmYS55PT09dGhpcy55fSxmcm9tQXJyYXk6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0wKTt0aGlzLng9YVtiXTt0aGlzLnk9YVtiKzFdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YSYmKGE9W10pO3ZvaWQgMD09PWImJihiPTApO2FbYl09dGhpcy54O2FbYisxXT10aGlzLnk7cmV0dXJuIGF9LGZyb21CdWZmZXJBdHRyaWJ1dGU6ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMCE9PWMmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpO3RoaXMueD1hLmdldFgoYik7dGhpcy55PWEuZ2V0WShiKTsKcmV0dXJuIHRoaXN9LHJvdGF0ZUFyb3VuZDpmdW5jdGlvbihhLGIpe3ZhciBjPU1hdGguY29zKGIpLGQ9TWF0aC5zaW4oYiksZT10aGlzLngtYS54LGY9dGhpcy55LWEueTt0aGlzLng9ZSpjLWYqZCthLng7dGhpcy55PWUqZCtmKmMrYS55O3JldHVybiB0aGlzfX0pO3ZhciBqZj0wO1guREVGQVVMVF9JTUFHRT12b2lkIDA7WC5ERUZBVUxUX01BUFBJTkc9MzAwO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLnByb3RvdHlwZSwibmVlZHNVcGRhdGUiLHtzZXQ6ZnVuY3Rpb24oYSl7ITA9PT1hJiZ0aGlzLnZlcnNpb24rK319KTtPYmplY3QuYXNzaWduKFgucHJvdG90eXBlLHNhLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6WCxpc1RleHR1cmU6ITAsY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5uYW1lPWEubmFtZTt0aGlzLmltYWdlPWEuaW1hZ2U7dGhpcy5taXBtYXBzPWEubWlwbWFwcy5zbGljZSgwKTsKdGhpcy5tYXBwaW5nPWEubWFwcGluZzt0aGlzLndyYXBTPWEud3JhcFM7dGhpcy53cmFwVD1hLndyYXBUO3RoaXMubWFnRmlsdGVyPWEubWFnRmlsdGVyO3RoaXMubWluRmlsdGVyPWEubWluRmlsdGVyO3RoaXMuYW5pc290cm9weT1hLmFuaXNvdHJvcHk7dGhpcy5mb3JtYXQ9YS5mb3JtYXQ7dGhpcy50eXBlPWEudHlwZTt0aGlzLm9mZnNldC5jb3B5KGEub2Zmc2V0KTt0aGlzLnJlcGVhdC5jb3B5KGEucmVwZWF0KTt0aGlzLmdlbmVyYXRlTWlwbWFwcz1hLmdlbmVyYXRlTWlwbWFwczt0aGlzLnByZW11bHRpcGx5QWxwaGE9YS5wcmVtdWx0aXBseUFscGhhO3RoaXMuZmxpcFk9YS5mbGlwWTt0aGlzLnVucGFja0FsaWdubWVudD1hLnVucGFja0FsaWdubWVudDt0aGlzLmVuY29kaW5nPWEuZW5jb2Rpbmc7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihhKXtpZih2b2lkIDAhPT1hLnRleHR1cmVzW3RoaXMudXVpZF0pcmV0dXJuIGEudGV4dHVyZXNbdGhpcy51dWlkXTt2YXIgYj17bWV0YWRhdGE6e3ZlcnNpb246NC41LAp0eXBlOiJUZXh0dXJlIixnZW5lcmF0b3I6IlRleHR1cmUudG9KU09OIn0sdXVpZDp0aGlzLnV1aWQsbmFtZTp0aGlzLm5hbWUsbWFwcGluZzp0aGlzLm1hcHBpbmcscmVwZWF0Olt0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnldLG9mZnNldDpbdGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55XSx3cmFwOlt0aGlzLndyYXBTLHRoaXMud3JhcFRdLG1pbkZpbHRlcjp0aGlzLm1pbkZpbHRlcixtYWdGaWx0ZXI6dGhpcy5tYWdGaWx0ZXIsYW5pc290cm9weTp0aGlzLmFuaXNvdHJvcHksZmxpcFk6dGhpcy5mbGlwWX07aWYodm9pZCAwIT09dGhpcy5pbWFnZSl7dmFyIGM9dGhpcy5pbWFnZTt2b2lkIDA9PT1jLnV1aWQmJihjLnV1aWQ9WS5nZW5lcmF0ZVVVSUQoKSk7aWYodm9pZCAwPT09YS5pbWFnZXNbYy51dWlkXSl7dmFyIGQ9YS5pbWFnZXMsZT1jLnV1aWQsZj1jLnV1aWQsZzt2b2lkIDAhPT1jLnRvRGF0YVVSTD9nPWM6KGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwKImNhbnZhcyIpLGcud2lkdGg9Yy53aWR0aCxnLmhlaWdodD1jLmhlaWdodCxnLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKGMsMCwwLGMud2lkdGgsYy5oZWlnaHQpKTtnPTIwNDg8Zy53aWR0aHx8MjA0ODxnLmhlaWdodD9nLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpOmcudG9EYXRhVVJMKCJpbWFnZS9wbmciKTtkW2VdPXt1dWlkOmYsdXJsOmd9fWIuaW1hZ2U9Yy51dWlkfXJldHVybiBhLnRleHR1cmVzW3RoaXMudXVpZF09Yn0sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX0sdHJhbnNmb3JtVXY6ZnVuY3Rpb24oYSl7aWYoMzAwPT09dGhpcy5tYXBwaW5nKXthLm11bHRpcGx5KHRoaXMucmVwZWF0KTthLmFkZCh0aGlzLm9mZnNldCk7aWYoMD5hLnh8fDE8YS54KXN3aXRjaCh0aGlzLndyYXBTKXtjYXNlIDFFMzphLngtPU1hdGguZmxvb3IoYS54KTticmVhaztjYXNlIDEwMDE6YS54PTA+YS54PzA6MTticmVhaztjYXNlIDEwMDI6YS54PQoxPT09TWF0aC5hYnMoTWF0aC5mbG9vcihhLngpJTIpP01hdGguY2VpbChhLngpLWEueDphLngtTWF0aC5mbG9vcihhLngpfWlmKDA+YS55fHwxPGEueSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSAxRTM6YS55LT1NYXRoLmZsb29yKGEueSk7YnJlYWs7Y2FzZSAxMDAxOmEueT0wPmEueT8wOjE7YnJlYWs7Y2FzZSAxMDAyOmEueT0xPT09TWF0aC5hYnMoTWF0aC5mbG9vcihhLnkpJTIpP01hdGguY2VpbChhLnkpLWEueTphLnktTWF0aC5mbG9vcihhLnkpfXRoaXMuZmxpcFkmJihhLnk9MS1hLnkpfX19KTtPYmplY3QuYXNzaWduKGdhLnByb3RvdHlwZSx7aXNWZWN0b3I0OiEwLHNldDpmdW5jdGlvbihhLGIsYyxkKXt0aGlzLng9YTt0aGlzLnk9Yjt0aGlzLno9Yzt0aGlzLnc9ZDtyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMudz10aGlzLno9dGhpcy55PXRoaXMueD1hO3JldHVybiB0aGlzfSxzZXRYOmZ1bmN0aW9uKGEpe3RoaXMueD1hO3JldHVybiB0aGlzfSwKc2V0WTpmdW5jdGlvbihhKXt0aGlzLnk9YTtyZXR1cm4gdGhpc30sc2V0WjpmdW5jdGlvbihhKXt0aGlzLno9YTtyZXR1cm4gdGhpc30sc2V0VzpmdW5jdGlvbihhKXt0aGlzLnc9YTtyZXR1cm4gdGhpc30sc2V0Q29tcG9uZW50OmZ1bmN0aW9uKGEsYil7c3dpdGNoKGEpe2Nhc2UgMDp0aGlzLng9YjticmVhaztjYXNlIDE6dGhpcy55PWI7YnJlYWs7Y2FzZSAyOnRoaXMuej1iO2JyZWFrO2Nhc2UgMzp0aGlzLnc9YjticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrYSk7fXJldHVybiB0aGlzfSxnZXRDb21wb25lbnQ6ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIithKTt9fSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsCnRoaXMueSx0aGlzLnosdGhpcy53KX0sY29weTpmdW5jdGlvbihhKXt0aGlzLng9YS54O3RoaXMueT1hLnk7dGhpcy56PWEuejt0aGlzLnc9dm9pZCAwIT09YS53P2EudzoxO3JldHVybiB0aGlzfSxhZGQ6ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDAhPT1iKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnMoYSxiKTt0aGlzLngrPWEueDt0aGlzLnkrPWEueTt0aGlzLnorPWEuejt0aGlzLncrPWEudztyZXR1cm4gdGhpc30sYWRkU2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueCs9YTt0aGlzLnkrPWE7dGhpcy56Kz1hO3RoaXMudys9YTtyZXR1cm4gdGhpc30sYWRkVmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngrYi54O3RoaXMueT1hLnkrYi55O3RoaXMuej1hLnorYi56O3RoaXMudz1hLncrYi53O3JldHVybiB0aGlzfSwKYWRkU2NhbGVkVmVjdG9yOmZ1bmN0aW9uKGEsYil7dGhpcy54Kz1hLngqYjt0aGlzLnkrPWEueSpiO3RoaXMueis9YS56KmI7dGhpcy53Kz1hLncqYjtyZXR1cm4gdGhpc30sc3ViOmZ1bmN0aW9uKGEsYil7aWYodm9pZCAwIT09YilyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKGEsYik7dGhpcy54LT1hLng7dGhpcy55LT1hLnk7dGhpcy56LT1hLno7dGhpcy53LT1hLnc7cmV0dXJuIHRoaXN9LHN1YlNjYWxhcjpmdW5jdGlvbihhKXt0aGlzLngtPWE7dGhpcy55LT1hO3RoaXMuei09YTt0aGlzLnctPWE7cmV0dXJuIHRoaXN9LHN1YlZlY3RvcnM6ZnVuY3Rpb24oYSxiKXt0aGlzLng9YS54LWIueDt0aGlzLnk9YS55LWIueTt0aGlzLno9YS56LWIuejt0aGlzLnc9YS53LWIudztyZXR1cm4gdGhpc30sbXVsdGlwbHlTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy54Kj0KYTt0aGlzLnkqPWE7dGhpcy56Kj1hO3RoaXMudyo9YTtyZXR1cm4gdGhpc30sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMueCxjPXRoaXMueSxkPXRoaXMueixlPXRoaXMudzthPWEuZWxlbWVudHM7dGhpcy54PWFbMF0qYithWzRdKmMrYVs4XSpkK2FbMTJdKmU7dGhpcy55PWFbMV0qYithWzVdKmMrYVs5XSpkK2FbMTNdKmU7dGhpcy56PWFbMl0qYithWzZdKmMrYVsxMF0qZCthWzE0XSplO3RoaXMudz1hWzNdKmIrYVs3XSpjK2FbMTFdKmQrYVsxNV0qZTtyZXR1cm4gdGhpc30sZGl2aWRlU2NhbGFyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvYSl9LHNldEF4aXNBbmdsZUZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKGEpe3RoaXMudz0yKk1hdGguYWNvcyhhLncpO3ZhciBiPU1hdGguc3FydCgxLWEudyphLncpOzFFLTQ+Yj8odGhpcy54PTEsdGhpcy56PXRoaXMueT0wKToodGhpcy54PWEueC9iLHRoaXMueT1hLnkvYix0aGlzLno9YS56LwpiKTtyZXR1cm4gdGhpc30sc2V0QXhpc0FuZ2xlRnJvbVJvdGF0aW9uTWF0cml4OmZ1bmN0aW9uKGEpe3ZhciBiLGMsZDthPWEuZWxlbWVudHM7dmFyIGU9YVswXTtkPWFbNF07dmFyIGY9YVs4XSxnPWFbMV0saD1hWzVdLGs9YVs5XTtjPWFbMl07Yj1hWzZdO3ZhciBtPWFbMTBdO2lmKC4wMT5NYXRoLmFicyhkLWcpJiYuMDE+TWF0aC5hYnMoZi1jKSYmLjAxPk1hdGguYWJzKGstYikpe2lmKC4xPk1hdGguYWJzKGQrZykmJi4xPk1hdGguYWJzKGYrYykmJi4xPk1hdGguYWJzKGsrYikmJi4xPk1hdGguYWJzKGUraCttLTMpKXJldHVybiB0aGlzLnNldCgxLDAsMCwwKSx0aGlzO2E9TWF0aC5QSTtlPShlKzEpLzI7aD0oaCsxKS8yO209KG0rMSkvMjtkPShkK2cpLzQ7Zj0oZitjKS80O2s9KGsrYikvNDtlPmgmJmU+bT8uMDE+ZT8oYj0wLGQ9Yz0uNzA3MTA2NzgxKTooYj1NYXRoLnNxcnQoZSksYz1kL2IsZD1mL2IpOmg+bT8uMDE+aD8oYj0uNzA3MTA2NzgxLGM9MCxkPS43MDcxMDY3ODEpOgooYz1NYXRoLnNxcnQoaCksYj1kL2MsZD1rL2MpOi4wMT5tPyhjPWI9LjcwNzEwNjc4MSxkPTApOihkPU1hdGguc3FydChtKSxiPWYvZCxjPWsvZCk7dGhpcy5zZXQoYixjLGQsYSk7cmV0dXJuIHRoaXN9YT1NYXRoLnNxcnQoKGItaykqKGItaykrKGYtYykqKGYtYykrKGctZCkqKGctZCkpOy4wMDE+TWF0aC5hYnMoYSkmJihhPTEpO3RoaXMueD0oYi1rKS9hO3RoaXMueT0oZi1jKS9hO3RoaXMuej0oZy1kKS9hO3RoaXMudz1NYXRoLmFjb3MoKGUraCttLTEpLzIpO3JldHVybiB0aGlzfSxtaW46ZnVuY3Rpb24oYSl7dGhpcy54PU1hdGgubWluKHRoaXMueCxhLngpO3RoaXMueT1NYXRoLm1pbih0aGlzLnksYS55KTt0aGlzLno9TWF0aC5taW4odGhpcy56LGEueik7dGhpcy53PU1hdGgubWluKHRoaXMudyxhLncpO3JldHVybiB0aGlzfSxtYXg6ZnVuY3Rpb24oYSl7dGhpcy54PU1hdGgubWF4KHRoaXMueCxhLngpO3RoaXMueT1NYXRoLm1heCh0aGlzLnksYS55KTt0aGlzLno9TWF0aC5tYXgodGhpcy56LAphLnopO3RoaXMudz1NYXRoLm1heCh0aGlzLncsYS53KTtyZXR1cm4gdGhpc30sY2xhbXA6ZnVuY3Rpb24oYSxiKXt0aGlzLng9TWF0aC5tYXgoYS54LE1hdGgubWluKGIueCx0aGlzLngpKTt0aGlzLnk9TWF0aC5tYXgoYS55LE1hdGgubWluKGIueSx0aGlzLnkpKTt0aGlzLno9TWF0aC5tYXgoYS56LE1hdGgubWluKGIueix0aGlzLnopKTt0aGlzLnc9TWF0aC5tYXgoYS53LE1hdGgubWluKGIudyx0aGlzLncpKTtyZXR1cm4gdGhpc30sY2xhbXBTY2FsYXI6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZ2EsYj1uZXcgZ2E7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7YS5zZXQoYyxjLGMsYyk7Yi5zZXQoZCxkLGQsZCk7cmV0dXJuIHRoaXMuY2xhbXAoYSxiKX19KCksZmxvb3I6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpO3RoaXMueT1NYXRoLmZsb29yKHRoaXMueSk7dGhpcy56PU1hdGguZmxvb3IodGhpcy56KTt0aGlzLnc9TWF0aC5mbG9vcih0aGlzLncpO3JldHVybiB0aGlzfSwKY2VpbDpmdW5jdGlvbigpe3RoaXMueD1NYXRoLmNlaWwodGhpcy54KTt0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSk7dGhpcy56PU1hdGguY2VpbCh0aGlzLnopO3RoaXMudz1NYXRoLmNlaWwodGhpcy53KTtyZXR1cm4gdGhpc30scm91bmQ6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpO3RoaXMueT1NYXRoLnJvdW5kKHRoaXMueSk7dGhpcy56PU1hdGgucm91bmQodGhpcy56KTt0aGlzLnc9TWF0aC5yb3VuZCh0aGlzLncpO3JldHVybiB0aGlzfSxyb3VuZFRvWmVybzpmdW5jdGlvbigpe3RoaXMueD0wPnRoaXMueD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCk7dGhpcy55PTA+dGhpcy55P01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KTt0aGlzLno9MD50aGlzLno/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopO3RoaXMudz0wPnRoaXMudz9NYXRoLmNlaWwodGhpcy53KTpNYXRoLmZsb29yKHRoaXMudyk7cmV0dXJuIHRoaXN9LApuZWdhdGU6ZnVuY3Rpb24oKXt0aGlzLng9LXRoaXMueDt0aGlzLnk9LXRoaXMueTt0aGlzLno9LXRoaXMuejt0aGlzLnc9LXRoaXMudztyZXR1cm4gdGhpc30sZG90OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLngqYS54K3RoaXMueSphLnkrdGhpcy56KmEueit0aGlzLncqYS53fSxsZW5ndGhTcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53fSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLncpfSxsZW5ndGhNYW5oYXR0YW46ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueikrTWF0aC5hYnModGhpcy53KX0sbm9ybWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCkpfSwKc2V0TGVuZ3RoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKGEvdGhpcy5sZW5ndGgoKSl9LGxlcnA6ZnVuY3Rpb24oYSxiKXt0aGlzLngrPShhLngtdGhpcy54KSpiO3RoaXMueSs9KGEueS10aGlzLnkpKmI7dGhpcy56Kz0oYS56LXRoaXMueikqYjt0aGlzLncrPShhLnctdGhpcy53KSpiO3JldHVybiB0aGlzfSxsZXJwVmVjdG9yczpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuc3ViVmVjdG9ycyhiLGEpLm11bHRpcGx5U2NhbGFyKGMpLmFkZChhKX0sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLng9PT10aGlzLngmJmEueT09PXRoaXMueSYmYS56PT09dGhpcy56JiZhLnc9PT10aGlzLnd9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO3RoaXMueD1hW2JdO3RoaXMueT1hW2IrMV07dGhpcy56PWFbYisyXTt0aGlzLnc9YVtiKzNdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YSYmKGE9CltdKTt2b2lkIDA9PT1iJiYoYj0wKTthW2JdPXRoaXMueDthW2IrMV09dGhpcy55O2FbYisyXT10aGlzLno7YVtiKzNdPXRoaXMudztyZXR1cm4gYX0sZnJvbUJ1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbihhLGIsYyl7dm9pZCAwIT09YyYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7dGhpcy54PWEuZ2V0WChiKTt0aGlzLnk9YS5nZXRZKGIpO3RoaXMuej1hLmdldFooYik7dGhpcy53PWEuZ2V0VyhiKTtyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKERiLnByb3RvdHlwZSxzYS5wcm90b3R5cGUse2lzV2ViR0xSZW5kZXJUYXJnZXQ6ITAsc2V0U2l6ZTpmdW5jdGlvbihhLGIpe2lmKHRoaXMud2lkdGghPT1hfHx0aGlzLmhlaWdodCE9PWIpdGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWIsdGhpcy5kaXNwb3NlKCk7dGhpcy52aWV3cG9ydC5zZXQoMCwwLGEsYik7dGhpcy5zY2lzc29yLnNldCgwLAowLGEsYil9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMud2lkdGg9YS53aWR0aDt0aGlzLmhlaWdodD1hLmhlaWdodDt0aGlzLnZpZXdwb3J0LmNvcHkoYS52aWV3cG9ydCk7dGhpcy50ZXh0dXJlPWEudGV4dHVyZS5jbG9uZSgpO3RoaXMuZGVwdGhCdWZmZXI9YS5kZXB0aEJ1ZmZlcjt0aGlzLnN0ZW5jaWxCdWZmZXI9YS5zdGVuY2lsQnVmZmVyO3RoaXMuZGVwdGhUZXh0dXJlPWEuZGVwdGhUZXh0dXJlO3JldHVybiB0aGlzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX0pO0ViLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKERiLnByb3RvdHlwZSk7RWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUViO0ViLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZT0hMDtPYmplY3QuYXNzaWduKHFhLHtzbGVycDpmdW5jdGlvbihhLGIsCmMsZCl7cmV0dXJuIGMuY29weShhKS5zbGVycChiLGQpfSxzbGVycEZsYXQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9Y1tkKzBdLGs9Y1tkKzFdLG09Y1tkKzJdO2M9Y1tkKzNdO2Q9ZVtmKzBdO3ZhciB1PWVbZisxXSxsPWVbZisyXTtlPWVbZiszXTtpZihjIT09ZXx8aCE9PWR8fGshPT11fHxtIT09bCl7Zj0xLWc7dmFyIG49aCpkK2sqdSttKmwrYyplLHI9MDw9bj8xOi0xLHA9MS1uKm47cD5OdW1iZXIuRVBTSUxPTiYmKHA9TWF0aC5zcXJ0KHApLG49TWF0aC5hdGFuMihwLG4qciksZj1NYXRoLnNpbihmKm4pL3AsZz1NYXRoLnNpbihnKm4pL3ApO3IqPWc7aD1oKmYrZCpyO2s9aypmK3UqcjttPW0qZitsKnI7Yz1jKmYrZSpyO2Y9PT0xLWcmJihnPTEvTWF0aC5zcXJ0KGgqaCtrKmsrbSptK2MqYyksaCo9ZyxrKj1nLG0qPWcsYyo9Zyl9YVtiXT1oO2FbYisxXT1rO2FbYisyXT1tO2FbYiszXT1jfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHFhLnByb3RvdHlwZSx7eDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LApzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feD1hO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpfX0seTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihhKXt0aGlzLl95PWE7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9fSx6OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fen0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3o9YTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKX19LHc6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5fdz1hO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpfX19KTtPYmplY3QuYXNzaWduKHFhLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuX3g9YTt0aGlzLl95PWI7dGhpcy5fej1jO3RoaXMuX3c9ZDt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osCnRoaXMuX3cpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMuX3g9YS54O3RoaXMuX3k9YS55O3RoaXMuX3o9YS56O3RoaXMuX3c9YS53O3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzZXRGcm9tRXVsZXI6ZnVuY3Rpb24oYSxiKXtpZighMT09PShhJiZhLmlzRXVsZXIpKXRocm93IEVycm9yKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTt2YXIgYz1hLl94LGQ9YS5feSxlPWEuX3osZj1hLm9yZGVyLGc9TWF0aC5jb3MsaD1NYXRoLnNpbixrPWcoYy8yKSxtPWcoZC8yKSxnPWcoZS8yKSxjPWgoYy8yKSxkPWgoZC8yKSxlPWgoZS8yKTsiWFlaIj09PWY/KHRoaXMuX3g9YyptKmcraypkKmUsdGhpcy5feT1rKmQqZy1jKm0qZSx0aGlzLl96PWsqbSplK2MqZCpnLHRoaXMuX3c9ayptKmctYypkKmUpOiJZWFoiPT09Zj8odGhpcy5feD1jKm0qZysKaypkKmUsdGhpcy5feT1rKmQqZy1jKm0qZSx0aGlzLl96PWsqbSplLWMqZCpnLHRoaXMuX3c9ayptKmcrYypkKmUpOiJaWFkiPT09Zj8odGhpcy5feD1jKm0qZy1rKmQqZSx0aGlzLl95PWsqZCpnK2MqbSplLHRoaXMuX3o9ayptKmUrYypkKmcsdGhpcy5fdz1rKm0qZy1jKmQqZSk6IlpZWCI9PT1mPyh0aGlzLl94PWMqbSpnLWsqZCplLHRoaXMuX3k9aypkKmcrYyptKmUsdGhpcy5fej1rKm0qZS1jKmQqZyx0aGlzLl93PWsqbSpnK2MqZCplKToiWVpYIj09PWY/KHRoaXMuX3g9YyptKmcraypkKmUsdGhpcy5feT1rKmQqZytjKm0qZSx0aGlzLl96PWsqbSplLWMqZCpnLHRoaXMuX3c9ayptKmctYypkKmUpOiJYWlkiPT09ZiYmKHRoaXMuX3g9YyptKmctaypkKmUsdGhpcy5feT1rKmQqZy1jKm0qZSx0aGlzLl96PWsqbSplK2MqZCpnLHRoaXMuX3c9ayptKmcrYypkKmUpO2lmKCExIT09Yil0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sc2V0RnJvbUF4aXNBbmdsZTpmdW5jdGlvbihhLApiKXt2YXIgYz1iLzIsZD1NYXRoLnNpbihjKTt0aGlzLl94PWEueCpkO3RoaXMuX3k9YS55KmQ7dGhpcy5fej1hLnoqZDt0aGlzLl93PU1hdGguY29zKGMpO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzZXRGcm9tUm90YXRpb25NYXRyaXg6ZnVuY3Rpb24oYSl7dmFyIGI9YS5lbGVtZW50cyxjPWJbMF07YT1iWzRdO3ZhciBkPWJbOF0sZT1iWzFdLGY9Yls1XSxnPWJbOV0saD1iWzJdLGs9Yls2XSxiPWJbMTBdLG09YytmK2I7MDxtPyhjPS41L01hdGguc3FydChtKzEpLHRoaXMuX3c9LjI1L2MsdGhpcy5feD0oay1nKSpjLHRoaXMuX3k9KGQtaCkqYyx0aGlzLl96PShlLWEpKmMpOmM+ZiYmYz5iPyhjPTIqTWF0aC5zcXJ0KDErYy1mLWIpLHRoaXMuX3c9KGstZykvYyx0aGlzLl94PS4yNSpjLHRoaXMuX3k9KGErZSkvYyx0aGlzLl96PShkK2gpL2MpOmY+Yj8oYz0yKk1hdGguc3FydCgxK2YtYy1iKSx0aGlzLl93PShkLWgpL2MsdGhpcy5feD0oYStlKS9jLHRoaXMuX3k9Ci4yNSpjLHRoaXMuX3o9KGcraykvYyk6KGM9MipNYXRoLnNxcnQoMStiLWMtZiksdGhpcy5fdz0oZS1hKS9jLHRoaXMuX3g9KGQraCkvYyx0aGlzLl95PShnK2spL2MsdGhpcy5fej0uMjUqYyk7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7cmV0dXJuIHRoaXN9LHNldEZyb21Vbml0VmVjdG9yczpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7dm9pZCAwPT09YSYmKGE9bmV3IHApO2I9Yy5kb3QoZCkrMTsxRS02PmI/KGI9MCxNYXRoLmFicyhjLngpPk1hdGguYWJzKGMueik/YS5zZXQoLWMueSxjLngsMCk6YS5zZXQoMCwtYy56LGMueSkpOmEuY3Jvc3NWZWN0b3JzKGMsZCk7dGhpcy5feD1hLng7dGhpcy5feT1hLnk7dGhpcy5fej1hLno7dGhpcy5fdz1iO3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpfX0oKSxpbnZlcnNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCkubm9ybWFsaXplKCl9LGNvbmp1Z2F0ZTpmdW5jdGlvbigpe3RoaXMuX3gqPQotMTt0aGlzLl95Kj0tMTt0aGlzLl96Kj0tMTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sZG90OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl94KmEuX3grdGhpcy5feSphLl95K3RoaXMuX3oqYS5feit0aGlzLl93KmEuX3d9LGxlbmd0aFNxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fd30sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3cpfSxub3JtYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmxlbmd0aCgpOzA9PT1hPyh0aGlzLl96PXRoaXMuX3k9dGhpcy5feD0wLHRoaXMuX3c9MSk6KGE9MS9hLHRoaXMuX3gqPWEsdGhpcy5feSo9YSx0aGlzLl96Kj1hLHRoaXMuX3cqPWEpO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSwKbXVsdGlwbHk6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdm9pZCAwIT09Yj8oY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5UXVhdGVybmlvbnMoYSxiKSk6dGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsYSl9LHByZW11bHRpcGx5OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5UXVhdGVybmlvbnMoYSx0aGlzKX0sbXVsdGlwbHlRdWF0ZXJuaW9uczpmdW5jdGlvbihhLGIpe3ZhciBjPWEuX3gsZD1hLl95LGU9YS5feixmPWEuX3csZz1iLl94LGg9Yi5feSxrPWIuX3osbT1iLl93O3RoaXMuX3g9YyptK2YqZytkKmstZSpoO3RoaXMuX3k9ZCptK2YqaCtlKmctYyprO3RoaXMuX3o9ZSptK2YqaytjKmgtZCpnO3RoaXMuX3c9ZiptLWMqZy1kKmgtZSprO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpOwpyZXR1cm4gdGhpc30sc2xlcnA6ZnVuY3Rpb24oYSxiKXtpZigwPT09YilyZXR1cm4gdGhpcztpZigxPT09YilyZXR1cm4gdGhpcy5jb3B5KGEpO3ZhciBjPXRoaXMuX3gsZD10aGlzLl95LGU9dGhpcy5feixmPXRoaXMuX3csZz1mKmEuX3crYyphLl94K2QqYS5feStlKmEuX3o7MD5nPyh0aGlzLl93PS1hLl93LHRoaXMuX3g9LWEuX3gsdGhpcy5feT0tYS5feSx0aGlzLl96PS1hLl96LGc9LWcpOnRoaXMuY29weShhKTtpZigxPD1nKXJldHVybiB0aGlzLl93PWYsdGhpcy5feD1jLHRoaXMuX3k9ZCx0aGlzLl96PWUsdGhpczt2YXIgaD1NYXRoLnNxcnQoMS1nKmcpO2lmKC4wMDE+TWF0aC5hYnMoaCkpcmV0dXJuIHRoaXMuX3c9LjUqKGYrdGhpcy5fdyksdGhpcy5feD0uNSooYyt0aGlzLl94KSx0aGlzLl95PS41KihkK3RoaXMuX3kpLHRoaXMuX3o9LjUqKGUrdGhpcy5feiksdGhpczt2YXIgaz1NYXRoLmF0YW4yKGgsZyksZz1NYXRoLnNpbigoMS1iKSprKS9oLGg9TWF0aC5zaW4oYioKaykvaDt0aGlzLl93PWYqZyt0aGlzLl93Kmg7dGhpcy5feD1jKmcrdGhpcy5feCpoO3RoaXMuX3k9ZCpnK3RoaXMuX3kqaDt0aGlzLl96PWUqZyt0aGlzLl96Kmg7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihhKXtyZXR1cm4gYS5feD09PXRoaXMuX3gmJmEuX3k9PT10aGlzLl95JiZhLl96PT09dGhpcy5feiYmYS5fdz09PXRoaXMuX3d9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO3RoaXMuX3g9YVtiXTt0aGlzLl95PWFbYisxXTt0aGlzLl96PWFbYisyXTt0aGlzLl93PWFbYiszXTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWEmJihhPVtdKTt2b2lkIDA9PT1iJiYoYj0wKTthW2JdPXRoaXMuX3g7YVtiKzFdPXRoaXMuX3k7YVtiKzJdPXRoaXMuX3o7YVtiKzNdPXRoaXMuX3c7cmV0dXJuIGF9LG9uQ2hhbmdlOmZ1bmN0aW9uKGEpe3RoaXMub25DaGFuZ2VDYWxsYmFjaz0KYTtyZXR1cm4gdGhpc30sb25DaGFuZ2VDYWxsYmFjazpmdW5jdGlvbigpe319KTtPYmplY3QuYXNzaWduKHAucHJvdG90eXBlLHtpc1ZlY3RvcjM6ITAsc2V0OmZ1bmN0aW9uKGEsYixjKXt0aGlzLng9YTt0aGlzLnk9Yjt0aGlzLno9YztyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMuej10aGlzLnk9dGhpcy54PWE7cmV0dXJuIHRoaXN9LHNldFg6ZnVuY3Rpb24oYSl7dGhpcy54PWE7cmV0dXJuIHRoaXN9LHNldFk6ZnVuY3Rpb24oYSl7dGhpcy55PWE7cmV0dXJuIHRoaXN9LHNldFo6ZnVuY3Rpb24oYSl7dGhpcy56PWE7cmV0dXJuIHRoaXN9LHNldENvbXBvbmVudDpmdW5jdGlvbihhLGIpe3N3aXRjaChhKXtjYXNlIDA6dGhpcy54PWI7YnJlYWs7Y2FzZSAxOnRoaXMueT1iO2JyZWFrO2Nhc2UgMjp0aGlzLno9YjticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrYSk7fXJldHVybiB0aGlzfSxnZXRDb21wb25lbnQ6ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gdGhpcy54OwpjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtkZWZhdWx0OnRocm93IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrYSk7fX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMueD1hLng7dGhpcy55PWEueTt0aGlzLno9YS56O3JldHVybiB0aGlzfSxhZGQ6ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDAhPT1iKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnMoYSxiKTt0aGlzLngrPWEueDt0aGlzLnkrPWEueTt0aGlzLnorPWEuejtyZXR1cm4gdGhpc30sYWRkU2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMueCs9YTt0aGlzLnkrPWE7dGhpcy56Kz1hO3JldHVybiB0aGlzfSwKYWRkVmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngrYi54O3RoaXMueT1hLnkrYi55O3RoaXMuej1hLnorYi56O3JldHVybiB0aGlzfSxhZGRTY2FsZWRWZWN0b3I6ZnVuY3Rpb24oYSxiKXt0aGlzLngrPWEueCpiO3RoaXMueSs9YS55KmI7dGhpcy56Kz1hLnoqYjtyZXR1cm4gdGhpc30sc3ViOmZ1bmN0aW9uKGEsYil7aWYodm9pZCAwIT09YilyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKGEsYik7dGhpcy54LT1hLng7dGhpcy55LT1hLnk7dGhpcy56LT1hLno7cmV0dXJuIHRoaXN9LHN1YlNjYWxhcjpmdW5jdGlvbihhKXt0aGlzLngtPWE7dGhpcy55LT1hO3RoaXMuei09YTtyZXR1cm4gdGhpc30sc3ViVmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngtYi54O3RoaXMueT1hLnktYi55O3RoaXMuej0KYS56LWIuejtyZXR1cm4gdGhpc30sbXVsdGlwbHk6ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDAhPT1iKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnMoYSxiKTt0aGlzLngqPWEueDt0aGlzLnkqPWEueTt0aGlzLnoqPWEuejtyZXR1cm4gdGhpc30sbXVsdGlwbHlTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy54Kj1hO3RoaXMueSo9YTt0aGlzLnoqPWE7cmV0dXJuIHRoaXN9LG11bHRpcGx5VmVjdG9yczpmdW5jdGlvbihhLGIpe3RoaXMueD1hLngqYi54O3RoaXMueT1hLnkqYi55O3RoaXMuej1hLnoqYi56O3JldHVybiB0aGlzfSxhcHBseUV1bGVyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHFhO3JldHVybiBmdW5jdGlvbihiKXshMT09PShiJiZiLmlzRXVsZXIpJiZjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlFdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7CnJldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihhLnNldEZyb21FdWxlcihiKSl9fSgpLGFwcGx5QXhpc0FuZ2xlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHFhO3JldHVybiBmdW5jdGlvbihiLGMpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihhLnNldEZyb21BeGlzQW5nbGUoYixjKSl9fSgpLGFwcGx5TWF0cml4MzpmdW5jdGlvbihhKXt2YXIgYj10aGlzLngsYz10aGlzLnksZD10aGlzLno7YT1hLmVsZW1lbnRzO3RoaXMueD1hWzBdKmIrYVszXSpjK2FbNl0qZDt0aGlzLnk9YVsxXSpiK2FbNF0qYythWzddKmQ7dGhpcy56PWFbMl0qYithWzVdKmMrYVs4XSpkO3JldHVybiB0aGlzfSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54LGM9dGhpcy55LGQ9dGhpcy56O2E9YS5lbGVtZW50czt0aGlzLng9YVswXSpiK2FbNF0qYythWzhdKmQrYVsxMl07dGhpcy55PWFbMV0qYithWzVdKmMrYVs5XSpkK2FbMTNdO3RoaXMuej1hWzJdKmIrYVs2XSpjK2FbMTBdKmQrYVsxNF07CnJldHVybiB0aGlzLmRpdmlkZVNjYWxhcihhWzNdKmIrYVs3XSpjK2FbMTFdKmQrYVsxNV0pfSxhcHBseVF1YXRlcm5pb246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54LGM9dGhpcy55LGQ9dGhpcy56LGU9YS54LGY9YS55LGc9YS56O2E9YS53O3ZhciBoPWEqYitmKmQtZypjLGs9YSpjK2cqYi1lKmQsbT1hKmQrZSpjLWYqYixiPS1lKmItZipjLWcqZDt0aGlzLng9aCphK2IqLWUrayotZy1tKi1mO3RoaXMueT1rKmErYiotZittKi1lLWgqLWc7dGhpcy56PW0qYStiKi1nK2gqLWYtayotZTtyZXR1cm4gdGhpc30scHJvamVjdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBKO3JldHVybiBmdW5jdGlvbihiKXthLm11bHRpcGx5TWF0cmljZXMoYi5wcm9qZWN0aW9uTWF0cml4LGEuZ2V0SW52ZXJzZShiLm1hdHJpeFdvcmxkKSk7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KGEpfX0oKSx1bnByb2plY3Q6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYil7YS5tdWx0aXBseU1hdHJpY2VzKGIubWF0cml4V29ybGQsCmEuZ2V0SW52ZXJzZShiLnByb2plY3Rpb25NYXRyaXgpKTtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQoYSl9fSgpLHRyYW5zZm9ybURpcmVjdGlvbjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLngsYz10aGlzLnksZD10aGlzLno7YT1hLmVsZW1lbnRzO3RoaXMueD1hWzBdKmIrYVs0XSpjK2FbOF0qZDt0aGlzLnk9YVsxXSpiK2FbNV0qYythWzldKmQ7dGhpcy56PWFbMl0qYithWzZdKmMrYVsxMF0qZDtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKX0sZGl2aWRlOmZ1bmN0aW9uKGEpe3RoaXMueC89YS54O3RoaXMueS89YS55O3RoaXMuei89YS56O3JldHVybiB0aGlzfSxkaXZpZGVTY2FsYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS9hKX0sbWluOmZ1bmN0aW9uKGEpe3RoaXMueD1NYXRoLm1pbih0aGlzLngsYS54KTt0aGlzLnk9TWF0aC5taW4odGhpcy55LGEueSk7dGhpcy56PU1hdGgubWluKHRoaXMueixhLnopO3JldHVybiB0aGlzfSxtYXg6ZnVuY3Rpb24oYSl7dGhpcy54PQpNYXRoLm1heCh0aGlzLngsYS54KTt0aGlzLnk9TWF0aC5tYXgodGhpcy55LGEueSk7dGhpcy56PU1hdGgubWF4KHRoaXMueixhLnopO3JldHVybiB0aGlzfSxjbGFtcDpmdW5jdGlvbihhLGIpe3RoaXMueD1NYXRoLm1heChhLngsTWF0aC5taW4oYi54LHRoaXMueCkpO3RoaXMueT1NYXRoLm1heChhLnksTWF0aC5taW4oYi55LHRoaXMueSkpO3RoaXMuej1NYXRoLm1heChhLnosTWF0aC5taW4oYi56LHRoaXMueikpO3JldHVybiB0aGlzfSxjbGFtcFNjYWxhcjpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7YS5zZXQoYyxjLGMpO2Iuc2V0KGQsZCxkKTtyZXR1cm4gdGhpcy5jbGFtcChhLGIpfX0oKSxjbGFtcExlbmd0aDpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgoYSxNYXRoLm1pbihiLGMpKS9jKX0sZmxvb3I6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpOwp0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpO3RoaXMuej1NYXRoLmZsb29yKHRoaXMueik7cmV0dXJuIHRoaXN9LGNlaWw6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5jZWlsKHRoaXMueCk7dGhpcy55PU1hdGguY2VpbCh0aGlzLnkpO3RoaXMuej1NYXRoLmNlaWwodGhpcy56KTtyZXR1cm4gdGhpc30scm91bmQ6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpO3RoaXMueT1NYXRoLnJvdW5kKHRoaXMueSk7dGhpcy56PU1hdGgucm91bmQodGhpcy56KTtyZXR1cm4gdGhpc30scm91bmRUb1plcm86ZnVuY3Rpb24oKXt0aGlzLng9MD50aGlzLng/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpO3RoaXMueT0wPnRoaXMueT9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSk7dGhpcy56PTA+dGhpcy56P01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KTtyZXR1cm4gdGhpc30sbmVnYXRlOmZ1bmN0aW9uKCl7dGhpcy54PS10aGlzLng7CnRoaXMueT0tdGhpcy55O3RoaXMuej0tdGhpcy56O3JldHVybiB0aGlzfSxkb3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMueCphLngrdGhpcy55KmEueSt0aGlzLnoqYS56fSxsZW5ndGhTcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen0sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueil9LGxlbmd0aE1hbmhhdHRhbjpmdW5jdGlvbigpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KX0sbm9ybWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCkpfSxzZXRMZW5ndGg6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoYS90aGlzLmxlbmd0aCgpKX0sbGVycDpmdW5jdGlvbihhLGIpe3RoaXMueCs9KGEueC10aGlzLngpKgpiO3RoaXMueSs9KGEueS10aGlzLnkpKmI7dGhpcy56Kz0oYS56LXRoaXMueikqYjtyZXR1cm4gdGhpc30sbGVycFZlY3RvcnM6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLnN1YlZlY3RvcnMoYixhKS5tdWx0aXBseVNjYWxhcihjKS5hZGQoYSl9LGNyb3NzOmZ1bmN0aW9uKGEsYil7aWYodm9pZCAwIT09YilyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuY3Jvc3MoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5jcm9zc1ZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuY3Jvc3NWZWN0b3JzKGEsYik7dmFyIGM9dGhpcy54LGQ9dGhpcy55LGU9dGhpcy56O3RoaXMueD1kKmEuei1lKmEueTt0aGlzLnk9ZSphLngtYyphLno7dGhpcy56PWMqYS55LWQqYS54O3JldHVybiB0aGlzfSxjcm9zc1ZlY3RvcnM6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLngsZD1hLnksZT1hLnosZj1iLngsZz1iLnksaD1iLno7dGhpcy54PWQqaC1lKmc7dGhpcy55PQplKmYtYypoO3RoaXMuej1jKmctZCpmO3JldHVybiB0aGlzfSxwcm9qZWN0T25WZWN0b3I6ZnVuY3Rpb24oYSl7dmFyIGI9YS5kb3QodGhpcykvYS5sZW5ndGhTcSgpO3JldHVybiB0aGlzLmNvcHkoYSkubXVsdGlwbHlTY2FsYXIoYil9LHByb2plY3RPblBsYW5lOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe2EuY29weSh0aGlzKS5wcm9qZWN0T25WZWN0b3IoYik7cmV0dXJuIHRoaXMuc3ViKGEpfX0oKSxyZWZsZWN0OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnN1YihhLmNvcHkoYikubXVsdGlwbHlTY2FsYXIoMip0aGlzLmRvdChiKSkpfX0oKSxhbmdsZVRvOmZ1bmN0aW9uKGEpe2E9dGhpcy5kb3QoYSkvTWF0aC5zcXJ0KHRoaXMubGVuZ3RoU3EoKSphLmxlbmd0aFNxKCkpO3JldHVybiBNYXRoLmFjb3MoWS5jbGFtcChhLC0xLDEpKX0sZGlzdGFuY2VUbzpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQoYSkpfSwKZGlzdGFuY2VUb1NxdWFyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54LWEueCxjPXRoaXMueS1hLnk7YT10aGlzLnotYS56O3JldHVybiBiKmIrYypjK2EqYX0sZGlzdGFuY2VUb01hbmhhdHRhbjpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5hYnModGhpcy54LWEueCkrTWF0aC5hYnModGhpcy55LWEueSkrTWF0aC5hYnModGhpcy56LWEueil9LHNldEZyb21TcGhlcmljYWw6ZnVuY3Rpb24oYSl7dmFyIGI9TWF0aC5zaW4oYS5waGkpKmEucmFkaXVzO3RoaXMueD1iKk1hdGguc2luKGEudGhldGEpO3RoaXMueT1NYXRoLmNvcyhhLnBoaSkqYS5yYWRpdXM7dGhpcy56PWIqTWF0aC5jb3MoYS50aGV0YSk7cmV0dXJuIHRoaXN9LHNldEZyb21DeWxpbmRyaWNhbDpmdW5jdGlvbihhKXt0aGlzLng9YS5yYWRpdXMqTWF0aC5zaW4oYS50aGV0YSk7dGhpcy55PWEueTt0aGlzLno9YS5yYWRpdXMqTWF0aC5jb3MoYS50aGV0YSk7cmV0dXJuIHRoaXN9LHNldEZyb21NYXRyaXhQb3NpdGlvbjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKGEsCjMpfSxzZXRGcm9tTWF0cml4U2NhbGU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKGEsMCkubGVuZ3RoKCksYz10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oYSwxKS5sZW5ndGgoKTthPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbihhLDIpLmxlbmd0aCgpO3RoaXMueD1iO3RoaXMueT1jO3RoaXMuej1hO3JldHVybiB0aGlzfSxzZXRGcm9tTWF0cml4Q29sdW1uOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZnJvbUFycmF5KGEuZWxlbWVudHMsNCpiKX0sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLng9PT10aGlzLngmJmEueT09PXRoaXMueSYmYS56PT09dGhpcy56fSxmcm9tQXJyYXk6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0wKTt0aGlzLng9YVtiXTt0aGlzLnk9YVtiKzFdO3RoaXMuej1hW2IrMl07cmV0dXJuIHRoaXN9LHRvQXJyYXk6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1hJiYoYT1bXSk7dm9pZCAwPT09YiYmKGI9MCk7YVtiXT0KdGhpcy54O2FbYisxXT10aGlzLnk7YVtiKzJdPXRoaXMuejtyZXR1cm4gYX0sZnJvbUJ1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbihhLGIsYyl7dm9pZCAwIT09YyYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7dGhpcy54PWEuZ2V0WChiKTt0aGlzLnk9YS5nZXRZKGIpO3RoaXMuej1hLmdldFooYik7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihKLnByb3RvdHlwZSx7aXNNYXRyaXg0OiEwLHNldDpmdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsayxtLHUsbCxuLHIscCx0KXt2YXIgeT10aGlzLmVsZW1lbnRzO3lbMF09YTt5WzRdPWI7eVs4XT1jO3lbMTJdPWQ7eVsxXT1lO3lbNV09Zjt5WzldPWc7eVsxM109aDt5WzJdPWs7eVs2XT1tO3lbMTBdPXU7eVsxNF09bDt5WzNdPW47eVs3XT1yO3lbMTFdPXA7eVsxNV09dDtyZXR1cm4gdGhpc30saWRlbnRpdHk6ZnVuY3Rpb24oKXt0aGlzLnNldCgxLAowLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBKKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9LGNvcHk6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbGVtZW50czthPWEuZWxlbWVudHM7YlswXT1hWzBdO2JbMV09YVsxXTtiWzJdPWFbMl07YlszXT1hWzNdO2JbNF09YVs0XTtiWzVdPWFbNV07Yls2XT1hWzZdO2JbN109YVs3XTtiWzhdPWFbOF07Yls5XT1hWzldO2JbMTBdPWFbMTBdO2JbMTFdPWFbMTFdO2JbMTJdPWFbMTJdO2JbMTNdPWFbMTNdO2JbMTRdPWFbMTRdO2JbMTVdPWFbMTVdO3JldHVybiB0aGlzfSxjb3B5UG9zaXRpb246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbGVtZW50czthPWEuZWxlbWVudHM7YlsxMl09YVsxMl07YlsxM109YVsxM107YlsxNF09YVsxNF07cmV0dXJuIHRoaXN9LGV4dHJhY3RCYXNpczpmdW5jdGlvbihhLGIsYyl7YS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMCk7CmIuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpO2Muc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpO3JldHVybiB0aGlzfSxtYWtlQmFzaXM6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuc2V0KGEueCxiLngsYy54LDAsYS55LGIueSxjLnksMCxhLnosYi56LGMueiwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxleHRyYWN0Um90YXRpb246ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5lbGVtZW50cyxkPWIuZWxlbWVudHMsZT0xL2Euc2V0RnJvbU1hdHJpeENvbHVtbihiLDApLmxlbmd0aCgpLGY9MS9hLnNldEZyb21NYXRyaXhDb2x1bW4oYiwxKS5sZW5ndGgoKTtiPTEvYS5zZXRGcm9tTWF0cml4Q29sdW1uKGIsMikubGVuZ3RoKCk7Y1swXT1kWzBdKmU7Y1sxXT1kWzFdKmU7Y1syXT1kWzJdKmU7Y1s0XT1kWzRdKmY7Y1s1XT1kWzVdKmY7Y1s2XT1kWzZdKmY7Y1s4XT1kWzhdKmI7Y1s5XT1kWzldKmI7Y1sxMF09ZFsxMF0qYjtyZXR1cm4gdGhpc319KCksCm1ha2VSb3RhdGlvbkZyb21FdWxlcjpmdW5jdGlvbihhKXshMT09PShhJiZhLmlzRXVsZXIpJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7dmFyIGI9dGhpcy5lbGVtZW50cyxjPWEueCxkPWEueSxlPWEueixmPU1hdGguY29zKGMpLGM9TWF0aC5zaW4oYyksZz1NYXRoLmNvcyhkKSxkPU1hdGguc2luKGQpLGg9TWF0aC5jb3MoZSksZT1NYXRoLnNpbihlKTtpZigiWFlaIj09PWEub3JkZXIpe2E9ZipoO3ZhciBrPWYqZSxtPWMqaCx1PWMqZTtiWzBdPWcqaDtiWzRdPS1nKmU7Yls4XT1kO2JbMV09ayttKmQ7Yls1XT1hLXUqZDtiWzldPS1jKmc7YlsyXT11LWEqZDtiWzZdPW0raypkO2JbMTBdPWYqZ31lbHNlIllYWiI9PT1hLm9yZGVyPyhhPWcqaCxrPWcqZSxtPWQqaCx1PWQqZSxiWzBdPWErdSpjLGJbNF09bSpjLWssYls4XT0KZipkLGJbMV09ZiplLGJbNV09ZipoLGJbOV09LWMsYlsyXT1rKmMtbSxiWzZdPXUrYSpjLGJbMTBdPWYqZyk6IlpYWSI9PT1hLm9yZGVyPyhhPWcqaCxrPWcqZSxtPWQqaCx1PWQqZSxiWzBdPWEtdSpjLGJbNF09LWYqZSxiWzhdPW0raypjLGJbMV09ayttKmMsYls1XT1mKmgsYls5XT11LWEqYyxiWzJdPS1mKmQsYls2XT1jLGJbMTBdPWYqZyk6IlpZWCI9PT1hLm9yZGVyPyhhPWYqaCxrPWYqZSxtPWMqaCx1PWMqZSxiWzBdPWcqaCxiWzRdPW0qZC1rLGJbOF09YSpkK3UsYlsxXT1nKmUsYls1XT11KmQrYSxiWzldPWsqZC1tLGJbMl09LWQsYls2XT1jKmcsYlsxMF09ZipnKToiWVpYIj09PWEub3JkZXI/KGE9ZipnLGs9ZipkLG09YypnLHU9YypkLGJbMF09ZypoLGJbNF09dS1hKmUsYls4XT1tKmUrayxiWzFdPWUsYls1XT1mKmgsYls5XT0tYypoLGJbMl09LWQqaCxiWzZdPWsqZSttLGJbMTBdPWEtdSplKToiWFpZIj09PWEub3JkZXImJihhPWYqZyxrPWYqZCxtPWMqZyx1PWMqZCxiWzBdPQpnKmgsYls0XT0tZSxiWzhdPWQqaCxiWzFdPWEqZSt1LGJbNV09ZipoLGJbOV09ayplLW0sYlsyXT1tKmUtayxiWzZdPWMqaCxiWzEwXT11KmUrYSk7YlszXT0wO2JbN109MDtiWzExXT0wO2JbMTJdPTA7YlsxM109MDtiWzE0XT0wO2JbMTVdPTE7cmV0dXJuIHRoaXN9LG1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWxlbWVudHMsYz1hLl94LGQ9YS5feSxlPWEuX3osZj1hLl93LGc9YytjLGg9ZCtkLGs9ZStlO2E9YypnO3ZhciBtPWMqaCxjPWMqayx1PWQqaCxkPWQqayxlPWUqayxnPWYqZyxoPWYqaCxmPWYqaztiWzBdPTEtKHUrZSk7Yls0XT1tLWY7Yls4XT1jK2g7YlsxXT1tK2Y7Yls1XT0xLShhK2UpO2JbOV09ZC1nO2JbMl09Yy1oO2JbNl09ZCtnO2JbMTBdPTEtKGErdSk7YlszXT0wO2JbN109MDtiWzExXT0wO2JbMTJdPTA7YlsxM109MDtiWzE0XT0wO2JbMTVdPTE7cmV0dXJuIHRoaXN9LGxvb2tBdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLApiPW5ldyBwLGM9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGQsZSxmKXt2YXIgZz10aGlzLmVsZW1lbnRzO2Muc3ViVmVjdG9ycyhkLGUpOzA9PT1jLmxlbmd0aFNxKCkmJihjLno9MSk7Yy5ub3JtYWxpemUoKTthLmNyb3NzVmVjdG9ycyhmLGMpOzA9PT1hLmxlbmd0aFNxKCkmJihjLnorPTFFLTQsYS5jcm9zc1ZlY3RvcnMoZixjKSk7YS5ub3JtYWxpemUoKTtiLmNyb3NzVmVjdG9ycyhjLGEpO2dbMF09YS54O2dbNF09Yi54O2dbOF09Yy54O2dbMV09YS55O2dbNV09Yi55O2dbOV09Yy55O2dbMl09YS56O2dbNl09Yi56O2dbMTBdPWMuejtyZXR1cm4gdGhpc319KCksbXVsdGlwbHk6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdm9pZCAwIT09Yj8oY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseU1hdHJpY2VzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5TWF0cmljZXMoYSxiKSk6CnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLGEpfSxwcmVtdWx0aXBseTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKGEsdGhpcyl9LG11bHRpcGx5TWF0cmljZXM6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmVsZW1lbnRzLGQ9Yi5lbGVtZW50cyxlPXRoaXMuZWxlbWVudHMsZj1jWzBdLGc9Y1s0XSxoPWNbOF0saz1jWzEyXSxtPWNbMV0sdT1jWzVdLGw9Y1s5XSxuPWNbMTNdLHI9Y1syXSxwPWNbNl0sdD1jWzEwXSx5PWNbMTRdLHg9Y1szXSx2PWNbN10sRz1jWzExXSxjPWNbMTVdLHc9ZFswXSxPPWRbNF0sUz1kWzhdLEU9ZFsxMl0sRj1kWzFdLEM9ZFs1XSxSPWRbOV0sRD1kWzEzXSxCPWRbMl0sST1kWzZdLEg9ZFsxMF0sSj1kWzE0XSxQPWRbM10sSz1kWzddLFc9ZFsxMV0sZD1kWzE1XTtlWzBdPWYqdytnKkYraCpCK2sqUDtlWzRdPWYqTytnKkMraCpJK2sqSztlWzhdPWYqUytnKlIraCpIK2sqVztlWzEyXT1mKkUrZypEK2gqSitrKmQ7ZVsxXT1tKncrdSoKRitsKkIrbipQO2VbNV09bSpPK3UqQytsKkkrbipLO2VbOV09bSpTK3UqUitsKkgrbipXO2VbMTNdPW0qRSt1KkQrbCpKK24qZDtlWzJdPXIqdytwKkYrdCpCK3kqUDtlWzZdPXIqTytwKkMrdCpJK3kqSztlWzEwXT1yKlMrcCpSK3QqSCt5Klc7ZVsxNF09cipFK3AqRCt0KkoreSpkO2VbM109eCp3K3YqRitHKkIrYypQO2VbN109eCpPK3YqQytHKkkrYypLO2VbMTFdPXgqUyt2KlIrRypIK2MqVztlWzE1XT14KkUrdipEK0cqSitjKmQ7cmV0dXJuIHRoaXN9LG11bHRpcGx5U2NhbGFyOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWxlbWVudHM7YlswXSo9YTtiWzRdKj1hO2JbOF0qPWE7YlsxMl0qPWE7YlsxXSo9YTtiWzVdKj1hO2JbOV0qPWE7YlsxM10qPWE7YlsyXSo9YTtiWzZdKj1hO2JbMTBdKj1hO2JbMTRdKj1hO2JbM10qPWE7Yls3XSo9YTtiWzExXSo9YTtiWzE1XSo9YTtyZXR1cm4gdGhpc30sYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiKXtmb3IodmFyIGM9CjAsZD1iLmNvdW50O2M8ZDtjKyspYS54PWIuZ2V0WChjKSxhLnk9Yi5nZXRZKGMpLGEuej1iLmdldFooYyksYS5hcHBseU1hdHJpeDQodGhpcyksYi5zZXRYWVooYyxhLngsYS55LGEueik7cmV0dXJuIGJ9fSgpLGRldGVybWluYW50OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5lbGVtZW50cyxiPWFbMF0sYz1hWzRdLGQ9YVs4XSxlPWFbMTJdLGY9YVsxXSxnPWFbNV0saD1hWzldLGs9YVsxM10sbT1hWzJdLHU9YVs2XSxsPWFbMTBdLG49YVsxNF07cmV0dXJuIGFbM10qKCtlKmgqdS1kKmsqdS1lKmcqbCtjKmsqbCtkKmcqbi1jKmgqbikrYVs3XSooK2IqaCpuLWIqaypsK2UqZipsLWQqZipuK2QqayptLWUqaCptKSthWzExXSooK2Iqayp1LWIqZypuLWUqZip1K2MqZipuK2UqZyptLWMqayptKSthWzE1XSooLWQqZyptLWIqaCp1K2IqZypsK2QqZip1LWMqZipsK2MqaCptKX0sdHJhbnNwb3NlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5lbGVtZW50cyxiO2I9YVsxXTthWzFdPWFbNF07YVs0XT0KYjtiPWFbMl07YVsyXT1hWzhdO2FbOF09YjtiPWFbNl07YVs2XT1hWzldO2FbOV09YjtiPWFbM107YVszXT1hWzEyXTthWzEyXT1iO2I9YVs3XTthWzddPWFbMTNdO2FbMTNdPWI7Yj1hWzExXTthWzExXT1hWzE0XTthWzE0XT1iO3JldHVybiB0aGlzfSxzZXRQb3NpdGlvbjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmVsZW1lbnRzO2JbMTJdPWEueDtiWzEzXT1hLnk7YlsxNF09YS56O3JldHVybiB0aGlzfSxnZXRJbnZlcnNlOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5lbGVtZW50cyxkPWEuZWxlbWVudHMsZT1kWzBdLGY9ZFsxXSxnPWRbMl0saD1kWzNdLGs9ZFs0XSxtPWRbNV0sbD1kWzZdLHE9ZFs3XSxuPWRbOF0scj1kWzldLHA9ZFsxMF0sdD1kWzExXSx5PWRbMTJdLHg9ZFsxM10sdj1kWzE0XSxkPWRbMTVdLEc9cip2KnEteCpwKnEreCpsKnQtbSp2KnQtcipsKmQrbSpwKmQsdz15KnAqcS1uKnYqcS15KmwqdCtrKnYqdCtuKmwqZC1rKnAqZCxPPW4qeCpxLXkqcipxK3kqbSp0LQprKngqdC1uKm0qZCtrKnIqZCxTPXkqcipsLW4qeCpsLXkqbSpwK2sqeCpwK24qbSp2LWsqcip2LEU9ZSpHK2YqdytnKk8raCpTO2lmKDA9PT1FKXtpZighMD09PWIpdGhyb3cgRXJyb3IoIlRIUkVFLk1hdHJpeDQuZ2V0SW52ZXJzZSgpOiBjYW4ndCBpbnZlcnQgbWF0cml4LCBkZXRlcm1pbmFudCBpcyAwIik7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0LmdldEludmVyc2UoKTogY2FuJ3QgaW52ZXJ0IG1hdHJpeCwgZGV0ZXJtaW5hbnQgaXMgMCIpO3JldHVybiB0aGlzLmlkZW50aXR5KCl9RT0xL0U7Y1swXT1HKkU7Y1sxXT0oeCpwKmgtcip2KmgteCpnKnQrZip2KnQrcipnKmQtZipwKmQpKkU7Y1syXT0obSp2KmgteCpsKmgreCpnKnEtZip2KnEtbSpnKmQrZipsKmQpKkU7Y1szXT0ocipsKmgtbSpwKmgtcipnKnErZipwKnErbSpnKnQtZipsKnQpKkU7Y1s0XT13KkU7Y1s1XT0obip2KmgteSpwKmgreSpnKnQtZSp2KnQtbipnKmQrZSpwKmQpKkU7Y1s2XT0oeSpsKmgtayp2KmgtCnkqZypxK2UqdipxK2sqZypkLWUqbCpkKSpFO2NbN109KGsqcCpoLW4qbCpoK24qZypxLWUqcCpxLWsqZyp0K2UqbCp0KSpFO2NbOF09TypFO2NbOV09KHkqcipoLW4qeCpoLXkqZip0K2UqeCp0K24qZipkLWUqcipkKSpFO2NbMTBdPShrKngqaC15Km0qaCt5KmYqcS1lKngqcS1rKmYqZCtlKm0qZCkqRTtjWzExXT0obiptKmgtaypyKmgtbipmKnErZSpyKnEraypmKnQtZSptKnQpKkU7Y1sxMl09UypFO2NbMTNdPShuKngqZy15KnIqZyt5KmYqcC1lKngqcC1uKmYqditlKnIqdikqRTtjWzE0XT0oeSptKmctayp4KmcteSpmKmwrZSp4KmwraypmKnYtZSptKnYpKkU7Y1sxNV09KGsqcipnLW4qbSpnK24qZipsLWUqcipsLWsqZipwK2UqbSpwKSpFO3JldHVybiB0aGlzfSxzY2FsZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmVsZW1lbnRzLGM9YS54LGQ9YS55O2E9YS56O2JbMF0qPWM7Yls0XSo9ZDtiWzhdKj1hO2JbMV0qPWM7Yls1XSo9ZDtiWzldKj1hO2JbMl0qPWM7Yls2XSo9ZDtiWzEwXSo9CmE7YlszXSo9YztiWzddKj1kO2JbMTFdKj1hO3JldHVybiB0aGlzfSxnZXRNYXhTY2FsZU9uQXhpczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZWxlbWVudHM7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heChhWzBdKmFbMF0rYVsxXSphWzFdK2FbMl0qYVsyXSxhWzRdKmFbNF0rYVs1XSphWzVdK2FbNl0qYVs2XSxhWzhdKmFbOF0rYVs5XSphWzldK2FbMTBdKmFbMTBdKSl9LG1ha2VUcmFuc2xhdGlvbjpmdW5jdGlvbihhLGIsYyl7dGhpcy5zZXQoMSwwLDAsYSwwLDEsMCxiLDAsMCwxLGMsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LG1ha2VSb3RhdGlvblg6ZnVuY3Rpb24oYSl7dmFyIGI9TWF0aC5jb3MoYSk7YT1NYXRoLnNpbihhKTt0aGlzLnNldCgxLDAsMCwwLDAsYiwtYSwwLDAsYSxiLDAsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LG1ha2VSb3RhdGlvblk6ZnVuY3Rpb24oYSl7dmFyIGI9TWF0aC5jb3MoYSk7YT1NYXRoLnNpbihhKTt0aGlzLnNldChiLDAsYSwwLDAsMSwwLDAsLWEsMCxiLAowLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlUm90YXRpb25aOmZ1bmN0aW9uKGEpe3ZhciBiPU1hdGguY29zKGEpO2E9TWF0aC5zaW4oYSk7dGhpcy5zZXQoYiwtYSwwLDAsYSxiLDAsMCwwLDAsMSwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlUm90YXRpb25BeGlzOmZ1bmN0aW9uKGEsYil7dmFyIGM9TWF0aC5jb3MoYiksZD1NYXRoLnNpbihiKSxlPTEtYyxmPWEueCxnPWEueSxoPWEueixrPWUqZixtPWUqZzt0aGlzLnNldChrKmYrYyxrKmctZCpoLGsqaCtkKmcsMCxrKmcrZCpoLG0qZytjLG0qaC1kKmYsMCxrKmgtZCpnLG0qaCtkKmYsZSpoKmgrYywwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlU2NhbGU6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuc2V0KGEsMCwwLDAsMCxiLDAsMCwwLDAsYywwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlU2hlYXI6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuc2V0KDEsYixjLDAsYSwxLGMsMCxhLGIsMSwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSwKY29tcG9zZTpmdW5jdGlvbihhLGIsYyl7dGhpcy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihiKTt0aGlzLnNjYWxlKGMpO3RoaXMuc2V0UG9zaXRpb24oYSk7cmV0dXJuIHRoaXN9LGRlY29tcG9zZTpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGMsZCxlKXt2YXIgZj10aGlzLmVsZW1lbnRzLGc9YS5zZXQoZlswXSxmWzFdLGZbMl0pLmxlbmd0aCgpLGg9YS5zZXQoZls0XSxmWzVdLGZbNl0pLmxlbmd0aCgpLGs9YS5zZXQoZls4XSxmWzldLGZbMTBdKS5sZW5ndGgoKTswPnRoaXMuZGV0ZXJtaW5hbnQoKSYmKGc9LWcpO2MueD1mWzEyXTtjLnk9ZlsxM107Yy56PWZbMTRdO2IuY29weSh0aGlzKTtjPTEvZzt2YXIgZj0xL2gsbT0xL2s7Yi5lbGVtZW50c1swXSo9YztiLmVsZW1lbnRzWzFdKj1jO2IuZWxlbWVudHNbMl0qPWM7Yi5lbGVtZW50c1s0XSo9ZjtiLmVsZW1lbnRzWzVdKj1mO2IuZWxlbWVudHNbNl0qPWY7Yi5lbGVtZW50c1s4XSo9Cm07Yi5lbGVtZW50c1s5XSo9bTtiLmVsZW1lbnRzWzEwXSo9bTtkLnNldEZyb21Sb3RhdGlvbk1hdHJpeChiKTtlLng9ZztlLnk9aDtlLno9aztyZXR1cm4gdGhpc319KCksbWFrZVBlcnNwZWN0aXZlOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2b2lkIDA9PT1mJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUGVyc3BlY3RpdmUoKSBoYXMgYmVlbiByZWRlZmluZWQgYW5kIGhhcyBhIG5ldyBzaWduYXR1cmUuIFBsZWFzZSBjaGVjayB0aGUgZG9jcy4iKTt2YXIgZz10aGlzLmVsZW1lbnRzO2dbMF09MiplLyhiLWEpO2dbNF09MDtnWzhdPShiK2EpLyhiLWEpO2dbMTJdPTA7Z1sxXT0wO2dbNV09MiplLyhjLWQpO2dbOV09KGMrZCkvKGMtZCk7Z1sxM109MDtnWzJdPTA7Z1s2XT0wO2dbMTBdPS0oZitlKS8oZi1lKTtnWzE0XT0tMipmKmUvKGYtZSk7Z1szXT0wO2dbN109MDtnWzExXT0tMTtnWzE1XT0wO3JldHVybiB0aGlzfSxtYWtlT3J0aG9ncmFwaGljOmZ1bmN0aW9uKGEsCmIsYyxkLGUsZil7dmFyIGc9dGhpcy5lbGVtZW50cyxoPTEvKGItYSksaz0xLyhjLWQpLG09MS8oZi1lKTtnWzBdPTIqaDtnWzRdPTA7Z1s4XT0wO2dbMTJdPS0oKGIrYSkqaCk7Z1sxXT0wO2dbNV09MiprO2dbOV09MDtnWzEzXT0tKChjK2QpKmspO2dbMl09MDtnWzZdPTA7Z1sxMF09LTIqbTtnWzE0XT0tKChmK2UpKm0pO2dbM109MDtnWzddPTA7Z1sxMV09MDtnWzE1XT0xO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbGVtZW50czthPWEuZWxlbWVudHM7Zm9yKHZhciBjPTA7MTY+YztjKyspaWYoYltjXSE9PWFbY10pcmV0dXJuITE7cmV0dXJuITB9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO2Zvcih2YXIgYz0wOzE2PmM7YysrKXRoaXMuZWxlbWVudHNbY109YVtjK2JdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YSYmKGE9W10pO3ZvaWQgMD09PWImJihiPTApO3ZhciBjPXRoaXMuZWxlbWVudHM7CmFbYl09Y1swXTthW2IrMV09Y1sxXTthW2IrMl09Y1syXTthW2IrM109Y1szXTthW2IrNF09Y1s0XTthW2IrNV09Y1s1XTthW2IrNl09Y1s2XTthW2IrN109Y1s3XTthW2IrOF09Y1s4XTthW2IrOV09Y1s5XTthW2IrMTBdPWNbMTBdO2FbYisxMV09Y1sxMV07YVtiKzEyXT1jWzEyXTthW2IrMTNdPWNbMTNdO2FbYisxNF09Y1sxNF07YVtiKzE1XT1jWzE1XTtyZXR1cm4gYX19KTtlYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShYLnByb3RvdHlwZSk7ZWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWViO2ViLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO1phLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFgucHJvdG90eXBlKTtaYS5wcm90b3R5cGUuY29uc3RydWN0b3I9WmE7WmEucHJvdG90eXBlLmlzQ3ViZVRleHR1cmU9ITA7T2JqZWN0LmRlZmluZVByb3BlcnR5KFphLnByb3RvdHlwZSwiaW1hZ2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW1hZ2V9LHNldDpmdW5jdGlvbihhKXt0aGlzLmltYWdlPQphfX0pO3ZhciBEZT1uZXcgWCxFZT1uZXcgWmEseWU9W10sQWU9W10sQ2U9bmV3IEZsb2F0MzJBcnJheSgxNiksQmU9bmV3IEZsb2F0MzJBcnJheSg5KTtJZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9dGhpcy5zZXEsZD0wLGU9Yy5sZW5ndGg7ZCE9PWU7KytkKXt2YXIgZj1jW2RdO2Yuc2V0VmFsdWUoYSxiW2YuaWRdKX19O3ZhciBRZD0vKFtcd1xkX10rKShcXSk/KFxbfFwuKT8vZztmYi5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oYSxiLGMpe2I9dGhpcy5tYXBbYl07dm9pZCAwIT09YiYmYi5zZXRWYWx1ZShhLGMsdGhpcy5yZW5kZXJlcil9O2ZiLnByb3RvdHlwZS5zZXRPcHRpb25hbD1mdW5jdGlvbihhLGIsYyl7Yj1iW2NdO3ZvaWQgMCE9PWImJnRoaXMuc2V0VmFsdWUoYSxjLGIpfTtmYi51cGxvYWQ9ZnVuY3Rpb24oYSxiLGMsZCl7Zm9yKHZhciBlPTAsZj1iLmxlbmd0aDtlIT09ZjsrK2Upe3ZhciBnPWJbZV0saD1jW2cuaWRdOyExIT09CmgubmVlZHNVcGRhdGUmJmcuc2V0VmFsdWUoYSxoLnZhbHVlLGQpfX07ZmIuc2VxV2l0aFZhbHVlPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdLGQ9MCxlPWEubGVuZ3RoO2QhPT1lOysrZCl7dmFyIGY9YVtkXTtmLmlkIGluIGImJmMucHVzaChmKX1yZXR1cm4gY307dmFyIGtnPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSwKZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLApmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MiwKbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LApuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsCnNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtPYmplY3QuYXNzaWduKEgucHJvdG90eXBlLHtpc0NvbG9yOiEwLHI6MSxnOjEsYjoxLHNldDpmdW5jdGlvbihhKXthJiZhLmlzQ29sb3I/dGhpcy5jb3B5KGEpOiJudW1iZXIiPT09dHlwZW9mIGE/dGhpcy5zZXRIZXgoYSk6InN0cmluZyI9PT10eXBlb2YgYSYmdGhpcy5zZXRTdHlsZShhKTtyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMuYj10aGlzLmc9dGhpcy5yPQphO3JldHVybiB0aGlzfSxzZXRIZXg6ZnVuY3Rpb24oYSl7YT1NYXRoLmZsb29yKGEpO3RoaXMucj0oYT4+MTYmMjU1KS8yNTU7dGhpcy5nPShhPj44JjI1NSkvMjU1O3RoaXMuYj0oYSYyNTUpLzI1NTtyZXR1cm4gdGhpc30sc2V0UkdCOmZ1bmN0aW9uKGEsYixjKXt0aGlzLnI9YTt0aGlzLmc9Yjt0aGlzLmI9YztyZXR1cm4gdGhpc30sc2V0SFNMOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGMsZCl7MD5kJiYoZCs9MSk7MTxkJiYtLWQ7cmV0dXJuIGQ8MS82P2ErNiooYy1hKSpkOi41PmQ/YzpkPDIvMz9hKzYqKGMtYSkqKDIvMy1kKTphfXJldHVybiBmdW5jdGlvbihiLGMsZCl7Yj1ZLmV1Y2xpZGVhbk1vZHVsbyhiLDEpO2M9WS5jbGFtcChjLDAsMSk7ZD1ZLmNsYW1wKGQsMCwxKTswPT09Yz90aGlzLnI9dGhpcy5nPXRoaXMuYj1kOihjPS41Pj1kP2QqKDErYyk6ZCtjLWQqYyxkPTIqZC1jLHRoaXMucj1hKGQsYyxiKzEvMyksdGhpcy5nPWEoZCxjLGIpLHRoaXMuYj1hKGQsYyxiLTEvCjMpKTtyZXR1cm4gdGhpc319KCksc2V0U3R5bGU6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXt2b2lkIDAhPT1iJiYxPnBhcnNlRmxvYXQoYikmJmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IEFscGhhIGNvbXBvbmVudCBvZiAiK2ErIiB3aWxsIGJlIGlnbm9yZWQuIil9dmFyIGM7aWYoYz0vXigoPzpyZ2J8aHNsKWE/KVwoXHMqKFteXCldKilcKS8uZXhlYyhhKSl7dmFyIGQ9Y1syXTtzd2l0Y2goY1sxXSl7Y2FzZSAicmdiIjpjYXNlICJyZ2JhIjppZihjPS9eKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccyooLFxzKihbMC05XSpcLj9bMC05XSspXHMqKT8kLy5leGVjKGQpKXJldHVybiB0aGlzLnI9TWF0aC5taW4oMjU1LHBhcnNlSW50KGNbMV0sMTApKS8yNTUsdGhpcy5nPU1hdGgubWluKDI1NSxwYXJzZUludChjWzJdLDEwKSkvMjU1LHRoaXMuYj1NYXRoLm1pbigyNTUscGFyc2VJbnQoY1szXSwxMCkpLzI1NSxiKGNbNV0pLHRoaXM7aWYoYz0vXihcZCspXCVccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKCxccyooWzAtOV0qXC4/WzAtOV0rKVxzKik/JC8uZXhlYyhkKSlyZXR1cm4gdGhpcy5yPQpNYXRoLm1pbigxMDAscGFyc2VJbnQoY1sxXSwxMCkpLzEwMCx0aGlzLmc9TWF0aC5taW4oMTAwLHBhcnNlSW50KGNbMl0sMTApKS8xMDAsdGhpcy5iPU1hdGgubWluKDEwMCxwYXJzZUludChjWzNdLDEwKSkvMTAwLGIoY1s1XSksdGhpczticmVhaztjYXNlICJoc2wiOmNhc2UgImhzbGEiOmlmKGM9L14oWzAtOV0qXC4/WzAtOV0rKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooLFxzKihbMC05XSpcLj9bMC05XSspXHMqKT8kLy5leGVjKGQpKXt2YXIgZD1wYXJzZUZsb2F0KGNbMV0pLzM2MCxlPXBhcnNlSW50KGNbMl0sMTApLzEwMCxmPXBhcnNlSW50KGNbM10sMTApLzEwMDtiKGNbNV0pO3JldHVybiB0aGlzLnNldEhTTChkLGUsZil9fX1lbHNlIGlmKGM9L15cIyhbQS1GYS1mMC05XSspJC8uZXhlYyhhKSl7Yz1jWzFdO2Q9Yy5sZW5ndGg7aWYoMz09PWQpcmV0dXJuIHRoaXMucj1wYXJzZUludChjLmNoYXJBdCgwKStjLmNoYXJBdCgwKSwxNikvMjU1LHRoaXMuZz1wYXJzZUludChjLmNoYXJBdCgxKSsKYy5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoYy5jaGFyQXQoMikrYy5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKDY9PT1kKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoYy5jaGFyQXQoMCkrYy5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoYy5jaGFyQXQoMikrYy5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoYy5jaGFyQXQoNCkrYy5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfWEmJjA8YS5sZW5ndGgmJihjPWtnW2FdLHZvaWQgMCE9PWM/dGhpcy5zZXRIZXgoYyk6Y29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogVW5rbm93biBjb2xvciAiK2EpKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5yLHRoaXMuZyx0aGlzLmIpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMucj1hLnI7dGhpcy5nPWEuZzt0aGlzLmI9YS5iO3JldHVybiB0aGlzfSxjb3B5R2FtbWFUb0xpbmVhcjpmdW5jdGlvbihhLApiKXt2b2lkIDA9PT1iJiYoYj0yKTt0aGlzLnI9TWF0aC5wb3coYS5yLGIpO3RoaXMuZz1NYXRoLnBvdyhhLmcsYik7dGhpcy5iPU1hdGgucG93KGEuYixiKTtyZXR1cm4gdGhpc30sY29weUxpbmVhclRvR2FtbWE6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0yKTt2YXIgYz0wPGI/MS9iOjE7dGhpcy5yPU1hdGgucG93KGEucixjKTt0aGlzLmc9TWF0aC5wb3coYS5nLGMpO3RoaXMuYj1NYXRoLnBvdyhhLmIsYyk7cmV0dXJuIHRoaXN9LGNvbnZlcnRHYW1tYVRvTGluZWFyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yLGI9dGhpcy5nLGM9dGhpcy5iO3RoaXMucj1hKmE7dGhpcy5nPWIqYjt0aGlzLmI9YypjO3JldHVybiB0aGlzfSxjb252ZXJ0TGluZWFyVG9HYW1tYTpmdW5jdGlvbigpe3RoaXMucj1NYXRoLnNxcnQodGhpcy5yKTt0aGlzLmc9TWF0aC5zcXJ0KHRoaXMuZyk7dGhpcy5iPU1hdGguc3FydCh0aGlzLmIpO3JldHVybiB0aGlzfSxnZXRIZXg6ZnVuY3Rpb24oKXtyZXR1cm4gMjU1Kgp0aGlzLnI8PDE2XjI1NSp0aGlzLmc8PDheMjU1KnRoaXMuYjw8MH0sZ2V0SGV4U3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuKCIwMDAwMDAiK3RoaXMuZ2V0SGV4KCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNil9LGdldEhTTDpmdW5jdGlvbihhKXthPWF8fHtoOjAsczowLGw6MH07dmFyIGI9dGhpcy5yLGM9dGhpcy5nLGQ9dGhpcy5iLGU9TWF0aC5tYXgoYixjLGQpLGY9TWF0aC5taW4oYixjLGQpLGcsaD0oZitlKS8yO2lmKGY9PT1lKWY9Zz0wO2Vsc2V7dmFyIGs9ZS1mLGY9LjU+PWg/ay8oZStmKTprLygyLWUtZik7c3dpdGNoKGUpe2Nhc2UgYjpnPShjLWQpL2srKGM8ZD82OjApO2JyZWFrO2Nhc2UgYzpnPShkLWIpL2srMjticmVhaztjYXNlIGQ6Zz0oYi1jKS9rKzR9Zy89Nn1hLmg9ZzthLnM9ZjthLmw9aDtyZXR1cm4gYX0sZ2V0U3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4icmdiKCIrKDI1NSp0aGlzLnJ8MCkrIiwiKygyNTUqdGhpcy5nfDApKyIsIisoMjU1KnRoaXMuYnwwKSsiKSJ9LApvZmZzZXRIU0w6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuZ2V0SFNMKCk7ZC5oKz1hO2Qucys9YjtkLmwrPWM7dGhpcy5zZXRIU0woZC5oLGQucyxkLmwpO3JldHVybiB0aGlzfSxhZGQ6ZnVuY3Rpb24oYSl7dGhpcy5yKz1hLnI7dGhpcy5nKz1hLmc7dGhpcy5iKz1hLmI7cmV0dXJuIHRoaXN9LGFkZENvbG9yczpmdW5jdGlvbihhLGIpe3RoaXMucj1hLnIrYi5yO3RoaXMuZz1hLmcrYi5nO3RoaXMuYj1hLmIrYi5iO3JldHVybiB0aGlzfSxhZGRTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy5yKz1hO3RoaXMuZys9YTt0aGlzLmIrPWE7cmV0dXJuIHRoaXN9LHN1YjpmdW5jdGlvbihhKXt0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItYS5yKTt0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctYS5nKTt0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItYS5iKTtyZXR1cm4gdGhpc30sbXVsdGlwbHk6ZnVuY3Rpb24oYSl7dGhpcy5yKj1hLnI7dGhpcy5nKj1hLmc7dGhpcy5iKj1hLmI7cmV0dXJuIHRoaXN9LAptdWx0aXBseVNjYWxhcjpmdW5jdGlvbihhKXt0aGlzLnIqPWE7dGhpcy5nKj1hO3RoaXMuYio9YTtyZXR1cm4gdGhpc30sbGVycDpmdW5jdGlvbihhLGIpe3RoaXMucis9KGEuci10aGlzLnIpKmI7dGhpcy5nKz0oYS5nLXRoaXMuZykqYjt0aGlzLmIrPShhLmItdGhpcy5iKSpiO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucj09PXRoaXMuciYmYS5nPT09dGhpcy5nJiZhLmI9PT10aGlzLmJ9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO3RoaXMucj1hW2JdO3RoaXMuZz1hW2IrMV07dGhpcy5iPWFbYisyXTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWEmJihhPVtdKTt2b2lkIDA9PT1iJiYoYj0wKTthW2JdPXRoaXMucjthW2IrMV09dGhpcy5nO2FbYisyXT10aGlzLmI7cmV0dXJuIGF9LHRvSlNPTjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEhleCgpfX0pO3ZhciBWPXtjb21tb246e2RpZmZ1c2U6e3ZhbHVlOm5ldyBIKDE1NjU4NzM0KX0sCm9wYWNpdHk6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sb2Zmc2V0UmVwZWF0Ont2YWx1ZTpuZXcgZ2EoMCwwLDEsMSl9LHNwZWN1bGFyTWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxyZWZyYWN0aW9uUmF0aW86e3ZhbHVlOi45OH19LGFvbWFwOnthb01hcDp7dmFsdWU6bnVsbH0sYW9NYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxsaWdodG1hcDp7bGlnaHRNYXA6e3ZhbHVlOm51bGx9LGxpZ2h0TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sZW1pc3NpdmVtYXA6e2VtaXNzaXZlTWFwOnt2YWx1ZTpudWxsfX0sYnVtcG1hcDp7YnVtcE1hcDp7dmFsdWU6bnVsbH0sYnVtcFNjYWxlOnt2YWx1ZToxfX0sbm9ybWFsbWFwOntub3JtYWxNYXA6e3ZhbHVlOm51bGx9LG5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgRCgxLDEpfX0sZGlzcGxhY2VtZW50bWFwOntkaXNwbGFjZW1lbnRNYXA6e3ZhbHVlOm51bGx9LApkaXNwbGFjZW1lbnRTY2FsZTp7dmFsdWU6MX0sZGlzcGxhY2VtZW50Qmlhczp7dmFsdWU6MH19LHJvdWdobmVzc21hcDp7cm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfX0sbWV0YWxuZXNzbWFwOnttZXRhbG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxncmFkaWVudG1hcDp7Z3JhZGllbnRNYXA6e3ZhbHVlOm51bGx9fSxmb2c6e2ZvZ0RlbnNpdHk6e3ZhbHVlOjIuNUUtNH0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyRTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgSCgxNjc3NzIxNSl9fSxsaWdodHM6e2FtYmllbnRMaWdodENvbG9yOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxjb2xvcjp7fSxzaGFkb3c6e30sc2hhZG93Qmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSwKc3BvdExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGlyZWN0aW9uOnt9LGRpc3RhbmNlOnt9LGNvbmVDb3M6e30scGVudW1icmFDb3M6e30sZGVjYXk6e30sc2hhZG93Ont9LHNoYWRvd0JpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e319fSxzcG90U2hhZG93TWFwOnt2YWx1ZTpbXX0sc3BvdFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHBvaW50TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkZWNheTp7fSxkaXN0YW5jZTp7fSxzaGFkb3c6e30sc2hhZG93Qmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10sCnByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LHdpZHRoOnt9LGhlaWdodDp7fX19fSxwb2ludHM6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBIKDE1NjU4NzM0KX0sb3BhY2l0eTp7dmFsdWU6MX0sc2l6ZTp7dmFsdWU6MX0sc2NhbGU6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sb2Zmc2V0UmVwZWF0Ont2YWx1ZTpuZXcgZ2EoMCwwLDEsMSl9fX0sSGE9e21lcmdlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj17fSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuY2xvbmUoYVtjXSksZTtmb3IoZSBpbiBkKWJbZV09ZFtlXX1yZXR1cm4gYn0sY2xvbmU6ZnVuY3Rpb24oYSl7dmFyIGI9e30sYztmb3IoYyBpbiBhKXtiW2NdPXt9O2Zvcih2YXIgZCBpbiBhW2NdKXt2YXIgZT1hW2NdW2RdO2UmJihlLmlzQ29sb3J8fGUuaXNNYXRyaXgzfHxlLmlzTWF0cml4NHx8ZS5pc1ZlY3RvcjJ8fGUuaXNWZWN0b3IzfHxlLmlzVmVjdG9yNHx8ZS5pc1RleHR1cmUpP2JbY11bZF09ZS5jbG9uZSgpOgpBcnJheS5pc0FycmF5KGUpP2JbY11bZF09ZS5zbGljZSgpOmJbY11bZF09ZX19cmV0dXJuIGJ9fSxVPXthbHBoYW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xuI2VuZGlmXG4iLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XG4jZW5kaWZcbiIsYWxwaGF0ZXN0X2ZyYWdtZW50OiIjaWZkZWYgQUxQSEFURVNUXG5cdGlmICggZGlmZnVzZUNvbG9yLmEgPCBBTFBIQVRFU1QgKSBkaXNjYXJkO1xuI2VuZGlmXG4iLGFvbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGFtYmllbnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUEhZU0lDQUwgKVxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuI2VuZGlmXG4iLAphb21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwO1xuXHR1bmlmb3JtIGZsb2F0IGFvTWFwSW50ZW5zaXR5O1xuI2VuZGlmIixiZWdpbl92ZXJ0ZXg6IlxudmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9uICk7XG4iLGJlZ2lubm9ybWFsX3ZlcnRleDoiXG52ZWMzIG9iamVjdE5vcm1hbCA9IHZlYzMoIG5vcm1hbCApO1xuIixic2RmczoiZmxvYXQgcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7XG5cdGlmKCBkZWNheUV4cG9uZW50ID4gMC4wICkge1xuI2lmIGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcblx0XHRmbG9hdCBkaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0YW5jZSwgZGVjYXlFeHBvbmVudCApLCAwLjAxICk7XG5cdFx0ZmxvYXQgbWF4RGlzdGFuY2VDdXRvZmZGYWN0b3IgPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApO1xuXHRcdHJldHVybiBkaXN0YW5jZUZhbGxvZmYgKiBtYXhEaXN0YW5jZUN1dG9mZkZhY3RvcjtcbiNlbHNlXG5cdFx0cmV0dXJuIHBvdyggc2F0dXJhdGUoIC1saWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApO1xuI2VuZGlmXG5cdH1cblx0cmV0dXJuIDEuMDtcbn1cbnZlYzMgQlJERl9EaWZmdXNlX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcbn1cbnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IGRvdExIICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtNS41NTQ3MyAqIGRvdExIIC0gNi45ODMxNiApICogZG90TEggKTtcblx0cmV0dXJuICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogZnJlc25lbCArIHNwZWN1bGFyQ29sb3I7XG59XG5mbG9hdCBHX0dHWF9TbWl0aCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5MLCBjb25zdCBpbiBmbG9hdCBkb3ROViApIHtcblx0ZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApO1xuXHRmbG9hdCBnbCA9IGRvdE5MICsgc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdGZsb2F0IGd2ID0gZG90TlYgKyBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0cmV0dXJuIDEuMCAvICggZ2wgKiBndiApO1xufVxuZmxvYXQgR19HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGd2ID0gZG90TkwgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0ZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApO1xuXHRyZXR1cm4gMC41IC8gbWF4KCBndiArIGdsLCBFUFNJTE9OICk7XG59XG5mbG9hdCBEX0dHWCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGRlbm9tID0gcG93MiggZG90TkggKSAqICggYTIgLSAxLjAgKSArIDEuMDtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9tICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfR0dYKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGluY2lkZW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uICsgZ2VvbWV0cnkudmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24gKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90TEggPSBzYXR1cmF0ZSggZG90KCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiwgaGFsZkRpciApICk7XG5cdHZlYzMgRiA9IEZfU2NobGljayggc3BlY3VsYXJDb2xvciwgZG90TEggKTtcblx0ZmxvYXQgRyA9IEdfR0dYX1NtaXRoQ29ycmVsYXRlZCggYWxwaGEsIGRvdE5MLCBkb3ROViApO1xuXHRmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbnZlYzIgTFRDX1V2KCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRjb25zdCBmbG9hdCBMVVRfU0laRSAgPSA2NC4wO1xuXHRjb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTtcblx0Y29uc3QgZmxvYXQgTFVUX0JJQVMgID0gMC41IC8gTFVUX1NJWkU7XG5cdGZsb2F0IHRoZXRhID0gYWNvcyggZG90KCBOLCBWICkgKTtcblx0dmVjMiB1diA9IHZlYzIoXG5cdFx0c3FydCggc2F0dXJhdGUoIHJvdWdobmVzcyApICksXG5cdFx0c2F0dXJhdGUoIHRoZXRhIC8gKCAwLjUgKiBQSSApICkgKTtcblx0dXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xuXHRyZXR1cm4gdXY7XG59XG5mbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHtcblx0ZmxvYXQgbCA9IGxlbmd0aCggZiApO1xuXHRyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAoIGwgKyAxLjAgKSwgMC4wICk7XG59XG52ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHtcblx0ZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7XG5cdGZsb2F0IHkgPSBhYnMoIHggKTtcblx0ZmxvYXQgYSA9IDAuODYyNjcgKyAoMC40OTc4OCArIDAuMDE0MzYgKiB5ICkgKiB5O1xuXHRmbG9hdCBiID0gMy40NTA2OCArICg0LjE4ODE0ICsgeSkgKiB5O1xuXHRmbG9hdCB2ID0gYSAvIGI7XG5cdGZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKHggPiAwLjApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCAxLjAgLSB4ICogeCApIC0gdjtcblx0cmV0dXJuIGNyb3NzKCB2MSwgdjIgKSAqIHRoZXRhX3NpbnRoZXRhO1xufVxudmVjMyBMVENfRXZhbHVhdGUoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiB2ZWMzIFAsIGNvbnN0IGluIG1hdDMgbUludiwgY29uc3QgaW4gdmVjMyByZWN0Q29vcmRzWyA0IF0gKSB7XG5cdHZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgdjIgPSByZWN0Q29vcmRzWyAzIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgbGlnaHROb3JtYWwgPSBjcm9zcyggdjEsIHYyICk7XG5cdGlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7XG5cdHZlYzMgVDEsIFQyO1xuXHRUMSA9IG5vcm1hbGl6ZSggViAtIE4gKiBkb3QoIFYsIE4gKSApO1xuXHRUMiA9IC0gY3Jvc3MoIE4sIFQxICk7XG5cdG1hdDMgbWF0ID0gbUludiAqIHRyYW5zcG9zZSggbWF0MyggVDEsIFQyLCBOICkgKTtcblx0dmVjMyBjb29yZHNbIDQgXTtcblx0Y29vcmRzWyAwIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDAgXSAtIFAgKTtcblx0Y29vcmRzWyAxIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDEgXSAtIFAgKTtcblx0Y29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTtcblx0Y29vcmRzWyAzIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDMgXSAtIFAgKTtcblx0Y29vcmRzWyAwIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMCBdICk7XG5cdGNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApO1xuXHRjb29yZHNbIDIgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAyIF0gKTtcblx0Y29vcmRzWyAzIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMyBdICk7XG5cdHZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAwIF0sIGNvb3Jkc1sgMSBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDEgXSwgY29vcmRzWyAyIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAzIF0sIGNvb3Jkc1sgMCBdICk7XG5cdHZlYzMgcmVzdWx0ID0gdmVjMyggTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICkgKTtcblx0cmV0dXJuIHJlc3VsdDtcbn1cbnZlYzMgQlJERl9TcGVjdWxhcl9HR1hfRW52aXJvbm1lbnQoIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdGNvbnN0IHZlYzQgYzAgPSB2ZWM0KCAtIDEsIC0gMC4wMjc1LCAtIDAuNTcyLCAwLjAyMiApO1xuXHRjb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTtcblx0dmVjNCByID0gcm91Z2huZXNzICogYzAgKyBjMTtcblx0ZmxvYXQgYTAwNCA9IG1pbiggci54ICogci54LCBleHAyKCAtIDkuMjggKiBkb3ROViApICkgKiByLnggKyByLnk7XG5cdHZlYzIgQUIgPSB2ZWMyKCAtMS4wNCwgMS4wNCApICogYTAwNCArIHIuenc7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogQUIueCArIEFCLnk7XG59XG5mbG9hdCBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICkge1xuXHRyZXR1cm4gMC4yNTtcbn1cbmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KCBkb3ROSCwgc2hpbmluZXNzICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBpbmNpZGVudExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiArIGdlb21ldHJ5LnZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RMSCA9IHNhdHVyYXRlKCBkb3QoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCBkb3RMSCApO1xuXHRmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApO1xuXHRmbG9hdCBEID0gRF9CbGlublBob25nKCBzaGluaW5lc3MsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBHICogRCApO1xufVxuZmxvYXQgR0dYUm91Z2huZXNzVG9CbGlubkV4cG9uZW50KCBjb25zdCBpbiBmbG9hdCBnZ3hSb3VnaG5lc3MgKSB7XG5cdHJldHVybiAoIDIuMCAvIHBvdzIoIGdneFJvdWdobmVzcyArIDAuMDAwMSApIC0gMi4wICk7XG59XG5mbG9hdCBCbGlubkV4cG9uZW50VG9HR1hSb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IGJsaW5uRXhwb25lbnQgKSB7XG5cdHJldHVybiBzcXJ0KCAyLjAgLyAoIGJsaW5uRXhwb25lbnQgKyAyLjAgKSApO1xufVxuIiwKYnVtcG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0JVTVBNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtcblx0dW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7XG5cdHZlYzIgZEhkeHlfZndkKCkge1xuXHRcdHZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTtcblx0XHR2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7XG5cdFx0ZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54O1xuXHRcdGZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsO1xuXHRcdGZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsO1xuXHRcdHJldHVybiB2ZWMyKCBkQngsIGRCeSApO1xuXHR9XG5cdHZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHkgKSB7XG5cdFx0dmVjMyB2U2lnbWFYID0gZEZkeCggc3VyZl9wb3MgKTtcblx0XHR2ZWMzIHZTaWdtYVkgPSBkRmR5KCBzdXJmX3BvcyApO1xuXHRcdHZlYzMgdk4gPSBzdXJmX25vcm07XG5cdFx0dmVjMyBSMSA9IGNyb3NzKCB2U2lnbWFZLCB2TiApO1xuXHRcdHZlYzMgUjIgPSBjcm9zcyggdk4sIHZTaWdtYVggKTtcblx0XHRmbG9hdCBmRGV0ID0gZG90KCB2U2lnbWFYLCBSMSApO1xuXHRcdHZlYzMgdkdyYWQgPSBzaWduKCBmRGV0ICkgKiAoIGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApO1xuXHRcdHJldHVybiBub3JtYWxpemUoIGFicyggZkRldCApICogc3VyZl9ub3JtIC0gdkdyYWQgKTtcblx0fVxuI2VuZGlmXG4iLApjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQUElOR19QTEFORVM7ICsrIGkgKSB7XG5cdFx0dmVjNCBwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07XG5cdFx0aWYgKCBkb3QoIHZWaWV3UG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApIGRpc2NhcmQ7XG5cdH1cblx0XHRcblx0I2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyA8IE5VTV9DTElQUElOR19QTEFORVNcblx0XHRib29sIGNsaXBwZWQgPSB0cnVlO1xuXHRcdGZvciAoIGludCBpID0gVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpIDwgTlVNX0NMSVBQSU5HX1BMQU5FUzsgKysgaSApIHtcblx0XHRcdHZlYzQgcGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdO1xuXHRcdFx0Y2xpcHBlZCA9ICggZG90KCB2Vmlld1Bvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSAmJiBjbGlwcGVkO1xuXHRcdH1cblx0XHRpZiAoIGNsaXBwZWQgKSBkaXNjYXJkO1xuXHRcblx0I2VuZGlmXG4jZW5kaWZcbiIsCmNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0I2lmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAhIGRlZmluZWQoIFBIT05HIClcblx0XHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcblx0I2VuZGlmXG5cdHVuaWZvcm0gdmVjNCBjbGlwcGluZ1BsYW5lc1sgTlVNX0NMSVBQSU5HX1BMQU5FUyBdO1xuI2VuZGlmXG4iLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwICYmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAhIGRlZmluZWQoIFBIT05HIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiIsY2xpcHBpbmdfcGxhbmVzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwICYmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAhIGRlZmluZWQoIFBIT05HIClcblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWZcbiIsCmNvbG9yX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0NPTE9SXG5cdGRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yO1xuI2VuZGlmIixjb2xvcl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0NPTE9SXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWZcbiIsY29sb3JfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfQ09MT1Jcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfdmVydGV4OiIjaWZkZWYgVVNFX0NPTE9SXG5cdHZDb2xvci54eXogPSBjb2xvci54eXo7XG4jZW5kaWYiLGNvbW1vbjoiI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU5XG4jZGVmaW5lIFBJMiA2LjI4MzE4NTMwNzE4XG4jZGVmaW5lIFBJX0hBTEYgMS41NzA3OTYzMjY3OTQ5XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxOFxuI2RlZmluZSBSRUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0XG4jZGVmaW5lIExPRzIgMS40NDI2OTVcbiNkZWZpbmUgRVBTSUxPTiAxZS02XG4jZGVmaW5lIHNhdHVyYXRlKGEpIGNsYW1wKCBhLCAwLjAsIDEuMCApXG4jZGVmaW5lIHdoaXRlQ29tcGxpbWVudChhKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKVxuZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfVxuZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9XG5mbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9XG5mbG9hdCBhdmVyYWdlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgeyByZXR1cm4gZG90KCBjb2xvciwgdmVjMyggMC4zMzMzICkgKTsgfVxuaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHtcblx0Y29uc3QgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTgsIGIgPSA3OC4yMzMsIGMgPSA0Mzc1OC41NDUzO1xuXHRoaWdocCBmbG9hdCBkdCA9IGRvdCggdXYueHksIHZlYzIoIGEsYiApICksIHNuID0gbW9kKCBkdCwgUEkgKTtcblx0cmV0dXJuIGZyYWN0KHNpbihzbikgKiBjKTtcbn1cbnN0cnVjdCBJbmNpZGVudExpZ2h0IHtcblx0dmVjMyBjb2xvcjtcblx0dmVjMyBkaXJlY3Rpb247XG5cdGJvb2wgdmlzaWJsZTtcbn07XG5zdHJ1Y3QgUmVmbGVjdGVkTGlnaHQge1xuXHR2ZWMzIGRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgZGlyZWN0U3BlY3VsYXI7XG5cdHZlYzMgaW5kaXJlY3REaWZmdXNlO1xuXHR2ZWMzIGluZGlyZWN0U3BlY3VsYXI7XG59O1xuc3RydWN0IEdlb21ldHJpY0NvbnRleHQge1xuXHR2ZWMzIHBvc2l0aW9uO1xuXHR2ZWMzIG5vcm1hbDtcblx0dmVjMyB2aWV3RGlyO1xufTtcbnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xufVxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xufVxudmVjMyBwcm9qZWN0T25QbGFuZShpbiB2ZWMzIHBvaW50LCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0ZmxvYXQgZGlzdGFuY2UgPSBkb3QoIHBsYW5lTm9ybWFsLCBwb2ludCAtIHBvaW50T25QbGFuZSApO1xuXHRyZXR1cm4gLSBkaXN0YW5jZSAqIHBsYW5lTm9ybWFsICsgcG9pbnQ7XG59XG5mbG9hdCBzaWRlT2ZQbGFuZSggaW4gdmVjMyBwb2ludCwgaW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdHJldHVybiBzaWduKCBkb3QoIHBvaW50IC0gcG9pbnRPblBsYW5lLCBwbGFuZU5vcm1hbCApICk7XG59XG52ZWMzIGxpbmVQbGFuZUludGVyc2VjdCggaW4gdmVjMyBwb2ludE9uTGluZSwgaW4gdmVjMyBsaW5lRGlyZWN0aW9uLCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0cmV0dXJuIGxpbmVEaXJlY3Rpb24gKiAoIGRvdCggcGxhbmVOb3JtYWwsIHBvaW50T25QbGFuZSAtIHBvaW50T25MaW5lICkgLyBkb3QoIHBsYW5lTm9ybWFsLCBsaW5lRGlyZWN0aW9uICkgKSArIHBvaW50T25MaW5lO1xufVxubWF0MyB0cmFuc3Bvc2UoIGNvbnN0IGluIG1hdDMgdiApIHtcblx0bWF0MyB0bXA7XG5cdHRtcFswXSA9IHZlYzModlswXS54LCB2WzFdLngsIHZbMl0ueCk7XG5cdHRtcFsxXSA9IHZlYzModlswXS55LCB2WzFdLnksIHZbMl0ueSk7XG5cdHRtcFsyXSA9IHZlYzModlswXS56LCB2WzFdLnosIHZbMl0ueik7XG5cdHJldHVybiB0bXA7XG59XG4iLApjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6IiNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWXG4jZGVmaW5lIGN1YmVVVl90ZXh0dXJlU2l6ZSAoMTAyNC4wKVxuaW50IGdldEZhY2VGcm9tRGlyZWN0aW9uKHZlYzMgZGlyZWN0aW9uKSB7XG5cdHZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKGRpcmVjdGlvbik7XG5cdGludCBmYWNlID0gLTE7XG5cdGlmKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkge1xuXHRcdGlmKGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMCA6IDM7XG5cdFx0ZWxzZVxuXHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMSA6IDQ7XG5cdH1cblx0ZWxzZSB7XG5cdFx0aWYoYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApXG5cdFx0XHRmYWNlID0gZGlyZWN0aW9uLnogPiAwLjAgPyAyIDogNTtcblx0XHRlbHNlXG5cdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxIDogNDtcblx0fVxuXHRyZXR1cm4gZmFjZTtcbn1cbiNkZWZpbmUgY3ViZVVWX21heExvZHMxICAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAxLjApXG4jZGVmaW5lIGN1YmVVVl9yYW5nZUNsYW1wIChleHAyKCg2LjAgLSAxLjApICogMi4wKSlcbnZlYzIgTWlwTGV2ZWxJbmZvKCB2ZWMzIHZlYywgZmxvYXQgcm91Z2huZXNzTGV2ZWwsIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgc2NhbGUgPSBleHAyKGN1YmVVVl9tYXhMb2RzMSAtIHJvdWdobmVzc0xldmVsKTtcblx0ZmxvYXQgZHhSb3VnaG5lc3MgPSBkRmR4KHJvdWdobmVzcyk7XG5cdGZsb2F0IGR5Um91Z2huZXNzID0gZEZkeShyb3VnaG5lc3MpO1xuXHR2ZWMzIGR4ID0gZEZkeCggdmVjICogc2NhbGUgKiBkeFJvdWdobmVzcyApO1xuXHR2ZWMzIGR5ID0gZEZkeSggdmVjICogc2NhbGUgKiBkeVJvdWdobmVzcyApO1xuXHRmbG9hdCBkID0gbWF4KCBkb3QoIGR4LCBkeCApLCBkb3QoIGR5LCBkeSApICk7XG5cdGQgPSBjbGFtcChkLCAxLjAsIGN1YmVVVl9yYW5nZUNsYW1wKTtcblx0ZmxvYXQgbWlwTGV2ZWwgPSAwLjUgKiBsb2cyKGQpO1xuXHRyZXR1cm4gdmVjMihmbG9vcihtaXBMZXZlbCksIGZyYWN0KG1pcExldmVsKSk7XG59XG4jZGVmaW5lIGN1YmVVVl9tYXhMb2RzMiAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAyLjApXG4jZGVmaW5lIGN1YmVVVl9yY3BUZXh0dXJlU2l6ZSAoMS4wIC8gY3ViZVVWX3RleHR1cmVTaXplKVxudmVjMiBnZXRDdWJlVVYodmVjMyBkaXJlY3Rpb24sIGZsb2F0IHJvdWdobmVzc0xldmVsLCBmbG9hdCBtaXBMZXZlbCkge1xuXHRtaXBMZXZlbCA9IHJvdWdobmVzc0xldmVsID4gY3ViZVVWX21heExvZHMyIC0gMy4wID8gMC4wIDogbWlwTGV2ZWw7XG5cdGZsb2F0IGEgPSAxNi4wICogY3ViZVVWX3JjcFRleHR1cmVTaXplO1xuXHR2ZWMyIGV4cDJfcGFja2VkID0gZXhwMiggdmVjMiggcm91Z2huZXNzTGV2ZWwsIG1pcExldmVsICkgKTtcblx0dmVjMiByY3BfZXhwMl9wYWNrZWQgPSB2ZWMyKCAxLjAgKSAvIGV4cDJfcGFja2VkO1xuXHRmbG9hdCBwb3dTY2FsZSA9IGV4cDJfcGFja2VkLnggKiBleHAyX3BhY2tlZC55O1xuXHRmbG9hdCBzY2FsZSA9IHJjcF9leHAyX3BhY2tlZC54ICogcmNwX2V4cDJfcGFja2VkLnkgKiAwLjI1O1xuXHRmbG9hdCBtaXBPZmZzZXQgPSAwLjc1KigxLjAgLSByY3BfZXhwMl9wYWNrZWQueSkgKiByY3BfZXhwMl9wYWNrZWQueDtcblx0Ym9vbCBiUmVzID0gbWlwTGV2ZWwgPT0gMC4wO1xuXHRzY2FsZSA9ICBiUmVzICYmIChzY2FsZSA8IGEpID8gYSA6IHNjYWxlO1xuXHR2ZWMzIHI7XG5cdHZlYzIgb2Zmc2V0O1xuXHRpbnQgZmFjZSA9IGdldEZhY2VGcm9tRGlyZWN0aW9uKGRpcmVjdGlvbik7XG5cdGZsb2F0IHJjcFBvd1NjYWxlID0gMS4wIC8gcG93U2NhbGU7XG5cdGlmKCBmYWNlID09IDApIHtcblx0XHRyID0gdmVjMyhkaXJlY3Rpb24ueCwgLWRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSk7XG5cdFx0b2Zmc2V0ID0gdmVjMigwLjArbWlwT2Zmc2V0LDAuNzUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVzICYmIChvZmZzZXQueSA8IDIuMCphKSA/IGEgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNlIGlmKCBmYWNlID09IDEpIHtcblx0XHRyID0gdmVjMyhkaXJlY3Rpb24ueSwgZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56KTtcblx0XHRvZmZzZXQgPSB2ZWMyKHNjYWxlK21pcE9mZnNldCwgMC43NSAqIHJjcFBvd1NjYWxlKTtcblx0XHRvZmZzZXQueSA9IGJSZXMgJiYgKG9mZnNldC55IDwgMi4wKmEpID8gYSA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgPT0gMikge1xuXHRcdHIgPSB2ZWMzKGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCA9IHZlYzIoMi4wKnNjYWxlK21pcE9mZnNldCwgMC43NSAqIHJjcFBvd1NjYWxlKTtcblx0XHRvZmZzZXQueSA9IGJSZXMgJiYgKG9mZnNldC55IDwgMi4wKmEpID8gYSA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgPT0gMykge1xuXHRcdHIgPSB2ZWMzKGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCA9IHZlYzIoMC4wK21pcE9mZnNldCwwLjUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVzICYmIChvZmZzZXQueSA8IDIuMCphKSA/IDAuMCA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgPT0gNCkge1xuXHRcdHIgPSB2ZWMzKGRpcmVjdGlvbi55LCBkaXJlY3Rpb24ueCwgLWRpcmVjdGlvbi56KTtcblx0XHRvZmZzZXQgPSB2ZWMyKHNjYWxlK21pcE9mZnNldCwgMC41ICogcmNwUG93U2NhbGUpO1xuXHRcdG9mZnNldC55ID0gYlJlcyAmJiAob2Zmc2V0LnkgPCAyLjAqYSkgPyAwLjAgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNlIHtcblx0XHRyID0gdmVjMyhkaXJlY3Rpb24ueiwgLWRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueSk7XG5cdFx0b2Zmc2V0ID0gdmVjMigyLjAqc2NhbGUrbWlwT2Zmc2V0LCAwLjUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVzICYmIChvZmZzZXQueSA8IDIuMCphKSA/IDAuMCA6IG9mZnNldC55O1xuXHR9XG5cdHIgPSBub3JtYWxpemUocik7XG5cdGZsb2F0IHRleGVsT2Zmc2V0ID0gMC41ICogY3ViZVVWX3JjcFRleHR1cmVTaXplO1xuXHR2ZWMyIHMgPSAoIHIueXogLyBhYnMoIHIueCApICsgdmVjMiggMS4wICkgKSAqIDAuNTtcblx0dmVjMiBiYXNlID0gb2Zmc2V0ICsgdmVjMiggdGV4ZWxPZmZzZXQgKTtcblx0cmV0dXJuIGJhc2UgKyBzICogKCBzY2FsZSAtIDIuMCAqIHRleGVsT2Zmc2V0ICk7XG59XG4jZGVmaW5lIGN1YmVVVl9tYXhMb2RzMyAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAzLjApXG52ZWM0IHRleHR1cmVDdWJlVVYodmVjMyByZWZsZWN0ZWREaXJlY3Rpb24sIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgcm91Z2huZXNzVmFsID0gcm91Z2huZXNzKiBjdWJlVVZfbWF4TG9kczM7XG5cdGZsb2F0IHIxID0gZmxvb3Iocm91Z2huZXNzVmFsKTtcblx0ZmxvYXQgcjIgPSByMSArIDEuMDtcblx0ZmxvYXQgdCA9IGZyYWN0KHJvdWdobmVzc1ZhbCk7XG5cdHZlYzIgbWlwSW5mbyA9IE1pcExldmVsSW5mbyhyZWZsZWN0ZWREaXJlY3Rpb24sIHIxLCByb3VnaG5lc3MpO1xuXHRmbG9hdCBzID0gbWlwSW5mby55O1xuXHRmbG9hdCBsZXZlbDAgPSBtaXBJbmZvLng7XG5cdGZsb2F0IGxldmVsMSA9IGxldmVsMCArIDEuMDtcblx0bGV2ZWwxID0gbGV2ZWwxID4gNS4wID8gNS4wIDogbGV2ZWwxO1xuXHRsZXZlbDAgKz0gbWluKCBmbG9vciggcyArIDAuNSApLCA1LjAgKTtcblx0dmVjMiB1dl8xMCA9IGdldEN1YmVVVihyZWZsZWN0ZWREaXJlY3Rpb24sIHIxLCBsZXZlbDApO1xuXHR2ZWM0IGNvbG9yMTAgPSBlbnZNYXBUZXhlbFRvTGluZWFyKHRleHR1cmUyRChlbnZNYXAsIHV2XzEwKSk7XG5cdHZlYzIgdXZfMjAgPSBnZXRDdWJlVVYocmVmbGVjdGVkRGlyZWN0aW9uLCByMiwgbGV2ZWwwKTtcblx0dmVjNCBjb2xvcjIwID0gZW52TWFwVGV4ZWxUb0xpbmVhcih0ZXh0dXJlMkQoZW52TWFwLCB1dl8yMCkpO1xuXHR2ZWM0IHJlc3VsdCA9IG1peChjb2xvcjEwLCBjb2xvcjIwLCB0KTtcblx0cmV0dXJuIHZlYzQocmVzdWx0LnJnYiwgMS4wKTtcbn1cbiNlbmRpZlxuIiwKZGVmYXVsdG5vcm1hbF92ZXJ0ZXg6IiNpZmRlZiBGTElQX1NJREVEXG5cdG9iamVjdE5vcm1hbCA9IC1vYmplY3ROb3JtYWw7XG4jZW5kaWZcbnZlYzMgdHJhbnNmb3JtZWROb3JtYWwgPSBub3JtYWxNYXRyaXggKiBvYmplY3ROb3JtYWw7XG4iLGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZGlzcGxhY2VtZW50TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxlO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudEJpYXM7XG4jZW5kaWZcbiIsZGlzcGxhY2VtZW50bWFwX3ZlcnRleDoiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dHJhbnNmb3JtZWQgKz0gbm9ybWFsICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7XG4jZW5kaWZcbiIsZW1pc3NpdmVtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcblx0dmVjNCBlbWlzc2l2ZUNvbG9yID0gdGV4dHVyZTJEKCBlbWlzc2l2ZU1hcCwgdlV2ICk7XG5cdGVtaXNzaXZlQ29sb3IucmdiID0gZW1pc3NpdmVNYXBUZXhlbFRvTGluZWFyKCBlbWlzc2l2ZUNvbG9yICkucmdiO1xuXHR0b3RhbEVtaXNzaXZlUmFkaWFuY2UgKj0gZW1pc3NpdmVDb2xvci5yZ2I7XG4jZW5kaWZcbiIsCmVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZW1pc3NpdmVNYXA7XG4jZW5kaWZcbiIsZW5jb2RpbmdzX2ZyYWdtZW50OiIgIGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApO1xuIixlbmNvZGluZ3NfcGFyc19mcmFnbWVudDoiXG52ZWM0IExpbmVhclRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmFsdWU7XG59XG52ZWM0IEdhbW1hVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IGdhbW1hRmFjdG9yICkge1xuXHRyZXR1cm4gdmVjNCggcG93KCB2YWx1ZS54eXosIHZlYzMoIGdhbW1hRmFjdG9yICkgKSwgdmFsdWUudyApO1xufVxudmVjNCBMaW5lYXJUb0dhbW1hKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBnYW1tYUZhY3RvciApIHtcblx0cmV0dXJuIHZlYzQoIHBvdyggdmFsdWUueHl6LCB2ZWMzKCAxLjAgLyBnYW1tYUZhY3RvciApICksIHZhbHVlLncgKTtcbn1cbnZlYzQgc1JHQlRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoIDAuMDUyMTMyNzAxNCApLCB2ZWMzKCAyLjQgKSApLCB2YWx1ZS5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMyggMC4wNDA0NSApICkgKSApLCB2YWx1ZS53ICk7XG59XG52ZWM0IExpbmVhclRvc1JHQiggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IsIHZlYzMoIDAuNDE2NjYgKSApICogMS4wNTUgLSB2ZWMzKCAwLjA1NSApLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMyggbGVzc1RoYW5FcXVhbCggdmFsdWUucmdiLCB2ZWMzKCAwLjAwMzEzMDggKSApICkgKSwgdmFsdWUudyApO1xufVxudmVjNCBSR0JFVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgKiBleHAyKCB2YWx1ZS5hICogMjU1LjAgLSAxMjguMCApLCAxLjAgKTtcbn1cbnZlYzQgTGluZWFyVG9SR0JFKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRmbG9hdCBtYXhDb21wb25lbnQgPSBtYXgoIG1heCggdmFsdWUuciwgdmFsdWUuZyApLCB2YWx1ZS5iICk7XG5cdGZsb2F0IGZFeHAgPSBjbGFtcCggY2VpbCggbG9nMiggbWF4Q29tcG9uZW50ICkgKSwgLTEyOC4wLCAxMjcuMCApO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiIC8gZXhwMiggZkV4cCApLCAoIGZFeHAgKyAxMjguMCApIC8gMjU1LjAgKTtcbn1cbnZlYzQgUkdCTVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBtYXhSYW5nZSApIHtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnh5eiAqIHZhbHVlLncgKiBtYXhSYW5nZSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCTSggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdGZsb2F0IG1heFJHQiA9IG1heCggdmFsdWUueCwgbWF4KCB2YWx1ZS5nLCB2YWx1ZS5iICkgKTtcblx0ZmxvYXQgTSAgICAgID0gY2xhbXAoIG1heFJHQiAvIG1heFJhbmdlLCAwLjAsIDEuMCApO1xuXHRNICAgICAgICAgICAgPSBjZWlsKCBNICogMjU1LjAgKSAvIDI1NS4wO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiIC8gKCBNICogbWF4UmFuZ2UgKSwgTSApO1xufVxudmVjNCBSR0JEVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogKCAoIG1heFJhbmdlIC8gMjU1LjAgKSAvIHZhbHVlLmEgKSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCRCggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdGZsb2F0IG1heFJHQiA9IG1heCggdmFsdWUueCwgbWF4KCB2YWx1ZS5nLCB2YWx1ZS5iICkgKTtcblx0ZmxvYXQgRCAgICAgID0gbWF4KCBtYXhSYW5nZSAvIG1heFJHQiwgMS4wICk7XG5cdEQgICAgICAgICAgICA9IG1pbiggZmxvb3IoIEQgKSAvIDI1NS4wLCAxLjAgKTtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAqICggRCAqICggMjU1LjAgLyBtYXhSYW5nZSApICksIEQgKTtcbn1cbmNvbnN0IG1hdDMgY0xvZ0x1dk0gPSBtYXQzKCAwLjIyMDksIDAuMzM5MCwgMC40MTg0LCAwLjExMzgsIDAuNjc4MCwgMC43MzE5LCAwLjAxMDIsIDAuMTEzMCwgMC4yOTY5ICk7XG52ZWM0IExpbmVhclRvTG9nTHV2KCBpbiB2ZWM0IHZhbHVlICkgIHtcblx0dmVjMyBYcF9ZX1hZWnAgPSB2YWx1ZS5yZ2IgKiBjTG9nTHV2TTtcblx0WHBfWV9YWVpwID0gbWF4KFhwX1lfWFlacCwgdmVjMygxZS02LCAxZS02LCAxZS02KSk7XG5cdHZlYzQgdlJlc3VsdDtcblx0dlJlc3VsdC54eSA9IFhwX1lfWFlacC54eSAvIFhwX1lfWFlacC56O1xuXHRmbG9hdCBMZSA9IDIuMCAqIGxvZzIoWHBfWV9YWVpwLnkpICsgMTI3LjA7XG5cdHZSZXN1bHQudyA9IGZyYWN0KExlKTtcblx0dlJlc3VsdC56ID0gKExlIC0gKGZsb29yKHZSZXN1bHQudyoyNTUuMCkpLzI1NS4wKS8yNTUuMDtcblx0cmV0dXJuIHZSZXN1bHQ7XG59XG5jb25zdCBtYXQzIGNMb2dMdXZJbnZlcnNlTSA9IG1hdDMoIDYuMDAxNCwgLTIuNzAwOCwgLTEuNzk5NiwgLTEuMzMyMCwgMy4xMDI5LCAtNS43NzIxLCAwLjMwMDgsIC0xLjA4ODIsIDUuNjI2OCApO1xudmVjNCBMb2dMdXZUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0ZmxvYXQgTGUgPSB2YWx1ZS56ICogMjU1LjAgKyB2YWx1ZS53O1xuXHR2ZWMzIFhwX1lfWFlacDtcblx0WHBfWV9YWVpwLnkgPSBleHAyKChMZSAtIDEyNy4wKSAvIDIuMCk7XG5cdFhwX1lfWFlacC56ID0gWHBfWV9YWVpwLnkgLyB2YWx1ZS55O1xuXHRYcF9ZX1hZWnAueCA9IHZhbHVlLnggKiBYcF9ZX1hZWnAuejtcblx0dmVjMyB2UkdCID0gWHBfWV9YWVpwLnJnYiAqIGNMb2dMdXZJbnZlcnNlTTtcblx0cmV0dXJuIHZlYzQoIG1heCh2UkdCLCAwLjApLCAxLjAgKTtcbn1cbiIsCmVudm1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HIClcblx0XHR2ZWMzIGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2Vsc2Vcblx0XHR2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIGZsaXBOb3JtYWwgKiB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfRVFVSVJFQyApXG5cdFx0dmVjMiBzYW1wbGVVVjtcblx0XHRzYW1wbGVVVi55ID0gc2F0dXJhdGUoIGZsaXBOb3JtYWwgKiByZWZsZWN0VmVjLnkgKiAwLjUgKyAwLjUgKTtcblx0XHRzYW1wbGVVVi54ID0gYXRhbiggZmxpcE5vcm1hbCAqIHJlZmxlY3RWZWMueiwgZmxpcE5vcm1hbCAqIHJlZmxlY3RWZWMueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7XG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmUyRCggZW52TWFwLCBzYW1wbGVVViApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9TUEhFUkUgKVxuXHRcdHZlYzMgcmVmbGVjdFZpZXcgPSBmbGlwTm9ybWFsICogbm9ybWFsaXplKCAoIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZsZWN0VmVjLCAwLjAgKSApLnh5eiArIHZlYzMoIDAuMCwgMC4wLCAxLjAgKSApO1xuXHRcdHZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlMkQoIGVudk1hcCwgcmVmbGVjdFZpZXcueHkgKiAwLjUgKyAwLjUgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7XG5cdCNlbmRpZlxuXHRlbnZDb2xvciA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudkNvbG9yICk7XG5cdCNpZmRlZiBFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFlcblx0XHRvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBvdXRnb2luZ0xpZ2h0ICogZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19NSVggKVxuXHRcdG91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfQUREIClcblx0XHRvdXRnb2luZ0xpZ2h0ICs9IGVudkNvbG9yLnh5eiAqIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHk7XG5cdCNlbmRpZlxuI2VuZGlmXG4iLAplbnZtYXBfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkKCBQSFlTSUNBTCApXG5cdHVuaWZvcm0gZmxvYXQgcmVmbGVjdGl2aXR5O1xuXHR1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAoIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HICkgKVxuXHRcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHQjZW5kaWZcblx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKSB8fCBkZWZpbmVkKCBQSFlTSUNBTCApXG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHQjZW5kaWZcbiNlbmRpZlxuIiwKZW52bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKVxuXHRcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbmRpZlxuI2VuZGlmXG4iLGVudm1hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApXG5cdFx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcblx0I2Vsc2Vcblx0XHR2ZWMzIGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZSZWZsZWN0ID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWZcbiIsCmZvZ192ZXJ0ZXg6IlxuI2lmZGVmIFVTRV9GT0dcbmZvZ0RlcHRoID0gLW12UG9zaXRpb24uejtcbiNlbmRpZiIsZm9nX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0ZPR1xuICB2YXJ5aW5nIGZsb2F0IGZvZ0RlcHRoO1xuI2VuZGlmXG4iLGZvZ19mcmFnbWVudDoiI2lmZGVmIFVTRV9GT0dcblx0I2lmZGVmIEZPR19FWFAyXG5cdFx0ZmxvYXQgZm9nRmFjdG9yID0gd2hpdGVDb21wbGltZW50KCBleHAyKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogZm9nRGVwdGggKiBmb2dEZXB0aCAqIExPRzIgKSApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgZm9nRGVwdGggKTtcblx0I2VuZGlmXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTtcbiNlbmRpZlxuIixmb2dfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9GT0dcblx0dW5pZm9ybSB2ZWMzIGZvZ0NvbG9yO1xuXHR2YXJ5aW5nIGZsb2F0IGZvZ0RlcHRoO1xuXHQjaWZkZWYgRk9HX0VYUDJcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dOZWFyO1xuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRmFyO1xuXHQjZW5kaWZcbiNlbmRpZlxuIiwKZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFRPT05cblx0dW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnRNYXA7XG5cdHZlYzMgZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCB2ZWMzIG5vcm1hbCwgdmVjMyBsaWdodERpcmVjdGlvbiApIHtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApO1xuXHRcdHZlYzIgY29vcmQgPSB2ZWMyKCBkb3ROTCAqIDAuNSArIDAuNSwgMC4wICk7XG5cdFx0I2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkucmdiO1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gKCBjb29yZC54IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWZcbiIsbGlnaHRtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IFBJICogdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApLnh5eiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xuI2VuZGlmXG4iLApsaWdodG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5O1xuI2VuZGlmIixsaWdodHNfbGFtYmVydF92ZXJ0ZXg6InZlYzMgZGlmZnVzZSA9IHZlYzMoIDEuMCApO1xuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uID0gbXZQb3NpdGlvbi54eXo7XG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5nZW9tZXRyeS52aWV3RGlyID0gbm9ybWFsaXplKCAtbXZQb3NpdGlvbi54eXogKTtcbkdlb21ldHJpY0NvbnRleHQgYmFja0dlb21ldHJ5O1xuYmFja0dlb21ldHJ5LnBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247XG5iYWNrR2VvbWV0cnkubm9ybWFsID0gLWdlb21ldHJ5Lm5vcm1hbDtcbmJhY2tHZW9tZXRyeS52aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjtcbnZMaWdodEZyb250ID0gdmVjMyggMC4wICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTtcbiNlbmRpZlxuSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDtcbmZsb2F0IGRvdE5MO1xudmVjMyBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRQb2ludERpcmVjdExpZ2h0SXJyYWRpYW5jZSggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gUEkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjZW5kaWZcblx0fVxuI2VuZGlmXG4jaWYgTlVNX1NQT1RfTElHSFRTID4gMFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0U3BvdERpcmVjdExpZ2h0SXJyYWRpYW5jZSggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBQSSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdHZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC1kb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWZcbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodElycmFkaWFuY2UoIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IFBJICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLWRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xuXHRcdHZMaWdodEZyb250ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5ICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZlxuIiwKbGlnaHRzX3BhcnM6InVuaWZvcm0gdmVjMyBhbWJpZW50TGlnaHRDb2xvcjtcbnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHtcblx0dmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHRyZXR1cm4gaXJyYWRpYW5jZTtcbn1cbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0aW50IHNoYWRvdztcblx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdH07XG5cdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0c1sgTlVNX0RJUl9MSUdIVFMgXTtcblx0dm9pZCBnZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCApIHtcblx0XHRkaXJlY3RMaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7XG5cdFx0ZGlyZWN0TGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247XG5cdFx0ZGlyZWN0TGlnaHQudmlzaWJsZSA9IHRydWU7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBQb2ludExpZ2h0IHtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdFx0aW50IHNoYWRvdztcblx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdH07XG5cdHVuaWZvcm0gUG9pbnRMaWdodCBwb2ludExpZ2h0c1sgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFBvaW50RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICkge1xuXHRcdHZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IHB1bmN0dWFsTGlnaHRJbnRlbnNpdHlUb0lycmFkaWFuY2VGYWN0b3IoIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTtcblx0XHRkaXJlY3RMaWdodC52aXNpYmxlID0gKCBkaXJlY3RMaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBTcG90TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRmbG9hdCBjb25lQ29zO1xuXHRcdGZsb2F0IHBlbnVtYnJhQ29zO1xuXHRcdGludCBzaGFkb3c7XG5cdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHR9O1xuXHR1bmlmb3JtIFNwb3RMaWdodCBzcG90TGlnaHRzWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCAgKSB7XG5cdFx0dmVjMyBsVmVjdG9yID0gc3BvdExpZ2h0LnBvc2l0aW9uIC0gZ2VvbWV0cnkucG9zaXRpb247XG5cdFx0ZGlyZWN0TGlnaHQuZGlyZWN0aW9uID0gbm9ybWFsaXplKCBsVmVjdG9yICk7XG5cdFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xuXHRcdGZsb2F0IGFuZ2xlQ29zID0gZG90KCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRpZiAoIGFuZ2xlQ29zID4gc3BvdExpZ2h0LmNvbmVDb3MgKSB7XG5cdFx0XHRmbG9hdCBzcG90RWZmZWN0ID0gc21vb3Roc3RlcCggc3BvdExpZ2h0LmNvbmVDb3MsIHNwb3RMaWdodC5wZW51bWJyYUNvcywgYW5nbGVDb3MgKTtcblx0XHRcdGRpcmVjdExpZ2h0LmNvbG9yID0gc3BvdExpZ2h0LmNvbG9yO1xuXHRcdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gc3BvdEVmZmVjdCAqIHB1bmN0dWFsTGlnaHRJbnRlbnNpdHlUb0lycmFkaWFuY2VGYWN0b3IoIGxpZ2h0RGlzdGFuY2UsIHNwb3RMaWdodC5kaXN0YW5jZSwgc3BvdExpZ2h0LmRlY2F5ICk7XG5cdFx0XHRkaXJlY3RMaWdodC52aXNpYmxlID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGlyZWN0TGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTtcblx0XHRcdGRpcmVjdExpZ2h0LnZpc2libGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHRzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7XG5cdFx0dmVjMyBjb2xvcjtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodDtcblx0fTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgbHRjTWF0O1x0dW5pZm9ybSBzYW1wbGVyMkQgbHRjTWFnO1xuXHR1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07XG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwXG5cdHN0cnVjdCBIZW1pc3BoZXJlTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgc2t5Q29sb3I7XG5cdFx0dmVjMyBncm91bmRDb2xvcjtcblx0fTtcblx0dW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07XG5cdHZlYzMgZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gSGVtaXNwaGVyZUxpZ2h0IGhlbWlMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSApIHtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTtcblx0XHR2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApO1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdFx0aXJyYWRpYW5jZSAqPSBQSTtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gaXJyYWRpYW5jZTtcblx0fVxuI2VuZGlmXG4jaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFBIWVNJQ0FMIClcblx0dmVjMyBnZXRMaWdodFByb2JlSW5kaXJlY3RJcnJhZGlhbmNlKCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBpbnQgbWF4TUlQTGV2ZWwgKSB7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGdlb21ldHJ5Lm5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0XHR2ZWMzIHF1ZXJ5VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHdvcmxkTm9ybWFsLngsIHdvcmxkTm9ybWFsLnl6ICk7XG5cdFx0XHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZUxvZEVYVCggZW52TWFwLCBxdWVyeVZlYywgZmxvYXQoIG1heE1JUExldmVsICkgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCBxdWVyeVZlYywgZmxvYXQoIG1heE1JUExldmVsICkgKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiID0gZW52TWFwVGV4ZWxUb0xpbmVhciggZW52TWFwQ29sb3IgKS5yZ2I7XG5cdFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0XHR2ZWMzIHF1ZXJ5VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHdvcmxkTm9ybWFsLngsIHdvcmxkTm9ybWFsLnl6ICk7XG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggcXVlcnlWZWMsIDEuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdmVjNCggMC4wICk7XG5cdFx0I2VuZGlmXG5cdFx0cmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHR9XG5cdGZsb2F0IGdldFNwZWN1bGFyTUlQTGV2ZWwoIGNvbnN0IGluIGZsb2F0IGJsaW5uU2hpbmluZXNzRXhwb25lbnQsIGNvbnN0IGluIGludCBtYXhNSVBMZXZlbCApIHtcblx0XHRmbG9hdCBtYXhNSVBMZXZlbFNjYWxhciA9IGZsb2F0KCBtYXhNSVBMZXZlbCApO1xuXHRcdGZsb2F0IGRlc2lyZWRNSVBMZXZlbCA9IG1heE1JUExldmVsU2NhbGFyIC0gMC43OTI0OCAtIDAuNSAqIGxvZzIoIHBvdzIoIGJsaW5uU2hpbmluZXNzRXhwb25lbnQgKSArIDEuMCApO1xuXHRcdHJldHVybiBjbGFtcCggZGVzaXJlZE1JUExldmVsLCAwLjAsIG1heE1JUExldmVsU2NhbGFyICk7XG5cdH1cblx0dmVjMyBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gZmxvYXQgYmxpbm5TaGluaW5lc3NFeHBvbmVudCwgY29uc3QgaW4gaW50IG1heE1JUExldmVsICkge1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCAtZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZlYzMgcmVmbGVjdFZlYyA9IHJlZnJhY3QoIC1nZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApO1xuXHRcdCNlbmRpZlxuXHRcdHJlZmxlY3RWZWMgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCByZWZsZWN0VmVjLCB2aWV3TWF0cml4ICk7XG5cdFx0ZmxvYXQgc3BlY3VsYXJNSVBMZXZlbCA9IGdldFNwZWN1bGFyTUlQTGV2ZWwoIGJsaW5uU2hpbmluZXNzRXhwb25lbnQsIG1heE1JUExldmVsICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0XHRcdHZlYzMgcXVlcnlSZWZsZWN0VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApO1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVMb2RFWFQoIGVudk1hcCwgcXVlcnlSZWZsZWN0VmVjLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgcXVlcnlSZWZsZWN0VmVjLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjMyBxdWVyeVJlZmxlY3RWZWMgPSB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICk7XG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVVihxdWVyeVJlZmxlY3RWZWMsIEJsaW5uRXhwb25lbnRUb0dHWFJvdWdobmVzcyhibGlublNoaW5pbmVzc0V4cG9uZW50KSk7XG5cdFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfRVFVSVJFQyApXG5cdFx0XHR2ZWMyIHNhbXBsZVVWO1xuXHRcdFx0c2FtcGxlVVYueSA9IHNhdHVyYXRlKCByZWZsZWN0VmVjLnkgKiAwLjUgKyAwLjUgKTtcblx0XHRcdHNhbXBsZVVWLnggPSBhdGFuKCByZWZsZWN0VmVjLnosIHJlZmxlY3RWZWMueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7XG5cdFx0XHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlMkRMb2RFWFQoIGVudk1hcCwgc2FtcGxlVVYsIHNwZWN1bGFyTUlQTGV2ZWwgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlMkQoIGVudk1hcCwgc2FtcGxlVVYsIHNwZWN1bGFyTUlQTGV2ZWwgKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiID0gZW52TWFwVGV4ZWxUb0xpbmVhciggZW52TWFwQ29sb3IgKS5yZ2I7XG5cdFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfU1BIRVJFIClcblx0XHRcdHZlYzMgcmVmbGVjdFZpZXcgPSBub3JtYWxpemUoICggdmlld01hdHJpeCAqIHZlYzQoIHJlZmxlY3RWZWMsIDAuMCApICkueHl6ICsgdmVjMyggMC4wLDAuMCwxLjAgKSApO1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZTJETG9kRVhUKCBlbnZNYXAsIHJlZmxlY3RWaWV3Lnh5ICogMC41ICsgMC41LCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZTJEKCBlbnZNYXAsIHJlZmxlY3RWaWV3Lnh5ICogMC41ICsgMC41LCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbmRpZlxuXHRcdHJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7XG5cdH1cbiNlbmRpZlxuIiwKbGlnaHRzX3Bob25nX2ZyYWdtZW50OiJCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiO1xubWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IHNwZWN1bGFyO1xubWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgPSBzaGluaW5lc3M7XG5tYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtcbiIsbGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ6InZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuc3RydWN0IEJsaW5uUGhvbmdNYXRlcmlhbCB7XG5cdHZlYzNcdGRpZmZ1c2VDb2xvcjtcblx0dmVjM1x0c3BlY3VsYXJDb2xvcjtcblx0ZmxvYXRcdHNwZWN1bGFyU2hpbmluZXNzO1xuXHRmbG9hdFx0c3BlY3VsYXJTdHJlbmd0aDtcbn07XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX0JsaW5uUGhvbmcoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0XHR2ZWMzIG5vcm1hbCA9IGdlb21ldHJ5Lm5vcm1hbDtcblx0XHR2ZWMzIHZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xuXHRcdHZlYzMgcG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHR2ZWMzIGxpZ2h0UG9zID0gcmVjdEFyZWFMaWdodC5wb3NpdGlvbjtcblx0XHR2ZWMzIGhhbGZXaWR0aCA9IHJlY3RBcmVhTGlnaHQuaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodCA9IHJlY3RBcmVhTGlnaHQuaGFsZkhlaWdodDtcblx0XHR2ZWMzIGxpZ2h0Q29sb3IgPSByZWN0QXJlYUxpZ2h0LmNvbG9yO1xuXHRcdGZsb2F0IHJvdWdobmVzcyA9IEJsaW5uRXhwb25lbnRUb0dHWFJvdWdobmVzcyggbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKTtcblx0XHR2ZWMzIHJlY3RDb29yZHNbIDQgXTtcblx0XHRyZWN0Q29vcmRzWyAwIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7XHRcdHJlY3RDb29yZHNbIDEgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAyIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0cmVjdENvb3Jkc1sgMyBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0O1xuXHRcdHZlYzIgdXYgPSBMVENfVXYoIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XG5cdFx0ZmxvYXQgbm9ybSA9IHRleHR1cmUyRCggbHRjTWFnLCB1diApLmE7XG5cdFx0dmVjNCB0ID0gdGV4dHVyZTJEKCBsdGNNYXQsIHV2ICk7XG5cdFx0bWF0MyBtSW52ID0gbWF0Myhcblx0XHRcdHZlYzMoICAgMSwgICAwLCB0LnkgKSxcblx0XHRcdHZlYzMoICAgMCwgdC56LCAgIDAgKSxcblx0XHRcdHZlYzMoIHQudywgICAwLCB0LnggKVxuXHRcdCk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiBub3JtICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtSW52LCByZWN0Q29vcmRzICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBsaWdodENvbG9yICogbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtYXQzKCAxICksIHJlY3RDb29yZHMgKTtcblx0fVxuI2VuZGlmXG52b2lkIFJFX0RpcmVjdF9CbGlublBob25nKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHQjaWZkZWYgVE9PTlxuXHRcdHZlYzMgaXJyYWRpYW5jZSA9IGdldEdyYWRpZW50SXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHRcdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNlbmRpZlxuXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRpcnJhZGlhbmNlICo9IFBJO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TcGVjdWxhcl9CbGlublBob25nKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzICkgKiBtYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoO1xufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbiNkZWZpbmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9EaXJlY3RfQmxpbm5QaG9uZ1xuI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWFcdFx0UkVfRGlyZWN0X1JlY3RBcmVhX0JsaW5uUGhvbmdcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nXG4jZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsIClcdCgwKVxuIiwKbGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50OiJQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYiAqICggMS4wIC0gbWV0YWxuZXNzRmFjdG9yICk7XG5tYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyA9IGNsYW1wKCByb3VnaG5lc3NGYWN0b3IsIDAuMDQsIDEuMCApO1xuI2lmZGVmIFNUQU5EQVJEXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG4jZWxzZVxuXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCBNQVhJTVVNX1NQRUNVTEFSX0NPRUZGSUNJRU5UICogcG93MiggcmVmbGVjdGl2aXR5ICkgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG5cdG1hdGVyaWFsLmNsZWFyQ29hdCA9IHNhdHVyYXRlKCBjbGVhckNvYXQgKTtcdG1hdGVyaWFsLmNsZWFyQ29hdFJvdWdobmVzcyA9IGNsYW1wKCBjbGVhckNvYXRSb3VnaG5lc3MsIDAuMDQsIDEuMCApO1xuI2VuZGlmXG4iLApsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudDoic3RydWN0IFBoeXNpY2FsTWF0ZXJpYWwge1xuXHR2ZWMzXHRkaWZmdXNlQ29sb3I7XG5cdGZsb2F0XHRzcGVjdWxhclJvdWdobmVzcztcblx0dmVjM1x0c3BlY3VsYXJDb2xvcjtcblx0I2lmbmRlZiBTVEFOREFSRFxuXHRcdGZsb2F0IGNsZWFyQ29hdDtcblx0XHRmbG9hdCBjbGVhckNvYXRSb3VnaG5lc3M7XG5cdCNlbmRpZlxufTtcbiNkZWZpbmUgTUFYSU1VTV9TUEVDVUxBUl9DT0VGRklDSUVOVCAwLjE2XG4jZGVmaW5lIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgMC4wNFxuZmxvYXQgY2xlYXJDb2F0REhSQXBwcm94KCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5MICkge1xuXHRyZXR1cm4gREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCArICggMS4wIC0gREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApICogKCBwb3coIDEuMCAtIGRvdE5MLCA1LjAgKSAqIHBvdyggMS4wIC0gcm91Z2huZXNzLCAyLjAgKSApO1xufVxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHR2b2lkIFJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbCggY29uc3QgaW4gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0XHR2ZWMzIG5vcm1hbCA9IGdlb21ldHJ5Lm5vcm1hbDtcblx0XHR2ZWMzIHZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xuXHRcdHZlYzMgcG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHR2ZWMzIGxpZ2h0UG9zID0gcmVjdEFyZWFMaWdodC5wb3NpdGlvbjtcblx0XHR2ZWMzIGhhbGZXaWR0aCA9IHJlY3RBcmVhTGlnaHQuaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodCA9IHJlY3RBcmVhTGlnaHQuaGFsZkhlaWdodDtcblx0XHR2ZWMzIGxpZ2h0Q29sb3IgPSByZWN0QXJlYUxpZ2h0LmNvbG9yO1xuXHRcdGZsb2F0IHJvdWdobmVzcyA9IG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzO1xuXHRcdHZlYzMgcmVjdENvb3Jkc1sgNCBdO1xuXHRcdHJlY3RDb29yZHNbIDAgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcdFx0cmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0dmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcblx0XHRmbG9hdCBub3JtID0gdGV4dHVyZTJEKCBsdGNNYWcsIHV2ICkuYTtcblx0XHR2ZWM0IHQgPSB0ZXh0dXJlMkQoIGx0Y01hdCwgdXYgKTtcblx0XHRtYXQzIG1JbnYgPSBtYXQzKFxuXHRcdFx0dmVjMyggICAxLCAgIDAsIHQueSApLFxuXHRcdFx0dmVjMyggICAwLCB0LnosICAgMCApLFxuXHRcdFx0dmVjMyggdC53LCAgIDAsIHQueCApXG5cdFx0KTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciAqIG5vcm0gKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1JbnYsIHJlY3RDb29yZHMgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGxpZ2h0Q29sb3IgKiBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1hdDMoIDEgKSwgcmVjdENvb3JkcyApO1xuXHR9XG4jZW5kaWZcbnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSID0gbWF0ZXJpYWwuY2xlYXJDb2F0ICogY2xlYXJDb2F0REhSQXBwcm94KCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MsIGRvdE5MICk7XG5cdCNlbHNlXG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSID0gMC4wO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gKCAxLjAgLSBjbGVhckNvYXRESFIgKSAqIGlycmFkaWFuY2UgKiBCUkRGX1NwZWN1bGFyX0dHWCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyApO1xuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9ICggMS4wIC0gY2xlYXJDb2F0REhSICkgKiBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyQ29hdCAqIEJSREZfU3BlY3VsYXJfR0dYKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzICk7XG5cdCNlbmRpZlxufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxudm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGNsZWFyQ29hdFJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0I2lmbmRlZiBTVEFOREFSRFxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdE5WO1xuXHRcdGZsb2F0IGNsZWFyQ29hdERIUiA9IG1hdGVyaWFsLmNsZWFyQ29hdCAqIGNsZWFyQ29hdERIUkFwcHJveCggbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzLCBkb3ROTCApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGNsZWFyQ29hdERIUiA9IDAuMDtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gKCAxLjAgLSBjbGVhckNvYXRESFIgKSAqIHJhZGlhbmNlICogQlJERl9TcGVjdWxhcl9HR1hfRW52aXJvbm1lbnQoIGdlb21ldHJ5LCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyApO1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBjbGVhckNvYXRSYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyQ29hdCAqIEJSREZfU3BlY3VsYXJfR0dYX0Vudmlyb25tZW50KCBnZW9tZXRyeSwgdmVjMyggREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApLCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG59XG4jZGVmaW5lIFJFX0RpcmVjdFx0XHRcdFx0UkVfRGlyZWN0X1BoeXNpY2FsXG4jZGVmaW5lIFJFX0RpcmVjdF9SZWN0QXJlYVx0XHRSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbFxuI2RlZmluZSBSRV9JbmRpcmVjdFNwZWN1bGFyXHRcdFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWxcbiNkZWZpbmUgTWF0ZXJpYWxfQmxpbm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSAgIEdHWFJvdWdobmVzc1RvQmxpbm5FeHBvbmVudCggbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgKVxuI2RlZmluZSBNYXRlcmlhbF9DbGVhckNvYXRfQmxpbm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSAgIEdHWFJvdWdobmVzc1RvQmxpbm5FeHBvbmVudCggbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzIClcbmZsb2F0IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IGFtYmllbnRPY2NsdXNpb24sIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0cmV0dXJuIHNhdHVyYXRlKCBwb3coIGRvdE5WICsgYW1iaWVudE9jY2x1c2lvbiwgZXhwMiggLSAxNi4wICogcm91Z2huZXNzIC0gMS4wICkgKSAtIDEuMCArIGFtYmllbnRPY2NsdXNpb24gKTtcbn1cbiIsCmxpZ2h0c190ZW1wbGF0ZToiXG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24gPSAtIHZWaWV3UG9zaXRpb247XG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWw7XG5nZW9tZXRyeS52aWV3RGlyID0gbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7XG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRzWyBpIF07XG5cdFx0Z2V0UG9pbnREaXJlY3RMaWdodElycmFkaWFuY2UoIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggcG9pbnRMaWdodC5zaGFkb3csIGRpcmVjdExpZ2h0LnZpc2libGUgKSApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuI2VuZGlmXG4jaWYgKCBOVU1fU1BPVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0U3BvdExpZ2h0IHNwb3RMaWdodDtcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xuXHRcdHNwb3RMaWdodCA9IHNwb3RMaWdodHNbIGkgXTtcblx0XHRnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBzcG90TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggc3BvdExpZ2h0LnNoYWRvdywgZGlyZWN0TGlnaHQudmlzaWJsZSApICkgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cbiNlbmRpZlxuI2lmICggTlVNX0RJUl9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0RGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0O1xuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcblx0XHRnZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SXJyYWRpYW5jZSggZGlyZWN0aW9uYWxMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmZGVmIFVTRV9TSEFET1dNQVBcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvdywgZGlyZWN0TGlnaHQudmlzaWJsZSApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuI2VuZGlmXG4jaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKVxuXHRSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9SRUNUX0FSRUFfTElHSFRTOyBpICsrICkge1xuXHRcdHJlY3RBcmVhTGlnaHQgPSByZWN0QXJlYUxpZ2h0c1sgaSBdO1xuXHRcdFJFX0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFx0dmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICkueHl6ICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0XHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XG5cdFx0I2VuZGlmXG5cdFx0aXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG5cdCNlbmRpZlxuXHQjaWYgKCBOVU1fSEVNSV9MSUdIVFMgPiAwIClcblx0XHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0XHRpcnJhZGlhbmNlICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkgKTtcblx0XHR9XG5cdCNlbmRpZlxuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFBIWVNJQ0FMICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0aXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSW5kaXJlY3RJcnJhZGlhbmNlKCBnZW9tZXRyeSwgOCApO1xuXHQjZW5kaWZcblx0UkVfSW5kaXJlY3REaWZmdXNlKCBpcnJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHZlYzMgcmFkaWFuY2UgPSBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggZ2VvbWV0cnksIE1hdGVyaWFsX0JsaW5uU2hpbmluZXNzRXhwb25lbnQoIG1hdGVyaWFsICksIDggKTtcblx0I2lmbmRlZiBTVEFOREFSRFxuXHRcdHZlYzMgY2xlYXJDb2F0UmFkaWFuY2UgPSBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggZ2VvbWV0cnksIE1hdGVyaWFsX0NsZWFyQ29hdF9CbGlublNoaW5pbmVzc0V4cG9uZW50KCBtYXRlcmlhbCApLCA4ICk7XG5cdCNlbHNlXG5cdFx0dmVjMyBjbGVhckNvYXRSYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHQjZW5kaWZcblx0UkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGNsZWFyQ29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG4jZW5kaWZcbiIsCmxvZ2RlcHRoYnVmX2ZyYWdtZW50OiIjaWYgZGVmaW5lZChVU0VfTE9HREVQVEhCVUYpICYmIGRlZmluZWQoVVNFX0xPR0RFUFRIQlVGX0VYVClcblx0Z2xfRnJhZ0RlcHRoRVhUID0gbG9nMih2RnJhZ0RlcHRoKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcblx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDtcblx0I2VuZGlmXG4jZW5kaWZcbiIsbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcblx0I2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFRcblx0XHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdCNlbmRpZlxuXHR1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3ZlcnRleDoiI2lmZGVmIFVTRV9MT0dERVBUSEJVRlxuXHRnbF9Qb3NpdGlvbi56ID0gbG9nMihtYXgoIEVQU0lMT04sIGdsX1Bvc2l0aW9uLncgKyAxLjAgKSkgKiBsb2dEZXB0aEJ1ZkZDO1xuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZGcmFnRGVwdGggPSAxLjAgKyBnbF9Qb3NpdGlvbi53O1xuXHQjZWxzZVxuXHRcdGdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiAtIDEuMCkgKiBnbF9Qb3NpdGlvbi53O1xuXHQjZW5kaWZcbiNlbmRpZlxuIiwKbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IHRleGVsQ29sb3IgPSB0ZXh0dXJlMkQoIG1hcCwgdlV2ICk7XG5cdHRleGVsQ29sb3IgPSBtYXBUZXhlbFRvTGluZWFyKCB0ZXhlbENvbG9yICk7XG5cdGRpZmZ1c2VDb2xvciAqPSB0ZXhlbENvbG9yO1xuI2VuZGlmXG4iLG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWZcbiIsbWFwX3BhcnRpY2xlX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IG1hcFRleGVsID0gdGV4dHVyZTJEKCBtYXAsIHZlYzIoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55ICkgKiBvZmZzZXRSZXBlYXQuencgKyBvZmZzZXRSZXBlYXQueHkgKTtcblx0ZGlmZnVzZUNvbG9yICo9IG1hcFRleGVsVG9MaW5lYXIoIG1hcFRleGVsICk7XG4jZW5kaWZcbiIsbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTUFQXG5cdHVuaWZvcm0gdmVjNCBvZmZzZXRSZXBlYXQ7XG5cdHVuaWZvcm0gc2FtcGxlcjJEIG1hcDtcbiNlbmRpZlxuIiwKbWV0YWxuZXNzbWFwX2ZyYWdtZW50OiJmbG9hdCBtZXRhbG5lc3NGYWN0b3IgPSBtZXRhbG5lc3M7XG4jaWZkZWYgVVNFX01FVEFMTkVTU01BUFxuXHR2ZWM0IHRleGVsTWV0YWxuZXNzID0gdGV4dHVyZTJEKCBtZXRhbG5lc3NNYXAsIHZVdiApO1xuXHRtZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjtcbiNlbmRpZlxuIixtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xuI2VuZGlmIixtb3JwaG5vcm1hbF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdG9iamVjdE5vcm1hbCArPSAoIG1vcnBoTm9ybWFsMCAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdG9iamVjdE5vcm1hbCArPSAoIG1vcnBoTm9ybWFsMSAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07XG5cdG9iamVjdE5vcm1hbCArPSAoIG1vcnBoTm9ybWFsMiAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdG9iamVjdE5vcm1hbCArPSAoIG1vcnBoTm9ybWFsMyAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG4jZW5kaWZcbiIsCm1vcnBodGFyZ2V0X3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX01PUlBIVEFSR0VUU1xuXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTtcblx0I2Vsc2Vcblx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcblx0I2VuZGlmXG4jZW5kaWYiLG1vcnBodGFyZ2V0X3ZlcnRleDoiI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFNcblx0dHJhbnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDAgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdHRyYW5zZm9ybWVkICs9ICggbW9ycGhUYXJnZXQxIC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xuXHR0cmFuc2Zvcm1lZCArPSAoIG1vcnBoVGFyZ2V0MiAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcblx0dHJhbnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDMgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG5cdCNpZm5kZWYgVVNFX01PUlBITk9STUFMU1xuXHR0cmFuc2Zvcm1lZCArPSAoIG1vcnBoVGFyZ2V0NCAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcblx0dHJhbnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDUgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07XG5cdHRyYW5zZm9ybWVkICs9ICggbW9ycGhUYXJnZXQ2IC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNiBdO1xuXHR0cmFuc2Zvcm1lZCArPSAoIG1vcnBoVGFyZ2V0NyAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDcgXTtcblx0I2VuZGlmXG4jZW5kaWZcbiIsCm5vcm1hbF9mbGlwOiIjaWZkZWYgRE9VQkxFX1NJREVEXG5cdGZsb2F0IGZsaXBOb3JtYWwgPSAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG4jZWxzZVxuXHRmbG9hdCBmbGlwTm9ybWFsID0gMS4wO1xuI2VuZGlmXG4iLG5vcm1hbF9mcmFnbWVudDoiI2lmZGVmIEZMQVRfU0hBREVEXG5cdHZlYzMgZmR4ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xuXHR2ZWMzIGZkeSA9IHZlYzMoIGRGZHkoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeSggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKCBmZHgsIGZkeSApICk7XG4jZWxzZVxuXHR2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggdk5vcm1hbCApICogZmxpcE5vcm1hbDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9OT1JNQUxNQVBcblx0bm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC12Vmlld1Bvc2l0aW9uLCBub3JtYWwgKTtcbiNlbGlmIGRlZmluZWQoIFVTRV9CVU1QTUFQIClcblx0bm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLXZWaWV3UG9zaXRpb24sIG5vcm1hbCwgZEhkeHlfZndkKCkgKTtcbiNlbmRpZlxuIiwKbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlO1xuXHR2ZWMzIHBlcnR1cmJOb3JtYWwyQXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtICkge1xuXHRcdHZlYzMgcTAgPSBkRmR4KCBleWVfcG9zLnh5eiApO1xuXHRcdHZlYzMgcTEgPSBkRmR5KCBleWVfcG9zLnh5eiApO1xuXHRcdHZlYzIgc3QwID0gZEZkeCggdlV2LnN0ICk7XG5cdFx0dmVjMiBzdDEgPSBkRmR5KCB2VXYuc3QgKTtcblx0XHR2ZWMzIFMgPSBub3JtYWxpemUoIHEwICogc3QxLnQgLSBxMSAqIHN0MC50ICk7XG5cdFx0dmVjMyBUID0gbm9ybWFsaXplKCAtcTAgKiBzdDEucyArIHExICogc3QwLnMgKTtcblx0XHR2ZWMzIE4gPSBub3JtYWxpemUoIHN1cmZfbm9ybSApO1xuXHRcdHZlYzMgbWFwTiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdFx0bWFwTi54eSA9IG5vcm1hbFNjYWxlICogbWFwTi54eTtcblx0XHRtYXQzIHRzbiA9IG1hdDMoIFMsIFQsIE4gKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKCB0c24gKiBtYXBOICk7XG5cdH1cbiNlbmRpZlxuIiwKcGFja2luZzoidmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCBub3JtYWwgKSAqIDAuNSArIDAuNTtcbn1cbnZlYzMgdW5wYWNrUkdCVG9Ob3JtYWwoIGNvbnN0IGluIHZlYzMgcmdiICkge1xuXHRyZXR1cm4gMS4wIC0gMi4wICogcmdiLnh5ejtcbn1cbmNvbnN0IGZsb2F0IFBhY2tVcHNjYWxlID0gMjU2LiAvIDI1NS47Y29uc3QgZmxvYXQgVW5wYWNrRG93bnNjYWxlID0gMjU1LiAvIDI1Ni47XG5jb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgIDI1Ni4gKTtcbmNvbnN0IHZlYzQgVW5wYWNrRmFjdG9ycyA9IFVucGFja0Rvd25zY2FsZSAvIHZlYzQoIFBhY2tGYWN0b3JzLCAxLiApO1xuY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47XG52ZWM0IHBhY2tEZXB0aFRvUkdCQSggY29uc3QgaW4gZmxvYXQgdiApIHtcblx0dmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7XG5cdHIueXp3IC09IHIueHl6ICogU2hpZnRSaWdodDg7XHRyZXR1cm4gciAqIFBhY2tVcHNjYWxlO1xufVxuZmxvYXQgdW5wYWNrUkdCQVRvRGVwdGgoIGNvbnN0IGluIHZlYzQgdiApIHtcblx0cmV0dXJuIGRvdCggdiwgVW5wYWNrRmFjdG9ycyApO1xufVxuZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCB2aWV3WiArIG5lYXIgKSAvICggbmVhciAtIGZhciApO1xufVxuZmxvYXQgb3J0aG9ncmFwaGljRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBsaW5lYXJDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7XG59XG5mbG9hdCB2aWV3WlRvUGVyc3BlY3RpdmVEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICgoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoKCBmYXIgLSBuZWFyICkgKiB2aWV3WiApO1xufVxuZmxvYXQgcGVyc3BlY3RpdmVEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGludkNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApO1xufVxuIiwKcHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudDoiI2lmZGVmIFBSRU1VTFRJUExJRURfQUxQSEFcblx0Z2xfRnJhZ0NvbG9yLnJnYiAqPSBnbF9GcmFnQ29sb3IuYTtcbiNlbmRpZlxuIixwcm9qZWN0X3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiBza2lubmVkO1xuI2Vsc2Vcblx0dmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuI2VuZGlmXG5nbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuIixkaXRoZXJpbmdfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBESVRIRVJJTkcgKVxuICBnbF9GcmFnQ29sb3IucmdiID0gZGl0aGVyaW5nKCBnbF9GcmFnQ29sb3IucmdiICk7XG4jZW5kaWZcbiIsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBESVRIRVJJTkcgKVxuXHR2ZWMzIGRpdGhlcmluZyggdmVjMyBjb2xvciApIHtcblx0XHRmbG9hdCBncmlkX3Bvc2l0aW9uID0gcmFuZCggZ2xfRnJhZ0Nvb3JkLnh5ICk7XG5cdFx0dmVjMyBkaXRoZXJfc2hpZnRfUkdCID0gdmVjMyggMC4yNSAvIDI1NS4wLCAtMC4yNSAvIDI1NS4wLCAwLjI1IC8gMjU1LjAgKTtcblx0XHRkaXRoZXJfc2hpZnRfUkdCID0gbWl4KCAyLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCAtMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgZ3JpZF9wb3NpdGlvbiApO1xuXHRcdHJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7XG5cdH1cbiNlbmRpZlxuIiwKcm91Z2huZXNzbWFwX2ZyYWdtZW50OiJmbG9hdCByb3VnaG5lc3NGYWN0b3IgPSByb3VnaG5lc3M7XG4jaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR2ZWM0IHRleGVsUm91Z2huZXNzID0gdGV4dHVyZTJEKCByb3VnaG5lc3NNYXAsIHZVdiApO1xuXHRyb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZztcbiNlbmRpZlxuIixyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgcm91Z2huZXNzTWFwO1xuI2VuZGlmIixzaGFkb3dtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVFMgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgc3BvdFNoYWRvd01hcFsgTlVNX1NQT1RfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0I2VuZGlmXG5cdGZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7XG5cdFx0cmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7XG5cdH1cblx0ZmxvYXQgdGV4dHVyZTJEU2hhZG93TGVycCggc2FtcGxlcjJEIGRlcHRocywgdmVjMiBzaXplLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkge1xuXHRcdGNvbnN0IHZlYzIgb2Zmc2V0ID0gdmVjMiggMC4wLCAxLjAgKTtcblx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2l6ZTtcblx0XHR2ZWMyIGNlbnRyb2lkVVYgPSBmbG9vciggdXYgKiBzaXplICsgMC41ICkgLyBzaXplO1xuXHRcdGZsb2F0IGxiID0gdGV4dHVyZTJEQ29tcGFyZSggZGVwdGhzLCBjZW50cm9pZFVWICsgdGV4ZWxTaXplICogb2Zmc2V0Lnh4LCBjb21wYXJlICk7XG5cdFx0ZmxvYXQgbHQgPSB0ZXh0dXJlMkRDb21wYXJlKCBkZXB0aHMsIGNlbnRyb2lkVVYgKyB0ZXhlbFNpemUgKiBvZmZzZXQueHksIGNvbXBhcmUgKTtcblx0XHRmbG9hdCByYiA9IHRleHR1cmUyRENvbXBhcmUoIGRlcHRocywgY2VudHJvaWRVViArIHRleGVsU2l6ZSAqIG9mZnNldC55eCwgY29tcGFyZSApO1xuXHRcdGZsb2F0IHJ0ID0gdGV4dHVyZTJEQ29tcGFyZSggZGVwdGhzLCBjZW50cm9pZFVWICsgdGV4ZWxTaXplICogb2Zmc2V0Lnl5LCBjb21wYXJlICk7XG5cdFx0dmVjMiBmID0gZnJhY3QoIHV2ICogc2l6ZSArIDAuNSApO1xuXHRcdGZsb2F0IGEgPSBtaXgoIGxiLCBsdCwgZi55ICk7XG5cdFx0ZmxvYXQgYiA9IG1peCggcmIsIHJ0LCBmLnkgKTtcblx0XHRmbG9hdCBjID0gbWl4KCBhLCBiLCBmLnggKTtcblx0XHRyZXR1cm4gYztcblx0fVxuXHRmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkge1xuXHRcdHNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53O1xuXHRcdHNoYWRvd0Nvb3JkLnogKz0gc2hhZG93Qmlhcztcblx0XHRidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7XG5cdFx0Ym9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApO1xuXHRcdGJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTtcblx0XHRib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApO1xuXHRcdGlmICggZnJ1c3R1bVRlc3QgKSB7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkxICksIHNoYWRvd0Nvb3JkLnogKVxuXHRcdFx0KSAqICggMS4wIC8gOS4wICk7XG5cdFx0I2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKVxuXHRcdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBkeDAgPSAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR4MSA9ICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTEgPSArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56IClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbmRpZlxuXHRcdH1cblx0XHRyZXR1cm4gMS4wO1xuXHR9XG5cdHZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHtcblx0XHR2ZWMzIGFic1YgPSBhYnMoIHYgKTtcblx0XHRmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTtcblx0XHRhYnNWICo9IHNjYWxlVG9DdWJlO1xuXHRcdHYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTtcblx0XHR2ZWMyIHBsYW5hciA9IHYueHk7XG5cdFx0ZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTtcblx0XHRmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7XG5cdFx0aWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkge1xuXHRcdFx0aWYgKCB2LnogPiAwLjAgKVxuXHRcdFx0XHRwbGFuYXIueCA9IDQuMCAtIHYueDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTtcblx0XHRcdHBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTtcblx0XHRcdHBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7XG5cdFx0XHRwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wO1xuXHRcdH1cblx0XHRyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7XG5cdH1cblx0ZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkge1xuXHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUgKiB2ZWMyKCA0LjAsIDIuMCApICk7XG5cdFx0dmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dDb29yZC54eXo7XG5cdFx0dmVjMyBiZDNEID0gbm9ybWFsaXplKCBsaWdodFRvUG9zaXRpb24gKTtcblx0XHRmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0JpYXMgKSAvIDEwMDAuMDtcblx0XHQjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKVxuXHRcdFx0dmVjMiBvZmZzZXQgPSB2ZWMyKCAtIDEsIDEgKSAqIHNoYWRvd1JhZGl1cyAqIHRleGVsU2l6ZS55O1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHgsIHRleGVsU2l6ZS55ICksIGRwIClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKTtcblx0XHQjZW5kaWZcblx0fVxuI2VuZGlmXG4iLApzaGFkb3dtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIE5VTV9ESVJfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdFx0dW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRTIF07XG5cdCNlbmRpZlxuI2VuZGlmXG4iLApzaGFkb3dtYXBfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVFMgPiAwXG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogd29ybGRQb3NpdGlvbjtcblx0fVxuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xuXHRcdHZTcG90U2hhZG93Q29vcmRbIGkgXSA9IHNwb3RTaGFkb3dNYXRyaXhbIGkgXSAqIHdvcmxkUG9zaXRpb247XG5cdH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRTID4gMFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogd29ybGRQb3NpdGlvbjtcblx0fVxuXHQjZW5kaWZcbiNlbmRpZlxuIiwKc2hhZG93bWFza19wYXJzX2ZyYWdtZW50OiJmbG9hdCBnZXRTaGFkb3dNYXNrKCkge1xuXHRmbG9hdCBzaGFkb3cgPSAxLjA7XG5cdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0RGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0O1xuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcblx0XHRzaGFkb3cgKj0gYm9vbCggZGlyZWN0aW9uYWxMaWdodC5zaGFkb3cgKSA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdFNwb3RMaWdodCBzcG90TGlnaHQ7XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07XG5cdFx0c2hhZG93ICo9IGJvb2woIHNwb3RMaWdodC5zaGFkb3cgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHR9XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0UG9pbnRMaWdodCBwb2ludExpZ2h0O1xuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdHBvaW50TGlnaHQgPSBwb2ludExpZ2h0c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSBib29sKCBwb2ludExpZ2h0LnNoYWRvdyApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHR9XG5cdCNlbmRpZlxuXHQjZW5kaWZcblx0cmV0dXJuIHNoYWRvdztcbn1cbiIsCnNraW5iYXNlX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IGJvbmVNYXRYID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnggKTtcblx0bWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7XG5cdG1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApO1xuXHRtYXQ0IGJvbmVNYXRXID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LncgKTtcbiNlbmRpZiIsc2tpbm5pbmdfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXg7XG5cdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTtcblx0I2lmZGVmIEJPTkVfVEVYVFVSRVxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGJvbmVUZXh0dXJlO1xuXHRcdHVuaWZvcm0gaW50IGJvbmVUZXh0dXJlU2l6ZTtcblx0XHRtYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7XG5cdFx0XHRmbG9hdCBqID0gaSAqIDQuMDtcblx0XHRcdGZsb2F0IHggPSBtb2QoIGosIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApO1xuXHRcdFx0ZmxvYXQgeSA9IGZsb29yKCBqIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcblx0XHRcdGZsb2F0IGR5ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0eSA9IGR5ICogKCB5ICsgMC41ICk7XG5cdFx0XHR2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYyID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAxLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYzID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAyLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7XG5cdFx0XHRtYXQ0IGJvbmUgPSBtYXQ0KCB2MSwgdjIsIHYzLCB2NCApO1xuXHRcdFx0cmV0dXJuIGJvbmU7XG5cdFx0fVxuXHQjZWxzZVxuXHRcdHVuaWZvcm0gbWF0NCBib25lTWF0cmljZXNbIE1BWF9CT05FUyBdO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdG1hdDQgYm9uZSA9IGJvbmVNYXRyaWNlc1sgaW50KGkpIF07XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbmRpZlxuI2VuZGlmXG4iLApza2lubmluZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dmVjNCBza2luVmVydGV4ID0gYmluZE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcblx0dmVjNCBza2lubmVkID0gdmVjNCggMC4wICk7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54O1xuXHRza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTtcblx0c2tpbm5lZCArPSBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53O1xuXHRza2lubmVkICA9IGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbm5lZDtcbiNlbmRpZlxuIixza2lubm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnkgKiBib25lTWF0WTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0Wjtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0Vztcblx0c2tpbk1hdHJpeCAgPSBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4O1xuXHRvYmplY3ROb3JtYWwgPSB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0Tm9ybWFsLCAwLjAgKSApLnh5ejtcbiNlbmRpZlxuIiwKc3BlY3VsYXJtYXBfZnJhZ21lbnQ6ImZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG4jaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHZlYzQgdGV4ZWxTcGVjdWxhciA9IHRleHR1cmUyRCggc3BlY3VsYXJNYXAsIHZVdiApO1xuXHRzcGVjdWxhclN0cmVuZ3RoID0gdGV4ZWxTcGVjdWxhci5yO1xuI2Vsc2Vcblx0c3BlY3VsYXJTdHJlbmd0aCA9IDEuMDtcbiNlbmRpZiIsc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9TUEVDVUxBUk1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhck1hcDtcbiNlbmRpZiIsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBUT05FX01BUFBJTkcgKVxuICBnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZlxuIix0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIjZGVmaW5lIHNhdHVyYXRlKGEpIGNsYW1wKCBhLCAwLjAsIDEuMCApXG51bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG51bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nV2hpdGVQb2ludDtcbnZlYzMgTGluZWFyVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdHJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7XG59XG52ZWMzIFJlaW5oYXJkVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdHJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApO1xufVxuI2RlZmluZSBVbmNoYXJ0ZWQySGVscGVyKCB4ICkgbWF4KCAoICggeCAqICggMC4xNSAqIHggKyAwLjEwICogMC41MCApICsgMC4yMCAqIDAuMDIgKSAvICggeCAqICggMC4xNSAqIHggKyAwLjUwICkgKyAwLjIwICogMC4zMCApICkgLSAwLjAyIC8gMC4zMCwgdmVjMyggMC4wICkgKVxudmVjMyBVbmNoYXJ0ZWQyVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdHJldHVybiBzYXR1cmF0ZSggVW5jaGFydGVkMkhlbHBlciggY29sb3IgKSAvIFVuY2hhcnRlZDJIZWxwZXIoIHZlYzMoIHRvbmVNYXBwaW5nV2hpdGVQb2ludCApICkgKTtcbn1cbnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdGNvbG9yID0gbWF4KCB2ZWMzKCAwLjAgKSwgY29sb3IgLSAwLjAwNCApO1xuXHRyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApO1xufVxuIiwKdXZfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfU1BFQ1VMQVJNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKSB8fCBkZWZpbmVkKCBVU0VfRU1JU1NJVkVNQVAgKSB8fCBkZWZpbmVkKCBVU0VfUk9VR0hORVNTTUFQICkgfHwgZGVmaW5lZCggVVNFX01FVEFMTkVTU01BUCApXG5cdHZhcnlpbmcgdmVjMiB2VXY7XG4jZW5kaWYiLHV2X3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9TUEVDVUxBUk1BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApIHx8IGRlZmluZWQoIFVTRV9FTUlTU0lWRU1BUCApIHx8IGRlZmluZWQoIFVTRV9ST1VHSE5FU1NNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTUVUQUxORVNTTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjtcblx0dW5pZm9ybSB2ZWM0IG9mZnNldFJlcGVhdDtcbiNlbmRpZlxuIiwKdXZfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9TUEVDVUxBUk1BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApIHx8IGRlZmluZWQoIFVTRV9FTUlTU0lWRU1BUCApIHx8IGRlZmluZWQoIFVTRV9ST1VHSE5FU1NNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTUVUQUxORVNTTUFQIClcblx0dlV2ID0gdXYgKiBvZmZzZXRSZXBlYXQuencgKyBvZmZzZXRSZXBlYXQueHk7XG4jZW5kaWYiLHV2Ml9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLHV2Ml9wYXJzX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdGF0dHJpYnV0ZSB2ZWMyIHV2Mjtcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLAp1djJfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dlV2MiA9IHV2MjtcbiNlbmRpZiIsd29ybGRwb3NfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQoIFBIT05HICkgfHwgZGVmaW5lZCggUEhZU0lDQUwgKSB8fCBkZWZpbmVkKCBMQU1CRVJUICkgfHwgZGVmaW5lZCAoIFVTRV9TSEFET1dNQVAgKVxuXHQjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdFx0dmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWxNYXRyaXggKiBza2lubmVkO1xuXHQjZWxzZVxuXHRcdHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHQjZW5kaWZcbiNlbmRpZlxuIixjdWJlX2ZyYWc6InVuaWZvcm0gc2FtcGxlckN1YmUgdEN1YmU7XG51bmlmb3JtIGZsb2F0IHRGbGlwO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZUN1YmUoIHRDdWJlLCB2ZWMzKCB0RmxpcCAqIHZXb3JsZFBvc2l0aW9uLngsIHZXb3JsZFBvc2l0aW9uLnl6ICkgKTtcblx0Z2xfRnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTtcbn1cbiIsCmN1YmVfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0dldvcmxkUG9zaXRpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG59XG4iLGRlcHRoX2ZyYWc6IiNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0dW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7XG5cdCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0XHRkaWZmdXNlQ29sb3IuYSA9IG9wYWNpdHk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIGdsX0ZyYWdDb29yZC56ICksIG9wYWNpdHkgKTtcblx0I2VsaWYgREVQVEhfUEFDS0lORyA9PSAzMjAxXG5cdFx0Z2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBnbF9GcmFnQ29vcmQueiApO1xuXHQjZW5kaWZcbn1cbiIsCmRlcHRoX3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG59XG4iLApkaXN0YW5jZVJHQkFfZnJhZzoidW5pZm9ybSB2ZWMzIGxpZ2h0UG9zO1xudmFyeWluZyB2ZWM0IHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluICgpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBsZW5ndGgoIHZXb3JsZFBvc2l0aW9uLnh5eiAtIGxpZ2h0UG9zLnh5eiApIC8gMTAwMC4wICk7XG59XG4iLGRpc3RhbmNlUkdCQV92ZXJ0OiJ2YXJ5aW5nIHZlYzQgdldvcmxkUG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uO1xufVxuIiwKZXF1aXJlY3RfZnJhZzoidW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xudW5pZm9ybSBmbG9hdCB0RmxpcDtcbnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiApO1xuXHR2ZWMyIHNhbXBsZVVWO1xuXHRzYW1wbGVVVi55ID0gc2F0dXJhdGUoIHRGbGlwICogZGlyZWN0aW9uLnkgKiAtMC41ICsgMC41ICk7XG5cdHNhbXBsZVVWLnggPSBhdGFuKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnggKSAqIFJFQ0lQUk9DQUxfUEkyICsgMC41O1xuXHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTtcbn1cbiIsZXF1aXJlY3RfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0dldvcmxkUG9zaXRpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG59XG4iLApsaW5lZGFzaGVkX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTaXplO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdGlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkge1xuXHRcdGRpc2NhcmQ7XG5cdH1cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59XG4iLApsaW5lZGFzaGVkX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2NhbGU7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZURpc3RhbmNlO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHR2TGluZURpc3RhbmNlID0gc2NhbGUgKiBsaW5lRGlzdGFuY2U7XG5cdHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufVxuIiwKbWVzaGJhc2ljX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKS54eXogKiBsaWdodE1hcEludGVuc2l0eTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdCNpbmNsdWRlIDxub3JtYWxfZmxpcD5cblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cbn1cbiIsCm1lc2hiYXNpY192ZXJ0OiIjaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufVxuIiwKbWVzaGxhbWJlcnRfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnM+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHQjaW5jbHVkZSA8bGlnaHRtYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0RpZmZ1c2VfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApO1xuXHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZMaWdodEZyb250IDogdkxpZ2h0QmFjaztcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gdkxpZ2h0RnJvbnQ7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICo9IEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPG5vcm1hbF9mbGlwPlxuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufVxuIiwKbWVzaGxhbWJlcnRfdmVydDoiI2RlZmluZSBMQU1CRVJUXG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnM+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn1cbiIsCm1lc2hwaG9uZ19mcmFnOiIjZGVmaW5lIFBIT05HXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gdmVjMyBzcGVjdWxhcjtcbnVuaWZvcm0gZmxvYXQgc2hpbmluZXNzO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnM+XG4jaW5jbHVkZSA8bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mbGlwPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfcGhvbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfdGVtcGxhdGU+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn1cbiIsCm1lc2hwaG9uZ192ZXJ0OiIjZGVmaW5lIFBIT05HXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbiNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59XG4iLAptZXNocGh5c2ljYWxfZnJhZzoiI2RlZmluZSBQSFlTSUNBTFxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcztcbnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBTVEFOREFSRFxuXHR1bmlmb3JtIGZsb2F0IGNsZWFyQ29hdDtcblx0dW5pZm9ybSBmbG9hdCBjbGVhckNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfcGFycz5cbiNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8cm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mbGlwPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfdGVtcGxhdGU+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn1cbiIsCm1lc2hwaHlzaWNhbF92ZXJ0OiIjZGVmaW5lIFBIWVNJQ0FMXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59XG4iLApub3JtYWxfZnJhZzoiI2RlZmluZSBOT1JNQUxcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmXG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZmxpcD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggcGFja05vcm1hbFRvUkdCKCBub3JtYWwgKSwgb3BhY2l0eSApO1xufVxuIiwKbm9ybWFsX3ZlcnQ6IiNkZWZpbmUgTk9STUFMXG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKVxuXHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNlbmRpZlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApXG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuI2VuZGlmXG59XG4iLApwb2ludHNfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cbn1cbiIsCnBvaW50c192ZXJ0OiJ1bmlmb3JtIGZsb2F0IHNpemU7XG51bmlmb3JtIGZsb2F0IHNjYWxlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaWZkZWYgVVNFX1NJWkVBVFRFTlVBVElPTlxuXHRcdGdsX1BvaW50U2l6ZSA9IHNpemUgKiAoIHNjYWxlIC8gLSBtdlBvc2l0aW9uLnogKTtcblx0I2Vsc2Vcblx0XHRnbF9Qb2ludFNpemUgPSBzaXplO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn1cbiIsCnNoYWRvd19mcmFnOiJ1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnM+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAwLjAsIDAuMCwgMC4wLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xufVxuIixzaGFkb3dfdmVydDoiI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cbn1cbiJ9LGFiPXtiYXNpYzp7dW5pZm9ybXM6SGEubWVyZ2UoW1YuY29tbW9uLApWLmFvbWFwLFYubGlnaHRtYXAsVi5mb2ddKSx2ZXJ0ZXhTaGFkZXI6VS5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpVLm1lc2hiYXNpY19mcmFnfSxsYW1iZXJ0Ont1bmlmb3JtczpIYS5tZXJnZShbVi5jb21tb24sVi5hb21hcCxWLmxpZ2h0bWFwLFYuZW1pc3NpdmVtYXAsVi5mb2csVi5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgSCgwKX19XSksdmVydGV4U2hhZGVyOlUubWVzaGxhbWJlcnRfdmVydCxmcmFnbWVudFNoYWRlcjpVLm1lc2hsYW1iZXJ0X2ZyYWd9LHBob25nOnt1bmlmb3JtczpIYS5tZXJnZShbVi5jb21tb24sVi5hb21hcCxWLmxpZ2h0bWFwLFYuZW1pc3NpdmVtYXAsVi5idW1wbWFwLFYubm9ybWFsbWFwLFYuZGlzcGxhY2VtZW50bWFwLFYuZ3JhZGllbnRtYXAsVi5mb2csVi5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgSCgwKX0sc3BlY3VsYXI6e3ZhbHVlOm5ldyBIKDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6VS5tZXNocGhvbmdfdmVydCwKZnJhZ21lbnRTaGFkZXI6VS5tZXNocGhvbmdfZnJhZ30sc3RhbmRhcmQ6e3VuaWZvcm1zOkhhLm1lcmdlKFtWLmNvbW1vbixWLmFvbWFwLFYubGlnaHRtYXAsVi5lbWlzc2l2ZW1hcCxWLmJ1bXBtYXAsVi5ub3JtYWxtYXAsVi5kaXNwbGFjZW1lbnRtYXAsVi5yb3VnaG5lc3NtYXAsVi5tZXRhbG5lc3NtYXAsVi5mb2csVi5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgSCgwKX0scm91Z2huZXNzOnt2YWx1ZTouNX0sbWV0YWxuZXNzOnt2YWx1ZTouNX0sZW52TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6VS5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpVLm1lc2hwaHlzaWNhbF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOkhhLm1lcmdlKFtWLnBvaW50cyxWLmZvZ10pLHZlcnRleFNoYWRlcjpVLnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOlUucG9pbnRzX2ZyYWd9LGRhc2hlZDp7dW5pZm9ybXM6SGEubWVyZ2UoW1YuY29tbW9uLFYuZm9nLHtzY2FsZTp7dmFsdWU6MX0sCmRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjpVLmxpbmVkYXNoZWRfdmVydCxmcmFnbWVudFNoYWRlcjpVLmxpbmVkYXNoZWRfZnJhZ30sZGVwdGg6e3VuaWZvcm1zOkhhLm1lcmdlKFtWLmNvbW1vbixWLmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpVLmRlcHRoX3ZlcnQsZnJhZ21lbnRTaGFkZXI6VS5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOkhhLm1lcmdlKFtWLmNvbW1vbixWLmJ1bXBtYXAsVi5ub3JtYWxtYXAsVi5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpVLm5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOlUubm9ybWFsX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOnt0Q3ViZTp7dmFsdWU6bnVsbH0sdEZsaXA6e3ZhbHVlOi0xfSxvcGFjaXR5Ont2YWx1ZToxfX0sdmVydGV4U2hhZGVyOlUuY3ViZV92ZXJ0LGZyYWdtZW50U2hhZGVyOlUuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH0sCnRGbGlwOnt2YWx1ZTotMX19LHZlcnRleFNoYWRlcjpVLmVxdWlyZWN0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6VS5lcXVpcmVjdF9mcmFnfSxkaXN0YW5jZVJHQkE6e3VuaWZvcm1zOntsaWdodFBvczp7dmFsdWU6bmV3IHB9fSx2ZXJ0ZXhTaGFkZXI6VS5kaXN0YW5jZVJHQkFfdmVydCxmcmFnbWVudFNoYWRlcjpVLmRpc3RhbmNlUkdCQV9mcmFnfX07YWIucGh5c2ljYWw9e3VuaWZvcm1zOkhhLm1lcmdlKFthYi5zdGFuZGFyZC51bmlmb3Jtcyx7Y2xlYXJDb2F0Ont2YWx1ZTowfSxjbGVhckNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9fV0pLHZlcnRleFNoYWRlcjpVLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOlUubWVzaHBoeXNpY2FsX2ZyYWd9O09iamVjdC5hc3NpZ24oaWQucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLm1pbi5jb3B5KGEpO3RoaXMubWF4LmNvcHkoYik7cmV0dXJuIHRoaXN9LHNldEZyb21Qb2ludHM6ZnVuY3Rpb24oYSl7dGhpcy5tYWtlRW1wdHkoKTsKZm9yKHZhciBiPTAsYz1hLmxlbmd0aDtiPGM7YisrKXRoaXMuZXhwYW5kQnlQb2ludChhW2JdKTtyZXR1cm4gdGhpc30sc2V0RnJvbUNlbnRlckFuZFNpemU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgRDtyZXR1cm4gZnVuY3Rpb24oYixjKXt2YXIgZD1hLmNvcHkoYykubXVsdGlwbHlTY2FsYXIoLjUpO3RoaXMubWluLmNvcHkoYikuc3ViKGQpO3RoaXMubWF4LmNvcHkoYikuYWRkKGQpO3JldHVybiB0aGlzfX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLm1pbi5jb3B5KGEubWluKTt0aGlzLm1heC5jb3B5KGEubWF4KTtyZXR1cm4gdGhpc30sbWFrZUVtcHR5OmZ1bmN0aW9uKCl7dGhpcy5taW4ueD10aGlzLm1pbi55PUluZmluaXR5O3RoaXMubWF4Lng9dGhpcy5tYXgueT0tSW5maW5pdHk7cmV0dXJuIHRoaXN9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHwKdGhpcy5tYXgueTx0aGlzLm1pbi55fSxnZXRDZW50ZXI6ZnVuY3Rpb24oYSl7YT1hfHxuZXcgRDtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/YS5zZXQoMCwwKTphLmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX0sZ2V0U2l6ZTpmdW5jdGlvbihhKXthPWF8fG5ldyBEO3JldHVybiB0aGlzLmlzRW1wdHkoKT9hLnNldCgwLDApOmEuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9LGV4cGFuZEJ5UG9pbnQ6ZnVuY3Rpb24oYSl7dGhpcy5taW4ubWluKGEpO3RoaXMubWF4Lm1heChhKTtyZXR1cm4gdGhpc30sZXhwYW5kQnlWZWN0b3I6ZnVuY3Rpb24oYSl7dGhpcy5taW4uc3ViKGEpO3RoaXMubWF4LmFkZChhKTtyZXR1cm4gdGhpc30sZXhwYW5kQnlTY2FsYXI6ZnVuY3Rpb24oYSl7dGhpcy5taW4uYWRkU2NhbGFyKC1hKTt0aGlzLm1heC5hZGRTY2FsYXIoYSk7cmV0dXJuIHRoaXN9LGNvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEueDwKdGhpcy5taW4ueHx8YS54PnRoaXMubWF4Lnh8fGEueTx0aGlzLm1pbi55fHxhLnk+dGhpcy5tYXgueT8hMTohMH0sY29udGFpbnNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubWluLng8PWEubWluLngmJmEubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PWEubWluLnkmJmEubWF4Lnk8PXRoaXMubWF4Lnl9LGdldFBhcmFtZXRlcjpmdW5jdGlvbihhLGIpe3JldHVybihifHxuZXcgRCkuc2V0KChhLngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKGEueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSl9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWF4Lng8dGhpcy5taW4ueHx8YS5taW4ueD50aGlzLm1heC54fHxhLm1heC55PHRoaXMubWluLnl8fGEubWluLnk+dGhpcy5tYXgueT8hMTohMH0sY2xhbXBQb2ludDpmdW5jdGlvbihhLGIpe3JldHVybihifHxuZXcgRCkuY29weShhKS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9LApkaXN0YW5jZVRvUG9pbnQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgRDtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGEuY29weShiKS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKGIpLmxlbmd0aCgpfX0oKSxpbnRlcnNlY3Q6ZnVuY3Rpb24oYSl7dGhpcy5taW4ubWF4KGEubWluKTt0aGlzLm1heC5taW4oYS5tYXgpO3JldHVybiB0aGlzfSx1bmlvbjpmdW5jdGlvbihhKXt0aGlzLm1pbi5taW4oYS5taW4pO3RoaXMubWF4Lm1heChhLm1heCk7cmV0dXJuIHRoaXN9LHRyYW5zbGF0ZTpmdW5jdGlvbihhKXt0aGlzLm1pbi5hZGQoYSk7dGhpcy5tYXguYWRkKGEpO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWluLmVxdWFscyh0aGlzLm1pbikmJmEubWF4LmVxdWFscyh0aGlzLm1heCl9fSk7dmFyIEtmPTA7T2JqZWN0LmFzc2lnbihaLnByb3RvdHlwZSxzYS5wcm90b3R5cGUse2lzTWF0ZXJpYWw6ITAsc2V0VmFsdWVzOmZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PQphKWZvcih2YXIgYiBpbiBhKXt2YXIgYz1hW2JdO2lmKHZvaWQgMD09PWMpY29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrYisiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2Vsc2V7dmFyIGQ9dGhpc1tiXTt2b2lkIDA9PT1kP2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogJyIrYisiJyBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGlzIG1hdGVyaWFsLiIpOmQmJmQuaXNDb2xvcj9kLnNldChjKTpkJiZkLmlzVmVjdG9yMyYmYyYmYy5pc1ZlY3RvcjM/ZC5jb3B5KGMpOnRoaXNbYl09Im92ZXJkcmF3Ij09PWI/TnVtYmVyKGMpOmN9fX0sdG9KU09OOmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSl7dmFyIGI9W10sYztmb3IoYyBpbiBhKXt2YXIgZD1hW2NdO2RlbGV0ZSBkLm1ldGFkYXRhO2IucHVzaChkKX1yZXR1cm4gYn12YXIgYz12b2lkIDA9PT1hO2MmJihhPXt0ZXh0dXJlczp7fSxpbWFnZXM6e319KTt2YXIgZD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6Ik1hdGVyaWFsIiwKZ2VuZXJhdG9yOiJNYXRlcmlhbC50b0pTT04ifX07ZC51dWlkPXRoaXMudXVpZDtkLnR5cGU9dGhpcy50eXBlOyIiIT09dGhpcy5uYW1lJiYoZC5uYW1lPXRoaXMubmFtZSk7dGhpcy5jb2xvciYmdGhpcy5jb2xvci5pc0NvbG9yJiYoZC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpKTt2b2lkIDAhPT10aGlzLnJvdWdobmVzcyYmKGQucm91Z2huZXNzPXRoaXMucm91Z2huZXNzKTt2b2lkIDAhPT10aGlzLm1ldGFsbmVzcyYmKGQubWV0YWxuZXNzPXRoaXMubWV0YWxuZXNzKTt0aGlzLmVtaXNzaXZlJiZ0aGlzLmVtaXNzaXZlLmlzQ29sb3ImJihkLmVtaXNzaXZlPXRoaXMuZW1pc3NpdmUuZ2V0SGV4KCkpO3RoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKGQuc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSk7dm9pZCAwIT09dGhpcy5zaGluaW5lc3MmJihkLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyk7dm9pZCAwIT09dGhpcy5jbGVhckNvYXQmJihkLmNsZWFyQ29hdD0KdGhpcy5jbGVhckNvYXQpO3ZvaWQgMCE9PXRoaXMuY2xlYXJDb2F0Um91Z2huZXNzJiYoZC5jbGVhckNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhckNvYXRSb3VnaG5lc3MpO3RoaXMubWFwJiZ0aGlzLm1hcC5pc1RleHR1cmUmJihkLm1hcD10aGlzLm1hcC50b0pTT04oYSkudXVpZCk7dGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihkLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKGEpLnV1aWQpO3RoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYoZC5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTihhKS51dWlkKTt0aGlzLmJ1bXBNYXAmJnRoaXMuYnVtcE1hcC5pc1RleHR1cmUmJihkLmJ1bXBNYXA9dGhpcy5idW1wTWFwLnRvSlNPTihhKS51dWlkLGQuYnVtcFNjYWxlPXRoaXMuYnVtcFNjYWxlKTt0aGlzLm5vcm1hbE1hcCYmdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlJiYoZC5ub3JtYWxNYXA9dGhpcy5ub3JtYWxNYXAudG9KU09OKGEpLnV1aWQsCmQubm9ybWFsU2NhbGU9dGhpcy5ub3JtYWxTY2FsZS50b0FycmF5KCkpO3RoaXMuZGlzcGxhY2VtZW50TWFwJiZ0aGlzLmRpc3BsYWNlbWVudE1hcC5pc1RleHR1cmUmJihkLmRpc3BsYWNlbWVudE1hcD10aGlzLmRpc3BsYWNlbWVudE1hcC50b0pTT04oYSkudXVpZCxkLmRpc3BsYWNlbWVudFNjYWxlPXRoaXMuZGlzcGxhY2VtZW50U2NhbGUsZC5kaXNwbGFjZW1lbnRCaWFzPXRoaXMuZGlzcGxhY2VtZW50Qmlhcyk7dGhpcy5yb3VnaG5lc3NNYXAmJnRoaXMucm91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKGQucm91Z2huZXNzTWFwPXRoaXMucm91Z2huZXNzTWFwLnRvSlNPTihhKS51dWlkKTt0aGlzLm1ldGFsbmVzc01hcCYmdGhpcy5tZXRhbG5lc3NNYXAuaXNUZXh0dXJlJiYoZC5tZXRhbG5lc3NNYXA9dGhpcy5tZXRhbG5lc3NNYXAudG9KU09OKGEpLnV1aWQpO3RoaXMuZW1pc3NpdmVNYXAmJnRoaXMuZW1pc3NpdmVNYXAuaXNUZXh0dXJlJiYoZC5lbWlzc2l2ZU1hcD10aGlzLmVtaXNzaXZlTWFwLnRvSlNPTihhKS51dWlkKTsKdGhpcy5zcGVjdWxhck1hcCYmdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUmJihkLnNwZWN1bGFyTWFwPXRoaXMuc3BlY3VsYXJNYXAudG9KU09OKGEpLnV1aWQpO3RoaXMuZW52TWFwJiZ0aGlzLmVudk1hcC5pc1RleHR1cmUmJihkLmVudk1hcD10aGlzLmVudk1hcC50b0pTT04oYSkudXVpZCxkLnJlZmxlY3Rpdml0eT10aGlzLnJlZmxlY3Rpdml0eSk7dGhpcy5ncmFkaWVudE1hcCYmdGhpcy5ncmFkaWVudE1hcC5pc1RleHR1cmUmJihkLmdyYWRpZW50TWFwPXRoaXMuZ3JhZGllbnRNYXAudG9KU09OKGEpLnV1aWQpO3ZvaWQgMCE9PXRoaXMuc2l6ZSYmKGQuc2l6ZT10aGlzLnNpemUpO3ZvaWQgMCE9PXRoaXMuc2l6ZUF0dGVudWF0aW9uJiYoZC5zaXplQXR0ZW51YXRpb249dGhpcy5zaXplQXR0ZW51YXRpb24pOzEhPT10aGlzLmJsZW5kaW5nJiYoZC5ibGVuZGluZz10aGlzLmJsZW5kaW5nKTsyIT09dGhpcy5zaGFkaW5nJiYoZC5zaGFkaW5nPXRoaXMuc2hhZGluZyk7MCE9PXRoaXMuc2lkZSYmCihkLnNpZGU9dGhpcy5zaWRlKTswIT09dGhpcy52ZXJ0ZXhDb2xvcnMmJihkLnZlcnRleENvbG9ycz10aGlzLnZlcnRleENvbG9ycyk7MT50aGlzLm9wYWNpdHkmJihkLm9wYWNpdHk9dGhpcy5vcGFjaXR5KTshMD09PXRoaXMudHJhbnNwYXJlbnQmJihkLnRyYW5zcGFyZW50PXRoaXMudHJhbnNwYXJlbnQpO2QuZGVwdGhGdW5jPXRoaXMuZGVwdGhGdW5jO2QuZGVwdGhUZXN0PXRoaXMuZGVwdGhUZXN0O2QuZGVwdGhXcml0ZT10aGlzLmRlcHRoV3JpdGU7MDx0aGlzLmFscGhhVGVzdCYmKGQuYWxwaGFUZXN0PXRoaXMuYWxwaGFUZXN0KTshMD09PXRoaXMucHJlbXVsdGlwbGllZEFscGhhJiYoZC5wcmVtdWx0aXBsaWVkQWxwaGE9dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEpOyEwPT09dGhpcy53aXJlZnJhbWUmJihkLndpcmVmcmFtZT10aGlzLndpcmVmcmFtZSk7MTx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCYmKGQud2lyZWZyYW1lTGluZXdpZHRoPXRoaXMud2lyZWZyYW1lTGluZXdpZHRoKTsKInJvdW5kIiE9PXRoaXMud2lyZWZyYW1lTGluZWNhcCYmKGQud2lyZWZyYW1lTGluZWNhcD10aGlzLndpcmVmcmFtZUxpbmVjYXApOyJyb3VuZCIhPT10aGlzLndpcmVmcmFtZUxpbmVqb2luJiYoZC53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVqb2luKTtkLnNraW5uaW5nPXRoaXMuc2tpbm5pbmc7ZC5tb3JwaFRhcmdldHM9dGhpcy5tb3JwaFRhcmdldHM7ZC5kaXRoZXJpbmc9dGhpcy5kaXRoZXJpbmc7YyYmKGM9YihhLnRleHR1cmVzKSxhPWIoYS5pbWFnZXMpLDA8Yy5sZW5ndGgmJihkLnRleHR1cmVzPWMpLDA8YS5sZW5ndGgmJihkLmltYWdlcz1hKSk7cmV0dXJuIGR9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMubmFtZT1hLm5hbWU7dGhpcy5mb2c9YS5mb2c7dGhpcy5saWdodHM9YS5saWdodHM7dGhpcy5ibGVuZGluZz1hLmJsZW5kaW5nO3RoaXMuc2lkZT1hLnNpZGU7CnRoaXMuc2hhZGluZz1hLnNoYWRpbmc7dGhpcy52ZXJ0ZXhDb2xvcnM9YS52ZXJ0ZXhDb2xvcnM7dGhpcy5vcGFjaXR5PWEub3BhY2l0eTt0aGlzLnRyYW5zcGFyZW50PWEudHJhbnNwYXJlbnQ7dGhpcy5ibGVuZFNyYz1hLmJsZW5kU3JjO3RoaXMuYmxlbmREc3Q9YS5ibGVuZERzdDt0aGlzLmJsZW5kRXF1YXRpb249YS5ibGVuZEVxdWF0aW9uO3RoaXMuYmxlbmRTcmNBbHBoYT1hLmJsZW5kU3JjQWxwaGE7dGhpcy5ibGVuZERzdEFscGhhPWEuYmxlbmREc3RBbHBoYTt0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT1hLmJsZW5kRXF1YXRpb25BbHBoYTt0aGlzLmRlcHRoRnVuYz1hLmRlcHRoRnVuYzt0aGlzLmRlcHRoVGVzdD1hLmRlcHRoVGVzdDt0aGlzLmRlcHRoV3JpdGU9YS5kZXB0aFdyaXRlO3RoaXMuY29sb3JXcml0ZT1hLmNvbG9yV3JpdGU7dGhpcy5wcmVjaXNpb249YS5wcmVjaXNpb247dGhpcy5wb2x5Z29uT2Zmc2V0PWEucG9seWdvbk9mZnNldDt0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9CmEucG9seWdvbk9mZnNldEZhY3Rvcjt0aGlzLnBvbHlnb25PZmZzZXRVbml0cz1hLnBvbHlnb25PZmZzZXRVbml0czt0aGlzLmRpdGhlcmluZz1hLmRpdGhlcmluZzt0aGlzLmFscGhhVGVzdD1hLmFscGhhVGVzdDt0aGlzLnByZW11bHRpcGxpZWRBbHBoYT1hLnByZW11bHRpcGxpZWRBbHBoYTt0aGlzLm92ZXJkcmF3PWEub3ZlcmRyYXc7dGhpcy52aXNpYmxlPWEudmlzaWJsZTt0aGlzLmNsaXBTaGFkb3dzPWEuY2xpcFNoYWRvd3M7dGhpcy5jbGlwSW50ZXJzZWN0aW9uPWEuY2xpcEludGVyc2VjdGlvbjthPWEuY2xpcHBpbmdQbGFuZXM7dmFyIGI9bnVsbDtpZihudWxsIT09YSlmb3IodmFyIGM9YS5sZW5ndGgsYj1BcnJheShjKSxkPTA7ZCE9PWM7KytkKWJbZF09YVtkXS5jbG9uZSgpO3RoaXMuY2xpcHBpbmdQbGFuZXM9YjtyZXR1cm4gdGhpc30sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KTtFYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShaLnByb3RvdHlwZSk7CkVhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FYTtFYS5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMDtFYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtaLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLmZyYWdtZW50U2hhZGVyPWEuZnJhZ21lbnRTaGFkZXI7dGhpcy52ZXJ0ZXhTaGFkZXI9YS52ZXJ0ZXhTaGFkZXI7dGhpcy51bmlmb3Jtcz1IYS5jbG9uZShhLnVuaWZvcm1zKTt0aGlzLmRlZmluZXM9YS5kZWZpbmVzO3RoaXMud2lyZWZyYW1lPWEud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWEud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMubGlnaHRzPWEubGlnaHRzO3RoaXMuY2xpcHBpbmc9YS5jbGlwcGluZzt0aGlzLnNraW5uaW5nPWEuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9YS5tb3JwaFRhcmdldHM7dGhpcy5tb3JwaE5vcm1hbHM9YS5tb3JwaE5vcm1hbHM7dGhpcy5leHRlbnNpb25zPWEuZXh0ZW5zaW9ucztyZXR1cm4gdGhpc307RWEucHJvdG90eXBlLnRvSlNPTj0KZnVuY3Rpb24oYSl7YT1aLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGEpO2EudW5pZm9ybXM9dGhpcy51bmlmb3JtczthLnZlcnRleFNoYWRlcj10aGlzLnZlcnRleFNoYWRlcjthLmZyYWdtZW50U2hhZGVyPXRoaXMuZnJhZ21lbnRTaGFkZXI7cmV0dXJuIGF9OyRhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTskYS5wcm90b3R5cGUuY29uc3RydWN0b3I9JGE7JGEucHJvdG90eXBlLmlzTWVzaERlcHRoTWF0ZXJpYWw9ITA7JGEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5kZXB0aFBhY2tpbmc9YS5kZXB0aFBhY2tpbmc7dGhpcy5za2lubmluZz1hLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWEubW9ycGhUYXJnZXRzO3RoaXMubWFwPWEubWFwO3RoaXMuYWxwaGFNYXA9YS5hbHBoYU1hcDt0aGlzLmRpc3BsYWNlbWVudE1hcD1hLmRpc3BsYWNlbWVudE1hcDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPQphLmRpc3BsYWNlbWVudFNjYWxlO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz1hLmRpc3BsYWNlbWVudEJpYXM7dGhpcy53aXJlZnJhbWU9YS53aXJlZnJhbWU7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9YS53aXJlZnJhbWVMaW5ld2lkdGg7cmV0dXJuIHRoaXN9O09iamVjdC5hc3NpZ24oVGEucHJvdG90eXBlLHtpc0JveDM6ITAsc2V0OmZ1bmN0aW9uKGEsYil7dGhpcy5taW4uY29weShhKTt0aGlzLm1heC5jb3B5KGIpO3JldHVybiB0aGlzfSxzZXRGcm9tQXJyYXk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPUluZmluaXR5LGM9SW5maW5pdHksZD1JbmZpbml0eSxlPS1JbmZpbml0eSxmPS1JbmZpbml0eSxnPS1JbmZpbml0eSxoPTAsaz1hLmxlbmd0aDtoPGs7aCs9Myl7dmFyIG09YVtoXSxsPWFbaCsxXSxxPWFbaCsyXTttPGImJihiPW0pO2w8YyYmKGM9bCk7cTxkJiYoZD1xKTttPmUmJihlPW0pO2w+ZiYmKGY9bCk7cT5nJiYoZz1xKX10aGlzLm1pbi5zZXQoYixjLGQpO3RoaXMubWF4LnNldChlLApmLGcpO3JldHVybiB0aGlzfSxzZXRGcm9tQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1JbmZpbml0eSxjPUluZmluaXR5LGQ9SW5maW5pdHksZT0tSW5maW5pdHksZj0tSW5maW5pdHksZz0tSW5maW5pdHksaD0wLGs9YS5jb3VudDtoPGs7aCsrKXt2YXIgbT1hLmdldFgoaCksbD1hLmdldFkoaCkscT1hLmdldFooaCk7bTxiJiYoYj1tKTtsPGMmJihjPWwpO3E8ZCYmKGQ9cSk7bT5lJiYoZT1tKTtsPmYmJihmPWwpO3E+ZyYmKGc9cSl9dGhpcy5taW4uc2V0KGIsYyxkKTt0aGlzLm1heC5zZXQoZSxmLGcpO3JldHVybiB0aGlzfSxzZXRGcm9tUG9pbnRzOmZ1bmN0aW9uKGEpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aDtiPGM7YisrKXRoaXMuZXhwYW5kQnlQb2ludChhW2JdKTtyZXR1cm4gdGhpc30sc2V0RnJvbUNlbnRlckFuZFNpemU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYixjKXt2YXIgZD1hLmNvcHkoYykubXVsdGlwbHlTY2FsYXIoLjUpOwp0aGlzLm1pbi5jb3B5KGIpLnN1YihkKTt0aGlzLm1heC5jb3B5KGIpLmFkZChkKTtyZXR1cm4gdGhpc319KCksc2V0RnJvbU9iamVjdDpmdW5jdGlvbihhKXt0aGlzLm1ha2VFbXB0eSgpO3JldHVybiB0aGlzLmV4cGFuZEJ5T2JqZWN0KGEpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLm1pbi5jb3B5KGEubWluKTt0aGlzLm1heC5jb3B5KGEubWF4KTtyZXR1cm4gdGhpc30sbWFrZUVtcHR5OmZ1bmN0aW9uKCl7dGhpcy5taW4ueD10aGlzLm1pbi55PXRoaXMubWluLno9SW5maW5pdHk7dGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LUluZmluaXR5O3JldHVybiB0aGlzfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fHx0aGlzLm1heC56PHRoaXMubWluLnp9LGdldENlbnRlcjpmdW5jdGlvbihhKXthPQphfHxuZXcgcDtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/YS5zZXQoMCwwLDApOmEuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfSxnZXRTaXplOmZ1bmN0aW9uKGEpe2E9YXx8bmV3IHA7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP2Euc2V0KDAsMCwwKTphLnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfSxleHBhbmRCeVBvaW50OmZ1bmN0aW9uKGEpe3RoaXMubWluLm1pbihhKTt0aGlzLm1heC5tYXgoYSk7cmV0dXJuIHRoaXN9LGV4cGFuZEJ5VmVjdG9yOmZ1bmN0aW9uKGEpe3RoaXMubWluLnN1YihhKTt0aGlzLm1heC5hZGQoYSk7cmV0dXJuIHRoaXN9LGV4cGFuZEJ5U2NhbGFyOmZ1bmN0aW9uKGEpe3RoaXMubWluLmFkZFNjYWxhcigtYSk7dGhpcy5tYXguYWRkU2NhbGFyKGEpO3JldHVybiB0aGlzfSxleHBhbmRCeU9iamVjdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz10aGlzO2IudXBkYXRlTWF0cml4V29ybGQoITApOwpiLnRyYXZlcnNlKGZ1bmN0aW9uKGIpe3ZhciBlLGY7ZT1iLmdlb21ldHJ5O2lmKHZvaWQgMCE9PWUpaWYoZS5pc0dlb21ldHJ5KXt2YXIgZz1lLnZlcnRpY2VzO2U9MDtmb3IoZj1nLmxlbmd0aDtlPGY7ZSsrKWEuY29weShnW2VdKSxhLmFwcGx5TWF0cml4NChiLm1hdHJpeFdvcmxkKSxjLmV4cGFuZEJ5UG9pbnQoYSl9ZWxzZSBpZihlLmlzQnVmZmVyR2VvbWV0cnkmJihnPWUuYXR0cmlidXRlcy5wb3NpdGlvbix2b2lkIDAhPT1nKSlmb3IoZT0wLGY9Zy5jb3VudDtlPGY7ZSsrKWEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShnLGUpLmFwcGx5TWF0cml4NChiLm1hdHJpeFdvcmxkKSxjLmV4cGFuZEJ5UG9pbnQoYSl9KTtyZXR1cm4gdGhpc319KCksY29udGFpbnNQb2ludDpmdW5jdGlvbihhKXtyZXR1cm4gYS54PHRoaXMubWluLnh8fGEueD50aGlzLm1heC54fHxhLnk8dGhpcy5taW4ueXx8YS55PnRoaXMubWF4Lnl8fGEuejx0aGlzLm1pbi56fHxhLno+dGhpcy5tYXguej8hMTohMH0sY29udGFpbnNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubWluLng8PQphLm1pbi54JiZhLm1heC54PD10aGlzLm1heC54JiZ0aGlzLm1pbi55PD1hLm1pbi55JiZhLm1heC55PD10aGlzLm1heC55JiZ0aGlzLm1pbi56PD1hLm1pbi56JiZhLm1heC56PD10aGlzLm1heC56fSxnZXRQYXJhbWV0ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYnx8bmV3IHApLnNldCgoYS54LXRoaXMubWluLngpLyh0aGlzLm1heC54LXRoaXMubWluLngpLChhLnktdGhpcy5taW4ueSkvKHRoaXMubWF4LnktdGhpcy5taW4ueSksKGEuei10aGlzLm1pbi56KS8odGhpcy5tYXguei10aGlzLm1pbi56KSl9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWF4Lng8dGhpcy5taW4ueHx8YS5taW4ueD50aGlzLm1heC54fHxhLm1heC55PHRoaXMubWluLnl8fGEubWluLnk+dGhpcy5tYXgueXx8YS5tYXguejx0aGlzLm1pbi56fHxhLm1pbi56PnRoaXMubWF4Lno/ITE6ITB9LGludGVyc2VjdHNTcGhlcmU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYil7dGhpcy5jbGFtcFBvaW50KGIuY2VudGVyLAphKTtyZXR1cm4gYS5kaXN0YW5jZVRvU3F1YXJlZChiLmNlbnRlcik8PWIucmFkaXVzKmIucmFkaXVzfX0oKSxpbnRlcnNlY3RzUGxhbmU6ZnVuY3Rpb24oYSl7dmFyIGIsYzswPGEubm9ybWFsLng/KGI9YS5ub3JtYWwueCp0aGlzLm1pbi54LGM9YS5ub3JtYWwueCp0aGlzLm1heC54KTooYj1hLm5vcm1hbC54KnRoaXMubWF4LngsYz1hLm5vcm1hbC54KnRoaXMubWluLngpOzA8YS5ub3JtYWwueT8oYis9YS5ub3JtYWwueSp0aGlzLm1pbi55LGMrPWEubm9ybWFsLnkqdGhpcy5tYXgueSk6KGIrPWEubm9ybWFsLnkqdGhpcy5tYXgueSxjKz1hLm5vcm1hbC55KnRoaXMubWluLnkpOzA8YS5ub3JtYWwuej8oYis9YS5ub3JtYWwueip0aGlzLm1pbi56LGMrPWEubm9ybWFsLnoqdGhpcy5tYXgueik6KGIrPWEubm9ybWFsLnoqdGhpcy5tYXgueixjKz1hLm5vcm1hbC56KnRoaXMubWluLnopO3JldHVybiBiPD1hLmNvbnN0YW50JiZjPj1hLmNvbnN0YW50fSxjbGFtcFBvaW50OmZ1bmN0aW9uKGEsCmIpe3JldHVybihifHxuZXcgcCkuY29weShhKS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9LGRpc3RhbmNlVG9Qb2ludDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gYS5jb3B5KGIpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIoYikubGVuZ3RoKCl9fSgpLGdldEJvdW5kaW5nU3BoZXJlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe2I9Ynx8bmV3IEdhO3RoaXMuZ2V0Q2VudGVyKGIuY2VudGVyKTtiLnJhZGl1cz0uNSp0aGlzLmdldFNpemUoYSkubGVuZ3RoKCk7cmV0dXJuIGJ9fSgpLGludGVyc2VjdDpmdW5jdGlvbihhKXt0aGlzLm1pbi5tYXgoYS5taW4pO3RoaXMubWF4Lm1pbihhLm1heCk7dGhpcy5pc0VtcHR5KCkmJnRoaXMubWFrZUVtcHR5KCk7cmV0dXJuIHRoaXN9LHVuaW9uOmZ1bmN0aW9uKGEpe3RoaXMubWluLm1pbihhLm1pbik7dGhpcy5tYXgubWF4KGEubWF4KTtyZXR1cm4gdGhpc30sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKCl7dmFyIGE9CltuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcCxuZXcgcF07cmV0dXJuIGZ1bmN0aW9uKGIpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiB0aGlzO2FbMF0uc2V0KHRoaXMubWluLngsdGhpcy5taW4ueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQoYik7YVsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NChiKTthWzJdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KGIpO2FbM10uc2V0KHRoaXMubWluLngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQoYik7YVs0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NChiKTthWzVdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KGIpO2FbNl0uc2V0KHRoaXMubWF4LngsdGhpcy5tYXgueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQoYik7CmFbN10uc2V0KHRoaXMubWF4LngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQoYik7dGhpcy5zZXRGcm9tUG9pbnRzKGEpO3JldHVybiB0aGlzfX0oKSx0cmFuc2xhdGU6ZnVuY3Rpb24oYSl7dGhpcy5taW4uYWRkKGEpO3RoaXMubWF4LmFkZChhKTtyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLm1pbi5lcXVhbHModGhpcy5taW4pJiZhLm1heC5lcXVhbHModGhpcy5tYXgpfX0pO09iamVjdC5hc3NpZ24oR2EucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLmNlbnRlci5jb3B5KGEpO3RoaXMucmFkaXVzPWI7cmV0dXJuIHRoaXN9LHNldEZyb21Qb2ludHM6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgVGE7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcy5jZW50ZXI7dm9pZCAwIT09Yz9kLmNvcHkoYyk6YS5zZXRGcm9tUG9pbnRzKGIpLmdldENlbnRlcihkKTtmb3IodmFyIGU9MCxmPTAsZz1iLmxlbmd0aDtmPGc7ZisrKWU9TWF0aC5tYXgoZSwKZC5kaXN0YW5jZVRvU3F1YXJlZChiW2ZdKSk7dGhpcy5yYWRpdXM9TWF0aC5zcXJ0KGUpO3JldHVybiB0aGlzfX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLmNlbnRlci5jb3B5KGEuY2VudGVyKTt0aGlzLnJhZGl1cz1hLnJhZGl1cztyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gMD49dGhpcy5yYWRpdXN9LGNvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c30sZGlzdGFuY2VUb1BvaW50OmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucmFkaXVzK2EucmFkaXVzO3JldHVybiBhLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmNlbnRlcik8PQpiKmJ9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX0saW50ZXJzZWN0c1BsYW5lOmZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLmFicyh0aGlzLmNlbnRlci5kb3QoYS5ub3JtYWwpLWEuY29uc3RhbnQpPD10aGlzLnJhZGl1c30sY2xhbXBQb2ludDpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKGEpLGQ9Ynx8bmV3IHA7ZC5jb3B5KGEpO2M+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihkLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZC5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSk7cmV0dXJuIGR9LGdldEJvdW5kaW5nQm94OmZ1bmN0aW9uKGEpe2E9YXx8bmV3IFRhO2Euc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKTthLmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKTtyZXR1cm4gYX0sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKGEpe3RoaXMuY2VudGVyLmFwcGx5TWF0cml4NChhKTsKdGhpcy5yYWRpdXMqPWEuZ2V0TWF4U2NhbGVPbkF4aXMoKTtyZXR1cm4gdGhpc30sdHJhbnNsYXRlOmZ1bmN0aW9uKGEpe3RoaXMuY2VudGVyLmFkZChhKTtyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpJiZhLnJhZGl1cz09PXRoaXMucmFkaXVzfX0pO09iamVjdC5hc3NpZ24oS2EucHJvdG90eXBlLHtpc01hdHJpeDM6ITAsc2V0OmZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxrKXt2YXIgbT10aGlzLmVsZW1lbnRzO21bMF09YTttWzFdPWQ7bVsyXT1nO21bM109YjttWzRdPWU7bVs1XT1oO21bNl09YzttWzddPWY7bVs4XT1rO3JldHVybiB0aGlzfSxpZGVudGl0eTpmdW5jdGlvbigpe3RoaXMuc2V0KDEsMCwwLDAsMSwwLDAsMCwxKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX0sY29weTpmdW5jdGlvbihhKXt2YXIgYj0KdGhpcy5lbGVtZW50czthPWEuZWxlbWVudHM7YlswXT1hWzBdO2JbMV09YVsxXTtiWzJdPWFbMl07YlszXT1hWzNdO2JbNF09YVs0XTtiWzVdPWFbNV07Yls2XT1hWzZdO2JbN109YVs3XTtiWzhdPWFbOF07cmV0dXJuIHRoaXN9LHNldEZyb21NYXRyaXg0OmZ1bmN0aW9uKGEpe2E9YS5lbGVtZW50czt0aGlzLnNldChhWzBdLGFbNF0sYVs4XSxhWzFdLGFbNV0sYVs5XSxhWzJdLGFbNl0sYVsxMF0pO3JldHVybiB0aGlzfSxhcHBseVRvQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe2Zvcih2YXIgYz0wLGQ9Yi5jb3VudDtjPGQ7YysrKWEueD1iLmdldFgoYyksYS55PWIuZ2V0WShjKSxhLno9Yi5nZXRaKGMpLGEuYXBwbHlNYXRyaXgzKHRoaXMpLGIuc2V0WFlaKGMsYS54LGEueSxhLnopO3JldHVybiBifX0oKSxtdWx0aXBseTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsYSl9LHByZW11bHRpcGx5OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXMoYSwKdGhpcyl9LG11bHRpcGx5TWF0cmljZXM6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmVsZW1lbnRzLGQ9Yi5lbGVtZW50cyxlPXRoaXMuZWxlbWVudHMsZj1jWzBdLGc9Y1szXSxoPWNbNl0saz1jWzFdLG09Y1s0XSxsPWNbN10scT1jWzJdLG49Y1s1XSxjPWNbOF0scj1kWzBdLHA9ZFszXSx0PWRbNl0seT1kWzFdLHg9ZFs0XSx2PWRbN10sRz1kWzJdLHc9ZFs1XSxkPWRbOF07ZVswXT1mKnIrZyp5K2gqRztlWzNdPWYqcCtnKngraCp3O2VbNl09Zip0K2cqditoKmQ7ZVsxXT1rKnIrbSp5K2wqRztlWzRdPWsqcCttKngrbCp3O2VbN109ayp0K20qditsKmQ7ZVsyXT1xKnIrbip5K2MqRztlWzVdPXEqcCtuKngrYyp3O2VbOF09cSp0K24qditjKmQ7cmV0dXJuIHRoaXN9LG11bHRpcGx5U2NhbGFyOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWxlbWVudHM7YlswXSo9YTtiWzNdKj1hO2JbNl0qPWE7YlsxXSo9YTtiWzRdKj1hO2JbN10qPWE7YlsyXSo9YTtiWzVdKj1hO2JbOF0qPWE7cmV0dXJuIHRoaXN9LApkZXRlcm1pbmFudDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZWxlbWVudHMsYj1hWzBdLGM9YVsxXSxkPWFbMl0sZT1hWzNdLGY9YVs0XSxnPWFbNV0saD1hWzZdLGs9YVs3XSxhPWFbOF07cmV0dXJuIGIqZiphLWIqZyprLWMqZSphK2MqZypoK2QqZSprLWQqZipofSxnZXRJbnZlcnNlOmZ1bmN0aW9uKGEsYil7YSYmYS5pc01hdHJpeDQmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDMuZ2V0SW52ZXJzZSBubyBsb25nZXIgdGFrZXMgYSBNYXRyaXg0IGFyZ3VtZW50LiIpO3ZhciBjPWEuZWxlbWVudHMsZD10aGlzLmVsZW1lbnRzLGU9Y1swXSxmPWNbMV0sZz1jWzJdLGg9Y1szXSxrPWNbNF0sbT1jWzVdLGw9Y1s2XSxxPWNbN10sYz1jWzhdLG49YyprLW0qcSxyPW0qbC1jKmgscD1xKmgtaypsLHQ9ZSpuK2YqcitnKnA7aWYoMD09PXQpe2lmKCEwPT09Yil0aHJvdyBFcnJvcigiVEhSRUUuTWF0cml4My5nZXRJbnZlcnNlKCk6IGNhbid0IGludmVydCBtYXRyaXgsIGRldGVybWluYW50IGlzIDAiKTsKY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzLmdldEludmVyc2UoKTogY2FuJ3QgaW52ZXJ0IG1hdHJpeCwgZGV0ZXJtaW5hbnQgaXMgMCIpO3JldHVybiB0aGlzLmlkZW50aXR5KCl9dD0xL3Q7ZFswXT1uKnQ7ZFsxXT0oZypxLWMqZikqdDtkWzJdPShtKmYtZyprKSp0O2RbM109cip0O2RbNF09KGMqZS1nKmwpKnQ7ZFs1XT0oZypoLW0qZSkqdDtkWzZdPXAqdDtkWzddPShmKmwtcSplKSp0O2RbOF09KGsqZS1mKmgpKnQ7cmV0dXJuIHRoaXN9LHRyYW5zcG9zZTpmdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5lbGVtZW50czthPWJbMV07YlsxXT1iWzNdO2JbM109YTthPWJbMl07YlsyXT1iWzZdO2JbNl09YTthPWJbNV07Yls1XT1iWzddO2JbN109YTtyZXR1cm4gdGhpc30sZ2V0Tm9ybWFsTWF0cml4OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KGEpLmdldEludmVyc2UodGhpcykudHJhbnNwb3NlKCl9LHRyYW5zcG9zZUludG9BcnJheTpmdW5jdGlvbihhKXt2YXIgYj0KdGhpcy5lbGVtZW50czthWzBdPWJbMF07YVsxXT1iWzNdO2FbMl09Yls2XTthWzNdPWJbMV07YVs0XT1iWzRdO2FbNV09Yls3XTthWzZdPWJbMl07YVs3XT1iWzVdO2FbOF09Yls4XTtyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWxlbWVudHM7YT1hLmVsZW1lbnRzO2Zvcih2YXIgYz0wOzk+YztjKyspaWYoYltjXSE9PWFbY10pcmV0dXJuITE7cmV0dXJuITB9LGZyb21BcnJheTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTApO2Zvcih2YXIgYz0wOzk+YztjKyspdGhpcy5lbGVtZW50c1tjXT1hW2MrYl07cmV0dXJuIHRoaXN9LHRvQXJyYXk6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1hJiYoYT1bXSk7dm9pZCAwPT09YiYmKGI9MCk7dmFyIGM9dGhpcy5lbGVtZW50czthW2JdPWNbMF07YVtiKzFdPWNbMV07YVtiKzJdPWNbMl07YVtiKzNdPWNbM107YVtiKzRdPWNbNF07YVtiKzVdPWNbNV07YVtiKzZdPWNbNl07YVtiKzddPWNbN107YVtiKzhdPQpjWzhdO3JldHVybiBhfX0pO09iamVjdC5hc3NpZ24od2EucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLm5vcm1hbC5jb3B5KGEpO3RoaXMuY29uc3RhbnQ9YjtyZXR1cm4gdGhpc30sc2V0Q29tcG9uZW50czpmdW5jdGlvbihhLGIsYyxkKXt0aGlzLm5vcm1hbC5zZXQoYSxiLGMpO3RoaXMuY29uc3RhbnQ9ZDtyZXR1cm4gdGhpc30sc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQ6ZnVuY3Rpb24oYSxiKXt0aGlzLm5vcm1hbC5jb3B5KGEpO3RoaXMuY29uc3RhbnQ9LWIuZG90KHRoaXMubm9ybWFsKTtyZXR1cm4gdGhpc30sc2V0RnJvbUNvcGxhbmFyUG9pbnRzOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYyxkLGUpe2Q9YS5zdWJWZWN0b3JzKGUsZCkuY3Jvc3MoYi5zdWJWZWN0b3JzKGMsZCkpLm5vcm1hbGl6ZSgpO3RoaXMuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQoZCxjKTtyZXR1cm4gdGhpc319KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LApjb3B5OmZ1bmN0aW9uKGEpe3RoaXMubm9ybWFsLmNvcHkoYS5ub3JtYWwpO3RoaXMuY29uc3RhbnQ9YS5jb25zdGFudDtyZXR1cm4gdGhpc30sbm9ybWFsaXplOmZ1bmN0aW9uKCl7dmFyIGE9MS90aGlzLm5vcm1hbC5sZW5ndGgoKTt0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcihhKTt0aGlzLmNvbnN0YW50Kj1hO3JldHVybiB0aGlzfSxuZWdhdGU6ZnVuY3Rpb24oKXt0aGlzLmNvbnN0YW50Kj0tMTt0aGlzLm5vcm1hbC5uZWdhdGUoKTtyZXR1cm4gdGhpc30sZGlzdGFuY2VUb1BvaW50OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QoYSkrdGhpcy5jb25zdGFudH0sZGlzdGFuY2VUb1NwaGVyZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQoYS5jZW50ZXIpLWEucmFkaXVzfSxwcm9qZWN0UG9pbnQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5vcnRob1BvaW50KGEsYikuc3ViKGEpLm5lZ2F0ZSgpfSxvcnRob1BvaW50OmZ1bmN0aW9uKGEsCmIpe3ZhciBjPXRoaXMuZGlzdGFuY2VUb1BvaW50KGEpO3JldHVybihifHxuZXcgcCkuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoYyl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYixjKXt2YXIgZD1jfHxuZXcgcCxlPWIuZGVsdGEoYSksZj10aGlzLm5vcm1hbC5kb3QoZSk7aWYoMD09PWYpe2lmKDA9PT10aGlzLmRpc3RhbmNlVG9Qb2ludChiLnN0YXJ0KSlyZXR1cm4gZC5jb3B5KGIuc3RhcnQpfWVsc2UgcmV0dXJuIGY9LShiLnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvZiwwPmZ8fDE8Zj92b2lkIDA6ZC5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKGYpLmFkZChiLnN0YXJ0KX19KCksaW50ZXJzZWN0c0xpbmU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kaXN0YW5jZVRvUG9pbnQoYS5zdGFydCk7YT10aGlzLmRpc3RhbmNlVG9Qb2ludChhLmVuZCk7cmV0dXJuIDA+YiYmMDxhfHwwPmEmJjA8Yn0sCmludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW50ZXJzZWN0c1BsYW5lKHRoaXMpfSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmludGVyc2VjdHNQbGFuZSh0aGlzKX0sY29wbGFuYXJQb2ludDpmdW5jdGlvbihhKXtyZXR1cm4oYXx8bmV3IHApLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX0sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgS2E7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7dmFyIGU9dGhpcy5jb3BsYW5hclBvaW50KGEpLmFwcGx5TWF0cml4NChjKSxmPWR8fGIuZ2V0Tm9ybWFsTWF0cml4KGMpLGY9dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKGYpLm5vcm1hbGl6ZSgpO3RoaXMuY29uc3RhbnQ9LWUuZG90KGYpO3JldHVybiB0aGlzfX0oKSx0cmFuc2xhdGU6ZnVuY3Rpb24oYSl7dGhpcy5jb25zdGFudC09YS5kb3QodGhpcy5ub3JtYWwpO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9ybWFsLmVxdWFscyh0aGlzLm5vcm1hbCkmJgphLmNvbnN0YW50PT09dGhpcy5jb25zdGFudH19KTtPYmplY3QuYXNzaWduKGpkLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz10aGlzLnBsYW5lcztnWzBdLmNvcHkoYSk7Z1sxXS5jb3B5KGIpO2dbMl0uY29weShjKTtnWzNdLmNvcHkoZCk7Z1s0XS5jb3B5KGUpO2dbNV0uY29weShmKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMucGxhbmVzLGM9MDs2PmM7YysrKWJbY10uY29weShhLnBsYW5lc1tjXSk7cmV0dXJuIHRoaXN9LHNldEZyb21NYXRyaXg6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wbGFuZXMsYz1hLmVsZW1lbnRzO2E9Y1swXTt2YXIgZD1jWzFdLGU9Y1syXSxmPWNbM10sZz1jWzRdLGg9Y1s1XSxrPWNbNl0sbT1jWzddLGw9Y1s4XSxxPWNbOV0sbj1jWzEwXSxyPWNbMTFdLHA9Y1sxMl0sdD1jWzEzXSwKeT1jWzE0XSxjPWNbMTVdO2JbMF0uc2V0Q29tcG9uZW50cyhmLWEsbS1nLHItbCxjLXApLm5vcm1hbGl6ZSgpO2JbMV0uc2V0Q29tcG9uZW50cyhmK2EsbStnLHIrbCxjK3ApLm5vcm1hbGl6ZSgpO2JbMl0uc2V0Q29tcG9uZW50cyhmK2QsbStoLHIrcSxjK3QpLm5vcm1hbGl6ZSgpO2JbM10uc2V0Q29tcG9uZW50cyhmLWQsbS1oLHItcSxjLXQpLm5vcm1hbGl6ZSgpO2JbNF0uc2V0Q29tcG9uZW50cyhmLWUsbS1rLHItbixjLXkpLm5vcm1hbGl6ZSgpO2JbNV0uc2V0Q29tcG9uZW50cyhmK2UsbStrLHIrbixjK3kpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxpbnRlcnNlY3RzT2JqZWN0OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEdhO3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLmdlb21ldHJ5O251bGw9PT1jLmJvdW5kaW5nU3BoZXJlJiZjLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO2EuY29weShjLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQoYi5tYXRyaXhXb3JsZCk7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShhKX19KCksCmludGVyc2VjdHNTcHJpdGU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgR2E7cmV0dXJuIGZ1bmN0aW9uKGIpe2EuY2VudGVyLnNldCgwLDAsMCk7YS5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzY7YS5hcHBseU1hdHJpeDQoYi5tYXRyaXhXb3JsZCk7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShhKX19KCksaW50ZXJzZWN0c1NwaGVyZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnBsYW5lcyxjPWEuY2VudGVyO2E9LWEucmFkaXVzO2Zvcih2YXIgZD0wOzY+ZDtkKyspaWYoYltkXS5kaXN0YW5jZVRvUG9pbnQoYyk8YSlyZXR1cm4hMTtyZXR1cm4hMH0saW50ZXJzZWN0c0JveDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGMpe2Zvcih2YXIgZD10aGlzLnBsYW5lcyxlPTA7Nj5lO2UrKyl7dmFyIGY9ZFtlXTthLng9MDxmLm5vcm1hbC54P2MubWluLng6Yy5tYXgueDtiLng9MDxmLm5vcm1hbC54P2MubWF4Lng6Yy5taW4ueDthLnk9MDxmLm5vcm1hbC55PwpjLm1pbi55OmMubWF4Lnk7Yi55PTA8Zi5ub3JtYWwueT9jLm1heC55OmMubWluLnk7YS56PTA8Zi5ub3JtYWwuej9jLm1pbi56OmMubWF4Lno7Yi56PTA8Zi5ub3JtYWwuej9jLm1heC56OmMubWluLno7dmFyIGc9Zi5kaXN0YW5jZVRvUG9pbnQoYSksZj1mLmRpc3RhbmNlVG9Qb2ludChiKTtpZigwPmcmJjA+ZilyZXR1cm4hMX1yZXR1cm4hMH19KCksY29udGFpbnNQb2ludDpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5wbGFuZXMsYz0wOzY+YztjKyspaWYoMD5iW2NdLmRpc3RhbmNlVG9Qb2ludChhKSlyZXR1cm4hMTtyZXR1cm4hMH19KTtPYmplY3QuYXNzaWduKGhiLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGEsYil7dGhpcy5vcmlnaW4uY29weShhKTt0aGlzLmRpcmVjdGlvbi5jb3B5KGIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLm9yaWdpbi5jb3B5KGEub3JpZ2luKTsKdGhpcy5kaXJlY3Rpb24uY29weShhLmRpcmVjdGlvbik7cmV0dXJuIHRoaXN9LGF0OmZ1bmN0aW9uKGEsYil7cmV0dXJuKGJ8fG5ldyBwKS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihhKS5hZGQodGhpcy5vcmlnaW4pfSxsb29rQXQ6ZnVuY3Rpb24oYSl7dGhpcy5kaXJlY3Rpb24uY29weShhKS5zdWIodGhpcy5vcmlnaW4pLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxyZWNhc3Q6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYil7dGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KGIsYSkpO3JldHVybiB0aGlzfX0oKSxjbG9zZXN0UG9pbnRUb1BvaW50OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8bmV3IHA7Yy5zdWJWZWN0b3JzKGEsdGhpcy5vcmlnaW4pO3ZhciBkPWMuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gMD5kP2MuY29weSh0aGlzLm9yaWdpbik6Yy5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihkKS5hZGQodGhpcy5vcmlnaW4pfSwKZGlzdGFuY2VUb1BvaW50OmZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVNxVG9Qb2ludChhKSl9LGRpc3RhbmNlU3FUb1BvaW50OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEuc3ViVmVjdG9ycyhiLHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKDA+YylyZXR1cm4gdGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQoYik7YS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihjKS5hZGQodGhpcy5vcmlnaW4pO3JldHVybiBhLmRpc3RhbmNlVG9TcXVhcmVkKGIpfX0oKSxkaXN0YW5jZVNxVG9TZWdtZW50OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcCxjPW5ldyBwO3JldHVybiBmdW5jdGlvbihkLGUsZixnKXthLmNvcHkoZCkuYWRkKGUpLm11bHRpcGx5U2NhbGFyKC41KTtiLmNvcHkoZSkuc3ViKGQpLm5vcm1hbGl6ZSgpO2MuY29weSh0aGlzLm9yaWdpbikuc3ViKGEpOwp2YXIgaD0uNSpkLmRpc3RhbmNlVG8oZSksaz0tdGhpcy5kaXJlY3Rpb24uZG90KGIpLG09Yy5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LWMuZG90KGIpLHE9Yy5sZW5ndGhTcSgpLG49TWF0aC5hYnMoMS1rKmspLHI7MDxuPyhkPWsqbC1tLGU9ayptLWwscj1oKm4sMDw9ZD9lPj0tcj9lPD1yPyhoPTEvbixkKj1oLGUqPWgsaz1kKihkK2sqZSsyKm0pK2UqKGsqZCtlKzIqbCkrcSk6KGU9aCxkPU1hdGgubWF4KDAsLShrKmUrbSkpLGs9LWQqZCtlKihlKzIqbCkrcSk6KGU9LWgsZD1NYXRoLm1heCgwLC0oayplK20pKSxrPS1kKmQrZSooZSsyKmwpK3EpOmU8PS1yPyhkPU1hdGgubWF4KDAsLSgtaypoK20pKSxlPTA8ZD8taDpNYXRoLm1pbihNYXRoLm1heCgtaCwtbCksaCksaz0tZCpkK2UqKGUrMipsKStxKTplPD1yPyhkPTAsZT1NYXRoLm1pbihNYXRoLm1heCgtaCwtbCksaCksaz1lKihlKzIqbCkrcSk6KGQ9TWF0aC5tYXgoMCwtKGsqaCttKSksZT0wPGQ/aDpNYXRoLm1pbihNYXRoLm1heCgtaCwKLWwpLGgpLGs9LWQqZCtlKihlKzIqbCkrcSkpOihlPTA8az8taDpoLGQ9TWF0aC5tYXgoMCwtKGsqZSttKSksaz0tZCpkK2UqKGUrMipsKStxKTtmJiZmLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGQpLmFkZCh0aGlzLm9yaWdpbik7ZyYmZy5jb3B5KGIpLm11bHRpcGx5U2NhbGFyKGUpLmFkZChhKTtyZXR1cm4ga319KCksaW50ZXJzZWN0U3BoZXJlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7YS5zdWJWZWN0b3JzKGIuY2VudGVyLHRoaXMub3JpZ2luKTt2YXIgZD1hLmRvdCh0aGlzLmRpcmVjdGlvbiksZT1hLmRvdChhKS1kKmQsZj1iLnJhZGl1cypiLnJhZGl1cztpZihlPmYpcmV0dXJuIG51bGw7Zj1NYXRoLnNxcnQoZi1lKTtlPWQtZjtkKz1mO3JldHVybiAwPmUmJjA+ZD9udWxsOjA+ZT90aGlzLmF0KGQsYyk6dGhpcy5hdChlLGMpfX0oKSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludChhLmNlbnRlcik8PQphLnJhZGl1c30sZGlzdGFuY2VUb1BsYW5lOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbik7aWYoMD09PWIpcmV0dXJuIDA9PT1hLmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik/MDpudWxsO2E9LSh0aGlzLm9yaWdpbi5kb3QoYS5ub3JtYWwpK2EuY29uc3RhbnQpL2I7cmV0dXJuIDA8PWE/YTpudWxsfSxpbnRlcnNlY3RQbGFuZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZGlzdGFuY2VUb1BsYW5lKGEpO3JldHVybiBudWxsPT09Yz9udWxsOnRoaXMuYXQoYyxiKX0saW50ZXJzZWN0c1BsYW5lOmZ1bmN0aW9uKGEpe3ZhciBiPWEuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTtyZXR1cm4gMD09PWJ8fDA+YS5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKSpiPyEwOiExfSxpbnRlcnNlY3RCb3g6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnO2Q9MS90aGlzLmRpcmVjdGlvbi54O2Y9MS90aGlzLmRpcmVjdGlvbi55O2c9MS90aGlzLmRpcmVjdGlvbi56Owp2YXIgaD10aGlzLm9yaWdpbjswPD1kPyhjPShhLm1pbi54LWgueCkqZCxkKj1hLm1heC54LWgueCk6KGM9KGEubWF4LngtaC54KSpkLGQqPWEubWluLngtaC54KTswPD1mPyhlPShhLm1pbi55LWgueSkqZixmKj1hLm1heC55LWgueSk6KGU9KGEubWF4LnktaC55KSpmLGYqPWEubWluLnktaC55KTtpZihjPmZ8fGU+ZClyZXR1cm4gbnVsbDtpZihlPmN8fGMhPT1jKWM9ZTtpZihmPGR8fGQhPT1kKWQ9ZjswPD1nPyhlPShhLm1pbi56LWgueikqZyxnKj1hLm1heC56LWgueik6KGU9KGEubWF4LnotaC56KSpnLGcqPWEubWluLnotaC56KTtpZihjPmd8fGU+ZClyZXR1cm4gbnVsbDtpZihlPmN8fGMhPT1jKWM9ZTtpZihnPGR8fGQhPT1kKWQ9ZztyZXR1cm4gMD5kP251bGw6dGhpcy5hdCgwPD1jP2M6ZCxiKX0saW50ZXJzZWN0c0JveDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gbnVsbCE9PXRoaXMuaW50ZXJzZWN0Qm94KGIsYSl9fSgpLGludGVyc2VjdFRyaWFuZ2xlOmZ1bmN0aW9uKCl7dmFyIGE9Cm5ldyBwLGI9bmV3IHAsYz1uZXcgcCxkPW5ldyBwO3JldHVybiBmdW5jdGlvbihlLGYsZyxoLGspe2Iuc3ViVmVjdG9ycyhmLGUpO2Muc3ViVmVjdG9ycyhnLGUpO2QuY3Jvc3NWZWN0b3JzKGIsYyk7Zj10aGlzLmRpcmVjdGlvbi5kb3QoZCk7aWYoMDxmKXtpZihoKXJldHVybiBudWxsO2g9MX1lbHNlIGlmKDA+ZiloPS0xLGY9LWY7ZWxzZSByZXR1cm4gbnVsbDthLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sZSk7ZT1oKnRoaXMuZGlyZWN0aW9uLmRvdChjLmNyb3NzVmVjdG9ycyhhLGMpKTtpZigwPmUpcmV0dXJuIG51bGw7Zz1oKnRoaXMuZGlyZWN0aW9uLmRvdChiLmNyb3NzKGEpKTtpZigwPmd8fGUrZz5mKXJldHVybiBudWxsO2U9LWgqYS5kb3QoZCk7cmV0dXJuIDA+ZT9udWxsOnRoaXMuYXQoZS9mLGspfX0oKSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24oYSl7dGhpcy5kaXJlY3Rpb24uYWRkKHRoaXMub3JpZ2luKS5hcHBseU1hdHJpeDQoYSk7dGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KGEpOwp0aGlzLmRpcmVjdGlvbi5zdWIodGhpcy5vcmlnaW4pO3RoaXMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEub3JpZ2luLmVxdWFscyh0aGlzLm9yaWdpbikmJmEuZGlyZWN0aW9uLmVxdWFscyh0aGlzLmRpcmVjdGlvbil9fSk7YmIuUm90YXRpb25PcmRlcnM9IlhZWiBZWlggWlhZIFhaWSBZWFogWllYIi5zcGxpdCgiICIpO2JiLkRlZmF1bHRPcmRlcj0iWFlaIjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhiYi5wcm90b3R5cGUse3g6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feD1hO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpfX0seTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihhKXt0aGlzLl95PWE7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9fSx6OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fen0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3o9CmE7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9fSxvcmRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yZGVyfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5fb3JkZXI9YTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKX19fSk7T2JqZWN0LmFzc2lnbihiYi5wcm90b3R5cGUse2lzRXVsZXI6ITAsc2V0OmZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuX3g9YTt0aGlzLl95PWI7dGhpcy5fej1jO3RoaXMuX29yZGVyPWR8fHRoaXMuX29yZGVyO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5feD1hLl94O3RoaXMuX3k9YS5feTt0aGlzLl96PWEuX3o7dGhpcy5fb3JkZXI9YS5fb3JkZXI7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7cmV0dXJuIHRoaXN9LHNldEZyb21Sb3RhdGlvbk1hdHJpeDpmdW5jdGlvbihhLApiLGMpe3ZhciBkPVkuY2xhbXAsZT1hLmVsZW1lbnRzO2E9ZVswXTt2YXIgZj1lWzRdLGc9ZVs4XSxoPWVbMV0saz1lWzVdLG09ZVs5XSxsPWVbMl0scT1lWzZdLGU9ZVsxMF07Yj1ifHx0aGlzLl9vcmRlcjsiWFlaIj09PWI/KHRoaXMuX3k9TWF0aC5hc2luKGQoZywtMSwxKSksLjk5OTk5Pk1hdGguYWJzKGcpPyh0aGlzLl94PU1hdGguYXRhbjIoLW0sZSksdGhpcy5fej1NYXRoLmF0YW4yKC1mLGEpKToodGhpcy5feD1NYXRoLmF0YW4yKHEsayksdGhpcy5fej0wKSk6IllYWiI9PT1iPyh0aGlzLl94PU1hdGguYXNpbigtZChtLC0xLDEpKSwuOTk5OTk+TWF0aC5hYnMobSk/KHRoaXMuX3k9TWF0aC5hdGFuMihnLGUpLHRoaXMuX3o9TWF0aC5hdGFuMihoLGspKToodGhpcy5feT1NYXRoLmF0YW4yKC1sLGEpLHRoaXMuX3o9MCkpOiJaWFkiPT09Yj8odGhpcy5feD1NYXRoLmFzaW4oZChxLC0xLDEpKSwuOTk5OTk+TWF0aC5hYnMocSk/KHRoaXMuX3k9TWF0aC5hdGFuMigtbCxlKSx0aGlzLl96PQpNYXRoLmF0YW4yKC1mLGspKToodGhpcy5feT0wLHRoaXMuX3o9TWF0aC5hdGFuMihoLGEpKSk6IlpZWCI9PT1iPyh0aGlzLl95PU1hdGguYXNpbigtZChsLC0xLDEpKSwuOTk5OTk+TWF0aC5hYnMobCk/KHRoaXMuX3g9TWF0aC5hdGFuMihxLGUpLHRoaXMuX3o9TWF0aC5hdGFuMihoLGEpKToodGhpcy5feD0wLHRoaXMuX3o9TWF0aC5hdGFuMigtZixrKSkpOiJZWlgiPT09Yj8odGhpcy5fej1NYXRoLmFzaW4oZChoLC0xLDEpKSwuOTk5OTk+TWF0aC5hYnMoaCk/KHRoaXMuX3g9TWF0aC5hdGFuMigtbSxrKSx0aGlzLl95PU1hdGguYXRhbjIoLWwsYSkpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKGcsZSkpKToiWFpZIj09PWI/KHRoaXMuX3o9TWF0aC5hc2luKC1kKGYsLTEsMSkpLC45OTk5OT5NYXRoLmFicyhmKT8odGhpcy5feD1NYXRoLmF0YW4yKHEsayksdGhpcy5feT1NYXRoLmF0YW4yKGcsYSkpOih0aGlzLl94PU1hdGguYXRhbjIoLW0sZSksdGhpcy5feT0wKSk6Y29uc29sZS53YXJuKCJUSFJFRS5FdWxlcjogLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGdpdmVuIHVuc3VwcG9ydGVkIG9yZGVyOiAiKwpiKTt0aGlzLl9vcmRlcj1iO2lmKCExIT09Yyl0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sc2V0RnJvbVF1YXRlcm5pb246ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYixjLGQpe2EubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oYik7cmV0dXJuIHRoaXMuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGEsYyxkKX19KCksc2V0RnJvbVZlY3RvcjM6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5zZXQoYS54LGEueSxhLnosYnx8dGhpcy5fb3JkZXIpfSxyZW9yZGVyOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHFhO3JldHVybiBmdW5jdGlvbihiKXthLnNldEZyb21FdWxlcih0aGlzKTtyZXR1cm4gdGhpcy5zZXRGcm9tUXVhdGVybmlvbihhLGIpfX0oKSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX3g9PT10aGlzLl94JiZhLl95PT09dGhpcy5feSYmYS5fej09PXRoaXMuX3omJmEuX29yZGVyPT09dGhpcy5fb3JkZXJ9LGZyb21BcnJheTpmdW5jdGlvbihhKXt0aGlzLl94PQphWzBdO3RoaXMuX3k9YVsxXTt0aGlzLl96PWFbMl07dm9pZCAwIT09YVszXSYmKHRoaXMuX29yZGVyPWFbM10pO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YSYmKGE9W10pO3ZvaWQgMD09PWImJihiPTApO2FbYl09dGhpcy5feDthW2IrMV09dGhpcy5feTthW2IrMl09dGhpcy5fejthW2IrM109dGhpcy5fb3JkZXI7cmV0dXJuIGF9LHRvVmVjdG9yMzpmdW5jdGlvbihhKXtyZXR1cm4gYT9hLnNldCh0aGlzLl94LHRoaXMuX3ksdGhpcy5feik6bmV3IHAodGhpcy5feCx0aGlzLl95LHRoaXMuX3opfSxvbkNoYW5nZTpmdW5jdGlvbihhKXt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2s9YTtyZXR1cm4gdGhpc30sb25DaGFuZ2VDYWxsYmFjazpmdW5jdGlvbigpe319KTtPYmplY3QuYXNzaWduKFJkLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGEpe3RoaXMubWFzaz0xPDxhfDB9LGVuYWJsZTpmdW5jdGlvbihhKXt0aGlzLm1hc2s9CnRoaXMubWFza3wxPDxhfDB9LHRvZ2dsZTpmdW5jdGlvbihhKXt0aGlzLm1hc2tePTE8PGF8MH0sZGlzYWJsZTpmdW5jdGlvbihhKXt0aGlzLm1hc2smPX4oMTw8YXwwKX0sdGVzdDpmdW5jdGlvbihhKXtyZXR1cm4gMCE9PSh0aGlzLm1hc2smYS5tYXNrKX19KTt2YXIgTGY9MDtCLkRlZmF1bHRVcD1uZXcgcCgwLDEsMCk7Qi5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZT0hMDtPYmplY3QuYXNzaWduKEIucHJvdG90eXBlLHNhLnByb3RvdHlwZSx7aXNPYmplY3QzRDohMCxhcHBseU1hdHJpeDpmdW5jdGlvbihhKXt0aGlzLm1hdHJpeC5tdWx0aXBseU1hdHJpY2VzKGEsdGhpcy5tYXRyaXgpO3RoaXMubWF0cml4LmRlY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKX0sc2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlOmZ1bmN0aW9uKGEsYil7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoYSxiKX0sc2V0Um90YXRpb25Gcm9tRXVsZXI6ZnVuY3Rpb24oYSl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21FdWxlcihhLAohMCl9LHNldFJvdGF0aW9uRnJvbU1hdHJpeDpmdW5jdGlvbihhKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KGEpfSxzZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKGEpe3RoaXMucXVhdGVybmlvbi5jb3B5KGEpfSxyb3RhdGVPbkF4aXM6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcWE7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7YS5zZXRGcm9tQXhpc0FuZ2xlKGIsYyk7dGhpcy5xdWF0ZXJuaW9uLm11bHRpcGx5KGEpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVYOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAoMSwwLDApO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoYSxiKX19KCkscm90YXRlWTpmdW5jdGlvbigpe3ZhciBhPW5ldyBwKDAsMSwwKTtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKGEsYil9fSgpLHJvdGF0ZVo6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCgwLDAsMSk7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhhLApiKX19KCksdHJhbnNsYXRlT25BeGlzOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7YS5jb3B5KGIpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pO3RoaXMucG9zaXRpb24uYWRkKGEubXVsdGlwbHlTY2FsYXIoYykpO3JldHVybiB0aGlzfX0oKSx0cmFuc2xhdGVYOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAoMSwwLDApO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoYSxiKX19KCksdHJhbnNsYXRlWTpmdW5jdGlvbigpe3ZhciBhPW5ldyBwKDAsMSwwKTtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKGEsYil9fSgpLHRyYW5zbGF0ZVo6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCgwLDAsMSk7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhhLGIpfX0oKSxsb2NhbFRvV29ybGQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpfSwKd29ybGRUb0xvY2FsOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBiLmFwcGx5TWF0cml4NChhLmdldEludmVyc2UodGhpcy5tYXRyaXhXb3JsZCkpfX0oKSxsb29rQXQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYil7dGhpcy5pc0NhbWVyYT9hLmxvb2tBdCh0aGlzLnBvc2l0aW9uLGIsdGhpcy51cCk6YS5sb29rQXQoYix0aGlzLnBvc2l0aW9uLHRoaXMudXApO3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoYSl9fSgpLGFkZDpmdW5jdGlvbihhKXtpZigxPGFyZ3VtZW50cy5sZW5ndGgpe2Zvcih2YXIgYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspdGhpcy5hZGQoYXJndW1lbnRzW2JdKTtyZXR1cm4gdGhpc31pZihhPT09dGhpcylyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3QgY2FuJ3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBvZiBpdHNlbGYuIixhKSx0aGlzOwphJiZhLmlzT2JqZWN0M0Q/KG51bGwhPT1hLnBhcmVudCYmYS5wYXJlbnQucmVtb3ZlKGEpLGEucGFyZW50PXRoaXMsYS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJhZGRlZCJ9KSx0aGlzLmNoaWxkcmVuLnB1c2goYSkpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5PYmplY3QzRC4iLGEpO3JldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oYSl7aWYoMTxhcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW2JdKTtiPXRoaXMuY2hpbGRyZW4uaW5kZXhPZihhKTstMSE9PWImJihhLnBhcmVudD1udWxsLGEuZGlzcGF0Y2hFdmVudCh7dHlwZToicmVtb3ZlZCJ9KSx0aGlzLmNoaWxkcmVuLnNwbGljZShiLDEpKX0sZ2V0T2JqZWN0QnlJZDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJpZCIsYSl9LGdldE9iamVjdEJ5TmFtZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJuYW1lIiwKYSl9LGdldE9iamVjdEJ5UHJvcGVydHk6ZnVuY3Rpb24oYSxiKXtpZih0aGlzW2FdPT09YilyZXR1cm4gdGhpcztmb3IodmFyIGM9MCxkPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2M8ZDtjKyspe3ZhciBlPXRoaXMuY2hpbGRyZW5bY10uZ2V0T2JqZWN0QnlQcm9wZXJ0eShhLGIpO2lmKHZvaWQgMCE9PWUpcmV0dXJuIGV9fSxnZXRXb3JsZFBvc2l0aW9uOmZ1bmN0aW9uKGEpe2E9YXx8bmV3IHA7dGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCk7cmV0dXJuIGEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpfSxnZXRXb3JsZFF1YXRlcm5pb246ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwO3JldHVybiBmdW5jdGlvbihjKXtjPWN8fG5ldyBxYTt0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTt0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShhLGMsYik7cmV0dXJuIGN9fSgpLGdldFdvcmxkUm90YXRpb246ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcWE7cmV0dXJuIGZ1bmN0aW9uKGIpe2I9CmJ8fG5ldyBiYjt0aGlzLmdldFdvcmxkUXVhdGVybmlvbihhKTtyZXR1cm4gYi5zZXRGcm9tUXVhdGVybmlvbihhLHRoaXMucm90YXRpb24ub3JkZXIsITEpfX0oKSxnZXRXb3JsZFNjYWxlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcWE7cmV0dXJuIGZ1bmN0aW9uKGMpe2M9Y3x8bmV3IHA7dGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCk7dGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoYSxiLGMpO3JldHVybiBjfX0oKSxnZXRXb3JsZERpcmVjdGlvbjpmdW5jdGlvbigpe3ZhciBhPW5ldyBxYTtyZXR1cm4gZnVuY3Rpb24oYil7Yj1ifHxuZXcgcDt0aGlzLmdldFdvcmxkUXVhdGVybmlvbihhKTtyZXR1cm4gYi5zZXQoMCwwLDEpLmFwcGx5UXVhdGVybmlvbihhKX19KCkscmF5Y2FzdDpmdW5jdGlvbigpe30sdHJhdmVyc2U6ZnVuY3Rpb24oYSl7YSh0aGlzKTtmb3IodmFyIGI9dGhpcy5jaGlsZHJlbixjPTAsZD1iLmxlbmd0aDtjPGQ7YysrKWJbY10udHJhdmVyc2UoYSl9LAp0cmF2ZXJzZVZpc2libGU6ZnVuY3Rpb24oYSl7aWYoITEhPT10aGlzLnZpc2libGUpe2EodGhpcyk7Zm9yKHZhciBiPXRoaXMuY2hpbGRyZW4sYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrKyliW2NdLnRyYXZlcnNlVmlzaWJsZShhKX19LHRyYXZlcnNlQW5jZXN0b3JzOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucGFyZW50O251bGwhPT1iJiYoYShiKSxiLnRyYXZlcnNlQW5jZXN0b3JzKGEpKX0sdXBkYXRlTWF0cml4OmZ1bmN0aW9uKCl7dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKTt0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9LHVwZGF0ZU1hdHJpeFdvcmxkOmZ1bmN0aW9uKGEpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKTtpZih0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGV8fGEpbnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLAp0aGlzLm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLGE9ITA7Zm9yKHZhciBiPXRoaXMuY2hpbGRyZW4sYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrKyliW2NdLnVwZGF0ZU1hdHJpeFdvcmxkKGEpfSx0b0pTT046ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiLGMpe3ZvaWQgMD09PWJbYy51dWlkXSYmKGJbYy51dWlkXT1jLnRvSlNPTihhKSk7cmV0dXJuIGMudXVpZH1mdW5jdGlvbiBjKGEpe3ZhciBiPVtdLGM7Zm9yKGMgaW4gYSl7dmFyIGQ9YVtjXTtkZWxldGUgZC5tZXRhZGF0YTtiLnB1c2goZCl9cmV0dXJuIGJ9dmFyIGQ9dm9pZCAwPT09YXx8IiI9PT1hLGU9e307ZCYmKGE9e2dlb21ldHJpZXM6e30sbWF0ZXJpYWxzOnt9LHRleHR1cmVzOnt9LGltYWdlczp7fX0sZS5tZXRhZGF0YT17dmVyc2lvbjo0LjUsdHlwZToiT2JqZWN0IixnZW5lcmF0b3I6Ik9iamVjdDNELnRvSlNPTiJ9KTt2YXIgZj17fTtmLnV1aWQ9dGhpcy51dWlkO2YudHlwZT10aGlzLnR5cGU7IiIhPT0KdGhpcy5uYW1lJiYoZi5uYW1lPXRoaXMubmFtZSk7Int9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYoZi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKTshMD09PXRoaXMuY2FzdFNoYWRvdyYmKGYuY2FzdFNoYWRvdz0hMCk7ITA9PT10aGlzLnJlY2VpdmVTaGFkb3cmJihmLnJlY2VpdmVTaGFkb3c9ITApOyExPT09dGhpcy52aXNpYmxlJiYoZi52aXNpYmxlPSExKTtmLm1hdHJpeD10aGlzLm1hdHJpeC50b0FycmF5KCk7dm9pZCAwIT09dGhpcy5nZW9tZXRyeSYmKGYuZ2VvbWV0cnk9YihhLmdlb21ldHJpZXMsdGhpcy5nZW9tZXRyeSkpO2lmKHZvaWQgMCE9PXRoaXMubWF0ZXJpYWwpaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7Zm9yKHZhciBnPVtdLGg9MCxrPXRoaXMubWF0ZXJpYWwubGVuZ3RoO2g8aztoKyspZy5wdXNoKGIoYS5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbFtoXSkpO2YubWF0ZXJpYWw9Z31lbHNlIGYubWF0ZXJpYWw9YihhLm1hdGVyaWFscywKdGhpcy5tYXRlcmlhbCk7aWYoMDx0aGlzLmNoaWxkcmVuLmxlbmd0aClmb3IoZi5jaGlsZHJlbj1bXSxoPTA7aDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtoKyspZi5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5baF0udG9KU09OKGEpLm9iamVjdCk7ZCYmKGQ9YyhhLmdlb21ldHJpZXMpLGc9YyhhLm1hdGVyaWFscyksaD1jKGEudGV4dHVyZXMpLGs9YyhhLmltYWdlcyksMDxkLmxlbmd0aCYmKGUuZ2VvbWV0cmllcz1kKSwwPGcubGVuZ3RoJiYoZS5tYXRlcmlhbHM9ZyksMDxoLmxlbmd0aCYmKGUudGV4dHVyZXM9aCksMDxrLmxlbmd0aCYmKGUuaW1hZ2VzPWspKTtlLm9iamVjdD1mO3JldHVybiBlfSxjbG9uZTpmdW5jdGlvbihhKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyxhKX0sY29weTpmdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPSEwKTt0aGlzLm5hbWU9YS5uYW1lO3RoaXMudXAuY29weShhLnVwKTt0aGlzLnBvc2l0aW9uLmNvcHkoYS5wb3NpdGlvbik7CnRoaXMucXVhdGVybmlvbi5jb3B5KGEucXVhdGVybmlvbik7dGhpcy5zY2FsZS5jb3B5KGEuc2NhbGUpO3RoaXMubWF0cml4LmNvcHkoYS5tYXRyaXgpO3RoaXMubWF0cml4V29ybGQuY29weShhLm1hdHJpeFdvcmxkKTt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9YS5tYXRyaXhBdXRvVXBkYXRlO3RoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT1hLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU7dGhpcy5sYXllcnMubWFzaz1hLmxheWVycy5tYXNrO3RoaXMudmlzaWJsZT1hLnZpc2libGU7dGhpcy5jYXN0U2hhZG93PWEuY2FzdFNoYWRvdzt0aGlzLnJlY2VpdmVTaGFkb3c9YS5yZWNlaXZlU2hhZG93O3RoaXMuZnJ1c3R1bUN1bGxlZD1hLmZydXN0dW1DdWxsZWQ7dGhpcy5yZW5kZXJPcmRlcj1hLnJlbmRlck9yZGVyO3RoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhLnVzZXJEYXRhKSk7aWYoITA9PT1iKWZvcih2YXIgYz0wO2M8YS5jaGlsZHJlbi5sZW5ndGg7YysrKXRoaXMuYWRkKGEuY2hpbGRyZW5bY10uY2xvbmUoKSk7CnJldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oSGIucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLnN0YXJ0LmNvcHkoYSk7dGhpcy5lbmQuY29weShiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5zdGFydC5jb3B5KGEuc3RhcnQpO3RoaXMuZW5kLmNvcHkoYS5lbmQpO3JldHVybiB0aGlzfSxnZXRDZW50ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fG5ldyBwKS5hZGRWZWN0b3JzKHRoaXMuc3RhcnQsdGhpcy5lbmQpLm11bHRpcGx5U2NhbGFyKC41KX0sZGVsdGE6ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fG5ldyBwKS5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpfSxkaXN0YW5jZVNxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5lbmQpfSxkaXN0YW5jZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG8odGhpcy5lbmQpfSwKYXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1ifHxuZXcgcDtyZXR1cm4gdGhpcy5kZWx0YShjKS5tdWx0aXBseVNjYWxhcihhKS5hZGQodGhpcy5zdGFydCl9LGNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXI6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwO3JldHVybiBmdW5jdGlvbihjLGQpe2Euc3ViVmVjdG9ycyhjLHRoaXMuc3RhcnQpO2Iuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KTt2YXIgZT1iLmRvdChiKSxlPWIuZG90KGEpL2U7ZCYmKGU9WS5jbGFtcChlLDAsMSkpO3JldHVybiBlfX0oKSxjbG9zZXN0UG9pbnRUb1BvaW50OmZ1bmN0aW9uKGEsYixjKXthPXRoaXMuY2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlcihhLGIpO2M9Y3x8bmV3IHA7cmV0dXJuIHRoaXMuZGVsdGEoYykubXVsdGlwbHlTY2FsYXIoYSkuYWRkKHRoaXMuc3RhcnQpfSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24oYSl7dGhpcy5zdGFydC5hcHBseU1hdHJpeDQoYSk7dGhpcy5lbmQuYXBwbHlNYXRyaXg0KGEpOwpyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSYmYS5lbmQuZXF1YWxzKHRoaXMuZW5kKX19KTtPYmplY3QuYXNzaWduKFVhLHtub3JtYWw6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYixjLGQsZSl7ZT1lfHxuZXcgcDtlLnN1YlZlY3RvcnMoZCxjKTthLnN1YlZlY3RvcnMoYixjKTtlLmNyb3NzKGEpO2I9ZS5sZW5ndGhTcSgpO3JldHVybiAwPGI/ZS5tdWx0aXBseVNjYWxhcigxL01hdGguc3FydChiKSk6ZS5zZXQoMCwwLDApfX0oKSxiYXJ5Y29vcmRGcm9tUG9pbnQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwLGM9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGQsZSxmLGcsaCl7YS5zdWJWZWN0b3JzKGcsZSk7Yi5zdWJWZWN0b3JzKGYsZSk7Yy5zdWJWZWN0b3JzKGQsZSk7ZD1hLmRvdChhKTtlPWEuZG90KGIpO2Y9YS5kb3QoYyk7dmFyIGs9Yi5kb3QoYik7Zz1iLmRvdChjKTt2YXIgbT0KZCprLWUqZTtoPWh8fG5ldyBwO2lmKDA9PT1tKXJldHVybiBoLnNldCgtMiwtMSwtMSk7bT0xL207az0oaypmLWUqZykqbTtkPShkKmctZSpmKSptO3JldHVybiBoLnNldCgxLWstZCxkLGspfX0oKSxjb250YWluc1BvaW50OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGIsYyxkLGUpe2I9VWEuYmFyeWNvb3JkRnJvbVBvaW50KGIsYyxkLGUsYSk7cmV0dXJuIDA8PWIueCYmMDw9Yi55JiYxPj1iLngrYi55fX0oKX0pO09iamVjdC5hc3NpZ24oVWEucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuYS5jb3B5KGEpO3RoaXMuYi5jb3B5KGIpO3RoaXMuYy5jb3B5KGMpO3JldHVybiB0aGlzfSxzZXRGcm9tUG9pbnRzQW5kSW5kaWNlczpmdW5jdGlvbihhLGIsYyxkKXt0aGlzLmEuY29weShhW2JdKTt0aGlzLmIuY29weShhW2NdKTt0aGlzLmMuY29weShhW2RdKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LApjb3B5OmZ1bmN0aW9uKGEpe3RoaXMuYS5jb3B5KGEuYSk7dGhpcy5iLmNvcHkoYS5iKTt0aGlzLmMuY29weShhLmMpO3JldHVybiB0aGlzfSxhcmVhOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oKXthLnN1YlZlY3RvcnModGhpcy5jLHRoaXMuYik7Yi5zdWJWZWN0b3JzKHRoaXMuYSx0aGlzLmIpO3JldHVybi41KmEuY3Jvc3MoYikubGVuZ3RoKCl9fSgpLG1pZHBvaW50OmZ1bmN0aW9uKGEpe3JldHVybihhfHxuZXcgcCkuYWRkVmVjdG9ycyh0aGlzLmEsdGhpcy5iKS5hZGQodGhpcy5jKS5tdWx0aXBseVNjYWxhcigxLzMpfSxub3JtYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIFVhLm5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyxhKX0scGxhbmU6ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fG5ldyB3YSkuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX0sYmFyeWNvb3JkRnJvbVBvaW50OmZ1bmN0aW9uKGEsYil7cmV0dXJuIFVhLmJhcnljb29yZEZyb21Qb2ludChhLAp0aGlzLmEsdGhpcy5iLHRoaXMuYyxiKX0sY29udGFpbnNQb2ludDpmdW5jdGlvbihhKXtyZXR1cm4gVWEuY29udGFpbnNQb2ludChhLHRoaXMuYSx0aGlzLmIsdGhpcy5jKX0sY2xvc2VzdFBvaW50VG9Qb2ludDpmdW5jdGlvbigpe3ZhciBhPW5ldyB3YSxiPVtuZXcgSGIsbmV3IEhiLG5ldyBIYl0sYz1uZXcgcCxkPW5ldyBwO3JldHVybiBmdW5jdGlvbihlLGYpe3ZhciBnPWZ8fG5ldyBwLGg9SW5maW5pdHk7YS5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpO2EucHJvamVjdFBvaW50KGUsYyk7aWYoITA9PT10aGlzLmNvbnRhaW5zUG9pbnQoYykpZy5jb3B5KGMpO2Vsc2V7YlswXS5zZXQodGhpcy5hLHRoaXMuYik7YlsxXS5zZXQodGhpcy5iLHRoaXMuYyk7YlsyXS5zZXQodGhpcy5jLHRoaXMuYSk7Zm9yKHZhciBrPTA7azxiLmxlbmd0aDtrKyspe2Jba10uY2xvc2VzdFBvaW50VG9Qb2ludChjLCEwLGQpO3ZhciBtPWMuZGlzdGFuY2VUb1NxdWFyZWQoZCk7Cm08aCYmKGg9bSxnLmNvcHkoZCkpfX1yZXR1cm4gZ319KCksZXF1YWxzOmZ1bmN0aW9uKGEpe3JldHVybiBhLmEuZXF1YWxzKHRoaXMuYSkmJmEuYi5lcXVhbHModGhpcy5iKSYmYS5jLmVxdWFscyh0aGlzLmMpfX0pO09iamVjdC5hc3NpZ24oVmEucHJvdG90eXBlLHtjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihhKXt0aGlzLmE9YS5hO3RoaXMuYj1hLmI7dGhpcy5jPWEuYzt0aGlzLm5vcm1hbC5jb3B5KGEubm9ybWFsKTt0aGlzLmNvbG9yLmNvcHkoYS5jb2xvcik7dGhpcy5tYXRlcmlhbEluZGV4PWEubWF0ZXJpYWxJbmRleDtmb3IodmFyIGI9MCxjPWEudmVydGV4Tm9ybWFscy5sZW5ndGg7YjxjO2IrKyl0aGlzLnZlcnRleE5vcm1hbHNbYl09YS52ZXJ0ZXhOb3JtYWxzW2JdLmNsb25lKCk7Yj0wO2ZvcihjPWEudmVydGV4Q29sb3JzLmxlbmd0aDtiPGM7YisrKXRoaXMudmVydGV4Q29sb3JzW2JdPQphLnZlcnRleENvbG9yc1tiXS5jbG9uZSgpO3JldHVybiB0aGlzfX0pO05hLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTtOYS5wcm90b3R5cGUuY29uc3RydWN0b3I9TmE7TmEucHJvdG90eXBlLmlzTWVzaEJhc2ljTWF0ZXJpYWw9ITA7TmEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5jb2xvci5jb3B5KGEuY29sb3IpO3RoaXMubWFwPWEubWFwO3RoaXMubGlnaHRNYXA9YS5saWdodE1hcDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PWEubGlnaHRNYXBJbnRlbnNpdHk7dGhpcy5hb01hcD1hLmFvTWFwO3RoaXMuYW9NYXBJbnRlbnNpdHk9YS5hb01hcEludGVuc2l0eTt0aGlzLnNwZWN1bGFyTWFwPWEuc3BlY3VsYXJNYXA7dGhpcy5hbHBoYU1hcD1hLmFscGhhTWFwO3RoaXMuZW52TWFwPWEuZW52TWFwO3RoaXMuY29tYmluZT1hLmNvbWJpbmU7dGhpcy5yZWZsZWN0aXZpdHk9YS5yZWZsZWN0aXZpdHk7CnRoaXMucmVmcmFjdGlvblJhdGlvPWEucmVmcmFjdGlvblJhdGlvO3RoaXMud2lyZWZyYW1lPWEud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWEud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMud2lyZWZyYW1lTGluZWNhcD1hLndpcmVmcmFtZUxpbmVjYXA7dGhpcy53aXJlZnJhbWVMaW5lam9pbj1hLndpcmVmcmFtZUxpbmVqb2luO3RoaXMuc2tpbm5pbmc9YS5za2lubmluZzt0aGlzLm1vcnBoVGFyZ2V0cz1hLm1vcnBoVGFyZ2V0cztyZXR1cm4gdGhpc307T2JqZWN0LmRlZmluZVByb3BlcnR5KEwucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbihhKXshMD09PWEmJnRoaXMudmVyc2lvbisrfX0pO09iamVjdC5hc3NpZ24oTC5wcm90b3R5cGUse2lzQnVmZmVyQXR0cmlidXRlOiEwLHNldEFycmF5OmZ1bmN0aW9uKGEpe2lmKEFycmF5LmlzQXJyYXkoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4iKTsKdGhpcy5jb3VudD12b2lkIDAhPT1hP2EubGVuZ3RoL3RoaXMuaXRlbVNpemU6MDt0aGlzLmFycmF5PWF9LHNldER5bmFtaWM6ZnVuY3Rpb24oYSl7dGhpcy5keW5hbWljPWE7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5hcnJheT1uZXcgYS5hcnJheS5jb25zdHJ1Y3RvcihhLmFycmF5KTt0aGlzLml0ZW1TaXplPWEuaXRlbVNpemU7dGhpcy5jb3VudD1hLmNvdW50O3RoaXMubm9ybWFsaXplZD1hLm5vcm1hbGl6ZWQ7dGhpcy5keW5hbWljPWEuZHluYW1pYztyZXR1cm4gdGhpc30sY29weUF0OmZ1bmN0aW9uKGEsYixjKXthKj10aGlzLml0ZW1TaXplO2MqPWIuaXRlbVNpemU7Zm9yKHZhciBkPTAsZT10aGlzLml0ZW1TaXplO2Q8ZTtkKyspdGhpcy5hcnJheVthK2RdPWIuYXJyYXlbYytkXTtyZXR1cm4gdGhpc30sY29weUFycmF5OmZ1bmN0aW9uKGEpe3RoaXMuYXJyYXkuc2V0KGEpO3JldHVybiB0aGlzfSxjb3B5Q29sb3JzQXJyYXk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPQp0aGlzLmFycmF5LGM9MCxkPTAsZT1hLmxlbmd0aDtkPGU7ZCsrKXt2YXIgZj1hW2RdO3ZvaWQgMD09PWYmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5Q29sb3JzQXJyYXkoKTogY29sb3IgaXMgdW5kZWZpbmVkIixkKSxmPW5ldyBIKTtiW2MrK109Zi5yO2JbYysrXT1mLmc7YltjKytdPWYuYn1yZXR1cm4gdGhpc30sY29weUluZGljZXNBcnJheTpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5hcnJheSxjPTAsZD0wLGU9YS5sZW5ndGg7ZDxlO2QrKyl7dmFyIGY9YVtkXTtiW2MrK109Zi5hO2JbYysrXT1mLmI7YltjKytdPWYuY31yZXR1cm4gdGhpc30sY29weVZlY3RvcjJzQXJyYXk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuYXJyYXksYz0wLGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspe3ZhciBmPWFbZF07dm9pZCAwPT09ZiYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Iyc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLApkKSxmPW5ldyBEKTtiW2MrK109Zi54O2JbYysrXT1mLnl9cmV0dXJuIHRoaXN9LGNvcHlWZWN0b3Izc0FycmF5OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLmFycmF5LGM9MCxkPTAsZT1hLmxlbmd0aDtkPGU7ZCsrKXt2YXIgZj1hW2RdO3ZvaWQgMD09PWYmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yM3NBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkIixkKSxmPW5ldyBwKTtiW2MrK109Zi54O2JbYysrXT1mLnk7YltjKytdPWYuen1yZXR1cm4gdGhpc30sY29weVZlY3RvcjRzQXJyYXk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuYXJyYXksYz0wLGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspe3ZhciBmPWFbZF07dm9pZCAwPT09ZiYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3I0c0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGQpLGY9bmV3IGdhKTtiW2MrK109Zi54O2JbYysrXT1mLnk7CmJbYysrXT1mLno7YltjKytdPWYud31yZXR1cm4gdGhpc30sc2V0OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9MCk7dGhpcy5hcnJheS5zZXQoYSxiKTtyZXR1cm4gdGhpc30sZ2V0WDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hcnJheVthKnRoaXMuaXRlbVNpemVdfSxzZXRYOmZ1bmN0aW9uKGEsYil7dGhpcy5hcnJheVthKnRoaXMuaXRlbVNpemVdPWI7cmV0dXJuIHRoaXN9LGdldFk6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYXJyYXlbYSp0aGlzLml0ZW1TaXplKzFdfSxzZXRZOmZ1bmN0aW9uKGEsYil7dGhpcy5hcnJheVthKnRoaXMuaXRlbVNpemUrMV09YjtyZXR1cm4gdGhpc30sZ2V0WjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hcnJheVthKnRoaXMuaXRlbVNpemUrMl19LHNldFo6ZnVuY3Rpb24oYSxiKXt0aGlzLmFycmF5W2EqdGhpcy5pdGVtU2l6ZSsyXT1iO3JldHVybiB0aGlzfSxnZXRXOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFycmF5W2EqdGhpcy5pdGVtU2l6ZSsKM119LHNldFc6ZnVuY3Rpb24oYSxiKXt0aGlzLmFycmF5W2EqdGhpcy5pdGVtU2l6ZSszXT1iO3JldHVybiB0aGlzfSxzZXRYWTpmdW5jdGlvbihhLGIsYyl7YSo9dGhpcy5pdGVtU2l6ZTt0aGlzLmFycmF5W2ErMF09Yjt0aGlzLmFycmF5W2ErMV09YztyZXR1cm4gdGhpc30sc2V0WFlaOmZ1bmN0aW9uKGEsYixjLGQpe2EqPXRoaXMuaXRlbVNpemU7dGhpcy5hcnJheVthKzBdPWI7dGhpcy5hcnJheVthKzFdPWM7dGhpcy5hcnJheVthKzJdPWQ7cmV0dXJuIHRoaXN9LHNldFhZWlc6ZnVuY3Rpb24oYSxiLGMsZCxlKXthKj10aGlzLml0ZW1TaXplO3RoaXMuYXJyYXlbYSswXT1iO3RoaXMuYXJyYXlbYSsxXT1jO3RoaXMuYXJyYXlbYSsyXT1kO3RoaXMuYXJyYXlbYSszXT1lO3JldHVybiB0aGlzfSxvblVwbG9hZDpmdW5jdGlvbihhKXt0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9YTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5hcnJheSwKdGhpcy5pdGVtU2l6ZSkpLmNvcHkodGhpcyl9fSk7cmMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTC5wcm90b3R5cGUpO3JjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yYztzYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShMLnByb3RvdHlwZSk7c2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPXNjO3RjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEwucHJvdG90eXBlKTt0Yy5wcm90b3R5cGUuY29uc3RydWN0b3I9dGM7dWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTC5wcm90b3R5cGUpO3VjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj11YztpYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShMLnByb3RvdHlwZSk7aWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWliO3ZjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEwucHJvdG90eXBlKTt2Yy5wcm90b3R5cGUuY29uc3RydWN0b3I9dmM7amIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTC5wcm90b3R5cGUpO2piLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0KamI7Qy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShMLnByb3RvdHlwZSk7Qy5wcm90b3R5cGUuY29uc3RydWN0b3I9Qzt3Yy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShMLnByb3RvdHlwZSk7d2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPXdjO09iamVjdC5hc3NpZ24oS2UucHJvdG90eXBlLHtjb21wdXRlR3JvdXBzOmZ1bmN0aW9uKGEpe3ZhciBiLGM9W10sZD12b2lkIDA7YT1hLmZhY2VzO2Zvcih2YXIgZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgZj1hW2VdO2YubWF0ZXJpYWxJbmRleCE9PWQmJihkPWYubWF0ZXJpYWxJbmRleCx2b2lkIDAhPT1iJiYoYi5jb3VudD0zKmUtYi5zdGFydCxjLnB1c2goYikpLGI9e3N0YXJ0OjMqZSxtYXRlcmlhbEluZGV4OmR9KX12b2lkIDAhPT1iJiYoYi5jb3VudD0zKmUtYi5zdGFydCxjLnB1c2goYikpO3RoaXMuZ3JvdXBzPWN9LGZyb21HZW9tZXRyeTpmdW5jdGlvbihhKXt2YXIgYj1hLmZhY2VzLGM9YS52ZXJ0aWNlcyxkPWEuZmFjZVZlcnRleFV2cywKZT1kWzBdJiYwPGRbMF0ubGVuZ3RoLGY9ZFsxXSYmMDxkWzFdLmxlbmd0aCxnPWEubW9ycGhUYXJnZXRzLGg9Zy5sZW5ndGgsaztpZigwPGgpe2s9W107Zm9yKHZhciBtPTA7bTxoO20rKylrW21dPVtdO3RoaXMubW9ycGhUYXJnZXRzLnBvc2l0aW9uPWt9dmFyIGw9YS5tb3JwaE5vcm1hbHMscT1sLmxlbmd0aCxuO2lmKDA8cSl7bj1bXTtmb3IobT0wO208cTttKyspblttXT1bXTt0aGlzLm1vcnBoVGFyZ2V0cy5ub3JtYWw9bn1mb3IodmFyIHI9YS5za2luSW5kaWNlcyxwPWEuc2tpbldlaWdodHMsdD1yLmxlbmd0aD09PWMubGVuZ3RoLHk9cC5sZW5ndGg9PT1jLmxlbmd0aCxtPTA7bTxiLmxlbmd0aDttKyspe3ZhciB4PWJbbV07dGhpcy52ZXJ0aWNlcy5wdXNoKGNbeC5hXSxjW3guYl0sY1t4LmNdKTt2YXIgdj14LnZlcnRleE5vcm1hbHM7Mz09PXYubGVuZ3RoP3RoaXMubm9ybWFscy5wdXNoKHZbMF0sdlsxXSx2WzJdKToodj14Lm5vcm1hbCx0aGlzLm5vcm1hbHMucHVzaCh2LHYsCnYpKTt2PXgudmVydGV4Q29sb3JzOzM9PT12Lmxlbmd0aD90aGlzLmNvbG9ycy5wdXNoKHZbMF0sdlsxXSx2WzJdKToodj14LmNvbG9yLHRoaXMuY29sb3JzLnB1c2godix2LHYpKTshMD09PWUmJih2PWRbMF1bbV0sdm9pZCAwIT09dj90aGlzLnV2cy5wdXNoKHZbMF0sdlsxXSx2WzJdKTooY29uc29sZS53YXJuKCJUSFJFRS5EaXJlY3RHZW9tZXRyeS5mcm9tR2VvbWV0cnkoKTogVW5kZWZpbmVkIHZlcnRleFV2ICIsbSksdGhpcy51dnMucHVzaChuZXcgRCxuZXcgRCxuZXcgRCkpKTshMD09PWYmJih2PWRbMV1bbV0sdm9pZCAwIT09dj90aGlzLnV2czIucHVzaCh2WzBdLHZbMV0sdlsyXSk6KGNvbnNvbGUud2FybigiVEhSRUUuRGlyZWN0R2VvbWV0cnkuZnJvbUdlb21ldHJ5KCk6IFVuZGVmaW5lZCB2ZXJ0ZXhVdjIgIixtKSx0aGlzLnV2czIucHVzaChuZXcgRCxuZXcgRCxuZXcgRCkpKTtmb3Iodj0wO3Y8aDt2Kyspe3ZhciBHPWdbdl0udmVydGljZXM7a1t2XS5wdXNoKEdbeC5hXSwKR1t4LmJdLEdbeC5jXSl9Zm9yKHY9MDt2PHE7disrKUc9bFt2XS52ZXJ0ZXhOb3JtYWxzW21dLG5bdl0ucHVzaChHLmEsRy5iLEcuYyk7dCYmdGhpcy5za2luSW5kaWNlcy5wdXNoKHJbeC5hXSxyW3guYl0sclt4LmNdKTt5JiZ0aGlzLnNraW5XZWlnaHRzLnB1c2gocFt4LmFdLHBbeC5iXSxwW3guY10pfXRoaXMuY29tcHV0ZUdyb3VwcyhhKTt0aGlzLnZlcnRpY2VzTmVlZFVwZGF0ZT1hLnZlcnRpY2VzTmVlZFVwZGF0ZTt0aGlzLm5vcm1hbHNOZWVkVXBkYXRlPWEubm9ybWFsc05lZWRVcGRhdGU7dGhpcy5jb2xvcnNOZWVkVXBkYXRlPWEuY29sb3JzTmVlZFVwZGF0ZTt0aGlzLnV2c05lZWRVcGRhdGU9YS51dnNOZWVkVXBkYXRlO3RoaXMuZ3JvdXBzTmVlZFVwZGF0ZT1hLmdyb3Vwc05lZWRVcGRhdGU7cmV0dXJuIHRoaXN9fSk7dmFyIFRkPTA7T2JqZWN0LmFzc2lnbihNLnByb3RvdHlwZSxzYS5wcm90b3R5cGUse2lzR2VvbWV0cnk6ITAsYXBwbHlNYXRyaXg6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPQoobmV3IEthKS5nZXROb3JtYWxNYXRyaXgoYSksYz0wLGQ9dGhpcy52ZXJ0aWNlcy5sZW5ndGg7YzxkO2MrKyl0aGlzLnZlcnRpY2VzW2NdLmFwcGx5TWF0cml4NChhKTtjPTA7Zm9yKGQ9dGhpcy5mYWNlcy5sZW5ndGg7YzxkO2MrKyl7YT10aGlzLmZhY2VzW2NdO2Eubm9ybWFsLmFwcGx5TWF0cml4MyhiKS5ub3JtYWxpemUoKTtmb3IodmFyIGU9MCxmPWEudmVydGV4Tm9ybWFscy5sZW5ndGg7ZTxmO2UrKylhLnZlcnRleE5vcm1hbHNbZV0uYXBwbHlNYXRyaXgzKGIpLm5vcm1hbGl6ZSgpfW51bGwhPT10aGlzLmJvdW5kaW5nQm94JiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO251bGwhPT10aGlzLmJvdW5kaW5nU3BoZXJlJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO3RoaXMubm9ybWFsc05lZWRVcGRhdGU9dGhpcy52ZXJ0aWNlc05lZWRVcGRhdGU9ITA7cmV0dXJuIHRoaXN9LHJvdGF0ZVg6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYil7YS5tYWtlUm90YXRpb25YKGIpOwp0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVZOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe2EubWFrZVJvdGF0aW9uWShiKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVaOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe2EubWFrZVJvdGF0aW9uWihiKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSx0cmFuc2xhdGU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYixjLGQpe2EubWFrZVRyYW5zbGF0aW9uKGIsYyxkKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxzY2FsZTpmdW5jdGlvbigpe3ZhciBhPW5ldyBKO3JldHVybiBmdW5jdGlvbihiLGMsZCl7YS5tYWtlU2NhbGUoYixjLGQpO3RoaXMuYXBwbHlNYXRyaXgoYSk7cmV0dXJuIHRoaXN9fSgpLGxvb2tBdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBCO3JldHVybiBmdW5jdGlvbihiKXthLmxvb2tBdChiKTsKYS51cGRhdGVNYXRyaXgoKTt0aGlzLmFwcGx5TWF0cml4KGEubWF0cml4KX19KCksZnJvbUJ1ZmZlckdlb21ldHJ5OmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiLGQsZSl7dmFyIGY9dm9pZCAwIT09Zz9bbFthXS5jbG9uZSgpLGxbYl0uY2xvbmUoKSxsW2RdLmNsb25lKCldOltdLHI9dm9pZCAwIT09aD9bYy5jb2xvcnNbYV0uY2xvbmUoKSxjLmNvbG9yc1tiXS5jbG9uZSgpLGMuY29sb3JzW2RdLmNsb25lKCldOltdO2U9bmV3IFZhKGEsYixkLGYscixlKTtjLmZhY2VzLnB1c2goZSk7dm9pZCAwIT09ayYmYy5mYWNlVmVydGV4VXZzWzBdLnB1c2goW3FbYV0uY2xvbmUoKSxxW2JdLmNsb25lKCkscVtkXS5jbG9uZSgpXSk7dm9pZCAwIT09bSYmYy5mYWNlVmVydGV4VXZzWzFdLnB1c2goW25bYV0uY2xvbmUoKSxuW2JdLmNsb25lKCksbltkXS5jbG9uZSgpXSl9dmFyIGM9dGhpcyxkPW51bGwhPT1hLmluZGV4P2EuaW5kZXguYXJyYXk6dm9pZCAwLGU9YS5hdHRyaWJ1dGVzLGY9ZS5wb3NpdGlvbi5hcnJheSwKZz12b2lkIDAhPT1lLm5vcm1hbD9lLm5vcm1hbC5hcnJheTp2b2lkIDAsaD12b2lkIDAhPT1lLmNvbG9yP2UuY29sb3IuYXJyYXk6dm9pZCAwLGs9dm9pZCAwIT09ZS51dj9lLnV2LmFycmF5OnZvaWQgMCxtPXZvaWQgMCE9PWUudXYyP2UudXYyLmFycmF5OnZvaWQgMDt2b2lkIDAhPT1tJiYodGhpcy5mYWNlVmVydGV4VXZzWzFdPVtdKTtmb3IodmFyIGw9W10scT1bXSxuPVtdLHI9ZT0wO2U8Zi5sZW5ndGg7ZSs9MyxyKz0yKWMudmVydGljZXMucHVzaChuZXcgcChmW2VdLGZbZSsxXSxmW2UrMl0pKSx2b2lkIDAhPT1nJiZsLnB1c2gobmV3IHAoZ1tlXSxnW2UrMV0sZ1tlKzJdKSksdm9pZCAwIT09aCYmYy5jb2xvcnMucHVzaChuZXcgSChoW2VdLGhbZSsxXSxoW2UrMl0pKSx2b2lkIDAhPT1rJiZxLnB1c2gobmV3IEQoa1tyXSxrW3IrMV0pKSx2b2lkIDAhPT1tJiZuLnB1c2gobmV3IEQobVtyXSxtW3IrMV0pKTt2YXIgej1hLmdyb3VwcztpZigwPHoubGVuZ3RoKWZvcihlPTA7ZTx6Lmxlbmd0aDtlKyspZm9yKHZhciBmPQp6W2VdLHQ9Zi5zdGFydCx5PWYuY291bnQscj10LHQ9dCt5O3I8dDtyKz0zKXZvaWQgMCE9PWQ/YihkW3JdLGRbcisxXSxkW3IrMl0sZi5tYXRlcmlhbEluZGV4KTpiKHIscisxLHIrMixmLm1hdGVyaWFsSW5kZXgpO2Vsc2UgaWYodm9pZCAwIT09ZClmb3IoZT0wO2U8ZC5sZW5ndGg7ZSs9MyliKGRbZV0sZFtlKzFdLGRbZSsyXSk7ZWxzZSBmb3IoZT0wO2U8Zi5sZW5ndGgvMztlKz0zKWIoZSxlKzEsZSsyKTt0aGlzLmNvbXB1dGVGYWNlTm9ybWFscygpO251bGwhPT1hLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1hLmJvdW5kaW5nQm94LmNsb25lKCkpO251bGwhPT1hLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1hLmJvdW5kaW5nU3BoZXJlLmNsb25lKCkpO3JldHVybiB0aGlzfSxjZW50ZXI6ZnVuY3Rpb24oKXt0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO3ZhciBhPXRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKCkubmVnYXRlKCk7dGhpcy50cmFuc2xhdGUoYS54LAphLnksYS56KTtyZXR1cm4gYX0sbm9ybWFsaXplOmZ1bmN0aW9uKCl7dGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTt2YXIgYT10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcixiPXRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzLGI9MD09PWI/MToxL2IsYz1uZXcgSjtjLnNldChiLDAsMCwtYiphLngsMCxiLDAsLWIqYS55LDAsMCxiLC1iKmEueiwwLDAsMCwxKTt0aGlzLmFwcGx5TWF0cml4KGMpO3JldHVybiB0aGlzfSxjb21wdXRlRmFjZU5vcm1hbHM6ZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IHAsYj1uZXcgcCxjPTAsZD10aGlzLmZhY2VzLmxlbmd0aDtjPGQ7YysrKXt2YXIgZT10aGlzLmZhY2VzW2NdLGY9dGhpcy52ZXJ0aWNlc1tlLmFdLGc9dGhpcy52ZXJ0aWNlc1tlLmJdO2Euc3ViVmVjdG9ycyh0aGlzLnZlcnRpY2VzW2UuY10sZyk7Yi5zdWJWZWN0b3JzKGYsZyk7YS5jcm9zcyhiKTthLm5vcm1hbGl6ZSgpO2Uubm9ybWFsLmNvcHkoYSl9fSxjb21wdXRlVmVydGV4Tm9ybWFsczpmdW5jdGlvbihhKXt2b2lkIDA9PT0KYSYmKGE9ITApO3ZhciBiLGMsZDtkPUFycmF5KHRoaXMudmVydGljZXMubGVuZ3RoKTtiPTA7Zm9yKGM9dGhpcy52ZXJ0aWNlcy5sZW5ndGg7YjxjO2IrKylkW2JdPW5ldyBwO2lmKGEpe3ZhciBlLGYsZyxoPW5ldyBwLGs9bmV3IHA7YT0wO2ZvcihiPXRoaXMuZmFjZXMubGVuZ3RoO2E8YjthKyspYz10aGlzLmZhY2VzW2FdLGU9dGhpcy52ZXJ0aWNlc1tjLmFdLGY9dGhpcy52ZXJ0aWNlc1tjLmJdLGc9dGhpcy52ZXJ0aWNlc1tjLmNdLGguc3ViVmVjdG9ycyhnLGYpLGsuc3ViVmVjdG9ycyhlLGYpLGguY3Jvc3MoayksZFtjLmFdLmFkZChoKSxkW2MuYl0uYWRkKGgpLGRbYy5jXS5hZGQoaCl9ZWxzZSBmb3IodGhpcy5jb21wdXRlRmFjZU5vcm1hbHMoKSxhPTAsYj10aGlzLmZhY2VzLmxlbmd0aDthPGI7YSsrKWM9dGhpcy5mYWNlc1thXSxkW2MuYV0uYWRkKGMubm9ybWFsKSxkW2MuYl0uYWRkKGMubm9ybWFsKSxkW2MuY10uYWRkKGMubm9ybWFsKTtiPTA7Zm9yKGM9dGhpcy52ZXJ0aWNlcy5sZW5ndGg7YjwKYztiKyspZFtiXS5ub3JtYWxpemUoKTthPTA7Zm9yKGI9dGhpcy5mYWNlcy5sZW5ndGg7YTxiO2ErKyljPXRoaXMuZmFjZXNbYV0sZT1jLnZlcnRleE5vcm1hbHMsMz09PWUubGVuZ3RoPyhlWzBdLmNvcHkoZFtjLmFdKSxlWzFdLmNvcHkoZFtjLmJdKSxlWzJdLmNvcHkoZFtjLmNdKSk6KGVbMF09ZFtjLmFdLmNsb25lKCksZVsxXT1kW2MuYl0uY2xvbmUoKSxlWzJdPWRbYy5jXS5jbG9uZSgpKTswPHRoaXMuZmFjZXMubGVuZ3RoJiYodGhpcy5ub3JtYWxzTmVlZFVwZGF0ZT0hMCl9LGNvbXB1dGVGbGF0VmVydGV4Tm9ybWFsczpmdW5jdGlvbigpe3ZhciBhLGIsYzt0aGlzLmNvbXB1dGVGYWNlTm9ybWFscygpO2E9MDtmb3IoYj10aGlzLmZhY2VzLmxlbmd0aDthPGI7YSsrKXtjPXRoaXMuZmFjZXNbYV07dmFyIGQ9Yy52ZXJ0ZXhOb3JtYWxzOzM9PT1kLmxlbmd0aD8oZFswXS5jb3B5KGMubm9ybWFsKSxkWzFdLmNvcHkoYy5ub3JtYWwpLGRbMl0uY29weShjLm5vcm1hbCkpOihkWzBdPQpjLm5vcm1hbC5jbG9uZSgpLGRbMV09Yy5ub3JtYWwuY2xvbmUoKSxkWzJdPWMubm9ybWFsLmNsb25lKCkpfTA8dGhpcy5mYWNlcy5sZW5ndGgmJih0aGlzLm5vcm1hbHNOZWVkVXBkYXRlPSEwKX0sY29tcHV0ZU1vcnBoTm9ybWFsczpmdW5jdGlvbigpe3ZhciBhLGIsYyxkLGU7Yz0wO2ZvcihkPXRoaXMuZmFjZXMubGVuZ3RoO2M8ZDtjKyspZm9yKGU9dGhpcy5mYWNlc1tjXSxlLl9fb3JpZ2luYWxGYWNlTm9ybWFsP2UuX19vcmlnaW5hbEZhY2VOb3JtYWwuY29weShlLm5vcm1hbCk6ZS5fX29yaWdpbmFsRmFjZU5vcm1hbD1lLm5vcm1hbC5jbG9uZSgpLGUuX19vcmlnaW5hbFZlcnRleE5vcm1hbHN8fChlLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzPVtdKSxhPTAsYj1lLnZlcnRleE5vcm1hbHMubGVuZ3RoO2E8YjthKyspZS5fX29yaWdpbmFsVmVydGV4Tm9ybWFsc1thXT9lLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzW2FdLmNvcHkoZS52ZXJ0ZXhOb3JtYWxzW2FdKTplLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzW2FdPQplLnZlcnRleE5vcm1hbHNbYV0uY2xvbmUoKTt2YXIgZj1uZXcgTTtmLmZhY2VzPXRoaXMuZmFjZXM7YT0wO2ZvcihiPXRoaXMubW9ycGhUYXJnZXRzLmxlbmd0aDthPGI7YSsrKXtpZighdGhpcy5tb3JwaE5vcm1hbHNbYV0pe3RoaXMubW9ycGhOb3JtYWxzW2FdPXt9O3RoaXMubW9ycGhOb3JtYWxzW2FdLmZhY2VOb3JtYWxzPVtdO3RoaXMubW9ycGhOb3JtYWxzW2FdLnZlcnRleE5vcm1hbHM9W107ZT10aGlzLm1vcnBoTm9ybWFsc1thXS5mYWNlTm9ybWFsczt2YXIgZz10aGlzLm1vcnBoTm9ybWFsc1thXS52ZXJ0ZXhOb3JtYWxzLGgsaztjPTA7Zm9yKGQ9dGhpcy5mYWNlcy5sZW5ndGg7YzxkO2MrKyloPW5ldyBwLGs9e2E6bmV3IHAsYjpuZXcgcCxjOm5ldyBwfSxlLnB1c2goaCksZy5wdXNoKGspfWc9dGhpcy5tb3JwaE5vcm1hbHNbYV07Zi52ZXJ0aWNlcz10aGlzLm1vcnBoVGFyZ2V0c1thXS52ZXJ0aWNlcztmLmNvbXB1dGVGYWNlTm9ybWFscygpO2YuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTsKYz0wO2ZvcihkPXRoaXMuZmFjZXMubGVuZ3RoO2M8ZDtjKyspZT10aGlzLmZhY2VzW2NdLGg9Zy5mYWNlTm9ybWFsc1tjXSxrPWcudmVydGV4Tm9ybWFsc1tjXSxoLmNvcHkoZS5ub3JtYWwpLGsuYS5jb3B5KGUudmVydGV4Tm9ybWFsc1swXSksay5iLmNvcHkoZS52ZXJ0ZXhOb3JtYWxzWzFdKSxrLmMuY29weShlLnZlcnRleE5vcm1hbHNbMl0pfWM9MDtmb3IoZD10aGlzLmZhY2VzLmxlbmd0aDtjPGQ7YysrKWU9dGhpcy5mYWNlc1tjXSxlLm5vcm1hbD1lLl9fb3JpZ2luYWxGYWNlTm9ybWFsLGUudmVydGV4Tm9ybWFscz1lLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzfSxjb21wdXRlTGluZURpc3RhbmNlczpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI9dGhpcy52ZXJ0aWNlcyxjPTAsZD1iLmxlbmd0aDtjPGQ7YysrKTA8YyYmKGErPWJbY10uZGlzdGFuY2VUbyhiW2MtMV0pKSx0aGlzLmxpbmVEaXN0YW5jZXNbY109YX0sY29tcHV0ZUJvdW5kaW5nQm94OmZ1bmN0aW9uKCl7bnVsbD09PQp0aGlzLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1uZXcgVGEpO3RoaXMuYm91bmRpbmdCb3guc2V0RnJvbVBvaW50cyh0aGlzLnZlcnRpY2VzKX0sY29tcHV0ZUJvdW5kaW5nU3BoZXJlOmZ1bmN0aW9uKCl7bnVsbD09PXRoaXMuYm91bmRpbmdTcGhlcmUmJih0aGlzLmJvdW5kaW5nU3BoZXJlPW5ldyBHYSk7dGhpcy5ib3VuZGluZ1NwaGVyZS5zZXRGcm9tUG9pbnRzKHRoaXMudmVydGljZXMpfSxtZXJnZTpmdW5jdGlvbihhLGIsYyl7aWYoITE9PT0oYSYmYS5pc0dlb21ldHJ5KSljb25zb2xlLmVycm9yKCJUSFJFRS5HZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuR2VvbWV0cnkuIixhKTtlbHNle3ZhciBkLGU9dGhpcy52ZXJ0aWNlcy5sZW5ndGgsZj10aGlzLnZlcnRpY2VzLGc9YS52ZXJ0aWNlcyxoPXRoaXMuZmFjZXMsaz1hLmZhY2VzLG09dGhpcy5mYWNlVmVydGV4VXZzWzBdLGw9YS5mYWNlVmVydGV4VXZzWzBdLHE9dGhpcy5jb2xvcnMsCm49YS5jb2xvcnM7dm9pZCAwPT09YyYmKGM9MCk7dm9pZCAwIT09YiYmKGQ9KG5ldyBLYSkuZ2V0Tm9ybWFsTWF0cml4KGIpKTthPTA7Zm9yKHZhciByPWcubGVuZ3RoO2E8cjthKyspe3ZhciBwPWdbYV0uY2xvbmUoKTt2b2lkIDAhPT1iJiZwLmFwcGx5TWF0cml4NChiKTtmLnB1c2gocCl9YT0wO2ZvcihyPW4ubGVuZ3RoO2E8cjthKyspcS5wdXNoKG5bYV0uY2xvbmUoKSk7YT0wO2ZvcihyPWsubGVuZ3RoO2E8cjthKyspe3ZhciBnPWtbYV0sdD1nLnZlcnRleE5vcm1hbHMsbj1nLnZlcnRleENvbG9ycyxxPW5ldyBWYShnLmErZSxnLmIrZSxnLmMrZSk7cS5ub3JtYWwuY29weShnLm5vcm1hbCk7dm9pZCAwIT09ZCYmcS5ub3JtYWwuYXBwbHlNYXRyaXgzKGQpLm5vcm1hbGl6ZSgpO2I9MDtmb3IoZj10Lmxlbmd0aDtiPGY7YisrKXA9dFtiXS5jbG9uZSgpLHZvaWQgMCE9PWQmJnAuYXBwbHlNYXRyaXgzKGQpLm5vcm1hbGl6ZSgpLHEudmVydGV4Tm9ybWFscy5wdXNoKHApO3EuY29sb3IuY29weShnLmNvbG9yKTsKYj0wO2ZvcihmPW4ubGVuZ3RoO2I8ZjtiKyspcD1uW2JdLHEudmVydGV4Q29sb3JzLnB1c2gocC5jbG9uZSgpKTtxLm1hdGVyaWFsSW5kZXg9Zy5tYXRlcmlhbEluZGV4K2M7aC5wdXNoKHEpfWE9MDtmb3Iocj1sLmxlbmd0aDthPHI7YSsrKWlmKGM9bFthXSxkPVtdLHZvaWQgMCE9PWMpe2I9MDtmb3IoZj1jLmxlbmd0aDtiPGY7YisrKWQucHVzaChjW2JdLmNsb25lKCkpO20ucHVzaChkKX19fSxtZXJnZU1lc2g6ZnVuY3Rpb24oYSl7ITE9PT0oYSYmYS5pc01lc2gpP2NvbnNvbGUuZXJyb3IoIlRIUkVFLkdlb21ldHJ5Lm1lcmdlTWVzaCgpOiBtZXNoIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5NZXNoLiIsYSk6KGEubWF0cml4QXV0b1VwZGF0ZSYmYS51cGRhdGVNYXRyaXgoKSx0aGlzLm1lcmdlKGEuZ2VvbWV0cnksYS5tYXRyaXgpKX0sbWVyZ2VWZXJ0aWNlczpmdW5jdGlvbigpe3ZhciBhPXt9LGI9W10sYz1bXSxkLGU9TWF0aC5wb3coMTAsNCksZixnO2Y9MDtmb3IoZz10aGlzLnZlcnRpY2VzLmxlbmd0aDtmPApnO2YrKylkPXRoaXMudmVydGljZXNbZl0sZD1NYXRoLnJvdW5kKGQueCplKSsiXyIrTWF0aC5yb3VuZChkLnkqZSkrIl8iK01hdGgucm91bmQoZC56KmUpLHZvaWQgMD09PWFbZF0/KGFbZF09ZixiLnB1c2godGhpcy52ZXJ0aWNlc1tmXSksY1tmXT1iLmxlbmd0aC0xKTpjW2ZdPWNbYVtkXV07YT1bXTtmPTA7Zm9yKGc9dGhpcy5mYWNlcy5sZW5ndGg7ZjxnO2YrKylmb3IoZT10aGlzLmZhY2VzW2ZdLGUuYT1jW2UuYV0sZS5iPWNbZS5iXSxlLmM9Y1tlLmNdLGU9W2UuYSxlLmIsZS5jXSxkPTA7Mz5kO2QrKylpZihlW2RdPT09ZVsoZCsxKSUzXSl7YS5wdXNoKGYpO2JyZWFrfWZvcihmPWEubGVuZ3RoLTE7MDw9ZjtmLS0pZm9yKGU9YVtmXSx0aGlzLmZhY2VzLnNwbGljZShlLDEpLGM9MCxnPXRoaXMuZmFjZVZlcnRleFV2cy5sZW5ndGg7YzxnO2MrKyl0aGlzLmZhY2VWZXJ0ZXhVdnNbY10uc3BsaWNlKGUsMSk7Zj10aGlzLnZlcnRpY2VzLmxlbmd0aC1iLmxlbmd0aDt0aGlzLnZlcnRpY2VzPQpiO3JldHVybiBmfSxzb3J0RmFjZXNCeU1hdGVyaWFsSW5kZXg6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5mYWNlcyxiPWEubGVuZ3RoLGM9MDtjPGI7YysrKWFbY10uX2lkPWM7YS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEubWF0ZXJpYWxJbmRleC1iLm1hdGVyaWFsSW5kZXh9KTt2YXIgZD10aGlzLmZhY2VWZXJ0ZXhVdnNbMF0sZT10aGlzLmZhY2VWZXJ0ZXhVdnNbMV0sZixnO2QmJmQubGVuZ3RoPT09YiYmKGY9W10pO2UmJmUubGVuZ3RoPT09YiYmKGc9W10pO2ZvcihjPTA7YzxiO2MrKyl7dmFyIGg9YVtjXS5faWQ7ZiYmZi5wdXNoKGRbaF0pO2cmJmcucHVzaChlW2hdKX1mJiYodGhpcy5mYWNlVmVydGV4VXZzWzBdPWYpO2cmJih0aGlzLmZhY2VWZXJ0ZXhVdnNbMV09Zyl9LHRvSlNPTjpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiLGMpe3JldHVybiBjP2F8MTw8YjphJn4oMTw8Yil9ZnVuY3Rpb24gYihhKXt2YXIgYj1hLngudG9TdHJpbmcoKSthLnkudG9TdHJpbmcoKSsKYS56LnRvU3RyaW5nKCk7aWYodm9pZCAwIT09bVtiXSlyZXR1cm4gbVtiXTttW2JdPWsubGVuZ3RoLzM7ay5wdXNoKGEueCxhLnksYS56KTtyZXR1cm4gbVtiXX1mdW5jdGlvbiBjKGEpe3ZhciBiPWEuci50b1N0cmluZygpK2EuZy50b1N0cmluZygpK2EuYi50b1N0cmluZygpO2lmKHZvaWQgMCE9PXFbYl0pcmV0dXJuIHFbYl07cVtiXT1sLmxlbmd0aDtsLnB1c2goYS5nZXRIZXgoKSk7cmV0dXJuIHFbYl19ZnVuY3Rpb24gZChhKXt2YXIgYj1hLngudG9TdHJpbmcoKSthLnkudG9TdHJpbmcoKTtpZih2b2lkIDAhPT1yW2JdKXJldHVybiByW2JdO3JbYl09bi5sZW5ndGgvMjtuLnB1c2goYS54LGEueSk7cmV0dXJuIHJbYl19dmFyIGU9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJHZW9tZXRyeSIsZ2VuZXJhdG9yOiJHZW9tZXRyeS50b0pTT04ifX07ZS51dWlkPXRoaXMudXVpZDtlLnR5cGU9dGhpcy50eXBlOyIiIT09dGhpcy5uYW1lJiYoZS5uYW1lPXRoaXMubmFtZSk7aWYodm9pZCAwIT09CnRoaXMucGFyYW1ldGVycyl7dmFyIGY9dGhpcy5wYXJhbWV0ZXJzLGc7Zm9yKGcgaW4gZil2b2lkIDAhPT1mW2ddJiYoZVtnXT1mW2ddKTtyZXR1cm4gZX1mPVtdO2ZvcihnPTA7Zzx0aGlzLnZlcnRpY2VzLmxlbmd0aDtnKyspe3ZhciBoPXRoaXMudmVydGljZXNbZ107Zi5wdXNoKGgueCxoLnksaC56KX12YXIgaD1bXSxrPVtdLG09e30sbD1bXSxxPXt9LG49W10scj17fTtmb3IoZz0wO2c8dGhpcy5mYWNlcy5sZW5ndGg7ZysrKXt2YXIgcD10aGlzLmZhY2VzW2ddLHQ9dm9pZCAwIT09dGhpcy5mYWNlVmVydGV4VXZzWzBdW2ddLHk9MDxwLm5vcm1hbC5sZW5ndGgoKSx4PTA8cC52ZXJ0ZXhOb3JtYWxzLmxlbmd0aCx2PTEhPT1wLmNvbG9yLnJ8fDEhPT1wLmNvbG9yLmd8fDEhPT1wLmNvbG9yLmIsRz0wPHAudmVydGV4Q29sb3JzLmxlbmd0aCx3PTAsdz1hKHcsMCwwKSx3PWEodywxLCEwKSx3PWEodywyLCExKSx3PWEodywzLHQpLHc9YSh3LDQseSksdz1hKHcsNSx4KSx3PWEodyw2LAp2KSx3PWEodyw3LEcpO2gucHVzaCh3KTtoLnB1c2gocC5hLHAuYixwLmMpO2gucHVzaChwLm1hdGVyaWFsSW5kZXgpO3QmJih0PXRoaXMuZmFjZVZlcnRleFV2c1swXVtnXSxoLnB1c2goZCh0WzBdKSxkKHRbMV0pLGQodFsyXSkpKTt5JiZoLnB1c2goYihwLm5vcm1hbCkpO3gmJih5PXAudmVydGV4Tm9ybWFscyxoLnB1c2goYih5WzBdKSxiKHlbMV0pLGIoeVsyXSkpKTt2JiZoLnB1c2goYyhwLmNvbG9yKSk7RyYmKHA9cC52ZXJ0ZXhDb2xvcnMsaC5wdXNoKGMocFswXSksYyhwWzFdKSxjKHBbMl0pKSl9ZS5kYXRhPXt9O2UuZGF0YS52ZXJ0aWNlcz1mO2UuZGF0YS5ub3JtYWxzPWs7MDxsLmxlbmd0aCYmKGUuZGF0YS5jb2xvcnM9bCk7MDxuLmxlbmd0aCYmKGUuZGF0YS51dnM9W25dKTtlLmRhdGEuZmFjZXM9aDtyZXR1cm4gZX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IE0pLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnO3RoaXMudmVydGljZXM9CltdO3RoaXMuY29sb3JzPVtdO3RoaXMuZmFjZXM9W107dGhpcy5mYWNlVmVydGV4VXZzPVtbXV07dGhpcy5tb3JwaFRhcmdldHM9W107dGhpcy5tb3JwaE5vcm1hbHM9W107dGhpcy5za2luV2VpZ2h0cz1bXTt0aGlzLnNraW5JbmRpY2VzPVtdO3RoaXMubGluZURpc3RhbmNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLm5hbWU9YS5uYW1lO2Q9YS52ZXJ0aWNlcztiPTA7Zm9yKGM9ZC5sZW5ndGg7YjxjO2IrKyl0aGlzLnZlcnRpY2VzLnB1c2goZFtiXS5jbG9uZSgpKTtkPWEuY29sb3JzO2I9MDtmb3IoYz1kLmxlbmd0aDtiPGM7YisrKXRoaXMuY29sb3JzLnB1c2goZFtiXS5jbG9uZSgpKTtkPWEuZmFjZXM7Yj0wO2ZvcihjPWQubGVuZ3RoO2I8YztiKyspdGhpcy5mYWNlcy5wdXNoKGRbYl0uY2xvbmUoKSk7Yj0wO2ZvcihjPWEuZmFjZVZlcnRleFV2cy5sZW5ndGg7YjxjO2IrKyl7dmFyIGg9YS5mYWNlVmVydGV4VXZzW2JdO3ZvaWQgMD09PQp0aGlzLmZhY2VWZXJ0ZXhVdnNbYl0mJih0aGlzLmZhY2VWZXJ0ZXhVdnNbYl09W10pO2Q9MDtmb3IoZT1oLmxlbmd0aDtkPGU7ZCsrKXt2YXIgaz1oW2RdLG09W107Zj0wO2ZvcihnPWsubGVuZ3RoO2Y8ZztmKyspbS5wdXNoKGtbZl0uY2xvbmUoKSk7dGhpcy5mYWNlVmVydGV4VXZzW2JdLnB1c2gobSl9fWY9YS5tb3JwaFRhcmdldHM7Yj0wO2ZvcihjPWYubGVuZ3RoO2I8YztiKyspe2c9e307Zy5uYW1lPWZbYl0ubmFtZTtpZih2b2lkIDAhPT1mW2JdLnZlcnRpY2VzKWZvcihnLnZlcnRpY2VzPVtdLGQ9MCxlPWZbYl0udmVydGljZXMubGVuZ3RoO2Q8ZTtkKyspZy52ZXJ0aWNlcy5wdXNoKGZbYl0udmVydGljZXNbZF0uY2xvbmUoKSk7aWYodm9pZCAwIT09ZltiXS5ub3JtYWxzKWZvcihnLm5vcm1hbHM9W10sZD0wLGU9ZltiXS5ub3JtYWxzLmxlbmd0aDtkPGU7ZCsrKWcubm9ybWFscy5wdXNoKGZbYl0ubm9ybWFsc1tkXS5jbG9uZSgpKTt0aGlzLm1vcnBoVGFyZ2V0cy5wdXNoKGcpfWY9CmEubW9ycGhOb3JtYWxzO2I9MDtmb3IoYz1mLmxlbmd0aDtiPGM7YisrKXtnPXt9O2lmKHZvaWQgMCE9PWZbYl0udmVydGV4Tm9ybWFscylmb3IoZy52ZXJ0ZXhOb3JtYWxzPVtdLGQ9MCxlPWZbYl0udmVydGV4Tm9ybWFscy5sZW5ndGg7ZDxlO2QrKyloPWZbYl0udmVydGV4Tm9ybWFsc1tkXSxrPXt9LGsuYT1oLmEuY2xvbmUoKSxrLmI9aC5iLmNsb25lKCksay5jPWguYy5jbG9uZSgpLGcudmVydGV4Tm9ybWFscy5wdXNoKGspO2lmKHZvaWQgMCE9PWZbYl0uZmFjZU5vcm1hbHMpZm9yKGcuZmFjZU5vcm1hbHM9W10sZD0wLGU9ZltiXS5mYWNlTm9ybWFscy5sZW5ndGg7ZDxlO2QrKylnLmZhY2VOb3JtYWxzLnB1c2goZltiXS5mYWNlTm9ybWFsc1tkXS5jbG9uZSgpKTt0aGlzLm1vcnBoTm9ybWFscy5wdXNoKGcpfWQ9YS5za2luV2VpZ2h0cztiPTA7Zm9yKGM9ZC5sZW5ndGg7YjxjO2IrKyl0aGlzLnNraW5XZWlnaHRzLnB1c2goZFtiXS5jbG9uZSgpKTtkPWEuc2tpbkluZGljZXM7Yj0KMDtmb3IoYz1kLmxlbmd0aDtiPGM7YisrKXRoaXMuc2tpbkluZGljZXMucHVzaChkW2JdLmNsb25lKCkpO2Q9YS5saW5lRGlzdGFuY2VzO2I9MDtmb3IoYz1kLmxlbmd0aDtiPGM7YisrKXRoaXMubGluZURpc3RhbmNlcy5wdXNoKGRbYl0pO2I9YS5ib3VuZGluZ0JveDtudWxsIT09YiYmKHRoaXMuYm91bmRpbmdCb3g9Yi5jbG9uZSgpKTtiPWEuYm91bmRpbmdTcGhlcmU7bnVsbCE9PWImJih0aGlzLmJvdW5kaW5nU3BoZXJlPWIuY2xvbmUoKSk7dGhpcy5lbGVtZW50c05lZWRVcGRhdGU9YS5lbGVtZW50c05lZWRVcGRhdGU7dGhpcy52ZXJ0aWNlc05lZWRVcGRhdGU9YS52ZXJ0aWNlc05lZWRVcGRhdGU7dGhpcy51dnNOZWVkVXBkYXRlPWEudXZzTmVlZFVwZGF0ZTt0aGlzLm5vcm1hbHNOZWVkVXBkYXRlPWEubm9ybWFsc05lZWRVcGRhdGU7dGhpcy5jb2xvcnNOZWVkVXBkYXRlPWEuY29sb3JzTmVlZFVwZGF0ZTt0aGlzLmxpbmVEaXN0YW5jZXNOZWVkVXBkYXRlPWEubGluZURpc3RhbmNlc05lZWRVcGRhdGU7CnRoaXMuZ3JvdXBzTmVlZFVwZGF0ZT1hLmdyb3Vwc05lZWRVcGRhdGU7cmV0dXJuIHRoaXN9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fSk7SS5NYXhJbmRleD02NTUzNTtPYmplY3QuYXNzaWduKEkucHJvdG90eXBlLHNhLnByb3RvdHlwZSx7aXNCdWZmZXJHZW9tZXRyeTohMCxnZXRJbmRleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZGV4fSxzZXRJbmRleDpmdW5jdGlvbihhKXtBcnJheS5pc0FycmF5KGEpP3RoaXMuaW5kZXg9bmV3ICg2NTUzNTxTZChhKT9qYjppYikoYSwxKTp0aGlzLmluZGV4PWF9LGFkZEF0dHJpYnV0ZTpmdW5jdGlvbihhLGIsYyl7aWYoITE9PT0oYiYmYi5pc0J1ZmZlckF0dHJpYnV0ZSkmJiExPT09KGImJmIuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSkpY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEF0dHJpYnV0ZSgpIG5vdyBleHBlY3RzICggbmFtZSwgYXR0cmlidXRlICkuIiksCnRoaXMuYWRkQXR0cmlidXRlKGEsbmV3IEwoYixjKSk7ZWxzZSBpZigiaW5kZXgiPT09YSljb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleChiKTtlbHNlIHJldHVybiB0aGlzLmF0dHJpYnV0ZXNbYV09Yix0aGlzfSxnZXRBdHRyaWJ1dGU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1thXX0scmVtb3ZlQXR0cmlidXRlOmZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbYV07cmV0dXJuIHRoaXN9LGFkZEdyb3VwOmZ1bmN0aW9uKGEsYixjKXt0aGlzLmdyb3Vwcy5wdXNoKHtzdGFydDphLGNvdW50OmIsbWF0ZXJpYWxJbmRleDp2b2lkIDAhPT1jP2M6MH0pfSxjbGVhckdyb3VwczpmdW5jdGlvbigpe3RoaXMuZ3JvdXBzPVtdfSxzZXREcmF3UmFuZ2U6ZnVuY3Rpb24oYSxiKXt0aGlzLmRyYXdSYW5nZS5zdGFydD1hO3RoaXMuZHJhd1JhbmdlLmNvdW50PQpifSxhcHBseU1hdHJpeDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247dm9pZCAwIT09YiYmKGEuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZShiKSxiLm5lZWRzVXBkYXRlPSEwKTtiPXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7dm9pZCAwIT09YiYmKChuZXcgS2EpLmdldE5vcm1hbE1hdHJpeChhKS5hcHBseVRvQnVmZmVyQXR0cmlidXRlKGIpLGIubmVlZHNVcGRhdGU9ITApO251bGwhPT10aGlzLmJvdW5kaW5nQm94JiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO251bGwhPT10aGlzLmJvdW5kaW5nU3BoZXJlJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO3JldHVybiB0aGlzfSxyb3RhdGVYOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe2EubWFrZVJvdGF0aW9uWChiKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVZOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIpe2EubWFrZVJvdGF0aW9uWShiKTsKdGhpcy5hcHBseU1hdHJpeChhKTtyZXR1cm4gdGhpc319KCkscm90YXRlWjpmdW5jdGlvbigpe3ZhciBhPW5ldyBKO3JldHVybiBmdW5jdGlvbihiKXthLm1ha2VSb3RhdGlvblooYik7dGhpcy5hcHBseU1hdHJpeChhKTtyZXR1cm4gdGhpc319KCksdHJhbnNsYXRlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEo7cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXthLm1ha2VUcmFuc2xhdGlvbihiLGMsZCk7dGhpcy5hcHBseU1hdHJpeChhKTtyZXR1cm4gdGhpc319KCksc2NhbGU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oYixjLGQpe2EubWFrZVNjYWxlKGIsYyxkKTt0aGlzLmFwcGx5TWF0cml4KGEpO3JldHVybiB0aGlzfX0oKSxsb29rQXQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgQjtyZXR1cm4gZnVuY3Rpb24oYil7YS5sb29rQXQoYik7YS51cGRhdGVNYXRyaXgoKTt0aGlzLmFwcGx5TWF0cml4KGEubWF0cml4KX19KCksY2VudGVyOmZ1bmN0aW9uKCl7dGhpcy5jb21wdXRlQm91bmRpbmdCb3goKTsKdmFyIGE9dGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIoKS5uZWdhdGUoKTt0aGlzLnRyYW5zbGF0ZShhLngsYS55LGEueik7cmV0dXJuIGF9LHNldEZyb21PYmplY3Q6ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZW9tZXRyeTtpZihhLmlzUG9pbnRzfHxhLmlzTGluZSl7YT1uZXcgQygzKmIudmVydGljZXMubGVuZ3RoLDMpO3ZhciBjPW5ldyBDKDMqYi5jb2xvcnMubGVuZ3RoLDMpO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsYS5jb3B5VmVjdG9yM3NBcnJheShiLnZlcnRpY2VzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoImNvbG9yIixjLmNvcHlDb2xvcnNBcnJheShiLmNvbG9ycykpO2IubGluZURpc3RhbmNlcyYmYi5saW5lRGlzdGFuY2VzLmxlbmd0aD09PWIudmVydGljZXMubGVuZ3RoJiYoYT1uZXcgQyhiLmxpbmVEaXN0YW5jZXMubGVuZ3RoLDEpLHRoaXMuYWRkQXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLGEuY29weUFycmF5KGIubGluZURpc3RhbmNlcykpKTtudWxsIT09Yi5ib3VuZGluZ1NwaGVyZSYmCih0aGlzLmJvdW5kaW5nU3BoZXJlPWIuYm91bmRpbmdTcGhlcmUuY2xvbmUoKSk7bnVsbCE9PWIuYm91bmRpbmdCb3gmJih0aGlzLmJvdW5kaW5nQm94PWIuYm91bmRpbmdCb3guY2xvbmUoKSl9ZWxzZSBhLmlzTWVzaCYmYiYmYi5pc0dlb21ldHJ5JiZ0aGlzLmZyb21HZW9tZXRyeShiKTtyZXR1cm4gdGhpc30sdXBkYXRlRnJvbU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYj1hLmdlb21ldHJ5O2lmKGEuaXNNZXNoKXt2YXIgYz1iLl9fZGlyZWN0R2VvbWV0cnk7ITA9PT1iLmVsZW1lbnRzTmVlZFVwZGF0ZSYmKGM9dm9pZCAwLGIuZWxlbWVudHNOZWVkVXBkYXRlPSExKTtpZih2b2lkIDA9PT1jKXJldHVybiB0aGlzLmZyb21HZW9tZXRyeShiKTtjLnZlcnRpY2VzTmVlZFVwZGF0ZT1iLnZlcnRpY2VzTmVlZFVwZGF0ZTtjLm5vcm1hbHNOZWVkVXBkYXRlPWIubm9ybWFsc05lZWRVcGRhdGU7Yy5jb2xvcnNOZWVkVXBkYXRlPWIuY29sb3JzTmVlZFVwZGF0ZTtjLnV2c05lZWRVcGRhdGU9Yi51dnNOZWVkVXBkYXRlOwpjLmdyb3Vwc05lZWRVcGRhdGU9Yi5ncm91cHNOZWVkVXBkYXRlO2IudmVydGljZXNOZWVkVXBkYXRlPSExO2Iubm9ybWFsc05lZWRVcGRhdGU9ITE7Yi5jb2xvcnNOZWVkVXBkYXRlPSExO2IudXZzTmVlZFVwZGF0ZT0hMTtiLmdyb3Vwc05lZWRVcGRhdGU9ITE7Yj1jfSEwPT09Yi52ZXJ0aWNlc05lZWRVcGRhdGUmJihjPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbix2b2lkIDAhPT1jJiYoYy5jb3B5VmVjdG9yM3NBcnJheShiLnZlcnRpY2VzKSxjLm5lZWRzVXBkYXRlPSEwKSxiLnZlcnRpY2VzTmVlZFVwZGF0ZT0hMSk7ITA9PT1iLm5vcm1hbHNOZWVkVXBkYXRlJiYoYz10aGlzLmF0dHJpYnV0ZXMubm9ybWFsLHZvaWQgMCE9PWMmJihjLmNvcHlWZWN0b3Izc0FycmF5KGIubm9ybWFscyksYy5uZWVkc1VwZGF0ZT0hMCksYi5ub3JtYWxzTmVlZFVwZGF0ZT0hMSk7ITA9PT1iLmNvbG9yc05lZWRVcGRhdGUmJihjPXRoaXMuYXR0cmlidXRlcy5jb2xvcix2b2lkIDAhPT1jJiYoYy5jb3B5Q29sb3JzQXJyYXkoYi5jb2xvcnMpLApjLm5lZWRzVXBkYXRlPSEwKSxiLmNvbG9yc05lZWRVcGRhdGU9ITEpO2IudXZzTmVlZFVwZGF0ZSYmKGM9dGhpcy5hdHRyaWJ1dGVzLnV2LHZvaWQgMCE9PWMmJihjLmNvcHlWZWN0b3Iyc0FycmF5KGIudXZzKSxjLm5lZWRzVXBkYXRlPSEwKSxiLnV2c05lZWRVcGRhdGU9ITEpO2IubGluZURpc3RhbmNlc05lZWRVcGRhdGUmJihjPXRoaXMuYXR0cmlidXRlcy5saW5lRGlzdGFuY2Usdm9pZCAwIT09YyYmKGMuY29weUFycmF5KGIubGluZURpc3RhbmNlcyksYy5uZWVkc1VwZGF0ZT0hMCksYi5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZT0hMSk7Yi5ncm91cHNOZWVkVXBkYXRlJiYoYi5jb21wdXRlR3JvdXBzKGEuZ2VvbWV0cnkpLHRoaXMuZ3JvdXBzPWIuZ3JvdXBzLGIuZ3JvdXBzTmVlZFVwZGF0ZT0hMSk7cmV0dXJuIHRoaXN9LGZyb21HZW9tZXRyeTpmdW5jdGlvbihhKXthLl9fZGlyZWN0R2VvbWV0cnk9KG5ldyBLZSkuZnJvbUdlb21ldHJ5KGEpO3JldHVybiB0aGlzLmZyb21EaXJlY3RHZW9tZXRyeShhLl9fZGlyZWN0R2VvbWV0cnkpfSwKZnJvbURpcmVjdEdlb21ldHJ5OmZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBGbG9hdDMyQXJyYXkoMyphLnZlcnRpY2VzLmxlbmd0aCk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIiwobmV3IEwoYiwzKSkuY29weVZlY3RvcjNzQXJyYXkoYS52ZXJ0aWNlcykpOzA8YS5ub3JtYWxzLmxlbmd0aCYmKGI9bmV3IEZsb2F0MzJBcnJheSgzKmEubm9ybWFscy5sZW5ndGgpLHRoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLChuZXcgTChiLDMpKS5jb3B5VmVjdG9yM3NBcnJheShhLm5vcm1hbHMpKSk7MDxhLmNvbG9ycy5sZW5ndGgmJihiPW5ldyBGbG9hdDMyQXJyYXkoMyphLmNvbG9ycy5sZW5ndGgpLHRoaXMuYWRkQXR0cmlidXRlKCJjb2xvciIsKG5ldyBMKGIsMykpLmNvcHlDb2xvcnNBcnJheShhLmNvbG9ycykpKTswPGEudXZzLmxlbmd0aCYmKGI9bmV3IEZsb2F0MzJBcnJheSgyKmEudXZzLmxlbmd0aCksdGhpcy5hZGRBdHRyaWJ1dGUoInV2IiwobmV3IEwoYiwyKSkuY29weVZlY3RvcjJzQXJyYXkoYS51dnMpKSk7CjA8YS51dnMyLmxlbmd0aCYmKGI9bmV3IEZsb2F0MzJBcnJheSgyKmEudXZzMi5sZW5ndGgpLHRoaXMuYWRkQXR0cmlidXRlKCJ1djIiLChuZXcgTChiLDIpKS5jb3B5VmVjdG9yMnNBcnJheShhLnV2czIpKSk7MDxhLmluZGljZXMubGVuZ3RoJiYoYj1uZXcgKDY1NTM1PFNkKGEuaW5kaWNlcyk/VWludDMyQXJyYXk6VWludDE2QXJyYXkpKDMqYS5pbmRpY2VzLmxlbmd0aCksdGhpcy5zZXRJbmRleCgobmV3IEwoYiwxKSkuY29weUluZGljZXNBcnJheShhLmluZGljZXMpKSk7dGhpcy5ncm91cHM9YS5ncm91cHM7Zm9yKHZhciBjIGluIGEubW9ycGhUYXJnZXRzKXtmb3IodmFyIGI9W10sZD1hLm1vcnBoVGFyZ2V0c1tjXSxlPTAsZj1kLmxlbmd0aDtlPGY7ZSsrKXt2YXIgZz1kW2VdLGg9bmV3IEMoMypnLmxlbmd0aCwzKTtiLnB1c2goaC5jb3B5VmVjdG9yM3NBcnJheShnKSl9dGhpcy5tb3JwaEF0dHJpYnV0ZXNbY109Yn0wPGEuc2tpbkluZGljZXMubGVuZ3RoJiYoYz1uZXcgQyg0KgphLnNraW5JbmRpY2VzLmxlbmd0aCw0KSx0aGlzLmFkZEF0dHJpYnV0ZSgic2tpbkluZGV4IixjLmNvcHlWZWN0b3I0c0FycmF5KGEuc2tpbkluZGljZXMpKSk7MDxhLnNraW5XZWlnaHRzLmxlbmd0aCYmKGM9bmV3IEMoNCphLnNraW5XZWlnaHRzLmxlbmd0aCw0KSx0aGlzLmFkZEF0dHJpYnV0ZSgic2tpbldlaWdodCIsYy5jb3B5VmVjdG9yNHNBcnJheShhLnNraW5XZWlnaHRzKSkpO251bGwhPT1hLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1hLmJvdW5kaW5nU3BoZXJlLmNsb25lKCkpO251bGwhPT1hLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1hLmJvdW5kaW5nQm94LmNsb25lKCkpO3JldHVybiB0aGlzfSxjb21wdXRlQm91bmRpbmdCb3g6ZnVuY3Rpb24oKXtudWxsPT09dGhpcy5ib3VuZGluZ0JveCYmKHRoaXMuYm91bmRpbmdCb3g9bmV3IFRhKTt2YXIgYT10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247dm9pZCAwIT09YT90aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoYSk6CnRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7KGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLngpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3g6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfSxjb21wdXRlQm91bmRpbmdTcGhlcmU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgVGEsYj1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oKXtudWxsPT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bmV3IEdhKTt2YXIgYz10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoYyl7dmFyIGQ9dGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXI7YS5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKGMpOwphLmdldENlbnRlcihkKTtmb3IodmFyIGU9MCxmPTAsZz1jLmNvdW50O2Y8ZztmKyspYi54PWMuZ2V0WChmKSxiLnk9Yy5nZXRZKGYpLGIuej1jLmdldFooZiksZT1NYXRoLm1heChlLGQuZGlzdGFuY2VUb1NxdWFyZWQoYikpO3RoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzPU1hdGguc3FydChlKTtpc05hTih0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cykmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBDb21wdXRlZCByYWRpdXMgaXMgTmFOLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfX19KCksY29tcHV0ZUZhY2VOb3JtYWxzOmZ1bmN0aW9uKCl7fSxjb21wdXRlVmVydGV4Tm9ybWFsczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuaW5kZXgsYj10aGlzLmF0dHJpYnV0ZXMsYz10aGlzLmdyb3VwcztpZihiLnBvc2l0aW9uKXt2YXIgZD1iLnBvc2l0aW9uLmFycmF5OwppZih2b2lkIDA9PT1iLm5vcm1hbCl0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgTChuZXcgRmxvYXQzMkFycmF5KGQubGVuZ3RoKSwzKSk7ZWxzZSBmb3IodmFyIGU9Yi5ub3JtYWwuYXJyYXksZj0wLGc9ZS5sZW5ndGg7ZjxnO2YrKyllW2ZdPTA7dmFyIGU9Yi5ub3JtYWwuYXJyYXksaCxrLG0sbD1uZXcgcCxxPW5ldyBwLG49bmV3IHAscj1uZXcgcCx6PW5ldyBwO2lmKGEpe2E9YS5hcnJheTswPT09Yy5sZW5ndGgmJnRoaXMuYWRkR3JvdXAoMCxhLmxlbmd0aCk7Zm9yKHZhciB0PTAseT1jLmxlbmd0aDt0PHk7Kyt0KWZvcihmPWNbdF0sZz1mLnN0YXJ0LGg9Zi5jb3VudCxmPWcsZys9aDtmPGc7Zis9MyloPTMqYVtmKzBdLGs9MyphW2YrMV0sbT0zKmFbZisyXSxsLmZyb21BcnJheShkLGgpLHEuZnJvbUFycmF5KGQsayksbi5mcm9tQXJyYXkoZCxtKSxyLnN1YlZlY3RvcnMobixxKSx6LnN1YlZlY3RvcnMobCxxKSxyLmNyb3NzKHopLGVbaF0rPXIueCxlW2grMV0rPXIueSwKZVtoKzJdKz1yLnosZVtrXSs9ci54LGVbaysxXSs9ci55LGVbaysyXSs9ci56LGVbbV0rPXIueCxlW20rMV0rPXIueSxlW20rMl0rPXIuen1lbHNlIGZvcihmPTAsZz1kLmxlbmd0aDtmPGc7Zis9OSlsLmZyb21BcnJheShkLGYpLHEuZnJvbUFycmF5KGQsZiszKSxuLmZyb21BcnJheShkLGYrNiksci5zdWJWZWN0b3JzKG4scSksei5zdWJWZWN0b3JzKGwscSksci5jcm9zcyh6KSxlW2ZdPXIueCxlW2YrMV09ci55LGVbZisyXT1yLnosZVtmKzNdPXIueCxlW2YrNF09ci55LGVbZis1XT1yLnosZVtmKzZdPXIueCxlW2YrN109ci55LGVbZis4XT1yLno7dGhpcy5ub3JtYWxpemVOb3JtYWxzKCk7Yi5ub3JtYWwubmVlZHNVcGRhdGU9ITB9fSxtZXJnZTpmdW5jdGlvbihhLGIpe2lmKCExPT09KGEmJmEuaXNCdWZmZXJHZW9tZXRyeSkpY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVyZ2UoKTogZ2VvbWV0cnkgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5LiIsCmEpO2Vsc2V7dm9pZCAwPT09YiYmKGI9MCk7dmFyIGM9dGhpcy5hdHRyaWJ1dGVzLGQ7Zm9yKGQgaW4gYylpZih2b2lkIDAhPT1hLmF0dHJpYnV0ZXNbZF0pZm9yKHZhciBlPWNbZF0uYXJyYXksZj1hLmF0dHJpYnV0ZXNbZF0sZz1mLmFycmF5LGg9MCxmPWYuaXRlbVNpemUqYjtoPGcubGVuZ3RoO2grKyxmKyspZVtmXT1nW2hdO3JldHVybiB0aGlzfX0sbm9ybWFsaXplTm9ybWFsczpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsLGIsYyxkLGUsZj0wLGc9YS5jb3VudDtmPGc7ZisrKWI9YS5nZXRYKGYpLGM9YS5nZXRZKGYpLGQ9YS5nZXRaKGYpLGU9MS9NYXRoLnNxcnQoYipiK2MqYytkKmQpLGEuc2V0WFlaKGYsYiplLGMqZSxkKmUpfSx0b05vbkluZGV4ZWQ6ZnVuY3Rpb24oKXtpZihudWxsPT09dGhpcy5pbmRleClyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS50b05vbkluZGV4ZWQoKTogR2VvbWV0cnkgaXMgYWxyZWFkeSBub24taW5kZXhlZC4iKSwKdGhpczt2YXIgYT1uZXcgSSxiPXRoaXMuaW5kZXguYXJyYXksYz10aGlzLmF0dHJpYnV0ZXMsZDtmb3IoZCBpbiBjKXtmb3IodmFyIGU9Y1tkXSxmPWUuYXJyYXksZT1lLml0ZW1TaXplLGc9bmV3IGYuY29uc3RydWN0b3IoYi5sZW5ndGgqZSksaCxrPTAsbT0wLGw9Yi5sZW5ndGg7bTxsO20rKyl7aD1iW21dKmU7Zm9yKHZhciBxPTA7cTxlO3ErKylnW2srK109ZltoKytdfWEuYWRkQXR0cmlidXRlKGQsbmV3IEwoZyxlKSl9cmV0dXJuIGF9LHRvSlNPTjpmdW5jdGlvbigpe3ZhciBhPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQnVmZmVyR2VvbWV0cnkiLGdlbmVyYXRvcjoiQnVmZmVyR2VvbWV0cnkudG9KU09OIn19O2EudXVpZD10aGlzLnV1aWQ7YS50eXBlPXRoaXMudHlwZTsiIiE9PXRoaXMubmFtZSYmKGEubmFtZT10aGlzLm5hbWUpO2lmKHZvaWQgMCE9PXRoaXMucGFyYW1ldGVycyl7dmFyIGI9dGhpcy5wYXJhbWV0ZXJzLGM7Zm9yKGMgaW4gYil2b2lkIDAhPT1iW2NdJiYKKGFbY109YltjXSk7cmV0dXJuIGF9YS5kYXRhPXthdHRyaWJ1dGVzOnt9fTt2YXIgZD10aGlzLmluZGV4O251bGwhPT1kJiYoYj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkLmFycmF5KSxhLmRhdGEuaW5kZXg9e3R5cGU6ZC5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OmJ9KTtkPXRoaXMuYXR0cmlidXRlcztmb3IoYyBpbiBkKXt2YXIgZT1kW2NdLGI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5hcnJheSk7YS5kYXRhLmF0dHJpYnV0ZXNbY109e2l0ZW1TaXplOmUuaXRlbVNpemUsdHlwZTplLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6Yixub3JtYWxpemVkOmUubm9ybWFsaXplZH19Yz10aGlzLmdyb3VwczswPGMubGVuZ3RoJiYoYS5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGMpKSk7Yz10aGlzLmJvdW5kaW5nU3BoZXJlO251bGwhPT1jJiYoYS5kYXRhLmJvdW5kaW5nU3BoZXJlPXtjZW50ZXI6Yy5jZW50ZXIudG9BcnJheSgpLApyYWRpdXM6Yy5yYWRpdXN9KTtyZXR1cm4gYX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IEkpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkO3RoaXMuaW5kZXg9bnVsbDt0aGlzLmF0dHJpYnV0ZXM9e307dGhpcy5tb3JwaEF0dHJpYnV0ZXM9e307dGhpcy5ncm91cHM9W107dGhpcy5ib3VuZGluZ1NwaGVyZT10aGlzLmJvdW5kaW5nQm94PW51bGw7dGhpcy5uYW1lPWEubmFtZTtjPWEuaW5kZXg7bnVsbCE9PWMmJnRoaXMuc2V0SW5kZXgoYy5jbG9uZSgpKTtjPWEuYXR0cmlidXRlcztmb3IoYiBpbiBjKXRoaXMuYWRkQXR0cmlidXRlKGIsY1tiXS5jbG9uZSgpKTt2YXIgZT1hLm1vcnBoQXR0cmlidXRlcztmb3IoYiBpbiBlKXt2YXIgZj1bXSxnPWVbYl07Yz0wO2ZvcihkPWcubGVuZ3RoO2M8ZDtjKyspZi5wdXNoKGdbY10uY2xvbmUoKSk7dGhpcy5tb3JwaEF0dHJpYnV0ZXNbYl09Zn1iPWEuZ3JvdXBzO2M9MDtmb3IoZD1iLmxlbmd0aDtjPGQ7YysrKWU9CmJbY10sdGhpcy5hZGRHcm91cChlLnN0YXJ0LGUuY291bnQsZS5tYXRlcmlhbEluZGV4KTtiPWEuYm91bmRpbmdCb3g7bnVsbCE9PWImJih0aGlzLmJvdW5kaW5nQm94PWIuY2xvbmUoKSk7Yj1hLmJvdW5kaW5nU3BoZXJlO251bGwhPT1iJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1iLmNsb25lKCkpO3RoaXMuZHJhd1JhbmdlLnN0YXJ0PWEuZHJhd1JhbmdlLnN0YXJ0O3RoaXMuZHJhd1JhbmdlLmNvdW50PWEuZHJhd1JhbmdlLmNvdW50O3JldHVybiB0aGlzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX0pO0NhLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpDYSxpc01lc2g6ITAsc2V0RHJhd01vZGU6ZnVuY3Rpb24oYSl7dGhpcy5kcmF3TW9kZT1hfSxjb3B5OmZ1bmN0aW9uKGEpe0IucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMuZHJhd01vZGU9YS5kcmF3TW9kZTsKcmV0dXJuIHRoaXN9LHVwZGF0ZU1vcnBoVGFyZ2V0czpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2VvbWV0cnkubW9ycGhUYXJnZXRzO2lmKHZvaWQgMCE9PWEmJjA8YS5sZW5ndGgpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdO3RoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2Zvcih2YXIgYj0wLGM9YS5sZW5ndGg7YjxjO2IrKyl0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2FbYl0ubmFtZV09Yn19LHJheWNhc3Q6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYixjLGQsZSxmLGcpe1VhLmJhcnljb29yZEZyb21Qb2ludChhLGIsYyxkLHQpO2UubXVsdGlwbHlTY2FsYXIodC54KTtmLm11bHRpcGx5U2NhbGFyKHQueSk7Zy5tdWx0aXBseVNjYWxhcih0LnopO2UuYWRkKGYpLmFkZChnKTtyZXR1cm4gZS5jbG9uZSgpfWZ1bmN0aW9uIGIoYSxiLGMsZCxlLGYsZyl7dmFyIGg9YS5tYXRlcmlhbDtpZihudWxsPT09CigxPT09aC5zaWRlP2MuaW50ZXJzZWN0VHJpYW5nbGUoZixlLGQsITAsZyk6Yy5pbnRlcnNlY3RUcmlhbmdsZShkLGUsZiwyIT09aC5zaWRlLGcpKSlyZXR1cm4gbnVsbDt4LmNvcHkoZyk7eC5hcHBseU1hdHJpeDQoYS5tYXRyaXhXb3JsZCk7Yz1iLnJheS5vcmlnaW4uZGlzdGFuY2VUbyh4KTtyZXR1cm4gYzxiLm5lYXJ8fGM+Yi5mYXI/bnVsbDp7ZGlzdGFuY2U6Yyxwb2ludDp4LmNsb25lKCksb2JqZWN0OmF9fWZ1bmN0aW9uIGMoYyxkLGUsZixtLGwsdSxxKXtnLmZyb21CdWZmZXJBdHRyaWJ1dGUoZixsKTtoLmZyb21CdWZmZXJBdHRyaWJ1dGUoZix1KTtrLmZyb21CdWZmZXJBdHRyaWJ1dGUoZixxKTtpZihjPWIoYyxkLGUsZyxoLGsseSkpbSYmKG4uZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLGwpLHIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLHUpLHouZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLHEpLGMudXY9YSh5LGcsaCxrLG4scix6KSksYy5mYWNlPW5ldyBWYShsLHUscSxVYS5ub3JtYWwoZywKaCxrKSksYy5mYWNlSW5kZXg9bDtyZXR1cm4gY312YXIgZD1uZXcgSixlPW5ldyBoYixmPW5ldyBHYSxnPW5ldyBwLGg9bmV3IHAsaz1uZXcgcCxtPW5ldyBwLGw9bmV3IHAscT1uZXcgcCxuPW5ldyBELHI9bmV3IEQsej1uZXcgRCx0PW5ldyBwLHk9bmV3IHAseD1uZXcgcDtyZXR1cm4gZnVuY3Rpb24ocCx0KXt2YXIgdz10aGlzLmdlb21ldHJ5LHg9dGhpcy5tYXRlcmlhbCxDPXRoaXMubWF0cml4V29ybGQ7aWYodm9pZCAwIT09eCYmKG51bGw9PT13LmJvdW5kaW5nU3BoZXJlJiZ3LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLGYuY29weSh3LmJvdW5kaW5nU3BoZXJlKSxmLmFwcGx5TWF0cml4NChDKSwhMSE9PXAucmF5LmludGVyc2VjdHNTcGhlcmUoZikmJihkLmdldEludmVyc2UoQyksZS5jb3B5KHAucmF5KS5hcHBseU1hdHJpeDQoZCksbnVsbD09PXcuYm91bmRpbmdCb3h8fCExIT09ZS5pbnRlcnNlY3RzQm94KHcuYm91bmRpbmdCb3gpKSkpe3ZhciBFO2lmKHcuaXNCdWZmZXJHZW9tZXRyeSl7dmFyIEYsCkQseD13LmluZGV4LEI9dy5hdHRyaWJ1dGVzLnBvc2l0aW9uLEM9dy5hdHRyaWJ1dGVzLnV2LGNhLEk7aWYobnVsbCE9PXgpZm9yKGNhPTAsST14LmNvdW50O2NhPEk7Y2ErPTMpe2lmKHc9eC5nZXRYKGNhKSxGPXguZ2V0WChjYSsxKSxEPXguZ2V0WChjYSsyKSxFPWModGhpcyxwLGUsQixDLHcsRixEKSlFLmZhY2VJbmRleD1NYXRoLmZsb29yKGNhLzMpLHQucHVzaChFKX1lbHNlIGZvcihjYT0wLEk9Qi5jb3VudDtjYTxJO2NhKz0zKWlmKHc9Y2EsRj1jYSsxLEQ9Y2ErMixFPWModGhpcyxwLGUsQixDLHcsRixEKSlFLmluZGV4PXcsdC5wdXNoKEUpfWVsc2UgaWYody5pc0dlb21ldHJ5KXt2YXIgSCxDPUFycmF5LmlzQXJyYXkoeCk7Y2E9dy52ZXJ0aWNlcztJPXcuZmFjZXM7Rj13LmZhY2VWZXJ0ZXhVdnNbMF07MDxGLmxlbmd0aCYmKEI9Rik7Zm9yKHZhciBKPTAsTT1JLmxlbmd0aDtKPE07SisrKXt2YXIgUD1JW0pdO0U9Qz94W1AubWF0ZXJpYWxJbmRleF06eDtpZih2b2lkIDAhPT0KRSl7Rj1jYVtQLmFdO0Q9Y2FbUC5iXTtIPWNhW1AuY107aWYoITA9PT1FLm1vcnBoVGFyZ2V0cyl7RT13Lm1vcnBoVGFyZ2V0czt2YXIgSz10aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztnLnNldCgwLDAsMCk7aC5zZXQoMCwwLDApO2suc2V0KDAsMCwwKTtmb3IodmFyIFc9MCxiYT1FLmxlbmd0aDtXPGJhO1crKyl7dmFyIFQ9S1tXXTtpZigwIT09VCl7dmFyIFE9RVtXXS52ZXJ0aWNlcztnLmFkZFNjYWxlZFZlY3RvcihtLnN1YlZlY3RvcnMoUVtQLmFdLEYpLFQpO2guYWRkU2NhbGVkVmVjdG9yKGwuc3ViVmVjdG9ycyhRW1AuYl0sRCksVCk7ay5hZGRTY2FsZWRWZWN0b3IocS5zdWJWZWN0b3JzKFFbUC5jXSxIKSxUKX19Zy5hZGQoRik7aC5hZGQoRCk7ay5hZGQoSCk7Rj1nO0Q9aDtIPWt9aWYoRT1iKHRoaXMscCxlLEYsRCxILHkpKUImJkJbSl0mJihLPUJbSl0sbi5jb3B5KEtbMF0pLHIuY29weShLWzFdKSx6LmNvcHkoS1syXSksRS51dj1hKHksRixELEgsbixyLHopKSxFLmZhY2U9ClAsRS5mYWNlSW5kZXg9Six0LnB1c2goRSl9fX19fX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmdlb21ldHJ5LHRoaXMubWF0ZXJpYWwpKS5jb3B5KHRoaXMpfX0pO0liLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtJYi5wcm90b3R5cGUuY29uc3RydWN0b3I9SWI7a2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO2tiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1rYjt4Yy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7eGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPXhjO2xiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlKTtsYi5wcm90b3R5cGUuY29uc3RydWN0b3I9bGI7T2EucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOk9hLGlzQ2FtZXJhOiEwLGNvcHk6ZnVuY3Rpb24oYSl7Qi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsCmEpO3RoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoYS5tYXRyaXhXb3JsZEludmVyc2UpO3RoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KGEucHJvamVjdGlvbk1hdHJpeCk7cmV0dXJuIHRoaXN9LGdldFdvcmxkRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IHFhO3JldHVybiBmdW5jdGlvbihiKXtiPWJ8fG5ldyBwO3RoaXMuZ2V0V29ybGRRdWF0ZXJuaW9uKGEpO3JldHVybiBiLnNldCgwLDAsLTEpLmFwcGx5UXVhdGVybmlvbihhKX19KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSk7eGEucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp4YSxpc1BlcnNwZWN0aXZlQ2FtZXJhOiEwLGNvcHk6ZnVuY3Rpb24oYSl7T2EucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMuZm92PWEuZm92O3RoaXMuem9vbT1hLnpvb207dGhpcy5uZWFyPQphLm5lYXI7dGhpcy5mYXI9YS5mYXI7dGhpcy5mb2N1cz1hLmZvY3VzO3RoaXMuYXNwZWN0PWEuYXNwZWN0O3RoaXMudmlldz1udWxsPT09YS52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSxhLnZpZXcpO3RoaXMuZmlsbUdhdWdlPWEuZmlsbUdhdWdlO3RoaXMuZmlsbU9mZnNldD1hLmZpbG1PZmZzZXQ7cmV0dXJuIHRoaXN9LHNldEZvY2FsTGVuZ3RoOmZ1bmN0aW9uKGEpe2E9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvYTt0aGlzLmZvdj0yKlkuUkFEMkRFRypNYXRoLmF0YW4oYSk7dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LGdldEZvY2FsTGVuZ3RoOmZ1bmN0aW9uKCl7dmFyIGE9TWF0aC50YW4oLjUqWS5ERUcyUkFEKnRoaXMuZm92KTtyZXR1cm4uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS9hfSxnZXRFZmZlY3RpdmVGT1Y6ZnVuY3Rpb24oKXtyZXR1cm4gMipZLlJBRDJERUcqTWF0aC5hdGFuKE1hdGgudGFuKC41KlkuREVHMlJBRCp0aGlzLmZvdikvdGhpcy56b29tKX0sCmdldEZpbG1XaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbG1HYXVnZSpNYXRoLm1pbih0aGlzLmFzcGVjdCwxKX0sZ2V0RmlsbUhlaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX0sc2V0Vmlld09mZnNldDpmdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5hc3BlY3Q9YS9iO3RoaXMudmlldz17ZnVsbFdpZHRoOmEsZnVsbEhlaWdodDpiLG9mZnNldFg6YyxvZmZzZXRZOmQsd2lkdGg6ZSxoZWlnaHQ6Zn07dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LGNsZWFyVmlld09mZnNldDpmdW5jdGlvbigpe3RoaXMudmlldz1udWxsO3RoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSx1cGRhdGVQcm9qZWN0aW9uTWF0cml4OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5uZWFyLGI9YSpNYXRoLnRhbiguNSpZLkRFRzJSQUQqdGhpcy5mb3YpL3RoaXMuem9vbSxjPTIqYixkPXRoaXMuYXNwZWN0KmMsZT0tLjUqZCxmPQp0aGlzLnZpZXc7aWYobnVsbCE9PWYpdmFyIGc9Zi5mdWxsV2lkdGgsaD1mLmZ1bGxIZWlnaHQsZT1lK2Yub2Zmc2V0WCpkL2csYj1iLWYub2Zmc2V0WSpjL2gsZD1mLndpZHRoL2cqZCxjPWYuaGVpZ2h0L2gqYztmPXRoaXMuZmlsbU9mZnNldDswIT09ZiYmKGUrPWEqZi90aGlzLmdldEZpbG1XaWR0aCgpKTt0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKGUsZStkLGIsYi1jLGEsdGhpcy5mYXIpfSx0b0pTT046ZnVuY3Rpb24oYSl7YT1CLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGEpO2Eub2JqZWN0LmZvdj10aGlzLmZvdjthLm9iamVjdC56b29tPXRoaXMuem9vbTthLm9iamVjdC5uZWFyPXRoaXMubmVhcjthLm9iamVjdC5mYXI9dGhpcy5mYXI7YS5vYmplY3QuZm9jdXM9dGhpcy5mb2N1czthLm9iamVjdC5hc3BlY3Q9dGhpcy5hc3BlY3Q7bnVsbCE9PXRoaXMudmlldyYmKGEub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKTthLm9iamVjdC5maWxtR2F1Z2U9CnRoaXMuZmlsbUdhdWdlO2Eub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0O3JldHVybiBhfX0pO0piLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoT2EucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6SmIsaXNPcnRob2dyYXBoaWNDYW1lcmE6ITAsY29weTpmdW5jdGlvbihhKXtPYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5sZWZ0PWEubGVmdDt0aGlzLnJpZ2h0PWEucmlnaHQ7dGhpcy50b3A9YS50b3A7dGhpcy5ib3R0b209YS5ib3R0b207dGhpcy5uZWFyPWEubmVhcjt0aGlzLmZhcj1hLmZhcjt0aGlzLnpvb209YS56b29tO3RoaXMudmlldz1udWxsPT09YS52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSxhLnZpZXcpO3JldHVybiB0aGlzfSxzZXRWaWV3T2Zmc2V0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLnZpZXc9e2Z1bGxXaWR0aDphLGZ1bGxIZWlnaHQ6YixvZmZzZXRYOmMsb2Zmc2V0WTpkLHdpZHRoOmUsaGVpZ2h0OmZ9Owp0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX0sY2xlYXJWaWV3T2Zmc2V0OmZ1bmN0aW9uKCl7dGhpcy52aWV3PW51bGw7dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LHVwZGF0ZVByb2plY3Rpb25NYXRyaXg6ZnVuY3Rpb24oKXt2YXIgYT0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksYj0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksYz0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIsZD0odGhpcy50b3ArdGhpcy5ib3R0b20pLzIsZT1jLWEsYz1jK2EsYT1kK2IsYj1kLWI7aWYobnVsbCE9PXRoaXMudmlldyl2YXIgYz10aGlzLnpvb20vKHRoaXMudmlldy53aWR0aC90aGlzLnZpZXcuZnVsbFdpZHRoKSxiPXRoaXMuem9vbS8odGhpcy52aWV3LmhlaWdodC90aGlzLnZpZXcuZnVsbEhlaWdodCksZj0odGhpcy5yaWdodC10aGlzLmxlZnQpL3RoaXMudmlldy53aWR0aCxkPSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvdGhpcy52aWV3LmhlaWdodCwKZT1lK3RoaXMudmlldy5vZmZzZXRYL2MqZixjPWUrdGhpcy52aWV3LndpZHRoL2MqZixhPWEtdGhpcy52aWV3Lm9mZnNldFkvYipkLGI9YS10aGlzLnZpZXcuaGVpZ2h0L2IqZDt0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZU9ydGhvZ3JhcGhpYyhlLGMsYSxiLHRoaXMubmVhcix0aGlzLmZhcil9LHRvSlNPTjpmdW5jdGlvbihhKXthPUIucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsYSk7YS5vYmplY3Quem9vbT10aGlzLnpvb207YS5vYmplY3QubGVmdD10aGlzLmxlZnQ7YS5vYmplY3QucmlnaHQ9dGhpcy5yaWdodDthLm9iamVjdC50b3A9dGhpcy50b3A7YS5vYmplY3QuYm90dG9tPXRoaXMuYm90dG9tO2Eub2JqZWN0Lm5lYXI9dGhpcy5uZWFyO2Eub2JqZWN0LmZhcj10aGlzLmZhcjtudWxsIT09dGhpcy52aWV3JiYoYS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpO3JldHVybiBhfX0pO3ZhciBiZz0wO0tiLnByb3RvdHlwZS5pc0ZvZ0V4cDI9ITA7CktiLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgS2IodGhpcy5jb2xvci5nZXRIZXgoKSx0aGlzLmRlbnNpdHkpfTtLYi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGEpe3JldHVybnt0eXBlOiJGb2dFeHAyIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLGRlbnNpdHk6dGhpcy5kZW5zaXR5fX07TGIucHJvdG90eXBlLmlzRm9nPSEwO0xiLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgTGIodGhpcy5jb2xvci5nZXRIZXgoKSx0aGlzLm5lYXIsdGhpcy5mYXIpfTtMYi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGEpe3JldHVybnt0eXBlOiJGb2ciLGNvbG9yOnRoaXMuY29sb3IuZ2V0SGV4KCksbmVhcjp0aGlzLm5lYXIsZmFyOnRoaXMuZmFyfX07bWQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOm1kLGNvcHk6ZnVuY3Rpb24oYSxiKXtCLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcywKYSxiKTtudWxsIT09YS5iYWNrZ3JvdW5kJiYodGhpcy5iYWNrZ3JvdW5kPWEuYmFja2dyb3VuZC5jbG9uZSgpKTtudWxsIT09YS5mb2cmJih0aGlzLmZvZz1hLmZvZy5jbG9uZSgpKTtudWxsIT09YS5vdmVycmlkZU1hdGVyaWFsJiYodGhpcy5vdmVycmlkZU1hdGVyaWFsPWEub3ZlcnJpZGVNYXRlcmlhbC5jbG9uZSgpKTt0aGlzLmF1dG9VcGRhdGU9YS5hdXRvVXBkYXRlO3RoaXMubWF0cml4QXV0b1VwZGF0ZT1hLm1hdHJpeEF1dG9VcGRhdGU7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihhKXt2YXIgYj1CLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGEpO251bGwhPT10aGlzLmJhY2tncm91bmQmJihiLm9iamVjdC5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04oYSkpO251bGwhPT10aGlzLmZvZyYmKGIub2JqZWN0LmZvZz10aGlzLmZvZy50b0pTT04oKSk7cmV0dXJuIGJ9fSk7WWQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSksCntjb25zdHJ1Y3RvcjpZZCxpc0xlbnNGbGFyZTohMCxjb3B5OmZ1bmN0aW9uKGEpe0IucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMucG9zaXRpb25TY3JlZW4uY29weShhLnBvc2l0aW9uU2NyZWVuKTt0aGlzLmN1c3RvbVVwZGF0ZUNhbGxiYWNrPWEuY3VzdG9tVXBkYXRlQ2FsbGJhY2s7Zm9yKHZhciBiPTAsYz1hLmxlbnNGbGFyZXMubGVuZ3RoO2I8YztiKyspdGhpcy5sZW5zRmxhcmVzLnB1c2goYS5sZW5zRmxhcmVzW2JdKTtyZXR1cm4gdGhpc30sYWRkOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2b2lkIDA9PT1iJiYoYj0tMSk7dm9pZCAwPT09YyYmKGM9MCk7dm9pZCAwPT09ZiYmKGY9MSk7dm9pZCAwPT09ZSYmKGU9bmV3IEgoMTY3NzcyMTUpKTt2b2lkIDA9PT1kJiYoZD0xKTtjPU1hdGgubWluKGMsTWF0aC5tYXgoMCxjKSk7dGhpcy5sZW5zRmxhcmVzLnB1c2goe3RleHR1cmU6YSxzaXplOmIsZGlzdGFuY2U6Yyx4OjAseTowLHo6MCxzY2FsZToxLHJvdGF0aW9uOjAsCm9wYWNpdHk6Zixjb2xvcjplLGJsZW5kaW5nOmR9KX0sdXBkYXRlTGVuc0ZsYXJlczpmdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5sZW5zRmxhcmVzLmxlbmd0aCxjLGQ9MiotdGhpcy5wb3NpdGlvblNjcmVlbi54LGU9MiotdGhpcy5wb3NpdGlvblNjcmVlbi55O2ZvcihhPTA7YTxiO2ErKyljPXRoaXMubGVuc0ZsYXJlc1thXSxjLng9dGhpcy5wb3NpdGlvblNjcmVlbi54K2QqYy5kaXN0YW5jZSxjLnk9dGhpcy5wb3NpdGlvblNjcmVlbi55K2UqYy5kaXN0YW5jZSxjLndhbnRlZFJvdGF0aW9uPWMueCpNYXRoLlBJKi4yNSxjLnJvdGF0aW9uKz0uMjUqKGMud2FudGVkUm90YXRpb24tYy5yb3RhdGlvbil9fSk7Y2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWi5wcm90b3R5cGUpO2NiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jYjtjYi5wcm90b3R5cGUuaXNTcHJpdGVNYXRlcmlhbD0hMDtjYi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtaLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcywKYSk7dGhpcy5jb2xvci5jb3B5KGEuY29sb3IpO3RoaXMubWFwPWEubWFwO3RoaXMucm90YXRpb249YS5yb3RhdGlvbjtyZXR1cm4gdGhpc307QWMucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkFjLGlzU3ByaXRlOiEwLHJheWNhc3Q6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwLGM9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKGQsZSl7Yi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7ZC5yYXkuY2xvc2VzdFBvaW50VG9Qb2ludChiLGEpO2Muc2V0RnJvbU1hdHJpeFNjYWxlKHRoaXMubWF0cml4V29ybGQpO3ZhciBmPWMueCpjLnkvNDtiLmRpc3RhbmNlVG9TcXVhcmVkKGEpPmZ8fChmPWQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGEpLGY8ZC5uZWFyfHxmPmQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOmYscG9pbnQ6YS5jbG9uZSgpLGZhY2U6bnVsbCxvYmplY3Q6dGhpc30pKX19KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5tYXRlcmlhbCkpLmNvcHkodGhpcyl9fSk7CkJjLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpCYyxjb3B5OmZ1bmN0aW9uKGEpe0IucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEsITEpO2E9YS5sZXZlbHM7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aDtiPGM7YisrKXt2YXIgZD1hW2JdO3RoaXMuYWRkTGV2ZWwoZC5vYmplY3QuY2xvbmUoKSxkLmRpc3RhbmNlKX1yZXR1cm4gdGhpc30sYWRkTGV2ZWw6ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0wKTtiPU1hdGguYWJzKGIpO2Zvcih2YXIgYz10aGlzLmxldmVscyxkPTA7ZDxjLmxlbmd0aCYmIShiPGNbZF0uZGlzdGFuY2UpO2QrKyk7Yy5zcGxpY2UoZCwwLHtkaXN0YW5jZTpiLG9iamVjdDphfSk7dGhpcy5hZGQoYSl9LGdldE9iamVjdEZvckRpc3RhbmNlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLmxldmVscyxjPTEsZD1iLmxlbmd0aDtjPGQmJiEoYTxiW2NdLmRpc3RhbmNlKTtjKyspO3JldHVybiBiW2MtCjFdLm9iamVjdH0scmF5Y2FzdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwO3JldHVybiBmdW5jdGlvbihiLGMpe2Euc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpO3ZhciBkPWIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGEpO3RoaXMuZ2V0T2JqZWN0Rm9yRGlzdGFuY2UoZCkucmF5Y2FzdChiLGMpfX0oKSx1cGRhdGU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcCxiPW5ldyBwO3JldHVybiBmdW5jdGlvbihjKXt2YXIgZD10aGlzLmxldmVscztpZigxPGQubGVuZ3RoKXthLnNldEZyb21NYXRyaXhQb3NpdGlvbihjLm1hdHJpeFdvcmxkKTtiLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtjPWEuZGlzdGFuY2VUbyhiKTtkWzBdLm9iamVjdC52aXNpYmxlPSEwO2Zvcih2YXIgZT0xLGY9ZC5sZW5ndGg7ZTxmO2UrKylpZihjPj1kW2VdLmRpc3RhbmNlKWRbZS0xXS5vYmplY3QudmlzaWJsZT0hMSxkW2VdLm9iamVjdC52aXNpYmxlPSEwO2Vsc2UgYnJlYWs7CmZvcig7ZTxmO2UrKylkW2VdLm9iamVjdC52aXNpYmxlPSExfX19KCksdG9KU09OOmZ1bmN0aW9uKGEpe2E9Qi5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxhKTthLm9iamVjdC5sZXZlbHM9W107Zm9yKHZhciBiPXRoaXMubGV2ZWxzLGM9MCxkPWIubGVuZ3RoO2M8ZDtjKyspe3ZhciBlPWJbY107YS5vYmplY3QubGV2ZWxzLnB1c2goe29iamVjdDplLm9iamVjdC51dWlkLGRpc3RhbmNlOmUuZGlzdGFuY2V9KX1yZXR1cm4gYX19KTtPYmplY3QuYXNzaWduKENjLnByb3RvdHlwZSx7Y2FsY3VsYXRlSW52ZXJzZXM6ZnVuY3Rpb24oKXt0aGlzLmJvbmVJbnZlcnNlcz1bXTtmb3IodmFyIGE9MCxiPXRoaXMuYm9uZXMubGVuZ3RoO2E8YjthKyspe3ZhciBjPW5ldyBKO3RoaXMuYm9uZXNbYV0mJmMuZ2V0SW52ZXJzZSh0aGlzLmJvbmVzW2FdLm1hdHJpeFdvcmxkKTt0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKGMpfX0scG9zZTpmdW5jdGlvbigpe3ZhciBhLGIsYztiPTA7Zm9yKGM9dGhpcy5ib25lcy5sZW5ndGg7YjwKYztiKyspKGE9dGhpcy5ib25lc1tiXSkmJmEubWF0cml4V29ybGQuZ2V0SW52ZXJzZSh0aGlzLmJvbmVJbnZlcnNlc1tiXSk7Yj0wO2ZvcihjPXRoaXMuYm9uZXMubGVuZ3RoO2I8YztiKyspaWYoYT10aGlzLmJvbmVzW2JdKWEucGFyZW50JiZhLnBhcmVudC5pc0JvbmU/KGEubWF0cml4LmdldEludmVyc2UoYS5wYXJlbnQubWF0cml4V29ybGQpLGEubWF0cml4Lm11bHRpcGx5KGEubWF0cml4V29ybGQpKTphLm1hdHJpeC5jb3B5KGEubWF0cml4V29ybGQpLGEubWF0cml4LmRlY29tcG9zZShhLnBvc2l0aW9uLGEucXVhdGVybmlvbixhLnNjYWxlKX0sdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IEosYj1uZXcgSjtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGM9dGhpcy5ib25lcyxkPXRoaXMuYm9uZUludmVyc2VzLGU9dGhpcy5ib25lTWF0cmljZXMsZj10aGlzLmJvbmVUZXh0dXJlLGc9MCxoPWMubGVuZ3RoO2c8aDtnKyspYS5tdWx0aXBseU1hdHJpY2VzKGNbZ10/Y1tnXS5tYXRyaXhXb3JsZDoKYixkW2ddKSxhLnRvQXJyYXkoZSwxNipnKTt2b2lkIDAhPT1mJiYoZi5uZWVkc1VwZGF0ZT0hMCl9fSgpLGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDYyh0aGlzLmJvbmVzLHRoaXMuYm9uZUludmVyc2VzKX19KTtuZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6bmQsaXNCb25lOiEwfSk7b2QucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShDYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpvZCxpc1NraW5uZWRNZXNoOiEwLGluaXRCb25lczpmdW5jdGlvbigpe3ZhciBhPVtdLGIsYyxkLGU7aWYodGhpcy5nZW9tZXRyeSYmdm9pZCAwIT09dGhpcy5nZW9tZXRyeS5ib25lcyl7ZD0wO2ZvcihlPXRoaXMuZ2VvbWV0cnkuYm9uZXMubGVuZ3RoO2Q8ZTtkKyspYz10aGlzLmdlb21ldHJ5LmJvbmVzW2RdLGI9bmV3IG5kLGEucHVzaChiKSxiLm5hbWU9Yy5uYW1lLGIucG9zaXRpb24uZnJvbUFycmF5KGMucG9zKSwKYi5xdWF0ZXJuaW9uLmZyb21BcnJheShjLnJvdHEpLHZvaWQgMCE9PWMuc2NsJiZiLnNjYWxlLmZyb21BcnJheShjLnNjbCk7ZD0wO2ZvcihlPXRoaXMuZ2VvbWV0cnkuYm9uZXMubGVuZ3RoO2Q8ZTtkKyspYz10aGlzLmdlb21ldHJ5LmJvbmVzW2RdLC0xIT09Yy5wYXJlbnQmJm51bGwhPT1jLnBhcmVudCYmdm9pZCAwIT09YVtjLnBhcmVudF0/YVtjLnBhcmVudF0uYWRkKGFbZF0pOnRoaXMuYWRkKGFbZF0pfXRoaXMudXBkYXRlTWF0cml4V29ybGQoITApO3JldHVybiBhfSxiaW5kOmZ1bmN0aW9uKGEsYil7dGhpcy5za2VsZXRvbj1hO3ZvaWQgMD09PWImJih0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKSx0aGlzLnNrZWxldG9uLmNhbGN1bGF0ZUludmVyc2VzKCksYj10aGlzLm1hdHJpeFdvcmxkKTt0aGlzLmJpbmRNYXRyaXguY29weShiKTt0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmdldEludmVyc2UoYil9LHBvc2U6ZnVuY3Rpb24oKXt0aGlzLnNrZWxldG9uLnBvc2UoKX0sbm9ybWFsaXplU2tpbldlaWdodHM6ZnVuY3Rpb24oKXt2YXIgYSwKYjtpZih0aGlzLmdlb21ldHJ5JiZ0aGlzLmdlb21ldHJ5LmlzR2VvbWV0cnkpZm9yKGI9MDtiPHRoaXMuZ2VvbWV0cnkuc2tpbldlaWdodHMubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5nZW9tZXRyeS5za2luV2VpZ2h0c1tiXTthPTEvYy5sZW5ndGhNYW5oYXR0YW4oKTtJbmZpbml0eSE9PWE/Yy5tdWx0aXBseVNjYWxhcihhKTpjLnNldCgxLDAsMCwwKX1lbHNlIGlmKHRoaXMuZ2VvbWV0cnkmJnRoaXMuZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSl7dmFyIGM9bmV3IGdhLGQ9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7Zm9yKGI9MDtiPGQuY291bnQ7YisrKWMueD1kLmdldFgoYiksYy55PWQuZ2V0WShiKSxjLno9ZC5nZXRaKGIpLGMudz1kLmdldFcoYiksYT0xL2MubGVuZ3RoTWFuaGF0dGFuKCksSW5maW5pdHkhPT1hP2MubXVsdGlwbHlTY2FsYXIoYSk6Yy5zZXQoMSwwLDAsMCksZC5zZXRYWVpXKGIsYy54LGMueSxjLnosYy53KX19LHVwZGF0ZU1hdHJpeFdvcmxkOmZ1bmN0aW9uKGEpe0NhLnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZC5jYWxsKHRoaXMsCmEpOyJhdHRhY2hlZCI9PT10aGlzLmJpbmRNb2RlP3RoaXMuYmluZE1hdHJpeEludmVyc2UuZ2V0SW52ZXJzZSh0aGlzLm1hdHJpeFdvcmxkKToiZGV0YWNoZWQiPT09dGhpcy5iaW5kTW9kZT90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmdldEludmVyc2UodGhpcy5iaW5kTWF0cml4KTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuZ2VvbWV0cnksdGhpcy5tYXRlcmlhbCkpLmNvcHkodGhpcyl9fSk7aGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWi5wcm90b3R5cGUpO2hhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1oYTtoYS5wcm90b3R5cGUuaXNMaW5lQmFzaWNNYXRlcmlhbD0hMDtoYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtaLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLmNvbG9yLmNvcHkoYS5jb2xvcik7CnRoaXMubGluZXdpZHRoPWEubGluZXdpZHRoO3RoaXMubGluZWNhcD1hLmxpbmVjYXA7dGhpcy5saW5lam9pbj1hLmxpbmVqb2luO3JldHVybiB0aGlzfTt5YS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6eWEsaXNMaW5lOiEwLHJheWNhc3Q6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgSixiPW5ldyBoYixjPW5ldyBHYTtyZXR1cm4gZnVuY3Rpb24oZCxlKXt2YXIgZj1kLmxpbmVQcmVjaXNpb24sZj1mKmYsZz10aGlzLmdlb21ldHJ5LGg9dGhpcy5tYXRyaXhXb3JsZDtudWxsPT09Zy5ib3VuZGluZ1NwaGVyZSYmZy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtjLmNvcHkoZy5ib3VuZGluZ1NwaGVyZSk7Yy5hcHBseU1hdHJpeDQoaCk7aWYoITEhPT1kLnJheS5pbnRlcnNlY3RzU3BoZXJlKGMpKXthLmdldEludmVyc2UoaCk7Yi5jb3B5KGQucmF5KS5hcHBseU1hdHJpeDQoYSk7dmFyIGs9bmV3IHAsbT1uZXcgcCxoPW5ldyBwLApsPW5ldyBwLHE9dGhpcyYmdGhpcy5pc0xpbmVTZWdtZW50cz8yOjE7aWYoZy5pc0J1ZmZlckdlb21ldHJ5KXt2YXIgbj1nLmluZGV4LHI9Zy5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O2lmKG51bGwhPT1uKWZvcih2YXIgbj1uLmFycmF5LGc9MCx6PW4ubGVuZ3RoLTE7Zzx6O2crPXEpe3ZhciB0PW5bZysxXTtrLmZyb21BcnJheShyLDMqbltnXSk7bS5mcm9tQXJyYXkociwzKnQpO3Q9Yi5kaXN0YW5jZVNxVG9TZWdtZW50KGssbSxsLGgpO3Q+Znx8KGwuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLHQ9ZC5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCksdDxkLm5lYXJ8fHQ+ZC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6dCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OmcsZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSkpfWVsc2UgZm9yKGc9MCx6PXIubGVuZ3RoLzMtMTtnPHo7Zys9cSlrLmZyb21BcnJheShyLAozKmcpLG0uZnJvbUFycmF5KHIsMypnKzMpLHQ9Yi5kaXN0YW5jZVNxVG9TZWdtZW50KGssbSxsLGgpLHQ+Znx8KGwuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLHQ9ZC5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCksdDxkLm5lYXJ8fHQ+ZC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6dCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OmcsZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSkpfWVsc2UgaWYoZy5pc0dlb21ldHJ5KWZvcihrPWcudmVydGljZXMsbT1rLmxlbmd0aCxnPTA7ZzxtLTE7Zys9cSl0PWIuZGlzdGFuY2VTcVRvU2VnbWVudChrW2ddLGtbZysxXSxsLGgpLHQ+Znx8KGwuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLHQ9ZC5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCksdDxkLm5lYXJ8fHQ+ZC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6dCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLAppbmRleDpnLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pKX19fSgpLGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuZ2VvbWV0cnksdGhpcy5tYXRlcmlhbCkpLmNvcHkodGhpcyl9fSk7ZGEucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZSh5YS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpkYSxpc0xpbmVTZWdtZW50czohMH0pO3BkLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoeWEucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6cGQsaXNMaW5lTG9vcDohMH0pO0xhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTtMYS5wcm90b3R5cGUuY29uc3RydWN0b3I9TGE7TGEucHJvdG90eXBlLmlzUG9pbnRzTWF0ZXJpYWw9ITA7TGEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5jb2xvci5jb3B5KGEuY29sb3IpOwp0aGlzLm1hcD1hLm1hcDt0aGlzLnNpemU9YS5zaXplO3RoaXMuc2l6ZUF0dGVudWF0aW9uPWEuc2l6ZUF0dGVudWF0aW9uO3JldHVybiB0aGlzfTtNYi5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6TWIsaXNQb2ludHM6ITAscmF5Y2FzdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBKLGI9bmV3IGhiLGM9bmV3IEdhO3JldHVybiBmdW5jdGlvbihkLGUpe2Z1bmN0aW9uIGYoYSxjKXt2YXIgZj1iLmRpc3RhbmNlU3FUb1BvaW50KGEpO2lmKGY8bCl7dmFyIGg9Yi5jbG9zZXN0UG9pbnRUb1BvaW50KGEpO2guYXBwbHlNYXRyaXg0KGspO3ZhciBtPWQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGgpO208ZC5uZWFyfHxtPmQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOm0sZGlzdGFuY2VUb1JheTpNYXRoLnNxcnQoZikscG9pbnQ6aC5jbG9uZSgpLGluZGV4OmMsZmFjZTpudWxsLG9iamVjdDpnfSl9fXZhciBnPXRoaXMsaD10aGlzLmdlb21ldHJ5LAprPXRoaXMubWF0cml4V29ybGQsbT1kLnBhcmFtcy5Qb2ludHMudGhyZXNob2xkO251bGw9PT1oLmJvdW5kaW5nU3BoZXJlJiZoLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO2MuY29weShoLmJvdW5kaW5nU3BoZXJlKTtjLmFwcGx5TWF0cml4NChrKTtjLnJhZGl1cys9bTtpZighMSE9PWQucmF5LmludGVyc2VjdHNTcGhlcmUoYykpe2EuZ2V0SW52ZXJzZShrKTtiLmNvcHkoZC5yYXkpLmFwcGx5TWF0cml4NChhKTt2YXIgbT1tLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLGw9bSptLG09bmV3IHA7aWYoaC5pc0J1ZmZlckdlb21ldHJ5KXt2YXIgcT1oLmluZGV4LGg9aC5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O2lmKG51bGwhPT1xKWZvcih2YXIgbj1xLmFycmF5LHE9MCxyPW4ubGVuZ3RoO3E8cjtxKyspe3ZhciB6PW5bcV07bS5mcm9tQXJyYXkoaCwzKnopO2YobSx6KX1lbHNlIGZvcihxPTAsbj1oLmxlbmd0aC8zO3E8bjtxKyspbS5mcm9tQXJyYXkoaCwKMypxKSxmKG0scSl9ZWxzZSBmb3IobT1oLnZlcnRpY2VzLHE9MCxuPW0ubGVuZ3RoO3E8bjtxKyspZihtW3FdLHEpfX19KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5nZW9tZXRyeSx0aGlzLm1hdGVyaWFsKSkuY29weSh0aGlzKX19KTtEYy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6RGN9KTtxZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShYLnByb3RvdHlwZSk7cWQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXFkO05iLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFgucHJvdG90eXBlKTtOYi5wcm90b3R5cGUuY29uc3RydWN0b3I9TmI7TmIucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITA7cmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWC5wcm90b3R5cGUpO3JkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yZDtFYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShYLnByb3RvdHlwZSk7CkVjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FYztFYy5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7T2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO09iLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1PYjtGYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7RmMucHJvdG90eXBlLmNvbnN0cnVjdG9yPUZjO1BiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlKTtQYi5wcm90b3R5cGUuY29uc3RydWN0b3I9UGI7R2MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO0djLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1HYztpYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7aWEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWlhO0hjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtIYy5wcm90b3R5cGUuY29uc3RydWN0b3I9SGM7UWIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaWEucHJvdG90eXBlKTsKUWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVFiO0ljLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtJYy5wcm90b3R5cGUuY29uc3RydWN0b3I9SWM7bWIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaWEucHJvdG90eXBlKTttYi5wcm90b3R5cGUuY29uc3RydWN0b3I9bWI7SmMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO0pjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1KYztSYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpYS5wcm90b3R5cGUpO1JiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1SYjtLYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7S2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPUtjO1NiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGlhLnByb3RvdHlwZSk7U2IucHJvdG90eXBlLmNvbnN0cnVjdG9yPVNiO0xjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtMYy5wcm90b3R5cGUuY29uc3RydWN0b3I9CkxjO1RiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlKTtUYi5wcm90b3R5cGUuY29uc3RydWN0b3I9VGI7TWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO01jLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1NYztVYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7VWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVViO05jLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtOYy5wcm90b3R5cGUuY29uc3RydWN0b3I9TmM7VmIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO1ZiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WYjt2YXIgemE9e2FyZWE6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEubGVuZ3RoLGM9MCxkPWItMSxlPTA7ZTxiO2Q9ZSsrKWMrPWFbZF0ueCphW2VdLnktYVtlXS54KmFbZF0ueTtyZXR1cm4uNSpjfSx0cmlhbmd1bGF0ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihhLGIpe3ZhciBjPQphLmxlbmd0aDtpZigzPmMpcmV0dXJuIG51bGw7dmFyIGQ9W10sZT1bXSxmPVtdLGcsaCxrO2lmKDA8emEuYXJlYShhKSlmb3IoaD0wO2g8YztoKyspZVtoXT1oO2Vsc2UgZm9yKGg9MDtoPGM7aCsrKWVbaF09Yy0xLWg7dmFyIG09MipjO2ZvcihoPWMtMTsyPGM7KXtpZigwPj1tLS0pe2NvbnNvbGUud2FybigiVEhSRUUuU2hhcGVVdGlsczogVW5hYmxlIHRvIHRyaWFuZ3VsYXRlIHBvbHlnb24hIGluIHRyaWFuZ3VsYXRlKCkiKTticmVha31nPWg7Yzw9ZyYmKGc9MCk7aD1nKzE7Yzw9aCYmKGg9MCk7az1oKzE7Yzw9ayYmKGs9MCk7dmFyIGw7YTp7dmFyIHEsbixyLHAsdCx5LHgsdjtxPWFbZVtnXV0ueDtuPWFbZVtnXV0ueTtyPWFbZVtoXV0ueDtwPWFbZVtoXV0ueTt0PWFbZVtrXV0ueDt5PWFbZVtrXV0ueTtpZigwPj0oci1xKSooeS1uKS0ocC1uKSoodC1xKSlsPSExO2Vsc2V7dmFyIEcsdyxPLEMsRSxGLEQsQixJLEg7Rz10LXI7dz15LXA7Tz1xLXQ7Qz1uLXk7RT1yLXE7Rj1wLW47CmZvcihsPTA7bDxjO2wrKylpZih4PWFbZVtsXV0ueCx2PWFbZVtsXV0ueSwhKHg9PT1xJiZ2PT09bnx8eD09PXImJnY9PT1wfHx4PT09dCYmdj09PXkpJiYoRD14LXEsQj12LW4sST14LXIsSD12LXAseC09dCx2LT15LEk9RypILXcqSSxEPUUqQi1GKkQsQj1PKnYtQyp4LEk+PS1OdW1iZXIuRVBTSUxPTiYmQj49LU51bWJlci5FUFNJTE9OJiZEPj0tTnVtYmVyLkVQU0lMT04pKXtsPSExO2JyZWFrIGF9bD0hMH19aWYobCl7ZC5wdXNoKFthW2VbZ11dLGFbZVtoXV0sYVtlW2tdXV0pO2YucHVzaChbZVtnXSxlW2hdLGVba11dKTtnPWg7Zm9yKGs9aCsxO2s8YztnKyssaysrKWVbZ109ZVtrXTtjLS07bT0yKmN9fXJldHVybiBiP2Y6ZH19KCksdHJpYW5ndWxhdGVTaGFwZTpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7dmFyIGI9YS5sZW5ndGg7MjxiJiZhW2ItMV0uZXF1YWxzKGFbMF0pJiZhLnBvcCgpfWZ1bmN0aW9uIGQoYSxiLGMpe3JldHVybiBhLnghPT1iLng/YS54PGIueD9hLng8PQpjLngmJmMueDw9Yi54OmIueDw9Yy54JiZjLng8PWEueDphLnk8Yi55P2EueTw9Yy55JiZjLnk8PWIueTpiLnk8PWMueSYmYy55PD1hLnl9ZnVuY3Rpb24gZShhLGIsYyxlLGYpe3ZhciBnPWIueC1hLngsaD1iLnktYS55LGs9ZS54LWMueCxtPWUueS1jLnksbD1hLngtYy54LG49YS55LWMueSxxPWgqay1nKm0sdT1oKmwtZypuO2lmKE1hdGguYWJzKHEpPk51bWJlci5FUFNJTE9OKXtpZigwPHEpe2lmKDA+dXx8dT5xKXJldHVybltdO2s9bSpsLWsqbjtpZigwPmt8fGs+cSlyZXR1cm5bXX1lbHNle2lmKDA8dXx8dTxxKXJldHVybltdO2s9bSpsLWsqbjtpZigwPGt8fGs8cSlyZXR1cm5bXX1pZigwPT09aylyZXR1cm4hZnx8MCE9PXUmJnUhPT1xP1thXTpbXTtpZihrPT09cSlyZXR1cm4hZnx8MCE9PXUmJnUhPT1xP1tiXTpbXTtpZigwPT09dSlyZXR1cm5bY107aWYodT09PXEpcmV0dXJuW2VdO2Y9ay9xO3JldHVyblt7eDphLngrZipnLHk6YS55K2YqaH1dfWlmKDAhPT11fHxtKmwhPT0KaypuKXJldHVybltdO2g9MD09PWcmJjA9PT1oO2s9MD09PWsmJjA9PT1tO2lmKGgmJmspcmV0dXJuIGEueCE9PWMueHx8YS55IT09Yy55P1tdOlthXTtpZihoKXJldHVybiBkKGMsZSxhKT9bYV06W107aWYoaylyZXR1cm4gZChhLGIsYyk/W2NdOltdOzAhPT1nPyhhLng8Yi54PyhnPWEsaz1hLngsaD1iLGE9Yi54KTooZz1iLGs9Yi54LGg9YSxhPWEueCksYy54PGUueD8oYj1jLHE9Yy54LG09ZSxjPWUueCk6KGI9ZSxxPWUueCxtPWMsYz1jLngpKTooYS55PGIueT8oZz1hLGs9YS55LGg9YixhPWIueSk6KGc9YixrPWIueSxoPWEsYT1hLnkpLGMueTxlLnk/KGI9YyxxPWMueSxtPWUsYz1lLnkpOihiPWUscT1lLnksbT1jLGM9Yy55KSk7cmV0dXJuIGs8PXE/YTxxP1tdOmE9PT1xP2Y/W106W2JdOmE8PWM/W2IsaF06W2IsbV06az5jP1tdOms9PT1jP2Y/W106W2ddOmE8PWM/W2csaF06W2csbV19ZnVuY3Rpb24gZihhLGIsYyxkKXt2YXIgZT1iLngtYS54LGY9Yi55LWEueTtiPWMueC1hLng7CmM9Yy55LWEueTt2YXIgZz1kLngtYS54O2Q9ZC55LWEueTthPWUqYy1mKmI7ZT1lKmQtZipnO3JldHVybiBNYXRoLmFicyhhKT5OdW1iZXIuRVBTSUxPTj8oYj1nKmMtZCpiLDA8YT8wPD1lJiYwPD1iOjA8PWV8fDA8PWIpOjA8ZX1jKGEpO2IuZm9yRWFjaChjKTt2YXIgZyxoLGssbSxsLHE9e307az1hLmNvbmNhdCgpO2c9MDtmb3IoaD1iLmxlbmd0aDtnPGg7ZysrKUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGssYltnXSk7Zz0wO2ZvcihoPWsubGVuZ3RoO2c8aDtnKyspbD1rW2ddLngrIjoiK2tbZ10ueSx2b2lkIDAhPT1xW2xdJiZjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlVXRpbHM6IER1cGxpY2F0ZSBwb2ludCIsbCxnKSxxW2xdPWc7Zz1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXt2YXIgZD1oLmxlbmd0aC0xLGU9YS0xOzA+ZSYmKGU9ZCk7dmFyIGc9YSsxO2c+ZCYmKGc9MCk7ZD1mKGhbYV0saFtlXSxoW2ddLGtbYl0pO2lmKCFkKXJldHVybiExO2Q9ay5sZW5ndGgtCjE7ZT1iLTE7MD5lJiYoZT1kKTtnPWIrMTtnPmQmJihnPTApO3JldHVybihkPWYoa1tiXSxrW2VdLGtbZ10saFthXSkpPyEwOiExfWZ1bmN0aW9uIGQoYSxiKXt2YXIgYyxmO2ZvcihjPTA7YzxoLmxlbmd0aDtjKyspaWYoZj1jKzEsZiU9aC5sZW5ndGgsZj1lKGEsYixoW2NdLGhbZl0sITApLDA8Zi5sZW5ndGgpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZyhhLGMpe3ZhciBkLGYsaCxrO2ZvcihkPTA7ZDxtLmxlbmd0aDtkKyspZm9yKGY9YlttW2RdXSxoPTA7aDxmLmxlbmd0aDtoKyspaWYoaz1oKzEsayU9Zi5sZW5ndGgsaz1lKGEsYyxmW2hdLGZba10sITApLDA8ay5sZW5ndGgpcmV0dXJuITA7cmV0dXJuITF9dmFyIGg9YS5jb25jYXQoKSxrLG09W10sbCxuLHEsdSxwLEM9W10sRCxCLEksSD0wO2ZvcihsPWIubGVuZ3RoO0g8bDtIKyspbS5wdXNoKEgpO0Q9MDtmb3IodmFyIEo9MiptLmxlbmd0aDswPG0ubGVuZ3RoOyl7Si0tO2lmKDA+Sil7Y29uc29sZS5sb2coIkluZmluaXRlIExvb3AhIEhvbGVzIGxlZnQ6IisKbS5sZW5ndGgrIiwgUHJvYmFibHkgSG9sZSBvdXRzaWRlIFNoYXBlISIpO2JyZWFrfWZvcihuPUQ7bjxoLmxlbmd0aDtuKyspe3E9aFtuXTtsPS0xO2ZvcihIPTA7SDxtLmxlbmd0aDtIKyspaWYodT1tW0hdLHA9cS54KyI6IitxLnkrIjoiK3Usdm9pZCAwPT09Q1twXSl7az1iW3VdO2ZvcihCPTA7QjxrLmxlbmd0aDtCKyspaWYodT1rW0JdLGMobixCKSYmIWQocSx1KSYmIWcocSx1KSl7bD1CO20uc3BsaWNlKEgsMSk7RD1oLnNsaWNlKDAsbisxKTt1PWguc2xpY2Uobik7Qj1rLnNsaWNlKGwpO0k9ay5zbGljZSgwLGwrMSk7aD1ELmNvbmNhdChCKS5jb25jYXQoSSkuY29uY2F0KHUpO0Q9bjticmVha31pZigwPD1sKWJyZWFrO0NbcF09ITB9aWYoMDw9bClicmVha319cmV0dXJuIGh9KGEsYik7dmFyIG49emEudHJpYW5ndWxhdGUoZywhMSk7Zz0wO2ZvcihoPW4ubGVuZ3RoO2c8aDtnKyspZm9yKG09bltnXSxrPTA7Mz5rO2srKylsPW1ba10ueCsiOiIrbVtrXS55LGw9cVtsXSx2b2lkIDAhPT0KbCYmKG1ba109bCk7cmV0dXJuIG4uY29uY2F0KCl9LGlzQ2xvY2tXaXNlOmZ1bmN0aW9uKGEpe3JldHVybiAwPnphLmFyZWEoYSl9fTtkYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7ZGIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWRiO0ZhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlKTtGYS5wcm90b3R5cGUuY29uc3RydWN0b3I9RmE7RmEucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLGE9YT9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhLmFycmF5KTpbXSxiPXRoaXMuZ2V0QXR0cmlidXRlKCJ1diIpLGI9Yj9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChiLmFycmF5KTpbXSxjPXRoaXMuaW5kZXgsYz1jP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGMuYXJyYXkpOltdO3JldHVybntwb3NpdGlvbjphLHV2OmIsaW5kZXg6Y319O0ZhLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9CmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5sZW5ndGg7Yi5hcnJheXM9dGhpcy5nZXRBcnJheXMoKTtmb3IodmFyIGQ9MDtkPGM7ZCsrKXRoaXMuYWRkU2hhcGUoYVtkXSxiKTt0aGlzLnNldEluZGV4KGIuYXJyYXlzLmluZGV4KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGIuYXJyYXlzLnBvc2l0aW9uLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBDKGIuYXJyYXlzLnV2LDIpKX07RmEucHJvdG90eXBlLmFkZFNoYXBlPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIsYyl7Ynx8Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QiKTtyZXR1cm4gYi5jbG9uZSgpLm11bHRpcGx5U2NhbGFyKGMpLmFkZChhKX1mdW5jdGlvbiBkKGEsYixjKXt2YXIgZCxlLGY7ZT1hLngtYi54O2Y9YS55LWIueTtkPWMueC1hLng7dmFyIGc9Yy55LWEueSxoPWUqZStmKmY7aWYoTWF0aC5hYnMoZSpnLWYqZCk+TnVtYmVyLkVQU0lMT04pe3ZhciBrPQpNYXRoLnNxcnQoaCksbT1NYXRoLnNxcnQoZCpkK2cqZyksaD1iLngtZi9rO2I9Yi55K2UvaztnPSgoYy54LWcvbS1oKSpnLShjLnkrZC9tLWIpKmQpLyhlKmctZipkKTtkPWgrZSpnLWEueDtlPWIrZipnLWEueTtmPWQqZCtlKmU7aWYoMj49ZilyZXR1cm4gbmV3IEQoZCxlKTtmPU1hdGguc3FydChmLzIpfWVsc2UgYT0hMSxlPk51bWJlci5FUFNJTE9OP2Q+TnVtYmVyLkVQU0lMT04mJihhPSEwKTplPC1OdW1iZXIuRVBTSUxPTj9kPC1OdW1iZXIuRVBTSUxPTiYmKGE9ITApOk1hdGguc2lnbihmKT09PU1hdGguc2lnbihnKSYmKGE9ITApLGE/KGQ9LWYsZj1NYXRoLnNxcnQoaCkpOihkPWUsZT1mLGY9TWF0aC5zcXJ0KGgvMikpO3JldHVybiBuZXcgRChkL2YsZS9mKX1mdW5jdGlvbiBlKGEsYil7dmFyIGMsZDtmb3IoTj1hLmxlbmd0aDswPD0tLU47KXtjPU47ZD1OLTE7MD5kJiYoZD1hLmxlbmd0aC0xKTt2YXIgZSxmPUcrMip5O2ZvcihlPTA7ZTxmO2UrKyl7dmFyIGc9ZGEqZSxtPWRhKgooZSsxKSxuPWIrZCtnLHE9YitkK20sbT1iK2MrbTtoKGIrYytnKTtoKG4pO2gobSk7aChuKTtoKHEpO2gobSk7Zz1sLmxlbmd0aC8zO2c9RS5nZW5lcmF0ZVNpZGVXYWxsVVYoWixsLGctNixnLTMsZy0yLGctMSk7ayhnWzBdKTtrKGdbMV0pO2soZ1szXSk7ayhnWzFdKTtrKGdbMl0pO2soZ1szXSl9fX1mdW5jdGlvbiBmKGEsYixjKXtyLnB1c2goYSk7ci5wdXNoKGIpO3IucHVzaChjKX1mdW5jdGlvbiBnKGEsYixjKXtoKGEpO2goYik7aChjKTthPWwubGVuZ3RoLzM7YT1FLmdlbmVyYXRlVG9wVVYoWixsLGEtMyxhLTIsYS0xKTtrKGFbMF0pO2soYVsxXSk7ayhhWzJdKX1mdW5jdGlvbiBoKGEpe3EucHVzaChsLmxlbmd0aC8zKTtsLnB1c2goclszKmErMF0pO2wucHVzaChyWzMqYSsxXSk7bC5wdXNoKHJbMyphKzJdKX1mdW5jdGlvbiBrKGEpe24ucHVzaChhLngpO24ucHVzaChhLnkpfXZhciBtPWIuYXJyYXlzP2IuYXJyYXlzOnRoaXMuZ2V0QXJyYXlzKCksbD1tLnBvc2l0aW9uLHE9Cm0uaW5kZXgsbj1tLnV2LHI9W10sbT12b2lkIDAhPT1iLmFtb3VudD9iLmFtb3VudDoxMDAsej12b2lkIDAhPT1iLmJldmVsVGhpY2tuZXNzP2IuYmV2ZWxUaGlja25lc3M6Nix0PXZvaWQgMCE9PWIuYmV2ZWxTaXplP2IuYmV2ZWxTaXplOnotMix5PXZvaWQgMCE9PWIuYmV2ZWxTZWdtZW50cz9iLmJldmVsU2VnbWVudHM6Myx4PXZvaWQgMCE9PWIuYmV2ZWxFbmFibGVkP2IuYmV2ZWxFbmFibGVkOiEwLHY9dm9pZCAwIT09Yi5jdXJ2ZVNlZ21lbnRzP2IuY3VydmVTZWdtZW50czoxMixHPXZvaWQgMCE9PWIuc3RlcHM/Yi5zdGVwczoxLHc9Yi5leHRydWRlUGF0aCxCLEk9ITEsRT12b2lkIDAhPT1iLlVWR2VuZXJhdG9yP2IuVVZHZW5lcmF0b3I6ZGIuV29ybGRVVkdlbmVyYXRvcixGLEgsUixKO3cmJihCPXcuZ2V0U3BhY2VkUG9pbnRzKEcpLEk9ITAseD0hMSxGPXZvaWQgMCE9PWIuZnJhbWVzP2IuZnJhbWVzOncuY29tcHV0ZUZyZW5ldEZyYW1lcyhHLCExKSxIPW5ldyBwLFI9bmV3IHAsCko9bmV3IHApO3h8fCh0PXo9eT0wKTt2YXIgTSxMLFYsWj10aGlzLHc9YS5leHRyYWN0UG9pbnRzKHYpLHY9dy5zaGFwZSxQPXcuaG9sZXM7aWYodz0hemEuaXNDbG9ja1dpc2Uodikpe3Y9di5yZXZlcnNlKCk7TD0wO2ZvcihWPVAubGVuZ3RoO0w8VjtMKyspTT1QW0xdLHphLmlzQ2xvY2tXaXNlKE0pJiYoUFtMXT1NLnJldmVyc2UoKSk7dz0hMX12YXIgSz16YS50cmlhbmd1bGF0ZVNoYXBlKHYsUCksVz12O0w9MDtmb3IoVj1QLmxlbmd0aDtMPFY7TCsrKU09UFtMXSx2PXYuY29uY2F0KE0pO3ZhciBiYSxULFEsWSxVLGRhPXYubGVuZ3RoLFgsZ2E9Sy5sZW5ndGgsdz1bXSxOPTA7UT1XLmxlbmd0aDtiYT1RLTE7Zm9yKFQ9TisxO048UTtOKyssYmErKyxUKyspYmE9PT1RJiYoYmE9MCksVD09PVEmJihUPTApLHdbTl09ZChXW05dLFdbYmFdLFdbVF0pO3ZhciBpYT1bXSxrYSxoYT13LmNvbmNhdCgpO0w9MDtmb3IoVj1QLmxlbmd0aDtMPFY7TCsrKXtNPVBbTF07a2E9W107Tj0wO1E9TS5sZW5ndGg7CmJhPVEtMTtmb3IoVD1OKzE7TjxRO04rKyxiYSsrLFQrKyliYT09PVEmJihiYT0wKSxUPT09USYmKFQ9MCksa2FbTl09ZChNW05dLE1bYmFdLE1bVF0pO2lhLnB1c2goa2EpO2hhPWhhLmNvbmNhdChrYSl9Zm9yKGJhPTA7YmE8eTtiYSsrKXtRPWJhL3k7WT16Kk1hdGguY29zKFEqTWF0aC5QSS8yKTtUPXQqTWF0aC5zaW4oUSpNYXRoLlBJLzIpO049MDtmb3IoUT1XLmxlbmd0aDtOPFE7TisrKVU9YyhXW05dLHdbTl0sVCksZihVLngsVS55LC1ZKTtMPTA7Zm9yKFY9UC5sZW5ndGg7TDxWO0wrKylmb3IoTT1QW0xdLGthPWlhW0xdLE49MCxRPU0ubGVuZ3RoO048UTtOKyspVT1jKE1bTl0sa2FbTl0sVCksZihVLngsVS55LC1ZKX1UPXQ7Zm9yKE49MDtOPGRhO04rKylVPXg/Yyh2W05dLGhhW05dLFQpOnZbTl0sST8oUi5jb3B5KEYubm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIoVS54KSxILmNvcHkoRi5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKFUueSksSi5jb3B5KEJbMF0pLmFkZChSKS5hZGQoSCksCmYoSi54LEoueSxKLnopKTpmKFUueCxVLnksMCk7Zm9yKFE9MTtRPD1HO1ErKylmb3IoTj0wO048ZGE7TisrKVU9eD9jKHZbTl0saGFbTl0sVCk6dltOXSxJPyhSLmNvcHkoRi5ub3JtYWxzW1FdKS5tdWx0aXBseVNjYWxhcihVLngpLEguY29weShGLmJpbm9ybWFsc1tRXSkubXVsdGlwbHlTY2FsYXIoVS55KSxKLmNvcHkoQltRXSkuYWRkKFIpLmFkZChIKSxmKEoueCxKLnksSi56KSk6ZihVLngsVS55LG0vRypRKTtmb3IoYmE9eS0xOzA8PWJhO2JhLS0pe1E9YmEveTtZPXoqTWF0aC5jb3MoUSpNYXRoLlBJLzIpO1Q9dCpNYXRoLnNpbihRKk1hdGguUEkvMik7Tj0wO2ZvcihRPVcubGVuZ3RoO048UTtOKyspVT1jKFdbTl0sd1tOXSxUKSxmKFUueCxVLnksbStZKTtMPTA7Zm9yKFY9UC5sZW5ndGg7TDxWO0wrKylmb3IoTT1QW0xdLGthPWlhW0xdLE49MCxRPU0ubGVuZ3RoO048UTtOKyspVT1jKE1bTl0sa2FbTl0sVCksST9mKFUueCxVLnkrQltHLTFdLnksQltHLTFdLngrWSk6ZihVLngsClUueSxtK1kpfShmdW5jdGlvbigpe3ZhciBhPWwubGVuZ3RoLzM7aWYoeCl7dmFyIGM9MCpkYTtmb3IoTj0wO048Z2E7TisrKVg9S1tOXSxnKFhbMl0rYyxYWzFdK2MsWFswXStjKTtjPWRhKihHKzIqeSk7Zm9yKE49MDtOPGdhO04rKylYPUtbTl0sZyhYWzBdK2MsWFsxXStjLFhbMl0rYyl9ZWxzZXtmb3IoTj0wO048Z2E7TisrKVg9S1tOXSxnKFhbMl0sWFsxXSxYWzBdKTtmb3IoTj0wO048Z2E7TisrKVg9S1tOXSxnKFhbMF0rZGEqRyxYWzFdK2RhKkcsWFsyXStkYSpHKX1aLmFkZEdyb3VwKGEsbC5sZW5ndGgvMy1hLHZvaWQgMCE9PWIubWF0ZXJpYWw/Yi5tYXRlcmlhbDowKX0pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9bC5sZW5ndGgvMyxjPTA7ZShXLGMpO2MrPVcubGVuZ3RoO0w9MDtmb3IoVj1QLmxlbmd0aDtMPFY7TCsrKU09UFtMXSxlKE0sYyksYys9TS5sZW5ndGg7Wi5hZGRHcm91cChhLGwubGVuZ3RoLzMtYSx2b2lkIDAhPT1iLmV4dHJ1ZGVNYXRlcmlhbD9iLmV4dHJ1ZGVNYXRlcmlhbDoKMSl9KSgpO2IuYXJyYXlzfHwodGhpcy5zZXRJbmRleChxKSx0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBDKGwsMykpLHRoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IEMoYi5hcnJheXMudXYsMikpKX07ZGIuV29ybGRVVkdlbmVyYXRvcj17Z2VuZXJhdGVUb3BVVjpmdW5jdGlvbihhLGIsYyxkLGUpe2E9YlszKmRdO2Q9YlszKmQrMV07dmFyIGY9YlszKmVdO2U9YlszKmUrMV07cmV0dXJuW25ldyBEKGJbMypjXSxiWzMqYysxXSksbmV3IEQoYSxkKSxuZXcgRChmLGUpXX0sZ2VuZXJhdGVTaWRlV2FsbFVWOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXthPWJbMypjXTt2YXIgZz1iWzMqYysxXTtjPWJbMypjKzJdO3ZhciBoPWJbMypkXSxrPWJbMypkKzFdO2Q9YlszKmQrMl07dmFyIG09YlszKmVdLGw9YlszKmUrMV07ZT1iWzMqZSsyXTt2YXIgcT1iWzMqZl0sbj1iWzMqZisxXTtiPWJbMypmKzJdO3JldHVybi4wMT5NYXRoLmFicyhnLWspP1tuZXcgRChhLDEtYyksbmV3IEQoaCwKMS1kKSxuZXcgRChtLDEtZSksbmV3IEQocSwxLWIpXTpbbmV3IEQoZywxLWMpLG5ldyBEKGssMS1kKSxuZXcgRChsLDEtZSksbmV3IEQobiwxLWIpXX19O09jLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtPYy5wcm90b3R5cGUuY29uc3RydWN0b3I9T2M7V2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRmEucHJvdG90eXBlKTtXYi5wcm90b3R5cGUuY29uc3RydWN0b3I9V2I7UGMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO1BjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1QYztuYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7bmIucHJvdG90eXBlLmNvbnN0cnVjdG9yPW5iO1FjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtRYy5wcm90b3R5cGUuY29uc3RydWN0b3I9UWM7WGIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO1hiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1YYjtSYy5wcm90b3R5cGU9Ck9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO1JjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1SYztZYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7WWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVliO1piLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtaYi5wcm90b3R5cGUuY29uc3RydWN0b3I9WmI7JGIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpOyRiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0kYjthYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7YWMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWFjO29iLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtvYi5wcm90b3R5cGUuY29uc3RydWN0b3I9b2I7V2EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpO1dhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1XYTtTYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShvYi5wcm90b3R5cGUpOwpTYy5wcm90b3R5cGUuY29uc3RydWN0b3I9U2M7VGMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoV2EucHJvdG90eXBlKTtUYy5wcm90b3R5cGUuY29uc3RydWN0b3I9VGM7VWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO1VjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1VYztiYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSk7YmMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWJjO3ZhciBNYT1PYmplY3QuZnJlZXplKHtXaXJlZnJhbWVHZW9tZXRyeTpPYixQYXJhbWV0cmljR2VvbWV0cnk6RmMsUGFyYW1ldHJpY0J1ZmZlckdlb21ldHJ5OlBiLFRldHJhaGVkcm9uR2VvbWV0cnk6SGMsVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeTpRYixPY3RhaGVkcm9uR2VvbWV0cnk6SWMsT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5Om1iLEljb3NhaGVkcm9uR2VvbWV0cnk6SmMsSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeTpSYixEb2RlY2FoZWRyb25HZW9tZXRyeTpLYywKRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnk6U2IsUG9seWhlZHJvbkdlb21ldHJ5OkdjLFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeTppYSxUdWJlR2VvbWV0cnk6TGMsVHViZUJ1ZmZlckdlb21ldHJ5OlRiLFRvcnVzS25vdEdlb21ldHJ5Ok1jLFRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5OlViLFRvcnVzR2VvbWV0cnk6TmMsVG9ydXNCdWZmZXJHZW9tZXRyeTpWYixUZXh0R2VvbWV0cnk6T2MsVGV4dEJ1ZmZlckdlb21ldHJ5OldiLFNwaGVyZUdlb21ldHJ5OlBjLFNwaGVyZUJ1ZmZlckdlb21ldHJ5Om5iLFJpbmdHZW9tZXRyeTpRYyxSaW5nQnVmZmVyR2VvbWV0cnk6WGIsUGxhbmVHZW9tZXRyeTp4YyxQbGFuZUJ1ZmZlckdlb21ldHJ5OmxiLExhdGhlR2VvbWV0cnk6UmMsTGF0aGVCdWZmZXJHZW9tZXRyeTpZYixTaGFwZUdlb21ldHJ5OlpiLFNoYXBlQnVmZmVyR2VvbWV0cnk6JGIsRXh0cnVkZUdlb21ldHJ5OmRiLEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTpGYSxFZGdlc0dlb21ldHJ5OmFjLApDb25lR2VvbWV0cnk6U2MsQ29uZUJ1ZmZlckdlb21ldHJ5OlRjLEN5bGluZGVyR2VvbWV0cnk6b2IsQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeTpXYSxDaXJjbGVHZW9tZXRyeTpVYyxDaXJjbGVCdWZmZXJHZW9tZXRyeTpiYyxCb3hHZW9tZXRyeTpJYixCb3hCdWZmZXJHZW9tZXRyeTprYn0pO2NjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVhLnByb3RvdHlwZSk7Y2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPWNjO2NjLnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO2RjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVhLnByb3RvdHlwZSk7ZGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWRjO2RjLnByb3RvdHlwZS5pc1Jhd1NoYWRlck1hdGVyaWFsPSEwO1JhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTtSYS5wcm90b3R5cGUuY29uc3RydWN0b3I9UmE7UmEucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw9ITA7UmEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsCmEpO3RoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9O3RoaXMuY29sb3IuY29weShhLmNvbG9yKTt0aGlzLnJvdWdobmVzcz1hLnJvdWdobmVzczt0aGlzLm1ldGFsbmVzcz1hLm1ldGFsbmVzczt0aGlzLm1hcD1hLm1hcDt0aGlzLmxpZ2h0TWFwPWEubGlnaHRNYXA7dGhpcy5saWdodE1hcEludGVuc2l0eT1hLmxpZ2h0TWFwSW50ZW5zaXR5O3RoaXMuYW9NYXA9YS5hb01hcDt0aGlzLmFvTWFwSW50ZW5zaXR5PWEuYW9NYXBJbnRlbnNpdHk7dGhpcy5lbWlzc2l2ZS5jb3B5KGEuZW1pc3NpdmUpO3RoaXMuZW1pc3NpdmVNYXA9YS5lbWlzc2l2ZU1hcDt0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PWEuZW1pc3NpdmVJbnRlbnNpdHk7dGhpcy5idW1wTWFwPWEuYnVtcE1hcDt0aGlzLmJ1bXBTY2FsZT1hLmJ1bXBTY2FsZTt0aGlzLm5vcm1hbE1hcD1hLm5vcm1hbE1hcDt0aGlzLm5vcm1hbFNjYWxlLmNvcHkoYS5ub3JtYWxTY2FsZSk7dGhpcy5kaXNwbGFjZW1lbnRNYXA9YS5kaXNwbGFjZW1lbnRNYXA7CnRoaXMuZGlzcGxhY2VtZW50U2NhbGU9YS5kaXNwbGFjZW1lbnRTY2FsZTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9YS5kaXNwbGFjZW1lbnRCaWFzO3RoaXMucm91Z2huZXNzTWFwPWEucm91Z2huZXNzTWFwO3RoaXMubWV0YWxuZXNzTWFwPWEubWV0YWxuZXNzTWFwO3RoaXMuYWxwaGFNYXA9YS5hbHBoYU1hcDt0aGlzLmVudk1hcD1hLmVudk1hcDt0aGlzLmVudk1hcEludGVuc2l0eT1hLmVudk1hcEludGVuc2l0eTt0aGlzLnJlZnJhY3Rpb25SYXRpbz1hLnJlZnJhY3Rpb25SYXRpbzt0aGlzLndpcmVmcmFtZT1hLndpcmVmcmFtZTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD1hLndpcmVmcmFtZUxpbmV3aWR0aDt0aGlzLndpcmVmcmFtZUxpbmVjYXA9YS53aXJlZnJhbWVMaW5lY2FwO3RoaXMud2lyZWZyYW1lTGluZWpvaW49YS53aXJlZnJhbWVMaW5lam9pbjt0aGlzLnNraW5uaW5nPWEuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9YS5tb3JwaFRhcmdldHM7dGhpcy5tb3JwaE5vcm1hbHM9CmEubW9ycGhOb3JtYWxzO3JldHVybiB0aGlzfTtwYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSYS5wcm90b3R5cGUpO3BiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1wYjtwYi5wcm90b3R5cGUuaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD0hMDtwYi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtSYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5kZWZpbmVzPXtQSFlTSUNBTDoiIn07dGhpcy5yZWZsZWN0aXZpdHk9YS5yZWZsZWN0aXZpdHk7dGhpcy5jbGVhckNvYXQ9YS5jbGVhckNvYXQ7dGhpcy5jbGVhckNvYXRSb3VnaG5lc3M9YS5jbGVhckNvYXRSb3VnaG5lc3M7cmV0dXJuIHRoaXN9O3RhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTt0YS5wcm90b3R5cGUuY29uc3RydWN0b3I9dGE7dGEucHJvdG90eXBlLmlzTWVzaFBob25nTWF0ZXJpYWw9ITA7dGEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsCmEpO3RoaXMuY29sb3IuY29weShhLmNvbG9yKTt0aGlzLnNwZWN1bGFyLmNvcHkoYS5zcGVjdWxhcik7dGhpcy5zaGluaW5lc3M9YS5zaGluaW5lc3M7dGhpcy5tYXA9YS5tYXA7dGhpcy5saWdodE1hcD1hLmxpZ2h0TWFwO3RoaXMubGlnaHRNYXBJbnRlbnNpdHk9YS5saWdodE1hcEludGVuc2l0eTt0aGlzLmFvTWFwPWEuYW9NYXA7dGhpcy5hb01hcEludGVuc2l0eT1hLmFvTWFwSW50ZW5zaXR5O3RoaXMuZW1pc3NpdmUuY29weShhLmVtaXNzaXZlKTt0aGlzLmVtaXNzaXZlTWFwPWEuZW1pc3NpdmVNYXA7dGhpcy5lbWlzc2l2ZUludGVuc2l0eT1hLmVtaXNzaXZlSW50ZW5zaXR5O3RoaXMuYnVtcE1hcD1hLmJ1bXBNYXA7dGhpcy5idW1wU2NhbGU9YS5idW1wU2NhbGU7dGhpcy5ub3JtYWxNYXA9YS5ub3JtYWxNYXA7dGhpcy5ub3JtYWxTY2FsZS5jb3B5KGEubm9ybWFsU2NhbGUpO3RoaXMuZGlzcGxhY2VtZW50TWFwPWEuZGlzcGxhY2VtZW50TWFwO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9CmEuZGlzcGxhY2VtZW50U2NhbGU7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPWEuZGlzcGxhY2VtZW50Qmlhczt0aGlzLnNwZWN1bGFyTWFwPWEuc3BlY3VsYXJNYXA7dGhpcy5hbHBoYU1hcD1hLmFscGhhTWFwO3RoaXMuZW52TWFwPWEuZW52TWFwO3RoaXMuY29tYmluZT1hLmNvbWJpbmU7dGhpcy5yZWZsZWN0aXZpdHk9YS5yZWZsZWN0aXZpdHk7dGhpcy5yZWZyYWN0aW9uUmF0aW89YS5yZWZyYWN0aW9uUmF0aW87dGhpcy53aXJlZnJhbWU9YS53aXJlZnJhbWU7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9YS53aXJlZnJhbWVMaW5ld2lkdGg7dGhpcy53aXJlZnJhbWVMaW5lY2FwPWEud2lyZWZyYW1lTGluZWNhcDt0aGlzLndpcmVmcmFtZUxpbmVqb2luPWEud2lyZWZyYW1lTGluZWpvaW47dGhpcy5za2lubmluZz1hLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWEubW9ycGhUYXJnZXRzO3RoaXMubW9ycGhOb3JtYWxzPWEubW9ycGhOb3JtYWxzO3JldHVybiB0aGlzfTtxYi5wcm90b3R5cGU9Ck9iamVjdC5jcmVhdGUodGEucHJvdG90eXBlKTtxYi5wcm90b3R5cGUuY29uc3RydWN0b3I9cWI7cWIucHJvdG90eXBlLmlzTWVzaFRvb25NYXRlcmlhbD0hMDtxYi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXt0YS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5ncmFkaWVudE1hcD1hLmdyYWRpZW50TWFwO3JldHVybiB0aGlzfTtyYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShaLnByb3RvdHlwZSk7cmIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXJiO3JiLnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbD0hMDtyYi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhKXtaLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLmJ1bXBNYXA9YS5idW1wTWFwO3RoaXMuYnVtcFNjYWxlPWEuYnVtcFNjYWxlO3RoaXMubm9ybWFsTWFwPWEubm9ybWFsTWFwO3RoaXMubm9ybWFsU2NhbGUuY29weShhLm5vcm1hbFNjYWxlKTt0aGlzLmRpc3BsYWNlbWVudE1hcD1hLmRpc3BsYWNlbWVudE1hcDsKdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT1hLmRpc3BsYWNlbWVudFNjYWxlO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz1hLmRpc3BsYWNlbWVudEJpYXM7dGhpcy53aXJlZnJhbWU9YS53aXJlZnJhbWU7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9YS53aXJlZnJhbWVMaW5ld2lkdGg7dGhpcy5za2lubmluZz1hLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWEubW9ycGhUYXJnZXRzO3RoaXMubW9ycGhOb3JtYWxzPWEubW9ycGhOb3JtYWxzO3JldHVybiB0aGlzfTtzYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShaLnByb3RvdHlwZSk7c2IucHJvdG90eXBlLmNvbnN0cnVjdG9yPXNiO3NiLnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITA7c2IucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSl7Wi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5jb2xvci5jb3B5KGEuY29sb3IpO3RoaXMubWFwPWEubWFwO3RoaXMubGlnaHRNYXA9YS5saWdodE1hcDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PQphLmxpZ2h0TWFwSW50ZW5zaXR5O3RoaXMuYW9NYXA9YS5hb01hcDt0aGlzLmFvTWFwSW50ZW5zaXR5PWEuYW9NYXBJbnRlbnNpdHk7dGhpcy5lbWlzc2l2ZS5jb3B5KGEuZW1pc3NpdmUpO3RoaXMuZW1pc3NpdmVNYXA9YS5lbWlzc2l2ZU1hcDt0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PWEuZW1pc3NpdmVJbnRlbnNpdHk7dGhpcy5zcGVjdWxhck1hcD1hLnNwZWN1bGFyTWFwO3RoaXMuYWxwaGFNYXA9YS5hbHBoYU1hcDt0aGlzLmVudk1hcD1hLmVudk1hcDt0aGlzLmNvbWJpbmU9YS5jb21iaW5lO3RoaXMucmVmbGVjdGl2aXR5PWEucmVmbGVjdGl2aXR5O3RoaXMucmVmcmFjdGlvblJhdGlvPWEucmVmcmFjdGlvblJhdGlvO3RoaXMud2lyZWZyYW1lPWEud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWEud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMud2lyZWZyYW1lTGluZWNhcD1hLndpcmVmcmFtZUxpbmVjYXA7dGhpcy53aXJlZnJhbWVMaW5lam9pbj1hLndpcmVmcmFtZUxpbmVqb2luOwp0aGlzLnNraW5uaW5nPWEuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9YS5tb3JwaFRhcmdldHM7dGhpcy5tb3JwaE5vcm1hbHM9YS5tb3JwaE5vcm1hbHM7cmV0dXJuIHRoaXN9O3RiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFoucHJvdG90eXBlKTt0Yi5wcm90b3R5cGUuY29uc3RydWN0b3I9dGI7dGIucHJvdG90eXBlLmlzTGluZURhc2hlZE1hdGVyaWFsPSEwO3RiLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGEpe1oucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMuY29sb3IuY29weShhLmNvbG9yKTt0aGlzLmxpbmV3aWR0aD1hLmxpbmV3aWR0aDt0aGlzLnNjYWxlPWEuc2NhbGU7dGhpcy5kYXNoU2l6ZT1hLmRhc2hTaXplO3RoaXMuZ2FwU2l6ZT1hLmdhcFNpemU7cmV0dXJuIHRoaXN9O3ZhciBsZz1PYmplY3QuZnJlZXplKHtTaGFkb3dNYXRlcmlhbDpjYyxTcHJpdGVNYXRlcmlhbDpjYixSYXdTaGFkZXJNYXRlcmlhbDpkYyxTaGFkZXJNYXRlcmlhbDpFYSxQb2ludHNNYXRlcmlhbDpMYSwKTWVzaFBoeXNpY2FsTWF0ZXJpYWw6cGIsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6UmEsTWVzaFBob25nTWF0ZXJpYWw6dGEsTWVzaFRvb25NYXRlcmlhbDpxYixNZXNoTm9ybWFsTWF0ZXJpYWw6cmIsTWVzaExhbWJlcnRNYXRlcmlhbDpzYixNZXNoRGVwdGhNYXRlcmlhbDokYSxNZXNoQmFzaWNNYXRlcmlhbDpOYSxMaW5lRGFzaGVkTWF0ZXJpYWw6dGIsTGluZUJhc2ljTWF0ZXJpYWw6aGEsTWF0ZXJpYWw6Wn0pLGhkPXtlbmFibGVkOiExLGZpbGVzOnt9LGFkZDpmdW5jdGlvbihhLGIpeyExIT09dGhpcy5lbmFibGVkJiYodGhpcy5maWxlc1thXT1iKX0sZ2V0OmZ1bmN0aW9uKGEpe2lmKCExIT09dGhpcy5lbmFibGVkKXJldHVybiB0aGlzLmZpbGVzW2FdfSxyZW1vdmU6ZnVuY3Rpb24oYSl7ZGVsZXRlIHRoaXMuZmlsZXNbYV19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5maWxlcz17fX19LEFhPW5ldyBaZDtPYmplY3QuYXNzaWduKHVhLnByb3RvdHlwZSx7bG9hZDpmdW5jdGlvbihhLGIsCmMsZCl7dm9pZCAwPT09YSYmKGE9IiIpO3ZvaWQgMCE9PXRoaXMucGF0aCYmKGE9dGhpcy5wYXRoK2EpO3ZhciBlPXRoaXMsZj1oZC5nZXQoYSk7aWYodm9pZCAwIT09ZilyZXR1cm4gZS5tYW5hZ2VyLml0ZW1TdGFydChhKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YiYmYihmKTtlLm1hbmFnZXIuaXRlbUVuZChhKX0sMCksZjt2YXIgZz1hLm1hdGNoKC9eZGF0YTooLio/KSg7YmFzZTY0KT8sKC4qKSQvKTtpZihnKXt2YXIgaD1nWzFdLGs9ISFnWzJdLGc9Z1szXSxnPXdpbmRvdy5kZWNvZGVVUklDb21wb25lbnQoZyk7ayYmKGc9d2luZG93LmF0b2IoZykpO3RyeXt2YXIgbSxsPSh0aGlzLnJlc3BvbnNlVHlwZXx8IiIpLnRvTG93ZXJDYXNlKCk7c3dpdGNoKGwpe2Nhc2UgImFycmF5YnVmZmVyIjpjYXNlICJibG9iIjptPW5ldyBBcnJheUJ1ZmZlcihnLmxlbmd0aCk7Zm9yKHZhciBxPW5ldyBVaW50OEFycmF5KG0pLGs9MDtrPGcubGVuZ3RoO2srKylxW2tdPWcuY2hhckNvZGVBdChrKTsKImJsb2IiPT09bCYmKG09bmV3IEJsb2IoW21dLHt0eXBlOmh9KSk7YnJlYWs7Y2FzZSAiZG9jdW1lbnQiOm09KG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhnLGgpO2JyZWFrO2Nhc2UgImpzb24iOm09SlNPTi5wYXJzZShnKTticmVhaztkZWZhdWx0Om09Z313aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2ImJmIobSk7ZS5tYW5hZ2VyLml0ZW1FbmQoYSl9LDApfWNhdGNoKHApe3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZCYmZChwKTtlLm1hbmFnZXIuaXRlbUVuZChhKTtlLm1hbmFnZXIuaXRlbUVycm9yKGEpfSwwKX19ZWxzZXt2YXIgbj1uZXcgWE1MSHR0cFJlcXVlc3Q7bi5vcGVuKCJHRVQiLGEsITApO24uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oYyl7dmFyIGY9Yy50YXJnZXQucmVzcG9uc2U7aGQuYWRkKGEsZik7MjAwPT09dGhpcy5zdGF0dXM/KGImJmIoZiksZS5tYW5hZ2VyLml0ZW1FbmQoYSkpOjA9PT10aGlzLnN0YXR1cz8oY29uc29sZS53YXJuKCJUSFJFRS5GaWxlTG9hZGVyOiBIVFRQIFN0YXR1cyAwIHJlY2VpdmVkLiIpLApiJiZiKGYpLGUubWFuYWdlci5pdGVtRW5kKGEpKTooZCYmZChjKSxlLm1hbmFnZXIuaXRlbUVuZChhKSxlLm1hbmFnZXIuaXRlbUVycm9yKGEpKX0sITEpO3ZvaWQgMCE9PWMmJm4uYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGZ1bmN0aW9uKGEpe2MoYSl9LCExKTtuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihiKXtkJiZkKGIpO2UubWFuYWdlci5pdGVtRW5kKGEpO2UubWFuYWdlci5pdGVtRXJyb3IoYSl9LCExKTt2b2lkIDAhPT10aGlzLnJlc3BvbnNlVHlwZSYmKG4ucmVzcG9uc2VUeXBlPXRoaXMucmVzcG9uc2VUeXBlKTt2b2lkIDAhPT10aGlzLndpdGhDcmVkZW50aWFscyYmKG4ud2l0aENyZWRlbnRpYWxzPXRoaXMud2l0aENyZWRlbnRpYWxzKTtuLm92ZXJyaWRlTWltZVR5cGUmJm4ub3ZlcnJpZGVNaW1lVHlwZSh2b2lkIDAhPT10aGlzLm1pbWVUeXBlP3RoaXMubWltZVR5cGU6InRleHQvcGxhaW4iKTtmb3IoaCBpbiB0aGlzLnJlcXVlc3RIZWFkZXIpbi5zZXRSZXF1ZXN0SGVhZGVyKGgsCnRoaXMucmVxdWVzdEhlYWRlcltoXSk7bi5zZW5kKG51bGwpfWUubWFuYWdlci5pdGVtU3RhcnQoYSk7cmV0dXJuIG59LHNldFBhdGg6ZnVuY3Rpb24oYSl7dGhpcy5wYXRoPWE7cmV0dXJuIHRoaXN9LHNldFJlc3BvbnNlVHlwZTpmdW5jdGlvbihhKXt0aGlzLnJlc3BvbnNlVHlwZT1hO3JldHVybiB0aGlzfSxzZXRXaXRoQ3JlZGVudGlhbHM6ZnVuY3Rpb24oYSl7dGhpcy53aXRoQ3JlZGVudGlhbHM9YTtyZXR1cm4gdGhpc30sc2V0TWltZVR5cGU6ZnVuY3Rpb24oYSl7dGhpcy5taW1lVHlwZT1hO3JldHVybiB0aGlzfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEpe3RoaXMucmVxdWVzdEhlYWRlcj1hO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oUWUucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGUoZSl7ay5sb2FkKGFbZV0sZnVuY3Rpb24oYSl7YT1mLl9wYXJzZXIoYSwhMCk7Z1tlXT17d2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHQsCmZvcm1hdDphLmZvcm1hdCxtaXBtYXBzOmEubWlwbWFwc307bSs9MTs2PT09bSYmKDE9PT1hLm1pcG1hcENvdW50JiYoaC5taW5GaWx0ZXI9MTAwNiksaC5mb3JtYXQ9YS5mb3JtYXQsaC5uZWVkc1VwZGF0ZT0hMCxiJiZiKGgpKX0sYyxkKX12YXIgZj10aGlzLGc9W10saD1uZXcgTmI7aC5pbWFnZT1nO3ZhciBrPW5ldyB1YSh0aGlzLm1hbmFnZXIpO2suc2V0UGF0aCh0aGlzLnBhdGgpO2suc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpO2lmKEFycmF5LmlzQXJyYXkoYSkpZm9yKHZhciBtPTAsbD0wLHE9YS5sZW5ndGg7bDxxOysrbCllKGwpO2Vsc2Ugay5sb2FkKGEsZnVuY3Rpb24oYSl7YT1mLl9wYXJzZXIoYSwhMCk7aWYoYS5pc0N1YmVtYXApZm9yKHZhciBjPWEubWlwbWFwcy5sZW5ndGgvYS5taXBtYXBDb3VudCxkPTA7ZDxjO2QrKyl7Z1tkXT17bWlwbWFwczpbXX07Zm9yKHZhciBlPTA7ZTxhLm1pcG1hcENvdW50O2UrKylnW2RdLm1pcG1hcHMucHVzaChhLm1pcG1hcHNbZCoKYS5taXBtYXBDb3VudCtlXSksZ1tkXS5mb3JtYXQ9YS5mb3JtYXQsZ1tkXS53aWR0aD1hLndpZHRoLGdbZF0uaGVpZ2h0PWEuaGVpZ2h0fWVsc2UgaC5pbWFnZS53aWR0aD1hLndpZHRoLGguaW1hZ2UuaGVpZ2h0PWEuaGVpZ2h0LGgubWlwbWFwcz1hLm1pcG1hcHM7MT09PWEubWlwbWFwQ291bnQmJihoLm1pbkZpbHRlcj0xMDA2KTtoLmZvcm1hdD1hLmZvcm1hdDtoLm5lZWRzVXBkYXRlPSEwO2ImJmIoaCl9LGMsZCk7cmV0dXJuIGh9LHNldFBhdGg6ZnVuY3Rpb24oYSl7dGhpcy5wYXRoPWE7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbigkZC5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcyxmPW5ldyBlYixnPW5ldyB1YSh0aGlzLm1hbmFnZXIpO2cuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpO2cubG9hZChhLGZ1bmN0aW9uKGEpe2lmKGE9ZS5fcGFyc2VyKGEpKXZvaWQgMCE9PWEuaW1hZ2U/Zi5pbWFnZT1hLmltYWdlOnZvaWQgMCE9PQphLmRhdGEmJihmLmltYWdlLndpZHRoPWEud2lkdGgsZi5pbWFnZS5oZWlnaHQ9YS5oZWlnaHQsZi5pbWFnZS5kYXRhPWEuZGF0YSksZi53cmFwUz12b2lkIDAhPT1hLndyYXBTP2Eud3JhcFM6MTAwMSxmLndyYXBUPXZvaWQgMCE9PWEud3JhcFQ/YS53cmFwVDoxMDAxLGYubWFnRmlsdGVyPXZvaWQgMCE9PWEubWFnRmlsdGVyP2EubWFnRmlsdGVyOjEwMDYsZi5taW5GaWx0ZXI9dm9pZCAwIT09YS5taW5GaWx0ZXI/YS5taW5GaWx0ZXI6MTAwOCxmLmFuaXNvdHJvcHk9dm9pZCAwIT09YS5hbmlzb3Ryb3B5P2EuYW5pc290cm9weToxLHZvaWQgMCE9PWEuZm9ybWF0JiYoZi5mb3JtYXQ9YS5mb3JtYXQpLHZvaWQgMCE9PWEudHlwZSYmKGYudHlwZT1hLnR5cGUpLHZvaWQgMCE9PWEubWlwbWFwcyYmKGYubWlwbWFwcz1hLm1pcG1hcHMpLDE9PT1hLm1pcG1hcENvdW50JiYoZi5taW5GaWx0ZXI9MTAwNiksZi5uZWVkc1VwZGF0ZT0hMCxiJiZiKGYsYSl9LGMsZCk7cmV0dXJuIGZ9fSk7T2JqZWN0LmFzc2lnbihWYy5wcm90b3R5cGUsCntsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe3ZvaWQgMD09PWEmJihhPSIiKTt2b2lkIDAhPT10aGlzLnBhdGgmJihhPXRoaXMucGF0aCthKTt2YXIgZT10aGlzLGY9aGQuZ2V0KGEpO2lmKHZvaWQgMCE9PWYpcmV0dXJuIGUubWFuYWdlci5pdGVtU3RhcnQoYSksc2V0VGltZW91dChmdW5jdGlvbigpe2ImJmIoZik7ZS5tYW5hZ2VyLml0ZW1FbmQoYSl9LDApLGY7Yz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJpbWciKTtjLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7aGQuYWRkKGEsdGhpcyk7YiYmYih0aGlzKTtlLm1hbmFnZXIuaXRlbUVuZChhKX0sITEpO2MuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKGIpe2QmJmQoYik7ZS5tYW5hZ2VyLml0ZW1FbmQoYSk7ZS5tYW5hZ2VyLml0ZW1FcnJvcihhKX0sITEpOyJkYXRhOiIhPT1hLnN1YnN0cigwLDUpJiZ2b2lkIDAhPT10aGlzLmNyb3NzT3JpZ2luJiYKKGMuY3Jvc3NPcmlnaW49dGhpcy5jcm9zc09yaWdpbik7ZS5tYW5hZ2VyLml0ZW1TdGFydChhKTtjLnNyYz1hO3JldHVybiBjfSxzZXRDcm9zc09yaWdpbjpmdW5jdGlvbihhKXt0aGlzLmNyb3NzT3JpZ2luPWE7cmV0dXJuIHRoaXN9LHNldFBhdGg6ZnVuY3Rpb24oYSl7dGhpcy5wYXRoPWE7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihhZS5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYSxiLGMsZCl7ZnVuY3Rpb24gZShjKXtnLmxvYWQoYVtjXSxmdW5jdGlvbihhKXtmLmltYWdlc1tjXT1hO2grKzs2PT09aCYmKGYubmVlZHNVcGRhdGU9ITAsYiYmYihmKSl9LHZvaWQgMCxkKX12YXIgZj1uZXcgWmEsZz1uZXcgVmModGhpcy5tYW5hZ2VyKTtnLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2cuc2V0UGF0aCh0aGlzLnBhdGgpO3ZhciBoPTA7Zm9yKGM9MDtjPGEubGVuZ3RoOysrYyllKGMpO3JldHVybiBmfSxzZXRDcm9zc09yaWdpbjpmdW5jdGlvbihhKXt0aGlzLmNyb3NzT3JpZ2luPQphO3JldHVybiB0aGlzfSxzZXRQYXRoOmZ1bmN0aW9uKGEpe3RoaXMucGF0aD1hO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oc2QucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW5ldyBWYyh0aGlzLm1hbmFnZXIpO2Uuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7ZS5zZXRQYXRoKHRoaXMucGF0aCk7dmFyIGY9bmV3IFg7Zi5pbWFnZT1lLmxvYWQoYSxmdW5jdGlvbigpe3ZhciBjPTA8YS5zZWFyY2goL1wuKGpwZ3xqcGVnKSQvKXx8MD09PWEuc2VhcmNoKC9eZGF0YVw6aW1hZ2VcL2pwZWcvKTtmLmZvcm1hdD1jPzEwMjI6MTAyMztmLm5lZWRzVXBkYXRlPSEwO3ZvaWQgMCE9PWImJmIoZil9LGMsZCk7cmV0dXJuIGZ9LHNldENyb3NzT3JpZ2luOmZ1bmN0aW9uKGEpe3RoaXMuY3Jvc3NPcmlnaW49YTtyZXR1cm4gdGhpc30sc2V0UGF0aDpmdW5jdGlvbihhKXt0aGlzLnBhdGg9YTtyZXR1cm4gdGhpc319KTttYS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSwKe2NvbnN0cnVjdG9yOm1hLGlzTGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXtCLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLmNvbG9yLmNvcHkoYS5jb2xvcik7dGhpcy5pbnRlbnNpdHk9YS5pbnRlbnNpdHk7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihhKXthPUIucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsYSk7YS5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKTthLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHk7dm9pZCAwIT09dGhpcy5ncm91bmRDb2xvciYmKGEub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpO3ZvaWQgMCE9PXRoaXMuZGlzdGFuY2UmJihhLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKTt2b2lkIDAhPT10aGlzLmFuZ2xlJiYoYS5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSk7dm9pZCAwIT09dGhpcy5kZWNheSYmKGEub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpO3ZvaWQgMCE9PQp0aGlzLnBlbnVtYnJhJiYoYS5vYmplY3QucGVudW1icmE9dGhpcy5wZW51bWJyYSk7dm9pZCAwIT09dGhpcy5zaGFkb3cmJihhLm9iamVjdC5zaGFkb3c9dGhpcy5zaGFkb3cudG9KU09OKCkpO3JldHVybiBhfX0pO3RkLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobWEucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6dGQsaXNIZW1pc3BoZXJlTGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXttYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5ncm91bmRDb2xvci5jb3B5KGEuZ3JvdW5kQ29sb3IpO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24odWIucHJvdG90eXBlLHtjb3B5OmZ1bmN0aW9uKGEpe3RoaXMuY2FtZXJhPWEuY2FtZXJhLmNsb25lKCk7dGhpcy5iaWFzPWEuYmlhczt0aGlzLnJhZGl1cz1hLnJhZGl1czt0aGlzLm1hcFNpemUuY29weShhLm1hcFNpemUpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sCnRvSlNPTjpmdW5jdGlvbigpe3ZhciBhPXt9OzAhPT10aGlzLmJpYXMmJihhLmJpYXM9dGhpcy5iaWFzKTsxIT09dGhpcy5yYWRpdXMmJihhLnJhZGl1cz10aGlzLnJhZGl1cyk7aWYoNTEyIT09dGhpcy5tYXBTaXplLnh8fDUxMiE9PXRoaXMubWFwU2l6ZS55KWEubWFwU2l6ZT10aGlzLm1hcFNpemUudG9BcnJheSgpO2EuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0O2RlbGV0ZSBhLmNhbWVyYS5tYXRyaXg7cmV0dXJuIGF9fSk7dWQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZSh1Yi5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp1ZCxpc1Nwb3RMaWdodFNoYWRvdzohMCx1cGRhdGU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jYW1lcmEsYz0yKlkuUkFEMkRFRyphLmFuZ2xlLGQ9dGhpcy5tYXBTaXplLndpZHRoL3RoaXMubWFwU2l6ZS5oZWlnaHQ7YT1hLmRpc3RhbmNlfHxiLmZhcjtpZihjIT09Yi5mb3Z8fGQhPT1iLmFzcGVjdHx8YSE9PWIuZmFyKWIuZm92PQpjLGIuYXNwZWN0PWQsYi5mYXI9YSxiLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX19KTt2ZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG1hLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnZkLGlzU3BvdExpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24oYSl7bWEucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGEpO3RoaXMuZGlzdGFuY2U9YS5kaXN0YW5jZTt0aGlzLmFuZ2xlPWEuYW5nbGU7dGhpcy5wZW51bWJyYT1hLnBlbnVtYnJhO3RoaXMuZGVjYXk9YS5kZWNheTt0aGlzLnRhcmdldD1hLnRhcmdldC5jbG9uZSgpO3RoaXMuc2hhZG93PWEuc2hhZG93LmNsb25lKCk7cmV0dXJuIHRoaXN9fSk7d2QucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShtYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp3ZCxpc1BvaW50TGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXttYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5kaXN0YW5jZT1hLmRpc3RhbmNlOwp0aGlzLmRlY2F5PWEuZGVjYXk7dGhpcy5zaGFkb3c9YS5zaGFkb3cuY2xvbmUoKTtyZXR1cm4gdGhpc319KTt4ZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHViLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnhkfSk7eWQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShtYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp5ZCxpc0RpcmVjdGlvbmFsTGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXttYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy50YXJnZXQ9YS50YXJnZXQuY2xvbmUoKTt0aGlzLnNoYWRvdz1hLnNoYWRvdy5jbG9uZSgpO3JldHVybiB0aGlzfX0pO3pkLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobWEucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6emQsaXNBbWJpZW50TGlnaHQ6ITB9KTtBZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG1hLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkFkLAppc1JlY3RBcmVhTGlnaHQ6ITAsY29weTpmdW5jdGlvbihhKXttYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy53aWR0aD1hLndpZHRoO3RoaXMuaGVpZ2h0PWEuaGVpZ2h0O3JldHVybiB0aGlzfSx0b0pTT046ZnVuY3Rpb24oYSl7YT1tYS5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxhKTthLm9iamVjdC53aWR0aD10aGlzLndpZHRoO2Eub2JqZWN0LmhlaWdodD10aGlzLmhlaWdodDtyZXR1cm4gYX19KTt2YXIgdmE9e2FycmF5U2xpY2U6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB2YS5pc1R5cGVkQXJyYXkoYSk/bmV3IGEuY29uc3RydWN0b3IoYS5zdWJhcnJheShiLHZvaWQgMCE9PWM/YzphLmxlbmd0aCkpOmEuc2xpY2UoYixjKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4hYXx8IWMmJmEuY29uc3RydWN0b3I9PT1iP2E6Im51bWJlciI9PT10eXBlb2YgYi5CWVRFU19QRVJfRUxFTUVOVD9uZXcgYihhKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhKX0sCmlzVHlwZWRBcnJheTpmdW5jdGlvbihhKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGEpJiYhKGEgaW5zdGFuY2VvZiBEYXRhVmlldyl9LGdldEtleWZyYW1lT3JkZXI6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEubGVuZ3RoLGM9QXJyYXkoYiksZD0wO2QhPT1iOysrZCljW2RdPWQ7Yy5zb3J0KGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGFbYl0tYVtjXX0pO3JldHVybiBjfSxzb3J0ZWRBcnJheTpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPWEubGVuZ3RoLGU9bmV3IGEuY29uc3RydWN0b3IoZCksZj0wLGc9MDtnIT09ZDsrK2YpZm9yKHZhciBoPWNbZl0qYixrPTA7ayE9PWI7KytrKWVbZysrXT1hW2gra107cmV0dXJuIGV9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKGEsYixjLGQpe2Zvcih2YXIgZT0xLGY9YVswXTt2b2lkIDAhPT1mJiZ2b2lkIDA9PT1mW2RdOylmPWFbZSsrXTtpZih2b2lkIDAhPT1mKXt2YXIgZz1mW2RdO2lmKHZvaWQgMCE9PWcpaWYoQXJyYXkuaXNBcnJheShnKSl7ZG8gZz0KZltkXSx2b2lkIDAhPT1nJiYoYi5wdXNoKGYudGltZSksYy5wdXNoLmFwcGx5KGMsZykpLGY9YVtlKytdO3doaWxlKHZvaWQgMCE9PWYpfWVsc2UgaWYodm9pZCAwIT09Zy50b0FycmF5KXtkbyBnPWZbZF0sdm9pZCAwIT09ZyYmKGIucHVzaChmLnRpbWUpLGcudG9BcnJheShjLGMubGVuZ3RoKSksZj1hW2UrK107d2hpbGUodm9pZCAwIT09Zil9ZWxzZXtkbyBnPWZbZF0sdm9pZCAwIT09ZyYmKGIucHVzaChmLnRpbWUpLGMucHVzaChnKSksZj1hW2UrK107d2hpbGUodm9pZCAwIT09Zil9fX19O09iamVjdC5hc3NpZ24oRGEucHJvdG90eXBlLHtldmFsdWF0ZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxjPXRoaXMuX2NhY2hlZEluZGV4LGQ9YltjXSxlPWJbYy0xXTthOntiOntjOntkOmlmKCEoYTxkKSl7Zm9yKHZhciBmPWMrMjs7KXtpZih2b2lkIDA9PT1kKXtpZihhPGUpYnJlYWsgZDt0aGlzLl9jYWNoZWRJbmRleD1jPWIubGVuZ3RoO3JldHVybiB0aGlzLmFmdGVyRW5kXyhjLQoxLGEsZSl9aWYoYz09PWYpYnJlYWs7ZT1kO2Q9YlsrK2NdO2lmKGE8ZClicmVhayBifWQ9Yi5sZW5ndGg7YnJlYWsgY31pZihhPj1lKWJyZWFrIGE7ZWxzZXtmPWJbMV07YTxmJiYoYz0yLGU9Zik7Zm9yKGY9Yy0yOzspe2lmKHZvaWQgMD09PWUpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCxhLGQpO2lmKGM9PT1mKWJyZWFrO2Q9ZTtlPWJbLS1jLTFdO2lmKGE+PWUpYnJlYWsgYn1kPWM7Yz0wfX1mb3IoO2M8ZDspZT1jK2Q+Pj4xLGE8YltlXT9kPWU6Yz1lKzE7ZD1iW2NdO2U9YltjLTFdO2lmKHZvaWQgMD09PWUpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCxhLGQpO2lmKHZvaWQgMD09PWQpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PWM9Yi5sZW5ndGgsdGhpcy5hZnRlckVuZF8oYy0xLGUsYSl9dGhpcy5fY2FjaGVkSW5kZXg9Yzt0aGlzLmludGVydmFsQ2hhbmdlZF8oYyxlLGQpfXJldHVybiB0aGlzLmludGVycG9sYXRlXyhjLAplLGEsZCl9LHNldHRpbmdzOm51bGwsRGVmYXVsdFNldHRpbmdzXzp7fSxnZXRTZXR0aW5nc186ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffSxjb3B5U2FtcGxlVmFsdWVfOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucmVzdWx0QnVmZmVyLGM9dGhpcy5zYW1wbGVWYWx1ZXMsZD10aGlzLnZhbHVlU2l6ZTthKj1kO2Zvcih2YXIgZT0wO2UhPT1kOysrZSliW2VdPWNbYStlXTtyZXR1cm4gYn0saW50ZXJwb2xhdGVfOmZ1bmN0aW9uKGEsYixjLGQpe3Rocm93IEVycm9yKCJjYWxsIHRvIGFic3RyYWN0IG1ldGhvZCIpO30saW50ZXJ2YWxDaGFuZ2VkXzpmdW5jdGlvbihhLGIsYyl7fX0pO09iamVjdC5hc3NpZ24oRGEucHJvdG90eXBlLHtiZWZvcmVTdGFydF86RGEucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV8sYWZ0ZXJFbmRfOkRhLnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVffSk7QmQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShEYS5wcm90b3R5cGUpLAp7Y29uc3RydWN0b3I6QmQsRGVmYXVsdFNldHRpbmdzXzp7ZW5kaW5nU3RhcnQ6MjQwMCxlbmRpbmdFbmQ6MjQwMH0saW50ZXJ2YWxDaGFuZ2VkXzpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMsZT1hLTIsZj1hKzEsZz1kW2VdLGg9ZFtmXTtpZih2b2lkIDA9PT1nKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0KXtjYXNlIDI0MDE6ZT1hO2c9MipiLWM7YnJlYWs7Y2FzZSAyNDAyOmU9ZC5sZW5ndGgtMjtnPWIrZFtlXS1kW2UrMV07YnJlYWs7ZGVmYXVsdDplPWEsZz1jfWlmKHZvaWQgMD09PWgpc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nRW5kKXtjYXNlIDI0MDE6Zj1hO2g9MipjLWI7YnJlYWs7Y2FzZSAyNDAyOmY9MTtoPWMrZFsxXS1kWzBdO2JyZWFrO2RlZmF1bHQ6Zj1hLTEsaD1ifWE9LjUqKGMtYik7ZD10aGlzLnZhbHVlU2l6ZTt0aGlzLl93ZWlnaHRQcmV2PWEvKGItZyk7dGhpcy5fd2VpZ2h0TmV4dD0KYS8oaC1jKTt0aGlzLl9vZmZzZXRQcmV2PWUqZDt0aGlzLl9vZmZzZXROZXh0PWYqZH0saW50ZXJwb2xhdGVfOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMucmVzdWx0QnVmZmVyLGY9dGhpcy5zYW1wbGVWYWx1ZXMsZz10aGlzLnZhbHVlU2l6ZTthKj1nO3ZhciBoPWEtZyxrPXRoaXMuX29mZnNldFByZXYsbT10aGlzLl9vZmZzZXROZXh0LGw9dGhpcy5fd2VpZ2h0UHJldixxPXRoaXMuX3dlaWdodE5leHQsbj0oYy1iKS8oZC1iKTtjPW4qbjtkPWMqbjtiPS1sKmQrMipsKmMtbCpuO2w9KDErbCkqZCsoLTEuNS0yKmwpKmMrKC0uNStsKSpuKzE7bj0oLTEtcSkqZCsoMS41K3EpKmMrLjUqbjtxPXEqZC1xKmM7Zm9yKGM9MDtjIT09ZzsrK2MpZVtjXT1iKmZbaytjXStsKmZbaCtjXStuKmZbYStjXStxKmZbbStjXTtyZXR1cm4gZX19KTtXYy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKERhLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOldjLGludGVycG9sYXRlXzpmdW5jdGlvbihhLApiLGMsZCl7dmFyIGU9dGhpcy5yZXN1bHRCdWZmZXIsZj10aGlzLnNhbXBsZVZhbHVlcyxnPXRoaXMudmFsdWVTaXplO2EqPWc7dmFyIGg9YS1nO2I9KGMtYikvKGQtYik7Yz0xLWI7Zm9yKGQ9MDtkIT09ZzsrK2QpZVtkXT1mW2grZF0qYytmW2ErZF0qYjtyZXR1cm4gZX19KTtDZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKERhLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkNkLGludGVycG9sYXRlXzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5jb3B5U2FtcGxlVmFsdWVfKGEtMSl9fSk7dmFyIFlhO1lhPXtUaW1lQnVmZmVyVHlwZTpGbG9hdDMyQXJyYXksVmFsdWVCdWZmZXJUeXBlOkZsb2F0MzJBcnJheSxEZWZhdWx0SW50ZXJwb2xhdGlvbjoyMzAxLEludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgQ2QodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLGEpfSxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBXYyh0aGlzLnRpbWVzLAp0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLGEpfSxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBCZCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksYSl9LHNldEludGVycG9sYXRpb246ZnVuY3Rpb24oYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMjMwMDpiPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU7YnJlYWs7Y2FzZSAyMzAxOmI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSAyMzAyOmI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09Yil7Yj0idW5zdXBwb3J0ZWQgaW50ZXJwb2xhdGlvbiBmb3IgIit0aGlzLlZhbHVlVHlwZU5hbWUrIiBrZXlmcmFtZSB0cmFjayBuYW1lZCAiK3RoaXMubmFtZTtpZih2b2lkIDA9PT10aGlzLmNyZWF0ZUludGVycG9sYW50KWlmKGEhPT10aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKXRoaXMuc2V0SW50ZXJwb2xhdGlvbih0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKTsKZWxzZSB0aHJvdyBFcnJvcihiKTtjb25zb2xlLndhcm4oYil9ZWxzZSB0aGlzLmNyZWF0ZUludGVycG9sYW50PWJ9LGdldEludGVycG9sYXRpb246ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiAyMzAwO2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6cmV0dXJuIDIzMDE7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gMjMwMn19LGdldFZhbHVlU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGgvdGhpcy50aW1lcy5sZW5ndGh9LHNoaWZ0OmZ1bmN0aW9uKGEpe2lmKDAhPT1hKWZvcih2YXIgYj10aGlzLnRpbWVzLGM9MCxkPWIubGVuZ3RoO2MhPT1kOysrYyliW2NdKz1hO3JldHVybiB0aGlzfSxzY2FsZTpmdW5jdGlvbihhKXtpZigxIT09YSlmb3IodmFyIGI9dGhpcy50aW1lcyxjPQowLGQ9Yi5sZW5ndGg7YyE9PWQ7KytjKWJbY10qPWE7cmV0dXJuIHRoaXN9LHRyaW06ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9dGhpcy50aW1lcyxkPWMubGVuZ3RoLGU9MCxmPWQtMTtlIT09ZCYmY1tlXTxhOykrK2U7Zm9yKDstMSE9PWYmJmNbZl0+YjspLS1mOysrZjtpZigwIT09ZXx8ZiE9PWQpZT49ZiYmKGY9TWF0aC5tYXgoZiwxKSxlPWYtMSksZD10aGlzLmdldFZhbHVlU2l6ZSgpLHRoaXMudGltZXM9dmEuYXJyYXlTbGljZShjLGUsZiksdGhpcy52YWx1ZXM9dmEuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyxlKmQsZipkKTtyZXR1cm4gdGhpc30sdmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgYT0hMCxiPXRoaXMuZ2V0VmFsdWVTaXplKCk7MCE9PWItTWF0aC5mbG9vcihiKSYmKGNvbnNvbGUuZXJyb3IoImludmFsaWQgdmFsdWUgc2l6ZSBpbiB0cmFjayIsdGhpcyksYT0hMSk7dmFyIGM9dGhpcy50aW1lcyxiPXRoaXMudmFsdWVzLGQ9Yy5sZW5ndGg7MD09PWQmJihjb25zb2xlLmVycm9yKCJ0cmFjayBpcyBlbXB0eSIsCnRoaXMpLGE9ITEpO2Zvcih2YXIgZT1udWxsLGY9MDtmIT09ZDtmKyspe3ZhciBnPWNbZl07aWYoIm51bWJlciI9PT10eXBlb2YgZyYmaXNOYU4oZykpe2NvbnNvbGUuZXJyb3IoInRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyIix0aGlzLGYsZyk7YT0hMTticmVha31pZihudWxsIT09ZSYmZT5nKXtjb25zb2xlLmVycm9yKCJvdXQgb2Ygb3JkZXIga2V5cyIsdGhpcyxmLGcsZSk7YT0hMTticmVha31lPWd9aWYodm9pZCAwIT09YiYmdmEuaXNUeXBlZEFycmF5KGIpKWZvcihmPTAsYz1iLmxlbmd0aDtmIT09YzsrK2YpaWYoZD1iW2ZdLGlzTmFOKGQpKXtjb25zb2xlLmVycm9yKCJ2YWx1ZSBpcyBub3QgYSB2YWxpZCBudW1iZXIiLHRoaXMsZixkKTthPSExO2JyZWFrfXJldHVybiBhfSxvcHRpbWl6ZTpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLnRpbWVzLGI9dGhpcy52YWx1ZXMsYz10aGlzLmdldFZhbHVlU2l6ZSgpLGQ9MjMwMj09PXRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpLGU9MSwKZj1hLmxlbmd0aC0xLGc9MTtnPGY7KytnKXt2YXIgaD0hMSxrPWFbZ107aWYoayE9PWFbZysxXSYmKDEhPT1nfHxrIT09a1swXSkpaWYoZCloPSEwO2Vsc2UgZm9yKHZhciBtPWcqYyxsPW0tYyxxPW0rYyxrPTA7ayE9PWM7KytrKXt2YXIgbj1iW20ra107aWYobiE9PWJbbCtrXXx8biE9PWJbcStrXSl7aD0hMDticmVha319aWYoaCl7aWYoZyE9PWUpZm9yKGFbZV09YVtnXSxoPWcqYyxtPWUqYyxrPTA7ayE9PWM7KytrKWJbbStrXT1iW2gra107KytlfX1pZigwPGYpe2FbZV09YVtmXTtoPWYqYzttPWUqYztmb3Ioaz0wO2shPT1jOysrayliW20ra109YltoK2tdOysrZX1lIT09YS5sZW5ndGgmJih0aGlzLnRpbWVzPXZhLmFycmF5U2xpY2UoYSwwLGUpLHRoaXMudmFsdWVzPXZhLmFycmF5U2xpY2UoYiwwLGUqYykpO3JldHVybiB0aGlzfX07ZWMucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShZYSkse2NvbnN0cnVjdG9yOmVjLFZhbHVlVHlwZU5hbWU6InZlY3RvciJ9KTsKRGQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShEYS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpEZCxpbnRlcnBvbGF0ZV86ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5yZXN1bHRCdWZmZXIsZj10aGlzLnNhbXBsZVZhbHVlcyxnPXRoaXMudmFsdWVTaXplO2EqPWc7Yj0oYy1iKS8oZC1iKTtmb3IoYz1hK2c7YSE9PWM7YSs9NClxYS5zbGVycEZsYXQoZSwwLGYsYS1nLGYsYSxiKTtyZXR1cm4gZX19KTtYYy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFlhKSx7Y29uc3RydWN0b3I6WGMsVmFsdWVUeXBlTmFtZToicXVhdGVybmlvbiIsRGVmYXVsdEludGVycG9sYXRpb246MjMwMSxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBEZCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksYSl9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KTsKZmMucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShZYSkse2NvbnN0cnVjdG9yOmZjLFZhbHVlVHlwZU5hbWU6Im51bWJlciJ9KTtFZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFlhKSx7Y29uc3RydWN0b3I6RWQsVmFsdWVUeXBlTmFtZToic3RyaW5nIixWYWx1ZUJ1ZmZlclR5cGU6QXJyYXksRGVmYXVsdEludGVycG9sYXRpb246MjMwMCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6dm9pZCAwLEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KTtGZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFlhKSx7Y29uc3RydWN0b3I6RmQsVmFsdWVUeXBlTmFtZToiYm9vbCIsVmFsdWVCdWZmZXJUeXBlOkFycmF5LERlZmF1bHRJbnRlcnBvbGF0aW9uOjIzMDAsSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnZvaWQgMCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg6dm9pZCAwfSk7CkdkLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoWWEpLHtjb25zdHJ1Y3RvcjpHZCxWYWx1ZVR5cGVOYW1lOiJjb2xvciJ9KTt3Yi5wcm90b3R5cGU9WWE7WWEuY29uc3RydWN0b3I9d2I7T2JqZWN0LmFzc2lnbih3Yix7cGFyc2U6ZnVuY3Rpb24oYSl7aWYodm9pZCAwPT09YS50eXBlKXRocm93IEVycm9yKCJ0cmFjayB0eXBlIHVuZGVmaW5lZCwgY2FuIG5vdCBwYXJzZSIpO3ZhciBiPXdiLl9nZXRUcmFja1R5cGVGb3JWYWx1ZVR5cGVOYW1lKGEudHlwZSk7aWYodm9pZCAwPT09YS50aW1lcyl7dmFyIGM9W10sZD1bXTt2YS5mbGF0dGVuSlNPTihhLmtleXMsYyxkLCJ2YWx1ZSIpO2EudGltZXM9YzthLnZhbHVlcz1kfXJldHVybiB2b2lkIDAhPT1iLnBhcnNlP2IucGFyc2UoYSk6bmV3IGIoYS5uYW1lLGEudGltZXMsYS52YWx1ZXMsYS5pbnRlcnBvbGF0aW9uKX0sdG9KU09OOmZ1bmN0aW9uKGEpe3ZhciBiPWEuY29uc3RydWN0b3I7aWYodm9pZCAwIT09Yi50b0pTT04pYj0KYi50b0pTT04oYSk7ZWxzZXt2YXIgYj17bmFtZTphLm5hbWUsdGltZXM6dmEuY29udmVydEFycmF5KGEudGltZXMsQXJyYXkpLHZhbHVlczp2YS5jb252ZXJ0QXJyYXkoYS52YWx1ZXMsQXJyYXkpfSxjPWEuZ2V0SW50ZXJwb2xhdGlvbigpO2MhPT1hLkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYoYi5pbnRlcnBvbGF0aW9uPWMpfWIudHlwZT1hLlZhbHVlVHlwZU5hbWU7cmV0dXJuIGJ9LF9nZXRUcmFja1R5cGVGb3JWYWx1ZVR5cGVOYW1lOmZ1bmN0aW9uKGEpe3N3aXRjaChhLnRvTG93ZXJDYXNlKCkpe2Nhc2UgInNjYWxhciI6Y2FzZSAiZG91YmxlIjpjYXNlICJmbG9hdCI6Y2FzZSAibnVtYmVyIjpjYXNlICJpbnRlZ2VyIjpyZXR1cm4gZmM7Y2FzZSAidmVjdG9yIjpjYXNlICJ2ZWN0b3IyIjpjYXNlICJ2ZWN0b3IzIjpjYXNlICJ2ZWN0b3I0IjpyZXR1cm4gZWM7Y2FzZSAiY29sb3IiOnJldHVybiBHZDtjYXNlICJxdWF0ZXJuaW9uIjpyZXR1cm4gWGM7Y2FzZSAiYm9vbCI6Y2FzZSAiYm9vbGVhbiI6cmV0dXJuIEZkOwpjYXNlICJzdHJpbmciOnJldHVybiBFZH10aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgdHlwZU5hbWU6ICIrYSk7fX0pO09iamVjdC5hc3NpZ24oQmEse3BhcnNlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPWEudHJhY2tzLGQ9MS8oYS5mcHN8fDEpLGU9MCxmPWMubGVuZ3RoO2UhPT1mOysrZSliLnB1c2god2IucGFyc2UoY1tlXSkuc2NhbGUoZCkpO3JldHVybiBuZXcgQmEoYS5uYW1lLGEuZHVyYXRpb24sYil9LHRvSlNPTjpmdW5jdGlvbihhKXt2YXIgYj1bXSxjPWEudHJhY2tzO2E9e25hbWU6YS5uYW1lLGR1cmF0aW9uOmEuZHVyYXRpb24sdHJhY2tzOmJ9O2Zvcih2YXIgZD0wLGU9Yy5sZW5ndGg7ZCE9PWU7KytkKWIucHVzaCh3Yi50b0pTT04oY1tkXSkpO3JldHVybiBhfSxDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZTpmdW5jdGlvbihhLGIsYyxkKXtmb3IodmFyIGU9Yi5sZW5ndGgsZj1bXSxnPTA7ZzxlO2crKyl7dmFyIGg9W10saz1bXTtoLnB1c2goKGcrZS0xKSUKZSxnLChnKzEpJWUpO2sucHVzaCgwLDEsMCk7dmFyIG09dmEuZ2V0S2V5ZnJhbWVPcmRlcihoKSxoPXZhLnNvcnRlZEFycmF5KGgsMSxtKSxrPXZhLnNvcnRlZEFycmF5KGssMSxtKTtkfHwwIT09aFswXXx8KGgucHVzaChlKSxrLnB1c2goa1swXSkpO2YucHVzaCgobmV3IGZjKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrYltnXS5uYW1lKyJdIixoLGspKS5zY2FsZSgxL2MpKX1yZXR1cm4gbmV3IEJhKGEsLTEsZil9LGZpbmRCeU5hbWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hO0FycmF5LmlzQXJyYXkoYSl8fChjPWEuZ2VvbWV0cnkmJmEuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8YS5hbmltYXRpb25zKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKylpZihjW2RdLm5hbWU9PT1iKXJldHVybiBjW2RdO3JldHVybiBudWxsfSxDcmVhdGVDbGlwc0Zyb21Nb3JwaFRhcmdldFNlcXVlbmNlczpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXt9LGU9L14oW1x3LV0qPykoW1xkXSspJC8sZj0wLApnPWEubGVuZ3RoO2Y8ZztmKyspe3ZhciBoPWFbZl0saz1oLm5hbWUubWF0Y2goZSk7aWYoayYmMTxrLmxlbmd0aCl7dmFyIG09a1sxXTsoaz1kW21dKXx8KGRbbV09az1bXSk7ay5wdXNoKGgpfX1hPVtdO2ZvcihtIGluIGQpYS5wdXNoKEJhLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKG0sZFttXSxiLGMpKTtyZXR1cm4gYX0scGFyc2VBbmltYXRpb246ZnVuY3Rpb24oYSxiKXtpZighYSlyZXR1cm4gY29uc29sZS5lcnJvcigiICBubyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhIiksbnVsbDtmb3IodmFyIGM9ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZigwIT09Yy5sZW5ndGgpe3ZhciBmPVtdLGc9W107dmEuZmxhdHRlbkpTT04oYyxmLGcsZCk7MCE9PWYubGVuZ3RoJiZlLnB1c2gobmV3IGEoYixmLGcpKX19LGQ9W10sZT1hLm5hbWV8fCJkZWZhdWx0IixmPWEubGVuZ3RofHwtMSxnPWEuZnBzfHwzMCxoPWEuaGllcmFyY2h5fHxbXSxrPTA7azxoLmxlbmd0aDtrKyspe3ZhciBtPQpoW2tdLmtleXM7aWYobSYmMCE9PW0ubGVuZ3RoKWlmKG1bMF0ubW9ycGhUYXJnZXRzKXtmb3IodmFyIGY9e30sbD0wO2w8bS5sZW5ndGg7bCsrKWlmKG1bbF0ubW9ycGhUYXJnZXRzKWZvcih2YXIgcT0wO3E8bVtsXS5tb3JwaFRhcmdldHMubGVuZ3RoO3ErKylmW21bbF0ubW9ycGhUYXJnZXRzW3FdXT0tMTtmb3IodmFyIG4gaW4gZil7Zm9yKHZhciBwPVtdLHo9W10scT0wO3EhPT1tW2xdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7KytxKXt2YXIgdD1tW2xdO3AucHVzaCh0LnRpbWUpO3oucHVzaCh0Lm1vcnBoVGFyZ2V0PT09bj8xOjApfWQucHVzaChuZXcgZmMoIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK24rIl0iLHAseikpfWY9Zi5sZW5ndGgqKGd8fDEpfWVsc2UgbD0iLmJvbmVzWyIrYltrXS5uYW1lKyJdIixjKGVjLGwrIi5wb3NpdGlvbiIsbSwicG9zIixkKSxjKFhjLGwrIi5xdWF0ZXJuaW9uIixtLCJyb3QiLGQpLGMoZWMsbCsiLnNjYWxlIixtLCJzY2wiLGQpfXJldHVybiAwPT09CmQubGVuZ3RoP251bGw6bmV3IEJhKGUsZixkKX19KTtPYmplY3QuYXNzaWduKEJhLnByb3RvdHlwZSx7cmVzZXREdXJhdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI9MCxjPXRoaXMudHJhY2tzLmxlbmd0aDtiIT09YzsrK2IpdmFyIGQ9dGhpcy50cmFja3NbYl0sYT1NYXRoLm1heChhLGQudGltZXNbZC50aW1lcy5sZW5ndGgtMV0pO3RoaXMuZHVyYXRpb249YX0sdHJpbTpmdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8dGhpcy50cmFja3MubGVuZ3RoO2ErKyl0aGlzLnRyYWNrc1thXS50cmltKDAsdGhpcy5kdXJhdGlvbik7cmV0dXJuIHRoaXN9LG9wdGltaXplOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTx0aGlzLnRyYWNrcy5sZW5ndGg7YSsrKXRoaXMudHJhY2tzW2FdLm9wdGltaXplKCk7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihIZC5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcyxmPW5ldyB1YShlLm1hbmFnZXIpO2Yuc2V0UmVzcG9uc2VUeXBlKCJqc29uIik7CmYubG9hZChhLGZ1bmN0aW9uKGEpe2IoZS5wYXJzZShhKSl9LGMsZCl9LHNldFRleHR1cmVzOmZ1bmN0aW9uKGEpe3RoaXMudGV4dHVyZXM9YX0scGFyc2U6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2b2lkIDA9PT1jW2FdJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsTG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsYSk7cmV0dXJuIGNbYV19dmFyIGM9dGhpcy50ZXh0dXJlcyxkPW5ldyBsZ1thLnR5cGVdO3ZvaWQgMCE9PWEudXVpZCYmKGQudXVpZD1hLnV1aWQpO3ZvaWQgMCE9PWEubmFtZSYmKGQubmFtZT1hLm5hbWUpO3ZvaWQgMCE9PWEuY29sb3ImJmQuY29sb3Iuc2V0SGV4KGEuY29sb3IpO3ZvaWQgMCE9PWEucm91Z2huZXNzJiYoZC5yb3VnaG5lc3M9YS5yb3VnaG5lc3MpO3ZvaWQgMCE9PWEubWV0YWxuZXNzJiYoZC5tZXRhbG5lc3M9YS5tZXRhbG5lc3MpO3ZvaWQgMCE9PWEuZW1pc3NpdmUmJmQuZW1pc3NpdmUuc2V0SGV4KGEuZW1pc3NpdmUpO3ZvaWQgMCE9PQphLnNwZWN1bGFyJiZkLnNwZWN1bGFyLnNldEhleChhLnNwZWN1bGFyKTt2b2lkIDAhPT1hLnNoaW5pbmVzcyYmKGQuc2hpbmluZXNzPWEuc2hpbmluZXNzKTt2b2lkIDAhPT1hLmNsZWFyQ29hdCYmKGQuY2xlYXJDb2F0PWEuY2xlYXJDb2F0KTt2b2lkIDAhPT1hLmNsZWFyQ29hdFJvdWdobmVzcyYmKGQuY2xlYXJDb2F0Um91Z2huZXNzPWEuY2xlYXJDb2F0Um91Z2huZXNzKTt2b2lkIDAhPT1hLnVuaWZvcm1zJiYoZC51bmlmb3Jtcz1hLnVuaWZvcm1zKTt2b2lkIDAhPT1hLnZlcnRleFNoYWRlciYmKGQudmVydGV4U2hhZGVyPWEudmVydGV4U2hhZGVyKTt2b2lkIDAhPT1hLmZyYWdtZW50U2hhZGVyJiYoZC5mcmFnbWVudFNoYWRlcj1hLmZyYWdtZW50U2hhZGVyKTt2b2lkIDAhPT1hLnZlcnRleENvbG9ycyYmKGQudmVydGV4Q29sb3JzPWEudmVydGV4Q29sb3JzKTt2b2lkIDAhPT1hLmZvZyYmKGQuZm9nPWEuZm9nKTt2b2lkIDAhPT1hLnNoYWRpbmcmJihkLnNoYWRpbmc9YS5zaGFkaW5nKTsKdm9pZCAwIT09YS5ibGVuZGluZyYmKGQuYmxlbmRpbmc9YS5ibGVuZGluZyk7dm9pZCAwIT09YS5zaWRlJiYoZC5zaWRlPWEuc2lkZSk7dm9pZCAwIT09YS5vcGFjaXR5JiYoZC5vcGFjaXR5PWEub3BhY2l0eSk7dm9pZCAwIT09YS50cmFuc3BhcmVudCYmKGQudHJhbnNwYXJlbnQ9YS50cmFuc3BhcmVudCk7dm9pZCAwIT09YS5hbHBoYVRlc3QmJihkLmFscGhhVGVzdD1hLmFscGhhVGVzdCk7dm9pZCAwIT09YS5kZXB0aFRlc3QmJihkLmRlcHRoVGVzdD1hLmRlcHRoVGVzdCk7dm9pZCAwIT09YS5kZXB0aFdyaXRlJiYoZC5kZXB0aFdyaXRlPWEuZGVwdGhXcml0ZSk7dm9pZCAwIT09YS5jb2xvcldyaXRlJiYoZC5jb2xvcldyaXRlPWEuY29sb3JXcml0ZSk7dm9pZCAwIT09YS53aXJlZnJhbWUmJihkLndpcmVmcmFtZT1hLndpcmVmcmFtZSk7dm9pZCAwIT09YS53aXJlZnJhbWVMaW5ld2lkdGgmJihkLndpcmVmcmFtZUxpbmV3aWR0aD1hLndpcmVmcmFtZUxpbmV3aWR0aCk7dm9pZCAwIT09CmEud2lyZWZyYW1lTGluZWNhcCYmKGQud2lyZWZyYW1lTGluZWNhcD1hLndpcmVmcmFtZUxpbmVjYXApO3ZvaWQgMCE9PWEud2lyZWZyYW1lTGluZWpvaW4mJihkLndpcmVmcmFtZUxpbmVqb2luPWEud2lyZWZyYW1lTGluZWpvaW4pO3ZvaWQgMCE9PWEuc2tpbm5pbmcmJihkLnNraW5uaW5nPWEuc2tpbm5pbmcpO3ZvaWQgMCE9PWEubW9ycGhUYXJnZXRzJiYoZC5tb3JwaFRhcmdldHM9YS5tb3JwaFRhcmdldHMpO3ZvaWQgMCE9PWEuc2l6ZSYmKGQuc2l6ZT1hLnNpemUpO3ZvaWQgMCE9PWEuc2l6ZUF0dGVudWF0aW9uJiYoZC5zaXplQXR0ZW51YXRpb249YS5zaXplQXR0ZW51YXRpb24pO3ZvaWQgMCE9PWEubWFwJiYoZC5tYXA9YihhLm1hcCkpO3ZvaWQgMCE9PWEuYWxwaGFNYXAmJihkLmFscGhhTWFwPWIoYS5hbHBoYU1hcCksZC50cmFuc3BhcmVudD0hMCk7dm9pZCAwIT09YS5idW1wTWFwJiYoZC5idW1wTWFwPWIoYS5idW1wTWFwKSk7dm9pZCAwIT09YS5idW1wU2NhbGUmJihkLmJ1bXBTY2FsZT0KYS5idW1wU2NhbGUpO3ZvaWQgMCE9PWEubm9ybWFsTWFwJiYoZC5ub3JtYWxNYXA9YihhLm5vcm1hbE1hcCkpO2lmKHZvaWQgMCE9PWEubm9ybWFsU2NhbGUpe3ZhciBlPWEubm9ybWFsU2NhbGU7ITE9PT1BcnJheS5pc0FycmF5KGUpJiYoZT1bZSxlXSk7ZC5ub3JtYWxTY2FsZT0obmV3IEQpLmZyb21BcnJheShlKX12b2lkIDAhPT1hLmRpc3BsYWNlbWVudE1hcCYmKGQuZGlzcGxhY2VtZW50TWFwPWIoYS5kaXNwbGFjZW1lbnRNYXApKTt2b2lkIDAhPT1hLmRpc3BsYWNlbWVudFNjYWxlJiYoZC5kaXNwbGFjZW1lbnRTY2FsZT1hLmRpc3BsYWNlbWVudFNjYWxlKTt2b2lkIDAhPT1hLmRpc3BsYWNlbWVudEJpYXMmJihkLmRpc3BsYWNlbWVudEJpYXM9YS5kaXNwbGFjZW1lbnRCaWFzKTt2b2lkIDAhPT1hLnJvdWdobmVzc01hcCYmKGQucm91Z2huZXNzTWFwPWIoYS5yb3VnaG5lc3NNYXApKTt2b2lkIDAhPT1hLm1ldGFsbmVzc01hcCYmKGQubWV0YWxuZXNzTWFwPWIoYS5tZXRhbG5lc3NNYXApKTsKdm9pZCAwIT09YS5lbWlzc2l2ZU1hcCYmKGQuZW1pc3NpdmVNYXA9YihhLmVtaXNzaXZlTWFwKSk7dm9pZCAwIT09YS5lbWlzc2l2ZUludGVuc2l0eSYmKGQuZW1pc3NpdmVJbnRlbnNpdHk9YS5lbWlzc2l2ZUludGVuc2l0eSk7dm9pZCAwIT09YS5zcGVjdWxhck1hcCYmKGQuc3BlY3VsYXJNYXA9YihhLnNwZWN1bGFyTWFwKSk7dm9pZCAwIT09YS5lbnZNYXAmJihkLmVudk1hcD1iKGEuZW52TWFwKSk7dm9pZCAwIT09YS5yZWZsZWN0aXZpdHkmJihkLnJlZmxlY3Rpdml0eT1hLnJlZmxlY3Rpdml0eSk7dm9pZCAwIT09YS5saWdodE1hcCYmKGQubGlnaHRNYXA9YihhLmxpZ2h0TWFwKSk7dm9pZCAwIT09YS5saWdodE1hcEludGVuc2l0eSYmKGQubGlnaHRNYXBJbnRlbnNpdHk9YS5saWdodE1hcEludGVuc2l0eSk7dm9pZCAwIT09YS5hb01hcCYmKGQuYW9NYXA9YihhLmFvTWFwKSk7dm9pZCAwIT09YS5hb01hcEludGVuc2l0eSYmKGQuYW9NYXBJbnRlbnNpdHk9YS5hb01hcEludGVuc2l0eSk7CnZvaWQgMCE9PWEuZ3JhZGllbnRNYXAmJihkLmdyYWRpZW50TWFwPWIoYS5ncmFkaWVudE1hcCkpO3JldHVybiBkfX0pO09iamVjdC5hc3NpZ24oYmUucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMsZj1uZXcgdWEoZS5tYW5hZ2VyKTtmLnNldFJlc3BvbnNlVHlwZSgianNvbiIpO2YubG9hZChhLGZ1bmN0aW9uKGEpe2IoZS5wYXJzZShhKSl9LGMsZCl9LHBhcnNlOmZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBJLGM9YS5kYXRhLmluZGV4O3ZvaWQgMCE9PWMmJihjPW5ldyBmZltjLnR5cGVdKGMuYXJyYXkpLGIuc2V0SW5kZXgobmV3IEwoYywxKSkpO3ZhciBkPWEuZGF0YS5hdHRyaWJ1dGVzLGU7Zm9yKGUgaW4gZCl7dmFyIGY9ZFtlXSxjPW5ldyBmZltmLnR5cGVdKGYuYXJyYXkpO2IuYWRkQXR0cmlidXRlKGUsbmV3IEwoYyxmLml0ZW1TaXplLGYubm9ybWFsaXplZCkpfWU9YS5kYXRhLmdyb3Vwc3x8YS5kYXRhLmRyYXdjYWxsc3x8YS5kYXRhLm9mZnNldHM7CmlmKHZvaWQgMCE9PWUpZm9yKGM9MCxkPWUubGVuZ3RoO2MhPT1kOysrYylmPWVbY10sYi5hZGRHcm91cChmLnN0YXJ0LGYuY291bnQsZi5tYXRlcmlhbEluZGV4KTthPWEuZGF0YS5ib3VuZGluZ1NwaGVyZTt2b2lkIDAhPT1hJiYoZT1uZXcgcCx2b2lkIDAhPT1hLmNlbnRlciYmZS5mcm9tQXJyYXkoYS5jZW50ZXIpLGIuYm91bmRpbmdTcGhlcmU9bmV3IEdhKGUsYS5yYWRpdXMpKTtyZXR1cm4gYn19KTt2YXIgZmY9e0ludDhBcnJheTpJbnQ4QXJyYXksVWludDhBcnJheTpVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5OlVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXk6SW50MTZBcnJheSxVaW50MTZBcnJheTpVaW50MTZBcnJheSxJbnQzMkFycmF5OkludDMyQXJyYXksVWludDMyQXJyYXk6VWludDMyQXJyYXksRmxvYXQzMkFycmF5OkZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXk6RmxvYXQ2NEFycmF5fTtnYy5IYW5kbGVycz17aGFuZGxlcnM6W10sYWRkOmZ1bmN0aW9uKGEsYil7dGhpcy5oYW5kbGVycy5wdXNoKGEsCmIpfSxnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuaGFuZGxlcnMsYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrPTIpe3ZhciBlPWJbYysxXTtpZihiW2NdLnRlc3QoYSkpcmV0dXJuIGV9cmV0dXJuIG51bGx9fTtPYmplY3QuYXNzaWduKGdjLnByb3RvdHlwZSx7Y3Jvc3NPcmlnaW46dm9pZCAwLGV4dHJhY3RVcmxCYXNlOmZ1bmN0aW9uKGEpe2E9YS5zcGxpdCgiLyIpO2lmKDE9PT1hLmxlbmd0aClyZXR1cm4iLi8iO2EucG9wKCk7cmV0dXJuIGEuam9pbigiLyIpKyIvIn0saW5pdE1hdGVyaWFsczpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPVtdLGU9MDtlPGEubGVuZ3RoOysrZSlkW2VdPXRoaXMuY3JlYXRlTWF0ZXJpYWwoYVtlXSxiLGMpO3JldHVybiBkfSxjcmVhdGVNYXRlcmlhbDpmdW5jdGlvbigpe3ZhciBhPXtOb0JsZW5kaW5nOjAsTm9ybWFsQmxlbmRpbmc6MSxBZGRpdGl2ZUJsZW5kaW5nOjIsU3VidHJhY3RpdmVCbGVuZGluZzozLE11bHRpcGx5QmxlbmRpbmc6NCxDdXN0b21CbGVuZGluZzo1fSwKYj1uZXcgSCxjPW5ldyBzZCxkPW5ldyBIZDtyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe2Z1bmN0aW9uIGgoYSxiLGQsZSxoKXthPWYrYTt2YXIgbT1nYy5IYW5kbGVycy5nZXQoYSk7bnVsbCE9PW0/YT1tLmxvYWQoYSk6KGMuc2V0Q3Jvc3NPcmlnaW4oZyksYT1jLmxvYWQoYSkpO3ZvaWQgMCE9PWImJihhLnJlcGVhdC5mcm9tQXJyYXkoYiksMSE9PWJbMF0mJihhLndyYXBTPTFFMyksMSE9PWJbMV0mJihhLndyYXBUPTFFMykpO3ZvaWQgMCE9PWQmJmEub2Zmc2V0LmZyb21BcnJheShkKTt2b2lkIDAhPT1lJiYoInJlcGVhdCI9PT1lWzBdJiYoYS53cmFwUz0xRTMpLCJtaXJyb3IiPT09ZVswXSYmKGEud3JhcFM9MTAwMiksInJlcGVhdCI9PT1lWzFdJiYoYS53cmFwVD0xRTMpLCJtaXJyb3IiPT09ZVsxXSYmKGEud3JhcFQ9MTAwMikpO3ZvaWQgMCE9PWgmJihhLmFuaXNvdHJvcHk9aCk7Yj1ZLmdlbmVyYXRlVVVJRCgpO2tbYl09YTtyZXR1cm4gYn12YXIgaz17fSxtPXt1dWlkOlkuZ2VuZXJhdGVVVUlEKCksCnR5cGU6Ik1lc2hMYW1iZXJ0TWF0ZXJpYWwifSxsO2ZvcihsIGluIGUpe3ZhciBxPWVbbF07c3dpdGNoKGwpe2Nhc2UgIkRiZ0NvbG9yIjpjYXNlICJEYmdJbmRleCI6Y2FzZSAib3B0aWNhbERlbnNpdHkiOmNhc2UgImlsbHVtaW5hdGlvbiI6YnJlYWs7Y2FzZSAiRGJnTmFtZSI6bS5uYW1lPXE7YnJlYWs7Y2FzZSAiYmxlbmRpbmciOm0uYmxlbmRpbmc9YVtxXTticmVhaztjYXNlICJjb2xvckFtYmllbnQiOmNhc2UgIm1hcEFtYmllbnQiOmNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyLmNyZWF0ZU1hdGVyaWFsOiIsbCwiaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4iKTticmVhaztjYXNlICJjb2xvckRpZmZ1c2UiOm0uY29sb3I9Yi5mcm9tQXJyYXkocSkuZ2V0SGV4KCk7YnJlYWs7Y2FzZSAiY29sb3JTcGVjdWxhciI6bS5zcGVjdWxhcj1iLmZyb21BcnJheShxKS5nZXRIZXgoKTticmVhaztjYXNlICJjb2xvckVtaXNzaXZlIjptLmVtaXNzaXZlPWIuZnJvbUFycmF5KHEpLmdldEhleCgpOwpicmVhaztjYXNlICJzcGVjdWxhckNvZWYiOm0uc2hpbmluZXNzPXE7YnJlYWs7Y2FzZSAic2hhZGluZyI6ImJhc2ljIj09PXEudG9Mb3dlckNhc2UoKSYmKG0udHlwZT0iTWVzaEJhc2ljTWF0ZXJpYWwiKTsicGhvbmciPT09cS50b0xvd2VyQ2FzZSgpJiYobS50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIpOyJzdGFuZGFyZCI9PT1xLnRvTG93ZXJDYXNlKCkmJihtLnR5cGU9Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIik7YnJlYWs7Y2FzZSAibWFwRGlmZnVzZSI6bS5tYXA9aChxLGUubWFwRGlmZnVzZVJlcGVhdCxlLm1hcERpZmZ1c2VPZmZzZXQsZS5tYXBEaWZmdXNlV3JhcCxlLm1hcERpZmZ1c2VBbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBEaWZmdXNlUmVwZWF0IjpjYXNlICJtYXBEaWZmdXNlT2Zmc2V0IjpjYXNlICJtYXBEaWZmdXNlV3JhcCI6Y2FzZSAibWFwRGlmZnVzZUFuaXNvdHJvcHkiOmJyZWFrO2Nhc2UgIm1hcEVtaXNzaXZlIjptLmVtaXNzaXZlTWFwPWgocSxlLm1hcEVtaXNzaXZlUmVwZWF0LAplLm1hcEVtaXNzaXZlT2Zmc2V0LGUubWFwRW1pc3NpdmVXcmFwLGUubWFwRW1pc3NpdmVBbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBFbWlzc2l2ZVJlcGVhdCI6Y2FzZSAibWFwRW1pc3NpdmVPZmZzZXQiOmNhc2UgIm1hcEVtaXNzaXZlV3JhcCI6Y2FzZSAibWFwRW1pc3NpdmVBbmlzb3Ryb3B5IjpicmVhaztjYXNlICJtYXBMaWdodCI6bS5saWdodE1hcD1oKHEsZS5tYXBMaWdodFJlcGVhdCxlLm1hcExpZ2h0T2Zmc2V0LGUubWFwTGlnaHRXcmFwLGUubWFwTGlnaHRBbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBMaWdodFJlcGVhdCI6Y2FzZSAibWFwTGlnaHRPZmZzZXQiOmNhc2UgIm1hcExpZ2h0V3JhcCI6Y2FzZSAibWFwTGlnaHRBbmlzb3Ryb3B5IjpicmVhaztjYXNlICJtYXBBTyI6bS5hb01hcD1oKHEsZS5tYXBBT1JlcGVhdCxlLm1hcEFPT2Zmc2V0LGUubWFwQU9XcmFwLGUubWFwQU9Bbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBBT1JlcGVhdCI6Y2FzZSAibWFwQU9PZmZzZXQiOmNhc2UgIm1hcEFPV3JhcCI6Y2FzZSAibWFwQU9Bbmlzb3Ryb3B5IjpicmVhazsKY2FzZSAibWFwQnVtcCI6bS5idW1wTWFwPWgocSxlLm1hcEJ1bXBSZXBlYXQsZS5tYXBCdW1wT2Zmc2V0LGUubWFwQnVtcFdyYXAsZS5tYXBCdW1wQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwQnVtcFNjYWxlIjptLmJ1bXBTY2FsZT1xO2JyZWFrO2Nhc2UgIm1hcEJ1bXBSZXBlYXQiOmNhc2UgIm1hcEJ1bXBPZmZzZXQiOmNhc2UgIm1hcEJ1bXBXcmFwIjpjYXNlICJtYXBCdW1wQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwTm9ybWFsIjptLm5vcm1hbE1hcD1oKHEsZS5tYXBOb3JtYWxSZXBlYXQsZS5tYXBOb3JtYWxPZmZzZXQsZS5tYXBOb3JtYWxXcmFwLGUubWFwTm9ybWFsQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwTm9ybWFsRmFjdG9yIjptLm5vcm1hbFNjYWxlPVtxLHFdO2JyZWFrO2Nhc2UgIm1hcE5vcm1hbFJlcGVhdCI6Y2FzZSAibWFwTm9ybWFsT2Zmc2V0IjpjYXNlICJtYXBOb3JtYWxXcmFwIjpjYXNlICJtYXBOb3JtYWxBbmlzb3Ryb3B5IjpicmVhaztjYXNlICJtYXBTcGVjdWxhciI6bS5zcGVjdWxhck1hcD0KaChxLGUubWFwU3BlY3VsYXJSZXBlYXQsZS5tYXBTcGVjdWxhck9mZnNldCxlLm1hcFNwZWN1bGFyV3JhcCxlLm1hcFNwZWN1bGFyQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwU3BlY3VsYXJSZXBlYXQiOmNhc2UgIm1hcFNwZWN1bGFyT2Zmc2V0IjpjYXNlICJtYXBTcGVjdWxhcldyYXAiOmNhc2UgIm1hcFNwZWN1bGFyQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwTWV0YWxuZXNzIjptLm1ldGFsbmVzc01hcD1oKHEsZS5tYXBNZXRhbG5lc3NSZXBlYXQsZS5tYXBNZXRhbG5lc3NPZmZzZXQsZS5tYXBNZXRhbG5lc3NXcmFwLGUubWFwTWV0YWxuZXNzQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwTWV0YWxuZXNzUmVwZWF0IjpjYXNlICJtYXBNZXRhbG5lc3NPZmZzZXQiOmNhc2UgIm1hcE1ldGFsbmVzc1dyYXAiOmNhc2UgIm1hcE1ldGFsbmVzc0FuaXNvdHJvcHkiOmJyZWFrO2Nhc2UgIm1hcFJvdWdobmVzcyI6bS5yb3VnaG5lc3NNYXA9aChxLGUubWFwUm91Z2huZXNzUmVwZWF0LAplLm1hcFJvdWdobmVzc09mZnNldCxlLm1hcFJvdWdobmVzc1dyYXAsZS5tYXBSb3VnaG5lc3NBbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBSb3VnaG5lc3NSZXBlYXQiOmNhc2UgIm1hcFJvdWdobmVzc09mZnNldCI6Y2FzZSAibWFwUm91Z2huZXNzV3JhcCI6Y2FzZSAibWFwUm91Z2huZXNzQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwQWxwaGEiOm0uYWxwaGFNYXA9aChxLGUubWFwQWxwaGFSZXBlYXQsZS5tYXBBbHBoYU9mZnNldCxlLm1hcEFscGhhV3JhcCxlLm1hcEFscGhhQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwQWxwaGFSZXBlYXQiOmNhc2UgIm1hcEFscGhhT2Zmc2V0IjpjYXNlICJtYXBBbHBoYVdyYXAiOmNhc2UgIm1hcEFscGhhQW5pc290cm9weSI6YnJlYWs7Y2FzZSAiZmxpcFNpZGVkIjptLnNpZGU9MTticmVhaztjYXNlICJkb3VibGVTaWRlZCI6bS5zaWRlPTI7YnJlYWs7Y2FzZSAidHJhbnNwYXJlbmN5Ijpjb25zb2xlLndhcm4oIlRIUkVFLkxvYWRlci5jcmVhdGVNYXRlcmlhbDogdHJhbnNwYXJlbmN5IGhhcyBiZWVuIHJlbmFtZWQgdG8gb3BhY2l0eSIpOwptLm9wYWNpdHk9cTticmVhaztjYXNlICJkZXB0aFRlc3QiOmNhc2UgImRlcHRoV3JpdGUiOmNhc2UgImNvbG9yV3JpdGUiOmNhc2UgIm9wYWNpdHkiOmNhc2UgInJlZmxlY3Rpdml0eSI6Y2FzZSAidHJhbnNwYXJlbnQiOmNhc2UgInZpc2libGUiOmNhc2UgIndpcmVmcmFtZSI6bVtsXT1xO2JyZWFrO2Nhc2UgInZlcnRleENvbG9ycyI6ITA9PT1xJiYobS52ZXJ0ZXhDb2xvcnM9Mik7ImZhY2UiPT09cSYmKG0udmVydGV4Q29sb3JzPTEpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyLmNyZWF0ZU1hdGVyaWFsOiBVbnN1cHBvcnRlZCIsbCxxKX19Ik1lc2hCYXNpY01hdGVyaWFsIj09PW0udHlwZSYmZGVsZXRlIG0uZW1pc3NpdmU7Ik1lc2hQaG9uZ01hdGVyaWFsIiE9PW0udHlwZSYmZGVsZXRlIG0uc3BlY3VsYXI7MT5tLm9wYWNpdHkmJihtLnRyYW5zcGFyZW50PSEwKTtkLnNldFRleHR1cmVzKGspO3JldHVybiBkLnBhcnNlKG0pfX0oKX0pO09iamVjdC5hc3NpZ24oY2UucHJvdG90eXBlLAp7bG9hZDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLGY9dGhpcy50ZXh0dXJlUGF0aCYmInN0cmluZyI9PT10eXBlb2YgdGhpcy50ZXh0dXJlUGF0aD90aGlzLnRleHR1cmVQYXRoOmdjLnByb3RvdHlwZS5leHRyYWN0VXJsQmFzZShhKSxnPW5ldyB1YSh0aGlzLm1hbmFnZXIpO2cuc2V0UmVzcG9uc2VUeXBlKCJqc29uIik7Zy5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpO2cubG9hZChhLGZ1bmN0aW9uKGMpe3ZhciBkPWMubWV0YWRhdGE7aWYodm9pZCAwIT09ZCYmKGQ9ZC50eXBlLHZvaWQgMCE9PWQpKXtpZigib2JqZWN0Ij09PWQudG9Mb3dlckNhc2UoKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuSlNPTkxvYWRlcjogIithKyIgc2hvdWxkIGJlIGxvYWRlZCB3aXRoIFRIUkVFLk9iamVjdExvYWRlciBpbnN0ZWFkLiIpO3JldHVybn1pZigic2NlbmUiPT09ZC50b0xvd2VyQ2FzZSgpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5KU09OTG9hZGVyOiAiK2ErCiIgc2hvdWxkIGJlIGxvYWRlZCB3aXRoIFRIUkVFLlNjZW5lTG9hZGVyIGluc3RlYWQuIik7cmV0dXJufX1jPWUucGFyc2UoYyxmKTtiKGMuZ2VvbWV0cnksYy5tYXRlcmlhbHMpfSxjLGQpfSxzZXRUZXh0dXJlUGF0aDpmdW5jdGlvbihhKXt0aGlzLnRleHR1cmVQYXRoPWF9LHBhcnNlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGEsYil7dm9pZCAwIT09YS5kYXRhJiYoYT1hLmRhdGEpO2Euc2NhbGU9dm9pZCAwIT09YS5zY2FsZT8xL2Euc2NhbGU6MTt2YXIgYz1uZXcgTSxkPWEsZSxmLGcsaCxrLG0sbCxxLG4scix6LHQseSx4LHY9ZC5mYWNlcztuPWQudmVydGljZXM7dmFyIEc9ZC5ub3JtYWxzLHc9ZC5jb2xvcnM7bT1kLnNjYWxlO3ZhciBCPTA7aWYodm9pZCAwIT09ZC51dnMpe2ZvcihlPTA7ZTxkLnV2cy5sZW5ndGg7ZSsrKWQudXZzW2VdLmxlbmd0aCYmQisrO2ZvcihlPTA7ZTxCO2UrKyljLmZhY2VWZXJ0ZXhVdnNbZV09W119aD0wO2ZvcihrPW4ubGVuZ3RoO2g8azspZT0KbmV3IHAsZS54PW5baCsrXSptLGUueT1uW2grK10qbSxlLno9bltoKytdKm0sYy52ZXJ0aWNlcy5wdXNoKGUpO2g9MDtmb3Ioaz12Lmxlbmd0aDtoPGs7KWlmKG49dltoKytdLHI9biYxLGc9biYyLGU9biY4LGw9biYxNix6PW4mMzIsbT1uJjY0LG4mPTEyOCxyKXtyPW5ldyBWYTtyLmE9dltoXTtyLmI9dltoKzFdO3IuYz12W2grM107dD1uZXcgVmE7dC5hPXZbaCsxXTt0LmI9dltoKzJdO3QuYz12W2grM107aCs9NDtnJiYoZz12W2grK10sci5tYXRlcmlhbEluZGV4PWcsdC5tYXRlcmlhbEluZGV4PWcpO2c9Yy5mYWNlcy5sZW5ndGg7aWYoZSlmb3IoZT0wO2U8QjtlKyspZm9yKHk9ZC51dnNbZV0sYy5mYWNlVmVydGV4VXZzW2VdW2ddPVtdLGMuZmFjZVZlcnRleFV2c1tlXVtnKzFdPVtdLGY9MDs0PmY7ZisrKXE9dltoKytdLHg9eVsyKnFdLHE9eVsyKnErMV0seD1uZXcgRCh4LHEpLDIhPT1mJiZjLmZhY2VWZXJ0ZXhVdnNbZV1bZ10ucHVzaCh4KSwwIT09ZiYmYy5mYWNlVmVydGV4VXZzW2VdW2crCjFdLnB1c2goeCk7bCYmKGw9Myp2W2grK10sci5ub3JtYWwuc2V0KEdbbCsrXSxHW2wrK10sR1tsXSksdC5ub3JtYWwuY29weShyLm5vcm1hbCkpO2lmKHopZm9yKGU9MDs0PmU7ZSsrKWw9Myp2W2grK10sej1uZXcgcChHW2wrK10sR1tsKytdLEdbbF0pLDIhPT1lJiZyLnZlcnRleE5vcm1hbHMucHVzaCh6KSwwIT09ZSYmdC52ZXJ0ZXhOb3JtYWxzLnB1c2goeik7bSYmKG09dltoKytdLG09d1ttXSxyLmNvbG9yLnNldEhleChtKSx0LmNvbG9yLnNldEhleChtKSk7aWYobilmb3IoZT0wOzQ+ZTtlKyspbT12W2grK10sbT13W21dLDIhPT1lJiZyLnZlcnRleENvbG9ycy5wdXNoKG5ldyBIKG0pKSwwIT09ZSYmdC52ZXJ0ZXhDb2xvcnMucHVzaChuZXcgSChtKSk7Yy5mYWNlcy5wdXNoKHIpO2MuZmFjZXMucHVzaCh0KX1lbHNle3I9bmV3IFZhO3IuYT12W2grK107ci5iPXZbaCsrXTtyLmM9dltoKytdO2cmJihnPXZbaCsrXSxyLm1hdGVyaWFsSW5kZXg9Zyk7Zz1jLmZhY2VzLmxlbmd0aDsKaWYoZSlmb3IoZT0wO2U8QjtlKyspZm9yKHk9ZC51dnNbZV0sYy5mYWNlVmVydGV4VXZzW2VdW2ddPVtdLGY9MDszPmY7ZisrKXE9dltoKytdLHg9eVsyKnFdLHE9eVsyKnErMV0seD1uZXcgRCh4LHEpLGMuZmFjZVZlcnRleFV2c1tlXVtnXS5wdXNoKHgpO2wmJihsPTMqdltoKytdLHIubm9ybWFsLnNldChHW2wrK10sR1tsKytdLEdbbF0pKTtpZih6KWZvcihlPTA7Mz5lO2UrKylsPTMqdltoKytdLHo9bmV3IHAoR1tsKytdLEdbbCsrXSxHW2xdKSxyLnZlcnRleE5vcm1hbHMucHVzaCh6KTttJiYobT12W2grK10sci5jb2xvci5zZXRIZXgod1ttXSkpO2lmKG4pZm9yKGU9MDszPmU7ZSsrKW09dltoKytdLHIudmVydGV4Q29sb3JzLnB1c2gobmV3IEgod1ttXSkpO2MuZmFjZXMucHVzaChyKX1kPWE7aD12b2lkIDAhPT1kLmluZmx1ZW5jZXNQZXJWZXJ0ZXg/ZC5pbmZsdWVuY2VzUGVyVmVydGV4OjI7aWYoZC5za2luV2VpZ2h0cylmb3Ioaz0wLHY9ZC5za2luV2VpZ2h0cy5sZW5ndGg7azwKdjtrKz1oKWMuc2tpbldlaWdodHMucHVzaChuZXcgZ2EoZC5za2luV2VpZ2h0c1trXSwxPGg/ZC5za2luV2VpZ2h0c1trKzFdOjAsMjxoP2Quc2tpbldlaWdodHNbaysyXTowLDM8aD9kLnNraW5XZWlnaHRzW2srM106MCkpO2lmKGQuc2tpbkluZGljZXMpZm9yKGs9MCx2PWQuc2tpbkluZGljZXMubGVuZ3RoO2s8djtrKz1oKWMuc2tpbkluZGljZXMucHVzaChuZXcgZ2EoZC5za2luSW5kaWNlc1trXSwxPGg/ZC5za2luSW5kaWNlc1trKzFdOjAsMjxoP2Quc2tpbkluZGljZXNbaysyXTowLDM8aD9kLnNraW5JbmRpY2VzW2srM106MCkpO2MuYm9uZXM9ZC5ib25lcztjLmJvbmVzJiYwPGMuYm9uZXMubGVuZ3RoJiYoYy5za2luV2VpZ2h0cy5sZW5ndGghPT1jLnNraW5JbmRpY2VzLmxlbmd0aHx8Yy5za2luSW5kaWNlcy5sZW5ndGghPT1jLnZlcnRpY2VzLmxlbmd0aCkmJmNvbnNvbGUud2FybigiV2hlbiBza2lubmluZywgbnVtYmVyIG9mIHZlcnRpY2VzICgiK2MudmVydGljZXMubGVuZ3RoKwoiKSwgc2tpbkluZGljZXMgKCIrYy5za2luSW5kaWNlcy5sZW5ndGgrIiksIGFuZCBza2luV2VpZ2h0cyAoIitjLnNraW5XZWlnaHRzLmxlbmd0aCsiKSBzaG91bGQgbWF0Y2guIik7az1hO3Y9ay5zY2FsZTtpZih2b2lkIDAhPT1rLm1vcnBoVGFyZ2V0cylmb3IoZD0wLGg9ay5tb3JwaFRhcmdldHMubGVuZ3RoO2Q8aDtkKyspZm9yKGMubW9ycGhUYXJnZXRzW2RdPXt9LGMubW9ycGhUYXJnZXRzW2RdLm5hbWU9ay5tb3JwaFRhcmdldHNbZF0ubmFtZSxjLm1vcnBoVGFyZ2V0c1tkXS52ZXJ0aWNlcz1bXSxHPWMubW9ycGhUYXJnZXRzW2RdLnZlcnRpY2VzLHc9ay5tb3JwaFRhcmdldHNbZF0udmVydGljZXMsQj0wLG49dy5sZW5ndGg7QjxuO0IrPTMpbT1uZXcgcCxtLng9d1tCXSp2LG0ueT13W0IrMV0qdixtLno9d1tCKzJdKnYsRy5wdXNoKG0pO2lmKHZvaWQgMCE9PWsubW9ycGhDb2xvcnMmJjA8ay5tb3JwaENvbG9ycy5sZW5ndGgpZm9yKGNvbnNvbGUud2FybignVEhSRUUuSlNPTkxvYWRlcjogIm1vcnBoQ29sb3JzIiBubyBsb25nZXIgc3VwcG9ydGVkLiBVc2luZyB0aGVtIGFzIGZhY2UgY29sb3JzLicpLAp2PWMuZmFjZXMsaz1rLm1vcnBoQ29sb3JzWzBdLmNvbG9ycyxkPTAsaD12Lmxlbmd0aDtkPGg7ZCsrKXZbZF0uY29sb3IuZnJvbUFycmF5KGssMypkKTtrPWE7ZD1bXTtoPVtdO3ZvaWQgMCE9PWsuYW5pbWF0aW9uJiZoLnB1c2goay5hbmltYXRpb24pO3ZvaWQgMCE9PWsuYW5pbWF0aW9ucyYmKGsuYW5pbWF0aW9ucy5sZW5ndGg/aD1oLmNvbmNhdChrLmFuaW1hdGlvbnMpOmgucHVzaChrLmFuaW1hdGlvbnMpKTtmb3Ioaz0wO2s8aC5sZW5ndGg7aysrKSh2PUJhLnBhcnNlQW5pbWF0aW9uKGhba10sYy5ib25lcykpJiZkLnB1c2godik7Yy5tb3JwaFRhcmdldHMmJihoPUJhLkNyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKGMubW9ycGhUYXJnZXRzLDEwKSxkPWQuY29uY2F0KGgpKTswPGQubGVuZ3RoJiYoYy5hbmltYXRpb25zPWQpO2MuY29tcHV0ZUZhY2VOb3JtYWxzKCk7Yy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtpZih2b2lkIDA9PT1hLm1hdGVyaWFsc3x8MD09PQphLm1hdGVyaWFscy5sZW5ndGgpcmV0dXJue2dlb21ldHJ5OmN9O2Q9Z2MucHJvdG90eXBlLmluaXRNYXRlcmlhbHMoYS5tYXRlcmlhbHMsYix0aGlzLmNyb3NzT3JpZ2luKTtyZXR1cm57Z2VvbWV0cnk6YyxtYXRlcmlhbHM6ZH19fSgpfSk7T2JqZWN0LmFzc2lnbihSZS5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYSxiLGMsZCl7IiI9PT10aGlzLnRleHR1cmVQYXRoJiYodGhpcy50ZXh0dXJlUGF0aD1hLnN1YnN0cmluZygwLGEubGFzdEluZGV4T2YoIi8iKSsxKSk7dmFyIGU9dGhpczsobmV3IHVhKGUubWFuYWdlcikpLmxvYWQoYSxmdW5jdGlvbihjKXt2YXIgZz1udWxsO3RyeXtnPUpTT04ucGFyc2UoYyl9Y2F0Y2goaCl7dm9pZCAwIT09ZCYmZChoKTtjb25zb2xlLmVycm9yKCJUSFJFRTpPYmplY3RMb2FkZXI6IENhbid0IHBhcnNlICIrYSsiLiIsaC5tZXNzYWdlKTtyZXR1cm59Yz1nLm1ldGFkYXRhO3ZvaWQgMD09PWN8fHZvaWQgMD09PWMudHlwZXx8Imdlb21ldHJ5Ij09PWMudHlwZS50b0xvd2VyQ2FzZSgpPwpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3RMb2FkZXI6IENhbid0IGxvYWQgIithKyIuIFVzZSBUSFJFRS5KU09OTG9hZGVyIGluc3RlYWQuIik6ZS5wYXJzZShnLGIpfSxjLGQpfSxzZXRUZXh0dXJlUGF0aDpmdW5jdGlvbihhKXt0aGlzLnRleHR1cmVQYXRoPWF9LHNldENyb3NzT3JpZ2luOmZ1bmN0aW9uKGEpe3RoaXMuY3Jvc3NPcmlnaW49YX0scGFyc2U6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLnBhcnNlR2VvbWV0cmllcyhhLmdlb21ldHJpZXMpLGQ9dGhpcy5wYXJzZUltYWdlcyhhLmltYWdlcyxmdW5jdGlvbigpe3ZvaWQgMCE9PWImJmIoZSl9KSxkPXRoaXMucGFyc2VUZXh0dXJlcyhhLnRleHR1cmVzLGQpLGQ9dGhpcy5wYXJzZU1hdGVyaWFscyhhLm1hdGVyaWFscyxkKSxlPXRoaXMucGFyc2VPYmplY3QoYS5vYmplY3QsYyxkKTthLmFuaW1hdGlvbnMmJihlLmFuaW1hdGlvbnM9dGhpcy5wYXJzZUFuaW1hdGlvbnMoYS5hbmltYXRpb25zKSk7dm9pZCAwIT09YS5pbWFnZXMmJgowIT09YS5pbWFnZXMubGVuZ3RofHx2b2lkIDA9PT1ifHxiKGUpO3JldHVybiBlfSxwYXJzZUdlb21ldHJpZXM6ZnVuY3Rpb24oYSl7dmFyIGI9e307aWYodm9pZCAwIT09YSlmb3IodmFyIGM9bmV3IGNlLGQ9bmV3IGJlLGU9MCxmPWEubGVuZ3RoO2U8ZjtlKyspe3ZhciBnLGg9YVtlXTtzd2l0Y2goaC50eXBlKXtjYXNlICJQbGFuZUdlb21ldHJ5IjpjYXNlICJQbGFuZUJ1ZmZlckdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgud2lkdGgsaC5oZWlnaHQsaC53aWR0aFNlZ21lbnRzLGguaGVpZ2h0U2VnbWVudHMpO2JyZWFrO2Nhc2UgIkJveEdlb21ldHJ5IjpjYXNlICJCb3hCdWZmZXJHZW9tZXRyeSI6Y2FzZSAiQ3ViZUdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgud2lkdGgsaC5oZWlnaHQsaC5kZXB0aCxoLndpZHRoU2VnbWVudHMsaC5oZWlnaHRTZWdtZW50cyxoLmRlcHRoU2VnbWVudHMpO2JyZWFrO2Nhc2UgIkNpcmNsZUdlb21ldHJ5IjpjYXNlICJDaXJjbGVCdWZmZXJHZW9tZXRyeSI6Zz0KbmV3IE1hW2gudHlwZV0oaC5yYWRpdXMsaC5zZWdtZW50cyxoLnRoZXRhU3RhcnQsaC50aGV0YUxlbmd0aCk7YnJlYWs7Y2FzZSAiQ3lsaW5kZXJHZW9tZXRyeSI6Y2FzZSAiQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeSI6Zz1uZXcgTWFbaC50eXBlXShoLnJhZGl1c1RvcCxoLnJhZGl1c0JvdHRvbSxoLmhlaWdodCxoLnJhZGlhbFNlZ21lbnRzLGguaGVpZ2h0U2VnbWVudHMsaC5vcGVuRW5kZWQsaC50aGV0YVN0YXJ0LGgudGhldGFMZW5ndGgpO2JyZWFrO2Nhc2UgIkNvbmVHZW9tZXRyeSI6Y2FzZSAiQ29uZUJ1ZmZlckdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgucmFkaXVzLGguaGVpZ2h0LGgucmFkaWFsU2VnbWVudHMsaC5oZWlnaHRTZWdtZW50cyxoLm9wZW5FbmRlZCxoLnRoZXRhU3RhcnQsaC50aGV0YUxlbmd0aCk7YnJlYWs7Y2FzZSAiU3BoZXJlR2VvbWV0cnkiOmNhc2UgIlNwaGVyZUJ1ZmZlckdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgucmFkaXVzLGgud2lkdGhTZWdtZW50cywKaC5oZWlnaHRTZWdtZW50cyxoLnBoaVN0YXJ0LGgucGhpTGVuZ3RoLGgudGhldGFTdGFydCxoLnRoZXRhTGVuZ3RoKTticmVhaztjYXNlICJEb2RlY2FoZWRyb25HZW9tZXRyeSI6Y2FzZSAiSWNvc2FoZWRyb25HZW9tZXRyeSI6Y2FzZSAiT2N0YWhlZHJvbkdlb21ldHJ5IjpjYXNlICJUZXRyYWhlZHJvbkdlb21ldHJ5IjpnPW5ldyBNYVtoLnR5cGVdKGgucmFkaXVzLGguZGV0YWlsKTticmVhaztjYXNlICJSaW5nR2VvbWV0cnkiOmNhc2UgIlJpbmdCdWZmZXJHZW9tZXRyeSI6Zz1uZXcgTWFbaC50eXBlXShoLmlubmVyUmFkaXVzLGgub3V0ZXJSYWRpdXMsaC50aGV0YVNlZ21lbnRzLGgucGhpU2VnbWVudHMsaC50aGV0YVN0YXJ0LGgudGhldGFMZW5ndGgpO2JyZWFrO2Nhc2UgIlRvcnVzR2VvbWV0cnkiOmNhc2UgIlRvcnVzQnVmZmVyR2VvbWV0cnkiOmc9bmV3IE1hW2gudHlwZV0oaC5yYWRpdXMsaC50dWJlLGgucmFkaWFsU2VnbWVudHMsaC50dWJ1bGFyU2VnbWVudHMsaC5hcmMpOwpicmVhaztjYXNlICJUb3J1c0tub3RHZW9tZXRyeSI6Y2FzZSAiVG9ydXNLbm90QnVmZmVyR2VvbWV0cnkiOmc9bmV3IE1hW2gudHlwZV0oaC5yYWRpdXMsaC50dWJlLGgudHVidWxhclNlZ21lbnRzLGgucmFkaWFsU2VnbWVudHMsaC5wLGgucSk7YnJlYWs7Y2FzZSAiTGF0aGVHZW9tZXRyeSI6Y2FzZSAiTGF0aGVCdWZmZXJHZW9tZXRyeSI6Zz1uZXcgTWFbaC50eXBlXShoLnBvaW50cyxoLnNlZ21lbnRzLGgucGhpU3RhcnQsaC5waGlMZW5ndGgpO2JyZWFrO2Nhc2UgIkJ1ZmZlckdlb21ldHJ5IjpnPWQucGFyc2UoaCk7YnJlYWs7Y2FzZSAiR2VvbWV0cnkiOmc9Yy5wYXJzZShoLHRoaXMudGV4dHVyZVBhdGgpLmdlb21ldHJ5O2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCdUSFJFRS5PYmplY3RMb2FkZXI6IFVuc3VwcG9ydGVkIGdlb21ldHJ5IHR5cGUgIicraC50eXBlKyciJyk7Y29udGludWV9Zy51dWlkPWgudXVpZDt2b2lkIDAhPT1oLm5hbWUmJihnLm5hbWU9aC5uYW1lKTsKYltoLnV1aWRdPWd9cmV0dXJuIGJ9LHBhcnNlTWF0ZXJpYWxzOmZ1bmN0aW9uKGEsYil7dmFyIGM9e307aWYodm9pZCAwIT09YSl7dmFyIGQ9bmV3IEhkO2Quc2V0VGV4dHVyZXMoYik7Zm9yKHZhciBlPTAsZj1hLmxlbmd0aDtlPGY7ZSsrKXt2YXIgZz1hW2VdO2lmKCJNdWx0aU1hdGVyaWFsIj09PWcudHlwZSl7Zm9yKHZhciBoPVtdLGs9MDtrPGcubWF0ZXJpYWxzLmxlbmd0aDtrKyspaC5wdXNoKGQucGFyc2UoZy5tYXRlcmlhbHNba10pKTtjW2cudXVpZF09aH1lbHNlIGNbZy51dWlkXT1kLnBhcnNlKGcpfX1yZXR1cm4gY30scGFyc2VBbmltYXRpb25zOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPUJhLnBhcnNlKGFbY10pO2IucHVzaChkKX1yZXR1cm4gYn0scGFyc2VJbWFnZXM6ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2QubWFuYWdlci5pdGVtU3RhcnQoYSk7cmV0dXJuIGcubG9hZChhLGZ1bmN0aW9uKCl7ZC5tYW5hZ2VyLml0ZW1FbmQoYSl9LAp2b2lkIDAsZnVuY3Rpb24oKXtkLm1hbmFnZXIuaXRlbUVuZChhKTtkLm1hbmFnZXIuaXRlbUVycm9yKGEpfSl9dmFyIGQ9dGhpcyxlPXt9O2lmKHZvaWQgMCE9PWEmJjA8YS5sZW5ndGgpe3ZhciBmPW5ldyBaZChiKSxnPW5ldyBWYyhmKTtnLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2Zvcih2YXIgZj0wLGg9YS5sZW5ndGg7ZjxoO2YrKyl7dmFyIGs9YVtmXSxsPS9eKFwvXC8pfChbYS16XSs6KFwvXC8pPykvaS50ZXN0KGsudXJsKT9rLnVybDpkLnRleHR1cmVQYXRoK2sudXJsO2Vbay51dWlkXT1jKGwpfX1yZXR1cm4gZX0scGFyc2VUZXh0dXJlczpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtpZigibnVtYmVyIj09PXR5cGVvZiBhKXJldHVybiBhO2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyLnBhcnNlVGV4dHVyZTogQ29uc3RhbnQgc2hvdWxkIGJlIGluIG51bWVyaWMgZm9ybS4iLGEpO3JldHVybiBiW2FdfXZhciBkPXt9O2lmKHZvaWQgMCE9PQphKWZvcih2YXIgZT0wLGY9YS5sZW5ndGg7ZTxmO2UrKyl7dmFyIGc9YVtlXTt2b2lkIDA9PT1nLmltYWdlJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogTm8gImltYWdlIiBzcGVjaWZpZWQgZm9yJyxnLnV1aWQpO3ZvaWQgMD09PWJbZy5pbWFnZV0mJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgaW1hZ2UiLGcuaW1hZ2UpO3ZhciBoPW5ldyBYKGJbZy5pbWFnZV0pO2gubmVlZHNVcGRhdGU9ITA7aC51dWlkPWcudXVpZDt2b2lkIDAhPT1nLm5hbWUmJihoLm5hbWU9Zy5uYW1lKTt2b2lkIDAhPT1nLm1hcHBpbmcmJihoLm1hcHBpbmc9YyhnLm1hcHBpbmcsbWcpKTt2b2lkIDAhPT1nLm9mZnNldCYmaC5vZmZzZXQuZnJvbUFycmF5KGcub2Zmc2V0KTt2b2lkIDAhPT1nLnJlcGVhdCYmaC5yZXBlYXQuZnJvbUFycmF5KGcucmVwZWF0KTt2b2lkIDAhPT1nLndyYXAmJihoLndyYXBTPWMoZy53cmFwWzBdLGdmKSxoLndyYXBUPWMoZy53cmFwWzFdLApnZikpO3ZvaWQgMCE9PWcubWluRmlsdGVyJiYoaC5taW5GaWx0ZXI9YyhnLm1pbkZpbHRlcixoZikpO3ZvaWQgMCE9PWcubWFnRmlsdGVyJiYoaC5tYWdGaWx0ZXI9YyhnLm1hZ0ZpbHRlcixoZikpO3ZvaWQgMCE9PWcuYW5pc290cm9weSYmKGguYW5pc290cm9weT1nLmFuaXNvdHJvcHkpO3ZvaWQgMCE9PWcuZmxpcFkmJihoLmZsaXBZPWcuZmxpcFkpO2RbZy51dWlkXT1ofXJldHVybiBkfSxwYXJzZU9iamVjdDpmdW5jdGlvbigpe3ZhciBhPW5ldyBKO3JldHVybiBmdW5jdGlvbihiLGMsZCl7ZnVuY3Rpb24gZShhKXt2b2lkIDA9PT1jW2FdJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIGdlb21ldHJ5IixhKTtyZXR1cm4gY1thXX1mdW5jdGlvbiBmKGEpe2lmKHZvaWQgMCE9PWEpe2lmKEFycmF5LmlzQXJyYXkoYSkpe2Zvcih2YXIgYj1bXSxjPTAsZT1hLmxlbmd0aDtjPGU7YysrKXt2YXIgZj1hW2NdO3ZvaWQgMD09PWRbZl0mJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgbWF0ZXJpYWwiLApmKTtiLnB1c2goZFtmXSl9cmV0dXJuIGJ9dm9pZCAwPT09ZFthXSYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBtYXRlcmlhbCIsYSk7cmV0dXJuIGRbYV19fXZhciBnO3N3aXRjaChiLnR5cGUpe2Nhc2UgIlNjZW5lIjpnPW5ldyBtZDt2b2lkIDAhPT1iLmJhY2tncm91bmQmJk51bWJlci5pc0ludGVnZXIoYi5iYWNrZ3JvdW5kKSYmKGcuYmFja2dyb3VuZD1uZXcgSChiLmJhY2tncm91bmQpKTt2b2lkIDAhPT1iLmZvZyYmKCJGb2ciPT09Yi5mb2cudHlwZT9nLmZvZz1uZXcgTGIoYi5mb2cuY29sb3IsYi5mb2cubmVhcixiLmZvZy5mYXIpOiJGb2dFeHAyIj09PWIuZm9nLnR5cGUmJihnLmZvZz1uZXcgS2IoYi5mb2cuY29sb3IsYi5mb2cuZGVuc2l0eSkpKTticmVhaztjYXNlICJQZXJzcGVjdGl2ZUNhbWVyYSI6Zz1uZXcgeGEoYi5mb3YsYi5hc3BlY3QsYi5uZWFyLGIuZmFyKTt2b2lkIDAhPT1iLmZvY3VzJiYoZy5mb2N1cz1iLmZvY3VzKTt2b2lkIDAhPT0KYi56b29tJiYoZy56b29tPWIuem9vbSk7dm9pZCAwIT09Yi5maWxtR2F1Z2UmJihnLmZpbG1HYXVnZT1iLmZpbG1HYXVnZSk7dm9pZCAwIT09Yi5maWxtT2Zmc2V0JiYoZy5maWxtT2Zmc2V0PWIuZmlsbU9mZnNldCk7dm9pZCAwIT09Yi52aWV3JiYoZy52aWV3PU9iamVjdC5hc3NpZ24oe30sYi52aWV3KSk7YnJlYWs7Y2FzZSAiT3J0aG9ncmFwaGljQ2FtZXJhIjpnPW5ldyBKYihiLmxlZnQsYi5yaWdodCxiLnRvcCxiLmJvdHRvbSxiLm5lYXIsYi5mYXIpO2JyZWFrO2Nhc2UgIkFtYmllbnRMaWdodCI6Zz1uZXcgemQoYi5jb2xvcixiLmludGVuc2l0eSk7YnJlYWs7Y2FzZSAiRGlyZWN0aW9uYWxMaWdodCI6Zz1uZXcgeWQoYi5jb2xvcixiLmludGVuc2l0eSk7YnJlYWs7Y2FzZSAiUG9pbnRMaWdodCI6Zz1uZXcgd2QoYi5jb2xvcixiLmludGVuc2l0eSxiLmRpc3RhbmNlLGIuZGVjYXkpO2JyZWFrO2Nhc2UgIlJlY3RBcmVhTGlnaHQiOmc9bmV3IEFkKGIuY29sb3IsYi5pbnRlbnNpdHksCmIud2lkdGgsYi5oZWlnaHQpO2JyZWFrO2Nhc2UgIlNwb3RMaWdodCI6Zz1uZXcgdmQoYi5jb2xvcixiLmludGVuc2l0eSxiLmRpc3RhbmNlLGIuYW5nbGUsYi5wZW51bWJyYSxiLmRlY2F5KTticmVhaztjYXNlICJIZW1pc3BoZXJlTGlnaHQiOmc9bmV3IHRkKGIuY29sb3IsYi5ncm91bmRDb2xvcixiLmludGVuc2l0eSk7YnJlYWs7Y2FzZSAiU2tpbm5lZE1lc2giOmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyLnBhcnNlT2JqZWN0KCkgZG9lcyBub3Qgc3VwcG9ydCBTa2lubmVkTWVzaCB5ZXQuIik7Y2FzZSAiTWVzaCI6Zz1lKGIuZ2VvbWV0cnkpO3ZhciBoPWYoYi5tYXRlcmlhbCk7Zz1nLmJvbmVzJiYwPGcuYm9uZXMubGVuZ3RoP25ldyBvZChnLGgpOm5ldyBDYShnLGgpO2JyZWFrO2Nhc2UgIkxPRCI6Zz1uZXcgQmM7YnJlYWs7Y2FzZSAiTGluZSI6Zz1uZXcgeWEoZShiLmdlb21ldHJ5KSxmKGIubWF0ZXJpYWwpLGIubW9kZSk7YnJlYWs7Y2FzZSAiTGluZUxvb3AiOmc9Cm5ldyBwZChlKGIuZ2VvbWV0cnkpLGYoYi5tYXRlcmlhbCkpO2JyZWFrO2Nhc2UgIkxpbmVTZWdtZW50cyI6Zz1uZXcgZGEoZShiLmdlb21ldHJ5KSxmKGIubWF0ZXJpYWwpKTticmVhaztjYXNlICJQb2ludENsb3VkIjpjYXNlICJQb2ludHMiOmc9bmV3IE1iKGUoYi5nZW9tZXRyeSksZihiLm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSAiU3ByaXRlIjpnPW5ldyBBYyhmKGIubWF0ZXJpYWwpKTticmVhaztjYXNlICJHcm91cCI6Zz1uZXcgRGM7YnJlYWs7ZGVmYXVsdDpnPW5ldyBCfWcudXVpZD1iLnV1aWQ7dm9pZCAwIT09Yi5uYW1lJiYoZy5uYW1lPWIubmFtZSk7dm9pZCAwIT09Yi5tYXRyaXg/KGEuZnJvbUFycmF5KGIubWF0cml4KSxhLmRlY29tcG9zZShnLnBvc2l0aW9uLGcucXVhdGVybmlvbixnLnNjYWxlKSk6KHZvaWQgMCE9PWIucG9zaXRpb24mJmcucG9zaXRpb24uZnJvbUFycmF5KGIucG9zaXRpb24pLHZvaWQgMCE9PWIucm90YXRpb24mJmcucm90YXRpb24uZnJvbUFycmF5KGIucm90YXRpb24pLAp2b2lkIDAhPT1iLnF1YXRlcm5pb24mJmcucXVhdGVybmlvbi5mcm9tQXJyYXkoYi5xdWF0ZXJuaW9uKSx2b2lkIDAhPT1iLnNjYWxlJiZnLnNjYWxlLmZyb21BcnJheShiLnNjYWxlKSk7dm9pZCAwIT09Yi5jYXN0U2hhZG93JiYoZy5jYXN0U2hhZG93PWIuY2FzdFNoYWRvdyk7dm9pZCAwIT09Yi5yZWNlaXZlU2hhZG93JiYoZy5yZWNlaXZlU2hhZG93PWIucmVjZWl2ZVNoYWRvdyk7Yi5zaGFkb3cmJih2b2lkIDAhPT1iLnNoYWRvdy5iaWFzJiYoZy5zaGFkb3cuYmlhcz1iLnNoYWRvdy5iaWFzKSx2b2lkIDAhPT1iLnNoYWRvdy5yYWRpdXMmJihnLnNoYWRvdy5yYWRpdXM9Yi5zaGFkb3cucmFkaXVzKSx2b2lkIDAhPT1iLnNoYWRvdy5tYXBTaXplJiZnLnNoYWRvdy5tYXBTaXplLmZyb21BcnJheShiLnNoYWRvdy5tYXBTaXplKSx2b2lkIDAhPT1iLnNoYWRvdy5jYW1lcmEmJihnLnNoYWRvdy5jYW1lcmE9dGhpcy5wYXJzZU9iamVjdChiLnNoYWRvdy5jYW1lcmEpKSk7dm9pZCAwIT09CmIudmlzaWJsZSYmKGcudmlzaWJsZT1iLnZpc2libGUpO3ZvaWQgMCE9PWIudXNlckRhdGEmJihnLnVzZXJEYXRhPWIudXNlckRhdGEpO2lmKHZvaWQgMCE9PWIuY2hpbGRyZW4pZm9yKHZhciBrIGluIGIuY2hpbGRyZW4pZy5hZGQodGhpcy5wYXJzZU9iamVjdChiLmNoaWxkcmVuW2tdLGMsZCkpO2lmKCJMT0QiPT09Yi50eXBlKWZvcihiPWIubGV2ZWxzLGg9MDtoPGIubGVuZ3RoO2grKyl7dmFyIGw9YltoXTtrPWcuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgidXVpZCIsbC5vYmplY3QpO3ZvaWQgMCE9PWsmJmcuYWRkTGV2ZWwoayxsLmRpc3RhbmNlKX1yZXR1cm4gZ319KCl9KTt2YXIgbWc9e1VWTWFwcGluZzozMDAsQ3ViZVJlZmxlY3Rpb25NYXBwaW5nOjMwMSxDdWJlUmVmcmFjdGlvbk1hcHBpbmc6MzAyLEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOjMwMyxFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZzozMDQsU3BoZXJpY2FsUmVmbGVjdGlvbk1hcHBpbmc6MzA1LApDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzozMDYsQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6MzA3fSxnZj17UmVwZWF0V3JhcHBpbmc6MUUzLENsYW1wVG9FZGdlV3JhcHBpbmc6MTAwMSxNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOjEwMDJ9LGhmPXtOZWFyZXN0RmlsdGVyOjEwMDMsTmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXI6MTAwNCxOZWFyZXN0TWlwTWFwTGluZWFyRmlsdGVyOjEwMDUsTGluZWFyRmlsdGVyOjEwMDYsTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcjoxMDA3LExpbmVhck1pcE1hcExpbmVhckZpbHRlcjoxMDA4fTtPYmplY3QuYXNzaWduKG5hLnByb3RvdHlwZSx7Z2V0UG9pbnQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIik7cmV0dXJuIG51bGx9LGdldFBvaW50QXQ6ZnVuY3Rpb24oYSl7YT10aGlzLmdldFV0b1RtYXBwaW5nKGEpO3JldHVybiB0aGlzLmdldFBvaW50KGEpfSxnZXRQb2ludHM6ZnVuY3Rpb24oYSl7dm9pZCAwPT09CmEmJihhPTUpO2Zvcih2YXIgYj1bXSxjPTA7Yzw9YTtjKyspYi5wdXNoKHRoaXMuZ2V0UG9pbnQoYy9hKSk7cmV0dXJuIGJ9LGdldFNwYWNlZFBvaW50czpmdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT01KTtmb3IodmFyIGI9W10sYz0wO2M8PWE7YysrKWIucHVzaCh0aGlzLmdldFBvaW50QXQoYy9hKSk7cmV0dXJuIGJ9LGdldExlbmd0aDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0TGVuZ3RocygpO3JldHVybiBhW2EubGVuZ3RoLTFdfSxnZXRMZW5ndGhzOmZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKTtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09YSsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTt2YXIgYj1bXSxjLGQ9dGhpcy5nZXRQb2ludCgwKSxlLGY9MDtiLnB1c2goMCk7Zm9yKGU9MTtlPD1hO2UrKyljPQp0aGlzLmdldFBvaW50KGUvYSksZis9Yy5kaXN0YW5jZVRvKGQpLGIucHVzaChmKSxkPWM7cmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzPWJ9LHVwZGF0ZUFyY0xlbmd0aHM6ZnVuY3Rpb24oKXt0aGlzLm5lZWRzVXBkYXRlPSEwO3RoaXMuZ2V0TGVuZ3RocygpfSxnZXRVdG9UbWFwcGluZzpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0TGVuZ3RocygpLGQsZT1jLmxlbmd0aCxmO2Y9Yj9iOmEqY1tlLTFdO2Zvcih2YXIgZz0wLGg9ZS0xLGs7Zzw9aDspaWYoZD1NYXRoLmZsb29yKGcrKGgtZykvMiksaz1jW2RdLWYsMD5rKWc9ZCsxO2Vsc2UgaWYoMDxrKWg9ZC0xO2Vsc2V7aD1kO2JyZWFrfWQ9aDtpZihjW2RdPT09ZilyZXR1cm4gZC8oZS0xKTtnPWNbZF07cmV0dXJuKGQrKGYtZykvKGNbZCsxXS1nKSkvKGUtMSl9LGdldFRhbmdlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS0xRS00O2ErPTFFLTQ7MD5iJiYoYj0wKTsxPGEmJihhPTEpO2I9dGhpcy5nZXRQb2ludChiKTtyZXR1cm4gdGhpcy5nZXRQb2ludChhKS5jbG9uZSgpLnN1YihiKS5ub3JtYWxpemUoKX0sCmdldFRhbmdlbnRBdDpmdW5jdGlvbihhKXthPXRoaXMuZ2V0VXRvVG1hcHBpbmcoYSk7cmV0dXJuIHRoaXMuZ2V0VGFuZ2VudChhKX0sY29tcHV0ZUZyZW5ldEZyYW1lczpmdW5jdGlvbihhLGIpe3ZhciBjPW5ldyBwLGQ9W10sZT1bXSxmPVtdLGc9bmV3IHAsaD1uZXcgSixrLGw7Zm9yKGs9MDtrPD1hO2srKylsPWsvYSxkW2tdPXRoaXMuZ2V0VGFuZ2VudEF0KGwpLGRba10ubm9ybWFsaXplKCk7ZVswXT1uZXcgcDtmWzBdPW5ldyBwO2s9TnVtYmVyLk1BWF9WQUxVRTtsPU1hdGguYWJzKGRbMF0ueCk7dmFyIHU9TWF0aC5hYnMoZFswXS55KSxxPU1hdGguYWJzKGRbMF0ueik7bDw9ayYmKGs9bCxjLnNldCgxLDAsMCkpO3U8PWsmJihrPXUsYy5zZXQoMCwxLDApKTtxPD1rJiZjLnNldCgwLDAsMSk7Zy5jcm9zc1ZlY3RvcnMoZFswXSxjKS5ub3JtYWxpemUoKTtlWzBdLmNyb3NzVmVjdG9ycyhkWzBdLGcpO2ZbMF0uY3Jvc3NWZWN0b3JzKGRbMF0sZVswXSk7Zm9yKGs9MTtrPD1hO2srKyllW2tdPQplW2stMV0uY2xvbmUoKSxmW2tdPWZbay0xXS5jbG9uZSgpLGcuY3Jvc3NWZWN0b3JzKGRbay0xXSxkW2tdKSxnLmxlbmd0aCgpPk51bWJlci5FUFNJTE9OJiYoZy5ub3JtYWxpemUoKSxjPU1hdGguYWNvcyhZLmNsYW1wKGRbay0xXS5kb3QoZFtrXSksLTEsMSkpLGVba10uYXBwbHlNYXRyaXg0KGgubWFrZVJvdGF0aW9uQXhpcyhnLGMpKSksZltrXS5jcm9zc1ZlY3RvcnMoZFtrXSxlW2tdKTtpZighMD09PWIpZm9yKGM9TWF0aC5hY29zKFkuY2xhbXAoZVswXS5kb3QoZVthXSksLTEsMSkpLGMvPWEsMDxkWzBdLmRvdChnLmNyb3NzVmVjdG9ycyhlWzBdLGVbYV0pKSYmKGM9LWMpLGs9MTtrPD1hO2srKyllW2tdLmFwcGx5TWF0cml4NChoLm1ha2VSb3RhdGlvbkF4aXMoZFtrXSxjKmspKSxmW2tdLmNyb3NzVmVjdG9ycyhkW2tdLGVba10pO3JldHVybnt0YW5nZW50czpkLG5vcm1hbHM6ZSxiaW5vcm1hbHM6Zn19fSk7U2EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTsKU2EucHJvdG90eXBlLmNvbnN0cnVjdG9yPVNhO1NhLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDtTYS5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYSl7aWYoMT09PWEpcmV0dXJuIHRoaXMudjIuY2xvbmUoKTt2YXIgYj10aGlzLnYyLmNsb25lKCkuc3ViKHRoaXMudjEpO2IubXVsdGlwbHlTY2FsYXIoYSkuYWRkKHRoaXMudjEpO3JldHVybiBifTtTYS5wcm90b3R5cGUuZ2V0UG9pbnRBdD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nZXRQb2ludChhKX07U2EucHJvdG90eXBlLmdldFRhbmdlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMudjIuY2xvbmUoKS5zdWIodGhpcy52MSkubm9ybWFsaXplKCl9O1ljLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6WWMsYWRkOmZ1bmN0aW9uKGEpe3RoaXMuY3VydmVzLnB1c2goYSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY3VydmVzWzBdLmdldFBvaW50KDApLApiPXRoaXMuY3VydmVzW3RoaXMuY3VydmVzLmxlbmd0aC0xXS5nZXRQb2ludCgxKTthLmVxdWFscyhiKXx8dGhpcy5jdXJ2ZXMucHVzaChuZXcgU2EoYixhKSl9LGdldFBvaW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEqdGhpcy5nZXRMZW5ndGgoKSxjPXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7Zm9yKGE9MDthPGMubGVuZ3RoOyl7aWYoY1thXT49YilyZXR1cm4gYj1jW2FdLWIsYT10aGlzLmN1cnZlc1thXSxjPWEuZ2V0TGVuZ3RoKCksYS5nZXRQb2ludEF0KDA9PT1jPzA6MS1iL2MpO2ErK31yZXR1cm4gbnVsbH0sZ2V0TGVuZ3RoOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtyZXR1cm4gYVthLmxlbmd0aC0xXX0sdXBkYXRlQXJjTGVuZ3RoczpmdW5jdGlvbigpe3RoaXMubmVlZHNVcGRhdGU9ITA7dGhpcy5jYWNoZUxlbmd0aHM9bnVsbDt0aGlzLmdldEN1cnZlTGVuZ3RocygpfSxnZXRDdXJ2ZUxlbmd0aHM6ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlTGVuZ3RocyYmCnRoaXMuY2FjaGVMZW5ndGhzLmxlbmd0aD09PXRoaXMuY3VydmVzLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM7Zm9yKHZhciBhPVtdLGI9MCxjPTAsZD10aGlzLmN1cnZlcy5sZW5ndGg7YzxkO2MrKyliKz10aGlzLmN1cnZlc1tjXS5nZXRMZW5ndGgoKSxhLnB1c2goYik7cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzPWF9LGdldFNwYWNlZFBvaW50czpmdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT00MCk7Zm9yKHZhciBiPVtdLGM9MDtjPD1hO2MrKyliLnB1c2godGhpcy5nZXRQb2ludChjL2EpKTt0aGlzLmF1dG9DbG9zZSYmYi5wdXNoKGJbMF0pO3JldHVybiBifSxnZXRQb2ludHM6ZnVuY3Rpb24oYSl7YT1hfHwxMjtmb3IodmFyIGI9W10sYyxkPTAsZT10aGlzLmN1cnZlcztkPGUubGVuZ3RoO2QrKylmb3IodmFyIGY9ZVtkXSxmPWYuZ2V0UG9pbnRzKGYmJmYuaXNFbGxpcHNlQ3VydmU/MiphOmYmJmYuaXNMaW5lQ3VydmU/MTpmJiZmLmlzU3BsaW5lQ3VydmU/YSpmLnBvaW50cy5sZW5ndGg6CmEpLGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIGg9ZltnXTtjJiZjLmVxdWFscyhoKXx8KGIucHVzaChoKSxjPWgpfXRoaXMuYXV0b0Nsb3NlJiYxPGIubGVuZ3RoJiYhYltiLmxlbmd0aC0xXS5lcXVhbHMoYlswXSkmJmIucHVzaChiWzBdKTtyZXR1cm4gYn0sY3JlYXRlUG9pbnRzR2VvbWV0cnk6ZnVuY3Rpb24oYSl7YT10aGlzLmdldFBvaW50cyhhKTtyZXR1cm4gdGhpcy5jcmVhdGVHZW9tZXRyeShhKX0sY3JlYXRlU3BhY2VkUG9pbnRzR2VvbWV0cnk6ZnVuY3Rpb24oYSl7YT10aGlzLmdldFNwYWNlZFBvaW50cyhhKTtyZXR1cm4gdGhpcy5jcmVhdGVHZW9tZXRyeShhKX0sY3JlYXRlR2VvbWV0cnk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPW5ldyBNLGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspe3ZhciBlPWFbY107Yi52ZXJ0aWNlcy5wdXNoKG5ldyBwKGUueCxlLnksZS56fHwwKSl9cmV0dXJuIGJ9fSk7WGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTtYYS5wcm90b3R5cGUuY29uc3RydWN0b3I9ClhhO1hhLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMDtYYS5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTIqTWF0aC5QSSxjPXRoaXMuYUVuZEFuZ2xlLXRoaXMuYVN0YXJ0QW5nbGUsZD1NYXRoLmFicyhjKTxOdW1iZXIuRVBTSUxPTjswPmM7KWMrPWI7Zm9yKDtjPmI7KWMtPWI7YzxOdW1iZXIuRVBTSUxPTiYmKGM9ZD8wOmIpOyEwIT09dGhpcy5hQ2xvY2t3aXNlfHxkfHwoYz1jPT09Yj8tYjpjLWIpO2I9dGhpcy5hU3RhcnRBbmdsZSthKmM7YT10aGlzLmFYK3RoaXMueFJhZGl1cypNYXRoLmNvcyhiKTt2YXIgZT10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihiKTswIT09dGhpcy5hUm90YXRpb24mJihiPU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxjPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxkPWEtdGhpcy5hWCxlLT10aGlzLmFZLGE9ZCpiLWUqYyt0aGlzLmFYLGU9ZCpjK2UqYit0aGlzLmFZKTtyZXR1cm4gbmV3IEQoYSxlKX07emIucHJvdG90eXBlPQpPYmplY3QuY3JlYXRlKG5hLnByb3RvdHlwZSk7emIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXpiO3piLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO3piLnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnBvaW50cyxjPShiLmxlbmd0aC0xKSphO2E9TWF0aC5mbG9vcihjKTt2YXIgYz1jLWEsZD1iWzA9PT1hP2E6YS0xXSxlPWJbYV0sZj1iW2E+Yi5sZW5ndGgtMj9iLmxlbmd0aC0xOmErMV0sYj1iW2E+Yi5sZW5ndGgtMz9iLmxlbmd0aC0xOmErMl07cmV0dXJuIG5ldyBEKFNlKGMsZC54LGUueCxmLngsYi54KSxTZShjLGQueSxlLnksZi55LGIueSkpfTtoYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuYS5wcm90b3R5cGUpO2hjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1oYztoYy5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy52MCxjPXRoaXMudjEsZD10aGlzLnYyLGU9dGhpcy52MztyZXR1cm4gbmV3IEQoeWIoYSxiLngsYy54LApkLngsZS54KSx5YihhLGIueSxjLnksZC55LGUueSkpfTtpYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuYS5wcm90b3R5cGUpO2ljLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1pYztpYy5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy52MCxjPXRoaXMudjEsZD10aGlzLnYyO3JldHVybiBuZXcgRCh4YihhLGIueCxjLngsZC54KSx4YihhLGIueSxjLnksZC55KSl9O3ZhciB1ZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoWWMucHJvdG90eXBlKSx7ZnJvbVBvaW50czpmdW5jdGlvbihhKXt0aGlzLm1vdmVUbyhhWzBdLngsYVswXS55KTtmb3IodmFyIGI9MSxjPWEubGVuZ3RoO2I8YztiKyspdGhpcy5saW5lVG8oYVtiXS54LGFbYl0ueSl9LG1vdmVUbzpmdW5jdGlvbihhLGIpe3RoaXMuY3VycmVudFBvaW50LnNldChhLGIpfSxsaW5lVG86ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgU2EodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgRChhLGIpKTsKdGhpcy5jdXJ2ZXMucHVzaChjKTt0aGlzLmN1cnJlbnRQb2ludC5zZXQoYSxiKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihhLGIsYyxkKXthPW5ldyBpYyh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBEKGEsYiksbmV3IEQoYyxkKSk7dGhpcy5jdXJ2ZXMucHVzaChhKTt0aGlzLmN1cnJlbnRQb2ludC5zZXQoYyxkKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihhLGIsYyxkLGUsZil7YT1uZXcgaGModGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgRChhLGIpLG5ldyBEKGMsZCksbmV3IEQoZSxmKSk7dGhpcy5jdXJ2ZXMucHVzaChhKTt0aGlzLmN1cnJlbnRQb2ludC5zZXQoZSxmKX0sc3BsaW5lVGhydTpmdW5jdGlvbihhKXt2YXIgYj1bdGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKV0uY29uY2F0KGEpLGI9bmV3IHpiKGIpO3RoaXMuY3VydmVzLnB1c2goYik7dGhpcy5jdXJyZW50UG9pbnQuY29weShhW2EubGVuZ3RoLTFdKX0sYXJjOmZ1bmN0aW9uKGEsYixjLGQsCmUsZil7dGhpcy5hYnNhcmMoYSt0aGlzLmN1cnJlbnRQb2ludC54LGIrdGhpcy5jdXJyZW50UG9pbnQueSxjLGQsZSxmKX0sYWJzYXJjOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmFic2VsbGlwc2UoYSxiLGMsYyxkLGUsZil9LGVsbGlwc2U6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXt0aGlzLmFic2VsbGlwc2UoYSt0aGlzLmN1cnJlbnRQb2ludC54LGIrdGhpcy5jdXJyZW50UG9pbnQueSxjLGQsZSxmLGcsaCl9LGFic2VsbGlwc2U6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXthPW5ldyBYYShhLGIsYyxkLGUsZixnLGgpOzA8dGhpcy5jdXJ2ZXMubGVuZ3RoJiYoYj1hLmdldFBvaW50KDApLGIuZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KXx8dGhpcy5saW5lVG8oYi54LGIueSkpO3RoaXMuY3VydmVzLnB1c2goYSk7YT1hLmdldFBvaW50KDEpO3RoaXMuY3VycmVudFBvaW50LmNvcHkoYSl9fSk7WmMucHJvdG90eXBlPXVlO3VlLmNvbnN0cnVjdG9yPVpjO0FiLnByb3RvdHlwZT0KT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHVlKSx7Y29uc3RydWN0b3I6QWIsZ2V0UG9pbnRzSG9sZXM6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MCxkPXRoaXMuaG9sZXMubGVuZ3RoO2M8ZDtjKyspYltjXT10aGlzLmhvbGVzW2NdLmdldFBvaW50cyhhKTtyZXR1cm4gYn0sZXh0cmFjdEFsbFBvaW50czpmdW5jdGlvbihhKXtyZXR1cm57c2hhcGU6dGhpcy5nZXRQb2ludHMoYSksaG9sZXM6dGhpcy5nZXRQb2ludHNIb2xlcyhhKX19LGV4dHJhY3RQb2ludHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZXh0cmFjdEFsbFBvaW50cyhhKX19KTtPYmplY3QuYXNzaWduKGRlLnByb3RvdHlwZSx7bW92ZVRvOmZ1bmN0aW9uKGEsYil7dGhpcy5jdXJyZW50UGF0aD1uZXcgWmM7dGhpcy5zdWJQYXRocy5wdXNoKHRoaXMuY3VycmVudFBhdGgpO3RoaXMuY3VycmVudFBhdGgubW92ZVRvKGEsYil9LGxpbmVUbzpmdW5jdGlvbihhLGIpe3RoaXMuY3VycmVudFBhdGgubGluZVRvKGEsCmIpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuY3VycmVudFBhdGgucXVhZHJhdGljQ3VydmVUbyhhLGIsYyxkKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5jdXJyZW50UGF0aC5iZXppZXJDdXJ2ZVRvKGEsYixjLGQsZSxmKX0sc3BsaW5lVGhydTpmdW5jdGlvbihhKXt0aGlzLmN1cnJlbnRQYXRoLnNwbGluZVRocnUoYSl9LHRvU2hhcGVzOmZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtmb3IodmFyIGI9W10sYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKyl7dmFyIGU9YVtjXSxmPW5ldyBBYjtmLmN1cnZlcz1lLmN1cnZlcztiLnB1c2goZil9cmV0dXJuIGJ9ZnVuY3Rpb24gZChhLGIpe2Zvcih2YXIgYz1iLmxlbmd0aCxkPSExLGU9Yy0xLGY9MDtmPGM7ZT1mKyspe3ZhciBnPWJbZV0saD1iW2ZdLGs9aC54LWcueCxsPWgueS1nLnk7aWYoTWF0aC5hYnMobCk+TnVtYmVyLkVQU0lMT04pe2lmKDA+bCYmKGc9YltmXSxrPS1rLApoPWJbZV0sbD0tbCksIShhLnk8Zy55fHxhLnk+aC55KSlpZihhLnk9PT1nLnkpe2lmKGEueD09PWcueClyZXR1cm4hMH1lbHNle2U9bCooYS54LWcueCktayooYS55LWcueSk7aWYoMD09PWUpcmV0dXJuITA7MD5lfHwoZD0hZCl9fWVsc2UgaWYoYS55PT09Zy55JiYoaC54PD1hLngmJmEueDw9Zy54fHxnLng8PWEueCYmYS54PD1oLngpKXJldHVybiEwfXJldHVybiBkfXZhciBlPXphLmlzQ2xvY2tXaXNlLGY9dGhpcy5zdWJQYXRocztpZigwPT09Zi5sZW5ndGgpcmV0dXJuW107aWYoITA9PT1iKXJldHVybiBjKGYpO3ZhciBnLGgsayxsPVtdO2lmKDE9PT1mLmxlbmd0aClyZXR1cm4gaD1mWzBdLGs9bmV3IEFiLGsuY3VydmVzPWguY3VydmVzLGwucHVzaChrKSxsO3ZhciBwPSFlKGZbMF0uZ2V0UG9pbnRzKCkpLHA9YT8hcDpwO2s9W107dmFyIHE9W10sbj1bXSxyPTAsejtxW3JdPXZvaWQgMDtuW3JdPVtdO2Zvcih2YXIgdD0wLHk9Zi5sZW5ndGg7dDx5O3QrKyloPWZbdF0sej1oLmdldFBvaW50cygpLApnPWUoeiksKGc9YT8hZzpnKT8oIXAmJnFbcl0mJnIrKyxxW3JdPXtzOm5ldyBBYixwOnp9LHFbcl0ucy5jdXJ2ZXM9aC5jdXJ2ZXMscCYmcisrLG5bcl09W10pOm5bcl0ucHVzaCh7aDpoLHA6elswXX0pO2lmKCFxWzBdKXJldHVybiBjKGYpO2lmKDE8cS5sZW5ndGgpe3Q9ITE7aD1bXTtlPTA7Zm9yKGY9cS5sZW5ndGg7ZTxmO2UrKylrW2VdPVtdO2U9MDtmb3IoZj1xLmxlbmd0aDtlPGY7ZSsrKWZvcihnPW5bZV0scD0wO3A8Zy5sZW5ndGg7cCsrKXtyPWdbcF07ej0hMDtmb3IoeT0wO3k8cS5sZW5ndGg7eSsrKWQoci5wLHFbeV0ucCkmJihlIT09eSYmaC5wdXNoKHtmcm9tczplLHRvczp5LGhvbGU6cH0pLHo/KHo9ITEsa1t5XS5wdXNoKHIpKTp0PSEwKTt6JiZrW2VdLnB1c2gocil9MDxoLmxlbmd0aCYmKHR8fChuPWspKX10PTA7Zm9yKGU9cS5sZW5ndGg7dDxlO3QrKylmb3Ioaz1xW3RdLnMsbC5wdXNoKGspLGg9blt0XSxmPTAsZz1oLmxlbmd0aDtmPGc7ZisrKWsuaG9sZXMucHVzaChoW2ZdLmgpOwpyZXR1cm4gbH19KTtPYmplY3QuYXNzaWduKGVlLnByb3RvdHlwZSx7aXNGb250OiEwLGdlbmVyYXRlU2hhcGVzOmZ1bmN0aW9uKGEsYixjKXt2b2lkIDA9PT1iJiYoYj0xMDApO3ZvaWQgMD09PWMmJihjPTQpO3ZhciBkPXRoaXMuZGF0YTthPVN0cmluZyhhKS5zcGxpdCgiIik7dmFyIGU9Yi9kLnJlc29sdXRpb24sZj0oZC5ib3VuZGluZ0JveC55TWF4LWQuYm91bmRpbmdCb3gueU1pbitkLnVuZGVybGluZVRoaWNrbmVzcykqZSxnPTAsaD0wO2I9W107Zm9yKHZhciBrPTA7azxhLmxlbmd0aDtrKyspe3ZhciBsPWFba107aWYoIlxuIj09PWwpZz0wLGgtPWY7ZWxzZXt2YXIgcDtwPWU7dmFyIHE9ZyxuPWg7aWYobD1kLmdseXBoc1tsXXx8ZC5nbHlwaHNbIj8iXSl7dmFyIHI9bmV3IGRlLHo9W10sdCx5LHgsdixCLHcsQyxEO2lmKGwubylmb3IodmFyIEU9bC5fY2FjaGVkT3V0bGluZXx8KGwuX2NhY2hlZE91dGxpbmU9bC5vLnNwbGl0KCIgIikpLEY9MCxJPUUubGVuZ3RoO0Y8STspc3dpdGNoKEVbRisrXSl7Y2FzZSAibSI6dD0KRVtGKytdKnArcTt5PUVbRisrXSpwK247ci5tb3ZlVG8odCx5KTticmVhaztjYXNlICJsIjp0PUVbRisrXSpwK3E7eT1FW0YrK10qcCtuO3IubGluZVRvKHQseSk7YnJlYWs7Y2FzZSAicSI6dD1FW0YrK10qcCtxO3k9RVtGKytdKnArbjtCPUVbRisrXSpwK3E7dz1FW0YrK10qcCtuO3IucXVhZHJhdGljQ3VydmVUbyhCLHcsdCx5KTtpZih2PXpbei5sZW5ndGgtMV0pe3g9di54O3Y9di55O2Zvcih2YXIgSD0xO0g8PWM7SCsrKXt2YXIgSj1IL2M7eGIoSix4LEIsdCk7eGIoSix2LHcseSl9fWJyZWFrO2Nhc2UgImIiOmlmKHQ9RVtGKytdKnArcSx5PUVbRisrXSpwK24sQj1FW0YrK10qcCtxLHc9RVtGKytdKnArbixDPUVbRisrXSpwK3EsRD1FW0YrK10qcCtuLHIuYmV6aWVyQ3VydmVUbyhCLHcsQyxELHQseSksdj16W3oubGVuZ3RoLTFdKWZvcih4PXYueCx2PXYueSxIPTE7SDw9YztIKyspSj1IL2MseWIoSix4LEIsQyx0KSx5YihKLHYsdyxELHkpfXA9e29mZnNldFg6bC5oYSpwLHBhdGg6cn19ZWxzZSBwPQp2b2lkIDA7Zys9cC5vZmZzZXRYO2IucHVzaChwLnBhdGgpfX1jPVtdO2Q9MDtmb3IoYT1iLmxlbmd0aDtkPGE7ZCsrKUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGMsYltkXS50b1NoYXBlcygpKTtyZXR1cm4gY319KTtPYmplY3QuYXNzaWduKFRlLnByb3RvdHlwZSx7bG9hZDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzOyhuZXcgdWEodGhpcy5tYW5hZ2VyKSkubG9hZChhLGZ1bmN0aW9uKGEpe3ZhciBjO3RyeXtjPUpTT04ucGFyc2UoYSl9Y2F0Y2goZCl7Y29uc29sZS53YXJuKCJUSFJFRS5Gb250TG9hZGVyOiB0eXBlZmFjZS5qcyBzdXBwb3J0IGlzIGJlaW5nIGRlcHJlY2F0ZWQuIFVzZSB0eXBlZmFjZS5qc29uIGluc3RlYWQuIiksYz1KU09OLnBhcnNlKGEuc3Vic3RyaW5nKDY1LGEubGVuZ3RoLTIpKX1hPWUucGFyc2UoYyk7YiYmYihhKX0sYyxkKX0scGFyc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBlZShhKX19KTt2YXIgT2QsaWU9e2dldENvbnRleHQ6ZnVuY3Rpb24oKXt2b2lkIDA9PT0KT2QmJihPZD1uZXcgKHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKTtyZXR1cm4gT2R9LHNldENvbnRleHQ6ZnVuY3Rpb24oYSl7T2Q9YX19O09iamVjdC5hc3NpZ24oZmUucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW5ldyB1YSh0aGlzLm1hbmFnZXIpO2Uuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpO2UubG9hZChhLGZ1bmN0aW9uKGEpe2llLmdldENvbnRleHQoKS5kZWNvZGVBdWRpb0RhdGEoYSxmdW5jdGlvbihhKXtiKGEpfSl9LGMsZCl9fSk7T2JqZWN0LmFzc2lnbihVZS5wcm90b3R5cGUse3VwZGF0ZTpmdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZixnLGgsaz1uZXcgSixsPW5ldyBKO3JldHVybiBmdW5jdGlvbihwKXtpZihhIT09dGhpc3x8YiE9PXAuZm9jdXN8fGMhPT1wLmZvdnx8ZCE9PXAuYXNwZWN0KnRoaXMuYXNwZWN0fHxlIT09cC5uZWFyfHxmIT09cC5mYXJ8fGchPT1wLnpvb218fGghPT10aGlzLmV5ZVNlcCl7YT0KdGhpcztiPXAuZm9jdXM7Yz1wLmZvdjtkPXAuYXNwZWN0KnRoaXMuYXNwZWN0O2U9cC5uZWFyO2Y9cC5mYXI7Zz1wLnpvb207dmFyIHE9cC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7aD10aGlzLmV5ZVNlcC8yO3ZhciBuPWgqZS9iLHI9ZSpNYXRoLnRhbihZLkRFRzJSQUQqYyouNSkvZyx6LHQ7bC5lbGVtZW50c1sxMl09LWg7ay5lbGVtZW50c1sxMl09aDt6PS1yKmQrbjt0PXIqZCtuO3EuZWxlbWVudHNbMF09MiplLyh0LXopO3EuZWxlbWVudHNbOF09KHQreikvKHQteik7dGhpcy5jYW1lcmFMLnByb2plY3Rpb25NYXRyaXguY29weShxKTt6PS1yKmQtbjt0PXIqZC1uO3EuZWxlbWVudHNbMF09MiplLyh0LXopO3EuZWxlbWVudHNbOF09KHQreikvKHQteik7dGhpcy5jYW1lcmFSLnByb2plY3Rpb25NYXRyaXguY29weShxKX10aGlzLmNhbWVyYUwubWF0cml4V29ybGQuY29weShwLm1hdHJpeFdvcmxkKS5tdWx0aXBseShsKTt0aGlzLmNhbWVyYVIubWF0cml4V29ybGQuY29weShwLm1hdHJpeFdvcmxkKS5tdWx0aXBseShrKX19KCl9KTsKSWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpO0lkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1JZDtnZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmdlLGlzQXJyYXlDYW1lcmE6ITB9KTtoZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6aGUsZ2V0SW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYWlufSxyZW1vdmVGaWx0ZXI6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5maWx0ZXImJih0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmZpbHRlciksdGhpcy5maWx0ZXIuZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5maWx0ZXI9bnVsbCl9LGdldEZpbHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbHRlcn0sc2V0RmlsdGVyOmZ1bmN0aW9uKGEpe251bGwhPT0KdGhpcy5maWx0ZXI/KHRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbikpOnRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbik7dGhpcy5maWx0ZXI9YTt0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmZpbHRlcik7dGhpcy5maWx0ZXIuY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pfSxnZXRNYXN0ZXJWb2x1bWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9LHNldE1hc3RlclZvbHVtZTpmdW5jdGlvbihhKXt0aGlzLmdhaW4uZ2Fpbi52YWx1ZT1hfSx1cGRhdGVNYXRyaXhXb3JsZDpmdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHFhLGM9bmV3IHAsZD1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oZSl7Qi5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCh0aGlzLGUpO2U9dGhpcy5jb250ZXh0Lmxpc3RlbmVyO3ZhciBmPQp0aGlzLnVwO3RoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGEsYixjKTtkLnNldCgwLDAsLTEpLmFwcGx5UXVhdGVybmlvbihiKTtlLnBvc2l0aW9uWD8oZS5wb3NpdGlvblguc2V0VmFsdWVBdFRpbWUoYS54LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS5wb3NpdGlvblkuc2V0VmFsdWVBdFRpbWUoYS55LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS5wb3NpdGlvblouc2V0VmFsdWVBdFRpbWUoYS56LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS5mb3J3YXJkWC5zZXRWYWx1ZUF0VGltZShkLngsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lKSxlLmZvcndhcmRZLnNldFZhbHVlQXRUaW1lKGQueSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpLGUuZm9yd2FyZFouc2V0VmFsdWVBdFRpbWUoZC56LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS51cFguc2V0VmFsdWVBdFRpbWUoZi54LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSksZS51cFkuc2V0VmFsdWVBdFRpbWUoZi55LAp0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpLGUudXBaLnNldFZhbHVlQXRUaW1lKGYueix0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpKTooZS5zZXRQb3NpdGlvbihhLngsYS55LGEueiksZS5zZXRPcmllbnRhdGlvbihkLngsZC55LGQueixmLngsZi55LGYueikpfX0oKX0pO2pjLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpqYyxnZXRPdXRwdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYWlufSxzZXROb2RlU291cmNlOmZ1bmN0aW9uKGEpe3RoaXMuaGFzUGxheWJhY2tDb250cm9sPSExO3RoaXMuc291cmNlVHlwZT0iYXVkaW9Ob2RlIjt0aGlzLnNvdXJjZT1hO3RoaXMuY29ubmVjdCgpO3JldHVybiB0aGlzfSxzZXRCdWZmZXI6ZnVuY3Rpb24oYSl7dGhpcy5idWZmZXI9YTt0aGlzLnNvdXJjZVR5cGU9ImJ1ZmZlciI7dGhpcy5hdXRvcGxheSYmdGhpcy5wbGF5KCk7cmV0dXJuIHRoaXN9LHBsYXk6ZnVuY3Rpb24oKXtpZighMD09PQp0aGlzLmlzUGxheWluZyljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiBBdWRpbyBpcyBhbHJlYWR5IHBsYXlpbmcuIik7ZWxzZSBpZighMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKWNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7ZWxzZXt2YXIgYT10aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7YS5idWZmZXI9dGhpcy5idWZmZXI7YS5sb29wPXRoaXMubG9vcDthLm9uZW5kZWQ9dGhpcy5vbkVuZGVkLmJpbmQodGhpcyk7YS5wbGF5YmFja1JhdGUuc2V0VmFsdWVBdFRpbWUodGhpcy5wbGF5YmFja1JhdGUsdGhpcy5zdGFydFRpbWUpO2Euc3RhcnQoMCx0aGlzLnN0YXJ0VGltZSk7dGhpcy5pc1BsYXlpbmc9ITA7dGhpcy5zb3VyY2U9YTtyZXR1cm4gdGhpcy5jb25uZWN0KCl9fSxwYXVzZTpmdW5jdGlvbigpe2lmKCExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTsKZWxzZSByZXR1cm4gdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc3RhcnRUaW1lPXRoaXMuY29udGV4dC5jdXJyZW50VGltZSx0aGlzLmlzUGxheWluZz0hMSx0aGlzfSxzdG9wOmZ1bmN0aW9uKCl7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO2Vsc2UgcmV0dXJuIHRoaXMuc291cmNlLnN0b3AoKSx0aGlzLnN0YXJ0VGltZT0wLHRoaXMuaXNQbGF5aW5nPSExLHRoaXN9LGNvbm5lY3Q6ZnVuY3Rpb24oKXtpZigwPHRoaXMuZmlsdGVycy5sZW5ndGgpe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IodmFyIGE9MSxiPXRoaXMuZmlsdGVycy5sZW5ndGg7YTxiO2ErKyl0aGlzLmZpbHRlcnNbYS0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1thXSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7CnJldHVybiB0aGlzfSxkaXNjb25uZWN0OmZ1bmN0aW9uKCl7aWYoMDx0aGlzLmZpbHRlcnMubGVuZ3RoKXt0aGlzLnNvdXJjZS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1swXSk7Zm9yKHZhciBhPTEsYj10aGlzLmZpbHRlcnMubGVuZ3RoO2E8YjthKyspdGhpcy5maWx0ZXJzW2EtMV0uZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbYV0pO3RoaXMuZmlsdGVyc1t0aGlzLmZpbHRlcnMubGVuZ3RoLTFdLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSl9ZWxzZSB0aGlzLnNvdXJjZS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpO3JldHVybiB0aGlzfSxnZXRGaWx0ZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsdGVyc30sc2V0RmlsdGVyczpmdW5jdGlvbihhKXthfHwoYT1bXSk7ITA9PT10aGlzLmlzUGxheWluZz8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPWEsdGhpcy5jb25uZWN0KCkpOnRoaXMuZmlsdGVycz1hO3JldHVybiB0aGlzfSxnZXRGaWx0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJzKClbMF19LApzZXRGaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyhhP1thXTpbXSl9LHNldFBsYXliYWNrUmF0ZTpmdW5jdGlvbihhKXtpZighMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKWNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7ZWxzZSByZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9YSwhMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VmFsdWVBdFRpbWUodGhpcy5wbGF5YmFja1JhdGUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lKSx0aGlzfSxnZXRQbGF5YmFja1JhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9LG9uRW5kZWQ6ZnVuY3Rpb24oKXt0aGlzLmlzUGxheWluZz0hMX0sZ2V0TG9vcDpmdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2w/KGNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIiksCiExKTp0aGlzLmxvb3B9LHNldExvb3A6ZnVuY3Rpb24oYSl7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO2Vsc2UgcmV0dXJuIHRoaXMubG9vcD1hLCEwPT09dGhpcy5pc1BsYXlpbmcmJih0aGlzLnNvdXJjZS5sb29wPXRoaXMubG9vcCksdGhpc30sZ2V0Vm9sdW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnZhbHVlfSxzZXRWb2x1bWU6ZnVuY3Rpb24oYSl7dGhpcy5nYWluLmdhaW4udmFsdWU9YTtyZXR1cm4gdGhpc319KTtqZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGpjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmplLGdldE91dHB1dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbm5lcn0sZ2V0UmVmRGlzdGFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYW5uZXIucmVmRGlzdGFuY2V9LHNldFJlZkRpc3RhbmNlOmZ1bmN0aW9uKGEpe3RoaXMucGFubmVyLnJlZkRpc3RhbmNlPQphfSxnZXRSb2xsb2ZmRmFjdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFubmVyLnJvbGxvZmZGYWN0b3J9LHNldFJvbGxvZmZGYWN0b3I6ZnVuY3Rpb24oYSl7dGhpcy5wYW5uZXIucm9sbG9mZkZhY3Rvcj1hfSxnZXREaXN0YW5jZU1vZGVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFubmVyLmRpc3RhbmNlTW9kZWx9LHNldERpc3RhbmNlTW9kZWw6ZnVuY3Rpb24oYSl7dGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbD1hfSxnZXRNYXhEaXN0YW5jZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbm5lci5tYXhEaXN0YW5jZX0sc2V0TWF4RGlzdGFuY2U6ZnVuY3Rpb24oYSl7dGhpcy5wYW5uZXIubWF4RGlzdGFuY2U9YX0sdXBkYXRlTWF0cml4V29ybGQ6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oYil7Qi5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCh0aGlzLGIpO2Euc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpO3RoaXMucGFubmVyLnNldFBvc2l0aW9uKGEueCwKYS55LGEueil9fSgpfSk7T2JqZWN0LmFzc2lnbihrZS5wcm90b3R5cGUse2dldEZyZXF1ZW5jeURhdGE6ZnVuY3Rpb24oKXt0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSk7cmV0dXJuIHRoaXMuZGF0YX0sZ2V0QXZlcmFnZUZyZXF1ZW5jeTpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCksYz0wO2M8Yi5sZW5ndGg7YysrKWErPWJbY107cmV0dXJuIGEvYi5sZW5ndGh9fSk7T2JqZWN0LmFzc2lnbihsZS5wcm90b3R5cGUse2FjY3VtdWxhdGU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmJ1ZmZlcixkPXRoaXMudmFsdWVTaXplLGU9YSpkK2QsZj10aGlzLmN1bXVsYXRpdmVXZWlnaHQ7aWYoMD09PWYpe2ZvcihmPTA7ZiE9PWQ7KytmKWNbZStmXT1jW2ZdO2Y9Yn1lbHNlIGYrPWIsdGhpcy5fbWl4QnVmZmVyUmVnaW9uKGMsZSwwLGIvZixkKTt0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9Zn0sYXBwbHk6ZnVuY3Rpb24oYSl7dmFyIGI9CnRoaXMudmFsdWVTaXplLGM9dGhpcy5idWZmZXI7YT1hKmIrYjt2YXIgZD10aGlzLmN1bXVsYXRpdmVXZWlnaHQsZT10aGlzLmJpbmRpbmc7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PTA7MT5kJiZ0aGlzLl9taXhCdWZmZXJSZWdpb24oYyxhLDMqYiwxLWQsYik7Zm9yKHZhciBkPWIsZj1iK2I7ZCE9PWY7KytkKWlmKGNbZF0hPT1jW2QrYl0pe2Uuc2V0VmFsdWUoYyxhKTticmVha319LHNhdmVPcmlnaW5hbFN0YXRlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5idWZmZXIsYj10aGlzLnZhbHVlU2l6ZSxjPTMqYjt0aGlzLmJpbmRpbmcuZ2V0VmFsdWUoYSxjKTtmb3IodmFyIGQ9YjtkIT09YzsrK2QpYVtkXT1hW2MrZCViXTt0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MH0scmVzdG9yZU9yaWdpbmFsU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLmJpbmRpbmcuc2V0VmFsdWUodGhpcy5idWZmZXIsMyp0aGlzLnZhbHVlU2l6ZSl9LF9zZWxlY3Q6ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZiguNTw9ZClmb3IoZD0KMDtkIT09ZTsrK2QpYVtiK2RdPWFbYytkXX0sX3NsZXJwOmZ1bmN0aW9uKGEsYixjLGQpe3FhLnNsZXJwRmxhdChhLGIsYSxiLGEsYyxkKX0sX2xlcnA6ZnVuY3Rpb24oYSxiLGMsZCxlKXtmb3IodmFyIGY9MS1kLGc9MDtnIT09ZTsrK2cpe3ZhciBoPWIrZzthW2hdPWFbaF0qZithW2MrZ10qZH19fSk7T2JqZWN0LmFzc2lnbihWZS5wcm90b3R5cGUse2dldFZhbHVlOmZ1bmN0aW9uKGEsYil7dGhpcy5iaW5kKCk7dmFyIGM9dGhpcy5fYmluZGluZ3NbdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfXTt2b2lkIDAhPT1jJiZjLmdldFZhbHVlKGEsYil9LHNldFZhbHVlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMuX2JpbmRpbmdzLGQ9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGU9Yy5sZW5ndGg7ZCE9PWU7KytkKWNbZF0uc2V0VmFsdWUoYSxiKX0sYmluZDpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLl9iaW5kaW5ncyxiPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXywKYz1hLmxlbmd0aDtiIT09YzsrK2IpYVtiXS5iaW5kKCl9LHVuYmluZDpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLl9iaW5kaW5ncyxiPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxjPWEubGVuZ3RoO2IhPT1jOysrYilhW2JdLnVuYmluZCgpfX0pO09iamVjdC5hc3NpZ24ob2Ese0NvbXBvc2l0ZTpWZSxjcmVhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhJiZhLmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IG9hLkNvbXBvc2l0ZShhLGIsYyk6bmV3IG9hKGEsYixjKX0scGFyc2VUcmFja05hbWU6ZnVuY3Rpb24oKXt2YXIgYT1uZXcgUmVnRXhwKCJeIisvKCg/Oltcdy1dK1tcLzpdKSopLy5zb3VyY2UrLyhbXHctXC5dKyk/Ly5zb3VyY2UrLyg/OlwuKFtcdy1dKykoPzpcWyguKylcXSk/KT8vLnNvdXJjZSsvXC4oW1x3LV0rKSg/OlxbKC4rKVxdKT8vLnNvdXJjZSsiJCIpLGI9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl07cmV0dXJuIGZ1bmN0aW9uKGMpe3ZhciBkPQphLmV4ZWMoYyk7aWYoIWQpdGhyb3cgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIitjKTt2YXIgZD17bm9kZU5hbWU6ZFsyXSxvYmplY3ROYW1lOmRbM10sb2JqZWN0SW5kZXg6ZFs0XSxwcm9wZXJ0eU5hbWU6ZFs1XSxwcm9wZXJ0eUluZGV4OmRbNl19LGU9ZC5ub2RlTmFtZSYmZC5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHZvaWQgMCE9PWUmJi0xIT09ZSl7dmFyIGY9ZC5ub2RlTmFtZS5zdWJzdHJpbmcoZSsxKTstMSE9PWIuaW5kZXhPZihmKSYmKGQubm9kZU5hbWU9ZC5ub2RlTmFtZS5zdWJzdHJpbmcoMCxlKSxkLm9iamVjdE5hbWU9Zil9aWYobnVsbD09PWQucHJvcGVydHlOYW1lfHwwPT09ZC5wcm9wZXJ0eU5hbWUubGVuZ3RoKXRocm93IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK2MpO3JldHVybiBkfX0oKSxmaW5kTm9kZTpmdW5jdGlvbihhLGIpe2lmKCFifHwKIiI9PT1ifHwicm9vdCI9PT1ifHwiLiI9PT1ifHwtMT09PWJ8fGI9PT1hLm5hbWV8fGI9PT1hLnV1aWQpcmV0dXJuIGE7aWYoYS5za2VsZXRvbil7dmFyIGM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPTA7YzxhLmJvbmVzLmxlbmd0aDtjKyspe3ZhciBkPWEuYm9uZXNbY107aWYoZC5uYW1lPT09YilyZXR1cm4gZH1yZXR1cm4gbnVsbH0oYS5za2VsZXRvbik7aWYoYylyZXR1cm4gY31pZihhLmNoaWxkcmVuKXt2YXIgZD1mdW5jdGlvbihhKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGc9YVtjXTtpZihnLm5hbWU9PT1ifHxnLnV1aWQ9PT1ifHwoZz1kKGcuY2hpbGRyZW4pKSlyZXR1cm4gZ31yZXR1cm4gbnVsbH07aWYoYz1kKGEuY2hpbGRyZW4pKXJldHVybiBjfXJldHVybiBudWxsfX0pO09iamVjdC5hc3NpZ24ob2EucHJvdG90eXBlLHtfZ2V0VmFsdWVfdW5hdmFpbGFibGU6ZnVuY3Rpb24oKXt9LF9zZXRWYWx1ZV91bmF2YWlsYWJsZTpmdW5jdGlvbigpe30sQmluZGluZ1R5cGU6e0RpcmVjdDowLApFbnRpcmVBcnJheToxLEFycmF5RWxlbWVudDoyLEhhc0Zyb21Ub0FycmF5OjN9LFZlcnNpb25pbmc6e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn0sR2V0dGVyQnlCaW5kaW5nVHlwZTpbZnVuY3Rpb24oYSxiKXthW2JdPXRoaXMubm9kZVt0aGlzLnByb3BlcnR5TmFtZV19LGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxkPTAsZT1jLmxlbmd0aDtkIT09ZTsrK2QpYVtiKytdPWNbZF19LGZ1bmN0aW9uKGEsYil7YVtiXT10aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XX0sZnVuY3Rpb24oYSxiKXt0aGlzLnJlc29sdmVkUHJvcGVydHkudG9BcnJheShhLGIpfV0sU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc6W1tmdW5jdGlvbihhLGIpe3RoaXMubm9kZVt0aGlzLnByb3BlcnR5TmFtZV09YVtiXX0sZnVuY3Rpb24oYSxiKXt0aGlzLm5vZGVbdGhpcy5wcm9wZXJ0eU5hbWVdPWFbYl07CnRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfSxmdW5jdGlvbihhLGIpe3RoaXMubm9kZVt0aGlzLnByb3BlcnR5TmFtZV09YVtiXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV0sW2Z1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxkPTAsZT1jLmxlbmd0aDtkIT09ZTsrK2QpY1tkXT1hW2IrK119LGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxkPTAsZT1jLmxlbmd0aDtkIT09ZTsrK2QpY1tkXT1hW2IrK107dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9LGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxkPTAsZT1jLmxlbmd0aDtkIT09ZTsrK2QpY1tkXT1hW2IrK107dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1dLFtmdW5jdGlvbihhLGIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPQphW2JdfSxmdW5jdGlvbihhLGIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWFbYl07dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9LGZ1bmN0aW9uKGEsYil7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09YVtiXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV0sW2Z1bmN0aW9uKGEsYil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShhLGIpfSxmdW5jdGlvbihhLGIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkoYSxiKTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH0sZnVuY3Rpb24oYSxiKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGEsYik7dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1dXSxnZXRWYWx1ZTpmdW5jdGlvbihhLGIpe3RoaXMuYmluZCgpO3RoaXMuZ2V0VmFsdWUoYSxiKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYSwKYil7dGhpcy5iaW5kKCk7dGhpcy5zZXRWYWx1ZShhLGIpfSxiaW5kOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ub2RlLGI9dGhpcy5wYXJzZWRQYXRoLGM9Yi5vYmplY3ROYW1lLGQ9Yi5wcm9wZXJ0eU5hbWUsZT1iLnByb3BlcnR5SW5kZXg7YXx8KHRoaXMubm9kZT1hPW9hLmZpbmROb2RlKHRoaXMucm9vdE5vZGUsYi5ub2RlTmFtZSl8fHRoaXMucm9vdE5vZGUpO3RoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5hdmFpbGFibGU7dGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZTtpZihhKXtpZihjKXt2YXIgZj1iLm9iamVjdEluZGV4O3N3aXRjaChjKXtjYXNlICJtYXRlcmlhbHMiOmlmKCFhLm1hdGVyaWFsKXtjb25zb2xlLmVycm9yKCIgIGNhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbCIsdGhpcyk7cmV0dXJufWlmKCFhLm1hdGVyaWFsLm1hdGVyaWFscyl7Y29uc29sZS5lcnJvcigiICBjYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwubWF0ZXJpYWxzIGFzIG5vZGUubWF0ZXJpYWwgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFscyBhcnJheSIsCnRoaXMpO3JldHVybn1hPWEubWF0ZXJpYWwubWF0ZXJpYWxzO2JyZWFrO2Nhc2UgImJvbmVzIjppZighYS5za2VsZXRvbil7Y29uc29sZS5lcnJvcigiICBjYW4gbm90IGJpbmQgdG8gYm9uZXMgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgc2tlbGV0b24iLHRoaXMpO3JldHVybn1hPWEuc2tlbGV0b24uYm9uZXM7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKylpZihhW2NdLm5hbWU9PT1mKXtmPWM7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih2b2lkIDA9PT1hW2NdKXtjb25zb2xlLmVycm9yKCIgIGNhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUsIHVuZGVmaW5lZCIsdGhpcyk7cmV0dXJufWE9YVtjXX1pZih2b2lkIDAhPT1mKXtpZih2b2lkIDA9PT1hW2ZdKXtjb25zb2xlLmVycm9yKCIgIHRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQ6Iix0aGlzLGEpO3JldHVybn1hPWFbZl19fWY9YVtkXTtpZih2b2lkIDA9PT1mKWNvbnNvbGUuZXJyb3IoIiAgdHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICIrCmIubm9kZU5hbWUrIi4iK2QrIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIsYSk7ZWxzZXtiPXRoaXMuVmVyc2lvbmluZy5Ob25lO3ZvaWQgMCE9PWEubmVlZHNVcGRhdGU/KGI9dGhpcy5WZXJzaW9uaW5nLk5lZWRzVXBkYXRlLHRoaXMudGFyZ2V0T2JqZWN0PWEpOnZvaWQgMCE9PWEubWF0cml4V29ybGROZWVkc1VwZGF0ZSYmKGI9dGhpcy5WZXJzaW9uaW5nLk1hdHJpeFdvcmxkTmVlZHNVcGRhdGUsdGhpcy50YXJnZXRPYmplY3Q9YSk7Yz10aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtpZih2b2lkIDAhPT1lKXtpZigibW9ycGhUYXJnZXRJbmZsdWVuY2VzIj09PWQpe2lmKCFhLmdlb21ldHJ5KXtjb25zb2xlLmVycm9yKCIgIGNhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXN1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkiLHRoaXMpO3JldHVybn1pZighYS5nZW9tZXRyeS5tb3JwaFRhcmdldHMpe2NvbnNvbGUuZXJyb3IoIiAgY2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhc3VzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaFRhcmdldHMiLAp0aGlzKTtyZXR1cm59Zm9yKGM9MDtjPHRoaXMubm9kZS5nZW9tZXRyeS5tb3JwaFRhcmdldHMubGVuZ3RoO2MrKylpZihhLmdlb21ldHJ5Lm1vcnBoVGFyZ2V0c1tjXS5uYW1lPT09ZSl7ZT1jO2JyZWFrfX1jPXRoaXMuQmluZGluZ1R5cGUuQXJyYXlFbGVtZW50O3RoaXMucmVzb2x2ZWRQcm9wZXJ0eT1mO3RoaXMucHJvcGVydHlJbmRleD1lfWVsc2Ugdm9pZCAwIT09Zi5mcm9tQXJyYXkmJnZvaWQgMCE9PWYudG9BcnJheT8oYz10aGlzLkJpbmRpbmdUeXBlLkhhc0Zyb21Ub0FycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1mKTpBcnJheS5pc0FycmF5KGYpPyhjPXRoaXMuQmluZGluZ1R5cGUuRW50aXJlQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PWYpOnRoaXMucHJvcGVydHlOYW1lPWQ7dGhpcy5nZXRWYWx1ZT10aGlzLkdldHRlckJ5QmluZGluZ1R5cGVbY107dGhpcy5zZXRWYWx1ZT10aGlzLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nW2NdW2JdfX1lbHNlIGNvbnNvbGUuZXJyb3IoIiAgdHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogIisKdGhpcy5wYXRoKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iKX0sdW5iaW5kOmZ1bmN0aW9uKCl7dGhpcy5ub2RlPW51bGw7dGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kO3RoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19KTtPYmplY3QuYXNzaWduKG9hLnByb3RvdHlwZSx7X2dldFZhbHVlX3VuYm91bmQ6b2EucHJvdG90eXBlLmdldFZhbHVlLF9zZXRWYWx1ZV91bmJvdW5kOm9hLnByb3RvdHlwZS5zZXRWYWx1ZX0pO09iamVjdC5hc3NpZ24oV2UucHJvdG90eXBlLHtpc0FuaW1hdGlvbk9iamVjdEdyb3VwOiEwLGFkZDpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5fb2JqZWN0cyxjPWIubGVuZ3RoLGQ9dGhpcy5uQ2FjaGVkT2JqZWN0c18sZT10aGlzLl9pbmRpY2VzQnlVVUlELGY9dGhpcy5fcGF0aHMsZz10aGlzLl9wYXJzZWRQYXRocyxoPXRoaXMuX2JpbmRpbmdzLGs9aC5sZW5ndGgsbD0wLHA9YXJndW1lbnRzLmxlbmd0aDtsIT09cDsrK2wpe3ZhciBxPQphcmd1bWVudHNbbF0sbj1xLnV1aWQscj1lW25dO2lmKHZvaWQgMD09PXIpe3I9YysrO2Vbbl09cjtiLnB1c2gocSk7Zm9yKHZhciBuPTAsej1rO24hPT16OysrbiloW25dLnB1c2gobmV3IG9hKHEsZltuXSxnW25dKSl9ZWxzZSBpZihyPGQpe3ZhciB0PS0tZCx6PWJbdF07ZVt6LnV1aWRdPXI7YltyXT16O2Vbbl09dDtiW3RdPXE7bj0wO2Zvcih6PWs7biE9PXo7KytuKXt2YXIgeT1oW25dLHg9eVtyXTt5W3JdPXlbdF07dm9pZCAwPT09eCYmKHg9bmV3IG9hKHEsZltuXSxnW25dKSk7eVt0XT14fX1lbHNlIHZvaWQgMCE9PWJbcl0mJmNvbnNvbGUuZXJyb3IoIkRpZmZlcmVudCBvYmplY3RzIHdpdGggdGhlIHNhbWUgVVVJRCBkZXRlY3RlZC4gQ2xlYW4gdGhlIGNhY2hlcyBvciByZWNyZWF0ZSB5b3VyIGluZnJhc3RydWN0dXJlIHdoZW4gcmVsb2FkaW5nIHNjZW5lcy4uLiIpfXRoaXMubkNhY2hlZE9iamVjdHNfPWR9LHJlbW92ZTpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5fb2JqZWN0cywKYz10aGlzLm5DYWNoZWRPYmplY3RzXyxkPXRoaXMuX2luZGljZXNCeVVVSUQsZT10aGlzLl9iaW5kaW5ncyxmPWUubGVuZ3RoLGc9MCxoPWFyZ3VtZW50cy5sZW5ndGg7ZyE9PWg7KytnKXt2YXIgaz1hcmd1bWVudHNbZ10sbD1rLnV1aWQscD1kW2xdO2lmKHZvaWQgMCE9PXAmJnA+PWMpe3ZhciBxPWMrKyxuPWJbcV07ZFtuLnV1aWRdPXA7YltwXT1uO2RbbF09cTtiW3FdPWs7az0wO2ZvcihsPWY7ayE9PWw7KytrKXt2YXIgbj1lW2tdLHI9bltwXTtuW3BdPW5bcV07bltxXT1yfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189Y30sdW5jYWNoZTpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5fb2JqZWN0cyxjPWIubGVuZ3RoLGQ9dGhpcy5uQ2FjaGVkT2JqZWN0c18sZT10aGlzLl9pbmRpY2VzQnlVVUlELGY9dGhpcy5fYmluZGluZ3MsZz1mLmxlbmd0aCxoPTAsaz1hcmd1bWVudHMubGVuZ3RoO2ghPT1rOysraCl7dmFyIGw9YXJndW1lbnRzW2hdLnV1aWQscD1lW2xdO2lmKHZvaWQgMCE9PQpwKWlmKGRlbGV0ZSBlW2xdLHA8ZCl7dmFyIGw9LS1kLHE9YltsXSxuPS0tYyxyPWJbbl07ZVtxLnV1aWRdPXA7YltwXT1xO2Vbci51dWlkXT1sO2JbbF09cjtiLnBvcCgpO3E9MDtmb3Iocj1nO3EhPT1yOysrcSl7dmFyIHo9ZltxXSx0PXpbbl07eltwXT16W2xdO3pbbF09dDt6LnBvcCgpfX1lbHNlIGZvcihuPS0tYyxyPWJbbl0sZVtyLnV1aWRdPXAsYltwXT1yLGIucG9wKCkscT0wLHI9ZztxIT09cjsrK3Epej1mW3FdLHpbcF09eltuXSx6LnBvcCgpfXRoaXMubkNhY2hlZE9iamVjdHNfPWR9LHN1YnNjcmliZV86ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGgsZD1jW2FdLGU9dGhpcy5fYmluZGluZ3M7aWYodm9pZCAwIT09ZClyZXR1cm4gZVtkXTt2YXIgZj10aGlzLl9wYXRocyxnPXRoaXMuX3BhcnNlZFBhdGhzLGg9dGhpcy5fb2JqZWN0cyxrPXRoaXMubkNhY2hlZE9iamVjdHNfLGw9QXJyYXkoaC5sZW5ndGgpLGQ9ZS5sZW5ndGg7Y1thXT0KZDtmLnB1c2goYSk7Zy5wdXNoKGIpO2UucHVzaChsKTtjPWs7Zm9yKGQ9aC5sZW5ndGg7YyE9PWQ7KytjKWxbY109bmV3IG9hKGhbY10sYSxiKTtyZXR1cm4gbH0sdW5zdWJzY3JpYmVfOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxjPWJbYV07aWYodm9pZCAwIT09Yyl7dmFyIGQ9dGhpcy5fcGF0aHMsZT10aGlzLl9wYXJzZWRQYXRocyxmPXRoaXMuX2JpbmRpbmdzLGc9Zi5sZW5ndGgtMSxoPWZbZ107YlthW2ddXT1jO2ZbY109aDtmLnBvcCgpO2VbY109ZVtnXTtlLnBvcCgpO2RbY109ZFtnXTtkLnBvcCgpfX19KTtPYmplY3QuYXNzaWduKFhlLnByb3RvdHlwZSx7cGxheTpmdW5jdGlvbigpe3RoaXMuX21peGVyLl9hY3RpdmF0ZUFjdGlvbih0aGlzKTtyZXR1cm4gdGhpc30sc3RvcDpmdW5jdGlvbigpe3RoaXMuX21peGVyLl9kZWFjdGl2YXRlQWN0aW9uKHRoaXMpO3JldHVybiB0aGlzLnJlc2V0KCl9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5wYXVzZWQ9CiExO3RoaXMuZW5hYmxlZD0hMDt0aGlzLnRpbWU9MDt0aGlzLl9sb29wQ291bnQ9LTE7dGhpcy5fc3RhcnRUaW1lPW51bGw7cmV0dXJuIHRoaXMuc3RvcEZhZGluZygpLnN0b3BXYXJwaW5nKCl9LGlzUnVubmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLnBhdXNlZCYmMCE9PXRoaXMudGltZVNjYWxlJiZudWxsPT09dGhpcy5fc3RhcnRUaW1lJiZ0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9LGlzU2NoZWR1bGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX0sc3RhcnRBdDpmdW5jdGlvbihhKXt0aGlzLl9zdGFydFRpbWU9YTtyZXR1cm4gdGhpc30sc2V0TG9vcDpmdW5jdGlvbihhLGIpe3RoaXMubG9vcD1hO3RoaXMucmVwZXRpdGlvbnM9YjtyZXR1cm4gdGhpc30sc2V0RWZmZWN0aXZlV2VpZ2h0OmZ1bmN0aW9uKGEpe3RoaXMud2VpZ2h0PWE7dGhpcy5fZWZmZWN0aXZlV2VpZ2h0PXRoaXMuZW5hYmxlZD8KYTowO3JldHVybiB0aGlzLnN0b3BGYWRpbmcoKX0sZ2V0RWZmZWN0aXZlV2VpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodH0sZmFkZUluOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyhhLDAsMSl9LGZhZGVPdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKGEsMSwwKX0sY3Jvc3NGYWRlRnJvbTpmdW5jdGlvbihhLGIsYyl7YS5mYWRlT3V0KGIpO3RoaXMuZmFkZUluKGIpO2lmKGMpe2M9dGhpcy5fY2xpcC5kdXJhdGlvbjt2YXIgZD1hLl9jbGlwLmR1cmF0aW9uLGU9Yy9kO2Eud2FycCgxLGQvYyxiKTt0aGlzLndhcnAoZSwxLGIpfXJldHVybiB0aGlzfSxjcm9zc0ZhZGVUbzpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEuY3Jvc3NGYWRlRnJvbSh0aGlzLGIsYyl9LHN0b3BGYWRpbmc6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtudWxsIT09YSYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PQpudWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudChhKSk7cmV0dXJuIHRoaXN9LHNldEVmZmVjdGl2ZVRpbWVTY2FsZTpmdW5jdGlvbihhKXt0aGlzLnRpbWVTY2FsZT1hO3RoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT10aGlzLnBhdXNlZD8wOmE7cmV0dXJuIHRoaXMuc3RvcFdhcnBpbmcoKX0sZ2V0RWZmZWN0aXZlVGltZVNjYWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZX0sc2V0RHVyYXRpb246ZnVuY3Rpb24oYSl7dGhpcy50aW1lU2NhbGU9dGhpcy5fY2xpcC5kdXJhdGlvbi9hO3JldHVybiB0aGlzLnN0b3BXYXJwaW5nKCl9LHN5bmNXaXRoOmZ1bmN0aW9uKGEpe3RoaXMudGltZT1hLnRpbWU7dGhpcy50aW1lU2NhbGU9YS50aW1lU2NhbGU7cmV0dXJuIHRoaXMuc3RvcFdhcnBpbmcoKX0saGFsdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy53YXJwKHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSwwLGEpfSx3YXJwOmZ1bmN0aW9uKGEsCmIsYyl7dmFyIGQ9dGhpcy5fbWl4ZXIsZT1kLnRpbWUsZj10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudCxnPXRoaXMudGltZVNjYWxlO251bGw9PT1mJiYodGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9Zj1kLl9sZW5kQ29udHJvbEludGVycG9sYW50KCkpO2Q9Zi5wYXJhbWV0ZXJQb3NpdGlvbnM7Zj1mLnNhbXBsZVZhbHVlcztkWzBdPWU7ZFsxXT1lK2M7ZlswXT1hL2c7ZlsxXT1iL2c7cmV0dXJuIHRoaXN9LHN0b3BXYXJwaW5nOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7bnVsbCE9PWEmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudChhKSk7cmV0dXJuIHRoaXN9LGdldE1peGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21peGVyfSxnZXRDbGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NsaXB9LGdldFJvb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9jYWxSb290fHwKdGhpcy5fbWl4ZXIuX3Jvb3R9LF91cGRhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYodGhpcy5lbmFibGVkKXt2YXIgZT10aGlzLl9zdGFydFRpbWU7aWYobnVsbCE9PWUpe2I9KGEtZSkqYztpZigwPmJ8fDA9PT1jKXJldHVybjt0aGlzLl9zdGFydFRpbWU9bnVsbDtiKj1jfWIqPXRoaXMuX3VwZGF0ZVRpbWVTY2FsZShhKTtjPXRoaXMuX3VwZGF0ZVRpbWUoYik7YT10aGlzLl91cGRhdGVXZWlnaHQoYSk7aWYoMDxhKXtiPXRoaXMuX2ludGVycG9sYW50cztmb3IodmFyIGU9dGhpcy5fcHJvcGVydHlCaW5kaW5ncyxmPTAsZz1iLmxlbmd0aDtmIT09ZzsrK2YpYltmXS5ldmFsdWF0ZShjKSxlW2ZdLmFjY3VtdWxhdGUoZCxhKX19ZWxzZSB0aGlzLl91cGRhdGVXZWlnaHQoYSl9LF91cGRhdGVXZWlnaHQ6ZnVuY3Rpb24oYSl7dmFyIGI9MDtpZih0aGlzLmVuYWJsZWQpe3ZhciBiPXRoaXMud2VpZ2h0LGM9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobnVsbCE9PWMpe3ZhciBkPWMuZXZhbHVhdGUoYSlbMF0sCmI9YipkO2E+Yy5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BGYWRpbmcoKSwwPT09ZCYmKHRoaXMuZW5hYmxlZD0hMSkpfX1yZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PWJ9LF91cGRhdGVUaW1lU2NhbGU6ZnVuY3Rpb24oYSl7dmFyIGI9MDtpZighdGhpcy5wYXVzZWQpe3ZhciBiPXRoaXMudGltZVNjYWxlLGM9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7aWYobnVsbCE9PWMpe3ZhciBkPWMuZXZhbHVhdGUoYSlbMF0sYj1iKmQ7YT5jLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSwwPT09Yj90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1iKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1ifSxfdXBkYXRlVGltZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnRpbWUrYTtpZigwPT09YSlyZXR1cm4gYjt2YXIgYz10aGlzLl9jbGlwLmR1cmF0aW9uLGQ9dGhpcy5sb29wLGU9dGhpcy5fbG9vcENvdW50O2lmKDIyMDA9PT0KZClhOntpZigtMT09PWUmJih0aGlzLl9sb29wQ291bnQ9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLCEwLCExKSksYj49YyliPWM7ZWxzZSBpZigwPmIpYj0wO2Vsc2UgYnJlYWsgYTt0aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMTt0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOjA+YT8tMToxfSl9ZWxzZXtkPTIyMDI9PT1kOy0xPT09ZSYmKDA8PWE/KGU9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLDA9PT10aGlzLnJlcGV0aXRpb25zLGQpKTp0aGlzLl9zZXRFbmRpbmdzKDA9PT10aGlzLnJlcGV0aXRpb25zLCEwLGQpKTtpZihiPj1jfHwwPmIpe3ZhciBmPU1hdGguZmxvb3IoYi9jKSxiPWItYypmLGU9ZStNYXRoLmFicyhmKSxnPXRoaXMucmVwZXRpdGlvbnMtZTswPmc/KHRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLGI9MDxhPwpjOjAsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjowPGE/MTotMX0pKTooMD09PWc/KGE9MD5hLHRoaXMuX3NldEVuZGluZ3MoYSwhYSxkKSk6dGhpcy5fc2V0RW5kaW5ncyghMSwhMSxkKSx0aGlzLl9sb29wQ291bnQ9ZSx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJsb29wIixhY3Rpb246dGhpcyxsb29wRGVsdGE6Zn0pKX1pZihkJiYxPT09KGUmMSkpcmV0dXJuIHRoaXMudGltZT1iLGMtYn1yZXR1cm4gdGhpcy50aW1lPWJ9LF9zZXRFbmRpbmdzOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzO2M/KGQuZW5kaW5nU3RhcnQ9MjQwMSxkLmVuZGluZ0VuZD0yNDAxKTooZC5lbmRpbmdTdGFydD1hP3RoaXMuemVyb1Nsb3BlQXRTdGFydD8yNDAxOjI0MDA6MjQwMixkLmVuZGluZ0VuZD1iP3RoaXMuemVyb1Nsb3BlQXRFbmQ/MjQwMToyNDAwOjI0MDIpfSxfc2NoZWR1bGVGYWRpbmc6ZnVuY3Rpb24oYSwKYixjKXt2YXIgZD10aGlzLl9taXhlcixlPWQudGltZSxmPXRoaXMuX3dlaWdodEludGVycG9sYW50O251bGw9PT1mJiYodGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9Zj1kLl9sZW5kQ29udHJvbEludGVycG9sYW50KCkpO2Q9Zi5wYXJhbWV0ZXJQb3NpdGlvbnM7Zj1mLnNhbXBsZVZhbHVlcztkWzBdPWU7ZlswXT1iO2RbMV09ZSthO2ZbMV09YztyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKFllLnByb3RvdHlwZSxzYS5wcm90b3R5cGUse19iaW5kQWN0aW9uOmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5fbG9jYWxSb290fHx0aGlzLl9yb290LGQ9YS5fY2xpcC50cmFja3MsZT1kLmxlbmd0aCxmPWEuX3Byb3BlcnR5QmluZGluZ3MsZz1hLl9pbnRlcnBvbGFudHMsaD1jLnV1aWQsaz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsbD1rW2hdO3ZvaWQgMD09PWwmJihsPXt9LGtbaF09bCk7Zm9yKGs9MDtrIT09ZTsrK2spe3ZhciBwPWRba10scT1wLm5hbWUsbj1sW3FdO2lmKHZvaWQgMD09PQpuKXtuPWZba107aWYodm9pZCAwIT09bil7bnVsbD09PW4uX2NhY2hlSW5kZXgmJigrK24ucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKG4saCxxKSk7Y29udGludWV9bj1uZXcgbGUob2EuY3JlYXRlKGMscSxiJiZiLl9wcm9wZXJ0eUJpbmRpbmdzW2tdLmJpbmRpbmcucGFyc2VkUGF0aCkscC5WYWx1ZVR5cGVOYW1lLHAuZ2V0VmFsdWVTaXplKCkpOysrbi5yZWZlcmVuY2VDb3VudDt0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcobixoLHEpfWZba109bjtnW2tdLnJlc3VsdEJ1ZmZlcj1uLmJ1ZmZlcn19LF9hY3RpdmF0ZUFjdGlvbjpmdW5jdGlvbihhKXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24oYSkpe2lmKG51bGw9PT1hLl9jYWNoZUluZGV4KXt2YXIgYj0oYS5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLGM9YS5fY2xpcC51dWlkLGQ9dGhpcy5fYWN0aW9uc0J5Q2xpcFtjXTt0aGlzLl9iaW5kQWN0aW9uKGEsZCYmZC5rbm93bkFjdGlvbnNbMF0pO3RoaXMuX2FkZEluYWN0aXZlQWN0aW9uKGEsCmMsYil9Yj1hLl9wcm9wZXJ0eUJpbmRpbmdzO2M9MDtmb3IoZD1iLmxlbmd0aDtjIT09ZDsrK2Mpe3ZhciBlPWJbY107MD09PWUudXNlQ291bnQrKyYmKHRoaXMuX2xlbmRCaW5kaW5nKGUpLGUuc2F2ZU9yaWdpbmFsU3RhdGUoKSl9dGhpcy5fbGVuZEFjdGlvbihhKX19LF9kZWFjdGl2YXRlQWN0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2lzQWN0aXZlQWN0aW9uKGEpKXtmb3IodmFyIGI9YS5fcHJvcGVydHlCaW5kaW5ncyxjPTAsZD1iLmxlbmd0aDtjIT09ZDsrK2Mpe3ZhciBlPWJbY107MD09PS0tZS51c2VDb3VudCYmKGUucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl90YWtlQmFja0JpbmRpbmcoZSkpfXRoaXMuX3Rha2VCYWNrQWN0aW9uKGEpfX0sX2luaXRNZW1vcnlNYW5hZ2VyOmZ1bmN0aW9uKCl7dGhpcy5fYWN0aW9ucz1bXTt0aGlzLl9uQWN0aXZlQWN0aW9ucz0wO3RoaXMuX2FjdGlvbnNCeUNsaXA9e307dGhpcy5fYmluZGluZ3M9W107dGhpcy5fbkFjdGl2ZUJpbmRpbmdzPQowO3RoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fTt0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdO3RoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7dmFyIGE9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gYS5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiBhLl9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gYS5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gYS5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIGEuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gYS5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19LF9pc0FjdGl2ZUFjdGlvbjpmdW5jdGlvbihhKXthPWEuX2NhY2hlSW5kZXg7cmV0dXJuIG51bGwhPT1hJiZhPHRoaXMuX25BY3RpdmVBY3Rpb25zfSwKX2FkZEluYWN0aXZlQWN0aW9uOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLl9hY3Rpb25zLGU9dGhpcy5fYWN0aW9uc0J5Q2xpcCxmPWVbYl07dm9pZCAwPT09Zj8oZj17a25vd25BY3Rpb25zOlthXSxhY3Rpb25CeVJvb3Q6e319LGEuX2J5Q2xpcENhY2hlSW5kZXg9MCxlW2JdPWYpOihiPWYua25vd25BY3Rpb25zLGEuX2J5Q2xpcENhY2hlSW5kZXg9Yi5sZW5ndGgsYi5wdXNoKGEpKTthLl9jYWNoZUluZGV4PWQubGVuZ3RoO2QucHVzaChhKTtmLmFjdGlvbkJ5Um9vdFtjXT1hfSxfcmVtb3ZlSW5hY3RpdmVBY3Rpb246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fYWN0aW9ucyxjPWJbYi5sZW5ndGgtMV0sZD1hLl9jYWNoZUluZGV4O2MuX2NhY2hlSW5kZXg9ZDtiW2RdPWM7Yi5wb3AoKTthLl9jYWNoZUluZGV4PW51bGw7dmFyIGI9YS5fY2xpcC51dWlkLGM9dGhpcy5fYWN0aW9uc0J5Q2xpcCxkPWNbYl0sZT1kLmtub3duQWN0aW9ucyxmPWVbZS5sZW5ndGgtMV0sZz1hLl9ieUNsaXBDYWNoZUluZGV4OwpmLl9ieUNsaXBDYWNoZUluZGV4PWc7ZVtnXT1mO2UucG9wKCk7YS5fYnlDbGlwQ2FjaGVJbmRleD1udWxsO2RlbGV0ZSBkLmFjdGlvbkJ5Um9vdFsoYS5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkXTswPT09ZS5sZW5ndGgmJmRlbGV0ZSBjW2JdO3RoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24oYSl9LF9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uOmZ1bmN0aW9uKGEpe2E9YS5fcHJvcGVydHlCaW5kaW5ncztmb3IodmFyIGI9MCxjPWEubGVuZ3RoO2IhPT1jOysrYil7dmFyIGQ9YVtiXTswPT09LS1kLnJlZmVyZW5jZUNvdW50JiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcoZCl9fSxfbGVuZEFjdGlvbjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLl9hY3Rpb25zLGM9YS5fY2FjaGVJbmRleCxkPXRoaXMuX25BY3RpdmVBY3Rpb25zKyssZT1iW2RdO2EuX2NhY2hlSW5kZXg9ZDtiW2RdPWE7ZS5fY2FjaGVJbmRleD1jO2JbY109ZX0sX3Rha2VCYWNrQWN0aW9uOmZ1bmN0aW9uKGEpe3ZhciBiPQp0aGlzLl9hY3Rpb25zLGM9YS5fY2FjaGVJbmRleCxkPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMsZT1iW2RdO2EuX2NhY2hlSW5kZXg9ZDtiW2RdPWE7ZS5fY2FjaGVJbmRleD1jO2JbY109ZX0sX2FkZEluYWN0aXZlQmluZGluZzpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLGU9ZFtiXSxmPXRoaXMuX2JpbmRpbmdzO3ZvaWQgMD09PWUmJihlPXt9LGRbYl09ZSk7ZVtjXT1hO2EuX2NhY2hlSW5kZXg9Zi5sZW5ndGg7Zi5wdXNoKGEpfSxfcmVtb3ZlSW5hY3RpdmVCaW5kaW5nOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2JpbmRpbmdzLGM9YS5iaW5kaW5nLGQ9Yy5yb290Tm9kZS51dWlkLGM9Yy5wYXRoLGU9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLGY9ZVtkXSxnPWJbYi5sZW5ndGgtMV07YT1hLl9jYWNoZUluZGV4O2cuX2NhY2hlSW5kZXg9YTtiW2FdPWc7Yi5wb3AoKTtkZWxldGUgZltjXTthOntmb3IodmFyIGggaW4gZilicmVhayBhOwpkZWxldGUgZVtkXX19LF9sZW5kQmluZGluZzpmdW5jdGlvbihhKXt2YXIgYj10aGlzLl9iaW5kaW5ncyxjPWEuX2NhY2hlSW5kZXgsZD10aGlzLl9uQWN0aXZlQmluZGluZ3MrKyxlPWJbZF07YS5fY2FjaGVJbmRleD1kO2JbZF09YTtlLl9jYWNoZUluZGV4PWM7YltjXT1lfSxfdGFrZUJhY2tCaW5kaW5nOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2JpbmRpbmdzLGM9YS5fY2FjaGVJbmRleCxkPS0tdGhpcy5fbkFjdGl2ZUJpbmRpbmdzLGU9YltkXTthLl9jYWNoZUluZGV4PWQ7YltkXT1hO2UuX2NhY2hlSW5kZXg9YztiW2NdPWV9LF9sZW5kQ29udHJvbEludGVycG9sYW50OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxiPXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzKyssYz1hW2JdO3ZvaWQgMD09PWMmJihjPW5ldyBXYyhuZXcgRmxvYXQzMkFycmF5KDIpLG5ldyBGbG9hdDMyQXJyYXkoMiksMSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyKSwKYy5fX2NhY2hlSW5kZXg9YixhW2JdPWMpO3JldHVybiBjfSxfdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxjPWEuX19jYWNoZUluZGV4LGQ9LS10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cyxlPWJbZF07YS5fX2NhY2hlSW5kZXg9ZDtiW2RdPWE7ZS5fX2NhY2hlSW5kZXg9YztiW2NdPWV9LF9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyOm5ldyBGbG9hdDMyQXJyYXkoMSksY2xpcEFjdGlvbjpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fHRoaXMuX3Jvb3QsZD1jLnV1aWQsZT0ic3RyaW5nIj09PXR5cGVvZiBhP0JhLmZpbmRCeU5hbWUoYyxhKTphLGM9bnVsbCE9PWU/ZS51dWlkOmEsZj10aGlzLl9hY3Rpb25zQnlDbGlwW2NdLGc9bnVsbDtpZih2b2lkIDAhPT1mKXtnPWYuYWN0aW9uQnlSb290W2RdO2lmKHZvaWQgMCE9PWcpcmV0dXJuIGc7Zz1mLmtub3duQWN0aW9uc1swXTtudWxsPT09CmUmJihlPWcuX2NsaXApfWlmKG51bGw9PT1lKXJldHVybiBudWxsO2U9bmV3IFhlKHRoaXMsZSxiKTt0aGlzLl9iaW5kQWN0aW9uKGUsZyk7dGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24oZSxjLGQpO3JldHVybiBlfSxleGlzdGluZ0FjdGlvbjpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fHRoaXMuX3Jvb3QsZD1jLnV1aWQsYz0ic3RyaW5nIj09PXR5cGVvZiBhP0JhLmZpbmRCeU5hbWUoYyxhKTphLGM9dGhpcy5fYWN0aW9uc0J5Q2xpcFtjP2MudXVpZDphXTtyZXR1cm4gdm9pZCAwIT09Yz9jLmFjdGlvbkJ5Um9vdFtkXXx8bnVsbDpudWxsfSxzdG9wQWxsQWN0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuX2FjdGlvbnMsYj10aGlzLl9uQWN0aXZlQWN0aW9ucyxjPXRoaXMuX2JpbmRpbmdzLGQ9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzLGU9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzPXRoaXMuX25BY3RpdmVBY3Rpb25zPTA7ZSE9PWI7KytlKWFbZV0ucmVzZXQoKTtmb3IoZT0wO2UhPT1kOysrZSljW2VdLnVzZUNvdW50PQowO3JldHVybiB0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oYSl7YSo9dGhpcy50aW1lU2NhbGU7Zm9yKHZhciBiPXRoaXMuX2FjdGlvbnMsYz10aGlzLl9uQWN0aXZlQWN0aW9ucyxkPXRoaXMudGltZSs9YSxlPU1hdGguc2lnbihhKSxmPXRoaXMuX2FjY3VJbmRleF49MSxnPTA7ZyE9PWM7KytnKWJbZ10uX3VwZGF0ZShkLGEsZSxmKTthPXRoaXMuX2JpbmRpbmdzO2I9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihnPTA7ZyE9PWI7KytnKWFbZ10uYXBwbHkoZik7cmV0dXJuIHRoaXN9LGdldFJvb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sdW5jYWNoZUNsaXA6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fYWN0aW9uczthPWEudXVpZDt2YXIgYz10aGlzLl9hY3Rpb25zQnlDbGlwLGQ9Y1thXTtpZih2b2lkIDAhPT1kKXtmb3IodmFyIGQ9ZC5rbm93bkFjdGlvbnMsZT0wLGY9ZC5sZW5ndGg7ZSE9PWY7KytlKXt2YXIgZz1kW2VdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oZyk7dmFyIGg9CmcuX2NhY2hlSW5kZXgsaz1iW2IubGVuZ3RoLTFdO2cuX2NhY2hlSW5kZXg9bnVsbDtnLl9ieUNsaXBDYWNoZUluZGV4PW51bGw7ay5fY2FjaGVJbmRleD1oO2JbaF09aztiLnBvcCgpO3RoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24oZyl9ZGVsZXRlIGNbYV19fSx1bmNhY2hlUm9vdDpmdW5jdGlvbihhKXthPWEudXVpZDt2YXIgYj10aGlzLl9hY3Rpb25zQnlDbGlwLGM7Zm9yKGMgaW4gYil7dmFyIGQ9YltjXS5hY3Rpb25CeVJvb3RbYV07dm9pZCAwIT09ZCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oZCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oZCkpfWM9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lW2FdO2lmKHZvaWQgMCE9PWMpZm9yKHZhciBlIGluIGMpYT1jW2VdLGEucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcoYSl9LHVuY2FjaGVBY3Rpb246ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmV4aXN0aW5nQWN0aW9uKGEsCmIpO251bGwhPT1jJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihjKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihjKSl9fSk7SmQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKZCh2b2lkIDA9PT10aGlzLnZhbHVlLmNsb25lP3RoaXMudmFsdWU6dGhpcy52YWx1ZS5jbG9uZSgpKX07bWUucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOm1lLGlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk6ITAsYWRkR3JvdXA6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OmEsY291bnQ6YixtYXRlcmlhbEluZGV4OmN9KX0sY29weTpmdW5jdGlvbihhKXt2YXIgYj1hLmluZGV4O251bGwhPT1iJiZ0aGlzLnNldEluZGV4KGIuY2xvbmUoKSk7dmFyIGI9YS5hdHRyaWJ1dGVzLGM7Zm9yKGMgaW4gYil0aGlzLmFkZEF0dHJpYnV0ZShjLGJbY10uY2xvbmUoKSk7YT1hLmdyb3VwcztjPTA7Zm9yKGI9CmEubGVuZ3RoO2M8YjtjKyspe3ZhciBkPWFbY107dGhpcy5hZGRHcm91cChkLnN0YXJ0LGQuY291bnQsZC5tYXRlcmlhbEluZGV4KX1yZXR1cm4gdGhpc319KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuZS5wcm90b3R5cGUse2NvdW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmNvdW50fX0sYXJyYXk6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuYXJyYXl9fX0pO09iamVjdC5hc3NpZ24obmUucHJvdG90eXBlLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLHNldFg6ZnVuY3Rpb24oYSxiKXt0aGlzLmRhdGEuYXJyYXlbYSp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1iO3JldHVybiB0aGlzfSxzZXRZOmZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhLmFycmF5W2EqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXT1iO3JldHVybiB0aGlzfSxzZXRaOmZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhLmFycmF5W2EqdGhpcy5kYXRhLnN0cmlkZSsKdGhpcy5vZmZzZXQrMl09YjtyZXR1cm4gdGhpc30sc2V0VzpmdW5jdGlvbihhLGIpe3RoaXMuZGF0YS5hcnJheVthKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM109YjtyZXR1cm4gdGhpc30sZ2V0WDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W2EqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19LGdldFk6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVthKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV19LGdldFo6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVthKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl19LGdldFc6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVthKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119LHNldFhZOmZ1bmN0aW9uKGEsYixjKXthPWEqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDt0aGlzLmRhdGEuYXJyYXlbYSswXT1iO3RoaXMuZGF0YS5hcnJheVthKwoxXT1jO3JldHVybiB0aGlzfSxzZXRYWVo6ZnVuY3Rpb24oYSxiLGMsZCl7YT1hKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7dGhpcy5kYXRhLmFycmF5W2ErMF09Yjt0aGlzLmRhdGEuYXJyYXlbYSsxXT1jO3RoaXMuZGF0YS5hcnJheVthKzJdPWQ7cmV0dXJuIHRoaXN9LHNldFhZWlc6ZnVuY3Rpb24oYSxiLGMsZCxlKXthPWEqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDt0aGlzLmRhdGEuYXJyYXlbYSswXT1iO3RoaXMuZGF0YS5hcnJheVthKzFdPWM7dGhpcy5kYXRhLmFycmF5W2ErMl09ZDt0aGlzLmRhdGEuYXJyYXlbYSszXT1lO3JldHVybiB0aGlzfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrYy5wcm90b3R5cGUsIm5lZWRzVXBkYXRlIix7c2V0OmZ1bmN0aW9uKGEpeyEwPT09YSYmdGhpcy52ZXJzaW9uKyt9fSk7T2JqZWN0LmFzc2lnbihrYy5wcm90b3R5cGUse2lzSW50ZXJsZWF2ZWRCdWZmZXI6ITAsc2V0QXJyYXk6ZnVuY3Rpb24oYSl7aWYoQXJyYXkuaXNBcnJheShhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpOwp0aGlzLmNvdW50PXZvaWQgMCE9PWE/YS5sZW5ndGgvdGhpcy5zdHJpZGU6MDt0aGlzLmFycmF5PWF9LHNldER5bmFtaWM6ZnVuY3Rpb24oYSl7dGhpcy5keW5hbWljPWE7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oYSl7dGhpcy5hcnJheT1uZXcgYS5hcnJheS5jb25zdHJ1Y3RvcihhLmFycmF5KTt0aGlzLmNvdW50PWEuY291bnQ7dGhpcy5zdHJpZGU9YS5zdHJpZGU7dGhpcy5keW5hbWljPWEuZHluYW1pYztyZXR1cm4gdGhpc30sY29weUF0OmZ1bmN0aW9uKGEsYixjKXthKj10aGlzLnN0cmlkZTtjKj1iLnN0cmlkZTtmb3IodmFyIGQ9MCxlPXRoaXMuc3RyaWRlO2Q8ZTtkKyspdGhpcy5hcnJheVthK2RdPWIuYXJyYXlbYytkXTtyZXR1cm4gdGhpc30sc2V0OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9MCk7dGhpcy5hcnJheS5zZXQoYSxiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LG9uVXBsb2FkOmZ1bmN0aW9uKGEpe3RoaXMub25VcGxvYWRDYWxsYmFjaz0KYTtyZXR1cm4gdGhpc319KTtvZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGtjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOm9lLGlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXI6ITAsY29weTpmdW5jdGlvbihhKXtrYy5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYSk7dGhpcy5tZXNoUGVyQXR0cmlidXRlPWEubWVzaFBlckF0dHJpYnV0ZTtyZXR1cm4gdGhpc319KTtwZS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEwucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6cGUsaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6ITAsY29weTpmdW5jdGlvbihhKXtMLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxhKTt0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9YS5tZXNoUGVyQXR0cmlidXRlO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oWmUucHJvdG90eXBlLHtsaW5lUHJlY2lzaW9uOjEsc2V0OmZ1bmN0aW9uKGEsYil7dGhpcy5yYXkuc2V0KGEsCmIpfSxzZXRGcm9tQ2FtZXJhOmZ1bmN0aW9uKGEsYil7YiYmYi5pc1BlcnNwZWN0aXZlQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGIubWF0cml4V29ybGQpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQoYS54LGEueSwuNSkudW5wcm9qZWN0KGIpLnN1Yih0aGlzLnJheS5vcmlnaW4pLm5vcm1hbGl6ZSgpKTpiJiZiLmlzT3J0aG9ncmFwaGljQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0KGEueCxhLnksKGIubmVhcitiLmZhcikvKGIubmVhci1iLmZhcikpLnVucHJvamVjdChiKSx0aGlzLnJheS5kaXJlY3Rpb24uc2V0KDAsMCwtMSkudHJhbnNmb3JtRGlyZWN0aW9uKGIubWF0cml4V29ybGQpKTpjb25zb2xlLmVycm9yKCJUSFJFRS5SYXljYXN0ZXI6IFVuc3VwcG9ydGVkIGNhbWVyYSB0eXBlLiIpfSxpbnRlcnNlY3RPYmplY3Q6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtxZShhLHRoaXMsYyxiKTtjLnNvcnQoJGUpO3JldHVybiBjfSxpbnRlcnNlY3RPYmplY3RzOmZ1bmN0aW9uKGEsCmIpe3ZhciBjPVtdO2lmKCExPT09QXJyYXkuaXNBcnJheShhKSlyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0czogb2JqZWN0cyBpcyBub3QgYW4gQXJyYXkuIiksYztmb3IodmFyIGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspcWUoYVtkXSx0aGlzLGMsYik7Yy5zb3J0KCRlKTtyZXR1cm4gY319KTtPYmplY3QuYXNzaWduKGFmLnByb3RvdHlwZSx7c3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLm9sZFRpbWU9dGhpcy5zdGFydFRpbWU9KCJ1bmRlZmluZWQiPT09dHlwZW9mIHBlcmZvcm1hbmNlP0RhdGU6cGVyZm9ybWFuY2UpLm5vdygpO3RoaXMuZWxhcHNlZFRpbWU9MDt0aGlzLnJ1bm5pbmc9ITB9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmdldEVsYXBzZWRUaW1lKCk7dGhpcy5ydW5uaW5nPSExfSxnZXRFbGFwc2VkVGltZTpmdW5jdGlvbigpe3RoaXMuZ2V0RGVsdGEoKTtyZXR1cm4gdGhpcy5lbGFwc2VkVGltZX0sZ2V0RGVsdGE6ZnVuY3Rpb24oKXt2YXIgYT0KMDtpZih0aGlzLmF1dG9TdGFydCYmIXRoaXMucnVubmluZylyZXR1cm4gdGhpcy5zdGFydCgpLDA7aWYodGhpcy5ydW5uaW5nKXt2YXIgYj0oInVuZGVmaW5lZCI9PT10eXBlb2YgcGVyZm9ybWFuY2U/RGF0ZTpwZXJmb3JtYW5jZSkubm93KCksYT0oYi10aGlzLm9sZFRpbWUpLzFFMzt0aGlzLm9sZFRpbWU9Yjt0aGlzLmVsYXBzZWRUaW1lKz1hfXJldHVybiBhfX0pO09iamVjdC5hc3NpZ24oYmYucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3RoaXMucmFkaXVzPWE7dGhpcy5waGk9Yjt0aGlzLnRoZXRhPWM7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMucmFkaXVzPWEucmFkaXVzO3RoaXMucGhpPWEucGhpO3RoaXMudGhldGE9YS50aGV0YTtyZXR1cm4gdGhpc30sbWFrZVNhZmU6ZnVuY3Rpb24oKXt0aGlzLnBoaT1NYXRoLm1heCgxRS02LE1hdGgubWluKE1hdGguUEktCjFFLTYsdGhpcy5waGkpKTtyZXR1cm4gdGhpc30sc2V0RnJvbVZlY3RvcjM6ZnVuY3Rpb24oYSl7dGhpcy5yYWRpdXM9YS5sZW5ndGgoKTswPT09dGhpcy5yYWRpdXM/dGhpcy5waGk9dGhpcy50aGV0YT0wOih0aGlzLnRoZXRhPU1hdGguYXRhbjIoYS54LGEueiksdGhpcy5waGk9TWF0aC5hY29zKFkuY2xhbXAoYS55L3RoaXMucmFkaXVzLC0xLDEpKSk7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihjZi5wcm90b3R5cGUse3NldDpmdW5jdGlvbihhLGIsYyl7dGhpcy5yYWRpdXM9YTt0aGlzLnRoZXRhPWI7dGhpcy55PWM7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGEpe3RoaXMucmFkaXVzPWEucmFkaXVzO3RoaXMudGhldGE9YS50aGV0YTt0aGlzLnk9YS55O3JldHVybiB0aGlzfSxzZXRGcm9tVmVjdG9yMzpmdW5jdGlvbihhKXt0aGlzLnJhZGl1cz1NYXRoLnNxcnQoYS54KgphLngrYS56KmEueik7dGhpcy50aGV0YT1NYXRoLmF0YW4yKGEueCxhLnopO3RoaXMueT1hLnk7cmV0dXJuIHRoaXN9fSk7cmEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQ2EucHJvdG90eXBlKTtyYS5wcm90b3R5cGUuY29uc3RydWN0b3I9cmE7cmEucHJvdG90eXBlLmNyZWF0ZUFuaW1hdGlvbj1mdW5jdGlvbihhLGIsYyxkKXtiPXtzdGFydDpiLGVuZDpjLGxlbmd0aDpjLWIrMSxmcHM6ZCxkdXJhdGlvbjooYy1iKS9kLGxhc3RGcmFtZTowLGN1cnJlbnRGcmFtZTowLGFjdGl2ZTohMSx0aW1lOjAsZGlyZWN0aW9uOjEsd2VpZ2h0OjEsZGlyZWN0aW9uQmFja3dhcmRzOiExLG1pcnJvcmVkTG9vcDohMX07dGhpcy5hbmltYXRpb25zTWFwW2FdPWI7dGhpcy5hbmltYXRpb25zTGlzdC5wdXNoKGIpfTtyYS5wcm90b3R5cGUuYXV0b0NyZWF0ZUFuaW1hdGlvbnM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPS8oW2Etel0rKV8/KFxkKykvaSxjLGQ9e30sZT10aGlzLmdlb21ldHJ5LGY9MCxnPWUubW9ycGhUYXJnZXRzLmxlbmd0aDtmPApnO2YrKyl7dmFyIGg9ZS5tb3JwaFRhcmdldHNbZl0ubmFtZS5tYXRjaChiKTtpZihoJiYxPGgubGVuZ3RoKXt2YXIgaz1oWzFdO2Rba118fChkW2tdPXtzdGFydDpJbmZpbml0eSxlbmQ6LUluZmluaXR5fSk7aD1kW2tdO2Y8aC5zdGFydCYmKGguc3RhcnQ9Zik7Zj5oLmVuZCYmKGguZW5kPWYpO2N8fChjPWspfX1mb3IoayBpbiBkKWg9ZFtrXSx0aGlzLmNyZWF0ZUFuaW1hdGlvbihrLGguc3RhcnQsaC5lbmQsYSk7dGhpcy5maXJzdEFuaW1hdGlvbj1jfTtyYS5wcm90b3R5cGUuc2V0QW5pbWF0aW9uRGlyZWN0aW9uRm9yd2FyZD1mdW5jdGlvbihhKXtpZihhPXRoaXMuYW5pbWF0aW9uc01hcFthXSlhLmRpcmVjdGlvbj0xLGEuZGlyZWN0aW9uQmFja3dhcmRzPSExfTtyYS5wcm90b3R5cGUuc2V0QW5pbWF0aW9uRGlyZWN0aW9uQmFja3dhcmQ9ZnVuY3Rpb24oYSl7aWYoYT10aGlzLmFuaW1hdGlvbnNNYXBbYV0pYS5kaXJlY3Rpb249LTEsYS5kaXJlY3Rpb25CYWNrd2FyZHM9ITB9O3JhLnByb3RvdHlwZS5zZXRBbmltYXRpb25GUFM9CmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5hbmltYXRpb25zTWFwW2FdO2MmJihjLmZwcz1iLGMuZHVyYXRpb249KGMuZW5kLWMuc3RhcnQpL2MuZnBzKX07cmEucHJvdG90eXBlLnNldEFuaW1hdGlvbkR1cmF0aW9uPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5hbmltYXRpb25zTWFwW2FdO2MmJihjLmR1cmF0aW9uPWIsYy5mcHM9KGMuZW5kLWMuc3RhcnQpL2MuZHVyYXRpb24pfTtyYS5wcm90b3R5cGUuc2V0QW5pbWF0aW9uV2VpZ2h0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5hbmltYXRpb25zTWFwW2FdO2MmJihjLndlaWdodD1iKX07cmEucHJvdG90eXBlLnNldEFuaW1hdGlvblRpbWU9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmFuaW1hdGlvbnNNYXBbYV07YyYmKGMudGltZT1iKX07cmEucHJvdG90eXBlLmdldEFuaW1hdGlvblRpbWU9ZnVuY3Rpb24oYSl7dmFyIGI9MDtpZihhPXRoaXMuYW5pbWF0aW9uc01hcFthXSliPWEudGltZTtyZXR1cm4gYn07cmEucHJvdG90eXBlLmdldEFuaW1hdGlvbkR1cmF0aW9uPQpmdW5jdGlvbihhKXt2YXIgYj0tMTtpZihhPXRoaXMuYW5pbWF0aW9uc01hcFthXSliPWEuZHVyYXRpb247cmV0dXJuIGJ9O3JhLnByb3RvdHlwZS5wbGF5QW5pbWF0aW9uPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYW5pbWF0aW9uc01hcFthXTtiPyhiLnRpbWU9MCxiLmFjdGl2ZT0hMCk6Y29uc29sZS53YXJuKCJUSFJFRS5Nb3JwaEJsZW5kTWVzaDogYW5pbWF0aW9uWyIrYSsiXSB1bmRlZmluZWQgaW4gLnBsYXlBbmltYXRpb24oKSIpfTtyYS5wcm90b3R5cGUuc3RvcEFuaW1hdGlvbj1mdW5jdGlvbihhKXtpZihhPXRoaXMuYW5pbWF0aW9uc01hcFthXSlhLmFjdGl2ZT0hMX07cmEucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPXRoaXMuYW5pbWF0aW9uc0xpc3QubGVuZ3RoO2I8YztiKyspe3ZhciBkPXRoaXMuYW5pbWF0aW9uc0xpc3RbYl07aWYoZC5hY3RpdmUpe3ZhciBlPWQuZHVyYXRpb24vZC5sZW5ndGg7ZC50aW1lKz1kLmRpcmVjdGlvbiphO2lmKGQubWlycm9yZWRMb29wKXtpZihkLnRpbWU+CmQuZHVyYXRpb258fDA+ZC50aW1lKWQuZGlyZWN0aW9uKj0tMSxkLnRpbWU+ZC5kdXJhdGlvbiYmKGQudGltZT1kLmR1cmF0aW9uLGQuZGlyZWN0aW9uQmFja3dhcmRzPSEwKSwwPmQudGltZSYmKGQudGltZT0wLGQuZGlyZWN0aW9uQmFja3dhcmRzPSExKX1lbHNlIGQudGltZSU9ZC5kdXJhdGlvbiwwPmQudGltZSYmKGQudGltZSs9ZC5kdXJhdGlvbik7dmFyIGY9ZC5zdGFydCtZLmNsYW1wKE1hdGguZmxvb3IoZC50aW1lL2UpLDAsZC5sZW5ndGgtMSksZz1kLndlaWdodDtmIT09ZC5jdXJyZW50RnJhbWUmJih0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1tkLmxhc3RGcmFtZV09MCx0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1tkLmN1cnJlbnRGcmFtZV09MSpnLHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzW2ZdPTAsZC5sYXN0RnJhbWU9ZC5jdXJyZW50RnJhbWUsZC5jdXJyZW50RnJhbWU9Zik7ZT1kLnRpbWUlZS9lO2QuZGlyZWN0aW9uQmFja3dhcmRzJiYoZT0xLWUpO2QuY3VycmVudEZyYW1lIT09CmQubGFzdEZyYW1lPyh0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1tkLmN1cnJlbnRGcmFtZV09ZSpnLHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzW2QubGFzdEZyYW1lXT0oMS1lKSpnKTp0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1tkLmN1cnJlbnRGcmFtZV09Z319fTskYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSk7JGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPSRjOyRjLnByb3RvdHlwZS5pc0ltbWVkaWF0ZVJlbmRlck9iamVjdD0hMDthZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkYS5wcm90b3R5cGUpO2FkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hZDthZC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHAsYj1uZXcgcCxjPW5ldyBLYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD1bImEiLCJiIiwiYyJdO3RoaXMub2JqZWN0LnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtjLmdldE5vcm1hbE1hdHJpeCh0aGlzLm9iamVjdC5tYXRyaXhXb3JsZCk7CnZhciBlPXRoaXMub2JqZWN0Lm1hdHJpeFdvcmxkLGY9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLGc9dGhpcy5vYmplY3QuZ2VvbWV0cnk7aWYoZyYmZy5pc0dlb21ldHJ5KWZvcih2YXIgaD1nLnZlcnRpY2VzLGs9Zy5mYWNlcyxsPWc9MCxwPWsubGVuZ3RoO2w8cDtsKyspZm9yKHZhciBxPWtbbF0sbj0wLHI9cS52ZXJ0ZXhOb3JtYWxzLmxlbmd0aDtuPHI7bisrKXt2YXIgej1xLnZlcnRleE5vcm1hbHNbbl07YS5jb3B5KGhbcVtkW25dXV0pLmFwcGx5TWF0cml4NChlKTtiLmNvcHkoeikuYXBwbHlNYXRyaXgzKGMpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHRoaXMuc2l6ZSkuYWRkKGEpO2Yuc2V0WFlaKGcsYS54LGEueSxhLnopO2crPTE7Zi5zZXRYWVooZyxiLngsYi55LGIueik7Zys9MX1lbHNlIGlmKGcmJmcuaXNCdWZmZXJHZW9tZXRyeSlmb3IoZD1nLmF0dHJpYnV0ZXMucG9zaXRpb24saD1nLmF0dHJpYnV0ZXMubm9ybWFsLG49Zz0wLHI9ZC5jb3VudDtuPApyO24rKylhLnNldChkLmdldFgobiksZC5nZXRZKG4pLGQuZ2V0WihuKSkuYXBwbHlNYXRyaXg0KGUpLGIuc2V0KGguZ2V0WChuKSxoLmdldFkobiksaC5nZXRaKG4pKSxiLmFwcGx5TWF0cml4MyhjKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0aGlzLnNpemUpLmFkZChhKSxmLnNldFhZWihnLGEueCxhLnksYS56KSxnKz0xLGYuc2V0WFlaKGcsYi54LGIueSxiLnopLGcrPTE7Zi5uZWVkc1VwZGF0ZT0hMH19KCk7bGMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpO2xjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1sYztsYy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuY29uZS5nZW9tZXRyeS5kaXNwb3NlKCk7dGhpcy5jb25lLm1hdGVyaWFsLmRpc3Bvc2UoKX07bGMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5saWdodC5kaXN0YW5jZT90aGlzLmxpZ2h0LmRpc3RhbmNlOgoxRTMsZD1jKk1hdGgudGFuKHRoaXMubGlnaHQuYW5nbGUpO3RoaXMuY29uZS5zY2FsZS5zZXQoZCxkLGMpO2Euc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQubWF0cml4V29ybGQpO2Iuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQudGFyZ2V0Lm1hdHJpeFdvcmxkKTt0aGlzLmNvbmUubG9va0F0KGIuc3ViKGEpKTt0aGlzLmNvbmUubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKX19KCk7bWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGEucHJvdG90eXBlKTttYy5wcm90b3R5cGUuY29uc3RydWN0b3I9bWM7bWMucHJvdG90eXBlLmdldEJvbmVMaXN0PWZ1bmN0aW9uKGEpe3ZhciBiPVtdO2EmJmEuaXNCb25lJiZiLnB1c2goYSk7Zm9yKHZhciBjPTA7YzxhLmNoaWxkcmVuLmxlbmd0aDtjKyspYi5wdXNoLmFwcGx5KGIsdGhpcy5nZXRCb25lTGlzdChhLmNoaWxkcmVuW2NdKSk7cmV0dXJuIGJ9O21jLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYT0KbmV3IHAsYj1uZXcgSixjPW5ldyBKO3JldHVybiBmdW5jdGlvbigpe3ZhciBkPXRoaXMuZ2VvbWV0cnksZT1kLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtjLmdldEludmVyc2UodGhpcy5yb290Lm1hdHJpeFdvcmxkKTtmb3IodmFyIGY9MCxnPTA7Zjx0aGlzLmJvbmVzLmxlbmd0aDtmKyspe3ZhciBoPXRoaXMuYm9uZXNbZl07aC5wYXJlbnQmJmgucGFyZW50LmlzQm9uZSYmKGIubXVsdGlwbHlNYXRyaWNlcyhjLGgubWF0cml4V29ybGQpLGEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGIpLGUuc2V0WFlaKGcsYS54LGEueSxhLnopLGIubXVsdGlwbHlNYXRyaWNlcyhjLGgucGFyZW50Lm1hdHJpeFdvcmxkKSxhLnNldEZyb21NYXRyaXhQb3NpdGlvbihiKSxlLnNldFhZWihnKzEsYS54LGEueSxhLnopLGcrPTIpfWQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwfX0oKTtuYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShDYS5wcm90b3R5cGUpO25jLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0KbmM7bmMucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKTt0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX07bmMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3RoaXMubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKX07b2MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpO29jLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1vYztvYy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuY2hpbGRyZW5bMF0uZ2VvbWV0cnkuZGlzcG9zZSgpO3RoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuZGlzcG9zZSgpfTtvYy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jaGlsZHJlblswXTthLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcik7dmFyIGI9LjUqdGhpcy5saWdodC53aWR0aCxjPS41KnRoaXMubGlnaHQuaGVpZ2h0LGE9YS5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLApkPWEuYXJyYXk7ZFswXT1iO2RbMV09LWM7ZFsyXT0wO2RbM109YjtkWzRdPWM7ZFs1XT0wO2RbNl09LWI7ZFs3XT1jO2RbOF09MDtkWzldPS1iO2RbMTBdPS1jO2RbMTFdPTA7ZFsxMl09YjtkWzEzXT0tYztkWzE0XT0wO2EubmVlZHNVcGRhdGU9ITB9O3BjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKTtwYy5wcm90b3R5cGUuY29uc3RydWN0b3I9cGM7cGMucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmNoaWxkcmVuWzBdLmdlb21ldHJ5LmRpc3Bvc2UoKTt0aGlzLmNoaWxkcmVuWzBdLm1hdGVyaWFsLmRpc3Bvc2UoKX07cGMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IEgsYz1uZXcgSDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD10aGlzLmNoaWxkcmVuWzBdLGU9ZC5nZW9tZXRyeS5nZXRBdHRyaWJ1dGUoImNvbG9yIik7Yi5jb3B5KHRoaXMubGlnaHQuY29sb3IpO2MuY29weSh0aGlzLmxpZ2h0Lmdyb3VuZENvbG9yKTsKZm9yKHZhciBmPTAsZz1lLmNvdW50O2Y8ZztmKyspe3ZhciBoPWY8Zy8yP2I6YztlLnNldFhZWihmLGgucixoLmcsaC5iKX1kLmxvb2tBdChhLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKS5uZWdhdGUoKSk7ZS5uZWVkc1VwZGF0ZT0hMH19KCk7YmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGEucHJvdG90eXBlKTtiZC5wcm90b3R5cGUuY29uc3RydWN0b3I9YmQ7S2QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGEucHJvdG90eXBlKTtLZC5wcm90b3R5cGUuY29uc3RydWN0b3I9S2Q7Y2QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGEucHJvdG90eXBlKTtjZC5wcm90b3R5cGUuY29uc3RydWN0b3I9Y2Q7Y2QucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHAsYz1uZXcgS2E7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5vYmplY3QudXBkYXRlTWF0cml4V29ybGQoITApO2MuZ2V0Tm9ybWFsTWF0cml4KHRoaXMub2JqZWN0Lm1hdHJpeFdvcmxkKTsKZm9yKHZhciBkPXRoaXMub2JqZWN0Lm1hdHJpeFdvcmxkLGU9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLGY9dGhpcy5vYmplY3QuZ2VvbWV0cnksZz1mLnZlcnRpY2VzLGY9Zi5mYWNlcyxoPTAsaz0wLGw9Zi5sZW5ndGg7azxsO2srKyl7dmFyIHA9ZltrXSxxPXAubm9ybWFsO2EuY29weShnW3AuYV0pLmFkZChnW3AuYl0pLmFkZChnW3AuY10pLmRpdmlkZVNjYWxhcigzKS5hcHBseU1hdHJpeDQoZCk7Yi5jb3B5KHEpLmFwcGx5TWF0cml4MyhjKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0aGlzLnNpemUpLmFkZChhKTtlLnNldFhZWihoLGEueCxhLnksYS56KTtoKz0xO2Uuc2V0WFlaKGgsYi54LGIueSxiLnopO2grPTF9ZS5uZWVkc1VwZGF0ZT0hMH19KCk7cWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpO3FjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1xYztxYy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuY2hpbGRyZW5bMF0sCmI9dGhpcy5jaGlsZHJlblsxXTthLmdlb21ldHJ5LmRpc3Bvc2UoKTthLm1hdGVyaWFsLmRpc3Bvc2UoKTtiLmdlb21ldHJ5LmRpc3Bvc2UoKTtiLm1hdGVyaWFsLmRpc3Bvc2UoKX07cWMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhPW5ldyBwLGI9bmV3IHAsYz1uZXcgcDtyZXR1cm4gZnVuY3Rpb24oKXthLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKTtiLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCk7Yy5zdWJWZWN0b3JzKGIsYSk7dmFyIGQ9dGhpcy5jaGlsZHJlblswXSxlPXRoaXMuY2hpbGRyZW5bMV07ZC5sb29rQXQoYyk7ZC5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpO2UubG9va0F0KGMpO2Uuc2NhbGUuej1jLmxlbmd0aCgpfX0oKTtkZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkYS5wcm90b3R5cGUpO2RkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1kZDsKZGQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxnLGgsayl7ZC5zZXQoZyxoLGspLnVucHJvamVjdChlKTthPWNbYV07aWYodm9pZCAwIT09YSlmb3IoZz1iLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKSxoPTAsaz1hLmxlbmd0aDtoPGs7aCsrKWcuc2V0WFlaKGFbaF0sZC54LGQueSxkLnopfXZhciBiLGMsZD1uZXcgcCxlPW5ldyBPYTtyZXR1cm4gZnVuY3Rpb24oKXtiPXRoaXMuZ2VvbWV0cnk7Yz10aGlzLnBvaW50TWFwO2UucHJvamVjdGlvbk1hdHJpeC5jb3B5KHRoaXMuY2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO2EoImMiLDAsMCwtMSk7YSgidCIsMCwwLDEpO2EoIm4xIiwtMSwtMSwtMSk7YSgibjIiLDEsLTEsLTEpO2EoIm4zIiwtMSwxLC0xKTthKCJuNCIsMSwxLC0xKTthKCJmMSIsLTEsLTEsMSk7YSgiZjIiLDEsLTEsMSk7YSgiZjMiLC0xLDEsMSk7YSgiZjQiLDEsMSwxKTthKCJ1MSIsLjcsMS4xLC0xKTthKCJ1MiIsLS43LDEuMSwtMSk7YSgidTMiLAowLDIsLTEpO2EoImNmMSIsLTEsMCwxKTthKCJjZjIiLDEsMCwxKTthKCJjZjMiLDAsLTEsMSk7YSgiY2Y0IiwwLDEsMSk7YSgiY24xIiwtMSwwLC0xKTthKCJjbjIiLDEsMCwtMSk7YSgiY24zIiwwLC0xLC0xKTthKCJjbjQiLDAsMSwtMSk7Yi5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIikubmVlZHNVcGRhdGU9ITB9fSgpO0JiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGRhLnByb3RvdHlwZSk7QmIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUJiO0JiLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgVGE7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZvaWQgMCE9PWImJmNvbnNvbGUud2FybigiVEhSRUUuQm94SGVscGVyOiAudXBkYXRlKCkgaGFzIG5vIGxvbmdlciBhcmd1bWVudHMuIik7dm9pZCAwIT09dGhpcy5vYmplY3QmJmEuc2V0RnJvbU9iamVjdCh0aGlzLm9iamVjdCk7aWYoIWEuaXNFbXB0eSgpKXtiPWEubWluO3ZhciBjPWEubWF4LGQ9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLAplPWQuYXJyYXk7ZVswXT1jLng7ZVsxXT1jLnk7ZVsyXT1jLno7ZVszXT1iLng7ZVs0XT1jLnk7ZVs1XT1jLno7ZVs2XT1iLng7ZVs3XT1iLnk7ZVs4XT1jLno7ZVs5XT1jLng7ZVsxMF09Yi55O2VbMTFdPWMuejtlWzEyXT1jLng7ZVsxM109Yy55O2VbMTRdPWIuejtlWzE1XT1iLng7ZVsxNl09Yy55O2VbMTddPWIuejtlWzE4XT1iLng7ZVsxOV09Yi55O2VbMjBdPWIuejtlWzIxXT1jLng7ZVsyMl09Yi55O2VbMjNdPWIuejtkLm5lZWRzVXBkYXRlPSEwO3RoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9fX0oKTtCYi5wcm90b3R5cGUuc2V0RnJvbU9iamVjdD1mdW5jdGlvbihhKXt0aGlzLm9iamVjdD1hO3RoaXMudXBkYXRlKCk7cmV0dXJuIHRoaXN9O3ZhciBMZCxyZTtDYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSk7Q2IucHJvdG90eXBlLmNvbnN0cnVjdG9yPUNiO0NiLnByb3RvdHlwZS5zZXREaXJlY3Rpb249ZnVuY3Rpb24oKXt2YXIgYT0KbmV3IHAsYjtyZXR1cm4gZnVuY3Rpb24oYyl7Ljk5OTk5PGMueT90aGlzLnF1YXRlcm5pb24uc2V0KDAsMCwwLDEpOi0uOTk5OTk+Yy55P3RoaXMucXVhdGVybmlvbi5zZXQoMSwwLDAsMCk6KGEuc2V0KGMueiwwLC1jLngpLm5vcm1hbGl6ZSgpLGI9TWF0aC5hY29zKGMueSksdGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoYSxiKSl9fSgpO0NiLnByb3RvdHlwZS5zZXRMZW5ndGg9ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMD09PWImJihiPS4yKmEpO3ZvaWQgMD09PWMmJihjPS4yKmIpO3RoaXMubGluZS5zY2FsZS5zZXQoMSxNYXRoLm1heCgwLGEtYiksMSk7dGhpcy5saW5lLnVwZGF0ZU1hdHJpeCgpO3RoaXMuY29uZS5zY2FsZS5zZXQoYyxiLGMpO3RoaXMuY29uZS5wb3NpdGlvbi55PWE7dGhpcy5jb25lLnVwZGF0ZU1hdHJpeCgpfTtDYi5wcm90b3R5cGUuc2V0Q29sb3I9ZnVuY3Rpb24oYSl7dGhpcy5saW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkoYSk7dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLmNvcHkoYSl9OwpNZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkYS5wcm90b3R5cGUpO01kLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1NZDt2YXIgUGQ9bmV3IHAsdmU9bmV3IHNlLHdlPW5ldyBzZSx4ZT1uZXcgc2U7SmEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTtKYS5wcm90b3R5cGUuY29uc3RydWN0b3I9SmE7SmEucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucG9pbnRzLGM9Yi5sZW5ndGg7Mj5jJiZjb25zb2xlLmxvZygiZHVoLCB5b3UgbmVlZCBhdCBsZWFzdCAyIHBvaW50cyIpO2EqPWMtKHRoaXMuY2xvc2VkPzA6MSk7dmFyIGQ9TWF0aC5mbG9vcihhKTthLT1kO3RoaXMuY2xvc2VkP2QrPTA8ZD8wOihNYXRoLmZsb29yKE1hdGguYWJzKGQpL2IubGVuZ3RoKSsxKSpiLmxlbmd0aDowPT09YSYmZD09PWMtMSYmKGQ9Yy0yLGE9MSk7dmFyIGUsZixnO3RoaXMuY2xvc2VkfHwwPGQ/ZT1iWyhkLTEpJWNdOihQZC5zdWJWZWN0b3JzKGJbMF0sYlsxXSkuYWRkKGJbMF0pLAplPVBkKTtmPWJbZCVjXTtnPWJbKGQrMSklY107dGhpcy5jbG9zZWR8fGQrMjxjP2I9YlsoZCsyKSVjXTooUGQuc3ViVmVjdG9ycyhiW2MtMV0sYltjLTJdKS5hZGQoYltjLTFdKSxiPVBkKTtpZih2b2lkIDA9PT10aGlzLnR5cGV8fCJjZW50cmlwZXRhbCI9PT10aGlzLnR5cGV8fCJjaG9yZGFsIj09PXRoaXMudHlwZSl7dmFyIGg9ImNob3JkYWwiPT09dGhpcy50eXBlPy41Oi4yNSxjPU1hdGgucG93KGUuZGlzdGFuY2VUb1NxdWFyZWQoZiksaCksZD1NYXRoLnBvdyhmLmRpc3RhbmNlVG9TcXVhcmVkKGcpLGgpLGg9TWF0aC5wb3coZy5kaXN0YW5jZVRvU3F1YXJlZChiKSxoKTsxRS00PmQmJihkPTEpOzFFLTQ+YyYmKGM9ZCk7MUUtND5oJiYoaD1kKTt2ZS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oZS54LGYueCxnLngsYi54LGMsZCxoKTt3ZS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oZS55LGYueSxnLnksYi55LGMsZCxoKTt4ZS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oZS56LApmLnosZy56LGIueixjLGQsaCl9ZWxzZSJjYXRtdWxscm9tIj09PXRoaXMudHlwZSYmKGM9dm9pZCAwIT09dGhpcy50ZW5zaW9uP3RoaXMudGVuc2lvbjouNSx2ZS5pbml0Q2F0bXVsbFJvbShlLngsZi54LGcueCxiLngsYyksd2UuaW5pdENhdG11bGxSb20oZS55LGYueSxnLnksYi55LGMpLHhlLmluaXRDYXRtdWxsUm9tKGUueixmLnosZy56LGIueixjKSk7cmV0dXJuIG5ldyBwKHZlLmNhbGMoYSksd2UuY2FsYyhhKSx4ZS5jYWxjKGEpKX07ZWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTtlZC5wcm90b3R5cGUuY29uc3RydWN0b3I9ZWQ7ZWQucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudjAsYz10aGlzLnYxLGQ9dGhpcy52MixlPXRoaXMudjM7cmV0dXJuIG5ldyBwKHliKGEsYi54LGMueCxkLngsZS54KSx5YihhLGIueSxjLnksZC55LGUueSkseWIoYSxiLnosYy56LGQueixlLnopKX07ZmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTsKZmQucHJvdG90eXBlLmNvbnN0cnVjdG9yPWZkO2ZkLnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnYwLGM9dGhpcy52MSxkPXRoaXMudjI7cmV0dXJuIG5ldyBwKHhiKGEsYi54LGMueCxkLngpLHhiKGEsYi55LGMueSxkLnkpLHhiKGEsYi56LGMueixkLnopKX07Z2QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobmEucHJvdG90eXBlKTtnZC5wcm90b3R5cGUuY29uc3RydWN0b3I9Z2Q7Z2QucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGEpe2lmKDE9PT1hKXJldHVybiB0aGlzLnYyLmNsb25lKCk7dmFyIGI9bmV3IHA7Yi5zdWJWZWN0b3JzKHRoaXMudjIsdGhpcy52MSk7Yi5tdWx0aXBseVNjYWxhcihhKTtiLmFkZCh0aGlzLnYxKTtyZXR1cm4gYn07TmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWGEucHJvdG90eXBlKTtOZC5wcm90b3R5cGUuY29uc3RydWN0b3I9TmQ7bmEuY3JlYXRlPWZ1bmN0aW9uKGEsYil7Y29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKTsKYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuYS5wcm90b3R5cGUpO2EucHJvdG90eXBlLmNvbnN0cnVjdG9yPWE7YS5wcm90b3R5cGUuZ2V0UG9pbnQ9YjtyZXR1cm4gYX07ZGYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSmEucHJvdG90eXBlKTtlZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShKYS5wcm90b3R5cGUpO3RlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEphLnByb3RvdHlwZSk7T2JqZWN0LmFzc2lnbih0ZS5wcm90b3R5cGUse2luaXRGcm9tQXJyYXk6ZnVuY3Rpb24oYSl7Y29uc29sZS5lcnJvcigiVEhSRUUuU3BsaW5lOiAuaW5pdEZyb21BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGdldENvbnRyb2xQb2ludHNBcnJheTpmdW5jdGlvbihhKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TcGxpbmU6IC5nZXRDb250cm9sUG9pbnRzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyZXBhcmFtZXRyaXplQnlBcmNMZW5ndGg6ZnVuY3Rpb24oYSl7Y29uc29sZS5lcnJvcigiVEhSRUUuU3BsaW5lOiAucmVwYXJhbWV0cml6ZUJ5QXJjTGVuZ3RoKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX19KTsKYmQucHJvdG90eXBlLnNldENvbG9ycz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkdyaWRIZWxwZXI6IHNldENvbG9ycygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHBhc3MgdGhlbSBpbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZC4iKX07T2JqZWN0LmFzc2lnbihpZC5wcm90b3R5cGUse2NlbnRlcjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKTtyZXR1cm4gdGhpcy5nZXRDZW50ZXIoYSl9LGVtcHR5OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIik7cmV0dXJuIHRoaXMuaXNFbXB0eSgpfSxpc0ludGVyc2VjdGlvbkJveDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKTsKcmV0dXJuIHRoaXMuaW50ZXJzZWN0c0JveChhKX0sc2l6ZTpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpO3JldHVybiB0aGlzLmdldFNpemUoYSl9fSk7T2JqZWN0LmFzc2lnbihUYS5wcm90b3R5cGUse2NlbnRlcjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKTtyZXR1cm4gdGhpcy5nZXRDZW50ZXIoYSl9LGVtcHR5OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIik7cmV0dXJuIHRoaXMuaXNFbXB0eSgpfSxpc0ludGVyc2VjdGlvbkJveDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKTsKcmV0dXJuIHRoaXMuaW50ZXJzZWN0c0JveChhKX0saXNJbnRlcnNlY3Rpb25TcGhlcmU6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIik7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShhKX0sc2l6ZTpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpO3JldHVybiB0aGlzLmdldFNpemUoYSl9fSk7SGIucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIik7cmV0dXJuIHRoaXMuZ2V0Q2VudGVyKGEpfTtZLnJhbmRvbTE2PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRoLnJhbmRvbTE2KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIE1hdGgucmFuZG9tKCkgaW5zdGVhZC4iKTsKcmV0dXJuIE1hdGgucmFuZG9tKCl9O09iamVjdC5hc3NpZ24oS2EucHJvdG90eXBlLHtmbGF0dGVuVG9BcnJheU9mZnNldDpmdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpcy50b0FycmF5KGEsYil9LG11bHRpcGx5VmVjdG9yMzpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKTtyZXR1cm4gYS5hcHBseU1hdHJpeDModGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVuYW1lZC4gVXNlIG1hdHJpeC5hcHBseVRvVmVjdG9yM0FycmF5KCBhcnJheSApIGluc3RlYWQuIik7CnJldHVybiB0aGlzLmFwcGx5VG9WZWN0b3IzQXJyYXkoYSl9LGFwcGx5VG9CdWZmZXI6ZnVuY3Rpb24oYSxiLGMpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXIoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4LmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSApIGluc3RlYWQuIik7cmV0dXJuIHRoaXMuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZShhKX0sYXBwbHlUb1ZlY3RvcjNBcnJheTpmdW5jdGlvbihhLGIsYyl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfX0pO09iamVjdC5hc3NpZ24oSi5wcm90b3R5cGUse2V4dHJhY3RQb3NpdGlvbjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5leHRyYWN0UG9zaXRpb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5jb3B5UG9zaXRpb24oKS4iKTtyZXR1cm4gdGhpcy5jb3B5UG9zaXRpb24oYSl9LApmbGF0dGVuVG9BcnJheU9mZnNldDpmdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpcy50b0FycmF5KGEsYil9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuIGZ1bmN0aW9uKCl7dm9pZCAwPT09YSYmKGE9bmV3IHApO2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpO3JldHVybiBhLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywzKX19KCksc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKS4iKTsKcmV0dXJuIHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oYSl9LG11bHRpcGx5VG9BcnJheTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VG9BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LG11bHRpcGx5VmVjdG9yMzpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKTtyZXR1cm4gYS5hcHBseU1hdHJpeDQodGhpcyl9LG11bHRpcGx5VmVjdG9yNDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKTtyZXR1cm4gYS5hcHBseU1hdHJpeDQodGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVuYW1lZC4gVXNlIG1hdHJpeC5hcHBseVRvVmVjdG9yM0FycmF5KCBhcnJheSApIGluc3RlYWQuIik7CnJldHVybiB0aGlzLmFwcGx5VG9WZWN0b3IzQXJyYXkoYSl9LHJvdGF0ZUF4aXM6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnRyYW5zZm9ybURpcmVjdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKTthLnRyYW5zZm9ybURpcmVjdGlvbih0aGlzKX0sY3Jvc3NWZWN0b3I6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKTtyZXR1cm4gYS5hcHBseU1hdHJpeDQodGhpcyl9LHRyYW5zbGF0ZTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyb3RhdGVYOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSwKcm90YXRlWTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVZKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scm90YXRlWjpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVaKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scm90YXRlQnlBeGlzOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUJ5QXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFwcGx5VG9CdWZmZXI6ZnVuY3Rpb24oYSxiLGMpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9CdWZmZXIoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4LmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSApIGluc3RlYWQuIik7cmV0dXJuIHRoaXMuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZShhKX0sYXBwbHlUb1ZlY3RvcjNBcnJheTpmdW5jdGlvbihhLGIsYyl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSwKbWFrZUZydXN0dW06ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VGcnVzdHVtKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5tYWtlUGVyc3BlY3RpdmUoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpcy5tYWtlUGVyc3BlY3RpdmUoYSxiLGQsYyxlLGYpfX0pO3dhLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkxpbmU9ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmlzSW50ZXJzZWN0aW9uTGluZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNMaW5lKCkuIik7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c0xpbmUoYSl9O3FhLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKTsKcmV0dXJuIGEuYXBwbHlRdWF0ZXJuaW9uKHRoaXMpfTtPYmplY3QuYXNzaWduKGhiLnByb3RvdHlwZSx7aXNJbnRlcnNlY3Rpb25Cb3g6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKTtyZXR1cm4gdGhpcy5pbnRlcnNlY3RzQm94KGEpfSxpc0ludGVyc2VjdGlvblBsYW5lOmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpO3JldHVybiB0aGlzLmludGVyc2VjdHNQbGFuZShhKX0saXNJbnRlcnNlY3Rpb25TcGhlcmU6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKTtyZXR1cm4gdGhpcy5pbnRlcnNlY3RzU3BoZXJlKGEpfX0pOwpPYmplY3QuYXNzaWduKEFiLnByb3RvdHlwZSx7ZXh0cnVkZTpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgZGIodGhpcyxhKX0sbWFrZUdlb21ldHJ5OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBaYih0aGlzLGEpfX0pO09iamVjdC5hc3NpZ24oRC5wcm90b3R5cGUse2Zyb21BdHRyaWJ1dGU6ZnVuY3Rpb24oYSxiLGMpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpO3JldHVybiB0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxiLGMpfX0pO09iamVjdC5hc3NpZ24ocC5wcm90b3R5cGUsCntzZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLiIpfSxzZXRFdWxlckZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVF1YXRlcm5pb24oKSBpbnN0ZWFkLiIpfSxnZXRQb3NpdGlvbkZyb21NYXRyaXg6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuIik7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGEpfSxnZXRTY2FsZUZyb21NYXRyaXg6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0U2NhbGVGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFNjYWxlKCkuIik7CnJldHVybiB0aGlzLnNldEZyb21NYXRyaXhTY2FsZShhKX0sZ2V0Q29sdW1uRnJvbU1hdHJpeDpmdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldENvbHVtbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4Q29sdW1uKCkuIik7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbihiLGEpfSxhcHBseVByb2plY3Rpb246ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlQcm9qZWN0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5hcHBseU1hdHJpeDQoIG0gKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLmFwcGx5TWF0cml4NChhKX0sZnJvbUF0dHJpYnV0ZTpmdW5jdGlvbihhLGIsYyl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7cmV0dXJuIHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLApiLGMpfX0pO09iamVjdC5hc3NpZ24oZ2EucHJvdG90eXBlLHtmcm9tQXR0cmlidXRlOmZ1bmN0aW9uKGEsYixjKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3I0OiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKTtyZXR1cm4gdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKGEsYixjKX19KTtNLnByb3RvdHlwZS5jb21wdXRlVGFuZ2VudHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07T2JqZWN0LmFzc2lnbihCLnByb3RvdHlwZSx7Z2V0Q2hpbGRCeU5hbWU6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldENoaWxkQnlOYW1lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0T2JqZWN0QnlOYW1lKCkuIik7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlOYW1lKGEpfSxyZW5kZXJEZXB0aDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLiIpfSwKdHJhbnNsYXRlOmZ1bmN0aW9uKGEsYil7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIGluc3RlYWQuIik7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKGIsYSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQi5wcm90b3R5cGUse2V1bGVyT3JkZXI6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIik7cmV0dXJuIHRoaXMucm90YXRpb24ub3JkZXJ9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpO3RoaXMucm90YXRpb24ub3JkZXI9YX19LHVzZVF1YXRlcm5pb246e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9LApzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhCYy5wcm90b3R5cGUse29iamVjdHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTE9EOiAub2JqZWN0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5sZXZlbHMuIik7cmV0dXJuIHRoaXMubGV2ZWxzfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2MucHJvdG90eXBlLCJ1c2VWZXJ0ZXhUZXh0dXJlIix7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogdXNlVmVydGV4VGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlNrZWxldG9uOiB1c2VWZXJ0ZXhUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7Ck9iamVjdC5kZWZpbmVQcm9wZXJ0eShuYS5wcm90b3R5cGUsIl9fYXJjTGVuZ3RoRGl2aXNpb25zIix7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLl9fYXJjTGVuZ3RoRGl2aXNpb25zIGlzIG5vdyAuYXJjTGVuZ3RoRGl2aXNpb25zLiIpO3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9uc30sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuQ3VydmU6IC5fX2FyY0xlbmd0aERpdmlzaW9ucyBpcyBub3cgLmFyY0xlbmd0aERpdmlzaW9ucy4iKTt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz1hfX0pO3hhLnByb3RvdHlwZS5zZXRMZW5zPWZ1bmN0aW9uKGEsYil7Y29uc29sZS53YXJuKCJUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYS5zZXRMZW5zIGlzIGRlcHJlY2F0ZWQuIFVzZSAuc2V0Rm9jYWxMZW5ndGggYW5kIC5maWxtR2F1Z2UgZm9yIGEgcGhvdG9ncmFwaGljIHNldHVwLiIpO3ZvaWQgMCE9PWImJih0aGlzLmZpbG1HYXVnZT1iKTt0aGlzLnNldEZvY2FsTGVuZ3RoKGEpfTsKT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobWEucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpO3RoaXMuc2hhZG93LmNhbWVyYS5mb3Y9YX19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKTt0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1hfX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpOwp0aGlzLnNoYWRvdy5jYW1lcmEucmlnaHQ9YX19LHNoYWRvd0NhbWVyYVRvcDp7c2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFUb3AgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnRvcC4iKTt0aGlzLnNoYWRvdy5jYW1lcmEudG9wPWF9fSxzaGFkb3dDYW1lcmFCb3R0b206e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhQm90dG9tIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5ib3R0b20uIik7dGhpcy5zaGFkb3cuY2FtZXJhLmJvdHRvbT1hfX0sc2hhZG93Q2FtZXJhTmVhcjp7c2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFOZWFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5uZWFyLiIpO3RoaXMuc2hhZG93LmNhbWVyYS5uZWFyPWF9fSxzaGFkb3dDYW1lcmFGYXI6e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhRmFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5mYXIuIik7CnRoaXMuc2hhZG93LmNhbWVyYS5mYXI9YX19LHNoYWRvd0NhbWVyYVZpc2libGU6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFWaXNpYmxlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuQ2FtZXJhSGVscGVyKCBsaWdodC5zaGFkb3cuY2FtZXJhICkgaW5zdGVhZC4iKX19LHNoYWRvd0JpYXM6e3NldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93QmlhcyBpcyBub3cgLnNoYWRvdy5iaWFzLiIpO3RoaXMuc2hhZG93LmJpYXM9YX19LHNoYWRvd0RhcmtuZXNzOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93RGFya25lc3MgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHNoYWRvd01hcFdpZHRoOntzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd01hcFdpZHRoIGlzIG5vdyAuc2hhZG93Lm1hcFNpemUud2lkdGguIik7CnRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9YX19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIik7dGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9YX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTC5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5sZW5ndGggaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5jb3VudCBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLmFycmF5Lmxlbmd0aH19fSk7T2JqZWN0LmFzc2lnbihJLnByb3RvdHlwZSx7YWRkSW5kZXg6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEluZGV4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0SW5kZXgoKS4iKTt0aGlzLnNldEluZGV4KGEpfSxhZGREcmF3Q2FsbDpmdW5jdGlvbihhLApiLGMpe3ZvaWQgMCE9PWMmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKTtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIik7dGhpcy5hZGRHcm91cChhLGIpfSxjbGVhckRyYXdDYWxsczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jbGVhckRyYXdDYWxscygpIGlzIG5vdyAuY2xlYXJHcm91cHMoKS4iKTt0aGlzLmNsZWFyR3JvdXBzKCl9LGNvbXB1dGVUYW5nZW50czpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlVGFuZ2VudHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxjb21wdXRlT2Zmc2V0czpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlT2Zmc2V0cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7Ck9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEkucHJvdG90eXBlLHtkcmF3Y2FsbHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuZHJhd2NhbGxzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKTtyZXR1cm4gdGhpcy5ncm91cHN9fSxvZmZzZXRzOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAub2Zmc2V0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIik7cmV0dXJuIHRoaXMuZ3JvdXBzfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhKZC5wcm90b3R5cGUse2R5bmFtaWM6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLmR5bmFtaWMgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIil9fSxvblVwZGF0ZTp7dmFsdWU6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IC5vblVwZGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBvYmplY3Qub25CZWZvcmVSZW5kZXIoKSBpbnN0ZWFkLiIpOwpyZXR1cm4gdGhpc319fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWi5wcm90b3R5cGUse3dyYXBBcm91bmQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9fSx3cmFwUkdCOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpO3JldHVybiBuZXcgSH19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGEucHJvdG90eXBlLHttZXRhbDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbDogLm1ldGFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCBpbnN0ZWFkLiIpO3JldHVybiExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsOiAubWV0YWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsIGluc3RlYWQiKX19fSk7Ck9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEVhLnByb3RvdHlwZSx7ZGVyaXZhdGl2ZXM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzfSxzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS4gU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKTt0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXM9YX19fSk7T2JqZWN0LmFzc2lnbihYZC5wcm90b3R5cGUse2dldEN1cnJlbnRSZW5kZXJUYXJnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4iKTtyZXR1cm4gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKX0sCnN1cHBvcnRzRmxvYXRUZXh0dXJlczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKX0sc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpfSxzdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXM6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpOwpyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIil9LHN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICkuIik7cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9LHN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQzpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnICkuIik7cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfSwKc3VwcG9ydHNCbGVuZE1pbk1heDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQmxlbmRNaW5NYXgoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnRVhUX2JsZW5kX21pbm1heCcgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfSxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpO3JldHVybiB0aGlzLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlc30sc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0luc3RhbmNlZEFycmF5cygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyApLiIpOwpyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpfSxlbmFibGVTY2lzc29yVGVzdDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKTt0aGlzLnNldFNjaXNzb3JUZXN0KGEpfSxpbml0TWF0ZXJpYWw6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5pbml0TWF0ZXJpYWwoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxhZGRQcmVQbHVnaW46ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQcmVQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxhZGRQb3N0UGx1Z2luOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHVwZGF0ZVNoYWRvd01hcDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnVwZGF0ZVNoYWRvd01hcCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7Ck9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFhkLnByb3RvdHlwZSx7c2hhZG93TWFwRW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLmVuYWJsZWR9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuIik7dGhpcy5zaGFkb3dNYXAuZW5hYmxlZD1hfX0sc2hhZG93TWFwVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLnR5cGV9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuIik7dGhpcy5zaGFkb3dNYXAudHlwZT1hfX0sc2hhZG93TWFwQ3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC5jdWxsRmFjZX0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGlzIG5vdyAuc2hhZG93TWFwLmN1bGxGYWNlLiIpOwp0aGlzLnNoYWRvd01hcC5jdWxsRmFjZT1hfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhKZS5wcm90b3R5cGUse2N1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJSZXZlcnNlU2lkZWQ/MjoxfSxzZXQ6ZnVuY3Rpb24oYSl7YT0xIT09YTtjb25zb2xlLndhcm4oIldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaXMgZGVwcmVjYXRlZC4gU2V0IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIHRvICIrYSsiLiIpO3RoaXMucmVuZGVyUmV2ZXJzZVNpZGVkPWF9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERiLnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIik7cmV0dXJuIHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIik7CnRoaXMudGV4dHVyZS53cmFwUz1hfX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIik7cmV0dXJuIHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIik7dGhpcy50ZXh0dXJlLndyYXBUPWF9fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKTtyZXR1cm4gdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKTt0aGlzLnRleHR1cmUubWFnRmlsdGVyPQphfX0sbWluRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIik7cmV0dXJuIHRoaXMudGV4dHVyZS5taW5GaWx0ZXJ9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIik7dGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1hfX0sYW5pc290cm9weTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIik7cmV0dXJuIHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5fSxzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIik7dGhpcy50ZXh0dXJlLmFuaXNvdHJvcHk9CmF9fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKTtyZXR1cm4gdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKTt0aGlzLnRleHR1cmUub2Zmc2V0PWF9fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKTtyZXR1cm4gdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKTt0aGlzLnRleHR1cmUucmVwZWF0PWF9fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKTsKcmV0dXJuIHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIik7dGhpcy50ZXh0dXJlLmZvcm1hdD1hfX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIik7cmV0dXJuIHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIik7dGhpcy50ZXh0dXJlLnR5cGU9YX19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpO3JldHVybiB0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSwKc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKTt0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPWF9fX0pO2pjLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IC5sb2FkIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5BdWRpb0xvYWRlciBpbnN0ZWFkLiIpO3ZhciBiPXRoaXM7KG5ldyBmZSkubG9hZChhLGZ1bmN0aW9uKGEpe2Iuc2V0QnVmZmVyKGEpfSk7cmV0dXJuIHRoaXN9O2tlLnByb3RvdHlwZS5nZXREYXRhPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpb0FuYWx5c2VyOiAuZ2V0RGF0YSgpIGlzIG5vdyAuZ2V0RnJlcXVlbmN5RGF0YSgpLiIpO3JldHVybiB0aGlzLmdldEZyZXF1ZW5jeURhdGEoKX07bC5XZWJHTFJlbmRlclRhcmdldEN1YmU9RWI7bC5XZWJHTFJlbmRlclRhcmdldD0KRGI7bC5XZWJHTFJlbmRlcmVyPVhkO2wuU2hhZGVyTGliPWFiO2wuVW5pZm9ybXNMaWI9VjtsLlVuaWZvcm1zVXRpbHM9SGE7bC5TaGFkZXJDaHVuaz1VO2wuRm9nRXhwMj1LYjtsLkZvZz1MYjtsLlNjZW5lPW1kO2wuTGVuc0ZsYXJlPVlkO2wuU3ByaXRlPUFjO2wuTE9EPUJjO2wuU2tpbm5lZE1lc2g9b2Q7bC5Ta2VsZXRvbj1DYztsLkJvbmU9bmQ7bC5NZXNoPUNhO2wuTGluZVNlZ21lbnRzPWRhO2wuTGluZUxvb3A9cGQ7bC5MaW5lPXlhO2wuUG9pbnRzPU1iO2wuR3JvdXA9RGM7bC5WaWRlb1RleHR1cmU9cWQ7bC5EYXRhVGV4dHVyZT1lYjtsLkNvbXByZXNzZWRUZXh0dXJlPU5iO2wuQ3ViZVRleHR1cmU9WmE7bC5DYW52YXNUZXh0dXJlPXJkO2wuRGVwdGhUZXh0dXJlPUVjO2wuVGV4dHVyZT1YO2wuQ29tcHJlc3NlZFRleHR1cmVMb2FkZXI9UWU7bC5EYXRhVGV4dHVyZUxvYWRlcj0kZDtsLkN1YmVUZXh0dXJlTG9hZGVyPWFlO2wuVGV4dHVyZUxvYWRlcj1zZDtsLk9iamVjdExvYWRlcj0KUmU7bC5NYXRlcmlhbExvYWRlcj1IZDtsLkJ1ZmZlckdlb21ldHJ5TG9hZGVyPWJlO2wuRGVmYXVsdExvYWRpbmdNYW5hZ2VyPUFhO2wuTG9hZGluZ01hbmFnZXI9WmQ7bC5KU09OTG9hZGVyPWNlO2wuSW1hZ2VMb2FkZXI9VmM7bC5Gb250TG9hZGVyPVRlO2wuRmlsZUxvYWRlcj11YTtsLkxvYWRlcj1nYztsLkNhY2hlPWhkO2wuQXVkaW9Mb2FkZXI9ZmU7bC5TcG90TGlnaHRTaGFkb3c9dWQ7bC5TcG90TGlnaHQ9dmQ7bC5Qb2ludExpZ2h0PXdkO2wuUmVjdEFyZWFMaWdodD1BZDtsLkhlbWlzcGhlcmVMaWdodD10ZDtsLkRpcmVjdGlvbmFsTGlnaHRTaGFkb3c9eGQ7bC5EaXJlY3Rpb25hbExpZ2h0PXlkO2wuQW1iaWVudExpZ2h0PXpkO2wuTGlnaHRTaGFkb3c9dWI7bC5MaWdodD1tYTtsLlN0ZXJlb0NhbWVyYT1VZTtsLlBlcnNwZWN0aXZlQ2FtZXJhPXhhO2wuT3J0aG9ncmFwaGljQ2FtZXJhPUpiO2wuQ3ViZUNhbWVyYT1JZDtsLkFycmF5Q2FtZXJhPWdlO2wuQ2FtZXJhPU9hO2wuQXVkaW9MaXN0ZW5lcj0KaGU7bC5Qb3NpdGlvbmFsQXVkaW89amU7bC5BdWRpb0NvbnRleHQ9aWU7bC5BdWRpb0FuYWx5c2VyPWtlO2wuQXVkaW89amM7bC5WZWN0b3JLZXlmcmFtZVRyYWNrPWVjO2wuU3RyaW5nS2V5ZnJhbWVUcmFjaz1FZDtsLlF1YXRlcm5pb25LZXlmcmFtZVRyYWNrPVhjO2wuTnVtYmVyS2V5ZnJhbWVUcmFjaz1mYztsLkNvbG9yS2V5ZnJhbWVUcmFjaz1HZDtsLkJvb2xlYW5LZXlmcmFtZVRyYWNrPUZkO2wuUHJvcGVydHlNaXhlcj1sZTtsLlByb3BlcnR5QmluZGluZz1vYTtsLktleWZyYW1lVHJhY2s9d2I7bC5BbmltYXRpb25VdGlscz12YTtsLkFuaW1hdGlvbk9iamVjdEdyb3VwPVdlO2wuQW5pbWF0aW9uTWl4ZXI9WWU7bC5BbmltYXRpb25DbGlwPUJhO2wuVW5pZm9ybT1KZDtsLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PW1lO2wuQnVmZmVyR2VvbWV0cnk9STtsLkdlb21ldHJ5SWRDb3VudD1mdW5jdGlvbigpe3JldHVybiBUZCsrfTtsLkdlb21ldHJ5PU07bC5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT0KbmU7bC5JbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj1vZTtsLkludGVybGVhdmVkQnVmZmVyPWtjO2wuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPXBlO2wuRmFjZTM9VmE7bC5PYmplY3QzRD1CO2wuUmF5Y2FzdGVyPVplO2wuTGF5ZXJzPVJkO2wuRXZlbnREaXNwYXRjaGVyPXNhO2wuQ2xvY2s9YWY7bC5RdWF0ZXJuaW9uTGluZWFySW50ZXJwb2xhbnQ9RGQ7bC5MaW5lYXJJbnRlcnBvbGFudD1XYztsLkRpc2NyZXRlSW50ZXJwb2xhbnQ9Q2Q7bC5DdWJpY0ludGVycG9sYW50PUJkO2wuSW50ZXJwb2xhbnQ9RGE7bC5UcmlhbmdsZT1VYTtsLk1hdGg9WTtsLlNwaGVyaWNhbD1iZjtsLkN5bGluZHJpY2FsPWNmO2wuUGxhbmU9d2E7bC5GcnVzdHVtPWpkO2wuU3BoZXJlPUdhO2wuUmF5PWhiO2wuTWF0cml4ND1KO2wuTWF0cml4Mz1LYTtsLkJveDM9VGE7bC5Cb3gyPWlkO2wuTGluZTM9SGI7bC5FdWxlcj1iYjtsLlZlY3RvcjQ9Z2E7bC5WZWN0b3IzPXA7bC5WZWN0b3IyPUQ7bC5RdWF0ZXJuaW9uPQpxYTtsLkNvbG9yPUg7bC5Nb3JwaEJsZW5kTWVzaD1yYTtsLkltbWVkaWF0ZVJlbmRlck9iamVjdD0kYztsLlZlcnRleE5vcm1hbHNIZWxwZXI9YWQ7bC5TcG90TGlnaHRIZWxwZXI9bGM7bC5Ta2VsZXRvbkhlbHBlcj1tYztsLlBvaW50TGlnaHRIZWxwZXI9bmM7bC5SZWN0QXJlYUxpZ2h0SGVscGVyPW9jO2wuSGVtaXNwaGVyZUxpZ2h0SGVscGVyPXBjO2wuR3JpZEhlbHBlcj1iZDtsLlBvbGFyR3JpZEhlbHBlcj1LZDtsLkZhY2VOb3JtYWxzSGVscGVyPWNkO2wuRGlyZWN0aW9uYWxMaWdodEhlbHBlcj1xYztsLkNhbWVyYUhlbHBlcj1kZDtsLkJveEhlbHBlcj1CYjtsLkFycm93SGVscGVyPUNiO2wuQXhpc0hlbHBlcj1NZDtsLkNhdG11bGxSb21DdXJ2ZTM9SmE7bC5DdWJpY0JlemllckN1cnZlMz1lZDtsLlF1YWRyYXRpY0JlemllckN1cnZlMz1mZDtsLkxpbmVDdXJ2ZTM9Z2Q7bC5BcmNDdXJ2ZT1OZDtsLkVsbGlwc2VDdXJ2ZT1YYTtsLlNwbGluZUN1cnZlPXpiO2wuQ3ViaWNCZXppZXJDdXJ2ZT0KaGM7bC5RdWFkcmF0aWNCZXppZXJDdXJ2ZT1pYztsLkxpbmVDdXJ2ZT1TYTtsLlNoYXBlPUFiO2wuUGF0aD1aYztsLlNoYXBlUGF0aD1kZTtsLkZvbnQ9ZWU7bC5DdXJ2ZVBhdGg9WWM7bC5DdXJ2ZT1uYTtsLlNoYXBlVXRpbHM9emE7bC5TY2VuZVV0aWxzPXtjcmVhdGVNdWx0aU1hdGVyaWFsT2JqZWN0OmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPW5ldyBEYyxkPTAsZT1iLmxlbmd0aDtkPGU7ZCsrKWMuYWRkKG5ldyBDYShhLGJbZF0pKTtyZXR1cm4gY30sZGV0YWNoOmZ1bmN0aW9uKGEsYixjKXthLmFwcGx5TWF0cml4KGIubWF0cml4V29ybGQpO2IucmVtb3ZlKGEpO2MuYWRkKGEpfSxhdHRhY2g6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPW5ldyBKO2QuZ2V0SW52ZXJzZShjLm1hdHJpeFdvcmxkKTthLmFwcGx5TWF0cml4KGQpO2IucmVtb3ZlKGEpO2MuYWRkKGEpfX07bC5XaXJlZnJhbWVHZW9tZXRyeT1PYjtsLlBhcmFtZXRyaWNHZW9tZXRyeT1GYztsLlBhcmFtZXRyaWNCdWZmZXJHZW9tZXRyeT0KUGI7bC5UZXRyYWhlZHJvbkdlb21ldHJ5PUhjO2wuVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeT1RYjtsLk9jdGFoZWRyb25HZW9tZXRyeT1JYztsLk9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeT1tYjtsLkljb3NhaGVkcm9uR2VvbWV0cnk9SmM7bC5JY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5PVJiO2wuRG9kZWNhaGVkcm9uR2VvbWV0cnk9S2M7bC5Eb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeT1TYjtsLlBvbHloZWRyb25HZW9tZXRyeT1HYztsLlBvbHloZWRyb25CdWZmZXJHZW9tZXRyeT1pYTtsLlR1YmVHZW9tZXRyeT1MYztsLlR1YmVCdWZmZXJHZW9tZXRyeT1UYjtsLlRvcnVzS25vdEdlb21ldHJ5PU1jO2wuVG9ydXNLbm90QnVmZmVyR2VvbWV0cnk9VWI7bC5Ub3J1c0dlb21ldHJ5PU5jO2wuVG9ydXNCdWZmZXJHZW9tZXRyeT1WYjtsLlRleHRHZW9tZXRyeT1PYztsLlRleHRCdWZmZXJHZW9tZXRyeT1XYjtsLlNwaGVyZUdlb21ldHJ5PVBjO2wuU3BoZXJlQnVmZmVyR2VvbWV0cnk9Cm5iO2wuUmluZ0dlb21ldHJ5PVFjO2wuUmluZ0J1ZmZlckdlb21ldHJ5PVhiO2wuUGxhbmVHZW9tZXRyeT14YztsLlBsYW5lQnVmZmVyR2VvbWV0cnk9bGI7bC5MYXRoZUdlb21ldHJ5PVJjO2wuTGF0aGVCdWZmZXJHZW9tZXRyeT1ZYjtsLlNoYXBlR2VvbWV0cnk9WmI7bC5TaGFwZUJ1ZmZlckdlb21ldHJ5PSRiO2wuRXh0cnVkZUdlb21ldHJ5PWRiO2wuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5PUZhO2wuRWRnZXNHZW9tZXRyeT1hYztsLkNvbmVHZW9tZXRyeT1TYztsLkNvbmVCdWZmZXJHZW9tZXRyeT1UYztsLkN5bGluZGVyR2VvbWV0cnk9b2I7bC5DeWxpbmRlckJ1ZmZlckdlb21ldHJ5PVdhO2wuQ2lyY2xlR2VvbWV0cnk9VWM7bC5DaXJjbGVCdWZmZXJHZW9tZXRyeT1iYztsLkJveEdlb21ldHJ5PUliO2wuQm94QnVmZmVyR2VvbWV0cnk9a2I7bC5TaGFkb3dNYXRlcmlhbD1jYztsLlNwcml0ZU1hdGVyaWFsPWNiO2wuUmF3U2hhZGVyTWF0ZXJpYWw9ZGM7bC5TaGFkZXJNYXRlcmlhbD0KRWE7bC5Qb2ludHNNYXRlcmlhbD1MYTtsLk1lc2hQaHlzaWNhbE1hdGVyaWFsPXBiO2wuTWVzaFN0YW5kYXJkTWF0ZXJpYWw9UmE7bC5NZXNoUGhvbmdNYXRlcmlhbD10YTtsLk1lc2hUb29uTWF0ZXJpYWw9cWI7bC5NZXNoTm9ybWFsTWF0ZXJpYWw9cmI7bC5NZXNoTGFtYmVydE1hdGVyaWFsPXNiO2wuTWVzaERlcHRoTWF0ZXJpYWw9JGE7bC5NZXNoQmFzaWNNYXRlcmlhbD1OYTtsLkxpbmVEYXNoZWRNYXRlcmlhbD10YjtsLkxpbmVCYXNpY01hdGVyaWFsPWhhO2wuTWF0ZXJpYWw9WjtsLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGU9d2M7bC5GbG9hdDMyQnVmZmVyQXR0cmlidXRlPUM7bC5VaW50MzJCdWZmZXJBdHRyaWJ1dGU9amI7bC5JbnQzMkJ1ZmZlckF0dHJpYnV0ZT12YztsLlVpbnQxNkJ1ZmZlckF0dHJpYnV0ZT1pYjtsLkludDE2QnVmZmVyQXR0cmlidXRlPXVjO2wuVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlPXRjO2wuVWludDhCdWZmZXJBdHRyaWJ1dGU9c2M7bC5JbnQ4QnVmZmVyQXR0cmlidXRlPQpyYztsLkJ1ZmZlckF0dHJpYnV0ZT1MO2wuUkVWSVNJT049Ijg1IjtsLk1PVVNFPXtMRUZUOjAsTUlERExFOjEsUklHSFQ6Mn07bC5DdWxsRmFjZU5vbmU9MDtsLkN1bGxGYWNlQmFjaz0xO2wuQ3VsbEZhY2VGcm9udD0yO2wuQ3VsbEZhY2VGcm9udEJhY2s9MztsLkZyb250RmFjZURpcmVjdGlvbkNXPTA7bC5Gcm9udEZhY2VEaXJlY3Rpb25DQ1c9MTtsLkJhc2ljU2hhZG93TWFwPTA7bC5QQ0ZTaGFkb3dNYXA9MTtsLlBDRlNvZnRTaGFkb3dNYXA9MjtsLkZyb250U2lkZT0wO2wuQmFja1NpZGU9MTtsLkRvdWJsZVNpZGU9MjtsLkZsYXRTaGFkaW5nPTE7bC5TbW9vdGhTaGFkaW5nPTI7bC5Ob0NvbG9ycz0wO2wuRmFjZUNvbG9ycz0xO2wuVmVydGV4Q29sb3JzPTI7bC5Ob0JsZW5kaW5nPTA7bC5Ob3JtYWxCbGVuZGluZz0xO2wuQWRkaXRpdmVCbGVuZGluZz0yO2wuU3VidHJhY3RpdmVCbGVuZGluZz0zO2wuTXVsdGlwbHlCbGVuZGluZz00O2wuQ3VzdG9tQmxlbmRpbmc9NTtsLkFkZEVxdWF0aW9uPQoxMDA7bC5TdWJ0cmFjdEVxdWF0aW9uPTEwMTtsLlJldmVyc2VTdWJ0cmFjdEVxdWF0aW9uPTEwMjtsLk1pbkVxdWF0aW9uPTEwMztsLk1heEVxdWF0aW9uPTEwNDtsLlplcm9GYWN0b3I9MjAwO2wuT25lRmFjdG9yPTIwMTtsLlNyY0NvbG9yRmFjdG9yPTIwMjtsLk9uZU1pbnVzU3JjQ29sb3JGYWN0b3I9MjAzO2wuU3JjQWxwaGFGYWN0b3I9MjA0O2wuT25lTWludXNTcmNBbHBoYUZhY3Rvcj0yMDU7bC5Ec3RBbHBoYUZhY3Rvcj0yMDY7bC5PbmVNaW51c0RzdEFscGhhRmFjdG9yPTIwNztsLkRzdENvbG9yRmFjdG9yPTIwODtsLk9uZU1pbnVzRHN0Q29sb3JGYWN0b3I9MjA5O2wuU3JjQWxwaGFTYXR1cmF0ZUZhY3Rvcj0yMTA7bC5OZXZlckRlcHRoPTA7bC5BbHdheXNEZXB0aD0xO2wuTGVzc0RlcHRoPTI7bC5MZXNzRXF1YWxEZXB0aD0zO2wuRXF1YWxEZXB0aD00O2wuR3JlYXRlckVxdWFsRGVwdGg9NTtsLkdyZWF0ZXJEZXB0aD02O2wuTm90RXF1YWxEZXB0aD03O2wuTXVsdGlwbHlPcGVyYXRpb249CjA7bC5NaXhPcGVyYXRpb249MTtsLkFkZE9wZXJhdGlvbj0yO2wuTm9Ub25lTWFwcGluZz0wO2wuTGluZWFyVG9uZU1hcHBpbmc9MTtsLlJlaW5oYXJkVG9uZU1hcHBpbmc9MjtsLlVuY2hhcnRlZDJUb25lTWFwcGluZz0zO2wuQ2luZW9uVG9uZU1hcHBpbmc9NDtsLlVWTWFwcGluZz0zMDA7bC5DdWJlUmVmbGVjdGlvbk1hcHBpbmc9MzAxO2wuQ3ViZVJlZnJhY3Rpb25NYXBwaW5nPTMwMjtsLkVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nPTMwMztsLkVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nPTMwNDtsLlNwaGVyaWNhbFJlZmxlY3Rpb25NYXBwaW5nPTMwNTtsLkN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nPTMwNjtsLkN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nPTMwNztsLlJlcGVhdFdyYXBwaW5nPTFFMztsLkNsYW1wVG9FZGdlV3JhcHBpbmc9MTAwMTtsLk1pcnJvcmVkUmVwZWF0V3JhcHBpbmc9MTAwMjtsLk5lYXJlc3RGaWx0ZXI9MTAwMztsLk5lYXJlc3RNaXBNYXBOZWFyZXN0RmlsdGVyPQoxMDA0O2wuTmVhcmVzdE1pcE1hcExpbmVhckZpbHRlcj0xMDA1O2wuTGluZWFyRmlsdGVyPTEwMDY7bC5MaW5lYXJNaXBNYXBOZWFyZXN0RmlsdGVyPTEwMDc7bC5MaW5lYXJNaXBNYXBMaW5lYXJGaWx0ZXI9MTAwODtsLlVuc2lnbmVkQnl0ZVR5cGU9MTAwOTtsLkJ5dGVUeXBlPTEwMTA7bC5TaG9ydFR5cGU9MTAxMTtsLlVuc2lnbmVkU2hvcnRUeXBlPTEwMTI7bC5JbnRUeXBlPTEwMTM7bC5VbnNpZ25lZEludFR5cGU9MTAxNDtsLkZsb2F0VHlwZT0xMDE1O2wuSGFsZkZsb2F0VHlwZT0xMDE2O2wuVW5zaWduZWRTaG9ydDQ0NDRUeXBlPTEwMTc7bC5VbnNpZ25lZFNob3J0NTU1MVR5cGU9MTAxODtsLlVuc2lnbmVkU2hvcnQ1NjVUeXBlPTEwMTk7bC5VbnNpZ25lZEludDI0OFR5cGU9MTAyMDtsLkFscGhhRm9ybWF0PTEwMjE7bC5SR0JGb3JtYXQ9MTAyMjtsLlJHQkFGb3JtYXQ9MTAyMztsLkx1bWluYW5jZUZvcm1hdD0xMDI0O2wuTHVtaW5hbmNlQWxwaGFGb3JtYXQ9MTAyNTtsLlJHQkVGb3JtYXQ9CjEwMjM7bC5EZXB0aEZvcm1hdD0xMDI2O2wuRGVwdGhTdGVuY2lsRm9ybWF0PTEwMjc7bC5SR0JfUzNUQ19EWFQxX0Zvcm1hdD0yMDAxO2wuUkdCQV9TM1RDX0RYVDFfRm9ybWF0PTIwMDI7bC5SR0JBX1MzVENfRFhUM19Gb3JtYXQ9MjAwMztsLlJHQkFfUzNUQ19EWFQ1X0Zvcm1hdD0yMDA0O2wuUkdCX1BWUlRDXzRCUFBWMV9Gb3JtYXQ9MjEwMDtsLlJHQl9QVlJUQ18yQlBQVjFfRm9ybWF0PTIxMDE7bC5SR0JBX1BWUlRDXzRCUFBWMV9Gb3JtYXQ9MjEwMjtsLlJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdD0yMTAzO2wuUkdCX0VUQzFfRm9ybWF0PTIxNTE7bC5Mb29wT25jZT0yMjAwO2wuTG9vcFJlcGVhdD0yMjAxO2wuTG9vcFBpbmdQb25nPTIyMDI7bC5JbnRlcnBvbGF0ZURpc2NyZXRlPTIzMDA7bC5JbnRlcnBvbGF0ZUxpbmVhcj0yMzAxO2wuSW50ZXJwb2xhdGVTbW9vdGg9MjMwMjtsLlplcm9DdXJ2YXR1cmVFbmRpbmc9MjQwMDtsLlplcm9TbG9wZUVuZGluZz0yNDAxO2wuV3JhcEFyb3VuZEVuZGluZz0KMjQwMjtsLlRyaWFuZ2xlc0RyYXdNb2RlPTA7bC5UcmlhbmdsZVN0cmlwRHJhd01vZGU9MTtsLlRyaWFuZ2xlRmFuRHJhd01vZGU9MjtsLkxpbmVhckVuY29kaW5nPTNFMztsLnNSR0JFbmNvZGluZz0zMDAxO2wuR2FtbWFFbmNvZGluZz0zMDA3O2wuUkdCRUVuY29kaW5nPTMwMDI7bC5Mb2dMdXZFbmNvZGluZz0zMDAzO2wuUkdCTTdFbmNvZGluZz0zMDA0O2wuUkdCTTE2RW5jb2Rpbmc9MzAwNTtsLlJHQkRFbmNvZGluZz0zMDA2O2wuQmFzaWNEZXB0aFBhY2tpbmc9MzIwMDtsLlJHQkFEZXB0aFBhY2tpbmc9MzIwMTtsLkN1YmVHZW9tZXRyeT1JYjtsLkZhY2U0PWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe2NvbnNvbGUud2FybigiVEhSRUUuRmFjZTQgaGFzIGJlZW4gcmVtb3ZlZC4gQSBUSFJFRS5GYWNlMyB3aWxsIGJlIGNyZWF0ZWQgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IFZhKGEsYixjLGUsZixnKX07bC5MaW5lU3RyaXA9MDtsLkxpbmVQaWVjZXM9MTtsLk1lc2hGYWNlTWF0ZXJpYWw9CmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuTWVzaEZhY2VNYXRlcmlhbCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYW4gQXJyYXkgaW5zdGVhZC4iKTtyZXR1cm4gYX07bC5NdWx0aU1hdGVyaWFsPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPVtdKTtjb25zb2xlLndhcm4oIlRIUkVFLk11bHRpTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuIik7YS5pc011bHRpTWF0ZXJpYWw9ITA7YS5tYXRlcmlhbHM9YTthLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGEuc2xpY2UoKX07cmV0dXJuIGF9O2wuUG9pbnRDbG91ZD1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuUG9pbnRDbG91ZCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50cy4iKTtyZXR1cm4gbmV3IE1iKGEsYil9O2wuUGFydGljbGU9ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZSBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlNwcml0ZS4iKTsKcmV0dXJuIG5ldyBBYyhhKX07bC5QYXJ0aWNsZVN5c3RlbT1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVTeXN0ZW0gaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHMuIik7cmV0dXJuIG5ldyBNYihhLGIpfTtsLlBvaW50Q2xvdWRNYXRlcmlhbD1mdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLlBvaW50Q2xvdWRNYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpO3JldHVybiBuZXcgTGEoYSl9O2wuUGFydGljbGVCYXNpY01hdGVyaWFsPWZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVCYXNpY01hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIik7cmV0dXJuIG5ldyBMYShhKX07bC5QYXJ0aWNsZVN5c3RlbU1hdGVyaWFsPWZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVTeXN0ZW1NYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpOwpyZXR1cm4gbmV3IExhKGEpfTtsLlZlcnRleD1mdW5jdGlvbihhLGIsYyl7Y29uc29sZS53YXJuKCJUSFJFRS5WZXJ0ZXggaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLlZlY3RvcjMgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IHAoYSxiLGMpfTtsLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUoKS5zZXREeW5hbWljKCB0cnVlICkgaW5zdGVhZC4iKTtyZXR1cm4obmV3IEwoYSxiKSkuc2V0RHluYW1pYyghMCl9O2wuSW50OEF0dHJpYnV0ZT1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuSW50OEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDhCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgcmMoYSxiKX07bC5VaW50OEF0dHJpYnV0ZT0KZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQ4QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDhCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgc2MoYSxiKX07bC5VaW50OENsYW1wZWRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQ4Q2xhbXBlZEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyB0YyhhLGIpfTtsLkludDE2QXR0cmlidXRlPWZ1bmN0aW9uKGEsYil7Y29uc29sZS53YXJuKCJUSFJFRS5JbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDE2QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IHVjKGEsYil9O2wuVWludDE2QXR0cmlidXRlPWZ1bmN0aW9uKGEsYil7Y29uc29sZS53YXJuKCJUSFJFRS5VaW50MTZBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpOwpyZXR1cm4gbmV3IGliKGEsYil9O2wuSW50MzJBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLkludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50MzJCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgdmMoYSxiKX07bC5VaW50MzJBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBqYihhLGIpfTtsLkZsb2F0MzJBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLkZsb2F0MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5GbG9hdDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IEMoYSxiKX07bC5GbG9hdDY0QXR0cmlidXRlPQpmdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuRmxvYXQ2NEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgd2MoYSxiKX07bC5DbG9zZWRTcGxpbmVDdXJ2ZTM9ZGY7bC5TcGxpbmVDdXJ2ZTM9ZWY7bC5TcGxpbmU9dGU7bC5Cb3VuZGluZ0JveEhlbHBlcj1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuQm91bmRpbmdCb3hIZWxwZXIgaGFzIGJlZW4gZGVwcmVjYXRlZC4gQ3JlYXRpbmcgYSBUSFJFRS5Cb3hIZWxwZXIgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IEJiKGEsYil9O2wuRWRnZXNIZWxwZXI9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLkVkZ2VzSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5FZGdlc0dlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIG5ldyBkYShuZXcgYWMoYS5nZW9tZXRyeSksbmV3IGhhKHtjb2xvcjp2b2lkIDAhPT0KYj9iOjE2Nzc3MjE1fSkpfTtsLldpcmVmcmFtZUhlbHBlcj1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuV2lyZWZyYW1lSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5XaXJlZnJhbWVHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgZGEobmV3IE9iKGEuZ2VvbWV0cnkpLG5ldyBoYSh7Y29sb3I6dm9pZCAwIT09Yj9iOjE2Nzc3MjE1fSkpfTtsLlhIUkxvYWRlcj1mdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLlhIUkxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkZpbGVMb2FkZXIuIik7cmV0dXJuIG5ldyB1YShhKX07bC5CaW5hcnlUZXh0dXJlTG9hZGVyPWZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuQmluYXJ5VGV4dHVyZUxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkRhdGFUZXh0dXJlTG9hZGVyLiIpO3JldHVybiBuZXcgJGQoYSl9O2wuR2VvbWV0cnlVdGlscz17bWVyZ2U6ZnVuY3Rpb24oYSxiLApjKXtjb25zb2xlLndhcm4oIlRIUkVFLkdlb21ldHJ5VXRpbHM6IC5tZXJnZSgpIGhhcyBiZWVuIG1vdmVkIHRvIEdlb21ldHJ5LiBVc2UgZ2VvbWV0cnkubWVyZ2UoIGdlb21ldHJ5MiwgbWF0cml4LCBtYXRlcmlhbEluZGV4T2Zmc2V0ICkgaW5zdGVhZC4iKTt2YXIgZDtiLmlzTWVzaCYmKGIubWF0cml4QXV0b1VwZGF0ZSYmYi51cGRhdGVNYXRyaXgoKSxkPWIubWF0cml4LGI9Yi5nZW9tZXRyeSk7YS5tZXJnZShiLGQsYyl9LGNlbnRlcjpmdW5jdGlvbihhKXtjb25zb2xlLndhcm4oIlRIUkVFLkdlb21ldHJ5VXRpbHM6IC5jZW50ZXIoKSBoYXMgYmVlbiBtb3ZlZCB0byBHZW9tZXRyeS4gVXNlIGdlb21ldHJ5LmNlbnRlcigpIGluc3RlYWQuIik7cmV0dXJuIGEuY2VudGVyKCl9fTtsLkltYWdlVXRpbHM9e2Nyb3NzT3JpZ2luOnZvaWQgMCxsb2FkVGV4dHVyZTpmdW5jdGlvbihhLGIsYyxkKXtjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMubG9hZFRleHR1cmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLlRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLiIpOwp2YXIgZT1uZXcgc2Q7ZS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTthPWUubG9hZChhLGMsdm9pZCAwLGQpO2ImJihhLm1hcHBpbmc9Yik7cmV0dXJuIGF9LGxvYWRUZXh0dXJlQ3ViZTpmdW5jdGlvbihhLGIsYyxkKXtjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMubG9hZFRleHR1cmVDdWJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5DdWJlVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7dmFyIGU9bmV3IGFlO2Uuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7YT1lLmxvYWQoYSxjLHZvaWQgMCxkKTtiJiYoYS5tYXBwaW5nPWIpO3JldHVybiBhfSxsb2FkQ29tcHJlc3NlZFRleHR1cmU6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LGxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfX07CmwuUHJvamVjdG9yPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvamVjdG9yIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qcy9yZW5kZXJlcnMvUHJvamVjdG9yLmpzLiIpO3RoaXMucHJvamVjdFZlY3Rvcj1mdW5jdGlvbihhLGIpe2NvbnNvbGUud2FybigiVEhSRUUuUHJvamVjdG9yOiAucHJvamVjdFZlY3RvcigpIGlzIG5vdyB2ZWN0b3IucHJvamVjdCgpLiIpO2EucHJvamVjdChiKX07dGhpcy51bnByb2plY3RWZWN0b3I9ZnVuY3Rpb24oYSxiKXtjb25zb2xlLndhcm4oIlRIUkVFLlByb2plY3RvcjogLnVucHJvamVjdFZlY3RvcigpIGlzIG5vdyB2ZWN0b3IudW5wcm9qZWN0KCkuIik7YS51bnByb2plY3QoYil9O3RoaXMucGlja2luZ1JheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb2plY3RvcjogLnBpY2tpbmdSYXkoKSBpcyBub3cgcmF5Y2FzdGVyLnNldEZyb21DYW1lcmEoKS4iKX19O2wuQ2FudmFzUmVuZGVyZXI9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5DYW52YXNSZW5kZXJlciBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanMvcmVuZGVyZXJzL0NhbnZhc1JlbmRlcmVyLmpzIik7CnRoaXMuZG9tRWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJjYW52YXMiKTt0aGlzLmNsZWFyPWZ1bmN0aW9uKCl7fTt0aGlzLnJlbmRlcj1mdW5jdGlvbigpe307dGhpcy5zZXRDbGVhckNvbG9yPWZ1bmN0aW9uKCl7fTt0aGlzLnNldFNpemU9ZnVuY3Rpb24oKXt9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkobCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KTsK(Line 354)
Message:
THREE.Color: Unknown color gray10
console-api debug URL: data:text/html;base64,PCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSdlbic+DQogIDxoZWFkPg0KICAg%0AIDxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4NCiAgICAgIDwhLS0gY3NzIGZvciBzdHls%0AaW5nIHRoZSBkMy5zbGlkZXIgbGliIC0tPg0KICAgICAgPHN0eWxlIHR5cGU9J3Rl%0AeHQvY3NzJz4uZDMtc2xpZGVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAg%0AIGZvbnQtZmFtaWx5OiBWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7CiAgICBmb250%0ALXNpemU6IDEuMWVtOwogICAgYm9yZGVyOiAxcHggc29saWQgI2FhYWFhYTsKICAg%0AIHotaW5kZXg6IDI7Cn0KCi5kMy1zbGlkZXItaG9yaXpvbnRhbCB7CiAgICBoZWln%0AaHQ6IC44ZW07Cn0gIAoKLmQzLXNsaWRlci1yYW5nZSB7CiAgYmFja2dyb3VuZDoj%0AMjk4MGI5OwogIGxlZnQ6MHB4OwogIHJpZ2h0OjBweDsKICBoZWlnaHQ6IDAuOGVt%0AOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKfQoKLmQzLXNsaWRlci1yYW5nZS12ZXJ0%0AaWNhbCB7CiAgYmFja2dyb3VuZDojMjk4MGI5OwogIGxlZnQ6MHB4OwogIHJpZ2h0%0AOjBweDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOjA7Cn0KCi5kMy1zbGlk%0AZXItdmVydGljYWwgewogICAgd2lkdGg6IC44ZW07CiAgICBoZWlnaHQ6IDEwMHB4%0AOwp9ICAgICAgCgouZDMtc2xpZGVyLWhhbmRsZSB7CiAgICBwb3NpdGlvbjogYWJz%0Ab2x1dGU7CiAgICB3aWR0aDogMS4yZW07CiAgICBoZWlnaHQ6IDEuMmVtOwogICAg%0AYm9yZGVyOiAxcHggc29saWQgI2QzZDNkMzsKICAgIGJvcmRlci1yYWRpdXM6IDRw%0AeDsKICAgIGJhY2tncm91bmQ6ICNlZWU7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXIt%0AZ3JhZGllbnQodG8gYm90dG9tLCAjZWVlIDAlLCAjZGRkIDEwMCUpOwogICAgei1p%0AbmRleDogMzsKICAgIGN1cnNvcjogbW92ZTsKfQoKLmQzLXNsaWRlci1oYW5kbGU6%0AaG92ZXIgewogICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTk5OTsKfQoKLmQzLXNs%0AaWRlci1ob3Jpem9udGFsIC5kMy1zbGlkZXItaGFuZGxlIHsKICAgIHRvcDogLS4z%0AZW07Cn0KCi5kMy1zbGlkZXItYXhpcyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7%0ACiAgICB6LWluZGV4OiAxOyAgICAKfQoKLmQzLXNsaWRlci1heGlzLWJvdHRvbSB7%0ACiAgICB0b3A6IC44ZW07Cn0KCi5kMy1zbGlkZXItYXhpcy1yaWdodCB7CiAgICBs%0AZWZ0OiAuOGVtOwp9CgouZDMtc2xpZGVyLWF4aXMgcGF0aCB7CiAgICBzdHJva2Ut%0Ad2lkdGg6IDA7CiAgICBmaWxsOiBub25lOwp9CgouZDMtc2xpZGVyLWF4aXMgbGlu%0AZSB7CiAgICBmaWxsOiBub25lOwogICAgc3Ryb2tlOiAjYWFhOwogICAgc2hhcGUt%0AcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwp9CgouZDMtc2xpZGVyLWF4aXMgdGV4dCB7%0ACiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5kMy1zbGlkZXItdmVydGljYWwgLmQz%0ALXNsaWRlci1oYW5kbGUgewogICAgbGVmdDogLS4yNWVtOwogICAgbWFyZ2luLWxl%0AZnQ6IDA7CiAgICBtYXJnaW4tYm90dG9tOiAtLjZlbTsgICAgICAKfTwvc3R5bGU+%0ADQogICAgICA8IS0tIGNzcyBmb3Igc3R5bGluZyB0aGUgbmR0di1kMyByZW5kZXIg%0AYW5kIGNvbXBvbmVudHMgLS0+DQogICAgICA8c3R5bGUgdHlwZT0ndGV4dC9jc3Mn%0APi5uZHR2LWZ1bGxzY3JlZW4geyAKICBwYWRkaW5nOiAwOwogIG1hcmdpbjogMDsK%0AICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KCi5uZHR2LWQzLWNvbnRh%0AaW5lciB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoubWFpbiwgLnhsYWIgewog%0AIHRleHQtYW5jaG9yOiBtaWRkbGU7Cn0KCi5sYWJlbCwgLm1haW4sIC54bGFiLCAu%0AdG9vbHRpcCB7CiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7Cn0KCi5kcmFnZ2lu%0AZyB7CiAgY3Vyc29yOiBtb3ZlOwp9Cgoubm9kZSB7CiAgc3Ryb2tlLXdpZHRoOiAx%0AcHg7CiAgZmlsbDogcmVkOwogIHN0cm9rZTogYmxhY2s7Cn0KCi5ub2RlLCAuZWRn%0AZSB7CiAgY3Vyc29yOiBwb2ludGVyOwogIC8qdHJhbnNpdGlvbjogc3Ryb2tlLXdp%0AZHRoIDAuMnMgZWFzZTsqLwp9CgovKi5ub2RlOmhvdmVyLCAuZWRnZTpob3ZlciB7%0ACiAgc3Ryb2tlLXdpZHRoOiA1cHggIWltcG9ydGFudDsKfSovCgouZWRnZSB7CiAg%0Ac3Ryb2tlOiBibGFjazsKfQoKLmxhYmVsIHsKICBwb2ludGVyLWV2ZW50czogbm9u%0AZTsKfQoKLmdyYXBoIHsgCiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG92ZXJmbG93%0AOiBoaWRkZW47Cn0KCi5rZXkgewogIHBhZGRpbmc6IDEwcHg7CiAgdGV4dC1hbGln%0AbjogY2VudGVyOwp9CgouY29udHJvbHMgeyAKICBtYXJnaW46IDEwcHggMjBweDsK%0AICBoZWlnaHQ6IDQwcHg7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBwb3Np%0AdGlvbjogYWJzb2x1dGU7CiAgYm90dG9tOiAwcHg7CiAgbGVmdDogMHB4OwogIHJp%0AZ2h0OiAwcHg7Cn0KCi5wbGF5LWNvbnRyb2wtY29udGFpbmVyPmRpdiB7CiAgd2lk%0AdGg6IDI1cHg7CiAgaGVpZ2h0OiAyNXB4OwogIG92ZXJmbG93OiBoaWRkZW47CiAg%0AZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgouY29udHJvbHMgLmljb24sIC5uZHR2%0ALW1lbnUtY29udGFpbmVyIC5pY29uIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6%0AIDEwMCU7CiAgY3Vyc29yOiBwb2ludGVyOwp9CgouY29udHJvbHMgLmljb246aG92%0AZXIgewogIGZpbGw6IGJsdWU7Cn0KCi5kYXRhX2Nob29zZXJfY29udGFpbmVyIHsK%0AICBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMTBweDsgbGVmdDogMTBweDsKfQoK%0ALnBsYXktY29udHJvbC1jb250YWluZXIgewogIGZsb2F0OiByaWdodDsgCiAgYmFj%0Aa2dyb3VuZDogI2NjYzsgCiAgYm9yZGVyLXJhZGl1czogNXB4OyAKICBwYWRkaW5n%0AOiA3cHg7CiAgcGFkZGluZy1ib3R0b206IDNweDsKICBib3gtc2l6aW5nOiBib3Jk%0AZXItYm94Owp9CgoubmR0di1kMy1jb250YWluZXIgeyAKICBwb3NpdGlvbjogcmVs%0AYXRpdmU7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBib3JkZXI6IDFweCBz%0Ab2xpZDsKfQoKLnNsaWRlci1jb250cm9sLWNvbnRhaW5lciB7IAogIG1hcmdpbi1y%0AaWdodDogMTYwcHg7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKLmQzLXNs%0AaWRlci1oYW5kbGUgewogIG1pbi13aWR0aDogMTBweDsKfQoKLmQzLXNsaWRlci1h%0AeGlzIHsKICBoZWlnaHQ6IDIwcHg7Cn0KCi50b29sdGlwIHsKICBkaXNwbGF5OiBu%0Ab25lOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiAxMDAwOwogIHBh%0AZGRpbmc6IDEwcHggMTBweDsKICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1%0ALCAxKTsKICBib3JkZXI6IDFweCBzb2xpZCAjNjY2OwogIG9wYWNpdHk6IDE7ICAv%0AKiB0aGlzIGlzIHRvIHByZXZlbnQgYm9vdHN0cmFwJ3MgdG9vbHRpcCBydWxlIGZy%0Ab20gb3ZlcnJkaW5nICovCn0KCi5mcmFtZUluZm8gewogIGRpc3BsYXk6IG5vbmU7%0ACiAgcG9zaXRpb246IGFic29sdXRlOwogIGJvdHRvbTogMHB4OwogIGxlZnQ6IDBw%0AeDsKICBwYWRkaW5nOiA1cHg7Cn0KCi5kdXJhdGlvbkNvbnRyb2wgewogIHdpZHRo%0AOiAxNTBweDsKICBtYXJnaW4tYm90dG9tOiAyMHB4OyAKfQoKLmNvbnRhaW5lciAu%0Ac2NyZWVuIHsKICBvcGFjaXR5OiAwOwogIHBvaW50ZXItZXZlbnRzOiBub25lOwog%0AIGZpbGw6IG5vbmU7Cn0KCi5jb250YWluZXIgLnNjcmVlbi5uZXR3b3JrLXNlbGVj%0AdGVkIHsKICBvcGFjaXR5OiAuNjsKfQoKLm5kdHYtbWVudS1jb250YWluZXIgewog%0AIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDVweDsKICByaWdodDogNXB4Owp9%0ACgoubmR0di1tZW51LWljb24gewogIHdpZHRoOiAyNXB4OwogIGhlaWdodDogMjVw%0AeDsKICBmbG9hdDogcmlnaHQ7CiAgei1pbmRleDogMTAwOwp9CgoubmR0di1tZW51%0ALWljb24ubWVudS1hY3RpdmUgewogIGJhY2tncm91bmQ6ICNmZmY7CiAgYm9yZGVy%0AOiAxcHggc29saWQgIzY2NjsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2Zm%0AZjsKfQoKLm5kdHYtbWVudSB7CiAgYmFja2dyb3VuZDogd2hpdGU7CiAgYm9yZGVy%0AOiAxcHggc29saWQgIzY2NjsKICBib3gtc2hhZG93OiAwcHggMnB4IDRweCByZ2Jh%0AKDAsMCwwLDAuMik7CiAgcGFkZGluZzogMTBweDsKICBtYXJnaW4tdG9wOiAyNXB4%0AOwogIGRpc3BsYXk6IG5vbmU7Cn0KCi5tZW51LWl0ZW0gewogIHBhZGRpbmc6IDEw%0AcHggMHB4OwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQ0NDOwp9CgoubWVu%0AdS1pdGVtOmZpcnN0LWNoaWxkIHsKICBwYWRkaW5nLXRvcDogMHB4Owp9CgoubWVu%0AdS1pdGVtOmxhc3QtY2hpbGQgewogIHBhZGRpbmctYm90dG9tOiAwcHg7CiAgYm9y%0AZGVyOiBub25lOwp9Cjwvc3R5bGU+DQogICAgPCEtLSBtaW5pbWl6ZWQgZDMuanMg%0AbGlicmFyeSAtLT4NCiAgICAgIDxzY3JpcHQ+IWZ1bmN0aW9uKCl7ZnVuY3Rpb24g%0AbihuLHQpe3JldHVybiB0Pm4/LTE6bj50PzE6bj49dD8wOjAvMH1mdW5jdGlvbiB0%0AKG4pe3JldHVybiBudWxsIT1uJiYhaXNOYU4obil9ZnVuY3Rpb24gZShuKXtyZXR1%0Acm57bGVmdDpmdW5jdGlvbih0LGUscix1KXtmb3IoYXJndW1lbnRzLmxlbmd0aDwz%0AJiYocj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJih1PXQubGVuZ3RoKTt1PnI7KXt2%0AYXIgaT1yK3U+Pj4xO24odFtpXSxlKTwwP3I9aSsxOnU9aX1yZXR1cm4gcn0scmln%0AaHQ6ZnVuY3Rpb24odCxlLHIsdSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9%0AMCksYXJndW1lbnRzLmxlbmd0aDw0JiYodT10Lmxlbmd0aCk7dT5yOyl7dmFyIGk9%0Acit1Pj4+MTtuKHRbaV0sZSk+MD91PWk6cj1pKzF9cmV0dXJuIHJ9fX1mdW5jdGlv%0AbiByKG4pe3JldHVybiBuLmxlbmd0aH1mdW5jdGlvbiB1KG4pe2Zvcih2YXIgdD0x%0AO24qdCUxOyl0Kj0xMDtyZXR1cm4gdH1mdW5jdGlvbiBpKG4sdCl7dHJ5e2Zvcih2%0AYXIgZSBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHt2%0AYWx1ZTp0W2VdLGVudW1lcmFibGU6ITF9KX1jYXRjaChyKXtuLnByb3RvdHlwZT10%0AfX1mdW5jdGlvbiBvKCl7fWZ1bmN0aW9uIGEobil7cmV0dXJuIG9hK24gaW4gdGhp%0Ac31mdW5jdGlvbiBjKG4pe3JldHVybiBuPW9hK24sbiBpbiB0aGlzJiZkZWxldGUg%0AdGhpc1tuXX1mdW5jdGlvbiBsKCl7dmFyIG49W107cmV0dXJuIHRoaXMuZm9yRWFj%0AaChmdW5jdGlvbih0KXtuLnB1c2godCl9KSxufWZ1bmN0aW9uIHMoKXt2YXIgbj0w%0AO2Zvcih2YXIgdCBpbiB0aGlzKXQuY2hhckNvZGVBdCgwKT09PWFhJiYrK247cmV0%0AdXJuIG59ZnVuY3Rpb24gZigpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG4uY2hhckNv%0AZGVBdCgwKT09PWFhKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGgoKXt9ZnVu%0AY3Rpb24gZyhuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0%0ALGFyZ3VtZW50cyk7cmV0dXJuIHI9PT10P246cn19ZnVuY3Rpb24gcChuLHQpe2lm%0AKHQgaW4gbilyZXR1cm4gdDt0PXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5z%0AbGljZSgxKTtmb3IodmFyIGU9MCxyPWNhLmxlbmd0aDtyPmU7KytlKXt2YXIgdT1j%0AYVtlXSt0O2lmKHUgaW4gbilyZXR1cm4gdX19ZnVuY3Rpb24gdigpe31mdW5jdGlv%0AbiBkKCl7fWZ1bmN0aW9uIG0obil7ZnVuY3Rpb24gdCgpe2Zvcih2YXIgdCxyPWUs%0AdT0tMSxpPXIubGVuZ3RoOysrdTxpOykodD1yW3VdLm9uKSYmdC5hcHBseSh0aGlz%0ALGFyZ3VtZW50cyk7cmV0dXJuIG59dmFyIGU9W10scj1uZXcgbztyZXR1cm4gdC5v%0Abj1mdW5jdGlvbih0LHUpe3ZhciBpLG89ci5nZXQodCk7cmV0dXJuIGFyZ3VtZW50%0Acy5sZW5ndGg8Mj9vJiZvLm9uOihvJiYoby5vbj1udWxsLGU9ZS5zbGljZSgwLGk9%0AZS5pbmRleE9mKG8pKS5jb25jYXQoZS5zbGljZShpKzEpKSxyLnJlbW92ZSh0KSks%0AdSYmZS5wdXNoKHIuc2V0KHQse29uOnV9KSksbil9LHR9ZnVuY3Rpb24geSgpe1Zv%0ALmV2ZW50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24geCgpe2Zvcih2YXIgbix0%0APVZvLmV2ZW50O249dC5zb3VyY2VFdmVudDspdD1uO3JldHVybiB0fWZ1bmN0aW9u%0AIE0obil7Zm9yKHZhciB0PW5ldyBkLGU9MCxyPWFyZ3VtZW50cy5sZW5ndGg7Kytl%0APHI7KXRbYXJndW1lbnRzW2VdXT1tKHQpO3JldHVybiB0Lm9mPWZ1bmN0aW9uKGUs%0Acil7cmV0dXJuIGZ1bmN0aW9uKHUpe3RyeXt2YXIgaT11LnNvdXJjZUV2ZW50PVZv%0ALmV2ZW50O3UudGFyZ2V0PW4sVm8uZXZlbnQ9dSx0W3UudHlwZV0uYXBwbHkoZSxy%0AKX1maW5hbGx5e1ZvLmV2ZW50PWl9fX0sdH1mdW5jdGlvbiBfKG4pe3JldHVybiBz%0AYShuLHZhKSxufWZ1bmN0aW9uIGIobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9m%0AIG4/bjpmdW5jdGlvbigpe3JldHVybiBmYShuLHRoaXMpfX1mdW5jdGlvbiB3KG4p%0Ae3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24oKXtyZXR1cm4g%0AaGEobix0aGlzKX19ZnVuY3Rpb24gUyhuLHQpe2Z1bmN0aW9uIGUoKXt0aGlzLnJl%0AbW92ZUF0dHJpYnV0ZShuKX1mdW5jdGlvbiByKCl7dGhpcy5yZW1vdmVBdHRyaWJ1%0AdGVOUyhuLnNwYWNlLG4ubG9jYWwpfWZ1bmN0aW9uIHUoKXt0aGlzLnNldEF0dHJp%0AYnV0ZShuLHQpfWZ1bmN0aW9uIGkoKXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3Bh%0AY2Usbi5sb2NhbCx0KX1mdW5jdGlvbiBvKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFy%0AZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZShuKTp0aGlzLnNl%0AdEF0dHJpYnV0ZShuLGUpfWZ1bmN0aW9uIGEoKXt2YXIgZT10LmFwcGx5KHRoaXMs%0AYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFj%0AZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxl%0AKX1yZXR1cm4gbj1Wby5ucy5xdWFsaWZ5KG4pLG51bGw9PXQ/bi5sb2NhbD9yOmU6%0AImZ1bmN0aW9uIj09dHlwZW9mIHQ/bi5sb2NhbD9hOm86bi5sb2NhbD9pOnV9ZnVu%0AY3Rpb24gayhuKXtyZXR1cm4gbi50cmltKCkucmVwbGFjZSgvXHMrL2csIiAiKX1m%0AdW5jdGlvbiBFKG4pe3JldHVybiBuZXcgUmVnRXhwKCIoPzpefFxccyspIitWby5y%0AZXF1b3RlKG4pKyIoPzpcXHMrfCQpIiwiZyIpfWZ1bmN0aW9uIEEobil7cmV0dXJu%0AKG4rIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBDKG4sdCl7ZnVu%0AY3Rpb24gZSgpe2Zvcih2YXIgZT0tMTsrK2U8dTspbltlXSh0aGlzLHQpfWZ1bmN0%0AaW9uIHIoKXtmb3IodmFyIGU9LTEscj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTsr%0AK2U8dTspbltlXSh0aGlzLHIpfW49QShuKS5tYXAoTik7dmFyIHU9bi5sZW5ndGg7%0AcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/cjplfWZ1bmN0aW9uIE4obil7dmFy%0AIHQ9RShuKTtyZXR1cm4gZnVuY3Rpb24oZSxyKXtpZih1PWUuY2xhc3NMaXN0KXJl%0AdHVybiByP3UuYWRkKG4pOnUucmVtb3ZlKG4pO3ZhciB1PWUuZ2V0QXR0cmlidXRl%0AKCJjbGFzcyIpfHwiIjtyPyh0Lmxhc3RJbmRleD0wLHQudGVzdCh1KXx8ZS5zZXRB%0AdHRyaWJ1dGUoImNsYXNzIixrKHUrIiAiK24pKSk6ZS5zZXRBdHRyaWJ1dGUoImNs%0AYXNzIixrKHUucmVwbGFjZSh0LCIgIikpKX19ZnVuY3Rpb24geihuLHQsZSl7ZnVu%0AY3Rpb24gcigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9ZnVuY3Rpb24g%0AdSgpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfWZ1bmN0aW9uIGkoKXt2%0AYXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUu%0AcmVtb3ZlUHJvcGVydHkobik6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLHIsZSl9%0AcmV0dXJuIG51bGw9PXQ/cjoiZnVuY3Rpb24iPT10eXBlb2YgdD9pOnV9ZnVuY3Rp%0Ab24gTChuLHQpe2Z1bmN0aW9uIGUoKXtkZWxldGUgdGhpc1tuXX1mdW5jdGlvbiBy%0AKCl7dGhpc1tuXT10fWZ1bmN0aW9uIHUoKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJn%0AdW1lbnRzKTtudWxsPT1lP2RlbGV0ZSB0aGlzW25dOnRoaXNbbl09ZX1yZXR1cm4g%0AbnVsbD09dD9lOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3U6cn1mdW5jdGlvbiBUKG4p%0Ae3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246KG49Vm8ubnMucXVhbGlmeShu%0AKSkubG9jYWw/ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNy%0AZWF0ZUVsZW1lbnROUyhuLnNwYWNlLG4ubG9jYWwpfTpmdW5jdGlvbigpe3JldHVy%0AbiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHRoaXMubmFtZXNw%0AYWNlVVJJLG4pfX1mdW5jdGlvbiBxKG4pe3JldHVybntfX2RhdGFfXzpufX1mdW5j%0AdGlvbiBSKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBwYSh0aGlzLG4pfX1m%0AdW5jdGlvbiBEKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RofHwodD1uKSxmdW5j%0AdGlvbihuLGUpe3JldHVybiBuJiZlP3Qobi5fX2RhdGFfXyxlLl9fZGF0YV9fKToh%0Abi0hZX19ZnVuY3Rpb24gUChuLHQpe2Zvcih2YXIgZT0wLHI9bi5sZW5ndGg7cj5l%0AO2UrKylmb3IodmFyIHUsaT1uW2VdLG89MCxhPWkubGVuZ3RoO2E+bztvKyspKHU9%0AaVtvXSkmJnQodSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFUobil7cmV0dXJuIHNh%0AKG4sbWEpLG59ZnVuY3Rpb24gaihuKXt2YXIgdCxlO3JldHVybiBmdW5jdGlvbihy%0ALHUsaSl7dmFyIG8sYT1uW2ldLnVwZGF0ZSxjPWEubGVuZ3RoO2ZvcihpIT1lJiYo%0AZT1pLHQ9MCksdT49dCYmKHQ9dSsxKTshKG89YVt0XSkmJisrdDxjOyk7cmV0dXJu%0AIG99fWZ1bmN0aW9uIEgoKXt2YXIgbj10aGlzLl9fdHJhbnNpdGlvbl9fO24mJisr%0Abi5hY3RpdmV9ZnVuY3Rpb24gRihuLHQsZSl7ZnVuY3Rpb24gcigpe3ZhciB0PXRo%0AaXNbb107dCYmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLHQsdC4kKSxkZWxl%0AdGUgdGhpc1tvXSl9ZnVuY3Rpb24gdSgpe3ZhciB1PWModCwkbyhhcmd1bWVudHMp%0AKTtyLmNhbGwodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKG4sdGhpc1tvXT11%0ALHUuJD1lKSx1Ll89dH1mdW5jdGlvbiBpKCl7dmFyIHQsZT1uZXcgUmVnRXhwKCJe%0AX19vbihbXi5dKykiK1ZvLnJlcXVvdGUobikrIiQiKTtmb3IodmFyIHIgaW4gdGhp%0AcylpZih0PXIubWF0Y2goZSkpe3ZhciB1PXRoaXNbcl07dGhpcy5yZW1vdmVFdmVu%0AdExpc3RlbmVyKHRbMV0sdSx1LiQpLGRlbGV0ZSB0aGlzW3JdfX12YXIgbz0iX19v%0AbiIrbixhPW4uaW5kZXhPZigiLiIpLGM9TzthPjAmJihuPW4uc2xpY2UoMCxhKSk7%0AdmFyIGw9eGEuZ2V0KG4pO3JldHVybiBsJiYobj1sLGM9WSksYT90P3U6cjp0P3Y6%0AaX1mdW5jdGlvbiBPKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPVZvLmV2%0AZW50O1ZvLmV2ZW50PWUsdFswXT10aGlzLl9fZGF0YV9fO3RyeXtuLmFwcGx5KHRo%0AaXMsdCl9ZmluYWxseXtWby5ldmVudD1yfX19ZnVuY3Rpb24gWShuLHQpe3ZhciBl%0APU8obix0KTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHQ9dGhpcyxyPW4ucmVsYXRl%0AZFRhcmdldDtyJiYocj09PXR8fDgmci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0%0AKSl8fGUuY2FsbCh0LG4pfX1mdW5jdGlvbiBJKCl7dmFyIG49Ii5kcmFnc3VwcHJl%0Ac3MtIisgKytfYSx0PSJjbGljayIrbixlPVZvLnNlbGVjdChKbykub24oInRvdWNo%0AbW92ZSIrbix5KS5vbigiZHJhZ3N0YXJ0IituLHkpLm9uKCJzZWxlY3RzdGFydCIr%0Abix5KTtpZihNYSl7dmFyIHI9V28uc3R5bGUsdT1yW01hXTtyW01hXT0ibm9uZSJ9%0AcmV0dXJuIGZ1bmN0aW9uKGkpe2Z1bmN0aW9uIG8oKXtlLm9uKHQsbnVsbCl9ZS5v%0AbihuLG51bGwpLE1hJiYocltNYV09dSksaSYmKGUub24odCxmdW5jdGlvbigpe3ko%0AKSxvKCl9LCEwKSxzZXRUaW1lb3V0KG8sMCkpfX1mdW5jdGlvbiBaKG4sdCl7dC5j%0AaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSk7dmFyIGU9bi5v%0Ad25lclNWR0VsZW1lbnR8fG47aWYoZS5jcmVhdGVTVkdQb2ludCl7dmFyIHI9ZS5j%0AcmVhdGVTVkdQb2ludCgpO2lmKDA+YmEmJihKby5zY3JvbGxYfHxKby5zY3JvbGxZ%0AKSl7ZT1Wby5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInN2ZyIpLnN0eWxlKHtwb3Np%0AdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxwYWRkaW5nOjAs%0AYm9yZGVyOiJub25lIn0sImltcG9ydGFudCIpO3ZhciB1PWVbMF1bMF0uZ2V0U2Ny%0AZWVuQ1RNKCk7YmE9ISh1LmZ8fHUuZSksZS5yZW1vdmUoKX1yZXR1cm4gYmE/KHIu%0AeD10LnBhZ2VYLHIueT10LnBhZ2VZKTooci54PXQuY2xpZW50WCxyLnk9dC5jbGll%0AbnRZKSxyPXIubWF0cml4VHJhbnNmb3JtKG4uZ2V0U2NyZWVuQ1RNKCkuaW52ZXJz%0AZSgpKSxbci54LHIueV19dmFyIGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTty%0AZXR1cm5bdC5jbGllbnRYLWkubGVmdC1uLmNsaWVudExlZnQsdC5jbGllbnRZLWku%0AdG9wLW4uY2xpZW50VG9wXX1mdW5jdGlvbiBWKCl7cmV0dXJuIFZvLmV2ZW50LmNo%0AYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXJ9ZnVuY3Rpb24gWCgpe3JldHVybiBW%0Aby5ldmVudC50YXJnZXR9ZnVuY3Rpb24gJCgpe3JldHVybiBKb31mdW5jdGlvbiBC%0AKG4pe3JldHVybiBuPjA/MTowPm4/LTE6MH1mdW5jdGlvbiBXKG4sdCxlKXtyZXR1%0Acm4odFswXS1uWzBdKSooZVsxXS1uWzFdKS0odFsxXS1uWzFdKSooZVswXS1uWzBd%0AKX1mdW5jdGlvbiBKKG4pe3JldHVybiBuPjE/MDotMT5uP3dhOk1hdGguYWNvcyhu%0AKX1mdW5jdGlvbiBHKG4pe3JldHVybiBuPjE/a2E6LTE+bj8ta2E6TWF0aC5hc2lu%0AKG4pfWZ1bmN0aW9uIEsobil7cmV0dXJuKChuPU1hdGguZXhwKG4pKS0xL24pLzJ9%0AZnVuY3Rpb24gUShuKXtyZXR1cm4oKG49TWF0aC5leHAobikpKzEvbikvMn1mdW5j%0AdGlvbiBudChuKXtyZXR1cm4oKG49TWF0aC5leHAoMipuKSktMSkvKG4rMSl9ZnVu%0AY3Rpb24gdHQobil7cmV0dXJuKG49TWF0aC5zaW4obi8yKSkqbn1mdW5jdGlvbiBl%0AdCgpe31mdW5jdGlvbiBydChuLHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBy%0AdD8odGhpcy5oPStuLHRoaXMucz0rdCx2b2lkKHRoaXMubD0rZSkpOmFyZ3VtZW50%0Acy5sZW5ndGg8Mj9uIGluc3RhbmNlb2YgcnQ/bmV3IHJ0KG4uaCxuLnMsbi5sKTpt%0AdCgiIituLHl0LHJ0KTpuZXcgcnQobix0LGUpfWZ1bmN0aW9uIHV0KG4sdCxlKXtm%0AdW5jdGlvbiByKG4pe3JldHVybiBuPjM2MD9uLT0zNjA6MD5uJiYobis9MzYwKSw2%0AMD5uP2krKG8taSkqbi82MDoxODA+bj9vOjI0MD5uP2krKG8taSkqKDI0MC1uKS82%0AMDppfWZ1bmN0aW9uIHUobil7cmV0dXJuIE1hdGgucm91bmQoMjU1KnIobikpfXZh%0AciBpLG87cmV0dXJuIG49aXNOYU4obik/MDoobiU9MzYwKTwwP24rMzYwOm4sdD1p%0Ac05hTih0KT8wOjA+dD8wOnQ+MT8xOnQsZT0wPmU/MDplPjE/MTplLG89LjU+PWU/%0AZSooMSt0KTplK3QtZSp0LGk9MiplLW8sbmV3IGd0KHUobisxMjApLHUobiksdShu%0ALTEyMCkpfWZ1bmN0aW9uIGl0KG4sdCxlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9m%0AIGl0Pyh0aGlzLmg9K24sdGhpcy5jPSt0LHZvaWQodGhpcy5sPStlKSk6YXJndW1l%0AbnRzLmxlbmd0aDwyP24gaW5zdGFuY2VvZiBpdD9uZXcgaXQobi5oLG4uYyxuLmwp%0AOm4gaW5zdGFuY2VvZiBhdD9sdChuLmwsbi5hLG4uYik6bHQoKG49eHQoKG49Vm8u%0AcmdiKG4pKS5yLG4uZyxuLmIpKS5sLG4uYSxuLmIpOm5ldyBpdChuLHQsZSl9ZnVu%0AY3Rpb24gb3Qobix0LGUpe3JldHVybiBpc05hTihuKSYmKG49MCksaXNOYU4odCkm%0AJih0PTApLG5ldyBhdChlLE1hdGguY29zKG4qPUNhKSp0LE1hdGguc2luKG4pKnQp%0AfWZ1bmN0aW9uIGF0KG4sdCxlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGF0Pyh0%0AaGlzLmw9K24sdGhpcy5hPSt0LHZvaWQodGhpcy5iPStlKSk6YXJndW1lbnRzLmxl%0Abmd0aDwyP24gaW5zdGFuY2VvZiBhdD9uZXcgYXQobi5sLG4uYSxuLmIpOm4gaW5z%0AdGFuY2VvZiBpdD9vdChuLmwsbi5jLG4uaCk6eHQoKG49Z3QobikpLnIsbi5nLG4u%0AYik6bmV3IGF0KG4sdCxlKX1mdW5jdGlvbiBjdChuLHQsZSl7dmFyIHI9KG4rMTYp%0ALzExNix1PXIrdC81MDAsaT1yLWUvMjAwO3JldHVybiB1PXN0KHUpKkhhLHI9c3Qo%0AcikqRmEsaT1zdChpKSpPYSxuZXcgZ3QoaHQoMy4yNDA0NTQyKnUtMS41MzcxMzg1%0AKnItLjQ5ODUzMTQqaSksaHQoLS45NjkyNjYqdSsxLjg3NjAxMDgqcisuMDQxNTU2%0AKmkpLGh0KC4wNTU2NDM0KnUtLjIwNDAyNTkqcisxLjA1NzIyNTIqaSkpfWZ1bmN0%0AaW9uIGx0KG4sdCxlKXtyZXR1cm4gbj4wP25ldyBpdChNYXRoLmF0YW4yKGUsdCkq%0ATmEsTWF0aC5zcXJ0KHQqdCtlKmUpLG4pOm5ldyBpdCgwLzAsMC8wLG4pfWZ1bmN0%0AaW9uIHN0KG4pe3JldHVybiBuPi4yMDY4OTMwMzQ/bipuKm46KG4tNC8yOSkvNy43%0AODcwMzd9ZnVuY3Rpb24gZnQobil7cmV0dXJuIG4+LjAwODg1Nj9NYXRoLnBvdyhu%0ALDEvMyk6Ny43ODcwMzcqbis0LzI5fWZ1bmN0aW9uIGh0KG4pe3JldHVybiBNYXRo%0ALnJvdW5kKDI1NSooLjAwMzA0Pj1uPzEyLjkyKm46MS4wNTUqTWF0aC5wb3cobiwx%0ALzIuNCktLjA1NSkpfWZ1bmN0aW9uIGd0KG4sdCxlKXtyZXR1cm4gdGhpcyBpbnN0%0AYW5jZW9mIGd0Pyh0aGlzLnI9fn5uLHRoaXMuZz1+fnQsdm9pZCh0aGlzLmI9fn5l%0AKSk6YXJndW1lbnRzLmxlbmd0aDwyP24gaW5zdGFuY2VvZiBndD9uZXcgZ3Qobi5y%0ALG4uZyxuLmIpOm10KCIiK24sZ3QsdXQpOm5ldyBndChuLHQsZSl9ZnVuY3Rpb24g%0AcHQobil7cmV0dXJuIG5ldyBndChuPj4xNiwyNTUmbj4+OCwyNTUmbil9ZnVuY3Rp%0Ab24gdnQobil7cmV0dXJuIHB0KG4pKyIifWZ1bmN0aW9uIGR0KG4pe3JldHVybiAx%0ANj5uPyIwIitNYXRoLm1heCgwLG4pLnRvU3RyaW5nKDE2KTpNYXRoLm1pbigyNTUs%0AbikudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIG10KG4sdCxlKXt2YXIgcix1LGksbz0w%0ALGE9MCxjPTA7aWYocj0vKFthLXpdKylcKCguKilcKS9pLmV4ZWMobikpc3dpdGNo%0AKHU9clsyXS5zcGxpdCgiLCIpLHJbMV0pe2Nhc2UiaHNsIjpyZXR1cm4gZShwYXJz%0AZUZsb2F0KHVbMF0pLHBhcnNlRmxvYXQodVsxXSkvMTAwLHBhcnNlRmxvYXQodVsy%0AXSkvMTAwKTtjYXNlInJnYiI6cmV0dXJuIHQoX3QodVswXSksX3QodVsxXSksX3Qo%0AdVsyXSkpfXJldHVybihpPVphLmdldChuKSk/dChpLnIsaS5nLGkuYik6KG51bGw9%0APW58fCIjIiE9PW4uY2hhckF0KDApfHxpc05hTihpPXBhcnNlSW50KG4uc2xpY2Uo%0AMSksMTYpKXx8KDQ9PT1uLmxlbmd0aD8obz0oMzg0MCZpKT4+NCxvPW8+PjR8byxh%0APTI0MCZpLGE9YT4+NHxhLGM9MTUmaSxjPWM8PDR8Yyk6Nz09PW4ubGVuZ3RoJiYo%0Abz0oMTY3MTE2ODAmaSk+PjE2LGE9KDY1MjgwJmkpPj44LGM9MjU1JmkpKSx0KG8s%0AYSxjKSl9ZnVuY3Rpb24geXQobix0LGUpe3ZhciByLHUsaT1NYXRoLm1pbihuLz0y%0ANTUsdC89MjU1LGUvPTI1NSksbz1NYXRoLm1heChuLHQsZSksYT1vLWksYz0obytp%0AKS8yO3JldHVybiBhPyh1PS41PmM/YS8obytpKTphLygyLW8taSkscj1uPT1vPyh0%0ALWUpL2ErKGU+dD82OjApOnQ9PW8/KGUtbikvYSsyOihuLXQpL2ErNCxyKj02MCk6%0AKHI9MC8wLHU9Yz4wJiYxPmM/MDpyKSxuZXcgcnQocix1LGMpfWZ1bmN0aW9uIHh0%0AKG4sdCxlKXtuPU10KG4pLHQ9TXQodCksZT1NdChlKTt2YXIgcj1mdCgoLjQxMjQ1%0ANjQqbisuMzU3NTc2MSp0Ky4xODA0Mzc1KmUpL0hhKSx1PWZ0KCguMjEyNjcyOSpu%0AKy43MTUxNTIyKnQrLjA3MjE3NSplKS9GYSksaT1mdCgoLjAxOTMzMzkqbisuMTE5%0AMTkyKnQrLjk1MDMwNDEqZSkvT2EpO3JldHVybiBhdCgxMTYqdS0xNiw1MDAqKHIt%0AdSksMjAwKih1LWkpKX1mdW5jdGlvbiBNdChuKXtyZXR1cm4obi89MjU1KTw9LjA0%0AMDQ1P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlv%0AbiBfdChuKXt2YXIgdD1wYXJzZUZsb2F0KG4pO3JldHVybiIlIj09PW4uY2hhckF0%0AKG4ubGVuZ3RoLTEpP01hdGgucm91bmQoMi41NSp0KTp0fWZ1bmN0aW9uIGJ0KG4p%0Ae3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24oKXtyZXR1cm4g%0Abn19ZnVuY3Rpb24gd3Qobil7cmV0dXJuIG59ZnVuY3Rpb24gU3Qobil7cmV0dXJu%0AIGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJm%0AdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lLGU9bnVsbCksa3QodCxlLG4scil9fWZ1%0AbmN0aW9uIGt0KG4sdCxlLHIpe2Z1bmN0aW9uIHUoKXt2YXIgbix0PWMuc3RhdHVz%0AO2lmKCF0JiZBdChjKXx8dD49MjAwJiYzMDA+dHx8MzA0PT09dCl7dHJ5e249ZS5j%0AYWxsKGksYyl9Y2F0Y2gocil7cmV0dXJuIG8uZXJyb3IuY2FsbChpLHIpLHZvaWQg%0AMH1vLmxvYWQuY2FsbChpLG4pfWVsc2Ugby5lcnJvci5jYWxsKGksYyl9dmFyIGk9%0Ae30sbz1Wby5kaXNwYXRjaCgiYmVmb3Jlc2VuZCIsInByb2dyZXNzIiwibG9hZCIs%0AImVycm9yIiksYT17fSxjPW5ldyBYTUxIdHRwUmVxdWVzdCxsPW51bGw7cmV0dXJu%0AIUpvLlhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIGN8fCEvXiho%0AdHRwKHMpPzopP1wvXC8vLnRlc3Qobil8fChjPW5ldyBYRG9tYWluUmVxdWVzdCks%0AIm9ubG9hZCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj11OmMub25yZWFkeXN0YXRl%0AY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJnUoKX0sYy5vbnByb2dy%0AZXNzPWZ1bmN0aW9uKG4pe3ZhciB0PVZvLmV2ZW50O1ZvLmV2ZW50PW47dHJ5e28u%0AcHJvZ3Jlc3MuY2FsbChpLGMpfWZpbmFsbHl7Vm8uZXZlbnQ9dH19LGkuaGVhZGVy%0APWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49KG4rIiIpLnRvTG93ZXJDYXNlKCksYXJn%0AdW1lbnRzLmxlbmd0aDwyP2Fbbl06KG51bGw9PXQ/ZGVsZXRlIGFbbl06YVtuXT10%0AKyIiLGkpfSxpLm1pbWVUeXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu%0AbGVuZ3RoPyh0PW51bGw9PW4/bnVsbDpuKyIiLGkpOnR9LGkucmVzcG9uc2VUeXBl%0APWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4saSk6bH0s%0AaS5yZXNwb25zZT1mdW5jdGlvbihuKXtyZXR1cm4gZT1uLGl9LFsiZ2V0IiwicG9z%0AdCJdLmZvckVhY2goZnVuY3Rpb24obil7aVtuXT1mdW5jdGlvbigpe3JldHVybiBp%0ALnNlbmQuYXBwbHkoaSxbbl0uY29uY2F0KCRvKGFyZ3VtZW50cykpKX19KSxpLnNl%0AbmQ9ZnVuY3Rpb24oZSxyLHUpe2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVu%0AY3Rpb24iPT10eXBlb2YgciYmKHU9cixyPW51bGwpLGMub3BlbihlLG4sITApLG51%0AbGw9PXR8fCJhY2NlcHQiaW4gYXx8KGEuYWNjZXB0PXQrIiwqLyoiKSxjLnNldFJl%0AcXVlc3RIZWFkZXIpZm9yKHZhciBzIGluIGEpYy5zZXRSZXF1ZXN0SGVhZGVyKHMs%0AYVtzXSk7cmV0dXJuIG51bGwhPXQmJmMub3ZlcnJpZGVNaW1lVHlwZSYmYy5vdmVy%0AcmlkZU1pbWVUeXBlKHQpLG51bGwhPWwmJihjLnJlc3BvbnNlVHlwZT1sKSxudWxs%0AIT11JiZpLm9uKCJlcnJvciIsdSkub24oImxvYWQiLGZ1bmN0aW9uKG4pe3UobnVs%0AbCxuKX0pLG8uYmVmb3Jlc2VuZC5jYWxsKGksYyksYy5zZW5kKG51bGw9PXI/bnVs%0AbDpyKSxpfSxpLmFib3J0PWZ1bmN0aW9uKCl7cmV0dXJuIGMuYWJvcnQoKSxpfSxW%0Aby5yZWJpbmQoaSxvLCJvbiIpLG51bGw9PXI/aTppLmdldChFdChyKSl9ZnVuY3Rp%0Ab24gRXQobil7cmV0dXJuIDE9PT1uLmxlbmd0aD9mdW5jdGlvbih0LGUpe24obnVs%0AbD09dD9lOm51bGwpfTpufWZ1bmN0aW9uIEF0KG4pe3ZhciB0PW4ucmVzcG9uc2VU%0AeXBlO3JldHVybiB0JiYidGV4dCIhPT10P24ucmVzcG9uc2U6bi5yZXNwb25zZVRl%0AeHR9ZnVuY3Rpb24gQ3QoKXt2YXIgbj1OdCgpLHQ9enQoKS1uO3Q+MjQ/KGlzRmlu%0AaXRlKHQpJiYoY2xlYXJUaW1lb3V0KEJhKSxCYT1zZXRUaW1lb3V0KEN0LHQpKSwk%0AYT0wKTooJGE9MSxKYShDdCkpfWZ1bmN0aW9uIE50KCl7dmFyIG49RGF0ZS5ub3co%0AKTtmb3IoV2E9VmE7V2E7KW4+PVdhLnQmJihXYS5mPVdhLmMobi1XYS50KSksV2E9%0AV2EubjtyZXR1cm4gbn1mdW5jdGlvbiB6dCgpe2Zvcih2YXIgbix0PVZhLGU9MS8w%0AO3Q7KXQuZj90PW4/bi5uPXQubjpWYT10Lm46KHQudDxlJiYoZT10LnQpLHQ9KG49%0AdCkubik7cmV0dXJuIFhhPW4sZX1mdW5jdGlvbiBMdChuLHQpe3JldHVybiB0LShu%0AP01hdGguY2VpbChNYXRoLmxvZyhuKS9NYXRoLkxOMTApOjEpfWZ1bmN0aW9uIFR0%0AKG4sdCl7dmFyIGU9TWF0aC5wb3coMTAsMyppYSg4LXQpKTtyZXR1cm57c2NhbGU6%0AdD44P2Z1bmN0aW9uKG4pe3JldHVybiBuL2V9OmZ1bmN0aW9uKG4pe3JldHVybiBu%0AKmV9LHN5bWJvbDpufX1mdW5jdGlvbiBxdChuKXt2YXIgdD1uLmRlY2ltYWwsZT1u%0ALnRob3VzYW5kcyxyPW4uZ3JvdXBpbmcsdT1uLmN1cnJlbmN5LGk9cj9mdW5jdGlv%0AbihuKXtmb3IodmFyIHQ9bi5sZW5ndGgsdT1bXSxpPTAsbz1yWzBdO28+MCYmdD4w%0AOyl1LnB1c2gobi5zdWJzdHJpbmcodC09byx0K28pKSxvPXJbaT0oaSsxKSVyLmxl%0Abmd0aF07cmV0dXJuIHUucmV2ZXJzZSgpLmpvaW4oZSl9Ond0O3JldHVybiBmdW5j%0AdGlvbihuKXt2YXIgZT1LYS5leGVjKG4pLHI9ZVsxXXx8IiAiLG89ZVsyXXx8Ij4i%0ALGE9ZVszXXx8IiIsYz1lWzRdfHwiIixsPWVbNV0scz0rZVs2XSxmPWVbN10saD1l%0AWzhdLGc9ZVs5XSxwPTEsdj0iIixkPSIiLG09ITE7c3dpdGNoKGgmJihoPStoLnN1%0AYnN0cmluZygxKSksKGx8fCIwIj09PXImJiI9Ij09PW8pJiYobD1yPSIwIixvPSI9%0AIixmJiYocy09TWF0aC5mbG9vcigocy0xKS80KSkpLGcpe2Nhc2UibiI6Zj0hMCxn%0APSJnIjticmVhaztjYXNlIiUiOnA9MTAwLGQ9IiUiLGc9ImYiO2JyZWFrO2Nhc2Ui%0AcCI6cD0xMDAsZD0iJSIsZz0iciI7YnJlYWs7Y2FzZSJiIjpjYXNlIm8iOmNhc2Ui%0AeCI6Y2FzZSJYIjoiIyI9PT1jJiYodj0iMCIrZy50b0xvd2VyQ2FzZSgpKTtjYXNl%0AImMiOmNhc2UiZCI6bT0hMCxoPTA7YnJlYWs7Y2FzZSJzIjpwPS0xLGc9InIifSIk%0AIj09PWMmJih2PXVbMF0sZD11WzFdKSwiciIhPWd8fGh8fChnPSJnIiksbnVsbCE9%0AaCYmKCJnIj09Zz9oPU1hdGgubWF4KDEsTWF0aC5taW4oMjEsaCkpOigiZSI9PWd8%0AfCJmIj09ZykmJihoPU1hdGgubWF4KDAsTWF0aC5taW4oMjAsaCkpKSksZz1RYS5n%0AZXQoZyl8fFJ0O3ZhciB5PWwmJmY7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlPWQ7%0AaWYobSYmbiUxKXJldHVybiIiO3ZhciB1PTA+bnx8MD09PW4mJjA+MS9uPyhuPS1u%0ALCItIik6YTtpZigwPnApe3ZhciBjPVZvLmZvcm1hdFByZWZpeChuLGgpO249Yy5z%0AY2FsZShuKSxlPWMuc3ltYm9sK2R9ZWxzZSBuKj1wO249ZyhuLGgpO3ZhciB4PW4u%0AbGFzdEluZGV4T2YoIi4iKSxNPTA+eD9uOm4uc3Vic3RyaW5nKDAseCksXz0wPng/%0AIiI6dCtuLnN1YnN0cmluZyh4KzEpOyFsJiZmJiYoTT1pKE0pKTt2YXIgYj12Lmxl%0Abmd0aCtNLmxlbmd0aCtfLmxlbmd0aCsoeT8wOnUubGVuZ3RoKSx3PXM+Yj9uZXcg%0AQXJyYXkoYj1zLWIrMSkuam9pbihyKToiIjtyZXR1cm4geSYmKE09aSh3K00pKSx1%0AKz12LG49TStfLCgiPCI9PT1vP3Urbit3OiI+Ij09PW8/dyt1K246Il4iPT09bz93%0ALnN1YnN0cmluZygwLGI+Pj0xKSt1K24rdy5zdWJzdHJpbmcoYik6dSsoeT9uOncr%0AbikpK2V9fX1mdW5jdGlvbiBSdChuKXtyZXR1cm4gbisiIn1mdW5jdGlvbiBEdCgp%0Ae3RoaXMuXz1uZXcgRGF0ZShhcmd1bWVudHMubGVuZ3RoPjE/RGF0ZS5VVEMuYXBw%0AbHkodGhpcyxhcmd1bWVudHMpOmFyZ3VtZW50c1swXSl9ZnVuY3Rpb24gUHQobix0%0ALGUpe2Z1bmN0aW9uIHIodCl7dmFyIGU9bih0KSxyPWkoZSwxKTtyZXR1cm4gci10%0APnQtZT9lOnJ9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdChlPW4obmV3IHRjKGUtMSkp%0ALDEpLGV9ZnVuY3Rpb24gaShuLGUpe3JldHVybiB0KG49bmV3IHRjKCtuKSxlKSxu%0AfWZ1bmN0aW9uIG8obixyLGkpe3ZhciBvPXUobiksYT1bXTtpZihpPjEpZm9yKDty%0APm87KWUobyklaXx8YS5wdXNoKG5ldyBEYXRlKCtvKSksdChvLDEpO2Vsc2UgZm9y%0AKDtyPm87KWEucHVzaChuZXcgRGF0ZSgrbykpLHQobywxKTtyZXR1cm4gYX1mdW5j%0AdGlvbiBhKG4sdCxlKXt0cnl7dGM9RHQ7dmFyIHI9bmV3IER0O3JldHVybiByLl89%0AbixvKHIsdCxlKX1maW5hbGx5e3RjPURhdGV9fW4uZmxvb3I9bixuLnJvdW5kPXIs%0Abi5jZWlsPXUsbi5vZmZzZXQ9aSxuLnJhbmdlPW87dmFyIGM9bi51dGM9VXQobik7%0AcmV0dXJuIGMuZmxvb3I9YyxjLnJvdW5kPVV0KHIpLGMuY2VpbD1VdCh1KSxjLm9m%0AZnNldD1VdChpKSxjLnJhbmdlPWEsbn1mdW5jdGlvbiBVdChuKXtyZXR1cm4gZnVu%0AY3Rpb24odCxlKXt0cnl7dGM9RHQ7dmFyIHI9bmV3IER0O3JldHVybiByLl89dCxu%0AKHIsZSkuX31maW5hbGx5e3RjPURhdGV9fX1mdW5jdGlvbiBqdChuKXtmdW5jdGlv%0AbiB0KG4pe2Z1bmN0aW9uIHQodCl7Zm9yKHZhciBlLHUsaSxvPVtdLGE9LTEsYz0w%0AOysrYTxyOykzNz09PW4uY2hhckNvZGVBdChhKSYmKG8ucHVzaChuLnNsaWNlKGMs%0AYSkpLG51bGwhPSh1PXJjW2U9bi5jaGFyQXQoKythKV0pJiYoZT1uLmNoYXJBdCgr%0AK2EpKSwoaT1DW2VdKSYmKGU9aSh0LG51bGw9PXU/ImUiPT09ZT8iICI6IjAiOnUp%0AKSxvLnB1c2goZSksYz1hKzEpO3JldHVybiBvLnB1c2gobi5zbGljZShjLGEpKSxv%0ALmpvaW4oIiIpfXZhciByPW4ubGVuZ3RoO3JldHVybiB0LnBhcnNlPWZ1bmN0aW9u%0AKHQpe3ZhciByPXt5OjE5MDAsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjAsWjpudWxs%0AfSx1PWUocixuLHQsMCk7aWYodSE9dC5sZW5ndGgpcmV0dXJuIG51bGw7InAiaW4g%0AciYmKHIuSD1yLkglMTIrMTIqci5wKTt2YXIgaT1udWxsIT1yLlomJnRjIT09RHQs%0Abz1uZXcoaT9EdDp0Yyk7cmV0dXJuImoiaW4gcj9vLnNldEZ1bGxZZWFyKHIueSww%0ALHIuaik6InciaW4gciYmKCJXImluIHJ8fCJVImluIHIpPyhvLnNldEZ1bGxZZWFy%0AKHIueSwwLDEpLG8uc2V0RnVsbFllYXIoci55LDAsIlciaW4gcj8oci53KzYpJTcr%0ANypyLlctKG8uZ2V0RGF5KCkrNSklNzpyLncrNypyLlUtKG8uZ2V0RGF5KCkrNikl%0ANykpOm8uc2V0RnVsbFllYXIoci55LHIubSxyLmQpLG8uc2V0SG91cnMoci5IKygw%0AfHIuWi8xMDApLHIuTStyLlolMTAwLHIuUyxyLkwpLGk/by5fOm99LHQudG9TdHJp%0Abmc9ZnVuY3Rpb24oKXtyZXR1cm4gbn0sdH1mdW5jdGlvbiBlKG4sdCxlLHIpe2Zv%0Acih2YXIgdSxpLG8sYT0wLGM9dC5sZW5ndGgsbD1lLmxlbmd0aDtjPmE7KXtpZihy%0APj1sKXJldHVybi0xO2lmKHU9dC5jaGFyQ29kZUF0KGErKyksMzc9PT11KXtpZihv%0APXQuY2hhckF0KGErKyksaT1OW28gaW4gcmM/dC5jaGFyQXQoYSsrKTpvXSwhaXx8%0AKHI9aShuLGUscikpPDApcmV0dXJuLTF9ZWxzZSBpZih1IT1lLmNoYXJDb2RlQXQo%0AcisrKSlyZXR1cm4tMX1yZXR1cm4gcn1mdW5jdGlvbiByKG4sdCxlKXtiLmxhc3RJ%0AbmRleD0wO3ZhciByPWIuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gcj8obi53PXcu%0AZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rp%0Ab24gdShuLHQsZSl7TS5sYXN0SW5kZXg9MDt2YXIgcj1NLmV4ZWModC5zbGljZShl%0AKSk7cmV0dXJuIHI/KG4udz1fLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclsw%0AXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGkobix0LGUpe0UubGFzdEluZGV4PTA7dmFy%0AIHI9RS5leGVjKHQuc2xpY2UoZSkpO3JldHVybiByPyhuLm09QS5nZXQoclswXS50%0Ab0xvd2VyQ2FzZSgpKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBvKG4sdCxl%0AKXtTLmxhc3RJbmRleD0wO3ZhciByPVMuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4g%0Acj8obi5tPWsuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6%0ALTF9ZnVuY3Rpb24gYShuLHQscil7cmV0dXJuIGUobixDLmMudG9TdHJpbmcoKSx0%0ALHIpfWZ1bmN0aW9uIGMobix0LHIpe3JldHVybiBlKG4sQy54LnRvU3RyaW5nKCks%0AdCxyKX1mdW5jdGlvbiBsKG4sdCxyKXtyZXR1cm4gZShuLEMuWC50b1N0cmluZygp%0ALHQscil9ZnVuY3Rpb24gcyhuLHQsZSl7dmFyIHI9eC5nZXQodC5zbGljZShlLGUr%0APTIpLnRvTG93ZXJDYXNlKCkpO3JldHVybiBudWxsPT1yPy0xOihuLnA9cixlKX12%0AYXIgZj1uLmRhdGVUaW1lLGg9bi5kYXRlLGc9bi50aW1lLHA9bi5wZXJpb2RzLHY9%0Abi5kYXlzLGQ9bi5zaG9ydERheXMsbT1uLm1vbnRocyx5PW4uc2hvcnRNb250aHM7%0AdC51dGM9ZnVuY3Rpb24obil7ZnVuY3Rpb24gZShuKXt0cnl7dGM9RHQ7dmFyIHQ9%0AbmV3IHRjO3JldHVybiB0Ll89bixyKHQpfWZpbmFsbHl7dGM9RGF0ZX19dmFyIHI9%0AdChuKTtyZXR1cm4gZS5wYXJzZT1mdW5jdGlvbihuKXt0cnl7dGM9RHQ7dmFyIHQ9%0Aci5wYXJzZShuKTtyZXR1cm4gdCYmdC5ffWZpbmFsbHl7dGM9RGF0ZX19LGUudG9T%0AdHJpbmc9ci50b1N0cmluZyxlfSx0Lm11bHRpPXQudXRjLm11bHRpPXVlO3ZhciB4%0APVZvLm1hcCgpLE09RnQodiksXz1PdCh2KSxiPUZ0KGQpLHc9T3QoZCksUz1GdCht%0AKSxrPU90KG0pLEU9RnQoeSksQT1PdCh5KTtwLmZvckVhY2goZnVuY3Rpb24obix0%0AKXt4LnNldChuLnRvTG93ZXJDYXNlKCksdCl9KTt2YXIgQz17YTpmdW5jdGlvbihu%0AKXtyZXR1cm4gZFtuLmdldERheSgpXX0sQTpmdW5jdGlvbihuKXtyZXR1cm4gdltu%0ALmdldERheSgpXX0sYjpmdW5jdGlvbihuKXtyZXR1cm4geVtuLmdldE1vbnRoKCld%0AfSxCOmZ1bmN0aW9uKG4pe3JldHVybiBtW24uZ2V0TW9udGgoKV19LGM6dChmKSxk%0AOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEh0KG4uZ2V0RGF0ZSgpLHQsMil9LGU6ZnVu%0AY3Rpb24obix0KXtyZXR1cm4gSHQobi5nZXREYXRlKCksdCwyKX0sSDpmdW5jdGlv%0AbihuLHQpe3JldHVybiBIdChuLmdldEhvdXJzKCksdCwyKX0sSTpmdW5jdGlvbihu%0ALHQpe3JldHVybiBIdChuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9LGo6ZnVuY3Rp%0Ab24obix0KXtyZXR1cm4gSHQoMStuYy5kYXlPZlllYXIobiksdCwzKX0sTDpmdW5j%0AdGlvbihuLHQpe3JldHVybiBIdChuLmdldE1pbGxpc2Vjb25kcygpLHQsMyl9LG06%0AZnVuY3Rpb24obix0KXtyZXR1cm4gSHQobi5nZXRNb250aCgpKzEsdCwyKX0sTTpm%0AdW5jdGlvbihuLHQpe3JldHVybiBIdChuLmdldE1pbnV0ZXMoKSx0LDIpfSxwOmZ1%0AbmN0aW9uKG4pe3JldHVybiBwWysobi5nZXRIb3VycygpPj0xMildfSxTOmZ1bmN0%0AaW9uKG4sdCl7cmV0dXJuIEh0KG4uZ2V0U2Vjb25kcygpLHQsMil9LFU6ZnVuY3Rp%0Ab24obix0KXtyZXR1cm4gSHQobmMuc3VuZGF5T2ZZZWFyKG4pLHQsMil9LHc6ZnVu%0AY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF5KCl9LFc6ZnVuY3Rpb24obix0KXtyZXR1%0Acm4gSHQobmMubW9uZGF5T2ZZZWFyKG4pLHQsMil9LHg6dChoKSxYOnQoZykseTpm%0AdW5jdGlvbihuLHQpe3JldHVybiBIdChuLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9%0ALFk6ZnVuY3Rpb24obix0KXtyZXR1cm4gSHQobi5nZXRGdWxsWWVhcigpJTFlNCx0%0ALDQpfSxaOmVlLCIlIjpmdW5jdGlvbigpe3JldHVybiIlIn19LE49e2E6cixBOnUs%0AYjppLEI6byxjOmEsZDpKdCxlOkp0LEg6S3QsSTpLdCxqOkd0LEw6dGUsbTpXdCxN%0AOlF0LHA6cyxTOm5lLFU6SXQsdzpZdCxXOlp0LHg6YyxYOmwseTpYdCxZOlZ0LFo6%0AJHQsIiUiOnJlfTtyZXR1cm4gdH1mdW5jdGlvbiBIdChuLHQsZSl7dmFyIHI9MD5u%0APyItIjoiIix1PShyPy1uOm4pKyIiLGk9dS5sZW5ndGg7cmV0dXJuIHIrKGU+aT9u%0AZXcgQXJyYXkoZS1pKzEpLmpvaW4odCkrdTp1KX1mdW5jdGlvbiBGdChuKXtyZXR1%0Acm4gbmV3IFJlZ0V4cCgiXig/OiIrbi5tYXAoVm8ucmVxdW90ZSkuam9pbigifCIp%0AKyIpIiwiaSIpfWZ1bmN0aW9uIE90KG4pe2Zvcih2YXIgdD1uZXcgbyxlPS0xLHI9%0Abi5sZW5ndGg7KytlPHI7KXQuc2V0KG5bZV0udG9Mb3dlckNhc2UoKSxlKTtyZXR1%0Acm4gdH1mdW5jdGlvbiBZdChuLHQsZSl7dWMubGFzdEluZGV4PTA7dmFyIHI9dWMu%0AZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIHI/KG4udz0rclswXSxlK3JbMF0u%0AbGVuZ3RoKTotMX1mdW5jdGlvbiBJdChuLHQsZSl7dWMubGFzdEluZGV4PTA7dmFy%0AIHI9dWMuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gcj8obi5VPStyWzBdLGUrclsw%0AXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFp0KG4sdCxlKXt1Yy5sYXN0SW5kZXg9MDt2%0AYXIgcj11Yy5leGVjKHQuc2xpY2UoZSkpO3JldHVybiByPyhuLlc9K3JbMF0sZSty%0AWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVnQobix0LGUpe3VjLmxhc3RJbmRleD0w%0AO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiByPyhuLnk9K3Jb%0AMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWHQobix0LGUpe3VjLmxhc3RJ%0AbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiByPyhu%0ALnk9QnQoK3JbMF0pLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICR0KG4sdCxl%0AKXtyZXR1cm4vXlsrLV1cZHs0fSQvLnRlc3QodD10LnNsaWNlKGUsZSs1KSk/KG4u%0AWj0tdCxlKzUpOi0xfWZ1bmN0aW9uIEJ0KG4pe3JldHVybiBuKyhuPjY4PzE5MDA6%0AMmUzKX1mdW5jdGlvbiBXdChuLHQsZSl7dWMubGFzdEluZGV4PTA7dmFyIHI9dWMu%0AZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KG4ubT1yWzBdLTEsZStyWzBd%0ALmxlbmd0aCk6LTF9ZnVuY3Rpb24gSnQobix0LGUpe3VjLmxhc3RJbmRleD0wO3Zh%0AciByPXVjLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiByPyhuLmQ9K3JbMF0s%0AZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gR3Qobix0LGUpe3VjLmxhc3RJbmRl%0AeD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrMykpO3JldHVybiByPyhuLmo9%0AK3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS3Qobix0LGUpe3VjLmxh%0Ac3RJbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBy%0APyhuLkg9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUXQobix0LGUp%0Ae3VjLmxhc3RJbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrMikpO3Jl%0AdHVybiByPyhuLk09K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbmUo%0Abix0LGUpe3VjLmxhc3RJbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUr%0AMikpO3JldHVybiByPyhuLlM9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rp%0Ab24gdGUobix0LGUpe3VjLmxhc3RJbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGlj%0AZShlLGUrMykpO3JldHVybiByPyhuLkw9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9%0AZnVuY3Rpb24gZWUobil7dmFyIHQ9bi5nZXRUaW1lem9uZU9mZnNldCgpLGU9dD4w%0APyItIjoiKyIscj0wfGlhKHQpLzYwLHU9aWEodCklNjA7cmV0dXJuIGUrSHQociwi%0AMCIsMikrSHQodSwiMCIsMil9ZnVuY3Rpb24gcmUobix0LGUpe2ljLmxhc3RJbmRl%0AeD0wO3ZhciByPWljLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiByP2Urclsw%0AXS5sZW5ndGg6LTF9ZnVuY3Rpb24gdWUobil7Zm9yKHZhciB0PW4ubGVuZ3RoLGU9%0ALTE7KytlPHQ7KW5bZV1bMF09dGhpcyhuW2VdWzBdKTtyZXR1cm4gZnVuY3Rpb24o%0AdCl7Zm9yKHZhciBlPTAscj1uW2VdOyFyWzFdKHQpOylyPW5bKytlXTtyZXR1cm4g%0AclswXSh0KX19ZnVuY3Rpb24gaWUoKXt9ZnVuY3Rpb24gb2Uobix0LGUpe3ZhciBy%0APWUucz1uK3QsdT1yLW4saT1yLXU7ZS50PW4taSsodC11KX1mdW5jdGlvbiBhZShu%0ALHQpe24mJmxjLmhhc093blByb3BlcnR5KG4udHlwZSkmJmxjW24udHlwZV0obix0%0AKX1mdW5jdGlvbiBjZShuLHQsZSl7dmFyIHIsdT0tMSxpPW4ubGVuZ3RoLWU7Zm9y%0AKHQubGluZVN0YXJ0KCk7Kyt1PGk7KXI9blt1XSx0LnBvaW50KHJbMF0sclsxXSxy%0AWzJdKTt0LmxpbmVFbmQoKX1mdW5jdGlvbiBsZShuLHQpe3ZhciBlPS0xLHI9bi5s%0AZW5ndGg7Zm9yKHQucG9seWdvblN0YXJ0KCk7KytlPHI7KWNlKG5bZV0sdCwxKTt0%0ALnBvbHlnb25FbmQoKX1mdW5jdGlvbiBzZSgpe2Z1bmN0aW9uIG4obix0KXtuKj1D%0AYSx0PXQqQ2EvMit3YS80O3ZhciBlPW4tcixvPWU+PTA/MTotMSxhPW8qZSxjPU1h%0AdGguY29zKHQpLGw9TWF0aC5zaW4odCkscz1pKmwsZj11KmMrcypNYXRoLmNvcyhh%0AKSxoPXMqbypNYXRoLnNpbihhKTtmYy5hZGQoTWF0aC5hdGFuMihoLGYpKSxyPW4s%0AdT1jLGk9bH12YXIgdCxlLHIsdSxpO2hjLnBvaW50PWZ1bmN0aW9uKG8sYSl7aGMu%0AcG9pbnQ9bixyPSh0PW8pKkNhLHU9TWF0aC5jb3MoYT0oZT1hKSpDYS8yK3dhLzQp%0ALGk9TWF0aC5zaW4oYSl9LGhjLmxpbmVFbmQ9ZnVuY3Rpb24oKXtuKHQsZSl9fWZ1%0AbmN0aW9uIGZlKG4pe3ZhciB0PW5bMF0sZT1uWzFdLHI9TWF0aC5jb3MoZSk7cmV0%0AdXJuW3IqTWF0aC5jb3ModCkscipNYXRoLnNpbih0KSxNYXRoLnNpbihlKV19ZnVu%0AY3Rpb24gaGUobix0KXtyZXR1cm4gblswXSp0WzBdK25bMV0qdFsxXStuWzJdKnRb%0AMl19ZnVuY3Rpb24gZ2Uobix0KXtyZXR1cm5bblsxXSp0WzJdLW5bMl0qdFsxXSxu%0AWzJdKnRbMF0tblswXSp0WzJdLG5bMF0qdFsxXS1uWzFdKnRbMF1dfWZ1bmN0aW9u%0AIHBlKG4sdCl7blswXSs9dFswXSxuWzFdKz10WzFdLG5bMl0rPXRbMl19ZnVuY3Rp%0Ab24gdmUobix0KXtyZXR1cm5bblswXSp0LG5bMV0qdCxuWzJdKnRdfWZ1bmN0aW9u%0AIGRlKG4pe3ZhciB0PU1hdGguc3FydChuWzBdKm5bMF0rblsxXSpuWzFdK25bMl0q%0AblsyXSk7blswXS89dCxuWzFdLz10LG5bMl0vPXR9ZnVuY3Rpb24gbWUobil7cmV0%0AdXJuW01hdGguYXRhbjIoblsxXSxuWzBdKSxHKG5bMl0pXX1mdW5jdGlvbiB5ZShu%0ALHQpe3JldHVybiBpYShuWzBdLXRbMF0pPEVhJiZpYShuWzFdLXRbMV0pPEVhfWZ1%0AbmN0aW9uIHhlKG4sdCl7bio9Q2E7dmFyIGU9TWF0aC5jb3ModCo9Q2EpO01lKGUq%0ATWF0aC5jb3MobiksZSpNYXRoLnNpbihuKSxNYXRoLnNpbih0KSl9ZnVuY3Rpb24g%0ATWUobix0LGUpeysrZ2MsdmMrPShuLXZjKS9nYyxkYys9KHQtZGMpL2djLG1jKz0o%0AZS1tYykvZ2N9ZnVuY3Rpb24gX2UoKXtmdW5jdGlvbiBuKG4sdSl7bio9Q2E7dmFy%0AIGk9TWF0aC5jb3ModSo9Q2EpLG89aSpNYXRoLmNvcyhuKSxhPWkqTWF0aC5zaW4o%0AbiksYz1NYXRoLnNpbih1KSxsPU1hdGguYXRhbjIoTWF0aC5zcXJ0KChsPWUqYy1y%0AKmEpKmwrKGw9cipvLXQqYykqbCsobD10KmEtZSpvKSpsKSx0Km8rZSphK3IqYyk7%0AcGMrPWwseWMrPWwqKHQrKHQ9bykpLHhjKz1sKihlKyhlPWEpKSxNYys9bCoociso%0Acj1jKSksTWUodCxlLHIpfXZhciB0LGUscjtTYy5wb2ludD1mdW5jdGlvbih1LGkp%0Ae3UqPUNhO3ZhciBvPU1hdGguY29zKGkqPUNhKTt0PW8qTWF0aC5jb3ModSksZT1v%0AKk1hdGguc2luKHUpLHI9TWF0aC5zaW4oaSksU2MucG9pbnQ9bixNZSh0LGUscil9%0AfWZ1bmN0aW9uIGJlKCl7U2MucG9pbnQ9eGV9ZnVuY3Rpb24gd2UoKXtmdW5jdGlv%0AbiBuKG4sdCl7bio9Q2E7dmFyIGU9TWF0aC5jb3ModCo9Q2EpLG89ZSpNYXRoLmNv%0AcyhuKSxhPWUqTWF0aC5zaW4obiksYz1NYXRoLnNpbih0KSxsPXUqYy1pKmEscz1p%0AKm8tcipjLGY9ciphLXUqbyxoPU1hdGguc3FydChsKmwrcypzK2YqZiksZz1yKm8r%0AdSphK2kqYyxwPWgmJi1KKGcpL2gsdj1NYXRoLmF0YW4yKGgsZyk7X2MrPXAqbCxi%0AYys9cCpzLHdjKz1wKmYscGMrPXYseWMrPXYqKHIrKHI9bykpLHhjKz12Kih1Kyh1%0APWEpKSxNYys9diooaSsoaT1jKSksTWUocix1LGkpfXZhciB0LGUscix1LGk7U2Mu%0AcG9pbnQ9ZnVuY3Rpb24obyxhKXt0PW8sZT1hLFNjLnBvaW50PW4sbyo9Q2E7dmFy%0AIGM9TWF0aC5jb3MoYSo9Q2EpO3I9YypNYXRoLmNvcyhvKSx1PWMqTWF0aC5zaW4o%0AbyksaT1NYXRoLnNpbihhKSxNZShyLHUsaSl9LFNjLmxpbmVFbmQ9ZnVuY3Rpb24o%0AKXtuKHQsZSksU2MubGluZUVuZD1iZSxTYy5wb2ludD14ZX19ZnVuY3Rpb24gU2Uo%0AKXtyZXR1cm4hMH1mdW5jdGlvbiBrZShuLHQsZSxyLHUpe3ZhciBpPVtdLG89W107%0AaWYobi5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCEoKHQ9bi5sZW5ndGgtMSk8PTAp%0AKXt2YXIgdCxlPW5bMF0scj1uW3RdO2lmKHllKGUscikpe3UubGluZVN0YXJ0KCk7%0AZm9yKHZhciBhPTA7dD5hOysrYSl1LnBvaW50KChlPW5bYV0pWzBdLGVbMV0pO3Jl%0AdHVybiB1LmxpbmVFbmQoKSx2b2lkIDB9dmFyIGM9bmV3IEFlKGUsbixudWxsLCEw%0AKSxsPW5ldyBBZShlLG51bGwsYywhMSk7Yy5vPWwsaS5wdXNoKGMpLG8ucHVzaChs%0AKSxjPW5ldyBBZShyLG4sbnVsbCwhMSksbD1uZXcgQWUocixudWxsLGMsITApLGMu%0Abz1sLGkucHVzaChjKSxvLnB1c2gobCl9fSksby5zb3J0KHQpLEVlKGkpLEVlKG8p%0ALGkubGVuZ3RoKXtmb3IodmFyIGE9MCxjPWUsbD1vLmxlbmd0aDtsPmE7KythKW9b%0AYV0uZT1jPSFjO2Zvcih2YXIgcyxmLGg9aVswXTs7KXtmb3IodmFyIGc9aCxwPSEw%0AO2cudjspaWYoKGc9Zy5uKT09PWgpcmV0dXJuO3M9Zy56LHUubGluZVN0YXJ0KCk7%0AZG97aWYoZy52PWcuby52PSEwLGcuZSl7aWYocClmb3IodmFyIGE9MCxsPXMubGVu%0AZ3RoO2w+YTsrK2EpdS5wb2ludCgoZj1zW2FdKVswXSxmWzFdKTtlbHNlIHIoZy54%0ALGcubi54LDEsdSk7Zz1nLm59ZWxzZXtpZihwKXtzPWcucC56O2Zvcih2YXIgYT1z%0ALmxlbmd0aC0xO2E+PTA7LS1hKXUucG9pbnQoKGY9c1thXSlbMF0sZlsxXSl9ZWxz%0AZSByKGcueCxnLnAueCwtMSx1KTtnPWcucH1nPWcubyxzPWcueixwPSFwfXdoaWxl%0AKCFnLnYpO3UubGluZUVuZCgpfX19ZnVuY3Rpb24gRWUobil7aWYodD1uLmxlbmd0%0AaCl7Zm9yKHZhciB0LGUscj0wLHU9blswXTsrK3I8dDspdS5uPWU9bltyXSxlLnA9%0AdSx1PWU7dS5uPWU9blswXSxlLnA9dX19ZnVuY3Rpb24gQWUobix0LGUscil7dGhp%0Acy54PW4sdGhpcy56PXQsdGhpcy5vPWUsdGhpcy5lPXIsdGhpcy52PSExLHRoaXMu%0Abj10aGlzLnA9bnVsbH1mdW5jdGlvbiBDZShuLHQsZSxyKXtyZXR1cm4gZnVuY3Rp%0Ab24odSxpKXtmdW5jdGlvbiBvKHQsZSl7dmFyIHI9dSh0LGUpO24odD1yWzBdLGU9%0AclsxXSkmJmkucG9pbnQodCxlKX1mdW5jdGlvbiBhKG4sdCl7dmFyIGU9dShuLHQp%0AO2QucG9pbnQoZVswXSxlWzFdKX1mdW5jdGlvbiBjKCl7eS5wb2ludD1hLGQubGlu%0AZVN0YXJ0KCl9ZnVuY3Rpb24gbCgpe3kucG9pbnQ9byxkLmxpbmVFbmQoKX1mdW5j%0AdGlvbiBzKG4sdCl7di5wdXNoKFtuLHRdKTt2YXIgZT11KG4sdCk7TS5wb2ludChl%0AWzBdLGVbMV0pfWZ1bmN0aW9uIGYoKXtNLmxpbmVTdGFydCgpLHY9W119ZnVuY3Rp%0Ab24gaCgpe3ModlswXVswXSx2WzBdWzFdKSxNLmxpbmVFbmQoKTt2YXIgbix0PU0u%0AY2xlYW4oKSxlPXguYnVmZmVyKCkscj1lLmxlbmd0aDtpZih2LnBvcCgpLHAucHVz%0AaCh2KSx2PW51bGwscilpZigxJnQpe249ZVswXTt2YXIgdSxyPW4ubGVuZ3RoLTEs%0Abz0tMTtpZihyPjApe2ZvcihffHwoaS5wb2x5Z29uU3RhcnQoKSxfPSEwKSxpLmxp%0AbmVTdGFydCgpOysrbzxyOylpLnBvaW50KCh1PW5bb10pWzBdLHVbMV0pO2kubGlu%0AZUVuZCgpfX1lbHNlIHI+MSYmMiZ0JiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5z%0AaGlmdCgpKSksZy5wdXNoKGUuZmlsdGVyKE5lKSl9dmFyIGcscCx2LGQ9dChpKSxt%0APXUuaW52ZXJ0KHJbMF0sclsxXSkseT17cG9pbnQ6byxsaW5lU3RhcnQ6YyxsaW5l%0ARW5kOmwscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eS5wb2ludD1zLHkubGluZVN0%0AYXJ0PWYseS5saW5lRW5kPWgsZz1bXSxwPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9u%0AKCl7eS5wb2ludD1vLHkubGluZVN0YXJ0PWMseS5saW5lRW5kPWwsZz1Wby5tZXJn%0AZShnKTt2YXIgbj1EZShtLHApO2cubGVuZ3RoPyhffHwoaS5wb2x5Z29uU3RhcnQo%0AKSxfPSEwKSxrZShnLExlLG4sZSxpKSk6biYmKF98fChpLnBvbHlnb25TdGFydCgp%0ALF89ITApLGkubGluZVN0YXJ0KCksZShudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQo%0AKSksXyYmKGkucG9seWdvbkVuZCgpLF89ITEpLGc9cD1udWxsfSxzcGhlcmU6ZnVu%0AY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCksZShudWxsLG51%0AbGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19LHg9emUoKSxNPXQo%0AeCksXz0hMTtyZXR1cm4geX19ZnVuY3Rpb24gTmUobil7cmV0dXJuIG4ubGVuZ3Ro%0APjF9ZnVuY3Rpb24gemUoKXt2YXIgbix0PVtdO3JldHVybntsaW5lU3RhcnQ6ZnVu%0AY3Rpb24oKXt0LnB1c2gobj1bXSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7bi5wdXNo%0AKFt0LGVdKX0sbGluZUVuZDp2LGJ1ZmZlcjpmdW5jdGlvbigpe3ZhciBlPXQ7cmV0%0AdXJuIHQ9W10sbj1udWxsLGV9LHJlam9pbjpmdW5jdGlvbigpe3QubGVuZ3RoPjEm%0AJnQucHVzaCh0LnBvcCgpLmNvbmNhdCh0LnNoaWZ0KCkpKX19fWZ1bmN0aW9uIExl%0AKG4sdCl7cmV0dXJuKChuPW4ueClbMF08MD9uWzFdLWthLUVhOmthLW5bMV0pLSgo%0AdD10LngpWzBdPDA/dFsxXS1rYS1FYTprYS10WzFdKX1mdW5jdGlvbiBUZShuKXt2%0AYXIgdCxlPTAvMCxyPTAvMCx1PTAvMDtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9u%0AKCl7bi5saW5lU3RhcnQoKSx0PTF9LHBvaW50OmZ1bmN0aW9uKGksbyl7dmFyIGE9%0AaT4wP3dhOi13YSxjPWlhKGktZSk7aWEoYy13YSk8RWE/KG4ucG9pbnQoZSxyPShy%0AK28pLzI+MD9rYTota2EpLG4ucG9pbnQodSxyKSxuLmxpbmVFbmQoKSxuLmxpbmVT%0AdGFydCgpLG4ucG9pbnQoYSxyKSxuLnBvaW50KGksciksdD0wKTp1IT09YSYmYz49%0Ad2EmJihpYShlLXUpPEVhJiYoZS09dSpFYSksaWEoaS1hKTxFYSYmKGktPWEqRWEp%0ALHI9cWUoZSxyLGksbyksbi5wb2ludCh1LHIpLG4ubGluZUVuZCgpLG4ubGluZVN0%0AYXJ0KCksbi5wb2ludChhLHIpLHQ9MCksbi5wb2ludChlPWkscj1vKSx1PWF9LGxp%0AbmVFbmQ6ZnVuY3Rpb24oKXtuLmxpbmVFbmQoKSxlPXI9MC8wfSxjbGVhbjpmdW5j%0AdGlvbigpe3JldHVybiAyLXR9fX1mdW5jdGlvbiBxZShuLHQsZSxyKXt2YXIgdSxp%0ALG89TWF0aC5zaW4obi1lKTtyZXR1cm4gaWEobyk+RWE/TWF0aC5hdGFuKChNYXRo%0ALnNpbih0KSooaT1NYXRoLmNvcyhyKSkqTWF0aC5zaW4oZSktTWF0aC5zaW4ocikq%0AKHU9TWF0aC5jb3ModCkpKk1hdGguc2luKG4pKS8odSppKm8pKToodCtyKS8yfWZ1%0AbmN0aW9uIFJlKG4sdCxlLHIpe3ZhciB1O2lmKG51bGw9PW4pdT1lKmthLHIucG9p%0AbnQoLXdhLHUpLHIucG9pbnQoMCx1KSxyLnBvaW50KHdhLHUpLHIucG9pbnQod2Es%0AMCksci5wb2ludCh3YSwtdSksci5wb2ludCgwLC11KSxyLnBvaW50KC13YSwtdSks%0Aci5wb2ludCgtd2EsMCksci5wb2ludCgtd2EsdSk7ZWxzZSBpZihpYShuWzBdLXRb%0AMF0pPkVhKXt2YXIgaT1uWzBdPHRbMF0/d2E6LXdhO3U9ZSppLzIsci5wb2ludCgt%0AaSx1KSxyLnBvaW50KDAsdSksci5wb2ludChpLHUpfWVsc2Ugci5wb2ludCh0WzBd%0ALHRbMV0pfWZ1bmN0aW9uIERlKG4sdCl7dmFyIGU9blswXSxyPW5bMV0sdT1bTWF0%0AaC5zaW4oZSksLU1hdGguY29zKGUpLDBdLGk9MCxvPTA7ZmMucmVzZXQoKTtmb3Io%0AdmFyIGE9MCxjPXQubGVuZ3RoO2M+YTsrK2Epe3ZhciBsPXRbYV0scz1sLmxlbmd0%0AaDtpZihzKWZvcih2YXIgZj1sWzBdLGg9ZlswXSxnPWZbMV0vMit3YS80LHA9TWF0%0AaC5zaW4oZyksdj1NYXRoLmNvcyhnKSxkPTE7Oyl7ZD09PXMmJihkPTApLG49bFtk%0AXTt2YXIgbT1uWzBdLHk9blsxXS8yK3dhLzQseD1NYXRoLnNpbih5KSxNPU1hdGgu%0AY29zKHkpLF89bS1oLGI9Xz49MD8xOi0xLHc9YipfLFM9dz53YSxrPXAqeDtpZihm%0AYy5hZGQoTWF0aC5hdGFuMihrKmIqTWF0aC5zaW4odyksdipNK2sqTWF0aC5jb3Mo%0AdykpKSxpKz1TP18rYipTYTpfLFNeaD49ZV5tPj1lKXt2YXIgRT1nZShmZShmKSxm%0AZShuKSk7ZGUoRSk7dmFyIEE9Z2UodSxFKTtkZShBKTt2YXIgQz0oU15fPj0wPy0x%0AOjEpKkcoQVsyXSk7KHI+Q3x8cj09PUMmJihFWzBdfHxFWzFdKSkmJihvKz1TXl8+%0APTA/MTotMSl9aWYoIWQrKylicmVhaztoPW0scD14LHY9TSxmPW59fXJldHVybigt%0ARWE+aXx8RWE+aSYmMD5mYyleMSZvfWZ1bmN0aW9uIFBlKG4pe2Z1bmN0aW9uIHQo%0Abix0KXtyZXR1cm4gTWF0aC5jb3MobikqTWF0aC5jb3ModCk+aX1mdW5jdGlvbiBl%0AKG4pe3ZhciBlLGksYyxsLHM7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2w9%0AYz0hMSxzPTF9LHBvaW50OmZ1bmN0aW9uKGYsaCl7dmFyIGcscD1bZixoXSx2PXQo%0AZixoKSxkPW8/dj8wOnUoZixoKTp2P3UoZisoMD5mP3dhOi13YSksaCk6MDtpZigh%0AZSYmKGw9Yz12KSYmbi5saW5lU3RhcnQoKSx2IT09YyYmKGc9cihlLHApLCh5ZShl%0ALGcpfHx5ZShwLGcpKSYmKHBbMF0rPUVhLHBbMV0rPUVhLHY9dChwWzBdLHBbMV0p%0AKSksdiE9PWMpcz0wLHY/KG4ubGluZVN0YXJ0KCksZz1yKHAsZSksbi5wb2ludChn%0AWzBdLGdbMV0pKTooZz1yKGUscCksbi5wb2ludChnWzBdLGdbMV0pLG4ubGluZUVu%0AZCgpKSxlPWc7ZWxzZSBpZihhJiZlJiZvXnYpe3ZhciBtO2QmaXx8IShtPXIocCxl%0ALCEwKSl8fChzPTAsbz8obi5saW5lU3RhcnQoKSxuLnBvaW50KG1bMF1bMF0sbVsw%0AXVsxXSksbi5wb2ludChtWzFdWzBdLG1bMV1bMV0pLG4ubGluZUVuZCgpKToobi5w%0Ab2ludChtWzFdWzBdLG1bMV1bMV0pLG4ubGluZUVuZCgpLG4ubGluZVN0YXJ0KCks%0Abi5wb2ludChtWzBdWzBdLG1bMF1bMV0pKSl9IXZ8fGUmJnllKGUscCl8fG4ucG9p%0AbnQocFswXSxwWzFdKSxlPXAsYz12LGk9ZH0sbGluZUVuZDpmdW5jdGlvbigpe2Mm%0AJm4ubGluZUVuZCgpLGU9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gc3wo%0AbCYmYyk8PDF9fX1mdW5jdGlvbiByKG4sdCxlKXt2YXIgcj1mZShuKSx1PWZlKHQp%0ALG89WzEsMCwwXSxhPWdlKHIsdSksYz1oZShhLGEpLGw9YVswXSxzPWMtbCpsO2lm%0AKCFzKXJldHVybiFlJiZuO3ZhciBmPWkqYy9zLGg9LWkqbC9zLGc9Z2UobyxhKSxw%0APXZlKG8sZiksdj12ZShhLGgpO3BlKHAsdik7dmFyIGQ9ZyxtPWhlKHAsZCkseT1o%0AZShkLGQpLHg9bSptLXkqKGhlKHAscCktMSk7aWYoISgwPngpKXt2YXIgTT1NYXRo%0ALnNxcnQoeCksXz12ZShkLCgtbS1NKS95KTtpZihwZShfLHApLF89bWUoXyksIWUp%0AcmV0dXJuIF87dmFyIGIsdz1uWzBdLFM9dFswXSxrPW5bMV0sRT10WzFdO3c+UyYm%0AKGI9dyx3PVMsUz1iKTt2YXIgQT1TLXcsQz1pYShBLXdhKTxFYSxOPUN8fEVhPkE7%0AaWYoIUMmJms+RSYmKGI9ayxrPUUsRT1iKSxOP0M/aytFPjBeX1sxXTwoaWEoX1sw%0AXS13KTxFYT9rOkUpOms8PV9bMV0mJl9bMV08PUU6QT53YV4odzw9X1swXSYmX1sw%0AXTw9Uykpe3ZhciB6PXZlKGQsKC1tK00pL3kpO3JldHVybiBwZSh6LHApLFtfLG1l%0AKHopXX19fWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1vP246d2Etbix1PTA7cmV0dXJu%0ALXI+dD91fD0xOnQ+ciYmKHV8PTIpLC1yPmU/dXw9NDplPnImJih1fD04KSx1fXZh%0AciBpPU1hdGguY29zKG4pLG89aT4wLGE9aWEoaSk+RWEsYz1zcihuLDYqQ2EpO3Jl%0AdHVybiBDZSh0LGUsYyxvP1swLC1uXTpbLXdhLG4td2FdKX1mdW5jdGlvbiBVZShu%0ALHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGksbz11LmEsYT11LmIsYz1v%0ALngsbD1vLnkscz1hLngsZj1hLnksaD0wLGc9MSxwPXMtYyx2PWYtbDtpZihpPW4t%0AYyxwfHwhKGk+MCkpe2lmKGkvPXAsMD5wKXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9%0AaSl9ZWxzZSBpZihwPjApe2lmKGk+ZylyZXR1cm47aT5oJiYoaD1pKX1pZihpPWUt%0AYyxwfHwhKDA+aSkpe2lmKGkvPXAsMD5wKXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9%0AaSl9ZWxzZSBpZihwPjApe2lmKGg+aSlyZXR1cm47Zz5pJiYoZz1pKX1pZihpPXQt%0AbCx2fHwhKGk+MCkpe2lmKGkvPXYsMD52KXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9%0AaSl9ZWxzZSBpZih2PjApe2lmKGk+ZylyZXR1cm47aT5oJiYoaD1pKX1pZihpPXIt%0AbCx2fHwhKDA+aSkpe2lmKGkvPXYsMD52KXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9%0AaSl9ZWxzZSBpZih2PjApe2lmKGg+aSlyZXR1cm47Zz5pJiYoZz1pKX1yZXR1cm4g%0AaD4wJiYodS5hPXt4OmMraCpwLHk6bCtoKnZ9KSwxPmcmJih1LmI9e3g6YytnKnAs%0AeTpsK2cqdn0pLHV9fX19fX1mdW5jdGlvbiBqZShuLHQsZSxyKXtmdW5jdGlvbiB1%0AKHIsdSl7cmV0dXJuIGlhKHJbMF0tbik8RWE/dT4wPzA6MzppYShyWzBdLWUpPEVh%0AP3U+MD8yOjE6aWEoclsxXS10KTxFYT91PjA/MTowOnU+MD8zOjJ9ZnVuY3Rpb24g%0AaShuLHQpe3JldHVybiBvKG4ueCx0LngpfWZ1bmN0aW9uIG8obix0KXt2YXIgZT11%0AKG4sMSkscj11KHQsMSk7cmV0dXJuIGUhPT1yP2UtcjowPT09ZT90WzFdLW5bMV06%0AMT09PWU/blswXS10WzBdOjI9PT1lP25bMV0tdFsxXTp0WzBdLW5bMF19cmV0dXJu%0AIGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMobil7Zm9yKHZhciB0PTAsZT1kLmxlbmd0%0AaCxyPW5bMV0sdT0wO2U+dTsrK3UpZm9yKHZhciBpLG89MSxhPWRbdV0sYz1hLmxl%0Abmd0aCxsPWFbMF07Yz5vOysrbylpPWFbb10sbFsxXTw9cj9pWzFdPnImJlcobCxp%0ALG4pPjAmJisrdDppWzFdPD1yJiZXKGwsaSxuKTwwJiYtLXQsbD1pO3JldHVybiAw%0AIT09dH1mdW5jdGlvbiBsKGksYSxjLGwpe3ZhciBzPTAsZj0wO2lmKG51bGw9PWl8%0AfChzPXUoaSxjKSkhPT0oZj11KGEsYykpfHxvKGksYSk8MF5jPjApe2RvIGwucG9p%0AbnQoMD09PXN8fDM9PT1zP246ZSxzPjE/cjp0KTt3aGlsZSgocz0ocytjKzQpJTQp%0AIT09Zil9ZWxzZSBsLnBvaW50KGFbMF0sYVsxXSl9ZnVuY3Rpb24gcyh1LGkpe3Jl%0AdHVybiB1Pj1uJiZlPj11JiZpPj10JiZyPj1pfWZ1bmN0aW9uIGYobix0KXtzKG4s%0AdCkmJmEucG9pbnQobix0KX1mdW5jdGlvbiBoKCl7Ti5wb2ludD1wLGQmJmQucHVz%0AaChtPVtdKSxTPSEwLHc9ITEsXz1iPTAvMH1mdW5jdGlvbiBnKCl7diYmKHAoeSx4%0AKSxNJiZ3JiZBLnJlam9pbigpLHYucHVzaChBLmJ1ZmZlcigpKSksTi5wb2ludD1m%0ALHcmJmEubGluZUVuZCgpfWZ1bmN0aW9uIHAobix0KXtuPU1hdGgubWF4KC1FYyxN%0AYXRoLm1pbihFYyxuKSksdD1NYXRoLm1heCgtRWMsTWF0aC5taW4oRWMsdCkpO3Zh%0AciBlPXMobix0KTtpZihkJiZtLnB1c2goW24sdF0pLFMpeT1uLHg9dCxNPWUsUz0h%0AMSxlJiYoYS5saW5lU3RhcnQoKSxhLnBvaW50KG4sdCkpO2Vsc2UgaWYoZSYmdylh%0ALnBvaW50KG4sdCk7ZWxzZXt2YXIgcj17YTp7eDpfLHk6Yn0sYjp7eDpuLHk6dH19%0AO0Mocik/KHd8fChhLmxpbmVTdGFydCgpLGEucG9pbnQoci5hLngsci5hLnkpKSxh%0ALnBvaW50KHIuYi54LHIuYi55KSxlfHxhLmxpbmVFbmQoKSxrPSExKTplJiYoYS5s%0AaW5lU3RhcnQoKSxhLnBvaW50KG4sdCksaz0hMSl9Xz1uLGI9dCx3PWV9dmFyIHYs%0AZCxtLHkseCxNLF8sYix3LFMsayxFPWEsQT16ZSgpLEM9VWUobix0LGUsciksTj17%0AcG9pbnQ6ZixsaW5lU3RhcnQ6aCxsaW5lRW5kOmcscG9seWdvblN0YXJ0OmZ1bmN0%0AaW9uKCl7YT1BLHY9W10sZD1bXSxrPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7%0AYT1FLHY9Vm8ubWVyZ2Uodik7dmFyIHQ9YyhbbixyXSksZT1rJiZ0LHU9di5sZW5n%0AdGg7KGV8fHUpJiYoYS5wb2x5Z29uU3RhcnQoKSxlJiYoYS5saW5lU3RhcnQoKSxs%0AKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgpKSx1JiZrZSh2LGksdCxsLGEpLGEu%0AcG9seWdvbkVuZCgpKSx2PWQ9bT1udWxsfX07cmV0dXJuIE59fWZ1bmN0aW9uIEhl%0AKG4sdCl7ZnVuY3Rpb24gZShlLHIpe3JldHVybiBlPW4oZSxyKSx0KGVbMF0sZVsx%0AXSl9cmV0dXJuIG4uaW52ZXJ0JiZ0LmludmVydCYmKGUuaW52ZXJ0PWZ1bmN0aW9u%0AKGUscil7cmV0dXJuIGU9dC5pbnZlcnQoZSxyKSxlJiZuLmludmVydChlWzBdLGVb%0AMV0pfSksZX1mdW5jdGlvbiBGZShuKXt2YXIgdD0wLGU9d2EvMyxyPWVyKG4pLHU9%0Acih0LGUpO3JldHVybiB1LnBhcmFsbGVscz1mdW5jdGlvbihuKXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aD9yKHQ9blswXSp3YS8xODAsZT1uWzFdKndhLzE4MCk6WzE4%0AMCoodC93YSksMTgwKihlL3dhKV19LHV9ZnVuY3Rpb24gT2Uobix0KXtmdW5jdGlv%0AbiBlKG4sdCl7dmFyIGU9TWF0aC5zcXJ0KGktMip1Kk1hdGguc2luKHQpKS91O3Jl%0AdHVybltlKk1hdGguc2luKG4qPXUpLG8tZSpNYXRoLmNvcyhuKV19dmFyIHI9TWF0%0AaC5zaW4obiksdT0ocitNYXRoLnNpbih0KSkvMixpPTErciooMip1LXIpLG89TWF0%0AaC5zcXJ0KGkpL3U7cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7dmFyIGU9%0Aby10O3JldHVybltNYXRoLmF0YW4yKG4sZSkvdSxHKChpLShuKm4rZSplKSp1KnUp%0ALygyKnUpKV19LGV9ZnVuY3Rpb24gWWUoKXtmdW5jdGlvbiBuKG4sdCl7Q2MrPXUq%0Abi1yKnQscj1uLHU9dH12YXIgdCxlLHIsdTtxYy5wb2ludD1mdW5jdGlvbihpLG8p%0Ae3FjLnBvaW50PW4sdD1yPWksZT11PW99LHFjLmxpbmVFbmQ9ZnVuY3Rpb24oKXtu%0AKHQsZSl9fWZ1bmN0aW9uIEllKG4sdCl7TmM+biYmKE5jPW4pLG4+TGMmJihMYz1u%0AKSx6Yz50JiYoemM9dCksdD5UYyYmKFRjPXQpfWZ1bmN0aW9uIFplKCl7ZnVuY3Rp%0Ab24gbihuLHQpe28ucHVzaCgiTSIsbiwiLCIsdCxpKX1mdW5jdGlvbiB0KG4sdCl7%0Aby5wdXNoKCJNIixuLCIsIix0KSxhLnBvaW50PWV9ZnVuY3Rpb24gZShuLHQpe28u%0AcHVzaCgiTCIsbiwiLCIsdCl9ZnVuY3Rpb24gcigpe2EucG9pbnQ9bn1mdW5jdGlv%0AbiB1KCl7by5wdXNoKCJaIil9dmFyIGk9VmUoNC41KSxvPVtdLGE9e3BvaW50Om4s%0AbGluZVN0YXJ0OmZ1bmN0aW9uKCl7YS5wb2ludD10fSxsaW5lRW5kOnIscG9seWdv%0AblN0YXJ0OmZ1bmN0aW9uKCl7YS5saW5lRW5kPXV9LHBvbHlnb25FbmQ6ZnVuY3Rp%0Ab24oKXthLmxpbmVFbmQ9cixhLnBvaW50PW59LHBvaW50UmFkaXVzOmZ1bmN0aW9u%0AKG4pe3JldHVybiBpPVZlKG4pLGF9LHJlc3VsdDpmdW5jdGlvbigpe2lmKG8ubGVu%0AZ3RoKXt2YXIgbj1vLmpvaW4oIiIpO3JldHVybiBvPVtdLG59fX07cmV0dXJuIGF9%0AZnVuY3Rpb24gVmUobil7cmV0dXJuIm0wLCIrbisiYSIrbisiLCIrbisiIDAgMSwx%0AIDAsIistMipuKyJhIituKyIsIituKyIgMCAxLDEgMCwiKzIqbisieiJ9ZnVuY3Rp%0Ab24gWGUobix0KXt2Yys9bixkYys9dCwrK21jfWZ1bmN0aW9uICRlKCl7ZnVuY3Rp%0Ab24gbihuLHIpe3ZhciB1PW4tdCxpPXItZSxvPU1hdGguc3FydCh1KnUraSppKTt5%0AYys9byoodCtuKS8yLHhjKz1vKihlK3IpLzIsTWMrPW8sWGUodD1uLGU9cil9dmFy%0AIHQsZTtEYy5wb2ludD1mdW5jdGlvbihyLHUpe0RjLnBvaW50PW4sWGUodD1yLGU9%0AdSl9fWZ1bmN0aW9uIEJlKCl7RGMucG9pbnQ9WGV9ZnVuY3Rpb24gV2UoKXtmdW5j%0AdGlvbiBuKG4sdCl7dmFyIGU9bi1yLGk9dC11LG89TWF0aC5zcXJ0KGUqZStpKmkp%0AO3ljKz1vKihyK24pLzIseGMrPW8qKHUrdCkvMixNYys9byxvPXUqbi1yKnQsX2Mr%0APW8qKHIrbiksYmMrPW8qKHUrdCksd2MrPTMqbyxYZShyPW4sdT10KX12YXIgdCxl%0ALHIsdTtEYy5wb2ludD1mdW5jdGlvbihpLG8pe0RjLnBvaW50PW4sWGUodD1yPWks%0AZT11PW8pfSxEYy5saW5lRW5kPWZ1bmN0aW9uKCl7bih0LGUpfX1mdW5jdGlvbiBK%0AZShuKXtmdW5jdGlvbiB0KHQsZSl7bi5tb3ZlVG8odCxlKSxuLmFyYyh0LGUsbyww%0ALFNhKX1mdW5jdGlvbiBlKHQsZSl7bi5tb3ZlVG8odCxlKSxhLnBvaW50PXJ9ZnVu%0AY3Rpb24gcih0LGUpe24ubGluZVRvKHQsZSl9ZnVuY3Rpb24gdSgpe2EucG9pbnQ9%0AdH1mdW5jdGlvbiBpKCl7bi5jbG9zZVBhdGgoKX12YXIgbz00LjUsYT17cG9pbnQ6%0AdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXthLnBvaW50PWV9LGxpbmVFbmQ6dSxwb2x5%0AZ29uU3RhcnQ6ZnVuY3Rpb24oKXthLmxpbmVFbmQ9aX0scG9seWdvbkVuZDpmdW5j%0AdGlvbigpe2EubGluZUVuZD11LGEucG9pbnQ9dH0scG9pbnRSYWRpdXM6ZnVuY3Rp%0Ab24obil7cmV0dXJuIG89bixhfSxyZXN1bHQ6dn07cmV0dXJuIGF9ZnVuY3Rpb24g%0AR2Uobil7ZnVuY3Rpb24gdChuKXtyZXR1cm4oYT9yOmUpKG4pfWZ1bmN0aW9uIGUo%0AdCl7cmV0dXJuIG5yKHQsZnVuY3Rpb24oZSxyKXtlPW4oZSxyKSx0LnBvaW50KGVb%0AMF0sZVsxXSl9KX1mdW5jdGlvbiByKHQpe2Z1bmN0aW9uIGUoZSxyKXtlPW4oZSxy%0AKSx0LnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gcigpe3g9MC8wLFMucG9pbnQ9%0AaSx0LmxpbmVTdGFydCgpfWZ1bmN0aW9uIGkoZSxyKXt2YXIgaT1mZShbZSxyXSks%0Abz1uKGUscik7dSh4LE0seSxfLGIsdyx4PW9bMF0sTT1vWzFdLHk9ZSxfPWlbMF0s%0AYj1pWzFdLHc9aVsyXSxhLHQpLHQucG9pbnQoeCxNKX1mdW5jdGlvbiBvKCl7Uy5w%0Ab2ludD1lLHQubGluZUVuZCgpfWZ1bmN0aW9uIGMoKXtyKCksUy5wb2ludD1sLFMu%0AbGluZUVuZD1zfWZ1bmN0aW9uIGwobix0KXtpKGY9bixoPXQpLGc9eCxwPU0sdj1f%0ALGQ9YixtPXcsUy5wb2ludD1pfWZ1bmN0aW9uIHMoKXt1KHgsTSx5LF8sYix3LGcs%0AcCxmLHYsZCxtLGEsdCksUy5saW5lRW5kPW8sbygpfXZhciBmLGgsZyxwLHYsZCxt%0ALHkseCxNLF8sYix3LFM9e3BvaW50OmUsbGluZVN0YXJ0OnIsbGluZUVuZDpvLHBv%0AbHlnb25TdGFydDpmdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCksUy5saW5lU3Rh%0AcnQ9Y30scG9seWdvbkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpLFMubGlu%0AZVN0YXJ0PXJ9fTtyZXR1cm4gU31mdW5jdGlvbiB1KHQsZSxyLGEsYyxsLHMsZixo%0ALGcscCx2LGQsbSl7dmFyIHk9cy10LHg9Zi1lLE09eSp5K3gqeDtpZihNPjQqaSYm%0AZC0tKXt2YXIgXz1hK2csYj1jK3Asdz1sK3YsUz1NYXRoLnNxcnQoXypfK2IqYit3%0AKncpLGs9TWF0aC5hc2luKHcvPVMpLEU9aWEoaWEodyktMSk8RWF8fGlhKHItaCk8%0ARWE/KHIraCkvMjpNYXRoLmF0YW4yKGIsXyksQT1uKEUsayksQz1BWzBdLE49QVsx%0AXSx6PUMtdCxMPU4tZSxUPXgqei15Kkw7KFQqVC9NPml8fGlhKCh5KnoreCpMKS9N%0ALS41KT4uM3x8bz5hKmcrYypwK2wqdikmJih1KHQsZSxyLGEsYyxsLEMsTixFLF8v%0APVMsYi89Uyx3LGQsbSksbS5wb2ludChDLE4pLHUoQyxOLEUsXyxiLHcscyxmLGgs%0AZyxwLHYsZCxtKSl9fXZhciBpPS41LG89TWF0aC5jb3MoMzAqQ2EpLGE9MTY7cmV0%0AdXJuIHQucHJlY2lzaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyhhPShpPW4qbik+MCYmMTYsdCk6TWF0aC5zcXJ0KGkpCn0sdH1mdW5jdGlv%0AbiBLZShuKXt2YXIgdD1HZShmdW5jdGlvbih0LGUpe3JldHVybiBuKFt0Kk5hLGUq%0ATmFdKX0pO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gcnIodChuKSl9fWZ1bmN0%0AaW9uIFFlKG4pe3RoaXMuc3RyZWFtPW59ZnVuY3Rpb24gbnIobix0KXtyZXR1cm57%0AcG9pbnQ6dCxzcGhlcmU6ZnVuY3Rpb24oKXtuLnNwaGVyZSgpfSxsaW5lU3RhcnQ6%0AZnVuY3Rpb24oKXtuLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7bi5s%0AaW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe24ucG9seWdvblN0YXJ0%0AKCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25FbmQoKX19fWZ1bmN0%0AaW9uIHRyKG4pe3JldHVybiBlcihmdW5jdGlvbigpe3JldHVybiBufSkoKX1mdW5j%0AdGlvbiBlcihuKXtmdW5jdGlvbiB0KG4pe3JldHVybiBuPWEoblswXSpDYSxuWzFd%0AKkNhKSxbblswXSpoK2MsbC1uWzFdKmhdfWZ1bmN0aW9uIGUobil7cmV0dXJuIG49%0AYS5pbnZlcnQoKG5bMF0tYykvaCwobC1uWzFdKS9oKSxuJiZbblswXSpOYSxuWzFd%0AKk5hXX1mdW5jdGlvbiByKCl7YT1IZShvPW9yKG0seSx4KSxpKTt2YXIgbj1pKHYs%0AZCk7cmV0dXJuIGM9Zy1uWzBdKmgsbD1wK25bMV0qaCx1KCl9ZnVuY3Rpb24gdSgp%0Ae3JldHVybiBzJiYocy52YWxpZD0hMSxzPW51bGwpLHR9dmFyIGksbyxhLGMsbCxz%0ALGY9R2UoZnVuY3Rpb24obix0KXtyZXR1cm4gbj1pKG4sdCksW25bMF0qaCtjLGwt%0AblsxXSpoXX0pLGg9MTUwLGc9NDgwLHA9MjUwLHY9MCxkPTAsbT0wLHk9MCx4PTAs%0ATT1rYyxfPXd0LGI9bnVsbCx3PW51bGw7cmV0dXJuIHQuc3RyZWFtPWZ1bmN0aW9u%0AKG4pe3JldHVybiBzJiYocy52YWxpZD0hMSkscz1ycihNKG8sZihfKG4pKSkpLHMu%0AdmFsaWQ9ITAsc30sdC5jbGlwQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KE09bnVsbD09bj8oYj1uLGtjKTpQZSgoYj0rbikqQ2EpLHUo%0AKSk6Yn0sdC5jbGlwRXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu%0AbGVuZ3RoPyh3PW4sXz1uP2plKG5bMF1bMF0sblswXVsxXSxuWzFdWzBdLG5bMV1b%0AMV0pOnd0LHUoKSk6d30sdC5zY2FsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1l%0AbnRzLmxlbmd0aD8oaD0rbixyKCkpOmh9LHQudHJhbnNsYXRlPWZ1bmN0aW9uKG4p%0Ae3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStuWzBdLHA9K25bMV0scigpKTpb%0AZyxwXX0sdC5jZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KHY9blswXSUzNjAqQ2EsZD1uWzFdJTM2MCpDYSxyKCkpOlt2Kk5hLGQqTmFd%0AfSx0LnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o%0AbT1uWzBdJTM2MCpDYSx5PW5bMV0lMzYwKkNhLHg9bi5sZW5ndGg+Mj9uWzJdJTM2%0AMCpDYTowLHIoKSk6W20qTmEseSpOYSx4Kk5hXX0sVm8ucmViaW5kKHQsZiwicHJl%0AY2lzaW9uIiksZnVuY3Rpb24oKXtyZXR1cm4gaT1uLmFwcGx5KHRoaXMsYXJndW1l%0AbnRzKSx0LmludmVydD1pLmludmVydCYmZSxyKCl9fWZ1bmN0aW9uIHJyKG4pe3Jl%0AdHVybiBucihuLGZ1bmN0aW9uKHQsZSl7bi5wb2ludCh0KkNhLGUqQ2EpfSl9ZnVu%0AY3Rpb24gdXIobix0KXtyZXR1cm5bbix0XX1mdW5jdGlvbiBpcihuLHQpe3JldHVy%0AbltuPndhP24tU2E6LXdhPm4/bitTYTpuLHRdfWZ1bmN0aW9uIG9yKG4sdCxlKXty%0AZXR1cm4gbj90fHxlP0hlKGNyKG4pLGxyKHQsZSkpOmNyKG4pOnR8fGU/bHIodCxl%0AKTppcn1mdW5jdGlvbiBhcihuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4g%0AdCs9bixbdD53YT90LVNhOi13YT50P3QrU2E6dCxlXX19ZnVuY3Rpb24gY3Iobil7%0AdmFyIHQ9YXIobik7cmV0dXJuIHQuaW52ZXJ0PWFyKC1uKSx0fWZ1bmN0aW9uIGxy%0AKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPU1hdGguY29zKHQpLGE9TWF0aC5j%0Ab3MobikqZSxjPU1hdGguc2luKG4pKmUsbD1NYXRoLnNpbih0KSxzPWwqcithKnU7%0AcmV0dXJuW01hdGguYXRhbjIoYyppLXMqbyxhKnItbCp1KSxHKHMqaStjKm8pXX12%0AYXIgcj1NYXRoLmNvcyhuKSx1PU1hdGguc2luKG4pLGk9TWF0aC5jb3ModCksbz1N%0AYXRoLnNpbih0KTtyZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1N%0AYXRoLmNvcyh0KSxhPU1hdGguY29zKG4pKmUsYz1NYXRoLnNpbihuKSplLGw9TWF0%0AaC5zaW4odCkscz1sKmktYypvO3JldHVybltNYXRoLmF0YW4yKGMqaStsKm8sYSpy%0AK3MqdSksRyhzKnItYSp1KV19LGV9ZnVuY3Rpb24gc3Iobix0KXt2YXIgZT1NYXRo%0ALmNvcyhuKSxyPU1hdGguc2luKG4pO3JldHVybiBmdW5jdGlvbih1LGksbyxhKXt2%0AYXIgYz1vKnQ7bnVsbCE9dT8odT1mcihlLHUpLGk9ZnIoZSxpKSwobz4wP2k+dTp1%0APmkpJiYodSs9bypTYSkpOih1PW4rbypTYSxpPW4tLjUqYyk7Zm9yKHZhciBsLHM9%0AdTtvPjA/cz5pOmk+cztzLT1jKWEucG9pbnQoKGw9bWUoW2UsLXIqTWF0aC5jb3Mo%0AcyksLXIqTWF0aC5zaW4ocyldKSlbMF0sbFsxXSl9fWZ1bmN0aW9uIGZyKG4sdCl7%0AdmFyIGU9ZmUodCk7ZVswXS09bixkZShlKTt2YXIgcj1KKC1lWzFdKTtyZXR1cm4o%0AKC1lWzJdPDA/LXI6cikrMipNYXRoLlBJLUVhKSUoMipNYXRoLlBJKX1mdW5jdGlv%0AbiBocihuLHQsZSl7dmFyIHI9Vm8ucmFuZ2Uobix0LUVhLGUpLmNvbmNhdCh0KTty%0AZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKHQpe3JldHVy%0AbltuLHRdfSl9fWZ1bmN0aW9uIGdyKG4sdCxlKXt2YXIgcj1Wby5yYW5nZShuLHQt%0ARWEsZSkuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gci5tYXAo%0AZnVuY3Rpb24odCl7cmV0dXJuW3Qsbl19KX19ZnVuY3Rpb24gcHIobil7cmV0dXJu%0AIG4uc291cmNlfWZ1bmN0aW9uIHZyKG4pe3JldHVybiBuLnRhcmdldH1mdW5jdGlv%0AbiBkcihuLHQsZSxyKXt2YXIgdT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLG89%0ATWF0aC5jb3MociksYT1NYXRoLnNpbihyKSxjPXUqTWF0aC5jb3MobiksbD11Kk1h%0AdGguc2luKG4pLHM9bypNYXRoLmNvcyhlKSxmPW8qTWF0aC5zaW4oZSksaD0yKk1h%0AdGguYXNpbihNYXRoLnNxcnQodHQoci10KSt1Km8qdHQoZS1uKSkpLGc9MS9NYXRo%0ALnNpbihoKSxwPWg/ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zaW4obio9aCkqZyxl%0APU1hdGguc2luKGgtbikqZyxyPWUqYyt0KnMsdT1lKmwrdCpmLG89ZSppK3QqYTty%0AZXR1cm5bTWF0aC5hdGFuMih1LHIpKk5hLE1hdGguYXRhbjIobyxNYXRoLnNxcnQo%0AcipyK3UqdSkpKk5hXX06ZnVuY3Rpb24oKXtyZXR1cm5bbipOYSx0Kk5hXX07cmV0%0AdXJuIHAuZGlzdGFuY2U9aCxwfWZ1bmN0aW9uIG1yKCl7ZnVuY3Rpb24gbihuLHUp%0Ae3ZhciBpPU1hdGguc2luKHUqPUNhKSxvPU1hdGguY29zKHUpLGE9aWEoKG4qPUNh%0AKS10KSxjPU1hdGguY29zKGEpO1BjKz1NYXRoLmF0YW4yKE1hdGguc3FydCgoYT1v%0AKk1hdGguc2luKGEpKSphKyhhPXIqaS1lKm8qYykqYSksZSppK3IqbypjKSx0PW4s%0AZT1pLHI9b312YXIgdCxlLHI7VWMucG9pbnQ9ZnVuY3Rpb24odSxpKXt0PXUqQ2Es%0AZT1NYXRoLnNpbihpKj1DYSkscj1NYXRoLmNvcyhpKSxVYy5wb2ludD1ufSxVYy5s%0AaW5lRW5kPWZ1bmN0aW9uKCl7VWMucG9pbnQ9VWMubGluZUVuZD12fX1mdW5jdGlv%0AbiB5cihuLHQpe2Z1bmN0aW9uIGUodCxlKXt2YXIgcj1NYXRoLmNvcyh0KSx1PU1h%0AdGguY29zKGUpLGk9bihyKnUpO3JldHVybltpKnUqTWF0aC5zaW4odCksaSpNYXRo%0ALnNpbihlKV19cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKG4sZSl7dmFyIHI9TWF0%0AaC5zcXJ0KG4qbitlKmUpLHU9dChyKSxpPU1hdGguc2luKHUpLG89TWF0aC5jb3Mo%0AdSk7cmV0dXJuW01hdGguYXRhbjIobippLHIqbyksTWF0aC5hc2luKHImJmUqaS9y%0AKV19LGV9ZnVuY3Rpb24geHIobix0KXtmdW5jdGlvbiBlKG4sdCl7bz4wPy1rYStF%0AYT50JiYodD0ta2ErRWEpOnQ+a2EtRWEmJih0PWthLUVhKTt2YXIgZT1vL01hdGgu%0AcG93KHUodCksaSk7cmV0dXJuW2UqTWF0aC5zaW4oaSpuKSxvLWUqTWF0aC5jb3Mo%0AaSpuKV19dmFyIHI9TWF0aC5jb3MobiksdT1mdW5jdGlvbihuKXtyZXR1cm4gTWF0%0AaC50YW4od2EvNCtuLzIpfSxpPW49PT10P01hdGguc2luKG4pOk1hdGgubG9nKHIv%0ATWF0aC5jb3ModCkpL01hdGgubG9nKHUodCkvdShuKSksbz1yKk1hdGgucG93KHUo%0AbiksaSkvaTtyZXR1cm4gaT8oZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1v%0ALXQscj1CKGkpKk1hdGguc3FydChuKm4rZSplKTtyZXR1cm5bTWF0aC5hdGFuMihu%0ALGUpL2ksMipNYXRoLmF0YW4oTWF0aC5wb3coby9yLDEvaSkpLWthXX0sZSk6X3J9%0AZnVuY3Rpb24gTXIobix0KXtmdW5jdGlvbiBlKG4sdCl7dmFyIGU9aS10O3JldHVy%0AbltlKk1hdGguc2luKHUqbiksaS1lKk1hdGguY29zKHUqbildfXZhciByPU1hdGgu%0AY29zKG4pLHU9bj09PXQ/TWF0aC5zaW4obik6KHItTWF0aC5jb3ModCkpLyh0LW4p%0ALGk9ci91K247cmV0dXJuIGlhKHUpPEVhP3VyOihlLmludmVydD1mdW5jdGlvbihu%0ALHQpe3ZhciBlPWktdDtyZXR1cm5bTWF0aC5hdGFuMihuLGUpL3UsaS1CKHUpKk1h%0AdGguc3FydChuKm4rZSplKV19LGUpfWZ1bmN0aW9uIF9yKG4sdCl7cmV0dXJuW24s%0ATWF0aC5sb2coTWF0aC50YW4od2EvNCt0LzIpKV19ZnVuY3Rpb24gYnIobil7dmFy%0AIHQsZT10cihuKSxyPWUuc2NhbGUsdT1lLnRyYW5zbGF0ZSxpPWUuY2xpcEV4dGVu%0AdDtyZXR1cm4gZS5zY2FsZT1mdW5jdGlvbigpe3ZhciBuPXIuYXBwbHkoZSxhcmd1%0AbWVudHMpO3JldHVybiBuPT09ZT90P2UuY2xpcEV4dGVudChudWxsKTplOm59LGUu%0AdHJhbnNsYXRlPWZ1bmN0aW9uKCl7dmFyIG49dS5hcHBseShlLGFyZ3VtZW50cyk7%0AcmV0dXJuIG49PT1lP3Q/ZS5jbGlwRXh0ZW50KG51bGwpOmU6bn0sZS5jbGlwRXh0%0AZW50PWZ1bmN0aW9uKG4pe3ZhciBvPWkuYXBwbHkoZSxhcmd1bWVudHMpO2lmKG89%0APT1lKXtpZih0PW51bGw9PW4pe3ZhciBhPXdhKnIoKSxjPXUoKTtpKFtbY1swXS1h%0ALGNbMV0tYV0sW2NbMF0rYSxjWzFdK2FdXSl9fWVsc2UgdCYmKG89bnVsbCk7cmV0%0AdXJuIG99LGUuY2xpcEV4dGVudChudWxsKX1mdW5jdGlvbiB3cihuLHQpe3JldHVy%0AbltNYXRoLmxvZyhNYXRoLnRhbih3YS80K3QvMikpLC1uXX1mdW5jdGlvbiBTcihu%0AKXtyZXR1cm4gblswXX1mdW5jdGlvbiBrcihuKXtyZXR1cm4gblsxXX1mdW5jdGlv%0AbiBFcihuKXtmb3IodmFyIHQ9bi5sZW5ndGgsZT1bMCwxXSxyPTIsdT0yO3Q+dTt1%0AKyspe2Zvcig7cj4xJiZXKG5bZVtyLTJdXSxuW2Vbci0xXV0sblt1XSk8PTA7KS0t%0AcjtlW3IrK109dX1yZXR1cm4gZS5zbGljZSgwLHIpfWZ1bmN0aW9uIEFyKG4sdCl7%0AcmV0dXJuIG5bMF0tdFswXXx8blsxXS10WzFdfWZ1bmN0aW9uIENyKG4sdCxlKXty%0AZXR1cm4oZVswXS10WzBdKSooblsxXS10WzFdKTwoZVsxXS10WzFdKSooblswXS10%0AWzBdKX1mdW5jdGlvbiBOcihuLHQsZSxyKXt2YXIgdT1uWzBdLGk9ZVswXSxvPXRb%0AMF0tdSxhPXJbMF0taSxjPW5bMV0sbD1lWzFdLHM9dFsxXS1jLGY9clsxXS1sLGg9%0AKGEqKGMtbCktZioodS1pKSkvKGYqby1hKnMpO3JldHVyblt1K2gqbyxjK2gqc119%0AZnVuY3Rpb24genIobil7dmFyIHQ9blswXSxlPW5bbi5sZW5ndGgtMV07cmV0dXJu%0AISh0WzBdLWVbMF18fHRbMV0tZVsxXSl9ZnVuY3Rpb24gTHIoKXtLcih0aGlzKSx0%0AaGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gVHIo%0Abil7dmFyIHQ9V2MucG9wKCl8fG5ldyBMcjtyZXR1cm4gdC5zaXRlPW4sdH1mdW5j%0AdGlvbiBxcihuKXtJcihuKSxYYy5yZW1vdmUobiksV2MucHVzaChuKSxLcihuKX1m%0AdW5jdGlvbiBScihuKXt2YXIgdD1uLmNpcmNsZSxlPXQueCxyPXQuY3ksdT17eDpl%0ALHk6cn0saT1uLlAsbz1uLk4sYT1bbl07cXIobik7Zm9yKHZhciBjPWk7Yy5jaXJj%0AbGUmJmlhKGUtYy5jaXJjbGUueCk8RWEmJmlhKHItYy5jaXJjbGUuY3kpPEVhOylp%0APWMuUCxhLnVuc2hpZnQoYykscXIoYyksYz1pO2EudW5zaGlmdChjKSxJcihjKTtm%0Ab3IodmFyIGw9bztsLmNpcmNsZSYmaWEoZS1sLmNpcmNsZS54KTxFYSYmaWEoci1s%0ALmNpcmNsZS5jeSk8RWE7KW89bC5OLGEucHVzaChsKSxxcihsKSxsPW87YS5wdXNo%0AKGwpLElyKGwpO3ZhciBzLGY9YS5sZW5ndGg7Zm9yKHM9MTtmPnM7KytzKWw9YVtz%0AXSxjPWFbcy0xXSxXcihsLmVkZ2UsYy5zaXRlLGwuc2l0ZSx1KTtjPWFbMF0sbD1h%0AW2YtMV0sbC5lZGdlPSRyKGMuc2l0ZSxsLnNpdGUsbnVsbCx1KSxZcihjKSxZcihs%0AKX1mdW5jdGlvbiBEcihuKXtmb3IodmFyIHQsZSxyLHUsaT1uLngsbz1uLnksYT1Y%0AYy5fO2E7KWlmKHI9UHIoYSxvKS1pLHI+RWEpYT1hLkw7ZWxzZXtpZih1PWktVXIo%0AYSxvKSwhKHU+RWEpKXtyPi1FYT8odD1hLlAsZT1hKTp1Pi1FYT8odD1hLGU9YS5O%0AKTp0PWU9YTticmVha31pZighYS5SKXt0PWE7YnJlYWt9YT1hLlJ9dmFyIGM9VHIo%0Abik7aWYoWGMuaW5zZXJ0KHQsYyksdHx8ZSl7aWYodD09PWUpcmV0dXJuIElyKHQp%0ALGU9VHIodC5zaXRlKSxYYy5pbnNlcnQoYyxlKSxjLmVkZ2U9ZS5lZGdlPSRyKHQu%0Ac2l0ZSxjLnNpdGUpLFlyKHQpLFlyKGUpLHZvaWQgMDtpZighZSlyZXR1cm4gYy5l%0AZGdlPSRyKHQuc2l0ZSxjLnNpdGUpLHZvaWQgMDtJcih0KSxJcihlKTt2YXIgbD10%0ALnNpdGUscz1sLngsZj1sLnksaD1uLngtcyxnPW4ueS1mLHA9ZS5zaXRlLHY9cC54%0ALXMsZD1wLnktZixtPTIqKGgqZC1nKnYpLHk9aCpoK2cqZyx4PXYqditkKmQsTT17%0AeDooZCp5LWcqeCkvbStzLHk6KGgqeC12KnkpL20rZn07V3IoZS5lZGdlLGwscCxN%0AKSxjLmVkZ2U9JHIobCxuLG51bGwsTSksZS5lZGdlPSRyKG4scCxudWxsLE0pLFly%0AKHQpLFlyKGUpfX1mdW5jdGlvbiBQcihuLHQpe3ZhciBlPW4uc2l0ZSxyPWUueCx1%0APWUueSxpPXUtdDtpZighaSlyZXR1cm4gcjt2YXIgbz1uLlA7aWYoIW8pcmV0dXJu%0ALTEvMDtlPW8uc2l0ZTt2YXIgYT1lLngsYz1lLnksbD1jLXQ7aWYoIWwpcmV0dXJu%0AIGE7dmFyIHM9YS1yLGY9MS9pLTEvbCxoPXMvbDtyZXR1cm4gZj8oLWgrTWF0aC5z%0AcXJ0KGgqaC0yKmYqKHMqcy8oLTIqbCktYytsLzIrdS1pLzIpKSkvZityOihyK2Ep%0ALzJ9ZnVuY3Rpb24gVXIobix0KXt2YXIgZT1uLk47aWYoZSlyZXR1cm4gUHIoZSx0%0AKTt2YXIgcj1uLnNpdGU7cmV0dXJuIHIueT09PXQ/ci54OjEvMH1mdW5jdGlvbiBq%0AcihuKXt0aGlzLnNpdGU9bix0aGlzLmVkZ2VzPVtdfWZ1bmN0aW9uIEhyKG4pe2Zv%0Acih2YXIgdCxlLHIsdSxpLG8sYSxjLGwscyxmPW5bMF1bMF0saD1uWzFdWzBdLGc9%0AblswXVsxXSxwPW5bMV1bMV0sdj1WYyxkPXYubGVuZ3RoO2QtLTspaWYoaT12W2Rd%0ALGkmJmkucHJlcGFyZSgpKWZvcihhPWkuZWRnZXMsYz1hLmxlbmd0aCxvPTA7Yz5v%0AOylzPWFbb10uZW5kKCkscj1zLngsdT1zLnksbD1hWysrbyVjXS5zdGFydCgpLHQ9%0AbC54LGU9bC55LChpYShyLXQpPkVhfHxpYSh1LWUpPkVhKSYmKGEuc3BsaWNlKG8s%0AMCxuZXcgSnIoQnIoaS5zaXRlLHMsaWEoci1mKTxFYSYmcC11PkVhP3t4OmYseTpp%0AYSh0LWYpPEVhP2U6cH06aWEodS1wKTxFYSYmaC1yPkVhP3t4OmlhKGUtcCk8RWE/%0AdDpoLHk6cH06aWEoci1oKTxFYSYmdS1nPkVhP3t4OmgseTppYSh0LWgpPEVhP2U6%0AZ306aWEodS1nKTxFYSYmci1mPkVhP3t4OmlhKGUtZyk8RWE/dDpmLHk6Z306bnVs%0AbCksaS5zaXRlLG51bGwpKSwrK2MpfWZ1bmN0aW9uIEZyKG4sdCl7cmV0dXJuIHQu%0AYW5nbGUtbi5hbmdsZX1mdW5jdGlvbiBPcigpe0tyKHRoaXMpLHRoaXMueD10aGlz%0ALnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBZcihu%0AKXt2YXIgdD1uLlAsZT1uLk47aWYodCYmZSl7dmFyIHI9dC5zaXRlLHU9bi5zaXRl%0ALGk9ZS5zaXRlO2lmKHIhPT1pKXt2YXIgbz11LngsYT11LnksYz1yLngtbyxsPXIu%0AeS1hLHM9aS54LW8sZj1pLnktYSxoPTIqKGMqZi1sKnMpO2lmKCEoaD49LUFhKSl7%0AdmFyIGc9YypjK2wqbCxwPXMqcytmKmYsdj0oZipnLWwqcCkvaCxkPShjKnAtcypn%0AKS9oLGY9ZCthLG09SmMucG9wKCl8fG5ldyBPcjttLmFyYz1uLG0uc2l0ZT11LG0u%0AeD12K28sbS55PWYrTWF0aC5zcXJ0KHYqditkKmQpLG0uY3k9ZixuLmNpcmNsZT1t%0AO2Zvcih2YXIgeT1udWxsLHg9QmMuXzt4OylpZihtLnk8eC55fHxtLnk9PT14Lnkm%0AJm0ueDw9eC54KXtpZigheC5MKXt5PXguUDticmVha314PXguTH1lbHNle2lmKCF4%0ALlIpe3k9eDticmVha314PXguUn1CYy5pbnNlcnQoeSxtKSx5fHwoJGM9bSl9fX19%0AZnVuY3Rpb24gSXIobil7dmFyIHQ9bi5jaXJjbGU7dCYmKHQuUHx8KCRjPXQuTiks%0AQmMucmVtb3ZlKHQpLEpjLnB1c2godCksS3IodCksbi5jaXJjbGU9bnVsbCl9ZnVu%0AY3Rpb24gWnIobil7Zm9yKHZhciB0LGU9WmMscj1VZShuWzBdWzBdLG5bMF1bMV0s%0AblsxXVswXSxuWzFdWzFdKSx1PWUubGVuZ3RoO3UtLTspdD1lW3VdLCghVnIodCxu%0AKXx8IXIodCl8fGlhKHQuYS54LXQuYi54KTxFYSYmaWEodC5hLnktdC5iLnkpPEVh%0AKSYmKHQuYT10LmI9bnVsbCxlLnNwbGljZSh1LDEpKX1mdW5jdGlvbiBWcihuLHQp%0Ae3ZhciBlPW4uYjtpZihlKXJldHVybiEwO3ZhciByLHUsaT1uLmEsbz10WzBdWzBd%0ALGE9dFsxXVswXSxjPXRbMF1bMV0sbD10WzFdWzFdLHM9bi5sLGY9bi5yLGg9cy54%0ALGc9cy55LHA9Zi54LHY9Zi55LGQ9KGgrcCkvMixtPShnK3YpLzI7aWYodj09PWcp%0Ae2lmKG8+ZHx8ZD49YSlyZXR1cm47aWYoaD5wKXtpZihpKXtpZihpLnk+PWwpcmV0%0AdXJufWVsc2UgaT17eDpkLHk6Y307ZT17eDpkLHk6bH19ZWxzZXtpZihpKXtpZihp%0ALnk8YylyZXR1cm59ZWxzZSBpPXt4OmQseTpsfTtlPXt4OmQseTpjfX19ZWxzZSBp%0AZihyPShoLXApLyh2LWcpLHU9bS1yKmQsLTE+cnx8cj4xKWlmKGg+cCl7aWYoaSl7%0AaWYoaS55Pj1sKXJldHVybn1lbHNlIGk9e3g6KGMtdSkvcix5OmN9O2U9e3g6KGwt%0AdSkvcix5Omx9fWVsc2V7aWYoaSl7aWYoaS55PGMpcmV0dXJufWVsc2UgaT17eDoo%0AbC11KS9yLHk6bH07ZT17eDooYy11KS9yLHk6Y319ZWxzZSBpZih2Pmcpe2lmKGkp%0Ae2lmKGkueD49YSlyZXR1cm59ZWxzZSBpPXt4Om8seTpyKm8rdX07ZT17eDphLHk6%0AciphK3V9fWVsc2V7aWYoaSl7aWYoaS54PG8pcmV0dXJufWVsc2UgaT17eDphLHk6%0AciphK3V9O2U9e3g6byx5OnIqbyt1fX1yZXR1cm4gbi5hPWksbi5iPWUsITB9ZnVu%0AY3Rpb24gWHIobix0KXt0aGlzLmw9bix0aGlzLnI9dCx0aGlzLmE9dGhpcy5iPW51%0AbGx9ZnVuY3Rpb24gJHIobix0LGUscil7dmFyIHU9bmV3IFhyKG4sdCk7cmV0dXJu%0AIFpjLnB1c2godSksZSYmV3IodSxuLHQsZSksciYmV3IodSx0LG4sciksVmNbbi5p%0AXS5lZGdlcy5wdXNoKG5ldyBKcih1LG4sdCkpLFZjW3QuaV0uZWRnZXMucHVzaChu%0AZXcgSnIodSx0LG4pKSx1fWZ1bmN0aW9uIEJyKG4sdCxlKXt2YXIgcj1uZXcgWHIo%0AbixudWxsKTtyZXR1cm4gci5hPXQsci5iPWUsWmMucHVzaChyKSxyfWZ1bmN0aW9u%0AIFdyKG4sdCxlLHIpe24uYXx8bi5iP24ubD09PWU/bi5iPXI6bi5hPXI6KG4uYT1y%0ALG4ubD10LG4ucj1lKX1mdW5jdGlvbiBKcihuLHQsZSl7dmFyIHI9bi5hLHU9bi5i%0AO3RoaXMuZWRnZT1uLHRoaXMuc2l0ZT10LHRoaXMuYW5nbGU9ZT9NYXRoLmF0YW4y%0AKGUueS10LnksZS54LXQueCk6bi5sPT09dD9NYXRoLmF0YW4yKHUueC1yLngsci55%0ALXUueSk6TWF0aC5hdGFuMihyLngtdS54LHUueS1yLnkpfWZ1bmN0aW9uIEdyKCl7%0AdGhpcy5fPW51bGx9ZnVuY3Rpb24gS3Iobil7bi5VPW4uQz1uLkw9bi5SPW4uUD1u%0ALk49bnVsbH1mdW5jdGlvbiBRcihuLHQpe3ZhciBlPXQscj10LlIsdT1lLlU7dT91%0ALkw9PT1lP3UuTD1yOnUuUj1yOm4uXz1yLHIuVT11LGUuVT1yLGUuUj1yLkwsZS5S%0AJiYoZS5SLlU9ZSksci5MPWV9ZnVuY3Rpb24gbnUobix0KXt2YXIgZT10LHI9dC5M%0ALHU9ZS5VO3U/dS5MPT09ZT91Lkw9cjp1LlI9cjpuLl89cixyLlU9dSxlLlU9cixl%0ALkw9ci5SLGUuTCYmKGUuTC5VPWUpLHIuUj1lfWZ1bmN0aW9uIHR1KG4pe2Zvcig7%0Abi5MOyluPW4uTDtyZXR1cm4gbn1mdW5jdGlvbiBldShuLHQpe3ZhciBlLHIsdSxp%0APW4uc29ydChydSkucG9wKCk7Zm9yKFpjPVtdLFZjPW5ldyBBcnJheShuLmxlbmd0%0AaCksWGM9bmV3IEdyLEJjPW5ldyBHcjs7KWlmKHU9JGMsaSYmKCF1fHxpLnk8dS55%0AfHxpLnk9PT11LnkmJmkueDx1LngpKShpLnghPT1lfHxpLnkhPT1yKSYmKFZjW2ku%0AaV09bmV3IGpyKGkpLERyKGkpLGU9aS54LHI9aS55KSxpPW4ucG9wKCk7ZWxzZXtp%0AZighdSlicmVhaztScih1LmFyYyl9dCYmKFpyKHQpLEhyKHQpKTt2YXIgbz17Y2Vs%0AbHM6VmMsZWRnZXM6WmN9O3JldHVybiBYYz1CYz1aYz1WYz1udWxsLG99ZnVuY3Rp%0Ab24gcnUobix0KXtyZXR1cm4gdC55LW4ueXx8dC54LW4ueH1mdW5jdGlvbiB1dShu%0ALHQsZSl7cmV0dXJuKG4ueC1lLngpKih0Lnktbi55KS0obi54LXQueCkqKGUueS1u%0ALnkpfWZ1bmN0aW9uIGl1KG4pe3JldHVybiBuLnh9ZnVuY3Rpb24gb3Uobil7cmV0%0AdXJuIG4ueX1mdW5jdGlvbiBhdSgpe3JldHVybntsZWFmOiEwLG5vZGVzOltdLHBv%0AaW50Om51bGwseDpudWxsLHk6bnVsbH19ZnVuY3Rpb24gY3Uobix0LGUscix1LGkp%0Ae2lmKCFuKHQsZSxyLHUsaSkpe3ZhciBvPS41KihlK3UpLGE9LjUqKHIraSksYz10%0ALm5vZGVzO2NbMF0mJmN1KG4sY1swXSxlLHIsbyxhKSxjWzFdJiZjdShuLGNbMV0s%0AbyxyLHUsYSksY1syXSYmY3UobixjWzJdLGUsYSxvLGkpLGNbM10mJmN1KG4sY1sz%0AXSxvLGEsdSxpKX19ZnVuY3Rpb24gbHUobix0KXtuPVZvLnJnYihuKSx0PVZvLnJn%0AYih0KTt2YXIgZT1uLnIscj1uLmcsdT1uLmIsaT10LnItZSxvPXQuZy1yLGE9dC5i%0ALXU7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiIjIitkdChNYXRoLnJvdW5kKGUr%0AaSpuKSkrZHQoTWF0aC5yb3VuZChyK28qbikpK2R0KE1hdGgucm91bmQodSthKm4p%0AKX19ZnVuY3Rpb24gc3Uobix0KXt2YXIgZSxyPXt9LHU9e307Zm9yKGUgaW4gbill%0AIGluIHQ/cltlXT1ndShuW2VdLHRbZV0pOnVbZV09bltlXTtmb3IoZSBpbiB0KWUg%0AaW4gbnx8KHVbZV09dFtlXSk7cmV0dXJuIGZ1bmN0aW9uKG4pe2ZvcihlIGluIHIp%0AdVtlXT1yW2VdKG4pO3JldHVybiB1fX1mdW5jdGlvbiBmdShuLHQpe3JldHVybiB0%0ALT1uPStuLGZ1bmN0aW9uKGUpe3JldHVybiBuK3QqZX19ZnVuY3Rpb24gaHUobix0%0AKXt2YXIgZSxyLHUsaT1LYy5sYXN0SW5kZXg9UWMubGFzdEluZGV4PTAsbz0tMSxh%0APVtdLGM9W107Zm9yKG4rPSIiLHQrPSIiOyhlPUtjLmV4ZWMobikpJiYocj1RYy5l%0AeGVjKHQpKTspKHU9ci5pbmRleCk+aSYmKHU9dC5zbGljZShpLHUpLGFbb10/YVtv%0AXSs9dTphWysrb109dSksKGU9ZVswXSk9PT0ocj1yWzBdKT9hW29dP2Fbb10rPXI6%0AYVsrK29dPXI6KGFbKytvXT1udWxsLGMucHVzaCh7aTpvLHg6ZnUoZSxyKX0pKSxp%0APVFjLmxhc3RJbmRleDtyZXR1cm4gaTx0Lmxlbmd0aCYmKHU9dC5zbGljZShpKSxh%0AW29dP2Fbb10rPXU6YVsrK29dPXUpLGEubGVuZ3RoPDI/Y1swXT8odD1jWzBdLngs%0AZnVuY3Rpb24obil7cmV0dXJuIHQobikrIiJ9KTpmdW5jdGlvbigpe3JldHVybiB0%0AfToodD1jLmxlbmd0aCxmdW5jdGlvbihuKXtmb3IodmFyIGUscj0wO3Q+cjsrK3Ip%0AYVsoZT1jW3JdKS5pXT1lLngobik7cmV0dXJuIGEuam9pbigiIil9KX1mdW5jdGlv%0AbiBndShuLHQpe2Zvcih2YXIgZSxyPVZvLmludGVycG9sYXRvcnMubGVuZ3RoOy0t%0Acj49MCYmIShlPVZvLmludGVycG9sYXRvcnNbcl0obix0KSk7KTtyZXR1cm4gZX1m%0AdW5jdGlvbiBwdShuLHQpe3ZhciBlLHI9W10sdT1bXSxpPW4ubGVuZ3RoLG89dC5s%0AZW5ndGgsYT1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0aCk7Zm9yKGU9MDthPmU7%0AKytlKXIucHVzaChndShuW2VdLHRbZV0pKTtmb3IoO2k+ZTsrK2UpdVtlXT1uW2Vd%0AO2Zvcig7bz5lOysrZSl1W2VdPXRbZV07cmV0dXJuIGZ1bmN0aW9uKG4pe2Zvcihl%0APTA7YT5lOysrZSl1W2VdPXJbZV0obik7cmV0dXJuIHV9fWZ1bmN0aW9uIHZ1KG4p%0Ae3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMD49dD8wOnQ+PTE/MTpuKHQpfX1m%0AdW5jdGlvbiBkdShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDEtbigxLXQp%0AfX1mdW5jdGlvbiBtdShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLjUqKC41%0APnQ/bigyKnQpOjItbigyLTIqdCkpfX1mdW5jdGlvbiB5dShuKXtyZXR1cm4gbipu%0AfWZ1bmN0aW9uIHh1KG4pe3JldHVybiBuKm4qbn1mdW5jdGlvbiBNdShuKXtpZigw%0APj1uKXJldHVybiAwO2lmKG4+PTEpcmV0dXJuIDE7dmFyIHQ9bipuLGU9dCpuO3Jl%0AdHVybiA0KiguNT5uP2U6Myoobi10KStlLS43NSl9ZnVuY3Rpb24gX3Uobil7cmV0%0AdXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LG4pfX1mdW5jdGlvbiBi%0AdShuKXtyZXR1cm4gMS1NYXRoLmNvcyhuKmthKX1mdW5jdGlvbiB3dShuKXtyZXR1%0Acm4gTWF0aC5wb3coMiwxMCoobi0xKSl9ZnVuY3Rpb24gU3Uobil7cmV0dXJuIDEt%0ATWF0aC5zcXJ0KDEtbipuKX1mdW5jdGlvbiBrdShuLHQpe3ZhciBlO3JldHVybiBh%0Acmd1bWVudHMubGVuZ3RoPDImJih0PS40NSksYXJndW1lbnRzLmxlbmd0aD9lPXQv%0AU2EqTWF0aC5hc2luKDEvbik6KG49MSxlPXQvNCksZnVuY3Rpb24ocil7cmV0dXJu%0AIDErbipNYXRoLnBvdygyLC0xMCpyKSpNYXRoLnNpbigoci1lKSpTYS90KX19ZnVu%0AY3Rpb24gRXUobil7cmV0dXJuIG58fChuPTEuNzAxNTgpLGZ1bmN0aW9uKHQpe3Jl%0AdHVybiB0KnQqKChuKzEpKnQtbil9fWZ1bmN0aW9uIEF1KG4pe3JldHVybiAxLzIu%0ANzU+bj83LjU2MjUqbipuOjIvMi43NT5uPzcuNTYyNSoobi09MS41LzIuNzUpKm4r%0ALjc1OjIuNS8yLjc1Pm4/Ny41NjI1KihuLT0yLjI1LzIuNzUpKm4rLjkzNzU6Ny41%0ANjI1KihuLT0yLjYyNS8yLjc1KSpuKy45ODQzNzV9ZnVuY3Rpb24gQ3Uobix0KXtu%0APVZvLmhjbChuKSx0PVZvLmhjbCh0KTt2YXIgZT1uLmgscj1uLmMsdT1uLmwsaT10%0ALmgtZSxvPXQuYy1yLGE9dC5sLXU7cmV0dXJuIGlzTmFOKG8pJiYobz0wLHI9aXNO%0AYU4ocik/dC5jOnIpLGlzTmFOKGkpPyhpPTAsZT1pc05hTihlKT90Lmg6ZSk6aT4x%0AODA/aS09MzYwOi0xODA+aSYmKGkrPTM2MCksZnVuY3Rpb24obil7cmV0dXJuIG90%0AKGUraSpuLHIrbypuLHUrYSpuKSsiIn19ZnVuY3Rpb24gTnUobix0KXtuPVZvLmhz%0AbChuKSx0PVZvLmhzbCh0KTt2YXIgZT1uLmgscj1uLnMsdT1uLmwsaT10LmgtZSxv%0APXQucy1yLGE9dC5sLXU7cmV0dXJuIGlzTmFOKG8pJiYobz0wLHI9aXNOYU4ocik/%0AdC5zOnIpLGlzTmFOKGkpPyhpPTAsZT1pc05hTihlKT90Lmg6ZSk6aT4xODA/aS09%0AMzYwOi0xODA+aSYmKGkrPTM2MCksZnVuY3Rpb24obil7cmV0dXJuIHV0KGUraSpu%0ALHIrbypuLHUrYSpuKSsiIn19ZnVuY3Rpb24genUobix0KXtuPVZvLmxhYihuKSx0%0APVZvLmxhYih0KTt2YXIgZT1uLmwscj1uLmEsdT1uLmIsaT10LmwtZSxvPXQuYS1y%0ALGE9dC5iLXU7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBjdChlK2kqbixyK28q%0Abix1K2EqbikrIiJ9fWZ1bmN0aW9uIEx1KG4sdCl7cmV0dXJuIHQtPW4sZnVuY3Rp%0Ab24oZSl7cmV0dXJuIE1hdGgucm91bmQobit0KmUpfX1mdW5jdGlvbiBUdShuKXt2%0AYXIgdD1bbi5hLG4uYl0sZT1bbi5jLG4uZF0scj1SdSh0KSx1PXF1KHQsZSksaT1S%0AdShEdShlLHQsLXUpKXx8MDt0WzBdKmVbMV08ZVswXSp0WzFdJiYodFswXSo9LTEs%0AdFsxXSo9LTEscio9LTEsdSo9LTEpLHRoaXMucm90YXRlPShyP01hdGguYXRhbjIo%0AdFsxXSx0WzBdKTpNYXRoLmF0YW4yKC1lWzBdLGVbMV0pKSpOYSx0aGlzLnRyYW5z%0AbGF0ZT1bbi5lLG4uZl0sdGhpcy5zY2FsZT1bcixpXSx0aGlzLnNrZXc9aT9NYXRo%0ALmF0YW4yKHUsaSkqTmE6MH1mdW5jdGlvbiBxdShuLHQpe3JldHVybiBuWzBdKnRb%0AMF0rblsxXSp0WzFdfWZ1bmN0aW9uIFJ1KG4pe3ZhciB0PU1hdGguc3FydChxdShu%0ALG4pKTtyZXR1cm4gdCYmKG5bMF0vPXQsblsxXS89dCksdH1mdW5jdGlvbiBEdShu%0ALHQsZSl7cmV0dXJuIG5bMF0rPWUqdFswXSxuWzFdKz1lKnRbMV0sbn1mdW5jdGlv%0AbiBQdShuLHQpe3ZhciBlLHI9W10sdT1bXSxpPVZvLnRyYW5zZm9ybShuKSxvPVZv%0ALnRyYW5zZm9ybSh0KSxhPWkudHJhbnNsYXRlLGM9by50cmFuc2xhdGUsbD1pLnJv%0AdGF0ZSxzPW8ucm90YXRlLGY9aS5za2V3LGg9by5za2V3LGc9aS5zY2FsZSxwPW8u%0Ac2NhbGU7cmV0dXJuIGFbMF0hPWNbMF18fGFbMV0hPWNbMV0/KHIucHVzaCgidHJh%0AbnNsYXRlKCIsbnVsbCwiLCIsbnVsbCwiKSIpLHUucHVzaCh7aToxLHg6ZnUoYVsw%0AXSxjWzBdKX0se2k6Myx4OmZ1KGFbMV0sY1sxXSl9KSk6Y1swXXx8Y1sxXT9yLnB1%0Ac2goInRyYW5zbGF0ZSgiK2MrIikiKTpyLnB1c2goIiIpLGwhPXM/KGwtcz4xODA/%0Acys9MzYwOnMtbD4xODAmJihsKz0zNjApLHUucHVzaCh7aTpyLnB1c2goci5wb3Ao%0AKSsicm90YXRlKCIsbnVsbCwiKSIpLTIseDpmdShsLHMpfSkpOnMmJnIucHVzaChy%0ALnBvcCgpKyJyb3RhdGUoIitzKyIpIiksZiE9aD91LnB1c2goe2k6ci5wdXNoKHIu%0AcG9wKCkrInNrZXdYKCIsbnVsbCwiKSIpLTIseDpmdShmLGgpfSk6aCYmci5wdXNo%0AKHIucG9wKCkrInNrZXdYKCIraCsiKSIpLGdbMF0hPXBbMF18fGdbMV0hPXBbMV0/%0AKGU9ci5wdXNoKHIucG9wKCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpLHUu%0AcHVzaCh7aTplLTQseDpmdShnWzBdLHBbMF0pfSx7aTplLTIseDpmdShnWzFdLHBb%0AMV0pfSkpOigxIT1wWzBdfHwxIT1wWzFdKSYmci5wdXNoKHIucG9wKCkrInNjYWxl%0AKCIrcCsiKSIpLGU9dS5sZW5ndGgsZnVuY3Rpb24obil7Zm9yKHZhciB0LGk9LTE7%0AKytpPGU7KXJbKHQ9dVtpXSkuaV09dC54KG4pO3JldHVybiByLmpvaW4oIiIpfX1m%0AdW5jdGlvbiBVdShuLHQpe3JldHVybiB0PXQtKG49K24pPzEvKHQtbik6MCxmdW5j%0AdGlvbihlKXtyZXR1cm4oZS1uKSp0fX1mdW5jdGlvbiBqdShuLHQpe3JldHVybiB0%0APXQtKG49K24pPzEvKHQtbik6MCxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgo%0AMCxNYXRoLm1pbigxLChlLW4pKnQpKX19ZnVuY3Rpb24gSHUobil7Zm9yKHZhciB0%0APW4uc291cmNlLGU9bi50YXJnZXQscj1PdSh0LGUpLHU9W3RdO3QhPT1yOyl0PXQu%0AcGFyZW50LHUucHVzaCh0KTtmb3IodmFyIGk9dS5sZW5ndGg7ZSE9PXI7KXUuc3Bs%0AaWNlKGksMCxlKSxlPWUucGFyZW50O3JldHVybiB1fWZ1bmN0aW9uIEZ1KG4pe2Zv%0Acih2YXIgdD1bXSxlPW4ucGFyZW50O251bGwhPWU7KXQucHVzaChuKSxuPWUsZT1l%0ALnBhcmVudDtyZXR1cm4gdC5wdXNoKG4pLHR9ZnVuY3Rpb24gT3Uobix0KXtpZihu%0APT09dClyZXR1cm4gbjtmb3IodmFyIGU9RnUobikscj1GdSh0KSx1PWUucG9wKCks%0AaT1yLnBvcCgpLG89bnVsbDt1PT09aTspbz11LHU9ZS5wb3AoKSxpPXIucG9wKCk7%0AcmV0dXJuIG99ZnVuY3Rpb24gWXUobil7bi5maXhlZHw9Mn1mdW5jdGlvbiBJdShu%0AKXtuLmZpeGVkJj0tN31mdW5jdGlvbiBadShuKXtuLmZpeGVkfD00LG4ucHg9bi54%0ALG4ucHk9bi55fWZ1bmN0aW9uIFZ1KG4pe24uZml4ZWQmPS01fWZ1bmN0aW9uIFh1%0AKG4sdCxlKXt2YXIgcj0wLHU9MDtpZihuLmNoYXJnZT0wLCFuLmxlYWYpZm9yKHZh%0AciBpLG89bi5ub2RlcyxhPW8ubGVuZ3RoLGM9LTE7KytjPGE7KWk9b1tjXSxudWxs%0AIT1pJiYoWHUoaSx0LGUpLG4uY2hhcmdlKz1pLmNoYXJnZSxyKz1pLmNoYXJnZSpp%0ALmN4LHUrPWkuY2hhcmdlKmkuY3kpO2lmKG4ucG9pbnQpe24ubGVhZnx8KG4ucG9p%0AbnQueCs9TWF0aC5yYW5kb20oKS0uNSxuLnBvaW50LnkrPU1hdGgucmFuZG9tKCkt%0ALjUpO3ZhciBsPXQqZVtuLnBvaW50LmluZGV4XTtuLmNoYXJnZSs9bi5wb2ludENo%0AYXJnZT1sLHIrPWwqbi5wb2ludC54LHUrPWwqbi5wb2ludC55fW4uY3g9ci9uLmNo%0AYXJnZSxuLmN5PXUvbi5jaGFyZ2V9ZnVuY3Rpb24gJHUobix0KXtyZXR1cm4gVm8u%0AcmViaW5kKG4sdCwic29ydCIsImNoaWxkcmVuIiwidmFsdWUiKSxuLm5vZGVzPW4s%0Abi5saW5rcz1RdSxufWZ1bmN0aW9uIEJ1KG4sdCl7Zm9yKHZhciBlPVtuXTtudWxs%0AIT0obj1lLnBvcCgpKTspaWYodChuKSwodT1uLmNoaWxkcmVuKSYmKHI9dS5sZW5n%0AdGgpKWZvcih2YXIgcix1Oy0tcj49MDspZS5wdXNoKHVbcl0pfWZ1bmN0aW9uIFd1%0AKG4sdCl7Zm9yKHZhciBlPVtuXSxyPVtdO251bGwhPShuPWUucG9wKCkpOylpZihy%0ALnB1c2gobiksKGk9bi5jaGlsZHJlbikmJih1PWkubGVuZ3RoKSlmb3IodmFyIHUs%0AaSxvPS0xOysrbzx1OyllLnB1c2goaVtvXSk7Zm9yKDtudWxsIT0obj1yLnBvcCgp%0AKTspdChuKX1mdW5jdGlvbiBKdShuKXtyZXR1cm4gbi5jaGlsZHJlbn1mdW5jdGlv%0AbiBHdShuKXtyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBLdShuLHQpe3JldHVybiB0%0ALnZhbHVlLW4udmFsdWV9ZnVuY3Rpb24gUXUobil7cmV0dXJuIFZvLm1lcmdlKG4u%0AbWFwKGZ1bmN0aW9uKG4pe3JldHVybihuLmNoaWxkcmVufHxbXSkubWFwKGZ1bmN0%0AaW9uKHQpe3JldHVybntzb3VyY2U6bix0YXJnZXQ6dH19KX0pKX1mdW5jdGlvbiBu%0AaShuKXtyZXR1cm4gbi54fWZ1bmN0aW9uIHRpKG4pe3JldHVybiBuLnl9ZnVuY3Rp%0Ab24gZWkobix0LGUpe24ueTA9dCxuLnk9ZX1mdW5jdGlvbiByaShuKXtyZXR1cm4g%0AVm8ucmFuZ2Uobi5sZW5ndGgpfWZ1bmN0aW9uIHVpKG4pe2Zvcih2YXIgdD0tMSxl%0APW5bMF0ubGVuZ3RoLHI9W107Kyt0PGU7KXJbdF09MDtyZXR1cm4gcn1mdW5jdGlv%0AbiBpaShuKXtmb3IodmFyIHQsZT0xLHI9MCx1PW5bMF1bMV0saT1uLmxlbmd0aDtp%0APmU7KytlKSh0PW5bZV1bMV0pPnUmJihyPWUsdT10KTtyZXR1cm4gcn1mdW5jdGlv%0AbiBvaShuKXtyZXR1cm4gbi5yZWR1Y2UoYWksMCl9ZnVuY3Rpb24gYWkobix0KXty%0AZXR1cm4gbit0WzFdfWZ1bmN0aW9uIGNpKG4sdCl7cmV0dXJuIGxpKG4sTWF0aC5j%0AZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMisxKSl9ZnVuY3Rpb24gbGko%0Abix0KXtmb3IodmFyIGU9LTEscj0rblswXSx1PShuWzFdLXIpL3QsaT1bXTsrK2U8%0APXQ7KWlbZV09dSplK3I7cmV0dXJuIGl9ZnVuY3Rpb24gc2kobil7cmV0dXJuW1Zv%0ALm1pbihuKSxWby5tYXgobildfWZ1bmN0aW9uIGZpKG4sdCl7cmV0dXJuIG4udmFs%0AdWUtdC52YWx1ZX1mdW5jdGlvbiBoaShuLHQpe3ZhciBlPW4uX3BhY2tfbmV4dDtu%0ALl9wYWNrX25leHQ9dCx0Ll9wYWNrX3ByZXY9bix0Ll9wYWNrX25leHQ9ZSxlLl9w%0AYWNrX3ByZXY9dH1mdW5jdGlvbiBnaShuLHQpe24uX3BhY2tfbmV4dD10LHQuX3Bh%0AY2tfcHJldj1ufWZ1bmN0aW9uIHBpKG4sdCl7dmFyIGU9dC54LW4ueCxyPXQueS1u%0ALnksdT1uLnIrdC5yO3JldHVybi45OTkqdSp1PmUqZStyKnJ9ZnVuY3Rpb24gdmko%0Abil7ZnVuY3Rpb24gdChuKXtzPU1hdGgubWluKG4ueC1uLnIscyksZj1NYXRoLm1h%0AeChuLngrbi5yLGYpLGg9TWF0aC5taW4obi55LW4ucixoKSxnPU1hdGgubWF4KG4u%0AeStuLnIsZyl9aWYoKGU9bi5jaGlsZHJlbikmJihsPWUubGVuZ3RoKSl7dmFyIGUs%0Acix1LGksbyxhLGMsbCxzPTEvMCxmPS0xLzAsaD0xLzAsZz0tMS8wO2lmKGUuZm9y%0ARWFjaChkaSkscj1lWzBdLHIueD0tci5yLHIueT0wLHQociksbD4xJiYodT1lWzFd%0ALHUueD11LnIsdS55PTAsdCh1KSxsPjIpKWZvcihpPWVbMl0seGkocix1LGkpLHQo%0AaSksaGkocixpKSxyLl9wYWNrX3ByZXY9aSxoaShpLHUpLHU9ci5fcGFja19uZXh0%0ALG89MztsPm87bysrKXt4aShyLHUsaT1lW29dKTt2YXIgcD0wLHY9MSxkPTE7Zm9y%0AKGE9dS5fcGFja19uZXh0O2EhPT11O2E9YS5fcGFja19uZXh0LHYrKylpZihwaShh%0ALGkpKXtwPTE7YnJlYWt9aWYoMT09cClmb3IoYz1yLl9wYWNrX3ByZXY7YyE9PWEu%0AX3BhY2tfcHJldiYmIXBpKGMsaSk7Yz1jLl9wYWNrX3ByZXYsZCsrKTtwPyhkPnZ8%0AfHY9PWQmJnUucjxyLnI/Z2kocix1PWEpOmdpKHI9Yyx1KSxvLS0pOihoaShyLGkp%0ALHU9aSx0KGkpKX12YXIgbT0ocytmKS8yLHk9KGgrZykvMix4PTA7Zm9yKG89MDts%0APm87bysrKWk9ZVtvXSxpLngtPW0saS55LT15LHg9TWF0aC5tYXgoeCxpLnIrTWF0%0AaC5zcXJ0KGkueCppLngraS55KmkueSkpO24ucj14LGUuZm9yRWFjaChtaSl9fWZ1%0AbmN0aW9uIGRpKG4pe24uX3BhY2tfbmV4dD1uLl9wYWNrX3ByZXY9bn1mdW5jdGlv%0AbiBtaShuKXtkZWxldGUgbi5fcGFja19uZXh0LGRlbGV0ZSBuLl9wYWNrX3ByZXZ9%0AZnVuY3Rpb24geWkobix0LGUscil7dmFyIHU9bi5jaGlsZHJlbjtpZihuLng9dCs9%0AcipuLngsbi55PWUrPXIqbi55LG4ucio9cix1KWZvcih2YXIgaT0tMSxvPXUubGVu%0AZ3RoOysraTxvOyl5aSh1W2ldLHQsZSxyKX1mdW5jdGlvbiB4aShuLHQsZSl7dmFy%0AIHI9bi5yK2Uucix1PXQueC1uLngsaT10Lnktbi55O2lmKHImJih1fHxpKSl7dmFy%0AIG89dC5yK2UucixhPXUqdStpKmk7byo9byxyKj1yO3ZhciBjPS41KyhyLW8pLygy%0AKmEpLGw9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihyK2EpLShyLT1hKSpyLW8q%0AbykpLygyKmEpO2UueD1uLngrYyp1K2wqaSxlLnk9bi55K2MqaS1sKnV9ZWxzZSBl%0ALng9bi54K3IsZS55PW4ueX1mdW5jdGlvbiBNaShuLHQpe3JldHVybiBuLnBhcmVu%0AdD09dC5wYXJlbnQ/MToyfWZ1bmN0aW9uIF9pKG4pe3ZhciB0PW4uY2hpbGRyZW47%0AcmV0dXJuIHQubGVuZ3RoP3RbMF06bi50fWZ1bmN0aW9uIGJpKG4pe3ZhciB0LGU9%0Abi5jaGlsZHJlbjtyZXR1cm4odD1lLmxlbmd0aCk/ZVt0LTFdOm4udH1mdW5jdGlv%0AbiB3aShuLHQsZSl7dmFyIHI9ZS8odC5pLW4uaSk7dC5jLT1yLHQucys9ZSxuLmMr%0APXIsdC56Kz1lLHQubSs9ZX1mdW5jdGlvbiBTaShuKXtmb3IodmFyIHQsZT0wLHI9%0AMCx1PW4uY2hpbGRyZW4saT11Lmxlbmd0aDstLWk+PTA7KXQ9dVtpXSx0LnorPWUs%0AdC5tKz1lLGUrPXQucysocis9dC5jKX1mdW5jdGlvbiBraShuLHQsZSl7cmV0dXJu%0AIG4uYS5wYXJlbnQ9PT10LnBhcmVudD9uLmE6ZX1mdW5jdGlvbiBFaShuKXtyZXR1%0Acm4gMStWby5tYXgobixmdW5jdGlvbihuKXtyZXR1cm4gbi55fSl9ZnVuY3Rpb24g%0AQWkobil7cmV0dXJuIG4ucmVkdWNlKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4rdC54%0AfSwwKS9uLmxlbmd0aH1mdW5jdGlvbiBDaShuKXt2YXIgdD1uLmNoaWxkcmVuO3Jl%0AdHVybiB0JiZ0Lmxlbmd0aD9DaSh0WzBdKTpufWZ1bmN0aW9uIE5pKG4pe3ZhciB0%0ALGU9bi5jaGlsZHJlbjtyZXR1cm4gZSYmKHQ9ZS5sZW5ndGgpP05pKGVbdC0xXSk6%0Abn1mdW5jdGlvbiB6aShuKXtyZXR1cm57eDpuLngseTpuLnksZHg6bi5keCxkeTpu%0ALmR5fX1mdW5jdGlvbiBMaShuLHQpe3ZhciBlPW4ueCt0WzNdLHI9bi55K3RbMF0s%0AdT1uLmR4LXRbMV0tdFszXSxpPW4uZHktdFswXS10WzJdO3JldHVybiAwPnUmJihl%0AKz11LzIsdT0wKSwwPmkmJihyKz1pLzIsaT0wKSx7eDplLHk6cixkeDp1LGR5Oml9%0AfWZ1bmN0aW9uIFRpKG4pe3ZhciB0PW5bMF0sZT1uW24ubGVuZ3RoLTFdO3JldHVy%0AbiBlPnQ/W3QsZV06W2UsdF19ZnVuY3Rpb24gcWkobil7cmV0dXJuIG4ucmFuZ2VF%0AeHRlbnQ/bi5yYW5nZUV4dGVudCgpOlRpKG4ucmFuZ2UoKSl9ZnVuY3Rpb24gUmko%0Abix0LGUscil7dmFyIHU9ZShuWzBdLG5bMV0pLGk9cih0WzBdLHRbMV0pO3JldHVy%0AbiBmdW5jdGlvbihuKXtyZXR1cm4gaSh1KG4pKX19ZnVuY3Rpb24gRGkobix0KXt2%0AYXIgZSxyPTAsdT1uLmxlbmd0aC0xLGk9bltyXSxvPW5bdV07cmV0dXJuIGk+byYm%0AKGU9cixyPXUsdT1lLGU9aSxpPW8sbz1lKSxuW3JdPXQuZmxvb3IoaSksblt1XT10%0ALmNlaWwobyksbn1mdW5jdGlvbiBQaShuKXtyZXR1cm4gbj97Zmxvb3I6ZnVuY3Rp%0Ab24odCl7cmV0dXJuIE1hdGguZmxvb3IodC9uKSpufSxjZWlsOmZ1bmN0aW9uKHQp%0Ae3JldHVybiBNYXRoLmNlaWwodC9uKSpufX06c2x9ZnVuY3Rpb24gVWkobix0LGUs%0Acil7dmFyIHU9W10saT1bXSxvPTAsYT1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0%0AaCktMTtmb3IoblthXTxuWzBdJiYobj1uLnNsaWNlKCkucmV2ZXJzZSgpLHQ9dC5z%0AbGljZSgpLnJldmVyc2UoKSk7KytvPD1hOyl1LnB1c2goZShuW28tMV0sbltvXSkp%0ALGkucHVzaChyKHRbby0xXSx0W29dKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBl%0APVZvLmJpc2VjdChuLHQsMSxhKS0xO3JldHVybiBpW2VdKHVbZV0odCkpfX1mdW5j%0AdGlvbiBqaShuLHQsZSxyKXtmdW5jdGlvbiB1KCl7dmFyIHU9TWF0aC5taW4obi5s%0AZW5ndGgsdC5sZW5ndGgpPjI/VWk6UmksYz1yP2p1OlV1O3JldHVybiBvPXUobix0%0ALGMsZSksYT11KHQsbixjLGd1KSxpfWZ1bmN0aW9uIGkobil7cmV0dXJuIG8obil9%0AdmFyIG8sYTtyZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24obil7cmV0dXJuIGEobil9%0ALGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhu%0APXQubWFwKE51bWJlciksdSgpKTpufSxpLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sdSgpKTp0fSxpLnJhbmdlUm91bmQ9ZnVu%0AY3Rpb24obil7cmV0dXJuIGkucmFuZ2UobikuaW50ZXJwb2xhdGUoTHUpfSxpLmNs%0AYW1wPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sdSgp%0AKTpyfSxpLmludGVycG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu%0AbGVuZ3RoPyhlPW4sdSgpKTplfSxpLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBZ%0AaShuLHQpfSxpLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSWkobix0%0ALGUpfSxpLm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIEZpKG4sdCksdSgpfSxpLmNv%0AcHk9ZnVuY3Rpb24oKXtyZXR1cm4gamkobix0LGUscil9LHUoKX1mdW5jdGlvbiBI%0AaShuLHQpe3JldHVybiBWby5yZWJpbmQobix0LCJyYW5nZSIsInJhbmdlUm91bmQi%0ALCJpbnRlcnBvbGF0ZSIsImNsYW1wIil9ZnVuY3Rpb24gRmkobix0KXtyZXR1cm4g%0ARGkobixQaShPaShuLHQpWzJdKSl9ZnVuY3Rpb24gT2kobix0KXtudWxsPT10JiYo%0AdD0xMCk7dmFyIGU9VGkobikscj1lWzFdLWVbMF0sdT1NYXRoLnBvdygxMCxNYXRo%0ALmZsb29yKE1hdGgubG9nKHIvdCkvTWF0aC5MTjEwKSksaT10L3IqdTtyZXR1cm4u%0AMTU+PWk/dSo9MTA6LjM1Pj1pP3UqPTU6Ljc1Pj1pJiYodSo9MiksZVswXT1NYXRo%0ALmNlaWwoZVswXS91KSp1LGVbMV09TWF0aC5mbG9vcihlWzFdL3UpKnUrLjUqdSxl%0AWzJdPXUsZX1mdW5jdGlvbiBZaShuLHQpe3JldHVybiBWby5yYW5nZS5hcHBseShW%0AbyxPaShuLHQpKX1mdW5jdGlvbiBJaShuLHQsZSl7dmFyIHI9T2kobix0KTtpZihl%0AKXt2YXIgdT1LYS5leGVjKGUpO2lmKHUuc2hpZnQoKSwicyI9PT11WzhdKXt2YXIg%0AaT1Wby5mb3JtYXRQcmVmaXgoTWF0aC5tYXgoaWEoclswXSksaWEoclsxXSkpKTty%0AZXR1cm4gdVs3XXx8KHVbN109Ii4iK1ppKGkuc2NhbGUoclsyXSkpKSx1WzhdPSJm%0AIixlPVZvLmZvcm1hdCh1LmpvaW4oIiIpKSxmdW5jdGlvbihuKXtyZXR1cm4gZShp%0ALnNjYWxlKG4pKStpLnN5bWJvbH19dVs3XXx8KHVbN109Ii4iK1ZpKHVbOF0scikp%0ALGU9dS5qb2luKCIiKX1lbHNlIGU9IiwuIitaaShyWzJdKSsiZiI7cmV0dXJuIFZv%0ALmZvcm1hdChlKX1mdW5jdGlvbiBaaShuKXtyZXR1cm4tTWF0aC5mbG9vcihNYXRo%0ALmxvZyhuKS9NYXRoLkxOMTArLjAxKX1mdW5jdGlvbiBWaShuLHQpe3ZhciBlPVpp%0AKHRbMl0pO3JldHVybiBuIGluIGZsP01hdGguYWJzKGUtWmkoTWF0aC5tYXgoaWEo%0AdFswXSksaWEodFsxXSkpKSkrICsoImUiIT09bik6ZS0yKigiJSI9PT1uKX1mdW5j%0AdGlvbiBYaShuLHQsZSxyKXtmdW5jdGlvbiB1KG4pe3JldHVybihlP01hdGgubG9n%0AKDA+bj8wOm4pOi1NYXRoLmxvZyhuPjA/MDotbikpL01hdGgubG9nKHQpfWZ1bmN0%0AaW9uIGkobil7cmV0dXJuIGU/TWF0aC5wb3codCxuKTotTWF0aC5wb3codCwtbil9%0AZnVuY3Rpb24gbyh0KXtyZXR1cm4gbih1KHQpKX1yZXR1cm4gby5pbnZlcnQ9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGkobi5pbnZlcnQodCkpfSxvLmRvbWFpbj1mdW5jdGlv%0Abih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10WzBdPj0wLG4uZG9tYWlu%0AKChyPXQubWFwKE51bWJlcikpLm1hcCh1KSksbyk6cn0sby5iYXNlPWZ1bmN0aW9u%0AKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlLG4uZG9tYWluKHIubWFw%0AKHUpKSxvKTp0fSxvLm5pY2U9ZnVuY3Rpb24oKXt2YXIgdD1EaShyLm1hcCh1KSxl%0AP01hdGg6Z2wpO3JldHVybiBuLmRvbWFpbih0KSxyPXQubWFwKGkpLG99LG8udGlj%0Aa3M9ZnVuY3Rpb24oKXt2YXIgbj1UaShyKSxvPVtdLGE9blswXSxjPW5bMV0sbD1N%0AYXRoLmZsb29yKHUoYSkpLHM9TWF0aC5jZWlsKHUoYykpLGY9dCUxPzI6dDtpZihp%0Ac0Zpbml0ZShzLWwpKXtpZihlKXtmb3IoO3M+bDtsKyspZm9yKHZhciBoPTE7Zj5o%0AO2grKylvLnB1c2goaShsKSpoKTtvLnB1c2goaShsKSl9ZWxzZSBmb3Ioby5wdXNo%0AKGkobCkpO2wrKzxzOylmb3IodmFyIGg9Zi0xO2g+MDtoLS0pby5wdXNoKGkobCkq%0AaCk7Zm9yKGw9MDtvW2xdPGE7bCsrKTtmb3Iocz1vLmxlbmd0aDtvW3MtMV0+Yztz%0ALS0pO289by5zbGljZShsLHMpfXJldHVybiBvfSxvLnRpY2tGb3JtYXQ9ZnVuY3Rp%0Ab24obix0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gaGw7YXJndW1lbnRz%0ALmxlbmd0aDwyP3Q9aGw6ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVZvLmZvcm1h%0AdCh0KSk7dmFyIHIsYT1NYXRoLm1heCguMSxuL28udGlja3MoKS5sZW5ndGgpLGM9%0AZT8ocj0xZS0xMixNYXRoLmNlaWwpOihyPS0xZS0xMixNYXRoLmZsb29yKTtyZXR1%0Acm4gZnVuY3Rpb24obil7cmV0dXJuIG4vaShjKHUobikrcikpPD1hP3Qobik6IiJ9%0AfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gWGkobi5jb3B5KCksdCxlLHIpfSxI%0AaShvLG4pfWZ1bmN0aW9uICRpKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBu%0AKHUodCkpfXZhciB1PUJpKHQpLGk9QmkoMS90KTtyZXR1cm4gci5pbnZlcnQ9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGkobi5pbnZlcnQodCkpfSxyLmRvbWFpbj1mdW5jdGlv%0Abih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obi5kb21haW4oKGU9dC5tYXAo%0ATnVtYmVyKSkubWFwKHUpKSxyKTplfSxyLnRpY2tzPWZ1bmN0aW9uKG4pe3JldHVy%0AbiBZaShlLG4pfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gSWko%0AZSxuLHQpfSxyLm5pY2U9ZnVuY3Rpb24obil7cmV0dXJuIHIuZG9tYWluKEZpKGUs%0AbikpfSxyLmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyh1PUJpKHQ9byksaT1CaSgxL3QpLG4uZG9tYWluKGUubWFwKHUpKSxyKTp0%0AfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gJGkobi5jb3B5KCksdCxlKX0sSGko%0AcixuKX1mdW5jdGlvbiBCaShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDA+%0AdD8tTWF0aC5wb3coLXQsbik6TWF0aC5wb3codCxuKX19ZnVuY3Rpb24gV2kobix0%0AKXtmdW5jdGlvbiBlKGUpe3JldHVybiBpWygodS5nZXQoZSl8fCgicmFuZ2UiPT09%0AdC50P3Uuc2V0KGUsbi5wdXNoKGUpKTowLzApKS0xKSVpLmxlbmd0aF19ZnVuY3Rp%0Ab24gcih0LGUpe3JldHVybiBWby5yYW5nZShuLmxlbmd0aCkubWFwKGZ1bmN0aW9u%0AKG4pe3JldHVybiB0K2Uqbn0pfXZhciB1LGksYTtyZXR1cm4gZS5kb21haW49ZnVu%0AY3Rpb24ocil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG47bj1bXSx1PW5l%0AdyBvO2Zvcih2YXIgaSxhPS0xLGM9ci5sZW5ndGg7KythPGM7KXUuaGFzKGk9clth%0AXSl8fHUuc2V0KGksbi5wdXNoKGkpKTtyZXR1cm4gZVt0LnRdLmFwcGx5KGUsdC5h%0AKX0sZS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o%0AaT1uLGE9MCx0PXt0OiJyYW5nZSIsYTphcmd1bWVudHN9LGUpOml9LGUucmFuZ2VQ%0Ab2ludHM9ZnVuY3Rpb24odSxvKXthcmd1bWVudHMubGVuZ3RoPDImJihvPTApO3Zh%0AciBjPXVbMF0sbD11WzFdLHM9KGwtYykvKE1hdGgubWF4KDEsbi5sZW5ndGgtMSkr%0Abyk7cmV0dXJuIGk9cihuLmxlbmd0aDwyPyhjK2wpLzI6YytzKm8vMixzKSxhPTAs%0AdD17dDoicmFuZ2VQb2ludHMiLGE6YXJndW1lbnRzfSxlfSxlLnJhbmdlQmFuZHM9%0AZnVuY3Rpb24odSxvLGMpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKG89MCksYXJndW1l%0AbnRzLmxlbmd0aDwzJiYoYz1vKTt2YXIgbD11WzFdPHVbMF0scz11W2wtMF0sZj11%0AWzEtbF0saD0oZi1zKS8obi5sZW5ndGgtbysyKmMpO3JldHVybiBpPXIocytoKmMs%0AaCksbCYmaS5yZXZlcnNlKCksYT1oKigxLW8pLHQ9e3Q6InJhbmdlQmFuZHMiLGE6%0AYXJndW1lbnRzfSxlfSxlLnJhbmdlUm91bmRCYW5kcz1mdW5jdGlvbih1LG8sYyl7%0AYXJndW1lbnRzLmxlbmd0aDwyJiYobz0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihj%0APW8pO3ZhciBsPXVbMV08dVswXSxzPXVbbC0wXSxmPXVbMS1sXSxoPU1hdGguZmxv%0Ab3IoKGYtcykvKG4ubGVuZ3RoLW8rMipjKSksZz1mLXMtKG4ubGVuZ3RoLW8pKmg7%0AcmV0dXJuIGk9cihzK01hdGgucm91bmQoZy8yKSxoKSxsJiZpLnJldmVyc2UoKSxh%0APU1hdGgucm91bmQoaCooMS1vKSksdD17dDoicmFuZ2VSb3VuZEJhbmRzIixhOmFy%0AZ3VtZW50c30sZX0sZS5yYW5nZUJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZS5y%0AYW5nZUV4dGVudD1mdW5jdGlvbigpe3JldHVybiBUaSh0LmFbMF0pfSxlLmNvcHk9%0AZnVuY3Rpb24oKXtyZXR1cm4gV2kobix0KX0sZS5kb21haW4obil9ZnVuY3Rpb24g%0ASmkoZSxyKXtmdW5jdGlvbiB1KCl7dmFyIG49MCx0PXIubGVuZ3RoO2ZvcihvPVtd%0AOysrbjx0OylvW24tMV09Vm8ucXVhbnRpbGUoZSxuL3QpO3JldHVybiBpfWZ1bmN0%0AaW9uIGkobil7cmV0dXJuIGlzTmFOKG49K24pP3ZvaWQgMDpyW1ZvLmJpc2VjdChv%0ALG4pXX12YXIgbztyZXR1cm4gaS5kb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIGFy%0AZ3VtZW50cy5sZW5ndGg/KGU9ci5maWx0ZXIodCkuc29ydChuKSx1KCkpOmV9LGku%0AcmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bix1%0AKCkpOnJ9LGkucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGkuaW52ZXJ0%0ARXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBuPXIuaW5kZXhPZihuKSwwPm4/WzAv%0AMCwwLzBdOltuPjA/b1tuLTFdOmVbMF0sbjxvLmxlbmd0aD9vW25dOmVbZS5sZW5n%0AdGgtMV1dfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSmkoZSxyKX0sdSgpfWZ1%0AbmN0aW9uIEdpKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlW01hdGgubWF4%0AKDAsTWF0aC5taW4obyxNYXRoLmZsb29yKGkqKHQtbikpKSldfWZ1bmN0aW9uIHUo%0AKXtyZXR1cm4gaT1lLmxlbmd0aC8odC1uKSxvPWUubGVuZ3RoLTEscn12YXIgaSxv%0AO3JldHVybiByLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl%0Abmd0aD8obj0rZVswXSx0PStlW2UubGVuZ3RoLTFdLHUoKSk6W24sdF19LHIucmFu%0AZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix1KCkp%0AOmV9LHIuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0PWUuaW5kZXhP%0AZih0KSx0PTA+dD8wLzA6dC9pK24sW3QsdCsxL2ldfSxyLmNvcHk9ZnVuY3Rpb24o%0AKXtyZXR1cm4gR2kobix0LGUpfSx1KCl9ZnVuY3Rpb24gS2kobix0KXtmdW5jdGlv%0AbiBlKGUpe3JldHVybiBlPj1lP3RbVm8uYmlzZWN0KG4sZSldOnZvaWQgMH1yZXR1%0Acm4gZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/%0AKG49dCxlKTpufSxlLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu%0AbGVuZ3RoPyh0PW4sZSk6dH0sZS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oZSl7cmV0%0AdXJuIGU9dC5pbmRleE9mKGUpLFtuW2UtMV0sbltlXV19LGUuY29weT1mdW5jdGlv%0Abigpe3JldHVybiBLaShuLHQpfSxlfWZ1bmN0aW9uIFFpKG4pe2Z1bmN0aW9uIHQo%0Abil7cmV0dXJuK259cmV0dXJuIHQuaW52ZXJ0PXQsdC5kb21haW49dC5yYW5nZT1m%0AdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLm1hcCh0KSx0%0AKTpufSx0LnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBZaShuLHQpfSx0LnRpY2tG%0Ab3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSWkobix0LGUpfSx0LmNvcHk9ZnVu%0AY3Rpb24oKXtyZXR1cm4gUWkobil9LHR9ZnVuY3Rpb24gbm8obil7cmV0dXJuIG4u%0AaW5uZXJSYWRpdXN9ZnVuY3Rpb24gdG8obil7cmV0dXJuIG4ub3V0ZXJSYWRpdXN9%0AZnVuY3Rpb24gZW8obil7cmV0dXJuIG4uc3RhcnRBbmdsZX1mdW5jdGlvbiBybyhu%0AKXtyZXR1cm4gbi5lbmRBbmdsZX1mdW5jdGlvbiB1byhuKXtmdW5jdGlvbiB0KHQp%0Ae2Z1bmN0aW9uIG8oKXtsLnB1c2goIk0iLGkobihzKSxhKSl9Zm9yKHZhciBjLGw9%0AW10scz1bXSxmPS0xLGg9dC5sZW5ndGgsZz1idChlKSxwPWJ0KHIpOysrZjxoOyl1%0ALmNhbGwodGhpcyxjPXRbZl0sZik/cy5wdXNoKFsrZy5jYWxsKHRoaXMsYyxmKSwr%0AcC5jYWxsKHRoaXMsYyxmKV0pOnMubGVuZ3RoJiYobygpLHM9W10pO3JldHVybiBz%0ALmxlbmd0aCYmbygpLGwubGVuZ3RoP2wuam9pbigiIik6bnVsbH12YXIgZT1Tcixy%0APWtyLHU9U2UsaT1pbyxvPWkua2V5LGE9Ljc7cmV0dXJuIHQueD1mdW5jdGlvbihu%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHQpOmV9LHQueT1mdW5jdGlv%0AbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHQpOnJ9LHQuZGVmaW5l%0AZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1uLHQpOnV9%0ALHQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIG4/aT1uOihpPU1sLmdldChuKXx8aW8p%0ALmtleSx0KTpvfSx0LnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50%0Acy5sZW5ndGg/KGE9bix0KTphfSx0fWZ1bmN0aW9uIGlvKG4pe3JldHVybiBuLmpv%0AaW4oIkwiKX1mdW5jdGlvbiBvbyhuKXtyZXR1cm4gaW8obikrIloifWZ1bmN0aW9u%0AIGFvKG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgscj1uWzBdLHU9W3JbMF0sIiwi%0ALHJbMV1dOysrdDxlOyl1LnB1c2goIkgiLChyWzBdKyhyPW5bdF0pWzBdKS8yLCJW%0AIixyWzFdKTtyZXR1cm4gZT4xJiZ1LnB1c2goIkgiLHJbMF0pLHUuam9pbigiIil9%0AZnVuY3Rpb24gY28obil7Zm9yKHZhciB0PTAsZT1uLmxlbmd0aCxyPW5bMF0sdT1b%0AclswXSwiLCIsclsxXV07Kyt0PGU7KXUucHVzaCgiViIsKHI9blt0XSlbMV0sIkgi%0ALHJbMF0pO3JldHVybiB1LmpvaW4oIiIpfWZ1bmN0aW9uIGxvKG4pe2Zvcih2YXIg%0AdD0wLGU9bi5sZW5ndGgscj1uWzBdLHU9W3JbMF0sIiwiLHJbMV1dOysrdDxlOyl1%0ALnB1c2goIkgiLChyPW5bdF0pWzBdLCJWIixyWzFdKTtyZXR1cm4gdS5qb2luKCIi%0AKX1mdW5jdGlvbiBzbyhuLHQpe3JldHVybiBuLmxlbmd0aDw0P2lvKG4pOm5bMV0r%0AZ28obi5zbGljZSgxLG4ubGVuZ3RoLTEpLHBvKG4sdCkpfWZ1bmN0aW9uIGZvKG4s%0AdCl7cmV0dXJuIG4ubGVuZ3RoPDM/aW8obik6blswXStnbygobi5wdXNoKG5bMF0p%0ALG4pLHBvKFtuW24ubGVuZ3RoLTJdXS5jb25jYXQobixbblsxXV0pLHQpKX1mdW5j%0AdGlvbiBobyhuLHQpe3JldHVybiBuLmxlbmd0aDwzP2lvKG4pOm5bMF0rZ28obixw%0AbyhuLHQpKX1mdW5jdGlvbiBnbyhuLHQpe2lmKHQubGVuZ3RoPDF8fG4ubGVuZ3Ro%0AIT10Lmxlbmd0aCYmbi5sZW5ndGghPXQubGVuZ3RoKzIpcmV0dXJuIGlvKG4pO3Zh%0AciBlPW4ubGVuZ3RoIT10Lmxlbmd0aCxyPSIiLHU9blswXSxpPW5bMV0sbz10WzBd%0ALGE9byxjPTE7aWYoZSYmKHIrPSJRIisoaVswXS0yKm9bMF0vMykrIiwiKyhpWzFd%0ALTIqb1sxXS8zKSsiLCIraVswXSsiLCIraVsxXSx1PW5bMV0sYz0yKSx0Lmxlbmd0%0AaD4xKXthPXRbMV0saT1uW2NdLGMrKyxyKz0iQyIrKHVbMF0rb1swXSkrIiwiKyh1%0AWzFdK29bMV0pKyIsIisoaVswXS1hWzBdKSsiLCIrKGlbMV0tYVsxXSkrIiwiK2lb%0AMF0rIiwiK2lbMV07Zm9yKHZhciBsPTI7bDx0Lmxlbmd0aDtsKyssYysrKWk9bltj%0AXSxhPXRbbF0scis9IlMiKyhpWzBdLWFbMF0pKyIsIisoaVsxXS1hWzFdKSsiLCIr%0AaVswXSsiLCIraVsxXX1pZihlKXt2YXIgcz1uW2NdO3IrPSJRIisoaVswXSsyKmFb%0AMF0vMykrIiwiKyhpWzFdKzIqYVsxXS8zKSsiLCIrc1swXSsiLCIrc1sxXX1yZXR1%0Acm4gcn1mdW5jdGlvbiBwbyhuLHQpe2Zvcih2YXIgZSxyPVtdLHU9KDEtdCkvMixp%0APW5bMF0sbz1uWzFdLGE9MSxjPW4ubGVuZ3RoOysrYTxjOyllPWksaT1vLG89blth%0AXSxyLnB1c2goW3UqKG9bMF0tZVswXSksdSoob1sxXS1lWzFdKV0pO3JldHVybiBy%0AfWZ1bmN0aW9uIHZvKG4pe2lmKG4ubGVuZ3RoPDMpcmV0dXJuIGlvKG4pO3ZhciB0%0APTEsZT1uLmxlbmd0aCxyPW5bMF0sdT1yWzBdLGk9clsxXSxvPVt1LHUsdSwocj1u%0AWzFdKVswXV0sYT1baSxpLGksclsxXV0sYz1bdSwiLCIsaSwiTCIsTW8od2wsbyks%0AIiwiLE1vKHdsLGEpXTtmb3Iobi5wdXNoKG5bZS0xXSk7Kyt0PD1lOylyPW5bdF0s%0Aby5zaGlmdCgpLG8ucHVzaChyWzBdKSxhLnNoaWZ0KCksYS5wdXNoKHJbMV0pLF9v%0AKGMsbyxhKTtyZXR1cm4gbi5wb3AoKSxjLnB1c2goIkwiLHIpLGMuam9pbigiIil9%0AZnVuY3Rpb24gbW8obil7aWYobi5sZW5ndGg8NClyZXR1cm4gaW8obik7Zm9yKHZh%0AciB0LGU9W10scj0tMSx1PW4ubGVuZ3RoLGk9WzBdLG89WzBdOysrcjwzOyl0PW5b%0Acl0saS5wdXNoKHRbMF0pLG8ucHVzaCh0WzFdKTtmb3IoZS5wdXNoKE1vKHdsLGkp%0AKyIsIitNbyh3bCxvKSksLS1yOysrcjx1Oyl0PW5bcl0saS5zaGlmdCgpLGkucHVz%0AaCh0WzBdKSxvLnNoaWZ0KCksby5wdXNoKHRbMV0pLF9vKGUsaSxvKTtyZXR1cm4g%0AZS5qb2luKCIiKX1mdW5jdGlvbiB5byhuKXtmb3IodmFyIHQsZSxyPS0xLHU9bi5s%0AZW5ndGgsaT11KzQsbz1bXSxhPVtdOysrcjw0OyllPW5bciV1XSxvLnB1c2goZVsw%0AXSksYS5wdXNoKGVbMV0pO2Zvcih0PVtNbyh3bCxvKSwiLCIsTW8od2wsYSldLC0t%0AcjsrK3I8aTspZT1uW3IldV0sby5zaGlmdCgpLG8ucHVzaChlWzBdKSxhLnNoaWZ0%0AKCksYS5wdXNoKGVbMV0pLF9vKHQsbyxhKTtyZXR1cm4gdC5qb2luKCIiKX1mdW5j%0AdGlvbiB4byhuLHQpe3ZhciBlPW4ubGVuZ3RoLTE7aWYoZSlmb3IodmFyIHIsdSxp%0APW5bMF1bMF0sbz1uWzBdWzFdLGE9bltlXVswXS1pLGM9bltlXVsxXS1vLGw9LTE7%0AKytsPD1lOylyPW5bbF0sdT1sL2UsclswXT10KnJbMF0rKDEtdCkqKGkrdSphKSxy%0AWzFdPXQqclsxXSsoMS10KSoobyt1KmMpO3JldHVybiB2byhuKX1mdW5jdGlvbiBN%0AbyhuLHQpe3JldHVybiBuWzBdKnRbMF0rblsxXSp0WzFdK25bMl0qdFsyXStuWzNd%0AKnRbM119ZnVuY3Rpb24gX28obix0LGUpe24ucHVzaCgiQyIsTW8oX2wsdCksIiwi%0ALE1vKF9sLGUpLCIsIixNbyhibCx0KSwiLCIsTW8oYmwsZSksIiwiLE1vKHdsLHQp%0ALCIsIixNbyh3bCxlKSl9ZnVuY3Rpb24gYm8obix0KXtyZXR1cm4odFsxXS1uWzFd%0AKS8odFswXS1uWzBdKX1mdW5jdGlvbiB3byhuKXtmb3IodmFyIHQ9MCxlPW4ubGVu%0AZ3RoLTEscj1bXSx1PW5bMF0saT1uWzFdLG89clswXT1ibyh1LGkpOysrdDxlOyly%0AW3RdPShvKyhvPWJvKHU9aSxpPW5bdCsxXSkpKS8yO3JldHVybiByW3RdPW8scn1m%0AdW5jdGlvbiBTbyhuKXtmb3IodmFyIHQsZSxyLHUsaT1bXSxvPXdvKG4pLGE9LTEs%0AYz1uLmxlbmd0aC0xOysrYTxjOyl0PWJvKG5bYV0sblthKzFdKSxpYSh0KTxFYT9v%0AW2FdPW9bYSsxXT0wOihlPW9bYV0vdCxyPW9bYSsxXS90LHU9ZSplK3Iqcix1Pjkm%0AJih1PTMqdC9NYXRoLnNxcnQodSksb1thXT11KmUsb1thKzFdPXUqcikpO2Zvcihh%0APS0xOysrYTw9YzspdT0obltNYXRoLm1pbihjLGErMSldWzBdLW5bTWF0aC5tYXgo%0AMCxhLTEpXVswXSkvKDYqKDErb1thXSpvW2FdKSksaS5wdXNoKFt1fHwwLG9bYV0q%0AdXx8MF0pO3JldHVybiBpfWZ1bmN0aW9uIGtvKG4pe3JldHVybiBuLmxlbmd0aDwz%0AP2lvKG4pOm5bMF0rZ28obixTbyhuKSl9ZnVuY3Rpb24gRW8obil7Zm9yKHZhciB0%0ALGUscix1PS0xLGk9bi5sZW5ndGg7Kyt1PGk7KXQ9blt1XSxlPXRbMF0scj10WzFd%0AK3lsLHRbMF09ZSpNYXRoLmNvcyhyKSx0WzFdPWUqTWF0aC5zaW4ocik7cmV0dXJu%0AIG59ZnVuY3Rpb24gQW8obil7ZnVuY3Rpb24gdCh0KXtmdW5jdGlvbiBjKCl7di5w%0AdXNoKCJNIixhKG4obSksZikscyxsKG4oZC5yZXZlcnNlKCkpLGYpLCJaIil9Zm9y%0AKHZhciBoLGcscCx2PVtdLGQ9W10sbT1bXSx5PS0xLHg9dC5sZW5ndGgsTT1idChl%0AKSxfPWJ0KHUpLGI9ZT09PXI/ZnVuY3Rpb24oKXtyZXR1cm4gZ306YnQociksdz11%0APT09aT9mdW5jdGlvbigpe3JldHVybiBwfTpidChpKTsrK3k8eDspby5jYWxsKHRo%0AaXMsaD10W3ldLHkpPyhkLnB1c2goW2c9K00uY2FsbCh0aGlzLGgseSkscD0rXy5j%0AYWxsKHRoaXMsaCx5KV0pLG0ucHVzaChbK2IuY2FsbCh0aGlzLGgseSksK3cuY2Fs%0AbCh0aGlzLGgseSldKSk6ZC5sZW5ndGgmJihjKCksZD1bXSxtPVtdKTtyZXR1cm4g%0AZC5sZW5ndGgmJmMoKSx2Lmxlbmd0aD92LmpvaW4oIiIpOm51bGx9dmFyIGU9U3Is%0Acj1Tcix1PTAsaT1rcixvPVNlLGE9aW8sYz1hLmtleSxsPWEscz0iTCIsZj0uNzty%0AZXR1cm4gdC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhl%0APXI9bix0KTpyfSx0LngwPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyhlPW4sdCk6ZX0sdC54MT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRz%0ALmxlbmd0aD8ocj1uLHQpOnJ9LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1l%0AbnRzLmxlbmd0aD8odT1pPW4sdCk6aX0sdC55MD1mdW5jdGlvbihuKXtyZXR1cm4g%0AYXJndW1lbnRzLmxlbmd0aD8odT1uLHQpOnV9LHQueTE9ZnVuY3Rpb24obil7cmV0%0AdXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bix0KTppfSx0LmRlZmluZWQ9ZnVuY3Rp%0Ab24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bix0KTpvfSx0LmludGVy%0AcG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJm%0AdW5jdGlvbiI9PXR5cGVvZiBuP2E9bjooYT1NbC5nZXQobil8fGlvKS5rZXksbD1h%0ALnJldmVyc2V8fGEscz1hLmNsb3NlZD8iTSI6IkwiLHQpOmN9LHQudGVuc2lvbj1m%0AdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1uLHQpOmZ9LHR9%0AZnVuY3Rpb24gQ28obil7cmV0dXJuIG4ucmFkaXVzfWZ1bmN0aW9uIE5vKG4pe3Jl%0AdHVybltuLngsbi55XX1mdW5jdGlvbiB6byhuKXtyZXR1cm4gZnVuY3Rpb24oKXt2%0AYXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlPXRbMF0scj10WzFdK3lsO3Jl%0AdHVybltlKk1hdGguY29zKHIpLGUqTWF0aC5zaW4ocildfX1mdW5jdGlvbiBMbygp%0Ae3JldHVybiA2NH1mdW5jdGlvbiBUbygpe3JldHVybiJjaXJjbGUifWZ1bmN0aW9u%0AIHFvKG4pe3ZhciB0PU1hdGguc3FydChuL3dhKTtyZXR1cm4iTTAsIit0KyJBIit0%0AKyIsIit0KyIgMCAxLDEgMCwiKy10KyJBIit0KyIsIit0KyIgMCAxLDEgMCwiK3Qr%0AIloifWZ1bmN0aW9uIFJvKG4sdCl7cmV0dXJuIHNhKG4sTmwpLG4uaWQ9dCxufWZ1%0AbmN0aW9uIERvKG4sdCxlLHIpe3ZhciB1PW4uaWQ7cmV0dXJuIFAobiwiZnVuY3Rp%0Ab24iPT10eXBlb2YgZT9mdW5jdGlvbihuLGksbyl7bi5fX3RyYW5zaXRpb25fX1t1%0AXS50d2Vlbi5zZXQodCxyKGUuY2FsbChuLG4uX19kYXRhX18saSxvKSkpfTooZT1y%0AKGUpLGZ1bmN0aW9uKG4pe24uX190cmFuc2l0aW9uX19bdV0udHdlZW4uc2V0KHQs%0AZSl9KSl9ZnVuY3Rpb24gUG8obil7cmV0dXJuIG51bGw9PW4mJihuPSIiKSxmdW5j%0AdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gVW8obix0LGUscil7%0AdmFyIHU9bi5fX3RyYW5zaXRpb25fX3x8KG4uX190cmFuc2l0aW9uX189e2FjdGl2%0AZTowLGNvdW50OjB9KSxpPXVbZV07aWYoIWkpe3ZhciBhPXIudGltZTtpPXVbZV09%0Ae3R3ZWVuOm5ldyBvLHRpbWU6YSxlYXNlOnIuZWFzZSxkZWxheTpyLmRlbGF5LGR1%0AcmF0aW9uOnIuZHVyYXRpb259LCsrdS5jb3VudCxWby50aW1lcihmdW5jdGlvbihy%0AKXtmdW5jdGlvbiBvKHIpe3JldHVybiB1LmFjdGl2ZT5lP2woKToodS5hY3RpdmU9%0AZSxpLmV2ZW50JiZpLmV2ZW50LnN0YXJ0LmNhbGwobixzLHQpLGkudHdlZW4uZm9y%0ARWFjaChmdW5jdGlvbihlLHIpeyhyPXIuY2FsbChuLHMsdCkpJiZ2LnB1c2gocil9%0AKSxWby50aW1lcihmdW5jdGlvbigpe3JldHVybiBwLmM9YyhyfHwxKT9TZTpjLDF9%0ALDAsYSksdm9pZCAwKX1mdW5jdGlvbiBjKHIpe2lmKHUuYWN0aXZlIT09ZSlyZXR1%0Acm4gbCgpO2Zvcih2YXIgbz1yL2csYT1mKG8pLGM9di5sZW5ndGg7Yz4wOyl2Wy0t%0AY10uY2FsbChuLGEpO3JldHVybiBvPj0xPyhpLmV2ZW50JiZpLmV2ZW50LmVuZC5j%0AYWxsKG4scyx0KSxsKCkpOnZvaWQgMAp9ZnVuY3Rpb24gbCgpe3JldHVybi0tdS5j%0Ab3VudD9kZWxldGUgdVtlXTpkZWxldGUgbi5fX3RyYW5zaXRpb25fXywxfXZhciBz%0APW4uX19kYXRhX18sZj1pLmVhc2UsaD1pLmRlbGF5LGc9aS5kdXJhdGlvbixwPVdh%0ALHY9W107cmV0dXJuIHAudD1oK2Escj49aD9vKHItaCk6KHAuYz1vLHZvaWQgMCl9%0ALDAsYSl9fWZ1bmN0aW9uIGpvKG4sdCl7bi5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0%0AaW9uKG4pe3JldHVybiJ0cmFuc2xhdGUoIit0KG4pKyIsMCkifSl9ZnVuY3Rpb24g%0ASG8obix0KXtuLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24obil7cmV0dXJuInRy%0AYW5zbGF0ZSgwLCIrdChuKSsiKSJ9KX1mdW5jdGlvbiBGbyhuKXtyZXR1cm4gbi50%0Ab0lTT1N0cmluZygpfWZ1bmN0aW9uIE9vKG4sdCxlKXtmdW5jdGlvbiByKHQpe3Jl%0AdHVybiBuKHQpfWZ1bmN0aW9uIHUobixlKXt2YXIgcj1uWzFdLW5bMF0sdT1yL2Us%0AaT1Wby5iaXNlY3QoamwsdSk7cmV0dXJuIGk9PWpsLmxlbmd0aD9bdC55ZWFyLE9p%0AKG4ubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLzMxNTM2ZTZ9KSxlKVsyXV06aT90%0AW3UvamxbaS0xXTxqbFtpXS91P2ktMTppXTpbT2wsT2kobixlKVsyXV19cmV0dXJu%0AIHIuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBZbyhuLmludmVydCh0KSl9LHIu%0AZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuLmRv%0AbWFpbih0KSxyKTpuLmRvbWFpbigpLm1hcChZbyl9LHIubmljZT1mdW5jdGlvbihu%0ALHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIWlzTmFOKGUpJiYhbi5yYW5nZShlLFlv%0AKCtlKzEpLHQpLmxlbmd0aH12YXIgaT1yLmRvbWFpbigpLG89VGkoaSksYT1udWxs%0APT1uP3UobywxMCk6Im51bWJlciI9PXR5cGVvZiBuJiZ1KG8sbik7cmV0dXJuIGEm%0AJihuPWFbMF0sdD1hWzFdKSxyLmRvbWFpbihEaShpLHQ+MT97Zmxvb3I6ZnVuY3Rp%0Ab24odCl7Zm9yKDtlKHQ9bi5mbG9vcih0KSk7KXQ9WW8odC0xKTtyZXR1cm4gdH0s%0AY2VpbDpmdW5jdGlvbih0KXtmb3IoO2UodD1uLmNlaWwodCkpOyl0PVlvKCt0KzEp%0AO3JldHVybiB0fX06bikpfSxyLnRpY2tzPWZ1bmN0aW9uKG4sdCl7dmFyIGU9VGko%0Aci5kb21haW4oKSksaT1udWxsPT1uP3UoZSwxMCk6Im51bWJlciI9PXR5cGVvZiBu%0AP3UoZSxuKTohbi5yYW5nZSYmW3tyYW5nZTpufSx0XTtyZXR1cm4gaSYmKG49aVsw%0AXSx0PWlbMV0pLG4ucmFuZ2UoZVswXSxZbygrZVsxXSsxKSwxPnQ/MTp0KX0sci50%0AaWNrRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHIuY29weT1mdW5jdGlvbigp%0Ae3JldHVybiBPbyhuLmNvcHkoKSx0LGUpfSxIaShyLG4pfWZ1bmN0aW9uIFlvKG4p%0Ae3JldHVybiBuZXcgRGF0ZShuKX1mdW5jdGlvbiBJbyhuKXtyZXR1cm4gSlNPTi5w%0AYXJzZShuLnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gWm8obil7dmFyIHQ9Qm8uY3Jl%0AYXRlUmFuZ2UoKTtyZXR1cm4gdC5zZWxlY3ROb2RlKEJvLmJvZHkpLHQuY3JlYXRl%0AQ29udGV4dHVhbEZyYWdtZW50KG4ucmVzcG9uc2VUZXh0KX12YXIgVm89e3ZlcnNp%0Ab246IjMuNC4xMiJ9O0RhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1%0Acm4rbmV3IERhdGV9KTt2YXIgWG89W10uc2xpY2UsJG89ZnVuY3Rpb24obil7cmV0%0AdXJuIFhvLmNhbGwobil9LEJvPWRvY3VtZW50LFdvPUJvLmRvY3VtZW50RWxlbWVu%0AdCxKbz13aW5kb3c7dHJ5eyRvKFdvLmNoaWxkTm9kZXMpWzBdLm5vZGVUeXBlfWNh%0AdGNoKEdvKXskbz1mdW5jdGlvbihuKXtmb3IodmFyIHQ9bi5sZW5ndGgsZT1uZXcg%0AQXJyYXkodCk7dC0tOyllW3RdPW5bdF07cmV0dXJuIGV9fXRyeXtCby5jcmVhdGVF%0AbGVtZW50KCJkaXYiKS5zdHlsZS5zZXRQcm9wZXJ0eSgib3BhY2l0eSIsMCwiIil9%0AY2F0Y2goS28pe3ZhciBRbz1Kby5FbGVtZW50LnByb3RvdHlwZSxuYT1Rby5zZXRB%0AdHRyaWJ1dGUsdGE9UW8uc2V0QXR0cmlidXRlTlMsZWE9Sm8uQ1NTU3R5bGVEZWNs%0AYXJhdGlvbi5wcm90b3R5cGUscmE9ZWEuc2V0UHJvcGVydHk7UW8uc2V0QXR0cmli%0AdXRlPWZ1bmN0aW9uKG4sdCl7bmEuY2FsbCh0aGlzLG4sdCsiIil9LFFvLnNldEF0%0AdHJpYnV0ZU5TPWZ1bmN0aW9uKG4sdCxlKXt0YS5jYWxsKHRoaXMsbix0LGUrIiIp%0AfSxlYS5zZXRQcm9wZXJ0eT1mdW5jdGlvbihuLHQsZSl7cmEuY2FsbCh0aGlzLG4s%0AdCsiIixlKX19Vm8uYXNjZW5kaW5nPW4sVm8uZGVzY2VuZGluZz1mdW5jdGlvbihu%0ALHQpe3JldHVybiBuPnQ/LTE6dD5uPzE6dD49bj8wOjAvMH0sVm8ubWluPWZ1bmN0%0AaW9uKG4sdCl7dmFyIGUscix1PS0xLGk9bi5sZW5ndGg7aWYoMT09PWFyZ3VtZW50%0Acy5sZW5ndGgpe2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9blt1XSkmJmU+PWUpOyll%0APXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj1uW3VdKSYmZT5yJiYoZT1yKX1l%0AbHNle2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9dC5jYWxsKG4sblt1XSx1KSkmJmU+%0APWUpOyllPXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj10LmNhbGwobixuW3Vd%0ALHUpKSYmZT5yJiYoZT1yKX1yZXR1cm4gZX0sVm8ubWF4PWZ1bmN0aW9uKG4sdCl7%0AdmFyIGUscix1PS0xLGk9bi5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgp%0Ae2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9blt1XSkmJmU+PWUpOyllPXZvaWQgMDtm%0Ab3IoOysrdTxpOyludWxsIT0ocj1uW3VdKSYmcj5lJiYoZT1yKX1lbHNle2Zvcig7%0AKyt1PGkmJiEobnVsbCE9KGU9dC5jYWxsKG4sblt1XSx1KSkmJmU+PWUpOyllPXZv%0AaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj10LmNhbGwobixuW3VdLHUpKSYmcj5l%0AJiYoZT1yKX1yZXR1cm4gZX0sVm8uZXh0ZW50PWZ1bmN0aW9uKG4sdCl7dmFyIGUs%0Acix1LGk9LTEsbz1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9y%0AKDsrK2k8byYmIShudWxsIT0oZT11PW5baV0pJiZlPj1lKTspZT11PXZvaWQgMDtm%0Ab3IoOysraTxvOyludWxsIT0ocj1uW2ldKSYmKGU+ciYmKGU9cikscj51JiYodT1y%0AKSl9ZWxzZXtmb3IoOysraTxvJiYhKG51bGwhPShlPXU9dC5jYWxsKG4sbltpXSxp%0AKSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysraTxvOyludWxsIT0ocj10LmNhbGwo%0AbixuW2ldLGkpKSYmKGU+ciYmKGU9cikscj51JiYodT1yKSl9cmV0dXJuW2UsdV19%0ALFZvLnN1bT1mdW5jdGlvbihuLHQpe3ZhciBlLHI9MCx1PW4ubGVuZ3RoLGk9LTE7%0AaWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2k8dTspaXNOYU4oZT0rbltp%0AXSl8fChyKz1lKTtlbHNlIGZvcig7KytpPHU7KWlzTmFOKGU9K3QuY2FsbChuLG5b%0AaV0saSkpfHwocis9ZSk7cmV0dXJuIHJ9LFZvLm1lYW49ZnVuY3Rpb24obixlKXt2%0AYXIgcix1PTAsaT1uLmxlbmd0aCxvPS0xLGE9aTtpZigxPT09YXJndW1lbnRzLmxl%0Abmd0aClmb3IoOysrbzxpOyl0KHI9bltvXSk/dSs9cjotLWE7ZWxzZSBmb3IoOysr%0AbzxpOyl0KHI9ZS5jYWxsKG4sbltvXSxvKSk/dSs9cjotLWE7cmV0dXJuIGE/dS9h%0AOnZvaWQgMH0sVm8ucXVhbnRpbGU9ZnVuY3Rpb24obix0KXt2YXIgZT0obi5sZW5n%0AdGgtMSkqdCsxLHI9TWF0aC5mbG9vcihlKSx1PStuW3ItMV0saT1lLXI7cmV0dXJu%0AIGk/dStpKihuW3JdLXUpOnV9LFZvLm1lZGlhbj1mdW5jdGlvbihlLHIpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPjEmJihlPWUubWFwKHIpKSxlPWUuZmlsdGVyKHQp%0ALGUubGVuZ3RoP1ZvLnF1YW50aWxlKGUuc29ydChuKSwuNSk6dm9pZCAwfTt2YXIg%0AdWE9ZShuKTtWby5iaXNlY3RMZWZ0PXVhLmxlZnQsVm8uYmlzZWN0PVZvLmJpc2Vj%0AdFJpZ2h0PXVhLnJpZ2h0LFZvLmJpc2VjdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBl%0AKDE9PT10Lmxlbmd0aD9mdW5jdGlvbihlLHIpe3JldHVybiBuKHQoZSkscil9OnQp%0AfSxWby5zaHVmZmxlPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdCxlLHI9bi5sZW5ndGg7%0AcjspZT0wfE1hdGgucmFuZG9tKCkqci0tLHQ9bltyXSxuW3JdPW5bZV0sbltlXT10%0AO3JldHVybiBufSxWby5wZXJtdXRlPWZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPXQu%0AbGVuZ3RoLHI9bmV3IEFycmF5KGUpO2UtLTspcltlXT1uW3RbZV1dO3JldHVybiBy%0AfSxWby5wYWlycz1mdW5jdGlvbihuKXtmb3IodmFyIHQsZT0wLHI9bi5sZW5ndGgt%0AMSx1PW5bMF0saT1uZXcgQXJyYXkoMD5yPzA6cik7cj5lOylpW2VdPVt0PXUsdT1u%0AWysrZV1dO3JldHVybiBpfSxWby56aXA9ZnVuY3Rpb24oKXtpZighKHU9YXJndW1l%0AbnRzLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBuPS0xLHQ9Vm8ubWluKGFyZ3Vt%0AZW50cyxyKSxlPW5ldyBBcnJheSh0KTsrK248dDspZm9yKHZhciB1LGk9LTEsbz1l%0AW25dPW5ldyBBcnJheSh1KTsrK2k8dTspb1tpXT1hcmd1bWVudHNbaV1bbl07cmV0%0AdXJuIGV9LFZvLnRyYW5zcG9zZT1mdW5jdGlvbihuKXtyZXR1cm4gVm8uemlwLmFw%0AcGx5KFZvLG4pfSxWby5rZXlzPWZ1bmN0aW9uKG4pe3ZhciB0PVtdO2Zvcih2YXIg%0AZSBpbiBuKXQucHVzaChlKTtyZXR1cm4gdH0sVm8udmFsdWVzPWZ1bmN0aW9uKG4p%0Ae3ZhciB0PVtdO2Zvcih2YXIgZSBpbiBuKXQucHVzaChuW2VdKTtyZXR1cm4gdH0s%0AVm8uZW50cmllcz1mdW5jdGlvbihuKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gbil0%0ALnB1c2goe2tleTplLHZhbHVlOm5bZV19KTtyZXR1cm4gdH0sVm8ubWVyZ2U9ZnVu%0AY3Rpb24obil7Zm9yKHZhciB0LGUscix1PW4ubGVuZ3RoLGk9LTEsbz0wOysraTx1%0AOylvKz1uW2ldLmxlbmd0aDtmb3IoZT1uZXcgQXJyYXkobyk7LS11Pj0wOylmb3Io%0Acj1uW3VdLHQ9ci5sZW5ndGg7LS10Pj0wOyllWy0tb109clt0XTtyZXR1cm4gZX07%0AdmFyIGlhPU1hdGguYWJzO1ZvLnJhbmdlPWZ1bmN0aW9uKG4sdCxlKXtpZihhcmd1%0AbWVudHMubGVuZ3RoPDMmJihlPTEsYXJndW1lbnRzLmxlbmd0aDwyJiYodD1uLG49%0AMCkpLDEvMD09PSh0LW4pL2UpdGhyb3cgbmV3IEVycm9yKCJpbmZpbml0ZSByYW5n%0AZSIpO3ZhciByLGk9W10sbz11KGlhKGUpKSxhPS0xO2lmKG4qPW8sdCo9byxlKj1v%0ALDA+ZSlmb3IoOyhyPW4rZSorK2EpPnQ7KWkucHVzaChyL28pO2Vsc2UgZm9yKDso%0Acj1uK2UqKythKTx0OylpLnB1c2goci9vKTtyZXR1cm4gaX0sVm8ubWFwPWZ1bmN0%0AaW9uKG4pe3ZhciB0PW5ldyBvO2lmKG4gaW5zdGFuY2VvZiBvKW4uZm9yRWFjaChm%0AdW5jdGlvbihuLGUpe3Quc2V0KG4sZSl9KTtlbHNlIGZvcih2YXIgZSBpbiBuKXQu%0Ac2V0KGUsbltlXSk7cmV0dXJuIHR9LGkobyx7aGFzOmEsZ2V0OmZ1bmN0aW9uKG4p%0Ae3JldHVybiB0aGlzW29hK25dfSxzZXQ6ZnVuY3Rpb24obix0KXtyZXR1cm4gdGhp%0Ac1tvYStuXT10fSxyZW1vdmU6YyxrZXlzOmwsdmFsdWVzOmZ1bmN0aW9uKCl7dmFy%0AIG49W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0LGUpe24ucHVzaChl%0AKX0pLG59LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtyZXR1cm4gdGhpcy5m%0Ab3JFYWNoKGZ1bmN0aW9uKHQsZSl7bi5wdXNoKHtrZXk6dCx2YWx1ZTplfSl9KSxu%0AfSxzaXplOnMsZW1wdHk6Zixmb3JFYWNoOmZ1bmN0aW9uKG4pe2Zvcih2YXIgdCBp%0AbiB0aGlzKXQuY2hhckNvZGVBdCgwKT09PWFhJiZuLmNhbGwodGhpcyx0LnNsaWNl%0AKDEpLHRoaXNbdF0pfX0pO3ZhciBvYT0iXHgwMCIsYWE9b2EuY2hhckNvZGVBdCgw%0AKTtWby5uZXN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0LGEsYyl7aWYoYz49aS5s%0AZW5ndGgpcmV0dXJuIHI/ci5jYWxsKHUsYSk6ZT9hLnNvcnQoZSk6YTtmb3IodmFy%0AIGwscyxmLGgsZz0tMSxwPWEubGVuZ3RoLHY9aVtjKytdLGQ9bmV3IG87KytnPHA7%0AKShoPWQuZ2V0KGw9dihzPWFbZ10pKSk/aC5wdXNoKHMpOmQuc2V0KGwsW3NdKTty%0AZXR1cm4gdD8ocz10KCksZj1mdW5jdGlvbihlLHIpe3Muc2V0KGUsbih0LHIsYykp%0AfSk6KHM9e30sZj1mdW5jdGlvbihlLHIpe3NbZV09bih0LHIsYyl9KSxkLmZvckVh%0AY2goZiksc31mdW5jdGlvbiB0KG4sZSl7aWYoZT49aS5sZW5ndGgpcmV0dXJuIG47%0AdmFyIHI9W10sdT1hW2UrK107cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihuLHUp%0Ae3IucHVzaCh7a2V5Om4sdmFsdWVzOnQodSxlKX0pfSksdT9yLnNvcnQoZnVuY3Rp%0Ab24obix0KXtyZXR1cm4gdShuLmtleSx0LmtleSl9KTpyfXZhciBlLHIsdT17fSxp%0APVtdLGE9W107cmV0dXJuIHUubWFwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oZSx0%0ALDApfSx1LmVudHJpZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobihWby5tYXAsZSww%0AKSwwKX0sdS5rZXk9ZnVuY3Rpb24obil7cmV0dXJuIGkucHVzaChuKSx1fSx1LnNv%0AcnRLZXlzPWZ1bmN0aW9uKG4pe3JldHVybiBhW2kubGVuZ3RoLTFdPW4sdX0sdS5z%0Ab3J0VmFsdWVzPWZ1bmN0aW9uKG4pe3JldHVybiBlPW4sdX0sdS5yb2xsdXA9ZnVu%0AY3Rpb24obil7cmV0dXJuIHI9bix1fSx1fSxWby5zZXQ9ZnVuY3Rpb24obil7dmFy%0AIHQ9bmV3IGg7aWYobilmb3IodmFyIGU9MCxyPW4ubGVuZ3RoO3I+ZTsrK2UpdC5h%0AZGQobltlXSk7cmV0dXJuIHR9LGkoaCx7aGFzOmEsYWRkOmZ1bmN0aW9uKG4pe3Jl%0AdHVybiB0aGlzW29hK25dPSEwLG59LHJlbW92ZTpmdW5jdGlvbihuKXtyZXR1cm4g%0Abj1vYStuLG4gaW4gdGhpcyYmZGVsZXRlIHRoaXNbbl19LHZhbHVlczpsLHNpemU6%0AcyxlbXB0eTpmLGZvckVhY2g6ZnVuY3Rpb24obil7Zm9yKHZhciB0IGluIHRoaXMp%0AdC5jaGFyQ29kZUF0KDApPT09YWEmJm4uY2FsbCh0aGlzLHQuc2xpY2UoMSkpfX0p%0ALFZvLmJlaGF2aW9yPXt9LFZvLnJlYmluZD1mdW5jdGlvbihuLHQpe2Zvcih2YXIg%0AZSxyPTEsdT1hcmd1bWVudHMubGVuZ3RoOysrcjx1OyluW2U9YXJndW1lbnRzW3Jd%0AXT1nKG4sdCx0W2VdKTtyZXR1cm4gbn07dmFyIGNhPVsid2Via2l0IiwibXMiLCJt%0Ab3oiLCJNb3oiLCJvIiwiTyJdO1ZvLmRpc3BhdGNoPWZ1bmN0aW9uKCl7Zm9yKHZh%0AciBuPW5ldyBkLHQ9LTEsZT1hcmd1bWVudHMubGVuZ3RoOysrdDxlOyluW2FyZ3Vt%0AZW50c1t0XV09bShuKTtyZXR1cm4gbn0sZC5wcm90b3R5cGUub249ZnVuY3Rpb24o%0Abix0KXt2YXIgZT1uLmluZGV4T2YoIi4iKSxyPSIiO2lmKGU+PTAmJihyPW4uc2xp%0AY2UoZSsxKSxuPW4uc2xpY2UoMCxlKSksbilyZXR1cm4gYXJndW1lbnRzLmxlbmd0%0AaDwyP3RoaXNbbl0ub24ocik6dGhpc1tuXS5vbihyLHQpO2lmKDI9PT1hcmd1bWVu%0AdHMubGVuZ3RoKXtpZihudWxsPT10KWZvcihuIGluIHRoaXMpdGhpcy5oYXNPd25Q%0Acm9wZXJ0eShuKSYmdGhpc1tuXS5vbihyLG51bGwpO3JldHVybiB0aGlzfX0sVm8u%0AZXZlbnQ9bnVsbCxWby5yZXF1b3RlPWZ1bmN0aW9uKG4pe3JldHVybiBuLnJlcGxh%0AY2UobGEsIlxcJCYiKX07dmFyIGxhPS9bXFxcXlwkXCpcK1w/XHxcW1xdXChcKVwu%0AXHtcfV0vZyxzYT17fS5fX3Byb3RvX18/ZnVuY3Rpb24obix0KXtuLl9fcHJvdG9f%0AXz10fTpmdW5jdGlvbihuLHQpe2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXX0sZmE9%0AZnVuY3Rpb24obix0KXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yKG4pfSxoYT1mdW5j%0AdGlvbihuLHQpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3JBbGwobil9LGdhPVdvLm1h%0AdGNoZXN8fFdvW3AoV28sIm1hdGNoZXNTZWxlY3RvciIpXSxwYT1mdW5jdGlvbihu%0ALHQpe3JldHVybiBnYS5jYWxsKG4sdCl9OyJmdW5jdGlvbiI9PXR5cGVvZiBTaXp6%0AbGUmJihmYT1mdW5jdGlvbihuLHQpe3JldHVybiBTaXp6bGUobix0KVswXXx8bnVs%0AbH0saGE9U2l6emxlLHBhPVNpenpsZS5tYXRjaGVzU2VsZWN0b3IpLFZvLnNlbGVj%0AdGlvbj1mdW5jdGlvbigpe3JldHVybiB5YX07dmFyIHZhPVZvLnNlbGVjdGlvbi5w%0Acm90b3R5cGU9W107dmEuc2VsZWN0PWZ1bmN0aW9uKG4pe3ZhciB0LGUscix1LGk9%0AW107bj1iKG4pO2Zvcih2YXIgbz0tMSxhPXRoaXMubGVuZ3RoOysrbzxhOyl7aS5w%0AdXNoKHQ9W10pLHQucGFyZW50Tm9kZT0ocj10aGlzW29dKS5wYXJlbnROb2RlO2Zv%0Acih2YXIgYz0tMSxsPXIubGVuZ3RoOysrYzxsOykodT1yW2NdKT8odC5wdXNoKGU9%0Abi5jYWxsKHUsdS5fX2RhdGFfXyxjLG8pKSxlJiYiX19kYXRhX18iaW4gdSYmKGUu%0AX19kYXRhX189dS5fX2RhdGFfXykpOnQucHVzaChudWxsKX1yZXR1cm4gXyhpKX0s%0AdmEuc2VsZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0LGUscj1bXTtuPXcobik7Zm9y%0AKHZhciB1PS0xLGk9dGhpcy5sZW5ndGg7Kyt1PGk7KWZvcih2YXIgbz10aGlzW3Vd%0ALGE9LTEsYz1vLmxlbmd0aDsrK2E8YzspKGU9b1thXSkmJihyLnB1c2godD0kbyhu%0ALmNhbGwoZSxlLl9fZGF0YV9fLGEsdSkpKSx0LnBhcmVudE5vZGU9ZSk7cmV0dXJu%0AIF8ocil9O3ZhciBkYT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIs%0AeGh0bWw6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHhsaW5rOiJodHRw%0AOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3Jn%0AL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIw%0AMDAveG1sbnMvIn07Vm8ubnM9e3ByZWZpeDpkYSxxdWFsaWZ5OmZ1bmN0aW9uKG4p%0Ae3ZhciB0PW4uaW5kZXhPZigiOiIpLGU9bjtyZXR1cm4gdD49MCYmKGU9bi5zbGlj%0AZSgwLHQpLG49bi5zbGljZSh0KzEpKSxkYS5oYXNPd25Qcm9wZXJ0eShlKT97c3Bh%0AY2U6ZGFbZV0sbG9jYWw6bn06bn19LHZhLmF0dHI9ZnVuY3Rpb24obix0KXtpZihh%0Acmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2Ygbil7dmFyIGU9%0AdGhpcy5ub2RlKCk7cmV0dXJuIG49Vm8ubnMucXVhbGlmeShuKSxuLmxvY2FsP2Uu%0AZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTplLmdldEF0dHJpYnV0ZShu%0AKX1mb3IodCBpbiBuKXRoaXMuZWFjaChTKHQsblt0XSkpO3JldHVybiB0aGlzfXJl%0AdHVybiB0aGlzLmVhY2goUyhuLHQpKX0sdmEuY2xhc3NlZD1mdW5jdGlvbihuLHQp%0Ae2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXt2%0AYXIgZT10aGlzLm5vZGUoKSxyPShuPUEobikpLmxlbmd0aCx1PS0xO2lmKHQ9ZS5j%0AbGFzc0xpc3Qpe2Zvcig7Kyt1PHI7KWlmKCF0LmNvbnRhaW5zKG5bdV0pKXJldHVy%0AbiExfWVsc2UgZm9yKHQ9ZS5nZXRBdHRyaWJ1dGUoImNsYXNzIik7Kyt1PHI7KWlm%0AKCFFKG5bdV0pLnRlc3QodCkpcmV0dXJuITE7cmV0dXJuITB9Zm9yKHQgaW4gbil0%0AaGlzLmVhY2goQyh0LG5bdF0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNo%0AKEMobix0KSl9LHZhLnN0eWxlPWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1hcmd1bWVu%0AdHMubGVuZ3RoO2lmKDM+cil7aWYoInN0cmluZyIhPXR5cGVvZiBuKXsyPnImJih0%0APSIiKTtmb3IoZSBpbiBuKXRoaXMuZWFjaCh6KGUsbltlXSx0KSk7cmV0dXJuIHRo%0AaXN9aWYoMj5yKXJldHVybiBKby5nZXRDb21wdXRlZFN0eWxlKHRoaXMubm9kZSgp%0ALG51bGwpLmdldFByb3BlcnR5VmFsdWUobik7ZT0iIn1yZXR1cm4gdGhpcy5lYWNo%0AKHoobix0LGUpKX0sdmEucHJvcGVydHk9ZnVuY3Rpb24obix0KXtpZihhcmd1bWVu%0AdHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gdGhpcy5u%0Ab2RlKClbbl07Zm9yKHQgaW4gbil0aGlzLmVhY2goTCh0LG5bdF0pKTtyZXR1cm4g%0AdGhpc31yZXR1cm4gdGhpcy5lYWNoKEwobix0KSl9LHZhLnRleHQ9ZnVuY3Rpb24o%0Abil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCJmdW5jdGlvbiI9%0APXR5cGVvZiBuP2Z1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50%0Acyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT10PyIiOnR9Om51bGw9PW4/ZnVuY3Rp%0Ab24oKXt0aGlzLnRleHRDb250ZW50PSIifTpmdW5jdGlvbigpe3RoaXMudGV4dENv%0AbnRlbnQ9bn0pOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSx2YS5odG1sPWZ1bmN0%0AaW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rp%0Ab24iPT10eXBlb2Ygbj9mdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1%0AbWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PXQ/IiI6dH06bnVsbD09bj9mdW5j%0AdGlvbigpe3RoaXMuaW5uZXJIVE1MPSIifTpmdW5jdGlvbigpe3RoaXMuaW5uZXJI%0AVE1MPW59KTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHZhLmFwcGVuZD1mdW5jdGlv%0AbihuKXtyZXR1cm4gbj1UKG4pLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJu%0AIHRoaXMuYXBwZW5kQ2hpbGQobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LHZh%0ALmluc2VydD1mdW5jdGlvbihuLHQpe3JldHVybiBuPVQobiksdD1iKHQpLHRoaXMu%0Ac2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBw%0AbHkodGhpcyxhcmd1bWVudHMpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxs%0AKX0pfSx2YS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0%0AaW9uKCl7dmFyIG49dGhpcy5wYXJlbnROb2RlO24mJm4ucmVtb3ZlQ2hpbGQodGhp%0Acyl9KX0sdmEuZGF0YT1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUobixlKXt2YXIg%0Acix1LGksYT1uLmxlbmd0aCxmPWUubGVuZ3RoLGg9TWF0aC5taW4oYSxmKSxnPW5l%0AdyBBcnJheShmKSxwPW5ldyBBcnJheShmKSx2PW5ldyBBcnJheShhKTtpZih0KXt2%0AYXIgZCxtPW5ldyBvLHk9bmV3IG8seD1bXTtmb3Iocj0tMTsrK3I8YTspZD10LmNh%0AbGwodT1uW3JdLHUuX19kYXRhX18sciksbS5oYXMoZCk/dltyXT11Om0uc2V0KGQs%0AdSkseC5wdXNoKGQpO2ZvcihyPS0xOysrcjxmOylkPXQuY2FsbChlLGk9ZVtyXSxy%0AKSwodT1tLmdldChkKSk/KGdbcl09dSx1Ll9fZGF0YV9fPWkpOnkuaGFzKGQpfHwo%0AcFtyXT1xKGkpKSx5LnNldChkLGkpLG0ucmVtb3ZlKGQpO2ZvcihyPS0xOysrcjxh%0AOyltLmhhcyh4W3JdKSYmKHZbcl09bltyXSl9ZWxzZXtmb3Iocj0tMTsrK3I8aDsp%0AdT1uW3JdLGk9ZVtyXSx1Pyh1Ll9fZGF0YV9fPWksZ1tyXT11KTpwW3JdPXEoaSk7%0AZm9yKDtmPnI7KytyKXBbcl09cShlW3JdKTtmb3IoO2E+cjsrK3IpdltyXT1uW3Jd%0AfXAudXBkYXRlPWcscC5wYXJlbnROb2RlPWcucGFyZW50Tm9kZT12LnBhcmVudE5v%0AZGU9bi5wYXJlbnROb2RlLGMucHVzaChwKSxsLnB1c2goZykscy5wdXNoKHYpfXZh%0AciByLHUsaT0tMSxhPXRoaXMubGVuZ3RoO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtm%0Ab3Iobj1uZXcgQXJyYXkoYT0ocj10aGlzWzBdKS5sZW5ndGgpOysraTxhOykodT1y%0AW2ldKSYmKG5baV09dS5fX2RhdGFfXyk7cmV0dXJuIG59dmFyIGM9VShbXSksbD1f%0AKFtdKSxzPV8oW10pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKWZvcig7KytpPGE7%0AKWUocj10aGlzW2ldLG4uY2FsbChyLHIucGFyZW50Tm9kZS5fX2RhdGFfXyxpKSk7%0AZWxzZSBmb3IoOysraTxhOyllKHI9dGhpc1tpXSxuKTtyZXR1cm4gbC5lbnRlcj1m%0AdW5jdGlvbigpe3JldHVybiBjfSxsLmV4aXQ9ZnVuY3Rpb24oKXtyZXR1cm4gc30s%0AbH0sdmEuZGF0dW09ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/%0AdGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLG4pOnRoaXMucHJvcGVydHkoIl9fZGF0%0AYV9fIil9LHZhLmZpbHRlcj1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdT1bXTsiZnVu%0AY3Rpb24iIT10eXBlb2YgbiYmKG49UihuKSk7Zm9yKHZhciBpPTAsbz10aGlzLmxl%0Abmd0aDtvPmk7aSsrKXt1LnB1c2godD1bXSksdC5wYXJlbnROb2RlPShlPXRoaXNb%0AaV0pLnBhcmVudE5vZGU7Zm9yKHZhciBhPTAsYz1lLmxlbmd0aDtjPmE7YSsrKShy%0APWVbYV0pJiZuLmNhbGwocixyLl9fZGF0YV9fLGEsaSkmJnQucHVzaChyKX1yZXR1%0Acm4gXyh1KX0sdmEub3JkZXI9ZnVuY3Rpb24oKXtmb3IodmFyIG49LTEsdD10aGlz%0ALmxlbmd0aDsrK248dDspZm9yKHZhciBlLHI9dGhpc1tuXSx1PXIubGVuZ3RoLTEs%0AaT1yW3VdOy0tdT49MDspKGU9clt1XSkmJihpJiZpIT09ZS5uZXh0U2libGluZyYm%0AaS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLGkpLGk9ZSk7cmV0dXJuIHRoaXN9%0ALHZhLnNvcnQ9ZnVuY3Rpb24obil7bj1ELmFwcGx5KHRoaXMsYXJndW1lbnRzKTtm%0Ab3IodmFyIHQ9LTEsZT10aGlzLmxlbmd0aDsrK3Q8ZTspdGhpc1t0XS5zb3J0KG4p%0AO3JldHVybiB0aGlzLm9yZGVyKCl9LHZhLmVhY2g9ZnVuY3Rpb24obil7cmV0dXJu%0AIFAodGhpcyxmdW5jdGlvbih0LGUscil7bi5jYWxsKHQsdC5fX2RhdGFfXyxlLHIp%0AfSl9LHZhLmNhbGw9ZnVuY3Rpb24obil7dmFyIHQ9JG8oYXJndW1lbnRzKTtyZXR1%0Acm4gbi5hcHBseSh0WzBdPXRoaXMsdCksdGhpc30sdmEuZW1wdHk9ZnVuY3Rpb24o%0AKXtyZXR1cm4hdGhpcy5ub2RlKCl9LHZhLm5vZGU9ZnVuY3Rpb24oKXtmb3IodmFy%0AIG49MCx0PXRoaXMubGVuZ3RoO3Q+bjtuKyspZm9yKHZhciBlPXRoaXNbbl0scj0w%0ALHU9ZS5sZW5ndGg7dT5yO3IrKyl7dmFyIGk9ZVtyXTtpZihpKXJldHVybiBpfXJl%0AdHVybiBudWxsfSx2YS5zaXplPWZ1bmN0aW9uKCl7dmFyIG49MDtyZXR1cm4gUCh0%0AaGlzLGZ1bmN0aW9uKCl7KytufSksbn07dmFyIG1hPVtdO1ZvLnNlbGVjdGlvbi5l%0AbnRlcj1VLFZvLnNlbGVjdGlvbi5lbnRlci5wcm90b3R5cGU9bWEsbWEuYXBwZW5k%0APXZhLmFwcGVuZCxtYS5lbXB0eT12YS5lbXB0eSxtYS5ub2RlPXZhLm5vZGUsbWEu%0AY2FsbD12YS5jYWxsLG1hLnNpemU9dmEuc2l6ZSxtYS5zZWxlY3Q9ZnVuY3Rpb24o%0Abil7Zm9yKHZhciB0LGUscix1LGksbz1bXSxhPS0xLGM9dGhpcy5sZW5ndGg7Kyth%0APGM7KXtyPSh1PXRoaXNbYV0pLnVwZGF0ZSxvLnB1c2godD1bXSksdC5wYXJlbnRO%0Ab2RlPXUucGFyZW50Tm9kZTtmb3IodmFyIGw9LTEscz11Lmxlbmd0aDsrK2w8czsp%0AKGk9dVtsXSk/KHQucHVzaChyW2xdPWU9bi5jYWxsKHUucGFyZW50Tm9kZSxpLl9f%0AZGF0YV9fLGwsYSkpLGUuX19kYXRhX189aS5fX2RhdGFfXyk6dC5wdXNoKG51bGwp%0AfXJldHVybiBfKG8pfSxtYS5pbnNlcnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aDwyJiYodD1qKHRoaXMpKSx2YS5pbnNlcnQuY2FsbCh0aGlz%0ALG4sdCl9LHZhLnRyYW5zaXRpb249ZnVuY3Rpb24oKXtmb3IodmFyIG4sdCxlPWts%0AfHwrK3psLHI9W10sdT1FbHx8e3RpbWU6RGF0ZS5ub3coKSxlYXNlOk11LGRlbGF5%0AOjAsZHVyYXRpb246MjUwfSxpPS0xLG89dGhpcy5sZW5ndGg7KytpPG87KXtyLnB1%0Ac2gobj1bXSk7Zm9yKHZhciBhPXRoaXNbaV0sYz0tMSxsPWEubGVuZ3RoOysrYzxs%0AOykodD1hW2NdKSYmVW8odCxjLGUsdSksbi5wdXNoKHQpfXJldHVybiBSbyhyLGUp%0AfSx2YS5pbnRlcnJ1cHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKEgpfSxW%0Aby5zZWxlY3Q9ZnVuY3Rpb24obil7dmFyIHQ9WyJzdHJpbmciPT10eXBlb2Ygbj9m%0AYShuLEJvKTpuXTtyZXR1cm4gdC5wYXJlbnROb2RlPVdvLF8oW3RdKX0sVm8uc2Vs%0AZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0PSRvKCJzdHJpbmciPT10eXBlb2Ygbj9o%0AYShuLEJvKTpuKTtyZXR1cm4gdC5wYXJlbnROb2RlPVdvLF8oW3RdKX07dmFyIHlh%0APVZvLnNlbGVjdChXbyk7dmEub249ZnVuY3Rpb24obix0LGUpe3ZhciByPWFyZ3Vt%0AZW50cy5sZW5ndGg7aWYoMz5yKXtpZigic3RyaW5nIiE9dHlwZW9mIG4pezI+ciYm%0AKHQ9ITEpO2ZvcihlIGluIG4pdGhpcy5lYWNoKEYoZSxuW2VdLHQpKTtyZXR1cm4g%0AdGhpc31pZigyPnIpcmV0dXJuKHI9dGhpcy5ub2RlKClbIl9fb24iK25dKSYmci5f%0AO2U9ITF9cmV0dXJuIHRoaXMuZWFjaChGKG4sdCxlKSl9O3ZhciB4YT1Wby5tYXAo%0Ae21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSk7%0AeGEuZm9yRWFjaChmdW5jdGlvbihuKXsib24iK24gaW4gQm8mJnhhLnJlbW92ZShu%0AKX0pO3ZhciBNYT0ib25zZWxlY3RzdGFydCJpbiBCbz9udWxsOnAoV28uc3R5bGUs%0AInVzZXJTZWxlY3QiKSxfYT0wO1ZvLm1vdXNlPWZ1bmN0aW9uKG4pe3JldHVybiBa%0AKG4seCgpKX07dmFyIGJhPS9XZWJLaXQvLnRlc3QoSm8ubmF2aWdhdG9yLnVzZXJB%0AZ2VudCk/LTE6MDtWby50b3VjaD1mdW5jdGlvbihuLHQsZSl7aWYoYXJndW1lbnRz%0ALmxlbmd0aDwzJiYoZT10LHQ9eCgpLmNoYW5nZWRUb3VjaGVzKSx0KWZvcih2YXIg%0Acix1PTAsaT10Lmxlbmd0aDtpPnU7Kyt1KWlmKChyPXRbdV0pLmlkZW50aWZpZXI9%0APT1lKXJldHVybiBaKG4scil9LFZvLmJlaGF2aW9yLmRyYWc9ZnVuY3Rpb24oKXtm%0AdW5jdGlvbiBuKCl7dGhpcy5vbigibW91c2Vkb3duLmRyYWciLHUpLm9uKCJ0b3Vj%0AaHN0YXJ0LmRyYWciLGkpfWZ1bmN0aW9uIHQobix0LHUsaSxvKXtyZXR1cm4gZnVu%0AY3Rpb24oKXtmdW5jdGlvbiBhKCl7dmFyIG4sZSxyPXQoaCx2KTtyJiYobj1yWzBd%0ALXhbMF0sZT1yWzFdLXhbMV0scHw9bnxlLHg9cixnKHt0eXBlOiJkcmFnIix4OnJb%0AMF0rbFswXSx5OnJbMV0rbFsxXSxkeDpuLGR5OmV9KSl9ZnVuY3Rpb24gYygpe3Qo%0AaCx2KSYmKG0ub24oaStkLG51bGwpLm9uKG8rZCxudWxsKSx5KHAmJlZvLmV2ZW50%0ALnRhcmdldD09PWYpLGcoe3R5cGU6ImRyYWdlbmQifSkpfXZhciBsLHM9dGhpcyxm%0APVZvLmV2ZW50LnRhcmdldCxoPXMucGFyZW50Tm9kZSxnPWUub2Yocyxhcmd1bWVu%0AdHMpLHA9MCx2PW4oKSxkPSIuZHJhZyIrKG51bGw9PXY/IiI6Ii0iK3YpLG09Vm8u%0Ac2VsZWN0KHUoKSkub24oaStkLGEpLm9uKG8rZCxjKSx5PUkoKSx4PXQoaCx2KTty%0APyhsPXIuYXBwbHkocyxhcmd1bWVudHMpLGw9W2wueC14WzBdLGwueS14WzFdXSk6%0AbD1bMCwwXSxnKHt0eXBlOiJkcmFnc3RhcnQifSl9fXZhciBlPU0obiwiZHJhZyIs%0AImRyYWdzdGFydCIsImRyYWdlbmQiKSxyPW51bGwsdT10KHYsVm8ubW91c2UsJCwi%0AbW91c2Vtb3ZlIiwibW91c2V1cCIpLGk9dChWLFZvLnRvdWNoLFgsInRvdWNobW92%0AZSIsInRvdWNoZW5kIik7cmV0dXJuIG4ub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sVm8ucmViaW5kKG4sZSwib24i%0AKX0sVm8udG91Y2hlcz1mdW5jdGlvbihuLHQpe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPDImJih0PXgoKS50b3VjaGVzKSx0PyRvKHQpLm1hcChmdW5jdGlvbih0KXt2%0AYXIgZT1aKG4sdCk7cmV0dXJuIGUuaWRlbnRpZmllcj10LmlkZW50aWZpZXIsZX0p%0AOltdfTt2YXIgd2E9TWF0aC5QSSxTYT0yKndhLGthPXdhLzIsRWE9MWUtNixBYT1F%0AYSpFYSxDYT13YS8xODAsTmE9MTgwL3dhLHphPU1hdGguU1FSVDIsTGE9MixUYT00%0AO1ZvLmludGVycG9sYXRlWm9vbT1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUobil7%0AdmFyIHQ9bip5O2lmKG0pe3ZhciBlPVEodiksbz1pLyhMYSpoKSooZSpudCh6YSp0%0AK3YpLUsodikpO3JldHVybltyK28qbCx1K28qcyxpKmUvUSh6YSp0K3YpXX1yZXR1%0Acm5bcituKmwsdStuKnMsaSpNYXRoLmV4cCh6YSp0KV19dmFyIHI9blswXSx1PW5b%0AMV0saT1uWzJdLG89dFswXSxhPXRbMV0sYz10WzJdLGw9by1yLHM9YS11LGY9bCps%0AK3MqcyxoPU1hdGguc3FydChmKSxnPShjKmMtaSppK1RhKmYpLygyKmkqTGEqaCks%0AcD0oYypjLWkqaS1UYSpmKS8oMipjKkxhKmgpLHY9TWF0aC5sb2coTWF0aC5zcXJ0%0AKGcqZysxKS1nKSxkPU1hdGgubG9nKE1hdGguc3FydChwKnArMSktcCksbT1kLXYs%0AeT0obXx8TWF0aC5sb2coYy9pKSkvemE7cmV0dXJuIGUuZHVyYXRpb249MWUzKnks%0AZX0sVm8uYmVoYXZpb3Iuem9vbT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obil7bi5v%0AbihBLGwpLm9uKERhKyIuem9vbSIsZikub24oImRibGNsaWNrLnpvb20iLGgpLm9u%0AKHoscyl9ZnVuY3Rpb24gdChuKXtyZXR1cm5bKG5bMF0tUy54KS9TLmssKG5bMV0t%0AUy55KS9TLmtdfWZ1bmN0aW9uIGUobil7cmV0dXJuW25bMF0qUy5rK1MueCxuWzFd%0AKlMuaytTLnldfWZ1bmN0aW9uIHIobil7Uy5rPU1hdGgubWF4KEVbMF0sTWF0aC5t%0AaW4oRVsxXSxuKSl9ZnVuY3Rpb24gdShuLHQpe3Q9ZSh0KSxTLngrPW5bMF0tdFsw%0AXSxTLnkrPW5bMV0tdFsxXX1mdW5jdGlvbiBpKCl7XyYmXy5kb21haW4oeC5yYW5n%0AZSgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4obi1TLngpL1Mua30pLm1hcCh4Lmlu%0AdmVydCkpLHcmJncuZG9tYWluKGIucmFuZ2UoKS5tYXAoZnVuY3Rpb24obil7cmV0%0AdXJuKG4tUy55KS9TLmt9KS5tYXAoYi5pbnZlcnQpKX1mdW5jdGlvbiBvKG4pe24o%0Ae3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBhKG4pe2koKSxuKHt0eXBlOiJ6%0Ab29tIixzY2FsZTpTLmssdHJhbnNsYXRlOltTLngsUy55XX0pfWZ1bmN0aW9uIGMo%0Abil7bih7dHlwZToiem9vbWVuZCJ9KX1mdW5jdGlvbiBsKCl7ZnVuY3Rpb24gbigp%0Ae3M9MSx1KFZvLm1vdXNlKHIpLGgpLGEobCl9ZnVuY3Rpb24gZSgpe2Yub24oQyxu%0AdWxsKS5vbihOLG51bGwpLGcocyYmVm8uZXZlbnQudGFyZ2V0PT09aSksYyhsKX12%0AYXIgcj10aGlzLGk9Vm8uZXZlbnQudGFyZ2V0LGw9TC5vZihyLGFyZ3VtZW50cyks%0Acz0wLGY9Vm8uc2VsZWN0KEpvKS5vbihDLG4pLm9uKE4sZSksaD10KFZvLm1vdXNl%0AKHIpKSxnPUkoKTtILmNhbGwociksbyhsKX1mdW5jdGlvbiBzKCl7ZnVuY3Rpb24g%0Abigpe3ZhciBuPVZvLnRvdWNoZXMoZyk7cmV0dXJuIGg9Uy5rLG4uZm9yRWFjaChm%0AdW5jdGlvbihuKXtuLmlkZW50aWZpZXIgaW4gdiYmKHZbbi5pZGVudGlmaWVyXT10%0AKG4pKX0pLG59ZnVuY3Rpb24gZSgpe3ZhciB0PVZvLmV2ZW50LnRhcmdldDtWby5z%0AZWxlY3QodCkub24oTSxpKS5vbihfLGYpLGIucHVzaCh0KTtmb3IodmFyIGU9Vm8u%0AZXZlbnQuY2hhbmdlZFRvdWNoZXMsbz0wLGM9ZS5sZW5ndGg7Yz5vOysrbyl2W2Vb%0Ab10uaWRlbnRpZmllcl09bnVsbDt2YXIgbD1uKCkscz1EYXRlLm5vdygpO2lmKDE9%0APT1sLmxlbmd0aCl7aWYoNTAwPnMtbSl7dmFyIGg9bFswXSxnPXZbaC5pZGVudGlm%0AaWVyXTtyKDIqUy5rKSx1KGgsZykseSgpLGEocCl9bT1zfWVsc2UgaWYobC5sZW5n%0AdGg+MSl7dmFyIGg9bFswXSx4PWxbMV0sdz1oWzBdLXhbMF0saz1oWzFdLXhbMV07%0AZD13KncrayprfX1mdW5jdGlvbiBpKCl7Zm9yKHZhciBuLHQsZSxpLG89Vm8udG91%0AY2hlcyhnKSxjPTAsbD1vLmxlbmd0aDtsPmM7KytjLGk9bnVsbClpZihlPW9bY10s%0AaT12W2UuaWRlbnRpZmllcl0pe2lmKHQpYnJlYWs7bj1lLHQ9aX1pZihpKXt2YXIg%0Acz0ocz1lWzBdLW5bMF0pKnMrKHM9ZVsxXS1uWzFdKSpzLGY9ZCYmTWF0aC5zcXJ0%0AKHMvZCk7bj1bKG5bMF0rZVswXSkvMiwoblsxXStlWzFdKS8yXSx0PVsodFswXStp%0AWzBdKS8yLCh0WzFdK2lbMV0pLzJdLHIoZipoKX1tPW51bGwsdShuLHQpLGEocCl9%0AZnVuY3Rpb24gZigpe2lmKFZvLmV2ZW50LnRvdWNoZXMubGVuZ3RoKXtmb3IodmFy%0AIHQ9Vm8uZXZlbnQuY2hhbmdlZFRvdWNoZXMsZT0wLHI9dC5sZW5ndGg7cj5lOysr%0AZSlkZWxldGUgdlt0W2VdLmlkZW50aWZpZXJdO2Zvcih2YXIgdSBpbiB2KXJldHVy%0AbiB2b2lkIG4oKX1Wby5zZWxlY3RBbGwoYikub24oeCxudWxsKSx3Lm9uKEEsbCku%0Ab24oeixzKSxrKCksYyhwKX12YXIgaCxnPXRoaXMscD1MLm9mKGcsYXJndW1lbnRz%0AKSx2PXt9LGQ9MCx4PSIuem9vbS0iK1ZvLmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBd%0ALmlkZW50aWZpZXIsTT0idG91Y2htb3ZlIit4LF89InRvdWNoZW5kIit4LGI9W10s%0Adz1Wby5zZWxlY3QoZyksaz1JKCk7SC5jYWxsKGcpLGUoKSxvKHApLHcub24oQSxu%0AdWxsKS5vbih6LGUpfWZ1bmN0aW9uIGYoKXt2YXIgbj1MLm9mKHRoaXMsYXJndW1l%0AbnRzKTtkP2NsZWFyVGltZW91dChkKTooZz10KHA9dnx8Vm8ubW91c2UodGhpcykp%0ALEguY2FsbCh0aGlzKSxvKG4pKSxkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkPW51%0AbGwsYyhuKX0sNTApLHkoKSxyKE1hdGgucG93KDIsLjAwMipxYSgpKSpTLmspLHUo%0AcCxnKSxhKG4pfWZ1bmN0aW9uIGgoKXt2YXIgbj1MLm9mKHRoaXMsYXJndW1lbnRz%0AKSxlPVZvLm1vdXNlKHRoaXMpLGk9dChlKSxsPU1hdGgubG9nKFMuaykvTWF0aC5M%0ATjI7byhuKSxyKE1hdGgucG93KDIsVm8uZXZlbnQuc2hpZnRLZXk/TWF0aC5jZWls%0AKGwpLTE6TWF0aC5mbG9vcihsKSsxKSksdShlLGkpLGEobiksYyhuKX12YXIgZyxw%0ALHYsZCxtLHgsXyxiLHcsUz17eDowLHk6MCxrOjF9LGs9Wzk2MCw1MDBdLEU9UmEs%0AQT0ibW91c2Vkb3duLnpvb20iLEM9Im1vdXNlbW92ZS56b29tIixOPSJtb3VzZXVw%0ALnpvb20iLHo9InRvdWNoc3RhcnQuem9vbSIsTD1NKG4sInpvb21zdGFydCIsInpv%0Ab20iLCJ6b29tZW5kIik7cmV0dXJuIG4uZXZlbnQ9ZnVuY3Rpb24obil7bi5lYWNo%0AKGZ1bmN0aW9uKCl7dmFyIG49TC5vZih0aGlzLGFyZ3VtZW50cyksdD1TO2tsP1Zv%0ALnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuem9vbSIsZnVu%0AY3Rpb24oKXtTPXRoaXMuX19jaGFydF9ffHx7eDowLHk6MCxrOjF9LG8obil9KS50%0Ad2Vlbigiem9vbTp6b29tIixmdW5jdGlvbigpe3ZhciBlPWtbMF0scj1rWzFdLHU9%0AZS8yLGk9ci8yLG89Vm8uaW50ZXJwb2xhdGVab29tKFsodS1TLngpL1MuaywoaS1T%0ALnkpL1MuayxlL1Mua10sWyh1LXQueCkvdC5rLChpLXQueSkvdC5rLGUvdC5rXSk7%0AcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPW8odCksYz1lL3JbMl07dGhpcy5fX2No%0AYXJ0X189Uz17eDp1LXJbMF0qYyx5OmktclsxXSpjLGs6Y30sYShuKX19KS5lYWNo%0AKCJlbmQuem9vbSIsZnVuY3Rpb24oKXtjKG4pfSk6KHRoaXMuX19jaGFydF9fPVMs%0AbyhuKSxhKG4pLGMobikpfSl9LG4udHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhTPXt4Oit0WzBdLHk6K3RbMV0sazpTLmt9LGko%0AKSxuKTpbUy54LFMueV19LG4uc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KFM9e3g6Uy54LHk6Uy55LGs6K3R9LGkoKSxuKTpTLmt9LG4u%0Ac2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/%0AKEU9bnVsbD09dD9SYTpbK3RbMF0sK3RbMV1dLG4pOkV9LG4uY2VudGVyPWZ1bmN0%0AaW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXQmJlsrdFswXSwrdFsx%0AXV0sbik6dn0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyhrPXQmJlsrdFswXSwrdFsxXV0sbik6a30sbi54PWZ1bmN0aW9uKHQpe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPXQseD10LmNvcHkoKSxTPXt4OjAseTow%0ALGs6MX0sbik6X30sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyh3PXQsYj10LmNvcHkoKSxTPXt4OjAseTowLGs6MX0sbik6d30sVm8ucmVi%0AaW5kKG4sTCwib24iKX07dmFyIHFhLFJhPVswLDEvMF0sRGE9Im9ud2hlZWwiaW4g%0AQm8/KHFhPWZ1bmN0aW9uKCl7cmV0dXJuLVZvLmV2ZW50LmRlbHRhWSooVm8uZXZl%0AbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiBC%0Abz8ocWE9ZnVuY3Rpb24oKXtyZXR1cm4gVm8uZXZlbnQud2hlZWxEZWx0YX0sIm1v%0AdXNld2hlZWwiKToocWE9ZnVuY3Rpb24oKXtyZXR1cm4tVm8uZXZlbnQuZGV0YWls%0AfSwiTW96TW91c2VQaXhlbFNjcm9sbCIpO1ZvLmNvbG9yPWV0LGV0LnByb3RvdHlw%0AZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifSxWby5o%0Ac2w9cnQ7dmFyIFBhPXJ0LnByb3RvdHlwZT1uZXcgZXQ7UGEuYnJpZ2h0ZXI9ZnVu%0AY3Rpb24obil7cmV0dXJuIG49TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9u%0AOjEpLG5ldyBydCh0aGlzLmgsdGhpcy5zLHRoaXMubC9uKX0sUGEuZGFya2VyPWZ1%0AbmN0aW9uKG4pe3JldHVybiBuPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/%0AbjoxKSxuZXcgcnQodGhpcy5oLHRoaXMucyxuKnRoaXMubCl9LFBhLnJnYj1mdW5j%0AdGlvbigpe3JldHVybiB1dCh0aGlzLmgsdGhpcy5zLHRoaXMubCl9LFZvLmhjbD1p%0AdDt2YXIgVWE9aXQucHJvdG90eXBlPW5ldyBldDtVYS5icmlnaHRlcj1mdW5jdGlv%0AbihuKXtyZXR1cm4gbmV3IGl0KHRoaXMuaCx0aGlzLmMsTWF0aC5taW4oMTAwLHRo%0AaXMubCtqYSooYXJndW1lbnRzLmxlbmd0aD9uOjEpKSl9LFVhLmRhcmtlcj1mdW5j%0AdGlvbihuKXtyZXR1cm4gbmV3IGl0KHRoaXMuaCx0aGlzLmMsTWF0aC5tYXgoMCx0%0AaGlzLmwtamEqKGFyZ3VtZW50cy5sZW5ndGg/bjoxKSkpfSxVYS5yZ2I9ZnVuY3Rp%0Ab24oKXtyZXR1cm4gb3QodGhpcy5oLHRoaXMuYyx0aGlzLmwpLnJnYigpfSxWby5s%0AYWI9YXQ7dmFyIGphPTE4LEhhPS45NTA0NyxGYT0xLE9hPTEuMDg4ODMsWWE9YXQu%0AcHJvdG90eXBlPW5ldyBldDtZYS5icmlnaHRlcj1mdW5jdGlvbihuKXtyZXR1cm4g%0AbmV3IGF0KE1hdGgubWluKDEwMCx0aGlzLmwramEqKGFyZ3VtZW50cy5sZW5ndGg/%0AbjoxKSksdGhpcy5hLHRoaXMuYil9LFlhLmRhcmtlcj1mdW5jdGlvbihuKXtyZXR1%0Acm4gbmV3IGF0KE1hdGgubWF4KDAsdGhpcy5sLWphKihhcmd1bWVudHMubGVuZ3Ro%0AP246MSkpLHRoaXMuYSx0aGlzLmIpfSxZYS5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4g%0AY3QodGhpcy5sLHRoaXMuYSx0aGlzLmIpfSxWby5yZ2I9Z3Q7dmFyIElhPWd0LnBy%0Ab3RvdHlwZT1uZXcgZXQ7SWEuYnJpZ2h0ZXI9ZnVuY3Rpb24obil7bj1NYXRoLnBv%0AdyguNyxhcmd1bWVudHMubGVuZ3RoP246MSk7dmFyIHQ9dGhpcy5yLGU9dGhpcy5n%0ALHI9dGhpcy5iLHU9MzA7cmV0dXJuIHR8fGV8fHI/KHQmJnU+dCYmKHQ9dSksZSYm%0AdT5lJiYoZT11KSxyJiZ1PnImJihyPXUpLG5ldyBndChNYXRoLm1pbigyNTUsdC9u%0AKSxNYXRoLm1pbigyNTUsZS9uKSxNYXRoLm1pbigyNTUsci9uKSkpOm5ldyBndCh1%0ALHUsdSl9LElhLmRhcmtlcj1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLnBvdygu%0ANyxhcmd1bWVudHMubGVuZ3RoP246MSksbmV3IGd0KG4qdGhpcy5yLG4qdGhpcy5n%0ALG4qdGhpcy5iKX0sSWEuaHNsPWZ1bmN0aW9uKCl7cmV0dXJuIHl0KHRoaXMucix0%0AaGlzLmcsdGhpcy5iKX0sSWEudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iIyIr%0AZHQodGhpcy5yKStkdCh0aGlzLmcpK2R0KHRoaXMuYil9O3ZhciBaYT1Wby5tYXAo%0Ae2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2%0ANTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYx%0AMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3%0ANzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0%0ALGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNl%0AOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5m%0AbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQy%0AMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJr%0AZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoy%0ANTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21h%0AZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6%0AMTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFy%0Aa3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVi%0AbHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6%0AMzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxk%0AZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgy%0ANjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6%0AMTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0%0AMixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRl%0AOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6%0AODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0%0AMjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5y%0AZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6%0AMTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2%0ANSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRi%0AbHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1%0ANTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4%0AMjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0%0AcGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVu%0AOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6Nzgz%0AMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0%0ANzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMz%0AMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4%0AODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVk%0AaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNl%0AYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3By%0AaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlv%0AbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbTox%0ANjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2%0AYWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2%0AZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFu%0AZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2%0ANTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYs%0AcGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNo%0AcHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bTox%0ANDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlZDox%0ANjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2Fk%0AZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAz%0AMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYTox%0AMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1%0AZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNu%0Ab3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAs%0AdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86%0AMTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0%0AOjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVs%0AbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSk7WmEuZm9yRWFjaChm%0AdW5jdGlvbihuLHQpe1phLnNldChuLHB0KHQpKX0pLFZvLmZ1bmN0b3I9YnQsVm8u%0AeGhyPVN0KHd0KSxWby5kc3Y9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKG4sZSxp%0AKXthcmd1bWVudHMubGVuZ3RoPDMmJihpPWUsZT1udWxsKTt2YXIgbz1rdChuLHQs%0AbnVsbD09ZT9yOnUoZSksaSk7cmV0dXJuIG8ucm93PWZ1bmN0aW9uKG4pe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoP28ucmVzcG9uc2UobnVsbD09KGU9bik/cjp1KG4p%0AKTplfSxvfWZ1bmN0aW9uIHIobil7cmV0dXJuIGUucGFyc2Uobi5yZXNwb25zZVRl%0AeHQpfWZ1bmN0aW9uIHUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLnBh%0AcnNlKHQucmVzcG9uc2VUZXh0LG4pfX1mdW5jdGlvbiBpKHQpe3JldHVybiB0Lm1h%0AcChvKS5qb2luKG4pfWZ1bmN0aW9uIG8obil7cmV0dXJuIGEudGVzdChuKT8nIicr%0Abi5yZXBsYWNlKC9cIi9nLCciIicpKyciJzpufXZhciBhPW5ldyBSZWdFeHAoJ1si%0AJytuKyJcbl0iKSxjPW4uY2hhckNvZGVBdCgwKTtyZXR1cm4gZS5wYXJzZT1mdW5j%0AdGlvbihuLHQpe3ZhciByO3JldHVybiBlLnBhcnNlUm93cyhuLGZ1bmN0aW9uKG4s%0AZSl7aWYocilyZXR1cm4gcihuLGUtMSk7dmFyIHU9bmV3IEZ1bmN0aW9uKCJkIiwi%0AcmV0dXJuIHsiK24ubWFwKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIEpTT04uc3RyaW5n%0AaWZ5KG4pKyI6IGRbIit0KyJdIn0pLmpvaW4oIiwiKSsifSIpO3I9dD9mdW5jdGlv%0AbihuLGUpe3JldHVybiB0KHUobiksZSl9OnV9KX0sZS5wYXJzZVJvd3M9ZnVuY3Rp%0Ab24obix0KXtmdW5jdGlvbiBlKCl7aWYocz49bClyZXR1cm4gbztpZih1KXJldHVy%0AbiB1PSExLGk7dmFyIHQ9cztpZigzND09PW4uY2hhckNvZGVBdCh0KSl7Zm9yKHZh%0AciBlPXQ7ZSsrPGw7KWlmKDM0PT09bi5jaGFyQ29kZUF0KGUpKXtpZigzNCE9PW4u%0AY2hhckNvZGVBdChlKzEpKWJyZWFrOysrZX1zPWUrMjt2YXIgcj1uLmNoYXJDb2Rl%0AQXQoZSsxKTtyZXR1cm4gMTM9PT1yPyh1PSEwLDEwPT09bi5jaGFyQ29kZUF0KGUr%0AMikmJisrcyk6MTA9PT1yJiYodT0hMCksbi5zbGljZSh0KzEsZSkucmVwbGFjZSgv%0AIiIvZywnIicpfWZvcig7bD5zOyl7dmFyIHI9bi5jaGFyQ29kZUF0KHMrKyksYT0x%0AO2lmKDEwPT09cil1PSEwO2Vsc2UgaWYoMTM9PT1yKXU9ITAsMTA9PT1uLmNoYXJD%0Ab2RlQXQocykmJigrK3MsKythKTtlbHNlIGlmKHIhPT1jKWNvbnRpbnVlO3JldHVy%0AbiBuLnNsaWNlKHQscy1hKX1yZXR1cm4gbi5zbGljZSh0KX1mb3IodmFyIHIsdSxp%0APXt9LG89e30sYT1bXSxsPW4ubGVuZ3RoLHM9MCxmPTA7KHI9ZSgpKSE9PW87KXtm%0Ab3IodmFyIGg9W107ciE9PWkmJnIhPT1vOyloLnB1c2gocikscj1lKCk7KCF0fHwo%0AaD10KGgsZisrKSkpJiZhLnB1c2goaCl9cmV0dXJuIGF9LGUuZm9ybWF0PWZ1bmN0%0AaW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodFswXSkpcmV0dXJuIGUuZm9ybWF0Um93%0Acyh0KTt2YXIgcj1uZXcgaCx1PVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24o%0Abil7Zm9yKHZhciB0IGluIG4pci5oYXModCl8fHUucHVzaChyLmFkZCh0KSl9KSxb%0AdS5tYXAobykuam9pbihuKV0uY29uY2F0KHQubWFwKGZ1bmN0aW9uKHQpe3JldHVy%0AbiB1Lm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbyh0W25dKX0pLmpvaW4obil9KSku%0Aam9pbigiXG4iKX0sZS5mb3JtYXRSb3dzPWZ1bmN0aW9uKG4pe3JldHVybiBuLm1h%0AcChpKS5qb2luKCJcbiIpfSxlfSxWby5jc3Y9Vm8uZHN2KCIsIiwidGV4dC9jc3Yi%0AKSxWby50c3Y9Vm8uZHN2KCIJIiwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIp%0AO3ZhciBWYSxYYSwkYSxCYSxXYSxKYT1Kb1twKEpvLCJyZXF1ZXN0QW5pbWF0aW9u%0ARnJhbWUiKV18fGZ1bmN0aW9uKG4pe3NldFRpbWVvdXQobiwxNyl9O1ZvLnRpbWVy%0APWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoOzI+ciYmKHQ9%0AMCksMz5yJiYoZT1EYXRlLm5vdygpKTt2YXIgdT1lK3QsaT17YzpuLHQ6dSxmOiEx%0ALG46bnVsbH07WGE/WGEubj1pOlZhPWksWGE9aSwkYXx8KEJhPWNsZWFyVGltZW91%0AdChCYSksJGE9MSxKYShDdCkpfSxWby50aW1lci5mbHVzaD1mdW5jdGlvbigpe050%0AKCksenQoKX0sVm8ucm91bmQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gdD9NYXRoLnJv%0AdW5kKG4qKHQ9TWF0aC5wb3coMTAsdCkpKS90Ok1hdGgucm91bmQobil9O3ZhciBH%0AYT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0i%0ALCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXS5tYXAoVHQpO1ZvLmZvcm1hdFByZWZp%0AeD1mdW5jdGlvbihuLHQpe3ZhciBlPTA7cmV0dXJuIG4mJigwPm4mJihuKj0tMSks%0AdCYmKG49Vm8ucm91bmQobixMdChuLHQpKSksZT0xK01hdGguZmxvb3IoMWUtMTIr%0ATWF0aC5sb2cobikvTWF0aC5MTjEwKSxlPU1hdGgubWF4KC0yNCxNYXRoLm1pbigy%0ANCwzKk1hdGguZmxvb3IoKGUtMSkvMykpKSksR2FbOCtlLzNdfTt2YXIgS2E9Lyg/%0AOihbXntdKT8oWzw+PV5dKSk/KFsrXC0gXSk/KFskI10pPygwKT8oXGQrKT8oLCk/%0AKFwuLT9cZCspPyhbYS16JV0pPy9pLFFhPVZvLm1hcCh7YjpmdW5jdGlvbihuKXty%0AZXR1cm4gbi50b1N0cmluZygyKX0sYzpmdW5jdGlvbihuKXtyZXR1cm4gU3RyaW5n%0ALmZyb21DaGFyQ29kZShuKX0sbzpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmlu%0AZyg4KX0seDpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmluZygxNil9LFg6ZnVu%0AY3Rpb24obil7cmV0dXJuIG4udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LGc6%0AZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b1ByZWNpc2lvbih0KX0sZTpmdW5jdGlv%0AbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0%0AKXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxyOmZ1bmN0aW9uKG4sdCl7cmV0dXJuKG49%0AVm8ucm91bmQobixMdChuLHQpKSkudG9GaXhlZChNYXRoLm1heCgwLE1hdGgubWlu%0AKDIwLEx0KG4qKDErMWUtMTUpLHQpKSkpfX0pLG5jPVZvLnRpbWU9e30sdGM9RGF0%0AZTtEdC5wcm90b3R5cGU9e2dldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f%0ALmdldFVUQ0RhdGUoKX0sZ2V0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5n%0AZXRVVENEYXkoKX0sZ2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f%0ALmdldFVUQ0Z1bGxZZWFyKCl9LGdldEhvdXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRo%0AaXMuXy5nZXRVVENIb3VycygpfSxnZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXty%0AZXR1cm4gdGhpcy5fLmdldFVUQ01pbGxpc2Vjb25kcygpfSxnZXRNaW51dGVzOmZ1%0AbmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaW51dGVzKCl9LGdldE1vbnRo%0AOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNb250aCgpfSxnZXRTZWNv%0AbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENTZWNvbmRzKCl9LGdl%0AdFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFRpbWUoKX0sZ2V0VGlt%0AZXpvbmVPZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdmFsdWVPZjpmdW5jdGlv%0Abigpe3JldHVybiB0aGlzLl8udmFsdWVPZigpfSxzZXREYXRlOmZ1bmN0aW9uKCl7%0AZWMuc2V0VVRDRGF0ZS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RGF5OmZ1%0AbmN0aW9uKCl7ZWMuc2V0VVRDRGF5LmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxz%0AZXRGdWxsWWVhcjpmdW5jdGlvbigpe2VjLnNldFVUQ0Z1bGxZZWFyLmFwcGx5KHRo%0AaXMuXyxhcmd1bWVudHMpfSxzZXRIb3VyczpmdW5jdGlvbigpe2VjLnNldFVUQ0hv%0AdXJzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaWxsaXNlY29uZHM6ZnVu%0AY3Rpb24oKXtlYy5zZXRVVENNaWxsaXNlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3Vt%0AZW50cyl9LHNldE1pbnV0ZXM6ZnVuY3Rpb24oKXtlYy5zZXRVVENNaW51dGVzLmFw%0AcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNb250aDpmdW5jdGlvbigpe2VjLnNl%0AdFVUQ01vbnRoLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRTZWNvbmRzOmZ1%0AbmN0aW9uKCl7ZWMuc2V0VVRDU2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRz%0AKX0sc2V0VGltZTpmdW5jdGlvbigpe2VjLnNldFRpbWUuYXBwbHkodGhpcy5fLGFy%0AZ3VtZW50cyl9fTt2YXIgZWM9RGF0ZS5wcm90b3R5cGU7bmMueWVhcj1QdChmdW5j%0AdGlvbihuKXtyZXR1cm4gbj1uYy5kYXkobiksbi5zZXRNb250aCgwLDEpLG59LGZ1%0AbmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1%0AbmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KSxuYy55ZWFycz1uYy55%0AZWFyLnJhbmdlLG5jLnllYXJzLnV0Yz1uYy55ZWFyLnV0Yy5yYW5nZSxuYy5kYXk9%0AUHQoZnVuY3Rpb24obil7dmFyIHQ9bmV3IHRjKDJlMywwKTtyZXR1cm4gdC5zZXRG%0AdWxsWWVhcihuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgp%0AKSx0fSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSt0KX0sZnVu%0AY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF0ZSgpLTF9KSxuYy5kYXlzPW5jLmRheS5y%0AYW5nZSxuYy5kYXlzLnV0Yz1uYy5kYXkudXRjLnJhbmdlLG5jLmRheU9mWWVhcj1m%0AdW5jdGlvbihuKXt2YXIgdD1uYy55ZWFyKG4pO3JldHVybiBNYXRoLmZsb29yKChu%0ALXQtNmU0KihuLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNl%0AdCgpKSkvODY0ZTUpfSxbInN1bmRheSIsIm1vbmRheSIsInR1ZXNkYXkiLCJ3ZWRu%0AZXNkYXkiLCJ0aHVyc2RheSIsImZyaWRheSIsInNhdHVyZGF5Il0uZm9yRWFjaChm%0AdW5jdGlvbihuLHQpe3Q9Ny10O3ZhciBlPW5jW25dPVB0KGZ1bmN0aW9uKG4pe3Jl%0AdHVybihuPW5jLmRheShuKSkuc2V0RGF0ZShuLmdldERhdGUoKS0obi5nZXREYXko%0AKSt0KSU3KSxufSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSs3%0AKk1hdGguZmxvb3IodCkpfSxmdW5jdGlvbihuKXt2YXIgZT1uYy55ZWFyKG4pLmdl%0AdERheSgpO3JldHVybiBNYXRoLmZsb29yKChuYy5kYXlPZlllYXIobikrKGUrdCkl%0ANykvNyktKGUhPT10KX0pO25jW24rInMiXT1lLnJhbmdlLG5jW24rInMiXS51dGM9%0AZS51dGMucmFuZ2UsbmNbbisiT2ZZZWFyIl09ZnVuY3Rpb24obil7dmFyIGU9bmMu%0AeWVhcihuKS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigobmMuZGF5T2ZZZWFy%0AKG4pKyhlK3QpJTcpLzcpfX0pLG5jLndlZWs9bmMuc3VuZGF5LG5jLndlZWtzPW5j%0ALnN1bmRheS5yYW5nZSxuYy53ZWVrcy51dGM9bmMuc3VuZGF5LnV0Yy5yYW5nZSxu%0AYy53ZWVrT2ZZZWFyPW5jLnN1bmRheU9mWWVhcjt2YXIgcmM9eyItIjoiIixfOiIg%0AIiwwOiIwIn0sdWM9L15ccypcZCsvLGljPS9eJS87Vm8ubG9jYWxlPWZ1bmN0aW9u%0AKG4pe3JldHVybntudW1iZXJGb3JtYXQ6cXQobiksdGltZUZvcm1hdDpqdChuKX19%0AO3ZhciBvYz1Wby5sb2NhbGUoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3Jv%0AdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLGRhdGVUaW1lOiIlYSAlYiAlZSAl%0AWCAlWSIsZGF0ZToiJW0vJWQvJVkiLHRpbWU6IiVIOiVNOiVTIixwZXJpb2RzOlsi%0AQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2Vk%0AbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5%0AczpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1v%0AbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXki%0ALCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJO%0Ab3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJN%0AYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJO%0Ab3YiLCJEZWMiXX0pO1ZvLmZvcm1hdD1vYy5udW1iZXJGb3JtYXQsVm8uZ2VvPXt9%0ALGllLnByb3RvdHlwZT17czowLHQ6MCxhZGQ6ZnVuY3Rpb24obil7b2Uobix0aGlz%0ALnQsYWMpLG9lKGFjLnMsdGhpcy5zLHRoaXMpLHRoaXMucz90aGlzLnQrPWFjLnQ6%0AdGhpcy5zPWFjLnR9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSx2%0AYWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBhYz1uZXcgaWU7%0AVm8uZ2VvLnN0cmVhbT1mdW5jdGlvbihuLHQpe24mJmNjLmhhc093blByb3BlcnR5%0AKG4udHlwZSk/Y2Nbbi50eXBlXShuLHQpOmFlKG4sdCl9O3ZhciBjYz17RmVhdHVy%0AZTpmdW5jdGlvbihuLHQpe2FlKG4uZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0%0AaW9uOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uZmVhdHVyZXMscj0tMSx1PWUu%0AbGVuZ3RoOysrcjx1OylhZShlW3JdLmdlb21ldHJ5LHQpfX0sbGM9e1NwaGVyZTpm%0AdW5jdGlvbihuLHQpe3Quc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKG4sdCl7bj1u%0ALmNvb3JkaW5hdGVzLHQucG9pbnQoblswXSxuWzFdLG5bMl0pfSxNdWx0aVBvaW50%0AOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRpbmF0ZXMscj0tMSx1PWUu%0AbGVuZ3RoOysrcjx1OyluPWVbcl0sdC5wb2ludChuWzBdLG5bMV0sblsyXSl9LExp%0AbmVTdHJpbmc6ZnVuY3Rpb24obix0KXtjZShuLmNvb3JkaW5hdGVzLHQsMCl9LE11%0AbHRpTGluZVN0cmluZzpmdW5jdGlvbihuLHQpe2Zvcih2YXIgZT1uLmNvb3JkaW5h%0AdGVzLHI9LTEsdT1lLmxlbmd0aDsrK3I8dTspY2UoZVtyXSx0LDApfSxQb2x5Z29u%0AOmZ1bmN0aW9uKG4sdCl7bGUobi5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29u%0AOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRpbmF0ZXMscj0tMSx1PWUu%0AbGVuZ3RoOysrcjx1OylsZShlW3JdLHQpfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVu%0AY3Rpb24obix0KXtmb3IodmFyIGU9bi5nZW9tZXRyaWVzLHI9LTEsdT1lLmxlbmd0%0AaDsrK3I8dTspYWUoZVtyXSx0KX19O1ZvLmdlby5hcmVhPWZ1bmN0aW9uKG4pe3Jl%0AdHVybiBzYz0wLFZvLmdlby5zdHJlYW0obixoYyksc2N9O3ZhciBzYyxmYz1uZXcg%0AaWUsaGM9e3NwaGVyZTpmdW5jdGlvbigpe3NjKz00KndhfSxwb2ludDp2LGxpbmVT%0AdGFydDp2LGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmYy5yZXNl%0AdCgpLGhjLmxpbmVTdGFydD1zZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciBu%0APTIqZmM7c2MrPTA+bj80KndhK246bixoYy5saW5lU3RhcnQ9aGMubGluZUVuZD1o%0AYy5wb2ludD12fX07Vm8uZ2VvLmJvdW5kcz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4o%0Abix0KXt4LnB1c2goTT1bcz1uLGg9bl0pLGY+dCYmKGY9dCksdD5nJiYoZz10KX1m%0AdW5jdGlvbiB0KHQsZSl7dmFyIHI9ZmUoW3QqQ2EsZSpDYV0pO2lmKG0pe3ZhciB1%0APWdlKG0sciksaT1bdVsxXSwtdVswXSwwXSxvPWdlKGksdSk7ZGUobyksbz1tZShv%0AKTt2YXIgYz10LXAsbD1jPjA/MTotMSx2PW9bMF0qTmEqbCxkPWlhKGMpPjE4MDtp%0AZihkXih2PmwqcCYmbCp0PnYpKXt2YXIgeT1vWzFdKk5hO3k+ZyYmKGc9eSl9ZWxz%0AZSBpZih2PSh2KzM2MCklMzYwLTE4MCxkXih2PmwqcCYmbCp0PnYpKXt2YXIgeT0t%0Ab1sxXSpOYTtmPnkmJihmPXkpfWVsc2UgZj5lJiYoZj1lKSxlPmcmJihnPWUpO2Q/%0AcD50P2Eocyx0KT5hKHMsaCkmJihoPXQpOmEodCxoKT5hKHMsaCkmJihzPXQpOmg+%0APXM/KHM+dCYmKHM9dCksdD5oJiYoaD10KSk6dD5wP2Eocyx0KT5hKHMsaCkmJiho%0APXQpOmEodCxoKT5hKHMsaCkmJihzPXQpfWVsc2Ugbih0LGUpO209cixwPXR9ZnVu%0AY3Rpb24gZSgpe18ucG9pbnQ9dH1mdW5jdGlvbiByKCl7TVswXT1zLE1bMV09aCxf%0ALnBvaW50PW4sbT1udWxsfWZ1bmN0aW9uIHUobixlKXtpZihtKXt2YXIgcj1uLXA7%0AeSs9aWEocik+MTgwP3IrKHI+MD8zNjA6LTM2MCk6cn1lbHNlIHY9bixkPWU7aGMu%0AcG9pbnQobixlKSx0KG4sZSl9ZnVuY3Rpb24gaSgpe2hjLmxpbmVTdGFydCgpfWZ1%0AbmN0aW9uIG8oKXt1KHYsZCksaGMubGluZUVuZCgpLGlhKHkpPkVhJiYocz0tKGg9%0AMTgwKSksTVswXT1zLE1bMV09aCxtPW51bGx9ZnVuY3Rpb24gYShuLHQpe3JldHVy%0Abih0LT1uKTwwP3QrMzYwOnR9ZnVuY3Rpb24gYyhuLHQpe3JldHVybiBuWzBdLXRb%0AMF19ZnVuY3Rpb24gbChuLHQpe3JldHVybiB0WzBdPD10WzFdP3RbMF08PW4mJm48%0APXRbMV06bjx0WzBdfHx0WzFdPG59dmFyIHMsZixoLGcscCx2LGQsbSx5LHgsTSxf%0APXtwb2ludDpuLGxpbmVTdGFydDplLGxpbmVFbmQ6cixwb2x5Z29uU3RhcnQ6ZnVu%0AY3Rpb24oKXtfLnBvaW50PXUsXy5saW5lU3RhcnQ9aSxfLmxpbmVFbmQ9byx5PTAs%0AaGMucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtoYy5wb2x5%0AZ29uRW5kKCksXy5wb2ludD1uLF8ubGluZVN0YXJ0PWUsXy5saW5lRW5kPXIsMD5m%0AYz8ocz0tKGg9MTgwKSxmPS0oZz05MCkpOnk+RWE/Zz05MDotRWE+eSYmKGY9LTkw%0AKSxNWzBdPXMsTVsxXT1ofX07cmV0dXJuIGZ1bmN0aW9uKG4pe2c9aD0tKHM9Zj0x%0ALzApLHg9W10sVm8uZ2VvLnN0cmVhbShuLF8pO3ZhciB0PXgubGVuZ3RoO2lmKHQp%0Ae3guc29ydChjKTtmb3IodmFyIGUscj0xLHU9eFswXSxpPVt1XTt0PnI7KytyKWU9%0AeFtyXSxsKGVbMF0sdSl8fGwoZVsxXSx1KT8oYSh1WzBdLGVbMV0pPmEodVswXSx1%0AWzFdKSYmKHVbMV09ZVsxXSksYShlWzBdLHVbMV0pPmEodVswXSx1WzFdKSYmKHVb%0AMF09ZVswXSkpOmkucHVzaCh1PWUpO2Zvcih2YXIgbyxlLHA9LTEvMCx0PWkubGVu%0AZ3RoLTEscj0wLHU9aVt0XTt0Pj1yO3U9ZSwrK3IpZT1pW3JdLChvPWEodVsxXSxl%0AWzBdKSk+cCYmKHA9byxzPWVbMF0saD11WzFdKQp9cmV0dXJuIHg9TT1udWxsLDEv%0AMD09PXN8fDEvMD09PWY/W1swLzAsMC8wXSxbMC8wLDAvMF1dOltbcyxmXSxbaCxn%0AXV19fSgpLFZvLmdlby5jZW50cm9pZD1mdW5jdGlvbihuKXtnYz1wYz12Yz1kYz1t%0AYz15Yz14Yz1NYz1fYz1iYz13Yz0wLFZvLmdlby5zdHJlYW0obixTYyk7dmFyIHQ9%0AX2MsZT1iYyxyPXdjLHU9dCp0K2UqZStyKnI7cmV0dXJuIEFhPnUmJih0PXljLGU9%0AeGMscj1NYyxFYT5wYyYmKHQ9dmMsZT1kYyxyPW1jKSx1PXQqdCtlKmUrcipyLEFh%0APnUpP1swLzAsMC8wXTpbTWF0aC5hdGFuMihlLHQpKk5hLEcoci9NYXRoLnNxcnQo%0AdSkpKk5hXX07dmFyIGdjLHBjLHZjLGRjLG1jLHljLHhjLE1jLF9jLGJjLHdjLFNj%0APXtzcGhlcmU6dixwb2ludDp4ZSxsaW5lU3RhcnQ6X2UsbGluZUVuZDpiZSxwb2x5%0AZ29uU3RhcnQ6ZnVuY3Rpb24oKXtTYy5saW5lU3RhcnQ9d2V9LHBvbHlnb25FbmQ6%0AZnVuY3Rpb24oKXtTYy5saW5lU3RhcnQ9X2V9fSxrYz1DZShTZSxUZSxSZSxbLXdh%0ALC13YS8yXSksRWM9MWU5O1ZvLmdlby5jbGlwRXh0ZW50PWZ1bmN0aW9uKCl7dmFy%0AIG4sdCxlLHIsdSxpLG89e3N0cmVhbTpmdW5jdGlvbihuKXtyZXR1cm4gdSYmKHUu%0AdmFsaWQ9ITEpLHU9aShuKSx1LnZhbGlkPSEwLHV9LGV4dGVudDpmdW5jdGlvbihh%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1qZShuPSthWzBdWzBdLHQ9K2Fb%0AMF1bMV0sZT0rYVsxXVswXSxyPSthWzFdWzFdKSx1JiYodS52YWxpZD0hMSx1PW51%0AbGwpLG8pOltbbix0XSxbZSxyXV19fTtyZXR1cm4gby5leHRlbnQoW1swLDBdLFs5%0ANjAsNTAwXV0pfSwoVm8uZ2VvLmNvbmljRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0%0AdXJuIEZlKE9lKX0pLnJhdz1PZSxWby5nZW8uYWxiZXJzPWZ1bmN0aW9uKCl7cmV0%0AdXJuIFZvLmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbOTYsMF0pLmNlbnRl%0AcihbLS42LDM4LjddKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzAp%0AfSxWby5nZW8uYWxiZXJzVXNhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXt2YXIg%0AaT1uWzBdLG89blsxXTtyZXR1cm4gdD1udWxsLGUoaSxvKSx0fHwocihpLG8pLHQp%0AfHx1KGksbyksdH12YXIgdCxlLHIsdSxpPVZvLmdlby5hbGJlcnMoKSxvPVZvLmdl%0Aby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4%0ALjVdKS5wYXJhbGxlbHMoWzU1LDY1XSksYT1Wby5nZW8uY29uaWNFcXVhbEFyZWEo%0AKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4%0ALDE4XSksYz17cG9pbnQ6ZnVuY3Rpb24obixlKXt0PVtuLGVdfX07cmV0dXJuIG4u%0AaW52ZXJ0PWZ1bmN0aW9uKG4pe3ZhciB0PWkuc2NhbGUoKSxlPWkudHJhbnNsYXRl%0AKCkscj0oblswXS1lWzBdKS90LHU9KG5bMV0tZVsxXSkvdDtyZXR1cm4odT49LjEy%0AJiYuMjM0PnUmJnI+PS0uNDI1JiYtLjIxND5yP286dT49LjE2NiYmLjIzND51JiZy%0APj0tLjIxNCYmLS4xMTU+cj9hOmkpLmludmVydChuKX0sbi5zdHJlYW09ZnVuY3Rp%0Ab24obil7dmFyIHQ9aS5zdHJlYW0obiksZT1vLnN0cmVhbShuKSxyPWEuc3RyZWFt%0AKG4pO3JldHVybntwb2ludDpmdW5jdGlvbihuLHUpe3QucG9pbnQobix1KSxlLnBv%0AaW50KG4sdSksci5wb2ludChuLHUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0LnNwaGVy%0AZSgpLGUuc3BoZXJlKCksci5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7%0AdC5saW5lU3RhcnQoKSxlLmxpbmVTdGFydCgpLHIubGluZVN0YXJ0KCl9LGxpbmVF%0AbmQ6ZnVuY3Rpb24oKXt0LmxpbmVFbmQoKSxlLmxpbmVFbmQoKSxyLmxpbmVFbmQo%0AKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dC5wb2x5Z29uU3RhcnQoKSxlLnBv%0AbHlnb25TdGFydCgpLHIucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rp%0Ab24oKXt0LnBvbHlnb25FbmQoKSxlLnBvbHlnb25FbmQoKSxyLnBvbHlnb25FbmQo%0AKX19fSxuLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxl%0Abmd0aD8oaS5wcmVjaXNpb24odCksby5wcmVjaXNpb24odCksYS5wcmVjaXNpb24o%0AdCksbik6aS5wcmVjaXNpb24oKX0sbi5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4g%0AYXJndW1lbnRzLmxlbmd0aD8oaS5zY2FsZSh0KSxvLnNjYWxlKC4zNSp0KSxhLnNj%0AYWxlKHQpLG4udHJhbnNsYXRlKGkudHJhbnNsYXRlKCkpKTppLnNjYWxlKCl9LG4u%0AdHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVy%0AbiBpLnRyYW5zbGF0ZSgpO3ZhciBsPWkuc2NhbGUoKSxzPSt0WzBdLGY9K3RbMV07%0AcmV0dXJuIGU9aS50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW3MtLjQ1NSpsLGYt%0ALjIzOCpsXSxbcysuNDU1KmwsZisuMjM4KmxdXSkuc3RyZWFtKGMpLnBvaW50LHI9%0Aby50cmFuc2xhdGUoW3MtLjMwNypsLGYrLjIwMSpsXSkuY2xpcEV4dGVudChbW3Mt%0ALjQyNSpsK0VhLGYrLjEyKmwrRWFdLFtzLS4yMTQqbC1FYSxmKy4yMzQqbC1FYV1d%0AKS5zdHJlYW0oYykucG9pbnQsdT1hLnRyYW5zbGF0ZShbcy0uMjA1KmwsZisuMjEy%0AKmxdKS5jbGlwRXh0ZW50KFtbcy0uMjE0KmwrRWEsZisuMTY2KmwrRWFdLFtzLS4x%0AMTUqbC1FYSxmKy4yMzQqbC1FYV1dKS5zdHJlYW0oYykucG9pbnQsbn0sbi5zY2Fs%0AZSgxMDcwKX07dmFyIEFjLENjLE5jLHpjLExjLFRjLHFjPXtwb2ludDp2LGxpbmVT%0AdGFydDp2LGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtDYz0wLHFj%0ALmxpbmVTdGFydD1ZZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3FjLmxpbmVTdGFy%0AdD1xYy5saW5lRW5kPXFjLnBvaW50PXYsQWMrPWlhKENjLzIpfX0sUmM9e3BvaW50%0AOkllLGxpbmVTdGFydDp2LGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6dixwb2x5Z29u%0ARW5kOnZ9LERjPXtwb2ludDpYZSxsaW5lU3RhcnQ6JGUsbGluZUVuZDpCZSxwb2x5%0AZ29uU3RhcnQ6ZnVuY3Rpb24oKXtEYy5saW5lU3RhcnQ9V2V9LHBvbHlnb25FbmQ6%0AZnVuY3Rpb24oKXtEYy5wb2ludD1YZSxEYy5saW5lU3RhcnQ9JGUsRGMubGluZUVu%0AZD1CZX19O1ZvLmdlby5wYXRoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtyZXR1%0Acm4gbiYmKCJmdW5jdGlvbiI9PXR5cGVvZiBhJiZpLnBvaW50UmFkaXVzKCthLmFw%0AcGx5KHRoaXMsYXJndW1lbnRzKSksbyYmby52YWxpZHx8KG89dShpKSksVm8uZ2Vv%0ALnN0cmVhbShuLG8pKSxpLnJlc3VsdCgpfWZ1bmN0aW9uIHQoKXtyZXR1cm4gbz1u%0AdWxsLG59dmFyIGUscix1LGksbyxhPTQuNTtyZXR1cm4gbi5hcmVhPWZ1bmN0aW9u%0AKG4pe3JldHVybiBBYz0wLFZvLmdlby5zdHJlYW0obix1KHFjKSksQWN9LG4uY2Vu%0AdHJvaWQ9ZnVuY3Rpb24obil7cmV0dXJuIHZjPWRjPW1jPXljPXhjPU1jPV9jPWJj%0APXdjPTAsVm8uZ2VvLnN0cmVhbShuLHUoRGMpKSx3Yz9bX2Mvd2MsYmMvd2NdOk1j%0AP1t5Yy9NYyx4Yy9NY106bWM/W3ZjL21jLGRjL21jXTpbMC8wLDAvMF19LG4uYm91%0AbmRzPWZ1bmN0aW9uKG4pe3JldHVybiBMYz1UYz0tKE5jPXpjPTEvMCksVm8uZ2Vv%0ALnN0cmVhbShuLHUoUmMpKSxbW05jLHpjXSxbTGMsVGNdXX0sbi5wcm9qZWN0aW9u%0APWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PShlPW4pP24u%0Ac3RyZWFtfHxLZShuKTp3dCx0KCkpOmV9LG4uY29udGV4dD1mdW5jdGlvbihuKXty%0AZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0ocj1uKT9uZXcgWmU6bmV3%0AIEplKG4pLCJmdW5jdGlvbiIhPXR5cGVvZiBhJiZpLnBvaW50UmFkaXVzKGEpLHQo%0AKSk6cn0sbi5wb2ludFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRz%0ALmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OihpLnBvaW50UmFkaXVz%0AKCt0KSwrdCksbik6YX0sbi5wcm9qZWN0aW9uKFZvLmdlby5hbGJlcnNVc2EoKSku%0AY29udGV4dChudWxsKX0sVm8uZ2VvLnRyYW5zZm9ybT1mdW5jdGlvbihuKXtyZXR1%0Acm57c3RyZWFtOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBRZSh0KTtmb3IodmFyIHIg%0AaW4gbillW3JdPW5bcl07cmV0dXJuIGV9fX0sUWUucHJvdG90eXBlPXtwb2ludDpm%0AdW5jdGlvbihuLHQpe3RoaXMuc3RyZWFtLnBvaW50KG4sdCl9LHNwaGVyZTpmdW5j%0AdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24o%0AKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3Ro%0AaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhp%0Acy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0%0AaGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fSxWby5nZW8ucHJvamVjdGlvbj10cixW%0Aby5nZW8ucHJvamVjdGlvbk11dGF0b3I9ZXIsKFZvLmdlby5lcXVpcmVjdGFuZ3Vs%0AYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdHIodXIpfSkucmF3PXVyLmludmVydD11cixW%0Aby5nZW8ucm90YXRpb249ZnVuY3Rpb24obil7ZnVuY3Rpb24gdCh0KXtyZXR1cm4g%0AdD1uKHRbMF0qQ2EsdFsxXSpDYSksdFswXSo9TmEsdFsxXSo9TmEsdH1yZXR1cm4g%0Abj1vcihuWzBdJTM2MCpDYSxuWzFdKkNhLG4ubGVuZ3RoPjI/blsyXSpDYTowKSx0%0ALmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdD1uLmludmVydCh0WzBdKkNhLHRb%0AMV0qQ2EpLHRbMF0qPU5hLHRbMV0qPU5hLHR9LHR9LGlyLmludmVydD11cixWby5n%0AZW8uY2lyY2xlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBuPSJmdW5jdGlv%0AbiI9PXR5cGVvZiByP3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnIsdD1vcigtblsw%0AXSpDYSwtblsxXSpDYSwwKS5pbnZlcnQsdT1bXTtyZXR1cm4gZShudWxsLG51bGws%0AMSx7cG9pbnQ6ZnVuY3Rpb24obixlKXt1LnB1c2gobj10KG4sZSkpLG5bMF0qPU5h%0ALG5bMV0qPU5hfX0pLHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbdV19fXZh%0AciB0LGUscj1bMCwwXSx1PTY7cmV0dXJuIG4ub3JpZ2luPWZ1bmN0aW9uKHQpe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5hbmdsZT1mdW5jdGlv%0AbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zcigodD0rcikqQ2EsdSpD%0AYSksbik6dH0sbi5wcmVjaXNpb249ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50%0Acy5sZW5ndGg/KGU9c3IodCpDYSwodT0rcikqQ2EpLG4pOnV9LG4uYW5nbGUoOTAp%0AfSxWby5nZW8uZGlzdGFuY2U9ZnVuY3Rpb24obix0KXt2YXIgZSxyPSh0WzBdLW5b%0AMF0pKkNhLHU9blsxXSpDYSxpPXRbMV0qQ2Esbz1NYXRoLnNpbihyKSxhPU1hdGgu%0AY29zKHIpLGM9TWF0aC5zaW4odSksbD1NYXRoLmNvcyh1KSxzPU1hdGguc2luKGkp%0ALGY9TWF0aC5jb3MoaSk7cmV0dXJuIE1hdGguYXRhbjIoTWF0aC5zcXJ0KChlPWYq%0AbykqZSsoZT1sKnMtYypmKmEpKmUpLGMqcytsKmYqYSl9LFZvLmdlby5ncmF0aWN1%0AbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7cmV0dXJue3R5cGU6Ik11bHRpTGlu%0AZVN0cmluZyIsY29vcmRpbmF0ZXM6dCgpfX1mdW5jdGlvbiB0KCl7cmV0dXJuIFZv%0ALnJhbmdlKE1hdGguY2VpbChpL2QpKmQsdSxkKS5tYXAoaCkuY29uY2F0KFZvLnJh%0AbmdlKE1hdGguY2VpbChsL20pKm0sYyxtKS5tYXAoZykpLmNvbmNhdChWby5yYW5n%0AZShNYXRoLmNlaWwoci9wKSpwLGUscCkuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVy%0AbiBpYShuJWQpPkVhfSkubWFwKHMpKS5jb25jYXQoVm8ucmFuZ2UoTWF0aC5jZWls%0AKGEvdikqdixvLHYpLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gaWEobiVtKT5F%0AYX0pLm1hcChmKSl9dmFyIGUscix1LGksbyxhLGMsbCxzLGYsaCxnLHA9MTAsdj1w%0ALGQ9OTAsbT0zNjAseT0yLjU7cmV0dXJuIG4ubGluZXM9ZnVuY3Rpb24oKXtyZXR1%0Acm4gdCgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIs%0AY29vcmRpbmF0ZXM6bn19KX0sbi5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5%0AcGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltoKGkpLmNvbmNhdChnKGMpLnNsaWNl%0AKDEpLGgodSkucmV2ZXJzZSgpLnNsaWNlKDEpLGcobCkucmV2ZXJzZSgpLnNsaWNl%0AKDEpKV19fSxuLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxl%0Abmd0aD9uLm1ham9yRXh0ZW50KHQpLm1pbm9yRXh0ZW50KHQpOm4ubWlub3JFeHRl%0AbnQoKX0sbi5tYWpvckV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRz%0ALmxlbmd0aD8oaT0rdFswXVswXSx1PSt0WzFdWzBdLGw9K3RbMF1bMV0sYz0rdFsx%0AXVsxXSxpPnUmJih0PWksaT11LHU9dCksbD5jJiYodD1sLGw9YyxjPXQpLG4ucHJl%0AY2lzaW9uKHkpKTpbW2ksbF0sW3UsY11dfSxuLm1pbm9yRXh0ZW50PWZ1bmN0aW9u%0AKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdWzBdLGU9K3RbMV1b%0AMF0sYT0rdFswXVsxXSxvPSt0WzFdWzFdLHI+ZSYmKHQ9cixyPWUsZT10KSxhPm8m%0AJih0PWEsYT1vLG89dCksbi5wcmVjaXNpb24oeSkpOltbcixhXSxbZSxvXV19LG4u%0Ac3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uLm1ham9y%0AU3RlcCh0KS5taW5vclN0ZXAodCk6bi5taW5vclN0ZXAoKX0sbi5tYWpvclN0ZXA9%0AZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9K3RbMF0sbT0r%0AdFsxXSxuKTpbZCxtXX0sbi5taW5vclN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFy%0AZ3VtZW50cy5sZW5ndGg/KHA9K3RbMF0sdj0rdFsxXSxuKTpbcCx2XX0sbi5wcmVj%0AaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9K3Qs%0Acz1ocihhLG8sOTApLGY9Z3IocixlLHkpLGg9aHIobCxjLDkwKSxnPWdyKGksdSx5%0AKSxuKTp5fSxuLm1ham9yRXh0ZW50KFtbLTE4MCwtOTArRWFdLFsxODAsOTAtRWFd%0AXSkubWlub3JFeHRlbnQoW1stMTgwLC04MC1FYV0sWzE4MCw4MCtFYV1dKX0sVm8u%0AZ2VvLmdyZWF0QXJjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3JldHVybnt0eXBl%0AOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpbdHx8ci5hcHBseSh0aGlzLGFyZ3Vt%0AZW50cyksZXx8dS5hcHBseSh0aGlzLGFyZ3VtZW50cyldfX12YXIgdCxlLHI9cHIs%0AdT12cjtyZXR1cm4gbi5kaXN0YW5jZT1mdW5jdGlvbigpe3JldHVybiBWby5nZW8u%0AZGlzdGFuY2UodHx8ci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZXx8dS5hcHBseSh0%0AaGlzLGFyZ3VtZW50cykpfSxuLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aD8ocj1lLHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/bnVsbDpl%0ALG4pOnJ9LG4udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyh1PXQsZT0iZnVuY3Rpb24iPT10eXBlb2YgdD9udWxsOnQsbik6dX0sbi5w%0AcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uOjB9%0ALG59LFZvLmdlby5pbnRlcnBvbGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBkcihu%0AWzBdKkNhLG5bMV0qQ2EsdFswXSpDYSx0WzFdKkNhKX0sVm8uZ2VvLmxlbmd0aD1m%0AdW5jdGlvbihuKXtyZXR1cm4gUGM9MCxWby5nZW8uc3RyZWFtKG4sVWMpLFBjfTt2%0AYXIgUGMsVWM9e3NwaGVyZTp2LHBvaW50OnYsbGluZVN0YXJ0Om1yLGxpbmVFbmQ6%0Adixwb2x5Z29uU3RhcnQ6dixwb2x5Z29uRW5kOnZ9LGpjPXlyKGZ1bmN0aW9uKG4p%0Ae3JldHVybiBNYXRoLnNxcnQoMi8oMStuKSl9LGZ1bmN0aW9uKG4pe3JldHVybiAy%0AKk1hdGguYXNpbihuLzIpfSk7KFZvLmdlby5hemltdXRoYWxFcXVhbEFyZWE9ZnVu%0AY3Rpb24oKXtyZXR1cm4gdHIoamMpfSkucmF3PWpjO3ZhciBIYz15cihmdW5jdGlv%0AbihuKXt2YXIgdD1NYXRoLmFjb3Mobik7cmV0dXJuIHQmJnQvTWF0aC5zaW4odCl9%0ALHd0KTsoVm8uZ2VvLmF6aW11dGhhbEVxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0%0AdXJuIHRyKEhjKX0pLnJhdz1IYywoVm8uZ2VvLmNvbmljQ29uZm9ybWFsPWZ1bmN0%0AaW9uKCl7cmV0dXJuIEZlKHhyKX0pLnJhdz14ciwoVm8uZ2VvLmNvbmljRXF1aWRp%0Ac3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gRmUoTXIpfSkucmF3PU1yO3ZhciBGYz15%0AcihmdW5jdGlvbihuKXtyZXR1cm4gMS9ufSxNYXRoLmF0YW4pOyhWby5nZW8uZ25v%0AbW9uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gdHIoRmMpfSkucmF3PUZjLF9yLmludmVy%0AdD1mdW5jdGlvbihuLHQpe3JldHVybltuLDIqTWF0aC5hdGFuKE1hdGguZXhwKHQp%0AKS1rYV19LChWby5nZW8ubWVyY2F0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gYnIoX3Ip%0AfSkucmF3PV9yO3ZhciBPYz15cihmdW5jdGlvbigpe3JldHVybiAxfSxNYXRoLmFz%0AaW4pOyhWby5nZW8ub3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIHRyKE9j%0AKX0pLnJhdz1PYzt2YXIgWWM9eXIoZnVuY3Rpb24obil7cmV0dXJuIDEvKDErbil9%0ALGZ1bmN0aW9uKG4pe3JldHVybiAyKk1hdGguYXRhbihuKX0pOyhWby5nZW8uc3Rl%0AcmVvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiB0cihZYyl9KS5yYXc9WWMsd3Iu%0AaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuWy10LDIqTWF0aC5hdGFuKE1hdGgu%0AZXhwKG4pKS1rYV19LChWby5nZW8udHJhbnN2ZXJzZU1lcmNhdG9yPWZ1bmN0aW9u%0AKCl7dmFyIG49YnIod3IpLHQ9bi5jZW50ZXIsZT1uLnJvdGF0ZTtyZXR1cm4gbi5j%0AZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIG4/dChbLW5bMV0sblswXV0pOihuPXQo%0AKSxbblsxXSwtblswXV0pfSxuLnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gbj9l%0AKFtuWzBdLG5bMV0sbi5sZW5ndGg+Mj9uWzJdKzkwOjkwXSk6KG49ZSgpLFtuWzBd%0ALG5bMV0sblsyXS05MF0pfSxlKFswLDAsOTBdKX0pLnJhdz13cixWby5nZW9tPXt9%0ALFZvLmdlb20uaHVsbD1mdW5jdGlvbihuKXtmdW5jdGlvbiB0KG4pe2lmKG4ubGVu%0AZ3RoPDMpcmV0dXJuW107dmFyIHQsdT1idChlKSxpPWJ0KHIpLG89bi5sZW5ndGgs%0AYT1bXSxjPVtdO2Zvcih0PTA7bz50O3QrKylhLnB1c2goWyt1LmNhbGwodGhpcyxu%0AW3RdLHQpLCtpLmNhbGwodGhpcyxuW3RdLHQpLHRdKTtmb3IoYS5zb3J0KEFyKSx0%0APTA7bz50O3QrKyljLnB1c2goW2FbdF1bMF0sLWFbdF1bMV1dKTt2YXIgbD1Fcihh%0AKSxzPUVyKGMpLGY9c1swXT09PWxbMF0saD1zW3MubGVuZ3RoLTFdPT09bFtsLmxl%0Abmd0aC0xXSxnPVtdO2Zvcih0PWwubGVuZ3RoLTE7dD49MDstLXQpZy5wdXNoKG5b%0AYVtsW3RdXVsyXV0pO2Zvcih0PStmO3Q8cy5sZW5ndGgtaDsrK3QpZy5wdXNoKG5b%0AYVtzW3RdXVsyXV0pO3JldHVybiBnfXZhciBlPVNyLHI9a3I7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/dChuKToodC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVu%0AdHMubGVuZ3RoPyhlPW4sdCk6ZX0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1%0AbWVudHMubGVuZ3RoPyhyPW4sdCk6cn0sdCl9LFZvLmdlb20ucG9seWdvbj1mdW5j%0AdGlvbihuKXtyZXR1cm4gc2EobixJYyksbn07dmFyIEljPVZvLmdlb20ucG9seWdv%0Abi5wcm90b3R5cGU9W107SWMuYXJlYT1mdW5jdGlvbigpe2Zvcih2YXIgbix0PS0x%0ALGU9dGhpcy5sZW5ndGgscj10aGlzW2UtMV0sdT0wOysrdDxlOyluPXIscj10aGlz%0AW3RdLHUrPW5bMV0qclswXS1uWzBdKnJbMV07cmV0dXJuLjUqdX0sSWMuY2VudHJv%0AaWQ9ZnVuY3Rpb24obil7dmFyIHQsZSxyPS0xLHU9dGhpcy5sZW5ndGgsaT0wLG89%0AMCxhPXRoaXNbdS0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KG49LTEvKDYqdGhp%0Acy5hcmVhKCkpKTsrK3I8dTspdD1hLGE9dGhpc1tyXSxlPXRbMF0qYVsxXS1hWzBd%0AKnRbMV0saSs9KHRbMF0rYVswXSkqZSxvKz0odFsxXSthWzFdKSplO3JldHVybltp%0AKm4sbypuXX0sSWMuY2xpcD1mdW5jdGlvbihuKXtmb3IodmFyIHQsZSxyLHUsaSxv%0ALGE9enIobiksYz0tMSxsPXRoaXMubGVuZ3RoLXpyKHRoaXMpLHM9dGhpc1tsLTFd%0AOysrYzxsOyl7Zm9yKHQ9bi5zbGljZSgpLG4ubGVuZ3RoPTAsdT10aGlzW2NdLGk9%0AdFsocj10Lmxlbmd0aC1hKS0xXSxlPS0xOysrZTxyOylvPXRbZV0sQ3IobyxzLHUp%0APyhDcihpLHMsdSl8fG4ucHVzaChOcihpLG8scyx1KSksbi5wdXNoKG8pKTpDcihp%0ALHMsdSkmJm4ucHVzaChOcihpLG8scyx1KSksaT1vO2EmJm4ucHVzaChuWzBdKSxz%0APXV9cmV0dXJuIG59O3ZhciBaYyxWYyxYYywkYyxCYyxXYz1bXSxKYz1bXTtqci5w%0Acm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2Zvcih2YXIgbix0PXRoaXMuZWRn%0AZXMsZT10Lmxlbmd0aDtlLS07KW49dFtlXS5lZGdlLG4uYiYmbi5hfHx0LnNwbGlj%0AZShlLDEpO3JldHVybiB0LnNvcnQoRnIpLHQubGVuZ3RofSxKci5wcm90b3R5cGU9%0Ae3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRl%0AP3RoaXMuZWRnZS5hOnRoaXMuZWRnZS5ifSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4g%0AdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmI6dGhpcy5lZGdlLmF9%0AfSxHci5wcm90b3R5cGU9e2luc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLHIsdTtp%0AZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7%0AZm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0%0AaGlzLl8/KG49dHUodGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1u%0AKToodC5QPXQuTj1udWxsLHRoaXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVs%0AbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzspcj1lLlUsZT09PXIuTD8odT1yLlIs%0AdSYmdS5DPyhlLkM9dS5DPSExLHIuQz0hMCxuPXIpOihuPT09ZS5SJiYoUXIodGhp%0AcyxlKSxuPWUsZT1uLlUpLGUuQz0hMSxyLkM9ITAsbnUodGhpcyxyKSkpOih1PXIu%0ATCx1JiZ1LkM/KGUuQz11LkM9ITEsci5DPSEwLG49cik6KG49PT1lLkwmJihudSh0%0AaGlzLGUpLG49ZSxlPW4uVSksZS5DPSExLHIuQz0hMCxRcih0aGlzLHIpKSksZT1u%0ALlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1u%0ALlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciB0LGUscix1PW4u%0AVSxpPW4uTCxvPW4uUjtpZihlPWk/bz90dShvKTppOm8sdT91Lkw9PT1uP3UuTD1l%0AOnUuUj1lOnRoaXMuXz1lLGkmJm8/KHI9ZS5DLGUuQz1uLkMsZS5MPWksaS5VPWUs%0AZSE9PW8/KHU9ZS5VLGUuVT1uLlUsbj1lLlIsdS5MPW4sZS5SPW8sby5VPWUpOihl%0ALlU9dSx1PWUsbj1lLlIpKToocj1uLkMsbj1lKSxuJiYobi5VPXUpLCFyKXtpZihu%0AJiZuLkMpcmV0dXJuIG4uQz0hMSx2b2lkIDA7ZG97aWYobj09PXRoaXMuXylicmVh%0AaztpZihuPT09dS5MKXtpZih0PXUuUix0LkMmJih0LkM9ITEsdS5DPSEwLFFyKHRo%0AaXMsdSksdD11LlIpLHQuTCYmdC5MLkN8fHQuUiYmdC5SLkMpe3QuUiYmdC5SLkN8%0AfCh0LkwuQz0hMSx0LkM9ITAsbnUodGhpcyx0KSx0PXUuUiksdC5DPXUuQyx1LkM9%0AdC5SLkM9ITEsUXIodGhpcyx1KSxuPXRoaXMuXzticmVha319ZWxzZSBpZih0PXUu%0ATCx0LkMmJih0LkM9ITEsdS5DPSEwLG51KHRoaXMsdSksdD11LkwpLHQuTCYmdC5M%0ALkN8fHQuUiYmdC5SLkMpe3QuTCYmdC5MLkN8fCh0LlIuQz0hMSx0LkM9ITAsUXIo%0AdGhpcyx0KSx0PXUuTCksdC5DPXUuQyx1LkM9dC5MLkM9ITEsbnUodGhpcyx1KSxu%0APXRoaXMuXzticmVha310LkM9ITAsbj11LHU9dS5VfXdoaWxlKCFuLkMpO24mJihu%0ALkM9ITEpfX19LFZvLmdlb20udm9yb25vaT1mdW5jdGlvbihuKXtmdW5jdGlvbiB0%0AKG4pe3ZhciB0PW5ldyBBcnJheShuLmxlbmd0aCkscj1hWzBdWzBdLHU9YVswXVsx%0AXSxpPWFbMV1bMF0sbz1hWzFdWzFdO3JldHVybiBldShlKG4pLGEpLmNlbGxzLmZv%0AckVhY2goZnVuY3Rpb24oZSxhKXt2YXIgYz1lLmVkZ2VzLGw9ZS5zaXRlLHM9dFth%0AXT1jLmxlbmd0aD9jLm1hcChmdW5jdGlvbihuKXt2YXIgdD1uLnN0YXJ0KCk7cmV0%0AdXJuW3QueCx0LnldfSk6bC54Pj1yJiZsLng8PWkmJmwueT49dSYmbC55PD1vP1tb%0AcixvXSxbaSxvXSxbaSx1XSxbcix1XV06W107cy5wb2ludD1uW2FdfSksdH1mdW5j%0AdGlvbiBlKG4pe3JldHVybiBuLm1hcChmdW5jdGlvbihuLHQpe3JldHVybnt4Ok1h%0AdGgucm91bmQoaShuLHQpL0VhKSpFYSx5Ok1hdGgucm91bmQobyhuLHQpL0VhKSpF%0AYSxpOnR9fSl9dmFyIHI9U3IsdT1rcixpPXIsbz11LGE9R2M7cmV0dXJuIG4/dChu%0AKToodC5saW5rcz1mdW5jdGlvbihuKXtyZXR1cm4gZXUoZShuKSkuZWRnZXMuZmls%0AdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLmwmJm4ucn0pLm1hcChmdW5jdGlvbih0%0AKXtyZXR1cm57c291cmNlOm5bdC5sLmldLHRhcmdldDpuW3Quci5pXX19KX0sdC50%0AcmlhbmdsZXM9ZnVuY3Rpb24obil7dmFyIHQ9W107cmV0dXJuIGV1KGUobikpLmNl%0AbGxzLmZvckVhY2goZnVuY3Rpb24oZSxyKXtmb3IodmFyIHUsaSxvPWUuc2l0ZSxh%0APWUuZWRnZXMuc29ydChGciksYz0tMSxsPWEubGVuZ3RoLHM9YVtsLTFdLmVkZ2Us%0AZj1zLmw9PT1vP3MucjpzLmw7KytjPGw7KXU9cyxpPWYscz1hW2NdLmVkZ2UsZj1z%0ALmw9PT1vP3MucjpzLmwscjxpLmkmJnI8Zi5pJiZ1dShvLGksZik8MCYmdC5wdXNo%0AKFtuW3JdLG5baS5pXSxuW2YuaV1dKX0pLHR9LHQueD1mdW5jdGlvbihuKXtyZXR1%0Acm4gYXJndW1lbnRzLmxlbmd0aD8oaT1idChyPW4pLHQpOnJ9LHQueT1mdW5jdGlv%0AbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1idCh1PW4pLHQpOnV9LHQu%0AY2xpcEV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o%0AYT1udWxsPT1uP0djOm4sdCk6YT09PUdjP251bGw6YX0sdC5zaXplPWZ1bmN0aW9u%0AKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QuY2xpcEV4dGVudChuJiZbWzAs%0AMF0sbl0pOmE9PT1HYz9udWxsOmEmJmFbMV19LHQpfTt2YXIgR2M9W1stMWU2LC0x%0AZTZdLFsxZTYsMWU2XV07Vm8uZ2VvbS5kZWxhdW5heT1mdW5jdGlvbihuKXtyZXR1%0Acm4gVm8uZ2VvbS52b3Jvbm9pKCkudHJpYW5nbGVzKG4pfSxWby5nZW9tLnF1YWR0%0AcmVlPWZ1bmN0aW9uKG4sdCxlLHIsdSl7ZnVuY3Rpb24gaShuKXtmdW5jdGlvbiBp%0AKG4sdCxlLHIsdSxpLG8sYSl7aWYoIWlzTmFOKGUpJiYhaXNOYU4ocikpaWYobi5s%0AZWFmKXt2YXIgYz1uLngscz1uLnk7aWYobnVsbCE9YylpZihpYShjLWUpK2lhKHMt%0Acik8LjAxKWwobix0LGUscix1LGksbyxhKTtlbHNle3ZhciBmPW4ucG9pbnQ7bi54%0APW4ueT1uLnBvaW50PW51bGwsbChuLGYsYyxzLHUsaSxvLGEpLGwobix0LGUscix1%0ALGksbyxhKX1lbHNlIG4ueD1lLG4ueT1yLG4ucG9pbnQ9dH1lbHNlIGwobix0LGUs%0Acix1LGksbyxhKX1mdW5jdGlvbiBsKG4sdCxlLHIsdSxvLGEsYyl7dmFyIGw9LjUq%0AKHUrYSkscz0uNSoobytjKSxmPWU+PWwsaD1yPj1zLGc9KGg8PDEpK2Y7bi5sZWFm%0APSExLG49bi5ub2Rlc1tnXXx8KG4ubm9kZXNbZ109YXUoKSksZj91PWw6YT1sLGg/%0Abz1zOmM9cyxpKG4sdCxlLHIsdSxvLGEsYyl9dmFyIHMsZixoLGcscCx2LGQsbSx5%0ALHg9YnQoYSksTT1idChjKTtpZihudWxsIT10KXY9dCxkPWUsbT1yLHk9dTtlbHNl%0AIGlmKG09eT0tKHY9ZD0xLzApLGY9W10saD1bXSxwPW4ubGVuZ3RoLG8pZm9yKGc9%0AMDtwPmc7KytnKXM9bltnXSxzLng8diYmKHY9cy54KSxzLnk8ZCYmKGQ9cy55KSxz%0ALng+bSYmKG09cy54KSxzLnk+eSYmKHk9cy55KSxmLnB1c2gocy54KSxoLnB1c2go%0Acy55KTtlbHNlIGZvcihnPTA7cD5nOysrZyl7dmFyIF89K3gocz1uW2ddLGcpLGI9%0AK00ocyxnKTt2Pl8mJih2PV8pLGQ+YiYmKGQ9YiksXz5tJiYobT1fKSxiPnkmJih5%0APWIpLGYucHVzaChfKSxoLnB1c2goYil9dmFyIHc9bS12LFM9eS1kO3c+Uz95PWQr%0AdzptPXYrUzt2YXIgaz1hdSgpO2lmKGsuYWRkPWZ1bmN0aW9uKG4pe2koayxuLCt4%0AKG4sKytnKSwrTShuLGcpLHYsZCxtLHkpfSxrLnZpc2l0PWZ1bmN0aW9uKG4pe2N1%0AKG4sayx2LGQsbSx5KX0sZz0tMSxudWxsPT10KXtmb3IoOysrZzxwOylpKGssbltn%0AXSxmW2ddLGhbZ10sdixkLG0seSk7LS1nfWVsc2Ugbi5mb3JFYWNoKGsuYWRkKTty%0AZXR1cm4gZj1oPW49cz1udWxsLGt9dmFyIG8sYT1TcixjPWtyO3JldHVybihvPWFy%0AZ3VtZW50cy5sZW5ndGgpPyhhPWl1LGM9b3UsMz09PW8mJih1PWUscj10LGU9dD0w%0AKSxpKG4pKTooaS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro%0APyhhPW4saSk6YX0saS55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyhjPW4saSk6Y30saS5leHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KG51bGw9PW4/dD1lPXI9dT1udWxsOih0PStuWzBdWzBdLGU9%0AK25bMF1bMV0scj0rblsxXVswXSx1PStuWzFdWzFdKSxpKTpudWxsPT10P251bGw6%0AW1t0LGVdLFtyLHVdXX0saS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVu%0AdHMubGVuZ3RoPyhudWxsPT1uP3Q9ZT1yPXU9bnVsbDoodD1lPTAscj0rblswXSx1%0APStuWzFdKSxpKTpudWxsPT10P251bGw6W3ItdCx1LWVdfSxpKX0sVm8uaW50ZXJw%0Ab2xhdGVSZ2I9bHUsVm8uaW50ZXJwb2xhdGVPYmplY3Q9c3UsVm8uaW50ZXJwb2xh%0AdGVOdW1iZXI9ZnUsVm8uaW50ZXJwb2xhdGVTdHJpbmc9aHU7dmFyIEtjPS9bLStd%0APyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxRYz1uZXcg%0AUmVnRXhwKEtjLnNvdXJjZSwiZyIpO1ZvLmludGVycG9sYXRlPWd1LFZvLmludGVy%0AcG9sYXRvcnM9W2Z1bmN0aW9uKG4sdCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuKCJz%0AdHJpbmciPT09ZT9aYS5oYXModCl8fC9eKCN8cmdiXCh8aHNsXCgpLy50ZXN0KHQp%0AP2x1Omh1OnQgaW5zdGFuY2VvZiBldD9sdTpBcnJheS5pc0FycmF5KHQpP3B1OiJv%0AYmplY3QiPT09ZSYmaXNOYU4odCk/c3U6ZnUpKG4sdCl9XSxWby5pbnRlcnBvbGF0%0AZUFycmF5PXB1O3ZhciBubD1mdW5jdGlvbigpe3JldHVybiB3dH0sdGw9Vm8ubWFw%0AKHtsaW5lYXI6bmwscG9seTpfdSxxdWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHl1fSxj%0AdWJpYzpmdW5jdGlvbigpe3JldHVybiB4dX0sc2luOmZ1bmN0aW9uKCl7cmV0dXJu%0AIGJ1fSxleHA6ZnVuY3Rpb24oKXtyZXR1cm4gd3V9LGNpcmNsZTpmdW5jdGlvbigp%0Ae3JldHVybiBTdX0sZWxhc3RpYzprdSxiYWNrOkV1LGJvdW5jZTpmdW5jdGlvbigp%0Ae3JldHVybiBBdX19KSxlbD1Wby5tYXAoeyJpbiI6d3Qsb3V0OmR1LCJpbi1vdXQi%0AOm11LCJvdXQtaW4iOmZ1bmN0aW9uKG4pe3JldHVybiBtdShkdShuKSl9fSk7Vm8u%0AZWFzZT1mdW5jdGlvbihuKXt2YXIgdD1uLmluZGV4T2YoIi0iKSxlPXQ+PTA/bi5z%0AbGljZSgwLHQpOm4scj10Pj0wP24uc2xpY2UodCsxKToiaW4iO3JldHVybiBlPXRs%0ALmdldChlKXx8bmwscj1lbC5nZXQocil8fHd0LHZ1KHIoZS5hcHBseShudWxsLFhv%0ALmNhbGwoYXJndW1lbnRzLDEpKSkpfSxWby5pbnRlcnBvbGF0ZUhjbD1DdSxWby5p%0AbnRlcnBvbGF0ZUhzbD1OdSxWby5pbnRlcnBvbGF0ZUxhYj16dSxWby5pbnRlcnBv%0AbGF0ZVJvdW5kPUx1LFZvLnRyYW5zZm9ybT1mdW5jdGlvbihuKXt2YXIgdD1Cby5j%0AcmVhdGVFbGVtZW50TlMoVm8ubnMucHJlZml4LnN2ZywiZyIpO3JldHVybihWby50%0AcmFuc2Zvcm09ZnVuY3Rpb24obil7aWYobnVsbCE9bil7dC5zZXRBdHRyaWJ1dGUo%0AInRyYW5zZm9ybSIsbik7dmFyIGU9dC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xp%0AZGF0ZSgpfXJldHVybiBuZXcgVHUoZT9lLm1hdHJpeDpybCl9KShuKX0sVHUucHJv%0AdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3Ro%0AaXMudHJhbnNsYXRlKyIpcm90YXRlKCIrdGhpcy5yb3RhdGUrIilza2V3WCgiK3Ro%0AaXMuc2tldysiKXNjYWxlKCIrdGhpcy5zY2FsZSsiKSJ9O3ZhciBybD17YToxLGI6%0AMCxjOjAsZDoxLGU6MCxmOjB9O1ZvLmludGVycG9sYXRlVHJhbnNmb3JtPVB1LFZv%0ALmxheW91dD17fSxWby5sYXlvdXQuYnVuZGxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1%0AbmN0aW9uKG4pe2Zvcih2YXIgdD1bXSxlPS0xLHI9bi5sZW5ndGg7KytlPHI7KXQu%0AcHVzaChIdShuW2VdKSk7cmV0dXJuIHR9fSxWby5sYXlvdXQuY2hvcmQ9ZnVuY3Rp%0Ab24oKXtmdW5jdGlvbiBuKCl7dmFyIG4sbCxmLGgsZyxwPXt9LHY9W10sZD1Wby5y%0AYW5nZShpKSxtPVtdO2ZvcihlPVtdLHI9W10sbj0wLGg9LTE7KytoPGk7KXtmb3Io%0AbD0wLGc9LTE7KytnPGk7KWwrPXVbaF1bZ107di5wdXNoKGwpLG0ucHVzaChWby5y%0AYW5nZShpKSksbis9bH1mb3IobyYmZC5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0dXJu%0AIG8odltuXSx2W3RdKX0pLGEmJm0uZm9yRWFjaChmdW5jdGlvbihuLHQpe24uc29y%0AdChmdW5jdGlvbihuLGUpe3JldHVybiBhKHVbdF1bbl0sdVt0XVtlXSl9KX0pLG49%0AKFNhLXMqaSkvbixsPTAsaD0tMTsrK2g8aTspe2ZvcihmPWwsZz0tMTsrK2c8aTsp%0Ae3ZhciB5PWRbaF0seD1tW3ldW2ddLE09dVt5XVt4XSxfPWwsYj1sKz1NKm47cFt5%0AKyItIit4XT17aW5kZXg6eSxzdWJpbmRleDp4LHN0YXJ0QW5nbGU6XyxlbmRBbmds%0AZTpiLHZhbHVlOk19fXJbeV09e2luZGV4Onksc3RhcnRBbmdsZTpmLGVuZEFuZ2xl%0AOmwsdmFsdWU6KGwtZikvbn0sbCs9c31mb3IoaD0tMTsrK2g8aTspZm9yKGc9aC0x%0AOysrZzxpOyl7dmFyIHc9cFtoKyItIitnXSxTPXBbZysiLSIraF07KHcudmFsdWV8%0AfFMudmFsdWUpJiZlLnB1c2gody52YWx1ZTxTLnZhbHVlP3tzb3VyY2U6Uyx0YXJn%0AZXQ6d306e3NvdXJjZTp3LHRhcmdldDpTfSl9YyYmdCgpfWZ1bmN0aW9uIHQoKXtl%0ALnNvcnQoZnVuY3Rpb24obix0KXtyZXR1cm4gYygobi5zb3VyY2UudmFsdWUrbi50%0AYXJnZXQudmFsdWUpLzIsKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlKS8y%0AKX0pfXZhciBlLHIsdSxpLG8sYSxjLGw9e30scz0wO3JldHVybiBsLm1hdHJpeD1m%0AdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0odT1uKSYmdS5s%0AZW5ndGgsZT1yPW51bGwsbCk6dX0sbC5wYWRkaW5nPWZ1bmN0aW9uKG4pe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhzPW4sZT1yPW51bGwsbCk6c30sbC5zb3J0R3Jv%0AdXBzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW4sZT1y%0APW51bGwsbCk6b30sbC5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKG4pe3JldHVybiBh%0Acmd1bWVudHMubGVuZ3RoPyhhPW4sZT1udWxsLGwpOmF9LGwuc29ydENob3Jkcz1m%0AdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uLGUmJnQoKSxs%0AKTpjfSxsLmNob3Jkcz1mdW5jdGlvbigpe3JldHVybiBlfHxuKCksZX0sbC5ncm91%0AcHM9ZnVuY3Rpb24oKXtyZXR1cm4gcnx8bigpLHJ9LGx9LFZvLmxheW91dC5mb3Jj%0AZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxy%0ALHUpe2lmKHQucG9pbnQhPT1uKXt2YXIgaT10LmN4LW4ueCxvPXQuY3ktbi55LGE9%0AdS1lLGM9aSppK28qbztpZihjPmEqYS9kKXtpZihwPmMpe3ZhciBsPXQuY2hhcmdl%0AL2M7bi5weC09aSpsLG4ucHktPW8qbH1yZXR1cm4hMH1pZih0LnBvaW50JiZjJiZw%0APmMpe3ZhciBsPXQucG9pbnRDaGFyZ2UvYztuLnB4LT1pKmwsbi5weS09bypsfX1y%0AZXR1cm4hdC5jaGFyZ2V9fWZ1bmN0aW9uIHQobil7bi5weD1Wby5ldmVudC54LG4u%0AcHk9Vm8uZXZlbnQueSxhLnJlc3VtZSgpfXZhciBlLHIsdSxpLG8sYT17fSxjPVZv%0ALmRpc3BhdGNoKCJzdGFydCIsInRpY2siLCJlbmQiKSxsPVsxLDFdLHM9LjksZj11%0AbCxoPWlsLGc9LTMwLHA9b2wsdj0uMSxkPS42NCxtPVtdLHk9W107cmV0dXJuIGEu%0AdGljaz1mdW5jdGlvbigpe2lmKChyKj0uOTkpPC4wMDUpcmV0dXJuIGMuZW5kKHt0%0AeXBlOiJlbmQiLGFscGhhOnI9MH0pLCEwO3ZhciB0LGUsYSxmLGgscCxkLHgsTSxf%0APW0ubGVuZ3RoLGI9eS5sZW5ndGg7Zm9yKGU9MDtiPmU7KytlKWE9eVtlXSxmPWEu%0Ac291cmNlLGg9YS50YXJnZXQseD1oLngtZi54LE09aC55LWYueSwocD14KngrTSpN%0AKSYmKHA9cippW2VdKigocD1NYXRoLnNxcnQocCkpLXVbZV0pL3AseCo9cCxNKj1w%0ALGgueC09eCooZD1mLndlaWdodC8oaC53ZWlnaHQrZi53ZWlnaHQpKSxoLnktPU0q%0AZCxmLngrPXgqKGQ9MS1kKSxmLnkrPU0qZCk7aWYoKGQ9cip2KSYmKHg9bFswXS8y%0ALE09bFsxXS8yLGU9LTEsZCkpZm9yKDsrK2U8XzspYT1tW2VdLGEueCs9KHgtYS54%0AKSpkLGEueSs9KE0tYS55KSpkO2lmKGcpZm9yKFh1KHQ9Vm8uZ2VvbS5xdWFkdHJl%0AZShtKSxyLG8pLGU9LTE7KytlPF87KShhPW1bZV0pLmZpeGVkfHx0LnZpc2l0KG4o%0AYSkpO2ZvcihlPS0xOysrZTxfOylhPW1bZV0sYS5maXhlZD8oYS54PWEucHgsYS55%0APWEucHkpOihhLngtPShhLnB4LShhLnB4PWEueCkpKnMsYS55LT0oYS5weS0oYS5w%0AeT1hLnkpKSpzKTtjLnRpY2soe3R5cGU6InRpY2siLGFscGhhOnJ9KX0sYS5ub2Rl%0Acz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1uLGEpOm19%0ALGEubGlua3M9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9%0AbixhKTp5fSxhLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KGw9bixhKTpsfSxhLmxpbmtEaXN0YW5jZT1mdW5jdGlvbihuKXtyZXR1cm4g%0AYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOituLGEp%0AOmZ9LGEuZGlzdGFuY2U9YS5saW5rRGlzdGFuY2UsYS5saW5rU3RyZW5ndGg9ZnVu%0AY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09%0AdHlwZW9mIG4/bjorbixhKTpofSxhLmZyaWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhzPStuLGEpOnN9LGEuY2hhcmdlPWZ1bmN0aW9u%0AKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSJmdW5jdGlvbiI9PXR5cGVv%0AZiBuP246K24sYSk6Z30sYS5jaGFyZ2VEaXN0YW5jZT1mdW5jdGlvbihuKXtyZXR1%0Acm4gYXJndW1lbnRzLmxlbmd0aD8ocD1uKm4sYSk6TWF0aC5zcXJ0KHApfSxhLmdy%0AYXZpdHk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9K24s%0AYSk6dn0sYS50aGV0YT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0%0AaD8oZD1uKm4sYSk6TWF0aC5zcXJ0KGQpfSxhLmFscGhhPWZ1bmN0aW9uKG4pe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStuLHI/cj1uPjA/bjowOm4+MCYmKGMu%0Ac3RhcnQoe3R5cGU6InN0YXJ0IixhbHBoYTpyPW59KSxWby50aW1lcihhLnRpY2sp%0AKSxhKTpyfSxhLnN0YXJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHIpe2lmKCFl%0AKXtmb3IoZT1uZXcgQXJyYXkoYyksYT0wO2M+YTsrK2EpZVthXT1bXTtmb3IoYT0w%0AO2w+YTsrK2Epe3ZhciB1PXlbYV07ZVt1LnNvdXJjZS5pbmRleF0ucHVzaCh1LnRh%0AcmdldCksZVt1LnRhcmdldC5pbmRleF0ucHVzaCh1LnNvdXJjZSl9fWZvcih2YXIg%0AaSxvPWVbdF0sYT0tMSxsPW8ubGVuZ3RoOysrYTxsOylpZighaXNOYU4oaT1vW2Fd%0AW25dKSlyZXR1cm4gaTtyZXR1cm4gTWF0aC5yYW5kb20oKSpyfXZhciB0LGUscixj%0APW0ubGVuZ3RoLHM9eS5sZW5ndGgscD1sWzBdLHY9bFsxXTtmb3IodD0wO2M+dDsr%0AK3QpKHI9bVt0XSkuaW5kZXg9dCxyLndlaWdodD0wO2Zvcih0PTA7cz50OysrdCly%0APXlbdF0sIm51bWJlciI9PXR5cGVvZiByLnNvdXJjZSYmKHIuc291cmNlPW1bci5z%0Ab3VyY2VdKSwibnVtYmVyIj09dHlwZW9mIHIudGFyZ2V0JiYoci50YXJnZXQ9bVty%0ALnRhcmdldF0pLCsrci5zb3VyY2Uud2VpZ2h0LCsrci50YXJnZXQud2VpZ2h0O2Zv%0Acih0PTA7Yz50OysrdClyPW1bdF0saXNOYU4oci54KSYmKHIueD1uKCJ4IixwKSks%0AaXNOYU4oci55KSYmKHIueT1uKCJ5Iix2KSksaXNOYU4oci5weCkmJihyLnB4PXIu%0AeCksaXNOYU4oci5weSkmJihyLnB5PXIueSk7aWYodT1bXSwiZnVuY3Rpb24iPT10%0AeXBlb2YgZilmb3IodD0wO3M+dDsrK3QpdVt0XT0rZi5jYWxsKHRoaXMseVt0XSx0%0AKTtlbHNlIGZvcih0PTA7cz50OysrdCl1W3RdPWY7aWYoaT1bXSwiZnVuY3Rpb24i%0APT10eXBlb2YgaClmb3IodD0wO3M+dDsrK3QpaVt0XT0raC5jYWxsKHRoaXMseVt0%0AXSx0KTtlbHNlIGZvcih0PTA7cz50OysrdClpW3RdPWg7aWYobz1bXSwiZnVuY3Rp%0Ab24iPT10eXBlb2YgZylmb3IodD0wO2M+dDsrK3Qpb1t0XT0rZy5jYWxsKHRoaXMs%0AbVt0XSx0KTtlbHNlIGZvcih0PTA7Yz50OysrdClvW3RdPWc7cmV0dXJuIGEucmVz%0AdW1lKCl9LGEucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYWxwaGEoLjEpfSxh%0ALnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hbHBoYSgwKX0sYS5kcmFnPWZ1bmN0%0AaW9uKCl7cmV0dXJuIGV8fChlPVZvLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4od3Qp%0ALm9uKCJkcmFnc3RhcnQuZm9yY2UiLFl1KS5vbigiZHJhZy5mb3JjZSIsdCkub24o%0AImRyYWdlbmQuZm9yY2UiLEl1KSksYXJndW1lbnRzLmxlbmd0aD8odGhpcy5vbigi%0AbW91c2VvdmVyLmZvcmNlIixadSkub24oIm1vdXNlb3V0LmZvcmNlIixWdSkuY2Fs%0AbChlKSx2b2lkIDApOmV9LFZvLnJlYmluZChhLGMsIm9uIil9O3ZhciB1bD0yMCxp%0AbD0xLG9sPTEvMDtWby5sYXlvdXQuaGllcmFyY2h5PWZ1bmN0aW9uKCl7ZnVuY3Rp%0Ab24gbih1KXt2YXIgaSxvPVt1XSxhPVtdO2Zvcih1LmRlcHRoPTA7bnVsbCE9KGk9%0Aby5wb3AoKSk7KWlmKGEucHVzaChpKSwobD1lLmNhbGwobixpLGkuZGVwdGgpKSYm%0AKGM9bC5sZW5ndGgpKXtmb3IodmFyIGMsbCxzOy0tYz49MDspby5wdXNoKHM9bFtj%0AXSkscy5wYXJlbnQ9aSxzLmRlcHRoPWkuZGVwdGgrMTtyJiYoaS52YWx1ZT0wKSxp%0ALmNoaWxkcmVuPWx9ZWxzZSByJiYoaS52YWx1ZT0rci5jYWxsKG4saSxpLmRlcHRo%0AKXx8MCksZGVsZXRlIGkuY2hpbGRyZW47cmV0dXJuIFd1KHUsZnVuY3Rpb24obil7%0AdmFyIGUsdTt0JiYoZT1uLmNoaWxkcmVuKSYmZS5zb3J0KHQpLHImJih1PW4ucGFy%0AZW50KSYmKHUudmFsdWUrPW4udmFsdWUpfSksYX12YXIgdD1LdSxlPUp1LHI9R3U7%0AcmV0dXJuIG4uc29ydD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0%0AaD8odD1lLG4pOnR9LG4uY2hpbGRyZW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5yZXZhbHVlPWZ1bmN0aW9u%0AKHQpe3JldHVybiByJiYoQnUodCxmdW5jdGlvbihuKXtuLmNoaWxkcmVuJiYobi52%0AYWx1ZT0wKX0pLFd1KHQsZnVuY3Rpb24odCl7dmFyIGU7dC5jaGlsZHJlbnx8KHQu%0AdmFsdWU9K3IuY2FsbChuLHQsdC5kZXB0aCl8fDApLChlPXQucGFyZW50KSYmKGUu%0AdmFsdWUrPXQudmFsdWUpfSkpLHR9LG59LFZvLmxheW91dC5wYXJ0aXRpb249ZnVu%0AY3Rpb24oKXtmdW5jdGlvbiBuKHQsZSxyLHUpe3ZhciBpPXQuY2hpbGRyZW47aWYo%0AdC54PWUsdC55PXQuZGVwdGgqdSx0LmR4PXIsdC5keT11LGkmJihvPWkubGVuZ3Ro%0AKSl7dmFyIG8sYSxjLGw9LTE7Zm9yKHI9dC52YWx1ZT9yL3QudmFsdWU6MDsrK2w8%0AbzspbihhPWlbbF0sZSxjPWEudmFsdWUqcix1KSxlKz1jfX1mdW5jdGlvbiB0KG4p%0Ae3ZhciBlPW4uY2hpbGRyZW4scj0wO2lmKGUmJih1PWUubGVuZ3RoKSlmb3IodmFy%0AIHUsaT0tMTsrK2k8dTspcj1NYXRoLm1heChyLHQoZVtpXSkpO3JldHVybiAxK3J9%0AZnVuY3Rpb24gZShlLGkpe3ZhciBvPXIuY2FsbCh0aGlzLGUsaSk7cmV0dXJuIG4o%0Ab1swXSwwLHVbMF0sdVsxXS90KG9bMF0pKSxvfXZhciByPVZvLmxheW91dC5oaWVy%0AYXJjaHkoKSx1PVsxLDFdO3JldHVybiBlLnNpemU9ZnVuY3Rpb24obil7cmV0dXJu%0AIGFyZ3VtZW50cy5sZW5ndGg/KHU9bixlKTp1fSwkdShlLHIpfSxWby5sYXlvdXQu%0AcGllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihpKXt2YXIgbz1pLm1hcChmdW5jdGlv%0AbihlLHIpe3JldHVybit0LmNhbGwobixlLHIpfSksYT0rKCJmdW5jdGlvbiI9PXR5%0AcGVvZiByP3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnIpLGM9KCgiZnVuY3Rpb24i%0APT10eXBlb2YgdT91LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp1KS1hKS9Wby5zdW0o%0AbyksbD1Wby5yYW5nZShpLmxlbmd0aCk7bnVsbCE9ZSYmbC5zb3J0KGU9PT1hbD9m%0AdW5jdGlvbihuLHQpe3JldHVybiBvW3RdLW9bbl19OmZ1bmN0aW9uKG4sdCl7cmV0%0AdXJuIGUoaVtuXSxpW3RdKX0pO3ZhciBzPVtdO3JldHVybiBsLmZvckVhY2goZnVu%0AY3Rpb24obil7dmFyIHQ7c1tuXT17ZGF0YTppW25dLHZhbHVlOnQ9b1tuXSxzdGFy%0AdEFuZ2xlOmEsZW5kQW5nbGU6YSs9dCpjfX0pLHN9dmFyIHQ9TnVtYmVyLGU9YWws%0Acj0wLHU9U2E7cmV0dXJuIG4udmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJu%0AIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnN0YXJ0QW5nbGU9ZnVuY3Rp%0Ab24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxuLmVuZEFu%0AZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbik6%0AdX0sbn07dmFyIGFsPXt9O1ZvLmxheW91dC5zdGFjaz1mdW5jdGlvbigpe2Z1bmN0%0AaW9uIG4oYSxjKXt2YXIgbD1hLm1hcChmdW5jdGlvbihlLHIpe3JldHVybiB0LmNh%0AbGwobixlLHIpfSkscz1sLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVu%0AY3Rpb24odCxlKXtyZXR1cm5baS5jYWxsKG4sdCxlKSxvLmNhbGwobix0LGUpXX0p%0AfSksZj1lLmNhbGwobixzLGMpO2w9Vm8ucGVybXV0ZShsLGYpLHM9Vm8ucGVybXV0%0AZShzLGYpO3ZhciBoLGcscCx2PXIuY2FsbChuLHMsYyksZD1sLmxlbmd0aCxtPWxb%0AMF0ubGVuZ3RoO2ZvcihnPTA7bT5nOysrZylmb3IodS5jYWxsKG4sbFswXVtnXSxw%0APXZbZ10sc1swXVtnXVsxXSksaD0xO2Q+aDsrK2gpdS5jYWxsKG4sbFtoXVtnXSxw%0AKz1zW2gtMV1bZ11bMV0sc1toXVtnXVsxXSk7cmV0dXJuIGF9dmFyIHQ9d3QsZT1y%0AaSxyPXVpLHU9ZWksaT1uaSxvPXRpO3JldHVybiBuLnZhbHVlcz1mdW5jdGlvbihl%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4ub3JkZXI9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09%0AdHlwZW9mIHQ/dDpjbC5nZXQodCl8fHJpLG4pOmV9LG4ub2Zmc2V0PWZ1bmN0aW9u%0AKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVv%0AZiB0P3Q6bGwuZ2V0KHQpfHx1aSxuKTpyfSxuLng9ZnVuY3Rpb24odCl7cmV0dXJu%0AIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxuKTppfSxuLnk9ZnVuY3Rpb24odCl7cmV0%0AdXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxuKTpvfSxuLm91dD1mdW5jdGlvbih0%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LG4pOnV9LG59O3ZhciBjbD1W%0Aby5tYXAoeyJpbnNpZGUtb3V0IjpmdW5jdGlvbihuKXt2YXIgdCxlLHI9bi5sZW5n%0AdGgsdT1uLm1hcChpaSksaT1uLm1hcChvaSksbz1Wby5yYW5nZShyKS5zb3J0KGZ1%0AbmN0aW9uKG4sdCl7cmV0dXJuIHVbbl0tdVt0XX0pLGE9MCxjPTAsbD1bXSxzPVtd%0AO2Zvcih0PTA7cj50OysrdCllPW9bdF0sYz5hPyhhKz1pW2VdLGwucHVzaChlKSk6%0AKGMrPWlbZV0scy5wdXNoKGUpKTtyZXR1cm4gcy5yZXZlcnNlKCkuY29uY2F0KGwp%0AfSxyZXZlcnNlOmZ1bmN0aW9uKG4pe3JldHVybiBWby5yYW5nZShuLmxlbmd0aCku%0AcmV2ZXJzZSgpfSwiZGVmYXVsdCI6cml9KSxsbD1Wby5tYXAoe3NpbGhvdWV0dGU6%0AZnVuY3Rpb24obil7dmFyIHQsZSxyLHU9bi5sZW5ndGgsaT1uWzBdLmxlbmd0aCxv%0APVtdLGE9MCxjPVtdO2ZvcihlPTA7aT5lOysrZSl7Zm9yKHQ9MCxyPTA7dT50O3Qr%0AKylyKz1uW3RdW2VdWzFdO3I+YSYmKGE9ciksby5wdXNoKHIpfWZvcihlPTA7aT5l%0AOysrZSljW2VdPShhLW9bZV0pLzI7cmV0dXJuIGN9LHdpZ2dsZTpmdW5jdGlvbihu%0AKXt2YXIgdCxlLHIsdSxpLG8sYSxjLGwscz1uLmxlbmd0aCxmPW5bMF0saD1mLmxl%0Abmd0aCxnPVtdO2ZvcihnWzBdPWM9bD0wLGU9MTtoPmU7KytlKXtmb3IodD0wLHU9%0AMDtzPnQ7Kyt0KXUrPW5bdF1bZV1bMV07Zm9yKHQ9MCxpPTAsYT1mW2VdWzBdLWZb%0AZS0xXVswXTtzPnQ7Kyt0KXtmb3Iocj0wLG89KG5bdF1bZV1bMV0tblt0XVtlLTFd%0AWzFdKS8oMiphKTt0PnI7KytyKW8rPShuW3JdW2VdWzFdLW5bcl1bZS0xXVsxXSkv%0AYTtpKz1vKm5bdF1bZV1bMV19Z1tlXT1jLT11P2kvdSphOjAsbD5jJiYobD1jKX1m%0Ab3IoZT0wO2g+ZTsrK2UpZ1tlXS09bDtyZXR1cm4gZ30sZXhwYW5kOmZ1bmN0aW9u%0AKG4pe3ZhciB0LGUscix1PW4ubGVuZ3RoLGk9blswXS5sZW5ndGgsbz0xL3UsYT1b%0AXTtmb3IoZT0wO2k+ZTsrK2Upe2Zvcih0PTAscj0wO3U+dDt0Kyspcis9blt0XVtl%0AXVsxXTtpZihyKWZvcih0PTA7dT50O3QrKyluW3RdW2VdWzFdLz1yO2Vsc2UgZm9y%0AKHQ9MDt1PnQ7dCsrKW5bdF1bZV1bMV09b31mb3IoZT0wO2k+ZTsrK2UpYVtlXT0w%0AO3JldHVybiBhfSx6ZXJvOnVpfSk7Vm8ubGF5b3V0Lmhpc3RvZ3JhbT1mdW5jdGlv%0Abigpe2Z1bmN0aW9uIG4obixpKXtmb3IodmFyIG8sYSxjPVtdLGw9bi5tYXAoZSx0%0AaGlzKSxzPXIuY2FsbCh0aGlzLGwsaSksZj11LmNhbGwodGhpcyxzLGwsaSksaT0t%0AMSxoPWwubGVuZ3RoLGc9Zi5sZW5ndGgtMSxwPXQ/MToxL2g7KytpPGc7KW89Y1tp%0AXT1bXSxvLmR4PWZbaSsxXS0oby54PWZbaV0pLG8ueT0wO2lmKGc+MClmb3IoaT0t%0AMTsrK2k8aDspYT1sW2ldLGE+PXNbMF0mJmE8PXNbMV0mJihvPWNbVm8uYmlzZWN0%0AKGYsYSwxLGcpLTFdLG8ueSs9cCxvLnB1c2gobltpXSkpO3JldHVybiBjfXZhciB0%0APSEwLGU9TnVtYmVyLHI9c2ksdT1jaTtyZXR1cm4gbi52YWx1ZT1mdW5jdGlvbih0%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4ucmFuZ2U9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9YnQodCksbik6cn0s%0Abi5iaW5zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJu%0AdW1iZXIiPT10eXBlb2YgdD9mdW5jdGlvbihuKXtyZXR1cm4gbGkobix0KX06YnQo%0AdCksbik6dX0sbi5mcmVxdWVuY3k9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50%0Acy5sZW5ndGg/KHQ9ISFlLG4pOnR9LG59LFZvLmxheW91dC5wYWNrPWZ1bmN0aW9u%0AKCl7ZnVuY3Rpb24gbihuLGkpe3ZhciBvPWUuY2FsbCh0aGlzLG4saSksYT1vWzBd%0ALGM9dVswXSxsPXVbMV0scz1udWxsPT10P01hdGguc3FydDoiZnVuY3Rpb24iPT10%0AeXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9O2lmKGEueD1hLnk9MCxXdShh%0ALGZ1bmN0aW9uKG4pe24ucj0rcyhuLnZhbHVlKX0pLFd1KGEsdmkpLHIpe3ZhciBm%0APXIqKHQ/MTpNYXRoLm1heCgyKmEuci9jLDIqYS5yL2wpKS8yO1d1KGEsZnVuY3Rp%0Ab24obil7bi5yKz1mfSksV3UoYSx2aSksV3UoYSxmdW5jdGlvbihuKXtuLnItPWZ9%0AKX1yZXR1cm4geWkoYSxjLzIsbC8yLHQ/MToxL01hdGgubWF4KDIqYS5yL2MsMiph%0ALnIvbCkpLG99dmFyIHQsZT1Wby5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChmaSks%0Acj0wLHU9WzEsMV07cmV0dXJuIG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aD8odT10LG4pOnV9LG4ucmFkaXVzPWZ1bmN0aW9uKGUpe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PWV8fCJmdW5jdGlvbiI9PXR5%0AcGVvZiBlP2U6K2Usbik6dH0sbi5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBh%0Acmd1bWVudHMubGVuZ3RoPyhyPSt0LG4pOnJ9LCR1KG4sZSl9LFZvLmxheW91dC50%0AcmVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHUpe3ZhciBzPW8uY2FsbCh0aGlz%0ALG4sdSksZj1zWzBdLGg9dChmKTtpZihXdShoLGUpLGgucGFyZW50Lm09LWgueixC%0AdShoLHIpLGwpQnUoZixpKTtlbHNle3ZhciBnPWYscD1mLHY9ZjtCdShmLGZ1bmN0%0AaW9uKG4pe24ueDxnLngmJihnPW4pLG4ueD5wLngmJihwPW4pLG4uZGVwdGg+di5k%0AZXB0aCYmKHY9bil9KTt2YXIgZD1hKGcscCkvMi1nLngsbT1jWzBdLyhwLngrYShw%0ALGcpLzIrZCkseT1jWzFdLyh2LmRlcHRofHwxKTtCdShmLGZ1bmN0aW9uKG4pe24u%0AeD0obi54K2QpKm0sbi55PW4uZGVwdGgqeX0pfXJldHVybiBzfWZ1bmN0aW9uIHQo%0Abil7Zm9yKHZhciB0LGU9e0E6bnVsbCxjaGlsZHJlbjpbbl19LHI9W2VdO251bGwh%0APSh0PXIucG9wKCkpOylmb3IodmFyIHUsaT10LmNoaWxkcmVuLG89MCxhPWkubGVu%0AZ3RoO2E+bzsrK28pci5wdXNoKChpW29dPXU9e186aVtvXSxwYXJlbnQ6dCxjaGls%0AZHJlbjoodT1pW29dLmNoaWxkcmVuKSYmdS5zbGljZSgpfHxbXSxBOm51bGwsYTpu%0AdWxsLHo6MCxtOjAsYzowLHM6MCx0Om51bGwsaTpvfSkuYT11KTtyZXR1cm4gZS5j%0AaGlsZHJlblswXX1mdW5jdGlvbiBlKG4pe3ZhciB0PW4uY2hpbGRyZW4sZT1uLnBh%0AcmVudC5jaGlsZHJlbixyPW4uaT9lW24uaS0xXTpudWxsO2lmKHQubGVuZ3RoKXtT%0AaShuKTt2YXIgaT0odFswXS56K3RbdC5sZW5ndGgtMV0ueikvMjtyPyhuLno9ci56%0AK2Eobi5fLHIuXyksbi5tPW4uei1pKTpuLno9aX1lbHNlIHImJihuLno9ci56K2Eo%0Abi5fLHIuXykpO24ucGFyZW50LkE9dShuLHIsbi5wYXJlbnQuQXx8ZVswXSl9ZnVu%0AY3Rpb24gcihuKXtuLl8ueD1uLnorbi5wYXJlbnQubSxuLm0rPW4ucGFyZW50Lm19%0AZnVuY3Rpb24gdShuLHQsZSl7aWYodCl7Zm9yKHZhciByLHU9bixpPW4sbz10LGM9%0AdS5wYXJlbnQuY2hpbGRyZW5bMF0sbD11Lm0scz1pLm0sZj1vLm0saD1jLm07bz1i%0AaShvKSx1PV9pKHUpLG8mJnU7KWM9X2koYyksaT1iaShpKSxpLmE9bixyPW8ueitm%0ALXUuei1sK2Eoby5fLHUuXykscj4wJiYod2koa2kobyxuLGUpLG4sciksbCs9cixz%0AKz1yKSxmKz1vLm0sbCs9dS5tLGgrPWMubSxzKz1pLm07byYmIWJpKGkpJiYoaS50%0APW8saS5tKz1mLXMpLHUmJiFfaShjKSYmKGMudD11LGMubSs9bC1oLGU9bil9cmV0%0AdXJuIGV9ZnVuY3Rpb24gaShuKXtuLngqPWNbMF0sbi55PW4uZGVwdGgqY1sxXX12%0AYXIgbz1Wby5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxs%0AKSxhPU1pLGM9WzEsMV0sbD1udWxsO3JldHVybiBuLnNlcGFyYXRpb249ZnVuY3Rp%0Ab24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxuKTphfSxuLnNpemU9%0AZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bnVsbD09KGM9%0AdCk/aTpudWxsLG4pOmw/bnVsbDpjfSxuLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW51bGw9PShjPXQpP251bGw6aSxuKTps%0AP2M6bnVsbH0sJHUobixvKX0sVm8ubGF5b3V0LmNsdXN0ZXI9ZnVuY3Rpb24oKXtm%0AdW5jdGlvbiBuKG4saSl7dmFyIG8sYT10LmNhbGwodGhpcyxuLGkpLGM9YVswXSxs%0APTA7V3UoYyxmdW5jdGlvbihuKXt2YXIgdD1uLmNoaWxkcmVuO3QmJnQubGVuZ3Ro%0APyhuLng9QWkodCksbi55PUVpKHQpKToobi54PW8/bCs9ZShuLG8pOjAsbi55PTAs%0Abz1uKX0pO3ZhciBzPUNpKGMpLGY9TmkoYyksaD1zLngtZShzLGYpLzIsZz1mLngr%0AZShmLHMpLzI7cmV0dXJuIFd1KGMsdT9mdW5jdGlvbihuKXtuLng9KG4ueC1jLngp%0AKnJbMF0sbi55PShjLnktbi55KSpyWzFdfTpmdW5jdGlvbihuKXtuLng9KG4ueC1o%0AKS8oZy1oKSpyWzBdLG4ueT0oMS0oYy55P24ueS9jLnk6MSkpKnJbMV19KSxhfXZh%0AciB0PVZvLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwp%0ALGU9TWkscj1bMSwxXSx1PSExO3JldHVybiBuLnNlcGFyYXRpb249ZnVuY3Rpb24o%0AdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnNpemU9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bnVsbD09KHI9dCks%0Abik6dT9udWxsOnJ9LG4ubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KHU9bnVsbCE9KHI9dCksbik6dT9yOm51bGx9LCR1KG4sdCl9%0ALFZvLmxheW91dC50cmVlbWFwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHQpe2Zv%0Acih2YXIgZSxyLHU9LTEsaT1uLmxlbmd0aDsrK3U8aTspcj0oZT1uW3VdKS52YWx1%0AZSooMD50PzA6dCksZS5hcmVhPWlzTmFOKHIpfHwwPj1yPzA6cn1mdW5jdGlvbiB0%0AKGUpe3ZhciBpPWUuY2hpbGRyZW47aWYoaSYmaS5sZW5ndGgpe3ZhciBvLGEsYyxs%0APWYoZSkscz1bXSxoPWkuc2xpY2UoKSxwPTEvMCx2PSJzbGljZSI9PT1nP2wuZHg6%0AImRpY2UiPT09Zz9sLmR5OiJzbGljZS1kaWNlIj09PWc/MSZlLmRlcHRoP2wuZHk6%0AbC5keDpNYXRoLm1pbihsLmR4LGwuZHkpO2ZvcihuKGgsbC5keCpsLmR5L2UudmFs%0AdWUpLHMuYXJlYT0wOyhjPWgubGVuZ3RoKT4wOylzLnB1c2gobz1oW2MtMV0pLHMu%0AYXJlYSs9by5hcmVhLCJzcXVhcmlmeSIhPT1nfHwoYT1yKHMsdikpPD1wPyhoLnBv%0AcCgpLHA9YSk6KHMuYXJlYS09cy5wb3AoKS5hcmVhLHUocyx2LGwsITEpLHY9TWF0%0AaC5taW4obC5keCxsLmR5KSxzLmxlbmd0aD1zLmFyZWE9MCxwPTEvMCk7cy5sZW5n%0AdGgmJih1KHMsdixsLCEwKSxzLmxlbmd0aD1zLmFyZWE9MCksaS5mb3JFYWNoKHQp%0AfX1mdW5jdGlvbiBlKHQpe3ZhciByPXQuY2hpbGRyZW47aWYociYmci5sZW5ndGgp%0Ae3ZhciBpLG89Zih0KSxhPXIuc2xpY2UoKSxjPVtdO2ZvcihuKGEsby5keCpvLmR5%0AL3QudmFsdWUpLGMuYXJlYT0wO2k9YS5wb3AoKTspYy5wdXNoKGkpLGMuYXJlYSs9%0AaS5hcmVhLG51bGwhPWkueiYmKHUoYyxpLno/by5keDpvLmR5LG8sIWEubGVuZ3Ro%0AKSxjLmxlbmd0aD1jLmFyZWE9MCk7ci5mb3JFYWNoKGUpfX1mdW5jdGlvbiByKG4s%0AdCl7Zm9yKHZhciBlLHI9bi5hcmVhLHU9MCxpPTEvMCxvPS0xLGE9bi5sZW5ndGg7%0AKytvPGE7KShlPW5bb10uYXJlYSkmJihpPmUmJihpPWUpLGU+dSYmKHU9ZSkpO3Jl%0AdHVybiByKj1yLHQqPXQscj9NYXRoLm1heCh0KnUqcC9yLHIvKHQqaSpwKSk6MS8w%0AfWZ1bmN0aW9uIHUobix0LGUscil7dmFyIHUsaT0tMSxvPW4ubGVuZ3RoLGE9ZS54%0ALGw9ZS55LHM9dD9jKG4uYXJlYS90KTowO2lmKHQ9PWUuZHgpe2Zvcigocnx8cz5l%0ALmR5KSYmKHM9ZS5keSk7KytpPG87KXU9bltpXSx1Lng9YSx1Lnk9bCx1LmR5PXMs%0AYSs9dS5keD1NYXRoLm1pbihlLngrZS5keC1hLHM/Yyh1LmFyZWEvcyk6MCk7dS56%0APSEwLHUuZHgrPWUueCtlLmR4LWEsZS55Kz1zLGUuZHktPXN9ZWxzZXtmb3IoKHJ8%0AfHM+ZS5keCkmJihzPWUuZHgpOysraTxvOyl1PW5baV0sdS54PWEsdS55PWwsdS5k%0AeD1zLGwrPXUuZHk9TWF0aC5taW4oZS55K2UuZHktbCxzP2ModS5hcmVhL3MpOjAp%0AO3Uuej0hMSx1LmR5Kz1lLnkrZS5keS1sLGUueCs9cyxlLmR4LT1zfX1mdW5jdGlv%0AbiBpKHIpe3ZhciB1PW98fGEociksaT11WzBdO3JldHVybiBpLng9MCxpLnk9MCxp%0ALmR4PWxbMF0saS5keT1sWzFdLG8mJmEucmV2YWx1ZShpKSxuKFtpXSxpLmR4Kmku%0AZHkvaS52YWx1ZSksKG8/ZTp0KShpKSxoJiYobz11KSx1fXZhciBvLGE9Vm8ubGF5%0Ab3V0LmhpZXJhcmNoeSgpLGM9TWF0aC5yb3VuZCxsPVsxLDFdLHM9bnVsbCxmPXpp%0ALGg9ITEsZz0ic3F1YXJpZnkiLHA9LjUqKDErTWF0aC5zcXJ0KDUpKTtyZXR1cm4g%0AaS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4s%0AaSk6bH0saS5wYWRkaW5nPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQodCl7dmFyIGU9%0Abi5jYWxsKGksdCx0LmRlcHRoKTtyZXR1cm4gbnVsbD09ZT96aSh0KTpMaSh0LCJu%0AdW1iZXIiPT10eXBlb2YgZT9bZSxlLGUsZV06ZSl9ZnVuY3Rpb24gZSh0KXtyZXR1%0Acm4gTGkodCxuKX1pZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gczt2YXIgcjty%0AZXR1cm4gZj1udWxsPT0ocz1uKT96aToiZnVuY3Rpb24iPT0ocj10eXBlb2Ygbik/%0AdDoibnVtYmVyIj09PXI/KG49W24sbixuLG5dLGUpOmUsaX0saS5yb3VuZD1mdW5j%0AdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uP01hdGgucm91bmQ6%0ATnVtYmVyLGkpOmMhPU51bWJlcn0saS5zdGlja3k9ZnVuY3Rpb24obil7cmV0dXJu%0AIGFyZ3VtZW50cy5sZW5ndGg/KGg9bixvPW51bGwsaSk6aH0saS5yYXRpbz1mdW5j%0AdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1uLGkpOnB9LGkubW9k%0AZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1uKyIiLGkp%0AOmd9LCR1KGksYSl9LFZvLnJhbmRvbT17bm9ybWFsOmZ1bmN0aW9uKG4sdCl7dmFy%0AIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gMj5lJiYodD0xKSwxPmUmJihuPTAp%0ALGZ1bmN0aW9uKCl7dmFyIGUscix1O2RvIGU9MipNYXRoLnJhbmRvbSgpLTEscj0y%0AKk1hdGgucmFuZG9tKCktMSx1PWUqZStyKnI7d2hpbGUoIXV8fHU+MSk7cmV0dXJu%0AIG4rdCplKk1hdGguc3FydCgtMipNYXRoLmxvZyh1KS91KX19LGxvZ05vcm1hbDpm%0AdW5jdGlvbigpe3ZhciBuPVZvLnJhbmRvbS5ub3JtYWwuYXBwbHkoVm8sYXJndW1l%0AbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19LGJh%0AdGVzOmZ1bmN0aW9uKG4pe3ZhciB0PVZvLnJhbmRvbS5pcndpbkhhbGwobik7cmV0%0AdXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQoKS9ufX0saXJ3aW5IYWxsOmZ1bmN0aW9u%0AKG4pe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9MDtuPmU7ZSsrKXQr%0APU1hdGgucmFuZG9tKCk7cmV0dXJuIHR9fX0sVm8uc2NhbGU9e307dmFyIHNsPXtm%0AbG9vcjp3dCxjZWlsOnd0fTtWby5zY2FsZS5saW5lYXI9ZnVuY3Rpb24oKXtyZXR1%0Acm4gamkoWzAsMV0sWzAsMV0sZ3UsITEpfTt2YXIgZmw9e3M6MSxnOjEscDoxLHI6%0AMSxlOjF9O1ZvLnNjYWxlLmxvZz1mdW5jdGlvbigpe3JldHVybiBYaShWby5zY2Fs%0AZS5saW5lYXIoKS5kb21haW4oWzAsMV0pLDEwLCEwLFsxLDEwXSl9O3ZhciBobD1W%0Aby5mb3JtYXQoIi4wZSIpLGdsPXtmbG9vcjpmdW5jdGlvbihuKXtyZXR1cm4tTWF0%0AaC5jZWlsKC1uKX0sY2VpbDpmdW5jdGlvbihuKXtyZXR1cm4tTWF0aC5mbG9vcigt%0Abil9fTtWby5zY2FsZS5wb3c9ZnVuY3Rpb24oKXtyZXR1cm4gJGkoVm8uc2NhbGUu%0AbGluZWFyKCksMSxbMCwxXSl9LFZvLnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1%0Acm4gVm8uc2NhbGUucG93KCkuZXhwb25lbnQoLjUpfSxWby5zY2FsZS5vcmRpbmFs%0APWZ1bmN0aW9uKCl7cmV0dXJuIFdpKFtdLHt0OiJyYW5nZSIsYTpbW11dfSl9LFZv%0ALnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rpb24oKXtyZXR1cm4gVm8uc2NhbGUub3Jk%0AaW5hbCgpLnJhbmdlKHBsKX0sVm8uc2NhbGUuY2F0ZWdvcnkyMD1mdW5jdGlvbigp%0Ae3JldHVybiBWby5zY2FsZS5vcmRpbmFsKCkucmFuZ2UodmwpfSxWby5zY2FsZS5j%0AYXRlZ29yeTIwYj1mdW5jdGlvbigpe3JldHVybiBWby5zY2FsZS5vcmRpbmFsKCku%0AcmFuZ2UoZGwpfSxWby5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVy%0AbiBWby5zY2FsZS5vcmRpbmFsKCkucmFuZ2UobWwpfTt2YXIgcGw9WzIwNjIyNjAs%0AMTY3NDQyMDYsMjkyNDU4OCwxNDAzNDcyOCw5NzI1ODg1LDkxOTcxMzEsMTQ5MDcz%0AMzAsODM1NTcxMSwxMjM2OTE4NiwxNTU2MTc1XS5tYXAodnQpLHZsPVsyMDYyMjYw%0ALDExNDU0NDQwLDE2NzQ0MjA2LDE2NzU5NjcyLDI5MjQ1ODgsMTAwMTg2OTgsMTQw%0AMzQ3MjgsMTY3NTA3NDIsOTcyNTg4NSwxMjk1NTg2MSw5MTk3MTMxLDEyODg1MTQw%0ALDE0OTA3MzMwLDE2MjM0MTk0LDgzNTU3MTEsMTMwOTI4MDcsMTIzNjkxODYsMTQ0%0AMDg1ODksMTU1NjE3NSwxMDQxMDcyNV0ubWFwKHZ0KSxkbD1bMzc1MDc3Nyw1Mzk1%0ANjE5LDcwNDA3MTksMTAyNjQyODYsNjUxOTA5Nyw5MjE2NTk0LDExOTE1MTE1LDEz%0ANTU2NjM2LDkyMDI5OTMsMTI0MjY4MDksMTUxODY1MTQsMTUxOTA5MzIsODY2NjE2%0AOSwxMTM1NjQ5MCwxNDA0OTY0MywxNTE3NzM3Miw4MDc3NjgzLDEwODM0MzI0LDEz%0ANTI4NTA5LDE0NTg5NjU0XS5tYXAodnQpLG1sPVszMjQ0NzMzLDcwNTcxMTAsMTA0%0AMDY2MjUsMTMwMzI0MzEsMTUwOTUwNTMsMTY2MTY3NjQsMTY2MjUyNTksMTY2MzQw%0AMTgsMzI1MzA3Niw3NjUyNDcwLDEwNjA3MDAzLDEzMTAxNTA0LDc2OTUyODEsMTAz%0AOTQzMTIsMTIzNjkzNzIsMTQzNDI4OTEsNjUxMzUwNyw5ODY4OTUwLDEyNDM0ODc3%0ALDE0Mjc3MDgxXS5tYXAodnQpO1ZvLnNjYWxlLnF1YW50aWxlPWZ1bmN0aW9uKCl7%0AcmV0dXJuIEppKFtdLFtdKX0sVm8uc2NhbGUucXVhbnRpemU9ZnVuY3Rpb24oKXty%0AZXR1cm4gR2koMCwxLFswLDFdKX0sVm8uc2NhbGUudGhyZXNob2xkPWZ1bmN0aW9u%0AKCl7cmV0dXJuIEtpKFsuNV0sWzAsMV0pfSxWby5zY2FsZS5pZGVudGl0eT1mdW5j%0AdGlvbigpe3JldHVybiBRaShbMCwxXSl9LFZvLnN2Zz17fSxWby5zdmcuYXJjPWZ1%0AbmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVu%0AdHMpLGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbz1yLmFwcGx5KHRoaXMsYXJn%0AdW1lbnRzKSt5bCxhPXUuYXBwbHkodGhpcyxhcmd1bWVudHMpK3lsLGM9KG8+YSYm%0AKGM9byxvPWEsYT1jKSxhLW8pLGw9d2E+Yz8iMCI6IjEiLHM9TWF0aC5jb3Mobyks%0AZj1NYXRoLnNpbihvKSxoPU1hdGguY29zKGEpLGc9TWF0aC5zaW4oYSk7CnJldHVy%0AbiBjPj14bD9uPyJNMCwiK2krIkEiK2krIiwiK2krIiAwIDEsMSAwLCIrLWkrIkEi%0AK2krIiwiK2krIiAwIDEsMSAwLCIraSsiTTAsIituKyJBIituKyIsIituKyIgMCAx%0ALDAgMCwiKy1uKyJBIituKyIsIituKyIgMCAxLDAgMCwiK24rIloiOiJNMCwiK2kr%0AIkEiK2krIiwiK2krIiAwIDEsMSAwLCIrLWkrIkEiK2krIiwiK2krIiAwIDEsMSAw%0ALCIraSsiWiI6bj8iTSIraSpzKyIsIitpKmYrIkEiK2krIiwiK2krIiAwICIrbCsi%0ALDEgIitpKmgrIiwiK2kqZysiTCIrbipoKyIsIituKmcrIkEiK24rIiwiK24rIiAw%0AICIrbCsiLDAgIituKnMrIiwiK24qZisiWiI6Ik0iK2kqcysiLCIraSpmKyJBIitp%0AKyIsIitpKyIgMCAiK2wrIiwxICIraSpoKyIsIitpKmcrIkwwLDAiKyJaIn12YXIg%0AdD1ubyxlPXRvLHI9ZW8sdT1ybztyZXR1cm4gbi5pbm5lclJhZGl1cz1mdW5jdGlv%0AbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1idChlKSxuKTp0fSxuLm91%0AdGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhl%0APWJ0KHQpLG4pOmV9LG4uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aD8ocj1idCh0KSxuKTpyfSxuLmVuZEFuZ2xlPWZ1bmN0aW9u%0AKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWJ0KHQpLG4pOnV9LG4uY2Vu%0AdHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0odC5hcHBseSh0aGlzLGFyZ3VtZW50cykr%0AZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsaT0oci5hcHBseSh0aGlzLGFyZ3Vt%0AZW50cykrdS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIreWw7cmV0dXJuW01hdGgu%0AY29zKGkpKm4sTWF0aC5zaW4oaSkqbl19LG59O3ZhciB5bD0ta2EseGw9U2EtRWE7%0AVm8uc3ZnLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdW8od3QpfTt2YXIgTWw9Vm8u%0AbWFwKHtsaW5lYXI6aW8sImxpbmVhci1jbG9zZWQiOm9vLHN0ZXA6YW8sInN0ZXAt%0AYmVmb3JlIjpjbywic3RlcC1hZnRlciI6bG8sYmFzaXM6dm8sImJhc2lzLW9wZW4i%0AOm1vLCJiYXNpcy1jbG9zZWQiOnlvLGJ1bmRsZTp4byxjYXJkaW5hbDpobywiY2Fy%0AZGluYWwtb3BlbiI6c28sImNhcmRpbmFsLWNsb3NlZCI6Zm8sbW9ub3RvbmU6a299%0AKTtNbC5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7dC5rZXk9bix0LmNsb3NlZD0vLWNs%0Ab3NlZCQvLnRlc3Qobil9KTt2YXIgX2w9WzAsMi8zLDEvMywwXSxibD1bMCwxLzMs%0AMi8zLDBdLHdsPVswLDEvNiwyLzMsMS82XTtWby5zdmcubGluZS5yYWRpYWw9ZnVu%0AY3Rpb24oKXt2YXIgbj11byhFbyk7cmV0dXJuIG4ucmFkaXVzPW4ueCxkZWxldGUg%0Abi54LG4uYW5nbGU9bi55LGRlbGV0ZSBuLnksbn0sY28ucmV2ZXJzZT1sbyxsby5y%0AZXZlcnNlPWNvLFZvLnN2Zy5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIEFvKHd0KX0s%0AVm8uc3ZnLmFyZWEucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIG49QW8oRW8pO3JldHVy%0AbiBuLnJhZGl1cz1uLngsZGVsZXRlIG4ueCxuLmlubmVyUmFkaXVzPW4ueDAsZGVs%0AZXRlIG4ueDAsbi5vdXRlclJhZGl1cz1uLngxLGRlbGV0ZSBuLngxLG4uYW5nbGU9%0Abi55LGRlbGV0ZSBuLnksbi5zdGFydEFuZ2xlPW4ueTAsZGVsZXRlIG4ueTAsbi5l%0AbmRBbmdsZT1uLnkxLGRlbGV0ZSBuLnkxLG59LFZvLnN2Zy5jaG9yZD1mdW5jdGlv%0Abigpe2Z1bmN0aW9uIG4obixhKXt2YXIgYz10KHRoaXMsaSxuLGEpLGw9dCh0aGlz%0ALG8sbixhKTtyZXR1cm4iTSIrYy5wMCtyKGMucixjLnAxLGMuYTEtYy5hMCkrKGUo%0AYyxsKT91KGMucixjLnAxLGMucixjLnAwKTp1KGMucixjLnAxLGwucixsLnAwKSty%0AKGwucixsLnAxLGwuYTEtbC5hMCkrdShsLnIsbC5wMSxjLnIsYy5wMCkpKyJaIn1m%0AdW5jdGlvbiB0KG4sdCxlLHIpe3ZhciB1PXQuY2FsbChuLGUsciksaT1hLmNhbGwo%0Abix1LHIpLG89Yy5jYWxsKG4sdSxyKSt5bCxzPWwuY2FsbChuLHUscikreWw7cmV0%0AdXJue3I6aSxhMDpvLGExOnMscDA6W2kqTWF0aC5jb3MobyksaSpNYXRoLnNpbihv%0AKV0scDE6W2kqTWF0aC5jb3MocyksaSpNYXRoLnNpbihzKV19fWZ1bmN0aW9uIGUo%0Abix0KXtyZXR1cm4gbi5hMD09dC5hMCYmbi5hMT09dC5hMX1mdW5jdGlvbiByKG4s%0AdCxlKXtyZXR1cm4iQSIrbisiLCIrbisiIDAgIisgKyhlPndhKSsiLDEgIit0fWZ1%0AbmN0aW9uIHUobix0LGUscil7cmV0dXJuIlEgMCwwICIrcn12YXIgaT1wcixvPXZy%0ALGE9Q28sYz1lbyxsPXJvO3JldHVybiBuLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1%0Acm4gYXJndW1lbnRzLmxlbmd0aD8oYT1idCh0KSxuKTphfSxuLnNvdXJjZT1mdW5j%0AdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1idCh0KSxuKTppfSxu%0ALnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1i%0AdCh0KSxuKTpvfSxuLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KGM9YnQodCksbik6Y30sbi5lbmRBbmdsZT1mdW5jdGlvbih0%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1idCh0KSxuKTpsfSxufSxWby5z%0AdmcuZGlhZ29uYWw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4sdSl7dmFyIGk9dC5j%0AYWxsKHRoaXMsbix1KSxvPWUuY2FsbCh0aGlzLG4sdSksYT0oaS55K28ueSkvMixj%0APVtpLHt4OmkueCx5OmF9LHt4Om8ueCx5OmF9LG9dO3JldHVybiBjPWMubWFwKHIp%0ALCJNIitjWzBdKyJDIitjWzFdKyIgIitjWzJdKyIgIitjWzNdfXZhciB0PXByLGU9%0AdnIscj1ObztyZXR1cm4gbi5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KHQ9YnQoZSksbik6dH0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7%0AcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YnQodCksbik6ZX0sbi5wcm9qZWN0%0AaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6%0Acn0sbn0sVm8uc3ZnLmRpYWdvbmFsLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBuPVZv%0ALnN2Zy5kaWFnb25hbCgpLHQ9Tm8sZT1uLnByb2plY3Rpb247cmV0dXJuIG4ucHJv%0AamVjdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHpv%0AKHQ9bikpOnR9LG59LFZvLnN2Zy5zeW1ib2w9ZnVuY3Rpb24oKXtmdW5jdGlvbiBu%0AKG4scil7cmV0dXJuKFNsLmdldCh0LmNhbGwodGhpcyxuLHIpKXx8cW8pKGUuY2Fs%0AbCh0aGlzLG4scikpfXZhciB0PVRvLGU9TG87cmV0dXJuIG4udHlwZT1mdW5jdGlv%0AbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1idChlKSxuKTp0fSxuLnNp%0AemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YnQodCks%0Abik6ZX0sbn07dmFyIFNsPVZvLm1hcCh7Y2lyY2xlOnFvLGNyb3NzOmZ1bmN0aW9u%0AKG4pe3ZhciB0PU1hdGguc3FydChuLzUpLzI7cmV0dXJuIk0iKy0zKnQrIiwiKy10%0AKyJIIistdCsiViIrLTMqdCsiSCIrdCsiViIrLXQrIkgiKzMqdCsiViIrdCsiSCIr%0AdCsiViIrMyp0KyJIIistdCsiViIrdCsiSCIrLTMqdCsiWiJ9LGRpYW1vbmQ6ZnVu%0AY3Rpb24obil7dmFyIHQ9TWF0aC5zcXJ0KG4vKDIqQ2wpKSxlPXQqQ2w7cmV0dXJu%0AIk0wLCIrLXQrIkwiK2UrIiwwIisiIDAsIit0KyIgIistZSsiLDAiKyJaIn0sc3F1%0AYXJlOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguc3FydChuKS8yO3JldHVybiJNIist%0AdCsiLCIrLXQrIkwiK3QrIiwiKy10KyIgIit0KyIsIit0KyIgIistdCsiLCIrdCsi%0AWiJ9LCJ0cmlhbmdsZS1kb3duIjpmdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQo%0Abi9BbCksZT10KkFsLzI7cmV0dXJuIk0wLCIrZSsiTCIrdCsiLCIrLWUrIiAiKy10%0AKyIsIistZSsiWiJ9LCJ0cmlhbmdsZS11cCI6ZnVuY3Rpb24obil7dmFyIHQ9TWF0%0AaC5zcXJ0KG4vQWwpLGU9dCpBbC8yO3JldHVybiJNMCwiKy1lKyJMIit0KyIsIitl%0AKyIgIistdCsiLCIrZSsiWiJ9fSk7Vm8uc3ZnLnN5bWJvbFR5cGVzPVNsLmtleXMo%0AKTt2YXIga2wsRWwsQWw9TWF0aC5zcXJ0KDMpLENsPU1hdGgudGFuKDMwKkNhKSxO%0AbD1bXSx6bD0wO05sLmNhbGw9dmEuY2FsbCxObC5lbXB0eT12YS5lbXB0eSxObC5u%0Ab2RlPXZhLm5vZGUsTmwuc2l6ZT12YS5zaXplLFZvLnRyYW5zaXRpb249ZnVuY3Rp%0Ab24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/a2w/bi50cmFuc2l0aW9uKCk6%0Abjp5YS50cmFuc2l0aW9uKCl9LFZvLnRyYW5zaXRpb24ucHJvdG90eXBlPU5sLE5s%0ALnNlbGVjdD1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdT10aGlzLmlkLGk9W107bj1i%0AKG4pO2Zvcih2YXIgbz0tMSxhPXRoaXMubGVuZ3RoOysrbzxhOyl7aS5wdXNoKHQ9%0AW10pO2Zvcih2YXIgYz10aGlzW29dLGw9LTEscz1jLmxlbmd0aDsrK2w8czspKHI9%0AY1tsXSkmJihlPW4uY2FsbChyLHIuX19kYXRhX18sbCxvKSk/KCJfX2RhdGFfXyJp%0AbiByJiYoZS5fX2RhdGFfXz1yLl9fZGF0YV9fKSxVbyhlLGwsdSxyLl9fdHJhbnNp%0AdGlvbl9fW3VdKSx0LnB1c2goZSkpOnQucHVzaChudWxsKX1yZXR1cm4gUm8oaSx1%0AKX0sTmwuc2VsZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0LGUscix1LGksbz10aGlz%0ALmlkLGE9W107bj13KG4pO2Zvcih2YXIgYz0tMSxsPXRoaXMubGVuZ3RoOysrYzxs%0AOylmb3IodmFyIHM9dGhpc1tjXSxmPS0xLGg9cy5sZW5ndGg7KytmPGg7KWlmKHI9%0Ac1tmXSl7aT1yLl9fdHJhbnNpdGlvbl9fW29dLGU9bi5jYWxsKHIsci5fX2RhdGFf%0AXyxmLGMpLGEucHVzaCh0PVtdKTtmb3IodmFyIGc9LTEscD1lLmxlbmd0aDsrK2c8%0AcDspKHU9ZVtnXSkmJlVvKHUsZyxvLGkpLHQucHVzaCh1KX1yZXR1cm4gUm8oYSxv%0AKX0sTmwuZmlsdGVyPWZ1bmN0aW9uKG4pe3ZhciB0LGUscix1PVtdOyJmdW5jdGlv%0AbiIhPXR5cGVvZiBuJiYobj1SKG4pKTtmb3IodmFyIGk9MCxvPXRoaXMubGVuZ3Ro%0AO28+aTtpKyspe3UucHVzaCh0PVtdKTtmb3IodmFyIGU9dGhpc1tpXSxhPTAsYz1l%0ALmxlbmd0aDtjPmE7YSsrKShyPWVbYV0pJiZuLmNhbGwocixyLl9fZGF0YV9fLGEs%0AaSkmJnQucHVzaChyKX1yZXR1cm4gUm8odSx0aGlzLmlkKX0sTmwudHdlZW49ZnVu%0AY3Rpb24obix0KXt2YXIgZT10aGlzLmlkO3JldHVybiBhcmd1bWVudHMubGVuZ3Ro%0APDI/dGhpcy5ub2RlKCkuX190cmFuc2l0aW9uX19bZV0udHdlZW4uZ2V0KG4pOlAo%0AdGhpcyxudWxsPT10P2Z1bmN0aW9uKHQpe3QuX190cmFuc2l0aW9uX19bZV0udHdl%0AZW4ucmVtb3ZlKG4pfTpmdW5jdGlvbihyKXtyLl9fdHJhbnNpdGlvbl9fW2VdLnR3%0AZWVuLnNldChuLHQpfSl9LE5sLmF0dHI9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBl%0AKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYSl9ZnVuY3Rpb24gcigpe3RoaXMucmVt%0Ab3ZlQXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsKX1mdW5jdGlvbiB1KG4pe3Jl%0AdHVybiBudWxsPT1uP2U6KG4rPSIiLGZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLmdl%0AdEF0dHJpYnV0ZShhKTtyZXR1cm4gZSE9PW4mJih0PW8oZSxuKSxmdW5jdGlvbihu%0AKXt0aGlzLnNldEF0dHJpYnV0ZShhLHQobikpfSl9KX1mdW5jdGlvbiBpKG4pe3Jl%0AdHVybiBudWxsPT1uP3I6KG4rPSIiLGZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLmdl%0AdEF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCk7cmV0dXJuIGUhPT1uJiYodD1v%0AKGUsbiksZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGVOUyhhLnNwYWNlLGEu%0AbG9jYWwsdChuKSl9KX0pfWlmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHQgaW4g%0Abil0aGlzLmF0dHIodCxuW3RdKTtyZXR1cm4gdGhpc312YXIgbz0idHJhbnNmb3Jt%0AIj09bj9QdTpndSxhPVZvLm5zLnF1YWxpZnkobik7cmV0dXJuIERvKHRoaXMsImF0%0AdHIuIituLHQsYS5sb2NhbD9pOnUpfSxObC5hdHRyVHdlZW49ZnVuY3Rpb24obix0%0AKXtmdW5jdGlvbiBlKG4sZSl7dmFyIHI9dC5jYWxsKHRoaXMsbixlLHRoaXMuZ2V0%0AQXR0cmlidXRlKHUpKTtyZXR1cm4gciYmZnVuY3Rpb24obil7dGhpcy5zZXRBdHRy%0AaWJ1dGUodSxyKG4pKX19ZnVuY3Rpb24gcihuLGUpe3ZhciByPXQuY2FsbCh0aGlz%0ALG4sZSx0aGlzLmdldEF0dHJpYnV0ZU5TKHUuc3BhY2UsdS5sb2NhbCkpO3JldHVy%0AbiByJiZmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHUuc3BhY2UsdS5s%0Ab2NhbCxyKG4pKX19dmFyIHU9Vm8ubnMucXVhbGlmeShuKTtyZXR1cm4gdGhpcy50%0Ad2VlbigiYXR0ci4iK24sdS5sb2NhbD9yOmUpfSxObC5zdHlsZT1mdW5jdGlvbihu%0ALHQsZSl7ZnVuY3Rpb24gcigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9%0AZnVuY3Rpb24gdSh0KXtyZXR1cm4gbnVsbD09dD9yOih0Kz0iIixmdW5jdGlvbigp%0Ae3ZhciByLHU9Sm8uZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3Bl%0AcnR5VmFsdWUobik7cmV0dXJuIHUhPT10JiYocj1ndSh1LHQpLGZ1bmN0aW9uKHQp%0Ae3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobixyKHQpLGUpfSl9KX12YXIgaT1hcmd1%0AbWVudHMubGVuZ3RoO2lmKDM+aSl7aWYoInN0cmluZyIhPXR5cGVvZiBuKXsyPmkm%0AJih0PSIiKTtmb3IoZSBpbiBuKXRoaXMuc3R5bGUoZSxuW2VdLHQpO3JldHVybiB0%0AaGlzfWU9IiJ9cmV0dXJuIERvKHRoaXMsInN0eWxlLiIrbix0LHUpfSxObC5zdHls%0AZVR3ZWVuPWZ1bmN0aW9uKG4sdCxlKXtmdW5jdGlvbiByKHIsdSl7dmFyIGk9dC5j%0AYWxsKHRoaXMscix1LEpvLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQ%0Acm9wZXJ0eVZhbHVlKG4pKTtyZXR1cm4gaSYmZnVuY3Rpb24odCl7dGhpcy5zdHls%0AZS5zZXRQcm9wZXJ0eShuLGkodCksZSl9fXJldHVybiBhcmd1bWVudHMubGVuZ3Ro%0APDMmJihlPSIiKSx0aGlzLnR3ZWVuKCJzdHlsZS4iK24scil9LE5sLnRleHQ9ZnVu%0AY3Rpb24obil7cmV0dXJuIERvKHRoaXMsInRleHQiLG4sUG8pfSxObC5yZW1vdmU9%0AZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKCJlbmQudHJhbnNpdGlvbiIsZnVu%0AY3Rpb24oKXt2YXIgbjt0aGlzLl9fdHJhbnNpdGlvbl9fLmNvdW50PDImJihuPXRo%0AaXMucGFyZW50Tm9kZSkmJm4ucmVtb3ZlQ2hpbGQodGhpcyl9KX0sTmwuZWFzZT1m%0AdW5jdGlvbihuKXt2YXIgdD10aGlzLmlkO3JldHVybiBhcmd1bWVudHMubGVuZ3Ro%0APDE/dGhpcy5ub2RlKCkuX190cmFuc2l0aW9uX19bdF0uZWFzZTooImZ1bmN0aW9u%0AIiE9dHlwZW9mIG4mJihuPVZvLmVhc2UuYXBwbHkoVm8sYXJndW1lbnRzKSksUCh0%0AaGlzLGZ1bmN0aW9uKGUpe2UuX190cmFuc2l0aW9uX19bdF0uZWFzZT1ufSkpfSxO%0AbC5kZWxheT1mdW5jdGlvbihuKXt2YXIgdD10aGlzLmlkO3JldHVybiBhcmd1bWVu%0AdHMubGVuZ3RoPDE/dGhpcy5ub2RlKCkuX190cmFuc2l0aW9uX19bdF0uZGVsYXk6%0AUCh0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKGUscix1KXtlLl9f%0AdHJhbnNpdGlvbl9fW3RdLmRlbGF5PStuLmNhbGwoZSxlLl9fZGF0YV9fLHIsdSl9%0AOihuPStuLGZ1bmN0aW9uKGUpe2UuX190cmFuc2l0aW9uX19bdF0uZGVsYXk9bn0p%0AKX0sTmwuZHVyYXRpb249ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5pZDtyZXR1cm4g%0AYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpLl9fdHJhbnNpdGlvbl9fW3Rd%0ALmR1cmF0aW9uOlAodGhpcywiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbihl%0ALHIsdSl7ZS5fX3RyYW5zaXRpb25fX1t0XS5kdXJhdGlvbj1NYXRoLm1heCgxLG4u%0AY2FsbChlLGUuX19kYXRhX18scix1KSl9OihuPU1hdGgubWF4KDEsbiksZnVuY3Rp%0Ab24oZSl7ZS5fX3RyYW5zaXRpb25fX1t0XS5kdXJhdGlvbj1ufSkpfSxObC5lYWNo%0APWZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5pZDtpZihhcmd1bWVudHMubGVuZ3Ro%0APDIpe3ZhciByPUVsLHU9a2w7a2w9ZSxQKHRoaXMsZnVuY3Rpb24odCxyLHUpe0Vs%0APXQuX190cmFuc2l0aW9uX19bZV0sbi5jYWxsKHQsdC5fX2RhdGFfXyxyLHUpfSks%0ARWw9cixrbD11fWVsc2UgUCh0aGlzLGZ1bmN0aW9uKHIpe3ZhciB1PXIuX190cmFu%0Ac2l0aW9uX19bZV07KHUuZXZlbnR8fCh1LmV2ZW50PVZvLmRpc3BhdGNoKCJzdGFy%0AdCIsImVuZCIpKSkub24obix0KX0pO3JldHVybiB0aGlzfSxObC50cmFuc2l0aW9u%0APWZ1bmN0aW9uKCl7Zm9yKHZhciBuLHQsZSxyLHU9dGhpcy5pZCxpPSsremwsbz1b%0AXSxhPTAsYz10aGlzLmxlbmd0aDtjPmE7YSsrKXtvLnB1c2gobj1bXSk7Zm9yKHZh%0AciB0PXRoaXNbYV0sbD0wLHM9dC5sZW5ndGg7cz5sO2wrKykoZT10W2xdKSYmKHI9%0AT2JqZWN0LmNyZWF0ZShlLl9fdHJhbnNpdGlvbl9fW3VdKSxyLmRlbGF5Kz1yLmR1%0AcmF0aW9uLFVvKGUsbCxpLHIpKSxuLnB1c2goZSl9cmV0dXJuIFJvKG8saSl9LFZv%0ALnN2Zy5heGlzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtuLmVhY2goZnVuY3Rp%0Ab24oKXt2YXIgbixsPVZvLnNlbGVjdCh0aGlzKSxzPXRoaXMuX19jaGFydF9ffHxl%0ALGY9dGhpcy5fX2NoYXJ0X189ZS5jb3B5KCksaD1udWxsPT1jP2YudGlja3M/Zi50%0AaWNrcy5hcHBseShmLGEpOmYuZG9tYWluKCk6YyxnPW51bGw9PXQ/Zi50aWNrRm9y%0AbWF0P2YudGlja0Zvcm1hdC5hcHBseShmLGEpOnd0OnQscD1sLnNlbGVjdEFsbCgi%0ALnRpY2siKS5kYXRhKGgsZiksdj1wLmVudGVyKCkuaW5zZXJ0KCJnIiwiLmRvbWFp%0AbiIpLmF0dHIoImNsYXNzIiwidGljayIpLnN0eWxlKCJvcGFjaXR5IixFYSksZD1W%0Aby50cmFuc2l0aW9uKHAuZXhpdCgpKS5zdHlsZSgib3BhY2l0eSIsRWEpLnJlbW92%0AZSgpLG09Vm8udHJhbnNpdGlvbihwLm9yZGVyKCkpLnN0eWxlKCJvcGFjaXR5Iiwx%0AKSx5PXFpKGYpLHg9bC5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFswXSksTT0o%0AeC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZG9tYWluIiks%0AVm8udHJhbnNpdGlvbih4KSk7di5hcHBlbmQoImxpbmUiKSx2LmFwcGVuZCgidGV4%0AdCIpO3ZhciBfPXYuc2VsZWN0KCJsaW5lIiksYj1tLnNlbGVjdCgibGluZSIpLHc9%0AcC5zZWxlY3QoInRleHQiKS50ZXh0KGcpLFM9di5zZWxlY3QoInRleHQiKSxrPW0u%0Ac2VsZWN0KCJ0ZXh0Iik7c3dpdGNoKHIpe2Nhc2UiYm90dG9tIjpuPWpvLF8uYXR0%0AcigieTIiLHUpLFMuYXR0cigieSIsTWF0aC5tYXgodSwwKStvKSxiLmF0dHIoIngy%0AIiwwKS5hdHRyKCJ5MiIsdSksay5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixNYXRoLm1h%0AeCh1LDApK28pLHcuYXR0cigiZHkiLCIuNzFlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hv%0AciIsIm1pZGRsZSIpLE0uYXR0cigiZCIsIk0iK3lbMF0rIiwiK2krIlYwSCIreVsx%0AXSsiViIraSk7YnJlYWs7Y2FzZSJ0b3AiOm49am8sXy5hdHRyKCJ5MiIsLXUpLFMu%0AYXR0cigieSIsLShNYXRoLm1heCh1LDApK28pKSxiLmF0dHIoIngyIiwwKS5hdHRy%0AKCJ5MiIsLXUpLGsuYXR0cigieCIsMCkuYXR0cigieSIsLShNYXRoLm1heCh1LDAp%0AK28pKSx3LmF0dHIoImR5IiwiMGVtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlk%0AZGxlIiksTS5hdHRyKCJkIiwiTSIreVswXSsiLCIrLWkrIlYwSCIreVsxXSsiViIr%0ALWkpO2JyZWFrO2Nhc2UibGVmdCI6bj1IbyxfLmF0dHIoIngyIiwtdSksUy5hdHRy%0AKCJ4IiwtKE1hdGgubWF4KHUsMCkrbykpLGIuYXR0cigieDIiLC11KS5hdHRyKCJ5%0AMiIsMCksay5hdHRyKCJ4IiwtKE1hdGgubWF4KHUsMCkrbykpLmF0dHIoInkiLDAp%0ALHcuYXR0cigiZHkiLCIuMzJlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImVuZCIp%0ALE0uYXR0cigiZCIsIk0iKy1pKyIsIit5WzBdKyJIMFYiK3lbMV0rIkgiKy1pKTti%0AcmVhaztjYXNlInJpZ2h0IjpuPUhvLF8uYXR0cigieDIiLHUpLFMuYXR0cigieCIs%0ATWF0aC5tYXgodSwwKStvKSxiLmF0dHIoIngyIix1KS5hdHRyKCJ5MiIsMCksay5h%0AdHRyKCJ4IixNYXRoLm1heCh1LDApK28pLmF0dHIoInkiLDApLHcuYXR0cigiZHki%0ALCIuMzJlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IiksTS5hdHRyKCJk%0AIiwiTSIraSsiLCIreVswXSsiSDBWIit5WzFdKyJIIitpKX1pZihmLnJhbmdlQmFu%0AZCl7dmFyIEU9ZixBPUUucmFuZ2VCYW5kKCkvMjtzPWY9ZnVuY3Rpb24obil7cmV0%0AdXJuIEUobikrQX19ZWxzZSBzLnJhbmdlQmFuZD9zPWY6ZC5jYWxsKG4sZik7di5j%0AYWxsKG4scyksbS5jYWxsKG4sZil9KX12YXIgdCxlPVZvLnNjYWxlLmxpbmVhcigp%0ALHI9TGwsdT02LGk9NixvPTMsYT1bMTBdLGM9bnVsbDtyZXR1cm4gbi5zY2FsZT1m%0AdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4u%0Ab3JpZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQg%0AaW4gVGw/dCsiIjpMbCxuKTpyfSxuLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGFy%0AZ3VtZW50cy5sZW5ndGg/KGE9YXJndW1lbnRzLG4pOmF9LG4udGlja1ZhbHVlcz1m%0AdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LG4pOmN9LG4u%0AdGlja0Zvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o%0AdD1lLG4pOnR9LG4udGlja1NpemU9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRz%0ALmxlbmd0aDtyZXR1cm4gZT8odT0rdCxpPSthcmd1bWVudHNbZS0xXSxuKTp1fSxu%0ALmlubmVyVGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KHU9K3Qsbik6dX0sbi5vdXRlclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LG4pOml9LG4udGlja1BhZGRpbmc9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3Qsbik6b30sbi50%0AaWNrU3ViZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgm%0AJm59LG59O3ZhciBMbD0iYm90dG9tIixUbD17dG9wOjEscmlnaHQ6MSxib3R0b206%0AMSxsZWZ0OjF9O1ZvLnN2Zy5icnVzaD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oaSl7%0AaS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9Vm8uc2VsZWN0KHRoaXMpLnN0eWxlKCJw%0Ab2ludGVyLWV2ZW50cyIsImFsbCIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGln%0AaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIikub24oIm1vdXNlZG93bi5icnVzaCIs%0AdSkub24oInRvdWNoc3RhcnQuYnJ1c2giLHUpLG89aS5zZWxlY3RBbGwoIi5iYWNr%0AZ3JvdW5kIikuZGF0YShbMF0pO28uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRy%0AKCJjbGFzcyIsImJhY2tncm91bmQiKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRl%0AbiIpLnN0eWxlKCJjdXJzb3IiLCJjcm9zc2hhaXIiKSxpLnNlbGVjdEFsbCgiLmV4%0AdGVudCIpLmRhdGEoWzBdKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNs%0AYXNzIiwiZXh0ZW50Iikuc3R5bGUoImN1cnNvciIsIm1vdmUiKTt2YXIgYT1pLnNl%0AbGVjdEFsbCgiLnJlc2l6ZSIpLmRhdGEocCx3dCk7YS5leGl0KCkucmVtb3ZlKCks%0AYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihuKXty%0AZXR1cm4icmVzaXplICIrbn0pLnN0eWxlKCJjdXJzb3IiLGZ1bmN0aW9uKG4pe3Jl%0AdHVybiBxbFtuXX0pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGZ1bmN0aW9uKG4p%0Ae3JldHVybi9bZXddJC8udGVzdChuKT8tMzpudWxsfSkuYXR0cigieSIsZnVuY3Rp%0Ab24obil7cmV0dXJuL15bbnNdLy50ZXN0KG4pPy0zOm51bGx9KS5hdHRyKCJ3aWR0%0AaCIsNikuYXR0cigiaGVpZ2h0Iiw2KS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRl%0AbiIpLGEuc3R5bGUoImRpc3BsYXkiLG4uZW1wdHkoKT8ibm9uZSI6bnVsbCk7dmFy%0AIHMsZj1Wby50cmFuc2l0aW9uKGkpLGg9Vm8udHJhbnNpdGlvbihvKTtjJiYocz1x%0AaShjKSxoLmF0dHIoIngiLHNbMF0pLmF0dHIoIndpZHRoIixzWzFdLXNbMF0pLGUo%0AZikpLGwmJihzPXFpKGwpLGguYXR0cigieSIsc1swXSkuYXR0cigiaGVpZ2h0Iixz%0AWzFdLXNbMF0pLHIoZikpLHQoZil9KX1mdW5jdGlvbiB0KG4pe24uc2VsZWN0QWxs%0AKCIucmVzaXplIikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihuKXtyZXR1cm4i%0AdHJhbnNsYXRlKCIrc1srL2UkLy50ZXN0KG4pXSsiLCIrZlsrL15zLy50ZXN0KG4p%0AXSsiKSJ9KX1mdW5jdGlvbiBlKG4pe24uc2VsZWN0KCIuZXh0ZW50IikuYXR0cigi%0AeCIsc1swXSksbi5zZWxlY3RBbGwoIi5leHRlbnQsLm4+cmVjdCwucz5yZWN0Iiku%0AYXR0cigid2lkdGgiLHNbMV0tc1swXSl9ZnVuY3Rpb24gcihuKXtuLnNlbGVjdCgi%0ALmV4dGVudCIpLmF0dHIoInkiLGZbMF0pLG4uc2VsZWN0QWxsKCIuZXh0ZW50LC5l%0APnJlY3QsLnc+cmVjdCIpLmF0dHIoImhlaWdodCIsZlsxXS1mWzBdKX1mdW5jdGlv%0AbiB1KCl7ZnVuY3Rpb24gdSgpezMyPT1Wby5ldmVudC5rZXlDb2RlJiYoQ3x8KHg9%0AbnVsbCx6WzBdLT1zWzFdLHpbMV0tPWZbMV0sQz0yKSx5KCkpfWZ1bmN0aW9uIHAo%0AKXszMj09Vm8uZXZlbnQua2V5Q29kZSYmMj09QyYmKHpbMF0rPXNbMV0selsxXSs9%0AZlsxXSxDPTAseSgpKX1mdW5jdGlvbiB2KCl7dmFyIG49Vm8ubW91c2UoXyksdT0h%0AMTtNJiYoblswXSs9TVswXSxuWzFdKz1NWzFdKSxDfHwoVm8uZXZlbnQuYWx0S2V5%0APyh4fHwoeD1bKHNbMF0rc1sxXSkvMiwoZlswXStmWzFdKS8yXSkselswXT1zWyso%0AblswXTx4WzBdKV0selsxXT1mWysoblsxXTx4WzFdKV0pOng9bnVsbCksRSYmZChu%0ALGMsMCkmJihlKFMpLHU9ITApLEEmJmQobixsLDEpJiYocihTKSx1PSEwKSx1JiYo%0AdChTKSx3KHt0eXBlOiJicnVzaCIsbW9kZTpDPyJtb3ZlIjoicmVzaXplIn0pKX1m%0AdW5jdGlvbiBkKG4sdCxlKXt2YXIgcix1LGE9cWkodCksYz1hWzBdLGw9YVsxXSxw%0APXpbZV0sdj1lP2Y6cyxkPXZbMV0tdlswXTtyZXR1cm4gQyYmKGMtPXAsbC09ZCtw%0AKSxyPShlP2c6aCk/TWF0aC5tYXgoYyxNYXRoLm1pbihsLG5bZV0pKTpuW2VdLEM/%0AdT0ocis9cCkrZDooeCYmKHA9TWF0aC5tYXgoYyxNYXRoLm1pbihsLDIqeFtlXS1y%0AKSkpLHI+cD8odT1yLHI9cCk6dT1wKSx2WzBdIT1yfHx2WzFdIT11PyhlP289bnVs%0AbDppPW51bGwsdlswXT1yLHZbMV09dSwhMCk6dm9pZCAwfWZ1bmN0aW9uIG0oKXt2%0AKCksUy5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zZWxlY3RBbGwoIi5y%0AZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbi5lbXB0eSgpPyJub25lIjpudWxsKSxW%0Aby5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIixudWxsKSxMLm9uKCJtb3Vz%0AZW1vdmUuYnJ1c2giLG51bGwpLm9uKCJtb3VzZXVwLmJydXNoIixudWxsKS5vbigi%0AdG91Y2htb3ZlLmJydXNoIixudWxsKS5vbigidG91Y2hlbmQuYnJ1c2giLG51bGwp%0ALm9uKCJrZXlkb3duLmJydXNoIixudWxsKS5vbigia2V5dXAuYnJ1c2giLG51bGwp%0ALE4oKSx3KHt0eXBlOiJicnVzaGVuZCJ9KX12YXIgeCxNLF89dGhpcyxiPVZvLnNl%0AbGVjdChWby5ldmVudC50YXJnZXQpLHc9YS5vZihfLGFyZ3VtZW50cyksUz1Wby5z%0AZWxlY3QoXyksaz1iLmRhdHVtKCksRT0hL14obnxzKSQvLnRlc3QoaykmJmMsQT0h%0AL14oZXx3KSQvLnRlc3QoaykmJmwsQz1iLmNsYXNzZWQoImV4dGVudCIpLE49SSgp%0ALHo9Vm8ubW91c2UoXyksTD1Wby5zZWxlY3QoSm8pLm9uKCJrZXlkb3duLmJydXNo%0AIix1KS5vbigia2V5dXAuYnJ1c2giLHApO2lmKFZvLmV2ZW50LmNoYW5nZWRUb3Vj%0AaGVzP0wub24oInRvdWNobW92ZS5icnVzaCIsdikub24oInRvdWNoZW5kLmJydXNo%0AIixtKTpMLm9uKCJtb3VzZW1vdmUuYnJ1c2giLHYpLm9uKCJtb3VzZXVwLmJydXNo%0AIixtKSxTLmludGVycnVwdCgpLnNlbGVjdEFsbCgiKiIpLmludGVycnVwdCgpLEMp%0AelswXT1zWzBdLXpbMF0selsxXT1mWzBdLXpbMV07ZWxzZSBpZihrKXt2YXIgVD0r%0AL3ckLy50ZXN0KGspLHE9Ky9ebi8udGVzdChrKTtNPVtzWzEtVF0telswXSxmWzEt%0AcV0telsxXV0selswXT1zW1RdLHpbMV09ZltxXX1lbHNlIFZvLmV2ZW50LmFsdEtl%0AeSYmKHg9ei5zbGljZSgpKTtTLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUi%0AKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksVm8u%0Ac2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIsYi5zdHlsZSgiY3Vyc29yIikp%0ALHcoe3R5cGU6ImJydXNoc3RhcnQifSksdigpfXZhciBpLG8sYT1NKG4sImJydXNo%0Ac3RhcnQiLCJicnVzaCIsImJydXNoZW5kIiksYz1udWxsLGw9bnVsbCxzPVswLDBd%0ALGY9WzAsMF0saD0hMCxnPSEwLHA9UmxbMF07cmV0dXJuIG4uZXZlbnQ9ZnVuY3Rp%0Ab24obil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49YS5vZih0aGlzLGFyZ3VtZW50%0AcyksdD17eDpzLHk6ZixpOmksajpvfSxlPXRoaXMuX19jaGFydF9ffHx0O3RoaXMu%0AX19jaGFydF9fPXQsa2w/Vm8uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNo%0AKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXtpPWUuaSxvPWUuaixzPWUueCxmPWUu%0AeSxuKHt0eXBlOiJicnVzaHN0YXJ0In0pfSkudHdlZW4oImJydXNoOmJydXNoIixm%0AdW5jdGlvbigpe3ZhciBlPXB1KHMsdC54KSxyPXB1KGYsdC55KTtyZXR1cm4gaT1v%0APW51bGwsZnVuY3Rpb24odSl7cz10Lng9ZSh1KSxmPXQueT1yKHUpLG4oe3R5cGU6%0AImJydXNoIixtb2RlOiJyZXNpemUifSl9fSkuZWFjaCgiZW5kLmJydXNoIixmdW5j%0AdGlvbigpe2k9dC5pLG89dC5qLG4oe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUi%0AfSksbih7dHlwZToiYnJ1c2hlbmQifSl9KToobih7dHlwZToiYnJ1c2hzdGFydCJ9%0AKSxuKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pLG4oe3R5cGU6ImJydXNo%0AZW5kIn0pKX0pfSxuLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KGM9dCxwPVJsWyFjPDwxfCFsXSxuKTpjfSxuLnk9ZnVuY3Rpb24odCl7cmV0%0AdXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxwPVJsWyFjPDwxfCFsXSxuKTpsfSxu%0ALmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjJiZs%0APyhoPSEhdFswXSxnPSEhdFsxXSk6Yz9oPSEhdDpsJiYoZz0hIXQpLG4pOmMmJmw/%0AW2gsZ106Yz9oOmw/ZzpudWxsfSxuLmV4dGVudD1mdW5jdGlvbih0KXt2YXIgZSxy%0ALHUsYSxoO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjJiYoZT10WzBdLHI9dFsx%0AXSxsJiYoZT1lWzBdLHI9clswXSksaT1bZSxyXSxjLmludmVydCYmKGU9YyhlKSxy%0APWMocikpLGU+ciYmKGg9ZSxlPXIscj1oKSwoZSE9c1swXXx8ciE9c1sxXSkmJihz%0APVtlLHJdKSksbCYmKHU9dFswXSxhPXRbMV0sYyYmKHU9dVsxXSxhPWFbMV0pLG89%0AW3UsYV0sbC5pbnZlcnQmJih1PWwodSksYT1sKGEpKSx1PmEmJihoPXUsdT1hLGE9%0AaCksKHUhPWZbMF18fGEhPWZbMV0pJiYoZj1bdSxhXSkpLG4pOihjJiYoaT8oZT1p%0AWzBdLHI9aVsxXSk6KGU9c1swXSxyPXNbMV0sYy5pbnZlcnQmJihlPWMuaW52ZXJ0%0AKGUpLHI9Yy5pbnZlcnQocikpLGU+ciYmKGg9ZSxlPXIscj1oKSkpLGwmJihvPyh1%0APW9bMF0sYT1vWzFdKToodT1mWzBdLGE9ZlsxXSxsLmludmVydCYmKHU9bC5pbnZl%0AcnQodSksYT1sLmludmVydChhKSksdT5hJiYoaD11LHU9YSxhPWgpKSksYyYmbD9b%0AW2UsdV0sW3IsYV1dOmM/W2Uscl06bCYmW3UsYV0pfSxuLmNsZWFyPWZ1bmN0aW9u%0AKCl7cmV0dXJuIG4uZW1wdHkoKXx8KHM9WzAsMF0sZj1bMCwwXSxpPW89bnVsbCks%0Abn0sbi5lbXB0eT1mdW5jdGlvbigpe3JldHVybiEhYyYmc1swXT09c1sxXXx8ISFs%0AJiZmWzBdPT1mWzFdfSxWby5yZWJpbmQobixhLCJvbiIpfTt2YXIgcWw9e246Im5z%0ALXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6%0AZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJl%0Ac2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sUmw9W1sibiIsImUiLCJzIiwidyIsIm53%0AIiwibmUiLCJzZSIsInN3Il0sWyJlIiwidyJdLFsibiIsInMiXSxbXV0sRGw9bmMu%0AZm9ybWF0PW9jLnRpbWVGb3JtYXQsUGw9RGwudXRjLFVsPVBsKCIlWS0lbS0lZFQl%0ASDolTTolUy4lTFoiKTtEbC5pc289RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcm%0AJituZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/Rm86VWwsRm8u%0AcGFyc2U9ZnVuY3Rpb24obil7dmFyIHQ9bmV3IERhdGUobik7cmV0dXJuIGlzTmFO%0AKHQpP251bGw6dH0sRm8udG9TdHJpbmc9VWwudG9TdHJpbmcsbmMuc2Vjb25kPVB0%0AKGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgdGMoMWUzKk1hdGguZmxvb3Iobi8xZTMp%0AKX0sZnVuY3Rpb24obix0KXtuLnNldFRpbWUobi5nZXRUaW1lKCkrMWUzKk1hdGgu%0AZmxvb3IodCkpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRTZWNvbmRzKCl9KSxu%0AYy5zZWNvbmRzPW5jLnNlY29uZC5yYW5nZSxuYy5zZWNvbmRzLnV0Yz1uYy5zZWNv%0AbmQudXRjLnJhbmdlLG5jLm1pbnV0ZT1QdChmdW5jdGlvbihuKXtyZXR1cm4gbmV3%0AIHRjKDZlNCpNYXRoLmZsb29yKG4vNmU0KSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRU%0AaW1lKG4uZ2V0VGltZSgpKzZlNCpNYXRoLmZsb29yKHQpKX0sZnVuY3Rpb24obil7%0AcmV0dXJuIG4uZ2V0TWludXRlcygpfSksbmMubWludXRlcz1uYy5taW51dGUucmFu%0AZ2UsbmMubWludXRlcy51dGM9bmMubWludXRlLnV0Yy5yYW5nZSxuYy5ob3VyPVB0%0AKGZ1bmN0aW9uKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKS82MDtyZXR1%0Acm4gbmV3IHRjKDM2ZTUqKE1hdGguZmxvb3Iobi8zNmU1LXQpK3QpKX0sZnVuY3Rp%0Ab24obix0KXtuLnNldFRpbWUobi5nZXRUaW1lKCkrMzZlNSpNYXRoLmZsb29yKHQp%0AKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLG5jLmhvdXJzPW5j%0ALmhvdXIucmFuZ2UsbmMuaG91cnMudXRjPW5jLmhvdXIudXRjLnJhbmdlLG5jLm1v%0AbnRoPVB0KGZ1bmN0aW9uKG4pe3JldHVybiBuPW5jLmRheShuKSxuLnNldERhdGUo%0AMSksbn0sZnVuY3Rpb24obix0KXtuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSt0KX0s%0AZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TW9udGgoKX0pLG5jLm1vbnRocz1uYy5t%0Ab250aC5yYW5nZSxuYy5tb250aHMudXRjPW5jLm1vbnRoLnV0Yy5yYW5nZTt2YXIg%0Aamw9WzFlMyw1ZTMsMTVlMywzZTQsNmU0LDNlNSw5ZTUsMThlNSwzNmU1LDEwOGU1%0ALDIxNmU1LDQzMmU1LDg2NGU1LDE3MjhlNSw2MDQ4ZTUsMjU5MmU2LDc3NzZlNiwz%0AMTUzNmU2XSxIbD1bW25jLnNlY29uZCwxXSxbbmMuc2Vjb25kLDVdLFtuYy5zZWNv%0AbmQsMTVdLFtuYy5zZWNvbmQsMzBdLFtuYy5taW51dGUsMV0sW25jLm1pbnV0ZSw1%0AXSxbbmMubWludXRlLDE1XSxbbmMubWludXRlLDMwXSxbbmMuaG91ciwxXSxbbmMu%0AaG91ciwzXSxbbmMuaG91ciw2XSxbbmMuaG91ciwxMl0sW25jLmRheSwxXSxbbmMu%0AZGF5LDJdLFtuYy53ZWVrLDFdLFtuYy5tb250aCwxXSxbbmMubW9udGgsM10sW25j%0ALnllYXIsMV1dLEZsPURsLm11bHRpKFtbIi4lTCIsZnVuY3Rpb24obil7cmV0dXJu%0AIG4uZ2V0TWlsbGlzZWNvbmRzKCl9XSxbIjolUyIsZnVuY3Rpb24obil7cmV0dXJu%0AIG4uZ2V0U2Vjb25kcygpfV0sWyIlSTolTSIsZnVuY3Rpb24obil7cmV0dXJuIG4u%0AZ2V0TWludXRlcygpfV0sWyIlSSAlcCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0%0ASG91cnMoKX1dLFsiJWEgJWQiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERheSgp%0AJiYxIT1uLmdldERhdGUoKX1dLFsiJWIgJWQiLGZ1bmN0aW9uKG4pe3JldHVybiAx%0AIT1uLmdldERhdGUoKX1dLFsiJUIiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1v%0AbnRoKCl9XSxbIiVZIixTZV1dKSxPbD17cmFuZ2U6ZnVuY3Rpb24obix0LGUpe3Jl%0AdHVybiBWby5yYW5nZShNYXRoLmNlaWwobi9lKSplLCt0LGUpLm1hcChZbyl9LGZs%0Ab29yOnd0LGNlaWw6d3R9O0hsLnllYXI9bmMueWVhcixuYy5zY2FsZT1mdW5jdGlv%0Abigpe3JldHVybiBPbyhWby5zY2FsZS5saW5lYXIoKSxIbCxGbCl9O3ZhciBZbD1I%0AbC5tYXAoZnVuY3Rpb24obil7cmV0dXJuW25bMF0udXRjLG5bMV1dfSksSWw9UGwu%0AbXVsdGkoW1siLiVMIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENNaWxsaXNl%0AY29uZHMoKX1dLFsiOiVTIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENTZWNv%0AbmRzKCl9XSxbIiVJOiVNIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENNaW51%0AdGVzKCl9XSxbIiVJICVwIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENIb3Vy%0AcygpfV0sWyIlYSAlZCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDRGF5KCkm%0AJjEhPW4uZ2V0VVRDRGF0ZSgpfV0sWyIlYiAlZCIsZnVuY3Rpb24obil7cmV0dXJu%0AIDEhPW4uZ2V0VVRDRGF0ZSgpfV0sWyIlQiIsZnVuY3Rpb24obil7cmV0dXJuIG4u%0AZ2V0VVRDTW9udGgoKX1dLFsiJVkiLFNlXV0pO1lsLnllYXI9bmMueWVhci51dGMs%0AbmMuc2NhbGUudXRjPWZ1bmN0aW9uKCl7cmV0dXJuIE9vKFZvLnNjYWxlLmxpbmVh%0AcigpLFlsLElsKX0sVm8udGV4dD1TdChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXNw%0Ab25zZVRleHR9KSxWby5qc29uPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGt0KG4sImFw%0AcGxpY2F0aW9uL2pzb24iLElvLHQpfSxWby5odG1sPWZ1bmN0aW9uKG4sdCl7cmV0%0AdXJuIGt0KG4sInRleHQvaHRtbCIsWm8sdCl9LFZvLnhtbD1TdChmdW5jdGlvbihu%0AKXtyZXR1cm4gbi5yZXNwb25zZVhNTH0pLCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZp%0AbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFZvKToib2JqZWN0Ij09dHlwZW9mIG1vZHVs%0AZSYmbW9kdWxlLmV4cG9ydHMmJihtb2R1bGUuZXhwb3J0cz1WbyksdGhpcy5kMz1W%0Ab30oKTs8L3NjcmlwdD4NCiAgICAgIDwhLS0gbWluaW1pemVkIGpxdWVyeSBqcyBs%0AaWJyYXJ5IC0tPg0KICAgICAgPHNjcmlwdD4vKiEgalF1ZXJ5IHYyLjEuMSB8IChj%0AKSAyMDA1LCAyMDE0IGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIHwganF1ZXJ5Lm9y%0AZy9saWNlbnNlICovCiFmdW5jdGlvbihhLGIpeyJvYmplY3QiPT10eXBlb2YgbW9k%0AdWxlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBv%0AcnRzPWEuZG9jdW1lbnQ/YihhLCEwKTpmdW5jdGlvbihhKXtpZighYS5kb2N1bWVu%0AdCl0aHJvdyBuZXcgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRo%0AIGEgZG9jdW1lbnQiKTtyZXR1cm4gYihhKX06YihhKX0oInVuZGVmaW5lZCIhPXR5%0AcGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxk%0APWMuc2xpY2UsZT1jLmNvbmNhdCxmPWMucHVzaCxnPWMuaW5kZXhPZixoPXt9LGk9%0AaC50b1N0cmluZyxqPWguaGFzT3duUHJvcGVydHksaz17fSxsPWEuZG9jdW1lbnQs%0AbT0iMi4xLjEiLG49ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IG4uZm4uaW5pdChh%0ALGIpfSxvPS9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZyxwPS9e%0ALW1zLS8scT0vLShbXGRhLXpdKS9naSxyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIu%0AdG9VcHBlckNhc2UoKX07bi5mbj1uLnByb3RvdHlwZT17anF1ZXJ5Om0sY29uc3Ry%0AdWN0b3I6bixzZWxlY3RvcjoiIixsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7%0AcmV0dXJuIGQuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBudWxs%0AIT1hPzA+YT90aGlzW2ErdGhpcy5sZW5ndGhdOnRoaXNbYV06ZC5jYWxsKHRoaXMp%0AfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSl7dmFyIGI9bi5tZXJnZSh0aGlzLmNvbnN0%0AcnVjdG9yKCksYSk7cmV0dXJuIGIucHJldk9iamVjdD10aGlzLGIuY29udGV4dD10%0AaGlzLmNvbnRleHQsYn0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBuLmVhY2go%0AdGhpcyxhLGIpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNr%0AKG4ubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0p%0AKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZC5hcHBs%0AeSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlz%0ALmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpm%0AdW5jdGlvbihhKXt2YXIgYj10aGlzLmxlbmd0aCxjPSthKygwPmE/YjowKTtyZXR1%0Acm4gdGhpcy5wdXNoU3RhY2soYz49MCYmYj5jP1t0aGlzW2NdXTpbXSl9LGVuZDpm%0AdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0%0Ab3IobnVsbCl9LHB1c2g6Zixzb3J0OmMuc29ydCxzcGxpY2U6Yy5zcGxpY2V9LG4u%0AZXh0ZW5kPW4uZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGc9%0AYXJndW1lbnRzWzBdfHx7fSxoPTEsaT1hcmd1bWVudHMubGVuZ3RoLGo9ITE7Zm9y%0AKCJib29sZWFuIj09dHlwZW9mIGcmJihqPWcsZz1hcmd1bWVudHNbaF18fHt9LGgr%0AKyksIm9iamVjdCI9PXR5cGVvZiBnfHxuLmlzRnVuY3Rpb24oZyl8fChnPXt9KSxo%0APT09aSYmKGc9dGhpcyxoLS0pO2k+aDtoKyspaWYobnVsbCE9KGE9YXJndW1lbnRz%0AW2hdKSlmb3IoYiBpbiBhKWM9Z1tiXSxkPWFbYl0sZyE9PWQmJihqJiZkJiYobi5p%0Ac1BsYWluT2JqZWN0KGQpfHwoZT1uLmlzQXJyYXkoZCkpKT8oZT8oZT0hMSxmPWMm%0AJm4uaXNBcnJheShjKT9jOltdKTpmPWMmJm4uaXNQbGFpbk9iamVjdChjKT9jOnt9%0ALGdbYl09bi5leHRlbmQoaixmLGQpKTp2b2lkIDAhPT1kJiYoZ1tiXT1kKSk7cmV0%0AdXJuIGd9LG4uZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhtK01hdGgucmFuZG9t%0AKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24o%0AYSl7dGhyb3cgbmV3IEVycm9yKGEpfSxub29wOmZ1bmN0aW9uKCl7fSxpc0Z1bmN0%0AaW9uOmZ1bmN0aW9uKGEpe3JldHVybiJmdW5jdGlvbiI9PT1uLnR5cGUoYSl9LGlz%0AQXJyYXk6QXJyYXkuaXNBcnJheSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4g%0AbnVsbCE9YSYmYT09PWEud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oYSl7cmV0%0AdXJuIW4uaXNBcnJheShhKSYmYS1wYXJzZUZsb2F0KGEpPj0wfSxpc1BsYWluT2Jq%0AZWN0OmZ1bmN0aW9uKGEpe3JldHVybiJvYmplY3QiIT09bi50eXBlKGEpfHxhLm5v%0AZGVUeXBlfHxuLmlzV2luZG93KGEpPyExOmEuY29uc3RydWN0b3ImJiFqLmNhbGwo%0AYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJvdG90eXBlT2YiKT8hMTohMH0s%0AaXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVy%0AbiExO3JldHVybiEwfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP2Er%0AIiI6Im9iamVjdCI9PXR5cGVvZiBhfHwiZnVuY3Rpb24iPT10eXBlb2YgYT9oW2ku%0AY2FsbChhKV18fCJvYmplY3QiOnR5cGVvZiBhfSxnbG9iYWxFdmFsOmZ1bmN0aW9u%0AKGEpe3ZhciBiLGM9ZXZhbDthPW4udHJpbShhKSxhJiYoMT09PWEuaW5kZXhPZigi%0AdXNlIHN0cmljdCIpPyhiPWwuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksYi50ZXh0%0APWEsbC5oZWFkLmFwcGVuZENoaWxkKGIpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo%0AYikpOmMoYSkpfSxjYW1lbENhc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFj%0AZShwLCJtcy0iKS5yZXBsYWNlKHEscil9LG5vZGVOYW1lOmZ1bmN0aW9uKGEsYil7%0AcmV0dXJuIGEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWIu%0AdG9Mb3dlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZT0wLGY9%0AYS5sZW5ndGgsZz1zKGEpO2lmKGMpe2lmKGcpe2Zvcig7Zj5lO2UrKylpZihkPWIu%0AYXBwbHkoYVtlXSxjKSxkPT09ITEpYnJlYWt9ZWxzZSBmb3IoZSBpbiBhKWlmKGQ9%0AYi5hcHBseShhW2VdLGMpLGQ9PT0hMSlicmVha31lbHNlIGlmKGcpe2Zvcig7Zj5l%0AO2UrKylpZihkPWIuY2FsbChhW2VdLGUsYVtlXSksZD09PSExKWJyZWFrfWVsc2Ug%0AZm9yKGUgaW4gYSlpZihkPWIuY2FsbChhW2VdLGUsYVtlXSksZD09PSExKWJyZWFr%0AO3JldHVybiBhfSx0cmltOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hPyIiOihh%0AKyIiKS5yZXBsYWNlKG8sIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oYSxiKXt2YXIg%0AYz1ifHxbXTtyZXR1cm4gbnVsbCE9YSYmKHMoT2JqZWN0KGEpKT9uLm1lcmdlKGMs%0AInN0cmluZyI9PXR5cGVvZiBhP1thXTphKTpmLmNhbGwoYyxhKSksY30saW5BcnJh%0AeTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGw9PWI/LTE6Zy5jYWxsKGIsYSxj%0AKX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9K2IubGVuZ3RoLGQ9MCxl%0APWEubGVuZ3RoO2M+ZDtkKyspYVtlKytdPWJbZF07cmV0dXJuIGEubGVuZ3RoPWUs%0AYX0sZ3JlcDpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkLGU9W10sZj0wLGc9YS5s%0AZW5ndGgsaD0hYztnPmY7ZisrKWQ9IWIoYVtmXSxmKSxkIT09aCYmZS5wdXNoKGFb%0AZl0pO3JldHVybiBlfSxtYXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9MCxnPWEu%0AbGVuZ3RoLGg9cyhhKSxpPVtdO2lmKGgpZm9yKDtnPmY7ZisrKWQ9YihhW2ZdLGYs%0AYyksbnVsbCE9ZCYmaS5wdXNoKGQpO2Vsc2UgZm9yKGYgaW4gYSlkPWIoYVtmXSxm%0ALGMpLG51bGwhPWQmJmkucHVzaChkKTtyZXR1cm4gZS5hcHBseShbXSxpKX0sZ3Vp%0AZDoxLHByb3h5OmZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmO3JldHVybiJzdHJpbmci%0APT10eXBlb2YgYiYmKGM9YVtiXSxiPWEsYT1jKSxuLmlzRnVuY3Rpb24oYSk/KGU9%0AZC5jYWxsKGFyZ3VtZW50cywyKSxmPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHko%0AYnx8dGhpcyxlLmNvbmNhdChkLmNhbGwoYXJndW1lbnRzKSkpfSxmLmd1aWQ9YS5n%0AdWlkPWEuZ3VpZHx8bi5ndWlkKyssZik6dm9pZCAwfSxub3c6RGF0ZS5ub3csc3Vw%0AcG9ydDprfSksbi5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24g%0AQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIi5zcGxpdCgiICIpLGZ1bmN0%0AaW9uKGEsYil7aFsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KTtm%0AdW5jdGlvbiBzKGEpe3ZhciBiPWEubGVuZ3RoLGM9bi50eXBlKGEpO3JldHVybiJm%0AdW5jdGlvbiI9PT1jfHxuLmlzV2luZG93KGEpPyExOjE9PT1hLm5vZGVUeXBlJiZi%0APyEwOiJhcnJheSI9PT1jfHwwPT09Ynx8Im51bWJlciI9PXR5cGVvZiBiJiZiPjAm%0AJmItMSBpbiBhfXZhciB0PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGks%0AaixrLGwsbSxuLG8scCxxLHIscyx0LHU9InNpenpsZSIrLW5ldyBEYXRlLHY9YS5k%0Ab2N1bWVudCx3PTAseD0wLHk9Z2IoKSx6PWdiKCksQT1nYigpLEI9ZnVuY3Rpb24o%0AYSxiKXtyZXR1cm4gYT09PWImJihsPSEwKSwwfSxDPSJ1bmRlZmluZWQiLEQ9MTw8%0AMzEsRT17fS5oYXNPd25Qcm9wZXJ0eSxGPVtdLEc9Ri5wb3AsSD1GLnB1c2gsST1G%0ALnB1c2gsSj1GLnNsaWNlLEs9Ri5pbmRleE9mfHxmdW5jdGlvbihhKXtmb3IodmFy%0AIGI9MCxjPXRoaXMubGVuZ3RoO2M+YjtiKyspaWYodGhpc1tiXT09PWEpcmV0dXJu%0AIGI7cmV0dXJuLTF9LEw9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3Vz%0AfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxs%0Ab29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixNPSJb%0AXFx4MjBcXHRcXHJcXG5cXGZdIixOPSIoPzpcXFxcLnxbXFx3LV18W15cXHgwMC1c%0AXHhhMF0pKyIsTz1OLnJlcGxhY2UoInciLCJ3IyIpLFA9IlxcWyIrTSsiKigiK04r%0AIikoPzoiK00rIiooWypeJHwhfl0/PSkiK00rIiooPzonKCg/OlxcXFwufFteXFxc%0AXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitPKyIpKXwpIitN%0AKyIqXFxdIixRPSI6KCIrTisiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkq%0AKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwo%0AKVtcXF1dfCIrUCsiKSopfC4qKVxcKXwpIixSPW5ldyBSZWdFeHAoIl4iK00rIit8%0AKCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTSsiKyQiLCJnIiksUz1uZXcgUmVn%0ARXhwKCJeIitNKyIqLCIrTSsiKiIpLFQ9bmV3IFJlZ0V4cCgiXiIrTSsiKihbPit+%0AXXwiK00rIikiK00rIioiKSxVPW5ldyBSZWdFeHAoIj0iK00rIiooW15cXF0nXCJd%0AKj8pIitNKyIqXFxdIiwiZyIpLFY9bmV3IFJlZ0V4cChRKSxXPW5ldyBSZWdFeHAo%0AIl4iK08rIiQiKSxYPXtJRDpuZXcgUmVnRXhwKCJeIygiK04rIikiKSxDTEFTUzpu%0AZXcgUmVnRXhwKCJeXFwuKCIrTisiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTi5y%0AZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrUCksUFNF%0AVURPOm5ldyBSZWdFeHAoIl4iK1EpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8%0AZmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIr%0ATSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCki%0AK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAo%0AIl4oPzoiK0wrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitN%0AKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpc%0AXCgiK00rIiooKD86LVxcZCk/XFxkKikiK00rIipcXCl8KSg/PVteLV18JCkiLCJp%0AIil9LFk9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxaPS9e%0AaFxkJC9pLCQ9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLF89L14oPzojKFtcdy1d%0AKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxhYj0vWyt+XS8sYmI9Lyd8XFwvZyxjYj1u%0AZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK00rIj98KCIrTSsiKXwuKSIs%0AImlnIiksZGI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIweCIrYi02NTUzNjtyZXR1%0Acm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpT%0AdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9O3Ry%0AeXtJLmFwcGx5KEY9Si5jYWxsKHYuY2hpbGROb2Rlcyksdi5jaGlsZE5vZGVzKSxG%0AW3YuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGViKXtJPXthcHBs%0AeTpGLmxlbmd0aD9mdW5jdGlvbihhLGIpe0guYXBwbHkoYSxKLmNhbGwoYikpfTpm%0AdW5jdGlvbihhLGIpe3ZhciBjPWEubGVuZ3RoLGQ9MDt3aGlsZShhW2MrK109Yltk%0AKytdKTthLmxlbmd0aD1jLTF9fX1mdW5jdGlvbiBmYihhLGIsZCxlKXt2YXIgZixo%0ALGosayxsLG8scixzLHcseDtpZigoYj9iLm93bmVyRG9jdW1lbnR8fGI6dikhPT1u%0AJiZtKGIpLGI9Ynx8bixkPWR8fFtdLCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0%0AdXJuIGQ7aWYoMSE9PShrPWIubm9kZVR5cGUpJiY5IT09aylyZXR1cm5bXTtpZihw%0AJiYhZSl7aWYoZj1fLmV4ZWMoYSkpaWYoaj1mWzFdKXtpZig5PT09ayl7aWYoaD1i%0ALmdldEVsZW1lbnRCeUlkKGopLCFofHwhaC5wYXJlbnROb2RlKXJldHVybiBkO2lm%0AKGguaWQ9PT1qKXJldHVybiBkLnB1c2goaCksZH1lbHNlIGlmKGIub3duZXJEb2N1%0AbWVudCYmKGg9Yi5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGopKSYmdChi%0ALGgpJiZoLmlkPT09ailyZXR1cm4gZC5wdXNoKGgpLGR9ZWxzZXtpZihmWzJdKXJl%0AdHVybiBJLmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSksZDtpZigo%0Aaj1mWzNdKSYmYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZiLmdldEVsZW1lbnRz%0AQnlDbGFzc05hbWUpcmV0dXJuIEkuYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFz%0Ac05hbWUoaikpLGR9aWYoYy5xc2EmJighcXx8IXEudGVzdChhKSkpe2lmKHM9cj11%0ALHc9Yix4PTk9PT1rJiZhLDE9PT1rJiYib2JqZWN0IiE9PWIubm9kZU5hbWUudG9M%0Ab3dlckNhc2UoKSl7bz1nKGEpLChyPWIuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXIu%0AcmVwbGFjZShiYiwiXFwkJiIpOmIuc2V0QXR0cmlidXRlKCJpZCIscykscz0iW2lk%0APSciK3MrIiddICIsbD1vLmxlbmd0aDt3aGlsZShsLS0pb1tsXT1zK3FiKG9bbF0p%0AO3c9YWIudGVzdChhKSYmb2IoYi5wYXJlbnROb2RlKXx8Yix4PW8uam9pbigiLCIp%0AfWlmKHgpdHJ5e3JldHVybiBJLmFwcGx5KGQsdy5xdWVyeVNlbGVjdG9yQWxsKHgp%0AKSxkfWNhdGNoKHkpe31maW5hbGx5e3J8fGIucmVtb3ZlQXR0cmlidXRlKCJpZCIp%0AfX19cmV0dXJuIGkoYS5yZXBsYWNlKFIsIiQxIiksYixkLGUpfWZ1bmN0aW9uIGdi%0AKCl7dmFyIGE9W107ZnVuY3Rpb24gYihjLGUpe3JldHVybiBhLnB1c2goYysiICIp%0APmQuY2FjaGVMZW5ndGgmJmRlbGV0ZSBiW2Euc2hpZnQoKV0sYltjKyIgIl09ZX1y%0AZXR1cm4gYn1mdW5jdGlvbiBoYihhKXtyZXR1cm4gYVt1XT0hMCxhfWZ1bmN0aW9u%0AIGliKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEh%0AYShiKX1jYXRjaChjKXtyZXR1cm4hMX1maW5hbGx5e2IucGFyZW50Tm9kZSYmYi5w%0AYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH19ZnVuY3Rpb24gamIoYSxi%0AKXt2YXIgYz1hLnNwbGl0KCJ8IiksZT1hLmxlbmd0aDt3aGlsZShlLS0pZC5hdHRy%0ASGFuZGxlW2NbZV1dPWJ9ZnVuY3Rpb24ga2IoYSxiKXt2YXIgYz1iJiZhLGQ9YyYm%0AMT09PWEubm9kZVR5cGUmJjE9PT1iLm5vZGVUeXBlJiYofmIuc291cmNlSW5kZXh8%0AfEQpLSh+YS5zb3VyY2VJbmRleHx8RCk7aWYoZClyZXR1cm4gZDtpZihjKXdoaWxl%0AKGM9Yy5uZXh0U2libGluZylpZihjPT09YilyZXR1cm4tMTtyZXR1cm4gYT8xOi0x%0AfWZ1bmN0aW9uIGxiKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVO%0AYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWMmJmIudHlwZT09PWF9%0AfWZ1bmN0aW9uIG1iKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVO%0AYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1jfHwiYnV0dG9uIj09%0APWMpJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBuYihhKXtyZXR1cm4gaGIoZnVuY3Rp%0Ab24oYil7cmV0dXJuIGI9K2IsaGIoZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEoW10s%0AYy5sZW5ndGgsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pY1tlPWZbZ11dJiYoY1tl%0AXT0hKGRbZV09Y1tlXSkpfSl9KX1mdW5jdGlvbiBvYihhKXtyZXR1cm4gYSYmdHlw%0AZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPT1DJiZhfWM9ZmIuc3VwcG9ydD17%0AfSxmPWZiLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJihhLm93bmVyRG9jdW1l%0AbnR8fGEpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj8iSFRNTCIhPT1iLm5vZGVO%0AYW1lOiExfSxtPWZiLnNldERvY3VtZW50PWZ1bmN0aW9uKGEpe3ZhciBiLGU9YT9h%0ALm93bmVyRG9jdW1lbnR8fGE6dixnPWUuZGVmYXVsdFZpZXc7cmV0dXJuIGUhPT1u%0AJiY5PT09ZS5ub2RlVHlwZSYmZS5kb2N1bWVudEVsZW1lbnQ/KG49ZSxvPWUuZG9j%0AdW1lbnRFbGVtZW50LHA9IWYoZSksZyYmZyE9PWcudG9wJiYoZy5hZGRFdmVudExp%0Ac3RlbmVyP2cuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixmdW5jdGlvbigpe20o%0AKX0sITEpOmcuYXR0YWNoRXZlbnQmJmcuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixm%0AdW5jdGlvbigpe20oKX0pKSxjLmF0dHJpYnV0ZXM9aWIoZnVuY3Rpb24oYSl7cmV0%0AdXJuIGEuY2xhc3NOYW1lPSJpIiwhYS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIp%0AfSksYy5nZXRFbGVtZW50c0J5VGFnTmFtZT1pYihmdW5jdGlvbihhKXtyZXR1cm4g%0AYS5hcHBlbmRDaGlsZChlLmNyZWF0ZUNvbW1lbnQoIiIpKSwhYS5nZXRFbGVtZW50%0Ac0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGMuZ2V0RWxlbWVudHNCeUNsYXNzTmFt%0AZT0kLnRlc3QoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSYmaWIoZnVuY3Rpb24o%0AYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSdhJz48L2Rpdj48ZGl2%0AIGNsYXNzPSdhIGknPjwvZGl2PiIsYS5maXJzdENoaWxkLmNsYXNzTmFtZT0iaSIs%0AMj09PWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaSIpLmxlbmd0aH0pLGMuZ2V0%0AQnlJZD1pYihmdW5jdGlvbihhKXtyZXR1cm4gby5hcHBlbmRDaGlsZChhKS5pZD11%0ALCFlLmdldEVsZW1lbnRzQnlOYW1lfHwhZS5nZXRFbGVtZW50c0J5TmFtZSh1KS5s%0AZW5ndGh9KSxjLmdldEJ5SWQ/KGQuZmluZC5JRD1mdW5jdGlvbihhLGIpe2lmKHR5%0AcGVvZiBiLmdldEVsZW1lbnRCeUlkIT09QyYmcCl7dmFyIGM9Yi5nZXRFbGVtZW50%0AQnlJZChhKTtyZXR1cm4gYyYmYy5wYXJlbnROb2RlP1tjXTpbXX19LGQuZmlsdGVy%0ALklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShjYixkYik7cmV0dXJuIGZ1%0AbmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaWQiKT09PWJ9fSk6KGRl%0AbGV0ZSBkLmZpbmQuSUQsZC5maWx0ZXIuSUQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5y%0AZXBsYWNlKGNiLGRiKTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGM9dHlwZW9mIGEu%0AZ2V0QXR0cmlidXRlTm9kZSE9PUMmJmEuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTty%0AZXR1cm4gYyYmYy52YWx1ZT09PWJ9fSksZC5maW5kLlRBRz1jLmdldEVsZW1lbnRz%0AQnlUYWdOYW1lP2Z1bmN0aW9uKGEsYil7cmV0dXJuIHR5cGVvZiBiLmdldEVsZW1l%0AbnRzQnlUYWdOYW1lIT09Qz9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOnZvaWQg%0AMH06ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9MCxmPWIuZ2V0RWxlbWVudHNC%0AeVRhZ05hbWUoYSk7aWYoIioiPT09YSl7d2hpbGUoYz1mW2UrK10pMT09PWMubm9k%0AZVR5cGUmJmQucHVzaChjKTtyZXR1cm4gZH1yZXR1cm4gZn0sZC5maW5kLkNMQVNT%0APWMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oYSxiKXtyZXR1cm4g%0AdHlwZW9mIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PUMmJnA/Yi5nZXRFbGVt%0AZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFzYT0kLnRl%0Ac3QoZS5xdWVyeVNlbGVjdG9yQWxsKSkmJihpYihmdW5jdGlvbihhKXthLmlubmVy%0ASFRNTD0iPHNlbGVjdCBtc2FsbG93Y2xpcD0nJz48b3B0aW9uIHNlbGVjdGVkPScn%0APjwvb3B0aW9uPjwvc2VsZWN0PiIsYS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxv%0Ad2NsaXBePScnXSIpLmxlbmd0aCYmcS5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xc%0AIlwiKSIpLGEucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8%0AcS5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK0wrIikiKSxhLnF1ZXJ5U2VsZWN0%0Ab3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxxLnB1c2goIjpjaGVja2VkIil9KSxp%0AYihmdW5jdGlvbihhKXt2YXIgYj1lLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Yi5z%0AZXRBdHRyaWJ1dGUoInR5cGUiLCJoaWRkZW4iKSxhLmFwcGVuZENoaWxkKGIpLnNl%0AdEF0dHJpYnV0ZSgibmFtZSIsIkQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1l%0APWRdIikubGVuZ3RoJiZxLnB1c2goIm5hbWUiK00rIipbKl4kfCF+XT89IiksYS5x%0AdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aHx8cS5wdXNoKCI6ZW5h%0AYmxlZCIsIjpkaXNhYmxlZCIpLGEucXVlcnlTZWxlY3RvckFsbCgiKiw6eCIpLHEu%0AcHVzaCgiLC4qOiIpfSkpLChjLm1hdGNoZXNTZWxlY3Rvcj0kLnRlc3Qocz1vLm1h%0AdGNoZXN8fG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxvLm1vek1hdGNoZXNTZWxl%0AY3Rvcnx8by5vTWF0Y2hlc1NlbGVjdG9yfHxvLm1zTWF0Y2hlc1NlbGVjdG9yKSkm%0AJmliKGZ1bmN0aW9uKGEpe2MuZGlzY29ubmVjdGVkTWF0Y2g9cy5jYWxsKGEsImRp%0AdiIpLHMuY2FsbChhLCJbcyE9JyddOngiKSxyLnB1c2goIiE9IixRKX0pLHE9cS5s%0AZW5ndGgmJm5ldyBSZWdFeHAocS5qb2luKCJ8IikpLHI9ci5sZW5ndGgmJm5ldyBS%0AZWdFeHAoci5qb2luKCJ8IikpLGI9JC50ZXN0KG8uY29tcGFyZURvY3VtZW50UG9z%0AaXRpb24pLHQ9Ynx8JC50ZXN0KG8uY29udGFpbnMpP2Z1bmN0aW9uKGEsYil7dmFy%0AIGM9OT09PWEubm9kZVR5cGU/YS5kb2N1bWVudEVsZW1lbnQ6YSxkPWImJmIucGFy%0AZW50Tm9kZTtyZXR1cm4gYT09PWR8fCEoIWR8fDEhPT1kLm5vZGVUeXBlfHwhKGMu%0AY29udGFpbnM/Yy5jb250YWlucyhkKTphLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9u%0AJiYxNiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQpKSl9OmZ1bmN0aW9uKGEs%0AYil7aWYoYil3aGlsZShiPWIucGFyZW50Tm9kZSlpZihiPT09YSlyZXR1cm4hMDty%0AZXR1cm4hMX0sQj1iP2Z1bmN0aW9uKGEsYil7aWYoYT09PWIpcmV0dXJuIGw9ITAs%0AMDt2YXIgZD0hYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hYi5jb21wYXJlRG9j%0AdW1lbnRQb3NpdGlvbjtyZXR1cm4gZD9kOihkPShhLm93bmVyRG9jdW1lbnR8fGEp%0APT09KGIub3duZXJEb2N1bWVudHx8Yik/YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlv%0AbihiKToxLDEmZHx8IWMuc29ydERldGFjaGVkJiZiLmNvbXBhcmVEb2N1bWVudFBv%0Ac2l0aW9uKGEpPT09ZD9hPT09ZXx8YS5vd25lckRvY3VtZW50PT09diYmdCh2LGEp%0APy0xOmI9PT1lfHxiLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYsYik/MTprP0suY2Fs%0AbChrLGEpLUsuY2FsbChrLGIpOjA6NCZkPy0xOjEpfTpmdW5jdGlvbihhLGIpe2lm%0AKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGMsZD0wLGY9YS5wYXJlbnROb2RlLGc9%0AYi5wYXJlbnROb2RlLGg9W2FdLGk9W2JdO2lmKCFmfHwhZylyZXR1cm4gYT09PWU/%0ALTE6Yj09PWU/MTpmPy0xOmc/MTprP0suY2FsbChrLGEpLUsuY2FsbChrLGIpOjA7%0AaWYoZj09PWcpcmV0dXJuIGtiKGEsYik7Yz1hO3doaWxlKGM9Yy5wYXJlbnROb2Rl%0AKWgudW5zaGlmdChjKTtjPWI7d2hpbGUoYz1jLnBhcmVudE5vZGUpaS51bnNoaWZ0%0AKGMpO3doaWxlKGhbZF09PT1pW2RdKWQrKztyZXR1cm4gZD9rYihoW2RdLGlbZF0p%0AOmhbZF09PT12Py0xOmlbZF09PT12PzE6MH0sZSk6bn0sZmIubWF0Y2hlcz1mdW5j%0AdGlvbihhLGIpe3JldHVybiBmYihhLG51bGwsbnVsbCxiKX0sZmIubWF0Y2hlc1Nl%0AbGVjdG9yPWZ1bmN0aW9uKGEsYil7aWYoKGEub3duZXJEb2N1bWVudHx8YSkhPT1u%0AJiZtKGEpLGI9Yi5yZXBsYWNlKFUsIj0nJDEnXSIpLCEoIWMubWF0Y2hlc1NlbGVj%0AdG9yfHwhcHx8ciYmci50ZXN0KGIpfHxxJiZxLnRlc3QoYikpKXRyeXt2YXIgZD1z%0ALmNhbGwoYSxiKTtpZihkfHxjLmRpc2Nvbm5lY3RlZE1hdGNofHxhLmRvY3VtZW50%0AJiYxMSE9PWEuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIGR9Y2F0Y2goZSl7fXJl%0AdHVybiBmYihiLG4sbnVsbCxbYV0pLmxlbmd0aD4wfSxmYi5jb250YWlucz1mdW5j%0AdGlvbihhLGIpe3JldHVybihhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKSx0%0AKGEsYil9LGZiLmF0dHI9ZnVuY3Rpb24oYSxiKXsoYS5vd25lckRvY3VtZW50fHxh%0AKSE9PW4mJm0oYSk7dmFyIGU9ZC5hdHRySGFuZGxlW2IudG9Mb3dlckNhc2UoKV0s%0AZj1lJiZFLmNhbGwoZC5hdHRySGFuZGxlLGIudG9Mb3dlckNhc2UoKSk/ZShhLGIs%0AIXApOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09Zj9mOmMuYXR0cmlidXRlc3x8IXA/%0AYS5nZXRBdHRyaWJ1dGUoYik6KGY9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSYmZi5z%0AcGVjaWZpZWQ/Zi52YWx1ZTpudWxsfSxmYi5lcnJvcj1mdW5jdGlvbihhKXt0aHJv%0AdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Np%0Ab246ICIrYSl9LGZiLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7dmFyIGIsZD1bXSxl%0APTAsZj0wO2lmKGw9IWMuZGV0ZWN0RHVwbGljYXRlcyxrPSFjLnNvcnRTdGFibGUm%0AJmEuc2xpY2UoMCksYS5zb3J0KEIpLGwpe3doaWxlKGI9YVtmKytdKWI9PT1hW2Zd%0AJiYoZT1kLnB1c2goZikpO3doaWxlKGUtLSlhLnNwbGljZShkW2VdLDEpfXJldHVy%0AbiBrPW51bGwsYX0sZT1mYi5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9IiIs%0AZD0wLGY9YS5ub2RlVHlwZTtpZihmKXtpZigxPT09Znx8OT09PWZ8fDExPT09Zil7%0AaWYoInN0cmluZyI9PXR5cGVvZiBhLnRleHRDb250ZW50KXJldHVybiBhLnRleHRD%0Ab250ZW50O2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyljKz1l%0AKGEpfWVsc2UgaWYoMz09PWZ8fDQ9PT1mKXJldHVybiBhLm5vZGVWYWx1ZX1lbHNl%0AIHdoaWxlKGI9YVtkKytdKWMrPWUoYik7cmV0dXJuIGN9LGQ9ZmIuc2VsZWN0b3Jz%0APXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86aGIsbWF0Y2g6WCxhdHRySGFu%0AZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixm%0AaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlv%0AdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9%0AfSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS5y%0AZXBsYWNlKGNiLGRiKSxhWzNdPShhWzNdfHxhWzRdfHxhWzVdfHwiIikucmVwbGFj%0AZShjYixkYiksIn49Ij09PWFbMl0mJihhWzNdPSIgIithWzNdKyIgIiksYS5zbGlj%0AZSgwLDQpfSxDSElMRDpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnRvTG93%0AZXJDYXNlKCksIm50aCI9PT1hWzFdLnNsaWNlKDAsMyk/KGFbM118fGZiLmVycm9y%0AKGFbMF0pLGFbNF09KyhhWzRdP2FbNV0rKGFbNl18fDEpOjIqKCJldmVuIj09PWFb%0AM118fCJvZGQiPT09YVszXSkpLGFbNV09KyhhWzddK2FbOF18fCJvZGQiPT09YVsz%0AXSkpOmFbM10mJmZiLmVycm9yKGFbMF0pLGF9LFBTRVVETzpmdW5jdGlvbihhKXt2%0AYXIgYixjPSFhWzZdJiZhWzJdO3JldHVybiBYLkNISUxELnRlc3QoYVswXSk/bnVs%0AbDooYVszXT9hWzJdPWFbNF18fGFbNV18fCIiOmMmJlYudGVzdChjKSYmKGI9Zyhj%0ALCEwKSkmJihiPWMuaW5kZXhPZigiKSIsYy5sZW5ndGgtYiktYy5sZW5ndGgpJiYo%0AYVswXT1hWzBdLnNsaWNlKDAsYiksYVsyXT1jLnNsaWNlKDAsYikpLGEuc2xpY2Uo%0AMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2Uo%0AY2IsZGIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09YT9mdW5jdGlvbigpe3Jl%0AdHVybiEwfTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFt%0AZS50b0xvd2VyQ2FzZSgpPT09Yn19LENMQVNTOmZ1bmN0aW9uKGEpe3ZhciBiPXlb%0AYSsiICJdO3JldHVybiBifHwoYj1uZXcgUmVnRXhwKCIoXnwiK00rIikiK2ErIigi%0AK00rInwkKSIpKSYmeShhLGZ1bmN0aW9uKGEpe3JldHVybiBiLnRlc3QoInN0cmlu%0AZyI9PXR5cGVvZiBhLmNsYXNzTmFtZSYmYS5jbGFzc05hbWV8fHR5cGVvZiBhLmdl%0AdEF0dHJpYnV0ZSE9PUMmJmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0s%0AQVRUUjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciBlPWZi%0ALmF0dHIoZCxhKTtyZXR1cm4gbnVsbD09ZT8iIT0iPT09YjpiPyhlKz0iIiwiPSI9%0APT1iP2U9PT1jOiIhPSI9PT1iP2UhPT1jOiJePSI9PT1iP2MmJjA9PT1lLmluZGV4%0AT2YoYyk6Iio9Ij09PWI/YyYmZS5pbmRleE9mKGMpPi0xOiIkPSI9PT1iP2MmJmUu%0Ac2xpY2UoLWMubGVuZ3RoKT09PWM6In49Ij09PWI/KCIgIitlKyIgIikuaW5kZXhP%0AZihjKT4tMToifD0iPT09Yj9lPT09Y3x8ZS5zbGljZSgwLGMubGVuZ3RoKzEpPT09%0AYysiLSI6ITEpOiEwfX0sQ0hJTEQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj0i%0AbnRoIiE9PWEuc2xpY2UoMCwzKSxnPSJsYXN0IiE9PWEuc2xpY2UoLTQpLGg9Im9m%0ALXR5cGUiPT09YjtyZXR1cm4gMT09PWQmJjA9PT1lP2Z1bmN0aW9uKGEpe3JldHVy%0AbiEhYS5wYXJlbnROb2RlfTpmdW5jdGlvbihiLGMsaSl7dmFyIGosayxsLG0sbixv%0ALHA9ZiE9PWc/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixxPWIucGFy%0AZW50Tm9kZSxyPWgmJmIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxzPSFpJiYhaDtp%0AZihxKXtpZihmKXt3aGlsZShwKXtsPWI7d2hpbGUobD1sW3BdKWlmKGg/bC5ub2Rl%0ATmFtZS50b0xvd2VyQ2FzZSgpPT09cjoxPT09bC5ub2RlVHlwZSlyZXR1cm4hMTtv%0APXA9Im9ubHkiPT09YSYmIW8mJiJuZXh0U2libGluZyJ9cmV0dXJuITB9aWYobz1b%0AZz9xLmZpcnN0Q2hpbGQ6cS5sYXN0Q2hpbGRdLGcmJnMpe2s9cVt1XXx8KHFbdV09%0Ae30pLGo9a1thXXx8W10sbj1qWzBdPT09dyYmalsxXSxtPWpbMF09PT13JiZqWzJd%0ALGw9biYmcS5jaGlsZE5vZGVzW25dO3doaWxlKGw9KytuJiZsJiZsW3BdfHwobT1u%0APTApfHxvLnBvcCgpKWlmKDE9PT1sLm5vZGVUeXBlJiYrK20mJmw9PT1iKXtrW2Fd%0APVt3LG4sbV07YnJlYWt9fWVsc2UgaWYocyYmKGo9KGJbdV18fChiW3VdPXt9KSlb%0AYV0pJiZqWzBdPT09dyltPWpbMV07ZWxzZSB3aGlsZShsPSsrbiYmbCYmbFtwXXx8%0AKG09bj0wKXx8by5wb3AoKSlpZigoaD9sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9%0APT1yOjE9PT1sLm5vZGVUeXBlKSYmKyttJiYocyYmKChsW3VdfHwobFt1XT17fSkp%0AW2FdPVt3LG1dKSxsPT09YikpYnJlYWs7cmV0dXJuIG0tPWUsbT09PWR8fG0lZD09%0APTAmJm0vZD49MH19fSxQU0VVRE86ZnVuY3Rpb24oYSxiKXt2YXIgYyxlPWQucHNl%0AdWRvc1thXXx8ZC5zZXRGaWx0ZXJzW2EudG9Mb3dlckNhc2UoKV18fGZiLmVycm9y%0AKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrYSk7cmV0dXJuIGVbdV0/ZShiKTplLmxl%0Abmd0aD4xPyhjPVthLGEsIiIsYl0sZC5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5%0AKGEudG9Mb3dlckNhc2UoKSk/aGIoZnVuY3Rpb24oYSxjKXt2YXIgZCxmPWUoYSxi%0AKSxnPWYubGVuZ3RoO3doaWxlKGctLSlkPUsuY2FsbChhLGZbZ10pLGFbZF09IShj%0AW2RdPWZbZ10pfSk6ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSwwLGMpfSk6ZX19LHBz%0AZXVkb3M6e25vdDpoYihmdW5jdGlvbihhKXt2YXIgYj1bXSxjPVtdLGQ9aChhLnJl%0AcGxhY2UoUiwiJDEiKSk7cmV0dXJuIGRbdV0/aGIoZnVuY3Rpb24oYSxiLGMsZSl7%0AdmFyIGYsZz1kKGEsbnVsbCxlLFtdKSxoPWEubGVuZ3RoO3doaWxlKGgtLSkoZj1n%0AW2hdKSYmKGFbaF09IShiW2hdPWYpKX0pOmZ1bmN0aW9uKGEsZSxmKXtyZXR1cm4g%0AYlswXT1hLGQoYixudWxsLGYsYyksIWMucG9wKCl9fSksaGFzOmhiKGZ1bmN0aW9u%0AKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZmIoYSxiKS5sZW5ndGg+MH19%0AKSxjb250YWluczpoYihmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0%0AdXJuKGIudGV4dENvbnRlbnR8fGIuaW5uZXJUZXh0fHxlKGIpKS5pbmRleE9mKGEp%0APi0xfX0pLGxhbmc6aGIoZnVuY3Rpb24oYSl7cmV0dXJuIFcudGVzdChhfHwiIil8%0AfGZiLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK2EpLGE9YS5yZXBsYWNlKGNi%0ALGRiKS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKGIpe3ZhciBjO2RvIGlmKGM9cD9i%0ALmxhbmc6Yi5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIil8fGIuZ2V0QXR0cmlidXRl%0AKCJsYW5nIikpcmV0dXJuIGM9Yy50b0xvd2VyQ2FzZSgpLGM9PT1hfHwwPT09Yy5p%0AbmRleE9mKGErIi0iKTt3aGlsZSgoYj1iLnBhcmVudE5vZGUpJiYxPT09Yi5ub2Rl%0AVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGIpe3ZhciBjPWEubG9j%0AYXRpb24mJmEubG9jYXRpb24uaGFzaDtyZXR1cm4gYyYmYy5zbGljZSgxKT09PWIu%0AaWR9LHJvb3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1vfSxmb2N1czpmdW5jdGlv%0AbihhKXtyZXR1cm4gYT09PW4uYWN0aXZlRWxlbWVudCYmKCFuLmhhc0ZvY3VzfHxu%0ALmhhc0ZvY3VzKCkpJiYhIShhLnR5cGV8fGEuaHJlZnx8fmEudGFiSW5kZXgpfSxl%0AbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITF9LGRpc2Fi%0AbGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6%0AZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVy%0AbiJpbnB1dCI9PT1iJiYhIWEuY2hlY2tlZHx8Im9wdGlvbiI9PT1iJiYhIWEuc2Vs%0AZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLnBhcmVudE5vZGUm%0AJmEucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LGEuc2VsZWN0ZWQ9PT0hMH0sZW1w%0AdHk6ZnVuY3Rpb24oYSl7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJs%0AaW5nKWlmKGEubm9kZVR5cGU8NilyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1%0AbmN0aW9uKGEpe3JldHVybiFkLnBzZXVkb3MuZW1wdHkoYSl9LGhlYWRlcjpmdW5j%0AdGlvbihhKXtyZXR1cm4gWi50ZXN0KGEubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlv%0AbihhKXtyZXR1cm4gWS50ZXN0KGEubm9kZU5hbWUpfSxidXR0b246ZnVuY3Rpb24o%0AYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9%0APT1iJiYiYnV0dG9uIj09PWEudHlwZXx8ImJ1dHRvbiI9PT1ifSx0ZXh0OmZ1bmN0%0AaW9uKGEpe3ZhciBiO3JldHVybiJpbnB1dCI9PT1hLm5vZGVOYW1lLnRvTG93ZXJD%0AYXNlKCkmJiJ0ZXh0Ij09PWEudHlwZSYmKG51bGw9PShiPWEuZ2V0QXR0cmlidXRl%0AKCJ0eXBlIikpfHwidGV4dCI9PT1iLnRvTG93ZXJDYXNlKCkpfSxmaXJzdDpuYihm%0AdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6bmIoZnVuY3Rpb24oYSxiKXtyZXR1%0Acm5bYi0xXX0pLGVxOm5iKGZ1bmN0aW9uKGEsYixjKXtyZXR1cm5bMD5jP2MrYjpj%0AXX0pLGV2ZW46bmIoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtiPmM7Yys9Milh%0ALnB1c2goYyk7cmV0dXJuIGF9KSxvZGQ6bmIoZnVuY3Rpb24oYSxiKXtmb3IodmFy%0AIGM9MTtiPmM7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxsdDpuYihmdW5jdGlv%0AbihhLGIsYyl7Zm9yKHZhciBkPTA+Yz9jK2I6YzstLWQ+PTA7KWEucHVzaChkKTty%0AZXR1cm4gYX0pLGd0Om5iKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MD5jP2Mr%0AYjpjOysrZDxiOylhLnB1c2goZCk7cmV0dXJuIGF9KX19LGQucHNldWRvcy5udGg9%0AZC5wc2V1ZG9zLmVxO2ZvcihiIGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6%0AITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KWQucHNldWRvc1tiXT1sYihiKTtmb3Io%0AYiBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KWQucHNldWRvc1tiXT1tYihiKTtmdW5j%0AdGlvbiBwYigpe31wYi5wcm90b3R5cGU9ZC5maWx0ZXJzPWQucHNldWRvcyxkLnNl%0AdEZpbHRlcnM9bmV3IHBiLGc9ZmIudG9rZW5pemU9ZnVuY3Rpb24oYSxiKXt2YXIg%0AYyxlLGYsZyxoLGksaixrPXpbYSsiICJdO2lmKGspcmV0dXJuIGI/MDprLnNsaWNl%0AKDApO2g9YSxpPVtdLGo9ZC5wcmVGaWx0ZXI7d2hpbGUoaCl7KCFjfHwoZT1TLmV4%0AZWMoaCkpKSYmKGUmJihoPWguc2xpY2UoZVswXS5sZW5ndGgpfHxoKSxpLnB1c2go%0AZj1bXSkpLGM9ITEsKGU9VC5leGVjKGgpKSYmKGM9ZS5zaGlmdCgpLGYucHVzaCh7%0AdmFsdWU6Yyx0eXBlOmVbMF0ucmVwbGFjZShSLCIgIil9KSxoPWguc2xpY2UoYy5s%0AZW5ndGgpKTtmb3IoZyBpbiBkLmZpbHRlcikhKGU9WFtnXS5leGVjKGgpKXx8altn%0AXSYmIShlPWpbZ10oZSkpfHwoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5%0AcGU6ZyxtYXRjaGVzOmV9KSxoPWguc2xpY2UoYy5sZW5ndGgpKTtpZighYylicmVh%0Aa31yZXR1cm4gYj9oLmxlbmd0aDpoP2ZiLmVycm9yKGEpOnooYSxpKS5zbGljZSgw%0AKX07ZnVuY3Rpb24gcWIoYSl7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aCxkPSIiO2M+%0AYjtiKyspZCs9YVtiXS52YWx1ZTtyZXR1cm4gZH1mdW5jdGlvbiByYihhLGIsYyl7%0AdmFyIGQ9Yi5kaXIsZT1jJiYicGFyZW50Tm9kZSI9PT1kLGY9eCsrO3JldHVybiBi%0ALmZpcnN0P2Z1bmN0aW9uKGIsYyxmKXt3aGlsZShiPWJbZF0paWYoMT09PWIubm9k%0AZVR5cGV8fGUpcmV0dXJuIGEoYixjLGYpfTpmdW5jdGlvbihiLGMsZyl7dmFyIGgs%0AaSxqPVt3LGZdO2lmKGcpe3doaWxlKGI9YltkXSlpZigoMT09PWIubm9kZVR5cGV8%0AfGUpJiZhKGIsYyxnKSlyZXR1cm4hMH1lbHNlIHdoaWxlKGI9YltkXSlpZigxPT09%0AYi5ub2RlVHlwZXx8ZSl7aWYoaT1iW3VdfHwoYlt1XT17fSksKGg9aVtkXSkmJmhb%0AMF09PT13JiZoWzFdPT09ZilyZXR1cm4galsyXT1oWzJdO2lmKGlbZF09aixqWzJd%0APWEoYixjLGcpKXJldHVybiEwfX19ZnVuY3Rpb24gc2IoYSl7cmV0dXJuIGEubGVu%0AZ3RoPjE/ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWEubGVuZ3RoO3doaWxlKGUtLSlp%0AZighYVtlXShiLGMsZCkpcmV0dXJuITE7cmV0dXJuITB9OmFbMF19ZnVuY3Rpb24g%0AdGIoYSxiLGMpe2Zvcih2YXIgZD0wLGU9Yi5sZW5ndGg7ZT5kO2QrKylmYihhLGJb%0AZF0sYyk7cmV0dXJuIGN9ZnVuY3Rpb24gdWIoYSxiLGMsZCxlKXtmb3IodmFyIGYs%0AZz1bXSxoPTAsaT1hLmxlbmd0aCxqPW51bGwhPWI7aT5oO2grKykoZj1hW2hdKSYm%0AKCFjfHxjKGYsZCxlKSkmJihnLnB1c2goZiksaiYmYi5wdXNoKGgpKTtyZXR1cm4g%0AZ31mdW5jdGlvbiB2YihhLGIsYyxkLGUsZil7cmV0dXJuIGQmJiFkW3VdJiYoZD12%0AYihkKSksZSYmIWVbdV0mJihlPXZiKGUsZikpLGhiKGZ1bmN0aW9uKGYsZyxoLGkp%0Ae3ZhciBqLGssbCxtPVtdLG49W10sbz1nLmxlbmd0aCxwPWZ8fHRiKGJ8fCIqIixo%0ALm5vZGVUeXBlP1toXTpoLFtdKSxxPSFhfHwhZiYmYj9wOnViKHAsbSxhLGgsaSks%0Acj1jP2V8fChmP2E6b3x8ZCk/W106ZzpxO2lmKGMmJmMocSxyLGgsaSksZCl7aj11%0AYihyLG4pLGQoaixbXSxoLGkpLGs9ai5sZW5ndGg7d2hpbGUoay0tKShsPWpba10p%0AJiYocltuW2tdXT0hKHFbbltrXV09bCkpfWlmKGYpe2lmKGV8fGEpe2lmKGUpe2o9%0AW10saz1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkmJmoucHVzaChxW2tdPWwp%0AO2UobnVsbCxyPVtdLGosaSl9az1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkm%0AJihqPWU/Sy5jYWxsKGYsbCk6bVtrXSk+LTEmJihmW2pdPSEoZ1tqXT1sKSl9fWVs%0Ac2Ugcj11YihyPT09Zz9yLnNwbGljZShvLHIubGVuZ3RoKTpyKSxlP2UobnVsbCxn%0ALHIsaSk6SS5hcHBseShnLHIpfSl9ZnVuY3Rpb24gd2IoYSl7Zm9yKHZhciBiLGMs%0AZSxmPWEubGVuZ3RoLGc9ZC5yZWxhdGl2ZVthWzBdLnR5cGVdLGg9Z3x8ZC5yZWxh%0AdGl2ZVsiICJdLGk9Zz8xOjAsaz1yYihmdW5jdGlvbihhKXtyZXR1cm4gYT09PWJ9%0ALGgsITApLGw9cmIoZnVuY3Rpb24oYSl7cmV0dXJuIEsuY2FsbChiLGEpPi0xfSxo%0ALCEwKSxtPVtmdW5jdGlvbihhLGMsZCl7cmV0dXJuIWcmJihkfHxjIT09ail8fCgo%0AYj1jKS5ub2RlVHlwZT9rKGEsYyxkKTpsKGEsYyxkKSl9XTtmPmk7aSsrKWlmKGM9%0AZC5yZWxhdGl2ZVthW2ldLnR5cGVdKW09W3JiKHNiKG0pLGMpXTtlbHNle2lmKGM9%0AZC5maWx0ZXJbYVtpXS50eXBlXS5hcHBseShudWxsLGFbaV0ubWF0Y2hlcyksY1t1%0AXSl7Zm9yKGU9KytpO2Y+ZTtlKyspaWYoZC5yZWxhdGl2ZVthW2VdLnR5cGVdKWJy%0AZWFrO3JldHVybiB2YihpPjEmJnNiKG0pLGk+MSYmcWIoYS5zbGljZSgwLGktMSku%0AY29uY2F0KHt2YWx1ZToiICI9PT1hW2ktMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFj%0AZShSLCIkMSIpLGMsZT5pJiZ3YihhLnNsaWNlKGksZSkpLGY+ZSYmd2IoYT1hLnNs%0AaWNlKGUpKSxmPmUmJnFiKGEpKX1tLnB1c2goYyl9cmV0dXJuIHNiKG0pfWZ1bmN0%0AaW9uIHhiKGEsYil7dmFyIGM9Yi5sZW5ndGg+MCxlPWEubGVuZ3RoPjAsZj1mdW5j%0AdGlvbihmLGcsaCxpLGspe3ZhciBsLG0sbyxwPTAscT0iMCIscj1mJiZbXSxzPVtd%0ALHQ9aix1PWZ8fGUmJmQuZmluZC5UQUcoIioiLGspLHY9dys9bnVsbD09dD8xOk1h%0AdGgucmFuZG9tKCl8fC4xLHg9dS5sZW5ndGg7Zm9yKGsmJihqPWchPT1uJiZnKTtx%0AIT09eCYmbnVsbCE9KGw9dVtxXSk7cSsrKXtpZihlJiZsKXttPTA7d2hpbGUobz1h%0AW20rK10paWYobyhsLGcsaCkpe2kucHVzaChsKTticmVha31rJiYodz12KX1jJiYo%0AKGw9IW8mJmwpJiZwLS0sZiYmci5wdXNoKGwpKX1pZihwKz1xLGMmJnEhPT1wKXtt%0APTA7d2hpbGUobz1iW20rK10pbyhyLHMsZyxoKTtpZihmKXtpZihwPjApd2hpbGUo%0AcS0tKXJbcV18fHNbcV18fChzW3FdPUcuY2FsbChpKSk7cz11YihzKX1JLmFwcGx5%0AKGkscyksayYmIWYmJnMubGVuZ3RoPjAmJnArYi5sZW5ndGg+MSYmZmIudW5pcXVl%0AU29ydChpKX1yZXR1cm4gayYmKHc9dixqPXQpLHJ9O3JldHVybiBjP2hiKGYpOmZ9%0AcmV0dXJuIGg9ZmIuY29tcGlsZT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1b%0AXSxmPUFbYSsiICJdO2lmKCFmKXtifHwoYj1nKGEpKSxjPWIubGVuZ3RoO3doaWxl%0AKGMtLSlmPXdiKGJbY10pLGZbdV0/ZC5wdXNoKGYpOmUucHVzaChmKTtmPUEoYSx4%0AYihlLGQpKSxmLnNlbGVjdG9yPWF9cmV0dXJuIGZ9LGk9ZmIuc2VsZWN0PWZ1bmN0%0AaW9uKGEsYixlLGYpe3ZhciBpLGosayxsLG0sbj0iZnVuY3Rpb24iPT10eXBlb2Yg%0AYSYmYSxvPSFmJiZnKGE9bi5zZWxlY3Rvcnx8YSk7aWYoZT1lfHxbXSwxPT09by5s%0AZW5ndGgpe2lmKGo9b1swXT1vWzBdLnNsaWNlKDApLGoubGVuZ3RoPjImJiJJRCI9%0APT0oaz1qWzBdKS50eXBlJiZjLmdldEJ5SWQmJjk9PT1iLm5vZGVUeXBlJiZwJiZk%0ALnJlbGF0aXZlW2pbMV0udHlwZV0pe2lmKGI9KGQuZmluZC5JRChrLm1hdGNoZXNb%0AMF0ucmVwbGFjZShjYixkYiksYil8fFtdKVswXSwhYilyZXR1cm4gZTtuJiYoYj1i%0ALnBhcmVudE5vZGUpLGE9YS5zbGljZShqLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1p%0APVgubmVlZHNDb250ZXh0LnRlc3QoYSk/MDpqLmxlbmd0aDt3aGlsZShpLS0pe2lm%0AKGs9altpXSxkLnJlbGF0aXZlW2w9ay50eXBlXSlicmVhaztpZigobT1kLmZpbmRb%0AbF0pJiYoZj1tKGsubWF0Y2hlc1swXS5yZXBsYWNlKGNiLGRiKSxhYi50ZXN0KGpb%0AMF0udHlwZSkmJm9iKGIucGFyZW50Tm9kZSl8fGIpKSl7aWYoai5zcGxpY2UoaSwx%0AKSxhPWYubGVuZ3RoJiZxYihqKSwhYSlyZXR1cm4gSS5hcHBseShlLGYpLGU7YnJl%0AYWt9fX1yZXR1cm4obnx8aChhLG8pKShmLGIsIXAsZSxhYi50ZXN0KGEpJiZvYihi%0ALnBhcmVudE5vZGUpfHxiKSxlfSxjLnNvcnRTdGFibGU9dS5zcGxpdCgiIikuc29y%0AdChCKS5qb2luKCIiKT09PXUsYy5kZXRlY3REdXBsaWNhdGVzPSEhbCxtKCksYy5z%0Ab3J0RGV0YWNoZWQ9aWIoZnVuY3Rpb24oYSl7cmV0dXJuIDEmYS5jb21wYXJlRG9j%0AdW1lbnRQb3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLGliKGZ1bmN0%0AaW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMi%0APT09YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGpiKCJ0eXBl%0AfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9p%0AZCAwOmEuZ2V0QXR0cmlidXRlKGIsInR5cGUiPT09Yi50b0xvd2VyQ2FzZSgpPzE6%0AMil9KSxjLmF0dHJpYnV0ZXMmJmliKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVy%0ASFRNTD0iPGlucHV0Lz4iLGEuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVl%0AIiwiIiksIiI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8%0AfGpiKCJ2YWx1ZSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjfHwiaW5wdXQiIT09%0AYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP3ZvaWQgMDphLmRlZmF1bHRWYWx1ZX0p%0ALGliKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hLmdldEF0dHJpYnV0ZSgiZGlz%0AYWJsZWQiKX0pfHxqYihMLGZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gYz92%0Ab2lkIDA6YVtiXT09PSEwP2IudG9Mb3dlckNhc2UoKTooZD1hLmdldEF0dHJpYnV0%0AZU5vZGUoYikpJiZkLnNwZWNpZmllZD9kLnZhbHVlOm51bGx9KSxmYn0oYSk7bi5m%0AaW5kPXQsbi5leHByPXQuc2VsZWN0b3JzLG4uZXhwclsiOiJdPW4uZXhwci5wc2V1%0AZG9zLG4udW5pcXVlPXQudW5pcXVlU29ydCxuLnRleHQ9dC5nZXRUZXh0LG4uaXNY%0ATUxEb2M9dC5pc1hNTCxuLmNvbnRhaW5zPXQuY29udGFpbnM7dmFyIHU9bi5leHBy%0ALm1hdGNoLm5lZWRzQ29udGV4dCx2PS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwp%0AJC8sdz0vXi5bXjojXFtcLixdKiQvO2Z1bmN0aW9uIHgoYSxiLGMpe2lmKG4uaXNG%0AdW5jdGlvbihiKSlyZXR1cm4gbi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4h%0AIWIuY2FsbChhLGQsYSkhPT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gbi5ncmVw%0AKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1iIT09Y30pO2lmKCJzdHJpbmciPT10%0AeXBlb2YgYil7aWYody50ZXN0KGIpKXJldHVybiBuLmZpbHRlcihiLGEsYyk7Yj1u%0ALmZpbHRlcihiLGEpfXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4g%0AZy5jYWxsKGIsYSk+PTAhPT1jfSl9bi5maWx0ZXI9ZnVuY3Rpb24oYSxiLGMpe3Zh%0AciBkPWJbMF07cmV0dXJuIGMmJihhPSI6bm90KCIrYSsiKSIpLDE9PT1iLmxlbmd0%0AaCYmMT09PWQubm9kZVR5cGU/bi5maW5kLm1hdGNoZXNTZWxlY3RvcihkLGEpP1tk%0AXTpbXTpuLmZpbmQubWF0Y2hlcyhhLG4uZ3JlcChiLGZ1bmN0aW9uKGEpe3JldHVy%0AbiAxPT09YS5ub2RlVHlwZX0pKX0sbi5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24o%0AYSl7dmFyIGIsYz10aGlzLmxlbmd0aCxkPVtdLGU9dGhpcztpZigic3RyaW5nIiE9%0AdHlwZW9mIGEpcmV0dXJuIHRoaXMucHVzaFN0YWNrKG4oYSkuZmlsdGVyKGZ1bmN0%0AaW9uKCl7Zm9yKGI9MDtjPmI7YisrKWlmKG4uY29udGFpbnMoZVtiXSx0aGlzKSly%0AZXR1cm4hMH0pKTtmb3IoYj0wO2M+YjtiKyspbi5maW5kKGEsZVtiXSxkKTtyZXR1%0Acm4gZD10aGlzLnB1c2hTdGFjayhjPjE/bi51bmlxdWUoZCk6ZCksZC5zZWxlY3Rv%0Acj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2E6YSxkfSxmaWx0ZXI6%0AZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgodGhpcyxhfHxbXSwh%0AMSkpfSxub3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgodGhp%0AcyxhfHxbXSwhMCkpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIXgodGhpcywic3Ry%0AaW5nIj09dHlwZW9mIGEmJnUudGVzdChhKT9uKGEpOmF8fFtdLCExKS5sZW5ndGh9%0AfSk7dmFyIHksej0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQv%0ALEE9bi5mbi5pbml0PWZ1bmN0aW9uKGEsYil7dmFyIGMsZDtpZighYSlyZXR1cm4g%0AdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGEpe2lmKGM9IjwiPT09YVswXSYmIj4i%0APT09YVthLmxlbmd0aC0xXSYmYS5sZW5ndGg+PTM/W251bGwsYSxudWxsXTp6LmV4%0AZWMoYSksIWN8fCFjWzFdJiZiKXJldHVybiFifHxiLmpxdWVyeT8oYnx8eSkuZmlu%0AZChhKTp0aGlzLmNvbnN0cnVjdG9yKGIpLmZpbmQoYSk7aWYoY1sxXSl7aWYoYj1i%0AIGluc3RhbmNlb2Ygbj9iWzBdOmIsbi5tZXJnZSh0aGlzLG4ucGFyc2VIVE1MKGNb%0AMV0sYiYmYi5ub2RlVHlwZT9iLm93bmVyRG9jdW1lbnR8fGI6bCwhMCkpLHYudGVz%0AdChjWzFdKSYmbi5pc1BsYWluT2JqZWN0KGIpKWZvcihjIGluIGIpbi5pc0Z1bmN0%0AaW9uKHRoaXNbY10pP3RoaXNbY10oYltjXSk6dGhpcy5hdHRyKGMsYltjXSk7cmV0%0AdXJuIHRoaXN9cmV0dXJuIGQ9bC5nZXRFbGVtZW50QnlJZChjWzJdKSxkJiZkLnBh%0AcmVudE5vZGUmJih0aGlzLmxlbmd0aD0xLHRoaXNbMF09ZCksdGhpcy5jb250ZXh0%0APWwsdGhpcy5zZWxlY3Rvcj1hLHRoaXN9cmV0dXJuIGEubm9kZVR5cGU/KHRoaXMu%0AY29udGV4dD10aGlzWzBdPWEsdGhpcy5sZW5ndGg9MSx0aGlzKTpuLmlzRnVuY3Rp%0Ab24oYSk/InVuZGVmaW5lZCIhPXR5cGVvZiB5LnJlYWR5P3kucmVhZHkoYSk6YShu%0AKToodm9pZCAwIT09YS5zZWxlY3RvciYmKHRoaXMuc2VsZWN0b3I9YS5zZWxlY3Rv%0Acix0aGlzLmNvbnRleHQ9YS5jb250ZXh0KSxuLm1ha2VBcnJheShhLHRoaXMpKX07%0AQS5wcm90b3R5cGU9bi5mbix5PW4obCk7dmFyIEI9L14oPzpwYXJlbnRzfHByZXYo%0APzpVbnRpbHxBbGwpKS8sQz17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDoh%0AMCxwcmV2OiEwfTtuLmV4dGVuZCh7ZGlyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1b%0AXSxlPXZvaWQgMCE9PWM7d2hpbGUoKGE9YVtiXSkmJjkhPT1hLm5vZGVUeXBlKWlm%0AKDE9PT1hLm5vZGVUeXBlKXtpZihlJiZuKGEpLmlzKGMpKWJyZWFrO2QucHVzaChh%0AKX1yZXR1cm4gZH0sc2libGluZzpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXTth%0AO2E9YS5uZXh0U2libGluZykxPT09YS5ub2RlVHlwZSYmYSE9PWImJmMucHVzaChh%0AKTtyZXR1cm4gY319KSxuLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGEpe3ZhciBi%0APW4oYSx0aGlzKSxjPWIubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlv%0Abigpe2Zvcih2YXIgYT0wO2M+YTthKyspaWYobi5jb250YWlucyh0aGlzLGJbYV0p%0AKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD0w%0ALGU9dGhpcy5sZW5ndGgsZj1bXSxnPXUudGVzdChhKXx8InN0cmluZyIhPXR5cGVv%0AZiBhP24oYSxifHx0aGlzLmNvbnRleHQpOjA7ZT5kO2QrKylmb3IoYz10aGlzW2Rd%0AO2MmJmMhPT1iO2M9Yy5wYXJlbnROb2RlKWlmKGMubm9kZVR5cGU8MTEmJihnP2cu%0AaW5kZXgoYyk+LTE6MT09PWMubm9kZVR5cGUmJm4uZmluZC5tYXRjaGVzU2VsZWN0%0Ab3IoYyxhKSkpe2YucHVzaChjKTticmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2so%0AZi5sZW5ndGg+MT9uLnVuaXF1ZShmKTpmKX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0%0AdXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP2cuY2FsbChuKGEpLHRoaXNbMF0pOmcu%0AY2FsbCh0aGlzLGEuanF1ZXJ5P2FbMF06YSk6dGhpc1swXSYmdGhpc1swXS5wYXJl%0AbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVu%0AY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobi51bmlxdWUobi5tZXJn%0AZSh0aGlzLmdldCgpLG4oYSxiKSkpKX0sYWRkQmFjazpmdW5jdGlvbihhKXtyZXR1%0Acm4gdGhpcy5hZGQobnVsbD09YT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2Jq%0AZWN0LmZpbHRlcihhKSl9fSk7ZnVuY3Rpb24gRChhLGIpe3doaWxlKChhPWFbYl0p%0AJiYxIT09YS5ub2RlVHlwZSk7cmV0dXJuIGF9bi5lYWNoKHtwYXJlbnQ6ZnVuY3Rp%0Ab24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiYxMSE9PWIubm9kZVR5%0AcGU/YjpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBuLmRpcihhLCJw%0AYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJu%0AIG4uZGlyKGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVy%0AbiBEKGEsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIEQo%0AYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJu%0AIG4uZGlyKGEsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oYSl7cmV0%0AdXJuIG4uZGlyKGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rp%0Ab24oYSxiLGMpe3JldHVybiBuLmRpcihhLCJuZXh0U2libGluZyIsYyl9LHByZXZV%0AbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG4uZGlyKGEsInByZXZpb3VzU2li%0AbGluZyIsYyl9LHNpYmxpbmdzOmZ1bmN0aW9uKGEpe3JldHVybiBuLnNpYmxpbmco%0AKGEucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1bmN0%0AaW9uKGEpe3JldHVybiBuLnNpYmxpbmcoYS5maXJzdENoaWxkKX0sY29udGVudHM6%0AZnVuY3Rpb24oYSl7cmV0dXJuIGEuY29udGVudERvY3VtZW50fHxuLm1lcmdlKFtd%0ALGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe24uZm5bYV09ZnVuY3Rpb24o%0AYyxkKXt2YXIgZT1uLm1hcCh0aGlzLGIsYyk7cmV0dXJuIlVudGlsIiE9PWEuc2xp%0AY2UoLTUpJiYoZD1jKSxkJiYic3RyaW5nIj09dHlwZW9mIGQmJihlPW4uZmlsdGVy%0AKGQsZSkpLHRoaXMubGVuZ3RoPjEmJihDW2FdfHxuLnVuaXF1ZShlKSxCLnRlc3Qo%0AYSkmJmUucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhlKX19KTt2YXIgRT0vXFMr%0AL2csRj17fTtmdW5jdGlvbiBHKGEpe3ZhciBiPUZbYV09e307cmV0dXJuIG4uZWFj%0AaChhLm1hdGNoKEUpfHxbXSxmdW5jdGlvbihhLGMpe2JbY109ITB9KSxifW4uQ2Fs%0AbGJhY2tzPWZ1bmN0aW9uKGEpe2E9InN0cmluZyI9PXR5cGVvZiBhP0ZbYV18fEco%0AYSk6bi5leHRlbmQoe30sYSk7dmFyIGIsYyxkLGUsZixnLGg9W10saT0hYS5vbmNl%0AJiZbXSxqPWZ1bmN0aW9uKGwpe2ZvcihiPWEubWVtb3J5JiZsLGM9ITAsZz1lfHww%0ALGU9MCxmPWgubGVuZ3RoLGQ9ITA7aCYmZj5nO2crKylpZihoW2ddLmFwcGx5KGxb%0AMF0sbFsxXSk9PT0hMSYmYS5zdG9wT25GYWxzZSl7Yj0hMTticmVha31kPSExLGgm%0AJihpP2kubGVuZ3RoJiZqKGkuc2hpZnQoKSk6Yj9oPVtdOmsuZGlzYWJsZSgpKX0s%0Aaz17YWRkOmZ1bmN0aW9uKCl7aWYoaCl7dmFyIGM9aC5sZW5ndGg7IWZ1bmN0aW9u%0AIGcoYil7bi5lYWNoKGIsZnVuY3Rpb24oYixjKXt2YXIgZD1uLnR5cGUoYyk7ImZ1%0AbmN0aW9uIj09PWQ/YS51bmlxdWUmJmsuaGFzKGMpfHxoLnB1c2goYyk6YyYmYy5s%0AZW5ndGgmJiJzdHJpbmciIT09ZCYmZyhjKX0pfShhcmd1bWVudHMpLGQ/Zj1oLmxl%0Abmd0aDpiJiYoZT1jLGooYikpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24o%0AKXtyZXR1cm4gaCYmbi5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihhLGIpe3ZhciBj%0AO3doaWxlKChjPW4uaW5BcnJheShiLGgsYykpPi0xKWguc3BsaWNlKGMsMSksZCYm%0AKGY+PWMmJmYtLSxnPj1jJiZnLS0pfSksdGhpc30saGFzOmZ1bmN0aW9uKGEpe3Jl%0AdHVybiBhP24uaW5BcnJheShhLGgpPi0xOiEoIWh8fCFoLmxlbmd0aCl9LGVtcHR5%0AOmZ1bmN0aW9uKCl7cmV0dXJuIGg9W10sZj0wLHRoaXN9LGRpc2FibGU6ZnVuY3Rp%0Ab24oKXtyZXR1cm4gaD1pPWI9dm9pZCAwLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9u%0AKCl7cmV0dXJuIWh9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gaT12b2lkIDAsYnx8%0Aay5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWl9LGZp%0AcmVXaXRoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIWh8fGMmJiFpfHwoYj1ifHxbXSxi%0APVthLGIuc2xpY2U/Yi5zbGljZSgpOmJdLGQ/aS5wdXNoKGIpOmooYikpLHRoaXN9%0ALGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gay5maXJlV2l0aCh0aGlzLGFyZ3VtZW50%0AcyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWN9fTtyZXR1cm4ga30s%0Abi5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGEpe3ZhciBiPVtbInJlc29sdmUi%0ALCJkb25lIixuLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVzb2x2ZWQiXSxb%0AInJlamVjdCIsImZhaWwiLG4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWpl%0AY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLG4uQ2FsbGJhY2tzKCJtZW1vcnki%0AKV1dLGM9InBlbmRpbmciLGQ9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGFs%0Ad2F5czpmdW5jdGlvbigpe3JldHVybiBlLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFy%0AZ3VtZW50cyksdGhpc30sdGhlbjpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50czty%0AZXR1cm4gbi5EZWZlcnJlZChmdW5jdGlvbihjKXtuLmVhY2goYixmdW5jdGlvbihi%0ALGYpe3ZhciBnPW4uaXNGdW5jdGlvbihhW2JdKSYmYVtiXTtlW2ZbMV1dKGZ1bmN0%0AaW9uKCl7dmFyIGE9ZyYmZy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7YSYmbi5pc0Z1%0AbmN0aW9uKGEucHJvbWlzZSk/YS5wcm9taXNlKCkuZG9uZShjLnJlc29sdmUpLmZh%0AaWwoYy5yZWplY3QpLnByb2dyZXNzKGMubm90aWZ5KTpjW2ZbMF0rIldpdGgiXSh0%0AaGlzPT09ZD9jLnByb21pc2UoKTp0aGlzLGc/W2FdOmFyZ3VtZW50cyl9KX0pLGE9%0AbnVsbH0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVs%0AbCE9YT9uLmV4dGVuZChhLGQpOmR9fSxlPXt9O3JldHVybiBkLnBpcGU9ZC50aGVu%0ALG4uZWFjaChiLGZ1bmN0aW9uKGEsZil7dmFyIGc9ZlsyXSxoPWZbM107ZFtmWzFd%0AXT1nLmFkZCxoJiZnLmFkZChmdW5jdGlvbigpe2M9aH0sYlsxXmFdWzJdLmRpc2Fi%0AbGUsYlsyXVsyXS5sb2NrKSxlW2ZbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIGVbZlsw%0AXSsiV2l0aCJdKHRoaXM9PT1lP2Q6dGhpcyxhcmd1bWVudHMpLHRoaXN9LGVbZlsw%0AXSsiV2l0aCJdPWcuZmlyZVdpdGh9KSxkLnByb21pc2UoZSksYSYmYS5jYWxsKGUs%0AZSksZX0sd2hlbjpmdW5jdGlvbihhKXt2YXIgYj0wLGM9ZC5jYWxsKGFyZ3VtZW50%0AcyksZT1jLmxlbmd0aCxmPTEhPT1lfHxhJiZuLmlzRnVuY3Rpb24oYS5wcm9taXNl%0AKT9lOjAsZz0xPT09Zj9hOm4uRGVmZXJyZWQoKSxoPWZ1bmN0aW9uKGEsYixjKXty%0AZXR1cm4gZnVuY3Rpb24oZSl7YlthXT10aGlzLGNbYV09YXJndW1lbnRzLmxlbmd0%0AaD4xP2QuY2FsbChhcmd1bWVudHMpOmUsYz09PWk/Zy5ub3RpZnlXaXRoKGIsYyk6%0ALS1mfHxnLnJlc29sdmVXaXRoKGIsYyl9fSxpLGosaztpZihlPjEpZm9yKGk9bmV3%0AIEFycmF5KGUpLGo9bmV3IEFycmF5KGUpLGs9bmV3IEFycmF5KGUpO2U+YjtiKysp%0AY1tiXSYmbi5pc0Z1bmN0aW9uKGNbYl0ucHJvbWlzZSk/Y1tiXS5wcm9taXNlKCku%0AZG9uZShoKGIsayxjKSkuZmFpbChnLnJlamVjdCkucHJvZ3Jlc3MoaChiLGosaSkp%0AOi0tZjtyZXR1cm4gZnx8Zy5yZXNvbHZlV2l0aChrLGMpLGcucHJvbWlzZSgpfX0p%0AO3ZhciBIO24uZm4ucmVhZHk9ZnVuY3Rpb24oYSl7cmV0dXJuIG4ucmVhZHkucHJv%0AbWlzZSgpLmRvbmUoYSksdGhpc30sbi5leHRlbmQoe2lzUmVhZHk6ITEscmVhZHlX%0AYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGEpe2E/bi5yZWFkeVdhaXQrKzpuLnJl%0AYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oYSl7KGE9PT0hMD8tLW4ucmVhZHlXYWl0%0AOm4uaXNSZWFkeSl8fChuLmlzUmVhZHk9ITAsYSE9PSEwJiYtLW4ucmVhZHlXYWl0%0APjB8fChILnJlc29sdmVXaXRoKGwsW25dKSxuLmZuLnRyaWdnZXJIYW5kbGVyJiYo%0AbihsKS50cmlnZ2VySGFuZGxlcigicmVhZHkiKSxuKGwpLm9mZigicmVhZHkiKSkp%0AKX19KTtmdW5jdGlvbiBJKCl7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250%0AZW50TG9hZGVkIixJLCExKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLEks%0AITEpLG4ucmVhZHkoKX1uLnJlYWR5LnByb21pc2U9ZnVuY3Rpb24oYil7cmV0dXJu%0AIEh8fChIPW4uRGVmZXJyZWQoKSwiY29tcGxldGUiPT09bC5yZWFkeVN0YXRlP3Nl%0AdFRpbWVvdXQobi5yZWFkeSk6KGwuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVu%0AdExvYWRlZCIsSSwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixJLCExKSkp%0ALEgucHJvbWlzZShiKX0sbi5yZWFkeS5wcm9taXNlKCk7dmFyIEo9bi5hY2Nlc3M9%0AZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9MCxpPWEubGVuZ3RoLGo9bnVs%0AbD09YztpZigib2JqZWN0Ij09PW4udHlwZShjKSl7ZT0hMDtmb3IoaCBpbiBjKW4u%0AYWNjZXNzKGEsYixoLGNbaF0sITAsZixnKX1lbHNlIGlmKHZvaWQgMCE9PWQmJihl%0APSEwLG4uaXNGdW5jdGlvbihkKXx8KGc9ITApLGomJihnPyhiLmNhbGwoYSxkKSxi%0APW51bGwpOihqPWIsYj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGouY2FsbChuKGEp%0ALGMpfSkpLGIpKWZvcig7aT5oO2grKyliKGFbaF0sYyxnP2Q6ZC5jYWxsKGFbaF0s%0AaCxiKGFbaF0sYykpKTtyZXR1cm4gZT9hOmo/Yi5jYWxsKGEpOmk/YihhWzBdLGMp%0AOmZ9O24uYWNjZXB0RGF0YT1mdW5jdGlvbihhKXtyZXR1cm4gMT09PWEubm9kZVR5%0AcGV8fDk9PT1hLm5vZGVUeXBlfHwhK2Eubm9kZVR5cGV9O2Z1bmN0aW9uIEsoKXtP%0AYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5jYWNoZT17fSwwLHtnZXQ6ZnVuY3Rp%0Ab24oKXtyZXR1cm57fX19KSx0aGlzLmV4cGFuZG89bi5leHBhbmRvK01hdGgucmFu%0AZG9tKCl9Sy51aWQ9MSxLLmFjY2VwdHM9bi5hY2NlcHREYXRhLEsucHJvdG90eXBl%0APXtrZXk6ZnVuY3Rpb24oYSl7aWYoIUsuYWNjZXB0cyhhKSlyZXR1cm4gMDt2YXIg%0AYj17fSxjPWFbdGhpcy5leHBhbmRvXTtpZighYyl7Yz1LLnVpZCsrO3RyeXtiW3Ro%0AaXMuZXhwYW5kb109e3ZhbHVlOmN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGEs%0AYil9Y2F0Y2goZCl7Ylt0aGlzLmV4cGFuZG9dPWMsbi5leHRlbmQoYSxiKX19cmV0%0AdXJuIHRoaXMuY2FjaGVbY118fCh0aGlzLmNhY2hlW2NdPXt9KSxjfSxzZXQ6ZnVu%0AY3Rpb24oYSxiLGMpe3ZhciBkLGU9dGhpcy5rZXkoYSksZj10aGlzLmNhY2hlW2Vd%0AO2lmKCJzdHJpbmciPT10eXBlb2YgYilmW2JdPWM7ZWxzZSBpZihuLmlzRW1wdHlP%0AYmplY3QoZikpbi5leHRlbmQodGhpcy5jYWNoZVtlXSxiKTtlbHNlIGZvcihkIGlu%0AIGIpZltkXT1iW2RdO3JldHVybiBmfSxnZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz10%0AaGlzLmNhY2hlW3RoaXMua2V5KGEpXTtyZXR1cm4gdm9pZCAwPT09Yj9jOmNbYl19%0ALGFjY2VzczpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIHZvaWQgMD09PWJ8%0AfGImJiJzdHJpbmciPT10eXBlb2YgYiYmdm9pZCAwPT09Yz8oZD10aGlzLmdldChh%0ALGIpLHZvaWQgMCE9PWQ/ZDp0aGlzLmdldChhLG4uY2FtZWxDYXNlKGIpKSk6KHRo%0AaXMuc2V0KGEsYixjKSx2b2lkIDAhPT1jP2M6Yil9LHJlbW92ZTpmdW5jdGlvbihh%0ALGIpe3ZhciBjLGQsZSxmPXRoaXMua2V5KGEpLGc9dGhpcy5jYWNoZVtmXTtpZih2%0Ab2lkIDA9PT1iKXRoaXMuY2FjaGVbZl09e307ZWxzZXtuLmlzQXJyYXkoYik/ZD1i%0ALmNvbmNhdChiLm1hcChuLmNhbWVsQ2FzZSkpOihlPW4uY2FtZWxDYXNlKGIpLGIg%0AaW4gZz9kPVtiLGVdOihkPWUsZD1kIGluIGc/W2RdOmQubWF0Y2goRSl8fFtdKSks%0AYz1kLmxlbmd0aDt3aGlsZShjLS0pZGVsZXRlIGdbZFtjXV19fSxoYXNEYXRhOmZ1%0AbmN0aW9uKGEpe3JldHVybiFuLmlzRW1wdHlPYmplY3QodGhpcy5jYWNoZVthW3Ro%0AaXMuZXhwYW5kb11dfHx7fSl9LGRpc2NhcmQ6ZnVuY3Rpb24oYSl7YVt0aGlzLmV4%0AcGFuZG9dJiZkZWxldGUgdGhpcy5jYWNoZVthW3RoaXMuZXhwYW5kb11dfX07dmFy%0AIEw9bmV3IEssTT1uZXcgSyxOPS9eKD86XHtbXHdcV10qXH18XFtbXHdcV10qXF0p%0AJC8sTz0vKFtBLVpdKS9nO2Z1bmN0aW9uIFAoYSxiLGMpe3ZhciBkO2lmKHZvaWQg%0AMD09PWMmJjE9PT1hLm5vZGVUeXBlKWlmKGQ9ImRhdGEtIitiLnJlcGxhY2UoTywi%0ALSQxIikudG9Mb3dlckNhc2UoKSxjPWEuZ2V0QXR0cmlidXRlKGQpLCJzdHJpbmci%0APT10eXBlb2YgYyl7dHJ5e2M9InRydWUiPT09Yz8hMDoiZmFsc2UiPT09Yz8hMToi%0AbnVsbCI9PT1jP251bGw6K2MrIiI9PT1jPytjOk4udGVzdChjKT9uLnBhcnNlSlNP%0ATihjKTpjfWNhdGNoKGUpe31NLnNldChhLGIsYyl9ZWxzZSBjPXZvaWQgMDtyZXR1%0Acm4gY31uLmV4dGVuZCh7aGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gTS5oYXNE%0AYXRhKGEpfHxMLmhhc0RhdGEoYSl9LGRhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVy%0AbiBNLmFjY2VzcyhhLGIsYyl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtNLnJl%0AbW92ZShhLGIpCn0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBMLmFjY2Vz%0AcyhhLGIsYyl9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7TC5yZW1vdmUoYSxi%0AKX19KSxuLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxm%0APXRoaXNbMF0sZz1mJiZmLmF0dHJpYnV0ZXM7aWYodm9pZCAwPT09YSl7aWYodGhp%0Acy5sZW5ndGgmJihlPU0uZ2V0KGYpLDE9PT1mLm5vZGVUeXBlJiYhTC5nZXQoZiwi%0AaGFzRGF0YUF0dHJzIikpKXtjPWcubGVuZ3RoO3doaWxlKGMtLSlnW2NdJiYoZD1n%0AW2NdLm5hbWUsMD09PWQuaW5kZXhPZigiZGF0YS0iKSYmKGQ9bi5jYW1lbENhc2Uo%0AZC5zbGljZSg1KSksUChmLGQsZVtkXSkpKTtMLnNldChmLCJoYXNEYXRhQXR0cnMi%0ALCEwKX1yZXR1cm4gZX1yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGE/dGhpcy5lYWNo%0AKGZ1bmN0aW9uKCl7TS5zZXQodGhpcyxhKX0pOkoodGhpcyxmdW5jdGlvbihiKXt2%0AYXIgYyxkPW4uY2FtZWxDYXNlKGEpO2lmKGYmJnZvaWQgMD09PWIpe2lmKGM9TS5n%0AZXQoZixhKSx2b2lkIDAhPT1jKXJldHVybiBjO2lmKGM9TS5nZXQoZixkKSx2b2lk%0AIDAhPT1jKXJldHVybiBjO2lmKGM9UChmLGQsdm9pZCAwKSx2b2lkIDAhPT1jKXJl%0AdHVybiBjfWVsc2UgdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9TS5nZXQodGhp%0AcyxkKTtNLnNldCh0aGlzLGQsYiksLTEhPT1hLmluZGV4T2YoIi0iKSYmdm9pZCAw%0AIT09YyYmTS5zZXQodGhpcyxhLGIpfSl9LG51bGwsYixhcmd1bWVudHMubGVuZ3Ro%0APjEsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMu%0AZWFjaChmdW5jdGlvbigpe00ucmVtb3ZlKHRoaXMsYSl9KX19KSxuLmV4dGVuZCh7%0AcXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBhPyhiPShifHwiZngi%0AKSsicXVldWUiLGQ9TC5nZXQoYSxiKSxjJiYoIWR8fG4uaXNBcnJheShjKT9kPUwu%0AYWNjZXNzKGEsYixuLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKSxkfHxbXSk6dm9p%0AZCAwfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPW4ucXVl%0AdWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9bi5fcXVldWVIb29rcyhh%0ALGIpLGc9ZnVuY3Rpb24oKXtuLmRlcXVldWUoYSxiKX07ImlucHJvZ3Jlc3MiPT09%0AZSYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKCJmeCI9PT1iJiZjLnVuc2hpZnQoImlu%0AcHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZm%0ALmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1i%0AKyJxdWV1ZUhvb2tzIjtyZXR1cm4gTC5nZXQoYSxjKXx8TC5hY2Nlc3MoYSxjLHtl%0AbXB0eTpuLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtM%0ALnJlbW92ZShhLFtiKyJxdWV1ZSIsY10pfSl9KX19KSxuLmZuLmV4dGVuZCh7cXVl%0AdWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVybiJzdHJpbmciIT10eXBlb2Yg%0AYSYmKGI9YSxhPSJmeCIsYy0tKSxhcmd1bWVudHMubGVuZ3RoPGM/bi5xdWV1ZSh0%0AaGlzWzBdLGEpOnZvaWQgMD09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2%0AYXIgYz1uLnF1ZXVlKHRoaXMsYSxiKTtuLl9xdWV1ZUhvb2tzKHRoaXMsYSksImZ4%0AIj09PWEmJiJpbnByb2dyZXNzIiE9PWNbMF0mJm4uZGVxdWV1ZSh0aGlzLGEpfSl9%0ALGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp%0Ae24uZGVxdWV1ZSh0aGlzLGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0%0AdXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxi%0AKXt2YXIgYyxkPTEsZT1uLkRlZmVycmVkKCksZj10aGlzLGc9dGhpcy5sZW5ndGgs%0AaD1mdW5jdGlvbigpey0tZHx8ZS5yZXNvbHZlV2l0aChmLFtmXSl9OyJzdHJpbmci%0AIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHwiZngiO3doaWxlKGctLSlj%0APUwuZ2V0KGZbZ10sYSsicXVldWVIb29rcyIpLGMmJmMuZW1wdHkmJihkKyssYy5l%0AbXB0eS5hZGQoaCkpO3JldHVybiBoKCksZS5wcm9taXNlKGIpfX0pO3ZhciBRPS9b%0AKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLFI9WyJU%0Ab3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxTPWZ1bmN0aW9uKGEsYil7cmV0%0AdXJuIGE9Ynx8YSwibm9uZSI9PT1uLmNzcyhhLCJkaXNwbGF5Iil8fCFuLmNvbnRh%0AaW5zKGEub3duZXJEb2N1bWVudCxhKX0sVD0vXig/OmNoZWNrYm94fHJhZGlvKSQv%0AaTshZnVuY3Rpb24oKXt2YXIgYT1sLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxi%0APWEuYXBwZW5kQ2hpbGQobC5jcmVhdGVFbGVtZW50KCJkaXYiKSksYz1sLmNyZWF0%0AZUVsZW1lbnQoImlucHV0Iik7Yy5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIp%0ALGMuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLGMuc2V0QXR0cmli%0AdXRlKCJuYW1lIiwidCIpLGIuYXBwZW5kQ2hpbGQoYyksay5jaGVja0Nsb25lPWIu%0AY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGIu%0AaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixrLm5vQ2xvbmVDaGVj%0Aa2VkPSEhYi5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWV9KCk7%0AdmFyIFU9InVuZGVmaW5lZCI7ay5mb2N1c2luQnViYmxlcz0ib25mb2N1c2luImlu%0AIGE7dmFyIFY9L15rZXkvLFc9L14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51%0AKXxjbGljay8sWD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sWT0v%0AXihbXi5dKikoPzpcLiguKyl8KSQvO2Z1bmN0aW9uIFooKXtyZXR1cm4hMH1mdW5j%0AdGlvbiAkKCl7cmV0dXJuITF9ZnVuY3Rpb24gXygpe3RyeXtyZXR1cm4gbC5hY3Rp%0AdmVFbGVtZW50fWNhdGNoKGEpe319bi5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5j%0AdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbyxwLHEscj1MLmdl%0AdChhKTtpZihyKXtjLmhhbmRsZXImJihmPWMsYz1mLmhhbmRsZXIsZT1mLnNlbGVj%0AdG9yKSxjLmd1aWR8fChjLmd1aWQ9bi5ndWlkKyspLChpPXIuZXZlbnRzKXx8KGk9%0Aci5ldmVudHM9e30pLChnPXIuaGFuZGxlKXx8KGc9ci5oYW5kbGU9ZnVuY3Rpb24o%0AYil7cmV0dXJuIHR5cGVvZiBuIT09VSYmbi5ldmVudC50cmlnZ2VyZWQhPT1iLnR5%0AcGU/bi5ldmVudC5kaXNwYXRjaC5hcHBseShhLGFyZ3VtZW50cyk6dm9pZCAwfSks%0AYj0oYnx8IiIpLm1hdGNoKEUpfHxbIiJdLGo9Yi5sZW5ndGg7d2hpbGUoai0tKWg9%0AWS5leGVjKGJbal0pfHxbXSxvPXE9aFsxXSxwPShoWzJdfHwiIikuc3BsaXQoIi4i%0AKS5zb3J0KCksbyYmKGw9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShlP2wuZGVs%0AZWdhdGVUeXBlOmwuYmluZFR5cGUpfHxvLGw9bi5ldmVudC5zcGVjaWFsW29dfHx7%0AfSxrPW4uZXh0ZW5kKHt0eXBlOm8sb3JpZ1R5cGU6cSxkYXRhOmQsaGFuZGxlcjpj%0ALGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJm4uZXhwci5t%0AYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3BhY2U6cC5qb2luKCIuIil9%0ALGYpLChtPWlbb10pfHwobT1pW29dPVtdLG0uZGVsZWdhdGVDb3VudD0wLGwuc2V0%0AdXAmJmwuc2V0dXAuY2FsbChhLGQscCxnKSE9PSExfHxhLmFkZEV2ZW50TGlzdGVu%0AZXImJmEuYWRkRXZlbnRMaXN0ZW5lcihvLGcsITEpKSxsLmFkZCYmKGwuYWRkLmNh%0AbGwoYSxrKSxrLmhhbmRsZXIuZ3VpZHx8KGsuaGFuZGxlci5ndWlkPWMuZ3VpZCkp%0ALGU/bS5zcGxpY2UobS5kZWxlZ2F0ZUNvdW50KyssMCxrKTptLnB1c2goayksbi5l%0AdmVudC5nbG9iYWxbb109ITApfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7%0AdmFyIGYsZyxoLGksaixrLGwsbSxvLHAscSxyPUwuaGFzRGF0YShhKSYmTC5nZXQo%0AYSk7aWYociYmKGk9ci5ldmVudHMpKXtiPShifHwiIikubWF0Y2goRSl8fFsiIl0s%0Aaj1iLmxlbmd0aDt3aGlsZShqLS0paWYoaD1ZLmV4ZWMoYltqXSl8fFtdLG89cT1o%0AWzFdLHA9KGhbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxvKXtsPW4uZXZlbnQu%0Ac3BlY2lhbFtvXXx8e30sbz0oZD9sLmRlbGVnYXRlVHlwZTpsLmJpbmRUeXBlKXx8%0AbyxtPWlbb118fFtdLGg9aFsyXSYmbmV3IFJlZ0V4cCgiKF58XFwuKSIrcC5qb2lu%0AKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKSxnPWY9bS5sZW5ndGg7d2hpbGUo%0AZi0tKWs9bVtmXSwhZSYmcSE9PWsub3JpZ1R5cGV8fGMmJmMuZ3VpZCE9PWsuZ3Vp%0AZHx8aCYmIWgudGVzdChrLm5hbWVzcGFjZSl8fGQmJmQhPT1rLnNlbGVjdG9yJiYo%0AIioqIiE9PWR8fCFrLnNlbGVjdG9yKXx8KG0uc3BsaWNlKGYsMSksay5zZWxlY3Rv%0AciYmbS5kZWxlZ2F0ZUNvdW50LS0sbC5yZW1vdmUmJmwucmVtb3ZlLmNhbGwoYSxr%0AKSk7ZyYmIW0ubGVuZ3RoJiYobC50ZWFyZG93biYmbC50ZWFyZG93bi5jYWxsKGEs%0AcCxyLmhhbmRsZSkhPT0hMXx8bi5yZW1vdmVFdmVudChhLG8sci5oYW5kbGUpLGRl%0AbGV0ZSBpW29dKX1lbHNlIGZvcihvIGluIGkpbi5ldmVudC5yZW1vdmUoYSxvK2Jb%0Aal0sYyxkLCEwKTtuLmlzRW1wdHlPYmplY3QoaSkmJihkZWxldGUgci5oYW5kbGUs%0ATC5yZW1vdmUoYSwiZXZlbnRzIikpfX0sdHJpZ2dlcjpmdW5jdGlvbihiLGMsZCxl%0AKXt2YXIgZixnLGgsaSxrLG0sbyxwPVtkfHxsXSxxPWouY2FsbChiLCJ0eXBlIik/%0AYi50eXBlOmIscj1qLmNhbGwoYiwibmFtZXNwYWNlIik/Yi5uYW1lc3BhY2Uuc3Bs%0AaXQoIi4iKTpbXTtpZihnPWg9ZD1kfHxsLDMhPT1kLm5vZGVUeXBlJiY4IT09ZC5u%0Ab2RlVHlwZSYmIVgudGVzdChxK24uZXZlbnQudHJpZ2dlcmVkKSYmKHEuaW5kZXhP%0AZigiLiIpPj0wJiYocj1xLnNwbGl0KCIuIikscT1yLnNoaWZ0KCksci5zb3J0KCkp%0ALGs9cS5pbmRleE9mKCI6Iik8MCYmIm9uIitxLGI9YltuLmV4cGFuZG9dP2I6bmV3%0AIG4uRXZlbnQocSwib2JqZWN0Ij09dHlwZW9mIGImJmIpLGIuaXNUcmlnZ2VyPWU/%0AMjozLGIubmFtZXNwYWNlPXIuam9pbigiLiIpLGIubmFtZXNwYWNlX3JlPWIubmFt%0AZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK3Iuam9pbigiXFwuKD86LipcXC58%0AKSIpKyIoXFwufCQpIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50YXJnZXR8fChi%0ALnRhcmdldD1kKSxjPW51bGw9PWM/W2JdOm4ubWFrZUFycmF5KGMsW2JdKSxvPW4u%0AZXZlbnQuc3BlY2lhbFtxXXx8e30sZXx8IW8udHJpZ2dlcnx8by50cmlnZ2VyLmFw%0AcGx5KGQsYykhPT0hMSkpe2lmKCFlJiYhby5ub0J1YmJsZSYmIW4uaXNXaW5kb3co%0AZCkpe2ZvcihpPW8uZGVsZWdhdGVUeXBlfHxxLFgudGVzdChpK3EpfHwoZz1nLnBh%0AcmVudE5vZGUpO2c7Zz1nLnBhcmVudE5vZGUpcC5wdXNoKGcpLGg9ZztoPT09KGQu%0Ab3duZXJEb2N1bWVudHx8bCkmJnAucHVzaChoLmRlZmF1bHRWaWV3fHxoLnBhcmVu%0AdFdpbmRvd3x8YSl9Zj0wO3doaWxlKChnPXBbZisrXSkmJiFiLmlzUHJvcGFnYXRp%0Ab25TdG9wcGVkKCkpYi50eXBlPWY+MT9pOm8uYmluZFR5cGV8fHEsbT0oTC5nZXQo%0AZywiZXZlbnRzIil8fHt9KVtiLnR5cGVdJiZMLmdldChnLCJoYW5kbGUiKSxtJiZt%0ALmFwcGx5KGcsYyksbT1rJiZnW2tdLG0mJm0uYXBwbHkmJm4uYWNjZXB0RGF0YShn%0AKSYmKGIucmVzdWx0PW0uYXBwbHkoZyxjKSxiLnJlc3VsdD09PSExJiZiLnByZXZl%0AbnREZWZhdWx0KCkpO3JldHVybiBiLnR5cGU9cSxlfHxiLmlzRGVmYXVsdFByZXZl%0AbnRlZCgpfHxvLl9kZWZhdWx0JiZvLl9kZWZhdWx0LmFwcGx5KHAucG9wKCksYykh%0APT0hMXx8IW4uYWNjZXB0RGF0YShkKXx8ayYmbi5pc0Z1bmN0aW9uKGRbcV0pJiYh%0Abi5pc1dpbmRvdyhkKSYmKGg9ZFtrXSxoJiYoZFtrXT1udWxsKSxuLmV2ZW50LnRy%0AaWdnZXJlZD1xLGRbcV0oKSxuLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsaCYmKGRb%0Aa109aCkpLGIucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YT1uLmV2ZW50%0ALmZpeChhKTt2YXIgYixjLGUsZixnLGg9W10saT1kLmNhbGwoYXJndW1lbnRzKSxq%0APShMLmdldCh0aGlzLCJldmVudHMiKXx8e30pW2EudHlwZV18fFtdLGs9bi5ldmVu%0AdC5zcGVjaWFsW2EudHlwZV18fHt9O2lmKGlbMF09YSxhLmRlbGVnYXRlVGFyZ2V0%0APXRoaXMsIWsucHJlRGlzcGF0Y2h8fGsucHJlRGlzcGF0Y2guY2FsbCh0aGlzLGEp%0AIT09ITEpe2g9bi5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsYSxqKSxiPTA7d2hp%0AbGUoKGY9aFtiKytdKSYmIWEuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7YS5jdXJy%0AZW50VGFyZ2V0PWYuZWxlbSxjPTA7d2hpbGUoKGc9Zi5oYW5kbGVyc1tjKytdKSYm%0AIWEuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkoIWEubmFtZXNwYWNl%0AX3JlfHxhLm5hbWVzcGFjZV9yZS50ZXN0KGcubmFtZXNwYWNlKSkmJihhLmhhbmRs%0AZU9iaj1nLGEuZGF0YT1nLmRhdGEsZT0oKG4uZXZlbnQuc3BlY2lhbFtnLm9yaWdU%0AeXBlXXx8e30pLmhhbmRsZXx8Zy5oYW5kbGVyKS5hcHBseShmLmVsZW0saSksdm9p%0AZCAwIT09ZSYmKGEucmVzdWx0PWUpPT09ITEmJihhLnByZXZlbnREZWZhdWx0KCks%0AYS5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBrLnBvc3REaXNwYXRjaCYmay5w%0Ab3N0RGlzcGF0Y2guY2FsbCh0aGlzLGEpLGEucmVzdWx0fX0saGFuZGxlcnM6ZnVu%0AY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnPVtdLGg9Yi5kZWxlZ2F0ZUNvdW50LGk9%0AYS50YXJnZXQ7aWYoaCYmaS5ub2RlVHlwZSYmKCFhLmJ1dHRvbnx8ImNsaWNrIiE9%0APWEudHlwZSkpZm9yKDtpIT09dGhpcztpPWkucGFyZW50Tm9kZXx8dGhpcylpZihp%0ALmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1hLnR5cGUpe2ZvcihkPVtdLGM9MDto%0APmM7YysrKWY9YltjXSxlPWYuc2VsZWN0b3IrIiAiLHZvaWQgMD09PWRbZV0mJihk%0AW2VdPWYubmVlZHNDb250ZXh0P24oZSx0aGlzKS5pbmRleChpKT49MDpuLmZpbmQo%0AZSx0aGlzLG51bGwsW2ldKS5sZW5ndGgpLGRbZV0mJmQucHVzaChmKTtkLmxlbmd0%0AaCYmZy5wdXNoKHtlbGVtOmksaGFuZGxlcnM6ZH0pfXJldHVybiBoPGIubGVuZ3Ro%0AJiZnLnB1c2goe2VsZW06dGhpcyxoYW5kbGVyczpiLnNsaWNlKGgpfSksZ30scHJv%0AcHM6ImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFy%0AZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRh%0AcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7%0AfSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNw%0AbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PWEud2hp%0AY2gmJihhLndoaWNoPW51bGwhPWIuY2hhckNvZGU/Yi5jaGFyQ29kZTpiLmtleUNv%0AZGUpLGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50%0AWCBjbGllbnRZIG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNj%0AcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGIp%0Ae3ZhciBjLGQsZSxmPWIuYnV0dG9uO3JldHVybiBudWxsPT1hLnBhZ2VYJiZudWxs%0AIT1iLmNsaWVudFgmJihjPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGwsZD1jLmRv%0AY3VtZW50RWxlbWVudCxlPWMuYm9keSxhLnBhZ2VYPWIuY2xpZW50WCsoZCYmZC5z%0AY3JvbGxMZWZ0fHxlJiZlLnNjcm9sbExlZnR8fDApLShkJiZkLmNsaWVudExlZnR8%0AfGUmJmUuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1iLmNsaWVudFkrKGQmJmQuc2Ny%0Ab2xsVG9wfHxlJiZlLnNjcm9sbFRvcHx8MCktKGQmJmQuY2xpZW50VG9wfHxlJiZl%0ALmNsaWVudFRvcHx8MCkpLGEud2hpY2h8fHZvaWQgMD09PWZ8fChhLndoaWNoPTEm%0AZj8xOjImZj8zOjQmZj8yOjApLGF9fSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtuLmV4%0AcGFuZG9dKXJldHVybiBhO3ZhciBiLGMsZCxlPWEudHlwZSxmPWEsZz10aGlzLmZp%0AeEhvb2tzW2VdO2d8fCh0aGlzLmZpeEhvb2tzW2VdPWc9Vy50ZXN0KGUpP3RoaXMu%0AbW91c2VIb29rczpWLnRlc3QoZSk/dGhpcy5rZXlIb29rczp7fSksZD1nLnByb3Bz%0AP3RoaXMucHJvcHMuY29uY2F0KGcucHJvcHMpOnRoaXMucHJvcHMsYT1uZXcgbi5F%0AdmVudChmKSxiPWQubGVuZ3RoO3doaWxlKGItLSljPWRbYl0sYVtjXT1mW2NdO3Jl%0AdHVybiBhLnRhcmdldHx8KGEudGFyZ2V0PWwpLDM9PT1hLnRhcmdldC5ub2RlVHlw%0AZSYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGcuZmlsdGVyP2cuZmls%0AdGVyKGEsZik6YX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0%0AcmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMhPT1fKCkmJnRoaXMuZm9jdXM/%0AKHRoaXMuZm9jdXMoKSwhMSk6dm9pZCAwfSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4i%0AfSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1fKCkmJnRo%0AaXMuYmx1cj8odGhpcy5ibHVyKCksITEpOnZvaWQgMH0sZGVsZWdhdGVUeXBlOiJm%0Ab2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuImNoZWNr%0AYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmbi5ub2RlTmFtZSh0aGlzLCJp%0AbnB1dCIpPyh0aGlzLmNsaWNrKCksITEpOnZvaWQgMH0sX2RlZmF1bHQ6ZnVuY3Rp%0Ab24oYSl7cmV0dXJuIG4ubm9kZU5hbWUoYS50YXJnZXQsImEiKX19LGJlZm9yZXVu%0AbG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGEpe3ZvaWQgMCE9PWEucmVzdWx0%0AJiZhLm9yaWdpbmFsRXZlbnQmJihhLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9%0AYS5yZXN1bHQpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW4u%0AZXh0ZW5kKG5ldyBuLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMCxvcmln%0AaW5hbEV2ZW50Ont9fSk7ZD9uLmV2ZW50LnRyaWdnZXIoZSxudWxsLGIpOm4uZXZl%0AbnQuZGlzcGF0Y2guY2FsbChiLGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkmJmMu%0AcHJldmVudERlZmF1bHQoKX19LG4ucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oYSxiLGMp%0Ae2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIs%0AYywhMSl9LG4uRXZlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcyBpbnN0YW5j%0AZW9mIG4uRXZlbnQ/KGEmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhp%0Acy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQ%0AcmV2ZW50ZWR8fHZvaWQgMD09PWEuZGVmYXVsdFByZXZlbnRlZCYmYS5yZXR1cm5W%0AYWx1ZT09PSExP1o6JCk6dGhpcy50eXBlPWEsYiYmbi5leHRlbmQodGhpcyxiKSx0%0AaGlzLnRpbWVTdGFtcD1hJiZhLnRpbWVTdGFtcHx8bi5ub3coKSx2b2lkKHRoaXNb%0Abi5leHBhbmRvXT0hMCkpOm5ldyBuLkV2ZW50KGEsYil9LG4uRXZlbnQucHJvdG90%0AeXBlPXtpc0RlZmF1bHRQcmV2ZW50ZWQ6JCxpc1Byb3BhZ2F0aW9uU3RvcHBlZDok%0ALGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiQscHJldmVudERlZmF1bHQ6%0AZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1%0AbHRQcmV2ZW50ZWQ9WixhJiZhLnByZXZlbnREZWZhdWx0JiZhLnByZXZlbnREZWZh%0AdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3Jp%0AZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPVosYSYmYS5zdG9w%0AUHJvcGFnYXRpb24mJmEuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQ%0Acm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0%0AaGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPVosYSYmYS5zdG9wSW1t%0AZWRpYXRlUHJvcGFnYXRpb24mJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCks%0AdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LG4uZWFjaCh7bW91c2VlbnRlcjoibW91%0Ac2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2lu%0AdGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oYSxi%0AKXtuLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIs%0AaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdl%0AdCxmPWEuaGFuZGxlT2JqO3JldHVybighZXx8ZSE9PWQmJiFuLmNvbnRhaW5zKGQs%0AZSkpJiYoYS50eXBlPWYub3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxh%0Acmd1bWVudHMpLGEudHlwZT1iKSxjfX19KSxrLmZvY3VzaW5CdWJibGVzfHxuLmVh%0AY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEs%0AYil7dmFyIGM9ZnVuY3Rpb24oYSl7bi5ldmVudC5zaW11bGF0ZShiLGEudGFyZ2V0%0ALG4uZXZlbnQuZml4KGEpLCEwKX07bi5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpm%0AdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPUwuYWNj%0AZXNzKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCksTC5hY2Nlc3Mo%0AZCxiLChlfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93%0AbmVyRG9jdW1lbnR8fHRoaXMsZT1MLmFjY2VzcyhkLGIpLTE7ZT9MLmFjY2Vzcyhk%0ALGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLEwucmVtb3ZlKGQs%0AYikpfX19KSxuLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIg%0AZixnO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7InN0cmluZyIhPXR5cGVvZiBiJiYo%0AYz1jfHxiLGI9dm9pZCAwKTtmb3IoZyBpbiBhKXRoaXMub24oZyxiLGMsYVtnXSxl%0AKTtyZXR1cm4gdGhpc31pZihudWxsPT1jJiZudWxsPT1kPyhkPWIsYz1iPXZvaWQg%0AMCk6bnVsbD09ZCYmKCJzdHJpbmciPT10eXBlb2YgYj8oZD1jLGM9dm9pZCAwKToo%0AZD1jLGM9YixiPXZvaWQgMCkpLGQ9PT0hMSlkPSQ7ZWxzZSBpZighZClyZXR1cm4g%0AdGhpcztyZXR1cm4gMT09PWUmJihmPWQsZD1mdW5jdGlvbihhKXtyZXR1cm4gbigp%0ALm9mZihhKSxmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5ndWlkPWYuZ3VpZHx8%0AKGYuZ3VpZD1uLmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe24uZXZlbnQu%0AYWRkKHRoaXMsYSxkLGMsYil9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVy%0AbiB0aGlzLm9uKGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQs%0AZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1h%0ALmhhbmRsZU9iaixuKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9k%0ALm9yaWdUeXBlKyIuIitkLm5hbWVzcGFjZTpkLm9yaWdUeXBlLGQuc2VsZWN0b3Is%0AZC5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7Zm9yKGUgaW4g%0AYSl0aGlzLm9mZihlLGIsYVtlXSk7cmV0dXJuIHRoaXN9cmV0dXJuKGI9PT0hMXx8%0AImZ1bmN0aW9uIj09dHlwZW9mIGIpJiYoYz1iLGI9dm9pZCAwKSxjPT09ITEmJihj%0APSQpLHRoaXMuZWFjaChmdW5jdGlvbigpe24uZXZlbnQucmVtb3ZlKHRoaXMsYSxj%0ALGIpfSl9LHRyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1%0AbmN0aW9uKCl7bi5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFu%0AZGxlcjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXNbMF07cmV0dXJuIGM/bi5ldmVu%0AdC50cmlnZ2VyKGEsYixjLCEwKTp2b2lkIDB9fSk7dmFyIGFiPS88KD8hYXJlYXxi%0Acnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpd%0AKylbXj5dKilcLz4vZ2ksYmI9LzwoW1x3Ol0rKS8sY2I9Lzx8JiM/XHcrOy8sZGI9%0ALzwoPzpzY3JpcHR8c3R5bGV8bGluaykvaSxlYj0vY2hlY2tlZFxzKig/OltePV18%0APVxzKi5jaGVja2VkLikvaSxmYj0vXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ks%0AZ2I9L150cnVlXC8oLiopLyxoYj0vXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpc%0AXVxdfC0tKT5ccyokL2csaWI9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0n%0AbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90%0AYWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48%0AL3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJs%0AZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5Pjwv%0AdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtpYi5vcHRncm91cD1pYi5vcHRp%0Ab24saWIudGJvZHk9aWIudGZvb3Q9aWIuY29sZ3JvdXA9aWIuY2FwdGlvbj1pYi50%0AaGVhZCxpYi50aD1pYi50ZDtmdW5jdGlvbiBqYihhLGIpe3JldHVybiBuLm5vZGVO%0AYW1lKGEsInRhYmxlIikmJm4ubm9kZU5hbWUoMTEhPT1iLm5vZGVUeXBlP2I6Yi5m%0AaXJzdENoaWxkLCJ0ciIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5Iilb%0AMF18fGEuYXBwZW5kQ2hpbGQoYS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo%0AInRib2R5IikpOmF9ZnVuY3Rpb24ga2IoYSl7cmV0dXJuIGEudHlwZT0obnVsbCE9%0APWEuZ2V0QXR0cmlidXRlKCJ0eXBlIikpKyIvIithLnR5cGUsYX1mdW5jdGlvbiBs%0AYihhKXt2YXIgYj1nYi5leGVjKGEudHlwZSk7cmV0dXJuIGI/YS50eXBlPWJbMV06%0AYS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxhfWZ1bmN0aW9uIG1iKGEsYil7Zm9y%0AKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKUwuc2V0KGFbY10sImdsb2JhbEV2%0AYWwiLCFifHxMLmdldChiW2NdLCJnbG9iYWxFdmFsIikpfWZ1bmN0aW9uIG5iKGEs%0AYil7dmFyIGMsZCxlLGYsZyxoLGksajtpZigxPT09Yi5ub2RlVHlwZSl7aWYoTC5o%0AYXNEYXRhKGEpJiYoZj1MLmFjY2VzcyhhKSxnPUwuc2V0KGIsZiksaj1mLmV2ZW50%0Acykpe2RlbGV0ZSBnLmhhbmRsZSxnLmV2ZW50cz17fTtmb3IoZSBpbiBqKWZvcihj%0APTAsZD1qW2VdLmxlbmd0aDtkPmM7YysrKW4uZXZlbnQuYWRkKGIsZSxqW2VdW2Nd%0AKX1NLmhhc0RhdGEoYSkmJihoPU0uYWNjZXNzKGEpLGk9bi5leHRlbmQoe30saCks%0ATS5zZXQoYixpKSl9fWZ1bmN0aW9uIG9iKGEsYil7dmFyIGM9YS5nZXRFbGVtZW50%0Ac0J5VGFnTmFtZT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKGJ8fCIqIik6YS5xdWVy%0AeVNlbGVjdG9yQWxsP2EucXVlcnlTZWxlY3RvckFsbChifHwiKiIpOltdO3JldHVy%0AbiB2b2lkIDA9PT1ifHxiJiZuLm5vZGVOYW1lKGEsYik/bi5tZXJnZShbYV0sYyk6%0AY31mdW5jdGlvbiBwYihhLGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2Uo%0AKTsiaW5wdXQiPT09YyYmVC50ZXN0KGEudHlwZSk/Yi5jaGVja2VkPWEuY2hlY2tl%0AZDooImlucHV0Ij09PWN8fCJ0ZXh0YXJlYSI9PT1jKSYmKGIuZGVmYXVsdFZhbHVl%0APWEuZGVmYXVsdFZhbHVlKX1uLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMp%0Ae3ZhciBkLGUsZixnLGg9YS5jbG9uZU5vZGUoITApLGk9bi5jb250YWlucyhhLm93%0AbmVyRG9jdW1lbnQsYSk7aWYoIShrLm5vQ2xvbmVDaGVja2VkfHwxIT09YS5ub2Rl%0AVHlwZSYmMTEhPT1hLm5vZGVUeXBlfHxuLmlzWE1MRG9jKGEpKSlmb3IoZz1vYiho%0AKSxmPW9iKGEpLGQ9MCxlPWYubGVuZ3RoO2U+ZDtkKyspcGIoZltkXSxnW2RdKTtp%0AZihiKWlmKGMpZm9yKGY9Znx8b2IoYSksZz1nfHxvYihoKSxkPTAsZT1mLmxlbmd0%0AaDtlPmQ7ZCsrKW5iKGZbZF0sZ1tkXSk7ZWxzZSBuYihhLGgpO3JldHVybiBnPW9i%0AKGgsInNjcmlwdCIpLGcubGVuZ3RoPjAmJm1iKGcsIWkmJm9iKGEsInNjcmlwdCIp%0AKSxofSxidWlsZEZyYWdtZW50OmZ1bmN0aW9uKGEsYixjLGQpe2Zvcih2YXIgZSxm%0ALGcsaCxpLGosaz1iLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxsPVtdLG09MCxv%0APWEubGVuZ3RoO28+bTttKyspaWYoZT1hW21dLGV8fDA9PT1lKWlmKCJvYmplY3Qi%0APT09bi50eXBlKGUpKW4ubWVyZ2UobCxlLm5vZGVUeXBlP1tlXTplKTtlbHNlIGlm%0AKGNiLnRlc3QoZSkpe2Y9Znx8ay5hcHBlbmRDaGlsZChiLmNyZWF0ZUVsZW1lbnQo%0AImRpdiIpKSxnPShiYi5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgp%0ALGg9aWJbZ118fGliLl9kZWZhdWx0LGYuaW5uZXJIVE1MPWhbMV0rZS5yZXBsYWNl%0AKGFiLCI8JDE+PC8kMj4iKStoWzJdLGo9aFswXTt3aGlsZShqLS0pZj1mLmxhc3RD%0AaGlsZDtuLm1lcmdlKGwsZi5jaGlsZE5vZGVzKSxmPWsuZmlyc3RDaGlsZCxmLnRl%0AeHRDb250ZW50PSIifWVsc2UgbC5wdXNoKGIuY3JlYXRlVGV4dE5vZGUoZSkpO2su%0AdGV4dENvbnRlbnQ9IiIsbT0wO3doaWxlKGU9bFttKytdKWlmKCghZHx8LTE9PT1u%0ALmluQXJyYXkoZSxkKSkmJihpPW4uY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUp%0ALGY9b2Ioay5hcHBlbmRDaGlsZChlKSwic2NyaXB0IiksaSYmbWIoZiksYykpe2o9%0AMDt3aGlsZShlPWZbaisrXSlmYi50ZXN0KGUudHlwZXx8IiIpJiZjLnB1c2goZSl9%0AcmV0dXJuIGt9LGNsZWFuRGF0YTpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGUs%0AZj1uLmV2ZW50LnNwZWNpYWwsZz0wO3ZvaWQgMCE9PShjPWFbZ10pO2crKyl7aWYo%0Abi5hY2NlcHREYXRhKGMpJiYoZT1jW0wuZXhwYW5kb10sZSYmKGI9TC5jYWNoZVtl%0AXSkpKXtpZihiLmV2ZW50cylmb3IoZCBpbiBiLmV2ZW50cylmW2RdP24uZXZlbnQu%0AcmVtb3ZlKGMsZCk6bi5yZW1vdmVFdmVudChjLGQsYi5oYW5kbGUpO0wuY2FjaGVb%0AZV0mJmRlbGV0ZSBMLmNhY2hlW2VdfWRlbGV0ZSBNLmNhY2hlW2NbTS5leHBhbmRv%0AXV19fX0pLG4uZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBKKHRo%0AaXMsZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/bi50ZXh0KHRoaXMpOnRo%0AaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7KDE9PT10aGlzLm5vZGVUeXBlfHwx%0AMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKSYmKHRoaXMudGV4%0AdENvbnRlbnQ9YSl9KX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6%0AZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rp%0Ab24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8%0AOT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPWpiKHRoaXMsYSk7Yi5hcHBlbmRDaGls%0AZChhKX19KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlw%0AKGFyZ3VtZW50cyxmdW5jdGlvbihhKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9%0APT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIGI9amIodGhp%0AcyxhKTtiLmluc2VydEJlZm9yZShhLGIuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpm%0AdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlv%0AbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZv%0AcmUoYSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1h%0AbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMu%0AcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzLm5leHRTaWJsaW5nKX0pfSxy%0AZW1vdmU6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD1hP24uZmlsdGVyKGEsdGhp%0Acyk6dGhpcyxlPTA7bnVsbCE9KGM9ZFtlXSk7ZSsrKWJ8fDEhPT1jLm5vZGVUeXBl%0AfHxuLmNsZWFuRGF0YShvYihjKSksYy5wYXJlbnROb2RlJiYoYiYmbi5jb250YWlu%0AcyhjLm93bmVyRG9jdW1lbnQsYykmJm1iKG9iKGMsInNjcmlwdCIpKSxjLnBhcmVu%0AdE5vZGUucmVtb3ZlQ2hpbGQoYykpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlv%0Abigpe2Zvcih2YXIgYSxiPTA7bnVsbCE9KGE9dGhpc1tiXSk7YisrKTE9PT1hLm5v%0AZGVUeXBlJiYobi5jbGVhbkRhdGEob2IoYSwhMSkpLGEudGV4dENvbnRlbnQ9IiIp%0AO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihhLGIpe3JldHVybiBhPW51bGw9%0APWE/ITE6YSxiPW51bGw9PWI/YTpiLHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJu%0AIG4uY2xvbmUodGhpcyxhLGIpfSl9LGh0bWw6ZnVuY3Rpb24oYSl7cmV0dXJuIEoo%0AdGhpcyxmdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdfHx7fSxjPTAsZD10aGlzLmxl%0Abmd0aDtpZih2b2lkIDA9PT1hJiYxPT09Yi5ub2RlVHlwZSlyZXR1cm4gYi5pbm5l%0AckhUTUw7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYhZGIudGVzdChhKSYmIWliWyhi%0AYi5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1hLnJlcGxh%0AY2UoYWIsIjwkMT48LyQyPiIpO3RyeXtmb3IoO2Q+YztjKyspYj10aGlzW2NdfHx7%0AfSwxPT09Yi5ub2RlVHlwZSYmKG4uY2xlYW5EYXRhKG9iKGIsITEpKSxiLmlubmVy%0ASFRNTD1hKTtiPTB9Y2F0Y2goZSl7fX1iJiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGEp%0AfSxudWxsLGEsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9u%0AKCl7dmFyIGE9YXJndW1lbnRzWzBdO3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3Vt%0AZW50cyxmdW5jdGlvbihiKXthPXRoaXMucGFyZW50Tm9kZSxuLmNsZWFuRGF0YShv%0AYih0aGlzKSksYSYmYS5yZXBsYWNlQ2hpbGQoYix0aGlzKX0pLGEmJihhLmxlbmd0%0AaHx8YS5ub2RlVHlwZSk/dGhpczp0aGlzLnJlbW92ZSgpfSxkZXRhY2g6ZnVuY3Rp%0Ab24oYSl7cmV0dXJuIHRoaXMucmVtb3ZlKGEsITApfSxkb21NYW5pcDpmdW5jdGlv%0AbihhLGIpe2E9ZS5hcHBseShbXSxhKTt2YXIgYyxkLGYsZyxoLGksaj0wLGw9dGhp%0Acy5sZW5ndGgsbT10aGlzLG89bC0xLHA9YVswXSxxPW4uaXNGdW5jdGlvbihwKTtp%0AZihxfHxsPjEmJiJzdHJpbmciPT10eXBlb2YgcCYmIWsuY2hlY2tDbG9uZSYmZWIu%0AdGVzdChwKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe3ZhciBkPW0uZXEo%0AYyk7cSYmKGFbMF09cC5jYWxsKHRoaXMsYyxkLmh0bWwoKSkpLGQuZG9tTWFuaXAo%0AYSxiKX0pO2lmKGwmJihjPW4uYnVpbGRGcmFnbWVudChhLHRoaXNbMF0ub3duZXJE%0Ab2N1bWVudCwhMSx0aGlzKSxkPWMuZmlyc3RDaGlsZCwxPT09Yy5jaGlsZE5vZGVz%0ALmxlbmd0aCYmKGM9ZCksZCkpe2ZvcihmPW4ubWFwKG9iKGMsInNjcmlwdCIpLGti%0AKSxnPWYubGVuZ3RoO2w+ajtqKyspaD1jLGohPT1vJiYoaD1uLmNsb25lKGgsITAs%0AITApLGcmJm4ubWVyZ2UoZixvYihoLCJzY3JpcHQiKSkpLGIuY2FsbCh0aGlzW2pd%0ALGgsaik7aWYoZylmb3IoaT1mW2YubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsbi5t%0AYXAoZixsYiksaj0wO2c+ajtqKyspaD1mW2pdLGZiLnRlc3QoaC50eXBlfHwiIikm%0AJiFMLmFjY2VzcyhoLCJnbG9iYWxFdmFsIikmJm4uY29udGFpbnMoaSxoKSYmKGgu%0Ac3JjP24uX2V2YWxVcmwmJm4uX2V2YWxVcmwoaC5zcmMpOm4uZ2xvYmFsRXZhbCho%0ALnRleHRDb250ZW50LnJlcGxhY2UoaGIsIiIpKSl9cmV0dXJuIHRoaXN9fSksbi5l%0AYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2Vy%0AdEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6%0AInJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXtuLmZuW2FdPWZ1bmN0aW9uKGEp%0Ae2Zvcih2YXIgYyxkPVtdLGU9bihhKSxnPWUubGVuZ3RoLTEsaD0wO2c+PWg7aCsr%0AKWM9aD09PWc/dGhpczp0aGlzLmNsb25lKCEwKSxuKGVbaF0pW2JdKGMpLGYuYXBw%0AbHkoZCxjLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZCl9fSk7dmFyIHFi%0ALHJiPXt9O2Z1bmN0aW9uIHNiKGIsYyl7dmFyIGQsZT1uKGMuY3JlYXRlRWxlbWVu%0AdChiKSkuYXBwZW5kVG8oYy5ib2R5KSxmPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5%0AbGUmJihkPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUoZVswXSkpP2QuZGlzcGxh%0AeTpuLmNzcyhlWzBdLCJkaXNwbGF5Iik7cmV0dXJuIGUuZGV0YWNoKCksZn1mdW5j%0AdGlvbiB0YihhKXt2YXIgYj1sLGM9cmJbYV07cmV0dXJuIGN8fChjPXNiKGEsYiks%0AIm5vbmUiIT09YyYmY3x8KHFiPShxYnx8bigiPGlmcmFtZSBmcmFtZWJvcmRlcj0n%0AMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpKS5hcHBlbmRUbyhiLmRvY3VtZW50%0ARWxlbWVudCksYj1xYlswXS5jb250ZW50RG9jdW1lbnQsYi53cml0ZSgpLGIuY2xv%0Ac2UoKSxjPXNiKGEsYikscWIuZGV0YWNoKCkpLHJiW2FdPWMpLGN9dmFyIHViPS9e%0AbWFyZ2luLyx2Yj1uZXcgUmVnRXhwKCJeKCIrUSsiKSg/IXB4KVthLXolXSskIiwi%0AaSIpLHdiPWZ1bmN0aW9uKGEpe3JldHVybiBhLm93bmVyRG9jdW1lbnQuZGVmYXVs%0AdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpfTtmdW5jdGlvbiB4YihhLGIs%0AYyl7dmFyIGQsZSxmLGcsaD1hLnN0eWxlO3JldHVybiBjPWN8fHdiKGEpLGMmJihn%0APWMuZ2V0UHJvcGVydHlWYWx1ZShiKXx8Y1tiXSksYyYmKCIiIT09Z3x8bi5jb250%0AYWlucyhhLm93bmVyRG9jdW1lbnQsYSl8fChnPW4uc3R5bGUoYSxiKSksdmIudGVz%0AdChnKSYmdWIudGVzdChiKSYmKGQ9aC53aWR0aCxlPWgubWluV2lkdGgsZj1oLm1h%0AeFdpZHRoLGgubWluV2lkdGg9aC5tYXhXaWR0aD1oLndpZHRoPWcsZz1jLndpZHRo%0ALGgud2lkdGg9ZCxoLm1pbldpZHRoPWUsaC5tYXhXaWR0aD1mKSksdm9pZCAwIT09%0AZz9nKyIiOmd9ZnVuY3Rpb24geWIoYSxiKXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7%0AcmV0dXJuIGEoKT92b2lkIGRlbGV0ZSB0aGlzLmdldDoodGhpcy5nZXQ9YikuYXBw%0AbHkodGhpcyxhcmd1bWVudHMpfX19IWZ1bmN0aW9uKCl7dmFyIGIsYyxkPWwuZG9j%0AdW1lbnRFbGVtZW50LGU9bC5jcmVhdGVFbGVtZW50KCJkaXYiKSxmPWwuY3JlYXRl%0ARWxlbWVudCgiZGl2Iik7aWYoZi5zdHlsZSl7Zi5zdHlsZS5iYWNrZ3JvdW5kQ2xp%0AcD0iY29udGVudC1ib3giLGYuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5k%0AQ2xpcD0iIixrLmNsZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09Zi5zdHls%0AZS5iYWNrZ3JvdW5kQ2xpcCxlLnN0eWxlLmNzc1RleHQ9ImJvcmRlcjowO3dpZHRo%0AOjA7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4O3Bv%0Ac2l0aW9uOmFic29sdXRlIixlLmFwcGVuZENoaWxkKGYpO2Z1bmN0aW9uIGcoKXtm%0ALnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1t%0Ab3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtk%0AaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MSU7dG9wOjElO2JvcmRlcjoxcHg7cGFk%0AZGluZzoxcHg7d2lkdGg6NHB4O3Bvc2l0aW9uOmFic29sdXRlIixmLmlubmVySFRN%0ATD0iIixkLmFwcGVuZENoaWxkKGUpO3ZhciBnPWEuZ2V0Q29tcHV0ZWRTdHlsZShm%0ALG51bGwpO2I9IjElIiE9PWcudG9wLGM9IjRweCI9PT1nLndpZHRoLGQucmVtb3Zl%0AQ2hpbGQoZSl9YS5nZXRDb21wdXRlZFN0eWxlJiZuLmV4dGVuZChrLHtwaXhlbFBv%0Ac2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGcoKSxifSxib3hTaXppbmdSZWxpYWJs%0AZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT1jJiZnKCksY30scmVsaWFibGVNYXJn%0AaW5SaWdodDpmdW5jdGlvbigpe3ZhciBiLGM9Zi5hcHBlbmRDaGlsZChsLmNyZWF0%0AZUVsZW1lbnQoImRpdiIpKTtyZXR1cm4gYy5zdHlsZS5jc3NUZXh0PWYuc3R5bGUu%0AY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94%0ALXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3Bs%0AYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowIixjLnN0eWxlLm1h%0AcmdpblJpZ2h0PWMuc3R5bGUud2lkdGg9IjAiLGYuc3R5bGUud2lkdGg9IjFweCIs%0AZC5hcHBlbmRDaGlsZChlKSxiPSFwYXJzZUZsb2F0KGEuZ2V0Q29tcHV0ZWRTdHls%0AZShjLG51bGwpLm1hcmdpblJpZ2h0KSxkLnJlbW92ZUNoaWxkKGUpLGJ9fSl9fSgp%0ALG4uc3dhcD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGc9e307Zm9yKGYgaW4g%0AYilnW2ZdPWEuc3R5bGVbZl0sYS5zdHlsZVtmXT1iW2ZdO2U9Yy5hcHBseShhLGR8%0AfFtdKTtmb3IoZiBpbiBiKWEuc3R5bGVbZl09Z1tmXTtyZXR1cm4gZX07dmFyIHpi%0APS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxBYj1uZXcgUmVnRXhwKCJeKCIr%0AUSsiKSguKikkIiwiaSIpLEJiPW5ldyBSZWdFeHAoIl4oWystXSk9KCIrUSsiKSIs%0AImkiKSxDYj17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4i%0ALGRpc3BsYXk6ImJsb2NrIn0sRGI9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWln%0AaHQ6IjQwMCJ9LEViPVsiV2Via2l0IiwiTyIsIk1veiIsIm1zIl07ZnVuY3Rpb24g%0ARmIoYSxiKXtpZihiIGluIGEpcmV0dXJuIGI7dmFyIGM9YlswXS50b1VwcGVyQ2Fz%0AZSgpK2Iuc2xpY2UoMSksZD1iLGU9RWIubGVuZ3RoO3doaWxlKGUtLSlpZihiPUVi%0AW2VdK2MsYiBpbiBhKXJldHVybiBiO3JldHVybiBkfWZ1bmN0aW9uIEdiKGEsYixj%0AKXt2YXIgZD1BYi5leGVjKGIpO3JldHVybiBkP01hdGgubWF4KDAsZFsxXS0oY3x8%0AMCkpKyhkWzJdfHwicHgiKTpifWZ1bmN0aW9uIEhiKGEsYixjLGQsZSl7Zm9yKHZh%0AciBmPWM9PT0oZD8iYm9yZGVyIjoiY29udGVudCIpPzQ6IndpZHRoIj09PWI/MTow%0ALGc9MDs0PmY7Zis9MikibWFyZ2luIj09PWMmJihnKz1uLmNzcyhhLGMrUltmXSwh%0AMCxlKSksZD8oImNvbnRlbnQiPT09YyYmKGctPW4uY3NzKGEsInBhZGRpbmciK1Jb%0AZl0sITAsZSkpLCJtYXJnaW4iIT09YyYmKGctPW4uY3NzKGEsImJvcmRlciIrUltm%0AXSsiV2lkdGgiLCEwLGUpKSk6KGcrPW4uY3NzKGEsInBhZGRpbmciK1JbZl0sITAs%0AZSksInBhZGRpbmciIT09YyYmKGcrPW4uY3NzKGEsImJvcmRlciIrUltmXSsiV2lk%0AdGgiLCEwLGUpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gSWIoYSxiLGMpe3ZhciBkPSEw%0ALGU9IndpZHRoIj09PWI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxmPXdi%0AKGEpLGc9ImJvcmRlci1ib3giPT09bi5jc3MoYSwiYm94U2l6aW5nIiwhMSxmKTtp%0AZigwPj1lfHxudWxsPT1lKXtpZihlPXhiKGEsYixmKSwoMD5lfHxudWxsPT1lKSYm%0AKGU9YS5zdHlsZVtiXSksdmIudGVzdChlKSlyZXR1cm4gZTtkPWcmJihrLmJveFNp%0AemluZ1JlbGlhYmxlKCl8fGU9PT1hLnN0eWxlW2JdKSxlPXBhcnNlRmxvYXQoZSl8%0AfDB9cmV0dXJuIGUrSGIoYSxiLGN8fChnPyJib3JkZXIiOiJjb250ZW50IiksZCxm%0AKSsicHgifWZ1bmN0aW9uIEpiKGEsYil7Zm9yKHZhciBjLGQsZSxmPVtdLGc9MCxo%0APWEubGVuZ3RoO2g+ZztnKyspZD1hW2ddLGQuc3R5bGUmJihmW2ddPUwuZ2V0KGQs%0AIm9sZGRpc3BsYXkiKSxjPWQuc3R5bGUuZGlzcGxheSxiPyhmW2ddfHwibm9uZSIh%0APT1jfHwoZC5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PWQuc3R5bGUuZGlzcGxheSYm%0AUyhkKSYmKGZbZ109TC5hY2Nlc3MoZCwib2xkZGlzcGxheSIsdGIoZC5ub2RlTmFt%0AZSkpKSk6KGU9UyhkKSwibm9uZSI9PT1jJiZlfHxMLnNldChkLCJvbGRkaXNwbGF5%0AIixlP2M6bi5jc3MoZCwiZGlzcGxheSIpKSkpO2ZvcihnPTA7aD5nO2crKylkPWFb%0AZ10sZC5zdHlsZSYmKGImJiJub25lIiE9PWQuc3R5bGUuZGlzcGxheSYmIiIhPT1k%0ALnN0eWxlLmRpc3BsYXl8fChkLnN0eWxlLmRpc3BsYXk9Yj9mW2ddfHwiIjoibm9u%0AZSIpKTtyZXR1cm4gYX1uLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpm%0AdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPXhiKGEsIm9wYWNpdHkiKTtyZXR1cm4i%0AIj09PWM/IjEiOmN9fX19LGNzc051bWJlcjp7Y29sdW1uQ291bnQ6ITAsZmlsbE9w%0AYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEw%0ALGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdp%0AZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6ImNz%0Ac0Zsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYSYmMyE9PWEubm9k%0AZVR5cGUmJjghPT1hLm5vZGVUeXBlJiZhLnN0eWxlKXt2YXIgZSxmLGcsaD1uLmNh%0AbWVsQ2FzZShiKSxpPWEuc3R5bGU7cmV0dXJuIGI9bi5jc3NQcm9wc1toXXx8KG4u%0AY3NzUHJvcHNbaF09RmIoaSxoKSksZz1uLmNzc0hvb2tzW2JdfHxuLmNzc0hvb2tz%0AW2hdLHZvaWQgMD09PWM/ZyYmImdldCJpbiBnJiZ2b2lkIDAhPT0oZT1nLmdldChh%0ALCExLGQpKT9lOmlbYl06KGY9dHlwZW9mIGMsInN0cmluZyI9PT1mJiYoZT1CYi5l%0AeGVjKGMpKSYmKGM9KGVbMV0rMSkqZVsyXStwYXJzZUZsb2F0KG4uY3NzKGEsYikp%0ALGY9Im51bWJlciIpLG51bGwhPWMmJmM9PT1jJiYoIm51bWJlciIhPT1mfHxuLmNz%0Ac051bWJlcltoXXx8KGMrPSJweCIpLGsuY2xlYXJDbG9uZVN0eWxlfHwiIiE9PWN8%0AfDAhPT1iLmluZGV4T2YoImJhY2tncm91bmQiKXx8KGlbYl09ImluaGVyaXQiKSxn%0AJiYic2V0ImluIGcmJnZvaWQgMD09PShjPWcuc2V0KGEsYyxkKSl8fChpW2JdPWMp%0AKSx2b2lkIDApfX0sY3NzOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoPW4u%0AY2FtZWxDYXNlKGIpO3JldHVybiBiPW4uY3NzUHJvcHNbaF18fChuLmNzc1Byb3Bz%0AW2hdPUZiKGEuc3R5bGUsaCkpLGc9bi5jc3NIb29rc1tiXXx8bi5jc3NIb29rc1to%0AXSxnJiYiZ2V0ImluIGcmJihlPWcuZ2V0KGEsITAsYykpLHZvaWQgMD09PWUmJihl%0APXhiKGEsYixkKSksIm5vcm1hbCI9PT1lJiZiIGluIERiJiYoZT1EYltiXSksIiI9%0APT1jfHxjPyhmPXBhcnNlRmxvYXQoZSksYz09PSEwfHxuLmlzTnVtZXJpYyhmKT9m%0AfHwwOmUpOmV9fSksbi5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihh%0ALGIpe24uY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGM/%0AemIudGVzdChuLmNzcyhhLCJkaXNwbGF5IikpJiYwPT09YS5vZmZzZXRXaWR0aD9u%0ALnN3YXAoYSxDYixmdW5jdGlvbigpe3JldHVybiBJYihhLGIsZCl9KTpJYihhLGIs%0AZCk6dm9pZCAwfSxzZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWQmJndiKGEpO3Jl%0AdHVybiBHYihhLGMsZD9IYihhLGIsZCwiYm9yZGVyLWJveCI9PT1uLmNzcyhhLCJi%0Ab3hTaXppbmciLCExLGUpLGUpOjApfX19KSxuLmNzc0hvb2tzLm1hcmdpblJpZ2h0%0APXliKGsucmVsaWFibGVNYXJnaW5SaWdodCxmdW5jdGlvbihhLGIpe3JldHVybiBi%0AP24uc3dhcChhLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSx4YixbYSwibWFyZ2lu%0AUmlnaHQiXSk6dm9pZCAwfSksbi5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixi%0Ab3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2ErYl09e2V4%0AcGFuZDpmdW5jdGlvbihjKXtmb3IodmFyIGQ9MCxlPXt9LGY9InN0cmluZyI9PXR5%0AcGVvZiBjP2Muc3BsaXQoIiAiKTpbY107ND5kO2QrKyllW2ErUltkXStiXT1mW2Rd%0AfHxmW2QtMl18fGZbMF07cmV0dXJuIGV9fSx1Yi50ZXN0KGEpfHwobi5jc3NIb29r%0Ac1thK2JdLnNldD1HYil9KSxuLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGEsYil7%0AcmV0dXJuIEoodGhpcyxmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXt9LGc9MDtp%0AZihuLmlzQXJyYXkoYikpe2ZvcihkPXdiKGEpLGU9Yi5sZW5ndGg7ZT5nO2crKylm%0AW2JbZ11dPW4uY3NzKGEsYltnXSwhMSxkKTtyZXR1cm4gZn1yZXR1cm4gdm9pZCAw%0AIT09Yz9uLnN0eWxlKGEsYixjKTpuLmNzcyhhLGIpfSxhLGIsYXJndW1lbnRzLmxl%0Abmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBKYih0aGlzLCEwKX0saGlk%0AZTpmdW5jdGlvbigpe3JldHVybiBKYih0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGEp%0Ae3JldHVybiJib29sZWFuIj09dHlwZW9mIGE/YT90aGlzLnNob3coKTp0aGlzLmhp%0AZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtTKHRoaXMpP24odGhpcykuc2hvdygp%0AOm4odGhpcykuaGlkZSgpfSl9fSk7ZnVuY3Rpb24gS2IoYSxiLGMsZCxlKXtyZXR1%0Acm4gbmV3IEtiLnByb3RvdHlwZS5pbml0KGEsYixjLGQsZSl9bi5Ud2Vlbj1LYixL%0AYi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOktiLGluaXQ6ZnVuY3Rpb24oYSxiLGMs%0AZCxlLGYpe3RoaXMuZWxlbT1hLHRoaXMucHJvcD1jLHRoaXMuZWFzaW5nPWV8fCJz%0Ad2luZyIsdGhpcy5vcHRpb25zPWIsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1%0AcigpLHRoaXMuZW5kPWQsdGhpcy51bml0PWZ8fChuLmNzc051bWJlcltjXT8iIjoi%0AcHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGE9S2IucHJvcEhvb2tzW3RoaXMucHJv%0AcF07cmV0dXJuIGEmJmEuZ2V0P2EuZ2V0KHRoaXMpOktiLnByb3BIb29rcy5fZGVm%0AYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihhKXt2YXIgYixjPUtiLnByb3BI%0Ab29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLnBvcz1iPXRoaXMub3B0aW9ucy5k%0AdXJhdGlvbj9uLmVhc2luZ1t0aGlzLmVhc2luZ10oYSx0aGlzLm9wdGlvbnMuZHVy%0AYXRpb24qYSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTphLHRoaXMubm93PSh0%0AaGlzLmVuZC10aGlzLnN0YXJ0KSpiK3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0%0AZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRo%0AaXMpLGMmJmMuc2V0P2Muc2V0KHRoaXMpOktiLnByb3BIb29rcy5fZGVmYXVsdC5z%0AZXQodGhpcyksdGhpc319LEtiLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1LYi5w%0Acm90b3R5cGUsS2IucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGEp%0Ae3ZhciBiO3JldHVybiBudWxsPT1hLmVsZW1bYS5wcm9wXXx8YS5lbGVtLnN0eWxl%0AJiZudWxsIT1hLmVsZW0uc3R5bGVbYS5wcm9wXT8oYj1uLmNzcyhhLmVsZW0sYS5w%0Acm9wLCIiKSxiJiYiYXV0byIhPT1iP2I6MCk6YS5lbGVtW2EucHJvcF19LHNldDpm%0AdW5jdGlvbihhKXtuLmZ4LnN0ZXBbYS5wcm9wXT9uLmZ4LnN0ZXBbYS5wcm9wXShh%0AKTphLmVsZW0uc3R5bGUmJihudWxsIT1hLmVsZW0uc3R5bGVbbi5jc3NQcm9wc1th%0ALnByb3BdXXx8bi5jc3NIb29rc1thLnByb3BdKT9uLnN0eWxlKGEuZWxlbSxhLnBy%0Ab3AsYS5ub3crYS51bml0KTphLmVsZW1bYS5wcm9wXT1hLm5vd319fSxLYi5wcm9w%0ASG9va3Muc2Nyb2xsVG9wPUtiLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVu%0AY3Rpb24oYSl7YS5lbGVtLm5vZGVUeXBlJiZhLmVsZW0ucGFyZW50Tm9kZSYmKGEu%0AZWxlbVthLnByb3BdPWEubm93KX19LG4uZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24o%0AYSl7cmV0dXJuIGF9LHN3aW5nOmZ1bmN0aW9uKGEpe3JldHVybi41LU1hdGguY29z%0AKGEqTWF0aC5QSSkvMn19LG4uZng9S2IucHJvdG90eXBlLmluaXQsbi5meC5zdGVw%0APXt9O3ZhciBMYixNYixOYj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sT2I9bmV3%0AIFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK1ErIikoW2EteiVdKikkIiwiaSIpLFBi%0APS9xdWV1ZUhvb2tzJC8sUWI9W1ZiXSxSYj17IioiOltmdW5jdGlvbihhLGIpe3Zh%0AciBjPXRoaXMuY3JlYXRlVHdlZW4oYSxiKSxkPWMuY3VyKCksZT1PYi5leGVjKGIp%0ALGY9ZSYmZVszXXx8KG4uY3NzTnVtYmVyW2FdPyIiOiJweCIpLGc9KG4uY3NzTnVt%0AYmVyW2FdfHwicHgiIT09ZiYmK2QpJiZPYi5leGVjKG4uY3NzKGMuZWxlbSxhKSks%0AaD0xLGk9MjA7aWYoZyYmZ1szXSE9PWYpe2Y9Znx8Z1szXSxlPWV8fFtdLGc9K2R8%0AfDE7ZG8gaD1ofHwiLjUiLGcvPWgsbi5zdHlsZShjLmVsZW0sYSxnK2YpO3doaWxl%0AKGghPT0oaD1jLmN1cigpL2QpJiYxIT09aCYmLS1pKX1yZXR1cm4gZSYmKGc9Yy5z%0AdGFydD0rZ3x8K2R8fDAsYy51bml0PWYsYy5lbmQ9ZVsxXT9nKyhlWzFdKzEpKmVb%0AMl06K2VbMl0pLGN9XX07ZnVuY3Rpb24gU2IoKXtyZXR1cm4gc2V0VGltZW91dChm%0AdW5jdGlvbigpe0xiPXZvaWQgMH0pLExiPW4ubm93KCl9ZnVuY3Rpb24gVGIoYSxi%0AKXt2YXIgYyxkPTAsZT17aGVpZ2h0OmF9O2ZvcihiPWI/MTowOzQ+ZDtkKz0yLWIp%0AYz1SW2RdLGVbIm1hcmdpbiIrY109ZVsicGFkZGluZyIrY109YTtyZXR1cm4gYiYm%0AKGUub3BhY2l0eT1lLndpZHRoPWEpLGV9ZnVuY3Rpb24gVWIoYSxiLGMpe2Zvcih2%0AYXIgZCxlPShSYltiXXx8W10pLmNvbmNhdChSYlsiKiJdKSxmPTAsZz1lLmxlbmd0%0AaDtnPmY7ZisrKWlmKGQ9ZVtmXS5jYWxsKGMsYixhKSlyZXR1cm4gZH1mdW5jdGlv%0AbiBWYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsPXRoaXMsbT17fSxvPWEu%0Ac3R5bGUscD1hLm5vZGVUeXBlJiZTKGEpLHE9TC5nZXQoYSwiZnhzaG93Iik7Yy5x%0AdWV1ZXx8KGg9bi5fcXVldWVIb29rcyhhLCJmeCIpLG51bGw9PWgudW5xdWV1ZWQm%0AJihoLnVucXVldWVkPTAsaT1oLmVtcHR5LmZpcmUsaC5lbXB0eS5maXJlPWZ1bmN0%0AaW9uKCl7aC51bnF1ZXVlZHx8aSgpfSksaC51bnF1ZXVlZCsrLGwuYWx3YXlzKGZ1%0AbmN0aW9uKCl7bC5hbHdheXMoZnVuY3Rpb24oKXtoLnVucXVldWVkLS0sbi5xdWV1%0AZShhLCJmeCIpLmxlbmd0aHx8aC5lbXB0eS5maXJlKCl9KX0pKSwxPT09YS5ub2Rl%0AVHlwZSYmKCJoZWlnaHQiaW4gYnx8IndpZHRoImluIGIpJiYoYy5vdmVyZmxvdz1b%0Aby5vdmVyZmxvdyxvLm92ZXJmbG93WCxvLm92ZXJmbG93WV0saj1uLmNzcyhhLCJk%0AaXNwbGF5Iiksaz0ibm9uZSI9PT1qP0wuZ2V0KGEsIm9sZGRpc3BsYXkiKXx8dGIo%0AYS5ub2RlTmFtZSk6aiwiaW5saW5lIj09PWsmJiJub25lIj09PW4uY3NzKGEsImZs%0Ab2F0IikmJihvLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxjLm92ZXJmbG93JiYo%0Aby5vdmVyZmxvdz0iaGlkZGVuIixsLmFsd2F5cyhmdW5jdGlvbigpe28ub3ZlcmZs%0Ab3c9Yy5vdmVyZmxvd1swXSxvLm92ZXJmbG93WD1jLm92ZXJmbG93WzFdLG8ub3Zl%0AcmZsb3dZPWMub3ZlcmZsb3dbMl19KSk7Zm9yKGQgaW4gYilpZihlPWJbZF0sTmIu%0AZXhlYyhlKSl7aWYoZGVsZXRlIGJbZF0sZj1mfHwidG9nZ2xlIj09PWUsZT09PShw%0APyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1lfHwhcXx8dm9pZCAwPT09cVtk%0AXSljb250aW51ZTtwPSEwfW1bZF09cSYmcVtkXXx8bi5zdHlsZShhLGQpfWVsc2Ug%0Aaj12b2lkIDA7aWYobi5pc0VtcHR5T2JqZWN0KG0pKSJpbmxpbmUiPT09KCJub25l%0AIj09PWo/dGIoYS5ub2RlTmFtZSk6aikmJihvLmRpc3BsYXk9aik7ZWxzZXtxPyJo%0AaWRkZW4iaW4gcSYmKHA9cS5oaWRkZW4pOnE9TC5hY2Nlc3MoYSwiZnhzaG93Iix7%0AfSksZiYmKHEuaGlkZGVuPSFwKSxwP24oYSkuc2hvdygpOmwuZG9uZShmdW5jdGlv%0Abigpe24oYSkuaGlkZSgpfSksbC5kb25lKGZ1bmN0aW9uKCl7dmFyIGI7TC5yZW1v%0AdmUoYSwiZnhzaG93Iik7Zm9yKGIgaW4gbSluLnN0eWxlKGEsYixtW2JdKX0pO2Zv%0AcihkIGluIG0pZz1VYihwP3FbZF06MCxkLGwpLGQgaW4gcXx8KHFbZF09Zy5zdGFy%0AdCxwJiYoZy5lbmQ9Zy5zdGFydCxnLnN0YXJ0PSJ3aWR0aCI9PT1kfHwiaGVpZ2h0%0AIj09PWQ/MTowKSl9fWZ1bmN0aW9uIFdiKGEsYil7dmFyIGMsZCxlLGYsZztmb3Io%0AYyBpbiBhKWlmKGQ9bi5jYW1lbENhc2UoYyksZT1iW2RdLGY9YVtjXSxuLmlzQXJy%0AYXkoZikmJihlPWZbMV0sZj1hW2NdPWZbMF0pLGMhPT1kJiYoYVtkXT1mLGRlbGV0%0AZSBhW2NdKSxnPW4uY3NzSG9va3NbZF0sZyYmImV4cGFuZCJpbiBnKXtmPWcuZXhw%0AYW5kKGYpLGRlbGV0ZSBhW2RdO2ZvcihjIGluIGYpYyBpbiBhfHwoYVtjXT1mW2Nd%0ALGJbY109ZSl9ZWxzZSBiW2RdPWV9ZnVuY3Rpb24gWGIoYSxiLGMpe3ZhciBkLGUs%0AZj0wLGc9UWIubGVuZ3RoLGg9bi5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigp%0Ae2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7aWYoZSlyZXR1cm4hMTtmb3Io%0AdmFyIGI9TGJ8fFNiKCksYz1NYXRoLm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRp%0Ab24tYiksZD1jL2ouZHVyYXRpb258fDAsZj0xLWQsZz0wLGk9ai50d2VlbnMubGVu%0AZ3RoO2k+ZztnKyspai50d2VlbnNbZ10ucnVuKGYpO3JldHVybiBoLm5vdGlmeVdp%0AdGgoYSxbaixmLGNdKSwxPmYmJmk/YzooaC5yZXNvbHZlV2l0aChhLFtqXSksITEp%0AfSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOm4uZXh0ZW5kKHt9LGIpLG9wdHM6%0Abi5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LGMpLG9yaWdpbmFsUHJvcGVy%0AdGllczpiLG9yaWdpbmFsT3B0aW9uczpjLHN0YXJ0VGltZTpMYnx8U2IoKSxkdXJh%0AdGlvbjpjLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihi%0ALGMpe3ZhciBkPW4uVHdlZW4oYSxqLm9wdHMsYixjLGoub3B0cy5zcGVjaWFsRWFz%0AaW5nW2JdfHxqLm9wdHMuZWFzaW5nKTtyZXR1cm4gai50d2VlbnMucHVzaChkKSxk%0AfSxzdG9wOmZ1bmN0aW9uKGIpe3ZhciBjPTAsZD1iP2oudHdlZW5zLmxlbmd0aDow%0AO2lmKGUpcmV0dXJuIHRoaXM7Zm9yKGU9ITA7ZD5jO2MrKylqLnR3ZWVuc1tjXS5y%0AdW4oMSk7cmV0dXJuIGI/aC5yZXNvbHZlV2l0aChhLFtqLGJdKTpoLnJlamVjdFdp%0AdGgoYSxbaixiXSksdGhpc319KSxrPWoucHJvcHM7Zm9yKFdiKGssai5vcHRzLnNw%0AZWNpYWxFYXNpbmcpO2c+ZjtmKyspaWYoZD1RYltmXS5jYWxsKGosYSxrLGoub3B0%0AcykpcmV0dXJuIGQ7cmV0dXJuIG4ubWFwKGssVWIsaiksbi5pc0Z1bmN0aW9uKGou%0Ab3B0cy5zdGFydCkmJmoub3B0cy5zdGFydC5jYWxsKGEsaiksbi5meC50aW1lcihu%0ALmV4dGVuZChpLHtlbGVtOmEsYW5pbTpqLHF1ZXVlOmoub3B0cy5xdWV1ZX0pKSxq%0ALnByb2dyZXNzKGoub3B0cy5wcm9ncmVzcykuZG9uZShqLm9wdHMuZG9uZSxqLm9w%0AdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3%0AYXlzKX1uLkFuaW1hdGlvbj1uLmV4dGVuZChYYix7dHdlZW5lcjpmdW5jdGlvbihh%0ALGIpe24uaXNGdW5jdGlvbihhKT8oYj1hLGE9WyIqIl0pOmE9YS5zcGxpdCgiICIp%0AO2Zvcih2YXIgYyxkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWM9YVtkXSxSYltjXT1S%0AYltjXXx8W10sUmJbY10udW5zaGlmdChiKX0scHJlZmlsdGVyOmZ1bmN0aW9uKGEs%0AYil7Yj9RYi51bnNoaWZ0KGEpOlFiLnB1c2goYSl9fSksbi5zcGVlZD1mdW5jdGlv%0AbihhLGIsYyl7dmFyIGQ9YSYmIm9iamVjdCI9PXR5cGVvZiBhP24uZXh0ZW5kKHt9%0ALGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8bi5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0%0AaW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFuLmlzRnVuY3Rpb24oYikmJmJ9O3JldHVy%0AbiBkLmR1cmF0aW9uPW4uZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiBkLmR1cmF0%0AaW9uP2QuZHVyYXRpb246ZC5kdXJhdGlvbiBpbiBuLmZ4LnNwZWVkcz9uLmZ4LnNw%0AZWVkc1tkLmR1cmF0aW9uXTpuLmZ4LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ZC5x%0AdWV1ZXx8ZC5xdWV1ZT09PSEwKSYmKGQucXVldWU9ImZ4IiksZC5vbGQ9ZC5jb21w%0AbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bi5pc0Z1bmN0aW9uKGQub2xkKSYm%0AZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZuLmRlcXVldWUodGhpcyxkLnF1ZXVl%0AKX0sZH0sbi5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1%0Acm4gdGhpcy5maWx0ZXIoUykuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCku%0AYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxi%0ALGMsZCl7dmFyIGU9bi5pc0VtcHR5T2JqZWN0KGEpLGY9bi5zcGVlZChiLGMsZCks%0AZz1mdW5jdGlvbigpe3ZhciBiPVhiKHRoaXMsbi5leHRlbmQoe30sYSksZik7KGV8%0AfEwuZ2V0KHRoaXMsImZpbmlzaCIpKSYmYi5zdG9wKCEwKX07cmV0dXJuIGcuZmlu%0AaXNoPWcsZXx8Zi5xdWV1ZT09PSExP3RoaXMuZWFjaChnKTp0aGlzLnF1ZXVlKGYu%0AcXVldWUsZyl9LHN0b3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWZ1bmN0aW9uKGEp%0Ae3ZhciBiPWEuc3RvcDtkZWxldGUgYS5zdG9wLGIoYyl9O3JldHVybiJzdHJpbmci%0AIT10eXBlb2YgYSYmKGM9YixiPWEsYT12b2lkIDApLGImJmEhPT0hMSYmdGhpcy5x%0AdWV1ZShhfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj0hMCxl%0APW51bGwhPWEmJmErInF1ZXVlSG9va3MiLGY9bi50aW1lcnMsZz1MLmdldCh0aGlz%0AKTtpZihlKWdbZV0mJmdbZV0uc3RvcCYmZChnW2VdKTtlbHNlIGZvcihlIGluIGcp%0AZ1tlXSYmZ1tlXS5zdG9wJiZQYi50ZXN0KGUpJiZkKGdbZV0pO2ZvcihlPWYubGVu%0AZ3RoO2UtLTspZltlXS5lbGVtIT09dGhpc3x8bnVsbCE9YSYmZltlXS5xdWV1ZSE9%0APWF8fChmW2VdLmFuaW0uc3RvcChjKSxiPSExLGYuc3BsaWNlKGUsMSkpOyhifHwh%0AYykmJm4uZGVxdWV1ZSh0aGlzLGEpfSl9LGZpbmlzaDpmdW5jdGlvbihhKXtyZXR1%0Acm4gYSE9PSExJiYoYT1hfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIg%0AYixjPUwuZ2V0KHRoaXMpLGQ9Y1thKyJxdWV1ZSJdLGU9Y1thKyJxdWV1ZUhvb2tz%0AIl0sZj1uLnRpbWVycyxnPWQ/ZC5sZW5ndGg6MDtmb3IoYy5maW5pc2g9ITAsbi5x%0AdWV1ZSh0aGlzLGEsW10pLGUmJmUuc3RvcCYmZS5zdG9wLmNhbGwodGhpcywhMCks%0AYj1mLmxlbmd0aDtiLS07KWZbYl0uZWxlbT09PXRoaXMmJmZbYl0ucXVldWU9PT1h%0AJiYoZltiXS5hbmltLnN0b3AoITApLGYuc3BsaWNlKGIsMSkpO2ZvcihiPTA7Zz5i%0AO2IrKylkW2JdJiZkW2JdLmZpbmlzaCYmZFtiXS5maW5pc2guY2FsbCh0aGlzKTtk%0AZWxldGUgYy5maW5pc2h9KX19KSxuLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlk%0AZSJdLGZ1bmN0aW9uKGEsYil7dmFyIGM9bi5mbltiXTtuLmZuW2JdPWZ1bmN0aW9u%0AKGEsZCxlKXtyZXR1cm4gbnVsbD09YXx8ImJvb2xlYW4iPT10eXBlb2YgYT9jLmFw%0AcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoVGIoYiwhMCksYSxkLGUp%0AfX0pLG4uZWFjaCh7c2xpZGVEb3duOlRiKCJzaG93Iiksc2xpZGVVcDpUYigiaGlk%0AZSIpLHNsaWRlVG9nZ2xlOlRiKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNo%0Ab3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0%0AeToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7bi5mblthXT1mdW5jdGlvbihhLGMs%0AZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxuLnRpbWVycz1bXSxu%0ALmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPTAsYz1uLnRpbWVycztmb3IoTGI9%0Abi5ub3coKTtiPGMubGVuZ3RoO2IrKylhPWNbYl0sYSgpfHxjW2JdIT09YXx8Yy5z%0AcGxpY2UoYi0tLDEpO2MubGVuZ3RofHxuLmZ4LnN0b3AoKSxMYj12b2lkIDB9LG4u%0AZngudGltZXI9ZnVuY3Rpb24oYSl7bi50aW1lcnMucHVzaChhKSxhKCk/bi5meC5z%0AdGFydCgpOm4udGltZXJzLnBvcCgpfSxuLmZ4LmludGVydmFsPTEzLG4uZnguc3Rh%0AcnQ9ZnVuY3Rpb24oKXtNYnx8KE1iPXNldEludGVydmFsKG4uZngudGljayxuLmZ4%0ALmludGVydmFsKSl9LG4uZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwo%0ATWIpLE1iPW51bGx9LG4uZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVm%0AYXVsdDo0MDB9LG4uZm4uZGVsYXk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1uLmZ4%0AP24uZnguc3BlZWRzW2FdfHxhOmEsYj1ifHwiZngiLHRoaXMucXVldWUoYixmdW5j%0AdGlvbihiLGMpe3ZhciBkPXNldFRpbWVvdXQoYixhKTtjLnN0b3A9ZnVuY3Rpb24o%0AKXtjbGVhclRpbWVvdXQoZCl9fSl9LGZ1bmN0aW9uKCl7dmFyIGE9bC5jcmVhdGVF%0AbGVtZW50KCJpbnB1dCIpLGI9bC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxjPWIu%0AYXBwZW5kQ2hpbGQobC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7YS50eXBlPSJj%0AaGVja2JveCIsay5jaGVja09uPSIiIT09YS52YWx1ZSxrLm9wdFNlbGVjdGVkPWMu%0Ac2VsZWN0ZWQsYi5kaXNhYmxlZD0hMCxrLm9wdERpc2FibGVkPSFjLmRpc2FibGVk%0ALGE9bC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGEudmFsdWU9InQiLGEudHlwZT0i%0AcmFkaW8iLGsucmFkaW9WYWx1ZT0idCI9PT1hLnZhbHVlfSgpO3ZhciBZYixaYiwk%0AYj1uLmV4cHIuYXR0ckhhbmRsZTtuLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihh%0ALGIpe3JldHVybiBKKHRoaXMsbi5hdHRyLGEsYixhcmd1bWVudHMubGVuZ3RoPjEp%0AfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rp%0Ab24oKXtuLnJlbW92ZUF0dHIodGhpcyxhKX0pfX0pLG4uZXh0ZW5kKHthdHRyOmZ1%0AbmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9YS5ub2RlVHlwZTtpZihhJiYzIT09ZiYm%0AOCE9PWYmJjIhPT1mKXJldHVybiB0eXBlb2YgYS5nZXRBdHRyaWJ1dGU9PT1VP24u%0AcHJvcChhLGIsYyk6KDE9PT1mJiZuLmlzWE1MRG9jKGEpfHwoYj1iLnRvTG93ZXJD%0AYXNlKCksZD1uLmF0dHJIb29rc1tiXXx8KG4uZXhwci5tYXRjaC5ib29sLnRlc3Qo%0AYik/WmI6WWIpKSx2b2lkIDA9PT1jP2QmJiJnZXQiaW4gZCYmbnVsbCE9PShlPWQu%0AZ2V0KGEsYikpP2U6KGU9bi5maW5kLmF0dHIoYSxiKSxudWxsPT1lP3ZvaWQgMDpl%0AKTpudWxsIT09Yz9kJiYic2V0ImluIGQmJnZvaWQgMCE9PShlPWQuc2V0KGEsYyxi%0AKSk/ZTooYS5zZXRBdHRyaWJ1dGUoYixjKyIiKSxjKTp2b2lkIG4ucmVtb3ZlQXR0%0AcihhLGIpKQp9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9MCxm%0APWImJmIubWF0Y2goRSk7aWYoZiYmMT09PWEubm9kZVR5cGUpd2hpbGUoYz1mW2Ur%0AK10pZD1uLnByb3BGaXhbY118fGMsbi5leHByLm1hdGNoLmJvb2wudGVzdChjKSYm%0AKGFbZF09ITEpLGEucmVtb3ZlQXR0cmlidXRlKGMpfSxhdHRySG9va3M6e3R5cGU6%0Ae3NldDpmdW5jdGlvbihhLGIpe2lmKCFrLnJhZGlvVmFsdWUmJiJyYWRpbyI9PT1i%0AJiZuLm5vZGVOYW1lKGEsImlucHV0Iikpe3ZhciBjPWEudmFsdWU7cmV0dXJuIGEu%0Ac2V0QXR0cmlidXRlKCJ0eXBlIixiKSxjJiYoYS52YWx1ZT1jKSxifX19fX0pLFpi%0APXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPT09ITE/bi5yZW1vdmVBdHRy%0AKGEsYyk6YS5zZXRBdHRyaWJ1dGUoYyxjKSxjfX0sbi5lYWNoKG4uZXhwci5tYXRj%0AaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGEsYil7dmFyIGM9%0AJGJbYl18fG4uZmluZC5hdHRyOyRiW2JdPWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxm%0AO3JldHVybiBkfHwoZj0kYltiXSwkYltiXT1lLGU9bnVsbCE9YyhhLGIsZCk/Yi50%0Ab0xvd2VyQ2FzZSgpOm51bGwsJGJbYl09ZiksZX19KTt2YXIgX2I9L14oPzppbnB1%0AdHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaTtuLmZuLmV4dGVuZCh7cHJvcDpm%0AdW5jdGlvbihhLGIpe3JldHVybiBKKHRoaXMsbi5wcm9wLGEsYixhcmd1bWVudHMu%0AbGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVh%0AY2goZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tuLnByb3BGaXhbYV18fGFdfSl9fSks%0Abi5leHRlbmQoe3Byb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFz%0Ac05hbWUifSxwcm9wOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZz1hLm5vZGVU%0AeXBlO2lmKGEmJjMhPT1nJiY4IT09ZyYmMiE9PWcpcmV0dXJuIGY9MSE9PWd8fCFu%0ALmlzWE1MRG9jKGEpLGYmJihiPW4ucHJvcEZpeFtiXXx8YixlPW4ucHJvcEhvb2tz%0AW2JdKSx2b2lkIDAhPT1jP2UmJiJzZXQiaW4gZSYmdm9pZCAwIT09KGQ9ZS5zZXQo%0AYSxjLGIpKT9kOmFbYl09YzplJiYiZ2V0ImluIGUmJm51bGwhPT0oZD1lLmdldChh%0ALGIpKT9kOmFbYl19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihh%0AKXtyZXR1cm4gYS5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fF9iLnRlc3QoYS5u%0Ab2RlTmFtZSl8fGEuaHJlZj9hLnRhYkluZGV4Oi0xfX19fSksay5vcHRTZWxlY3Rl%0AZHx8KG4ucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9%0AYS5wYXJlbnROb2RlO3JldHVybiBiJiZiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9k%0AZS5zZWxlY3RlZEluZGV4LG51bGx9fSksbi5lYWNoKFsidGFiSW5kZXgiLCJyZWFk%0AT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJy%0Ab3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVu%0AdEVkaXRhYmxlIl0sZnVuY3Rpb24oKXtuLnByb3BGaXhbdGhpcy50b0xvd2VyQ2Fz%0AZSgpXT10aGlzfSk7dmFyIGFjPS9bXHRcclxuXGZdL2c7bi5mbi5leHRlbmQoe2Fk%0AZENsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPSJzdHJpbmciPT10%0AeXBlb2YgYSYmYSxpPTAsaj10aGlzLmxlbmd0aDtpZihuLmlzRnVuY3Rpb24oYSkp%0AcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLmFkZENsYXNzKGEu%0AY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGgpZm9yKGI9KGF8fCIi%0AKS5tYXRjaChFKXx8W107aj5pO2krKylpZihjPXRoaXNbaV0sZD0xPT09Yy5ub2Rl%0AVHlwZSYmKGMuY2xhc3NOYW1lPygiICIrYy5jbGFzc05hbWUrIiAiKS5yZXBsYWNl%0AKGFjLCIgIik6IiAiKSl7Zj0wO3doaWxlKGU9YltmKytdKWQuaW5kZXhPZigiICIr%0AZSsiICIpPDAmJihkKz1lKyIgIik7Zz1uLnRyaW0oZCksYy5jbGFzc05hbWUhPT1n%0AJiYoYy5jbGFzc05hbWU9Zyl9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0%0AaW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPTA9PT1hcmd1bWVudHMubGVuZ3RofHwi%0Ac3RyaW5nIj09dHlwZW9mIGEmJmEsaT0wLGo9dGhpcy5sZW5ndGg7aWYobi5pc0Z1%0AbmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bih0aGlzKS5y%0AZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZiho%0AKWZvcihiPShhfHwiIikubWF0Y2goRSl8fFtdO2o+aTtpKyspaWYoYz10aGlzW2ld%0ALGQ9MT09PWMubm9kZVR5cGUmJihjLmNsYXNzTmFtZT8oIiAiK2MuY2xhc3NOYW1l%0AKyIgIikucmVwbGFjZShhYywiICIpOiIiKSl7Zj0wO3doaWxlKGU9YltmKytdKXdo%0AaWxlKGQuaW5kZXhPZigiICIrZSsiICIpPj0wKWQ9ZC5yZXBsYWNlKCIgIitlKyIg%0AIiwiICIpO2c9YT9uLnRyaW0oZCk6IiIsYy5jbGFzc05hbWUhPT1nJiYoYy5jbGFz%0Ac05hbWU9Zyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7%0AdmFyIGM9dHlwZW9mIGE7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYiYmInN0cmlu%0AZyI9PT1jP2I/dGhpcy5hZGRDbGFzcyhhKTp0aGlzLnJlbW92ZUNsYXNzKGEpOnRo%0AaXMuZWFjaChuLmlzRnVuY3Rpb24oYSk/ZnVuY3Rpb24oYyl7bih0aGlzKS50b2dn%0AbGVDbGFzcyhhLmNhbGwodGhpcyxjLHRoaXMuY2xhc3NOYW1lLGIpLGIpfTpmdW5j%0AdGlvbigpe2lmKCJzdHJpbmciPT09Yyl7dmFyIGIsZD0wLGU9bih0aGlzKSxmPWEu%0AbWF0Y2goRSl8fFtdO3doaWxlKGI9ZltkKytdKWUuaGFzQ2xhc3MoYik/ZS5yZW1v%0AdmVDbGFzcyhiKTplLmFkZENsYXNzKGIpfWVsc2UoYz09PVV8fCJib29sZWFuIj09%0APWMpJiYodGhpcy5jbGFzc05hbWUmJkwuc2V0KHRoaXMsIl9fY2xhc3NOYW1lX18i%0ALHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8%0AYT09PSExPyIiOkwuZ2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpfSl9LGhh%0Ac0NsYXNzOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iICIrYSsiICIsYz0wLGQ9dGhp%0Acy5sZW5ndGg7ZD5jO2MrKylpZigxPT09dGhpc1tjXS5ub2RlVHlwZSYmKCIgIit0%0AaGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoYWMsIiAiKS5pbmRleE9mKGIp%0APj0wKXJldHVybiEwO3JldHVybiExfX0pO3ZhciBiYz0vXHIvZztuLmZuLmV4dGVu%0AZCh7dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07e2lmKGFyZ3Vt%0AZW50cy5sZW5ndGgpcmV0dXJuIGQ9bi5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChm%0AdW5jdGlvbihjKXt2YXIgZTsxPT09dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwo%0AdGhpcyxjLG4odGhpcykudmFsKCkpOmEsbnVsbD09ZT9lPSIiOiJudW1iZXIiPT10%0AeXBlb2YgZT9lKz0iIjpuLmlzQXJyYXkoZSkmJihlPW4ubWFwKGUsZnVuY3Rpb24o%0AYSl7cmV0dXJuIG51bGw9PWE/IiI6YSsiIn0pKSxiPW4udmFsSG9va3NbdGhpcy50%0AeXBlXXx8bi52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGIm%0AJiJzZXQiaW4gYiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLCJ2YWx1ZSIpfHwodGhp%0Acy52YWx1ZT1lKSl9KTtpZihlKXJldHVybiBiPW4udmFsSG9va3NbZS50eXBlXXx8%0Abi52YWxIb29rc1tlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJnZXQiaW4g%0AYiYmdm9pZCAwIT09KGM9Yi5nZXQoZSwidmFsdWUiKSk/YzooYz1lLnZhbHVlLCJz%0AdHJpbmciPT10eXBlb2YgYz9jLnJlcGxhY2UoYmMsIiIpOm51bGw9PWM/IiI6Yyl9%0AfX0pLG4uZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7%0AdmFyIGI9bi5maW5kLmF0dHIoYSwidmFsdWUiKTtyZXR1cm4gbnVsbCE9Yj9iOm4u%0AdHJpbShuLnRleHQoYSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZh%0AciBiLGMsZD1hLm9wdGlvbnMsZT1hLnNlbGVjdGVkSW5kZXgsZj0ic2VsZWN0LW9u%0AZSI9PT1hLnR5cGV8fDA+ZSxnPWY/bnVsbDpbXSxoPWY/ZSsxOmQubGVuZ3RoLGk9%0AMD5lP2g6Zj9lOjA7aD5pO2krKylpZihjPWRbaV0sISghYy5zZWxlY3RlZCYmaSE9%0APWV8fChrLm9wdERpc2FibGVkP2MuZGlzYWJsZWQ6bnVsbCE9PWMuZ2V0QXR0cmli%0AdXRlKCJkaXNhYmxlZCIpKXx8Yy5wYXJlbnROb2RlLmRpc2FibGVkJiZuLm5vZGVO%0AYW1lKGMucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKGI9bihjKS52YWwoKSxm%0AKXJldHVybiBiO2cucHVzaChiKX1yZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKGEsYil7%0AdmFyIGMsZCxlPWEub3B0aW9ucyxmPW4ubWFrZUFycmF5KGIpLGc9ZS5sZW5ndGg7%0Ad2hpbGUoZy0tKWQ9ZVtnXSwoZC5zZWxlY3RlZD1uLmluQXJyYXkoZC52YWx1ZSxm%0AKT49MCkmJihjPSEwKTtyZXR1cm4gY3x8KGEuc2VsZWN0ZWRJbmRleD0tMSksZn19%0AfX0pLG4uZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe24udmFs%0ASG9va3NbdGhpc109e3NldDpmdW5jdGlvbihhLGIpe3JldHVybiBuLmlzQXJyYXko%0AYik/YS5jaGVja2VkPW4uaW5BcnJheShuKGEpLnZhbCgpLGIpPj0wOnZvaWQgMH19%0ALGsuY2hlY2tPbnx8KG4udmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGEpe3Jl%0AdHVybiBudWxsPT09YS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjphLnZhbHVl%0AfSl9KSxuLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJl%0Ac2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3Vz%0AZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3Vz%0AZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5%0AdXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtu%0ALmZuW2JdPWZ1bmN0aW9uKGEsYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90%0AaGlzLm9uKGIsbnVsbCxhLGMpOnRoaXMudHJpZ2dlcihiKX19KSxuLmZuLmV4dGVu%0AZCh7aG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEp%0ALm1vdXNlbGVhdmUoYnx8YSl9LGJpbmQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0%0AaGlzLm9uKGEsbnVsbCxiLGMpfSx1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4g%0AdGhpcy5vZmYoYSxudWxsLGIpfSxkZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyxkKXty%0AZXR1cm4gdGhpcy5vbihiLGEsYyxkKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIs%0AYyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGEsIioqIik6%0AdGhpcy5vZmYoYixhfHwiKioiLGMpfX0pO3ZhciBjYz1uLm5vdygpLGRjPS9cPy87%0Abi5wYXJzZUpTT049ZnVuY3Rpb24oYSl7cmV0dXJuIEpTT04ucGFyc2UoYSsiIil9%0ALG4ucGFyc2VYTUw9ZnVuY3Rpb24oYSl7dmFyIGIsYztpZighYXx8InN0cmluZyIh%0APXR5cGVvZiBhKXJldHVybiBudWxsO3RyeXtjPW5ldyBET01QYXJzZXIsYj1jLnBh%0AcnNlRnJvbVN0cmluZyhhLCJ0ZXh0L3htbCIpfWNhdGNoKGQpe2I9dm9pZCAwfXJl%0AdHVybighYnx8Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5s%0AZW5ndGgpJiZuLmVycm9yKCJJbnZhbGlkIFhNTDogIithKSxifTt2YXIgZWMsZmMs%0AZ2M9LyMuKiQvLGhjPS8oWz8mXSlfPVteJl0qLyxpYz0vXiguKj8pOlsgXHRdKihb%0AXlxyXG5dKikkL2dtLGpjPS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4%0AdGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLGtjPS9eKD86R0VUfEhFQUQpJC8s%0AbGM9L15cL1wvLyxtYz0vXihbXHcuKy1dKzopKD86XC9cLyg/OlteXC8/I10qQHwp%0AKFteXC8/IzpdKikoPzo6KFxkKyl8KXwpLyxuYz17fSxvYz17fSxwYz0iKi8iLmNv%0AbmNhdCgiKiIpO3RyeXtmYz1sb2NhdGlvbi5ocmVmfWNhdGNoKHFjKXtmYz1sLmNy%0AZWF0ZUVsZW1lbnQoImEiKSxmYy5ocmVmPSIiLGZjPWZjLmhyZWZ9ZWM9bWMuZXhl%0AYyhmYy50b0xvd2VyQ2FzZSgpKXx8W107ZnVuY3Rpb24gcmMoYSl7cmV0dXJuIGZ1%0AbmN0aW9uKGIsYyl7InN0cmluZyIhPXR5cGVvZiBiJiYoYz1iLGI9IioiKTt2YXIg%0AZCxlPTAsZj1iLnRvTG93ZXJDYXNlKCkubWF0Y2goRSl8fFtdO2lmKG4uaXNGdW5j%0AdGlvbihjKSl3aGlsZShkPWZbZSsrXSkiKyI9PT1kWzBdPyhkPWQuc2xpY2UoMSl8%0AfCIqIiwoYVtkXT1hW2RdfHxbXSkudW5zaGlmdChjKSk6KGFbZF09YVtkXXx8W10p%0ALnB1c2goYyl9fWZ1bmN0aW9uIHNjKGEsYixjLGQpe3ZhciBlPXt9LGY9YT09PW9j%0AO2Z1bmN0aW9uIGcoaCl7dmFyIGk7cmV0dXJuIGVbaF09ITAsbi5lYWNoKGFbaF18%0AfFtdLGZ1bmN0aW9uKGEsaCl7dmFyIGo9aChiLGMsZCk7cmV0dXJuInN0cmluZyIh%0APXR5cGVvZiBqfHxmfHxlW2pdP2Y/IShpPWopOnZvaWQgMDooYi5kYXRhVHlwZXMu%0AdW5zaGlmdChqKSxnKGopLCExKX0pLGl9cmV0dXJuIGcoYi5kYXRhVHlwZXNbMF0p%0AfHwhZVsiKiJdJiZnKCIqIil9ZnVuY3Rpb24gdGMoYSxiKXt2YXIgYyxkLGU9bi5h%0AamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihjIGluIGIpdm9pZCAwIT09%0AYltjXSYmKChlW2NdP2E6ZHx8KGQ9e30pKVtjXT1iW2NdKTtyZXR1cm4gZCYmbi5l%0AeHRlbmQoITAsYSxkKSxhfWZ1bmN0aW9uIHVjKGEsYixjKXt2YXIgZCxlLGYsZyxo%0APWEuY29udGVudHMsaT1hLmRhdGFUeXBlczt3aGlsZSgiKiI9PT1pWzBdKWkuc2hp%0AZnQoKSx2b2lkIDA9PT1kJiYoZD1hLm1pbWVUeXBlfHxiLmdldFJlc3BvbnNlSGVh%0AZGVyKCJDb250ZW50LVR5cGUiKSk7aWYoZClmb3IoZSBpbiBoKWlmKGhbZV0mJmhb%0AZV0udGVzdChkKSl7aS51bnNoaWZ0KGUpO2JyZWFrfWlmKGlbMF1pbiBjKWY9aVsw%0AXTtlbHNle2ZvcihlIGluIGMpe2lmKCFpWzBdfHxhLmNvbnZlcnRlcnNbZSsiICIr%0AaVswXV0pe2Y9ZTticmVha31nfHwoZz1lKX1mPWZ8fGd9cmV0dXJuIGY/KGYhPT1p%0AWzBdJiZpLnVuc2hpZnQoZiksY1tmXSk6dm9pZCAwfWZ1bmN0aW9uIHZjKGEsYixj%0ALGQpe3ZhciBlLGYsZyxoLGksaj17fSxrPWEuZGF0YVR5cGVzLnNsaWNlKCk7aWYo%0Aa1sxXSlmb3IoZyBpbiBhLmNvbnZlcnRlcnMpaltnLnRvTG93ZXJDYXNlKCldPWEu%0AY29udmVydGVyc1tnXTtmPWsuc2hpZnQoKTt3aGlsZShmKWlmKGEucmVzcG9uc2VG%0AaWVsZHNbZl0mJihjW2EucmVzcG9uc2VGaWVsZHNbZl1dPWIpLCFpJiZkJiZhLmRh%0AdGFGaWx0ZXImJihiPWEuZGF0YUZpbHRlcihiLGEuZGF0YVR5cGUpKSxpPWYsZj1r%0ALnNoaWZ0KCkpaWYoIioiPT09ZilmPWk7ZWxzZSBpZigiKiIhPT1pJiZpIT09Zil7%0AaWYoZz1qW2krIiAiK2ZdfHxqWyIqICIrZl0sIWcpZm9yKGUgaW4gailpZihoPWUu%0Ac3BsaXQoIiAiKSxoWzFdPT09ZiYmKGc9altpKyIgIitoWzBdXXx8alsiKiAiK2hb%0AMF1dKSl7Zz09PSEwP2c9altlXTpqW2VdIT09ITAmJihmPWhbMF0say51bnNoaWZ0%0AKGhbMV0pKTticmVha31pZihnIT09ITApaWYoZyYmYVsidGhyb3dzIl0pYj1nKGIp%0AO2Vsc2UgdHJ5e2I9ZyhiKX1jYXRjaChsKXtyZXR1cm57c3RhdGU6InBhcnNlcmVy%0Acm9yIixlcnJvcjpnP2w6Ik5vIGNvbnZlcnNpb24gZnJvbSAiK2krIiB0byAiK2Z9%0AfX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6Yn19bi5leHRlbmQoe2FjdGl2%0AZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOmZj%0ALHR5cGU6IkdFVCIsaXNMb2NhbDpqYy50ZXN0KGVjWzFdKSxnbG9iYWw6ITAscHJv%0AY2Vzc0RhdGE6ITAsYXN5bmM6ITAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gt%0Ad3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIsYWNjZXB0czp7Iioi%0AOnBjLHRleHQ6InRleHQvcGxhaW4iLGh0bWw6InRleHQvaHRtbCIseG1sOiJhcHBs%0AaWNhdGlvbi94bWwsIHRleHQveG1sIixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0%0AZXh0L2phdmFzY3JpcHQifSxjb250ZW50czp7eG1sOi94bWwvLGh0bWw6L2h0bWwv%0ALGpzb246L2pzb24vfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIs%0AdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25zZUpTT04ifSxjb252ZXJ0%0AZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6%0Abi5wYXJzZUpTT04sInRleHQgeG1sIjpuLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7%0AdXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtyZXR1%0Acm4gYj90Yyh0YyhhLG4uYWpheFNldHRpbmdzKSxiKTp0YyhuLmFqYXhTZXR0aW5n%0AcyxhKX0sYWpheFByZWZpbHRlcjpyYyhuYyksYWpheFRyYW5zcG9ydDpyYyhvYyks%0AYWpheDpmdW5jdGlvbihhLGIpeyJvYmplY3QiPT10eXBlb2YgYSYmKGI9YSxhPXZv%0AaWQgMCksYj1ifHx7fTt2YXIgYyxkLGUsZixnLGgsaSxqLGs9bi5hamF4U2V0dXAo%0Ae30sYiksbD1rLmNvbnRleHR8fGssbT1rLmNvbnRleHQmJihsLm5vZGVUeXBlfHxs%0ALmpxdWVyeSk/bihsKTpuLmV2ZW50LG89bi5EZWZlcnJlZCgpLHA9bi5DYWxsYmFj%0Aa3MoIm9uY2UgbWVtb3J5IikscT1rLnN0YXR1c0NvZGV8fHt9LHI9e30scz17fSx0%0APTAsdT0iY2FuY2VsZWQiLHY9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRl%0AcjpmdW5jdGlvbihhKXt2YXIgYjtpZigyPT09dCl7aWYoIWYpe2Y9e307d2hpbGUo%0AYj1pYy5leGVjKGUpKWZbYlsxXS50b0xvd2VyQ2FzZSgpXT1iWzJdfWI9ZlthLnRv%0ATG93ZXJDYXNlKCldfXJldHVybiBudWxsPT1iP251bGw6Yn0sZ2V0QWxsUmVzcG9u%0Ac2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIDI9PT10P2U6bnVsbH0sc2V0UmVx%0AdWVzdEhlYWRlcjpmdW5jdGlvbihhLGIpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTty%0AZXR1cm4gdHx8KGE9c1tjXT1zW2NdfHxhLHJbYV09YiksdGhpc30sb3ZlcnJpZGVN%0AaW1lVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gdHx8KGsubWltZVR5cGU9YSksdGhp%0Ac30sc3RhdHVzQ29kZTpmdW5jdGlvbihhKXt2YXIgYjtpZihhKWlmKDI+dClmb3Io%0AYiBpbiBhKXFbYl09W3FbYl0sYVtiXV07ZWxzZSB2LmFsd2F5cyhhW3Yuc3RhdHVz%0AXSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGEpe3ZhciBiPWF8fHU7cmV0%0AdXJuIGMmJmMuYWJvcnQoYikseCgwLGIpLHRoaXN9fTtpZihvLnByb21pc2Uodiku%0AY29tcGxldGU9cC5hZGQsdi5zdWNjZXNzPXYuZG9uZSx2LmVycm9yPXYuZmFpbCxr%0ALnVybD0oKGF8fGsudXJsfHxmYykrIiIpLnJlcGxhY2UoZ2MsIiIpLnJlcGxhY2Uo%0AbGMsZWNbMV0rIi8vIiksay50eXBlPWIubWV0aG9kfHxiLnR5cGV8fGsubWV0aG9k%0AfHxrLnR5cGUsay5kYXRhVHlwZXM9bi50cmltKGsuZGF0YVR5cGV8fCIqIikudG9M%0Ab3dlckNhc2UoKS5tYXRjaChFKXx8WyIiXSxudWxsPT1rLmNyb3NzRG9tYWluJiYo%0AaD1tYy5leGVjKGsudXJsLnRvTG93ZXJDYXNlKCkpLGsuY3Jvc3NEb21haW49ISgh%0AaHx8aFsxXT09PWVjWzFdJiZoWzJdPT09ZWNbMl0mJihoWzNdfHwoImh0dHA6Ij09%0APWhbMV0/IjgwIjoiNDQzIikpPT09KGVjWzNdfHwoImh0dHA6Ij09PWVjWzFdPyI4%0AMCI6IjQ0MyIpKSkpLGsuZGF0YSYmay5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5%0AcGVvZiBrLmRhdGEmJihrLmRhdGE9bi5wYXJhbShrLmRhdGEsay50cmFkaXRpb25h%0AbCkpLHNjKG5jLGssYix2KSwyPT09dClyZXR1cm4gdjtpPWsuZ2xvYmFsLGkmJjA9%0APT1uLmFjdGl2ZSsrJiZuLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLGsudHlw%0AZT1rLnR5cGUudG9VcHBlckNhc2UoKSxrLmhhc0NvbnRlbnQ9IWtjLnRlc3Qoay50%0AeXBlKSxkPWsudXJsLGsuaGFzQ29udGVudHx8KGsuZGF0YSYmKGQ9ay51cmwrPShk%0AYy50ZXN0KGQpPyImIjoiPyIpK2suZGF0YSxkZWxldGUgay5kYXRhKSxrLmNhY2hl%0APT09ITEmJihrLnVybD1oYy50ZXN0KGQpP2QucmVwbGFjZShoYywiJDFfPSIrY2Mr%0AKyk6ZCsoZGMudGVzdChkKT8iJiI6Ij8iKSsiXz0iK2NjKyspKSxrLmlmTW9kaWZp%0AZWQmJihuLmxhc3RNb2RpZmllZFtkXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1N%0Ab2RpZmllZC1TaW5jZSIsbi5sYXN0TW9kaWZpZWRbZF0pLG4uZXRhZ1tkXSYmdi5z%0AZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixuLmV0YWdbZF0pKSwoay5k%0AYXRhJiZrLmhhc0NvbnRlbnQmJmsuY29udGVudFR5cGUhPT0hMXx8Yi5jb250ZW50%0AVHlwZSkmJnYuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixrLmNvbnRl%0AbnRUeXBlKSx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsay5kYXRhVHlwZXNb%0AMF0mJmsuYWNjZXB0c1trLmRhdGFUeXBlc1swXV0/ay5hY2NlcHRzW2suZGF0YVR5%0AcGVzWzBdXSsoIioiIT09ay5kYXRhVHlwZXNbMF0/IiwgIitwYysiOyBxPTAuMDEi%0AOiIiKTprLmFjY2VwdHNbIioiXSk7Zm9yKGogaW4gay5oZWFkZXJzKXYuc2V0UmVx%0AdWVzdEhlYWRlcihqLGsuaGVhZGVyc1tqXSk7aWYoay5iZWZvcmVTZW5kJiYoay5i%0AZWZvcmVTZW5kLmNhbGwobCx2LGspPT09ITF8fDI9PT10KSlyZXR1cm4gdi5hYm9y%0AdCgpO3U9ImFib3J0Ijtmb3IoaiBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0%0AZToxfSl2W2pdKGtbal0pO2lmKGM9c2Mob2MsayxiLHYpKXt2LnJlYWR5U3RhdGU9%0AMSxpJiZtLnRyaWdnZXIoImFqYXhTZW5kIixbdixrXSksay5hc3luYyYmay50aW1l%0Ab3V0PjAmJihnPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2LmFib3J0KCJ0aW1lb3V0%0AIil9LGsudGltZW91dCkpO3RyeXt0PTEsYy5zZW5kKHIseCl9Y2F0Y2godyl7aWYo%0AISgyPnQpKXRocm93IHc7eCgtMSx3KX19ZWxzZSB4KC0xLCJObyBUcmFuc3BvcnQi%0AKTtmdW5jdGlvbiB4KGEsYixmLGgpe3ZhciBqLHIscyx1LHcseD1iOzIhPT10JiYo%0AdD0yLGcmJmNsZWFyVGltZW91dChnKSxjPXZvaWQgMCxlPWh8fCIiLHYucmVhZHlT%0AdGF0ZT1hPjA/NDowLGo9YT49MjAwJiYzMDA+YXx8MzA0PT09YSxmJiYodT11Yyhr%0ALHYsZikpLHU9dmMoayx1LHYsaiksaj8oay5pZk1vZGlmaWVkJiYodz12LmdldFJl%0Ac3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIiksdyYmKG4ubGFzdE1vZGlmaWVk%0AW2RdPXcpLHc9di5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpLHcmJihuLmV0YWdb%0AZF09dykpLDIwND09PWF8fCJIRUFEIj09PWsudHlwZT94PSJub2NvbnRlbnQiOjMw%0AND09PWE/eD0ibm90bW9kaWZpZWQiOih4PXUuc3RhdGUscj11LmRhdGEscz11LmVy%0Acm9yLGo9IXMpKToocz14LChhfHwheCkmJih4PSJlcnJvciIsMD5hJiYoYT0wKSkp%0ALHYuc3RhdHVzPWEsdi5zdGF0dXNUZXh0PShifHx4KSsiIixqP28ucmVzb2x2ZVdp%0AdGgobCxbcix4LHZdKTpvLnJlamVjdFdpdGgobCxbdix4LHNdKSx2LnN0YXR1c0Nv%0AZGUocSkscT12b2lkIDAsaSYmbS50cmlnZ2VyKGo/ImFqYXhTdWNjZXNzIjoiYWph%0AeEVycm9yIixbdixrLGo/cjpzXSkscC5maXJlV2l0aChsLFt2LHhdKSxpJiYobS50%0AcmlnZ2VyKCJhamF4Q29tcGxldGUiLFt2LGtdKSwtLW4uYWN0aXZlfHxuLmV2ZW50%0ALnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gdn0sZ2V0SlNPTjpmdW5jdGlv%0AbihhLGIsYyl7cmV0dXJuIG4uZ2V0KGEsYixjLCJqc29uIil9LGdldFNjcmlwdDpm%0AdW5jdGlvbihhLGIpe3JldHVybiBuLmdldChhLHZvaWQgMCxiLCJzY3JpcHQiKX19%0AKSxuLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxiKXtuW2JdPWZ1bmN0%0AaW9uKGEsYyxkLGUpe3JldHVybiBuLmlzRnVuY3Rpb24oYykmJihlPWV8fGQsZD1j%0ALGM9dm9pZCAwKSxuLmFqYXgoe3VybDphLHR5cGU6YixkYXRhVHlwZTplLGRhdGE6%0AYyxzdWNjZXNzOmR9KX19KSxuLmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3RvcCIs%0AImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNl%0AbmQiXSxmdW5jdGlvbihhLGIpe24uZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIHRo%0AaXMub24oYixhKX19KSxuLl9ldmFsVXJsPWZ1bmN0aW9uKGEpe3JldHVybiBuLmFq%0AYXgoe3VybDphLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsYXN5bmM6ITEs%0AZ2xvYmFsOiExLCJ0aHJvd3MiOiEwfSl9LG4uZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1%0AbmN0aW9uKGEpe3ZhciBiO3JldHVybiBuLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNo%0AKGZ1bmN0aW9uKGIpe24odGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxiKSl9KToo%0AdGhpc1swXSYmKGI9bihhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xv%0AbmUoITApLHRoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1sw%0AXSksYi5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RFbGVt%0AZW50Q2hpbGQpYT1hLmZpcnN0RWxlbWVudENoaWxkO3JldHVybiBhfSkuYXBwZW5k%0AKHRoaXMpKSx0aGlzKX0sd3JhcElubmVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlz%0ALmVhY2gobi5pc0Z1bmN0aW9uKGEpP2Z1bmN0aW9uKGIpe24odGhpcykud3JhcElu%0AbmVyKGEuY2FsbCh0aGlzLGIpKX06ZnVuY3Rpb24oKXt2YXIgYj1uKHRoaXMpLGM9%0AYi5jb250ZW50cygpO2MubGVuZ3RoP2Mud3JhcEFsbChhKTpiLmFwcGVuZChhKX0p%0AfSx3cmFwOmZ1bmN0aW9uKGEpe3ZhciBiPW4uaXNGdW5jdGlvbihhKTtyZXR1cm4g%0AdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe24odGhpcykud3JhcEFsbChiP2EuY2FsbCh0%0AaGlzLGMpOmEpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVu%0AdCgpLmVhY2goZnVuY3Rpb24oKXtuLm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8bih0%0AaGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9fSksbi5l%0AeHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGEpe3JldHVybiBhLm9mZnNldFdp%0AZHRoPD0wJiZhLm9mZnNldEhlaWdodDw9MH0sbi5leHByLmZpbHRlcnMudmlzaWJs%0AZT1mdW5jdGlvbihhKXtyZXR1cm4hbi5leHByLmZpbHRlcnMuaGlkZGVuKGEpfTt2%0AYXIgd2M9LyUyMC9nLHhjPS9cW1xdJC8seWM9L1xyP1xuL2csemM9L14oPzpzdWJt%0AaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLEFjPS9eKD86aW5wdXR8c2Vs%0AZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiBCYyhhLGIsYyxkKXt2YXIg%0AZTtpZihuLmlzQXJyYXkoYikpbi5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHx4Yy50%0AZXN0KGEpP2QoYSxlKTpCYyhhKyJbIisoIm9iamVjdCI9PXR5cGVvZiBlP2I6IiIp%0AKyJdIixlLGMsZCl9KTtlbHNlIGlmKGN8fCJvYmplY3QiIT09bi50eXBlKGIpKWQo%0AYSxiKTtlbHNlIGZvcihlIGluIGIpQmMoYSsiWyIrZSsiXSIsYltlXSxjLGQpfW4u%0AcGFyYW09ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9ZnVuY3Rpb24oYSxiKXti%0APW4uaXNGdW5jdGlvbihiKT9iKCk6bnVsbD09Yj8iIjpiLGRbZC5sZW5ndGhdPWVu%0AY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtp%0AZih2b2lkIDA9PT1iJiYoYj1uLmFqYXhTZXR0aW5ncyYmbi5hamF4U2V0dGluZ3Mu%0AdHJhZGl0aW9uYWwpLG4uaXNBcnJheShhKXx8YS5qcXVlcnkmJiFuLmlzUGxhaW5P%0AYmplY3QoYSkpbi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZh%0AbHVlKX0pO2Vsc2UgZm9yKGMgaW4gYSlCYyhjLGFbY10sYixlKTtyZXR1cm4gZC5q%0Ab2luKCImIikucmVwbGFjZSh3YywiKyIpfSxuLmZuLmV4dGVuZCh7c2VyaWFsaXpl%0AOmZ1bmN0aW9uKCl7cmV0dXJuIG4ucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgp%0AKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVu%0AY3Rpb24oKXt2YXIgYT1uLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gYT9u%0ALm1ha2VBcnJheShhKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGE9dGhp%0Acy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFuKHRoaXMpLmlzKCI6ZGlzYWJsZWQi%0AKSYmQWMudGVzdCh0aGlzLm5vZGVOYW1lKSYmIXpjLnRlc3QoYSkmJih0aGlzLmNo%0AZWNrZWR8fCFULnRlc3QoYSkpfSkubWFwKGZ1bmN0aW9uKGEsYil7dmFyIGM9bih0%0AaGlzKS52YWwoKTtyZXR1cm4gbnVsbD09Yz9udWxsOm4uaXNBcnJheShjKT9uLm1h%0AcChjLGZ1bmN0aW9uKGEpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxh%0AY2UoeWMsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKHlj%0ALCJcclxuIil9fSkuZ2V0KCl9fSksbi5hamF4U2V0dGluZ3MueGhyPWZ1bmN0aW9u%0AKCl7dHJ5e3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9Y2F0Y2goYSl7fX07dmFy%0AIENjPTAsRGM9e30sRWM9ezA6MjAwLDEyMjM6MjA0fSxGYz1uLmFqYXhTZXR0aW5n%0Acy54aHIoKTthLkFjdGl2ZVhPYmplY3QmJm4oYSkub24oInVubG9hZCIsZnVuY3Rp%0Ab24oKXtmb3IodmFyIGEgaW4gRGMpRGNbYV0oKX0pLGsuY29ycz0hIUZjJiYid2l0%0AaENyZWRlbnRpYWxzImluIEZjLGsuYWpheD1GYz0hIUZjLG4uYWpheFRyYW5zcG9y%0AdChmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gay5jb3JzfHxGYyYmIWEuY3Jvc3NE%0Ab21haW4/e3NlbmQ6ZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEueGhyKCksZz0rK0Nj%0AO2lmKGYub3BlbihhLnR5cGUsYS51cmwsYS5hc3luYyxhLnVzZXJuYW1lLGEucGFz%0Ac3dvcmQpLGEueGhyRmllbGRzKWZvcihlIGluIGEueGhyRmllbGRzKWZbZV09YS54%0AaHJGaWVsZHNbZV07YS5taW1lVHlwZSYmZi5vdmVycmlkZU1pbWVUeXBlJiZmLm92%0AZXJyaWRlTWltZVR5cGUoYS5taW1lVHlwZSksYS5jcm9zc0RvbWFpbnx8Y1siWC1S%0AZXF1ZXN0ZWQtV2l0aCJdfHwoY1siWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRw%0AUmVxdWVzdCIpO2ZvcihlIGluIGMpZi5zZXRSZXF1ZXN0SGVhZGVyKGUsY1tlXSk7%0AYj1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXtiJiYoZGVsZXRlIERjW2dd%0ALGI9Zi5vbmxvYWQ9Zi5vbmVycm9yPW51bGwsImFib3J0Ij09PWE/Zi5hYm9ydCgp%0AOiJlcnJvciI9PT1hP2QoZi5zdGF0dXMsZi5zdGF0dXNUZXh0KTpkKEVjW2Yuc3Rh%0AdHVzXXx8Zi5zdGF0dXMsZi5zdGF0dXNUZXh0LCJzdHJpbmciPT10eXBlb2YgZi5y%0AZXNwb25zZVRleHQ/e3RleHQ6Zi5yZXNwb25zZVRleHR9OnZvaWQgMCxmLmdldEFs%0AbFJlc3BvbnNlSGVhZGVycygpKSl9fSxmLm9ubG9hZD1iKCksZi5vbmVycm9yPWIo%0AImVycm9yIiksYj1EY1tnXT1iKCJhYm9ydCIpO3RyeXtmLnNlbmQoYS5oYXNDb250%0AZW50JiZhLmRhdGF8fG51bGwpfWNhdGNoKGgpe2lmKGIpdGhyb3cgaH19LGFib3J0%0AOmZ1bmN0aW9uKCl7YiYmYigpfX06dm9pZCAwfSksbi5hamF4U2V0dXAoe2FjY2Vw%0AdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2Ny%0AaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFz%0AY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi8oPzpqYXZhfGVjbWEpc2NyaXB0L30s%0AY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihhKXtyZXR1cm4gbi5n%0AbG9iYWxFdmFsKGEpLGF9fX0pLG4uYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5j%0AdGlvbihhKXt2b2lkIDA9PT1hLmNhY2hlJiYoYS5jYWNoZT0hMSksYS5jcm9zc0Rv%0AbWFpbiYmKGEudHlwZT0iR0VUIil9KSxuLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIs%0AZnVuY3Rpb24oYSl7aWYoYS5jcm9zc0RvbWFpbil7dmFyIGIsYztyZXR1cm57c2Vu%0AZDpmdW5jdGlvbihkLGUpe2I9bigiPHNjcmlwdD4iKS5wcm9wKHthc3luYzohMCxj%0AaGFyc2V0OmEuc2NyaXB0Q2hhcnNldCxzcmM6YS51cmx9KS5vbigibG9hZCBlcnJv%0AciIsYz1mdW5jdGlvbihhKXtiLnJlbW92ZSgpLGM9bnVsbCxhJiZlKCJlcnJvciI9%0APT1hLnR5cGU/NDA0OjIwMCxhLnR5cGUpfSksbC5oZWFkLmFwcGVuZENoaWxkKGJb%0AMF0pfSxhYm9ydDpmdW5jdGlvbigpe2MmJmMoKX19fX0pO3ZhciBHYz1bXSxIYz0v%0AKD0pXD8oPz0mfCQpfFw/XD8vO24uYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2si%0ALGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgYT1HYy5wb3AoKXx8bi5leHBh%0AbmRvKyJfIitjYysrO3JldHVybiB0aGlzW2FdPSEwLGF9fSksbi5hamF4UHJlZmls%0AdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihiLGMsZCl7dmFyIGUsZixnLGg9Yi5q%0Ac29ucCE9PSExJiYoSGMudGVzdChiLnVybCk/InVybCI6InN0cmluZyI9PXR5cGVv%0AZiBiLmRhdGEmJiEoYi5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0%0AaW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZIYy50ZXN0KGIuZGF0YSkmJiJk%0AYXRhIik7cmV0dXJuIGh8fCJqc29ucCI9PT1iLmRhdGFUeXBlc1swXT8oZT1iLmpz%0Ab25wQ2FsbGJhY2s9bi5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29u%0AcENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGg/YltoXT1iW2hdLnJlcGxhY2Uo%0ASGMsIiQxIitlKTpiLmpzb25wIT09ITEmJihiLnVybCs9KGRjLnRlc3QoYi51cmwp%0APyImIjoiPyIpK2IuanNvbnArIj0iK2UpLGIuY29udmVydGVyc1sic2NyaXB0IGpz%0Ab24iXT1mdW5jdGlvbigpe3JldHVybiBnfHxuLmVycm9yKGUrIiB3YXMgbm90IGNh%0AbGxlZCIpLGdbMF19LGIuZGF0YVR5cGVzWzBdPSJqc29uIixmPWFbZV0sYVtlXT1m%0AdW5jdGlvbigpe2c9YXJndW1lbnRzfSxkLmFsd2F5cyhmdW5jdGlvbigpe2FbZV09%0AZixiW2VdJiYoYi5qc29ucENhbGxiYWNrPWMuanNvbnBDYWxsYmFjayxHYy5wdXNo%0AKGUpKSxnJiZuLmlzRnVuY3Rpb24oZikmJmYoZ1swXSksZz1mPXZvaWQgMH0pLCJz%0AY3JpcHQiKTp2b2lkIDB9KSxuLnBhcnNlSFRNTD1mdW5jdGlvbihhLGIsYyl7aWYo%0AIWF8fCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gbnVsbDsiYm9vbGVhbiI9PXR5%0AcGVvZiBiJiYoYz1iLGI9ITEpLGI9Ynx8bDt2YXIgZD12LmV4ZWMoYSksZT0hYyYm%0AW107cmV0dXJuIGQ/W2IuY3JlYXRlRWxlbWVudChkWzFdKV06KGQ9bi5idWlsZEZy%0AYWdtZW50KFthXSxiLGUpLGUmJmUubGVuZ3RoJiZuKGUpLnJlbW92ZSgpLG4ubWVy%0AZ2UoW10sZC5jaGlsZE5vZGVzKSl9O3ZhciBJYz1uLmZuLmxvYWQ7bi5mbi5sb2Fk%0APWZ1bmN0aW9uKGEsYixjKXtpZigic3RyaW5nIiE9dHlwZW9mIGEmJkljKXJldHVy%0AbiBJYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGQsZSxmLGc9dGhpcyxoPWEu%0AaW5kZXhPZigiICIpO3JldHVybiBoPj0wJiYoZD1uLnRyaW0oYS5zbGljZShoKSks%0AYT1hLnNsaWNlKDAsaCkpLG4uaXNGdW5jdGlvbihiKT8oYz1iLGI9dm9pZCAwKTpi%0AJiYib2JqZWN0Ij09dHlwZW9mIGImJihlPSJQT1NUIiksZy5sZW5ndGg+MCYmbi5h%0AamF4KHt1cmw6YSx0eXBlOmUsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yn0pLmRvbmUo%0AZnVuY3Rpb24oYSl7Zj1hcmd1bWVudHMsZy5odG1sKGQ/bigiPGRpdj4iKS5hcHBl%0AbmQobi5wYXJzZUhUTUwoYSkpLmZpbmQoZCk6YSl9KS5jb21wbGV0ZShjJiZmdW5j%0AdGlvbihhLGIpe2cuZWFjaChjLGZ8fFthLnJlc3BvbnNlVGV4dCxiLGFdKX0pLHRo%0AaXN9LG4uZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGEpe3JldHVybiBu%0ALmdyZXAobi50aW1lcnMsZnVuY3Rpb24oYil7cmV0dXJuIGE9PT1iLmVsZW19KS5s%0AZW5ndGh9O3ZhciBKYz1hLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtmdW5jdGlv%0AbiBLYyhhKXtyZXR1cm4gbi5pc1dpbmRvdyhhKT9hOjk9PT1hLm5vZGVUeXBlJiZh%0ALmRlZmF1bHRWaWV3fW4ub2Zmc2V0PXtzZXRPZmZzZXQ6ZnVuY3Rpb24oYSxiLGMp%0Ae3ZhciBkLGUsZixnLGgsaSxqLGs9bi5jc3MoYSwicG9zaXRpb24iKSxsPW4oYSks%0AbT17fTsic3RhdGljIj09PWsmJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIp%0ALGg9bC5vZmZzZXQoKSxmPW4uY3NzKGEsInRvcCIpLGk9bi5jc3MoYSwibGVmdCIp%0ALGo9KCJhYnNvbHV0ZSI9PT1rfHwiZml4ZWQiPT09aykmJihmK2kpLmluZGV4T2Yo%0AImF1dG8iKT4tMSxqPyhkPWwucG9zaXRpb24oKSxnPWQudG9wLGU9ZC5sZWZ0KToo%0AZz1wYXJzZUZsb2F0KGYpfHwwLGU9cGFyc2VGbG9hdChpKXx8MCksbi5pc0Z1bmN0%0AaW9uKGIpJiYoYj1iLmNhbGwoYSxjLGgpKSxudWxsIT1iLnRvcCYmKG0udG9wPWIu%0AdG9wLWgudG9wK2cpLG51bGwhPWIubGVmdCYmKG0ubGVmdD1iLmxlZnQtaC5sZWZ0%0AK2UpLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLG0pOmwuY3NzKG0pfX0sbi5m%0Abi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3Ro%0AKXJldHVybiB2b2lkIDA9PT1hP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe24u%0Ab2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTt2YXIgYixjLGQ9dGhpc1swXSxl%0APXt0b3A6MCxsZWZ0OjB9LGY9ZCYmZC5vd25lckRvY3VtZW50O2lmKGYpcmV0dXJu%0AIGI9Zi5kb2N1bWVudEVsZW1lbnQsbi5jb250YWlucyhiLGQpPyh0eXBlb2YgZC5n%0AZXRCb3VuZGluZ0NsaWVudFJlY3QhPT1VJiYoZT1kLmdldEJvdW5kaW5nQ2xpZW50%0AUmVjdCgpKSxjPUtjKGYpLHt0b3A6ZS50b3ArYy5wYWdlWU9mZnNldC1iLmNsaWVu%0AdFRvcCxsZWZ0OmUubGVmdCtjLnBhZ2VYT2Zmc2V0LWIuY2xpZW50TGVmdH0pOmV9%0ALHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGEsYixjPXRoaXNb%0AMF0sZD17dG9wOjAsbGVmdDowfTtyZXR1cm4iZml4ZWQiPT09bi5jc3MoYywicG9z%0AaXRpb24iKT9iPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6KGE9dGhpcy5vZmZz%0AZXRQYXJlbnQoKSxiPXRoaXMub2Zmc2V0KCksbi5ub2RlTmFtZShhWzBdLCJodG1s%0AIil8fChkPWEub2Zmc2V0KCkpLGQudG9wKz1uLmNzcyhhWzBdLCJib3JkZXJUb3BX%0AaWR0aCIsITApLGQubGVmdCs9bi5jc3MoYVswXSwiYm9yZGVyTGVmdFdpZHRoIiwh%0AMCkpLHt0b3A6Yi50b3AtZC50b3Atbi5jc3MoYywibWFyZ2luVG9wIiwhMCksbGVm%0AdDpiLmxlZnQtZC5sZWZ0LW4uY3NzKGMsIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZz%0AZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2%0AYXIgYT10aGlzLm9mZnNldFBhcmVudHx8SmM7d2hpbGUoYSYmIW4ubm9kZU5hbWUo%0AYSwiaHRtbCIpJiYic3RhdGljIj09PW4uY3NzKGEsInBvc2l0aW9uIikpYT1hLm9m%0AZnNldFBhcmVudDtyZXR1cm4gYXx8SmN9KX19KSxuLmVhY2goe3Njcm9sbExlZnQ6%0AInBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24o%0AYixjKXt2YXIgZD0icGFnZVlPZmZzZXQiPT09YztuLmZuW2JdPWZ1bmN0aW9uKGUp%0Ae3JldHVybiBKKHRoaXMsZnVuY3Rpb24oYixlLGYpe3ZhciBnPUtjKGIpO3JldHVy%0AbiB2b2lkIDA9PT1mP2c/Z1tjXTpiW2VdOnZvaWQoZz9nLnNjcm9sbFRvKGQ/YS5w%0AYWdlWE9mZnNldDpmLGQ/ZjphLnBhZ2VZT2Zmc2V0KTpiW2VdPWYpfSxiLGUsYXJn%0AdW1lbnRzLmxlbmd0aCxudWxsKX19KSxuLmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVu%0AY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2JdPXliKGsucGl4ZWxQb3NpdGlvbixmdW5j%0AdGlvbihhLGMpe3JldHVybiBjPyhjPXhiKGEsYiksdmIudGVzdChjKT9uKGEpLnBv%0Ac2l0aW9uKClbYl0rInB4IjpjKTp2b2lkIDB9KX0pLG4uZWFjaCh7SGVpZ2h0OiJo%0AZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGEsYil7bi5lYWNoKHtwYWRk%0AaW5nOiJpbm5lciIrYSxjb250ZW50OmIsIiI6Im91dGVyIithfSxmdW5jdGlvbihj%0ALGQpe24uZm5bZF09ZnVuY3Rpb24oZCxlKXt2YXIgZj1hcmd1bWVudHMubGVuZ3Ro%0AJiYoY3x8ImJvb2xlYW4iIT10eXBlb2YgZCksZz1jfHwoZD09PSEwfHxlPT09ITA/%0AIm1hcmdpbiI6ImJvcmRlciIpO3JldHVybiBKKHRoaXMsZnVuY3Rpb24oYixjLGQp%0Ae3ZhciBlO3JldHVybiBuLmlzV2luZG93KGIpP2IuZG9jdW1lbnQuZG9jdW1lbnRF%0AbGVtZW50WyJjbGllbnQiK2FdOjk9PT1iLm5vZGVUeXBlPyhlPWIuZG9jdW1lbnRF%0AbGVtZW50LE1hdGgubWF4KGIuYm9keVsic2Nyb2xsIithXSxlWyJzY3JvbGwiK2Fd%0ALGIuYm9keVsib2Zmc2V0IithXSxlWyJvZmZzZXQiK2FdLGVbImNsaWVudCIrYV0p%0AKTp2b2lkIDA9PT1kP24uY3NzKGIsYyxnKTpuLnN0eWxlKGIsYyxkLGcpfSxiLGY/%0AZDp2b2lkIDAsZixudWxsKX19KX0pLG4uZm4uc2l6ZT1mdW5jdGlvbigpe3JldHVy%0AbiB0aGlzLmxlbmd0aH0sbi5mbi5hbmRTZWxmPW4uZm4uYWRkQmFjaywiZnVuY3Rp%0Ab24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIs%0AW10sZnVuY3Rpb24oKXtyZXR1cm4gbn0pO3ZhciBMYz1hLmpRdWVyeSxNYz1hLiQ7%0AcmV0dXJuIG4ubm9Db25mbGljdD1mdW5jdGlvbihiKXtyZXR1cm4gYS4kPT09biYm%0AKGEuJD1NYyksYiYmYS5qUXVlcnk9PT1uJiYoYS5qUXVlcnk9TGMpLG59LHR5cGVv%0AZiBiPT09VSYmKGEualF1ZXJ5PWEuJD1uKSxufSk7Ci8vIyBzb3VyY2VNYXBwaW5n%0AVVJMPWpxdWVyeS5taW4ubWFwPC9zY3JpcHQ+DQogICAgICA8IS0tIGQzLnNsaWRl%0Aci5qcyBsaWJyYXJ5IC0tPg0KICAgICAgPHNjcmlwdD4vKg0KICAgIEQzLmpzIFNs%0AaWRlcg0KICAgIEluc3BpcmVkIGJ5IGpRdWVyeSBVSSBTbGlkZXINCiAgICBDb3B5%0AcmlnaHQgKGMpIDIwMTMsIEJqb3JuIFNhbmR2aWsgLSBodHRwOi8vYmxvZy50aGVt%0AYXRpY21hcHBpbmcub3JnDQogICAgQlNEIGxpY2Vuc2U6IGh0dHA6Ly9vcGVuc291%0AcmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UNCiovDQooZnVuY3Rpb24gKHJv%0Ab3QsIGZhY3RvcnkpIHsNCiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlv%0AbicgJiYgZGVmaW5lLmFtZCkgew0KICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4g%0AYW5vbnltb3VzIG1vZHVsZS4NCiAgICBkZWZpbmUoWydkMyddLCBmYWN0b3J5KTsN%0ACiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHsNCiAg%0AICBpZiAocHJvY2Vzcy5icm93c2VyKSB7DQogICAgICAvLyBCcm93c2VyaWZ5LiBJ%0AbXBvcnQgY3NzIHRvbyB1c2luZyBjc3NpZnkuDQogICAgICByZXF1aXJlKCcuL2Qz%0ALnNsaWRlci5jc3MnKTsNCiAgICB9DQogICAgLy8gTm9kZS4gRG9lcyBub3Qgd29y%0AayB3aXRoIHN0cmljdCBDb21tb25KUywgYnV0DQogICAgLy8gb25seSBDb21tb25K%0AUy1saWtlIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMs%0ADQogICAgLy8gbGlrZSBOb2RlLg0KICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9y%0AeShyZXF1aXJlKCdkMycpKTsNCiAgfSBlbHNlIHsNCiAgICAvLyBCcm93c2VyIGds%0Ab2JhbHMgKHJvb3QgaXMgd2luZG93KQ0KICAgIHJvb3QuZDMuc2xpZGVyID0gZmFj%0AdG9yeShyb290LmQzKTsNCiAgfQ0KfSh0aGlzLCBmdW5jdGlvbiAoZDMpIHsNCnJl%0AdHVybiBmdW5jdGlvbiBtb2R1bGUoKSB7DQogICJ1c2Ugc3RyaWN0IjsNCg0KICAv%0ALyBQdWJsaWMgdmFyaWFibGVzIHdpZHRoIGRlZmF1bHQgc2V0dGluZ3MNCiAgdmFy%0AIG1pbiA9IDAsDQogICAgICBtYXggPSAxMDAsDQogICAgICBzdGVwID0gMC4wMSwN%0ACiAgICAgIGFuaW1hdGUgPSB0cnVlLA0KICAgICAgb3JpZW50YXRpb24gPSAiaG9y%0AaXpvbnRhbCIsDQogICAgICBheGlzID0gZmFsc2UsDQogICAgICBtYXJnaW4gPSA1%0AMCwNCiAgICAgIHZhbHVlLA0KICAgICAgYWN0aXZlID0gMSwNCiAgICAgIHNjYWxl%0ALA0KICAgICAgaW50ZXJ2YWw9MTsNCg0KICAvLyBQcml2YXRlIHZhcmlhYmxlcw0K%0AICB2YXIgYXhpc1NjYWxlLA0KICAgICAgZGlzcGF0Y2ggPSBkMy5kaXNwYXRjaCgi%0Ac2xpZGUiLCAic2xpZGVlbmQiKSwNCiAgICAgIGZvcm1hdFBlcmNlbnQgPSBkMy5m%0Ab3JtYXQoIi4yJSIpLA0KICAgICAgdGlja0Zvcm1hdCA9IGQzLmZvcm1hdCgiLjAi%0AKSwNCiAgICAgIGhhbmRsZTEsDQogICAgICBoYW5kbGUyID0gbnVsbCwNCiAgICAg%0AIHNsaWRlckxlbmd0aDsNCg0KICBmdW5jdGlvbiBzbGlkZXIoc2VsZWN0aW9uKSB7%0ADQogICAgc2VsZWN0aW9uLmVhY2goZnVuY3Rpb24oKSB7DQoNCiAgICAgIC8vIENy%0AZWF0ZSBzY2FsZSBpZiBub3QgZGVmaW5lZCBieSB1c2VyDQogICAgICBpZiAoIXNj%0AYWxlKSB7DQogICAgICAgIHNjYWxlID0gZDMuc2NhbGUubGluZWFyKCkuZG9tYWlu%0AKFttaW4sIG1heF0pOw0KICAgICAgfQ0KDQogICAgICAvLyBTdGFydCB2YWx1ZQ0K%0AICAgICAgdmFsdWUgPSB2YWx1ZSB8fCBzY2FsZS5kb21haW4oKVswXTsNCg0KICAg%0AICAgLy8gRElWIGNvbnRhaW5lcg0KICAgICAgdmFyIGRpdiA9IGQzLnNlbGVjdCh0%0AaGlzKS5jbGFzc2VkKCJkMy1zbGlkZXIgZDMtc2xpZGVyLSIgKyBvcmllbnRhdGlv%0AbiwgdHJ1ZSk7DQogICAgICANCiAgICAgIHZhciBkcmFnID0gZDMuYmVoYXZpb3Iu%0AZHJhZygpOw0KICAgICAgZHJhZy5vbignZHJhZ2VuZCcsIGZ1bmN0aW9uICgpIHsN%0ACiAgICAgICAgZGlzcGF0Y2guc2xpZGVlbmQoZDMuZXZlbnQsIHZhbHVlKTsNCiAg%0AICAgIH0pDQoNCiAgICAgIC8vIFNsaWRlciBoYW5kbGUNCiAgICAgIC8vaWYgcmFu%0AZ2Ugc2xpZGVyLCBjcmVhdGUgdHdvDQogICAgICB2YXIgZGl2UmFuZ2U7DQoNCiAg%0AICAgIGlmICggdmFsdWUubGVuZ3RoID09IDIgKSB7DQogICAgICAgIGhhbmRsZTEg%0APSBkaXYuYXBwZW5kKCJhIikNCiAgICAgICAgICAuY2xhc3NlZCgiZDMtc2xpZGVy%0ALWhhbmRsZSIsIHRydWUpDQogICAgICAgICAgLmF0dHIoInhsaW5rOmhyZWYiLCAi%0AIyIpDQogICAgICAgICAgLmF0dHIoJ2lkJywgImhhbmRsZS1vbmUiKQ0KICAgICAg%0AICAgIC5vbigiY2xpY2siLCBzdG9wUHJvcGFnYXRpb24pDQogICAgICAgICAgLmNh%0AbGwoZHJhZyk7DQogICAgICAgIGhhbmRsZTIgPSBkaXYuYXBwZW5kKCJhIikNCiAg%0AICAgICAgICAuY2xhc3NlZCgiZDMtc2xpZGVyLWhhbmRsZSIsIHRydWUpDQogICAg%0AICAgICAgLmF0dHIoJ2lkJywgImhhbmRsZS10d28iKQ0KICAgICAgICAgIC5hdHRy%0AKCJ4bGluazpocmVmIiwgIiMiKQ0KICAgICAgICAgIC5vbigiY2xpY2siLCBzdG9w%0AUHJvcGFnYXRpb24pDQogICAgICAgICAgLmNhbGwoZHJhZyk7DQogICAgICB9IGVs%0Ac2Ugew0KICAgICAgICBoYW5kbGUxID0gZGl2LmFwcGVuZCgiYSIpDQogICAgICAg%0AICAgLmNsYXNzZWQoImQzLXNsaWRlci1oYW5kbGUiLCB0cnVlKQ0KICAgICAgICAg%0AIC5hdHRyKCJ4bGluazpocmVmIiwgIiMiKQ0KICAgICAgICAgIC5hdHRyKCdpZCcs%0AICJoYW5kbGUtb25lIikNCiAgICAgICAgICAub24oImNsaWNrIiwgc3RvcFByb3Bh%0AZ2F0aW9uKQ0KICAgICAgICAgIC5jYWxsKGRyYWcpOw0KICAgICAgfQ0KICAgICAg%0ALy8gSG9yaXpvbnRhbCBzbGlkZXINCiAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0g%0AImhvcml6b250YWwiKSB7DQoNCiAgICAgICAgZGl2Lm9uKCJjbGljayIsIG9uQ2xp%0AY2tIb3Jpem9udGFsKTsNCiAgICAgICAgDQogICAgICAgIGlmICggdmFsdWUubGVu%0AZ3RoID09IDIgKSB7DQogICAgICAgICAgZGl2UmFuZ2UgPSBkMy5zZWxlY3QodGhp%0AcykuYXBwZW5kKCdkaXYnKS5jbGFzc2VkKCJkMy1zbGlkZXItcmFuZ2UiLCB0cnVl%0AKTsNCg0KICAgICAgICAgIGhhbmRsZTEuc3R5bGUoImxlZnQiLCBmb3JtYXRQZXJj%0AZW50KHNjYWxlKHZhbHVlWyAwIF0pKSk7DQogICAgICAgICAgZGl2UmFuZ2Uuc3R5%0AbGUoImxlZnQiLCBmb3JtYXRQZXJjZW50KHNjYWxlKHZhbHVlWyAwIF0pKSk7DQog%0AICAgICAgICAgZHJhZy5vbigiZHJhZyIsIG9uRHJhZ0hvcml6b250YWwpOw0KDQog%0AICAgICAgICAgdmFyIHdpZHRoID0gMTAwIC0gcGFyc2VGbG9hdChmb3JtYXRQZXJj%0AZW50KHNjYWxlKHZhbHVlWyAxIF0pKSk7DQogICAgICAgICAgaGFuZGxlMi5zdHls%0AZSgibGVmdCIsIGZvcm1hdFBlcmNlbnQoc2NhbGUodmFsdWVbIDEgXSkpKTsNCiAg%0AICAgICAgICBkaXZSYW5nZS5zdHlsZSgicmlnaHQiLCB3aWR0aCsiJSIpOw0KICAg%0AICAgICAgIGRyYWcub24oImRyYWciLCBvbkRyYWdIb3Jpem9udGFsKTsNCg0KICAg%0AICAgICB9IGVsc2Ugew0KICAgICAgICAgIGhhbmRsZTEuc3R5bGUoImxlZnQiLCBm%0Ab3JtYXRQZXJjZW50KHNjYWxlKHZhbHVlKSkpOw0KICAgICAgICAgIGRyYWcub24o%0AImRyYWciLCBvbkRyYWdIb3Jpem9udGFsKTsNCiAgICAgICAgfQ0KICAgICAgICAN%0ACg0KICAgICAgICBzbGlkZXJMZW5ndGggPSBwYXJzZUludChkaXYuc3R5bGUoIndp%0AZHRoIiksIDEwKTsNCiAgICAgICAgaGFuZGxlMS5zdHlsZSgnd2lkdGgnLCAoKHNj%0AYWxlKGludGVydmFsK21pbikqc2xpZGVyTGVuZ3RoKSkrJ3B4JykNCg0KICAgICAg%0AfSBlbHNlIHsgLy8gVmVydGljYWwNCg0KICAgICAgICBkaXYub24oImNsaWNrIiwg%0Ab25DbGlja1ZlcnRpY2FsKTsNCiAgICAgICAgZHJhZy5vbigiZHJhZyIsIG9uRHJh%0AZ1ZlcnRpY2FsKTsNCiAgICAgICAgaWYgKCB2YWx1ZS5sZW5ndGggPT0gMiApIHsN%0ACiAgICAgICAgICBkaXZSYW5nZSA9IGQzLnNlbGVjdCh0aGlzKS5hcHBlbmQoJ2Rp%0AdicpLmNsYXNzZWQoImQzLXNsaWRlci1yYW5nZS12ZXJ0aWNhbCIsIHRydWUpOw0K%0ADQogICAgICAgICAgaGFuZGxlMS5zdHlsZSgiYm90dG9tIiwgZm9ybWF0UGVyY2Vu%0AdChzY2FsZSh2YWx1ZVsgMCBdKSkpOw0KICAgICAgICAgIGRpdlJhbmdlLnN0eWxl%0AKCJib3R0b20iLCBmb3JtYXRQZXJjZW50KHNjYWxlKHZhbHVlWyAwIF0pKSk7DQog%0AICAgICAgICAgZHJhZy5vbigiZHJhZyIsIG9uRHJhZ1ZlcnRpY2FsKTsNCg0KICAg%0AICAgICAgIHZhciB0b3AgPSAxMDAgLSBwYXJzZUZsb2F0KGZvcm1hdFBlcmNlbnQo%0Ac2NhbGUodmFsdWVbIDEgXSkpKTsNCiAgICAgICAgICBoYW5kbGUyLnN0eWxlKCJi%0Ab3R0b20iLCBmb3JtYXRQZXJjZW50KHNjYWxlKHZhbHVlWyAxIF0pKSk7DQogICAg%0AICAgICAgZGl2UmFuZ2Uuc3R5bGUoInRvcCIsIHRvcCsiJSIpOw0KICAgICAgICAg%0AIGRyYWcub24oImRyYWciLCBvbkRyYWdWZXJ0aWNhbCk7DQoNCiAgICAgICAgfSBl%0AbHNlIHsNCiAgICAgICAgICBoYW5kbGUxLnN0eWxlKCJib3R0b20iLCBmb3JtYXRQ%0AZXJjZW50KHNjYWxlKHZhbHVlKSkpOw0KICAgICAgICAgIGRyYWcub24oImRyYWci%0ALCBvbkRyYWdWZXJ0aWNhbCk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAg%0AIHNsaWRlckxlbmd0aCA9IHBhcnNlSW50KGRpdi5zdHlsZSgiaGVpZ2h0IiksIDEw%0AKTsNCg0KICAgICAgfQ0KICAgICAgDQogICAgICBpZiAoYXhpcykgew0KICAgICAg%0AICBjcmVhdGVBeGlzKGRpdik7DQogICAgICB9DQoNCg0KICAgICAgZnVuY3Rpb24g%0AY3JlYXRlQXhpcyhkb20pIHsNCg0KICAgICAgICAvLyBDcmVhdGUgYXhpcyBpZiBu%0Ab3QgZGVmaW5lZCBieSB1c2VyDQogICAgICAgIGlmICh0eXBlb2YgYXhpcyA9PT0g%0AImJvb2xlYW4iKSB7DQoNCiAgICAgICAgICBheGlzID0gZDMuc3ZnLmF4aXMoKQ0K%0AICAgICAgICAgICAgICAudGlja3MoTWF0aC5yb3VuZChzbGlkZXJMZW5ndGggLyAx%0AMDApKQ0KICAgICAgICAgICAgICAudGlja0Zvcm1hdCh0aWNrRm9ybWF0KQ0KICAg%0AICAgICAgICAgICAub3JpZW50KChvcmllbnRhdGlvbiA9PT0gImhvcml6b250YWwi%0AKSA/ICJib3R0b20iIDogICJyaWdodCIpOw0KDQogICAgICAgIH0NCg0KICAgICAg%0AICAvLyBDb3B5IHNsaWRlciBzY2FsZSB0byBtb3ZlIGZyb20gcGVyY2VudGFnZXMg%0AdG8gcGl4ZWxzDQogICAgICAgIGF4aXNTY2FsZSA9IHNjYWxlLmNvcHkoKS5yYW5n%0AZShbMCwgc2xpZGVyTGVuZ3RoXSk7DQogICAgICAgICAgYXhpcy5zY2FsZShheGlz%0AU2NhbGUpOw0KDQogICAgICAgICAgLy8gQ3JlYXRlIFNWRyBheGlzIGNvbnRhaW5l%0Acg0KICAgICAgICB2YXIgc3ZnID0gZG9tLmFwcGVuZCgic3ZnIikNCiAgICAgICAg%0AICAgIC5jbGFzc2VkKCJkMy1zbGlkZXItYXhpcyBkMy1zbGlkZXItYXhpcy0iICsg%0AYXhpcy5vcmllbnQoKSwgdHJ1ZSkNCiAgICAgICAgICAgIC5vbigiY2xpY2siLCBz%0AdG9wUHJvcGFnYXRpb24pOw0KDQogICAgICAgIHZhciBnID0gc3ZnLmFwcGVuZCgi%0AZyIpOw0KDQogICAgICAgIC8vIEhvcml6b250YWwgYXhpcw0KICAgICAgICBpZiAo%0Ab3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIikgew0KDQogICAgICAgICAgc3Zn%0ALnN0eWxlKCJtYXJnaW4tbGVmdCIsIC1tYXJnaW4gKyAicHgiKTsNCg0KICAgICAg%0AICAgIHN2Zy5hdHRyKHsNCiAgICAgICAgICAgIHdpZHRoOiBzbGlkZXJMZW5ndGgg%0AKyBtYXJnaW4gKiAyLA0KICAgICAgICAgICAgaGVpZ2h0OiBtYXJnaW4NCiAgICAg%0AICAgICB9KTsNCg0KICAgICAgICAgIGlmIChheGlzLm9yaWVudCgpID09PSAidG9w%0AIikgew0KICAgICAgICAgICAgc3ZnLnN0eWxlKCJ0b3AiLCAtbWFyZ2luICsgInB4%0AIik7DQogICAgICAgICAgICBnLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUo%0AIiArIG1hcmdpbiArICIsIiArIG1hcmdpbiArICIpIik7DQogICAgICAgICAgfSBl%0AbHNlIHsgLy8gYm90dG9tDQogICAgICAgICAgICBnLmF0dHIoInRyYW5zZm9ybSIs%0AICJ0cmFuc2xhdGUoIiArIG1hcmdpbiArICIsMCkiKTsNCiAgICAgICAgICB9DQoN%0ACiAgICAgICAgfSBlbHNlIHsgLy8gVmVydGljYWwNCg0KICAgICAgICAgIHN2Zy5z%0AdHlsZSgidG9wIiwgLW1hcmdpbiArICJweCIpOw0KDQogICAgICAgICAgc3ZnLmF0%0AdHIoew0KICAgICAgICAgICAgd2lkdGg6IG1hcmdpbiwNCiAgICAgICAgICAgIGhl%0AaWdodDogc2xpZGVyTGVuZ3RoICsgbWFyZ2luICogMg0KICAgICAgICAgIH0pOw0K%0ADQogICAgICAgICAgaWYgKGF4aXMub3JpZW50KCkgPT09ICJsZWZ0Iikgew0KICAg%0AICAgICAgICAgc3ZnLnN0eWxlKCJsZWZ0IiwgLW1hcmdpbiArICJweCIpOw0KICAg%0AICAgICAgICAgZy5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKCIgKyBtYXJn%0AaW4gKyAiLCIgKyBtYXJnaW4gKyAiKSIpOw0KICAgICAgICAgIH0gZWxzZSB7IC8v%0AIHJpZ2h0ICAgICAgICAgIA0KICAgICAgICAgICAgZy5hdHRyKCJ0cmFuc2Zvcm0i%0ALCAidHJhbnNsYXRlKCIgKyAwICsgIiwiICsgbWFyZ2luICsgIikiKTsNCiAgICAg%0AICAgICB9DQoNCiAgICAgICAgfQ0KDQogICAgICAgIGcuY2FsbChheGlzKTsNCg0K%0AICAgICAgfQ0KDQogICAgICBmdW5jdGlvbiBvbkNsaWNrSG9yaXpvbnRhbCgpIHsN%0ACiAgICAgICAgaWYgKCF2YWx1ZS5sZW5ndGgpIHsNCiAgICAgICAgICB2YXIgcG9z%0AID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2xpZGVyTGVuZ3RoLCBkMy5ldmVudC5v%0AZmZzZXRYIHx8IGQzLmV2ZW50LmxheWVyWCkpOw0KICAgICAgICAgIG1vdmVIYW5k%0AbGUoc3RlcFZhbHVlKHNjYWxlLmludmVydChwb3MgLyBzbGlkZXJMZW5ndGgpKSk7%0ADQogICAgICAgIH0NCiAgICAgIH0NCg0KICAgICAgZnVuY3Rpb24gb25DbGlja1Zl%0AcnRpY2FsKCkgew0KICAgICAgICBpZiAoIXZhbHVlLmxlbmd0aCkgew0KICAgICAg%0AICAgIHZhciBwb3MgPSBzbGlkZXJMZW5ndGggLSBNYXRoLm1heCgwLCBNYXRoLm1p%0AbihzbGlkZXJMZW5ndGgsIGQzLmV2ZW50Lm9mZnNldFkgfHwgZDMuZXZlbnQubGF5%0AZXJZKSk7DQogICAgICAgICAgbW92ZUhhbmRsZShzdGVwVmFsdWUoc2NhbGUuaW52%0AZXJ0KHBvcyAvIHNsaWRlckxlbmd0aCkpKTsNCiAgICAgICAgfQ0KICAgICAgfQ0K%0ADQogICAgICBmdW5jdGlvbiBvbkRyYWdIb3Jpem9udGFsKCkgew0KICAgICAgICBp%0AZiAoIGQzLmV2ZW50LnNvdXJjZUV2ZW50LnRhcmdldC5pZCA9PT0gImhhbmRsZS1v%0AbmUiKSB7DQogICAgICAgICAgYWN0aXZlID0gMTsNCiAgICAgICAgfSBlbHNlIGlm%0AICggZDMuZXZlbnQuc291cmNlRXZlbnQudGFyZ2V0LmlkID09ICJoYW5kbGUtdHdv%0AIiApIHsNCiAgICAgICAgICBhY3RpdmUgPSAyOw0KICAgICAgICB9DQogICAgICAg%0AIHZhciBwb3MgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzbGlkZXJMZW5ndGgsIGQz%0ALmV2ZW50LngpKTsNCiAgICAgICAgbW92ZUhhbmRsZShzdGVwVmFsdWUoc2NhbGUu%0AaW52ZXJ0KHBvcyAvIHNsaWRlckxlbmd0aCkpKTsNCiAgICAgIH0NCg0KICAgICAg%0AZnVuY3Rpb24gb25EcmFnVmVydGljYWwoKSB7DQogICAgICAgIGlmICggZDMuZXZl%0AbnQuc291cmNlRXZlbnQudGFyZ2V0LmlkID09PSAiaGFuZGxlLW9uZSIpIHsNCiAg%0AICAgICAgICBhY3RpdmUgPSAxOw0KICAgICAgICB9IGVsc2UgaWYgKCBkMy5ldmVu%0AdC5zb3VyY2VFdmVudC50YXJnZXQuaWQgPT0gImhhbmRsZS10d28iICkgew0KICAg%0AICAgICAgIGFjdGl2ZSA9IDI7DQogICAgICAgIH0NCiAgICAgICAgdmFyIHBvcyA9%0AIHNsaWRlckxlbmd0aCAtIE1hdGgubWF4KDAsIE1hdGgubWluKHNsaWRlckxlbmd0%0AaCwgZDMuZXZlbnQueSkpDQogICAgICAgIG1vdmVIYW5kbGUoc3RlcFZhbHVlKHNj%0AYWxlLmludmVydChwb3MgLyBzbGlkZXJMZW5ndGgpKSk7DQogICAgICB9DQoNCiAg%0AICAgIGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbigpIHsNCiAgICAgICAgZDMuZXZl%0AbnQuc3RvcFByb3BhZ2F0aW9uKCk7DQogICAgICB9DQoNCiAgICB9KTsNCg0KICB9%0ADQoNCiAgLy8gTW92ZSBzbGlkZXIgaGFuZGxlIG9uIGNsaWNrL2RyYWcNCiAgZnVu%0AY3Rpb24gbW92ZUhhbmRsZShuZXdWYWx1ZSkgeyANCiAgICBpZiAoc2xpZGVyLm1h%0AeCgpLXNsaWRlci5pbnRlcnZhbCgpIDwgbmV3VmFsdWUpIHsgDQogICAgICBuZXdW%0AYWx1ZSA9IHNsaWRlci5tYXgoKSAtIHNsaWRlci5pbnRlcnZhbCgpOw0KICAgIH0N%0ACg0KICAgIHZhciBjdXJyZW50VmFsdWUgPSB2YWx1ZS5sZW5ndGggPyB2YWx1ZVth%0AY3RpdmUgLSAxXTogdmFsdWU7DQoNCiAgICBpZiAoY3VycmVudFZhbHVlICE9PSBu%0AZXdWYWx1ZSkgew0KICAgICAgdmFyIG9sZFBvcyA9IGZvcm1hdFBlcmNlbnQoc2Nh%0AbGUoc3RlcFZhbHVlKGN1cnJlbnRWYWx1ZSkpKSwNCiAgICAgICAgICBuZXdQb3Mg%0APSBmb3JtYXRQZXJjZW50KHNjYWxlKHN0ZXBWYWx1ZShuZXdWYWx1ZSkpKSwNCiAg%0AICAgICAgICBwb3NpdGlvbiA9IChvcmllbnRhdGlvbiA9PT0gImhvcml6b250YWwi%0AKSA/ICJsZWZ0IiA6ICJib3R0b20iOw0KDQogICAgICBpZiAoIHZhbHVlLmxlbmd0%0AaCA9PT0gMikgew0KICAgICAgICB2YWx1ZVsgYWN0aXZlIC0gMSBdID0gbmV3VmFs%0AdWU7DQogICAgICAgIGlmIChkMy5ldmVudCkgew0KICAgICAgICAgIGRpc3BhdGNo%0ALnNsaWRlKGQzLmV2ZW50LCB2YWx1ZSApOw0KICAgICAgICB9Ow0KICAgICAgfSBl%0AbHNlIHsNCiAgICAgICAgaWYgKGQzLmV2ZW50KSB7DQogICAgICAgICAgZGlzcGF0%0AY2guc2xpZGUoZDMuZXZlbnQuc291cmNlRXZlbnQgfHwgZDMuZXZlbnQsIHZhbHVl%0AID0gbmV3VmFsdWUpOw0KICAgICAgICB9Ow0KICAgICAgfQ0KDQogICAgICBpZiAo%0AIHZhbHVlWyAwIF0gPj0gdmFsdWVbIDEgXSApIHJldHVybjsNCiAgICAgIGlmICgg%0AYWN0aXZlID09PSAxICkgew0KICAgICAgICANCiAgICAgICAgaWYgKHZhbHVlLmxl%0Abmd0aCA9PT0gMikgew0KICAgICAgICAgIChwb3NpdGlvbiA9PT0gImxlZnQiKSA/%0AIGRpdlJhbmdlLnN0eWxlKCJsZWZ0IiwgbmV3UG9zKSA6IGRpdlJhbmdlLnN0eWxl%0AKCJib3R0b20iLCBuZXdQb3MpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGFu%0AaW1hdGUpIHsNCiAgICAgICAgICBoYW5kbGUxLnRyYW5zaXRpb24oKQ0KICAgICAg%0AICAgICAgICAuc3R5bGVUd2Vlbihwb3NpdGlvbiwgZnVuY3Rpb24oKSB7IHJldHVy%0AbiBkMy5pbnRlcnBvbGF0ZShvbGRQb3MsIG5ld1Bvcyk7IH0pDQogICAgICAgICAg%0AICAgIC5kdXJhdGlvbigodHlwZW9mIGFuaW1hdGUgPT09ICJudW1iZXIiKSA/IGFu%0AaW1hdGUgOiAyNTApOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIGhhbmRs%0AZTEuc3R5bGUocG9zaXRpb24sIG5ld1Bvcyk7DQogICAgICAgIH0NCiAgICAgIH0g%0AZWxzZSB7DQogICAgICAgIA0KICAgICAgICB2YXIgd2lkdGggPSAxMDAgLSBwYXJz%0AZUZsb2F0KG5ld1Bvcyk7DQogICAgICAgIHZhciB0b3AgPSAxMDAgLSBwYXJzZUZs%0Ab2F0KG5ld1Bvcyk7DQoNCiAgICAgICAgKHBvc2l0aW9uID09PSAibGVmdCIpID8g%0AZGl2UmFuZ2Uuc3R5bGUoInJpZ2h0Iiwgd2lkdGggKyAiJSIpIDogZGl2UmFuZ2Uu%0Ac3R5bGUoInRvcCIsIHRvcCArICIlIik7DQogICAgICAgIA0KICAgICAgICBpZiAo%0AYW5pbWF0ZSkgew0KICAgICAgICAgIGhhbmRsZTIudHJhbnNpdGlvbigpDQogICAg%0AICAgICAgICAgIC5zdHlsZVR3ZWVuKHBvc2l0aW9uLCBmdW5jdGlvbigpIHsgcmV0%0AdXJuIGQzLmludGVycG9sYXRlKG9sZFBvcywgbmV3UG9zKTsgfSkNCiAgICAgICAg%0AICAgICAgLmR1cmF0aW9uKCh0eXBlb2YgYW5pbWF0ZSA9PT0gIm51bWJlciIpID8g%0AYW5pbWF0ZSA6IDI1MCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgaGFu%0AZGxlMi5zdHlsZShwb3NpdGlvbiwgbmV3UG9zKTsNCiAgICAgICAgfQ0KICAgICAg%0AfQ0KICAgIH0NCiAgfQ0KDQogIC8vIENhbGN1bGF0ZSBuZWFyZXN0IHN0ZXAgdmFs%0AdWUNCiAgZnVuY3Rpb24gc3RlcFZhbHVlKHZhbCkgew0KDQogICAgaWYgKHZhbCA9%0APT0gc2NhbGUuZG9tYWluKClbMF0gfHwgdmFsID09PSBzY2FsZS5kb21haW4oKVsx%0AXSkgew0KICAgICAgcmV0dXJuIHZhbDsNCiAgICB9DQoNCiAgICB2YXIgdmFsTW9k%0AU3RlcCA9ICh2YWwgLSBzY2FsZS5kb21haW4oKVswXSkgJSBzdGVwLA0KICAgICAg%0AICBhbGlnblZhbHVlID0gdmFsIC0gdmFsTW9kU3RlcDsNCg0KICAgIGlmIChNYXRo%0ALmFicyh2YWxNb2RTdGVwKSAqIDIgPj0gc3RlcCkgew0KICAgICAgYWxpZ25WYWx1%0AZSArPSAodmFsTW9kU3RlcCA+IDApID8gc3RlcCA6IC1zdGVwOw0KICAgIH0NCg0K%0AICAgIHJldHVybiBhbGlnblZhbHVlOw0KDQogIH0NCg0KICAvLyBHZXR0ZXIvc2V0%0AdGVyIGZ1bmN0aW9ucw0KICBzbGlkZXIubWluID0gZnVuY3Rpb24oXykgew0KICAg%0AIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG1pbjsNCiAgICBtaW4gPSBf%0AOw0KICAgIHJldHVybiBzbGlkZXI7DQogIH07DQoNCiAgc2xpZGVyLm1heCA9IGZ1%0AbmN0aW9uKF8pIHsNCiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBt%0AYXg7DQogICAgbWF4ID0gXzsNCiAgICByZXR1cm4gc2xpZGVyOw0KICB9Ow0KDQog%0AIHNsaWRlci5zdGVwID0gZnVuY3Rpb24oXykgew0KICAgIGlmICghYXJndW1lbnRz%0ALmxlbmd0aCkgcmV0dXJuIHN0ZXA7DQogICAgc3RlcCA9IF87DQogICAgcmV0dXJu%0AIHNsaWRlcjsNCiAgfTsNCg0KICBzbGlkZXIuYW5pbWF0ZSA9IGZ1bmN0aW9uKF8p%0AIHsNCiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBhbmltYXRlOw0K%0AICAgIGFuaW1hdGUgPSBfOw0KICAgIHJldHVybiBzbGlkZXI7DQogIH07DQoNCiAg%0Ac2xpZGVyLm9yaWVudGF0aW9uID0gZnVuY3Rpb24oXykgew0KICAgIGlmICghYXJn%0AdW1lbnRzLmxlbmd0aCkgcmV0dXJuIG9yaWVudGF0aW9uOw0KICAgIG9yaWVudGF0%0AaW9uID0gXzsNCiAgICByZXR1cm4gc2xpZGVyOw0KICB9Ow0KDQogIHNsaWRlci5h%0AeGlzID0gZnVuY3Rpb24oXykgew0KICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkg%0AcmV0dXJuIGF4aXM7DQogICAgYXhpcyA9IF87DQogICAgcmV0dXJuIHNsaWRlcjsN%0ACiAgfTsNCg0KICBzbGlkZXIubWFyZ2luID0gZnVuY3Rpb24oXykgew0KICAgIGlm%0AICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG1hcmdpbjsNCiAgICBtYXJnaW4g%0APSBfOw0KICAgIHJldHVybiBzbGlkZXI7DQogIH07DQoNCiAgc2xpZGVyLnZhbHVl%0AID0gZnVuY3Rpb24oXykgew0KICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0%0AdXJuIHZhbHVlOw0KICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7DQogICAg%0AICBtb3ZlSGFuZGxlKHN0ZXBWYWx1ZShfKSk7DQogICAgfTsNCiAgICB2YWx1ZSA9%0AIF87DQogICAgcmV0dXJuIHNsaWRlcjsNCiAgfTsNCg0KICBzbGlkZXIuc2NhbGUg%0APSBmdW5jdGlvbihfKSB7DQogICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1%0Acm4gc2NhbGU7DQogICAgc2NhbGUgPSBfOw0KICAgIHJldHVybiBzbGlkZXI7DQog%0AIH07DQoNCiAgc2xpZGVyLmludGVydmFsID0gZnVuY3Rpb24oXykgew0KICAgIGlm%0AICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGludGVydmFsOw0KICAgIGludGVy%0AdmFsID0gXzsNCiAgICByZXR1cm4gc2xpZGVyOw0KICB9Ow0KDQoNCiAgZDMucmVi%0AaW5kKHNsaWRlciwgZGlzcGF0Y2gsICJvbiIpOw0KDQogIHJldHVybiBzbGlkZXI7%0ADQoNCn0NCn0pKTsNCjwvc2NyaXB0Pg0KICAgICAgPCEtLSBuZHR2LWQzIGpzIGNv%0AZGUgLS0+DQogICAgICA8c2NyaXB0Pi8qKgpuZHR2LWQzIGlzIGEgZDMtYmFzZWQg%0ASFRNTDUgbmV0d29yayBhbmltYXRpb24gcGxheWVyIGZvciB0aGUgbmR0diBwYWNr%0AYWdlIChodHRwOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9uZHR2%0AL2luZGV4Lmh0bWwpCgpUaGUgbmR0di1kMyBsaWJyYXJ5IHdhcyBjcmVhdGVkIGJ5%0AIEdyZWcgTWljaGFsZWMgYW5kIFNreWUgQmVuZGVyLWRlTW9sbCBmb3IgdGhlIHN0%0AYXRuZXQgcHJvamVjdCBodHRwOi8vc3RhdG5ldC5vcmcgZnVuZGVkIGJ5IE5JQ0hE%0AIGdyYW50IFIwMUhEMDY4Mzk1LgoKVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRl%0AZCB1bmRlciB0aGUgR1BMLTMgbGljZW5zZSAoaHR0cDovL2Nob29zZWFsaWNlbnNl%0ALmNvbS9saWNlbnNlcy9ncGwtMy4wLykuICBJdCBpcyBmcmVlLCBvcGVuIHNvdXJj%0AZSwgYW5kIGhhcyB0aGUgYXR0cmlidXRpb24gcmVxdWlyZW1lbnRzIChHUEwgU2Vj%0AdGlvbiA3KSBhdCBodHRwOi8vc3RhdG5ldC5vcmcvYXR0cmlidXRpb246CgphLiB5%0Ab3UgYWdyZWUgdG8gcmV0YWluIGluIG5kdHYtZDMgYW5kIGFueSBtb2RpZmljYXRp%0Ab25zIHRvIG5kdHYtZDMgdGhlIGNvcHlyaWdodCwgYXV0aG9yIGF0dHJpYnV0aW9u%0AIGFuZCBVUkwgaW5mb3JtYXRpb24gYXMgcHJvdmlkZWQgYXQgYSBodHRwOi8vc3Rh%0AdG5ldHByb2plY3Qub3JnL2F0dHJpYnV0aW9uLgoKYi4geW91IGFncmVlIHRoYXQg%0AbmR0di1kMyBhbmQgYW55IG1vZGlmaWNhdGlvbnMgdG8gbmR0di1kMyB3aWxsLCB3%0AaGVuIHVzZWQsIGRpc3BsYXkgdGhlIGF0dHJpYnV0aW9uOgoKICAgIEJhc2VkIG9u%0AICdzdGF0bmV0JyBwcm9qZWN0IHNvZnR3YXJlIChodHRwOi8vc3RhdG5ldHByb2pl%0AY3Qub3JnKS4gRm9yIGxpY2Vuc2UgYW5kIGNpdGF0aW9uIGluZm9ybWF0aW9uIHNl%0AZSBodHRwOi8vc3RhdG5ldHByb2plY3Qub3JnL2F0dHJpYnV0aW9uCgpDb3B5cmln%0AaHQgMjAxNCBTdGF0bmV0IENvbW1vbnMgaHR0cDovL3N0YXRuZXQub3JnCgpUbyBj%0AaXRlIHRoaXMgcHJvamVjdCwgcGxlYXNlIHVzZToKCkdyZWcgTWljaGFsZWMsIFNr%0AeWUgQmVuZGVyLWRlTW9sbCwgTWFydGluYSBNb3JyaXMgKDIwMTQpICduZHR2LWQz%0AOiBhbiBIVE1MNSBuZXR3b3JrIGFuaW1hdGlvbiBwbGF5ZXIgZm9yIHRoZSBuZHR2%0AIHBhY2thZ2UnIFRoZSBzdGF0bmV0IHByb2plY3QuIGh0dHA6Ly9zdGF0bmV0Lm9y%0AZwpAbW9kdWxlCiovCgoKKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7CiAgLyoq%0AIEBjbGFzcyAqLwogIHJvb3QubmR0dl9kMyA9IGZhY3RvcnkoKTsKfSh0aGlzLCBm%0AdW5jdGlvbigpIHsKICAidXNlIHN0cmljdCI7CiAKICAvKioKICAqIFB1YmxpYyBv%0AcHRpb25zIHRvIGNvbnRyb2wgdmlzdWFsaXphdGlvbiBmdW5jdGlvbmFsaXR5CiAg%0AKiBAY29uc3RhbnQge29iamVjdH0KICAqIEBnbG9iYWwKICAqIEBkZWZhdWx0CiAg%0AKi8KICB2YXIgZGVmYXVsdF9vcHRpb25zID0gewogICAgYW5pbWF0aW9uRHVyYXRp%0Ab246IDgwMCwgICAgICAgLy9EdXJhdGlvbiBvZiBlYWNoIHN0ZXAgYW5pbWF0aW9u%0AIGR1cmluZyBwbGF5IG9yIHN0ZXAgYWN0aW9ucywgaW4gbWlsbGlzZWNvbmRzCiAg%0AICBlbnRlckV4aXRBbmltYXRpb25GYWN0b3I6IDAsICAvL1BlcmNlbnRhZ2UgKDAt%0AMSkgb2YgdG90YWwgc3RlcCBhbmltYXRpb24gdGltZSB0aGF0IGVudGVyL2V4aXQg%0AYW5pbWF0aW9ucyBzaG91bGQgdGFrZQogICAgbGFiZWxPZmZzZXQ6IHsgICAgICAg%0AICAgICAgICAgLy9waXhlbCBvZmZzZXQgb2YgbGFiZWxzCiAgICAgIHg6IDEyLAog%0AICAgICB5OiAwCiAgICB9LAogICAgYmFzZUZvbnRTaXplOiAnMTQnLCAgICAgICAg%0AICAgLy9Gb250IHNpemUsIGluIHBpeGVscywgZm9yIGxhYmVscyB3aXRoIGNleCB2%0AYWx1ZSBvZiAxCiAgICBub2RlU2l6ZUZhY3RvcjogMC4wMSwgICAgICAgICAvL1Bl%0AcmNlbnRhZ2UgKDAtMSkgb2Ygdmlld3BvcnQgc2l6ZSB0aGF0IGEgbm9kZSBvZiBz%0AaXplIDEgd2lsbCBiZSByZW5kZXJlZCBhdAogICAgZGF0YUNob29zZXI6IGZhbHNl%0ALCAgICAgICAgICAgLy9zaG93IGEgc2VsZWN0IGJveCBmb3IgY2hvb3NpbmcgZGlm%0AZmVyZW50IGdyYXBocz8KICAgIGRhdGFDaG9vc2VyRGlyOiAnZGF0YS8nLCAgICAg%0AIC8vd2ViIHBhdGggdG8gZGlyIGNvbnRhaW5pbmcgZGF0YSBqc29uIGZpbGVzCiAg%0AICBwbGF5Q29udHJvbHM6IHRydWUsICAgICAgICAgICAvL3Nob3cgdGhlIHBsYXll%0AciBjb250cm9scwogICAgc2xpZGVyOiB0cnVlLCAgICAgICAgICAgICAgICAgLy9z%0AaG93IHRoZSBzbGlkZXIgY29udHJvbAogICAgbWVudTogdHJ1ZSwgICAgICAgICAg%0AICAgICAgICAgLy9zaG93IGEgbWVudSBpbiB1cHBlci1yaWdodAogICAgYW5pbWF0%0AZU9uTG9hZDogZmFsc2UsICAgICAgICAgLy9wbGF5IHRoZSBncmFwaCBhbmltYXRp%0Ab24gb24gcGFnZSBsb2FkCiAgICBtYXJnaW46IHsgICAgICAgICAgICAgICAgICAg%0AICAvL2dyYXBoIHJlbmRlciBhcmVhIG1hcmdpbnMKICAgICAgeDogMjAsCiAgICAg%0AIHk6IDEwCiAgICB9LAogICAgZ3JhcGhEYXRhOiBudWxsLCAgICAgICAgICAgICAg%0ALy9ncmFwaCBkYXRhLCBlaXRoZXIgYXMgSlNPTiBvYmplY3Qgb3IgVVJMIHRvIGpz%0Ab24gZmlsZQogICAgZGVidWdGcmFtZUluZm86IGZhbHNlLCAgICAgICAgLy9TaG93%0AIHRoZSBzbGljZSBpbmZvIGluIGNvcm5lcgogICAgZHVyYXRpb25Db250cm9sOiB0%0AcnVlLCAgLy9TaG93IGEgY29udHJvbCB0byBjaGFuZ2UgZHVyYXRpb24gc3BlZWQK%0AICB9OwoKICAvKioKICAqIFN1cHBvcnRlZCBORFRWIG5ldHdvcmsgcHJvcGVydGll%0AcyBhbmQgdGhlaXIgZGVmYXVsdCB2YWx1ZXMKICAqIEBjb25zdGFudCB7b2JqZWN0%0AfQogICogQGdsb2JhbAogICogQGRlZmF1bHQKICAqLwogIHZhciBuZHR2UHJvcGVy%0AdGllcyA9IHsKICAgIGdyYXBoOiB7CiAgICAgIHhsYWI6IG51bGwsICAgICAgICAg%0AICAgICAgICAgICAgLy8gbGFiZWwgY2FwdGlvbiBiZWxvdyB0aGUgcmVuZGVyLCBv%0AbiB0aGUgeGF4aXMKICAgICAgbWFpbjogbnVsbCwgICAgICAgICAgICAgICAgICAg%0AICAvLyBtYWluIGhlYWRsaW5lIGFib3ZlIHRoZSByZW5kZXIKICAgICAgZGlzcGxh%0AeWxhYmVsczogZmFsc2UgLCAgICAgICAgICAvLyBzaG91bGQgdmVydGV4IGxhYmVs%0AcyBiZSBkaXNwbGF5ZWQKICAgICAgYmc6ICcjZmZmJywgICAgICAgICAgICAgICAg%0AICAgICAvLyBiYWNrZ3JvdW5kIGNvbG9yCiAgICAgIHVzZWFycm93czogdHJ1ZSwg%0AICAgICAgICAgICAgICAgLy8gc2hvdWxkIGFycm93cyBiZSBkcmF3biBvbiBlZGdl%0Acz8KICAgICAgeGxpbTogbnVsbCwgICAgICAgICAgICAgICAgICAgICAvLyByYW5n%0AZSBvZiB4IHZhbHVlcyAgICAgICAgICAgICAgICAgICAgIAogICAgICB5bGltOiBu%0AdWxsLCAgICAgICAgICAgICAgICAgICAgIC8vIHJhbmdlIG9mIHkgdmFsdWVzICAK%0AICAgICAgZWRnZU9mZnNldDogMCwgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQg%0Ab2YgZWRnZSBsZW5ndGggdG8gdmVydGV4IGJvcmRlcnMgIAogICAgICB0b29sdGlw%0AT2Zmc2V0OiAwLCAgICAgICAgICAgICAgIC8vIG9mZnNldCBvZiB0b29sdGlwcyB0%0AbyB2ZXJ0ZXggYm9yZGVycyAKICAgIH0sIAogICAgbm9kZTogewogICAgICBjb29y%0AZDogbnVsbCwgICAgICAgICAgICAgICAgICAgIC8vIGNvb3JkaW5hdGVzIGZvciBu%0Ab2RlcwogICAgICBsYWJlbDogbnVsbCwgICAgICAgICAgICAgICAgICAgIC8vIGxh%0AYmVscyBmb3IgdmVydGljZXMKICAgICAgJ2xhYmVsLmNvbCc6ICcjMDAwJywgICAg%0AICAgICAgICAvLyBjb2xvciBvZiBub2RlIGxhYmVsCiAgICAgICdsYWJlbC5jZXgn%0AOiAxLCAgICAgICAgICAgICAgICAgLy8gbGFiZWwgZm9udCBzaXplIHNjYWxlIGZh%0AY3RvcgogICAgICAndmVydGV4LmNleCc6IDEsICAgICAgICAgICAgICAgIC8vIHZl%0AcnRleCAobm9kZSkgZXhwYW5zaW9uIHNjYWxlIGZhY3RvcgogICAgICAndmVydGV4%0ALmNvbCc6ICcjRjAwJywgICAgICAgICAgIC8vIG5vZGUgZmlsbCBjb2xvcgogICAg%0AICAndmVydGV4LnNpZGVzJzogNTAsICAgICAgICAgICAgIC8vIG51bWJlciBvZiBz%0AaWRlcyBmb3IgdmVydGV4IHBvbHlnb24gKHNoYXBlKQogICAgICAndmVydGV4LnJv%0AdCc6IDAsICAgICAgICAgICAgICAgIC8vIHJvdGF0aW9uIGZvciB2ZXJ0ZXggcG9s%0AeWdvbgogICAgICAndmVydGV4LnRvb2x0aXAnOiAnJywgICAgICAgICAgIC8vIHZl%0AcnRleCB0b29sdGlwIHZhbHVlCiAgICAgICd2ZXJ0ZXguYm9yZGVyJzogJyMwMDAn%0ALCAgICAgICAgLy8gY29sb3Igb2YgdmVydGV4IGJvcmRlciBzdHJva2UKICAgICAg%0AJ3ZlcnRleC5sd2QnOiAxLCAgICAgICAgICAgICAgICAvLyB3aWR0aCBvZiB2ZXJ0%0AZXggYm9yZGVyIHN0cm9rZQogICAgICAndmVydGV4LmNzcy5jbGFzcyc6IG51bGws%0AICAgICAgIC8vIGNzcyBjbGFzcyBuYW1lIGFwcGxpZWQgdG8gbm9kZQogICAgICAn%0AdmVydGV4LmxhYmVsLmNzcy5jbGFzcyc6IG51bGwsIC8vIGNzcyBjbGFzcyBuYW1l%0AIGFwcGxpZWQgdG8gbm9kZSBsYWJlbAogICAgICAndmVydGV4LmNzcy5zdHlsZSc6%0AIG51bGwsICAgICAgIC8vIGNzcyBpbmxpbmUtc3R5bGUgYXBwbGllZCB0byBub2Rl%0AIChVTklNUExJTUVOVEVEKQogICAgICAndmVydGV4LmxhYmVsLmNzcy5zdHlsZSc6%0AIG51bGwsIC8vIGNzcyBpbmxpbmUgc3R5bGUgYXBwbGllZCB0byBub2RlIGxhYmVs%0AIChVTklNUExFTUVOVEVEKQogICAgICAnaW1hZ2UnOiBudWxsLCAgICAgICAgICAg%0AICAgICAgIC8vIGJhY2tncm91bmQgaW1hZ2UgZm9yIHZlcnRleAogICAgfSwKICAg%0AIGVkZ2U6IHsKICAgICAgJ2VkZ2UubHdkJzogMSwgICAgICAgICAgICAgICAgICAv%0ALyB3aWR0aCBvZiBlZGdlIHN0cm9rZQogICAgICAnZWRnZS5jb2wnOiAnIzAwMCcs%0AICAgICAgICAgICAgIC8vIGVkZ2Ugc3Ryb2tlIGNvbG9yCiAgICAgICdlZGdlLnRv%0Ab2x0aXAnOiBudWxsLCAgICAgICAgICAgLy8gZWRnZSB0b29sdGlwIHZhbHVlCiAg%0AICAgICdlZGdlLmNzcy5jbGFzcyc6IG51bGwsICAgICAgICAgLy8gY3NzIGNsYXNz%0AIG5hbWUgYXBwbGllZCB0byBlZGdlCiAgICAgICdlZGdlLmxhYmVsLmNzcy5jbGFz%0Acyc6IG51bGwsICAgLy8gY3NzIGNsYXNzIG5hbWUgYXBwbGllZCB0byBlZGdlIGxh%0AYmVsCiAgICAgICdlZGdlLmNzcy5zdHlsZSc6IG51bGwsICAgICAgICAgLy8gY3Nz%0AIGlubGluZS1zdHlsZSBhcHBsaWVkIHRvIGVkZ2UgKFVOSU1QTElNRU5URUQpCiAg%0AICAgICdlZGdlLmxhYmVsLmNzcy5zdHlsZSc6IG51bGwsICAgLy8gY3NzIGlubGlu%0AZSBzdHlsZSBhcHBsaWVkIHRvIGVkZ2UgbGFiZWwgKFVOSU1QTEVNRU5URUQpCiAg%0AICB9CiAgfQogIAoKICAvKioKICAqIEluaXRpYWxpemUgYSBuZXcgbmR0di1kMyBp%0AbnN0YW5jZQogICogQGNvbnN0cnVjdHMgbmR0dl9kMwogICogQHBhcmFtIHtvYmpl%0AY3R9IC0gQW4gb2JqZWN0IG9mIGRlZmF1bHQgb3B0aW9ucyBvdmVycmlkZXMKICAq%0AIEBwYXJhbSB7c3RyaW5nfEhUTUxFbGVtZW50fSAtIEEgQ1NTIHNlbGVjdG9yIHN0%0AcmluZyBvciBET00gZWxlbWVudCByZWZlcmVuY2Ugc3BlY2lmeWluZyB0aGUgdGFy%0AZ2V0IGRvbSBlbGVtZW50IHRoZSBuZXR3b3JrIHNob3VsZCBiZSBpbml0aWFsaXpl%0AZCB0bwogICovCiAgdmFyIG4zID0gZnVuY3Rpb24ob3B0aW9ucywgdGFyZ2V0KSB7%0ACiAgICB2YXIgbjMgPSB0aGlzOwogICAgCiAgICB2YXIgZ2xvYmFscyA9IHsKICAg%0AICAgc3ZnOiBudWxsLAogICAgICB4U2NhbGU6IG51bGwsCiAgICAgIHlTY2FsZTog%0AbnVsbCwKICAgICAgbWluVGltZTogbnVsbCwKICAgICAgaW50ZXJ2YWw6IG51bGws%0ACiAgICAgIG1heFRpbWU6IG51bGwsCiAgICAgIGFuaW1hdGU6IG51bGwsCiAgICAg%0AIGJhc2VOb2RlU2l6ZTogbnVsbCwKICAgICAgY3VyclRpbWU6IDAsCiAgICAgIGdy%0AYXBoOiBudWxsLAogICAgICB0aW1lSW5kZXg6bnVsbCwKICAgICAgZG9tVGFyZ2V0%0AOm51bGwsCiAgICAgIHNsaWRlcjpudWxsLAogICAgICBub2RlQ29vcmRzOiB7fSwK%0AICAgICAgb3B0aW9uczoge30KICAgIAp9CiAgICAvL2luaXRpYWxpemUgY2xhc3Mg%0AZ2xvYmFscwogICAgJC5leHRlbmQodHJ1ZSwgbjMsIGdsb2JhbHMpOwoKICAgIC8v%0AcmVwbGFjZSBkZWZhdWx0cyB3aXRoIHVzZXItc3BlY2lmaWVkIG9wdGlvbnMKICAg%0AICQuZXh0ZW5kKHRydWUsIG4zLm9wdGlvbnMsIGRlZmF1bHRfb3B0aW9ucyk7CiAg%0AICAkLmV4dGVuZCh0cnVlLCBuMy5vcHRpb25zLCBvcHRpb25zKTsKCiAgICBpZiAo%0AIXRhcmdldCkgewogICAgICB0YXJnZXQgPSBkMy5zZWxlY3QoJ2JvZHknKS5hcHBl%0AbmQoJ2RpdicpLnN0eWxlKHt3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJ30p%0ALm5vZGUoKTsKICAgICAgZDMuc2VsZWN0QWxsKCdodG1sLCBib2R5JykuY2xhc3Nl%0AZCh7J25kdHYtZnVsbHNjcmVlbic6IHRydWV9KQogICAgfQogICAgbjMuZG9tVGFy%0AZ2V0ID0gZDMuc2VsZWN0KHRhcmdldCk7CiAgICBuMy5kb21UYXJnZXQuY2xhc3Nl%0AZCh7J25kdHYtZDMtY29udGFpbmVyJzogdHJ1ZX0pOwogICAgbjMuU1ZHU2V0dXAo%0AbjMuZG9tVGFyZ2V0KTsKICAgIGlmIChuMy5vcHRpb25zLnBsYXlDb250cm9scyB8%0AfCBuMy5vcHRpb25zLnNsaWRlcikgewogICAgICBuMy5kb21UYXJnZXQuYXBwZW5k%0AKCdkaXYnKS5hdHRyKCdjbGFzcycsICdjb250cm9scycpOwogICAgfQogICAgaWYg%0AKG4zLm9wdGlvbnMuZGF0YUNob29zZXIpIHsgbjMuY3JlYXRlRGF0YUNob29zZXIo%0AKTsgfQogICAgaWYgKG4zLm9wdGlvbnMucGxheUNvbnRyb2xzKSB7IG4zLmNyZWF0%0AZVBsYXlDb250cm9scygpOyB9CiAgICBpZiAobjMub3B0aW9ucy5zbGlkZXIpIHsg%0AbjMuY3JlYXRlU2xpZGVyQ29udHJvbCgpOyB9CiAgICBpZiAobjMub3B0aW9ucy5t%0AZW51KSB7IG4zLmNyZWF0ZU1lbnUoKTsgfQoKCiAgICBuMy50b29sdGlwID0gbjMu%0AZG9tVGFyZ2V0LnNlbGVjdCgnLmdyYXBoJykuYXBwZW5kKCdkaXYnKS5hdHRyKCdj%0AbGFzcycsICd0b29sdGlwJyk7CiAgICBuMy5mcmFtZUluZm9EaXYgPSBuMy5kb21U%0AYXJnZXQuc2VsZWN0KCcuZ3JhcGgnKS5hcHBlbmQoJ2RpdicpLmF0dHIoJ2NsYXNz%0AJywgJ2ZyYW1lSW5mbycpCiAgICBpZiAobjMub3B0aW9ucy5kZWJ1Z0ZyYW1lSW5m%0AbykgeyBuMy5mcmFtZUluZm9EaXYuc3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKTsg%0AfQogICAgaWYobjMub3B0aW9ucy5ncmFwaERhdGEpIHsgbjMubG9hZERhdGEobjMu%0Ab3B0aW9ucy5ncmFwaERhdGEpOyB9CiAgfQoKICAvKioKICAqIEluaXRpYWxpemUg%0AdGhlIFNWRyBlbGVtZW50IGFuZCByZWxhdGVkIERPTSBlbGVtZW50cyBhbmQgbGlz%0AdGVuZXJzCiAgKiBAcGFyYW0ge0QzU2VsZWN0aW9ufSAtIERPTSBlbGVtZW50IHRv%0AIGluc2VydCBzdmcgaW50bwogICovCiAgbjMucHJvdG90eXBlLlNWR1NldHVwID0g%0AZnVuY3Rpb24oZG9tVGFyZ2V0KSB7CiAgICB2YXIgbjMgPSB0aGlzOwoKICAgICQo%0AZG9tVGFyZ2V0KS5yZXNpemUoZnVuY3Rpb24obikgeyAKICAgICAgbjMucmVzaXpl%0AR3JhcGgobik7CiAgICB9KTsKICAgICQod2luZG93KS5yZXNpemUoZnVuY3Rpb24o%0AbikgeyAKICAgICAgbjMucmVzaXplR3JhcGgobik7CiAgICB9KTsKIAogICAgZG9t%0AVGFyZ2V0CiAgICAgIC5hcHBlbmQoJ2RpdicpLmF0dHIoJ2NsYXNzJywgJ2dyYXBo%0AJykKICAgICAgLmFwcGVuZCgic3ZnOnN2ZyIpCiAgICAgIC5hcHBlbmQoImRlZnMi%0AKQoKICAgIHZhciBzdmcgPSBkb21UYXJnZXQuc2VsZWN0KCdzdmcnKQogICAgICAu%0AYXBwZW5kKCdnJykKCiAgICB2YXIgZHJhZ0V2ZW50OwogICAgdmFyIHJlY3QgPSBz%0AdmcuYXBwZW5kKCJyZWN0IikKICAgICAgLmF0dHIoJ2NsYXNzJywgJ2JhY2tncm91%0AbmQnKQogICAgICAuc3R5bGUoImZpbGwiLCAibm9uZSIpCiAgICAgIC5zdHlsZSgi%0AcG9pbnRlci1ldmVudHMiLCAiYWxsIikKICAgICAgLm9uKCdtb3VzZWRvd24nLCBm%0AdW5jdGlvbigpIHsgCiAgICAgICAgZHJhZ0V2ZW50ID0gZDMuZXZlbnQ7CiAgICAg%0AIH0pCiAgICAgIC5vbignbW91c2V1cCcsIGZ1bmN0aW9uKCkgeyAKICAgICAgICBp%0AZiAoTWF0aC5hYnMoZHJhZ0V2ZW50LnBhZ2VYIC0gZDMuZXZlbnQucGFnZVgpIDwg%0ANSAmJiBNYXRoLmFicyhkcmFnRXZlbnQucGFnZVkgLSBkMy5ldmVudC5wYWdlWSkg%0APCA1KSB7CiAgICAgICAgICBuMy5oaWRlVG9vbHRpcCgpOwogICAgICAgICAgbjMu%0AdW5TZWxlY3ROZXR3b3JrKCk7CiAgICAgICAgfQogICAgICB9KQoKICAgIG4zLmNv%0AbnRhaW5lciA9IHN2Zy5hcHBlbmQoImciKQogICAgICAuYXR0cignY2xhc3MnLCAn%0AY29udGFpbmVyJykKICAgIG4zLmNvbnRhaW5lci5hcHBlbmQoJ2cnKS5hdHRyKCdj%0AbGFzcycsICdlZGdlcycpOwogICAgbjMuY29udGFpbmVyLmFwcGVuZCgnZycpLmF0%0AdHIoJ2NsYXNzJywgJ25vZGVzJyk7CiAgICBuMy5jb250YWluZXIuYXBwZW5kKCdn%0AJykuYXR0cignY2xhc3MnLCAnbGFiZWxzJyk7CiAgICBuMy5jb250YWluZXIuYXBw%0AZW5kKCdyZWN0JykuYXR0cignY2xhc3MnLCAnc2NyZWVuJyk7CiAgICBuMy5jb250%0AYWluZXIuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAnZWRnZXNfc2VsZWN0ZWQn%0AKTsKICAgIG4zLmNvbnRhaW5lci5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsICdu%0Ab2Rlc19zZWxlY3RlZCcpOwogICAgbjMuY29udGFpbmVyLmFwcGVuZCgnZycpLmF0%0AdHIoJ2NsYXNzJywgJ2xhYmVsc19zZWxlY3RlZCcpOwoKICAgIHN2Zy5hcHBlbmQo%0AJ2cnKS5hdHRyKCdjbGFzcycsICdtYWluJykuYXBwZW5kKCd0ZXh0Jyk7CiAgICBz%0AdmcuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAneGxhYicpLmFwcGVuZCgndGV4%0AdCcpOwoKICAgIHN2Zy5vbignbW91c2Vkb3duJywgZnVuY3Rpb24oKSB7CiAgICAg%0AIHN2Zy5jbGFzc2VkKHsnZHJhZ2dpbmcnOiB0cnVlfSkKICAgIH0pCiAgICBzdmcu%0Ab24oJ21vdXNldXAnLCBmdW5jdGlvbigpIHsKICAgICAgc3ZnLmNsYXNzZWQoeydk%0AcmFnZ2luZyc6IGZhbHNlfSkKICAgIH0pCgogICAgbjMuem9vbSA9IGQzLmJlaGF2%0AaW9yLnpvb20oKQogICAgICAuc2NhbGVFeHRlbnQoWy41LCAxMF0pCiAgICAgIC5v%0Abigiem9vbSIsIGZ1bmN0aW9uIHpvb21lZCgpIHsKICAgICAgICBuMy5jb250YWlu%0AZXIuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgiICsgZDMuZXZlbnQudHJh%0AbnNsYXRlICsgIilzY2FsZSgiICsgZDMuZXZlbnQuc2NhbGUgKyAiKSIpOwogICAg%0AICAgIG4zLmN0bSA9IG4zLmNvbnRhaW5lci5ub2RlKCkuZ2V0U2NyZWVuQ1RNKCk7%0ACiAgICAgICAgbjMubW92ZVRvb2x0aXAoKTsKICAgICAgfSkKICAgIHN2Zy5jYWxs%0AKG4zLnpvb20pCiAgfQoKICAvKiogc2V0cyBwb3NpdGlvbmluZyBvbiBzdmcgZWxl%0AbWVudHMgYmFzZWQgb24gY3VycmVudCBET00gY29udGFpbmVyIHNpemUgYW5kIHNl%0AdHMgZGF0YSBzY2FsaW5nIGZhY3RvcnMgYWNjb3JkaW5nbHkgKi8KICBuMy5wcm90%0Ab3R5cGUudXBkYXRlRGltZW5zaW9ucyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIG4z%0AID0gdGhpczsKICAgIHZhciBkaXZfd2lkdGggPSBuMy5kb21UYXJnZXQubm9kZSgp%0ALm9mZnNldFdpZHRoCiAgICB2YXIgZGl2X2hlaWdodCA9IG4zLmRvbVRhcmdldC5u%0Ab2RlKCkub2Zmc2V0SGVpZ2h0IC0gJChuMy5kb21UYXJnZXQuc2VsZWN0KCcuY29u%0AdHJvbHMnKS5ub2RlKCkpLm91dGVySGVpZ2h0KHRydWUpOwoKICAgIHZhciB4bGFi%0AID0gbjMudGltZUluZGV4W24zLmN1cnJUaW1lXS5yZW5kZXJEYXRhLmdyYXBoLnhs%0AYWI7CiAgICB2YXIgbWFpbiA9IG4zLnRpbWVJbmRleFtuMy5jdXJyVGltZV0ucmVu%0AZGVyRGF0YS5ncmFwaC5tYWluOwogICAgdmFyIHhsYWJTaXplID0gcGFyc2VGbG9h%0AdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShuMy5kb21UYXJnZXQuc2VsZWN0KCcu%0AeGxhYicpLm5vZGUoKSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnZm9udC1zaXpl%0AJykpOwogICAgdmFyIG1haW5TaXplID0gcGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29t%0AcHV0ZWRTdHlsZShuMy5kb21UYXJnZXQuc2VsZWN0KCcubWFpbicpLm5vZGUoKSwg%0AbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnZm9udC1zaXplJykpOwogICAgdmFyIG1h%0AaW5NYXJnaW4gPSAwOwogICAgdmFyIHhsYWJNYXJnaW4gPSAwOwoKICAgIGlmICh4%0AbGFiKSB7CiAgICAgIHhsYWJNYXJnaW4gPSB4bGFiU2l6ZSooeGxhYi5sZW5ndGgr%0AMSkqMS4yOwogICAgfSAKICAgIGlmIChtYWluKSB7CiAgICAgIG1haW5NYXJnaW4g%0APSBtYWluU2l6ZSoobWFpbi5sZW5ndGgrMSkqMS4yOwogICAgfSAKICAgIAogICAg%0AdmFyIG1hcmdpbiA9IHsKICAgICAgeDogbjMub3B0aW9ucy5tYXJnaW4ueCwKICAg%0AICAgeTogbjMub3B0aW9ucy5tYXJnaW4ueQogICAgfQogICAgaWYgKGRpdl93aWR0%0AaCA+IGRpdl9oZWlnaHQpIHsgCiAgICAgIG1hcmdpbi54ID0gKGRpdl93aWR0aCAt%0AIGRpdl9oZWlnaHQpLzIKICAgIH0gZWxzZSB7CiAgICAgIG1hcmdpbi55ID0gKGRp%0Adl9oZWlnaHQgLSBkaXZfd2lkdGgpLzIKICAgIH0KCiAgICB2YXIgd2lkdGggPSBk%0AaXZfd2lkdGggLSAobWFyZ2luLngqMik7CiAgICB2YXIgaGVpZ2h0ID0gZGl2X2hl%0AaWdodCAtIChtYXJnaW4ueSoyKTsKCiAgICBuMy5kb21UYXJnZXQuc2VsZWN0QWxs%0AKCcuZ3JhcGg+c3ZnLCAuYmFja2dyb3VuZCwgLnNjcmVlbicpCiAgICAgIC5hdHRy%0AKHsKICAgICAgICB3aWR0aDogd2lkdGggKyBtYXJnaW4ueCAqIDIsCiAgICAgICAg%0AaGVpZ2h0OiBoZWlnaHQgKyBtYXJnaW4ueSAqIDIKICAgICAgfSkKICAgIAogICAg%0ALy9yZXNldCBoZWlnaHQgaW5jbHVkaW5nIG1haW4gJiB4bGFiIGZvciBncmFwaCBj%0Ab250YWluZXIgdHJhbnNsYXRpb24KICAgIGhlaWdodCA9IGhlaWdodCAtIG1haW5N%0AYXJnaW4gLSB4bGFiTWFyZ2luOwoKICAgIG4zLmNvbnRhaW5lci5hdHRyKCJ0cmFu%0Ac2Zvcm0iLCAidHJhbnNsYXRlKCIgKyBtYXJnaW4ueCArICIsIiArIChtYXJnaW4u%0AeSttYWluTWFyZ2luKSArICIpIik7CgogICAgdmFyIGNlbnRlciA9IG1hcmdpbi54%0AICsgd2lkdGgvMjsKICAgIG4zLmRvbVRhcmdldC5zZWxlY3QoJy54bGFiJykuYXR0%0AcigndHJhbnNmb3JtJywgInRyYW5zbGF0ZSgiK2NlbnRlcisiLCIrKGRpdl9oZWln%0AaHQtbWFyZ2luLnkpKyIpIikKICAgIG4zLmRvbVRhcmdldC5zZWxlY3QoJy5tYWlu%0AJykuYXR0cigndHJhbnNmb3JtJywgInRyYW5zbGF0ZSgiK2NlbnRlcisiLCIrKG1h%0Acmdpbi55K21haW5TaXplKSsiKSIpCgogICAgdmFyIHBpeGVsU3BhY2UgPSBoZWln%0AaHQgPiB3aWR0aCA/IHdpZHRoIDogaGVpZ2h0OwogICAgbjMuYmFzZU5vZGVTaXpl%0AID0gcGl4ZWxTcGFjZSAqIG4zLm9wdGlvbnMubm9kZVNpemVGYWN0b3I7CgogICAg%0ALy9zZXQgdGhlIFggYW5kIFkgc2NhbGVzCiAgICBuMy54U2NhbGUgPSBkMy5zY2Fs%0AZS5saW5lYXIoKQogICAgICAuZG9tYWluKFtuMy50aW1lSW5kZXhbMF0ucmVuZGVy%0ARGF0YS5ncmFwaC54bGltWzBdLG4zLnRpbWVJbmRleFswXS5yZW5kZXJEYXRhLmdy%0AYXBoLnhsaW1bMV1dKQogICAgICAucmFuZ2UoWzAsIHBpeGVsU3BhY2VdKTsKCiAg%0AICBuMy55U2NhbGUgPSBkMy5zY2FsZS5saW5lYXIoKQogICAgICAuZG9tYWluKFtu%0AMy50aW1lSW5kZXhbMF0ucmVuZGVyRGF0YS5ncmFwaC55bGltWzBdLG4zLnRpbWVJ%0AbmRleFswXS5yZW5kZXJEYXRhLmdyYXBoLnlsaW1bMV1dKQogICAgICAucmFuZ2Uo%0AW3BpeGVsU3BhY2UsIDBdKTsKCiAgICAvL3Jlc2V0IHpvb20gdHJhbnNsYXRlIGJh%0Ac2VkIG9uIG1hcmdpbnMKICAgIG4zLnpvb20udHJhbnNsYXRlKFttYXJnaW4ueCwg%0AbWFyZ2luLnkrbWFpbk1hcmdpbl0pCgogICAgLy9DYWNoZSBoZWlnaHQgYW5kIG9m%0AZnNldCB0byB1c2UgZm9yIHRvb2x0aXAgbW92ZW1lbnQKICAgIG4zLmhlaWdodCA9%0AIG4zLmRvbVRhcmdldC5zZWxlY3QoJy5ncmFwaCcpLm5vZGUoKS5vZmZzZXRIZWln%0AaHQKICAgIG4zLm9mZnNldCA9ICQobjMuZG9tVGFyZ2V0LnNlbGVjdCgnLmdyYXBo%0AJykubm9kZSgpKS5vZmZzZXQoKTsKICAgIG4zLmN0bSA9IG4zLmNvbnRhaW5lci5u%0Ab2RlKCkuZ2V0U2NyZWVuQ1RNKCk7CiAgfQogIAogIC8qKiBjcmVhdGVzIHRoZSBv%0AcHRpb25hbCBkYXRhQ2hvb3NlciBlbGVtZW50IHRvIGJlIHVzZWQgZm9yIHNsZWN0%0AaW5nIGFtb25nIG11bHRpcGxlIEpTT04gZmlsZXMgZm9yIGRlYnVnZ2luZyAqLwog%0AIG4zLnByb3RvdHlwZS5jcmVhdGVEYXRhQ2hvb3NlciA9IGZ1bmN0aW9uKCkgewog%0AICAgdmFyIG4zID0gdGhpczsKCiAgICB2YXIgZGl2ID0gbjMuZG9tVGFyZ2V0LmFw%0AcGVuZCgnZGl2JykuYXR0cignY2xhc3MnLCAnZGF0YV9jaG9vc2VyX2NvbnRhaW5l%0AcicpCiAgICBkaXYuYXBwZW5kKCdzZWxlY3QnKS5hdHRyKCdjbGFzcycsICdkYXRh%0AX2Nob29zZXInKQogICAgZGl2LmFwcGVuZCgnYScpLmF0dHIoeydjbGFzcyc6ICd2%0AaWRlb19saW5rJywgJ3RhcmdldCc6ICdfYmxhbmsnfSkuaHRtbCgnVmlkZW8nKTsK%0ACiAgICB2YXIgc2V0VmlkTGluayA9IGZ1bmN0aW9uKHVybCkgewogICAgICBkaXYu%0Ac2VsZWN0KCcudmlkZW9fbGluaycpLmF0dHIoJ2hyZWYnLCB1cmwucmVwbGFjZSgn%0ALmpzb24nLCAnLm1wNCcpKQogICAgfQogICAgJC5nZXQobjMub3B0aW9ucy5kYXRh%0AQ2hvb3NlckRpciwgZnVuY3Rpb24oZGF0YSl7CiAgICAgIGRpdi5zZWxlY3QoJy5k%0AYXRhX2Nob29zZXInKS5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7CiAgICAgICAg%0AdmFyIHVybCA9ICQodGhpcykudmFsKCk7CiAgICAgICAgbjMubG9hZERhdGEodXJs%0AKTsKICAgICAgICBzZXRWaWRMaW5rKHVybCkKICAgICAgfSkKICAgICAgdmFyIG1h%0AdGNoZXMgPSBkYXRhLm1hdGNoKC88dGQ+PGEgaHJlZj0iW14iXSoiL2cpOwogICAg%0AICAkLmVhY2gobWF0Y2hlcywgZnVuY3Rpb24oaSwgbSkgewogICAgICAgIHZhciB1%0AcmwgPSBtLm1hdGNoKC9ocmVmPSIoW14iXSopIi8pWzFdOwogICAgICAgIGlmICh1%0AcmwubWF0Y2goLy5qc29uJC8pKSB7CiAgICAgICAgICBkaXYuc2VsZWN0KCcuZGF0%0AYV9jaG9vc2VyJykuYXBwZW5kKCdvcHRpb24nKS5hdHRyKCd2YWx1ZScsIG4zLm9w%0AdGlvbnMuZGF0YUNob29zZXJEaXIrdXJsKS5odG1sKHVybCk7CiAgICAgICAgfQog%0AICAgICAgIGlmIChpID09IDEpIHsKICAgICAgICAgIHNldFZpZExpbmsodXJsKTsK%0AICAgICAgICB9CiAgICAgIH0pCiAgICB9KQogIH0KICAKICAvKiogY3JlYXRlcyB0%0AaGUgb3B0aW9uYWwgbWVudSBlbGVtZW50IHRvIGJlIHVzZWQgZm9yIGNvbnRyb2xs%0AaW5nIHNldHRpbmdzIGFuZCBkaXNwbGF5aW5nICdhYm91dCcgbGluayAqLwogIG4z%0ALnByb3RvdHlwZS5jcmVhdGVNZW51ID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgbjMg%0APSB0aGlzOwogICAgaWYgKGQzLnNlbGVjdCgnI25kdHYtc3ZnLW1lbnUtaWNvbnMn%0AKS5lbXB0eSgpKSB7CiAgICAgICQoJ2JvZHknKS5wcmVwZW5kKAogICAgICAnPHN2%0AZyBpZD0ibmR0di1zdmctbWVudS1pY29ucyIgZGlzcGxheT0ibm9uZSIgdmVyc2lv%0Abj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5z%0AOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTc2%0AIiBoZWlnaHQ9IjMyIiB2aWV3Qm94PSIwIDAgMTc2IDMyIj4nKwogICAgICAnICA8%0AZGVmcz4nKwogICAgICAnICAgIDxnIGlkPSJpY29uLWxpc3QiPjxwYXRoIGQ9Ik0y%0ANS42IDE0LjRoLTE5LjJjLTAuODgzIDAtMS42IDAuNzE3LTEuNiAxLjZzMC43MTcg%0AMS42IDEuNiAxLjZoMTkuMmMwLjg4NSAwIDEuNi0wLjcxNyAxLjYtMS42cy0wLjcx%0ANS0xLjYtMS42LTEuNnpNNi40IDExLjJoMTkuMmMwLjg4NSAwIDEuNi0wLjcxNyAx%0ALjYtMS42cy0wLjcxNS0xLjYtMS42LTEuNmgtMTkuMmMtMC44ODMgMC0xLjYgMC43%0AMTctMS42IDEuNnMwLjcxNyAxLjYgMS42IDEuNnpNMjUuNiAyMC44aC0xOS4yYy0w%0ALjg4MyAwLTEuNiAwLjcxNS0xLjYgMS42czAuNzE3IDEuNiAxLjYgMS42aDE5LjJj%0AMC44ODUgMCAxLjYtMC43MTUgMS42LTEuNnMtMC43MTUtMS42LTEuNi0xLjZ6Ij48%0AL3BhdGg+PC9nPicrCiAgICAgICcgIDwvZGVmcz4nKwogICAgICAnPC9zdmc+Jyk7%0ACiAgICB9CiAgICB2YXIgZGl2ID0gbjMuZG9tVGFyZ2V0LnNlbGVjdCgnLmdyYXBo%0AJykuYXBwZW5kKCdkaXYnKS5hdHRyKCdjbGFzcycsICduZHR2LW1lbnUtY29udGFp%0AbmVyJyk7CiAgICBkaXYuaHRtbCgKICAgICAgIjxkaXYgY2xhc3M9J25kdHYtbWVu%0AdS1pY29uJz4iKwogICAgICAiIDxzdmcgY2xhc3M9J2ljb24gbWVudS1jb250cm9s%0AJyB2aWV3Qm94PScwIDAgMzIgMzInPjx1c2UgeGxpbms6aHJlZj0nI2ljb24tbGlz%0AdCc+PC91c2U+PC9zdmc+IisKICAgICAgIjwvZGl2PiIrCiAgICAgICI8ZGl2IGNs%0AYXNzPSduZHR2LW1lbnUnPjwvZGl2PiIKICAgICkKICAgIHZhciBtZW51ID0gbjMu%0AZG9tVGFyZ2V0LnNlbGVjdCgnLm5kdHYtbWVudScpOwoKICAgIGlmIChuMy5vcHRp%0Ab25zLmR1cmF0aW9uQ29udHJvbCkgeyAKICAgICAgdmFyIGR1cmF0aW9uQ29udHJv%0AbCA9IG1lbnUuYXBwZW5kKCdkaXYnKS5hdHRyKCdjbGFzcycsICdtZW51LWl0ZW0g%0AZHVyYXRpb25Db250cm9sQ29udGFpbmVyJyk7CiAgICAgIGR1cmF0aW9uQ29udHJv%0AbC5hcHBlbmQoJ3NwYW4nKS5hdHRyKCdjbGFzcycsICdtZW51LWxhYmVsJykuaHRt%0AbCgnQW5pbWF0aW9uIER1cmF0aW9uJyk7CiAgICAgIHZhciBkdXJhdGlvblNsaWRl%0AciA9IGQzLnNsaWRlcigpLm1pbigwKS5tYXgoOCkuYXhpcyhuZXcgZDMuc3ZnLmF4%0AaXMoKS50aWNrcyg1KSkudmFsdWUobjMub3B0aW9ucy5hbmltYXRpb25EdXJhdGlv%0Abi8xMDAwKTsKICAgICAgZHVyYXRpb25Db250cm9sLmFwcGVuZCgnZGl2JykuYXR0%0AcignY2xhc3MnLCAnZHVyYXRpb25Db250cm9sJykuY2FsbChkdXJhdGlvblNsaWRl%0AcikKICAgICAgZHVyYXRpb25TbGlkZXIub24oJ3NsaWRlJywgZnVuY3Rpb24oZXZ0%0ALCB2YWx1ZSl7CiAgICAgICAgbjMub3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbiA9%0AIHZhbHVlKjEwMDA7CiAgICAgICAgaWYobjMub3B0aW9ucy5zbGlkZXIpIHsKICAg%0AICAgICAgIG4zLnNsaWRlci5hbmltYXRlKG4zLm9wdGlvbnMuYW5pbWF0aW9uRHVy%0AYXRpb24pCiAgICAgICAgfQogICAgICB9KQogICAgfQoKICAgIG1lbnUuYXBwZW5k%0AKCJkaXYiKS5hdHRyKCdjbGFzcycsICdtZW51LWl0ZW0nKS5odG1sKCI8YSBocmVm%0APSdodHRwczovL2dpdGh1Yi5jb20vbWljaGFsZ20vbmR0di1kMy9ibG9iL21hc3Rl%0Aci9SRUFETUUubWQnIHRhcmdldD0nX2JsYW5rJz5BYm91dCBORFRWLUQzPC9hPjwv%0AZGl2PiIpOwogICAgbjMuZG9tVGFyZ2V0LnNlbGVjdCgnLm5kdHYtbWVudS1pY29u%0AJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICQobWVudS5ub2RlKCkp%0ALmZhZGVUb2dnbGUoMjAwKTsKICAgICAgJCh0aGlzKS50b2dnbGVDbGFzcygnbWVu%0AdS1hY3RpdmUnKQogICAgfSkKICB9CgogIC8qKiBjcmVhdGVzIHRoZSBvcHRpb25h%0AbCBwbGF5IGNvbnRyb2xzIGRpdiB1c2luZyBzdmcgaWNvbnMgYW5kIGRlZmluZXMg%0AdGhlIGF0dGFjaGVkIGV2ZW50cyAqLwogIG4zLnByb3RvdHlwZS5jcmVhdGVQbGF5%0AQ29udHJvbHMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBuMyA9IHRoaXM7CgogICAg%0ALy9kZWZpbmUgU1ZHIGljb25zIHRvIGJlIHVzZWQgaW4gdGhlIHBsYXkgY29udHJv%0AbGxlcgogICAgaWYgKGQzLnNlbGVjdCgnI25kdHYtc3ZnLWljb25zJykuZW1wdHko%0AKSkgewogICAgICAkKCdib2R5JykucHJlcGVuZCgKICAgICAgJzxzdmcgaWQ9Im5k%0AdHYtc3ZnLWljb25zIiBkaXNwbGF5PSJub25lIiB2ZXJzaW9uPSIxLjEiIHhtbG5z%0APSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6%0ALy93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIxNzYiIGhlaWdodD0iMzIi%0AIHZpZXdCb3g9IjAgMCAxNzYgMzIiPicrCiAgICAgICcgIDxkZWZzPicrCiAgICAg%0AICcgICAgPGcgaWQ9Imljb24tcGxheSI+PHBhdGggY2xhc3M9InBhdGgxIiBkPSJN%0AMjYuNzE3IDE1LjE3OWwtMTMuNjk4LTguNDg2Yy0wLjk5OC0wLjY1NC0xLjgxNC0w%0ALjE3MS0xLjgxNCAxLjA3MnYxNi40NzRjMCAxLjI0MyAwLjgxOCAxLjcyNSAxLjgx%0ANCAxLjA3MGwxMy42OTktOC40ODZjMCAwIDAuNDg2LTAuMzQyIDAuNDg2LTAuODIy%0ALTAuMDAyLTAuNDc4LTAuNDg4LTAuODIxLTAuNDg4LTAuODIxeiI+PC9wYXRoPjwv%0AZz4nKwogICAgICAnICAgIDxnIGlkPSJpY29uLXBhdXNlIj48cGF0aCBjbGFzcz0i%0AcGF0aDEiIGQ9Ik0yMS42IDQuOGMtMS41OSAwLTIuODggMC40OS0yLjg4IDIuMDgw%0AdjE4LjI0YzAgMS41OSAxLjI5IDIuMDgwIDIuODggMi4wODBzMi44OC0wLjQ5IDIu%0AODgtMi4wODB2LTE4LjI0YzAtMS41OS0xLjI5LTIuMDgwLTIuODgtMi4wODB6TTEw%0ALjQgNC44Yy0xLjU5IDAtMi44OCAwLjQ5LTIuODggMi4wODB2MTguMjRjMCAxLjU5%0AIDEuMjkgMi4wODAgMi44OCAyLjA4MHMyLjg4LTAuNDkgMi44OC0yLjA4MHYtMTgu%0AMjRjMC0xLjU5LTEuMjktMi4wODAtMi44OC0yLjA4MHoiPjwvcGF0aD48L2c+JysK%0AICAgICAgJyAgICA8ZyBpZD0iaWNvbi1maXJzdCI+PHBhdGggY2xhc3M9InBhdGgx%0AIiBkPSJNMTEuOTc2IDE2YzAgMC40MTMgMC40MTkgMC43MDcgMC40MTkgMC43MDds%0AMTEuNjQgNy4zMWMwLjg2MiAwLjU2NSAxLjU2NSAwLjE0OSAxLjU2NS0wLjkydi0x%0ANC4xOTVjMC0xLjA3MC0wLjcwMi0xLjQ4Ni0xLjU2NS0wLjkyMmwtMTEuNjQgNy4z%0AMTJjMCAwLjAwMi0wLjQxOSAwLjI5NC0wLjQxOSAwLjcwN3pNNi40IDguNTcxdjE0%0ALjg1OGMwIDEuNDIxIDAuOTc5IDEuODU2IDIuNCAxLjg1NnMyLjQtMC40MzUgMi40%0ALTEuODU0di0xNC44NTljMC0xLjQyMi0wLjk3OS0xLjg1OC0yLjQtMS44NThzLTIu%0ANCAwLjQzNy0yLjQgMS44NTh6Ij48L3BhdGg+PC9nPicrCiAgICAgICcgIDwvZGVm%0Acz4nKwogICAgICAnPC9zdmc+Jyk7CiAgICB9CiAgICB2YXIgZGl2ID0gbjMuZG9t%0AVGFyZ2V0LnNlbGVjdCgnLmNvbnRyb2xzJykuYXBwZW5kKCdkaXYnKS5hdHRyKCdj%0AbGFzcycsICdwbGF5LWNvbnRyb2wtY29udGFpbmVyJyk7CiAgICBkaXYuaHRtbCgK%0AICAgICAgIjxkaXYgY2xhc3M9J3N0ZXAtYmFjay1jb250cm9sJz48c3ZnIGNsYXNz%0APSdpY29uJyB3aWR0aD0nMzInIGhlaWdodD0nMzInIHZpZXdCb3g9JzAgMCAzMiAz%0AMic+PHVzZSB4bGluazpocmVmPScjaWNvbi1maXJzdCc+PC91c2U+PC9zdmc+PC9k%0AaXY+IisKICAgICAgIjxkaXYgY2xhc3M9J3BsYXktYmFjay1jb250cm9sJz48c3Zn%0AIGNsYXNzPSdpY29uJyB3aWR0aD0nMzInIGhlaWdodD0nMzInIHZpZXdCb3g9JzAg%0AMCAzMiAzMic+PGcgdHJhbnNmb3JtPSdyb3RhdGUoMTgwLCAxNiwgMTYpJz48dXNl%0AIHhsaW5rOmhyZWY9JyNpY29uLXBsYXknPjwvdXNlPjwvZz48L3N2Zz48L2Rpdj4i%0AKwogICAgICAiPGRpdiBjbGFzcz0ncGF1c2UtY29udHJvbCc+PHN2ZyBjbGFzcz0n%0AaWNvbicgd2lkdGg9JzMyJyBoZWlnaHQ9JzMyJyB2aWV3Qm94PScwIDAgMzIgMzIn%0APjx1c2UgeGxpbms6aHJlZj0nI2ljb24tcGF1c2UnPjwvdXNlPjwvc3ZnPjwvZGl2%0APiIrCiAgICAgICI8ZGl2IGNsYXNzPSdwbGF5LWZvcndhcmQtY29udHJvbCc+PHN2%0AZyBjbGFzcz0naWNvbicgd2lkdGg9JzMyJyBoZWlnaHQ9JzMyJyB2aWV3Qm94PScw%0AIDAgMzIgMzInPjx1c2UgeGxpbms6aHJlZj0nI2ljb24tcGxheSc+PC91c2U+PC9z%0Admc+PC9kaXY+IisKICAgICAgIjxkaXYgY2xhc3M9J3N0ZXAtZm9yd2FyZC1jb250%0Acm9sJz48c3ZnIGNsYXNzPSdpY29uJyB3aWR0aD0nMzInIGhlaWdodD0nMzInIHZp%0AZXdCb3g9JzAgMCAzMiAzMic+PGcgdHJhbnNmb3JtPSdyb3RhdGUoMTgwLCAxNiwg%0AMTYpJz48dXNlIHhsaW5rOmhyZWY9JyNpY29uLWZpcnN0Jz48L3VzZT48L2c+PC9z%0Admc+PC9kaXY+IgogICAgKTsKCiAgICBkaXYuc2VsZWN0KCcuc3RlcC1iYWNrLWNv%0AbnRyb2wnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsgbjMuc3RlcEFuaW1hdGlv%0AbigxKTsgfSk7CiAgICBkaXYuc2VsZWN0KCcucGxheS1iYWNrLWNvbnRyb2wnKS5v%0AbignY2xpY2snLCBmdW5jdGlvbigpIHsgbjMucGxheUFuaW1hdGlvbigxKTsgfSk7%0ACiAgICBkaXYuc2VsZWN0KCcucGF1c2UtY29udHJvbCcpLm9uKCdjbGljaycsIGZ1%0AbmN0aW9uKCkgeyBuMy5lbmRBbmltYXRpb24oKTsgfSk7CiAgICBkaXYuc2VsZWN0%0AKCcucGxheS1mb3J3YXJkLWNvbnRyb2wnKS5vbignY2xpY2snLCBmdW5jdGlvbigp%0AIHsgbjMucGxheUFuaW1hdGlvbigpOyB9KTsKICAgIGRpdi5zZWxlY3QoJy5zdGVw%0ALWZvcndhcmQtY29udHJvbCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgeyBuMy5z%0AdGVwQW5pbWF0aW9uKCk7IH0pOwogIH0KICAKICAvKiogY3JlYXRlcyB0aGUgdGlt%0AZSBzbGlkZXIgY29udHJvbHMgYW5kIGRlZmluZXMgYXR0YWNoZWQgZXZlbnRzICov%0ACiAgbjMucHJvdG90eXBlLmNyZWF0ZVNsaWRlckNvbnRyb2wgPSBmdW5jdGlvbigp%0AIHsKICAgIHZhciBuMyA9IHRoaXM7CiAgICBuMy5kb21UYXJnZXQuc2VsZWN0KCcu%0AY29udHJvbHMnKS5hcHBlbmQoJ2RpdicpLmF0dHIoJ2NsYXNzJywgJ3NsaWRlci1j%0Ab250cm9sLWNvbnRhaW5lcicpLmFwcGVuZCgnZGl2JykuYXR0cignY2xhc3MnLCAn%0Ac2xpZGVyJyk7CiAgfQogCiAgLyoqIGxvYWQgYW5kIHByb2Nlc3MgdGhlIEpTT04g%0AZm9ybWF0dGVkIGRhdGEKICAqIEBwYXJhbSB7dXJsfEpTT059IC0gZWl0aGVyIGEg%0ATkRUVi1nZW5lcmF0ZWQgSlNPTiBvYmplY3QsIG9yIGEgVVJMIHBhdGggdG8gZmls%0AZSBjb250YWluaW5nIEpTT04gZGF0YQogICovCiAgbjMucHJvdG90eXBlLmxvYWRE%0AYXRhID0gZnVuY3Rpb24oZ3JhcGhEYXRhKSB7CiAgICB2YXIgbjMgPSB0aGlzOwog%0AICAgbjMuZW5kQW5pbWF0aW9uKCk7CiAgICBuMy5jdXJyVGltZSA9IDA7CiAgICBu%0AMy5zZWxlY3RlZE5ldHdvcmsgPSBudWxsOwogICAgbjMuc2VsZWN0ZWQgPSBudWxs%0AOwogICAgCiAgICB2YXIgcHJvY2Vzc0RhdGEgPSBmdW5jdGlvbihkYXRhKSB7CiAg%0AICAgIGNvbnNvbGUudGltZSgnbG9hZERhdGEnKTsKICAgICAgbjMuZ3JhcGggPSBk%0AYXRhLm5ldHdvcms7CiAgICAgIG4zLnRpbWVJbmRleCA9IGRhdGEucmVuZGVyOwog%0AICAgICBpZiAobjMub3B0aW9ucy5kYXRhQ2hvb3NlciAmJiAhICQuaXNQbGFpbk9i%0AamVjdChncmFwaERhdGEpKSB7CiAgICAgICAgJChuMy5kb21UYXJnZXQuc2VsZWN0%0AKCcuZGF0YV9jaG9vc2VyJykubm9kZSgpKS52YWwoZ3JhcGhEYXRhKTsKICAgICAg%0AICBuMy5kb21UYXJnZXQuc2VsZWN0KCcudmlkZW9fbGluaycpLmF0dHIoJ2hyZWYn%0ALCBncmFwaERhdGEucmVwbGFjZSgnLmpzb24nLCAnLm1wNCcpKQogICAgICB9CiAg%0AICAgIG4zLmNvbnRhaW5lci5zZWxlY3RBbGwoJy5lZGdlLCAubGFiZWwsIC5ub2Rl%0AJykucmVtb3ZlKCk7CgogICAgICBuMy5ub2RlQ29vcmRzID0ge307CgogICAgICAk%0ALmVhY2gobjMuZ3JhcGgudmFsLCBmdW5jdGlvbihpLCBuKSB7CiAgICAgICAgaWYg%0AKCEgJC5pc0VtcHR5T2JqZWN0KG4pKSB7CiAgICAgICAgICBuLmlkID0gaSsxOwog%0AICAgICAgIH0KICAgICAgICBuMy5ub2RlQ29vcmRzW24uaWRdID0gewogICAgICAg%0AICAgY29vcmQ6IFswLDBdLAogICAgICAgICAgYWN0aXZlOiBmYWxzZSwKICAgICAg%0AICAgIHNpemU6IDAsCiAgICAgICAgICBwb2ludHM6IFtdCiAgICAgICAgfQogICAg%0AICB9KQogICAgICAkLmVhY2gobjMuZ3JhcGgubWVsLCBmdW5jdGlvbihpLCBlKSB7%0ACiAgICAgICAgaWYgKCEgJC5pc0VtcHR5T2JqZWN0KGUpKSB7CiAgICAgICAgICBl%0ALmlkID0gaSsxOwogICAgICAgIH0KICAgICAgfSkKICAgICAgdmFyIHNsaWNlSW5m%0AbyA9IG4zLmdyYXBoLmdhbFsnc2xpY2UucGFyJ107CiAgICAgIAogICAgICBuMy5t%0AaW5UaW1lID0gc2xpY2VJbmZvLnN0YXJ0WzBdOwogICAgICBuMy5tYXhUaW1lID0g%0Ac2xpY2VJbmZvLmVuZFswXTsKICAgICAgbjMuaW50ZXJ2YWwgPSBzbGljZUluZm8u%0AaW50ZXJ2YWxbMF07CiAgICAgIHZhciB2YWxJbmRleCA9IHt9OwogICAgICAkLmVh%0AY2gobjMudGltZUluZGV4LCBmdW5jdGlvbihpLCB0KXsKICAgICAgICB2YWxJbmRl%0AeFt0LnN0YXJ0XSA9IGk7CiAgICAgICAgdC5yZW5kZXJEYXRhID0gbjMuZ2VuZXJh%0AdGVTbGljZVJlbmRlckRhdGEoaSk7CiAgICAgICAgZGVsZXRlIHQuZGF0YTsgLy9y%0AZW1vdmUgcmVkdW5kYW50IGRhdGEgdGhhdCB3ZSd2ZSBzdG9yZWQgaW4gcmVuZGVy%0ARGF0YQogICAgICB9KSAgICAgIAoKICAgICAgbjMudXBkYXRlRGltZW5zaW9ucygp%0AOwoKICAgICAgaWYobjMub3B0aW9ucy5zbGlkZXIpIHsKICAgICAgICB2YXIgc2xp%0AZGVyRGl2ID0gbjMuZG9tVGFyZ2V0LnNlbGVjdCgnLnNsaWRlcicpOwoKICAgICAg%0AICBzbGlkZXJEaXYuaHRtbCgnJyk7CgogICAgICAgIG4zLnNsaWRlciA9IGQzLnNs%0AaWRlcigpLmF4aXModHJ1ZSkuc3RlcChuMy5pbnRlcnZhbCk7CiAgICAgICAgbjMu%0Ac2xpZGVyLm1hcmdpbigzNSkKICAgICAgICBuMy5zbGlkZXIubWluKG4zLm1pblRp%0AbWUpCiAgICAgICAgbjMuc2xpZGVyLm1heChuMy5tYXhUaW1lK3NsaWNlSW5mb1sn%0AYWdncmVnYXRlLmR1ciddWzBdKQogICAgICAgIG4zLnNsaWRlci5hbmltYXRlKG4z%0ALm9wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb24pCiAgICAgICAgbjMuc2xpZGVyLnZh%0AbHVlKG4zLm1pblRpbWUpCiAgICAgICAgbjMuc2xpZGVyLmludGVydmFsKHNsaWNl%0ASW5mb1snYWdncmVnYXRlLmR1ciddWzBdKQogICAgICAgIG4zLnNsaWRlci5vbign%0Ac2xpZGUnLCBmdW5jdGlvbihleHQsIHZhbHVlKSB7CiAgICAgICAgICAvL0NoZWNr%0AIHRvIHNlZSBpZiBldmVudCBvcmlnaW5hdGVkIGZyb20gc2xpZGVyIGNvbnRyb2wg%0Ab3IgZWxzZXdoZXJlCiAgICAgICAgICB2YXIgZXZlbnQgPSBkMy5ldmVudDsKICAg%0AICAgICAgIGlmIChldmVudC50eXBlID09ICdkcmFnJyB8fCBkMy5zZWxlY3QoZXZl%0AbnQuY3VycmVudFRhcmdldCkuY2xhc3NlZCgnZDMtc2xpZGVyJykpIHsKICAgICAg%0AICAgICAgbjMuZW5kQW5pbWF0aW9uKCk7CiAgICAgICAgICAgIG4zLmFuaW1hdGVH%0AcmFwaChuMy5jdXJyVGltZSwgdmFsSW5kZXhbdmFsdWVdLCB0cnVlKTsKICAgICAg%0AICAgIH0KICAgICAgICB9KQogICAgICAgIAogICAgICAgIG4zLnNsaWRlci5vbign%0Ac2xpZGVlbmQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgIG4zLnNsaWRlci5hbmlt%0AYXRlKG4zLm9wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb24pOwogICAgICAgIH0pCiAg%0AICAgICAgc2xpZGVyRGl2Lm9uKCdtb3VzZWRvd24nLCBmdW5jdGlvbihlKSB7IAog%0AICAgICAgICAgbjMuc2xpZGVyLmFuaW1hdGUoMCk7CiAgICAgICAgfSkKCiAgICAg%0AICAgc2xpZGVyRGl2LmNhbGwobjMuc2xpZGVyKTsKICAgICAgfQogICAgICBjb25z%0Ab2xlLnRpbWVFbmQoJ2xvYWREYXRhJyk7CiAgICAgIGlmIChuMy5vcHRpb25zLmFu%0AaW1hdGVPbkxvYWQpIHsKICAgICAgICBuMy5wbGF5QW5pbWF0aW9uKCk7CiAgICAg%0AIH0gZWxzZSB7CiAgICAgICAgbjMudXBkYXRlR3JhcGgobjMub3B0aW9ucy5hbmlt%0AYXRpb25EdXJhdGlvbik7CiAgICAgIH0KICAgIH07CgogICAgaWYoJC5pc1BsYWlu%0AT2JqZWN0KGdyYXBoRGF0YSkpIHsKICAgICAgcHJvY2Vzc0RhdGEoZ3JhcGhEYXRh%0AKQogICAgfSBlbHNlIHsKICAgICAgJC5nZXRKU09OKGdyYXBoRGF0YSwgZnVuY3Rp%0Ab24oZGF0YSkgewogICAgICAgIHByb2Nlc3NEYXRhKGRhdGEpOwogICAgICB9KTsK%0AICAgIH0KICB9CgogIHZhciBjb2xvciA9IGQzLnNjYWxlLmNhdGVnb3J5MjAoKTsK%0ACiAgLyoqIEZvciBhIGdpdmVuIHRpbWUgc2xpY2UsIHByb2Nlc3MgdGltZUluZGV4%0AIGRhdGEgYW5kIGdlbmVyYXRlIHJlbmRlciBkYXRhLCBmaWxsaW5nIGluIGRlZmF1%0AbHRzIGFzIG5lY2Vzc2FyeQogICogQHBhcmFtIHtpbnRlZ2VyfSAtIHRoZSB0aW1l%0AIGluZGV4IHRvIHByb2Nlc3MKICAqIEBwcml2YXRlCiAgKi8KICBuMy5wcm90b3R5%0AcGUuZ2VuZXJhdGVTbGljZVJlbmRlckRhdGEgPSBmdW5jdGlvbih0aW1lKSB7CiAg%0AICB2YXIgbjMgPSB0aGlzOwoKICAgIHZhciBzbGljZVJlbmRlckRhdGEgPSB7CiAg%0AICAgIGdyYXBoOiB7fSwKICAgICAgbm9kZToge30sCiAgICAgIGVkZ2U6IHt9CiAg%0AICB9OwoKICAgIHZhciBkYXRhID0gbjMudGltZUluZGV4W3RpbWVdLmRhdGE7Cgog%0AICAgJC5lYWNoKFsnZ3JhcGgnLCAnbm9kZScsICdlZGdlJ10sIGZ1bmN0aW9uKGks%0AIHR5cGUpIHsKICAgICAgdmFyIHNvdXJjZUxpc3QgPSBbXTsKICAgICAgaWYgKHR5%0AcGUgPT0gJ2dyYXBoJykgewogICAgICAgIHNvdXJjZUxpc3QgPSBbbjMuZ3JhcGgu%0AZ2FsXTsKICAgICAgfSBlbHNlIGlmICh0eXBlID09ICdub2RlJykgewogICAgICAg%0AIHNvdXJjZUxpc3QgPSBuMy5ncmFwaC52YWw7CiAgICAgIH0gZWxzZSB7CiAgICAg%0AICAgc291cmNlTGlzdCA9IG4zLmdyYXBoLm1lbDsKICAgICAgfQoKICAgICAgJC5l%0AYWNoKHNvdXJjZUxpc3QsIGZ1bmN0aW9uKGksIGl0ZW0pIHsKICAgICAgICB2YXIg%0AaWQgPTA7CiAgICAgICAgdmFyIHByb3BlcnR5SW5kZXg7CiAgICAgICAgdmFyIGl0%0AZW1Qcm9wZXJ0aWVzID0ge307CgogICAgICAgIGlmICh0eXBlICE9ICdncmFwaCcp%0AIHsKICAgICAgICAgIGlkID0gaXRlbS5pZDsKICAgICAgICAgIHByb3BlcnR5SW5k%0AZXggPSBkYXRhLmFjdGl2ZVt0eXBlKydzJ11baWRdOwogICAgICAgIH0KCiAgICAg%0AICAgaWYgKHR5cGUgPT0gJ2dyYXBoJyB8fCBwcm9wZXJ0eUluZGV4ICE9PSB1bmRl%0AZmluZWQpIHsKICAgICAgICAgIGl0ZW1Qcm9wZXJ0aWVzLmlkID0gaWQ7CiAgICAg%0AICAgICAkLmVhY2gobmR0dlByb3BlcnRpZXNbdHlwZV0sIGZ1bmN0aW9uKHByb3Bl%0AcnR5LCBkZWYpIHsKICAgICAgICAgICAgdmFyIGxvb2t1cCA9IHByb3BlcnR5SW5k%0AZXg7CiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRlZjsKCiAgICAgICAgICAgIC8v%0ASWYgdGhlIHByb3BlcnR5IGxpc3QgaGFzIG9ubHkgb25lIHZhbHVlLCB3ZSBhcHBs%0AeSBpdCB0byBhbGwgaXRlbXMKICAgICAgICAgICAgaWYodHlwZW9mIGRhdGFbcHJv%0AcGVydHldICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhW3Byb3BlcnR5XS5sZW5ndGgg%0APT0gMSkgewogICAgICAgICAgICAgIGxvb2t1cCA9IDA7CiAgICAgICAgICAgIH0K%0AICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW3Byb3BlcnR5XSAhPT0gJ3VuZGVm%0AaW5lZCcgJiYgZGF0YVtwcm9wZXJ0eV1bbG9va3VwXSAhPT0gdW5kZWZpbmVkKSB7%0ACiAgICAgICAgICAgICAgdmFsdWUgPSBkYXRhW3Byb3BlcnR5XVtsb29rdXBdOwog%0AICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAocHJvcGVydHkgPT0gJ21haW4nIHx8%0AIHByb3BlcnR5ID09ICd4bGFiJykpIHsKICAgICAgICAgICAgICAgIHZhbHVlID0g%0AdmFsdWUuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgICAgfSBlbHNlIGlmICghIHZh%0AbHVlICYmIHByb3BlcnR5ID09ICdjb29yZCcpIHsKICAgICAgICAgICAgICAgIGNv%0AbnNvbGUubG9nKCdtaXNzaW5nIGNvb3JkaW5hdGVzIGZvciBub2RlICcraWQrICcg%0AYXQgdGltZSAnK3RpbWUrJyAoJytuMy50aW1lSW5kZXhbdGltZV0uc3RhcnQrJy0n%0AK24zLnRpbWVJbmRleFt0aW1lXS5lbmQrJyknKTsKICAgICAgICAgICAgICB9CiAg%0AICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAnZ3JhcGgnICYmIHR5cGVvZiBk%0AYXRhW3Byb3BlcnR5XSAhPT0gJ3VuZGVmaW5lZCcpIHsgLy9ncmFwaCBwcm9wZXJ0%0AaWVzIGdldCBhcHBsaWVkIGRpcmVjdGx5CiAgICAgICAgICAgICAgdmFsdWUgPSBk%0AYXRhW3Byb3BlcnR5XTsKICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eSA9%0APSAnbGFiZWwnICYmIHNsaWNlUmVuZGVyRGF0YS5ncmFwaC5kaXNwbGF5bGFiZWxz%0AKSB7CiAgICAgICAgICAgICAgdmFsdWUgPSBpZDsKICAgICAgICAgICAgfQogICAg%0AICAgICAgICBpZiAodmFsdWUgJiYgJC50eXBlKHZhbHVlKSA9PT0gJ3N0cmluZycg%0AJiYgdmFsdWUubWF0Y2goJ3JnYmEnKSkgewogICAgICAgICAgICAgIHZhciByZ2Jh%0AID0gdmFsdWUubWF0Y2goL15yZ2JhXCgoLiopLCA/KC4qKVwpJC8pOwogICAgICAg%0AICAgICAgIGlmIChyZ2JhKSB7CiAgICAgICAgICAgICAgICB2YWx1ZSA9ICJyZ2Io%0AIityZ2JhWzFdKyIpIjsKICAgICAgICAgICAgICAgIHZhciBvcGFjaXR5UHJvcCA9%0AIHByb3BlcnR5KyIuc3Ryb2tlLW9wYWNpdHkiOwogICAgICAgICAgICAgICAgaWYg%0AKHByb3BlcnR5ID09ICd2ZXJ0ZXguY29sJyB8fCBwcm9wZXJ0eSA9PSAnYmcnIHx8%0AIHByb3BlcnR5ID09ICdsYWJlbC5jb2wnKSB7CiAgICAgICAgICAgICAgICAgIG9w%0AYWNpdHlQcm9wID0gcHJvcGVydHkrIi5maWxsLW9wYWNpdHkiOwogICAgICAgICAg%0AICAgICAgfQogICAgICAgICAgICAgICAgaXRlbVByb3BlcnRpZXNbb3BhY2l0eVBy%0Ab3BdID0gcmdiYVsyXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAg%0AICAgICAgICAgLy8gaWYgKHByb3BlcnR5ID09ICdlZGdlLmx3ZCcpIHsKICAgICAg%0AICAgICAgICAvLyB2YWx1ZSA9IGlkKjAuMjsKICAgICAgICAgICAgLy8gfQogICAg%0AICAgICAgICAvLyBpZiAocHJvcGVydHkgPT0gJ2VkZ2UuY29sJyB8fCBwcm9wZXJ0%0AeSA9PSAndmVydGV4LmNvbCcgfHwgcHJvcGVydHkgPT0gJ2xhYmVsLmNvbCcpIHsK%0AICAgICAgICAgICAgLy8gICB2YWx1ZSA9IHR5cGUgPT0gJ2VkZ2UnID8gY29sb3Io%0AdGltZSkgOiBjb2xvcih0aW1lKzEpOwogICAgICAgICAgICAvLyB9CiAgICAgICAg%0AICAgIGl0ZW1Qcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IHZhbHVlOwogICAgICAgICAg%0AfSkKCiAgICAgICAgICBpZiAodHlwZSA9PSAnZWRnZScpIHsKICAgICAgICAgICAg%0AJC5lYWNoKFsnaW5sJywgJ291dGwnXSwgZnVuY3Rpb24oaSwgZGlyZWN0aW9uKSB7%0ACiAgICAgICAgICAgICAgdmFyIG90aGVyZGlyID0gZGlyZWN0aW9uID09ICdpbmwn%0AID8gJ291dGwnIDogJ2lubCc7CiAgICAgICAgICAgICAgaXRlbVByb3BlcnRpZXNb%0AZGlyZWN0aW9uXSA9IHsKICAgICAgICAgICAgICAgIGlkOiBpdGVtW2RpcmVjdGlv%0Abl1bMF0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc2xpY2VSZW5kZXJE%0AYXRhLm5vZGVbaXRlbVtkaXJlY3Rpb25dWzBdXS5saW5rc1tpdGVtW290aGVyZGly%0AXVswXV0gPSBpZDsKICAgICAgICAgICAgfSk7ICAgICAgCiAgICAgICAgICB9IGVs%0Ac2UgaWYgKHR5cGUgPT0gJ25vZGUnKSB7CiAgICAgICAgICAgIGl0ZW1Qcm9wZXJ0%0AaWVzLmxpbmtzID0ge307CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZSA9%0APSAnZ3JhcGgnKSB7CiAgICAgICAgICAgIHNsaWNlUmVuZGVyRGF0YVt0eXBlXSA9%0AIGl0ZW1Qcm9wZXJ0aWVzOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg%0Ac2xpY2VSZW5kZXJEYXRhW3R5cGVdW2lkXSA9IGl0ZW1Qcm9wZXJ0aWVzOwogICAg%0AICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAnbm9kZScpIHsKICAg%0AICAgICAgIG4zLm5vZGVDb29yZHNbaWRdLmFjdGl2ZSA9IGZhbHNlOwogICAgICAg%0AIH0KICAgICAgfSkKICAgIH0pCiAgICByZXR1cm4gc2xpY2VSZW5kZXJEYXRhOwog%0AIH0KCiAgLyoqIHVwZGF0ZXMgcmVuZGVyZGF0YSBub2RlIGNvb3JkaW5hdGVzIGJh%0Ac2VkIG9uIGN1cnJlbnQgc3RhdGUgb2YgZ3JhcGgsIGFuZCB1cGRhdGVzIG5vZGUg%0Ac3RhdGUgdHJhY2tlcgogICogQHBhcmFtIHtpbnRlZ2VyfSAtIHRoZSB0aW1lIGlu%0AZGV4IHRvIHByb2Nlc3MKICAqIEBwcml2YXRlCiAgKi8KICBuMy5wcm90b3R5cGUu%0AdXBkYXRlU2xpY2VSZW5kZXJEYXRhID0gZnVuY3Rpb24odGltZSkgewogICAgdmFy%0AIG4zID0gdGhpczsKCiAgICB2YXIgcHJldk5vZGVDb29yZHMgPSAkLmV4dGVuZCh7%0AfSwgbjMubm9kZUNvb3Jkcyk7CiAgICB2YXIgZGF0YSA9IG4zLnRpbWVJbmRleFt0%0AaW1lXS5yZW5kZXJEYXRhOwogICAgCiAgICAkLmVhY2gobjMubm9kZUNvb3Jkcywg%0AZnVuY3Rpb24oaWQsIG5vZGVDb29yZCkgewogICAgICB2YXIgbm9kZSA9IGRhdGEu%0Abm9kZVtpZF07CiAgICAgIGlmIChub2RlKSB7CiAgICAgICAgaWYgKCFub2RlLmNv%0Ab3JkKSB7CiAgICAgICAgICBub2RlLnJlbmRlckNvb3JkID0gbm9kZUNvb3JkLmNv%0Ab3JkOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBub2RlLnJlbmRlckNvb3Jk%0AID0gbm9kZS5jb29yZDsKICAgICAgICB9CiAgICAgICAgbjMubm9kZUNvb3Jkc1tp%0AZF0gPSB7CiAgICAgICAgICBjb29yZDogbm9kZS5yZW5kZXJDb29yZCwKICAgICAg%0AICAgIGFjdGl2ZTogdHJ1ZSwKICAgICAgICAgIHNpemU6IG5vZGVbJ3ZlcnRleC5j%0AZXgnXSwKICAgICAgICAgIHByZXZQb2ludHM6IHByZXZOb2RlQ29vcmRzW2lkXS5w%0Ab2ludHMsCiAgICAgICAgICAvL0ZJWE1FIC0gdGhpcyBjb3VsZCBicmVhayBpZiBh%0AIG5vZGUgaXMgZXZlciBjZW50ZXJlZCBhdCAwLDAKICAgICAgICAgIHByZXZDb29y%0AZDogcHJldk5vZGVDb29yZHNbaWRdLmNvb3JkWzBdICYmIHByZXZOb2RlQ29vcmRz%0AW2lkXS5jb29yZFsxXSA/IHByZXZOb2RlQ29vcmRzW2lkXS5jb29yZCA6IG51bGwK%0AICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbjMubm9kZUNvb3Jkc1tp%0AZF0uYWN0aXZlID0gZmFsc2U7CiAgICAgIH0KICAgIH0pOwogICAgJC5lYWNoKGRh%0AdGEuZWRnZSwgZnVuY3Rpb24oaWQsIGVkZ2UpewogICAgICAkLmVhY2goWydpbmwn%0ALCAnb3V0bCddLCBmdW5jdGlvbihpLCBkaXJlY3Rpb24pewogICAgICAgIHZhciBu%0Ab2RlaWQgPSBlZGdlW2RpcmVjdGlvbl0uaWQ7CiAgICAgICAgdmFyIHByZXZDb29y%0AZCA9IHByZXZOb2RlQ29vcmRzW25vZGVpZF07CiAgICAgICAgdmFyIGNvb3JkcyA9%0AIG4zLm5vZGVDb29yZHNbbm9kZWlkXSB8fCBwcmV2Q29vcmQ7CiAgICAgICAgZWRn%0AZVtkaXJlY3Rpb25dID0gewogICAgICAgICAgaWQ6IG5vZGVpZCwKICAgICAgICAg%0AIGNvb3JkczogY29vcmRzLAogICAgICAgICAgcHJldlBvaW50czpwcmV2Q29vcmQu%0AcG9pbnRzLAogICAgICAgICAgLy9JZiB0aGUgbm9kZSBpcyBuZXdseSBhY3RpdmUs%0AIHVzZSB0aGUgY3VycmVudCBjb29yZGluYXRlcyBmb3IgdGhlIHN0YXJ0IHZhbHVl%0AcwogICAgICAgICAgc3RhcnRDb29yZHM6ICEgcHJldkNvb3JkLmFjdGl2ZSA/IGNv%0Ab3JkcyA6IHByZXZDb29yZAogICAgICAgIH0KICAgICAgfSkKICAgIH0pCiAgICBy%0AZXR1cm4gZGF0YTsKICB9CgogIC8qKiBjcmVhdGUgYSBwYXRoIGRlc2NyaXB0aW9u%0AcyBvbiB0aGUgZ2l2ZW4gZGF0YSBzZWxlY3Rpb24KICAqIEBwYXJhbSB7b2JqZWN0%0AfSAtIHRoZSBEMyBkYXRhIHNlbGVjdGlvbgogICogQHBhcmFtIHtORFRWX0QzfQog%0AICogQHBhcmFtIHtib29sZWFufSAtIElmIHRydWUsIHBvc2l0aW9ucyBlbmQgb2Yg%0AbGluZSBvZmZzZXQgb2Ygbm9kZSByYWRpdXMgdG8gYWNjb21vZGF0ZSBhcnJvd2hl%0AYWQgCiAgKiBAcGFyYW0ge2Jvb2xlYW59IC0gSWYgdHJ1ZSwgZHJhd3MgcGF0aCB1%0Ac2luZyBjdXJyZW50IG5vZGUgcG9zaXRpb25zIChiZWZvcmUgYW5pbWF0aW9uIGJl%0AZ2lucykKICAqIEBwcml2YXRlCiAgKi8KICBuMy5wcm90b3R5cGUuZHJhd0VkZ2Ug%0APSBmdW5jdGlvbihzZWxlY3Rpb24sIG4zLCB1c2VhcnJvd3MsIHN0YXJ0KSB7CiAg%0AICBzZWxlY3Rpb24uYXR0cih7CiAgICAgIGQ6IGZ1bmN0aW9uKGQpIHsKICAgICAg%0AICB2YXIgdHlwZSA9IHN0YXJ0ID8gJ3N0YXJ0Q29vcmRzJyA6ICdjb29yZHMnOwoK%0AICAgICAgICB2YXIgc3RhcnROb2RlID0gZC5vdXRsW3R5cGVdOwogICAgICAgIHZh%0AciBlbmROb2RlID0gZC5pbmxbdHlwZV07CiAgICAgICAgdmFyIHN0YXJ0Q29vcmRz%0AID0gW24zLnhTY2FsZShzdGFydE5vZGUuY29vcmRbMF0pLCBuMy55U2NhbGUoc3Rh%0AcnROb2RlLmNvb3JkWzFdKV07CiAgICAgICAgdmFyIGVuZENvb3JkcyA9IFtuMy54%0AU2NhbGUoZW5kTm9kZS5jb29yZFswXSksIG4zLnlTY2FsZShlbmROb2RlLmNvb3Jk%0AWzFdKV07CgogICAgICAgIGlmKHVzZWFycm93cyB8fCBuZHR2UHJvcGVydGllcy5n%0AcmFwaC5lZGdlT2Zmc2V0KSB7CiAgICAgICAgICB2YXIgYXJyb3dPZmZzZXQgPSB1%0Ac2VhcnJvd3MgPyBzY2FsZUFycm93aGVhZHMoZCkqZFsnZWRnZS5sd2QnXSA6IDA7%0ACiAgICAgICAgICBzdGFydENvb3JkcyA9IGZpbmROb2RlSW50ZXJzZWN0aW9uKG4z%0ALCBkLm91dGwuaWQsIGVuZENvb3JkcywgbmR0dlByb3BlcnRpZXMuZ3JhcGguZWRn%0AZU9mZnNldCwgc3RhcnQpCiAgICAgICAgICBlbmRDb29yZHMgPSBmaW5kTm9kZUlu%0AdGVyc2VjdGlvbihuMywgZC5pbmwuaWQsIHN0YXJ0Q29vcmRzLCBhcnJvd09mZnNl%0AdCtuZHR2UHJvcGVydGllcy5ncmFwaC5lZGdlT2Zmc2V0LCBzdGFydCkKICAgICAg%0AICB9CiAgICAgICAgZFsnY3VycmVudENvb3JkcyddID0gW3N0YXJ0Q29vcmRzLCBl%0AbmRDb29yZHNdOwogICAgICAgIHJldHVybiAnTSAnK3N0YXJ0Q29vcmRzWzBdLnRv%0ARml4ZWQoMSkrJyAnK3N0YXJ0Q29vcmRzWzFdLnRvRml4ZWQoMSkrJyBMICcrZW5k%0AQ29vcmRzWzBdLnRvRml4ZWQoMSkrJyAnK2VuZENvb3Jkc1sxXS50b0ZpeGVkKDEp%0AOyAgICAgCiAgICAgIH0KICAgIH0pCiAgfQoKICAvKiogaW5pdGlhbGl6ZXMgYSBE%0AMyBsaW5lIGRyYXdpbmcgZnVuY3Rpb24KICAqIEBwcml2YXRlICovCiAgdmFyIGRy%0AYXdMaW5lID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gZDMuc3ZnLmxpbmUoKQog%0AICAgICAueChmdW5jdGlvbihkKXtyZXR1cm4gZFswXTt9KQogICAgICAueShmdW5j%0AdGlvbihkKXtyZXR1cm4gZFsxXTt9KQogIH0KICAKICAvKiogb2Zmc2V0IGEgbGlu%0AZSBiZXR3ZWVuIHR3byBnaXZlbiBwb2ludHMgYnkgdGhlIHNwZWNpZmllZCBhbW91%0AbnQuIHJldHVybnMgdGhlIG5ldyB0YXJnZXQgcG9pbnQKICAqIEBwYXJhbSB7cG9p%0AbnR9IC0gdGhlIG9yaWdpbiBwb2ludAogICogQHBhcmFtIHtwb2ludH0gLSB0aGUg%0AdGFyZ2V0IHBvaW50CiAgKiBAcGFyYW0ge251bWJlcn0gLSB0aGUgb2Zmc2V0IGFt%0Ab3VudCAoYXMgbGVuZ3RoIG9mIGxpbmUpCiAgKiBAcHJpdmF0ZSAqLwogIHZhciBv%0AZmZzZXRMaW5lID0gZnVuY3Rpb24ocG9pbnRBLCBwb2ludEIsIG9mZnNldCkgewog%0AICAgcG9pbnRBID0gcG9pbnRBLm1hcChwYXJzZUZsb2F0KTsKICAgIHBvaW50QiA9%0AIHBvaW50Qi5tYXAocGFyc2VGbG9hdCk7CgogICAgdmFyIHhsZW4gPSBwb2ludEJb%0AMF0gLSBwb2ludEFbMF07CiAgICB2YXIgeWxlbiA9IHBvaW50QlsxXSAtIHBvaW50%0AQVsxXTsKCiAgICAvLyBEZXRlcm1pbmUgaHlwb3RlbnVzZSBsZW5ndGgKICAgIHZh%0AciBobGVuID0gTWF0aC5zcXJ0KE1hdGgucG93KHhsZW4sMikgKyBNYXRoLnBvdyh5%0AbGVuLDIpKTsKCiAgICAvLyBEZXRlcm1pbmUgdGhlIHJhdGlvIGJldHdlZW4gdGhl%0AIHNob3J0ZW5lZCB2YWx1ZSBhbmQgdGhlIGZ1bGwgaHlwb3RlbnVzZS4KICAgIHZh%0AciByYXRpbyA9IChobGVuIC0gb2Zmc2V0KSAvIGhsZW47CgogICAgLy9JZiB0aGUg%0AcmF0aW8gaXMgaW52YWxpZCwganVzdCB1c2UgdGhlIG9yaWdpbmFsIGNvb3JkaW5h%0AdGVzCiAgICBpZiAoJC5pc051bWVyaWMocmF0aW8pKSB7IAogICAgICByZXR1cm4g%0AWwogICAgICAgIHBvaW50QVswXSArICh4bGVuICogcmF0aW8pLAogICAgICAgIHBv%0AaW50QVsxXSArICh5bGVuICogcmF0aW8pCiAgICAgIF07CiAgICB9IGVsc2Ugewog%0AICAgICByZXR1cm4gcG9pbnRCOwogICAgfQogIH0KCiAgdmFyIHNjYWxlQXJyb3do%0AZWFkcyA9IGZ1bmN0aW9uKGQpIHsKICAgIHJldHVybiA2LTIuNSpNYXRoLmF0YW4o%0AZFsnZWRnZS5sd2QnXSouNikKICB9CiAgLyoqIGZpbmQgdGhlIHBvaW50IGF0IHdo%0AaWNoIGEgbGluZSBkcmF3biBmcm9tIGEgcG9pbnQgdG8gdGhlIGNlbnRlciBvZiBh%0AIG5vZGUgaW50ZXJzZWN0cyB3aXRoIHRoZSBub2RlcyBib3JkZXIuCiAgKiByZXR1%0Acm5zIHRoZSBjb29yZGluYXRlLCBvcHRpb25hbGx5IGFwcGx5aW5nIGFuIG9mZnNl%0AdAogICogQHBhcmFtIHtuM30gbjMgLSB0aGUgbjMgb2JqZWN0CiAgKiBAcGFyYW0g%0Ae2lkfSBpZCAtIHRoZSBub2RlIGlkCiAgKiBAcGFyYW0ge3BvaW50fSBwb2ludCAt%0AIHRoZSBwb2ludCBvZiBvcmlnaW4gZm9yIHRoZSBsaW5lCiAgKiBAcGFyYW0geyBu%0AdW1iZXJ9IG9mZnNldCAtIHRoZSBvZmZzZXQgYW1vdW50IHRvIGFwcGx5CiAgKiBA%0AcGFyYW0ge2Jvb2xlYW59IHVzZVByZXYgLSBzaG91bGQgd2UgdXNlIHRoZSBjdXJy%0AZW50IHNsaWNlIGNvb3JkaW5hdGVzLCBvciB0aG9zZSBvZiB0aGUgcHJldmlvdXMg%0Ac3RhdGU/CiAgKiBAcHJpdmF0ZSAqLwogIHZhciBmaW5kTm9kZUludGVyc2VjdGlv%0AbiA9IGZ1bmN0aW9uKG4zLCBpZCwgcG9pbnQsIG9mZnNldCwgdXNlUHJldikgewog%0AICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7CiAgICB2YXIgbm9kZURhdGEgPSBuMy5u%0Ab2RlQ29vcmRzW2lkXTsKICAgIHZhciBjZW50ZXIgPSB1c2VQcmV2ICYmIG5vZGVE%0AYXRhLnByZXZDb29yZCA/IG5vZGVEYXRhLnByZXZDb29yZC5zbGljZSgpIDogbm9k%0AZURhdGEuY29vcmQuc2xpY2UoKTsKICAgIHZhciBpbnRlcnNlY3Rpb24gPSBbCiAg%0AICAgIG4zLnhTY2FsZShjZW50ZXJbMF0pLAogICAgICBuMy55U2NhbGUoY2VudGVy%0AWzFdKQogICAgXTsKCiAgICBpZiAobm9kZURhdGEucG9pbnRzKSB7CiAgICAgIHZh%0AciBwb2ludHMgPSB1c2VQcmV2ICYmIG5vZGVEYXRhLnByZXZQb2ludHMubGVuZ3Ro%0AID8gbm9kZURhdGEucHJldlBvaW50cyA6IG5vZGVEYXRhLnBvaW50czsKICAgICAg%0AaW50ZXJzZWN0aW9uID0gZmluZFBvbHlnb25JbnRlcnNlY3Rpb24ocG9pbnRzLCBp%0AbnRlcnNlY3Rpb24sIHBvaW50KTsKICAgIH0gZWxzZSB7CiAgICAgIG9mZnNldCAr%0APSBub2RlRGF0YS5zaXplICogbjMuYmFzZU5vZGVTaXplOwogICAgfQogICAgcmV0%0AdXJuIG9mZnNldExpbmUocG9pbnQsIGludGVyc2VjdGlvbiwgb2Zmc2V0KTsKICB9%0ACiAKICAvKiogZmluZCB0aGUgcG9pbnQgb2YgaW50ZXNlY3Rpb24gb2YgdHdvIGxp%0AbmVzIC0gYWRhcHRlZCBmcm9tIGh0dHA6Ly9wYXVsYm91cmtlLm5ldC9nZW9tZXRy%0AeS9wb2ludGxpbmVwbGFuZS8gCiAgKiBAcHJpdmF0ZSAqLwogIHZhciBmaW5kTGlu%0AZUludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGEsIGIsIGMsIGQpIHsKICAgIHZhciBk%0AZW5vbWluYXRvciA9IChkWzFdIC0gY1sxXSkgKiAoYlswXSAtIGFbMF0pIC0gKGRb%0AMF0gLSBjWzBdKSAqIChiWzFdIC0gYVsxXSk7CiAgICB2YXIgcHJlY2lzaW9uID0g%0AMTAwMDAwOwoKICAgIHZhciBvbmUgPSAoIChkWzBdIC0gY1swXSkgKiAoYVsxXSAt%0AIGNbMV0pIC0gKGRbMV0gLSBjWzFdKSAqIChhWzBdIC0gY1swXSkgKSAvIGRlbm9t%0AaW5hdG9yOwogICAgdmFyIHR3byA9ICggKGJbMF0gLSBhWzBdKSAqIChhWzFdIC0g%0AY1sxXSkgLSAoYlsxXSAtIGFbMV0pICogKGFbMF0gLSBjWzBdKSApIC8gZGVub21p%0AbmF0b3I7CiAgICBvbmUgPSBNYXRoLnJvdW5kKG9uZSAqIHByZWNpc2lvbikgLyBw%0AcmVjaXNpb247CiAgICB0d28gPSBNYXRoLnJvdW5kKHR3byAqIHByZWNpc2lvbikg%0ALyBwcmVjaXNpb247CgogICAgaWYgKG9uZSA8PSAxICYmIG9uZSA+PSAwICYmIHR3%0AbyA8PSAxICYmIHR3byA+PSAwKSB7CiAgICAgIHZhciB4ID0gYVswXSArIG9uZSAq%0AIChiWzBdIC0gYVswXSk7CiAgICAgIHZhciB5ID0gYVsxXSArIG9uZSAqIChiWzFd%0AIC0gYVsxXSk7IAogICAgICByZXR1cm4gW3gseV07CiAgICB9CiAgfQoKICAvKiog%0AZmluZCB0aGUgcG9pbnQgYXQgd2hpY2ggYSBsaW5lIGludGVyc2VjdCBhIHBvbHln%0Ab24KICAqIEBwcml2YXRlICovCiAgdmFyIGZpbmRQb2x5Z29uSW50ZXJzZWN0aW9u%0AID0gZnVuY3Rpb24ocG9pbnRzLCBjZW50ZXJBLCBjZW50ZXJCKSB7CiAgICB2YXIg%0AaW50ZXJzZWN0aW9uID0gW107CiAgICBmb3IodmFyIGkgPSAwOyBpPHBvaW50cy5s%0AZW5ndGgtMTsgaSsrKSB7CiAgICAgIHZhciByZXMgPSBmaW5kTGluZUludGVyc2Vj%0AdGlvbihwb2ludHNbaV0sIHBvaW50c1tpKzFdLCBjZW50ZXJBLCBjZW50ZXJCKTsK%0AICAgICAgaWYgKHJlcykgewogICAgICAgIGludGVyc2VjdGlvbiA9IHJlczsKICAg%0AICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKCEgaW50ZXJzZWN0aW9u%0ALmxlbmd0aCkgewogICAgICBpbnRlcnNlY3Rpb24gPSBmaW5kTGluZUludGVyc2Vj%0AdGlvbihwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSwgcG9pbnRzWzBdLCBjZW50ZXJB%0ALCBjZW50ZXJCKTsKICAgIH0KICAgIGlmICghIGludGVyc2VjdGlvbikgewogICAg%0AICBjb25zb2xlLmxvZygidW5hYmxlIHRvIGZpbmQgaW50ZXJzZWN0aW9uISB1c2lu%0AZyB0YXJnZXQgcG9pbnQiLCBwb2ludHMsIGNlbnRlckEsIGNlbnRlckIpOwoKICAg%0AICAgLy9kZWJ1Z2dpbmcgY29kZQogICAgICAvLyB2YXIgY29sb3IgPSBkMy5zY2Fs%0AZS5jYXRlZ29yeTEwKCkuZG9tYWluKGQzLnJhbmdlKDAsMTApKShncmFwaDIuY3Vy%0AclRpbWUpOwogICAgICAvLyBkMy5zZWxlY3QoJy5jb250YWluZXInKS5hcHBlbmQo%0AJ3BhdGgnKS5hdHRyKCdkJywgIk0gIitjZW50ZXJBWzBdICsgJyAnK2NlbnRlckFb%0AMV0gKyAnIEwgJysgY2VudGVyQlswXSArICcgJytjZW50ZXJCWzFdKS5zdHlsZSh7%0AJ3N0cm9rZSc6IGNvbG9yfSkKICAgICAgLy8gZm9yKGkgPSAwOyBpPHBvaW50cy5s%0AZW5ndGgtMTsgaSsrKSB7CiAgICAgIC8vICAgZDMuc2VsZWN0KCcuY29udGFpbmVy%0AJykuYXBwZW5kKCdwYXRoJykuYXR0cignZCcsICJNICIrcG9pbnRzW2ldWzBdICsg%0AJyAnK3BvaW50c1tpXVsxXSArICcgTCAnKyBwb2ludHNbaSsxXVswXSArICcgJytw%0Ab2ludHNbaSsxXVsxXSkuc3R5bGUoeydzdHJva2UnOiBjb2xvcn0pCiAgICAgIC8v%0AIH0KICAgICAgLy8gZDMuc2VsZWN0KCcuY29udGFpbmVyJykuYXBwZW5kKCdwYXRo%0AJykuYXR0cignZCcsICJNICIrcG9pbnRzW3BvaW50cy5sZW5ndGgtMV1bMF0gKyAn%0AICcrcG9pbnRzW3BvaW50cy5sZW5ndGgtMV1bMV0gKyAnIEwgJysgcG9pbnRzWzBd%0AWzBdICsgJyAnK3BvaW50c1swXVsxXSkuc3R5bGUoeydzdHJva2UnOiBjb2xvcn0p%0ACiAgICAgIHJldHVybiBjZW50ZXJCOyAvL0ZJWE1FIC0gdGhpcyBzaG91bGQgYmUg%0AZW5hYmxlZCBmb3IgcHJvZHVjdGlvbgoKICAgIH0KICAgIHJldHVybiBpbnRlcnNl%0AY3Rpb247CiAgfQoKICAvKiogY3JlYXRlcyBhIHBvbHlnb24tc2hhcGVkIHBhdGgg%0AYXR0cmlidXRlIGZvciBnaXZlbiBub2RlIHNlbGVjdGlvbgogICogQHBhcmFtIHtE%0AM3NlbGVjdGlvbn0KICAqIEBwYXJhbSB7TkRUVl9EM30KICAqIEBwcml2YXRlCiAg%0AKi8KICBuMy5wcm90b3R5cGUuZHJhd1BvbHlnb25Ob2RlID0gZnVuY3Rpb24oc2Vs%0AZWN0aW9uLCBuMyl7CiAgICAvLyBjb25zb2xlLnByb2ZpbGUoJ3BvbHltYXRoJykK%0AICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckRhdGEubikKICAgIHNlbGVjdGlvbi5h%0AdHRyKHsKICAgICAgcG9pbnRzOiBmdW5jdGlvbihkLCBpKSB7IAogICAgICAgIHZh%0AciBzaWRlcyA9IGRbJ3ZlcnRleC5zaWRlcyddOwogICAgICAgIHZhciBzaXplID0g%0AZFsndmVydGV4LmNleCddICogbjMuYmFzZU5vZGVTaXplOwogICAgICAgIHZhciBj%0Ab29yZHMgPSBkLnJlbmRlckNvb3JkOwogICAgICAgIHZhciByb3RhdGlvbiA9IGRb%0AJ3ZlcnRleC5yb3QnXTsKICAgICAgICB2YXIgY2VudGVyWCA9IG4zLnhTY2FsZShj%0Ab29yZHNbMF0pOwogICAgICAgIHZhciBjZW50ZXJZID0gbjMueVNjYWxlKGNvb3Jk%0Ac1sxXSk7CgogICAgICAgIHZhciByb3QgPSByb3RhdGlvbiAqIDIgKiBNYXRoLlBJ%0ALzM2MAogICAgICAgIHZhciBiYXNlID0gMS9zaWRlcyAqIDIgKiBNYXRoLlBJOwog%0AICAgICAgIG4zLm5vZGVDb29yZHNbZC5pZF0ucG9pbnRzID0gW107CgogICAgICAg%0AIGZvciAodmFyIGkgPSAxOyBpIDw9IHNpZGVzOyBpKyspIHsKICAgICAgICAgICAg%0AdmFyIGFuZyA9IGkgKiBiYXNlICsgcm90OwogICAgICAgICAgICB2YXIgeCA9IGNl%0AbnRlclggKyBzaXplICogTWF0aC5jb3MoYW5nKTsKICAgICAgICAgICAgdmFyIHkg%0APSBjZW50ZXJZICsgc2l6ZSAqIE1hdGguc2luKGFuZyk7CiAgICAgICAgICAgIG4z%0ALm5vZGVDb29yZHNbZC5pZF0ucG9pbnRzLnB1c2goW3gsIHldKTsKICAgICAgICB9%0ACiAgICAgICAgcmV0dXJuIG4zLm5vZGVDb29yZHNbZC5pZF0ucG9pbnRzLm1hcChm%0AdW5jdGlvbihwKSB7IHJldHVybiBwWzBdLnRvRml4ZWQoMSkrJywnK3BbMV0udG9G%0AaXhlZCgxKTsgfSkuam9pbignICcpOwogICAgICB9LAogICAgfSkKICAgIC8vIGNv%0AbnNvbGUucHJvZmlsZUVuZCgncG9seW1hdGgnKQogIH0KCiAgLyoqIGNyZWF0ZXMg%0AY2lyY2xlIGF0dHJpYnV0ZXMgZm9yIGdpdmVuIG5vZGUgc2VsZWN0aW9uCiAgKiBA%0AcGFyYW0ge0Qzc2VsZWN0aW9ufQogICogQHBhcmFtIHtORFRWX0QzfQogICogQHBy%0AaXZhdGUKICAqLwogIG4zLnByb3RvdHlwZS5kcmF3Q2lyY2xlTm9kZSA9IGZ1bmN0%0AaW9uKHNlbGVjdGlvbiwgbjMpewogICAgc2VsZWN0aW9uLmF0dHIoewogICAgICBj%0AeDogZnVuY3Rpb24oZCwgaSkgeyByZXR1cm4gbjMueFNjYWxlKGQucmVuZGVyQ29v%0AcmRbMF0pLnRvRml4ZWQoMSk7IH0sCiAgICAgIGN5OiBmdW5jdGlvbihkLCBpKSB7%0AIHJldHVybiBuMy55U2NhbGUoZC5yZW5kZXJDb29yZFsxXSkudG9GaXhlZCgxKTsg%0AfSwKICAgICAgcjogZnVuY3Rpb24oZCwgaSkgeyByZXR1cm4gKGRbJ3ZlcnRleC5j%0AZXgnXSAqIG4zLmJhc2VOb2RlU2l6ZSkudG9GaXhlZCgxKTsgfSwKICAgIH0pCiAg%0AfQoKICAvKiogcG9zaXRpb25zIHRoZSBub2RlIGxhYmVscwogICogQHBhcmFtIHtE%0AM3NlbGVjdGlvbn0KICAqIEBwYXJhbSB7TkRUVl9EM30KICAqIEBwcml2YXRlCiAg%0AKi8KICBuMy5wcm90b3R5cGUuZHJhd05vZGVMYWJlbCA9IGZ1bmN0aW9uKHNlbGVj%0AdGlvbiwgbjMpewogICAgc2VsZWN0aW9uLmF0dHIoewogICAgICB4OiBmdW5jdGlv%0AbihkLCBpKSB7IHJldHVybiAobjMueFNjYWxlKGQucmVuZGVyQ29vcmRbMF0pK24z%0ALm9wdGlvbnMubGFiZWxPZmZzZXQueCkudG9GaXhlZCgxKTsgfSwKICAgICAgeTog%0AZnVuY3Rpb24oZCwgaSkgeyByZXR1cm4gKG4zLnlTY2FsZShkLnJlbmRlckNvb3Jk%0AWzFdKStuMy5vcHRpb25zLmxhYmVsT2Zmc2V0LnkpLnRvRml4ZWQoMSk7IH0sCiAg%0AICB9KQogIH0KCiAgLyoqIGhpZ2hsaWdodHMgdGhlIGN1cnJlbnRseSBzZWxlY3Rl%0AZCBuZXR3b3JrICovCiAgbjMucHJvdG90eXBlLnVwZGF0ZVNlbGVjdGVkTmV0d29y%0AayA9IGZ1bmN0aW9uKCkgewogICAgdmFyIG4zID0gdGhpczsKICAgIHZhciBub2Rl%0AID0gbjMuc2VsZWN0ZWROZXR3b3JrOwogICAgJC5lYWNoKFsnbm9kZV9ncm91cCcs%0AICdlZGdlJywgJ2xhYmVsJ10sIGZ1bmN0aW9uKGksIGNsYXNzbmFtZSkgewogICAg%0AICB2YXIgc2VsZWN0aW9uID0gbjMuY29udGFpbmVyLnNlbGVjdEFsbCgnLicrY2xh%0Ac3NuYW1lKQogICAgICB2YXIgdHlwZSA9IGNsYXNzbmFtZSA9PSAnbm9kZV9ncm91%0AcCcgPyAnbm9kZScgOiBjbGFzc25hbWU7CiAgICAgIHZhciB1bnNlbGVjdGVkVGFy%0AZ2V0Q2xhc3MgPSAnLicrdHlwZSsncyc7CiAgICAgIHZhciBzZWxlY3RlZFRhcmdl%0AdENsYXNzID0gJy4nK3R5cGUrJ3Nfc2VsZWN0ZWQnOwogICAgICB2YXIgdW5zZWxl%0AY3RlZFRhcmdldCA9IG4zLmNvbnRhaW5lci5zZWxlY3QodW5zZWxlY3RlZFRhcmdl%0AdENsYXNzKS5ub2RlKCk7CiAgICAgIHZhciBzZWxlY3RlZFRhcmdldCA9IG4zLmNv%0AbnRhaW5lci5zZWxlY3Qoc2VsZWN0ZWRUYXJnZXRDbGFzcykubm9kZSgpOwoKICAg%0AICAgc2VsZWN0aW9uLmVhY2goZnVuY3Rpb24oZCl7CiAgICAgICAgdmFyIHRhcmdl%0AdCA9IHVuc2VsZWN0ZWRUYXJnZXQ7CiAgICAgICAgdmFyIHRhcmdldENsYXNzID0g%0AdW5zZWxlY3RlZFRhcmdldENsYXNzOwogICAgICAgIGlmICh0eXBlID09ICdlZGdl%0AJykgewogICAgICAgICAgaWYgKG5vZGUgJiYgKGQuaW5sLmlkID09IG5vZGUuaWQg%0AfHwgZC5vdXRsLmlkID09IG5vZGUuaWQpKSB7CiAgICAgICAgICAgIHRhcmdldCA9%0AIHNlbGVjdGVkVGFyZ2V0OwogICAgICAgICAgICB0YXJnZXRDbGFzcyA9IHNlbGVj%0AdGVkVGFyZ2V0Q2xhc3M7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAg%0AICAgICAgIGlmIChub2RlICYmIChub2RlLmxpbmtzW2QuaWRdICE9PSB1bmRlZmlu%0AZWQgfHwgZC5pZCA9PSBub2RlLmlkKSkgewogICAgICAgICAgICB0YXJnZXQgPSBz%0AZWxlY3RlZFRhcmdldDsKICAgICAgICAgICAgdGFyZ2V0Q2xhc3MgPSBzZWxlY3Rl%0AZFRhcmdldENsYXNzOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBj%0Ab25zb2xlLmxvZyh0YXJnZXRDbGFzcyk7CiAgICAgICAgaWYgKCEgJCh0aGlzKS5w%0AYXJlbnQodGFyZ2V0Q2xhc3MpLmxlbmd0aCkgewogICAgICAgICAgLy8gY29uc29s%0AZS5sb2cobjMuY3VyclRpbWUpCiAgICAgICAgICAkKHRhcmdldCkuYXBwZW5kKHRo%0AaXMpOwogICAgICAgIH0KICAgICAgfSkgICAgCiAgICB9KSAgICAKICB9CgogIC8q%0AKiB1bmhpZ2hsaWdodHMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBuZXR3b3JrICov%0ACiAgbjMucHJvdG90eXBlLnVuU2VsZWN0TmV0d29yayA9IGZ1bmN0aW9uKCkgewog%0AICAgdmFyIG4zID0gdGhpczsKICAgIG4zLnNlbGVjdGVkTmV0d29yayA9IG51bGw7%0ACiAgICBuMy5jb250YWluZXIuc2VsZWN0KCcuc2NyZWVuJykuY2xhc3NlZCh7J25l%0AdHdvcmstc2VsZWN0ZWQnOiBmYWxzZX0pOwogICAgbjMudXBkYXRlU2VsZWN0ZWRO%0AZXR3b3JrKCk7CiAgfQoKICAvKiogcmVuZGVyIHRoZSBncmFwaCB0byByZWZsZWN0%0AIHRoZSBzdGF0ZSBhdCBjdXJyVGltZSwgdHJhbnNpdGlvbmluZyBlbGVtZW50cyBv%0AdmVyIGEgZ2l2ZW4gZHVyYXRpb24KICAqIEBwYXJhbSB7bWlsbGlzZWNvbmRzfSAt%0AIHRoZSBhbW91bnQgb2YgdGltZSB0aGUgdHJhbnNpdGlvbiBhbmltYXRpb24gc2hv%0AdWxkIHRha2UKICAqLwogIG4zLnByb3RvdHlwZS51cGRhdGVHcmFwaCA9IGZ1bmN0%0AaW9uKGR1cmF0aW9uKSB7CiAgICB2YXIgbjMgPSB0aGlzOwogICAgLy8gY29uc29s%0AZS5wcm9maWxlKCd1cGRhdGUgJytuMy5jdXJyVGltZSk7CgogICAgdmFyIHJlbmRl%0AckRhdGEgPSBuMy51cGRhdGVTbGljZVJlbmRlckRhdGEobjMuY3VyclRpbWUpOwog%0AICAgbjMuZnJhbWVJbmZvRGl2Lmh0bWwobjMuY3VyclRpbWUrJzogJytuMy50aW1l%0ASW5kZXhbbjMuY3VyclRpbWVdLnN0YXJ0ICsgJy0nK24zLnRpbWVJbmRleFtuMy5j%0AdXJyVGltZV0uZW5kKQoKICAgIHZhciBlbnRlckV4aXREdXJhdGlvbiA9IGR1cmF0%0AaW9uICogbjMub3B0aW9ucy5lbnRlckV4aXRBbmltYXRpb25GYWN0b3I7CiAgICB2%0AYXIgdXBkYXRlRHVyYXRpb24gPSBkdXJhdGlvbiAqICgxLW4zLm9wdGlvbnMuZW50%0AZXJFeGl0QW5pbWF0aW9uRmFjdG9yKTsKCiAgICAkLmVhY2goWydtYWluJywgJ3hs%0AYWInXSwgZnVuY3Rpb24oaSwgdHlwZSl7CiAgICAgIHZhciB0ZXh0ID0gcmVuZGVy%0ARGF0YS5ncmFwaFt0eXBlXTsKICAgICAgdmFyIHRhcmdldCA9IG4zLmRvbVRhcmdl%0AdC5zZWxlY3QoJy4nK3R5cGUrJyB0ZXh0Jyk7CiAgICAgIHRhcmdldC5zZWxlY3RB%0AbGwoJyonKS5yZW1vdmUoKTsKCiAgICAgIGlmICh0ZXh0KSB7CiAgICAgICAgJC5l%0AYWNoKHRleHQsIGZ1bmN0aW9uKGksIHQpewogICAgICAgICAgdGFyZ2V0LmFwcGVu%0AZCgndHNwYW4nKS5hdHRyKHsKICAgICAgICAgICAgJ2R5JzogKGkgPyAnMS4yZW0n%0AIDogMCksCiAgICAgICAgICAgICd4JzogMCwKICAgICAgICAgIH0pLnRleHQodCk7%0ACiAgICAgICAgfSkKICAgICAgfQogICAgfSk7CgogICAgbjMuZG9tVGFyZ2V0LnNl%0AbGVjdEFsbCgnLmJhY2tncm91bmQsIC5zY3JlZW4nKS50cmFuc2l0aW9uKCkKICAg%0AICAgLnN0eWxlKHtmaWxsOiByZW5kZXJEYXRhLmdyYXBoWydiZyddLCAnZmlsbC1v%0AcGFjaXR5JzogcmVuZGVyRGF0YS5ncmFwaFsnYmcuZmlsbC1vcGFjaXR5J119KTsK%0ACiAgICB2YXIgc2hvd0luZm8gPSBmdW5jdGlvbihkKSB7CiAgICAgIGlmKCEgbjMu%0Ac2VsZWN0ZWQgfHwgbjMuc2VsZWN0ZWQuaWQgIT09IGQuaWQpIHsKICAgICAgICBu%0AMy5zZWxlY3RlZCA9IGQ7CiAgICAgICAgbjMubW92ZVRvb2x0aXAoKTsKICAgICAg%0AfSBlbHNlIHsKICAgICAgICBuMy5oaWRlVG9vbHRpcCgpOwogICAgICB9CiAgICB9%0ACgogICAgLy91cGRhdGUgc2VsZWN0ZWQgaXRlbQogICAgaWYgKG4zLnNlbGVjdGVk%0AKSB7CiAgICAgIG4zLnNlbGVjdGVkID0gbjMuc2VsZWN0ZWQuaW5sID8gcmVuZGVy%0ARGF0YS5lZGdlW24zLnNlbGVjdGVkLmlkXSA6IHJlbmRlckRhdGEubm9kZVtuMy5z%0AZWxlY3RlZC5pZF07CiAgICAgIGlmICghIG4zLnNlbGVjdGVkKSB7CiAgICAgICAg%0AbjMuaGlkZVRvb2x0aXAoKTsKICAgICAgfSAKICAgIH0KICAgIGlmIChuMy5zZWxl%0AY3RlZE5ldHdvcmspIHsKICAgICAgbjMuc2VsZWN0ZWROZXR3b3JrID0gcmVuZGVy%0ARGF0YS5ub2RlW24zLnNlbGVjdGVkTmV0d29yay5pZF07CiAgICB9CgogICAgLyoq%0AIGFwcGx5IHN0eWxlcyBhbmQgYXRycmlidXRlcyB0byBub2RlcwogICAgKiBAcHJp%0AdmF0ZQogICAgKi8KICAgIHZhciBzdHlsZU5vZGVzID0gZnVuY3Rpb24oc2VsZWN0%0AaW9uKSB7CiAgICAgIHNlbGVjdGlvbi5zdHlsZSh7CiAgICAgICAgLy8gJ2ZpbGwn%0AOiBmdW5jdGlvbihkLCBpKSB7cmV0dXJuIGRbJ3ZlcnRleC5jb2wnXTsgfSwKICAg%0AICAgICBmaWxsOiBmdW5jdGlvbihkKSB7CiAgICAgICAgICBpZiAoZC5pbWFnZSkg%0AeyAKICAgICAgICAgICAgcmV0dXJuICd1cmwoI2ltYWdlXycrcGFyc2VJbnQoZC5p%0AZCkrJyknOyAKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBk%0AWyd2ZXJ0ZXguY29sJ107CiAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAg%0AJ2ZpbGwtb3BhY2l0eSc6IGZ1bmN0aW9uKGQsIGkpIHtyZXR1cm4gZFsndmVydGV4%0ALmNvbC5maWxsLW9wYWNpdHknXTsgfSwKICAgICAgICAnc3Ryb2tlLXdpZHRoJzog%0AZnVuY3Rpb24oZCkge3JldHVybiBkWyd2ZXJ0ZXgubHdkJ107IH0sCiAgICAgICAg%0AJ3N0cm9rZSc6IGZ1bmN0aW9uKGQpIHtyZXR1cm4gZFsndmVydGV4LmJvcmRlcidd%0AOyB9LAogICAgICAgICdzdHJva2Utb3BhY2l0eSc6IGZ1bmN0aW9uKGQpIHtyZXR1%0Acm4gZFsndmVydGV4LmJvcmRlci5zdHJva2Utb3BhY2l0eSddOyB9LAogICAgICB9%0AKQogICAgICBzZWxlY3Rpb24uZmlsdGVyKCdjaXJjbGUnKS5jYWxsKG4zLmRyYXdD%0AaXJjbGVOb2RlLCBuMykKICAgICAgc2VsZWN0aW9uLmZpbHRlcigncG9seWdvbicp%0ALmNhbGwobjMuZHJhd1BvbHlnb25Ob2RlLCBuMykKICAgIH0KCiAgICAvKiogc2V0%0AIGF0dHJpYnV0ZXMgJiB0cmFuc2l0aW9ucyB0byBiZSBhcHBsaWVkIHRvIG5ldyBu%0Ab2RlcwogICAgKiBAcHJpdmF0ZQogICAgKi8KICAgIHZhciBjcmVhdGVOb2RlcyA9%0AIGZ1bmN0aW9uKHNlbGVjdGlvbikgewogICAgICBzZWxlY3Rpb24KICAgICAgICAu%0AYXR0cih7CiAgICAgICAgICBjbGFzczogZnVuY3Rpb24oZCkgeyByZXR1cm4gJ25v%0AZGUgbm9kZV8nK2QuaWQrJyAnKyhkWyd2ZXJ0ZXguY3NzLmNsYXNzJ10gfHwgJycp%0AOyB9LAogICAgICAgICAgb3BhY2l0eTogMCwKICAgICAgICAgIC8vIGZpbGw6IGZ1%0AbmN0aW9uKGQpIHsgcmV0dXJuICd1cmwoI2ltYWdlXycrZC5pZCsnKSc7IH0KICAg%0AICAgICB9KQogICAgICAgIC5jYWxsKHN0eWxlTm9kZXMpCiAgICAgICAgLm9uKCdj%0AbGljaycsIHNob3dJbmZvKQogICAgICAgIC5vbignZGJsY2xpY2snLCBmdW5jdGlv%0AbihkKSB7CiAgICAgICAgICBpZiAoISBuMy5zZWxlY3RlZE5ldHdvcmsgfHwgZC5p%0AZCAhPSBuMy5zZWxlY3RlZE5ldHdvcmsuaWQpIHsKICAgICAgICAgICAgbjMuc2Vs%0AZWN0ZWROZXR3b3JrID0gZDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg%0AIG4zLnNlbGVjdGVkTmV0d29yayA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAg%0AICBuMy51cGRhdGVTZWxlY3RlZE5ldHdvcmsoKQogICAgICAgICAgbjMuY29udGFp%0AbmVyLnNlbGVjdCgnLnNjcmVlbicpLmNsYXNzZWQoeyduZXR3b3JrLXNlbGVjdGVk%0AJzogbjMuc2VsZWN0ZWROZXR3b3JrfSkKICAgICAgICAgIG4zLnNlbGVjdGVkID0g%0AbjMuc2VsZWN0ZWROZXR3b3JrOwogICAgICAgICAgbjMubW92ZVRvb2x0aXAoKTsK%0AICAgICAgICAgIGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIH0p%0ACiAgICAgICAgLm9uKCdtb3VzZW92ZXInLCBmdW5jdGlvbihkKSB7CiAgICAgICAg%0AICBkMy5zZWxlY3QodGhpcykKICAgICAgICAgICAgLnRyYW5zaXRpb24oKQogICAg%0AICAgICAgICAuZHVyYXRpb24oMjAwKQogICAgICAgICAgICAuc3R5bGUoJ3N0cm9r%0AZS13aWR0aCcsIHBhcnNlRmxvYXQoZFsndmVydGV4Lmx3ZCddKSs1KTsKICAgICAg%0AICB9KQogICAgICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbihkKSB7CiAgICAg%0AICAgICBkMy5zZWxlY3QodGhpcykKICAgICAgICAgICAgLnRyYW5zaXRpb24oKQog%0AICAgICAgICAgICAuZHVyYXRpb24oMjAwKQogICAgICAgICAgICAuc3R5bGUoJ3N0%0Acm9rZS13aWR0aCcsIGRbJ3ZlcnRleC5sd2QnXSk7CiAgICAgICAgfSkKICAgICAg%0AICAudHJhbnNpdGlvbigpCiAgICAgICAgLmR1cmF0aW9uKGVudGVyRXhpdER1cmF0%0AaW9uKQogICAgICAgIC5hdHRyKCdvcGFjaXR5JywgMSkKCiAgICB9CgogICAgdmFy%0AIGltYWdlcyA9IG4zLmRvbVRhcmdldC5zZWxlY3QoJ2RlZnMnKS5zZWxlY3RBbGwo%0AJy5ub2RlLWltYWdlJykuZGF0YShkMy52YWx1ZXMocmVuZGVyRGF0YS5ub2RlKS5m%0AaWx0ZXIoZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5pbWFnZTsgfSksIGZ1bmN0aW9u%0AKG4pIHsgcmV0dXJuIG4uaWQ7IH0pCiAgICAgIGltYWdlcy5lbnRlcigpCiAgICAg%0AICAgLmFwcGVuZCgncGF0dGVybicpLmF0dHIoewogICAgICAgIGlkOiBmdW5jdGlv%0AbihkKSB7IHJldHVybiAnaW1hZ2VfJytkLmlkOyB9LAogICAgICAgIGNsYXNzOiAn%0Abm9kZS1pbWFnZScsCiAgICAgICAgdmlld0JveDoiMCAwIDEwMCAxMDAiLAogICAg%0AICAgIC8vIHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUiLCAKICAgICAgICAvLyAn%0AcGF0dGVyblVuaXRzJzogJ3VzZXJTcGFjZU9uVXNlJywKICAgICAgICB3aWR0aDog%0AMTAsCiAgICAgICAgaGVpZ2h0OjEwCiAgICAgIH0pLmFwcGVuZCgnaW1hZ2UnKS5h%0AdHRyKHsKICAgICAgICAneGxpbms6aHJlZic6IGZ1bmN0aW9uKGQpIHsgcmV0dXJu%0AIGQuaW1hZ2U7IH0sCiAgICAgICAgd2lkdGg6IDEwLAogICAgICAgIGhlaWdodDox%0AMCAgICAgICAgCiAgICAgIH0pCgogICAgICBpbWFnZXMuc2VsZWN0KCdpbWFnZScp%0ALnRyYW5zaXRpb24oKQogICAgICAgIC5kZWxheShlbnRlckV4aXREdXJhdGlvbikK%0AICAgICAgICAuZHVyYXRpb24odXBkYXRlRHVyYXRpb24pCiAgICAgICAgLmF0dHIo%0AewogICAgICAgICAgJ3hsaW5rOmhyZWYnOiBmdW5jdGlvbihkKSB7IHJldHVybiBk%0ALmltYWdlOyB9CiAgICAgICAgfSk7CgogICAgICBpbWFnZXMuZXhpdCgpCiAgICAg%0AICAgLnRyYW5zaXRpb24oKQogICAgICAgIC5kdXJhdGlvbihlbnRlckV4aXREdXJh%0AdGlvbikKICAgICAgICAucmVtb3ZlKCk7IAoKICAgIHZhciBub2RlcyA9IG4zLmNv%0AbnRhaW5lci5zZWxlY3RBbGwoJy5ub2RlJykuZGF0YShkMy52YWx1ZXMocmVuZGVy%0ARGF0YS5ub2RlKSwgZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5pZDsgfSkKCiAgICAg%0AIHZhciBub2RlX2dyb3VwcyA9IG5vZGVzLmVudGVyKCkuYXBwZW5kKCdnJykuY2xh%0Ac3NlZCh7J25vZGVfZ3JvdXAnIDogdHJ1ZX0pOwogICAgICBub2RlX2dyb3Vwcy5m%0AaWx0ZXIoZnVuY3Rpb24oZCkgeyByZXR1cm4gZFsndmVydGV4LnNpZGVzJ10gIT0g%0ANTA7IH0pLmFwcGVuZCgncG9seWdvbicpLmNhbGwoY3JlYXRlTm9kZXMpOwogICAg%0AICBub2RlX2dyb3Vwcy5maWx0ZXIoZnVuY3Rpb24oZCkgeyByZXR1cm4gZFsndmVy%0AdGV4LnNpZGVzJ10gPT0gNTA7IH0pLmFwcGVuZCgnY2lyY2xlJykuY2FsbChjcmVh%0AdGVOb2Rlcyk7CgogICAgICBpZiAoIWVudGVyRXhpdER1cmF0aW9uKSB7bm9kZXMu%0AYXR0cih7b3BhY2l0eTogMX0pOyB9CgogICAgICBub2Rlcy5maWx0ZXIoJy5ub2Rl%0AJykudHJhbnNpdGlvbigpCiAgICAgICAgLmRlbGF5KGVudGVyRXhpdER1cmF0aW9u%0AKQogICAgICAgIC5kdXJhdGlvbih1cGRhdGVEdXJhdGlvbikKICAgICAgICAuYXR0%0Acignb3BhY2l0eScsIDEpCiAgICAgICAgLmNhbGwoc3R5bGVOb2RlcykKCiAgICAg%0AIG5vZGVzLmV4aXQoKQogICAgICAgIC50cmFuc2l0aW9uKCkKICAgICAgICAuZHVy%0AYXRpb24oZW50ZXJFeGl0RHVyYXRpb24pCiAgICAgICAgLmF0dHIoJ29wYWNpdHkn%0ALCAwKQogICAgICAgIC5yZW1vdmUoKTsgCgogICAgaWYgKHJlbmRlckRhdGEuZ3Jh%0AcGgudXNlYXJyb3dzKSB7CiAgICAgIHZhciBtYXJrZXJzID0gbjMuZG9tVGFyZ2V0%0ALnNlbGVjdCgnZGVmcycpLnNlbGVjdEFsbCgnLmFycm93aGVhZCcpLmRhdGEoZDMu%0AdmFsdWVzKHJlbmRlckRhdGEuZWRnZSksIGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGUu%0AaWR9KQogICAgICAgIG1hcmtlcnMuZW50ZXIoKS5hcHBlbmQoJ21hcmtlcicpLmF0%0AdHIoewogICAgICAgICAgaWQ6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuICdhcnJvd2hl%0AYWRfJytkLmlkOyB9LAogICAgICAgICAgY2xhc3M6ICdhcnJvd2hlYWQnLAogICAg%0AICAgICAgdmlld0JveDogIjAgLTEgMiAyIiwKICAgICAgICAgIG1hcmtlcldpZHRo%0AOiBzY2FsZUFycm93aGVhZHMsCiAgICAgICAgICBtYXJrZXJIZWlnaHQ6IHNjYWxl%0AQXJyb3doZWFkcywKICAgICAgICAgIG9yaWVudDogImF1dG8iLAogICAgICAgIH0p%0ALmFwcGVuZCgic3ZnOnBhdGgiKQogICAgICAgICAgLmF0dHIoewogICAgICAgICAg%0AICBkOiAiTTAsLTFMMiwwTDAsMSIsCiAgICAgICAgICAgIGZpbGw6ICdncmVlbicK%0AICAgICAgICAgIH0pOwoKICAgICAgICBtYXJrZXJzLnNlbGVjdCgncGF0aCcpLnRy%0AYW5zaXRpb24oKQogICAgICAgICAgLmRlbGF5KGVudGVyRXhpdER1cmF0aW9uKQog%0AICAgICAgICAgLmR1cmF0aW9uKHVwZGF0ZUR1cmF0aW9uKQogICAgICAgICAgLmF0%0AdHIoewogICAgICAgICAgICBmaWxsOiBmdW5jdGlvbihkKSB7IHJldHVybiBkWydl%0AZGdlLmNvbCddOyB9LAogICAgICAgICAgICAnZmlsbC1vcGFjaXR5JzogZnVuY3Rp%0Ab24oZCkgeyByZXR1cm4gZFsnZWRnZS5jb2wuc3Ryb2tlLW9wYWNpdHknXTsgfQog%0AICAgICAgICAgfSkKCiAgICAgICAgbWFya2Vycy5leGl0KCkuc2VsZWN0QWxsKCdw%0AYXRoJykKICAgICAgICAgIC5hdHRyKHsKICAgICAgICAgICAgZmlsbDogJ3JlZCcK%0AICAgICAgICAgIH0pCiAgICAgICAgCiAgICAgICAgbWFya2Vycy5leGl0KCkudHJh%0AbnNpdGlvbigpCiAgICAgICAgICAuZGVsYXkoZHVyYXRpb24pCiAgICAgICAgICAu%0AZHVyYXRpb24oMCkKICAgICAgICAgIC5yZW1vdmUoKQogICAgfQoKICAgIHZhciBs%0AaW5lcyA9IG4zLmNvbnRhaW5lci5zZWxlY3RBbGwoJy5lZGdlJykuZGF0YShkMy52%0AYWx1ZXMocmVuZGVyRGF0YS5lZGdlKSwgZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5p%0AZH0pCiAgICAgIGxpbmVzLmVudGVyKCkuYXBwZW5kKCdwYXRoJykKICAgICAgICAu%0AYXR0cih7CiAgICAgICAgICBjbGFzczogZnVuY3Rpb24oZCkgeyByZXR1cm4gJ2Vk%0AZ2UgZWRnZV8nK2QuaWQrJyAnKyhkWydlZGdlLmNzcy5jbGFzcyddIHx8ICcnKTsg%0AfSwgICAgIAogICAgICAgICAgb3BhY2l0eTogMCwKICAgICAgICAgICJtYXJrZXIt%0AZW5kIjogZnVuY3Rpb24oZCkgeyBpZihyZW5kZXJEYXRhLmdyYXBoLnVzZWFycm93%0AcykgeyByZXR1cm4gInVybCgjYXJyb3doZWFkXyIrZC5pZCsiKSI7IH19CiAgICAg%0AICAgfSkKICAgICAgICAuc3R5bGUoewogICAgICAgICAgJ3N0cm9rZSc6ICdncmVl%0AbicsCiAgICAgICAgICAnc3Ryb2tlLXdpZHRoJzogZnVuY3Rpb24oZCkgeyByZXR1%0Acm4gZFsnZWRnZS5sd2QnXTsgfQogICAgICAgIH0pCiAgICAgICAgLmNhbGwobjMu%0AZHJhd0VkZ2UsIG4zLCByZW5kZXJEYXRhLmdyYXBoLnVzZWFycm93cywgMSkKICAg%0AICAgICAub24oJ2NsaWNrJywgc2hvd0luZm8pCiAgICAgICAgLm9uKCdtb3VzZW92%0AZXInLCBmdW5jdGlvbihkKSB7CiAgICAgICAgICB2YXIgZWRnZSA9IGQzLnNlbGVj%0AdCh0aGlzKTsKICAgICAgICAgIHZhciBsaW5lID0gJ00gJytkLmN1cnJlbnRDb29y%0AZHNbMF1bMF0udG9GaXhlZCgxKSsnICcrZC5jdXJyZW50Q29vcmRzWzBdWzFdLnRv%0ARml4ZWQoMSkrJyBMICcrZC5jdXJyZW50Q29vcmRzWzFdWzBdLnRvRml4ZWQoMSkr%0AJyAnK2QuY3VycmVudENvb3Jkc1sxXVsxXS50b0ZpeGVkKDEpOwogICAgICAgICAg%0AaWYgKHJlbmRlckRhdGEuZ3JhcGgudXNlYXJyb3dzKSB7CiAgICAgICAgICAgIHZh%0AciBvZmZzZXRQb2ludHMgPSBvZmZzZXRMaW5lKFtkLmN1cnJlbnRDb29yZHNbMF1b%0AMF0sIGQuY3VycmVudENvb3Jkc1swXVsxXV0sIFtkLmN1cnJlbnRDb29yZHNbMV1b%0AMF0sIGQuY3VycmVudENvb3Jkc1sxXVsxXV0sIChzY2FsZUFycm93aGVhZHMoZCkq%0ANSkpOwogICAgICAgICAgICBsaW5lID0gJ00gJytkLmN1cnJlbnRDb29yZHNbMF1b%0AMF0udG9GaXhlZCgxKSsnICcrZC5jdXJyZW50Q29vcmRzWzBdWzFdLnRvRml4ZWQo%0AMSkrJyBMICcrb2Zmc2V0UG9pbnRzWzBdLnRvRml4ZWQoMSkrJyAnK29mZnNldFBv%0AaW50c1sxXS50b0ZpeGVkKDEpOyAgICAgCiAgICAgICAgICB9CiAgICAgICAgICBl%0AZGdlLnRyYW5zaXRpb24oKQogICAgICAgICAgICAuZHVyYXRpb24oMjAwKQogICAg%0AICAgICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsIHBhcnNlRmxvYXQoZFsnZWRn%0AZS5sd2QnXSkrNSkKICAgICAgICAgICAgLmF0dHIoJ2QnLCBsaW5lKTsKICAgICAg%0AICB9KQogICAgICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbihkKSB7CiAgICAg%0AICAgICBkMy5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpCiAgICAgICAgICAgIC5k%0AdXJhdGlvbigyMDApCiAgICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywg%0AZFsnZWRnZS5sd2QnXSkKICAgICAgICAgICAgLmNhbGwobjMuZHJhd0VkZ2UsIG4z%0ALCByZW5kZXJEYXRhLmdyYXBoLnVzZWFycm93cywgZmFsc2UpCiAgICAgICAgfSkK%0AICAgICAgICAudHJhbnNpdGlvbigpCiAgICAgICAgLmR1cmF0aW9uKGVudGVyRXhp%0AdER1cmF0aW9uKQogICAgICAgIC5hdHRyKHtvcGFjaXR5OiAxfSkKCiAgICAgIGlm%0AICghZW50ZXJFeGl0RHVyYXRpb24pIHtsaW5lcy5hdHRyKHtvcGFjaXR5OiAxfSk7%0AIH0KICAgICAgCiAgICAgIGxpbmVzLnRyYW5zaXRpb24oKQogICAgICAgIC5kZWxh%0AeShlbnRlckV4aXREdXJhdGlvbikKICAgICAgICAuZHVyYXRpb24odXBkYXRlRHVy%0AYXRpb24pCiAgICAgICAgLnN0eWxlKHsKICAgICAgICAgICdzdHJva2UnOiBmdW5j%0AdGlvbihkKSB7IHJldHVybiBkWydlZGdlLmNvbCddfSwKICAgICAgICAgICdzdHJv%0Aa2Utb3BhY2l0eSc6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGRbJ2VkZ2UuY29sLnN0%0Acm9rZS1vcGFjaXR5J107IH0sCiAgICAgICAgICAnc3Ryb2tlLXdpZHRoJzogZnVu%0AY3Rpb24oZCkgeyByZXR1cm4gZFsnZWRnZS5sd2QnXTsgfSwKICAgICAgICB9KQog%0AICAgICAgIC5jYWxsKG4zLmRyYXdFZGdlLCBuMywgcmVuZGVyRGF0YS5ncmFwaC51%0Ac2VhcnJvd3MpCiAgICAgICAgLmF0dHIoe29wYWNpdHk6IDF9KQoKICAgICAgbGlu%0AZXMuZXhpdCgpCiAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAncmVkJykKICAgICAg%0AICAudHJhbnNpdGlvbigpCiAgICAgICAgLmR1cmF0aW9uKGVudGVyRXhpdER1cmF0%0AaW9uKQogICAgICAgIC5hdHRyKCdvcGFjaXR5JywgMCkgICAgICAgICAgCiAgICAg%0AICAgLnJlbW92ZSgpOwoKICAgIHZhciBsYWJlbHMgPSBuMy5jb250YWluZXIuc2Vs%0AZWN0KCcubGFiZWxzJykuc2VsZWN0QWxsKCd0ZXh0JykuZGF0YShkMy52YWx1ZXMo%0AcmVuZGVyRGF0YS5ub2RlKSwgZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5pZH0pOwog%0AICAgICBsYWJlbHMuZW50ZXIoKS5hcHBlbmQoJ3RleHQnKS5maWx0ZXIoZnVuY3Rp%0Ab24oZCkgeyByZXR1cm4gcmVuZGVyRGF0YS5ncmFwaC5kaXNwbGF5bGFiZWxzOyB9%0AKQogICAgICAgIC5hdHRyKHsKICAgICAgICAgIGNsYXNzOiBmdW5jdGlvbihkKSB7%0AIHJldHVybiAnbGFiZWwgbGFiZWxfJytkLmlkKyAnICcrIChkWyd2ZXJ0ZXgubGFi%0AZWwuY3NzLmNsYXNzJ10gfHwgJycpOyB9LAogICAgICAgICAgb3BhY2l0eTogMAog%0AICAgICAgIH0pCiAgICAgICAgLmNhbGwobjMuZHJhd05vZGVMYWJlbCwgbjMpCiAg%0AICAgICAgLnRleHQoZnVuY3Rpb24oZCwgaSkgeyByZXR1cm4gZC5sYWJlbDsgfSkK%0AICAgICAgICAuc3R5bGUoewogICAgICAgICAgJ2ZpbGwnOiBmdW5jdGlvbihkKSB7%0AcmV0dXJuIGRbJ2xhYmVsLmNvbCddOyB9LAogICAgICAgICAgJ2ZpbGwtb3BhY2l0%0AeSc6IGZ1bmN0aW9uKGQpIHtyZXR1cm4gZFsnbGFiZWwuY29sLmZpbGwtb3BhY2l0%0AeSddOyB9LAogICAgICAgICAgJ2ZvbnQtc2l6ZSc6IGZ1bmN0aW9uKGQpIHsgcmV0%0AdXJuIG4zLm9wdGlvbnMuYmFzZUZvbnRTaXplICogZFsnbGFiZWwuY2V4J10rJ3B4%0AJzt9CiAgICAgICAgfSkKICAgICAgICAudHJhbnNpdGlvbigpCiAgICAgICAgLmRl%0AbGF5KDApCiAgICAgICAgLmR1cmF0aW9uKGVudGVyRXhpdER1cmF0aW9uKQogICAg%0AICAgIC5hdHRyKHtvcGFjaXR5OiAxfSkKCiAgICAgIGlmICghZW50ZXJFeGl0RHVy%0AYXRpb24pIHtsYWJlbHMuYXR0cih7b3BhY2l0eTogMX0pOyB9CgogICAgICBsYWJl%0AbHMudHJhbnNpdGlvbigpLmZpbHRlcihmdW5jdGlvbihkKSB7IHJldHVybiByZW5k%0AZXJEYXRhLmdyYXBoLmRpc3BsYXlsYWJlbHM7IH0pCiAgICAgICAgLmRlbGF5KGVu%0AdGVyRXhpdER1cmF0aW9uKQogICAgICAgIC5kdXJhdGlvbih1cGRhdGVEdXJhdGlv%0AbikKICAgICAgICAuY2FsbChuMy5kcmF3Tm9kZUxhYmVsLCBuMykKICAgICAgICAv%0ALy5hdHRyKHtvcGFjaXR5OiAxfSkKICAgICAgICAudGV4dChmdW5jdGlvbihkLCBp%0AKSB7IHJldHVybiBkLmxhYmVsOyB9KQogICAgICAgIC5zdHlsZSh7CiAgICAgICAg%0AICAnZmlsbCc6IGZ1bmN0aW9uKGQpIHtyZXR1cm4gZFsnbGFiZWwuY29sJ107IH0s%0ACiAgICAgICAgICAnZmlsbC1vcGFjaXR5JzogZnVuY3Rpb24oZCkge3JldHVybiBk%0AWydsYWJlbC5jb2wuZmlsbC1vcGFjaXR5J107IH0sCiAgICAgICAgfSkKCiAgICAg%0AIGxhYmVscy5leGl0KCkKICAgICAgICAudHJhbnNpdGlvbigpCiAgICAgICAgLmR1%0AcmF0aW9uKGVudGVyRXhpdER1cmF0aW9uKQogICAgICAgIC5hdHRyKCdvcGFjaXR5%0AJywgMCkKICAgICAgICAucmVtb3ZlKCk7CgogICAgICBuMy51cGRhdGVTZWxlY3Rl%0AZE5ldHdvcmsoKTsKICAKICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKTsKICAg%0AICAgZDMudGltZXIoZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKG4zLnNlbGVjdGVk%0AICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgIG4zLm1vdmVUb29sdGlwKCk7CiAg%0AICAgICAgfQogICAgICAgIHJldHVybiBEYXRlLm5vdygpID49IHN0YXJ0ICtkdXJh%0AdGlvbjsgCiAgICAgIH0pCiAgICAgIC8vIGNvbnNvbGUucHJvZmlsZUVuZCgndXBk%0AYXRlICcrbjMuY3VyclRpbWUpOwogIH0KCiAgLyoqIHJlc2l6ZXMgZ3JhcGggYW5k%0AIG90aGVyIGRpc3BsYXkgZWxlbWVudHMgdG8gZmlsbCB0aGUgdGFyZ2V0IHZpZXdw%0Ab3J0ICovCiAgbjMucHJvdG90eXBlLnJlc2l6ZUdyYXBoID0gZnVuY3Rpb24oKSB7%0ACiAgICB2YXIgbjMgPSB0aGlzOwogICAgbjMudXBkYXRlRGltZW5zaW9ucygpOwoK%0ACiAgICBuMy5jb250YWluZXIuc2VsZWN0QWxsKCdjaXJjbGUubm9kZScpLmNhbGwo%0AbjMuZHJhd0NpcmNsZU5vZGUsIG4zKQogICAgbjMuY29udGFpbmVyLnNlbGVjdEFs%0AbCgncG9seWdvbi5ub2RlJykuY2FsbChuMy5kcmF3UG9seWdvbk5vZGUsIG4zKQoK%0AICAgIG4zLmNvbnRhaW5lci5zZWxlY3RBbGwoJy5lZGdlJykuY2FsbChuMy5kcmF3%0ARWRnZSwgbjMsIG4zLnRpbWVJbmRleFtuMy5jdXJyVGltZV0ucmVuZGVyRGF0YS5n%0AcmFwaC51c2VhcnJvd3MpCgogICAgbjMuY29udGFpbmVyLnNlbGVjdCgnLmxhYmVs%0AcycpLnNlbGVjdEFsbCgndGV4dCcpLmNhbGwobjMuZHJhd05vZGVMYWJlbCwgbjMp%0ACgogICAgbjMubW92ZVRvb2x0aXAoKTsKICAgIC8vcmVkcmF3IHRoZSBzbGlkZXIg%0AY29udHJvbCAKICAgIGlmIChuMy5vcHRpb25zLnNsaWRlcikgewogICAgICB2YXIg%0Ac2xpZGVyRGl2ID0gbjMuZG9tVGFyZ2V0LnNlbGVjdCgnLnNsaWRlcicpOwogICAg%0AICBzbGlkZXJEaXYuaHRtbCgnJyk7CiAgICAgIHNsaWRlckRpdi5jYWxsKG4zLnNs%0AaWRlcik7CiAgICB9IAogIH0KICAKICAvKiogZ3JhcGggYW5pbWF0aW9uIGNvbnRy%0Ab2xsZXIKICAqIEBwYXJhbSB7aW50ZWdlcn0gLSByZW5kZXIgdGhlIGdyYXBoIHRv%0AIHRoZSBzdGF0ZSBhdCB0aGlzIHRpbWVzbGljZSBpbmRleAogICogQHBhcmFtIHtp%0AbnRlZ2VyfSAtIGZ1bmN0aW9uIHdpbGwgcmVjdXJzaXZlbHkgY2FsbCBpdHNlbGYg%0AdW50aWwgdGltZSBlcXVhbHMgdGhpcyB2YWx1ZQogICogQHBhcmFtIHtib29sZWFu%0AfSAtIHNob3VsZCB0aGUgZ3JhcGggdXBkYXRlIGltbWVkaWF0ZWx5LCBvciBhbmlt%0AYXRlPwogICovCiAgbjMucHJvdG90eXBlLmFuaW1hdGVHcmFwaCA9IGZ1bmN0aW9u%0AKHRpbWUsIGVuZFRpbWUsIGltbWVkaWF0ZSkgewogICAgdmFyIG4zID0gdGhpczsK%0AICAgIGlmICh0aW1lID4gbjMudGltZUluZGV4Lmxlbmd0aCAtMSB8fCB0aW1lIDwg%0AMCkgeyByZXR1cm47IH0KCiAgICB2YXIgZHVyYXRpb24gPSBpbW1lZGlhdGUgPyAw%0AIDogbjMub3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbjsKICAgIGVuZFRpbWUgPSBl%0AbmRUaW1lID09PSB1bmRlZmluZWQgPyBuMy50aW1lSW5kZXgubGVuZ3RoIC0xIDog%0AZW5kVGltZTsKICAgIHZhciBuZXh0VGltZTsKICAgIGlmICh0aW1lID09IGVuZFRp%0AbWUpIHsKICAgICAgbmV4dFRpbWUgPSB0aW1lOwogICAgfSBlbHNlIGlmIChlbmRU%0AaW1lID4gdGltZSkgewogICAgICBuZXh0VGltZSA9IHRpbWUgKzE7CiAgICB9IGVs%0Ac2UgewogICAgICBuZXh0VGltZSA9IHRpbWUgLTE7CiAgICB9CgogICAgbjMuY3Vy%0AclRpbWUgPSB0aW1lID09IG4zLmN1cnJUaW1lID8gbmV4dFRpbWUgOiB0aW1lOwog%0AICAgLy9jb25zb2xlLmxvZyhuMy5jdXJyVGltZSArICcgJyt0aW1lKycgJytlbmRU%0AaW1lKyAnICcrbmV4dFRpbWUrICcgJytuMy5wcmV2VGltZSkKICAgIGlmKCEgaW1t%0AZWRpYXRlICYmIG4zLm9wdGlvbnMuc2xpZGVyKSB7CiAgICAgIG4zLnNsaWRlci52%0AYWx1ZShuMy50aW1lSW5kZXhbbjMuY3VyclRpbWVdLnN0YXJ0WzBdKTsKICAgIH0K%0AICAgIG4zLnVwZGF0ZUdyYXBoKGR1cmF0aW9uKTsKICAgIGlmIChuMy5jdXJyVGlt%0AZSAhPSBlbmRUaW1lKSB7CiAgICAgIG4zLmFuaW1hdGUgPSBzZXRUaW1lb3V0KGZ1%0AbmN0aW9uKCl7CiAgICAgICAgbjMuYW5pbWF0ZUdyYXBoKG5leHRUaW1lLCBlbmRU%0AaW1lLCBpbW1lZGlhdGUpOwogICAgICB9LCBkdXJhdGlvbikKICAgIH0KICB9Cgog%0AIC8qKiByZWRyYXcgdGhlIGluZm8gcG9wb3ZlciAvL0ZJWE1FIC0gbmVlZHMgcmVu%0AYW1lZCAqLwogIG4zLnByb3RvdHlwZS5tb3ZlVG9vbHRpcCA9IGZ1bmN0aW9uKCkg%0AewogICAgLy8gY29uc29sZS5wcm9maWxlKCdtb3ZlVG9vbHRpcCcpOwogICAgdmFy%0AIG4zID0gdGhpczsKICAgIGlmIChuMy5zZWxlY3RlZCkgewogICAgICB2YXIgaXRl%0AbSA9IG4zLnNlbGVjdGVkOwogICAgICB2YXIgdHlwZSA9IGl0ZW0uaW5sID8gJ2Vk%0AZ2UnIDogJ25vZGUnOwogICAgICB2YXIgbm9kZURPTSA9IG4zLmNvbnRhaW5lci5z%0AZWxlY3QoJy4nK3R5cGUrJ18nK2l0ZW0uaWQpLm5vZGUoKTsKICAgICAgaWYgKCFu%0Ab2RlRE9NKSB7CiAgICAgICAgbjMuaGlkZVRvb2x0aXAoKTsKICAgICAgfSBlbHNl%0AIHsKICAgICAgICB2YXIgY29vcmRzID0gbjMuY29udmVydENvb3JkcyhpdGVtKTsK%0AICAgICAgICB2YXIgcHJvcGVydHkgPSAndmVydGV4LnRvb2x0aXAnOwogICAgICAg%0AIGlmICh0eXBlID09ICdlZGdlJykgewogICAgICAgICAgcHJvcGVydHkgPSAnZWRn%0AZS50b29sdGlwJzsKICAgICAgICB9CiAgICAgICAgdmFyIGh0bWwgPSBuMy5zZWxl%0AY3RlZFtwcm9wZXJ0eV0gfHwgdHlwZSsiIGlkOiAiK24zLnNlbGVjdGVkLmlkOwog%0AICAgICAgIG4zLnRvb2x0aXAuc3R5bGUoewogICAgICAgICAgZGlzcGxheTogJ2Js%0Ab2NrJywKICAgICAgICAgIGJvdHRvbTogY29vcmRzWzFdKydweCcsCiAgICAgICAg%0AICBsZWZ0OiBjb29yZHNbMF0rJ3B4JywKICAgICAgICB9KS5odG1sKGh0bWwpCiAg%0AICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIG4zLmhpZGVUb29sdGlwKCk7CiAgICB9%0ACiAgICAvLyBjb25zb2xlLnByb2ZpbGVFbmQoJ21vdmVUb29sdGlwJyk7CiAgfQoK%0AICAvKiogZ2V0IGNlbnRlciBwb2ludCBvZiBlZGdlIG9yIG5vZGUsIGluIERPTSBw%0AaXhlbHMgKi8KICBuMy5wcm90b3R5cGUuY29udmVydENvb3JkcyA9IGZ1bmN0aW9u%0AKGl0ZW0pIHsKICAgIHZhciBuMyA9IHRoaXM7CiAgICB2YXIgdHlwZSA9IGl0ZW0u%0AaW5sID8gJ2VkZ2UnIDogJ25vZGUnOwogICAgdmFyIG5vZGVET00gPSBuMy5jb250%0AYWluZXIuc2VsZWN0KCcuJyt0eXBlKydfJytpdGVtLmlkKS5ub2RlKCk7CiAgICB2%0AYXIgY3RtID0gbjMuY3RtOwogICAgdmFyIHgsIHk7CiAgICB2YXIgYmJveCA9IG5v%0AZGVET00uZ2V0QkJveCgpOwogICAgdmFyIGNlbnRlciA9IHsKICAgICAgeDogYmJv%0AeC54ICsgYmJveC53aWR0aC8yLAogICAgICB5OiBiYm94LnkgKyBiYm94LmhlaWdo%0AdC8yCiAgICB9CiAgICBpZiAodHlwZSA9PSAnbm9kZScpIHsKICAgICAgaWYgKG5v%0AZGVET00udGFnTmFtZSA9PSAncG9seWdvbicpIHsKICAgICAgICB2YXIgcG9pbnRz%0AID0gJCgncG9seWdvbi5ub2RlXycraXRlbS5pZCkuYXR0cigncG9pbnRzJykuc3Bs%0AaXQoJyAnKS5tYXAoZnVuY3Rpb24ocCkgeyAKICAgICAgICAgIHJldHVybiBwLnNw%0AbGl0KCcsJykubWFwKHBhcnNlRmxvYXQpOwogICAgICAgIH0pCiAgICAgICAgdmFy%0AIHBvaW50ID0gZmluZFBvbHlnb25JbnRlcnNlY3Rpb24ocG9pbnRzLCBbYmJveC54%0AICsgYmJveC53aWR0aCwgYmJveC55XSwgW2NlbnRlci54LCBjZW50ZXIueV0pCiAg%0AICAgICAgeCA9IHBvaW50WzBdOwogICAgICAgIHkgPSBwb2ludFsxXTsKICAgICAg%0AfSBlbHNlIHsKICAgICAgICB2YXIgc2l6ZSA9IHBhcnNlRmxvYXQobm9kZURPTS5n%0AZXRBdHRyaWJ1dGUoJ3InKSk7CiAgICAgICAgdmFyIGFuZ2xlID0gLU1hdGguUEkv%0ANDsKICAgICAgICB4ID0gY2VudGVyLnggKyBzaXplICogTWF0aC5jb3MoYW5nbGUp%0AOwogICAgICAgIHkgPSBjZW50ZXIueSArIHNpemUgKiBNYXRoLnNpbihhbmdsZSk7%0ACiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHggPSBjZW50ZXIueDsKICAgICAg%0AeSA9IGNlbnRlci55OwogICAgfQogICAgLy8gdmFyIG9mZnNldENvb3JkcyA9IG9m%0AZnNldExpbmUoIFtjZW50ZXIueCwgY2VudGVyLnldLFt4LCB5XSxuZHR2UHJvcGVy%0AdGllcy5ncmFwaC50b29sdGlwT2Zmc2V0KQogICAgLy8geCA9IG9mZnNldENvb3Jk%0Ac1swXTsKICAgIC8vIHkgPSBvZmZzZXRDb29yZHNbMV07CgogICAgdmFyIGxlZnQg%0APSAoeCpjdG0uYSkgKyBjdG0uZSAtIG4zLm9mZnNldC5sZWZ0IC0gJCh3aW5kb3cp%0ALnNjcm9sbExlZnQoKSArMTsKICAgIHZhciBib3R0b20gPSBuMy5oZWlnaHQgLSh5%0AKmN0bS5kKS1jdG0uZiArIG4zLm9mZnNldC50b3AgLSAkKHdpbmRvdykuc2Nyb2xs%0AVG9wKCkgKzE7CiAgICByZXR1cm4gW2xlZnQsIGJvdHRvbV07CiAgfQoKICAvKiog%0AaGlkZSB0aGUgdG9vbHRpcCBhbmQgdW5zZXQgdGhlIHNlbGVjdGVkIGdsb2JhbCAq%0ALwogIG4zLnByb3RvdHlwZS5oaWRlVG9vbHRpcCA9IGZ1bmN0aW9uKCkgewogICAg%0AdmFyIG4zID0gdGhpczsKICAgIG4zLnNlbGVjdGVkID0gbnVsbDsKICAgIG4zLnRv%0Ab2x0aXAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpOwogIH0KCiAgLyoqIHN0b3Ag%0AdGhlIGN1cnJlbnQgYW5pbWF0aW9uIGN5Y2xlCiAgKiBAcGFyYW0ge2Jvb2xlYW59%0AIC0gaWYgdHJ1ZSwgaW1tZWRpYXRlIGhhbHQgYWxsIGFjdGl2ZSB0cmFuc2l0aW9u%0AcyAob3RoZXJ3aXNlLCBsZXQgYW5pbWF0aW9uIGNvbnRpbnVlIHRvIG5leHQgdGlt%0AZSBzbGljZSkKICAqLwogIG4zLnByb3RvdHlwZS5lbmRBbmltYXRpb24gPSBmdW5j%0AdGlvbihub0hhbHQpewogICAgdmFyIG4zID0gdGhpczsKICAgIGNsZWFyVGltZW91%0AdChuMy5hbmltYXRlKTsKICAgIGlmICghIG5vSGFsdCkgewogICAgICBuMy5kb21U%0AYXJnZXQuc2VsZWN0QWxsKCcubm9kZSwgLmVkZ2UsIC5sYWJlbCwgLmQzLXNsaWRl%0Aci1oYW5kbGUnKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkKICAgIH0KICB9Cgog%0AIC8qKiBzdGVwIHRoZSBhbmltYXRpb24gYnkgb25lIHRpbWUgc2xpY2UKICAqIEBw%0AYXJhbSB7Ym9vbGVhbn0gLSBpZiB0cnVlLCBnbyB0byBwcmV2aW91cyB0aW1lIHNs%0AaWNlLCBlbHNlIGdvIGZvcndhcmQKICAqLwogIG4zLnByb3RvdHlwZS5zdGVwQW5p%0AbWF0aW9uID0gZnVuY3Rpb24ocmV2ZXJzZSkgewogICAgdmFyIG4zID0gdGhpczsK%0ACiAgICBuMy5lbmRBbmltYXRpb24oMSk7CiAgICBpZiAocmV2ZXJzZSkgewogICAg%0AICBuMy5hbmltYXRlR3JhcGgobjMuY3VyclRpbWUtMSwgbjMuY3VyclRpbWUtMSk7%0AIAogICAgfSBlbHNlIHsKICAgICAgbjMuYW5pbWF0ZUdyYXBoKG4zLmN1cnJUaW1l%0AKzEsIG4zLmN1cnJUaW1lKzEpOyAKICAgIH0KICB9CgogIC8qKiBhbmltYXRlIHRo%0AZSBncmFwaCBvdmVyIGFsbCB0aW1lIHNsaWNlcywgc3RhcnRpbmcgYXQgY3VycmVu%0AdCBzbGljZQogICogQHBhcmFtIHtib29sZWFufSAtIGlmIHRydWUsIGFuaW1hdGUg%0Ac2xpY2VzIGJhY2t3YXJkcyB1bnRpbCBiZWdpbm5pbmcgb2YgdGltZSBpbmRleCwg%0Ab3RoZXIgcGxheSB1bnRpbCBlbmQKICAqLwogIG4zLnByb3RvdHlwZS5wbGF5QW5p%0AbWF0aW9uID0gZnVuY3Rpb24ocmV2ZXJzZSkgewogICAgdmFyIG4zID0gdGhpczsK%0ACiAgICBuMy5lbmRBbmltYXRpb24oMSk7CiAgICBpZiAocmV2ZXJzZSkgeyAKICAg%0AICAgbjMuYW5pbWF0ZUdyYXBoKG4zLmN1cnJUaW1lLTEsIDApOyAKICAgIH0gZWxz%0AZSB7CiAgICAgIG4zLmFuaW1hdGVHcmFwaChuMy5jdXJyVGltZSsxKTsgCiAgICB9%0ACiAgfQogIHJldHVybiBuMzsKfSkpOwo8L3NjcmlwdD48L2hlYWQ+DQogIDxib2R5%0APjxzY3JpcHQ+DQogICAgLy9JTklUIEdSQVBIIERBVEEgSEVSRQ0KICB2YXIgZ3Jh%0AcGhEYXRhID0geyJyZW5kZXIiOlt7InN0YXJ0IjpbMF0sImVuZCI6WzFdLCJkYXRh%0AIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0%0AIjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIx%0AMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwi%0AMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVkZ2VzIjpbXX0sImNvb3Jk%0AIjpbWzEuMDk1MSwyLjY3MDFdLFsyLjc4NDcsLTAuNzcwNV0sWy0wLjQyNTIsLTIu%0AODUzNF0sWy0wLjgyODUsMC45OTU3XSxbMS4wMzc5LDAuODE3OF0sWy0xLjcxNzIs%0ALTIuNDAyNV0sWzIuODU3MSwwLjU1MDFdLFswLjg0NDQsLTEuMDQ4OV0sWy0yLjg1%0ANzEsMC4xMDEyXSxbLTEuMDI2OSwtMC44NzA5XSxbLTIuNjYyNywtMS4yNTUzXSxb%0AMC45MjE0LC0yLjc5NTRdLFsyLjI4MTQsMS44NzIyXSxbLTIuNTQzNCwxLjQwNDNd%0ALFsyLjE3MTEsLTIuMDMyOF0sWy0xLjU2MiwyLjQ3OThdLFstMC4yMTk1LDIuODUz%0ANF1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJlbHMiOltmYWxzZV0s%0AImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJl%0AZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9z%0AdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBO%0AZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwi%0AV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6WyJyZ2JhKDI1NSwy%0ANTUsMjU1LDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJn%0AYmEoNTEsNTEsNTEsMSkiXSwidmVydGV4LmNleCI6WzQsMyw2LjUsNC41LDIuNSwz%0ALDIuNSwyLjUsMiwyLjUsMS41LDMsMiwyLDIuNSwxLjUsMi41XSwidmVydGV4LmNv%0AbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIs%0AInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdi%0AYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1%0ANSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEs%0AMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdi%0AYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIx%0ANSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIs%0AInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UuY29sIjpbXSwidmVydGV4LnRvb2x0%0AaXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4g%0ATmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBvc3QgPGJyPiA8%0AYj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FsbCBTdHJl%0AZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFt%0AZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIs%0AIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3Nw%0AYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+IDxiPlR5cGU6%0APFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJyPiA8Yj5UeXBl%0AOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxiPlR5cGU6PFwv%0AYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+VHlwZTo8XC9i%0APiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIs%0AIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5h%0AbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwi%0APGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25s%0AaW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxiPlR5cGU6PFwv%0AYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8YnI+IDxiPlR5%0AcGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uUG9zdC5j%0Ab20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gQU9M%0ALmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2UudG9vbHRpcCI6%0AWyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwi%0AbWFyIjpbMCwwLDAsMF0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYs%0AMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQiOlsxXSwi%0AZW5kIjpbMl0sImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6%0AWzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6%0AWzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsx%0AMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRn%0AZXMiOnsiMSI6WzBdfX0sImNvb3JkIjpbWzIuODIxMywtMC4xNzQ3XSxbMi42MTU2%0ALC0xLjAzMDZdLFstMC44NTIxLC0yLjcyNTNdLFstMS4wMTkyLDIuNzg4Nl0sWzAu%0ANTc1NiwtMS4xNDIyXSxbLTIuMDU3NywtMi4wNjY5XSxbMS4wNjQ3LDAuODE1Nl0s%0AWzEuODM5MiwtMi4zMjA5XSxbLTEuMTg3MSwtMC42MzI3XSxbMS42NzgxLDIuNDMw%0ANV0sWy0yLjgyMTMsLTAuNzc4MV0sWzAuNDk0OCwtMi44NzcxXSxbMi42NzA0LDEu%0AMzU0NV0sWy0yLjc4ODcsMC42MjEyXSxbLTIuMjUwMSwxLjg4ODhdLFstMC43Mzkx%0ALDEuMTk2NF0sWzAuMzkyNCwyLjg3NzFdXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJk%0AaXNwbGF5bGFiZWxzIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hp%0Abmd0b24gUG9zdCIsIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJM%0AQSBUaW1lcyIsIk5ldyBZb3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdz%0AIiwiQUJDIiwiQkJDIiwiWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVy%0Acy5jb20iLCJOWVRpbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5j%0Ab20iXSwiYmciOlsicmdiYSgyNTUsMjU1LDI1NSwxKSJdLCJ2ZXJ0ZXguYm9yZGVy%0AIjpbInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIl0sInZlcnRleC5j%0AZXgiOls0LDMsNi41LDQuNSwyLjUsMywyLjUsMi41LDIsMi41LDEuNSwzLDIsMiwy%0ALjUsMS41LDIuNV0sInZlcnRleC5jb2wiOlsicmdiYSgxNzksMTc5LDE3OSwxKSIs%0AInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdi%0AYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3%0AOSwxNzksMTc5LDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3%0AMSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJy%0AZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUs%0AMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEp%0AIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdl%0ALmx3ZCI6WzcuMzMzM10sImVkZ2UuY29sIjpbInJnYmEoODUsODUsODUsMC42KSJd%0ALCJ2ZXJ0ZXgudG9vbHRpcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4g%0APGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0%0Ab24gUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8%0AXC9iPiBXYWxsIFN0cmVldCBKb3VybmFsIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdz%0AcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwv%0AYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0%0AIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENO%0ATiA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJy%0APiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8%0AXC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+%0AVHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRlcnMuY29tIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMu%0AY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdh%0Ac2hpbmd0b25Qb3N0LmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+%0ATmFtZTo8XC9iPiBBT0wuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwi%0AZWRnZS50b29sdGlwIjpbIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjAiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiA1IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gNCJdLCJtYXIiOlswLDAsMCwwXSwiaml0dGVyIjpbZmFsc2VdLCJ4%0AbGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwyLjk2MTZdfX0s%0AeyJzdGFydCI6WzJdLCJlbmQiOlszXSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMi%0AOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1%0AXSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEy%0AIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwi%0AMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXX19LCJjb29yZCI6W1sx%0ALjk1NDMsLTEuMjcxOV0sWzEuMzEwMiwtMC42MTg1XSxbMi43ODA2LC0wLjk0MDJd%0ALFstMC4xNzQ1LDAuOTcwOV0sWy0wLjEwODQsMi44MjI4XSxbLTIuMjM0NywtMS45%0AMTI1XSxbMi44MTQ5LDAuNzcyXSxbMS4zMzksLTIuNzM5M10sWy0xLjE3NzgsLTIu%0ANjc4OF0sWzEuMTU2MywyLjU2NzNdLFstMi44MTQ5LC0wLjcyMDldLFswLjA0MTcs%0ALTIuODIyOF0sWzIuMDUwOSwxLjc1Ml0sWy0yLjc4MTYsMC41MjJdLFstMi4yODA3%0ALDEuNjI0OF0sWy0wLjg3ODYsLTAuNjg1M10sWy0xLjM4MDUsMi40ODg5XV0sInVz%0AZWFycm93cyI6W2ZhbHNlXSwiZGlzcGxheWxhYmVscyI6W2ZhbHNlXSwibGFiZWwi%0AOlsiTlkgVGltZXMiLCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxsIFN0cmVldCBKb3Vy%0AbmFsIiwiVVNBIFRvZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9yayBQb3N0IiwiQ05O%0AIiwiTVNOQkMiLCJGT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllhaG9vIE5ld3MiLCJH%0Ab29nbGUgTmV3cyIsIlJldXRlcnMuY29tIiwiTllUaW1lcy5jb20iLCJXYXNoaW5n%0AdG9uUG9zdC5jb20iLCJBT0wuY29tIl0sImJnIjpbInJnYmEoMjU1LDI1NSwyNTUs%0AMSkiXSwidmVydGV4LmJvcmRlciI6WyJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSJdLCJ2ZXJ0ZXguY2V4IjpbNCwzLDYuNSw0LjUsMi41LDMsMi41LDIu%0ANSwyLDIuNSwxLjUsMywyLDIsMi41LDEuNSwyLjVdLCJ2ZXJ0ZXguY29sIjpbInJn%0AYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgx%0ANzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwx%0ANzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMjU1LDk5LDcx%0ALDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJn%0AYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSwy%0AMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSki%0ALCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgy%0ANTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMzXSwiZWRnZS5j%0Ab2wiOlsicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0s%0AInZlcnRleC50b29sdGlwIjpbIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8%0AYj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3Rv%0AbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxc%0AL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3Nw%0AYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9i%0APiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IExBIFRpbWVzIDxicj4gPGI+VHlw%0AZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3Qg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05O%0AIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJy%0APiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwv%0AYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5jb20gPGJy%0APiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5j%0Ab20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gV2Fz%0AaGluZ3RvblBvc3QuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5O%0AYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSJdLCJl%0AZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiA0Il0sIm1hciI6WzAsMCwwLDBdLCJqaXR0ZXIiOltmYWxzZV0sInhs%0AaW0iOlstMy4yMDQ2LDMuMjA0Nl0sInlsaW0iOlstMi45NjE2LDIuOTYxNl19fSx7%0AInN0YXJ0IjpbM10sImVuZCI6WzRdLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6%0AeyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVd%0ALCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIi%0AOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIx%0ANyI6WzE2XX0sImVkZ2VzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl19fSwiY29v%0AcmQiOltbMS44NTE0LC0xLjQxMjldLFsxLjEyMjksLTAuODM3MV0sWzIuNjM5OCwt%0AMC45NjU0XSxbMS41OTQ5LC0yLjI4NDVdLFswLjc2NTUsMS4zMDY5XSxbLTEuMDU2%0ANywtMC45NDhdLFsyLjg3NjksMC43NzczXSxbLTEuNzc2MSwyLjM5ODJdLFstMS4z%0AODc3LC0yLjU0NjhdLFswLjk1MjIsMi44NzA4XSxbLTIuNTE1NiwtMS41MjAxXSxb%0ALTAuMDUzLC0yLjkwMzJdLFsyLjIyMzIsMi4wMDU2XSxbLTIuODc2OSwtMC4xNDE2%0AXSxbLTIuNjg1NywxLjIyODVdLFstMS4wMzQyLDAuOTA5Ml0sWy0wLjQ2NjYsMi45%0AMDMyXV0sInVzZWFycm93cyI6W2ZhbHNlXSwiZGlzcGxheWxhYmVscyI6W2ZhbHNl%0AXSwibGFiZWwiOlsiTlkgVGltZXMiLCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxsIFN0%0AcmVldCBKb3VybmFsIiwiVVNBIFRvZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9yayBQ%0Ab3N0IiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllhaG9v%0AIE5ld3MiLCJHb29nbGUgTmV3cyIsIlJldXRlcnMuY29tIiwiTllUaW1lcy5jb20i%0ALCJXYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wuY29tIl0sImJnIjpbInJnYmEoMjU1%0ALDI1NSwyNTUsMSkiXSwidmVydGV4LmJvcmRlciI6WyJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSJdLCJ2ZXJ0ZXguY2V4IjpbNCwzLDYuNSw0LjUsMi41%0ALDMsMi41LDIuNSwyLDIuNSwxLjUsMywyLDIsMi41LDEuNSwyLjVdLCJ2ZXJ0ZXgu%0AY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEp%0AIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEo%0AMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3%0AMSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJy%0AZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUs%0AMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEp%0AIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMz%0ALDddLCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwidmVydGV4LnRvb2x0aXAi%0AOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3%0Ac3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBvc3QgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FsbCBTdHJlZXQg%0ASm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8%0AXC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxi%0APk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBl%0AciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+IDxiPlR5cGU6PFwv%0AYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJyPiA8Yj5UeXBlOjxc%0AL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxiPlR5cGU6PFwvYj4g%0AVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBU%0AViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxi%0APk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6%0APFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+%0ATmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5l%0AIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4g%0AT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8YnI+IDxiPlR5cGU6%0APFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uUG9zdC5jb20g%0APGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gQU9MLmNv%0AbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2UudG9vbHRpcCI6WyI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwibWFy%0AIjpbMCwwLDAsMF0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYsMy4y%0AMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQiOls0XSwiZW5k%0AIjpbNV0sImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFd%0ALCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6Wzdd%0ALCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0s%0AIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRnZXMi%0AOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdfX0sImNvb3JkIjpbWzAu%0AOTI5MywtMS45MzJdLFsxLjMyMzEsLTEuMDQ0M10sWzAuMDIzNiwtMS41OTE2XSxb%0AMS44MzUsLTIuMjEwM10sWy0yLjg3MDIsMC44ODg1XSxbLTIuOTYwNSwtMC41NDQx%0AXSxbMi41MjE4LDEuMDU2OV0sWy0yLjAyODUsMi4wMzE2XSxbLTEuNTcyNiwtMi43%0ANDRdLFstMC44ODQ2LDIuNjYwNl0sWy0yLjQyMzcsLTEuNzEwMl0sWzIuOTYwNSwt%0AMC4yMTg5XSxbMC4zNDgxLDEuMjA4N10sWy0xLjM4NjQsMC4yOTcyXSxbMC41MjU4%0ALC0yLjgwMjJdLFswLjUwNzgsMi44MDIyXSxbMS44MDQxLDIuMTM1MV1dLCJ1c2Vh%0AcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJlbHMiOltmYWxzZV0sImxhYmVsIjpb%0AIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJlZXQgSm91cm5h%0AbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9zdCIsIkNOTiIs%0AIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBOZXdzIiwiR29v%0AZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwiV2FzaGluZ3Rv%0AblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6WyJyZ2JhKDI1NSwyNTUsMjU1LDEp%0AIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiXSwidmVydGV4LmNleCI6WzQsMyw2LjUsNC41LDIuNSwzLDIuNSwyLjUs%0AMiwyLjUsMS41LDMsMiwyLDIuNSwxLjUsMi41XSwidmVydGV4LmNvbCI6WyJyZ2Jh%0AKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5%0ALDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5%0ALDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwx%0AKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2Jh%0AKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1%0ALDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwi%0AcmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1%0ALDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMzLDcuMzMzMyw3LDYuNjY2N10s%0AImVkZ2UuY29sIjpbInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSJd%0ALCJ2ZXJ0ZXgudG9vbHRpcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4g%0APGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0%0Ab24gUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8%0AXC9iPiBXYWxsIFN0cmVldCBKb3VybmFsIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdz%0AcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwv%0AYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0%0AIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENO%0ATiA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJy%0APiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8%0AXC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+%0AVHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRlcnMuY29tIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMu%0AY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdh%0Ac2hpbmd0b25Qb3N0LmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+%0ATmFtZTo8XC9iPiBBT0wuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwi%0AZWRnZS50b29sdGlwIjpbIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjAiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiA1IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gNCJdLCJtYXIiOlswLDAsMCwwXSwiaml0dGVyIjpbZmFsc2VdLCJ4%0AbGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwyLjk2MTZdfX0s%0AeyJzdGFydCI6WzVdLCJlbmQiOls2XSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMi%0AOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1%0AXSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEy%0AIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwi%0AMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0Ijpb%0AM10sIjUiOls0XX19LCJjb29yZCI6W1swLjk4MiwtMS45MTIyXSxbMS4zMTg3LC0x%0AXSxbMC4wNTY5LC0xLjYyNTJdLFsxLjkwNDQsLTIuMTM4OF0sWy0yLjg5NzgsMC44%0AMTgyXSxbLTIuOTU3OCwtMC42MzE3XSxbMi40ODIyLDEuMTE5OF0sWy0yLjA3NjUs%0AMS45Njk2XSxbLTEuNTA2LC0yLjgwMDNdLFstMC45NTg1LDIuNjM3N10sWy0yLjM4%0AMzgsLTEuNzg3XSxbMi45NTc4LC0wLjEzNzRdLFswLjI3MjcsMS4yMDA1XSxbLTEu%0ANDE5MSwwLjIxNzhdLFswLjYyNjMsLTIuNzk5M10sWzAuNDMsMi44MDAzXSxbMS43%0AMzYxLDIuMTc2OV1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJlbHMi%0AOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0Iiwi%0AV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwiTmV3%0AIFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJCQkMi%0ALCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5ZVGlt%0AZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6WyJy%0AZ2JhKDI1NSwyNTUsMjU1LDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJn%0AYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1%0AMSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiXSwidmVydGV4LmNleCI6WzQsMyw2LjUs%0ANC41LDIuNSwzLDIuNSwyLjUsMiwyLjUsMS41LDMsMiwyLDIuNSwxLjUsMi41XSwi%0AdmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5%0ALDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5%0ALDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSki%0ALCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgy%0ANTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcx%0ALDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJn%0AYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwy%0AMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMz%0ALDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjddLCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwi%0AdmVydGV4LnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxi%0APlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9u%0AIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwv%0AYj4gV2FsbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3Bh%0AcGVyIiwiPGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8%0AYnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4g%0APGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4g%0APGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlw%0AZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9i%0APiBUViIsIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwv%0AYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+%0AIDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNv%0AbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNo%0AaW5ndG9uUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5h%0AbWU6PFwvYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVk%0AZ2UudG9vbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gNSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIz%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDQiXSwibWFyIjpbMCwwLDAsMF0sImppdHRlciI6W2ZhbHNlXSwieGxp%0AbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsi%0Ac3RhcnQiOls2XSwiZW5kIjpbN10sImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7%0AIjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0s%0AIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6%0AWzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3%0AIjpbMTZdfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNd%0ALCI1IjpbNF0sIjYiOls1XX19LCJjb29yZCI6W1swLjk0NDQsLTEuOTk5NV0sWzAu%0AODM4MywtMS4wNTU0XSxbMC4wOTc1LC0xLjU1NTRdLFsxLjg5MDEsLTEuOTg1Ml0s%0AWy0yLjgwMzYsMS4wOTA2XSxbLTIuOTU1NiwtMC4zNTY2XSxbMi42MDc0LDAuOTQ4%0AOF0sWy0xLjg4ODMsMi4xOThdLFstMS42NTk2LC0yLjYwODRdLFstMC43MDI0LDIu%0ANzc3Nl0sWy0yLjQ2MDMsLTEuNTQ5NF0sWzIuOTU1NiwtMC4zMTE0XSxbMS45NzQz%0ALDIuMDcyNV0sWy0xLjM4NTIsMC40NDA2XSxbMC41MjM5LC0yLjgzOTddLFswLjQx%0ANzIsMS4zMDM3XSxbMC43MjQ1LDIuODM5N11dLCJ1c2VhcnJvd3MiOltmYWxzZV0s%0AImRpc3BsYXlsYWJlbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2Fz%0AaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIs%0AIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5l%0Ad3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0%0AZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9M%0ALmNvbSJdLCJiZyI6WyJyZ2JhKDI1NSwyNTUsMjU1LDEpIl0sInZlcnRleC5ib3Jk%0AZXIiOlsicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2Jh%0AKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEs%0AMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEo%0ANTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwx%0AKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiXSwidmVydGV4%0ALmNleCI6WzQsMyw2LjUsNC41LDIuNSwzLDIuNSwyLjUsMiwyLjUsMS41LDMsMiwy%0ALDIuNSwxLjUsMi41XSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEp%0AIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEo%0AMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5%0ALDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIs%0AInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1%0ANSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAs%0AMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVk%0AZ2UubHdkIjpbNy4zMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsN10sImVkZ2Uu%0AY29sIjpbInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSJdLCJ2ZXJ0ZXgudG9v%0AbHRpcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9i%0APiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b24gUG9zdCA8YnI+%0AIDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYWxsIFN0%0AcmVldCBKb3VybmFsIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5O%0AYW1lOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVy%0AIiwiPGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3%0Ac3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0IDxicj4gPGI+VHlw%0AZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENOTiA8YnI+IDxiPlR5%0AcGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxicj4gPGI+VHlwZTo8%0AXC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRW%0AIiwiPGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+%0ATmFtZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUi%0ALCI8Yj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBP%0AbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRlcnMuY29tIDxicj4gPGI+VHlwZTo8%0AXC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMuY29tIDxicj4gPGI+%0AVHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b25Qb3N0%0ALmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBB%0AT0wuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwiZWRnZS50b29sdGlw%0AIjpbIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjAi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA1Iiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCJd%0ALCJtYXIiOlswLDAsMCwwXSwiaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0%0ANiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6Wzdd%0ALCJlbmQiOls4XSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIy%0AIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4%0AIjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6%0AWzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19LCJl%0AZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwi%0ANiI6WzVdLCI3IjpbNl19fSwiY29vcmQiOltbMC42NTc2LC0yLjAzNjddLFstMC4x%0AODI0LC0yLjQ0NzhdLFstMC4xNDEsLTEuNTMwOV0sWzEuMzAwMywtMS4zMTA4XSxb%0ALTIuODc1MiwwLjkwM10sWy0yLjk0MDEsLTAuNDY4M10sWzIuNjQ4MiwwLjY4ODZd%0ALFstMS45NTg1LDIuMTQyM10sWy0xLjA1MzQsLTIuNzAyN10sWy0wLjY3MzcsMi42%0ANjc5XSxbLTIuNjU4MiwtMS43MzkxXSxbMi45NDAxLC0wLjY1MzZdLFsyLjA0Mzks%0AMS44ODA4XSxbLTEuMzUyNSwwLjY3MzZdLFsxLjMzOTMsLTIuNjcwNV0sWzAuNTcz%0ANywxLjE5NDVdLFswLjc1MDcsMi43MDI3XV0sInVzZWFycm93cyI6W2ZhbHNlXSwi%0AZGlzcGxheWxhYmVscyI6W2ZhbHNlXSwibGFiZWwiOlsiTlkgVGltZXMiLCJXYXNo%0AaW5ndG9uIFBvc3QiLCJXYWxsIFN0cmVldCBKb3VybmFsIiwiVVNBIFRvZGF5Iiwi%0ATEEgVGltZXMiLCJOZXcgWW9yayBQb3N0IiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3%0AcyIsIkFCQyIsIkJCQyIsIllhaG9vIE5ld3MiLCJHb29nbGUgTmV3cyIsIlJldXRl%0AcnMuY29tIiwiTllUaW1lcy5jb20iLCJXYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wu%0AY29tIl0sImJnIjpbInJnYmEoMjU1LDI1NSwyNTUsMSkiXSwidmVydGV4LmJvcmRl%0AciI6WyJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEo%0ANTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwx%0AKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSJdLCJ2ZXJ0ZXgu%0AY2V4IjpbNCwzLDYuNSw0LjUsMi41LDMsMi41LDIuNSwyLDIuNSwxLjUsMywyLDIs%0AMi41LDEuNSwyLjVdLCJ2ZXJ0ZXguY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSki%0ALCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJn%0AYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgx%0ANzksMTc5LDE3OSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTks%0ANzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwi%0AcmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1%0ALDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwx%0AKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRn%0AZS5sd2QiOls3LjMzMzMsNy4zMzMzLDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMzM10s%0AImVkZ2UuY29sIjpbInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSJdLCJ2ZXJ0ZXgudG9vbHRpcCI6WyI8Yj5OYW1lOjxcL2I+%0AIE5ZIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1l%0AOjxcL2I+IFdhc2hpbmd0b24gUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3Bh%0AcGVyIiwiPGI+TmFtZTo8XC9iPiBXYWxsIFN0cmVldCBKb3VybmFsIDxicj4gPGI+%0AVHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFVTQSBUb2RheSA8%0AYnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBMQSBU%0AaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9i%0APiBOZXcgWW9yayBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8%0AYj5OYW1lOjxcL2I+IENOTiA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1l%0AOjxcL2I+IE1TTkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwv%0AYj4gRk9YIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9i%0APiBBQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBCQkMg%0APGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBZYWhvbyBOZXdz%0AIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEdvb2ds%0AZSBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+%0AIFJldXRlcnMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1l%0AOjxcL2I+IE5ZVGltZXMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8%0AYj5OYW1lOjxcL2I+IFdhc2hpbmd0b25Qb3N0LmNvbSA8YnI+IDxiPlR5cGU6PFwv%0AYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBBT0wuY29tIDxicj4gPGI+VHlwZTo8%0AXC9iPiBPbmxpbmUiXSwiZWRnZS50b29sdGlwIjpbIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjAiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA1IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDMi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCJdLCJtYXIiOlswLDAsMCwwXSwiaml0%0AdGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGltIjpbLTIu%0AOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6WzhdLCJlbmQiOls5XSwiZGF0YSI6eyJh%0AY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNd%0ALCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5%0AXSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1Ijpb%0AMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsx%0AXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3%0AXX19LCJjb29yZCI6W1swLjc0MzksLTEuODE0NV0sWy0wLjIyNjQsLTIuMDAxNV0s%0AWzAuMTA5LC0xLjE0MTNdLFsxLjUxOTksLTEuMTg4MV0sWy0xLjgxODgsMC44Njgy%0AXSxbLTMuMDU1MSwwLjIzMDddLFsyLjU5NDcsMS4wMzYxXSxbLTIuMjg3NiwxLjk5%0AODFdLFstMS4xODYyLC0xLjczNzFdLFstMC41NTIxLC0yLjg4MThdLFstMi45MjI1%0ALC0xLjI1MDhdLFszLjA1NTEsLTAuMjc4OV0sWzEuODkyNywyLjExOTJdLFstMC45%0ANjg1LDIuNjY3Ml0sWzEuMzkyNywtMi40OTddLFswLjMzNzEsMS41MTIzXSxbMC41%0AMzUxLDIuODgxOF1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJlbHMi%0AOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0Iiwi%0AV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwiTmV3%0AIFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJCQkMi%0ALCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5ZVGlt%0AZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6WyJy%0AZ2JhKDI1NSwyNTUsMjU1LDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJn%0AYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1%0AMSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiXSwidmVydGV4LmNleCI6WzQsMyw2LjUs%0ANC41LDIuNSwzLDIuNSwyLjUsMiwyLjUsMS41LDMsMiwyLDIuNSwxLjUsMi41XSwi%0AdmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5%0ALDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5%0ALDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSki%0ALCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgy%0ANTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcx%0ALDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJn%0AYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwy%0AMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMz%0ALDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42NjY3XSwiZWRnZS5j%0Ab2wiOlsicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpb%0AIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3Nw%0AYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlw%0AZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpv%0AdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwv%0AYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5O%0AYW1lOjxcL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIi%0ALCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9i%0APiBUViIsIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRW%0AIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYi%0ALCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5O%0AYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxc%0AL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5h%0AbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIs%0AIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9u%0AbGluZSIsIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20g%0APGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sIm1hciI6%0AWzAsMCwwLDBdLCJqaXR0ZXIiOltmYWxzZV0sInhsaW0iOlstMy4yMDQ2LDMuMjA0%0ANl0sInlsaW0iOlstMi45NjE2LDIuOTYxNl19fSx7InN0YXJ0IjpbOV0sImVuZCI6%0AWzEwXSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0s%0AIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10s%0AIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwi%0AMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19LCJlZGdlcyI6%0AeyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVd%0ALCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdfX0sImNvb3JkIjpbWzAuNjkxNiwtMS44%0AMzY3XSxbLTAuMjgwNSwtMi4wMTM1XSxbMC4wNjQ1LC0xLjE1NzZdLFsxLjQ3Niwt%0AMS4yMjMyXSxbLTEuMzY0OCwxLjIwMDldLFstMi45OTY0LDAuMDg2MV0sWzIuNTUw%0ANiwxLjAzOTldLFstMi42OTE2LDEuNDgxN10sWy0xLjIzMTYsLTEuNzJdLFstMC42%0AMjI1LC0yLjg4OTNdLFstMi45NzE4LC0xLjMyNDRdLFsyLjk5NjQsLTAuMjkzNV0s%0AWzEuODAwNiwyLjI0MjddLFstMS4zNTA5LDIuNjIwNV0sWzEuMzI2NCwtMi41MzI5%0AXSxbMC42MjMsMS41NjMxXSxbMC4xNDM1LDIuODg5M11dLCJ1c2VhcnJvd3MiOltm%0AYWxzZV0sImRpc3BsYXlsYWJlbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVz%0AIiwiV2FzaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBU%0Ab2RheSIsIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwi%0ARk9YIE5ld3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3Mi%0ALCJSZXV0ZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29t%0AIiwiQU9MLmNvbSJdLCJiZyI6WyJyZ2JhKDI1NSwyNTUsMjU1LDEpIl0sInZlcnRl%0AeC5ib3JkZXIiOlsicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiXSwi%0AdmVydGV4LmNleCI6WzQsMyw2LjUsNC41LDIuNSwzLDIuNSwyLjUsMiwyLjUsMS41%0ALDMsMiwyLDIuNSwxLjUsMi41XSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzks%0AMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzks%0AMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIs%0AInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEo%0AMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3%0AMSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJy%0AZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUs%0AMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEp%0AIl0sImVkZ2UubHdkIjpbNy4zMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNyww%0ALjMzMzMsMS42NjY3LDddLCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwidmVydGV4LnRvb2x0aXAiOlsiPGI+%0ATmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVy%0AIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBvc3QgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FsbCBTdHJlZXQgSm91cm5h%0AbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBV%0AU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6%0APFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxi%0APk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3%0Ac3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJyPiA8Yj5UeXBlOjxcL2I+IFRW%0AIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8%0AYj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxi%0APk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6%0APFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4g%0AWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8%0AXC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+%0ATmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5l%0AIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4g%0AT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uUG9zdC5jb20gPGJyPiA8%0AYj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gQU9MLmNvbSA8YnI+%0AIDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2UudG9vbHRpcCI6WyI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIz%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwibWFyIjpbMCww%0ALDAsMF0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwi%0AeWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQiOlsxMF0sImVuZCI6WzEx%0AXSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMi%0AOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjki%0AOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQi%0AOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIx%0AIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3%0AIjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldfX0sImNvb3JkIjpbWzAuNjAx%0ALC0yLjAwNzhdLFstMC4zODQ4LC0yLjAyNjNdLFswLjE2MjgsLTEuMjM4Nl0sWzEu%0AMDk2LC0xLjE0MTRdLFstMS4yNDM0LDEuMjY0OF0sWy0yLjk0NzEsMC4yNzI2XSxb%0AMi42ODc0LDAuODEyNV0sWy0yLjU0MjcsMS42NDQ5XSxbLTEuMjkyNCwtMS42Mjk1%0AXSxbLTAuNzkxNCwtMi44NzE1XSxbLTMuMDA2MiwtMS4xMjgzXSxbMy4wMDYyLC0w%0ALjU3ODVdLFsyLjAyOTUsMi4wNzE4XSxbLTEuMTMzOCwyLjY4NjldLFsxLjM2OSwt%0AMi41Mjk1XSxbMC43ODcxLDEuNTg2MV0sWzAuMzc1OSwyLjg3MTVdXSwidXNlYXJy%0Ab3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxzIjpbZmFsc2VdLCJsYWJlbCI6WyJO%0AWSBUaW1lcyIsIldhc2hpbmd0b24gUG9zdCIsIldhbGwgU3RyZWV0IEpvdXJuYWwi%0ALCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5ldyBZb3JrIFBvc3QiLCJDTk4iLCJN%0AU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJDIiwiWWFob28gTmV3cyIsIkdvb2ds%0AZSBOZXdzIiwiUmV1dGVycy5jb20iLCJOWVRpbWVzLmNvbSIsIldhc2hpbmd0b25Q%0Ab3N0LmNvbSIsIkFPTC5jb20iXSwiYmciOlsicmdiYSgyNTUsMjU1LDI1NSwxKSJd%0ALCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJn%0AYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1%0AMSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdi%0AYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUx%0ALDEpIl0sInZlcnRleC5jZXgiOls0LDMsNi41LDQuNSwyLjUsMywyLjUsMi41LDIs%0AMi41LDEuNSwzLDIsMiwyLjUsMS41LDIuNV0sInZlcnRleC5jb2wiOlsicmdiYSgx%0ANzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwx%0ANzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwx%0ANzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgyNTUsOTksNzEsMSki%0ALCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgy%0ANTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDIxNSww%0ALDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJn%0AYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwy%0AMTUsMCwxKSJdLCJlZGdlLmx3ZCI6WzcuMzMzMyw3LjMzMzMsNyw2LjY2NjcsNy42%0ANjY3LDcsMC4zMzMzLDEuNjY2Nyw3LDcuMzMzM10sImVkZ2UuY29sIjpbInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSJdLCJ2ZXJ0ZXgudG9vbHRpcCI6WyI8Yj5OYW1lOjxcL2I+IE5Z%0AIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxc%0AL2I+IFdhc2hpbmd0b24gUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVy%0AIiwiPGI+TmFtZTo8XC9iPiBXYWxsIFN0cmVldCBKb3VybmFsIDxicj4gPGI+VHlw%0AZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFVTQSBUb2RheSA8YnI+%0AIDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBMQSBUaW1l%0AcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBO%0AZXcgWW9yayBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5O%0AYW1lOjxcL2I+IENOTiA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxc%0AL2I+IE1TTkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4g%0ARk9YIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBB%0AQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBCQkMgPGJy%0APiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBZYWhvbyBOZXdzIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEdvb2dsZSBO%0AZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFJl%0AdXRlcnMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxc%0AL2I+IE5ZVGltZXMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5O%0AYW1lOjxcL2I+IFdhc2hpbmd0b25Qb3N0LmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4g%0AT25saW5lIiwiPGI+TmFtZTo8XC9iPiBBT0wuY29tIDxicj4gPGI+VHlwZTo8XC9i%0APiBPbmxpbmUiXSwiZWRnZS50b29sdGlwIjpbIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjAiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiA1IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCJdLCJtYXIiOlswLDAsMCwwXSwiaml0dGVy%0AIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYx%0ANiwyLjk2MTZdfX0seyJzdGFydCI6WzExXSwiZW5kIjpbMTJdLCJkYXRhIjp7ImFj%0AdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10s%0AIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6Wzld%0ALCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsx%0ANF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVkZ2VzIjp7IjEiOlswXSwiMiI6WzFd%0ALCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6Wzdd%0ALCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdfX0sImNvb3JkIjpbWzAuNzY4Miwt%0AMS43MzE0XSxbLTAuMjE1LC0xLjg1ODhdLFswLjI2MjQsLTAuOTk0N10sWzEuMjQ1%0AMywtMC44Njg2XSxbLTAuMDgzMywtMC4wODQxXSxbLTMuMDQ0NiwwLjE3OTFdLFsy%0ALjQ0MjYsMS40NjYzXSxbLTIuNjA2NywxLjMzMDddLFstMS4yMTAyLC0xLjc1NjVd%0ALFstMC40MzE0LC0yLjc5MjVdLFstMy4wMDY1LC0xLjI2MDJdLFszLjA0NDYsMC4w%0AOTI3XSxbMS41MTUxLDIuMzM1Ml0sWy0wLjc2OTYsMi42ODkyXSxbMS41Nzg5LC0y%0ALjIxNTFdLFstMS44NTksMi4yNTY3XSxbMC4zOTc0LDIuNzkyNV1dLCJ1c2VhcnJv%0Ad3MiOltmYWxzZV0sImRpc3BsYXlsYWJlbHMiOltmYWxzZV0sImxhYmVsIjpbIk5Z%0AIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJlZXQgSm91cm5hbCIs%0AIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1T%0ATkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xl%0AIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwiV2FzaGluZ3RvblBv%0Ac3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6WyJyZ2JhKDI1NSwyNTUsMjU1LDEpIl0s%0AInZlcnRleC5ib3JkZXIiOlsicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJn%0AYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1%0AMSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdi%0AYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUx%0ALDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2Jh%0AKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEs%0AMSkiXSwidmVydGV4LmNleCI6WzQsMyw2LjUsNC41LDIuNSwzLDIuNSwyLjUsMiwy%0ALjUsMS41LDMsMiwyLDIuNSwxLjUsMi41XSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3%0AOSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3%0AOSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3%0AOSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIs%0AInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1%0ANSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1LDAs%0AMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdi%0AYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIx%0ANSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2%0ANjcsNywwLjMzMzMsMS42NjY3LDcsNy4zMzMzLDAuMzMzM10sImVkZ2UuY29sIjpb%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSJdLCJ2ZXJ0ZXgu%0AdG9vbHRpcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4gPGI+VHlwZTo8%0AXC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b24gUG9zdCA8%0AYnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYWxs%0AIFN0cmVldCBKb3VybmFsIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8%0AYj5OYW1lOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3Bh%0AcGVyIiwiPGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4g%0ATmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0IDxicj4gPGI+%0AVHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENOTiA8YnI+IDxi%0APlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxicj4gPGI+VHlw%0AZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIFRWIiwiPGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwi%0APGI+TmFtZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxp%0AbmUiLCI8Yj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+VHlwZTo8XC9i%0APiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRlcnMuY29tIDxicj4gPGI+VHlw%0AZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMuY29tIDxicj4g%0APGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b25Q%0Ab3N0LmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9i%0APiBBT0wuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwiZWRnZS50b29s%0AdGlwIjpbIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjAiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA1%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0ANCJdLCJtYXIiOlswLDAsMCwwXSwiaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMu%0AMjA0NiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6%0AWzEyXSwiZW5kIjpbMTNdLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpb%0AMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3Ijpb%0ANl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0s%0AIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2%0AXX0sImVkZ2VzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6%0AWzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjEx%0AIjpbMTBdLCIxMiI6WzExXX19LCJjb29yZCI6W1swLjg5ODgsLTEuODA4NV0sWy0w%0ALjA3MTQsLTEuNzk2OF0sWzAuNTU0MSwtMC45NTY4XSxbMS41Nzk4LC0xLjEyNTZd%0ALFsxLjA3MDUsLTAuMDU2Nl0sWy0zLjA0NTUsMC4xMjc4XSxbMS45OTkxLDIuMTIx%0AM10sWy0wLjE1MzMsLTAuMjE0NF0sWy0xLjA4NDksLTEuNzIzOF0sWy0wLjM5MjQs%0ALTIuNzRdLFstMi45OTM2LC0xLjQwMjddLFswLjczMDMsMi43MTIyXSxbLTAuNTU1%0AMSwyLjc0XSxbLTIuNTgyNywxLjM1NjZdLFsxLjU5MjYsLTIuNDU0OV0sWy0xLjcw%0ANTUsMi4yNTQ3XSxbMy4wNDU1LDAuNzgyMl1dLCJ1c2VhcnJvd3MiOltmYWxzZV0s%0AImRpc3BsYXlsYWJlbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2Fz%0AaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIs%0AIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5l%0Ad3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0%0AZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9M%0ALmNvbSJdLCJiZyI6WyJyZ2JhKDI1NSwyNTUsMjU1LDEpIl0sInZlcnRleC5ib3Jk%0AZXIiOlsicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2Jh%0AKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEs%0AMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEo%0ANTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwx%0AKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiXSwidmVydGV4%0ALmNleCI6WzQsMyw2LjUsNC41LDIuNSwzLDIuNSwyLjUsMiwyLjUsMS41LDMsMiwy%0ALDIuNSwxLjUsMi41XSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEp%0AIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEo%0AMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5%0ALDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIs%0AInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1%0ANSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAs%0AMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVk%0AZ2UubHdkIjpbNy4zMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMs%0AMS42NjY3LDcsNy4zMzMzLDAuMzMzMywxLjMzMzNdLCJlZGdlLmNvbCI6WyJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiXSwidmVydGV4LnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1l%0AcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBX%0AYXNoaW5ndG9uIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxi%0APk5hbWU6PFwvYj4gV2FsbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwv%0AYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlv%0AcmsgUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8%0AXC9iPiBDTk4gPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBN%0AU05CQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBO%0AZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+%0AVHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxi%0APlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8%0AYnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJz%0ALmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBO%0AWVRpbWVzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8%0AXC9iPiBXYXNoaW5ndG9uUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGlu%0AZSIsIjxiPk5hbWU6PFwvYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25s%0AaW5lIl0sImVkZ2UudG9vbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gNSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwibWFyIjpbMCwwLDAsMF0sImppdHRlciI6W2Zh%0AbHNlXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45%0ANjE2XX19LHsic3RhcnQiOlsxM10sImVuZCI6WzE0XSwiZGF0YSI6eyJhY3RpdmUi%0AOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1Ijpb%0ANF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEi%0AOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIx%0ANiI6WzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6%0AWzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6%0AWzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdfX0sImNv%0Ab3JkIjpbWzAuODY1NCwtMS45MDQ5XSxbLTAuMjcxMiwtMi4xMjE3XSxbMC4xNzMx%0ALC0xLjM1NV0sWzEuMTcyLC0xLjAzMjhdLFswLjIwNTMsLTAuMzEzM10sWy0yLjk2%0ANTYsMC40NjJdLFsyLjM1MDIsMS41NjhdLFstMC43OTg0LC0wLjkyNzVdLFstMS4x%0AMjU3LC0yLjYyMTVdLFswLjI2MzIsLTIuNTQ5Nl0sWy0zLjEzMzIsLTEuMDk4OV0s%0AWzEuMjUxNCwyLjM1NTVdLFswLjAwMDcsMi42MjE1XSxbLTIuMjY2NywxLjYyNjZd%0ALFsxLjgxMTcsLTIuMjE1NV0sWy0xLjIyODEsMi4zNjc1XSxbMy4xMzMyLDAuMjE0%0AXV0sInVzZWFycm93cyI6W2ZhbHNlXSwiZGlzcGxheWxhYmVscyI6W2ZhbHNlXSwi%0AbGFiZWwiOlsiTlkgVGltZXMiLCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxsIFN0cmVl%0AdCBKb3VybmFsIiwiVVNBIFRvZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9yayBQb3N0%0AIiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllhaG9vIE5l%0Ad3MiLCJHb29nbGUgTmV3cyIsIlJldXRlcnMuY29tIiwiTllUaW1lcy5jb20iLCJX%0AYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wuY29tIl0sImJnIjpbInJnYmEoMjU1LDI1%0ANSwyNTUsMSkiXSwidmVydGV4LmJvcmRlciI6WyJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJn%0AYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1%0AMSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdi%0AYSg1MSw1MSw1MSwxKSJdLCJ2ZXJ0ZXguY2V4IjpbNCwzLDYuNSw0LjUsMi41LDMs%0AMi41LDIuNSwyLDIuNSwxLjUsMywyLDIsMi41LDEuNSwyLjVdLCJ2ZXJ0ZXguY29s%0AIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwi%0AcmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2Jh%0AKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMjU1%0ALDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwx%0AKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2Jh%0AKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1%0ALDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwi%0AcmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMzLDcs%0ANi42NjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2NjcsNyw3LjMzMzMsMC4zMzMzLDEu%0AMzMzMywwLjY2NjddLCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiXSwidmVydGV4LnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBU%0AaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9i%0APiBXYXNoaW5ndG9uIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIs%0AIjxiPk5hbWU6PFwvYj4gV2FsbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6%0APFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8%0AYj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3%0AIFlvcmsgUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFt%0AZTo8XC9iPiBDTk4gPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9i%0APiBNU05CQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZP%0AWCBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJD%0AIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4g%0APGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3%0AcyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0%0AZXJzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9i%0APiBOWVRpbWVzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFt%0AZTo8XC9iPiBXYXNoaW5ndG9uUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9u%0AbGluZSIsIjxiPk5hbWU6PFwvYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4g%0AT25saW5lIl0sImVkZ2UudG9vbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gNSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwibWFyIjpbMCwwLDAsMF0sImppdHRlciI6%0AW2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYs%0AMi45NjE2XX19LHsic3RhcnQiOlsxNF0sImVuZCI6WzE1XSwiZGF0YSI6eyJhY3Rp%0AdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1%0AIjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwi%0AMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRd%0ALCIxNiI6WzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwi%0AMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwi%0AOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIx%0ANCI6WzEzXX19LCJjb29yZCI6W1swLjk4MjMsLTEuNjExOF0sWzAuMTUzNCwtMS45%0AOTI5XSxbMC4xNDUsLTAuOTY4OF0sWzEuMTkyNSwtMC43NzEzXSxbLTAuMzQzOSwt%0AMC4wMjI0XSxbLTIuODc3LDEuMDk2OV0sWzIuMjAzOCwyLjE2NDddLFstMC45NDYz%0ALC0wLjc2MDFdLFstMC4yMTYxLC0yLjg5MjZdLFstMC42NjQ1LC0xLjY2MjRdLFsw%0ALjYxNCwwLjAyMzldLFstMC41NzU3LDIuODkyNl0sWzMuMjA0NiwwLjczOTFdLFst%0AMy4yMDQ2LC0wLjcxMjldLFsxLjk0NDksLTEuODgwNF0sWy0xLjg5OCwyLjI5MV0s%0AWzAuODYwNiwyLjg2MDRdXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFi%0AZWxzIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9z%0AdCIsIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIs%0AIk5ldyBZb3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwi%0AQkJDIiwiWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJO%0AWVRpbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmci%0AOlsicmdiYSgyNTUsMjU1LDI1NSwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEo%0ANTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwx%0AKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIl0sInZlcnRleC5jZXgiOls0LDMs%0ANi41LDQuNSwyLjUsMywyLjUsMi41LDIsMi41LDEuNSwzLDIsMiwyLjUsMS41LDIu%0ANV0sInZlcnRleC5jb2wiOlsicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5%0ALDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5%0ALDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5%0ALDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJn%0AYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5%0AOSw3MSwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSki%0ALCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgy%0ANTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdlLmx3ZCI6Wzcu%0AMzMzMyw3LjMzMzMsNyw2LjY2NjcsNy42NjY3LDcsMC4zMzMzLDEuNjY2Nyw3LDcu%0AMzMzMywwLjMzMzMsMS4zMzMzLDAuNjY2NywwLjMzMzNdLCJlZGdlLmNvbCI6WyJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiXSwidmVydGV4LnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8%0AYnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNo%0AaW5ndG9uIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5h%0AbWU6PFwvYj4gV2FsbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4g%0ATmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8%0AYj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsg%0AUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9i%0APiBDTk4gPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05C%0AQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdz%0AIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4g%0APGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlw%0AZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNv%0AbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRp%0AbWVzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9i%0APiBXYXNoaW5ndG9uUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIs%0AIjxiPk5hbWU6PFwvYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5l%0AIl0sImVkZ2UudG9vbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gNSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDQiXSwibWFyIjpbMCwwLDAsMF0sImppdHRlciI6W2ZhbHNl%0AXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2%0AXX19LHsic3RhcnQiOlsxNV0sImVuZCI6WzE2XSwiZGF0YSI6eyJhY3RpdmUiOnsi%0Abm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0s%0AIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsx%0AMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6%0AWzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJd%0ALCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6Wzhd%0ALCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEz%0AXSwiMTUiOlsxNF19fSwiY29vcmQiOltbMS4wNDY1LC0xLjgwOTldLFswLjE5ODQs%0ALTIuMDQ4MV0sWzAuMzYxNCwtMC45ODA2XSxbMS40MzU1LC0xLjA3MjddLFsxLjI0%0ANjEsLTAuMjU2NV0sWy0yLjczMDksMS4xOTY1XSxbMS43MzQ0LDIuNTM2XSxbLTAu%0ANzcwMywtMC44MTI4XSxbLTAuMzUyOSwtMi44OTk4XSxbLTAuNTExMiwtMS42MTQ2%0AXSxbMC40OTg1LDAuMTA5N10sWy0wLjMxMzcsLTAuMTEzNl0sWzMuMTg2MywxLjE1%0ANjddLFstMy4xODYzLC0wLjc0NjRdLFsxLjk1MDEsLTIuMjY0OV0sWy0xLjUyNzUs%0AMi40MjM2XSxbMC4wNTI3LDIuODk5OF1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRp%0Ac3BsYXlsYWJlbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGlu%0AZ3RvbiBQb3N0IiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxB%0AIFRpbWVzIiwiTmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3Mi%0ALCJBQkMiLCJCQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJz%0ALmNvbSIsIk5ZVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNv%0AbSJdLCJiZyI6WyJyZ2JhKDI1NSwyNTUsMjU1LDEpIl0sInZlcnRleC5ib3JkZXIi%0AOlsicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiXSwidmVydGV4LmNl%0AeCI6WzQsMyw2LjUsNC41LDIuNSwzLDIuNSwyLjUsMiwyLjUsMS41LDMsMiwyLDIu%0ANSwxLjUsMi41XSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwi%0AcmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2Jh%0AKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5%0ALDE3OSwxNzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcx%0ALDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJn%0AYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwy%0AMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSki%0ALCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2Uu%0AbHdkIjpbNy4zMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42%0ANjY3LDcsNy4zMzMzLDAuMzMzMywxLjMzMzMsMC42NjY3LDAuMzMzMywwLjMzMzNd%0ALCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwidmVydGV4%0ALnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5cGU6%0APFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBvc3Qg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2Fs%0AbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwi%0APGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3Nw%0AYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+IDxi%0APlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJyPiA8%0AYj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+VHlw%0AZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8XC9i%0APiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIs%0AIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25s%0AaW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6PFwv%0AYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxiPlR5%0AcGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8YnI+%0AIDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9u%0AUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwv%0AYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2UudG9v%0AbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0ANSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDQiXSwibWFyIjpbMCwwLDAsMF0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0z%0ALjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQi%0AOlsxNl0sImVuZCI6WzE3XSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6%0AWzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6%0AWzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFd%0ALCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsx%0ANl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUi%0AOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIx%0AMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0s%0AIjE2IjpbMTVdfX0sImNvb3JkIjpbWzEuMDkwOSwtMS43MDg5XSxbMC4yNjk4LC0y%0ALjAyNzRdLFswLjMwOTcsLTAuOTU2OF0sWzEuMzkxMSwtMC45MzY3XSxbMS4xMDM5%0ALC0wLjEzOV0sWy0yLjcwMjEsMS4yOTkzXSxbMS43ODk3LDIuNTM3M10sWy0wLjgz%0ANzMsLTAuOTE2OV0sWy0wLjE2ODMsLTIuOTM0MV0sWy0wLjQ4ODMsLTEuNjc5NF0s%0AWzAuMzE5MywwLjE0MTFdLFstMC40NjI3LC0wLjE3NjNdLFszLjE5OTMsMS4xNDk4%0AXSxbLTMuMTk5MywtMC42NzA5XSxbMi4wNDYyLC0yLjA2MjhdLFstMS40NjQxLDIu%0ANTAyMV0sWzAuMTI0NSwyLjkzNDFdXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNw%0AbGF5bGFiZWxzIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0%0Ab24gUG9zdCIsIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBU%0AaW1lcyIsIk5ldyBZb3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwi%0AQUJDIiwiQkJDIiwiWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5j%0Ab20iLCJOWVRpbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20i%0AXSwiYmciOlsicmdiYSgyNTUsMjU1LDI1NSwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpb%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJn%0AYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIl0sInZlcnRleC5jZXgi%0AOls0LDMsNi41LDQuNSwyLjUsMywyLjUsMi41LDIsMi41LDEuNSwzLDIsMiwyLjUs%0AMS41LDIuNV0sInZlcnRleC5jb2wiOlsicmdiYSgxNzksMTc5LDE3OSwxKSIsInJn%0AYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgx%0ANzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwx%0ANzksMTc5LDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwx%0AKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2Jh%0AKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1%0ALDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwi%0AcmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdlLmx3%0AZCI6WzcuMzMzMyw3LjMzMzMsNyw2LjY2NjcsNy42NjY3LDcsMC4zMzMzLDEuNjY2%0ANyw3LDcuMzMzMywwLjMzMzMsMS4zMzMzLDAuNjY2NywwLjMzMzMsMC4zMzMzLDcu%0ANjY2N10sImVkZ2UuY29sIjpbInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSJdLCJ2ZXJ0ZXgudG9vbHRpcCI6WyI8Yj5OYW1lOjxc%0AL2I+IE5ZIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5O%0AYW1lOjxcL2I+IFdhc2hpbmd0b24gUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3%0Ac3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYWxsIFN0cmVldCBKb3VybmFsIDxicj4g%0APGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFVTQSBUb2Rh%0AeSA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBM%0AQSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8%0AXC9iPiBOZXcgWW9yayBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIi%0ALCI8Yj5OYW1lOjxcL2I+IENOTiA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5O%0AYW1lOjxcL2I+IE1TTkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6%0APFwvYj4gRk9YIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8%0AXC9iPiBBQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBC%0AQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBZYWhvbyBO%0AZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEdv%0Ab2dsZSBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxc%0AL2I+IFJldXRlcnMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5O%0AYW1lOjxcL2I+IE5ZVGltZXMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUi%0ALCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b25Qb3N0LmNvbSA8YnI+IDxiPlR5cGU6%0APFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBBT0wuY29tIDxicj4gPGI+VHlw%0AZTo8XC9iPiBPbmxpbmUiXSwiZWRnZS50b29sdGlwIjpbIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjAiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA1IiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCJdLCJtYXIiOlswLDAsMCwwXSwi%0Aaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGltIjpb%0ALTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6WzE3XSwiZW5kIjpbMThdLCJkYXRh%0AIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0%0AIjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIx%0AMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwi%0AMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVkZ2VzIjp7IjEiOlswXSwi%0AMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwi%0AOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMi%0AOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdfX0s%0AImNvb3JkIjpbWzEuNjcwMSwtMS40NTc2XSxbMC45Mjg1LC0xLjk3NzFdLFswLjc3%0AMzksLTAuODkzNV0sWzEuODgwNywtMC41OTc5XSxbMS4xODgsMC4xMjM5XSxbMi43%0ANzg5LC0wLjAzMTVdLFstMi4zNjY5LDEuMTgwOV0sWy0wLjM2NTUsLTEuMTQwNl0s%0AWzAuNTk3NywtMi45NjE2XSxbMC4xNDE5LC0xLjc2NjJdLFstMC4yMDc5LC0wLjM2%0AMjldLFswLjQwMzIsMC4xNTQ2XSxbMi42NjgyLDIuMzU5M10sWy0yLjc3ODksLTAu%0AOTgzOF0sWzIuNTc4MywtMS45MjQ3XSxbLTEuMDM5NiwyLjUxNTNdLFswLjc0MzQs%0AMi45NjE2XV0sInVzZWFycm93cyI6W2ZhbHNlXSwiZGlzcGxheWxhYmVscyI6W2Zh%0AbHNlXSwibGFiZWwiOlsiTlkgVGltZXMiLCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxs%0AIFN0cmVldCBKb3VybmFsIiwiVVNBIFRvZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9y%0AayBQb3N0IiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllh%0AaG9vIE5ld3MiLCJHb29nbGUgTmV3cyIsIlJldXRlcnMuY29tIiwiTllUaW1lcy5j%0Ab20iLCJXYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wuY29tIl0sImJnIjpbInJnYmEo%0AMjU1LDI1NSwyNTUsMSkiXSwidmVydGV4LmJvcmRlciI6WyJyZ2JhKDUxLDUxLDUx%0ALDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2Jh%0AKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEs%0AMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEo%0ANTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwx%0AKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSJdLCJ2ZXJ0ZXguY2V4IjpbNCwzLDYuNSw0LjUs%0AMi41LDMsMi41LDIuNSwyLDIuNSwxLjUsMywyLDIsMi41LDEuNSwyLjVdLCJ2ZXJ0%0AZXguY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5%0ALDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSki%0ALCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJn%0AYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5%0AOSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSki%0ALCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgy%0ANTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSww%0ALDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4z%0AMzMzLDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2NjcsNyw3LjMzMzMsMC4z%0AMzMzLDEuMzMzMywwLjY2NjcsMC4zMzMzLDAuMzMzMyw3LjY2NjcsMC4zMzMzXSwi%0AZWRnZS5jb2wiOlsicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlw%0AIjpbIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5l%0Ad3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+%0AVHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0%0AIEpvdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6%0APFwvYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8%0AYj5OYW1lOjxcL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFw%0AZXIiLCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8%0AXC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIFRWIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4g%0AVFYiLCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8%0AYj5OYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1l%0AOjxcL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxi%0APk5hbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGlu%0AZSIsIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29t%0AIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5j%0Ab20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sIm1h%0AciI6WzAsMCwwLDBdLCJqaXR0ZXIiOltmYWxzZV0sInhsaW0iOlstMy4yMDQ2LDMu%0AMjA0Nl0sInlsaW0iOlstMi45NjE2LDIuOTYxNl19fSx7InN0YXJ0IjpbMThdLCJl%0AbmQiOlsxOV0sImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6%0AWzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6%0AWzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsx%0AMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRn%0AZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYi%0AOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0s%0AIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1%0AXSwiMTciOlsxNl0sIjE4IjpbMTddfX0sImNvb3JkIjpbWzEuNjczNSwtMS40NDAx%0AXSxbMC45MTk4LC0xLjk1OTNdLFswLjc4MzYsLTAuODY3Nl0sWzEuODY0NCwtMC41%0ANDc1XSxbLTAuMTY0MSwtMC4yODJdLFsyLjc0MjQsMC4wNTU0XSxbLTIuNTgxNSww%0ALjgxNjFdLFstMC4zNSwtMS4wNjUyXSxbMC41NzAzLC0yLjk0MjZdLFswLjEzNTEs%0ALTEuNzI3Nl0sWzEuMzI2OSwwLjA2MjJdLFswLjQ3OCwwLjIxODddLFsyLjMxNzEs%0AMi41NDY0XSxbLTIuNzQyNCwtMS4zNjU0XSxbMi41NjcyLC0xLjkxOTJdLFstMS40%0AMTMzLDIuMjk5XSxbMC4zMTY5LDIuOTQyNl1dLCJ1c2VhcnJvd3MiOltmYWxzZV0s%0AImRpc3BsYXlsYWJlbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2Fz%0AaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIs%0AIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5l%0Ad3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0%0AZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9M%0ALmNvbSJdLCJiZyI6WyJyZ2JhKDI1NSwyNTUsMjU1LDEpIl0sInZlcnRleC5ib3Jk%0AZXIiOlsicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2Jh%0AKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEs%0AMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEo%0ANTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwx%0AKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiXSwidmVydGV4%0ALmNleCI6WzQsMyw2LjUsNC41LDIuNSwzLDIuNSwyLjUsMiwyLjUsMS41LDMsMiwy%0ALDIuNSwxLjUsMi41XSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEp%0AIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEo%0AMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5%0ALDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIs%0AInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1%0ANSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAs%0AMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVk%0AZ2UubHdkIjpbNy4zMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMs%0AMS42NjY3LDcsNy4zMzMzLDAuMzMzMywxLjMzMzMsMC42NjY3LDAuMzMzMywwLjMz%0AMzMsNy42NjY3LDAuMzMzMyw3LjMzMzNdLCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwidmVydGV4LnRvb2x0aXAi%0AOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3%0Ac3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBvc3QgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FsbCBTdHJlZXQg%0ASm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8%0AXC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxi%0APk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBl%0AciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+IDxiPlR5cGU6PFwv%0AYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJyPiA8Yj5UeXBlOjxc%0AL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxiPlR5cGU6PFwvYj4g%0AVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBU%0AViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxi%0APk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6%0APFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+%0ATmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5l%0AIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4g%0AT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8YnI+IDxiPlR5cGU6%0APFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uUG9zdC5jb20g%0APGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gQU9MLmNv%0AbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2UudG9vbHRpcCI6WyI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwibWFy%0AIjpbMCwwLDAsMF0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYsMy4y%0AMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQiOlsxOV0sImVu%0AZCI6WzIwXSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpb%0AMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4Ijpb%0AN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEy%0AXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19LCJlZGdl%0AcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6%0AWzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwi%0AMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVd%0ALCIxNyI6WzE2XSwiMTgiOlsxN10sIjE5IjpbMThdfX0sImNvb3JkIjpbWzEuNjQ5%0AMSwtMS40ODE2XSxbMC44MTA3LC0xLjg4NjJdLFswLjg2MTIsLTAuNzgyOV0sWzEu%0AODg1NiwtMC41NTE5XSxbMC4xMTM0LDAuMTAwOV0sWzIuODI1MSwtMC4wMjE2XSxb%0ALTIuODI1MSwwLjA2N10sWy0wLjI2MTQsLTAuNjcxXSxbMC4zNDI1LC0yLjgyODZd%0ALFswLjA3MiwtMS41MDE3XSxbMS41OTE2LDAuMTQ5MV0sWzEuMDc4LDAuMTU1Nl0s%0AWzEuNTkxLDIuODI4Nl0sWy0yLjU0NDEsLTIuMDAzMl0sWzIuNDAwMiwtMi4xNDFd%0ALFstMi4wMjg5LDEuNzQ2NF0sWy0wLjQ5MDQsMi43NzU2XV0sInVzZWFycm93cyI6%0AW2ZhbHNlXSwiZGlzcGxheWxhYmVscyI6W2ZhbHNlXSwibGFiZWwiOlsiTlkgVGlt%0AZXMiLCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxsIFN0cmVldCBKb3VybmFsIiwiVVNB%0AIFRvZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9yayBQb3N0IiwiQ05OIiwiTVNOQkMi%0ALCJGT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllhaG9vIE5ld3MiLCJHb29nbGUgTmV3%0AcyIsIlJldXRlcnMuY29tIiwiTllUaW1lcy5jb20iLCJXYXNoaW5ndG9uUG9zdC5j%0Ab20iLCJBT0wuY29tIl0sImJnIjpbInJnYmEoMjU1LDI1NSwyNTUsMSkiXSwidmVy%0AdGV4LmJvcmRlciI6WyJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwx%0AKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSJd%0ALCJ2ZXJ0ZXguY2V4IjpbNCwzLDYuNSw0LjUsMi41LDMsMi41LDIuNSwyLDIuNSwx%0ALjUsMywyLDIsMi41LDEuNSwyLjVdLCJ2ZXJ0ZXguY29sIjpbInJnYmEoMTc5LDE3%0AOSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3%0AOSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEp%0AIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdi%0AYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5%0ALDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIs%0AInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1%0ANSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAs%0AMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMzLDcsNi42NjY3LDcuNjY2Nyw3%0ALDAuMzMzMywxLjY2NjcsNyw3LjMzMzMsMC4zMzMzLDEuMzMzMywwLjY2NjcsMC4z%0AMzMzLDAuMzMzMyw3LjY2NjcsMC4zMzMzLDcuMzMzMywxXSwiZWRnZS5jb2wiOlsi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxiPk5hbWU6PFwvYj4g%0ATlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6%0APFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFw%0AZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRvZGF5IDxi%0Acj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IExBIFRp%0AbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+%0AIE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxi%0APk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6%0APFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9i%0APiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+%0AIEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEJCQyA8%0AYnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9vIE5ld3Mg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gR29vZ2xl%0AIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4g%0AUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6%0APFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxi%0APk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4gPGI+VHlwZTo8XC9i%0APiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMyIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sIm1hciI6WzAsMCwwLDBdLCJqaXR0%0AZXIiOltmYWxzZV0sInhsaW0iOlstMy4yMDQ2LDMuMjA0Nl0sInlsaW0iOlstMi45%0ANjE2LDIuOTYxNl19fSx7InN0YXJ0IjpbMjBdLCJlbmQiOlsyMV0sImRhdGEiOnsi%0AYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlsz%0AXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpb%0AOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6%0AWzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpb%0AMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4Ijpb%0AN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEy%0AXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl0sIjE4Ijpb%0AMTddLCIxOSI6WzE4XSwiMjAiOlsxOV19fSwiY29vcmQiOltbMS40OTk2LC0xLjUz%0AOF0sWzAuNjUwNSwtMS45ODRdLFswLjY5ODksLTAuODc0M10sWzEuNzU4NCwtMC41%0ANDc2XSxbLTAuMTI2NSwtMC4wMjQ0XSxbMi44MTAxLC0wLjU3ODFdLFstMi42MTc3%0ALDAuODMyNF0sWy0wLjQzODQsLTAuNzk5OF0sWzAuMTM2MiwtMi45MjhdLFstMC4w%0AODI3LC0xLjYwMTddLFsxLjMwNjUsMC4wNzY0XSxbMC44NTI1LDAuMDY3Nl0sWzEu%0AMDE2MywyLjkyOF0sWy0yLjgxMDEsLTEuNTY2M10sWzIuMTcwMSwtMi4zMjc5XSxb%0ALTEuMTc0NSwyLjQzMzZdLFsyLjM5MDIsMC40NTE5XV0sInVzZWFycm93cyI6W2Zh%0AbHNlXSwiZGlzcGxheWxhYmVscyI6W2ZhbHNlXSwibGFiZWwiOlsiTlkgVGltZXMi%0ALCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxsIFN0cmVldCBKb3VybmFsIiwiVVNBIFRv%0AZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9yayBQb3N0IiwiQ05OIiwiTVNOQkMiLCJG%0AT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllhaG9vIE5ld3MiLCJHb29nbGUgTmV3cyIs%0AIlJldXRlcnMuY29tIiwiTllUaW1lcy5jb20iLCJXYXNoaW5ndG9uUG9zdC5jb20i%0ALCJBT0wuY29tIl0sImJnIjpbInJnYmEoMjU1LDI1NSwyNTUsMSkiXSwidmVydGV4%0ALmJvcmRlciI6WyJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSJdLCJ2%0AZXJ0ZXguY2V4IjpbNCwzLDYuNSw0LjUsMi41LDMsMi41LDIuNSwyLDIuNSwxLjUs%0AMywyLDIsMi41LDEuNSwyLjVdLCJ2ZXJ0ZXguY29sIjpbInJnYmEoMTc5LDE3OSwx%0ANzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwx%0AKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwi%0AcmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgy%0ANTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcx%0ALDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJn%0AYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwy%0AMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSki%0AXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMzLDcsNi42NjY3LDcuNjY2Nyw3LDAu%0AMzMzMywxLjY2NjcsNyw3LjMzMzMsMC4zMzMzLDEuMzMzMywwLjY2NjcsMC4zMzMz%0ALDAuMzMzMyw3LjY2NjcsMC4zMzMzLDcuMzMzMywxLDAuNjY2N10sImVkZ2UuY29s%0AIjpbInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSJdLCJ2ZXJ0ZXgu%0AdG9vbHRpcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4gPGI+VHlwZTo8%0AXC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b24gUG9zdCA8%0AYnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYWxs%0AIFN0cmVldCBKb3VybmFsIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8%0AYj5OYW1lOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3Bh%0AcGVyIiwiPGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4g%0ATmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0IDxicj4gPGI+%0AVHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENOTiA8YnI+IDxi%0APlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxicj4gPGI+VHlw%0AZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIFRWIiwiPGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwi%0APGI+TmFtZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxp%0AbmUiLCI8Yj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+VHlwZTo8XC9i%0APiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRlcnMuY29tIDxicj4gPGI+VHlw%0AZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMuY29tIDxicj4g%0APGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b25Q%0Ab3N0LmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9i%0APiBBT0wuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwiZWRnZS50b29s%0AdGlwIjpbIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjAiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA1%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0ANCJdLCJtYXIiOlswLDAsMCwwXSwiaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMu%0AMjA0NiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6%0AWzIxXSwiZW5kIjpbMjJdLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpb%0AMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3Ijpb%0ANl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0s%0AIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2%0AXX0sImVkZ2VzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6%0AWzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjEx%0AIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwi%0AMTYiOlsxNV0sIjE3IjpbMTZdLCIxOCI6WzE3XSwiMTkiOlsxOF0sIjIwIjpbMTld%0ALCIyMSI6WzIwXX19LCJjb29yZCI6W1sxLjU5MTUsLTEuNDkyN10sWzAuNDc1Mywt%0AMS45NjVdLFswLjc4MzUsLTAuOTk1MV0sWzEuNzQ3OSwtMC40NTg1XSxbMS4xODA0%0ALC0yLjA4NzddLFsyLjc5OTEsLTAuMzAxOF0sWy0yLjU1NjUsMC43NDI0XSxbLTAu%0AMjY3NywtMC40Njg2XSxbLTAuMTMwOCwtMi44NzI3XSxbLTAuMjIyMywtMS40MzQ2%0AXSxbMS4xNjQxLDAuMDU3M10sWzAuNjk5OCwtMC4wNDM5XSxbMC44MjYxLDIuODcy%0AN10sWy0yLjc5OTEsLTEuNDgyOF0sWzIuNDEyMSwtMi4xNzczXSxbLTEuMjUwMywy%0ALjI2NTddLFsyLjE5NjgsMC42MThdXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNw%0AbGF5bGFiZWxzIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0%0Ab24gUG9zdCIsIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBU%0AaW1lcyIsIk5ldyBZb3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwi%0AQUJDIiwiQkJDIiwiWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5j%0Ab20iLCJOWVRpbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20i%0AXSwiYmciOlsicmdiYSgyNTUsMjU1LDI1NSwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpb%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJn%0AYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIl0sInZlcnRleC5jZXgi%0AOls0LDMsNi41LDQuNSwyLjUsMywyLjUsMi41LDIsMi41LDEuNSwzLDIsMiwyLjUs%0AMS41LDIuNV0sInZlcnRleC5jb2wiOlsicmdiYSgxNzksMTc5LDE3OSwxKSIsInJn%0AYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgx%0ANzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwx%0ANzksMTc5LDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwx%0AKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2Jh%0AKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1%0ALDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwi%0AcmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdlLmx3%0AZCI6WzcuMzMzMyw3LjMzMzMsNyw2LjY2NjcsNy42NjY3LDcsMC4zMzMzLDEuNjY2%0ANyw3LDcuMzMzMywwLjMzMzMsMS4zMzMzLDAuNjY2NywwLjMzMzMsMC4zMzMzLDcu%0ANjY2NywwLjMzMzMsNy4zMzMzLDEsMC42NjY3LDAuMzMzM10sImVkZ2UuY29sIjpb%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSJdLCJ2ZXJ0ZXgudG9vbHRpcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRp%0AbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+%0AIFdhc2hpbmd0b24gUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwi%0APGI+TmFtZTo8XC9iPiBXYWxsIFN0cmVldCBKb3VybmFsIDxicj4gPGI+VHlwZTo8%0AXC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxi%0APlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8%0AYnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcg%0AWW9yayBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1l%0AOjxcL2I+IENOTiA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+%0AIE1TTkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gRk9Y%0AIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMg%0APGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8%0AYj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4g%0APGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdz%0AIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRl%0AcnMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+%0AIE5ZVGltZXMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1l%0AOjxcL2I+IFdhc2hpbmd0b25Qb3N0LmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25s%0AaW5lIiwiPGI+TmFtZTo8XC9iPiBBT0wuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBP%0AbmxpbmUiXSwiZWRnZS50b29sdGlwIjpbIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjAiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiA1IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gNCJdLCJtYXIiOlswLDAsMCwwXSwiaml0dGVyIjpb%0AZmFsc2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwy%0ALjk2MTZdfX0seyJzdGFydCI6WzIyXSwiZW5kIjpbMjNdLCJkYXRhIjp7ImFjdGl2%0AZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUi%0AOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIx%0AMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0s%0AIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVkZ2VzIjp7IjEiOlswXSwiMiI6WzFdLCIz%0AIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5%0AIjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0%0AIjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdLCIxOCI6WzE3XSwi%0AMTkiOlsxOF0sIjIwIjpbMTldLCIyMSI6WzIwXSwiMjIiOlsyMV19fSwiY29vcmQi%0AOltbMS41OTQ0LC0xLjQ3OTddLFswLjQ4NTMsLTEuOTQ5Ml0sWzAuNzgwMiwtMC45%0AODE5XSxbMS43NDIxLC0wLjQ0MDVdLFsxLjE1NjUsLTIuMDc2MV0sWzIuNzkxNSwt%0AMC4yNzg3XSxbLTIuNTcyNiwwLjcxODVdLFstMC4yNzU2LC0wLjQ2NDVdLFstMC4w%0ANjAyLC0yLjg4MThdLFstMC4yMjU2LC0xLjQzMjJdLFsxLjE1NDIsMC4wNzA2XSxb%0AMC42OTE4LC0wLjAzMDFdLFswLjc5ODksMi44ODE4XSxbLTIuNzkxNSwtMS41MjIx%0AXSxbMi40MjEzLC0yLjE1NDVdLFstMS4yNzQ4LDIuMjYwNl0sWzIuMTgzLDAuNjM5%0AMV1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJlbHMiOltmYWxzZV0s%0AImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJl%0AZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9z%0AdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBO%0AZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwi%0AV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6WyJyZ2JhKDI1NSwy%0ANTUsMjU1LDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJn%0AYmEoNTEsNTEsNTEsMSkiXSwidmVydGV4LmNleCI6WzQsMyw2LjUsNC41LDIuNSwz%0ALDIuNSwyLjUsMiwyLjUsMS41LDMsMiwyLDIuNSwxLjUsMi41XSwidmVydGV4LmNv%0AbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIs%0AInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdi%0AYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1%0ANSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEs%0AMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdi%0AYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIx%0ANSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIs%0AInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMzLDcuMzMzMyw3%0ALDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42NjY3LDcsNy4zMzMzLDAuMzMzMywx%0ALjMzMzMsMC42NjY3LDAuMzMzMywwLjMzMzMsNy42NjY3LDAuMzMzMyw3LjMzMzMs%0AMSwwLjY2NjcsMC4zMzMzLDddLCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiXSwidmVydGV4LnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBO%0AWSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8%0AXC9iPiBXYXNoaW5ndG9uIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBl%0AciIsIjxiPk5hbWU6PFwvYj4gV2FsbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5%0AcGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGlt%0AZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4g%0ATmV3IFlvcmsgUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+%0ATmFtZTo8XC9iPiBDTk4gPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8%0AXC9iPiBNU05CQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+%0AIEZPWCBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4g%0AQUJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8%0AYnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUg%0ATmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBS%0AZXV0ZXJzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8%0AXC9iPiBOWVRpbWVzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+%0ATmFtZTo8XC9iPiBXYXNoaW5ndG9uUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwv%0AYj4gT25saW5lIl0sImVkZ2UudG9vbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwibWFyIjpbMCwwLDAsMF0sImppdHRl%0AciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2%0AMTYsMi45NjE2XX19LHsic3RhcnQiOlsyM10sImVuZCI6WzI0XSwiZGF0YSI6eyJh%0AY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNd%0ALCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5%0AXSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1Ijpb%0AMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsx%0AXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3%0AXSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJd%0ALCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XSwiMTgiOlsx%0AN10sIjE5IjpbMThdLCIyMCI6WzE5XSwiMjEiOlsyMF0sIjIyIjpbMjFdLCIyMyI6%0AWzIyXX19LCJjb29yZCI6W1sxLjUyNDQsLTEuNTM3M10sWzAuMzk2MiwtMS44NjE5%0AXSxbMC43NDk2LC0wLjk3MDNdLFsxLjc0MDUsLTAuNDk4NV0sWzAuOTQ5MywtMi4x%0ANjg0XSxbMi43OTQ5LC0wLjM5MzhdLFstMi42MDIzLDAuNjkyMV0sWy0wLjI3NDcs%0ALTAuMzg1NV0sWzAuMTUyLC0yLjg2MzZdLFstMC4zMDIzLC0xLjM1ODldLFsxLjE5%0AMTcsMC4wNTJdLFswLjcyMDMsLTAuMDEyN10sWzAuODM4NSwyLjg2MzZdLFstMi43%0AOTQ5LC0xLjYwNzhdLFsyLjMzNDcsLTIuMjE3M10sWy0xLjI3MDQsMi4yNTk4XSxb%0AMi4yNDExLDAuNTU5Nl1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJl%0AbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0%0AIiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwi%0ATmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJC%0AQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5Z%0AVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6%0AWyJyZ2JhKDI1NSwyNTUsMjU1LDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiXSwidmVydGV4LmNleCI6WzQsMyw2%0ALjUsNC41LDIuNSwzLDIuNSwyLjUsMiwyLjUsMS41LDMsMiwyLDIuNSwxLjUsMi41%0AXSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzks%0AMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzks%0AMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzks%0AMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdi%0AYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5%0ALDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIs%0AInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1%0ANSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4z%0AMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42NjY3LDcsNy4z%0AMzMzLDAuMzMzMywxLjMzMzMsMC42NjY3LDAuMzMzMywwLjMzMzMsNy42NjY3LDAu%0AMzMzMyw3LjMzMzMsMSwwLjY2NjcsMC4zMzMzLDcsMC42NjY3XSwiZWRnZS5jb2wi%0AOlsicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2Fz%0AaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5O%0AYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlw%0AZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IExBIFRpbWVzIDxicj4g%0APGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3Jr%0AIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwv%0AYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gTVNO%0AQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3%0AcyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5j%0Ab20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gTllU%0AaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwv%0AYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUi%0ALCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGlu%0AZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIz%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiA0Il0sIm1hciI6WzAsMCwwLDBdLCJqaXR0ZXIiOltmYWxz%0AZV0sInhsaW0iOlstMy4yMDQ2LDMuMjA0Nl0sInlsaW0iOlstMi45NjE2LDIuOTYx%0ANl19fSx7InN0YXJ0IjpbMjRdLCJlbmQiOlsyNV0sImRhdGEiOnsiYWN0aXZlIjp7%0AIm5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRd%0ALCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpb%0AMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYi%0AOlsxNV0sIjE3IjpbMTZdfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsy%0AXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4%0AXSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsx%0AM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl0sIjE4IjpbMTddLCIxOSI6%0AWzE4XSwiMjAiOlsxOV0sIjIxIjpbMjBdLCIyMiI6WzIxXSwiMjMiOlsyMl0sIjI0%0AIjpbMjNdfX0sImNvb3JkIjpbWzEuNDgwMiwtMS40ODM3XSxbMC4zNTUyLC0xLjgy%0ANTNdLFswLjcxODMsLTAuOTIxMl0sWzEuNzI1OCwtMC40NzU2XSxbMC45OTM2LC0y%0ALjEyMDNdLFsyLjc4MiwtMC40NTA1XSxbLTIuNzgyLDAuMzYzN10sWy0wLjI5MDMs%0ALTAuMzE5NF0sWzAuMjE5MSwtMi44NDQ3XSxbLTAuMzM1OCwtMS4zMDY4XSxbMS4x%0AOTQsMC4wOTM0XSxbMC43MiwwLjAzNzNdLFswLjQ5NDcsMi44NDQ3XSxbLTIuNzY4%0AOSwtMS45Mjc1XSxbMS45Mjc4LC0yLjQxNTVdLFstMS41ODIxLDIuMDcxXSxbMi4y%0ANDkyLDAuNTYxXV0sInVzZWFycm93cyI6W2ZhbHNlXSwiZGlzcGxheWxhYmVscyI6%0AW2ZhbHNlXSwibGFiZWwiOlsiTlkgVGltZXMiLCJXYXNoaW5ndG9uIFBvc3QiLCJX%0AYWxsIFN0cmVldCBKb3VybmFsIiwiVVNBIFRvZGF5IiwiTEEgVGltZXMiLCJOZXcg%0AWW9yayBQb3N0IiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3cyIsIkFCQyIsIkJCQyIs%0AIllhaG9vIE5ld3MiLCJHb29nbGUgTmV3cyIsIlJldXRlcnMuY29tIiwiTllUaW1l%0Acy5jb20iLCJXYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wuY29tIl0sImJnIjpbInJn%0AYmEoMjU1LDI1NSwyNTUsMSkiXSwidmVydGV4LmJvcmRlciI6WyJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJn%0AYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1%0AMSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdi%0AYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUx%0ALDEpIiwicmdiYSg1MSw1MSw1MSwxKSJdLCJ2ZXJ0ZXguY2V4IjpbNCwzLDYuNSw0%0ALjUsMi41LDMsMi41LDIuNSwyLDIuNSwxLjUsMywyLDIsMi41LDEuNSwyLjVdLCJ2%0AZXJ0ZXguY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzks%0AMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzks%0AMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIs%0AInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1%0ANSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEs%0AMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdi%0AYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIx%0ANSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMs%0ANy4zMzMzLDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2NjcsNyw3LjMzMzMs%0AMC4zMzMzLDEuMzMzMywwLjY2NjcsMC4zMzMzLDAuMzMzMyw3LjY2NjcsMC4zMzMz%0ALDcuMzMzMywxLDAuNjY2NywwLjMzMzMsNywwLjY2NjcsN10sImVkZ2UuY29sIjpb%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSJdLCJ2ZXJ0ZXgudG9vbHRpcCI6WyI8Yj5O%0AYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIi%0ALCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b24gUG9zdCA8YnI+IDxiPlR5cGU6PFwv%0AYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYWxsIFN0cmVldCBKb3VybmFs%0AIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFVT%0AQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8%0AXC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+%0ATmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdz%0AcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENOTiA8YnI+IDxiPlR5cGU6PFwvYj4gVFYi%0ALCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxi%0APk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+%0ATmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8%0AXC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBZ%0AYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxc%0AL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5O%0AYW1lOjxcL2I+IFJldXRlcnMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUi%0ALCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBP%0AbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b25Qb3N0LmNvbSA8YnI+IDxi%0APlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBBT0wuY29tIDxicj4g%0APGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwiZWRnZS50b29sdGlwIjpbIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjAiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA1IiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0ANCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCJdLCJtYXIiOlswLDAs%0AMCwwXSwiaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5%0AbGltIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6WzI1XSwiZW5kIjpbMjZd%0ALCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6%0AWzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6%0AWzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6%0AWzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVkZ2VzIjp7IjEi%0AOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjci%0AOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzEx%0AXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3Ijpb%0AMTZdLCIxOCI6WzE3XSwiMTkiOlsxOF0sIjIwIjpbMTldLCIyMSI6WzIwXSwiMjIi%0AOlsyMV0sIjIzIjpbMjJdLCIyNCI6WzIzXSwiMjUiOlsyNF19fSwiY29vcmQiOltb%0AMS40ODk4LC0xLjQ3NjVdLFswLjM2NDUsLTEuODIzM10sWzAuNzI0NCwtMC45MTg4%0AXSxbMS43Mjg3LC0wLjQ2ODNdLFsxLjAwNTYsLTIuMTE1XSxbMi43ODM4LC0wLjQz%0ANTVdLFstMi43ODM4LDAuMzQ3OV0sWy0wLjI4NjksLTAuMzE5XSxbMC4yMzMsLTIu%0AODQzN10sWy0wLjMyODYsLTEuMzA4MV0sWzEuMTk0NSwwLjA5OV0sWzAuNzE5Nyww%0ALjA0MDRdLFswLjQ3MjQsMi44NDM3XSxbLTIuNzUyLC0xLjk2MTVdLFsxLjk0MTYs%0ALTIuNDA2NV0sWy0xLjU5NCwyLjA1NzJdLFsyLjI0OTYsMC41Njg0XV0sInVzZWFy%0Acm93cyI6W2ZhbHNlXSwiZGlzcGxheWxhYmVscyI6W2ZhbHNlXSwibGFiZWwiOlsi%0ATlkgVGltZXMiLCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxsIFN0cmVldCBKb3VybmFs%0AIiwiVVNBIFRvZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9yayBQb3N0IiwiQ05OIiwi%0ATVNOQkMiLCJGT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllhaG9vIE5ld3MiLCJHb29n%0AbGUgTmV3cyIsIlJldXRlcnMuY29tIiwiTllUaW1lcy5jb20iLCJXYXNoaW5ndG9u%0AUG9zdC5jb20iLCJBT0wuY29tIl0sImJnIjpbInJnYmEoMjU1LDI1NSwyNTUsMSki%0AXSwidmVydGV4LmJvcmRlciI6WyJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJn%0AYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1%0AMSwxKSJdLCJ2ZXJ0ZXguY2V4IjpbNCwzLDYuNSw0LjUsMi41LDMsMi41LDIuNSwy%0ALDIuNSwxLjUsMywyLDIsMi41LDEuNSwyLjVdLCJ2ZXJ0ZXguY29sIjpbInJnYmEo%0AMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzks%0AMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzks%0AMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMjU1LDk5LDcxLDEp%0AIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEo%0AMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSwyMTUs%0AMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJy%0AZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUs%0AMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMzLDcsNi42NjY3LDcu%0ANjY2Nyw3LDAuMzMzMywxLjY2NjcsNyw3LjMzMzMsMC4zMzMzLDEuMzMzMywwLjY2%0ANjcsMC4zMzMzLDAuMzMzMyw3LjY2NjcsMC4zMzMzLDcuMzMzMywxLDAuNjY2Nyww%0ALjMzMzMsNywwLjY2NjcsNywwLjMzMzNdLCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwidmVydGV4LnRvb2x0%0AaXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4g%0ATmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBvc3QgPGJyPiA8%0AYj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FsbCBTdHJl%0AZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFt%0AZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIs%0AIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3Nw%0AYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+IDxiPlR5cGU6%0APFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJyPiA8Yj5UeXBl%0AOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxiPlR5cGU6PFwv%0AYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+VHlwZTo8XC9i%0APiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIs%0AIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5h%0AbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwi%0APGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25s%0AaW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxiPlR5cGU6PFwv%0AYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8YnI+IDxiPlR5%0AcGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uUG9zdC5j%0Ab20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gQU9M%0ALmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2UudG9vbHRpcCI6%0AWyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwi%0AbWFyIjpbMCwwLDAsMF0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYs%0AMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQiOlsyNl0s%0AImVuZCI6WzI3XSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIy%0AIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4%0AIjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6%0AWzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19LCJl%0AZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwi%0ANiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEw%0AXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2Ijpb%0AMTVdLCIxNyI6WzE2XSwiMTgiOlsxN10sIjE5IjpbMThdLCIyMCI6WzE5XSwiMjEi%0AOlsyMF0sIjIyIjpbMjFdLCIyMyI6WzIyXSwiMjQiOlsyM10sIjI1IjpbMjRdLCIy%0ANiI6WzI1XX19LCJjb29yZCI6W1sxLjQ2NTksLTEuMzM0Ml0sWzAuMzgwMywtMS43%0AMzc4XSxbMC43OTc1LC0wLjgyXSxbMS42NDQ3LC0wLjEyNF0sWzEuMDI5OCwtMi4w%0ANTRdLFsxLjg4ODUsMC45NzEzXSxbLTIuNzgyMSwtMV0sWy0wLjE5MSwtMC4yM10s%0AWzAuMjI5NCwtMi43NjU1XSxbLTAuMjc2LC0xLjE5NjFdLFsxLjk3MjgsLTAuNzc3%0AOF0sWzAuNzY3OSwwLjIwODRdLFstMC42MDY4LDIuNzY1NV0sWy0yLjI0NzQsMS4z%0AMjQyXSxbMS45ODE2LC0yLjI4NThdLFsyLjA5OSwxLjk4MTJdLFsyLjc4MjEsMC4w%0AMjY1XV0sInVzZWFycm93cyI6W2ZhbHNlXSwiZGlzcGxheWxhYmVscyI6W2ZhbHNl%0AXSwibGFiZWwiOlsiTlkgVGltZXMiLCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxsIFN0%0AcmVldCBKb3VybmFsIiwiVVNBIFRvZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9yayBQ%0Ab3N0IiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllhaG9v%0AIE5ld3MiLCJHb29nbGUgTmV3cyIsIlJldXRlcnMuY29tIiwiTllUaW1lcy5jb20i%0ALCJXYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wuY29tIl0sImJnIjpbInJnYmEoMjU1%0ALDI1NSwyNTUsMSkiXSwidmVydGV4LmJvcmRlciI6WyJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSJdLCJ2ZXJ0ZXguY2V4IjpbNCwzLDYuNSw0LjUsMi41%0ALDMsMi41LDIuNSwyLDIuNSwxLjUsMywyLDIsMi41LDEuNSwyLjVdLCJ2ZXJ0ZXgu%0AY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEp%0AIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEo%0AMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3%0AMSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJy%0AZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUs%0AMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEp%0AIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMz%0ALDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2NjcsNyw3LjMzMzMsMC4zMzMz%0ALDEuMzMzMywwLjY2NjcsMC4zMzMzLDAuMzMzMyw3LjY2NjcsMC4zMzMzLDcuMzMz%0AMywxLDAuNjY2NywwLjMzMzMsNywwLjY2NjcsNywwLjMzMzMsN10sImVkZ2UuY29s%0AIjpbInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSJdLCJ2ZXJ0ZXgudG9vbHRpcCI6WyI8Yj5OYW1l%0AOjxcL2I+IE5ZIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8%0AYj5OYW1lOjxcL2I+IFdhc2hpbmd0b24gUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4g%0ATmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYWxsIFN0cmVldCBKb3VybmFsIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFVTQSBU%0Ab2RheSA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9i%0APiBMQSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFt%0AZTo8XC9iPiBOZXcgWW9yayBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFw%0AZXIiLCI8Yj5OYW1lOjxcL2I+IENOTiA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8%0AYj5OYW1lOjxcL2I+IE1TTkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5h%0AbWU6PFwvYj4gRk9YIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFt%0AZTo8XC9iPiBBQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9i%0APiBCQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBZYWhv%0AbyBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+%0AIEdvb2dsZSBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1l%0AOjxcL2I+IFJldXRlcnMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8%0AYj5OYW1lOjxcL2I+IE5ZVGltZXMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxp%0AbmUiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b25Qb3N0LmNvbSA8YnI+IDxiPlR5%0AcGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBBT0wuY29tIDxicj4gPGI+%0AVHlwZTo8XC9iPiBPbmxpbmUiXSwiZWRnZS50b29sdGlwIjpbIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjAiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA1IiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCJdLCJtYXIiOlswLDAsMCww%0AXSwiaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGlt%0AIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6WzI3XSwiZW5kIjpbMjhdLCJk%0AYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJd%0ALCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6Wzhd%0ALCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEz%0AXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVkZ2VzIjp7IjEiOlsw%0AXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2%0AXSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwi%0AMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZd%0ALCIxOCI6WzE3XSwiMTkiOlsxOF0sIjIwIjpbMTldLCIyMSI6WzIwXSwiMjIiOlsy%0AMV0sIjIzIjpbMjJdLCIyNCI6WzIzXSwiMjUiOlsyNF0sIjI2IjpbMjVdLCIyNyI6%0AWzI2XX19LCJjb29yZCI6W1sxLjU2MjMsLTEuMzM2NV0sWzAuNDg4NCwtMS43NjY1%0AXSxbMC44Nzg4LC0wLjg0MDRdLFsxLjY4NDEsLTAuMTM1Nl0sWzEuMTQ3LC0yLjA2%0ANDVdLFsyLjA2NDQsMC44OTU1XSxbLTIuNjk4NSwtMC45MTg3XSxbLTAuMTMwNiwt%0AMC4yODQ4XSxbMC4zNjE3LC0yLjc5MzVdLFstMC4xODUxLC0xLjI0NzNdLFsyLjA4%0AMTgsLTAuNzg1Ml0sWzAuNzk5NiwwLjE5OThdLFstMC40NDAxLDIuNzkzNV0sWy0y%0ALjExMTYsMS4zOTE1XSxbMi4xMTExLC0yLjI2NDhdLFsyLjMxMTksMS44OTg5XSxb%0AMi42OTg1LDAuMjgxMV1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJl%0AbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0%0AIiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwi%0ATmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJC%0AQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5Z%0AVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6%0AWyJyZ2JhKDI1NSwyNTUsMjU1LDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiXSwidmVydGV4LmNleCI6WzQsMyw2%0ALjUsNC41LDIuNSwzLDIuNSwyLjUsMiwyLjUsMS41LDMsMiwyLDIuNSwxLjUsMi41%0AXSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzks%0AMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzks%0AMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzks%0AMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdi%0AYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5%0ALDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIs%0AInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1%0ANSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4z%0AMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42NjY3LDcsNy4z%0AMzMzLDAuMzMzMywxLjMzMzMsMC42NjY3LDAuMzMzMywwLjMzMzMsNy42NjY3LDAu%0AMzMzMyw3LjMzMzMsMSwwLjY2NjcsMC4zMzMzLDcsMC42NjY3LDcsMC4zMzMzLDcs%0AN10sImVkZ2UuY29sIjpbInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSJdLCJ2ZXJ0ZXgudG9vbHRpcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRpbWVz%0AIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdh%0Ac2hpbmd0b24gUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+%0ATmFtZTo8XC9iPiBXYWxsIFN0cmVldCBKb3VybmFsIDxicj4gPGI+VHlwZTo8XC9i%0APiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxiPlR5%0AcGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcgWW9y%0AayBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxc%0AL2I+IENOTiA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IE1T%0ATkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gRk9YIE5l%0Ad3MgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMgPGJy%0APiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4gPGI+%0AVHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdzIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRlcnMu%0AY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IE5Z%0AVGltZXMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxc%0AL2I+IFdhc2hpbmd0b25Qb3N0LmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5l%0AIiwiPGI+TmFtZTo8XC9iPiBBT0wuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxp%0AbmUiXSwiZWRnZS50b29sdGlwIjpbIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjAiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiA1IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gNCJdLCJtYXIiOlswLDAsMCwwXSwiaml0dGVyIjpbZmFs%0Ac2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwyLjk2%0AMTZdfX0seyJzdGFydCI6WzI4XSwiZW5kIjpbMjldLCJkYXRhIjp7ImFjdGl2ZSI6%0AeyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0%0AXSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6%0AWzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2%0AIjpbMTVdLCIxNyI6WzE2XX0sImVkZ2VzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpb%0AMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5Ijpb%0AOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0Ijpb%0AMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdLCIxOCI6WzE3XSwiMTki%0AOlsxOF0sIjIwIjpbMTldLCIyMSI6WzIwXSwiMjIiOlsyMV0sIjIzIjpbMjJdLCIy%0ANCI6WzIzXSwiMjUiOlsyNF0sIjI2IjpbMjVdLCIyNyI6WzI2XSwiMjgiOlsyN119%0AfSwiY29vcmQiOltbMS40OTIsLTEuMjE0M10sWzAuNDg2NywtMS43NDcxXSxbMC43%0AMTM2LC0wLjc0MDddLFsxLjYwMjgsLTAuMDIwM10sWzEuMTQ5MSwtMS45NDZdLFsy%0ALjA4MzIsMC45ODJdLFstMC40NDc2LC0wLjYxM10sWy0wLjExMjMsMC4wNjg0XSxb%0AMC40ODMsLTIuNzk1Ml0sWy0wLjI1MTEsLTEuMzk5NV0sWzEuODc4NiwtMC42NjA3%0AXSxbMC43NzE0LDAuMzI1OF0sWy0wLjc0ODYsMi43OTUyXSxbLTIuNjY2NywwLjUw%0AMDZdLFsyLjE0NzYsLTIuMTAxNl0sWzIuNDQxNiwxLjk2MzJdLFsyLjY2NjcsMC4z%0AMTU2XV0sInVzZWFycm93cyI6W2ZhbHNlXSwiZGlzcGxheWxhYmVscyI6W2ZhbHNl%0AXSwibGFiZWwiOlsiTlkgVGltZXMiLCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxsIFN0%0AcmVldCBKb3VybmFsIiwiVVNBIFRvZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9yayBQ%0Ab3N0IiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllhaG9v%0AIE5ld3MiLCJHb29nbGUgTmV3cyIsIlJldXRlcnMuY29tIiwiTllUaW1lcy5jb20i%0ALCJXYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wuY29tIl0sImJnIjpbInJnYmEoMjU1%0ALDI1NSwyNTUsMSkiXSwidmVydGV4LmJvcmRlciI6WyJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSJdLCJ2ZXJ0ZXguY2V4IjpbNCwzLDYuNSw0LjUsMi41%0ALDMsMi41LDIuNSwyLDIuNSwxLjUsMywyLDIsMi41LDEuNSwyLjVdLCJ2ZXJ0ZXgu%0AY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEp%0AIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEo%0AMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3%0AMSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJy%0AZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUs%0AMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEp%0AIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMz%0ALDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2NjcsNyw3LjMzMzMsMC4zMzMz%0ALDEuMzMzMywwLjY2NjcsMC4zMzMzLDAuMzMzMyw3LjY2NjcsMC4zMzMzLDcuMzMz%0AMywxLDAuNjY2NywwLjMzMzMsNywwLjY2NjcsNywwLjMzMzMsNyw3LDAuMzMzM10s%0AImVkZ2UuY29sIjpbInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSJdLCJ2ZXJ0ZXgudG9vbHRpcCI6WyI8Yj5O%0AYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIi%0ALCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b24gUG9zdCA8YnI+IDxiPlR5cGU6PFwv%0AYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYWxsIFN0cmVldCBKb3VybmFs%0AIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFVT%0AQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8%0AXC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+%0ATmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdz%0AcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENOTiA8YnI+IDxiPlR5cGU6PFwvYj4gVFYi%0ALCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxi%0APk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+%0ATmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8%0AXC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBZ%0AYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxc%0AL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5O%0AYW1lOjxcL2I+IFJldXRlcnMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUi%0ALCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBP%0AbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b25Qb3N0LmNvbSA8YnI+IDxi%0APlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBBT0wuY29tIDxicj4g%0APGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwiZWRnZS50b29sdGlwIjpbIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjAiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA1IiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0ANCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCJdLCJtYXIiOlswLDAs%0AMCwwXSwiaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5%0AbGltIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6WzI5XSwiZW5kIjpbMzBd%0ALCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6%0AWzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6%0AWzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6%0AWzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVkZ2VzIjp7IjEi%0AOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjci%0AOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzEx%0AXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3Ijpb%0AMTZdLCIxOCI6WzE3XSwiMTkiOlsxOF0sIjIwIjpbMTldLCIyMSI6WzIwXSwiMjIi%0AOlsyMV0sIjIzIjpbMjJdLCIyNCI6WzIzXSwiMjUiOlsyNF0sIjI2IjpbMjVdLCIy%0ANyI6WzI2XSwiMjgiOlsyN10sIjI5IjpbMjhdfX0sImNvb3JkIjpbWzEuNDc1LC0x%0ALjIzMzddLFswLjQ2MiwtMS43NTY0XSxbMC43MDI2LC0wLjc1MzNdLFsxLjU5NzUs%0ALTAuMDM5Nl0sWzEuMTIyMSwtMS45NjI0XSxbMi4wODUsMC45NTkxXSxbLTAuNDQ3%0AOSwtMC41OTA5XSxbLTAuMTI5MiwwLjA0MjNdLFswLjQ0OTYsLTIuODAzNl0sWy0w%0ALjI3NDgsLTEuNDAxNF0sWzEuODY3NCwtMC42ODM1XSxbMC43NywwLjMxNjldLFst%0AMC43MTUzLDIuODAzNl0sWy0yLjY2MzUsMC41MzUzXSxbMi4xMjA1LC0yLjEyNjZd%0ALFsyLjQ1ODEsMS45MzVdLFsyLjY2MzUsMC4yODU3XV0sInVzZWFycm93cyI6W2Zh%0AbHNlXSwiZGlzcGxheWxhYmVscyI6W2ZhbHNlXSwibGFiZWwiOlsiTlkgVGltZXMi%0ALCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxsIFN0cmVldCBKb3VybmFsIiwiVVNBIFRv%0AZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9yayBQb3N0IiwiQ05OIiwiTVNOQkMiLCJG%0AT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllhaG9vIE5ld3MiLCJHb29nbGUgTmV3cyIs%0AIlJldXRlcnMuY29tIiwiTllUaW1lcy5jb20iLCJXYXNoaW5ndG9uUG9zdC5jb20i%0ALCJBT0wuY29tIl0sImJnIjpbInJnYmEoMjU1LDI1NSwyNTUsMSkiXSwidmVydGV4%0ALmJvcmRlciI6WyJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSJdLCJ2%0AZXJ0ZXguY2V4IjpbNCwzLDYuNSw0LjUsMi41LDMsMi41LDIuNSwyLDIuNSwxLjUs%0AMywyLDIsMi41LDEuNSwyLjVdLCJ2ZXJ0ZXguY29sIjpbInJnYmEoMTc5LDE3OSwx%0ANzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwx%0AKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwi%0AcmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgy%0ANTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcx%0ALDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJn%0AYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwy%0AMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSki%0AXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMzLDcsNi42NjY3LDcuNjY2Nyw3LDAu%0AMzMzMywxLjY2NjcsNyw3LjMzMzMsMC4zMzMzLDEuMzMzMywwLjY2NjcsMC4zMzMz%0ALDAuMzMzMyw3LjY2NjcsMC4zMzMzLDcuMzMzMywxLDAuNjY2NywwLjMzMzMsNyww%0ALjY2NjcsNywwLjMzMzMsNyw3LDAuMzMzMyw3LjMzMzNdLCJlZGdlLmNvbCI6WyJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwidmVydGV4LnRvb2x0aXAi%0AOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3%0Ac3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBvc3QgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FsbCBTdHJlZXQg%0ASm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8%0AXC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxi%0APk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBl%0AciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+IDxiPlR5cGU6PFwv%0AYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJyPiA8Yj5UeXBlOjxc%0AL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxiPlR5cGU6PFwvYj4g%0AVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBU%0AViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxi%0APk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6%0APFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+%0ATmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5l%0AIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4g%0AT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8YnI+IDxiPlR5cGU6%0APFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uUG9zdC5jb20g%0APGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gQU9MLmNv%0AbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2UudG9vbHRpcCI6WyI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwibWFy%0AIjpbMCwwLDAsMF0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYsMy4y%0AMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQiOlszMF0sImVu%0AZCI6WzMxXSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpb%0AMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4Ijpb%0AN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEy%0AXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19LCJlZGdl%0AcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6%0AWzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwi%0AMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVd%0ALCIxNyI6WzE2XSwiMTgiOlsxN10sIjE5IjpbMThdLCIyMCI6WzE5XSwiMjEiOlsy%0AMF0sIjIyIjpbMjFdLCIyMyI6WzIyXSwiMjQiOlsyM10sIjI1IjpbMjRdLCIyNiI6%0AWzI1XSwiMjciOlsyNl0sIjI4IjpbMjddLCIyOSI6WzI4XSwiMzAiOlsyOV19fSwi%0AY29vcmQiOltbMS40NDQ5LC0xLjI2NTNdLFswLjQxOTIsLTEuNzY5OF0sWzAuNjg0%0AMiwtMC43NjkxXSxbMS41ODUzLC0wLjA3MDldLFsxLjA3NzIsLTEuOTg3OV0sWzIu%0AMDg1NSwwLjkyMTFdLFstMC40NjEzLC0wLjYzMDZdLFstMC4xNTIzLDAuMDI3OV0s%0AWzAuMzg0OCwtMi44MTUxXSxbLTAuMzA5MywtMS4zNjY0XSxbMS44NDg2LC0wLjcx%0AODddLFswLjc2MDksMC4zMDA1XSxbLTAuNjc0OCwyLjgxNTFdLFstMi42NTYyLDAu%0ANTk5Ml0sWzIuMDcwOSwtMi4xNjk3XSxbMi40NzM1LDEuODkwNl0sWzIuNjU2Miww%0ALjI0MDhdXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxzIjpbZmFs%0Ac2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9zdCIsIldhbGwg%0AU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5ldyBZb3Jr%0AIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJDIiwiWWFo%0Ab28gTmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJOWVRpbWVzLmNv%0AbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmciOlsicmdiYSgy%0ANTUsMjU1LDI1NSwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEoNTEsNTEsNTEs%0AMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEo%0ANTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwx%0AKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIl0sInZlcnRleC5jZXgiOls0LDMsNi41LDQuNSwy%0ALjUsMywyLjUsMi41LDIsMi41LDEuNSwzLDIsMiwyLjUsMS41LDIuNV0sInZlcnRl%0AeC5jb2wiOlsicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzks%0AMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIs%0AInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdi%0AYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5%0ALDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIs%0AInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1%0ANSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAs%0AMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdlLmx3ZCI6WzcuMzMzMyw3LjMz%0AMzMsNyw2LjY2NjcsNy42NjY3LDcsMC4zMzMzLDEuNjY2Nyw3LDcuMzMzMywwLjMz%0AMzMsMS4zMzMzLDAuNjY2NywwLjMzMzMsMC4zMzMzLDcuNjY2NywwLjMzMzMsNy4z%0AMzMzLDEsMC42NjY3LDAuMzMzMyw3LDAuNjY2Nyw3LDAuMzMzMyw3LDcsMC4zMzMz%0ALDcuMzMzMyw3XSwiZWRnZS5jb2wiOlsicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpb%0AIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3Nw%0AYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlw%0AZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpv%0AdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwv%0AYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5O%0AYW1lOjxcL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIi%0ALCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9i%0APiBUViIsIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRW%0AIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYi%0ALCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5O%0AYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxc%0AL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5h%0AbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIs%0AIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9u%0AbGluZSIsIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20g%0APGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sIm1hciI6%0AWzAsMCwwLDBdLCJqaXR0ZXIiOltmYWxzZV0sInhsaW0iOlstMy4yMDQ2LDMuMjA0%0ANl0sInlsaW0iOlstMi45NjE2LDIuOTYxNl19fSx7InN0YXJ0IjpbMzFdLCJlbmQi%0AOlszMl0sImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFd%0ALCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6Wzdd%0ALCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0s%0AIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRnZXMi%0AOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1%0AXSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEy%0AIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwi%0AMTciOlsxNl0sIjE4IjpbMTddLCIxOSI6WzE4XSwiMjAiOlsxOV0sIjIxIjpbMjBd%0ALCIyMiI6WzIxXSwiMjMiOlsyMl0sIjI0IjpbMjNdLCIyNSI6WzI0XSwiMjYiOlsy%0ANV0sIjI3IjpbMjZdLCIyOCI6WzI3XSwiMjkiOlsyOF0sIjMwIjpbMjldLCIzMSI6%0AWzMwXX19LCJjb29yZCI6W1swLjgzMywtMS4yMzJdLFstMC4xODU3LC0xLjczNzld%0ALFswLjAzNDEsLTAuNzA2N10sWzEuMDAxNywtMC4wMzI2XSxbMC40NzE3LC0xLjkz%0ANzFdLFsxLjYzNDYsMC44ODI2XSxbLTEuMTU4MiwtMC41Mjc5XSxbLTAuNzMzNCww%0ALjExOTFdLFstMC4xMzc3LC0yLjgwODFdLFstMC45MDQ5LC0xLjI5MzVdLFsxLjEz%0ANjMsLTAuNjcwN10sWzAuMTk4OSwwLjM3NjVdLFstMS4zMjY3LDIuODA4MV0sWy0y%0ALjI1MDQsLTAuNDAzMl0sWzEuNDg3NywtMi4xNDJdLFsyLjI1MDQsMS43NDE0XSxb%0AMi4xMjMzLDAuMTM3MV1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJl%0AbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0%0AIiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwi%0ATmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJC%0AQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5Z%0AVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6%0AWyJyZ2JhKDI1NSwyNTUsMjU1LDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiXSwidmVydGV4LmNleCI6WzQsMyw2%0ALjUsNC41LDIuNSwzLDIuNSwyLjUsMiwyLjUsMS41LDMsMiwyLDIuNSwxLjUsMi41%0AXSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzks%0AMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzks%0AMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzks%0AMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdi%0AYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5%0ALDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIs%0AInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1%0ANSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4z%0AMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42NjY3LDcsNy4z%0AMzMzLDAuMzMzMywxLjMzMzMsMC42NjY3LDAuMzMzMywwLjMzMzMsNy42NjY3LDAu%0AMzMzMyw3LjMzMzMsMSwwLjY2NjcsMC4zMzMzLDcsMC42NjY3LDcsMC4zMzMzLDcs%0ANywwLjMzMzMsNy4zMzMzLDcsMS4zMzMzXSwiZWRnZS5jb2wiOlsicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxiPk5hbWU6PFwv%0AYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5h%0AbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdz%0AcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJyPiA8%0AYj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRvZGF5%0AIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IExB%0AIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxc%0AL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIs%0AIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5h%0AbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8%0AXC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxc%0AL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEJC%0AQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9vIE5l%0Ad3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gR29v%0AZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwv%0AYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5h%0AbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIs%0AIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4gPGI+VHlwZTo8%0AXC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sIm1hciI6WzAsMCwwLDBdLCJq%0AaXR0ZXIiOltmYWxzZV0sInhsaW0iOlstMy4yMDQ2LDMuMjA0Nl0sInlsaW0iOlst%0AMi45NjE2LDIuOTYxNl19fSx7InN0YXJ0IjpbMzJdLCJlbmQiOlszM10sImRhdGEi%0AOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQi%0AOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEw%0AIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIx%0ANSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRnZXMiOnsiMSI6WzBdLCIy%0AIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4%0AIjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6%0AWzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl0sIjE4%0AIjpbMTddLCIxOSI6WzE4XSwiMjAiOlsxOV0sIjIxIjpbMjBdLCIyMiI6WzIxXSwi%0AMjMiOlsyMl0sIjI0IjpbMjNdLCIyNSI6WzI0XSwiMjYiOlsyNV0sIjI3IjpbMjZd%0ALCIyOCI6WzI3XSwiMjkiOlsyOF0sIjMwIjpbMjldLCIzMSI6WzMwXSwiMzIiOlsz%0AMV19fSwiY29vcmQiOltbMC44NDE0LC0xLjIyNTFdLFstMC4xNzUsLTEuNzM1NF0s%0AWzAuMDQxMywtMC43MDIzXSxbMS4wMDY0LC0wLjAyNDRdLFswLjQ4NTMsLTEuOTMx%0ANV0sWzEuNjM2NSwwLjg5MjFdLFstMS4xNTAyLC0wLjUyNzddLFstMC43Mjk5LDAu%0AMTIwM10sWy0wLjEyNTUsLTIuODA0M10sWy0wLjg5NjUsLTEuMjk0Ml0sWzEuMTQy%0AOSwtMC42NjI1XSxbMC4yMDEsMC4zODIxXSxbLTEuMzQxMiwyLjgwNDNdLFstMi4y%0ANDM2LC0wLjQwOTRdLFsxLjUwMjcsLTIuMTMxNV0sWzIuMjQzNiwxLjc1OF0sWzIu%0AMTI2NywwLjE0NzVdXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxz%0AIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9zdCIs%0AIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5l%0AdyBZb3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJD%0AIiwiWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJOWVRp%0AbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmciOlsi%0AcmdiYSgyNTUsMjU1LDI1NSwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIl0sInZlcnRleC5jZXgiOls0LDMsNi41%0ALDQuNSwyLjUsMywyLjUsMi41LDIsMi41LDEuNSwzLDIsMiwyLjUsMS41LDIuNV0s%0AInZlcnRleC5jb2wiOlsicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3%0AOSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3%0AOSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEp%0AIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEo%0AMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3%0AMSwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJy%0AZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUs%0AMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdlLmx3ZCI6WzcuMzMz%0AMyw3LjMzMzMsNyw2LjY2NjcsNy42NjY3LDcsMC4zMzMzLDEuNjY2Nyw3LDcuMzMz%0AMywwLjMzMzMsMS4zMzMzLDAuNjY2NywwLjMzMzMsMC4zMzMzLDcuNjY2NywwLjMz%0AMzMsNy4zMzMzLDEsMC42NjY3LDAuMzMzMyw3LDAuNjY2Nyw3LDAuMzMzMyw3LDcs%0AMC4zMzMzLDcuMzMzMyw3LDEuMzMzMywwLjY2NjddLCJlZGdlLmNvbCI6WyJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwidmVy%0AdGV4LnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBv%0Ac3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4g%0AV2FsbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVy%0AIiwiPGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5l%0Ad3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+%0AIDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJy%0APiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxi%0APlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+%0AVHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8%0AXC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBU%0AViIsIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4g%0AT25saW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6%0APFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxi%0APlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8%0AYnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5n%0AdG9uUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6%0APFwvYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2Uu%0AdG9vbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gNSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDQiXSwibWFyIjpbMCwwLDAsMF0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6%0AWy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3Rh%0AcnQiOlszM10sImVuZCI6WzM0XSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsi%0AMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwi%0ANyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpb%0AMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTci%0AOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10s%0AIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6Wzld%0ALCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsx%0ANF0sIjE2IjpbMTVdLCIxNyI6WzE2XSwiMTgiOlsxN10sIjE5IjpbMThdLCIyMCI6%0AWzE5XSwiMjEiOlsyMF0sIjIyIjpbMjFdLCIyMyI6WzIyXSwiMjQiOlsyM10sIjI1%0AIjpbMjRdLCIyNiI6WzI1XSwiMjciOlsyNl0sIjI4IjpbMjddLCIyOSI6WzI4XSwi%0AMzAiOlsyOV0sIjMxIjpbMzBdLCIzMiI6WzMxXSwiMzMiOlszMl19fSwiY29vcmQi%0AOltbMC44MDIyLC0xLjI1NjhdLFstMC4yMjU4LC0xLjc0MzRdLFswLjAxMjUsLTAu%0ANzE2N10sWzAuOTkyOCwtMC4wNjA1XSxbMC40MjkxLC0xLjk1NDldLFsxLjY0MTEs%0AMC44NDQ3XSxbLTEuMTc1OSwtMC41MTZdLFstMC43NDA5LDAuMTIzMV0sWy0wLjE5%0AODYsLTIuODE0M10sWy0wLjkzNzUsLTEuMjg4Ml0sWzEuMTE0NiwtMC43MDA5XSxb%0AMC4xOTU2LDAuMzYzMV0sWy0xLjMwMTMsMi44MTQzXSxbLTIuMjY0MSwtMC4zNzIy%0AXSxbMS40NDMyLC0yLjE3NjVdLFsyLjI2NDEsMS42OTk0XSxbMi4xMTYzLDAuMDg5%0AN11dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJlbHMiOltmYWxzZV0s%0AImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJl%0AZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9z%0AdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBO%0AZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwi%0AV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6WyJyZ2JhKDI1NSwy%0ANTUsMjU1LDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJn%0AYmEoNTEsNTEsNTEsMSkiXSwidmVydGV4LmNleCI6WzQsMyw2LjUsNC41LDIuNSwz%0ALDIuNSwyLjUsMiwyLjUsMS41LDMsMiwyLDIuNSwxLjUsMi41XSwidmVydGV4LmNv%0AbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIs%0AInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdi%0AYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1%0ANSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEs%0AMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdi%0AYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIx%0ANSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIs%0AInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMzLDcuMzMzMyw3%0ALDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42NjY3LDcsNy4zMzMzLDAuMzMzMywx%0ALjMzMzMsMC42NjY3LDAuMzMzMywwLjMzMzMsNy42NjY3LDAuMzMzMyw3LjMzMzMs%0AMSwwLjY2NjcsMC4zMzMzLDcsMC42NjY3LDcsMC4zMzMzLDcsNywwLjMzMzMsNy4z%0AMzMzLDcsMS4zMzMzLDAuNjY2Nyw3XSwiZWRnZS5jb2wiOlsicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxiPk5hbWU6PFwvYj4gTlkgVGlt%0AZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4g%0AV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8%0AYj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRvZGF5IDxicj4gPGI+%0AVHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IExBIFRpbWVzIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IE5ldyBZ%0Ab3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6%0APFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4g%0ATVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBGT1gg%0ATmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEFCQyA8%0AYnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEJCQyA8YnI+IDxi%0APlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9vIE5ld3MgPGJyPiA8%0AYj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gR29vZ2xlIE5ld3Mg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gUmV1dGVy%0Acy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4g%0ATllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6%0APFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxp%0AbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9u%0AbGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMyIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiA0Il0sIm1hciI6WzAsMCwwLDBdLCJqaXR0ZXIiOltm%0AYWxzZV0sInhsaW0iOlstMy4yMDQ2LDMuMjA0Nl0sInlsaW0iOlstMi45NjE2LDIu%0AOTYxNl19fSx7InN0YXJ0IjpbMzRdLCJlbmQiOlszNV0sImRhdGEiOnsiYWN0aXZl%0AIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6%0AWzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjEx%0AIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwi%0AMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMi%0AOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjki%0AOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQi%0AOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl0sIjE4IjpbMTddLCIx%0AOSI6WzE4XSwiMjAiOlsxOV0sIjIxIjpbMjBdLCIyMiI6WzIxXSwiMjMiOlsyMl0s%0AIjI0IjpbMjNdLCIyNSI6WzI0XSwiMjYiOlsyNV0sIjI3IjpbMjZdLCIyOCI6WzI3%0AXSwiMjkiOlsyOF0sIjMwIjpbMjldLCIzMSI6WzMwXSwiMzIiOlszMV0sIjMzIjpb%0AMzJdLCIzNCI6WzMzXX19LCJjb29yZCI6W1sxLjA1NjMsLTEuMjQ3OV0sWzAuMDg1%0ANCwtMS43MzQzXSxbMC4xMTA2LC0wLjgyMjldLFsxLjA1MzEsLTAuMTk4Nl0sWzAu%0ANjgyMywtMi4wMDM5XSxbMS42NzA5LDAuNzY2M10sWy0xLjE1MDYsLTAuNjU0OV0s%0AWy0wLjg1MTksLTEuNjUzN10sWy0wLjI4MjgsLTIuNjE4Nl0sWy0wLjY5MzEsLTEu%0AMTA1OV0sWy0wLjAzNDEsMC4yMTFdLFswLjM5NTMsMC4yMjk1XSxbLTEuNDksMi42%0AMTg2XSxbLTIuMjI5MiwtMC42MDExXSxbMS42ODYzLC0yLjE0NTJdLFsyLjIyOTIs%0AMS42NjNdLFsyLjExNjMsMC4wMDgyXV0sInVzZWFycm93cyI6W2ZhbHNlXSwiZGlz%0AcGxheWxhYmVscyI6W2ZhbHNlXSwibGFiZWwiOlsiTlkgVGltZXMiLCJXYXNoaW5n%0AdG9uIFBvc3QiLCJXYWxsIFN0cmVldCBKb3VybmFsIiwiVVNBIFRvZGF5IiwiTEEg%0AVGltZXMiLCJOZXcgWW9yayBQb3N0IiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3cyIs%0AIkFCQyIsIkJCQyIsIllhaG9vIE5ld3MiLCJHb29nbGUgTmV3cyIsIlJldXRlcnMu%0AY29tIiwiTllUaW1lcy5jb20iLCJXYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wuY29t%0AIl0sImJnIjpbInJnYmEoMjU1LDI1NSwyNTUsMSkiXSwidmVydGV4LmJvcmRlciI6%0AWyJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSJdLCJ2ZXJ0ZXguY2V4%0AIjpbNCwzLDYuNSw0LjUsMi41LDMsMi41LDIuNSwyLDIuNSwxLjUsMywyLDIsMi41%0ALDEuNSwyLjVdLCJ2ZXJ0ZXguY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEo%0AMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzks%0AMTc5LDE3OSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEs%0AMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdi%0AYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIx%0ANSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIs%0AInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5s%0Ad2QiOls3LjMzMzMsNy4zMzMzLDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2%0ANjcsNyw3LjMzMzMsMC4zMzMzLDEuMzMzMywwLjY2NjcsMC4zMzMzLDAuMzMzMyw3%0ALjY2NjcsMC4zMzMzLDcuMzMzMywxLDAuNjY2NywwLjMzMzMsNywwLjY2NjcsNyww%0ALjMzMzMsNyw3LDAuMzMzMyw3LjMzMzMsNywxLjMzMzMsMC42NjY3LDcsNy42NjY3%0AXSwiZWRnZS5jb2wiOlsicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxiPk5hbWU6PFwvYj4gTlkgVGlt%0AZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4g%0AV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8%0AYj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRvZGF5IDxicj4gPGI+%0AVHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IExBIFRpbWVzIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IE5ldyBZ%0Ab3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6%0APFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4g%0ATVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBGT1gg%0ATmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEFCQyA8%0AYnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEJCQyA8YnI+IDxi%0APlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9vIE5ld3MgPGJyPiA8%0AYj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gR29vZ2xlIE5ld3Mg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gUmV1dGVy%0Acy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4g%0ATllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6%0APFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxp%0AbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9u%0AbGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMyIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiA0Il0sIm1hciI6WzAsMCwwLDBdLCJqaXR0ZXIiOltm%0AYWxzZV0sInhsaW0iOlstMy4yMDQ2LDMuMjA0Nl0sInlsaW0iOlstMi45NjE2LDIu%0AOTYxNl19fSx7InN0YXJ0IjpbMzVdLCJlbmQiOlszNl0sImRhdGEiOnsiYWN0aXZl%0AIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6%0AWzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjEx%0AIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwi%0AMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMi%0AOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjki%0AOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQi%0AOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl0sIjE4IjpbMTddLCIx%0AOSI6WzE4XSwiMjAiOlsxOV0sIjIxIjpbMjBdLCIyMiI6WzIxXSwiMjMiOlsyMl0s%0AIjI0IjpbMjNdLCIyNSI6WzI0XSwiMjYiOlsyNV0sIjI3IjpbMjZdLCIyOCI6WzI3%0AXSwiMjkiOlsyOF0sIjMwIjpbMjldLCIzMSI6WzMwXSwiMzIiOlszMV0sIjMzIjpb%0AMzJdLCIzNCI6WzMzXSwiMzUiOlszNF19fSwiY29vcmQiOltbMS4wNjkxLC0xLjMw%0ANl0sWzAuMTY5MywtMS44NDA2XSxbMC4wOTE2LC0wLjkwNThdLFsxLjAyOTcsLTAu%0AMjYxMV0sWzAuNzAyMywtMi4wODQ5XSxbMS42Mjk3LDAuNzE0N10sWy0xLjA5Mjks%0ALTAuNzI0M10sWy0xLjAwNTUsLTEuNTY5NF0sWy0wLjQwMjcsLTIuNTUxNF0sWy0w%0ALjYwMzMsLTEuNTQzNF0sWy0wLjA2NDYsMC4xMTI5XSxbMC4zNjAzLDAuMTUwN10s%0AWy0xLjQ5NjUsMi41NTE0XSxbLTIuMTkzNywtMC41ODQ0XSxbMS43MDQxLC0yLjE5%0AOTddLFsyLjE5MzcsMS42MDg3XSxbMi4wODkyLC0wLjAzNDZdXSwidXNlYXJyb3dz%0AIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxzIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBU%0AaW1lcyIsIldhc2hpbmd0b24gUG9zdCIsIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJV%0AU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5ldyBZb3JrIFBvc3QiLCJDTk4iLCJNU05C%0AQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJDIiwiWWFob28gTmV3cyIsIkdvb2dsZSBO%0AZXdzIiwiUmV1dGVycy5jb20iLCJOWVRpbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0%0ALmNvbSIsIkFPTC5jb20iXSwiYmciOlsicmdiYSgyNTUsMjU1LDI1NSwxKSJdLCJ2%0AZXJ0ZXguYm9yZGVyIjpbInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUx%0ALDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2Jh%0AKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEs%0AMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEo%0ANTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwx%0AKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIl0sInZlcnRleC5jZXgiOls0LDMsNi41LDQuNSwyLjUsMywyLjUsMi41LDIsMi41%0ALDEuNSwzLDIsMiwyLjUsMS41LDIuNV0sInZlcnRleC5jb2wiOlsicmdiYSgxNzks%0AMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzks%0AMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzks%0AMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJy%0AZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUs%0AOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDIxNSwwLDEp%0AIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEo%0AMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUs%0AMCwxKSJdLCJlZGdlLmx3ZCI6WzcuMzMzMyw3LjMzMzMsNyw2LjY2NjcsNy42NjY3%0ALDcsMC4zMzMzLDEuNjY2Nyw3LDcuMzMzMywwLjMzMzMsMS4zMzMzLDAuNjY2Nyww%0ALjMzMzMsMC4zMzMzLDcuNjY2NywwLjMzMzMsNy4zMzMzLDEsMC42NjY3LDAuMzMz%0AMyw3LDAuNjY2Nyw3LDAuMzMzMyw3LDcsMC4zMzMzLDcuMzMzMyw3LDEuMzMzMyww%0ALjY2NjcsNyw3LjY2NjcsN10sImVkZ2UuY29sIjpbInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSJdLCJ2%0AZXJ0ZXgudG9vbHRpcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4gPGI+%0AVHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b24g%0AUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9i%0APiBXYWxsIFN0cmVldCBKb3VybmFsIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFw%0AZXIiLCI8Yj5OYW1lOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwvYj4g%0ATmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5cGU6%0APFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0IDxi%0Acj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENOTiA8%0AYnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxicj4g%0APGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJyPiA8%0AYj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIFRWIiwiPGI+TmFtZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8XC9i%0APiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+VHlw%0AZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRlcnMuY29tIDxicj4g%0APGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMuY29t%0AIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdhc2hp%0Abmd0b25Qb3N0LmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFt%0AZTo8XC9iPiBBT0wuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwiZWRn%0AZS50b29sdGlwIjpbIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjAiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiA1IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gNCJdLCJtYXIiOlswLDAsMCwwXSwiaml0dGVyIjpbZmFsc2VdLCJ4bGlt%0AIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJz%0AdGFydCI6WzM2XSwiZW5kIjpbMzddLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6%0AeyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVd%0ALCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIi%0AOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIx%0ANyI6WzE2XX0sImVkZ2VzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlsz%0AXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpb%0AOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6%0AWzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdLCIxOCI6WzE3XSwiMTkiOlsxOF0sIjIw%0AIjpbMTldLCIyMSI6WzIwXSwiMjIiOlsyMV0sIjIzIjpbMjJdLCIyNCI6WzIzXSwi%0AMjUiOlsyNF0sIjI2IjpbMjVdLCIyNyI6WzI2XSwiMjgiOlsyN10sIjI5IjpbMjhd%0ALCIzMCI6WzI5XSwiMzEiOlszMF0sIjMyIjpbMzFdLCIzMyI6WzMyXSwiMzQiOlsz%0AM10sIjM1IjpbMzRdLCIzNiI6WzM1XX19LCJjb29yZCI6W1sxLjA2NjUsLTEuMzEy%0AOV0sWzAuMTYxNiwtMS44NDQyXSxbMC4wODk2LC0wLjkwODNdLFsxLjAzMDksLTAu%0AMjY4M10sWzAuNjk0LC0yLjA4ODZdLFsxLjYzNjMsMC43MDQ2XSxbLTEuMDk0OSwt%0AMC43MjAyXSxbLTEuMDEyMywtMS41Njc5XSxbLTAuNDExOSwtMi41NTAzXSxbLTAu%0ANjA5NiwtMS41NDA0XSxbLTAuMDYwNiwwLjExMjFdLFswLjM2NDUsMC4xNDY1XSxb%0ALTEuNDk3MywyLjU1MDNdLFstMi4xOTM0LC0wLjU3NTRdLFsxLjY5NDYsLTIuMjEy%0ANl0sWzIuMTkzNCwxLjYwMzldLFsyLjA5MjIsLTAuMDQ2OF1dLCJ1c2VhcnJvd3Mi%0AOltmYWxzZV0sImRpc3BsYXlsYWJlbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRp%0AbWVzIiwiV2FzaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVT%0AQSBUb2RheSIsIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJD%0AIiwiRk9YIE5ld3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5l%0Ad3MiLCJSZXV0ZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3Qu%0AY29tIiwiQU9MLmNvbSJdLCJiZyI6WyJyZ2JhKDI1NSwyNTUsMjU1LDEpIl0sInZl%0AcnRleC5ib3JkZXIiOlsicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEs%0AMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEo%0ANTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwx%0AKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0AXSwidmVydGV4LmNleCI6WzQsMyw2LjUsNC41LDIuNSwzLDIuNSwyLjUsMiwyLjUs%0AMS41LDMsMiwyLDIuNSwxLjUsMi41XSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwx%0ANzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwx%0ANzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwx%0AKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJn%0AYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5%0AOSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSki%0ALCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgy%0ANTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSww%0ALDEpIl0sImVkZ2UubHdkIjpbNy4zMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2Njcs%0ANywwLjMzMzMsMS42NjY3LDcsNy4zMzMzLDAuMzMzMywxLjMzMzMsMC42NjY3LDAu%0AMzMzMywwLjMzMzMsNy42NjY3LDAuMzMzMyw3LjMzMzMsMSwwLjY2NjcsMC4zMzMz%0ALDcsMC42NjY3LDcsMC4zMzMzLDcsNywwLjMzMzMsNy4zMzMzLDcsMS4zMzMzLDAu%0ANjY2Nyw3LDcuNjY2Nyw3LDAuNjY2N10sImVkZ2UuY29sIjpbInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSJdLCJ2ZXJ0ZXgudG9vbHRpcCI6WyI8Yj5O%0AYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIi%0ALCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b24gUG9zdCA8YnI+IDxiPlR5cGU6PFwv%0AYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYWxsIFN0cmVldCBKb3VybmFs%0AIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFVT%0AQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8%0AXC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+%0ATmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdz%0AcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENOTiA8YnI+IDxiPlR5cGU6PFwvYj4gVFYi%0ALCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxi%0APk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+%0ATmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8%0AXC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBZ%0AYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxc%0AL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5O%0AYW1lOjxcL2I+IFJldXRlcnMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUi%0ALCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBP%0AbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b25Qb3N0LmNvbSA8YnI+IDxi%0APlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBBT0wuY29tIDxicj4g%0APGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwiZWRnZS50b29sdGlwIjpbIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjAiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA1IiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0ANCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCJdLCJtYXIiOlswLDAs%0AMCwwXSwiaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5%0AbGltIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6WzM3XSwiZW5kIjpbMzhd%0ALCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6%0AWzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6%0AWzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6%0AWzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVkZ2VzIjp7IjEi%0AOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjci%0AOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzEx%0AXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3Ijpb%0AMTZdLCIxOCI6WzE3XSwiMTkiOlsxOF0sIjIwIjpbMTldLCIyMSI6WzIwXSwiMjIi%0AOlsyMV0sIjIzIjpbMjJdLCIyNCI6WzIzXSwiMjUiOlsyNF0sIjI2IjpbMjVdLCIy%0ANyI6WzI2XSwiMjgiOlsyN10sIjI5IjpbMjhdLCIzMCI6WzI5XSwiMzEiOlszMF0s%0AIjMyIjpbMzFdLCIzMyI6WzMyXSwiMzQiOlszM10sIjM1IjpbMzRdLCIzNiI6WzM1%0AXSwiMzciOlszNl19fSwiY29vcmQiOltbMS4xMTQ3LC0xLjMwMzFdLFswLjIwMTIs%0ALTEuODA3OF0sWzAuMTQ5LC0wLjg2NDVdLFsxLjA4OTQsLTAuMjg0M10sWzAuNzMw%0ANCwtMi4wNjY0XSxbMS41MTc4LDAuNzMyMl0sWy0xLjAzMzksLTAuNjY0NV0sWy0w%0ALjk2MjcsLTEuNTEzN10sWy0wLjM4MywtMi41MDY1XSxbLTAuNTYwOCwtMS40ODc5%0AXSxbMC4wMDc2LDAuMTExN10sWzAuNTgzOCwwLjI3MjVdLFstMS42MTc1LDIuNTA2%0ANV0sWy0yLjE0MDgsLTAuNTQxNl0sWzEuNzMxLC0yLjIwMzZdLFsyLjAwNzIsMS42%0ANzk5XSxbMi4xNDA4LDAuMDM2OV1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3Bs%0AYXlsYWJlbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3Rv%0AbiBQb3N0IiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRp%0AbWVzIiwiTmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJB%0AQkMiLCJCQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNv%0AbSIsIk5ZVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJd%0ALCJiZyI6WyJyZ2JhKDI1NSwyNTUsMjU1LDEpIl0sInZlcnRleC5ib3JkZXIiOlsi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJn%0AYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1%0AMSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdi%0AYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiXSwidmVydGV4LmNleCI6%0AWzQsMyw2LjUsNC41LDIuNSwzLDIuNSwyLjUsMiwyLjUsMS41LDMsMiwyLDIuNSwx%0ALjUsMi41XSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdi%0AYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3%0AOSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3%0AOSwxNzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEp%0AIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEo%0AMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUs%0AMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJy%0AZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdk%0AIjpbNy4zMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42NjY3%0ALDcsNy4zMzMzLDAuMzMzMywxLjMzMzMsMC42NjY3LDAuMzMzMywwLjMzMzMsNy42%0ANjY3LDAuMzMzMyw3LjMzMzMsMSwwLjY2NjcsMC4zMzMzLDcsMC42NjY3LDcsMC4z%0AMzMzLDcsNywwLjMzMzMsNy4zMzMzLDcsMS4zMzMzLDAuNjY2Nyw3LDcuNjY2Nyw3%0ALDAuNjY2NywwLjY2NjddLCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwidmVydGV4LnRv%0Ab2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwv%0AYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBvc3QgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FsbCBT%0AdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+%0ATmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBl%0AciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5l%0Ad3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+IDxiPlR5%0AcGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJyPiA8Yj5U%0AeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxiPlR5cGU6%0APFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+VHlwZTo8%0AXC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8XC9iPiBU%0AViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxi%0APk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5l%0AIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4g%0AT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxiPlR5cGU6%0APFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8YnI+IDxi%0APlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uUG9z%0AdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4g%0AQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2UudG9vbHRp%0AcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIw%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0ANCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQi%0AXSwibWFyIjpbMCwwLDAsMF0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIw%0ANDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQiOlsz%0AOF0sImVuZCI6WzM5XSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBd%0ALCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZd%0ALCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIx%0AMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19%0ALCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0%0AXSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6%0AWzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2%0AIjpbMTVdLCIxNyI6WzE2XSwiMTgiOlsxN10sIjE5IjpbMThdLCIyMCI6WzE5XSwi%0AMjEiOlsyMF0sIjIyIjpbMjFdLCIyMyI6WzIyXSwiMjQiOlsyM10sIjI1IjpbMjRd%0ALCIyNiI6WzI1XSwiMjciOlsyNl0sIjI4IjpbMjddLCIyOSI6WzI4XSwiMzAiOlsy%0AOV0sIjMxIjpbMzBdLCIzMiI6WzMxXSwiMzMiOlszMl0sIjM0IjpbMzNdLCIzNSI6%0AWzM0XSwiMzYiOlszNV0sIjM3IjpbMzZdLCIzOCI6WzM3XX19LCJjb29yZCI6W1sx%0ALjEwNTIsLTAuODEwNl0sWzAuMTk4NCwtMS4zMTIyXSxbMC4xMTg3LC0wLjM2MTFd%0ALFsxLjAzMDUsMC4yMzI0XSxbMC43MjkyLC0xLjU2MTFdLFsxLjUxOTYsMS4xOTdd%0ALFstMS4wODU4LC0wLjIxM10sWy0wLjk2OTksLTEuMDQ2OF0sWy0wLjM2MjcsLTIu%0AMDQ4OV0sWy0wLjU3MjQsLTEuMDI1Ml0sWy0wLjAzMzgsMC41MTM1XSxbMC40NzA2%0ALDAuODg3NF0sWy0wLjA2MiwxLjkyNzldLFstMi4xOTEsLTAuMDc5OF0sWzEuNzI3%0AMywtMS43NDkyXSxbMi4xOTEsMi4wNDg5XSxbMi4xMjA3LDAuNDYyNl1dLCJ1c2Vh%0AcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJlbHMiOltmYWxzZV0sImxhYmVsIjpb%0AIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJlZXQgSm91cm5h%0AbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9zdCIsIkNOTiIs%0AIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBOZXdzIiwiR29v%0AZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwiV2FzaGluZ3Rv%0AblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6WyJyZ2JhKDI1NSwyNTUsMjU1LDEp%0AIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiXSwidmVydGV4LmNleCI6WzQsMyw2LjUsNC41LDIuNSwzLDIuNSwyLjUs%0AMiwyLjUsMS41LDMsMiwyLDIuNSwxLjUsMi41XSwidmVydGV4LmNvbCI6WyJyZ2Jh%0AKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5%0ALDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5%0ALDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwx%0AKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2Jh%0AKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1%0ALDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwi%0AcmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1%0ALDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMzLDcuMzMzMyw3LDYuNjY2Nyw3%0ALjY2NjcsNywwLjMzMzMsMS42NjY3LDcsNy4zMzMzLDAuMzMzMywxLjMzMzMsMC42%0ANjY3LDAuMzMzMywwLjMzMzMsNy42NjY3LDAuMzMzMyw3LjMzMzMsMSwwLjY2Njcs%0AMC4zMzMzLDcsMC42NjY3LDcsMC4zMzMzLDcsNywwLjMzMzMsNy4zMzMzLDcsMS4z%0AMzMzLDAuNjY2Nyw3LDcuNjY2Nyw3LDAuNjY2NywwLjY2NjcsNy4zMzMzXSwiZWRn%0AZS5jb2wiOlsicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50%0Ab29sdGlwIjpbIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxi%0Acj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwg%0AU3RyZWV0IEpvdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxi%0APk5hbWU6PFwvYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFw%0AZXIiLCI8Yj5OYW1lOjxcL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBO%0AZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+%0AVHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6%0APFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4g%0AVFYiLCI8Yj5OYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8%0AYj5OYW1lOjxcL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGlu%0AZSIsIjxiPk5hbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8%0AYj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBv%0Ac3QuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+%0AIEFPTC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0%0AaXAiOlsiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Iiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0%0AIl0sIm1hciI6WzAsMCwwLDBdLCJqaXR0ZXIiOltmYWxzZV0sInhsaW0iOlstMy4y%0AMDQ2LDMuMjA0Nl0sInlsaW0iOlstMi45NjE2LDIuOTYxNl19fSx7InN0YXJ0Ijpb%0AMzldLCJlbmQiOls0MF0sImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlsw%0AXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2%0AXSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwi%0AMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZd%0AfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1Ijpb%0ANF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEi%0AOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIx%0ANiI6WzE1XSwiMTciOlsxNl0sIjE4IjpbMTddLCIxOSI6WzE4XSwiMjAiOlsxOV0s%0AIjIxIjpbMjBdLCIyMiI6WzIxXSwiMjMiOlsyMl0sIjI0IjpbMjNdLCIyNSI6WzI0%0AXSwiMjYiOlsyNV0sIjI3IjpbMjZdLCIyOCI6WzI3XSwiMjkiOlsyOF0sIjMwIjpb%0AMjldLCIzMSI6WzMwXSwiMzIiOlszMV0sIjMzIjpbMzJdLCIzNCI6WzMzXSwiMzUi%0AOlszNF0sIjM2IjpbMzVdLCIzNyI6WzM2XSwiMzgiOlszN10sIjM5IjpbMzhdfX0s%0AImNvb3JkIjpbWzAuNTg5MywtMC45MzkxXSxbLTAuMzg1OCwtMS40MzY1XSxbLTAu%0AMzk1LC0wLjQ4NDRdLFswLjU2NjYsMC4xNDhdLFswLjE1NTEsLTEuNjc1NF0sWzAu%0AODMxNiwxLjE3MDZdLFstMS41MjMsLTAuMTY1Nl0sWy0xLjU4NjYsLTAuOTc5Ml0s%0AWy0xLjAyMjEsLTIuMDY1Nl0sWy0xLjE2NjMsLTEuMDgwM10sWy0wLjE2MzUsMC4y%0AMzkxXSxbLTAuMzAxNywwLjgyMzRdLFstMC42NTU0LDEuOTA1XSxbLTEuNDg2Miww%0ALjg5NzddLFsxLjE2NDEsLTEuODgxNV0sWzEuNDYzNiwyLjA2NTZdLFsxLjU4NjYs%0AMC40ODY2XV0sInVzZWFycm93cyI6W2ZhbHNlXSwiZGlzcGxheWxhYmVscyI6W2Zh%0AbHNlXSwibGFiZWwiOlsiTlkgVGltZXMiLCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxs%0AIFN0cmVldCBKb3VybmFsIiwiVVNBIFRvZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9y%0AayBQb3N0IiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllh%0AaG9vIE5ld3MiLCJHb29nbGUgTmV3cyIsIlJldXRlcnMuY29tIiwiTllUaW1lcy5j%0Ab20iLCJXYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wuY29tIl0sImJnIjpbInJnYmEo%0AMjU1LDI1NSwyNTUsMSkiXSwidmVydGV4LmJvcmRlciI6WyJyZ2JhKDUxLDUxLDUx%0ALDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2Jh%0AKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEs%0AMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEo%0ANTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwx%0AKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSJdLCJ2ZXJ0ZXguY2V4IjpbNCwzLDYuNSw0LjUs%0AMi41LDMsMi41LDIuNSwyLDIuNSwxLjUsMywyLDIsMi41LDEuNSwyLjVdLCJ2ZXJ0%0AZXguY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5%0ALDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSki%0ALCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJn%0AYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5%0AOSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSki%0ALCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgy%0ANTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSww%0ALDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4z%0AMzMzLDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2NjcsNyw3LjMzMzMsMC4z%0AMzMzLDEuMzMzMywwLjY2NjcsMC4zMzMzLDAuMzMzMyw3LjY2NjcsMC4zMzMzLDcu%0AMzMzMywxLDAuNjY2NywwLjMzMzMsNywwLjY2NjcsNywwLjMzMzMsNyw3LDAuMzMz%0AMyw3LjMzMzMsNywxLjMzMzMsMC42NjY3LDcsNy42NjY3LDcsMC42NjY3LDAuNjY2%0ANyw3LjMzMzMsNy4zMzMzXSwiZWRnZS5jb2wiOlsicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlw%0AIjpbIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5l%0Ad3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+%0AVHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0%0AIEpvdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6%0APFwvYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8%0AYj5OYW1lOjxcL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFw%0AZXIiLCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8%0AXC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIFRWIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4g%0AVFYiLCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8%0AYj5OYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1l%0AOjxcL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxi%0APk5hbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGlu%0AZSIsIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29t%0AIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5j%0Ab20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sIm1h%0AciI6WzAsMCwwLDBdLCJqaXR0ZXIiOltmYWxzZV0sInhsaW0iOlstMy4yMDQ2LDMu%0AMjA0Nl0sInlsaW0iOlstMi45NjE2LDIuOTYxNl19fSx7InN0YXJ0IjpbNDBdLCJl%0AbmQiOls0MV0sImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6%0AWzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6%0AWzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsx%0AMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRn%0AZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYi%0AOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0s%0AIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1%0AXSwiMTciOlsxNl0sIjE4IjpbMTddLCIxOSI6WzE4XSwiMjAiOlsxOV0sIjIxIjpb%0AMjBdLCIyMiI6WzIxXSwiMjMiOlsyMl0sIjI0IjpbMjNdLCIyNSI6WzI0XSwiMjYi%0AOlsyNV0sIjI3IjpbMjZdLCIyOCI6WzI3XSwiMjkiOlsyOF0sIjMwIjpbMjldLCIz%0AMSI6WzMwXSwiMzIiOlszMV0sIjMzIjpbMzJdLCIzNCI6WzMzXSwiMzUiOlszNF0s%0AIjM2IjpbMzVdLCIzNyI6WzM2XSwiMzgiOlszN10sIjM5IjpbMzhdLCI0MCI6WzM5%0AXX19LCJjb29yZCI6W1swLjUyMDgsLTEuMDY3OV0sWy0wLjQzMjIsLTEuNTA0MV0s%0AWy0wLjMwNTcsLTAuNTI4N10sWzAuNDgxNywwLjE0OTFdLFswLjA4MzUsLTEuODEz%0ANl0sWzAuNzI0MiwxLjE1NjhdLFstMS4zOTM1LC0wLjE4NDFdLFstMS41NDMsLTAu%0AOTgwM10sWy0xLjEwODYsLTIuMDk1OV0sWy0xLjEyNzksLTEuMDgyN10sWzAuOTEx%0ANiwtMC40ODk3XSxbLTAuMzI1OCwwLjY5NTRdLFstMC43MTY2LDEuNzcyOV0sWy0x%0ALjQ2OTcsMC44MzA3XSxbMS4wNzY5LC0yLjA1NzddLFsxLjMwMDksMi4wOTU5XSxb%0AMS41NDMsMC41ODM3XV0sInVzZWFycm93cyI6W2ZhbHNlXSwiZGlzcGxheWxhYmVs%0AcyI6W2ZhbHNlXSwibGFiZWwiOlsiTlkgVGltZXMiLCJXYXNoaW5ndG9uIFBvc3Qi%0ALCJXYWxsIFN0cmVldCBKb3VybmFsIiwiVVNBIFRvZGF5IiwiTEEgVGltZXMiLCJO%0AZXcgWW9yayBQb3N0IiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3cyIsIkFCQyIsIkJC%0AQyIsIllhaG9vIE5ld3MiLCJHb29nbGUgTmV3cyIsIlJldXRlcnMuY29tIiwiTllU%0AaW1lcy5jb20iLCJXYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wuY29tIl0sImJnIjpb%0AInJnYmEoMjU1LDI1NSwyNTUsMSkiXSwidmVydGV4LmJvcmRlciI6WyJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSJdLCJ2ZXJ0ZXguY2V4IjpbNCwzLDYu%0ANSw0LjUsMi41LDMsMi41LDIuNSwyLDIuNSwxLjUsMywyLDIsMi41LDEuNSwyLjVd%0ALCJ2ZXJ0ZXguY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwx%0ANzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwx%0ANzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwx%0AKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2Jh%0AKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTks%0ANzEsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwi%0AcmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1%0ALDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMz%0AMzMsNy4zMzMzLDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2NjcsNyw3LjMz%0AMzMsMC4zMzMzLDEuMzMzMywwLjY2NjcsMC4zMzMzLDAuMzMzMyw3LjY2NjcsMC4z%0AMzMzLDcuMzMzMywxLDAuNjY2NywwLjMzMzMsNywwLjY2NjcsNywwLjMzMzMsNyw3%0ALDAuMzMzMyw3LjMzMzMsNywxLjMzMzMsMC42NjY3LDcsNy42NjY3LDcsMC42NjY3%0ALDAuNjY2Nyw3LjMzMzMsNy4zMzMzLDddLCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiXSwidmVydGV4LnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBO%0AWSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8%0AXC9iPiBXYXNoaW5ndG9uIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBl%0AciIsIjxiPk5hbWU6PFwvYj4gV2FsbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5%0AcGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGlt%0AZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4g%0ATmV3IFlvcmsgUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+%0ATmFtZTo8XC9iPiBDTk4gPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8%0AXC9iPiBNU05CQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+%0AIEZPWCBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4g%0AQUJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8%0AYnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUg%0ATmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBS%0AZXV0ZXJzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8%0AXC9iPiBOWVRpbWVzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+%0ATmFtZTo8XC9iPiBXYXNoaW5ndG9uUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwv%0AYj4gT25saW5lIl0sImVkZ2UudG9vbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwibWFyIjpbMCwwLDAsMF0sImppdHRl%0AciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2%0AMTYsMi45NjE2XX19LHsic3RhcnQiOls0MV0sImVuZCI6WzQyXSwiZGF0YSI6eyJh%0AY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNd%0ALCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5%0AXSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1Ijpb%0AMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsx%0AXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3%0AXSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJd%0ALCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XSwiMTgiOlsx%0AN10sIjE5IjpbMThdLCIyMCI6WzE5XSwiMjEiOlsyMF0sIjIyIjpbMjFdLCIyMyI6%0AWzIyXSwiMjQiOlsyM10sIjI1IjpbMjRdLCIyNiI6WzI1XSwiMjciOlsyNl0sIjI4%0AIjpbMjddLCIyOSI6WzI4XSwiMzAiOlsyOV0sIjMxIjpbMzBdLCIzMiI6WzMxXSwi%0AMzMiOlszMl0sIjM0IjpbMzNdLCIzNSI6WzM0XSwiMzYiOlszNV0sIjM3IjpbMzZd%0ALCIzOCI6WzM3XSwiMzkiOlszOF0sIjQwIjpbMzldLCI0MSI6WzQwXX19LCJjb29y%0AZCI6W1swLjMwNiwtMC44OTk2XSxbLTAuNjQxOSwtMS4zNTU4XSxbLTAuNTIwOSwt%0AMC4zODM5XSxbMC4yMzg4LDAuMzA0MV0sWy0wLjExODksLTEuNjUzNl0sWzAuODMz%0ANywxLjA3MDVdLFstMS42MTk4LC0wLjAxOTFdLFstMS43NTk4LC0wLjgxNzVdLFst%0AMS4zMTgxLC0xLjkzODFdLFstMS4zNDgxLC0wLjkyODJdLFswLjczMTEsLTAuMzEz%0AOF0sWy0wLjQ3MywwLjgwODVdLFstMC42MTYxLDEuOTM4MV0sWy0xLjYyNjksMS4w%0AMTE3XSxbMC44NzgzLC0xLjg3NzZdLFsxLjc1OTgsMS42Nzk5XSxbMC4yNzE0LDEu%0ANTI3Nl1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJlbHMiOltmYWxz%0AZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0IiwiV2FsbCBT%0AdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwiTmV3IFlvcmsg%0AUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJCQkMiLCJZYWhv%0AbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5ZVGltZXMuY29t%0AIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6WyJyZ2JhKDI1%0ANSwyNTUsMjU1LDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSg1MSw1MSw1MSwx%0AKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiXSwidmVydGV4LmNleCI6WzQsMyw2LjUsNC41LDIu%0ANSwzLDIuNSwyLjUsMiwyLjUsMS41LDMsMiwyLDIuNSwxLjUsMi41XSwidmVydGV4%0ALmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwx%0AKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwi%0AcmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2Jh%0AKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTks%0ANzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwi%0AcmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1%0ALDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwx%0AKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMzLDcuMzMz%0AMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42NjY3LDcsNy4zMzMzLDAuMzMz%0AMywxLjMzMzMsMC42NjY3LDAuMzMzMywwLjMzMzMsNy42NjY3LDAuMzMzMyw3LjMz%0AMzMsMSwwLjY2NjcsMC4zMzMzLDcsMC42NjY3LDcsMC4zMzMzLDcsNywwLjMzMzMs%0ANy4zMzMzLDcsMS4zMzMzLDAuNjY2Nyw3LDcuNjY2Nyw3LDAuNjY2NywwLjY2Njcs%0ANy4zMzMzLDcuMzMzMyw3LDAuMzMzM10sImVkZ2UuY29sIjpbInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSJdLCJ2ZXJ0ZXgudG9vbHRp%0AcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBO%0AZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b24gUG9zdCA8YnI+IDxi%0APlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYWxsIFN0cmVl%0AdCBKb3VybmFsIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1l%0AOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwi%0APGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3Bh%0AcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0IDxicj4gPGI+VHlwZTo8%0AXC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENOTiA8YnI+IDxiPlR5cGU6%0APFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxicj4gPGI+VHlwZTo8XC9i%0APiBUViIsIjxiPk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwi%0APGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFt%0AZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8%0AYj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxp%0AbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRlcnMuY29tIDxicj4gPGI+VHlwZTo8XC9i%0APiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMuY29tIDxicj4gPGI+VHlw%0AZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b25Qb3N0LmNv%0AbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBBT0wu%0AY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwiZWRnZS50b29sdGlwIjpb%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjAiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA1IiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Iiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCJdLCJt%0AYXIiOlswLDAsMCwwXSwiaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0Niwz%0ALjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6WzQyXSwi%0AZW5kIjpbNDNdLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIi%0AOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgi%0AOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpb%0AMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVk%0AZ2VzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2%0AIjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBd%0ALCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsx%0ANV0sIjE3IjpbMTZdLCIxOCI6WzE3XSwiMTkiOlsxOF0sIjIwIjpbMTldLCIyMSI6%0AWzIwXSwiMjIiOlsyMV0sIjIzIjpbMjJdLCIyNCI6WzIzXSwiMjUiOlsyNF0sIjI2%0AIjpbMjVdLCIyNyI6WzI2XSwiMjgiOlsyN10sIjI5IjpbMjhdLCIzMCI6WzI5XSwi%0AMzEiOlszMF0sIjMyIjpbMzFdLCIzMyI6WzMyXSwiMzQiOlszM10sIjM1IjpbMzRd%0ALCIzNiI6WzM1XSwiMzciOlszNl0sIjM4IjpbMzddLCIzOSI6WzM4XSwiNDAiOlsz%0AOV0sIjQxIjpbNDBdLCI0MiI6WzQxXX19LCJjb29yZCI6W1swLjMwNTIsLTAuNzk3%0AN10sWy0wLjY0MDksLTEuMzM3N10sWy0wLjY3OTEsLTAuMzg1Ml0sWzAuMTU5Myww%0ALjI2NV0sWy0wLjA4OTUsLTEuNTQ5NV0sWzAuODcxMSwwLjkwNThdLFstMS44NDU1%0ALC0wLjEwMjZdLFstMS44NjQ0LC0wLjkyMzhdLFstMS4yNTA1LC0xLjk5MjFdLFst%0AMS40MzgxLC0xLjAxNjVdLFstMC45MzY3LDAuNDcxM10sWy0wLjQwODIsMC44NDY2%0AXSxbLTAuNDU5MywxLjk5MjFdLFstMS42Mzg1LDAuOTk2NV0sWzAuOTIsLTEuNzE3%0ANl0sWzEuODY0NCwxLjM4NzRdLFswLjM5NjgsMS40OTkxXV0sInVzZWFycm93cyI6%0AW2ZhbHNlXSwiZGlzcGxheWxhYmVscyI6W2ZhbHNlXSwibGFiZWwiOlsiTlkgVGlt%0AZXMiLCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxsIFN0cmVldCBKb3VybmFsIiwiVVNB%0AIFRvZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9yayBQb3N0IiwiQ05OIiwiTVNOQkMi%0ALCJGT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllhaG9vIE5ld3MiLCJHb29nbGUgTmV3%0AcyIsIlJldXRlcnMuY29tIiwiTllUaW1lcy5jb20iLCJXYXNoaW5ndG9uUG9zdC5j%0Ab20iLCJBT0wuY29tIl0sImJnIjpbInJnYmEoMjU1LDI1NSwyNTUsMSkiXSwidmVy%0AdGV4LmJvcmRlciI6WyJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwx%0AKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSJd%0ALCJ2ZXJ0ZXguY2V4IjpbNCwzLDYuNSw0LjUsMi41LDMsMi41LDIuNSwyLDIuNSwx%0ALjUsMywyLDIsMi41LDEuNSwyLjVdLCJ2ZXJ0ZXguY29sIjpbInJnYmEoMTc5LDE3%0AOSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3%0AOSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEp%0AIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdi%0AYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5%0ALDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIs%0AInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1%0ANSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAs%0AMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMzLDcsNi42NjY3LDcuNjY2Nyw3%0ALDAuMzMzMywxLjY2NjcsNyw3LjMzMzMsMC4zMzMzLDEuMzMzMywwLjY2NjcsMC4z%0AMzMzLDAuMzMzMyw3LjY2NjcsMC4zMzMzLDcuMzMzMywxLDAuNjY2NywwLjMzMzMs%0ANywwLjY2NjcsNywwLjMzMzMsNyw3LDAuMzMzMyw3LjMzMzMsNywxLjMzMzMsMC42%0ANjY3LDcsNy42NjY3LDcsMC42NjY3LDAuNjY2Nyw3LjMzMzMsNy4zMzMzLDcsMC4z%0AMzMzLDAuMzMzM10sImVkZ2UuY29sIjpbInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSJdLCJ2ZXJ0%0AZXgudG9vbHRpcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4gPGI+VHlw%0AZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b24gUG9z%0AdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBX%0AYWxsIFN0cmVldCBKb3VybmFsIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIi%0ALCI8Yj5OYW1lOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3%0Ac3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwv%0AYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0IDxicj4g%0APGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENOTiA8YnI+%0AIDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxicj4gPGI+%0AVHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRW%0AIiwiPGI+TmFtZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBP%0AbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+VHlwZTo8%0AXC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRlcnMuY29tIDxicj4gPGI+%0AVHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMuY29tIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0%0Ab25Qb3N0LmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8%0AXC9iPiBBT0wuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwiZWRnZS50%0Ab29sdGlwIjpbIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjAiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiA1IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0ANCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gNCJdLCJtYXIiOlswLDAsMCwwXSwiaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpb%0ALTMuMjA0NiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJzdGFy%0AdCI6WzQzXSwiZW5kIjpbNDRdLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIx%0AIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3%0AIjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsx%0AMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6%0AWzE2XX0sImVkZ2VzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwi%0ANSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0s%0AIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0%0AXSwiMTYiOlsxNV0sIjE3IjpbMTZdLCIxOCI6WzE3XSwiMTkiOlsxOF0sIjIwIjpb%0AMTldLCIyMSI6WzIwXSwiMjIiOlsyMV0sIjIzIjpbMjJdLCIyNCI6WzIzXSwiMjUi%0AOlsyNF0sIjI2IjpbMjVdLCIyNyI6WzI2XSwiMjgiOlsyN10sIjI5IjpbMjhdLCIz%0AMCI6WzI5XSwiMzEiOlszMF0sIjMyIjpbMzFdLCIzMyI6WzMyXSwiMzQiOlszM10s%0AIjM1IjpbMzRdLCIzNiI6WzM1XSwiMzciOlszNl0sIjM4IjpbMzddLCIzOSI6WzM4%0AXSwiNDAiOlszOV0sIjQxIjpbNDBdLCI0MiI6WzQxXSwiNDMiOls0Ml19fSwiY29v%0AcmQiOltbMC4zOTY0LC0wLjY3NzRdLFstMC41NDQ4LC0xLjI2MTddLFstMC41OTgz%0ALC0wLjMxMTNdLFswLjIzNzIsMC4zODM0XSxbMC4wMTgxLC0xLjQ0NzJdLFswLjg2%0AMzIsMS4xNDE2XSxbLTEuNzQwNCwwLjAxOTVdLFstMS43ODg2LC0wLjgzNDNdLFst%0AMS4xNDk1LC0xLjkwNTZdLFstMS4zNTk2LC0wLjk0MjJdLFstMC44NjA0LDAuNTI1%0AN10sWy0wLjM0OTYsMC45MDg4XSxbLTAuODAzNSwxLjkwNTZdLFstMS40ODM2LDEu%0AMTU3NV0sWzEuMDM5MywtMS41NjZdLFsxLjc4ODYsMS43MDk3XSxbMC4yMzAyLDEu%0ANjU5OF1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJlbHMiOltmYWxz%0AZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0IiwiV2FsbCBT%0AdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwiTmV3IFlvcmsg%0AUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJCQkMiLCJZYWhv%0AbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5ZVGltZXMuY29t%0AIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6WyJyZ2JhKDI1%0ANSwyNTUsMjU1LDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSg1MSw1MSw1MSwx%0AKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiXSwidmVydGV4LmNleCI6WzQsMyw2LjUsNC41LDIu%0ANSwzLDIuNSwyLjUsMiwyLjUsMS41LDMsMiwyLDIuNSwxLjUsMi41XSwidmVydGV4%0ALmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwx%0AKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwi%0AcmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2Jh%0AKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTks%0ANzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwi%0AcmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1%0ALDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwx%0AKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMzLDcuMzMz%0AMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42NjY3LDcsNy4zMzMzLDAuMzMz%0AMywxLjMzMzMsMC42NjY3LDAuMzMzMywwLjMzMzMsNy42NjY3LDAuMzMzMyw3LjMz%0AMzMsMSwwLjY2NjcsMC4zMzMzLDcsMC42NjY3LDcsMC4zMzMzLDcsNywwLjMzMzMs%0ANy4zMzMzLDcsMS4zMzMzLDAuNjY2Nyw3LDcuNjY2Nyw3LDAuNjY2NywwLjY2Njcs%0ANy4zMzMzLDcuMzMzMyw3LDAuMzMzMywwLjMzMzMsN10sImVkZ2UuY29sIjpbInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSJdLCJ2ZXJ0ZXgudG9v%0AbHRpcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9i%0APiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b24gUG9zdCA8YnI+%0AIDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYWxsIFN0%0AcmVldCBKb3VybmFsIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5O%0AYW1lOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVy%0AIiwiPGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3%0Ac3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0IDxicj4gPGI+VHlw%0AZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENOTiA8YnI+IDxiPlR5%0AcGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxicj4gPGI+VHlwZTo8%0AXC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRW%0AIiwiPGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+%0ATmFtZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUi%0ALCI8Yj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBP%0AbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRlcnMuY29tIDxicj4gPGI+VHlwZTo8%0AXC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMuY29tIDxicj4gPGI+%0AVHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b25Qb3N0%0ALmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBB%0AT0wuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwiZWRnZS50b29sdGlw%0AIjpbIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjAi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA1Iiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCJd%0ALCJtYXIiOlswLDAsMCwwXSwiaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0%0ANiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6WzQ0%0AXSwiZW5kIjpbNDVdLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0s%0AIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0s%0AIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEz%0AIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0s%0AImVkZ2VzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRd%0ALCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpb%0AMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYi%0AOlsxNV0sIjE3IjpbMTZdLCIxOCI6WzE3XSwiMTkiOlsxOF0sIjIwIjpbMTldLCIy%0AMSI6WzIwXSwiMjIiOlsyMV0sIjIzIjpbMjJdLCIyNCI6WzIzXSwiMjUiOlsyNF0s%0AIjI2IjpbMjVdLCIyNyI6WzI2XSwiMjgiOlsyN10sIjI5IjpbMjhdLCIzMCI6WzI5%0AXSwiMzEiOlszMF0sIjMyIjpbMzFdLCIzMyI6WzMyXSwiMzQiOlszM10sIjM1Ijpb%0AMzRdLCIzNiI6WzM1XSwiMzciOlszNl0sIjM4IjpbMzddLCIzOSI6WzM4XSwiNDAi%0AOlszOV0sIjQxIjpbNDBdLCI0MiI6WzQxXSwiNDMiOls0Ml0sIjQ0IjpbNDNdfX0s%0AImNvb3JkIjpbWzAuNDA4MywtMC42NjM0XSxbLTAuNTI2MSwtMS4yNThdLFstMC41%0AODk1LC0wLjMwODVdLFswLjIzNzksMC4zOTM5XSxbMC4wMzg4LC0xLjQzNThdLFsw%0ALjg1NjQsMS4xNTk4XSxbLTEuNzM1MywwLjAxMTFdLFstMS43NzUyLC0wLjg0MjZd%0ALFstMS4xMjM4LC0xLjkwNzZdLFstMS4zNDQyLC0wLjk0NzVdLFstMC44NjAzLDAu%0ANTI2OV0sWy0wLjM1MjgsMC45MTU0XSxbLTAuODE2MiwxLjkwNzZdLFstMS40OTAx%0ALDEuMTUxOV0sWzEuMDYxMywtMS41NDMzXSxbMS43NzUyLDEuNzQwOV0sWzAuMjE4%0AMiwxLjY3MThdXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxzIjpb%0AZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9zdCIsIldh%0AbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5ldyBZ%0Ab3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJDIiwi%0AWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJOWVRpbWVz%0ALmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmciOlsicmdi%0AYSgyNTUsMjU1LDI1NSwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJn%0AYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1%0AMSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdi%0AYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUx%0ALDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2Jh%0AKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEs%0AMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIl0sInZlcnRleC5jZXgiOls0LDMsNi41LDQu%0ANSwyLjUsMywyLjUsMi41LDIsMi41LDEuNSwzLDIsMiwyLjUsMS41LDIuNV0sInZl%0AcnRleC5jb2wiOlsicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwx%0ANzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwx%0AKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwi%0AcmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1%0ALDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwx%0AKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2Jh%0AKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1%0ALDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdlLmx3ZCI6WzcuMzMzMyw3%0ALjMzMzMsNyw2LjY2NjcsNy42NjY3LDcsMC4zMzMzLDEuNjY2Nyw3LDcuMzMzMyww%0ALjMzMzMsMS4zMzMzLDAuNjY2NywwLjMzMzMsMC4zMzMzLDcuNjY2NywwLjMzMzMs%0ANy4zMzMzLDEsMC42NjY3LDAuMzMzMyw3LDAuNjY2Nyw3LDAuMzMzMyw3LDcsMC4z%0AMzMzLDcuMzMzMyw3LDEuMzMzMywwLjY2NjcsNyw3LjY2NjcsNywwLjY2NjcsMC42%0ANjY3LDcuMzMzMyw3LjMzMzMsNywwLjMzMzMsMC4zMzMzLDcsNy4zMzMzXSwiZWRn%0AZS5jb2wiOlsicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxiPk5hbWU6%0APFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxi%0APk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBO%0AZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRv%0AZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+%0AIExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1l%0AOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBl%0AciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxi%0APk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFt%0AZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1l%0AOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+%0AIEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9v%0AIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4g%0AR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6%0APFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxi%0APk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGlu%0AZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4gPGI+VHlw%0AZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Iiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sIm1hciI6WzAsMCwwLDBd%0ALCJqaXR0ZXIiOltmYWxzZV0sInhsaW0iOlstMy4yMDQ2LDMuMjA0Nl0sInlsaW0i%0AOlstMi45NjE2LDIuOTYxNl19fSx7InN0YXJ0IjpbNDVdLCJlbmQiOls0Nl0sImRh%0AdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0s%0AIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0s%0AIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNd%0ALCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRnZXMiOnsiMSI6WzBd%0ALCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZd%0ALCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIx%0AMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl0s%0AIjE4IjpbMTddLCIxOSI6WzE4XSwiMjAiOlsxOV0sIjIxIjpbMjBdLCIyMiI6WzIx%0AXSwiMjMiOlsyMl0sIjI0IjpbMjNdLCIyNSI6WzI0XSwiMjYiOlsyNV0sIjI3Ijpb%0AMjZdLCIyOCI6WzI3XSwiMjkiOlsyOF0sIjMwIjpbMjldLCIzMSI6WzMwXSwiMzIi%0AOlszMV0sIjMzIjpbMzJdLCIzNCI6WzMzXSwiMzUiOlszNF0sIjM2IjpbMzVdLCIz%0ANyI6WzM2XSwiMzgiOlszN10sIjM5IjpbMzhdLCI0MCI6WzM5XSwiNDEiOls0MF0s%0AIjQyIjpbNDFdLCI0MyI6WzQyXSwiNDQiOls0M10sIjQ1IjpbNDRdfX0sImNvb3Jk%0AIjpbWzAuMjg1NywtMC42MDQ3XSxbLTAuNDk3NCwtMS4yOTkzXSxbLTAuNjMyNiwt%0AMC4yOTkzXSxbMC4yODQ2LDAuMzczM10sWzAuMTM3MSwtMS4zNDgyXSxbMC44NzMs%0AMS4xODAzXSxbLTEuNzU5NywwLjAwOTNdLFstMS43Njk4LC0wLjg0OTRdLFstMS4w%0ANDY0LC0xLjg5OTddLFstMS4zNDQ3LC0wLjk3ODJdLFstMC44MTU0LDAuNTIyOF0s%0AWy0wLjMzNCwwLjkxMTFdLFstMC44MDUsMS44OTk3XSxbLTEuNDcwNCwxLjEzOTZd%0ALFsxLjA0NjgsLTAuNTYwNl0sWzEuNzY5OCwxLjgwMDhdLFswLjIzNDEsMS42NDg5%0AXV0sInVzZWFycm93cyI6W2ZhbHNlXSwiZGlzcGxheWxhYmVscyI6W2ZhbHNlXSwi%0AbGFiZWwiOlsiTlkgVGltZXMiLCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxsIFN0cmVl%0AdCBKb3VybmFsIiwiVVNBIFRvZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9yayBQb3N0%0AIiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllhaG9vIE5l%0Ad3MiLCJHb29nbGUgTmV3cyIsIlJldXRlcnMuY29tIiwiTllUaW1lcy5jb20iLCJX%0AYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wuY29tIl0sImJnIjpbInJnYmEoMjU1LDI1%0ANSwyNTUsMSkiXSwidmVydGV4LmJvcmRlciI6WyJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJn%0AYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1%0AMSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdi%0AYSg1MSw1MSw1MSwxKSJdLCJ2ZXJ0ZXguY2V4IjpbNCwzLDYuNSw0LjUsMi41LDMs%0AMi41LDIuNSwyLDIuNSwxLjUsMywyLDIsMi41LDEuNSwyLjVdLCJ2ZXJ0ZXguY29s%0AIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwi%0AcmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2Jh%0AKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMjU1%0ALDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwx%0AKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2Jh%0AKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1%0ALDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwi%0AcmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMzLDcs%0ANi42NjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2NjcsNyw3LjMzMzMsMC4zMzMzLDEu%0AMzMzMywwLjY2NjcsMC4zMzMzLDAuMzMzMyw3LjY2NjcsMC4zMzMzLDcuMzMzMywx%0ALDAuNjY2NywwLjMzMzMsNywwLjY2NjcsNywwLjMzMzMsNyw3LDAuMzMzMyw3LjMz%0AMzMsNywxLjMzMzMsMC42NjY3LDcsNy42NjY3LDcsMC42NjY3LDAuNjY2Nyw3LjMz%0AMzMsNy4zMzMzLDcsMC4zMzMzLDAuMzMzMyw3LDcuMzMzMywwLjMzMzNdLCJlZGdl%0ALmNvbCI6WyJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwidmVydGV4%0ALnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5cGU6%0APFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBvc3Qg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2Fs%0AbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwi%0APGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3Nw%0AYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+IDxi%0APlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJyPiA8%0AYj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+VHlw%0AZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8XC9i%0APiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIs%0AIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25s%0AaW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6PFwv%0AYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxiPlR5%0AcGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8YnI+%0AIDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9u%0AUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwv%0AYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2UudG9v%0AbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0ANSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDQiXSwibWFyIjpbMCwwLDAsMF0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0z%0ALjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQi%0AOls0Nl0sImVuZCI6WzQ3XSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6%0AWzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6%0AWzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFd%0ALCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsx%0ANl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUi%0AOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIx%0AMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0s%0AIjE2IjpbMTVdLCIxNyI6WzE2XSwiMTgiOlsxN10sIjE5IjpbMThdLCIyMCI6WzE5%0AXSwiMjEiOlsyMF0sIjIyIjpbMjFdLCIyMyI6WzIyXSwiMjQiOlsyM10sIjI1Ijpb%0AMjRdLCIyNiI6WzI1XSwiMjciOlsyNl0sIjI4IjpbMjddLCIyOSI6WzI4XSwiMzAi%0AOlsyOV0sIjMxIjpbMzBdLCIzMiI6WzMxXSwiMzMiOlszMl0sIjM0IjpbMzNdLCIz%0ANSI6WzM0XSwiMzYiOlszNV0sIjM3IjpbMzZdLCIzOCI6WzM3XSwiMzkiOlszOF0s%0AIjQwIjpbMzldLCI0MSI6WzQwXSwiNDIiOls0MV0sIjQzIjpbNDJdLCI0NCI6WzQz%0AXSwiNDUiOls0NF0sIjQ2IjpbNDVdfX0sImNvb3JkIjpbWzAuMTg1MywtMC42NTU3%0AXSxbLTAuNTgwNiwtMS4zNDI3XSxbLTAuNzUwMywtMC4zMjZdLFswLjEyNzcsMC4z%0AMTkzXSxbMC4wODc1LC0xLjI5NzldLFswLjg2MDEsMC43NzEyXSxbLTEuODUxNyww%0ALjAxNjFdLFstMS44NzIzLC0wLjg1NDRdLFstMS4wOTk4LC0xLjg4NzRdLFstMS40%0ANTU3LC0xLjAwNjVdLFstMC45NTQyLDAuNTIyNV0sWy0wLjM5OTcsMC44NzIyXSxb%0ALTAuNzI3OSwxLjg4NzRdLFstMS41MDUyLDEuMTcxOV0sWzAuOTU3MiwtMC4zOTE0%0AXSxbMS44NzIzLDEuMTk1M10sWzAuMzI3MiwxLjU1NDJdXSwidXNlYXJyb3dzIjpb%0AZmFsc2VdLCJkaXNwbGF5bGFiZWxzIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1l%0AcyIsIldhc2hpbmd0b24gUG9zdCIsIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0Eg%0AVG9kYXkiLCJMQSBUaW1lcyIsIk5ldyBZb3JrIFBvc3QiLCJDTk4iLCJNU05CQyIs%0AIkZPWCBOZXdzIiwiQUJDIiwiQkJDIiwiWWFob28gTmV3cyIsIkdvb2dsZSBOZXdz%0AIiwiUmV1dGVycy5jb20iLCJOWVRpbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0LmNv%0AbSIsIkFPTC5jb20iXSwiYmciOlsicmdiYSgyNTUsMjU1LDI1NSwxKSJdLCJ2ZXJ0%0AZXguYm9yZGVyIjpbInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIl0s%0AInZlcnRleC5jZXgiOls0LDMsNi41LDQuNSwyLjUsMywyLjUsMi41LDIsMi41LDEu%0ANSwzLDIsMiwyLjUsMS41LDIuNV0sInZlcnRleC5jb2wiOlsicmdiYSgxNzksMTc5%0ALDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5%0ALDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSki%0ALCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2Jh%0AKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTks%0ANzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwi%0AcmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1%0ALDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwx%0AKSJdLCJlZGdlLmx3ZCI6WzcuMzMzMyw3LjMzMzMsNyw2LjY2NjcsNy42NjY3LDcs%0AMC4zMzMzLDEuNjY2Nyw3LDcuMzMzMywwLjMzMzMsMS4zMzMzLDAuNjY2NywwLjMz%0AMzMsMC4zMzMzLDcuNjY2NywwLjMzMzMsNy4zMzMzLDEsMC42NjY3LDAuMzMzMyw3%0ALDAuNjY2Nyw3LDAuMzMzMyw3LDcsMC4zMzMzLDcuMzMzMyw3LDEuMzMzMywwLjY2%0ANjcsNyw3LjY2NjcsNywwLjY2NjcsMC42NjY3LDcuMzMzMyw3LjMzMzMsNywwLjMz%0AMzMsMC4zMzMzLDcsNy4zMzMzLDAuMzMzMywxLjMzMzNdLCJlZGdlLmNvbCI6WyJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiXSwidmVydGV4LnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8%0AYnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNo%0AaW5ndG9uIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5h%0AbWU6PFwvYj4gV2FsbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4g%0ATmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8%0AYj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsg%0AUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9i%0APiBDTk4gPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05C%0AQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdz%0AIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4g%0APGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlw%0AZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNv%0AbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRp%0AbWVzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9i%0APiBXYXNoaW5ndG9uUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIs%0AIjxiPk5hbWU6PFwvYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5l%0AIl0sImVkZ2UudG9vbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gNSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDQiXSwibWFyIjpbMCwwLDAsMF0sImppdHRlciI6W2ZhbHNl%0AXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2%0AXX19LHsic3RhcnQiOls0N10sImVuZCI6WzQ4XSwiZGF0YSI6eyJhY3RpdmUiOnsi%0Abm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0s%0AIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsx%0AMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6%0AWzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJd%0ALCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6Wzhd%0ALCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEz%0AXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XSwiMTgiOlsxN10sIjE5Ijpb%0AMThdLCIyMCI6WzE5XSwiMjEiOlsyMF0sIjIyIjpbMjFdLCIyMyI6WzIyXSwiMjQi%0AOlsyM10sIjI1IjpbMjRdLCIyNiI6WzI1XSwiMjciOlsyNl0sIjI4IjpbMjddLCIy%0AOSI6WzI4XSwiMzAiOlsyOV0sIjMxIjpbMzBdLCIzMiI6WzMxXSwiMzMiOlszMl0s%0AIjM0IjpbMzNdLCIzNSI6WzM0XSwiMzYiOlszNV0sIjM3IjpbMzZdLCIzOCI6WzM3%0AXSwiMzkiOlszOF0sIjQwIjpbMzldLCI0MSI6WzQwXSwiNDIiOls0MV0sIjQzIjpb%0ANDJdLCI0NCI6WzQzXSwiNDUiOls0NF0sIjQ2IjpbNDVdLCI0NyI6WzQ2XX19LCJj%0Ab29yZCI6W1swLjE4NDksLTAuNjU0NF0sWy0wLjU3OTcsLTEuMzQxNl0sWy0wLjc1%0AMDUsLTAuMzI2OF0sWzAuMTI2MSwwLjMyMDhdLFswLjA4ODYsLTEuMjk2XSxbMC44%0ANTg1LDAuNzczOF0sWy0xLjg1MTIsMC4wMTUzXSxbLTEuODcyMiwtMC44NTY2XSxb%0ALTEuMDk3OCwtMS44ODc1XSxbLTEuNDU1LC0xLjAwNjddLFstMC45NTYxLDAuNTIy%0AM10sWy0wLjM5OTcsMC44NzMyXSxbLTAuNzI5MywxLjg4NzVdLFstMS41MDUyLDEu%0AMTcxMl0sWzAuOTU1NywtMC4zODc5XSxbMS44NzIyLDEuMTk2MV0sWzAuMzI1Mywx%0ALjU1Nl1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJlbHMiOltmYWxz%0AZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0IiwiV2FsbCBT%0AdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwiTmV3IFlvcmsg%0AUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJCQkMiLCJZYWhv%0AbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5ZVGltZXMuY29t%0AIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6WyJyZ2JhKDI1%0ANSwyNTUsMjU1LDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSg1MSw1MSw1MSwx%0AKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiXSwidmVydGV4LmNleCI6WzQsMyw2LjUsNC41LDIu%0ANSwzLDIuNSwyLjUsMiwyLjUsMS41LDMsMiwyLDIuNSwxLjUsMi41XSwidmVydGV4%0ALmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwx%0AKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwi%0AcmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2Jh%0AKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTks%0ANzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwi%0AcmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1%0ALDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwx%0AKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMzLDcuMzMz%0AMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42NjY3LDcsNy4zMzMzLDAuMzMz%0AMywxLjMzMzMsMC42NjY3LDAuMzMzMywwLjMzMzMsNy42NjY3LDAuMzMzMyw3LjMz%0AMzMsMSwwLjY2NjcsMC4zMzMzLDcsMC42NjY3LDcsMC4zMzMzLDcsNywwLjMzMzMs%0ANy4zMzMzLDcsMS4zMzMzLDAuNjY2Nyw3LDcuNjY2Nyw3LDAuNjY2NywwLjY2Njcs%0ANy4zMzMzLDcuMzMzMyw3LDAuMzMzMywwLjMzMzMsNyw3LjMzMzMsMC4zMzMzLDEu%0AMzMzMyw3LjY2NjddLCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiXSwidmVydGV4LnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8%0AYnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNo%0AaW5ndG9uIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5h%0AbWU6PFwvYj4gV2FsbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4g%0ATmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8%0AYj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsg%0AUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9i%0APiBDTk4gPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05C%0AQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdz%0AIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4g%0APGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlw%0AZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNv%0AbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRp%0AbWVzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9i%0APiBXYXNoaW5ndG9uUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIs%0AIjxiPk5hbWU6PFwvYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5l%0AIl0sImVkZ2UudG9vbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gNSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDQiXSwibWFyIjpbMCwwLDAsMF0sImppdHRlciI6W2ZhbHNl%0AXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2%0AXX19LHsic3RhcnQiOls0OF0sImVuZCI6WzQ5XSwiZGF0YSI6eyJhY3RpdmUiOnsi%0Abm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0s%0AIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsx%0AMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6%0AWzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJd%0ALCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6Wzhd%0ALCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEz%0AXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XSwiMTgiOlsxN10sIjE5Ijpb%0AMThdLCIyMCI6WzE5XSwiMjEiOlsyMF0sIjIyIjpbMjFdLCIyMyI6WzIyXSwiMjQi%0AOlsyM10sIjI1IjpbMjRdLCIyNiI6WzI1XSwiMjciOlsyNl0sIjI4IjpbMjddLCIy%0AOSI6WzI4XSwiMzAiOlsyOV0sIjMxIjpbMzBdLCIzMiI6WzMxXSwiMzMiOlszMl0s%0AIjM0IjpbMzNdLCIzNSI6WzM0XSwiMzYiOlszNV0sIjM3IjpbMzZdLCIzOCI6WzM3%0AXSwiMzkiOlszOF0sIjQwIjpbMzldLCI0MSI6WzQwXSwiNDIiOls0MV0sIjQzIjpb%0ANDJdLCI0NCI6WzQzXSwiNDUiOls0NF0sIjQ2IjpbNDVdLCI0NyI6WzQ2XSwiNDgi%0AOls0N119fSwiY29vcmQiOltbMC40Mjg1LC0wLjY0MV0sWy0wLjMzNDIsLTEuMzM5%0AM10sWy0wLjUyNTYsLTAuMzI3XSxbMC4zMzU2LDAuMzI3Ml0sWzAuMzMxNywtMS4y%0ANzQ0XSxbMS4wNTk3LDAuNzgxOV0sWy0xLjYzMDUsMC4wMDgzXSxbLTEuNjQxNywt%0AMC44NjQ4XSxbLTAuODUwNywtMS44ODMyXSxbLTEuMjIwNCwtMS4wMTE4XSxbLTAu%0ANzYwOCwwLjUxOThdLFstMC4yMTE1LDAuODczM10sWy0wLjQ0NjIsMS44ODMyXSxb%0ALTEuMjk1NCwxLjE4MzJdLFsxLjE5NDcsLTAuMzQ5Nl0sWzEuNjQxNywxLjY3MDhd%0ALFswLjYyNTcsMS41NDldXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFi%0AZWxzIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9z%0AdCIsIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIs%0AIk5ldyBZb3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwi%0AQkJDIiwiWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJO%0AWVRpbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmci%0AOlsicmdiYSgyNTUsMjU1LDI1NSwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEo%0ANTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwx%0AKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1%0AMSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEp%0AIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUx%0ALDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSki%0ALCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIl0sInZlcnRleC5jZXgiOls0LDMs%0ANi41LDQuNSwyLjUsMywyLjUsMi41LDIsMi41LDEuNSwzLDIsMiwyLjUsMS41LDIu%0ANV0sInZlcnRleC5jb2wiOlsicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5%0ALDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5%0ALDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5%0ALDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJn%0AYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5%0AOSw3MSwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSki%0ALCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgy%0ANTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdlLmx3ZCI6Wzcu%0AMzMzMyw3LjMzMzMsNyw2LjY2NjcsNy42NjY3LDcsMC4zMzMzLDEuNjY2Nyw3LDcu%0AMzMzMywwLjMzMzMsMS4zMzMzLDAuNjY2NywwLjMzMzMsMC4zMzMzLDcuNjY2Nyww%0ALjMzMzMsNy4zMzMzLDEsMC42NjY3LDAuMzMzMyw3LDAuNjY2Nyw3LDAuMzMzMyw3%0ALDcsMC4zMzMzLDcuMzMzMyw3LDEuMzMzMywwLjY2NjcsNyw3LjY2NjcsNywwLjY2%0ANjcsMC42NjY3LDcuMzMzMyw3LjMzMzMsNywwLjMzMzMsMC4zMzMzLDcsNy4zMzMz%0ALDAuMzMzMywxLjMzMzMsNy42NjY3LDddLCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwidmVydGV4LnRv%0Ab2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwv%0AYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBvc3QgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FsbCBT%0AdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+%0ATmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBl%0AciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5l%0Ad3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+IDxiPlR5%0AcGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJyPiA8Yj5U%0AeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxiPlR5cGU6%0APFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+VHlwZTo8%0AXC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8XC9iPiBU%0AViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxi%0APk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5l%0AIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4g%0AT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxiPlR5cGU6%0APFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8YnI+IDxi%0APlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uUG9z%0AdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4g%0AQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2UudG9vbHRp%0AcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIw%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0ANCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQi%0AXSwibWFyIjpbMCwwLDAsMF0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIw%0ANDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQiOls0%0AOV0sImVuZCI6WzUwXSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBd%0ALCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZd%0ALCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIx%0AMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19%0ALCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0%0AXSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6%0AWzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2%0AIjpbMTVdLCIxNyI6WzE2XSwiMTgiOlsxN10sIjE5IjpbMThdLCIyMCI6WzE5XSwi%0AMjEiOlsyMF0sIjIyIjpbMjFdLCIyMyI6WzIyXSwiMjQiOlsyM10sIjI1IjpbMjRd%0ALCIyNiI6WzI1XSwiMjciOlsyNl0sIjI4IjpbMjddLCIyOSI6WzI4XSwiMzAiOlsy%0AOV0sIjMxIjpbMzBdLCIzMiI6WzMxXSwiMzMiOlszMl0sIjM0IjpbMzNdLCIzNSI6%0AWzM0XSwiMzYiOlszNV0sIjM3IjpbMzZdLCIzOCI6WzM3XSwiMzkiOlszOF0sIjQw%0AIjpbMzldLCI0MSI6WzQwXSwiNDIiOls0MV0sIjQzIjpbNDJdLCI0NCI6WzQzXSwi%0ANDUiOls0NF0sIjQ2IjpbNDVdLCI0NyI6WzQ2XSwiNDgiOls0N10sIjQ5IjpbNDhd%0AfX0sImNvb3JkIjpbWzAuNDE0OSwtMC42NTMzXSxbLTAuMzU0NiwtMS4zNDI2XSxb%0ALTAuNTMzMywtMC4zMjc2XSxbMC4zMzU2LDAuMzE2M10sWzAuMzExNywtMS4yODY1%0AXSxbMS4wNjM0LDAuNzYxNl0sWy0xLjYzNDcsMC4wMTkyXSxbLTEuNjU1NywtMC44%0ANTM4XSxbLTAuODc2NywtMS44ODI0XSxbLTEuMjM2MSwtMS4wMDYzXSxbLTAuNzYw%0AMSwwLjUyMTldLFstMC4yMDY0LDAuODY4MV0sWy0wLjQyOSwxLjg4MjRdLFstMS4y%0AODYzLDEuMTkxMl0sWzEuMTg0NywtMC4zNzIxXSxbMS42NTU3LDEuNjQ0Ml0sWzAu%0ANjM4MywxLjUzMzNdXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxz%0AIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9zdCIs%0AIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5l%0AdyBZb3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJD%0AIiwiWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJOWVRp%0AbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmciOlsi%0AcmdiYSgyNTUsMjU1LDI1NSwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEoNTEs%0ANTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIs%0AInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1%0AMSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIiwi%0AcmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJyZ2JhKDUxLDUx%0ALDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEsNTEsMSkiLCJy%0AZ2JhKDUxLDUxLDUxLDEpIiwicmdiYSg1MSw1MSw1MSwxKSIsInJnYmEoNTEsNTEs%0ANTEsMSkiLCJyZ2JhKDUxLDUxLDUxLDEpIl0sInZlcnRleC5jZXgiOls0LDMsNi41%0ALDQuNSwyLjUsMywyLjUsMi41LDIsMi41LDEuNSwzLDIsMiwyLjUsMS41LDIuNV0s%0AInZlcnRleC5jb2wiOlsicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3%0AOSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3%0AOSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEp%0AIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEo%0AMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3%0AMSwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJy%0AZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUs%0AMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdlLmx3ZCI6WzcuMzMz%0AMyw3LjMzMzMsNyw2LjY2NjcsNy42NjY3LDcsMC4zMzMzLDEuNjY2Nyw3LDcuMzMz%0AMywwLjMzMzMsMS4zMzMzLDAuNjY2NywwLjMzMzMsMC4zMzMzLDcuNjY2NywwLjMz%0AMzMsNy4zMzMzLDEsMC42NjY3LDAuMzMzMyw3LDAuNjY2Nyw3LDAuMzMzMyw3LDcs%0AMC4zMzMzLDcuMzMzMyw3LDEuMzMzMywwLjY2NjcsNyw3LjY2NjcsNywwLjY2Njcs%0AMC42NjY3LDcuMzMzMyw3LjMzMzMsNywwLjMzMzMsMC4zMzMzLDcsNy4zMzMzLDAu%0AMzMzMywxLjMzMzMsNy42NjY3LDcsMS4zMzMzXSwiZWRnZS5jb2wiOlsicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxiPk5hbWU6PFwvYj4g%0ATlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6%0APFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFw%0AZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRvZGF5IDxi%0Acj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IExBIFRp%0AbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+%0AIE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxi%0APk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6%0APFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9i%0APiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+%0AIEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEJCQyA8%0AYnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9vIE5ld3Mg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gR29vZ2xl%0AIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4g%0AUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6%0APFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxi%0APk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4gPGI+VHlwZTo8XC9i%0APiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMyIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sIm1hciI6WzAsMCwwLDBdLCJqaXR0%0AZXIiOltmYWxzZV0sInhsaW0iOlstMy4yMDQ2LDMuMjA0Nl0sInlsaW0iOlstMi45%0ANjE2LDIuOTYxNl19fV0sIm5ldHdvcmsiOnsibWVsIjpbeyJpbmwiOlsyXSwib3V0%0AbCI6WzFdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsiXSwid2VpZ2h0IjpbMjJd%0ALCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzEsNTBdXX19LHsiaW5sIjpbM10sIm91%0AdGwiOlsxXSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndlaWdodCI6WzIy%0AXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1syLDUwXV19fSx7ImlubCI6WzRdLCJv%0AdXRsIjpbMV0sImF0bCI6eyJ0eXBlIjpbImh5cGVybGluayJdLCJ3ZWlnaHQiOlsy%0AMV0sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbMyw1MF1dfX0seyJpbmwiOlsxNV0s%0AIm91dGwiOlsxXSwiYXRsIjp7InR5cGUiOlsibWVudGlvbiJdLCJ3ZWlnaHQiOlsy%0AMF0sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbNCw1MF1dfX0seyJpbmwiOlsxXSwi%0Ab3V0bCI6WzJdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsiXSwid2VpZ2h0Ijpb%0AMjNdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzUsNTBdXX19LHsiaW5sIjpbM10s%0AIm91dGwiOlsyXSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndlaWdodCI6%0AWzIxXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1s2LDUwXV19fSx7ImlubCI6Wzld%0ALCJvdXRsIjpbMl0sImF0bCI6eyJ0eXBlIjpbImh5cGVybGluayJdLCJ3ZWlnaHQi%0AOlsxXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1s3LDUwXV19fSx7ImlubCI6WzEw%0AXSwib3V0bCI6WzJdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsiXSwid2VpZ2h0%0AIjpbNV0sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbOCw1MF1dfX0seyJpbmwiOlsx%0AXSwib3V0bCI6WzNdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsiXSwid2VpZ2h0%0AIjpbMjFdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzksNTBdXX19LHsiaW5sIjpb%0ANF0sIm91dGwiOlszXSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndlaWdo%0AdCI6WzIyXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1sxMCw1MF1dfX0seyJpbmwi%0AOls1XSwib3V0bCI6WzNdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsiXSwid2Vp%0AZ2h0IjpbMV0sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbMTEsNTBdXX19LHsiaW5s%0AIjpbOF0sIm91dGwiOlszXSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndl%0AaWdodCI6WzRdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzEyLDUwXV19fSx7Imlu%0AbCI6WzEwXSwib3V0bCI6WzNdLCJhdGwiOnsidHlwZSI6WyJtZW50aW9uIl0sIndl%0AaWdodCI6WzJdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzEzLDUwXV19fSx7Imlu%0AbCI6WzExXSwib3V0bCI6WzNdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsiXSwi%0Ad2VpZ2h0IjpbMV0sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbMTQsNTBdXX19LHsi%0AaW5sIjpbMTJdLCJvdXRsIjpbM10sImF0bCI6eyJ0eXBlIjpbImh5cGVybGluayJd%0ALCJ3ZWlnaHQiOlsxXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1sxNSw1MF1dfX0s%0AeyJpbmwiOlszXSwib3V0bCI6WzRdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsi%0AXSwid2VpZ2h0IjpbMjNdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzE2LDUwXV19%0AfSx7ImlubCI6WzZdLCJvdXRsIjpbNF0sImF0bCI6eyJ0eXBlIjpbIm1lbnRpb24i%0AXSwid2VpZ2h0IjpbMV0sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbMTcsNTBdXX19%0ALHsiaW5sIjpbMTFdLCJvdXRsIjpbNF0sImF0bCI6eyJ0eXBlIjpbIm1lbnRpb24i%0AXSwid2VpZ2h0IjpbMjJdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzE4LDUwXV19%0AfSx7ImlubCI6WzEyXSwib3V0bCI6WzRdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxp%0AbmsiXSwid2VpZ2h0IjpbM10sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbMTksNTBd%0AXX19LHsiaW5sIjpbMTddLCJvdXRsIjpbNF0sImF0bCI6eyJ0eXBlIjpbIm1lbnRp%0Ab24iXSwid2VpZ2h0IjpbMl0sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbMjAsNTBd%0AXX19LHsiaW5sIjpbMV0sIm91dGwiOls1XSwiYXRsIjp7InR5cGUiOlsibWVudGlv%0AbiJdLCJ3ZWlnaHQiOlsxXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1syMSw1MF1d%0AfX0seyJpbmwiOlsyXSwib3V0bCI6WzVdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxp%0AbmsiXSwid2VpZ2h0IjpbMjFdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzIyLDUw%0AXV19fSx7ImlubCI6WzldLCJvdXRsIjpbNV0sImF0bCI6eyJ0eXBlIjpbImh5cGVy%0AbGluayJdLCJ3ZWlnaHQiOlsyXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1syMyw1%0AMF1dfX0seyJpbmwiOlsxNV0sIm91dGwiOls1XSwiYXRsIjp7InR5cGUiOlsibWVu%0AdGlvbiJdLCJ3ZWlnaHQiOlsyMV0sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbMjQs%0ANTBdXX19LHsiaW5sIjpbNl0sIm91dGwiOls2XSwiYXRsIjp7InR5cGUiOlsiaHlw%0AZXJsaW5rIl0sIndlaWdodCI6WzFdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzI1%0ALDUwXV19fSx7ImlubCI6WzE2XSwib3V0bCI6WzZdLCJhdGwiOnsidHlwZSI6WyJo%0AeXBlcmxpbmsiXSwid2VpZ2h0IjpbMjFdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpb%0AWzI2LDUwXV19fSx7ImlubCI6WzE3XSwib3V0bCI6WzZdLCJhdGwiOnsidHlwZSI6%0AWyJtZW50aW9uIl0sIndlaWdodCI6WzIxXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6%0AW1syNyw1MF1dfX0seyJpbmwiOlszXSwib3V0bCI6WzddLCJhdGwiOnsidHlwZSI6%0AWyJtZW50aW9uIl0sIndlaWdodCI6WzFdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpb%0AWzI4LDUwXV19fSx7ImlubCI6WzhdLCJvdXRsIjpbN10sImF0bCI6eyJ0eXBlIjpb%0AIm1lbnRpb24iXSwid2VpZ2h0IjpbMjJdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpb%0AWzI5LDUwXV19fSx7ImlubCI6WzEwXSwib3V0bCI6WzddLCJhdGwiOnsidHlwZSI6%0AWyJoeXBlcmxpbmsiXSwid2VpZ2h0IjpbMjFdLCJuYSI6W2ZhbHNlXSwiYWN0aXZl%0AIjpbWzMwLDUwXV19fSx7ImlubCI6WzE0XSwib3V0bCI6WzddLCJhdGwiOnsidHlw%0AZSI6WyJtZW50aW9uIl0sIndlaWdodCI6WzRdLCJuYSI6W2ZhbHNlXSwiYWN0aXZl%0AIjpbWzMxLDUwXV19fSx7ImlubCI6WzNdLCJvdXRsIjpbOF0sImF0bCI6eyJ0eXBl%0AIjpbImh5cGVybGluayJdLCJ3ZWlnaHQiOlsyXSwibmEiOltmYWxzZV0sImFjdGl2%0AZSI6W1szMiw1MF1dfX0seyJpbmwiOls3XSwib3V0bCI6WzhdLCJhdGwiOnsidHlw%0AZSI6WyJtZW50aW9uIl0sIndlaWdodCI6WzIxXSwibmEiOltmYWxzZV0sImFjdGl2%0AZSI6W1szMyw1MF1dfX0seyJpbmwiOls5XSwib3V0bCI6WzhdLCJhdGwiOnsidHlw%0AZSI6WyJtZW50aW9uIl0sIndlaWdodCI6WzIzXSwibmEiOltmYWxzZV0sImFjdGl2%0AZSI6W1szNCw1MF1dfX0seyJpbmwiOlsxMF0sIm91dGwiOls5XSwiYXRsIjp7InR5%0AcGUiOlsibWVudGlvbiJdLCJ3ZWlnaHQiOlsyMV0sIm5hIjpbZmFsc2VdLCJhY3Rp%0AdmUiOltbMzUsNTBdXX19LHsiaW5sIjpbM10sIm91dGwiOlsxMF0sImF0bCI6eyJ0%0AeXBlIjpbImh5cGVybGluayJdLCJ3ZWlnaHQiOlsyXSwibmEiOltmYWxzZV0sImFj%0AdGl2ZSI6W1szNiw1MF1dfX0seyJpbmwiOls2XSwib3V0bCI6WzEyXSwiYXRsIjp7%0AInR5cGUiOlsibWVudGlvbiJdLCJ3ZWlnaHQiOlsyXSwibmEiOltmYWxzZV0sImFj%0AdGl2ZSI6W1szNyw1MF1dfX0seyJpbmwiOlsxM10sIm91dGwiOlsxMl0sImF0bCI6%0AeyJ0eXBlIjpbImh5cGVybGluayJdLCJ3ZWlnaHQiOlsyMl0sIm5hIjpbZmFsc2Vd%0ALCJhY3RpdmUiOltbMzgsNTBdXX19LHsiaW5sIjpbMTRdLCJvdXRsIjpbMTJdLCJh%0AdGwiOnsidHlwZSI6WyJtZW50aW9uIl0sIndlaWdodCI6WzIyXSwibmEiOltmYWxz%0AZV0sImFjdGl2ZSI6W1szOSw1MF1dfX0seyJpbmwiOlsxMl0sIm91dGwiOlsxM10s%0AImF0bCI6eyJ0eXBlIjpbImh5cGVybGluayJdLCJ3ZWlnaHQiOlsyMV0sIm5hIjpb%0AZmFsc2VdLCJhY3RpdmUiOltbNDAsNTBdXX19LHsiaW5sIjpbMTddLCJvdXRsIjpb%0AMTNdLCJhdGwiOnsidHlwZSI6WyJtZW50aW9uIl0sIndlaWdodCI6WzFdLCJuYSI6%0AW2ZhbHNlXSwiYWN0aXZlIjpbWzQxLDUwXV19fSx7ImlubCI6WzExXSwib3V0bCI6%0AWzE0XSwiYXRsIjp7InR5cGUiOlsibWVudGlvbiJdLCJ3ZWlnaHQiOlsxXSwibmEi%0AOltmYWxzZV0sImFjdGl2ZSI6W1s0Miw1MF1dfX0seyJpbmwiOlsxM10sIm91dGwi%0AOlsxNF0sImF0bCI6eyJ0eXBlIjpbIm1lbnRpb24iXSwid2VpZ2h0IjpbMjFdLCJu%0AYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzQzLDUwXV19fSx7ImlubCI6WzFdLCJvdXRs%0AIjpbMTVdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsiXSwid2VpZ2h0IjpbMjJd%0ALCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzQ0LDUwXV19fSx7ImlubCI6WzRdLCJv%0AdXRsIjpbMTVdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsiXSwid2VpZ2h0Ijpb%0AMV0sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbNDUsNTBdXX19LHsiaW5sIjpbNl0s%0AIm91dGwiOlsxNV0sImF0bCI6eyJ0eXBlIjpbImh5cGVybGluayJdLCJ3ZWlnaHQi%0AOls0XSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1s0Niw1MF1dfX0seyJpbmwiOls2%0AXSwib3V0bCI6WzE2XSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndlaWdo%0AdCI6WzIzXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1s0Nyw1MF1dfX0seyJpbmwi%0AOlsxN10sIm91dGwiOlsxNl0sImF0bCI6eyJ0eXBlIjpbIm1lbnRpb24iXSwid2Vp%0AZ2h0IjpbMjFdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzQ4LDUwXV19fSx7Imlu%0AbCI6WzRdLCJvdXRsIjpbMTddLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsiXSwi%0Ad2VpZ2h0IjpbNF0sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbNDksNTBdXX19XSwi%0AZ2FsIjp7Im4iOlsxN10sIm1uZXh0IjpbNTBdLCJkaXJlY3RlZCI6W3RydWVdLCJo%0AeXBlciI6W2ZhbHNlXSwibG9vcHMiOltmYWxzZV0sIm11bHRpcGxlIjpbZmFsc2Vd%0ALCJiaXBhcnRpdGUiOltmYWxzZV0sIm5ldC5uYW1lIjpbIk1lZGlhIE5ldHdvcmsi%0AXSwibmV0Lm9icy5wZXJpb2QiOnsib2JzZXJ2YXRpb25zIjpbWzAsNTBdXSwibW9k%0AZSI6WyJjb250aW51b3VzIl0sInRpbWUuaW5jcmVtZW50IjpbbnVsbF0sInRpbWUu%0AdW5pdCI6WyJ1bmtub3duIl19LCJzbGljZS5wYXIiOnsic3RhcnQiOlswXSwiZW5k%0AIjpbNTBdLCJpbnRlcnZhbCI6WzFdLCJhZ2dyZWdhdGUuZHVyIjpbMV0sInJ1bGUi%0AOlsiYW55Il19fSwidmFsIjpbeyJuYSI6W2ZhbHNlXSwidmVydGV4Lm5hbWVzIjpb%0AInMwMSJdLCJpZCI6WyJzMDEiXSwibWVkaWEiOlsiTlkgVGltZXMiXSwibWVkaWEu%0AdHlwZSI6WzFdLCJ0eXBlLmxhYmVsIjpbIk5ld3NwYXBlciJdLCJhdWRpZW5jZS5z%0AaXplIjpbMjBdLCJjb2wiOlsiZ3JheTcwIl0sImFjdGl2ZSI6W1swLDUwXV19LHsi%0AbmEiOltmYWxzZV0sInZlcnRleC5uYW1lcyI6WyJzMDIiXSwiaWQiOlsiczAyIl0s%0AIm1lZGlhIjpbIldhc2hpbmd0b24gUG9zdCJdLCJtZWRpYS50eXBlIjpbMV0sInR5%0AcGUubGFiZWwiOlsiTmV3c3BhcGVyIl0sImF1ZGllbmNlLnNpemUiOlsyNV0sImNv%0AbCI6WyJncmF5NzAiXSwiYWN0aXZlIjpbWzAsNTBdXX0seyJuYSI6W2ZhbHNlXSwi%0AdmVydGV4Lm5hbWVzIjpbInMwMyJdLCJpZCI6WyJzMDMiXSwibWVkaWEiOlsiV2Fs%0AbCBTdHJlZXQgSm91cm5hbCJdLCJtZWRpYS50eXBlIjpbMV0sInR5cGUubGFiZWwi%0AOlsiTmV3c3BhcGVyIl0sImF1ZGllbmNlLnNpemUiOlszMF0sImNvbCI6WyJncmF5%0ANzAiXSwiYWN0aXZlIjpbWzAsNTBdXX0seyJuYSI6W2ZhbHNlXSwidmVydGV4Lm5h%0AbWVzIjpbInMwNCJdLCJpZCI6WyJzMDQiXSwibWVkaWEiOlsiVVNBIFRvZGF5Il0s%0AIm1lZGlhLnR5cGUiOlsxXSwidHlwZS5sYWJlbCI6WyJOZXdzcGFwZXIiXSwiYXVk%0AaWVuY2Uuc2l6ZSI6WzMyXSwiY29sIjpbImdyYXk3MCJdLCJhY3RpdmUiOltbMCw1%0AMF1dfSx7Im5hIjpbZmFsc2VdLCJ2ZXJ0ZXgubmFtZXMiOlsiczA1Il0sImlkIjpb%0AInMwNSJdLCJtZWRpYSI6WyJMQSBUaW1lcyJdLCJtZWRpYS50eXBlIjpbMV0sInR5%0AcGUubGFiZWwiOlsiTmV3c3BhcGVyIl0sImF1ZGllbmNlLnNpemUiOlsyMF0sImNv%0AbCI6WyJncmF5NzAiXSwiYWN0aXZlIjpbWzAsNTBdXX0seyJuYSI6W2ZhbHNlXSwi%0AdmVydGV4Lm5hbWVzIjpbInMwNiJdLCJpZCI6WyJzMDYiXSwibWVkaWEiOlsiTmV3%0AIFlvcmsgUG9zdCJdLCJtZWRpYS50eXBlIjpbMV0sInR5cGUubGFiZWwiOlsiTmV3%0Ac3BhcGVyIl0sImF1ZGllbmNlLnNpemUiOls1MF0sImNvbCI6WyJncmF5NzAiXSwi%0AYWN0aXZlIjpbWzAsNTBdXX0seyJuYSI6W2ZhbHNlXSwidmVydGV4Lm5hbWVzIjpb%0AInMwNyJdLCJpZCI6WyJzMDciXSwibWVkaWEiOlsiQ05OIl0sIm1lZGlhLnR5cGUi%0AOlsyXSwidHlwZS5sYWJlbCI6WyJUViJdLCJhdWRpZW5jZS5zaXplIjpbNTZdLCJj%0Ab2wiOlsidG9tYXRvIl0sImFjdGl2ZSI6W1swLDUwXV19LHsibmEiOltmYWxzZV0s%0AInZlcnRleC5uYW1lcyI6WyJzMDgiXSwiaWQiOlsiczA4Il0sIm1lZGlhIjpbIk1T%0ATkJDIl0sIm1lZGlhLnR5cGUiOlsyXSwidHlwZS5sYWJlbCI6WyJUViJdLCJhdWRp%0AZW5jZS5zaXplIjpbMzRdLCJjb2wiOlsidG9tYXRvIl0sImFjdGl2ZSI6W1swLDUw%0AXV19LHsibmEiOltmYWxzZV0sInZlcnRleC5uYW1lcyI6WyJzMDkiXSwiaWQiOlsi%0AczA5Il0sIm1lZGlhIjpbIkZPWCBOZXdzIl0sIm1lZGlhLnR5cGUiOlsyXSwidHlw%0AZS5sYWJlbCI6WyJUViJdLCJhdWRpZW5jZS5zaXplIjpbNjBdLCJjb2wiOlsidG9t%0AYXRvIl0sImFjdGl2ZSI6W1swLDUwXV19LHsibmEiOltmYWxzZV0sInZlcnRleC5u%0AYW1lcyI6WyJzMTAiXSwiaWQiOlsiczEwIl0sIm1lZGlhIjpbIkFCQyJdLCJtZWRp%0AYS50eXBlIjpbMl0sInR5cGUubGFiZWwiOlsiVFYiXSwiYXVkaWVuY2Uuc2l6ZSI6%0AWzIzXSwiY29sIjpbInRvbWF0byJdLCJhY3RpdmUiOltbMCw1MF1dfSx7Im5hIjpb%0AZmFsc2VdLCJ2ZXJ0ZXgubmFtZXMiOlsiczExIl0sImlkIjpbInMxMSJdLCJtZWRp%0AYSI6WyJCQkMiXSwibWVkaWEudHlwZSI6WzJdLCJ0eXBlLmxhYmVsIjpbIlRWIl0s%0AImF1ZGllbmNlLnNpemUiOlszNF0sImNvbCI6WyJ0b21hdG8iXSwiYWN0aXZlIjpb%0AWzAsNTBdXX0seyJuYSI6W2ZhbHNlXSwidmVydGV4Lm5hbWVzIjpbInMxMiJdLCJp%0AZCI6WyJzMTIiXSwibWVkaWEiOlsiWWFob28gTmV3cyJdLCJtZWRpYS50eXBlIjpb%0AM10sInR5cGUubGFiZWwiOlsiT25saW5lIl0sImF1ZGllbmNlLnNpemUiOlszM10s%0AImNvbCI6WyJnb2xkIl0sImFjdGl2ZSI6W1swLDUwXV19LHsibmEiOltmYWxzZV0s%0AInZlcnRleC5uYW1lcyI6WyJzMTMiXSwiaWQiOlsiczEzIl0sIm1lZGlhIjpbIkdv%0Ab2dsZSBOZXdzIl0sIm1lZGlhLnR5cGUiOlszXSwidHlwZS5sYWJlbCI6WyJPbmxp%0AbmUiXSwiYXVkaWVuY2Uuc2l6ZSI6WzIzXSwiY29sIjpbImdvbGQiXSwiYWN0aXZl%0AIjpbWzAsNTBdXX0seyJuYSI6W2ZhbHNlXSwidmVydGV4Lm5hbWVzIjpbInMxNCJd%0ALCJpZCI6WyJzMTQiXSwibWVkaWEiOlsiUmV1dGVycy5jb20iXSwibWVkaWEudHlw%0AZSI6WzNdLCJ0eXBlLmxhYmVsIjpbIk9ubGluZSJdLCJhdWRpZW5jZS5zaXplIjpb%0AMTJdLCJjb2wiOlsiZ29sZCJdLCJhY3RpdmUiOltbMCw1MF1dfSx7Im5hIjpbZmFs%0Ac2VdLCJ2ZXJ0ZXgubmFtZXMiOlsiczE1Il0sImlkIjpbInMxNSJdLCJtZWRpYSI6%0AWyJOWVRpbWVzLmNvbSJdLCJtZWRpYS50eXBlIjpbM10sInR5cGUubGFiZWwiOlsi%0AT25saW5lIl0sImF1ZGllbmNlLnNpemUiOlsyNF0sImNvbCI6WyJnb2xkIl0sImFj%0AdGl2ZSI6W1swLDUwXV19LHsibmEiOltmYWxzZV0sInZlcnRleC5uYW1lcyI6WyJz%0AMTYiXSwiaWQiOlsiczE2Il0sIm1lZGlhIjpbIldhc2hpbmd0b25Qb3N0LmNvbSJd%0ALCJtZWRpYS50eXBlIjpbM10sInR5cGUubGFiZWwiOlsiT25saW5lIl0sImF1ZGll%0AbmNlLnNpemUiOlsyOF0sImNvbCI6WyJnb2xkIl0sImFjdGl2ZSI6W1swLDUwXV19%0ALHsibmEiOltmYWxzZV0sInZlcnRleC5uYW1lcyI6WyJzMTciXSwiaWQiOlsiczE3%0AIl0sIm1lZGlhIjpbIkFPTC5jb20iXSwibWVkaWEudHlwZSI6WzNdLCJ0eXBlLmxh%0AYmVsIjpbIk9ubGluZSJdLCJhdWRpZW5jZS5zaXplIjpbMzNdLCJjb2wiOlsiZ29s%0AZCJdLCJhY3RpdmUiOltbMCw1MF1dfV0sImllbCI6W1s0NCwyMSw5LDVdLFsxLDIy%0AXSxbMiw2LDM2LDMyLDI4LDE2XSxbMywxMCw0OSw0NV0sWzExXSxbMTcsNDcsNDYs%0AMzcsMjVdLFszM10sWzEyLDI5XSxbNywyMywzNF0sWzgsMTMsMzAsMzVdLFsxNCwx%0AOCw0Ml0sWzE1LDE5LDQwXSxbMzgsNDNdLFszMSwzOV0sWzQsMjRdLFsyNl0sWzIw%0ALDI3LDQxLDQ4XV0sIm9lbCI6W1s0LDMsMiwxXSxbOCw3LDYsNV0sWzE1LDE0LDEz%0ALDEyLDExLDEwLDldLFsyMCwxOSwxOCwxNywxNl0sWzIxLDI0LDIzLDIyXSxbMjcs%0AMjYsMjVdLFszMSwzMCwyOSwyOF0sWzMyLDM0LDMzXSxbMzVdLFszNl0sW10sWzM5%0ALDM4LDM3XSxbNDEsNDBdLFs0Miw0M10sWzQ0LDQ1LDQ2XSxbNDgsNDddLFs0OV1d%0AfX07DQogIHZhciBvcHRpb25zID0geyJuZHR2LnZlcnNpb24iOiIwLjEyLjIsMjAx%0AOC01LTkifTsNCiAgLy9FTkQgR1JBUEggREFUQSBJTklUDQogIA0KICAvL0luc2Vy%0AdCBpbml0IEpTIEhlcmUNCiAgJChmdW5jdGlvbigpIHsNCiAgICBvcHRpb25zLmdy%0AYXBoRGF0YSA9IGdyYXBoRGF0YTsNCiAgICB2YXIgZ3JhcGggPSBuZXcgbmR0dl9k%0AMyhvcHRpb25zKTsgICAgICAgIA0KICB9KQ0KICA8L3NjcmlwdD48L2JvZHk+DQo8%0AL2h0bWw+(Line 1183)
Message:
loadData: 44.89892578125ms
console-api debug URL: data:text/html;base64,PCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSdlbic+DQogIDxoZWFkPg0KICAg%0AIDxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4NCiAgICAgIDwhLS0gY3NzIGZvciBzdHls%0AaW5nIHRoZSBkMy5zbGlkZXIgbGliIC0tPg0KICAgICAgPHN0eWxlIHR5cGU9J3Rl%0AeHQvY3NzJz4uZDMtc2xpZGVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAg%0AIGZvbnQtZmFtaWx5OiBWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7CiAgICBmb250%0ALXNpemU6IDEuMWVtOwogICAgYm9yZGVyOiAxcHggc29saWQgI2FhYWFhYTsKICAg%0AIHotaW5kZXg6IDI7Cn0KCi5kMy1zbGlkZXItaG9yaXpvbnRhbCB7CiAgICBoZWln%0AaHQ6IC44ZW07Cn0gIAoKLmQzLXNsaWRlci1yYW5nZSB7CiAgYmFja2dyb3VuZDoj%0AMjk4MGI5OwogIGxlZnQ6MHB4OwogIHJpZ2h0OjBweDsKICBoZWlnaHQ6IDAuOGVt%0AOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKfQoKLmQzLXNsaWRlci1yYW5nZS12ZXJ0%0AaWNhbCB7CiAgYmFja2dyb3VuZDojMjk4MGI5OwogIGxlZnQ6MHB4OwogIHJpZ2h0%0AOjBweDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOjA7Cn0KCi5kMy1zbGlk%0AZXItdmVydGljYWwgewogICAgd2lkdGg6IC44ZW07CiAgICBoZWlnaHQ6IDEwMHB4%0AOwp9ICAgICAgCgouZDMtc2xpZGVyLWhhbmRsZSB7CiAgICBwb3NpdGlvbjogYWJz%0Ab2x1dGU7CiAgICB3aWR0aDogMS4yZW07CiAgICBoZWlnaHQ6IDEuMmVtOwogICAg%0AYm9yZGVyOiAxcHggc29saWQgI2QzZDNkMzsKICAgIGJvcmRlci1yYWRpdXM6IDRw%0AeDsKICAgIGJhY2tncm91bmQ6ICNlZWU7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXIt%0AZ3JhZGllbnQodG8gYm90dG9tLCAjZWVlIDAlLCAjZGRkIDEwMCUpOwogICAgei1p%0AbmRleDogMzsKICAgIGN1cnNvcjogbW92ZTsKfQoKLmQzLXNsaWRlci1oYW5kbGU6%0AaG92ZXIgewogICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTk5OTsKfQoKLmQzLXNs%0AaWRlci1ob3Jpem9udGFsIC5kMy1zbGlkZXItaGFuZGxlIHsKICAgIHRvcDogLS4z%0AZW07Cn0KCi5kMy1zbGlkZXItYXhpcyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7%0ACiAgICB6LWluZGV4OiAxOyAgICAKfQoKLmQzLXNsaWRlci1heGlzLWJvdHRvbSB7%0ACiAgICB0b3A6IC44ZW07Cn0KCi5kMy1zbGlkZXItYXhpcy1yaWdodCB7CiAgICBs%0AZWZ0OiAuOGVtOwp9CgouZDMtc2xpZGVyLWF4aXMgcGF0aCB7CiAgICBzdHJva2Ut%0Ad2lkdGg6IDA7CiAgICBmaWxsOiBub25lOwp9CgouZDMtc2xpZGVyLWF4aXMgbGlu%0AZSB7CiAgICBmaWxsOiBub25lOwogICAgc3Ryb2tlOiAjYWFhOwogICAgc2hhcGUt%0AcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwp9CgouZDMtc2xpZGVyLWF4aXMgdGV4dCB7%0ACiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5kMy1zbGlkZXItdmVydGljYWwgLmQz%0ALXNsaWRlci1oYW5kbGUgewogICAgbGVmdDogLS4yNWVtOwogICAgbWFyZ2luLWxl%0AZnQ6IDA7CiAgICBtYXJnaW4tYm90dG9tOiAtLjZlbTsgICAgICAKfTwvc3R5bGU+%0ADQogICAgICA8IS0tIGNzcyBmb3Igc3R5bGluZyB0aGUgbmR0di1kMyByZW5kZXIg%0AYW5kIGNvbXBvbmVudHMgLS0+DQogICAgICA8c3R5bGUgdHlwZT0ndGV4dC9jc3Mn%0APi5uZHR2LWZ1bGxzY3JlZW4geyAKICBwYWRkaW5nOiAwOwogIG1hcmdpbjogMDsK%0AICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KCi5uZHR2LWQzLWNvbnRh%0AaW5lciB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoubWFpbiwgLnhsYWIgewog%0AIHRleHQtYW5jaG9yOiBtaWRkbGU7Cn0KCi5sYWJlbCwgLm1haW4sIC54bGFiLCAu%0AdG9vbHRpcCB7CiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7Cn0KCi5kcmFnZ2lu%0AZyB7CiAgY3Vyc29yOiBtb3ZlOwp9Cgoubm9kZSB7CiAgc3Ryb2tlLXdpZHRoOiAx%0AcHg7CiAgZmlsbDogcmVkOwogIHN0cm9rZTogYmxhY2s7Cn0KCi5ub2RlLCAuZWRn%0AZSB7CiAgY3Vyc29yOiBwb2ludGVyOwogIC8qdHJhbnNpdGlvbjogc3Ryb2tlLXdp%0AZHRoIDAuMnMgZWFzZTsqLwp9CgovKi5ub2RlOmhvdmVyLCAuZWRnZTpob3ZlciB7%0ACiAgc3Ryb2tlLXdpZHRoOiA1cHggIWltcG9ydGFudDsKfSovCgouZWRnZSB7CiAg%0Ac3Ryb2tlOiBibGFjazsKfQoKLmxhYmVsIHsKICBwb2ludGVyLWV2ZW50czogbm9u%0AZTsKfQoKLmdyYXBoIHsgCiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG92ZXJmbG93%0AOiBoaWRkZW47Cn0KCi5rZXkgewogIHBhZGRpbmc6IDEwcHg7CiAgdGV4dC1hbGln%0AbjogY2VudGVyOwp9CgouY29udHJvbHMgeyAKICBtYXJnaW46IDEwcHggMjBweDsK%0AICBoZWlnaHQ6IDQwcHg7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBwb3Np%0AdGlvbjogYWJzb2x1dGU7CiAgYm90dG9tOiAwcHg7CiAgbGVmdDogMHB4OwogIHJp%0AZ2h0OiAwcHg7Cn0KCi5wbGF5LWNvbnRyb2wtY29udGFpbmVyPmRpdiB7CiAgd2lk%0AdGg6IDI1cHg7CiAgaGVpZ2h0OiAyNXB4OwogIG92ZXJmbG93OiBoaWRkZW47CiAg%0AZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgouY29udHJvbHMgLmljb24sIC5uZHR2%0ALW1lbnUtY29udGFpbmVyIC5pY29uIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6%0AIDEwMCU7CiAgY3Vyc29yOiBwb2ludGVyOwp9CgouY29udHJvbHMgLmljb246aG92%0AZXIgewogIGZpbGw6IGJsdWU7Cn0KCi5kYXRhX2Nob29zZXJfY29udGFpbmVyIHsK%0AICBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMTBweDsgbGVmdDogMTBweDsKfQoK%0ALnBsYXktY29udHJvbC1jb250YWluZXIgewogIGZsb2F0OiByaWdodDsgCiAgYmFj%0Aa2dyb3VuZDogI2NjYzsgCiAgYm9yZGVyLXJhZGl1czogNXB4OyAKICBwYWRkaW5n%0AOiA3cHg7CiAgcGFkZGluZy1ib3R0b206IDNweDsKICBib3gtc2l6aW5nOiBib3Jk%0AZXItYm94Owp9CgoubmR0di1kMy1jb250YWluZXIgeyAKICBwb3NpdGlvbjogcmVs%0AYXRpdmU7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBib3JkZXI6IDFweCBz%0Ab2xpZDsKfQoKLnNsaWRlci1jb250cm9sLWNvbnRhaW5lciB7IAogIG1hcmdpbi1y%0AaWdodDogMTYwcHg7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKLmQzLXNs%0AaWRlci1oYW5kbGUgewogIG1pbi13aWR0aDogMTBweDsKfQoKLmQzLXNsaWRlci1h%0AeGlzIHsKICBoZWlnaHQ6IDIwcHg7Cn0KCi50b29sdGlwIHsKICBkaXNwbGF5OiBu%0Ab25lOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiAxMDAwOwogIHBh%0AZGRpbmc6IDEwcHggMTBweDsKICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1%0ALCAxKTsKICBib3JkZXI6IDFweCBzb2xpZCAjNjY2OwogIG9wYWNpdHk6IDE7ICAv%0AKiB0aGlzIGlzIHRvIHByZXZlbnQgYm9vdHN0cmFwJ3MgdG9vbHRpcCBydWxlIGZy%0Ab20gb3ZlcnJkaW5nICovCn0KCi5mcmFtZUluZm8gewogIGRpc3BsYXk6IG5vbmU7%0ACiAgcG9zaXRpb246IGFic29sdXRlOwogIGJvdHRvbTogMHB4OwogIGxlZnQ6IDBw%0AeDsKICBwYWRkaW5nOiA1cHg7Cn0KCi5kdXJhdGlvbkNvbnRyb2wgewogIHdpZHRo%0AOiAxNTBweDsKICBtYXJnaW4tYm90dG9tOiAyMHB4OyAKfQoKLmNvbnRhaW5lciAu%0Ac2NyZWVuIHsKICBvcGFjaXR5OiAwOwogIHBvaW50ZXItZXZlbnRzOiBub25lOwog%0AIGZpbGw6IG5vbmU7Cn0KCi5jb250YWluZXIgLnNjcmVlbi5uZXR3b3JrLXNlbGVj%0AdGVkIHsKICBvcGFjaXR5OiAuNjsKfQoKLm5kdHYtbWVudS1jb250YWluZXIgewog%0AIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDVweDsKICByaWdodDogNXB4Owp9%0ACgoubmR0di1tZW51LWljb24gewogIHdpZHRoOiAyNXB4OwogIGhlaWdodDogMjVw%0AeDsKICBmbG9hdDogcmlnaHQ7CiAgei1pbmRleDogMTAwOwp9CgoubmR0di1tZW51%0ALWljb24ubWVudS1hY3RpdmUgewogIGJhY2tncm91bmQ6ICNmZmY7CiAgYm9yZGVy%0AOiAxcHggc29saWQgIzY2NjsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2Zm%0AZjsKfQoKLm5kdHYtbWVudSB7CiAgYmFja2dyb3VuZDogd2hpdGU7CiAgYm9yZGVy%0AOiAxcHggc29saWQgIzY2NjsKICBib3gtc2hhZG93OiAwcHggMnB4IDRweCByZ2Jh%0AKDAsMCwwLDAuMik7CiAgcGFkZGluZzogMTBweDsKICBtYXJnaW4tdG9wOiAyNXB4%0AOwogIGRpc3BsYXk6IG5vbmU7Cn0KCi5tZW51LWl0ZW0gewogIHBhZGRpbmc6IDEw%0AcHggMHB4OwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQ0NDOwp9CgoubWVu%0AdS1pdGVtOmZpcnN0LWNoaWxkIHsKICBwYWRkaW5nLXRvcDogMHB4Owp9CgoubWVu%0AdS1pdGVtOmxhc3QtY2hpbGQgewogIHBhZGRpbmctYm90dG9tOiAwcHg7CiAgYm9y%0AZGVyOiBub25lOwp9Cjwvc3R5bGU+DQogICAgPCEtLSBtaW5pbWl6ZWQgZDMuanMg%0AbGlicmFyeSAtLT4NCiAgICAgIDxzY3JpcHQ+IWZ1bmN0aW9uKCl7ZnVuY3Rpb24g%0AbihuLHQpe3JldHVybiB0Pm4/LTE6bj50PzE6bj49dD8wOjAvMH1mdW5jdGlvbiB0%0AKG4pe3JldHVybiBudWxsIT1uJiYhaXNOYU4obil9ZnVuY3Rpb24gZShuKXtyZXR1%0Acm57bGVmdDpmdW5jdGlvbih0LGUscix1KXtmb3IoYXJndW1lbnRzLmxlbmd0aDwz%0AJiYocj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJih1PXQubGVuZ3RoKTt1PnI7KXt2%0AYXIgaT1yK3U+Pj4xO24odFtpXSxlKTwwP3I9aSsxOnU9aX1yZXR1cm4gcn0scmln%0AaHQ6ZnVuY3Rpb24odCxlLHIsdSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9%0AMCksYXJndW1lbnRzLmxlbmd0aDw0JiYodT10Lmxlbmd0aCk7dT5yOyl7dmFyIGk9%0Acit1Pj4+MTtuKHRbaV0sZSk+MD91PWk6cj1pKzF9cmV0dXJuIHJ9fX1mdW5jdGlv%0AbiByKG4pe3JldHVybiBuLmxlbmd0aH1mdW5jdGlvbiB1KG4pe2Zvcih2YXIgdD0x%0AO24qdCUxOyl0Kj0xMDtyZXR1cm4gdH1mdW5jdGlvbiBpKG4sdCl7dHJ5e2Zvcih2%0AYXIgZSBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHt2%0AYWx1ZTp0W2VdLGVudW1lcmFibGU6ITF9KX1jYXRjaChyKXtuLnByb3RvdHlwZT10%0AfX1mdW5jdGlvbiBvKCl7fWZ1bmN0aW9uIGEobil7cmV0dXJuIG9hK24gaW4gdGhp%0Ac31mdW5jdGlvbiBjKG4pe3JldHVybiBuPW9hK24sbiBpbiB0aGlzJiZkZWxldGUg%0AdGhpc1tuXX1mdW5jdGlvbiBsKCl7dmFyIG49W107cmV0dXJuIHRoaXMuZm9yRWFj%0AaChmdW5jdGlvbih0KXtuLnB1c2godCl9KSxufWZ1bmN0aW9uIHMoKXt2YXIgbj0w%0AO2Zvcih2YXIgdCBpbiB0aGlzKXQuY2hhckNvZGVBdCgwKT09PWFhJiYrK247cmV0%0AdXJuIG59ZnVuY3Rpb24gZigpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG4uY2hhckNv%0AZGVBdCgwKT09PWFhKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGgoKXt9ZnVu%0AY3Rpb24gZyhuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0%0ALGFyZ3VtZW50cyk7cmV0dXJuIHI9PT10P246cn19ZnVuY3Rpb24gcChuLHQpe2lm%0AKHQgaW4gbilyZXR1cm4gdDt0PXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5z%0AbGljZSgxKTtmb3IodmFyIGU9MCxyPWNhLmxlbmd0aDtyPmU7KytlKXt2YXIgdT1j%0AYVtlXSt0O2lmKHUgaW4gbilyZXR1cm4gdX19ZnVuY3Rpb24gdigpe31mdW5jdGlv%0AbiBkKCl7fWZ1bmN0aW9uIG0obil7ZnVuY3Rpb24gdCgpe2Zvcih2YXIgdCxyPWUs%0AdT0tMSxpPXIubGVuZ3RoOysrdTxpOykodD1yW3VdLm9uKSYmdC5hcHBseSh0aGlz%0ALGFyZ3VtZW50cyk7cmV0dXJuIG59dmFyIGU9W10scj1uZXcgbztyZXR1cm4gdC5v%0Abj1mdW5jdGlvbih0LHUpe3ZhciBpLG89ci5nZXQodCk7cmV0dXJuIGFyZ3VtZW50%0Acy5sZW5ndGg8Mj9vJiZvLm9uOihvJiYoby5vbj1udWxsLGU9ZS5zbGljZSgwLGk9%0AZS5pbmRleE9mKG8pKS5jb25jYXQoZS5zbGljZShpKzEpKSxyLnJlbW92ZSh0KSks%0AdSYmZS5wdXNoKHIuc2V0KHQse29uOnV9KSksbil9LHR9ZnVuY3Rpb24geSgpe1Zv%0ALmV2ZW50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24geCgpe2Zvcih2YXIgbix0%0APVZvLmV2ZW50O249dC5zb3VyY2VFdmVudDspdD1uO3JldHVybiB0fWZ1bmN0aW9u%0AIE0obil7Zm9yKHZhciB0PW5ldyBkLGU9MCxyPWFyZ3VtZW50cy5sZW5ndGg7Kytl%0APHI7KXRbYXJndW1lbnRzW2VdXT1tKHQpO3JldHVybiB0Lm9mPWZ1bmN0aW9uKGUs%0Acil7cmV0dXJuIGZ1bmN0aW9uKHUpe3RyeXt2YXIgaT11LnNvdXJjZUV2ZW50PVZv%0ALmV2ZW50O3UudGFyZ2V0PW4sVm8uZXZlbnQ9dSx0W3UudHlwZV0uYXBwbHkoZSxy%0AKX1maW5hbGx5e1ZvLmV2ZW50PWl9fX0sdH1mdW5jdGlvbiBfKG4pe3JldHVybiBz%0AYShuLHZhKSxufWZ1bmN0aW9uIGIobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9m%0AIG4/bjpmdW5jdGlvbigpe3JldHVybiBmYShuLHRoaXMpfX1mdW5jdGlvbiB3KG4p%0Ae3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24oKXtyZXR1cm4g%0AaGEobix0aGlzKX19ZnVuY3Rpb24gUyhuLHQpe2Z1bmN0aW9uIGUoKXt0aGlzLnJl%0AbW92ZUF0dHJpYnV0ZShuKX1mdW5jdGlvbiByKCl7dGhpcy5yZW1vdmVBdHRyaWJ1%0AdGVOUyhuLnNwYWNlLG4ubG9jYWwpfWZ1bmN0aW9uIHUoKXt0aGlzLnNldEF0dHJp%0AYnV0ZShuLHQpfWZ1bmN0aW9uIGkoKXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3Bh%0AY2Usbi5sb2NhbCx0KX1mdW5jdGlvbiBvKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFy%0AZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZShuKTp0aGlzLnNl%0AdEF0dHJpYnV0ZShuLGUpfWZ1bmN0aW9uIGEoKXt2YXIgZT10LmFwcGx5KHRoaXMs%0AYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFj%0AZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxl%0AKX1yZXR1cm4gbj1Wby5ucy5xdWFsaWZ5KG4pLG51bGw9PXQ/bi5sb2NhbD9yOmU6%0AImZ1bmN0aW9uIj09dHlwZW9mIHQ/bi5sb2NhbD9hOm86bi5sb2NhbD9pOnV9ZnVu%0AY3Rpb24gayhuKXtyZXR1cm4gbi50cmltKCkucmVwbGFjZSgvXHMrL2csIiAiKX1m%0AdW5jdGlvbiBFKG4pe3JldHVybiBuZXcgUmVnRXhwKCIoPzpefFxccyspIitWby5y%0AZXF1b3RlKG4pKyIoPzpcXHMrfCQpIiwiZyIpfWZ1bmN0aW9uIEEobil7cmV0dXJu%0AKG4rIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBDKG4sdCl7ZnVu%0AY3Rpb24gZSgpe2Zvcih2YXIgZT0tMTsrK2U8dTspbltlXSh0aGlzLHQpfWZ1bmN0%0AaW9uIHIoKXtmb3IodmFyIGU9LTEscj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTsr%0AK2U8dTspbltlXSh0aGlzLHIpfW49QShuKS5tYXAoTik7dmFyIHU9bi5sZW5ndGg7%0AcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/cjplfWZ1bmN0aW9uIE4obil7dmFy%0AIHQ9RShuKTtyZXR1cm4gZnVuY3Rpb24oZSxyKXtpZih1PWUuY2xhc3NMaXN0KXJl%0AdHVybiByP3UuYWRkKG4pOnUucmVtb3ZlKG4pO3ZhciB1PWUuZ2V0QXR0cmlidXRl%0AKCJjbGFzcyIpfHwiIjtyPyh0Lmxhc3RJbmRleD0wLHQudGVzdCh1KXx8ZS5zZXRB%0AdHRyaWJ1dGUoImNsYXNzIixrKHUrIiAiK24pKSk6ZS5zZXRBdHRyaWJ1dGUoImNs%0AYXNzIixrKHUucmVwbGFjZSh0LCIgIikpKX19ZnVuY3Rpb24geihuLHQsZSl7ZnVu%0AY3Rpb24gcigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9ZnVuY3Rpb24g%0AdSgpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfWZ1bmN0aW9uIGkoKXt2%0AYXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUu%0AcmVtb3ZlUHJvcGVydHkobik6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLHIsZSl9%0AcmV0dXJuIG51bGw9PXQ/cjoiZnVuY3Rpb24iPT10eXBlb2YgdD9pOnV9ZnVuY3Rp%0Ab24gTChuLHQpe2Z1bmN0aW9uIGUoKXtkZWxldGUgdGhpc1tuXX1mdW5jdGlvbiBy%0AKCl7dGhpc1tuXT10fWZ1bmN0aW9uIHUoKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJn%0AdW1lbnRzKTtudWxsPT1lP2RlbGV0ZSB0aGlzW25dOnRoaXNbbl09ZX1yZXR1cm4g%0AbnVsbD09dD9lOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3U6cn1mdW5jdGlvbiBUKG4p%0Ae3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246KG49Vm8ubnMucXVhbGlmeShu%0AKSkubG9jYWw/ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNy%0AZWF0ZUVsZW1lbnROUyhuLnNwYWNlLG4ubG9jYWwpfTpmdW5jdGlvbigpe3JldHVy%0AbiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHRoaXMubmFtZXNw%0AYWNlVVJJLG4pfX1mdW5jdGlvbiBxKG4pe3JldHVybntfX2RhdGFfXzpufX1mdW5j%0AdGlvbiBSKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBwYSh0aGlzLG4pfX1m%0AdW5jdGlvbiBEKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RofHwodD1uKSxmdW5j%0AdGlvbihuLGUpe3JldHVybiBuJiZlP3Qobi5fX2RhdGFfXyxlLl9fZGF0YV9fKToh%0Abi0hZX19ZnVuY3Rpb24gUChuLHQpe2Zvcih2YXIgZT0wLHI9bi5sZW5ndGg7cj5l%0AO2UrKylmb3IodmFyIHUsaT1uW2VdLG89MCxhPWkubGVuZ3RoO2E+bztvKyspKHU9%0AaVtvXSkmJnQodSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFUobil7cmV0dXJuIHNh%0AKG4sbWEpLG59ZnVuY3Rpb24gaihuKXt2YXIgdCxlO3JldHVybiBmdW5jdGlvbihy%0ALHUsaSl7dmFyIG8sYT1uW2ldLnVwZGF0ZSxjPWEubGVuZ3RoO2ZvcihpIT1lJiYo%0AZT1pLHQ9MCksdT49dCYmKHQ9dSsxKTshKG89YVt0XSkmJisrdDxjOyk7cmV0dXJu%0AIG99fWZ1bmN0aW9uIEgoKXt2YXIgbj10aGlzLl9fdHJhbnNpdGlvbl9fO24mJisr%0Abi5hY3RpdmV9ZnVuY3Rpb24gRihuLHQsZSl7ZnVuY3Rpb24gcigpe3ZhciB0PXRo%0AaXNbb107dCYmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLHQsdC4kKSxkZWxl%0AdGUgdGhpc1tvXSl9ZnVuY3Rpb24gdSgpe3ZhciB1PWModCwkbyhhcmd1bWVudHMp%0AKTtyLmNhbGwodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKG4sdGhpc1tvXT11%0ALHUuJD1lKSx1Ll89dH1mdW5jdGlvbiBpKCl7dmFyIHQsZT1uZXcgUmVnRXhwKCJe%0AX19vbihbXi5dKykiK1ZvLnJlcXVvdGUobikrIiQiKTtmb3IodmFyIHIgaW4gdGhp%0AcylpZih0PXIubWF0Y2goZSkpe3ZhciB1PXRoaXNbcl07dGhpcy5yZW1vdmVFdmVu%0AdExpc3RlbmVyKHRbMV0sdSx1LiQpLGRlbGV0ZSB0aGlzW3JdfX12YXIgbz0iX19v%0AbiIrbixhPW4uaW5kZXhPZigiLiIpLGM9TzthPjAmJihuPW4uc2xpY2UoMCxhKSk7%0AdmFyIGw9eGEuZ2V0KG4pO3JldHVybiBsJiYobj1sLGM9WSksYT90P3U6cjp0P3Y6%0AaX1mdW5jdGlvbiBPKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPVZvLmV2%0AZW50O1ZvLmV2ZW50PWUsdFswXT10aGlzLl9fZGF0YV9fO3RyeXtuLmFwcGx5KHRo%0AaXMsdCl9ZmluYWxseXtWby5ldmVudD1yfX19ZnVuY3Rpb24gWShuLHQpe3ZhciBl%0APU8obix0KTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHQ9dGhpcyxyPW4ucmVsYXRl%0AZFRhcmdldDtyJiYocj09PXR8fDgmci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0%0AKSl8fGUuY2FsbCh0LG4pfX1mdW5jdGlvbiBJKCl7dmFyIG49Ii5kcmFnc3VwcHJl%0Ac3MtIisgKytfYSx0PSJjbGljayIrbixlPVZvLnNlbGVjdChKbykub24oInRvdWNo%0AbW92ZSIrbix5KS5vbigiZHJhZ3N0YXJ0IituLHkpLm9uKCJzZWxlY3RzdGFydCIr%0Abix5KTtpZihNYSl7dmFyIHI9V28uc3R5bGUsdT1yW01hXTtyW01hXT0ibm9uZSJ9%0AcmV0dXJuIGZ1bmN0aW9uKGkpe2Z1bmN0aW9uIG8oKXtlLm9uKHQsbnVsbCl9ZS5v%0AbihuLG51bGwpLE1hJiYocltNYV09dSksaSYmKGUub24odCxmdW5jdGlvbigpe3ko%0AKSxvKCl9LCEwKSxzZXRUaW1lb3V0KG8sMCkpfX1mdW5jdGlvbiBaKG4sdCl7dC5j%0AaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSk7dmFyIGU9bi5v%0Ad25lclNWR0VsZW1lbnR8fG47aWYoZS5jcmVhdGVTVkdQb2ludCl7dmFyIHI9ZS5j%0AcmVhdGVTVkdQb2ludCgpO2lmKDA+YmEmJihKby5zY3JvbGxYfHxKby5zY3JvbGxZ%0AKSl7ZT1Wby5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInN2ZyIpLnN0eWxlKHtwb3Np%0AdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxwYWRkaW5nOjAs%0AYm9yZGVyOiJub25lIn0sImltcG9ydGFudCIpO3ZhciB1PWVbMF1bMF0uZ2V0U2Ny%0AZWVuQ1RNKCk7YmE9ISh1LmZ8fHUuZSksZS5yZW1vdmUoKX1yZXR1cm4gYmE/KHIu%0AeD10LnBhZ2VYLHIueT10LnBhZ2VZKTooci54PXQuY2xpZW50WCxyLnk9dC5jbGll%0AbnRZKSxyPXIubWF0cml4VHJhbnNmb3JtKG4uZ2V0U2NyZWVuQ1RNKCkuaW52ZXJz%0AZSgpKSxbci54LHIueV19dmFyIGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTty%0AZXR1cm5bdC5jbGllbnRYLWkubGVmdC1uLmNsaWVudExlZnQsdC5jbGllbnRZLWku%0AdG9wLW4uY2xpZW50VG9wXX1mdW5jdGlvbiBWKCl7cmV0dXJuIFZvLmV2ZW50LmNo%0AYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXJ9ZnVuY3Rpb24gWCgpe3JldHVybiBW%0Aby5ldmVudC50YXJnZXR9ZnVuY3Rpb24gJCgpe3JldHVybiBKb31mdW5jdGlvbiBC%0AKG4pe3JldHVybiBuPjA/MTowPm4/LTE6MH1mdW5jdGlvbiBXKG4sdCxlKXtyZXR1%0Acm4odFswXS1uWzBdKSooZVsxXS1uWzFdKS0odFsxXS1uWzFdKSooZVswXS1uWzBd%0AKX1mdW5jdGlvbiBKKG4pe3JldHVybiBuPjE/MDotMT5uP3dhOk1hdGguYWNvcyhu%0AKX1mdW5jdGlvbiBHKG4pe3JldHVybiBuPjE/a2E6LTE+bj8ta2E6TWF0aC5hc2lu%0AKG4pfWZ1bmN0aW9uIEsobil7cmV0dXJuKChuPU1hdGguZXhwKG4pKS0xL24pLzJ9%0AZnVuY3Rpb24gUShuKXtyZXR1cm4oKG49TWF0aC5leHAobikpKzEvbikvMn1mdW5j%0AdGlvbiBudChuKXtyZXR1cm4oKG49TWF0aC5leHAoMipuKSktMSkvKG4rMSl9ZnVu%0AY3Rpb24gdHQobil7cmV0dXJuKG49TWF0aC5zaW4obi8yKSkqbn1mdW5jdGlvbiBl%0AdCgpe31mdW5jdGlvbiBydChuLHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBy%0AdD8odGhpcy5oPStuLHRoaXMucz0rdCx2b2lkKHRoaXMubD0rZSkpOmFyZ3VtZW50%0Acy5sZW5ndGg8Mj9uIGluc3RhbmNlb2YgcnQ/bmV3IHJ0KG4uaCxuLnMsbi5sKTpt%0AdCgiIituLHl0LHJ0KTpuZXcgcnQobix0LGUpfWZ1bmN0aW9uIHV0KG4sdCxlKXtm%0AdW5jdGlvbiByKG4pe3JldHVybiBuPjM2MD9uLT0zNjA6MD5uJiYobis9MzYwKSw2%0AMD5uP2krKG8taSkqbi82MDoxODA+bj9vOjI0MD5uP2krKG8taSkqKDI0MC1uKS82%0AMDppfWZ1bmN0aW9uIHUobil7cmV0dXJuIE1hdGgucm91bmQoMjU1KnIobikpfXZh%0AciBpLG87cmV0dXJuIG49aXNOYU4obik/MDoobiU9MzYwKTwwP24rMzYwOm4sdD1p%0Ac05hTih0KT8wOjA+dD8wOnQ+MT8xOnQsZT0wPmU/MDplPjE/MTplLG89LjU+PWU/%0AZSooMSt0KTplK3QtZSp0LGk9MiplLW8sbmV3IGd0KHUobisxMjApLHUobiksdShu%0ALTEyMCkpfWZ1bmN0aW9uIGl0KG4sdCxlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9m%0AIGl0Pyh0aGlzLmg9K24sdGhpcy5jPSt0LHZvaWQodGhpcy5sPStlKSk6YXJndW1l%0AbnRzLmxlbmd0aDwyP24gaW5zdGFuY2VvZiBpdD9uZXcgaXQobi5oLG4uYyxuLmwp%0AOm4gaW5zdGFuY2VvZiBhdD9sdChuLmwsbi5hLG4uYik6bHQoKG49eHQoKG49Vm8u%0AcmdiKG4pKS5yLG4uZyxuLmIpKS5sLG4uYSxuLmIpOm5ldyBpdChuLHQsZSl9ZnVu%0AY3Rpb24gb3Qobix0LGUpe3JldHVybiBpc05hTihuKSYmKG49MCksaXNOYU4odCkm%0AJih0PTApLG5ldyBhdChlLE1hdGguY29zKG4qPUNhKSp0LE1hdGguc2luKG4pKnQp%0AfWZ1bmN0aW9uIGF0KG4sdCxlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGF0Pyh0%0AaGlzLmw9K24sdGhpcy5hPSt0LHZvaWQodGhpcy5iPStlKSk6YXJndW1lbnRzLmxl%0Abmd0aDwyP24gaW5zdGFuY2VvZiBhdD9uZXcgYXQobi5sLG4uYSxuLmIpOm4gaW5z%0AdGFuY2VvZiBpdD9vdChuLmwsbi5jLG4uaCk6eHQoKG49Z3QobikpLnIsbi5nLG4u%0AYik6bmV3IGF0KG4sdCxlKX1mdW5jdGlvbiBjdChuLHQsZSl7dmFyIHI9KG4rMTYp%0ALzExNix1PXIrdC81MDAsaT1yLWUvMjAwO3JldHVybiB1PXN0KHUpKkhhLHI9c3Qo%0AcikqRmEsaT1zdChpKSpPYSxuZXcgZ3QoaHQoMy4yNDA0NTQyKnUtMS41MzcxMzg1%0AKnItLjQ5ODUzMTQqaSksaHQoLS45NjkyNjYqdSsxLjg3NjAxMDgqcisuMDQxNTU2%0AKmkpLGh0KC4wNTU2NDM0KnUtLjIwNDAyNTkqcisxLjA1NzIyNTIqaSkpfWZ1bmN0%0AaW9uIGx0KG4sdCxlKXtyZXR1cm4gbj4wP25ldyBpdChNYXRoLmF0YW4yKGUsdCkq%0ATmEsTWF0aC5zcXJ0KHQqdCtlKmUpLG4pOm5ldyBpdCgwLzAsMC8wLG4pfWZ1bmN0%0AaW9uIHN0KG4pe3JldHVybiBuPi4yMDY4OTMwMzQ/bipuKm46KG4tNC8yOSkvNy43%0AODcwMzd9ZnVuY3Rpb24gZnQobil7cmV0dXJuIG4+LjAwODg1Nj9NYXRoLnBvdyhu%0ALDEvMyk6Ny43ODcwMzcqbis0LzI5fWZ1bmN0aW9uIGh0KG4pe3JldHVybiBNYXRo%0ALnJvdW5kKDI1NSooLjAwMzA0Pj1uPzEyLjkyKm46MS4wNTUqTWF0aC5wb3cobiwx%0ALzIuNCktLjA1NSkpfWZ1bmN0aW9uIGd0KG4sdCxlKXtyZXR1cm4gdGhpcyBpbnN0%0AYW5jZW9mIGd0Pyh0aGlzLnI9fn5uLHRoaXMuZz1+fnQsdm9pZCh0aGlzLmI9fn5l%0AKSk6YXJndW1lbnRzLmxlbmd0aDwyP24gaW5zdGFuY2VvZiBndD9uZXcgZ3Qobi5y%0ALG4uZyxuLmIpOm10KCIiK24sZ3QsdXQpOm5ldyBndChuLHQsZSl9ZnVuY3Rpb24g%0AcHQobil7cmV0dXJuIG5ldyBndChuPj4xNiwyNTUmbj4+OCwyNTUmbil9ZnVuY3Rp%0Ab24gdnQobil7cmV0dXJuIHB0KG4pKyIifWZ1bmN0aW9uIGR0KG4pe3JldHVybiAx%0ANj5uPyIwIitNYXRoLm1heCgwLG4pLnRvU3RyaW5nKDE2KTpNYXRoLm1pbigyNTUs%0AbikudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIG10KG4sdCxlKXt2YXIgcix1LGksbz0w%0ALGE9MCxjPTA7aWYocj0vKFthLXpdKylcKCguKilcKS9pLmV4ZWMobikpc3dpdGNo%0AKHU9clsyXS5zcGxpdCgiLCIpLHJbMV0pe2Nhc2UiaHNsIjpyZXR1cm4gZShwYXJz%0AZUZsb2F0KHVbMF0pLHBhcnNlRmxvYXQodVsxXSkvMTAwLHBhcnNlRmxvYXQodVsy%0AXSkvMTAwKTtjYXNlInJnYiI6cmV0dXJuIHQoX3QodVswXSksX3QodVsxXSksX3Qo%0AdVsyXSkpfXJldHVybihpPVphLmdldChuKSk/dChpLnIsaS5nLGkuYik6KG51bGw9%0APW58fCIjIiE9PW4uY2hhckF0KDApfHxpc05hTihpPXBhcnNlSW50KG4uc2xpY2Uo%0AMSksMTYpKXx8KDQ9PT1uLmxlbmd0aD8obz0oMzg0MCZpKT4+NCxvPW8+PjR8byxh%0APTI0MCZpLGE9YT4+NHxhLGM9MTUmaSxjPWM8PDR8Yyk6Nz09PW4ubGVuZ3RoJiYo%0Abz0oMTY3MTE2ODAmaSk+PjE2LGE9KDY1MjgwJmkpPj44LGM9MjU1JmkpKSx0KG8s%0AYSxjKSl9ZnVuY3Rpb24geXQobix0LGUpe3ZhciByLHUsaT1NYXRoLm1pbihuLz0y%0ANTUsdC89MjU1LGUvPTI1NSksbz1NYXRoLm1heChuLHQsZSksYT1vLWksYz0obytp%0AKS8yO3JldHVybiBhPyh1PS41PmM/YS8obytpKTphLygyLW8taSkscj1uPT1vPyh0%0ALWUpL2ErKGU+dD82OjApOnQ9PW8/KGUtbikvYSsyOihuLXQpL2ErNCxyKj02MCk6%0AKHI9MC8wLHU9Yz4wJiYxPmM/MDpyKSxuZXcgcnQocix1LGMpfWZ1bmN0aW9uIHh0%0AKG4sdCxlKXtuPU10KG4pLHQ9TXQodCksZT1NdChlKTt2YXIgcj1mdCgoLjQxMjQ1%0ANjQqbisuMzU3NTc2MSp0Ky4xODA0Mzc1KmUpL0hhKSx1PWZ0KCguMjEyNjcyOSpu%0AKy43MTUxNTIyKnQrLjA3MjE3NSplKS9GYSksaT1mdCgoLjAxOTMzMzkqbisuMTE5%0AMTkyKnQrLjk1MDMwNDEqZSkvT2EpO3JldHVybiBhdCgxMTYqdS0xNiw1MDAqKHIt%0AdSksMjAwKih1LWkpKX1mdW5jdGlvbiBNdChuKXtyZXR1cm4obi89MjU1KTw9LjA0%0AMDQ1P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlv%0AbiBfdChuKXt2YXIgdD1wYXJzZUZsb2F0KG4pO3JldHVybiIlIj09PW4uY2hhckF0%0AKG4ubGVuZ3RoLTEpP01hdGgucm91bmQoMi41NSp0KTp0fWZ1bmN0aW9uIGJ0KG4p%0Ae3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24oKXtyZXR1cm4g%0Abn19ZnVuY3Rpb24gd3Qobil7cmV0dXJuIG59ZnVuY3Rpb24gU3Qobil7cmV0dXJu%0AIGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJm%0AdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lLGU9bnVsbCksa3QodCxlLG4scil9fWZ1%0AbmN0aW9uIGt0KG4sdCxlLHIpe2Z1bmN0aW9uIHUoKXt2YXIgbix0PWMuc3RhdHVz%0AO2lmKCF0JiZBdChjKXx8dD49MjAwJiYzMDA+dHx8MzA0PT09dCl7dHJ5e249ZS5j%0AYWxsKGksYyl9Y2F0Y2gocil7cmV0dXJuIG8uZXJyb3IuY2FsbChpLHIpLHZvaWQg%0AMH1vLmxvYWQuY2FsbChpLG4pfWVsc2Ugby5lcnJvci5jYWxsKGksYyl9dmFyIGk9%0Ae30sbz1Wby5kaXNwYXRjaCgiYmVmb3Jlc2VuZCIsInByb2dyZXNzIiwibG9hZCIs%0AImVycm9yIiksYT17fSxjPW5ldyBYTUxIdHRwUmVxdWVzdCxsPW51bGw7cmV0dXJu%0AIUpvLlhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIGN8fCEvXiho%0AdHRwKHMpPzopP1wvXC8vLnRlc3Qobil8fChjPW5ldyBYRG9tYWluUmVxdWVzdCks%0AIm9ubG9hZCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj11OmMub25yZWFkeXN0YXRl%0AY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJnUoKX0sYy5vbnByb2dy%0AZXNzPWZ1bmN0aW9uKG4pe3ZhciB0PVZvLmV2ZW50O1ZvLmV2ZW50PW47dHJ5e28u%0AcHJvZ3Jlc3MuY2FsbChpLGMpfWZpbmFsbHl7Vm8uZXZlbnQ9dH19LGkuaGVhZGVy%0APWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49KG4rIiIpLnRvTG93ZXJDYXNlKCksYXJn%0AdW1lbnRzLmxlbmd0aDwyP2Fbbl06KG51bGw9PXQ/ZGVsZXRlIGFbbl06YVtuXT10%0AKyIiLGkpfSxpLm1pbWVUeXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu%0AbGVuZ3RoPyh0PW51bGw9PW4/bnVsbDpuKyIiLGkpOnR9LGkucmVzcG9uc2VUeXBl%0APWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4saSk6bH0s%0AaS5yZXNwb25zZT1mdW5jdGlvbihuKXtyZXR1cm4gZT1uLGl9LFsiZ2V0IiwicG9z%0AdCJdLmZvckVhY2goZnVuY3Rpb24obil7aVtuXT1mdW5jdGlvbigpe3JldHVybiBp%0ALnNlbmQuYXBwbHkoaSxbbl0uY29uY2F0KCRvKGFyZ3VtZW50cykpKX19KSxpLnNl%0AbmQ9ZnVuY3Rpb24oZSxyLHUpe2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVu%0AY3Rpb24iPT10eXBlb2YgciYmKHU9cixyPW51bGwpLGMub3BlbihlLG4sITApLG51%0AbGw9PXR8fCJhY2NlcHQiaW4gYXx8KGEuYWNjZXB0PXQrIiwqLyoiKSxjLnNldFJl%0AcXVlc3RIZWFkZXIpZm9yKHZhciBzIGluIGEpYy5zZXRSZXF1ZXN0SGVhZGVyKHMs%0AYVtzXSk7cmV0dXJuIG51bGwhPXQmJmMub3ZlcnJpZGVNaW1lVHlwZSYmYy5vdmVy%0AcmlkZU1pbWVUeXBlKHQpLG51bGwhPWwmJihjLnJlc3BvbnNlVHlwZT1sKSxudWxs%0AIT11JiZpLm9uKCJlcnJvciIsdSkub24oImxvYWQiLGZ1bmN0aW9uKG4pe3UobnVs%0AbCxuKX0pLG8uYmVmb3Jlc2VuZC5jYWxsKGksYyksYy5zZW5kKG51bGw9PXI/bnVs%0AbDpyKSxpfSxpLmFib3J0PWZ1bmN0aW9uKCl7cmV0dXJuIGMuYWJvcnQoKSxpfSxW%0Aby5yZWJpbmQoaSxvLCJvbiIpLG51bGw9PXI/aTppLmdldChFdChyKSl9ZnVuY3Rp%0Ab24gRXQobil7cmV0dXJuIDE9PT1uLmxlbmd0aD9mdW5jdGlvbih0LGUpe24obnVs%0AbD09dD9lOm51bGwpfTpufWZ1bmN0aW9uIEF0KG4pe3ZhciB0PW4ucmVzcG9uc2VU%0AeXBlO3JldHVybiB0JiYidGV4dCIhPT10P24ucmVzcG9uc2U6bi5yZXNwb25zZVRl%0AeHR9ZnVuY3Rpb24gQ3QoKXt2YXIgbj1OdCgpLHQ9enQoKS1uO3Q+MjQ/KGlzRmlu%0AaXRlKHQpJiYoY2xlYXJUaW1lb3V0KEJhKSxCYT1zZXRUaW1lb3V0KEN0LHQpKSwk%0AYT0wKTooJGE9MSxKYShDdCkpfWZ1bmN0aW9uIE50KCl7dmFyIG49RGF0ZS5ub3co%0AKTtmb3IoV2E9VmE7V2E7KW4+PVdhLnQmJihXYS5mPVdhLmMobi1XYS50KSksV2E9%0AV2EubjtyZXR1cm4gbn1mdW5jdGlvbiB6dCgpe2Zvcih2YXIgbix0PVZhLGU9MS8w%0AO3Q7KXQuZj90PW4/bi5uPXQubjpWYT10Lm46KHQudDxlJiYoZT10LnQpLHQ9KG49%0AdCkubik7cmV0dXJuIFhhPW4sZX1mdW5jdGlvbiBMdChuLHQpe3JldHVybiB0LShu%0AP01hdGguY2VpbChNYXRoLmxvZyhuKS9NYXRoLkxOMTApOjEpfWZ1bmN0aW9uIFR0%0AKG4sdCl7dmFyIGU9TWF0aC5wb3coMTAsMyppYSg4LXQpKTtyZXR1cm57c2NhbGU6%0AdD44P2Z1bmN0aW9uKG4pe3JldHVybiBuL2V9OmZ1bmN0aW9uKG4pe3JldHVybiBu%0AKmV9LHN5bWJvbDpufX1mdW5jdGlvbiBxdChuKXt2YXIgdD1uLmRlY2ltYWwsZT1u%0ALnRob3VzYW5kcyxyPW4uZ3JvdXBpbmcsdT1uLmN1cnJlbmN5LGk9cj9mdW5jdGlv%0AbihuKXtmb3IodmFyIHQ9bi5sZW5ndGgsdT1bXSxpPTAsbz1yWzBdO28+MCYmdD4w%0AOyl1LnB1c2gobi5zdWJzdHJpbmcodC09byx0K28pKSxvPXJbaT0oaSsxKSVyLmxl%0Abmd0aF07cmV0dXJuIHUucmV2ZXJzZSgpLmpvaW4oZSl9Ond0O3JldHVybiBmdW5j%0AdGlvbihuKXt2YXIgZT1LYS5leGVjKG4pLHI9ZVsxXXx8IiAiLG89ZVsyXXx8Ij4i%0ALGE9ZVszXXx8IiIsYz1lWzRdfHwiIixsPWVbNV0scz0rZVs2XSxmPWVbN10saD1l%0AWzhdLGc9ZVs5XSxwPTEsdj0iIixkPSIiLG09ITE7c3dpdGNoKGgmJihoPStoLnN1%0AYnN0cmluZygxKSksKGx8fCIwIj09PXImJiI9Ij09PW8pJiYobD1yPSIwIixvPSI9%0AIixmJiYocy09TWF0aC5mbG9vcigocy0xKS80KSkpLGcpe2Nhc2UibiI6Zj0hMCxn%0APSJnIjticmVhaztjYXNlIiUiOnA9MTAwLGQ9IiUiLGc9ImYiO2JyZWFrO2Nhc2Ui%0AcCI6cD0xMDAsZD0iJSIsZz0iciI7YnJlYWs7Y2FzZSJiIjpjYXNlIm8iOmNhc2Ui%0AeCI6Y2FzZSJYIjoiIyI9PT1jJiYodj0iMCIrZy50b0xvd2VyQ2FzZSgpKTtjYXNl%0AImMiOmNhc2UiZCI6bT0hMCxoPTA7YnJlYWs7Y2FzZSJzIjpwPS0xLGc9InIifSIk%0AIj09PWMmJih2PXVbMF0sZD11WzFdKSwiciIhPWd8fGh8fChnPSJnIiksbnVsbCE9%0AaCYmKCJnIj09Zz9oPU1hdGgubWF4KDEsTWF0aC5taW4oMjEsaCkpOigiZSI9PWd8%0AfCJmIj09ZykmJihoPU1hdGgubWF4KDAsTWF0aC5taW4oMjAsaCkpKSksZz1RYS5n%0AZXQoZyl8fFJ0O3ZhciB5PWwmJmY7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlPWQ7%0AaWYobSYmbiUxKXJldHVybiIiO3ZhciB1PTA+bnx8MD09PW4mJjA+MS9uPyhuPS1u%0ALCItIik6YTtpZigwPnApe3ZhciBjPVZvLmZvcm1hdFByZWZpeChuLGgpO249Yy5z%0AY2FsZShuKSxlPWMuc3ltYm9sK2R9ZWxzZSBuKj1wO249ZyhuLGgpO3ZhciB4PW4u%0AbGFzdEluZGV4T2YoIi4iKSxNPTA+eD9uOm4uc3Vic3RyaW5nKDAseCksXz0wPng/%0AIiI6dCtuLnN1YnN0cmluZyh4KzEpOyFsJiZmJiYoTT1pKE0pKTt2YXIgYj12Lmxl%0Abmd0aCtNLmxlbmd0aCtfLmxlbmd0aCsoeT8wOnUubGVuZ3RoKSx3PXM+Yj9uZXcg%0AQXJyYXkoYj1zLWIrMSkuam9pbihyKToiIjtyZXR1cm4geSYmKE09aSh3K00pKSx1%0AKz12LG49TStfLCgiPCI9PT1vP3Urbit3OiI+Ij09PW8/dyt1K246Il4iPT09bz93%0ALnN1YnN0cmluZygwLGI+Pj0xKSt1K24rdy5zdWJzdHJpbmcoYik6dSsoeT9uOncr%0AbikpK2V9fX1mdW5jdGlvbiBSdChuKXtyZXR1cm4gbisiIn1mdW5jdGlvbiBEdCgp%0Ae3RoaXMuXz1uZXcgRGF0ZShhcmd1bWVudHMubGVuZ3RoPjE/RGF0ZS5VVEMuYXBw%0AbHkodGhpcyxhcmd1bWVudHMpOmFyZ3VtZW50c1swXSl9ZnVuY3Rpb24gUHQobix0%0ALGUpe2Z1bmN0aW9uIHIodCl7dmFyIGU9bih0KSxyPWkoZSwxKTtyZXR1cm4gci10%0APnQtZT9lOnJ9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdChlPW4obmV3IHRjKGUtMSkp%0ALDEpLGV9ZnVuY3Rpb24gaShuLGUpe3JldHVybiB0KG49bmV3IHRjKCtuKSxlKSxu%0AfWZ1bmN0aW9uIG8obixyLGkpe3ZhciBvPXUobiksYT1bXTtpZihpPjEpZm9yKDty%0APm87KWUobyklaXx8YS5wdXNoKG5ldyBEYXRlKCtvKSksdChvLDEpO2Vsc2UgZm9y%0AKDtyPm87KWEucHVzaChuZXcgRGF0ZSgrbykpLHQobywxKTtyZXR1cm4gYX1mdW5j%0AdGlvbiBhKG4sdCxlKXt0cnl7dGM9RHQ7dmFyIHI9bmV3IER0O3JldHVybiByLl89%0AbixvKHIsdCxlKX1maW5hbGx5e3RjPURhdGV9fW4uZmxvb3I9bixuLnJvdW5kPXIs%0Abi5jZWlsPXUsbi5vZmZzZXQ9aSxuLnJhbmdlPW87dmFyIGM9bi51dGM9VXQobik7%0AcmV0dXJuIGMuZmxvb3I9YyxjLnJvdW5kPVV0KHIpLGMuY2VpbD1VdCh1KSxjLm9m%0AZnNldD1VdChpKSxjLnJhbmdlPWEsbn1mdW5jdGlvbiBVdChuKXtyZXR1cm4gZnVu%0AY3Rpb24odCxlKXt0cnl7dGM9RHQ7dmFyIHI9bmV3IER0O3JldHVybiByLl89dCxu%0AKHIsZSkuX31maW5hbGx5e3RjPURhdGV9fX1mdW5jdGlvbiBqdChuKXtmdW5jdGlv%0AbiB0KG4pe2Z1bmN0aW9uIHQodCl7Zm9yKHZhciBlLHUsaSxvPVtdLGE9LTEsYz0w%0AOysrYTxyOykzNz09PW4uY2hhckNvZGVBdChhKSYmKG8ucHVzaChuLnNsaWNlKGMs%0AYSkpLG51bGwhPSh1PXJjW2U9bi5jaGFyQXQoKythKV0pJiYoZT1uLmNoYXJBdCgr%0AK2EpKSwoaT1DW2VdKSYmKGU9aSh0LG51bGw9PXU/ImUiPT09ZT8iICI6IjAiOnUp%0AKSxvLnB1c2goZSksYz1hKzEpO3JldHVybiBvLnB1c2gobi5zbGljZShjLGEpKSxv%0ALmpvaW4oIiIpfXZhciByPW4ubGVuZ3RoO3JldHVybiB0LnBhcnNlPWZ1bmN0aW9u%0AKHQpe3ZhciByPXt5OjE5MDAsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjAsWjpudWxs%0AfSx1PWUocixuLHQsMCk7aWYodSE9dC5sZW5ndGgpcmV0dXJuIG51bGw7InAiaW4g%0AciYmKHIuSD1yLkglMTIrMTIqci5wKTt2YXIgaT1udWxsIT1yLlomJnRjIT09RHQs%0Abz1uZXcoaT9EdDp0Yyk7cmV0dXJuImoiaW4gcj9vLnNldEZ1bGxZZWFyKHIueSww%0ALHIuaik6InciaW4gciYmKCJXImluIHJ8fCJVImluIHIpPyhvLnNldEZ1bGxZZWFy%0AKHIueSwwLDEpLG8uc2V0RnVsbFllYXIoci55LDAsIlciaW4gcj8oci53KzYpJTcr%0ANypyLlctKG8uZ2V0RGF5KCkrNSklNzpyLncrNypyLlUtKG8uZ2V0RGF5KCkrNikl%0ANykpOm8uc2V0RnVsbFllYXIoci55LHIubSxyLmQpLG8uc2V0SG91cnMoci5IKygw%0AfHIuWi8xMDApLHIuTStyLlolMTAwLHIuUyxyLkwpLGk/by5fOm99LHQudG9TdHJp%0Abmc9ZnVuY3Rpb24oKXtyZXR1cm4gbn0sdH1mdW5jdGlvbiBlKG4sdCxlLHIpe2Zv%0Acih2YXIgdSxpLG8sYT0wLGM9dC5sZW5ndGgsbD1lLmxlbmd0aDtjPmE7KXtpZihy%0APj1sKXJldHVybi0xO2lmKHU9dC5jaGFyQ29kZUF0KGErKyksMzc9PT11KXtpZihv%0APXQuY2hhckF0KGErKyksaT1OW28gaW4gcmM/dC5jaGFyQXQoYSsrKTpvXSwhaXx8%0AKHI9aShuLGUscikpPDApcmV0dXJuLTF9ZWxzZSBpZih1IT1lLmNoYXJDb2RlQXQo%0AcisrKSlyZXR1cm4tMX1yZXR1cm4gcn1mdW5jdGlvbiByKG4sdCxlKXtiLmxhc3RJ%0AbmRleD0wO3ZhciByPWIuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gcj8obi53PXcu%0AZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rp%0Ab24gdShuLHQsZSl7TS5sYXN0SW5kZXg9MDt2YXIgcj1NLmV4ZWModC5zbGljZShl%0AKSk7cmV0dXJuIHI/KG4udz1fLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclsw%0AXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGkobix0LGUpe0UubGFzdEluZGV4PTA7dmFy%0AIHI9RS5leGVjKHQuc2xpY2UoZSkpO3JldHVybiByPyhuLm09QS5nZXQoclswXS50%0Ab0xvd2VyQ2FzZSgpKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBvKG4sdCxl%0AKXtTLmxhc3RJbmRleD0wO3ZhciByPVMuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4g%0Acj8obi5tPWsuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6%0ALTF9ZnVuY3Rpb24gYShuLHQscil7cmV0dXJuIGUobixDLmMudG9TdHJpbmcoKSx0%0ALHIpfWZ1bmN0aW9uIGMobix0LHIpe3JldHVybiBlKG4sQy54LnRvU3RyaW5nKCks%0AdCxyKX1mdW5jdGlvbiBsKG4sdCxyKXtyZXR1cm4gZShuLEMuWC50b1N0cmluZygp%0ALHQscil9ZnVuY3Rpb24gcyhuLHQsZSl7dmFyIHI9eC5nZXQodC5zbGljZShlLGUr%0APTIpLnRvTG93ZXJDYXNlKCkpO3JldHVybiBudWxsPT1yPy0xOihuLnA9cixlKX12%0AYXIgZj1uLmRhdGVUaW1lLGg9bi5kYXRlLGc9bi50aW1lLHA9bi5wZXJpb2RzLHY9%0Abi5kYXlzLGQ9bi5zaG9ydERheXMsbT1uLm1vbnRocyx5PW4uc2hvcnRNb250aHM7%0AdC51dGM9ZnVuY3Rpb24obil7ZnVuY3Rpb24gZShuKXt0cnl7dGM9RHQ7dmFyIHQ9%0AbmV3IHRjO3JldHVybiB0Ll89bixyKHQpfWZpbmFsbHl7dGM9RGF0ZX19dmFyIHI9%0AdChuKTtyZXR1cm4gZS5wYXJzZT1mdW5jdGlvbihuKXt0cnl7dGM9RHQ7dmFyIHQ9%0Aci5wYXJzZShuKTtyZXR1cm4gdCYmdC5ffWZpbmFsbHl7dGM9RGF0ZX19LGUudG9T%0AdHJpbmc9ci50b1N0cmluZyxlfSx0Lm11bHRpPXQudXRjLm11bHRpPXVlO3ZhciB4%0APVZvLm1hcCgpLE09RnQodiksXz1PdCh2KSxiPUZ0KGQpLHc9T3QoZCksUz1GdCht%0AKSxrPU90KG0pLEU9RnQoeSksQT1PdCh5KTtwLmZvckVhY2goZnVuY3Rpb24obix0%0AKXt4LnNldChuLnRvTG93ZXJDYXNlKCksdCl9KTt2YXIgQz17YTpmdW5jdGlvbihu%0AKXtyZXR1cm4gZFtuLmdldERheSgpXX0sQTpmdW5jdGlvbihuKXtyZXR1cm4gdltu%0ALmdldERheSgpXX0sYjpmdW5jdGlvbihuKXtyZXR1cm4geVtuLmdldE1vbnRoKCld%0AfSxCOmZ1bmN0aW9uKG4pe3JldHVybiBtW24uZ2V0TW9udGgoKV19LGM6dChmKSxk%0AOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEh0KG4uZ2V0RGF0ZSgpLHQsMil9LGU6ZnVu%0AY3Rpb24obix0KXtyZXR1cm4gSHQobi5nZXREYXRlKCksdCwyKX0sSDpmdW5jdGlv%0AbihuLHQpe3JldHVybiBIdChuLmdldEhvdXJzKCksdCwyKX0sSTpmdW5jdGlvbihu%0ALHQpe3JldHVybiBIdChuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9LGo6ZnVuY3Rp%0Ab24obix0KXtyZXR1cm4gSHQoMStuYy5kYXlPZlllYXIobiksdCwzKX0sTDpmdW5j%0AdGlvbihuLHQpe3JldHVybiBIdChuLmdldE1pbGxpc2Vjb25kcygpLHQsMyl9LG06%0AZnVuY3Rpb24obix0KXtyZXR1cm4gSHQobi5nZXRNb250aCgpKzEsdCwyKX0sTTpm%0AdW5jdGlvbihuLHQpe3JldHVybiBIdChuLmdldE1pbnV0ZXMoKSx0LDIpfSxwOmZ1%0AbmN0aW9uKG4pe3JldHVybiBwWysobi5nZXRIb3VycygpPj0xMildfSxTOmZ1bmN0%0AaW9uKG4sdCl7cmV0dXJuIEh0KG4uZ2V0U2Vjb25kcygpLHQsMil9LFU6ZnVuY3Rp%0Ab24obix0KXtyZXR1cm4gSHQobmMuc3VuZGF5T2ZZZWFyKG4pLHQsMil9LHc6ZnVu%0AY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF5KCl9LFc6ZnVuY3Rpb24obix0KXtyZXR1%0Acm4gSHQobmMubW9uZGF5T2ZZZWFyKG4pLHQsMil9LHg6dChoKSxYOnQoZykseTpm%0AdW5jdGlvbihuLHQpe3JldHVybiBIdChuLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9%0ALFk6ZnVuY3Rpb24obix0KXtyZXR1cm4gSHQobi5nZXRGdWxsWWVhcigpJTFlNCx0%0ALDQpfSxaOmVlLCIlIjpmdW5jdGlvbigpe3JldHVybiIlIn19LE49e2E6cixBOnUs%0AYjppLEI6byxjOmEsZDpKdCxlOkp0LEg6S3QsSTpLdCxqOkd0LEw6dGUsbTpXdCxN%0AOlF0LHA6cyxTOm5lLFU6SXQsdzpZdCxXOlp0LHg6YyxYOmwseTpYdCxZOlZ0LFo6%0AJHQsIiUiOnJlfTtyZXR1cm4gdH1mdW5jdGlvbiBIdChuLHQsZSl7dmFyIHI9MD5u%0APyItIjoiIix1PShyPy1uOm4pKyIiLGk9dS5sZW5ndGg7cmV0dXJuIHIrKGU+aT9u%0AZXcgQXJyYXkoZS1pKzEpLmpvaW4odCkrdTp1KX1mdW5jdGlvbiBGdChuKXtyZXR1%0Acm4gbmV3IFJlZ0V4cCgiXig/OiIrbi5tYXAoVm8ucmVxdW90ZSkuam9pbigifCIp%0AKyIpIiwiaSIpfWZ1bmN0aW9uIE90KG4pe2Zvcih2YXIgdD1uZXcgbyxlPS0xLHI9%0Abi5sZW5ndGg7KytlPHI7KXQuc2V0KG5bZV0udG9Mb3dlckNhc2UoKSxlKTtyZXR1%0Acm4gdH1mdW5jdGlvbiBZdChuLHQsZSl7dWMubGFzdEluZGV4PTA7dmFyIHI9dWMu%0AZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIHI/KG4udz0rclswXSxlK3JbMF0u%0AbGVuZ3RoKTotMX1mdW5jdGlvbiBJdChuLHQsZSl7dWMubGFzdEluZGV4PTA7dmFy%0AIHI9dWMuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gcj8obi5VPStyWzBdLGUrclsw%0AXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFp0KG4sdCxlKXt1Yy5sYXN0SW5kZXg9MDt2%0AYXIgcj11Yy5leGVjKHQuc2xpY2UoZSkpO3JldHVybiByPyhuLlc9K3JbMF0sZSty%0AWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVnQobix0LGUpe3VjLmxhc3RJbmRleD0w%0AO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiByPyhuLnk9K3Jb%0AMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWHQobix0LGUpe3VjLmxhc3RJ%0AbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiByPyhu%0ALnk9QnQoK3JbMF0pLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICR0KG4sdCxl%0AKXtyZXR1cm4vXlsrLV1cZHs0fSQvLnRlc3QodD10LnNsaWNlKGUsZSs1KSk/KG4u%0AWj0tdCxlKzUpOi0xfWZ1bmN0aW9uIEJ0KG4pe3JldHVybiBuKyhuPjY4PzE5MDA6%0AMmUzKX1mdW5jdGlvbiBXdChuLHQsZSl7dWMubGFzdEluZGV4PTA7dmFyIHI9dWMu%0AZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KG4ubT1yWzBdLTEsZStyWzBd%0ALmxlbmd0aCk6LTF9ZnVuY3Rpb24gSnQobix0LGUpe3VjLmxhc3RJbmRleD0wO3Zh%0AciByPXVjLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiByPyhuLmQ9K3JbMF0s%0AZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gR3Qobix0LGUpe3VjLmxhc3RJbmRl%0AeD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrMykpO3JldHVybiByPyhuLmo9%0AK3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS3Qobix0LGUpe3VjLmxh%0Ac3RJbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBy%0APyhuLkg9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUXQobix0LGUp%0Ae3VjLmxhc3RJbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUrMikpO3Jl%0AdHVybiByPyhuLk09K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbmUo%0Abix0LGUpe3VjLmxhc3RJbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGljZShlLGUr%0AMikpO3JldHVybiByPyhuLlM9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rp%0Ab24gdGUobix0LGUpe3VjLmxhc3RJbmRleD0wO3ZhciByPXVjLmV4ZWModC5zbGlj%0AZShlLGUrMykpO3JldHVybiByPyhuLkw9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9%0AZnVuY3Rpb24gZWUobil7dmFyIHQ9bi5nZXRUaW1lem9uZU9mZnNldCgpLGU9dD4w%0APyItIjoiKyIscj0wfGlhKHQpLzYwLHU9aWEodCklNjA7cmV0dXJuIGUrSHQociwi%0AMCIsMikrSHQodSwiMCIsMil9ZnVuY3Rpb24gcmUobix0LGUpe2ljLmxhc3RJbmRl%0AeD0wO3ZhciByPWljLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiByP2Urclsw%0AXS5sZW5ndGg6LTF9ZnVuY3Rpb24gdWUobil7Zm9yKHZhciB0PW4ubGVuZ3RoLGU9%0ALTE7KytlPHQ7KW5bZV1bMF09dGhpcyhuW2VdWzBdKTtyZXR1cm4gZnVuY3Rpb24o%0AdCl7Zm9yKHZhciBlPTAscj1uW2VdOyFyWzFdKHQpOylyPW5bKytlXTtyZXR1cm4g%0AclswXSh0KX19ZnVuY3Rpb24gaWUoKXt9ZnVuY3Rpb24gb2Uobix0LGUpe3ZhciBy%0APWUucz1uK3QsdT1yLW4saT1yLXU7ZS50PW4taSsodC11KX1mdW5jdGlvbiBhZShu%0ALHQpe24mJmxjLmhhc093blByb3BlcnR5KG4udHlwZSkmJmxjW24udHlwZV0obix0%0AKX1mdW5jdGlvbiBjZShuLHQsZSl7dmFyIHIsdT0tMSxpPW4ubGVuZ3RoLWU7Zm9y%0AKHQubGluZVN0YXJ0KCk7Kyt1PGk7KXI9blt1XSx0LnBvaW50KHJbMF0sclsxXSxy%0AWzJdKTt0LmxpbmVFbmQoKX1mdW5jdGlvbiBsZShuLHQpe3ZhciBlPS0xLHI9bi5s%0AZW5ndGg7Zm9yKHQucG9seWdvblN0YXJ0KCk7KytlPHI7KWNlKG5bZV0sdCwxKTt0%0ALnBvbHlnb25FbmQoKX1mdW5jdGlvbiBzZSgpe2Z1bmN0aW9uIG4obix0KXtuKj1D%0AYSx0PXQqQ2EvMit3YS80O3ZhciBlPW4tcixvPWU+PTA/MTotMSxhPW8qZSxjPU1h%0AdGguY29zKHQpLGw9TWF0aC5zaW4odCkscz1pKmwsZj11KmMrcypNYXRoLmNvcyhh%0AKSxoPXMqbypNYXRoLnNpbihhKTtmYy5hZGQoTWF0aC5hdGFuMihoLGYpKSxyPW4s%0AdT1jLGk9bH12YXIgdCxlLHIsdSxpO2hjLnBvaW50PWZ1bmN0aW9uKG8sYSl7aGMu%0AcG9pbnQ9bixyPSh0PW8pKkNhLHU9TWF0aC5jb3MoYT0oZT1hKSpDYS8yK3dhLzQp%0ALGk9TWF0aC5zaW4oYSl9LGhjLmxpbmVFbmQ9ZnVuY3Rpb24oKXtuKHQsZSl9fWZ1%0AbmN0aW9uIGZlKG4pe3ZhciB0PW5bMF0sZT1uWzFdLHI9TWF0aC5jb3MoZSk7cmV0%0AdXJuW3IqTWF0aC5jb3ModCkscipNYXRoLnNpbih0KSxNYXRoLnNpbihlKV19ZnVu%0AY3Rpb24gaGUobix0KXtyZXR1cm4gblswXSp0WzBdK25bMV0qdFsxXStuWzJdKnRb%0AMl19ZnVuY3Rpb24gZ2Uobix0KXtyZXR1cm5bblsxXSp0WzJdLW5bMl0qdFsxXSxu%0AWzJdKnRbMF0tblswXSp0WzJdLG5bMF0qdFsxXS1uWzFdKnRbMF1dfWZ1bmN0aW9u%0AIHBlKG4sdCl7blswXSs9dFswXSxuWzFdKz10WzFdLG5bMl0rPXRbMl19ZnVuY3Rp%0Ab24gdmUobix0KXtyZXR1cm5bblswXSp0LG5bMV0qdCxuWzJdKnRdfWZ1bmN0aW9u%0AIGRlKG4pe3ZhciB0PU1hdGguc3FydChuWzBdKm5bMF0rblsxXSpuWzFdK25bMl0q%0AblsyXSk7blswXS89dCxuWzFdLz10LG5bMl0vPXR9ZnVuY3Rpb24gbWUobil7cmV0%0AdXJuW01hdGguYXRhbjIoblsxXSxuWzBdKSxHKG5bMl0pXX1mdW5jdGlvbiB5ZShu%0ALHQpe3JldHVybiBpYShuWzBdLXRbMF0pPEVhJiZpYShuWzFdLXRbMV0pPEVhfWZ1%0AbmN0aW9uIHhlKG4sdCl7bio9Q2E7dmFyIGU9TWF0aC5jb3ModCo9Q2EpO01lKGUq%0ATWF0aC5jb3MobiksZSpNYXRoLnNpbihuKSxNYXRoLnNpbih0KSl9ZnVuY3Rpb24g%0ATWUobix0LGUpeysrZ2MsdmMrPShuLXZjKS9nYyxkYys9KHQtZGMpL2djLG1jKz0o%0AZS1tYykvZ2N9ZnVuY3Rpb24gX2UoKXtmdW5jdGlvbiBuKG4sdSl7bio9Q2E7dmFy%0AIGk9TWF0aC5jb3ModSo9Q2EpLG89aSpNYXRoLmNvcyhuKSxhPWkqTWF0aC5zaW4o%0AbiksYz1NYXRoLnNpbih1KSxsPU1hdGguYXRhbjIoTWF0aC5zcXJ0KChsPWUqYy1y%0AKmEpKmwrKGw9cipvLXQqYykqbCsobD10KmEtZSpvKSpsKSx0Km8rZSphK3IqYyk7%0AcGMrPWwseWMrPWwqKHQrKHQ9bykpLHhjKz1sKihlKyhlPWEpKSxNYys9bCoociso%0Acj1jKSksTWUodCxlLHIpfXZhciB0LGUscjtTYy5wb2ludD1mdW5jdGlvbih1LGkp%0Ae3UqPUNhO3ZhciBvPU1hdGguY29zKGkqPUNhKTt0PW8qTWF0aC5jb3ModSksZT1v%0AKk1hdGguc2luKHUpLHI9TWF0aC5zaW4oaSksU2MucG9pbnQ9bixNZSh0LGUscil9%0AfWZ1bmN0aW9uIGJlKCl7U2MucG9pbnQ9eGV9ZnVuY3Rpb24gd2UoKXtmdW5jdGlv%0AbiBuKG4sdCl7bio9Q2E7dmFyIGU9TWF0aC5jb3ModCo9Q2EpLG89ZSpNYXRoLmNv%0AcyhuKSxhPWUqTWF0aC5zaW4obiksYz1NYXRoLnNpbih0KSxsPXUqYy1pKmEscz1p%0AKm8tcipjLGY9ciphLXUqbyxoPU1hdGguc3FydChsKmwrcypzK2YqZiksZz1yKm8r%0AdSphK2kqYyxwPWgmJi1KKGcpL2gsdj1NYXRoLmF0YW4yKGgsZyk7X2MrPXAqbCxi%0AYys9cCpzLHdjKz1wKmYscGMrPXYseWMrPXYqKHIrKHI9bykpLHhjKz12Kih1Kyh1%0APWEpKSxNYys9diooaSsoaT1jKSksTWUocix1LGkpfXZhciB0LGUscix1LGk7U2Mu%0AcG9pbnQ9ZnVuY3Rpb24obyxhKXt0PW8sZT1hLFNjLnBvaW50PW4sbyo9Q2E7dmFy%0AIGM9TWF0aC5jb3MoYSo9Q2EpO3I9YypNYXRoLmNvcyhvKSx1PWMqTWF0aC5zaW4o%0AbyksaT1NYXRoLnNpbihhKSxNZShyLHUsaSl9LFNjLmxpbmVFbmQ9ZnVuY3Rpb24o%0AKXtuKHQsZSksU2MubGluZUVuZD1iZSxTYy5wb2ludD14ZX19ZnVuY3Rpb24gU2Uo%0AKXtyZXR1cm4hMH1mdW5jdGlvbiBrZShuLHQsZSxyLHUpe3ZhciBpPVtdLG89W107%0AaWYobi5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCEoKHQ9bi5sZW5ndGgtMSk8PTAp%0AKXt2YXIgdCxlPW5bMF0scj1uW3RdO2lmKHllKGUscikpe3UubGluZVN0YXJ0KCk7%0AZm9yKHZhciBhPTA7dD5hOysrYSl1LnBvaW50KChlPW5bYV0pWzBdLGVbMV0pO3Jl%0AdHVybiB1LmxpbmVFbmQoKSx2b2lkIDB9dmFyIGM9bmV3IEFlKGUsbixudWxsLCEw%0AKSxsPW5ldyBBZShlLG51bGwsYywhMSk7Yy5vPWwsaS5wdXNoKGMpLG8ucHVzaChs%0AKSxjPW5ldyBBZShyLG4sbnVsbCwhMSksbD1uZXcgQWUocixudWxsLGMsITApLGMu%0Abz1sLGkucHVzaChjKSxvLnB1c2gobCl9fSksby5zb3J0KHQpLEVlKGkpLEVlKG8p%0ALGkubGVuZ3RoKXtmb3IodmFyIGE9MCxjPWUsbD1vLmxlbmd0aDtsPmE7KythKW9b%0AYV0uZT1jPSFjO2Zvcih2YXIgcyxmLGg9aVswXTs7KXtmb3IodmFyIGc9aCxwPSEw%0AO2cudjspaWYoKGc9Zy5uKT09PWgpcmV0dXJuO3M9Zy56LHUubGluZVN0YXJ0KCk7%0AZG97aWYoZy52PWcuby52PSEwLGcuZSl7aWYocClmb3IodmFyIGE9MCxsPXMubGVu%0AZ3RoO2w+YTsrK2EpdS5wb2ludCgoZj1zW2FdKVswXSxmWzFdKTtlbHNlIHIoZy54%0ALGcubi54LDEsdSk7Zz1nLm59ZWxzZXtpZihwKXtzPWcucC56O2Zvcih2YXIgYT1z%0ALmxlbmd0aC0xO2E+PTA7LS1hKXUucG9pbnQoKGY9c1thXSlbMF0sZlsxXSl9ZWxz%0AZSByKGcueCxnLnAueCwtMSx1KTtnPWcucH1nPWcubyxzPWcueixwPSFwfXdoaWxl%0AKCFnLnYpO3UubGluZUVuZCgpfX19ZnVuY3Rpb24gRWUobil7aWYodD1uLmxlbmd0%0AaCl7Zm9yKHZhciB0LGUscj0wLHU9blswXTsrK3I8dDspdS5uPWU9bltyXSxlLnA9%0AdSx1PWU7dS5uPWU9blswXSxlLnA9dX19ZnVuY3Rpb24gQWUobix0LGUscil7dGhp%0Acy54PW4sdGhpcy56PXQsdGhpcy5vPWUsdGhpcy5lPXIsdGhpcy52PSExLHRoaXMu%0Abj10aGlzLnA9bnVsbH1mdW5jdGlvbiBDZShuLHQsZSxyKXtyZXR1cm4gZnVuY3Rp%0Ab24odSxpKXtmdW5jdGlvbiBvKHQsZSl7dmFyIHI9dSh0LGUpO24odD1yWzBdLGU9%0AclsxXSkmJmkucG9pbnQodCxlKX1mdW5jdGlvbiBhKG4sdCl7dmFyIGU9dShuLHQp%0AO2QucG9pbnQoZVswXSxlWzFdKX1mdW5jdGlvbiBjKCl7eS5wb2ludD1hLGQubGlu%0AZVN0YXJ0KCl9ZnVuY3Rpb24gbCgpe3kucG9pbnQ9byxkLmxpbmVFbmQoKX1mdW5j%0AdGlvbiBzKG4sdCl7di5wdXNoKFtuLHRdKTt2YXIgZT11KG4sdCk7TS5wb2ludChl%0AWzBdLGVbMV0pfWZ1bmN0aW9uIGYoKXtNLmxpbmVTdGFydCgpLHY9W119ZnVuY3Rp%0Ab24gaCgpe3ModlswXVswXSx2WzBdWzFdKSxNLmxpbmVFbmQoKTt2YXIgbix0PU0u%0AY2xlYW4oKSxlPXguYnVmZmVyKCkscj1lLmxlbmd0aDtpZih2LnBvcCgpLHAucHVz%0AaCh2KSx2PW51bGwscilpZigxJnQpe249ZVswXTt2YXIgdSxyPW4ubGVuZ3RoLTEs%0Abz0tMTtpZihyPjApe2ZvcihffHwoaS5wb2x5Z29uU3RhcnQoKSxfPSEwKSxpLmxp%0AbmVTdGFydCgpOysrbzxyOylpLnBvaW50KCh1PW5bb10pWzBdLHVbMV0pO2kubGlu%0AZUVuZCgpfX1lbHNlIHI+MSYmMiZ0JiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5z%0AaGlmdCgpKSksZy5wdXNoKGUuZmlsdGVyKE5lKSl9dmFyIGcscCx2LGQ9dChpKSxt%0APXUuaW52ZXJ0KHJbMF0sclsxXSkseT17cG9pbnQ6byxsaW5lU3RhcnQ6YyxsaW5l%0ARW5kOmwscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eS5wb2ludD1zLHkubGluZVN0%0AYXJ0PWYseS5saW5lRW5kPWgsZz1bXSxwPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9u%0AKCl7eS5wb2ludD1vLHkubGluZVN0YXJ0PWMseS5saW5lRW5kPWwsZz1Wby5tZXJn%0AZShnKTt2YXIgbj1EZShtLHApO2cubGVuZ3RoPyhffHwoaS5wb2x5Z29uU3RhcnQo%0AKSxfPSEwKSxrZShnLExlLG4sZSxpKSk6biYmKF98fChpLnBvbHlnb25TdGFydCgp%0ALF89ITApLGkubGluZVN0YXJ0KCksZShudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQo%0AKSksXyYmKGkucG9seWdvbkVuZCgpLF89ITEpLGc9cD1udWxsfSxzcGhlcmU6ZnVu%0AY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCksZShudWxsLG51%0AbGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19LHg9emUoKSxNPXQo%0AeCksXz0hMTtyZXR1cm4geX19ZnVuY3Rpb24gTmUobil7cmV0dXJuIG4ubGVuZ3Ro%0APjF9ZnVuY3Rpb24gemUoKXt2YXIgbix0PVtdO3JldHVybntsaW5lU3RhcnQ6ZnVu%0AY3Rpb24oKXt0LnB1c2gobj1bXSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7bi5wdXNo%0AKFt0LGVdKX0sbGluZUVuZDp2LGJ1ZmZlcjpmdW5jdGlvbigpe3ZhciBlPXQ7cmV0%0AdXJuIHQ9W10sbj1udWxsLGV9LHJlam9pbjpmdW5jdGlvbigpe3QubGVuZ3RoPjEm%0AJnQucHVzaCh0LnBvcCgpLmNvbmNhdCh0LnNoaWZ0KCkpKX19fWZ1bmN0aW9uIExl%0AKG4sdCl7cmV0dXJuKChuPW4ueClbMF08MD9uWzFdLWthLUVhOmthLW5bMV0pLSgo%0AdD10LngpWzBdPDA/dFsxXS1rYS1FYTprYS10WzFdKX1mdW5jdGlvbiBUZShuKXt2%0AYXIgdCxlPTAvMCxyPTAvMCx1PTAvMDtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9u%0AKCl7bi5saW5lU3RhcnQoKSx0PTF9LHBvaW50OmZ1bmN0aW9uKGksbyl7dmFyIGE9%0AaT4wP3dhOi13YSxjPWlhKGktZSk7aWEoYy13YSk8RWE/KG4ucG9pbnQoZSxyPShy%0AK28pLzI+MD9rYTota2EpLG4ucG9pbnQodSxyKSxuLmxpbmVFbmQoKSxuLmxpbmVT%0AdGFydCgpLG4ucG9pbnQoYSxyKSxuLnBvaW50KGksciksdD0wKTp1IT09YSYmYz49%0Ad2EmJihpYShlLXUpPEVhJiYoZS09dSpFYSksaWEoaS1hKTxFYSYmKGktPWEqRWEp%0ALHI9cWUoZSxyLGksbyksbi5wb2ludCh1LHIpLG4ubGluZUVuZCgpLG4ubGluZVN0%0AYXJ0KCksbi5wb2ludChhLHIpLHQ9MCksbi5wb2ludChlPWkscj1vKSx1PWF9LGxp%0AbmVFbmQ6ZnVuY3Rpb24oKXtuLmxpbmVFbmQoKSxlPXI9MC8wfSxjbGVhbjpmdW5j%0AdGlvbigpe3JldHVybiAyLXR9fX1mdW5jdGlvbiBxZShuLHQsZSxyKXt2YXIgdSxp%0ALG89TWF0aC5zaW4obi1lKTtyZXR1cm4gaWEobyk+RWE/TWF0aC5hdGFuKChNYXRo%0ALnNpbih0KSooaT1NYXRoLmNvcyhyKSkqTWF0aC5zaW4oZSktTWF0aC5zaW4ocikq%0AKHU9TWF0aC5jb3ModCkpKk1hdGguc2luKG4pKS8odSppKm8pKToodCtyKS8yfWZ1%0AbmN0aW9uIFJlKG4sdCxlLHIpe3ZhciB1O2lmKG51bGw9PW4pdT1lKmthLHIucG9p%0AbnQoLXdhLHUpLHIucG9pbnQoMCx1KSxyLnBvaW50KHdhLHUpLHIucG9pbnQod2Es%0AMCksci5wb2ludCh3YSwtdSksci5wb2ludCgwLC11KSxyLnBvaW50KC13YSwtdSks%0Aci5wb2ludCgtd2EsMCksci5wb2ludCgtd2EsdSk7ZWxzZSBpZihpYShuWzBdLXRb%0AMF0pPkVhKXt2YXIgaT1uWzBdPHRbMF0/d2E6LXdhO3U9ZSppLzIsci5wb2ludCgt%0AaSx1KSxyLnBvaW50KDAsdSksci5wb2ludChpLHUpfWVsc2Ugci5wb2ludCh0WzBd%0ALHRbMV0pfWZ1bmN0aW9uIERlKG4sdCl7dmFyIGU9blswXSxyPW5bMV0sdT1bTWF0%0AaC5zaW4oZSksLU1hdGguY29zKGUpLDBdLGk9MCxvPTA7ZmMucmVzZXQoKTtmb3Io%0AdmFyIGE9MCxjPXQubGVuZ3RoO2M+YTsrK2Epe3ZhciBsPXRbYV0scz1sLmxlbmd0%0AaDtpZihzKWZvcih2YXIgZj1sWzBdLGg9ZlswXSxnPWZbMV0vMit3YS80LHA9TWF0%0AaC5zaW4oZyksdj1NYXRoLmNvcyhnKSxkPTE7Oyl7ZD09PXMmJihkPTApLG49bFtk%0AXTt2YXIgbT1uWzBdLHk9blsxXS8yK3dhLzQseD1NYXRoLnNpbih5KSxNPU1hdGgu%0AY29zKHkpLF89bS1oLGI9Xz49MD8xOi0xLHc9YipfLFM9dz53YSxrPXAqeDtpZihm%0AYy5hZGQoTWF0aC5hdGFuMihrKmIqTWF0aC5zaW4odyksdipNK2sqTWF0aC5jb3Mo%0AdykpKSxpKz1TP18rYipTYTpfLFNeaD49ZV5tPj1lKXt2YXIgRT1nZShmZShmKSxm%0AZShuKSk7ZGUoRSk7dmFyIEE9Z2UodSxFKTtkZShBKTt2YXIgQz0oU15fPj0wPy0x%0AOjEpKkcoQVsyXSk7KHI+Q3x8cj09PUMmJihFWzBdfHxFWzFdKSkmJihvKz1TXl8+%0APTA/MTotMSl9aWYoIWQrKylicmVhaztoPW0scD14LHY9TSxmPW59fXJldHVybigt%0ARWE+aXx8RWE+aSYmMD5mYyleMSZvfWZ1bmN0aW9uIFBlKG4pe2Z1bmN0aW9uIHQo%0Abix0KXtyZXR1cm4gTWF0aC5jb3MobikqTWF0aC5jb3ModCk+aX1mdW5jdGlvbiBl%0AKG4pe3ZhciBlLGksYyxsLHM7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2w9%0AYz0hMSxzPTF9LHBvaW50OmZ1bmN0aW9uKGYsaCl7dmFyIGcscD1bZixoXSx2PXQo%0AZixoKSxkPW8/dj8wOnUoZixoKTp2P3UoZisoMD5mP3dhOi13YSksaCk6MDtpZigh%0AZSYmKGw9Yz12KSYmbi5saW5lU3RhcnQoKSx2IT09YyYmKGc9cihlLHApLCh5ZShl%0ALGcpfHx5ZShwLGcpKSYmKHBbMF0rPUVhLHBbMV0rPUVhLHY9dChwWzBdLHBbMV0p%0AKSksdiE9PWMpcz0wLHY/KG4ubGluZVN0YXJ0KCksZz1yKHAsZSksbi5wb2ludChn%0AWzBdLGdbMV0pKTooZz1yKGUscCksbi5wb2ludChnWzBdLGdbMV0pLG4ubGluZUVu%0AZCgpKSxlPWc7ZWxzZSBpZihhJiZlJiZvXnYpe3ZhciBtO2QmaXx8IShtPXIocCxl%0ALCEwKSl8fChzPTAsbz8obi5saW5lU3RhcnQoKSxuLnBvaW50KG1bMF1bMF0sbVsw%0AXVsxXSksbi5wb2ludChtWzFdWzBdLG1bMV1bMV0pLG4ubGluZUVuZCgpKToobi5w%0Ab2ludChtWzFdWzBdLG1bMV1bMV0pLG4ubGluZUVuZCgpLG4ubGluZVN0YXJ0KCks%0Abi5wb2ludChtWzBdWzBdLG1bMF1bMV0pKSl9IXZ8fGUmJnllKGUscCl8fG4ucG9p%0AbnQocFswXSxwWzFdKSxlPXAsYz12LGk9ZH0sbGluZUVuZDpmdW5jdGlvbigpe2Mm%0AJm4ubGluZUVuZCgpLGU9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gc3wo%0AbCYmYyk8PDF9fX1mdW5jdGlvbiByKG4sdCxlKXt2YXIgcj1mZShuKSx1PWZlKHQp%0ALG89WzEsMCwwXSxhPWdlKHIsdSksYz1oZShhLGEpLGw9YVswXSxzPWMtbCpsO2lm%0AKCFzKXJldHVybiFlJiZuO3ZhciBmPWkqYy9zLGg9LWkqbC9zLGc9Z2UobyxhKSxw%0APXZlKG8sZiksdj12ZShhLGgpO3BlKHAsdik7dmFyIGQ9ZyxtPWhlKHAsZCkseT1o%0AZShkLGQpLHg9bSptLXkqKGhlKHAscCktMSk7aWYoISgwPngpKXt2YXIgTT1NYXRo%0ALnNxcnQoeCksXz12ZShkLCgtbS1NKS95KTtpZihwZShfLHApLF89bWUoXyksIWUp%0AcmV0dXJuIF87dmFyIGIsdz1uWzBdLFM9dFswXSxrPW5bMV0sRT10WzFdO3c+UyYm%0AKGI9dyx3PVMsUz1iKTt2YXIgQT1TLXcsQz1pYShBLXdhKTxFYSxOPUN8fEVhPkE7%0AaWYoIUMmJms+RSYmKGI9ayxrPUUsRT1iKSxOP0M/aytFPjBeX1sxXTwoaWEoX1sw%0AXS13KTxFYT9rOkUpOms8PV9bMV0mJl9bMV08PUU6QT53YV4odzw9X1swXSYmX1sw%0AXTw9Uykpe3ZhciB6PXZlKGQsKC1tK00pL3kpO3JldHVybiBwZSh6LHApLFtfLG1l%0AKHopXX19fWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1vP246d2Etbix1PTA7cmV0dXJu%0ALXI+dD91fD0xOnQ+ciYmKHV8PTIpLC1yPmU/dXw9NDplPnImJih1fD04KSx1fXZh%0AciBpPU1hdGguY29zKG4pLG89aT4wLGE9aWEoaSk+RWEsYz1zcihuLDYqQ2EpO3Jl%0AdHVybiBDZSh0LGUsYyxvP1swLC1uXTpbLXdhLG4td2FdKX1mdW5jdGlvbiBVZShu%0ALHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGksbz11LmEsYT11LmIsYz1v%0ALngsbD1vLnkscz1hLngsZj1hLnksaD0wLGc9MSxwPXMtYyx2PWYtbDtpZihpPW4t%0AYyxwfHwhKGk+MCkpe2lmKGkvPXAsMD5wKXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9%0AaSl9ZWxzZSBpZihwPjApe2lmKGk+ZylyZXR1cm47aT5oJiYoaD1pKX1pZihpPWUt%0AYyxwfHwhKDA+aSkpe2lmKGkvPXAsMD5wKXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9%0AaSl9ZWxzZSBpZihwPjApe2lmKGg+aSlyZXR1cm47Zz5pJiYoZz1pKX1pZihpPXQt%0AbCx2fHwhKGk+MCkpe2lmKGkvPXYsMD52KXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9%0AaSl9ZWxzZSBpZih2PjApe2lmKGk+ZylyZXR1cm47aT5oJiYoaD1pKX1pZihpPXIt%0AbCx2fHwhKDA+aSkpe2lmKGkvPXYsMD52KXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9%0AaSl9ZWxzZSBpZih2PjApe2lmKGg+aSlyZXR1cm47Zz5pJiYoZz1pKX1yZXR1cm4g%0AaD4wJiYodS5hPXt4OmMraCpwLHk6bCtoKnZ9KSwxPmcmJih1LmI9e3g6YytnKnAs%0AeTpsK2cqdn0pLHV9fX19fX1mdW5jdGlvbiBqZShuLHQsZSxyKXtmdW5jdGlvbiB1%0AKHIsdSl7cmV0dXJuIGlhKHJbMF0tbik8RWE/dT4wPzA6MzppYShyWzBdLWUpPEVh%0AP3U+MD8yOjE6aWEoclsxXS10KTxFYT91PjA/MTowOnU+MD8zOjJ9ZnVuY3Rpb24g%0AaShuLHQpe3JldHVybiBvKG4ueCx0LngpfWZ1bmN0aW9uIG8obix0KXt2YXIgZT11%0AKG4sMSkscj11KHQsMSk7cmV0dXJuIGUhPT1yP2UtcjowPT09ZT90WzFdLW5bMV06%0AMT09PWU/blswXS10WzBdOjI9PT1lP25bMV0tdFsxXTp0WzBdLW5bMF19cmV0dXJu%0AIGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMobil7Zm9yKHZhciB0PTAsZT1kLmxlbmd0%0AaCxyPW5bMV0sdT0wO2U+dTsrK3UpZm9yKHZhciBpLG89MSxhPWRbdV0sYz1hLmxl%0Abmd0aCxsPWFbMF07Yz5vOysrbylpPWFbb10sbFsxXTw9cj9pWzFdPnImJlcobCxp%0ALG4pPjAmJisrdDppWzFdPD1yJiZXKGwsaSxuKTwwJiYtLXQsbD1pO3JldHVybiAw%0AIT09dH1mdW5jdGlvbiBsKGksYSxjLGwpe3ZhciBzPTAsZj0wO2lmKG51bGw9PWl8%0AfChzPXUoaSxjKSkhPT0oZj11KGEsYykpfHxvKGksYSk8MF5jPjApe2RvIGwucG9p%0AbnQoMD09PXN8fDM9PT1zP246ZSxzPjE/cjp0KTt3aGlsZSgocz0ocytjKzQpJTQp%0AIT09Zil9ZWxzZSBsLnBvaW50KGFbMF0sYVsxXSl9ZnVuY3Rpb24gcyh1LGkpe3Jl%0AdHVybiB1Pj1uJiZlPj11JiZpPj10JiZyPj1pfWZ1bmN0aW9uIGYobix0KXtzKG4s%0AdCkmJmEucG9pbnQobix0KX1mdW5jdGlvbiBoKCl7Ti5wb2ludD1wLGQmJmQucHVz%0AaChtPVtdKSxTPSEwLHc9ITEsXz1iPTAvMH1mdW5jdGlvbiBnKCl7diYmKHAoeSx4%0AKSxNJiZ3JiZBLnJlam9pbigpLHYucHVzaChBLmJ1ZmZlcigpKSksTi5wb2ludD1m%0ALHcmJmEubGluZUVuZCgpfWZ1bmN0aW9uIHAobix0KXtuPU1hdGgubWF4KC1FYyxN%0AYXRoLm1pbihFYyxuKSksdD1NYXRoLm1heCgtRWMsTWF0aC5taW4oRWMsdCkpO3Zh%0AciBlPXMobix0KTtpZihkJiZtLnB1c2goW24sdF0pLFMpeT1uLHg9dCxNPWUsUz0h%0AMSxlJiYoYS5saW5lU3RhcnQoKSxhLnBvaW50KG4sdCkpO2Vsc2UgaWYoZSYmdylh%0ALnBvaW50KG4sdCk7ZWxzZXt2YXIgcj17YTp7eDpfLHk6Yn0sYjp7eDpuLHk6dH19%0AO0Mocik/KHd8fChhLmxpbmVTdGFydCgpLGEucG9pbnQoci5hLngsci5hLnkpKSxh%0ALnBvaW50KHIuYi54LHIuYi55KSxlfHxhLmxpbmVFbmQoKSxrPSExKTplJiYoYS5s%0AaW5lU3RhcnQoKSxhLnBvaW50KG4sdCksaz0hMSl9Xz1uLGI9dCx3PWV9dmFyIHYs%0AZCxtLHkseCxNLF8sYix3LFMsayxFPWEsQT16ZSgpLEM9VWUobix0LGUsciksTj17%0AcG9pbnQ6ZixsaW5lU3RhcnQ6aCxsaW5lRW5kOmcscG9seWdvblN0YXJ0OmZ1bmN0%0AaW9uKCl7YT1BLHY9W10sZD1bXSxrPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7%0AYT1FLHY9Vm8ubWVyZ2Uodik7dmFyIHQ9YyhbbixyXSksZT1rJiZ0LHU9di5sZW5n%0AdGg7KGV8fHUpJiYoYS5wb2x5Z29uU3RhcnQoKSxlJiYoYS5saW5lU3RhcnQoKSxs%0AKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgpKSx1JiZrZSh2LGksdCxsLGEpLGEu%0AcG9seWdvbkVuZCgpKSx2PWQ9bT1udWxsfX07cmV0dXJuIE59fWZ1bmN0aW9uIEhl%0AKG4sdCl7ZnVuY3Rpb24gZShlLHIpe3JldHVybiBlPW4oZSxyKSx0KGVbMF0sZVsx%0AXSl9cmV0dXJuIG4uaW52ZXJ0JiZ0LmludmVydCYmKGUuaW52ZXJ0PWZ1bmN0aW9u%0AKGUscil7cmV0dXJuIGU9dC5pbnZlcnQoZSxyKSxlJiZuLmludmVydChlWzBdLGVb%0AMV0pfSksZX1mdW5jdGlvbiBGZShuKXt2YXIgdD0wLGU9d2EvMyxyPWVyKG4pLHU9%0Acih0LGUpO3JldHVybiB1LnBhcmFsbGVscz1mdW5jdGlvbihuKXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aD9yKHQ9blswXSp3YS8xODAsZT1uWzFdKndhLzE4MCk6WzE4%0AMCoodC93YSksMTgwKihlL3dhKV19LHV9ZnVuY3Rpb24gT2Uobix0KXtmdW5jdGlv%0AbiBlKG4sdCl7dmFyIGU9TWF0aC5zcXJ0KGktMip1Kk1hdGguc2luKHQpKS91O3Jl%0AdHVybltlKk1hdGguc2luKG4qPXUpLG8tZSpNYXRoLmNvcyhuKV19dmFyIHI9TWF0%0AaC5zaW4obiksdT0ocitNYXRoLnNpbih0KSkvMixpPTErciooMip1LXIpLG89TWF0%0AaC5zcXJ0KGkpL3U7cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7dmFyIGU9%0Aby10O3JldHVybltNYXRoLmF0YW4yKG4sZSkvdSxHKChpLShuKm4rZSplKSp1KnUp%0ALygyKnUpKV19LGV9ZnVuY3Rpb24gWWUoKXtmdW5jdGlvbiBuKG4sdCl7Q2MrPXUq%0Abi1yKnQscj1uLHU9dH12YXIgdCxlLHIsdTtxYy5wb2ludD1mdW5jdGlvbihpLG8p%0Ae3FjLnBvaW50PW4sdD1yPWksZT11PW99LHFjLmxpbmVFbmQ9ZnVuY3Rpb24oKXtu%0AKHQsZSl9fWZ1bmN0aW9uIEllKG4sdCl7TmM+biYmKE5jPW4pLG4+TGMmJihMYz1u%0AKSx6Yz50JiYoemM9dCksdD5UYyYmKFRjPXQpfWZ1bmN0aW9uIFplKCl7ZnVuY3Rp%0Ab24gbihuLHQpe28ucHVzaCgiTSIsbiwiLCIsdCxpKX1mdW5jdGlvbiB0KG4sdCl7%0Aby5wdXNoKCJNIixuLCIsIix0KSxhLnBvaW50PWV9ZnVuY3Rpb24gZShuLHQpe28u%0AcHVzaCgiTCIsbiwiLCIsdCl9ZnVuY3Rpb24gcigpe2EucG9pbnQ9bn1mdW5jdGlv%0AbiB1KCl7by5wdXNoKCJaIil9dmFyIGk9VmUoNC41KSxvPVtdLGE9e3BvaW50Om4s%0AbGluZVN0YXJ0OmZ1bmN0aW9uKCl7YS5wb2ludD10fSxsaW5lRW5kOnIscG9seWdv%0AblN0YXJ0OmZ1bmN0aW9uKCl7YS5saW5lRW5kPXV9LHBvbHlnb25FbmQ6ZnVuY3Rp%0Ab24oKXthLmxpbmVFbmQ9cixhLnBvaW50PW59LHBvaW50UmFkaXVzOmZ1bmN0aW9u%0AKG4pe3JldHVybiBpPVZlKG4pLGF9LHJlc3VsdDpmdW5jdGlvbigpe2lmKG8ubGVu%0AZ3RoKXt2YXIgbj1vLmpvaW4oIiIpO3JldHVybiBvPVtdLG59fX07cmV0dXJuIGF9%0AZnVuY3Rpb24gVmUobil7cmV0dXJuIm0wLCIrbisiYSIrbisiLCIrbisiIDAgMSwx%0AIDAsIistMipuKyJhIituKyIsIituKyIgMCAxLDEgMCwiKzIqbisieiJ9ZnVuY3Rp%0Ab24gWGUobix0KXt2Yys9bixkYys9dCwrK21jfWZ1bmN0aW9uICRlKCl7ZnVuY3Rp%0Ab24gbihuLHIpe3ZhciB1PW4tdCxpPXItZSxvPU1hdGguc3FydCh1KnUraSppKTt5%0AYys9byoodCtuKS8yLHhjKz1vKihlK3IpLzIsTWMrPW8sWGUodD1uLGU9cil9dmFy%0AIHQsZTtEYy5wb2ludD1mdW5jdGlvbihyLHUpe0RjLnBvaW50PW4sWGUodD1yLGU9%0AdSl9fWZ1bmN0aW9uIEJlKCl7RGMucG9pbnQ9WGV9ZnVuY3Rpb24gV2UoKXtmdW5j%0AdGlvbiBuKG4sdCl7dmFyIGU9bi1yLGk9dC11LG89TWF0aC5zcXJ0KGUqZStpKmkp%0AO3ljKz1vKihyK24pLzIseGMrPW8qKHUrdCkvMixNYys9byxvPXUqbi1yKnQsX2Mr%0APW8qKHIrbiksYmMrPW8qKHUrdCksd2MrPTMqbyxYZShyPW4sdT10KX12YXIgdCxl%0ALHIsdTtEYy5wb2ludD1mdW5jdGlvbihpLG8pe0RjLnBvaW50PW4sWGUodD1yPWks%0AZT11PW8pfSxEYy5saW5lRW5kPWZ1bmN0aW9uKCl7bih0LGUpfX1mdW5jdGlvbiBK%0AZShuKXtmdW5jdGlvbiB0KHQsZSl7bi5tb3ZlVG8odCxlKSxuLmFyYyh0LGUsbyww%0ALFNhKX1mdW5jdGlvbiBlKHQsZSl7bi5tb3ZlVG8odCxlKSxhLnBvaW50PXJ9ZnVu%0AY3Rpb24gcih0LGUpe24ubGluZVRvKHQsZSl9ZnVuY3Rpb24gdSgpe2EucG9pbnQ9%0AdH1mdW5jdGlvbiBpKCl7bi5jbG9zZVBhdGgoKX12YXIgbz00LjUsYT17cG9pbnQ6%0AdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXthLnBvaW50PWV9LGxpbmVFbmQ6dSxwb2x5%0AZ29uU3RhcnQ6ZnVuY3Rpb24oKXthLmxpbmVFbmQ9aX0scG9seWdvbkVuZDpmdW5j%0AdGlvbigpe2EubGluZUVuZD11LGEucG9pbnQ9dH0scG9pbnRSYWRpdXM6ZnVuY3Rp%0Ab24obil7cmV0dXJuIG89bixhfSxyZXN1bHQ6dn07cmV0dXJuIGF9ZnVuY3Rpb24g%0AR2Uobil7ZnVuY3Rpb24gdChuKXtyZXR1cm4oYT9yOmUpKG4pfWZ1bmN0aW9uIGUo%0AdCl7cmV0dXJuIG5yKHQsZnVuY3Rpb24oZSxyKXtlPW4oZSxyKSx0LnBvaW50KGVb%0AMF0sZVsxXSl9KX1mdW5jdGlvbiByKHQpe2Z1bmN0aW9uIGUoZSxyKXtlPW4oZSxy%0AKSx0LnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gcigpe3g9MC8wLFMucG9pbnQ9%0AaSx0LmxpbmVTdGFydCgpfWZ1bmN0aW9uIGkoZSxyKXt2YXIgaT1mZShbZSxyXSks%0Abz1uKGUscik7dSh4LE0seSxfLGIsdyx4PW9bMF0sTT1vWzFdLHk9ZSxfPWlbMF0s%0AYj1pWzFdLHc9aVsyXSxhLHQpLHQucG9pbnQoeCxNKX1mdW5jdGlvbiBvKCl7Uy5w%0Ab2ludD1lLHQubGluZUVuZCgpfWZ1bmN0aW9uIGMoKXtyKCksUy5wb2ludD1sLFMu%0AbGluZUVuZD1zfWZ1bmN0aW9uIGwobix0KXtpKGY9bixoPXQpLGc9eCxwPU0sdj1f%0ALGQ9YixtPXcsUy5wb2ludD1pfWZ1bmN0aW9uIHMoKXt1KHgsTSx5LF8sYix3LGcs%0AcCxmLHYsZCxtLGEsdCksUy5saW5lRW5kPW8sbygpfXZhciBmLGgsZyxwLHYsZCxt%0ALHkseCxNLF8sYix3LFM9e3BvaW50OmUsbGluZVN0YXJ0OnIsbGluZUVuZDpvLHBv%0AbHlnb25TdGFydDpmdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCksUy5saW5lU3Rh%0AcnQ9Y30scG9seWdvbkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpLFMubGlu%0AZVN0YXJ0PXJ9fTtyZXR1cm4gU31mdW5jdGlvbiB1KHQsZSxyLGEsYyxsLHMsZixo%0ALGcscCx2LGQsbSl7dmFyIHk9cy10LHg9Zi1lLE09eSp5K3gqeDtpZihNPjQqaSYm%0AZC0tKXt2YXIgXz1hK2csYj1jK3Asdz1sK3YsUz1NYXRoLnNxcnQoXypfK2IqYit3%0AKncpLGs9TWF0aC5hc2luKHcvPVMpLEU9aWEoaWEodyktMSk8RWF8fGlhKHItaCk8%0ARWE/KHIraCkvMjpNYXRoLmF0YW4yKGIsXyksQT1uKEUsayksQz1BWzBdLE49QVsx%0AXSx6PUMtdCxMPU4tZSxUPXgqei15Kkw7KFQqVC9NPml8fGlhKCh5KnoreCpMKS9N%0ALS41KT4uM3x8bz5hKmcrYypwK2wqdikmJih1KHQsZSxyLGEsYyxsLEMsTixFLF8v%0APVMsYi89Uyx3LGQsbSksbS5wb2ludChDLE4pLHUoQyxOLEUsXyxiLHcscyxmLGgs%0AZyxwLHYsZCxtKSl9fXZhciBpPS41LG89TWF0aC5jb3MoMzAqQ2EpLGE9MTY7cmV0%0AdXJuIHQucHJlY2lzaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyhhPShpPW4qbik+MCYmMTYsdCk6TWF0aC5zcXJ0KGkpCn0sdH1mdW5jdGlv%0AbiBLZShuKXt2YXIgdD1HZShmdW5jdGlvbih0LGUpe3JldHVybiBuKFt0Kk5hLGUq%0ATmFdKX0pO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gcnIodChuKSl9fWZ1bmN0%0AaW9uIFFlKG4pe3RoaXMuc3RyZWFtPW59ZnVuY3Rpb24gbnIobix0KXtyZXR1cm57%0AcG9pbnQ6dCxzcGhlcmU6ZnVuY3Rpb24oKXtuLnNwaGVyZSgpfSxsaW5lU3RhcnQ6%0AZnVuY3Rpb24oKXtuLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7bi5s%0AaW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe24ucG9seWdvblN0YXJ0%0AKCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25FbmQoKX19fWZ1bmN0%0AaW9uIHRyKG4pe3JldHVybiBlcihmdW5jdGlvbigpe3JldHVybiBufSkoKX1mdW5j%0AdGlvbiBlcihuKXtmdW5jdGlvbiB0KG4pe3JldHVybiBuPWEoblswXSpDYSxuWzFd%0AKkNhKSxbblswXSpoK2MsbC1uWzFdKmhdfWZ1bmN0aW9uIGUobil7cmV0dXJuIG49%0AYS5pbnZlcnQoKG5bMF0tYykvaCwobC1uWzFdKS9oKSxuJiZbblswXSpOYSxuWzFd%0AKk5hXX1mdW5jdGlvbiByKCl7YT1IZShvPW9yKG0seSx4KSxpKTt2YXIgbj1pKHYs%0AZCk7cmV0dXJuIGM9Zy1uWzBdKmgsbD1wK25bMV0qaCx1KCl9ZnVuY3Rpb24gdSgp%0Ae3JldHVybiBzJiYocy52YWxpZD0hMSxzPW51bGwpLHR9dmFyIGksbyxhLGMsbCxz%0ALGY9R2UoZnVuY3Rpb24obix0KXtyZXR1cm4gbj1pKG4sdCksW25bMF0qaCtjLGwt%0AblsxXSpoXX0pLGg9MTUwLGc9NDgwLHA9MjUwLHY9MCxkPTAsbT0wLHk9MCx4PTAs%0ATT1rYyxfPXd0LGI9bnVsbCx3PW51bGw7cmV0dXJuIHQuc3RyZWFtPWZ1bmN0aW9u%0AKG4pe3JldHVybiBzJiYocy52YWxpZD0hMSkscz1ycihNKG8sZihfKG4pKSkpLHMu%0AdmFsaWQ9ITAsc30sdC5jbGlwQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KE09bnVsbD09bj8oYj1uLGtjKTpQZSgoYj0rbikqQ2EpLHUo%0AKSk6Yn0sdC5jbGlwRXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu%0AbGVuZ3RoPyh3PW4sXz1uP2plKG5bMF1bMF0sblswXVsxXSxuWzFdWzBdLG5bMV1b%0AMV0pOnd0LHUoKSk6d30sdC5zY2FsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1l%0AbnRzLmxlbmd0aD8oaD0rbixyKCkpOmh9LHQudHJhbnNsYXRlPWZ1bmN0aW9uKG4p%0Ae3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStuWzBdLHA9K25bMV0scigpKTpb%0AZyxwXX0sdC5jZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KHY9blswXSUzNjAqQ2EsZD1uWzFdJTM2MCpDYSxyKCkpOlt2Kk5hLGQqTmFd%0AfSx0LnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o%0AbT1uWzBdJTM2MCpDYSx5PW5bMV0lMzYwKkNhLHg9bi5sZW5ndGg+Mj9uWzJdJTM2%0AMCpDYTowLHIoKSk6W20qTmEseSpOYSx4Kk5hXX0sVm8ucmViaW5kKHQsZiwicHJl%0AY2lzaW9uIiksZnVuY3Rpb24oKXtyZXR1cm4gaT1uLmFwcGx5KHRoaXMsYXJndW1l%0AbnRzKSx0LmludmVydD1pLmludmVydCYmZSxyKCl9fWZ1bmN0aW9uIHJyKG4pe3Jl%0AdHVybiBucihuLGZ1bmN0aW9uKHQsZSl7bi5wb2ludCh0KkNhLGUqQ2EpfSl9ZnVu%0AY3Rpb24gdXIobix0KXtyZXR1cm5bbix0XX1mdW5jdGlvbiBpcihuLHQpe3JldHVy%0AbltuPndhP24tU2E6LXdhPm4/bitTYTpuLHRdfWZ1bmN0aW9uIG9yKG4sdCxlKXty%0AZXR1cm4gbj90fHxlP0hlKGNyKG4pLGxyKHQsZSkpOmNyKG4pOnR8fGU/bHIodCxl%0AKTppcn1mdW5jdGlvbiBhcihuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4g%0AdCs9bixbdD53YT90LVNhOi13YT50P3QrU2E6dCxlXX19ZnVuY3Rpb24gY3Iobil7%0AdmFyIHQ9YXIobik7cmV0dXJuIHQuaW52ZXJ0PWFyKC1uKSx0fWZ1bmN0aW9uIGxy%0AKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPU1hdGguY29zKHQpLGE9TWF0aC5j%0Ab3MobikqZSxjPU1hdGguc2luKG4pKmUsbD1NYXRoLnNpbih0KSxzPWwqcithKnU7%0AcmV0dXJuW01hdGguYXRhbjIoYyppLXMqbyxhKnItbCp1KSxHKHMqaStjKm8pXX12%0AYXIgcj1NYXRoLmNvcyhuKSx1PU1hdGguc2luKG4pLGk9TWF0aC5jb3ModCksbz1N%0AYXRoLnNpbih0KTtyZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1N%0AYXRoLmNvcyh0KSxhPU1hdGguY29zKG4pKmUsYz1NYXRoLnNpbihuKSplLGw9TWF0%0AaC5zaW4odCkscz1sKmktYypvO3JldHVybltNYXRoLmF0YW4yKGMqaStsKm8sYSpy%0AK3MqdSksRyhzKnItYSp1KV19LGV9ZnVuY3Rpb24gc3Iobix0KXt2YXIgZT1NYXRo%0ALmNvcyhuKSxyPU1hdGguc2luKG4pO3JldHVybiBmdW5jdGlvbih1LGksbyxhKXt2%0AYXIgYz1vKnQ7bnVsbCE9dT8odT1mcihlLHUpLGk9ZnIoZSxpKSwobz4wP2k+dTp1%0APmkpJiYodSs9bypTYSkpOih1PW4rbypTYSxpPW4tLjUqYyk7Zm9yKHZhciBsLHM9%0AdTtvPjA/cz5pOmk+cztzLT1jKWEucG9pbnQoKGw9bWUoW2UsLXIqTWF0aC5jb3Mo%0AcyksLXIqTWF0aC5zaW4ocyldKSlbMF0sbFsxXSl9fWZ1bmN0aW9uIGZyKG4sdCl7%0AdmFyIGU9ZmUodCk7ZVswXS09bixkZShlKTt2YXIgcj1KKC1lWzFdKTtyZXR1cm4o%0AKC1lWzJdPDA/LXI6cikrMipNYXRoLlBJLUVhKSUoMipNYXRoLlBJKX1mdW5jdGlv%0AbiBocihuLHQsZSl7dmFyIHI9Vm8ucmFuZ2Uobix0LUVhLGUpLmNvbmNhdCh0KTty%0AZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKHQpe3JldHVy%0AbltuLHRdfSl9fWZ1bmN0aW9uIGdyKG4sdCxlKXt2YXIgcj1Wby5yYW5nZShuLHQt%0ARWEsZSkuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gci5tYXAo%0AZnVuY3Rpb24odCl7cmV0dXJuW3Qsbl19KX19ZnVuY3Rpb24gcHIobil7cmV0dXJu%0AIG4uc291cmNlfWZ1bmN0aW9uIHZyKG4pe3JldHVybiBuLnRhcmdldH1mdW5jdGlv%0AbiBkcihuLHQsZSxyKXt2YXIgdT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLG89%0ATWF0aC5jb3MociksYT1NYXRoLnNpbihyKSxjPXUqTWF0aC5jb3MobiksbD11Kk1h%0AdGguc2luKG4pLHM9bypNYXRoLmNvcyhlKSxmPW8qTWF0aC5zaW4oZSksaD0yKk1h%0AdGguYXNpbihNYXRoLnNxcnQodHQoci10KSt1Km8qdHQoZS1uKSkpLGc9MS9NYXRo%0ALnNpbihoKSxwPWg/ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zaW4obio9aCkqZyxl%0APU1hdGguc2luKGgtbikqZyxyPWUqYyt0KnMsdT1lKmwrdCpmLG89ZSppK3QqYTty%0AZXR1cm5bTWF0aC5hdGFuMih1LHIpKk5hLE1hdGguYXRhbjIobyxNYXRoLnNxcnQo%0AcipyK3UqdSkpKk5hXX06ZnVuY3Rpb24oKXtyZXR1cm5bbipOYSx0Kk5hXX07cmV0%0AdXJuIHAuZGlzdGFuY2U9aCxwfWZ1bmN0aW9uIG1yKCl7ZnVuY3Rpb24gbihuLHUp%0Ae3ZhciBpPU1hdGguc2luKHUqPUNhKSxvPU1hdGguY29zKHUpLGE9aWEoKG4qPUNh%0AKS10KSxjPU1hdGguY29zKGEpO1BjKz1NYXRoLmF0YW4yKE1hdGguc3FydCgoYT1v%0AKk1hdGguc2luKGEpKSphKyhhPXIqaS1lKm8qYykqYSksZSppK3IqbypjKSx0PW4s%0AZT1pLHI9b312YXIgdCxlLHI7VWMucG9pbnQ9ZnVuY3Rpb24odSxpKXt0PXUqQ2Es%0AZT1NYXRoLnNpbihpKj1DYSkscj1NYXRoLmNvcyhpKSxVYy5wb2ludD1ufSxVYy5s%0AaW5lRW5kPWZ1bmN0aW9uKCl7VWMucG9pbnQ9VWMubGluZUVuZD12fX1mdW5jdGlv%0AbiB5cihuLHQpe2Z1bmN0aW9uIGUodCxlKXt2YXIgcj1NYXRoLmNvcyh0KSx1PU1h%0AdGguY29zKGUpLGk9bihyKnUpO3JldHVybltpKnUqTWF0aC5zaW4odCksaSpNYXRo%0ALnNpbihlKV19cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKG4sZSl7dmFyIHI9TWF0%0AaC5zcXJ0KG4qbitlKmUpLHU9dChyKSxpPU1hdGguc2luKHUpLG89TWF0aC5jb3Mo%0AdSk7cmV0dXJuW01hdGguYXRhbjIobippLHIqbyksTWF0aC5hc2luKHImJmUqaS9y%0AKV19LGV9ZnVuY3Rpb24geHIobix0KXtmdW5jdGlvbiBlKG4sdCl7bz4wPy1rYStF%0AYT50JiYodD0ta2ErRWEpOnQ+a2EtRWEmJih0PWthLUVhKTt2YXIgZT1vL01hdGgu%0AcG93KHUodCksaSk7cmV0dXJuW2UqTWF0aC5zaW4oaSpuKSxvLWUqTWF0aC5jb3Mo%0AaSpuKV19dmFyIHI9TWF0aC5jb3MobiksdT1mdW5jdGlvbihuKXtyZXR1cm4gTWF0%0AaC50YW4od2EvNCtuLzIpfSxpPW49PT10P01hdGguc2luKG4pOk1hdGgubG9nKHIv%0ATWF0aC5jb3ModCkpL01hdGgubG9nKHUodCkvdShuKSksbz1yKk1hdGgucG93KHUo%0AbiksaSkvaTtyZXR1cm4gaT8oZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1v%0ALXQscj1CKGkpKk1hdGguc3FydChuKm4rZSplKTtyZXR1cm5bTWF0aC5hdGFuMihu%0ALGUpL2ksMipNYXRoLmF0YW4oTWF0aC5wb3coby9yLDEvaSkpLWthXX0sZSk6X3J9%0AZnVuY3Rpb24gTXIobix0KXtmdW5jdGlvbiBlKG4sdCl7dmFyIGU9aS10O3JldHVy%0AbltlKk1hdGguc2luKHUqbiksaS1lKk1hdGguY29zKHUqbildfXZhciByPU1hdGgu%0AY29zKG4pLHU9bj09PXQ/TWF0aC5zaW4obik6KHItTWF0aC5jb3ModCkpLyh0LW4p%0ALGk9ci91K247cmV0dXJuIGlhKHUpPEVhP3VyOihlLmludmVydD1mdW5jdGlvbihu%0ALHQpe3ZhciBlPWktdDtyZXR1cm5bTWF0aC5hdGFuMihuLGUpL3UsaS1CKHUpKk1h%0AdGguc3FydChuKm4rZSplKV19LGUpfWZ1bmN0aW9uIF9yKG4sdCl7cmV0dXJuW24s%0ATWF0aC5sb2coTWF0aC50YW4od2EvNCt0LzIpKV19ZnVuY3Rpb24gYnIobil7dmFy%0AIHQsZT10cihuKSxyPWUuc2NhbGUsdT1lLnRyYW5zbGF0ZSxpPWUuY2xpcEV4dGVu%0AdDtyZXR1cm4gZS5zY2FsZT1mdW5jdGlvbigpe3ZhciBuPXIuYXBwbHkoZSxhcmd1%0AbWVudHMpO3JldHVybiBuPT09ZT90P2UuY2xpcEV4dGVudChudWxsKTplOm59LGUu%0AdHJhbnNsYXRlPWZ1bmN0aW9uKCl7dmFyIG49dS5hcHBseShlLGFyZ3VtZW50cyk7%0AcmV0dXJuIG49PT1lP3Q/ZS5jbGlwRXh0ZW50KG51bGwpOmU6bn0sZS5jbGlwRXh0%0AZW50PWZ1bmN0aW9uKG4pe3ZhciBvPWkuYXBwbHkoZSxhcmd1bWVudHMpO2lmKG89%0APT1lKXtpZih0PW51bGw9PW4pe3ZhciBhPXdhKnIoKSxjPXUoKTtpKFtbY1swXS1h%0ALGNbMV0tYV0sW2NbMF0rYSxjWzFdK2FdXSl9fWVsc2UgdCYmKG89bnVsbCk7cmV0%0AdXJuIG99LGUuY2xpcEV4dGVudChudWxsKX1mdW5jdGlvbiB3cihuLHQpe3JldHVy%0AbltNYXRoLmxvZyhNYXRoLnRhbih3YS80K3QvMikpLC1uXX1mdW5jdGlvbiBTcihu%0AKXtyZXR1cm4gblswXX1mdW5jdGlvbiBrcihuKXtyZXR1cm4gblsxXX1mdW5jdGlv%0AbiBFcihuKXtmb3IodmFyIHQ9bi5sZW5ndGgsZT1bMCwxXSxyPTIsdT0yO3Q+dTt1%0AKyspe2Zvcig7cj4xJiZXKG5bZVtyLTJdXSxuW2Vbci0xXV0sblt1XSk8PTA7KS0t%0AcjtlW3IrK109dX1yZXR1cm4gZS5zbGljZSgwLHIpfWZ1bmN0aW9uIEFyKG4sdCl7%0AcmV0dXJuIG5bMF0tdFswXXx8blsxXS10WzFdfWZ1bmN0aW9uIENyKG4sdCxlKXty%0AZXR1cm4oZVswXS10WzBdKSooblsxXS10WzFdKTwoZVsxXS10WzFdKSooblswXS10%0AWzBdKX1mdW5jdGlvbiBOcihuLHQsZSxyKXt2YXIgdT1uWzBdLGk9ZVswXSxvPXRb%0AMF0tdSxhPXJbMF0taSxjPW5bMV0sbD1lWzFdLHM9dFsxXS1jLGY9clsxXS1sLGg9%0AKGEqKGMtbCktZioodS1pKSkvKGYqby1hKnMpO3JldHVyblt1K2gqbyxjK2gqc119%0AZnVuY3Rpb24genIobil7dmFyIHQ9blswXSxlPW5bbi5sZW5ndGgtMV07cmV0dXJu%0AISh0WzBdLWVbMF18fHRbMV0tZVsxXSl9ZnVuY3Rpb24gTHIoKXtLcih0aGlzKSx0%0AaGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gVHIo%0Abil7dmFyIHQ9V2MucG9wKCl8fG5ldyBMcjtyZXR1cm4gdC5zaXRlPW4sdH1mdW5j%0AdGlvbiBxcihuKXtJcihuKSxYYy5yZW1vdmUobiksV2MucHVzaChuKSxLcihuKX1m%0AdW5jdGlvbiBScihuKXt2YXIgdD1uLmNpcmNsZSxlPXQueCxyPXQuY3ksdT17eDpl%0ALHk6cn0saT1uLlAsbz1uLk4sYT1bbl07cXIobik7Zm9yKHZhciBjPWk7Yy5jaXJj%0AbGUmJmlhKGUtYy5jaXJjbGUueCk8RWEmJmlhKHItYy5jaXJjbGUuY3kpPEVhOylp%0APWMuUCxhLnVuc2hpZnQoYykscXIoYyksYz1pO2EudW5zaGlmdChjKSxJcihjKTtm%0Ab3IodmFyIGw9bztsLmNpcmNsZSYmaWEoZS1sLmNpcmNsZS54KTxFYSYmaWEoci1s%0ALmNpcmNsZS5jeSk8RWE7KW89bC5OLGEucHVzaChsKSxxcihsKSxsPW87YS5wdXNo%0AKGwpLElyKGwpO3ZhciBzLGY9YS5sZW5ndGg7Zm9yKHM9MTtmPnM7KytzKWw9YVtz%0AXSxjPWFbcy0xXSxXcihsLmVkZ2UsYy5zaXRlLGwuc2l0ZSx1KTtjPWFbMF0sbD1h%0AW2YtMV0sbC5lZGdlPSRyKGMuc2l0ZSxsLnNpdGUsbnVsbCx1KSxZcihjKSxZcihs%0AKX1mdW5jdGlvbiBEcihuKXtmb3IodmFyIHQsZSxyLHUsaT1uLngsbz1uLnksYT1Y%0AYy5fO2E7KWlmKHI9UHIoYSxvKS1pLHI+RWEpYT1hLkw7ZWxzZXtpZih1PWktVXIo%0AYSxvKSwhKHU+RWEpKXtyPi1FYT8odD1hLlAsZT1hKTp1Pi1FYT8odD1hLGU9YS5O%0AKTp0PWU9YTticmVha31pZighYS5SKXt0PWE7YnJlYWt9YT1hLlJ9dmFyIGM9VHIo%0Abik7aWYoWGMuaW5zZXJ0KHQsYyksdHx8ZSl7aWYodD09PWUpcmV0dXJuIElyKHQp%0ALGU9VHIodC5zaXRlKSxYYy5pbnNlcnQoYyxlKSxjLmVkZ2U9ZS5lZGdlPSRyKHQu%0Ac2l0ZSxjLnNpdGUpLFlyKHQpLFlyKGUpLHZvaWQgMDtpZighZSlyZXR1cm4gYy5l%0AZGdlPSRyKHQuc2l0ZSxjLnNpdGUpLHZvaWQgMDtJcih0KSxJcihlKTt2YXIgbD10%0ALnNpdGUscz1sLngsZj1sLnksaD1uLngtcyxnPW4ueS1mLHA9ZS5zaXRlLHY9cC54%0ALXMsZD1wLnktZixtPTIqKGgqZC1nKnYpLHk9aCpoK2cqZyx4PXYqditkKmQsTT17%0AeDooZCp5LWcqeCkvbStzLHk6KGgqeC12KnkpL20rZn07V3IoZS5lZGdlLGwscCxN%0AKSxjLmVkZ2U9JHIobCxuLG51bGwsTSksZS5lZGdlPSRyKG4scCxudWxsLE0pLFly%0AKHQpLFlyKGUpfX1mdW5jdGlvbiBQcihuLHQpe3ZhciBlPW4uc2l0ZSxyPWUueCx1%0APWUueSxpPXUtdDtpZighaSlyZXR1cm4gcjt2YXIgbz1uLlA7aWYoIW8pcmV0dXJu%0ALTEvMDtlPW8uc2l0ZTt2YXIgYT1lLngsYz1lLnksbD1jLXQ7aWYoIWwpcmV0dXJu%0AIGE7dmFyIHM9YS1yLGY9MS9pLTEvbCxoPXMvbDtyZXR1cm4gZj8oLWgrTWF0aC5z%0AcXJ0KGgqaC0yKmYqKHMqcy8oLTIqbCktYytsLzIrdS1pLzIpKSkvZityOihyK2Ep%0ALzJ9ZnVuY3Rpb24gVXIobix0KXt2YXIgZT1uLk47aWYoZSlyZXR1cm4gUHIoZSx0%0AKTt2YXIgcj1uLnNpdGU7cmV0dXJuIHIueT09PXQ/ci54OjEvMH1mdW5jdGlvbiBq%0AcihuKXt0aGlzLnNpdGU9bix0aGlzLmVkZ2VzPVtdfWZ1bmN0aW9uIEhyKG4pe2Zv%0Acih2YXIgdCxlLHIsdSxpLG8sYSxjLGwscyxmPW5bMF1bMF0saD1uWzFdWzBdLGc9%0AblswXVsxXSxwPW5bMV1bMV0sdj1WYyxkPXYubGVuZ3RoO2QtLTspaWYoaT12W2Rd%0ALGkmJmkucHJlcGFyZSgpKWZvcihhPWkuZWRnZXMsYz1hLmxlbmd0aCxvPTA7Yz5v%0AOylzPWFbb10uZW5kKCkscj1zLngsdT1zLnksbD1hWysrbyVjXS5zdGFydCgpLHQ9%0AbC54LGU9bC55LChpYShyLXQpPkVhfHxpYSh1LWUpPkVhKSYmKGEuc3BsaWNlKG8s%0AMCxuZXcgSnIoQnIoaS5zaXRlLHMsaWEoci1mKTxFYSYmcC11PkVhP3t4OmYseTpp%0AYSh0LWYpPEVhP2U6cH06aWEodS1wKTxFYSYmaC1yPkVhP3t4OmlhKGUtcCk8RWE/%0AdDpoLHk6cH06aWEoci1oKTxFYSYmdS1nPkVhP3t4OmgseTppYSh0LWgpPEVhP2U6%0AZ306aWEodS1nKTxFYSYmci1mPkVhP3t4OmlhKGUtZyk8RWE/dDpmLHk6Z306bnVs%0AbCksaS5zaXRlLG51bGwpKSwrK2MpfWZ1bmN0aW9uIEZyKG4sdCl7cmV0dXJuIHQu%0AYW5nbGUtbi5hbmdsZX1mdW5jdGlvbiBPcigpe0tyKHRoaXMpLHRoaXMueD10aGlz%0ALnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBZcihu%0AKXt2YXIgdD1uLlAsZT1uLk47aWYodCYmZSl7dmFyIHI9dC5zaXRlLHU9bi5zaXRl%0ALGk9ZS5zaXRlO2lmKHIhPT1pKXt2YXIgbz11LngsYT11LnksYz1yLngtbyxsPXIu%0AeS1hLHM9aS54LW8sZj1pLnktYSxoPTIqKGMqZi1sKnMpO2lmKCEoaD49LUFhKSl7%0AdmFyIGc9YypjK2wqbCxwPXMqcytmKmYsdj0oZipnLWwqcCkvaCxkPShjKnAtcypn%0AKS9oLGY9ZCthLG09SmMucG9wKCl8fG5ldyBPcjttLmFyYz1uLG0uc2l0ZT11LG0u%0AeD12K28sbS55PWYrTWF0aC5zcXJ0KHYqditkKmQpLG0uY3k9ZixuLmNpcmNsZT1t%0AO2Zvcih2YXIgeT1udWxsLHg9QmMuXzt4OylpZihtLnk8eC55fHxtLnk9PT14Lnkm%0AJm0ueDw9eC54KXtpZigheC5MKXt5PXguUDticmVha314PXguTH1lbHNle2lmKCF4%0ALlIpe3k9eDticmVha314PXguUn1CYy5pbnNlcnQoeSxtKSx5fHwoJGM9bSl9fX19%0AZnVuY3Rpb24gSXIobil7dmFyIHQ9bi5jaXJjbGU7dCYmKHQuUHx8KCRjPXQuTiks%0AQmMucmVtb3ZlKHQpLEpjLnB1c2godCksS3IodCksbi5jaXJjbGU9bnVsbCl9ZnVu%0AY3Rpb24gWnIobil7Zm9yKHZhciB0LGU9WmMscj1VZShuWzBdWzBdLG5bMF1bMV0s%0AblsxXVswXSxuWzFdWzFdKSx1PWUubGVuZ3RoO3UtLTspdD1lW3VdLCghVnIodCxu%0AKXx8IXIodCl8fGlhKHQuYS54LXQuYi54KTxFYSYmaWEodC5hLnktdC5iLnkpPEVh%0AKSYmKHQuYT10LmI9bnVsbCxlLnNwbGljZSh1LDEpKX1mdW5jdGlvbiBWcihuLHQp%0Ae3ZhciBlPW4uYjtpZihlKXJldHVybiEwO3ZhciByLHUsaT1uLmEsbz10WzBdWzBd%0ALGE9dFsxXVswXSxjPXRbMF1bMV0sbD10WzFdWzFdLHM9bi5sLGY9bi5yLGg9cy54%0ALGc9cy55LHA9Zi54LHY9Zi55LGQ9KGgrcCkvMixtPShnK3YpLzI7aWYodj09PWcp%0Ae2lmKG8+ZHx8ZD49YSlyZXR1cm47aWYoaD5wKXtpZihpKXtpZihpLnk+PWwpcmV0%0AdXJufWVsc2UgaT17eDpkLHk6Y307ZT17eDpkLHk6bH19ZWxzZXtpZihpKXtpZihp%0ALnk8YylyZXR1cm59ZWxzZSBpPXt4OmQseTpsfTtlPXt4OmQseTpjfX19ZWxzZSBp%0AZihyPShoLXApLyh2LWcpLHU9bS1yKmQsLTE+cnx8cj4xKWlmKGg+cCl7aWYoaSl7%0AaWYoaS55Pj1sKXJldHVybn1lbHNlIGk9e3g6KGMtdSkvcix5OmN9O2U9e3g6KGwt%0AdSkvcix5Omx9fWVsc2V7aWYoaSl7aWYoaS55PGMpcmV0dXJufWVsc2UgaT17eDoo%0AbC11KS9yLHk6bH07ZT17eDooYy11KS9yLHk6Y319ZWxzZSBpZih2Pmcpe2lmKGkp%0Ae2lmKGkueD49YSlyZXR1cm59ZWxzZSBpPXt4Om8seTpyKm8rdX07ZT17eDphLHk6%0AciphK3V9fWVsc2V7aWYoaSl7aWYoaS54PG8pcmV0dXJufWVsc2UgaT17eDphLHk6%0AciphK3V9O2U9e3g6byx5OnIqbyt1fX1yZXR1cm4gbi5hPWksbi5iPWUsITB9ZnVu%0AY3Rpb24gWHIobix0KXt0aGlzLmw9bix0aGlzLnI9dCx0aGlzLmE9dGhpcy5iPW51%0AbGx9ZnVuY3Rpb24gJHIobix0LGUscil7dmFyIHU9bmV3IFhyKG4sdCk7cmV0dXJu%0AIFpjLnB1c2godSksZSYmV3IodSxuLHQsZSksciYmV3IodSx0LG4sciksVmNbbi5p%0AXS5lZGdlcy5wdXNoKG5ldyBKcih1LG4sdCkpLFZjW3QuaV0uZWRnZXMucHVzaChu%0AZXcgSnIodSx0LG4pKSx1fWZ1bmN0aW9uIEJyKG4sdCxlKXt2YXIgcj1uZXcgWHIo%0AbixudWxsKTtyZXR1cm4gci5hPXQsci5iPWUsWmMucHVzaChyKSxyfWZ1bmN0aW9u%0AIFdyKG4sdCxlLHIpe24uYXx8bi5iP24ubD09PWU/bi5iPXI6bi5hPXI6KG4uYT1y%0ALG4ubD10LG4ucj1lKX1mdW5jdGlvbiBKcihuLHQsZSl7dmFyIHI9bi5hLHU9bi5i%0AO3RoaXMuZWRnZT1uLHRoaXMuc2l0ZT10LHRoaXMuYW5nbGU9ZT9NYXRoLmF0YW4y%0AKGUueS10LnksZS54LXQueCk6bi5sPT09dD9NYXRoLmF0YW4yKHUueC1yLngsci55%0ALXUueSk6TWF0aC5hdGFuMihyLngtdS54LHUueS1yLnkpfWZ1bmN0aW9uIEdyKCl7%0AdGhpcy5fPW51bGx9ZnVuY3Rpb24gS3Iobil7bi5VPW4uQz1uLkw9bi5SPW4uUD1u%0ALk49bnVsbH1mdW5jdGlvbiBRcihuLHQpe3ZhciBlPXQscj10LlIsdT1lLlU7dT91%0ALkw9PT1lP3UuTD1yOnUuUj1yOm4uXz1yLHIuVT11LGUuVT1yLGUuUj1yLkwsZS5S%0AJiYoZS5SLlU9ZSksci5MPWV9ZnVuY3Rpb24gbnUobix0KXt2YXIgZT10LHI9dC5M%0ALHU9ZS5VO3U/dS5MPT09ZT91Lkw9cjp1LlI9cjpuLl89cixyLlU9dSxlLlU9cixl%0ALkw9ci5SLGUuTCYmKGUuTC5VPWUpLHIuUj1lfWZ1bmN0aW9uIHR1KG4pe2Zvcig7%0Abi5MOyluPW4uTDtyZXR1cm4gbn1mdW5jdGlvbiBldShuLHQpe3ZhciBlLHIsdSxp%0APW4uc29ydChydSkucG9wKCk7Zm9yKFpjPVtdLFZjPW5ldyBBcnJheShuLmxlbmd0%0AaCksWGM9bmV3IEdyLEJjPW5ldyBHcjs7KWlmKHU9JGMsaSYmKCF1fHxpLnk8dS55%0AfHxpLnk9PT11LnkmJmkueDx1LngpKShpLnghPT1lfHxpLnkhPT1yKSYmKFZjW2ku%0AaV09bmV3IGpyKGkpLERyKGkpLGU9aS54LHI9aS55KSxpPW4ucG9wKCk7ZWxzZXtp%0AZighdSlicmVhaztScih1LmFyYyl9dCYmKFpyKHQpLEhyKHQpKTt2YXIgbz17Y2Vs%0AbHM6VmMsZWRnZXM6WmN9O3JldHVybiBYYz1CYz1aYz1WYz1udWxsLG99ZnVuY3Rp%0Ab24gcnUobix0KXtyZXR1cm4gdC55LW4ueXx8dC54LW4ueH1mdW5jdGlvbiB1dShu%0ALHQsZSl7cmV0dXJuKG4ueC1lLngpKih0Lnktbi55KS0obi54LXQueCkqKGUueS1u%0ALnkpfWZ1bmN0aW9uIGl1KG4pe3JldHVybiBuLnh9ZnVuY3Rpb24gb3Uobil7cmV0%0AdXJuIG4ueX1mdW5jdGlvbiBhdSgpe3JldHVybntsZWFmOiEwLG5vZGVzOltdLHBv%0AaW50Om51bGwseDpudWxsLHk6bnVsbH19ZnVuY3Rpb24gY3Uobix0LGUscix1LGkp%0Ae2lmKCFuKHQsZSxyLHUsaSkpe3ZhciBvPS41KihlK3UpLGE9LjUqKHIraSksYz10%0ALm5vZGVzO2NbMF0mJmN1KG4sY1swXSxlLHIsbyxhKSxjWzFdJiZjdShuLGNbMV0s%0AbyxyLHUsYSksY1syXSYmY3UobixjWzJdLGUsYSxvLGkpLGNbM10mJmN1KG4sY1sz%0AXSxvLGEsdSxpKX19ZnVuY3Rpb24gbHUobix0KXtuPVZvLnJnYihuKSx0PVZvLnJn%0AYih0KTt2YXIgZT1uLnIscj1uLmcsdT1uLmIsaT10LnItZSxvPXQuZy1yLGE9dC5i%0ALXU7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiIjIitkdChNYXRoLnJvdW5kKGUr%0AaSpuKSkrZHQoTWF0aC5yb3VuZChyK28qbikpK2R0KE1hdGgucm91bmQodSthKm4p%0AKX19ZnVuY3Rpb24gc3Uobix0KXt2YXIgZSxyPXt9LHU9e307Zm9yKGUgaW4gbill%0AIGluIHQ/cltlXT1ndShuW2VdLHRbZV0pOnVbZV09bltlXTtmb3IoZSBpbiB0KWUg%0AaW4gbnx8KHVbZV09dFtlXSk7cmV0dXJuIGZ1bmN0aW9uKG4pe2ZvcihlIGluIHIp%0AdVtlXT1yW2VdKG4pO3JldHVybiB1fX1mdW5jdGlvbiBmdShuLHQpe3JldHVybiB0%0ALT1uPStuLGZ1bmN0aW9uKGUpe3JldHVybiBuK3QqZX19ZnVuY3Rpb24gaHUobix0%0AKXt2YXIgZSxyLHUsaT1LYy5sYXN0SW5kZXg9UWMubGFzdEluZGV4PTAsbz0tMSxh%0APVtdLGM9W107Zm9yKG4rPSIiLHQrPSIiOyhlPUtjLmV4ZWMobikpJiYocj1RYy5l%0AeGVjKHQpKTspKHU9ci5pbmRleCk+aSYmKHU9dC5zbGljZShpLHUpLGFbb10/YVtv%0AXSs9dTphWysrb109dSksKGU9ZVswXSk9PT0ocj1yWzBdKT9hW29dP2Fbb10rPXI6%0AYVsrK29dPXI6KGFbKytvXT1udWxsLGMucHVzaCh7aTpvLHg6ZnUoZSxyKX0pKSxp%0APVFjLmxhc3RJbmRleDtyZXR1cm4gaTx0Lmxlbmd0aCYmKHU9dC5zbGljZShpKSxh%0AW29dP2Fbb10rPXU6YVsrK29dPXUpLGEubGVuZ3RoPDI/Y1swXT8odD1jWzBdLngs%0AZnVuY3Rpb24obil7cmV0dXJuIHQobikrIiJ9KTpmdW5jdGlvbigpe3JldHVybiB0%0AfToodD1jLmxlbmd0aCxmdW5jdGlvbihuKXtmb3IodmFyIGUscj0wO3Q+cjsrK3Ip%0AYVsoZT1jW3JdKS5pXT1lLngobik7cmV0dXJuIGEuam9pbigiIil9KX1mdW5jdGlv%0AbiBndShuLHQpe2Zvcih2YXIgZSxyPVZvLmludGVycG9sYXRvcnMubGVuZ3RoOy0t%0Acj49MCYmIShlPVZvLmludGVycG9sYXRvcnNbcl0obix0KSk7KTtyZXR1cm4gZX1m%0AdW5jdGlvbiBwdShuLHQpe3ZhciBlLHI9W10sdT1bXSxpPW4ubGVuZ3RoLG89dC5s%0AZW5ndGgsYT1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0aCk7Zm9yKGU9MDthPmU7%0AKytlKXIucHVzaChndShuW2VdLHRbZV0pKTtmb3IoO2k+ZTsrK2UpdVtlXT1uW2Vd%0AO2Zvcig7bz5lOysrZSl1W2VdPXRbZV07cmV0dXJuIGZ1bmN0aW9uKG4pe2Zvcihl%0APTA7YT5lOysrZSl1W2VdPXJbZV0obik7cmV0dXJuIHV9fWZ1bmN0aW9uIHZ1KG4p%0Ae3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMD49dD8wOnQ+PTE/MTpuKHQpfX1m%0AdW5jdGlvbiBkdShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDEtbigxLXQp%0AfX1mdW5jdGlvbiBtdShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLjUqKC41%0APnQ/bigyKnQpOjItbigyLTIqdCkpfX1mdW5jdGlvbiB5dShuKXtyZXR1cm4gbipu%0AfWZ1bmN0aW9uIHh1KG4pe3JldHVybiBuKm4qbn1mdW5jdGlvbiBNdShuKXtpZigw%0APj1uKXJldHVybiAwO2lmKG4+PTEpcmV0dXJuIDE7dmFyIHQ9bipuLGU9dCpuO3Jl%0AdHVybiA0KiguNT5uP2U6Myoobi10KStlLS43NSl9ZnVuY3Rpb24gX3Uobil7cmV0%0AdXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LG4pfX1mdW5jdGlvbiBi%0AdShuKXtyZXR1cm4gMS1NYXRoLmNvcyhuKmthKX1mdW5jdGlvbiB3dShuKXtyZXR1%0Acm4gTWF0aC5wb3coMiwxMCoobi0xKSl9ZnVuY3Rpb24gU3Uobil7cmV0dXJuIDEt%0ATWF0aC5zcXJ0KDEtbipuKX1mdW5jdGlvbiBrdShuLHQpe3ZhciBlO3JldHVybiBh%0Acmd1bWVudHMubGVuZ3RoPDImJih0PS40NSksYXJndW1lbnRzLmxlbmd0aD9lPXQv%0AU2EqTWF0aC5hc2luKDEvbik6KG49MSxlPXQvNCksZnVuY3Rpb24ocil7cmV0dXJu%0AIDErbipNYXRoLnBvdygyLC0xMCpyKSpNYXRoLnNpbigoci1lKSpTYS90KX19ZnVu%0AY3Rpb24gRXUobil7cmV0dXJuIG58fChuPTEuNzAxNTgpLGZ1bmN0aW9uKHQpe3Jl%0AdHVybiB0KnQqKChuKzEpKnQtbil9fWZ1bmN0aW9uIEF1KG4pe3JldHVybiAxLzIu%0ANzU+bj83LjU2MjUqbipuOjIvMi43NT5uPzcuNTYyNSoobi09MS41LzIuNzUpKm4r%0ALjc1OjIuNS8yLjc1Pm4/Ny41NjI1KihuLT0yLjI1LzIuNzUpKm4rLjkzNzU6Ny41%0ANjI1KihuLT0yLjYyNS8yLjc1KSpuKy45ODQzNzV9ZnVuY3Rpb24gQ3Uobix0KXtu%0APVZvLmhjbChuKSx0PVZvLmhjbCh0KTt2YXIgZT1uLmgscj1uLmMsdT1uLmwsaT10%0ALmgtZSxvPXQuYy1yLGE9dC5sLXU7cmV0dXJuIGlzTmFOKG8pJiYobz0wLHI9aXNO%0AYU4ocik/dC5jOnIpLGlzTmFOKGkpPyhpPTAsZT1pc05hTihlKT90Lmg6ZSk6aT4x%0AODA/aS09MzYwOi0xODA+aSYmKGkrPTM2MCksZnVuY3Rpb24obil7cmV0dXJuIG90%0AKGUraSpuLHIrbypuLHUrYSpuKSsiIn19ZnVuY3Rpb24gTnUobix0KXtuPVZvLmhz%0AbChuKSx0PVZvLmhzbCh0KTt2YXIgZT1uLmgscj1uLnMsdT1uLmwsaT10LmgtZSxv%0APXQucy1yLGE9dC5sLXU7cmV0dXJuIGlzTmFOKG8pJiYobz0wLHI9aXNOYU4ocik/%0AdC5zOnIpLGlzTmFOKGkpPyhpPTAsZT1pc05hTihlKT90Lmg6ZSk6aT4xODA/aS09%0AMzYwOi0xODA+aSYmKGkrPTM2MCksZnVuY3Rpb24obil7cmV0dXJuIHV0KGUraSpu%0ALHIrbypuLHUrYSpuKSsiIn19ZnVuY3Rpb24genUobix0KXtuPVZvLmxhYihuKSx0%0APVZvLmxhYih0KTt2YXIgZT1uLmwscj1uLmEsdT1uLmIsaT10LmwtZSxvPXQuYS1y%0ALGE9dC5iLXU7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBjdChlK2kqbixyK28q%0Abix1K2EqbikrIiJ9fWZ1bmN0aW9uIEx1KG4sdCl7cmV0dXJuIHQtPW4sZnVuY3Rp%0Ab24oZSl7cmV0dXJuIE1hdGgucm91bmQobit0KmUpfX1mdW5jdGlvbiBUdShuKXt2%0AYXIgdD1bbi5hLG4uYl0sZT1bbi5jLG4uZF0scj1SdSh0KSx1PXF1KHQsZSksaT1S%0AdShEdShlLHQsLXUpKXx8MDt0WzBdKmVbMV08ZVswXSp0WzFdJiYodFswXSo9LTEs%0AdFsxXSo9LTEscio9LTEsdSo9LTEpLHRoaXMucm90YXRlPShyP01hdGguYXRhbjIo%0AdFsxXSx0WzBdKTpNYXRoLmF0YW4yKC1lWzBdLGVbMV0pKSpOYSx0aGlzLnRyYW5z%0AbGF0ZT1bbi5lLG4uZl0sdGhpcy5zY2FsZT1bcixpXSx0aGlzLnNrZXc9aT9NYXRo%0ALmF0YW4yKHUsaSkqTmE6MH1mdW5jdGlvbiBxdShuLHQpe3JldHVybiBuWzBdKnRb%0AMF0rblsxXSp0WzFdfWZ1bmN0aW9uIFJ1KG4pe3ZhciB0PU1hdGguc3FydChxdShu%0ALG4pKTtyZXR1cm4gdCYmKG5bMF0vPXQsblsxXS89dCksdH1mdW5jdGlvbiBEdShu%0ALHQsZSl7cmV0dXJuIG5bMF0rPWUqdFswXSxuWzFdKz1lKnRbMV0sbn1mdW5jdGlv%0AbiBQdShuLHQpe3ZhciBlLHI9W10sdT1bXSxpPVZvLnRyYW5zZm9ybShuKSxvPVZv%0ALnRyYW5zZm9ybSh0KSxhPWkudHJhbnNsYXRlLGM9by50cmFuc2xhdGUsbD1pLnJv%0AdGF0ZSxzPW8ucm90YXRlLGY9aS5za2V3LGg9by5za2V3LGc9aS5zY2FsZSxwPW8u%0Ac2NhbGU7cmV0dXJuIGFbMF0hPWNbMF18fGFbMV0hPWNbMV0/KHIucHVzaCgidHJh%0AbnNsYXRlKCIsbnVsbCwiLCIsbnVsbCwiKSIpLHUucHVzaCh7aToxLHg6ZnUoYVsw%0AXSxjWzBdKX0se2k6Myx4OmZ1KGFbMV0sY1sxXSl9KSk6Y1swXXx8Y1sxXT9yLnB1%0Ac2goInRyYW5zbGF0ZSgiK2MrIikiKTpyLnB1c2goIiIpLGwhPXM/KGwtcz4xODA/%0Acys9MzYwOnMtbD4xODAmJihsKz0zNjApLHUucHVzaCh7aTpyLnB1c2goci5wb3Ao%0AKSsicm90YXRlKCIsbnVsbCwiKSIpLTIseDpmdShsLHMpfSkpOnMmJnIucHVzaChy%0ALnBvcCgpKyJyb3RhdGUoIitzKyIpIiksZiE9aD91LnB1c2goe2k6ci5wdXNoKHIu%0AcG9wKCkrInNrZXdYKCIsbnVsbCwiKSIpLTIseDpmdShmLGgpfSk6aCYmci5wdXNo%0AKHIucG9wKCkrInNrZXdYKCIraCsiKSIpLGdbMF0hPXBbMF18fGdbMV0hPXBbMV0/%0AKGU9ci5wdXNoKHIucG9wKCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpLHUu%0AcHVzaCh7aTplLTQseDpmdShnWzBdLHBbMF0pfSx7aTplLTIseDpmdShnWzFdLHBb%0AMV0pfSkpOigxIT1wWzBdfHwxIT1wWzFdKSYmci5wdXNoKHIucG9wKCkrInNjYWxl%0AKCIrcCsiKSIpLGU9dS5sZW5ndGgsZnVuY3Rpb24obil7Zm9yKHZhciB0LGk9LTE7%0AKytpPGU7KXJbKHQ9dVtpXSkuaV09dC54KG4pO3JldHVybiByLmpvaW4oIiIpfX1m%0AdW5jdGlvbiBVdShuLHQpe3JldHVybiB0PXQtKG49K24pPzEvKHQtbik6MCxmdW5j%0AdGlvbihlKXtyZXR1cm4oZS1uKSp0fX1mdW5jdGlvbiBqdShuLHQpe3JldHVybiB0%0APXQtKG49K24pPzEvKHQtbik6MCxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgo%0AMCxNYXRoLm1pbigxLChlLW4pKnQpKX19ZnVuY3Rpb24gSHUobil7Zm9yKHZhciB0%0APW4uc291cmNlLGU9bi50YXJnZXQscj1PdSh0LGUpLHU9W3RdO3QhPT1yOyl0PXQu%0AcGFyZW50LHUucHVzaCh0KTtmb3IodmFyIGk9dS5sZW5ndGg7ZSE9PXI7KXUuc3Bs%0AaWNlKGksMCxlKSxlPWUucGFyZW50O3JldHVybiB1fWZ1bmN0aW9uIEZ1KG4pe2Zv%0Acih2YXIgdD1bXSxlPW4ucGFyZW50O251bGwhPWU7KXQucHVzaChuKSxuPWUsZT1l%0ALnBhcmVudDtyZXR1cm4gdC5wdXNoKG4pLHR9ZnVuY3Rpb24gT3Uobix0KXtpZihu%0APT09dClyZXR1cm4gbjtmb3IodmFyIGU9RnUobikscj1GdSh0KSx1PWUucG9wKCks%0AaT1yLnBvcCgpLG89bnVsbDt1PT09aTspbz11LHU9ZS5wb3AoKSxpPXIucG9wKCk7%0AcmV0dXJuIG99ZnVuY3Rpb24gWXUobil7bi5maXhlZHw9Mn1mdW5jdGlvbiBJdShu%0AKXtuLmZpeGVkJj0tN31mdW5jdGlvbiBadShuKXtuLmZpeGVkfD00LG4ucHg9bi54%0ALG4ucHk9bi55fWZ1bmN0aW9uIFZ1KG4pe24uZml4ZWQmPS01fWZ1bmN0aW9uIFh1%0AKG4sdCxlKXt2YXIgcj0wLHU9MDtpZihuLmNoYXJnZT0wLCFuLmxlYWYpZm9yKHZh%0AciBpLG89bi5ub2RlcyxhPW8ubGVuZ3RoLGM9LTE7KytjPGE7KWk9b1tjXSxudWxs%0AIT1pJiYoWHUoaSx0LGUpLG4uY2hhcmdlKz1pLmNoYXJnZSxyKz1pLmNoYXJnZSpp%0ALmN4LHUrPWkuY2hhcmdlKmkuY3kpO2lmKG4ucG9pbnQpe24ubGVhZnx8KG4ucG9p%0AbnQueCs9TWF0aC5yYW5kb20oKS0uNSxuLnBvaW50LnkrPU1hdGgucmFuZG9tKCkt%0ALjUpO3ZhciBsPXQqZVtuLnBvaW50LmluZGV4XTtuLmNoYXJnZSs9bi5wb2ludENo%0AYXJnZT1sLHIrPWwqbi5wb2ludC54LHUrPWwqbi5wb2ludC55fW4uY3g9ci9uLmNo%0AYXJnZSxuLmN5PXUvbi5jaGFyZ2V9ZnVuY3Rpb24gJHUobix0KXtyZXR1cm4gVm8u%0AcmViaW5kKG4sdCwic29ydCIsImNoaWxkcmVuIiwidmFsdWUiKSxuLm5vZGVzPW4s%0Abi5saW5rcz1RdSxufWZ1bmN0aW9uIEJ1KG4sdCl7Zm9yKHZhciBlPVtuXTtudWxs%0AIT0obj1lLnBvcCgpKTspaWYodChuKSwodT1uLmNoaWxkcmVuKSYmKHI9dS5sZW5n%0AdGgpKWZvcih2YXIgcix1Oy0tcj49MDspZS5wdXNoKHVbcl0pfWZ1bmN0aW9uIFd1%0AKG4sdCl7Zm9yKHZhciBlPVtuXSxyPVtdO251bGwhPShuPWUucG9wKCkpOylpZihy%0ALnB1c2gobiksKGk9bi5jaGlsZHJlbikmJih1PWkubGVuZ3RoKSlmb3IodmFyIHUs%0AaSxvPS0xOysrbzx1OyllLnB1c2goaVtvXSk7Zm9yKDtudWxsIT0obj1yLnBvcCgp%0AKTspdChuKX1mdW5jdGlvbiBKdShuKXtyZXR1cm4gbi5jaGlsZHJlbn1mdW5jdGlv%0AbiBHdShuKXtyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBLdShuLHQpe3JldHVybiB0%0ALnZhbHVlLW4udmFsdWV9ZnVuY3Rpb24gUXUobil7cmV0dXJuIFZvLm1lcmdlKG4u%0AbWFwKGZ1bmN0aW9uKG4pe3JldHVybihuLmNoaWxkcmVufHxbXSkubWFwKGZ1bmN0%0AaW9uKHQpe3JldHVybntzb3VyY2U6bix0YXJnZXQ6dH19KX0pKX1mdW5jdGlvbiBu%0AaShuKXtyZXR1cm4gbi54fWZ1bmN0aW9uIHRpKG4pe3JldHVybiBuLnl9ZnVuY3Rp%0Ab24gZWkobix0LGUpe24ueTA9dCxuLnk9ZX1mdW5jdGlvbiByaShuKXtyZXR1cm4g%0AVm8ucmFuZ2Uobi5sZW5ndGgpfWZ1bmN0aW9uIHVpKG4pe2Zvcih2YXIgdD0tMSxl%0APW5bMF0ubGVuZ3RoLHI9W107Kyt0PGU7KXJbdF09MDtyZXR1cm4gcn1mdW5jdGlv%0AbiBpaShuKXtmb3IodmFyIHQsZT0xLHI9MCx1PW5bMF1bMV0saT1uLmxlbmd0aDtp%0APmU7KytlKSh0PW5bZV1bMV0pPnUmJihyPWUsdT10KTtyZXR1cm4gcn1mdW5jdGlv%0AbiBvaShuKXtyZXR1cm4gbi5yZWR1Y2UoYWksMCl9ZnVuY3Rpb24gYWkobix0KXty%0AZXR1cm4gbit0WzFdfWZ1bmN0aW9uIGNpKG4sdCl7cmV0dXJuIGxpKG4sTWF0aC5j%0AZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMisxKSl9ZnVuY3Rpb24gbGko%0Abix0KXtmb3IodmFyIGU9LTEscj0rblswXSx1PShuWzFdLXIpL3QsaT1bXTsrK2U8%0APXQ7KWlbZV09dSplK3I7cmV0dXJuIGl9ZnVuY3Rpb24gc2kobil7cmV0dXJuW1Zv%0ALm1pbihuKSxWby5tYXgobildfWZ1bmN0aW9uIGZpKG4sdCl7cmV0dXJuIG4udmFs%0AdWUtdC52YWx1ZX1mdW5jdGlvbiBoaShuLHQpe3ZhciBlPW4uX3BhY2tfbmV4dDtu%0ALl9wYWNrX25leHQ9dCx0Ll9wYWNrX3ByZXY9bix0Ll9wYWNrX25leHQ9ZSxlLl9w%0AYWNrX3ByZXY9dH1mdW5jdGlvbiBnaShuLHQpe24uX3BhY2tfbmV4dD10LHQuX3Bh%0AY2tfcHJldj1ufWZ1bmN0aW9uIHBpKG4sdCl7dmFyIGU9dC54LW4ueCxyPXQueS1u%0ALnksdT1uLnIrdC5yO3JldHVybi45OTkqdSp1PmUqZStyKnJ9ZnVuY3Rpb24gdmko%0Abil7ZnVuY3Rpb24gdChuKXtzPU1hdGgubWluKG4ueC1uLnIscyksZj1NYXRoLm1h%0AeChuLngrbi5yLGYpLGg9TWF0aC5taW4obi55LW4ucixoKSxnPU1hdGgubWF4KG4u%0AeStuLnIsZyl9aWYoKGU9bi5jaGlsZHJlbikmJihsPWUubGVuZ3RoKSl7dmFyIGUs%0Acix1LGksbyxhLGMsbCxzPTEvMCxmPS0xLzAsaD0xLzAsZz0tMS8wO2lmKGUuZm9y%0ARWFjaChkaSkscj1lWzBdLHIueD0tci5yLHIueT0wLHQociksbD4xJiYodT1lWzFd%0ALHUueD11LnIsdS55PTAsdCh1KSxsPjIpKWZvcihpPWVbMl0seGkocix1LGkpLHQo%0AaSksaGkocixpKSxyLl9wYWNrX3ByZXY9aSxoaShpLHUpLHU9ci5fcGFja19uZXh0%0ALG89MztsPm87bysrKXt4aShyLHUsaT1lW29dKTt2YXIgcD0wLHY9MSxkPTE7Zm9y%0AKGE9dS5fcGFja19uZXh0O2EhPT11O2E9YS5fcGFja19uZXh0LHYrKylpZihwaShh%0ALGkpKXtwPTE7YnJlYWt9aWYoMT09cClmb3IoYz1yLl9wYWNrX3ByZXY7YyE9PWEu%0AX3BhY2tfcHJldiYmIXBpKGMsaSk7Yz1jLl9wYWNrX3ByZXYsZCsrKTtwPyhkPnZ8%0AfHY9PWQmJnUucjxyLnI/Z2kocix1PWEpOmdpKHI9Yyx1KSxvLS0pOihoaShyLGkp%0ALHU9aSx0KGkpKX12YXIgbT0ocytmKS8yLHk9KGgrZykvMix4PTA7Zm9yKG89MDts%0APm87bysrKWk9ZVtvXSxpLngtPW0saS55LT15LHg9TWF0aC5tYXgoeCxpLnIrTWF0%0AaC5zcXJ0KGkueCppLngraS55KmkueSkpO24ucj14LGUuZm9yRWFjaChtaSl9fWZ1%0AbmN0aW9uIGRpKG4pe24uX3BhY2tfbmV4dD1uLl9wYWNrX3ByZXY9bn1mdW5jdGlv%0AbiBtaShuKXtkZWxldGUgbi5fcGFja19uZXh0LGRlbGV0ZSBuLl9wYWNrX3ByZXZ9%0AZnVuY3Rpb24geWkobix0LGUscil7dmFyIHU9bi5jaGlsZHJlbjtpZihuLng9dCs9%0AcipuLngsbi55PWUrPXIqbi55LG4ucio9cix1KWZvcih2YXIgaT0tMSxvPXUubGVu%0AZ3RoOysraTxvOyl5aSh1W2ldLHQsZSxyKX1mdW5jdGlvbiB4aShuLHQsZSl7dmFy%0AIHI9bi5yK2Uucix1PXQueC1uLngsaT10Lnktbi55O2lmKHImJih1fHxpKSl7dmFy%0AIG89dC5yK2UucixhPXUqdStpKmk7byo9byxyKj1yO3ZhciBjPS41KyhyLW8pLygy%0AKmEpLGw9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihyK2EpLShyLT1hKSpyLW8q%0AbykpLygyKmEpO2UueD1uLngrYyp1K2wqaSxlLnk9bi55K2MqaS1sKnV9ZWxzZSBl%0ALng9bi54K3IsZS55PW4ueX1mdW5jdGlvbiBNaShuLHQpe3JldHVybiBuLnBhcmVu%0AdD09dC5wYXJlbnQ/MToyfWZ1bmN0aW9uIF9pKG4pe3ZhciB0PW4uY2hpbGRyZW47%0AcmV0dXJuIHQubGVuZ3RoP3RbMF06bi50fWZ1bmN0aW9uIGJpKG4pe3ZhciB0LGU9%0Abi5jaGlsZHJlbjtyZXR1cm4odD1lLmxlbmd0aCk/ZVt0LTFdOm4udH1mdW5jdGlv%0AbiB3aShuLHQsZSl7dmFyIHI9ZS8odC5pLW4uaSk7dC5jLT1yLHQucys9ZSxuLmMr%0APXIsdC56Kz1lLHQubSs9ZX1mdW5jdGlvbiBTaShuKXtmb3IodmFyIHQsZT0wLHI9%0AMCx1PW4uY2hpbGRyZW4saT11Lmxlbmd0aDstLWk+PTA7KXQ9dVtpXSx0LnorPWUs%0AdC5tKz1lLGUrPXQucysocis9dC5jKX1mdW5jdGlvbiBraShuLHQsZSl7cmV0dXJu%0AIG4uYS5wYXJlbnQ9PT10LnBhcmVudD9uLmE6ZX1mdW5jdGlvbiBFaShuKXtyZXR1%0Acm4gMStWby5tYXgobixmdW5jdGlvbihuKXtyZXR1cm4gbi55fSl9ZnVuY3Rpb24g%0AQWkobil7cmV0dXJuIG4ucmVkdWNlKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4rdC54%0AfSwwKS9uLmxlbmd0aH1mdW5jdGlvbiBDaShuKXt2YXIgdD1uLmNoaWxkcmVuO3Jl%0AdHVybiB0JiZ0Lmxlbmd0aD9DaSh0WzBdKTpufWZ1bmN0aW9uIE5pKG4pe3ZhciB0%0ALGU9bi5jaGlsZHJlbjtyZXR1cm4gZSYmKHQ9ZS5sZW5ndGgpP05pKGVbdC0xXSk6%0Abn1mdW5jdGlvbiB6aShuKXtyZXR1cm57eDpuLngseTpuLnksZHg6bi5keCxkeTpu%0ALmR5fX1mdW5jdGlvbiBMaShuLHQpe3ZhciBlPW4ueCt0WzNdLHI9bi55K3RbMF0s%0AdT1uLmR4LXRbMV0tdFszXSxpPW4uZHktdFswXS10WzJdO3JldHVybiAwPnUmJihl%0AKz11LzIsdT0wKSwwPmkmJihyKz1pLzIsaT0wKSx7eDplLHk6cixkeDp1LGR5Oml9%0AfWZ1bmN0aW9uIFRpKG4pe3ZhciB0PW5bMF0sZT1uW24ubGVuZ3RoLTFdO3JldHVy%0AbiBlPnQ/W3QsZV06W2UsdF19ZnVuY3Rpb24gcWkobil7cmV0dXJuIG4ucmFuZ2VF%0AeHRlbnQ/bi5yYW5nZUV4dGVudCgpOlRpKG4ucmFuZ2UoKSl9ZnVuY3Rpb24gUmko%0Abix0LGUscil7dmFyIHU9ZShuWzBdLG5bMV0pLGk9cih0WzBdLHRbMV0pO3JldHVy%0AbiBmdW5jdGlvbihuKXtyZXR1cm4gaSh1KG4pKX19ZnVuY3Rpb24gRGkobix0KXt2%0AYXIgZSxyPTAsdT1uLmxlbmd0aC0xLGk9bltyXSxvPW5bdV07cmV0dXJuIGk+byYm%0AKGU9cixyPXUsdT1lLGU9aSxpPW8sbz1lKSxuW3JdPXQuZmxvb3IoaSksblt1XT10%0ALmNlaWwobyksbn1mdW5jdGlvbiBQaShuKXtyZXR1cm4gbj97Zmxvb3I6ZnVuY3Rp%0Ab24odCl7cmV0dXJuIE1hdGguZmxvb3IodC9uKSpufSxjZWlsOmZ1bmN0aW9uKHQp%0Ae3JldHVybiBNYXRoLmNlaWwodC9uKSpufX06c2x9ZnVuY3Rpb24gVWkobix0LGUs%0Acil7dmFyIHU9W10saT1bXSxvPTAsYT1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0%0AaCktMTtmb3IoblthXTxuWzBdJiYobj1uLnNsaWNlKCkucmV2ZXJzZSgpLHQ9dC5z%0AbGljZSgpLnJldmVyc2UoKSk7KytvPD1hOyl1LnB1c2goZShuW28tMV0sbltvXSkp%0ALGkucHVzaChyKHRbby0xXSx0W29dKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBl%0APVZvLmJpc2VjdChuLHQsMSxhKS0xO3JldHVybiBpW2VdKHVbZV0odCkpfX1mdW5j%0AdGlvbiBqaShuLHQsZSxyKXtmdW5jdGlvbiB1KCl7dmFyIHU9TWF0aC5taW4obi5s%0AZW5ndGgsdC5sZW5ndGgpPjI/VWk6UmksYz1yP2p1OlV1O3JldHVybiBvPXUobix0%0ALGMsZSksYT11KHQsbixjLGd1KSxpfWZ1bmN0aW9uIGkobil7cmV0dXJuIG8obil9%0AdmFyIG8sYTtyZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24obil7cmV0dXJuIGEobil9%0ALGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhu%0APXQubWFwKE51bWJlciksdSgpKTpufSxpLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sdSgpKTp0fSxpLnJhbmdlUm91bmQ9ZnVu%0AY3Rpb24obil7cmV0dXJuIGkucmFuZ2UobikuaW50ZXJwb2xhdGUoTHUpfSxpLmNs%0AYW1wPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sdSgp%0AKTpyfSxpLmludGVycG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu%0AbGVuZ3RoPyhlPW4sdSgpKTplfSxpLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBZ%0AaShuLHQpfSxpLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSWkobix0%0ALGUpfSxpLm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIEZpKG4sdCksdSgpfSxpLmNv%0AcHk9ZnVuY3Rpb24oKXtyZXR1cm4gamkobix0LGUscil9LHUoKX1mdW5jdGlvbiBI%0AaShuLHQpe3JldHVybiBWby5yZWJpbmQobix0LCJyYW5nZSIsInJhbmdlUm91bmQi%0ALCJpbnRlcnBvbGF0ZSIsImNsYW1wIil9ZnVuY3Rpb24gRmkobix0KXtyZXR1cm4g%0ARGkobixQaShPaShuLHQpWzJdKSl9ZnVuY3Rpb24gT2kobix0KXtudWxsPT10JiYo%0AdD0xMCk7dmFyIGU9VGkobikscj1lWzFdLWVbMF0sdT1NYXRoLnBvdygxMCxNYXRo%0ALmZsb29yKE1hdGgubG9nKHIvdCkvTWF0aC5MTjEwKSksaT10L3IqdTtyZXR1cm4u%0AMTU+PWk/dSo9MTA6LjM1Pj1pP3UqPTU6Ljc1Pj1pJiYodSo9MiksZVswXT1NYXRo%0ALmNlaWwoZVswXS91KSp1LGVbMV09TWF0aC5mbG9vcihlWzFdL3UpKnUrLjUqdSxl%0AWzJdPXUsZX1mdW5jdGlvbiBZaShuLHQpe3JldHVybiBWby5yYW5nZS5hcHBseShW%0AbyxPaShuLHQpKX1mdW5jdGlvbiBJaShuLHQsZSl7dmFyIHI9T2kobix0KTtpZihl%0AKXt2YXIgdT1LYS5leGVjKGUpO2lmKHUuc2hpZnQoKSwicyI9PT11WzhdKXt2YXIg%0AaT1Wby5mb3JtYXRQcmVmaXgoTWF0aC5tYXgoaWEoclswXSksaWEoclsxXSkpKTty%0AZXR1cm4gdVs3XXx8KHVbN109Ii4iK1ppKGkuc2NhbGUoclsyXSkpKSx1WzhdPSJm%0AIixlPVZvLmZvcm1hdCh1LmpvaW4oIiIpKSxmdW5jdGlvbihuKXtyZXR1cm4gZShp%0ALnNjYWxlKG4pKStpLnN5bWJvbH19dVs3XXx8KHVbN109Ii4iK1ZpKHVbOF0scikp%0ALGU9dS5qb2luKCIiKX1lbHNlIGU9IiwuIitaaShyWzJdKSsiZiI7cmV0dXJuIFZv%0ALmZvcm1hdChlKX1mdW5jdGlvbiBaaShuKXtyZXR1cm4tTWF0aC5mbG9vcihNYXRo%0ALmxvZyhuKS9NYXRoLkxOMTArLjAxKX1mdW5jdGlvbiBWaShuLHQpe3ZhciBlPVpp%0AKHRbMl0pO3JldHVybiBuIGluIGZsP01hdGguYWJzKGUtWmkoTWF0aC5tYXgoaWEo%0AdFswXSksaWEodFsxXSkpKSkrICsoImUiIT09bik6ZS0yKigiJSI9PT1uKX1mdW5j%0AdGlvbiBYaShuLHQsZSxyKXtmdW5jdGlvbiB1KG4pe3JldHVybihlP01hdGgubG9n%0AKDA+bj8wOm4pOi1NYXRoLmxvZyhuPjA/MDotbikpL01hdGgubG9nKHQpfWZ1bmN0%0AaW9uIGkobil7cmV0dXJuIGU/TWF0aC5wb3codCxuKTotTWF0aC5wb3codCwtbil9%0AZnVuY3Rpb24gbyh0KXtyZXR1cm4gbih1KHQpKX1yZXR1cm4gby5pbnZlcnQ9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGkobi5pbnZlcnQodCkpfSxvLmRvbWFpbj1mdW5jdGlv%0Abih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10WzBdPj0wLG4uZG9tYWlu%0AKChyPXQubWFwKE51bWJlcikpLm1hcCh1KSksbyk6cn0sby5iYXNlPWZ1bmN0aW9u%0AKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlLG4uZG9tYWluKHIubWFw%0AKHUpKSxvKTp0fSxvLm5pY2U9ZnVuY3Rpb24oKXt2YXIgdD1EaShyLm1hcCh1KSxl%0AP01hdGg6Z2wpO3JldHVybiBuLmRvbWFpbih0KSxyPXQubWFwKGkpLG99LG8udGlj%0Aa3M9ZnVuY3Rpb24oKXt2YXIgbj1UaShyKSxvPVtdLGE9blswXSxjPW5bMV0sbD1N%0AYXRoLmZsb29yKHUoYSkpLHM9TWF0aC5jZWlsKHUoYykpLGY9dCUxPzI6dDtpZihp%0Ac0Zpbml0ZShzLWwpKXtpZihlKXtmb3IoO3M+bDtsKyspZm9yKHZhciBoPTE7Zj5o%0AO2grKylvLnB1c2goaShsKSpoKTtvLnB1c2goaShsKSl9ZWxzZSBmb3Ioby5wdXNo%0AKGkobCkpO2wrKzxzOylmb3IodmFyIGg9Zi0xO2g+MDtoLS0pby5wdXNoKGkobCkq%0AaCk7Zm9yKGw9MDtvW2xdPGE7bCsrKTtmb3Iocz1vLmxlbmd0aDtvW3MtMV0+Yztz%0ALS0pO289by5zbGljZShsLHMpfXJldHVybiBvfSxvLnRpY2tGb3JtYXQ9ZnVuY3Rp%0Ab24obix0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gaGw7YXJndW1lbnRz%0ALmxlbmd0aDwyP3Q9aGw6ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVZvLmZvcm1h%0AdCh0KSk7dmFyIHIsYT1NYXRoLm1heCguMSxuL28udGlja3MoKS5sZW5ndGgpLGM9%0AZT8ocj0xZS0xMixNYXRoLmNlaWwpOihyPS0xZS0xMixNYXRoLmZsb29yKTtyZXR1%0Acm4gZnVuY3Rpb24obil7cmV0dXJuIG4vaShjKHUobikrcikpPD1hP3Qobik6IiJ9%0AfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gWGkobi5jb3B5KCksdCxlLHIpfSxI%0AaShvLG4pfWZ1bmN0aW9uICRpKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBu%0AKHUodCkpfXZhciB1PUJpKHQpLGk9QmkoMS90KTtyZXR1cm4gci5pbnZlcnQ9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGkobi5pbnZlcnQodCkpfSxyLmRvbWFpbj1mdW5jdGlv%0Abih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obi5kb21haW4oKGU9dC5tYXAo%0ATnVtYmVyKSkubWFwKHUpKSxyKTplfSxyLnRpY2tzPWZ1bmN0aW9uKG4pe3JldHVy%0AbiBZaShlLG4pfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gSWko%0AZSxuLHQpfSxyLm5pY2U9ZnVuY3Rpb24obil7cmV0dXJuIHIuZG9tYWluKEZpKGUs%0AbikpfSxyLmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyh1PUJpKHQ9byksaT1CaSgxL3QpLG4uZG9tYWluKGUubWFwKHUpKSxyKTp0%0AfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gJGkobi5jb3B5KCksdCxlKX0sSGko%0AcixuKX1mdW5jdGlvbiBCaShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDA+%0AdD8tTWF0aC5wb3coLXQsbik6TWF0aC5wb3codCxuKX19ZnVuY3Rpb24gV2kobix0%0AKXtmdW5jdGlvbiBlKGUpe3JldHVybiBpWygodS5nZXQoZSl8fCgicmFuZ2UiPT09%0AdC50P3Uuc2V0KGUsbi5wdXNoKGUpKTowLzApKS0xKSVpLmxlbmd0aF19ZnVuY3Rp%0Ab24gcih0LGUpe3JldHVybiBWby5yYW5nZShuLmxlbmd0aCkubWFwKGZ1bmN0aW9u%0AKG4pe3JldHVybiB0K2Uqbn0pfXZhciB1LGksYTtyZXR1cm4gZS5kb21haW49ZnVu%0AY3Rpb24ocil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG47bj1bXSx1PW5l%0AdyBvO2Zvcih2YXIgaSxhPS0xLGM9ci5sZW5ndGg7KythPGM7KXUuaGFzKGk9clth%0AXSl8fHUuc2V0KGksbi5wdXNoKGkpKTtyZXR1cm4gZVt0LnRdLmFwcGx5KGUsdC5h%0AKX0sZS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o%0AaT1uLGE9MCx0PXt0OiJyYW5nZSIsYTphcmd1bWVudHN9LGUpOml9LGUucmFuZ2VQ%0Ab2ludHM9ZnVuY3Rpb24odSxvKXthcmd1bWVudHMubGVuZ3RoPDImJihvPTApO3Zh%0AciBjPXVbMF0sbD11WzFdLHM9KGwtYykvKE1hdGgubWF4KDEsbi5sZW5ndGgtMSkr%0Abyk7cmV0dXJuIGk9cihuLmxlbmd0aDwyPyhjK2wpLzI6YytzKm8vMixzKSxhPTAs%0AdD17dDoicmFuZ2VQb2ludHMiLGE6YXJndW1lbnRzfSxlfSxlLnJhbmdlQmFuZHM9%0AZnVuY3Rpb24odSxvLGMpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKG89MCksYXJndW1l%0AbnRzLmxlbmd0aDwzJiYoYz1vKTt2YXIgbD11WzFdPHVbMF0scz11W2wtMF0sZj11%0AWzEtbF0saD0oZi1zKS8obi5sZW5ndGgtbysyKmMpO3JldHVybiBpPXIocytoKmMs%0AaCksbCYmaS5yZXZlcnNlKCksYT1oKigxLW8pLHQ9e3Q6InJhbmdlQmFuZHMiLGE6%0AYXJndW1lbnRzfSxlfSxlLnJhbmdlUm91bmRCYW5kcz1mdW5jdGlvbih1LG8sYyl7%0AYXJndW1lbnRzLmxlbmd0aDwyJiYobz0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihj%0APW8pO3ZhciBsPXVbMV08dVswXSxzPXVbbC0wXSxmPXVbMS1sXSxoPU1hdGguZmxv%0Ab3IoKGYtcykvKG4ubGVuZ3RoLW8rMipjKSksZz1mLXMtKG4ubGVuZ3RoLW8pKmg7%0AcmV0dXJuIGk9cihzK01hdGgucm91bmQoZy8yKSxoKSxsJiZpLnJldmVyc2UoKSxh%0APU1hdGgucm91bmQoaCooMS1vKSksdD17dDoicmFuZ2VSb3VuZEJhbmRzIixhOmFy%0AZ3VtZW50c30sZX0sZS5yYW5nZUJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZS5y%0AYW5nZUV4dGVudD1mdW5jdGlvbigpe3JldHVybiBUaSh0LmFbMF0pfSxlLmNvcHk9%0AZnVuY3Rpb24oKXtyZXR1cm4gV2kobix0KX0sZS5kb21haW4obil9ZnVuY3Rpb24g%0ASmkoZSxyKXtmdW5jdGlvbiB1KCl7dmFyIG49MCx0PXIubGVuZ3RoO2ZvcihvPVtd%0AOysrbjx0OylvW24tMV09Vm8ucXVhbnRpbGUoZSxuL3QpO3JldHVybiBpfWZ1bmN0%0AaW9uIGkobil7cmV0dXJuIGlzTmFOKG49K24pP3ZvaWQgMDpyW1ZvLmJpc2VjdChv%0ALG4pXX12YXIgbztyZXR1cm4gaS5kb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIGFy%0AZ3VtZW50cy5sZW5ndGg/KGU9ci5maWx0ZXIodCkuc29ydChuKSx1KCkpOmV9LGku%0AcmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bix1%0AKCkpOnJ9LGkucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGkuaW52ZXJ0%0ARXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBuPXIuaW5kZXhPZihuKSwwPm4/WzAv%0AMCwwLzBdOltuPjA/b1tuLTFdOmVbMF0sbjxvLmxlbmd0aD9vW25dOmVbZS5sZW5n%0AdGgtMV1dfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSmkoZSxyKX0sdSgpfWZ1%0AbmN0aW9uIEdpKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlW01hdGgubWF4%0AKDAsTWF0aC5taW4obyxNYXRoLmZsb29yKGkqKHQtbikpKSldfWZ1bmN0aW9uIHUo%0AKXtyZXR1cm4gaT1lLmxlbmd0aC8odC1uKSxvPWUubGVuZ3RoLTEscn12YXIgaSxv%0AO3JldHVybiByLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl%0Abmd0aD8obj0rZVswXSx0PStlW2UubGVuZ3RoLTFdLHUoKSk6W24sdF19LHIucmFu%0AZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix1KCkp%0AOmV9LHIuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0PWUuaW5kZXhP%0AZih0KSx0PTA+dD8wLzA6dC9pK24sW3QsdCsxL2ldfSxyLmNvcHk9ZnVuY3Rpb24o%0AKXtyZXR1cm4gR2kobix0LGUpfSx1KCl9ZnVuY3Rpb24gS2kobix0KXtmdW5jdGlv%0AbiBlKGUpe3JldHVybiBlPj1lP3RbVm8uYmlzZWN0KG4sZSldOnZvaWQgMH1yZXR1%0Acm4gZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/%0AKG49dCxlKTpufSxlLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu%0AbGVuZ3RoPyh0PW4sZSk6dH0sZS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oZSl7cmV0%0AdXJuIGU9dC5pbmRleE9mKGUpLFtuW2UtMV0sbltlXV19LGUuY29weT1mdW5jdGlv%0Abigpe3JldHVybiBLaShuLHQpfSxlfWZ1bmN0aW9uIFFpKG4pe2Z1bmN0aW9uIHQo%0Abil7cmV0dXJuK259cmV0dXJuIHQuaW52ZXJ0PXQsdC5kb21haW49dC5yYW5nZT1m%0AdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLm1hcCh0KSx0%0AKTpufSx0LnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBZaShuLHQpfSx0LnRpY2tG%0Ab3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSWkobix0LGUpfSx0LmNvcHk9ZnVu%0AY3Rpb24oKXtyZXR1cm4gUWkobil9LHR9ZnVuY3Rpb24gbm8obil7cmV0dXJuIG4u%0AaW5uZXJSYWRpdXN9ZnVuY3Rpb24gdG8obil7cmV0dXJuIG4ub3V0ZXJSYWRpdXN9%0AZnVuY3Rpb24gZW8obil7cmV0dXJuIG4uc3RhcnRBbmdsZX1mdW5jdGlvbiBybyhu%0AKXtyZXR1cm4gbi5lbmRBbmdsZX1mdW5jdGlvbiB1byhuKXtmdW5jdGlvbiB0KHQp%0Ae2Z1bmN0aW9uIG8oKXtsLnB1c2goIk0iLGkobihzKSxhKSl9Zm9yKHZhciBjLGw9%0AW10scz1bXSxmPS0xLGg9dC5sZW5ndGgsZz1idChlKSxwPWJ0KHIpOysrZjxoOyl1%0ALmNhbGwodGhpcyxjPXRbZl0sZik/cy5wdXNoKFsrZy5jYWxsKHRoaXMsYyxmKSwr%0AcC5jYWxsKHRoaXMsYyxmKV0pOnMubGVuZ3RoJiYobygpLHM9W10pO3JldHVybiBz%0ALmxlbmd0aCYmbygpLGwubGVuZ3RoP2wuam9pbigiIik6bnVsbH12YXIgZT1Tcixy%0APWtyLHU9U2UsaT1pbyxvPWkua2V5LGE9Ljc7cmV0dXJuIHQueD1mdW5jdGlvbihu%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHQpOmV9LHQueT1mdW5jdGlv%0AbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHQpOnJ9LHQuZGVmaW5l%0AZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1uLHQpOnV9%0ALHQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIG4/aT1uOihpPU1sLmdldChuKXx8aW8p%0ALmtleSx0KTpvfSx0LnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50%0Acy5sZW5ndGg/KGE9bix0KTphfSx0fWZ1bmN0aW9uIGlvKG4pe3JldHVybiBuLmpv%0AaW4oIkwiKX1mdW5jdGlvbiBvbyhuKXtyZXR1cm4gaW8obikrIloifWZ1bmN0aW9u%0AIGFvKG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgscj1uWzBdLHU9W3JbMF0sIiwi%0ALHJbMV1dOysrdDxlOyl1LnB1c2goIkgiLChyWzBdKyhyPW5bdF0pWzBdKS8yLCJW%0AIixyWzFdKTtyZXR1cm4gZT4xJiZ1LnB1c2goIkgiLHJbMF0pLHUuam9pbigiIil9%0AZnVuY3Rpb24gY28obil7Zm9yKHZhciB0PTAsZT1uLmxlbmd0aCxyPW5bMF0sdT1b%0AclswXSwiLCIsclsxXV07Kyt0PGU7KXUucHVzaCgiViIsKHI9blt0XSlbMV0sIkgi%0ALHJbMF0pO3JldHVybiB1LmpvaW4oIiIpfWZ1bmN0aW9uIGxvKG4pe2Zvcih2YXIg%0AdD0wLGU9bi5sZW5ndGgscj1uWzBdLHU9W3JbMF0sIiwiLHJbMV1dOysrdDxlOyl1%0ALnB1c2goIkgiLChyPW5bdF0pWzBdLCJWIixyWzFdKTtyZXR1cm4gdS5qb2luKCIi%0AKX1mdW5jdGlvbiBzbyhuLHQpe3JldHVybiBuLmxlbmd0aDw0P2lvKG4pOm5bMV0r%0AZ28obi5zbGljZSgxLG4ubGVuZ3RoLTEpLHBvKG4sdCkpfWZ1bmN0aW9uIGZvKG4s%0AdCl7cmV0dXJuIG4ubGVuZ3RoPDM/aW8obik6blswXStnbygobi5wdXNoKG5bMF0p%0ALG4pLHBvKFtuW24ubGVuZ3RoLTJdXS5jb25jYXQobixbblsxXV0pLHQpKX1mdW5j%0AdGlvbiBobyhuLHQpe3JldHVybiBuLmxlbmd0aDwzP2lvKG4pOm5bMF0rZ28obixw%0AbyhuLHQpKX1mdW5jdGlvbiBnbyhuLHQpe2lmKHQubGVuZ3RoPDF8fG4ubGVuZ3Ro%0AIT10Lmxlbmd0aCYmbi5sZW5ndGghPXQubGVuZ3RoKzIpcmV0dXJuIGlvKG4pO3Zh%0AciBlPW4ubGVuZ3RoIT10Lmxlbmd0aCxyPSIiLHU9blswXSxpPW5bMV0sbz10WzBd%0ALGE9byxjPTE7aWYoZSYmKHIrPSJRIisoaVswXS0yKm9bMF0vMykrIiwiKyhpWzFd%0ALTIqb1sxXS8zKSsiLCIraVswXSsiLCIraVsxXSx1PW5bMV0sYz0yKSx0Lmxlbmd0%0AaD4xKXthPXRbMV0saT1uW2NdLGMrKyxyKz0iQyIrKHVbMF0rb1swXSkrIiwiKyh1%0AWzFdK29bMV0pKyIsIisoaVswXS1hWzBdKSsiLCIrKGlbMV0tYVsxXSkrIiwiK2lb%0AMF0rIiwiK2lbMV07Zm9yKHZhciBsPTI7bDx0Lmxlbmd0aDtsKyssYysrKWk9bltj%0AXSxhPXRbbF0scis9IlMiKyhpWzBdLWFbMF0pKyIsIisoaVsxXS1hWzFdKSsiLCIr%0AaVswXSsiLCIraVsxXX1pZihlKXt2YXIgcz1uW2NdO3IrPSJRIisoaVswXSsyKmFb%0AMF0vMykrIiwiKyhpWzFdKzIqYVsxXS8zKSsiLCIrc1swXSsiLCIrc1sxXX1yZXR1%0Acm4gcn1mdW5jdGlvbiBwbyhuLHQpe2Zvcih2YXIgZSxyPVtdLHU9KDEtdCkvMixp%0APW5bMF0sbz1uWzFdLGE9MSxjPW4ubGVuZ3RoOysrYTxjOyllPWksaT1vLG89blth%0AXSxyLnB1c2goW3UqKG9bMF0tZVswXSksdSoob1sxXS1lWzFdKV0pO3JldHVybiBy%0AfWZ1bmN0aW9uIHZvKG4pe2lmKG4ubGVuZ3RoPDMpcmV0dXJuIGlvKG4pO3ZhciB0%0APTEsZT1uLmxlbmd0aCxyPW5bMF0sdT1yWzBdLGk9clsxXSxvPVt1LHUsdSwocj1u%0AWzFdKVswXV0sYT1baSxpLGksclsxXV0sYz1bdSwiLCIsaSwiTCIsTW8od2wsbyks%0AIiwiLE1vKHdsLGEpXTtmb3Iobi5wdXNoKG5bZS0xXSk7Kyt0PD1lOylyPW5bdF0s%0Aby5zaGlmdCgpLG8ucHVzaChyWzBdKSxhLnNoaWZ0KCksYS5wdXNoKHJbMV0pLF9v%0AKGMsbyxhKTtyZXR1cm4gbi5wb3AoKSxjLnB1c2goIkwiLHIpLGMuam9pbigiIil9%0AZnVuY3Rpb24gbW8obil7aWYobi5sZW5ndGg8NClyZXR1cm4gaW8obik7Zm9yKHZh%0AciB0LGU9W10scj0tMSx1PW4ubGVuZ3RoLGk9WzBdLG89WzBdOysrcjwzOyl0PW5b%0Acl0saS5wdXNoKHRbMF0pLG8ucHVzaCh0WzFdKTtmb3IoZS5wdXNoKE1vKHdsLGkp%0AKyIsIitNbyh3bCxvKSksLS1yOysrcjx1Oyl0PW5bcl0saS5zaGlmdCgpLGkucHVz%0AaCh0WzBdKSxvLnNoaWZ0KCksby5wdXNoKHRbMV0pLF9vKGUsaSxvKTtyZXR1cm4g%0AZS5qb2luKCIiKX1mdW5jdGlvbiB5byhuKXtmb3IodmFyIHQsZSxyPS0xLHU9bi5s%0AZW5ndGgsaT11KzQsbz1bXSxhPVtdOysrcjw0OyllPW5bciV1XSxvLnB1c2goZVsw%0AXSksYS5wdXNoKGVbMV0pO2Zvcih0PVtNbyh3bCxvKSwiLCIsTW8od2wsYSldLC0t%0AcjsrK3I8aTspZT1uW3IldV0sby5zaGlmdCgpLG8ucHVzaChlWzBdKSxhLnNoaWZ0%0AKCksYS5wdXNoKGVbMV0pLF9vKHQsbyxhKTtyZXR1cm4gdC5qb2luKCIiKX1mdW5j%0AdGlvbiB4byhuLHQpe3ZhciBlPW4ubGVuZ3RoLTE7aWYoZSlmb3IodmFyIHIsdSxp%0APW5bMF1bMF0sbz1uWzBdWzFdLGE9bltlXVswXS1pLGM9bltlXVsxXS1vLGw9LTE7%0AKytsPD1lOylyPW5bbF0sdT1sL2UsclswXT10KnJbMF0rKDEtdCkqKGkrdSphKSxy%0AWzFdPXQqclsxXSsoMS10KSoobyt1KmMpO3JldHVybiB2byhuKX1mdW5jdGlvbiBN%0AbyhuLHQpe3JldHVybiBuWzBdKnRbMF0rblsxXSp0WzFdK25bMl0qdFsyXStuWzNd%0AKnRbM119ZnVuY3Rpb24gX28obix0LGUpe24ucHVzaCgiQyIsTW8oX2wsdCksIiwi%0ALE1vKF9sLGUpLCIsIixNbyhibCx0KSwiLCIsTW8oYmwsZSksIiwiLE1vKHdsLHQp%0ALCIsIixNbyh3bCxlKSl9ZnVuY3Rpb24gYm8obix0KXtyZXR1cm4odFsxXS1uWzFd%0AKS8odFswXS1uWzBdKX1mdW5jdGlvbiB3byhuKXtmb3IodmFyIHQ9MCxlPW4ubGVu%0AZ3RoLTEscj1bXSx1PW5bMF0saT1uWzFdLG89clswXT1ibyh1LGkpOysrdDxlOyly%0AW3RdPShvKyhvPWJvKHU9aSxpPW5bdCsxXSkpKS8yO3JldHVybiByW3RdPW8scn1m%0AdW5jdGlvbiBTbyhuKXtmb3IodmFyIHQsZSxyLHUsaT1bXSxvPXdvKG4pLGE9LTEs%0AYz1uLmxlbmd0aC0xOysrYTxjOyl0PWJvKG5bYV0sblthKzFdKSxpYSh0KTxFYT9v%0AW2FdPW9bYSsxXT0wOihlPW9bYV0vdCxyPW9bYSsxXS90LHU9ZSplK3Iqcix1Pjkm%0AJih1PTMqdC9NYXRoLnNxcnQodSksb1thXT11KmUsb1thKzFdPXUqcikpO2Zvcihh%0APS0xOysrYTw9YzspdT0obltNYXRoLm1pbihjLGErMSldWzBdLW5bTWF0aC5tYXgo%0AMCxhLTEpXVswXSkvKDYqKDErb1thXSpvW2FdKSksaS5wdXNoKFt1fHwwLG9bYV0q%0AdXx8MF0pO3JldHVybiBpfWZ1bmN0aW9uIGtvKG4pe3JldHVybiBuLmxlbmd0aDwz%0AP2lvKG4pOm5bMF0rZ28obixTbyhuKSl9ZnVuY3Rpb24gRW8obil7Zm9yKHZhciB0%0ALGUscix1PS0xLGk9bi5sZW5ndGg7Kyt1PGk7KXQ9blt1XSxlPXRbMF0scj10WzFd%0AK3lsLHRbMF09ZSpNYXRoLmNvcyhyKSx0WzFdPWUqTWF0aC5zaW4ocik7cmV0dXJu%0AIG59ZnVuY3Rpb24gQW8obil7ZnVuY3Rpb24gdCh0KXtmdW5jdGlvbiBjKCl7di5w%0AdXNoKCJNIixhKG4obSksZikscyxsKG4oZC5yZXZlcnNlKCkpLGYpLCJaIil9Zm9y%0AKHZhciBoLGcscCx2PVtdLGQ9W10sbT1bXSx5PS0xLHg9dC5sZW5ndGgsTT1idChl%0AKSxfPWJ0KHUpLGI9ZT09PXI/ZnVuY3Rpb24oKXtyZXR1cm4gZ306YnQociksdz11%0APT09aT9mdW5jdGlvbigpe3JldHVybiBwfTpidChpKTsrK3k8eDspby5jYWxsKHRo%0AaXMsaD10W3ldLHkpPyhkLnB1c2goW2c9K00uY2FsbCh0aGlzLGgseSkscD0rXy5j%0AYWxsKHRoaXMsaCx5KV0pLG0ucHVzaChbK2IuY2FsbCh0aGlzLGgseSksK3cuY2Fs%0AbCh0aGlzLGgseSldKSk6ZC5sZW5ndGgmJihjKCksZD1bXSxtPVtdKTtyZXR1cm4g%0AZC5sZW5ndGgmJmMoKSx2Lmxlbmd0aD92LmpvaW4oIiIpOm51bGx9dmFyIGU9U3Is%0Acj1Tcix1PTAsaT1rcixvPVNlLGE9aW8sYz1hLmtleSxsPWEscz0iTCIsZj0uNzty%0AZXR1cm4gdC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhl%0APXI9bix0KTpyfSx0LngwPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyhlPW4sdCk6ZX0sdC54MT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRz%0ALmxlbmd0aD8ocj1uLHQpOnJ9LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1l%0AbnRzLmxlbmd0aD8odT1pPW4sdCk6aX0sdC55MD1mdW5jdGlvbihuKXtyZXR1cm4g%0AYXJndW1lbnRzLmxlbmd0aD8odT1uLHQpOnV9LHQueTE9ZnVuY3Rpb24obil7cmV0%0AdXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bix0KTppfSx0LmRlZmluZWQ9ZnVuY3Rp%0Ab24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bix0KTpvfSx0LmludGVy%0AcG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJm%0AdW5jdGlvbiI9PXR5cGVvZiBuP2E9bjooYT1NbC5nZXQobil8fGlvKS5rZXksbD1h%0ALnJldmVyc2V8fGEscz1hLmNsb3NlZD8iTSI6IkwiLHQpOmN9LHQudGVuc2lvbj1m%0AdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1uLHQpOmZ9LHR9%0AZnVuY3Rpb24gQ28obil7cmV0dXJuIG4ucmFkaXVzfWZ1bmN0aW9uIE5vKG4pe3Jl%0AdHVybltuLngsbi55XX1mdW5jdGlvbiB6byhuKXtyZXR1cm4gZnVuY3Rpb24oKXt2%0AYXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlPXRbMF0scj10WzFdK3lsO3Jl%0AdHVybltlKk1hdGguY29zKHIpLGUqTWF0aC5zaW4ocildfX1mdW5jdGlvbiBMbygp%0Ae3JldHVybiA2NH1mdW5jdGlvbiBUbygpe3JldHVybiJjaXJjbGUifWZ1bmN0aW9u%0AIHFvKG4pe3ZhciB0PU1hdGguc3FydChuL3dhKTtyZXR1cm4iTTAsIit0KyJBIit0%0AKyIsIit0KyIgMCAxLDEgMCwiKy10KyJBIit0KyIsIit0KyIgMCAxLDEgMCwiK3Qr%0AIloifWZ1bmN0aW9uIFJvKG4sdCl7cmV0dXJuIHNhKG4sTmwpLG4uaWQ9dCxufWZ1%0AbmN0aW9uIERvKG4sdCxlLHIpe3ZhciB1PW4uaWQ7cmV0dXJuIFAobiwiZnVuY3Rp%0Ab24iPT10eXBlb2YgZT9mdW5jdGlvbihuLGksbyl7bi5fX3RyYW5zaXRpb25fX1t1%0AXS50d2Vlbi5zZXQodCxyKGUuY2FsbChuLG4uX19kYXRhX18saSxvKSkpfTooZT1y%0AKGUpLGZ1bmN0aW9uKG4pe24uX190cmFuc2l0aW9uX19bdV0udHdlZW4uc2V0KHQs%0AZSl9KSl9ZnVuY3Rpb24gUG8obil7cmV0dXJuIG51bGw9PW4mJihuPSIiKSxmdW5j%0AdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gVW8obix0LGUscil7%0AdmFyIHU9bi5fX3RyYW5zaXRpb25fX3x8KG4uX190cmFuc2l0aW9uX189e2FjdGl2%0AZTowLGNvdW50OjB9KSxpPXVbZV07aWYoIWkpe3ZhciBhPXIudGltZTtpPXVbZV09%0Ae3R3ZWVuOm5ldyBvLHRpbWU6YSxlYXNlOnIuZWFzZSxkZWxheTpyLmRlbGF5LGR1%0AcmF0aW9uOnIuZHVyYXRpb259LCsrdS5jb3VudCxWby50aW1lcihmdW5jdGlvbihy%0AKXtmdW5jdGlvbiBvKHIpe3JldHVybiB1LmFjdGl2ZT5lP2woKToodS5hY3RpdmU9%0AZSxpLmV2ZW50JiZpLmV2ZW50LnN0YXJ0LmNhbGwobixzLHQpLGkudHdlZW4uZm9y%0ARWFjaChmdW5jdGlvbihlLHIpeyhyPXIuY2FsbChuLHMsdCkpJiZ2LnB1c2gocil9%0AKSxWby50aW1lcihmdW5jdGlvbigpe3JldHVybiBwLmM9YyhyfHwxKT9TZTpjLDF9%0ALDAsYSksdm9pZCAwKX1mdW5jdGlvbiBjKHIpe2lmKHUuYWN0aXZlIT09ZSlyZXR1%0Acm4gbCgpO2Zvcih2YXIgbz1yL2csYT1mKG8pLGM9di5sZW5ndGg7Yz4wOyl2Wy0t%0AY10uY2FsbChuLGEpO3JldHVybiBvPj0xPyhpLmV2ZW50JiZpLmV2ZW50LmVuZC5j%0AYWxsKG4scyx0KSxsKCkpOnZvaWQgMAp9ZnVuY3Rpb24gbCgpe3JldHVybi0tdS5j%0Ab3VudD9kZWxldGUgdVtlXTpkZWxldGUgbi5fX3RyYW5zaXRpb25fXywxfXZhciBz%0APW4uX19kYXRhX18sZj1pLmVhc2UsaD1pLmRlbGF5LGc9aS5kdXJhdGlvbixwPVdh%0ALHY9W107cmV0dXJuIHAudD1oK2Escj49aD9vKHItaCk6KHAuYz1vLHZvaWQgMCl9%0ALDAsYSl9fWZ1bmN0aW9uIGpvKG4sdCl7bi5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0%0AaW9uKG4pe3JldHVybiJ0cmFuc2xhdGUoIit0KG4pKyIsMCkifSl9ZnVuY3Rpb24g%0ASG8obix0KXtuLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24obil7cmV0dXJuInRy%0AYW5zbGF0ZSgwLCIrdChuKSsiKSJ9KX1mdW5jdGlvbiBGbyhuKXtyZXR1cm4gbi50%0Ab0lTT1N0cmluZygpfWZ1bmN0aW9uIE9vKG4sdCxlKXtmdW5jdGlvbiByKHQpe3Jl%0AdHVybiBuKHQpfWZ1bmN0aW9uIHUobixlKXt2YXIgcj1uWzFdLW5bMF0sdT1yL2Us%0AaT1Wby5iaXNlY3QoamwsdSk7cmV0dXJuIGk9PWpsLmxlbmd0aD9bdC55ZWFyLE9p%0AKG4ubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLzMxNTM2ZTZ9KSxlKVsyXV06aT90%0AW3UvamxbaS0xXTxqbFtpXS91P2ktMTppXTpbT2wsT2kobixlKVsyXV19cmV0dXJu%0AIHIuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBZbyhuLmludmVydCh0KSl9LHIu%0AZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuLmRv%0AbWFpbih0KSxyKTpuLmRvbWFpbigpLm1hcChZbyl9LHIubmljZT1mdW5jdGlvbihu%0ALHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIWlzTmFOKGUpJiYhbi5yYW5nZShlLFlv%0AKCtlKzEpLHQpLmxlbmd0aH12YXIgaT1yLmRvbWFpbigpLG89VGkoaSksYT1udWxs%0APT1uP3UobywxMCk6Im51bWJlciI9PXR5cGVvZiBuJiZ1KG8sbik7cmV0dXJuIGEm%0AJihuPWFbMF0sdD1hWzFdKSxyLmRvbWFpbihEaShpLHQ+MT97Zmxvb3I6ZnVuY3Rp%0Ab24odCl7Zm9yKDtlKHQ9bi5mbG9vcih0KSk7KXQ9WW8odC0xKTtyZXR1cm4gdH0s%0AY2VpbDpmdW5jdGlvbih0KXtmb3IoO2UodD1uLmNlaWwodCkpOyl0PVlvKCt0KzEp%0AO3JldHVybiB0fX06bikpfSxyLnRpY2tzPWZ1bmN0aW9uKG4sdCl7dmFyIGU9VGko%0Aci5kb21haW4oKSksaT1udWxsPT1uP3UoZSwxMCk6Im51bWJlciI9PXR5cGVvZiBu%0AP3UoZSxuKTohbi5yYW5nZSYmW3tyYW5nZTpufSx0XTtyZXR1cm4gaSYmKG49aVsw%0AXSx0PWlbMV0pLG4ucmFuZ2UoZVswXSxZbygrZVsxXSsxKSwxPnQ/MTp0KX0sci50%0AaWNrRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHIuY29weT1mdW5jdGlvbigp%0Ae3JldHVybiBPbyhuLmNvcHkoKSx0LGUpfSxIaShyLG4pfWZ1bmN0aW9uIFlvKG4p%0Ae3JldHVybiBuZXcgRGF0ZShuKX1mdW5jdGlvbiBJbyhuKXtyZXR1cm4gSlNPTi5w%0AYXJzZShuLnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gWm8obil7dmFyIHQ9Qm8uY3Jl%0AYXRlUmFuZ2UoKTtyZXR1cm4gdC5zZWxlY3ROb2RlKEJvLmJvZHkpLHQuY3JlYXRl%0AQ29udGV4dHVhbEZyYWdtZW50KG4ucmVzcG9uc2VUZXh0KX12YXIgVm89e3ZlcnNp%0Ab246IjMuNC4xMiJ9O0RhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1%0Acm4rbmV3IERhdGV9KTt2YXIgWG89W10uc2xpY2UsJG89ZnVuY3Rpb24obil7cmV0%0AdXJuIFhvLmNhbGwobil9LEJvPWRvY3VtZW50LFdvPUJvLmRvY3VtZW50RWxlbWVu%0AdCxKbz13aW5kb3c7dHJ5eyRvKFdvLmNoaWxkTm9kZXMpWzBdLm5vZGVUeXBlfWNh%0AdGNoKEdvKXskbz1mdW5jdGlvbihuKXtmb3IodmFyIHQ9bi5sZW5ndGgsZT1uZXcg%0AQXJyYXkodCk7dC0tOyllW3RdPW5bdF07cmV0dXJuIGV9fXRyeXtCby5jcmVhdGVF%0AbGVtZW50KCJkaXYiKS5zdHlsZS5zZXRQcm9wZXJ0eSgib3BhY2l0eSIsMCwiIil9%0AY2F0Y2goS28pe3ZhciBRbz1Kby5FbGVtZW50LnByb3RvdHlwZSxuYT1Rby5zZXRB%0AdHRyaWJ1dGUsdGE9UW8uc2V0QXR0cmlidXRlTlMsZWE9Sm8uQ1NTU3R5bGVEZWNs%0AYXJhdGlvbi5wcm90b3R5cGUscmE9ZWEuc2V0UHJvcGVydHk7UW8uc2V0QXR0cmli%0AdXRlPWZ1bmN0aW9uKG4sdCl7bmEuY2FsbCh0aGlzLG4sdCsiIil9LFFvLnNldEF0%0AdHJpYnV0ZU5TPWZ1bmN0aW9uKG4sdCxlKXt0YS5jYWxsKHRoaXMsbix0LGUrIiIp%0AfSxlYS5zZXRQcm9wZXJ0eT1mdW5jdGlvbihuLHQsZSl7cmEuY2FsbCh0aGlzLG4s%0AdCsiIixlKX19Vm8uYXNjZW5kaW5nPW4sVm8uZGVzY2VuZGluZz1mdW5jdGlvbihu%0ALHQpe3JldHVybiBuPnQ/LTE6dD5uPzE6dD49bj8wOjAvMH0sVm8ubWluPWZ1bmN0%0AaW9uKG4sdCl7dmFyIGUscix1PS0xLGk9bi5sZW5ndGg7aWYoMT09PWFyZ3VtZW50%0Acy5sZW5ndGgpe2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9blt1XSkmJmU+PWUpOyll%0APXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj1uW3VdKSYmZT5yJiYoZT1yKX1l%0AbHNle2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9dC5jYWxsKG4sblt1XSx1KSkmJmU+%0APWUpOyllPXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj10LmNhbGwobixuW3Vd%0ALHUpKSYmZT5yJiYoZT1yKX1yZXR1cm4gZX0sVm8ubWF4PWZ1bmN0aW9uKG4sdCl7%0AdmFyIGUscix1PS0xLGk9bi5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgp%0Ae2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9blt1XSkmJmU+PWUpOyllPXZvaWQgMDtm%0Ab3IoOysrdTxpOyludWxsIT0ocj1uW3VdKSYmcj5lJiYoZT1yKX1lbHNle2Zvcig7%0AKyt1PGkmJiEobnVsbCE9KGU9dC5jYWxsKG4sblt1XSx1KSkmJmU+PWUpOyllPXZv%0AaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj10LmNhbGwobixuW3VdLHUpKSYmcj5l%0AJiYoZT1yKX1yZXR1cm4gZX0sVm8uZXh0ZW50PWZ1bmN0aW9uKG4sdCl7dmFyIGUs%0Acix1LGk9LTEsbz1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9y%0AKDsrK2k8byYmIShudWxsIT0oZT11PW5baV0pJiZlPj1lKTspZT11PXZvaWQgMDtm%0Ab3IoOysraTxvOyludWxsIT0ocj1uW2ldKSYmKGU+ciYmKGU9cikscj51JiYodT1y%0AKSl9ZWxzZXtmb3IoOysraTxvJiYhKG51bGwhPShlPXU9dC5jYWxsKG4sbltpXSxp%0AKSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysraTxvOyludWxsIT0ocj10LmNhbGwo%0AbixuW2ldLGkpKSYmKGU+ciYmKGU9cikscj51JiYodT1yKSl9cmV0dXJuW2UsdV19%0ALFZvLnN1bT1mdW5jdGlvbihuLHQpe3ZhciBlLHI9MCx1PW4ubGVuZ3RoLGk9LTE7%0AaWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2k8dTspaXNOYU4oZT0rbltp%0AXSl8fChyKz1lKTtlbHNlIGZvcig7KytpPHU7KWlzTmFOKGU9K3QuY2FsbChuLG5b%0AaV0saSkpfHwocis9ZSk7cmV0dXJuIHJ9LFZvLm1lYW49ZnVuY3Rpb24obixlKXt2%0AYXIgcix1PTAsaT1uLmxlbmd0aCxvPS0xLGE9aTtpZigxPT09YXJndW1lbnRzLmxl%0Abmd0aClmb3IoOysrbzxpOyl0KHI9bltvXSk/dSs9cjotLWE7ZWxzZSBmb3IoOysr%0AbzxpOyl0KHI9ZS5jYWxsKG4sbltvXSxvKSk/dSs9cjotLWE7cmV0dXJuIGE/dS9h%0AOnZvaWQgMH0sVm8ucXVhbnRpbGU9ZnVuY3Rpb24obix0KXt2YXIgZT0obi5sZW5n%0AdGgtMSkqdCsxLHI9TWF0aC5mbG9vcihlKSx1PStuW3ItMV0saT1lLXI7cmV0dXJu%0AIGk/dStpKihuW3JdLXUpOnV9LFZvLm1lZGlhbj1mdW5jdGlvbihlLHIpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPjEmJihlPWUubWFwKHIpKSxlPWUuZmlsdGVyKHQp%0ALGUubGVuZ3RoP1ZvLnF1YW50aWxlKGUuc29ydChuKSwuNSk6dm9pZCAwfTt2YXIg%0AdWE9ZShuKTtWby5iaXNlY3RMZWZ0PXVhLmxlZnQsVm8uYmlzZWN0PVZvLmJpc2Vj%0AdFJpZ2h0PXVhLnJpZ2h0LFZvLmJpc2VjdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBl%0AKDE9PT10Lmxlbmd0aD9mdW5jdGlvbihlLHIpe3JldHVybiBuKHQoZSkscil9OnQp%0AfSxWby5zaHVmZmxlPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdCxlLHI9bi5sZW5ndGg7%0AcjspZT0wfE1hdGgucmFuZG9tKCkqci0tLHQ9bltyXSxuW3JdPW5bZV0sbltlXT10%0AO3JldHVybiBufSxWby5wZXJtdXRlPWZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPXQu%0AbGVuZ3RoLHI9bmV3IEFycmF5KGUpO2UtLTspcltlXT1uW3RbZV1dO3JldHVybiBy%0AfSxWby5wYWlycz1mdW5jdGlvbihuKXtmb3IodmFyIHQsZT0wLHI9bi5sZW5ndGgt%0AMSx1PW5bMF0saT1uZXcgQXJyYXkoMD5yPzA6cik7cj5lOylpW2VdPVt0PXUsdT1u%0AWysrZV1dO3JldHVybiBpfSxWby56aXA9ZnVuY3Rpb24oKXtpZighKHU9YXJndW1l%0AbnRzLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBuPS0xLHQ9Vm8ubWluKGFyZ3Vt%0AZW50cyxyKSxlPW5ldyBBcnJheSh0KTsrK248dDspZm9yKHZhciB1LGk9LTEsbz1l%0AW25dPW5ldyBBcnJheSh1KTsrK2k8dTspb1tpXT1hcmd1bWVudHNbaV1bbl07cmV0%0AdXJuIGV9LFZvLnRyYW5zcG9zZT1mdW5jdGlvbihuKXtyZXR1cm4gVm8uemlwLmFw%0AcGx5KFZvLG4pfSxWby5rZXlzPWZ1bmN0aW9uKG4pe3ZhciB0PVtdO2Zvcih2YXIg%0AZSBpbiBuKXQucHVzaChlKTtyZXR1cm4gdH0sVm8udmFsdWVzPWZ1bmN0aW9uKG4p%0Ae3ZhciB0PVtdO2Zvcih2YXIgZSBpbiBuKXQucHVzaChuW2VdKTtyZXR1cm4gdH0s%0AVm8uZW50cmllcz1mdW5jdGlvbihuKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gbil0%0ALnB1c2goe2tleTplLHZhbHVlOm5bZV19KTtyZXR1cm4gdH0sVm8ubWVyZ2U9ZnVu%0AY3Rpb24obil7Zm9yKHZhciB0LGUscix1PW4ubGVuZ3RoLGk9LTEsbz0wOysraTx1%0AOylvKz1uW2ldLmxlbmd0aDtmb3IoZT1uZXcgQXJyYXkobyk7LS11Pj0wOylmb3Io%0Acj1uW3VdLHQ9ci5sZW5ndGg7LS10Pj0wOyllWy0tb109clt0XTtyZXR1cm4gZX07%0AdmFyIGlhPU1hdGguYWJzO1ZvLnJhbmdlPWZ1bmN0aW9uKG4sdCxlKXtpZihhcmd1%0AbWVudHMubGVuZ3RoPDMmJihlPTEsYXJndW1lbnRzLmxlbmd0aDwyJiYodD1uLG49%0AMCkpLDEvMD09PSh0LW4pL2UpdGhyb3cgbmV3IEVycm9yKCJpbmZpbml0ZSByYW5n%0AZSIpO3ZhciByLGk9W10sbz11KGlhKGUpKSxhPS0xO2lmKG4qPW8sdCo9byxlKj1v%0ALDA+ZSlmb3IoOyhyPW4rZSorK2EpPnQ7KWkucHVzaChyL28pO2Vsc2UgZm9yKDso%0Acj1uK2UqKythKTx0OylpLnB1c2goci9vKTtyZXR1cm4gaX0sVm8ubWFwPWZ1bmN0%0AaW9uKG4pe3ZhciB0PW5ldyBvO2lmKG4gaW5zdGFuY2VvZiBvKW4uZm9yRWFjaChm%0AdW5jdGlvbihuLGUpe3Quc2V0KG4sZSl9KTtlbHNlIGZvcih2YXIgZSBpbiBuKXQu%0Ac2V0KGUsbltlXSk7cmV0dXJuIHR9LGkobyx7aGFzOmEsZ2V0OmZ1bmN0aW9uKG4p%0Ae3JldHVybiB0aGlzW29hK25dfSxzZXQ6ZnVuY3Rpb24obix0KXtyZXR1cm4gdGhp%0Ac1tvYStuXT10fSxyZW1vdmU6YyxrZXlzOmwsdmFsdWVzOmZ1bmN0aW9uKCl7dmFy%0AIG49W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0LGUpe24ucHVzaChl%0AKX0pLG59LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtyZXR1cm4gdGhpcy5m%0Ab3JFYWNoKGZ1bmN0aW9uKHQsZSl7bi5wdXNoKHtrZXk6dCx2YWx1ZTplfSl9KSxu%0AfSxzaXplOnMsZW1wdHk6Zixmb3JFYWNoOmZ1bmN0aW9uKG4pe2Zvcih2YXIgdCBp%0AbiB0aGlzKXQuY2hhckNvZGVBdCgwKT09PWFhJiZuLmNhbGwodGhpcyx0LnNsaWNl%0AKDEpLHRoaXNbdF0pfX0pO3ZhciBvYT0iXHgwMCIsYWE9b2EuY2hhckNvZGVBdCgw%0AKTtWby5uZXN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0LGEsYyl7aWYoYz49aS5s%0AZW5ndGgpcmV0dXJuIHI/ci5jYWxsKHUsYSk6ZT9hLnNvcnQoZSk6YTtmb3IodmFy%0AIGwscyxmLGgsZz0tMSxwPWEubGVuZ3RoLHY9aVtjKytdLGQ9bmV3IG87KytnPHA7%0AKShoPWQuZ2V0KGw9dihzPWFbZ10pKSk/aC5wdXNoKHMpOmQuc2V0KGwsW3NdKTty%0AZXR1cm4gdD8ocz10KCksZj1mdW5jdGlvbihlLHIpe3Muc2V0KGUsbih0LHIsYykp%0AfSk6KHM9e30sZj1mdW5jdGlvbihlLHIpe3NbZV09bih0LHIsYyl9KSxkLmZvckVh%0AY2goZiksc31mdW5jdGlvbiB0KG4sZSl7aWYoZT49aS5sZW5ndGgpcmV0dXJuIG47%0AdmFyIHI9W10sdT1hW2UrK107cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihuLHUp%0Ae3IucHVzaCh7a2V5Om4sdmFsdWVzOnQodSxlKX0pfSksdT9yLnNvcnQoZnVuY3Rp%0Ab24obix0KXtyZXR1cm4gdShuLmtleSx0LmtleSl9KTpyfXZhciBlLHIsdT17fSxp%0APVtdLGE9W107cmV0dXJuIHUubWFwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oZSx0%0ALDApfSx1LmVudHJpZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobihWby5tYXAsZSww%0AKSwwKX0sdS5rZXk9ZnVuY3Rpb24obil7cmV0dXJuIGkucHVzaChuKSx1fSx1LnNv%0AcnRLZXlzPWZ1bmN0aW9uKG4pe3JldHVybiBhW2kubGVuZ3RoLTFdPW4sdX0sdS5z%0Ab3J0VmFsdWVzPWZ1bmN0aW9uKG4pe3JldHVybiBlPW4sdX0sdS5yb2xsdXA9ZnVu%0AY3Rpb24obil7cmV0dXJuIHI9bix1fSx1fSxWby5zZXQ9ZnVuY3Rpb24obil7dmFy%0AIHQ9bmV3IGg7aWYobilmb3IodmFyIGU9MCxyPW4ubGVuZ3RoO3I+ZTsrK2UpdC5h%0AZGQobltlXSk7cmV0dXJuIHR9LGkoaCx7aGFzOmEsYWRkOmZ1bmN0aW9uKG4pe3Jl%0AdHVybiB0aGlzW29hK25dPSEwLG59LHJlbW92ZTpmdW5jdGlvbihuKXtyZXR1cm4g%0Abj1vYStuLG4gaW4gdGhpcyYmZGVsZXRlIHRoaXNbbl19LHZhbHVlczpsLHNpemU6%0AcyxlbXB0eTpmLGZvckVhY2g6ZnVuY3Rpb24obil7Zm9yKHZhciB0IGluIHRoaXMp%0AdC5jaGFyQ29kZUF0KDApPT09YWEmJm4uY2FsbCh0aGlzLHQuc2xpY2UoMSkpfX0p%0ALFZvLmJlaGF2aW9yPXt9LFZvLnJlYmluZD1mdW5jdGlvbihuLHQpe2Zvcih2YXIg%0AZSxyPTEsdT1hcmd1bWVudHMubGVuZ3RoOysrcjx1OyluW2U9YXJndW1lbnRzW3Jd%0AXT1nKG4sdCx0W2VdKTtyZXR1cm4gbn07dmFyIGNhPVsid2Via2l0IiwibXMiLCJt%0Ab3oiLCJNb3oiLCJvIiwiTyJdO1ZvLmRpc3BhdGNoPWZ1bmN0aW9uKCl7Zm9yKHZh%0AciBuPW5ldyBkLHQ9LTEsZT1hcmd1bWVudHMubGVuZ3RoOysrdDxlOyluW2FyZ3Vt%0AZW50c1t0XV09bShuKTtyZXR1cm4gbn0sZC5wcm90b3R5cGUub249ZnVuY3Rpb24o%0Abix0KXt2YXIgZT1uLmluZGV4T2YoIi4iKSxyPSIiO2lmKGU+PTAmJihyPW4uc2xp%0AY2UoZSsxKSxuPW4uc2xpY2UoMCxlKSksbilyZXR1cm4gYXJndW1lbnRzLmxlbmd0%0AaDwyP3RoaXNbbl0ub24ocik6dGhpc1tuXS5vbihyLHQpO2lmKDI9PT1hcmd1bWVu%0AdHMubGVuZ3RoKXtpZihudWxsPT10KWZvcihuIGluIHRoaXMpdGhpcy5oYXNPd25Q%0Acm9wZXJ0eShuKSYmdGhpc1tuXS5vbihyLG51bGwpO3JldHVybiB0aGlzfX0sVm8u%0AZXZlbnQ9bnVsbCxWby5yZXF1b3RlPWZ1bmN0aW9uKG4pe3JldHVybiBuLnJlcGxh%0AY2UobGEsIlxcJCYiKX07dmFyIGxhPS9bXFxcXlwkXCpcK1w/XHxcW1xdXChcKVwu%0AXHtcfV0vZyxzYT17fS5fX3Byb3RvX18/ZnVuY3Rpb24obix0KXtuLl9fcHJvdG9f%0AXz10fTpmdW5jdGlvbihuLHQpe2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXX0sZmE9%0AZnVuY3Rpb24obix0KXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yKG4pfSxoYT1mdW5j%0AdGlvbihuLHQpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3JBbGwobil9LGdhPVdvLm1h%0AdGNoZXN8fFdvW3AoV28sIm1hdGNoZXNTZWxlY3RvciIpXSxwYT1mdW5jdGlvbihu%0ALHQpe3JldHVybiBnYS5jYWxsKG4sdCl9OyJmdW5jdGlvbiI9PXR5cGVvZiBTaXp6%0AbGUmJihmYT1mdW5jdGlvbihuLHQpe3JldHVybiBTaXp6bGUobix0KVswXXx8bnVs%0AbH0saGE9U2l6emxlLHBhPVNpenpsZS5tYXRjaGVzU2VsZWN0b3IpLFZvLnNlbGVj%0AdGlvbj1mdW5jdGlvbigpe3JldHVybiB5YX07dmFyIHZhPVZvLnNlbGVjdGlvbi5w%0Acm90b3R5cGU9W107dmEuc2VsZWN0PWZ1bmN0aW9uKG4pe3ZhciB0LGUscix1LGk9%0AW107bj1iKG4pO2Zvcih2YXIgbz0tMSxhPXRoaXMubGVuZ3RoOysrbzxhOyl7aS5w%0AdXNoKHQ9W10pLHQucGFyZW50Tm9kZT0ocj10aGlzW29dKS5wYXJlbnROb2RlO2Zv%0Acih2YXIgYz0tMSxsPXIubGVuZ3RoOysrYzxsOykodT1yW2NdKT8odC5wdXNoKGU9%0Abi5jYWxsKHUsdS5fX2RhdGFfXyxjLG8pKSxlJiYiX19kYXRhX18iaW4gdSYmKGUu%0AX19kYXRhX189dS5fX2RhdGFfXykpOnQucHVzaChudWxsKX1yZXR1cm4gXyhpKX0s%0AdmEuc2VsZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0LGUscj1bXTtuPXcobik7Zm9y%0AKHZhciB1PS0xLGk9dGhpcy5sZW5ndGg7Kyt1PGk7KWZvcih2YXIgbz10aGlzW3Vd%0ALGE9LTEsYz1vLmxlbmd0aDsrK2E8YzspKGU9b1thXSkmJihyLnB1c2godD0kbyhu%0ALmNhbGwoZSxlLl9fZGF0YV9fLGEsdSkpKSx0LnBhcmVudE5vZGU9ZSk7cmV0dXJu%0AIF8ocil9O3ZhciBkYT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIs%0AeGh0bWw6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHhsaW5rOiJodHRw%0AOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3Jn%0AL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIw%0AMDAveG1sbnMvIn07Vm8ubnM9e3ByZWZpeDpkYSxxdWFsaWZ5OmZ1bmN0aW9uKG4p%0Ae3ZhciB0PW4uaW5kZXhPZigiOiIpLGU9bjtyZXR1cm4gdD49MCYmKGU9bi5zbGlj%0AZSgwLHQpLG49bi5zbGljZSh0KzEpKSxkYS5oYXNPd25Qcm9wZXJ0eShlKT97c3Bh%0AY2U6ZGFbZV0sbG9jYWw6bn06bn19LHZhLmF0dHI9ZnVuY3Rpb24obix0KXtpZihh%0Acmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2Ygbil7dmFyIGU9%0AdGhpcy5ub2RlKCk7cmV0dXJuIG49Vm8ubnMucXVhbGlmeShuKSxuLmxvY2FsP2Uu%0AZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTplLmdldEF0dHJpYnV0ZShu%0AKX1mb3IodCBpbiBuKXRoaXMuZWFjaChTKHQsblt0XSkpO3JldHVybiB0aGlzfXJl%0AdHVybiB0aGlzLmVhY2goUyhuLHQpKX0sdmEuY2xhc3NlZD1mdW5jdGlvbihuLHQp%0Ae2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXt2%0AYXIgZT10aGlzLm5vZGUoKSxyPShuPUEobikpLmxlbmd0aCx1PS0xO2lmKHQ9ZS5j%0AbGFzc0xpc3Qpe2Zvcig7Kyt1PHI7KWlmKCF0LmNvbnRhaW5zKG5bdV0pKXJldHVy%0AbiExfWVsc2UgZm9yKHQ9ZS5nZXRBdHRyaWJ1dGUoImNsYXNzIik7Kyt1PHI7KWlm%0AKCFFKG5bdV0pLnRlc3QodCkpcmV0dXJuITE7cmV0dXJuITB9Zm9yKHQgaW4gbil0%0AaGlzLmVhY2goQyh0LG5bdF0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNo%0AKEMobix0KSl9LHZhLnN0eWxlPWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1hcmd1bWVu%0AdHMubGVuZ3RoO2lmKDM+cil7aWYoInN0cmluZyIhPXR5cGVvZiBuKXsyPnImJih0%0APSIiKTtmb3IoZSBpbiBuKXRoaXMuZWFjaCh6KGUsbltlXSx0KSk7cmV0dXJuIHRo%0AaXN9aWYoMj5yKXJldHVybiBKby5nZXRDb21wdXRlZFN0eWxlKHRoaXMubm9kZSgp%0ALG51bGwpLmdldFByb3BlcnR5VmFsdWUobik7ZT0iIn1yZXR1cm4gdGhpcy5lYWNo%0AKHoobix0LGUpKX0sdmEucHJvcGVydHk9ZnVuY3Rpb24obix0KXtpZihhcmd1bWVu%0AdHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gdGhpcy5u%0Ab2RlKClbbl07Zm9yKHQgaW4gbil0aGlzLmVhY2goTCh0LG5bdF0pKTtyZXR1cm4g%0AdGhpc31yZXR1cm4gdGhpcy5lYWNoKEwobix0KSl9LHZhLnRleHQ9ZnVuY3Rpb24o%0Abil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCJmdW5jdGlvbiI9%0APXR5cGVvZiBuP2Z1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50%0Acyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT10PyIiOnR9Om51bGw9PW4/ZnVuY3Rp%0Ab24oKXt0aGlzLnRleHRDb250ZW50PSIifTpmdW5jdGlvbigpe3RoaXMudGV4dENv%0AbnRlbnQ9bn0pOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSx2YS5odG1sPWZ1bmN0%0AaW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rp%0Ab24iPT10eXBlb2Ygbj9mdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1%0AbWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PXQ/IiI6dH06bnVsbD09bj9mdW5j%0AdGlvbigpe3RoaXMuaW5uZXJIVE1MPSIifTpmdW5jdGlvbigpe3RoaXMuaW5uZXJI%0AVE1MPW59KTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHZhLmFwcGVuZD1mdW5jdGlv%0AbihuKXtyZXR1cm4gbj1UKG4pLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJu%0AIHRoaXMuYXBwZW5kQ2hpbGQobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LHZh%0ALmluc2VydD1mdW5jdGlvbihuLHQpe3JldHVybiBuPVQobiksdD1iKHQpLHRoaXMu%0Ac2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBw%0AbHkodGhpcyxhcmd1bWVudHMpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxs%0AKX0pfSx2YS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0%0AaW9uKCl7dmFyIG49dGhpcy5wYXJlbnROb2RlO24mJm4ucmVtb3ZlQ2hpbGQodGhp%0Acyl9KX0sdmEuZGF0YT1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUobixlKXt2YXIg%0Acix1LGksYT1uLmxlbmd0aCxmPWUubGVuZ3RoLGg9TWF0aC5taW4oYSxmKSxnPW5l%0AdyBBcnJheShmKSxwPW5ldyBBcnJheShmKSx2PW5ldyBBcnJheShhKTtpZih0KXt2%0AYXIgZCxtPW5ldyBvLHk9bmV3IG8seD1bXTtmb3Iocj0tMTsrK3I8YTspZD10LmNh%0AbGwodT1uW3JdLHUuX19kYXRhX18sciksbS5oYXMoZCk/dltyXT11Om0uc2V0KGQs%0AdSkseC5wdXNoKGQpO2ZvcihyPS0xOysrcjxmOylkPXQuY2FsbChlLGk9ZVtyXSxy%0AKSwodT1tLmdldChkKSk/KGdbcl09dSx1Ll9fZGF0YV9fPWkpOnkuaGFzKGQpfHwo%0AcFtyXT1xKGkpKSx5LnNldChkLGkpLG0ucmVtb3ZlKGQpO2ZvcihyPS0xOysrcjxh%0AOyltLmhhcyh4W3JdKSYmKHZbcl09bltyXSl9ZWxzZXtmb3Iocj0tMTsrK3I8aDsp%0AdT1uW3JdLGk9ZVtyXSx1Pyh1Ll9fZGF0YV9fPWksZ1tyXT11KTpwW3JdPXEoaSk7%0AZm9yKDtmPnI7KytyKXBbcl09cShlW3JdKTtmb3IoO2E+cjsrK3IpdltyXT1uW3Jd%0AfXAudXBkYXRlPWcscC5wYXJlbnROb2RlPWcucGFyZW50Tm9kZT12LnBhcmVudE5v%0AZGU9bi5wYXJlbnROb2RlLGMucHVzaChwKSxsLnB1c2goZykscy5wdXNoKHYpfXZh%0AciByLHUsaT0tMSxhPXRoaXMubGVuZ3RoO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtm%0Ab3Iobj1uZXcgQXJyYXkoYT0ocj10aGlzWzBdKS5sZW5ndGgpOysraTxhOykodT1y%0AW2ldKSYmKG5baV09dS5fX2RhdGFfXyk7cmV0dXJuIG59dmFyIGM9VShbXSksbD1f%0AKFtdKSxzPV8oW10pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKWZvcig7KytpPGE7%0AKWUocj10aGlzW2ldLG4uY2FsbChyLHIucGFyZW50Tm9kZS5fX2RhdGFfXyxpKSk7%0AZWxzZSBmb3IoOysraTxhOyllKHI9dGhpc1tpXSxuKTtyZXR1cm4gbC5lbnRlcj1m%0AdW5jdGlvbigpe3JldHVybiBjfSxsLmV4aXQ9ZnVuY3Rpb24oKXtyZXR1cm4gc30s%0AbH0sdmEuZGF0dW09ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/%0AdGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLG4pOnRoaXMucHJvcGVydHkoIl9fZGF0%0AYV9fIil9LHZhLmZpbHRlcj1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdT1bXTsiZnVu%0AY3Rpb24iIT10eXBlb2YgbiYmKG49UihuKSk7Zm9yKHZhciBpPTAsbz10aGlzLmxl%0Abmd0aDtvPmk7aSsrKXt1LnB1c2godD1bXSksdC5wYXJlbnROb2RlPShlPXRoaXNb%0AaV0pLnBhcmVudE5vZGU7Zm9yKHZhciBhPTAsYz1lLmxlbmd0aDtjPmE7YSsrKShy%0APWVbYV0pJiZuLmNhbGwocixyLl9fZGF0YV9fLGEsaSkmJnQucHVzaChyKX1yZXR1%0Acm4gXyh1KX0sdmEub3JkZXI9ZnVuY3Rpb24oKXtmb3IodmFyIG49LTEsdD10aGlz%0ALmxlbmd0aDsrK248dDspZm9yKHZhciBlLHI9dGhpc1tuXSx1PXIubGVuZ3RoLTEs%0AaT1yW3VdOy0tdT49MDspKGU9clt1XSkmJihpJiZpIT09ZS5uZXh0U2libGluZyYm%0AaS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLGkpLGk9ZSk7cmV0dXJuIHRoaXN9%0ALHZhLnNvcnQ9ZnVuY3Rpb24obil7bj1ELmFwcGx5KHRoaXMsYXJndW1lbnRzKTtm%0Ab3IodmFyIHQ9LTEsZT10aGlzLmxlbmd0aDsrK3Q8ZTspdGhpc1t0XS5zb3J0KG4p%0AO3JldHVybiB0aGlzLm9yZGVyKCl9LHZhLmVhY2g9ZnVuY3Rpb24obil7cmV0dXJu%0AIFAodGhpcyxmdW5jdGlvbih0LGUscil7bi5jYWxsKHQsdC5fX2RhdGFfXyxlLHIp%0AfSl9LHZhLmNhbGw9ZnVuY3Rpb24obil7dmFyIHQ9JG8oYXJndW1lbnRzKTtyZXR1%0Acm4gbi5hcHBseSh0WzBdPXRoaXMsdCksdGhpc30sdmEuZW1wdHk9ZnVuY3Rpb24o%0AKXtyZXR1cm4hdGhpcy5ub2RlKCl9LHZhLm5vZGU9ZnVuY3Rpb24oKXtmb3IodmFy%0AIG49MCx0PXRoaXMubGVuZ3RoO3Q+bjtuKyspZm9yKHZhciBlPXRoaXNbbl0scj0w%0ALHU9ZS5sZW5ndGg7dT5yO3IrKyl7dmFyIGk9ZVtyXTtpZihpKXJldHVybiBpfXJl%0AdHVybiBudWxsfSx2YS5zaXplPWZ1bmN0aW9uKCl7dmFyIG49MDtyZXR1cm4gUCh0%0AaGlzLGZ1bmN0aW9uKCl7KytufSksbn07dmFyIG1hPVtdO1ZvLnNlbGVjdGlvbi5l%0AbnRlcj1VLFZvLnNlbGVjdGlvbi5lbnRlci5wcm90b3R5cGU9bWEsbWEuYXBwZW5k%0APXZhLmFwcGVuZCxtYS5lbXB0eT12YS5lbXB0eSxtYS5ub2RlPXZhLm5vZGUsbWEu%0AY2FsbD12YS5jYWxsLG1hLnNpemU9dmEuc2l6ZSxtYS5zZWxlY3Q9ZnVuY3Rpb24o%0Abil7Zm9yKHZhciB0LGUscix1LGksbz1bXSxhPS0xLGM9dGhpcy5sZW5ndGg7Kyth%0APGM7KXtyPSh1PXRoaXNbYV0pLnVwZGF0ZSxvLnB1c2godD1bXSksdC5wYXJlbnRO%0Ab2RlPXUucGFyZW50Tm9kZTtmb3IodmFyIGw9LTEscz11Lmxlbmd0aDsrK2w8czsp%0AKGk9dVtsXSk/KHQucHVzaChyW2xdPWU9bi5jYWxsKHUucGFyZW50Tm9kZSxpLl9f%0AZGF0YV9fLGwsYSkpLGUuX19kYXRhX189aS5fX2RhdGFfXyk6dC5wdXNoKG51bGwp%0AfXJldHVybiBfKG8pfSxtYS5pbnNlcnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aDwyJiYodD1qKHRoaXMpKSx2YS5pbnNlcnQuY2FsbCh0aGlz%0ALG4sdCl9LHZhLnRyYW5zaXRpb249ZnVuY3Rpb24oKXtmb3IodmFyIG4sdCxlPWts%0AfHwrK3psLHI9W10sdT1FbHx8e3RpbWU6RGF0ZS5ub3coKSxlYXNlOk11LGRlbGF5%0AOjAsZHVyYXRpb246MjUwfSxpPS0xLG89dGhpcy5sZW5ndGg7KytpPG87KXtyLnB1%0Ac2gobj1bXSk7Zm9yKHZhciBhPXRoaXNbaV0sYz0tMSxsPWEubGVuZ3RoOysrYzxs%0AOykodD1hW2NdKSYmVW8odCxjLGUsdSksbi5wdXNoKHQpfXJldHVybiBSbyhyLGUp%0AfSx2YS5pbnRlcnJ1cHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKEgpfSxW%0Aby5zZWxlY3Q9ZnVuY3Rpb24obil7dmFyIHQ9WyJzdHJpbmciPT10eXBlb2Ygbj9m%0AYShuLEJvKTpuXTtyZXR1cm4gdC5wYXJlbnROb2RlPVdvLF8oW3RdKX0sVm8uc2Vs%0AZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0PSRvKCJzdHJpbmciPT10eXBlb2Ygbj9o%0AYShuLEJvKTpuKTtyZXR1cm4gdC5wYXJlbnROb2RlPVdvLF8oW3RdKX07dmFyIHlh%0APVZvLnNlbGVjdChXbyk7dmEub249ZnVuY3Rpb24obix0LGUpe3ZhciByPWFyZ3Vt%0AZW50cy5sZW5ndGg7aWYoMz5yKXtpZigic3RyaW5nIiE9dHlwZW9mIG4pezI+ciYm%0AKHQ9ITEpO2ZvcihlIGluIG4pdGhpcy5lYWNoKEYoZSxuW2VdLHQpKTtyZXR1cm4g%0AdGhpc31pZigyPnIpcmV0dXJuKHI9dGhpcy5ub2RlKClbIl9fb24iK25dKSYmci5f%0AO2U9ITF9cmV0dXJuIHRoaXMuZWFjaChGKG4sdCxlKSl9O3ZhciB4YT1Wby5tYXAo%0Ae21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSk7%0AeGEuZm9yRWFjaChmdW5jdGlvbihuKXsib24iK24gaW4gQm8mJnhhLnJlbW92ZShu%0AKX0pO3ZhciBNYT0ib25zZWxlY3RzdGFydCJpbiBCbz9udWxsOnAoV28uc3R5bGUs%0AInVzZXJTZWxlY3QiKSxfYT0wO1ZvLm1vdXNlPWZ1bmN0aW9uKG4pe3JldHVybiBa%0AKG4seCgpKX07dmFyIGJhPS9XZWJLaXQvLnRlc3QoSm8ubmF2aWdhdG9yLnVzZXJB%0AZ2VudCk/LTE6MDtWby50b3VjaD1mdW5jdGlvbihuLHQsZSl7aWYoYXJndW1lbnRz%0ALmxlbmd0aDwzJiYoZT10LHQ9eCgpLmNoYW5nZWRUb3VjaGVzKSx0KWZvcih2YXIg%0Acix1PTAsaT10Lmxlbmd0aDtpPnU7Kyt1KWlmKChyPXRbdV0pLmlkZW50aWZpZXI9%0APT1lKXJldHVybiBaKG4scil9LFZvLmJlaGF2aW9yLmRyYWc9ZnVuY3Rpb24oKXtm%0AdW5jdGlvbiBuKCl7dGhpcy5vbigibW91c2Vkb3duLmRyYWciLHUpLm9uKCJ0b3Vj%0AaHN0YXJ0LmRyYWciLGkpfWZ1bmN0aW9uIHQobix0LHUsaSxvKXtyZXR1cm4gZnVu%0AY3Rpb24oKXtmdW5jdGlvbiBhKCl7dmFyIG4sZSxyPXQoaCx2KTtyJiYobj1yWzBd%0ALXhbMF0sZT1yWzFdLXhbMV0scHw9bnxlLHg9cixnKHt0eXBlOiJkcmFnIix4OnJb%0AMF0rbFswXSx5OnJbMV0rbFsxXSxkeDpuLGR5OmV9KSl9ZnVuY3Rpb24gYygpe3Qo%0AaCx2KSYmKG0ub24oaStkLG51bGwpLm9uKG8rZCxudWxsKSx5KHAmJlZvLmV2ZW50%0ALnRhcmdldD09PWYpLGcoe3R5cGU6ImRyYWdlbmQifSkpfXZhciBsLHM9dGhpcyxm%0APVZvLmV2ZW50LnRhcmdldCxoPXMucGFyZW50Tm9kZSxnPWUub2Yocyxhcmd1bWVu%0AdHMpLHA9MCx2PW4oKSxkPSIuZHJhZyIrKG51bGw9PXY/IiI6Ii0iK3YpLG09Vm8u%0Ac2VsZWN0KHUoKSkub24oaStkLGEpLm9uKG8rZCxjKSx5PUkoKSx4PXQoaCx2KTty%0APyhsPXIuYXBwbHkocyxhcmd1bWVudHMpLGw9W2wueC14WzBdLGwueS14WzFdXSk6%0AbD1bMCwwXSxnKHt0eXBlOiJkcmFnc3RhcnQifSl9fXZhciBlPU0obiwiZHJhZyIs%0AImRyYWdzdGFydCIsImRyYWdlbmQiKSxyPW51bGwsdT10KHYsVm8ubW91c2UsJCwi%0AbW91c2Vtb3ZlIiwibW91c2V1cCIpLGk9dChWLFZvLnRvdWNoLFgsInRvdWNobW92%0AZSIsInRvdWNoZW5kIik7cmV0dXJuIG4ub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sVm8ucmViaW5kKG4sZSwib24i%0AKX0sVm8udG91Y2hlcz1mdW5jdGlvbihuLHQpe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPDImJih0PXgoKS50b3VjaGVzKSx0PyRvKHQpLm1hcChmdW5jdGlvbih0KXt2%0AYXIgZT1aKG4sdCk7cmV0dXJuIGUuaWRlbnRpZmllcj10LmlkZW50aWZpZXIsZX0p%0AOltdfTt2YXIgd2E9TWF0aC5QSSxTYT0yKndhLGthPXdhLzIsRWE9MWUtNixBYT1F%0AYSpFYSxDYT13YS8xODAsTmE9MTgwL3dhLHphPU1hdGguU1FSVDIsTGE9MixUYT00%0AO1ZvLmludGVycG9sYXRlWm9vbT1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUobil7%0AdmFyIHQ9bip5O2lmKG0pe3ZhciBlPVEodiksbz1pLyhMYSpoKSooZSpudCh6YSp0%0AK3YpLUsodikpO3JldHVybltyK28qbCx1K28qcyxpKmUvUSh6YSp0K3YpXX1yZXR1%0Acm5bcituKmwsdStuKnMsaSpNYXRoLmV4cCh6YSp0KV19dmFyIHI9blswXSx1PW5b%0AMV0saT1uWzJdLG89dFswXSxhPXRbMV0sYz10WzJdLGw9by1yLHM9YS11LGY9bCps%0AK3MqcyxoPU1hdGguc3FydChmKSxnPShjKmMtaSppK1RhKmYpLygyKmkqTGEqaCks%0AcD0oYypjLWkqaS1UYSpmKS8oMipjKkxhKmgpLHY9TWF0aC5sb2coTWF0aC5zcXJ0%0AKGcqZysxKS1nKSxkPU1hdGgubG9nKE1hdGguc3FydChwKnArMSktcCksbT1kLXYs%0AeT0obXx8TWF0aC5sb2coYy9pKSkvemE7cmV0dXJuIGUuZHVyYXRpb249MWUzKnks%0AZX0sVm8uYmVoYXZpb3Iuem9vbT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obil7bi5v%0AbihBLGwpLm9uKERhKyIuem9vbSIsZikub24oImRibGNsaWNrLnpvb20iLGgpLm9u%0AKHoscyl9ZnVuY3Rpb24gdChuKXtyZXR1cm5bKG5bMF0tUy54KS9TLmssKG5bMV0t%0AUy55KS9TLmtdfWZ1bmN0aW9uIGUobil7cmV0dXJuW25bMF0qUy5rK1MueCxuWzFd%0AKlMuaytTLnldfWZ1bmN0aW9uIHIobil7Uy5rPU1hdGgubWF4KEVbMF0sTWF0aC5t%0AaW4oRVsxXSxuKSl9ZnVuY3Rpb24gdShuLHQpe3Q9ZSh0KSxTLngrPW5bMF0tdFsw%0AXSxTLnkrPW5bMV0tdFsxXX1mdW5jdGlvbiBpKCl7XyYmXy5kb21haW4oeC5yYW5n%0AZSgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4obi1TLngpL1Mua30pLm1hcCh4Lmlu%0AdmVydCkpLHcmJncuZG9tYWluKGIucmFuZ2UoKS5tYXAoZnVuY3Rpb24obil7cmV0%0AdXJuKG4tUy55KS9TLmt9KS5tYXAoYi5pbnZlcnQpKX1mdW5jdGlvbiBvKG4pe24o%0Ae3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBhKG4pe2koKSxuKHt0eXBlOiJ6%0Ab29tIixzY2FsZTpTLmssdHJhbnNsYXRlOltTLngsUy55XX0pfWZ1bmN0aW9uIGMo%0Abil7bih7dHlwZToiem9vbWVuZCJ9KX1mdW5jdGlvbiBsKCl7ZnVuY3Rpb24gbigp%0Ae3M9MSx1KFZvLm1vdXNlKHIpLGgpLGEobCl9ZnVuY3Rpb24gZSgpe2Yub24oQyxu%0AdWxsKS5vbihOLG51bGwpLGcocyYmVm8uZXZlbnQudGFyZ2V0PT09aSksYyhsKX12%0AYXIgcj10aGlzLGk9Vm8uZXZlbnQudGFyZ2V0LGw9TC5vZihyLGFyZ3VtZW50cyks%0Acz0wLGY9Vm8uc2VsZWN0KEpvKS5vbihDLG4pLm9uKE4sZSksaD10KFZvLm1vdXNl%0AKHIpKSxnPUkoKTtILmNhbGwociksbyhsKX1mdW5jdGlvbiBzKCl7ZnVuY3Rpb24g%0Abigpe3ZhciBuPVZvLnRvdWNoZXMoZyk7cmV0dXJuIGg9Uy5rLG4uZm9yRWFjaChm%0AdW5jdGlvbihuKXtuLmlkZW50aWZpZXIgaW4gdiYmKHZbbi5pZGVudGlmaWVyXT10%0AKG4pKX0pLG59ZnVuY3Rpb24gZSgpe3ZhciB0PVZvLmV2ZW50LnRhcmdldDtWby5z%0AZWxlY3QodCkub24oTSxpKS5vbihfLGYpLGIucHVzaCh0KTtmb3IodmFyIGU9Vm8u%0AZXZlbnQuY2hhbmdlZFRvdWNoZXMsbz0wLGM9ZS5sZW5ndGg7Yz5vOysrbyl2W2Vb%0Ab10uaWRlbnRpZmllcl09bnVsbDt2YXIgbD1uKCkscz1EYXRlLm5vdygpO2lmKDE9%0APT1sLmxlbmd0aCl7aWYoNTAwPnMtbSl7dmFyIGg9bFswXSxnPXZbaC5pZGVudGlm%0AaWVyXTtyKDIqUy5rKSx1KGgsZykseSgpLGEocCl9bT1zfWVsc2UgaWYobC5sZW5n%0AdGg+MSl7dmFyIGg9bFswXSx4PWxbMV0sdz1oWzBdLXhbMF0saz1oWzFdLXhbMV07%0AZD13KncrayprfX1mdW5jdGlvbiBpKCl7Zm9yKHZhciBuLHQsZSxpLG89Vm8udG91%0AY2hlcyhnKSxjPTAsbD1vLmxlbmd0aDtsPmM7KytjLGk9bnVsbClpZihlPW9bY10s%0AaT12W2UuaWRlbnRpZmllcl0pe2lmKHQpYnJlYWs7bj1lLHQ9aX1pZihpKXt2YXIg%0Acz0ocz1lWzBdLW5bMF0pKnMrKHM9ZVsxXS1uWzFdKSpzLGY9ZCYmTWF0aC5zcXJ0%0AKHMvZCk7bj1bKG5bMF0rZVswXSkvMiwoblsxXStlWzFdKS8yXSx0PVsodFswXStp%0AWzBdKS8yLCh0WzFdK2lbMV0pLzJdLHIoZipoKX1tPW51bGwsdShuLHQpLGEocCl9%0AZnVuY3Rpb24gZigpe2lmKFZvLmV2ZW50LnRvdWNoZXMubGVuZ3RoKXtmb3IodmFy%0AIHQ9Vm8uZXZlbnQuY2hhbmdlZFRvdWNoZXMsZT0wLHI9dC5sZW5ndGg7cj5lOysr%0AZSlkZWxldGUgdlt0W2VdLmlkZW50aWZpZXJdO2Zvcih2YXIgdSBpbiB2KXJldHVy%0AbiB2b2lkIG4oKX1Wby5zZWxlY3RBbGwoYikub24oeCxudWxsKSx3Lm9uKEEsbCku%0Ab24oeixzKSxrKCksYyhwKX12YXIgaCxnPXRoaXMscD1MLm9mKGcsYXJndW1lbnRz%0AKSx2PXt9LGQ9MCx4PSIuem9vbS0iK1ZvLmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBd%0ALmlkZW50aWZpZXIsTT0idG91Y2htb3ZlIit4LF89InRvdWNoZW5kIit4LGI9W10s%0Adz1Wby5zZWxlY3QoZyksaz1JKCk7SC5jYWxsKGcpLGUoKSxvKHApLHcub24oQSxu%0AdWxsKS5vbih6LGUpfWZ1bmN0aW9uIGYoKXt2YXIgbj1MLm9mKHRoaXMsYXJndW1l%0AbnRzKTtkP2NsZWFyVGltZW91dChkKTooZz10KHA9dnx8Vm8ubW91c2UodGhpcykp%0ALEguY2FsbCh0aGlzKSxvKG4pKSxkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkPW51%0AbGwsYyhuKX0sNTApLHkoKSxyKE1hdGgucG93KDIsLjAwMipxYSgpKSpTLmspLHUo%0AcCxnKSxhKG4pfWZ1bmN0aW9uIGgoKXt2YXIgbj1MLm9mKHRoaXMsYXJndW1lbnRz%0AKSxlPVZvLm1vdXNlKHRoaXMpLGk9dChlKSxsPU1hdGgubG9nKFMuaykvTWF0aC5M%0ATjI7byhuKSxyKE1hdGgucG93KDIsVm8uZXZlbnQuc2hpZnRLZXk/TWF0aC5jZWls%0AKGwpLTE6TWF0aC5mbG9vcihsKSsxKSksdShlLGkpLGEobiksYyhuKX12YXIgZyxw%0ALHYsZCxtLHgsXyxiLHcsUz17eDowLHk6MCxrOjF9LGs9Wzk2MCw1MDBdLEU9UmEs%0AQT0ibW91c2Vkb3duLnpvb20iLEM9Im1vdXNlbW92ZS56b29tIixOPSJtb3VzZXVw%0ALnpvb20iLHo9InRvdWNoc3RhcnQuem9vbSIsTD1NKG4sInpvb21zdGFydCIsInpv%0Ab20iLCJ6b29tZW5kIik7cmV0dXJuIG4uZXZlbnQ9ZnVuY3Rpb24obil7bi5lYWNo%0AKGZ1bmN0aW9uKCl7dmFyIG49TC5vZih0aGlzLGFyZ3VtZW50cyksdD1TO2tsP1Zv%0ALnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuem9vbSIsZnVu%0AY3Rpb24oKXtTPXRoaXMuX19jaGFydF9ffHx7eDowLHk6MCxrOjF9LG8obil9KS50%0Ad2Vlbigiem9vbTp6b29tIixmdW5jdGlvbigpe3ZhciBlPWtbMF0scj1rWzFdLHU9%0AZS8yLGk9ci8yLG89Vm8uaW50ZXJwb2xhdGVab29tKFsodS1TLngpL1MuaywoaS1T%0ALnkpL1MuayxlL1Mua10sWyh1LXQueCkvdC5rLChpLXQueSkvdC5rLGUvdC5rXSk7%0AcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPW8odCksYz1lL3JbMl07dGhpcy5fX2No%0AYXJ0X189Uz17eDp1LXJbMF0qYyx5OmktclsxXSpjLGs6Y30sYShuKX19KS5lYWNo%0AKCJlbmQuem9vbSIsZnVuY3Rpb24oKXtjKG4pfSk6KHRoaXMuX19jaGFydF9fPVMs%0AbyhuKSxhKG4pLGMobikpfSl9LG4udHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhTPXt4Oit0WzBdLHk6K3RbMV0sazpTLmt9LGko%0AKSxuKTpbUy54LFMueV19LG4uc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KFM9e3g6Uy54LHk6Uy55LGs6K3R9LGkoKSxuKTpTLmt9LG4u%0Ac2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/%0AKEU9bnVsbD09dD9SYTpbK3RbMF0sK3RbMV1dLG4pOkV9LG4uY2VudGVyPWZ1bmN0%0AaW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXQmJlsrdFswXSwrdFsx%0AXV0sbik6dn0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyhrPXQmJlsrdFswXSwrdFsxXV0sbik6a30sbi54PWZ1bmN0aW9uKHQpe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPXQseD10LmNvcHkoKSxTPXt4OjAseTow%0ALGs6MX0sbik6X30sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyh3PXQsYj10LmNvcHkoKSxTPXt4OjAseTowLGs6MX0sbik6d30sVm8ucmVi%0AaW5kKG4sTCwib24iKX07dmFyIHFhLFJhPVswLDEvMF0sRGE9Im9ud2hlZWwiaW4g%0AQm8/KHFhPWZ1bmN0aW9uKCl7cmV0dXJuLVZvLmV2ZW50LmRlbHRhWSooVm8uZXZl%0AbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiBC%0Abz8ocWE9ZnVuY3Rpb24oKXtyZXR1cm4gVm8uZXZlbnQud2hlZWxEZWx0YX0sIm1v%0AdXNld2hlZWwiKToocWE9ZnVuY3Rpb24oKXtyZXR1cm4tVm8uZXZlbnQuZGV0YWls%0AfSwiTW96TW91c2VQaXhlbFNjcm9sbCIpO1ZvLmNvbG9yPWV0LGV0LnByb3RvdHlw%0AZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifSxWby5o%0Ac2w9cnQ7dmFyIFBhPXJ0LnByb3RvdHlwZT1uZXcgZXQ7UGEuYnJpZ2h0ZXI9ZnVu%0AY3Rpb24obil7cmV0dXJuIG49TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9u%0AOjEpLG5ldyBydCh0aGlzLmgsdGhpcy5zLHRoaXMubC9uKX0sUGEuZGFya2VyPWZ1%0AbmN0aW9uKG4pe3JldHVybiBuPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/%0AbjoxKSxuZXcgcnQodGhpcy5oLHRoaXMucyxuKnRoaXMubCl9LFBhLnJnYj1mdW5j%0AdGlvbigpe3JldHVybiB1dCh0aGlzLmgsdGhpcy5zLHRoaXMubCl9LFZvLmhjbD1p%0AdDt2YXIgVWE9aXQucHJvdG90eXBlPW5ldyBldDtVYS5icmlnaHRlcj1mdW5jdGlv%0AbihuKXtyZXR1cm4gbmV3IGl0KHRoaXMuaCx0aGlzLmMsTWF0aC5taW4oMTAwLHRo%0AaXMubCtqYSooYXJndW1lbnRzLmxlbmd0aD9uOjEpKSl9LFVhLmRhcmtlcj1mdW5j%0AdGlvbihuKXtyZXR1cm4gbmV3IGl0KHRoaXMuaCx0aGlzLmMsTWF0aC5tYXgoMCx0%0AaGlzLmwtamEqKGFyZ3VtZW50cy5sZW5ndGg/bjoxKSkpfSxVYS5yZ2I9ZnVuY3Rp%0Ab24oKXtyZXR1cm4gb3QodGhpcy5oLHRoaXMuYyx0aGlzLmwpLnJnYigpfSxWby5s%0AYWI9YXQ7dmFyIGphPTE4LEhhPS45NTA0NyxGYT0xLE9hPTEuMDg4ODMsWWE9YXQu%0AcHJvdG90eXBlPW5ldyBldDtZYS5icmlnaHRlcj1mdW5jdGlvbihuKXtyZXR1cm4g%0AbmV3IGF0KE1hdGgubWluKDEwMCx0aGlzLmwramEqKGFyZ3VtZW50cy5sZW5ndGg/%0AbjoxKSksdGhpcy5hLHRoaXMuYil9LFlhLmRhcmtlcj1mdW5jdGlvbihuKXtyZXR1%0Acm4gbmV3IGF0KE1hdGgubWF4KDAsdGhpcy5sLWphKihhcmd1bWVudHMubGVuZ3Ro%0AP246MSkpLHRoaXMuYSx0aGlzLmIpfSxZYS5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4g%0AY3QodGhpcy5sLHRoaXMuYSx0aGlzLmIpfSxWby5yZ2I9Z3Q7dmFyIElhPWd0LnBy%0Ab3RvdHlwZT1uZXcgZXQ7SWEuYnJpZ2h0ZXI9ZnVuY3Rpb24obil7bj1NYXRoLnBv%0AdyguNyxhcmd1bWVudHMubGVuZ3RoP246MSk7dmFyIHQ9dGhpcy5yLGU9dGhpcy5n%0ALHI9dGhpcy5iLHU9MzA7cmV0dXJuIHR8fGV8fHI/KHQmJnU+dCYmKHQ9dSksZSYm%0AdT5lJiYoZT11KSxyJiZ1PnImJihyPXUpLG5ldyBndChNYXRoLm1pbigyNTUsdC9u%0AKSxNYXRoLm1pbigyNTUsZS9uKSxNYXRoLm1pbigyNTUsci9uKSkpOm5ldyBndCh1%0ALHUsdSl9LElhLmRhcmtlcj1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLnBvdygu%0ANyxhcmd1bWVudHMubGVuZ3RoP246MSksbmV3IGd0KG4qdGhpcy5yLG4qdGhpcy5n%0ALG4qdGhpcy5iKX0sSWEuaHNsPWZ1bmN0aW9uKCl7cmV0dXJuIHl0KHRoaXMucix0%0AaGlzLmcsdGhpcy5iKX0sSWEudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iIyIr%0AZHQodGhpcy5yKStkdCh0aGlzLmcpK2R0KHRoaXMuYil9O3ZhciBaYT1Wby5tYXAo%0Ae2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2%0ANTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYx%0AMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3%0ANzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0%0ALGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNl%0AOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5m%0AbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQy%0AMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJr%0AZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoy%0ANTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21h%0AZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6%0AMTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFy%0Aa3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVi%0AbHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6%0AMzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxk%0AZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgy%0ANjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6%0AMTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0%0AMixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRl%0AOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6%0AODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0%0AMjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5y%0AZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6%0AMTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2%0ANSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRi%0AbHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1%0ANTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4%0AMjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0%0AcGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVu%0AOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6Nzgz%0AMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0%0ANzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMz%0AMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4%0AODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVk%0AaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNl%0AYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3By%0AaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlv%0AbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbTox%0ANjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2%0AYWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2%0AZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFu%0AZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2%0ANTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYs%0AcGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNo%0AcHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bTox%0ANDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlZDox%0ANjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2Fk%0AZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAz%0AMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYTox%0AMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1%0AZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNu%0Ab3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAs%0AdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86%0AMTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0%0AOjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVs%0AbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSk7WmEuZm9yRWFjaChm%0AdW5jdGlvbihuLHQpe1phLnNldChuLHB0KHQpKX0pLFZvLmZ1bmN0b3I9YnQsVm8u%0AeGhyPVN0KHd0KSxWby5kc3Y9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKG4sZSxp%0AKXthcmd1bWVudHMubGVuZ3RoPDMmJihpPWUsZT1udWxsKTt2YXIgbz1rdChuLHQs%0AbnVsbD09ZT9yOnUoZSksaSk7cmV0dXJuIG8ucm93PWZ1bmN0aW9uKG4pe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoP28ucmVzcG9uc2UobnVsbD09KGU9bik/cjp1KG4p%0AKTplfSxvfWZ1bmN0aW9uIHIobil7cmV0dXJuIGUucGFyc2Uobi5yZXNwb25zZVRl%0AeHQpfWZ1bmN0aW9uIHUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLnBh%0AcnNlKHQucmVzcG9uc2VUZXh0LG4pfX1mdW5jdGlvbiBpKHQpe3JldHVybiB0Lm1h%0AcChvKS5qb2luKG4pfWZ1bmN0aW9uIG8obil7cmV0dXJuIGEudGVzdChuKT8nIicr%0Abi5yZXBsYWNlKC9cIi9nLCciIicpKyciJzpufXZhciBhPW5ldyBSZWdFeHAoJ1si%0AJytuKyJcbl0iKSxjPW4uY2hhckNvZGVBdCgwKTtyZXR1cm4gZS5wYXJzZT1mdW5j%0AdGlvbihuLHQpe3ZhciByO3JldHVybiBlLnBhcnNlUm93cyhuLGZ1bmN0aW9uKG4s%0AZSl7aWYocilyZXR1cm4gcihuLGUtMSk7dmFyIHU9bmV3IEZ1bmN0aW9uKCJkIiwi%0AcmV0dXJuIHsiK24ubWFwKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIEpTT04uc3RyaW5n%0AaWZ5KG4pKyI6IGRbIit0KyJdIn0pLmpvaW4oIiwiKSsifSIpO3I9dD9mdW5jdGlv%0AbihuLGUpe3JldHVybiB0KHUobiksZSl9OnV9KX0sZS5wYXJzZVJvd3M9ZnVuY3Rp%0Ab24obix0KXtmdW5jdGlvbiBlKCl7aWYocz49bClyZXR1cm4gbztpZih1KXJldHVy%0AbiB1PSExLGk7dmFyIHQ9cztpZigzND09PW4uY2hhckNvZGVBdCh0KSl7Zm9yKHZh%0AciBlPXQ7ZSsrPGw7KWlmKDM0PT09bi5jaGFyQ29kZUF0KGUpKXtpZigzNCE9PW4u%0AY2hhckNvZGVBdChlKzEpKWJyZWFrOysrZX1zPWUrMjt2YXIgcj1uLmNoYXJDb2Rl%0AQXQoZSsxKTtyZXR1cm4gMTM9PT1yPyh1PSEwLDEwPT09bi5jaGFyQ29kZUF0KGUr%0AMikmJisrcyk6MTA9PT1yJiYodT0hMCksbi5zbGljZSh0KzEsZSkucmVwbGFjZSgv%0AIiIvZywnIicpfWZvcig7bD5zOyl7dmFyIHI9bi5jaGFyQ29kZUF0KHMrKyksYT0x%0AO2lmKDEwPT09cil1PSEwO2Vsc2UgaWYoMTM9PT1yKXU9ITAsMTA9PT1uLmNoYXJD%0Ab2RlQXQocykmJigrK3MsKythKTtlbHNlIGlmKHIhPT1jKWNvbnRpbnVlO3JldHVy%0AbiBuLnNsaWNlKHQscy1hKX1yZXR1cm4gbi5zbGljZSh0KX1mb3IodmFyIHIsdSxp%0APXt9LG89e30sYT1bXSxsPW4ubGVuZ3RoLHM9MCxmPTA7KHI9ZSgpKSE9PW87KXtm%0Ab3IodmFyIGg9W107ciE9PWkmJnIhPT1vOyloLnB1c2gocikscj1lKCk7KCF0fHwo%0AaD10KGgsZisrKSkpJiZhLnB1c2goaCl9cmV0dXJuIGF9LGUuZm9ybWF0PWZ1bmN0%0AaW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodFswXSkpcmV0dXJuIGUuZm9ybWF0Um93%0Acyh0KTt2YXIgcj1uZXcgaCx1PVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24o%0Abil7Zm9yKHZhciB0IGluIG4pci5oYXModCl8fHUucHVzaChyLmFkZCh0KSl9KSxb%0AdS5tYXAobykuam9pbihuKV0uY29uY2F0KHQubWFwKGZ1bmN0aW9uKHQpe3JldHVy%0AbiB1Lm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbyh0W25dKX0pLmpvaW4obil9KSku%0Aam9pbigiXG4iKX0sZS5mb3JtYXRSb3dzPWZ1bmN0aW9uKG4pe3JldHVybiBuLm1h%0AcChpKS5qb2luKCJcbiIpfSxlfSxWby5jc3Y9Vm8uZHN2KCIsIiwidGV4dC9jc3Yi%0AKSxWby50c3Y9Vm8uZHN2KCIJIiwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIp%0AO3ZhciBWYSxYYSwkYSxCYSxXYSxKYT1Kb1twKEpvLCJyZXF1ZXN0QW5pbWF0aW9u%0ARnJhbWUiKV18fGZ1bmN0aW9uKG4pe3NldFRpbWVvdXQobiwxNyl9O1ZvLnRpbWVy%0APWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoOzI+ciYmKHQ9%0AMCksMz5yJiYoZT1EYXRlLm5vdygpKTt2YXIgdT1lK3QsaT17YzpuLHQ6dSxmOiEx%0ALG46bnVsbH07WGE/WGEubj1pOlZhPWksWGE9aSwkYXx8KEJhPWNsZWFyVGltZW91%0AdChCYSksJGE9MSxKYShDdCkpfSxWby50aW1lci5mbHVzaD1mdW5jdGlvbigpe050%0AKCksenQoKX0sVm8ucm91bmQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gdD9NYXRoLnJv%0AdW5kKG4qKHQ9TWF0aC5wb3coMTAsdCkpKS90Ok1hdGgucm91bmQobil9O3ZhciBH%0AYT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0i%0ALCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXS5tYXAoVHQpO1ZvLmZvcm1hdFByZWZp%0AeD1mdW5jdGlvbihuLHQpe3ZhciBlPTA7cmV0dXJuIG4mJigwPm4mJihuKj0tMSks%0AdCYmKG49Vm8ucm91bmQobixMdChuLHQpKSksZT0xK01hdGguZmxvb3IoMWUtMTIr%0ATWF0aC5sb2cobikvTWF0aC5MTjEwKSxlPU1hdGgubWF4KC0yNCxNYXRoLm1pbigy%0ANCwzKk1hdGguZmxvb3IoKGUtMSkvMykpKSksR2FbOCtlLzNdfTt2YXIgS2E9Lyg/%0AOihbXntdKT8oWzw+PV5dKSk/KFsrXC0gXSk/KFskI10pPygwKT8oXGQrKT8oLCk/%0AKFwuLT9cZCspPyhbYS16JV0pPy9pLFFhPVZvLm1hcCh7YjpmdW5jdGlvbihuKXty%0AZXR1cm4gbi50b1N0cmluZygyKX0sYzpmdW5jdGlvbihuKXtyZXR1cm4gU3RyaW5n%0ALmZyb21DaGFyQ29kZShuKX0sbzpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmlu%0AZyg4KX0seDpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmluZygxNil9LFg6ZnVu%0AY3Rpb24obil7cmV0dXJuIG4udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LGc6%0AZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b1ByZWNpc2lvbih0KX0sZTpmdW5jdGlv%0AbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0%0AKXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxyOmZ1bmN0aW9uKG4sdCl7cmV0dXJuKG49%0AVm8ucm91bmQobixMdChuLHQpKSkudG9GaXhlZChNYXRoLm1heCgwLE1hdGgubWlu%0AKDIwLEx0KG4qKDErMWUtMTUpLHQpKSkpfX0pLG5jPVZvLnRpbWU9e30sdGM9RGF0%0AZTtEdC5wcm90b3R5cGU9e2dldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f%0ALmdldFVUQ0RhdGUoKX0sZ2V0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5n%0AZXRVVENEYXkoKX0sZ2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f%0ALmdldFVUQ0Z1bGxZZWFyKCl9LGdldEhvdXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRo%0AaXMuXy5nZXRVVENIb3VycygpfSxnZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXty%0AZXR1cm4gdGhpcy5fLmdldFVUQ01pbGxpc2Vjb25kcygpfSxnZXRNaW51dGVzOmZ1%0AbmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaW51dGVzKCl9LGdldE1vbnRo%0AOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNb250aCgpfSxnZXRTZWNv%0AbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENTZWNvbmRzKCl9LGdl%0AdFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFRpbWUoKX0sZ2V0VGlt%0AZXpvbmVPZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdmFsdWVPZjpmdW5jdGlv%0Abigpe3JldHVybiB0aGlzLl8udmFsdWVPZigpfSxzZXREYXRlOmZ1bmN0aW9uKCl7%0AZWMuc2V0VVRDRGF0ZS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RGF5OmZ1%0AbmN0aW9uKCl7ZWMuc2V0VVRDRGF5LmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxz%0AZXRGdWxsWWVhcjpmdW5jdGlvbigpe2VjLnNldFVUQ0Z1bGxZZWFyLmFwcGx5KHRo%0AaXMuXyxhcmd1bWVudHMpfSxzZXRIb3VyczpmdW5jdGlvbigpe2VjLnNldFVUQ0hv%0AdXJzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaWxsaXNlY29uZHM6ZnVu%0AY3Rpb24oKXtlYy5zZXRVVENNaWxsaXNlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3Vt%0AZW50cyl9LHNldE1pbnV0ZXM6ZnVuY3Rpb24oKXtlYy5zZXRVVENNaW51dGVzLmFw%0AcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNb250aDpmdW5jdGlvbigpe2VjLnNl%0AdFVUQ01vbnRoLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRTZWNvbmRzOmZ1%0AbmN0aW9uKCl7ZWMuc2V0VVRDU2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRz%0AKX0sc2V0VGltZTpmdW5jdGlvbigpe2VjLnNldFRpbWUuYXBwbHkodGhpcy5fLGFy%0AZ3VtZW50cyl9fTt2YXIgZWM9RGF0ZS5wcm90b3R5cGU7bmMueWVhcj1QdChmdW5j%0AdGlvbihuKXtyZXR1cm4gbj1uYy5kYXkobiksbi5zZXRNb250aCgwLDEpLG59LGZ1%0AbmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1%0AbmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KSxuYy55ZWFycz1uYy55%0AZWFyLnJhbmdlLG5jLnllYXJzLnV0Yz1uYy55ZWFyLnV0Yy5yYW5nZSxuYy5kYXk9%0AUHQoZnVuY3Rpb24obil7dmFyIHQ9bmV3IHRjKDJlMywwKTtyZXR1cm4gdC5zZXRG%0AdWxsWWVhcihuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgp%0AKSx0fSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSt0KX0sZnVu%0AY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF0ZSgpLTF9KSxuYy5kYXlzPW5jLmRheS5y%0AYW5nZSxuYy5kYXlzLnV0Yz1uYy5kYXkudXRjLnJhbmdlLG5jLmRheU9mWWVhcj1m%0AdW5jdGlvbihuKXt2YXIgdD1uYy55ZWFyKG4pO3JldHVybiBNYXRoLmZsb29yKChu%0ALXQtNmU0KihuLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNl%0AdCgpKSkvODY0ZTUpfSxbInN1bmRheSIsIm1vbmRheSIsInR1ZXNkYXkiLCJ3ZWRu%0AZXNkYXkiLCJ0aHVyc2RheSIsImZyaWRheSIsInNhdHVyZGF5Il0uZm9yRWFjaChm%0AdW5jdGlvbihuLHQpe3Q9Ny10O3ZhciBlPW5jW25dPVB0KGZ1bmN0aW9uKG4pe3Jl%0AdHVybihuPW5jLmRheShuKSkuc2V0RGF0ZShuLmdldERhdGUoKS0obi5nZXREYXko%0AKSt0KSU3KSxufSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSs3%0AKk1hdGguZmxvb3IodCkpfSxmdW5jdGlvbihuKXt2YXIgZT1uYy55ZWFyKG4pLmdl%0AdERheSgpO3JldHVybiBNYXRoLmZsb29yKChuYy5kYXlPZlllYXIobikrKGUrdCkl%0ANykvNyktKGUhPT10KX0pO25jW24rInMiXT1lLnJhbmdlLG5jW24rInMiXS51dGM9%0AZS51dGMucmFuZ2UsbmNbbisiT2ZZZWFyIl09ZnVuY3Rpb24obil7dmFyIGU9bmMu%0AeWVhcihuKS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigobmMuZGF5T2ZZZWFy%0AKG4pKyhlK3QpJTcpLzcpfX0pLG5jLndlZWs9bmMuc3VuZGF5LG5jLndlZWtzPW5j%0ALnN1bmRheS5yYW5nZSxuYy53ZWVrcy51dGM9bmMuc3VuZGF5LnV0Yy5yYW5nZSxu%0AYy53ZWVrT2ZZZWFyPW5jLnN1bmRheU9mWWVhcjt2YXIgcmM9eyItIjoiIixfOiIg%0AIiwwOiIwIn0sdWM9L15ccypcZCsvLGljPS9eJS87Vm8ubG9jYWxlPWZ1bmN0aW9u%0AKG4pe3JldHVybntudW1iZXJGb3JtYXQ6cXQobiksdGltZUZvcm1hdDpqdChuKX19%0AO3ZhciBvYz1Wby5sb2NhbGUoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3Jv%0AdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLGRhdGVUaW1lOiIlYSAlYiAlZSAl%0AWCAlWSIsZGF0ZToiJW0vJWQvJVkiLHRpbWU6IiVIOiVNOiVTIixwZXJpb2RzOlsi%0AQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2Vk%0AbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5%0AczpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1v%0AbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXki%0ALCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJO%0Ab3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJN%0AYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJO%0Ab3YiLCJEZWMiXX0pO1ZvLmZvcm1hdD1vYy5udW1iZXJGb3JtYXQsVm8uZ2VvPXt9%0ALGllLnByb3RvdHlwZT17czowLHQ6MCxhZGQ6ZnVuY3Rpb24obil7b2Uobix0aGlz%0ALnQsYWMpLG9lKGFjLnMsdGhpcy5zLHRoaXMpLHRoaXMucz90aGlzLnQrPWFjLnQ6%0AdGhpcy5zPWFjLnR9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSx2%0AYWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBhYz1uZXcgaWU7%0AVm8uZ2VvLnN0cmVhbT1mdW5jdGlvbihuLHQpe24mJmNjLmhhc093blByb3BlcnR5%0AKG4udHlwZSk/Y2Nbbi50eXBlXShuLHQpOmFlKG4sdCl9O3ZhciBjYz17RmVhdHVy%0AZTpmdW5jdGlvbihuLHQpe2FlKG4uZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0%0AaW9uOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uZmVhdHVyZXMscj0tMSx1PWUu%0AbGVuZ3RoOysrcjx1OylhZShlW3JdLmdlb21ldHJ5LHQpfX0sbGM9e1NwaGVyZTpm%0AdW5jdGlvbihuLHQpe3Quc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKG4sdCl7bj1u%0ALmNvb3JkaW5hdGVzLHQucG9pbnQoblswXSxuWzFdLG5bMl0pfSxNdWx0aVBvaW50%0AOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRpbmF0ZXMscj0tMSx1PWUu%0AbGVuZ3RoOysrcjx1OyluPWVbcl0sdC5wb2ludChuWzBdLG5bMV0sblsyXSl9LExp%0AbmVTdHJpbmc6ZnVuY3Rpb24obix0KXtjZShuLmNvb3JkaW5hdGVzLHQsMCl9LE11%0AbHRpTGluZVN0cmluZzpmdW5jdGlvbihuLHQpe2Zvcih2YXIgZT1uLmNvb3JkaW5h%0AdGVzLHI9LTEsdT1lLmxlbmd0aDsrK3I8dTspY2UoZVtyXSx0LDApfSxQb2x5Z29u%0AOmZ1bmN0aW9uKG4sdCl7bGUobi5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29u%0AOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRpbmF0ZXMscj0tMSx1PWUu%0AbGVuZ3RoOysrcjx1OylsZShlW3JdLHQpfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVu%0AY3Rpb24obix0KXtmb3IodmFyIGU9bi5nZW9tZXRyaWVzLHI9LTEsdT1lLmxlbmd0%0AaDsrK3I8dTspYWUoZVtyXSx0KX19O1ZvLmdlby5hcmVhPWZ1bmN0aW9uKG4pe3Jl%0AdHVybiBzYz0wLFZvLmdlby5zdHJlYW0obixoYyksc2N9O3ZhciBzYyxmYz1uZXcg%0AaWUsaGM9e3NwaGVyZTpmdW5jdGlvbigpe3NjKz00KndhfSxwb2ludDp2LGxpbmVT%0AdGFydDp2LGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmYy5yZXNl%0AdCgpLGhjLmxpbmVTdGFydD1zZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciBu%0APTIqZmM7c2MrPTA+bj80KndhK246bixoYy5saW5lU3RhcnQ9aGMubGluZUVuZD1o%0AYy5wb2ludD12fX07Vm8uZ2VvLmJvdW5kcz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4o%0Abix0KXt4LnB1c2goTT1bcz1uLGg9bl0pLGY+dCYmKGY9dCksdD5nJiYoZz10KX1m%0AdW5jdGlvbiB0KHQsZSl7dmFyIHI9ZmUoW3QqQ2EsZSpDYV0pO2lmKG0pe3ZhciB1%0APWdlKG0sciksaT1bdVsxXSwtdVswXSwwXSxvPWdlKGksdSk7ZGUobyksbz1tZShv%0AKTt2YXIgYz10LXAsbD1jPjA/MTotMSx2PW9bMF0qTmEqbCxkPWlhKGMpPjE4MDtp%0AZihkXih2PmwqcCYmbCp0PnYpKXt2YXIgeT1vWzFdKk5hO3k+ZyYmKGc9eSl9ZWxz%0AZSBpZih2PSh2KzM2MCklMzYwLTE4MCxkXih2PmwqcCYmbCp0PnYpKXt2YXIgeT0t%0Ab1sxXSpOYTtmPnkmJihmPXkpfWVsc2UgZj5lJiYoZj1lKSxlPmcmJihnPWUpO2Q/%0AcD50P2Eocyx0KT5hKHMsaCkmJihoPXQpOmEodCxoKT5hKHMsaCkmJihzPXQpOmg+%0APXM/KHM+dCYmKHM9dCksdD5oJiYoaD10KSk6dD5wP2Eocyx0KT5hKHMsaCkmJiho%0APXQpOmEodCxoKT5hKHMsaCkmJihzPXQpfWVsc2Ugbih0LGUpO209cixwPXR9ZnVu%0AY3Rpb24gZSgpe18ucG9pbnQ9dH1mdW5jdGlvbiByKCl7TVswXT1zLE1bMV09aCxf%0ALnBvaW50PW4sbT1udWxsfWZ1bmN0aW9uIHUobixlKXtpZihtKXt2YXIgcj1uLXA7%0AeSs9aWEocik+MTgwP3IrKHI+MD8zNjA6LTM2MCk6cn1lbHNlIHY9bixkPWU7aGMu%0AcG9pbnQobixlKSx0KG4sZSl9ZnVuY3Rpb24gaSgpe2hjLmxpbmVTdGFydCgpfWZ1%0AbmN0aW9uIG8oKXt1KHYsZCksaGMubGluZUVuZCgpLGlhKHkpPkVhJiYocz0tKGg9%0AMTgwKSksTVswXT1zLE1bMV09aCxtPW51bGx9ZnVuY3Rpb24gYShuLHQpe3JldHVy%0Abih0LT1uKTwwP3QrMzYwOnR9ZnVuY3Rpb24gYyhuLHQpe3JldHVybiBuWzBdLXRb%0AMF19ZnVuY3Rpb24gbChuLHQpe3JldHVybiB0WzBdPD10WzFdP3RbMF08PW4mJm48%0APXRbMV06bjx0WzBdfHx0WzFdPG59dmFyIHMsZixoLGcscCx2LGQsbSx5LHgsTSxf%0APXtwb2ludDpuLGxpbmVTdGFydDplLGxpbmVFbmQ6cixwb2x5Z29uU3RhcnQ6ZnVu%0AY3Rpb24oKXtfLnBvaW50PXUsXy5saW5lU3RhcnQ9aSxfLmxpbmVFbmQ9byx5PTAs%0AaGMucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtoYy5wb2x5%0AZ29uRW5kKCksXy5wb2ludD1uLF8ubGluZVN0YXJ0PWUsXy5saW5lRW5kPXIsMD5m%0AYz8ocz0tKGg9MTgwKSxmPS0oZz05MCkpOnk+RWE/Zz05MDotRWE+eSYmKGY9LTkw%0AKSxNWzBdPXMsTVsxXT1ofX07cmV0dXJuIGZ1bmN0aW9uKG4pe2c9aD0tKHM9Zj0x%0ALzApLHg9W10sVm8uZ2VvLnN0cmVhbShuLF8pO3ZhciB0PXgubGVuZ3RoO2lmKHQp%0Ae3guc29ydChjKTtmb3IodmFyIGUscj0xLHU9eFswXSxpPVt1XTt0PnI7KytyKWU9%0AeFtyXSxsKGVbMF0sdSl8fGwoZVsxXSx1KT8oYSh1WzBdLGVbMV0pPmEodVswXSx1%0AWzFdKSYmKHVbMV09ZVsxXSksYShlWzBdLHVbMV0pPmEodVswXSx1WzFdKSYmKHVb%0AMF09ZVswXSkpOmkucHVzaCh1PWUpO2Zvcih2YXIgbyxlLHA9LTEvMCx0PWkubGVu%0AZ3RoLTEscj0wLHU9aVt0XTt0Pj1yO3U9ZSwrK3IpZT1pW3JdLChvPWEodVsxXSxl%0AWzBdKSk+cCYmKHA9byxzPWVbMF0saD11WzFdKQp9cmV0dXJuIHg9TT1udWxsLDEv%0AMD09PXN8fDEvMD09PWY/W1swLzAsMC8wXSxbMC8wLDAvMF1dOltbcyxmXSxbaCxn%0AXV19fSgpLFZvLmdlby5jZW50cm9pZD1mdW5jdGlvbihuKXtnYz1wYz12Yz1kYz1t%0AYz15Yz14Yz1NYz1fYz1iYz13Yz0wLFZvLmdlby5zdHJlYW0obixTYyk7dmFyIHQ9%0AX2MsZT1iYyxyPXdjLHU9dCp0K2UqZStyKnI7cmV0dXJuIEFhPnUmJih0PXljLGU9%0AeGMscj1NYyxFYT5wYyYmKHQ9dmMsZT1kYyxyPW1jKSx1PXQqdCtlKmUrcipyLEFh%0APnUpP1swLzAsMC8wXTpbTWF0aC5hdGFuMihlLHQpKk5hLEcoci9NYXRoLnNxcnQo%0AdSkpKk5hXX07dmFyIGdjLHBjLHZjLGRjLG1jLHljLHhjLE1jLF9jLGJjLHdjLFNj%0APXtzcGhlcmU6dixwb2ludDp4ZSxsaW5lU3RhcnQ6X2UsbGluZUVuZDpiZSxwb2x5%0AZ29uU3RhcnQ6ZnVuY3Rpb24oKXtTYy5saW5lU3RhcnQ9d2V9LHBvbHlnb25FbmQ6%0AZnVuY3Rpb24oKXtTYy5saW5lU3RhcnQ9X2V9fSxrYz1DZShTZSxUZSxSZSxbLXdh%0ALC13YS8yXSksRWM9MWU5O1ZvLmdlby5jbGlwRXh0ZW50PWZ1bmN0aW9uKCl7dmFy%0AIG4sdCxlLHIsdSxpLG89e3N0cmVhbTpmdW5jdGlvbihuKXtyZXR1cm4gdSYmKHUu%0AdmFsaWQ9ITEpLHU9aShuKSx1LnZhbGlkPSEwLHV9LGV4dGVudDpmdW5jdGlvbihh%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1qZShuPSthWzBdWzBdLHQ9K2Fb%0AMF1bMV0sZT0rYVsxXVswXSxyPSthWzFdWzFdKSx1JiYodS52YWxpZD0hMSx1PW51%0AbGwpLG8pOltbbix0XSxbZSxyXV19fTtyZXR1cm4gby5leHRlbnQoW1swLDBdLFs5%0ANjAsNTAwXV0pfSwoVm8uZ2VvLmNvbmljRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0%0AdXJuIEZlKE9lKX0pLnJhdz1PZSxWby5nZW8uYWxiZXJzPWZ1bmN0aW9uKCl7cmV0%0AdXJuIFZvLmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbOTYsMF0pLmNlbnRl%0AcihbLS42LDM4LjddKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzAp%0AfSxWby5nZW8uYWxiZXJzVXNhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXt2YXIg%0AaT1uWzBdLG89blsxXTtyZXR1cm4gdD1udWxsLGUoaSxvKSx0fHwocihpLG8pLHQp%0AfHx1KGksbyksdH12YXIgdCxlLHIsdSxpPVZvLmdlby5hbGJlcnMoKSxvPVZvLmdl%0Aby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4%0ALjVdKS5wYXJhbGxlbHMoWzU1LDY1XSksYT1Wby5nZW8uY29uaWNFcXVhbEFyZWEo%0AKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4%0ALDE4XSksYz17cG9pbnQ6ZnVuY3Rpb24obixlKXt0PVtuLGVdfX07cmV0dXJuIG4u%0AaW52ZXJ0PWZ1bmN0aW9uKG4pe3ZhciB0PWkuc2NhbGUoKSxlPWkudHJhbnNsYXRl%0AKCkscj0oblswXS1lWzBdKS90LHU9KG5bMV0tZVsxXSkvdDtyZXR1cm4odT49LjEy%0AJiYuMjM0PnUmJnI+PS0uNDI1JiYtLjIxND5yP286dT49LjE2NiYmLjIzND51JiZy%0APj0tLjIxNCYmLS4xMTU+cj9hOmkpLmludmVydChuKX0sbi5zdHJlYW09ZnVuY3Rp%0Ab24obil7dmFyIHQ9aS5zdHJlYW0obiksZT1vLnN0cmVhbShuKSxyPWEuc3RyZWFt%0AKG4pO3JldHVybntwb2ludDpmdW5jdGlvbihuLHUpe3QucG9pbnQobix1KSxlLnBv%0AaW50KG4sdSksci5wb2ludChuLHUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0LnNwaGVy%0AZSgpLGUuc3BoZXJlKCksci5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7%0AdC5saW5lU3RhcnQoKSxlLmxpbmVTdGFydCgpLHIubGluZVN0YXJ0KCl9LGxpbmVF%0AbmQ6ZnVuY3Rpb24oKXt0LmxpbmVFbmQoKSxlLmxpbmVFbmQoKSxyLmxpbmVFbmQo%0AKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dC5wb2x5Z29uU3RhcnQoKSxlLnBv%0AbHlnb25TdGFydCgpLHIucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rp%0Ab24oKXt0LnBvbHlnb25FbmQoKSxlLnBvbHlnb25FbmQoKSxyLnBvbHlnb25FbmQo%0AKX19fSxuLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxl%0Abmd0aD8oaS5wcmVjaXNpb24odCksby5wcmVjaXNpb24odCksYS5wcmVjaXNpb24o%0AdCksbik6aS5wcmVjaXNpb24oKX0sbi5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4g%0AYXJndW1lbnRzLmxlbmd0aD8oaS5zY2FsZSh0KSxvLnNjYWxlKC4zNSp0KSxhLnNj%0AYWxlKHQpLG4udHJhbnNsYXRlKGkudHJhbnNsYXRlKCkpKTppLnNjYWxlKCl9LG4u%0AdHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVy%0AbiBpLnRyYW5zbGF0ZSgpO3ZhciBsPWkuc2NhbGUoKSxzPSt0WzBdLGY9K3RbMV07%0AcmV0dXJuIGU9aS50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW3MtLjQ1NSpsLGYt%0ALjIzOCpsXSxbcysuNDU1KmwsZisuMjM4KmxdXSkuc3RyZWFtKGMpLnBvaW50LHI9%0Aby50cmFuc2xhdGUoW3MtLjMwNypsLGYrLjIwMSpsXSkuY2xpcEV4dGVudChbW3Mt%0ALjQyNSpsK0VhLGYrLjEyKmwrRWFdLFtzLS4yMTQqbC1FYSxmKy4yMzQqbC1FYV1d%0AKS5zdHJlYW0oYykucG9pbnQsdT1hLnRyYW5zbGF0ZShbcy0uMjA1KmwsZisuMjEy%0AKmxdKS5jbGlwRXh0ZW50KFtbcy0uMjE0KmwrRWEsZisuMTY2KmwrRWFdLFtzLS4x%0AMTUqbC1FYSxmKy4yMzQqbC1FYV1dKS5zdHJlYW0oYykucG9pbnQsbn0sbi5zY2Fs%0AZSgxMDcwKX07dmFyIEFjLENjLE5jLHpjLExjLFRjLHFjPXtwb2ludDp2LGxpbmVT%0AdGFydDp2LGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtDYz0wLHFj%0ALmxpbmVTdGFydD1ZZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3FjLmxpbmVTdGFy%0AdD1xYy5saW5lRW5kPXFjLnBvaW50PXYsQWMrPWlhKENjLzIpfX0sUmM9e3BvaW50%0AOkllLGxpbmVTdGFydDp2LGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6dixwb2x5Z29u%0ARW5kOnZ9LERjPXtwb2ludDpYZSxsaW5lU3RhcnQ6JGUsbGluZUVuZDpCZSxwb2x5%0AZ29uU3RhcnQ6ZnVuY3Rpb24oKXtEYy5saW5lU3RhcnQ9V2V9LHBvbHlnb25FbmQ6%0AZnVuY3Rpb24oKXtEYy5wb2ludD1YZSxEYy5saW5lU3RhcnQ9JGUsRGMubGluZUVu%0AZD1CZX19O1ZvLmdlby5wYXRoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtyZXR1%0Acm4gbiYmKCJmdW5jdGlvbiI9PXR5cGVvZiBhJiZpLnBvaW50UmFkaXVzKCthLmFw%0AcGx5KHRoaXMsYXJndW1lbnRzKSksbyYmby52YWxpZHx8KG89dShpKSksVm8uZ2Vv%0ALnN0cmVhbShuLG8pKSxpLnJlc3VsdCgpfWZ1bmN0aW9uIHQoKXtyZXR1cm4gbz1u%0AdWxsLG59dmFyIGUscix1LGksbyxhPTQuNTtyZXR1cm4gbi5hcmVhPWZ1bmN0aW9u%0AKG4pe3JldHVybiBBYz0wLFZvLmdlby5zdHJlYW0obix1KHFjKSksQWN9LG4uY2Vu%0AdHJvaWQ9ZnVuY3Rpb24obil7cmV0dXJuIHZjPWRjPW1jPXljPXhjPU1jPV9jPWJj%0APXdjPTAsVm8uZ2VvLnN0cmVhbShuLHUoRGMpKSx3Yz9bX2Mvd2MsYmMvd2NdOk1j%0AP1t5Yy9NYyx4Yy9NY106bWM/W3ZjL21jLGRjL21jXTpbMC8wLDAvMF19LG4uYm91%0AbmRzPWZ1bmN0aW9uKG4pe3JldHVybiBMYz1UYz0tKE5jPXpjPTEvMCksVm8uZ2Vv%0ALnN0cmVhbShuLHUoUmMpKSxbW05jLHpjXSxbTGMsVGNdXX0sbi5wcm9qZWN0aW9u%0APWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PShlPW4pP24u%0Ac3RyZWFtfHxLZShuKTp3dCx0KCkpOmV9LG4uY29udGV4dD1mdW5jdGlvbihuKXty%0AZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0ocj1uKT9uZXcgWmU6bmV3%0AIEplKG4pLCJmdW5jdGlvbiIhPXR5cGVvZiBhJiZpLnBvaW50UmFkaXVzKGEpLHQo%0AKSk6cn0sbi5wb2ludFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRz%0ALmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OihpLnBvaW50UmFkaXVz%0AKCt0KSwrdCksbik6YX0sbi5wcm9qZWN0aW9uKFZvLmdlby5hbGJlcnNVc2EoKSku%0AY29udGV4dChudWxsKX0sVm8uZ2VvLnRyYW5zZm9ybT1mdW5jdGlvbihuKXtyZXR1%0Acm57c3RyZWFtOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBRZSh0KTtmb3IodmFyIHIg%0AaW4gbillW3JdPW5bcl07cmV0dXJuIGV9fX0sUWUucHJvdG90eXBlPXtwb2ludDpm%0AdW5jdGlvbihuLHQpe3RoaXMuc3RyZWFtLnBvaW50KG4sdCl9LHNwaGVyZTpmdW5j%0AdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24o%0AKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3Ro%0AaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhp%0Acy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0%0AaGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fSxWby5nZW8ucHJvamVjdGlvbj10cixW%0Aby5nZW8ucHJvamVjdGlvbk11dGF0b3I9ZXIsKFZvLmdlby5lcXVpcmVjdGFuZ3Vs%0AYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdHIodXIpfSkucmF3PXVyLmludmVydD11cixW%0Aby5nZW8ucm90YXRpb249ZnVuY3Rpb24obil7ZnVuY3Rpb24gdCh0KXtyZXR1cm4g%0AdD1uKHRbMF0qQ2EsdFsxXSpDYSksdFswXSo9TmEsdFsxXSo9TmEsdH1yZXR1cm4g%0Abj1vcihuWzBdJTM2MCpDYSxuWzFdKkNhLG4ubGVuZ3RoPjI/blsyXSpDYTowKSx0%0ALmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdD1uLmludmVydCh0WzBdKkNhLHRb%0AMV0qQ2EpLHRbMF0qPU5hLHRbMV0qPU5hLHR9LHR9LGlyLmludmVydD11cixWby5n%0AZW8uY2lyY2xlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBuPSJmdW5jdGlv%0AbiI9PXR5cGVvZiByP3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnIsdD1vcigtblsw%0AXSpDYSwtblsxXSpDYSwwKS5pbnZlcnQsdT1bXTtyZXR1cm4gZShudWxsLG51bGws%0AMSx7cG9pbnQ6ZnVuY3Rpb24obixlKXt1LnB1c2gobj10KG4sZSkpLG5bMF0qPU5h%0ALG5bMV0qPU5hfX0pLHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbdV19fXZh%0AciB0LGUscj1bMCwwXSx1PTY7cmV0dXJuIG4ub3JpZ2luPWZ1bmN0aW9uKHQpe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5hbmdsZT1mdW5jdGlv%0AbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zcigodD0rcikqQ2EsdSpD%0AYSksbik6dH0sbi5wcmVjaXNpb249ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50%0Acy5sZW5ndGg/KGU9c3IodCpDYSwodT0rcikqQ2EpLG4pOnV9LG4uYW5nbGUoOTAp%0AfSxWby5nZW8uZGlzdGFuY2U9ZnVuY3Rpb24obix0KXt2YXIgZSxyPSh0WzBdLW5b%0AMF0pKkNhLHU9blsxXSpDYSxpPXRbMV0qQ2Esbz1NYXRoLnNpbihyKSxhPU1hdGgu%0AY29zKHIpLGM9TWF0aC5zaW4odSksbD1NYXRoLmNvcyh1KSxzPU1hdGguc2luKGkp%0ALGY9TWF0aC5jb3MoaSk7cmV0dXJuIE1hdGguYXRhbjIoTWF0aC5zcXJ0KChlPWYq%0AbykqZSsoZT1sKnMtYypmKmEpKmUpLGMqcytsKmYqYSl9LFZvLmdlby5ncmF0aWN1%0AbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7cmV0dXJue3R5cGU6Ik11bHRpTGlu%0AZVN0cmluZyIsY29vcmRpbmF0ZXM6dCgpfX1mdW5jdGlvbiB0KCl7cmV0dXJuIFZv%0ALnJhbmdlKE1hdGguY2VpbChpL2QpKmQsdSxkKS5tYXAoaCkuY29uY2F0KFZvLnJh%0AbmdlKE1hdGguY2VpbChsL20pKm0sYyxtKS5tYXAoZykpLmNvbmNhdChWby5yYW5n%0AZShNYXRoLmNlaWwoci9wKSpwLGUscCkuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVy%0AbiBpYShuJWQpPkVhfSkubWFwKHMpKS5jb25jYXQoVm8ucmFuZ2UoTWF0aC5jZWls%0AKGEvdikqdixvLHYpLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gaWEobiVtKT5F%0AYX0pLm1hcChmKSl9dmFyIGUscix1LGksbyxhLGMsbCxzLGYsaCxnLHA9MTAsdj1w%0ALGQ9OTAsbT0zNjAseT0yLjU7cmV0dXJuIG4ubGluZXM9ZnVuY3Rpb24oKXtyZXR1%0Acm4gdCgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIs%0AY29vcmRpbmF0ZXM6bn19KX0sbi5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5%0AcGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltoKGkpLmNvbmNhdChnKGMpLnNsaWNl%0AKDEpLGgodSkucmV2ZXJzZSgpLnNsaWNlKDEpLGcobCkucmV2ZXJzZSgpLnNsaWNl%0AKDEpKV19fSxuLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxl%0Abmd0aD9uLm1ham9yRXh0ZW50KHQpLm1pbm9yRXh0ZW50KHQpOm4ubWlub3JFeHRl%0AbnQoKX0sbi5tYWpvckV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRz%0ALmxlbmd0aD8oaT0rdFswXVswXSx1PSt0WzFdWzBdLGw9K3RbMF1bMV0sYz0rdFsx%0AXVsxXSxpPnUmJih0PWksaT11LHU9dCksbD5jJiYodD1sLGw9YyxjPXQpLG4ucHJl%0AY2lzaW9uKHkpKTpbW2ksbF0sW3UsY11dfSxuLm1pbm9yRXh0ZW50PWZ1bmN0aW9u%0AKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdWzBdLGU9K3RbMV1b%0AMF0sYT0rdFswXVsxXSxvPSt0WzFdWzFdLHI+ZSYmKHQ9cixyPWUsZT10KSxhPm8m%0AJih0PWEsYT1vLG89dCksbi5wcmVjaXNpb24oeSkpOltbcixhXSxbZSxvXV19LG4u%0Ac3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uLm1ham9y%0AU3RlcCh0KS5taW5vclN0ZXAodCk6bi5taW5vclN0ZXAoKX0sbi5tYWpvclN0ZXA9%0AZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9K3RbMF0sbT0r%0AdFsxXSxuKTpbZCxtXX0sbi5taW5vclN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFy%0AZ3VtZW50cy5sZW5ndGg/KHA9K3RbMF0sdj0rdFsxXSxuKTpbcCx2XX0sbi5wcmVj%0AaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9K3Qs%0Acz1ocihhLG8sOTApLGY9Z3IocixlLHkpLGg9aHIobCxjLDkwKSxnPWdyKGksdSx5%0AKSxuKTp5fSxuLm1ham9yRXh0ZW50KFtbLTE4MCwtOTArRWFdLFsxODAsOTAtRWFd%0AXSkubWlub3JFeHRlbnQoW1stMTgwLC04MC1FYV0sWzE4MCw4MCtFYV1dKX0sVm8u%0AZ2VvLmdyZWF0QXJjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3JldHVybnt0eXBl%0AOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpbdHx8ci5hcHBseSh0aGlzLGFyZ3Vt%0AZW50cyksZXx8dS5hcHBseSh0aGlzLGFyZ3VtZW50cyldfX12YXIgdCxlLHI9cHIs%0AdT12cjtyZXR1cm4gbi5kaXN0YW5jZT1mdW5jdGlvbigpe3JldHVybiBWby5nZW8u%0AZGlzdGFuY2UodHx8ci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZXx8dS5hcHBseSh0%0AaGlzLGFyZ3VtZW50cykpfSxuLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aD8ocj1lLHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/bnVsbDpl%0ALG4pOnJ9LG4udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyh1PXQsZT0iZnVuY3Rpb24iPT10eXBlb2YgdD9udWxsOnQsbik6dX0sbi5w%0AcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uOjB9%0ALG59LFZvLmdlby5pbnRlcnBvbGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBkcihu%0AWzBdKkNhLG5bMV0qQ2EsdFswXSpDYSx0WzFdKkNhKX0sVm8uZ2VvLmxlbmd0aD1m%0AdW5jdGlvbihuKXtyZXR1cm4gUGM9MCxWby5nZW8uc3RyZWFtKG4sVWMpLFBjfTt2%0AYXIgUGMsVWM9e3NwaGVyZTp2LHBvaW50OnYsbGluZVN0YXJ0Om1yLGxpbmVFbmQ6%0Adixwb2x5Z29uU3RhcnQ6dixwb2x5Z29uRW5kOnZ9LGpjPXlyKGZ1bmN0aW9uKG4p%0Ae3JldHVybiBNYXRoLnNxcnQoMi8oMStuKSl9LGZ1bmN0aW9uKG4pe3JldHVybiAy%0AKk1hdGguYXNpbihuLzIpfSk7KFZvLmdlby5hemltdXRoYWxFcXVhbEFyZWE9ZnVu%0AY3Rpb24oKXtyZXR1cm4gdHIoamMpfSkucmF3PWpjO3ZhciBIYz15cihmdW5jdGlv%0AbihuKXt2YXIgdD1NYXRoLmFjb3Mobik7cmV0dXJuIHQmJnQvTWF0aC5zaW4odCl9%0ALHd0KTsoVm8uZ2VvLmF6aW11dGhhbEVxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0%0AdXJuIHRyKEhjKX0pLnJhdz1IYywoVm8uZ2VvLmNvbmljQ29uZm9ybWFsPWZ1bmN0%0AaW9uKCl7cmV0dXJuIEZlKHhyKX0pLnJhdz14ciwoVm8uZ2VvLmNvbmljRXF1aWRp%0Ac3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gRmUoTXIpfSkucmF3PU1yO3ZhciBGYz15%0AcihmdW5jdGlvbihuKXtyZXR1cm4gMS9ufSxNYXRoLmF0YW4pOyhWby5nZW8uZ25v%0AbW9uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gdHIoRmMpfSkucmF3PUZjLF9yLmludmVy%0AdD1mdW5jdGlvbihuLHQpe3JldHVybltuLDIqTWF0aC5hdGFuKE1hdGguZXhwKHQp%0AKS1rYV19LChWby5nZW8ubWVyY2F0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gYnIoX3Ip%0AfSkucmF3PV9yO3ZhciBPYz15cihmdW5jdGlvbigpe3JldHVybiAxfSxNYXRoLmFz%0AaW4pOyhWby5nZW8ub3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIHRyKE9j%0AKX0pLnJhdz1PYzt2YXIgWWM9eXIoZnVuY3Rpb24obil7cmV0dXJuIDEvKDErbil9%0ALGZ1bmN0aW9uKG4pe3JldHVybiAyKk1hdGguYXRhbihuKX0pOyhWby5nZW8uc3Rl%0AcmVvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiB0cihZYyl9KS5yYXc9WWMsd3Iu%0AaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuWy10LDIqTWF0aC5hdGFuKE1hdGgu%0AZXhwKG4pKS1rYV19LChWby5nZW8udHJhbnN2ZXJzZU1lcmNhdG9yPWZ1bmN0aW9u%0AKCl7dmFyIG49YnIod3IpLHQ9bi5jZW50ZXIsZT1uLnJvdGF0ZTtyZXR1cm4gbi5j%0AZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIG4/dChbLW5bMV0sblswXV0pOihuPXQo%0AKSxbblsxXSwtblswXV0pfSxuLnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gbj9l%0AKFtuWzBdLG5bMV0sbi5sZW5ndGg+Mj9uWzJdKzkwOjkwXSk6KG49ZSgpLFtuWzBd%0ALG5bMV0sblsyXS05MF0pfSxlKFswLDAsOTBdKX0pLnJhdz13cixWby5nZW9tPXt9%0ALFZvLmdlb20uaHVsbD1mdW5jdGlvbihuKXtmdW5jdGlvbiB0KG4pe2lmKG4ubGVu%0AZ3RoPDMpcmV0dXJuW107dmFyIHQsdT1idChlKSxpPWJ0KHIpLG89bi5sZW5ndGgs%0AYT1bXSxjPVtdO2Zvcih0PTA7bz50O3QrKylhLnB1c2goWyt1LmNhbGwodGhpcyxu%0AW3RdLHQpLCtpLmNhbGwodGhpcyxuW3RdLHQpLHRdKTtmb3IoYS5zb3J0KEFyKSx0%0APTA7bz50O3QrKyljLnB1c2goW2FbdF1bMF0sLWFbdF1bMV1dKTt2YXIgbD1Fcihh%0AKSxzPUVyKGMpLGY9c1swXT09PWxbMF0saD1zW3MubGVuZ3RoLTFdPT09bFtsLmxl%0Abmd0aC0xXSxnPVtdO2Zvcih0PWwubGVuZ3RoLTE7dD49MDstLXQpZy5wdXNoKG5b%0AYVtsW3RdXVsyXV0pO2Zvcih0PStmO3Q8cy5sZW5ndGgtaDsrK3QpZy5wdXNoKG5b%0AYVtzW3RdXVsyXV0pO3JldHVybiBnfXZhciBlPVNyLHI9a3I7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/dChuKToodC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVu%0AdHMubGVuZ3RoPyhlPW4sdCk6ZX0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1%0AbWVudHMubGVuZ3RoPyhyPW4sdCk6cn0sdCl9LFZvLmdlb20ucG9seWdvbj1mdW5j%0AdGlvbihuKXtyZXR1cm4gc2EobixJYyksbn07dmFyIEljPVZvLmdlb20ucG9seWdv%0Abi5wcm90b3R5cGU9W107SWMuYXJlYT1mdW5jdGlvbigpe2Zvcih2YXIgbix0PS0x%0ALGU9dGhpcy5sZW5ndGgscj10aGlzW2UtMV0sdT0wOysrdDxlOyluPXIscj10aGlz%0AW3RdLHUrPW5bMV0qclswXS1uWzBdKnJbMV07cmV0dXJuLjUqdX0sSWMuY2VudHJv%0AaWQ9ZnVuY3Rpb24obil7dmFyIHQsZSxyPS0xLHU9dGhpcy5sZW5ndGgsaT0wLG89%0AMCxhPXRoaXNbdS0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KG49LTEvKDYqdGhp%0Acy5hcmVhKCkpKTsrK3I8dTspdD1hLGE9dGhpc1tyXSxlPXRbMF0qYVsxXS1hWzBd%0AKnRbMV0saSs9KHRbMF0rYVswXSkqZSxvKz0odFsxXSthWzFdKSplO3JldHVybltp%0AKm4sbypuXX0sSWMuY2xpcD1mdW5jdGlvbihuKXtmb3IodmFyIHQsZSxyLHUsaSxv%0ALGE9enIobiksYz0tMSxsPXRoaXMubGVuZ3RoLXpyKHRoaXMpLHM9dGhpc1tsLTFd%0AOysrYzxsOyl7Zm9yKHQ9bi5zbGljZSgpLG4ubGVuZ3RoPTAsdT10aGlzW2NdLGk9%0AdFsocj10Lmxlbmd0aC1hKS0xXSxlPS0xOysrZTxyOylvPXRbZV0sQ3IobyxzLHUp%0APyhDcihpLHMsdSl8fG4ucHVzaChOcihpLG8scyx1KSksbi5wdXNoKG8pKTpDcihp%0ALHMsdSkmJm4ucHVzaChOcihpLG8scyx1KSksaT1vO2EmJm4ucHVzaChuWzBdKSxz%0APXV9cmV0dXJuIG59O3ZhciBaYyxWYyxYYywkYyxCYyxXYz1bXSxKYz1bXTtqci5w%0Acm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2Zvcih2YXIgbix0PXRoaXMuZWRn%0AZXMsZT10Lmxlbmd0aDtlLS07KW49dFtlXS5lZGdlLG4uYiYmbi5hfHx0LnNwbGlj%0AZShlLDEpO3JldHVybiB0LnNvcnQoRnIpLHQubGVuZ3RofSxKci5wcm90b3R5cGU9%0Ae3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRl%0AP3RoaXMuZWRnZS5hOnRoaXMuZWRnZS5ifSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4g%0AdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmI6dGhpcy5lZGdlLmF9%0AfSxHci5wcm90b3R5cGU9e2luc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLHIsdTtp%0AZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7%0AZm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0%0AaGlzLl8/KG49dHUodGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1u%0AKToodC5QPXQuTj1udWxsLHRoaXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVs%0AbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzspcj1lLlUsZT09PXIuTD8odT1yLlIs%0AdSYmdS5DPyhlLkM9dS5DPSExLHIuQz0hMCxuPXIpOihuPT09ZS5SJiYoUXIodGhp%0AcyxlKSxuPWUsZT1uLlUpLGUuQz0hMSxyLkM9ITAsbnUodGhpcyxyKSkpOih1PXIu%0ATCx1JiZ1LkM/KGUuQz11LkM9ITEsci5DPSEwLG49cik6KG49PT1lLkwmJihudSh0%0AaGlzLGUpLG49ZSxlPW4uVSksZS5DPSExLHIuQz0hMCxRcih0aGlzLHIpKSksZT1u%0ALlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1u%0ALlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciB0LGUscix1PW4u%0AVSxpPW4uTCxvPW4uUjtpZihlPWk/bz90dShvKTppOm8sdT91Lkw9PT1uP3UuTD1l%0AOnUuUj1lOnRoaXMuXz1lLGkmJm8/KHI9ZS5DLGUuQz1uLkMsZS5MPWksaS5VPWUs%0AZSE9PW8/KHU9ZS5VLGUuVT1uLlUsbj1lLlIsdS5MPW4sZS5SPW8sby5VPWUpOihl%0ALlU9dSx1PWUsbj1lLlIpKToocj1uLkMsbj1lKSxuJiYobi5VPXUpLCFyKXtpZihu%0AJiZuLkMpcmV0dXJuIG4uQz0hMSx2b2lkIDA7ZG97aWYobj09PXRoaXMuXylicmVh%0AaztpZihuPT09dS5MKXtpZih0PXUuUix0LkMmJih0LkM9ITEsdS5DPSEwLFFyKHRo%0AaXMsdSksdD11LlIpLHQuTCYmdC5MLkN8fHQuUiYmdC5SLkMpe3QuUiYmdC5SLkN8%0AfCh0LkwuQz0hMSx0LkM9ITAsbnUodGhpcyx0KSx0PXUuUiksdC5DPXUuQyx1LkM9%0AdC5SLkM9ITEsUXIodGhpcyx1KSxuPXRoaXMuXzticmVha319ZWxzZSBpZih0PXUu%0ATCx0LkMmJih0LkM9ITEsdS5DPSEwLG51KHRoaXMsdSksdD11LkwpLHQuTCYmdC5M%0ALkN8fHQuUiYmdC5SLkMpe3QuTCYmdC5MLkN8fCh0LlIuQz0hMSx0LkM9ITAsUXIo%0AdGhpcyx0KSx0PXUuTCksdC5DPXUuQyx1LkM9dC5MLkM9ITEsbnUodGhpcyx1KSxu%0APXRoaXMuXzticmVha310LkM9ITAsbj11LHU9dS5VfXdoaWxlKCFuLkMpO24mJihu%0ALkM9ITEpfX19LFZvLmdlb20udm9yb25vaT1mdW5jdGlvbihuKXtmdW5jdGlvbiB0%0AKG4pe3ZhciB0PW5ldyBBcnJheShuLmxlbmd0aCkscj1hWzBdWzBdLHU9YVswXVsx%0AXSxpPWFbMV1bMF0sbz1hWzFdWzFdO3JldHVybiBldShlKG4pLGEpLmNlbGxzLmZv%0AckVhY2goZnVuY3Rpb24oZSxhKXt2YXIgYz1lLmVkZ2VzLGw9ZS5zaXRlLHM9dFth%0AXT1jLmxlbmd0aD9jLm1hcChmdW5jdGlvbihuKXt2YXIgdD1uLnN0YXJ0KCk7cmV0%0AdXJuW3QueCx0LnldfSk6bC54Pj1yJiZsLng8PWkmJmwueT49dSYmbC55PD1vP1tb%0AcixvXSxbaSxvXSxbaSx1XSxbcix1XV06W107cy5wb2ludD1uW2FdfSksdH1mdW5j%0AdGlvbiBlKG4pe3JldHVybiBuLm1hcChmdW5jdGlvbihuLHQpe3JldHVybnt4Ok1h%0AdGgucm91bmQoaShuLHQpL0VhKSpFYSx5Ok1hdGgucm91bmQobyhuLHQpL0VhKSpF%0AYSxpOnR9fSl9dmFyIHI9U3IsdT1rcixpPXIsbz11LGE9R2M7cmV0dXJuIG4/dChu%0AKToodC5saW5rcz1mdW5jdGlvbihuKXtyZXR1cm4gZXUoZShuKSkuZWRnZXMuZmls%0AdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLmwmJm4ucn0pLm1hcChmdW5jdGlvbih0%0AKXtyZXR1cm57c291cmNlOm5bdC5sLmldLHRhcmdldDpuW3Quci5pXX19KX0sdC50%0AcmlhbmdsZXM9ZnVuY3Rpb24obil7dmFyIHQ9W107cmV0dXJuIGV1KGUobikpLmNl%0AbGxzLmZvckVhY2goZnVuY3Rpb24oZSxyKXtmb3IodmFyIHUsaSxvPWUuc2l0ZSxh%0APWUuZWRnZXMuc29ydChGciksYz0tMSxsPWEubGVuZ3RoLHM9YVtsLTFdLmVkZ2Us%0AZj1zLmw9PT1vP3MucjpzLmw7KytjPGw7KXU9cyxpPWYscz1hW2NdLmVkZ2UsZj1z%0ALmw9PT1vP3MucjpzLmwscjxpLmkmJnI8Zi5pJiZ1dShvLGksZik8MCYmdC5wdXNo%0AKFtuW3JdLG5baS5pXSxuW2YuaV1dKX0pLHR9LHQueD1mdW5jdGlvbihuKXtyZXR1%0Acm4gYXJndW1lbnRzLmxlbmd0aD8oaT1idChyPW4pLHQpOnJ9LHQueT1mdW5jdGlv%0AbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1idCh1PW4pLHQpOnV9LHQu%0AY2xpcEV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o%0AYT1udWxsPT1uP0djOm4sdCk6YT09PUdjP251bGw6YX0sdC5zaXplPWZ1bmN0aW9u%0AKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QuY2xpcEV4dGVudChuJiZbWzAs%0AMF0sbl0pOmE9PT1HYz9udWxsOmEmJmFbMV19LHQpfTt2YXIgR2M9W1stMWU2LC0x%0AZTZdLFsxZTYsMWU2XV07Vm8uZ2VvbS5kZWxhdW5heT1mdW5jdGlvbihuKXtyZXR1%0Acm4gVm8uZ2VvbS52b3Jvbm9pKCkudHJpYW5nbGVzKG4pfSxWby5nZW9tLnF1YWR0%0AcmVlPWZ1bmN0aW9uKG4sdCxlLHIsdSl7ZnVuY3Rpb24gaShuKXtmdW5jdGlvbiBp%0AKG4sdCxlLHIsdSxpLG8sYSl7aWYoIWlzTmFOKGUpJiYhaXNOYU4ocikpaWYobi5s%0AZWFmKXt2YXIgYz1uLngscz1uLnk7aWYobnVsbCE9YylpZihpYShjLWUpK2lhKHMt%0Acik8LjAxKWwobix0LGUscix1LGksbyxhKTtlbHNle3ZhciBmPW4ucG9pbnQ7bi54%0APW4ueT1uLnBvaW50PW51bGwsbChuLGYsYyxzLHUsaSxvLGEpLGwobix0LGUscix1%0ALGksbyxhKX1lbHNlIG4ueD1lLG4ueT1yLG4ucG9pbnQ9dH1lbHNlIGwobix0LGUs%0Acix1LGksbyxhKX1mdW5jdGlvbiBsKG4sdCxlLHIsdSxvLGEsYyl7dmFyIGw9LjUq%0AKHUrYSkscz0uNSoobytjKSxmPWU+PWwsaD1yPj1zLGc9KGg8PDEpK2Y7bi5sZWFm%0APSExLG49bi5ub2Rlc1tnXXx8KG4ubm9kZXNbZ109YXUoKSksZj91PWw6YT1sLGg/%0Abz1zOmM9cyxpKG4sdCxlLHIsdSxvLGEsYyl9dmFyIHMsZixoLGcscCx2LGQsbSx5%0ALHg9YnQoYSksTT1idChjKTtpZihudWxsIT10KXY9dCxkPWUsbT1yLHk9dTtlbHNl%0AIGlmKG09eT0tKHY9ZD0xLzApLGY9W10saD1bXSxwPW4ubGVuZ3RoLG8pZm9yKGc9%0AMDtwPmc7KytnKXM9bltnXSxzLng8diYmKHY9cy54KSxzLnk8ZCYmKGQ9cy55KSxz%0ALng+bSYmKG09cy54KSxzLnk+eSYmKHk9cy55KSxmLnB1c2gocy54KSxoLnB1c2go%0Acy55KTtlbHNlIGZvcihnPTA7cD5nOysrZyl7dmFyIF89K3gocz1uW2ddLGcpLGI9%0AK00ocyxnKTt2Pl8mJih2PV8pLGQ+YiYmKGQ9YiksXz5tJiYobT1fKSxiPnkmJih5%0APWIpLGYucHVzaChfKSxoLnB1c2goYil9dmFyIHc9bS12LFM9eS1kO3c+Uz95PWQr%0AdzptPXYrUzt2YXIgaz1hdSgpO2lmKGsuYWRkPWZ1bmN0aW9uKG4pe2koayxuLCt4%0AKG4sKytnKSwrTShuLGcpLHYsZCxtLHkpfSxrLnZpc2l0PWZ1bmN0aW9uKG4pe2N1%0AKG4sayx2LGQsbSx5KX0sZz0tMSxudWxsPT10KXtmb3IoOysrZzxwOylpKGssbltn%0AXSxmW2ddLGhbZ10sdixkLG0seSk7LS1nfWVsc2Ugbi5mb3JFYWNoKGsuYWRkKTty%0AZXR1cm4gZj1oPW49cz1udWxsLGt9dmFyIG8sYT1TcixjPWtyO3JldHVybihvPWFy%0AZ3VtZW50cy5sZW5ndGgpPyhhPWl1LGM9b3UsMz09PW8mJih1PWUscj10LGU9dD0w%0AKSxpKG4pKTooaS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro%0APyhhPW4saSk6YX0saS55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVu%0AZ3RoPyhjPW4saSk6Y30saS5leHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KG51bGw9PW4/dD1lPXI9dT1udWxsOih0PStuWzBdWzBdLGU9%0AK25bMF1bMV0scj0rblsxXVswXSx1PStuWzFdWzFdKSxpKTpudWxsPT10P251bGw6%0AW1t0LGVdLFtyLHVdXX0saS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVu%0AdHMubGVuZ3RoPyhudWxsPT1uP3Q9ZT1yPXU9bnVsbDoodD1lPTAscj0rblswXSx1%0APStuWzFdKSxpKTpudWxsPT10P251bGw6W3ItdCx1LWVdfSxpKX0sVm8uaW50ZXJw%0Ab2xhdGVSZ2I9bHUsVm8uaW50ZXJwb2xhdGVPYmplY3Q9c3UsVm8uaW50ZXJwb2xh%0AdGVOdW1iZXI9ZnUsVm8uaW50ZXJwb2xhdGVTdHJpbmc9aHU7dmFyIEtjPS9bLStd%0APyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxRYz1uZXcg%0AUmVnRXhwKEtjLnNvdXJjZSwiZyIpO1ZvLmludGVycG9sYXRlPWd1LFZvLmludGVy%0AcG9sYXRvcnM9W2Z1bmN0aW9uKG4sdCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuKCJz%0AdHJpbmciPT09ZT9aYS5oYXModCl8fC9eKCN8cmdiXCh8aHNsXCgpLy50ZXN0KHQp%0AP2x1Omh1OnQgaW5zdGFuY2VvZiBldD9sdTpBcnJheS5pc0FycmF5KHQpP3B1OiJv%0AYmplY3QiPT09ZSYmaXNOYU4odCk/c3U6ZnUpKG4sdCl9XSxWby5pbnRlcnBvbGF0%0AZUFycmF5PXB1O3ZhciBubD1mdW5jdGlvbigpe3JldHVybiB3dH0sdGw9Vm8ubWFw%0AKHtsaW5lYXI6bmwscG9seTpfdSxxdWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHl1fSxj%0AdWJpYzpmdW5jdGlvbigpe3JldHVybiB4dX0sc2luOmZ1bmN0aW9uKCl7cmV0dXJu%0AIGJ1fSxleHA6ZnVuY3Rpb24oKXtyZXR1cm4gd3V9LGNpcmNsZTpmdW5jdGlvbigp%0Ae3JldHVybiBTdX0sZWxhc3RpYzprdSxiYWNrOkV1LGJvdW5jZTpmdW5jdGlvbigp%0Ae3JldHVybiBBdX19KSxlbD1Wby5tYXAoeyJpbiI6d3Qsb3V0OmR1LCJpbi1vdXQi%0AOm11LCJvdXQtaW4iOmZ1bmN0aW9uKG4pe3JldHVybiBtdShkdShuKSl9fSk7Vm8u%0AZWFzZT1mdW5jdGlvbihuKXt2YXIgdD1uLmluZGV4T2YoIi0iKSxlPXQ+PTA/bi5z%0AbGljZSgwLHQpOm4scj10Pj0wP24uc2xpY2UodCsxKToiaW4iO3JldHVybiBlPXRs%0ALmdldChlKXx8bmwscj1lbC5nZXQocil8fHd0LHZ1KHIoZS5hcHBseShudWxsLFhv%0ALmNhbGwoYXJndW1lbnRzLDEpKSkpfSxWby5pbnRlcnBvbGF0ZUhjbD1DdSxWby5p%0AbnRlcnBvbGF0ZUhzbD1OdSxWby5pbnRlcnBvbGF0ZUxhYj16dSxWby5pbnRlcnBv%0AbGF0ZVJvdW5kPUx1LFZvLnRyYW5zZm9ybT1mdW5jdGlvbihuKXt2YXIgdD1Cby5j%0AcmVhdGVFbGVtZW50TlMoVm8ubnMucHJlZml4LnN2ZywiZyIpO3JldHVybihWby50%0AcmFuc2Zvcm09ZnVuY3Rpb24obil7aWYobnVsbCE9bil7dC5zZXRBdHRyaWJ1dGUo%0AInRyYW5zZm9ybSIsbik7dmFyIGU9dC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xp%0AZGF0ZSgpfXJldHVybiBuZXcgVHUoZT9lLm1hdHJpeDpybCl9KShuKX0sVHUucHJv%0AdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3Ro%0AaXMudHJhbnNsYXRlKyIpcm90YXRlKCIrdGhpcy5yb3RhdGUrIilza2V3WCgiK3Ro%0AaXMuc2tldysiKXNjYWxlKCIrdGhpcy5zY2FsZSsiKSJ9O3ZhciBybD17YToxLGI6%0AMCxjOjAsZDoxLGU6MCxmOjB9O1ZvLmludGVycG9sYXRlVHJhbnNmb3JtPVB1LFZv%0ALmxheW91dD17fSxWby5sYXlvdXQuYnVuZGxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1%0AbmN0aW9uKG4pe2Zvcih2YXIgdD1bXSxlPS0xLHI9bi5sZW5ndGg7KytlPHI7KXQu%0AcHVzaChIdShuW2VdKSk7cmV0dXJuIHR9fSxWby5sYXlvdXQuY2hvcmQ9ZnVuY3Rp%0Ab24oKXtmdW5jdGlvbiBuKCl7dmFyIG4sbCxmLGgsZyxwPXt9LHY9W10sZD1Wby5y%0AYW5nZShpKSxtPVtdO2ZvcihlPVtdLHI9W10sbj0wLGg9LTE7KytoPGk7KXtmb3Io%0AbD0wLGc9LTE7KytnPGk7KWwrPXVbaF1bZ107di5wdXNoKGwpLG0ucHVzaChWby5y%0AYW5nZShpKSksbis9bH1mb3IobyYmZC5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0dXJu%0AIG8odltuXSx2W3RdKX0pLGEmJm0uZm9yRWFjaChmdW5jdGlvbihuLHQpe24uc29y%0AdChmdW5jdGlvbihuLGUpe3JldHVybiBhKHVbdF1bbl0sdVt0XVtlXSl9KX0pLG49%0AKFNhLXMqaSkvbixsPTAsaD0tMTsrK2g8aTspe2ZvcihmPWwsZz0tMTsrK2c8aTsp%0Ae3ZhciB5PWRbaF0seD1tW3ldW2ddLE09dVt5XVt4XSxfPWwsYj1sKz1NKm47cFt5%0AKyItIit4XT17aW5kZXg6eSxzdWJpbmRleDp4LHN0YXJ0QW5nbGU6XyxlbmRBbmds%0AZTpiLHZhbHVlOk19fXJbeV09e2luZGV4Onksc3RhcnRBbmdsZTpmLGVuZEFuZ2xl%0AOmwsdmFsdWU6KGwtZikvbn0sbCs9c31mb3IoaD0tMTsrK2g8aTspZm9yKGc9aC0x%0AOysrZzxpOyl7dmFyIHc9cFtoKyItIitnXSxTPXBbZysiLSIraF07KHcudmFsdWV8%0AfFMudmFsdWUpJiZlLnB1c2gody52YWx1ZTxTLnZhbHVlP3tzb3VyY2U6Uyx0YXJn%0AZXQ6d306e3NvdXJjZTp3LHRhcmdldDpTfSl9YyYmdCgpfWZ1bmN0aW9uIHQoKXtl%0ALnNvcnQoZnVuY3Rpb24obix0KXtyZXR1cm4gYygobi5zb3VyY2UudmFsdWUrbi50%0AYXJnZXQudmFsdWUpLzIsKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlKS8y%0AKX0pfXZhciBlLHIsdSxpLG8sYSxjLGw9e30scz0wO3JldHVybiBsLm1hdHJpeD1m%0AdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0odT1uKSYmdS5s%0AZW5ndGgsZT1yPW51bGwsbCk6dX0sbC5wYWRkaW5nPWZ1bmN0aW9uKG4pe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhzPW4sZT1yPW51bGwsbCk6c30sbC5zb3J0R3Jv%0AdXBzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW4sZT1y%0APW51bGwsbCk6b30sbC5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKG4pe3JldHVybiBh%0Acmd1bWVudHMubGVuZ3RoPyhhPW4sZT1udWxsLGwpOmF9LGwuc29ydENob3Jkcz1m%0AdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uLGUmJnQoKSxs%0AKTpjfSxsLmNob3Jkcz1mdW5jdGlvbigpe3JldHVybiBlfHxuKCksZX0sbC5ncm91%0AcHM9ZnVuY3Rpb24oKXtyZXR1cm4gcnx8bigpLHJ9LGx9LFZvLmxheW91dC5mb3Jj%0AZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxy%0ALHUpe2lmKHQucG9pbnQhPT1uKXt2YXIgaT10LmN4LW4ueCxvPXQuY3ktbi55LGE9%0AdS1lLGM9aSppK28qbztpZihjPmEqYS9kKXtpZihwPmMpe3ZhciBsPXQuY2hhcmdl%0AL2M7bi5weC09aSpsLG4ucHktPW8qbH1yZXR1cm4hMH1pZih0LnBvaW50JiZjJiZw%0APmMpe3ZhciBsPXQucG9pbnRDaGFyZ2UvYztuLnB4LT1pKmwsbi5weS09bypsfX1y%0AZXR1cm4hdC5jaGFyZ2V9fWZ1bmN0aW9uIHQobil7bi5weD1Wby5ldmVudC54LG4u%0AcHk9Vm8uZXZlbnQueSxhLnJlc3VtZSgpfXZhciBlLHIsdSxpLG8sYT17fSxjPVZv%0ALmRpc3BhdGNoKCJzdGFydCIsInRpY2siLCJlbmQiKSxsPVsxLDFdLHM9LjksZj11%0AbCxoPWlsLGc9LTMwLHA9b2wsdj0uMSxkPS42NCxtPVtdLHk9W107cmV0dXJuIGEu%0AdGljaz1mdW5jdGlvbigpe2lmKChyKj0uOTkpPC4wMDUpcmV0dXJuIGMuZW5kKHt0%0AeXBlOiJlbmQiLGFscGhhOnI9MH0pLCEwO3ZhciB0LGUsYSxmLGgscCxkLHgsTSxf%0APW0ubGVuZ3RoLGI9eS5sZW5ndGg7Zm9yKGU9MDtiPmU7KytlKWE9eVtlXSxmPWEu%0Ac291cmNlLGg9YS50YXJnZXQseD1oLngtZi54LE09aC55LWYueSwocD14KngrTSpN%0AKSYmKHA9cippW2VdKigocD1NYXRoLnNxcnQocCkpLXVbZV0pL3AseCo9cCxNKj1w%0ALGgueC09eCooZD1mLndlaWdodC8oaC53ZWlnaHQrZi53ZWlnaHQpKSxoLnktPU0q%0AZCxmLngrPXgqKGQ9MS1kKSxmLnkrPU0qZCk7aWYoKGQ9cip2KSYmKHg9bFswXS8y%0ALE09bFsxXS8yLGU9LTEsZCkpZm9yKDsrK2U8XzspYT1tW2VdLGEueCs9KHgtYS54%0AKSpkLGEueSs9KE0tYS55KSpkO2lmKGcpZm9yKFh1KHQ9Vm8uZ2VvbS5xdWFkdHJl%0AZShtKSxyLG8pLGU9LTE7KytlPF87KShhPW1bZV0pLmZpeGVkfHx0LnZpc2l0KG4o%0AYSkpO2ZvcihlPS0xOysrZTxfOylhPW1bZV0sYS5maXhlZD8oYS54PWEucHgsYS55%0APWEucHkpOihhLngtPShhLnB4LShhLnB4PWEueCkpKnMsYS55LT0oYS5weS0oYS5w%0AeT1hLnkpKSpzKTtjLnRpY2soe3R5cGU6InRpY2siLGFscGhhOnJ9KX0sYS5ub2Rl%0Acz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1uLGEpOm19%0ALGEubGlua3M9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9%0AbixhKTp5fSxhLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KGw9bixhKTpsfSxhLmxpbmtEaXN0YW5jZT1mdW5jdGlvbihuKXtyZXR1cm4g%0AYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOituLGEp%0AOmZ9LGEuZGlzdGFuY2U9YS5saW5rRGlzdGFuY2UsYS5saW5rU3RyZW5ndGg9ZnVu%0AY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09%0AdHlwZW9mIG4/bjorbixhKTpofSxhLmZyaWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhzPStuLGEpOnN9LGEuY2hhcmdlPWZ1bmN0aW9u%0AKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSJmdW5jdGlvbiI9PXR5cGVv%0AZiBuP246K24sYSk6Z30sYS5jaGFyZ2VEaXN0YW5jZT1mdW5jdGlvbihuKXtyZXR1%0Acm4gYXJndW1lbnRzLmxlbmd0aD8ocD1uKm4sYSk6TWF0aC5zcXJ0KHApfSxhLmdy%0AYXZpdHk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9K24s%0AYSk6dn0sYS50aGV0YT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0%0AaD8oZD1uKm4sYSk6TWF0aC5zcXJ0KGQpfSxhLmFscGhhPWZ1bmN0aW9uKG4pe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStuLHI/cj1uPjA/bjowOm4+MCYmKGMu%0Ac3RhcnQoe3R5cGU6InN0YXJ0IixhbHBoYTpyPW59KSxWby50aW1lcihhLnRpY2sp%0AKSxhKTpyfSxhLnN0YXJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHIpe2lmKCFl%0AKXtmb3IoZT1uZXcgQXJyYXkoYyksYT0wO2M+YTsrK2EpZVthXT1bXTtmb3IoYT0w%0AO2w+YTsrK2Epe3ZhciB1PXlbYV07ZVt1LnNvdXJjZS5pbmRleF0ucHVzaCh1LnRh%0AcmdldCksZVt1LnRhcmdldC5pbmRleF0ucHVzaCh1LnNvdXJjZSl9fWZvcih2YXIg%0AaSxvPWVbdF0sYT0tMSxsPW8ubGVuZ3RoOysrYTxsOylpZighaXNOYU4oaT1vW2Fd%0AW25dKSlyZXR1cm4gaTtyZXR1cm4gTWF0aC5yYW5kb20oKSpyfXZhciB0LGUscixj%0APW0ubGVuZ3RoLHM9eS5sZW5ndGgscD1sWzBdLHY9bFsxXTtmb3IodD0wO2M+dDsr%0AK3QpKHI9bVt0XSkuaW5kZXg9dCxyLndlaWdodD0wO2Zvcih0PTA7cz50OysrdCly%0APXlbdF0sIm51bWJlciI9PXR5cGVvZiByLnNvdXJjZSYmKHIuc291cmNlPW1bci5z%0Ab3VyY2VdKSwibnVtYmVyIj09dHlwZW9mIHIudGFyZ2V0JiYoci50YXJnZXQ9bVty%0ALnRhcmdldF0pLCsrci5zb3VyY2Uud2VpZ2h0LCsrci50YXJnZXQud2VpZ2h0O2Zv%0Acih0PTA7Yz50OysrdClyPW1bdF0saXNOYU4oci54KSYmKHIueD1uKCJ4IixwKSks%0AaXNOYU4oci55KSYmKHIueT1uKCJ5Iix2KSksaXNOYU4oci5weCkmJihyLnB4PXIu%0AeCksaXNOYU4oci5weSkmJihyLnB5PXIueSk7aWYodT1bXSwiZnVuY3Rpb24iPT10%0AeXBlb2YgZilmb3IodD0wO3M+dDsrK3QpdVt0XT0rZi5jYWxsKHRoaXMseVt0XSx0%0AKTtlbHNlIGZvcih0PTA7cz50OysrdCl1W3RdPWY7aWYoaT1bXSwiZnVuY3Rpb24i%0APT10eXBlb2YgaClmb3IodD0wO3M+dDsrK3QpaVt0XT0raC5jYWxsKHRoaXMseVt0%0AXSx0KTtlbHNlIGZvcih0PTA7cz50OysrdClpW3RdPWg7aWYobz1bXSwiZnVuY3Rp%0Ab24iPT10eXBlb2YgZylmb3IodD0wO2M+dDsrK3Qpb1t0XT0rZy5jYWxsKHRoaXMs%0AbVt0XSx0KTtlbHNlIGZvcih0PTA7Yz50OysrdClvW3RdPWc7cmV0dXJuIGEucmVz%0AdW1lKCl9LGEucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYWxwaGEoLjEpfSxh%0ALnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hbHBoYSgwKX0sYS5kcmFnPWZ1bmN0%0AaW9uKCl7cmV0dXJuIGV8fChlPVZvLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4od3Qp%0ALm9uKCJkcmFnc3RhcnQuZm9yY2UiLFl1KS5vbigiZHJhZy5mb3JjZSIsdCkub24o%0AImRyYWdlbmQuZm9yY2UiLEl1KSksYXJndW1lbnRzLmxlbmd0aD8odGhpcy5vbigi%0AbW91c2VvdmVyLmZvcmNlIixadSkub24oIm1vdXNlb3V0LmZvcmNlIixWdSkuY2Fs%0AbChlKSx2b2lkIDApOmV9LFZvLnJlYmluZChhLGMsIm9uIil9O3ZhciB1bD0yMCxp%0AbD0xLG9sPTEvMDtWby5sYXlvdXQuaGllcmFyY2h5PWZ1bmN0aW9uKCl7ZnVuY3Rp%0Ab24gbih1KXt2YXIgaSxvPVt1XSxhPVtdO2Zvcih1LmRlcHRoPTA7bnVsbCE9KGk9%0Aby5wb3AoKSk7KWlmKGEucHVzaChpKSwobD1lLmNhbGwobixpLGkuZGVwdGgpKSYm%0AKGM9bC5sZW5ndGgpKXtmb3IodmFyIGMsbCxzOy0tYz49MDspby5wdXNoKHM9bFtj%0AXSkscy5wYXJlbnQ9aSxzLmRlcHRoPWkuZGVwdGgrMTtyJiYoaS52YWx1ZT0wKSxp%0ALmNoaWxkcmVuPWx9ZWxzZSByJiYoaS52YWx1ZT0rci5jYWxsKG4saSxpLmRlcHRo%0AKXx8MCksZGVsZXRlIGkuY2hpbGRyZW47cmV0dXJuIFd1KHUsZnVuY3Rpb24obil7%0AdmFyIGUsdTt0JiYoZT1uLmNoaWxkcmVuKSYmZS5zb3J0KHQpLHImJih1PW4ucGFy%0AZW50KSYmKHUudmFsdWUrPW4udmFsdWUpfSksYX12YXIgdD1LdSxlPUp1LHI9R3U7%0AcmV0dXJuIG4uc29ydD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0%0AaD8odD1lLG4pOnR9LG4uY2hpbGRyZW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5yZXZhbHVlPWZ1bmN0aW9u%0AKHQpe3JldHVybiByJiYoQnUodCxmdW5jdGlvbihuKXtuLmNoaWxkcmVuJiYobi52%0AYWx1ZT0wKX0pLFd1KHQsZnVuY3Rpb24odCl7dmFyIGU7dC5jaGlsZHJlbnx8KHQu%0AdmFsdWU9K3IuY2FsbChuLHQsdC5kZXB0aCl8fDApLChlPXQucGFyZW50KSYmKGUu%0AdmFsdWUrPXQudmFsdWUpfSkpLHR9LG59LFZvLmxheW91dC5wYXJ0aXRpb249ZnVu%0AY3Rpb24oKXtmdW5jdGlvbiBuKHQsZSxyLHUpe3ZhciBpPXQuY2hpbGRyZW47aWYo%0AdC54PWUsdC55PXQuZGVwdGgqdSx0LmR4PXIsdC5keT11LGkmJihvPWkubGVuZ3Ro%0AKSl7dmFyIG8sYSxjLGw9LTE7Zm9yKHI9dC52YWx1ZT9yL3QudmFsdWU6MDsrK2w8%0AbzspbihhPWlbbF0sZSxjPWEudmFsdWUqcix1KSxlKz1jfX1mdW5jdGlvbiB0KG4p%0Ae3ZhciBlPW4uY2hpbGRyZW4scj0wO2lmKGUmJih1PWUubGVuZ3RoKSlmb3IodmFy%0AIHUsaT0tMTsrK2k8dTspcj1NYXRoLm1heChyLHQoZVtpXSkpO3JldHVybiAxK3J9%0AZnVuY3Rpb24gZShlLGkpe3ZhciBvPXIuY2FsbCh0aGlzLGUsaSk7cmV0dXJuIG4o%0Ab1swXSwwLHVbMF0sdVsxXS90KG9bMF0pKSxvfXZhciByPVZvLmxheW91dC5oaWVy%0AYXJjaHkoKSx1PVsxLDFdO3JldHVybiBlLnNpemU9ZnVuY3Rpb24obil7cmV0dXJu%0AIGFyZ3VtZW50cy5sZW5ndGg/KHU9bixlKTp1fSwkdShlLHIpfSxWby5sYXlvdXQu%0AcGllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihpKXt2YXIgbz1pLm1hcChmdW5jdGlv%0AbihlLHIpe3JldHVybit0LmNhbGwobixlLHIpfSksYT0rKCJmdW5jdGlvbiI9PXR5%0AcGVvZiByP3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnIpLGM9KCgiZnVuY3Rpb24i%0APT10eXBlb2YgdT91LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp1KS1hKS9Wby5zdW0o%0AbyksbD1Wby5yYW5nZShpLmxlbmd0aCk7bnVsbCE9ZSYmbC5zb3J0KGU9PT1hbD9m%0AdW5jdGlvbihuLHQpe3JldHVybiBvW3RdLW9bbl19OmZ1bmN0aW9uKG4sdCl7cmV0%0AdXJuIGUoaVtuXSxpW3RdKX0pO3ZhciBzPVtdO3JldHVybiBsLmZvckVhY2goZnVu%0AY3Rpb24obil7dmFyIHQ7c1tuXT17ZGF0YTppW25dLHZhbHVlOnQ9b1tuXSxzdGFy%0AdEFuZ2xlOmEsZW5kQW5nbGU6YSs9dCpjfX0pLHN9dmFyIHQ9TnVtYmVyLGU9YWws%0Acj0wLHU9U2E7cmV0dXJuIG4udmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJu%0AIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnN0YXJ0QW5nbGU9ZnVuY3Rp%0Ab24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxuLmVuZEFu%0AZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbik6%0AdX0sbn07dmFyIGFsPXt9O1ZvLmxheW91dC5zdGFjaz1mdW5jdGlvbigpe2Z1bmN0%0AaW9uIG4oYSxjKXt2YXIgbD1hLm1hcChmdW5jdGlvbihlLHIpe3JldHVybiB0LmNh%0AbGwobixlLHIpfSkscz1sLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVu%0AY3Rpb24odCxlKXtyZXR1cm5baS5jYWxsKG4sdCxlKSxvLmNhbGwobix0LGUpXX0p%0AfSksZj1lLmNhbGwobixzLGMpO2w9Vm8ucGVybXV0ZShsLGYpLHM9Vm8ucGVybXV0%0AZShzLGYpO3ZhciBoLGcscCx2PXIuY2FsbChuLHMsYyksZD1sLmxlbmd0aCxtPWxb%0AMF0ubGVuZ3RoO2ZvcihnPTA7bT5nOysrZylmb3IodS5jYWxsKG4sbFswXVtnXSxw%0APXZbZ10sc1swXVtnXVsxXSksaD0xO2Q+aDsrK2gpdS5jYWxsKG4sbFtoXVtnXSxw%0AKz1zW2gtMV1bZ11bMV0sc1toXVtnXVsxXSk7cmV0dXJuIGF9dmFyIHQ9d3QsZT1y%0AaSxyPXVpLHU9ZWksaT1uaSxvPXRpO3JldHVybiBuLnZhbHVlcz1mdW5jdGlvbihl%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4ub3JkZXI9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09%0AdHlwZW9mIHQ/dDpjbC5nZXQodCl8fHJpLG4pOmV9LG4ub2Zmc2V0PWZ1bmN0aW9u%0AKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVv%0AZiB0P3Q6bGwuZ2V0KHQpfHx1aSxuKTpyfSxuLng9ZnVuY3Rpb24odCl7cmV0dXJu%0AIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxuKTppfSxuLnk9ZnVuY3Rpb24odCl7cmV0%0AdXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxuKTpvfSxuLm91dD1mdW5jdGlvbih0%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LG4pOnV9LG59O3ZhciBjbD1W%0Aby5tYXAoeyJpbnNpZGUtb3V0IjpmdW5jdGlvbihuKXt2YXIgdCxlLHI9bi5sZW5n%0AdGgsdT1uLm1hcChpaSksaT1uLm1hcChvaSksbz1Wby5yYW5nZShyKS5zb3J0KGZ1%0AbmN0aW9uKG4sdCl7cmV0dXJuIHVbbl0tdVt0XX0pLGE9MCxjPTAsbD1bXSxzPVtd%0AO2Zvcih0PTA7cj50OysrdCllPW9bdF0sYz5hPyhhKz1pW2VdLGwucHVzaChlKSk6%0AKGMrPWlbZV0scy5wdXNoKGUpKTtyZXR1cm4gcy5yZXZlcnNlKCkuY29uY2F0KGwp%0AfSxyZXZlcnNlOmZ1bmN0aW9uKG4pe3JldHVybiBWby5yYW5nZShuLmxlbmd0aCku%0AcmV2ZXJzZSgpfSwiZGVmYXVsdCI6cml9KSxsbD1Wby5tYXAoe3NpbGhvdWV0dGU6%0AZnVuY3Rpb24obil7dmFyIHQsZSxyLHU9bi5sZW5ndGgsaT1uWzBdLmxlbmd0aCxv%0APVtdLGE9MCxjPVtdO2ZvcihlPTA7aT5lOysrZSl7Zm9yKHQ9MCxyPTA7dT50O3Qr%0AKylyKz1uW3RdW2VdWzFdO3I+YSYmKGE9ciksby5wdXNoKHIpfWZvcihlPTA7aT5l%0AOysrZSljW2VdPShhLW9bZV0pLzI7cmV0dXJuIGN9LHdpZ2dsZTpmdW5jdGlvbihu%0AKXt2YXIgdCxlLHIsdSxpLG8sYSxjLGwscz1uLmxlbmd0aCxmPW5bMF0saD1mLmxl%0Abmd0aCxnPVtdO2ZvcihnWzBdPWM9bD0wLGU9MTtoPmU7KytlKXtmb3IodD0wLHU9%0AMDtzPnQ7Kyt0KXUrPW5bdF1bZV1bMV07Zm9yKHQ9MCxpPTAsYT1mW2VdWzBdLWZb%0AZS0xXVswXTtzPnQ7Kyt0KXtmb3Iocj0wLG89KG5bdF1bZV1bMV0tblt0XVtlLTFd%0AWzFdKS8oMiphKTt0PnI7KytyKW8rPShuW3JdW2VdWzFdLW5bcl1bZS0xXVsxXSkv%0AYTtpKz1vKm5bdF1bZV1bMV19Z1tlXT1jLT11P2kvdSphOjAsbD5jJiYobD1jKX1m%0Ab3IoZT0wO2g+ZTsrK2UpZ1tlXS09bDtyZXR1cm4gZ30sZXhwYW5kOmZ1bmN0aW9u%0AKG4pe3ZhciB0LGUscix1PW4ubGVuZ3RoLGk9blswXS5sZW5ndGgsbz0xL3UsYT1b%0AXTtmb3IoZT0wO2k+ZTsrK2Upe2Zvcih0PTAscj0wO3U+dDt0Kyspcis9blt0XVtl%0AXVsxXTtpZihyKWZvcih0PTA7dT50O3QrKyluW3RdW2VdWzFdLz1yO2Vsc2UgZm9y%0AKHQ9MDt1PnQ7dCsrKW5bdF1bZV1bMV09b31mb3IoZT0wO2k+ZTsrK2UpYVtlXT0w%0AO3JldHVybiBhfSx6ZXJvOnVpfSk7Vm8ubGF5b3V0Lmhpc3RvZ3JhbT1mdW5jdGlv%0Abigpe2Z1bmN0aW9uIG4obixpKXtmb3IodmFyIG8sYSxjPVtdLGw9bi5tYXAoZSx0%0AaGlzKSxzPXIuY2FsbCh0aGlzLGwsaSksZj11LmNhbGwodGhpcyxzLGwsaSksaT0t%0AMSxoPWwubGVuZ3RoLGc9Zi5sZW5ndGgtMSxwPXQ/MToxL2g7KytpPGc7KW89Y1tp%0AXT1bXSxvLmR4PWZbaSsxXS0oby54PWZbaV0pLG8ueT0wO2lmKGc+MClmb3IoaT0t%0AMTsrK2k8aDspYT1sW2ldLGE+PXNbMF0mJmE8PXNbMV0mJihvPWNbVm8uYmlzZWN0%0AKGYsYSwxLGcpLTFdLG8ueSs9cCxvLnB1c2gobltpXSkpO3JldHVybiBjfXZhciB0%0APSEwLGU9TnVtYmVyLHI9c2ksdT1jaTtyZXR1cm4gbi52YWx1ZT1mdW5jdGlvbih0%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4ucmFuZ2U9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9YnQodCksbik6cn0s%0Abi5iaW5zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJu%0AdW1iZXIiPT10eXBlb2YgdD9mdW5jdGlvbihuKXtyZXR1cm4gbGkobix0KX06YnQo%0AdCksbik6dX0sbi5mcmVxdWVuY3k9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50%0Acy5sZW5ndGg/KHQ9ISFlLG4pOnR9LG59LFZvLmxheW91dC5wYWNrPWZ1bmN0aW9u%0AKCl7ZnVuY3Rpb24gbihuLGkpe3ZhciBvPWUuY2FsbCh0aGlzLG4saSksYT1vWzBd%0ALGM9dVswXSxsPXVbMV0scz1udWxsPT10P01hdGguc3FydDoiZnVuY3Rpb24iPT10%0AeXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9O2lmKGEueD1hLnk9MCxXdShh%0ALGZ1bmN0aW9uKG4pe24ucj0rcyhuLnZhbHVlKX0pLFd1KGEsdmkpLHIpe3ZhciBm%0APXIqKHQ/MTpNYXRoLm1heCgyKmEuci9jLDIqYS5yL2wpKS8yO1d1KGEsZnVuY3Rp%0Ab24obil7bi5yKz1mfSksV3UoYSx2aSksV3UoYSxmdW5jdGlvbihuKXtuLnItPWZ9%0AKX1yZXR1cm4geWkoYSxjLzIsbC8yLHQ/MToxL01hdGgubWF4KDIqYS5yL2MsMiph%0ALnIvbCkpLG99dmFyIHQsZT1Wby5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChmaSks%0Acj0wLHU9WzEsMV07cmV0dXJuIG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aD8odT10LG4pOnV9LG4ucmFkaXVzPWZ1bmN0aW9uKGUpe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PWV8fCJmdW5jdGlvbiI9PXR5%0AcGVvZiBlP2U6K2Usbik6dH0sbi5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBh%0Acmd1bWVudHMubGVuZ3RoPyhyPSt0LG4pOnJ9LCR1KG4sZSl9LFZvLmxheW91dC50%0AcmVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHUpe3ZhciBzPW8uY2FsbCh0aGlz%0ALG4sdSksZj1zWzBdLGg9dChmKTtpZihXdShoLGUpLGgucGFyZW50Lm09LWgueixC%0AdShoLHIpLGwpQnUoZixpKTtlbHNle3ZhciBnPWYscD1mLHY9ZjtCdShmLGZ1bmN0%0AaW9uKG4pe24ueDxnLngmJihnPW4pLG4ueD5wLngmJihwPW4pLG4uZGVwdGg+di5k%0AZXB0aCYmKHY9bil9KTt2YXIgZD1hKGcscCkvMi1nLngsbT1jWzBdLyhwLngrYShw%0ALGcpLzIrZCkseT1jWzFdLyh2LmRlcHRofHwxKTtCdShmLGZ1bmN0aW9uKG4pe24u%0AeD0obi54K2QpKm0sbi55PW4uZGVwdGgqeX0pfXJldHVybiBzfWZ1bmN0aW9uIHQo%0Abil7Zm9yKHZhciB0LGU9e0E6bnVsbCxjaGlsZHJlbjpbbl19LHI9W2VdO251bGwh%0APSh0PXIucG9wKCkpOylmb3IodmFyIHUsaT10LmNoaWxkcmVuLG89MCxhPWkubGVu%0AZ3RoO2E+bzsrK28pci5wdXNoKChpW29dPXU9e186aVtvXSxwYXJlbnQ6dCxjaGls%0AZHJlbjoodT1pW29dLmNoaWxkcmVuKSYmdS5zbGljZSgpfHxbXSxBOm51bGwsYTpu%0AdWxsLHo6MCxtOjAsYzowLHM6MCx0Om51bGwsaTpvfSkuYT11KTtyZXR1cm4gZS5j%0AaGlsZHJlblswXX1mdW5jdGlvbiBlKG4pe3ZhciB0PW4uY2hpbGRyZW4sZT1uLnBh%0AcmVudC5jaGlsZHJlbixyPW4uaT9lW24uaS0xXTpudWxsO2lmKHQubGVuZ3RoKXtT%0AaShuKTt2YXIgaT0odFswXS56K3RbdC5sZW5ndGgtMV0ueikvMjtyPyhuLno9ci56%0AK2Eobi5fLHIuXyksbi5tPW4uei1pKTpuLno9aX1lbHNlIHImJihuLno9ci56K2Eo%0Abi5fLHIuXykpO24ucGFyZW50LkE9dShuLHIsbi5wYXJlbnQuQXx8ZVswXSl9ZnVu%0AY3Rpb24gcihuKXtuLl8ueD1uLnorbi5wYXJlbnQubSxuLm0rPW4ucGFyZW50Lm19%0AZnVuY3Rpb24gdShuLHQsZSl7aWYodCl7Zm9yKHZhciByLHU9bixpPW4sbz10LGM9%0AdS5wYXJlbnQuY2hpbGRyZW5bMF0sbD11Lm0scz1pLm0sZj1vLm0saD1jLm07bz1i%0AaShvKSx1PV9pKHUpLG8mJnU7KWM9X2koYyksaT1iaShpKSxpLmE9bixyPW8ueitm%0ALXUuei1sK2Eoby5fLHUuXykscj4wJiYod2koa2kobyxuLGUpLG4sciksbCs9cixz%0AKz1yKSxmKz1vLm0sbCs9dS5tLGgrPWMubSxzKz1pLm07byYmIWJpKGkpJiYoaS50%0APW8saS5tKz1mLXMpLHUmJiFfaShjKSYmKGMudD11LGMubSs9bC1oLGU9bil9cmV0%0AdXJuIGV9ZnVuY3Rpb24gaShuKXtuLngqPWNbMF0sbi55PW4uZGVwdGgqY1sxXX12%0AYXIgbz1Wby5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxs%0AKSxhPU1pLGM9WzEsMV0sbD1udWxsO3JldHVybiBuLnNlcGFyYXRpb249ZnVuY3Rp%0Ab24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxuKTphfSxuLnNpemU9%0AZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bnVsbD09KGM9%0AdCk/aTpudWxsLG4pOmw/bnVsbDpjfSxuLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3Jl%0AdHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW51bGw9PShjPXQpP251bGw6aSxuKTps%0AP2M6bnVsbH0sJHUobixvKX0sVm8ubGF5b3V0LmNsdXN0ZXI9ZnVuY3Rpb24oKXtm%0AdW5jdGlvbiBuKG4saSl7dmFyIG8sYT10LmNhbGwodGhpcyxuLGkpLGM9YVswXSxs%0APTA7V3UoYyxmdW5jdGlvbihuKXt2YXIgdD1uLmNoaWxkcmVuO3QmJnQubGVuZ3Ro%0APyhuLng9QWkodCksbi55PUVpKHQpKToobi54PW8/bCs9ZShuLG8pOjAsbi55PTAs%0Abz1uKX0pO3ZhciBzPUNpKGMpLGY9TmkoYyksaD1zLngtZShzLGYpLzIsZz1mLngr%0AZShmLHMpLzI7cmV0dXJuIFd1KGMsdT9mdW5jdGlvbihuKXtuLng9KG4ueC1jLngp%0AKnJbMF0sbi55PShjLnktbi55KSpyWzFdfTpmdW5jdGlvbihuKXtuLng9KG4ueC1o%0AKS8oZy1oKSpyWzBdLG4ueT0oMS0oYy55P24ueS9jLnk6MSkpKnJbMV19KSxhfXZh%0AciB0PVZvLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwp%0ALGU9TWkscj1bMSwxXSx1PSExO3JldHVybiBuLnNlcGFyYXRpb249ZnVuY3Rpb24o%0AdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnNpemU9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bnVsbD09KHI9dCks%0Abik6dT9udWxsOnJ9LG4ubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KHU9bnVsbCE9KHI9dCksbik6dT9yOm51bGx9LCR1KG4sdCl9%0ALFZvLmxheW91dC50cmVlbWFwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHQpe2Zv%0Acih2YXIgZSxyLHU9LTEsaT1uLmxlbmd0aDsrK3U8aTspcj0oZT1uW3VdKS52YWx1%0AZSooMD50PzA6dCksZS5hcmVhPWlzTmFOKHIpfHwwPj1yPzA6cn1mdW5jdGlvbiB0%0AKGUpe3ZhciBpPWUuY2hpbGRyZW47aWYoaSYmaS5sZW5ndGgpe3ZhciBvLGEsYyxs%0APWYoZSkscz1bXSxoPWkuc2xpY2UoKSxwPTEvMCx2PSJzbGljZSI9PT1nP2wuZHg6%0AImRpY2UiPT09Zz9sLmR5OiJzbGljZS1kaWNlIj09PWc/MSZlLmRlcHRoP2wuZHk6%0AbC5keDpNYXRoLm1pbihsLmR4LGwuZHkpO2ZvcihuKGgsbC5keCpsLmR5L2UudmFs%0AdWUpLHMuYXJlYT0wOyhjPWgubGVuZ3RoKT4wOylzLnB1c2gobz1oW2MtMV0pLHMu%0AYXJlYSs9by5hcmVhLCJzcXVhcmlmeSIhPT1nfHwoYT1yKHMsdikpPD1wPyhoLnBv%0AcCgpLHA9YSk6KHMuYXJlYS09cy5wb3AoKS5hcmVhLHUocyx2LGwsITEpLHY9TWF0%0AaC5taW4obC5keCxsLmR5KSxzLmxlbmd0aD1zLmFyZWE9MCxwPTEvMCk7cy5sZW5n%0AdGgmJih1KHMsdixsLCEwKSxzLmxlbmd0aD1zLmFyZWE9MCksaS5mb3JFYWNoKHQp%0AfX1mdW5jdGlvbiBlKHQpe3ZhciByPXQuY2hpbGRyZW47aWYociYmci5sZW5ndGgp%0Ae3ZhciBpLG89Zih0KSxhPXIuc2xpY2UoKSxjPVtdO2ZvcihuKGEsby5keCpvLmR5%0AL3QudmFsdWUpLGMuYXJlYT0wO2k9YS5wb3AoKTspYy5wdXNoKGkpLGMuYXJlYSs9%0AaS5hcmVhLG51bGwhPWkueiYmKHUoYyxpLno/by5keDpvLmR5LG8sIWEubGVuZ3Ro%0AKSxjLmxlbmd0aD1jLmFyZWE9MCk7ci5mb3JFYWNoKGUpfX1mdW5jdGlvbiByKG4s%0AdCl7Zm9yKHZhciBlLHI9bi5hcmVhLHU9MCxpPTEvMCxvPS0xLGE9bi5sZW5ndGg7%0AKytvPGE7KShlPW5bb10uYXJlYSkmJihpPmUmJihpPWUpLGU+dSYmKHU9ZSkpO3Jl%0AdHVybiByKj1yLHQqPXQscj9NYXRoLm1heCh0KnUqcC9yLHIvKHQqaSpwKSk6MS8w%0AfWZ1bmN0aW9uIHUobix0LGUscil7dmFyIHUsaT0tMSxvPW4ubGVuZ3RoLGE9ZS54%0ALGw9ZS55LHM9dD9jKG4uYXJlYS90KTowO2lmKHQ9PWUuZHgpe2Zvcigocnx8cz5l%0ALmR5KSYmKHM9ZS5keSk7KytpPG87KXU9bltpXSx1Lng9YSx1Lnk9bCx1LmR5PXMs%0AYSs9dS5keD1NYXRoLm1pbihlLngrZS5keC1hLHM/Yyh1LmFyZWEvcyk6MCk7dS56%0APSEwLHUuZHgrPWUueCtlLmR4LWEsZS55Kz1zLGUuZHktPXN9ZWxzZXtmb3IoKHJ8%0AfHM+ZS5keCkmJihzPWUuZHgpOysraTxvOyl1PW5baV0sdS54PWEsdS55PWwsdS5k%0AeD1zLGwrPXUuZHk9TWF0aC5taW4oZS55K2UuZHktbCxzP2ModS5hcmVhL3MpOjAp%0AO3Uuej0hMSx1LmR5Kz1lLnkrZS5keS1sLGUueCs9cyxlLmR4LT1zfX1mdW5jdGlv%0AbiBpKHIpe3ZhciB1PW98fGEociksaT11WzBdO3JldHVybiBpLng9MCxpLnk9MCxp%0ALmR4PWxbMF0saS5keT1sWzFdLG8mJmEucmV2YWx1ZShpKSxuKFtpXSxpLmR4Kmku%0AZHkvaS52YWx1ZSksKG8/ZTp0KShpKSxoJiYobz11KSx1fXZhciBvLGE9Vm8ubGF5%0Ab3V0LmhpZXJhcmNoeSgpLGM9TWF0aC5yb3VuZCxsPVsxLDFdLHM9bnVsbCxmPXpp%0ALGg9ITEsZz0ic3F1YXJpZnkiLHA9LjUqKDErTWF0aC5zcXJ0KDUpKTtyZXR1cm4g%0AaS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4s%0AaSk6bH0saS5wYWRkaW5nPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQodCl7dmFyIGU9%0Abi5jYWxsKGksdCx0LmRlcHRoKTtyZXR1cm4gbnVsbD09ZT96aSh0KTpMaSh0LCJu%0AdW1iZXIiPT10eXBlb2YgZT9bZSxlLGUsZV06ZSl9ZnVuY3Rpb24gZSh0KXtyZXR1%0Acm4gTGkodCxuKX1pZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gczt2YXIgcjty%0AZXR1cm4gZj1udWxsPT0ocz1uKT96aToiZnVuY3Rpb24iPT0ocj10eXBlb2Ygbik/%0AdDoibnVtYmVyIj09PXI/KG49W24sbixuLG5dLGUpOmUsaX0saS5yb3VuZD1mdW5j%0AdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uP01hdGgucm91bmQ6%0ATnVtYmVyLGkpOmMhPU51bWJlcn0saS5zdGlja3k9ZnVuY3Rpb24obil7cmV0dXJu%0AIGFyZ3VtZW50cy5sZW5ndGg/KGg9bixvPW51bGwsaSk6aH0saS5yYXRpbz1mdW5j%0AdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1uLGkpOnB9LGkubW9k%0AZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1uKyIiLGkp%0AOmd9LCR1KGksYSl9LFZvLnJhbmRvbT17bm9ybWFsOmZ1bmN0aW9uKG4sdCl7dmFy%0AIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gMj5lJiYodD0xKSwxPmUmJihuPTAp%0ALGZ1bmN0aW9uKCl7dmFyIGUscix1O2RvIGU9MipNYXRoLnJhbmRvbSgpLTEscj0y%0AKk1hdGgucmFuZG9tKCktMSx1PWUqZStyKnI7d2hpbGUoIXV8fHU+MSk7cmV0dXJu%0AIG4rdCplKk1hdGguc3FydCgtMipNYXRoLmxvZyh1KS91KX19LGxvZ05vcm1hbDpm%0AdW5jdGlvbigpe3ZhciBuPVZvLnJhbmRvbS5ub3JtYWwuYXBwbHkoVm8sYXJndW1l%0AbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19LGJh%0AdGVzOmZ1bmN0aW9uKG4pe3ZhciB0PVZvLnJhbmRvbS5pcndpbkhhbGwobik7cmV0%0AdXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQoKS9ufX0saXJ3aW5IYWxsOmZ1bmN0aW9u%0AKG4pe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9MDtuPmU7ZSsrKXQr%0APU1hdGgucmFuZG9tKCk7cmV0dXJuIHR9fX0sVm8uc2NhbGU9e307dmFyIHNsPXtm%0AbG9vcjp3dCxjZWlsOnd0fTtWby5zY2FsZS5saW5lYXI9ZnVuY3Rpb24oKXtyZXR1%0Acm4gamkoWzAsMV0sWzAsMV0sZ3UsITEpfTt2YXIgZmw9e3M6MSxnOjEscDoxLHI6%0AMSxlOjF9O1ZvLnNjYWxlLmxvZz1mdW5jdGlvbigpe3JldHVybiBYaShWby5zY2Fs%0AZS5saW5lYXIoKS5kb21haW4oWzAsMV0pLDEwLCEwLFsxLDEwXSl9O3ZhciBobD1W%0Aby5mb3JtYXQoIi4wZSIpLGdsPXtmbG9vcjpmdW5jdGlvbihuKXtyZXR1cm4tTWF0%0AaC5jZWlsKC1uKX0sY2VpbDpmdW5jdGlvbihuKXtyZXR1cm4tTWF0aC5mbG9vcigt%0Abil9fTtWby5zY2FsZS5wb3c9ZnVuY3Rpb24oKXtyZXR1cm4gJGkoVm8uc2NhbGUu%0AbGluZWFyKCksMSxbMCwxXSl9LFZvLnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1%0Acm4gVm8uc2NhbGUucG93KCkuZXhwb25lbnQoLjUpfSxWby5zY2FsZS5vcmRpbmFs%0APWZ1bmN0aW9uKCl7cmV0dXJuIFdpKFtdLHt0OiJyYW5nZSIsYTpbW11dfSl9LFZv%0ALnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rpb24oKXtyZXR1cm4gVm8uc2NhbGUub3Jk%0AaW5hbCgpLnJhbmdlKHBsKX0sVm8uc2NhbGUuY2F0ZWdvcnkyMD1mdW5jdGlvbigp%0Ae3JldHVybiBWby5zY2FsZS5vcmRpbmFsKCkucmFuZ2UodmwpfSxWby5zY2FsZS5j%0AYXRlZ29yeTIwYj1mdW5jdGlvbigpe3JldHVybiBWby5zY2FsZS5vcmRpbmFsKCku%0AcmFuZ2UoZGwpfSxWby5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVy%0AbiBWby5zY2FsZS5vcmRpbmFsKCkucmFuZ2UobWwpfTt2YXIgcGw9WzIwNjIyNjAs%0AMTY3NDQyMDYsMjkyNDU4OCwxNDAzNDcyOCw5NzI1ODg1LDkxOTcxMzEsMTQ5MDcz%0AMzAsODM1NTcxMSwxMjM2OTE4NiwxNTU2MTc1XS5tYXAodnQpLHZsPVsyMDYyMjYw%0ALDExNDU0NDQwLDE2NzQ0MjA2LDE2NzU5NjcyLDI5MjQ1ODgsMTAwMTg2OTgsMTQw%0AMzQ3MjgsMTY3NTA3NDIsOTcyNTg4NSwxMjk1NTg2MSw5MTk3MTMxLDEyODg1MTQw%0ALDE0OTA3MzMwLDE2MjM0MTk0LDgzNTU3MTEsMTMwOTI4MDcsMTIzNjkxODYsMTQ0%0AMDg1ODksMTU1NjE3NSwxMDQxMDcyNV0ubWFwKHZ0KSxkbD1bMzc1MDc3Nyw1Mzk1%0ANjE5LDcwNDA3MTksMTAyNjQyODYsNjUxOTA5Nyw5MjE2NTk0LDExOTE1MTE1LDEz%0ANTU2NjM2LDkyMDI5OTMsMTI0MjY4MDksMTUxODY1MTQsMTUxOTA5MzIsODY2NjE2%0AOSwxMTM1NjQ5MCwxNDA0OTY0MywxNTE3NzM3Miw4MDc3NjgzLDEwODM0MzI0LDEz%0ANTI4NTA5LDE0NTg5NjU0XS5tYXAodnQpLG1sPVszMjQ0NzMzLDcwNTcxMTAsMTA0%0AMDY2MjUsMTMwMzI0MzEsMTUwOTUwNTMsMTY2MTY3NjQsMTY2MjUyNTksMTY2MzQw%0AMTgsMzI1MzA3Niw3NjUyNDcwLDEwNjA3MDAzLDEzMTAxNTA0LDc2OTUyODEsMTAz%0AOTQzMTIsMTIzNjkzNzIsMTQzNDI4OTEsNjUxMzUwNyw5ODY4OTUwLDEyNDM0ODc3%0ALDE0Mjc3MDgxXS5tYXAodnQpO1ZvLnNjYWxlLnF1YW50aWxlPWZ1bmN0aW9uKCl7%0AcmV0dXJuIEppKFtdLFtdKX0sVm8uc2NhbGUucXVhbnRpemU9ZnVuY3Rpb24oKXty%0AZXR1cm4gR2koMCwxLFswLDFdKX0sVm8uc2NhbGUudGhyZXNob2xkPWZ1bmN0aW9u%0AKCl7cmV0dXJuIEtpKFsuNV0sWzAsMV0pfSxWby5zY2FsZS5pZGVudGl0eT1mdW5j%0AdGlvbigpe3JldHVybiBRaShbMCwxXSl9LFZvLnN2Zz17fSxWby5zdmcuYXJjPWZ1%0AbmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVu%0AdHMpLGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbz1yLmFwcGx5KHRoaXMsYXJn%0AdW1lbnRzKSt5bCxhPXUuYXBwbHkodGhpcyxhcmd1bWVudHMpK3lsLGM9KG8+YSYm%0AKGM9byxvPWEsYT1jKSxhLW8pLGw9d2E+Yz8iMCI6IjEiLHM9TWF0aC5jb3Mobyks%0AZj1NYXRoLnNpbihvKSxoPU1hdGguY29zKGEpLGc9TWF0aC5zaW4oYSk7CnJldHVy%0AbiBjPj14bD9uPyJNMCwiK2krIkEiK2krIiwiK2krIiAwIDEsMSAwLCIrLWkrIkEi%0AK2krIiwiK2krIiAwIDEsMSAwLCIraSsiTTAsIituKyJBIituKyIsIituKyIgMCAx%0ALDAgMCwiKy1uKyJBIituKyIsIituKyIgMCAxLDAgMCwiK24rIloiOiJNMCwiK2kr%0AIkEiK2krIiwiK2krIiAwIDEsMSAwLCIrLWkrIkEiK2krIiwiK2krIiAwIDEsMSAw%0ALCIraSsiWiI6bj8iTSIraSpzKyIsIitpKmYrIkEiK2krIiwiK2krIiAwICIrbCsi%0ALDEgIitpKmgrIiwiK2kqZysiTCIrbipoKyIsIituKmcrIkEiK24rIiwiK24rIiAw%0AICIrbCsiLDAgIituKnMrIiwiK24qZisiWiI6Ik0iK2kqcysiLCIraSpmKyJBIitp%0AKyIsIitpKyIgMCAiK2wrIiwxICIraSpoKyIsIitpKmcrIkwwLDAiKyJaIn12YXIg%0AdD1ubyxlPXRvLHI9ZW8sdT1ybztyZXR1cm4gbi5pbm5lclJhZGl1cz1mdW5jdGlv%0AbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1idChlKSxuKTp0fSxuLm91%0AdGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhl%0APWJ0KHQpLG4pOmV9LG4uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJn%0AdW1lbnRzLmxlbmd0aD8ocj1idCh0KSxuKTpyfSxuLmVuZEFuZ2xlPWZ1bmN0aW9u%0AKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWJ0KHQpLG4pOnV9LG4uY2Vu%0AdHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0odC5hcHBseSh0aGlzLGFyZ3VtZW50cykr%0AZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsaT0oci5hcHBseSh0aGlzLGFyZ3Vt%0AZW50cykrdS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIreWw7cmV0dXJuW01hdGgu%0AY29zKGkpKm4sTWF0aC5zaW4oaSkqbl19LG59O3ZhciB5bD0ta2EseGw9U2EtRWE7%0AVm8uc3ZnLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdW8od3QpfTt2YXIgTWw9Vm8u%0AbWFwKHtsaW5lYXI6aW8sImxpbmVhci1jbG9zZWQiOm9vLHN0ZXA6YW8sInN0ZXAt%0AYmVmb3JlIjpjbywic3RlcC1hZnRlciI6bG8sYmFzaXM6dm8sImJhc2lzLW9wZW4i%0AOm1vLCJiYXNpcy1jbG9zZWQiOnlvLGJ1bmRsZTp4byxjYXJkaW5hbDpobywiY2Fy%0AZGluYWwtb3BlbiI6c28sImNhcmRpbmFsLWNsb3NlZCI6Zm8sbW9ub3RvbmU6a299%0AKTtNbC5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7dC5rZXk9bix0LmNsb3NlZD0vLWNs%0Ab3NlZCQvLnRlc3Qobil9KTt2YXIgX2w9WzAsMi8zLDEvMywwXSxibD1bMCwxLzMs%0AMi8zLDBdLHdsPVswLDEvNiwyLzMsMS82XTtWby5zdmcubGluZS5yYWRpYWw9ZnVu%0AY3Rpb24oKXt2YXIgbj11byhFbyk7cmV0dXJuIG4ucmFkaXVzPW4ueCxkZWxldGUg%0Abi54LG4uYW5nbGU9bi55LGRlbGV0ZSBuLnksbn0sY28ucmV2ZXJzZT1sbyxsby5y%0AZXZlcnNlPWNvLFZvLnN2Zy5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIEFvKHd0KX0s%0AVm8uc3ZnLmFyZWEucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIG49QW8oRW8pO3JldHVy%0AbiBuLnJhZGl1cz1uLngsZGVsZXRlIG4ueCxuLmlubmVyUmFkaXVzPW4ueDAsZGVs%0AZXRlIG4ueDAsbi5vdXRlclJhZGl1cz1uLngxLGRlbGV0ZSBuLngxLG4uYW5nbGU9%0Abi55LGRlbGV0ZSBuLnksbi5zdGFydEFuZ2xlPW4ueTAsZGVsZXRlIG4ueTAsbi5l%0AbmRBbmdsZT1uLnkxLGRlbGV0ZSBuLnkxLG59LFZvLnN2Zy5jaG9yZD1mdW5jdGlv%0Abigpe2Z1bmN0aW9uIG4obixhKXt2YXIgYz10KHRoaXMsaSxuLGEpLGw9dCh0aGlz%0ALG8sbixhKTtyZXR1cm4iTSIrYy5wMCtyKGMucixjLnAxLGMuYTEtYy5hMCkrKGUo%0AYyxsKT91KGMucixjLnAxLGMucixjLnAwKTp1KGMucixjLnAxLGwucixsLnAwKSty%0AKGwucixsLnAxLGwuYTEtbC5hMCkrdShsLnIsbC5wMSxjLnIsYy5wMCkpKyJaIn1m%0AdW5jdGlvbiB0KG4sdCxlLHIpe3ZhciB1PXQuY2FsbChuLGUsciksaT1hLmNhbGwo%0Abix1LHIpLG89Yy5jYWxsKG4sdSxyKSt5bCxzPWwuY2FsbChuLHUscikreWw7cmV0%0AdXJue3I6aSxhMDpvLGExOnMscDA6W2kqTWF0aC5jb3MobyksaSpNYXRoLnNpbihv%0AKV0scDE6W2kqTWF0aC5jb3MocyksaSpNYXRoLnNpbihzKV19fWZ1bmN0aW9uIGUo%0Abix0KXtyZXR1cm4gbi5hMD09dC5hMCYmbi5hMT09dC5hMX1mdW5jdGlvbiByKG4s%0AdCxlKXtyZXR1cm4iQSIrbisiLCIrbisiIDAgIisgKyhlPndhKSsiLDEgIit0fWZ1%0AbmN0aW9uIHUobix0LGUscil7cmV0dXJuIlEgMCwwICIrcn12YXIgaT1wcixvPXZy%0ALGE9Q28sYz1lbyxsPXJvO3JldHVybiBuLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1%0Acm4gYXJndW1lbnRzLmxlbmd0aD8oYT1idCh0KSxuKTphfSxuLnNvdXJjZT1mdW5j%0AdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1idCh0KSxuKTppfSxu%0ALnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1i%0AdCh0KSxuKTpvfSxuLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KGM9YnQodCksbik6Y30sbi5lbmRBbmdsZT1mdW5jdGlvbih0%0AKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1idCh0KSxuKTpsfSxufSxWby5z%0AdmcuZGlhZ29uYWw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4sdSl7dmFyIGk9dC5j%0AYWxsKHRoaXMsbix1KSxvPWUuY2FsbCh0aGlzLG4sdSksYT0oaS55K28ueSkvMixj%0APVtpLHt4OmkueCx5OmF9LHt4Om8ueCx5OmF9LG9dO3JldHVybiBjPWMubWFwKHIp%0ALCJNIitjWzBdKyJDIitjWzFdKyIgIitjWzJdKyIgIitjWzNdfXZhciB0PXByLGU9%0AdnIscj1ObztyZXR1cm4gbi5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt%0AZW50cy5sZW5ndGg/KHQ9YnQoZSksbik6dH0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7%0AcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YnQodCksbik6ZX0sbi5wcm9qZWN0%0AaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6%0Acn0sbn0sVm8uc3ZnLmRpYWdvbmFsLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBuPVZv%0ALnN2Zy5kaWFnb25hbCgpLHQ9Tm8sZT1uLnByb2plY3Rpb247cmV0dXJuIG4ucHJv%0AamVjdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHpv%0AKHQ9bikpOnR9LG59LFZvLnN2Zy5zeW1ib2w9ZnVuY3Rpb24oKXtmdW5jdGlvbiBu%0AKG4scil7cmV0dXJuKFNsLmdldCh0LmNhbGwodGhpcyxuLHIpKXx8cW8pKGUuY2Fs%0AbCh0aGlzLG4scikpfXZhciB0PVRvLGU9TG87cmV0dXJuIG4udHlwZT1mdW5jdGlv%0AbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1idChlKSxuKTp0fSxuLnNp%0AemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YnQodCks%0Abik6ZX0sbn07dmFyIFNsPVZvLm1hcCh7Y2lyY2xlOnFvLGNyb3NzOmZ1bmN0aW9u%0AKG4pe3ZhciB0PU1hdGguc3FydChuLzUpLzI7cmV0dXJuIk0iKy0zKnQrIiwiKy10%0AKyJIIistdCsiViIrLTMqdCsiSCIrdCsiViIrLXQrIkgiKzMqdCsiViIrdCsiSCIr%0AdCsiViIrMyp0KyJIIistdCsiViIrdCsiSCIrLTMqdCsiWiJ9LGRpYW1vbmQ6ZnVu%0AY3Rpb24obil7dmFyIHQ9TWF0aC5zcXJ0KG4vKDIqQ2wpKSxlPXQqQ2w7cmV0dXJu%0AIk0wLCIrLXQrIkwiK2UrIiwwIisiIDAsIit0KyIgIistZSsiLDAiKyJaIn0sc3F1%0AYXJlOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguc3FydChuKS8yO3JldHVybiJNIist%0AdCsiLCIrLXQrIkwiK3QrIiwiKy10KyIgIit0KyIsIit0KyIgIistdCsiLCIrdCsi%0AWiJ9LCJ0cmlhbmdsZS1kb3duIjpmdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQo%0Abi9BbCksZT10KkFsLzI7cmV0dXJuIk0wLCIrZSsiTCIrdCsiLCIrLWUrIiAiKy10%0AKyIsIistZSsiWiJ9LCJ0cmlhbmdsZS11cCI6ZnVuY3Rpb24obil7dmFyIHQ9TWF0%0AaC5zcXJ0KG4vQWwpLGU9dCpBbC8yO3JldHVybiJNMCwiKy1lKyJMIit0KyIsIitl%0AKyIgIistdCsiLCIrZSsiWiJ9fSk7Vm8uc3ZnLnN5bWJvbFR5cGVzPVNsLmtleXMo%0AKTt2YXIga2wsRWwsQWw9TWF0aC5zcXJ0KDMpLENsPU1hdGgudGFuKDMwKkNhKSxO%0AbD1bXSx6bD0wO05sLmNhbGw9dmEuY2FsbCxObC5lbXB0eT12YS5lbXB0eSxObC5u%0Ab2RlPXZhLm5vZGUsTmwuc2l6ZT12YS5zaXplLFZvLnRyYW5zaXRpb249ZnVuY3Rp%0Ab24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/a2w/bi50cmFuc2l0aW9uKCk6%0Abjp5YS50cmFuc2l0aW9uKCl9LFZvLnRyYW5zaXRpb24ucHJvdG90eXBlPU5sLE5s%0ALnNlbGVjdD1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdT10aGlzLmlkLGk9W107bj1i%0AKG4pO2Zvcih2YXIgbz0tMSxhPXRoaXMubGVuZ3RoOysrbzxhOyl7aS5wdXNoKHQ9%0AW10pO2Zvcih2YXIgYz10aGlzW29dLGw9LTEscz1jLmxlbmd0aDsrK2w8czspKHI9%0AY1tsXSkmJihlPW4uY2FsbChyLHIuX19kYXRhX18sbCxvKSk/KCJfX2RhdGFfXyJp%0AbiByJiYoZS5fX2RhdGFfXz1yLl9fZGF0YV9fKSxVbyhlLGwsdSxyLl9fdHJhbnNp%0AdGlvbl9fW3VdKSx0LnB1c2goZSkpOnQucHVzaChudWxsKX1yZXR1cm4gUm8oaSx1%0AKX0sTmwuc2VsZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0LGUscix1LGksbz10aGlz%0ALmlkLGE9W107bj13KG4pO2Zvcih2YXIgYz0tMSxsPXRoaXMubGVuZ3RoOysrYzxs%0AOylmb3IodmFyIHM9dGhpc1tjXSxmPS0xLGg9cy5sZW5ndGg7KytmPGg7KWlmKHI9%0Ac1tmXSl7aT1yLl9fdHJhbnNpdGlvbl9fW29dLGU9bi5jYWxsKHIsci5fX2RhdGFf%0AXyxmLGMpLGEucHVzaCh0PVtdKTtmb3IodmFyIGc9LTEscD1lLmxlbmd0aDsrK2c8%0AcDspKHU9ZVtnXSkmJlVvKHUsZyxvLGkpLHQucHVzaCh1KX1yZXR1cm4gUm8oYSxv%0AKX0sTmwuZmlsdGVyPWZ1bmN0aW9uKG4pe3ZhciB0LGUscix1PVtdOyJmdW5jdGlv%0AbiIhPXR5cGVvZiBuJiYobj1SKG4pKTtmb3IodmFyIGk9MCxvPXRoaXMubGVuZ3Ro%0AO28+aTtpKyspe3UucHVzaCh0PVtdKTtmb3IodmFyIGU9dGhpc1tpXSxhPTAsYz1l%0ALmxlbmd0aDtjPmE7YSsrKShyPWVbYV0pJiZuLmNhbGwocixyLl9fZGF0YV9fLGEs%0AaSkmJnQucHVzaChyKX1yZXR1cm4gUm8odSx0aGlzLmlkKX0sTmwudHdlZW49ZnVu%0AY3Rpb24obix0KXt2YXIgZT10aGlzLmlkO3JldHVybiBhcmd1bWVudHMubGVuZ3Ro%0APDI/dGhpcy5ub2RlKCkuX190cmFuc2l0aW9uX19bZV0udHdlZW4uZ2V0KG4pOlAo%0AdGhpcyxudWxsPT10P2Z1bmN0aW9uKHQpe3QuX190cmFuc2l0aW9uX19bZV0udHdl%0AZW4ucmVtb3ZlKG4pfTpmdW5jdGlvbihyKXtyLl9fdHJhbnNpdGlvbl9fW2VdLnR3%0AZWVuLnNldChuLHQpfSl9LE5sLmF0dHI9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBl%0AKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYSl9ZnVuY3Rpb24gcigpe3RoaXMucmVt%0Ab3ZlQXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsKX1mdW5jdGlvbiB1KG4pe3Jl%0AdHVybiBudWxsPT1uP2U6KG4rPSIiLGZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLmdl%0AdEF0dHJpYnV0ZShhKTtyZXR1cm4gZSE9PW4mJih0PW8oZSxuKSxmdW5jdGlvbihu%0AKXt0aGlzLnNldEF0dHJpYnV0ZShhLHQobikpfSl9KX1mdW5jdGlvbiBpKG4pe3Jl%0AdHVybiBudWxsPT1uP3I6KG4rPSIiLGZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLmdl%0AdEF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCk7cmV0dXJuIGUhPT1uJiYodD1v%0AKGUsbiksZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGVOUyhhLnNwYWNlLGEu%0AbG9jYWwsdChuKSl9KX0pfWlmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHQgaW4g%0Abil0aGlzLmF0dHIodCxuW3RdKTtyZXR1cm4gdGhpc312YXIgbz0idHJhbnNmb3Jt%0AIj09bj9QdTpndSxhPVZvLm5zLnF1YWxpZnkobik7cmV0dXJuIERvKHRoaXMsImF0%0AdHIuIituLHQsYS5sb2NhbD9pOnUpfSxObC5hdHRyVHdlZW49ZnVuY3Rpb24obix0%0AKXtmdW5jdGlvbiBlKG4sZSl7dmFyIHI9dC5jYWxsKHRoaXMsbixlLHRoaXMuZ2V0%0AQXR0cmlidXRlKHUpKTtyZXR1cm4gciYmZnVuY3Rpb24obil7dGhpcy5zZXRBdHRy%0AaWJ1dGUodSxyKG4pKX19ZnVuY3Rpb24gcihuLGUpe3ZhciByPXQuY2FsbCh0aGlz%0ALG4sZSx0aGlzLmdldEF0dHJpYnV0ZU5TKHUuc3BhY2UsdS5sb2NhbCkpO3JldHVy%0AbiByJiZmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHUuc3BhY2UsdS5s%0Ab2NhbCxyKG4pKX19dmFyIHU9Vm8ubnMucXVhbGlmeShuKTtyZXR1cm4gdGhpcy50%0Ad2VlbigiYXR0ci4iK24sdS5sb2NhbD9yOmUpfSxObC5zdHlsZT1mdW5jdGlvbihu%0ALHQsZSl7ZnVuY3Rpb24gcigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9%0AZnVuY3Rpb24gdSh0KXtyZXR1cm4gbnVsbD09dD9yOih0Kz0iIixmdW5jdGlvbigp%0Ae3ZhciByLHU9Sm8uZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3Bl%0AcnR5VmFsdWUobik7cmV0dXJuIHUhPT10JiYocj1ndSh1LHQpLGZ1bmN0aW9uKHQp%0Ae3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobixyKHQpLGUpfSl9KX12YXIgaT1hcmd1%0AbWVudHMubGVuZ3RoO2lmKDM+aSl7aWYoInN0cmluZyIhPXR5cGVvZiBuKXsyPmkm%0AJih0PSIiKTtmb3IoZSBpbiBuKXRoaXMuc3R5bGUoZSxuW2VdLHQpO3JldHVybiB0%0AaGlzfWU9IiJ9cmV0dXJuIERvKHRoaXMsInN0eWxlLiIrbix0LHUpfSxObC5zdHls%0AZVR3ZWVuPWZ1bmN0aW9uKG4sdCxlKXtmdW5jdGlvbiByKHIsdSl7dmFyIGk9dC5j%0AYWxsKHRoaXMscix1LEpvLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQ%0Acm9wZXJ0eVZhbHVlKG4pKTtyZXR1cm4gaSYmZnVuY3Rpb24odCl7dGhpcy5zdHls%0AZS5zZXRQcm9wZXJ0eShuLGkodCksZSl9fXJldHVybiBhcmd1bWVudHMubGVuZ3Ro%0APDMmJihlPSIiKSx0aGlzLnR3ZWVuKCJzdHlsZS4iK24scil9LE5sLnRleHQ9ZnVu%0AY3Rpb24obil7cmV0dXJuIERvKHRoaXMsInRleHQiLG4sUG8pfSxObC5yZW1vdmU9%0AZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKCJlbmQudHJhbnNpdGlvbiIsZnVu%0AY3Rpb24oKXt2YXIgbjt0aGlzLl9fdHJhbnNpdGlvbl9fLmNvdW50PDImJihuPXRo%0AaXMucGFyZW50Tm9kZSkmJm4ucmVtb3ZlQ2hpbGQodGhpcyl9KX0sTmwuZWFzZT1m%0AdW5jdGlvbihuKXt2YXIgdD10aGlzLmlkO3JldHVybiBhcmd1bWVudHMubGVuZ3Ro%0APDE/dGhpcy5ub2RlKCkuX190cmFuc2l0aW9uX19bdF0uZWFzZTooImZ1bmN0aW9u%0AIiE9dHlwZW9mIG4mJihuPVZvLmVhc2UuYXBwbHkoVm8sYXJndW1lbnRzKSksUCh0%0AaGlzLGZ1bmN0aW9uKGUpe2UuX190cmFuc2l0aW9uX19bdF0uZWFzZT1ufSkpfSxO%0AbC5kZWxheT1mdW5jdGlvbihuKXt2YXIgdD10aGlzLmlkO3JldHVybiBhcmd1bWVu%0AdHMubGVuZ3RoPDE/dGhpcy5ub2RlKCkuX190cmFuc2l0aW9uX19bdF0uZGVsYXk6%0AUCh0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKGUscix1KXtlLl9f%0AdHJhbnNpdGlvbl9fW3RdLmRlbGF5PStuLmNhbGwoZSxlLl9fZGF0YV9fLHIsdSl9%0AOihuPStuLGZ1bmN0aW9uKGUpe2UuX190cmFuc2l0aW9uX19bdF0uZGVsYXk9bn0p%0AKX0sTmwuZHVyYXRpb249ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5pZDtyZXR1cm4g%0AYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpLl9fdHJhbnNpdGlvbl9fW3Rd%0ALmR1cmF0aW9uOlAodGhpcywiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbihl%0ALHIsdSl7ZS5fX3RyYW5zaXRpb25fX1t0XS5kdXJhdGlvbj1NYXRoLm1heCgxLG4u%0AY2FsbChlLGUuX19kYXRhX18scix1KSl9OihuPU1hdGgubWF4KDEsbiksZnVuY3Rp%0Ab24oZSl7ZS5fX3RyYW5zaXRpb25fX1t0XS5kdXJhdGlvbj1ufSkpfSxObC5lYWNo%0APWZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5pZDtpZihhcmd1bWVudHMubGVuZ3Ro%0APDIpe3ZhciByPUVsLHU9a2w7a2w9ZSxQKHRoaXMsZnVuY3Rpb24odCxyLHUpe0Vs%0APXQuX190cmFuc2l0aW9uX19bZV0sbi5jYWxsKHQsdC5fX2RhdGFfXyxyLHUpfSks%0ARWw9cixrbD11fWVsc2UgUCh0aGlzLGZ1bmN0aW9uKHIpe3ZhciB1PXIuX190cmFu%0Ac2l0aW9uX19bZV07KHUuZXZlbnR8fCh1LmV2ZW50PVZvLmRpc3BhdGNoKCJzdGFy%0AdCIsImVuZCIpKSkub24obix0KX0pO3JldHVybiB0aGlzfSxObC50cmFuc2l0aW9u%0APWZ1bmN0aW9uKCl7Zm9yKHZhciBuLHQsZSxyLHU9dGhpcy5pZCxpPSsremwsbz1b%0AXSxhPTAsYz10aGlzLmxlbmd0aDtjPmE7YSsrKXtvLnB1c2gobj1bXSk7Zm9yKHZh%0AciB0PXRoaXNbYV0sbD0wLHM9dC5sZW5ndGg7cz5sO2wrKykoZT10W2xdKSYmKHI9%0AT2JqZWN0LmNyZWF0ZShlLl9fdHJhbnNpdGlvbl9fW3VdKSxyLmRlbGF5Kz1yLmR1%0AcmF0aW9uLFVvKGUsbCxpLHIpKSxuLnB1c2goZSl9cmV0dXJuIFJvKG8saSl9LFZv%0ALnN2Zy5heGlzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtuLmVhY2goZnVuY3Rp%0Ab24oKXt2YXIgbixsPVZvLnNlbGVjdCh0aGlzKSxzPXRoaXMuX19jaGFydF9ffHxl%0ALGY9dGhpcy5fX2NoYXJ0X189ZS5jb3B5KCksaD1udWxsPT1jP2YudGlja3M/Zi50%0AaWNrcy5hcHBseShmLGEpOmYuZG9tYWluKCk6YyxnPW51bGw9PXQ/Zi50aWNrRm9y%0AbWF0P2YudGlja0Zvcm1hdC5hcHBseShmLGEpOnd0OnQscD1sLnNlbGVjdEFsbCgi%0ALnRpY2siKS5kYXRhKGgsZiksdj1wLmVudGVyKCkuaW5zZXJ0KCJnIiwiLmRvbWFp%0AbiIpLmF0dHIoImNsYXNzIiwidGljayIpLnN0eWxlKCJvcGFjaXR5IixFYSksZD1W%0Aby50cmFuc2l0aW9uKHAuZXhpdCgpKS5zdHlsZSgib3BhY2l0eSIsRWEpLnJlbW92%0AZSgpLG09Vm8udHJhbnNpdGlvbihwLm9yZGVyKCkpLnN0eWxlKCJvcGFjaXR5Iiwx%0AKSx5PXFpKGYpLHg9bC5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFswXSksTT0o%0AeC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZG9tYWluIiks%0AVm8udHJhbnNpdGlvbih4KSk7di5hcHBlbmQoImxpbmUiKSx2LmFwcGVuZCgidGV4%0AdCIpO3ZhciBfPXYuc2VsZWN0KCJsaW5lIiksYj1tLnNlbGVjdCgibGluZSIpLHc9%0AcC5zZWxlY3QoInRleHQiKS50ZXh0KGcpLFM9di5zZWxlY3QoInRleHQiKSxrPW0u%0Ac2VsZWN0KCJ0ZXh0Iik7c3dpdGNoKHIpe2Nhc2UiYm90dG9tIjpuPWpvLF8uYXR0%0AcigieTIiLHUpLFMuYXR0cigieSIsTWF0aC5tYXgodSwwKStvKSxiLmF0dHIoIngy%0AIiwwKS5hdHRyKCJ5MiIsdSksay5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixNYXRoLm1h%0AeCh1LDApK28pLHcuYXR0cigiZHkiLCIuNzFlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hv%0AciIsIm1pZGRsZSIpLE0uYXR0cigiZCIsIk0iK3lbMF0rIiwiK2krIlYwSCIreVsx%0AXSsiViIraSk7YnJlYWs7Y2FzZSJ0b3AiOm49am8sXy5hdHRyKCJ5MiIsLXUpLFMu%0AYXR0cigieSIsLShNYXRoLm1heCh1LDApK28pKSxiLmF0dHIoIngyIiwwKS5hdHRy%0AKCJ5MiIsLXUpLGsuYXR0cigieCIsMCkuYXR0cigieSIsLShNYXRoLm1heCh1LDAp%0AK28pKSx3LmF0dHIoImR5IiwiMGVtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlk%0AZGxlIiksTS5hdHRyKCJkIiwiTSIreVswXSsiLCIrLWkrIlYwSCIreVsxXSsiViIr%0ALWkpO2JyZWFrO2Nhc2UibGVmdCI6bj1IbyxfLmF0dHIoIngyIiwtdSksUy5hdHRy%0AKCJ4IiwtKE1hdGgubWF4KHUsMCkrbykpLGIuYXR0cigieDIiLC11KS5hdHRyKCJ5%0AMiIsMCksay5hdHRyKCJ4IiwtKE1hdGgubWF4KHUsMCkrbykpLmF0dHIoInkiLDAp%0ALHcuYXR0cigiZHkiLCIuMzJlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImVuZCIp%0ALE0uYXR0cigiZCIsIk0iKy1pKyIsIit5WzBdKyJIMFYiK3lbMV0rIkgiKy1pKTti%0AcmVhaztjYXNlInJpZ2h0IjpuPUhvLF8uYXR0cigieDIiLHUpLFMuYXR0cigieCIs%0ATWF0aC5tYXgodSwwKStvKSxiLmF0dHIoIngyIix1KS5hdHRyKCJ5MiIsMCksay5h%0AdHRyKCJ4IixNYXRoLm1heCh1LDApK28pLmF0dHIoInkiLDApLHcuYXR0cigiZHki%0ALCIuMzJlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IiksTS5hdHRyKCJk%0AIiwiTSIraSsiLCIreVswXSsiSDBWIit5WzFdKyJIIitpKX1pZihmLnJhbmdlQmFu%0AZCl7dmFyIEU9ZixBPUUucmFuZ2VCYW5kKCkvMjtzPWY9ZnVuY3Rpb24obil7cmV0%0AdXJuIEUobikrQX19ZWxzZSBzLnJhbmdlQmFuZD9zPWY6ZC5jYWxsKG4sZik7di5j%0AYWxsKG4scyksbS5jYWxsKG4sZil9KX12YXIgdCxlPVZvLnNjYWxlLmxpbmVhcigp%0ALHI9TGwsdT02LGk9NixvPTMsYT1bMTBdLGM9bnVsbDtyZXR1cm4gbi5zY2FsZT1m%0AdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4u%0Ab3JpZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQg%0AaW4gVGw/dCsiIjpMbCxuKTpyfSxuLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGFy%0AZ3VtZW50cy5sZW5ndGg/KGE9YXJndW1lbnRzLG4pOmF9LG4udGlja1ZhbHVlcz1m%0AdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LG4pOmN9LG4u%0AdGlja0Zvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o%0AdD1lLG4pOnR9LG4udGlja1NpemU9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRz%0ALmxlbmd0aDtyZXR1cm4gZT8odT0rdCxpPSthcmd1bWVudHNbZS0xXSxuKTp1fSxu%0ALmlubmVyVGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KHU9K3Qsbik6dX0sbi5vdXRlclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVy%0AbiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LG4pOml9LG4udGlja1BhZGRpbmc9ZnVu%0AY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3Qsbik6b30sbi50%0AaWNrU3ViZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgm%0AJm59LG59O3ZhciBMbD0iYm90dG9tIixUbD17dG9wOjEscmlnaHQ6MSxib3R0b206%0AMSxsZWZ0OjF9O1ZvLnN2Zy5icnVzaD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oaSl7%0AaS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9Vm8uc2VsZWN0KHRoaXMpLnN0eWxlKCJw%0Ab2ludGVyLWV2ZW50cyIsImFsbCIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGln%0AaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIikub24oIm1vdXNlZG93bi5icnVzaCIs%0AdSkub24oInRvdWNoc3RhcnQuYnJ1c2giLHUpLG89aS5zZWxlY3RBbGwoIi5iYWNr%0AZ3JvdW5kIikuZGF0YShbMF0pO28uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRy%0AKCJjbGFzcyIsImJhY2tncm91bmQiKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRl%0AbiIpLnN0eWxlKCJjdXJzb3IiLCJjcm9zc2hhaXIiKSxpLnNlbGVjdEFsbCgiLmV4%0AdGVudCIpLmRhdGEoWzBdKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNs%0AYXNzIiwiZXh0ZW50Iikuc3R5bGUoImN1cnNvciIsIm1vdmUiKTt2YXIgYT1pLnNl%0AbGVjdEFsbCgiLnJlc2l6ZSIpLmRhdGEocCx3dCk7YS5leGl0KCkucmVtb3ZlKCks%0AYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihuKXty%0AZXR1cm4icmVzaXplICIrbn0pLnN0eWxlKCJjdXJzb3IiLGZ1bmN0aW9uKG4pe3Jl%0AdHVybiBxbFtuXX0pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGZ1bmN0aW9uKG4p%0Ae3JldHVybi9bZXddJC8udGVzdChuKT8tMzpudWxsfSkuYXR0cigieSIsZnVuY3Rp%0Ab24obil7cmV0dXJuL15bbnNdLy50ZXN0KG4pPy0zOm51bGx9KS5hdHRyKCJ3aWR0%0AaCIsNikuYXR0cigiaGVpZ2h0Iiw2KS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRl%0AbiIpLGEuc3R5bGUoImRpc3BsYXkiLG4uZW1wdHkoKT8ibm9uZSI6bnVsbCk7dmFy%0AIHMsZj1Wby50cmFuc2l0aW9uKGkpLGg9Vm8udHJhbnNpdGlvbihvKTtjJiYocz1x%0AaShjKSxoLmF0dHIoIngiLHNbMF0pLmF0dHIoIndpZHRoIixzWzFdLXNbMF0pLGUo%0AZikpLGwmJihzPXFpKGwpLGguYXR0cigieSIsc1swXSkuYXR0cigiaGVpZ2h0Iixz%0AWzFdLXNbMF0pLHIoZikpLHQoZil9KX1mdW5jdGlvbiB0KG4pe24uc2VsZWN0QWxs%0AKCIucmVzaXplIikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihuKXtyZXR1cm4i%0AdHJhbnNsYXRlKCIrc1srL2UkLy50ZXN0KG4pXSsiLCIrZlsrL15zLy50ZXN0KG4p%0AXSsiKSJ9KX1mdW5jdGlvbiBlKG4pe24uc2VsZWN0KCIuZXh0ZW50IikuYXR0cigi%0AeCIsc1swXSksbi5zZWxlY3RBbGwoIi5leHRlbnQsLm4+cmVjdCwucz5yZWN0Iiku%0AYXR0cigid2lkdGgiLHNbMV0tc1swXSl9ZnVuY3Rpb24gcihuKXtuLnNlbGVjdCgi%0ALmV4dGVudCIpLmF0dHIoInkiLGZbMF0pLG4uc2VsZWN0QWxsKCIuZXh0ZW50LC5l%0APnJlY3QsLnc+cmVjdCIpLmF0dHIoImhlaWdodCIsZlsxXS1mWzBdKX1mdW5jdGlv%0AbiB1KCl7ZnVuY3Rpb24gdSgpezMyPT1Wby5ldmVudC5rZXlDb2RlJiYoQ3x8KHg9%0AbnVsbCx6WzBdLT1zWzFdLHpbMV0tPWZbMV0sQz0yKSx5KCkpfWZ1bmN0aW9uIHAo%0AKXszMj09Vm8uZXZlbnQua2V5Q29kZSYmMj09QyYmKHpbMF0rPXNbMV0selsxXSs9%0AZlsxXSxDPTAseSgpKX1mdW5jdGlvbiB2KCl7dmFyIG49Vm8ubW91c2UoXyksdT0h%0AMTtNJiYoblswXSs9TVswXSxuWzFdKz1NWzFdKSxDfHwoVm8uZXZlbnQuYWx0S2V5%0APyh4fHwoeD1bKHNbMF0rc1sxXSkvMiwoZlswXStmWzFdKS8yXSkselswXT1zWyso%0AblswXTx4WzBdKV0selsxXT1mWysoblsxXTx4WzFdKV0pOng9bnVsbCksRSYmZChu%0ALGMsMCkmJihlKFMpLHU9ITApLEEmJmQobixsLDEpJiYocihTKSx1PSEwKSx1JiYo%0AdChTKSx3KHt0eXBlOiJicnVzaCIsbW9kZTpDPyJtb3ZlIjoicmVzaXplIn0pKX1m%0AdW5jdGlvbiBkKG4sdCxlKXt2YXIgcix1LGE9cWkodCksYz1hWzBdLGw9YVsxXSxw%0APXpbZV0sdj1lP2Y6cyxkPXZbMV0tdlswXTtyZXR1cm4gQyYmKGMtPXAsbC09ZCtw%0AKSxyPShlP2c6aCk/TWF0aC5tYXgoYyxNYXRoLm1pbihsLG5bZV0pKTpuW2VdLEM/%0AdT0ocis9cCkrZDooeCYmKHA9TWF0aC5tYXgoYyxNYXRoLm1pbihsLDIqeFtlXS1y%0AKSkpLHI+cD8odT1yLHI9cCk6dT1wKSx2WzBdIT1yfHx2WzFdIT11PyhlP289bnVs%0AbDppPW51bGwsdlswXT1yLHZbMV09dSwhMCk6dm9pZCAwfWZ1bmN0aW9uIG0oKXt2%0AKCksUy5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zZWxlY3RBbGwoIi5y%0AZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbi5lbXB0eSgpPyJub25lIjpudWxsKSxW%0Aby5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIixudWxsKSxMLm9uKCJtb3Vz%0AZW1vdmUuYnJ1c2giLG51bGwpLm9uKCJtb3VzZXVwLmJydXNoIixudWxsKS5vbigi%0AdG91Y2htb3ZlLmJydXNoIixudWxsKS5vbigidG91Y2hlbmQuYnJ1c2giLG51bGwp%0ALm9uKCJrZXlkb3duLmJydXNoIixudWxsKS5vbigia2V5dXAuYnJ1c2giLG51bGwp%0ALE4oKSx3KHt0eXBlOiJicnVzaGVuZCJ9KX12YXIgeCxNLF89dGhpcyxiPVZvLnNl%0AbGVjdChWby5ldmVudC50YXJnZXQpLHc9YS5vZihfLGFyZ3VtZW50cyksUz1Wby5z%0AZWxlY3QoXyksaz1iLmRhdHVtKCksRT0hL14obnxzKSQvLnRlc3QoaykmJmMsQT0h%0AL14oZXx3KSQvLnRlc3QoaykmJmwsQz1iLmNsYXNzZWQoImV4dGVudCIpLE49SSgp%0ALHo9Vm8ubW91c2UoXyksTD1Wby5zZWxlY3QoSm8pLm9uKCJrZXlkb3duLmJydXNo%0AIix1KS5vbigia2V5dXAuYnJ1c2giLHApO2lmKFZvLmV2ZW50LmNoYW5nZWRUb3Vj%0AaGVzP0wub24oInRvdWNobW92ZS5icnVzaCIsdikub24oInRvdWNoZW5kLmJydXNo%0AIixtKTpMLm9uKCJtb3VzZW1vdmUuYnJ1c2giLHYpLm9uKCJtb3VzZXVwLmJydXNo%0AIixtKSxTLmludGVycnVwdCgpLnNlbGVjdEFsbCgiKiIpLmludGVycnVwdCgpLEMp%0AelswXT1zWzBdLXpbMF0selsxXT1mWzBdLXpbMV07ZWxzZSBpZihrKXt2YXIgVD0r%0AL3ckLy50ZXN0KGspLHE9Ky9ebi8udGVzdChrKTtNPVtzWzEtVF0telswXSxmWzEt%0AcV0telsxXV0selswXT1zW1RdLHpbMV09ZltxXX1lbHNlIFZvLmV2ZW50LmFsdEtl%0AeSYmKHg9ei5zbGljZSgpKTtTLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUi%0AKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksVm8u%0Ac2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIsYi5zdHlsZSgiY3Vyc29yIikp%0ALHcoe3R5cGU6ImJydXNoc3RhcnQifSksdigpfXZhciBpLG8sYT1NKG4sImJydXNo%0Ac3RhcnQiLCJicnVzaCIsImJydXNoZW5kIiksYz1udWxsLGw9bnVsbCxzPVswLDBd%0ALGY9WzAsMF0saD0hMCxnPSEwLHA9UmxbMF07cmV0dXJuIG4uZXZlbnQ9ZnVuY3Rp%0Ab24obil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49YS5vZih0aGlzLGFyZ3VtZW50%0AcyksdD17eDpzLHk6ZixpOmksajpvfSxlPXRoaXMuX19jaGFydF9ffHx0O3RoaXMu%0AX19jaGFydF9fPXQsa2w/Vm8uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNo%0AKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXtpPWUuaSxvPWUuaixzPWUueCxmPWUu%0AeSxuKHt0eXBlOiJicnVzaHN0YXJ0In0pfSkudHdlZW4oImJydXNoOmJydXNoIixm%0AdW5jdGlvbigpe3ZhciBlPXB1KHMsdC54KSxyPXB1KGYsdC55KTtyZXR1cm4gaT1v%0APW51bGwsZnVuY3Rpb24odSl7cz10Lng9ZSh1KSxmPXQueT1yKHUpLG4oe3R5cGU6%0AImJydXNoIixtb2RlOiJyZXNpemUifSl9fSkuZWFjaCgiZW5kLmJydXNoIixmdW5j%0AdGlvbigpe2k9dC5pLG89dC5qLG4oe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUi%0AfSksbih7dHlwZToiYnJ1c2hlbmQifSl9KToobih7dHlwZToiYnJ1c2hzdGFydCJ9%0AKSxuKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pLG4oe3R5cGU6ImJydXNo%0AZW5kIn0pKX0pfSxuLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n%0AdGg/KGM9dCxwPVJsWyFjPDwxfCFsXSxuKTpjfSxuLnk9ZnVuY3Rpb24odCl7cmV0%0AdXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxwPVJsWyFjPDwxfCFsXSxuKTpsfSxu%0ALmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjJiZs%0APyhoPSEhdFswXSxnPSEhdFsxXSk6Yz9oPSEhdDpsJiYoZz0hIXQpLG4pOmMmJmw/%0AW2gsZ106Yz9oOmw/ZzpudWxsfSxuLmV4dGVudD1mdW5jdGlvbih0KXt2YXIgZSxy%0ALHUsYSxoO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjJiYoZT10WzBdLHI9dFsx%0AXSxsJiYoZT1lWzBdLHI9clswXSksaT1bZSxyXSxjLmludmVydCYmKGU9YyhlKSxy%0APWMocikpLGU+ciYmKGg9ZSxlPXIscj1oKSwoZSE9c1swXXx8ciE9c1sxXSkmJihz%0APVtlLHJdKSksbCYmKHU9dFswXSxhPXRbMV0sYyYmKHU9dVsxXSxhPWFbMV0pLG89%0AW3UsYV0sbC5pbnZlcnQmJih1PWwodSksYT1sKGEpKSx1PmEmJihoPXUsdT1hLGE9%0AaCksKHUhPWZbMF18fGEhPWZbMV0pJiYoZj1bdSxhXSkpLG4pOihjJiYoaT8oZT1p%0AWzBdLHI9aVsxXSk6KGU9c1swXSxyPXNbMV0sYy5pbnZlcnQmJihlPWMuaW52ZXJ0%0AKGUpLHI9Yy5pbnZlcnQocikpLGU+ciYmKGg9ZSxlPXIscj1oKSkpLGwmJihvPyh1%0APW9bMF0sYT1vWzFdKToodT1mWzBdLGE9ZlsxXSxsLmludmVydCYmKHU9bC5pbnZl%0AcnQodSksYT1sLmludmVydChhKSksdT5hJiYoaD11LHU9YSxhPWgpKSksYyYmbD9b%0AW2UsdV0sW3IsYV1dOmM/W2Uscl06bCYmW3UsYV0pfSxuLmNsZWFyPWZ1bmN0aW9u%0AKCl7cmV0dXJuIG4uZW1wdHkoKXx8KHM9WzAsMF0sZj1bMCwwXSxpPW89bnVsbCks%0Abn0sbi5lbXB0eT1mdW5jdGlvbigpe3JldHVybiEhYyYmc1swXT09c1sxXXx8ISFs%0AJiZmWzBdPT1mWzFdfSxWby5yZWJpbmQobixhLCJvbiIpfTt2YXIgcWw9e246Im5z%0ALXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6%0AZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJl%0Ac2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sUmw9W1sibiIsImUiLCJzIiwidyIsIm53%0AIiwibmUiLCJzZSIsInN3Il0sWyJlIiwidyJdLFsibiIsInMiXSxbXV0sRGw9bmMu%0AZm9ybWF0PW9jLnRpbWVGb3JtYXQsUGw9RGwudXRjLFVsPVBsKCIlWS0lbS0lZFQl%0ASDolTTolUy4lTFoiKTtEbC5pc289RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcm%0AJituZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/Rm86VWwsRm8u%0AcGFyc2U9ZnVuY3Rpb24obil7dmFyIHQ9bmV3IERhdGUobik7cmV0dXJuIGlzTmFO%0AKHQpP251bGw6dH0sRm8udG9TdHJpbmc9VWwudG9TdHJpbmcsbmMuc2Vjb25kPVB0%0AKGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgdGMoMWUzKk1hdGguZmxvb3Iobi8xZTMp%0AKX0sZnVuY3Rpb24obix0KXtuLnNldFRpbWUobi5nZXRUaW1lKCkrMWUzKk1hdGgu%0AZmxvb3IodCkpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRTZWNvbmRzKCl9KSxu%0AYy5zZWNvbmRzPW5jLnNlY29uZC5yYW5nZSxuYy5zZWNvbmRzLnV0Yz1uYy5zZWNv%0AbmQudXRjLnJhbmdlLG5jLm1pbnV0ZT1QdChmdW5jdGlvbihuKXtyZXR1cm4gbmV3%0AIHRjKDZlNCpNYXRoLmZsb29yKG4vNmU0KSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRU%0AaW1lKG4uZ2V0VGltZSgpKzZlNCpNYXRoLmZsb29yKHQpKX0sZnVuY3Rpb24obil7%0AcmV0dXJuIG4uZ2V0TWludXRlcygpfSksbmMubWludXRlcz1uYy5taW51dGUucmFu%0AZ2UsbmMubWludXRlcy51dGM9bmMubWludXRlLnV0Yy5yYW5nZSxuYy5ob3VyPVB0%0AKGZ1bmN0aW9uKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKS82MDtyZXR1%0Acm4gbmV3IHRjKDM2ZTUqKE1hdGguZmxvb3Iobi8zNmU1LXQpK3QpKX0sZnVuY3Rp%0Ab24obix0KXtuLnNldFRpbWUobi5nZXRUaW1lKCkrMzZlNSpNYXRoLmZsb29yKHQp%0AKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLG5jLmhvdXJzPW5j%0ALmhvdXIucmFuZ2UsbmMuaG91cnMudXRjPW5jLmhvdXIudXRjLnJhbmdlLG5jLm1v%0AbnRoPVB0KGZ1bmN0aW9uKG4pe3JldHVybiBuPW5jLmRheShuKSxuLnNldERhdGUo%0AMSksbn0sZnVuY3Rpb24obix0KXtuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSt0KX0s%0AZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TW9udGgoKX0pLG5jLm1vbnRocz1uYy5t%0Ab250aC5yYW5nZSxuYy5tb250aHMudXRjPW5jLm1vbnRoLnV0Yy5yYW5nZTt2YXIg%0Aamw9WzFlMyw1ZTMsMTVlMywzZTQsNmU0LDNlNSw5ZTUsMThlNSwzNmU1LDEwOGU1%0ALDIxNmU1LDQzMmU1LDg2NGU1LDE3MjhlNSw2MDQ4ZTUsMjU5MmU2LDc3NzZlNiwz%0AMTUzNmU2XSxIbD1bW25jLnNlY29uZCwxXSxbbmMuc2Vjb25kLDVdLFtuYy5zZWNv%0AbmQsMTVdLFtuYy5zZWNvbmQsMzBdLFtuYy5taW51dGUsMV0sW25jLm1pbnV0ZSw1%0AXSxbbmMubWludXRlLDE1XSxbbmMubWludXRlLDMwXSxbbmMuaG91ciwxXSxbbmMu%0AaG91ciwzXSxbbmMuaG91ciw2XSxbbmMuaG91ciwxMl0sW25jLmRheSwxXSxbbmMu%0AZGF5LDJdLFtuYy53ZWVrLDFdLFtuYy5tb250aCwxXSxbbmMubW9udGgsM10sW25j%0ALnllYXIsMV1dLEZsPURsLm11bHRpKFtbIi4lTCIsZnVuY3Rpb24obil7cmV0dXJu%0AIG4uZ2V0TWlsbGlzZWNvbmRzKCl9XSxbIjolUyIsZnVuY3Rpb24obil7cmV0dXJu%0AIG4uZ2V0U2Vjb25kcygpfV0sWyIlSTolTSIsZnVuY3Rpb24obil7cmV0dXJuIG4u%0AZ2V0TWludXRlcygpfV0sWyIlSSAlcCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0%0ASG91cnMoKX1dLFsiJWEgJWQiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERheSgp%0AJiYxIT1uLmdldERhdGUoKX1dLFsiJWIgJWQiLGZ1bmN0aW9uKG4pe3JldHVybiAx%0AIT1uLmdldERhdGUoKX1dLFsiJUIiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1v%0AbnRoKCl9XSxbIiVZIixTZV1dKSxPbD17cmFuZ2U6ZnVuY3Rpb24obix0LGUpe3Jl%0AdHVybiBWby5yYW5nZShNYXRoLmNlaWwobi9lKSplLCt0LGUpLm1hcChZbyl9LGZs%0Ab29yOnd0LGNlaWw6d3R9O0hsLnllYXI9bmMueWVhcixuYy5zY2FsZT1mdW5jdGlv%0Abigpe3JldHVybiBPbyhWby5zY2FsZS5saW5lYXIoKSxIbCxGbCl9O3ZhciBZbD1I%0AbC5tYXAoZnVuY3Rpb24obil7cmV0dXJuW25bMF0udXRjLG5bMV1dfSksSWw9UGwu%0AbXVsdGkoW1siLiVMIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENNaWxsaXNl%0AY29uZHMoKX1dLFsiOiVTIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENTZWNv%0AbmRzKCl9XSxbIiVJOiVNIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENNaW51%0AdGVzKCl9XSxbIiVJICVwIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENIb3Vy%0AcygpfV0sWyIlYSAlZCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDRGF5KCkm%0AJjEhPW4uZ2V0VVRDRGF0ZSgpfV0sWyIlYiAlZCIsZnVuY3Rpb24obil7cmV0dXJu%0AIDEhPW4uZ2V0VVRDRGF0ZSgpfV0sWyIlQiIsZnVuY3Rpb24obil7cmV0dXJuIG4u%0AZ2V0VVRDTW9udGgoKX1dLFsiJVkiLFNlXV0pO1lsLnllYXI9bmMueWVhci51dGMs%0AbmMuc2NhbGUudXRjPWZ1bmN0aW9uKCl7cmV0dXJuIE9vKFZvLnNjYWxlLmxpbmVh%0AcigpLFlsLElsKX0sVm8udGV4dD1TdChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXNw%0Ab25zZVRleHR9KSxWby5qc29uPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGt0KG4sImFw%0AcGxpY2F0aW9uL2pzb24iLElvLHQpfSxWby5odG1sPWZ1bmN0aW9uKG4sdCl7cmV0%0AdXJuIGt0KG4sInRleHQvaHRtbCIsWm8sdCl9LFZvLnhtbD1TdChmdW5jdGlvbihu%0AKXtyZXR1cm4gbi5yZXNwb25zZVhNTH0pLCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZp%0AbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFZvKToib2JqZWN0Ij09dHlwZW9mIG1vZHVs%0AZSYmbW9kdWxlLmV4cG9ydHMmJihtb2R1bGUuZXhwb3J0cz1WbyksdGhpcy5kMz1W%0Ab30oKTs8L3NjcmlwdD4NCiAgICAgIDwhLS0gbWluaW1pemVkIGpxdWVyeSBqcyBs%0AaWJyYXJ5IC0tPg0KICAgICAgPHNjcmlwdD4vKiEgalF1ZXJ5IHYyLjEuMSB8IChj%0AKSAyMDA1LCAyMDE0IGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIHwganF1ZXJ5Lm9y%0AZy9saWNlbnNlICovCiFmdW5jdGlvbihhLGIpeyJvYmplY3QiPT10eXBlb2YgbW9k%0AdWxlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBv%0AcnRzPWEuZG9jdW1lbnQ/YihhLCEwKTpmdW5jdGlvbihhKXtpZighYS5kb2N1bWVu%0AdCl0aHJvdyBuZXcgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRo%0AIGEgZG9jdW1lbnQiKTtyZXR1cm4gYihhKX06YihhKX0oInVuZGVmaW5lZCIhPXR5%0AcGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxk%0APWMuc2xpY2UsZT1jLmNvbmNhdCxmPWMucHVzaCxnPWMuaW5kZXhPZixoPXt9LGk9%0AaC50b1N0cmluZyxqPWguaGFzT3duUHJvcGVydHksaz17fSxsPWEuZG9jdW1lbnQs%0AbT0iMi4xLjEiLG49ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IG4uZm4uaW5pdChh%0ALGIpfSxvPS9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZyxwPS9e%0ALW1zLS8scT0vLShbXGRhLXpdKS9naSxyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIu%0AdG9VcHBlckNhc2UoKX07bi5mbj1uLnByb3RvdHlwZT17anF1ZXJ5Om0sY29uc3Ry%0AdWN0b3I6bixzZWxlY3RvcjoiIixsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7%0AcmV0dXJuIGQuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBudWxs%0AIT1hPzA+YT90aGlzW2ErdGhpcy5sZW5ndGhdOnRoaXNbYV06ZC5jYWxsKHRoaXMp%0AfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSl7dmFyIGI9bi5tZXJnZSh0aGlzLmNvbnN0%0AcnVjdG9yKCksYSk7cmV0dXJuIGIucHJldk9iamVjdD10aGlzLGIuY29udGV4dD10%0AaGlzLmNvbnRleHQsYn0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBuLmVhY2go%0AdGhpcyxhLGIpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNr%0AKG4ubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0p%0AKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZC5hcHBs%0AeSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlz%0ALmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpm%0AdW5jdGlvbihhKXt2YXIgYj10aGlzLmxlbmd0aCxjPSthKygwPmE/YjowKTtyZXR1%0Acm4gdGhpcy5wdXNoU3RhY2soYz49MCYmYj5jP1t0aGlzW2NdXTpbXSl9LGVuZDpm%0AdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0%0Ab3IobnVsbCl9LHB1c2g6Zixzb3J0OmMuc29ydCxzcGxpY2U6Yy5zcGxpY2V9LG4u%0AZXh0ZW5kPW4uZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGc9%0AYXJndW1lbnRzWzBdfHx7fSxoPTEsaT1hcmd1bWVudHMubGVuZ3RoLGo9ITE7Zm9y%0AKCJib29sZWFuIj09dHlwZW9mIGcmJihqPWcsZz1hcmd1bWVudHNbaF18fHt9LGgr%0AKyksIm9iamVjdCI9PXR5cGVvZiBnfHxuLmlzRnVuY3Rpb24oZyl8fChnPXt9KSxo%0APT09aSYmKGc9dGhpcyxoLS0pO2k+aDtoKyspaWYobnVsbCE9KGE9YXJndW1lbnRz%0AW2hdKSlmb3IoYiBpbiBhKWM9Z1tiXSxkPWFbYl0sZyE9PWQmJihqJiZkJiYobi5p%0Ac1BsYWluT2JqZWN0KGQpfHwoZT1uLmlzQXJyYXkoZCkpKT8oZT8oZT0hMSxmPWMm%0AJm4uaXNBcnJheShjKT9jOltdKTpmPWMmJm4uaXNQbGFpbk9iamVjdChjKT9jOnt9%0ALGdbYl09bi5leHRlbmQoaixmLGQpKTp2b2lkIDAhPT1kJiYoZ1tiXT1kKSk7cmV0%0AdXJuIGd9LG4uZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhtK01hdGgucmFuZG9t%0AKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24o%0AYSl7dGhyb3cgbmV3IEVycm9yKGEpfSxub29wOmZ1bmN0aW9uKCl7fSxpc0Z1bmN0%0AaW9uOmZ1bmN0aW9uKGEpe3JldHVybiJmdW5jdGlvbiI9PT1uLnR5cGUoYSl9LGlz%0AQXJyYXk6QXJyYXkuaXNBcnJheSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4g%0AbnVsbCE9YSYmYT09PWEud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oYSl7cmV0%0AdXJuIW4uaXNBcnJheShhKSYmYS1wYXJzZUZsb2F0KGEpPj0wfSxpc1BsYWluT2Jq%0AZWN0OmZ1bmN0aW9uKGEpe3JldHVybiJvYmplY3QiIT09bi50eXBlKGEpfHxhLm5v%0AZGVUeXBlfHxuLmlzV2luZG93KGEpPyExOmEuY29uc3RydWN0b3ImJiFqLmNhbGwo%0AYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJvdG90eXBlT2YiKT8hMTohMH0s%0AaXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVy%0AbiExO3JldHVybiEwfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP2Er%0AIiI6Im9iamVjdCI9PXR5cGVvZiBhfHwiZnVuY3Rpb24iPT10eXBlb2YgYT9oW2ku%0AY2FsbChhKV18fCJvYmplY3QiOnR5cGVvZiBhfSxnbG9iYWxFdmFsOmZ1bmN0aW9u%0AKGEpe3ZhciBiLGM9ZXZhbDthPW4udHJpbShhKSxhJiYoMT09PWEuaW5kZXhPZigi%0AdXNlIHN0cmljdCIpPyhiPWwuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksYi50ZXh0%0APWEsbC5oZWFkLmFwcGVuZENoaWxkKGIpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo%0AYikpOmMoYSkpfSxjYW1lbENhc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFj%0AZShwLCJtcy0iKS5yZXBsYWNlKHEscil9LG5vZGVOYW1lOmZ1bmN0aW9uKGEsYil7%0AcmV0dXJuIGEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWIu%0AdG9Mb3dlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZT0wLGY9%0AYS5sZW5ndGgsZz1zKGEpO2lmKGMpe2lmKGcpe2Zvcig7Zj5lO2UrKylpZihkPWIu%0AYXBwbHkoYVtlXSxjKSxkPT09ITEpYnJlYWt9ZWxzZSBmb3IoZSBpbiBhKWlmKGQ9%0AYi5hcHBseShhW2VdLGMpLGQ9PT0hMSlicmVha31lbHNlIGlmKGcpe2Zvcig7Zj5l%0AO2UrKylpZihkPWIuY2FsbChhW2VdLGUsYVtlXSksZD09PSExKWJyZWFrfWVsc2Ug%0AZm9yKGUgaW4gYSlpZihkPWIuY2FsbChhW2VdLGUsYVtlXSksZD09PSExKWJyZWFr%0AO3JldHVybiBhfSx0cmltOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hPyIiOihh%0AKyIiKS5yZXBsYWNlKG8sIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oYSxiKXt2YXIg%0AYz1ifHxbXTtyZXR1cm4gbnVsbCE9YSYmKHMoT2JqZWN0KGEpKT9uLm1lcmdlKGMs%0AInN0cmluZyI9PXR5cGVvZiBhP1thXTphKTpmLmNhbGwoYyxhKSksY30saW5BcnJh%0AeTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGw9PWI/LTE6Zy5jYWxsKGIsYSxj%0AKX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9K2IubGVuZ3RoLGQ9MCxl%0APWEubGVuZ3RoO2M+ZDtkKyspYVtlKytdPWJbZF07cmV0dXJuIGEubGVuZ3RoPWUs%0AYX0sZ3JlcDpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkLGU9W10sZj0wLGc9YS5s%0AZW5ndGgsaD0hYztnPmY7ZisrKWQ9IWIoYVtmXSxmKSxkIT09aCYmZS5wdXNoKGFb%0AZl0pO3JldHVybiBlfSxtYXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9MCxnPWEu%0AbGVuZ3RoLGg9cyhhKSxpPVtdO2lmKGgpZm9yKDtnPmY7ZisrKWQ9YihhW2ZdLGYs%0AYyksbnVsbCE9ZCYmaS5wdXNoKGQpO2Vsc2UgZm9yKGYgaW4gYSlkPWIoYVtmXSxm%0ALGMpLG51bGwhPWQmJmkucHVzaChkKTtyZXR1cm4gZS5hcHBseShbXSxpKX0sZ3Vp%0AZDoxLHByb3h5OmZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmO3JldHVybiJzdHJpbmci%0APT10eXBlb2YgYiYmKGM9YVtiXSxiPWEsYT1jKSxuLmlzRnVuY3Rpb24oYSk/KGU9%0AZC5jYWxsKGFyZ3VtZW50cywyKSxmPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHko%0AYnx8dGhpcyxlLmNvbmNhdChkLmNhbGwoYXJndW1lbnRzKSkpfSxmLmd1aWQ9YS5n%0AdWlkPWEuZ3VpZHx8bi5ndWlkKyssZik6dm9pZCAwfSxub3c6RGF0ZS5ub3csc3Vw%0AcG9ydDprfSksbi5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24g%0AQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIi5zcGxpdCgiICIpLGZ1bmN0%0AaW9uKGEsYil7aFsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KTtm%0AdW5jdGlvbiBzKGEpe3ZhciBiPWEubGVuZ3RoLGM9bi50eXBlKGEpO3JldHVybiJm%0AdW5jdGlvbiI9PT1jfHxuLmlzV2luZG93KGEpPyExOjE9PT1hLm5vZGVUeXBlJiZi%0APyEwOiJhcnJheSI9PT1jfHwwPT09Ynx8Im51bWJlciI9PXR5cGVvZiBiJiZiPjAm%0AJmItMSBpbiBhfXZhciB0PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGks%0AaixrLGwsbSxuLG8scCxxLHIscyx0LHU9InNpenpsZSIrLW5ldyBEYXRlLHY9YS5k%0Ab2N1bWVudCx3PTAseD0wLHk9Z2IoKSx6PWdiKCksQT1nYigpLEI9ZnVuY3Rpb24o%0AYSxiKXtyZXR1cm4gYT09PWImJihsPSEwKSwwfSxDPSJ1bmRlZmluZWQiLEQ9MTw8%0AMzEsRT17fS5oYXNPd25Qcm9wZXJ0eSxGPVtdLEc9Ri5wb3AsSD1GLnB1c2gsST1G%0ALnB1c2gsSj1GLnNsaWNlLEs9Ri5pbmRleE9mfHxmdW5jdGlvbihhKXtmb3IodmFy%0AIGI9MCxjPXRoaXMubGVuZ3RoO2M+YjtiKyspaWYodGhpc1tiXT09PWEpcmV0dXJu%0AIGI7cmV0dXJuLTF9LEw9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3Vz%0AfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxs%0Ab29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixNPSJb%0AXFx4MjBcXHRcXHJcXG5cXGZdIixOPSIoPzpcXFxcLnxbXFx3LV18W15cXHgwMC1c%0AXHhhMF0pKyIsTz1OLnJlcGxhY2UoInciLCJ3IyIpLFA9IlxcWyIrTSsiKigiK04r%0AIikoPzoiK00rIiooWypeJHwhfl0/PSkiK00rIiooPzonKCg/OlxcXFwufFteXFxc%0AXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitPKyIpKXwpIitN%0AKyIqXFxdIixRPSI6KCIrTisiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkq%0AKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwo%0AKVtcXF1dfCIrUCsiKSopfC4qKVxcKXwpIixSPW5ldyBSZWdFeHAoIl4iK00rIit8%0AKCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTSsiKyQiLCJnIiksUz1uZXcgUmVn%0ARXhwKCJeIitNKyIqLCIrTSsiKiIpLFQ9bmV3IFJlZ0V4cCgiXiIrTSsiKihbPit+%0AXXwiK00rIikiK00rIioiKSxVPW5ldyBSZWdFeHAoIj0iK00rIiooW15cXF0nXCJd%0AKj8pIitNKyIqXFxdIiwiZyIpLFY9bmV3IFJlZ0V4cChRKSxXPW5ldyBSZWdFeHAo%0AIl4iK08rIiQiKSxYPXtJRDpuZXcgUmVnRXhwKCJeIygiK04rIikiKSxDTEFTUzpu%0AZXcgUmVnRXhwKCJeXFwuKCIrTisiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTi5y%0AZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrUCksUFNF%0AVURPOm5ldyBSZWdFeHAoIl4iK1EpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8%0AZmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIr%0ATSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCki%0AK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAo%0AIl4oPzoiK0wrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitN%0AKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpc%0AXCgiK00rIiooKD86LVxcZCk/XFxkKikiK00rIipcXCl8KSg/PVteLV18JCkiLCJp%0AIil9LFk9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxaPS9e%0AaFxkJC9pLCQ9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLF89L14oPzojKFtcdy1d%0AKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxhYj0vWyt+XS8sYmI9Lyd8XFwvZyxjYj1u%0AZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK00rIj98KCIrTSsiKXwuKSIs%0AImlnIiksZGI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIweCIrYi02NTUzNjtyZXR1%0Acm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpT%0AdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9O3Ry%0AeXtJLmFwcGx5KEY9Si5jYWxsKHYuY2hpbGROb2Rlcyksdi5jaGlsZE5vZGVzKSxG%0AW3YuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGViKXtJPXthcHBs%0AeTpGLmxlbmd0aD9mdW5jdGlvbihhLGIpe0guYXBwbHkoYSxKLmNhbGwoYikpfTpm%0AdW5jdGlvbihhLGIpe3ZhciBjPWEubGVuZ3RoLGQ9MDt3aGlsZShhW2MrK109Yltk%0AKytdKTthLmxlbmd0aD1jLTF9fX1mdW5jdGlvbiBmYihhLGIsZCxlKXt2YXIgZixo%0ALGosayxsLG8scixzLHcseDtpZigoYj9iLm93bmVyRG9jdW1lbnR8fGI6dikhPT1u%0AJiZtKGIpLGI9Ynx8bixkPWR8fFtdLCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0%0AdXJuIGQ7aWYoMSE9PShrPWIubm9kZVR5cGUpJiY5IT09aylyZXR1cm5bXTtpZihw%0AJiYhZSl7aWYoZj1fLmV4ZWMoYSkpaWYoaj1mWzFdKXtpZig5PT09ayl7aWYoaD1i%0ALmdldEVsZW1lbnRCeUlkKGopLCFofHwhaC5wYXJlbnROb2RlKXJldHVybiBkO2lm%0AKGguaWQ9PT1qKXJldHVybiBkLnB1c2goaCksZH1lbHNlIGlmKGIub3duZXJEb2N1%0AbWVudCYmKGg9Yi5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGopKSYmdChi%0ALGgpJiZoLmlkPT09ailyZXR1cm4gZC5wdXNoKGgpLGR9ZWxzZXtpZihmWzJdKXJl%0AdHVybiBJLmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSksZDtpZigo%0Aaj1mWzNdKSYmYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZiLmdldEVsZW1lbnRz%0AQnlDbGFzc05hbWUpcmV0dXJuIEkuYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFz%0Ac05hbWUoaikpLGR9aWYoYy5xc2EmJighcXx8IXEudGVzdChhKSkpe2lmKHM9cj11%0ALHc9Yix4PTk9PT1rJiZhLDE9PT1rJiYib2JqZWN0IiE9PWIubm9kZU5hbWUudG9M%0Ab3dlckNhc2UoKSl7bz1nKGEpLChyPWIuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXIu%0AcmVwbGFjZShiYiwiXFwkJiIpOmIuc2V0QXR0cmlidXRlKCJpZCIscykscz0iW2lk%0APSciK3MrIiddICIsbD1vLmxlbmd0aDt3aGlsZShsLS0pb1tsXT1zK3FiKG9bbF0p%0AO3c9YWIudGVzdChhKSYmb2IoYi5wYXJlbnROb2RlKXx8Yix4PW8uam9pbigiLCIp%0AfWlmKHgpdHJ5e3JldHVybiBJLmFwcGx5KGQsdy5xdWVyeVNlbGVjdG9yQWxsKHgp%0AKSxkfWNhdGNoKHkpe31maW5hbGx5e3J8fGIucmVtb3ZlQXR0cmlidXRlKCJpZCIp%0AfX19cmV0dXJuIGkoYS5yZXBsYWNlKFIsIiQxIiksYixkLGUpfWZ1bmN0aW9uIGdi%0AKCl7dmFyIGE9W107ZnVuY3Rpb24gYihjLGUpe3JldHVybiBhLnB1c2goYysiICIp%0APmQuY2FjaGVMZW5ndGgmJmRlbGV0ZSBiW2Euc2hpZnQoKV0sYltjKyIgIl09ZX1y%0AZXR1cm4gYn1mdW5jdGlvbiBoYihhKXtyZXR1cm4gYVt1XT0hMCxhfWZ1bmN0aW9u%0AIGliKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEh%0AYShiKX1jYXRjaChjKXtyZXR1cm4hMX1maW5hbGx5e2IucGFyZW50Tm9kZSYmYi5w%0AYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH19ZnVuY3Rpb24gamIoYSxi%0AKXt2YXIgYz1hLnNwbGl0KCJ8IiksZT1hLmxlbmd0aDt3aGlsZShlLS0pZC5hdHRy%0ASGFuZGxlW2NbZV1dPWJ9ZnVuY3Rpb24ga2IoYSxiKXt2YXIgYz1iJiZhLGQ9YyYm%0AMT09PWEubm9kZVR5cGUmJjE9PT1iLm5vZGVUeXBlJiYofmIuc291cmNlSW5kZXh8%0AfEQpLSh+YS5zb3VyY2VJbmRleHx8RCk7aWYoZClyZXR1cm4gZDtpZihjKXdoaWxl%0AKGM9Yy5uZXh0U2libGluZylpZihjPT09YilyZXR1cm4tMTtyZXR1cm4gYT8xOi0x%0AfWZ1bmN0aW9uIGxiKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVO%0AYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWMmJmIudHlwZT09PWF9%0AfWZ1bmN0aW9uIG1iKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVO%0AYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1jfHwiYnV0dG9uIj09%0APWMpJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBuYihhKXtyZXR1cm4gaGIoZnVuY3Rp%0Ab24oYil7cmV0dXJuIGI9K2IsaGIoZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEoW10s%0AYy5sZW5ndGgsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pY1tlPWZbZ11dJiYoY1tl%0AXT0hKGRbZV09Y1tlXSkpfSl9KX1mdW5jdGlvbiBvYihhKXtyZXR1cm4gYSYmdHlw%0AZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPT1DJiZhfWM9ZmIuc3VwcG9ydD17%0AfSxmPWZiLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJihhLm93bmVyRG9jdW1l%0AbnR8fGEpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj8iSFRNTCIhPT1iLm5vZGVO%0AYW1lOiExfSxtPWZiLnNldERvY3VtZW50PWZ1bmN0aW9uKGEpe3ZhciBiLGU9YT9h%0ALm93bmVyRG9jdW1lbnR8fGE6dixnPWUuZGVmYXVsdFZpZXc7cmV0dXJuIGUhPT1u%0AJiY5PT09ZS5ub2RlVHlwZSYmZS5kb2N1bWVudEVsZW1lbnQ/KG49ZSxvPWUuZG9j%0AdW1lbnRFbGVtZW50LHA9IWYoZSksZyYmZyE9PWcudG9wJiYoZy5hZGRFdmVudExp%0Ac3RlbmVyP2cuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixmdW5jdGlvbigpe20o%0AKX0sITEpOmcuYXR0YWNoRXZlbnQmJmcuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixm%0AdW5jdGlvbigpe20oKX0pKSxjLmF0dHJpYnV0ZXM9aWIoZnVuY3Rpb24oYSl7cmV0%0AdXJuIGEuY2xhc3NOYW1lPSJpIiwhYS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIp%0AfSksYy5nZXRFbGVtZW50c0J5VGFnTmFtZT1pYihmdW5jdGlvbihhKXtyZXR1cm4g%0AYS5hcHBlbmRDaGlsZChlLmNyZWF0ZUNvbW1lbnQoIiIpKSwhYS5nZXRFbGVtZW50%0Ac0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGMuZ2V0RWxlbWVudHNCeUNsYXNzTmFt%0AZT0kLnRlc3QoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSYmaWIoZnVuY3Rpb24o%0AYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSdhJz48L2Rpdj48ZGl2%0AIGNsYXNzPSdhIGknPjwvZGl2PiIsYS5maXJzdENoaWxkLmNsYXNzTmFtZT0iaSIs%0AMj09PWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaSIpLmxlbmd0aH0pLGMuZ2V0%0AQnlJZD1pYihmdW5jdGlvbihhKXtyZXR1cm4gby5hcHBlbmRDaGlsZChhKS5pZD11%0ALCFlLmdldEVsZW1lbnRzQnlOYW1lfHwhZS5nZXRFbGVtZW50c0J5TmFtZSh1KS5s%0AZW5ndGh9KSxjLmdldEJ5SWQ/KGQuZmluZC5JRD1mdW5jdGlvbihhLGIpe2lmKHR5%0AcGVvZiBiLmdldEVsZW1lbnRCeUlkIT09QyYmcCl7dmFyIGM9Yi5nZXRFbGVtZW50%0AQnlJZChhKTtyZXR1cm4gYyYmYy5wYXJlbnROb2RlP1tjXTpbXX19LGQuZmlsdGVy%0ALklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShjYixkYik7cmV0dXJuIGZ1%0AbmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaWQiKT09PWJ9fSk6KGRl%0AbGV0ZSBkLmZpbmQuSUQsZC5maWx0ZXIuSUQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5y%0AZXBsYWNlKGNiLGRiKTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGM9dHlwZW9mIGEu%0AZ2V0QXR0cmlidXRlTm9kZSE9PUMmJmEuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTty%0AZXR1cm4gYyYmYy52YWx1ZT09PWJ9fSksZC5maW5kLlRBRz1jLmdldEVsZW1lbnRz%0AQnlUYWdOYW1lP2Z1bmN0aW9uKGEsYil7cmV0dXJuIHR5cGVvZiBiLmdldEVsZW1l%0AbnRzQnlUYWdOYW1lIT09Qz9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOnZvaWQg%0AMH06ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9MCxmPWIuZ2V0RWxlbWVudHNC%0AeVRhZ05hbWUoYSk7aWYoIioiPT09YSl7d2hpbGUoYz1mW2UrK10pMT09PWMubm9k%0AZVR5cGUmJmQucHVzaChjKTtyZXR1cm4gZH1yZXR1cm4gZn0sZC5maW5kLkNMQVNT%0APWMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oYSxiKXtyZXR1cm4g%0AdHlwZW9mIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PUMmJnA/Yi5nZXRFbGVt%0AZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFzYT0kLnRl%0Ac3QoZS5xdWVyeVNlbGVjdG9yQWxsKSkmJihpYihmdW5jdGlvbihhKXthLmlubmVy%0ASFRNTD0iPHNlbGVjdCBtc2FsbG93Y2xpcD0nJz48b3B0aW9uIHNlbGVjdGVkPScn%0APjwvb3B0aW9uPjwvc2VsZWN0PiIsYS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxv%0Ad2NsaXBePScnXSIpLmxlbmd0aCYmcS5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xc%0AIlwiKSIpLGEucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8%0AcS5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK0wrIikiKSxhLnF1ZXJ5U2VsZWN0%0Ab3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxxLnB1c2goIjpjaGVja2VkIil9KSxp%0AYihmdW5jdGlvbihhKXt2YXIgYj1lLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Yi5z%0AZXRBdHRyaWJ1dGUoInR5cGUiLCJoaWRkZW4iKSxhLmFwcGVuZENoaWxkKGIpLnNl%0AdEF0dHJpYnV0ZSgibmFtZSIsIkQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1l%0APWRdIikubGVuZ3RoJiZxLnB1c2goIm5hbWUiK00rIipbKl4kfCF+XT89IiksYS5x%0AdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aHx8cS5wdXNoKCI6ZW5h%0AYmxlZCIsIjpkaXNhYmxlZCIpLGEucXVlcnlTZWxlY3RvckFsbCgiKiw6eCIpLHEu%0AcHVzaCgiLC4qOiIpfSkpLChjLm1hdGNoZXNTZWxlY3Rvcj0kLnRlc3Qocz1vLm1h%0AdGNoZXN8fG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxvLm1vek1hdGNoZXNTZWxl%0AY3Rvcnx8by5vTWF0Y2hlc1NlbGVjdG9yfHxvLm1zTWF0Y2hlc1NlbGVjdG9yKSkm%0AJmliKGZ1bmN0aW9uKGEpe2MuZGlzY29ubmVjdGVkTWF0Y2g9cy5jYWxsKGEsImRp%0AdiIpLHMuY2FsbChhLCJbcyE9JyddOngiKSxyLnB1c2goIiE9IixRKX0pLHE9cS5s%0AZW5ndGgmJm5ldyBSZWdFeHAocS5qb2luKCJ8IikpLHI9ci5sZW5ndGgmJm5ldyBS%0AZWdFeHAoci5qb2luKCJ8IikpLGI9JC50ZXN0KG8uY29tcGFyZURvY3VtZW50UG9z%0AaXRpb24pLHQ9Ynx8JC50ZXN0KG8uY29udGFpbnMpP2Z1bmN0aW9uKGEsYil7dmFy%0AIGM9OT09PWEubm9kZVR5cGU/YS5kb2N1bWVudEVsZW1lbnQ6YSxkPWImJmIucGFy%0AZW50Tm9kZTtyZXR1cm4gYT09PWR8fCEoIWR8fDEhPT1kLm5vZGVUeXBlfHwhKGMu%0AY29udGFpbnM/Yy5jb250YWlucyhkKTphLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9u%0AJiYxNiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQpKSl9OmZ1bmN0aW9uKGEs%0AYil7aWYoYil3aGlsZShiPWIucGFyZW50Tm9kZSlpZihiPT09YSlyZXR1cm4hMDty%0AZXR1cm4hMX0sQj1iP2Z1bmN0aW9uKGEsYil7aWYoYT09PWIpcmV0dXJuIGw9ITAs%0AMDt2YXIgZD0hYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hYi5jb21wYXJlRG9j%0AdW1lbnRQb3NpdGlvbjtyZXR1cm4gZD9kOihkPShhLm93bmVyRG9jdW1lbnR8fGEp%0APT09KGIub3duZXJEb2N1bWVudHx8Yik/YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlv%0AbihiKToxLDEmZHx8IWMuc29ydERldGFjaGVkJiZiLmNvbXBhcmVEb2N1bWVudFBv%0Ac2l0aW9uKGEpPT09ZD9hPT09ZXx8YS5vd25lckRvY3VtZW50PT09diYmdCh2LGEp%0APy0xOmI9PT1lfHxiLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYsYik/MTprP0suY2Fs%0AbChrLGEpLUsuY2FsbChrLGIpOjA6NCZkPy0xOjEpfTpmdW5jdGlvbihhLGIpe2lm%0AKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGMsZD0wLGY9YS5wYXJlbnROb2RlLGc9%0AYi5wYXJlbnROb2RlLGg9W2FdLGk9W2JdO2lmKCFmfHwhZylyZXR1cm4gYT09PWU/%0ALTE6Yj09PWU/MTpmPy0xOmc/MTprP0suY2FsbChrLGEpLUsuY2FsbChrLGIpOjA7%0AaWYoZj09PWcpcmV0dXJuIGtiKGEsYik7Yz1hO3doaWxlKGM9Yy5wYXJlbnROb2Rl%0AKWgudW5zaGlmdChjKTtjPWI7d2hpbGUoYz1jLnBhcmVudE5vZGUpaS51bnNoaWZ0%0AKGMpO3doaWxlKGhbZF09PT1pW2RdKWQrKztyZXR1cm4gZD9rYihoW2RdLGlbZF0p%0AOmhbZF09PT12Py0xOmlbZF09PT12PzE6MH0sZSk6bn0sZmIubWF0Y2hlcz1mdW5j%0AdGlvbihhLGIpe3JldHVybiBmYihhLG51bGwsbnVsbCxiKX0sZmIubWF0Y2hlc1Nl%0AbGVjdG9yPWZ1bmN0aW9uKGEsYil7aWYoKGEub3duZXJEb2N1bWVudHx8YSkhPT1u%0AJiZtKGEpLGI9Yi5yZXBsYWNlKFUsIj0nJDEnXSIpLCEoIWMubWF0Y2hlc1NlbGVj%0AdG9yfHwhcHx8ciYmci50ZXN0KGIpfHxxJiZxLnRlc3QoYikpKXRyeXt2YXIgZD1z%0ALmNhbGwoYSxiKTtpZihkfHxjLmRpc2Nvbm5lY3RlZE1hdGNofHxhLmRvY3VtZW50%0AJiYxMSE9PWEuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIGR9Y2F0Y2goZSl7fXJl%0AdHVybiBmYihiLG4sbnVsbCxbYV0pLmxlbmd0aD4wfSxmYi5jb250YWlucz1mdW5j%0AdGlvbihhLGIpe3JldHVybihhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKSx0%0AKGEsYil9LGZiLmF0dHI9ZnVuY3Rpb24oYSxiKXsoYS5vd25lckRvY3VtZW50fHxh%0AKSE9PW4mJm0oYSk7dmFyIGU9ZC5hdHRySGFuZGxlW2IudG9Mb3dlckNhc2UoKV0s%0AZj1lJiZFLmNhbGwoZC5hdHRySGFuZGxlLGIudG9Mb3dlckNhc2UoKSk/ZShhLGIs%0AIXApOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09Zj9mOmMuYXR0cmlidXRlc3x8IXA/%0AYS5nZXRBdHRyaWJ1dGUoYik6KGY9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSYmZi5z%0AcGVjaWZpZWQ/Zi52YWx1ZTpudWxsfSxmYi5lcnJvcj1mdW5jdGlvbihhKXt0aHJv%0AdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Np%0Ab246ICIrYSl9LGZiLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7dmFyIGIsZD1bXSxl%0APTAsZj0wO2lmKGw9IWMuZGV0ZWN0RHVwbGljYXRlcyxrPSFjLnNvcnRTdGFibGUm%0AJmEuc2xpY2UoMCksYS5zb3J0KEIpLGwpe3doaWxlKGI9YVtmKytdKWI9PT1hW2Zd%0AJiYoZT1kLnB1c2goZikpO3doaWxlKGUtLSlhLnNwbGljZShkW2VdLDEpfXJldHVy%0AbiBrPW51bGwsYX0sZT1mYi5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9IiIs%0AZD0wLGY9YS5ub2RlVHlwZTtpZihmKXtpZigxPT09Znx8OT09PWZ8fDExPT09Zil7%0AaWYoInN0cmluZyI9PXR5cGVvZiBhLnRleHRDb250ZW50KXJldHVybiBhLnRleHRD%0Ab250ZW50O2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyljKz1l%0AKGEpfWVsc2UgaWYoMz09PWZ8fDQ9PT1mKXJldHVybiBhLm5vZGVWYWx1ZX1lbHNl%0AIHdoaWxlKGI9YVtkKytdKWMrPWUoYik7cmV0dXJuIGN9LGQ9ZmIuc2VsZWN0b3Jz%0APXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86aGIsbWF0Y2g6WCxhdHRySGFu%0AZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixm%0AaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlv%0AdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9%0AfSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS5y%0AZXBsYWNlKGNiLGRiKSxhWzNdPShhWzNdfHxhWzRdfHxhWzVdfHwiIikucmVwbGFj%0AZShjYixkYiksIn49Ij09PWFbMl0mJihhWzNdPSIgIithWzNdKyIgIiksYS5zbGlj%0AZSgwLDQpfSxDSElMRDpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnRvTG93%0AZXJDYXNlKCksIm50aCI9PT1hWzFdLnNsaWNlKDAsMyk/KGFbM118fGZiLmVycm9y%0AKGFbMF0pLGFbNF09KyhhWzRdP2FbNV0rKGFbNl18fDEpOjIqKCJldmVuIj09PWFb%0AM118fCJvZGQiPT09YVszXSkpLGFbNV09KyhhWzddK2FbOF18fCJvZGQiPT09YVsz%0AXSkpOmFbM10mJmZiLmVycm9yKGFbMF0pLGF9LFBTRVVETzpmdW5jdGlvbihhKXt2%0AYXIgYixjPSFhWzZdJiZhWzJdO3JldHVybiBYLkNISUxELnRlc3QoYVswXSk/bnVs%0AbDooYVszXT9hWzJdPWFbNF18fGFbNV18fCIiOmMmJlYudGVzdChjKSYmKGI9Zyhj%0ALCEwKSkmJihiPWMuaW5kZXhPZigiKSIsYy5sZW5ndGgtYiktYy5sZW5ndGgpJiYo%0AYVswXT1hWzBdLnNsaWNlKDAsYiksYVsyXT1jLnNsaWNlKDAsYikpLGEuc2xpY2Uo%0AMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2Uo%0AY2IsZGIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09YT9mdW5jdGlvbigpe3Jl%0AdHVybiEwfTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFt%0AZS50b0xvd2VyQ2FzZSgpPT09Yn19LENMQVNTOmZ1bmN0aW9uKGEpe3ZhciBiPXlb%0AYSsiICJdO3JldHVybiBifHwoYj1uZXcgUmVnRXhwKCIoXnwiK00rIikiK2ErIigi%0AK00rInwkKSIpKSYmeShhLGZ1bmN0aW9uKGEpe3JldHVybiBiLnRlc3QoInN0cmlu%0AZyI9PXR5cGVvZiBhLmNsYXNzTmFtZSYmYS5jbGFzc05hbWV8fHR5cGVvZiBhLmdl%0AdEF0dHJpYnV0ZSE9PUMmJmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0s%0AQVRUUjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciBlPWZi%0ALmF0dHIoZCxhKTtyZXR1cm4gbnVsbD09ZT8iIT0iPT09YjpiPyhlKz0iIiwiPSI9%0APT1iP2U9PT1jOiIhPSI9PT1iP2UhPT1jOiJePSI9PT1iP2MmJjA9PT1lLmluZGV4%0AT2YoYyk6Iio9Ij09PWI/YyYmZS5pbmRleE9mKGMpPi0xOiIkPSI9PT1iP2MmJmUu%0Ac2xpY2UoLWMubGVuZ3RoKT09PWM6In49Ij09PWI/KCIgIitlKyIgIikuaW5kZXhP%0AZihjKT4tMToifD0iPT09Yj9lPT09Y3x8ZS5zbGljZSgwLGMubGVuZ3RoKzEpPT09%0AYysiLSI6ITEpOiEwfX0sQ0hJTEQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj0i%0AbnRoIiE9PWEuc2xpY2UoMCwzKSxnPSJsYXN0IiE9PWEuc2xpY2UoLTQpLGg9Im9m%0ALXR5cGUiPT09YjtyZXR1cm4gMT09PWQmJjA9PT1lP2Z1bmN0aW9uKGEpe3JldHVy%0AbiEhYS5wYXJlbnROb2RlfTpmdW5jdGlvbihiLGMsaSl7dmFyIGosayxsLG0sbixv%0ALHA9ZiE9PWc/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixxPWIucGFy%0AZW50Tm9kZSxyPWgmJmIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxzPSFpJiYhaDtp%0AZihxKXtpZihmKXt3aGlsZShwKXtsPWI7d2hpbGUobD1sW3BdKWlmKGg/bC5ub2Rl%0ATmFtZS50b0xvd2VyQ2FzZSgpPT09cjoxPT09bC5ub2RlVHlwZSlyZXR1cm4hMTtv%0APXA9Im9ubHkiPT09YSYmIW8mJiJuZXh0U2libGluZyJ9cmV0dXJuITB9aWYobz1b%0AZz9xLmZpcnN0Q2hpbGQ6cS5sYXN0Q2hpbGRdLGcmJnMpe2s9cVt1XXx8KHFbdV09%0Ae30pLGo9a1thXXx8W10sbj1qWzBdPT09dyYmalsxXSxtPWpbMF09PT13JiZqWzJd%0ALGw9biYmcS5jaGlsZE5vZGVzW25dO3doaWxlKGw9KytuJiZsJiZsW3BdfHwobT1u%0APTApfHxvLnBvcCgpKWlmKDE9PT1sLm5vZGVUeXBlJiYrK20mJmw9PT1iKXtrW2Fd%0APVt3LG4sbV07YnJlYWt9fWVsc2UgaWYocyYmKGo9KGJbdV18fChiW3VdPXt9KSlb%0AYV0pJiZqWzBdPT09dyltPWpbMV07ZWxzZSB3aGlsZShsPSsrbiYmbCYmbFtwXXx8%0AKG09bj0wKXx8by5wb3AoKSlpZigoaD9sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9%0APT1yOjE9PT1sLm5vZGVUeXBlKSYmKyttJiYocyYmKChsW3VdfHwobFt1XT17fSkp%0AW2FdPVt3LG1dKSxsPT09YikpYnJlYWs7cmV0dXJuIG0tPWUsbT09PWR8fG0lZD09%0APTAmJm0vZD49MH19fSxQU0VVRE86ZnVuY3Rpb24oYSxiKXt2YXIgYyxlPWQucHNl%0AdWRvc1thXXx8ZC5zZXRGaWx0ZXJzW2EudG9Mb3dlckNhc2UoKV18fGZiLmVycm9y%0AKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrYSk7cmV0dXJuIGVbdV0/ZShiKTplLmxl%0Abmd0aD4xPyhjPVthLGEsIiIsYl0sZC5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5%0AKGEudG9Mb3dlckNhc2UoKSk/aGIoZnVuY3Rpb24oYSxjKXt2YXIgZCxmPWUoYSxi%0AKSxnPWYubGVuZ3RoO3doaWxlKGctLSlkPUsuY2FsbChhLGZbZ10pLGFbZF09IShj%0AW2RdPWZbZ10pfSk6ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSwwLGMpfSk6ZX19LHBz%0AZXVkb3M6e25vdDpoYihmdW5jdGlvbihhKXt2YXIgYj1bXSxjPVtdLGQ9aChhLnJl%0AcGxhY2UoUiwiJDEiKSk7cmV0dXJuIGRbdV0/aGIoZnVuY3Rpb24oYSxiLGMsZSl7%0AdmFyIGYsZz1kKGEsbnVsbCxlLFtdKSxoPWEubGVuZ3RoO3doaWxlKGgtLSkoZj1n%0AW2hdKSYmKGFbaF09IShiW2hdPWYpKX0pOmZ1bmN0aW9uKGEsZSxmKXtyZXR1cm4g%0AYlswXT1hLGQoYixudWxsLGYsYyksIWMucG9wKCl9fSksaGFzOmhiKGZ1bmN0aW9u%0AKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZmIoYSxiKS5sZW5ndGg+MH19%0AKSxjb250YWluczpoYihmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0%0AdXJuKGIudGV4dENvbnRlbnR8fGIuaW5uZXJUZXh0fHxlKGIpKS5pbmRleE9mKGEp%0APi0xfX0pLGxhbmc6aGIoZnVuY3Rpb24oYSl7cmV0dXJuIFcudGVzdChhfHwiIil8%0AfGZiLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK2EpLGE9YS5yZXBsYWNlKGNi%0ALGRiKS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKGIpe3ZhciBjO2RvIGlmKGM9cD9i%0ALmxhbmc6Yi5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIil8fGIuZ2V0QXR0cmlidXRl%0AKCJsYW5nIikpcmV0dXJuIGM9Yy50b0xvd2VyQ2FzZSgpLGM9PT1hfHwwPT09Yy5p%0AbmRleE9mKGErIi0iKTt3aGlsZSgoYj1iLnBhcmVudE5vZGUpJiYxPT09Yi5ub2Rl%0AVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGIpe3ZhciBjPWEubG9j%0AYXRpb24mJmEubG9jYXRpb24uaGFzaDtyZXR1cm4gYyYmYy5zbGljZSgxKT09PWIu%0AaWR9LHJvb3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1vfSxmb2N1czpmdW5jdGlv%0AbihhKXtyZXR1cm4gYT09PW4uYWN0aXZlRWxlbWVudCYmKCFuLmhhc0ZvY3VzfHxu%0ALmhhc0ZvY3VzKCkpJiYhIShhLnR5cGV8fGEuaHJlZnx8fmEudGFiSW5kZXgpfSxl%0AbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITF9LGRpc2Fi%0AbGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6%0AZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVy%0AbiJpbnB1dCI9PT1iJiYhIWEuY2hlY2tlZHx8Im9wdGlvbiI9PT1iJiYhIWEuc2Vs%0AZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLnBhcmVudE5vZGUm%0AJmEucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LGEuc2VsZWN0ZWQ9PT0hMH0sZW1w%0AdHk6ZnVuY3Rpb24oYSl7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJs%0AaW5nKWlmKGEubm9kZVR5cGU8NilyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1%0AbmN0aW9uKGEpe3JldHVybiFkLnBzZXVkb3MuZW1wdHkoYSl9LGhlYWRlcjpmdW5j%0AdGlvbihhKXtyZXR1cm4gWi50ZXN0KGEubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlv%0AbihhKXtyZXR1cm4gWS50ZXN0KGEubm9kZU5hbWUpfSxidXR0b246ZnVuY3Rpb24o%0AYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9%0APT1iJiYiYnV0dG9uIj09PWEudHlwZXx8ImJ1dHRvbiI9PT1ifSx0ZXh0OmZ1bmN0%0AaW9uKGEpe3ZhciBiO3JldHVybiJpbnB1dCI9PT1hLm5vZGVOYW1lLnRvTG93ZXJD%0AYXNlKCkmJiJ0ZXh0Ij09PWEudHlwZSYmKG51bGw9PShiPWEuZ2V0QXR0cmlidXRl%0AKCJ0eXBlIikpfHwidGV4dCI9PT1iLnRvTG93ZXJDYXNlKCkpfSxmaXJzdDpuYihm%0AdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6bmIoZnVuY3Rpb24oYSxiKXtyZXR1%0Acm5bYi0xXX0pLGVxOm5iKGZ1bmN0aW9uKGEsYixjKXtyZXR1cm5bMD5jP2MrYjpj%0AXX0pLGV2ZW46bmIoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtiPmM7Yys9Milh%0ALnB1c2goYyk7cmV0dXJuIGF9KSxvZGQ6bmIoZnVuY3Rpb24oYSxiKXtmb3IodmFy%0AIGM9MTtiPmM7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxsdDpuYihmdW5jdGlv%0AbihhLGIsYyl7Zm9yKHZhciBkPTA+Yz9jK2I6YzstLWQ+PTA7KWEucHVzaChkKTty%0AZXR1cm4gYX0pLGd0Om5iKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MD5jP2Mr%0AYjpjOysrZDxiOylhLnB1c2goZCk7cmV0dXJuIGF9KX19LGQucHNldWRvcy5udGg9%0AZC5wc2V1ZG9zLmVxO2ZvcihiIGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6%0AITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KWQucHNldWRvc1tiXT1sYihiKTtmb3Io%0AYiBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KWQucHNldWRvc1tiXT1tYihiKTtmdW5j%0AdGlvbiBwYigpe31wYi5wcm90b3R5cGU9ZC5maWx0ZXJzPWQucHNldWRvcyxkLnNl%0AdEZpbHRlcnM9bmV3IHBiLGc9ZmIudG9rZW5pemU9ZnVuY3Rpb24oYSxiKXt2YXIg%0AYyxlLGYsZyxoLGksaixrPXpbYSsiICJdO2lmKGspcmV0dXJuIGI/MDprLnNsaWNl%0AKDApO2g9YSxpPVtdLGo9ZC5wcmVGaWx0ZXI7d2hpbGUoaCl7KCFjfHwoZT1TLmV4%0AZWMoaCkpKSYmKGUmJihoPWguc2xpY2UoZVswXS5sZW5ndGgpfHxoKSxpLnB1c2go%0AZj1bXSkpLGM9ITEsKGU9VC5leGVjKGgpKSYmKGM9ZS5zaGlmdCgpLGYucHVzaCh7%0AdmFsdWU6Yyx0eXBlOmVbMF0ucmVwbGFjZShSLCIgIil9KSxoPWguc2xpY2UoYy5s%0AZW5ndGgpKTtmb3IoZyBpbiBkLmZpbHRlcikhKGU9WFtnXS5leGVjKGgpKXx8altn%0AXSYmIShlPWpbZ10oZSkpfHwoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5%0AcGU6ZyxtYXRjaGVzOmV9KSxoPWguc2xpY2UoYy5sZW5ndGgpKTtpZighYylicmVh%0Aa31yZXR1cm4gYj9oLmxlbmd0aDpoP2ZiLmVycm9yKGEpOnooYSxpKS5zbGljZSgw%0AKX07ZnVuY3Rpb24gcWIoYSl7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aCxkPSIiO2M+%0AYjtiKyspZCs9YVtiXS52YWx1ZTtyZXR1cm4gZH1mdW5jdGlvbiByYihhLGIsYyl7%0AdmFyIGQ9Yi5kaXIsZT1jJiYicGFyZW50Tm9kZSI9PT1kLGY9eCsrO3JldHVybiBi%0ALmZpcnN0P2Z1bmN0aW9uKGIsYyxmKXt3aGlsZShiPWJbZF0paWYoMT09PWIubm9k%0AZVR5cGV8fGUpcmV0dXJuIGEoYixjLGYpfTpmdW5jdGlvbihiLGMsZyl7dmFyIGgs%0AaSxqPVt3LGZdO2lmKGcpe3doaWxlKGI9YltkXSlpZigoMT09PWIubm9kZVR5cGV8%0AfGUpJiZhKGIsYyxnKSlyZXR1cm4hMH1lbHNlIHdoaWxlKGI9YltkXSlpZigxPT09%0AYi5ub2RlVHlwZXx8ZSl7aWYoaT1iW3VdfHwoYlt1XT17fSksKGg9aVtkXSkmJmhb%0AMF09PT13JiZoWzFdPT09ZilyZXR1cm4galsyXT1oWzJdO2lmKGlbZF09aixqWzJd%0APWEoYixjLGcpKXJldHVybiEwfX19ZnVuY3Rpb24gc2IoYSl7cmV0dXJuIGEubGVu%0AZ3RoPjE/ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWEubGVuZ3RoO3doaWxlKGUtLSlp%0AZighYVtlXShiLGMsZCkpcmV0dXJuITE7cmV0dXJuITB9OmFbMF19ZnVuY3Rpb24g%0AdGIoYSxiLGMpe2Zvcih2YXIgZD0wLGU9Yi5sZW5ndGg7ZT5kO2QrKylmYihhLGJb%0AZF0sYyk7cmV0dXJuIGN9ZnVuY3Rpb24gdWIoYSxiLGMsZCxlKXtmb3IodmFyIGYs%0AZz1bXSxoPTAsaT1hLmxlbmd0aCxqPW51bGwhPWI7aT5oO2grKykoZj1hW2hdKSYm%0AKCFjfHxjKGYsZCxlKSkmJihnLnB1c2goZiksaiYmYi5wdXNoKGgpKTtyZXR1cm4g%0AZ31mdW5jdGlvbiB2YihhLGIsYyxkLGUsZil7cmV0dXJuIGQmJiFkW3VdJiYoZD12%0AYihkKSksZSYmIWVbdV0mJihlPXZiKGUsZikpLGhiKGZ1bmN0aW9uKGYsZyxoLGkp%0Ae3ZhciBqLGssbCxtPVtdLG49W10sbz1nLmxlbmd0aCxwPWZ8fHRiKGJ8fCIqIixo%0ALm5vZGVUeXBlP1toXTpoLFtdKSxxPSFhfHwhZiYmYj9wOnViKHAsbSxhLGgsaSks%0Acj1jP2V8fChmP2E6b3x8ZCk/W106ZzpxO2lmKGMmJmMocSxyLGgsaSksZCl7aj11%0AYihyLG4pLGQoaixbXSxoLGkpLGs9ai5sZW5ndGg7d2hpbGUoay0tKShsPWpba10p%0AJiYocltuW2tdXT0hKHFbbltrXV09bCkpfWlmKGYpe2lmKGV8fGEpe2lmKGUpe2o9%0AW10saz1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkmJmoucHVzaChxW2tdPWwp%0AO2UobnVsbCxyPVtdLGosaSl9az1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkm%0AJihqPWU/Sy5jYWxsKGYsbCk6bVtrXSk+LTEmJihmW2pdPSEoZ1tqXT1sKSl9fWVs%0Ac2Ugcj11YihyPT09Zz9yLnNwbGljZShvLHIubGVuZ3RoKTpyKSxlP2UobnVsbCxn%0ALHIsaSk6SS5hcHBseShnLHIpfSl9ZnVuY3Rpb24gd2IoYSl7Zm9yKHZhciBiLGMs%0AZSxmPWEubGVuZ3RoLGc9ZC5yZWxhdGl2ZVthWzBdLnR5cGVdLGg9Z3x8ZC5yZWxh%0AdGl2ZVsiICJdLGk9Zz8xOjAsaz1yYihmdW5jdGlvbihhKXtyZXR1cm4gYT09PWJ9%0ALGgsITApLGw9cmIoZnVuY3Rpb24oYSl7cmV0dXJuIEsuY2FsbChiLGEpPi0xfSxo%0ALCEwKSxtPVtmdW5jdGlvbihhLGMsZCl7cmV0dXJuIWcmJihkfHxjIT09ail8fCgo%0AYj1jKS5ub2RlVHlwZT9rKGEsYyxkKTpsKGEsYyxkKSl9XTtmPmk7aSsrKWlmKGM9%0AZC5yZWxhdGl2ZVthW2ldLnR5cGVdKW09W3JiKHNiKG0pLGMpXTtlbHNle2lmKGM9%0AZC5maWx0ZXJbYVtpXS50eXBlXS5hcHBseShudWxsLGFbaV0ubWF0Y2hlcyksY1t1%0AXSl7Zm9yKGU9KytpO2Y+ZTtlKyspaWYoZC5yZWxhdGl2ZVthW2VdLnR5cGVdKWJy%0AZWFrO3JldHVybiB2YihpPjEmJnNiKG0pLGk+MSYmcWIoYS5zbGljZSgwLGktMSku%0AY29uY2F0KHt2YWx1ZToiICI9PT1hW2ktMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFj%0AZShSLCIkMSIpLGMsZT5pJiZ3YihhLnNsaWNlKGksZSkpLGY+ZSYmd2IoYT1hLnNs%0AaWNlKGUpKSxmPmUmJnFiKGEpKX1tLnB1c2goYyl9cmV0dXJuIHNiKG0pfWZ1bmN0%0AaW9uIHhiKGEsYil7dmFyIGM9Yi5sZW5ndGg+MCxlPWEubGVuZ3RoPjAsZj1mdW5j%0AdGlvbihmLGcsaCxpLGspe3ZhciBsLG0sbyxwPTAscT0iMCIscj1mJiZbXSxzPVtd%0ALHQ9aix1PWZ8fGUmJmQuZmluZC5UQUcoIioiLGspLHY9dys9bnVsbD09dD8xOk1h%0AdGgucmFuZG9tKCl8fC4xLHg9dS5sZW5ndGg7Zm9yKGsmJihqPWchPT1uJiZnKTtx%0AIT09eCYmbnVsbCE9KGw9dVtxXSk7cSsrKXtpZihlJiZsKXttPTA7d2hpbGUobz1h%0AW20rK10paWYobyhsLGcsaCkpe2kucHVzaChsKTticmVha31rJiYodz12KX1jJiYo%0AKGw9IW8mJmwpJiZwLS0sZiYmci5wdXNoKGwpKX1pZihwKz1xLGMmJnEhPT1wKXtt%0APTA7d2hpbGUobz1iW20rK10pbyhyLHMsZyxoKTtpZihmKXtpZihwPjApd2hpbGUo%0AcS0tKXJbcV18fHNbcV18fChzW3FdPUcuY2FsbChpKSk7cz11YihzKX1JLmFwcGx5%0AKGkscyksayYmIWYmJnMubGVuZ3RoPjAmJnArYi5sZW5ndGg+MSYmZmIudW5pcXVl%0AU29ydChpKX1yZXR1cm4gayYmKHc9dixqPXQpLHJ9O3JldHVybiBjP2hiKGYpOmZ9%0AcmV0dXJuIGg9ZmIuY29tcGlsZT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1b%0AXSxmPUFbYSsiICJdO2lmKCFmKXtifHwoYj1nKGEpKSxjPWIubGVuZ3RoO3doaWxl%0AKGMtLSlmPXdiKGJbY10pLGZbdV0/ZC5wdXNoKGYpOmUucHVzaChmKTtmPUEoYSx4%0AYihlLGQpKSxmLnNlbGVjdG9yPWF9cmV0dXJuIGZ9LGk9ZmIuc2VsZWN0PWZ1bmN0%0AaW9uKGEsYixlLGYpe3ZhciBpLGosayxsLG0sbj0iZnVuY3Rpb24iPT10eXBlb2Yg%0AYSYmYSxvPSFmJiZnKGE9bi5zZWxlY3Rvcnx8YSk7aWYoZT1lfHxbXSwxPT09by5s%0AZW5ndGgpe2lmKGo9b1swXT1vWzBdLnNsaWNlKDApLGoubGVuZ3RoPjImJiJJRCI9%0APT0oaz1qWzBdKS50eXBlJiZjLmdldEJ5SWQmJjk9PT1iLm5vZGVUeXBlJiZwJiZk%0ALnJlbGF0aXZlW2pbMV0udHlwZV0pe2lmKGI9KGQuZmluZC5JRChrLm1hdGNoZXNb%0AMF0ucmVwbGFjZShjYixkYiksYil8fFtdKVswXSwhYilyZXR1cm4gZTtuJiYoYj1i%0ALnBhcmVudE5vZGUpLGE9YS5zbGljZShqLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1p%0APVgubmVlZHNDb250ZXh0LnRlc3QoYSk/MDpqLmxlbmd0aDt3aGlsZShpLS0pe2lm%0AKGs9altpXSxkLnJlbGF0aXZlW2w9ay50eXBlXSlicmVhaztpZigobT1kLmZpbmRb%0AbF0pJiYoZj1tKGsubWF0Y2hlc1swXS5yZXBsYWNlKGNiLGRiKSxhYi50ZXN0KGpb%0AMF0udHlwZSkmJm9iKGIucGFyZW50Tm9kZSl8fGIpKSl7aWYoai5zcGxpY2UoaSwx%0AKSxhPWYubGVuZ3RoJiZxYihqKSwhYSlyZXR1cm4gSS5hcHBseShlLGYpLGU7YnJl%0AYWt9fX1yZXR1cm4obnx8aChhLG8pKShmLGIsIXAsZSxhYi50ZXN0KGEpJiZvYihi%0ALnBhcmVudE5vZGUpfHxiKSxlfSxjLnNvcnRTdGFibGU9dS5zcGxpdCgiIikuc29y%0AdChCKS5qb2luKCIiKT09PXUsYy5kZXRlY3REdXBsaWNhdGVzPSEhbCxtKCksYy5z%0Ab3J0RGV0YWNoZWQ9aWIoZnVuY3Rpb24oYSl7cmV0dXJuIDEmYS5jb21wYXJlRG9j%0AdW1lbnRQb3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLGliKGZ1bmN0%0AaW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMi%0APT09YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGpiKCJ0eXBl%0AfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9p%0AZCAwOmEuZ2V0QXR0cmlidXRlKGIsInR5cGUiPT09Yi50b0xvd2VyQ2FzZSgpPzE6%0AMil9KSxjLmF0dHJpYnV0ZXMmJmliKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVy%0ASFRNTD0iPGlucHV0Lz4iLGEuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVl%0AIiwiIiksIiI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8%0AfGpiKCJ2YWx1ZSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjfHwiaW5wdXQiIT09%0AYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP3ZvaWQgMDphLmRlZmF1bHRWYWx1ZX0p%0ALGliKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hLmdldEF0dHJpYnV0ZSgiZGlz%0AYWJsZWQiKX0pfHxqYihMLGZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gYz92%0Ab2lkIDA6YVtiXT09PSEwP2IudG9Mb3dlckNhc2UoKTooZD1hLmdldEF0dHJpYnV0%0AZU5vZGUoYikpJiZkLnNwZWNpZmllZD9kLnZhbHVlOm51bGx9KSxmYn0oYSk7bi5m%0AaW5kPXQsbi5leHByPXQuc2VsZWN0b3JzLG4uZXhwclsiOiJdPW4uZXhwci5wc2V1%0AZG9zLG4udW5pcXVlPXQudW5pcXVlU29ydCxuLnRleHQ9dC5nZXRUZXh0LG4uaXNY%0ATUxEb2M9dC5pc1hNTCxuLmNvbnRhaW5zPXQuY29udGFpbnM7dmFyIHU9bi5leHBy%0ALm1hdGNoLm5lZWRzQ29udGV4dCx2PS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwp%0AJC8sdz0vXi5bXjojXFtcLixdKiQvO2Z1bmN0aW9uIHgoYSxiLGMpe2lmKG4uaXNG%0AdW5jdGlvbihiKSlyZXR1cm4gbi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4h%0AIWIuY2FsbChhLGQsYSkhPT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gbi5ncmVw%0AKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1iIT09Y30pO2lmKCJzdHJpbmciPT10%0AeXBlb2YgYil7aWYody50ZXN0KGIpKXJldHVybiBuLmZpbHRlcihiLGEsYyk7Yj1u%0ALmZpbHRlcihiLGEpfXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4g%0AZy5jYWxsKGIsYSk+PTAhPT1jfSl9bi5maWx0ZXI9ZnVuY3Rpb24oYSxiLGMpe3Zh%0AciBkPWJbMF07cmV0dXJuIGMmJihhPSI6bm90KCIrYSsiKSIpLDE9PT1iLmxlbmd0%0AaCYmMT09PWQubm9kZVR5cGU/bi5maW5kLm1hdGNoZXNTZWxlY3RvcihkLGEpP1tk%0AXTpbXTpuLmZpbmQubWF0Y2hlcyhhLG4uZ3JlcChiLGZ1bmN0aW9uKGEpe3JldHVy%0AbiAxPT09YS5ub2RlVHlwZX0pKX0sbi5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24o%0AYSl7dmFyIGIsYz10aGlzLmxlbmd0aCxkPVtdLGU9dGhpcztpZigic3RyaW5nIiE9%0AdHlwZW9mIGEpcmV0dXJuIHRoaXMucHVzaFN0YWNrKG4oYSkuZmlsdGVyKGZ1bmN0%0AaW9uKCl7Zm9yKGI9MDtjPmI7YisrKWlmKG4uY29udGFpbnMoZVtiXSx0aGlzKSly%0AZXR1cm4hMH0pKTtmb3IoYj0wO2M+YjtiKyspbi5maW5kKGEsZVtiXSxkKTtyZXR1%0Acm4gZD10aGlzLnB1c2hTdGFjayhjPjE/bi51bmlxdWUoZCk6ZCksZC5zZWxlY3Rv%0Acj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2E6YSxkfSxmaWx0ZXI6%0AZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgodGhpcyxhfHxbXSwh%0AMSkpfSxub3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgodGhp%0AcyxhfHxbXSwhMCkpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIXgodGhpcywic3Ry%0AaW5nIj09dHlwZW9mIGEmJnUudGVzdChhKT9uKGEpOmF8fFtdLCExKS5sZW5ndGh9%0AfSk7dmFyIHksej0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQv%0ALEE9bi5mbi5pbml0PWZ1bmN0aW9uKGEsYil7dmFyIGMsZDtpZighYSlyZXR1cm4g%0AdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGEpe2lmKGM9IjwiPT09YVswXSYmIj4i%0APT09YVthLmxlbmd0aC0xXSYmYS5sZW5ndGg+PTM/W251bGwsYSxudWxsXTp6LmV4%0AZWMoYSksIWN8fCFjWzFdJiZiKXJldHVybiFifHxiLmpxdWVyeT8oYnx8eSkuZmlu%0AZChhKTp0aGlzLmNvbnN0cnVjdG9yKGIpLmZpbmQoYSk7aWYoY1sxXSl7aWYoYj1i%0AIGluc3RhbmNlb2Ygbj9iWzBdOmIsbi5tZXJnZSh0aGlzLG4ucGFyc2VIVE1MKGNb%0AMV0sYiYmYi5ub2RlVHlwZT9iLm93bmVyRG9jdW1lbnR8fGI6bCwhMCkpLHYudGVz%0AdChjWzFdKSYmbi5pc1BsYWluT2JqZWN0KGIpKWZvcihjIGluIGIpbi5pc0Z1bmN0%0AaW9uKHRoaXNbY10pP3RoaXNbY10oYltjXSk6dGhpcy5hdHRyKGMsYltjXSk7cmV0%0AdXJuIHRoaXN9cmV0dXJuIGQ9bC5nZXRFbGVtZW50QnlJZChjWzJdKSxkJiZkLnBh%0AcmVudE5vZGUmJih0aGlzLmxlbmd0aD0xLHRoaXNbMF09ZCksdGhpcy5jb250ZXh0%0APWwsdGhpcy5zZWxlY3Rvcj1hLHRoaXN9cmV0dXJuIGEubm9kZVR5cGU/KHRoaXMu%0AY29udGV4dD10aGlzWzBdPWEsdGhpcy5sZW5ndGg9MSx0aGlzKTpuLmlzRnVuY3Rp%0Ab24oYSk/InVuZGVmaW5lZCIhPXR5cGVvZiB5LnJlYWR5P3kucmVhZHkoYSk6YShu%0AKToodm9pZCAwIT09YS5zZWxlY3RvciYmKHRoaXMuc2VsZWN0b3I9YS5zZWxlY3Rv%0Acix0aGlzLmNvbnRleHQ9YS5jb250ZXh0KSxuLm1ha2VBcnJheShhLHRoaXMpKX07%0AQS5wcm90b3R5cGU9bi5mbix5PW4obCk7dmFyIEI9L14oPzpwYXJlbnRzfHByZXYo%0APzpVbnRpbHxBbGwpKS8sQz17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDoh%0AMCxwcmV2OiEwfTtuLmV4dGVuZCh7ZGlyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1b%0AXSxlPXZvaWQgMCE9PWM7d2hpbGUoKGE9YVtiXSkmJjkhPT1hLm5vZGVUeXBlKWlm%0AKDE9PT1hLm5vZGVUeXBlKXtpZihlJiZuKGEpLmlzKGMpKWJyZWFrO2QucHVzaChh%0AKX1yZXR1cm4gZH0sc2libGluZzpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXTth%0AO2E9YS5uZXh0U2libGluZykxPT09YS5ub2RlVHlwZSYmYSE9PWImJmMucHVzaChh%0AKTtyZXR1cm4gY319KSxuLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGEpe3ZhciBi%0APW4oYSx0aGlzKSxjPWIubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlv%0Abigpe2Zvcih2YXIgYT0wO2M+YTthKyspaWYobi5jb250YWlucyh0aGlzLGJbYV0p%0AKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD0w%0ALGU9dGhpcy5sZW5ndGgsZj1bXSxnPXUudGVzdChhKXx8InN0cmluZyIhPXR5cGVv%0AZiBhP24oYSxifHx0aGlzLmNvbnRleHQpOjA7ZT5kO2QrKylmb3IoYz10aGlzW2Rd%0AO2MmJmMhPT1iO2M9Yy5wYXJlbnROb2RlKWlmKGMubm9kZVR5cGU8MTEmJihnP2cu%0AaW5kZXgoYyk+LTE6MT09PWMubm9kZVR5cGUmJm4uZmluZC5tYXRjaGVzU2VsZWN0%0Ab3IoYyxhKSkpe2YucHVzaChjKTticmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2so%0AZi5sZW5ndGg+MT9uLnVuaXF1ZShmKTpmKX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0%0AdXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP2cuY2FsbChuKGEpLHRoaXNbMF0pOmcu%0AY2FsbCh0aGlzLGEuanF1ZXJ5P2FbMF06YSk6dGhpc1swXSYmdGhpc1swXS5wYXJl%0AbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVu%0AY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobi51bmlxdWUobi5tZXJn%0AZSh0aGlzLmdldCgpLG4oYSxiKSkpKX0sYWRkQmFjazpmdW5jdGlvbihhKXtyZXR1%0Acm4gdGhpcy5hZGQobnVsbD09YT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2Jq%0AZWN0LmZpbHRlcihhKSl9fSk7ZnVuY3Rpb24gRChhLGIpe3doaWxlKChhPWFbYl0p%0AJiYxIT09YS5ub2RlVHlwZSk7cmV0dXJuIGF9bi5lYWNoKHtwYXJlbnQ6ZnVuY3Rp%0Ab24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiYxMSE9PWIubm9kZVR5%0AcGU/YjpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBuLmRpcihhLCJw%0AYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJu%0AIG4uZGlyKGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVy%0AbiBEKGEsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIEQo%0AYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJu%0AIG4uZGlyKGEsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oYSl7cmV0%0AdXJuIG4uZGlyKGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rp%0Ab24oYSxiLGMpe3JldHVybiBuLmRpcihhLCJuZXh0U2libGluZyIsYyl9LHByZXZV%0AbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG4uZGlyKGEsInByZXZpb3VzU2li%0AbGluZyIsYyl9LHNpYmxpbmdzOmZ1bmN0aW9uKGEpe3JldHVybiBuLnNpYmxpbmco%0AKGEucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1bmN0%0AaW9uKGEpe3JldHVybiBuLnNpYmxpbmcoYS5maXJzdENoaWxkKX0sY29udGVudHM6%0AZnVuY3Rpb24oYSl7cmV0dXJuIGEuY29udGVudERvY3VtZW50fHxuLm1lcmdlKFtd%0ALGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe24uZm5bYV09ZnVuY3Rpb24o%0AYyxkKXt2YXIgZT1uLm1hcCh0aGlzLGIsYyk7cmV0dXJuIlVudGlsIiE9PWEuc2xp%0AY2UoLTUpJiYoZD1jKSxkJiYic3RyaW5nIj09dHlwZW9mIGQmJihlPW4uZmlsdGVy%0AKGQsZSkpLHRoaXMubGVuZ3RoPjEmJihDW2FdfHxuLnVuaXF1ZShlKSxCLnRlc3Qo%0AYSkmJmUucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhlKX19KTt2YXIgRT0vXFMr%0AL2csRj17fTtmdW5jdGlvbiBHKGEpe3ZhciBiPUZbYV09e307cmV0dXJuIG4uZWFj%0AaChhLm1hdGNoKEUpfHxbXSxmdW5jdGlvbihhLGMpe2JbY109ITB9KSxifW4uQ2Fs%0AbGJhY2tzPWZ1bmN0aW9uKGEpe2E9InN0cmluZyI9PXR5cGVvZiBhP0ZbYV18fEco%0AYSk6bi5leHRlbmQoe30sYSk7dmFyIGIsYyxkLGUsZixnLGg9W10saT0hYS5vbmNl%0AJiZbXSxqPWZ1bmN0aW9uKGwpe2ZvcihiPWEubWVtb3J5JiZsLGM9ITAsZz1lfHww%0ALGU9MCxmPWgubGVuZ3RoLGQ9ITA7aCYmZj5nO2crKylpZihoW2ddLmFwcGx5KGxb%0AMF0sbFsxXSk9PT0hMSYmYS5zdG9wT25GYWxzZSl7Yj0hMTticmVha31kPSExLGgm%0AJihpP2kubGVuZ3RoJiZqKGkuc2hpZnQoKSk6Yj9oPVtdOmsuZGlzYWJsZSgpKX0s%0Aaz17YWRkOmZ1bmN0aW9uKCl7aWYoaCl7dmFyIGM9aC5sZW5ndGg7IWZ1bmN0aW9u%0AIGcoYil7bi5lYWNoKGIsZnVuY3Rpb24oYixjKXt2YXIgZD1uLnR5cGUoYyk7ImZ1%0AbmN0aW9uIj09PWQ/YS51bmlxdWUmJmsuaGFzKGMpfHxoLnB1c2goYyk6YyYmYy5s%0AZW5ndGgmJiJzdHJpbmciIT09ZCYmZyhjKX0pfShhcmd1bWVudHMpLGQ/Zj1oLmxl%0Abmd0aDpiJiYoZT1jLGooYikpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24o%0AKXtyZXR1cm4gaCYmbi5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihhLGIpe3ZhciBj%0AO3doaWxlKChjPW4uaW5BcnJheShiLGgsYykpPi0xKWguc3BsaWNlKGMsMSksZCYm%0AKGY+PWMmJmYtLSxnPj1jJiZnLS0pfSksdGhpc30saGFzOmZ1bmN0aW9uKGEpe3Jl%0AdHVybiBhP24uaW5BcnJheShhLGgpPi0xOiEoIWh8fCFoLmxlbmd0aCl9LGVtcHR5%0AOmZ1bmN0aW9uKCl7cmV0dXJuIGg9W10sZj0wLHRoaXN9LGRpc2FibGU6ZnVuY3Rp%0Ab24oKXtyZXR1cm4gaD1pPWI9dm9pZCAwLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9u%0AKCl7cmV0dXJuIWh9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gaT12b2lkIDAsYnx8%0Aay5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWl9LGZp%0AcmVXaXRoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIWh8fGMmJiFpfHwoYj1ifHxbXSxi%0APVthLGIuc2xpY2U/Yi5zbGljZSgpOmJdLGQ/aS5wdXNoKGIpOmooYikpLHRoaXN9%0ALGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gay5maXJlV2l0aCh0aGlzLGFyZ3VtZW50%0AcyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWN9fTtyZXR1cm4ga30s%0Abi5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGEpe3ZhciBiPVtbInJlc29sdmUi%0ALCJkb25lIixuLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVzb2x2ZWQiXSxb%0AInJlamVjdCIsImZhaWwiLG4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWpl%0AY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLG4uQ2FsbGJhY2tzKCJtZW1vcnki%0AKV1dLGM9InBlbmRpbmciLGQ9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGFs%0Ad2F5czpmdW5jdGlvbigpe3JldHVybiBlLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFy%0AZ3VtZW50cyksdGhpc30sdGhlbjpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50czty%0AZXR1cm4gbi5EZWZlcnJlZChmdW5jdGlvbihjKXtuLmVhY2goYixmdW5jdGlvbihi%0ALGYpe3ZhciBnPW4uaXNGdW5jdGlvbihhW2JdKSYmYVtiXTtlW2ZbMV1dKGZ1bmN0%0AaW9uKCl7dmFyIGE9ZyYmZy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7YSYmbi5pc0Z1%0AbmN0aW9uKGEucHJvbWlzZSk/YS5wcm9taXNlKCkuZG9uZShjLnJlc29sdmUpLmZh%0AaWwoYy5yZWplY3QpLnByb2dyZXNzKGMubm90aWZ5KTpjW2ZbMF0rIldpdGgiXSh0%0AaGlzPT09ZD9jLnByb21pc2UoKTp0aGlzLGc/W2FdOmFyZ3VtZW50cyl9KX0pLGE9%0AbnVsbH0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVs%0AbCE9YT9uLmV4dGVuZChhLGQpOmR9fSxlPXt9O3JldHVybiBkLnBpcGU9ZC50aGVu%0ALG4uZWFjaChiLGZ1bmN0aW9uKGEsZil7dmFyIGc9ZlsyXSxoPWZbM107ZFtmWzFd%0AXT1nLmFkZCxoJiZnLmFkZChmdW5jdGlvbigpe2M9aH0sYlsxXmFdWzJdLmRpc2Fi%0AbGUsYlsyXVsyXS5sb2NrKSxlW2ZbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIGVbZlsw%0AXSsiV2l0aCJdKHRoaXM9PT1lP2Q6dGhpcyxhcmd1bWVudHMpLHRoaXN9LGVbZlsw%0AXSsiV2l0aCJdPWcuZmlyZVdpdGh9KSxkLnByb21pc2UoZSksYSYmYS5jYWxsKGUs%0AZSksZX0sd2hlbjpmdW5jdGlvbihhKXt2YXIgYj0wLGM9ZC5jYWxsKGFyZ3VtZW50%0AcyksZT1jLmxlbmd0aCxmPTEhPT1lfHxhJiZuLmlzRnVuY3Rpb24oYS5wcm9taXNl%0AKT9lOjAsZz0xPT09Zj9hOm4uRGVmZXJyZWQoKSxoPWZ1bmN0aW9uKGEsYixjKXty%0AZXR1cm4gZnVuY3Rpb24oZSl7YlthXT10aGlzLGNbYV09YXJndW1lbnRzLmxlbmd0%0AaD4xP2QuY2FsbChhcmd1bWVudHMpOmUsYz09PWk/Zy5ub3RpZnlXaXRoKGIsYyk6%0ALS1mfHxnLnJlc29sdmVXaXRoKGIsYyl9fSxpLGosaztpZihlPjEpZm9yKGk9bmV3%0AIEFycmF5KGUpLGo9bmV3IEFycmF5KGUpLGs9bmV3IEFycmF5KGUpO2U+YjtiKysp%0AY1tiXSYmbi5pc0Z1bmN0aW9uKGNbYl0ucHJvbWlzZSk/Y1tiXS5wcm9taXNlKCku%0AZG9uZShoKGIsayxjKSkuZmFpbChnLnJlamVjdCkucHJvZ3Jlc3MoaChiLGosaSkp%0AOi0tZjtyZXR1cm4gZnx8Zy5yZXNvbHZlV2l0aChrLGMpLGcucHJvbWlzZSgpfX0p%0AO3ZhciBIO24uZm4ucmVhZHk9ZnVuY3Rpb24oYSl7cmV0dXJuIG4ucmVhZHkucHJv%0AbWlzZSgpLmRvbmUoYSksdGhpc30sbi5leHRlbmQoe2lzUmVhZHk6ITEscmVhZHlX%0AYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGEpe2E/bi5yZWFkeVdhaXQrKzpuLnJl%0AYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oYSl7KGE9PT0hMD8tLW4ucmVhZHlXYWl0%0AOm4uaXNSZWFkeSl8fChuLmlzUmVhZHk9ITAsYSE9PSEwJiYtLW4ucmVhZHlXYWl0%0APjB8fChILnJlc29sdmVXaXRoKGwsW25dKSxuLmZuLnRyaWdnZXJIYW5kbGVyJiYo%0AbihsKS50cmlnZ2VySGFuZGxlcigicmVhZHkiKSxuKGwpLm9mZigicmVhZHkiKSkp%0AKX19KTtmdW5jdGlvbiBJKCl7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250%0AZW50TG9hZGVkIixJLCExKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLEks%0AITEpLG4ucmVhZHkoKX1uLnJlYWR5LnByb21pc2U9ZnVuY3Rpb24oYil7cmV0dXJu%0AIEh8fChIPW4uRGVmZXJyZWQoKSwiY29tcGxldGUiPT09bC5yZWFkeVN0YXRlP3Nl%0AdFRpbWVvdXQobi5yZWFkeSk6KGwuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVu%0AdExvYWRlZCIsSSwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixJLCExKSkp%0ALEgucHJvbWlzZShiKX0sbi5yZWFkeS5wcm9taXNlKCk7dmFyIEo9bi5hY2Nlc3M9%0AZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9MCxpPWEubGVuZ3RoLGo9bnVs%0AbD09YztpZigib2JqZWN0Ij09PW4udHlwZShjKSl7ZT0hMDtmb3IoaCBpbiBjKW4u%0AYWNjZXNzKGEsYixoLGNbaF0sITAsZixnKX1lbHNlIGlmKHZvaWQgMCE9PWQmJihl%0APSEwLG4uaXNGdW5jdGlvbihkKXx8KGc9ITApLGomJihnPyhiLmNhbGwoYSxkKSxi%0APW51bGwpOihqPWIsYj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGouY2FsbChuKGEp%0ALGMpfSkpLGIpKWZvcig7aT5oO2grKyliKGFbaF0sYyxnP2Q6ZC5jYWxsKGFbaF0s%0AaCxiKGFbaF0sYykpKTtyZXR1cm4gZT9hOmo/Yi5jYWxsKGEpOmk/YihhWzBdLGMp%0AOmZ9O24uYWNjZXB0RGF0YT1mdW5jdGlvbihhKXtyZXR1cm4gMT09PWEubm9kZVR5%0AcGV8fDk9PT1hLm5vZGVUeXBlfHwhK2Eubm9kZVR5cGV9O2Z1bmN0aW9uIEsoKXtP%0AYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5jYWNoZT17fSwwLHtnZXQ6ZnVuY3Rp%0Ab24oKXtyZXR1cm57fX19KSx0aGlzLmV4cGFuZG89bi5leHBhbmRvK01hdGgucmFu%0AZG9tKCl9Sy51aWQ9MSxLLmFjY2VwdHM9bi5hY2NlcHREYXRhLEsucHJvdG90eXBl%0APXtrZXk6ZnVuY3Rpb24oYSl7aWYoIUsuYWNjZXB0cyhhKSlyZXR1cm4gMDt2YXIg%0AYj17fSxjPWFbdGhpcy5leHBhbmRvXTtpZighYyl7Yz1LLnVpZCsrO3RyeXtiW3Ro%0AaXMuZXhwYW5kb109e3ZhbHVlOmN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGEs%0AYil9Y2F0Y2goZCl7Ylt0aGlzLmV4cGFuZG9dPWMsbi5leHRlbmQoYSxiKX19cmV0%0AdXJuIHRoaXMuY2FjaGVbY118fCh0aGlzLmNhY2hlW2NdPXt9KSxjfSxzZXQ6ZnVu%0AY3Rpb24oYSxiLGMpe3ZhciBkLGU9dGhpcy5rZXkoYSksZj10aGlzLmNhY2hlW2Vd%0AO2lmKCJzdHJpbmciPT10eXBlb2YgYilmW2JdPWM7ZWxzZSBpZihuLmlzRW1wdHlP%0AYmplY3QoZikpbi5leHRlbmQodGhpcy5jYWNoZVtlXSxiKTtlbHNlIGZvcihkIGlu%0AIGIpZltkXT1iW2RdO3JldHVybiBmfSxnZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz10%0AaGlzLmNhY2hlW3RoaXMua2V5KGEpXTtyZXR1cm4gdm9pZCAwPT09Yj9jOmNbYl19%0ALGFjY2VzczpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIHZvaWQgMD09PWJ8%0AfGImJiJzdHJpbmciPT10eXBlb2YgYiYmdm9pZCAwPT09Yz8oZD10aGlzLmdldChh%0ALGIpLHZvaWQgMCE9PWQ/ZDp0aGlzLmdldChhLG4uY2FtZWxDYXNlKGIpKSk6KHRo%0AaXMuc2V0KGEsYixjKSx2b2lkIDAhPT1jP2M6Yil9LHJlbW92ZTpmdW5jdGlvbihh%0ALGIpe3ZhciBjLGQsZSxmPXRoaXMua2V5KGEpLGc9dGhpcy5jYWNoZVtmXTtpZih2%0Ab2lkIDA9PT1iKXRoaXMuY2FjaGVbZl09e307ZWxzZXtuLmlzQXJyYXkoYik/ZD1i%0ALmNvbmNhdChiLm1hcChuLmNhbWVsQ2FzZSkpOihlPW4uY2FtZWxDYXNlKGIpLGIg%0AaW4gZz9kPVtiLGVdOihkPWUsZD1kIGluIGc/W2RdOmQubWF0Y2goRSl8fFtdKSks%0AYz1kLmxlbmd0aDt3aGlsZShjLS0pZGVsZXRlIGdbZFtjXV19fSxoYXNEYXRhOmZ1%0AbmN0aW9uKGEpe3JldHVybiFuLmlzRW1wdHlPYmplY3QodGhpcy5jYWNoZVthW3Ro%0AaXMuZXhwYW5kb11dfHx7fSl9LGRpc2NhcmQ6ZnVuY3Rpb24oYSl7YVt0aGlzLmV4%0AcGFuZG9dJiZkZWxldGUgdGhpcy5jYWNoZVthW3RoaXMuZXhwYW5kb11dfX07dmFy%0AIEw9bmV3IEssTT1uZXcgSyxOPS9eKD86XHtbXHdcV10qXH18XFtbXHdcV10qXF0p%0AJC8sTz0vKFtBLVpdKS9nO2Z1bmN0aW9uIFAoYSxiLGMpe3ZhciBkO2lmKHZvaWQg%0AMD09PWMmJjE9PT1hLm5vZGVUeXBlKWlmKGQ9ImRhdGEtIitiLnJlcGxhY2UoTywi%0ALSQxIikudG9Mb3dlckNhc2UoKSxjPWEuZ2V0QXR0cmlidXRlKGQpLCJzdHJpbmci%0APT10eXBlb2YgYyl7dHJ5e2M9InRydWUiPT09Yz8hMDoiZmFsc2UiPT09Yz8hMToi%0AbnVsbCI9PT1jP251bGw6K2MrIiI9PT1jPytjOk4udGVzdChjKT9uLnBhcnNlSlNP%0ATihjKTpjfWNhdGNoKGUpe31NLnNldChhLGIsYyl9ZWxzZSBjPXZvaWQgMDtyZXR1%0Acm4gY31uLmV4dGVuZCh7aGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gTS5oYXNE%0AYXRhKGEpfHxMLmhhc0RhdGEoYSl9LGRhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVy%0AbiBNLmFjY2VzcyhhLGIsYyl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtNLnJl%0AbW92ZShhLGIpCn0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBMLmFjY2Vz%0AcyhhLGIsYyl9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7TC5yZW1vdmUoYSxi%0AKX19KSxuLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxm%0APXRoaXNbMF0sZz1mJiZmLmF0dHJpYnV0ZXM7aWYodm9pZCAwPT09YSl7aWYodGhp%0Acy5sZW5ndGgmJihlPU0uZ2V0KGYpLDE9PT1mLm5vZGVUeXBlJiYhTC5nZXQoZiwi%0AaGFzRGF0YUF0dHJzIikpKXtjPWcubGVuZ3RoO3doaWxlKGMtLSlnW2NdJiYoZD1n%0AW2NdLm5hbWUsMD09PWQuaW5kZXhPZigiZGF0YS0iKSYmKGQ9bi5jYW1lbENhc2Uo%0AZC5zbGljZSg1KSksUChmLGQsZVtkXSkpKTtMLnNldChmLCJoYXNEYXRhQXR0cnMi%0ALCEwKX1yZXR1cm4gZX1yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGE/dGhpcy5lYWNo%0AKGZ1bmN0aW9uKCl7TS5zZXQodGhpcyxhKX0pOkoodGhpcyxmdW5jdGlvbihiKXt2%0AYXIgYyxkPW4uY2FtZWxDYXNlKGEpO2lmKGYmJnZvaWQgMD09PWIpe2lmKGM9TS5n%0AZXQoZixhKSx2b2lkIDAhPT1jKXJldHVybiBjO2lmKGM9TS5nZXQoZixkKSx2b2lk%0AIDAhPT1jKXJldHVybiBjO2lmKGM9UChmLGQsdm9pZCAwKSx2b2lkIDAhPT1jKXJl%0AdHVybiBjfWVsc2UgdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9TS5nZXQodGhp%0AcyxkKTtNLnNldCh0aGlzLGQsYiksLTEhPT1hLmluZGV4T2YoIi0iKSYmdm9pZCAw%0AIT09YyYmTS5zZXQodGhpcyxhLGIpfSl9LG51bGwsYixhcmd1bWVudHMubGVuZ3Ro%0APjEsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMu%0AZWFjaChmdW5jdGlvbigpe00ucmVtb3ZlKHRoaXMsYSl9KX19KSxuLmV4dGVuZCh7%0AcXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBhPyhiPShifHwiZngi%0AKSsicXVldWUiLGQ9TC5nZXQoYSxiKSxjJiYoIWR8fG4uaXNBcnJheShjKT9kPUwu%0AYWNjZXNzKGEsYixuLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKSxkfHxbXSk6dm9p%0AZCAwfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPW4ucXVl%0AdWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9bi5fcXVldWVIb29rcyhh%0ALGIpLGc9ZnVuY3Rpb24oKXtuLmRlcXVldWUoYSxiKX07ImlucHJvZ3Jlc3MiPT09%0AZSYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKCJmeCI9PT1iJiZjLnVuc2hpZnQoImlu%0AcHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZm%0ALmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1i%0AKyJxdWV1ZUhvb2tzIjtyZXR1cm4gTC5nZXQoYSxjKXx8TC5hY2Nlc3MoYSxjLHtl%0AbXB0eTpuLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtM%0ALnJlbW92ZShhLFtiKyJxdWV1ZSIsY10pfSl9KX19KSxuLmZuLmV4dGVuZCh7cXVl%0AdWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVybiJzdHJpbmciIT10eXBlb2Yg%0AYSYmKGI9YSxhPSJmeCIsYy0tKSxhcmd1bWVudHMubGVuZ3RoPGM/bi5xdWV1ZSh0%0AaGlzWzBdLGEpOnZvaWQgMD09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2%0AYXIgYz1uLnF1ZXVlKHRoaXMsYSxiKTtuLl9xdWV1ZUhvb2tzKHRoaXMsYSksImZ4%0AIj09PWEmJiJpbnByb2dyZXNzIiE9PWNbMF0mJm4uZGVxdWV1ZSh0aGlzLGEpfSl9%0ALGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp%0Ae24uZGVxdWV1ZSh0aGlzLGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0%0AdXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxi%0AKXt2YXIgYyxkPTEsZT1uLkRlZmVycmVkKCksZj10aGlzLGc9dGhpcy5sZW5ndGgs%0AaD1mdW5jdGlvbigpey0tZHx8ZS5yZXNvbHZlV2l0aChmLFtmXSl9OyJzdHJpbmci%0AIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHwiZngiO3doaWxlKGctLSlj%0APUwuZ2V0KGZbZ10sYSsicXVldWVIb29rcyIpLGMmJmMuZW1wdHkmJihkKyssYy5l%0AbXB0eS5hZGQoaCkpO3JldHVybiBoKCksZS5wcm9taXNlKGIpfX0pO3ZhciBRPS9b%0AKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLFI9WyJU%0Ab3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxTPWZ1bmN0aW9uKGEsYil7cmV0%0AdXJuIGE9Ynx8YSwibm9uZSI9PT1uLmNzcyhhLCJkaXNwbGF5Iil8fCFuLmNvbnRh%0AaW5zKGEub3duZXJEb2N1bWVudCxhKX0sVD0vXig/OmNoZWNrYm94fHJhZGlvKSQv%0AaTshZnVuY3Rpb24oKXt2YXIgYT1sLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxi%0APWEuYXBwZW5kQ2hpbGQobC5jcmVhdGVFbGVtZW50KCJkaXYiKSksYz1sLmNyZWF0%0AZUVsZW1lbnQoImlucHV0Iik7Yy5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIp%0ALGMuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLGMuc2V0QXR0cmli%0AdXRlKCJuYW1lIiwidCIpLGIuYXBwZW5kQ2hpbGQoYyksay5jaGVja0Nsb25lPWIu%0AY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGIu%0AaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixrLm5vQ2xvbmVDaGVj%0Aa2VkPSEhYi5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWV9KCk7%0AdmFyIFU9InVuZGVmaW5lZCI7ay5mb2N1c2luQnViYmxlcz0ib25mb2N1c2luImlu%0AIGE7dmFyIFY9L15rZXkvLFc9L14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51%0AKXxjbGljay8sWD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sWT0v%0AXihbXi5dKikoPzpcLiguKyl8KSQvO2Z1bmN0aW9uIFooKXtyZXR1cm4hMH1mdW5j%0AdGlvbiAkKCl7cmV0dXJuITF9ZnVuY3Rpb24gXygpe3RyeXtyZXR1cm4gbC5hY3Rp%0AdmVFbGVtZW50fWNhdGNoKGEpe319bi5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5j%0AdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbyxwLHEscj1MLmdl%0AdChhKTtpZihyKXtjLmhhbmRsZXImJihmPWMsYz1mLmhhbmRsZXIsZT1mLnNlbGVj%0AdG9yKSxjLmd1aWR8fChjLmd1aWQ9bi5ndWlkKyspLChpPXIuZXZlbnRzKXx8KGk9%0Aci5ldmVudHM9e30pLChnPXIuaGFuZGxlKXx8KGc9ci5oYW5kbGU9ZnVuY3Rpb24o%0AYil7cmV0dXJuIHR5cGVvZiBuIT09VSYmbi5ldmVudC50cmlnZ2VyZWQhPT1iLnR5%0AcGU/bi5ldmVudC5kaXNwYXRjaC5hcHBseShhLGFyZ3VtZW50cyk6dm9pZCAwfSks%0AYj0oYnx8IiIpLm1hdGNoKEUpfHxbIiJdLGo9Yi5sZW5ndGg7d2hpbGUoai0tKWg9%0AWS5leGVjKGJbal0pfHxbXSxvPXE9aFsxXSxwPShoWzJdfHwiIikuc3BsaXQoIi4i%0AKS5zb3J0KCksbyYmKGw9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShlP2wuZGVs%0AZWdhdGVUeXBlOmwuYmluZFR5cGUpfHxvLGw9bi5ldmVudC5zcGVjaWFsW29dfHx7%0AfSxrPW4uZXh0ZW5kKHt0eXBlOm8sb3JpZ1R5cGU6cSxkYXRhOmQsaGFuZGxlcjpj%0ALGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJm4uZXhwci5t%0AYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3BhY2U6cC5qb2luKCIuIil9%0ALGYpLChtPWlbb10pfHwobT1pW29dPVtdLG0uZGVsZWdhdGVDb3VudD0wLGwuc2V0%0AdXAmJmwuc2V0dXAuY2FsbChhLGQscCxnKSE9PSExfHxhLmFkZEV2ZW50TGlzdGVu%0AZXImJmEuYWRkRXZlbnRMaXN0ZW5lcihvLGcsITEpKSxsLmFkZCYmKGwuYWRkLmNh%0AbGwoYSxrKSxrLmhhbmRsZXIuZ3VpZHx8KGsuaGFuZGxlci5ndWlkPWMuZ3VpZCkp%0ALGU/bS5zcGxpY2UobS5kZWxlZ2F0ZUNvdW50KyssMCxrKTptLnB1c2goayksbi5l%0AdmVudC5nbG9iYWxbb109ITApfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7%0AdmFyIGYsZyxoLGksaixrLGwsbSxvLHAscSxyPUwuaGFzRGF0YShhKSYmTC5nZXQo%0AYSk7aWYociYmKGk9ci5ldmVudHMpKXtiPShifHwiIikubWF0Y2goRSl8fFsiIl0s%0Aaj1iLmxlbmd0aDt3aGlsZShqLS0paWYoaD1ZLmV4ZWMoYltqXSl8fFtdLG89cT1o%0AWzFdLHA9KGhbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxvKXtsPW4uZXZlbnQu%0Ac3BlY2lhbFtvXXx8e30sbz0oZD9sLmRlbGVnYXRlVHlwZTpsLmJpbmRUeXBlKXx8%0AbyxtPWlbb118fFtdLGg9aFsyXSYmbmV3IFJlZ0V4cCgiKF58XFwuKSIrcC5qb2lu%0AKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKSxnPWY9bS5sZW5ndGg7d2hpbGUo%0AZi0tKWs9bVtmXSwhZSYmcSE9PWsub3JpZ1R5cGV8fGMmJmMuZ3VpZCE9PWsuZ3Vp%0AZHx8aCYmIWgudGVzdChrLm5hbWVzcGFjZSl8fGQmJmQhPT1rLnNlbGVjdG9yJiYo%0AIioqIiE9PWR8fCFrLnNlbGVjdG9yKXx8KG0uc3BsaWNlKGYsMSksay5zZWxlY3Rv%0AciYmbS5kZWxlZ2F0ZUNvdW50LS0sbC5yZW1vdmUmJmwucmVtb3ZlLmNhbGwoYSxr%0AKSk7ZyYmIW0ubGVuZ3RoJiYobC50ZWFyZG93biYmbC50ZWFyZG93bi5jYWxsKGEs%0AcCxyLmhhbmRsZSkhPT0hMXx8bi5yZW1vdmVFdmVudChhLG8sci5oYW5kbGUpLGRl%0AbGV0ZSBpW29dKX1lbHNlIGZvcihvIGluIGkpbi5ldmVudC5yZW1vdmUoYSxvK2Jb%0Aal0sYyxkLCEwKTtuLmlzRW1wdHlPYmplY3QoaSkmJihkZWxldGUgci5oYW5kbGUs%0ATC5yZW1vdmUoYSwiZXZlbnRzIikpfX0sdHJpZ2dlcjpmdW5jdGlvbihiLGMsZCxl%0AKXt2YXIgZixnLGgsaSxrLG0sbyxwPVtkfHxsXSxxPWouY2FsbChiLCJ0eXBlIik/%0AYi50eXBlOmIscj1qLmNhbGwoYiwibmFtZXNwYWNlIik/Yi5uYW1lc3BhY2Uuc3Bs%0AaXQoIi4iKTpbXTtpZihnPWg9ZD1kfHxsLDMhPT1kLm5vZGVUeXBlJiY4IT09ZC5u%0Ab2RlVHlwZSYmIVgudGVzdChxK24uZXZlbnQudHJpZ2dlcmVkKSYmKHEuaW5kZXhP%0AZigiLiIpPj0wJiYocj1xLnNwbGl0KCIuIikscT1yLnNoaWZ0KCksci5zb3J0KCkp%0ALGs9cS5pbmRleE9mKCI6Iik8MCYmIm9uIitxLGI9YltuLmV4cGFuZG9dP2I6bmV3%0AIG4uRXZlbnQocSwib2JqZWN0Ij09dHlwZW9mIGImJmIpLGIuaXNUcmlnZ2VyPWU/%0AMjozLGIubmFtZXNwYWNlPXIuam9pbigiLiIpLGIubmFtZXNwYWNlX3JlPWIubmFt%0AZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK3Iuam9pbigiXFwuKD86LipcXC58%0AKSIpKyIoXFwufCQpIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50YXJnZXR8fChi%0ALnRhcmdldD1kKSxjPW51bGw9PWM/W2JdOm4ubWFrZUFycmF5KGMsW2JdKSxvPW4u%0AZXZlbnQuc3BlY2lhbFtxXXx8e30sZXx8IW8udHJpZ2dlcnx8by50cmlnZ2VyLmFw%0AcGx5KGQsYykhPT0hMSkpe2lmKCFlJiYhby5ub0J1YmJsZSYmIW4uaXNXaW5kb3co%0AZCkpe2ZvcihpPW8uZGVsZWdhdGVUeXBlfHxxLFgudGVzdChpK3EpfHwoZz1nLnBh%0AcmVudE5vZGUpO2c7Zz1nLnBhcmVudE5vZGUpcC5wdXNoKGcpLGg9ZztoPT09KGQu%0Ab3duZXJEb2N1bWVudHx8bCkmJnAucHVzaChoLmRlZmF1bHRWaWV3fHxoLnBhcmVu%0AdFdpbmRvd3x8YSl9Zj0wO3doaWxlKChnPXBbZisrXSkmJiFiLmlzUHJvcGFnYXRp%0Ab25TdG9wcGVkKCkpYi50eXBlPWY+MT9pOm8uYmluZFR5cGV8fHEsbT0oTC5nZXQo%0AZywiZXZlbnRzIil8fHt9KVtiLnR5cGVdJiZMLmdldChnLCJoYW5kbGUiKSxtJiZt%0ALmFwcGx5KGcsYyksbT1rJiZnW2tdLG0mJm0uYXBwbHkmJm4uYWNjZXB0RGF0YShn%0AKSYmKGIucmVzdWx0PW0uYXBwbHkoZyxjKSxiLnJlc3VsdD09PSExJiZiLnByZXZl%0AbnREZWZhdWx0KCkpO3JldHVybiBiLnR5cGU9cSxlfHxiLmlzRGVmYXVsdFByZXZl%0AbnRlZCgpfHxvLl9kZWZhdWx0JiZvLl9kZWZhdWx0LmFwcGx5KHAucG9wKCksYykh%0APT0hMXx8IW4uYWNjZXB0RGF0YShkKXx8ayYmbi5pc0Z1bmN0aW9uKGRbcV0pJiYh%0Abi5pc1dpbmRvdyhkKSYmKGg9ZFtrXSxoJiYoZFtrXT1udWxsKSxuLmV2ZW50LnRy%0AaWdnZXJlZD1xLGRbcV0oKSxuLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsaCYmKGRb%0Aa109aCkpLGIucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YT1uLmV2ZW50%0ALmZpeChhKTt2YXIgYixjLGUsZixnLGg9W10saT1kLmNhbGwoYXJndW1lbnRzKSxq%0APShMLmdldCh0aGlzLCJldmVudHMiKXx8e30pW2EudHlwZV18fFtdLGs9bi5ldmVu%0AdC5zcGVjaWFsW2EudHlwZV18fHt9O2lmKGlbMF09YSxhLmRlbGVnYXRlVGFyZ2V0%0APXRoaXMsIWsucHJlRGlzcGF0Y2h8fGsucHJlRGlzcGF0Y2guY2FsbCh0aGlzLGEp%0AIT09ITEpe2g9bi5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsYSxqKSxiPTA7d2hp%0AbGUoKGY9aFtiKytdKSYmIWEuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7YS5jdXJy%0AZW50VGFyZ2V0PWYuZWxlbSxjPTA7d2hpbGUoKGc9Zi5oYW5kbGVyc1tjKytdKSYm%0AIWEuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkoIWEubmFtZXNwYWNl%0AX3JlfHxhLm5hbWVzcGFjZV9yZS50ZXN0KGcubmFtZXNwYWNlKSkmJihhLmhhbmRs%0AZU9iaj1nLGEuZGF0YT1nLmRhdGEsZT0oKG4uZXZlbnQuc3BlY2lhbFtnLm9yaWdU%0AeXBlXXx8e30pLmhhbmRsZXx8Zy5oYW5kbGVyKS5hcHBseShmLmVsZW0saSksdm9p%0AZCAwIT09ZSYmKGEucmVzdWx0PWUpPT09ITEmJihhLnByZXZlbnREZWZhdWx0KCks%0AYS5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBrLnBvc3REaXNwYXRjaCYmay5w%0Ab3N0RGlzcGF0Y2guY2FsbCh0aGlzLGEpLGEucmVzdWx0fX0saGFuZGxlcnM6ZnVu%0AY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnPVtdLGg9Yi5kZWxlZ2F0ZUNvdW50LGk9%0AYS50YXJnZXQ7aWYoaCYmaS5ub2RlVHlwZSYmKCFhLmJ1dHRvbnx8ImNsaWNrIiE9%0APWEudHlwZSkpZm9yKDtpIT09dGhpcztpPWkucGFyZW50Tm9kZXx8dGhpcylpZihp%0ALmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1hLnR5cGUpe2ZvcihkPVtdLGM9MDto%0APmM7YysrKWY9YltjXSxlPWYuc2VsZWN0b3IrIiAiLHZvaWQgMD09PWRbZV0mJihk%0AW2VdPWYubmVlZHNDb250ZXh0P24oZSx0aGlzKS5pbmRleChpKT49MDpuLmZpbmQo%0AZSx0aGlzLG51bGwsW2ldKS5sZW5ndGgpLGRbZV0mJmQucHVzaChmKTtkLmxlbmd0%0AaCYmZy5wdXNoKHtlbGVtOmksaGFuZGxlcnM6ZH0pfXJldHVybiBoPGIubGVuZ3Ro%0AJiZnLnB1c2goe2VsZW06dGhpcyxoYW5kbGVyczpiLnNsaWNlKGgpfSksZ30scHJv%0AcHM6ImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFy%0AZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRh%0AcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7%0AfSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNw%0AbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PWEud2hp%0AY2gmJihhLndoaWNoPW51bGwhPWIuY2hhckNvZGU/Yi5jaGFyQ29kZTpiLmtleUNv%0AZGUpLGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50%0AWCBjbGllbnRZIG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNj%0AcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGIp%0Ae3ZhciBjLGQsZSxmPWIuYnV0dG9uO3JldHVybiBudWxsPT1hLnBhZ2VYJiZudWxs%0AIT1iLmNsaWVudFgmJihjPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGwsZD1jLmRv%0AY3VtZW50RWxlbWVudCxlPWMuYm9keSxhLnBhZ2VYPWIuY2xpZW50WCsoZCYmZC5z%0AY3JvbGxMZWZ0fHxlJiZlLnNjcm9sbExlZnR8fDApLShkJiZkLmNsaWVudExlZnR8%0AfGUmJmUuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1iLmNsaWVudFkrKGQmJmQuc2Ny%0Ab2xsVG9wfHxlJiZlLnNjcm9sbFRvcHx8MCktKGQmJmQuY2xpZW50VG9wfHxlJiZl%0ALmNsaWVudFRvcHx8MCkpLGEud2hpY2h8fHZvaWQgMD09PWZ8fChhLndoaWNoPTEm%0AZj8xOjImZj8zOjQmZj8yOjApLGF9fSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtuLmV4%0AcGFuZG9dKXJldHVybiBhO3ZhciBiLGMsZCxlPWEudHlwZSxmPWEsZz10aGlzLmZp%0AeEhvb2tzW2VdO2d8fCh0aGlzLmZpeEhvb2tzW2VdPWc9Vy50ZXN0KGUpP3RoaXMu%0AbW91c2VIb29rczpWLnRlc3QoZSk/dGhpcy5rZXlIb29rczp7fSksZD1nLnByb3Bz%0AP3RoaXMucHJvcHMuY29uY2F0KGcucHJvcHMpOnRoaXMucHJvcHMsYT1uZXcgbi5F%0AdmVudChmKSxiPWQubGVuZ3RoO3doaWxlKGItLSljPWRbYl0sYVtjXT1mW2NdO3Jl%0AdHVybiBhLnRhcmdldHx8KGEudGFyZ2V0PWwpLDM9PT1hLnRhcmdldC5ub2RlVHlw%0AZSYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGcuZmlsdGVyP2cuZmls%0AdGVyKGEsZik6YX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0%0AcmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMhPT1fKCkmJnRoaXMuZm9jdXM/%0AKHRoaXMuZm9jdXMoKSwhMSk6dm9pZCAwfSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4i%0AfSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1fKCkmJnRo%0AaXMuYmx1cj8odGhpcy5ibHVyKCksITEpOnZvaWQgMH0sZGVsZWdhdGVUeXBlOiJm%0Ab2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuImNoZWNr%0AYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmbi5ub2RlTmFtZSh0aGlzLCJp%0AbnB1dCIpPyh0aGlzLmNsaWNrKCksITEpOnZvaWQgMH0sX2RlZmF1bHQ6ZnVuY3Rp%0Ab24oYSl7cmV0dXJuIG4ubm9kZU5hbWUoYS50YXJnZXQsImEiKX19LGJlZm9yZXVu%0AbG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGEpe3ZvaWQgMCE9PWEucmVzdWx0%0AJiZhLm9yaWdpbmFsRXZlbnQmJihhLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9%0AYS5yZXN1bHQpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW4u%0AZXh0ZW5kKG5ldyBuLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMCxvcmln%0AaW5hbEV2ZW50Ont9fSk7ZD9uLmV2ZW50LnRyaWdnZXIoZSxudWxsLGIpOm4uZXZl%0AbnQuZGlzcGF0Y2guY2FsbChiLGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkmJmMu%0AcHJldmVudERlZmF1bHQoKX19LG4ucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oYSxiLGMp%0Ae2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIs%0AYywhMSl9LG4uRXZlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcyBpbnN0YW5j%0AZW9mIG4uRXZlbnQ/KGEmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhp%0Acy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQ%0AcmV2ZW50ZWR8fHZvaWQgMD09PWEuZGVmYXVsdFByZXZlbnRlZCYmYS5yZXR1cm5W%0AYWx1ZT09PSExP1o6JCk6dGhpcy50eXBlPWEsYiYmbi5leHRlbmQodGhpcyxiKSx0%0AaGlzLnRpbWVTdGFtcD1hJiZhLnRpbWVTdGFtcHx8bi5ub3coKSx2b2lkKHRoaXNb%0Abi5leHBhbmRvXT0hMCkpOm5ldyBuLkV2ZW50KGEsYil9LG4uRXZlbnQucHJvdG90%0AeXBlPXtpc0RlZmF1bHRQcmV2ZW50ZWQ6JCxpc1Byb3BhZ2F0aW9uU3RvcHBlZDok%0ALGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiQscHJldmVudERlZmF1bHQ6%0AZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1%0AbHRQcmV2ZW50ZWQ9WixhJiZhLnByZXZlbnREZWZhdWx0JiZhLnByZXZlbnREZWZh%0AdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3Jp%0AZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPVosYSYmYS5zdG9w%0AUHJvcGFnYXRpb24mJmEuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQ%0Acm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0%0AaGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPVosYSYmYS5zdG9wSW1t%0AZWRpYXRlUHJvcGFnYXRpb24mJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCks%0AdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LG4uZWFjaCh7bW91c2VlbnRlcjoibW91%0Ac2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2lu%0AdGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oYSxi%0AKXtuLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIs%0AaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdl%0AdCxmPWEuaGFuZGxlT2JqO3JldHVybighZXx8ZSE9PWQmJiFuLmNvbnRhaW5zKGQs%0AZSkpJiYoYS50eXBlPWYub3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxh%0Acmd1bWVudHMpLGEudHlwZT1iKSxjfX19KSxrLmZvY3VzaW5CdWJibGVzfHxuLmVh%0AY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEs%0AYil7dmFyIGM9ZnVuY3Rpb24oYSl7bi5ldmVudC5zaW11bGF0ZShiLGEudGFyZ2V0%0ALG4uZXZlbnQuZml4KGEpLCEwKX07bi5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpm%0AdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPUwuYWNj%0AZXNzKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCksTC5hY2Nlc3Mo%0AZCxiLChlfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93%0AbmVyRG9jdW1lbnR8fHRoaXMsZT1MLmFjY2VzcyhkLGIpLTE7ZT9MLmFjY2Vzcyhk%0ALGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLEwucmVtb3ZlKGQs%0AYikpfX19KSxuLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIg%0AZixnO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7InN0cmluZyIhPXR5cGVvZiBiJiYo%0AYz1jfHxiLGI9dm9pZCAwKTtmb3IoZyBpbiBhKXRoaXMub24oZyxiLGMsYVtnXSxl%0AKTtyZXR1cm4gdGhpc31pZihudWxsPT1jJiZudWxsPT1kPyhkPWIsYz1iPXZvaWQg%0AMCk6bnVsbD09ZCYmKCJzdHJpbmciPT10eXBlb2YgYj8oZD1jLGM9dm9pZCAwKToo%0AZD1jLGM9YixiPXZvaWQgMCkpLGQ9PT0hMSlkPSQ7ZWxzZSBpZighZClyZXR1cm4g%0AdGhpcztyZXR1cm4gMT09PWUmJihmPWQsZD1mdW5jdGlvbihhKXtyZXR1cm4gbigp%0ALm9mZihhKSxmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5ndWlkPWYuZ3VpZHx8%0AKGYuZ3VpZD1uLmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe24uZXZlbnQu%0AYWRkKHRoaXMsYSxkLGMsYil9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVy%0AbiB0aGlzLm9uKGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQs%0AZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1h%0ALmhhbmRsZU9iaixuKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9k%0ALm9yaWdUeXBlKyIuIitkLm5hbWVzcGFjZTpkLm9yaWdUeXBlLGQuc2VsZWN0b3Is%0AZC5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7Zm9yKGUgaW4g%0AYSl0aGlzLm9mZihlLGIsYVtlXSk7cmV0dXJuIHRoaXN9cmV0dXJuKGI9PT0hMXx8%0AImZ1bmN0aW9uIj09dHlwZW9mIGIpJiYoYz1iLGI9dm9pZCAwKSxjPT09ITEmJihj%0APSQpLHRoaXMuZWFjaChmdW5jdGlvbigpe24uZXZlbnQucmVtb3ZlKHRoaXMsYSxj%0ALGIpfSl9LHRyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1%0AbmN0aW9uKCl7bi5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFu%0AZGxlcjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXNbMF07cmV0dXJuIGM/bi5ldmVu%0AdC50cmlnZ2VyKGEsYixjLCEwKTp2b2lkIDB9fSk7dmFyIGFiPS88KD8hYXJlYXxi%0Acnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpd%0AKylbXj5dKilcLz4vZ2ksYmI9LzwoW1x3Ol0rKS8sY2I9Lzx8JiM/XHcrOy8sZGI9%0ALzwoPzpzY3JpcHR8c3R5bGV8bGluaykvaSxlYj0vY2hlY2tlZFxzKig/OltePV18%0APVxzKi5jaGVja2VkLikvaSxmYj0vXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ks%0AZ2I9L150cnVlXC8oLiopLyxoYj0vXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpc%0AXVxdfC0tKT5ccyokL2csaWI9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0n%0AbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90%0AYWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48%0AL3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJs%0AZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5Pjwv%0AdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtpYi5vcHRncm91cD1pYi5vcHRp%0Ab24saWIudGJvZHk9aWIudGZvb3Q9aWIuY29sZ3JvdXA9aWIuY2FwdGlvbj1pYi50%0AaGVhZCxpYi50aD1pYi50ZDtmdW5jdGlvbiBqYihhLGIpe3JldHVybiBuLm5vZGVO%0AYW1lKGEsInRhYmxlIikmJm4ubm9kZU5hbWUoMTEhPT1iLm5vZGVUeXBlP2I6Yi5m%0AaXJzdENoaWxkLCJ0ciIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5Iilb%0AMF18fGEuYXBwZW5kQ2hpbGQoYS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo%0AInRib2R5IikpOmF9ZnVuY3Rpb24ga2IoYSl7cmV0dXJuIGEudHlwZT0obnVsbCE9%0APWEuZ2V0QXR0cmlidXRlKCJ0eXBlIikpKyIvIithLnR5cGUsYX1mdW5jdGlvbiBs%0AYihhKXt2YXIgYj1nYi5leGVjKGEudHlwZSk7cmV0dXJuIGI/YS50eXBlPWJbMV06%0AYS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxhfWZ1bmN0aW9uIG1iKGEsYil7Zm9y%0AKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKUwuc2V0KGFbY10sImdsb2JhbEV2%0AYWwiLCFifHxMLmdldChiW2NdLCJnbG9iYWxFdmFsIikpfWZ1bmN0aW9uIG5iKGEs%0AYil7dmFyIGMsZCxlLGYsZyxoLGksajtpZigxPT09Yi5ub2RlVHlwZSl7aWYoTC5o%0AYXNEYXRhKGEpJiYoZj1MLmFjY2VzcyhhKSxnPUwuc2V0KGIsZiksaj1mLmV2ZW50%0Acykpe2RlbGV0ZSBnLmhhbmRsZSxnLmV2ZW50cz17fTtmb3IoZSBpbiBqKWZvcihj%0APTAsZD1qW2VdLmxlbmd0aDtkPmM7YysrKW4uZXZlbnQuYWRkKGIsZSxqW2VdW2Nd%0AKX1NLmhhc0RhdGEoYSkmJihoPU0uYWNjZXNzKGEpLGk9bi5leHRlbmQoe30saCks%0ATS5zZXQoYixpKSl9fWZ1bmN0aW9uIG9iKGEsYil7dmFyIGM9YS5nZXRFbGVtZW50%0Ac0J5VGFnTmFtZT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKGJ8fCIqIik6YS5xdWVy%0AeVNlbGVjdG9yQWxsP2EucXVlcnlTZWxlY3RvckFsbChifHwiKiIpOltdO3JldHVy%0AbiB2b2lkIDA9PT1ifHxiJiZuLm5vZGVOYW1lKGEsYik/bi5tZXJnZShbYV0sYyk6%0AY31mdW5jdGlvbiBwYihhLGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2Uo%0AKTsiaW5wdXQiPT09YyYmVC50ZXN0KGEudHlwZSk/Yi5jaGVja2VkPWEuY2hlY2tl%0AZDooImlucHV0Ij09PWN8fCJ0ZXh0YXJlYSI9PT1jKSYmKGIuZGVmYXVsdFZhbHVl%0APWEuZGVmYXVsdFZhbHVlKX1uLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMp%0Ae3ZhciBkLGUsZixnLGg9YS5jbG9uZU5vZGUoITApLGk9bi5jb250YWlucyhhLm93%0AbmVyRG9jdW1lbnQsYSk7aWYoIShrLm5vQ2xvbmVDaGVja2VkfHwxIT09YS5ub2Rl%0AVHlwZSYmMTEhPT1hLm5vZGVUeXBlfHxuLmlzWE1MRG9jKGEpKSlmb3IoZz1vYiho%0AKSxmPW9iKGEpLGQ9MCxlPWYubGVuZ3RoO2U+ZDtkKyspcGIoZltkXSxnW2RdKTtp%0AZihiKWlmKGMpZm9yKGY9Znx8b2IoYSksZz1nfHxvYihoKSxkPTAsZT1mLmxlbmd0%0AaDtlPmQ7ZCsrKW5iKGZbZF0sZ1tkXSk7ZWxzZSBuYihhLGgpO3JldHVybiBnPW9i%0AKGgsInNjcmlwdCIpLGcubGVuZ3RoPjAmJm1iKGcsIWkmJm9iKGEsInNjcmlwdCIp%0AKSxofSxidWlsZEZyYWdtZW50OmZ1bmN0aW9uKGEsYixjLGQpe2Zvcih2YXIgZSxm%0ALGcsaCxpLGosaz1iLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxsPVtdLG09MCxv%0APWEubGVuZ3RoO28+bTttKyspaWYoZT1hW21dLGV8fDA9PT1lKWlmKCJvYmplY3Qi%0APT09bi50eXBlKGUpKW4ubWVyZ2UobCxlLm5vZGVUeXBlP1tlXTplKTtlbHNlIGlm%0AKGNiLnRlc3QoZSkpe2Y9Znx8ay5hcHBlbmRDaGlsZChiLmNyZWF0ZUVsZW1lbnQo%0AImRpdiIpKSxnPShiYi5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgp%0ALGg9aWJbZ118fGliLl9kZWZhdWx0LGYuaW5uZXJIVE1MPWhbMV0rZS5yZXBsYWNl%0AKGFiLCI8JDE+PC8kMj4iKStoWzJdLGo9aFswXTt3aGlsZShqLS0pZj1mLmxhc3RD%0AaGlsZDtuLm1lcmdlKGwsZi5jaGlsZE5vZGVzKSxmPWsuZmlyc3RDaGlsZCxmLnRl%0AeHRDb250ZW50PSIifWVsc2UgbC5wdXNoKGIuY3JlYXRlVGV4dE5vZGUoZSkpO2su%0AdGV4dENvbnRlbnQ9IiIsbT0wO3doaWxlKGU9bFttKytdKWlmKCghZHx8LTE9PT1u%0ALmluQXJyYXkoZSxkKSkmJihpPW4uY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUp%0ALGY9b2Ioay5hcHBlbmRDaGlsZChlKSwic2NyaXB0IiksaSYmbWIoZiksYykpe2o9%0AMDt3aGlsZShlPWZbaisrXSlmYi50ZXN0KGUudHlwZXx8IiIpJiZjLnB1c2goZSl9%0AcmV0dXJuIGt9LGNsZWFuRGF0YTpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGUs%0AZj1uLmV2ZW50LnNwZWNpYWwsZz0wO3ZvaWQgMCE9PShjPWFbZ10pO2crKyl7aWYo%0Abi5hY2NlcHREYXRhKGMpJiYoZT1jW0wuZXhwYW5kb10sZSYmKGI9TC5jYWNoZVtl%0AXSkpKXtpZihiLmV2ZW50cylmb3IoZCBpbiBiLmV2ZW50cylmW2RdP24uZXZlbnQu%0AcmVtb3ZlKGMsZCk6bi5yZW1vdmVFdmVudChjLGQsYi5oYW5kbGUpO0wuY2FjaGVb%0AZV0mJmRlbGV0ZSBMLmNhY2hlW2VdfWRlbGV0ZSBNLmNhY2hlW2NbTS5leHBhbmRv%0AXV19fX0pLG4uZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBKKHRo%0AaXMsZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/bi50ZXh0KHRoaXMpOnRo%0AaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7KDE9PT10aGlzLm5vZGVUeXBlfHwx%0AMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKSYmKHRoaXMudGV4%0AdENvbnRlbnQ9YSl9KX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6%0AZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rp%0Ab24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8%0AOT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPWpiKHRoaXMsYSk7Yi5hcHBlbmRDaGls%0AZChhKX19KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlw%0AKGFyZ3VtZW50cyxmdW5jdGlvbihhKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9%0APT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIGI9amIodGhp%0AcyxhKTtiLmluc2VydEJlZm9yZShhLGIuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpm%0AdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlv%0AbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZv%0AcmUoYSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1h%0AbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMu%0AcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzLm5leHRTaWJsaW5nKX0pfSxy%0AZW1vdmU6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD1hP24uZmlsdGVyKGEsdGhp%0Acyk6dGhpcyxlPTA7bnVsbCE9KGM9ZFtlXSk7ZSsrKWJ8fDEhPT1jLm5vZGVUeXBl%0AfHxuLmNsZWFuRGF0YShvYihjKSksYy5wYXJlbnROb2RlJiYoYiYmbi5jb250YWlu%0AcyhjLm93bmVyRG9jdW1lbnQsYykmJm1iKG9iKGMsInNjcmlwdCIpKSxjLnBhcmVu%0AdE5vZGUucmVtb3ZlQ2hpbGQoYykpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlv%0Abigpe2Zvcih2YXIgYSxiPTA7bnVsbCE9KGE9dGhpc1tiXSk7YisrKTE9PT1hLm5v%0AZGVUeXBlJiYobi5jbGVhbkRhdGEob2IoYSwhMSkpLGEudGV4dENvbnRlbnQ9IiIp%0AO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihhLGIpe3JldHVybiBhPW51bGw9%0APWE/ITE6YSxiPW51bGw9PWI/YTpiLHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJu%0AIG4uY2xvbmUodGhpcyxhLGIpfSl9LGh0bWw6ZnVuY3Rpb24oYSl7cmV0dXJuIEoo%0AdGhpcyxmdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdfHx7fSxjPTAsZD10aGlzLmxl%0Abmd0aDtpZih2b2lkIDA9PT1hJiYxPT09Yi5ub2RlVHlwZSlyZXR1cm4gYi5pbm5l%0AckhUTUw7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYhZGIudGVzdChhKSYmIWliWyhi%0AYi5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1hLnJlcGxh%0AY2UoYWIsIjwkMT48LyQyPiIpO3RyeXtmb3IoO2Q+YztjKyspYj10aGlzW2NdfHx7%0AfSwxPT09Yi5ub2RlVHlwZSYmKG4uY2xlYW5EYXRhKG9iKGIsITEpKSxiLmlubmVy%0ASFRNTD1hKTtiPTB9Y2F0Y2goZSl7fX1iJiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGEp%0AfSxudWxsLGEsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9u%0AKCl7dmFyIGE9YXJndW1lbnRzWzBdO3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3Vt%0AZW50cyxmdW5jdGlvbihiKXthPXRoaXMucGFyZW50Tm9kZSxuLmNsZWFuRGF0YShv%0AYih0aGlzKSksYSYmYS5yZXBsYWNlQ2hpbGQoYix0aGlzKX0pLGEmJihhLmxlbmd0%0AaHx8YS5ub2RlVHlwZSk/dGhpczp0aGlzLnJlbW92ZSgpfSxkZXRhY2g6ZnVuY3Rp%0Ab24oYSl7cmV0dXJuIHRoaXMucmVtb3ZlKGEsITApfSxkb21NYW5pcDpmdW5jdGlv%0AbihhLGIpe2E9ZS5hcHBseShbXSxhKTt2YXIgYyxkLGYsZyxoLGksaj0wLGw9dGhp%0Acy5sZW5ndGgsbT10aGlzLG89bC0xLHA9YVswXSxxPW4uaXNGdW5jdGlvbihwKTtp%0AZihxfHxsPjEmJiJzdHJpbmciPT10eXBlb2YgcCYmIWsuY2hlY2tDbG9uZSYmZWIu%0AdGVzdChwKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe3ZhciBkPW0uZXEo%0AYyk7cSYmKGFbMF09cC5jYWxsKHRoaXMsYyxkLmh0bWwoKSkpLGQuZG9tTWFuaXAo%0AYSxiKX0pO2lmKGwmJihjPW4uYnVpbGRGcmFnbWVudChhLHRoaXNbMF0ub3duZXJE%0Ab2N1bWVudCwhMSx0aGlzKSxkPWMuZmlyc3RDaGlsZCwxPT09Yy5jaGlsZE5vZGVz%0ALmxlbmd0aCYmKGM9ZCksZCkpe2ZvcihmPW4ubWFwKG9iKGMsInNjcmlwdCIpLGti%0AKSxnPWYubGVuZ3RoO2w+ajtqKyspaD1jLGohPT1vJiYoaD1uLmNsb25lKGgsITAs%0AITApLGcmJm4ubWVyZ2UoZixvYihoLCJzY3JpcHQiKSkpLGIuY2FsbCh0aGlzW2pd%0ALGgsaik7aWYoZylmb3IoaT1mW2YubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsbi5t%0AYXAoZixsYiksaj0wO2c+ajtqKyspaD1mW2pdLGZiLnRlc3QoaC50eXBlfHwiIikm%0AJiFMLmFjY2VzcyhoLCJnbG9iYWxFdmFsIikmJm4uY29udGFpbnMoaSxoKSYmKGgu%0Ac3JjP24uX2V2YWxVcmwmJm4uX2V2YWxVcmwoaC5zcmMpOm4uZ2xvYmFsRXZhbCho%0ALnRleHRDb250ZW50LnJlcGxhY2UoaGIsIiIpKSl9cmV0dXJuIHRoaXN9fSksbi5l%0AYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2Vy%0AdEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6%0AInJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXtuLmZuW2FdPWZ1bmN0aW9uKGEp%0Ae2Zvcih2YXIgYyxkPVtdLGU9bihhKSxnPWUubGVuZ3RoLTEsaD0wO2c+PWg7aCsr%0AKWM9aD09PWc/dGhpczp0aGlzLmNsb25lKCEwKSxuKGVbaF0pW2JdKGMpLGYuYXBw%0AbHkoZCxjLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZCl9fSk7dmFyIHFi%0ALHJiPXt9O2Z1bmN0aW9uIHNiKGIsYyl7dmFyIGQsZT1uKGMuY3JlYXRlRWxlbWVu%0AdChiKSkuYXBwZW5kVG8oYy5ib2R5KSxmPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5%0AbGUmJihkPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUoZVswXSkpP2QuZGlzcGxh%0AeTpuLmNzcyhlWzBdLCJkaXNwbGF5Iik7cmV0dXJuIGUuZGV0YWNoKCksZn1mdW5j%0AdGlvbiB0YihhKXt2YXIgYj1sLGM9cmJbYV07cmV0dXJuIGN8fChjPXNiKGEsYiks%0AIm5vbmUiIT09YyYmY3x8KHFiPShxYnx8bigiPGlmcmFtZSBmcmFtZWJvcmRlcj0n%0AMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpKS5hcHBlbmRUbyhiLmRvY3VtZW50%0ARWxlbWVudCksYj1xYlswXS5jb250ZW50RG9jdW1lbnQsYi53cml0ZSgpLGIuY2xv%0Ac2UoKSxjPXNiKGEsYikscWIuZGV0YWNoKCkpLHJiW2FdPWMpLGN9dmFyIHViPS9e%0AbWFyZ2luLyx2Yj1uZXcgUmVnRXhwKCJeKCIrUSsiKSg/IXB4KVthLXolXSskIiwi%0AaSIpLHdiPWZ1bmN0aW9uKGEpe3JldHVybiBhLm93bmVyRG9jdW1lbnQuZGVmYXVs%0AdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpfTtmdW5jdGlvbiB4YihhLGIs%0AYyl7dmFyIGQsZSxmLGcsaD1hLnN0eWxlO3JldHVybiBjPWN8fHdiKGEpLGMmJihn%0APWMuZ2V0UHJvcGVydHlWYWx1ZShiKXx8Y1tiXSksYyYmKCIiIT09Z3x8bi5jb250%0AYWlucyhhLm93bmVyRG9jdW1lbnQsYSl8fChnPW4uc3R5bGUoYSxiKSksdmIudGVz%0AdChnKSYmdWIudGVzdChiKSYmKGQ9aC53aWR0aCxlPWgubWluV2lkdGgsZj1oLm1h%0AeFdpZHRoLGgubWluV2lkdGg9aC5tYXhXaWR0aD1oLndpZHRoPWcsZz1jLndpZHRo%0ALGgud2lkdGg9ZCxoLm1pbldpZHRoPWUsaC5tYXhXaWR0aD1mKSksdm9pZCAwIT09%0AZz9nKyIiOmd9ZnVuY3Rpb24geWIoYSxiKXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7%0AcmV0dXJuIGEoKT92b2lkIGRlbGV0ZSB0aGlzLmdldDoodGhpcy5nZXQ9YikuYXBw%0AbHkodGhpcyxhcmd1bWVudHMpfX19IWZ1bmN0aW9uKCl7dmFyIGIsYyxkPWwuZG9j%0AdW1lbnRFbGVtZW50LGU9bC5jcmVhdGVFbGVtZW50KCJkaXYiKSxmPWwuY3JlYXRl%0ARWxlbWVudCgiZGl2Iik7aWYoZi5zdHlsZSl7Zi5zdHlsZS5iYWNrZ3JvdW5kQ2xp%0AcD0iY29udGVudC1ib3giLGYuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5k%0AQ2xpcD0iIixrLmNsZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09Zi5zdHls%0AZS5iYWNrZ3JvdW5kQ2xpcCxlLnN0eWxlLmNzc1RleHQ9ImJvcmRlcjowO3dpZHRo%0AOjA7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4O3Bv%0Ac2l0aW9uOmFic29sdXRlIixlLmFwcGVuZENoaWxkKGYpO2Z1bmN0aW9uIGcoKXtm%0ALnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1t%0Ab3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtk%0AaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MSU7dG9wOjElO2JvcmRlcjoxcHg7cGFk%0AZGluZzoxcHg7d2lkdGg6NHB4O3Bvc2l0aW9uOmFic29sdXRlIixmLmlubmVySFRN%0ATD0iIixkLmFwcGVuZENoaWxkKGUpO3ZhciBnPWEuZ2V0Q29tcHV0ZWRTdHlsZShm%0ALG51bGwpO2I9IjElIiE9PWcudG9wLGM9IjRweCI9PT1nLndpZHRoLGQucmVtb3Zl%0AQ2hpbGQoZSl9YS5nZXRDb21wdXRlZFN0eWxlJiZuLmV4dGVuZChrLHtwaXhlbFBv%0Ac2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGcoKSxifSxib3hTaXppbmdSZWxpYWJs%0AZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT1jJiZnKCksY30scmVsaWFibGVNYXJn%0AaW5SaWdodDpmdW5jdGlvbigpe3ZhciBiLGM9Zi5hcHBlbmRDaGlsZChsLmNyZWF0%0AZUVsZW1lbnQoImRpdiIpKTtyZXR1cm4gYy5zdHlsZS5jc3NUZXh0PWYuc3R5bGUu%0AY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94%0ALXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3Bs%0AYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowIixjLnN0eWxlLm1h%0AcmdpblJpZ2h0PWMuc3R5bGUud2lkdGg9IjAiLGYuc3R5bGUud2lkdGg9IjFweCIs%0AZC5hcHBlbmRDaGlsZChlKSxiPSFwYXJzZUZsb2F0KGEuZ2V0Q29tcHV0ZWRTdHls%0AZShjLG51bGwpLm1hcmdpblJpZ2h0KSxkLnJlbW92ZUNoaWxkKGUpLGJ9fSl9fSgp%0ALG4uc3dhcD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGc9e307Zm9yKGYgaW4g%0AYilnW2ZdPWEuc3R5bGVbZl0sYS5zdHlsZVtmXT1iW2ZdO2U9Yy5hcHBseShhLGR8%0AfFtdKTtmb3IoZiBpbiBiKWEuc3R5bGVbZl09Z1tmXTtyZXR1cm4gZX07dmFyIHpi%0APS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxBYj1uZXcgUmVnRXhwKCJeKCIr%0AUSsiKSguKikkIiwiaSIpLEJiPW5ldyBSZWdFeHAoIl4oWystXSk9KCIrUSsiKSIs%0AImkiKSxDYj17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4i%0ALGRpc3BsYXk6ImJsb2NrIn0sRGI9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWln%0AaHQ6IjQwMCJ9LEViPVsiV2Via2l0IiwiTyIsIk1veiIsIm1zIl07ZnVuY3Rpb24g%0ARmIoYSxiKXtpZihiIGluIGEpcmV0dXJuIGI7dmFyIGM9YlswXS50b1VwcGVyQ2Fz%0AZSgpK2Iuc2xpY2UoMSksZD1iLGU9RWIubGVuZ3RoO3doaWxlKGUtLSlpZihiPUVi%0AW2VdK2MsYiBpbiBhKXJldHVybiBiO3JldHVybiBkfWZ1bmN0aW9uIEdiKGEsYixj%0AKXt2YXIgZD1BYi5leGVjKGIpO3JldHVybiBkP01hdGgubWF4KDAsZFsxXS0oY3x8%0AMCkpKyhkWzJdfHwicHgiKTpifWZ1bmN0aW9uIEhiKGEsYixjLGQsZSl7Zm9yKHZh%0AciBmPWM9PT0oZD8iYm9yZGVyIjoiY29udGVudCIpPzQ6IndpZHRoIj09PWI/MTow%0ALGc9MDs0PmY7Zis9MikibWFyZ2luIj09PWMmJihnKz1uLmNzcyhhLGMrUltmXSwh%0AMCxlKSksZD8oImNvbnRlbnQiPT09YyYmKGctPW4uY3NzKGEsInBhZGRpbmciK1Jb%0AZl0sITAsZSkpLCJtYXJnaW4iIT09YyYmKGctPW4uY3NzKGEsImJvcmRlciIrUltm%0AXSsiV2lkdGgiLCEwLGUpKSk6KGcrPW4uY3NzKGEsInBhZGRpbmciK1JbZl0sITAs%0AZSksInBhZGRpbmciIT09YyYmKGcrPW4uY3NzKGEsImJvcmRlciIrUltmXSsiV2lk%0AdGgiLCEwLGUpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gSWIoYSxiLGMpe3ZhciBkPSEw%0ALGU9IndpZHRoIj09PWI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxmPXdi%0AKGEpLGc9ImJvcmRlci1ib3giPT09bi5jc3MoYSwiYm94U2l6aW5nIiwhMSxmKTtp%0AZigwPj1lfHxudWxsPT1lKXtpZihlPXhiKGEsYixmKSwoMD5lfHxudWxsPT1lKSYm%0AKGU9YS5zdHlsZVtiXSksdmIudGVzdChlKSlyZXR1cm4gZTtkPWcmJihrLmJveFNp%0AemluZ1JlbGlhYmxlKCl8fGU9PT1hLnN0eWxlW2JdKSxlPXBhcnNlRmxvYXQoZSl8%0AfDB9cmV0dXJuIGUrSGIoYSxiLGN8fChnPyJib3JkZXIiOiJjb250ZW50IiksZCxm%0AKSsicHgifWZ1bmN0aW9uIEpiKGEsYil7Zm9yKHZhciBjLGQsZSxmPVtdLGc9MCxo%0APWEubGVuZ3RoO2g+ZztnKyspZD1hW2ddLGQuc3R5bGUmJihmW2ddPUwuZ2V0KGQs%0AIm9sZGRpc3BsYXkiKSxjPWQuc3R5bGUuZGlzcGxheSxiPyhmW2ddfHwibm9uZSIh%0APT1jfHwoZC5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PWQuc3R5bGUuZGlzcGxheSYm%0AUyhkKSYmKGZbZ109TC5hY2Nlc3MoZCwib2xkZGlzcGxheSIsdGIoZC5ub2RlTmFt%0AZSkpKSk6KGU9UyhkKSwibm9uZSI9PT1jJiZlfHxMLnNldChkLCJvbGRkaXNwbGF5%0AIixlP2M6bi5jc3MoZCwiZGlzcGxheSIpKSkpO2ZvcihnPTA7aD5nO2crKylkPWFb%0AZ10sZC5zdHlsZSYmKGImJiJub25lIiE9PWQuc3R5bGUuZGlzcGxheSYmIiIhPT1k%0ALnN0eWxlLmRpc3BsYXl8fChkLnN0eWxlLmRpc3BsYXk9Yj9mW2ddfHwiIjoibm9u%0AZSIpKTtyZXR1cm4gYX1uLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpm%0AdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPXhiKGEsIm9wYWNpdHkiKTtyZXR1cm4i%0AIj09PWM/IjEiOmN9fX19LGNzc051bWJlcjp7Y29sdW1uQ291bnQ6ITAsZmlsbE9w%0AYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEw%0ALGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdp%0AZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6ImNz%0Ac0Zsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYSYmMyE9PWEubm9k%0AZVR5cGUmJjghPT1hLm5vZGVUeXBlJiZhLnN0eWxlKXt2YXIgZSxmLGcsaD1uLmNh%0AbWVsQ2FzZShiKSxpPWEuc3R5bGU7cmV0dXJuIGI9bi5jc3NQcm9wc1toXXx8KG4u%0AY3NzUHJvcHNbaF09RmIoaSxoKSksZz1uLmNzc0hvb2tzW2JdfHxuLmNzc0hvb2tz%0AW2hdLHZvaWQgMD09PWM/ZyYmImdldCJpbiBnJiZ2b2lkIDAhPT0oZT1nLmdldChh%0ALCExLGQpKT9lOmlbYl06KGY9dHlwZW9mIGMsInN0cmluZyI9PT1mJiYoZT1CYi5l%0AeGVjKGMpKSYmKGM9KGVbMV0rMSkqZVsyXStwYXJzZUZsb2F0KG4uY3NzKGEsYikp%0ALGY9Im51bWJlciIpLG51bGwhPWMmJmM9PT1jJiYoIm51bWJlciIhPT1mfHxuLmNz%0Ac051bWJlcltoXXx8KGMrPSJweCIpLGsuY2xlYXJDbG9uZVN0eWxlfHwiIiE9PWN8%0AfDAhPT1iLmluZGV4T2YoImJhY2tncm91bmQiKXx8KGlbYl09ImluaGVyaXQiKSxn%0AJiYic2V0ImluIGcmJnZvaWQgMD09PShjPWcuc2V0KGEsYyxkKSl8fChpW2JdPWMp%0AKSx2b2lkIDApfX0sY3NzOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoPW4u%0AY2FtZWxDYXNlKGIpO3JldHVybiBiPW4uY3NzUHJvcHNbaF18fChuLmNzc1Byb3Bz%0AW2hdPUZiKGEuc3R5bGUsaCkpLGc9bi5jc3NIb29rc1tiXXx8bi5jc3NIb29rc1to%0AXSxnJiYiZ2V0ImluIGcmJihlPWcuZ2V0KGEsITAsYykpLHZvaWQgMD09PWUmJihl%0APXhiKGEsYixkKSksIm5vcm1hbCI9PT1lJiZiIGluIERiJiYoZT1EYltiXSksIiI9%0APT1jfHxjPyhmPXBhcnNlRmxvYXQoZSksYz09PSEwfHxuLmlzTnVtZXJpYyhmKT9m%0AfHwwOmUpOmV9fSksbi5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihh%0ALGIpe24uY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGM/%0AemIudGVzdChuLmNzcyhhLCJkaXNwbGF5IikpJiYwPT09YS5vZmZzZXRXaWR0aD9u%0ALnN3YXAoYSxDYixmdW5jdGlvbigpe3JldHVybiBJYihhLGIsZCl9KTpJYihhLGIs%0AZCk6dm9pZCAwfSxzZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWQmJndiKGEpO3Jl%0AdHVybiBHYihhLGMsZD9IYihhLGIsZCwiYm9yZGVyLWJveCI9PT1uLmNzcyhhLCJi%0Ab3hTaXppbmciLCExLGUpLGUpOjApfX19KSxuLmNzc0hvb2tzLm1hcmdpblJpZ2h0%0APXliKGsucmVsaWFibGVNYXJnaW5SaWdodCxmdW5jdGlvbihhLGIpe3JldHVybiBi%0AP24uc3dhcChhLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSx4YixbYSwibWFyZ2lu%0AUmlnaHQiXSk6dm9pZCAwfSksbi5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixi%0Ab3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2ErYl09e2V4%0AcGFuZDpmdW5jdGlvbihjKXtmb3IodmFyIGQ9MCxlPXt9LGY9InN0cmluZyI9PXR5%0AcGVvZiBjP2Muc3BsaXQoIiAiKTpbY107ND5kO2QrKyllW2ErUltkXStiXT1mW2Rd%0AfHxmW2QtMl18fGZbMF07cmV0dXJuIGV9fSx1Yi50ZXN0KGEpfHwobi5jc3NIb29r%0Ac1thK2JdLnNldD1HYil9KSxuLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGEsYil7%0AcmV0dXJuIEoodGhpcyxmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXt9LGc9MDtp%0AZihuLmlzQXJyYXkoYikpe2ZvcihkPXdiKGEpLGU9Yi5sZW5ndGg7ZT5nO2crKylm%0AW2JbZ11dPW4uY3NzKGEsYltnXSwhMSxkKTtyZXR1cm4gZn1yZXR1cm4gdm9pZCAw%0AIT09Yz9uLnN0eWxlKGEsYixjKTpuLmNzcyhhLGIpfSxhLGIsYXJndW1lbnRzLmxl%0Abmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBKYih0aGlzLCEwKX0saGlk%0AZTpmdW5jdGlvbigpe3JldHVybiBKYih0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGEp%0Ae3JldHVybiJib29sZWFuIj09dHlwZW9mIGE/YT90aGlzLnNob3coKTp0aGlzLmhp%0AZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtTKHRoaXMpP24odGhpcykuc2hvdygp%0AOm4odGhpcykuaGlkZSgpfSl9fSk7ZnVuY3Rpb24gS2IoYSxiLGMsZCxlKXtyZXR1%0Acm4gbmV3IEtiLnByb3RvdHlwZS5pbml0KGEsYixjLGQsZSl9bi5Ud2Vlbj1LYixL%0AYi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOktiLGluaXQ6ZnVuY3Rpb24oYSxiLGMs%0AZCxlLGYpe3RoaXMuZWxlbT1hLHRoaXMucHJvcD1jLHRoaXMuZWFzaW5nPWV8fCJz%0Ad2luZyIsdGhpcy5vcHRpb25zPWIsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1%0AcigpLHRoaXMuZW5kPWQsdGhpcy51bml0PWZ8fChuLmNzc051bWJlcltjXT8iIjoi%0AcHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGE9S2IucHJvcEhvb2tzW3RoaXMucHJv%0AcF07cmV0dXJuIGEmJmEuZ2V0P2EuZ2V0KHRoaXMpOktiLnByb3BIb29rcy5fZGVm%0AYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihhKXt2YXIgYixjPUtiLnByb3BI%0Ab29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLnBvcz1iPXRoaXMub3B0aW9ucy5k%0AdXJhdGlvbj9uLmVhc2luZ1t0aGlzLmVhc2luZ10oYSx0aGlzLm9wdGlvbnMuZHVy%0AYXRpb24qYSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTphLHRoaXMubm93PSh0%0AaGlzLmVuZC10aGlzLnN0YXJ0KSpiK3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0%0AZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRo%0AaXMpLGMmJmMuc2V0P2Muc2V0KHRoaXMpOktiLnByb3BIb29rcy5fZGVmYXVsdC5z%0AZXQodGhpcyksdGhpc319LEtiLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1LYi5w%0Acm90b3R5cGUsS2IucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGEp%0Ae3ZhciBiO3JldHVybiBudWxsPT1hLmVsZW1bYS5wcm9wXXx8YS5lbGVtLnN0eWxl%0AJiZudWxsIT1hLmVsZW0uc3R5bGVbYS5wcm9wXT8oYj1uLmNzcyhhLmVsZW0sYS5w%0Acm9wLCIiKSxiJiYiYXV0byIhPT1iP2I6MCk6YS5lbGVtW2EucHJvcF19LHNldDpm%0AdW5jdGlvbihhKXtuLmZ4LnN0ZXBbYS5wcm9wXT9uLmZ4LnN0ZXBbYS5wcm9wXShh%0AKTphLmVsZW0uc3R5bGUmJihudWxsIT1hLmVsZW0uc3R5bGVbbi5jc3NQcm9wc1th%0ALnByb3BdXXx8bi5jc3NIb29rc1thLnByb3BdKT9uLnN0eWxlKGEuZWxlbSxhLnBy%0Ab3AsYS5ub3crYS51bml0KTphLmVsZW1bYS5wcm9wXT1hLm5vd319fSxLYi5wcm9w%0ASG9va3Muc2Nyb2xsVG9wPUtiLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVu%0AY3Rpb24oYSl7YS5lbGVtLm5vZGVUeXBlJiZhLmVsZW0ucGFyZW50Tm9kZSYmKGEu%0AZWxlbVthLnByb3BdPWEubm93KX19LG4uZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24o%0AYSl7cmV0dXJuIGF9LHN3aW5nOmZ1bmN0aW9uKGEpe3JldHVybi41LU1hdGguY29z%0AKGEqTWF0aC5QSSkvMn19LG4uZng9S2IucHJvdG90eXBlLmluaXQsbi5meC5zdGVw%0APXt9O3ZhciBMYixNYixOYj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sT2I9bmV3%0AIFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK1ErIikoW2EteiVdKikkIiwiaSIpLFBi%0APS9xdWV1ZUhvb2tzJC8sUWI9W1ZiXSxSYj17IioiOltmdW5jdGlvbihhLGIpe3Zh%0AciBjPXRoaXMuY3JlYXRlVHdlZW4oYSxiKSxkPWMuY3VyKCksZT1PYi5leGVjKGIp%0ALGY9ZSYmZVszXXx8KG4uY3NzTnVtYmVyW2FdPyIiOiJweCIpLGc9KG4uY3NzTnVt%0AYmVyW2FdfHwicHgiIT09ZiYmK2QpJiZPYi5leGVjKG4uY3NzKGMuZWxlbSxhKSks%0AaD0xLGk9MjA7aWYoZyYmZ1szXSE9PWYpe2Y9Znx8Z1szXSxlPWV8fFtdLGc9K2R8%0AfDE7ZG8gaD1ofHwiLjUiLGcvPWgsbi5zdHlsZShjLmVsZW0sYSxnK2YpO3doaWxl%0AKGghPT0oaD1jLmN1cigpL2QpJiYxIT09aCYmLS1pKX1yZXR1cm4gZSYmKGc9Yy5z%0AdGFydD0rZ3x8K2R8fDAsYy51bml0PWYsYy5lbmQ9ZVsxXT9nKyhlWzFdKzEpKmVb%0AMl06K2VbMl0pLGN9XX07ZnVuY3Rpb24gU2IoKXtyZXR1cm4gc2V0VGltZW91dChm%0AdW5jdGlvbigpe0xiPXZvaWQgMH0pLExiPW4ubm93KCl9ZnVuY3Rpb24gVGIoYSxi%0AKXt2YXIgYyxkPTAsZT17aGVpZ2h0OmF9O2ZvcihiPWI/MTowOzQ+ZDtkKz0yLWIp%0AYz1SW2RdLGVbIm1hcmdpbiIrY109ZVsicGFkZGluZyIrY109YTtyZXR1cm4gYiYm%0AKGUub3BhY2l0eT1lLndpZHRoPWEpLGV9ZnVuY3Rpb24gVWIoYSxiLGMpe2Zvcih2%0AYXIgZCxlPShSYltiXXx8W10pLmNvbmNhdChSYlsiKiJdKSxmPTAsZz1lLmxlbmd0%0AaDtnPmY7ZisrKWlmKGQ9ZVtmXS5jYWxsKGMsYixhKSlyZXR1cm4gZH1mdW5jdGlv%0AbiBWYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsPXRoaXMsbT17fSxvPWEu%0Ac3R5bGUscD1hLm5vZGVUeXBlJiZTKGEpLHE9TC5nZXQoYSwiZnhzaG93Iik7Yy5x%0AdWV1ZXx8KGg9bi5fcXVldWVIb29rcyhhLCJmeCIpLG51bGw9PWgudW5xdWV1ZWQm%0AJihoLnVucXVldWVkPTAsaT1oLmVtcHR5LmZpcmUsaC5lbXB0eS5maXJlPWZ1bmN0%0AaW9uKCl7aC51bnF1ZXVlZHx8aSgpfSksaC51bnF1ZXVlZCsrLGwuYWx3YXlzKGZ1%0AbmN0aW9uKCl7bC5hbHdheXMoZnVuY3Rpb24oKXtoLnVucXVldWVkLS0sbi5xdWV1%0AZShhLCJmeCIpLmxlbmd0aHx8aC5lbXB0eS5maXJlKCl9KX0pKSwxPT09YS5ub2Rl%0AVHlwZSYmKCJoZWlnaHQiaW4gYnx8IndpZHRoImluIGIpJiYoYy5vdmVyZmxvdz1b%0Aby5vdmVyZmxvdyxvLm92ZXJmbG93WCxvLm92ZXJmbG93WV0saj1uLmNzcyhhLCJk%0AaXNwbGF5Iiksaz0ibm9uZSI9PT1qP0wuZ2V0KGEsIm9sZGRpc3BsYXkiKXx8dGIo%0AYS5ub2RlTmFtZSk6aiwiaW5saW5lIj09PWsmJiJub25lIj09PW4uY3NzKGEsImZs%0Ab2F0IikmJihvLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxjLm92ZXJmbG93JiYo%0Aby5vdmVyZmxvdz0iaGlkZGVuIixsLmFsd2F5cyhmdW5jdGlvbigpe28ub3ZlcmZs%0Ab3c9Yy5vdmVyZmxvd1swXSxvLm92ZXJmbG93WD1jLm92ZXJmbG93WzFdLG8ub3Zl%0AcmZsb3dZPWMub3ZlcmZsb3dbMl19KSk7Zm9yKGQgaW4gYilpZihlPWJbZF0sTmIu%0AZXhlYyhlKSl7aWYoZGVsZXRlIGJbZF0sZj1mfHwidG9nZ2xlIj09PWUsZT09PShw%0APyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1lfHwhcXx8dm9pZCAwPT09cVtk%0AXSljb250aW51ZTtwPSEwfW1bZF09cSYmcVtkXXx8bi5zdHlsZShhLGQpfWVsc2Ug%0Aaj12b2lkIDA7aWYobi5pc0VtcHR5T2JqZWN0KG0pKSJpbmxpbmUiPT09KCJub25l%0AIj09PWo/dGIoYS5ub2RlTmFtZSk6aikmJihvLmRpc3BsYXk9aik7ZWxzZXtxPyJo%0AaWRkZW4iaW4gcSYmKHA9cS5oaWRkZW4pOnE9TC5hY2Nlc3MoYSwiZnhzaG93Iix7%0AfSksZiYmKHEuaGlkZGVuPSFwKSxwP24oYSkuc2hvdygpOmwuZG9uZShmdW5jdGlv%0Abigpe24oYSkuaGlkZSgpfSksbC5kb25lKGZ1bmN0aW9uKCl7dmFyIGI7TC5yZW1v%0AdmUoYSwiZnhzaG93Iik7Zm9yKGIgaW4gbSluLnN0eWxlKGEsYixtW2JdKX0pO2Zv%0AcihkIGluIG0pZz1VYihwP3FbZF06MCxkLGwpLGQgaW4gcXx8KHFbZF09Zy5zdGFy%0AdCxwJiYoZy5lbmQ9Zy5zdGFydCxnLnN0YXJ0PSJ3aWR0aCI9PT1kfHwiaGVpZ2h0%0AIj09PWQ/MTowKSl9fWZ1bmN0aW9uIFdiKGEsYil7dmFyIGMsZCxlLGYsZztmb3Io%0AYyBpbiBhKWlmKGQ9bi5jYW1lbENhc2UoYyksZT1iW2RdLGY9YVtjXSxuLmlzQXJy%0AYXkoZikmJihlPWZbMV0sZj1hW2NdPWZbMF0pLGMhPT1kJiYoYVtkXT1mLGRlbGV0%0AZSBhW2NdKSxnPW4uY3NzSG9va3NbZF0sZyYmImV4cGFuZCJpbiBnKXtmPWcuZXhw%0AYW5kKGYpLGRlbGV0ZSBhW2RdO2ZvcihjIGluIGYpYyBpbiBhfHwoYVtjXT1mW2Nd%0ALGJbY109ZSl9ZWxzZSBiW2RdPWV9ZnVuY3Rpb24gWGIoYSxiLGMpe3ZhciBkLGUs%0AZj0wLGc9UWIubGVuZ3RoLGg9bi5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigp%0Ae2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7aWYoZSlyZXR1cm4hMTtmb3Io%0AdmFyIGI9TGJ8fFNiKCksYz1NYXRoLm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRp%0Ab24tYiksZD1jL2ouZHVyYXRpb258fDAsZj0xLWQsZz0wLGk9ai50d2VlbnMubGVu%0AZ3RoO2k+ZztnKyspai50d2VlbnNbZ10ucnVuKGYpO3JldHVybiBoLm5vdGlmeVdp%0AdGgoYSxbaixmLGNdKSwxPmYmJmk/YzooaC5yZXNvbHZlV2l0aChhLFtqXSksITEp%0AfSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOm4uZXh0ZW5kKHt9LGIpLG9wdHM6%0Abi5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LGMpLG9yaWdpbmFsUHJvcGVy%0AdGllczpiLG9yaWdpbmFsT3B0aW9uczpjLHN0YXJ0VGltZTpMYnx8U2IoKSxkdXJh%0AdGlvbjpjLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihi%0ALGMpe3ZhciBkPW4uVHdlZW4oYSxqLm9wdHMsYixjLGoub3B0cy5zcGVjaWFsRWFz%0AaW5nW2JdfHxqLm9wdHMuZWFzaW5nKTtyZXR1cm4gai50d2VlbnMucHVzaChkKSxk%0AfSxzdG9wOmZ1bmN0aW9uKGIpe3ZhciBjPTAsZD1iP2oudHdlZW5zLmxlbmd0aDow%0AO2lmKGUpcmV0dXJuIHRoaXM7Zm9yKGU9ITA7ZD5jO2MrKylqLnR3ZWVuc1tjXS5y%0AdW4oMSk7cmV0dXJuIGI/aC5yZXNvbHZlV2l0aChhLFtqLGJdKTpoLnJlamVjdFdp%0AdGgoYSxbaixiXSksdGhpc319KSxrPWoucHJvcHM7Zm9yKFdiKGssai5vcHRzLnNw%0AZWNpYWxFYXNpbmcpO2c+ZjtmKyspaWYoZD1RYltmXS5jYWxsKGosYSxrLGoub3B0%0AcykpcmV0dXJuIGQ7cmV0dXJuIG4ubWFwKGssVWIsaiksbi5pc0Z1bmN0aW9uKGou%0Ab3B0cy5zdGFydCkmJmoub3B0cy5zdGFydC5jYWxsKGEsaiksbi5meC50aW1lcihu%0ALmV4dGVuZChpLHtlbGVtOmEsYW5pbTpqLHF1ZXVlOmoub3B0cy5xdWV1ZX0pKSxq%0ALnByb2dyZXNzKGoub3B0cy5wcm9ncmVzcykuZG9uZShqLm9wdHMuZG9uZSxqLm9w%0AdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3%0AYXlzKX1uLkFuaW1hdGlvbj1uLmV4dGVuZChYYix7dHdlZW5lcjpmdW5jdGlvbihh%0ALGIpe24uaXNGdW5jdGlvbihhKT8oYj1hLGE9WyIqIl0pOmE9YS5zcGxpdCgiICIp%0AO2Zvcih2YXIgYyxkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWM9YVtkXSxSYltjXT1S%0AYltjXXx8W10sUmJbY10udW5zaGlmdChiKX0scHJlZmlsdGVyOmZ1bmN0aW9uKGEs%0AYil7Yj9RYi51bnNoaWZ0KGEpOlFiLnB1c2goYSl9fSksbi5zcGVlZD1mdW5jdGlv%0AbihhLGIsYyl7dmFyIGQ9YSYmIm9iamVjdCI9PXR5cGVvZiBhP24uZXh0ZW5kKHt9%0ALGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8bi5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0%0AaW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFuLmlzRnVuY3Rpb24oYikmJmJ9O3JldHVy%0AbiBkLmR1cmF0aW9uPW4uZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiBkLmR1cmF0%0AaW9uP2QuZHVyYXRpb246ZC5kdXJhdGlvbiBpbiBuLmZ4LnNwZWVkcz9uLmZ4LnNw%0AZWVkc1tkLmR1cmF0aW9uXTpuLmZ4LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ZC5x%0AdWV1ZXx8ZC5xdWV1ZT09PSEwKSYmKGQucXVldWU9ImZ4IiksZC5vbGQ9ZC5jb21w%0AbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bi5pc0Z1bmN0aW9uKGQub2xkKSYm%0AZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZuLmRlcXVldWUodGhpcyxkLnF1ZXVl%0AKX0sZH0sbi5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1%0Acm4gdGhpcy5maWx0ZXIoUykuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCku%0AYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxi%0ALGMsZCl7dmFyIGU9bi5pc0VtcHR5T2JqZWN0KGEpLGY9bi5zcGVlZChiLGMsZCks%0AZz1mdW5jdGlvbigpe3ZhciBiPVhiKHRoaXMsbi5leHRlbmQoe30sYSksZik7KGV8%0AfEwuZ2V0KHRoaXMsImZpbmlzaCIpKSYmYi5zdG9wKCEwKX07cmV0dXJuIGcuZmlu%0AaXNoPWcsZXx8Zi5xdWV1ZT09PSExP3RoaXMuZWFjaChnKTp0aGlzLnF1ZXVlKGYu%0AcXVldWUsZyl9LHN0b3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWZ1bmN0aW9uKGEp%0Ae3ZhciBiPWEuc3RvcDtkZWxldGUgYS5zdG9wLGIoYyl9O3JldHVybiJzdHJpbmci%0AIT10eXBlb2YgYSYmKGM9YixiPWEsYT12b2lkIDApLGImJmEhPT0hMSYmdGhpcy5x%0AdWV1ZShhfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj0hMCxl%0APW51bGwhPWEmJmErInF1ZXVlSG9va3MiLGY9bi50aW1lcnMsZz1MLmdldCh0aGlz%0AKTtpZihlKWdbZV0mJmdbZV0uc3RvcCYmZChnW2VdKTtlbHNlIGZvcihlIGluIGcp%0AZ1tlXSYmZ1tlXS5zdG9wJiZQYi50ZXN0KGUpJiZkKGdbZV0pO2ZvcihlPWYubGVu%0AZ3RoO2UtLTspZltlXS5lbGVtIT09dGhpc3x8bnVsbCE9YSYmZltlXS5xdWV1ZSE9%0APWF8fChmW2VdLmFuaW0uc3RvcChjKSxiPSExLGYuc3BsaWNlKGUsMSkpOyhifHwh%0AYykmJm4uZGVxdWV1ZSh0aGlzLGEpfSl9LGZpbmlzaDpmdW5jdGlvbihhKXtyZXR1%0Acm4gYSE9PSExJiYoYT1hfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIg%0AYixjPUwuZ2V0KHRoaXMpLGQ9Y1thKyJxdWV1ZSJdLGU9Y1thKyJxdWV1ZUhvb2tz%0AIl0sZj1uLnRpbWVycyxnPWQ/ZC5sZW5ndGg6MDtmb3IoYy5maW5pc2g9ITAsbi5x%0AdWV1ZSh0aGlzLGEsW10pLGUmJmUuc3RvcCYmZS5zdG9wLmNhbGwodGhpcywhMCks%0AYj1mLmxlbmd0aDtiLS07KWZbYl0uZWxlbT09PXRoaXMmJmZbYl0ucXVldWU9PT1h%0AJiYoZltiXS5hbmltLnN0b3AoITApLGYuc3BsaWNlKGIsMSkpO2ZvcihiPTA7Zz5i%0AO2IrKylkW2JdJiZkW2JdLmZpbmlzaCYmZFtiXS5maW5pc2guY2FsbCh0aGlzKTtk%0AZWxldGUgYy5maW5pc2h9KX19KSxuLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlk%0AZSJdLGZ1bmN0aW9uKGEsYil7dmFyIGM9bi5mbltiXTtuLmZuW2JdPWZ1bmN0aW9u%0AKGEsZCxlKXtyZXR1cm4gbnVsbD09YXx8ImJvb2xlYW4iPT10eXBlb2YgYT9jLmFw%0AcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoVGIoYiwhMCksYSxkLGUp%0AfX0pLG4uZWFjaCh7c2xpZGVEb3duOlRiKCJzaG93Iiksc2xpZGVVcDpUYigiaGlk%0AZSIpLHNsaWRlVG9nZ2xlOlRiKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNo%0Ab3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0%0AeToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7bi5mblthXT1mdW5jdGlvbihhLGMs%0AZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxuLnRpbWVycz1bXSxu%0ALmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPTAsYz1uLnRpbWVycztmb3IoTGI9%0Abi5ub3coKTtiPGMubGVuZ3RoO2IrKylhPWNbYl0sYSgpfHxjW2JdIT09YXx8Yy5z%0AcGxpY2UoYi0tLDEpO2MubGVuZ3RofHxuLmZ4LnN0b3AoKSxMYj12b2lkIDB9LG4u%0AZngudGltZXI9ZnVuY3Rpb24oYSl7bi50aW1lcnMucHVzaChhKSxhKCk/bi5meC5z%0AdGFydCgpOm4udGltZXJzLnBvcCgpfSxuLmZ4LmludGVydmFsPTEzLG4uZnguc3Rh%0AcnQ9ZnVuY3Rpb24oKXtNYnx8KE1iPXNldEludGVydmFsKG4uZngudGljayxuLmZ4%0ALmludGVydmFsKSl9LG4uZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwo%0ATWIpLE1iPW51bGx9LG4uZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVm%0AYXVsdDo0MDB9LG4uZm4uZGVsYXk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1uLmZ4%0AP24uZnguc3BlZWRzW2FdfHxhOmEsYj1ifHwiZngiLHRoaXMucXVldWUoYixmdW5j%0AdGlvbihiLGMpe3ZhciBkPXNldFRpbWVvdXQoYixhKTtjLnN0b3A9ZnVuY3Rpb24o%0AKXtjbGVhclRpbWVvdXQoZCl9fSl9LGZ1bmN0aW9uKCl7dmFyIGE9bC5jcmVhdGVF%0AbGVtZW50KCJpbnB1dCIpLGI9bC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxjPWIu%0AYXBwZW5kQ2hpbGQobC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7YS50eXBlPSJj%0AaGVja2JveCIsay5jaGVja09uPSIiIT09YS52YWx1ZSxrLm9wdFNlbGVjdGVkPWMu%0Ac2VsZWN0ZWQsYi5kaXNhYmxlZD0hMCxrLm9wdERpc2FibGVkPSFjLmRpc2FibGVk%0ALGE9bC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGEudmFsdWU9InQiLGEudHlwZT0i%0AcmFkaW8iLGsucmFkaW9WYWx1ZT0idCI9PT1hLnZhbHVlfSgpO3ZhciBZYixaYiwk%0AYj1uLmV4cHIuYXR0ckhhbmRsZTtuLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihh%0ALGIpe3JldHVybiBKKHRoaXMsbi5hdHRyLGEsYixhcmd1bWVudHMubGVuZ3RoPjEp%0AfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rp%0Ab24oKXtuLnJlbW92ZUF0dHIodGhpcyxhKX0pfX0pLG4uZXh0ZW5kKHthdHRyOmZ1%0AbmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9YS5ub2RlVHlwZTtpZihhJiYzIT09ZiYm%0AOCE9PWYmJjIhPT1mKXJldHVybiB0eXBlb2YgYS5nZXRBdHRyaWJ1dGU9PT1VP24u%0AcHJvcChhLGIsYyk6KDE9PT1mJiZuLmlzWE1MRG9jKGEpfHwoYj1iLnRvTG93ZXJD%0AYXNlKCksZD1uLmF0dHJIb29rc1tiXXx8KG4uZXhwci5tYXRjaC5ib29sLnRlc3Qo%0AYik/WmI6WWIpKSx2b2lkIDA9PT1jP2QmJiJnZXQiaW4gZCYmbnVsbCE9PShlPWQu%0AZ2V0KGEsYikpP2U6KGU9bi5maW5kLmF0dHIoYSxiKSxudWxsPT1lP3ZvaWQgMDpl%0AKTpudWxsIT09Yz9kJiYic2V0ImluIGQmJnZvaWQgMCE9PShlPWQuc2V0KGEsYyxi%0AKSk/ZTooYS5zZXRBdHRyaWJ1dGUoYixjKyIiKSxjKTp2b2lkIG4ucmVtb3ZlQXR0%0AcihhLGIpKQp9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9MCxm%0APWImJmIubWF0Y2goRSk7aWYoZiYmMT09PWEubm9kZVR5cGUpd2hpbGUoYz1mW2Ur%0AK10pZD1uLnByb3BGaXhbY118fGMsbi5leHByLm1hdGNoLmJvb2wudGVzdChjKSYm%0AKGFbZF09ITEpLGEucmVtb3ZlQXR0cmlidXRlKGMpfSxhdHRySG9va3M6e3R5cGU6%0Ae3NldDpmdW5jdGlvbihhLGIpe2lmKCFrLnJhZGlvVmFsdWUmJiJyYWRpbyI9PT1i%0AJiZuLm5vZGVOYW1lKGEsImlucHV0Iikpe3ZhciBjPWEudmFsdWU7cmV0dXJuIGEu%0Ac2V0QXR0cmlidXRlKCJ0eXBlIixiKSxjJiYoYS52YWx1ZT1jKSxifX19fX0pLFpi%0APXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPT09ITE/bi5yZW1vdmVBdHRy%0AKGEsYyk6YS5zZXRBdHRyaWJ1dGUoYyxjKSxjfX0sbi5lYWNoKG4uZXhwci5tYXRj%0AaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGEsYil7dmFyIGM9%0AJGJbYl18fG4uZmluZC5hdHRyOyRiW2JdPWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxm%0AO3JldHVybiBkfHwoZj0kYltiXSwkYltiXT1lLGU9bnVsbCE9YyhhLGIsZCk/Yi50%0Ab0xvd2VyQ2FzZSgpOm51bGwsJGJbYl09ZiksZX19KTt2YXIgX2I9L14oPzppbnB1%0AdHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaTtuLmZuLmV4dGVuZCh7cHJvcDpm%0AdW5jdGlvbihhLGIpe3JldHVybiBKKHRoaXMsbi5wcm9wLGEsYixhcmd1bWVudHMu%0AbGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVh%0AY2goZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tuLnByb3BGaXhbYV18fGFdfSl9fSks%0Abi5leHRlbmQoe3Byb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFz%0Ac05hbWUifSxwcm9wOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZz1hLm5vZGVU%0AeXBlO2lmKGEmJjMhPT1nJiY4IT09ZyYmMiE9PWcpcmV0dXJuIGY9MSE9PWd8fCFu%0ALmlzWE1MRG9jKGEpLGYmJihiPW4ucHJvcEZpeFtiXXx8YixlPW4ucHJvcEhvb2tz%0AW2JdKSx2b2lkIDAhPT1jP2UmJiJzZXQiaW4gZSYmdm9pZCAwIT09KGQ9ZS5zZXQo%0AYSxjLGIpKT9kOmFbYl09YzplJiYiZ2V0ImluIGUmJm51bGwhPT0oZD1lLmdldChh%0ALGIpKT9kOmFbYl19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihh%0AKXtyZXR1cm4gYS5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fF9iLnRlc3QoYS5u%0Ab2RlTmFtZSl8fGEuaHJlZj9hLnRhYkluZGV4Oi0xfX19fSksay5vcHRTZWxlY3Rl%0AZHx8KG4ucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9%0AYS5wYXJlbnROb2RlO3JldHVybiBiJiZiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9k%0AZS5zZWxlY3RlZEluZGV4LG51bGx9fSksbi5lYWNoKFsidGFiSW5kZXgiLCJyZWFk%0AT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJy%0Ab3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVu%0AdEVkaXRhYmxlIl0sZnVuY3Rpb24oKXtuLnByb3BGaXhbdGhpcy50b0xvd2VyQ2Fz%0AZSgpXT10aGlzfSk7dmFyIGFjPS9bXHRcclxuXGZdL2c7bi5mbi5leHRlbmQoe2Fk%0AZENsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPSJzdHJpbmciPT10%0AeXBlb2YgYSYmYSxpPTAsaj10aGlzLmxlbmd0aDtpZihuLmlzRnVuY3Rpb24oYSkp%0AcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLmFkZENsYXNzKGEu%0AY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGgpZm9yKGI9KGF8fCIi%0AKS5tYXRjaChFKXx8W107aj5pO2krKylpZihjPXRoaXNbaV0sZD0xPT09Yy5ub2Rl%0AVHlwZSYmKGMuY2xhc3NOYW1lPygiICIrYy5jbGFzc05hbWUrIiAiKS5yZXBsYWNl%0AKGFjLCIgIik6IiAiKSl7Zj0wO3doaWxlKGU9YltmKytdKWQuaW5kZXhPZigiICIr%0AZSsiICIpPDAmJihkKz1lKyIgIik7Zz1uLnRyaW0oZCksYy5jbGFzc05hbWUhPT1n%0AJiYoYy5jbGFzc05hbWU9Zyl9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0%0AaW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPTA9PT1hcmd1bWVudHMubGVuZ3RofHwi%0Ac3RyaW5nIj09dHlwZW9mIGEmJmEsaT0wLGo9dGhpcy5sZW5ndGg7aWYobi5pc0Z1%0AbmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bih0aGlzKS5y%0AZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZiho%0AKWZvcihiPShhfHwiIikubWF0Y2goRSl8fFtdO2o+aTtpKyspaWYoYz10aGlzW2ld%0ALGQ9MT09PWMubm9kZVR5cGUmJihjLmNsYXNzTmFtZT8oIiAiK2MuY2xhc3NOYW1l%0AKyIgIikucmVwbGFjZShhYywiICIpOiIiKSl7Zj0wO3doaWxlKGU9YltmKytdKXdo%0AaWxlKGQuaW5kZXhPZigiICIrZSsiICIpPj0wKWQ9ZC5yZXBsYWNlKCIgIitlKyIg%0AIiwiICIpO2c9YT9uLnRyaW0oZCk6IiIsYy5jbGFzc05hbWUhPT1nJiYoYy5jbGFz%0Ac05hbWU9Zyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7%0AdmFyIGM9dHlwZW9mIGE7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYiYmInN0cmlu%0AZyI9PT1jP2I/dGhpcy5hZGRDbGFzcyhhKTp0aGlzLnJlbW92ZUNsYXNzKGEpOnRo%0AaXMuZWFjaChuLmlzRnVuY3Rpb24oYSk/ZnVuY3Rpb24oYyl7bih0aGlzKS50b2dn%0AbGVDbGFzcyhhLmNhbGwodGhpcyxjLHRoaXMuY2xhc3NOYW1lLGIpLGIpfTpmdW5j%0AdGlvbigpe2lmKCJzdHJpbmciPT09Yyl7dmFyIGIsZD0wLGU9bih0aGlzKSxmPWEu%0AbWF0Y2goRSl8fFtdO3doaWxlKGI9ZltkKytdKWUuaGFzQ2xhc3MoYik/ZS5yZW1v%0AdmVDbGFzcyhiKTplLmFkZENsYXNzKGIpfWVsc2UoYz09PVV8fCJib29sZWFuIj09%0APWMpJiYodGhpcy5jbGFzc05hbWUmJkwuc2V0KHRoaXMsIl9fY2xhc3NOYW1lX18i%0ALHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8%0AYT09PSExPyIiOkwuZ2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpfSl9LGhh%0Ac0NsYXNzOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iICIrYSsiICIsYz0wLGQ9dGhp%0Acy5sZW5ndGg7ZD5jO2MrKylpZigxPT09dGhpc1tjXS5ub2RlVHlwZSYmKCIgIit0%0AaGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoYWMsIiAiKS5pbmRleE9mKGIp%0APj0wKXJldHVybiEwO3JldHVybiExfX0pO3ZhciBiYz0vXHIvZztuLmZuLmV4dGVu%0AZCh7dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07e2lmKGFyZ3Vt%0AZW50cy5sZW5ndGgpcmV0dXJuIGQ9bi5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChm%0AdW5jdGlvbihjKXt2YXIgZTsxPT09dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwo%0AdGhpcyxjLG4odGhpcykudmFsKCkpOmEsbnVsbD09ZT9lPSIiOiJudW1iZXIiPT10%0AeXBlb2YgZT9lKz0iIjpuLmlzQXJyYXkoZSkmJihlPW4ubWFwKGUsZnVuY3Rpb24o%0AYSl7cmV0dXJuIG51bGw9PWE/IiI6YSsiIn0pKSxiPW4udmFsSG9va3NbdGhpcy50%0AeXBlXXx8bi52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGIm%0AJiJzZXQiaW4gYiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLCJ2YWx1ZSIpfHwodGhp%0Acy52YWx1ZT1lKSl9KTtpZihlKXJldHVybiBiPW4udmFsSG9va3NbZS50eXBlXXx8%0Abi52YWxIb29rc1tlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJnZXQiaW4g%0AYiYmdm9pZCAwIT09KGM9Yi5nZXQoZSwidmFsdWUiKSk/YzooYz1lLnZhbHVlLCJz%0AdHJpbmciPT10eXBlb2YgYz9jLnJlcGxhY2UoYmMsIiIpOm51bGw9PWM/IiI6Yyl9%0AfX0pLG4uZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7%0AdmFyIGI9bi5maW5kLmF0dHIoYSwidmFsdWUiKTtyZXR1cm4gbnVsbCE9Yj9iOm4u%0AdHJpbShuLnRleHQoYSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZh%0AciBiLGMsZD1hLm9wdGlvbnMsZT1hLnNlbGVjdGVkSW5kZXgsZj0ic2VsZWN0LW9u%0AZSI9PT1hLnR5cGV8fDA+ZSxnPWY/bnVsbDpbXSxoPWY/ZSsxOmQubGVuZ3RoLGk9%0AMD5lP2g6Zj9lOjA7aD5pO2krKylpZihjPWRbaV0sISghYy5zZWxlY3RlZCYmaSE9%0APWV8fChrLm9wdERpc2FibGVkP2MuZGlzYWJsZWQ6bnVsbCE9PWMuZ2V0QXR0cmli%0AdXRlKCJkaXNhYmxlZCIpKXx8Yy5wYXJlbnROb2RlLmRpc2FibGVkJiZuLm5vZGVO%0AYW1lKGMucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKGI9bihjKS52YWwoKSxm%0AKXJldHVybiBiO2cucHVzaChiKX1yZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKGEsYil7%0AdmFyIGMsZCxlPWEub3B0aW9ucyxmPW4ubWFrZUFycmF5KGIpLGc9ZS5sZW5ndGg7%0Ad2hpbGUoZy0tKWQ9ZVtnXSwoZC5zZWxlY3RlZD1uLmluQXJyYXkoZC52YWx1ZSxm%0AKT49MCkmJihjPSEwKTtyZXR1cm4gY3x8KGEuc2VsZWN0ZWRJbmRleD0tMSksZn19%0AfX0pLG4uZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe24udmFs%0ASG9va3NbdGhpc109e3NldDpmdW5jdGlvbihhLGIpe3JldHVybiBuLmlzQXJyYXko%0AYik/YS5jaGVja2VkPW4uaW5BcnJheShuKGEpLnZhbCgpLGIpPj0wOnZvaWQgMH19%0ALGsuY2hlY2tPbnx8KG4udmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGEpe3Jl%0AdHVybiBudWxsPT09YS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjphLnZhbHVl%0AfSl9KSxuLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJl%0Ac2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3Vz%0AZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3Vz%0AZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5%0AdXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtu%0ALmZuW2JdPWZ1bmN0aW9uKGEsYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90%0AaGlzLm9uKGIsbnVsbCxhLGMpOnRoaXMudHJpZ2dlcihiKX19KSxuLmZuLmV4dGVu%0AZCh7aG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEp%0ALm1vdXNlbGVhdmUoYnx8YSl9LGJpbmQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0%0AaGlzLm9uKGEsbnVsbCxiLGMpfSx1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4g%0AdGhpcy5vZmYoYSxudWxsLGIpfSxkZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyxkKXty%0AZXR1cm4gdGhpcy5vbihiLGEsYyxkKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIs%0AYyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGEsIioqIik6%0AdGhpcy5vZmYoYixhfHwiKioiLGMpfX0pO3ZhciBjYz1uLm5vdygpLGRjPS9cPy87%0Abi5wYXJzZUpTT049ZnVuY3Rpb24oYSl7cmV0dXJuIEpTT04ucGFyc2UoYSsiIil9%0ALG4ucGFyc2VYTUw9ZnVuY3Rpb24oYSl7dmFyIGIsYztpZighYXx8InN0cmluZyIh%0APXR5cGVvZiBhKXJldHVybiBudWxsO3RyeXtjPW5ldyBET01QYXJzZXIsYj1jLnBh%0AcnNlRnJvbVN0cmluZyhhLCJ0ZXh0L3htbCIpfWNhdGNoKGQpe2I9dm9pZCAwfXJl%0AdHVybighYnx8Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5s%0AZW5ndGgpJiZuLmVycm9yKCJJbnZhbGlkIFhNTDogIithKSxifTt2YXIgZWMsZmMs%0AZ2M9LyMuKiQvLGhjPS8oWz8mXSlfPVteJl0qLyxpYz0vXiguKj8pOlsgXHRdKihb%0AXlxyXG5dKikkL2dtLGpjPS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4%0AdGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLGtjPS9eKD86R0VUfEhFQUQpJC8s%0AbGM9L15cL1wvLyxtYz0vXihbXHcuKy1dKzopKD86XC9cLyg/OlteXC8/I10qQHwp%0AKFteXC8/IzpdKikoPzo6KFxkKyl8KXwpLyxuYz17fSxvYz17fSxwYz0iKi8iLmNv%0AbmNhdCgiKiIpO3RyeXtmYz1sb2NhdGlvbi5ocmVmfWNhdGNoKHFjKXtmYz1sLmNy%0AZWF0ZUVsZW1lbnQoImEiKSxmYy5ocmVmPSIiLGZjPWZjLmhyZWZ9ZWM9bWMuZXhl%0AYyhmYy50b0xvd2VyQ2FzZSgpKXx8W107ZnVuY3Rpb24gcmMoYSl7cmV0dXJuIGZ1%0AbmN0aW9uKGIsYyl7InN0cmluZyIhPXR5cGVvZiBiJiYoYz1iLGI9IioiKTt2YXIg%0AZCxlPTAsZj1iLnRvTG93ZXJDYXNlKCkubWF0Y2goRSl8fFtdO2lmKG4uaXNGdW5j%0AdGlvbihjKSl3aGlsZShkPWZbZSsrXSkiKyI9PT1kWzBdPyhkPWQuc2xpY2UoMSl8%0AfCIqIiwoYVtkXT1hW2RdfHxbXSkudW5zaGlmdChjKSk6KGFbZF09YVtkXXx8W10p%0ALnB1c2goYyl9fWZ1bmN0aW9uIHNjKGEsYixjLGQpe3ZhciBlPXt9LGY9YT09PW9j%0AO2Z1bmN0aW9uIGcoaCl7dmFyIGk7cmV0dXJuIGVbaF09ITAsbi5lYWNoKGFbaF18%0AfFtdLGZ1bmN0aW9uKGEsaCl7dmFyIGo9aChiLGMsZCk7cmV0dXJuInN0cmluZyIh%0APXR5cGVvZiBqfHxmfHxlW2pdP2Y/IShpPWopOnZvaWQgMDooYi5kYXRhVHlwZXMu%0AdW5zaGlmdChqKSxnKGopLCExKX0pLGl9cmV0dXJuIGcoYi5kYXRhVHlwZXNbMF0p%0AfHwhZVsiKiJdJiZnKCIqIil9ZnVuY3Rpb24gdGMoYSxiKXt2YXIgYyxkLGU9bi5h%0AamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihjIGluIGIpdm9pZCAwIT09%0AYltjXSYmKChlW2NdP2E6ZHx8KGQ9e30pKVtjXT1iW2NdKTtyZXR1cm4gZCYmbi5l%0AeHRlbmQoITAsYSxkKSxhfWZ1bmN0aW9uIHVjKGEsYixjKXt2YXIgZCxlLGYsZyxo%0APWEuY29udGVudHMsaT1hLmRhdGFUeXBlczt3aGlsZSgiKiI9PT1pWzBdKWkuc2hp%0AZnQoKSx2b2lkIDA9PT1kJiYoZD1hLm1pbWVUeXBlfHxiLmdldFJlc3BvbnNlSGVh%0AZGVyKCJDb250ZW50LVR5cGUiKSk7aWYoZClmb3IoZSBpbiBoKWlmKGhbZV0mJmhb%0AZV0udGVzdChkKSl7aS51bnNoaWZ0KGUpO2JyZWFrfWlmKGlbMF1pbiBjKWY9aVsw%0AXTtlbHNle2ZvcihlIGluIGMpe2lmKCFpWzBdfHxhLmNvbnZlcnRlcnNbZSsiICIr%0AaVswXV0pe2Y9ZTticmVha31nfHwoZz1lKX1mPWZ8fGd9cmV0dXJuIGY/KGYhPT1p%0AWzBdJiZpLnVuc2hpZnQoZiksY1tmXSk6dm9pZCAwfWZ1bmN0aW9uIHZjKGEsYixj%0ALGQpe3ZhciBlLGYsZyxoLGksaj17fSxrPWEuZGF0YVR5cGVzLnNsaWNlKCk7aWYo%0Aa1sxXSlmb3IoZyBpbiBhLmNvbnZlcnRlcnMpaltnLnRvTG93ZXJDYXNlKCldPWEu%0AY29udmVydGVyc1tnXTtmPWsuc2hpZnQoKTt3aGlsZShmKWlmKGEucmVzcG9uc2VG%0AaWVsZHNbZl0mJihjW2EucmVzcG9uc2VGaWVsZHNbZl1dPWIpLCFpJiZkJiZhLmRh%0AdGFGaWx0ZXImJihiPWEuZGF0YUZpbHRlcihiLGEuZGF0YVR5cGUpKSxpPWYsZj1r%0ALnNoaWZ0KCkpaWYoIioiPT09ZilmPWk7ZWxzZSBpZigiKiIhPT1pJiZpIT09Zil7%0AaWYoZz1qW2krIiAiK2ZdfHxqWyIqICIrZl0sIWcpZm9yKGUgaW4gailpZihoPWUu%0Ac3BsaXQoIiAiKSxoWzFdPT09ZiYmKGc9altpKyIgIitoWzBdXXx8alsiKiAiK2hb%0AMF1dKSl7Zz09PSEwP2c9altlXTpqW2VdIT09ITAmJihmPWhbMF0say51bnNoaWZ0%0AKGhbMV0pKTticmVha31pZihnIT09ITApaWYoZyYmYVsidGhyb3dzIl0pYj1nKGIp%0AO2Vsc2UgdHJ5e2I9ZyhiKX1jYXRjaChsKXtyZXR1cm57c3RhdGU6InBhcnNlcmVy%0Acm9yIixlcnJvcjpnP2w6Ik5vIGNvbnZlcnNpb24gZnJvbSAiK2krIiB0byAiK2Z9%0AfX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6Yn19bi5leHRlbmQoe2FjdGl2%0AZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOmZj%0ALHR5cGU6IkdFVCIsaXNMb2NhbDpqYy50ZXN0KGVjWzFdKSxnbG9iYWw6ITAscHJv%0AY2Vzc0RhdGE6ITAsYXN5bmM6ITAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gt%0Ad3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIsYWNjZXB0czp7Iioi%0AOnBjLHRleHQ6InRleHQvcGxhaW4iLGh0bWw6InRleHQvaHRtbCIseG1sOiJhcHBs%0AaWNhdGlvbi94bWwsIHRleHQveG1sIixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0%0AZXh0L2phdmFzY3JpcHQifSxjb250ZW50czp7eG1sOi94bWwvLGh0bWw6L2h0bWwv%0ALGpzb246L2pzb24vfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIs%0AdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25zZUpTT04ifSxjb252ZXJ0%0AZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6%0Abi5wYXJzZUpTT04sInRleHQgeG1sIjpuLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7%0AdXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtyZXR1%0Acm4gYj90Yyh0YyhhLG4uYWpheFNldHRpbmdzKSxiKTp0YyhuLmFqYXhTZXR0aW5n%0AcyxhKX0sYWpheFByZWZpbHRlcjpyYyhuYyksYWpheFRyYW5zcG9ydDpyYyhvYyks%0AYWpheDpmdW5jdGlvbihhLGIpeyJvYmplY3QiPT10eXBlb2YgYSYmKGI9YSxhPXZv%0AaWQgMCksYj1ifHx7fTt2YXIgYyxkLGUsZixnLGgsaSxqLGs9bi5hamF4U2V0dXAo%0Ae30sYiksbD1rLmNvbnRleHR8fGssbT1rLmNvbnRleHQmJihsLm5vZGVUeXBlfHxs%0ALmpxdWVyeSk/bihsKTpuLmV2ZW50LG89bi5EZWZlcnJlZCgpLHA9bi5DYWxsYmFj%0Aa3MoIm9uY2UgbWVtb3J5IikscT1rLnN0YXR1c0NvZGV8fHt9LHI9e30scz17fSx0%0APTAsdT0iY2FuY2VsZWQiLHY9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRl%0AcjpmdW5jdGlvbihhKXt2YXIgYjtpZigyPT09dCl7aWYoIWYpe2Y9e307d2hpbGUo%0AYj1pYy5leGVjKGUpKWZbYlsxXS50b0xvd2VyQ2FzZSgpXT1iWzJdfWI9ZlthLnRv%0ATG93ZXJDYXNlKCldfXJldHVybiBudWxsPT1iP251bGw6Yn0sZ2V0QWxsUmVzcG9u%0Ac2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIDI9PT10P2U6bnVsbH0sc2V0UmVx%0AdWVzdEhlYWRlcjpmdW5jdGlvbihhLGIpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTty%0AZXR1cm4gdHx8KGE9c1tjXT1zW2NdfHxhLHJbYV09YiksdGhpc30sb3ZlcnJpZGVN%0AaW1lVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gdHx8KGsubWltZVR5cGU9YSksdGhp%0Ac30sc3RhdHVzQ29kZTpmdW5jdGlvbihhKXt2YXIgYjtpZihhKWlmKDI+dClmb3Io%0AYiBpbiBhKXFbYl09W3FbYl0sYVtiXV07ZWxzZSB2LmFsd2F5cyhhW3Yuc3RhdHVz%0AXSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGEpe3ZhciBiPWF8fHU7cmV0%0AdXJuIGMmJmMuYWJvcnQoYikseCgwLGIpLHRoaXN9fTtpZihvLnByb21pc2Uodiku%0AY29tcGxldGU9cC5hZGQsdi5zdWNjZXNzPXYuZG9uZSx2LmVycm9yPXYuZmFpbCxr%0ALnVybD0oKGF8fGsudXJsfHxmYykrIiIpLnJlcGxhY2UoZ2MsIiIpLnJlcGxhY2Uo%0AbGMsZWNbMV0rIi8vIiksay50eXBlPWIubWV0aG9kfHxiLnR5cGV8fGsubWV0aG9k%0AfHxrLnR5cGUsay5kYXRhVHlwZXM9bi50cmltKGsuZGF0YVR5cGV8fCIqIikudG9M%0Ab3dlckNhc2UoKS5tYXRjaChFKXx8WyIiXSxudWxsPT1rLmNyb3NzRG9tYWluJiYo%0AaD1tYy5leGVjKGsudXJsLnRvTG93ZXJDYXNlKCkpLGsuY3Jvc3NEb21haW49ISgh%0AaHx8aFsxXT09PWVjWzFdJiZoWzJdPT09ZWNbMl0mJihoWzNdfHwoImh0dHA6Ij09%0APWhbMV0/IjgwIjoiNDQzIikpPT09KGVjWzNdfHwoImh0dHA6Ij09PWVjWzFdPyI4%0AMCI6IjQ0MyIpKSkpLGsuZGF0YSYmay5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5%0AcGVvZiBrLmRhdGEmJihrLmRhdGE9bi5wYXJhbShrLmRhdGEsay50cmFkaXRpb25h%0AbCkpLHNjKG5jLGssYix2KSwyPT09dClyZXR1cm4gdjtpPWsuZ2xvYmFsLGkmJjA9%0APT1uLmFjdGl2ZSsrJiZuLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLGsudHlw%0AZT1rLnR5cGUudG9VcHBlckNhc2UoKSxrLmhhc0NvbnRlbnQ9IWtjLnRlc3Qoay50%0AeXBlKSxkPWsudXJsLGsuaGFzQ29udGVudHx8KGsuZGF0YSYmKGQ9ay51cmwrPShk%0AYy50ZXN0KGQpPyImIjoiPyIpK2suZGF0YSxkZWxldGUgay5kYXRhKSxrLmNhY2hl%0APT09ITEmJihrLnVybD1oYy50ZXN0KGQpP2QucmVwbGFjZShoYywiJDFfPSIrY2Mr%0AKyk6ZCsoZGMudGVzdChkKT8iJiI6Ij8iKSsiXz0iK2NjKyspKSxrLmlmTW9kaWZp%0AZWQmJihuLmxhc3RNb2RpZmllZFtkXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1N%0Ab2RpZmllZC1TaW5jZSIsbi5sYXN0TW9kaWZpZWRbZF0pLG4uZXRhZ1tkXSYmdi5z%0AZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixuLmV0YWdbZF0pKSwoay5k%0AYXRhJiZrLmhhc0NvbnRlbnQmJmsuY29udGVudFR5cGUhPT0hMXx8Yi5jb250ZW50%0AVHlwZSkmJnYuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixrLmNvbnRl%0AbnRUeXBlKSx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsay5kYXRhVHlwZXNb%0AMF0mJmsuYWNjZXB0c1trLmRhdGFUeXBlc1swXV0/ay5hY2NlcHRzW2suZGF0YVR5%0AcGVzWzBdXSsoIioiIT09ay5kYXRhVHlwZXNbMF0/IiwgIitwYysiOyBxPTAuMDEi%0AOiIiKTprLmFjY2VwdHNbIioiXSk7Zm9yKGogaW4gay5oZWFkZXJzKXYuc2V0UmVx%0AdWVzdEhlYWRlcihqLGsuaGVhZGVyc1tqXSk7aWYoay5iZWZvcmVTZW5kJiYoay5i%0AZWZvcmVTZW5kLmNhbGwobCx2LGspPT09ITF8fDI9PT10KSlyZXR1cm4gdi5hYm9y%0AdCgpO3U9ImFib3J0Ijtmb3IoaiBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0%0AZToxfSl2W2pdKGtbal0pO2lmKGM9c2Mob2MsayxiLHYpKXt2LnJlYWR5U3RhdGU9%0AMSxpJiZtLnRyaWdnZXIoImFqYXhTZW5kIixbdixrXSksay5hc3luYyYmay50aW1l%0Ab3V0PjAmJihnPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2LmFib3J0KCJ0aW1lb3V0%0AIil9LGsudGltZW91dCkpO3RyeXt0PTEsYy5zZW5kKHIseCl9Y2F0Y2godyl7aWYo%0AISgyPnQpKXRocm93IHc7eCgtMSx3KX19ZWxzZSB4KC0xLCJObyBUcmFuc3BvcnQi%0AKTtmdW5jdGlvbiB4KGEsYixmLGgpe3ZhciBqLHIscyx1LHcseD1iOzIhPT10JiYo%0AdD0yLGcmJmNsZWFyVGltZW91dChnKSxjPXZvaWQgMCxlPWh8fCIiLHYucmVhZHlT%0AdGF0ZT1hPjA/NDowLGo9YT49MjAwJiYzMDA+YXx8MzA0PT09YSxmJiYodT11Yyhr%0ALHYsZikpLHU9dmMoayx1LHYsaiksaj8oay5pZk1vZGlmaWVkJiYodz12LmdldFJl%0Ac3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIiksdyYmKG4ubGFzdE1vZGlmaWVk%0AW2RdPXcpLHc9di5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpLHcmJihuLmV0YWdb%0AZF09dykpLDIwND09PWF8fCJIRUFEIj09PWsudHlwZT94PSJub2NvbnRlbnQiOjMw%0AND09PWE/eD0ibm90bW9kaWZpZWQiOih4PXUuc3RhdGUscj11LmRhdGEscz11LmVy%0Acm9yLGo9IXMpKToocz14LChhfHwheCkmJih4PSJlcnJvciIsMD5hJiYoYT0wKSkp%0ALHYuc3RhdHVzPWEsdi5zdGF0dXNUZXh0PShifHx4KSsiIixqP28ucmVzb2x2ZVdp%0AdGgobCxbcix4LHZdKTpvLnJlamVjdFdpdGgobCxbdix4LHNdKSx2LnN0YXR1c0Nv%0AZGUocSkscT12b2lkIDAsaSYmbS50cmlnZ2VyKGo/ImFqYXhTdWNjZXNzIjoiYWph%0AeEVycm9yIixbdixrLGo/cjpzXSkscC5maXJlV2l0aChsLFt2LHhdKSxpJiYobS50%0AcmlnZ2VyKCJhamF4Q29tcGxldGUiLFt2LGtdKSwtLW4uYWN0aXZlfHxuLmV2ZW50%0ALnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gdn0sZ2V0SlNPTjpmdW5jdGlv%0AbihhLGIsYyl7cmV0dXJuIG4uZ2V0KGEsYixjLCJqc29uIil9LGdldFNjcmlwdDpm%0AdW5jdGlvbihhLGIpe3JldHVybiBuLmdldChhLHZvaWQgMCxiLCJzY3JpcHQiKX19%0AKSxuLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxiKXtuW2JdPWZ1bmN0%0AaW9uKGEsYyxkLGUpe3JldHVybiBuLmlzRnVuY3Rpb24oYykmJihlPWV8fGQsZD1j%0ALGM9dm9pZCAwKSxuLmFqYXgoe3VybDphLHR5cGU6YixkYXRhVHlwZTplLGRhdGE6%0AYyxzdWNjZXNzOmR9KX19KSxuLmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3RvcCIs%0AImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNl%0AbmQiXSxmdW5jdGlvbihhLGIpe24uZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIHRo%0AaXMub24oYixhKX19KSxuLl9ldmFsVXJsPWZ1bmN0aW9uKGEpe3JldHVybiBuLmFq%0AYXgoe3VybDphLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsYXN5bmM6ITEs%0AZ2xvYmFsOiExLCJ0aHJvd3MiOiEwfSl9LG4uZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1%0AbmN0aW9uKGEpe3ZhciBiO3JldHVybiBuLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNo%0AKGZ1bmN0aW9uKGIpe24odGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxiKSl9KToo%0AdGhpc1swXSYmKGI9bihhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xv%0AbmUoITApLHRoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1sw%0AXSksYi5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RFbGVt%0AZW50Q2hpbGQpYT1hLmZpcnN0RWxlbWVudENoaWxkO3JldHVybiBhfSkuYXBwZW5k%0AKHRoaXMpKSx0aGlzKX0sd3JhcElubmVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlz%0ALmVhY2gobi5pc0Z1bmN0aW9uKGEpP2Z1bmN0aW9uKGIpe24odGhpcykud3JhcElu%0AbmVyKGEuY2FsbCh0aGlzLGIpKX06ZnVuY3Rpb24oKXt2YXIgYj1uKHRoaXMpLGM9%0AYi5jb250ZW50cygpO2MubGVuZ3RoP2Mud3JhcEFsbChhKTpiLmFwcGVuZChhKX0p%0AfSx3cmFwOmZ1bmN0aW9uKGEpe3ZhciBiPW4uaXNGdW5jdGlvbihhKTtyZXR1cm4g%0AdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe24odGhpcykud3JhcEFsbChiP2EuY2FsbCh0%0AaGlzLGMpOmEpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVu%0AdCgpLmVhY2goZnVuY3Rpb24oKXtuLm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8bih0%0AaGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9fSksbi5l%0AeHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGEpe3JldHVybiBhLm9mZnNldFdp%0AZHRoPD0wJiZhLm9mZnNldEhlaWdodDw9MH0sbi5leHByLmZpbHRlcnMudmlzaWJs%0AZT1mdW5jdGlvbihhKXtyZXR1cm4hbi5leHByLmZpbHRlcnMuaGlkZGVuKGEpfTt2%0AYXIgd2M9LyUyMC9nLHhjPS9cW1xdJC8seWM9L1xyP1xuL2csemM9L14oPzpzdWJt%0AaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLEFjPS9eKD86aW5wdXR8c2Vs%0AZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiBCYyhhLGIsYyxkKXt2YXIg%0AZTtpZihuLmlzQXJyYXkoYikpbi5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHx4Yy50%0AZXN0KGEpP2QoYSxlKTpCYyhhKyJbIisoIm9iamVjdCI9PXR5cGVvZiBlP2I6IiIp%0AKyJdIixlLGMsZCl9KTtlbHNlIGlmKGN8fCJvYmplY3QiIT09bi50eXBlKGIpKWQo%0AYSxiKTtlbHNlIGZvcihlIGluIGIpQmMoYSsiWyIrZSsiXSIsYltlXSxjLGQpfW4u%0AcGFyYW09ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9ZnVuY3Rpb24oYSxiKXti%0APW4uaXNGdW5jdGlvbihiKT9iKCk6bnVsbD09Yj8iIjpiLGRbZC5sZW5ndGhdPWVu%0AY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtp%0AZih2b2lkIDA9PT1iJiYoYj1uLmFqYXhTZXR0aW5ncyYmbi5hamF4U2V0dGluZ3Mu%0AdHJhZGl0aW9uYWwpLG4uaXNBcnJheShhKXx8YS5qcXVlcnkmJiFuLmlzUGxhaW5P%0AYmplY3QoYSkpbi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZh%0AbHVlKX0pO2Vsc2UgZm9yKGMgaW4gYSlCYyhjLGFbY10sYixlKTtyZXR1cm4gZC5q%0Ab2luKCImIikucmVwbGFjZSh3YywiKyIpfSxuLmZuLmV4dGVuZCh7c2VyaWFsaXpl%0AOmZ1bmN0aW9uKCl7cmV0dXJuIG4ucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgp%0AKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVu%0AY3Rpb24oKXt2YXIgYT1uLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gYT9u%0ALm1ha2VBcnJheShhKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGE9dGhp%0Acy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFuKHRoaXMpLmlzKCI6ZGlzYWJsZWQi%0AKSYmQWMudGVzdCh0aGlzLm5vZGVOYW1lKSYmIXpjLnRlc3QoYSkmJih0aGlzLmNo%0AZWNrZWR8fCFULnRlc3QoYSkpfSkubWFwKGZ1bmN0aW9uKGEsYil7dmFyIGM9bih0%0AaGlzKS52YWwoKTtyZXR1cm4gbnVsbD09Yz9udWxsOm4uaXNBcnJheShjKT9uLm1h%0AcChjLGZ1bmN0aW9uKGEpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxh%0AY2UoeWMsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKHlj%0ALCJcclxuIil9fSkuZ2V0KCl9fSksbi5hamF4U2V0dGluZ3MueGhyPWZ1bmN0aW9u%0AKCl7dHJ5e3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9Y2F0Y2goYSl7fX07dmFy%0AIENjPTAsRGM9e30sRWM9ezA6MjAwLDEyMjM6MjA0fSxGYz1uLmFqYXhTZXR0aW5n%0Acy54aHIoKTthLkFjdGl2ZVhPYmplY3QmJm4oYSkub24oInVubG9hZCIsZnVuY3Rp%0Ab24oKXtmb3IodmFyIGEgaW4gRGMpRGNbYV0oKX0pLGsuY29ycz0hIUZjJiYid2l0%0AaENyZWRlbnRpYWxzImluIEZjLGsuYWpheD1GYz0hIUZjLG4uYWpheFRyYW5zcG9y%0AdChmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gay5jb3JzfHxGYyYmIWEuY3Jvc3NE%0Ab21haW4/e3NlbmQ6ZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEueGhyKCksZz0rK0Nj%0AO2lmKGYub3BlbihhLnR5cGUsYS51cmwsYS5hc3luYyxhLnVzZXJuYW1lLGEucGFz%0Ac3dvcmQpLGEueGhyRmllbGRzKWZvcihlIGluIGEueGhyRmllbGRzKWZbZV09YS54%0AaHJGaWVsZHNbZV07YS5taW1lVHlwZSYmZi5vdmVycmlkZU1pbWVUeXBlJiZmLm92%0AZXJyaWRlTWltZVR5cGUoYS5taW1lVHlwZSksYS5jcm9zc0RvbWFpbnx8Y1siWC1S%0AZXF1ZXN0ZWQtV2l0aCJdfHwoY1siWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRw%0AUmVxdWVzdCIpO2ZvcihlIGluIGMpZi5zZXRSZXF1ZXN0SGVhZGVyKGUsY1tlXSk7%0AYj1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXtiJiYoZGVsZXRlIERjW2dd%0ALGI9Zi5vbmxvYWQ9Zi5vbmVycm9yPW51bGwsImFib3J0Ij09PWE/Zi5hYm9ydCgp%0AOiJlcnJvciI9PT1hP2QoZi5zdGF0dXMsZi5zdGF0dXNUZXh0KTpkKEVjW2Yuc3Rh%0AdHVzXXx8Zi5zdGF0dXMsZi5zdGF0dXNUZXh0LCJzdHJpbmciPT10eXBlb2YgZi5y%0AZXNwb25zZVRleHQ/e3RleHQ6Zi5yZXNwb25zZVRleHR9OnZvaWQgMCxmLmdldEFs%0AbFJlc3BvbnNlSGVhZGVycygpKSl9fSxmLm9ubG9hZD1iKCksZi5vbmVycm9yPWIo%0AImVycm9yIiksYj1EY1tnXT1iKCJhYm9ydCIpO3RyeXtmLnNlbmQoYS5oYXNDb250%0AZW50JiZhLmRhdGF8fG51bGwpfWNhdGNoKGgpe2lmKGIpdGhyb3cgaH19LGFib3J0%0AOmZ1bmN0aW9uKCl7YiYmYigpfX06dm9pZCAwfSksbi5hamF4U2V0dXAoe2FjY2Vw%0AdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2Ny%0AaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFz%0AY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi8oPzpqYXZhfGVjbWEpc2NyaXB0L30s%0AY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihhKXtyZXR1cm4gbi5n%0AbG9iYWxFdmFsKGEpLGF9fX0pLG4uYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5j%0AdGlvbihhKXt2b2lkIDA9PT1hLmNhY2hlJiYoYS5jYWNoZT0hMSksYS5jcm9zc0Rv%0AbWFpbiYmKGEudHlwZT0iR0VUIil9KSxuLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIs%0AZnVuY3Rpb24oYSl7aWYoYS5jcm9zc0RvbWFpbil7dmFyIGIsYztyZXR1cm57c2Vu%0AZDpmdW5jdGlvbihkLGUpe2I9bigiPHNjcmlwdD4iKS5wcm9wKHthc3luYzohMCxj%0AaGFyc2V0OmEuc2NyaXB0Q2hhcnNldCxzcmM6YS51cmx9KS5vbigibG9hZCBlcnJv%0AciIsYz1mdW5jdGlvbihhKXtiLnJlbW92ZSgpLGM9bnVsbCxhJiZlKCJlcnJvciI9%0APT1hLnR5cGU/NDA0OjIwMCxhLnR5cGUpfSksbC5oZWFkLmFwcGVuZENoaWxkKGJb%0AMF0pfSxhYm9ydDpmdW5jdGlvbigpe2MmJmMoKX19fX0pO3ZhciBHYz1bXSxIYz0v%0AKD0pXD8oPz0mfCQpfFw/XD8vO24uYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2si%0ALGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgYT1HYy5wb3AoKXx8bi5leHBh%0AbmRvKyJfIitjYysrO3JldHVybiB0aGlzW2FdPSEwLGF9fSksbi5hamF4UHJlZmls%0AdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihiLGMsZCl7dmFyIGUsZixnLGg9Yi5q%0Ac29ucCE9PSExJiYoSGMudGVzdChiLnVybCk/InVybCI6InN0cmluZyI9PXR5cGVv%0AZiBiLmRhdGEmJiEoYi5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0%0AaW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZIYy50ZXN0KGIuZGF0YSkmJiJk%0AYXRhIik7cmV0dXJuIGh8fCJqc29ucCI9PT1iLmRhdGFUeXBlc1swXT8oZT1iLmpz%0Ab25wQ2FsbGJhY2s9bi5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29u%0AcENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGg/YltoXT1iW2hdLnJlcGxhY2Uo%0ASGMsIiQxIitlKTpiLmpzb25wIT09ITEmJihiLnVybCs9KGRjLnRlc3QoYi51cmwp%0APyImIjoiPyIpK2IuanNvbnArIj0iK2UpLGIuY29udmVydGVyc1sic2NyaXB0IGpz%0Ab24iXT1mdW5jdGlvbigpe3JldHVybiBnfHxuLmVycm9yKGUrIiB3YXMgbm90IGNh%0AbGxlZCIpLGdbMF19LGIuZGF0YVR5cGVzWzBdPSJqc29uIixmPWFbZV0sYVtlXT1m%0AdW5jdGlvbigpe2c9YXJndW1lbnRzfSxkLmFsd2F5cyhmdW5jdGlvbigpe2FbZV09%0AZixiW2VdJiYoYi5qc29ucENhbGxiYWNrPWMuanNvbnBDYWxsYmFjayxHYy5wdXNo%0AKGUpKSxnJiZuLmlzRnVuY3Rpb24oZikmJmYoZ1swXSksZz1mPXZvaWQgMH0pLCJz%0AY3JpcHQiKTp2b2lkIDB9KSxuLnBhcnNlSFRNTD1mdW5jdGlvbihhLGIsYyl7aWYo%0AIWF8fCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gbnVsbDsiYm9vbGVhbiI9PXR5%0AcGVvZiBiJiYoYz1iLGI9ITEpLGI9Ynx8bDt2YXIgZD12LmV4ZWMoYSksZT0hYyYm%0AW107cmV0dXJuIGQ/W2IuY3JlYXRlRWxlbWVudChkWzFdKV06KGQ9bi5idWlsZEZy%0AYWdtZW50KFthXSxiLGUpLGUmJmUubGVuZ3RoJiZuKGUpLnJlbW92ZSgpLG4ubWVy%0AZ2UoW10sZC5jaGlsZE5vZGVzKSl9O3ZhciBJYz1uLmZuLmxvYWQ7bi5mbi5sb2Fk%0APWZ1bmN0aW9uKGEsYixjKXtpZigic3RyaW5nIiE9dHlwZW9mIGEmJkljKXJldHVy%0AbiBJYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGQsZSxmLGc9dGhpcyxoPWEu%0AaW5kZXhPZigiICIpO3JldHVybiBoPj0wJiYoZD1uLnRyaW0oYS5zbGljZShoKSks%0AYT1hLnNsaWNlKDAsaCkpLG4uaXNGdW5jdGlvbihiKT8oYz1iLGI9dm9pZCAwKTpi%0AJiYib2JqZWN0Ij09dHlwZW9mIGImJihlPSJQT1NUIiksZy5sZW5ndGg+MCYmbi5h%0AamF4KHt1cmw6YSx0eXBlOmUsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yn0pLmRvbmUo%0AZnVuY3Rpb24oYSl7Zj1hcmd1bWVudHMsZy5odG1sKGQ/bigiPGRpdj4iKS5hcHBl%0AbmQobi5wYXJzZUhUTUwoYSkpLmZpbmQoZCk6YSl9KS5jb21wbGV0ZShjJiZmdW5j%0AdGlvbihhLGIpe2cuZWFjaChjLGZ8fFthLnJlc3BvbnNlVGV4dCxiLGFdKX0pLHRo%0AaXN9LG4uZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGEpe3JldHVybiBu%0ALmdyZXAobi50aW1lcnMsZnVuY3Rpb24oYil7cmV0dXJuIGE9PT1iLmVsZW19KS5s%0AZW5ndGh9O3ZhciBKYz1hLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtmdW5jdGlv%0AbiBLYyhhKXtyZXR1cm4gbi5pc1dpbmRvdyhhKT9hOjk9PT1hLm5vZGVUeXBlJiZh%0ALmRlZmF1bHRWaWV3fW4ub2Zmc2V0PXtzZXRPZmZzZXQ6ZnVuY3Rpb24oYSxiLGMp%0Ae3ZhciBkLGUsZixnLGgsaSxqLGs9bi5jc3MoYSwicG9zaXRpb24iKSxsPW4oYSks%0AbT17fTsic3RhdGljIj09PWsmJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIp%0ALGg9bC5vZmZzZXQoKSxmPW4uY3NzKGEsInRvcCIpLGk9bi5jc3MoYSwibGVmdCIp%0ALGo9KCJhYnNvbHV0ZSI9PT1rfHwiZml4ZWQiPT09aykmJihmK2kpLmluZGV4T2Yo%0AImF1dG8iKT4tMSxqPyhkPWwucG9zaXRpb24oKSxnPWQudG9wLGU9ZC5sZWZ0KToo%0AZz1wYXJzZUZsb2F0KGYpfHwwLGU9cGFyc2VGbG9hdChpKXx8MCksbi5pc0Z1bmN0%0AaW9uKGIpJiYoYj1iLmNhbGwoYSxjLGgpKSxudWxsIT1iLnRvcCYmKG0udG9wPWIu%0AdG9wLWgudG9wK2cpLG51bGwhPWIubGVmdCYmKG0ubGVmdD1iLmxlZnQtaC5sZWZ0%0AK2UpLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLG0pOmwuY3NzKG0pfX0sbi5m%0Abi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3Ro%0AKXJldHVybiB2b2lkIDA9PT1hP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe24u%0Ab2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTt2YXIgYixjLGQ9dGhpc1swXSxl%0APXt0b3A6MCxsZWZ0OjB9LGY9ZCYmZC5vd25lckRvY3VtZW50O2lmKGYpcmV0dXJu%0AIGI9Zi5kb2N1bWVudEVsZW1lbnQsbi5jb250YWlucyhiLGQpPyh0eXBlb2YgZC5n%0AZXRCb3VuZGluZ0NsaWVudFJlY3QhPT1VJiYoZT1kLmdldEJvdW5kaW5nQ2xpZW50%0AUmVjdCgpKSxjPUtjKGYpLHt0b3A6ZS50b3ArYy5wYWdlWU9mZnNldC1iLmNsaWVu%0AdFRvcCxsZWZ0OmUubGVmdCtjLnBhZ2VYT2Zmc2V0LWIuY2xpZW50TGVmdH0pOmV9%0ALHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGEsYixjPXRoaXNb%0AMF0sZD17dG9wOjAsbGVmdDowfTtyZXR1cm4iZml4ZWQiPT09bi5jc3MoYywicG9z%0AaXRpb24iKT9iPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6KGE9dGhpcy5vZmZz%0AZXRQYXJlbnQoKSxiPXRoaXMub2Zmc2V0KCksbi5ub2RlTmFtZShhWzBdLCJodG1s%0AIil8fChkPWEub2Zmc2V0KCkpLGQudG9wKz1uLmNzcyhhWzBdLCJib3JkZXJUb3BX%0AaWR0aCIsITApLGQubGVmdCs9bi5jc3MoYVswXSwiYm9yZGVyTGVmdFdpZHRoIiwh%0AMCkpLHt0b3A6Yi50b3AtZC50b3Atbi5jc3MoYywibWFyZ2luVG9wIiwhMCksbGVm%0AdDpiLmxlZnQtZC5sZWZ0LW4uY3NzKGMsIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZz%0AZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2%0AYXIgYT10aGlzLm9mZnNldFBhcmVudHx8SmM7d2hpbGUoYSYmIW4ubm9kZU5hbWUo%0AYSwiaHRtbCIpJiYic3RhdGljIj09PW4uY3NzKGEsInBvc2l0aW9uIikpYT1hLm9m%0AZnNldFBhcmVudDtyZXR1cm4gYXx8SmN9KX19KSxuLmVhY2goe3Njcm9sbExlZnQ6%0AInBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24o%0AYixjKXt2YXIgZD0icGFnZVlPZmZzZXQiPT09YztuLmZuW2JdPWZ1bmN0aW9uKGUp%0Ae3JldHVybiBKKHRoaXMsZnVuY3Rpb24oYixlLGYpe3ZhciBnPUtjKGIpO3JldHVy%0AbiB2b2lkIDA9PT1mP2c/Z1tjXTpiW2VdOnZvaWQoZz9nLnNjcm9sbFRvKGQ/YS5w%0AYWdlWE9mZnNldDpmLGQ/ZjphLnBhZ2VZT2Zmc2V0KTpiW2VdPWYpfSxiLGUsYXJn%0AdW1lbnRzLmxlbmd0aCxudWxsKX19KSxuLmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVu%0AY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2JdPXliKGsucGl4ZWxQb3NpdGlvbixmdW5j%0AdGlvbihhLGMpe3JldHVybiBjPyhjPXhiKGEsYiksdmIudGVzdChjKT9uKGEpLnBv%0Ac2l0aW9uKClbYl0rInB4IjpjKTp2b2lkIDB9KX0pLG4uZWFjaCh7SGVpZ2h0OiJo%0AZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGEsYil7bi5lYWNoKHtwYWRk%0AaW5nOiJpbm5lciIrYSxjb250ZW50OmIsIiI6Im91dGVyIithfSxmdW5jdGlvbihj%0ALGQpe24uZm5bZF09ZnVuY3Rpb24oZCxlKXt2YXIgZj1hcmd1bWVudHMubGVuZ3Ro%0AJiYoY3x8ImJvb2xlYW4iIT10eXBlb2YgZCksZz1jfHwoZD09PSEwfHxlPT09ITA/%0AIm1hcmdpbiI6ImJvcmRlciIpO3JldHVybiBKKHRoaXMsZnVuY3Rpb24oYixjLGQp%0Ae3ZhciBlO3JldHVybiBuLmlzV2luZG93KGIpP2IuZG9jdW1lbnQuZG9jdW1lbnRF%0AbGVtZW50WyJjbGllbnQiK2FdOjk9PT1iLm5vZGVUeXBlPyhlPWIuZG9jdW1lbnRF%0AbGVtZW50LE1hdGgubWF4KGIuYm9keVsic2Nyb2xsIithXSxlWyJzY3JvbGwiK2Fd%0ALGIuYm9keVsib2Zmc2V0IithXSxlWyJvZmZzZXQiK2FdLGVbImNsaWVudCIrYV0p%0AKTp2b2lkIDA9PT1kP24uY3NzKGIsYyxnKTpuLnN0eWxlKGIsYyxkLGcpfSxiLGY/%0AZDp2b2lkIDAsZixudWxsKX19KX0pLG4uZm4uc2l6ZT1mdW5jdGlvbigpe3JldHVy%0AbiB0aGlzLmxlbmd0aH0sbi5mbi5hbmRTZWxmPW4uZm4uYWRkQmFjaywiZnVuY3Rp%0Ab24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIs%0AW10sZnVuY3Rpb24oKXtyZXR1cm4gbn0pO3ZhciBMYz1hLmpRdWVyeSxNYz1hLiQ7%0AcmV0dXJuIG4ubm9Db25mbGljdD1mdW5jdGlvbihiKXtyZXR1cm4gYS4kPT09biYm%0AKGEuJD1NYyksYiYmYS5qUXVlcnk9PT1uJiYoYS5qUXVlcnk9TGMpLG59LHR5cGVv%0AZiBiPT09VSYmKGEualF1ZXJ5PWEuJD1uKSxufSk7Ci8vIyBzb3VyY2VNYXBwaW5n%0AVVJMPWpxdWVyeS5taW4ubWFwPC9zY3JpcHQ+DQogICAgICA8IS0tIGQzLnNsaWRl%0Aci5qcyBsaWJyYXJ5IC0tPg0KICAgICAgPHNjcmlwdD4vKg0KICAgIEQzLmpzIFNs%0AaWRlcg0KICAgIEluc3BpcmVkIGJ5IGpRdWVyeSBVSSBTbGlkZXINCiAgICBDb3B5%0AcmlnaHQgKGMpIDIwMTMsIEJqb3JuIFNhbmR2aWsgLSBodHRwOi8vYmxvZy50aGVt%0AYXRpY21hcHBpbmcub3JnDQogICAgQlNEIGxpY2Vuc2U6IGh0dHA6Ly9vcGVuc291%0AcmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UNCiovDQooZnVuY3Rpb24gKHJv%0Ab3QsIGZhY3RvcnkpIHsNCiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlv%0AbicgJiYgZGVmaW5lLmFtZCkgew0KICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4g%0AYW5vbnltb3VzIG1vZHVsZS4NCiAgICBkZWZpbmUoWydkMyddLCBmYWN0b3J5KTsN%0ACiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHsNCiAg%0AICBpZiAocHJvY2Vzcy5icm93c2VyKSB7DQogICAgICAvLyBCcm93c2VyaWZ5LiBJ%0AbXBvcnQgY3NzIHRvbyB1c2luZyBjc3NpZnkuDQogICAgICByZXF1aXJlKCcuL2Qz%0ALnNsaWRlci5jc3MnKTsNCiAgICB9DQogICAgLy8gTm9kZS4gRG9lcyBub3Qgd29y%0AayB3aXRoIHN0cmljdCBDb21tb25KUywgYnV0DQogICAgLy8gb25seSBDb21tb25K%0AUy1saWtlIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMs%0ADQogICAgLy8gbGlrZSBOb2RlLg0KICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9y%0AeShyZXF1aXJlKCdkMycpKTsNCiAgfSBlbHNlIHsNCiAgICAvLyBCcm93c2VyIGds%0Ab2JhbHMgKHJvb3QgaXMgd2luZG93KQ0KICAgIHJvb3QuZDMuc2xpZGVyID0gZmFj%0AdG9yeShyb290LmQzKTsNCiAgfQ0KfSh0aGlzLCBmdW5jdGlvbiAoZDMpIHsNCnJl%0AdHVybiBmdW5jdGlvbiBtb2R1bGUoKSB7DQogICJ1c2Ugc3RyaWN0IjsNCg0KICAv%0ALyBQdWJsaWMgdmFyaWFibGVzIHdpZHRoIGRlZmF1bHQgc2V0dGluZ3MNCiAgdmFy%0AIG1pbiA9IDAsDQogICAgICBtYXggPSAxMDAsDQogICAgICBzdGVwID0gMC4wMSwN%0ACiAgICAgIGFuaW1hdGUgPSB0cnVlLA0KICAgICAgb3JpZW50YXRpb24gPSAiaG9y%0AaXpvbnRhbCIsDQogICAgICBheGlzID0gZmFsc2UsDQogICAgICBtYXJnaW4gPSA1%0AMCwNCiAgICAgIHZhbHVlLA0KICAgICAgYWN0aXZlID0gMSwNCiAgICAgIHNjYWxl%0ALA0KICAgICAgaW50ZXJ2YWw9MTsNCg0KICAvLyBQcml2YXRlIHZhcmlhYmxlcw0K%0AICB2YXIgYXhpc1NjYWxlLA0KICAgICAgZGlzcGF0Y2ggPSBkMy5kaXNwYXRjaCgi%0Ac2xpZGUiLCAic2xpZGVlbmQiKSwNCiAgICAgIGZvcm1hdFBlcmNlbnQgPSBkMy5m%0Ab3JtYXQoIi4yJSIpLA0KICAgICAgdGlja0Zvcm1hdCA9IGQzLmZvcm1hdCgiLjAi%0AKSwNCiAgICAgIGhhbmRsZTEsDQogICAgICBoYW5kbGUyID0gbnVsbCwNCiAgICAg%0AIHNsaWRlckxlbmd0aDsNCg0KICBmdW5jdGlvbiBzbGlkZXIoc2VsZWN0aW9uKSB7%0ADQogICAgc2VsZWN0aW9uLmVhY2goZnVuY3Rpb24oKSB7DQoNCiAgICAgIC8vIENy%0AZWF0ZSBzY2FsZSBpZiBub3QgZGVmaW5lZCBieSB1c2VyDQogICAgICBpZiAoIXNj%0AYWxlKSB7DQogICAgICAgIHNjYWxlID0gZDMuc2NhbGUubGluZWFyKCkuZG9tYWlu%0AKFttaW4sIG1heF0pOw0KICAgICAgfQ0KDQogICAgICAvLyBTdGFydCB2YWx1ZQ0K%0AICAgICAgdmFsdWUgPSB2YWx1ZSB8fCBzY2FsZS5kb21haW4oKVswXTsNCg0KICAg%0AICAgLy8gRElWIGNvbnRhaW5lcg0KICAgICAgdmFyIGRpdiA9IGQzLnNlbGVjdCh0%0AaGlzKS5jbGFzc2VkKCJkMy1zbGlkZXIgZDMtc2xpZGVyLSIgKyBvcmllbnRhdGlv%0AbiwgdHJ1ZSk7DQogICAgICANCiAgICAgIHZhciBkcmFnID0gZDMuYmVoYXZpb3Iu%0AZHJhZygpOw0KICAgICAgZHJhZy5vbignZHJhZ2VuZCcsIGZ1bmN0aW9uICgpIHsN%0ACiAgICAgICAgZGlzcGF0Y2guc2xpZGVlbmQoZDMuZXZlbnQsIHZhbHVlKTsNCiAg%0AICAgIH0pDQoNCiAgICAgIC8vIFNsaWRlciBoYW5kbGUNCiAgICAgIC8vaWYgcmFu%0AZ2Ugc2xpZGVyLCBjcmVhdGUgdHdvDQogICAgICB2YXIgZGl2UmFuZ2U7DQoNCiAg%0AICAgIGlmICggdmFsdWUubGVuZ3RoID09IDIgKSB7DQogICAgICAgIGhhbmRsZTEg%0APSBkaXYuYXBwZW5kKCJhIikNCiAgICAgICAgICAuY2xhc3NlZCgiZDMtc2xpZGVy%0ALWhhbmRsZSIsIHRydWUpDQogICAgICAgICAgLmF0dHIoInhsaW5rOmhyZWYiLCAi%0AIyIpDQogICAgICAgICAgLmF0dHIoJ2lkJywgImhhbmRsZS1vbmUiKQ0KICAgICAg%0AICAgIC5vbigiY2xpY2siLCBzdG9wUHJvcGFnYXRpb24pDQogICAgICAgICAgLmNh%0AbGwoZHJhZyk7DQogICAgICAgIGhhbmRsZTIgPSBkaXYuYXBwZW5kKCJhIikNCiAg%0AICAgICAgICAuY2xhc3NlZCgiZDMtc2xpZGVyLWhhbmRsZSIsIHRydWUpDQogICAg%0AICAgICAgLmF0dHIoJ2lkJywgImhhbmRsZS10d28iKQ0KICAgICAgICAgIC5hdHRy%0AKCJ4bGluazpocmVmIiwgIiMiKQ0KICAgICAgICAgIC5vbigiY2xpY2siLCBzdG9w%0AUHJvcGFnYXRpb24pDQogICAgICAgICAgLmNhbGwoZHJhZyk7DQogICAgICB9IGVs%0Ac2Ugew0KICAgICAgICBoYW5kbGUxID0gZGl2LmFwcGVuZCgiYSIpDQogICAgICAg%0AICAgLmNsYXNzZWQoImQzLXNsaWRlci1oYW5kbGUiLCB0cnVlKQ0KICAgICAgICAg%0AIC5hdHRyKCJ4bGluazpocmVmIiwgIiMiKQ0KICAgICAgICAgIC5hdHRyKCdpZCcs%0AICJoYW5kbGUtb25lIikNCiAgICAgICAgICAub24oImNsaWNrIiwgc3RvcFByb3Bh%0AZ2F0aW9uKQ0KICAgICAgICAgIC5jYWxsKGRyYWcpOw0KICAgICAgfQ0KICAgICAg%0ALy8gSG9yaXpvbnRhbCBzbGlkZXINCiAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0g%0AImhvcml6b250YWwiKSB7DQoNCiAgICAgICAgZGl2Lm9uKCJjbGljayIsIG9uQ2xp%0AY2tIb3Jpem9udGFsKTsNCiAgICAgICAgDQogICAgICAgIGlmICggdmFsdWUubGVu%0AZ3RoID09IDIgKSB7DQogICAgICAgICAgZGl2UmFuZ2UgPSBkMy5zZWxlY3QodGhp%0AcykuYXBwZW5kKCdkaXYnKS5jbGFzc2VkKCJkMy1zbGlkZXItcmFuZ2UiLCB0cnVl%0AKTsNCg0KICAgICAgICAgIGhhbmRsZTEuc3R5bGUoImxlZnQiLCBmb3JtYXRQZXJj%0AZW50KHNjYWxlKHZhbHVlWyAwIF0pKSk7DQogICAgICAgICAgZGl2UmFuZ2Uuc3R5%0AbGUoImxlZnQiLCBmb3JtYXRQZXJjZW50KHNjYWxlKHZhbHVlWyAwIF0pKSk7DQog%0AICAgICAgICAgZHJhZy5vbigiZHJhZyIsIG9uRHJhZ0hvcml6b250YWwpOw0KDQog%0AICAgICAgICAgdmFyIHdpZHRoID0gMTAwIC0gcGFyc2VGbG9hdChmb3JtYXRQZXJj%0AZW50KHNjYWxlKHZhbHVlWyAxIF0pKSk7DQogICAgICAgICAgaGFuZGxlMi5zdHls%0AZSgibGVmdCIsIGZvcm1hdFBlcmNlbnQoc2NhbGUodmFsdWVbIDEgXSkpKTsNCiAg%0AICAgICAgICBkaXZSYW5nZS5zdHlsZSgicmlnaHQiLCB3aWR0aCsiJSIpOw0KICAg%0AICAgICAgIGRyYWcub24oImRyYWciLCBvbkRyYWdIb3Jpem9udGFsKTsNCg0KICAg%0AICAgICB9IGVsc2Ugew0KICAgICAgICAgIGhhbmRsZTEuc3R5bGUoImxlZnQiLCBm%0Ab3JtYXRQZXJjZW50KHNjYWxlKHZhbHVlKSkpOw0KICAgICAgICAgIGRyYWcub24o%0AImRyYWciLCBvbkRyYWdIb3Jpem9udGFsKTsNCiAgICAgICAgfQ0KICAgICAgICAN%0ACg0KICAgICAgICBzbGlkZXJMZW5ndGggPSBwYXJzZUludChkaXYuc3R5bGUoIndp%0AZHRoIiksIDEwKTsNCiAgICAgICAgaGFuZGxlMS5zdHlsZSgnd2lkdGgnLCAoKHNj%0AYWxlKGludGVydmFsK21pbikqc2xpZGVyTGVuZ3RoKSkrJ3B4JykNCg0KICAgICAg%0AfSBlbHNlIHsgLy8gVmVydGljYWwNCg0KICAgICAgICBkaXYub24oImNsaWNrIiwg%0Ab25DbGlja1ZlcnRpY2FsKTsNCiAgICAgICAgZHJhZy5vbigiZHJhZyIsIG9uRHJh%0AZ1ZlcnRpY2FsKTsNCiAgICAgICAgaWYgKCB2YWx1ZS5sZW5ndGggPT0gMiApIHsN%0ACiAgICAgICAgICBkaXZSYW5nZSA9IGQzLnNlbGVjdCh0aGlzKS5hcHBlbmQoJ2Rp%0AdicpLmNsYXNzZWQoImQzLXNsaWRlci1yYW5nZS12ZXJ0aWNhbCIsIHRydWUpOw0K%0ADQogICAgICAgICAgaGFuZGxlMS5zdHlsZSgiYm90dG9tIiwgZm9ybWF0UGVyY2Vu%0AdChzY2FsZSh2YWx1ZVsgMCBdKSkpOw0KICAgICAgICAgIGRpdlJhbmdlLnN0eWxl%0AKCJib3R0b20iLCBmb3JtYXRQZXJjZW50KHNjYWxlKHZhbHVlWyAwIF0pKSk7DQog%0AICAgICAgICAgZHJhZy5vbigiZHJhZyIsIG9uRHJhZ1ZlcnRpY2FsKTsNCg0KICAg%0AICAgICAgIHZhciB0b3AgPSAxMDAgLSBwYXJzZUZsb2F0KGZvcm1hdFBlcmNlbnQo%0Ac2NhbGUodmFsdWVbIDEgXSkpKTsNCiAgICAgICAgICBoYW5kbGUyLnN0eWxlKCJi%0Ab3R0b20iLCBmb3JtYXRQZXJjZW50KHNjYWxlKHZhbHVlWyAxIF0pKSk7DQogICAg%0AICAgICAgZGl2UmFuZ2Uuc3R5bGUoInRvcCIsIHRvcCsiJSIpOw0KICAgICAgICAg%0AIGRyYWcub24oImRyYWciLCBvbkRyYWdWZXJ0aWNhbCk7DQoNCiAgICAgICAgfSBl%0AbHNlIHsNCiAgICAgICAgICBoYW5kbGUxLnN0eWxlKCJib3R0b20iLCBmb3JtYXRQ%0AZXJjZW50KHNjYWxlKHZhbHVlKSkpOw0KICAgICAgICAgIGRyYWcub24oImRyYWci%0ALCBvbkRyYWdWZXJ0aWNhbCk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAg%0AIHNsaWRlckxlbmd0aCA9IHBhcnNlSW50KGRpdi5zdHlsZSgiaGVpZ2h0IiksIDEw%0AKTsNCg0KICAgICAgfQ0KICAgICAgDQogICAgICBpZiAoYXhpcykgew0KICAgICAg%0AICBjcmVhdGVBeGlzKGRpdik7DQogICAgICB9DQoNCg0KICAgICAgZnVuY3Rpb24g%0AY3JlYXRlQXhpcyhkb20pIHsNCg0KICAgICAgICAvLyBDcmVhdGUgYXhpcyBpZiBu%0Ab3QgZGVmaW5lZCBieSB1c2VyDQogICAgICAgIGlmICh0eXBlb2YgYXhpcyA9PT0g%0AImJvb2xlYW4iKSB7DQoNCiAgICAgICAgICBheGlzID0gZDMuc3ZnLmF4aXMoKQ0K%0AICAgICAgICAgICAgICAudGlja3MoTWF0aC5yb3VuZChzbGlkZXJMZW5ndGggLyAx%0AMDApKQ0KICAgICAgICAgICAgICAudGlja0Zvcm1hdCh0aWNrRm9ybWF0KQ0KICAg%0AICAgICAgICAgICAub3JpZW50KChvcmllbnRhdGlvbiA9PT0gImhvcml6b250YWwi%0AKSA/ICJib3R0b20iIDogICJyaWdodCIpOw0KDQogICAgICAgIH0NCg0KICAgICAg%0AICAvLyBDb3B5IHNsaWRlciBzY2FsZSB0byBtb3ZlIGZyb20gcGVyY2VudGFnZXMg%0AdG8gcGl4ZWxzDQogICAgICAgIGF4aXNTY2FsZSA9IHNjYWxlLmNvcHkoKS5yYW5n%0AZShbMCwgc2xpZGVyTGVuZ3RoXSk7DQogICAgICAgICAgYXhpcy5zY2FsZShheGlz%0AU2NhbGUpOw0KDQogICAgICAgICAgLy8gQ3JlYXRlIFNWRyBheGlzIGNvbnRhaW5l%0Acg0KICAgICAgICB2YXIgc3ZnID0gZG9tLmFwcGVuZCgic3ZnIikNCiAgICAgICAg%0AICAgIC5jbGFzc2VkKCJkMy1zbGlkZXItYXhpcyBkMy1zbGlkZXItYXhpcy0iICsg%0AYXhpcy5vcmllbnQoKSwgdHJ1ZSkNCiAgICAgICAgICAgIC5vbigiY2xpY2siLCBz%0AdG9wUHJvcGFnYXRpb24pOw0KDQogICAgICAgIHZhciBnID0gc3ZnLmFwcGVuZCgi%0AZyIpOw0KDQogICAgICAgIC8vIEhvcml6b250YWwgYXhpcw0KICAgICAgICBpZiAo%0Ab3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIikgew0KDQogICAgICAgICAgc3Zn%0ALnN0eWxlKCJtYXJnaW4tbGVmdCIsIC1tYXJnaW4gKyAicHgiKTsNCg0KICAgICAg%0AICAgIHN2Zy5hdHRyKHsNCiAgICAgICAgICAgIHdpZHRoOiBzbGlkZXJMZW5ndGgg%0AKyBtYXJnaW4gKiAyLA0KICAgICAgICAgICAgaGVpZ2h0OiBtYXJnaW4NCiAgICAg%0AICAgICB9KTsNCg0KICAgICAgICAgIGlmIChheGlzLm9yaWVudCgpID09PSAidG9w%0AIikgew0KICAgICAgICAgICAgc3ZnLnN0eWxlKCJ0b3AiLCAtbWFyZ2luICsgInB4%0AIik7DQogICAgICAgICAgICBnLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUo%0AIiArIG1hcmdpbiArICIsIiArIG1hcmdpbiArICIpIik7DQogICAgICAgICAgfSBl%0AbHNlIHsgLy8gYm90dG9tDQogICAgICAgICAgICBnLmF0dHIoInRyYW5zZm9ybSIs%0AICJ0cmFuc2xhdGUoIiArIG1hcmdpbiArICIsMCkiKTsNCiAgICAgICAgICB9DQoN%0ACiAgICAgICAgfSBlbHNlIHsgLy8gVmVydGljYWwNCg0KICAgICAgICAgIHN2Zy5z%0AdHlsZSgidG9wIiwgLW1hcmdpbiArICJweCIpOw0KDQogICAgICAgICAgc3ZnLmF0%0AdHIoew0KICAgICAgICAgICAgd2lkdGg6IG1hcmdpbiwNCiAgICAgICAgICAgIGhl%0AaWdodDogc2xpZGVyTGVuZ3RoICsgbWFyZ2luICogMg0KICAgICAgICAgIH0pOw0K%0ADQogICAgICAgICAgaWYgKGF4aXMub3JpZW50KCkgPT09ICJsZWZ0Iikgew0KICAg%0AICAgICAgICAgc3ZnLnN0eWxlKCJsZWZ0IiwgLW1hcmdpbiArICJweCIpOw0KICAg%0AICAgICAgICAgZy5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKCIgKyBtYXJn%0AaW4gKyAiLCIgKyBtYXJnaW4gKyAiKSIpOw0KICAgICAgICAgIH0gZWxzZSB7IC8v%0AIHJpZ2h0ICAgICAgICAgIA0KICAgICAgICAgICAgZy5hdHRyKCJ0cmFuc2Zvcm0i%0ALCAidHJhbnNsYXRlKCIgKyAwICsgIiwiICsgbWFyZ2luICsgIikiKTsNCiAgICAg%0AICAgICB9DQoNCiAgICAgICAgfQ0KDQogICAgICAgIGcuY2FsbChheGlzKTsNCg0K%0AICAgICAgfQ0KDQogICAgICBmdW5jdGlvbiBvbkNsaWNrSG9yaXpvbnRhbCgpIHsN%0ACiAgICAgICAgaWYgKCF2YWx1ZS5sZW5ndGgpIHsNCiAgICAgICAgICB2YXIgcG9z%0AID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2xpZGVyTGVuZ3RoLCBkMy5ldmVudC5v%0AZmZzZXRYIHx8IGQzLmV2ZW50LmxheWVyWCkpOw0KICAgICAgICAgIG1vdmVIYW5k%0AbGUoc3RlcFZhbHVlKHNjYWxlLmludmVydChwb3MgLyBzbGlkZXJMZW5ndGgpKSk7%0ADQogICAgICAgIH0NCiAgICAgIH0NCg0KICAgICAgZnVuY3Rpb24gb25DbGlja1Zl%0AcnRpY2FsKCkgew0KICAgICAgICBpZiAoIXZhbHVlLmxlbmd0aCkgew0KICAgICAg%0AICAgIHZhciBwb3MgPSBzbGlkZXJMZW5ndGggLSBNYXRoLm1heCgwLCBNYXRoLm1p%0AbihzbGlkZXJMZW5ndGgsIGQzLmV2ZW50Lm9mZnNldFkgfHwgZDMuZXZlbnQubGF5%0AZXJZKSk7DQogICAgICAgICAgbW92ZUhhbmRsZShzdGVwVmFsdWUoc2NhbGUuaW52%0AZXJ0KHBvcyAvIHNsaWRlckxlbmd0aCkpKTsNCiAgICAgICAgfQ0KICAgICAgfQ0K%0ADQogICAgICBmdW5jdGlvbiBvbkRyYWdIb3Jpem9udGFsKCkgew0KICAgICAgICBp%0AZiAoIGQzLmV2ZW50LnNvdXJjZUV2ZW50LnRhcmdldC5pZCA9PT0gImhhbmRsZS1v%0AbmUiKSB7DQogICAgICAgICAgYWN0aXZlID0gMTsNCiAgICAgICAgfSBlbHNlIGlm%0AICggZDMuZXZlbnQuc291cmNlRXZlbnQudGFyZ2V0LmlkID09ICJoYW5kbGUtdHdv%0AIiApIHsNCiAgICAgICAgICBhY3RpdmUgPSAyOw0KICAgICAgICB9DQogICAgICAg%0AIHZhciBwb3MgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzbGlkZXJMZW5ndGgsIGQz%0ALmV2ZW50LngpKTsNCiAgICAgICAgbW92ZUhhbmRsZShzdGVwVmFsdWUoc2NhbGUu%0AaW52ZXJ0KHBvcyAvIHNsaWRlckxlbmd0aCkpKTsNCiAgICAgIH0NCg0KICAgICAg%0AZnVuY3Rpb24gb25EcmFnVmVydGljYWwoKSB7DQogICAgICAgIGlmICggZDMuZXZl%0AbnQuc291cmNlRXZlbnQudGFyZ2V0LmlkID09PSAiaGFuZGxlLW9uZSIpIHsNCiAg%0AICAgICAgICBhY3RpdmUgPSAxOw0KICAgICAgICB9IGVsc2UgaWYgKCBkMy5ldmVu%0AdC5zb3VyY2VFdmVudC50YXJnZXQuaWQgPT0gImhhbmRsZS10d28iICkgew0KICAg%0AICAgICAgIGFjdGl2ZSA9IDI7DQogICAgICAgIH0NCiAgICAgICAgdmFyIHBvcyA9%0AIHNsaWRlckxlbmd0aCAtIE1hdGgubWF4KDAsIE1hdGgubWluKHNsaWRlckxlbmd0%0AaCwgZDMuZXZlbnQueSkpDQogICAgICAgIG1vdmVIYW5kbGUoc3RlcFZhbHVlKHNj%0AYWxlLmludmVydChwb3MgLyBzbGlkZXJMZW5ndGgpKSk7DQogICAgICB9DQoNCiAg%0AICAgIGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbigpIHsNCiAgICAgICAgZDMuZXZl%0AbnQuc3RvcFByb3BhZ2F0aW9uKCk7DQogICAgICB9DQoNCiAgICB9KTsNCg0KICB9%0ADQoNCiAgLy8gTW92ZSBzbGlkZXIgaGFuZGxlIG9uIGNsaWNrL2RyYWcNCiAgZnVu%0AY3Rpb24gbW92ZUhhbmRsZShuZXdWYWx1ZSkgeyANCiAgICBpZiAoc2xpZGVyLm1h%0AeCgpLXNsaWRlci5pbnRlcnZhbCgpIDwgbmV3VmFsdWUpIHsgDQogICAgICBuZXdW%0AYWx1ZSA9IHNsaWRlci5tYXgoKSAtIHNsaWRlci5pbnRlcnZhbCgpOw0KICAgIH0N%0ACg0KICAgIHZhciBjdXJyZW50VmFsdWUgPSB2YWx1ZS5sZW5ndGggPyB2YWx1ZVth%0AY3RpdmUgLSAxXTogdmFsdWU7DQoNCiAgICBpZiAoY3VycmVudFZhbHVlICE9PSBu%0AZXdWYWx1ZSkgew0KICAgICAgdmFyIG9sZFBvcyA9IGZvcm1hdFBlcmNlbnQoc2Nh%0AbGUoc3RlcFZhbHVlKGN1cnJlbnRWYWx1ZSkpKSwNCiAgICAgICAgICBuZXdQb3Mg%0APSBmb3JtYXRQZXJjZW50KHNjYWxlKHN0ZXBWYWx1ZShuZXdWYWx1ZSkpKSwNCiAg%0AICAgICAgICBwb3NpdGlvbiA9IChvcmllbnRhdGlvbiA9PT0gImhvcml6b250YWwi%0AKSA/ICJsZWZ0IiA6ICJib3R0b20iOw0KDQogICAgICBpZiAoIHZhbHVlLmxlbmd0%0AaCA9PT0gMikgew0KICAgICAgICB2YWx1ZVsgYWN0aXZlIC0gMSBdID0gbmV3VmFs%0AdWU7DQogICAgICAgIGlmIChkMy5ldmVudCkgew0KICAgICAgICAgIGRpc3BhdGNo%0ALnNsaWRlKGQzLmV2ZW50LCB2YWx1ZSApOw0KICAgICAgICB9Ow0KICAgICAgfSBl%0AbHNlIHsNCiAgICAgICAgaWYgKGQzLmV2ZW50KSB7DQogICAgICAgICAgZGlzcGF0%0AY2guc2xpZGUoZDMuZXZlbnQuc291cmNlRXZlbnQgfHwgZDMuZXZlbnQsIHZhbHVl%0AID0gbmV3VmFsdWUpOw0KICAgICAgICB9Ow0KICAgICAgfQ0KDQogICAgICBpZiAo%0AIHZhbHVlWyAwIF0gPj0gdmFsdWVbIDEgXSApIHJldHVybjsNCiAgICAgIGlmICgg%0AYWN0aXZlID09PSAxICkgew0KICAgICAgICANCiAgICAgICAgaWYgKHZhbHVlLmxl%0Abmd0aCA9PT0gMikgew0KICAgICAgICAgIChwb3NpdGlvbiA9PT0gImxlZnQiKSA/%0AIGRpdlJhbmdlLnN0eWxlKCJsZWZ0IiwgbmV3UG9zKSA6IGRpdlJhbmdlLnN0eWxl%0AKCJib3R0b20iLCBuZXdQb3MpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGFu%0AaW1hdGUpIHsNCiAgICAgICAgICBoYW5kbGUxLnRyYW5zaXRpb24oKQ0KICAgICAg%0AICAgICAgICAuc3R5bGVUd2Vlbihwb3NpdGlvbiwgZnVuY3Rpb24oKSB7IHJldHVy%0AbiBkMy5pbnRlcnBvbGF0ZShvbGRQb3MsIG5ld1Bvcyk7IH0pDQogICAgICAgICAg%0AICAgIC5kdXJhdGlvbigodHlwZW9mIGFuaW1hdGUgPT09ICJudW1iZXIiKSA/IGFu%0AaW1hdGUgOiAyNTApOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIGhhbmRs%0AZTEuc3R5bGUocG9zaXRpb24sIG5ld1Bvcyk7DQogICAgICAgIH0NCiAgICAgIH0g%0AZWxzZSB7DQogICAgICAgIA0KICAgICAgICB2YXIgd2lkdGggPSAxMDAgLSBwYXJz%0AZUZsb2F0KG5ld1Bvcyk7DQogICAgICAgIHZhciB0b3AgPSAxMDAgLSBwYXJzZUZs%0Ab2F0KG5ld1Bvcyk7DQoNCiAgICAgICAgKHBvc2l0aW9uID09PSAibGVmdCIpID8g%0AZGl2UmFuZ2Uuc3R5bGUoInJpZ2h0Iiwgd2lkdGggKyAiJSIpIDogZGl2UmFuZ2Uu%0Ac3R5bGUoInRvcCIsIHRvcCArICIlIik7DQogICAgICAgIA0KICAgICAgICBpZiAo%0AYW5pbWF0ZSkgew0KICAgICAgICAgIGhhbmRsZTIudHJhbnNpdGlvbigpDQogICAg%0AICAgICAgICAgIC5zdHlsZVR3ZWVuKHBvc2l0aW9uLCBmdW5jdGlvbigpIHsgcmV0%0AdXJuIGQzLmludGVycG9sYXRlKG9sZFBvcywgbmV3UG9zKTsgfSkNCiAgICAgICAg%0AICAgICAgLmR1cmF0aW9uKCh0eXBlb2YgYW5pbWF0ZSA9PT0gIm51bWJlciIpID8g%0AYW5pbWF0ZSA6IDI1MCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgaGFu%0AZGxlMi5zdHlsZShwb3NpdGlvbiwgbmV3UG9zKTsNCiAgICAgICAgfQ0KICAgICAg%0AfQ0KICAgIH0NCiAgfQ0KDQogIC8vIENhbGN1bGF0ZSBuZWFyZXN0IHN0ZXAgdmFs%0AdWUNCiAgZnVuY3Rpb24gc3RlcFZhbHVlKHZhbCkgew0KDQogICAgaWYgKHZhbCA9%0APT0gc2NhbGUuZG9tYWluKClbMF0gfHwgdmFsID09PSBzY2FsZS5kb21haW4oKVsx%0AXSkgew0KICAgICAgcmV0dXJuIHZhbDsNCiAgICB9DQoNCiAgICB2YXIgdmFsTW9k%0AU3RlcCA9ICh2YWwgLSBzY2FsZS5kb21haW4oKVswXSkgJSBzdGVwLA0KICAgICAg%0AICBhbGlnblZhbHVlID0gdmFsIC0gdmFsTW9kU3RlcDsNCg0KICAgIGlmIChNYXRo%0ALmFicyh2YWxNb2RTdGVwKSAqIDIgPj0gc3RlcCkgew0KICAgICAgYWxpZ25WYWx1%0AZSArPSAodmFsTW9kU3RlcCA+IDApID8gc3RlcCA6IC1zdGVwOw0KICAgIH0NCg0K%0AICAgIHJldHVybiBhbGlnblZhbHVlOw0KDQogIH0NCg0KICAvLyBHZXR0ZXIvc2V0%0AdGVyIGZ1bmN0aW9ucw0KICBzbGlkZXIubWluID0gZnVuY3Rpb24oXykgew0KICAg%0AIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG1pbjsNCiAgICBtaW4gPSBf%0AOw0KICAgIHJldHVybiBzbGlkZXI7DQogIH07DQoNCiAgc2xpZGVyLm1heCA9IGZ1%0AbmN0aW9uKF8pIHsNCiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBt%0AYXg7DQogICAgbWF4ID0gXzsNCiAgICByZXR1cm4gc2xpZGVyOw0KICB9Ow0KDQog%0AIHNsaWRlci5zdGVwID0gZnVuY3Rpb24oXykgew0KICAgIGlmICghYXJndW1lbnRz%0ALmxlbmd0aCkgcmV0dXJuIHN0ZXA7DQogICAgc3RlcCA9IF87DQogICAgcmV0dXJu%0AIHNsaWRlcjsNCiAgfTsNCg0KICBzbGlkZXIuYW5pbWF0ZSA9IGZ1bmN0aW9uKF8p%0AIHsNCiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBhbmltYXRlOw0K%0AICAgIGFuaW1hdGUgPSBfOw0KICAgIHJldHVybiBzbGlkZXI7DQogIH07DQoNCiAg%0Ac2xpZGVyLm9yaWVudGF0aW9uID0gZnVuY3Rpb24oXykgew0KICAgIGlmICghYXJn%0AdW1lbnRzLmxlbmd0aCkgcmV0dXJuIG9yaWVudGF0aW9uOw0KICAgIG9yaWVudGF0%0AaW9uID0gXzsNCiAgICByZXR1cm4gc2xpZGVyOw0KICB9Ow0KDQogIHNsaWRlci5h%0AeGlzID0gZnVuY3Rpb24oXykgew0KICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkg%0AcmV0dXJuIGF4aXM7DQogICAgYXhpcyA9IF87DQogICAgcmV0dXJuIHNsaWRlcjsN%0ACiAgfTsNCg0KICBzbGlkZXIubWFyZ2luID0gZnVuY3Rpb24oXykgew0KICAgIGlm%0AICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG1hcmdpbjsNCiAgICBtYXJnaW4g%0APSBfOw0KICAgIHJldHVybiBzbGlkZXI7DQogIH07DQoNCiAgc2xpZGVyLnZhbHVl%0AID0gZnVuY3Rpb24oXykgew0KICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0%0AdXJuIHZhbHVlOw0KICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7DQogICAg%0AICBtb3ZlSGFuZGxlKHN0ZXBWYWx1ZShfKSk7DQogICAgfTsNCiAgICB2YWx1ZSA9%0AIF87DQogICAgcmV0dXJuIHNsaWRlcjsNCiAgfTsNCg0KICBzbGlkZXIuc2NhbGUg%0APSBmdW5jdGlvbihfKSB7DQogICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1%0Acm4gc2NhbGU7DQogICAgc2NhbGUgPSBfOw0KICAgIHJldHVybiBzbGlkZXI7DQog%0AIH07DQoNCiAgc2xpZGVyLmludGVydmFsID0gZnVuY3Rpb24oXykgew0KICAgIGlm%0AICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGludGVydmFsOw0KICAgIGludGVy%0AdmFsID0gXzsNCiAgICByZXR1cm4gc2xpZGVyOw0KICB9Ow0KDQoNCiAgZDMucmVi%0AaW5kKHNsaWRlciwgZGlzcGF0Y2gsICJvbiIpOw0KDQogIHJldHVybiBzbGlkZXI7%0ADQoNCn0NCn0pKTsNCjwvc2NyaXB0Pg0KICAgICAgPCEtLSBuZHR2LWQzIGpzIGNv%0AZGUgLS0+DQogICAgICA8c2NyaXB0Pi8qKgpuZHR2LWQzIGlzIGEgZDMtYmFzZWQg%0ASFRNTDUgbmV0d29yayBhbmltYXRpb24gcGxheWVyIGZvciB0aGUgbmR0diBwYWNr%0AYWdlIChodHRwOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9uZHR2%0AL2luZGV4Lmh0bWwpCgpUaGUgbmR0di1kMyBsaWJyYXJ5IHdhcyBjcmVhdGVkIGJ5%0AIEdyZWcgTWljaGFsZWMgYW5kIFNreWUgQmVuZGVyLWRlTW9sbCBmb3IgdGhlIHN0%0AYXRuZXQgcHJvamVjdCBodHRwOi8vc3RhdG5ldC5vcmcgZnVuZGVkIGJ5IE5JQ0hE%0AIGdyYW50IFIwMUhEMDY4Mzk1LgoKVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRl%0AZCB1bmRlciB0aGUgR1BMLTMgbGljZW5zZSAoaHR0cDovL2Nob29zZWFsaWNlbnNl%0ALmNvbS9saWNlbnNlcy9ncGwtMy4wLykuICBJdCBpcyBmcmVlLCBvcGVuIHNvdXJj%0AZSwgYW5kIGhhcyB0aGUgYXR0cmlidXRpb24gcmVxdWlyZW1lbnRzIChHUEwgU2Vj%0AdGlvbiA3KSBhdCBodHRwOi8vc3RhdG5ldC5vcmcvYXR0cmlidXRpb246CgphLiB5%0Ab3UgYWdyZWUgdG8gcmV0YWluIGluIG5kdHYtZDMgYW5kIGFueSBtb2RpZmljYXRp%0Ab25zIHRvIG5kdHYtZDMgdGhlIGNvcHlyaWdodCwgYXV0aG9yIGF0dHJpYnV0aW9u%0AIGFuZCBVUkwgaW5mb3JtYXRpb24gYXMgcHJvdmlkZWQgYXQgYSBodHRwOi8vc3Rh%0AdG5ldHByb2plY3Qub3JnL2F0dHJpYnV0aW9uLgoKYi4geW91IGFncmVlIHRoYXQg%0AbmR0di1kMyBhbmQgYW55IG1vZGlmaWNhdGlvbnMgdG8gbmR0di1kMyB3aWxsLCB3%0AaGVuIHVzZWQsIGRpc3BsYXkgdGhlIGF0dHJpYnV0aW9uOgoKICAgIEJhc2VkIG9u%0AICdzdGF0bmV0JyBwcm9qZWN0IHNvZnR3YXJlIChodHRwOi8vc3RhdG5ldHByb2pl%0AY3Qub3JnKS4gRm9yIGxpY2Vuc2UgYW5kIGNpdGF0aW9uIGluZm9ybWF0aW9uIHNl%0AZSBodHRwOi8vc3RhdG5ldHByb2plY3Qub3JnL2F0dHJpYnV0aW9uCgpDb3B5cmln%0AaHQgMjAxNCBTdGF0bmV0IENvbW1vbnMgaHR0cDovL3N0YXRuZXQub3JnCgpUbyBj%0AaXRlIHRoaXMgcHJvamVjdCwgcGxlYXNlIHVzZToKCkdyZWcgTWljaGFsZWMsIFNr%0AeWUgQmVuZGVyLWRlTW9sbCwgTWFydGluYSBNb3JyaXMgKDIwMTQpICduZHR2LWQz%0AOiBhbiBIVE1MNSBuZXR3b3JrIGFuaW1hdGlvbiBwbGF5ZXIgZm9yIHRoZSBuZHR2%0AIHBhY2thZ2UnIFRoZSBzdGF0bmV0IHByb2plY3QuIGh0dHA6Ly9zdGF0bmV0Lm9y%0AZwpAbW9kdWxlCiovCgoKKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7CiAgLyoq%0AIEBjbGFzcyAqLwogIHJvb3QubmR0dl9kMyA9IGZhY3RvcnkoKTsKfSh0aGlzLCBm%0AdW5jdGlvbigpIHsKICAidXNlIHN0cmljdCI7CiAKICAvKioKICAqIFB1YmxpYyBv%0AcHRpb25zIHRvIGNvbnRyb2wgdmlzdWFsaXphdGlvbiBmdW5jdGlvbmFsaXR5CiAg%0AKiBAY29uc3RhbnQge29iamVjdH0KICAqIEBnbG9iYWwKICAqIEBkZWZhdWx0CiAg%0AKi8KICB2YXIgZGVmYXVsdF9vcHRpb25zID0gewogICAgYW5pbWF0aW9uRHVyYXRp%0Ab246IDgwMCwgICAgICAgLy9EdXJhdGlvbiBvZiBlYWNoIHN0ZXAgYW5pbWF0aW9u%0AIGR1cmluZyBwbGF5IG9yIHN0ZXAgYWN0aW9ucywgaW4gbWlsbGlzZWNvbmRzCiAg%0AICBlbnRlckV4aXRBbmltYXRpb25GYWN0b3I6IDAsICAvL1BlcmNlbnRhZ2UgKDAt%0AMSkgb2YgdG90YWwgc3RlcCBhbmltYXRpb24gdGltZSB0aGF0IGVudGVyL2V4aXQg%0AYW5pbWF0aW9ucyBzaG91bGQgdGFrZQogICAgbGFiZWxPZmZzZXQ6IHsgICAgICAg%0AICAgICAgICAgLy9waXhlbCBvZmZzZXQgb2YgbGFiZWxzCiAgICAgIHg6IDEyLAog%0AICAgICB5OiAwCiAgICB9LAogICAgYmFzZUZvbnRTaXplOiAnMTQnLCAgICAgICAg%0AICAgLy9Gb250IHNpemUsIGluIHBpeGVscywgZm9yIGxhYmVscyB3aXRoIGNleCB2%0AYWx1ZSBvZiAxCiAgICBub2RlU2l6ZUZhY3RvcjogMC4wMSwgICAgICAgICAvL1Bl%0AcmNlbnRhZ2UgKDAtMSkgb2Ygdmlld3BvcnQgc2l6ZSB0aGF0IGEgbm9kZSBvZiBz%0AaXplIDEgd2lsbCBiZSByZW5kZXJlZCBhdAogICAgZGF0YUNob29zZXI6IGZhbHNl%0ALCAgICAgICAgICAgLy9zaG93IGEgc2VsZWN0IGJveCBmb3IgY2hvb3NpbmcgZGlm%0AZmVyZW50IGdyYXBocz8KICAgIGRhdGFDaG9vc2VyRGlyOiAnZGF0YS8nLCAgICAg%0AIC8vd2ViIHBhdGggdG8gZGlyIGNvbnRhaW5pbmcgZGF0YSBqc29uIGZpbGVzCiAg%0AICBwbGF5Q29udHJvbHM6IHRydWUsICAgICAgICAgICAvL3Nob3cgdGhlIHBsYXll%0AciBjb250cm9scwogICAgc2xpZGVyOiB0cnVlLCAgICAgICAgICAgICAgICAgLy9z%0AaG93IHRoZSBzbGlkZXIgY29udHJvbAogICAgbWVudTogdHJ1ZSwgICAgICAgICAg%0AICAgICAgICAgLy9zaG93IGEgbWVudSBpbiB1cHBlci1yaWdodAogICAgYW5pbWF0%0AZU9uTG9hZDogZmFsc2UsICAgICAgICAgLy9wbGF5IHRoZSBncmFwaCBhbmltYXRp%0Ab24gb24gcGFnZSBsb2FkCiAgICBtYXJnaW46IHsgICAgICAgICAgICAgICAgICAg%0AICAvL2dyYXBoIHJlbmRlciBhcmVhIG1hcmdpbnMKICAgICAgeDogMjAsCiAgICAg%0AIHk6IDEwCiAgICB9LAogICAgZ3JhcGhEYXRhOiBudWxsLCAgICAgICAgICAgICAg%0ALy9ncmFwaCBkYXRhLCBlaXRoZXIgYXMgSlNPTiBvYmplY3Qgb3IgVVJMIHRvIGpz%0Ab24gZmlsZQogICAgZGVidWdGcmFtZUluZm86IGZhbHNlLCAgICAgICAgLy9TaG93%0AIHRoZSBzbGljZSBpbmZvIGluIGNvcm5lcgogICAgZHVyYXRpb25Db250cm9sOiB0%0AcnVlLCAgLy9TaG93IGEgY29udHJvbCB0byBjaGFuZ2UgZHVyYXRpb24gc3BlZWQK%0AICB9OwoKICAvKioKICAqIFN1cHBvcnRlZCBORFRWIG5ldHdvcmsgcHJvcGVydGll%0AcyBhbmQgdGhlaXIgZGVmYXVsdCB2YWx1ZXMKICAqIEBjb25zdGFudCB7b2JqZWN0%0AfQogICogQGdsb2JhbAogICogQGRlZmF1bHQKICAqLwogIHZhciBuZHR2UHJvcGVy%0AdGllcyA9IHsKICAgIGdyYXBoOiB7CiAgICAgIHhsYWI6IG51bGwsICAgICAgICAg%0AICAgICAgICAgICAgLy8gbGFiZWwgY2FwdGlvbiBiZWxvdyB0aGUgcmVuZGVyLCBv%0AbiB0aGUgeGF4aXMKICAgICAgbWFpbjogbnVsbCwgICAgICAgICAgICAgICAgICAg%0AICAvLyBtYWluIGhlYWRsaW5lIGFib3ZlIHRoZSByZW5kZXIKICAgICAgZGlzcGxh%0AeWxhYmVsczogZmFsc2UgLCAgICAgICAgICAvLyBzaG91bGQgdmVydGV4IGxhYmVs%0AcyBiZSBkaXNwbGF5ZWQKICAgICAgYmc6ICcjZmZmJywgICAgICAgICAgICAgICAg%0AICAgICAvLyBiYWNrZ3JvdW5kIGNvbG9yCiAgICAgIHVzZWFycm93czogdHJ1ZSwg%0AICAgICAgICAgICAgICAgLy8gc2hvdWxkIGFycm93cyBiZSBkcmF3biBvbiBlZGdl%0Acz8KICAgICAgeGxpbTogbnVsbCwgICAgICAgICAgICAgICAgICAgICAvLyByYW5n%0AZSBvZiB4IHZhbHVlcyAgICAgICAgICAgICAgICAgICAgIAogICAgICB5bGltOiBu%0AdWxsLCAgICAgICAgICAgICAgICAgICAgIC8vIHJhbmdlIG9mIHkgdmFsdWVzICAK%0AICAgICAgZWRnZU9mZnNldDogMCwgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQg%0Ab2YgZWRnZSBsZW5ndGggdG8gdmVydGV4IGJvcmRlcnMgIAogICAgICB0b29sdGlw%0AT2Zmc2V0OiAwLCAgICAgICAgICAgICAgIC8vIG9mZnNldCBvZiB0b29sdGlwcyB0%0AbyB2ZXJ0ZXggYm9yZGVycyAKICAgIH0sIAogICAgbm9kZTogewogICAgICBjb29y%0AZDogbnVsbCwgICAgICAgICAgICAgICAgICAgIC8vIGNvb3JkaW5hdGVzIGZvciBu%0Ab2RlcwogICAgICBsYWJlbDogbnVsbCwgICAgICAgICAgICAgICAgICAgIC8vIGxh%0AYmVscyBmb3IgdmVydGljZXMKICAgICAgJ2xhYmVsLmNvbCc6ICcjMDAwJywgICAg%0AICAgICAgICAvLyBjb2xvciBvZiBub2RlIGxhYmVsCiAgICAgICdsYWJlbC5jZXgn%0AOiAxLCAgICAgICAgICAgICAgICAgLy8gbGFiZWwgZm9udCBzaXplIHNjYWxlIGZh%0AY3RvcgogICAgICAndmVydGV4LmNleCc6IDEsICAgICAgICAgICAgICAgIC8vIHZl%0AcnRleCAobm9kZSkgZXhwYW5zaW9uIHNjYWxlIGZhY3RvcgogICAgICAndmVydGV4%0ALmNvbCc6ICcjRjAwJywgICAgICAgICAgIC8vIG5vZGUgZmlsbCBjb2xvcgogICAg%0AICAndmVydGV4LnNpZGVzJzogNTAsICAgICAgICAgICAgIC8vIG51bWJlciBvZiBz%0AaWRlcyBmb3IgdmVydGV4IHBvbHlnb24gKHNoYXBlKQogICAgICAndmVydGV4LnJv%0AdCc6IDAsICAgICAgICAgICAgICAgIC8vIHJvdGF0aW9uIGZvciB2ZXJ0ZXggcG9s%0AeWdvbgogICAgICAndmVydGV4LnRvb2x0aXAnOiAnJywgICAgICAgICAgIC8vIHZl%0AcnRleCB0b29sdGlwIHZhbHVlCiAgICAgICd2ZXJ0ZXguYm9yZGVyJzogJyMwMDAn%0ALCAgICAgICAgLy8gY29sb3Igb2YgdmVydGV4IGJvcmRlciBzdHJva2UKICAgICAg%0AJ3ZlcnRleC5sd2QnOiAxLCAgICAgICAgICAgICAgICAvLyB3aWR0aCBvZiB2ZXJ0%0AZXggYm9yZGVyIHN0cm9rZQogICAgICAndmVydGV4LmNzcy5jbGFzcyc6IG51bGws%0AICAgICAgIC8vIGNzcyBjbGFzcyBuYW1lIGFwcGxpZWQgdG8gbm9kZQogICAgICAn%0AdmVydGV4LmxhYmVsLmNzcy5jbGFzcyc6IG51bGwsIC8vIGNzcyBjbGFzcyBuYW1l%0AIGFwcGxpZWQgdG8gbm9kZSBsYWJlbAogICAgICAndmVydGV4LmNzcy5zdHlsZSc6%0AIG51bGwsICAgICAgIC8vIGNzcyBpbmxpbmUtc3R5bGUgYXBwbGllZCB0byBub2Rl%0AIChVTklNUExJTUVOVEVEKQogICAgICAndmVydGV4LmxhYmVsLmNzcy5zdHlsZSc6%0AIG51bGwsIC8vIGNzcyBpbmxpbmUgc3R5bGUgYXBwbGllZCB0byBub2RlIGxhYmVs%0AIChVTklNUExFTUVOVEVEKQogICAgICAnaW1hZ2UnOiBudWxsLCAgICAgICAgICAg%0AICAgICAgIC8vIGJhY2tncm91bmQgaW1hZ2UgZm9yIHZlcnRleAogICAgfSwKICAg%0AIGVkZ2U6IHsKICAgICAgJ2VkZ2UubHdkJzogMSwgICAgICAgICAgICAgICAgICAv%0ALyB3aWR0aCBvZiBlZGdlIHN0cm9rZQogICAgICAnZWRnZS5jb2wnOiAnIzAwMCcs%0AICAgICAgICAgICAgIC8vIGVkZ2Ugc3Ryb2tlIGNvbG9yCiAgICAgICdlZGdlLnRv%0Ab2x0aXAnOiBudWxsLCAgICAgICAgICAgLy8gZWRnZSB0b29sdGlwIHZhbHVlCiAg%0AICAgICdlZGdlLmNzcy5jbGFzcyc6IG51bGwsICAgICAgICAgLy8gY3NzIGNsYXNz%0AIG5hbWUgYXBwbGllZCB0byBlZGdlCiAgICAgICdlZGdlLmxhYmVsLmNzcy5jbGFz%0Acyc6IG51bGwsICAgLy8gY3NzIGNsYXNzIG5hbWUgYXBwbGllZCB0byBlZGdlIGxh%0AYmVsCiAgICAgICdlZGdlLmNzcy5zdHlsZSc6IG51bGwsICAgICAgICAgLy8gY3Nz%0AIGlubGluZS1zdHlsZSBhcHBsaWVkIHRvIGVkZ2UgKFVOSU1QTElNRU5URUQpCiAg%0AICAgICdlZGdlLmxhYmVsLmNzcy5zdHlsZSc6IG51bGwsICAgLy8gY3NzIGlubGlu%0AZSBzdHlsZSBhcHBsaWVkIHRvIGVkZ2UgbGFiZWwgKFVOSU1QTEVNRU5URUQpCiAg%0AICB9CiAgfQogIAoKICAvKioKICAqIEluaXRpYWxpemUgYSBuZXcgbmR0di1kMyBp%0AbnN0YW5jZQogICogQGNvbnN0cnVjdHMgbmR0dl9kMwogICogQHBhcmFtIHtvYmpl%0AY3R9IC0gQW4gb2JqZWN0IG9mIGRlZmF1bHQgb3B0aW9ucyBvdmVycmlkZXMKICAq%0AIEBwYXJhbSB7c3RyaW5nfEhUTUxFbGVtZW50fSAtIEEgQ1NTIHNlbGVjdG9yIHN0%0AcmluZyBvciBET00gZWxlbWVudCByZWZlcmVuY2Ugc3BlY2lmeWluZyB0aGUgdGFy%0AZ2V0IGRvbSBlbGVtZW50IHRoZSBuZXR3b3JrIHNob3VsZCBiZSBpbml0aWFsaXpl%0AZCB0bwogICovCiAgdmFyIG4zID0gZnVuY3Rpb24ob3B0aW9ucywgdGFyZ2V0KSB7%0ACiAgICB2YXIgbjMgPSB0aGlzOwogICAgCiAgICB2YXIgZ2xvYmFscyA9IHsKICAg%0AICAgc3ZnOiBudWxsLAogICAgICB4U2NhbGU6IG51bGwsCiAgICAgIHlTY2FsZTog%0AbnVsbCwKICAgICAgbWluVGltZTogbnVsbCwKICAgICAgaW50ZXJ2YWw6IG51bGws%0ACiAgICAgIG1heFRpbWU6IG51bGwsCiAgICAgIGFuaW1hdGU6IG51bGwsCiAgICAg%0AIGJhc2VOb2RlU2l6ZTogbnVsbCwKICAgICAgY3VyclRpbWU6IDAsCiAgICAgIGdy%0AYXBoOiBudWxsLAogICAgICB0aW1lSW5kZXg6bnVsbCwKICAgICAgZG9tVGFyZ2V0%0AOm51bGwsCiAgICAgIHNsaWRlcjpudWxsLAogICAgICBub2RlQ29vcmRzOiB7fSwK%0AICAgICAgb3B0aW9uczoge30KICAgIAp9CiAgICAvL2luaXRpYWxpemUgY2xhc3Mg%0AZ2xvYmFscwogICAgJC5leHRlbmQodHJ1ZSwgbjMsIGdsb2JhbHMpOwoKICAgIC8v%0AcmVwbGFjZSBkZWZhdWx0cyB3aXRoIHVzZXItc3BlY2lmaWVkIG9wdGlvbnMKICAg%0AICQuZXh0ZW5kKHRydWUsIG4zLm9wdGlvbnMsIGRlZmF1bHRfb3B0aW9ucyk7CiAg%0AICAkLmV4dGVuZCh0cnVlLCBuMy5vcHRpb25zLCBvcHRpb25zKTsKCiAgICBpZiAo%0AIXRhcmdldCkgewogICAgICB0YXJnZXQgPSBkMy5zZWxlY3QoJ2JvZHknKS5hcHBl%0AbmQoJ2RpdicpLnN0eWxlKHt3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJ30p%0ALm5vZGUoKTsKICAgICAgZDMuc2VsZWN0QWxsKCdodG1sLCBib2R5JykuY2xhc3Nl%0AZCh7J25kdHYtZnVsbHNjcmVlbic6IHRydWV9KQogICAgfQogICAgbjMuZG9tVGFy%0AZ2V0ID0gZDMuc2VsZWN0KHRhcmdldCk7CiAgICBuMy5kb21UYXJnZXQuY2xhc3Nl%0AZCh7J25kdHYtZDMtY29udGFpbmVyJzogdHJ1ZX0pOwogICAgbjMuU1ZHU2V0dXAo%0AbjMuZG9tVGFyZ2V0KTsKICAgIGlmIChuMy5vcHRpb25zLnBsYXlDb250cm9scyB8%0AfCBuMy5vcHRpb25zLnNsaWRlcikgewogICAgICBuMy5kb21UYXJnZXQuYXBwZW5k%0AKCdkaXYnKS5hdHRyKCdjbGFzcycsICdjb250cm9scycpOwogICAgfQogICAgaWYg%0AKG4zLm9wdGlvbnMuZGF0YUNob29zZXIpIHsgbjMuY3JlYXRlRGF0YUNob29zZXIo%0AKTsgfQogICAgaWYgKG4zLm9wdGlvbnMucGxheUNvbnRyb2xzKSB7IG4zLmNyZWF0%0AZVBsYXlDb250cm9scygpOyB9CiAgICBpZiAobjMub3B0aW9ucy5zbGlkZXIpIHsg%0AbjMuY3JlYXRlU2xpZGVyQ29udHJvbCgpOyB9CiAgICBpZiAobjMub3B0aW9ucy5t%0AZW51KSB7IG4zLmNyZWF0ZU1lbnUoKTsgfQoKCiAgICBuMy50b29sdGlwID0gbjMu%0AZG9tVGFyZ2V0LnNlbGVjdCgnLmdyYXBoJykuYXBwZW5kKCdkaXYnKS5hdHRyKCdj%0AbGFzcycsICd0b29sdGlwJyk7CiAgICBuMy5mcmFtZUluZm9EaXYgPSBuMy5kb21U%0AYXJnZXQuc2VsZWN0KCcuZ3JhcGgnKS5hcHBlbmQoJ2RpdicpLmF0dHIoJ2NsYXNz%0AJywgJ2ZyYW1lSW5mbycpCiAgICBpZiAobjMub3B0aW9ucy5kZWJ1Z0ZyYW1lSW5m%0AbykgeyBuMy5mcmFtZUluZm9EaXYuc3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKTsg%0AfQogICAgaWYobjMub3B0aW9ucy5ncmFwaERhdGEpIHsgbjMubG9hZERhdGEobjMu%0Ab3B0aW9ucy5ncmFwaERhdGEpOyB9CiAgfQoKICAvKioKICAqIEluaXRpYWxpemUg%0AdGhlIFNWRyBlbGVtZW50IGFuZCByZWxhdGVkIERPTSBlbGVtZW50cyBhbmQgbGlz%0AdGVuZXJzCiAgKiBAcGFyYW0ge0QzU2VsZWN0aW9ufSAtIERPTSBlbGVtZW50IHRv%0AIGluc2VydCBzdmcgaW50bwogICovCiAgbjMucHJvdG90eXBlLlNWR1NldHVwID0g%0AZnVuY3Rpb24oZG9tVGFyZ2V0KSB7CiAgICB2YXIgbjMgPSB0aGlzOwoKICAgICQo%0AZG9tVGFyZ2V0KS5yZXNpemUoZnVuY3Rpb24obikgeyAKICAgICAgbjMucmVzaXpl%0AR3JhcGgobik7CiAgICB9KTsKICAgICQod2luZG93KS5yZXNpemUoZnVuY3Rpb24o%0AbikgeyAKICAgICAgbjMucmVzaXplR3JhcGgobik7CiAgICB9KTsKIAogICAgZG9t%0AVGFyZ2V0CiAgICAgIC5hcHBlbmQoJ2RpdicpLmF0dHIoJ2NsYXNzJywgJ2dyYXBo%0AJykKICAgICAgLmFwcGVuZCgic3ZnOnN2ZyIpCiAgICAgIC5hcHBlbmQoImRlZnMi%0AKQoKICAgIHZhciBzdmcgPSBkb21UYXJnZXQuc2VsZWN0KCdzdmcnKQogICAgICAu%0AYXBwZW5kKCdnJykKCiAgICB2YXIgZHJhZ0V2ZW50OwogICAgdmFyIHJlY3QgPSBz%0AdmcuYXBwZW5kKCJyZWN0IikKICAgICAgLmF0dHIoJ2NsYXNzJywgJ2JhY2tncm91%0AbmQnKQogICAgICAuc3R5bGUoImZpbGwiLCAibm9uZSIpCiAgICAgIC5zdHlsZSgi%0AcG9pbnRlci1ldmVudHMiLCAiYWxsIikKICAgICAgLm9uKCdtb3VzZWRvd24nLCBm%0AdW5jdGlvbigpIHsgCiAgICAgICAgZHJhZ0V2ZW50ID0gZDMuZXZlbnQ7CiAgICAg%0AIH0pCiAgICAgIC5vbignbW91c2V1cCcsIGZ1bmN0aW9uKCkgeyAKICAgICAgICBp%0AZiAoTWF0aC5hYnMoZHJhZ0V2ZW50LnBhZ2VYIC0gZDMuZXZlbnQucGFnZVgpIDwg%0ANSAmJiBNYXRoLmFicyhkcmFnRXZlbnQucGFnZVkgLSBkMy5ldmVudC5wYWdlWSkg%0APCA1KSB7CiAgICAgICAgICBuMy5oaWRlVG9vbHRpcCgpOwogICAgICAgICAgbjMu%0AdW5TZWxlY3ROZXR3b3JrKCk7CiAgICAgICAgfQogICAgICB9KQoKICAgIG4zLmNv%0AbnRhaW5lciA9IHN2Zy5hcHBlbmQoImciKQogICAgICAuYXR0cignY2xhc3MnLCAn%0AY29udGFpbmVyJykKICAgIG4zLmNvbnRhaW5lci5hcHBlbmQoJ2cnKS5hdHRyKCdj%0AbGFzcycsICdlZGdlcycpOwogICAgbjMuY29udGFpbmVyLmFwcGVuZCgnZycpLmF0%0AdHIoJ2NsYXNzJywgJ25vZGVzJyk7CiAgICBuMy5jb250YWluZXIuYXBwZW5kKCdn%0AJykuYXR0cignY2xhc3MnLCAnbGFiZWxzJyk7CiAgICBuMy5jb250YWluZXIuYXBw%0AZW5kKCdyZWN0JykuYXR0cignY2xhc3MnLCAnc2NyZWVuJyk7CiAgICBuMy5jb250%0AYWluZXIuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAnZWRnZXNfc2VsZWN0ZWQn%0AKTsKICAgIG4zLmNvbnRhaW5lci5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsICdu%0Ab2Rlc19zZWxlY3RlZCcpOwogICAgbjMuY29udGFpbmVyLmFwcGVuZCgnZycpLmF0%0AdHIoJ2NsYXNzJywgJ2xhYmVsc19zZWxlY3RlZCcpOwoKICAgIHN2Zy5hcHBlbmQo%0AJ2cnKS5hdHRyKCdjbGFzcycsICdtYWluJykuYXBwZW5kKCd0ZXh0Jyk7CiAgICBz%0AdmcuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAneGxhYicpLmFwcGVuZCgndGV4%0AdCcpOwoKICAgIHN2Zy5vbignbW91c2Vkb3duJywgZnVuY3Rpb24oKSB7CiAgICAg%0AIHN2Zy5jbGFzc2VkKHsnZHJhZ2dpbmcnOiB0cnVlfSkKICAgIH0pCiAgICBzdmcu%0Ab24oJ21vdXNldXAnLCBmdW5jdGlvbigpIHsKICAgICAgc3ZnLmNsYXNzZWQoeydk%0AcmFnZ2luZyc6IGZhbHNlfSkKICAgIH0pCgogICAgbjMuem9vbSA9IGQzLmJlaGF2%0AaW9yLnpvb20oKQogICAgICAuc2NhbGVFeHRlbnQoWy41LCAxMF0pCiAgICAgIC5v%0Abigiem9vbSIsIGZ1bmN0aW9uIHpvb21lZCgpIHsKICAgICAgICBuMy5jb250YWlu%0AZXIuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgiICsgZDMuZXZlbnQudHJh%0AbnNsYXRlICsgIilzY2FsZSgiICsgZDMuZXZlbnQuc2NhbGUgKyAiKSIpOwogICAg%0AICAgIG4zLmN0bSA9IG4zLmNvbnRhaW5lci5ub2RlKCkuZ2V0U2NyZWVuQ1RNKCk7%0ACiAgICAgICAgbjMubW92ZVRvb2x0aXAoKTsKICAgICAgfSkKICAgIHN2Zy5jYWxs%0AKG4zLnpvb20pCiAgfQoKICAvKiogc2V0cyBwb3NpdGlvbmluZyBvbiBzdmcgZWxl%0AbWVudHMgYmFzZWQgb24gY3VycmVudCBET00gY29udGFpbmVyIHNpemUgYW5kIHNl%0AdHMgZGF0YSBzY2FsaW5nIGZhY3RvcnMgYWNjb3JkaW5nbHkgKi8KICBuMy5wcm90%0Ab3R5cGUudXBkYXRlRGltZW5zaW9ucyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIG4z%0AID0gdGhpczsKICAgIHZhciBkaXZfd2lkdGggPSBuMy5kb21UYXJnZXQubm9kZSgp%0ALm9mZnNldFdpZHRoCiAgICB2YXIgZGl2X2hlaWdodCA9IG4zLmRvbVRhcmdldC5u%0Ab2RlKCkub2Zmc2V0SGVpZ2h0IC0gJChuMy5kb21UYXJnZXQuc2VsZWN0KCcuY29u%0AdHJvbHMnKS5ub2RlKCkpLm91dGVySGVpZ2h0KHRydWUpOwoKICAgIHZhciB4bGFi%0AID0gbjMudGltZUluZGV4W24zLmN1cnJUaW1lXS5yZW5kZXJEYXRhLmdyYXBoLnhs%0AYWI7CiAgICB2YXIgbWFpbiA9IG4zLnRpbWVJbmRleFtuMy5jdXJyVGltZV0ucmVu%0AZGVyRGF0YS5ncmFwaC5tYWluOwogICAgdmFyIHhsYWJTaXplID0gcGFyc2VGbG9h%0AdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShuMy5kb21UYXJnZXQuc2VsZWN0KCcu%0AeGxhYicpLm5vZGUoKSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnZm9udC1zaXpl%0AJykpOwogICAgdmFyIG1haW5TaXplID0gcGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29t%0AcHV0ZWRTdHlsZShuMy5kb21UYXJnZXQuc2VsZWN0KCcubWFpbicpLm5vZGUoKSwg%0AbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnZm9udC1zaXplJykpOwogICAgdmFyIG1h%0AaW5NYXJnaW4gPSAwOwogICAgdmFyIHhsYWJNYXJnaW4gPSAwOwoKICAgIGlmICh4%0AbGFiKSB7CiAgICAgIHhsYWJNYXJnaW4gPSB4bGFiU2l6ZSooeGxhYi5sZW5ndGgr%0AMSkqMS4yOwogICAgfSAKICAgIGlmIChtYWluKSB7CiAgICAgIG1haW5NYXJnaW4g%0APSBtYWluU2l6ZSoobWFpbi5sZW5ndGgrMSkqMS4yOwogICAgfSAKICAgIAogICAg%0AdmFyIG1hcmdpbiA9IHsKICAgICAgeDogbjMub3B0aW9ucy5tYXJnaW4ueCwKICAg%0AICAgeTogbjMub3B0aW9ucy5tYXJnaW4ueQogICAgfQogICAgaWYgKGRpdl93aWR0%0AaCA+IGRpdl9oZWlnaHQpIHsgCiAgICAgIG1hcmdpbi54ID0gKGRpdl93aWR0aCAt%0AIGRpdl9oZWlnaHQpLzIKICAgIH0gZWxzZSB7CiAgICAgIG1hcmdpbi55ID0gKGRp%0Adl9oZWlnaHQgLSBkaXZfd2lkdGgpLzIKICAgIH0KCiAgICB2YXIgd2lkdGggPSBk%0AaXZfd2lkdGggLSAobWFyZ2luLngqMik7CiAgICB2YXIgaGVpZ2h0ID0gZGl2X2hl%0AaWdodCAtIChtYXJnaW4ueSoyKTsKCiAgICBuMy5kb21UYXJnZXQuc2VsZWN0QWxs%0AKCcuZ3JhcGg+c3ZnLCAuYmFja2dyb3VuZCwgLnNjcmVlbicpCiAgICAgIC5hdHRy%0AKHsKICAgICAgICB3aWR0aDogd2lkdGggKyBtYXJnaW4ueCAqIDIsCiAgICAgICAg%0AaGVpZ2h0OiBoZWlnaHQgKyBtYXJnaW4ueSAqIDIKICAgICAgfSkKICAgIAogICAg%0ALy9yZXNldCBoZWlnaHQgaW5jbHVkaW5nIG1haW4gJiB4bGFiIGZvciBncmFwaCBj%0Ab250YWluZXIgdHJhbnNsYXRpb24KICAgIGhlaWdodCA9IGhlaWdodCAtIG1haW5N%0AYXJnaW4gLSB4bGFiTWFyZ2luOwoKICAgIG4zLmNvbnRhaW5lci5hdHRyKCJ0cmFu%0Ac2Zvcm0iLCAidHJhbnNsYXRlKCIgKyBtYXJnaW4ueCArICIsIiArIChtYXJnaW4u%0AeSttYWluTWFyZ2luKSArICIpIik7CgogICAgdmFyIGNlbnRlciA9IG1hcmdpbi54%0AICsgd2lkdGgvMjsKICAgIG4zLmRvbVRhcmdldC5zZWxlY3QoJy54bGFiJykuYXR0%0AcigndHJhbnNmb3JtJywgInRyYW5zbGF0ZSgiK2NlbnRlcisiLCIrKGRpdl9oZWln%0AaHQtbWFyZ2luLnkpKyIpIikKICAgIG4zLmRvbVRhcmdldC5zZWxlY3QoJy5tYWlu%0AJykuYXR0cigndHJhbnNmb3JtJywgInRyYW5zbGF0ZSgiK2NlbnRlcisiLCIrKG1h%0Acmdpbi55K21haW5TaXplKSsiKSIpCgogICAgdmFyIHBpeGVsU3BhY2UgPSBoZWln%0AaHQgPiB3aWR0aCA/IHdpZHRoIDogaGVpZ2h0OwogICAgbjMuYmFzZU5vZGVTaXpl%0AID0gcGl4ZWxTcGFjZSAqIG4zLm9wdGlvbnMubm9kZVNpemVGYWN0b3I7CgogICAg%0ALy9zZXQgdGhlIFggYW5kIFkgc2NhbGVzCiAgICBuMy54U2NhbGUgPSBkMy5zY2Fs%0AZS5saW5lYXIoKQogICAgICAuZG9tYWluKFtuMy50aW1lSW5kZXhbMF0ucmVuZGVy%0ARGF0YS5ncmFwaC54bGltWzBdLG4zLnRpbWVJbmRleFswXS5yZW5kZXJEYXRhLmdy%0AYXBoLnhsaW1bMV1dKQogICAgICAucmFuZ2UoWzAsIHBpeGVsU3BhY2VdKTsKCiAg%0AICBuMy55U2NhbGUgPSBkMy5zY2FsZS5saW5lYXIoKQogICAgICAuZG9tYWluKFtu%0AMy50aW1lSW5kZXhbMF0ucmVuZGVyRGF0YS5ncmFwaC55bGltWzBdLG4zLnRpbWVJ%0AbmRleFswXS5yZW5kZXJEYXRhLmdyYXBoLnlsaW1bMV1dKQogICAgICAucmFuZ2Uo%0AW3BpeGVsU3BhY2UsIDBdKTsKCiAgICAvL3Jlc2V0IHpvb20gdHJhbnNsYXRlIGJh%0Ac2VkIG9uIG1hcmdpbnMKICAgIG4zLnpvb20udHJhbnNsYXRlKFttYXJnaW4ueCwg%0AbWFyZ2luLnkrbWFpbk1hcmdpbl0pCgogICAgLy9DYWNoZSBoZWlnaHQgYW5kIG9m%0AZnNldCB0byB1c2UgZm9yIHRvb2x0aXAgbW92ZW1lbnQKICAgIG4zLmhlaWdodCA9%0AIG4zLmRvbVRhcmdldC5zZWxlY3QoJy5ncmFwaCcpLm5vZGUoKS5vZmZzZXRIZWln%0AaHQKICAgIG4zLm9mZnNldCA9ICQobjMuZG9tVGFyZ2V0LnNlbGVjdCgnLmdyYXBo%0AJykubm9kZSgpKS5vZmZzZXQoKTsKICAgIG4zLmN0bSA9IG4zLmNvbnRhaW5lci5u%0Ab2RlKCkuZ2V0U2NyZWVuQ1RNKCk7CiAgfQogIAogIC8qKiBjcmVhdGVzIHRoZSBv%0AcHRpb25hbCBkYXRhQ2hvb3NlciBlbGVtZW50IHRvIGJlIHVzZWQgZm9yIHNsZWN0%0AaW5nIGFtb25nIG11bHRpcGxlIEpTT04gZmlsZXMgZm9yIGRlYnVnZ2luZyAqLwog%0AIG4zLnByb3RvdHlwZS5jcmVhdGVEYXRhQ2hvb3NlciA9IGZ1bmN0aW9uKCkgewog%0AICAgdmFyIG4zID0gdGhpczsKCiAgICB2YXIgZGl2ID0gbjMuZG9tVGFyZ2V0LmFw%0AcGVuZCgnZGl2JykuYXR0cignY2xhc3MnLCAnZGF0YV9jaG9vc2VyX2NvbnRhaW5l%0AcicpCiAgICBkaXYuYXBwZW5kKCdzZWxlY3QnKS5hdHRyKCdjbGFzcycsICdkYXRh%0AX2Nob29zZXInKQogICAgZGl2LmFwcGVuZCgnYScpLmF0dHIoeydjbGFzcyc6ICd2%0AaWRlb19saW5rJywgJ3RhcmdldCc6ICdfYmxhbmsnfSkuaHRtbCgnVmlkZW8nKTsK%0ACiAgICB2YXIgc2V0VmlkTGluayA9IGZ1bmN0aW9uKHVybCkgewogICAgICBkaXYu%0Ac2VsZWN0KCcudmlkZW9fbGluaycpLmF0dHIoJ2hyZWYnLCB1cmwucmVwbGFjZSgn%0ALmpzb24nLCAnLm1wNCcpKQogICAgfQogICAgJC5nZXQobjMub3B0aW9ucy5kYXRh%0AQ2hvb3NlckRpciwgZnVuY3Rpb24oZGF0YSl7CiAgICAgIGRpdi5zZWxlY3QoJy5k%0AYXRhX2Nob29zZXInKS5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7CiAgICAgICAg%0AdmFyIHVybCA9ICQodGhpcykudmFsKCk7CiAgICAgICAgbjMubG9hZERhdGEodXJs%0AKTsKICAgICAgICBzZXRWaWRMaW5rKHVybCkKICAgICAgfSkKICAgICAgdmFyIG1h%0AdGNoZXMgPSBkYXRhLm1hdGNoKC88dGQ+PGEgaHJlZj0iW14iXSoiL2cpOwogICAg%0AICAkLmVhY2gobWF0Y2hlcywgZnVuY3Rpb24oaSwgbSkgewogICAgICAgIHZhciB1%0AcmwgPSBtLm1hdGNoKC9ocmVmPSIoW14iXSopIi8pWzFdOwogICAgICAgIGlmICh1%0AcmwubWF0Y2goLy5qc29uJC8pKSB7CiAgICAgICAgICBkaXYuc2VsZWN0KCcuZGF0%0AYV9jaG9vc2VyJykuYXBwZW5kKCdvcHRpb24nKS5hdHRyKCd2YWx1ZScsIG4zLm9w%0AdGlvbnMuZGF0YUNob29zZXJEaXIrdXJsKS5odG1sKHVybCk7CiAgICAgICAgfQog%0AICAgICAgIGlmIChpID09IDEpIHsKICAgICAgICAgIHNldFZpZExpbmsodXJsKTsK%0AICAgICAgICB9CiAgICAgIH0pCiAgICB9KQogIH0KICAKICAvKiogY3JlYXRlcyB0%0AaGUgb3B0aW9uYWwgbWVudSBlbGVtZW50IHRvIGJlIHVzZWQgZm9yIGNvbnRyb2xs%0AaW5nIHNldHRpbmdzIGFuZCBkaXNwbGF5aW5nICdhYm91dCcgbGluayAqLwogIG4z%0ALnByb3RvdHlwZS5jcmVhdGVNZW51ID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgbjMg%0APSB0aGlzOwogICAgaWYgKGQzLnNlbGVjdCgnI25kdHYtc3ZnLW1lbnUtaWNvbnMn%0AKS5lbXB0eSgpKSB7CiAgICAgICQoJ2JvZHknKS5wcmVwZW5kKAogICAgICAnPHN2%0AZyBpZD0ibmR0di1zdmctbWVudS1pY29ucyIgZGlzcGxheT0ibm9uZSIgdmVyc2lv%0Abj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5z%0AOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTc2%0AIiBoZWlnaHQ9IjMyIiB2aWV3Qm94PSIwIDAgMTc2IDMyIj4nKwogICAgICAnICA8%0AZGVmcz4nKwogICAgICAnICAgIDxnIGlkPSJpY29uLWxpc3QiPjxwYXRoIGQ9Ik0y%0ANS42IDE0LjRoLTE5LjJjLTAuODgzIDAtMS42IDAuNzE3LTEuNiAxLjZzMC43MTcg%0AMS42IDEuNiAxLjZoMTkuMmMwLjg4NSAwIDEuNi0wLjcxNyAxLjYtMS42cy0wLjcx%0ANS0xLjYtMS42LTEuNnpNNi40IDExLjJoMTkuMmMwLjg4NSAwIDEuNi0wLjcxNyAx%0ALjYtMS42cy0wLjcxNS0xLjYtMS42LTEuNmgtMTkuMmMtMC44ODMgMC0xLjYgMC43%0AMTctMS42IDEuNnMwLjcxNyAxLjYgMS42IDEuNnpNMjUuNiAyMC44aC0xOS4yYy0w%0ALjg4MyAwLTEuNiAwLjcxNS0xLjYgMS42czAuNzE3IDEuNiAxLjYgMS42aDE5LjJj%0AMC44ODUgMCAxLjYtMC43MTUgMS42LTEuNnMtMC43MTUtMS42LTEuNi0xLjZ6Ij48%0AL3BhdGg+PC9nPicrCiAgICAgICcgIDwvZGVmcz4nKwogICAgICAnPC9zdmc+Jyk7%0ACiAgICB9CiAgICB2YXIgZGl2ID0gbjMuZG9tVGFyZ2V0LnNlbGVjdCgnLmdyYXBo%0AJykuYXBwZW5kKCdkaXYnKS5hdHRyKCdjbGFzcycsICduZHR2LW1lbnUtY29udGFp%0AbmVyJyk7CiAgICBkaXYuaHRtbCgKICAgICAgIjxkaXYgY2xhc3M9J25kdHYtbWVu%0AdS1pY29uJz4iKwogICAgICAiIDxzdmcgY2xhc3M9J2ljb24gbWVudS1jb250cm9s%0AJyB2aWV3Qm94PScwIDAgMzIgMzInPjx1c2UgeGxpbms6aHJlZj0nI2ljb24tbGlz%0AdCc+PC91c2U+PC9zdmc+IisKICAgICAgIjwvZGl2PiIrCiAgICAgICI8ZGl2IGNs%0AYXNzPSduZHR2LW1lbnUnPjwvZGl2PiIKICAgICkKICAgIHZhciBtZW51ID0gbjMu%0AZG9tVGFyZ2V0LnNlbGVjdCgnLm5kdHYtbWVudScpOwoKICAgIGlmIChuMy5vcHRp%0Ab25zLmR1cmF0aW9uQ29udHJvbCkgeyAKICAgICAgdmFyIGR1cmF0aW9uQ29udHJv%0AbCA9IG1lbnUuYXBwZW5kKCdkaXYnKS5hdHRyKCdjbGFzcycsICdtZW51LWl0ZW0g%0AZHVyYXRpb25Db250cm9sQ29udGFpbmVyJyk7CiAgICAgIGR1cmF0aW9uQ29udHJv%0AbC5hcHBlbmQoJ3NwYW4nKS5hdHRyKCdjbGFzcycsICdtZW51LWxhYmVsJykuaHRt%0AbCgnQW5pbWF0aW9uIER1cmF0aW9uJyk7CiAgICAgIHZhciBkdXJhdGlvblNsaWRl%0AciA9IGQzLnNsaWRlcigpLm1pbigwKS5tYXgoOCkuYXhpcyhuZXcgZDMuc3ZnLmF4%0AaXMoKS50aWNrcyg1KSkudmFsdWUobjMub3B0aW9ucy5hbmltYXRpb25EdXJhdGlv%0Abi8xMDAwKTsKICAgICAgZHVyYXRpb25Db250cm9sLmFwcGVuZCgnZGl2JykuYXR0%0AcignY2xhc3MnLCAnZHVyYXRpb25Db250cm9sJykuY2FsbChkdXJhdGlvblNsaWRl%0AcikKICAgICAgZHVyYXRpb25TbGlkZXIub24oJ3NsaWRlJywgZnVuY3Rpb24oZXZ0%0ALCB2YWx1ZSl7CiAgICAgICAgbjMub3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbiA9%0AIHZhbHVlKjEwMDA7CiAgICAgICAgaWYobjMub3B0aW9ucy5zbGlkZXIpIHsKICAg%0AICAgICAgIG4zLnNsaWRlci5hbmltYXRlKG4zLm9wdGlvbnMuYW5pbWF0aW9uRHVy%0AYXRpb24pCiAgICAgICAgfQogICAgICB9KQogICAgfQoKICAgIG1lbnUuYXBwZW5k%0AKCJkaXYiKS5hdHRyKCdjbGFzcycsICdtZW51LWl0ZW0nKS5odG1sKCI8YSBocmVm%0APSdodHRwczovL2dpdGh1Yi5jb20vbWljaGFsZ20vbmR0di1kMy9ibG9iL21hc3Rl%0Aci9SRUFETUUubWQnIHRhcmdldD0nX2JsYW5rJz5BYm91dCBORFRWLUQzPC9hPjwv%0AZGl2PiIpOwogICAgbjMuZG9tVGFyZ2V0LnNlbGVjdCgnLm5kdHYtbWVudS1pY29u%0AJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICQobWVudS5ub2RlKCkp%0ALmZhZGVUb2dnbGUoMjAwKTsKICAgICAgJCh0aGlzKS50b2dnbGVDbGFzcygnbWVu%0AdS1hY3RpdmUnKQogICAgfSkKICB9CgogIC8qKiBjcmVhdGVzIHRoZSBvcHRpb25h%0AbCBwbGF5IGNvbnRyb2xzIGRpdiB1c2luZyBzdmcgaWNvbnMgYW5kIGRlZmluZXMg%0AdGhlIGF0dGFjaGVkIGV2ZW50cyAqLwogIG4zLnByb3RvdHlwZS5jcmVhdGVQbGF5%0AQ29udHJvbHMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBuMyA9IHRoaXM7CgogICAg%0ALy9kZWZpbmUgU1ZHIGljb25zIHRvIGJlIHVzZWQgaW4gdGhlIHBsYXkgY29udHJv%0AbGxlcgogICAgaWYgKGQzLnNlbGVjdCgnI25kdHYtc3ZnLWljb25zJykuZW1wdHko%0AKSkgewogICAgICAkKCdib2R5JykucHJlcGVuZCgKICAgICAgJzxzdmcgaWQ9Im5k%0AdHYtc3ZnLWljb25zIiBkaXNwbGF5PSJub25lIiB2ZXJzaW9uPSIxLjEiIHhtbG5z%0APSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6%0ALy93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIxNzYiIGhlaWdodD0iMzIi%0AIHZpZXdCb3g9IjAgMCAxNzYgMzIiPicrCiAgICAgICcgIDxkZWZzPicrCiAgICAg%0AICcgICAgPGcgaWQ9Imljb24tcGxheSI+PHBhdGggY2xhc3M9InBhdGgxIiBkPSJN%0AMjYuNzE3IDE1LjE3OWwtMTMuNjk4LTguNDg2Yy0wLjk5OC0wLjY1NC0xLjgxNC0w%0ALjE3MS0xLjgxNCAxLjA3MnYxNi40NzRjMCAxLjI0MyAwLjgxOCAxLjcyNSAxLjgx%0ANCAxLjA3MGwxMy42OTktOC40ODZjMCAwIDAuNDg2LTAuMzQyIDAuNDg2LTAuODIy%0ALTAuMDAyLTAuNDc4LTAuNDg4LTAuODIxLTAuNDg4LTAuODIxeiI+PC9wYXRoPjwv%0AZz4nKwogICAgICAnICAgIDxnIGlkPSJpY29uLXBhdXNlIj48cGF0aCBjbGFzcz0i%0AcGF0aDEiIGQ9Ik0yMS42IDQuOGMtMS41OSAwLTIuODggMC40OS0yLjg4IDIuMDgw%0AdjE4LjI0YzAgMS41OSAxLjI5IDIuMDgwIDIuODggMi4wODBzMi44OC0wLjQ5IDIu%0AODgtMi4wODB2LTE4LjI0YzAtMS41OS0xLjI5LTIuMDgwLTIuODgtMi4wODB6TTEw%0ALjQgNC44Yy0xLjU5IDAtMi44OCAwLjQ5LTIuODggMi4wODB2MTguMjRjMCAxLjU5%0AIDEuMjkgMi4wODAgMi44OCAyLjA4MHMyLjg4LTAuNDkgMi44OC0yLjA4MHYtMTgu%0AMjRjMC0xLjU5LTEuMjktMi4wODAtMi44OC0yLjA4MHoiPjwvcGF0aD48L2c+JysK%0AICAgICAgJyAgICA8ZyBpZD0iaWNvbi1maXJzdCI+PHBhdGggY2xhc3M9InBhdGgx%0AIiBkPSJNMTEuOTc2IDE2YzAgMC40MTMgMC40MTkgMC43MDcgMC40MTkgMC43MDds%0AMTEuNjQgNy4zMWMwLjg2MiAwLjU2NSAxLjU2NSAwLjE0OSAxLjU2NS0wLjkydi0x%0ANC4xOTVjMC0xLjA3MC0wLjcwMi0xLjQ4Ni0xLjU2NS0wLjkyMmwtMTEuNjQgNy4z%0AMTJjMCAwLjAwMi0wLjQxOSAwLjI5NC0wLjQxOSAwLjcwN3pNNi40IDguNTcxdjE0%0ALjg1OGMwIDEuNDIxIDAuOTc5IDEuODU2IDIuNCAxLjg1NnMyLjQtMC40MzUgMi40%0ALTEuODU0di0xNC44NTljMC0xLjQyMi0wLjk3OS0xLjg1OC0yLjQtMS44NThzLTIu%0ANCAwLjQzNy0yLjQgMS44NTh6Ij48L3BhdGg+PC9nPicrCiAgICAgICcgIDwvZGVm%0Acz4nKwogICAgICAnPC9zdmc+Jyk7CiAgICB9CiAgICB2YXIgZGl2ID0gbjMuZG9t%0AVGFyZ2V0LnNlbGVjdCgnLmNvbnRyb2xzJykuYXBwZW5kKCdkaXYnKS5hdHRyKCdj%0AbGFzcycsICdwbGF5LWNvbnRyb2wtY29udGFpbmVyJyk7CiAgICBkaXYuaHRtbCgK%0AICAgICAgIjxkaXYgY2xhc3M9J3N0ZXAtYmFjay1jb250cm9sJz48c3ZnIGNsYXNz%0APSdpY29uJyB3aWR0aD0nMzInIGhlaWdodD0nMzInIHZpZXdCb3g9JzAgMCAzMiAz%0AMic+PHVzZSB4bGluazpocmVmPScjaWNvbi1maXJzdCc+PC91c2U+PC9zdmc+PC9k%0AaXY+IisKICAgICAgIjxkaXYgY2xhc3M9J3BsYXktYmFjay1jb250cm9sJz48c3Zn%0AIGNsYXNzPSdpY29uJyB3aWR0aD0nMzInIGhlaWdodD0nMzInIHZpZXdCb3g9JzAg%0AMCAzMiAzMic+PGcgdHJhbnNmb3JtPSdyb3RhdGUoMTgwLCAxNiwgMTYpJz48dXNl%0AIHhsaW5rOmhyZWY9JyNpY29uLXBsYXknPjwvdXNlPjwvZz48L3N2Zz48L2Rpdj4i%0AKwogICAgICAiPGRpdiBjbGFzcz0ncGF1c2UtY29udHJvbCc+PHN2ZyBjbGFzcz0n%0AaWNvbicgd2lkdGg9JzMyJyBoZWlnaHQ9JzMyJyB2aWV3Qm94PScwIDAgMzIgMzIn%0APjx1c2UgeGxpbms6aHJlZj0nI2ljb24tcGF1c2UnPjwvdXNlPjwvc3ZnPjwvZGl2%0APiIrCiAgICAgICI8ZGl2IGNsYXNzPSdwbGF5LWZvcndhcmQtY29udHJvbCc+PHN2%0AZyBjbGFzcz0naWNvbicgd2lkdGg9JzMyJyBoZWlnaHQ9JzMyJyB2aWV3Qm94PScw%0AIDAgMzIgMzInPjx1c2UgeGxpbms6aHJlZj0nI2ljb24tcGxheSc+PC91c2U+PC9z%0Admc+PC9kaXY+IisKICAgICAgIjxkaXYgY2xhc3M9J3N0ZXAtZm9yd2FyZC1jb250%0Acm9sJz48c3ZnIGNsYXNzPSdpY29uJyB3aWR0aD0nMzInIGhlaWdodD0nMzInIHZp%0AZXdCb3g9JzAgMCAzMiAzMic+PGcgdHJhbnNmb3JtPSdyb3RhdGUoMTgwLCAxNiwg%0AMTYpJz48dXNlIHhsaW5rOmhyZWY9JyNpY29uLWZpcnN0Jz48L3VzZT48L2c+PC9z%0Admc+PC9kaXY+IgogICAgKTsKCiAgICBkaXYuc2VsZWN0KCcuc3RlcC1iYWNrLWNv%0AbnRyb2wnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsgbjMuc3RlcEFuaW1hdGlv%0AbigxKTsgfSk7CiAgICBkaXYuc2VsZWN0KCcucGxheS1iYWNrLWNvbnRyb2wnKS5v%0AbignY2xpY2snLCBmdW5jdGlvbigpIHsgbjMucGxheUFuaW1hdGlvbigxKTsgfSk7%0ACiAgICBkaXYuc2VsZWN0KCcucGF1c2UtY29udHJvbCcpLm9uKCdjbGljaycsIGZ1%0AbmN0aW9uKCkgeyBuMy5lbmRBbmltYXRpb24oKTsgfSk7CiAgICBkaXYuc2VsZWN0%0AKCcucGxheS1mb3J3YXJkLWNvbnRyb2wnKS5vbignY2xpY2snLCBmdW5jdGlvbigp%0AIHsgbjMucGxheUFuaW1hdGlvbigpOyB9KTsKICAgIGRpdi5zZWxlY3QoJy5zdGVw%0ALWZvcndhcmQtY29udHJvbCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgeyBuMy5z%0AdGVwQW5pbWF0aW9uKCk7IH0pOwogIH0KICAKICAvKiogY3JlYXRlcyB0aGUgdGlt%0AZSBzbGlkZXIgY29udHJvbHMgYW5kIGRlZmluZXMgYXR0YWNoZWQgZXZlbnRzICov%0ACiAgbjMucHJvdG90eXBlLmNyZWF0ZVNsaWRlckNvbnRyb2wgPSBmdW5jdGlvbigp%0AIHsKICAgIHZhciBuMyA9IHRoaXM7CiAgICBuMy5kb21UYXJnZXQuc2VsZWN0KCcu%0AY29udHJvbHMnKS5hcHBlbmQoJ2RpdicpLmF0dHIoJ2NsYXNzJywgJ3NsaWRlci1j%0Ab250cm9sLWNvbnRhaW5lcicpLmFwcGVuZCgnZGl2JykuYXR0cignY2xhc3MnLCAn%0Ac2xpZGVyJyk7CiAgfQogCiAgLyoqIGxvYWQgYW5kIHByb2Nlc3MgdGhlIEpTT04g%0AZm9ybWF0dGVkIGRhdGEKICAqIEBwYXJhbSB7dXJsfEpTT059IC0gZWl0aGVyIGEg%0ATkRUVi1nZW5lcmF0ZWQgSlNPTiBvYmplY3QsIG9yIGEgVVJMIHBhdGggdG8gZmls%0AZSBjb250YWluaW5nIEpTT04gZGF0YQogICovCiAgbjMucHJvdG90eXBlLmxvYWRE%0AYXRhID0gZnVuY3Rpb24oZ3JhcGhEYXRhKSB7CiAgICB2YXIgbjMgPSB0aGlzOwog%0AICAgbjMuZW5kQW5pbWF0aW9uKCk7CiAgICBuMy5jdXJyVGltZSA9IDA7CiAgICBu%0AMy5zZWxlY3RlZE5ldHdvcmsgPSBudWxsOwogICAgbjMuc2VsZWN0ZWQgPSBudWxs%0AOwogICAgCiAgICB2YXIgcHJvY2Vzc0RhdGEgPSBmdW5jdGlvbihkYXRhKSB7CiAg%0AICAgIGNvbnNvbGUudGltZSgnbG9hZERhdGEnKTsKICAgICAgbjMuZ3JhcGggPSBk%0AYXRhLm5ldHdvcms7CiAgICAgIG4zLnRpbWVJbmRleCA9IGRhdGEucmVuZGVyOwog%0AICAgICBpZiAobjMub3B0aW9ucy5kYXRhQ2hvb3NlciAmJiAhICQuaXNQbGFpbk9i%0AamVjdChncmFwaERhdGEpKSB7CiAgICAgICAgJChuMy5kb21UYXJnZXQuc2VsZWN0%0AKCcuZGF0YV9jaG9vc2VyJykubm9kZSgpKS52YWwoZ3JhcGhEYXRhKTsKICAgICAg%0AICBuMy5kb21UYXJnZXQuc2VsZWN0KCcudmlkZW9fbGluaycpLmF0dHIoJ2hyZWYn%0ALCBncmFwaERhdGEucmVwbGFjZSgnLmpzb24nLCAnLm1wNCcpKQogICAgICB9CiAg%0AICAgIG4zLmNvbnRhaW5lci5zZWxlY3RBbGwoJy5lZGdlLCAubGFiZWwsIC5ub2Rl%0AJykucmVtb3ZlKCk7CgogICAgICBuMy5ub2RlQ29vcmRzID0ge307CgogICAgICAk%0ALmVhY2gobjMuZ3JhcGgudmFsLCBmdW5jdGlvbihpLCBuKSB7CiAgICAgICAgaWYg%0AKCEgJC5pc0VtcHR5T2JqZWN0KG4pKSB7CiAgICAgICAgICBuLmlkID0gaSsxOwog%0AICAgICAgIH0KICAgICAgICBuMy5ub2RlQ29vcmRzW24uaWRdID0gewogICAgICAg%0AICAgY29vcmQ6IFswLDBdLAogICAgICAgICAgYWN0aXZlOiBmYWxzZSwKICAgICAg%0AICAgIHNpemU6IDAsCiAgICAgICAgICBwb2ludHM6IFtdCiAgICAgICAgfQogICAg%0AICB9KQogICAgICAkLmVhY2gobjMuZ3JhcGgubWVsLCBmdW5jdGlvbihpLCBlKSB7%0ACiAgICAgICAgaWYgKCEgJC5pc0VtcHR5T2JqZWN0KGUpKSB7CiAgICAgICAgICBl%0ALmlkID0gaSsxOwogICAgICAgIH0KICAgICAgfSkKICAgICAgdmFyIHNsaWNlSW5m%0AbyA9IG4zLmdyYXBoLmdhbFsnc2xpY2UucGFyJ107CiAgICAgIAogICAgICBuMy5t%0AaW5UaW1lID0gc2xpY2VJbmZvLnN0YXJ0WzBdOwogICAgICBuMy5tYXhUaW1lID0g%0Ac2xpY2VJbmZvLmVuZFswXTsKICAgICAgbjMuaW50ZXJ2YWwgPSBzbGljZUluZm8u%0AaW50ZXJ2YWxbMF07CiAgICAgIHZhciB2YWxJbmRleCA9IHt9OwogICAgICAkLmVh%0AY2gobjMudGltZUluZGV4LCBmdW5jdGlvbihpLCB0KXsKICAgICAgICB2YWxJbmRl%0AeFt0LnN0YXJ0XSA9IGk7CiAgICAgICAgdC5yZW5kZXJEYXRhID0gbjMuZ2VuZXJh%0AdGVTbGljZVJlbmRlckRhdGEoaSk7CiAgICAgICAgZGVsZXRlIHQuZGF0YTsgLy9y%0AZW1vdmUgcmVkdW5kYW50IGRhdGEgdGhhdCB3ZSd2ZSBzdG9yZWQgaW4gcmVuZGVy%0ARGF0YQogICAgICB9KSAgICAgIAoKICAgICAgbjMudXBkYXRlRGltZW5zaW9ucygp%0AOwoKICAgICAgaWYobjMub3B0aW9ucy5zbGlkZXIpIHsKICAgICAgICB2YXIgc2xp%0AZGVyRGl2ID0gbjMuZG9tVGFyZ2V0LnNlbGVjdCgnLnNsaWRlcicpOwoKICAgICAg%0AICBzbGlkZXJEaXYuaHRtbCgnJyk7CgogICAgICAgIG4zLnNsaWRlciA9IGQzLnNs%0AaWRlcigpLmF4aXModHJ1ZSkuc3RlcChuMy5pbnRlcnZhbCk7CiAgICAgICAgbjMu%0Ac2xpZGVyLm1hcmdpbigzNSkKICAgICAgICBuMy5zbGlkZXIubWluKG4zLm1pblRp%0AbWUpCiAgICAgICAgbjMuc2xpZGVyLm1heChuMy5tYXhUaW1lK3NsaWNlSW5mb1sn%0AYWdncmVnYXRlLmR1ciddWzBdKQogICAgICAgIG4zLnNsaWRlci5hbmltYXRlKG4z%0ALm9wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb24pCiAgICAgICAgbjMuc2xpZGVyLnZh%0AbHVlKG4zLm1pblRpbWUpCiAgICAgICAgbjMuc2xpZGVyLmludGVydmFsKHNsaWNl%0ASW5mb1snYWdncmVnYXRlLmR1ciddWzBdKQogICAgICAgIG4zLnNsaWRlci5vbign%0Ac2xpZGUnLCBmdW5jdGlvbihleHQsIHZhbHVlKSB7CiAgICAgICAgICAvL0NoZWNr%0AIHRvIHNlZSBpZiBldmVudCBvcmlnaW5hdGVkIGZyb20gc2xpZGVyIGNvbnRyb2wg%0Ab3IgZWxzZXdoZXJlCiAgICAgICAgICB2YXIgZXZlbnQgPSBkMy5ldmVudDsKICAg%0AICAgICAgIGlmIChldmVudC50eXBlID09ICdkcmFnJyB8fCBkMy5zZWxlY3QoZXZl%0AbnQuY3VycmVudFRhcmdldCkuY2xhc3NlZCgnZDMtc2xpZGVyJykpIHsKICAgICAg%0AICAgICAgbjMuZW5kQW5pbWF0aW9uKCk7CiAgICAgICAgICAgIG4zLmFuaW1hdGVH%0AcmFwaChuMy5jdXJyVGltZSwgdmFsSW5kZXhbdmFsdWVdLCB0cnVlKTsKICAgICAg%0AICAgIH0KICAgICAgICB9KQogICAgICAgIAogICAgICAgIG4zLnNsaWRlci5vbign%0Ac2xpZGVlbmQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgIG4zLnNsaWRlci5hbmlt%0AYXRlKG4zLm9wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb24pOwogICAgICAgIH0pCiAg%0AICAgICAgc2xpZGVyRGl2Lm9uKCdtb3VzZWRvd24nLCBmdW5jdGlvbihlKSB7IAog%0AICAgICAgICAgbjMuc2xpZGVyLmFuaW1hdGUoMCk7CiAgICAgICAgfSkKCiAgICAg%0AICAgc2xpZGVyRGl2LmNhbGwobjMuc2xpZGVyKTsKICAgICAgfQogICAgICBjb25z%0Ab2xlLnRpbWVFbmQoJ2xvYWREYXRhJyk7CiAgICAgIGlmIChuMy5vcHRpb25zLmFu%0AaW1hdGVPbkxvYWQpIHsKICAgICAgICBuMy5wbGF5QW5pbWF0aW9uKCk7CiAgICAg%0AIH0gZWxzZSB7CiAgICAgICAgbjMudXBkYXRlR3JhcGgobjMub3B0aW9ucy5hbmlt%0AYXRpb25EdXJhdGlvbik7CiAgICAgIH0KICAgIH07CgogICAgaWYoJC5pc1BsYWlu%0AT2JqZWN0KGdyYXBoRGF0YSkpIHsKICAgICAgcHJvY2Vzc0RhdGEoZ3JhcGhEYXRh%0AKQogICAgfSBlbHNlIHsKICAgICAgJC5nZXRKU09OKGdyYXBoRGF0YSwgZnVuY3Rp%0Ab24oZGF0YSkgewogICAgICAgIHByb2Nlc3NEYXRhKGRhdGEpOwogICAgICB9KTsK%0AICAgIH0KICB9CgogIHZhciBjb2xvciA9IGQzLnNjYWxlLmNhdGVnb3J5MjAoKTsK%0ACiAgLyoqIEZvciBhIGdpdmVuIHRpbWUgc2xpY2UsIHByb2Nlc3MgdGltZUluZGV4%0AIGRhdGEgYW5kIGdlbmVyYXRlIHJlbmRlciBkYXRhLCBmaWxsaW5nIGluIGRlZmF1%0AbHRzIGFzIG5lY2Vzc2FyeQogICogQHBhcmFtIHtpbnRlZ2VyfSAtIHRoZSB0aW1l%0AIGluZGV4IHRvIHByb2Nlc3MKICAqIEBwcml2YXRlCiAgKi8KICBuMy5wcm90b3R5%0AcGUuZ2VuZXJhdGVTbGljZVJlbmRlckRhdGEgPSBmdW5jdGlvbih0aW1lKSB7CiAg%0AICB2YXIgbjMgPSB0aGlzOwoKICAgIHZhciBzbGljZVJlbmRlckRhdGEgPSB7CiAg%0AICAgIGdyYXBoOiB7fSwKICAgICAgbm9kZToge30sCiAgICAgIGVkZ2U6IHt9CiAg%0AICB9OwoKICAgIHZhciBkYXRhID0gbjMudGltZUluZGV4W3RpbWVdLmRhdGE7Cgog%0AICAgJC5lYWNoKFsnZ3JhcGgnLCAnbm9kZScsICdlZGdlJ10sIGZ1bmN0aW9uKGks%0AIHR5cGUpIHsKICAgICAgdmFyIHNvdXJjZUxpc3QgPSBbXTsKICAgICAgaWYgKHR5%0AcGUgPT0gJ2dyYXBoJykgewogICAgICAgIHNvdXJjZUxpc3QgPSBbbjMuZ3JhcGgu%0AZ2FsXTsKICAgICAgfSBlbHNlIGlmICh0eXBlID09ICdub2RlJykgewogICAgICAg%0AIHNvdXJjZUxpc3QgPSBuMy5ncmFwaC52YWw7CiAgICAgIH0gZWxzZSB7CiAgICAg%0AICAgc291cmNlTGlzdCA9IG4zLmdyYXBoLm1lbDsKICAgICAgfQoKICAgICAgJC5l%0AYWNoKHNvdXJjZUxpc3QsIGZ1bmN0aW9uKGksIGl0ZW0pIHsKICAgICAgICB2YXIg%0AaWQgPTA7CiAgICAgICAgdmFyIHByb3BlcnR5SW5kZXg7CiAgICAgICAgdmFyIGl0%0AZW1Qcm9wZXJ0aWVzID0ge307CgogICAgICAgIGlmICh0eXBlICE9ICdncmFwaCcp%0AIHsKICAgICAgICAgIGlkID0gaXRlbS5pZDsKICAgICAgICAgIHByb3BlcnR5SW5k%0AZXggPSBkYXRhLmFjdGl2ZVt0eXBlKydzJ11baWRdOwogICAgICAgIH0KCiAgICAg%0AICAgaWYgKHR5cGUgPT0gJ2dyYXBoJyB8fCBwcm9wZXJ0eUluZGV4ICE9PSB1bmRl%0AZmluZWQpIHsKICAgICAgICAgIGl0ZW1Qcm9wZXJ0aWVzLmlkID0gaWQ7CiAgICAg%0AICAgICAkLmVhY2gobmR0dlByb3BlcnRpZXNbdHlwZV0sIGZ1bmN0aW9uKHByb3Bl%0AcnR5LCBkZWYpIHsKICAgICAgICAgICAgdmFyIGxvb2t1cCA9IHByb3BlcnR5SW5k%0AZXg7CiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRlZjsKCiAgICAgICAgICAgIC8v%0ASWYgdGhlIHByb3BlcnR5IGxpc3QgaGFzIG9ubHkgb25lIHZhbHVlLCB3ZSBhcHBs%0AeSBpdCB0byBhbGwgaXRlbXMKICAgICAgICAgICAgaWYodHlwZW9mIGRhdGFbcHJv%0AcGVydHldICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhW3Byb3BlcnR5XS5sZW5ndGgg%0APT0gMSkgewogICAgICAgICAgICAgIGxvb2t1cCA9IDA7CiAgICAgICAgICAgIH0K%0AICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW3Byb3BlcnR5XSAhPT0gJ3VuZGVm%0AaW5lZCcgJiYgZGF0YVtwcm9wZXJ0eV1bbG9va3VwXSAhPT0gdW5kZWZpbmVkKSB7%0ACiAgICAgICAgICAgICAgdmFsdWUgPSBkYXRhW3Byb3BlcnR5XVtsb29rdXBdOwog%0AICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAocHJvcGVydHkgPT0gJ21haW4nIHx8%0AIHByb3BlcnR5ID09ICd4bGFiJykpIHsKICAgICAgICAgICAgICAgIHZhbHVlID0g%0AdmFsdWUuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgICAgfSBlbHNlIGlmICghIHZh%0AbHVlICYmIHByb3BlcnR5ID09ICdjb29yZCcpIHsKICAgICAgICAgICAgICAgIGNv%0AbnNvbGUubG9nKCdtaXNzaW5nIGNvb3JkaW5hdGVzIGZvciBub2RlICcraWQrICcg%0AYXQgdGltZSAnK3RpbWUrJyAoJytuMy50aW1lSW5kZXhbdGltZV0uc3RhcnQrJy0n%0AK24zLnRpbWVJbmRleFt0aW1lXS5lbmQrJyknKTsKICAgICAgICAgICAgICB9CiAg%0AICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAnZ3JhcGgnICYmIHR5cGVvZiBk%0AYXRhW3Byb3BlcnR5XSAhPT0gJ3VuZGVmaW5lZCcpIHsgLy9ncmFwaCBwcm9wZXJ0%0AaWVzIGdldCBhcHBsaWVkIGRpcmVjdGx5CiAgICAgICAgICAgICAgdmFsdWUgPSBk%0AYXRhW3Byb3BlcnR5XTsKICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eSA9%0APSAnbGFiZWwnICYmIHNsaWNlUmVuZGVyRGF0YS5ncmFwaC5kaXNwbGF5bGFiZWxz%0AKSB7CiAgICAgICAgICAgICAgdmFsdWUgPSBpZDsKICAgICAgICAgICAgfQogICAg%0AICAgICAgICBpZiAodmFsdWUgJiYgJC50eXBlKHZhbHVlKSA9PT0gJ3N0cmluZycg%0AJiYgdmFsdWUubWF0Y2goJ3JnYmEnKSkgewogICAgICAgICAgICAgIHZhciByZ2Jh%0AID0gdmFsdWUubWF0Y2goL15yZ2JhXCgoLiopLCA/KC4qKVwpJC8pOwogICAgICAg%0AICAgICAgIGlmIChyZ2JhKSB7CiAgICAgICAgICAgICAgICB2YWx1ZSA9ICJyZ2Io%0AIityZ2JhWzFdKyIpIjsKICAgICAgICAgICAgICAgIHZhciBvcGFjaXR5UHJvcCA9%0AIHByb3BlcnR5KyIuc3Ryb2tlLW9wYWNpdHkiOwogICAgICAgICAgICAgICAgaWYg%0AKHByb3BlcnR5ID09ICd2ZXJ0ZXguY29sJyB8fCBwcm9wZXJ0eSA9PSAnYmcnIHx8%0AIHByb3BlcnR5ID09ICdsYWJlbC5jb2wnKSB7CiAgICAgICAgICAgICAgICAgIG9w%0AYWNpdHlQcm9wID0gcHJvcGVydHkrIi5maWxsLW9wYWNpdHkiOwogICAgICAgICAg%0AICAgICAgfQogICAgICAgICAgICAgICAgaXRlbVByb3BlcnRpZXNbb3BhY2l0eVBy%0Ab3BdID0gcmdiYVsyXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAg%0AICAgICAgICAgLy8gaWYgKHByb3BlcnR5ID09ICdlZGdlLmx3ZCcpIHsKICAgICAg%0AICAgICAgICAvLyB2YWx1ZSA9IGlkKjAuMjsKICAgICAgICAgICAgLy8gfQogICAg%0AICAgICAgICAvLyBpZiAocHJvcGVydHkgPT0gJ2VkZ2UuY29sJyB8fCBwcm9wZXJ0%0AeSA9PSAndmVydGV4LmNvbCcgfHwgcHJvcGVydHkgPT0gJ2xhYmVsLmNvbCcpIHsK%0AICAgICAgICAgICAgLy8gICB2YWx1ZSA9IHR5cGUgPT0gJ2VkZ2UnID8gY29sb3Io%0AdGltZSkgOiBjb2xvcih0aW1lKzEpOwogICAgICAgICAgICAvLyB9CiAgICAgICAg%0AICAgIGl0ZW1Qcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IHZhbHVlOwogICAgICAgICAg%0AfSkKCiAgICAgICAgICBpZiAodHlwZSA9PSAnZWRnZScpIHsKICAgICAgICAgICAg%0AJC5lYWNoKFsnaW5sJywgJ291dGwnXSwgZnVuY3Rpb24oaSwgZGlyZWN0aW9uKSB7%0ACiAgICAgICAgICAgICAgdmFyIG90aGVyZGlyID0gZGlyZWN0aW9uID09ICdpbmwn%0AID8gJ291dGwnIDogJ2lubCc7CiAgICAgICAgICAgICAgaXRlbVByb3BlcnRpZXNb%0AZGlyZWN0aW9uXSA9IHsKICAgICAgICAgICAgICAgIGlkOiBpdGVtW2RpcmVjdGlv%0Abl1bMF0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc2xpY2VSZW5kZXJE%0AYXRhLm5vZGVbaXRlbVtkaXJlY3Rpb25dWzBdXS5saW5rc1tpdGVtW290aGVyZGly%0AXVswXV0gPSBpZDsKICAgICAgICAgICAgfSk7ICAgICAgCiAgICAgICAgICB9IGVs%0Ac2UgaWYgKHR5cGUgPT0gJ25vZGUnKSB7CiAgICAgICAgICAgIGl0ZW1Qcm9wZXJ0%0AaWVzLmxpbmtzID0ge307CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZSA9%0APSAnZ3JhcGgnKSB7CiAgICAgICAgICAgIHNsaWNlUmVuZGVyRGF0YVt0eXBlXSA9%0AIGl0ZW1Qcm9wZXJ0aWVzOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg%0Ac2xpY2VSZW5kZXJEYXRhW3R5cGVdW2lkXSA9IGl0ZW1Qcm9wZXJ0aWVzOwogICAg%0AICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAnbm9kZScpIHsKICAg%0AICAgICAgIG4zLm5vZGVDb29yZHNbaWRdLmFjdGl2ZSA9IGZhbHNlOwogICAgICAg%0AIH0KICAgICAgfSkKICAgIH0pCiAgICByZXR1cm4gc2xpY2VSZW5kZXJEYXRhOwog%0AIH0KCiAgLyoqIHVwZGF0ZXMgcmVuZGVyZGF0YSBub2RlIGNvb3JkaW5hdGVzIGJh%0Ac2VkIG9uIGN1cnJlbnQgc3RhdGUgb2YgZ3JhcGgsIGFuZCB1cGRhdGVzIG5vZGUg%0Ac3RhdGUgdHJhY2tlcgogICogQHBhcmFtIHtpbnRlZ2VyfSAtIHRoZSB0aW1lIGlu%0AZGV4IHRvIHByb2Nlc3MKICAqIEBwcml2YXRlCiAgKi8KICBuMy5wcm90b3R5cGUu%0AdXBkYXRlU2xpY2VSZW5kZXJEYXRhID0gZnVuY3Rpb24odGltZSkgewogICAgdmFy%0AIG4zID0gdGhpczsKCiAgICB2YXIgcHJldk5vZGVDb29yZHMgPSAkLmV4dGVuZCh7%0AfSwgbjMubm9kZUNvb3Jkcyk7CiAgICB2YXIgZGF0YSA9IG4zLnRpbWVJbmRleFt0%0AaW1lXS5yZW5kZXJEYXRhOwogICAgCiAgICAkLmVhY2gobjMubm9kZUNvb3Jkcywg%0AZnVuY3Rpb24oaWQsIG5vZGVDb29yZCkgewogICAgICB2YXIgbm9kZSA9IGRhdGEu%0Abm9kZVtpZF07CiAgICAgIGlmIChub2RlKSB7CiAgICAgICAgaWYgKCFub2RlLmNv%0Ab3JkKSB7CiAgICAgICAgICBub2RlLnJlbmRlckNvb3JkID0gbm9kZUNvb3JkLmNv%0Ab3JkOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBub2RlLnJlbmRlckNvb3Jk%0AID0gbm9kZS5jb29yZDsKICAgICAgICB9CiAgICAgICAgbjMubm9kZUNvb3Jkc1tp%0AZF0gPSB7CiAgICAgICAgICBjb29yZDogbm9kZS5yZW5kZXJDb29yZCwKICAgICAg%0AICAgIGFjdGl2ZTogdHJ1ZSwKICAgICAgICAgIHNpemU6IG5vZGVbJ3ZlcnRleC5j%0AZXgnXSwKICAgICAgICAgIHByZXZQb2ludHM6IHByZXZOb2RlQ29vcmRzW2lkXS5w%0Ab2ludHMsCiAgICAgICAgICAvL0ZJWE1FIC0gdGhpcyBjb3VsZCBicmVhayBpZiBh%0AIG5vZGUgaXMgZXZlciBjZW50ZXJlZCBhdCAwLDAKICAgICAgICAgIHByZXZDb29y%0AZDogcHJldk5vZGVDb29yZHNbaWRdLmNvb3JkWzBdICYmIHByZXZOb2RlQ29vcmRz%0AW2lkXS5jb29yZFsxXSA/IHByZXZOb2RlQ29vcmRzW2lkXS5jb29yZCA6IG51bGwK%0AICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbjMubm9kZUNvb3Jkc1tp%0AZF0uYWN0aXZlID0gZmFsc2U7CiAgICAgIH0KICAgIH0pOwogICAgJC5lYWNoKGRh%0AdGEuZWRnZSwgZnVuY3Rpb24oaWQsIGVkZ2UpewogICAgICAkLmVhY2goWydpbmwn%0ALCAnb3V0bCddLCBmdW5jdGlvbihpLCBkaXJlY3Rpb24pewogICAgICAgIHZhciBu%0Ab2RlaWQgPSBlZGdlW2RpcmVjdGlvbl0uaWQ7CiAgICAgICAgdmFyIHByZXZDb29y%0AZCA9IHByZXZOb2RlQ29vcmRzW25vZGVpZF07CiAgICAgICAgdmFyIGNvb3JkcyA9%0AIG4zLm5vZGVDb29yZHNbbm9kZWlkXSB8fCBwcmV2Q29vcmQ7CiAgICAgICAgZWRn%0AZVtkaXJlY3Rpb25dID0gewogICAgICAgICAgaWQ6IG5vZGVpZCwKICAgICAgICAg%0AIGNvb3JkczogY29vcmRzLAogICAgICAgICAgcHJldlBvaW50czpwcmV2Q29vcmQu%0AcG9pbnRzLAogICAgICAgICAgLy9JZiB0aGUgbm9kZSBpcyBuZXdseSBhY3RpdmUs%0AIHVzZSB0aGUgY3VycmVudCBjb29yZGluYXRlcyBmb3IgdGhlIHN0YXJ0IHZhbHVl%0AcwogICAgICAgICAgc3RhcnRDb29yZHM6ICEgcHJldkNvb3JkLmFjdGl2ZSA/IGNv%0Ab3JkcyA6IHByZXZDb29yZAogICAgICAgIH0KICAgICAgfSkKICAgIH0pCiAgICBy%0AZXR1cm4gZGF0YTsKICB9CgogIC8qKiBjcmVhdGUgYSBwYXRoIGRlc2NyaXB0aW9u%0AcyBvbiB0aGUgZ2l2ZW4gZGF0YSBzZWxlY3Rpb24KICAqIEBwYXJhbSB7b2JqZWN0%0AfSAtIHRoZSBEMyBkYXRhIHNlbGVjdGlvbgogICogQHBhcmFtIHtORFRWX0QzfQog%0AICogQHBhcmFtIHtib29sZWFufSAtIElmIHRydWUsIHBvc2l0aW9ucyBlbmQgb2Yg%0AbGluZSBvZmZzZXQgb2Ygbm9kZSByYWRpdXMgdG8gYWNjb21vZGF0ZSBhcnJvd2hl%0AYWQgCiAgKiBAcGFyYW0ge2Jvb2xlYW59IC0gSWYgdHJ1ZSwgZHJhd3MgcGF0aCB1%0Ac2luZyBjdXJyZW50IG5vZGUgcG9zaXRpb25zIChiZWZvcmUgYW5pbWF0aW9uIGJl%0AZ2lucykKICAqIEBwcml2YXRlCiAgKi8KICBuMy5wcm90b3R5cGUuZHJhd0VkZ2Ug%0APSBmdW5jdGlvbihzZWxlY3Rpb24sIG4zLCB1c2VhcnJvd3MsIHN0YXJ0KSB7CiAg%0AICBzZWxlY3Rpb24uYXR0cih7CiAgICAgIGQ6IGZ1bmN0aW9uKGQpIHsKICAgICAg%0AICB2YXIgdHlwZSA9IHN0YXJ0ID8gJ3N0YXJ0Q29vcmRzJyA6ICdjb29yZHMnOwoK%0AICAgICAgICB2YXIgc3RhcnROb2RlID0gZC5vdXRsW3R5cGVdOwogICAgICAgIHZh%0AciBlbmROb2RlID0gZC5pbmxbdHlwZV07CiAgICAgICAgdmFyIHN0YXJ0Q29vcmRz%0AID0gW24zLnhTY2FsZShzdGFydE5vZGUuY29vcmRbMF0pLCBuMy55U2NhbGUoc3Rh%0AcnROb2RlLmNvb3JkWzFdKV07CiAgICAgICAgdmFyIGVuZENvb3JkcyA9IFtuMy54%0AU2NhbGUoZW5kTm9kZS5jb29yZFswXSksIG4zLnlTY2FsZShlbmROb2RlLmNvb3Jk%0AWzFdKV07CgogICAgICAgIGlmKHVzZWFycm93cyB8fCBuZHR2UHJvcGVydGllcy5n%0AcmFwaC5lZGdlT2Zmc2V0KSB7CiAgICAgICAgICB2YXIgYXJyb3dPZmZzZXQgPSB1%0Ac2VhcnJvd3MgPyBzY2FsZUFycm93aGVhZHMoZCkqZFsnZWRnZS5sd2QnXSA6IDA7%0ACiAgICAgICAgICBzdGFydENvb3JkcyA9IGZpbmROb2RlSW50ZXJzZWN0aW9uKG4z%0ALCBkLm91dGwuaWQsIGVuZENvb3JkcywgbmR0dlByb3BlcnRpZXMuZ3JhcGguZWRn%0AZU9mZnNldCwgc3RhcnQpCiAgICAgICAgICBlbmRDb29yZHMgPSBmaW5kTm9kZUlu%0AdGVyc2VjdGlvbihuMywgZC5pbmwuaWQsIHN0YXJ0Q29vcmRzLCBhcnJvd09mZnNl%0AdCtuZHR2UHJvcGVydGllcy5ncmFwaC5lZGdlT2Zmc2V0LCBzdGFydCkKICAgICAg%0AICB9CiAgICAgICAgZFsnY3VycmVudENvb3JkcyddID0gW3N0YXJ0Q29vcmRzLCBl%0AbmRDb29yZHNdOwogICAgICAgIHJldHVybiAnTSAnK3N0YXJ0Q29vcmRzWzBdLnRv%0ARml4ZWQoMSkrJyAnK3N0YXJ0Q29vcmRzWzFdLnRvRml4ZWQoMSkrJyBMICcrZW5k%0AQ29vcmRzWzBdLnRvRml4ZWQoMSkrJyAnK2VuZENvb3Jkc1sxXS50b0ZpeGVkKDEp%0AOyAgICAgCiAgICAgIH0KICAgIH0pCiAgfQoKICAvKiogaW5pdGlhbGl6ZXMgYSBE%0AMyBsaW5lIGRyYXdpbmcgZnVuY3Rpb24KICAqIEBwcml2YXRlICovCiAgdmFyIGRy%0AYXdMaW5lID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gZDMuc3ZnLmxpbmUoKQog%0AICAgICAueChmdW5jdGlvbihkKXtyZXR1cm4gZFswXTt9KQogICAgICAueShmdW5j%0AdGlvbihkKXtyZXR1cm4gZFsxXTt9KQogIH0KICAKICAvKiogb2Zmc2V0IGEgbGlu%0AZSBiZXR3ZWVuIHR3byBnaXZlbiBwb2ludHMgYnkgdGhlIHNwZWNpZmllZCBhbW91%0AbnQuIHJldHVybnMgdGhlIG5ldyB0YXJnZXQgcG9pbnQKICAqIEBwYXJhbSB7cG9p%0AbnR9IC0gdGhlIG9yaWdpbiBwb2ludAogICogQHBhcmFtIHtwb2ludH0gLSB0aGUg%0AdGFyZ2V0IHBvaW50CiAgKiBAcGFyYW0ge251bWJlcn0gLSB0aGUgb2Zmc2V0IGFt%0Ab3VudCAoYXMgbGVuZ3RoIG9mIGxpbmUpCiAgKiBAcHJpdmF0ZSAqLwogIHZhciBv%0AZmZzZXRMaW5lID0gZnVuY3Rpb24ocG9pbnRBLCBwb2ludEIsIG9mZnNldCkgewog%0AICAgcG9pbnRBID0gcG9pbnRBLm1hcChwYXJzZUZsb2F0KTsKICAgIHBvaW50QiA9%0AIHBvaW50Qi5tYXAocGFyc2VGbG9hdCk7CgogICAgdmFyIHhsZW4gPSBwb2ludEJb%0AMF0gLSBwb2ludEFbMF07CiAgICB2YXIgeWxlbiA9IHBvaW50QlsxXSAtIHBvaW50%0AQVsxXTsKCiAgICAvLyBEZXRlcm1pbmUgaHlwb3RlbnVzZSBsZW5ndGgKICAgIHZh%0AciBobGVuID0gTWF0aC5zcXJ0KE1hdGgucG93KHhsZW4sMikgKyBNYXRoLnBvdyh5%0AbGVuLDIpKTsKCiAgICAvLyBEZXRlcm1pbmUgdGhlIHJhdGlvIGJldHdlZW4gdGhl%0AIHNob3J0ZW5lZCB2YWx1ZSBhbmQgdGhlIGZ1bGwgaHlwb3RlbnVzZS4KICAgIHZh%0AciByYXRpbyA9IChobGVuIC0gb2Zmc2V0KSAvIGhsZW47CgogICAgLy9JZiB0aGUg%0AcmF0aW8gaXMgaW52YWxpZCwganVzdCB1c2UgdGhlIG9yaWdpbmFsIGNvb3JkaW5h%0AdGVzCiAgICBpZiAoJC5pc051bWVyaWMocmF0aW8pKSB7IAogICAgICByZXR1cm4g%0AWwogICAgICAgIHBvaW50QVswXSArICh4bGVuICogcmF0aW8pLAogICAgICAgIHBv%0AaW50QVsxXSArICh5bGVuICogcmF0aW8pCiAgICAgIF07CiAgICB9IGVsc2Ugewog%0AICAgICByZXR1cm4gcG9pbnRCOwogICAgfQogIH0KCiAgdmFyIHNjYWxlQXJyb3do%0AZWFkcyA9IGZ1bmN0aW9uKGQpIHsKICAgIHJldHVybiA2LTIuNSpNYXRoLmF0YW4o%0AZFsnZWRnZS5sd2QnXSouNikKICB9CiAgLyoqIGZpbmQgdGhlIHBvaW50IGF0IHdo%0AaWNoIGEgbGluZSBkcmF3biBmcm9tIGEgcG9pbnQgdG8gdGhlIGNlbnRlciBvZiBh%0AIG5vZGUgaW50ZXJzZWN0cyB3aXRoIHRoZSBub2RlcyBib3JkZXIuCiAgKiByZXR1%0Acm5zIHRoZSBjb29yZGluYXRlLCBvcHRpb25hbGx5IGFwcGx5aW5nIGFuIG9mZnNl%0AdAogICogQHBhcmFtIHtuM30gbjMgLSB0aGUgbjMgb2JqZWN0CiAgKiBAcGFyYW0g%0Ae2lkfSBpZCAtIHRoZSBub2RlIGlkCiAgKiBAcGFyYW0ge3BvaW50fSBwb2ludCAt%0AIHRoZSBwb2ludCBvZiBvcmlnaW4gZm9yIHRoZSBsaW5lCiAgKiBAcGFyYW0geyBu%0AdW1iZXJ9IG9mZnNldCAtIHRoZSBvZmZzZXQgYW1vdW50IHRvIGFwcGx5CiAgKiBA%0AcGFyYW0ge2Jvb2xlYW59IHVzZVByZXYgLSBzaG91bGQgd2UgdXNlIHRoZSBjdXJy%0AZW50IHNsaWNlIGNvb3JkaW5hdGVzLCBvciB0aG9zZSBvZiB0aGUgcHJldmlvdXMg%0Ac3RhdGU/CiAgKiBAcHJpdmF0ZSAqLwogIHZhciBmaW5kTm9kZUludGVyc2VjdGlv%0AbiA9IGZ1bmN0aW9uKG4zLCBpZCwgcG9pbnQsIG9mZnNldCwgdXNlUHJldikgewog%0AICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7CiAgICB2YXIgbm9kZURhdGEgPSBuMy5u%0Ab2RlQ29vcmRzW2lkXTsKICAgIHZhciBjZW50ZXIgPSB1c2VQcmV2ICYmIG5vZGVE%0AYXRhLnByZXZDb29yZCA/IG5vZGVEYXRhLnByZXZDb29yZC5zbGljZSgpIDogbm9k%0AZURhdGEuY29vcmQuc2xpY2UoKTsKICAgIHZhciBpbnRlcnNlY3Rpb24gPSBbCiAg%0AICAgIG4zLnhTY2FsZShjZW50ZXJbMF0pLAogICAgICBuMy55U2NhbGUoY2VudGVy%0AWzFdKQogICAgXTsKCiAgICBpZiAobm9kZURhdGEucG9pbnRzKSB7CiAgICAgIHZh%0AciBwb2ludHMgPSB1c2VQcmV2ICYmIG5vZGVEYXRhLnByZXZQb2ludHMubGVuZ3Ro%0AID8gbm9kZURhdGEucHJldlBvaW50cyA6IG5vZGVEYXRhLnBvaW50czsKICAgICAg%0AaW50ZXJzZWN0aW9uID0gZmluZFBvbHlnb25JbnRlcnNlY3Rpb24ocG9pbnRzLCBp%0AbnRlcnNlY3Rpb24sIHBvaW50KTsKICAgIH0gZWxzZSB7CiAgICAgIG9mZnNldCAr%0APSBub2RlRGF0YS5zaXplICogbjMuYmFzZU5vZGVTaXplOwogICAgfQogICAgcmV0%0AdXJuIG9mZnNldExpbmUocG9pbnQsIGludGVyc2VjdGlvbiwgb2Zmc2V0KTsKICB9%0ACiAKICAvKiogZmluZCB0aGUgcG9pbnQgb2YgaW50ZXNlY3Rpb24gb2YgdHdvIGxp%0AbmVzIC0gYWRhcHRlZCBmcm9tIGh0dHA6Ly9wYXVsYm91cmtlLm5ldC9nZW9tZXRy%0AeS9wb2ludGxpbmVwbGFuZS8gCiAgKiBAcHJpdmF0ZSAqLwogIHZhciBmaW5kTGlu%0AZUludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGEsIGIsIGMsIGQpIHsKICAgIHZhciBk%0AZW5vbWluYXRvciA9IChkWzFdIC0gY1sxXSkgKiAoYlswXSAtIGFbMF0pIC0gKGRb%0AMF0gLSBjWzBdKSAqIChiWzFdIC0gYVsxXSk7CiAgICB2YXIgcHJlY2lzaW9uID0g%0AMTAwMDAwOwoKICAgIHZhciBvbmUgPSAoIChkWzBdIC0gY1swXSkgKiAoYVsxXSAt%0AIGNbMV0pIC0gKGRbMV0gLSBjWzFdKSAqIChhWzBdIC0gY1swXSkgKSAvIGRlbm9t%0AaW5hdG9yOwogICAgdmFyIHR3byA9ICggKGJbMF0gLSBhWzBdKSAqIChhWzFdIC0g%0AY1sxXSkgLSAoYlsxXSAtIGFbMV0pICogKGFbMF0gLSBjWzBdKSApIC8gZGVub21p%0AbmF0b3I7CiAgICBvbmUgPSBNYXRoLnJvdW5kKG9uZSAqIHByZWNpc2lvbikgLyBw%0AcmVjaXNpb247CiAgICB0d28gPSBNYXRoLnJvdW5kKHR3byAqIHByZWNpc2lvbikg%0ALyBwcmVjaXNpb247CgogICAgaWYgKG9uZSA8PSAxICYmIG9uZSA+PSAwICYmIHR3%0AbyA8PSAxICYmIHR3byA+PSAwKSB7CiAgICAgIHZhciB4ID0gYVswXSArIG9uZSAq%0AIChiWzBdIC0gYVswXSk7CiAgICAgIHZhciB5ID0gYVsxXSArIG9uZSAqIChiWzFd%0AIC0gYVsxXSk7IAogICAgICByZXR1cm4gW3gseV07CiAgICB9CiAgfQoKICAvKiog%0AZmluZCB0aGUgcG9pbnQgYXQgd2hpY2ggYSBsaW5lIGludGVyc2VjdCBhIHBvbHln%0Ab24KICAqIEBwcml2YXRlICovCiAgdmFyIGZpbmRQb2x5Z29uSW50ZXJzZWN0aW9u%0AID0gZnVuY3Rpb24ocG9pbnRzLCBjZW50ZXJBLCBjZW50ZXJCKSB7CiAgICB2YXIg%0AaW50ZXJzZWN0aW9uID0gW107CiAgICBmb3IodmFyIGkgPSAwOyBpPHBvaW50cy5s%0AZW5ndGgtMTsgaSsrKSB7CiAgICAgIHZhciByZXMgPSBmaW5kTGluZUludGVyc2Vj%0AdGlvbihwb2ludHNbaV0sIHBvaW50c1tpKzFdLCBjZW50ZXJBLCBjZW50ZXJCKTsK%0AICAgICAgaWYgKHJlcykgewogICAgICAgIGludGVyc2VjdGlvbiA9IHJlczsKICAg%0AICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKCEgaW50ZXJzZWN0aW9u%0ALmxlbmd0aCkgewogICAgICBpbnRlcnNlY3Rpb24gPSBmaW5kTGluZUludGVyc2Vj%0AdGlvbihwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSwgcG9pbnRzWzBdLCBjZW50ZXJB%0ALCBjZW50ZXJCKTsKICAgIH0KICAgIGlmICghIGludGVyc2VjdGlvbikgewogICAg%0AICBjb25zb2xlLmxvZygidW5hYmxlIHRvIGZpbmQgaW50ZXJzZWN0aW9uISB1c2lu%0AZyB0YXJnZXQgcG9pbnQiLCBwb2ludHMsIGNlbnRlckEsIGNlbnRlckIpOwoKICAg%0AICAgLy9kZWJ1Z2dpbmcgY29kZQogICAgICAvLyB2YXIgY29sb3IgPSBkMy5zY2Fs%0AZS5jYXRlZ29yeTEwKCkuZG9tYWluKGQzLnJhbmdlKDAsMTApKShncmFwaDIuY3Vy%0AclRpbWUpOwogICAgICAvLyBkMy5zZWxlY3QoJy5jb250YWluZXInKS5hcHBlbmQo%0AJ3BhdGgnKS5hdHRyKCdkJywgIk0gIitjZW50ZXJBWzBdICsgJyAnK2NlbnRlckFb%0AMV0gKyAnIEwgJysgY2VudGVyQlswXSArICcgJytjZW50ZXJCWzFdKS5zdHlsZSh7%0AJ3N0cm9rZSc6IGNvbG9yfSkKICAgICAgLy8gZm9yKGkgPSAwOyBpPHBvaW50cy5s%0AZW5ndGgtMTsgaSsrKSB7CiAgICAgIC8vICAgZDMuc2VsZWN0KCcuY29udGFpbmVy%0AJykuYXBwZW5kKCdwYXRoJykuYXR0cignZCcsICJNICIrcG9pbnRzW2ldWzBdICsg%0AJyAnK3BvaW50c1tpXVsxXSArICcgTCAnKyBwb2ludHNbaSsxXVswXSArICcgJytw%0Ab2ludHNbaSsxXVsxXSkuc3R5bGUoeydzdHJva2UnOiBjb2xvcn0pCiAgICAgIC8v%0AIH0KICAgICAgLy8gZDMuc2VsZWN0KCcuY29udGFpbmVyJykuYXBwZW5kKCdwYXRo%0AJykuYXR0cignZCcsICJNICIrcG9pbnRzW3BvaW50cy5sZW5ndGgtMV1bMF0gKyAn%0AICcrcG9pbnRzW3BvaW50cy5sZW5ndGgtMV1bMV0gKyAnIEwgJysgcG9pbnRzWzBd%0AWzBdICsgJyAnK3BvaW50c1swXVsxXSkuc3R5bGUoeydzdHJva2UnOiBjb2xvcn0p%0ACiAgICAgIHJldHVybiBjZW50ZXJCOyAvL0ZJWE1FIC0gdGhpcyBzaG91bGQgYmUg%0AZW5hYmxlZCBmb3IgcHJvZHVjdGlvbgoKICAgIH0KICAgIHJldHVybiBpbnRlcnNl%0AY3Rpb247CiAgfQoKICAvKiogY3JlYXRlcyBhIHBvbHlnb24tc2hhcGVkIHBhdGgg%0AYXR0cmlidXRlIGZvciBnaXZlbiBub2RlIHNlbGVjdGlvbgogICogQHBhcmFtIHtE%0AM3NlbGVjdGlvbn0KICAqIEBwYXJhbSB7TkRUVl9EM30KICAqIEBwcml2YXRlCiAg%0AKi8KICBuMy5wcm90b3R5cGUuZHJhd1BvbHlnb25Ob2RlID0gZnVuY3Rpb24oc2Vs%0AZWN0aW9uLCBuMyl7CiAgICAvLyBjb25zb2xlLnByb2ZpbGUoJ3BvbHltYXRoJykK%0AICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckRhdGEubikKICAgIHNlbGVjdGlvbi5h%0AdHRyKHsKICAgICAgcG9pbnRzOiBmdW5jdGlvbihkLCBpKSB7IAogICAgICAgIHZh%0AciBzaWRlcyA9IGRbJ3ZlcnRleC5zaWRlcyddOwogICAgICAgIHZhciBzaXplID0g%0AZFsndmVydGV4LmNleCddICogbjMuYmFzZU5vZGVTaXplOwogICAgICAgIHZhciBj%0Ab29yZHMgPSBkLnJlbmRlckNvb3JkOwogICAgICAgIHZhciByb3RhdGlvbiA9IGRb%0AJ3ZlcnRleC5yb3QnXTsKICAgICAgICB2YXIgY2VudGVyWCA9IG4zLnhTY2FsZShj%0Ab29yZHNbMF0pOwogICAgICAgIHZhciBjZW50ZXJZID0gbjMueVNjYWxlKGNvb3Jk%0Ac1sxXSk7CgogICAgICAgIHZhciByb3QgPSByb3RhdGlvbiAqIDIgKiBNYXRoLlBJ%0ALzM2MAogICAgICAgIHZhciBiYXNlID0gMS9zaWRlcyAqIDIgKiBNYXRoLlBJOwog%0AICAgICAgIG4zLm5vZGVDb29yZHNbZC5pZF0ucG9pbnRzID0gW107CgogICAgICAg%0AIGZvciAodmFyIGkgPSAxOyBpIDw9IHNpZGVzOyBpKyspIHsKICAgICAgICAgICAg%0AdmFyIGFuZyA9IGkgKiBiYXNlICsgcm90OwogICAgICAgICAgICB2YXIgeCA9IGNl%0AbnRlclggKyBzaXplICogTWF0aC5jb3MoYW5nKTsKICAgICAgICAgICAgdmFyIHkg%0APSBjZW50ZXJZICsgc2l6ZSAqIE1hdGguc2luKGFuZyk7CiAgICAgICAgICAgIG4z%0ALm5vZGVDb29yZHNbZC5pZF0ucG9pbnRzLnB1c2goW3gsIHldKTsKICAgICAgICB9%0ACiAgICAgICAgcmV0dXJuIG4zLm5vZGVDb29yZHNbZC5pZF0ucG9pbnRzLm1hcChm%0AdW5jdGlvbihwKSB7IHJldHVybiBwWzBdLnRvRml4ZWQoMSkrJywnK3BbMV0udG9G%0AaXhlZCgxKTsgfSkuam9pbignICcpOwogICAgICB9LAogICAgfSkKICAgIC8vIGNv%0AbnNvbGUucHJvZmlsZUVuZCgncG9seW1hdGgnKQogIH0KCiAgLyoqIGNyZWF0ZXMg%0AY2lyY2xlIGF0dHJpYnV0ZXMgZm9yIGdpdmVuIG5vZGUgc2VsZWN0aW9uCiAgKiBA%0AcGFyYW0ge0Qzc2VsZWN0aW9ufQogICogQHBhcmFtIHtORFRWX0QzfQogICogQHBy%0AaXZhdGUKICAqLwogIG4zLnByb3RvdHlwZS5kcmF3Q2lyY2xlTm9kZSA9IGZ1bmN0%0AaW9uKHNlbGVjdGlvbiwgbjMpewogICAgc2VsZWN0aW9uLmF0dHIoewogICAgICBj%0AeDogZnVuY3Rpb24oZCwgaSkgeyByZXR1cm4gbjMueFNjYWxlKGQucmVuZGVyQ29v%0AcmRbMF0pLnRvRml4ZWQoMSk7IH0sCiAgICAgIGN5OiBmdW5jdGlvbihkLCBpKSB7%0AIHJldHVybiBuMy55U2NhbGUoZC5yZW5kZXJDb29yZFsxXSkudG9GaXhlZCgxKTsg%0AfSwKICAgICAgcjogZnVuY3Rpb24oZCwgaSkgeyByZXR1cm4gKGRbJ3ZlcnRleC5j%0AZXgnXSAqIG4zLmJhc2VOb2RlU2l6ZSkudG9GaXhlZCgxKTsgfSwKICAgIH0pCiAg%0AfQoKICAvKiogcG9zaXRpb25zIHRoZSBub2RlIGxhYmVscwogICogQHBhcmFtIHtE%0AM3NlbGVjdGlvbn0KICAqIEBwYXJhbSB7TkRUVl9EM30KICAqIEBwcml2YXRlCiAg%0AKi8KICBuMy5wcm90b3R5cGUuZHJhd05vZGVMYWJlbCA9IGZ1bmN0aW9uKHNlbGVj%0AdGlvbiwgbjMpewogICAgc2VsZWN0aW9uLmF0dHIoewogICAgICB4OiBmdW5jdGlv%0AbihkLCBpKSB7IHJldHVybiAobjMueFNjYWxlKGQucmVuZGVyQ29vcmRbMF0pK24z%0ALm9wdGlvbnMubGFiZWxPZmZzZXQueCkudG9GaXhlZCgxKTsgfSwKICAgICAgeTog%0AZnVuY3Rpb24oZCwgaSkgeyByZXR1cm4gKG4zLnlTY2FsZShkLnJlbmRlckNvb3Jk%0AWzFdKStuMy5vcHRpb25zLmxhYmVsT2Zmc2V0LnkpLnRvRml4ZWQoMSk7IH0sCiAg%0AICB9KQogIH0KCiAgLyoqIGhpZ2hsaWdodHMgdGhlIGN1cnJlbnRseSBzZWxlY3Rl%0AZCBuZXR3b3JrICovCiAgbjMucHJvdG90eXBlLnVwZGF0ZVNlbGVjdGVkTmV0d29y%0AayA9IGZ1bmN0aW9uKCkgewogICAgdmFyIG4zID0gdGhpczsKICAgIHZhciBub2Rl%0AID0gbjMuc2VsZWN0ZWROZXR3b3JrOwogICAgJC5lYWNoKFsnbm9kZV9ncm91cCcs%0AICdlZGdlJywgJ2xhYmVsJ10sIGZ1bmN0aW9uKGksIGNsYXNzbmFtZSkgewogICAg%0AICB2YXIgc2VsZWN0aW9uID0gbjMuY29udGFpbmVyLnNlbGVjdEFsbCgnLicrY2xh%0Ac3NuYW1lKQogICAgICB2YXIgdHlwZSA9IGNsYXNzbmFtZSA9PSAnbm9kZV9ncm91%0AcCcgPyAnbm9kZScgOiBjbGFzc25hbWU7CiAgICAgIHZhciB1bnNlbGVjdGVkVGFy%0AZ2V0Q2xhc3MgPSAnLicrdHlwZSsncyc7CiAgICAgIHZhciBzZWxlY3RlZFRhcmdl%0AdENsYXNzID0gJy4nK3R5cGUrJ3Nfc2VsZWN0ZWQnOwogICAgICB2YXIgdW5zZWxl%0AY3RlZFRhcmdldCA9IG4zLmNvbnRhaW5lci5zZWxlY3QodW5zZWxlY3RlZFRhcmdl%0AdENsYXNzKS5ub2RlKCk7CiAgICAgIHZhciBzZWxlY3RlZFRhcmdldCA9IG4zLmNv%0AbnRhaW5lci5zZWxlY3Qoc2VsZWN0ZWRUYXJnZXRDbGFzcykubm9kZSgpOwoKICAg%0AICAgc2VsZWN0aW9uLmVhY2goZnVuY3Rpb24oZCl7CiAgICAgICAgdmFyIHRhcmdl%0AdCA9IHVuc2VsZWN0ZWRUYXJnZXQ7CiAgICAgICAgdmFyIHRhcmdldENsYXNzID0g%0AdW5zZWxlY3RlZFRhcmdldENsYXNzOwogICAgICAgIGlmICh0eXBlID09ICdlZGdl%0AJykgewogICAgICAgICAgaWYgKG5vZGUgJiYgKGQuaW5sLmlkID09IG5vZGUuaWQg%0AfHwgZC5vdXRsLmlkID09IG5vZGUuaWQpKSB7CiAgICAgICAgICAgIHRhcmdldCA9%0AIHNlbGVjdGVkVGFyZ2V0OwogICAgICAgICAgICB0YXJnZXRDbGFzcyA9IHNlbGVj%0AdGVkVGFyZ2V0Q2xhc3M7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAg%0AICAgICAgIGlmIChub2RlICYmIChub2RlLmxpbmtzW2QuaWRdICE9PSB1bmRlZmlu%0AZWQgfHwgZC5pZCA9PSBub2RlLmlkKSkgewogICAgICAgICAgICB0YXJnZXQgPSBz%0AZWxlY3RlZFRhcmdldDsKICAgICAgICAgICAgdGFyZ2V0Q2xhc3MgPSBzZWxlY3Rl%0AZFRhcmdldENsYXNzOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBj%0Ab25zb2xlLmxvZyh0YXJnZXRDbGFzcyk7CiAgICAgICAgaWYgKCEgJCh0aGlzKS5w%0AYXJlbnQodGFyZ2V0Q2xhc3MpLmxlbmd0aCkgewogICAgICAgICAgLy8gY29uc29s%0AZS5sb2cobjMuY3VyclRpbWUpCiAgICAgICAgICAkKHRhcmdldCkuYXBwZW5kKHRo%0AaXMpOwogICAgICAgIH0KICAgICAgfSkgICAgCiAgICB9KSAgICAKICB9CgogIC8q%0AKiB1bmhpZ2hsaWdodHMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBuZXR3b3JrICov%0ACiAgbjMucHJvdG90eXBlLnVuU2VsZWN0TmV0d29yayA9IGZ1bmN0aW9uKCkgewog%0AICAgdmFyIG4zID0gdGhpczsKICAgIG4zLnNlbGVjdGVkTmV0d29yayA9IG51bGw7%0ACiAgICBuMy5jb250YWluZXIuc2VsZWN0KCcuc2NyZWVuJykuY2xhc3NlZCh7J25l%0AdHdvcmstc2VsZWN0ZWQnOiBmYWxzZX0pOwogICAgbjMudXBkYXRlU2VsZWN0ZWRO%0AZXR3b3JrKCk7CiAgfQoKICAvKiogcmVuZGVyIHRoZSBncmFwaCB0byByZWZsZWN0%0AIHRoZSBzdGF0ZSBhdCBjdXJyVGltZSwgdHJhbnNpdGlvbmluZyBlbGVtZW50cyBv%0AdmVyIGEgZ2l2ZW4gZHVyYXRpb24KICAqIEBwYXJhbSB7bWlsbGlzZWNvbmRzfSAt%0AIHRoZSBhbW91bnQgb2YgdGltZSB0aGUgdHJhbnNpdGlvbiBhbmltYXRpb24gc2hv%0AdWxkIHRha2UKICAqLwogIG4zLnByb3RvdHlwZS51cGRhdGVHcmFwaCA9IGZ1bmN0%0AaW9uKGR1cmF0aW9uKSB7CiAgICB2YXIgbjMgPSB0aGlzOwogICAgLy8gY29uc29s%0AZS5wcm9maWxlKCd1cGRhdGUgJytuMy5jdXJyVGltZSk7CgogICAgdmFyIHJlbmRl%0AckRhdGEgPSBuMy51cGRhdGVTbGljZVJlbmRlckRhdGEobjMuY3VyclRpbWUpOwog%0AICAgbjMuZnJhbWVJbmZvRGl2Lmh0bWwobjMuY3VyclRpbWUrJzogJytuMy50aW1l%0ASW5kZXhbbjMuY3VyclRpbWVdLnN0YXJ0ICsgJy0nK24zLnRpbWVJbmRleFtuMy5j%0AdXJyVGltZV0uZW5kKQoKICAgIHZhciBlbnRlckV4aXREdXJhdGlvbiA9IGR1cmF0%0AaW9uICogbjMub3B0aW9ucy5lbnRlckV4aXRBbmltYXRpb25GYWN0b3I7CiAgICB2%0AYXIgdXBkYXRlRHVyYXRpb24gPSBkdXJhdGlvbiAqICgxLW4zLm9wdGlvbnMuZW50%0AZXJFeGl0QW5pbWF0aW9uRmFjdG9yKTsKCiAgICAkLmVhY2goWydtYWluJywgJ3hs%0AYWInXSwgZnVuY3Rpb24oaSwgdHlwZSl7CiAgICAgIHZhciB0ZXh0ID0gcmVuZGVy%0ARGF0YS5ncmFwaFt0eXBlXTsKICAgICAgdmFyIHRhcmdldCA9IG4zLmRvbVRhcmdl%0AdC5zZWxlY3QoJy4nK3R5cGUrJyB0ZXh0Jyk7CiAgICAgIHRhcmdldC5zZWxlY3RB%0AbGwoJyonKS5yZW1vdmUoKTsKCiAgICAgIGlmICh0ZXh0KSB7CiAgICAgICAgJC5l%0AYWNoKHRleHQsIGZ1bmN0aW9uKGksIHQpewogICAgICAgICAgdGFyZ2V0LmFwcGVu%0AZCgndHNwYW4nKS5hdHRyKHsKICAgICAgICAgICAgJ2R5JzogKGkgPyAnMS4yZW0n%0AIDogMCksCiAgICAgICAgICAgICd4JzogMCwKICAgICAgICAgIH0pLnRleHQodCk7%0ACiAgICAgICAgfSkKICAgICAgfQogICAgfSk7CgogICAgbjMuZG9tVGFyZ2V0LnNl%0AbGVjdEFsbCgnLmJhY2tncm91bmQsIC5zY3JlZW4nKS50cmFuc2l0aW9uKCkKICAg%0AICAgLnN0eWxlKHtmaWxsOiByZW5kZXJEYXRhLmdyYXBoWydiZyddLCAnZmlsbC1v%0AcGFjaXR5JzogcmVuZGVyRGF0YS5ncmFwaFsnYmcuZmlsbC1vcGFjaXR5J119KTsK%0ACiAgICB2YXIgc2hvd0luZm8gPSBmdW5jdGlvbihkKSB7CiAgICAgIGlmKCEgbjMu%0Ac2VsZWN0ZWQgfHwgbjMuc2VsZWN0ZWQuaWQgIT09IGQuaWQpIHsKICAgICAgICBu%0AMy5zZWxlY3RlZCA9IGQ7CiAgICAgICAgbjMubW92ZVRvb2x0aXAoKTsKICAgICAg%0AfSBlbHNlIHsKICAgICAgICBuMy5oaWRlVG9vbHRpcCgpOwogICAgICB9CiAgICB9%0ACgogICAgLy91cGRhdGUgc2VsZWN0ZWQgaXRlbQogICAgaWYgKG4zLnNlbGVjdGVk%0AKSB7CiAgICAgIG4zLnNlbGVjdGVkID0gbjMuc2VsZWN0ZWQuaW5sID8gcmVuZGVy%0ARGF0YS5lZGdlW24zLnNlbGVjdGVkLmlkXSA6IHJlbmRlckRhdGEubm9kZVtuMy5z%0AZWxlY3RlZC5pZF07CiAgICAgIGlmICghIG4zLnNlbGVjdGVkKSB7CiAgICAgICAg%0AbjMuaGlkZVRvb2x0aXAoKTsKICAgICAgfSAKICAgIH0KICAgIGlmIChuMy5zZWxl%0AY3RlZE5ldHdvcmspIHsKICAgICAgbjMuc2VsZWN0ZWROZXR3b3JrID0gcmVuZGVy%0ARGF0YS5ub2RlW24zLnNlbGVjdGVkTmV0d29yay5pZF07CiAgICB9CgogICAgLyoq%0AIGFwcGx5IHN0eWxlcyBhbmQgYXRycmlidXRlcyB0byBub2RlcwogICAgKiBAcHJp%0AdmF0ZQogICAgKi8KICAgIHZhciBzdHlsZU5vZGVzID0gZnVuY3Rpb24oc2VsZWN0%0AaW9uKSB7CiAgICAgIHNlbGVjdGlvbi5zdHlsZSh7CiAgICAgICAgLy8gJ2ZpbGwn%0AOiBmdW5jdGlvbihkLCBpKSB7cmV0dXJuIGRbJ3ZlcnRleC5jb2wnXTsgfSwKICAg%0AICAgICBmaWxsOiBmdW5jdGlvbihkKSB7CiAgICAgICAgICBpZiAoZC5pbWFnZSkg%0AeyAKICAgICAgICAgICAgcmV0dXJuICd1cmwoI2ltYWdlXycrcGFyc2VJbnQoZC5p%0AZCkrJyknOyAKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBk%0AWyd2ZXJ0ZXguY29sJ107CiAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAg%0AJ2ZpbGwtb3BhY2l0eSc6IGZ1bmN0aW9uKGQsIGkpIHtyZXR1cm4gZFsndmVydGV4%0ALmNvbC5maWxsLW9wYWNpdHknXTsgfSwKICAgICAgICAnc3Ryb2tlLXdpZHRoJzog%0AZnVuY3Rpb24oZCkge3JldHVybiBkWyd2ZXJ0ZXgubHdkJ107IH0sCiAgICAgICAg%0AJ3N0cm9rZSc6IGZ1bmN0aW9uKGQpIHtyZXR1cm4gZFsndmVydGV4LmJvcmRlcidd%0AOyB9LAogICAgICAgICdzdHJva2Utb3BhY2l0eSc6IGZ1bmN0aW9uKGQpIHtyZXR1%0Acm4gZFsndmVydGV4LmJvcmRlci5zdHJva2Utb3BhY2l0eSddOyB9LAogICAgICB9%0AKQogICAgICBzZWxlY3Rpb24uZmlsdGVyKCdjaXJjbGUnKS5jYWxsKG4zLmRyYXdD%0AaXJjbGVOb2RlLCBuMykKICAgICAgc2VsZWN0aW9uLmZpbHRlcigncG9seWdvbicp%0ALmNhbGwobjMuZHJhd1BvbHlnb25Ob2RlLCBuMykKICAgIH0KCiAgICAvKiogc2V0%0AIGF0dHJpYnV0ZXMgJiB0cmFuc2l0aW9ucyB0byBiZSBhcHBsaWVkIHRvIG5ldyBu%0Ab2RlcwogICAgKiBAcHJpdmF0ZQogICAgKi8KICAgIHZhciBjcmVhdGVOb2RlcyA9%0AIGZ1bmN0aW9uKHNlbGVjdGlvbikgewogICAgICBzZWxlY3Rpb24KICAgICAgICAu%0AYXR0cih7CiAgICAgICAgICBjbGFzczogZnVuY3Rpb24oZCkgeyByZXR1cm4gJ25v%0AZGUgbm9kZV8nK2QuaWQrJyAnKyhkWyd2ZXJ0ZXguY3NzLmNsYXNzJ10gfHwgJycp%0AOyB9LAogICAgICAgICAgb3BhY2l0eTogMCwKICAgICAgICAgIC8vIGZpbGw6IGZ1%0AbmN0aW9uKGQpIHsgcmV0dXJuICd1cmwoI2ltYWdlXycrZC5pZCsnKSc7IH0KICAg%0AICAgICB9KQogICAgICAgIC5jYWxsKHN0eWxlTm9kZXMpCiAgICAgICAgLm9uKCdj%0AbGljaycsIHNob3dJbmZvKQogICAgICAgIC5vbignZGJsY2xpY2snLCBmdW5jdGlv%0AbihkKSB7CiAgICAgICAgICBpZiAoISBuMy5zZWxlY3RlZE5ldHdvcmsgfHwgZC5p%0AZCAhPSBuMy5zZWxlY3RlZE5ldHdvcmsuaWQpIHsKICAgICAgICAgICAgbjMuc2Vs%0AZWN0ZWROZXR3b3JrID0gZDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg%0AIG4zLnNlbGVjdGVkTmV0d29yayA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAg%0AICBuMy51cGRhdGVTZWxlY3RlZE5ldHdvcmsoKQogICAgICAgICAgbjMuY29udGFp%0AbmVyLnNlbGVjdCgnLnNjcmVlbicpLmNsYXNzZWQoeyduZXR3b3JrLXNlbGVjdGVk%0AJzogbjMuc2VsZWN0ZWROZXR3b3JrfSkKICAgICAgICAgIG4zLnNlbGVjdGVkID0g%0AbjMuc2VsZWN0ZWROZXR3b3JrOwogICAgICAgICAgbjMubW92ZVRvb2x0aXAoKTsK%0AICAgICAgICAgIGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIH0p%0ACiAgICAgICAgLm9uKCdtb3VzZW92ZXInLCBmdW5jdGlvbihkKSB7CiAgICAgICAg%0AICBkMy5zZWxlY3QodGhpcykKICAgICAgICAgICAgLnRyYW5zaXRpb24oKQogICAg%0AICAgICAgICAuZHVyYXRpb24oMjAwKQogICAgICAgICAgICAuc3R5bGUoJ3N0cm9r%0AZS13aWR0aCcsIHBhcnNlRmxvYXQoZFsndmVydGV4Lmx3ZCddKSs1KTsKICAgICAg%0AICB9KQogICAgICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbihkKSB7CiAgICAg%0AICAgICBkMy5zZWxlY3QodGhpcykKICAgICAgICAgICAgLnRyYW5zaXRpb24oKQog%0AICAgICAgICAgICAuZHVyYXRpb24oMjAwKQogICAgICAgICAgICAuc3R5bGUoJ3N0%0Acm9rZS13aWR0aCcsIGRbJ3ZlcnRleC5sd2QnXSk7CiAgICAgICAgfSkKICAgICAg%0AICAudHJhbnNpdGlvbigpCiAgICAgICAgLmR1cmF0aW9uKGVudGVyRXhpdER1cmF0%0AaW9uKQogICAgICAgIC5hdHRyKCdvcGFjaXR5JywgMSkKCiAgICB9CgogICAgdmFy%0AIGltYWdlcyA9IG4zLmRvbVRhcmdldC5zZWxlY3QoJ2RlZnMnKS5zZWxlY3RBbGwo%0AJy5ub2RlLWltYWdlJykuZGF0YShkMy52YWx1ZXMocmVuZGVyRGF0YS5ub2RlKS5m%0AaWx0ZXIoZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5pbWFnZTsgfSksIGZ1bmN0aW9u%0AKG4pIHsgcmV0dXJuIG4uaWQ7IH0pCiAgICAgIGltYWdlcy5lbnRlcigpCiAgICAg%0AICAgLmFwcGVuZCgncGF0dGVybicpLmF0dHIoewogICAgICAgIGlkOiBmdW5jdGlv%0AbihkKSB7IHJldHVybiAnaW1hZ2VfJytkLmlkOyB9LAogICAgICAgIGNsYXNzOiAn%0Abm9kZS1pbWFnZScsCiAgICAgICAgdmlld0JveDoiMCAwIDEwMCAxMDAiLAogICAg%0AICAgIC8vIHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUiLCAKICAgICAgICAvLyAn%0AcGF0dGVyblVuaXRzJzogJ3VzZXJTcGFjZU9uVXNlJywKICAgICAgICB3aWR0aDog%0AMTAsCiAgICAgICAgaGVpZ2h0OjEwCiAgICAgIH0pLmFwcGVuZCgnaW1hZ2UnKS5h%0AdHRyKHsKICAgICAgICAneGxpbms6aHJlZic6IGZ1bmN0aW9uKGQpIHsgcmV0dXJu%0AIGQuaW1hZ2U7IH0sCiAgICAgICAgd2lkdGg6IDEwLAogICAgICAgIGhlaWdodDox%0AMCAgICAgICAgCiAgICAgIH0pCgogICAgICBpbWFnZXMuc2VsZWN0KCdpbWFnZScp%0ALnRyYW5zaXRpb24oKQogICAgICAgIC5kZWxheShlbnRlckV4aXREdXJhdGlvbikK%0AICAgICAgICAuZHVyYXRpb24odXBkYXRlRHVyYXRpb24pCiAgICAgICAgLmF0dHIo%0AewogICAgICAgICAgJ3hsaW5rOmhyZWYnOiBmdW5jdGlvbihkKSB7IHJldHVybiBk%0ALmltYWdlOyB9CiAgICAgICAgfSk7CgogICAgICBpbWFnZXMuZXhpdCgpCiAgICAg%0AICAgLnRyYW5zaXRpb24oKQogICAgICAgIC5kdXJhdGlvbihlbnRlckV4aXREdXJh%0AdGlvbikKICAgICAgICAucmVtb3ZlKCk7IAoKICAgIHZhciBub2RlcyA9IG4zLmNv%0AbnRhaW5lci5zZWxlY3RBbGwoJy5ub2RlJykuZGF0YShkMy52YWx1ZXMocmVuZGVy%0ARGF0YS5ub2RlKSwgZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5pZDsgfSkKCiAgICAg%0AIHZhciBub2RlX2dyb3VwcyA9IG5vZGVzLmVudGVyKCkuYXBwZW5kKCdnJykuY2xh%0Ac3NlZCh7J25vZGVfZ3JvdXAnIDogdHJ1ZX0pOwogICAgICBub2RlX2dyb3Vwcy5m%0AaWx0ZXIoZnVuY3Rpb24oZCkgeyByZXR1cm4gZFsndmVydGV4LnNpZGVzJ10gIT0g%0ANTA7IH0pLmFwcGVuZCgncG9seWdvbicpLmNhbGwoY3JlYXRlTm9kZXMpOwogICAg%0AICBub2RlX2dyb3Vwcy5maWx0ZXIoZnVuY3Rpb24oZCkgeyByZXR1cm4gZFsndmVy%0AdGV4LnNpZGVzJ10gPT0gNTA7IH0pLmFwcGVuZCgnY2lyY2xlJykuY2FsbChjcmVh%0AdGVOb2Rlcyk7CgogICAgICBpZiAoIWVudGVyRXhpdER1cmF0aW9uKSB7bm9kZXMu%0AYXR0cih7b3BhY2l0eTogMX0pOyB9CgogICAgICBub2Rlcy5maWx0ZXIoJy5ub2Rl%0AJykudHJhbnNpdGlvbigpCiAgICAgICAgLmRlbGF5KGVudGVyRXhpdER1cmF0aW9u%0AKQogICAgICAgIC5kdXJhdGlvbih1cGRhdGVEdXJhdGlvbikKICAgICAgICAuYXR0%0Acignb3BhY2l0eScsIDEpCiAgICAgICAgLmNhbGwoc3R5bGVOb2RlcykKCiAgICAg%0AIG5vZGVzLmV4aXQoKQogICAgICAgIC50cmFuc2l0aW9uKCkKICAgICAgICAuZHVy%0AYXRpb24oZW50ZXJFeGl0RHVyYXRpb24pCiAgICAgICAgLmF0dHIoJ29wYWNpdHkn%0ALCAwKQogICAgICAgIC5yZW1vdmUoKTsgCgogICAgaWYgKHJlbmRlckRhdGEuZ3Jh%0AcGgudXNlYXJyb3dzKSB7CiAgICAgIHZhciBtYXJrZXJzID0gbjMuZG9tVGFyZ2V0%0ALnNlbGVjdCgnZGVmcycpLnNlbGVjdEFsbCgnLmFycm93aGVhZCcpLmRhdGEoZDMu%0AdmFsdWVzKHJlbmRlckRhdGEuZWRnZSksIGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGUu%0AaWR9KQogICAgICAgIG1hcmtlcnMuZW50ZXIoKS5hcHBlbmQoJ21hcmtlcicpLmF0%0AdHIoewogICAgICAgICAgaWQ6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuICdhcnJvd2hl%0AYWRfJytkLmlkOyB9LAogICAgICAgICAgY2xhc3M6ICdhcnJvd2hlYWQnLAogICAg%0AICAgICAgdmlld0JveDogIjAgLTEgMiAyIiwKICAgICAgICAgIG1hcmtlcldpZHRo%0AOiBzY2FsZUFycm93aGVhZHMsCiAgICAgICAgICBtYXJrZXJIZWlnaHQ6IHNjYWxl%0AQXJyb3doZWFkcywKICAgICAgICAgIG9yaWVudDogImF1dG8iLAogICAgICAgIH0p%0ALmFwcGVuZCgic3ZnOnBhdGgiKQogICAgICAgICAgLmF0dHIoewogICAgICAgICAg%0AICBkOiAiTTAsLTFMMiwwTDAsMSIsCiAgICAgICAgICAgIGZpbGw6ICdncmVlbicK%0AICAgICAgICAgIH0pOwoKICAgICAgICBtYXJrZXJzLnNlbGVjdCgncGF0aCcpLnRy%0AYW5zaXRpb24oKQogICAgICAgICAgLmRlbGF5KGVudGVyRXhpdER1cmF0aW9uKQog%0AICAgICAgICAgLmR1cmF0aW9uKHVwZGF0ZUR1cmF0aW9uKQogICAgICAgICAgLmF0%0AdHIoewogICAgICAgICAgICBmaWxsOiBmdW5jdGlvbihkKSB7IHJldHVybiBkWydl%0AZGdlLmNvbCddOyB9LAogICAgICAgICAgICAnZmlsbC1vcGFjaXR5JzogZnVuY3Rp%0Ab24oZCkgeyByZXR1cm4gZFsnZWRnZS5jb2wuc3Ryb2tlLW9wYWNpdHknXTsgfQog%0AICAgICAgICAgfSkKCiAgICAgICAgbWFya2Vycy5leGl0KCkuc2VsZWN0QWxsKCdw%0AYXRoJykKICAgICAgICAgIC5hdHRyKHsKICAgICAgICAgICAgZmlsbDogJ3JlZCcK%0AICAgICAgICAgIH0pCiAgICAgICAgCiAgICAgICAgbWFya2Vycy5leGl0KCkudHJh%0AbnNpdGlvbigpCiAgICAgICAgICAuZGVsYXkoZHVyYXRpb24pCiAgICAgICAgICAu%0AZHVyYXRpb24oMCkKICAgICAgICAgIC5yZW1vdmUoKQogICAgfQoKICAgIHZhciBs%0AaW5lcyA9IG4zLmNvbnRhaW5lci5zZWxlY3RBbGwoJy5lZGdlJykuZGF0YShkMy52%0AYWx1ZXMocmVuZGVyRGF0YS5lZGdlKSwgZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5p%0AZH0pCiAgICAgIGxpbmVzLmVudGVyKCkuYXBwZW5kKCdwYXRoJykKICAgICAgICAu%0AYXR0cih7CiAgICAgICAgICBjbGFzczogZnVuY3Rpb24oZCkgeyByZXR1cm4gJ2Vk%0AZ2UgZWRnZV8nK2QuaWQrJyAnKyhkWydlZGdlLmNzcy5jbGFzcyddIHx8ICcnKTsg%0AfSwgICAgIAogICAgICAgICAgb3BhY2l0eTogMCwKICAgICAgICAgICJtYXJrZXIt%0AZW5kIjogZnVuY3Rpb24oZCkgeyBpZihyZW5kZXJEYXRhLmdyYXBoLnVzZWFycm93%0AcykgeyByZXR1cm4gInVybCgjYXJyb3doZWFkXyIrZC5pZCsiKSI7IH19CiAgICAg%0AICAgfSkKICAgICAgICAuc3R5bGUoewogICAgICAgICAgJ3N0cm9rZSc6ICdncmVl%0AbicsCiAgICAgICAgICAnc3Ryb2tlLXdpZHRoJzogZnVuY3Rpb24oZCkgeyByZXR1%0Acm4gZFsnZWRnZS5sd2QnXTsgfQogICAgICAgIH0pCiAgICAgICAgLmNhbGwobjMu%0AZHJhd0VkZ2UsIG4zLCByZW5kZXJEYXRhLmdyYXBoLnVzZWFycm93cywgMSkKICAg%0AICAgICAub24oJ2NsaWNrJywgc2hvd0luZm8pCiAgICAgICAgLm9uKCdtb3VzZW92%0AZXInLCBmdW5jdGlvbihkKSB7CiAgICAgICAgICB2YXIgZWRnZSA9IGQzLnNlbGVj%0AdCh0aGlzKTsKICAgICAgICAgIHZhciBsaW5lID0gJ00gJytkLmN1cnJlbnRDb29y%0AZHNbMF1bMF0udG9GaXhlZCgxKSsnICcrZC5jdXJyZW50Q29vcmRzWzBdWzFdLnRv%0ARml4ZWQoMSkrJyBMICcrZC5jdXJyZW50Q29vcmRzWzFdWzBdLnRvRml4ZWQoMSkr%0AJyAnK2QuY3VycmVudENvb3Jkc1sxXVsxXS50b0ZpeGVkKDEpOwogICAgICAgICAg%0AaWYgKHJlbmRlckRhdGEuZ3JhcGgudXNlYXJyb3dzKSB7CiAgICAgICAgICAgIHZh%0AciBvZmZzZXRQb2ludHMgPSBvZmZzZXRMaW5lKFtkLmN1cnJlbnRDb29yZHNbMF1b%0AMF0sIGQuY3VycmVudENvb3Jkc1swXVsxXV0sIFtkLmN1cnJlbnRDb29yZHNbMV1b%0AMF0sIGQuY3VycmVudENvb3Jkc1sxXVsxXV0sIChzY2FsZUFycm93aGVhZHMoZCkq%0ANSkpOwogICAgICAgICAgICBsaW5lID0gJ00gJytkLmN1cnJlbnRDb29yZHNbMF1b%0AMF0udG9GaXhlZCgxKSsnICcrZC5jdXJyZW50Q29vcmRzWzBdWzFdLnRvRml4ZWQo%0AMSkrJyBMICcrb2Zmc2V0UG9pbnRzWzBdLnRvRml4ZWQoMSkrJyAnK29mZnNldFBv%0AaW50c1sxXS50b0ZpeGVkKDEpOyAgICAgCiAgICAgICAgICB9CiAgICAgICAgICBl%0AZGdlLnRyYW5zaXRpb24oKQogICAgICAgICAgICAuZHVyYXRpb24oMjAwKQogICAg%0AICAgICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsIHBhcnNlRmxvYXQoZFsnZWRn%0AZS5sd2QnXSkrNSkKICAgICAgICAgICAgLmF0dHIoJ2QnLCBsaW5lKTsKICAgICAg%0AICB9KQogICAgICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbihkKSB7CiAgICAg%0AICAgICBkMy5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpCiAgICAgICAgICAgIC5k%0AdXJhdGlvbigyMDApCiAgICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywg%0AZFsnZWRnZS5sd2QnXSkKICAgICAgICAgICAgLmNhbGwobjMuZHJhd0VkZ2UsIG4z%0ALCByZW5kZXJEYXRhLmdyYXBoLnVzZWFycm93cywgZmFsc2UpCiAgICAgICAgfSkK%0AICAgICAgICAudHJhbnNpdGlvbigpCiAgICAgICAgLmR1cmF0aW9uKGVudGVyRXhp%0AdER1cmF0aW9uKQogICAgICAgIC5hdHRyKHtvcGFjaXR5OiAxfSkKCiAgICAgIGlm%0AICghZW50ZXJFeGl0RHVyYXRpb24pIHtsaW5lcy5hdHRyKHtvcGFjaXR5OiAxfSk7%0AIH0KICAgICAgCiAgICAgIGxpbmVzLnRyYW5zaXRpb24oKQogICAgICAgIC5kZWxh%0AeShlbnRlckV4aXREdXJhdGlvbikKICAgICAgICAuZHVyYXRpb24odXBkYXRlRHVy%0AYXRpb24pCiAgICAgICAgLnN0eWxlKHsKICAgICAgICAgICdzdHJva2UnOiBmdW5j%0AdGlvbihkKSB7IHJldHVybiBkWydlZGdlLmNvbCddfSwKICAgICAgICAgICdzdHJv%0Aa2Utb3BhY2l0eSc6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGRbJ2VkZ2UuY29sLnN0%0Acm9rZS1vcGFjaXR5J107IH0sCiAgICAgICAgICAnc3Ryb2tlLXdpZHRoJzogZnVu%0AY3Rpb24oZCkgeyByZXR1cm4gZFsnZWRnZS5sd2QnXTsgfSwKICAgICAgICB9KQog%0AICAgICAgIC5jYWxsKG4zLmRyYXdFZGdlLCBuMywgcmVuZGVyRGF0YS5ncmFwaC51%0Ac2VhcnJvd3MpCiAgICAgICAgLmF0dHIoe29wYWNpdHk6IDF9KQoKICAgICAgbGlu%0AZXMuZXhpdCgpCiAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAncmVkJykKICAgICAg%0AICAudHJhbnNpdGlvbigpCiAgICAgICAgLmR1cmF0aW9uKGVudGVyRXhpdER1cmF0%0AaW9uKQogICAgICAgIC5hdHRyKCdvcGFjaXR5JywgMCkgICAgICAgICAgCiAgICAg%0AICAgLnJlbW92ZSgpOwoKICAgIHZhciBsYWJlbHMgPSBuMy5jb250YWluZXIuc2Vs%0AZWN0KCcubGFiZWxzJykuc2VsZWN0QWxsKCd0ZXh0JykuZGF0YShkMy52YWx1ZXMo%0AcmVuZGVyRGF0YS5ub2RlKSwgZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5pZH0pOwog%0AICAgICBsYWJlbHMuZW50ZXIoKS5hcHBlbmQoJ3RleHQnKS5maWx0ZXIoZnVuY3Rp%0Ab24oZCkgeyByZXR1cm4gcmVuZGVyRGF0YS5ncmFwaC5kaXNwbGF5bGFiZWxzOyB9%0AKQogICAgICAgIC5hdHRyKHsKICAgICAgICAgIGNsYXNzOiBmdW5jdGlvbihkKSB7%0AIHJldHVybiAnbGFiZWwgbGFiZWxfJytkLmlkKyAnICcrIChkWyd2ZXJ0ZXgubGFi%0AZWwuY3NzLmNsYXNzJ10gfHwgJycpOyB9LAogICAgICAgICAgb3BhY2l0eTogMAog%0AICAgICAgIH0pCiAgICAgICAgLmNhbGwobjMuZHJhd05vZGVMYWJlbCwgbjMpCiAg%0AICAgICAgLnRleHQoZnVuY3Rpb24oZCwgaSkgeyByZXR1cm4gZC5sYWJlbDsgfSkK%0AICAgICAgICAuc3R5bGUoewogICAgICAgICAgJ2ZpbGwnOiBmdW5jdGlvbihkKSB7%0AcmV0dXJuIGRbJ2xhYmVsLmNvbCddOyB9LAogICAgICAgICAgJ2ZpbGwtb3BhY2l0%0AeSc6IGZ1bmN0aW9uKGQpIHtyZXR1cm4gZFsnbGFiZWwuY29sLmZpbGwtb3BhY2l0%0AeSddOyB9LAogICAgICAgICAgJ2ZvbnQtc2l6ZSc6IGZ1bmN0aW9uKGQpIHsgcmV0%0AdXJuIG4zLm9wdGlvbnMuYmFzZUZvbnRTaXplICogZFsnbGFiZWwuY2V4J10rJ3B4%0AJzt9CiAgICAgICAgfSkKICAgICAgICAudHJhbnNpdGlvbigpCiAgICAgICAgLmRl%0AbGF5KDApCiAgICAgICAgLmR1cmF0aW9uKGVudGVyRXhpdER1cmF0aW9uKQogICAg%0AICAgIC5hdHRyKHtvcGFjaXR5OiAxfSkKCiAgICAgIGlmICghZW50ZXJFeGl0RHVy%0AYXRpb24pIHtsYWJlbHMuYXR0cih7b3BhY2l0eTogMX0pOyB9CgogICAgICBsYWJl%0AbHMudHJhbnNpdGlvbigpLmZpbHRlcihmdW5jdGlvbihkKSB7IHJldHVybiByZW5k%0AZXJEYXRhLmdyYXBoLmRpc3BsYXlsYWJlbHM7IH0pCiAgICAgICAgLmRlbGF5KGVu%0AdGVyRXhpdER1cmF0aW9uKQogICAgICAgIC5kdXJhdGlvbih1cGRhdGVEdXJhdGlv%0AbikKICAgICAgICAuY2FsbChuMy5kcmF3Tm9kZUxhYmVsLCBuMykKICAgICAgICAv%0ALy5hdHRyKHtvcGFjaXR5OiAxfSkKICAgICAgICAudGV4dChmdW5jdGlvbihkLCBp%0AKSB7IHJldHVybiBkLmxhYmVsOyB9KQogICAgICAgIC5zdHlsZSh7CiAgICAgICAg%0AICAnZmlsbCc6IGZ1bmN0aW9uKGQpIHtyZXR1cm4gZFsnbGFiZWwuY29sJ107IH0s%0ACiAgICAgICAgICAnZmlsbC1vcGFjaXR5JzogZnVuY3Rpb24oZCkge3JldHVybiBk%0AWydsYWJlbC5jb2wuZmlsbC1vcGFjaXR5J107IH0sCiAgICAgICAgfSkKCiAgICAg%0AIGxhYmVscy5leGl0KCkKICAgICAgICAudHJhbnNpdGlvbigpCiAgICAgICAgLmR1%0AcmF0aW9uKGVudGVyRXhpdER1cmF0aW9uKQogICAgICAgIC5hdHRyKCdvcGFjaXR5%0AJywgMCkKICAgICAgICAucmVtb3ZlKCk7CgogICAgICBuMy51cGRhdGVTZWxlY3Rl%0AZE5ldHdvcmsoKTsKICAKICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKTsKICAg%0AICAgZDMudGltZXIoZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKG4zLnNlbGVjdGVk%0AICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgIG4zLm1vdmVUb29sdGlwKCk7CiAg%0AICAgICAgfQogICAgICAgIHJldHVybiBEYXRlLm5vdygpID49IHN0YXJ0ICtkdXJh%0AdGlvbjsgCiAgICAgIH0pCiAgICAgIC8vIGNvbnNvbGUucHJvZmlsZUVuZCgndXBk%0AYXRlICcrbjMuY3VyclRpbWUpOwogIH0KCiAgLyoqIHJlc2l6ZXMgZ3JhcGggYW5k%0AIG90aGVyIGRpc3BsYXkgZWxlbWVudHMgdG8gZmlsbCB0aGUgdGFyZ2V0IHZpZXdw%0Ab3J0ICovCiAgbjMucHJvdG90eXBlLnJlc2l6ZUdyYXBoID0gZnVuY3Rpb24oKSB7%0ACiAgICB2YXIgbjMgPSB0aGlzOwogICAgbjMudXBkYXRlRGltZW5zaW9ucygpOwoK%0ACiAgICBuMy5jb250YWluZXIuc2VsZWN0QWxsKCdjaXJjbGUubm9kZScpLmNhbGwo%0AbjMuZHJhd0NpcmNsZU5vZGUsIG4zKQogICAgbjMuY29udGFpbmVyLnNlbGVjdEFs%0AbCgncG9seWdvbi5ub2RlJykuY2FsbChuMy5kcmF3UG9seWdvbk5vZGUsIG4zKQoK%0AICAgIG4zLmNvbnRhaW5lci5zZWxlY3RBbGwoJy5lZGdlJykuY2FsbChuMy5kcmF3%0ARWRnZSwgbjMsIG4zLnRpbWVJbmRleFtuMy5jdXJyVGltZV0ucmVuZGVyRGF0YS5n%0AcmFwaC51c2VhcnJvd3MpCgogICAgbjMuY29udGFpbmVyLnNlbGVjdCgnLmxhYmVs%0AcycpLnNlbGVjdEFsbCgndGV4dCcpLmNhbGwobjMuZHJhd05vZGVMYWJlbCwgbjMp%0ACgogICAgbjMubW92ZVRvb2x0aXAoKTsKICAgIC8vcmVkcmF3IHRoZSBzbGlkZXIg%0AY29udHJvbCAKICAgIGlmIChuMy5vcHRpb25zLnNsaWRlcikgewogICAgICB2YXIg%0Ac2xpZGVyRGl2ID0gbjMuZG9tVGFyZ2V0LnNlbGVjdCgnLnNsaWRlcicpOwogICAg%0AICBzbGlkZXJEaXYuaHRtbCgnJyk7CiAgICAgIHNsaWRlckRpdi5jYWxsKG4zLnNs%0AaWRlcik7CiAgICB9IAogIH0KICAKICAvKiogZ3JhcGggYW5pbWF0aW9uIGNvbnRy%0Ab2xsZXIKICAqIEBwYXJhbSB7aW50ZWdlcn0gLSByZW5kZXIgdGhlIGdyYXBoIHRv%0AIHRoZSBzdGF0ZSBhdCB0aGlzIHRpbWVzbGljZSBpbmRleAogICogQHBhcmFtIHtp%0AbnRlZ2VyfSAtIGZ1bmN0aW9uIHdpbGwgcmVjdXJzaXZlbHkgY2FsbCBpdHNlbGYg%0AdW50aWwgdGltZSBlcXVhbHMgdGhpcyB2YWx1ZQogICogQHBhcmFtIHtib29sZWFu%0AfSAtIHNob3VsZCB0aGUgZ3JhcGggdXBkYXRlIGltbWVkaWF0ZWx5LCBvciBhbmlt%0AYXRlPwogICovCiAgbjMucHJvdG90eXBlLmFuaW1hdGVHcmFwaCA9IGZ1bmN0aW9u%0AKHRpbWUsIGVuZFRpbWUsIGltbWVkaWF0ZSkgewogICAgdmFyIG4zID0gdGhpczsK%0AICAgIGlmICh0aW1lID4gbjMudGltZUluZGV4Lmxlbmd0aCAtMSB8fCB0aW1lIDwg%0AMCkgeyByZXR1cm47IH0KCiAgICB2YXIgZHVyYXRpb24gPSBpbW1lZGlhdGUgPyAw%0AIDogbjMub3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbjsKICAgIGVuZFRpbWUgPSBl%0AbmRUaW1lID09PSB1bmRlZmluZWQgPyBuMy50aW1lSW5kZXgubGVuZ3RoIC0xIDog%0AZW5kVGltZTsKICAgIHZhciBuZXh0VGltZTsKICAgIGlmICh0aW1lID09IGVuZFRp%0AbWUpIHsKICAgICAgbmV4dFRpbWUgPSB0aW1lOwogICAgfSBlbHNlIGlmIChlbmRU%0AaW1lID4gdGltZSkgewogICAgICBuZXh0VGltZSA9IHRpbWUgKzE7CiAgICB9IGVs%0Ac2UgewogICAgICBuZXh0VGltZSA9IHRpbWUgLTE7CiAgICB9CgogICAgbjMuY3Vy%0AclRpbWUgPSB0aW1lID09IG4zLmN1cnJUaW1lID8gbmV4dFRpbWUgOiB0aW1lOwog%0AICAgLy9jb25zb2xlLmxvZyhuMy5jdXJyVGltZSArICcgJyt0aW1lKycgJytlbmRU%0AaW1lKyAnICcrbmV4dFRpbWUrICcgJytuMy5wcmV2VGltZSkKICAgIGlmKCEgaW1t%0AZWRpYXRlICYmIG4zLm9wdGlvbnMuc2xpZGVyKSB7CiAgICAgIG4zLnNsaWRlci52%0AYWx1ZShuMy50aW1lSW5kZXhbbjMuY3VyclRpbWVdLnN0YXJ0WzBdKTsKICAgIH0K%0AICAgIG4zLnVwZGF0ZUdyYXBoKGR1cmF0aW9uKTsKICAgIGlmIChuMy5jdXJyVGlt%0AZSAhPSBlbmRUaW1lKSB7CiAgICAgIG4zLmFuaW1hdGUgPSBzZXRUaW1lb3V0KGZ1%0AbmN0aW9uKCl7CiAgICAgICAgbjMuYW5pbWF0ZUdyYXBoKG5leHRUaW1lLCBlbmRU%0AaW1lLCBpbW1lZGlhdGUpOwogICAgICB9LCBkdXJhdGlvbikKICAgIH0KICB9Cgog%0AIC8qKiByZWRyYXcgdGhlIGluZm8gcG9wb3ZlciAvL0ZJWE1FIC0gbmVlZHMgcmVu%0AYW1lZCAqLwogIG4zLnByb3RvdHlwZS5tb3ZlVG9vbHRpcCA9IGZ1bmN0aW9uKCkg%0AewogICAgLy8gY29uc29sZS5wcm9maWxlKCdtb3ZlVG9vbHRpcCcpOwogICAgdmFy%0AIG4zID0gdGhpczsKICAgIGlmIChuMy5zZWxlY3RlZCkgewogICAgICB2YXIgaXRl%0AbSA9IG4zLnNlbGVjdGVkOwogICAgICB2YXIgdHlwZSA9IGl0ZW0uaW5sID8gJ2Vk%0AZ2UnIDogJ25vZGUnOwogICAgICB2YXIgbm9kZURPTSA9IG4zLmNvbnRhaW5lci5z%0AZWxlY3QoJy4nK3R5cGUrJ18nK2l0ZW0uaWQpLm5vZGUoKTsKICAgICAgaWYgKCFu%0Ab2RlRE9NKSB7CiAgICAgICAgbjMuaGlkZVRvb2x0aXAoKTsKICAgICAgfSBlbHNl%0AIHsKICAgICAgICB2YXIgY29vcmRzID0gbjMuY29udmVydENvb3JkcyhpdGVtKTsK%0AICAgICAgICB2YXIgcHJvcGVydHkgPSAndmVydGV4LnRvb2x0aXAnOwogICAgICAg%0AIGlmICh0eXBlID09ICdlZGdlJykgewogICAgICAgICAgcHJvcGVydHkgPSAnZWRn%0AZS50b29sdGlwJzsKICAgICAgICB9CiAgICAgICAgdmFyIGh0bWwgPSBuMy5zZWxl%0AY3RlZFtwcm9wZXJ0eV0gfHwgdHlwZSsiIGlkOiAiK24zLnNlbGVjdGVkLmlkOwog%0AICAgICAgIG4zLnRvb2x0aXAuc3R5bGUoewogICAgICAgICAgZGlzcGxheTogJ2Js%0Ab2NrJywKICAgICAgICAgIGJvdHRvbTogY29vcmRzWzFdKydweCcsCiAgICAgICAg%0AICBsZWZ0OiBjb29yZHNbMF0rJ3B4JywKICAgICAgICB9KS5odG1sKGh0bWwpCiAg%0AICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIG4zLmhpZGVUb29sdGlwKCk7CiAgICB9%0ACiAgICAvLyBjb25zb2xlLnByb2ZpbGVFbmQoJ21vdmVUb29sdGlwJyk7CiAgfQoK%0AICAvKiogZ2V0IGNlbnRlciBwb2ludCBvZiBlZGdlIG9yIG5vZGUsIGluIERPTSBw%0AaXhlbHMgKi8KICBuMy5wcm90b3R5cGUuY29udmVydENvb3JkcyA9IGZ1bmN0aW9u%0AKGl0ZW0pIHsKICAgIHZhciBuMyA9IHRoaXM7CiAgICB2YXIgdHlwZSA9IGl0ZW0u%0AaW5sID8gJ2VkZ2UnIDogJ25vZGUnOwogICAgdmFyIG5vZGVET00gPSBuMy5jb250%0AYWluZXIuc2VsZWN0KCcuJyt0eXBlKydfJytpdGVtLmlkKS5ub2RlKCk7CiAgICB2%0AYXIgY3RtID0gbjMuY3RtOwogICAgdmFyIHgsIHk7CiAgICB2YXIgYmJveCA9IG5v%0AZGVET00uZ2V0QkJveCgpOwogICAgdmFyIGNlbnRlciA9IHsKICAgICAgeDogYmJv%0AeC54ICsgYmJveC53aWR0aC8yLAogICAgICB5OiBiYm94LnkgKyBiYm94LmhlaWdo%0AdC8yCiAgICB9CiAgICBpZiAodHlwZSA9PSAnbm9kZScpIHsKICAgICAgaWYgKG5v%0AZGVET00udGFnTmFtZSA9PSAncG9seWdvbicpIHsKICAgICAgICB2YXIgcG9pbnRz%0AID0gJCgncG9seWdvbi5ub2RlXycraXRlbS5pZCkuYXR0cigncG9pbnRzJykuc3Bs%0AaXQoJyAnKS5tYXAoZnVuY3Rpb24ocCkgeyAKICAgICAgICAgIHJldHVybiBwLnNw%0AbGl0KCcsJykubWFwKHBhcnNlRmxvYXQpOwogICAgICAgIH0pCiAgICAgICAgdmFy%0AIHBvaW50ID0gZmluZFBvbHlnb25JbnRlcnNlY3Rpb24ocG9pbnRzLCBbYmJveC54%0AICsgYmJveC53aWR0aCwgYmJveC55XSwgW2NlbnRlci54LCBjZW50ZXIueV0pCiAg%0AICAgICAgeCA9IHBvaW50WzBdOwogICAgICAgIHkgPSBwb2ludFsxXTsKICAgICAg%0AfSBlbHNlIHsKICAgICAgICB2YXIgc2l6ZSA9IHBhcnNlRmxvYXQobm9kZURPTS5n%0AZXRBdHRyaWJ1dGUoJ3InKSk7CiAgICAgICAgdmFyIGFuZ2xlID0gLU1hdGguUEkv%0ANDsKICAgICAgICB4ID0gY2VudGVyLnggKyBzaXplICogTWF0aC5jb3MoYW5nbGUp%0AOwogICAgICAgIHkgPSBjZW50ZXIueSArIHNpemUgKiBNYXRoLnNpbihhbmdsZSk7%0ACiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHggPSBjZW50ZXIueDsKICAgICAg%0AeSA9IGNlbnRlci55OwogICAgfQogICAgLy8gdmFyIG9mZnNldENvb3JkcyA9IG9m%0AZnNldExpbmUoIFtjZW50ZXIueCwgY2VudGVyLnldLFt4LCB5XSxuZHR2UHJvcGVy%0AdGllcy5ncmFwaC50b29sdGlwT2Zmc2V0KQogICAgLy8geCA9IG9mZnNldENvb3Jk%0Ac1swXTsKICAgIC8vIHkgPSBvZmZzZXRDb29yZHNbMV07CgogICAgdmFyIGxlZnQg%0APSAoeCpjdG0uYSkgKyBjdG0uZSAtIG4zLm9mZnNldC5sZWZ0IC0gJCh3aW5kb3cp%0ALnNjcm9sbExlZnQoKSArMTsKICAgIHZhciBib3R0b20gPSBuMy5oZWlnaHQgLSh5%0AKmN0bS5kKS1jdG0uZiArIG4zLm9mZnNldC50b3AgLSAkKHdpbmRvdykuc2Nyb2xs%0AVG9wKCkgKzE7CiAgICByZXR1cm4gW2xlZnQsIGJvdHRvbV07CiAgfQoKICAvKiog%0AaGlkZSB0aGUgdG9vbHRpcCBhbmQgdW5zZXQgdGhlIHNlbGVjdGVkIGdsb2JhbCAq%0ALwogIG4zLnByb3RvdHlwZS5oaWRlVG9vbHRpcCA9IGZ1bmN0aW9uKCkgewogICAg%0AdmFyIG4zID0gdGhpczsKICAgIG4zLnNlbGVjdGVkID0gbnVsbDsKICAgIG4zLnRv%0Ab2x0aXAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpOwogIH0KCiAgLyoqIHN0b3Ag%0AdGhlIGN1cnJlbnQgYW5pbWF0aW9uIGN5Y2xlCiAgKiBAcGFyYW0ge2Jvb2xlYW59%0AIC0gaWYgdHJ1ZSwgaW1tZWRpYXRlIGhhbHQgYWxsIGFjdGl2ZSB0cmFuc2l0aW9u%0AcyAob3RoZXJ3aXNlLCBsZXQgYW5pbWF0aW9uIGNvbnRpbnVlIHRvIG5leHQgdGlt%0AZSBzbGljZSkKICAqLwogIG4zLnByb3RvdHlwZS5lbmRBbmltYXRpb24gPSBmdW5j%0AdGlvbihub0hhbHQpewogICAgdmFyIG4zID0gdGhpczsKICAgIGNsZWFyVGltZW91%0AdChuMy5hbmltYXRlKTsKICAgIGlmICghIG5vSGFsdCkgewogICAgICBuMy5kb21U%0AYXJnZXQuc2VsZWN0QWxsKCcubm9kZSwgLmVkZ2UsIC5sYWJlbCwgLmQzLXNsaWRl%0Aci1oYW5kbGUnKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkKICAgIH0KICB9Cgog%0AIC8qKiBzdGVwIHRoZSBhbmltYXRpb24gYnkgb25lIHRpbWUgc2xpY2UKICAqIEBw%0AYXJhbSB7Ym9vbGVhbn0gLSBpZiB0cnVlLCBnbyB0byBwcmV2aW91cyB0aW1lIHNs%0AaWNlLCBlbHNlIGdvIGZvcndhcmQKICAqLwogIG4zLnByb3RvdHlwZS5zdGVwQW5p%0AbWF0aW9uID0gZnVuY3Rpb24ocmV2ZXJzZSkgewogICAgdmFyIG4zID0gdGhpczsK%0ACiAgICBuMy5lbmRBbmltYXRpb24oMSk7CiAgICBpZiAocmV2ZXJzZSkgewogICAg%0AICBuMy5hbmltYXRlR3JhcGgobjMuY3VyclRpbWUtMSwgbjMuY3VyclRpbWUtMSk7%0AIAogICAgfSBlbHNlIHsKICAgICAgbjMuYW5pbWF0ZUdyYXBoKG4zLmN1cnJUaW1l%0AKzEsIG4zLmN1cnJUaW1lKzEpOyAKICAgIH0KICB9CgogIC8qKiBhbmltYXRlIHRo%0AZSBncmFwaCBvdmVyIGFsbCB0aW1lIHNsaWNlcywgc3RhcnRpbmcgYXQgY3VycmVu%0AdCBzbGljZQogICogQHBhcmFtIHtib29sZWFufSAtIGlmIHRydWUsIGFuaW1hdGUg%0Ac2xpY2VzIGJhY2t3YXJkcyB1bnRpbCBiZWdpbm5pbmcgb2YgdGltZSBpbmRleCwg%0Ab3RoZXIgcGxheSB1bnRpbCBlbmQKICAqLwogIG4zLnByb3RvdHlwZS5wbGF5QW5p%0AbWF0aW9uID0gZnVuY3Rpb24ocmV2ZXJzZSkgewogICAgdmFyIG4zID0gdGhpczsK%0ACiAgICBuMy5lbmRBbmltYXRpb24oMSk7CiAgICBpZiAocmV2ZXJzZSkgeyAKICAg%0AICAgbjMuYW5pbWF0ZUdyYXBoKG4zLmN1cnJUaW1lLTEsIDApOyAKICAgIH0gZWxz%0AZSB7CiAgICAgIG4zLmFuaW1hdGVHcmFwaChuMy5jdXJyVGltZSsxKTsgCiAgICB9%0ACiAgfQogIHJldHVybiBuMzsKfSkpOwo8L3NjcmlwdD48L2hlYWQ+DQogIDxib2R5%0APjxzY3JpcHQ+DQogICAgLy9JTklUIEdSQVBIIERBVEEgSEVSRQ0KICB2YXIgZ3Jh%0AcGhEYXRhID0geyJyZW5kZXIiOlt7InN0YXJ0IjpbMF0sImVuZCI6WzFdLCJkYXRh%0AIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0%0AIjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIx%0AMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwi%0AMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVkZ2VzIjpbXX0sImNvb3Jk%0AIjpbWzEuMDk1MSwyLjY3MDFdLFsyLjc4NDcsLTAuNzcwNV0sWy0wLjQyNTIsLTIu%0AODUzNF0sWy0wLjgyODUsMC45OTU3XSxbMS4wMzc5LDAuODE3OF0sWy0xLjcxNzIs%0ALTIuNDAyNV0sWzIuODU3MSwwLjU1MDFdLFswLjg0NDQsLTEuMDQ4OV0sWy0yLjg1%0ANzEsMC4xMDEyXSxbLTEuMDI2OSwtMC44NzA5XSxbLTIuNjYyNywtMS4yNTUzXSxb%0AMC45MjE0LC0yLjc5NTRdLFsyLjI4MTQsMS44NzIyXSxbLTIuNTQzNCwxLjQwNDNd%0ALFsyLjE3MTEsLTIuMDMyOF0sWy0xLjU2MiwyLjQ3OThdLFstMC4yMTk1LDIuODUz%0ANF1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJlbHMiOltmYWxzZV0s%0AImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJl%0AZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9z%0AdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBO%0AZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwi%0AV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6WyJyZ2JhKDAsMCww%0ALDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgy%0AMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwy%0AMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwy%0AMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwx%0AKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwi%0AcmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiXSwidmVydGV4LmNleCI6WzAsMCwwLDAsMCwwLDAsMCwwLDAs%0AMCwwLDAsMCwwLDAsMF0sInZlcnRleC5jb2wiOlsicmdiYSgxNzksMTc5LDE3OSwx%0AKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwi%0AcmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2Jh%0AKDE3OSwxNzksMTc5LDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5%0AOSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSki%0ALCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgy%0ANTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSww%0ALDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSJdLCJl%0AZGdlLmNvbCI6W10sInZlcnRleC50b29sdGlwIjpbIjxiPk5hbWU6PFwvYj4gTlkg%0AVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwv%0AYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIi%0ALCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRvZGF5IDxicj4g%0APGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IExBIFRpbWVz%0AIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IE5l%0AdyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5h%0AbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwv%0AYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBG%0AT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEFC%0AQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEJCQyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9vIE5ld3MgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gR29vZ2xlIE5l%0Ad3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gUmV1%0AdGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwv%0AYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5h%0AbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBP%0AbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMyIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIz%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sInNsaWNlLnBhciI6eyJzdGFydCI6WzBd%0ALCJlbmQiOls1MF0sImludGVydmFsIjpbNF0sImFnZ3JlZ2F0ZS5kdXIiOls0XSwi%0AcnVsZSI6WyJhbnkiXX0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYs%0AMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQiOlsxXSwi%0AZW5kIjpbMl0sImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6%0AWzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6%0AWzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsx%0AMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRn%0AZXMiOnsiMSI6WzBdfX0sImNvb3JkIjpbWzIuODIxMywtMC4xNzQ3XSxbMi42MTU2%0ALC0xLjAzMDZdLFstMC44NTIxLC0yLjcyNTNdLFstMS4wMTkyLDIuNzg4Nl0sWzAu%0ANTc1NiwtMS4xNDIyXSxbLTIuMDU3NywtMi4wNjY5XSxbMS4wNjQ3LDAuODE1Nl0s%0AWzEuODM5MiwtMi4zMjA5XSxbLTEuMTg3MSwtMC42MzI3XSxbMS42NzgxLDIuNDMw%0ANV0sWy0yLjgyMTMsLTAuNzc4MV0sWzAuNDk0OCwtMi44NzcxXSxbMi42NzA0LDEu%0AMzU0NV0sWy0yLjc4ODcsMC42MjEyXSxbLTIuMjUwMSwxLjg4ODhdLFstMC43Mzkx%0ALDEuMTk2NF0sWzAuMzkyNCwyLjg3NzFdXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJk%0AaXNwbGF5bGFiZWxzIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hp%0Abmd0b24gUG9zdCIsIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJM%0AQSBUaW1lcyIsIk5ldyBZb3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdz%0AIiwiQUJDIiwiQkJDIiwiWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVy%0Acy5jb20iLCJOWVRpbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5j%0Ab20iXSwiYmciOlsicmdiYSgwLDAsMCwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgy%0AMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwy%0AMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwy%0AMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwx%0AKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwi%0AcmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIl0sInZlcnRleC5jZXgi%0AOlswLjQsMC40LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSwidmVydGV4%0ALmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwx%0AKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwi%0AcmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2Jh%0AKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTks%0ANzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwi%0AcmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1%0ALDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwx%0AKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMzXSwiZWRn%0AZS5jb2wiOlsicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpb%0AIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3Nw%0AYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlw%0AZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpv%0AdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwv%0AYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5O%0AYW1lOjxcL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIi%0ALCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9i%0APiBUViIsIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRW%0AIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYi%0ALCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5O%0AYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxc%0AL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5h%0AbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIs%0AIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9u%0AbGluZSIsIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20g%0APGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sInNsaWNl%0ALnBhciI6eyJzdGFydCI6WzBdLCJlbmQiOls1MF0sImludGVydmFsIjpbNF0sImFn%0AZ3JlZ2F0ZS5kdXIiOls0XSwicnVsZSI6WyJhbnkiXX0sImppdHRlciI6W2ZhbHNl%0AXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2%0AXX19LHsic3RhcnQiOlsyXSwiZW5kIjpbM10sImRhdGEiOnsiYWN0aXZlIjp7Im5v%0AZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2%0AIjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBd%0ALCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsx%0ANV0sIjE3IjpbMTZdfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpbMV19fSwiY29vcmQi%0AOltbMS45NTQzLC0xLjI3MTldLFsxLjMxMDIsLTAuNjE4NV0sWzIuNzgwNiwtMC45%0ANDAyXSxbLTAuMTc0NSwwLjk3MDldLFstMC4xMDg0LDIuODIyOF0sWy0yLjIzNDcs%0ALTEuOTEyNV0sWzIuODE0OSwwLjc3Ml0sWzEuMzM5LC0yLjczOTNdLFstMS4xNzc4%0ALC0yLjY3ODhdLFsxLjE1NjMsMi41NjczXSxbLTIuODE0OSwtMC43MjA5XSxbMC4w%0ANDE3LC0yLjgyMjhdLFsyLjA1MDksMS43NTJdLFstMi43ODE2LDAuNTIyXSxbLTIu%0AMjgwNywxLjYyNDhdLFstMC44Nzg2LC0wLjY4NTNdLFstMS4zODA1LDIuNDg4OV1d%0ALCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJlbHMiOltmYWxzZV0sImxh%0AYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJlZXQg%0ASm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9zdCIs%0AIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBOZXdz%0AIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwiV2Fz%0AaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6WyJyZ2JhKDAsMCwwLDEp%0AIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEs%0AMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIs%0AInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdi%0AYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiXSwidmVydGV4LmNleCI6WzAuOCwwLjQsMC40LDAsMCwwLDAsMCww%0ALDAsMCwwLDAsMCwwLDAsMF0sInZlcnRleC5jb2wiOlsicmdiYSgxNzksMTc5LDE3%0AOSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEp%0AIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1%0ANSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEs%0AMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdi%0AYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIx%0ANSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSJd%0ALCJlZGdlLmx3ZCI6WzcuMzMzMyw3LjMzMzNdLCJlZGdlLmNvbCI6WyJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwidmVydGV4LnRvb2x0%0AaXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4g%0ATmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBvc3QgPGJyPiA8%0AYj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FsbCBTdHJl%0AZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFt%0AZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIs%0AIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3Nw%0AYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+IDxiPlR5cGU6%0APFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJyPiA8Yj5UeXBl%0AOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxiPlR5cGU6PFwv%0AYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+VHlwZTo8XC9i%0APiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIs%0AIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5h%0AbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwi%0APGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25s%0AaW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxiPlR5cGU6PFwv%0AYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8YnI+IDxiPlR5%0AcGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uUG9zdC5j%0Ab20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gQU9M%0ALmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2UudG9vbHRpcCI6%0AWyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwi%0Ac2xpY2UucGFyIjp7InN0YXJ0IjpbMF0sImVuZCI6WzUwXSwiaW50ZXJ2YWwiOls0%0AXSwiYWdncmVnYXRlLmR1ciI6WzRdLCJydWxlIjpbImFueSJdfSwiaml0dGVyIjpb%0AZmFsc2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwy%0ALjk2MTZdfX0seyJzdGFydCI6WzNdLCJlbmQiOls0XSwiZGF0YSI6eyJhY3RpdmUi%0AOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1Ijpb%0ANF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEi%0AOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIx%0ANiI6WzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6%0AWzJdfX0sImNvb3JkIjpbWzEuODUxNCwtMS40MTI5XSxbMS4xMjI5LC0wLjgzNzFd%0ALFsyLjYzOTgsLTAuOTY1NF0sWzEuNTk0OSwtMi4yODQ1XSxbMC43NjU1LDEuMzA2%0AOV0sWy0xLjA1NjcsLTAuOTQ4XSxbMi44NzY5LDAuNzc3M10sWy0xLjc3NjEsMi4z%0AOTgyXSxbLTEuMzg3NywtMi41NDY4XSxbMC45NTIyLDIuODcwOF0sWy0yLjUxNTYs%0ALTEuNTIwMV0sWy0wLjA1MywtMi45MDMyXSxbMi4yMjMyLDIuMDA1Nl0sWy0yLjg3%0ANjksLTAuMTQxNl0sWy0yLjY4NTcsMS4yMjg1XSxbLTEuMDM0MiwwLjkwOTJdLFst%0AMC40NjY2LDIuOTAzMl1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJl%0AbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0%0AIiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwi%0ATmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJC%0AQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5Z%0AVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6%0AWyJyZ2JhKDAsMCwwLDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSki%0ALCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgy%0AMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwy%0AMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwy%0AMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwx%0AKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiXSwidmVydGV4LmNleCI6WzEuMiwwLjQs%0AMC40LDAuNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSwidmVydGV4LmNvbCI6%0AWyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJn%0AYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgx%0ANzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1NSw5%0AOSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSki%0ALCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgy%0ANTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSww%0ALDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJn%0AYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMzLDcuMzMzMyw3XSwi%0AZWRnZS5jb2wiOlsicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxi%0APk5hbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBl%0AciIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8%0AXC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJu%0AYWwgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4g%0AVVNBIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1l%0AOjxcL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8%0AYj5OYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5l%0Ad3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBU%0AViIsIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwi%0APGI+TmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8%0AYj5OYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1l%0AOjxcL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+%0AIFlhaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6%0APFwvYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxi%0APk5hbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGlu%0AZSIsIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4g%0APGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJy%0APiA8Yj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sInNsaWNlLnBh%0AciI6eyJzdGFydCI6WzBdLCJlbmQiOls1MF0sImludGVydmFsIjpbNF0sImFnZ3Jl%0AZ2F0ZS5kdXIiOls0XSwicnVsZSI6WyJhbnkiXX0sImppdHRlciI6W2ZhbHNlXSwi%0AeGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19%0ALHsic3RhcnQiOls0XSwiZW5kIjpbNV0sImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVz%0AIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2Ijpb%0ANV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIx%0AMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0s%0AIjE3IjpbMTZdfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6%0AWzNdfX0sImNvb3JkIjpbWzAuOTI5MywtMS45MzJdLFsxLjMyMzEsLTEuMDQ0M10s%0AWzAuMDIzNiwtMS41OTE2XSxbMS44MzUsLTIuMjEwM10sWy0yLjg3MDIsMC44ODg1%0AXSxbLTIuOTYwNSwtMC41NDQxXSxbMi41MjE4LDEuMDU2OV0sWy0yLjAyODUsMi4w%0AMzE2XSxbLTEuNTcyNiwtMi43NDRdLFstMC44ODQ2LDIuNjYwNl0sWy0yLjQyMzcs%0ALTEuNzEwMl0sWzIuOTYwNSwtMC4yMTg5XSxbMC4zNDgxLDEuMjA4N10sWy0xLjM4%0ANjQsMC4yOTcyXSxbMC41MjU4LC0yLjgwMjJdLFswLjUwNzgsMi44MDIyXSxbMS44%0AMDQxLDIuMTM1MV1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJlbHMi%0AOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0Iiwi%0AV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwiTmV3%0AIFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJCQkMi%0ALCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5ZVGlt%0AZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6WyJy%0AZ2JhKDAsMCwwLDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSgyMjEsMjIxLDIy%0AMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEp%0AIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJy%0AZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEs%0AMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIs%0AInJnYmEoMjIxLDIyMSwyMjEsMSkiXSwidmVydGV4LmNleCI6WzEuNiwwLjQsMC40%0ALDAuNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAuNCwwLDBdLCJ2ZXJ0ZXguY29sIjpb%0AInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdi%0AYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3%0AOSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMjU1LDk5%0ALDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIs%0AInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1%0ANSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAs%0AMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdi%0AYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMzLDcsNi42%0ANjY3XSwiZWRnZS5jb2wiOlsicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2Fz%0AaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5O%0AYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlw%0AZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IExBIFRpbWVzIDxicj4g%0APGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3Jr%0AIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwv%0AYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gTVNO%0AQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3%0AcyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5j%0Ab20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gTllU%0AaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwv%0AYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUi%0ALCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGlu%0AZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIz%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiA0Il0sInNsaWNlLnBhciI6eyJzdGFydCI6WzBdLCJlbmQi%0AOls1MF0sImludGVydmFsIjpbNF0sImFnZ3JlZ2F0ZS5kdXIiOls0XSwicnVsZSI6%0AWyJhbnkiXX0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2%0AXSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQiOls1XSwiZW5kIjpb%0ANl0sImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIz%0AIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5%0AIjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0%0AIjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRnZXMiOnsi%0AMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF19fSwiY29vcmQi%0AOltbMC45ODIsLTEuOTEyMl0sWzEuMzE4NywtMV0sWzAuMDU2OSwtMS42MjUyXSxb%0AMS45MDQ0LC0yLjEzODhdLFstMi44OTc4LDAuODE4Ml0sWy0yLjk1NzgsLTAuNjMx%0AN10sWzIuNDgyMiwxLjExOThdLFstMi4wNzY1LDEuOTY5Nl0sWy0xLjUwNiwtMi44%0AMDAzXSxbLTAuOTU4NSwyLjYzNzddLFstMi4zODM4LC0xLjc4N10sWzIuOTU3OCwt%0AMC4xMzc0XSxbMC4yNzI3LDEuMjAwNV0sWy0xLjQxOTEsMC4yMTc4XSxbMC42MjYz%0ALC0yLjc5OTNdLFswLjQzLDIuODAwM10sWzEuNzM2MSwyLjE3NjldXSwidXNlYXJy%0Ab3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxzIjpbZmFsc2VdLCJsYWJlbCI6WyJO%0AWSBUaW1lcyIsIldhc2hpbmd0b24gUG9zdCIsIldhbGwgU3RyZWV0IEpvdXJuYWwi%0ALCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5ldyBZb3JrIFBvc3QiLCJDTk4iLCJN%0AU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJDIiwiWWFob28gTmV3cyIsIkdvb2ds%0AZSBOZXdzIiwiUmV1dGVycy5jb20iLCJOWVRpbWVzLmNvbSIsIldhc2hpbmd0b25Q%0Ab3N0LmNvbSIsIkFPTC5jb20iXSwiYmciOlsicmdiYSgwLDAsMCwxKSJdLCJ2ZXJ0%0AZXguYm9yZGVyIjpbInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEs%0AMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIs%0AInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdi%0AYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIy%0AMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEp%0AIl0sInZlcnRleC5jZXgiOlsyLDAuOCwwLjQsMC40LDAsMCwwLDAsMCwwLDAsMCww%0ALDAsMC40LDAsMF0sInZlcnRleC5jb2wiOlsicmdiYSgxNzksMTc5LDE3OSwxKSIs%0AInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdi%0AYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3%0AOSwxNzksMTc5LDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3%0AMSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJy%0AZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUs%0AMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEp%0AIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdl%0ALmx3ZCI6WzcuMzMzMyw3LjMzMzMsNyw2LjY2NjcsNy42NjY3XSwiZWRnZS5jb2wi%0AOlsicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxiPk5hbWU6PFwvYj4gTlkg%0AVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwv%0AYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIi%0ALCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRvZGF5IDxicj4g%0APGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IExBIFRpbWVz%0AIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IE5l%0AdyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5h%0AbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwv%0AYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBG%0AT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEFC%0AQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEJCQyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9vIE5ld3MgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gR29vZ2xlIE5l%0Ad3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gUmV1%0AdGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwv%0AYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5h%0AbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBP%0AbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMyIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIz%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sInNsaWNlLnBhciI6eyJzdGFydCI6WzBd%0ALCJlbmQiOls1MF0sImludGVydmFsIjpbNF0sImFnZ3JlZ2F0ZS5kdXIiOls0XSwi%0AcnVsZSI6WyJhbnkiXX0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYs%0AMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQiOls2XSwi%0AZW5kIjpbN10sImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6%0AWzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6%0AWzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsx%0AMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRn%0AZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYi%0AOls1XX19LCJjb29yZCI6W1swLjk0NDQsLTEuOTk5NV0sWzAuODM4MywtMS4wNTU0%0AXSxbMC4wOTc1LC0xLjU1NTRdLFsxLjg5MDEsLTEuOTg1Ml0sWy0yLjgwMzYsMS4w%0AOTA2XSxbLTIuOTU1NiwtMC4zNTY2XSxbMi42MDc0LDAuOTQ4OF0sWy0xLjg4ODMs%0AMi4xOThdLFstMS42NTk2LC0yLjYwODRdLFstMC43MDI0LDIuNzc3Nl0sWy0yLjQ2%0AMDMsLTEuNTQ5NF0sWzIuOTU1NiwtMC4zMTE0XSxbMS45NzQzLDIuMDcyNV0sWy0x%0ALjM4NTIsMC40NDA2XSxbMC41MjM5LC0yLjgzOTddLFswLjQxNzIsMS4zMDM3XSxb%0AMC43MjQ1LDIuODM5N11dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJl%0AbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0%0AIiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwi%0ATmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJC%0AQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5Z%0AVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6%0AWyJyZ2JhKDAsMCwwLDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSki%0ALCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgy%0AMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwy%0AMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwy%0AMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwx%0AKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiXSwidmVydGV4LmNleCI6WzIsMS4yLDAu%0AOCwwLjQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLjQsMCwwXSwidmVydGV4LmNvbCI6%0AWyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJn%0AYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgx%0ANzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1NSw5%0AOSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSki%0ALCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgy%0ANTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSww%0ALDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJn%0AYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMzLDcuMzMzMyw3LDYu%0ANjY2Nyw3LjY2NjcsN10sImVkZ2UuY29sIjpbInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSJdLCJ2ZXJ0ZXgudG9vbHRpcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRp%0AbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+%0AIFdhc2hpbmd0b24gUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwi%0APGI+TmFtZTo8XC9iPiBXYWxsIFN0cmVldCBKb3VybmFsIDxicj4gPGI+VHlwZTo8%0AXC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxi%0APlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8%0AYnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcg%0AWW9yayBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1l%0AOjxcL2I+IENOTiA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+%0AIE1TTkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gRk9Y%0AIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMg%0APGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8%0AYj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4g%0APGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdz%0AIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRl%0AcnMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+%0AIE5ZVGltZXMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1l%0AOjxcL2I+IFdhc2hpbmd0b25Qb3N0LmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25s%0AaW5lIiwiPGI+TmFtZTo8XC9iPiBBT0wuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBP%0AbmxpbmUiXSwiZWRnZS50b29sdGlwIjpbIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjAiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiA1IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gNCJdLCJzbGljZS5wYXIiOnsic3RhcnQiOlswXSwi%0AZW5kIjpbNTBdLCJpbnRlcnZhbCI6WzRdLCJhZ2dyZWdhdGUuZHVyIjpbNF0sInJ1%0AbGUiOlsiYW55Il19LCJqaXR0ZXIiOltmYWxzZV0sInhsaW0iOlstMy4yMDQ2LDMu%0AMjA0Nl0sInlsaW0iOlstMi45NjE2LDIuOTYxNl19fSx7InN0YXJ0IjpbN10sImVu%0AZCI6WzhdLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsx%0AXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3%0AXSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJd%0ALCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVkZ2Vz%0AIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2Ijpb%0ANV0sIjciOls2XX19LCJjb29yZCI6W1swLjY1NzYsLTIuMDM2N10sWy0wLjE4MjQs%0ALTIuNDQ3OF0sWy0wLjE0MSwtMS41MzA5XSxbMS4zMDAzLC0xLjMxMDhdLFstMi44%0ANzUyLDAuOTAzXSxbLTIuOTQwMSwtMC40NjgzXSxbMi42NDgyLDAuNjg4Nl0sWy0x%0ALjk1ODUsMi4xNDIzXSxbLTEuMDUzNCwtMi43MDI3XSxbLTAuNjczNywyLjY2Nzld%0ALFstMi42NTgyLC0xLjczOTFdLFsyLjk0MDEsLTAuNjUzNl0sWzIuMDQzOSwxLjg4%0AMDhdLFstMS4zNTI1LDAuNjczNl0sWzEuMzM5MywtMi42NzA1XSxbMC41NzM3LDEu%0AMTk0NV0sWzAuNzUwNywyLjcwMjddXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNw%0AbGF5bGFiZWxzIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0%0Ab24gUG9zdCIsIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBU%0AaW1lcyIsIk5ldyBZb3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwi%0AQUJDIiwiQkJDIiwiWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5j%0Ab20iLCJOWVRpbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20i%0AXSwiYmciOlsicmdiYSgwLDAsMCwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEs%0AMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIs%0AInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdi%0AYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIl0sInZlcnRleC5jZXgiOlsy%0ALDEuNiwwLjgsMC40LDAsMCwwLDAsMC40LDAsMCwwLDAsMCwwLjQsMCwwXSwidmVy%0AdGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3%0AOSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEp%0AIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUs%0AOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEp%0AIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEo%0AMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUs%0AMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMzLDcu%0AMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzNdLCJlZGdlLmNvbCI6WyJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwi%0AdmVydGV4LnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxi%0APlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9u%0AIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwv%0AYj4gV2FsbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3Bh%0AcGVyIiwiPGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8%0AYnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4g%0APGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4g%0APGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlw%0AZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9i%0APiBUViIsIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwv%0AYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+%0AIDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNv%0AbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNo%0AaW5ndG9uUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5h%0AbWU6PFwvYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVk%0AZ2UudG9vbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gNSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIz%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDQiXSwic2xpY2UucGFyIjp7InN0YXJ0IjpbMF0sImVuZCI6WzUwXSwi%0AaW50ZXJ2YWwiOls0XSwiYWdncmVnYXRlLmR1ciI6WzRdLCJydWxlIjpbImFueSJd%0AfSwiaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGlt%0AIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6WzhdLCJlbmQiOls5XSwiZGF0%0AYSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwi%0ANCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwi%0AMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10s%0AIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0s%0AIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0s%0AIjgiOls3XX19LCJjb29yZCI6W1swLjc0MzksLTEuODE0NV0sWy0wLjIyNjQsLTIu%0AMDAxNV0sWzAuMTA5LC0xLjE0MTNdLFsxLjUxOTksLTEuMTg4MV0sWy0xLjgxODgs%0AMC44NjgyXSxbLTMuMDU1MSwwLjIzMDddLFsyLjU5NDcsMS4wMzYxXSxbLTIuMjg3%0ANiwxLjk5ODFdLFstMS4xODYyLC0xLjczNzFdLFstMC41NTIxLC0yLjg4MThdLFst%0AMi45MjI1LC0xLjI1MDhdLFszLjA1NTEsLTAuMjc4OV0sWzEuODkyNywyLjExOTJd%0ALFstMC45Njg1LDIuNjY3Ml0sWzEuMzkyNywtMi40OTddLFswLjMzNzEsMS41MTIz%0AXSxbMC41MzUxLDIuODgxOF1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXls%0AYWJlbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQ%0Ab3N0IiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVz%0AIiwiTmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMi%0ALCJCQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIs%0AIk5ZVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJi%0AZyI6WyJyZ2JhKDAsMCwwLDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEs%0AMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIs%0AInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdi%0AYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIy%0AMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiXSwidmVydGV4LmNleCI6WzIsMiww%0ALjgsMC40LDAsMCwwLDAsMC40LDAuNCwwLDAsMCwwLDAuNCwwLDBdLCJ2ZXJ0ZXgu%0AY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEp%0AIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEo%0AMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3%0AMSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJy%0AZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUs%0AMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEp%0AIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMz%0ALDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2NjddLCJlZGdlLmNvbCI6WyJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwidmVydGV4LnRvb2x0aXAiOlsiPGI+TmFt%0AZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwi%0APGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FsbCBTdHJlZXQgSm91cm5hbCA8%0AYnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBVU0Eg%0AVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwv%0AYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5h%0AbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3Bh%0AcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwi%0APGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5O%0AYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5h%0AbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwv%0AYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gWWFo%0Ab28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9i%0APiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFt%0AZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwi%0APGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25s%0AaW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uUG9zdC5jb20gPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gQU9MLmNvbSA8YnI+IDxi%0APlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2UudG9vbHRpcCI6WyI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwic2xpY2UucGFyIjp7%0AInN0YXJ0IjpbMF0sImVuZCI6WzUwXSwiaW50ZXJ2YWwiOls0XSwiYWdncmVnYXRl%0ALmR1ciI6WzRdLCJydWxlIjpbImFueSJdfSwiaml0dGVyIjpbZmFsc2VdLCJ4bGlt%0AIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJz%0AdGFydCI6WzldLCJlbmQiOlsxMF0sImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7%0AIjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0s%0AIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6%0AWzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3%0AIjpbMTZdfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNd%0ALCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XX19LCJjb29y%0AZCI6W1swLjY5MTYsLTEuODM2N10sWy0wLjI4MDUsLTIuMDEzNV0sWzAuMDY0NSwt%0AMS4xNTc2XSxbMS40NzYsLTEuMjIzMl0sWy0xLjM2NDgsMS4yMDA5XSxbLTIuOTk2%0ANCwwLjA4NjFdLFsyLjU1MDYsMS4wMzk5XSxbLTIuNjkxNiwxLjQ4MTddLFstMS4y%0AMzE2LC0xLjcyXSxbLTAuNjIyNSwtMi44ODkzXSxbLTIuOTcxOCwtMS4zMjQ0XSxb%0AMi45OTY0LC0wLjI5MzVdLFsxLjgwMDYsMi4yNDI3XSxbLTEuMzUwOSwyLjYyMDVd%0ALFsxLjMyNjQsLTIuNTMyOV0sWzAuNjIzLDEuNTYzMV0sWzAuMTQzNSwyLjg4OTNd%0AXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxzIjpbZmFsc2VdLCJs%0AYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9zdCIsIldhbGwgU3RyZWV0%0AIEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5ldyBZb3JrIFBvc3Qi%0ALCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJDIiwiWWFob28gTmV3%0AcyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJOWVRpbWVzLmNvbSIsIldh%0Ac2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmciOlsicmdiYSgwLDAsMCwx%0AKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSki%0ALCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgy%0AMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwy%0AMjEsMjIxLDEpIl0sInZlcnRleC5jZXgiOlsyLjQsMiwxLjIsMC40LDAsMCwwLDAs%0AMC40LDAuNCwwLDAsMCwwLDAuNCwwLDBdLCJ2ZXJ0ZXguY29sIjpbInJnYmEoMTc5%0ALDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5%0ALDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5%0ALDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwi%0AcmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1%0ALDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSwyMTUsMCwx%0AKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2Jh%0AKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1%0ALDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMzLDcsNi42NjY3LDcuNjY2%0ANyw3LDAuMzMzMywxLjY2NjcsN10sImVkZ2UuY29sIjpbInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSJdLCJ2ZXJ0ZXgudG9vbHRpcCI6%0AWyI8Yj5OYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdz%0AcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b24gUG9zdCA8YnI+IDxiPlR5%0AcGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYWxsIFN0cmVldCBK%0Ab3VybmFsIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxc%0AL2I+IFVTQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+%0ATmFtZTo8XC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVy%0AIiwiPGI+TmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0IDxicj4gPGI+VHlwZTo8XC9i%0APiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENOTiA8YnI+IDxiPlR5cGU6PFwv%0AYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxicj4gPGI+VHlwZTo8XC9iPiBU%0AViIsIjxiPk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IFRW%0AIiwiPGI+TmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+%0ATmFtZTo8XC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8%0AXC9iPiBZYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5O%0AYW1lOjxcL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUi%0ALCI8Yj5OYW1lOjxcL2I+IFJldXRlcnMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBP%0AbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMuY29tIDxicj4gPGI+VHlwZTo8%0AXC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b25Qb3N0LmNvbSA8%0AYnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBBT0wuY29t%0AIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwiZWRnZS50b29sdGlwIjpbIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjAiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA1IiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCJdLCJzbGlj%0AZS5wYXIiOnsic3RhcnQiOlswXSwiZW5kIjpbNTBdLCJpbnRlcnZhbCI6WzRdLCJh%0AZ2dyZWdhdGUuZHVyIjpbNF0sInJ1bGUiOlsiYW55Il19LCJqaXR0ZXIiOltmYWxz%0AZV0sInhsaW0iOlstMy4yMDQ2LDMuMjA0Nl0sInlsaW0iOlstMi45NjE2LDIuOTYx%0ANl19fSx7InN0YXJ0IjpbMTBdLCJlbmQiOlsxMV0sImRhdGEiOnsiYWN0aXZlIjp7%0AIm5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRd%0ALCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpb%0AMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYi%0AOlsxNV0sIjE3IjpbMTZdfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsy%0AXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4%0AXSwiMTAiOls5XX19LCJjb29yZCI6W1swLjYwMSwtMi4wMDc4XSxbLTAuMzg0OCwt%0AMi4wMjYzXSxbMC4xNjI4LC0xLjIzODZdLFsxLjA5NiwtMS4xNDE0XSxbLTEuMjQz%0ANCwxLjI2NDhdLFstMi45NDcxLDAuMjcyNl0sWzIuNjg3NCwwLjgxMjVdLFstMi41%0ANDI3LDEuNjQ0OV0sWy0xLjI5MjQsLTEuNjI5NV0sWy0wLjc5MTQsLTIuODcxNV0s%0AWy0zLjAwNjIsLTEuMTI4M10sWzMuMDA2MiwtMC41Nzg1XSxbMi4wMjk1LDIuMDcx%0AOF0sWy0xLjEzMzgsMi42ODY5XSxbMS4zNjksLTIuNTI5NV0sWzAuNzg3MSwxLjU4%0ANjFdLFswLjM3NTksMi44NzE1XV0sInVzZWFycm93cyI6W2ZhbHNlXSwiZGlzcGxh%0AeWxhYmVscyI6W2ZhbHNlXSwibGFiZWwiOlsiTlkgVGltZXMiLCJXYXNoaW5ndG9u%0AIFBvc3QiLCJXYWxsIFN0cmVldCBKb3VybmFsIiwiVVNBIFRvZGF5IiwiTEEgVGlt%0AZXMiLCJOZXcgWW9yayBQb3N0IiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3cyIsIkFC%0AQyIsIkJCQyIsIllhaG9vIE5ld3MiLCJHb29nbGUgTmV3cyIsIlJldXRlcnMuY29t%0AIiwiTllUaW1lcy5jb20iLCJXYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wuY29tIl0s%0AImJnIjpbInJnYmEoMCwwLDAsMSkiXSwidmVydGV4LmJvcmRlciI6WyJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIy%0AMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEp%0AIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJy%0AZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSJdLCJ2ZXJ0ZXguY2V4IjpbMi40%0ALDIsMS42LDAuOCwwLDAsMCwwLDAuNCwwLjQsMCwwLDAsMCwwLjQsMCwwXSwidmVy%0AdGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3%0AOSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEp%0AIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUs%0AOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEp%0AIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEo%0AMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUs%0AMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMzLDcu%0AMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42NjY3LDcsNy4zMzMzXSwi%0AZWRnZS5jb2wiOlsicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpb%0AIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3Nw%0AYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlw%0AZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpv%0AdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwv%0AYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5O%0AYW1lOjxcL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIi%0ALCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9i%0APiBUViIsIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRW%0AIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYi%0ALCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5O%0AYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxc%0AL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5h%0AbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIs%0AIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9u%0AbGluZSIsIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20g%0APGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sInNsaWNl%0ALnBhciI6eyJzdGFydCI6WzBdLCJlbmQiOls1MF0sImludGVydmFsIjpbNF0sImFn%0AZ3JlZ2F0ZS5kdXIiOls0XSwicnVsZSI6WyJhbnkiXX0sImppdHRlciI6W2ZhbHNl%0AXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2%0AXX19LHsic3RhcnQiOlsxMV0sImVuZCI6WzEyXSwiZGF0YSI6eyJhY3RpdmUiOnsi%0Abm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0s%0AIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsx%0AMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6%0AWzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJd%0ALCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6Wzhd%0ALCIxMCI6WzldLCIxMSI6WzEwXX19LCJjb29yZCI6W1swLjc2ODIsLTEuNzMxNF0s%0AWy0wLjIxNSwtMS44NTg4XSxbMC4yNjI0LC0wLjk5NDddLFsxLjI0NTMsLTAuODY4%0ANl0sWy0wLjA4MzMsLTAuMDg0MV0sWy0zLjA0NDYsMC4xNzkxXSxbMi40NDI2LDEu%0ANDY2M10sWy0yLjYwNjcsMS4zMzA3XSxbLTEuMjEwMiwtMS43NTY1XSxbLTAuNDMx%0ANCwtMi43OTI1XSxbLTMuMDA2NSwtMS4yNjAyXSxbMy4wNDQ2LDAuMDkyN10sWzEu%0ANTE1MSwyLjMzNTJdLFstMC43Njk2LDIuNjg5Ml0sWzEuNTc4OSwtMi4yMTUxXSxb%0ALTEuODU5LDIuMjU2N10sWzAuMzk3NCwyLjc5MjVdXSwidXNlYXJyb3dzIjpbZmFs%0Ac2VdLCJkaXNwbGF5bGFiZWxzIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIs%0AIldhc2hpbmd0b24gUG9zdCIsIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9k%0AYXkiLCJMQSBUaW1lcyIsIk5ldyBZb3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZP%0AWCBOZXdzIiwiQUJDIiwiQkJDIiwiWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwi%0AUmV1dGVycy5jb20iLCJOWVRpbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIs%0AIkFPTC5jb20iXSwiYmciOlsicmdiYSgwLDAsMCwxKSJdLCJ2ZXJ0ZXguYm9yZGVy%0AIjpbInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwi%0AcmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSki%0ALCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIl0sInZlcnRl%0AeC5jZXgiOlsyLjQsMiwyLDAuOCwwLjQsMCwwLDAsMC40LDAuNCwwLDAsMCwwLDAu%0ANCwwLDBdLCJ2ZXJ0ZXguY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2Jh%0AKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5%0ALDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5%0ALDE3OSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSki%0ALCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgy%0ANTUsOTksNzEsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSww%0ALDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJn%0AYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5sd2Qi%0AOls3LjMzMzMsNy4zMzMzLDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2Njcs%0ANyw3LjMzMzMsMC4zMzMzXSwiZWRnZS5jb2wiOlsicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxiPk5hbWU6%0APFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxi%0APk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBO%0AZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRv%0AZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+%0AIExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1l%0AOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBl%0AciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxi%0APk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFt%0AZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1l%0AOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+%0AIEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9v%0AIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4g%0AR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6%0APFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxi%0APk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGlu%0AZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4gPGI+VHlw%0AZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Iiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sInNsaWNlLnBhciI6eyJz%0AdGFydCI6WzBdLCJlbmQiOls1MF0sImludGVydmFsIjpbNF0sImFnZ3JlZ2F0ZS5k%0AdXIiOls0XSwicnVsZSI6WyJhbnkiXX0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6%0AWy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3Rh%0AcnQiOlsxMl0sImVuZCI6WzEzXSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsi%0AMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwi%0ANyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpb%0AMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTci%0AOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10s%0AIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6Wzld%0ALCIxMSI6WzEwXSwiMTIiOlsxMV19fSwiY29vcmQiOltbMC44OTg4LC0xLjgwODVd%0ALFstMC4wNzE0LC0xLjc5NjhdLFswLjU1NDEsLTAuOTU2OF0sWzEuNTc5OCwtMS4x%0AMjU2XSxbMS4wNzA1LC0wLjA1NjZdLFstMy4wNDU1LDAuMTI3OF0sWzEuOTk5MSwy%0ALjEyMTNdLFstMC4xNTMzLC0wLjIxNDRdLFstMS4wODQ5LC0xLjcyMzhdLFstMC4z%0AOTI0LC0yLjc0XSxbLTIuOTkzNiwtMS40MDI3XSxbMC43MzAzLDIuNzEyMl0sWy0w%0ALjU1NTEsMi43NF0sWy0yLjU4MjcsMS4zNTY2XSxbMS41OTI2LC0yLjQ1NDldLFst%0AMS43MDU1LDIuMjU0N10sWzMuMDQ1NSwwLjc4MjJdXSwidXNlYXJyb3dzIjpbZmFs%0Ac2VdLCJkaXNwbGF5bGFiZWxzIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIs%0AIldhc2hpbmd0b24gUG9zdCIsIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9k%0AYXkiLCJMQSBUaW1lcyIsIk5ldyBZb3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZP%0AWCBOZXdzIiwiQUJDIiwiQkJDIiwiWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwi%0AUmV1dGVycy5jb20iLCJOWVRpbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIs%0AIkFPTC5jb20iXSwiYmciOlsicmdiYSgwLDAsMCwxKSJdLCJ2ZXJ0ZXguYm9yZGVy%0AIjpbInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwi%0AcmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSki%0ALCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIl0sInZlcnRl%0AeC5jZXgiOlsyLjQsMiwyLjQsMC44LDAuNCwwLDAsMC40LDAuNCwwLjQsMCwwLDAs%0AMCwwLjQsMCwwXSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwi%0AcmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2Jh%0AKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5%0ALDE3OSwxNzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcx%0ALDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJn%0AYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwy%0AMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSki%0ALCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2Uu%0AbHdkIjpbNy4zMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42%0ANjY3LDcsNy4zMzMzLDAuMzMzMywxLjMzMzNdLCJlZGdlLmNvbCI6WyJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiXSwidmVydGV4LnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8%0AYnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNo%0AaW5ndG9uIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5h%0AbWU6PFwvYj4gV2FsbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4g%0ATmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8%0AYj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsg%0AUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9i%0APiBDTk4gPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05C%0AQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdz%0AIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4g%0APGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlw%0AZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNv%0AbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRp%0AbWVzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9i%0APiBXYXNoaW5ndG9uUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIs%0AIjxiPk5hbWU6PFwvYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5l%0AIl0sImVkZ2UudG9vbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gNSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDQiXSwic2xpY2UucGFyIjp7InN0YXJ0IjpbMF0sImVuZCI6%0AWzUwXSwiaW50ZXJ2YWwiOls0XSwiYWdncmVnYXRlLmR1ciI6WzRdLCJydWxlIjpb%0AImFueSJdfSwiaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIwNDZd%0ALCJ5bGltIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6WzEzXSwiZW5kIjpb%0AMTRdLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwi%0AMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwi%0AOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIx%0ANCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVkZ2VzIjp7%0AIjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0s%0AIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6%0AWzExXSwiMTMiOlsxMl19fSwiY29vcmQiOltbMC44NjU0LC0xLjkwNDldLFstMC4y%0ANzEyLC0yLjEyMTddLFswLjE3MzEsLTEuMzU1XSxbMS4xNzIsLTEuMDMyOF0sWzAu%0AMjA1MywtMC4zMTMzXSxbLTIuOTY1NiwwLjQ2Ml0sWzIuMzUwMiwxLjU2OF0sWy0w%0ALjc5ODQsLTAuOTI3NV0sWy0xLjEyNTcsLTIuNjIxNV0sWzAuMjYzMiwtMi41NDk2%0AXSxbLTMuMTMzMiwtMS4wOTg5XSxbMS4yNTE0LDIuMzU1NV0sWzAuMDAwNywyLjYy%0AMTVdLFstMi4yNjY3LDEuNjI2Nl0sWzEuODExNywtMi4yMTU1XSxbLTEuMjI4MSwy%0ALjM2NzVdLFszLjEzMzIsMC4yMTRdXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNw%0AbGF5bGFiZWxzIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0%0Ab24gUG9zdCIsIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBU%0AaW1lcyIsIk5ldyBZb3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwi%0AQUJDIiwiQkJDIiwiWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5j%0Ab20iLCJOWVRpbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20i%0AXSwiYmciOlsicmdiYSgwLDAsMCwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEs%0AMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIs%0AInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdi%0AYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIl0sInZlcnRleC5jZXgiOlsy%0ALjQsMiwyLjgsMC44LDAuNCwwLDAsMC40LDAuNCwwLjgsMCwwLDAsMCwwLjQsMCww%0AXSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzks%0AMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzks%0AMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzks%0AMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdi%0AYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5%0ALDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIs%0AInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1%0ANSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4z%0AMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42NjY3LDcsNy4z%0AMzMzLDAuMzMzMywxLjMzMzMsMC42NjY3XSwiZWRnZS5jb2wiOlsicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxiPk5h%0AbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIs%0AIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9i%0APiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNB%0AIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxc%0AL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5O%0AYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3Nw%0AYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBUViIs%0AIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+%0ATmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5O%0AYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxc%0AL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlh%0AaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwv%0AYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5h%0AbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIs%0AIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9u%0AbGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4gPGI+%0AVHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8%0AYj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sInNsaWNlLnBhciI6%0AeyJzdGFydCI6WzBdLCJlbmQiOls1MF0sImludGVydmFsIjpbNF0sImFnZ3JlZ2F0%0AZS5kdXIiOls0XSwicnVsZSI6WyJhbnkiXX0sImppdHRlciI6W2ZhbHNlXSwieGxp%0AbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsi%0Ac3RhcnQiOlsxNF0sImVuZCI6WzE1XSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMi%0AOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1%0AXSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEy%0AIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwi%0AMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0Ijpb%0AM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6%0AWzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXX19LCJj%0Ab29yZCI6W1swLjk4MjMsLTEuNjExOF0sWzAuMTUzNCwtMS45OTI5XSxbMC4xNDUs%0ALTAuOTY4OF0sWzEuMTkyNSwtMC43NzEzXSxbLTAuMzQzOSwtMC4wMjI0XSxbLTIu%0AODc3LDEuMDk2OV0sWzIuMjAzOCwyLjE2NDddLFstMC45NDYzLC0wLjc2MDFdLFst%0AMC4yMTYxLC0yLjg5MjZdLFstMC42NjQ1LC0xLjY2MjRdLFswLjYxNCwwLjAyMzld%0ALFstMC41NzU3LDIuODkyNl0sWzMuMjA0NiwwLjczOTFdLFstMy4yMDQ2LC0wLjcx%0AMjldLFsxLjk0NDksLTEuODgwNF0sWy0xLjg5OCwyLjI5MV0sWzAuODYwNiwyLjg2%0AMDRdXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxzIjpbZmFsc2Vd%0ALCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9zdCIsIldhbGwgU3Ry%0AZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5ldyBZb3JrIFBv%0Ac3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJDIiwiWWFob28g%0ATmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJOWVRpbWVzLmNvbSIs%0AIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmciOlsicmdiYSgwLDAs%0AMCwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJy%0AZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEs%0AMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIs%0AInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdi%0AYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIl0sInZlcnRleC5jZXgiOlsyLjQsMiwzLjIsMC44LDAuNCww%0ALDAsMC40LDAuNCwwLjgsMC40LDAsMCwwLDAuNCwwLDBdLCJ2ZXJ0ZXguY29sIjpb%0AInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdi%0AYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3%0AOSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMjU1LDk5%0ALDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIs%0AInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1%0ANSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAs%0AMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdi%0AYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMzLDcsNi42%0ANjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2NjcsNyw3LjMzMzMsMC4zMzMzLDEuMzMz%0AMywwLjY2NjcsMC4zMzMzXSwiZWRnZS5jb2wiOlsicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29s%0AdGlwIjpbIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4g%0APGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3Ry%0AZWV0IEpvdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5h%0AbWU6PFwvYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIi%0ALCI8Yj5OYW1lOjxcL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdz%0AcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlw%0AZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwv%0AYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYi%0ALCI8Yj5OYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5O%0AYW1lOjxcL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIs%0AIjxiPk5hbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9u%0AbGluZSIsIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3Qu%0AY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFP%0ATC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAi%0AOlsiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0s%0AInNsaWNlLnBhciI6eyJzdGFydCI6WzBdLCJlbmQiOls1MF0sImludGVydmFsIjpb%0ANF0sImFnZ3JlZ2F0ZS5kdXIiOls0XSwicnVsZSI6WyJhbnkiXX0sImppdHRlciI6%0AW2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYs%0AMi45NjE2XX19LHsic3RhcnQiOlsxNV0sImVuZCI6WzE2XSwiZGF0YSI6eyJhY3Rp%0AdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1%0AIjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwi%0AMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRd%0ALCIxNiI6WzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwi%0AMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwi%0AOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIx%0ANCI6WzEzXSwiMTUiOlsxNF19fSwiY29vcmQiOltbMS4wNDY1LC0xLjgwOTldLFsw%0ALjE5ODQsLTIuMDQ4MV0sWzAuMzYxNCwtMC45ODA2XSxbMS40MzU1LC0xLjA3Mjdd%0ALFsxLjI0NjEsLTAuMjU2NV0sWy0yLjczMDksMS4xOTY1XSxbMS43MzQ0LDIuNTM2%0AXSxbLTAuNzcwMywtMC44MTI4XSxbLTAuMzUyOSwtMi44OTk4XSxbLTAuNTExMiwt%0AMS42MTQ2XSxbMC40OTg1LDAuMTA5N10sWy0wLjMxMzcsLTAuMTEzNl0sWzMuMTg2%0AMywxLjE1NjddLFstMy4xODYzLC0wLjc0NjRdLFsxLjk1MDEsLTIuMjY0OV0sWy0x%0ALjUyNzUsMi40MjM2XSxbMC4wNTI3LDIuODk5OF1dLCJ1c2VhcnJvd3MiOltmYWxz%0AZV0sImRpc3BsYXlsYWJlbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwi%0AV2FzaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2Rh%0AeSIsIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9Y%0AIE5ld3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJS%0AZXV0ZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwi%0AQU9MLmNvbSJdLCJiZyI6WyJyZ2JhKDAsMCwwLDEpIl0sInZlcnRleC5ib3JkZXIi%0AOlsicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJy%0AZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEs%0AMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIs%0AInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdi%0AYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiXSwidmVydGV4%0ALmNleCI6WzIuNCwyLDMuNiwwLjgsMC40LDAsMCwwLjQsMC40LDAuOCwwLjQsMC40%0ALDAsMCwwLjQsMCwwXSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEp%0AIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEo%0AMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5%0ALDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIs%0AInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1%0ANSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAs%0AMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVk%0AZ2UubHdkIjpbNy4zMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMs%0AMS42NjY3LDcsNy4zMzMzLDAuMzMzMywxLjMzMzMsMC42NjY3LDAuMzMzMywwLjMz%0AMzNdLCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwidmVy%0AdGV4LnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBv%0Ac3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4g%0AV2FsbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVy%0AIiwiPGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5l%0Ad3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+%0AIDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJy%0APiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxi%0APlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+%0AVHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8%0AXC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBU%0AViIsIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4g%0AT25saW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6%0APFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxi%0APlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8%0AYnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5n%0AdG9uUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6%0APFwvYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2Uu%0AdG9vbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gNSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDQiXSwic2xpY2UucGFyIjp7InN0YXJ0IjpbMF0sImVuZCI6WzUwXSwiaW50%0AZXJ2YWwiOls0XSwiYWdncmVnYXRlLmR1ciI6WzRdLCJydWxlIjpbImFueSJdfSwi%0Aaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGltIjpb%0ALTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6WzE2XSwiZW5kIjpbMTddLCJkYXRh%0AIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0%0AIjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIx%0AMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwi%0AMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVkZ2VzIjp7IjEiOlswXSwi%0AMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwi%0AOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMi%0AOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV19fSwiY29vcmQiOltb%0AMS4wOTA5LC0xLjcwODldLFswLjI2OTgsLTIuMDI3NF0sWzAuMzA5NywtMC45NTY4%0AXSxbMS4zOTExLC0wLjkzNjddLFsxLjEwMzksLTAuMTM5XSxbLTIuNzAyMSwxLjI5%0AOTNdLFsxLjc4OTcsMi41MzczXSxbLTAuODM3MywtMC45MTY5XSxbLTAuMTY4Mywt%0AMi45MzQxXSxbLTAuNDg4MywtMS42Nzk0XSxbMC4zMTkzLDAuMTQxMV0sWy0wLjQ2%0AMjcsLTAuMTc2M10sWzMuMTk5MywxLjE0OThdLFstMy4xOTkzLC0wLjY3MDldLFsy%0ALjA0NjIsLTIuMDYyOF0sWy0xLjQ2NDEsMi41MDIxXSxbMC4xMjQ1LDIuOTM0MV1d%0ALCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJlbHMiOltmYWxzZV0sImxh%0AYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJlZXQg%0ASm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9zdCIs%0AIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBOZXdz%0AIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwiV2Fz%0AaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6WyJyZ2JhKDAsMCwwLDEp%0AIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEs%0AMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIs%0AInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdi%0AYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiXSwidmVydGV4LmNleCI6WzIuNCwyLDQsMS4yLDAuNCwwLDAsMC40%0ALDAuNCwwLjgsMC40LDAuNCwwLDAsMC40LDAsMF0sInZlcnRleC5jb2wiOlsicmdi%0AYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3%0AOSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3%0AOSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgyNTUsOTksNzEs%0AMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdi%0AYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDIx%0ANSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIs%0AInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1%0ANSwyMTUsMCwxKSJdLCJlZGdlLmx3ZCI6WzcuMzMzMyw3LjMzMzMsNyw2LjY2Njcs%0ANy42NjY3LDcsMC4zMzMzLDEuNjY2Nyw3LDcuMzMzMywwLjMzMzMsMS4zMzMzLDAu%0ANjY2NywwLjMzMzMsMC4zMzMzLDcuNjY2N10sImVkZ2UuY29sIjpbInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSJdLCJ2ZXJ0ZXgu%0AdG9vbHRpcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4gPGI+VHlwZTo8%0AXC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b24gUG9zdCA8%0AYnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYWxs%0AIFN0cmVldCBKb3VybmFsIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8%0AYj5OYW1lOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3Bh%0AcGVyIiwiPGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4g%0ATmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0IDxicj4gPGI+%0AVHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENOTiA8YnI+IDxi%0APlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxicj4gPGI+VHlw%0AZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIFRWIiwiPGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwi%0APGI+TmFtZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxp%0AbmUiLCI8Yj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+VHlwZTo8XC9i%0APiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRlcnMuY29tIDxicj4gPGI+VHlw%0AZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMuY29tIDxicj4g%0APGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b25Q%0Ab3N0LmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9i%0APiBBT0wuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwiZWRnZS50b29s%0AdGlwIjpbIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjAiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA1%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0ANCJdLCJzbGljZS5wYXIiOnsic3RhcnQiOlswXSwiZW5kIjpbNTBdLCJpbnRlcnZh%0AbCI6WzRdLCJhZ2dyZWdhdGUuZHVyIjpbNF0sInJ1bGUiOlsiYW55Il19LCJqaXR0%0AZXIiOltmYWxzZV0sInhsaW0iOlstMy4yMDQ2LDMuMjA0Nl0sInlsaW0iOlstMi45%0ANjE2LDIuOTYxNl19fSx7InN0YXJ0IjpbMTddLCJlbmQiOlsxOF0sImRhdGEiOnsi%0AYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlsz%0AXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpb%0AOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6%0AWzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpb%0AMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4Ijpb%0AN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEy%0AXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19fSwiY29v%0AcmQiOltbMS42NzAxLC0xLjQ1NzZdLFswLjkyODUsLTEuOTc3MV0sWzAuNzczOSwt%0AMC44OTM1XSxbMS44ODA3LC0wLjU5NzldLFsxLjE4OCwwLjEyMzldLFsyLjc3ODks%0ALTAuMDMxNV0sWy0yLjM2NjksMS4xODA5XSxbLTAuMzY1NSwtMS4xNDA2XSxbMC41%0AOTc3LC0yLjk2MTZdLFswLjE0MTksLTEuNzY2Ml0sWy0wLjIwNzksLTAuMzYyOV0s%0AWzAuNDAzMiwwLjE1NDZdLFsyLjY2ODIsMi4zNTkzXSxbLTIuNzc4OSwtMC45ODM4%0AXSxbMi41NzgzLC0xLjkyNDddLFstMS4wMzk2LDIuNTE1M10sWzAuNzQzNCwyLjk2%0AMTZdXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxzIjpbZmFsc2Vd%0ALCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9zdCIsIldhbGwgU3Ry%0AZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5ldyBZb3JrIFBv%0Ac3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJDIiwiWWFob28g%0ATmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJOWVRpbWVzLmNvbSIs%0AIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmciOlsicmdiYSgwLDAs%0AMCwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJy%0AZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEs%0AMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIs%0AInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdi%0AYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIl0sInZlcnRleC5jZXgiOlsyLjQsMiw0LDEuNiwwLjQsMC40%0ALDAsMC40LDAuNCwwLjgsMC40LDAuNCwwLDAsMC40LDAsMF0sInZlcnRleC5jb2wi%0AOlsicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEo%0AMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgyNTUs%0AOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEp%0AIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEo%0AMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUs%0AMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJy%0AZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdlLmx3ZCI6WzcuMzMzMyw3LjMzMzMsNyw2%0ALjY2NjcsNy42NjY3LDcsMC4zMzMzLDEuNjY2Nyw3LDcuMzMzMywwLjMzMzMsMS4z%0AMzMzLDAuNjY2NywwLjMzMzMsMC4zMzMzLDcuNjY2NywwLjMzMzNdLCJlZGdlLmNv%0AbCI6WyJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwidmVydGV4LnRvb2x0aXAiOlsiPGI+%0ATmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVy%0AIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBvc3QgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FsbCBTdHJlZXQgSm91cm5h%0AbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBV%0AU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6%0APFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxi%0APk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3%0Ac3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJyPiA8Yj5UeXBlOjxcL2I+IFRW%0AIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8%0AYj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxi%0APk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6%0APFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4g%0AWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8%0AXC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+%0ATmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5l%0AIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4g%0AT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uUG9zdC5jb20gPGJyPiA8%0AYj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gQU9MLmNvbSA8YnI+%0AIDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2UudG9vbHRpcCI6WyI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIz%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwic2xpY2UucGFy%0AIjp7InN0YXJ0IjpbMF0sImVuZCI6WzUwXSwiaW50ZXJ2YWwiOls0XSwiYWdncmVn%0AYXRlLmR1ciI6WzRdLCJydWxlIjpbImFueSJdfSwiaml0dGVyIjpbZmFsc2VdLCJ4%0AbGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwyLjk2MTZdfX0s%0AeyJzdGFydCI6WzE4XSwiZW5kIjpbMTldLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2Rl%0AcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6%0AWzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwi%0AMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVd%0ALCIxNyI6WzE2XX0sImVkZ2VzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQi%0AOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEw%0AIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIx%0ANSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdLCIxOCI6WzE3XX19LCJjb29yZCI6%0AW1sxLjY3MzUsLTEuNDQwMV0sWzAuOTE5OCwtMS45NTkzXSxbMC43ODM2LC0wLjg2%0ANzZdLFsxLjg2NDQsLTAuNTQ3NV0sWy0wLjE2NDEsLTAuMjgyXSxbMi43NDI0LDAu%0AMDU1NF0sWy0yLjU4MTUsMC44MTYxXSxbLTAuMzUsLTEuMDY1Ml0sWzAuNTcwMywt%0AMi45NDI2XSxbMC4xMzUxLC0xLjcyNzZdLFsxLjMyNjksMC4wNjIyXSxbMC40Nzgs%0AMC4yMTg3XSxbMi4zMTcxLDIuNTQ2NF0sWy0yLjc0MjQsLTEuMzY1NF0sWzIuNTY3%0AMiwtMS45MTkyXSxbLTEuNDEzMywyLjI5OV0sWzAuMzE2OSwyLjk0MjZdXSwidXNl%0AYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxzIjpbZmFsc2VdLCJsYWJlbCI6%0AWyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9zdCIsIldhbGwgU3RyZWV0IEpvdXJu%0AYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5ldyBZb3JrIFBvc3QiLCJDTk4i%0ALCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJDIiwiWWFob28gTmV3cyIsIkdv%0Ab2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJOWVRpbWVzLmNvbSIsIldhc2hpbmd0%0Ab25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmciOlsicmdiYSgwLDAsMCwxKSJdLCJ2%0AZXJ0ZXguYm9yZGVyIjpbInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwy%0AMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwy%0AMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwx%0AKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwi%0AcmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIl0sInZlcnRleC5jZXgiOlsyLjQsMiw0LDIsMC40LDAuNCwwLDAuNCwwLjQs%0AMC44LDAuOCwwLjQsMCwwLDAuNCwwLDBdLCJ2ZXJ0ZXguY29sIjpbInJnYmEoMTc5%0ALDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5%0ALDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5%0ALDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwi%0AcmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1%0ALDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSwyMTUsMCwx%0AKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2Jh%0AKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1%0ALDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMzLDcsNi42NjY3LDcuNjY2%0ANyw3LDAuMzMzMywxLjY2NjcsNyw3LjMzMzMsMC4zMzMzLDEuMzMzMywwLjY2Njcs%0AMC4zMzMzLDAuMzMzMyw3LjY2NjcsMC4zMzMzLDcuMzMzM10sImVkZ2UuY29sIjpb%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSJdLCJ2ZXJ0%0AZXgudG9vbHRpcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4gPGI+VHlw%0AZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b24gUG9z%0AdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBX%0AYWxsIFN0cmVldCBKb3VybmFsIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIi%0ALCI8Yj5OYW1lOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3%0Ac3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwv%0AYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0IDxicj4g%0APGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENOTiA8YnI+%0AIDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxicj4gPGI+%0AVHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRW%0AIiwiPGI+TmFtZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBP%0AbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+VHlwZTo8%0AXC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRlcnMuY29tIDxicj4gPGI+%0AVHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMuY29tIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0%0Ab25Qb3N0LmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8%0AXC9iPiBBT0wuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwiZWRnZS50%0Ab29sdGlwIjpbIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjAiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiA1IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0ANCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gNCJdLCJzbGljZS5wYXIiOnsic3RhcnQiOlswXSwiZW5kIjpbNTBdLCJpbnRl%0AcnZhbCI6WzRdLCJhZ2dyZWdhdGUuZHVyIjpbNF0sInJ1bGUiOlsiYW55Il19LCJq%0AaXR0ZXIiOltmYWxzZV0sInhsaW0iOlstMy4yMDQ2LDMuMjA0Nl0sInlsaW0iOlst%0AMi45NjE2LDIuOTYxNl19fSx7InN0YXJ0IjpbMTldLCJlbmQiOlsyMF0sImRhdGEi%0AOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQi%0AOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEw%0AIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIx%0ANSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRnZXMiOnsiMSI6WzBdLCIy%0AIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4%0AIjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6%0AWzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl0sIjE4%0AIjpbMTddLCIxOSI6WzE4XX19LCJjb29yZCI6W1sxLjY0OTEsLTEuNDgxNl0sWzAu%0AODEwNywtMS44ODYyXSxbMC44NjEyLC0wLjc4MjldLFsxLjg4NTYsLTAuNTUxOV0s%0AWzAuMTEzNCwwLjEwMDldLFsyLjgyNTEsLTAuMDIxNl0sWy0yLjgyNTEsMC4wNjdd%0ALFstMC4yNjE0LC0wLjY3MV0sWzAuMzQyNSwtMi44Mjg2XSxbMC4wNzIsLTEuNTAx%0AN10sWzEuNTkxNiwwLjE0OTFdLFsxLjA3OCwwLjE1NTZdLFsxLjU5MSwyLjgyODZd%0ALFstMi41NDQxLC0yLjAwMzJdLFsyLjQwMDIsLTIuMTQxXSxbLTIuMDI4OSwxLjc0%0ANjRdLFstMC40OTA0LDIuNzc1Nl1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3Bs%0AYXlsYWJlbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3Rv%0AbiBQb3N0IiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRp%0AbWVzIiwiTmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJB%0AQkMiLCJCQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNv%0AbSIsIk5ZVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJd%0ALCJiZyI6WyJyZ2JhKDAsMCwwLDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSgy%0AMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwy%0AMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwy%0AMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwx%0AKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwi%0AcmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiXSwidmVydGV4LmNleCI6WzIu%0ANCwyLDQsMi40LDAuNCwwLjQsMCwwLjQsMC40LDAuOCwwLjgsMC44LDAsMCwwLjQs%0AMCwwXSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgx%0ANzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwx%0ANzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwx%0ANzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwi%0AcmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1%0ALDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwx%0AKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2Jh%0AKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpb%0ANy4zMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42NjY3LDcs%0ANy4zMzMzLDAuMzMzMywxLjMzMzMsMC42NjY3LDAuMzMzMywwLjMzMzMsNy42NjY3%0ALDAuMzMzMyw3LjMzMzMsMV0sImVkZ2UuY29sIjpbInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSJdLCJ2%0AZXJ0ZXgudG9vbHRpcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4gPGI+%0AVHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b24g%0AUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9i%0APiBXYWxsIFN0cmVldCBKb3VybmFsIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFw%0AZXIiLCI8Yj5OYW1lOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwvYj4g%0ATmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5cGU6%0APFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0IDxi%0Acj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENOTiA8%0AYnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxicj4g%0APGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJyPiA8%0AYj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIFRWIiwiPGI+TmFtZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8XC9i%0APiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+VHlw%0AZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRlcnMuY29tIDxicj4g%0APGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMuY29t%0AIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdhc2hp%0Abmd0b25Qb3N0LmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFt%0AZTo8XC9iPiBBT0wuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwiZWRn%0AZS50b29sdGlwIjpbIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjAiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiA1IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gNCJdLCJzbGljZS5wYXIiOnsic3RhcnQiOlswXSwiZW5kIjpbNTBdLCJp%0AbnRlcnZhbCI6WzRdLCJhZ2dyZWdhdGUuZHVyIjpbNF0sInJ1bGUiOlsiYW55Il19%0ALCJqaXR0ZXIiOltmYWxzZV0sInhsaW0iOlstMy4yMDQ2LDMuMjA0Nl0sInlsaW0i%0AOlstMi45NjE2LDIuOTYxNl19fSx7InN0YXJ0IjpbMjBdLCJlbmQiOlsyMV0sImRh%0AdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0s%0AIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0s%0AIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNd%0ALCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRnZXMiOnsiMSI6WzBd%0ALCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZd%0ALCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIx%0AMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl0s%0AIjE4IjpbMTddLCIxOSI6WzE4XSwiMjAiOlsxOV19fSwiY29vcmQiOltbMS40OTk2%0ALC0xLjUzOF0sWzAuNjUwNSwtMS45ODRdLFswLjY5ODksLTAuODc0M10sWzEuNzU4%0ANCwtMC41NDc2XSxbLTAuMTI2NSwtMC4wMjQ0XSxbMi44MTAxLC0wLjU3ODFdLFst%0AMi42MTc3LDAuODMyNF0sWy0wLjQzODQsLTAuNzk5OF0sWzAuMTM2MiwtMi45Mjhd%0ALFstMC4wODI3LC0xLjYwMTddLFsxLjMwNjUsMC4wNzY0XSxbMC44NTI1LDAuMDY3%0ANl0sWzEuMDE2MywyLjkyOF0sWy0yLjgxMDEsLTEuNTY2M10sWzIuMTcwMSwtMi4z%0AMjc5XSxbLTEuMTc0NSwyLjQzMzZdLFsyLjM5MDIsMC40NTE5XV0sInVzZWFycm93%0AcyI6W2ZhbHNlXSwiZGlzcGxheWxhYmVscyI6W2ZhbHNlXSwibGFiZWwiOlsiTlkg%0AVGltZXMiLCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxsIFN0cmVldCBKb3VybmFsIiwi%0AVVNBIFRvZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9yayBQb3N0IiwiQ05OIiwiTVNO%0AQkMiLCJGT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllhaG9vIE5ld3MiLCJHb29nbGUg%0ATmV3cyIsIlJldXRlcnMuY29tIiwiTllUaW1lcy5jb20iLCJXYXNoaW5ndG9uUG9z%0AdC5jb20iLCJBT0wuY29tIl0sImJnIjpbInJnYmEoMCwwLDAsMSkiXSwidmVydGV4%0ALmJvcmRlciI6WyJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIy%0AMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEp%0AIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJy%0AZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEs%0AMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSJd%0ALCJ2ZXJ0ZXguY2V4IjpbMi40LDIsNCwyLjgsMC40LDAuNCwwLDAuNCwwLjQsMC44%0ALDAuOCwwLjgsMCwwLDAuNCwwLDAuNF0sInZlcnRleC5jb2wiOlsicmdiYSgxNzks%0AMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzks%0AMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzks%0AMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJy%0AZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUs%0AOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDIxNSwwLDEp%0AIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEo%0AMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUs%0AMCwxKSJdLCJlZGdlLmx3ZCI6WzcuMzMzMyw3LjMzMzMsNyw2LjY2NjcsNy42NjY3%0ALDcsMC4zMzMzLDEuNjY2Nyw3LDcuMzMzMywwLjMzMzMsMS4zMzMzLDAuNjY2Nyww%0ALjMzMzMsMC4zMzMzLDcuNjY2NywwLjMzMzMsNy4zMzMzLDEsMC42NjY3XSwiZWRn%0AZS5jb2wiOlsicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZl%0AcnRleC50b29sdGlwIjpbIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQ%0Ab3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+%0AIFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBl%0AciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBO%0AZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8%0AXC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8%0AYj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxi%0APlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6%0APFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4g%0AVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8%0AYj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20g%0APGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGlu%0AZ3RvblBvc3QuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1l%0AOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdl%0ALnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiA0Il0sInNsaWNlLnBhciI6eyJzdGFydCI6WzBdLCJlbmQiOls1MF0sImlu%0AdGVydmFsIjpbNF0sImFnZ3JlZ2F0ZS5kdXIiOls0XSwicnVsZSI6WyJhbnkiXX0s%0AImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6%0AWy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQiOlsyMV0sImVuZCI6WzIyXSwiZGF0%0AYSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwi%0ANCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwi%0AMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10s%0AIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0s%0AIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0s%0AIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEz%0AIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XSwi%0AMTgiOlsxN10sIjE5IjpbMThdLCIyMCI6WzE5XSwiMjEiOlsyMF19fSwiY29vcmQi%0AOltbMS41OTE1LC0xLjQ5MjddLFswLjQ3NTMsLTEuOTY1XSxbMC43ODM1LC0wLjk5%0ANTFdLFsxLjc0NzksLTAuNDU4NV0sWzEuMTgwNCwtMi4wODc3XSxbMi43OTkxLC0w%0ALjMwMThdLFstMi41NTY1LDAuNzQyNF0sWy0wLjI2NzcsLTAuNDY4Nl0sWy0wLjEz%0AMDgsLTIuODcyN10sWy0wLjIyMjMsLTEuNDM0Nl0sWzEuMTY0MSwwLjA1NzNdLFsw%0ALjY5OTgsLTAuMDQzOV0sWzAuODI2MSwyLjg3MjddLFstMi43OTkxLC0xLjQ4Mjhd%0ALFsyLjQxMjEsLTIuMTc3M10sWy0xLjI1MDMsMi4yNjU3XSxbMi4xOTY4LDAuNjE4%0AXV0sInVzZWFycm93cyI6W2ZhbHNlXSwiZGlzcGxheWxhYmVscyI6W2ZhbHNlXSwi%0AbGFiZWwiOlsiTlkgVGltZXMiLCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxsIFN0cmVl%0AdCBKb3VybmFsIiwiVVNBIFRvZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9yayBQb3N0%0AIiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllhaG9vIE5l%0Ad3MiLCJHb29nbGUgTmV3cyIsIlJldXRlcnMuY29tIiwiTllUaW1lcy5jb20iLCJX%0AYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wuY29tIl0sImJnIjpbInJnYmEoMCwwLDAs%0AMSkiXSwidmVydGV4LmJvcmRlciI6WyJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdi%0AYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIy%0AMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEp%0AIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJy%0AZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSJdLCJ2ZXJ0ZXguY2V4IjpbMi44LDIsNCwyLjgsMC44LDAuNCww%0ALDAuNCwwLjQsMC44LDAuOCwwLjgsMCwwLDAuNCwwLDAuNF0sInZlcnRleC5jb2wi%0AOlsicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEo%0AMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgyNTUs%0AOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEp%0AIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEo%0AMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUs%0AMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJy%0AZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdlLmx3ZCI6WzcuMzMzMyw3LjMzMzMsNyw2%0ALjY2NjcsNy42NjY3LDcsMC4zMzMzLDEuNjY2Nyw3LDcuMzMzMywwLjMzMzMsMS4z%0AMzMzLDAuNjY2NywwLjMzMzMsMC4zMzMzLDcuNjY2NywwLjMzMzMsNy4zMzMzLDEs%0AMC42NjY3LDAuMzMzM10sImVkZ2UuY29sIjpbInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSJdLCJ2ZXJ0ZXgudG9v%0AbHRpcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9i%0APiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b24gUG9zdCA8YnI+%0AIDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYWxsIFN0%0AcmVldCBKb3VybmFsIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5O%0AYW1lOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVy%0AIiwiPGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3%0Ac3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0IDxicj4gPGI+VHlw%0AZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENOTiA8YnI+IDxiPlR5%0AcGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxicj4gPGI+VHlwZTo8%0AXC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRW%0AIiwiPGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+%0ATmFtZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUi%0ALCI8Yj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBP%0AbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRlcnMuY29tIDxicj4gPGI+VHlwZTo8%0AXC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMuY29tIDxicj4gPGI+%0AVHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b25Qb3N0%0ALmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBB%0AT0wuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwiZWRnZS50b29sdGlw%0AIjpbIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjAi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA1Iiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCJd%0ALCJzbGljZS5wYXIiOnsic3RhcnQiOlswXSwiZW5kIjpbNTBdLCJpbnRlcnZhbCI6%0AWzRdLCJhZ2dyZWdhdGUuZHVyIjpbNF0sInJ1bGUiOlsiYW55Il19LCJqaXR0ZXIi%0AOltmYWxzZV0sInhsaW0iOlstMy4yMDQ2LDMuMjA0Nl0sInlsaW0iOlstMi45NjE2%0ALDIuOTYxNl19fSx7InN0YXJ0IjpbMjJdLCJlbmQiOlsyM10sImRhdGEiOnsiYWN0%0AaXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwi%0ANSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0s%0AIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0%0AXSwiMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpbMV0s%0AIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10s%0AIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwi%0AMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl0sIjE4IjpbMTdd%0ALCIxOSI6WzE4XSwiMjAiOlsxOV0sIjIxIjpbMjBdLCIyMiI6WzIxXX19LCJjb29y%0AZCI6W1sxLjU5NDQsLTEuNDc5N10sWzAuNDg1MywtMS45NDkyXSxbMC43ODAyLC0w%0ALjk4MTldLFsxLjc0MjEsLTAuNDQwNV0sWzEuMTU2NSwtMi4wNzYxXSxbMi43OTE1%0ALC0wLjI3ODddLFstMi41NzI2LDAuNzE4NV0sWy0wLjI3NTYsLTAuNDY0NV0sWy0w%0ALjA2MDIsLTIuODgxOF0sWy0wLjIyNTYsLTEuNDMyMl0sWzEuMTU0MiwwLjA3MDZd%0ALFswLjY5MTgsLTAuMDMwMV0sWzAuNzk4OSwyLjg4MThdLFstMi43OTE1LC0xLjUy%0AMjFdLFsyLjQyMTMsLTIuMTU0NV0sWy0xLjI3NDgsMi4yNjA2XSxbMi4xODMsMC42%0AMzkxXV0sInVzZWFycm93cyI6W2ZhbHNlXSwiZGlzcGxheWxhYmVscyI6W2ZhbHNl%0AXSwibGFiZWwiOlsiTlkgVGltZXMiLCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxsIFN0%0AcmVldCBKb3VybmFsIiwiVVNBIFRvZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9yayBQ%0Ab3N0IiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllhaG9v%0AIE5ld3MiLCJHb29nbGUgTmV3cyIsIlJldXRlcnMuY29tIiwiTllUaW1lcy5jb20i%0ALCJXYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wuY29tIl0sImJnIjpbInJnYmEoMCww%0ALDAsMSkiXSwidmVydGV4LmJvcmRlciI6WyJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwi%0AcmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSki%0ALCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgy%0AMjEsMjIxLDIyMSwxKSJdLCJ2ZXJ0ZXguY2V4IjpbMi44LDIuNCw0LDIuOCwxLjIs%0AMC40LDAsMC40LDAuNCwwLjgsMC44LDAuOCwwLDAsMC40LDAsMC40XSwidmVydGV4%0ALmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwx%0AKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwi%0AcmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2Jh%0AKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTks%0ANzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwi%0AcmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1%0ALDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwx%0AKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMzLDcuMzMz%0AMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42NjY3LDcsNy4zMzMzLDAuMzMz%0AMywxLjMzMzMsMC42NjY3LDAuMzMzMywwLjMzMzMsNy42NjY3LDAuMzMzMyw3LjMz%0AMzMsMSwwLjY2NjcsMC4zMzMzLDddLCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiXSwidmVydGV4LnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9i%0APiBOWSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFt%0AZTo8XC9iPiBXYXNoaW5ndG9uIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3Nw%0AYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FsbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxi%0APlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEg%0AVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwv%0AYj4gTmV3IFlvcmsgUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwi%0APGI+TmFtZTo8XC9iPiBDTk4gPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFt%0AZTo8XC9iPiBNU05CQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxc%0AL2I+IEZPWCBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwv%0AYj4gQUJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQkJD%0AIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3%0AcyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBHb29n%0AbGUgTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9i%0APiBSZXV0ZXJzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFt%0AZTo8XC9iPiBOWVRpbWVzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwi%0APGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6%0APFwvYj4gT25saW5lIl0sImVkZ2UudG9vbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAz%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwic2xpY2UucGFyIjp7InN0YXJ0%0AIjpbMF0sImVuZCI6WzUwXSwiaW50ZXJ2YWwiOls0XSwiYWdncmVnYXRlLmR1ciI6%0AWzRdLCJydWxlIjpbImFueSJdfSwiaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMu%0AMjA0NiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6%0AWzIzXSwiZW5kIjpbMjRdLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpb%0AMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3Ijpb%0ANl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0s%0AIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2%0AXX0sImVkZ2VzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6%0AWzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjEx%0AIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwi%0AMTYiOlsxNV0sIjE3IjpbMTZdLCIxOCI6WzE3XSwiMTkiOlsxOF0sIjIwIjpbMTld%0ALCIyMSI6WzIwXSwiMjIiOlsyMV0sIjIzIjpbMjJdfX0sImNvb3JkIjpbWzEuNTI0%0ANCwtMS41MzczXSxbMC4zOTYyLC0xLjg2MTldLFswLjc0OTYsLTAuOTcwM10sWzEu%0ANzQwNSwtMC40OTg1XSxbMC45NDkzLC0yLjE2ODRdLFsyLjc5NDksLTAuMzkzOF0s%0AWy0yLjYwMjMsMC42OTIxXSxbLTAuMjc0NywtMC4zODU1XSxbMC4xNTIsLTIuODYz%0ANl0sWy0wLjMwMjMsLTEuMzU4OV0sWzEuMTkxNywwLjA1Ml0sWzAuNzIwMywtMC4w%0AMTI3XSxbMC44Mzg1LDIuODYzNl0sWy0yLjc5NDksLTEuNjA3OF0sWzIuMzM0Nywt%0AMi4yMTczXSxbLTEuMjcwNCwyLjI1OThdLFsyLjI0MTEsMC41NTk2XV0sInVzZWFy%0Acm93cyI6W2ZhbHNlXSwiZGlzcGxheWxhYmVscyI6W2ZhbHNlXSwibGFiZWwiOlsi%0ATlkgVGltZXMiLCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxsIFN0cmVldCBKb3VybmFs%0AIiwiVVNBIFRvZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9yayBQb3N0IiwiQ05OIiwi%0ATVNOQkMiLCJGT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllhaG9vIE5ld3MiLCJHb29n%0AbGUgTmV3cyIsIlJldXRlcnMuY29tIiwiTllUaW1lcy5jb20iLCJXYXNoaW5ndG9u%0AUG9zdC5jb20iLCJBT0wuY29tIl0sImJnIjpbInJnYmEoMCwwLDAsMSkiXSwidmVy%0AdGV4LmJvcmRlciI6WyJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSki%0ALCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgy%0AMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwy%0AMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwy%0AMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwx%0AKSJdLCJ2ZXJ0ZXguY2V4IjpbMi44LDIuNCw0LDIuOCwxLjYsMC40LDAsMC40LDAu%0AOCwwLjgsMC44LDAuOCwwLDAsMC40LDAsMC40XSwidmVydGV4LmNvbCI6WyJyZ2Jh%0AKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5%0ALDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5%0ALDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwx%0AKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2Jh%0AKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1%0ALDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwi%0AcmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1%0ALDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMzLDcuMzMzMyw3LDYuNjY2Nyw3%0ALjY2NjcsNywwLjMzMzMsMS42NjY3LDcsNy4zMzMzLDAuMzMzMywxLjMzMzMsMC42%0ANjY3LDAuMzMzMywwLjMzMzMsNy42NjY3LDAuMzMzMyw3LjMzMzMsMSwwLjY2Njcs%0AMC4zMzMzLDcsMC42NjY3XSwiZWRnZS5jb2wiOlsicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlw%0AIjpbIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5l%0Ad3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+%0AVHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0%0AIEpvdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6%0APFwvYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8%0AYj5OYW1lOjxcL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFw%0AZXIiLCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8%0AXC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIFRWIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4g%0AVFYiLCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8%0AYj5OYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1l%0AOjxcL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxi%0APk5hbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGlu%0AZSIsIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29t%0AIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5j%0Ab20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sInNs%0AaWNlLnBhciI6eyJzdGFydCI6WzBdLCJlbmQiOls1MF0sImludGVydmFsIjpbNF0s%0AImFnZ3JlZ2F0ZS5kdXIiOls0XSwicnVsZSI6WyJhbnkiXX0sImppdHRlciI6W2Zh%0AbHNlXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45%0ANjE2XX19LHsic3RhcnQiOlsyNF0sImVuZCI6WzI1XSwiZGF0YSI6eyJhY3RpdmUi%0AOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1Ijpb%0ANF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEi%0AOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIx%0ANiI6WzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6%0AWzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6%0AWzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6%0AWzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XSwiMTgiOlsxN10sIjE5%0AIjpbMThdLCIyMCI6WzE5XSwiMjEiOlsyMF0sIjIyIjpbMjFdLCIyMyI6WzIyXSwi%0AMjQiOlsyM119fSwiY29vcmQiOltbMS40ODAyLC0xLjQ4MzddLFswLjM1NTIsLTEu%0AODI1M10sWzAuNzE4MywtMC45MjEyXSxbMS43MjU4LC0wLjQ3NTZdLFswLjk5MzYs%0ALTIuMTIwM10sWzIuNzgyLC0wLjQ1MDVdLFstMi43ODIsMC4zNjM3XSxbLTAuMjkw%0AMywtMC4zMTk0XSxbMC4yMTkxLC0yLjg0NDddLFstMC4zMzU4LC0xLjMwNjhdLFsx%0ALjE5NCwwLjA5MzRdLFswLjcyLDAuMDM3M10sWzAuNDk0NywyLjg0NDddLFstMi43%0ANjg5LC0xLjkyNzVdLFsxLjkyNzgsLTIuNDE1NV0sWy0xLjU4MjEsMi4wNzFdLFsy%0ALjI0OTIsMC41NjFdXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxz%0AIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9zdCIs%0AIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5l%0AdyBZb3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJD%0AIiwiWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJOWVRp%0AbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmciOlsi%0AcmdiYSgwLDAsMCwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEoMjIxLDIyMSwy%0AMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwx%0AKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwi%0AcmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSki%0ALCJyZ2JhKDIyMSwyMjEsMjIxLDEpIl0sInZlcnRleC5jZXgiOlsyLjgsMi40LDQs%0AMi44LDIsMC40LDAsMC40LDAuOCwwLjgsMC44LDAuOCwwLDAsMC44LDAsMC40XSwi%0AdmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5%0ALDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5%0ALDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSki%0ALCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgy%0ANTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcx%0ALDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJn%0AYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwy%0AMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMz%0ALDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42NjY3LDcsNy4zMzMz%0ALDAuMzMzMywxLjMzMzMsMC42NjY3LDAuMzMzMywwLjMzMzMsNy42NjY3LDAuMzMz%0AMyw3LjMzMzMsMSwwLjY2NjcsMC4zMzMzLDcsMC42NjY3LDddLCJlZGdlLmNvbCI6%0AWyJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwidmVydGV4LnRvb2x0aXAiOlsiPGI+%0ATmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVy%0AIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBvc3QgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FsbCBTdHJlZXQgSm91cm5h%0AbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBV%0AU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6%0APFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxi%0APk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3%0Ac3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJyPiA8Yj5UeXBlOjxcL2I+IFRW%0AIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8%0AYj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxi%0APk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6%0APFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4g%0AWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8%0AXC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+%0ATmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5l%0AIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4g%0AT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uUG9zdC5jb20gPGJyPiA8%0AYj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gQU9MLmNvbSA8YnI+%0AIDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2UudG9vbHRpcCI6WyI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIz%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwic2xpY2UucGFy%0AIjp7InN0YXJ0IjpbMF0sImVuZCI6WzUwXSwiaW50ZXJ2YWwiOls0XSwiYWdncmVn%0AYXRlLmR1ciI6WzRdLCJydWxlIjpbImFueSJdfSwiaml0dGVyIjpbZmFsc2VdLCJ4%0AbGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwyLjk2MTZdfX0s%0AeyJzdGFydCI6WzI1XSwiZW5kIjpbMjZdLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2Rl%0AcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6%0AWzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwi%0AMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVd%0ALCIxNyI6WzE2XX0sImVkZ2VzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQi%0AOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEw%0AIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIx%0ANSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdLCIxOCI6WzE3XSwiMTkiOlsxOF0s%0AIjIwIjpbMTldLCIyMSI6WzIwXSwiMjIiOlsyMV0sIjIzIjpbMjJdLCIyNCI6WzIz%0AXSwiMjUiOlsyNF19fSwiY29vcmQiOltbMS40ODk4LC0xLjQ3NjVdLFswLjM2NDUs%0ALTEuODIzM10sWzAuNzI0NCwtMC45MTg4XSxbMS43Mjg3LC0wLjQ2ODNdLFsxLjAw%0ANTYsLTIuMTE1XSxbMi43ODM4LC0wLjQzNTVdLFstMi43ODM4LDAuMzQ3OV0sWy0w%0ALjI4NjksLTAuMzE5XSxbMC4yMzMsLTIuODQzN10sWy0wLjMyODYsLTEuMzA4MV0s%0AWzEuMTk0NSwwLjA5OV0sWzAuNzE5NywwLjA0MDRdLFswLjQ3MjQsMi44NDM3XSxb%0ALTIuNzUyLC0xLjk2MTVdLFsxLjk0MTYsLTIuNDA2NV0sWy0xLjU5NCwyLjA1NzJd%0ALFsyLjI0OTYsMC41Njg0XV0sInVzZWFycm93cyI6W2ZhbHNlXSwiZGlzcGxheWxh%0AYmVscyI6W2ZhbHNlXSwibGFiZWwiOlsiTlkgVGltZXMiLCJXYXNoaW5ndG9uIFBv%0Ac3QiLCJXYWxsIFN0cmVldCBKb3VybmFsIiwiVVNBIFRvZGF5IiwiTEEgVGltZXMi%0ALCJOZXcgWW9yayBQb3N0IiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3cyIsIkFCQyIs%0AIkJCQyIsIllhaG9vIE5ld3MiLCJHb29nbGUgTmV3cyIsIlJldXRlcnMuY29tIiwi%0ATllUaW1lcy5jb20iLCJXYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wuY29tIl0sImJn%0AIjpbInJnYmEoMCwwLDAsMSkiXSwidmVydGV4LmJvcmRlciI6WyJyZ2JhKDIyMSwy%0AMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwy%0AMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwx%0AKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwi%0AcmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSJdLCJ2ZXJ0ZXguY2V4IjpbMi44LDIu%0ANCw0LDIuOCwyLDAuNCwwLDAuNCwwLjgsMC44LDAuOCwwLjgsMCwwLDAuOCwwLDAu%0ANF0sInZlcnRleC5jb2wiOlsicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5%0ALDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5%0ALDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5%0ALDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJn%0AYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5%0AOSw3MSwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSki%0ALCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgy%0ANTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdlLmx3ZCI6Wzcu%0AMzMzMyw3LjMzMzMsNyw2LjY2NjcsNy42NjY3LDcsMC4zMzMzLDEuNjY2Nyw3LDcu%0AMzMzMywwLjMzMzMsMS4zMzMzLDAuNjY2NywwLjMzMzMsMC4zMzMzLDcuNjY2Nyww%0ALjMzMzMsNy4zMzMzLDEsMC42NjY3LDAuMzMzMyw3LDAuNjY2Nyw3LDAuMzMzM10s%0AImVkZ2UuY29sIjpbInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSJdLCJ2ZXJ0ZXgudG9vbHRpcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRp%0AbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+%0AIFdhc2hpbmd0b24gUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwi%0APGI+TmFtZTo8XC9iPiBXYWxsIFN0cmVldCBKb3VybmFsIDxicj4gPGI+VHlwZTo8%0AXC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxi%0APlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8%0AYnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcg%0AWW9yayBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1l%0AOjxcL2I+IENOTiA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+%0AIE1TTkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gRk9Y%0AIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMg%0APGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8%0AYj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4g%0APGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdz%0AIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRl%0AcnMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+%0AIE5ZVGltZXMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1l%0AOjxcL2I+IFdhc2hpbmd0b25Qb3N0LmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25s%0AaW5lIiwiPGI+TmFtZTo8XC9iPiBBT0wuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBP%0AbmxpbmUiXSwiZWRnZS50b29sdGlwIjpbIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjAiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiA1IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gNCJdLCJzbGljZS5wYXIiOnsic3RhcnQiOlswXSwi%0AZW5kIjpbNTBdLCJpbnRlcnZhbCI6WzRdLCJhZ2dyZWdhdGUuZHVyIjpbNF0sInJ1%0AbGUiOlsiYW55Il19LCJqaXR0ZXIiOltmYWxzZV0sInhsaW0iOlstMy4yMDQ2LDMu%0AMjA0Nl0sInlsaW0iOlstMi45NjE2LDIuOTYxNl19fSx7InN0YXJ0IjpbMjZdLCJl%0AbmQiOlsyN10sImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6%0AWzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6%0AWzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsx%0AMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRn%0AZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYi%0AOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0s%0AIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1%0AXSwiMTciOlsxNl0sIjE4IjpbMTddLCIxOSI6WzE4XSwiMjAiOlsxOV0sIjIxIjpb%0AMjBdLCIyMiI6WzIxXSwiMjMiOlsyMl0sIjI0IjpbMjNdLCIyNSI6WzI0XSwiMjYi%0AOlsyNV19fSwiY29vcmQiOltbMS40NjU5LC0xLjMzNDJdLFswLjM4MDMsLTEuNzM3%0AOF0sWzAuNzk3NSwtMC44Ml0sWzEuNjQ0NywtMC4xMjRdLFsxLjAyOTgsLTIuMDU0%0AXSxbMS44ODg1LDAuOTcxM10sWy0yLjc4MjEsLTFdLFstMC4xOTEsLTAuMjNdLFsw%0ALjIyOTQsLTIuNzY1NV0sWy0wLjI3NiwtMS4xOTYxXSxbMS45NzI4LC0wLjc3Nzhd%0ALFswLjc2NzksMC4yMDg0XSxbLTAuNjA2OCwyLjc2NTVdLFstMi4yNDc0LDEuMzI0%0AMl0sWzEuOTgxNiwtMi4yODU4XSxbMi4wOTksMS45ODEyXSxbMi43ODIxLDAuMDI2%0ANV1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJlbHMiOltmYWxzZV0s%0AImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJl%0AZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9z%0AdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBO%0AZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwi%0AV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6WyJyZ2JhKDAsMCww%0ALDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgy%0AMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwy%0AMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwy%0AMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwx%0AKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwi%0AcmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiXSwidmVydGV4LmNleCI6WzIuOCwyLjQsNCwyLjgsMiwwLjgs%0AMCwwLjQsMC44LDAuOCwwLjgsMC44LDAsMCwwLjgsMC40LDAuNF0sInZlcnRleC5j%0Ab2wiOlsicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSki%0ALCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJn%0AYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgy%0ANTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcx%0ALDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJn%0AYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwy%0AMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSki%0ALCJyZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdlLmx3ZCI6WzcuMzMzMyw3LjMzMzMs%0ANyw2LjY2NjcsNy42NjY3LDcsMC4zMzMzLDEuNjY2Nyw3LDcuMzMzMywwLjMzMzMs%0AMS4zMzMzLDAuNjY2NywwLjMzMzMsMC4zMzMzLDcuNjY2NywwLjMzMzMsNy4zMzMz%0ALDEsMC42NjY3LDAuMzMzMyw3LDAuNjY2Nyw3LDAuMzMzMyw3XSwiZWRnZS5jb2wi%0AOlsicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxiPk5hbWU6%0APFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxi%0APk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBO%0AZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRv%0AZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+%0AIExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1l%0AOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBl%0AciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxi%0APk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFt%0AZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1l%0AOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+%0AIEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9v%0AIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4g%0AR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6%0APFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxi%0APk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGlu%0AZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4gPGI+VHlw%0AZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Iiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sInNsaWNlLnBhciI6eyJz%0AdGFydCI6WzBdLCJlbmQiOls1MF0sImludGVydmFsIjpbNF0sImFnZ3JlZ2F0ZS5k%0AdXIiOls0XSwicnVsZSI6WyJhbnkiXX0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6%0AWy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3Rh%0AcnQiOlsyN10sImVuZCI6WzI4XSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsi%0AMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwi%0ANyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpb%0AMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTci%0AOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10s%0AIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6Wzld%0ALCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsx%0ANF0sIjE2IjpbMTVdLCIxNyI6WzE2XSwiMTgiOlsxN10sIjE5IjpbMThdLCIyMCI6%0AWzE5XSwiMjEiOlsyMF0sIjIyIjpbMjFdLCIyMyI6WzIyXSwiMjQiOlsyM10sIjI1%0AIjpbMjRdLCIyNiI6WzI1XSwiMjciOlsyNl19fSwiY29vcmQiOltbMS41NjIzLC0x%0ALjMzNjVdLFswLjQ4ODQsLTEuNzY2NV0sWzAuODc4OCwtMC44NDA0XSxbMS42ODQx%0ALC0wLjEzNTZdLFsxLjE0NywtMi4wNjQ1XSxbMi4wNjQ0LDAuODk1NV0sWy0yLjY5%0AODUsLTAuOTE4N10sWy0wLjEzMDYsLTAuMjg0OF0sWzAuMzYxNywtMi43OTM1XSxb%0ALTAuMTg1MSwtMS4yNDczXSxbMi4wODE4LC0wLjc4NTJdLFswLjc5OTYsMC4xOTk4%0AXSxbLTAuNDQwMSwyLjc5MzVdLFstMi4xMTE2LDEuMzkxNV0sWzIuMTExMSwtMi4y%0ANjQ4XSxbMi4zMTE5LDEuODk4OV0sWzIuNjk4NSwwLjI4MTFdXSwidXNlYXJyb3dz%0AIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxzIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBU%0AaW1lcyIsIldhc2hpbmd0b24gUG9zdCIsIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJV%0AU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5ldyBZb3JrIFBvc3QiLCJDTk4iLCJNU05C%0AQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJDIiwiWWFob28gTmV3cyIsIkdvb2dsZSBO%0AZXdzIiwiUmV1dGVycy5jb20iLCJOWVRpbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0%0ALmNvbSIsIkFPTC5jb20iXSwiYmciOlsicmdiYSgwLDAsMCwxKSJdLCJ2ZXJ0ZXgu%0AYm9yZGVyIjpbInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSki%0ALCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgy%0AMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwy%0AMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwy%0AMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwx%0AKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIl0s%0AInZlcnRleC5jZXgiOlsyLjgsMi40LDQsMi44LDIsMS4yLDAsMC40LDAuOCwwLjgs%0AMC44LDAuOCwwLDAsMC44LDAuNCwwLjhdLCJ2ZXJ0ZXguY29sIjpbInJnYmEoMTc5%0ALDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5%0ALDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5%0ALDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwi%0AcmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1%0ALDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSwyMTUsMCwx%0AKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2Jh%0AKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1%0ALDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMzLDcsNi42NjY3LDcuNjY2%0ANyw3LDAuMzMzMywxLjY2NjcsNyw3LjMzMzMsMC4zMzMzLDEuMzMzMywwLjY2Njcs%0AMC4zMzMzLDAuMzMzMyw3LjY2NjcsMC4zMzMzLDcuMzMzMywxLDAuNjY2NywwLjMz%0AMzMsNywwLjY2NjcsNywwLjMzMzMsNyw3XSwiZWRnZS5jb2wiOlsicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpb%0AIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3Nw%0AYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlw%0AZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpv%0AdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwv%0AYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5O%0AYW1lOjxcL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIi%0ALCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9i%0APiBUViIsIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRW%0AIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYi%0ALCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5O%0AYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxc%0AL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5h%0AbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIs%0AIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9u%0AbGluZSIsIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20g%0APGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sInNsaWNl%0ALnBhciI6eyJzdGFydCI6WzBdLCJlbmQiOls1MF0sImludGVydmFsIjpbNF0sImFn%0AZ3JlZ2F0ZS5kdXIiOls0XSwicnVsZSI6WyJhbnkiXX0sImppdHRlciI6W2ZhbHNl%0AXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2%0AXX19LHsic3RhcnQiOlsyOF0sImVuZCI6WzI5XSwiZGF0YSI6eyJhY3RpdmUiOnsi%0Abm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0s%0AIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsx%0AMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6%0AWzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJd%0ALCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6Wzhd%0ALCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEz%0AXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XSwiMTgiOlsxN10sIjE5Ijpb%0AMThdLCIyMCI6WzE5XSwiMjEiOlsyMF0sIjIyIjpbMjFdLCIyMyI6WzIyXSwiMjQi%0AOlsyM10sIjI1IjpbMjRdLCIyNiI6WzI1XSwiMjciOlsyNl0sIjI4IjpbMjddfX0s%0AImNvb3JkIjpbWzEuNDkyLC0xLjIxNDNdLFswLjQ4NjcsLTEuNzQ3MV0sWzAuNzEz%0ANiwtMC43NDA3XSxbMS42MDI4LC0wLjAyMDNdLFsxLjE0OTEsLTEuOTQ2XSxbMi4w%0AODMyLDAuOTgyXSxbLTAuNDQ3NiwtMC42MTNdLFstMC4xMTIzLDAuMDY4NF0sWzAu%0ANDgzLC0yLjc5NTJdLFstMC4yNTExLC0xLjM5OTVdLFsxLjg3ODYsLTAuNjYwN10s%0AWzAuNzcxNCwwLjMyNThdLFstMC43NDg2LDIuNzk1Ml0sWy0yLjY2NjcsMC41MDA2%0AXSxbMi4xNDc2LC0yLjEwMTZdLFsyLjQ0MTYsMS45NjMyXSxbMi42NjY3LDAuMzE1%0ANl1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXlsYWJlbHMiOltmYWxzZV0s%0AImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJl%0AZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9z%0AdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBO%0AZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwi%0AV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJiZyI6WyJyZ2JhKDAsMCww%0ALDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgy%0AMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwy%0AMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwy%0AMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwx%0AKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwi%0AcmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiXSwidmVydGV4LmNleCI6WzIuOCwyLjQsNC40LDIuOCwyLDEu%0AMiwwLjQsMC40LDAuOCwwLjgsMC44LDAuOCwwLDAsMC44LDAuNCwwLjhdLCJ2ZXJ0%0AZXguY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5%0ALDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSki%0ALCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJn%0AYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5%0AOSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSki%0ALCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgy%0ANTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSww%0ALDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4z%0AMzMzLDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2NjcsNyw3LjMzMzMsMC4z%0AMzMzLDEuMzMzMywwLjY2NjcsMC4zMzMzLDAuMzMzMyw3LjY2NjcsMC4zMzMzLDcu%0AMzMzMywxLDAuNjY2NywwLjMzMzMsNywwLjY2NjcsNywwLjMzMzMsNyw3LDAuMzMz%0AM10sImVkZ2UuY29sIjpbInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSJdLCJ2ZXJ0ZXgudG9vbHRpcCI6WyI8%0AYj5OYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFw%0AZXIiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b24gUG9zdCA8YnI+IDxiPlR5cGU6%0APFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYWxsIFN0cmVldCBKb3Vy%0AbmFsIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+%0AIFVTQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFt%0AZTo8XC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwi%0APGI+TmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBO%0AZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENOTiA8YnI+IDxiPlR5cGU6PFwvYj4g%0AVFYiLCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIs%0AIjxiPk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwi%0APGI+TmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFt%0AZTo8XC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9i%0APiBZYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1l%0AOjxcL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8%0AYj5OYW1lOjxcL2I+IFJldXRlcnMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxp%0AbmUiLCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMuY29tIDxicj4gPGI+VHlwZTo8XC9i%0APiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b25Qb3N0LmNvbSA8YnI+%0AIDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBBT0wuY29tIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwiZWRnZS50b29sdGlwIjpbIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjAiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA1IiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCJdLCJzbGljZS5w%0AYXIiOnsic3RhcnQiOlswXSwiZW5kIjpbNTBdLCJpbnRlcnZhbCI6WzRdLCJhZ2dy%0AZWdhdGUuZHVyIjpbNF0sInJ1bGUiOlsiYW55Il19LCJqaXR0ZXIiOltmYWxzZV0s%0AInhsaW0iOlstMy4yMDQ2LDMuMjA0Nl0sInlsaW0iOlstMi45NjE2LDIuOTYxNl19%0AfSx7InN0YXJ0IjpbMjldLCJlbmQiOlszMF0sImRhdGEiOnsiYWN0aXZlIjp7Im5v%0AZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2%0AIjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBd%0ALCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsx%0ANV0sIjE3IjpbMTZdfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwi%0ANCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwi%0AMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10s%0AIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl0sIjE4IjpbMTddLCIxOSI6WzE4%0AXSwiMjAiOlsxOV0sIjIxIjpbMjBdLCIyMiI6WzIxXSwiMjMiOlsyMl0sIjI0Ijpb%0AMjNdLCIyNSI6WzI0XSwiMjYiOlsyNV0sIjI3IjpbMjZdLCIyOCI6WzI3XSwiMjki%0AOlsyOF19fSwiY29vcmQiOltbMS40NzUsLTEuMjMzN10sWzAuNDYyLC0xLjc1NjRd%0ALFswLjcwMjYsLTAuNzUzM10sWzEuNTk3NSwtMC4wMzk2XSxbMS4xMjIxLC0xLjk2%0AMjRdLFsyLjA4NSwwLjk1OTFdLFstMC40NDc5LC0wLjU5MDldLFstMC4xMjkyLDAu%0AMDQyM10sWzAuNDQ5NiwtMi44MDM2XSxbLTAuMjc0OCwtMS40MDE0XSxbMS44Njc0%0ALC0wLjY4MzVdLFswLjc3LDAuMzE2OV0sWy0wLjcxNTMsMi44MDM2XSxbLTIuNjYz%0ANSwwLjUzNTNdLFsyLjEyMDUsLTIuMTI2Nl0sWzIuNDU4MSwxLjkzNV0sWzIuNjYz%0ANSwwLjI4NTddXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxzIjpb%0AZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9zdCIsIldh%0AbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5ldyBZ%0Ab3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJDIiwi%0AWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJOWVRpbWVz%0ALmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmciOlsicmdi%0AYSgwLDAsMCwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEoMjIxLDIyMSwyMjEs%0AMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIs%0AInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdi%0AYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIy%0AMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEp%0AIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJy%0AZ2JhKDIyMSwyMjEsMjIxLDEpIl0sInZlcnRleC5jZXgiOlsyLjgsMi40LDQuNCwy%0ALjgsMiwxLjIsMC44LDAuOCwwLjgsMC44LDAuOCwwLjgsMCwwLDAuOCwwLjQsMC44%0AXSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzks%0AMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzks%0AMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzks%0AMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdi%0AYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5%0ALDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIs%0AInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1%0ANSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4z%0AMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42NjY3LDcsNy4z%0AMzMzLDAuMzMzMywxLjMzMzMsMC42NjY3LDAuMzMzMywwLjMzMzMsNy42NjY3LDAu%0AMzMzMyw3LjMzMzMsMSwwLjY2NjcsMC4zMzMzLDcsMC42NjY3LDcsMC4zMzMzLDcs%0ANywwLjMzMzMsNy4zMzMzXSwiZWRnZS5jb2wiOlsicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxiPk5hbWU6PFwvYj4g%0ATlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6%0APFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFw%0AZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRvZGF5IDxi%0Acj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IExBIFRp%0AbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+%0AIE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxi%0APk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6%0APFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9i%0APiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+%0AIEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEJCQyA8%0AYnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9vIE5ld3Mg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gR29vZ2xl%0AIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4g%0AUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6%0APFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxi%0APk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4gPGI+VHlwZTo8XC9i%0APiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMyIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sInNsaWNlLnBhciI6eyJzdGFydCI6%0AWzBdLCJlbmQiOls1MF0sImludGVydmFsIjpbNF0sImFnZ3JlZ2F0ZS5kdXIiOls0%0AXSwicnVsZSI6WyJhbnkiXX0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIw%0ANDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQiOlsz%0AMF0sImVuZCI6WzMxXSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBd%0ALCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZd%0ALCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIx%0AMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19%0ALCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0%0AXSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6%0AWzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2%0AIjpbMTVdLCIxNyI6WzE2XSwiMTgiOlsxN10sIjE5IjpbMThdLCIyMCI6WzE5XSwi%0AMjEiOlsyMF0sIjIyIjpbMjFdLCIyMyI6WzIyXSwiMjQiOlsyM10sIjI1IjpbMjRd%0ALCIyNiI6WzI1XSwiMjciOlsyNl0sIjI4IjpbMjddLCIyOSI6WzI4XSwiMzAiOlsy%0AOV19fSwiY29vcmQiOltbMS40NDQ5LC0xLjI2NTNdLFswLjQxOTIsLTEuNzY5OF0s%0AWzAuNjg0MiwtMC43NjkxXSxbMS41ODUzLC0wLjA3MDldLFsxLjA3NzIsLTEuOTg3%0AOV0sWzIuMDg1NSwwLjkyMTFdLFstMC40NjEzLC0wLjYzMDZdLFstMC4xNTIzLDAu%0AMDI3OV0sWzAuMzg0OCwtMi44MTUxXSxbLTAuMzA5MywtMS4zNjY0XSxbMS44NDg2%0ALC0wLjcxODddLFswLjc2MDksMC4zMDA1XSxbLTAuNjc0OCwyLjgxNTFdLFstMi42%0ANTYyLDAuNTk5Ml0sWzIuMDcwOSwtMi4xNjk3XSxbMi40NzM1LDEuODkwNl0sWzIu%0ANjU2MiwwLjI0MDhdXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxz%0AIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9zdCIs%0AIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5l%0AdyBZb3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJD%0AIiwiWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJOWVRp%0AbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmciOlsi%0AcmdiYSgwLDAsMCwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEoMjIxLDIyMSwy%0AMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwx%0AKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwi%0AcmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSki%0ALCJyZ2JhKDIyMSwyMjEsMjIxLDEpIl0sInZlcnRleC5jZXgiOlsyLjgsMi40LDQu%0ANCwyLjgsMiwxLjIsMS4yLDAuOCwwLjgsMS4yLDAuOCwwLjgsMCwwLDAuOCwwLjQs%0AMC44XSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgx%0ANzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwx%0ANzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwx%0ANzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwi%0AcmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1%0ALDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwx%0AKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2Jh%0AKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpb%0ANy4zMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42NjY3LDcs%0ANy4zMzMzLDAuMzMzMywxLjMzMzMsMC42NjY3LDAuMzMzMywwLjMzMzMsNy42NjY3%0ALDAuMzMzMyw3LjMzMzMsMSwwLjY2NjcsMC4zMzMzLDcsMC42NjY3LDcsMC4zMzMz%0ALDcsNywwLjMzMzMsNy4zMzMzLDddLCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwidmVydGV4%0ALnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5cGU6%0APFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBvc3Qg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2Fs%0AbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwi%0APGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3Nw%0AYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+IDxi%0APlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJyPiA8%0AYj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+VHlw%0AZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8XC9i%0APiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIs%0AIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25s%0AaW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6PFwv%0AYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxiPlR5%0AcGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8YnI+%0AIDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9u%0AUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwv%0AYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2UudG9v%0AbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0ANSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDQiXSwic2xpY2UucGFyIjp7InN0YXJ0IjpbMF0sImVuZCI6WzUwXSwiaW50ZXJ2%0AYWwiOls0XSwiYWdncmVnYXRlLmR1ciI6WzRdLCJydWxlIjpbImFueSJdfSwiaml0%0AdGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGltIjpbLTIu%0AOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6WzMxXSwiZW5kIjpbMzJdLCJkYXRhIjp7%0AImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0Ijpb%0AM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6%0AWzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUi%0AOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVkZ2VzIjp7IjEiOlswXSwiMiI6%0AWzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6%0AWzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsx%0AMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdLCIxOCI6%0AWzE3XSwiMTkiOlsxOF0sIjIwIjpbMTldLCIyMSI6WzIwXSwiMjIiOlsyMV0sIjIz%0AIjpbMjJdLCIyNCI6WzIzXSwiMjUiOlsyNF0sIjI2IjpbMjVdLCIyNyI6WzI2XSwi%0AMjgiOlsyN10sIjI5IjpbMjhdLCIzMCI6WzI5XSwiMzEiOlszMF19fSwiY29vcmQi%0AOltbMC44MzMsLTEuMjMyXSxbLTAuMTg1NywtMS43Mzc5XSxbMC4wMzQxLC0wLjcw%0ANjddLFsxLjAwMTcsLTAuMDMyNl0sWzAuNDcxNywtMS45MzcxXSxbMS42MzQ2LDAu%0AODgyNl0sWy0xLjE1ODIsLTAuNTI3OV0sWy0wLjczMzQsMC4xMTkxXSxbLTAuMTM3%0ANywtMi44MDgxXSxbLTAuOTA0OSwtMS4yOTM1XSxbMS4xMzYzLC0wLjY3MDddLFsw%0ALjE5ODksMC4zNzY1XSxbLTEuMzI2NywyLjgwODFdLFstMi4yNTA0LC0wLjQwMzJd%0ALFsxLjQ4NzcsLTIuMTQyXSxbMi4yNTA0LDEuNzQxNF0sWzIuMTIzMywwLjEzNzFd%0AXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxzIjpbZmFsc2VdLCJs%0AYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9zdCIsIldhbGwgU3RyZWV0%0AIEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5ldyBZb3JrIFBvc3Qi%0ALCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJDIiwiWWFob28gTmV3%0AcyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJOWVRpbWVzLmNvbSIsIldh%0Ac2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmciOlsicmdiYSgwLDAsMCwx%0AKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSki%0ALCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgy%0AMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwy%0AMjEsMjIxLDEpIl0sInZlcnRleC5jZXgiOlsyLjgsMi40LDQuNCwyLjgsMiwxLjIs%0AMS42LDAuOCwwLjgsMS4yLDAuOCwwLjgsMCwwLjQsMC44LDAuNCwwLjhdLCJ2ZXJ0%0AZXguY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5%0ALDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSki%0ALCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJn%0AYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5%0AOSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSki%0ALCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgy%0ANTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSww%0ALDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4z%0AMzMzLDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2NjcsNyw3LjMzMzMsMC4z%0AMzMzLDEuMzMzMywwLjY2NjcsMC4zMzMzLDAuMzMzMyw3LjY2NjcsMC4zMzMzLDcu%0AMzMzMywxLDAuNjY2NywwLjMzMzMsNywwLjY2NjcsNywwLjMzMzMsNyw3LDAuMzMz%0AMyw3LjMzMzMsNywxLjMzMzNdLCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiXSwidmVydGV4LnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBU%0AaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9i%0APiBXYXNoaW5ndG9uIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIs%0AIjxiPk5hbWU6PFwvYj4gV2FsbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6%0APFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8%0AYj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3%0AIFlvcmsgUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFt%0AZTo8XC9iPiBDTk4gPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9i%0APiBNU05CQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZP%0AWCBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJD%0AIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4g%0APGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3%0AcyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0%0AZXJzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9i%0APiBOWVRpbWVzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFt%0AZTo8XC9iPiBXYXNoaW5ndG9uUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9u%0AbGluZSIsIjxiPk5hbWU6PFwvYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4g%0AT25saW5lIl0sImVkZ2UudG9vbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gNSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwic2xpY2UucGFyIjp7InN0YXJ0IjpbMF0s%0AImVuZCI6WzUwXSwiaW50ZXJ2YWwiOls0XSwiYWdncmVnYXRlLmR1ciI6WzRdLCJy%0AdWxlIjpbImFueSJdfSwiaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0Niwz%0ALjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6WzMyXSwi%0AZW5kIjpbMzNdLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIi%0AOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgi%0AOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpb%0AMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVk%0AZ2VzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2%0AIjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBd%0ALCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsx%0ANV0sIjE3IjpbMTZdLCIxOCI6WzE3XSwiMTkiOlsxOF0sIjIwIjpbMTldLCIyMSI6%0AWzIwXSwiMjIiOlsyMV0sIjIzIjpbMjJdLCIyNCI6WzIzXSwiMjUiOlsyNF0sIjI2%0AIjpbMjVdLCIyNyI6WzI2XSwiMjgiOlsyN10sIjI5IjpbMjhdLCIzMCI6WzI5XSwi%0AMzEiOlszMF0sIjMyIjpbMzFdfX0sImNvb3JkIjpbWzAuODQxNCwtMS4yMjUxXSxb%0ALTAuMTc1LC0xLjczNTRdLFswLjA0MTMsLTAuNzAyM10sWzEuMDA2NCwtMC4wMjQ0%0AXSxbMC40ODUzLC0xLjkzMTVdLFsxLjYzNjUsMC44OTIxXSxbLTEuMTUwMiwtMC41%0AMjc3XSxbLTAuNzI5OSwwLjEyMDNdLFstMC4xMjU1LC0yLjgwNDNdLFstMC44OTY1%0ALC0xLjI5NDJdLFsxLjE0MjksLTAuNjYyNV0sWzAuMjAxLDAuMzgyMV0sWy0xLjM0%0AMTIsMi44MDQzXSxbLTIuMjQzNiwtMC40MDk0XSxbMS41MDI3LC0yLjEzMTVdLFsy%0ALjI0MzYsMS43NThdLFsyLjEyNjcsMC4xNDc1XV0sInVzZWFycm93cyI6W2ZhbHNl%0AXSwiZGlzcGxheWxhYmVscyI6W2ZhbHNlXSwibGFiZWwiOlsiTlkgVGltZXMiLCJX%0AYXNoaW5ndG9uIFBvc3QiLCJXYWxsIFN0cmVldCBKb3VybmFsIiwiVVNBIFRvZGF5%0AIiwiTEEgVGltZXMiLCJOZXcgWW9yayBQb3N0IiwiQ05OIiwiTVNOQkMiLCJGT1gg%0ATmV3cyIsIkFCQyIsIkJCQyIsIllhaG9vIE5ld3MiLCJHb29nbGUgTmV3cyIsIlJl%0AdXRlcnMuY29tIiwiTllUaW1lcy5jb20iLCJXYXNoaW5ndG9uUG9zdC5jb20iLCJB%0AT0wuY29tIl0sImJnIjpbInJnYmEoMCwwLDAsMSkiXSwidmVydGV4LmJvcmRlciI6%0AWyJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgy%0AMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwy%0AMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwy%0AMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwx%0AKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwi%0AcmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSJdLCJ2ZXJ0ZXgu%0AY2V4IjpbMi44LDIuNCw0LjgsMi44LDIsMS4yLDEuNiwxLjIsMC44LDEuMiwwLjgs%0AMC44LDAsMC40LDAuOCwwLjQsMC44XSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwx%0ANzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwx%0ANzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwx%0AKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJn%0AYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5%0AOSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSki%0ALCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgy%0ANTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSww%0ALDEpIl0sImVkZ2UubHdkIjpbNy4zMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2Njcs%0ANywwLjMzMzMsMS42NjY3LDcsNy4zMzMzLDAuMzMzMywxLjMzMzMsMC42NjY3LDAu%0AMzMzMywwLjMzMzMsNy42NjY3LDAuMzMzMyw3LjMzMzMsMSwwLjY2NjcsMC4zMzMz%0ALDcsMC42NjY3LDcsMC4zMzMzLDcsNywwLjMzMzMsNy4zMzMzLDcsMS4zMzMzLDAu%0ANjY2N10sImVkZ2UuY29sIjpbInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSJdLCJ2ZXJ0ZXgudG9vbHRpcCI6WyI8Yj5OYW1lOjxc%0AL2I+IE5ZIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5O%0AYW1lOjxcL2I+IFdhc2hpbmd0b24gUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3%0Ac3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYWxsIFN0cmVldCBKb3VybmFsIDxicj4g%0APGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFVTQSBUb2Rh%0AeSA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBM%0AQSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8%0AXC9iPiBOZXcgWW9yayBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIi%0ALCI8Yj5OYW1lOjxcL2I+IENOTiA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5O%0AYW1lOjxcL2I+IE1TTkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6%0APFwvYj4gRk9YIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8%0AXC9iPiBBQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBC%0AQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBZYWhvbyBO%0AZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEdv%0Ab2dsZSBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxc%0AL2I+IFJldXRlcnMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5O%0AYW1lOjxcL2I+IE5ZVGltZXMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUi%0ALCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b25Qb3N0LmNvbSA8YnI+IDxiPlR5cGU6%0APFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBBT0wuY29tIDxicj4gPGI+VHlw%0AZTo8XC9iPiBPbmxpbmUiXSwiZWRnZS50b29sdGlwIjpbIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjAiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA1IiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCJdLCJzbGljZS5wYXIiOnsic3Rh%0AcnQiOlswXSwiZW5kIjpbNTBdLCJpbnRlcnZhbCI6WzRdLCJhZ2dyZWdhdGUuZHVy%0AIjpbNF0sInJ1bGUiOlsiYW55Il19LCJqaXR0ZXIiOltmYWxzZV0sInhsaW0iOlst%0AMy4yMDQ2LDMuMjA0Nl0sInlsaW0iOlstMi45NjE2LDIuOTYxNl19fSx7InN0YXJ0%0AIjpbMzNdLCJlbmQiOlszNF0sImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEi%0AOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjci%0AOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzEx%0AXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3Ijpb%0AMTZdfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1%0AIjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwi%0AMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRd%0ALCIxNiI6WzE1XSwiMTciOlsxNl0sIjE4IjpbMTddLCIxOSI6WzE4XSwiMjAiOlsx%0AOV0sIjIxIjpbMjBdLCIyMiI6WzIxXSwiMjMiOlsyMl0sIjI0IjpbMjNdLCIyNSI6%0AWzI0XSwiMjYiOlsyNV0sIjI3IjpbMjZdLCIyOCI6WzI3XSwiMjkiOlsyOF0sIjMw%0AIjpbMjldLCIzMSI6WzMwXSwiMzIiOlszMV0sIjMzIjpbMzJdfX0sImNvb3JkIjpb%0AWzAuODAyMiwtMS4yNTY4XSxbLTAuMjI1OCwtMS43NDM0XSxbMC4wMTI1LC0wLjcx%0ANjddLFswLjk5MjgsLTAuMDYwNV0sWzAuNDI5MSwtMS45NTQ5XSxbMS42NDExLDAu%0AODQ0N10sWy0xLjE3NTksLTAuNTE2XSxbLTAuNzQwOSwwLjEyMzFdLFstMC4xOTg2%0ALC0yLjgxNDNdLFstMC45Mzc1LC0xLjI4ODJdLFsxLjExNDYsLTAuNzAwOV0sWzAu%0AMTk1NiwwLjM2MzFdLFstMS4zMDEzLDIuODE0M10sWy0yLjI2NDEsLTAuMzcyMl0s%0AWzEuNDQzMiwtMi4xNzY1XSxbMi4yNjQxLDEuNjk5NF0sWzIuMTE2MywwLjA4OTdd%0AXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxzIjpbZmFsc2VdLCJs%0AYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9zdCIsIldhbGwgU3RyZWV0%0AIEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5ldyBZb3JrIFBvc3Qi%0ALCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJDIiwiWWFob28gTmV3%0AcyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJOWVRpbWVzLmNvbSIsIldh%0Ac2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmciOlsicmdiYSgwLDAsMCwx%0AKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSki%0ALCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgy%0AMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwy%0AMjEsMjIxLDEpIl0sInZlcnRleC5jZXgiOlsyLjgsMi40LDQuOCwyLjgsMiwxLjIs%0AMiwxLjYsMC44LDEuMiwwLjgsMC44LDAsMC40LDAuOCwwLjQsMC44XSwidmVydGV4%0ALmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwx%0AKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwi%0AcmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2Jh%0AKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTks%0ANzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwi%0AcmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1%0ALDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwx%0AKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVkZ2UubHdkIjpbNy4zMzMzLDcuMzMz%0AMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMsMS42NjY3LDcsNy4zMzMzLDAuMzMz%0AMywxLjMzMzMsMC42NjY3LDAuMzMzMywwLjMzMzMsNy42NjY3LDAuMzMzMyw3LjMz%0AMzMsMSwwLjY2NjcsMC4zMzMzLDcsMC42NjY3LDcsMC4zMzMzLDcsNywwLjMzMzMs%0ANy4zMzMzLDcsMS4zMzMzLDAuNjY2Nyw3XSwiZWRnZS5jb2wiOlsicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxiPk5hbWU6PFwvYj4gTlkg%0AVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwv%0AYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIi%0ALCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRvZGF5IDxicj4g%0APGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IExBIFRpbWVz%0AIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IE5l%0AdyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5h%0AbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwv%0AYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBG%0AT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEFC%0AQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEJCQyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9vIE5ld3MgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gR29vZ2xlIE5l%0Ad3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gUmV1%0AdGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwv%0AYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5h%0AbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBP%0AbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMyIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIz%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sInNsaWNlLnBhciI6eyJzdGFydCI6WzBd%0ALCJlbmQiOls1MF0sImludGVydmFsIjpbNF0sImFnZ3JlZ2F0ZS5kdXIiOls0XSwi%0AcnVsZSI6WyJhbnkiXX0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYs%0AMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQiOlszNF0s%0AImVuZCI6WzM1XSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIy%0AIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4%0AIjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6%0AWzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19LCJl%0AZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwi%0ANiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEw%0AXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2Ijpb%0AMTVdLCIxNyI6WzE2XSwiMTgiOlsxN10sIjE5IjpbMThdLCIyMCI6WzE5XSwiMjEi%0AOlsyMF0sIjIyIjpbMjFdLCIyMyI6WzIyXSwiMjQiOlsyM10sIjI1IjpbMjRdLCIy%0ANiI6WzI1XSwiMjciOlsyNl0sIjI4IjpbMjddLCIyOSI6WzI4XSwiMzAiOlsyOV0s%0AIjMxIjpbMzBdLCIzMiI6WzMxXSwiMzMiOlszMl0sIjM0IjpbMzNdfX0sImNvb3Jk%0AIjpbWzEuMDU2MywtMS4yNDc5XSxbMC4wODU0LC0xLjczNDNdLFswLjExMDYsLTAu%0AODIyOV0sWzEuMDUzMSwtMC4xOTg2XSxbMC42ODIzLC0yLjAwMzldLFsxLjY3MDks%0AMC43NjYzXSxbLTEuMTUwNiwtMC42NTQ5XSxbLTAuODUxOSwtMS42NTM3XSxbLTAu%0AMjgyOCwtMi42MTg2XSxbLTAuNjkzMSwtMS4xMDU5XSxbLTAuMDM0MSwwLjIxMV0s%0AWzAuMzk1MywwLjIyOTVdLFstMS40OSwyLjYxODZdLFstMi4yMjkyLC0wLjYwMTFd%0ALFsxLjY4NjMsLTIuMTQ1Ml0sWzIuMjI5MiwxLjY2M10sWzIuMTE2MywwLjAwODJd%0AXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxzIjpbZmFsc2VdLCJs%0AYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9zdCIsIldhbGwgU3RyZWV0%0AIEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5ldyBZb3JrIFBvc3Qi%0ALCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJDIiwiWWFob28gTmV3%0AcyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJOWVRpbWVzLmNvbSIsIldh%0Ac2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmciOlsicmdiYSgwLDAsMCwx%0AKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSki%0ALCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgy%0AMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwy%0AMjEsMjIxLDEpIl0sInZlcnRleC5jZXgiOlsyLjgsMi40LDQuOCwyLjgsMiwxLjIs%0AMiwyLDEuMiwxLjIsMC44LDAuOCwwLDAuNCwwLjgsMC40LDAuOF0sInZlcnRleC5j%0Ab2wiOlsicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSki%0ALCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJn%0AYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgy%0ANTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcx%0ALDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJn%0AYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwy%0AMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSki%0ALCJyZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdlLmx3ZCI6WzcuMzMzMyw3LjMzMzMs%0ANyw2LjY2NjcsNy42NjY3LDcsMC4zMzMzLDEuNjY2Nyw3LDcuMzMzMywwLjMzMzMs%0AMS4zMzMzLDAuNjY2NywwLjMzMzMsMC4zMzMzLDcuNjY2NywwLjMzMzMsNy4zMzMz%0ALDEsMC42NjY3LDAuMzMzMyw3LDAuNjY2Nyw3LDAuMzMzMyw3LDcsMC4zMzMzLDcu%0AMzMzMyw3LDEuMzMzMywwLjY2NjcsNyw3LjY2NjddLCJlZGdlLmNvbCI6WyJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwidmVydGV4LnRv%0Ab2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwv%0AYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBvc3QgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FsbCBT%0AdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+%0ATmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBl%0AciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5l%0Ad3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+IDxiPlR5%0AcGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJyPiA8Yj5U%0AeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxiPlR5cGU6%0APFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+VHlwZTo8%0AXC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8XC9iPiBU%0AViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxi%0APk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5l%0AIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4g%0AT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxiPlR5cGU6%0APFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8YnI+IDxi%0APlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uUG9z%0AdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4g%0AQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2UudG9vbHRp%0AcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIw%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0ANCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQi%0AXSwic2xpY2UucGFyIjp7InN0YXJ0IjpbMF0sImVuZCI6WzUwXSwiaW50ZXJ2YWwi%0AOls0XSwiYWdncmVnYXRlLmR1ciI6WzRdLCJydWxlIjpbImFueSJdfSwiaml0dGVy%0AIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYx%0ANiwyLjk2MTZdfX0seyJzdGFydCI6WzM1XSwiZW5kIjpbMzZdLCJkYXRhIjp7ImFj%0AdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10s%0AIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6Wzld%0ALCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsx%0ANF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVkZ2VzIjp7IjEiOlswXSwiMiI6WzFd%0ALCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6Wzdd%0ALCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0s%0AIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdLCIxOCI6WzE3%0AXSwiMTkiOlsxOF0sIjIwIjpbMTldLCIyMSI6WzIwXSwiMjIiOlsyMV0sIjIzIjpb%0AMjJdLCIyNCI6WzIzXSwiMjUiOlsyNF0sIjI2IjpbMjVdLCIyNyI6WzI2XSwiMjgi%0AOlsyN10sIjI5IjpbMjhdLCIzMCI6WzI5XSwiMzEiOlszMF0sIjMyIjpbMzFdLCIz%0AMyI6WzMyXSwiMzQiOlszM10sIjM1IjpbMzRdfX0sImNvb3JkIjpbWzEuMDY5MSwt%0AMS4zMDZdLFswLjE2OTMsLTEuODQwNl0sWzAuMDkxNiwtMC45MDU4XSxbMS4wMjk3%0ALC0wLjI2MTFdLFswLjcwMjMsLTIuMDg0OV0sWzEuNjI5NywwLjcxNDddLFstMS4w%0AOTI5LC0wLjcyNDNdLFstMS4wMDU1LC0xLjU2OTRdLFstMC40MDI3LC0yLjU1MTRd%0ALFstMC42MDMzLC0xLjU0MzRdLFstMC4wNjQ2LDAuMTEyOV0sWzAuMzYwMywwLjE1%0AMDddLFstMS40OTY1LDIuNTUxNF0sWy0yLjE5MzcsLTAuNTg0NF0sWzEuNzA0MSwt%0AMi4xOTk3XSxbMi4xOTM3LDEuNjA4N10sWzIuMDg5MiwtMC4wMzQ2XV0sInVzZWFy%0Acm93cyI6W2ZhbHNlXSwiZGlzcGxheWxhYmVscyI6W2ZhbHNlXSwibGFiZWwiOlsi%0ATlkgVGltZXMiLCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxsIFN0cmVldCBKb3VybmFs%0AIiwiVVNBIFRvZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9yayBQb3N0IiwiQ05OIiwi%0ATVNOQkMiLCJGT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllhaG9vIE5ld3MiLCJHb29n%0AbGUgTmV3cyIsIlJldXRlcnMuY29tIiwiTllUaW1lcy5jb20iLCJXYXNoaW5ndG9u%0AUG9zdC5jb20iLCJBT0wuY29tIl0sImJnIjpbInJnYmEoMCwwLDAsMSkiXSwidmVy%0AdGV4LmJvcmRlciI6WyJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSki%0ALCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgy%0AMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwy%0AMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwy%0AMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwx%0AKSJdLCJ2ZXJ0ZXguY2V4IjpbMi44LDIuNCw0LjgsMi44LDIsMS4yLDIsMiwxLjYs%0AMS42LDAuOCwwLjgsMCwwLjQsMC44LDAuNCwwLjhdLCJ2ZXJ0ZXguY29sIjpbInJn%0AYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgx%0ANzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwx%0ANzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMjU1LDk5LDcx%0ALDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJn%0AYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSwy%0AMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSki%0ALCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgy%0ANTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMzLDcsNi42NjY3%0ALDcuNjY2Nyw3LDAuMzMzMywxLjY2NjcsNyw3LjMzMzMsMC4zMzMzLDEuMzMzMyww%0ALjY2NjcsMC4zMzMzLDAuMzMzMyw3LjY2NjcsMC4zMzMzLDcuMzMzMywxLDAuNjY2%0ANywwLjMzMzMsNywwLjY2NjcsNywwLjMzMzMsNyw3LDAuMzMzMyw3LjMzMzMsNywx%0ALjMzMzMsMC42NjY3LDcsNy42NjY3LDddLCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiXSwidmVydGV4LnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8%0AYnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNo%0AaW5ndG9uIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5h%0AbWU6PFwvYj4gV2FsbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4g%0ATmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8%0AYj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsg%0AUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9i%0APiBDTk4gPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05C%0AQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdz%0AIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4g%0APGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlw%0AZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNv%0AbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRp%0AbWVzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9i%0APiBXYXNoaW5ndG9uUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIs%0AIjxiPk5hbWU6PFwvYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5l%0AIl0sImVkZ2UudG9vbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gNSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDQiXSwic2xpY2UucGFyIjp7InN0YXJ0IjpbMF0sImVuZCI6%0AWzUwXSwiaW50ZXJ2YWwiOls0XSwiYWdncmVnYXRlLmR1ciI6WzRdLCJydWxlIjpb%0AImFueSJdfSwiaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIwNDZd%0ALCJ5bGltIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6WzM2XSwiZW5kIjpb%0AMzddLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwi%0AMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwi%0AOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIx%0ANCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVkZ2VzIjp7%0AIjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0s%0AIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6%0AWzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3%0AIjpbMTZdLCIxOCI6WzE3XSwiMTkiOlsxOF0sIjIwIjpbMTldLCIyMSI6WzIwXSwi%0AMjIiOlsyMV0sIjIzIjpbMjJdLCIyNCI6WzIzXSwiMjUiOlsyNF0sIjI2IjpbMjVd%0ALCIyNyI6WzI2XSwiMjgiOlsyN10sIjI5IjpbMjhdLCIzMCI6WzI5XSwiMzEiOlsz%0AMF0sIjMyIjpbMzFdLCIzMyI6WzMyXSwiMzQiOlszM10sIjM1IjpbMzRdLCIzNiI6%0AWzM1XX19LCJjb29yZCI6W1sxLjA2NjUsLTEuMzEyOV0sWzAuMTYxNiwtMS44NDQy%0AXSxbMC4wODk2LC0wLjkwODNdLFsxLjAzMDksLTAuMjY4M10sWzAuNjk0LC0yLjA4%0AODZdLFsxLjYzNjMsMC43MDQ2XSxbLTEuMDk0OSwtMC43MjAyXSxbLTEuMDEyMywt%0AMS41Njc5XSxbLTAuNDExOSwtMi41NTAzXSxbLTAuNjA5NiwtMS41NDA0XSxbLTAu%0AMDYwNiwwLjExMjFdLFswLjM2NDUsMC4xNDY1XSxbLTEuNDk3MywyLjU1MDNdLFst%0AMi4xOTM0LC0wLjU3NTRdLFsxLjY5NDYsLTIuMjEyNl0sWzIuMTkzNCwxLjYwMzld%0ALFsyLjA5MjIsLTAuMDQ2OF1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRpc3BsYXls%0AYWJlbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGluZ3RvbiBQ%0Ab3N0IiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxBIFRpbWVz%0AIiwiTmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3MiLCJBQkMi%0ALCJCQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJzLmNvbSIs%0AIk5ZVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNvbSJdLCJi%0AZyI6WyJyZ2JhKDAsMCwwLDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEs%0AMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIs%0AInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdi%0AYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIy%0AMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiXSwidmVydGV4LmNleCI6WzIuOCwy%0ALjQsNS4yLDIuOCwyLDEuMiwyLDIsMS42LDIsMC44LDAuOCwwLDAuNCwwLjgsMC40%0ALDAuOF0sInZlcnRleC5jb2wiOlsicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEo%0AMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzks%0AMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzks%0AMTc5LDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIs%0AInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1%0ANSw5OSw3MSwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAs%0AMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdi%0AYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdlLmx3ZCI6%0AWzcuMzMzMyw3LjMzMzMsNyw2LjY2NjcsNy42NjY3LDcsMC4zMzMzLDEuNjY2Nyw3%0ALDcuMzMzMywwLjMzMzMsMS4zMzMzLDAuNjY2NywwLjMzMzMsMC4zMzMzLDcuNjY2%0ANywwLjMzMzMsNy4zMzMzLDEsMC42NjY3LDAuMzMzMyw3LDAuNjY2Nyw3LDAuMzMz%0AMyw3LDcsMC4zMzMzLDcuMzMzMyw3LDEuMzMzMywwLjY2NjcsNyw3LjY2NjcsNyww%0ALjY2NjddLCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiXSwidmVydGV4LnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1l%0AcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBX%0AYXNoaW5ndG9uIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxi%0APk5hbWU6PFwvYj4gV2FsbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwv%0AYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlv%0AcmsgUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8%0AXC9iPiBDTk4gPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBN%0AU05CQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBO%0AZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+%0AVHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxi%0APlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8%0AYnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJz%0ALmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBO%0AWVRpbWVzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8%0AXC9iPiBXYXNoaW5ndG9uUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGlu%0AZSIsIjxiPk5hbWU6PFwvYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25s%0AaW5lIl0sImVkZ2UudG9vbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gNSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwic2xpY2UucGFyIjp7InN0YXJ0IjpbMF0sImVu%0AZCI6WzUwXSwiaW50ZXJ2YWwiOls0XSwiYWdncmVnYXRlLmR1ciI6WzRdLCJydWxl%0AIjpbImFueSJdfSwiaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIw%0ANDZdLCJ5bGltIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6WzM3XSwiZW5k%0AIjpbMzhdLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsx%0AXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3%0AXSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJd%0ALCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVkZ2Vz%0AIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2Ijpb%0ANV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIx%0AMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0s%0AIjE3IjpbMTZdLCIxOCI6WzE3XSwiMTkiOlsxOF0sIjIwIjpbMTldLCIyMSI6WzIw%0AXSwiMjIiOlsyMV0sIjIzIjpbMjJdLCIyNCI6WzIzXSwiMjUiOlsyNF0sIjI2Ijpb%0AMjVdLCIyNyI6WzI2XSwiMjgiOlsyN10sIjI5IjpbMjhdLCIzMCI6WzI5XSwiMzEi%0AOlszMF0sIjMyIjpbMzFdLCIzMyI6WzMyXSwiMzQiOlszM10sIjM1IjpbMzRdLCIz%0ANiI6WzM1XSwiMzciOlszNl19fSwiY29vcmQiOltbMS4xMTQ3LC0xLjMwMzFdLFsw%0ALjIwMTIsLTEuODA3OF0sWzAuMTQ5LC0wLjg2NDVdLFsxLjA4OTQsLTAuMjg0M10s%0AWzAuNzMwNCwtMi4wNjY0XSxbMS41MTc4LDAuNzMyMl0sWy0xLjAzMzksLTAuNjY0%0ANV0sWy0wLjk2MjcsLTEuNTEzN10sWy0wLjM4MywtMi41MDY1XSxbLTAuNTYwOCwt%0AMS40ODc5XSxbMC4wMDc2LDAuMTExN10sWzAuNTgzOCwwLjI3MjVdLFstMS42MTc1%0ALDIuNTA2NV0sWy0yLjE0MDgsLTAuNTQxNl0sWzEuNzMxLC0yLjIwMzZdLFsyLjAw%0ANzIsMS42Nzk5XSxbMi4xNDA4LDAuMDM2OV1dLCJ1c2VhcnJvd3MiOltmYWxzZV0s%0AImRpc3BsYXlsYWJlbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2Fz%0AaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIs%0AIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5l%0Ad3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0%0AZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9M%0ALmNvbSJdLCJiZyI6WyJyZ2JhKDAsMCwwLDEpIl0sInZlcnRleC5ib3JkZXIiOlsi%0AcmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSki%0ALCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgy%0AMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiXSwidmVydGV4LmNl%0AeCI6WzIuOCwyLjQsNS4yLDIuOCwyLDEuNiwyLDIsMS42LDIsMC44LDEuMiwwLDAu%0ANCwwLjgsMC40LDAuOF0sInZlcnRleC5jb2wiOlsicmdiYSgxNzksMTc5LDE3OSwx%0AKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwi%0AcmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2Jh%0AKDE3OSwxNzksMTc5LDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5%0AOSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSki%0ALCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgy%0ANTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSww%0ALDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSJdLCJl%0AZGdlLmx3ZCI6WzcuMzMzMyw3LjMzMzMsNyw2LjY2NjcsNy42NjY3LDcsMC4zMzMz%0ALDEuNjY2Nyw3LDcuMzMzMywwLjMzMzMsMS4zMzMzLDAuNjY2NywwLjMzMzMsMC4z%0AMzMzLDcuNjY2NywwLjMzMzMsNy4zMzMzLDEsMC42NjY3LDAuMzMzMyw3LDAuNjY2%0ANyw3LDAuMzMzMyw3LDcsMC4zMzMzLDcuMzMzMyw3LDEuMzMzMywwLjY2NjcsNyw3%0ALjY2NjcsNywwLjY2NjcsMC42NjY3XSwiZWRnZS5jb2wiOlsicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZl%0AcnRleC50b29sdGlwIjpbIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQ%0Ab3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+%0AIFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBl%0AciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBO%0AZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8%0AXC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8%0AYj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxi%0APlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6%0APFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4g%0AVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8%0AYj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20g%0APGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGlu%0AZ3RvblBvc3QuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1l%0AOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdl%0ALnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiA0Il0sInNsaWNlLnBhciI6eyJzdGFydCI6WzBdLCJlbmQiOls1MF0sImlu%0AdGVydmFsIjpbNF0sImFnZ3JlZ2F0ZS5kdXIiOls0XSwicnVsZSI6WyJhbnkiXX0s%0AImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6%0AWy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQiOlszOF0sImVuZCI6WzM5XSwiZGF0%0AYSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwi%0ANCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwi%0AMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10s%0AIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0s%0AIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0s%0AIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEz%0AIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XSwi%0AMTgiOlsxN10sIjE5IjpbMThdLCIyMCI6WzE5XSwiMjEiOlsyMF0sIjIyIjpbMjFd%0ALCIyMyI6WzIyXSwiMjQiOlsyM10sIjI1IjpbMjRdLCIyNiI6WzI1XSwiMjciOlsy%0ANl0sIjI4IjpbMjddLCIyOSI6WzI4XSwiMzAiOlsyOV0sIjMxIjpbMzBdLCIzMiI6%0AWzMxXSwiMzMiOlszMl0sIjM0IjpbMzNdLCIzNSI6WzM0XSwiMzYiOlszNV0sIjM3%0AIjpbMzZdLCIzOCI6WzM3XX19LCJjb29yZCI6W1sxLjEwNTIsLTAuODEwNl0sWzAu%0AMTk4NCwtMS4zMTIyXSxbMC4xMTg3LC0wLjM2MTFdLFsxLjAzMDUsMC4yMzI0XSxb%0AMC43MjkyLC0xLjU2MTFdLFsxLjUxOTYsMS4xOTddLFstMS4wODU4LC0wLjIxM10s%0AWy0wLjk2OTksLTEuMDQ2OF0sWy0wLjM2MjcsLTIuMDQ4OV0sWy0wLjU3MjQsLTEu%0AMDI1Ml0sWy0wLjAzMzgsMC41MTM1XSxbMC40NzA2LDAuODg3NF0sWy0wLjA2Miwx%0ALjkyNzldLFstMi4xOTEsLTAuMDc5OF0sWzEuNzI3MywtMS43NDkyXSxbMi4xOTEs%0AMi4wNDg5XSxbMi4xMjA3LDAuNDYyNl1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRp%0Ac3BsYXlsYWJlbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGlu%0AZ3RvbiBQb3N0IiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxB%0AIFRpbWVzIiwiTmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3Mi%0ALCJBQkMiLCJCQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJz%0ALmNvbSIsIk5ZVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNv%0AbSJdLCJiZyI6WyJyZ2JhKDAsMCwwLDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdi%0AYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIy%0AMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEp%0AIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJy%0AZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiXSwidmVydGV4LmNleCI6%0AWzIuOCwyLjQsNS4yLDIuOCwyLDEuNiwyLDIsMS42LDIsMC44LDEuNiwwLjQsMC40%0ALDAuOCwwLjQsMC44XSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5LDEp%0AIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEo%0AMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5%0ALDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIs%0AInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1%0ANSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAs%0AMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0sImVk%0AZ2UubHdkIjpbNy4zMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMzMzMs%0AMS42NjY3LDcsNy4zMzMzLDAuMzMzMywxLjMzMzMsMC42NjY3LDAuMzMzMywwLjMz%0AMzMsNy42NjY3LDAuMzMzMyw3LjMzMzMsMSwwLjY2NjcsMC4zMzMzLDcsMC42NjY3%0ALDcsMC4zMzMzLDcsNywwLjMzMzMsNy4zMzMzLDcsMS4zMzMzLDAuNjY2Nyw3LDcu%0ANjY2Nyw3LDAuNjY2NywwLjY2NjcsNy4zMzMzXSwiZWRnZS5jb2wiOlsicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxiPk5h%0AbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIs%0AIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9i%0APiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNB%0AIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxc%0AL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5O%0AYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3Nw%0AYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBUViIs%0AIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+%0ATmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5O%0AYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxc%0AL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlh%0AaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwv%0AYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5h%0AbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIs%0AIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9u%0AbGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4gPGI+%0AVHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8%0AYj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sInNsaWNlLnBhciI6%0AeyJzdGFydCI6WzBdLCJlbmQiOls1MF0sImludGVydmFsIjpbNF0sImFnZ3JlZ2F0%0AZS5kdXIiOls0XSwicnVsZSI6WyJhbnkiXX0sImppdHRlciI6W2ZhbHNlXSwieGxp%0AbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsi%0Ac3RhcnQiOlszOV0sImVuZCI6WzQwXSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMi%0AOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1%0AXSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEy%0AIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwi%0AMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0Ijpb%0AM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6%0AWzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUi%0AOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XSwiMTgiOlsxN10sIjE5IjpbMThdLCIy%0AMCI6WzE5XSwiMjEiOlsyMF0sIjIyIjpbMjFdLCIyMyI6WzIyXSwiMjQiOlsyM10s%0AIjI1IjpbMjRdLCIyNiI6WzI1XSwiMjciOlsyNl0sIjI4IjpbMjddLCIyOSI6WzI4%0AXSwiMzAiOlsyOV0sIjMxIjpbMzBdLCIzMiI6WzMxXSwiMzMiOlszMl0sIjM0Ijpb%0AMzNdLCIzNSI6WzM0XSwiMzYiOlszNV0sIjM3IjpbMzZdLCIzOCI6WzM3XSwiMzki%0AOlszOF19fSwiY29vcmQiOltbMC41ODkzLC0wLjkzOTFdLFstMC4zODU4LC0xLjQz%0ANjVdLFstMC4zOTUsLTAuNDg0NF0sWzAuNTY2NiwwLjE0OF0sWzAuMTU1MSwtMS42%0ANzU0XSxbMC44MzE2LDEuMTcwNl0sWy0xLjUyMywtMC4xNjU2XSxbLTEuNTg2Niwt%0AMC45NzkyXSxbLTEuMDIyMSwtMi4wNjU2XSxbLTEuMTY2MywtMS4wODAzXSxbLTAu%0AMTYzNSwwLjIzOTFdLFstMC4zMDE3LDAuODIzNF0sWy0wLjY1NTQsMS45MDVdLFst%0AMS40ODYyLDAuODk3N10sWzEuMTY0MSwtMS44ODE1XSxbMS40NjM2LDIuMDY1Nl0s%0AWzEuNTg2NiwwLjQ4NjZdXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFi%0AZWxzIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9z%0AdCIsIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIs%0AIk5ldyBZb3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwi%0AQkJDIiwiWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJO%0AWVRpbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmci%0AOlsicmdiYSgwLDAsMCwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIy%0AMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEp%0AIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJy%0AZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEs%0AMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIl0sInZlcnRleC5jZXgiOlsyLjgsMi40%0ALDUuMiwyLjgsMiwxLjYsMiwyLDEuNiwyLDAuOCwyLDAuNCwwLjgsMC44LDAuNCww%0ALjhdLCJ2ZXJ0ZXguY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3%0AOSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3%0AOSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3%0AOSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJy%0AZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUs%0AOTksNzEsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEp%0AIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEo%0AMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3%0ALjMzMzMsNy4zMzMzLDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2NjcsNyw3%0ALjMzMzMsMC4zMzMzLDEuMzMzMywwLjY2NjcsMC4zMzMzLDAuMzMzMyw3LjY2Njcs%0AMC4zMzMzLDcuMzMzMywxLDAuNjY2NywwLjMzMzMsNywwLjY2NjcsNywwLjMzMzMs%0ANyw3LDAuMzMzMyw3LjMzMzMsNywxLjMzMzMsMC42NjY3LDcsNy42NjY3LDcsMC42%0ANjY3LDAuNjY2Nyw3LjMzMzMsNy4zMzMzXSwiZWRnZS5jb2wiOlsicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRl%0AeC50b29sdGlwIjpbIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0%0AIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdh%0AbGwgU3RyZWV0IEpvdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIs%0AIjxiPk5hbWU6PFwvYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdz%0AcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9i%0APiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8%0AYj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4g%0APGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwv%0AYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYi%0ALCI8Yj5OYW1lOjxcL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9u%0AbGluZSIsIjxiPk5hbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJy%0APiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3Rv%0AblBvc3QuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxc%0AL2I+IEFPTC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRv%0Ab2x0aXAiOlsiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDUiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiA0Il0sInNsaWNlLnBhciI6eyJzdGFydCI6WzBdLCJlbmQiOls1MF0sImludGVy%0AdmFsIjpbNF0sImFnZ3JlZ2F0ZS5kdXIiOls0XSwicnVsZSI6WyJhbnkiXX0sImpp%0AdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0y%0ALjk2MTYsMi45NjE2XX19LHsic3RhcnQiOls0MF0sImVuZCI6WzQxXSwiZGF0YSI6%0AeyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6%0AWzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAi%0AOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1%0AIjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIi%0AOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgi%0AOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpb%0AMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XSwiMTgi%0AOlsxN10sIjE5IjpbMThdLCIyMCI6WzE5XSwiMjEiOlsyMF0sIjIyIjpbMjFdLCIy%0AMyI6WzIyXSwiMjQiOlsyM10sIjI1IjpbMjRdLCIyNiI6WzI1XSwiMjciOlsyNl0s%0AIjI4IjpbMjddLCIyOSI6WzI4XSwiMzAiOlsyOV0sIjMxIjpbMzBdLCIzMiI6WzMx%0AXSwiMzMiOlszMl0sIjM0IjpbMzNdLCIzNSI6WzM0XSwiMzYiOlszNV0sIjM3Ijpb%0AMzZdLCIzOCI6WzM3XSwiMzkiOlszOF0sIjQwIjpbMzldfX0sImNvb3JkIjpbWzAu%0ANTIwOCwtMS4wNjc5XSxbLTAuNDMyMiwtMS41MDQxXSxbLTAuMzA1NywtMC41Mjg3%0AXSxbMC40ODE3LDAuMTQ5MV0sWzAuMDgzNSwtMS44MTM2XSxbMC43MjQyLDEuMTU2%0AOF0sWy0xLjM5MzUsLTAuMTg0MV0sWy0xLjU0MywtMC45ODAzXSxbLTEuMTA4Niwt%0AMi4wOTU5XSxbLTEuMTI3OSwtMS4wODI3XSxbMC45MTE2LC0wLjQ4OTddLFstMC4z%0AMjU4LDAuNjk1NF0sWy0wLjcxNjYsMS43NzI5XSxbLTEuNDY5NywwLjgzMDddLFsx%0ALjA3NjksLTIuMDU3N10sWzEuMzAwOSwyLjA5NTldLFsxLjU0MywwLjU4MzddXSwi%0AdXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxzIjpbZmFsc2VdLCJsYWJl%0AbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9zdCIsIldhbGwgU3RyZWV0IEpv%0AdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5ldyBZb3JrIFBvc3QiLCJD%0ATk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJDIiwiWWFob28gTmV3cyIs%0AIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJOWVRpbWVzLmNvbSIsIldhc2hp%0Abmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmciOlsicmdiYSgwLDAsMCwxKSJd%0ALCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIy%0AMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEp%0AIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJy%0AZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIl0sInZlcnRleC5jZXgiOlsyLjgsMi40LDUuMiwyLjgsMiwxLjYsMiwy%0ALDEuNiwyLDAuOCwyLjQsMC44LDAuOCwwLjgsMC40LDAuOF0sInZlcnRleC5jb2wi%0AOlsicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEo%0AMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgyNTUs%0AOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEp%0AIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEo%0AMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUs%0AMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJy%0AZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdlLmx3ZCI6WzcuMzMzMyw3LjMzMzMsNyw2%0ALjY2NjcsNy42NjY3LDcsMC4zMzMzLDEuNjY2Nyw3LDcuMzMzMywwLjMzMzMsMS4z%0AMzMzLDAuNjY2NywwLjMzMzMsMC4zMzMzLDcuNjY2NywwLjMzMzMsNy4zMzMzLDEs%0AMC42NjY3LDAuMzMzMyw3LDAuNjY2Nyw3LDAuMzMzMyw3LDcsMC4zMzMzLDcuMzMz%0AMyw3LDEuMzMzMywwLjY2NjcsNyw3LjY2NjcsNywwLjY2NjcsMC42NjY3LDcuMzMz%0AMyw3LjMzMzMsN10sImVkZ2UuY29sIjpbInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSJd%0ALCJ2ZXJ0ZXgudG9vbHRpcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4g%0APGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0%0Ab24gUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8%0AXC9iPiBXYWxsIFN0cmVldCBKb3VybmFsIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdz%0AcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwv%0AYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0%0AIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENO%0ATiA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJy%0APiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8%0AXC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+%0AVHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRlcnMuY29tIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMu%0AY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdh%0Ac2hpbmd0b25Qb3N0LmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+%0ATmFtZTo8XC9iPiBBT0wuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwi%0AZWRnZS50b29sdGlwIjpbIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjAiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiA1IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gNCJdLCJzbGljZS5wYXIiOnsic3RhcnQiOlswXSwiZW5kIjpbNTBd%0ALCJpbnRlcnZhbCI6WzRdLCJhZ2dyZWdhdGUuZHVyIjpbNF0sInJ1bGUiOlsiYW55%0AIl19LCJqaXR0ZXIiOltmYWxzZV0sInhsaW0iOlstMy4yMDQ2LDMuMjA0Nl0sInls%0AaW0iOlstMi45NjE2LDIuOTYxNl19fSx7InN0YXJ0IjpbNDFdLCJlbmQiOls0Ml0s%0AImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpb%0AMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5Ijpb%0AOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0Ijpb%0AMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRnZXMiOnsiMSI6%0AWzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6%0AWzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFd%0ALCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsx%0ANl0sIjE4IjpbMTddLCIxOSI6WzE4XSwiMjAiOlsxOV0sIjIxIjpbMjBdLCIyMiI6%0AWzIxXSwiMjMiOlsyMl0sIjI0IjpbMjNdLCIyNSI6WzI0XSwiMjYiOlsyNV0sIjI3%0AIjpbMjZdLCIyOCI6WzI3XSwiMjkiOlsyOF0sIjMwIjpbMjldLCIzMSI6WzMwXSwi%0AMzIiOlszMV0sIjMzIjpbMzJdLCIzNCI6WzMzXSwiMzUiOlszNF0sIjM2IjpbMzVd%0ALCIzNyI6WzM2XSwiMzgiOlszN10sIjM5IjpbMzhdLCI0MCI6WzM5XSwiNDEiOls0%0AMF19fSwiY29vcmQiOltbMC4zMDYsLTAuODk5Nl0sWy0wLjY0MTksLTEuMzU1OF0s%0AWy0wLjUyMDksLTAuMzgzOV0sWzAuMjM4OCwwLjMwNDFdLFstMC4xMTg5LC0xLjY1%0AMzZdLFswLjgzMzcsMS4wNzA1XSxbLTEuNjE5OCwtMC4wMTkxXSxbLTEuNzU5OCwt%0AMC44MTc1XSxbLTEuMzE4MSwtMS45MzgxXSxbLTEuMzQ4MSwtMC45MjgyXSxbMC43%0AMzExLC0wLjMxMzhdLFstMC40NzMsMC44MDg1XSxbLTAuNjE2MSwxLjkzODFdLFst%0AMS42MjY5LDEuMDExN10sWzAuODc4MywtMS44Nzc2XSxbMS43NTk4LDEuNjc5OV0s%0AWzAuMjcxNCwxLjUyNzZdXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFi%0AZWxzIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9z%0AdCIsIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIs%0AIk5ldyBZb3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwi%0AQkJDIiwiWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJO%0AWVRpbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmci%0AOlsicmdiYSgwLDAsMCwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIy%0AMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEp%0AIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJy%0AZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEs%0AMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIl0sInZlcnRleC5jZXgiOlsyLjgsMi40%0ALDUuMiwyLjgsMiwxLjYsMiwyLDEuNiwyLDAuOCwyLjQsMS4yLDAuOCwwLjgsMC40%0ALDEuMl0sInZlcnRleC5jb2wiOlsicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEo%0AMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzks%0AMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzks%0AMTc5LDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIs%0AInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1%0ANSw5OSw3MSwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAs%0AMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdi%0AYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdlLmx3ZCI6%0AWzcuMzMzMyw3LjMzMzMsNyw2LjY2NjcsNy42NjY3LDcsMC4zMzMzLDEuNjY2Nyw3%0ALDcuMzMzMywwLjMzMzMsMS4zMzMzLDAuNjY2NywwLjMzMzMsMC4zMzMzLDcuNjY2%0ANywwLjMzMzMsNy4zMzMzLDEsMC42NjY3LDAuMzMzMyw3LDAuNjY2Nyw3LDAuMzMz%0AMyw3LDcsMC4zMzMzLDcuMzMzMyw3LDEuMzMzMywwLjY2NjcsNyw3LjY2NjcsNyww%0ALjY2NjcsMC42NjY3LDcuMzMzMyw3LjMzMzMsNywwLjMzMzNdLCJlZGdlLmNvbCI6%0AWyJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwi%0AdmVydGV4LnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxi%0APlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9u%0AIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwv%0AYj4gV2FsbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3Bh%0AcGVyIiwiPGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8%0AYnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4g%0APGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4g%0APGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlw%0AZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9i%0APiBUViIsIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwv%0AYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+%0AIDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNv%0AbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNo%0AaW5ndG9uUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5h%0AbWU6PFwvYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVk%0AZ2UudG9vbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gNSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIz%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDQiXSwic2xpY2UucGFyIjp7InN0YXJ0IjpbMF0sImVuZCI6WzUwXSwi%0AaW50ZXJ2YWwiOls0XSwiYWdncmVnYXRlLmR1ciI6WzRdLCJydWxlIjpbImFueSJd%0AfSwiaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGlt%0AIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6WzQyXSwiZW5kIjpbNDNdLCJk%0AYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJd%0ALCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6Wzhd%0ALCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEz%0AXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0sImVkZ2VzIjp7IjEiOlsw%0AXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2%0AXSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwi%0AMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZd%0ALCIxOCI6WzE3XSwiMTkiOlsxOF0sIjIwIjpbMTldLCIyMSI6WzIwXSwiMjIiOlsy%0AMV0sIjIzIjpbMjJdLCIyNCI6WzIzXSwiMjUiOlsyNF0sIjI2IjpbMjVdLCIyNyI6%0AWzI2XSwiMjgiOlsyN10sIjI5IjpbMjhdLCIzMCI6WzI5XSwiMzEiOlszMF0sIjMy%0AIjpbMzFdLCIzMyI6WzMyXSwiMzQiOlszM10sIjM1IjpbMzRdLCIzNiI6WzM1XSwi%0AMzciOlszNl0sIjM4IjpbMzddLCIzOSI6WzM4XSwiNDAiOlszOV0sIjQxIjpbNDBd%0ALCI0MiI6WzQxXX19LCJjb29yZCI6W1swLjMwNTIsLTAuNzk3N10sWy0wLjY0MDks%0ALTEuMzM3N10sWy0wLjY3OTEsLTAuMzg1Ml0sWzAuMTU5MywwLjI2NV0sWy0wLjA4%0AOTUsLTEuNTQ5NV0sWzAuODcxMSwwLjkwNThdLFstMS44NDU1LC0wLjEwMjZdLFst%0AMS44NjQ0LC0wLjkyMzhdLFstMS4yNTA1LC0xLjk5MjFdLFstMS40MzgxLC0xLjAx%0ANjVdLFstMC45MzY3LDAuNDcxM10sWy0wLjQwODIsMC44NDY2XSxbLTAuNDU5Mywx%0ALjk5MjFdLFstMS42Mzg1LDAuOTk2NV0sWzAuOTIsLTEuNzE3Nl0sWzEuODY0NCwx%0ALjM4NzRdLFswLjM5NjgsMS40OTkxXV0sInVzZWFycm93cyI6W2ZhbHNlXSwiZGlz%0AcGxheWxhYmVscyI6W2ZhbHNlXSwibGFiZWwiOlsiTlkgVGltZXMiLCJXYXNoaW5n%0AdG9uIFBvc3QiLCJXYWxsIFN0cmVldCBKb3VybmFsIiwiVVNBIFRvZGF5IiwiTEEg%0AVGltZXMiLCJOZXcgWW9yayBQb3N0IiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3cyIs%0AIkFCQyIsIkJCQyIsIllhaG9vIE5ld3MiLCJHb29nbGUgTmV3cyIsIlJldXRlcnMu%0AY29tIiwiTllUaW1lcy5jb20iLCJXYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wuY29t%0AIl0sImJnIjpbInJnYmEoMCwwLDAsMSkiXSwidmVydGV4LmJvcmRlciI6WyJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSki%0ALCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgy%0AMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwy%0AMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSJdLCJ2ZXJ0ZXguY2V4Ijpb%0AMi44LDIuNCw1LjIsMi44LDIsMS42LDIsMiwxLjYsMiwxLjIsMi40LDEuMiwxLjIs%0AMC44LDAuNCwxLjJdLCJ2ZXJ0ZXguY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSki%0ALCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJn%0AYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgx%0ANzksMTc5LDE3OSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTks%0ANzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwi%0AcmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1%0ALDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwx%0AKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRn%0AZS5sd2QiOls3LjMzMzMsNy4zMzMzLDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMzMywx%0ALjY2NjcsNyw3LjMzMzMsMC4zMzMzLDEuMzMzMywwLjY2NjcsMC4zMzMzLDAuMzMz%0AMyw3LjY2NjcsMC4zMzMzLDcuMzMzMywxLDAuNjY2NywwLjMzMzMsNywwLjY2Njcs%0ANywwLjMzMzMsNyw3LDAuMzMzMyw3LjMzMzMsNywxLjMzMzMsMC42NjY3LDcsNy42%0ANjY3LDcsMC42NjY3LDAuNjY2Nyw3LjMzMzMsNy4zMzMzLDcsMC4zMzMzLDAuMzMz%0AM10sImVkZ2UuY29sIjpbInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSJdLCJ2ZXJ0ZXgudG9vbHRp%0AcCI6WyI8Yj5OYW1lOjxcL2I+IE5ZIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBO%0AZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b24gUG9zdCA8YnI+IDxi%0APlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYWxsIFN0cmVl%0AdCBKb3VybmFsIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1l%0AOjxcL2I+IFVTQSBUb2RheSA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwi%0APGI+TmFtZTo8XC9iPiBMQSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3Bh%0AcGVyIiwiPGI+TmFtZTo8XC9iPiBOZXcgWW9yayBQb3N0IDxicj4gPGI+VHlwZTo8%0AXC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IENOTiA8YnI+IDxiPlR5cGU6%0APFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IE1TTkJDIDxicj4gPGI+VHlwZTo8XC9i%0APiBUViIsIjxiPk5hbWU6PFwvYj4gRk9YIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIFRWIiwiPGI+TmFtZTo8XC9iPiBBQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwi%0APGI+TmFtZTo8XC9iPiBCQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFt%0AZTo8XC9iPiBZYWhvbyBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8%0AYj5OYW1lOjxcL2I+IEdvb2dsZSBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxp%0AbmUiLCI8Yj5OYW1lOjxcL2I+IFJldXRlcnMuY29tIDxicj4gPGI+VHlwZTo8XC9i%0APiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IE5ZVGltZXMuY29tIDxicj4gPGI+VHlw%0AZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IFdhc2hpbmd0b25Qb3N0LmNv%0AbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBBT0wu%0AY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiXSwiZWRnZS50b29sdGlwIjpb%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjAiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA1IiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Iiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCJdLCJz%0AbGljZS5wYXIiOnsic3RhcnQiOlswXSwiZW5kIjpbNTBdLCJpbnRlcnZhbCI6WzRd%0ALCJhZ2dyZWdhdGUuZHVyIjpbNF0sInJ1bGUiOlsiYW55Il19LCJqaXR0ZXIiOltm%0AYWxzZV0sInhsaW0iOlstMy4yMDQ2LDMuMjA0Nl0sInlsaW0iOlstMi45NjE2LDIu%0AOTYxNl19fSx7InN0YXJ0IjpbNDNdLCJlbmQiOls0NF0sImRhdGEiOnsiYWN0aXZl%0AIjp7Im5vZGVzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6%0AWzRdLCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjEx%0AIjpbMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwi%0AMTYiOlsxNV0sIjE3IjpbMTZdfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMi%0AOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjki%0AOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQi%0AOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl0sIjE4IjpbMTddLCIx%0AOSI6WzE4XSwiMjAiOlsxOV0sIjIxIjpbMjBdLCIyMiI6WzIxXSwiMjMiOlsyMl0s%0AIjI0IjpbMjNdLCIyNSI6WzI0XSwiMjYiOlsyNV0sIjI3IjpbMjZdLCIyOCI6WzI3%0AXSwiMjkiOlsyOF0sIjMwIjpbMjldLCIzMSI6WzMwXSwiMzIiOlszMV0sIjMzIjpb%0AMzJdLCIzNCI6WzMzXSwiMzUiOlszNF0sIjM2IjpbMzVdLCIzNyI6WzM2XSwiMzgi%0AOlszN10sIjM5IjpbMzhdLCI0MCI6WzM5XSwiNDEiOls0MF0sIjQyIjpbNDFdLCI0%0AMyI6WzQyXX19LCJjb29yZCI6W1swLjM5NjQsLTAuNjc3NF0sWy0wLjU0NDgsLTEu%0AMjYxN10sWy0wLjU5ODMsLTAuMzExM10sWzAuMjM3MiwwLjM4MzRdLFswLjAxODEs%0ALTEuNDQ3Ml0sWzAuODYzMiwxLjE0MTZdLFstMS43NDA0LDAuMDE5NV0sWy0xLjc4%0AODYsLTAuODM0M10sWy0xLjE0OTUsLTEuOTA1Nl0sWy0xLjM1OTYsLTAuOTQyMl0s%0AWy0wLjg2MDQsMC41MjU3XSxbLTAuMzQ5NiwwLjkwODhdLFstMC44MDM1LDEuOTA1%0ANl0sWy0xLjQ4MzYsMS4xNTc1XSxbMS4wMzkzLC0xLjU2Nl0sWzEuNzg4NiwxLjcw%0AOTddLFswLjIzMDIsMS42NTk4XV0sInVzZWFycm93cyI6W2ZhbHNlXSwiZGlzcGxh%0AeWxhYmVscyI6W2ZhbHNlXSwibGFiZWwiOlsiTlkgVGltZXMiLCJXYXNoaW5ndG9u%0AIFBvc3QiLCJXYWxsIFN0cmVldCBKb3VybmFsIiwiVVNBIFRvZGF5IiwiTEEgVGlt%0AZXMiLCJOZXcgWW9yayBQb3N0IiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3cyIsIkFC%0AQyIsIkJCQyIsIllhaG9vIE5ld3MiLCJHb29nbGUgTmV3cyIsIlJldXRlcnMuY29t%0AIiwiTllUaW1lcy5jb20iLCJXYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wuY29tIl0s%0AImJnIjpbInJnYmEoMCwwLDAsMSkiXSwidmVydGV4LmJvcmRlciI6WyJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIy%0AMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEp%0AIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJy%0AZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSJdLCJ2ZXJ0ZXguY2V4IjpbMi44%0ALDIuNCw1LjIsMi44LDIsMS42LDIsMiwxLjYsMiwxLjIsMi40LDEuNiwxLjYsMC44%0ALDAuNCwxLjJdLCJ2ZXJ0ZXguY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEo%0AMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzks%0AMTc5LDE3OSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEs%0AMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdi%0AYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIx%0ANSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIs%0AInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5s%0Ad2QiOls3LjMzMzMsNy4zMzMzLDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2%0ANjcsNyw3LjMzMzMsMC4zMzMzLDEuMzMzMywwLjY2NjcsMC4zMzMzLDAuMzMzMyw3%0ALjY2NjcsMC4zMzMzLDcuMzMzMywxLDAuNjY2NywwLjMzMzMsNywwLjY2NjcsNyww%0ALjMzMzMsNyw3LDAuMzMzMyw3LjMzMzMsNywxLjMzMzMsMC42NjY3LDcsNy42NjY3%0ALDcsMC42NjY3LDAuNjY2Nyw3LjMzMzMsNy4zMzMzLDcsMC4zMzMzLDAuMzMzMyw3%0AXSwiZWRnZS5jb2wiOlsicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2Fz%0AaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5O%0AYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlw%0AZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IExBIFRpbWVzIDxicj4g%0APGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3Jr%0AIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwv%0AYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gTVNO%0AQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3%0AcyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5j%0Ab20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gTllU%0AaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwv%0AYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUi%0ALCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGlu%0AZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIz%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiA0Il0sInNsaWNlLnBhciI6eyJzdGFydCI6WzBdLCJlbmQi%0AOls1MF0sImludGVydmFsIjpbNF0sImFnZ3JlZ2F0ZS5kdXIiOls0XSwicnVsZSI6%0AWyJhbnkiXX0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2%0AXSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQiOls0NF0sImVuZCI6%0AWzQ1XSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0s%0AIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10s%0AIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwi%0AMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19LCJlZGdlcyI6%0AeyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVd%0ALCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIi%0AOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIx%0ANyI6WzE2XSwiMTgiOlsxN10sIjE5IjpbMThdLCIyMCI6WzE5XSwiMjEiOlsyMF0s%0AIjIyIjpbMjFdLCIyMyI6WzIyXSwiMjQiOlsyM10sIjI1IjpbMjRdLCIyNiI6WzI1%0AXSwiMjciOlsyNl0sIjI4IjpbMjddLCIyOSI6WzI4XSwiMzAiOlsyOV0sIjMxIjpb%0AMzBdLCIzMiI6WzMxXSwiMzMiOlszMl0sIjM0IjpbMzNdLCIzNSI6WzM0XSwiMzYi%0AOlszNV0sIjM3IjpbMzZdLCIzOCI6WzM3XSwiMzkiOlszOF0sIjQwIjpbMzldLCI0%0AMSI6WzQwXSwiNDIiOls0MV0sIjQzIjpbNDJdLCI0NCI6WzQzXX19LCJjb29yZCI6%0AW1swLjQwODMsLTAuNjYzNF0sWy0wLjUyNjEsLTEuMjU4XSxbLTAuNTg5NSwtMC4z%0AMDg1XSxbMC4yMzc5LDAuMzkzOV0sWzAuMDM4OCwtMS40MzU4XSxbMC44NTY0LDEu%0AMTU5OF0sWy0xLjczNTMsMC4wMTExXSxbLTEuNzc1MiwtMC44NDI2XSxbLTEuMTIz%0AOCwtMS45MDc2XSxbLTEuMzQ0MiwtMC45NDc1XSxbLTAuODYwMywwLjUyNjldLFst%0AMC4zNTI4LDAuOTE1NF0sWy0wLjgxNjIsMS45MDc2XSxbLTEuNDkwMSwxLjE1MTld%0ALFsxLjA2MTMsLTEuNTQzM10sWzEuNzc1MiwxLjc0MDldLFswLjIxODIsMS42NzE4%0AXV0sInVzZWFycm93cyI6W2ZhbHNlXSwiZGlzcGxheWxhYmVscyI6W2ZhbHNlXSwi%0AbGFiZWwiOlsiTlkgVGltZXMiLCJXYXNoaW5ndG9uIFBvc3QiLCJXYWxsIFN0cmVl%0AdCBKb3VybmFsIiwiVVNBIFRvZGF5IiwiTEEgVGltZXMiLCJOZXcgWW9yayBQb3N0%0AIiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3cyIsIkFCQyIsIkJCQyIsIllhaG9vIE5l%0Ad3MiLCJHb29nbGUgTmV3cyIsIlJldXRlcnMuY29tIiwiTllUaW1lcy5jb20iLCJX%0AYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wuY29tIl0sImJnIjpbInJnYmEoMCwwLDAs%0AMSkiXSwidmVydGV4LmJvcmRlciI6WyJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdi%0AYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIy%0AMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEp%0AIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJy%0AZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSJdLCJ2ZXJ0ZXguY2V4IjpbMy4yLDIuNCw1LjIsMi44LDIsMS42%0ALDIsMiwxLjYsMiwxLjIsMi40LDEuNiwxLjYsMS4yLDAuNCwxLjJdLCJ2ZXJ0ZXgu%0AY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEp%0AIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEo%0AMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3%0AMSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJy%0AZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUs%0AMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEp%0AIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMz%0ALDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2NjcsNyw3LjMzMzMsMC4zMzMz%0ALDEuMzMzMywwLjY2NjcsMC4zMzMzLDAuMzMzMyw3LjY2NjcsMC4zMzMzLDcuMzMz%0AMywxLDAuNjY2NywwLjMzMzMsNywwLjY2NjcsNywwLjMzMzMsNyw3LDAuMzMzMyw3%0ALjMzMzMsNywxLjMzMzMsMC42NjY3LDcsNy42NjY3LDcsMC42NjY3LDAuNjY2Nyw3%0ALjMzMzMsNy4zMzMzLDcsMC4zMzMzLDAuMzMzMyw3LDcuMzMzM10sImVkZ2UuY29s%0AIjpbInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUs%0AODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42%0AKSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJn%0AYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUs%0AODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUs%0AMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIs%0AInJnYmEoODUsODUsODUsMC42KSIsInJnYmEoODUsODUsODUsMC42KSIsInJnYmEo%0AODUsODUsODUsMC42KSJdLCJ2ZXJ0ZXgudG9vbHRpcCI6WyI8Yj5OYW1lOjxcL2I+%0AIE5ZIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1l%0AOjxcL2I+IFdhc2hpbmd0b24gUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3Bh%0AcGVyIiwiPGI+TmFtZTo8XC9iPiBXYWxsIFN0cmVldCBKb3VybmFsIDxicj4gPGI+%0AVHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFVTQSBUb2RheSA8%0AYnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBMQSBU%0AaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9i%0APiBOZXcgWW9yayBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8%0AYj5OYW1lOjxcL2I+IENOTiA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1l%0AOjxcL2I+IE1TTkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwv%0AYj4gRk9YIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9i%0APiBBQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBCQkMg%0APGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBZYWhvbyBOZXdz%0AIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEdvb2ds%0AZSBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+%0AIFJldXRlcnMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1l%0AOjxcL2I+IE5ZVGltZXMuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8%0AYj5OYW1lOjxcL2I+IFdhc2hpbmd0b25Qb3N0LmNvbSA8YnI+IDxiPlR5cGU6PFwv%0AYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBBT0wuY29tIDxicj4gPGI+VHlwZTo8%0AXC9iPiBPbmxpbmUiXSwiZWRnZS50b29sdGlwIjpbIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjAiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA1IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDMi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCJdLCJzbGljZS5wYXIiOnsic3RhcnQi%0AOlswXSwiZW5kIjpbNTBdLCJpbnRlcnZhbCI6WzRdLCJhZ2dyZWdhdGUuZHVyIjpb%0ANF0sInJ1bGUiOlsiYW55Il19LCJqaXR0ZXIiOltmYWxzZV0sInhsaW0iOlstMy4y%0AMDQ2LDMuMjA0Nl0sInlsaW0iOlstMi45NjE2LDIuOTYxNl19fSx7InN0YXJ0Ijpb%0ANDVdLCJlbmQiOls0Nl0sImRhdGEiOnsiYWN0aXZlIjp7Im5vZGVzIjp7IjEiOlsw%0AXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRdLCI2IjpbNV0sIjciOls2%0AXSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpbMTBdLCIxMiI6WzExXSwi%0AMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYiOlsxNV0sIjE3IjpbMTZd%0AfSwiZWRnZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1Ijpb%0ANF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEi%0AOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIx%0ANiI6WzE1XSwiMTciOlsxNl0sIjE4IjpbMTddLCIxOSI6WzE4XSwiMjAiOlsxOV0s%0AIjIxIjpbMjBdLCIyMiI6WzIxXSwiMjMiOlsyMl0sIjI0IjpbMjNdLCIyNSI6WzI0%0AXSwiMjYiOlsyNV0sIjI3IjpbMjZdLCIyOCI6WzI3XSwiMjkiOlsyOF0sIjMwIjpb%0AMjldLCIzMSI6WzMwXSwiMzIiOlszMV0sIjMzIjpbMzJdLCIzNCI6WzMzXSwiMzUi%0AOlszNF0sIjM2IjpbMzVdLCIzNyI6WzM2XSwiMzgiOlszN10sIjM5IjpbMzhdLCI0%0AMCI6WzM5XSwiNDEiOls0MF0sIjQyIjpbNDFdLCI0MyI6WzQyXSwiNDQiOls0M10s%0AIjQ1IjpbNDRdfX0sImNvb3JkIjpbWzAuMjg1NywtMC42MDQ3XSxbLTAuNDk3NCwt%0AMS4yOTkzXSxbLTAuNjMyNiwtMC4yOTkzXSxbMC4yODQ2LDAuMzczM10sWzAuMTM3%0AMSwtMS4zNDgyXSxbMC44NzMsMS4xODAzXSxbLTEuNzU5NywwLjAwOTNdLFstMS43%0ANjk4LC0wLjg0OTRdLFstMS4wNDY0LC0xLjg5OTddLFstMS4zNDQ3LC0wLjk3ODJd%0ALFstMC44MTU0LDAuNTIyOF0sWy0wLjMzNCwwLjkxMTFdLFstMC44MDUsMS44OTk3%0AXSxbLTEuNDcwNCwxLjEzOTZdLFsxLjA0NjgsLTAuNTYwNl0sWzEuNzY5OCwxLjgw%0AMDhdLFswLjIzNDEsMS42NDg5XV0sInVzZWFycm93cyI6W2ZhbHNlXSwiZGlzcGxh%0AeWxhYmVscyI6W2ZhbHNlXSwibGFiZWwiOlsiTlkgVGltZXMiLCJXYXNoaW5ndG9u%0AIFBvc3QiLCJXYWxsIFN0cmVldCBKb3VybmFsIiwiVVNBIFRvZGF5IiwiTEEgVGlt%0AZXMiLCJOZXcgWW9yayBQb3N0IiwiQ05OIiwiTVNOQkMiLCJGT1ggTmV3cyIsIkFC%0AQyIsIkJCQyIsIllhaG9vIE5ld3MiLCJHb29nbGUgTmV3cyIsIlJldXRlcnMuY29t%0AIiwiTllUaW1lcy5jb20iLCJXYXNoaW5ndG9uUG9zdC5jb20iLCJBT0wuY29tIl0s%0AImJnIjpbInJnYmEoMCwwLDAsMSkiXSwidmVydGV4LmJvcmRlciI6WyJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIy%0AMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEp%0AIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJy%0AZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSJdLCJ2ZXJ0ZXguY2V4IjpbMy4y%0ALDIuNCw1LjIsMy4yLDIsMS42LDIsMiwxLjYsMiwxLjIsMi40LDEuNiwxLjYsMS42%0ALDAuNCwxLjJdLCJ2ZXJ0ZXguY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJy%0AZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEo%0AMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzks%0AMTc5LDE3OSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEs%0AMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdi%0AYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIx%0ANSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIs%0AInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5s%0Ad2QiOls3LjMzMzMsNy4zMzMzLDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2%0ANjcsNyw3LjMzMzMsMC4zMzMzLDEuMzMzMywwLjY2NjcsMC4zMzMzLDAuMzMzMyw3%0ALjY2NjcsMC4zMzMzLDcuMzMzMywxLDAuNjY2NywwLjMzMzMsNywwLjY2NjcsNyww%0ALjMzMzMsNyw3LDAuMzMzMyw3LjMzMzMsNywxLjMzMzMsMC42NjY3LDcsNy42NjY3%0ALDcsMC42NjY3LDAuNjY2Nyw3LjMzMzMsNy4zMzMzLDcsMC4zMzMzLDAuMzMzMyw3%0ALDcuMzMzMywwLjMzMzNdLCJlZGdlLmNvbCI6WyJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiXSwidmVydGV4LnRvb2x0aXAiOlsiPGI+TmFtZTo8XC9iPiBO%0AWSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8%0AXC9iPiBXYXNoaW5ndG9uIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBl%0AciIsIjxiPk5hbWU6PFwvYj4gV2FsbCBTdHJlZXQgSm91cm5hbCA8YnI+IDxiPlR5%0AcGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBVU0EgVG9kYXkgPGJy%0APiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gTEEgVGlt%0AZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4g%0ATmV3IFlvcmsgUG9zdCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+%0ATmFtZTo8XC9iPiBDTk4gPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8%0AXC9iPiBNU05CQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+%0AIEZPWCBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4g%0AQUJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gQkJDIDxi%0Acj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gWWFob28gTmV3cyA8%0AYnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBHb29nbGUg%0ATmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBS%0AZXV0ZXJzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+TmFtZTo8%0AXC9iPiBOWVRpbWVzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+%0ATmFtZTo8XC9iPiBXYXNoaW5ndG9uUG9zdC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gQU9MLmNvbSA8YnI+IDxiPlR5cGU6PFwv%0AYj4gT25saW5lIl0sImVkZ2UudG9vbHRpcCI6WyI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ug%0Ad2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAzIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVu%0AdGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwic2xpY2UucGFyIjp7InN0YXJ0Ijpb%0AMF0sImVuZCI6WzUwXSwiaW50ZXJ2YWwiOls0XSwiYWdncmVnYXRlLmR1ciI6WzRd%0ALCJydWxlIjpbImFueSJdfSwiaml0dGVyIjpbZmFsc2VdLCJ4bGltIjpbLTMuMjA0%0ANiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwyLjk2MTZdfX0seyJzdGFydCI6WzQ2%0AXSwiZW5kIjpbNDddLCJkYXRhIjp7ImFjdGl2ZSI6eyJub2RlcyI6eyIxIjpbMF0s%0AIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0s%0AIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEz%0AIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XX0s%0AImVkZ2VzIjp7IjEiOlswXSwiMiI6WzFdLCIzIjpbMl0sIjQiOlszXSwiNSI6WzRd%0ALCI2IjpbNV0sIjciOls2XSwiOCI6WzddLCI5IjpbOF0sIjEwIjpbOV0sIjExIjpb%0AMTBdLCIxMiI6WzExXSwiMTMiOlsxMl0sIjE0IjpbMTNdLCIxNSI6WzE0XSwiMTYi%0AOlsxNV0sIjE3IjpbMTZdLCIxOCI6WzE3XSwiMTkiOlsxOF0sIjIwIjpbMTldLCIy%0AMSI6WzIwXSwiMjIiOlsyMV0sIjIzIjpbMjJdLCIyNCI6WzIzXSwiMjUiOlsyNF0s%0AIjI2IjpbMjVdLCIyNyI6WzI2XSwiMjgiOlsyN10sIjI5IjpbMjhdLCIzMCI6WzI5%0AXSwiMzEiOlszMF0sIjMyIjpbMzFdLCIzMyI6WzMyXSwiMzQiOlszM10sIjM1Ijpb%0AMzRdLCIzNiI6WzM1XSwiMzciOlszNl0sIjM4IjpbMzddLCIzOSI6WzM4XSwiNDAi%0AOlszOV0sIjQxIjpbNDBdLCI0MiI6WzQxXSwiNDMiOls0Ml0sIjQ0IjpbNDNdLCI0%0ANSI6WzQ0XSwiNDYiOls0NV19fSwiY29vcmQiOltbMC4xODUzLC0wLjY1NTddLFst%0AMC41ODA2LC0xLjM0MjddLFstMC43NTAzLC0wLjMyNl0sWzAuMTI3NywwLjMxOTNd%0ALFswLjA4NzUsLTEuMjk3OV0sWzAuODYwMSwwLjc3MTJdLFstMS44NTE3LDAuMDE2%0AMV0sWy0xLjg3MjMsLTAuODU0NF0sWy0xLjA5OTgsLTEuODg3NF0sWy0xLjQ1NTcs%0ALTEuMDA2NV0sWy0wLjk1NDIsMC41MjI1XSxbLTAuMzk5NywwLjg3MjJdLFstMC43%0AMjc5LDEuODg3NF0sWy0xLjUwNTIsMS4xNzE5XSxbMC45NTcyLC0wLjM5MTRdLFsx%0ALjg3MjMsMS4xOTUzXSxbMC4zMjcyLDEuNTU0Ml1dLCJ1c2VhcnJvd3MiOltmYWxz%0AZV0sImRpc3BsYXlsYWJlbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwi%0AV2FzaGluZ3RvbiBQb3N0IiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2Rh%0AeSIsIkxBIFRpbWVzIiwiTmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9Y%0AIE5ld3MiLCJBQkMiLCJCQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJS%0AZXV0ZXJzLmNvbSIsIk5ZVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwi%0AQU9MLmNvbSJdLCJiZyI6WyJyZ2JhKDAsMCwwLDEpIl0sInZlcnRleC5ib3JkZXIi%0AOlsicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJy%0AZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEs%0AMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEs%0AMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIs%0AInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdi%0AYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiXSwidmVydGV4%0ALmNleCI6WzMuMiwyLjQsNS4yLDMuMiwyLDIsMiwyLDEuNiwyLDEuMiwyLjQsMS42%0ALDEuNiwyLDAuNCwxLjJdLCJ2ZXJ0ZXguY29sIjpbInJnYmEoMTc5LDE3OSwxNzks%0AMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIs%0AInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdi%0AYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUs%0AOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEp%0AIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEo%0AMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUs%0AMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwi%0AZWRnZS5sd2QiOls3LjMzMzMsNy4zMzMzLDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMz%0AMywxLjY2NjcsNyw3LjMzMzMsMC4zMzMzLDEuMzMzMywwLjY2NjcsMC4zMzMzLDAu%0AMzMzMyw3LjY2NjcsMC4zMzMzLDcuMzMzMywxLDAuNjY2NywwLjMzMzMsNywwLjY2%0ANjcsNywwLjMzMzMsNyw3LDAuMzMzMyw3LjMzMzMsNywxLjMzMzMsMC42NjY3LDcs%0ANy42NjY3LDcsMC42NjY3LDAuNjY2Nyw3LjMzMzMsNy4zMzMzLDcsMC4zMzMzLDAu%0AMzMzMyw3LDcuMzMzMywwLjMzMzMsMS4zMzMzXSwiZWRnZS5jb2wiOlsicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0s%0AInZlcnRleC50b29sdGlwIjpbIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8%0AYj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3Rv%0AbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxc%0AL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3Nw%0AYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9i%0APiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IExBIFRpbWVzIDxicj4gPGI+VHlw%0AZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3Qg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05O%0AIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJy%0APiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+%0AIDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5%0AcGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwv%0AYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5jb20gPGJy%0APiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5j%0Ab20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gV2Fz%0AaGluZ3RvblBvc3QuY29tIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5O%0AYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSJdLCJl%0AZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIx%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50%0AaW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9u%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4g%0AMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5%0AcGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiA0Il0sInNsaWNlLnBhciI6eyJzdGFydCI6WzBdLCJlbmQiOls1MF0s%0AImludGVydmFsIjpbNF0sImFnZ3JlZ2F0ZS5kdXIiOls0XSwicnVsZSI6WyJhbnki%0AXX0sImppdHRlciI6W2ZhbHNlXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxp%0AbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsic3RhcnQiOls0N10sImVuZCI6WzQ4XSwi%0AZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsy%0AXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4%0AXSwiMTAiOls5XSwiMTEiOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsx%0AM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpb%0AMF0sIjIiOlsxXSwiMyI6WzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3Ijpb%0ANl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0s%0AIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2%0AXSwiMTgiOlsxN10sIjE5IjpbMThdLCIyMCI6WzE5XSwiMjEiOlsyMF0sIjIyIjpb%0AMjFdLCIyMyI6WzIyXSwiMjQiOlsyM10sIjI1IjpbMjRdLCIyNiI6WzI1XSwiMjci%0AOlsyNl0sIjI4IjpbMjddLCIyOSI6WzI4XSwiMzAiOlsyOV0sIjMxIjpbMzBdLCIz%0AMiI6WzMxXSwiMzMiOlszMl0sIjM0IjpbMzNdLCIzNSI6WzM0XSwiMzYiOlszNV0s%0AIjM3IjpbMzZdLCIzOCI6WzM3XSwiMzkiOlszOF0sIjQwIjpbMzldLCI0MSI6WzQw%0AXSwiNDIiOls0MV0sIjQzIjpbNDJdLCI0NCI6WzQzXSwiNDUiOls0NF0sIjQ2Ijpb%0ANDVdLCI0NyI6WzQ2XX19LCJjb29yZCI6W1swLjE4NDksLTAuNjU0NF0sWy0wLjU3%0AOTcsLTEuMzQxNl0sWy0wLjc1MDUsLTAuMzI2OF0sWzAuMTI2MSwwLjMyMDhdLFsw%0ALjA4ODYsLTEuMjk2XSxbMC44NTg1LDAuNzczOF0sWy0xLjg1MTIsMC4wMTUzXSxb%0ALTEuODcyMiwtMC44NTY2XSxbLTEuMDk3OCwtMS44ODc1XSxbLTEuNDU1LC0xLjAw%0ANjddLFstMC45NTYxLDAuNTIyM10sWy0wLjM5OTcsMC44NzMyXSxbLTAuNzI5Mywx%0ALjg4NzVdLFstMS41MDUyLDEuMTcxMl0sWzAuOTU1NywtMC4zODc5XSxbMS44NzIy%0ALDEuMTk2MV0sWzAuMzI1MywxLjU1Nl1dLCJ1c2VhcnJvd3MiOltmYWxzZV0sImRp%0Ac3BsYXlsYWJlbHMiOltmYWxzZV0sImxhYmVsIjpbIk5ZIFRpbWVzIiwiV2FzaGlu%0AZ3RvbiBQb3N0IiwiV2FsbCBTdHJlZXQgSm91cm5hbCIsIlVTQSBUb2RheSIsIkxB%0AIFRpbWVzIiwiTmV3IFlvcmsgUG9zdCIsIkNOTiIsIk1TTkJDIiwiRk9YIE5ld3Mi%0ALCJBQkMiLCJCQkMiLCJZYWhvbyBOZXdzIiwiR29vZ2xlIE5ld3MiLCJSZXV0ZXJz%0ALmNvbSIsIk5ZVGltZXMuY29tIiwiV2FzaGluZ3RvblBvc3QuY29tIiwiQU9MLmNv%0AbSJdLCJiZyI6WyJyZ2JhKDAsMCwwLDEpIl0sInZlcnRleC5ib3JkZXIiOlsicmdi%0AYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIy%0AMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEp%0AIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJy%0AZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEo%0AMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEs%0AMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiXSwidmVydGV4LmNleCI6%0AWzMuMiwyLjQsNS4yLDMuMiwyLDIuNCwyLDIsMS42LDIsMS4yLDIuNCwxLjYsMS42%0ALDIsMC44LDEuMl0sInZlcnRleC5jb2wiOlsicmdiYSgxNzksMTc5LDE3OSwxKSIs%0AInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdi%0AYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3%0AOSwxNzksMTc5LDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3%0AMSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJy%0AZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUs%0AMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEp%0AIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSJdLCJlZGdl%0ALmx3ZCI6WzcuMzMzMyw3LjMzMzMsNyw2LjY2NjcsNy42NjY3LDcsMC4zMzMzLDEu%0ANjY2Nyw3LDcuMzMzMywwLjMzMzMsMS4zMzMzLDAuNjY2NywwLjMzMzMsMC4zMzMz%0ALDcuNjY2NywwLjMzMzMsNy4zMzMzLDEsMC42NjY3LDAuMzMzMyw3LDAuNjY2Nyw3%0ALDAuMzMzMyw3LDcsMC4zMzMzLDcuMzMzMyw3LDEuMzMzMywwLjY2NjcsNyw3LjY2%0ANjcsNywwLjY2NjcsMC42NjY3LDcuMzMzMyw3LjMzMzMsNywwLjMzMzMsMC4zMzMz%0ALDcsNy4zMzMzLDAuMzMzMywxLjMzMzMsNy42NjY3XSwiZWRnZS5jb2wiOlsicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlwIjpbIjxiPk5h%0AbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIs%0AIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+VHlwZTo8XC9i%0APiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0IEpvdXJuYWwg%0APGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gVVNB%0AIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxc%0AL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5O%0AYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3Nw%0AYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8XC9iPiBUViIs%0AIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+IFRWIiwiPGI+%0ATmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5O%0AYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxc%0AL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1lOjxcL2I+IFlh%0AaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwv%0AYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5h%0AbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIs%0AIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9u%0AbGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29tIDxicj4gPGI+%0AVHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5jb20gPGJyPiA8%0AYj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+%0AIDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBo%0AeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24g%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sInNsaWNlLnBhciI6%0AeyJzdGFydCI6WzBdLCJlbmQiOls1MF0sImludGVydmFsIjpbNF0sImFnZ3JlZ2F0%0AZS5kdXIiOls0XSwicnVsZSI6WyJhbnkiXX0sImppdHRlciI6W2ZhbHNlXSwieGxp%0AbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45NjE2XX19LHsi%0Ac3RhcnQiOls0OF0sImVuZCI6WzQ5XSwiZGF0YSI6eyJhY3RpdmUiOnsibm9kZXMi%0AOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1IjpbNF0sIjYiOls1%0AXSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEiOlsxMF0sIjEy%0AIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIxNiI6WzE1XSwi%0AMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6WzJdLCI0Ijpb%0AM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6WzhdLCIxMCI6%0AWzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6WzEzXSwiMTUi%0AOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XSwiMTgiOlsxN10sIjE5IjpbMThdLCIy%0AMCI6WzE5XSwiMjEiOlsyMF0sIjIyIjpbMjFdLCIyMyI6WzIyXSwiMjQiOlsyM10s%0AIjI1IjpbMjRdLCIyNiI6WzI1XSwiMjciOlsyNl0sIjI4IjpbMjddLCIyOSI6WzI4%0AXSwiMzAiOlsyOV0sIjMxIjpbMzBdLCIzMiI6WzMxXSwiMzMiOlszMl0sIjM0Ijpb%0AMzNdLCIzNSI6WzM0XSwiMzYiOlszNV0sIjM3IjpbMzZdLCIzOCI6WzM3XSwiMzki%0AOlszOF0sIjQwIjpbMzldLCI0MSI6WzQwXSwiNDIiOls0MV0sIjQzIjpbNDJdLCI0%0ANCI6WzQzXSwiNDUiOls0NF0sIjQ2IjpbNDVdLCI0NyI6WzQ2XSwiNDgiOls0N119%0AfSwiY29vcmQiOltbMC40Mjg1LC0wLjY0MV0sWy0wLjMzNDIsLTEuMzM5M10sWy0w%0ALjUyNTYsLTAuMzI3XSxbMC4zMzU2LDAuMzI3Ml0sWzAuMzMxNywtMS4yNzQ0XSxb%0AMS4wNTk3LDAuNzgxOV0sWy0xLjYzMDUsMC4wMDgzXSxbLTEuNjQxNywtMC44NjQ4%0AXSxbLTAuODUwNywtMS44ODMyXSxbLTEuMjIwNCwtMS4wMTE4XSxbLTAuNzYwOCww%0ALjUxOThdLFstMC4yMTE1LDAuODczM10sWy0wLjQ0NjIsMS44ODMyXSxbLTEuMjk1%0ANCwxLjE4MzJdLFsxLjE5NDcsLTAuMzQ5Nl0sWzEuNjQxNywxLjY3MDhdLFswLjYy%0ANTcsMS41NDldXSwidXNlYXJyb3dzIjpbZmFsc2VdLCJkaXNwbGF5bGFiZWxzIjpb%0AZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIsIldhc2hpbmd0b24gUG9zdCIsIldh%0AbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9kYXkiLCJMQSBUaW1lcyIsIk5ldyBZ%0Ab3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZPWCBOZXdzIiwiQUJDIiwiQkJDIiwi%0AWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwiUmV1dGVycy5jb20iLCJOWVRpbWVz%0ALmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIsIkFPTC5jb20iXSwiYmciOlsicmdi%0AYSgwLDAsMCwxKSJdLCJ2ZXJ0ZXguYm9yZGVyIjpbInJnYmEoMjIxLDIyMSwyMjEs%0AMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIs%0AInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdi%0AYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIy%0AMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIy%0AMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIy%0AMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEp%0AIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJy%0AZ2JhKDIyMSwyMjEsMjIxLDEpIl0sInZlcnRleC5jZXgiOlszLjIsMi40LDUuMiwz%0ALjIsMiwyLjQsMiwyLDEuNiwyLDEuMiwyLjQsMS42LDEuNiwyLDEuMiwxLjZdLCJ2%0AZXJ0ZXguY29sIjpbInJnYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDE3OSwxNzks%0AMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzks%0AMSkiLCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIs%0AInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1%0ANSw5OSw3MSwxKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEs%0AMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdi%0AYSgyNTUsMjE1LDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIx%0ANSwwLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiXSwiZWRnZS5sd2QiOls3LjMzMzMs%0ANy4zMzMzLDcsNi42NjY3LDcuNjY2Nyw3LDAuMzMzMywxLjY2NjcsNyw3LjMzMzMs%0AMC4zMzMzLDEuMzMzMywwLjY2NjcsMC4zMzMzLDAuMzMzMyw3LjY2NjcsMC4zMzMz%0ALDcuMzMzMywxLDAuNjY2NywwLjMzMzMsNywwLjY2NjcsNywwLjMzMzMsNyw3LDAu%0AMzMzMyw3LjMzMzMsNywxLjMzMzMsMC42NjY3LDcsNy42NjY3LDcsMC42NjY3LDAu%0ANjY2Nyw3LjMzMzMsNy4zMzMzLDcsMC4zMzMzLDAuMzMzMyw3LDcuMzMzMywwLjMz%0AMzMsMS4zMzMzLDcuNjY2Nyw3XSwiZWRnZS5jb2wiOlsicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSww%0ALjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwi%0AcmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4%0ANSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4%0ANSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYp%0AIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdi%0AYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIiwicmdiYSg4NSw4%0ANSw4NSwwLjYpIiwicmdiYSg4NSw4NSw4NSwwLjYpIl0sInZlcnRleC50b29sdGlw%0AIjpbIjxiPk5hbWU6PFwvYj4gTlkgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5l%0Ad3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvbiBQb3N0IDxicj4gPGI+%0AVHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8Yj5OYW1lOjxcL2I+IFdhbGwgU3RyZWV0%0AIEpvdXJuYWwgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6%0APFwvYj4gVVNBIFRvZGF5IDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFwZXIiLCI8%0AYj5OYW1lOjxcL2I+IExBIFRpbWVzIDxicj4gPGI+VHlwZTo8XC9iPiBOZXdzcGFw%0AZXIiLCI8Yj5OYW1lOjxcL2I+IE5ldyBZb3JrIFBvc3QgPGJyPiA8Yj5UeXBlOjxc%0AL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gQ05OIDxicj4gPGI+VHlwZTo8%0AXC9iPiBUViIsIjxiPk5hbWU6PFwvYj4gTVNOQkMgPGJyPiA8Yj5UeXBlOjxcL2I+%0AIFRWIiwiPGI+TmFtZTo8XC9iPiBGT1ggTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4g%0AVFYiLCI8Yj5OYW1lOjxcL2I+IEFCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8%0AYj5OYW1lOjxcL2I+IEJCQyA8YnI+IDxiPlR5cGU6PFwvYj4gVFYiLCI8Yj5OYW1l%0AOjxcL2I+IFlhaG9vIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxi%0APk5hbWU6PFwvYj4gR29vZ2xlIE5ld3MgPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGlu%0AZSIsIjxiPk5hbWU6PFwvYj4gUmV1dGVycy5jb20gPGJyPiA8Yj5UeXBlOjxcL2I+%0AIE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gTllUaW1lcy5jb20gPGJyPiA8Yj5UeXBl%0AOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gV2FzaGluZ3RvblBvc3QuY29t%0AIDxicj4gPGI+VHlwZTo8XC9iPiBPbmxpbmUiLCI8Yj5OYW1lOjxcL2I+IEFPTC5j%0Ab20gPGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSJdLCJlZGdlLnRvb2x0aXAiOlsi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMCIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDUiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5r%0AIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9i%0APiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0IiwiPGI+RWRn%0AZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2Vp%0AZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMyIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMyIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBt%0AZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5F%0AZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxp%0AbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRn%0AZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8%0AYnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2Ug%0AdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAy%0AIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwv%0AYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3%0AZWlnaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxicj4g%0APGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlw%0AZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5%0AcGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMSIs%0AIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdo%0AdDo8XC9iPiA0IiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxi%0APkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRp%0Ab24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8%0AXC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiA0Il0sInNs%0AaWNlLnBhciI6eyJzdGFydCI6WzBdLCJlbmQiOls1MF0sImludGVydmFsIjpbNF0s%0AImFnZ3JlZ2F0ZS5kdXIiOls0XSwicnVsZSI6WyJhbnkiXX0sImppdHRlciI6W2Zh%0AbHNlXSwieGxpbSI6Wy0zLjIwNDYsMy4yMDQ2XSwieWxpbSI6Wy0yLjk2MTYsMi45%0ANjE2XX19LHsic3RhcnQiOls0OV0sImVuZCI6WzUwXSwiZGF0YSI6eyJhY3RpdmUi%0AOnsibm9kZXMiOnsiMSI6WzBdLCIyIjpbMV0sIjMiOlsyXSwiNCI6WzNdLCI1Ijpb%0ANF0sIjYiOls1XSwiNyI6WzZdLCI4IjpbN10sIjkiOls4XSwiMTAiOls5XSwiMTEi%0AOlsxMF0sIjEyIjpbMTFdLCIxMyI6WzEyXSwiMTQiOlsxM10sIjE1IjpbMTRdLCIx%0ANiI6WzE1XSwiMTciOlsxNl19LCJlZGdlcyI6eyIxIjpbMF0sIjIiOlsxXSwiMyI6%0AWzJdLCI0IjpbM10sIjUiOls0XSwiNiI6WzVdLCI3IjpbNl0sIjgiOls3XSwiOSI6%0AWzhdLCIxMCI6WzldLCIxMSI6WzEwXSwiMTIiOlsxMV0sIjEzIjpbMTJdLCIxNCI6%0AWzEzXSwiMTUiOlsxNF0sIjE2IjpbMTVdLCIxNyI6WzE2XSwiMTgiOlsxN10sIjE5%0AIjpbMThdLCIyMCI6WzE5XSwiMjEiOlsyMF0sIjIyIjpbMjFdLCIyMyI6WzIyXSwi%0AMjQiOlsyM10sIjI1IjpbMjRdLCIyNiI6WzI1XSwiMjciOlsyNl0sIjI4IjpbMjdd%0ALCIyOSI6WzI4XSwiMzAiOlsyOV0sIjMxIjpbMzBdLCIzMiI6WzMxXSwiMzMiOlsz%0AMl0sIjM0IjpbMzNdLCIzNSI6WzM0XSwiMzYiOlszNV0sIjM3IjpbMzZdLCIzOCI6%0AWzM3XSwiMzkiOlszOF0sIjQwIjpbMzldLCI0MSI6WzQwXSwiNDIiOls0MV0sIjQz%0AIjpbNDJdLCI0NCI6WzQzXSwiNDUiOls0NF0sIjQ2IjpbNDVdLCI0NyI6WzQ2XSwi%0ANDgiOls0N10sIjQ5IjpbNDhdfX0sImNvb3JkIjpbWzAuNDE0OSwtMC42NTMzXSxb%0ALTAuMzU0NiwtMS4zNDI2XSxbLTAuNTMzMywtMC4zMjc2XSxbMC4zMzU2LDAuMzE2%0AM10sWzAuMzExNywtMS4yODY1XSxbMS4wNjM0LDAuNzYxNl0sWy0xLjYzNDcsMC4w%0AMTkyXSxbLTEuNjU1NywtMC44NTM4XSxbLTAuODc2NywtMS44ODI0XSxbLTEuMjM2%0AMSwtMS4wMDYzXSxbLTAuNzYwMSwwLjUyMTldLFstMC4yMDY0LDAuODY4MV0sWy0w%0ALjQyOSwxLjg4MjRdLFstMS4yODYzLDEuMTkxMl0sWzEuMTg0NywtMC4zNzIxXSxb%0AMS42NTU3LDEuNjQ0Ml0sWzAuNjM4MywxLjUzMzNdXSwidXNlYXJyb3dzIjpbZmFs%0Ac2VdLCJkaXNwbGF5bGFiZWxzIjpbZmFsc2VdLCJsYWJlbCI6WyJOWSBUaW1lcyIs%0AIldhc2hpbmd0b24gUG9zdCIsIldhbGwgU3RyZWV0IEpvdXJuYWwiLCJVU0EgVG9k%0AYXkiLCJMQSBUaW1lcyIsIk5ldyBZb3JrIFBvc3QiLCJDTk4iLCJNU05CQyIsIkZP%0AWCBOZXdzIiwiQUJDIiwiQkJDIiwiWWFob28gTmV3cyIsIkdvb2dsZSBOZXdzIiwi%0AUmV1dGVycy5jb20iLCJOWVRpbWVzLmNvbSIsIldhc2hpbmd0b25Qb3N0LmNvbSIs%0AIkFPTC5jb20iXSwiYmciOlsicmdiYSgwLDAsMCwxKSJdLCJ2ZXJ0ZXguYm9yZGVy%0AIjpbInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwi%0AcmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2Jh%0AKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIx%0ALDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIx%0ALDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIx%0ALDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJnYmEoMjIxLDIyMSwyMjEsMSki%0ALCJyZ2JhKDIyMSwyMjEsMjIxLDEpIiwicmdiYSgyMjEsMjIxLDIyMSwxKSIsInJn%0AYmEoMjIxLDIyMSwyMjEsMSkiLCJyZ2JhKDIyMSwyMjEsMjIxLDEpIl0sInZlcnRl%0AeC5jZXgiOlszLjIsMi40LDUuMiwzLjYsMiwyLjQsMiwyLDEuNiwyLDEuMiwyLjQs%0AMS42LDEuNiwyLDEuMiwyXSwidmVydGV4LmNvbCI6WyJyZ2JhKDE3OSwxNzksMTc5%0ALDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJnYmEoMTc5LDE3OSwxNzksMSki%0ALCJyZ2JhKDE3OSwxNzksMTc5LDEpIiwicmdiYSgxNzksMTc5LDE3OSwxKSIsInJn%0AYmEoMTc5LDE3OSwxNzksMSkiLCJyZ2JhKDI1NSw5OSw3MSwxKSIsInJnYmEoMjU1%0ALDk5LDcxLDEpIiwicmdiYSgyNTUsOTksNzEsMSkiLCJyZ2JhKDI1NSw5OSw3MSwx%0AKSIsInJnYmEoMjU1LDk5LDcxLDEpIiwicmdiYSgyNTUsMjE1LDAsMSkiLCJyZ2Jh%0AKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIiwicmdiYSgyNTUsMjE1%0ALDAsMSkiLCJyZ2JhKDI1NSwyMTUsMCwxKSIsInJnYmEoMjU1LDIxNSwwLDEpIl0s%0AImVkZ2UubHdkIjpbNy4zMzMzLDcuMzMzMyw3LDYuNjY2Nyw3LjY2NjcsNywwLjMz%0AMzMsMS42NjY3LDcsNy4zMzMzLDAuMzMzMywxLjMzMzMsMC42NjY3LDAuMzMzMyww%0ALjMzMzMsNy42NjY3LDAuMzMzMyw3LjMzMzMsMSwwLjY2NjcsMC4zMzMzLDcsMC42%0ANjY3LDcsMC4zMzMzLDcsNywwLjMzMzMsNy4zMzMzLDcsMS4zMzMzLDAuNjY2Nyw3%0ALDcuNjY2Nyw3LDAuNjY2NywwLjY2NjcsNy4zMzMzLDcuMzMzMyw3LDAuMzMzMyww%0ALjMzMzMsNyw3LjMzMzMsMC4zMzMzLDEuMzMzMyw3LjY2NjcsNywxLjMzMzNdLCJl%0AZGdlLmNvbCI6WyJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAu%0ANikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJy%0AZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1%0ALDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1%0ALDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNiki%0ALCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2Jh%0AKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiLCJyZ2JhKDg1LDg1%0ALDg1LDAuNikiLCJyZ2JhKDg1LDg1LDg1LDAuNikiXSwidmVydGV4LnRvb2x0aXAi%0AOlsiPGI+TmFtZTo8XC9iPiBOWSBUaW1lcyA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3%0Ac3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uIFBvc3QgPGJyPiA8Yj5U%0AeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxiPk5hbWU6PFwvYj4gV2FsbCBTdHJlZXQg%0ASm91cm5hbCA8YnI+IDxiPlR5cGU6PFwvYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8%0AXC9iPiBVU0EgVG9kYXkgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBlciIsIjxi%0APk5hbWU6PFwvYj4gTEEgVGltZXMgPGJyPiA8Yj5UeXBlOjxcL2I+IE5ld3NwYXBl%0AciIsIjxiPk5hbWU6PFwvYj4gTmV3IFlvcmsgUG9zdCA8YnI+IDxiPlR5cGU6PFwv%0AYj4gTmV3c3BhcGVyIiwiPGI+TmFtZTo8XC9iPiBDTk4gPGJyPiA8Yj5UeXBlOjxc%0AL2I+IFRWIiwiPGI+TmFtZTo8XC9iPiBNU05CQyA8YnI+IDxiPlR5cGU6PFwvYj4g%0AVFYiLCI8Yj5OYW1lOjxcL2I+IEZPWCBOZXdzIDxicj4gPGI+VHlwZTo8XC9iPiBU%0AViIsIjxiPk5hbWU6PFwvYj4gQUJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxi%0APk5hbWU6PFwvYj4gQkJDIDxicj4gPGI+VHlwZTo8XC9iPiBUViIsIjxiPk5hbWU6%0APFwvYj4gWWFob28gTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIiwiPGI+%0ATmFtZTo8XC9iPiBHb29nbGUgTmV3cyA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5l%0AIiwiPGI+TmFtZTo8XC9iPiBSZXV0ZXJzLmNvbSA8YnI+IDxiPlR5cGU6PFwvYj4g%0AT25saW5lIiwiPGI+TmFtZTo8XC9iPiBOWVRpbWVzLmNvbSA8YnI+IDxiPlR5cGU6%0APFwvYj4gT25saW5lIiwiPGI+TmFtZTo8XC9iPiBXYXNoaW5ndG9uUG9zdC5jb20g%0APGJyPiA8Yj5UeXBlOjxcL2I+IE9ubGluZSIsIjxiPk5hbWU6PFwvYj4gQU9MLmNv%0AbSA8YnI+IDxiPlR5cGU6PFwvYj4gT25saW5lIl0sImVkZ2UudG9vbHRpcCI6WyI8%0AYj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6%0APFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJs%0AaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5FZGdlIHR5cGU6%0APFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIwIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0Ojxc%0AL2I+IDIzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNSIsIjxiPkVk%0AZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsg%0APGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+%0AIGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiLCI8Yj5FZGdl%0AIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWln%0AaHQ6PFwvYj4gMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVy%0AbGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIzIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAzIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJy%0APiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1l%0AbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBl%0AOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVk%0AZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGlu%0AayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDEiLCI8Yj5FZGdlIHR5cGU6PFwv%0AYj4gaHlwZXJsaW5rIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjEiLCI8Yj5F%0AZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+%0AIDIxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBtZW50aW9uIDxicj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gNCIsIjxi%0APkVkZ2UgdHlwZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8%0AXC9iPiAyIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdl%0AIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBtZW50aW9uIDxi%0Acj4gPGI+RWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4g%0AbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0%0AeXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIi%0ALCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlvbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjIiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIyIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+%0ARWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9i%0APiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8Yj5FZGdlIHdl%0AaWdodDo8XC9iPiAxIiwiPGI+RWRnZSB0eXBlOjxcL2I+IG1lbnRpb24gPGJyPiA8%0AYj5FZGdlIHdlaWdodDo8XC9iPiAyMSIsIjxiPkVkZ2UgdHlwZTo8XC9iPiBoeXBl%0AcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAyMiIsIjxiPkVkZ2UgdHlw%0AZTo8XC9iPiBoeXBlcmxpbmsgPGJyPiA8Yj5FZGdlIHdlaWdodDo8XC9iPiAxIiwi%0APGI+RWRnZSB0eXBlOjxcL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0%0AOjxcL2I+IDQiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gaHlwZXJsaW5rIDxicj4gPGI+%0ARWRnZSB3ZWlnaHQ6PFwvYj4gMjMiLCI8Yj5FZGdlIHR5cGU6PFwvYj4gbWVudGlv%0AbiA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDIxIiwiPGI+RWRnZSB0eXBlOjxc%0AL2I+IGh5cGVybGluayA8YnI+IDxiPkVkZ2Ugd2VpZ2h0OjxcL2I+IDQiXSwic2xp%0AY2UucGFyIjp7InN0YXJ0IjpbMF0sImVuZCI6WzUwXSwiaW50ZXJ2YWwiOls0XSwi%0AYWdncmVnYXRlLmR1ciI6WzRdLCJydWxlIjpbImFueSJdfSwiaml0dGVyIjpbZmFs%0Ac2VdLCJ4bGltIjpbLTMuMjA0NiwzLjIwNDZdLCJ5bGltIjpbLTIuOTYxNiwyLjk2%0AMTZdfX1dLCJuZXR3b3JrIjp7Im1lbCI6W3siaW5sIjpbMl0sIm91dGwiOlsxXSwi%0AYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndlaWdodCI6WzIyXSwibmEiOltm%0AYWxzZV0sImFjdGl2ZSI6W1sxLDUwXV19fSx7ImlubCI6WzNdLCJvdXRsIjpbMV0s%0AImF0bCI6eyJ0eXBlIjpbImh5cGVybGluayJdLCJ3ZWlnaHQiOlsyMl0sIm5hIjpb%0AZmFsc2VdLCJhY3RpdmUiOltbMiw1MF1dfX0seyJpbmwiOls0XSwib3V0bCI6WzFd%0ALCJhdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsiXSwid2VpZ2h0IjpbMjFdLCJuYSI6%0AW2ZhbHNlXSwiYWN0aXZlIjpbWzMsNTBdXX19LHsiaW5sIjpbMTVdLCJvdXRsIjpb%0AMV0sImF0bCI6eyJ0eXBlIjpbIm1lbnRpb24iXSwid2VpZ2h0IjpbMjBdLCJuYSI6%0AW2ZhbHNlXSwiYWN0aXZlIjpbWzQsNTBdXX19LHsiaW5sIjpbMV0sIm91dGwiOlsy%0AXSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndlaWdodCI6WzIzXSwibmEi%0AOltmYWxzZV0sImFjdGl2ZSI6W1s1LDUwXV19fSx7ImlubCI6WzNdLCJvdXRsIjpb%0AMl0sImF0bCI6eyJ0eXBlIjpbImh5cGVybGluayJdLCJ3ZWlnaHQiOlsyMV0sIm5h%0AIjpbZmFsc2VdLCJhY3RpdmUiOltbNiw1MF1dfX0seyJpbmwiOls5XSwib3V0bCI6%0AWzJdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsiXSwid2VpZ2h0IjpbMV0sIm5h%0AIjpbZmFsc2VdLCJhY3RpdmUiOltbNyw1MF1dfX0seyJpbmwiOlsxMF0sIm91dGwi%0AOlsyXSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndlaWdodCI6WzVdLCJu%0AYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzgsNTBdXX19LHsiaW5sIjpbMV0sIm91dGwi%0AOlszXSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndlaWdodCI6WzIxXSwi%0AbmEiOltmYWxzZV0sImFjdGl2ZSI6W1s5LDUwXV19fSx7ImlubCI6WzRdLCJvdXRs%0AIjpbM10sImF0bCI6eyJ0eXBlIjpbImh5cGVybGluayJdLCJ3ZWlnaHQiOlsyMl0s%0AIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbMTAsNTBdXX19LHsiaW5sIjpbNV0sIm91%0AdGwiOlszXSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndlaWdodCI6WzFd%0ALCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzExLDUwXV19fSx7ImlubCI6WzhdLCJv%0AdXRsIjpbM10sImF0bCI6eyJ0eXBlIjpbImh5cGVybGluayJdLCJ3ZWlnaHQiOls0%0AXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1sxMiw1MF1dfX0seyJpbmwiOlsxMF0s%0AIm91dGwiOlszXSwiYXRsIjp7InR5cGUiOlsibWVudGlvbiJdLCJ3ZWlnaHQiOlsy%0AXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1sxMyw1MF1dfX0seyJpbmwiOlsxMV0s%0AIm91dGwiOlszXSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndlaWdodCI6%0AWzFdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzE0LDUwXV19fSx7ImlubCI6WzEy%0AXSwib3V0bCI6WzNdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsiXSwid2VpZ2h0%0AIjpbMV0sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbMTUsNTBdXX19LHsiaW5sIjpb%0AM10sIm91dGwiOls0XSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndlaWdo%0AdCI6WzIzXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1sxNiw1MF1dfX0seyJpbmwi%0AOls2XSwib3V0bCI6WzRdLCJhdGwiOnsidHlwZSI6WyJtZW50aW9uIl0sIndlaWdo%0AdCI6WzFdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzE3LDUwXV19fSx7ImlubCI6%0AWzExXSwib3V0bCI6WzRdLCJhdGwiOnsidHlwZSI6WyJtZW50aW9uIl0sIndlaWdo%0AdCI6WzIyXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1sxOCw1MF1dfX0seyJpbmwi%0AOlsxMl0sIm91dGwiOls0XSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndl%0AaWdodCI6WzNdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzE5LDUwXV19fSx7Imlu%0AbCI6WzE3XSwib3V0bCI6WzRdLCJhdGwiOnsidHlwZSI6WyJtZW50aW9uIl0sIndl%0AaWdodCI6WzJdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzIwLDUwXV19fSx7Imlu%0AbCI6WzFdLCJvdXRsIjpbNV0sImF0bCI6eyJ0eXBlIjpbIm1lbnRpb24iXSwid2Vp%0AZ2h0IjpbMV0sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbMjEsNTBdXX19LHsiaW5s%0AIjpbMl0sIm91dGwiOls1XSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndl%0AaWdodCI6WzIxXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1syMiw1MF1dfX0seyJp%0AbmwiOls5XSwib3V0bCI6WzVdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsiXSwi%0Ad2VpZ2h0IjpbMl0sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbMjMsNTBdXX19LHsi%0AaW5sIjpbMTVdLCJvdXRsIjpbNV0sImF0bCI6eyJ0eXBlIjpbIm1lbnRpb24iXSwi%0Ad2VpZ2h0IjpbMjFdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzI0LDUwXV19fSx7%0AImlubCI6WzZdLCJvdXRsIjpbNl0sImF0bCI6eyJ0eXBlIjpbImh5cGVybGluayJd%0ALCJ3ZWlnaHQiOlsxXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1syNSw1MF1dfX0s%0AeyJpbmwiOlsxNl0sIm91dGwiOls2XSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5r%0AIl0sIndlaWdodCI6WzIxXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1syNiw1MF1d%0AfX0seyJpbmwiOlsxN10sIm91dGwiOls2XSwiYXRsIjp7InR5cGUiOlsibWVudGlv%0AbiJdLCJ3ZWlnaHQiOlsyMV0sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbMjcsNTBd%0AXX19LHsiaW5sIjpbM10sIm91dGwiOls3XSwiYXRsIjp7InR5cGUiOlsibWVudGlv%0AbiJdLCJ3ZWlnaHQiOlsxXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1syOCw1MF1d%0AfX0seyJpbmwiOls4XSwib3V0bCI6WzddLCJhdGwiOnsidHlwZSI6WyJtZW50aW9u%0AIl0sIndlaWdodCI6WzIyXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1syOSw1MF1d%0AfX0seyJpbmwiOlsxMF0sIm91dGwiOls3XSwiYXRsIjp7InR5cGUiOlsiaHlwZXJs%0AaW5rIl0sIndlaWdodCI6WzIxXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1szMCw1%0AMF1dfX0seyJpbmwiOlsxNF0sIm91dGwiOls3XSwiYXRsIjp7InR5cGUiOlsibWVu%0AdGlvbiJdLCJ3ZWlnaHQiOls0XSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1szMSw1%0AMF1dfX0seyJpbmwiOlszXSwib3V0bCI6WzhdLCJhdGwiOnsidHlwZSI6WyJoeXBl%0AcmxpbmsiXSwid2VpZ2h0IjpbMl0sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbMzIs%0ANTBdXX19LHsiaW5sIjpbN10sIm91dGwiOls4XSwiYXRsIjp7InR5cGUiOlsibWVu%0AdGlvbiJdLCJ3ZWlnaHQiOlsyMV0sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbMzMs%0ANTBdXX19LHsiaW5sIjpbOV0sIm91dGwiOls4XSwiYXRsIjp7InR5cGUiOlsibWVu%0AdGlvbiJdLCJ3ZWlnaHQiOlsyM10sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbMzQs%0ANTBdXX19LHsiaW5sIjpbMTBdLCJvdXRsIjpbOV0sImF0bCI6eyJ0eXBlIjpbIm1l%0AbnRpb24iXSwid2VpZ2h0IjpbMjFdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzM1%0ALDUwXV19fSx7ImlubCI6WzNdLCJvdXRsIjpbMTBdLCJhdGwiOnsidHlwZSI6WyJo%0AeXBlcmxpbmsiXSwid2VpZ2h0IjpbMl0sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltb%0AMzYsNTBdXX19LHsiaW5sIjpbNl0sIm91dGwiOlsxMl0sImF0bCI6eyJ0eXBlIjpb%0AIm1lbnRpb24iXSwid2VpZ2h0IjpbMl0sIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltb%0AMzcsNTBdXX19LHsiaW5sIjpbMTNdLCJvdXRsIjpbMTJdLCJhdGwiOnsidHlwZSI6%0AWyJoeXBlcmxpbmsiXSwid2VpZ2h0IjpbMjJdLCJuYSI6W2ZhbHNlXSwiYWN0aXZl%0AIjpbWzM4LDUwXV19fSx7ImlubCI6WzE0XSwib3V0bCI6WzEyXSwiYXRsIjp7InR5%0AcGUiOlsibWVudGlvbiJdLCJ3ZWlnaHQiOlsyMl0sIm5hIjpbZmFsc2VdLCJhY3Rp%0AdmUiOltbMzksNTBdXX19LHsiaW5sIjpbMTJdLCJvdXRsIjpbMTNdLCJhdGwiOnsi%0AdHlwZSI6WyJoeXBlcmxpbmsiXSwid2VpZ2h0IjpbMjFdLCJuYSI6W2ZhbHNlXSwi%0AYWN0aXZlIjpbWzQwLDUwXV19fSx7ImlubCI6WzE3XSwib3V0bCI6WzEzXSwiYXRs%0AIjp7InR5cGUiOlsibWVudGlvbiJdLCJ3ZWlnaHQiOlsxXSwibmEiOltmYWxzZV0s%0AImFjdGl2ZSI6W1s0MSw1MF1dfX0seyJpbmwiOlsxMV0sIm91dGwiOlsxNF0sImF0%0AbCI6eyJ0eXBlIjpbIm1lbnRpb24iXSwid2VpZ2h0IjpbMV0sIm5hIjpbZmFsc2Vd%0ALCJhY3RpdmUiOltbNDIsNTBdXX19LHsiaW5sIjpbMTNdLCJvdXRsIjpbMTRdLCJh%0AdGwiOnsidHlwZSI6WyJtZW50aW9uIl0sIndlaWdodCI6WzIxXSwibmEiOltmYWxz%0AZV0sImFjdGl2ZSI6W1s0Myw1MF1dfX0seyJpbmwiOlsxXSwib3V0bCI6WzE1XSwi%0AYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndlaWdodCI6WzIyXSwibmEiOltm%0AYWxzZV0sImFjdGl2ZSI6W1s0NCw1MF1dfX0seyJpbmwiOls0XSwib3V0bCI6WzE1%0AXSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndlaWdodCI6WzFdLCJuYSI6%0AW2ZhbHNlXSwiYWN0aXZlIjpbWzQ1LDUwXV19fSx7ImlubCI6WzZdLCJvdXRsIjpb%0AMTVdLCJhdGwiOnsidHlwZSI6WyJoeXBlcmxpbmsiXSwid2VpZ2h0IjpbNF0sIm5h%0AIjpbZmFsc2VdLCJhY3RpdmUiOltbNDYsNTBdXX19LHsiaW5sIjpbNl0sIm91dGwi%0AOlsxNl0sImF0bCI6eyJ0eXBlIjpbImh5cGVybGluayJdLCJ3ZWlnaHQiOlsyM10s%0AIm5hIjpbZmFsc2VdLCJhY3RpdmUiOltbNDcsNTBdXX19LHsiaW5sIjpbMTddLCJv%0AdXRsIjpbMTZdLCJhdGwiOnsidHlwZSI6WyJtZW50aW9uIl0sIndlaWdodCI6WzIx%0AXSwibmEiOltmYWxzZV0sImFjdGl2ZSI6W1s0OCw1MF1dfX0seyJpbmwiOls0XSwi%0Ab3V0bCI6WzE3XSwiYXRsIjp7InR5cGUiOlsiaHlwZXJsaW5rIl0sIndlaWdodCI6%0AWzRdLCJuYSI6W2ZhbHNlXSwiYWN0aXZlIjpbWzQ5LDUwXV19fV0sImdhbCI6eyJu%0AIjpbMTddLCJtbmV4dCI6WzUwXSwiZGlyZWN0ZWQiOlt0cnVlXSwiaHlwZXIiOltm%0AYWxzZV0sImxvb3BzIjpbZmFsc2VdLCJtdWx0aXBsZSI6W2ZhbHNlXSwiYmlwYXJ0%0AaXRlIjpbZmFsc2VdLCJuZXQubmFtZSI6WyJNZWRpYSBOZXR3b3JrIl0sIm5ldC5v%0AYnMucGVyaW9kIjp7Im9ic2VydmF0aW9ucyI6W1swLDUwXV0sIm1vZGUiOlsiY29u%0AdGludW91cyJdLCJ0aW1lLmluY3JlbWVudCI6W251bGxdLCJ0aW1lLnVuaXQiOlsi%0AdW5rbm93biJdfSwic2xpY2UucGFyIjp7InN0YXJ0IjpbMF0sImVuZCI6WzUwXSwi%0AaW50ZXJ2YWwiOlsxXSwiYWdncmVnYXRlLmR1ciI6WzFdLCJydWxlIjpbImFueSJd%0AfX0sInZhbCI6W3sibmEiOltmYWxzZV0sInZlcnRleC5uYW1lcyI6WyJzMDEiXSwi%0AaWQiOlsiczAxIl0sIm1lZGlhIjpbIk5ZIFRpbWVzIl0sIm1lZGlhLnR5cGUiOlsx%0AXSwidHlwZS5sYWJlbCI6WyJOZXdzcGFwZXIiXSwiYXVkaWVuY2Uuc2l6ZSI6WzIw%0AXSwiY29sIjpbImdyYXk3MCJdLCJhY3RpdmUiOltbMCw1MF1dfSx7Im5hIjpbZmFs%0Ac2VdLCJ2ZXJ0ZXgubmFtZXMiOlsiczAyIl0sImlkIjpbInMwMiJdLCJtZWRpYSI6%0AWyJXYXNoaW5ndG9uIFBvc3QiXSwibWVkaWEudHlwZSI6WzFdLCJ0eXBlLmxhYmVs%0AIjpbIk5ld3NwYXBlciJdLCJhdWRpZW5jZS5zaXplIjpbMjVdLCJjb2wiOlsiZ3Jh%0AeTcwIl0sImFjdGl2ZSI6W1swLDUwXV19LHsibmEiOltmYWxzZV0sInZlcnRleC5u%0AYW1lcyI6WyJzMDMiXSwiaWQiOlsiczAzIl0sIm1lZGlhIjpbIldhbGwgU3RyZWV0%0AIEpvdXJuYWwiXSwibWVkaWEudHlwZSI6WzFdLCJ0eXBlLmxhYmVsIjpbIk5ld3Nw%0AYXBlciJdLCJhdWRpZW5jZS5zaXplIjpbMzBdLCJjb2wiOlsiZ3JheTcwIl0sImFj%0AdGl2ZSI6W1swLDUwXV19LHsibmEiOltmYWxzZV0sInZlcnRleC5uYW1lcyI6WyJz%0AMDQiXSwiaWQiOlsiczA0Il0sIm1lZGlhIjpbIlVTQSBUb2RheSJdLCJtZWRpYS50%0AeXBlIjpbMV0sInR5cGUubGFiZWwiOlsiTmV3c3BhcGVyIl0sImF1ZGllbmNlLnNp%0AemUiOlszMl0sImNvbCI6WyJncmF5NzAiXSwiYWN0aXZlIjpbWzAsNTBdXX0seyJu%0AYSI6W2ZhbHNlXSwidmVydGV4Lm5hbWVzIjpbInMwNSJdLCJpZCI6WyJzMDUiXSwi%0AbWVkaWEiOlsiTEEgVGltZXMiXSwibWVkaWEudHlwZSI6WzFdLCJ0eXBlLmxhYmVs%0AIjpbIk5ld3NwYXBlciJdLCJhdWRpZW5jZS5zaXplIjpbMjBdLCJjb2wiOlsiZ3Jh%0AeTcwIl0sImFjdGl2ZSI6W1swLDUwXV19LHsibmEiOltmYWxzZV0sInZlcnRleC5u%0AYW1lcyI6WyJzMDYiXSwiaWQiOlsiczA2Il0sIm1lZGlhIjpbIk5ldyBZb3JrIFBv%0Ac3QiXSwibWVkaWEudHlwZSI6WzFdLCJ0eXBlLmxhYmVsIjpbIk5ld3NwYXBlciJd%0ALCJhdWRpZW5jZS5zaXplIjpbNTBdLCJjb2wiOlsiZ3JheTcwIl0sImFjdGl2ZSI6%0AW1swLDUwXV19LHsibmEiOltmYWxzZV0sInZlcnRleC5uYW1lcyI6WyJzMDciXSwi%0AaWQiOlsiczA3Il0sIm1lZGlhIjpbIkNOTiJdLCJtZWRpYS50eXBlIjpbMl0sInR5%0AcGUubGFiZWwiOlsiVFYiXSwiYXVkaWVuY2Uuc2l6ZSI6WzU2XSwiY29sIjpbInRv%0AbWF0byJdLCJhY3RpdmUiOltbMCw1MF1dfSx7Im5hIjpbZmFsc2VdLCJ2ZXJ0ZXgu%0AbmFtZXMiOlsiczA4Il0sImlkIjpbInMwOCJdLCJtZWRpYSI6WyJNU05CQyJdLCJt%0AZWRpYS50eXBlIjpbMl0sInR5cGUubGFiZWwiOlsiVFYiXSwiYXVkaWVuY2Uuc2l6%0AZSI6WzM0XSwiY29sIjpbInRvbWF0byJdLCJhY3RpdmUiOltbMCw1MF1dfSx7Im5h%0AIjpbZmFsc2VdLCJ2ZXJ0ZXgubmFtZXMiOlsiczA5Il0sImlkIjpbInMwOSJdLCJt%0AZWRpYSI6WyJGT1ggTmV3cyJdLCJtZWRpYS50eXBlIjpbMl0sInR5cGUubGFiZWwi%0AOlsiVFYiXSwiYXVkaWVuY2Uuc2l6ZSI6WzYwXSwiY29sIjpbInRvbWF0byJdLCJh%0AY3RpdmUiOltbMCw1MF1dfSx7Im5hIjpbZmFsc2VdLCJ2ZXJ0ZXgubmFtZXMiOlsi%0AczEwIl0sImlkIjpbInMxMCJdLCJtZWRpYSI6WyJBQkMiXSwibWVkaWEudHlwZSI6%0AWzJdLCJ0eXBlLmxhYmVsIjpbIlRWIl0sImF1ZGllbmNlLnNpemUiOlsyM10sImNv%0AbCI6WyJ0b21hdG8iXSwiYWN0aXZlIjpbWzAsNTBdXX0seyJuYSI6W2ZhbHNlXSwi%0AdmVydGV4Lm5hbWVzIjpbInMxMSJdLCJpZCI6WyJzMTEiXSwibWVkaWEiOlsiQkJD%0AIl0sIm1lZGlhLnR5cGUiOlsyXSwidHlwZS5sYWJlbCI6WyJUViJdLCJhdWRpZW5j%0AZS5zaXplIjpbMzRdLCJjb2wiOlsidG9tYXRvIl0sImFjdGl2ZSI6W1swLDUwXV19%0ALHsibmEiOltmYWxzZV0sInZlcnRleC5uYW1lcyI6WyJzMTIiXSwiaWQiOlsiczEy%0AIl0sIm1lZGlhIjpbIllhaG9vIE5ld3MiXSwibWVkaWEudHlwZSI6WzNdLCJ0eXBl%0ALmxhYmVsIjpbIk9ubGluZSJdLCJhdWRpZW5jZS5zaXplIjpbMzNdLCJjb2wiOlsi%0AZ29sZCJdLCJhY3RpdmUiOltbMCw1MF1dfSx7Im5hIjpbZmFsc2VdLCJ2ZXJ0ZXgu%0AbmFtZXMiOlsiczEzIl0sImlkIjpbInMxMyJdLCJtZWRpYSI6WyJHb29nbGUgTmV3%0AcyJdLCJtZWRpYS50eXBlIjpbM10sInR5cGUubGFiZWwiOlsiT25saW5lIl0sImF1%0AZGllbmNlLnNpemUiOlsyM10sImNvbCI6WyJnb2xkIl0sImFjdGl2ZSI6W1swLDUw%0AXV19LHsibmEiOltmYWxzZV0sInZlcnRleC5uYW1lcyI6WyJzMTQiXSwiaWQiOlsi%0AczE0Il0sIm1lZGlhIjpbIlJldXRlcnMuY29tIl0sIm1lZGlhLnR5cGUiOlszXSwi%0AdHlwZS5sYWJlbCI6WyJPbmxpbmUiXSwiYXVkaWVuY2Uuc2l6ZSI6WzEyXSwiY29s%0AIjpbImdvbGQiXSwiYWN0aXZlIjpbWzAsNTBdXX0seyJuYSI6W2ZhbHNlXSwidmVy%0AdGV4Lm5hbWVzIjpbInMxNSJdLCJpZCI6WyJzMTUiXSwibWVkaWEiOlsiTllUaW1l%0Acy5jb20iXSwibWVkaWEudHlwZSI6WzNdLCJ0eXBlLmxhYmVsIjpbIk9ubGluZSJd%0ALCJhdWRpZW5jZS5zaXplIjpbMjRdLCJjb2wiOlsiZ29sZCJdLCJhY3RpdmUiOltb%0AMCw1MF1dfSx7Im5hIjpbZmFsc2VdLCJ2ZXJ0ZXgubmFtZXMiOlsiczE2Il0sImlk%0AIjpbInMxNiJdLCJtZWRpYSI6WyJXYXNoaW5ndG9uUG9zdC5jb20iXSwibWVkaWEu%0AdHlwZSI6WzNdLCJ0eXBlLmxhYmVsIjpbIk9ubGluZSJdLCJhdWRpZW5jZS5zaXpl%0AIjpbMjhdLCJjb2wiOlsiZ29sZCJdLCJhY3RpdmUiOltbMCw1MF1dfSx7Im5hIjpb%0AZmFsc2VdLCJ2ZXJ0ZXgubmFtZXMiOlsiczE3Il0sImlkIjpbInMxNyJdLCJtZWRp%0AYSI6WyJBT0wuY29tIl0sIm1lZGlhLnR5cGUiOlszXSwidHlwZS5sYWJlbCI6WyJP%0AbmxpbmUiXSwiYXVkaWVuY2Uuc2l6ZSI6WzMzXSwiY29sIjpbImdvbGQiXSwiYWN0%0AaXZlIjpbWzAsNTBdXX1dLCJpZWwiOltbNDQsMjEsOSw1XSxbMSwyMl0sWzIsNiwz%0ANiwzMiwyOCwxNl0sWzMsMTAsNDksNDVdLFsxMV0sWzE3LDQ3LDQ2LDM3LDI1XSxb%0AMzNdLFsxMiwyOV0sWzcsMjMsMzRdLFs4LDEzLDMwLDM1XSxbMTQsMTgsNDJdLFsx%0ANSwxOSw0MF0sWzM4LDQzXSxbMzEsMzldLFs0LDI0XSxbMjZdLFsyMCwyNyw0MSw0%0AOF1dLCJvZWwiOltbNCwzLDIsMV0sWzgsNyw2LDVdLFsxNSwxNCwxMywxMiwxMSwx%0AMCw5XSxbMjAsMTksMTgsMTcsMTZdLFsyMSwyNCwyMywyMl0sWzI3LDI2LDI1XSxb%0AMzEsMzAsMjksMjhdLFszMiwzNCwzM10sWzM1XSxbMzZdLFtdLFszOSwzOCwzN10s%0AWzQxLDQwXSxbNDIsNDNdLFs0NCw0NSw0Nl0sWzQ4LDQ3XSxbNDldXX19Ow0KICB2%0AYXIgb3B0aW9ucyA9IHsibmR0di52ZXJzaW9uIjoiMC4xMi4yLDIwMTgtNS05In07%0ADQogIC8vRU5EIEdSQVBIIERBVEEgSU5JVA0KICANCiAgLy9JbnNlcnQgaW5pdCBK%0AUyBIZXJlDQogICQoZnVuY3Rpb24oKSB7DQogICAgb3B0aW9ucy5ncmFwaERhdGEg%0APSBncmFwaERhdGE7DQogICAgdmFyIGdyYXBoID0gbmV3IG5kdHZfZDMob3B0aW9u%0Acyk7ICAgICAgICANCiAgfSkNCiAgPC9zY3JpcHQ+PC9ib2R5Pg0KPC9odG1sPg==(Line 1183)
Message:
loadData: 50.63427734375ms

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.

fonts.gstatic.com
kateto.net
mathjax.rstudio.com
www.google-analytics.com
www.googletagmanager.com
www.kateto.net
143.204.214.44
198.71.233.15
2a00:1450:4001:815::2008
2a00:1450:4001:81d::200e
2a00:1450:4001:821::2003
021b6a12d0f9466cd4b21a39ab0647e910766382cf195f9337b2af5b3a9ecdb4
04a369e5104b02a302491e829f87651bd3245a088b2c2e7c2cda5efb1c0a8a9c
051295687c256d4bf401a70a2fd455ee85f8b7272e2cd133c00a40ba282dab4c
07d387600994476b37f86913b8e6c91dc6a0fa59dd5b9f149ca3900df2d5614b
08370201daee47824e2271d06f0300abe6dffa78df2a5913eae613bc9f375bcd
0936665ee89920617edd603579467680cb3eaa3d9f2ec6e0cae3ed51c9cf0ead
09f06f00d804cf6abd02fef131e6ce9f79401ba96ee40324dfd28fa286498e58
0a7ad0894de0ad3e1e3f60bb7f1acff8f0111e16898ef194de60504147c21656
0b6b1cd454ac76a80fe115f90ee1950f48e6c2a143e4a96176adbb520c40c80b
0b892eeb61f16fc04e14b99741bb87ed413757818621984e38a95bde5e1f7154
0c2d6aa51d3d04b3e548b51fec1d00d7e7ae1d2cced71ba4e2bb154a6871d6c7
0d91ab1e931555efe756f470940e387c4086500cda43af0228c86361f0d9fc7c
0e2392fdc4987b5456a43638346618351b095182be241f698516ea298e2d96f8
0eb948d2111a3a8f5e1f1ad8f8ece80d0a10f8f1fc5e1c0c2e214d461a49a952
0f158ed2f9a3b0126d41b4013a4f746eea09663c6214b79877e19016129aa4e6
0f7dbf7b3754318a756fb14257ebca021cc8f66d95beb6a226382aa53a5a2bcc
116daa209acd90613c61aa03b4df53d8adee00bf30f5990339e9b2e70dc1966f
11a03c12927fe2110cf77b28a5d8441c0cbf639fe01f96b969aa9a0ee8350892
132b243eb8bdb961de2dd423a678f4c12ee160c40093ff06d31d10b43145cfdf
139286985e135ba0cf71e0fae9cc35004c1fcb0f29c71ffa33fe5684b291ffc7
143779a6877b306e3248bf4cd51e823e4f673b6a46437a641df1374b5f883c08
14736cc84994f28ff5106f6b8e6f017f38f94c2b42fc69f3b4e43522882c7422
1701194cb45e149a5d61ec9596fb759a38863514586f291e250735e4fb0b33b5
173a42f3468eebc25191bc4aaa1e86fb422b56337682ce4b38bd2ca4229b8543
174e2d1db38e03b738189d641c3fbf1b5a5e0c2447725e3480aa8c233f23cdb7
180677466c59e0765b841f9f10c92f5c9c6f79a581f24694a0e1cfe2dcb5160b
1970448c4da70546362f013c0d917ec406b59f1581942b7a32ff60ea683bbad3
1b4944b5f8a439d1e7f531888ed6eb66781561f56f84336e75b218cb31bb9af9
1d78cd1f1618051c4550557f96233484bbb834cb0ed9cca9456a8951c78b298d
1f530977f86728293d5f9aa64d48f2a3f4e9db788af2568ee54d4cb4fc332860
20ab7bdc092a81b8ddc76f31895a985835df01667588c354f831a036f55e5075
213956ed472b76327ceaea1a769220bfe792ca6f1274cabdd0b59cb01ae1b48f
2152557cac69e2bd7d6debef5037a9f554f9209cc305b8141b3329acb10c42b7
24c230989b1d54e076804ffa5ac83d522f12deaf7f16b6495964ae63a897709f
26c8e7920bef1d0a6ad8ec2c6d130d7fb75ca288bdd02312cf3a959ffa5472d4
27d5b422e5ac5a2170e6c73bcdeb86aa9320af8c7d6ef5a53d1c678720e2d598
28bea0bca6f1b424273b8bac5bf1c4fd940c321f835726211103ec8cbedce7c1
299cebdfa1abd478185784f13688f6560f0f03e88e259a21414f5b0088e122a4
29da3233a309dd74c144f872b66ba470472579a0aca0e2362f5c5cc8f0e7a385
2fff4aae6dfa95434b03e6250a8342589b15cbf51d8c950641249d909902039d
32362a2b46675ff16a132b76f4a21d32733b60e90a8f7da6a605ed126ae5a266
3369709d20d9c1c487738adf334cb5307e82d15948fa2241cfdcb6906b3e85f7
343c4699a6c775fe8a30af075192013d533424215906ad3ff8aed2acfe3bea29
346467f0ba1b9a43b33c78f0663942aa96d5cc8c8064e470665d9308c45a3d91
365baee4539d48af574180191a4842bd92cda476b31caf436604e1e6898ceb02
36bcbf3a0d704255d31f4058f961974d9098a5e5b8ba447f7339c8034c891330
38422528775302f2f6c4950b00d3209665aa13bd8a64727267b8b1ce50712fc9
385ed18e3673b41dfdee7ac701af87a1a7b29b8ef4bc095ded29f9bdd5775b9b
38f9edb64f1b7d72df340751412cd937cb43907578d04b36c859532a97abffe8
399d2ccc7531e019f247d142f2e9e060fe8752504bdaf463028d32ec212695cf
3a5060dcf93fd29f396b513972297c43167dfe2bef016bd704b96b5369e550b2
3aeb5d27ba1347463afdea3f0a9e7332c7db1adb45377264fba3b37c0da01178
3c0bfb5a3db6967755accf4f7d045f8529e546a3b713281cac8a3088b51f6bda
3d3d035403ba87f19bed92bf20449a5b5a1c0ed2d9a669008abf83d4fa9172b7
3deb29b8fdfdd69f4a7d19c8ac166fa0b70bd6a82315d384f654d313637caebe
3eee4a26d37adaea1fe9f6a5aaa68cb7ed2e57e86c1dda7a3628981ac51ef4d5
4025727c5cdf69ebebb78196e38a76144968ff27b9dfe789968f23f69d51e2cd
41a31f76baf1536251acd1c5fa915b3ec6aefea543491cf3ea0eac00957fe152
429efd8bba43255a776f338192524561573f31f409b2b8930d3b8a08f5800de5
4303c58fd1ed8315421c091d6bf0c651916e752a08ac1eb65af7fcde0a5d81de
431e5082bcf39683ecd59a5168a3d4fbb0cb88a770f9a7b2b6ff0bea1c291e5f
444aab1a9e60dcec4df57538fd6752ae95ba8cb6528339a9c813ce95392a5707
445ea6c21f8315829dc221101d38913120bd14090456441789562763763dc7b1
447f8762021b0e2726cea6977b09f5448684bf078d66cf5718f681bd2e1cec4f
44bad9fb6e9a4fb34281c8a67dc9123ee1dbe6ed15a84d6408889a3537a1889d
44e2095616437a3144f3684ec6814cda5f92af567ebcf3e55d7a7a6a2e0c8026
4559d8a63215939cdb90857325cf790084d8d08ab6d23488459a8e782c7d2afe
456cf979b40f845e3013b83a82f8cd36e7320eff6663af13b12099ebcc07faee
46ce784c4d4508dd6e2cce1fed540432245397521aed38902e432bb88b7057e4
48d6e4f6c1ec88b9e0f92366ff2b93314a45b4d552e71cdabb6fe300cb44993b
48eb8b500ae6a38617b5738d2b3faec481922a7782246e31d2755c034a45cd5d
498bcb92ea3a8a3b01dceae648e139972ad196ac56fec134e9e7cd0a4ee17752
4a4de7903ea62d330e17410ea4db6c22bcbeb350ac6aa402d6b54b4c0cbed327
4a768695e2001c056e6f8f20f4904e49bbd0471d060b47bbd3cf026ac74e8d5d
4a7b353345f28b2f6473cf4b09bd8630b109184e31e8d999ccea5d7e741e4351
4d5cb29be83231b967ddbcafe80fd4b6219f73aba2595aecb9d9eb27c4cca09c
4dd4ba9773ddb1007653ca0abb0a4b8606035794823000db1e932ef79d79ad16
4df873d6d05b9721a52a0089b99e06a8c20ef53b0313cf82ae9a98196d50ea2c
4e935df82f460a420d80cde9d91b1b145e1bee3bcc1bb7d31a074d9d7f37b5b7
4f56a354ed72e68c9165a6b5ea38351046a0af0d713df4a090b8d4be722367cc
50842be368e7865ccc110511b5ebfda87894b8162a459946d08e7a13ff4b1507
512e43cff32041e14e69d9030c2eb73871e61aba905c1968eda47ae0cef9cb7b
5338acdbe16862e5d826ff614549d8463ae7e26ef1fc27b5d7fee45193ac05b5
53de98f0a91e5422aa0314cbddda3ad488d88255d6f94590c18a5de0cbd876aa
54857896bdcf37a944f4bd573b0cf874eaa0aa62ee8e2e222cce3a7788bcd395
56f317513570fbe1bef64202f7596692faa08f23eb180f8962cfd360fa2d36c3
5733d4e205ea28887e56a39851b592959b514b6b2d57a5f5db9cfcc518a9d23a
57376344235f987c935c8fedbf63597857d4c2357ffd48a0d4a7dfa4b7eb4794
576f08290e6492215c31e059a5b8dbc6b9d9c801886d44ecab93624f070acb07
57a96eb1ccacae26e452d6e147fb29ca8ca20ce183970a3a4fb5febf8662fcc7
57c191f46696a6d758bb7314a8169f0c16535ecee570db3fdf569a880be75218
57f3316599c6cb279ffb4fb239393035f0bb68fb16302f9bfb2b122acc282e4a
5853ecd29976ec2e2e87e8ae153ee434bed0135eae3582a42f4f3f295e2d577b
5893dd307c3938cfde76ec97d6e14ce085643de6e6d71346a772a00de662e19a
59d3b42550f13ce9588c415cd29d0d0624ff82f0069d4bb8e673b2dafcc987d9
5bd62f0f3d999f2de051272fa3634e5edf6fe43a2dd18d30482d368a03498914
5be6f7bd7c681c64cf19fc457ef73dda83f73becb6c7bd1a32a06846785b1128
5c7438ec740fa9bea75de44a0fbbbc78c14351010ab6ff42ed13b96c7c777d37
5cc0ffc32d631d639dca960c0c85176753c7e1c2875d242efa7a9a225cbbc4ff
5df1ebfffcddd46e04c6026ceeab7d0a99e907c43f1bda760c876bb936155c5f
60563e433eb36e551a814c32266297485a8a850d08f1127fe4964535021f3c62
60c1f3a35b29a773b5bfd69382277d30aafb3a4af87e736c10cdc86ccbea8673
60c5c995e81d99006a511a1b66e9811b194bab9f0a3918438ec1707c92dc479c
6202c140da067e69c7dd81695ae7315b718e1387470b26afa3ecf309bb6914f5
623a201c35de324ba05cd72d124dd4cb7ec1d76f8945c5870cad790ba035437c
668b046d12db350ccba6728890476b3efee53b2f42dbb84743e5e9f1ae0cc404
673cda4390e4c64c2ec3431e9b948b885e7306f68ef9b8c9fbb9bd83bba88641
67e0d4919ff70c1c3eabd2801c690bcfce99ef1926119f86d812c7a6b951ce28
69671e2a33fe1494c679baddc7e8bbf893f1ab1fcc4e72f930b9aeaf4fabaf9f
6af107cfcc3720e22e6821a417995ae8ff5b3b745f23d2239cbf639516e11e20
6ba038f9eb00ba46691d1d4f13d9a855bcbc1eb34dcbcae81ae14964e955832f
6e746a03bc3330d32fb71d7fd89fc6aa4de6214664ca21bf6b643bd444cc1415
71bba7d46f11636f52bf90a31eb147a65cded15b6f9cd4d13ec3257c4bed8823
75363faef5916beebe2153fa7718e52e70c70474c92dd04feaadcc8ee8d0d68e
7594defe661b80895cae28fe0da93ca74b5e737228016899a77773fcdcd084a7
7800fc2eec29cde13108679dcdf79e5513ae0cc5d7c9fc9874580c56854aa225
78a380367f24325466b6bfc6e989971ecabc00333757e69b87bc490726bfbc5f
7a17567e30d1bf8df1f48e3bc266553b8a97af9fb6cc393eaa7e531ab1fbc91c
7ba0070e7053766bb9bfed264be1bc9938def85f09039485d9f442ea600bb5cf
7c2b61de9d81e1c64cce5afb3858b39a8e5191d2401c9e2f387a44ec568d711f
7d505ba222682e357b9df002b34795df17ebda41a74b5d2aa0143b13ffbceb11
7e2f4d1f00797f7c2b4d30f46b2dc6a4a9d3a09d32bce2c33eeb63e36c79d915
81e6fd94ffc99d9976c1e788f37f29dc634362ea19e429169a3164896a7c3bca
82d4b148369d8f79e11b5ea9cb324273c58a06dc33abd700cafb907b5ac00617
831b15eff680729ab2b4f6b849f09d7dd2e1846d2a37a011b89e03f13cc572dd
8337212354871836e6763a41e615916c89bac5b3f1f0adf60ba43c7c806e1015
844c8d9866e03156fdec51751d83788fea59ecc73d28ae491d413363084cc325
849abd0086b44cc8f232c974a1902eba0a632b28c499d74e08d0b81e29760048
8725cd37d5dfef7a1981f8972d9b2e003e5d56e8912dc53db0d4e049958c12ab
8cab7e21e2a3105ef06fd43c875a614bc0ffd170ab3f8bffd2044c03ed44bcea
8d99a56cc8a97efd4994e9d0e68682cec220b9017192927a483577eac0a4bb87
8dc2823c4500c5f0889b6b60d5f5300360d47c314d2be63a5917b1a0623f4fe3
8ed4ce7b3e5915fdb32377020e307a96f0be1e93cdbfcaec5481dc43b9c38642
8fcc6c6049bb9cd7f2dd2764ace4e50eb467066e05dd5c3c3a4fd7d0bde0c154
8fcca243e0633537ab5a60897b92deba38f13bc927de72f88ba65dee9fddb62e
8fd966e492c2933164405126069e6002fc5fd796c75e6752b64430c74670acd3
90e367eb680921224f0b9214b50294b33719f07cd04f7eefe3e226284da2a67b
92f78af020e68a9cc550f429e828bc83528171d5d21e62e00481964f40275bda
95e711aa98b525c287b1d0a83c035e28ec7d368f0a82a0164ddecae5202bd49c
95ed2737d4ab0b494087a294b6eb4d28c13926f2c77ccf3bda4b1ae64bfd401a
9612dcfb40d520940926e3ee315f68f572aa54f22452206233c13f2a74ec9fa3
97eb59bf8b33a516e1e3136643f5fe02417e473a14971cb657a6fbc2c37f3d1c
98758f3b3cf6f03a326e5d5ee863c30710610d762dd9718b41e2605187cf7f87
9986313ee852bfe8818a27b0b2a6b36acc016b21777f7cdbee55773800beb48b
9a89694ca7c4d738785c26eb35ebeef8a8f5a16be0150491dd3cabda323c9e3f
9ae3cc738ad24787d1be7330037d215c1383e2b15dcde127431f915e9dbcba1c
9afeea2810c82c46d5556b1d14cf990d6fc6d7a2f45aee956fe6acbb6f822c3e
9c1eedb49dbbf57672cbf97d7d70edf6918f89e58c57d49e71496dbda2a56df3
9cb8140635d6cdab5d102fa8681ec5528bb165fdf7747b6fbd78a65075cc0abc
a4ca18154fcc828c586b7ecca731672842247fbf1fca13bf77de31ce6d52b0b7
a533d720c38e28941ee5758e87fa4b1d0d7e4a9a290ab88e58c6d188cffe8e90
a6a60fb0777e6becff27c7e3748bbc3b796b4c3e3f4cda6cb700b8c0d6b5f5a3
a775ef6f5d9f443c1a03ccd7fd76fb36d5c0c28248a07b8516a27d61ab706767
a944bb9edeae94642bc93284352dd7e3040e8f82355e45c2e1584abe3d539538
aa887bd82816b046c131856daa00a57eaa9172e78a62870bf2e65175ca6dbeb1
ab1a025da75807a57c2e8ecfcc301f78bd002f4916f992dc520e043a25d47434
ab439586de1e097863ea040904bdd2bfa31014e9294e975142a70699074d0841
adb4dc173de9c49530f9d50131c359628af6011197caebdeea767de0a9aae7c3
ae0f1b690df343a956c0c38f10cdfba1b9caa9f5850ee066caa5e6aa4ea1fe04
ae254009a380ca9b7aa7a4be4170da94f2035a84c15de80aa827aeee819d5971
b0ca3d367f3b06e94078cbe3132c948b43c31576c2513693a1790a5ab2c61598
b1a7be6cf478f7d4228fc455a370f1be8ac6e37acade5fd382c1e1992b51433f
b4466ccaa9a0364f03bb521b9e98b201d4fcea65e17fb3f9655a2274a4486f99
b5609922140cafd832011effc2ec0a286db7e83ceb2cf3091cc0d306eee5328d
b6443f12a07a199cced0c9d1506093b41835cd831937332df384a781eca8977f
b688a3bcd1297cc0fe08e6e52fea14ba9108ee4b9a2052c03e7bac6e19347255
b6ce2750a5429b968ac4c675acacfbd7da06ddf4638fb1e73ffb0a4553b346cb
b72f99f24c4f113dde381df9e9031195fc8175d4d8dd475cae7f48407c040775
b7be203f69d78fc9333697062bac50e776a77e549c326aeeb2f619f799f054d4
b7e0953ede9fa9832452bb364b8663ab9c563d517b8803920bdffa29084bd0a0
b87292e270a8ad1f54e53c79ed5e9678801a3c610f2f368526b33aa12b94a21d
b97e3d110d5c3b7365ca430b5e1c56b7fb3e7005314f6d6d664817b4b42b3abc
b9996b32165e1ee5de0a45e370b05addb9fb6aec3fb6141c73c1cecfda4de66d
bea6e643b8c1515c321d427748569829df9d9c2506e211d27686a94e8e4f1e86
c5b962d6659dde5b413f47959e7e23038a5f702298d0f13954d5908aa4251102
c66ab93736d3541c71a2049875de64c0c51a2ab09f7c73f0bd17e4b33a7272df
c73a41758beed1de5691c352e0cacf5dc45ebfadaabff2f5af64585e65db4c70
c7b66ee04aeac6fc31f77a14d5553af4047de35d2864fcf7560452a183dd4e62
c7e542e793e6b9f85245fe2200f2b2d14ce889fe2ae16417d460860882995975
c92fdf100dca5fb56a0400e89db3f5041216c0bfb768d5bdf1dc68453bd1a845
c93f50c3e81d0769cc6d2a020bc77a41bd23b5282b646a0475030a3cef619498
ca7e821bd1e6b3aaa1d2e95b837b776d53e6a6bde7265571c1beb38a0fbc7bf0
cda58b73d8c30c38ea2c939274aaef90c01aacc3f78520dc99949fd67d7addf7
ce32be56670f6b9eca8707f3c3a0c9df059c1ad5fe27fb0912d14d72d11a2d4e
ce95569b70abea0961ce73f0f890e654c312c748ff958e3eb42fef2bd8002f04
d143e0c522ca71aa1571e75742ce512399998e9a606a49fef60423b85952fb9f
d2458b9fd9089fdcb9de317093e004ef3a65597dc68b9adfdeb15a7c9968d0d5
d2e1c93166c4e96adeb8a77fbf50b9696d71f3328d1e98677150d867a1864ed0
d2ee7e9d2d75afb62ad22c537d31fc0f9db385923ff38f28d489c77a19c698bf
d315eb962b63a7349feddbe7f3ac09a7967e24237a818b7ecb23dc58b70df341
d8c237ac23e562540132de6ced5d5a5619a6ee895b0da0298bfdb6e7bbceb7b2
d9ae8b314f45d9835f8738dd75713d6c267768b18a3fb072dd6b7a195ea045ee
d9ff5d838ee8c44c5641e1788bcab3c7d5f33886c7c581e9d27a496fa010a6fc
dd023580c4e0d39f7ebedee823aefead5399feec0f26355ca38c3d46dfce1273
dd1fad41f2891919876ec7b3fc3057b7b89fad8e8ff8b5d03815838bb8e7e497
dd5ceb190d2852ad363c91ce58749aff3a6dd46e0c9fa299cdf9a8ecfcfaca7a
df495acc38f016f771fb3aca27b9aa6a8a59ea8b6060b3125518077bf6a6f1b0
e08401e113bababed0e1d26d2419a5fb430b656c50f95ac6afa5b94a81425514
e2437fe822bd2271a79aae2d36b8c82093f9c23674485aab45ea78f18ce4829e
e257ccf4d079c7f7952b2627e70760af89b5a6ca6302dd877638434f6982a606
e2fd8977c742d6fed4d220bbdf64c836193f4872b0b329e5c8316d462eafed60
e36fdce902bfa93a2440660eab3f9ebe225ff5d553799748955df74773e8836e
e3ba4019c5f788cb4f52d56e5d416bbd31b5314820d5a8b91897b76e5a082b64
e3e0a629c9fa9b66d6026e4f1afdddd238a1cedd06c82a08c120b80d65e57781
e52e60c6cb8c90370e5454ca0c9657b58d6605925d3bedcf634a998ed1eff88a
e7f6012ecb5ed7654b2d8e6b7e77f8fbe2706b0746d4a356a9d6d026287dea12
e8a066351f19240f0fec8b70708aa8dec4928a741ef520a76e90a4ad75f1ec0b
eab94a85e356d95c957e8656e616873497f382b676b4737cf0bc432205674a53
eb7a0daf81da5b6d0beca7740c0053d331a4e72b88421200ce0ee284bb5ded06
ec34d50e2ef95cfb0268270ae88f17c048d6e43e4a5dde57590065fff26ab498
ed3b51f6240250bb0427957fc3fa326a1a1140acbc31d8f162a568346b8366da
ef01f6c9d515df0151de5d55bf3a60ea0f5b0b5387af0f602f1310851828f114
ef5ab7bd325fbe46b4eb31fb8efca4e4bfaa7ce9a16c4bf18b71defb44af1124
efd7b1811cef4b7c13b8ae58028f93fd15f154177f1a65df59c0f2139649b9ee
f1560fb223e37341fa8b435f6c114628cadeb4ab4057f25a729fa717ad240987
f1ebf95b8c5770caa6358f4448ef42c18e17fd368a6efeff424fb801941c4da1
f6524d3bc9f7ad5378a1957b540a60fe820e502ce1474bbb053d6b56e89a9102
f83f4f76cfbb82e8b956253d2f5914014286f750b332fd8998edae8549ee4160
f8954902287160bb63cd83b72452ae95c82f873a73415417a607f104b2bef20c
f8ea3fd0ebc9772c51df0b61b519677aa0c38bcc9ab0b1b818d949c1baf46a00
f937cef662cf12641922dee29ba5124cfc909ee6d1d3c2896c462f0c43d9c46b
f989644f83f1c6c11a96ad0a1c87c62e0f15215bba5d6998bfe927511bdc3547
f98a3db3d376370ded7f085974e5b16af1c56904159fe522ebb0bbced062038b
fa0aa801b4f145613e631853cf697527783bd5af01eead6494563d0521de99a6
fa2e8ed25b98183e4a8126c1fa69a8628362676c522ca8a9bbeb3adabea034d9
fbc02a59b50dd8863fa2621ac9081e28fdd627f5476aec06784858858f05f442
fc48d1d80ece71a79a7b39877f4104d49d3da6c3665cf6dc203000fb7df4447e
fcc1283f60eb0695145bdc56fd26f702831379eedfa23b2869bfd45b968777b1
ff5c3d99a50a9658489d88f592813f9fcaaf929f6b51ff882efca248857371f0