3.4 sec in total
15 ms
2.8 sec
621 ms
Welcome to outpatientjourneypure.com homepage info - get ready to check Outpatientjourneypure best content right away, or after learning these important things about outpatientjourneypure.com
The best inpatient rehabs & outpatient clinics in Tennessee, Kentucky & Florida. All in-network with insurances. Hundreds of 5-star reviews.
Visit outpatientjourneypure.comWe analyzed Outpatientjourneypure.com page load time and found that the first response time was 15 ms and then it took 3.4 sec to load all DOM resources and completely render a web page. This is a poor result, as 60% of websites can load faster.
outpatientjourneypure.com performance score
name
value
score
weighting
Value3.0 s
49/100
10%
Value14.0 s
0/100
25%
Value10.8 s
6/100
10%
Value6,650 ms
0/100
30%
Value0
100/100
15%
Value25.2 s
0/100
10%
15 ms
1595 ms
149 ms
58 ms
58 ms
Our browser made a total of 82 requests to load all elements on the main page. We found that 1% of them (1 request) were addressed to the original Outpatientjourneypure.com, 38% (31 requests) were made to Journeypure.com and 20% (16 requests) were made to . The less responsive or slowest element that took the longest time to load (1.6 sec) relates to the external source Journeypure.com.
Page size can be reduced by 421.0 kB (31%)
1.4 MB
947.5 kB
In fact, the total size of Outpatientjourneypure.com main page is 1.4 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. Only a small number of websites need less resources to load. Javascripts take 700.9 kB which makes up the majority of the site volume.
Potential reduce by 137.5 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 137.5 kB or 81% of the original size.
Potential reduce by 55.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, Outpatientjourneypure needs image optimization as it can save up to 55.5 kB or 17% of the original volume. The most popular and efficient tools for JPEG and PNG image optimization are Jpegoptim and PNG Crush.
Potential reduce by 204.3 kB
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. It is highly recommended that all JavaScript files should be compressed and minified as it can save up to 204.3 kB or 29% of the original size.
Potential reduce by 23.7 kB
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. Outpatientjourneypure.com needs all CSS files to be minified and compressed as it can save up to 23.7 kB or 14% of the original size.
Number of requests can be reduced by 46 (87%)
53
7
The browser has sent 53 CSS, Javascripts, AJAX and image requests in order to completely render the main page of Outpatientjourneypure. We recommend that multiple CSS and JavaScript files should be merged into one by each type, as it can help reduce assets requests from 35 to 1 for JavaScripts and from 13 to 1 for CSS and as a result speed up the page load time.
outpatientjourneypure.com
15 ms
1595 ms
js
149 ms
javascript;base64,CiAgd2luZG93LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW107CiAgZnVuY3Rpb24gZ3RhZygpe2RhdGFMYXllci5wdXNoKGFyZ3VtZW50cyk7fQogIGd0YWcoJ2pzJywgbmV3IERhdGUoKSk7CiAgZ3RhZygnY29uZmlnJywgJ1VBLTU3NDgzMTAyLTEnKTsKCg==
58 ms
javascript;base64,KGZ1bmN0aW9uKHcsZCxzLGwsaSl7d1tsXT13W2xdfHxbXTt3W2xdLnB1c2goeydndG0uc3RhcnQnOgpuZXcgRGF0ZSgpLmdldFRpbWUoKSxldmVudDonZ3RtLmpzJ30pO3ZhciBmPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUocylbMF0sCmo9ZC5jcmVhdGVFbGVtZW50KHMpLGRsPWwhPSdkYXRhTGF5ZXInPycmbD0nK2w6Jyc7ai5hc3luYz10cnVlO2ouc3JjPQonaHR0cHM6Ly93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vZ3RtLmpzP2lkPScraStkbDtmLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGosZik7Cn0pKHdpbmRvdyxkb2N1bWVudCwnc2NyaXB0JywnZGF0YUxheWVyJywnR1RNLTVEWE43VksnKTs=
58 ms
4c5c35416b9be052b291f247cf1e4259.js
413 ms
stat.js
99 ms
style.min.css
68 ms
style.css
127 ms
media-queries.css
143 ms
css2
130 ms
font-awesome.min.css
129 ms
slick-theme.min.css
108 ms
slick.min.css
128 ms
jquery.min.js
181 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwp2YXIgYWpheF9vYmogPSB7ImNjX25vbmNlIjoiOTIzMWQ5MGY2YiIsImFqYXhfdXJsIjoiaHR0cHM6XC9cL2pvdXJuZXlwdXJlLmNvbVwvd3AtYWRtaW5cL2FkbWluLWFqYXgucGhwIiwiYWpheF9hY3Rpb24iOiJ2YWxpZGF0ZV9jbGlja2NlYXNlX3Jlc3BvbnNlIn07Ci8qIF1dPiAqLwo=
48 ms
autoptimize_single_9a3225f7900450e4931fa234505dba0e.js
147 ms
popper.min.js
157 ms
bootstrap.min.js
190 ms
autoptimize_single_e10232252fa5458cb38f752f18f15f4e.js
157 ms
slick.min.js
138 ms
jquery.scrollme.min.js
175 ms
TweenMax.min.js
149 ms
ScrollMagic.min.js
149 ms
animation.gsap.min.js
144 ms
t.js
117 ms
js
182 ms
javascript;base64,CiAgICAKICAgIHZhciBnbWFya2VycyA9IFtdOwoKICAgIC8vIEluaXRpYWxpemUgYW5kIGFkZCB0aGUgbWFwCiAgICBmdW5jdGlvbiBpbml0TWFwKCkgewoKICAgICAgICB2YXIgem9vbSA9IDU7CiAgICAgICAgdmFyIGNlbnRlckxvbmcgPSAtODQuMTYzNDAwOwogICAgICAgIHZhciBjZW50ZXJMYXQgPSAzNC4wODIzMTA7CiAgICAgICAgaWNvblNpemUgPSBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSgyNywgNDApOwoKICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA8IDk5MSAmJiBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoID4gNzY3KSB7CiAgICAgICAgICAgIHpvb20gPSAxMDsKICAgICAgICB9CgogICAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIDw9IDc2NykgewogICAgICAgICAgICB6b29tID0gNTsKICAgICAgICAgICAgLy8gaWNvblNpemUgPSBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSgzMywgNDIpOwogICAgICAgICAgICBjZW50ZXJMb25nID0gLTg0LjE2MzQwMDsKICAgICAgICB9CgogICAgICAgIHZhciBtYXBPcHRpb25zID0gewogICAgICAgICAgICB6b29tOiB6b29tLAogICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjQ0NDJywKICAgICAgICAgICAgb3ZlcnZpZXdNYXBDb250cm9sOjAsCiAgICAgICAgICAgIHBhbkNvbnRyb2w6MCwKICAgICAgICAgICAgc2NhbGVDb250cm9sOjAsCiAgICAgICAgICAgIG1hcFR5cGVDb250cm9sOjAsCiAgICAgICAgICAgIHN0cmVldFZpZXdDb250cm9sOjAsCiAgICAgICAgICAgIHNjcm9sbHdoZWVsOmZhbHNlLAogICAgICAgICAgICB6b29tQ29udHJvbDoxLAogICAgICAgICAgICB6b29tQ29udHJvbE9wdGlvbnM6IHsKICAgICAgICAgICAgICAgIHN0eWxlOiBnb29nbGUubWFwcy5ab29tQ29udHJvbFN0eWxlLkxBUkdFLAogICAgICAgICAgICAgICAgcG9zaXRpb246IGdvb2dsZS5tYXBzLkNvbnRyb2xQb3NpdGlvbi5MRUZUX1RPUAogICAgICAgICAgICB9LAogICAgICAgICAgICAvLyBtYXBUeXBlSWQ6IGdvb2dsZS5tYXBzLk1hcFR5cGVJZC5URVJSQUlOLAogICAgICAgICAgICBjZW50ZXI6IG5ldyBnb29nbGUubWFwcy5MYXRMbmcoY2VudGVyTGF0LCBjZW50ZXJMb25nKSwgCiAgICAgICAgICAgIC8vIHN0eWxlczogW3siZWxlbWVudFR5cGUiOiAiZ2VvbWV0cnkiLCAic3R5bGVycyI6IFt7ImNvbG9yIjogIiNmNWY1ZjUifSBdIH0sIHsiZWxlbWVudFR5cGUiOiAibGFiZWxzLmljb24iLCAic3R5bGVycyI6IFt7InZpc2liaWxpdHkiOiAib2ZmIn0gXSB9LCB7ImVsZW1lbnRUeXBlIjogImxhYmVscy50ZXh0LmZpbGwiLCAic3R5bGVycyI6IFt7ImNvbG9yIjogIiM2MTYxNjEifSBdIH0sIHsiZWxlbWVudFR5cGUiOiAibGFiZWxzLnRleHQuc3Ryb2tlIiwgInN0eWxlcnMiOiBbeyJjb2xvciI6ICIjZjVmNWY1In0gXSB9LCB7ImZlYXR1cmVUeXBlIjogImFkbWluaXN0cmF0aXZlLmxhbmRfcGFyY2VsIiwgImVsZW1lbnRUeXBlIjogImxhYmVscy50ZXh0LmZpbGwiLCAic3R5bGVycyI6IFt7ImNvbG9yIjogIiNiZGJkYmQifSBdIH0sIHsiZmVhdHVyZVR5cGUiOiAicG9pIiwgImVsZW1lbnRUeXBlIjogImdlb21ldHJ5IiwgInN0eWxlcnMiOiBbeyJjb2xvciI6ICIjZWVlZWVlIn0gXSB9LCB7ImZlYXR1cmVUeXBlIjogInBvaSIsICJlbGVtZW50VHlwZSI6ICJsYWJlbHMudGV4dC5maWxsIiwgInN0eWxlcnMiOiBbeyJjb2xvciI6ICIjNzU3NTc1In0gXSB9LCB7ImZlYXR1cmVUeXBlIjogInBvaS5wYXJrIiwgImVsZW1lbnRUeXBlIjogImdlb21ldHJ5IiwgInN0eWxlcnMiOiBbeyJjb2xvciI6ICIjZTVlNWU1In0gXSB9LCB7ImZlYXR1cmVUeXBlIjogInBvaS5wYXJrIiwgImVsZW1lbnRUeXBlIjogImxhYmVscy50ZXh0LmZpbGwiLCAic3R5bGVycyI6IFt7ImNvbG9yIjogIiM5ZTllOWUifSBdIH0sIHsiZmVhdHVyZVR5cGUiOiAicm9hZCIsICJlbGVtZW50VHlwZSI6ICJnZW9tZXRyeSIsICJzdHlsZXJzIjogW3siY29sb3IiOiAiI2ZmZmZmZiJ9IF0gfSwgeyJmZWF0dXJlVHlwZSI6ICJyb2FkLmFydGVyaWFsIiwgImVsZW1lbnRUeXBlIjogImxhYmVscy50ZXh0LmZpbGwiLCAic3R5bGVycyI6IFt7ImNvbG9yIjogIiM3NTc1NzUifSBdIH0sIHsiZmVhdHVyZVR5cGUiOiAicm9hZC5oaWdod2F5IiwgImVsZW1lbnRUeXBlIjogImdlb21ldHJ5IiwgInN0eWxlcnMiOiBbeyJjb2xvciI6ICIjZGFkYWRhIn0gXSB9LCB7ImZlYXR1cmVUeXBlIjogInJvYWQuaGlnaHdheSIsICJlbGVtZW50VHlwZSI6ICJsYWJlbHMudGV4dC5maWxsIiwgInN0eWxlcnMiOiBbeyJjb2xvciI6ICIjNjE2MTYxIn0gXSB9LCB7ImZlYXR1cmVUeXBlIjogInJvYWQubG9jYWwiLCAiZWxlbWVudFR5cGUiOiAibGFiZWxzLnRleHQuZmlsbCIsICJzdHlsZXJzIjogW3siY29sb3IiOiAiIzllOWU5ZSJ9IF0gfSwgeyJmZWF0dXJlVHlwZSI6ICJ0cmFuc2l0LmxpbmUiLCAiZWxlbWVudFR5cGUiOiAiZ2VvbWV0cnkiLCAic3R5bGVycyI6IFt7ImNvbG9yIjogIiNlNWU1ZTUifSBdIH0sIHsiZmVhdHVyZVR5cGUiOiAidHJhbnNpdC5zdGF0aW9uIiwgImVsZW1lbnRUeXBlIjogImdlb21ldHJ5IiwgInN0eWxlcnMiOiBbeyJjb2xvciI6ICIjZWVlZWVlIn0gXSB9LCB7ImZlYXR1cmVUeXBlIjogIndhdGVyIiwgImVsZW1lbnRUeXBlIjogImdlb21ldHJ5IiwgInN0eWxlcnMiOiBbeyJjb2xvciI6ICIjYzljOWM5In0gXSB9LCB7ImZlYXR1cmVUeXBlIjogIndhdGVyIiwgImVsZW1lbnRUeXBlIjogImxhYmVscy50ZXh0LmZpbGwiLCAic3R5bGVycyI6IFt7ImNvbG9yIjogIiM5ZTllOWUifSBdIH0gXSAgICAgICAgICAgIAogICAgICAgIH07CiAgICAgIAogICAgICAKICAgICAgLy8gVGhlIG1hcAogICAgICBjb25zdCBtYXAgPSBuZXcgZ29vZ2xlLm1hcHMuTWFwKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYXAiKSwgbWFwT3B0aW9ucyk7CiAgICAgICAgCiAgICAgIAoKICAgIHZhciBwcmV2X2luZm93aW5kb3cgPWZhbHNlOyAKCiAgICAKCiAgICAgIC8vIFRoZSBtYXJrZXIKICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXNpZGVudGlhbCk7CgogICAgICAgIHZhciBpY29uID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAiaHR0cHM6Ly9qb3VybmV5cHVyZS5jb20vd3AtY29udGVudC90aGVtZXMvSm91cm5leVB1cmUyMi9pbWcvbWFwLXBpbi1ncmVlbi5wbmciLCAvLyB1cmwgICAgCiAgICAgICAgICAgICAgICBhbmNob3I6IG5ldyBnb29nbGUubWFwcy5Qb2ludCgxNSwzMyksIC8vIGFuY2hvciAgICAgIAogICAgICAgICAgICAgICAgc2NhbGVkU2l6ZTogaWNvblNpemUsIC8vIHNjYWxlZCBzaXplICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBvcmlnaW46IG5ldyBnb29nbGUubWFwcy5Qb2ludCgwLDApLCAvLyBvcmlnaW4KICAgICAgICB9OwoKCiAgICAgICAgdmFyIGNvbnRlbnRTdHJpbmcwID0KICAgICAgICAnPGRpdiBjbGFzcz0idGV4dC1jZW50ZXIiIGlkPSJtYXAtd2luZG93Ij4nICsgICAgCiAgICAgICAgJzxoMj5Kb3VybmV5UHVyZSBBbGJhbnk8L2gyPicgKwogICAgICAgICc8ZGl2PjczMSBCdXJrZXN2aWxsZSBSZDsgQWxiYW55LCBLWSA0MjYwMjwvZGl2PicgKyAgICAgICAgCiAgICAgICAgJzxkaXY+PGEgY2xhc3M9ImJ0biBidG4tb3V0bGluZS1kYXJrIiBocmVmPSIiIHRhcmdldD0iX2JsYW5rIj5MZWFybiBNb3JlPC9kaXY+JyArICAgICAKICAgICAgICAnPGRpdj48YSBocmVmPSI3MzEgQnVya2VzdmlsbGUgUmQ7IEFsYmFueSwgS1kgNDI2MDIiIHRhcmdldD0iX2JsYW5rIj5HZXQgRGlyZWN0aW9uczwvZGl2PicgKyAgICAgCiAgICAgICAgJzwvZGl2Pic7CgogICAgICAgIHZhciBpbmZvd2luZG93MCA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KHsKICAgICAgICAgICAgY29udGVudDogY29udGVudFN0cmluZzAsCiAgICAgICAgfSk7CgoKICAgICAgICB2YXIgbWFya2VyMCA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoewogICAgICAgICAgICBwb3NpdGlvbjoge2xhdDogMzYuNjk4NDg2NyAsIGxuZzotODUuMTQ3MzcyMX0sCiAgICAgICAgICAgIG1hcDogbWFwLCAgICAgICAgICAKICAgICAgICAgICAgaWNvbjogaWNvbiwKICAgICAgICAgICAgYW5pbWF0aW9uOiBnb29nbGUubWFwcy5BbmltYXRpb24uRFJPUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnaW5wJywKICAgICAgICAgICAgICAgICAgICAgfSk7CgoKCiAgICAgICAgZ21hcmtlcnMucHVzaChtYXJrZXIwKTsKCgogICAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIDw9IDc2NykgewoKICAgICAgICAgICAgbWFya2VyMC5hZGRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgICAgICBpZiggcHJldl9pbmZvd2luZG93ICkgCiAgICAgICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93LmNsb3NlKCk7CgogICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93ID0gaW5mb3dpbmRvdzA7CiAgICAgICAgICAgICAgICBpbmZvd2luZG93MC5vcGVuKG1hcCwgbWFya2VyMCk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICB9IGVsc2UgewogICAgICAgIAogICAgICAgICAgICBtYXJrZXIwLmFkZExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgaWYoIHByZXZfaW5mb3dpbmRvdyApIAogICAgICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdy5jbG9zZSgpOwoKICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdyA9IGluZm93aW5kb3cwOwogICAgICAgICAgICAgICAgaW5mb3dpbmRvdzAub3BlbihtYXAsIG1hcmtlcjApOwogICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgCgogICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXNpZGVudGlhbCk7CgogICAgICAgIHZhciBpY29uID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAiaHR0cHM6Ly9qb3VybmV5cHVyZS5jb20vd3AtY29udGVudC90aGVtZXMvSm91cm5leVB1cmUyMi9pbWcvbWFwLXBpbi1ncmVlbi5wbmciLCAvLyB1cmwgICAgCiAgICAgICAgICAgICAgICBhbmNob3I6IG5ldyBnb29nbGUubWFwcy5Qb2ludCgxNSwzMyksIC8vIGFuY2hvciAgICAgIAogICAgICAgICAgICAgICAgc2NhbGVkU2l6ZTogaWNvblNpemUsIC8vIHNjYWxlZCBzaXplICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBvcmlnaW46IG5ldyBnb29nbGUubWFwcy5Qb2ludCgwLDApLCAvLyBvcmlnaW4KICAgICAgICB9OwoKCiAgICAgICAgdmFyIGNvbnRlbnRTdHJpbmcxID0KICAgICAgICAnPGRpdiBjbGFzcz0idGV4dC1jZW50ZXIiIGlkPSJtYXAtd2luZG93Ij4nICsgICAgCiAgICAgICAgJzxoMj5Kb3VybmV5UHVyZSBBdCBUaGUgUml2ZXI8L2gyPicgKwogICAgICAgICc8ZGl2PjUwODAgRmxvcmVuY2UgUm9hZCwgTXVyZnJlZXNib3JvLCBUTiAzNzEyOTwvZGl2PicgKyAgICAgICAgCiAgICAgICAgJzxkaXY+PGEgY2xhc3M9ImJ0biBidG4tb3V0bGluZS1kYXJrIiBocmVmPSJodHRwczovL2pvdXJuZXlwdXJlLmNvbS9sb2NhdGlvbnMvdGVubmVzc2VlLyIgdGFyZ2V0PSJfYmxhbmsiPkxlYXJuIE1vcmU8L2Rpdj4nICsgICAgIAogICAgICAgICc8ZGl2PjxhIGhyZWY9IjUwODAgRmxvcmVuY2UgUm9hZCwgTXVyZnJlZXNib3JvLCBUTiAzNzEyOSIgdGFyZ2V0PSJfYmxhbmsiPkdldCBEaXJlY3Rpb25zPC9kaXY+JyArICAgICAKICAgICAgICAnPC9kaXY+JzsKCiAgICAgICAgdmFyIGluZm93aW5kb3cxID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coewogICAgICAgICAgICBjb250ZW50OiBjb250ZW50U3RyaW5nMSwKICAgICAgICB9KTsKCgogICAgICAgIHZhciBtYXJrZXIxID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7CiAgICAgICAgICAgIHBvc2l0aW9uOiB7bGF0OiAzNS45Mjc0NTIgLCBsbmc6LTg2LjQ2NzQxMDN9LAogICAgICAgICAgICBtYXA6IG1hcCwgICAgICAgICAgCiAgICAgICAgICAgIGljb246IGljb24sCiAgICAgICAgICAgIGFuaW1hdGlvbjogZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkRST1AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeTogJ2lucCcsCiAgICAgICAgICAgICAgICAgICAgIH0pOwoKCgogICAgICAgIGdtYXJrZXJzLnB1c2gobWFya2VyMSk7CgoKICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA8PSA3NjcpIHsKCiAgICAgICAgICAgIG1hcmtlcjEuYWRkTGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICAgICAgaWYoIHByZXZfaW5mb3dpbmRvdyApIAogICAgICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdy5jbG9zZSgpOwoKICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdyA9IGluZm93aW5kb3cxOwogICAgICAgICAgICAgICAgaW5mb3dpbmRvdzEub3BlbihtYXAsIG1hcmtlcjEpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAKICAgICAgICAgICAgbWFya2VyMS5hZGRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgIGlmKCBwcmV2X2luZm93aW5kb3cgKSAKICAgICAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cuY2xvc2UoKTsKCiAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cgPSBpbmZvd2luZG93MTsKICAgICAgICAgICAgICAgIGluZm93aW5kb3cxLm9wZW4obWFwLCBtYXJrZXIxKTsKICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIAoKICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocmVzaWRlbnRpYWwpOwoKICAgICAgICB2YXIgaWNvbiA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogImh0dHBzOi8vam91cm5leXB1cmUuY29tL3dwLWNvbnRlbnQvdGhlbWVzL0pvdXJuZXlQdXJlMjIvaW1nL21hcC1waW4tZ3JlZW4ucG5nIiwgLy8gdXJsICAgIAogICAgICAgICAgICAgICAgYW5jaG9yOiBuZXcgZ29vZ2xlLm1hcHMuUG9pbnQoMTUsMzMpLCAvLyBhbmNob3IgICAgICAKICAgICAgICAgICAgICAgIHNjYWxlZFNpemU6IGljb25TaXplLCAvLyBzY2FsZWQgc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgb3JpZ2luOiBuZXcgZ29vZ2xlLm1hcHMuUG9pbnQoMCwwKSwgLy8gb3JpZ2luCiAgICAgICAgfTsKCgogICAgICAgIHZhciBjb250ZW50U3RyaW5nMiA9CiAgICAgICAgJzxkaXYgY2xhc3M9InRleHQtY2VudGVyIiBpZD0ibWFwLXdpbmRvdyI+JyArICAgIAogICAgICAgICc8aDI+Sm91cm5leVB1cmUgRW1lcmFsZCBDb2FzdDwvaDI+JyArCiAgICAgICAgJzxkaXY+MjIyMTkgUGFuYW1hIENpdHkgQmVhY2ggUGt3eSBQYW5hbWEgQ2l0eSBCZWFjaCwgRkwgMzI0MTM8L2Rpdj4nICsgICAgICAgIAogICAgICAgICc8ZGl2PjxhIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtZGFyayIgaHJlZj0iaHR0cHM6Ly9qb3VybmV5cHVyZS5jb20vbG9jYXRpb25zL2Zsb3JpZGEvIiB0YXJnZXQ9Il9ibGFuayI+TGVhcm4gTW9yZTwvZGl2PicgKyAgICAgCiAgICAgICAgJzxkaXY+PGEgaHJlZj0iMjIyMTkgUGFuYW1hIENpdHkgQmVhY2ggUGt3eSBQYW5hbWEgQ2l0eSBCZWFjaCwgRkwgMzI0MTMiIHRhcmdldD0iX2JsYW5rIj5HZXQgRGlyZWN0aW9uczwvZGl2PicgKyAgICAgCiAgICAgICAgJzwvZGl2Pic7CgogICAgICAgIHZhciBpbmZvd2luZG93MiA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KHsKICAgICAgICAgICAgY29udGVudDogY29udGVudFN0cmluZzIsCiAgICAgICAgfSk7CgoKICAgICAgICB2YXIgbWFya2VyMiA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoewogICAgICAgICAgICBwb3NpdGlvbjoge2xhdDogMzAuMjYyMDU1MSAsIGxuZzotODUuOTYzMTQzMX0sCiAgICAgICAgICAgIG1hcDogbWFwLCAgICAgICAgICAKICAgICAgICAgICAgaWNvbjogaWNvbiwKICAgICAgICAgICAgYW5pbWF0aW9uOiBnb29nbGUubWFwcy5BbmltYXRpb24uRFJPUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnaW5wJywKICAgICAgICAgICAgICAgICAgICAgfSk7CgoKCiAgICAgICAgZ21hcmtlcnMucHVzaChtYXJrZXIyKTsKCgogICAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIDw9IDc2NykgewoKICAgICAgICAgICAgbWFya2VyMi5hZGRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgICAgICBpZiggcHJldl9pbmZvd2luZG93ICkgCiAgICAgICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93LmNsb3NlKCk7CgogICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93ID0gaW5mb3dpbmRvdzI7CiAgICAgICAgICAgICAgICBpbmZvd2luZG93Mi5vcGVuKG1hcCwgbWFya2VyMik7CiAgICAgICAgICAgIH0pOwoKICAgICAgICB9IGVsc2UgewogICAgICAgIAogICAgICAgICAgICBtYXJrZXIyLmFkZExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgaWYoIHByZXZfaW5mb3dpbmRvdyApIAogICAgICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdy5jbG9zZSgpOwoKICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdyA9IGluZm93aW5kb3cyOwogICAgICAgICAgICAgICAgaW5mb3dpbmRvdzIub3BlbihtYXAsIG1hcmtlcjIpOwogICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgCgogICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXNpZGVudGlhbCk7CgogICAgICAgIHZhciBpY29uID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAiaHR0cHM6Ly9qb3VybmV5cHVyZS5jb20vd3AtY29udGVudC90aGVtZXMvSm91cm5leVB1cmUyMi9pbWcvbWFwLXBpbi1ncmVlbi5wbmciLCAvLyB1cmwgICAgCiAgICAgICAgICAgICAgICBhbmNob3I6IG5ldyBnb29nbGUubWFwcy5Qb2ludCgxNSwzMyksIC8vIGFuY2hvciAgICAgIAogICAgICAgICAgICAgICAgc2NhbGVkU2l6ZTogaWNvblNpemUsIC8vIHNjYWxlZCBzaXplICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBvcmlnaW46IG5ldyBnb29nbGUubWFwcy5Qb2ludCgwLDApLCAvLyBvcmlnaW4KICAgICAgICB9OwoKCiAgICAgICAgdmFyIGNvbnRlbnRTdHJpbmczID0KICAgICAgICAnPGRpdiBjbGFzcz0idGV4dC1jZW50ZXIiIGlkPSJtYXAtd2luZG93Ij4nICsgICAgCiAgICAgICAgJzxoMj5Kb3VybmV5UHVyZSBLbm94dmlsbGU8L2gyPicgKwogICAgICAgICc8ZGl2PjI2MzYgTWFyeXZpbGxlIFBpa2UgS25veHZpbGxlLCBUTiAzNzkyMDwvZGl2PicgKyAgICAgICAgCiAgICAgICAgJzxkaXY+PGEgY2xhc3M9ImJ0biBidG4tb3V0bGluZS1kYXJrIiBocmVmPSJodHRwczovL2pvdXJuZXlwdXJlLmNvbS9sb2NhdGlvbnMvZWFzdGVybi10ZW5uZXNzZWUvIiB0YXJnZXQ9Il9ibGFuayI+TGVhcm4gTW9yZTwvZGl2PicgKyAgICAgCiAgICAgICAgJzxkaXY+PGEgaHJlZj0iMjYzNiBNYXJ5dmlsbGUgUGlrZSBLbm94dmlsbGUsIFROIDM3OTIwIiB0YXJnZXQ9Il9ibGFuayI+R2V0IERpcmVjdGlvbnM8L2Rpdj4nICsgICAgIAogICAgICAgICc8L2Rpdj4nOwoKICAgICAgICB2YXIgaW5mb3dpbmRvdzMgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7CiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRTdHJpbmczLAogICAgICAgIH0pOwoKCiAgICAgICAgdmFyIG1hcmtlcjMgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHsKICAgICAgICAgICAgcG9zaXRpb246IHtsYXQ6IDM1LjkwMjgyODIgLCBsbmc6LTgzLjkzNzU2MTZ9LAogICAgICAgICAgICBtYXA6IG1hcCwgICAgICAgICAgCiAgICAgICAgICAgIGljb246IGljb24sCiAgICAgICAgICAgIGFuaW1hdGlvbjogZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkRST1AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeTogJ2lucCcsCiAgICAgICAgICAgICAgICAgICAgIH0pOwoKCgogICAgICAgIGdtYXJrZXJzLnB1c2gobWFya2VyMyk7CgoKICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA8PSA3NjcpIHsKCiAgICAgICAgICAgIG1hcmtlcjMuYWRkTGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICAgICAgaWYoIHByZXZfaW5mb3dpbmRvdyApIAogICAgICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdy5jbG9zZSgpOwoKICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdyA9IGluZm93aW5kb3czOwogICAgICAgICAgICAgICAgaW5mb3dpbmRvdzMub3BlbihtYXAsIG1hcmtlcjMpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAKICAgICAgICAgICAgbWFya2VyMy5hZGRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgIGlmKCBwcmV2X2luZm93aW5kb3cgKSAKICAgICAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cuY2xvc2UoKTsKCiAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cgPSBpbmZvd2luZG93MzsKICAgICAgICAgICAgICAgIGluZm93aW5kb3czLm9wZW4obWFwLCBtYXJrZXIzKTsKICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIAoKICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocmVzaWRlbnRpYWwpOwoKICAgICAgICB2YXIgaWNvbiA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogImh0dHBzOi8vam91cm5leXB1cmUuY29tL3dwLWNvbnRlbnQvdGhlbWVzL0pvdXJuZXlQdXJlMjIvaW1nL21hcC1waW4tZ3JlZW4ucG5nIiwgLy8gdXJsICAgIAogICAgICAgICAgICAgICAgYW5jaG9yOiBuZXcgZ29vZ2xlLm1hcHMuUG9pbnQoMTUsMzMpLCAvLyBhbmNob3IgICAgICAKICAgICAgICAgICAgICAgIHNjYWxlZFNpemU6IGljb25TaXplLCAvLyBzY2FsZWQgc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgb3JpZ2luOiBuZXcgZ29vZ2xlLm1hcHMuUG9pbnQoMCwwKSwgLy8gb3JpZ2luCiAgICAgICAgfTsKCgogICAgICAgIHZhciBjb250ZW50U3RyaW5nNCA9CiAgICAgICAgJzxkaXYgY2xhc3M9InRleHQtY2VudGVyIiBpZD0ibWFwLXdpbmRvdyI+JyArICAgIAogICAgICAgICc8aDI+Sm91cm5leVB1cmUgQm93bGluZyBHcmVlbjwvaDI+JyArCiAgICAgICAgJzxkaXY+MjM0OSBSdXNzZWxsdmlsbGUgUmQgQm93bGluZyBHcmVlbiwgS1kgNDIxMDE8L2Rpdj4nICsgICAgICAgIAogICAgICAgICc8ZGl2PjxhIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtZGFyayIgaHJlZj0iaHR0cHM6Ly9qb3VybmV5cHVyZS5jb20vbG9jYXRpb25zL2tlbnR1Y2t5LyIgdGFyZ2V0PSJfYmxhbmsiPkxlYXJuIE1vcmU8L2Rpdj4nICsgICAgIAogICAgICAgICc8ZGl2PjxhIGhyZWY9IjIzNDkgUnVzc2VsbHZpbGxlIFJkIEJvd2xpbmcgR3JlZW4sIEtZIDQyMTAxIiB0YXJnZXQ9Il9ibGFuayI+R2V0IERpcmVjdGlvbnM8L2Rpdj4nICsgICAgIAogICAgICAgICc8L2Rpdj4nOwoKICAgICAgICB2YXIgaW5mb3dpbmRvdzQgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7CiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRTdHJpbmc0LAogICAgICAgIH0pOwoKCiAgICAgICAgdmFyIG1hcmtlcjQgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHsKICAgICAgICAgICAgcG9zaXRpb246IHtsYXQ6IDM2Ljk2OTg4NjMgLCBsbmc6LTg2LjQ3OTY1MzJ9LAogICAgICAgICAgICBtYXA6IG1hcCwgICAgICAgICAgCiAgICAgICAgICAgIGljb246IGljb24sCiAgICAgICAgICAgIGFuaW1hdGlvbjogZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkRST1AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeTogJ2lucCcsCiAgICAgICAgICAgICAgICAgICAgIH0pOwoKCgogICAgICAgIGdtYXJrZXJzLnB1c2gobWFya2VyNCk7CgoKICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA8PSA3NjcpIHsKCiAgICAgICAgICAgIG1hcmtlcjQuYWRkTGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICAgICAgaWYoIHByZXZfaW5mb3dpbmRvdyApIAogICAgICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdy5jbG9zZSgpOwoKICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdyA9IGluZm93aW5kb3c0OwogICAgICAgICAgICAgICAgaW5mb3dpbmRvdzQub3BlbihtYXAsIG1hcmtlcjQpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAKICAgICAgICAgICAgbWFya2VyNC5hZGRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgIGlmKCBwcmV2X2luZm93aW5kb3cgKSAKICAgICAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cuY2xvc2UoKTsKCiAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cgPSBpbmZvd2luZG93NDsKICAgICAgICAgICAgICAgIGluZm93aW5kb3c0Lm9wZW4obWFwLCBtYXJrZXI0KTsKICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIAoKICAgICAgICAgICAgLy8gY29uc29sZS5sb2cob3V0cGF0aWVudCk7CgogICAgICAgIHZhciBpY29uID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAiaHR0cHM6Ly9qb3VybmV5cHVyZS5jb20vd3AtY29udGVudC90aGVtZXMvSm91cm5leVB1cmUyMi9pbWcvbWFwLXBpbi5wbmciLCAvLyB1cmwgCiAgICAgICAgICAgICAgICBhbmNob3I6IG5ldyBnb29nbGUubWFwcy5Qb2ludCg1LDE1KSwgLy8gYW5jaG9yCiAgICAgICAgICAgICAgICBzY2FsZWRTaXplOiBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSgxNywgMjcpLCAvLyBzY2FsZWQgc2l6ZSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIG9yaWdpbjogbmV3IGdvb2dsZS5tYXBzLlBvaW50KDAsMCksIC8vIG9yaWdpbgogICAgICAgIH07CgoKICAgICAgICB2YXIgY29udGVudFN0cmluZzUgPQogICAgICAgICc8ZGl2IGNsYXNzPSJ0ZXh0LWNlbnRlciIgaWQ9Im1hcC13aW5kb3ciPicgKyAgICAKICAgICAgICAnPGgyPu+7v0ZvcnQgV2FsdG9uIE91dHBhdGllbnQgQ2xpbmljPC9oMj4nICsKICAgICAgICAnPGRpdj4zNDggTWlyYWNsZSBTdHJpcCBQYXJrd2F5IFNXLCBTdWl0ZSAzNCwgRm9ydCBXYWx0b24gQmVhY2gsIEZMIDMyNTQ4PC9kaXY+JyArICAgICAgICAKICAgICAgICAnPGRpdj48YSBjbGFzcz0iYnRuIGJ0bi1vdXRsaW5lLWRhcmsiIGhyZWY9Imh0dHA6Ly9lbWVyYWxkY29hc3Rqb3VybmV5cHVyZS5jb20vIiB0YXJnZXQ9Il9ibGFuayI+TGVhcm4gTW9yZTwvZGl2PicgKyAgICAgCiAgICAgICAgJzxkaXY+PGEgaHJlZj0iMzQ4IE1pcmFjbGUgU3RyaXAgUGFya3dheSBTVywgU3VpdGUgMzQsIEZvcnQgV2FsdG9uIEJlYWNoLCBGTCAzMjU0OCIgdGFyZ2V0PSJfYmxhbmsiPkdldCBEaXJlY3Rpb25zPC9kaXY+JyArICAgICAKICAgICAgICAnPC9kaXY+JzsKCiAgICAgICAgdmFyIGluZm93aW5kb3c1ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coewogICAgICAgICAgICBjb250ZW50OiBjb250ZW50U3RyaW5nNSwKICAgICAgICB9KTsKCgogICAgICAgIHZhciBtYXJrZXI1ID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7CiAgICAgICAgICAgIHBvc2l0aW9uOiB7bGF0OiAzMC40MDY2MjA4ICwgbG5nOi04Ni42Mzg4NzIyfSwKICAgICAgICAgICAgbWFwOiBtYXAsICAgICAgICAgIAogICAgICAgICAgICBpY29uOiBpY29uLAogICAgICAgICAgICBhbmltYXRpb246IGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5EUk9QLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6ICdvdXQnLAogICAgICAgICAgICAgICAgICAgICB9KTsKCgoKICAgICAgICBnbWFya2Vycy5wdXNoKG1hcmtlcjUpOwoKCiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggPD0gNzY3KSB7CgogICAgICAgICAgICBtYXJrZXI1LmFkZExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgICAgIGlmKCBwcmV2X2luZm93aW5kb3cgKSAKICAgICAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cuY2xvc2UoKTsKCiAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cgPSBpbmZvd2luZG93NTsKICAgICAgICAgICAgICAgIGluZm93aW5kb3c1Lm9wZW4obWFwLCBtYXJrZXI1KTsKICAgICAgICAgICAgfSk7CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgICAgIG1hcmtlcjUuYWRkTGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICBpZiggcHJldl9pbmZvd2luZG93ICkgCiAgICAgICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93LmNsb3NlKCk7CgogICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93ID0gaW5mb3dpbmRvdzU7CiAgICAgICAgICAgICAgICBpbmZvd2luZG93NS5vcGVuKG1hcCwgbWFya2VyNSk7CiAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICAKCiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG91dHBhdGllbnQpOwoKICAgICAgICB2YXIgaWNvbiA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogImh0dHBzOi8vam91cm5leXB1cmUuY29tL3dwLWNvbnRlbnQvdGhlbWVzL0pvdXJuZXlQdXJlMjIvaW1nL21hcC1waW4ucG5nIiwgLy8gdXJsIAogICAgICAgICAgICAgICAgYW5jaG9yOiBuZXcgZ29vZ2xlLm1hcHMuUG9pbnQoNSwxNSksIC8vIGFuY2hvcgogICAgICAgICAgICAgICAgc2NhbGVkU2l6ZTogbmV3IGdvb2dsZS5tYXBzLlNpemUoMTcsIDI3KSwgLy8gc2NhbGVkIHNpemUgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBvcmlnaW46IG5ldyBnb29nbGUubWFwcy5Qb2ludCgwLDApLCAvLyBvcmlnaW4KICAgICAgICB9OwoKCiAgICAgICAgdmFyIGNvbnRlbnRTdHJpbmc2ID0KICAgICAgICAnPGRpdiBjbGFzcz0idGV4dC1jZW50ZXIiIGlkPSJtYXAtd2luZG93Ij4nICsgICAgCiAgICAgICAgJzxoMj5QZXJzcGVjdGl2ZXMgLSBHYWluZXN2aWxsZTwvaDI+JyArCiAgICAgICAgJzxkaXY+MjE4IE5XIDJuZCBBdmUsIEdhaW5lc3ZpbGxlLCBGTCAzMjYwMTwvZGl2PicgKyAgICAgICAgCiAgICAgICAgJzxkaXY+PGEgY2xhc3M9ImJ0biBidG4tb3V0bGluZS1kYXJrIiBocmVmPSJwZXJzcGVjdGl2ZXMyLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPkxlYXJuIE1vcmU8L2Rpdj4nICsgICAgIAogICAgICAgICc8ZGl2PjxhIGhyZWY9IjIxOCBOVyAybmQgQXZlLCBHYWluZXN2aWxsZSwgRkwgMzI2MDEiIHRhcmdldD0iX2JsYW5rIj5HZXQgRGlyZWN0aW9uczwvZGl2PicgKyAgICAgCiAgICAgICAgJzwvZGl2Pic7CgogICAgICAgIHZhciBpbmZvd2luZG93NiA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KHsKICAgICAgICAgICAgY29udGVudDogY29udGVudFN0cmluZzYsCiAgICAgICAgfSk7CgoKICAgICAgICB2YXIgbWFya2VyNiA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoewogICAgICAgICAgICBwb3NpdGlvbjoge2xhdDogMjkuNjUzNTYxICwgbG5nOi04Mi4zMjcyMzY1fSwKICAgICAgICAgICAgbWFwOiBtYXAsICAgICAgICAgIAogICAgICAgICAgICBpY29uOiBpY29uLAogICAgICAgICAgICBhbmltYXRpb246IGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5EUk9QLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6ICdvdXQnLAogICAgICAgICAgICAgICAgICAgICB9KTsKCgoKICAgICAgICBnbWFya2Vycy5wdXNoKG1hcmtlcjYpOwoKCiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggPD0gNzY3KSB7CgogICAgICAgICAgICBtYXJrZXI2LmFkZExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgICAgIGlmKCBwcmV2X2luZm93aW5kb3cgKSAKICAgICAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cuY2xvc2UoKTsKCiAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cgPSBpbmZvd2luZG93NjsKICAgICAgICAgICAgICAgIGluZm93aW5kb3c2Lm9wZW4obWFwLCBtYXJrZXI2KTsKICAgICAgICAgICAgfSk7CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgICAgIG1hcmtlcjYuYWRkTGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICBpZiggcHJldl9pbmZvd2luZG93ICkgCiAgICAgICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93LmNsb3NlKCk7CgogICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93ID0gaW5mb3dpbmRvdzY7CiAgICAgICAgICAgICAgICBpbmZvd2luZG93Ni5vcGVuKG1hcCwgbWFya2VyNik7CiAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICAKCiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG91dHBhdGllbnQpOwoKICAgICAgICB2YXIgaWNvbiA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogImh0dHBzOi8vam91cm5leXB1cmUuY29tL3dwLWNvbnRlbnQvdGhlbWVzL0pvdXJuZXlQdXJlMjIvaW1nL21hcC1waW4ucG5nIiwgLy8gdXJsIAogICAgICAgICAgICAgICAgYW5jaG9yOiBuZXcgZ29vZ2xlLm1hcHMuUG9pbnQoNSwxNSksIC8vIGFuY2hvcgogICAgICAgICAgICAgICAgc2NhbGVkU2l6ZTogbmV3IGdvb2dsZS5tYXBzLlNpemUoMTcsIDI3KSwgLy8gc2NhbGVkIHNpemUgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBvcmlnaW46IG5ldyBnb29nbGUubWFwcy5Qb2ludCgwLDApLCAvLyBvcmlnaW4KICAgICAgICB9OwoKCiAgICAgICAgdmFyIGNvbnRlbnRTdHJpbmc3ID0KICAgICAgICAnPGRpdiBjbGFzcz0idGV4dC1jZW50ZXIiIGlkPSJtYXAtd2luZG93Ij4nICsgICAgCiAgICAgICAgJzxoMj5QZXJzcGVjdGl2ZXMgLSBCcm9va3N2aWxsZTwvaDI+JyArCiAgICAgICAgJzxkaXY+MTMwIEUgRm9ydCBEYWRlIEF2ZSwgQnJvb2tzdmlsbGUsIEZMIDM0NjAxPC9kaXY+JyArICAgICAgICAKICAgICAgICAnPGRpdj48YSBjbGFzcz0iYnRuIGJ0bi1vdXRsaW5lLWRhcmsiIGhyZWY9InBlcnNwZWN0aXZlczIuY29tIiB0YXJnZXQ9Il9ibGFuayI+TGVhcm4gTW9yZTwvZGl2PicgKyAgICAgCiAgICAgICAgJzxkaXY+PGEgaHJlZj0iMTMwIEUgRm9ydCBEYWRlIEF2ZSwgQnJvb2tzdmlsbGUsIEZMIDM0NjAxIiB0YXJnZXQ9Il9ibGFuayI+R2V0IERpcmVjdGlvbnM8L2Rpdj4nICsgICAgIAogICAgICAgICc8L2Rpdj4nOwoKICAgICAgICB2YXIgaW5mb3dpbmRvdzcgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7CiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRTdHJpbmc3LAogICAgICAgIH0pOwoKCiAgICAgICAgdmFyIG1hcmtlcjcgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHsKICAgICAgICAgICAgcG9zaXRpb246IHtsYXQ6IDI4LjU1NjE4MDYgLCBsbmc6LTgyLjM4NjQ4NDh9LAogICAgICAgICAgICBtYXA6IG1hcCwgICAgICAgICAgCiAgICAgICAgICAgIGljb246IGljb24sCiAgICAgICAgICAgIGFuaW1hdGlvbjogZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkRST1AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeTogJ291dCcsCiAgICAgICAgICAgICAgICAgICAgIH0pOwoKCgogICAgICAgIGdtYXJrZXJzLnB1c2gobWFya2VyNyk7CgoKICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA8PSA3NjcpIHsKCiAgICAgICAgICAgIG1hcmtlcjcuYWRkTGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICAgICAgaWYoIHByZXZfaW5mb3dpbmRvdyApIAogICAgICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdy5jbG9zZSgpOwoKICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdyA9IGluZm93aW5kb3c3OwogICAgICAgICAgICAgICAgaW5mb3dpbmRvdzcub3BlbihtYXAsIG1hcmtlcjcpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAKICAgICAgICAgICAgbWFya2VyNy5hZGRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgIGlmKCBwcmV2X2luZm93aW5kb3cgKSAKICAgICAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cuY2xvc2UoKTsKCiAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cgPSBpbmZvd2luZG93NzsKICAgICAgICAgICAgICAgIGluZm93aW5kb3c3Lm9wZW4obWFwLCBtYXJrZXI3KTsKICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIAoKICAgICAgICAgICAgLy8gY29uc29sZS5sb2cob3V0cGF0aWVudCk7CgogICAgICAgIHZhciBpY29uID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAiaHR0cHM6Ly9qb3VybmV5cHVyZS5jb20vd3AtY29udGVudC90aGVtZXMvSm91cm5leVB1cmUyMi9pbWcvbWFwLXBpbi5wbmciLCAvLyB1cmwgCiAgICAgICAgICAgICAgICBhbmNob3I6IG5ldyBnb29nbGUubWFwcy5Qb2ludCg1LDE1KSwgLy8gYW5jaG9yCiAgICAgICAgICAgICAgICBzY2FsZWRTaXplOiBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSgxNywgMjcpLCAvLyBzY2FsZWQgc2l6ZSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIG9yaWdpbjogbmV3IGdvb2dsZS5tYXBzLlBvaW50KDAsMCksIC8vIG9yaWdpbgogICAgICAgIH07CgoKICAgICAgICB2YXIgY29udGVudFN0cmluZzggPQogICAgICAgICc8ZGl2IGNsYXNzPSJ0ZXh0LWNlbnRlciIgaWQ9Im1hcC13aW5kb3ciPicgKyAgICAKICAgICAgICAnPGgyPlBlcnNwZWN0aXZlcyAtIFN1bW1lcmZpZWxkPC9oMj4nICsKICAgICAgICAnPGRpdj45NDI1IFNFIEh3eSA0MiBTdW1tZXJmaWVsZCwgRmxvcmlkYSAzNDQ5MTwvZGl2PicgKyAgICAgICAgCiAgICAgICAgJzxkaXY+PGEgY2xhc3M9ImJ0biBidG4tb3V0bGluZS1kYXJrIiBocmVmPSJodHRwczovL3BlcnNwZWN0aXZlczIuY29tLyIgdGFyZ2V0PSJfYmxhbmsiPkxlYXJuIE1vcmU8L2Rpdj4nICsgICAgIAogICAgICAgICc8ZGl2PjxhIGhyZWY9Ijk0MjUgU0UgSHd5IDQyIFN1bW1lcmZpZWxkLCBGbG9yaWRhIDM0NDkxIiB0YXJnZXQ9Il9ibGFuayI+R2V0IERpcmVjdGlvbnM8L2Rpdj4nICsgICAgIAogICAgICAgICc8L2Rpdj4nOwoKICAgICAgICB2YXIgaW5mb3dpbmRvdzggPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7CiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRTdHJpbmc4LAogICAgICAgIH0pOwoKCiAgICAgICAgdmFyIG1hcmtlcjggPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHsKICAgICAgICAgICAgcG9zaXRpb246IHtsYXQ6IDI4Ljk4MjMwMTggLCBsbmc6LTgxLjk5Njc4MjN9LAogICAgICAgICAgICBtYXA6IG1hcCwgICAgICAgICAgCiAgICAgICAgICAgIGljb246IGljb24sCiAgICAgICAgICAgIGFuaW1hdGlvbjogZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkRST1AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeTogJ291dCcsCiAgICAgICAgICAgICAgICAgICAgIH0pOwoKCgogICAgICAgIGdtYXJrZXJzLnB1c2gobWFya2VyOCk7CgoKICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA8PSA3NjcpIHsKCiAgICAgICAgICAgIG1hcmtlcjguYWRkTGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICAgICAgaWYoIHByZXZfaW5mb3dpbmRvdyApIAogICAgICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdy5jbG9zZSgpOwoKICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdyA9IGluZm93aW5kb3c4OwogICAgICAgICAgICAgICAgaW5mb3dpbmRvdzgub3BlbihtYXAsIG1hcmtlcjgpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAKICAgICAgICAgICAgbWFya2VyOC5hZGRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgIGlmKCBwcmV2X2luZm93aW5kb3cgKSAKICAgICAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cuY2xvc2UoKTsKCiAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cgPSBpbmZvd2luZG93ODsKICAgICAgICAgICAgICAgIGluZm93aW5kb3c4Lm9wZW4obWFwLCBtYXJrZXI4KTsKICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIAoKICAgICAgICAgICAgLy8gY29uc29sZS5sb2cob3V0cGF0aWVudCk7CgogICAgICAgIHZhciBpY29uID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAiaHR0cHM6Ly9qb3VybmV5cHVyZS5jb20vd3AtY29udGVudC90aGVtZXMvSm91cm5leVB1cmUyMi9pbWcvbWFwLXBpbi5wbmciLCAvLyB1cmwgCiAgICAgICAgICAgICAgICBhbmNob3I6IG5ldyBnb29nbGUubWFwcy5Qb2ludCg1LDE1KSwgLy8gYW5jaG9yCiAgICAgICAgICAgICAgICBzY2FsZWRTaXplOiBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSgxNywgMjcpLCAvLyBzY2FsZWQgc2l6ZSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIG9yaWdpbjogbmV3IGdvb2dsZS5tYXBzLlBvaW50KDAsMCksIC8vIG9yaWdpbgogICAgICAgIH07CgoKICAgICAgICB2YXIgY29udGVudFN0cmluZzkgPQogICAgICAgICc8ZGl2IGNsYXNzPSJ0ZXh0LWNlbnRlciIgaWQ9Im1hcC13aW5kb3ciPicgKyAgICAKICAgICAgICAnPGgyPlBlcnNwZWN0aXZlcyAtIE9DQUxBPC9oMj4nICsKICAgICAgICAnPGRpdj44MTggRSBTaWx2ZXIgU3ByaW5ncyBCbHZkIE9jYWxhLCBGbG9yaWRhIDM0NDcwPC9kaXY+JyArICAgICAgICAKICAgICAgICAnPGRpdj48YSBjbGFzcz0iYnRuIGJ0bi1vdXRsaW5lLWRhcmsiIGhyZWY9Imh0dHBzOi8vcGVyc3BlY3RpdmVzMi5jb20vIiB0YXJnZXQ9Il9ibGFuayI+TGVhcm4gTW9yZTwvZGl2PicgKyAgICAgCiAgICAgICAgJzxkaXY+PGEgaHJlZj0iODE4IEUgU2lsdmVyIFNwcmluZ3MgQmx2ZCBPY2FsYSwgRmxvcmlkYSAzNDQ3MCIgdGFyZ2V0PSJfYmxhbmsiPkdldCBEaXJlY3Rpb25zPC9kaXY+JyArICAgICAKICAgICAgICAnPC9kaXY+JzsKCiAgICAgICAgdmFyIGluZm93aW5kb3c5ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coewogICAgICAgICAgICBjb250ZW50OiBjb250ZW50U3RyaW5nOSwKICAgICAgICB9KTsKCgogICAgICAgIHZhciBtYXJrZXI5ID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7CiAgICAgICAgICAgIHBvc2l0aW9uOiB7bGF0OiAyOS4xODY4NDgzICwgbG5nOi04Mi4xMjg5NjcyfSwKICAgICAgICAgICAgbWFwOiBtYXAsICAgICAgICAgIAogICAgICAgICAgICBpY29uOiBpY29uLAogICAgICAgICAgICBhbmltYXRpb246IGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5EUk9QLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6ICdvdXQnLAogICAgICAgICAgICAgICAgICAgICB9KTsKCgoKICAgICAgICBnbWFya2Vycy5wdXNoKG1hcmtlcjkpOwoKCiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggPD0gNzY3KSB7CgogICAgICAgICAgICBtYXJrZXI5LmFkZExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgICAgIGlmKCBwcmV2X2luZm93aW5kb3cgKSAKICAgICAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cuY2xvc2UoKTsKCiAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cgPSBpbmZvd2luZG93OTsKICAgICAgICAgICAgICAgIGluZm93aW5kb3c5Lm9wZW4obWFwLCBtYXJrZXI5KTsKICAgICAgICAgICAgfSk7CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgICAgIG1hcmtlcjkuYWRkTGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICBpZiggcHJldl9pbmZvd2luZG93ICkgCiAgICAgICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93LmNsb3NlKCk7CgogICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93ID0gaW5mb3dpbmRvdzk7CiAgICAgICAgICAgICAgICBpbmZvd2luZG93OS5vcGVuKG1hcCwgbWFya2VyOSk7CiAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICAKCiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG91dHBhdGllbnQpOwoKICAgICAgICB2YXIgaWNvbiA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogImh0dHBzOi8vam91cm5leXB1cmUuY29tL3dwLWNvbnRlbnQvdGhlbWVzL0pvdXJuZXlQdXJlMjIvaW1nL21hcC1waW4ucG5nIiwgLy8gdXJsIAogICAgICAgICAgICAgICAgYW5jaG9yOiBuZXcgZ29vZ2xlLm1hcHMuUG9pbnQoNSwxNSksIC8vIGFuY2hvcgogICAgICAgICAgICAgICAgc2NhbGVkU2l6ZTogbmV3IGdvb2dsZS5tYXBzLlNpemUoMTcsIDI3KSwgLy8gc2NhbGVkIHNpemUgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBvcmlnaW46IG5ldyBnb29nbGUubWFwcy5Qb2ludCgwLDApLCAvLyBvcmlnaW4KICAgICAgICB9OwoKCiAgICAgICAgdmFyIGNvbnRlbnRTdHJpbmcxMCA9CiAgICAgICAgJzxkaXYgY2xhc3M9InRleHQtY2VudGVyIiBpZD0ibWFwLXdpbmRvdyI+JyArICAgIAogICAgICAgICc8aDI+TWVsYm91cm5lICBPdXRwYXRpZW50IENsaW5pYzwvaDI+JyArCiAgICAgICAgJzxkaXY+OTAgUyBIYXJib3IgQ2l0eSBCb3VsZXZhcmQsIE1lbGJvdXJuZSwgRkwgMzI5MDE8L2Rpdj4nICsgICAgICAgIAogICAgICAgICc8ZGl2PjxhIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtZGFyayIgaHJlZj0iaHR0cHM6Ly9qb3VybmV5cHVyZW1lbGJvdXJuZS5jb20iIHRhcmdldD0iX2JsYW5rIj5MZWFybiBNb3JlPC9kaXY+JyArICAgICAKICAgICAgICAnPGRpdj48YSBocmVmPSI5MCBTIEhhcmJvciBDaXR5IEJvdWxldmFyZCwgTWVsYm91cm5lLCBGTCAzMjkwMSIgdGFyZ2V0PSJfYmxhbmsiPkdldCBEaXJlY3Rpb25zPC9kaXY+JyArICAgICAKICAgICAgICAnPC9kaXY+JzsKCiAgICAgICAgdmFyIGluZm93aW5kb3cxMCA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KHsKICAgICAgICAgICAgY29udGVudDogY29udGVudFN0cmluZzEwLAogICAgICAgIH0pOwoKCiAgICAgICAgdmFyIG1hcmtlcjEwID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7CiAgICAgICAgICAgIHBvc2l0aW9uOiB7bGF0OiAyOC4xMDYzNzgyICwgbG5nOi04MC42MTY3ODU4fSwKICAgICAgICAgICAgbWFwOiBtYXAsICAgICAgICAgIAogICAgICAgICAgICBpY29uOiBpY29uLAogICAgICAgICAgICBhbmltYXRpb246IGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5EUk9QLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6ICdvdXQnLAogICAgICAgICAgICAgICAgICAgICB9KTsKCgoKICAgICAgICBnbWFya2Vycy5wdXNoKG1hcmtlcjEwKTsKCgogICAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIDw9IDc2NykgewoKICAgICAgICAgICAgbWFya2VyMTAuYWRkTGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICAgICAgaWYoIHByZXZfaW5mb3dpbmRvdyApIAogICAgICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdy5jbG9zZSgpOwoKICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdyA9IGluZm93aW5kb3cxMDsKICAgICAgICAgICAgICAgIGluZm93aW5kb3cxMC5vcGVuKG1hcCwgbWFya2VyMTApOwogICAgICAgICAgICB9KTsKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAKICAgICAgICAgICAgbWFya2VyMTAuYWRkTGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICBpZiggcHJldl9pbmZvd2luZG93ICkgCiAgICAgICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93LmNsb3NlKCk7CgogICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93ID0gaW5mb3dpbmRvdzEwOwogICAgICAgICAgICAgICAgaW5mb3dpbmRvdzEwLm9wZW4obWFwLCBtYXJrZXIxMCk7CiAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICAKCiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG91dHBhdGllbnQpOwoKICAgICAgICB2YXIgaWNvbiA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogImh0dHBzOi8vam91cm5leXB1cmUuY29tL3dwLWNvbnRlbnQvdGhlbWVzL0pvdXJuZXlQdXJlMjIvaW1nL21hcC1waW4ucG5nIiwgLy8gdXJsIAogICAgICAgICAgICAgICAgYW5jaG9yOiBuZXcgZ29vZ2xlLm1hcHMuUG9pbnQoNSwxNSksIC8vIGFuY2hvcgogICAgICAgICAgICAgICAgc2NhbGVkU2l6ZTogbmV3IGdvb2dsZS5tYXBzLlNpemUoMTcsIDI3KSwgLy8gc2NhbGVkIHNpemUgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBvcmlnaW46IG5ldyBnb29nbGUubWFwcy5Qb2ludCgwLDApLCAvLyBvcmlnaW4KICAgICAgICB9OwoKCiAgICAgICAgdmFyIGNvbnRlbnRTdHJpbmcxMSA9CiAgICAgICAgJzxkaXYgY2xhc3M9InRleHQtY2VudGVyIiBpZD0ibWFwLXdpbmRvdyI+JyArICAgIAogICAgICAgICc8aDI+TXVyZnJlZXNib3JvIE9QIENsaW5pYzwvaDI+JyArCiAgICAgICAgJzxkaXY+MTEzOSBOVyBCcm9hZCBTdCAjMTAyIE11cmZyZWVzYm9ybywgVE4gMzcxMjk8L2Rpdj4nICsgICAgICAgIAogICAgICAgICc8ZGl2PjxhIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtZGFyayIgaHJlZj0iaHR0cHM6Ly9qb3VybmV5cHVyZS5jb20vb3V0cGF0aWVudC9tdXJmcmVlc2Jvcm8vIiB0YXJnZXQ9Il9ibGFuayI+TGVhcm4gTW9yZTwvZGl2PicgKyAgICAgCiAgICAgICAgJzxkaXY+PGEgaHJlZj0iMTEzOSBOVyBCcm9hZCBTdCAjMTAyIE11cmZyZWVzYm9ybywgVE4gMzcxMjkiIHRhcmdldD0iX2JsYW5rIj5HZXQgRGlyZWN0aW9uczwvZGl2PicgKyAgICAgCiAgICAgICAgJzwvZGl2Pic7CgogICAgICAgIHZhciBpbmZvd2luZG93MTEgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7CiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRTdHJpbmcxMSwKICAgICAgICB9KTsKCgogICAgICAgIHZhciBtYXJrZXIxMSA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoewogICAgICAgICAgICBwb3NpdGlvbjoge2xhdDogMzUuODU4Njc1MiAsIGxuZzotODYuNDA2NDcwMX0sCiAgICAgICAgICAgIG1hcDogbWFwLCAgICAgICAgICAKICAgICAgICAgICAgaWNvbjogaWNvbiwKICAgICAgICAgICAgYW5pbWF0aW9uOiBnb29nbGUubWFwcy5BbmltYXRpb24uRFJPUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnb3V0JywKICAgICAgICAgICAgICAgICAgICAgfSk7CgoKCiAgICAgICAgZ21hcmtlcnMucHVzaChtYXJrZXIxMSk7CgoKICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA8PSA3NjcpIHsKCiAgICAgICAgICAgIG1hcmtlcjExLmFkZExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgICAgIGlmKCBwcmV2X2luZm93aW5kb3cgKSAKICAgICAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cuY2xvc2UoKTsKCiAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cgPSBpbmZvd2luZG93MTE7CiAgICAgICAgICAgICAgICBpbmZvd2luZG93MTEub3BlbihtYXAsIG1hcmtlcjExKTsKICAgICAgICAgICAgfSk7CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgICAgIG1hcmtlcjExLmFkZExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgaWYoIHByZXZfaW5mb3dpbmRvdyApIAogICAgICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdy5jbG9zZSgpOwoKICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdyA9IGluZm93aW5kb3cxMTsKICAgICAgICAgICAgICAgIGluZm93aW5kb3cxMS5vcGVuKG1hcCwgbWFya2VyMTEpOwogICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgCgogICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhvdXRwYXRpZW50KTsKCiAgICAgICAgdmFyIGljb24gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICJodHRwczovL2pvdXJuZXlwdXJlLmNvbS93cC1jb250ZW50L3RoZW1lcy9Kb3VybmV5UHVyZTIyL2ltZy9tYXAtcGluLnBuZyIsIC8vIHVybCAKICAgICAgICAgICAgICAgIGFuY2hvcjogbmV3IGdvb2dsZS5tYXBzLlBvaW50KDUsMTUpLCAvLyBhbmNob3IKICAgICAgICAgICAgICAgIHNjYWxlZFNpemU6IG5ldyBnb29nbGUubWFwcy5TaXplKDE3LCAyNyksIC8vIHNjYWxlZCBzaXplICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgb3JpZ2luOiBuZXcgZ29vZ2xlLm1hcHMuUG9pbnQoMCwwKSwgLy8gb3JpZ2luCiAgICAgICAgfTsKCgogICAgICAgIHZhciBjb250ZW50U3RyaW5nMTIgPQogICAgICAgICc8ZGl2IGNsYXNzPSJ0ZXh0LWNlbnRlciIgaWQ9Im1hcC13aW5kb3ciPicgKyAgICAKICAgICAgICAnPGgyPlBhZHVjYWggT1AgQ2xpbmljPC9oMj4nICsKICAgICAgICAnPGRpdj4yNTAwIEhvbHQgUm9hZCBQYWR1Y2FoLCBLWSA0MjAwMTwvZGl2PicgKyAgICAgICAgCiAgICAgICAgJzxkaXY+PGEgY2xhc3M9ImJ0biBidG4tb3V0bGluZS1kYXJrIiBocmVmPSJodHRwczovL2pvdXJuZXlwdXJlLmNvbS9vdXRwYXRpZW50L3BhZHVjYWgvIiB0YXJnZXQ9Il9ibGFuayI+TGVhcm4gTW9yZTwvZGl2PicgKyAgICAgCiAgICAgICAgJzxkaXY+PGEgaHJlZj0iMjUwMCBIb2x0IFJvYWQgUGFkdWNhaCwgS1kgNDIwMDEiIHRhcmdldD0iX2JsYW5rIj5HZXQgRGlyZWN0aW9uczwvZGl2PicgKyAgICAgCiAgICAgICAgJzwvZGl2Pic7CgogICAgICAgIHZhciBpbmZvd2luZG93MTIgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7CiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRTdHJpbmcxMiwKICAgICAgICB9KTsKCgogICAgICAgIHZhciBtYXJrZXIxMiA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoewogICAgICAgICAgICBwb3NpdGlvbjoge2xhdDogMzcuMDY2MzA5NyAsIGxuZzotODguNjkwNDA4NH0sCiAgICAgICAgICAgIG1hcDogbWFwLCAgICAgICAgICAKICAgICAgICAgICAgaWNvbjogaWNvbiwKICAgICAgICAgICAgYW5pbWF0aW9uOiBnb29nbGUubWFwcy5BbmltYXRpb24uRFJPUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnb3V0JywKICAgICAgICAgICAgICAgICAgICAgfSk7CgoKCiAgICAgICAgZ21hcmtlcnMucHVzaChtYXJrZXIxMik7CgoKICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA8PSA3NjcpIHsKCiAgICAgICAgICAgIG1hcmtlcjEyLmFkZExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgICAgIGlmKCBwcmV2X2luZm93aW5kb3cgKSAKICAgICAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cuY2xvc2UoKTsKCiAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cgPSBpbmZvd2luZG93MTI7CiAgICAgICAgICAgICAgICBpbmZvd2luZG93MTIub3BlbihtYXAsIG1hcmtlcjEyKTsKICAgICAgICAgICAgfSk7CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgICAgIG1hcmtlcjEyLmFkZExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgaWYoIHByZXZfaW5mb3dpbmRvdyApIAogICAgICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdy5jbG9zZSgpOwoKICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdyA9IGluZm93aW5kb3cxMjsKICAgICAgICAgICAgICAgIGluZm93aW5kb3cxMi5vcGVuKG1hcCwgbWFya2VyMTIpOwogICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgCgogICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhvdXRwYXRpZW50KTsKCiAgICAgICAgdmFyIGljb24gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICJodHRwczovL2pvdXJuZXlwdXJlLmNvbS93cC1jb250ZW50L3RoZW1lcy9Kb3VybmV5UHVyZTIyL2ltZy9tYXAtcGluLnBuZyIsIC8vIHVybCAKICAgICAgICAgICAgICAgIGFuY2hvcjogbmV3IGdvb2dsZS5tYXBzLlBvaW50KDUsMTUpLCAvLyBhbmNob3IKICAgICAgICAgICAgICAgIHNjYWxlZFNpemU6IG5ldyBnb29nbGUubWFwcy5TaXplKDE3LCAyNyksIC8vIHNjYWxlZCBzaXplICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgb3JpZ2luOiBuZXcgZ29vZ2xlLm1hcHMuUG9pbnQoMCwwKSwgLy8gb3JpZ2luCiAgICAgICAgfTsKCgogICAgICAgIHZhciBjb250ZW50U3RyaW5nMTMgPQogICAgICAgICc8ZGl2IGNsYXNzPSJ0ZXh0LWNlbnRlciIgaWQ9Im1hcC13aW5kb3ciPicgKyAgICAKICAgICAgICAnPGgyPktub3h2aWxsZSBPUCBDbGluaWM8L2gyPicgKwogICAgICAgICc8ZGl2Pjc0MTcgS2luZ3N0b24gUGlrZSBTdWl0ZSAzMDEsIEtub3h2aWxsZSwgVE4gMzc5MTk8L2Rpdj4nICsgICAgICAgIAogICAgICAgICc8ZGl2PjxhIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtZGFyayIgaHJlZj0iaHR0cHM6Ly9qb3VybmV5cHVyZS5jb20vb3V0cGF0aWVudC9rbm94dmlsbGUvIiB0YXJnZXQ9Il9ibGFuayI+TGVhcm4gTW9yZTwvZGl2PicgKyAgICAgCiAgICAgICAgJzxkaXY+PGEgaHJlZj0iNzQxNyBLaW5nc3RvbiBQaWtlIFN1aXRlIDMwMSwgS25veHZpbGxlLCBUTiAzNzkxOSIgdGFyZ2V0PSJfYmxhbmsiPkdldCBEaXJlY3Rpb25zPC9kaXY+JyArICAgICAKICAgICAgICAnPC9kaXY+JzsKCiAgICAgICAgdmFyIGluZm93aW5kb3cxMyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KHsKICAgICAgICAgICAgY29udGVudDogY29udGVudFN0cmluZzEzLAogICAgICAgIH0pOwoKCiAgICAgICAgdmFyIG1hcmtlcjEzID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7CiAgICAgICAgICAgIHBvc2l0aW9uOiB7bGF0OiAzNS45MzAxMzE5ICwgbG5nOi04NC4wMzM4MDF9LAogICAgICAgICAgICBtYXA6IG1hcCwgICAgICAgICAgCiAgICAgICAgICAgIGljb246IGljb24sCiAgICAgICAgICAgIGFuaW1hdGlvbjogZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkRST1AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeTogJ291dCcsCiAgICAgICAgICAgICAgICAgICAgIH0pOwoKCgogICAgICAgIGdtYXJrZXJzLnB1c2gobWFya2VyMTMpOwoKCiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggPD0gNzY3KSB7CgogICAgICAgICAgICBtYXJrZXIxMy5hZGRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgICAgICBpZiggcHJldl9pbmZvd2luZG93ICkgCiAgICAgICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93LmNsb3NlKCk7CgogICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93ID0gaW5mb3dpbmRvdzEzOwogICAgICAgICAgICAgICAgaW5mb3dpbmRvdzEzLm9wZW4obWFwLCBtYXJrZXIxMyk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICB9IGVsc2UgewogICAgICAgIAogICAgICAgICAgICBtYXJrZXIxMy5hZGRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgIGlmKCBwcmV2X2luZm93aW5kb3cgKSAKICAgICAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cuY2xvc2UoKTsKCiAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cgPSBpbmZvd2luZG93MTM7CiAgICAgICAgICAgICAgICBpbmZvd2luZG93MTMub3BlbihtYXAsIG1hcmtlcjEzKTsKICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIAoKICAgICAgICAgICAgLy8gY29uc29sZS5sb2cob3V0cGF0aWVudCk7CgogICAgICAgIHZhciBpY29uID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAiaHR0cHM6Ly9qb3VybmV5cHVyZS5jb20vd3AtY29udGVudC90aGVtZXMvSm91cm5leVB1cmUyMi9pbWcvbWFwLXBpbi5wbmciLCAvLyB1cmwgCiAgICAgICAgICAgICAgICBhbmNob3I6IG5ldyBnb29nbGUubWFwcy5Qb2ludCg1LDE1KSwgLy8gYW5jaG9yCiAgICAgICAgICAgICAgICBzY2FsZWRTaXplOiBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSgxNywgMjcpLCAvLyBzY2FsZWQgc2l6ZSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIG9yaWdpbjogbmV3IGdvb2dsZS5tYXBzLlBvaW50KDAsMCksIC8vIG9yaWdpbgogICAgICAgIH07CgoKICAgICAgICB2YXIgY29udGVudFN0cmluZzE0ID0KICAgICAgICAnPGRpdiBjbGFzcz0idGV4dC1jZW50ZXIiIGlkPSJtYXAtd2luZG93Ij4nICsgICAgCiAgICAgICAgJzxoMj5Mb3Vpc3ZpbGxlIE91dHBhdGllbnQgQ2xpbmljPC9oMj4nICsKICAgICAgICAnPGRpdj4zNDMwIE5ld2J1cmcgUmQgU3VpdGUgMTU4IExvdWlzdmlsbGUsIEtZIDQwMjE4PC9kaXY+JyArICAgICAgICAKICAgICAgICAnPGRpdj48YSBjbGFzcz0iYnRuIGJ0bi1vdXRsaW5lLWRhcmsiIGhyZWY9Imh0dHBzOi8vam91cm5leXB1cmUuY29tL291dHBhdGllbnQvbG91aXN2aWxsZS8iIHRhcmdldD0iX2JsYW5rIj5MZWFybiBNb3JlPC9kaXY+JyArICAgICAKICAgICAgICAnPGRpdj48YSBocmVmPSIzNDMwIE5ld2J1cmcgUmQgU3VpdGUgMTU4IExvdWlzdmlsbGUsIEtZIDQwMjE4IiB0YXJnZXQ9Il9ibGFuayI+R2V0IERpcmVjdGlvbnM8L2Rpdj4nICsgICAgIAogICAgICAgICc8L2Rpdj4nOwoKICAgICAgICB2YXIgaW5mb3dpbmRvdzE0ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coewogICAgICAgICAgICBjb250ZW50OiBjb250ZW50U3RyaW5nMTQsCiAgICAgICAgfSk7CgoKICAgICAgICB2YXIgbWFya2VyMTQgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHsKICAgICAgICAgICAgcG9zaXRpb246IHtsYXQ6IDM4LjE5NDQxMzkgLCBsbmc6LTg1LjY3OTg3OTF9LAogICAgICAgICAgICBtYXA6IG1hcCwgICAgICAgICAgCiAgICAgICAgICAgIGljb246IGljb24sCiAgICAgICAgICAgIGFuaW1hdGlvbjogZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkRST1AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeTogJ291dCcsCiAgICAgICAgICAgICAgICAgICAgIH0pOwoKCgogICAgICAgIGdtYXJrZXJzLnB1c2gobWFya2VyMTQpOwoKCiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggPD0gNzY3KSB7CgogICAgICAgICAgICBtYXJrZXIxNC5hZGRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgICAgICBpZiggcHJldl9pbmZvd2luZG93ICkgCiAgICAgICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93LmNsb3NlKCk7CgogICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93ID0gaW5mb3dpbmRvdzE0OwogICAgICAgICAgICAgICAgaW5mb3dpbmRvdzE0Lm9wZW4obWFwLCBtYXJrZXIxNCk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICB9IGVsc2UgewogICAgICAgIAogICAgICAgICAgICBtYXJrZXIxNC5hZGRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgIGlmKCBwcmV2X2luZm93aW5kb3cgKSAKICAgICAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cuY2xvc2UoKTsKCiAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cgPSBpbmZvd2luZG93MTQ7CiAgICAgICAgICAgICAgICBpbmZvd2luZG93MTQub3BlbihtYXAsIG1hcmtlcjE0KTsKICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIAoKICAgICAgICAgICAgLy8gY29uc29sZS5sb2cob3V0cGF0aWVudCk7CgogICAgICAgIHZhciBpY29uID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAiaHR0cHM6Ly9qb3VybmV5cHVyZS5jb20vd3AtY29udGVudC90aGVtZXMvSm91cm5leVB1cmUyMi9pbWcvbWFwLXBpbi5wbmciLCAvLyB1cmwgCiAgICAgICAgICAgICAgICBhbmNob3I6IG5ldyBnb29nbGUubWFwcy5Qb2ludCg1LDE1KSwgLy8gYW5jaG9yCiAgICAgICAgICAgICAgICBzY2FsZWRTaXplOiBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSgxNywgMjcpLCAvLyBzY2FsZWQgc2l6ZSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIG9yaWdpbjogbmV3IGdvb2dsZS5tYXBzLlBvaW50KDAsMCksIC8vIG9yaWdpbgogICAgICAgIH07CgoKICAgICAgICB2YXIgY29udGVudFN0cmluZzE1ID0KICAgICAgICAnPGRpdiBjbGFzcz0idGV4dC1jZW50ZXIiIGlkPSJtYXAtd2luZG93Ij4nICsgICAgCiAgICAgICAgJzxoMj5MZXhpbmd0b24gT1AgQ2xpbmljPC9oMj4nICsKICAgICAgICAnPGRpdj4xNDAxIE5pY2hvbGFzdmlsbGUgUm9hZCBMZXhpbmd0b24sIEtZIDQwNTAzPC9kaXY+JyArICAgICAgICAKICAgICAgICAnPGRpdj48YSBjbGFzcz0iYnRuIGJ0bi1vdXRsaW5lLWRhcmsiIGhyZWY9Imh0dHBzOi8vam91cm5leXB1cmUuY29tL291dHBhdGllbnQvbGV4aW5ndG9uLyIgdGFyZ2V0PSJfYmxhbmsiPkxlYXJuIE1vcmU8L2Rpdj4nICsgICAgIAogICAgICAgICc8ZGl2PjxhIGhyZWY9IjE0MDEgTmljaG9sYXN2aWxsZSBSb2FkIExleGluZ3RvbiwgS1kgNDA1MDMiIHRhcmdldD0iX2JsYW5rIj5HZXQgRGlyZWN0aW9uczwvZGl2PicgKyAgICAgCiAgICAgICAgJzwvZGl2Pic7CgogICAgICAgIHZhciBpbmZvd2luZG93MTUgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7CiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRTdHJpbmcxNSwKICAgICAgICB9KTsKCgogICAgICAgIHZhciBtYXJrZXIxNSA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoewogICAgICAgICAgICBwb3NpdGlvbjoge2xhdDogMzguMDI3MTc3MSAsIGxuZzotODQuNTExNDI0OX0sCiAgICAgICAgICAgIG1hcDogbWFwLCAgICAgICAgICAKICAgICAgICAgICAgaWNvbjogaWNvbiwKICAgICAgICAgICAgYW5pbWF0aW9uOiBnb29nbGUubWFwcy5BbmltYXRpb24uRFJPUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnb3V0JywKICAgICAgICAgICAgICAgICAgICAgfSk7CgoKCiAgICAgICAgZ21hcmtlcnMucHVzaChtYXJrZXIxNSk7CgoKICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA8PSA3NjcpIHsKCiAgICAgICAgICAgIG1hcmtlcjE1LmFkZExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgICAgIGlmKCBwcmV2X2luZm93aW5kb3cgKSAKICAgICAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cuY2xvc2UoKTsKCiAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cgPSBpbmZvd2luZG93MTU7CiAgICAgICAgICAgICAgICBpbmZvd2luZG93MTUub3BlbihtYXAsIG1hcmtlcjE1KTsKICAgICAgICAgICAgfSk7CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgICAgIG1hcmtlcjE1LmFkZExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgaWYoIHByZXZfaW5mb3dpbmRvdyApIAogICAgICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdy5jbG9zZSgpOwoKICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdyA9IGluZm93aW5kb3cxNTsKICAgICAgICAgICAgICAgIGluZm93aW5kb3cxNS5vcGVuKG1hcCwgbWFya2VyMTUpOwogICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgCgogICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhvdXRwYXRpZW50KTsKCiAgICAgICAgdmFyIGljb24gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICJodHRwczovL2pvdXJuZXlwdXJlLmNvbS93cC1jb250ZW50L3RoZW1lcy9Kb3VybmV5UHVyZTIyL2ltZy9tYXAtcGluLnBuZyIsIC8vIHVybCAKICAgICAgICAgICAgICAgIGFuY2hvcjogbmV3IGdvb2dsZS5tYXBzLlBvaW50KDUsMTUpLCAvLyBhbmNob3IKICAgICAgICAgICAgICAgIHNjYWxlZFNpemU6IG5ldyBnb29nbGUubWFwcy5TaXplKDE3LCAyNyksIC8vIHNjYWxlZCBzaXplICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgb3JpZ2luOiBuZXcgZ29vZ2xlLm1hcHMuUG9pbnQoMCwwKSwgLy8gb3JpZ2luCiAgICAgICAgfTsKCgogICAgICAgIHZhciBjb250ZW50U3RyaW5nMTYgPQogICAgICAgICc8ZGl2IGNsYXNzPSJ0ZXh0LWNlbnRlciIgaWQ9Im1hcC13aW5kb3ciPicgKyAgICAKICAgICAgICAnPGgyPkVsaXphYmV0aHRvd24gT1AgQ2xpbmljPC9oMj4nICsKICAgICAgICAnPGRpdj40MDAgUmluZyBSZC4gU3VpdGUgMTU1IEVsaXphYmV0aHRvd24sIEtZIDQyNzAxPC9kaXY+JyArICAgICAgICAKICAgICAgICAnPGRpdj48YSBjbGFzcz0iYnRuIGJ0bi1vdXRsaW5lLWRhcmsiIGhyZWY9Imh0dHBzOi8vam91cm5leXB1cmUuY29tL291dHBhdGllbnQvZWxpemFiZXRodG93bi8iIHRhcmdldD0iX2JsYW5rIj5MZWFybiBNb3JlPC9kaXY+JyArICAgICAKICAgICAgICAnPGRpdj48YSBocmVmPSI0MDAgUmluZyBSZC4gU3VpdGUgMTU1IEVsaXphYmV0aHRvd24sIEtZIDQyNzAxIiB0YXJnZXQ9Il9ibGFuayI+R2V0IERpcmVjdGlvbnM8L2Rpdj4nICsgICAgIAogICAgICAgICc8L2Rpdj4nOwoKICAgICAgICB2YXIgaW5mb3dpbmRvdzE2ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coewogICAgICAgICAgICBjb250ZW50OiBjb250ZW50U3RyaW5nMTYsCiAgICAgICAgfSk7CgoKICAgICAgICB2YXIgbWFya2VyMTYgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHsKICAgICAgICAgICAgcG9zaXRpb246IHtsYXQ6IDM3LjY5NDM5OTEgLCBsbmc6LTg1LjkxMjE2NTZ9LAogICAgICAgICAgICBtYXA6IG1hcCwgICAgICAgICAgCiAgICAgICAgICAgIGljb246IGljb24sCiAgICAgICAgICAgIGFuaW1hdGlvbjogZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkRST1AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeTogJ291dCcsCiAgICAgICAgICAgICAgICAgICAgIH0pOwoKCgogICAgICAgIGdtYXJrZXJzLnB1c2gobWFya2VyMTYpOwoKCiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggPD0gNzY3KSB7CgogICAgICAgICAgICBtYXJrZXIxNi5hZGRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgICAgICBpZiggcHJldl9pbmZvd2luZG93ICkgCiAgICAgICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93LmNsb3NlKCk7CgogICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93ID0gaW5mb3dpbmRvdzE2OwogICAgICAgICAgICAgICAgaW5mb3dpbmRvdzE2Lm9wZW4obWFwLCBtYXJrZXIxNik7CiAgICAgICAgICAgIH0pOwoKICAgICAgICB9IGVsc2UgewogICAgICAgIAogICAgICAgICAgICBtYXJrZXIxNi5hZGRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgIGlmKCBwcmV2X2luZm93aW5kb3cgKSAKICAgICAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cuY2xvc2UoKTsKCiAgICAgICAgICAgICAgICBwcmV2X2luZm93aW5kb3cgPSBpbmZvd2luZG93MTY7CiAgICAgICAgICAgICAgICBpbmZvd2luZG93MTYub3BlbihtYXAsIG1hcmtlcjE2KTsKICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIAoKICAgICAgICAgICAgLy8gY29uc29sZS5sb2cob3V0cGF0aWVudCk7CgogICAgICAgIHZhciBpY29uID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAiaHR0cHM6Ly9qb3VybmV5cHVyZS5jb20vd3AtY29udGVudC90aGVtZXMvSm91cm5leVB1cmUyMi9pbWcvbWFwLXBpbi5wbmciLCAvLyB1cmwgCiAgICAgICAgICAgICAgICBhbmNob3I6IG5ldyBnb29nbGUubWFwcy5Qb2ludCg1LDE1KSwgLy8gYW5jaG9yCiAgICAgICAgICAgICAgICBzY2FsZWRTaXplOiBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSgxNywgMjcpLCAvLyBzY2FsZWQgc2l6ZSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIG9yaWdpbjogbmV3IGdvb2dsZS5tYXBzLlBvaW50KDAsMCksIC8vIG9yaWdpbgogICAgICAgIH07CgoKICAgICAgICB2YXIgY29udGVudFN0cmluZzE3ID0KICAgICAgICAnPGRpdiBjbGFzcz0idGV4dC1jZW50ZXIiIGlkPSJtYXAtd2luZG93Ij4nICsgICAgCiAgICAgICAgJzxoMj5OYXNodmlsbGUgT1AgQ2xpbmljPC9oMj4nICsKICAgICAgICAnPGRpdj4yMTEgRG9uZWxzb24gUGlrZSwgU3VpdGUgMTEgJiAxMiwgTmFzaHZpbGxlLCBUTiAzNzIxNDwvZGl2PicgKyAgICAgICAgCiAgICAgICAgJzxkaXY+PGEgY2xhc3M9ImJ0biBidG4tb3V0bGluZS1kYXJrIiBocmVmPSJodHRwczovL2pvdXJuZXlwdXJlLmNvbS9vdXRwYXRpZW50L25hc2h2aWxsZS8iIHRhcmdldD0iX2JsYW5rIj5MZWFybiBNb3JlPC9kaXY+JyArICAgICAKICAgICAgICAnPGRpdj48YSBocmVmPSIyMTEgRG9uZWxzb24gUGlrZSwgU3VpdGUgMTEgJiAxMiwgTmFzaHZpbGxlLCBUTiAzNzIxNCIgdGFyZ2V0PSJfYmxhbmsiPkdldCBEaXJlY3Rpb25zPC9kaXY+JyArICAgICAKICAgICAgICAnPC9kaXY+JzsKCiAgICAgICAgdmFyIGluZm93aW5kb3cxNyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KHsKICAgICAgICAgICAgY29udGVudDogY29udGVudFN0cmluZzE3LAogICAgICAgIH0pOwoKCiAgICAgICAgdmFyIG1hcmtlcjE3ID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7CiAgICAgICAgICAgIHBvc2l0aW9uOiB7bGF0OiAzNi4xNjIwMDM2ICwgbG5nOi04Ni42NjM0Njk1fSwKICAgICAgICAgICAgbWFwOiBtYXAsICAgICAgICAgIAogICAgICAgICAgICBpY29uOiBpY29uLAogICAgICAgICAgICBhbmltYXRpb246IGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5EUk9QLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6ICdvdXQnLAogICAgICAgICAgICAgICAgICAgICB9KTsKCgoKICAgICAgICBnbWFya2Vycy5wdXNoKG1hcmtlcjE3KTsKCgogICAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIDw9IDc2NykgewoKICAgICAgICAgICAgbWFya2VyMTcuYWRkTGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICAgICAgaWYoIHByZXZfaW5mb3dpbmRvdyApIAogICAgICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdy5jbG9zZSgpOwoKICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdyA9IGluZm93aW5kb3cxNzsKICAgICAgICAgICAgICAgIGluZm93aW5kb3cxNy5vcGVuKG1hcCwgbWFya2VyMTcpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAKICAgICAgICAgICAgbWFya2VyMTcuYWRkTGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICBpZiggcHJldl9pbmZvd2luZG93ICkgCiAgICAgICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93LmNsb3NlKCk7CgogICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93ID0gaW5mb3dpbmRvdzE3OwogICAgICAgICAgICAgICAgaW5mb3dpbmRvdzE3Lm9wZW4obWFwLCBtYXJrZXIxNyk7CiAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICAKCiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG91dHBhdGllbnQpOwoKICAgICAgICB2YXIgaWNvbiA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogImh0dHBzOi8vam91cm5leXB1cmUuY29tL3dwLWNvbnRlbnQvdGhlbWVzL0pvdXJuZXlQdXJlMjIvaW1nL21hcC1waW4ucG5nIiwgLy8gdXJsIAogICAgICAgICAgICAgICAgYW5jaG9yOiBuZXcgZ29vZ2xlLm1hcHMuUG9pbnQoNSwxNSksIC8vIGFuY2hvcgogICAgICAgICAgICAgICAgc2NhbGVkU2l6ZTogbmV3IGdvb2dsZS5tYXBzLlNpemUoMTcsIDI3KSwgLy8gc2NhbGVkIHNpemUgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBvcmlnaW46IG5ldyBnb29nbGUubWFwcy5Qb2ludCgwLDApLCAvLyBvcmlnaW4KICAgICAgICB9OwoKCiAgICAgICAgdmFyIGNvbnRlbnRTdHJpbmcxOCA9CiAgICAgICAgJzxkaXYgY2xhc3M9InRleHQtY2VudGVyIiBpZD0ibWFwLXdpbmRvdyI+JyArICAgIAogICAgICAgICc8aDI+Qm93bGluZyBHcmVlbiBPUCBDbGluaWM8L2gyPicgKwogICAgICAgICc8ZGl2PjE5MDEgU2NvdHRzdmlsbGUgUmQgQm93bGluZyBHcmVlbiwgS1kgNDIxMDQ8L2Rpdj4nICsgICAgICAgIAogICAgICAgICc8ZGl2PjxhIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtZGFyayIgaHJlZj0iaHR0cHM6Ly9qb3VybmV5cHVyZS5jb20vb3V0cGF0aWVudC9ib3dsaW5nLWdyZWVuLyIgdGFyZ2V0PSJfYmxhbmsiPkxlYXJuIE1vcmU8L2Rpdj4nICsgICAgIAogICAgICAgICc8ZGl2PjxhIGhyZWY9IjE5MDEgU2NvdHRzdmlsbGUgUmQgQm93bGluZyBHcmVlbiwgS1kgNDIxMDQiIHRhcmdldD0iX2JsYW5rIj5HZXQgRGlyZWN0aW9uczwvZGl2PicgKyAgICAgCiAgICAgICAgJzwvZGl2Pic7CgogICAgICAgIHZhciBpbmZvd2luZG93MTggPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7CiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRTdHJpbmcxOCwKICAgICAgICB9KTsKCgogICAgICAgIHZhciBtYXJrZXIxOCA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoewogICAgICAgICAgICBwb3NpdGlvbjoge2xhdDogMzYuOTYzNzYzICwgbG5nOi04Ni40MzE5MDcxfSwKICAgICAgICAgICAgbWFwOiBtYXAsICAgICAgICAgIAogICAgICAgICAgICBpY29uOiBpY29uLAogICAgICAgICAgICBhbmltYXRpb246IGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5EUk9QLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6ICdvdXQnLAogICAgICAgICAgICAgICAgICAgICB9KTsKCgoKICAgICAgICBnbWFya2Vycy5wdXNoKG1hcmtlcjE4KTsKCgogICAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIDw9IDc2NykgewoKICAgICAgICAgICAgbWFya2VyMTguYWRkTGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICAgICAgaWYoIHByZXZfaW5mb3dpbmRvdyApIAogICAgICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdy5jbG9zZSgpOwoKICAgICAgICAgICAgICAgIHByZXZfaW5mb3dpbmRvdyA9IGluZm93aW5kb3cxODsKICAgICAgICAgICAgICAgIGluZm93aW5kb3cxOC5vcGVuKG1hcCwgbWFya2VyMTgpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAKICAgICAgICAgICAgbWFya2VyMTguYWRkTGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICBpZiggcHJldl9pbmZvd2luZG93ICkgCiAgICAgICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93LmNsb3NlKCk7CgogICAgICAgICAgICAgICAgcHJldl9pbmZvd2luZG93ID0gaW5mb3dpbmRvdzE4OwogICAgICAgICAgICAgICAgaW5mb3dpbmRvdzE4Lm9wZW4obWFwLCBtYXJrZXIxOCk7CiAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICAKCiAgICAgCiAgICAKICAgIH0KCiAgICAKCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKICAgICAgICBpbml0TWFwKCk7CgoKICAgICAgICAvLyBJZiBpcyBzYW1lIGNhdGVnb3J5IG9yIGNhdGVnb3J5IG5vdCBwaWNrZWQKICAgICAgICBmdW5jdGlvbiBmaWx0ZXJNYXJrZXJzKGNhdGVnb3J5KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZ21hcmtlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSBnbWFya2Vyc1tpXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG1hcmtlci5jYXRlZ29yeSk7CiAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpcyBzYW1lIGNhdGVnb3J5IG9yIGNhdGVnb3J5IG5vdCBwaWNrZWQKICAgICAgICAgICAgICAgICAgICAgIGlmKG1hcmtlci5jYXRlZ29yeSA9PSBjYXRlZ29yeSB8fCBjYXRlZ29yeS5sZW5ndGggPT0gMCkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyLnNldFZpc2libGUodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAvLyBDYXRlZ29yaWVzIGRvbid0IG1hdGNoIAogICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgeyAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyLnNldFZpc2libGUoZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgfSAgCiAgICAgICAgfQoKICAgICAgICAvLyBNYXAgRmlsdHJhdGlvbgogICAgICAgICQoIi5maWx0ZXItaW5wYXRpZW50IikuY2xpY2soZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGZpbHRlck1hcmtlcnMoJ2lucCcpOwogICAgICAgICAgICBjb25zb2xlLmxvZygiZmlsdGVyaW5nIGlucGF0aWVudCIpOwogICAgICAgIH0pOwoKCiAgICAgICAgIC8vIE1hcCBGaWx0cmF0aW9uCiAgICAgICAgJCgiLmZpbHRlci1vdXRwYXRpZW50IikuY2xpY2soZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGZpbHRlck1hcmtlcnMoJ291dCcpOwogICAgICAgICAgICBjb25zb2xlLmxvZygiZmlsdGVyaW5nIG91dHBhdGllbnQiKTsKICAgICAgICB9KTsKCgogICAgfSk7Cgo=
19 ms
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLG8pOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImdmb3JtX21haW5fc2NyaXB0c19sb2FkZWQiLG8pfSxob29rczp7YWN0aW9uOnt9LGZpbHRlcjp7fX0sYWRkQWN0aW9uOmZ1bmN0aW9uKG8sbixyLHQpe2dmb3JtLmFkZEhvb2soImFjdGlvbiIsbyxuLHIsdCl9LGFkZEZpbHRlcjpmdW5jdGlvbihvLG4scix0KXtnZm9ybS5hZGRIb29rKCJmaWx0ZXIiLG8sbixyLHQpfSxkb0FjdGlvbjpmdW5jdGlvbihvKXtnZm9ybS5kb0hvb2soImFjdGlvbiIsbyxhcmd1bWVudHMpfSxhcHBseUZpbHRlcnM6ZnVuY3Rpb24obyl7cmV0dXJuIGdmb3JtLmRvSG9vaygiZmlsdGVyIixvLGFyZ3VtZW50cyl9LHJlbW92ZUFjdGlvbjpmdW5jdGlvbihvLG4pe2dmb3JtLnJlbW92ZUhvb2soImFjdGlvbiIsbyxuKX0scmVtb3ZlRmlsdGVyOmZ1bmN0aW9uKG8sbixyKXtnZm9ybS5yZW1vdmVIb29rKCJmaWx0ZXIiLG8sbixyKX0sYWRkSG9vazpmdW5jdGlvbihvLG4scix0LGkpe251bGw9PWdmb3JtLmhvb2tzW29dW25dJiYoZ2Zvcm0uaG9va3Nbb11bbl09W10pO3ZhciBlPWdmb3JtLmhvb2tzW29dW25dO251bGw9PWkmJihpPW4rIl8iK2UubGVuZ3RoKSxnZm9ybS5ob29rc1tvXVtuXS5wdXNoKHt0YWc6aSxjYWxsYWJsZTpyLHByaW9yaXR5OnQ9bnVsbD09dD8xMDp0fSl9LGRvSG9vazpmdW5jdGlvbihuLG8scil7dmFyIHQ7aWYocj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyLDEpLG51bGwhPWdmb3JtLmhvb2tzW25dW29dJiYoKG89Z2Zvcm0uaG9va3Nbbl1bb10pLnNvcnQoZnVuY3Rpb24obyxuKXtyZXR1cm4gby5wcmlvcml0eS1uLnByaW9yaXR5fSksby5mb3JFYWNoKGZ1bmN0aW9uKG8peyJmdW5jdGlvbiIhPXR5cGVvZih0PW8uY2FsbGFibGUpJiYodD13aW5kb3dbdF0pLCJhY3Rpb24iPT1uP3QuYXBwbHkobnVsbCxyKTpyWzBdPXQuYXBwbHkobnVsbCxyKX0pKSwiZmlsdGVyIj09bilyZXR1cm4gclswXX0scmVtb3ZlSG9vazpmdW5jdGlvbihvLG4sdCxpKXt2YXIgcjtudWxsIT1nZm9ybS5ob29rc1tvXVtuXSYmKHI9KHI9Z2Zvcm0uaG9va3Nbb11bbl0pLmZpbHRlcihmdW5jdGlvbihvLG4scil7cmV0dXJuISEobnVsbCE9aSYmaSE9by50YWd8fG51bGwhPXQmJnQhPW8ucHJpb3JpdHkpfSksZ2Zvcm0uaG9va3Nbb11bbl09cil9fSk7
18 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwogZ2Zvcm0uaW5pdGlhbGl6ZU9uTG9hZGVkKCBmdW5jdGlvbigpIHtnZm9ybUluaXRTcGlubmVyKCAzLCAnaHR0cHM6Ly9qb3VybmV5cHVyZS5jb20vd3AtY29udGVudC9wbHVnaW5zL2dyYXZpdHlmb3Jtcy9pbWFnZXMvc3Bpbm5lci5zdmcnLCB0cnVlICk7alF1ZXJ5KCcjZ2Zvcm1fYWpheF9mcmFtZV8zJykub24oJ2xvYWQnLGZ1bmN0aW9uKCl7dmFyIGNvbnRlbnRzID0galF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkuZmluZCgnKicpLmh0bWwoKTt2YXIgaXNfcG9zdGJhY2sgPSBjb250ZW50cy5pbmRleE9mKCdHRl9BSkFYX1BPU1RCQUNLJykgPj0gMDtpZighaXNfcG9zdGJhY2spe3JldHVybjt9dmFyIGZvcm1fY29udGVudCA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJyNnZm9ybV93cmFwcGVyXzMnKTt2YXIgaXNfY29uZmlybWF0aW9uID0galF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkuZmluZCgnI2dmb3JtX2NvbmZpcm1hdGlvbl93cmFwcGVyXzMnKS5sZW5ndGggPiAwO3ZhciBpc19yZWRpcmVjdCA9IGNvbnRlbnRzLmluZGV4T2YoJ2dmb3JtUmVkaXJlY3QoKXsnKSA+PSAwO3ZhciBpc19mb3JtID0gZm9ybV9jb250ZW50Lmxlbmd0aCA+IDAgJiYgISBpc19yZWRpcmVjdCAmJiAhIGlzX2NvbmZpcm1hdGlvbjt2YXIgbXQgPSBwYXJzZUludChqUXVlcnkoJ2h0bWwnKS5jc3MoJ21hcmdpbi10b3AnKSwgMTApICsgcGFyc2VJbnQoalF1ZXJ5KCdib2R5JykuY3NzKCdtYXJnaW4tdG9wJyksIDEwKSArIDEwMDtpZihpc19mb3JtKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzMnKS5odG1sKGZvcm1fY29udGVudC5odG1sKCkpO2lmKGZvcm1fY29udGVudC5oYXNDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzMnKS5hZGRDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpO30gZWxzZSB7alF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl8zJykucmVtb3ZlQ2xhc3MoJ2dmb3JtX3ZhbGlkYXRpb25fZXJyb3InKTt9c2V0VGltZW91dCggZnVuY3Rpb24oKSB7IC8qIGRlbGF5IHRoZSBzY3JvbGwgYnkgNTAgbWlsbGlzZWNvbmRzIHRvIGZpeCBhIGJ1ZyBpbiBjaHJvbWUgKi8galF1ZXJ5KGRvY3VtZW50KS5zY3JvbGxUb3AoalF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl8zJykub2Zmc2V0KCkudG9wIC0gbXQpOyB9LCA1MCApO2lmKHdpbmRvd1snZ2Zvcm1Jbml0RGF0ZXBpY2tlciddKSB7Z2Zvcm1Jbml0RGF0ZXBpY2tlcigpO31pZih3aW5kb3dbJ2dmb3JtSW5pdFByaWNlRmllbGRzJ10pIHtnZm9ybUluaXRQcmljZUZpZWxkcygpO312YXIgY3VycmVudF9wYWdlID0galF1ZXJ5KCcjZ2Zvcm1fc291cmNlX3BhZ2VfbnVtYmVyXzMnKS52YWwoKTtnZm9ybUluaXRTcGlubmVyKCAzLCAnaHR0cHM6Ly9qb3VybmV5cHVyZS5jb20vd3AtY29udGVudC9wbHVnaW5zL2dyYXZpdHlmb3Jtcy9pbWFnZXMvc3Bpbm5lci5zdmcnLCB0cnVlICk7alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9wYWdlX2xvYWRlZCcsIFszLCBjdXJyZW50X3BhZ2VdKTt3aW5kb3dbJ2dmX3N1Ym1pdHRpbmdfMyddID0gZmFsc2U7fWVsc2UgaWYoIWlzX3JlZGlyZWN0KXt2YXIgY29uZmlybWF0aW9uX2NvbnRlbnQgPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcuR0ZfQUpBWF9QT1NUQkFDSycpLmh0bWwoKTtpZighY29uZmlybWF0aW9uX2NvbnRlbnQpe2NvbmZpcm1hdGlvbl9jb250ZW50ID0gY29udGVudHM7fWpRdWVyeSgnI2dmb3JtX3dyYXBwZXJfMycpLnJlcGxhY2VXaXRoKGNvbmZpcm1hdGlvbl9jb250ZW50KTtqUXVlcnkoZG9jdW1lbnQpLnNjcm9sbFRvcChqUXVlcnkoJyNnZl8zJykub2Zmc2V0KCkudG9wIC0gbXQpO2pRdWVyeShkb2N1bWVudCkudHJpZ2dlcignZ2Zvcm1fY29uZmlybWF0aW9uX2xvYWRlZCcsIFszXSk7d2luZG93WydnZl9zdWJtaXR0aW5nXzMnXSA9IGZhbHNlO3dwLmExMXkuc3BlYWsoalF1ZXJ5KCcjZ2Zvcm1fY29uZmlybWF0aW9uX21lc3NhZ2VfMycpLnRleHQoKSk7fWVsc2V7alF1ZXJ5KCcjZ2Zvcm1fMycpLmFwcGVuZChjb250ZW50cyk7aWYod2luZG93WydnZm9ybVJlZGlyZWN0J10pIHtnZm9ybVJlZGlyZWN0KCk7fX1qUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoImdmb3JtX3ByZV9wb3N0X3JlbmRlciIsIFt7IGZvcm1JZDogIjMiLCBjdXJyZW50UGFnZTogImN1cnJlbnRfcGFnZSIsIGFib3J0OiBmdW5jdGlvbigpIHsgdGhpcy5wcmV2ZW50RGVmYXVsdCgpOyB9IH1dKTsgICAgICAgICAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHsgICAgICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgIH0gICAgICAgIGNvbnN0IGdmb3JtV3JhcHBlckRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAiZ2Zvcm1fd3JhcHBlcl8zIiApOyAgICAgICAgaWYgKCBnZm9ybVdyYXBwZXJEaXYgKSB7ICAgICAgICAgICAgY29uc3QgdmlzaWJpbGl0eVNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAic3BhbiIgKTsgICAgICAgICAgICB2aXNpYmlsaXR5U3Bhbi5pZCA9ICJnZm9ybV92aXNpYmlsaXR5X3Rlc3RfMyI7ICAgICAgICAgICAgZ2Zvcm1XcmFwcGVyRGl2Lmluc2VydEFkamFjZW50RWxlbWVudCggImFmdGVyZW5kIiwgdmlzaWJpbGl0eVNwYW4gKTsgICAgICAgIH0gICAgICAgIGNvbnN0IHZpc2liaWxpdHlUZXN0RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICJnZm9ybV92aXNpYmlsaXR5X3Rlc3RfMyIgKTsgICAgICAgIGxldCBwb3N0UmVuZGVyRmlyZWQgPSBmYWxzZTsgICAgICAgICAgICAgICAgZnVuY3Rpb24gdHJpZ2dlclBvc3RSZW5kZXIoKSB7ICAgICAgICAgICAgaWYgKCBwb3N0UmVuZGVyRmlyZWQgKSB7ICAgICAgICAgICAgICAgIHJldHVybjsgICAgICAgICAgICB9ICAgICAgICAgICAgcG9zdFJlbmRlckZpcmVkID0gdHJ1ZTsgICAgICAgICAgICBqUXVlcnkoIGRvY3VtZW50ICkudHJpZ2dlciggJ2dmb3JtX3Bvc3RfcmVuZGVyJywgWzMsIGN1cnJlbnRfcGFnZV0gKTsgICAgICAgICAgICBnZm9ybS51dGlscy50cmlnZ2VyKCB7IGV2ZW50OiAnZ2Zvcm0vcG9zdFJlbmRlcicsIG5hdGl2ZTogZmFsc2UsIGRhdGE6IHsgZm9ybUlkOiAzLCBjdXJyZW50UGFnZTogY3VycmVudF9wYWdlIH0gfSApOyAgICAgICAgICAgIGlmICggdmlzaWJpbGl0eVRlc3REaXYgKSB7ICAgICAgICAgICAgICAgIHZpc2liaWxpdHlUZXN0RGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHZpc2liaWxpdHlUZXN0RGl2ICk7ICAgICAgICAgICAgfSAgICAgICAgfSAgICAgICAgZnVuY3Rpb24gZGVib3VuY2UoIGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSApIHsgICAgICAgICAgICB2YXIgdGltZW91dDsgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7ICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgICAgICAgICAgICAgICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7ICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDsgICAgICAgICAgICAgICAgICAgIGlmICggIWltbWVkaWF0ZSApIGZ1bmMuYXBwbHkoIGNvbnRleHQsIGFyZ3MgKTsgICAgICAgICAgICAgICAgfTsgICAgICAgICAgICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7ICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCggdGltZW91dCApOyAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCggbGF0ZXIsIHdhaXQgKTsgICAgICAgICAgICAgICAgaWYgKCBjYWxsTm93ICkgZnVuYy5hcHBseSggY29udGV4dCwgYXJncyApOyAgICAgICAgICAgIH07ICAgICAgICB9ICAgICAgICBjb25zdCBkZWJvdW5jZWRUcmlnZ2VyUG9zdFJlbmRlciA9IGRlYm91bmNlKCBmdW5jdGlvbigpIHsgICAgICAgICAgICB0cmlnZ2VyUG9zdFJlbmRlcigpOyAgICAgICAgfSwgMjAwICk7ICAgICAgICBpZiAoIHZpc2liaWxpdHlUZXN0RGl2ICYmIHZpc2liaWxpdHlUZXN0RGl2Lm9mZnNldFBhcmVudCA9PT0gbnVsbCApIHsgICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCAoIG11dGF0aW9ucyApID0+IHsgICAgICAgICAgICAgICAgbXV0YXRpb25zLmZvckVhY2goICggbXV0YXRpb24gKSA9PiB7ICAgICAgICAgICAgICAgICAgICBpZiAoIG11dGF0aW9uLnR5cGUgPT09ICdhdHRyaWJ1dGVzJyAmJiB2aXNpYmlsaXR5VGVzdERpdi5vZmZzZXRQYXJlbnQgIT09IG51bGwgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VkVHJpZ2dlclBvc3RSZW5kZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7ICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgIH0pOyAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoIGRvY3VtZW50LmJvZHksIHsgICAgICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwgICAgICAgICAgICAgICAgY2hpbGRMaXN0OiBmYWxzZSwgICAgICAgICAgICAgICAgc3VidHJlZTogdHJ1ZSwgICAgICAgICAgICAgICAgYXR0cmlidXRlRmlsdGVyOiBbICdzdHlsZScsICdjbGFzcycgXSwgICAgICAgICAgICB9KTsgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgdHJpZ2dlclBvc3RSZW5kZXIoKTsgICAgICAgIH0gICAgfSApO30gKTsgCi8qIF1dPiAqLwo=
17 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwogZ2Zvcm0uaW5pdGlhbGl6ZU9uTG9hZGVkKCBmdW5jdGlvbigpIHtnZm9ybUluaXRTcGlubmVyKCAyLCAnaHR0cHM6Ly9qb3VybmV5cHVyZS5jb20vd3AtY29udGVudC9wbHVnaW5zL2dyYXZpdHlmb3Jtcy9pbWFnZXMvc3Bpbm5lci5zdmcnLCB0cnVlICk7alF1ZXJ5KCcjZ2Zvcm1fYWpheF9mcmFtZV8yJykub24oJ2xvYWQnLGZ1bmN0aW9uKCl7dmFyIGNvbnRlbnRzID0galF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkuZmluZCgnKicpLmh0bWwoKTt2YXIgaXNfcG9zdGJhY2sgPSBjb250ZW50cy5pbmRleE9mKCdHRl9BSkFYX1BPU1RCQUNLJykgPj0gMDtpZighaXNfcG9zdGJhY2spe3JldHVybjt9dmFyIGZvcm1fY29udGVudCA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJyNnZm9ybV93cmFwcGVyXzInKTt2YXIgaXNfY29uZmlybWF0aW9uID0galF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkuZmluZCgnI2dmb3JtX2NvbmZpcm1hdGlvbl93cmFwcGVyXzInKS5sZW5ndGggPiAwO3ZhciBpc19yZWRpcmVjdCA9IGNvbnRlbnRzLmluZGV4T2YoJ2dmb3JtUmVkaXJlY3QoKXsnKSA+PSAwO3ZhciBpc19mb3JtID0gZm9ybV9jb250ZW50Lmxlbmd0aCA+IDAgJiYgISBpc19yZWRpcmVjdCAmJiAhIGlzX2NvbmZpcm1hdGlvbjt2YXIgbXQgPSBwYXJzZUludChqUXVlcnkoJ2h0bWwnKS5jc3MoJ21hcmdpbi10b3AnKSwgMTApICsgcGFyc2VJbnQoalF1ZXJ5KCdib2R5JykuY3NzKCdtYXJnaW4tdG9wJyksIDEwKSArIDEwMDtpZihpc19mb3JtKXtmb3JtX2NvbnRlbnQuZmluZCgnZm9ybScpLmNzcygnb3BhY2l0eScsIDApO2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfMicpLmh0bWwoZm9ybV9jb250ZW50Lmh0bWwoKSk7aWYoZm9ybV9jb250ZW50Lmhhc0NsYXNzKCdnZm9ybV92YWxpZGF0aW9uX2Vycm9yJykpe2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfMicpLmFkZENsYXNzKCdnZm9ybV92YWxpZGF0aW9uX2Vycm9yJyk7fSBlbHNlIHtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzInKS5yZW1vdmVDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpO31zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsgLyogZGVsYXkgdGhlIHNjcm9sbCBieSA1MCBtaWxsaXNlY29uZHMgdG8gZml4IGEgYnVnIGluIGNocm9tZSAqLyBqUXVlcnkoZG9jdW1lbnQpLnNjcm9sbFRvcChqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzInKS5vZmZzZXQoKS50b3AgLSBtdCk7IH0sIDUwICk7aWYod2luZG93WydnZm9ybUluaXREYXRlcGlja2VyJ10pIHtnZm9ybUluaXREYXRlcGlja2VyKCk7fWlmKHdpbmRvd1snZ2Zvcm1Jbml0UHJpY2VGaWVsZHMnXSkge2dmb3JtSW5pdFByaWNlRmllbGRzKCk7fXZhciBjdXJyZW50X3BhZ2UgPSBqUXVlcnkoJyNnZm9ybV9zb3VyY2VfcGFnZV9udW1iZXJfMicpLnZhbCgpO2dmb3JtSW5pdFNwaW5uZXIoIDIsICdodHRwczovL2pvdXJuZXlwdXJlLmNvbS93cC1jb250ZW50L3BsdWdpbnMvZ3Jhdml0eWZvcm1zL2ltYWdlcy9zcGlubmVyLnN2ZycsIHRydWUgKTtqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoJ2dmb3JtX3BhZ2VfbG9hZGVkJywgWzIsIGN1cnJlbnRfcGFnZV0pO3dpbmRvd1snZ2Zfc3VibWl0dGluZ18yJ10gPSBmYWxzZTt9ZWxzZSBpZighaXNfcmVkaXJlY3Qpe3ZhciBjb25maXJtYXRpb25fY29udGVudCA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJy5HRl9BSkFYX1BPU1RCQUNLJykuaHRtbCgpO2lmKCFjb25maXJtYXRpb25fY29udGVudCl7Y29uZmlybWF0aW9uX2NvbnRlbnQgPSBjb250ZW50czt9alF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl8yJykucmVwbGFjZVdpdGgoY29uZmlybWF0aW9uX2NvbnRlbnQpO2pRdWVyeShkb2N1bWVudCkuc2Nyb2xsVG9wKGpRdWVyeSgnI2dmXzInKS5vZmZzZXQoKS50b3AgLSBtdCk7alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9jb25maXJtYXRpb25fbG9hZGVkJywgWzJdKTt3aW5kb3dbJ2dmX3N1Ym1pdHRpbmdfMiddID0gZmFsc2U7d3AuYTExeS5zcGVhayhqUXVlcnkoJyNnZm9ybV9jb25maXJtYXRpb25fbWVzc2FnZV8yJykudGV4dCgpKTt9ZWxzZXtqUXVlcnkoJyNnZm9ybV8yJykuYXBwZW5kKGNvbnRlbnRzKTtpZih3aW5kb3dbJ2dmb3JtUmVkaXJlY3QnXSkge2dmb3JtUmVkaXJlY3QoKTt9fWpRdWVyeShkb2N1bWVudCkudHJpZ2dlcigiZ2Zvcm1fcHJlX3Bvc3RfcmVuZGVyIiwgW3sgZm9ybUlkOiAiMiIsIGN1cnJlbnRQYWdlOiAiY3VycmVudF9wYWdlIiwgYWJvcnQ6IGZ1bmN0aW9uKCkgeyB0aGlzLnByZXZlbnREZWZhdWx0KCk7IH0gfV0pOyAgICAgICAgICAgICAgICBpZiAoZXZlbnQgJiYgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgeyAgICAgICAgICAgICAgICByZXR1cm47ICAgICAgICAgfSAgICAgICAgY29uc3QgZ2Zvcm1XcmFwcGVyRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICJnZm9ybV93cmFwcGVyXzIiICk7ICAgICAgICBpZiAoIGdmb3JtV3JhcHBlckRpdiApIHsgICAgICAgICAgICBjb25zdCB2aXNpYmlsaXR5U3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJzcGFuIiApOyAgICAgICAgICAgIHZpc2liaWxpdHlTcGFuLmlkID0gImdmb3JtX3Zpc2liaWxpdHlfdGVzdF8yIjsgICAgICAgICAgICBnZm9ybVdyYXBwZXJEaXYuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCAiYWZ0ZXJlbmQiLCB2aXNpYmlsaXR5U3BhbiApOyAgICAgICAgfSAgICAgICAgY29uc3QgdmlzaWJpbGl0eVRlc3REaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggImdmb3JtX3Zpc2liaWxpdHlfdGVzdF8yIiApOyAgICAgICAgbGV0IHBvc3RSZW5kZXJGaXJlZCA9IGZhbHNlOyAgICAgICAgICAgICAgICBmdW5jdGlvbiB0cmlnZ2VyUG9zdFJlbmRlcigpIHsgICAgICAgICAgICBpZiAoIHBvc3RSZW5kZXJGaXJlZCApIHsgICAgICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgICAgIH0gICAgICAgICAgICBwb3N0UmVuZGVyRmlyZWQgPSB0cnVlOyAgICAgICAgICAgIGpRdWVyeSggZG9jdW1lbnQgKS50cmlnZ2VyKCAnZ2Zvcm1fcG9zdF9yZW5kZXInLCBbMiwgY3VycmVudF9wYWdlXSApOyAgICAgICAgICAgIGdmb3JtLnV0aWxzLnRyaWdnZXIoIHsgZXZlbnQ6ICdnZm9ybS9wb3N0UmVuZGVyJywgbmF0aXZlOiBmYWxzZSwgZGF0YTogeyBmb3JtSWQ6IDIsIGN1cnJlbnRQYWdlOiBjdXJyZW50X3BhZ2UgfSB9ICk7ICAgICAgICAgICAgaWYgKCB2aXNpYmlsaXR5VGVzdERpdiApIHsgICAgICAgICAgICAgICAgdmlzaWJpbGl0eVRlc3REaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdmlzaWJpbGl0eVRlc3REaXYgKTsgICAgICAgICAgICB9ICAgICAgICB9ICAgICAgICBmdW5jdGlvbiBkZWJvdW5jZSggZnVuYywgd2FpdCwgaW1tZWRpYXRlICkgeyAgICAgICAgICAgIHZhciB0aW1lb3V0OyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsgICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyAgICAgICAgICAgICAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHsgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsOyAgICAgICAgICAgICAgICAgICAgaWYgKCAhaW1tZWRpYXRlICkgZnVuYy5hcHBseSggY29udGV4dCwgYXJncyApOyAgICAgICAgICAgICAgICB9OyAgICAgICAgICAgICAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDsgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7ICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBsYXRlciwgd2FpdCApOyAgICAgICAgICAgICAgICBpZiAoIGNhbGxOb3cgKSBmdW5jLmFwcGx5KCBjb250ZXh0LCBhcmdzICk7ICAgICAgICAgICAgfTsgICAgICAgIH0gICAgICAgIGNvbnN0IGRlYm91bmNlZFRyaWdnZXJQb3N0UmVuZGVyID0gZGVib3VuY2UoIGZ1bmN0aW9uKCkgeyAgICAgICAgICAgIHRyaWdnZXJQb3N0UmVuZGVyKCk7ICAgICAgICB9LCAyMDAgKTsgICAgICAgIGlmICggdmlzaWJpbGl0eVRlc3REaXYgJiYgdmlzaWJpbGl0eVRlc3REaXYub2Zmc2V0UGFyZW50ID09PSBudWxsICkgeyAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoICggbXV0YXRpb25zICkgPT4geyAgICAgICAgICAgICAgICBtdXRhdGlvbnMuZm9yRWFjaCggKCBtdXRhdGlvbiApID0+IHsgICAgICAgICAgICAgICAgICAgIGlmICggbXV0YXRpb24udHlwZSA9PT0gJ2F0dHJpYnV0ZXMnICYmIHZpc2liaWxpdHlUZXN0RGl2Lm9mZnNldFBhcmVudCAhPT0gbnVsbCApIHsgICAgICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZWRUcmlnZ2VyUG9zdFJlbmRlcigpOyAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgfSk7ICAgICAgICAgICAgfSk7ICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSggZG9jdW1lbnQuYm9keSwgeyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLCAgICAgICAgICAgICAgICBjaGlsZExpc3Q6IGZhbHNlLCAgICAgICAgICAgICAgICBzdWJ0cmVlOiB0cnVlLCAgICAgICAgICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsgJ3N0eWxlJywgJ2NsYXNzJyBdLCAgICAgICAgICAgIH0pOyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICB0cmlnZ2VyUG9zdFJlbmRlcigpOyAgICAgICAgfSAgICB9ICk7fSApOyAKLyogXV0+ICovCg==
13 ms
javascript;base64,CmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICd3cGNmN21haWxzZW50JywgZnVuY3Rpb24oIGV2ZW50ICkgewogIHRyeSB7IF9fY3RtLnRyYWNrZXIudHJhY2tFdmVudCgiIiwgIiAiLCAiZm9ybSIpOyBfX2N0bS50cmFja2VyLnBvcFF1ZXVlKCk7IH0gY2F0Y2goZSkgeyBjb25zb2xlLmxvZyhlKTsgfQp9LCBmYWxzZSApOwo=
13 ms
lazysizes.min.js
144 ms
basic.min.css
154 ms
theme-ie11.min.css
167 ms
theme.min.css
180 ms
dashicons.min.css
212 ms
dom-ready.min.js
183 ms
hooks.min.js
184 ms
i18n.min.js
182 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwp3cC5pMThuLnNldExvY2FsZURhdGEoIHsgJ3RleHQgZGlyZWN0aW9uXHUwMDA0bHRyJzogWyAnbHRyJyBdIH0gKTsKLyogXV0+ICovCg==
9 ms
a11y.min.js
195 ms
jquery.json.min.js
202 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwp2YXIgZ2Zvcm1faTE4biA9IHsiZGF0ZXBpY2tlciI6eyJkYXlzIjp7Im1vbmRheSI6Ik1vIiwidHVlc2RheSI6IlR1Iiwid2VkbmVzZGF5IjoiV2UiLCJ0aHVyc2RheSI6IlRoIiwiZnJpZGF5IjoiRnIiLCJzYXR1cmRheSI6IlNhIiwic3VuZGF5IjoiU3UifSwibW9udGhzIjp7ImphbnVhcnkiOiJKYW51YXJ5IiwiZmVicnVhcnkiOiJGZWJydWFyeSIsIm1hcmNoIjoiTWFyY2giLCJhcHJpbCI6IkFwcmlsIiwibWF5IjoiTWF5IiwianVuZSI6Ikp1bmUiLCJqdWx5IjoiSnVseSIsImF1Z3VzdCI6IkF1Z3VzdCIsInNlcHRlbWJlciI6IlNlcHRlbWJlciIsIm9jdG9iZXIiOiJPY3RvYmVyIiwibm92ZW1iZXIiOiJOb3ZlbWJlciIsImRlY2VtYmVyIjoiRGVjZW1iZXIifSwiZmlyc3REYXkiOjEsImljb25UZXh0IjoiU2VsZWN0IGRhdGUifX07CnZhciBnZl9sZWdhY3lfbXVsdGkgPSBbXTsKdmFyIGdmb3JtX2dyYXZpdHlmb3JtcyA9IHsic3RyaW5ncyI6eyJpbnZhbGlkX2ZpbGVfZXh0ZW5zaW9uIjoiVGhpcyB0eXBlIG9mIGZpbGUgaXMgbm90IGFsbG93ZWQuIE11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IiwiZGVsZXRlX2ZpbGUiOiJEZWxldGUgdGhpcyBmaWxlIiwiaW5fcHJvZ3Jlc3MiOiJpbiBwcm9ncmVzcyIsImZpbGVfZXhjZWVkc19saW1pdCI6IkZpbGUgZXhjZWVkcyBzaXplIGxpbWl0IiwiaWxsZWdhbF9leHRlbnNpb24iOiJUaGlzIHR5cGUgb2YgZmlsZSBpcyBub3QgYWxsb3dlZC4iLCJtYXhfcmVhY2hlZCI6Ik1heGltdW0gbnVtYmVyIG9mIGZpbGVzIHJlYWNoZWQiLCJ1bmtub3duX2Vycm9yIjoiVGhlcmUgd2FzIGEgcHJvYmxlbSB3aGlsZSBzYXZpbmcgdGhlIGZpbGUgb24gdGhlIHNlcnZlciIsImN1cnJlbnRseV91cGxvYWRpbmciOiJQbGVhc2Ugd2FpdCBmb3IgdGhlIHVwbG9hZGluZyB0byBjb21wbGV0ZSIsImNhbmNlbCI6IkNhbmNlbCIsImNhbmNlbF91cGxvYWQiOiJDYW5jZWwgdGhpcyB1cGxvYWQiLCJjYW5jZWxsZWQiOiJDYW5jZWxsZWQifSwidmFycyI6eyJpbWFnZXNfdXJsIjoiaHR0cHM6XC9cL2pvdXJuZXlwdXJlLmNvbVwvd3AtY29udGVudFwvcGx1Z2luc1wvZ3Jhdml0eWZvcm1zXC9pbWFnZXMifX07CnZhciBnZl9nbG9iYWwgPSB7ImdmX2N1cnJlbmN5X2NvbmZpZyI6eyJuYW1lIjoiVS5TLiBEb2xsYXIiLCJzeW1ib2xfbGVmdCI6IiQiLCJzeW1ib2xfcmlnaHQiOiIiLCJzeW1ib2xfcGFkZGluZyI6IiIsInRob3VzYW5kX3NlcGFyYXRvciI6IiwiLCJkZWNpbWFsX3NlcGFyYXRvciI6Ii4iLCJkZWNpbWFscyI6MiwiY29kZSI6IlVTRCJ9LCJiYXNlX3VybCI6Imh0dHBzOlwvXC9qb3VybmV5cHVyZS5jb21cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2dyYXZpdHlmb3JtcyIsIm51bWJlcl9mb3JtYXRzIjpbXSwic3Bpbm5lclVybCI6Imh0dHBzOlwvXC9qb3VybmV5cHVyZS5jb21cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2dyYXZpdHlmb3Jtc1wvaW1hZ2VzXC9zcGlubmVyLnN2ZyIsInZlcnNpb25faGFzaCI6IjNhOTU4MDMxZDI4ZWE0YmQyMjczZTgzMGVhMmUzMDExIiwic3RyaW5ncyI6eyJuZXdSb3dBZGRlZCI6Ik5ldyByb3cgYWRkZWQuIiwicm93UmVtb3ZlZCI6IlJvdyByZW1vdmVkIiwiZm9ybVNhdmVkIjoiVGhlIGZvcm0gaGFzIGJlZW4gc2F2ZWQuICBUaGUgY29udGVudCBjb250YWlucyB0aGUgbGluayB0byByZXR1cm4gYW5kIGNvbXBsZXRlIHRoZSBmb3JtLiJ9fTsKdmFyIGdmX2xlZ2FjeSA9IHsiaXNfbGVnYWN5IjoiIn07CnZhciBnZl9nbG9iYWwgPSB7ImdmX2N1cnJlbmN5X2NvbmZpZyI6eyJuYW1lIjoiVS5TLiBEb2xsYXIiLCJzeW1ib2xfbGVmdCI6IiQiLCJzeW1ib2xfcmlnaHQiOiIiLCJzeW1ib2xfcGFkZGluZyI6IiIsInRob3VzYW5kX3NlcGFyYXRvciI6IiwiLCJkZWNpbWFsX3NlcGFyYXRvciI6Ii4iLCJkZWNpbWFscyI6MiwiY29kZSI6IlVTRCJ9LCJiYXNlX3VybCI6Imh0dHBzOlwvXC9qb3VybmV5cHVyZS5jb21cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2dyYXZpdHlmb3JtcyIsIm51bWJlcl9mb3JtYXRzIjpbXSwic3Bpbm5lclVybCI6Imh0dHBzOlwvXC9qb3VybmV5cHVyZS5jb21cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2dyYXZpdHlmb3Jtc1wvaW1hZ2VzXC9zcGlubmVyLnN2ZyIsInZlcnNpb25faGFzaCI6IjNhOTU4MDMxZDI4ZWE0YmQyMjczZTgzMGVhMmUzMDExIiwic3RyaW5ncyI6eyJuZXdSb3dBZGRlZCI6Ik5ldyByb3cgYWRkZWQuIiwicm93UmVtb3ZlZCI6IlJvdyByZW1vdmVkIiwiZm9ybVNhdmVkIjoiVGhlIGZvcm0gaGFzIGJlZW4gc2F2ZWQuICBUaGUgY29udGVudCBjb250YWlucyB0aGUgbGluayB0byByZXR1cm4gYW5kIGNvbXBsZXRlIHRoZSBmb3JtLiJ9fTsKLyogXV0+ICovCg==
7 ms
gravityforms.min.js
212 ms
jquery.maskedinput.min.js
214 ms
placeholders.jquery.min.js
214 ms
utils.min.js
227 ms
vendor-theme.min.js
234 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwp2YXIgZ2Zvcm1fdGhlbWVfY29uZmlnID0geyJjb21tb24iOnsiZm9ybSI6eyJob25leXBvdCI6eyJ2ZXJzaW9uX2hhc2giOiIzYTk1ODAzMWQyOGVhNGJkMjI3M2U4MzBlYTJlMzAxMSJ9fX0sImhtcl9kZXYiOiIiLCJwdWJsaWNfcGF0aCI6Imh0dHBzOlwvXC9qb3VybmV5cHVyZS5jb21cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2dyYXZpdHlmb3Jtc1wvYXNzZXRzXC9qc1wvZGlzdFwvIn07Ci8qIF1dPiAqLwo=
6 ms
scripts-theme.min.js
238 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwp2YXIgZ2ZfbGVnYWN5ID0geyJpc19sZWdhY3kiOiIifTsKLyogXV0+ICovCg==
5 ms
conditional_logic.min.js
243 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwogZ2Zvcm0uaW5pdGlhbGl6ZU9uTG9hZGVkKCBmdW5jdGlvbigpIHsgalF1ZXJ5KGRvY3VtZW50KS5vbignZ2Zvcm1fcG9zdF9yZW5kZXInLCBmdW5jdGlvbihldmVudCwgZm9ybUlkLCBjdXJyZW50UGFnZSl7aWYoZm9ybUlkID09IDMpIHtpZih0eXBlb2YgUGxhY2Vob2xkZXJzICE9ICd1bmRlZmluZWQnKXsKICAgICAgICAgICAgICAgICAgICAgICAgUGxhY2Vob2xkZXJzLmVuYWJsZSgpOwogICAgICAgICAgICAgICAgICAgIH1qUXVlcnkoJyNpbnB1dF8zXzEnKS5tYXNrKCcoOTk5KSA5OTktOTk5OScpLmJpbmQoJ2tleXByZXNzJywgZnVuY3Rpb24oZSl7aWYoZS53aGljaCA9PSAxMyl7alF1ZXJ5KHRoaXMpLmJsdXIoKTt9IH0gKTt9IH0gKTtqUXVlcnkoZG9jdW1lbnQpLm9uKCdnZm9ybV9wb3N0X2NvbmRpdGlvbmFsX2xvZ2ljJywgZnVuY3Rpb24oZXZlbnQsIGZvcm1JZCwgZmllbGRzLCBpc0luaXQpe30gKSB9ICk7IAovKiBdXT4gKi8K
5 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwogZ2Zvcm0uaW5pdGlhbGl6ZU9uTG9hZGVkKCBmdW5jdGlvbigpIHtqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoImdmb3JtX3ByZV9wb3N0X3JlbmRlciIsIFt7IGZvcm1JZDogIjMiLCBjdXJyZW50UGFnZTogIjEiLCBhYm9ydDogZnVuY3Rpb24oKSB7IHRoaXMucHJldmVudERlZmF1bHQoKTsgfSB9XSk7ICAgICAgICAgICAgICAgIGlmIChldmVudCAmJiBldmVudC5kZWZhdWx0UHJldmVudGVkKSB7ICAgICAgICAgICAgICAgIHJldHVybjsgICAgICAgICB9ICAgICAgICBjb25zdCBnZm9ybVdyYXBwZXJEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggImdmb3JtX3dyYXBwZXJfMyIgKTsgICAgICAgIGlmICggZ2Zvcm1XcmFwcGVyRGl2ICkgeyAgICAgICAgICAgIGNvbnN0IHZpc2liaWxpdHlTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNwYW4iICk7ICAgICAgICAgICAgdmlzaWJpbGl0eVNwYW4uaWQgPSAiZ2Zvcm1fdmlzaWJpbGl0eV90ZXN0XzMiOyAgICAgICAgICAgIGdmb3JtV3JhcHBlckRpdi5pbnNlcnRBZGphY2VudEVsZW1lbnQoICJhZnRlcmVuZCIsIHZpc2liaWxpdHlTcGFuICk7ICAgICAgICB9ICAgICAgICBjb25zdCB2aXNpYmlsaXR5VGVzdERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAiZ2Zvcm1fdmlzaWJpbGl0eV90ZXN0XzMiICk7ICAgICAgICBsZXQgcG9zdFJlbmRlckZpcmVkID0gZmFsc2U7ICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRyaWdnZXJQb3N0UmVuZGVyKCkgeyAgICAgICAgICAgIGlmICggcG9zdFJlbmRlckZpcmVkICkgeyAgICAgICAgICAgICAgICByZXR1cm47ICAgICAgICAgICAgfSAgICAgICAgICAgIHBvc3RSZW5kZXJGaXJlZCA9IHRydWU7ICAgICAgICAgICAgalF1ZXJ5KCBkb2N1bWVudCApLnRyaWdnZXIoICdnZm9ybV9wb3N0X3JlbmRlcicsIFszLCAxXSApOyAgICAgICAgICAgIGdmb3JtLnV0aWxzLnRyaWdnZXIoIHsgZXZlbnQ6ICdnZm9ybS9wb3N0UmVuZGVyJywgbmF0aXZlOiBmYWxzZSwgZGF0YTogeyBmb3JtSWQ6IDMsIGN1cnJlbnRQYWdlOiAxIH0gfSApOyAgICAgICAgICAgIGlmICggdmlzaWJpbGl0eVRlc3REaXYgKSB7ICAgICAgICAgICAgICAgIHZpc2liaWxpdHlUZXN0RGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHZpc2liaWxpdHlUZXN0RGl2ICk7ICAgICAgICAgICAgfSAgICAgICAgfSAgICAgICAgZnVuY3Rpb24gZGVib3VuY2UoIGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSApIHsgICAgICAgICAgICB2YXIgdGltZW91dDsgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7ICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgICAgICAgICAgICAgICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7ICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDsgICAgICAgICAgICAgICAgICAgIGlmICggIWltbWVkaWF0ZSApIGZ1bmMuYXBwbHkoIGNvbnRleHQsIGFyZ3MgKTsgICAgICAgICAgICAgICAgfTsgICAgICAgICAgICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7ICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCggdGltZW91dCApOyAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCggbGF0ZXIsIHdhaXQgKTsgICAgICAgICAgICAgICAgaWYgKCBjYWxsTm93ICkgZnVuYy5hcHBseSggY29udGV4dCwgYXJncyApOyAgICAgICAgICAgIH07ICAgICAgICB9ICAgICAgICBjb25zdCBkZWJvdW5jZWRUcmlnZ2VyUG9zdFJlbmRlciA9IGRlYm91bmNlKCBmdW5jdGlvbigpIHsgICAgICAgICAgICB0cmlnZ2VyUG9zdFJlbmRlcigpOyAgICAgICAgfSwgMjAwICk7ICAgICAgICBpZiAoIHZpc2liaWxpdHlUZXN0RGl2ICYmIHZpc2liaWxpdHlUZXN0RGl2Lm9mZnNldFBhcmVudCA9PT0gbnVsbCApIHsgICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCAoIG11dGF0aW9ucyApID0+IHsgICAgICAgICAgICAgICAgbXV0YXRpb25zLmZvckVhY2goICggbXV0YXRpb24gKSA9PiB7ICAgICAgICAgICAgICAgICAgICBpZiAoIG11dGF0aW9uLnR5cGUgPT09ICdhdHRyaWJ1dGVzJyAmJiB2aXNpYmlsaXR5VGVzdERpdi5vZmZzZXRQYXJlbnQgIT09IG51bGwgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VkVHJpZ2dlclBvc3RSZW5kZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7ICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgIH0pOyAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoIGRvY3VtZW50LmJvZHksIHsgICAgICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwgICAgICAgICAgICAgICAgY2hpbGRMaXN0OiBmYWxzZSwgICAgICAgICAgICAgICAgc3VidHJlZTogdHJ1ZSwgICAgICAgICAgICAgICAgYXR0cmlidXRlRmlsdGVyOiBbICdzdHlsZScsICdjbGFzcycgXSwgICAgICAgICAgICB9KTsgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgdHJpZ2dlclBvc3RSZW5kZXIoKTsgICAgICAgIH0gICAgfSApOyAKLyogXV0+ICovCg==
5 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwogZ2Zvcm0uaW5pdGlhbGl6ZU9uTG9hZGVkKCBmdW5jdGlvbigpIHsgalF1ZXJ5KGRvY3VtZW50KS5vbignZ2Zvcm1fcG9zdF9yZW5kZXInLCBmdW5jdGlvbihldmVudCwgZm9ybUlkLCBjdXJyZW50UGFnZSl7aWYoZm9ybUlkID09IDIpIHtnZl9nbG9iYWxbIm51bWJlcl9mb3JtYXRzIl1bMl0gPSB7IjgiOnsicHJpY2UiOmZhbHNlLCJ2YWx1ZSI6ZmFsc2V9LCI3Ijp7InByaWNlIjpmYWxzZSwidmFsdWUiOmZhbHNlfSwiMSI6eyJwcmljZSI6ZmFsc2UsInZhbHVlIjpmYWxzZX0sIjMiOnsicHJpY2UiOmZhbHNlLCJ2YWx1ZSI6ZmFsc2V9LCI0Ijp7InByaWNlIjpmYWxzZSwidmFsdWUiOmZhbHNlfSwiNiI6eyJwcmljZSI6ZmFsc2UsInZhbHVlIjpmYWxzZX0sIjUiOnsicHJpY2UiOmZhbHNlLCJ2YWx1ZSI6ZmFsc2V9fTtpZih3aW5kb3dbJ2pRdWVyeSddKXtpZighd2luZG93WydnZl9mb3JtX2NvbmRpdGlvbmFsX2xvZ2ljJ10pd2luZG93WydnZl9mb3JtX2NvbmRpdGlvbmFsX2xvZ2ljJ10gPSBuZXcgQXJyYXkoKTt3aW5kb3dbJ2dmX2Zvcm1fY29uZGl0aW9uYWxfbG9naWMnXVsyXSA9IHsgbG9naWM6IHsgNzogeyJmaWVsZCI6eyJlbmFibGVkIjp0cnVlLCJhY3Rpb25UeXBlIjoic2hvdyIsImxvZ2ljVHlwZSI6ImFsbCIsInJ1bGVzIjpbeyJmaWVsZElkIjoiOCIsIm9wZXJhdG9yIjoiaXMiLCJ2YWx1ZSI6IlVwbG9hZCBhIHBpY3R1cmUgb2YgbXkgaW5zdXJhbmNlIGNhcmQifV19LCJuZXh0QnV0dG9uIjpudWxsLCJzZWN0aW9uIjpudWxsfSwxOiB7ImZpZWxkIjp7ImVuYWJsZWQiOnRydWUsImFjdGlvblR5cGUiOiJzaG93IiwibG9naWNUeXBlIjoiYWxsIiwicnVsZXMiOlt7ImZpZWxkSWQiOiI4Iiwib3BlcmF0b3IiOiJpcyIsInZhbHVlIjoiRW50ZXIgbXkgaW5mb3JtYXRpb24gbWFudWFsbHkifV19LCJuZXh0QnV0dG9uIjpudWxsLCJzZWN0aW9uIjpudWxsfSwzOiB7ImZpZWxkIjp7ImVuYWJsZWQiOnRydWUsImFjdGlvblR5cGUiOiJzaG93IiwibG9naWNUeXBlIjoiYWxsIiwicnVsZXMiOlt7ImZpZWxkSWQiOiI4Iiwib3BlcmF0b3IiOiJpcyIsInZhbHVlIjoiRW50ZXIgbXkgaW5mb3JtYXRpb24gbWFudWFsbHkifV19LCJuZXh0QnV0dG9uIjpudWxsLCJzZWN0aW9uIjpudWxsfSw0OiB7ImZpZWxkIjp7ImVuYWJsZWQiOnRydWUsImFjdGlvblR5cGUiOiJzaG93IiwibG9naWNUeXBlIjoiYWxsIiwicnVsZXMiOlt7ImZpZWxkSWQiOiI4Iiwib3BlcmF0b3IiOiJpcyIsInZhbHVlIjoiRW50ZXIgbXkgaW5mb3JtYXRpb24gbWFudWFsbHkifV19LCJuZXh0QnV0dG9uIjpudWxsLCJzZWN0aW9uIjpudWxsfSw1OiB7ImZpZWxkIjp7ImVuYWJsZWQiOnRydWUsImFjdGlvblR5cGUiOiJzaG93IiwibG9naWNUeXBlIjoiYWxsIiwicnVsZXMiOlt7ImZpZWxkSWQiOiI4Iiwib3BlcmF0b3IiOiJpcyIsInZhbHVlIjoiRW50ZXIgbXkgaW5mb3JtYXRpb24gbWFudWFsbHkifV19LCJuZXh0QnV0dG9uIjpudWxsLCJzZWN0aW9uIjpudWxsfSB9LCBkZXBlbmRlbnRzOiB7IDc6IFs3XSwxOiBbMV0sMzogWzNdLDQ6IFs0XSw1OiBbNV0gfSwgYW5pbWF0aW9uOiAwLCBkZWZhdWx0czogeyI4IjpbImNob2ljZV8yXzhfMCJdLCIxIjp7IjEuMiI6IiIsIjEuMyI6IiIsIjEuNCI6IiIsIjEuNiI6IiIsIjEuOCI6IiJ9LCI1Ijp7Im0iOiIiLCJkIjoiIiwieSI6IiJ9fSwgZmllbGRzOiB7IjgiOls3LDEsMyw0LDVdLCI3IjpbXSwiMSI6W10sIjMiOltdLCI0IjpbXSwiNiI6W10sIjUiOltdfSB9OyBpZighd2luZG93WydnZl9udW1iZXJfZm9ybWF0J10pd2luZG93WydnZl9udW1iZXJfZm9ybWF0J10gPSAnZGVjaW1hbF9kb3QnO2pRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtnZm9ybS51dGlscy50cmlnZ2VyKHsgZXZlbnQ6ICdnZm9ybS9jb25kaXRpb25hbExvZ2ljL2luaXQvc3RhcnQnLCBuYXRpdmU6IGZhbHNlLCBkYXRhOiB7IGZvcm1JZDogMiwgZmllbGRzOiBudWxsLCBpc0luaXQ6IHRydWUgfSB9KTt3aW5kb3dbJ2dmb3JtSW5pdFByaWNlRmllbGRzJ10oKTtnZl9hcHBseV9ydWxlcygyLCBbNywxLDMsNCw1XSwgdHJ1ZSk7alF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl8yJykuc2hvdygpO2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfMiBmb3JtJykuY3NzKCdvcGFjaXR5JywgJycpO2pRdWVyeShkb2N1bWVudCkudHJpZ2dlcignZ2Zvcm1fcG9zdF9jb25kaXRpb25hbF9sb2dpYycsIFsyLCBudWxsLCB0cnVlXSk7Z2Zvcm0udXRpbHMudHJpZ2dlcih7IGV2ZW50OiAnZ2Zvcm0vY29uZGl0aW9uYWxMb2dpYy9pbml0L2VuZCcsIG5hdGl2ZTogZmFsc2UsIGRhdGE6IHsgZm9ybUlkOiAyLCBmaWVsZHM6IG51bGwsIGlzSW5pdDogdHJ1ZSB9IH0pO30gKTt9IGlmKHR5cGVvZiBQbGFjZWhvbGRlcnMgIT0gJ3VuZGVmaW5lZCcpewogICAgICAgICAgICAgICAgICAgICAgICBQbGFjZWhvbGRlcnMuZW5hYmxlKCk7CiAgICAgICAgICAgICAgICAgICAgfWpRdWVyeSgnI2lucHV0XzJfNicpLm1hc2soJyg5OTkpIDk5OS05OTk5JykuYmluZCgna2V5cHJlc3MnLCBmdW5jdGlvbihlKXtpZihlLndoaWNoID09IDEzKXtqUXVlcnkodGhpcykuYmx1cigpO30gfSApO30gfSApO2pRdWVyeShkb2N1bWVudCkub24oJ2dmb3JtX3Bvc3RfY29uZGl0aW9uYWxfbG9naWMnLCBmdW5jdGlvbihldmVudCwgZm9ybUlkLCBmaWVsZHMsIGlzSW5pdCl7fSApIH0gKTsgCi8qIF1dPiAqLwo=
5 ms
javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwogZ2Zvcm0uaW5pdGlhbGl6ZU9uTG9hZGVkKCBmdW5jdGlvbigpIHtqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoImdmb3JtX3ByZV9wb3N0X3JlbmRlciIsIFt7IGZvcm1JZDogIjIiLCBjdXJyZW50UGFnZTogIjEiLCBhYm9ydDogZnVuY3Rpb24oKSB7IHRoaXMucHJldmVudERlZmF1bHQoKTsgfSB9XSk7ICAgICAgICAgICAgICAgIGlmIChldmVudCAmJiBldmVudC5kZWZhdWx0UHJldmVudGVkKSB7ICAgICAgICAgICAgICAgIHJldHVybjsgICAgICAgICB9ICAgICAgICBjb25zdCBnZm9ybVdyYXBwZXJEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggImdmb3JtX3dyYXBwZXJfMiIgKTsgICAgICAgIGlmICggZ2Zvcm1XcmFwcGVyRGl2ICkgeyAgICAgICAgICAgIGNvbnN0IHZpc2liaWxpdHlTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNwYW4iICk7ICAgICAgICAgICAgdmlzaWJpbGl0eVNwYW4uaWQgPSAiZ2Zvcm1fdmlzaWJpbGl0eV90ZXN0XzIiOyAgICAgICAgICAgIGdmb3JtV3JhcHBlckRpdi5pbnNlcnRBZGphY2VudEVsZW1lbnQoICJhZnRlcmVuZCIsIHZpc2liaWxpdHlTcGFuICk7ICAgICAgICB9ICAgICAgICBjb25zdCB2aXNpYmlsaXR5VGVzdERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAiZ2Zvcm1fdmlzaWJpbGl0eV90ZXN0XzIiICk7ICAgICAgICBsZXQgcG9zdFJlbmRlckZpcmVkID0gZmFsc2U7ICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRyaWdnZXJQb3N0UmVuZGVyKCkgeyAgICAgICAgICAgIGlmICggcG9zdFJlbmRlckZpcmVkICkgeyAgICAgICAgICAgICAgICByZXR1cm47ICAgICAgICAgICAgfSAgICAgICAgICAgIHBvc3RSZW5kZXJGaXJlZCA9IHRydWU7ICAgICAgICAgICAgalF1ZXJ5KCBkb2N1bWVudCApLnRyaWdnZXIoICdnZm9ybV9wb3N0X3JlbmRlcicsIFsyLCAxXSApOyAgICAgICAgICAgIGdmb3JtLnV0aWxzLnRyaWdnZXIoIHsgZXZlbnQ6ICdnZm9ybS9wb3N0UmVuZGVyJywgbmF0aXZlOiBmYWxzZSwgZGF0YTogeyBmb3JtSWQ6IDIsIGN1cnJlbnRQYWdlOiAxIH0gfSApOyAgICAgICAgICAgIGlmICggdmlzaWJpbGl0eVRlc3REaXYgKSB7ICAgICAgICAgICAgICAgIHZpc2liaWxpdHlUZXN0RGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHZpc2liaWxpdHlUZXN0RGl2ICk7ICAgICAgICAgICAgfSAgICAgICAgfSAgICAgICAgZnVuY3Rpb24gZGVib3VuY2UoIGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSApIHsgICAgICAgICAgICB2YXIgdGltZW91dDsgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7ICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgICAgICAgICAgICAgICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7ICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDsgICAgICAgICAgICAgICAgICAgIGlmICggIWltbWVkaWF0ZSApIGZ1bmMuYXBwbHkoIGNvbnRleHQsIGFyZ3MgKTsgICAgICAgICAgICAgICAgfTsgICAgICAgICAgICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7ICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCggdGltZW91dCApOyAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCggbGF0ZXIsIHdhaXQgKTsgICAgICAgICAgICAgICAgaWYgKCBjYWxsTm93ICkgZnVuYy5hcHBseSggY29udGV4dCwgYXJncyApOyAgICAgICAgICAgIH07ICAgICAgICB9ICAgICAgICBjb25zdCBkZWJvdW5jZWRUcmlnZ2VyUG9zdFJlbmRlciA9IGRlYm91bmNlKCBmdW5jdGlvbigpIHsgICAgICAgICAgICB0cmlnZ2VyUG9zdFJlbmRlcigpOyAgICAgICAgfSwgMjAwICk7ICAgICAgICBpZiAoIHZpc2liaWxpdHlUZXN0RGl2ICYmIHZpc2liaWxpdHlUZXN0RGl2Lm9mZnNldFBhcmVudCA9PT0gbnVsbCApIHsgICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCAoIG11dGF0aW9ucyApID0+IHsgICAgICAgICAgICAgICAgbXV0YXRpb25zLmZvckVhY2goICggbXV0YXRpb24gKSA9PiB7ICAgICAgICAgICAgICAgICAgICBpZiAoIG11dGF0aW9uLnR5cGUgPT09ICdhdHRyaWJ1dGVzJyAmJiB2aXNpYmlsaXR5VGVzdERpdi5vZmZzZXRQYXJlbnQgIT09IG51bGwgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VkVHJpZ2dlclBvc3RSZW5kZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7ICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgIH0pOyAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoIGRvY3VtZW50LmJvZHksIHsgICAgICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwgICAgICAgICAgICAgICAgY2hpbGRMaXN0OiBmYWxzZSwgICAgICAgICAgICAgICAgc3VidHJlZTogdHJ1ZSwgICAgICAgICAgICAgICAgYXR0cmlidXRlRmlsdGVyOiBbICdzdHlsZScsICdjbGFzcycgXSwgICAgICAgICAgICB9KTsgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgdHJpZ2dlclBvc3RSZW5kZXIoKTsgICAgICAgIH0gICAgfSApOyAKLyogXV0+ICovCg==
5 ms
main.bundle.js
103 ms
bootstrap.min.css
173 ms
gtm.js
71 ms
Gd1Dza355X8
333 ms
JourneyPure-addiction-treatment-logo.png
332 ms
JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCuM70w-.ttf
76 ms
JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCvr70w-.ttf
260 ms
JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCvC70w-.ttf
275 ms
JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCu170w-.ttf
294 ms
JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtZ6Ew-.ttf
290 ms
JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Ew-.ttf
293 ms
JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCs16Ew-.ttf
292 ms
JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCvr6Ew-.ttf
291 ms
JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Uw-.ttf
276 ms
quest_bg.png
266 ms
tick.png
66 ms
www-player.css
50 ms
www-embed-player.js
78 ms
base.js
111 ms
ad_status.js
202 ms
Uo_dhVY9o5gWds10f-QE3r7w2DYPAY7ZjhqsbDUx1y0.js
127 ms
embed.js
21 ms
KFOmCnqEu92Fr1Mu4mxP.ttf
41 ms
KFOlCnqEu92Fr1MmEU9fBBc9.ttf
43 ms
id
19 ms
outpatientjourneypure.com accessibility score
ARIA
These are opportunities to improve the usage of ARIA in your application which may enhance the experience for users of assistive technology, like a screen reader.
Impact
Issue
button, link, and menuitem elements do not have accessible names.
Contrast
These are opportunities to improve the legibility of your content.
Impact
Issue
Background and foreground colors do not have a sufficient contrast ratio.
Navigation
These are opportunities to improve keyboard navigation in your application.
Impact
Issue
Heading elements are not in a sequentially-descending order
Best practices
These items highlight common accessibility best practices.
Impact
Issue
[user-scalable="no"] is used in the <meta name="viewport"> element or the [maximum-scale] attribute is less than 5.
outpatientjourneypure.com best practices score
Trust and Safety
Impact
Issue
Does not use HTTPS
Includes front-end JavaScript libraries with known security vulnerabilities
Ensure CSP is effective against XSS attacks
General
Impact
Issue
Detected JavaScript libraries
Page has valid source maps
outpatientjourneypure.com SEO score
Crawling and Indexing
To appear in search results, crawlers need access to your app.
Impact
Issue
Links are not crawlable
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 Outpatientjourneypure.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 Outpatientjourneypure.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.
outpatientjourneypure.com
Open Graph data is detected on the main page of Outpatientjourneypure. This is the best way to make the web page social media friendly. Here is how it looks like on Facebook: