13.7 sec in total
3.2 sec
10.1 sec
425 ms
Welcome to liwine.com homepage info - get ready to check Li Wine best content right away, or after learning these important things about liwine.com
Find Long Island wineries and information about local hotels and dining. You can also post and read Long Island wineries reviews.
Visit liwine.comWe analyzed Liwine.com page load time and found that the first response time was 3.2 sec and then it took 10.5 sec to load all DOM resources and completely render a web page. This is a poor result, as 90% of websites can load faster.
liwine.com performance score
name
value
score
weighting
Value6.8 s
1/100
10%
Value19.8 s
0/100
25%
Value22.1 s
0/100
10%
Value2,610 ms
4/100
30%
Value0.231
54/100
15%
Value21.0 s
1/100
10%
3193 ms
7 ms
5 ms
107 ms
65 ms
Our browser made a total of 75 requests to load all elements on the main page. We found that 49% of them (37 requests) were addressed to the original Liwine.com, 28% (21 requests) were made to and 5% (4 requests) were made to Use.fontawesome.com. The less responsive or slowest element that took the longest time to load (4.6 sec) belongs to the original domain Liwine.com.
Page size can be reduced by 278.1 kB (24%)
1.2 MB
878.4 kB
In fact, the total size of Liwine.com main page is 1.2 MB. This result falls beyond the top 1M of websites and identifies a large and not optimized web page that may take ages to load. 55% of websites need less resources to load. Javascripts take 514.2 kB which makes up the majority of the site volume.
Potential reduce by 170.4 kB
HTML content can be minified and compressed by a website’s server. The most efficient way is to compress content using GZIP which reduces data amount travelling through the network between server and browser. HTML code on this page is well minified. It is highly recommended that content of this web page should be compressed using GZIP, as it can save up to 170.4 kB or 73% of the original size.
Potential reduce by 107.5 kB
Image size optimization can help to speed up a website loading time. The chart above shows the difference between the size before and after optimization. Obviously, Li Wine needs image optimization as it can save up to 107.5 kB or 30% of the original volume. The most popular and efficient tools for JPEG and PNG image optimization are Jpegoptim and PNG Crush.
Potential reduce by 270 B
It’s better to minify JavaScript in order to improve website performance. The diagram shows the current total size of all JavaScript files against the prospective JavaScript size after its minification and compression. This website has mostly compressed JavaScripts.
Potential reduce by 6 B
CSS files minification is very important to reduce a web page rendering time. The faster CSS files can load, the earlier a page can be rendered. Liwine.com has all CSS files already compressed.
Number of requests can be reduced by 39 (85%)
46
7
The browser has sent 46 CSS, Javascripts, AJAX and image requests in order to completely render the main page of Li Wine. We recommend that multiple CSS and JavaScript files should be merged into one by each type, as it can help reduce assets requests from 29 to 1 for JavaScripts and from 12 to 1 for CSS and as a result speed up the page load time.
www.liwine.com
3193 ms
YS5ocmVmPWV0X3NpdGVfdXJsKyIvP2V0X2NvcmVfcGFnZV9yZXNvdXJjZT0iK2EuaWQrZXRfcG9zdF9pZDphLnNyYyYmKGEuc3JjPWV0X3NpdGVfdXJsKyIvP2V0X2NvcmVfcGFnZV9yZXNvdXJjZT0iK2EuaWQrZXRfcG9zdF9pZCkpfQo=
7 ms
dChlLmNvbmNhdGVtb2ppKTplLndwZW1vamkmJmUudHdlbW9qaSYmKHQoZS50d2Vtb2ppKSx0KGUud3BlbW9qaSkpKX0pKX0oKHdpbmRvdyxkb2N1bWVudCksd2luZG93Ll93cGVtb2ppU2V0dGluZ3MpOwovKiBdXT4gKi8K
5 ms
autoptimize_single_55150e2e6320616fbba3e646a3291629.php
107 ms
style.min.css
65 ms
mediaelementplayer-legacy.min.css
52 ms
wp-mediaelement.min.css
53 ms
autoptimize_single_3ebef5fe60320a5cc8275c994584cc3d.php
133 ms
ctf-styles.min.css
57 ms
css
43 ms
all.css
171 ms
jquery.min.js
90 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwp3aW5kb3cuZ2RTZXRNYXAgPSB3aW5kb3cuZ2RTZXRNYXAgfHwgJ2F1dG8nO3dpbmRvdy5nZExvYWRNYXAgPSB3aW5kb3cuZ2RMb2FkTWFwIHx8ICcnOwovKiBdXT4gKi8K
1 ms
jquery-migrate.min.js
85 ms
widget.min.js
84 ms
select2.min.js
127 ms
bootstrap.bundle.min.js
147 ms
JGlmcmFtZS5xdWVyeVNlbGVjdG9yKCcuY29sb3Itc2NoZW1lLWZsaXAtb24tc2Nyb2xsJyk6ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNvbG9yLXNjaGVtZS1mbGlwLW9uLXNjcm9sbCcpO2lmKG5hdmJhcj09bnVsbClyZXR1cm47bGV0IGNzX29yaWdpbmFsPW5hdmJhci5kYXRhc2V0LmNzbztsZXQgY3Nfc2Nyb2xsPW5hdmJhci5kYXRhc2V0LmNzcztpZighY3Nfc2Nyb2xsJiYhY3Nfb3JpZ2luYWwpe2lmKG5hdmJhci5jbGFzc0xpc3QuY29udGFpbnMoJ25hdmJhci1saWdodCcpKXtjc19vcmlnaW5hbD0nbmF2YmFyLWxpZ2h0Jztjc19zY3JvbGw9J25hdmJhci1kYXJrJ31lbHNlIGlmKG5hdmJhci5jbGFzc0xpc3QuY29udGFpbnMoJ25hdmJhci1kYXJrJykpe2NzX29yaWdpbmFsPSduYXZiYXItZGFyayc7Y3Nfc2Nyb2xsPSduYXZiYXItbGlnaHQnfW5hdmJhci5kYXRhc2V0LmNzbz1jc19vcmlnaW5hbAogICAgICAgICAgICBuYXZiYXIuZGF0YXNldC5jc3M9Y3Nfc2Nyb2xsfWlmKCR2YWx1ZT4wKXtuYXZiYXIuY2xhc3NMaXN0LnJlbW92ZShjc19vcmlnaW5hbCk7bmF2YmFyLmNsYXNzTGlzdC5hZGQoY3Nfc2Nyb2xsKX1lbHNle25hdmJhci5jbGFzc0xpc3QucmVtb3ZlKGNzX3Njcm9sbCk7bmF2YmFyLmNsYXNzTGlzdC5hZGQoY3Nfb3JpZ2luYWwpfX13aW5kb3cub25zY3JvbGw9ZnVuY3Rpb24oKXthdWlfc2V0X2RhdGFfc2Nyb2xsKCl9O2Z1bmN0aW9uIGF1aV9zZXRfZGF0YV9zY3JvbGwoKXtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNldC5zY3JvbGw9d2luZG93LnNjcm9sbFl9YXVpX3NldF9kYXRhX3Njcm9sbCgpO2F1aV9mbGlwX2NvbG9yX3NjaGVtZV9vbl9zY3JvbGwoKTsKLyogXV0+ICovCg==
4 ms
IiwiZ210X29mZnNldCI6IiswOjAwIiwidGltZXpvbmVfc3RyaW5nIjoiVVRDIiwiYXV0b3NhdmUiOiIxMDAwMCIsInNlYXJjaF91c2Vyc19ub25jZSI6IjM2ZjAzYjc4ODciLCJnb29nbGVfYXBpX2tleSI6IkFJemFTeUNabWlxNzc4SEt6WVp6TUdlU1BTdmdJTEhUdFYxSHNJSSIsIm1hcExhbmd1YWdlIjoiZW4iLCJvc21Sb3V0ZUxhbmd1YWdlIjoiZW4iLCJtYXJrZXJBbmltYXRpb24iOiJib3VuY2UiLCJjb25maXJtX3NldF9sb2NhdGlvbiI6IldvdWxkIHlvdSBsaWtlIHRvIG1hbnVhbGx5IHNldCB5b3VyIGxvY2F0aW9uPyIsImNvbmZpcm1fbGJsX2Vycm9yIjoiRVJST1I6IiwibGFiZWxfdGl0bGUiOiJUaXRsZSIsImxhYmVsX2NhcHRpb24iOiJDYXB0aW9uIiwiYnV0dG9uX3NldCI6IlNldCIsIkJIX2FsdFRpbWVGb3JtYXQiOiJoOmkgSyIsInNwbGl0VUsiOiIwIiwidGltZV9hZ28iOnsicHJlZml4X2FnbyI6IiIsInN1ZmZpeF9hZ28iOiIgYWdvIiwicHJlZml4X2FmdGVyIjoiYWZ0ZXIgIiwic3VmZml4X2FmdGVyIjoiIiwic2Vjb25kcyI6Imxlc3MgdGhhbiBhIG1pbnV0ZSIsIm1pbnV0ZSI6ImFib3V0IGEgbWludXRlIiwibWludXRlcyI6IiVkIG1pbnV0ZXMiLCJob3VyIjoiYWJvdXQgYW4gaG91ciIsImhvdXJzIjoiYWJvdXQgJWQgaG91cnMiLCJkYXkiOiJhIGRheSIsImRheXMiOiIlZCBkYXlzIiwibW9udGgiOiJhYm91dCBhIG1vbnRoIiwibW9udGhzIjoiJWQgbW9udGhzIiwieWVhciI6ImFib3V0IGEgeWVhciIsInllYXJzIjoiJWQgeWVhcnMifSwicmVzaXplX21hcmtlciI6IiIsIm1hcmtlcl9tYXhfd2lkdGgiOiI1MCIsIm1hcmtlcl9tYXhfaGVpZ2h0IjoiNTAiLCJtYXJrZXJfY2x1c3Rlcl9zaXplIjoiNjAiLCJtYXJrZXJfY2x1c3Rlcl96b29tIjoiMTciLCJpbWFnZVBhdGgiOiJodHRwczpcL1wvd3d3Lmxpd2luZS5jb21cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2dlb2Rpcl9tYXJrZXJfY2x1c3RlclwvYXNzZXRzXC9pbWFnZXNcL20ifTsKLyogXV0+ICovCg==
2 ms
geodirectory.min.js
119 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwoJCQkKCQkKLyogXV0+ICovCg==
2 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwp2YXIgZ2VvZGlyX2NsYWltX3BhcmFtcyA9IHsidGV4dF9zZW5kIjoiU2VuZCIsInRleHRfc2VuZGluZyI6IlNlbmRpbmcuLi4iLCJhdWkiOiJib290c3RyYXAifTsKLyogXV0+ICovCg==
2 ms
script.min.js
124 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwp2YXIgZ2VvZGlyX2NwX3BhcmFtcyA9IHsiYXVpIjoiYm9vdHN0cmFwIn07Ci8qIF1dPiAqLwo=
1 ms
script.min.js
127 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwp2YXIgZ2VvZGlyX3ByaWNpbmdfcGFyYW1zID0gW107Ci8qIF1dPiAqLwo=
1 ms
common.min.js
146 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwp2YXIgdXdwX2xvY2FsaXplX2RhdGEgPSB7InV3cF9tb3JlX2NoYXJfbGltaXQiOiIxMDAiLCJ1d3BfbW9yZV90ZXh0IjoibW9yZSIsInV3cF9sZXNzX3RleHQiOiJsZXNzIiwiZXJyb3IiOiJTb21ldGhpbmcgd2VudCB3cm9uZy4iLCJlcnJvcl9yZXRyeSI6IlNvbWV0aGluZyB3ZW50IHdyb25nLCBwbGVhc2UgcmV0cnkuIiwidXdwX21vcmVfZWxsaXBzZXNfdGV4dCI6Ii4uLiIsImFqYXh1cmwiOiJodHRwczpcL1wvd3d3Lmxpd2luZS5jb21cL3dwLWFkbWluXC9hZG1pbi1hamF4LnBocCIsImxvZ2luX21vZGFsIjoiMSIsInJlZ2lzdGVyX21vZGFsIjoiMSIsImZvcmdvdF9tb2RhbCI6IjEiLCJ1d3BfcGFzc19zdHJlbmd0aCI6IjAiLCJ1d3Bfc3Ryb25nX3Bhc3NfbXNnIjoiUGxlYXNlIGVudGVyIHZhbGlkIHN0cm9uZyBwYXNzd29yZC4iLCJkZWZhdWx0X2Jhbm5lciI6Imh0dHBzOlwvXC93d3cubGl3aW5lLmNvbVwvd3AtY29udGVudFwvcGx1Z2luc1wvdXNlcnN3cFwvYXNzZXRzXC9pbWFnZXNcL2Jhbm5lci5wbmciLCJiYXNpY05vbmNlIjoiMjYyYzZjNTM4YyJ9OwovKiBdXT4gKi8K
1 ms
users-wp.min.js
596 ms
marker_cluster.min.js
1956 ms
adsbygoogle.js
71 ms
javascript;base64,CiAgICAgICAgICAgdmFyIGFqYXh1cmwgPSAiaHR0cHM6Ly93d3cubGl3aW5lLmNvbS93cC1hZG1pbi9hZG1pbi1hamF4LnBocCI7CiAgICAgICAgIA==
2 ms
javascript;base64,CgkJLyogPCFbQ0RBVEFbICovCgkJKGZ1bmN0aW9uKCkgewoJCQl2YXIgaW1nID0gbmV3IEltYWdlKCksIHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2QtZmVhdHVyZWQtaW1nJyk7CgoJCQlpbWcub25sb2FkID0gZnVuY3Rpb24oKSB7CgkJCQl4LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICJ1cmwoJyIgKyBpbWcuc3JjICsgIicpIjsKCQkJCXguY2xhc3NMaXN0LmFkZCgic2QtZmFkZS1pbiIpOwoJCQl9OwoKCQkJaW1nLnNyYyA9ICJodHRwczovL3d3dy5saXdpbmUuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE5LzA3LzEuanBnIjsKCQl9KSgpOwoJCS8qIF1dPiAqLwoJ
1 ms
widget.js
44 ms
IChhZGRyQ29tcC5zaG9ydF9uYW1lKS50b0xvd2VyQ2FzZSgpIDogJyc7CgkJCQlpZiAoX2NvbnRDb2RlICYmIGpRdWVyeS5pbkFycmF5KF9jb250Q29kZSwgbWF0Y2hDb3VudHJpZXMpICE9PSAtMSkgeyBvSXRlbSA9IGl0ZW07YkZvdW5kID0gdHJ1ZTsgfQoJCQl9CgkJfQoJCWlmICghYkZvdW5kKSB7IGFNb3ZlSXRlbXMucHVzaChpdGVtKTtpTW92ZUl0ZW1zKys7IH0KCX0pOwoJaWYgKG9JdGVtKSB7IGlmIChhTW92ZUl0ZW1zLmxlbmd0aCkgeyByZXN1bHRzID0galF1ZXJ5Lm1lcmdlKFtvSXRlbV0sIGFNb3ZlSXRlbXMpOyB9IGVsc2UgeyByZXN1bHRzWzBdID0gb0l0ZW07IH0gfSBlbHNlIHsgc3RhdHVzID0gJ1pFUk9fUkVTVUxUUyc7IC8qIFNob3cgemVybyByZXN1bHRzIG1lc3NhZ2UuICovIH0KIH0KCQkJCQkJCQkJaWYgKHN0YXR1cyA9PSBnb29nbGUubWFwcy5HZW9jb2RlclN0YXR1cy5PSykgewoJCQkJCQkJCQkJdXBkYXRlU2VhcmNoUG9zaXRpb24ocmVzdWx0c1swXS5nZW9tZXRyeS5sb2NhdGlvbiwgJGZvcm0pOwoJCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkJYWxlcnQoIlNlYXJjaCB3YXMgbm90IHN1Y2Nlc3NmdWwgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uIDoiICsgc3RhdHVzKTsKCQkJCQkJCQkJfQoJCQkJCQkJCX0pOwoJCQkJCQl9IGVsc2UgaWYgKHdpbmRvdy5nZE1hcHMgPT09ICdvc20nKSB7CgkJCQkJCQl2YXIgb3NtQ291bnRyeUNvZGVzID0gZmFsc2U7CgkJCQkJCQkgb3NtQ291bnRyeUNvZGVzID0gJ3VzJzsJCQkJCQkJZ2VvY29kZVBvc2l0aW9uT1NNKGZhbHNlLCBzZWFyY2hfYWRkcmVzcywgb3NtQ291bnRyeUNvZGVzLCBmYWxzZSwKCQkJCQkJCQlmdW5jdGlvbihnZW8pIHsKCQkJCQkJCQkJCQkJCQkJCQkJaWYgKHR5cGVvZiBnZW8gIT09ICd1bmRlZmluZWQnICYmIGdlby5sYXQgJiYgZ2VvLmxvbikgewoJCQkJCQkJCQkJdXBkYXRlU2VhcmNoUG9zaXRpb24oZ2VvLCAkZm9ybSk7CgkJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCQlhbGVydCgiU2VhcmNoIHdhcyBub3Qgc3VjY2Vzc2Z1bCBmb3IgdGhlIHJlcXVlc3RlZCBhZGRyZXNzLiIpOwoJCQkJCQkJCQl9CgkJCQkJCQkJfSk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQlqUXVlcnkoJGZvcm0pLnRyaWdnZXIoInN1Ym1pdCIpOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgoJCQlmdW5jdGlvbiBnZW9kaXJJc1ppcENvZGUoc3RyaW5nKSB7CgkJCQlpZiAoL15cZCskLy50ZXN0KHN0cmluZykpIHsKCQkJCQlpZiAoc3RyaW5nLmxlbmd0aCA+IDMgJiYgc3RyaW5nLmxlbmd0aCA8IDcpIHsKCQkJCQkJcmV0dXJuIHRydWU7CgkJCQkJfQoJCQkJfQoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgoJCQlmdW5jdGlvbiBpbml0aWFsaXNlMigpIHsKCQkJCWlmICghd2luZG93LmdkTWFwcykgewoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQlpZiAod2luZG93LmdkTWFwcyA9PT0gJ2dvb2dsZScpIHsKCQkJCQl2YXIgbGF0bG5nID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZyg1Ni40OTQzNDMsIC00LjIwNTQ0Nik7CgkJCQkJdmFyIG15T3B0aW9ucyA9IHsKCQkJCQkJem9vbTogNCwKCQkJCQkJbWFwVHlwZUlkOiBnb29nbGUubWFwcy5NYXBUeXBlSWQuVEVSUkFJTiwKCQkJCQkJZGlzYWJsZURlZmF1bHRVSTogdHJ1ZQoJCQkJCX0KCQkJCX0gZWxzZSBpZiAod2luZG93LmdkTWFwcyA9PT0gJ29zbScpIHsKCQkJCQl2YXIgbGF0bG5nID0gbmV3IEwuTGF0TG5nKDU2LjQ5NDM0MywgLTQuMjA1NDQ2KTsKCQkJCQl2YXIgbXlPcHRpb25zID0gewoJCQkJCQl6b29tOiA0LAoJCQkJCQltYXBUeXBlSWQ6ICdURVJSQUlOJywKCQkJCQkJZGlzYWJsZURlZmF1bHRVSTogdHJ1ZQoJCQkJCX0KCQkJCX0KCQkJCXRyeSB7IHByZXBhcmVHZW9sb2NhdGlvbigpOyB9IGNhdGNoIChlKSB7fQoJCQkJZG9HZW9sb2NhdGlvbigpOwoJCQl9CgoJCQlmdW5jdGlvbiBkb0dlb2xvY2F0aW9uKCkgewoJCQkJaWYgKG5hdmlnYXRvci5nZW9sb2NhdGlvbikgewoJCQkJCW5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb25TdWNjZXNzLCBwb3NpdGlvbkVycm9yKTsKCQkJCX0gZWxzZSB7CgkJCQkJcG9zaXRpb25FcnJvcigtMSk7CgkJCQl9CgkJCX0KCgkJCWZ1bmN0aW9uIHBvc2l0aW9uRXJyb3IoZXJyKSB7CgkJCQl2YXIgbXNnOwoJCQkJc3dpdGNoIChlcnIuY29kZSkgewoJCQkJCWNhc2UgZXJyLlVOS05PV05fRVJST1I6CgkJCQkJCW1zZyA9ICJVbmFibGUgdG8gZmluZCB5b3VyIGxvY2F0aW9uIjsKCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSBlcnIuUEVSTUlTU0lPTl9ERU5JTkVEOgoJCQkJCQltc2cgPSAiUGVybWlzc2lvbiBkZW5pZWQgaW4gZmluZGluZyB5b3VyIGxvY2F0aW9uIjsKCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSBlcnIuUE9TSVRJT05fVU5BVkFJTEFCTEU6CgkJCQkJCW1zZyA9ICJZb3VyIGxvY2F0aW9uIGlzIGN1cnJlbnRseSB1bmtub3duIjsKCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSBlcnIuQlJFQUs6CgkJCQkJCW1zZyA9ICJBdHRlbXB0IHRvIGZpbmQgbG9jYXRpb24gdG9vayB0b28gbG9uZyI7CgkJCQkJCWJyZWFrOwoJCQkJCWRlZmF1bHQ6CgkJCQkJCW1zZyA9ICJMb2NhdGlvbiBkZXRlY3Rpb24gbm90IHN1cHBvcnRlZCBpbiBicm93c2VyIjsKCQkJCX0KCQkJCWpRdWVyeSgnI2luZm8nKS5odG1sKG1zZyk7CgkJCX0KCgkJCWZ1bmN0aW9uIHBvc2l0aW9uU3VjY2Vzcyhwb3NpdGlvbikgewoJCQkJdmFyIGNvb3JkcyA9IHBvc2l0aW9uLmNvb3JkcyB8fCBwb3NpdGlvbi5jb29yZGluYXRlIHx8IHBvc2l0aW9uOwoJCQkJalF1ZXJ5KCcuc2dlb19sYXQnKS52YWwoY29vcmRzLmxhdGl0dWRlKTsKCQkJCWpRdWVyeSgnLnNnZW9fbG9uJykudmFsKGNvb3Jkcy5sb25naXR1ZGUpOwoKCQkJCWpRdWVyeSgnLmdlb2Rpci1saXN0aW5nLXNlYXJjaCcpLnRyaWdnZXIoInN1Ym1pdCIpOwoJCQl9CgoJCQkvKioKCQkJICogT24gdW5sb2FkIHBhZ2UgZG8gc29tZSBjbGVhbmluZyBzbyBiYWNrIGJ1dHRvbiBjYWNoZSBkb2VzIG5vdCBzdG9yZSB0aGVzZSB2YWx1ZXMuCgkJCSAqLwoJCQlqUXVlcnkod2luZG93KS5vbigiYmVmb3JldW5sb2FkIiwgZnVuY3Rpb24oZSkgewoJCQkJaWYoalF1ZXJ5KCcuc2dlb19sYXQnKS5sZW5ndGggKXsKCQkJCQlqUXVlcnkoJy5zZ2VvX2xhdCcpLnZhbCgnJyk7CgkJCQkJalF1ZXJ5KCcuc2dlb19sb24nKS52YWwoJycpOwoJCQkJfQoJCQl9KTsKCQk=
1 ms
javascript;base64,dmFyIGdlb2Rpcl9yZXZpZXdyYXRpbmdfYWxsX2pzX21zZyA9IHsiZ2VvZGlyX3Jldmlld3JhdGluZ19hZG1pbl9hamF4X3VybCI6Imh0dHBzOlwvXC93d3cubGl3aW5lLmNvbVwvd3AtYWRtaW5cL2FkbWluLWFqYXgucGhwP2FjdGlvbj1nZW9kaXJfcmV2aWV3cmF0aW5nX2FqYXgiLCJnZW9kaXJfcmV2aWV3cmF0aW5nX3BsZWFzZV9lbnRlciI6IlBsZWFzZSBlbnRlciIsImdlb2Rpcl9yZXZpZXdyYXRpbmdfc3Rhcl90ZXh0IjoiU3RhciBUZXh0IiwiZ2VvZGlyX3Jldmlld3JhdGluZ19yYXRpbmdfZGVsZXRlX2NvbmZpcm1hdGlvbiI6IkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcz8iLCJnZW9kaXJfcmV2aWV3cmF0aW5nX3BsZWFzZV9zZWxlY3QiOiJQbGVhc2Ugc2VsZWN0IiwiZ2VvZGlyX3Jldmlld3JhdGluZ19jYXRlZ29yaWVzX3RleHQiOiJDYXRlZ29yaWVzLiIsImdlb2Rpcl9yZXZpZXdyYXRpbmdfc2VsZWN0X3Bvc3RfdHlwZSI6IlBsZWFzZSBzZWxlY3QgUG9zdCBUeXBlLiIsImdlb2Rpcl9yZXZpZXdyYXRpbmdfZW50ZXJfcmF0aW5nX3RpdGxlIjoiUGxlYXNlIGVudGVyIHJhdGluZyB0aXRsZS4iLCJnZW9kaXJfcmV2aWV3cmF0aW5nX3NlbGVjdF9tdWx0aXJhdGluZ19zdHlsZSI6IlBsZWFzZSBTZWxlY3QgbXVsdGlyYXRpbmcgc3R5bGUuIiwiZ2VvZGlyX3Jldmlld3JhdGluZ19oaWRlX2ltYWdlcyI6IkhpZGUgSW1hZ2VzIiwiZ2VvZGlyX3Jldmlld3JhdGluZ19zaG93X2ltYWdlcyI6IlNob3cgSW1hZ2VzIiwiZ2VvZGlyX3Jldmlld3JhdGluZ19oaWRlX3JhdGluZ3MiOiJIaWRlIE11bHRpIFJhdGluZ3MiLCJnZW9kaXJfcmV2aWV3cmF0aW5nX3Nob3dfcmF0aW5ncyI6IlNob3cgTXVsdGkgUmF0aW5ncyIsImdlb2Rpcl9yZXZpZXdyYXRpbmdfZGVsZXRlX2ltYWdlX2NvbmZpcm1hdGlvbiI6IkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBpbWFnZT8iLCJnZW9kaXJfcmV2aWV3cmF0aW5nX3BsZWFzZV9lbnRlcl9iZWxvdyI6IlBsZWFzZSBlbnRlciBiZWxvdyIsImdlb2Rpcl9yZXZpZXdyYXRpbmdfcGxlYXNlX2VudGVyX2Fib3ZlIjoiUGxlYXNlIGVudGVyIGFib3ZlIiwiZ2VvZGlyX3Jldmlld3JhdGluZ19udW1lcmljX3ZhbGlkYXRpb24iOiJQbGVhc2UgZW50ZXIgb25seSBudW1lcmljIHZhbHVlIiwiZ2VvZGlyX3Jldmlld3JhdGluZ19tYXhpbXVtX3N0YXJfcmF0aW5nX3ZhbGlkYXRpb24iOiJZb3UgYXJlIGNyZWF0ZSBtYXhpbXVtIHNldmVuIHN0YXIgcmF0aW5nIiwiZ2VvZGlyX3Jldmlld3JhdGluZ19zdGFyX2FuZF9pbnB1dF9ib3hfdmFsaWRhdGlvbiI6IllvdXIgaW5wdXQgYm94IG51bWJlciBhbmQgbnVtYmVyIG9mIHN0YXIgaXMgbm90IHNhbWUiLCJnZW9kaXJfcmV2aWV3cmF0aW5nX3N0YXJfYW5kX3Njb3JlX3RleHRfdmFsaWRhdGlvbiI6IllvdXIgaW5wdXQgYm94IG51bWJlciBhbmQgbnVtYmVyIG9mIFNjb3JlIHRleHQgaXMgbm90IHNhbWUiLCJnZW9kaXJfcmV2aWV3cmF0aW5nX3NlbGVjdF9yYXRpbmdfb2ZmX2ltZyI6IlBsZWFzZSBzZWxlY3QgcmF0aW5nIG9mZiBpbWFnZS4iLCJnZW9kaXJfcmV2aWV3cmF0aW5nX29wdGlvbmFsX211bHRpcmF0aW5nIjoiIiwiYWxsb3dfZW1wdHlfcmV2aWV3IjoiIiwiZXJyX2VtcHR5X3JldmlldyI6IlBsZWFzZSB0eXBlIGEgcmV2aWV3LiIsImVycl9lbXB0eV9yZXBseSI6IlBsZWFzZSB0eXBlIGEgcmVwbHkuIn07
1 ms
javascript;base64,ICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICAgICAgalF1ZXJ5KCJib2R5Iikub24oImdlb2Rpcl9zZXR1cF9zZWFyY2hfZm9ybSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKGpRdWVyeSgiLmZlYXR1cmVkLWFyZWEgLmdlb2Rpci1jYXQtbGlzdC10YXgiKS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcG9zdFR5cGUgPSBqUXVlcnkoJy5mZWF0dXJlZC1hcmVhIC5zZWFyY2hfYnlfcG9zdCcpLnZhbCgpOwogICAgICAgICAgICAgICAgICAgIGpRdWVyeSgiLmdlb2Rpci1jYXQtbGlzdC10YXgiKS52YWwocG9zdFR5cGUpOwogICAgICAgICAgICAgICAgICAgIGpRdWVyeSgiLmdlb2Rpci1jYXQtbGlzdC10YXgiKS5jaGFuZ2UoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBqUXVlcnkoIiNzaG93TWFwIikuY2xpY2soZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkoJyNzZC1zaWRlYmFyLWxlZnQsI3NkLXNpZGViYXItcmlnaHQsI2hpZGVNYXAnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7CiAgICAgICAgICAgICAgICBqUXVlcnkoJyNzZC1hcmNoaXZlLW1hcCwjc2hvd01hcCcpLmFkZENsYXNzKCdkLW5vbmUnKTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBqUXVlcnkoIiNoaWRlTWFwIikuY2xpY2soZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkoJyNzZC1zaWRlYmFyLWxlZnQsI3NkLXNpZGViYXItcmlnaHQsI2hpZGVNYXAnKS5hZGRDbGFzcygnZC1ub25lJyk7CiAgICAgICAgICAgICAgICBqUXVlcnkoJyNzZC1hcmNoaXZlLW1hcCwjc2hvd01hcCcpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBqUXVlcnkoIiNzaG93U2VhcmNoIikuY2xpY2soZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkoImJvZHkiKS50b2dnbGVDbGFzcygnc2Qtc2hvdy1zZWFyY2gnKTsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZ2VvZGlyX3JlcG9zaXRpb25fY29tcGFzcyA9PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICAgICAgZ2VvZGlyX3JlcG9zaXRpb25fY29tcGFzcygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGlmIChqUXVlcnkoIi5zZC1kZXRhaWwtY3RhIGEuZHQtYnRuIikubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkoIi5zZC1kZXRhaWwtY3RhIGEuZHQtYnRuIikuY2xpY2soZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgc2Rfc2Nyb2xsX3RvX3Jldmlld3MoKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBqUXVlcnkoIi5zZC1kZXRhaWwtY3RhIC5nZC13cml0ZS1hLXJldmlldy1iYWRnZSwgLnNkLXJhdGluZ3MgLmdlb2Rpci1wb3N0LXJhdGluZyAuZ2QtbGlzdC1yYXRpbmctbGluayIpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIHNkX3Njcm9sbF90b19yZXZpZXdzKCk7CiAgICAgICAgICAgIH0pOwoKCiAgICAgICAgfSk7CgogICAgICAgIGZ1bmN0aW9uIHNkX3Njcm9sbF90b19yZXZpZXdzKCkgewogICAgICAgICAgICBpZiAoalF1ZXJ5KCIuZ2VvZGlyLXRhYi1oZWFkIFtocmVmPScjcmV2aWV3cyddIikubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkoIi5nZW9kaXItdGFiLWhlYWQgW2hyZWY9JyNyZXZpZXdzJ10iKS50cmlnZ2VyKCdjbGljaycpOyAvKiBBVUkgKi8KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGpRdWVyeSgnLmdlb2Rpci10YWItaGVhZCBbZGF0YS10YWI9IiNyZXZpZXdzIl0nKS5jbG9zZXN0KCdkZCcpLnRyaWdnZXIoJ2NsaWNrJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkoJ2h0bWwsYm9keScpLmFuaW1hdGUoewogICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcDogalF1ZXJ5KCcjY29tbWVudHMgI3Jlc3BvbmQnKS5vZmZzZXQoKS50b3AKICAgICAgICAgICAgICAgIH0sICdzbG93Jyk7CiAgICAgICAgICAgICAgICBqUXVlcnkoJyNjb21tZW50cyAjcmVzcG9uZCAjY29tbWVudCcpLmZvY3VzKCk7CiAgICAgICAgICAgIH0sIDIwMCk7CiAgICAgICAgfQoKICAgICAgICB2YXIgJHNkX3NpZGViYXJfcG9zaXRpb24gPSAnJzsKICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIC8vIHNldCB0aGUgc2lkZWJhciBwb3NpdGlvbiB2YXIKICAgICAgICAgICAgaWYgKGpRdWVyeSgnYm9keS5zZC1yaWdodC1zaWRlYmFyJykubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAkc2Rfc2lkZWJhcl9wb3NpdGlvbiA9ICdyaWdodCc7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkc2Rfc2lkZWJhcl9wb3NpdGlvbiA9ICdsZWZ0JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKGpRdWVyeSgiLmZlYXR1cmVkLWltZyIpLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHZhciB3aW5kb3dIZWlnaHQgPSBzY3JlZW4uaGVpZ2h0OwogICAgICAgICAgICAgICAgICAgIHZhciBwYXJhbGxheCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5mZWF0dXJlZC1pbWciKSwKICAgICAgICAgICAgICAgICAgICAgICAgc3BlZWQgPSAwLjY7CiAgICAgICAgICAgICAgICAgICAgdmFyIGJQb3MgPSBqUXVlcnkoIi5mZWF0dXJlZC1pbWciKS5jc3MoImJhY2tncm91bmQtcG9zaXRpb24iKTsKICAgICAgICAgICAgICAgICAgICB2YXIgYXJyQnBvcyA9IGJQb3Muc3BsaXQoJyAnKTsKICAgICAgICAgICAgICAgICAgICB2YXIgb3JpZ2luYWxCcG9zID0gYXJyQnBvc1sxXTsKICAgICAgICAgICAgICAgICAgICB2YXIgZmV0SGVpZ2h0ID0gcGFyc2VJbnQoalF1ZXJ5KCIuZmVhdHVyZWQtYXJlYSIpLmNzcygiaGVpZ2h0IikpOwogICAgICAgICAgICAgICAgICAgIHZhciBmZXRBcmVIZWlnaHQgPSBqUXVlcnkoIi5mZWF0dXJlZC1hcmVhIikub2Zmc2V0KCkudG9wICsgZmV0SGVpZ2h0OwoKICAgICAgICAgICAgICAgICAgICB3aW5kb3cub25zY3JvbGwgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGYgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBbXS5zbGljZS5jYWxsKHBhcmFsbGF4KS5mb3JFYWNoKGZ1bmN0aW9uKGVsLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2luZG93WU9mZnNldCA9IHdpbmRvdy5wYWdlWU9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsQnBvcyA9IHBhcnNlSW50KG9yaWdpbmFsQnBvcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGVyYyA9IHdpbmRvd1lPZmZzZXQgLyBmZXRBcmVIZWlnaHQgKyAob3JpZ2luYWxCcG9zIC8gMTAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIjUwJSBjYWxjKCIrb3JpZ2luYWxCcG9zKyIgLSAiICsgKHdpbmRvd1lPZmZzZXQgKiBzcGVlZCkgKyAicHgpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWxsYXhQZXJjZW50ID0gMTAwICogcGVyYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbGxheFBlcmNlbnQgPiAxMDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbGxheFBlcmNlbnQgPSAxMDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoZWwpLmNzcygiYmFja2dyb3VuZC1wb3NpdGlvbiIsICI1MCUgIiArIHBhcmFsbGF4UGVyY2VudCArICIlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmKys7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgalF1ZXJ5KCIjc2QtaG9tZS1zY3JvbGwiKS5jbGljayhmdW5jdGlvbihldmVudCkgewogICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIGpRdWVyeSgnaHRtbCwgYm9keScpLmFuaW1hdGUoewogICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcDogalF1ZXJ5KCIuZmVhdHVyZWQtYXJlYSIpLm91dGVySGVpZ2h0KCkKICAgICAgICAgICAgICAgIH0sIDEwMDApOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIHNkX2luc2VydF9hcmNoaXZlX3Jlc2l6ZXIoJy5zZC1hcmNoaXZlLWxpc3RpbmdzJywnLnNkLWFyY2hpdmUtbWFwJyk7CiAgICAgICAgfSkoKTsKCiAgICAgICAgLy8gaW5zZXJ0IGFyY2hpdmUgcGFnZSBzaXplIGFkanVzdGVyCiAgICAgICAgZnVuY3Rpb24gc2RfaW5zZXJ0X2FyY2hpdmVfcmVzaXplcigkbGlzdGluZ3NfY29udGFpbmVyLCRtYXBfY29udGFpbmVyKSB7CiAgICAgICAgICAgICRzY3JlZW5fd2lkdGggPSBzY3JlZW4ud2lkdGg7CiAgICAgICAgICAgIGlmIChqUXVlcnkoJG1hcF9jb250YWluZXIpLmxlbmd0aCAmJiAkc2NyZWVuX3dpZHRoID4gOTkyKSB7CiAgICAgICAgICAgICAgICAkb2Zmc2V0ID0gJ21yLW41JzsKICAgICAgICAgICAgICAgIGlmICgkc2Rfc2lkZWJhcl9wb3NpdGlvbiA9PSAnbGVmdCcpIHsKICAgICAgICAgICAgICAgICAgICAkb2Zmc2V0ID0gJ21sLW41JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGpRdWVyeSgkbGlzdGluZ3NfY29udGFpbmVyKS5wcmVwZW5kKCc8c3BhbiBjbGFzcz0ic2QtYXJjaGl2ZS1yZXNpemVyICcrJG9mZnNldCsnIGljb25ib3ggaWNvbnNtYWxsIGZpbGwgcm91bmRlZC1jaXJjbGUgYmctcHJpbWFyeSB0ZXh0LXdoaXRlIHNoYWRvdyBib3JkZXItMCBjLXBvaW50ZXIiIHRpdGxlPSJEcmFnIHRvIHJlc2l6ZSIgZGF0YS10b2dnbGU9InRvb2x0aXAiIHN0eWxlPSJwb3NpdGlvbjogc3RpY2t5O3RvcDogNTB2aDt6LWluZGV4OiAxO3dpZHRoOiAzMHB4O2hlaWdodDogMzBweDtsaW5lLWhlaWdodDogMzBweDt6LWluZGV4OiAxMDUwOyI+PGkgY2xhc3M9ImZhcyBmYS1hcnJvd3MtYWx0LWgiPjwvaT48L3NwYW4+Jyk7CiAgICAgICAgICAgICAgICBzZF9wb3NpdGlvbl9hcmNoaXZlX3Jlc2l6ZXIoJGxpc3RpbmdzX2NvbnRhaW5lcik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHNkX3JlcG9zaXRpb25fYXJjaGl2ZSgkbGlzdGluZ3NfY29udGFpbmVyLCRtYXBfY29udGFpbmVyKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHNkX3Bvc2l0aW9uX2FyY2hpdmVfcmVzaXplcigkY29udGFpbmVyKSB7CiAgICAgICAgICAgIHZhciAkb2Zmc2V0ID0gMjE7CiAgICAgICAgICAgIGlmICgkc2Rfc2lkZWJhcl9wb3NpdGlvbiA9PSAnbGVmdCcpIHsKICAgICAgICAgICAgICAgICRjb250YWluZXIgPSAnLnNkLXNpZGViYXInOwogICAgICAgICAgICAgICAgJG9mZnNldCA9IDEzOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR3aWR0aCA9IGpRdWVyeSgkY29udGFpbmVyKS5vdXRlcldpZHRoKCkgLSAkb2Zmc2V0OwogICAgICAgICAgICBqUXVlcnkoJy5zZC1hcmNoaXZlLXJlc2l6ZXInKS5jc3MoJ2xlZnQnLCAkd2lkdGgpOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gc2RfcmVwb3NpdGlvbl9hcmNoaXZlKCRjb250YWluZXIsJG1hcF9jb250YWluZXIpIHsKCiAgICAgICAgICAgIHZhciAkc2Rfc2V0X2FyY2hpdmVfd2lkdGggPSBmYWxzZTsKLy8gZnVuY3Rpb24gdG8gYWRqdXN0IHdpZHRoIG9mIGFyY2hpdmUgZWxlbWVudHMKICAgICAgICAgICAgalF1ZXJ5KCdib2R5Lmdlb2Rpci1maXhlZC1hcmNoaXZlIC5zZC1hcmNoaXZlLXJlc2l6ZXInKS5tb3VzZWRvd24oZnVuY3Rpb24oZSkge2NvbnNvbGUubG9nKCdkb3duJyk7CiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAkbGVmdF9jb250YWluZXIgPSAkY29udGFpbmVyOwogICAgICAgICAgICAgICAgJHJpZ3RoX2NvbnRhaW5lciA9ICRtYXBfY29udGFpbmVyOwogICAgICAgICAgICAgICAgLy8gdmFyICRjb250YWluZXIgPSAnLmVudHJ5LWNvbnRlbnQnOwogICAgICAgICAgICAgICAgaWYgKCRzZF9zaWRlYmFyX3Bvc2l0aW9uID09ICdsZWZ0JykgewogICAgICAgICAgICAgICAgICAgICRsZWZ0X2NvbnRhaW5lciA9ICRtYXBfY29udGFpbmVyOwogICAgICAgICAgICAgICAgICAgICRyaWd0aF9jb250YWluZXIgPSAkY29udGFpbmVyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgalF1ZXJ5KGRvY3VtZW50KS5tb3VzZW1vdmUoZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgICAgIGpRdWVyeSgkbGVmdF9jb250YWluZXIpLnJlbW92ZUNsYXNzKCdjb2wtbWQtNyBjb2wtMTInKS5hZGRDbGFzcygnY29sJykuY3NzKCJ3aWR0aCIsIGUucGFnZVggKyAyKS5jc3MoIm1heC13aWR0aCIsIGUucGFnZVggKyAyKS5jc3MoImZsZXgtYmFzaXMiLCAnYXV0bycpOwogICAgICAgICAgICAgICAgICAgIGpRdWVyeSgkcmlndGhfY29udGFpbmVyKS5yZW1vdmVDbGFzcygnY29sLW1kLTUgY29sLTEyJykuYWRkQ2xhc3MoJ2NvbCcpOwogICAgICAgICAgICAgICAgICAgIHNkX3Bvc2l0aW9uX2FyY2hpdmVfcmVzaXplcigkY29udGFpbmVyKTsKICAgICAgICAgICAgICAgICAgICAkc2Rfc2V0X2FyY2hpdmVfd2lkdGggPSB0cnVlOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgalF1ZXJ5KGRvY3VtZW50KS5tb3VzZXVwKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIGpRdWVyeShkb2N1bWVudCkudW5iaW5kKCdtb3VzZW1vdmUnKTsKCiAgICAgICAgICAgICAgICAvLyBzZXQgdGhlIHZhbHVlIGlmIHdlIGhhdmUgbG9jYWxzdG9yYWdlCiAgICAgICAgICAgICAgICBpZiAoJHNkX3NldF9hcmNoaXZlX3dpZHRoICYmIGdlb2Rpcl9pc19sb2NhbHN0b3JhZ2UoKSkge2NvbnNvbGUubG9nKCd1cCcpOwogICAgICAgICAgICAgICAgICAgIC8vIHZhciAkY29udGFpbmVyID0gJy5lbnRyeS1jb250ZW50JzsKICAgICAgICAgICAgICAgICAgICB2YXIgJG9mZnNldCA9IDIxOwogICAgICAgICAgICAgICAgICAgIGlmICgkc2Rfc2lkZWJhcl9wb3NpdGlvbiA9PSAnbGVmdCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRhaW5lciA9ICcuc2Qtc2lkZWJhcic7CiAgICAgICAgICAgICAgICAgICAgICAgICRvZmZzZXQgPSAxMzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHdpZHRoID0galF1ZXJ5KCdib2R5Lmdlb2Rpci1maXhlZC1hcmNoaXZlICcgKyAkY29udGFpbmVyKS5vdXRlcldpZHRoKCkgLSAkb2Zmc2V0OwogICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzZF9hcmNoaXZlX3dpZHRoJywgJHdpZHRoKTsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Jlc2l6ZScpKTsgLy8gc28gbWFwIHRpbGVzIGZpbGwgaW4KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICA=
1 ms
c2VhcmNoPSIgKyAkc2VhcmNoLAoJCQlzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7CgkJCQlnZGxtbHNfY2l0eSA9IGRhdGE7CgkJCQlnZGxtbHNfZG9pbmdfc2VhcmNoLS07CgkJCQlnZGxtX2xzX21heWJlX3N1Z2dlc3RfbW9yZSgpOwoJCQkJaHRtbCA9ICcnOwoJCQkJalF1ZXJ5LmVhY2goZ2RsbWxzX2NpdHksIGZ1bmN0aW9uKGluZGV4LCB2YWx1ZSkgewoJCQkJCWh0bWwgPSBodG1sICsgZ2RsbV9sc19jcmVhdGVfbGkoJ2NpdHknLCB2YWx1ZSk7CgkJCQl9KTsKCQkJCWpRdWVyeShnZGxtbHNfc2VsZWN0ZWQpLnBhcmVudCgpLmZpbmQoInVsLmdkbG1scy1jaXR5IikuZW1wdHkoKS5hcHBlbmQoaHRtbCk7CgkJCQlpZiAoaHRtbCAmJiBnZGxtbHNfaXNfc2VhcmNoKXsKCQkJCQlnZW9kaXJMTVNob3dEcm9wZG93bihnZGxtbHNfc2VsZWN0ZWQpOwoJCQkJfQoJCQl9LAoJCQllcnJvcjogZnVuY3Rpb24oeGhyLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikgewoJCQkJY29uc29sZS5sb2coZXJyb3JUaHJvd24pOwoJCQl9CgkJfSk7Cgl9IGVsc2UgewoJCWdkbG1sc19jaXR5ID0gW107CgkJZ2RsbWxzX2RvaW5nX3NlYXJjaC0tOwoJCWdkbG1fbHNfbWF5YmVfc3VnZ2VzdF9tb3JlKCk7CgkJalF1ZXJ5KGdkbG1sc19zZWxlY3RlZCkucGFyZW50KCkuZmluZCgidWwuZ2RsbWxzLWNpdHkiKS5lbXB0eSgpOwoJfQp9CgpmdW5jdGlvbiBnZGxtX2xzX3JlZ2lvbl9zdWdnZXN0aW9uKCkgewoJdmFyICRzZWFyY2ggPSBqUXVlcnkoZ2RsbWxzX3NlbGVjdGVkKS52YWwoKTsKCWlmICgkc2VhcmNoKSB7CgkJalF1ZXJ5LmFqYXgoewoJCQl0eXBlOiAiR0VUIiwKCQkJdXJsOiBnZW9kaXJfcGFyYW1zLmFwaV91cmwgKyAibG9jYXRpb25zL3JlZ2lvbnMvP3NlYXJjaD0iICsgJHNlYXJjaCwKCQkJc3VjY2VzczogZnVuY3Rpb24oZGF0YSkgewoJCQkJZ2RsbWxzX3JlZ2lvbiA9IGRhdGE7CgkJCQlnZGxtbHNfZG9pbmdfc2VhcmNoLS07CgkJCQlnZGxtX2xzX21heWJlX3N1Z2dlc3RfbW9yZSgpOwoJCQkJaHRtbCA9ICcnOwoJCQkJalF1ZXJ5LmVhY2goZ2RsbWxzX3JlZ2lvbiwgZnVuY3Rpb24oaW5kZXgsIHZhbHVlKSB7CgkJCQkJaHRtbCA9IGh0bWwgKyBnZGxtX2xzX2NyZWF0ZV9saSgncmVnaW9uJywgdmFsdWUpOwoJCQkJfSk7CgkJCQlqUXVlcnkoZ2RsbWxzX3NlbGVjdGVkKS5wYXJlbnQoKS5maW5kKCJ1bC5nZGxtbHMtcmVnaW9uIikuZW1wdHkoKS5hcHBlbmQoaHRtbCk7CgkJCQlpZiAoaHRtbCAmJiBnZGxtbHNfaXNfc2VhcmNoKXsKCQkJCQlnZW9kaXJMTVNob3dEcm9wZG93bihnZGxtbHNfc2VsZWN0ZWQpOwoJCQkJfQoJCQl9LAoJCQllcnJvcjogZnVuY3Rpb24oeGhyLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikgewoJCQkJY29uc29sZS5sb2coZXJyb3JUaHJvd24pOwoJCQl9CgkJfSk7Cgl9IGVsc2UgewoJCWdkbG1sc19yZWdpb24gPSBbXTsKCQlnZGxtbHNfZG9pbmdfc2VhcmNoLS07CgkJZ2RsbV9sc19tYXliZV9zdWdnZXN0X21vcmUoKTsKCQlqUXVlcnkoZ2RsbWxzX3NlbGVjdGVkKS5wYXJlbnQoKS5maW5kKCJ1bC5nZGxtbHMtcmVnaW9uIikuZW1wdHkoKTsKCX0KfQoKZnVuY3Rpb24gZ2RsbV9sc19jb3VudHJ5X3N1Z2dlc3Rpb24oKSB7Cgl2YXIgJHNlYXJjaCA9IGpRdWVyeShnZGxtbHNfc2VsZWN0ZWQpLnZhbCgpOwoJaWYgKCRzZWFyY2gpIHsKCQlqUXVlcnkuYWpheCh7CgkJCXR5cGU6ICJHRVQiLAoJCQl1cmw6IGdlb2Rpcl9wYXJhbXMuYXBpX3VybCArICJsb2NhdGlvbnMvY291bnRyaWVzLz9zZWFyY2g9IiArICRzZWFyY2gsCgkJCXN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHsKCQkJCWdkbG1sc19jb3VudHJ5ID0gZGF0YTsKCQkJCWdkbG1sc19kb2luZ19zZWFyY2gtLTsKCQkJCWdkbG1fbHNfbWF5YmVfc3VnZ2VzdF9tb3JlKCk7CgkJCQlodG1sID0gJyc7CgkJCQlqUXVlcnkuZWFjaChnZGxtbHNfY291bnRyeSwgZnVuY3Rpb24oaW5kZXgsIHZhbHVlKSB7CgkJCQkJaHRtbCA9IGh0bWwgKyBnZGxtX2xzX2NyZWF0ZV9saSgnY291bnRyeScsIHZhbHVlKTsKCQkJCX0pOwoKCQkJCWpRdWVyeShnZGxtbHNfc2VsZWN0ZWQpLnBhcmVudCgpLmZpbmQoInVsLmdkbG1scy1jb3VudHJ5IikuZW1wdHkoKS5hcHBlbmQoaHRtbCk7CgkJCQlpZiAoaHRtbCAmJiBnZGxtbHNfaXNfc2VhcmNoKXsKCQkJCQlnZW9kaXJMTVNob3dEcm9wZG93bihnZGxtbHNfc2VsZWN0ZWQpOwoJCQkJfQoJCQl9LAoJCQllcnJvcjogZnVuY3Rpb24oeGhyLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikgewoJCQkJY29uc29sZS5sb2coZXJyb3JUaHJvd24pOwoJCQl9CgkJfSk7Cgl9IGVsc2UgewoJCWdkbG1sc19jb3VudHJ5ID0gW107CgkJZ2RsbWxzX2RvaW5nX3NlYXJjaC0tOwoJCWdkbG1fbHNfbWF5YmVfc3VnZ2VzdF9tb3JlKCk7CgkJalF1ZXJ5KGdkbG1sc19zZWxlY3RlZCkucGFyZW50KCkuZmluZCgidWwuZ2RsbWxzLWNvdW50cnkiKS5lbXB0eSgpOwoJfQp9CgpmdW5jdGlvbiBnZGxtX2xzX2N1cnJlbnRfbG9jYXRpb25fc3VnZ2VzdGlvbigpIHsKCWpRdWVyeShnZGxtbHNfc2VsZWN0ZWQpLnBhcmVudCgpLmZpbmQoInVsLmdkbG1scy1uZWFyIikuZW1wdHkoKTsKCgkvLyBOZWFyIG1lCglqUXVlcnkoZ2RsbWxzX3NlbGVjdGVkKS5wYXJlbnQoKS5maW5kKCJ1bC5nZGxtbHMtbmVhciIpLmVtcHR5KCkuYXBwZW5kKGdkbG1fbHNfY3JlYXRlX2xpKCduZWFyJywgewoJCXR5cGU6ICJuZWFyIiwKCQlzbHVnOiAibWUiLAoJCXRpdGxlOiBnZW9kaXJfcGFyYW1zLnR4dF9mb3JtX215X2xvY2F0aW9uCgl9KSk7CgoJaWYgKGpRdWVyeShnZGxtbHNfc2VsZWN0ZWQpLnZhbCgpID09ICcnKSB7CgkJdmFyICRzZWFyY2hfaGlzdG9yeSA9IEpTT04ucGFyc2UoZ2RsbV9sc19nZXRfbG9jYXRpb25faGlzdG9yeSgpKTsKCgkJaWYgKCRzZWFyY2hfaGlzdG9yeSkgewoJCQlqUXVlcnkuZWFjaCgkc2VhcmNoX2hpc3RvcnksIGZ1bmN0aW9uKGluZGV4LCB2YWx1ZSkgewoJCQkJalF1ZXJ5KGdkbG1sc19zZWxlY3RlZCkucGFyZW50KCkuZmluZCgidWwuZ2RsbWxzLW5lYXIiKS5hcHBlbmQoZ2RsbV9sc19jcmVhdGVfbGkodmFsdWUudHlwZSwgdmFsdWUpKTsKCQkJfSk7CgkJfQoKCQlpZiAoICEgZ2VvZGlyX2xvY2F0aW9uX3BhcmFtcy5kaXNhYmxlX25lYXJlc3RfY2l0aWVzICkgewoJCQkvLyBBZGQgbmVhciBjaXRpZXMgZnJvbSBpcAoJCQlnZGxtX2xzX25lYXJlc3RfY2l0aWVzKCk7CgkJfQoJfQoJY29uc29sZS5sb2coSlNPTi5wYXJzZShnZGxtX2xzX2dldF9sb2NhdGlvbl9oaXN0b3J5KCkpKTsKfQoKZnVuY3Rpb24gZ2RsbV9sc19uZWFyZXN0X2NpdGllcygpIHsKCWlmKCFnZGxtbHNfZG9pbmdfbmVhcmVzdCl7CgkJZ2RsbWxzX2RvaW5nX25lYXJlc3QgPSB0cnVlOwoJCWpRdWVyeS5hamF4KHsKCQkJdHlwZTogIkdFVCIsCgkJCXVybDogZ2VvZGlyX3BhcmFtcy5hcGlfdXJsICsgImxvY2F0aW9ucy9jaXRpZXMvP29yZGVyYnk9aXAiLAoJCQlzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7CgkJCQlpZiAoZGF0YSkgewoJCQkJCWpRdWVyeS5lYWNoKGRhdGEsIGZ1bmN0aW9uKGluZGV4LCB2YWx1ZSkgewoJCQkJCQlqUXVlcnkoZ2RsbWxzX3NlbGVjdGVkKS5wYXJlbnQoKS5maW5kKCJ1bC5nZGxtbHMtbmVhciIpLmFwcGVuZChnZGxtX2xzX2NyZWF0ZV9saSgnY2l0eScsIHZhbHVlKSk7CgkJCQkJfSk7CgkJCQl9CgkJCQlnZGxtbHNfZG9pbmdfbmVhcmVzdCA9IGZhbHNlOwoJCQl9LAoJCQllcnJvcjogZnVuY3Rpb24oeGhyLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikgewoJCQkJY29uc29sZS5sb2coZXJyb3JUaHJvd24pOwoJCQkJZ2RsbWxzX2RvaW5nX25lYXJlc3QgPSBmYWxzZTsKCQkJfQoJCX0pOwoJfQp9CgpmdW5jdGlvbiBnZGxtX2xzX2NyZWF0ZV9saSgkdHlwZSwkZGF0YSl7Cgl2YXIgb3V0cHV0OwoJdmFyIGhpc3RvcnkgPSAnJzsKCXZhciAkZGVsZXRlID0gJyc7Cgl2YXIgJGNvbW1vbl9jbGFzcyA9ICdsaXN0LWdyb3VwLWl0ZW0tYWN0aW9uIGMtcG9pbnRlciBweC0xIHB5LTEgbS0wIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2Vlbic7CglpZigkZGF0YS5oaXN0b3J5KXsKCQloaXN0b3J5ID0gJzxpIGNsYXNzPSJmYXMgZmEtaGlzdG9yeSIgdGl0bGU9IlNlYXJjaCBoaXN0b3J5Ij48L2k+ICc7CgkJJGRlbGV0ZSA9ICc8c3Bhbj48aSBvbmNsaWNrPSJ2YXIgZXZlbnQgPSBhcmd1bWVudHNbMF0gfHwgd2luZG93LmV2ZW50OyBnZW9kaXJfY2FuY2VsQnViYmxlKGV2ZW50KTtnZGxtX2xzX2RlbF9sb2NhdGlvbl9oaXN0b3J5KFwnJyskZGF0YS5zbHVnKydcJyk7alF1ZXJ5KHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLnJlbW92ZSgpOyIgY2xhc3M9ImZhcyBmYS10aW1lcyIgdGl0bGU9IlJlbW92ZSBmcm9tIGhpc3RvcnkiPjwvaT48L3NwYW4+ICc7Cgl9ZWxzZSBpZigkdHlwZSA9PSAnbmVpZ2hib3VyaG9vZCcgfHwgJHR5cGUgPT0gJ2NpdHknIHx8ICR0eXBlID09ICdyZWdpb24nIHx8ICR0eXBlID09ICdjb3VudHJ5Jyl7CgkJaGlzdG9yeSA9ICc8aSBjbGFzcz0iZmFzIGZhLW1hcC1tYXJrZXItYWx0Ij48L2k+ICc7Cgl9Cgljb25zb2xlLmxvZygkZGF0YSk7CglpZigkdHlwZT09J25laWdoYm91cmhvb2QnKXsKCQlpZigkZGF0YS5hcmVhKXskZGF0YS5jaXR5ID0gJGRhdGEuYXJlYTt9CgkJb3V0cHV0ID0gJzxsaSBjbGFzcz0iJyskY29tbW9uX2NsYXNzKyciIGRhdGEtdHlwZT0iJyskdHlwZSsnIiBvbnRvdWNoc3RhcnQ9InRoaXMuY2xpY2soKTtyZXR1cm4gZmFsc2U7IiBvbmNsaWNrPSJnZGxtX2NsaWNrX2FjdGlvbihcJycrJHR5cGUrJ1wnLFwnJytnZGxtX2xzX3NsYXNoaXQoJGRhdGEudGl0bGUpKydcJyxcJycrZ2RsbV9sc19zbGFzaGl0KCRkYXRhLmNpdHkpKydcJyxcJycrJGRhdGEuY291bnRyeV9zbHVnKydcJyxcJycrJGRhdGEucmVnaW9uX3NsdWcrJ1wnLFwnJyskZGF0YS5jaXR5X3NsdWcrJ1wnLFwnJyskZGF0YS5zbHVnKydcJyk7Ij48c3Bhbj4nK2hpc3RvcnkrJ0luOiA8Yj4nKyAkZGF0YS50aXRsZSArICc8L2I+LCAnKyAkZGF0YS5jaXR5ICsgJyAoTmVpZ2hib3VyaG9vZCk8L3NwYW4+JyskZGVsZXRlKyc8L2xpPic7Cgl9ZWxzZSBpZigkdHlwZT09J2NpdHknKXsKCQlpZigkZGF0YS5hcmVhKXskZGF0YS5yZWdpb24gPSAkZGF0YS5hcmVhO30KCQlvdXRwdXQgPSAnPGxpIGNsYXNzPSInKyRjb21tb25fY2xhc3MrJyIgZGF0YS10eXBlPSInKyR0eXBlKyciIG9udG91Y2hzdGFydD0idGhpcy5jbGljaygpO3JldHVybiBmYWxzZTsiIG9uY2xpY2s9ImdkbG1fY2xpY2tfYWN0aW9uKFwnJyskdHlwZSsnXCcsXCcnK2dkbG1fbHNfc2xhc2hpdCgkZGF0YS50aXRsZSkrJ1wnLFwnJytnZGxtX2xzX3NsYXNoaXQoJGRhdGEucmVnaW9uKSsnXCcsXCcnKyRkYXRhLmNvdW50cnlfc2x1ZysnXCcsXCcnKyRkYXRhLnJlZ2lvbl9zbHVnKydcJyxcJycrJGRhdGEuc2x1ZysnXCcpOyI+PHNwYW4+JytoaXN0b3J5KydJbjogPGI+JysgJGRhdGEudGl0bGUgKyAnPC9iPiwgJyskZGF0YS5yZWdpb24rJyAoQ2l0eSk8L3NwYW4+JyskZGVsZXRlKyc8L2xpPic7Cgl9ZWxzZSBpZigkdHlwZT09J3JlZ2lvbicpewoJCWlmKCRkYXRhLmFyZWEpeyRkYXRhLmNvdW50cnkgPSAkZGF0YS5hcmVhO30KCQlvdXRwdXQgPSAnPGxpIGNsYXNzPSInKyRjb21tb25fY2xhc3MrJyIgZGF0YS10eXBlPSInKyR0eXBlKyciIG9udG91Y2hzdGFydD0idGhpcy5jbGljaygpO3JldHVybiBmYWxzZTsiIG9uY2xpY2s9ImdkbG1fY2xpY2tfYWN0aW9uKFwnJyskdHlwZSsnXCcsXCcnK2dkbG1fbHNfc2xhc2hpdCgkZGF0YS50aXRsZSkrJ1wnLFwnJytnZGxtX2xzX3NsYXNoaXQoJGRhdGEuY291bnRyeSkrJ1wnLFwnJyskZGF0YS5jb3VudHJ5X3NsdWcrJ1wnLFwnJyskZGF0YS5zbHVnKydcJyk7Ij48c3Bhbj4nK2hpc3RvcnkrJ0luOiA8Yj4nKyAkZGF0YS50aXRsZSArICc8L2I+LCAnKyRkYXRhLmNvdW50cnlfdGl0bGUrJyAoUmVnaW9uKTwvc3Bhbj4nKyRkZWxldGUrJzwvbGk+JzsKCX1lbHNlIGlmKCR0eXBlPT0nY291bnRyeScpewoJCW91dHB1dCA9ICc8bGkgY2xhc3M9IicrJGNvbW1vbl9jbGFzcysnIiBkYXRhLXR5cGU9IicrJHR5cGUrJyIgb250b3VjaHN0YXJ0PSJ0aGlzLmNsaWNrKCk7cmV0dXJuIGZhbHNlOyIgb25jbGljaz0iZ2RsbV9jbGlja19hY3Rpb24oXCcnKyR0eXBlKydcJyxcJycrZ2RsbV9sc19zbGFzaGl0KCRkYXRhLnRpdGxlKSsnXCcsXCdcJyxcJycrJGRhdGEuc2x1ZysnXCcpOyI+PHNwYW4+JytoaXN0b3J5KydJbjogPGI+JysgJGRhdGEudGl0bGUgKyAnPC9iPiAoQ291bnRyeSk8L3NwYW4+JyskZGVsZXRlKyc8L2xpPic7Cgl9ZWxzZSBpZigkdHlwZT09J25lYXInKXsKCQlvdXRwdXQgPSAnPGxpIGRhdGEtdHlwZT0iJyskdHlwZSsnIiBjbGFzcz0iZ2QtbmVhci1tZSB0ZXh0LXByaW1hcnkgJyskY29tbW9uX2NsYXNzKyciIG9udG91Y2hzdGFydD0idGhpcy5jbGljaygpO3JldHVybiBmYWxzZTsiIG9uY2xpY2s9ImdkbG1fY2xpY2tfYWN0aW9uKFwnJyskdHlwZSsnXCcsXCcnK2dkbG1fbHNfc2xhc2hpdCgkZGF0YS50aXRsZSkrJ1wnLFwnXCcsXCcnKyRkYXRhLnNsdWcrJ1wnKTsiPjxzcGFuPjxpIGNsYXNzPSJmYXMgZmEtbG9jYXRpb24tYXJyb3ciPjwvaT4gTmVhcjogJysgJGRhdGEudGl0bGUgKyAnPC9zcGFuPjwvbGk+JzsKCX1lbHNlIGlmKCR0eXBlPT0nbmVhci1zZWFyY2gnKXsKCQlvdXRwdXQgPSAnPGxpIGNsYXNzPSInKyRjb21tb25fY2xhc3MrJyIgZGF0YS10eXBlPSInKyR0eXBlKyciIG9udG91Y2hzdGFydD0idGhpcy5jbGljaygpO3JldHVybiBmYWxzZTsiIG9uY2xpY2s9ImdkbG1fY2xpY2tfYWN0aW9uKFwnJyskdHlwZSsnXCcsXCcnK2dkbG1fbHNfc2xhc2hpdCgkZGF0YS5kZXNjcmlwdGlvbikrJ1wnKTsiPjxzcGFuPjxpIGNsYXNzPSJmYXMgZmEtc2VhcmNoIj48L2k+IE5lYXI6ICcrICRkYXRhLmRlc2NyaXB0aW9uICsgJzwvc3Bhbj48L2xpPic7Cgl9CgoJcmV0dXJuIG91dHB1dDsKfQoKZnVuY3Rpb24gZ2RsbV9jbGlja19hY3Rpb24oJHR5cGUsJHRpdGxlLCRhcmVhLCRjb3VudHJ5X3NsdWcsJHJlZ2lvbl9zbHVnLCRjaXR5X3NsdWcsJGhvb2Rfc2x1Zyl7CglpZihnZGxtbHNfaXNfc2VhcmNoKXsKCQlpZigkdHlwZT09J25laWdoYm91cmhvb2QnIHx8ICR0eXBlPT0nY2l0eScgfHwgJHR5cGU9PSdyZWdpb24nIHx8ICR0eXBlPT0nY291bnRyeScpewoJCQkkc2x1ZyA9ICcnOwoJCQlpZigkdHlwZT09J25laWdoYm91cmhvb2QnKXskc2x1ZyA9ICRob29kX3NsdWc7fQoJCQllbHNlIGlmKCR0eXBlPT0nY2l0eScpeyRzbHVnID0gJGNpdHlfc2x1Zzt9CgkJCWVsc2UgaWYoJHR5cGU9PSdyZWdpb24nKXskc2x1ZyA9ICRyZWdpb25fc2x1Zzt9CgkJCWVsc2UgaWYoJHR5cGU9PSdjb3VudHJ5Jyl7JHNsdWcgPSAkY291bnRyeV9zbHVnO30KCQkJZ2RsbV9zZWFyY2hfZmlsbF9sb2NhdGlvbigkdHlwZSwkc2x1ZywkdGl0bGUpOwoJCX1lbHNlIGlmKCR0eXBlPT0nbmVhci1zZWFyY2gnKXsKCQkJZ2RsbV9zZWFyY2hfZmlsbF9sb2NhdGlvbigkdHlwZSwnJywkdGl0bGUpOwoJCX1lbHNlIGlmKCR0eXBlPT0nbmVhcicpewoJCQlnZF9nZXRfdXNlcl9wb3NpdGlvbihnZGxtX3NlYXJjaF9uZWFyX21lKTsKCQl9Cgl9ZWxzZXsKCQlpZigkdHlwZT09J25laWdoYm91cmhvb2QnIHx8ICR0eXBlPT0nY2l0eScgfHwgJHR5cGU9PSdyZWdpb24nIHx8ICR0eXBlPT0nY291bnRyeScpewoJCQlnZGxtX2dvX2xvY2F0aW9uKCR0eXBlLCR0aXRsZSwkYXJlYSwkY291bnRyeV9zbHVnLCRyZWdpb25fc2x1ZywkY2l0eV9zbHVnLCRob29kX3NsdWcpOwoJCX1lbHNlIGlmKCR0eXBlPT0nbmVhci1zZWFyY2gnKXsKCQkJZ2RsbV9nb19zZWFyY2goJHRpdGxlKTsKCQl9ZWxzZSBpZigkdHlwZT09J25lYXInKXsKCQkJZ2RfZ2V0X3VzZXJfcG9zaXRpb24oZ2RsbV9sc19uZWFyX21lKTsKCQl9Cgl9CglzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewoJCV91YSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTsKCQlpc0Nocm9tZSA9IC9jaHJvbWUvLnRlc3QoX3VhKTsKCQlpc1dpbjEwID0gL3dpbmRvd3MgbnQgMTAuMC8udGVzdChfdWEpOwoJCWlmIChpc0Nocm9tZSAmJiBpc1dpbjEwKSB7CgkJCWpRdWVyeSgiLmdkbG0tbG9jYXRpb24tc3VnZ2VzdGlvbnMiKS5oaWRlKCk7CgkJfQoJfSwyMDApOwp9CgpmdW5jdGlvbiBnZGxtX2xzX25lYXJfbWUoJGxhdCwkbG9uKXsKCXdpbmRvdy5sb2NhdGlvbiA9IGdlb2Rpcl9wYXJhbXMubG9jYXRpb25fYmFzZV91cmwrIm5lYXIvbWUvIiskbGF0KyIsIiskbG9uKyIvIjsKfQoKZnVuY3Rpb24gZ2RsbV9sc19uZWFyX2dwcygkbGF0LCRsb24pewoJd2luZG93LmxvY2F0aW9uID0gZ2VvZGlyX3BhcmFtcy5sb2NhdGlvbl9iYXNlX3VybCsibmVhci9ncHMvIiskbGF0KyIsIiskbG9uKyIvIjsKfQoKZnVuY3Rpb24gZ2RsbV9zZWFyY2hfbmVhcl9tZSgkbGF0LCRsb24pewoJZ2RsbV9zZWFyY2hfZmlsbF9sb2NhdGlvbignbmVhcicsJ21lJywiTmVhcjogIitnZW9kaXJfcGFyYW1zLnR4dF9mb3JtX215X2xvY2F0aW9uLCRsYXQsJGxvbikKfQoKZnVuY3Rpb24gZ2RsbV9zZWFyY2hfZmlsbF9sb2NhdGlvbigkdHlwZSwkc2x1ZywkdGl0bGUsJGxhdCwkbG9uKXsKCWlmKCR0eXBlPT0nbmVhcicpewoKCX1lbHNlIGlmKCR0eXBlPT0nbmVhci1zZWFyY2gnKXsKCQkkdHlwZT0nJzsKCX1lbHNlewoJCXZhciB0eHRUeXBlOwoJCWlmICgkdHlwZSA9PSAnY291bnRyeScpIHsKCQkJdHh0VHlwZSA9ICcoQ291bnRyeSknOwoJCX0gZWxzZSBpZiAoJHR5cGUgPT0gJ3JlZ2lvbicpIHsKCQkJdHh0VHlwZSA9ICcoUmVnaW9uKSc7CgkJfSBlbHNlIGlmICgkdHlwZSA9PSAnY2l0eScpIHsKCQkJdHh0VHlwZSA9ICcoQ2l0eSknOwoJCX0gZWxzZSBpZiAoJHR5cGUgPT0gJ25laWdoYm91cmhvb2QnKSB7CgkJCXR4dFR5cGUgPSAnKE5laWdoYm91cmhvb2QpJzsKCQl9IGVsc2UgewoJCQl0eHRUeXBlID0gIigiKyR0eXBlKyIpIjsKCQl9CgkJJHRpdGxlID0gIkluOiAiKyR0aXRsZSsiICIrdHh0VHlwZTsKCX0KCglqUXVlcnkoJy5nZW9kaXItbG9jYXRpb24tc2VhcmNoLXR5cGUnKS52YWwoJHNsdWcpLmF0dHIoJ25hbWUnLCAkdHlwZSk7CglqUXVlcnkoJy5zZ2VvX2xhdCcpLnZhbCgkbGF0KTsKCWpRdWVyeSgnLnNnZW9fbG9uJykudmFsKCRsb24pOwoJalF1ZXJ5KCcuc25lYXInKS52YWwoJHRpdGxlKS50cmlnZ2VyKCdjaGFuZ2UnKTsgLy8gZmlyZSBjaGFuZ2UgZXZlbnQgc28gd2UgY2FuIGNoZWNrIGlmIHdlIG5lZWQgdG8gYWRkIGluLWxvY2F0aW9uIGNsYXNzCn0KCmZ1bmN0aW9uIGdkbG1fZ29fc2VhcmNoKCR0ZXh0KXsKCWlmICh3aW5kb3cuZ2RNYXBzID09PSAnZ29vZ2xlJykgewoJCXZhciBnZW9jb2RlciA9IG5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpOwoJCWdlb2NvZGVyLmdlb2NvZGUoeydhZGRyZXNzJzogJHRleHR9LAoJCQlmdW5jdGlvbiAocmVzdWx0cywgc3RhdHVzKSB7CgkJCQlpZiAoc3RhdHVzID09ICdPSycpIHsKLy8JCQkJCQkJY29uc29sZS5sb2cocmVzdWx0cyk7CgkJCQkJJGxhdCA9IHJlc3VsdHNbMF0uZ2VvbWV0cnkubG9jYXRpb24ubGF0KCk7CgkJCQkJJGxvbiA9IHJlc3VsdHNbMF0uZ2VvbWV0cnkubG9jYXRpb24ubG5nKCk7CgkJCQkJZ2RsbV9sc19uZWFyX2dwcygkbGF0LCRsb24pOwoJCQkJfSBlbHNlIHsKCQkJCQlhbGVydCgiU2VhcmNoIHdhcyBub3Qgc3VjY2Vzc2Z1bCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb24gOiIgKyBzdGF0dXMpOwoJCQkJfQoJCQl9KTsKCX0gZWxzZSBpZiAod2luZG93LmdkTWFwcyA9PT0gJ29zbScpIHsKCQlnZW9jb2RlUG9zaXRpb25PU00oZmFsc2UsICR0ZXh0LCBmYWxzZSwgZmFsc2UsCgkJCWZ1bmN0aW9uKGdlbykgewoJCQkJaWYgKHR5cGVvZiBnZW8gIT09ICd1bmRlZmluZWQnICYmIGdlby5sYXQgJiYgZ2VvLmxvbikgewoJCQkJCWNvbnNvbGUubG9nKHJlc3VsdHMpOwoJCQkJfSBlbHNlIHsKCQkJCQlhbGVydCgiU2VhcmNoIHdhcyBub3Qgc3VjY2Vzc2Z1bCBmb3IgdGhlIHJlcXVlc3RlZCBhZGRyZXNzLiIpOwoJCQkJfQoJCQl9KTsKCX0KfQoKZnVuY3Rpb24gZ2RsbV9sc19zZWFyY2hfbG9jYXRpb24oJHR5cGUsJHRlcm0pewoJalF1ZXJ5LmFqYXgoewoJCXR5cGU6ICJHRVQiLAoJCXVybDogZ2VvZGlyX3BhcmFtcy5hcGlfdXJsKyR0eXBlKyIvP3NlYXJjaD0iKyR0ZXJtLAoJCXN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHsKCQkJY29uc29sZS5sb2coZGF0YSk7CgkJCXJldHVybiBkYXRhOwoJCQkvL2pRdWVyeSgnIycgKyBtYXBfY2FudmFzX3ZhciArICdfbG9hZGluZ19kaXYnKS5oaWRlKCk7CgkJCS8vcGFyc2VfbWFya2VyX2phc29uKGRhdGEsIG1hcF9jYW52YXNfdmFyKTsKCQl9LAoJCWVycm9yOiBmdW5jdGlvbih4aHIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7CgkJCWNvbnNvbGUubG9nKGVycm9yVGhyb3duKTsKCQl9Cgl9KTsKfQoKZnVuY3Rpb24gZ2RsbV9nb19sb2NhdGlvbigkdHlwZSwkdGl0bGUsJGFyZWEsJGNvdW50cnlfc2x1ZywkcmVnaW9uX3NsdWcsJGNpdHlfc2x1ZywkaG9vZF9zbHVnKXsKCS8vIHNhdmUgc2VhcmNoIGhpc3RvcnkgYmVmb3JlIHJlZGlyZWN0CglnZGxtX2xzX3NldF9sb2NhdGlvbl9oaXN0b3J5KCR0eXBlLCR0aXRsZSwkYXJlYSwkY291bnRyeV9zbHVnLCRyZWdpb25fc2x1ZywkY2l0eV9zbHVnLCRob29kX3NsdWcpOwoJd2luZG93LmxvY2F0aW9uID0gZ2RsbV9sc19sb2NhdGlvbl91cmwoJGNvdW50cnlfc2x1ZywkcmVnaW9uX3NsdWcsJGNpdHlfc2x1ZywkaG9vZF9zbHVnKTsKCS8vY29uc29sZS5sb2coIGdkbG1fbHNfbG9jYXRpb25fdXJsKCRjb3VudHJ5X3NsdWcsJHJlZ2lvbl9zbHVnLCRjaXR5X3NsdWcsJGhvb2Rfc2x1ZykpOwp9CgpmdW5jdGlvbiBnZGxtX2xzX2xvY2F0aW9uX3VybCgkY291bnRyeV9zbHVnLCRyZWdpb25fc2x1ZywkY2l0eV9zbHVnLCRob29kX3NsdWcpewoJLy8kdXJsID0gZ2VvZGlyX3BhcmFtcy5sb2NhdGlvbl91cmwuc2xpY2UoMCwgLTEpOyAvLyBnZXQgbG9jYXRpb24gdXJsIHdpdGhvdXQgdGhlIGVuZGluZyBzbGFzaAoJJHVybCA9IGdlb2Rpcl9wYXJhbXMubG9jYXRpb25fYmFzZV91cmw7IC8vIGdldCBsb2NhdGlvbiB1cmwgd2l0aG91dCB0aGUgZW5kaW5nIHNsYXNoCgl2YXIgc2hvd19jb3VudHJ5ID0gMTsKCXZhciBzaG93X3JlZ2lvbiA9IDE7Cgl2YXIgc2hvd19jaXR5ID0gMTsKCXZhciBzaG93X2hvb2QgPSAwOwoKCWlmKHNob3dfY291bnRyeSAmJiAkY291bnRyeV9zbHVnKXsKCQkkdXJsICs9ICIiKyRjb3VudHJ5X3NsdWcrIi8iOwoJfQoKCWlmKHNob3dfcmVnaW9uICYmICRyZWdpb25fc2x1Zyl7CgkJJHVybCArPSAiIiskcmVnaW9uX3NsdWcrIi8iOwoJfQoKCWlmKHNob3dfY2l0eSAmJiAkY2l0eV9zbHVnKXsKCQkkdXJsICs9ICIiKyRjaXR5X3NsdWcrIi8iOwoJfQoKCWlmKHNob3dfaG9vZCAmJiAkaG9vZF9zbHVnKXsKCQkkdXJsICs9ICIiKyRob29kX3NsdWcrIi8iOwoJfQoKCXJldHVybiAkdXJsOwp9CgpmdW5jdGlvbiBnZGxtX2xzX2dldF9sb2NhdGlvbl9oaXN0b3J5KCl7CglpZiAoZ2VvZGlyX2lzX2xvY2Fsc3RvcmFnZSgpID09PSB0cnVlKSB7CgkJcmV0dXJuIGdkbG1fbHNfaGlzdG9yeSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJnZGxtX2xzX2hpc3RvcnkiKTsKCX1lbHNlewoJCXJldHVybiAnJzsKCX0KfQoKZnVuY3Rpb24gZ2RsbV9sc19kZWxfbG9jYXRpb25faGlzdG9yeSgkc2x1Zyl7CglnZGxtbHNfZG9fbm90X2Nsb3NlID0gdHJ1ZTsKCWlmIChnZW9kaXJfaXNfbG9jYWxzdG9yYWdlKCkgPT09IHRydWUpIHsKCQlnZGxtX2xzX2hpc3RvcnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJnZGxtX2xzX2hpc3RvcnkiKSk7CgoJCXZhciBmb3VuZCAgPSAnJzsKCQljb25zb2xlLmxvZyhnZGxtX2xzX2hpc3RvcnkpOwoKCQlqUXVlcnkuZWFjaChnZGxtX2xzX2hpc3RvcnksIGZ1bmN0aW9uKGluZGV4LCB2YWx1ZSkgewoJCQlpZigkc2x1ZyAmJiAkc2x1Zz09dmFsdWUuc2x1Zyl7CgkJCQkvLyBpdHMgYWxyZWFkeSBpbiB0aGUgbGlzdCBzbyBiYWlsLgoJCQkJLy9nZGxtX2xzX2hpc3Rvcnkuc3BsaWNlKGluZGV4LCAxKTsKCQkJCWZvdW5kID0gaW5kZXg7CgkJCX0KCQl9KTsKCgkJaWYoZm91bmQhPT0nJyl7CgkJCWdkbG1fbHNfaGlzdG9yeS5zcGxpY2UoZm91bmQsIDEpOwoJCQkvLyBzdG9yZSB0aGUgdXNlciBzZWxlY3Rpb24KCQkJbG9jYWxTdG9yYWdlLnNldEl0ZW0oImdkbG1fbHNfaGlzdG9yeSIsIEpTT04uc3RyaW5naWZ5KGdkbG1fbHNfaGlzdG9yeSkpOwoJCX0KCX0KCglzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Z2RsbWxzX2RvX25vdF9jbG9zZSA9IGZhbHNlO30sIDIwMCk7Cn0KCmZ1bmN0aW9uIGdkbG1fbHNfc2V0X2xvY2F0aW9uX2hpc3RvcnkoJHR5cGUsJHRpdGxlLCRhcmVhLCRjb3VudHJ5X3NsdWcsJHJlZ2lvbl9zbHVnLCRjaXR5X3NsdWcsJGhvb2Rfc2x1Zyl7CgkvLyBzZXQgYSBzZWFyY2hlZCBsb2NhdGlvbgoJaWYgKGdlb2Rpcl9pc19sb2NhbHN0b3JhZ2UoKSA9PT0gdHJ1ZSkgewoJCXZhciBnZGxtX2xzX2hpc3RvcnkgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZ2RsbV9sc19oaXN0b3J5Iik7CgkJdmFyICRleGlzdHMgPSBmYWxzZTsKCgkJaWYgKCFnZGxtX2xzX2hpc3RvcnkgfHwgZ2RsbV9sc19oaXN0b3J5ID09PSB1bmRlZmluZWQpIHsKCQkJZ2RsbV9sc19oaXN0b3J5ID0gW10KCQl9ZWxzZXsKCQkJZ2RsbV9sc19oaXN0b3J5ID0gSlNPTi5wYXJzZShnZGxtX2xzX2hpc3RvcnkpOwoJCQlqUXVlcnkuZWFjaChnZGxtX2xzX2hpc3RvcnksIGZ1bmN0aW9uKGluZGV4LCB2YWx1ZSkgewoJCQkJY29uc29sZS5sb2codmFsdWUpOwoJCQkJaWYodmFsdWUudHlwZSA9PSAkdHlwZSAmJiB2YWx1ZS50aXRsZT09JHRpdGxlKXsKCQkJCQkvLyBpdHMgYWxyZWFkeSBpbiB0aGUgbGlzdCBzbyBiYWlsLgoJCQkJCSRleGlzdHMgPSB0cnVlOwoJCQkJfQoJCQl9KTsKCQl9CgoJCWlmKCEkZXhpc3RzKXsKCQkJJHNsdWcgPSAkY2l0eV9zbHVnOwoJCQlpZigkdHlwZT09J25laWdoYm91cmhvb2QnKXsKCQkJCSRzbHVnID0gJGhvb2Rfc2x1ZzsKCQkJfWlmKCR0eXBlPT0nY2l0eScpewoJCQkJJHNsdWcgPSAkY2l0eV9zbHVnOwoJCQl9ZWxzZSBpZigkdHlwZT09J3JlZ2lvbicpewoJCQkJJHNsdWcgPSAkcmVnaW9uX3NsdWc7CgkJCX1lbHNlIGlmKCR0eXBlPT0nY291bnRyeScpewoJCQkJJHNsdWcgPSAkY291bnRyeV9zbHVnOwoJCQl9CgoJCQl2YXIgJGxvY2F0aW9uID0gewoJCQkJaGlzdG9yeTp0cnVlLCAvLyBzZXQgaXQgYXMgaGlzdG9yaWNhbAoJCQkJdHlwZTokdHlwZSwKCQkJCXRpdGxlOiR0aXRsZSwKCQkJCWNvdW50cnlfc2x1ZzokY291bnRyeV9zbHVnLAoJCQkJcmVnaW9uX3NsdWc6JHJlZ2lvbl9zbHVnLAoJCQkJY2l0eV9zbHVnOiRjaXR5X3NsdWcsCgkJCQlob29kX3NsdWc6JGhvb2Rfc2x1ZywKCQkJCXNsdWc6JHNsdWcsCgkJCQlhcmVhOiRhcmVhCgkJCX07CgkJCWNvbnNvbGUubG9nKGdkbG1fbHNfaGlzdG9yeSk7CgkJCWNvbnNvbGUubG9nKCRsb2NhdGlvbik7CgkJCWdkbG1fbHNfaGlzdG9yeS51bnNoaWZ0KCRsb2NhdGlvbik7CgkJCS8vZ2RsbV9sc19oaXN0b3J5ID0gJGxvY2F0aW9uOwoKCQkJLy8gb25seSBrZWVwIGxhdGVzdCA1IHNlYXJjaGVzCgkJCWlmKGdkbG1fbHNfaGlzdG9yeS5sZW5ndGggPiA1KXsKCQkJCWdkbG1fbHNfaGlzdG9yeS5wb3AoKTsKCQkJfQoJCX0KCgkJLy8gc3RvcmUgdGhlIHVzZXIgc2VsZWN0aW9uCgkJbG9jYWxTdG9yYWdlLnNldEl0ZW0oImdkbG1fbHNfaGlzdG9yeSIsIEpTT04uc3RyaW5naWZ5KGdkbG1fbHNfaGlzdG9yeSkpOwoJfQp9CgpmdW5jdGlvbiBnZGxtX2xzX2dvb2dsZV9zdWdnZXN0aW9ucygkc2VhcmNoKXsKCS8vIENyZWF0ZSBhIG5ldyBzZXNzaW9uIHRva2VuLgoJaWYoIWdkbG1sc19nb29nbGVfc2Vzc2lvblRva2VuKXsKCQlnZGxtbHNfZ29vZ2xlX3Nlc3Npb25Ub2tlbiA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlU2Vzc2lvblRva2VuKCk7Cgl9CgoJLy8gZGlzcGxheSBmdW5jdGlvbgoJdmFyIGRpc3BsYXlTdWdnZXN0aW9ucyA9IGZ1bmN0aW9uKHByZWRpY3Rpb25zLCBzdGF0dXMpIHsKCQlpZiAoc3RhdHVzICE9IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlU3RhdHVzLk9LKSB7CgkJCXJldHVybjsKCQl9CgoJCWNvbnNvbGUubG9nKHByZWRpY3Rpb25zKTsKCQlodG1sID0gJyc7CgkJcHJlZGljdGlvbnMuZm9yRWFjaChmdW5jdGlvbihwcmVkaWN0aW9uKSB7CgkJCWh0bWwgPSBodG1sICsgZ2RsbV9sc19jcmVhdGVfbGkoJ25lYXItc2VhcmNoJywgcHJlZGljdGlvbik7CgkJfSk7CgkJalF1ZXJ5KGdkbG1sc19zZWxlY3RlZCkucGFyZW50KCkuZmluZCgidWwuZ2RsbWxzLW1vcmUiKS5lbXB0eSgpLmFwcGVuZChodG1sKTsKCQlpZiAoaHRtbCAmJiBnZGxtbHNfaXNfc2VhcmNoKXsKCQkJZ2VvZGlyTE1TaG93RHJvcGRvd24oZ2RsbWxzX3NlbGVjdGVkKTsKCQl9Cgl9OwoKCWlmKCFnZGxtbHNfZ29vZ2xlX3NlcnZpY2UpewoJCWdkbG1sc19nb29nbGVfc2VydmljZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlU2VydmljZSgpOwoJfQoJZ2RsbWxzX2dvb2dsZV9zZXJ2aWNlLmdldFBsYWNlUHJlZGljdGlvbnMoe2lucHV0OiAkc2VhcmNoLCBzZXNzaW9uVG9rZW46IGdkbG1sc19nb29nbGVfc2Vzc2lvblRva2VuLCB0eXBlczogWydnZW9jb2RlJ119LCBkaXNwbGF5U3VnZ2VzdGlvbnMpOwp9CgpmdW5jdGlvbiBnZGxtX2xzX3NsYXNoaXQoc3RyKSB7CglpZiAoc3RyKSB7CgkJc3RyID0gc3RyLnJlcGxhY2UoLycvZywgIlxcJyIpOwoJfQoJcmV0dXJuIHN0cjsKfQoKLyoqCiAqIE9wZW4gdGhlIGxvY2F0aW9uIHN3aXRjaGVyCiAqLwpmdW5jdGlvbiBnZW9kaXJfbG1fc2V0dXBfc3dpdGNoZXJfdHJpZ2dlcigpIHsKCXZhciBub19zaG93ID0gZmFsc2U7CgkvLyBDbGVhciB0aGUgbG9jYXRpb24gYW5kIHJlZGlyZWN0IHRvIHRoZSBiYXNlIGxvY2F0aW9uIHBhZ2UKCWpRdWVyeSgiLmdkbG1scy1tZW51LWljb24iKS5vbigiY2xpY2siLCBmdW5jdGlvbihldmVudCl7CgkJbm9fc2hvdyA9IHRydWU7CgkJZXZlbnQucHJldmVudERlZmF1bHQoKTsKCQkJCXdpbmRvdy5sb2NhdGlvbiA9IGdlb2Rpcl9wYXJhbXMubG9jYXRpb25fYmFzZV91cmw7CgkJCX0pOwoKCS8vIGRldGVjdCB0aGUgbWVudSBpdGVtIGxvY2F0aW9uIHN3aXRjaGVyIGNsaWNrCglqUXVlcnkoJ2FbaHJlZiQ9IiNsb2NhdGlvbi1zd2l0Y2hlciJdJykub24oImNsaWNrIiwgZnVuY3Rpb24oZXZlbnQpewoJCS8vIHByZXZlbnQgdGhlIGhhc2ggYmVpbmcgYWRkZWQgdG8gdGhlIHVybAoJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgkJLy8gb25seSBmaXJlIGlmIHRoZSBjbGljayBpcyBub3QgdGhlIGNsZWFyIGxvY2F0aW9uIGJ1dHRvbi4KCQlpZighbm9fc2hvdyl7CgkJCQkJCWpRdWVyeSgnI2dkbG0tc3dpdGNoZXInKS5tb2RhbCgnc2hvdycpLm9uKCdzaG93bi5icy5tb2RhbCcsIGZ1bmN0aW9uIChlKSB7CgkJCQlqUXVlcnkoJy5tb2RhbCAuZ2VvZGlyLWxvY2F0aW9uLXNlYXJjaCcpLnRyaWdnZXIoImZvY3VzIikudHJpZ2dlcigiY2xpY2siKTsKCQkJCS8vIHNlY29uZCBvcGVuIG1pZ2h0IG5vdCB0cmlnZ2VyIGRyb3Bkb3duIHNvIHdlIGNoZWNrLgoJCQkJc2V0VGltZW91dChmdW5jdGlvbigpewoJCQkJCWlmKCBqUXVlcnkoJy5tb2RhbCAuZ2VvZGlyLWxvY2F0aW9uLXNlYXJjaCcpLmF0dHIoJ2FyaWEtZXhwYW5kZWQnKT09J2ZhbHNlJyApewoJCQkJCQlqUXVlcnkoJy5tb2RhbCAuZ2VvZGlyLWxvY2F0aW9uLXNlYXJjaCcpLmRyb3Bkb3duKCdzaG93Jyk7CgkJCQkJfQoJCQkJfSwgMjAwKTsKCQkJfSk7CgkJCQkJfQoJfSk7Cn0KZnVuY3Rpb24gZ2VvZGlyTE1TaG93RHJvcGRvd24oZWwpIHsKCS8qIFdpbmRvd3MgMTEgRWRnZS9DaHJvbWUgZHJvcGRvd24gZml4ICovCgl2YXIgdUEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7CglpZiAobmF2aWdhdG9yLnBsYXRmb3JtLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignd2luJykgIT09IC0xICYmIHVBLmluZGV4T2YoIndpbmRvd3MgbnQgMTAiKSAhPT0gLTEgJiYgKHVBLm1hdGNoKC9jaHJvbWUvaSkgfHwgdUEubWF0Y2goL2VkZ2UvaSkpKSB7CgkJalF1ZXJ5KGVsKS5kcm9wZG93bignc2hvdycpOwoJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsKCQkJalF1ZXJ5KCcuZ2Qtc2VhcmNoLWZpZWxkLW5lYXIgLmdkbG0tbG9jYXRpb24tc3VnZ2VzdGlvbnMnKS5jc3MoJ2Rpc3BsYXknLCIiKS5zaG93KCk7CgkJfSwgMzApOwoJfSBlbHNlIGlmIChqUXVlcnkoZWwpLmF0dHIoJ2FyaWEtZXhwYW5kZWQnKT09J2ZhbHNlJyl7CgkJalF1ZXJ5KGVsKS5kcm9wZG93bignc2hvdycpOwoJfQp9CmpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7Z2VvZGlyX2xtX3NldHVwX3N3aXRjaGVyX3RyaWdnZXIoKX0pOwo=
6 ms
javascript;base64,CgkJCWlmICghd2luZG93LmdkQ2F0ZWdvcmllc0pzKSB7CgkJCQlkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oZXZlbnQpIHsKCQkJCQlqUXVlcnkoJy5nZW9kaXItY2F0LWxpc3QtdGF4Jykub24oImNoYW5nZSIsIGZ1bmN0aW9uKGUpIHsKCQkJCQkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJCQkJCQl2YXIgJHdpZGdldEJveCA9IGpRdWVyeSh0aGlzKS5jbG9zZXN0KCcuZ2VvZGlyLWNhdGVnb3JpZXMtY29udGFpbmVyJyk7CgkJCQkJCXZhciAkY29udGFpbmVyID0galF1ZXJ5KCcuZ2QtY3B0Y2F0LXJvd3MnLCAkd2lkZ2V0Qm94KTsKCQkJCQkJJGNvbnRhaW5lci5hZGRDbGFzcygnZ2QtbG9hZGluZycpOwoJCQkJCQkkY29udGFpbmVyLmh0bWwoJzxpIGNsYXNzPSJmYXMgZmEtY29nIGZhLXNwaW4iIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+Jyk7CgkJCQkJCXZhciBkYXRhID0gewoJCQkJCQkJJ2FjdGlvbic6ICdnZW9kaXJfY3B0X2NhdGVnb3JpZXMnLAoJCQkJCQkJJ3NlY3VyaXR5JzogZ2VvZGlyX3BhcmFtcy5iYXNpY19ub25jZSwKCQkJCQkJCSdhamF4X2NwdCc6IGpRdWVyeSh0aGlzKS52YWwoKQoJCQkJCQl9OwoJCQkJCQlqUXVlcnkoJy5nZC13Z3QtcGFyYW1zJywgJHdpZGdldEJveCkuZmluZCgnaW5wdXQnKS5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJCQkJaWYgKGpRdWVyeSh0aGlzKS5hdHRyKCduYW1lJykpIHsKCQkJCQkJCQlkYXRhW2pRdWVyeSh0aGlzKS5hdHRyKCduYW1lJyldID0galF1ZXJ5KHRoaXMpLnZhbCgpOwoJCQkJCQkJfQoJCQkJCQl9KTsKCQkJCQkJalF1ZXJ5LnBvc3QoZ2VvZGlyX3BhcmFtcy5hamF4X3VybCwgZGF0YSwgZnVuY3Rpb24ocmVzcG9uc2UpIHsKCQkJCQkJCSRjb250YWluZXIuaHRtbChyZXNwb25zZSk7CgkJCQkJCQkkY29udGFpbmVyLnJlbW92ZUNsYXNzKCdnZC1sb2FkaW5nJyk7CgkJCQkJCX0pOwoJCQkJCX0pCgkJCQl9KTsKCQkJCXdpbmRvdy5nZENhdGVnb3JpZXNKcyA9IHRydWU7CgkJCX0KCQk=
6 ms
css
33 ms
autoptimize_single_edc56fc35ef9730a59ae79b7ee2d1e45.php
137 ms
autoptimize_single_b8aa98a1196e2e8a67c17347d1451cee.php
145 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwpmdW5jdGlvbiBnZW9kaXJJbml0R29vZ2xlTWFwKCl7d2luZG93Lmdlb2Rpckdvb2dsZU1hcHNDYWxsYmFjaz10cnVlO3RyeXtqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoImdlb2Rpci5nb29nbGVNYXBzQ2FsbGJhY2siKX1jYXRjaChlcnIpe319Ci8qIF1dPiAqLwo=
5 ms
js
102 ms
oms.min.js
2749 ms
goMap.min.js
2476 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwp2YXIgV1BJbnYgPSB7ImFqYXhfdXJsIjoiaHR0cHM6XC9cL3d3dy5saXdpbmUuY29tXC93cC1hZG1pblwvYWRtaW4tYWpheC5waHAiLCJ0aG91c2FuZHMiOiIsIiwiZGVjaW1hbHMiOiIuIiwibm9uY2UiOiJmOWU2YzMwMzJmIiwidHh0Q29tcGxldGUiOiJDb250aW51ZSIsIlVzZVRheGVzIjoiIiwiZm9ybU5vbmNlIjoiZTY3NTk1NzA1ZSIsImxvYWRpbmciOiJMb2FkaW5nLi4uIiwiY29ubmVjdGlvbkVycm9yIjoiQ291bGQgbm90IGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlci4iLCJyZWNhcHRjaGFTZXR0aW5ncyI6eyJlbmFibGVkIjpmYWxzZSwidmVyc2lvbiI6InYyIn19OwovKiBdXT4gKi8K
4 ms
autoptimize_single_bc1128d06a812d48438182f9a2b8644e.php
329 ms
autoptimize_single_d71b75b2327258b1d01d50590c1f67ca.php
329 ms
cluster_script.min.js
3245 ms
e-202405.js
38 ms
jquery.uniform.min.js
3698 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwp2YXIgYmxvb21TZXR0aW5ncyA9IHsiYWpheHVybCI6Imh0dHBzOlwvXC93d3cubGl3aW5lLmNvbVwvd3AtYWRtaW5cL2FkbWluLWFqYXgucGhwIiwicGFnZXVybCI6Imh0dHBzOlwvXC93d3cubGl3aW5lLmNvbVwvIiwic3RhdHNfbm9uY2UiOiIzMTM1NjRkMTYyIiwic3Vic2NyaWJlX25vbmNlIjoiNDBlM2UzNDUzMCIsImlzX3VzZXJfbG9nZ2VkX2luIjoibm90X2xvZ2dlZCJ9OwovKiBdXT4gKi8K
2 ms
autoptimize_single_7051c071eff3b0075c38aaded01dc4b1.php
3740 ms
idle-timer.min.js
3737 ms
javascript;base64,DQogICAgICAgICAgICAgICAgalF1ZXJ5KCdkb2N1bWVudCcpLnJlYWR5KGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gew0KICAgICAgICAgICAgICAgICAgICAgICAgX2FqYXhfbm9uY2U6ICcyOTlkNGYzZDkzJywNCiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ2Fkdl90cmFja19pbXByZXNzaW9ucycsDQogICAgICAgICAgICAgICAgICAgICAgICBhZHMgOiBbXSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVzOiBbXQ0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCAnLmFkdi1zaW5nbGUnICkuZWFjaChmdW5jdGlvbigpew0KICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hZHMucHVzaCggalF1ZXJ5KHRoaXMpLmRhdGEoJ2lkJykgKQ0KICAgICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgICAgICBqUXVlcnkoICcuYWR2LXNpbmdsZS16b25lJyApLmVhY2goZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuem9uZXMucHVzaCggalF1ZXJ5KHRoaXMpLmRhdGEoJ2lkJykgKQ0KICAgICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgICAgICBqUXVlcnkucG9zdCggJ2h0dHBzOi8vd3d3Lmxpd2luZS5jb20vd3AtYWRtaW4vYWRtaW4tYWpheC5waHAnLCBkYXRhICk7DQoNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIA==
2 ms
logo.png
3538 ms
browser_icon.png
3563 ms
S6uyw4BMUTPHjx4wWw.ttf
137 ms
S6u9w4BMUTPHh6UVSwiPHA.ttf
138 ms
show_ads_impl.js
156 ms
zrt_lookup.html
63 ms
fa-solid-900.ttf
136 ms
fa-regular-400.ttf
135 ms
fa-brands-400.ttf
187 ms
memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsjZ0B4gaVc.ttf
6 ms
memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsg-1x4gaVc.ttf
16 ms
leaflet.css
3621 ms
leaflet-routing-machine.css
3697 ms
leaflet.min.js
4136 ms
osm.geocode.min.js
4012 ms
leaflet-routing-machine.min.js
4433 ms
oms-leaflet.min.js
4556 ms
ads
416 ms
1.jpg
77 ms
liwine.com accessibility score
Contrast
These are opportunities to improve the legibility of your content.
Impact
Issue
Background and foreground colors do not have a sufficient contrast ratio.
Names and labels
These are opportunities to improve the semantics of the controls in your application. This may enhance the experience for users of assistive technology, like a screen reader.
Impact
Issue
<frame> or <iframe> elements do not have a title
Links do not have a discernible name
liwine.com best practices score
Trust and Safety
Impact
Issue
Does not use HTTPS
Ensure CSP is effective against XSS attacks
User Experience
Impact
Issue
Serves images with low resolution
General
Impact
Issue
Detected JavaScript libraries
Browser errors were logged to the console
Page has valid source maps
liwine.com SEO score
Mobile Friendly
Make sure your pages are mobile friendly so users don’t have to pinch or zoom in order to read the content pages. [Learn more](https://developers.google.com/search/mobile-sites/).
Impact
Issue
Document uses legible font sizes
Tap targets are not sized appropriately
EN
EN
UTF-8
Language claimed in HTML meta tag should match the language actually used on the web page. Otherwise Liwine.com can be misinterpreted by Google and other search engines. Our service has detected that English is used on the page, and it matches the claimed language. Our system also found out that Liwine.com main page’s claimed encoding is utf-8. Use of this encoding format is the best practice as the main page visitors from all over the world won’t have any issues with symbol transcription.
liwine.com
Open Graph description is not detected on the main page of Li Wine. Lack of Open Graph description can be counter-productive for their social media presence, as such a description allows converting a website homepage (or other pages) into good-looking, rich and well-structured posts, when it is being shared on Facebook and other social media. For example, adding the following code snippet into HTML <head> tag will help to represent this web page correctly in social networks: